From 3d7d174c70b2d00fd879ade64c5085d4ff34d4aa Mon Sep 17 00:00:00 2001 From: Ray Date: Mon, 20 May 2019 16:40:30 +0200 Subject: Review and recompile ALL examples --- examples/src/audio/audio_module_playing.c | 40 +- examples/src/audio/audio_music_stream.c | 26 +- examples/src/audio/audio_raw_stream.c | 60 +- examples/src/audio/audio_sound_loading.c | 10 +- examples/src/core/core_2d_camera.c | 64 +- examples/src/core/core_3d_camera_first_person.c | 18 +- examples/src/core/core_3d_camera_free.c | 16 +- examples/src/core/core_3d_camera_mode.c | 4 +- examples/src/core/core_3d_picking.c | 6 +- examples/src/core/core_basic_window.c | 12 +- examples/src/core/core_custom_logging.c | 96 +- examples/src/core/core_drop_files.c | 20 +- examples/src/core/core_input_gamepad.c | 66 +- examples/src/core/core_input_gestures.c | 40 +- examples/src/core/core_input_keys.c | 8 +- examples/src/core/core_input_mouse.c | 12 +- examples/src/core/core_input_mouse_wheel.c | 8 +- examples/src/core/core_input_multitouch.c | 24 +- examples/src/core/core_loading_thread.c | 26 +- examples/src/core/core_random_values.c | 10 +- examples/src/core/core_storage_values.c | 23 +- examples/src/core/core_vr_simulator.c | 30 +- examples/src/core/core_window_letterbox.c | 40 +- examples/src/core/core_world_screen.c | 14 +- examples/src/models/models_animation.c | 10 +- examples/src/models/models_billboard.c | 16 +- examples/src/models/models_box_collisions.c | 58 +- examples/src/models/models_cubicmap.c | 18 +- examples/src/models/models_first_person_maze.c | 34 +- examples/src/models/models_geometric_shapes.c | 8 +- examples/src/models/models_heightmap.c | 12 +- examples/src/models/models_material_pbr.c | 83 +- examples/src/models/models_mesh_generation.c | 36 +- examples/src/models/models_mesh_picking.c | 79 +- examples/src/models/models_obj_loading.c | 8 +- examples/src/models/models_obj_viewer.c | 8 +- .../src/models/models_orthographic_projection.c | 18 +- examples/src/models/models_rlgl_solar_system.c | 30 +- examples/src/models/models_skybox.c | 32 +- examples/src/models/models_yaw_pitch_roll.c | 9 +- examples/src/physac/physics_demo.c | 20 +- examples/src/physac/physics_friction.c | 16 +- examples/src/physac/physics_movement.c | 18 +- examples/src/physac/physics_restitution.c | 18 +- examples/src/physac/physics_shatter.c | 14 +- examples/src/shaders/shaders_custom_uniform.c | 38 +- examples/src/shaders/shaders_eratosthenes.c | 8 +- examples/src/shaders/shaders_julia_set.c | 47 +- examples/src/shaders/shaders_model_shader.c | 19 +- examples/src/shaders/shaders_palette_switch.c | 12 +- examples/src/shaders/shaders_postprocessing.c | 44 +- examples/src/shaders/shaders_raymarching.c | 12 +- examples/src/shaders/shaders_shapes_textures.c | 36 +- examples/src/shaders/shaders_texture_drawing.c | 19 +- examples/src/shaders/shaders_texture_waves.c | 75 +- examples/src/shapes/shapes_basic_shapes.c | 10 +- examples/src/shapes/shapes_bouncing_ball.c | 34 +- examples/src/shapes/shapes_collision_area.c | 86 +- examples/src/shapes/shapes_colors_palette.c | 20 +- examples/src/shapes/shapes_draw_circle_sector.c | 4 +- .../src/shapes/shapes_draw_rectangle_rounded.c | 22 +- examples/src/shapes/shapes_draw_ring.c | 30 +- examples/src/shapes/shapes_easings_ball_anim.c | 28 +- examples/src/shapes/shapes_easings_box_anim.c | 36 +- .../src/shapes/shapes_easings_rectangle_array.c | 36 +- examples/src/shapes/shapes_following_eyes.c | 30 +- examples/src/shapes/shapes_lines_bezier.c | 18 +- examples/src/shapes/shapes_logo_raylib.c | 10 +- examples/src/shapes/shapes_logo_raylib_anim.c | 8 +- examples/src/shapes/shapes_rectangle_scaling.c | 38 +- examples/src/text/text_bmfont_ttf.c | 16 +- examples/src/text/text_font_sdf.c | 48 +- examples/src/text/text_format_text.c | 8 +- examples/src/text/text_input_box.c | 28 +- examples/src/text/text_raylib_fonts.c | 36 +- examples/src/text/text_rectangle_bounds.c | 56 +- examples/src/text/text_sprite_fonts.c | 7 +- examples/src/text/text_ttf_loading.c | 63 +- examples/src/text/text_unicode.c | 91 +- examples/src/text/text_writing_anim.c | 20 +- .../src/textures/textures_background_scrolling.c | 22 +- examples/src/textures/textures_bunnymark.c | 25 +- examples/src/textures/textures_image_drawing.c | 20 +- examples/src/textures/textures_image_generation.c | 28 +- examples/src/textures/textures_image_loading.c | 6 +- examples/src/textures/textures_image_processing.c | 46 +- examples/src/textures/textures_image_text.c | 28 +- examples/src/textures/textures_logo_raylib.c | 6 +- examples/src/textures/textures_npatch_drawing.c | 18 +- .../src/textures/textures_particles_blending.c | 40 +- examples/src/textures/textures_raw_data.c | 30 +- examples/src/textures/textures_rectangle.c | 28 +- examples/src/textures/textures_sprite_button.c | 36 +- examples/src/textures/textures_sprite_explosion.c | 58 +- examples/src/textures/textures_srcrec_dstrec.c | 21 +- examples/src/textures/textures_to_image.c | 12 +- examples/web/Makefile | 223 +- examples/web/audio/audio_module_playing.c | 38 +- examples/web/audio/audio_module_playing.data | Bin 0 -> 25676 bytes examples/web/audio/audio_module_playing.html | 1 + examples/web/audio/audio_module_playing.js | 1 + examples/web/audio/audio_module_playing.wasm | Bin 0 -> 256434 bytes examples/web/audio/audio_music_stream.c | 32 +- examples/web/audio/audio_music_stream.data | Bin 0 -> 63574 bytes examples/web/audio/audio_music_stream.html | 1 + examples/web/audio/audio_music_stream.js | 1 + examples/web/audio/audio_music_stream.wasm | Bin 0 -> 255919 bytes examples/web/audio/audio_raw_stream.c | 26 +- examples/web/audio/audio_raw_stream.html | 1 + examples/web/audio/audio_raw_stream.js | 1 + examples/web/audio/audio_raw_stream.wasm | Bin 0 -> 162476 bytes examples/web/audio/audio_sound_loading.c | 14 +- examples/web/audio/audio_sound_loading.data | Bin 0 -> 63574 bytes examples/web/audio/audio_sound_loading.html | 1 + examples/web/audio/audio_sound_loading.js | 1 + examples/web/audio/audio_sound_loading.wasm | Bin 0 -> 229868 bytes examples/web/build_examples.bat | 105 + examples/web/core/core_2d_camera.c | 66 +- examples/web/core/core_2d_camera.html | 1 + examples/web/core/core_2d_camera.js | 1 + examples/web/core/core_2d_camera.wasm | Bin 0 -> 118974 bytes examples/web/core/core_3d_camera_first_person.c | 35 +- examples/web/core/core_3d_camera_first_person.html | 1 + examples/web/core/core_3d_camera_first_person.js | 1 + examples/web/core/core_3d_camera_first_person.wasm | Bin 0 -> 126510 bytes examples/web/core/core_3d_camera_free.c | 21 +- examples/web/core/core_3d_camera_free.html | 1 + examples/web/core/core_3d_camera_free.js | 1 + examples/web/core/core_3d_camera_free.wasm | Bin 0 -> 126016 bytes examples/web/core/core_3d_camera_mode.c | 6 +- examples/web/core/core_3d_camera_mode.html | 1 + examples/web/core/core_3d_camera_mode.js | 1 + examples/web/core/core_3d_camera_mode.wasm | Bin 0 -> 122009 bytes examples/web/core/core_3d_picking.c | 37 +- examples/web/core/core_3d_picking.html | 1 + examples/web/core/core_3d_picking.js | 1 + examples/web/core/core_3d_picking.wasm | Bin 0 -> 128506 bytes examples/web/core/core_basic_window.c | 8 +- examples/web/core/core_basic_window.html | 1 + examples/web/core/core_basic_window.js | 1 + examples/web/core/core_basic_window.wasm | Bin 0 -> 114805 bytes examples/web/core/core_custom_logging.c | 65 +- examples/web/core/core_custom_logging.html | 1 + examples/web/core/core_custom_logging.js | 1 + examples/web/core/core_custom_logging.wasm | Bin 0 -> 115287 bytes examples/web/core/core_drop_files.c | 17 +- examples/web/core/core_drop_files.html | 1 + examples/web/core/core_drop_files.js | 1 + examples/web/core/core_drop_files.wasm | Bin 0 -> 116024 bytes examples/web/core/core_input_gamepad.c | 138 +- examples/web/core/core_input_gamepad.data | Bin 0 -> 35522 bytes examples/web/core/core_input_gamepad.html | 1 + examples/web/core/core_input_gamepad.js | 1 + examples/web/core/core_input_gamepad.wasm | Bin 0 -> 141153 bytes examples/web/core/core_input_gestures.c | 34 +- examples/web/core/core_input_gestures.html | 1 + examples/web/core/core_input_gestures.js | 1 + examples/web/core/core_input_gestures.wasm | Bin 0 -> 118079 bytes examples/web/core/core_input_keys.c | 13 +- examples/web/core/core_input_keys.html | 1 + examples/web/core/core_input_keys.js | 1 + examples/web/core/core_input_keys.wasm | Bin 0 -> 115048 bytes examples/web/core/core_input_mouse.c | 10 +- examples/web/core/core_input_mouse.html | 1 + examples/web/core/core_input_mouse.js | 1 + examples/web/core/core_input_mouse.wasm | Bin 0 -> 115032 bytes examples/web/core/core_input_mouse_wheel.c | 6 +- examples/web/core/core_input_mouse_wheel.html | 1 + examples/web/core/core_input_mouse_wheel.js | 1 + examples/web/core/core_input_mouse_wheel.wasm | Bin 0 -> 115664 bytes examples/web/core/core_input_multitouch.c | 16 +- examples/web/core/core_input_multitouch.html | 1 + examples/web/core/core_input_multitouch.js | 1 + examples/web/core/core_input_multitouch.wasm | Bin 0 -> 115664 bytes examples/web/core/core_loading_thread.c | 74 +- examples/web/core/core_loading_thread.html | 1 + examples/web/core/core_loading_thread.js | 1 + examples/web/core/core_loading_thread.wasm | Bin 0 -> 116053 bytes examples/web/core/core_random_values.c | 14 +- examples/web/core/core_random_values.html | 1 + examples/web/core/core_random_values.js | 1 + examples/web/core/core_random_values.wasm | Bin 0 -> 114971 bytes examples/web/core/core_storage_values.c | 16 +- examples/web/core/core_storage_values.html | 1 + examples/web/core/core_storage_values.js | 1 + examples/web/core/core_storage_values.wasm | Bin 0 -> 116803 bytes examples/web/core/core_vr_simulator.c | 77 +- examples/web/core/core_vr_simulator.data | 54 + examples/web/core/core_vr_simulator.html | 1 + examples/web/core/core_vr_simulator.js | 1 + examples/web/core/core_vr_simulator.wasm | Bin 0 -> 134285 bytes examples/web/core/core_window_letterbox.c | 136 +- examples/web/core/core_window_letterbox.html | 1 + examples/web/core/core_window_letterbox.js | 1 + examples/web/core/core_window_letterbox.wasm | Bin 0 -> 122471 bytes examples/web/core/core_world_screen.c | 29 +- examples/web/core/core_world_screen.html | 1 + examples/web/core/core_world_screen.js | 1 + examples/web/core/core_world_screen.wasm | Bin 0 -> 126320 bytes examples/web/models/models_animation.c | 8 +- examples/web/models/models_animation.data | Bin 0 -> 360040 bytes examples/web/models/models_animation.html | 1 + examples/web/models/models_animation.js | 1 + examples/web/models/models_animation.wasm | Bin 0 -> 229206 bytes examples/web/models/models_billboard.c | 29 +- examples/web/models/models_billboard.data | Bin 0 -> 22439 bytes examples/web/models/models_billboard.html | 1 + examples/web/models/models_billboard.js | 1 + examples/web/models/models_billboard.wasm | Bin 0 -> 149502 bytes examples/web/models/models_box_collisions.c | 66 +- examples/web/models/models_box_collisions.html | 1 + examples/web/models/models_box_collisions.js | 1 + examples/web/models/models_box_collisions.wasm | Bin 0 -> 124312 bytes examples/web/models/models_cubicmap.c | 34 +- examples/web/models/models_cubicmap.data | Bin 0 -> 37426 bytes examples/web/models/models_cubicmap.html | 1 + examples/web/models/models_cubicmap.js | 1 + examples/web/models/models_cubicmap.wasm | Bin 0 -> 164725 bytes examples/web/models/models_first_person_maze.c | 30 +- examples/web/models/models_first_person_maze.data | Bin 0 -> 37426 bytes examples/web/models/models_first_person_maze.html | 1 + examples/web/models/models_first_person_maze.js | 1 + examples/web/models/models_first_person_maze.wasm | Bin 0 -> 165359 bytes examples/web/models/models_geometric_shapes.c | 22 +- examples/web/models/models_geometric_shapes.html | 1 + examples/web/models/models_geometric_shapes.js | 1 + examples/web/models/models_geometric_shapes.wasm | Bin 0 -> 124836 bytes examples/web/models/models_heightmap.c | 37 +- examples/web/models/models_heightmap.data | Bin 0 -> 10920 bytes examples/web/models/models_heightmap.html | 1 + examples/web/models/models_heightmap.js | 1 + examples/web/models/models_heightmap.wasm | Bin 0 -> 159590 bytes examples/web/models/models_material_pbr.c | 44 +- examples/web/models/models_mesh_generation.c | 47 +- examples/web/models/models_mesh_generation.html | 1 + examples/web/models/models_mesh_generation.js | 1 + examples/web/models/models_mesh_generation.wasm | Bin 0 -> 154903 bytes examples/web/models/models_mesh_picking.c | 115 +- examples/web/models/models_obj_loading.c | 38 +- examples/web/models/models_obj_loading.data | 20267 ++++++++++++++++ examples/web/models/models_obj_loading.html | 1 + examples/web/models/models_obj_loading.js | 1 + examples/web/models/models_obj_loading.wasm | Bin 0 -> 221872 bytes examples/web/models/models_obj_viewer.c | 4 +- examples/web/models/models_obj_viewer.data | 3938 +++ examples/web/models/models_obj_viewer.html | 1 + examples/web/models/models_obj_viewer.js | 1 + examples/web/models/models_obj_viewer.wasm | Bin 0 -> 229134 bytes .../web/models/models_orthographic_projection.c | 14 +- .../web/models/models_orthographic_projection.html | 1 + .../web/models/models_orthographic_projection.js | 1 + .../web/models/models_orthographic_projection.wasm | Bin 0 -> 125202 bytes examples/web/models/models_rlgl_solar_system.c | 22 +- examples/web/models/models_rlgl_solar_system.html | 1 + examples/web/models/models_rlgl_solar_system.js | 1 + examples/web/models/models_rlgl_solar_system.wasm | Bin 0 -> 125118 bytes examples/web/models/models_skybox.c | 22 +- examples/web/models/models_yaw_pitch_roll.c | 91 +- examples/web/models/models_yaw_pitch_roll.data | 12539 ++++++++++ examples/web/models/models_yaw_pitch_roll.html | 1 + examples/web/models/models_yaw_pitch_roll.js | 1 + examples/web/models/models_yaw_pitch_roll.wasm | Bin 0 -> 230573 bytes examples/web/physac/physac.h | 2041 ++ examples/web/physac/physics_demo.c | 26 +- examples/web/physac/physics_demo.html | 1 + examples/web/physac/physics_demo.html.mem | Bin 0 -> 19020 bytes examples/web/physac/physics_demo.js | 1 + examples/web/physac/physics_demo.wasm | Bin 0 -> 150138 bytes examples/web/physac/physics_demo.worker.js | 184 + examples/web/physac/physics_friction.c | 24 +- examples/web/physac/physics_friction.html | 1 + examples/web/physac/physics_friction.html.mem | Bin 0 -> 18970 bytes examples/web/physac/physics_friction.js | 1 + examples/web/physac/physics_friction.wasm | Bin 0 -> 149838 bytes examples/web/physac/physics_friction.worker.js | 184 + examples/web/physac/physics_movement.c | 20 +- examples/web/physac/physics_movement.html | 1 + examples/web/physac/physics_movement.html.mem | Bin 0 -> 18976 bytes examples/web/physac/physics_movement.js | 1 + examples/web/physac/physics_movement.wasm | Bin 0 -> 148984 bytes examples/web/physac/physics_movement.worker.js | 184 + examples/web/physac/physics_restitution.c | 22 +- examples/web/physac/physics_restitution.html | 1 + examples/web/physac/physics_restitution.html.mem | Bin 0 -> 18978 bytes examples/web/physac/physics_restitution.js | 1 + examples/web/physac/physics_restitution.wasm | Bin 0 -> 150039 bytes examples/web/physac/physics_restitution.worker.js | 184 + examples/web/physac/physics_shatter.c | 20 +- examples/web/physac/physics_shatter.html | 1 + examples/web/physac/physics_shatter.html.mem | Bin 0 -> 18986 bytes examples/web/physac/physics_shatter.js | 1 + examples/web/physac/physics_shatter.wasm | Bin 0 -> 150652 bytes examples/web/physac/physics_shatter.worker.js | 184 + examples/web/shaders/shaders_custom_uniform.c | 82 +- examples/web/shaders/shaders_custom_uniform.data | 24148 +++++++++++++++++++ examples/web/shaders/shaders_custom_uniform.html | 1 + examples/web/shaders/shaders_custom_uniform.js | 1 + examples/web/shaders/shaders_custom_uniform.wasm | Bin 0 -> 229712 bytes examples/web/shaders/shaders_eratosthenes.c | 12 +- examples/web/shaders/shaders_julia_set.c | 40 +- examples/web/shaders/shaders_julia_set.data | 81 + examples/web/shaders/shaders_julia_set.html | 1 + examples/web/shaders/shaders_julia_set.js | 1 + examples/web/shaders/shaders_julia_set.wasm | Bin 0 -> 122684 bytes examples/web/shaders/shaders_model_shader.c | 54 +- examples/web/shaders/shaders_model_shader.data | 7680 ++++++ examples/web/shaders/shaders_model_shader.html | 1 + examples/web/shaders/shaders_model_shader.js | 1 + examples/web/shaders/shaders_model_shader.wasm | Bin 0 -> 226621 bytes examples/web/shaders/shaders_palette_switch.c | 18 +- examples/web/shaders/shaders_palette_switch.data | 29 + examples/web/shaders/shaders_palette_switch.html | 1 + examples/web/shaders/shaders_palette_switch.js | 1 + examples/web/shaders/shaders_palette_switch.wasm | Bin 0 -> 119062 bytes examples/web/shaders/shaders_postprocessing.c | 93 +- examples/web/shaders/shaders_postprocessing.data | 8145 +++++++ examples/web/shaders/shaders_postprocessing.html | 1 + examples/web/shaders/shaders_postprocessing.js | 1 + examples/web/shaders/shaders_postprocessing.wasm | Bin 0 -> 231333 bytes examples/web/shaders/shaders_raymarching.c | 20 +- examples/web/shaders/shaders_raymarching.data | 431 + examples/web/shaders/shaders_raymarching.html | 1 + examples/web/shaders/shaders_raymarching.js | 1 + examples/web/shaders/shaders_raymarching.wasm | Bin 0 -> 121833 bytes examples/web/shaders/shaders_shapes_textures.c | 54 +- examples/web/shaders/shaders_shapes_textures.data | Bin 0 -> 224000 bytes examples/web/shaders/shaders_shapes_textures.html | 1 + examples/web/shaders/shaders_shapes_textures.js | 1 + examples/web/shaders/shaders_shapes_textures.wasm | Bin 0 -> 145301 bytes examples/web/shaders/shaders_texture_drawing.c | 14 +- examples/web/shaders/shaders_texture_drawing.data | 60 + examples/web/shaders/shaders_texture_drawing.html | 1 + examples/web/shaders/shaders_texture_drawing.js | 1 + examples/web/shaders/shaders_texture_drawing.wasm | Bin 0 -> 118244 bytes examples/web/shaders/shaders_texture_waves.c | 58 +- examples/web/shaders/shaders_texture_waves.data | Bin 0 -> 23440 bytes examples/web/shaders/shaders_texture_waves.html | 1 + examples/web/shaders/shaders_texture_waves.js | 1 + examples/web/shaders/shaders_texture_waves.wasm | Bin 0 -> 142857 bytes examples/web/shapes/raygui.h | 142 +- examples/web/shapes/shapes_basic_shapes.c | 8 +- examples/web/shapes/shapes_basic_shapes.html | 1 + examples/web/shapes/shapes_basic_shapes.js | 1 + examples/web/shapes/shapes_basic_shapes.wasm | Bin 0 -> 118297 bytes examples/web/shapes/shapes_bouncing_ball.c | 28 +- examples/web/shapes/shapes_bouncing_ball.html | 1 + examples/web/shapes/shapes_bouncing_ball.js | 1 + examples/web/shapes/shapes_bouncing_ball.wasm | Bin 0 -> 115500 bytes examples/web/shapes/shapes_collision_area.c | 48 +- examples/web/shapes/shapes_collision_area.html | 1 + examples/web/shapes/shapes_collision_area.js | 1 + examples/web/shapes/shapes_collision_area.wasm | Bin 0 -> 117837 bytes examples/web/shapes/shapes_colors_palette.c | 24 +- examples/web/shapes/shapes_colors_palette.html | 1 + examples/web/shapes/shapes_colors_palette.js | 1 + examples/web/shapes/shapes_colors_palette.wasm | Bin 0 -> 117667 bytes examples/web/shapes/shapes_draw_circle_sector.c | 24 +- examples/web/shapes/shapes_draw_circle_sector.html | 1 + examples/web/shapes/shapes_draw_circle_sector.js | 1 + examples/web/shapes/shapes_draw_circle_sector.wasm | Bin 0 -> 121456 bytes .../web/shapes/shapes_draw_rectangle_rounded.c | 22 +- .../web/shapes/shapes_draw_rectangle_rounded.html | 1 + .../web/shapes/shapes_draw_rectangle_rounded.js | 1 + .../web/shapes/shapes_draw_rectangle_rounded.wasm | Bin 0 -> 126540 bytes examples/web/shapes/shapes_draw_ring.c | 28 +- examples/web/shapes/shapes_draw_ring.html | 1 + examples/web/shapes/shapes_draw_ring.js | 1 + examples/web/shapes/shapes_draw_ring.wasm | Bin 0 -> 124130 bytes examples/web/shapes/shapes_easings_ball_anim.c | 24 +- examples/web/shapes/shapes_easings_ball_anim.html | 1 + examples/web/shapes/shapes_easings_ball_anim.js | 1 + examples/web/shapes/shapes_easings_ball_anim.wasm | Bin 0 -> 118679 bytes examples/web/shapes/shapes_easings_box_anim.c | 34 +- examples/web/shapes/shapes_easings_box_anim.html | 1 + examples/web/shapes/shapes_easings_box_anim.js | 1 + examples/web/shapes/shapes_easings_box_anim.wasm | Bin 0 -> 118720 bytes .../web/shapes/shapes_easings_rectangle_array.c | 30 +- .../web/shapes/shapes_easings_rectangle_array.html | 1 + .../web/shapes/shapes_easings_rectangle_array.js | 1 + .../web/shapes/shapes_easings_rectangle_array.wasm | Bin 0 -> 115867 bytes examples/web/shapes/shapes_following_eyes.c | 34 +- examples/web/shapes/shapes_following_eyes.html | 1 + examples/web/shapes/shapes_following_eyes.js | 1 + examples/web/shapes/shapes_following_eyes.wasm | Bin 0 -> 115900 bytes examples/web/shapes/shapes_lines_bezier.c | 18 +- examples/web/shapes/shapes_lines_bezier.html | 1 + examples/web/shapes/shapes_lines_bezier.js | 1 + examples/web/shapes/shapes_lines_bezier.wasm | Bin 0 -> 117348 bytes examples/web/shapes/shapes_logo_raylib.c | 8 +- examples/web/shapes/shapes_logo_raylib.html | 1 + examples/web/shapes/shapes_logo_raylib.js | 1 + examples/web/shapes/shapes_logo_raylib.wasm | Bin 0 -> 115608 bytes examples/web/shapes/shapes_logo_raylib_anim.c | 14 +- examples/web/shapes/shapes_logo_raylib_anim.html | 1 + examples/web/shapes/shapes_logo_raylib_anim.js | 1 + examples/web/shapes/shapes_logo_raylib_anim.wasm | Bin 0 -> 117392 bytes examples/web/shapes/shapes_rectangle_scaling.c | 32 +- examples/web/shapes/shapes_rectangle_scaling.html | 1 + examples/web/shapes/shapes_rectangle_scaling.js | 1 + examples/web/shapes/shapes_rectangle_scaling.wasm | Bin 0 -> 117087 bytes examples/web/text/text_bmfont_ttf.c | 60 +- examples/web/text/text_bmfont_ttf.data | 368 + examples/web/text/text_bmfont_ttf.html | 1 + examples/web/text/text_bmfont_ttf.js | 1 + examples/web/text/text_bmfont_ttf.wasm | Bin 0 -> 180488 bytes examples/web/text/text_font_sdf.c | 46 +- examples/web/text/text_font_sdf.data | Bin 0 -> 153616 bytes examples/web/text/text_font_sdf.html | 1 + examples/web/text/text_font_sdf.js | 1 + examples/web/text/text_font_sdf.wasm | Bin 0 -> 153774 bytes examples/web/text/text_format_text.c | 8 +- examples/web/text/text_format_text.html | 1 + examples/web/text/text_format_text.js | 1 + examples/web/text/text_format_text.wasm | Bin 0 -> 115110 bytes examples/web/text/text_input_box.c | 28 +- examples/web/text/text_input_box.html | 1 + examples/web/text/text_input_box.js | 1 + examples/web/text/text_input_box.wasm | Bin 0 -> 117237 bytes examples/web/text/text_raylib_fonts.c | 69 +- examples/web/text/text_raylib_fonts.data | Bin 0 -> 22173 bytes examples/web/text/text_raylib_fonts.html | 1 + examples/web/text/text_raylib_fonts.js | 1 + examples/web/text/text_raylib_fonts.wasm | Bin 0 -> 181084 bytes examples/web/text/text_rectangle_bounds.c | 50 +- examples/web/text/text_rectangle_bounds.html | 1 + examples/web/text/text_rectangle_bounds.js | 1 + examples/web/text/text_rectangle_bounds.wasm | Bin 0 -> 119175 bytes examples/web/text/text_sprite_fonts.c | 37 +- examples/web/text/text_sprite_fonts.data | Bin 0 -> 106878 bytes examples/web/text/text_sprite_fonts.html | 1 + examples/web/text/text_sprite_fonts.js | 1 + examples/web/text/text_sprite_fonts.wasm | Bin 0 -> 180425 bytes examples/web/text/text_ttf_loading.c | 62 +- examples/web/text/text_ttf_loading.data | Bin 0 -> 79912 bytes examples/web/text/text_ttf_loading.html | 1 + examples/web/text/text_ttf_loading.js | 1 + examples/web/text/text_ttf_loading.wasm | Bin 0 -> 143481 bytes examples/web/text/text_unicode.c | 84 +- examples/web/text/text_unicode.data | 3484 +++ examples/web/text/text_unicode.html | 1 + examples/web/text/text_unicode.js | 1 + examples/web/text/text_unicode.wasm | Bin 0 -> 189666 bytes examples/web/text/text_writing_anim.c | 14 +- examples/web/text/text_writing_anim.html | 1 + examples/web/text/text_writing_anim.js | 1 + examples/web/text/text_writing_anim.wasm | Bin 0 -> 115169 bytes .../web/textures/textures_background_scrolling.c | 22 +- .../textures/textures_background_scrolling.data | Bin 0 -> 33767 bytes .../textures/textures_background_scrolling.html | 1 + .../web/textures/textures_background_scrolling.js | 1 + .../textures/textures_background_scrolling.wasm | Bin 0 -> 140966 bytes examples/web/textures/textures_bunnymark.c | 32 +- examples/web/textures/textures_bunnymark.data | Bin 0 -> 561 bytes examples/web/textures/textures_bunnymark.html | 1 + examples/web/textures/textures_bunnymark.js | 1 + examples/web/textures/textures_bunnymark.wasm | Bin 0 -> 141730 bytes examples/web/textures/textures_image_drawing.c | 26 +- examples/web/textures/textures_image_drawing.data | Bin 0 -> 683586 bytes examples/web/textures/textures_image_drawing.html | 1 + examples/web/textures/textures_image_drawing.js | 1 + examples/web/textures/textures_image_drawing.wasm | Bin 0 -> 144305 bytes examples/web/textures/textures_image_generation.c | 36 +- .../web/textures/textures_image_generation.html | 1 + examples/web/textures/textures_image_generation.js | 1 + .../web/textures/textures_image_generation.wasm | Bin 0 -> 129030 bytes examples/web/textures/textures_image_loading.c | 21 +- examples/web/textures/textures_image_loading.data | Bin 0 -> 3760 bytes examples/web/textures/textures_image_loading.html | 1 + examples/web/textures/textures_image_loading.js | 1 + examples/web/textures/textures_image_loading.wasm | Bin 0 -> 139847 bytes examples/web/textures/textures_image_processing.c | 58 +- .../web/textures/textures_image_processing.data | Bin 0 -> 295054 bytes .../web/textures/textures_image_processing.html | 1 + examples/web/textures/textures_image_processing.js | 1 + .../web/textures/textures_image_processing.wasm | Bin 0 -> 145635 bytes examples/web/textures/textures_image_text.c | 32 +- examples/web/textures/textures_image_text.data | Bin 0 -> 374966 bytes examples/web/textures/textures_image_text.html | 1 + examples/web/textures/textures_image_text.js | 1 + examples/web/textures/textures_image_text.wasm | Bin 0 -> 170003 bytes examples/web/textures/textures_logo_raylib.c | 16 +- examples/web/textures/textures_logo_raylib.data | Bin 0 -> 3760 bytes examples/web/textures/textures_logo_raylib.html | 1 + examples/web/textures/textures_logo_raylib.js | 1 + examples/web/textures/textures_logo_raylib.wasm | Bin 0 -> 139968 bytes examples/web/textures/textures_npatch_drawing.c | 16 +- examples/web/textures/textures_npatch_drawing.data | Bin 0 -> 5923 bytes examples/web/textures/textures_npatch_drawing.html | 1 + examples/web/textures/textures_npatch_drawing.js | 1 + examples/web/textures/textures_npatch_drawing.wasm | Bin 0 -> 143545 bytes .../web/textures/textures_particles_blending.c | 48 +- .../web/textures/textures_particles_blending.data | Bin 0 -> 15427 bytes .../web/textures/textures_particles_blending.html | 1 + .../web/textures/textures_particles_blending.js | 1 + .../web/textures/textures_particles_blending.wasm | Bin 0 -> 140875 bytes examples/web/textures/textures_raw_data.c | 30 +- examples/web/textures/textures_raw_data.data | Bin 0 -> 786432 bytes examples/web/textures/textures_raw_data.html | 1 + examples/web/textures/textures_raw_data.js | 1 + examples/web/textures/textures_raw_data.wasm | Bin 0 -> 116874 bytes examples/web/textures/textures_rectangle.c | 36 +- examples/web/textures/textures_rectangle.data | Bin 0 -> 10495 bytes examples/web/textures/textures_rectangle.html | 1 + examples/web/textures/textures_rectangle.js | 1 + examples/web/textures/textures_rectangle.wasm | Bin 0 -> 142003 bytes examples/web/textures/textures_sprite_button.c | 40 +- examples/web/textures/textures_sprite_button.data | Bin 0 -> 105729 bytes examples/web/textures/textures_sprite_button.html | 1 + examples/web/textures/textures_sprite_button.js | 1 + examples/web/textures/textures_sprite_button.wasm | Bin 0 -> 254152 bytes examples/web/textures/textures_sprite_explosion.c | 56 +- .../web/textures/textures_sprite_explosion.data | Bin 0 -> 1108701 bytes .../web/textures/textures_sprite_explosion.html | 1 + examples/web/textures/textures_sprite_explosion.js | 1 + .../web/textures/textures_sprite_explosion.wasm | Bin 0 -> 254099 bytes examples/web/textures/textures_srcrec_dstrec.c | 30 +- examples/web/textures/textures_srcrec_dstrec.data | Bin 0 -> 10495 bytes examples/web/textures/textures_srcrec_dstrec.html | 1 + examples/web/textures/textures_srcrec_dstrec.js | 1 + examples/web/textures/textures_srcrec_dstrec.wasm | Bin 0 -> 140039 bytes examples/web/textures/textures_to_image.c | 21 +- examples/web/textures/textures_to_image.data | Bin 0 -> 3760 bytes examples/web/textures/textures_to_image.html | 1 + examples/web/textures/textures_to_image.js | 1 + examples/web/textures/textures_to_image.wasm | Bin 0 -> 142464 bytes 525 files changed, 87888 insertions(+), 3148 deletions(-) create mode 100644 examples/web/audio/audio_module_playing.data create mode 100644 examples/web/audio/audio_module_playing.html create mode 100644 examples/web/audio/audio_module_playing.js create mode 100644 examples/web/audio/audio_module_playing.wasm create mode 100644 examples/web/audio/audio_music_stream.data create mode 100644 examples/web/audio/audio_music_stream.html create mode 100644 examples/web/audio/audio_music_stream.js create mode 100644 examples/web/audio/audio_music_stream.wasm create mode 100644 examples/web/audio/audio_raw_stream.html create mode 100644 examples/web/audio/audio_raw_stream.js create mode 100644 examples/web/audio/audio_raw_stream.wasm create mode 100644 examples/web/audio/audio_sound_loading.data create mode 100644 examples/web/audio/audio_sound_loading.html create mode 100644 examples/web/audio/audio_sound_loading.js create mode 100644 examples/web/audio/audio_sound_loading.wasm create mode 100644 examples/web/build_examples.bat create mode 100644 examples/web/core/core_2d_camera.html create mode 100644 examples/web/core/core_2d_camera.js create mode 100644 examples/web/core/core_2d_camera.wasm create mode 100644 examples/web/core/core_3d_camera_first_person.html create mode 100644 examples/web/core/core_3d_camera_first_person.js create mode 100644 examples/web/core/core_3d_camera_first_person.wasm create mode 100644 examples/web/core/core_3d_camera_free.html create mode 100644 examples/web/core/core_3d_camera_free.js create mode 100644 examples/web/core/core_3d_camera_free.wasm create mode 100644 examples/web/core/core_3d_camera_mode.html create mode 100644 examples/web/core/core_3d_camera_mode.js create mode 100644 examples/web/core/core_3d_camera_mode.wasm create mode 100644 examples/web/core/core_3d_picking.html create mode 100644 examples/web/core/core_3d_picking.js create mode 100644 examples/web/core/core_3d_picking.wasm create mode 100644 examples/web/core/core_basic_window.html create mode 100644 examples/web/core/core_basic_window.js create mode 100644 examples/web/core/core_basic_window.wasm create mode 100644 examples/web/core/core_custom_logging.html create mode 100644 examples/web/core/core_custom_logging.js create mode 100644 examples/web/core/core_custom_logging.wasm create mode 100644 examples/web/core/core_drop_files.html create mode 100644 examples/web/core/core_drop_files.js create mode 100644 examples/web/core/core_drop_files.wasm create mode 100644 examples/web/core/core_input_gamepad.data create mode 100644 examples/web/core/core_input_gamepad.html create mode 100644 examples/web/core/core_input_gamepad.js create mode 100644 examples/web/core/core_input_gamepad.wasm create mode 100644 examples/web/core/core_input_gestures.html create mode 100644 examples/web/core/core_input_gestures.js create mode 100644 examples/web/core/core_input_gestures.wasm create mode 100644 examples/web/core/core_input_keys.html create mode 100644 examples/web/core/core_input_keys.js create mode 100644 examples/web/core/core_input_keys.wasm create mode 100644 examples/web/core/core_input_mouse.html create mode 100644 examples/web/core/core_input_mouse.js create mode 100644 examples/web/core/core_input_mouse.wasm create mode 100644 examples/web/core/core_input_mouse_wheel.html create mode 100644 examples/web/core/core_input_mouse_wheel.js create mode 100644 examples/web/core/core_input_mouse_wheel.wasm create mode 100644 examples/web/core/core_input_multitouch.html create mode 100644 examples/web/core/core_input_multitouch.js create mode 100644 examples/web/core/core_input_multitouch.wasm create mode 100644 examples/web/core/core_loading_thread.html create mode 100644 examples/web/core/core_loading_thread.js create mode 100644 examples/web/core/core_loading_thread.wasm create mode 100644 examples/web/core/core_random_values.html create mode 100644 examples/web/core/core_random_values.js create mode 100644 examples/web/core/core_random_values.wasm create mode 100644 examples/web/core/core_storage_values.html create mode 100644 examples/web/core/core_storage_values.js create mode 100644 examples/web/core/core_storage_values.wasm create mode 100644 examples/web/core/core_vr_simulator.data create mode 100644 examples/web/core/core_vr_simulator.html create mode 100644 examples/web/core/core_vr_simulator.js create mode 100644 examples/web/core/core_vr_simulator.wasm create mode 100644 examples/web/core/core_window_letterbox.html create mode 100644 examples/web/core/core_window_letterbox.js create mode 100644 examples/web/core/core_window_letterbox.wasm create mode 100644 examples/web/core/core_world_screen.html create mode 100644 examples/web/core/core_world_screen.js create mode 100644 examples/web/core/core_world_screen.wasm create mode 100644 examples/web/models/models_animation.data create mode 100644 examples/web/models/models_animation.html create mode 100644 examples/web/models/models_animation.js create mode 100644 examples/web/models/models_animation.wasm create mode 100644 examples/web/models/models_billboard.data create mode 100644 examples/web/models/models_billboard.html create mode 100644 examples/web/models/models_billboard.js create mode 100644 examples/web/models/models_billboard.wasm create mode 100644 examples/web/models/models_box_collisions.html create mode 100644 examples/web/models/models_box_collisions.js create mode 100644 examples/web/models/models_box_collisions.wasm create mode 100644 examples/web/models/models_cubicmap.data create mode 100644 examples/web/models/models_cubicmap.html create mode 100644 examples/web/models/models_cubicmap.js create mode 100644 examples/web/models/models_cubicmap.wasm create mode 100644 examples/web/models/models_first_person_maze.data create mode 100644 examples/web/models/models_first_person_maze.html create mode 100644 examples/web/models/models_first_person_maze.js create mode 100644 examples/web/models/models_first_person_maze.wasm create mode 100644 examples/web/models/models_geometric_shapes.html create mode 100644 examples/web/models/models_geometric_shapes.js create mode 100644 examples/web/models/models_geometric_shapes.wasm create mode 100644 examples/web/models/models_heightmap.data create mode 100644 examples/web/models/models_heightmap.html create mode 100644 examples/web/models/models_heightmap.js create mode 100644 examples/web/models/models_heightmap.wasm create mode 100644 examples/web/models/models_mesh_generation.html create mode 100644 examples/web/models/models_mesh_generation.js create mode 100644 examples/web/models/models_mesh_generation.wasm create mode 100644 examples/web/models/models_obj_loading.data create mode 100644 examples/web/models/models_obj_loading.html create mode 100644 examples/web/models/models_obj_loading.js create mode 100644 examples/web/models/models_obj_loading.wasm create mode 100644 examples/web/models/models_obj_viewer.data create mode 100644 examples/web/models/models_obj_viewer.html create mode 100644 examples/web/models/models_obj_viewer.js create mode 100644 examples/web/models/models_obj_viewer.wasm create mode 100644 examples/web/models/models_orthographic_projection.html create mode 100644 examples/web/models/models_orthographic_projection.js create mode 100644 examples/web/models/models_orthographic_projection.wasm create mode 100644 examples/web/models/models_rlgl_solar_system.html create mode 100644 examples/web/models/models_rlgl_solar_system.js create mode 100644 examples/web/models/models_rlgl_solar_system.wasm create mode 100644 examples/web/models/models_yaw_pitch_roll.data create mode 100644 examples/web/models/models_yaw_pitch_roll.html create mode 100644 examples/web/models/models_yaw_pitch_roll.js create mode 100644 examples/web/models/models_yaw_pitch_roll.wasm create mode 100644 examples/web/physac/physac.h create mode 100644 examples/web/physac/physics_demo.html create mode 100644 examples/web/physac/physics_demo.html.mem create mode 100644 examples/web/physac/physics_demo.js create mode 100644 examples/web/physac/physics_demo.wasm create mode 100644 examples/web/physac/physics_demo.worker.js create mode 100644 examples/web/physac/physics_friction.html create mode 100644 examples/web/physac/physics_friction.html.mem create mode 100644 examples/web/physac/physics_friction.js create mode 100644 examples/web/physac/physics_friction.wasm create mode 100644 examples/web/physac/physics_friction.worker.js create mode 100644 examples/web/physac/physics_movement.html create mode 100644 examples/web/physac/physics_movement.html.mem create mode 100644 examples/web/physac/physics_movement.js create mode 100644 examples/web/physac/physics_movement.wasm create mode 100644 examples/web/physac/physics_movement.worker.js create mode 100644 examples/web/physac/physics_restitution.html create mode 100644 examples/web/physac/physics_restitution.html.mem create mode 100644 examples/web/physac/physics_restitution.js create mode 100644 examples/web/physac/physics_restitution.wasm create mode 100644 examples/web/physac/physics_restitution.worker.js create mode 100644 examples/web/physac/physics_shatter.html create mode 100644 examples/web/physac/physics_shatter.html.mem create mode 100644 examples/web/physac/physics_shatter.js create mode 100644 examples/web/physac/physics_shatter.wasm create mode 100644 examples/web/physac/physics_shatter.worker.js create mode 100644 examples/web/shaders/shaders_custom_uniform.data create mode 100644 examples/web/shaders/shaders_custom_uniform.html create mode 100644 examples/web/shaders/shaders_custom_uniform.js create mode 100644 examples/web/shaders/shaders_custom_uniform.wasm create mode 100644 examples/web/shaders/shaders_julia_set.data create mode 100644 examples/web/shaders/shaders_julia_set.html create mode 100644 examples/web/shaders/shaders_julia_set.js create mode 100644 examples/web/shaders/shaders_julia_set.wasm create mode 100644 examples/web/shaders/shaders_model_shader.data create mode 100644 examples/web/shaders/shaders_model_shader.html create mode 100644 examples/web/shaders/shaders_model_shader.js create mode 100644 examples/web/shaders/shaders_model_shader.wasm create mode 100644 examples/web/shaders/shaders_palette_switch.data create mode 100644 examples/web/shaders/shaders_palette_switch.html create mode 100644 examples/web/shaders/shaders_palette_switch.js create mode 100644 examples/web/shaders/shaders_palette_switch.wasm create mode 100644 examples/web/shaders/shaders_postprocessing.data create mode 100644 examples/web/shaders/shaders_postprocessing.html create mode 100644 examples/web/shaders/shaders_postprocessing.js create mode 100644 examples/web/shaders/shaders_postprocessing.wasm create mode 100644 examples/web/shaders/shaders_raymarching.data create mode 100644 examples/web/shaders/shaders_raymarching.html create mode 100644 examples/web/shaders/shaders_raymarching.js create mode 100644 examples/web/shaders/shaders_raymarching.wasm create mode 100644 examples/web/shaders/shaders_shapes_textures.data create mode 100644 examples/web/shaders/shaders_shapes_textures.html create mode 100644 examples/web/shaders/shaders_shapes_textures.js create mode 100644 examples/web/shaders/shaders_shapes_textures.wasm create mode 100644 examples/web/shaders/shaders_texture_drawing.data create mode 100644 examples/web/shaders/shaders_texture_drawing.html create mode 100644 examples/web/shaders/shaders_texture_drawing.js create mode 100644 examples/web/shaders/shaders_texture_drawing.wasm create mode 100644 examples/web/shaders/shaders_texture_waves.data create mode 100644 examples/web/shaders/shaders_texture_waves.html create mode 100644 examples/web/shaders/shaders_texture_waves.js create mode 100644 examples/web/shaders/shaders_texture_waves.wasm create mode 100644 examples/web/shapes/shapes_basic_shapes.html create mode 100644 examples/web/shapes/shapes_basic_shapes.js create mode 100644 examples/web/shapes/shapes_basic_shapes.wasm create mode 100644 examples/web/shapes/shapes_bouncing_ball.html create mode 100644 examples/web/shapes/shapes_bouncing_ball.js create mode 100644 examples/web/shapes/shapes_bouncing_ball.wasm create mode 100644 examples/web/shapes/shapes_collision_area.html create mode 100644 examples/web/shapes/shapes_collision_area.js create mode 100644 examples/web/shapes/shapes_collision_area.wasm create mode 100644 examples/web/shapes/shapes_colors_palette.html create mode 100644 examples/web/shapes/shapes_colors_palette.js create mode 100644 examples/web/shapes/shapes_colors_palette.wasm create mode 100644 examples/web/shapes/shapes_draw_circle_sector.html create mode 100644 examples/web/shapes/shapes_draw_circle_sector.js create mode 100644 examples/web/shapes/shapes_draw_circle_sector.wasm create mode 100644 examples/web/shapes/shapes_draw_rectangle_rounded.html create mode 100644 examples/web/shapes/shapes_draw_rectangle_rounded.js create mode 100644 examples/web/shapes/shapes_draw_rectangle_rounded.wasm create mode 100644 examples/web/shapes/shapes_draw_ring.html create mode 100644 examples/web/shapes/shapes_draw_ring.js create mode 100644 examples/web/shapes/shapes_draw_ring.wasm create mode 100644 examples/web/shapes/shapes_easings_ball_anim.html create mode 100644 examples/web/shapes/shapes_easings_ball_anim.js create mode 100644 examples/web/shapes/shapes_easings_ball_anim.wasm create mode 100644 examples/web/shapes/shapes_easings_box_anim.html create mode 100644 examples/web/shapes/shapes_easings_box_anim.js create mode 100644 examples/web/shapes/shapes_easings_box_anim.wasm create mode 100644 examples/web/shapes/shapes_easings_rectangle_array.html create mode 100644 examples/web/shapes/shapes_easings_rectangle_array.js create mode 100644 examples/web/shapes/shapes_easings_rectangle_array.wasm create mode 100644 examples/web/shapes/shapes_following_eyes.html create mode 100644 examples/web/shapes/shapes_following_eyes.js create mode 100644 examples/web/shapes/shapes_following_eyes.wasm create mode 100644 examples/web/shapes/shapes_lines_bezier.html create mode 100644 examples/web/shapes/shapes_lines_bezier.js create mode 100644 examples/web/shapes/shapes_lines_bezier.wasm create mode 100644 examples/web/shapes/shapes_logo_raylib.html create mode 100644 examples/web/shapes/shapes_logo_raylib.js create mode 100644 examples/web/shapes/shapes_logo_raylib.wasm create mode 100644 examples/web/shapes/shapes_logo_raylib_anim.html create mode 100644 examples/web/shapes/shapes_logo_raylib_anim.js create mode 100644 examples/web/shapes/shapes_logo_raylib_anim.wasm create mode 100644 examples/web/shapes/shapes_rectangle_scaling.html create mode 100644 examples/web/shapes/shapes_rectangle_scaling.js create mode 100644 examples/web/shapes/shapes_rectangle_scaling.wasm create mode 100644 examples/web/text/text_bmfont_ttf.data create mode 100644 examples/web/text/text_bmfont_ttf.html create mode 100644 examples/web/text/text_bmfont_ttf.js create mode 100644 examples/web/text/text_bmfont_ttf.wasm create mode 100644 examples/web/text/text_font_sdf.data create mode 100644 examples/web/text/text_font_sdf.html create mode 100644 examples/web/text/text_font_sdf.js create mode 100644 examples/web/text/text_font_sdf.wasm create mode 100644 examples/web/text/text_format_text.html create mode 100644 examples/web/text/text_format_text.js create mode 100644 examples/web/text/text_format_text.wasm create mode 100644 examples/web/text/text_input_box.html create mode 100644 examples/web/text/text_input_box.js create mode 100644 examples/web/text/text_input_box.wasm create mode 100644 examples/web/text/text_raylib_fonts.data create mode 100644 examples/web/text/text_raylib_fonts.html create mode 100644 examples/web/text/text_raylib_fonts.js create mode 100644 examples/web/text/text_raylib_fonts.wasm create mode 100644 examples/web/text/text_rectangle_bounds.html create mode 100644 examples/web/text/text_rectangle_bounds.js create mode 100644 examples/web/text/text_rectangle_bounds.wasm create mode 100644 examples/web/text/text_sprite_fonts.data create mode 100644 examples/web/text/text_sprite_fonts.html create mode 100644 examples/web/text/text_sprite_fonts.js create mode 100644 examples/web/text/text_sprite_fonts.wasm create mode 100644 examples/web/text/text_ttf_loading.data create mode 100644 examples/web/text/text_ttf_loading.html create mode 100644 examples/web/text/text_ttf_loading.js create mode 100644 examples/web/text/text_ttf_loading.wasm create mode 100644 examples/web/text/text_unicode.data create mode 100644 examples/web/text/text_unicode.html create mode 100644 examples/web/text/text_unicode.js create mode 100644 examples/web/text/text_unicode.wasm create mode 100644 examples/web/text/text_writing_anim.html create mode 100644 examples/web/text/text_writing_anim.js create mode 100644 examples/web/text/text_writing_anim.wasm create mode 100644 examples/web/textures/textures_background_scrolling.data create mode 100644 examples/web/textures/textures_background_scrolling.html create mode 100644 examples/web/textures/textures_background_scrolling.js create mode 100644 examples/web/textures/textures_background_scrolling.wasm create mode 100644 examples/web/textures/textures_bunnymark.data create mode 100644 examples/web/textures/textures_bunnymark.html create mode 100644 examples/web/textures/textures_bunnymark.js create mode 100644 examples/web/textures/textures_bunnymark.wasm create mode 100644 examples/web/textures/textures_image_drawing.data create mode 100644 examples/web/textures/textures_image_drawing.html create mode 100644 examples/web/textures/textures_image_drawing.js create mode 100644 examples/web/textures/textures_image_drawing.wasm create mode 100644 examples/web/textures/textures_image_generation.html create mode 100644 examples/web/textures/textures_image_generation.js create mode 100644 examples/web/textures/textures_image_generation.wasm create mode 100644 examples/web/textures/textures_image_loading.data create mode 100644 examples/web/textures/textures_image_loading.html create mode 100644 examples/web/textures/textures_image_loading.js create mode 100644 examples/web/textures/textures_image_loading.wasm create mode 100644 examples/web/textures/textures_image_processing.data create mode 100644 examples/web/textures/textures_image_processing.html create mode 100644 examples/web/textures/textures_image_processing.js create mode 100644 examples/web/textures/textures_image_processing.wasm create mode 100644 examples/web/textures/textures_image_text.data create mode 100644 examples/web/textures/textures_image_text.html create mode 100644 examples/web/textures/textures_image_text.js create mode 100644 examples/web/textures/textures_image_text.wasm create mode 100644 examples/web/textures/textures_logo_raylib.data create mode 100644 examples/web/textures/textures_logo_raylib.html create mode 100644 examples/web/textures/textures_logo_raylib.js create mode 100644 examples/web/textures/textures_logo_raylib.wasm create mode 100644 examples/web/textures/textures_npatch_drawing.data create mode 100644 examples/web/textures/textures_npatch_drawing.html create mode 100644 examples/web/textures/textures_npatch_drawing.js create mode 100644 examples/web/textures/textures_npatch_drawing.wasm create mode 100644 examples/web/textures/textures_particles_blending.data create mode 100644 examples/web/textures/textures_particles_blending.html create mode 100644 examples/web/textures/textures_particles_blending.js create mode 100644 examples/web/textures/textures_particles_blending.wasm create mode 100644 examples/web/textures/textures_raw_data.data create mode 100644 examples/web/textures/textures_raw_data.html create mode 100644 examples/web/textures/textures_raw_data.js create mode 100644 examples/web/textures/textures_raw_data.wasm create mode 100644 examples/web/textures/textures_rectangle.data create mode 100644 examples/web/textures/textures_rectangle.html create mode 100644 examples/web/textures/textures_rectangle.js create mode 100644 examples/web/textures/textures_rectangle.wasm create mode 100644 examples/web/textures/textures_sprite_button.data create mode 100644 examples/web/textures/textures_sprite_button.html create mode 100644 examples/web/textures/textures_sprite_button.js create mode 100644 examples/web/textures/textures_sprite_button.wasm create mode 100644 examples/web/textures/textures_sprite_explosion.data create mode 100644 examples/web/textures/textures_sprite_explosion.html create mode 100644 examples/web/textures/textures_sprite_explosion.js create mode 100644 examples/web/textures/textures_sprite_explosion.wasm create mode 100644 examples/web/textures/textures_srcrec_dstrec.data create mode 100644 examples/web/textures/textures_srcrec_dstrec.html create mode 100644 examples/web/textures/textures_srcrec_dstrec.js create mode 100644 examples/web/textures/textures_srcrec_dstrec.wasm create mode 100644 examples/web/textures/textures_to_image.data create mode 100644 examples/web/textures/textures_to_image.html create mode 100644 examples/web/textures/textures_to_image.js create mode 100644 examples/web/textures/textures_to_image.wasm diff --git a/examples/src/audio/audio_module_playing.c b/examples/src/audio/audio_module_playing.c index 54bfa3d..4aebd1e 100644 --- a/examples/src/audio/audio_module_playing.c +++ b/examples/src/audio/audio_module_playing.c @@ -23,25 +23,25 @@ typedef struct { Color color; } CircleWave; -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; SetConfigFlags(FLAG_MSAA_4X_HINT); // NOTE: Try to enable MSAA 4X - + InitWindow(screenWidth, screenHeight, "raylib [audio] example - module playing (streaming)"); InitAudioDevice(); // Initialize audio device - + Color colors[14] = { ORANGE, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK, YELLOW, GREEN, SKYBLUE, PURPLE, BEIGE }; - + // Creates ome circles for visual effect CircleWave circles[MAX_CIRCLES]; - + for (int i = MAX_CIRCLES - 1; i >= 0; i--) { circles[i].alpha = 0.0f; @@ -53,7 +53,7 @@ int main() } Music xm = LoadMusicStream("resources/chiptun1.mod"); - + PlayMusicStream(xm); float timePlayed = 0.0f; @@ -68,34 +68,34 @@ int main() // Update //---------------------------------------------------------------------------------- UpdateMusicStream(xm); // Update music buffer with new stream data - + // Restart music playing (stop and play) - if (IsKeyPressed(KEY_SPACE)) + if (IsKeyPressed(KEY_SPACE)) { StopMusicStream(xm); PlayMusicStream(xm); } - - // Pause/Resume music playing + + // Pause/Resume music playing if (IsKeyPressed(KEY_P)) { pause = !pause; - + if (pause) PauseMusicStream(xm); else ResumeMusicStream(xm); } - + // Get timePlayed scaled to bar dimensions timePlayed = GetMusicTimePlayed(xm)/GetMusicTimeLength(xm)*(screenWidth - 40); - + // Color circles animation for (int i = MAX_CIRCLES - 1; (i >= 0) && !pause; i--) { circles[i].alpha += circles[i].speed; circles[i].radius += circles[i].speed*10.0f; - + if (circles[i].alpha > 1.0f) circles[i].speed *= -1; - + if (circles[i].alpha <= 0.0f) { circles[i].alpha = 0.0f; @@ -113,12 +113,12 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - + for (int i = MAX_CIRCLES - 1; i >= 0; i--) { DrawCircleV(circles[i].position, circles[i].radius, Fade(circles[i].color, circles[i].alpha)); } - + // Draw time bar DrawRectangle(20, screenHeight - 20 - 12, screenWidth - 40, 12, LIGHTGRAY); DrawRectangle(20, screenHeight - 20 - 12, (int)timePlayed, 12, MAROON); @@ -131,7 +131,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- UnloadMusicStream(xm); // Unload music stream buffers from RAM - + CloseAudioDevice(); // Close audio device (music streaming is automatically stopped) CloseWindow(); // Close window and OpenGL context diff --git a/examples/src/audio/audio_music_stream.c b/examples/src/audio/audio_music_stream.c index 26450a8..76efb7d 100644 --- a/examples/src/audio/audio_music_stream.c +++ b/examples/src/audio/audio_music_stream.c @@ -13,19 +13,19 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [audio] example - music playing (streaming)"); InitAudioDevice(); // Initialize audio device Music music = LoadMusicStream("resources/guitar_noodling.ogg"); - + PlayMusicStream(music); float timePlayed = 0.0f; @@ -39,27 +39,27 @@ int main() { // Update //---------------------------------------------------------------------------------- - UpdateMusicStream(music); // Update music buffer with new stream data - + UpdateMusicStream(music); // Update music buffer with new stream data + // Restart music playing (stop and play) - if (IsKeyPressed(KEY_SPACE)) + if (IsKeyPressed(KEY_SPACE)) { StopMusicStream(music); PlayMusicStream(music); } - - // Pause/Resume music playing + + // Pause/Resume music playing if (IsKeyPressed(KEY_P)) { pause = !pause; - + if (pause) PauseMusicStream(music); else ResumeMusicStream(music); } - + // Get timePlayed scaled to bar dimensions (400 pixels) timePlayed = GetMusicTimePlayed(music)/GetMusicTimeLength(music)*400; - + if (timePlayed > 400) StopMusicStream(music); //---------------------------------------------------------------------------------- @@ -74,7 +74,7 @@ int main() DrawRectangle(200, 200, 400, 12, LIGHTGRAY); DrawRectangle(200, 200, (int)timePlayed, 12, MAROON); DrawRectangleLines(200, 200, 400, 12, GRAY); - + DrawText("PRESS SPACE TO RESTART MUSIC", 215, 250, 20, LIGHTGRAY); DrawText("PRESS P TO PAUSE/RESUME MUSIC", 208, 280, 20, LIGHTGRAY); diff --git a/examples/src/audio/audio_raw_stream.c b/examples/src/audio/audio_raw_stream.c index d7fa5d7..b114173 100644 --- a/examples/src/audio/audio_raw_stream.c +++ b/examples/src/audio/audio_raw_stream.c @@ -20,12 +20,12 @@ #define MAX_SAMPLES 512 #define MAX_SAMPLES_PER_UPDATE 4096 -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [audio] example - raw audio streaming"); @@ -33,30 +33,30 @@ int main() // Init raw audio stream (sample rate: 22050, sample size: 16bit-short, channels: 1-mono) AudioStream stream = InitAudioStream(22050, 16, 1); - + // Buffer for the single cycle waveform we are synthesizing short *data = (short *)malloc(sizeof(short)*MAX_SAMPLES); // Frame buffer, describing the waveform when repeated over the course of a frame short *writeBuf = (short *)malloc(sizeof(short)*MAX_SAMPLES_PER_UPDATE); - + PlayAudioStream(stream); // Start processing stream buffer (no data loaded currently) - + // Position read in to determine next frequency Vector2 mousePosition = { -100.0f, -100.0f }; - + // Cycles per second (hz) float frequency = 440.0f; - + // Previous value, used to test if sine needs to be rewritten, and to smoothly modulate frequency float oldFrequency = 1.0f; - + // Cursor to read and copy the samples of the sine wave buffer int readCursor = 0; - + // Computed size in samples of the sine wave int waveLength = 1; - + Vector2 position = { 0, 0 }; SetTargetFPS(30); // Set our game to run at 30 frames-per-second @@ -67,62 +67,62 @@ int main() { // Update //---------------------------------------------------------------------------------- - + // Sample mouse input. mousePosition = GetMousePosition(); - - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) + + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) { float fp = (float)(mousePosition.y); frequency = 40.0f + (float)(fp); } - + // Rewrite the sine wave. // Compute two cycles to allow the buffer padding, simplifying any modulation, resampling, etc. - if (frequency != oldFrequency) + if (frequency != oldFrequency) { // Compute wavelength. Limit size in both directions. int oldWavelength = waveLength; waveLength = (int)(22050/frequency); if (waveLength > MAX_SAMPLES/2) waveLength = MAX_SAMPLES/2; if (waveLength < 1) waveLength = 1; - + // Write sine wave. for (int i = 0; i < waveLength*2; i++) { data[i] = (short)(sinf(((2*PI*(float)i/waveLength)))*32000); } - + // Scale read cursor's position to minimize transition artifacts readCursor = (int)(readCursor * ((float)waveLength / (float)oldWavelength)); oldFrequency = frequency; } - + // Refill audio stream if required - if (IsAudioBufferProcessed(stream)) + if (IsAudioBufferProcessed(stream)) { // Synthesize a buffer that is exactly the requested size int writeCursor = 0; - - while (writeCursor < MAX_SAMPLES_PER_UPDATE) + + while (writeCursor < MAX_SAMPLES_PER_UPDATE) { // Start by trying to write the whole chunk at once int writeLength = MAX_SAMPLES_PER_UPDATE-writeCursor; - + // Limit to the maximum readable size int readLength = waveLength-readCursor; - + if (writeLength > readLength) writeLength = readLength; // Write the slice memcpy(writeBuf + writeCursor, data + readCursor, writeLength*sizeof(short)); - + // Update cursors and loop audio readCursor = (readCursor + writeLength) % waveLength; - + writeCursor += writeLength; } - + // Copy finished frame to audio stream UpdateAudioStream(stream, writeBuf, MAX_SAMPLES_PER_UPDATE); } @@ -136,13 +136,13 @@ int main() DrawText(FormatText("sine frequency: %i",(int)frequency), GetScreenWidth() - 220, 10, 20, RED); DrawText("click mouse button to change frequency", 10, 10, 20, DARKGRAY); - + // Draw the current buffer state proportionate to the screen for (int i = 0; i < screenWidth; i++) { position.x = i; position.y = 250 + 50*data[i*MAX_SAMPLES/screenWidth]/32000; - + DrawPixelV(position, RED); } @@ -154,7 +154,7 @@ int main() //-------------------------------------------------------------------------------------- free(data); // Unload sine wave data free(writeBuf); // Unload write buffer - + CloseAudioStream(stream); // Close raw audio stream and delete buffers from RAM CloseAudioDevice(); // Close audio device (music streaming is automatically stopped) diff --git a/examples/src/audio/audio_sound_loading.c b/examples/src/audio/audio_sound_loading.c index 00e5832..d208dd9 100644 --- a/examples/src/audio/audio_sound_loading.c +++ b/examples/src/audio/audio_sound_loading.c @@ -13,12 +13,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [audio] example - sound loading and playing"); @@ -26,8 +26,8 @@ int main() Sound fxWav = LoadSound("resources/sound.wav"); // Load WAV audio file Sound fxOgg = LoadSound("resources/tanatana.ogg"); // Load OGG audio file - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/src/core/core_2d_camera.c b/examples/src/core/core_2d_camera.c index 6a0b11a..fe8e584 100644 --- a/examples/src/core/core_2d_camera.c +++ b/examples/src/core/core_2d_camera.c @@ -13,21 +13,21 @@ #define MAX_BUILDINGS 100 -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - 2d camera"); - + Rectangle player = { 400, 280, 40, 40 }; Rectangle buildings[MAX_BUILDINGS]; Color buildColors[MAX_BUILDINGS]; - + int spacing = 0; - + for (int i = 0; i < MAX_BUILDINGS; i++) { buildings[i].width = GetRandomValue(50, 200); @@ -36,22 +36,22 @@ int main() buildings[i].x = -6000 + spacing; spacing += buildings[i].width; - + buildColors[i] = (Color){ GetRandomValue(200, 240), GetRandomValue(200, 240), GetRandomValue(200, 250), 255 }; } - - Camera2D camera; - + + Camera2D camera = { 0 }; + camera.target = (Vector2){ player.x + 20, player.y + 20 }; camera.offset = (Vector2){ 0, 0 }; camera.rotation = 0.0f; camera.zoom = 1.0f; - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key + while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- @@ -65,26 +65,26 @@ int main() player.x -= 2; // Player movement camera.offset.x += 2; // Camera displacement with player movement } - + // Camera target follows player camera.target = (Vector2){ player.x + 20, player.y + 20 }; - + // Camera rotation controls if (IsKeyDown(KEY_A)) camera.rotation--; else if (IsKeyDown(KEY_S)) camera.rotation++; - + // Limit camera rotation to 80 degrees (-40 to 40) - if (camera.rotation > 40) camera.rotation = 40; + if (camera.rotation > 40) camera.rotation = 40; else if (camera.rotation < -40) camera.rotation = -40; - + // Camera zoom controls camera.zoom += ((float)GetMouseWheelMove()*0.05f); - + if (camera.zoom > 3.0f) camera.zoom = 3.0f; else if (camera.zoom < 0.1f) camera.zoom = 0.1f; - + // Camera reset (zoom and rotation) - if (IsKeyPressed(KEY_R)) + if (IsKeyPressed(KEY_R)) { camera.zoom = 1.0f; camera.rotation = 0.0f; @@ -94,32 +94,32 @@ int main() // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + BeginMode2D(camera); DrawRectangle(-6000, 320, 13000, 8000, DARKGRAY); - + for (int i = 0; i < MAX_BUILDINGS; i++) DrawRectangleRec(buildings[i], buildColors[i]); - + DrawRectangleRec(player, RED); - + DrawLine(camera.target.x, -screenHeight*10, camera.target.x, screenHeight*10, GREEN); DrawLine(-screenWidth*10, camera.target.y, screenWidth*10, camera.target.y, GREEN); - + EndMode2D(); - + DrawText("SCREEN AREA", 640, 10, 20, RED); - + DrawRectangle(0, 0, screenWidth, 5, RED); DrawRectangle(0, 5, 5, screenHeight - 10, RED); DrawRectangle(screenWidth - 5, 5, 5, screenHeight - 10, RED); DrawRectangle(0, screenHeight - 5, screenWidth, 5, RED); - + DrawRectangle( 10, 10, 250, 113, Fade(SKYBLUE, 0.5f)); DrawRectangleLines( 10, 10, 250, 113, BLUE); - + DrawText("Free 2d camera controls:", 20, 20, 10, BLACK); DrawText("- Right/Left to move Offset", 40, 40, 10, DARKGRAY); DrawText("- Mouse Wheel to Zoom in-out", 40, 60, 10, DARKGRAY); @@ -131,7 +131,7 @@ int main() } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/core/core_3d_camera_first_person.c b/examples/src/core/core_3d_camera_first_person.c index d3a8f2e..825a9ca 100644 --- a/examples/src/core/core_3d_camera_first_person.c +++ b/examples/src/core/core_3d_camera_first_person.c @@ -13,15 +13,15 @@ #define MAX_COLUMNS 20 -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera first person"); - + // Define the camera to look into our 3d world (position, target, up vector) Camera camera = { 0 }; camera.position = (Vector3){ 4.0f, 2.0f, 4.0f }; @@ -34,14 +34,14 @@ int main() float heights[MAX_COLUMNS]; Vector3 positions[MAX_COLUMNS]; Color colors[MAX_COLUMNS]; - + for (int i = 0; i < MAX_COLUMNS; i++) { heights[i] = (float)GetRandomValue(1, 12); positions[i] = (Vector3){ GetRandomValue(-15, 15), heights[i]/2, GetRandomValue(-15, 15) }; colors[i] = (Color){ GetRandomValue(20, 255), GetRandomValue(10, 55), 30, 255 }; } - + SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set a first person camera mode SetTargetFPS(60); // Set our game to run at 60 frames-per-second @@ -67,7 +67,7 @@ int main() DrawCube((Vector3){ -16.0f, 2.5f, 0.0f }, 1.0f, 5.0f, 32.0f, BLUE); // Draw a blue wall DrawCube((Vector3){ 16.0f, 2.5f, 0.0f }, 1.0f, 5.0f, 32.0f, LIME); // Draw a green wall DrawCube((Vector3){ 0.0f, 2.5f, 16.0f }, 32.0f, 5.0f, 1.0f, GOLD); // Draw a yellow wall - + // Draw some cubes around for (int i = 0; i < MAX_COLUMNS; i++) { @@ -76,7 +76,7 @@ int main() } EndMode3D(); - + DrawRectangle( 10, 10, 220, 70, Fade(SKYBLUE, 0.5f)); DrawRectangleLines( 10, 10, 220, 70, BLUE); @@ -89,7 +89,7 @@ int main() } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/core/core_3d_camera_free.c b/examples/src/core/core_3d_camera_free.c index 9131ddf..c1445f6 100644 --- a/examples/src/core/core_3d_camera_free.c +++ b/examples/src/core/core_3d_camera_free.c @@ -11,12 +11,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera free"); @@ -27,9 +27,9 @@ int main() camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 45.0f; // Camera field-of-view Y camera.type = CAMERA_PERSPECTIVE; // Camera mode type - + Vector3 cubePosition = { 0.0f, 0.0f, 0.0f }; - + SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode SetTargetFPS(60); // Set our game to run at 60 frames-per-second @@ -41,7 +41,7 @@ int main() // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update camera - + if (IsKeyDown('Z')) camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; //---------------------------------------------------------------------------------- @@ -59,10 +59,10 @@ int main() DrawGrid(10, 1.0f); EndMode3D(); - + DrawRectangle( 10, 10, 320, 133, Fade(SKYBLUE, 0.5f)); DrawRectangleLines( 10, 10, 320, 133, BLUE); - + DrawText("Free camera default controls:", 20, 20, 10, BLACK); DrawText("- Mouse Wheel to Zoom in-out", 40, 40, 10, DARKGRAY); DrawText("- Mouse Wheel Pressed to Pan", 40, 60, 10, DARKGRAY); diff --git a/examples/src/core/core_3d_camera_mode.c b/examples/src/core/core_3d_camera_mode.c index a496220..eae6c88 100644 --- a/examples/src/core/core_3d_camera_mode.c +++ b/examples/src/core/core_3d_camera_mode.c @@ -11,7 +11,7 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -30,7 +30,7 @@ int main() Vector3 cubePosition = { 0.0f, 0.0f, 0.0f }; - SetTargetFPS(60); // Set our game to run at 60 frames-per-second + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/src/core/core_3d_picking.c b/examples/src/core/core_3d_picking.c index 1c63e2a..1e60c03 100644 --- a/examples/src/core/core_3d_picking.c +++ b/examples/src/core/core_3d_picking.c @@ -11,12 +11,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d picking"); diff --git a/examples/src/core/core_basic_window.c b/examples/src/core/core_basic_window.c index b30f05d..3c103a5 100644 --- a/examples/src/core/core_basic_window.c +++ b/examples/src/core/core_basic_window.c @@ -21,16 +21,16 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window"); - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -54,7 +54,7 @@ int main() } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/core/core_custom_logging.c b/examples/src/core/core_custom_logging.c index cf1a601..0ab3fa4 100644 --- a/examples/src/core/core_custom_logging.c +++ b/examples/src/core/core_custom_logging.c @@ -19,66 +19,66 @@ // Custom logging funtion void LogCustom(int msgType, const char *text, va_list args) { - char timeStr[64]; - time_t now = time(NULL); - struct tm *tm_info = localtime(&now); - - strftime(timeStr, sizeof(timeStr), "%Y-%m-%d %H:%M:%S", tm_info); - printf("[%s] ", timeStr); - - switch (msgType) - { - case LOG_INFO: printf("[INFO] : "); break; - case LOG_ERROR: printf("[ERROR]: "); break; - case LOG_WARNING: printf("[WARN] : "); break; - case LOG_DEBUG: printf("[DEBUG]: "); break; - default: break; - } - - vprintf(text, args); - printf("\n"); + char timeStr[64]; + time_t now = time(NULL); + struct tm *tm_info = localtime(&now); + + strftime(timeStr, sizeof(timeStr), "%Y-%m-%d %H:%M:%S", tm_info); + printf("[%s] ", timeStr); + + switch (msgType) + { + case LOG_INFO: printf("[INFO] : "); break; + case LOG_ERROR: printf("[ERROR]: "); break; + case LOG_WARNING: printf("[WARN] : "); break; + case LOG_DEBUG: printf("[DEBUG]: "); break; + default: break; + } + + vprintf(text, args); + printf("\n"); } int main(int argc, char* argv[]) { - // Initialization - //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; - // First thing we do is setting our custom logger to ensure everything raylib logs - // will use our own logger instead of its internal one - SetTraceLogCallback(LogCustom); + // First thing we do is setting our custom logger to ensure everything raylib logs + // will use our own logger instead of its internal one + SetTraceLogCallback(LogCustom); - InitWindow(screenWidth, screenHeight, "raylib [core] example - custom logging"); + InitWindow(screenWidth, screenHeight, "raylib [core] example - custom logging"); - SetTargetFPS(60); - //-------------------------------------------------------------------------------------- + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // TODO: Update your variables here - //---------------------------------------------------------------------------------- + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + // TODO: Update your variables here + //---------------------------------------------------------------------------------- - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); - ClearBackground(RAYWHITE); + ClearBackground(RAYWHITE); - DrawText("Check out the console output to see the custom logger in action!", 60, 200, 20, LIGHTGRAY); + DrawText("Check out the console output to see the custom logger in action!", 60, 200, 20, LIGHTGRAY); - EndDrawing(); - //---------------------------------------------------------------------------------- - } + EndDrawing(); + //---------------------------------------------------------------------------------- + } - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- - return 0; + return 0; } diff --git a/examples/src/core/core_drop_files.c b/examples/src/core/core_drop_files.c index 5c1501b..5c3af6a 100644 --- a/examples/src/core/core_drop_files.c +++ b/examples/src/core/core_drop_files.c @@ -13,19 +13,19 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - drop files"); - + int count = 0; char **droppedFiles = { 0 }; - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -49,15 +49,15 @@ int main() else { DrawText("Dropped files:", 100, 40, 20, DARKGRAY); - + for (int i = 0; i < count; i++) { if (i%2 == 0) DrawRectangle(0, 85 + 40*i, screenWidth, 40, Fade(LIGHTGRAY, 0.5f)); else DrawRectangle(0, 85 + 40*i, screenWidth, 40, Fade(LIGHTGRAY, 0.3f)); - + DrawText(droppedFiles[i], 120, 100 + 40*i, 10, GRAY); } - + DrawText("Drop new files...", 100, 110 + 40*count, 20, DARKGRAY); } @@ -68,7 +68,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- ClearDroppedFiles(); // Clear internal buffers - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/core/core_input_gamepad.c b/examples/src/core/core_input_gamepad.c index e8a1c05..51646aa 100644 --- a/examples/src/core/core_input_gamepad.c +++ b/examples/src/core/core_input_gamepad.c @@ -3,15 +3,15 @@ * raylib [core] example - Gamepad input * * NOTE: This example requires a Gamepad connected to the system -* raylib is configured to work with the following gamepads: +* raylib is configured to work with the following gamepads: * - Xbox 360 Controller (Xbox 360, Xbox One) -* - PLAYSTATION(R)3 Controller +* - PLAYSTATION(R)3 Controller * Check raylib.h for buttons configuration * -* This example has been created using raylib 1.6 (www.raylib.com) +* This example has been created using raylib 2.5 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * -* Copyright (c) 2013-2016 Ramon Santamaria (@raysan5) +* Copyright (c) 2013-2019 Ramon Santamaria (@raysan5) * ********************************************************************************************/ @@ -26,21 +26,21 @@ #define PS3_NAME_ID "PLAYSTATION(R)3 Controller" #endif -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; + + SetConfigFlags(FLAG_MSAA_4X_HINT); // Set MSAA 4X hint before windows creation - SetConfigFlags(FLAG_MSAA_4X_HINT); // Set MSAA 4X hint before windows creation - InitWindow(screenWidth, screenHeight, "raylib [core] example - gamepad input"); - + Texture2D texPs3Pad = LoadTexture("resources/ps3.png"); Texture2D texXboxPad = LoadTexture("resources/xbox.png"); - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -56,7 +56,7 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - + if (IsGamepadAvailable(GAMEPAD_PLAYER1)) { DrawText(FormatText("GP1: %s", GetGamepadName(GAMEPAD_PLAYER1)), 10, 10, 10, BLACK); @@ -64,7 +64,7 @@ int main() if (IsGamepadName(GAMEPAD_PLAYER1, XBOX360_NAME_ID)) { DrawTexture(texXboxPad, 0, 0, DARKGRAY); - + // Draw buttons: xbox home if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_MIDDLE)) DrawCircle(394, 89, 19, RED); @@ -75,7 +75,7 @@ int main() if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_FACE_DOWN)) DrawCircle(536, 187, 15, LIME); if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_FACE_RIGHT)) DrawCircle(572, 151, 15, MAROON); if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_FACE_UP)) DrawCircle(536, 115, 15, GOLD); - + // Draw buttons: d-pad DrawRectangle(317, 202, 19, 71, BLACK); DrawRectangle(293, 228, 69, 19, BLACK); @@ -83,7 +83,7 @@ int main() if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_FACE_DOWN)) DrawRectangle(317, 202 + 45, 19, 26, RED); if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_FACE_LEFT)) DrawRectangle(292, 228, 25, 19, RED); if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_FACE_RIGHT)) DrawRectangle(292 + 44, 228, 26, 19, RED); - + // Draw buttons: left-right back if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_TRIGGER_1)) DrawCircle(259, 61, 20, RED); if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_TRIGGER_1)) DrawCircle(536, 61, 20, RED); @@ -91,21 +91,21 @@ int main() // Draw axis: left joystick DrawCircle(259, 152, 39, BLACK); DrawCircle(259, 152, 34, LIGHTGRAY); - DrawCircle(259 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_X)*20), + DrawCircle(259 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_X)*20), 152 - (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_Y)*20), 25, BLACK); - + // Draw axis: right joystick DrawCircle(461, 237, 38, BLACK); DrawCircle(461, 237, 33, LIGHTGRAY); - DrawCircle(461 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_X)*20), + DrawCircle(461 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_X)*20), 237 - (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_Y)*20), 25, BLACK); // Draw axis: left-right triggers DrawRectangle(170, 30, 15, 70, GRAY); - DrawRectangle(604, 30, 15, 70, GRAY); + DrawRectangle(604, 30, 15, 70, GRAY); DrawRectangle(170, 30, 15, (((1.0f + GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_TRIGGER))/2.0f)*70), RED); DrawRectangle(604, 30, 15, (((1.0f + GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_TRIGGER))/2.0f)*70), RED); - + //DrawText(FormatText("Xbox axis LT: %02.02f", GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_TRIGGER)), 10, 40, 10, BLACK); //DrawText(FormatText("Xbox axis RT: %02.02f", GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_TRIGGER)), 10, 60, 10, BLACK); } @@ -115,7 +115,7 @@ int main() // Draw buttons: ps if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_MIDDLE)) DrawCircle(396, 222, 13, RED); - + // Draw buttons: basic if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_MIDDLE_LEFT)) DrawRectangle(328, 170, 32, 13, RED); if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_MIDDLE_RIGHT)) DrawTriangle((Vector2){ 436, 168 }, (Vector2){ 436, 185 }, (Vector2){ 464, 177 }, RED); @@ -131,7 +131,7 @@ int main() if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_FACE_DOWN)) DrawRectangle(225, 132 + 54, 24, 30, RED); if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_FACE_LEFT)) DrawRectangle(195, 161, 30, 25, RED); if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_FACE_RIGHT)) DrawRectangle(195 + 54, 161, 30, 25, RED); - + // Draw buttons: left-right back buttons if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_TRIGGER_1)) DrawCircle(239, 82, 20, RED); if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_TRIGGER_1)) DrawCircle(557, 82, 20, RED); @@ -139,42 +139,42 @@ int main() // Draw axis: left joystick DrawCircle(319, 255, 35, BLACK); DrawCircle(319, 255, 31, LIGHTGRAY); - DrawCircle(319 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_X)*20), + DrawCircle(319 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_X)*20), 255 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_Y)*20), 25, BLACK); - + // Draw axis: right joystick DrawCircle(475, 255, 35, BLACK); DrawCircle(475, 255, 31, LIGHTGRAY); - DrawCircle(475 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_X)*20), + DrawCircle(475 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_X)*20), 255 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_Y)*20), 25, BLACK); // Draw axis: left-right triggers DrawRectangle(169, 48, 15, 70, GRAY); - DrawRectangle(611, 48, 15, 70, GRAY); + DrawRectangle(611, 48, 15, 70, GRAY); DrawRectangle(169, 48, 15, (((1.0f - GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_TRIGGER))/2.0f)*70), RED); DrawRectangle(611, 48, 15, (((1.0f - GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_TRIGGER))/2.0f)*70), RED); } else { DrawText("- GENERIC GAMEPAD -", 280, 180, 20, GRAY); - + // TODO: Draw generic gamepad } - - DrawText(FormatText("DETECTED AXIS [%i]:", GetGamepadAxisCount(GAMEPAD_PLAYER1)), 10, 50, 10, MAROON); - + + DrawText(FormatText("DETECTED AXIS [%i]:", GetGamepadAxisCount(GAMEPAD_PLAYER1)), 10, 50, 10, MAROON); + for (int i = 0; i < GetGamepadAxisCount(GAMEPAD_PLAYER1); i++) { DrawText(FormatText("AXIS %i: %.02f", i, GetGamepadAxisMovement(GAMEPAD_PLAYER1, i)), 20, 70 + 20*i, 10, DARKGRAY); } - + if (GetGamepadButtonPressed() != -1) DrawText(FormatText("DETECTED BUTTON: %i", GetGamepadButtonPressed()), 10, 430, 10, RED); else DrawText("DETECTED BUTTON: NONE", 10, 430, 10, GRAY); } else { DrawText("GP1: NOT DETECTED", 10, 10, 10, GRAY); - + DrawTexture(texXboxPad, 0, 0, LIGHTGRAY); } @@ -186,7 +186,7 @@ int main() //-------------------------------------------------------------------------------------- UnloadTexture(texPs3Pad); UnloadTexture(texXboxPad); - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/core/core_input_gestures.c b/examples/src/core/core_input_gestures.c index ce2ed86..affab3e 100644 --- a/examples/src/core/core_input_gestures.c +++ b/examples/src/core/core_input_gestures.c @@ -14,27 +14,27 @@ #define MAX_GESTURE_STRINGS 20 -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; - + const int screenWidth = 800; + const int screenHeight = 450; + InitWindow(screenWidth, screenHeight, "raylib [core] example - input gestures"); - + Vector2 touchPosition = { 0, 0 }; Rectangle touchArea = { 220, 10, screenWidth - 230, screenHeight - 20 }; - + int gesturesCount = 0; char gestureStrings[MAX_GESTURE_STRINGS][32]; int currentGesture = GESTURE_NONE; int lastGesture = GESTURE_NONE; - + //SetGesturesEnabled(0b0000000000001001); // Enable only some gestures to be detected - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -65,14 +65,14 @@ int main() case GESTURE_PINCH_OUT: strcpy(gestureStrings[gesturesCount], "GESTURE PINCH OUT"); break; default: break; } - + gesturesCount++; - + // Reset gestures strings if (gesturesCount >= MAX_GESTURE_STRINGS) { for (int i = 0; i < MAX_GESTURE_STRINGS; i++) strcpy(gestureStrings[i], "\0"); - + gesturesCount = 0; } } @@ -84,32 +84,32 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - + DrawRectangleRec(touchArea, GRAY); DrawRectangle(225, 15, screenWidth - 240, screenHeight - 30, RAYWHITE); - + DrawText("GESTURES TEST AREA", screenWidth - 270, screenHeight - 40, 20, Fade(GRAY, 0.5f)); - + for (int i = 0; i < gesturesCount; i++) { if (i%2 == 0) DrawRectangle(10, 30 + 20*i, 200, 20, Fade(LIGHTGRAY, 0.5f)); else DrawRectangle(10, 30 + 20*i, 200, 20, Fade(LIGHTGRAY, 0.3f)); - + if (i < gesturesCount - 1) DrawText(gestureStrings[i], 35, 36 + 20*i, 10, DARKGRAY); else DrawText(gestureStrings[i], 35, 36 + 20*i, 10, MAROON); } - + DrawRectangleLines(10, 29, 200, screenHeight - 50, GRAY); DrawText("DETECTED GESTURES", 50, 15, 10, GRAY); - + if (currentGesture != GESTURE_NONE) DrawCircleV(touchPosition, 30, MAROON); - + EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- } \ No newline at end of file diff --git a/examples/src/core/core_input_keys.c b/examples/src/core/core_input_keys.c index 69384fd..bbb71ee 100644 --- a/examples/src/core/core_input_keys.c +++ b/examples/src/core/core_input_keys.c @@ -11,18 +11,18 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - keyboard input"); Vector2 ballPosition = { (float)screenWidth/2, (float)screenHeight/2 }; - SetTargetFPS(60); // Set target frames-per-second + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/src/core/core_input_mouse.c b/examples/src/core/core_input_mouse.c index 24d2dfc..ad205ae 100644 --- a/examples/src/core/core_input_mouse.c +++ b/examples/src/core/core_input_mouse.c @@ -11,19 +11,19 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - mouse input"); Vector2 ballPosition = { -100.0f, -100.0f }; Color ballColor = DARKBLUE; - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //--------------------------------------------------------------------------------------- // Main game loop @@ -32,7 +32,7 @@ int main() // Update //---------------------------------------------------------------------------------- ballPosition = GetMousePosition(); - + if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) ballColor = MAROON; else if (IsMouseButtonPressed(MOUSE_MIDDLE_BUTTON)) ballColor = LIME; else if (IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)) ballColor = DARKBLUE; diff --git a/examples/src/core/core_input_mouse_wheel.c b/examples/src/core/core_input_mouse_wheel.c index 48cf704..7c3e2a1 100644 --- a/examples/src/core/core_input_mouse_wheel.c +++ b/examples/src/core/core_input_mouse_wheel.c @@ -11,19 +11,19 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - input mouse wheel"); int boxPositionY = screenHeight/2 - 40; int scrollSpeed = 4; // Scrolling speed in pixels - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/src/core/core_input_multitouch.c b/examples/src/core/core_input_multitouch.c index 5baab27..5fbb086 100644 --- a/examples/src/core/core_input_multitouch.c +++ b/examples/src/core/core_input_multitouch.c @@ -13,31 +13,31 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - input multitouch"); Vector2 ballPosition = { -100.0f, -100.0f }; Color ballColor = BEIGE; - + int touchCounter = 0; - Vector2 touchPosition; + Vector2 touchPosition = { 0.0f }; - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //--------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- ballPosition = GetMousePosition(); - + ballColor = BEIGE; if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) ballColor = MAROON; @@ -47,7 +47,7 @@ int main() if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) touchCounter = 10; if (IsMouseButtonPressed(MOUSE_MIDDLE_BUTTON)) touchCounter = 10; if (IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)) touchCounter = 10; - + if (touchCounter > 0) touchCounter--; //---------------------------------------------------------------------------------- @@ -59,15 +59,15 @@ int main() // Multitouch for (int i = 0; i < MAX_TOUCH_POINTS; ++i) - { + { touchPosition = GetTouchPosition(i); // Get the touch point - + if ((touchPosition.x >= 0) && (touchPosition.y >= 0)) // Make sure point is not (-1,-1) as this means there is no touch for it { // Draw circle and touch index number DrawCircleV(touchPosition, 34, ORANGE); DrawText(FormatText("%d", i), touchPosition.x - 10, touchPosition.y - 70, 40, BLACK); - } + } } // Draw the normal mouse location diff --git a/examples/src/core/core_loading_thread.c b/examples/src/core/core_loading_thread.c index 1dacd69..773ad2e 100644 --- a/examples/src/core/core_loading_thread.c +++ b/examples/src/core/core_loading_thread.c @@ -2,7 +2,7 @@ * * raylib example - loading thread * -* NOTE: This example requires linking with pthreads library, +* NOTE: This example requires linking with pthreads library, * on MinGW, it can be accomplished passing -static parameter to compiler * * This example has been created using raylib 2.5 (www.raylib.com) @@ -27,21 +27,21 @@ static void *LoadDataThread(void *arg); // Loading data thread function decl static int dataProgress = 0; // Data progress accumulator -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - loading thread"); - + pthread_t threadId; // Loading data thread id enum { STATE_WAITING, STATE_LOADING, STATE_FINISHED } state = STATE_WAITING; int framesCounter = 0; - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -90,25 +90,25 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - - switch (state) + + switch (state) { case STATE_WAITING: DrawText("PRESS ENTER to START LOADING DATA", 150, 170, 20, DARKGRAY); break; case STATE_LOADING: { DrawRectangle(150, 200, dataProgress, 60, SKYBLUE); if ((framesCounter/15)%2) DrawText("LOADING DATA...", 240, 210, 40, DARKBLUE); - + } break; case STATE_FINISHED: { DrawRectangle(150, 200, 500, 60, LIME); DrawText("DATA LOADED!", 250, 210, 40, GREEN); - + } break; default: break; } - + DrawRectangleLines(150, 200, 500, 60, DARKGRAY); EndDrawing(); @@ -130,11 +130,11 @@ static void *LoadDataThread(void *arg) clock_t prevTime = clock(); // Previous time // We simulate data loading with a time counter for 5 seconds - while (timeCounter < 5000) + while (timeCounter < 5000) { clock_t currentTime = clock() - prevTime; timeCounter = currentTime*1000/CLOCKS_PER_SEC; - + // We accumulate time over a global variable to be used in // main thread as a progress bar dataProgress = timeCounter/10; diff --git a/examples/src/core/core_random_values.c b/examples/src/core/core_random_values.c index 06e550d..52dabe0 100644 --- a/examples/src/core/core_random_values.c +++ b/examples/src/core/core_random_values.c @@ -11,20 +11,20 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - generate random values"); - int framesCounter = 0; // Variable used to count frames + int framesCounter = 0; // Variable used to count frames int randValue = GetRandomValue(-8, 5); // Get a random integer number between -8 and 5 (both included) - SetTargetFPS(60); // Set our game to run at 60 frames-per-second + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/src/core/core_storage_values.c b/examples/src/core/core_storage_values.c index 43f0882..fbbbc52 100644 --- a/examples/src/core/core_storage_values.c +++ b/examples/src/core/core_storage_values.c @@ -14,21 +14,20 @@ // NOTE: Storage positions must start with 0, directly related to file memory layout typedef enum { STORAGE_SCORE = 0, STORAGE_HISCORE } StorageData; -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - storage save/load values"); - + int score = 0; int hiscore = 0; - int framesCounter = 0; - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -41,7 +40,7 @@ int main() score = GetRandomValue(1000, 2000); hiscore = GetRandomValue(2000, 4000); } - + if (IsKeyPressed(KEY_ENTER)) { StorageSaveValue(STORAGE_SCORE, score); @@ -53,7 +52,7 @@ int main() score = StorageLoadValue(STORAGE_SCORE); hiscore = StorageLoadValue(STORAGE_HISCORE); } - + framesCounter++; //---------------------------------------------------------------------------------- @@ -65,9 +64,9 @@ int main() DrawText(FormatText("SCORE: %i", score), 280, 130, 40, MAROON); DrawText(FormatText("HI-SCORE: %i", hiscore), 210, 200, 50, BLACK); - + DrawText(FormatText("frames: %i", framesCounter), 10, 10, 20, LIME); - + DrawText("Press R to generate random numbers", 220, 40, 20, LIGHTGRAY); DrawText("Press ENTER to SAVE values", 250, 310, 20, LIGHTGRAY); DrawText("Press SPACE to LOAD values", 252, 350, 20, LIGHTGRAY); @@ -77,7 +76,7 @@ int main() } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/core/core_vr_simulator.c b/examples/src/core/core_vr_simulator.c index b79ed90..134a36f 100644 --- a/examples/src/core/core_vr_simulator.c +++ b/examples/src/core/core_vr_simulator.c @@ -17,22 +17,22 @@ #define GLSL_VERSION 100 #endif -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 1080; - int screenHeight = 600; - + const int screenWidth = 1080; + const int screenHeight = 600; + // NOTE: screenWidth/screenHeight should match VR device aspect ratio - + InitWindow(screenWidth, screenHeight, "raylib [core] example - vr simulator"); // Init VR simulator (Oculus Rift CV1 parameters) InitVrSimulator(); VrDeviceInfo hmd = { 0 }; // VR device parameters (head-mounted-device) - + // Oculus Rift CV1 parameters for simulator hmd.hResolution = 2160; // HMD horizontal resolution in pixels hmd.vResolution = 1200; // HMD vertical resolution in pixels @@ -42,7 +42,7 @@ int main() hmd.eyeToScreenDistance = 0.041f; // HMD distance between eye and display in meters hmd.lensSeparationDistance = 0.07f; // HMD lens separation distance in meters hmd.interpupillaryDistance = 0.07f; // HMD IPD (distance between pupils) in meters - + // NOTE: CV1 uses a Fresnel-hybrid-asymmetric lenses with specific distortion compute shaders. // Following parameters are an approximation to distortion stereo rendering but results differ from actual device. hmd.lensDistortionValues[0] = 1.0f; // HMD lens distortion constant parameter 0 @@ -53,12 +53,12 @@ int main() hmd.chromaAbCorrection[1] = -0.004f; // HMD chromatic aberration correction parameter 1 hmd.chromaAbCorrection[2] = 1.014f; // HMD chromatic aberration correction parameter 2 hmd.chromaAbCorrection[3] = 0.0f; // HMD chromatic aberration correction parameter 3 - + // Distortion shader (uses device lens distortion and chroma) Shader distortion = LoadShader(0, FormatText("resources/distortion%i.fs", GLSL_VERSION)); - + SetVrConfiguration(hmd, distortion); // Set Vr device parameters for stereo rendering - + // Define the camera to look into our 3d world Camera camera; camera.position = (Vector3){ 5.0f, 2.0f, 5.0f }; // Camera position @@ -66,11 +66,11 @@ int main() camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 60.0f; // Camera field-of-view Y camera.type = CAMERA_PERSPECTIVE; // Camera type - + Vector3 cubePosition = { 0.0f, 0.0f, 0.0f }; - + SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set first person camera mode - + SetTargetFPS(90); // Set our game to run at 90 frames-per-second //-------------------------------------------------------------------------------------- @@ -89,7 +89,7 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - + BeginVrDrawing(); BeginMode3D(camera); @@ -100,7 +100,7 @@ int main() DrawGrid(40, 1.0f); EndMode3D(); - + EndVrDrawing(); DrawFPS(10, 10); diff --git a/examples/src/core/core_window_letterbox.c b/examples/src/core/core_window_letterbox.c index 8c0843d..f90214c 100644 --- a/examples/src/core/core_window_letterbox.c +++ b/examples/src/core/core_window_letterbox.c @@ -16,7 +16,7 @@ #define max(a, b) ((a)>(b)? (a) : (b)) #define min(a, b) ((a)<(b)? (a) : (b)) -int main() +int main(void) { const int windowWidth = 800; const int windowHeight = 450; @@ -28,63 +28,63 @@ int main() int gameScreenWidth = 640; int gameScreenHeight = 480; - + // Render texture initialization RenderTexture2D target = LoadRenderTexture(gameScreenWidth, gameScreenHeight); SetTextureFilter(target.texture, FILTER_BILINEAR); // Texture scale filter to use - + Color colors[10] = { 0 }; for (int i = 0; i < 10; i++) colors[i] = (Color){ GetRandomValue(100, 250), GetRandomValue(50, 150), GetRandomValue(10, 100), 255 }; - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop - while( !WindowShouldClose() ) // Detect window close button or ESC key + while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- // Compute required framebuffer scaling float scale = min((float)GetScreenWidth()/gameScreenWidth, (float)GetScreenHeight()/gameScreenHeight); - - if (IsKeyPressed(KEY_SPACE)) + + if (IsKeyPressed(KEY_SPACE)) { // Recalculate random colors for the bars for (int i = 0; i < 10; i++) colors[i] = (Color){ GetRandomValue(100, 250), GetRandomValue(50, 150), GetRandomValue(10, 100), 255 }; } //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); ClearBackground(BLACK); - + // Draw everything in the render texture BeginTextureMode(target); - + ClearBackground(RAYWHITE); // Clear render texture background color - + for (int i = 0; i < 10; i++) DrawRectangle(0, (gameScreenHeight/10)*i, gameScreenWidth, gameScreenHeight/10, colors[i]); - + DrawText("You can resize the window,\nand see the screen scaling!", 10, 25, 20, WHITE); - + EndTextureMode(); // Draw RenderTexture2D to window, properly scaled DrawTexturePro(target.texture, (Rectangle){ 0.0f, 0.0f, (float)target.texture.width, (float)-target.texture.height }, - (Rectangle){ (GetScreenWidth() - ((float)gameScreenWidth*scale))*0.5, (GetScreenHeight() - ((float)gameScreenHeight*scale))*0.5, + (Rectangle){ (GetScreenWidth() - ((float)gameScreenWidth*scale))*0.5, (GetScreenHeight() - ((float)gameScreenHeight*scale))*0.5, (float)gameScreenWidth*scale, (float)gameScreenHeight*scale }, (Vector2){ 0, 0 }, 0.0f, WHITE); - + EndDrawing(); //-------------------------------------------------------------------------------------- } - + // De-Initialization //-------------------------------------------------------------------------------------- UnloadRenderTexture(target); // Unload render texture - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- - + return 0; } diff --git a/examples/src/core/core_world_screen.c b/examples/src/core/core_world_screen.c index 460f6b8..434952b 100644 --- a/examples/src/core/core_world_screen.c +++ b/examples/src/core/core_world_screen.c @@ -11,12 +11,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera free"); @@ -29,9 +29,9 @@ int main() camera.type = CAMERA_PERSPECTIVE; Vector3 cubePosition = { 0.0f, 0.0f, 0.0f }; - + Vector2 cubeScreenPosition; - + SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode SetTargetFPS(60); // Set our game to run at 60 frames-per-second @@ -43,7 +43,7 @@ int main() // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update camera - + // Calculate cube screen space position (with a little offset to be in top) cubeScreenPosition = GetWorldToScreen((Vector3){cubePosition.x, cubePosition.y + 2.5f, cubePosition.z}, camera); //---------------------------------------------------------------------------------- @@ -62,7 +62,7 @@ int main() DrawGrid(10, 1.0f); EndMode3D(); - + DrawText("Enemy: 100 / 100", cubeScreenPosition.x - MeasureText("Enemy: 100 / 100", 20) / 2, cubeScreenPosition.y, 20, BLACK); DrawText("Text is always on top of the cube", (screenWidth - MeasureText("Text is always on top of the cube", 20)) / 2, 25, 20, GRAY); diff --git a/examples/src/models/models_animation.c b/examples/src/models/models_animation.c index a75241b..294b07a 100644 --- a/examples/src/models/models_animation.c +++ b/examples/src/models/models_animation.c @@ -11,12 +11,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [models] example - model animation"); @@ -32,7 +32,7 @@ int main() Model model = LoadModel("resources/guy/guy.iqm"); // Load the animated model mesh and basic data Texture2D texture = LoadTexture("resources/guy/guytex.png"); // Load model texture and set material SetMaterialTexture(&model.materials[0], MAP_DIFFUSE, texture); // Set model material map texture - + Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position // Load animation data @@ -91,7 +91,7 @@ int main() //-------------------------------------------------------------------------------------- // Unload model animations data for (int i = 0; i < animsCount; i++) UnloadModelAnimation(anims[i]); - + UnloadModel(model); // Unload model CloseWindow(); // Close window and OpenGL context diff --git a/examples/src/models/models_billboard.c b/examples/src/models/models_billboard.c index 5965571..597e9a6 100644 --- a/examples/src/models/models_billboard.c +++ b/examples/src/models/models_billboard.c @@ -11,12 +11,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [models] example - drawing billboards"); @@ -27,10 +27,10 @@ int main() camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; camera.fovy = 45.0f; camera.type = CAMERA_PERSPECTIVE; - + Texture2D bill = LoadTexture("resources/billboard.png"); // Our texture billboard Vector3 billPosition = { 0.0f, 2.0f, 0.0f }; // Position where draw billboard - + SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode SetTargetFPS(60); // Set our game to run at 60 frames-per-second @@ -51,11 +51,11 @@ int main() ClearBackground(RAYWHITE); BeginMode3D(camera); - + DrawGrid(10, 1.0f); // Draw a grid - + DrawBillboard(camera, bill, billPosition, 2.0f, WHITE); - + EndMode3D(); DrawFPS(10, 10); diff --git a/examples/src/models/models_box_collisions.c b/examples/src/models/models_box_collisions.c index 41f6056..0dd0710 100644 --- a/examples/src/models/models_box_collisions.c +++ b/examples/src/models/models_box_collisions.c @@ -11,31 +11,31 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [models] example - box collisions"); // Define the camera to look into our 3d world Camera camera = {{ 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f, 0 }; - + Vector3 playerPosition = { 0.0f, 1.0f, 2.0f }; Vector3 playerSize = { 1.0f, 2.0f, 1.0f }; Color playerColor = GREEN; - + Vector3 enemyBoxPos = { -4.0f, 1.0f, 0.0f }; Vector3 enemyBoxSize = { 2.0f, 2.0f, 2.0f }; - + Vector3 enemySpherePos = { 4.0f, 0.0f, 0.0f }; float enemySphereSize = 1.5f; - + bool collision = false; - SetTargetFPS(60); // Set our game to run at 60 frames-per-second + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -43,40 +43,40 @@ int main() { // Update //---------------------------------------------------------------------------------- - + // Move player if (IsKeyDown(KEY_RIGHT)) playerPosition.x += 0.2f; else if (IsKeyDown(KEY_LEFT)) playerPosition.x -= 0.2f; else if (IsKeyDown(KEY_DOWN)) playerPosition.z += 0.2f; else if (IsKeyDown(KEY_UP)) playerPosition.z -= 0.2f; - + collision = false; - + // Check collisions player vs enemy-box if (CheckCollisionBoxes( - (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2, - playerPosition.y - playerSize.y/2, - playerPosition.z - playerSize.z/2 }, + (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2, + playerPosition.y - playerSize.y/2, + playerPosition.z - playerSize.z/2 }, (Vector3){ playerPosition.x + playerSize.x/2, - playerPosition.y + playerSize.y/2, + playerPosition.y + playerSize.y/2, playerPosition.z + playerSize.z/2 }}, - (BoundingBox){(Vector3){ enemyBoxPos.x - enemyBoxSize.x/2, - enemyBoxPos.y - enemyBoxSize.y/2, - enemyBoxPos.z - enemyBoxSize.z/2 }, + (BoundingBox){(Vector3){ enemyBoxPos.x - enemyBoxSize.x/2, + enemyBoxPos.y - enemyBoxSize.y/2, + enemyBoxPos.z - enemyBoxSize.z/2 }, (Vector3){ enemyBoxPos.x + enemyBoxSize.x/2, - enemyBoxPos.y + enemyBoxSize.y/2, + enemyBoxPos.y + enemyBoxSize.y/2, enemyBoxPos.z + enemyBoxSize.z/2 }})) collision = true; - + // Check collisions player vs enemy-sphere if (CheckCollisionBoxSphere( - (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2, - playerPosition.y - playerSize.y/2, - playerPosition.z - playerSize.z/2 }, + (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2, + playerPosition.y - playerSize.y/2, + playerPosition.z - playerSize.z/2 }, (Vector3){ playerPosition.x + playerSize.x/2, - playerPosition.y + playerSize.y/2, - playerPosition.z + playerSize.z/2 }}, + playerPosition.y + playerSize.y/2, + playerPosition.z + playerSize.z/2 }}, enemySpherePos, enemySphereSize)) collision = true; - + if (collision) playerColor = RED; else playerColor = GREEN; //---------------------------------------------------------------------------------- @@ -92,18 +92,18 @@ int main() // Draw enemy-box DrawCube(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, GRAY); DrawCubeWires(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, DARKGRAY); - + // Draw enemy-sphere DrawSphere(enemySpherePos, enemySphereSize, GRAY); DrawSphereWires(enemySpherePos, enemySphereSize, 16, 16, DARKGRAY); - + // Draw player DrawCubeV(playerPosition, playerSize, playerColor); DrawGrid(10, 1.0f); // Draw a grid EndMode3D(); - + DrawText("Move player with cursors to collide", 220, 40, 20, GRAY); DrawFPS(10, 10); diff --git a/examples/src/models/models_cubicmap.c b/examples/src/models/models_cubicmap.c index ac24188..f399a56 100644 --- a/examples/src/models/models_cubicmap.c +++ b/examples/src/models/models_cubicmap.c @@ -11,12 +11,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [models] example - cubesmap loading and drawing"); @@ -25,18 +25,18 @@ int main() Image image = LoadImage("resources/cubicmap.png"); // Load cubicmap image (RAM) Texture2D cubicmap = LoadTextureFromImage(image); // Convert image to texture to display (VRAM) - + Mesh mesh = GenMeshCubicmap(image, (Vector3){ 1.0f, 1.0f, 1.0f }); Model model = LoadModelFromMesh(mesh); - + // NOTE: By default each cube is mapped to one part of texture atlas Texture2D texture = LoadTexture("resources/cubicmap_atlas.png"); // Load map texture model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture - + Vector3 mapPosition = { -16.0f, 0.0f, -8.0f }; // Set model position UnloadImage(image); // Unload cubesmap image from RAM, already uploaded to VRAM - + SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode SetTargetFPS(60); // Set our game to run at 60 frames-per-second @@ -61,10 +61,10 @@ int main() DrawModel(model, mapPosition, 1.0f, WHITE); EndMode3D(); - + DrawTextureEx(cubicmap, (Vector2){ screenWidth - cubicmap.width*4 - 20, 20 }, 0.0f, 4.0f, WHITE); DrawRectangleLines(screenWidth - cubicmap.width*4 - 20, 20, cubicmap.width*4, cubicmap.height*4, GREEN); - + DrawText("cubicmap image used to", 658, 90, 10, GRAY); DrawText("generate map 3d model", 658, 104, 10, GRAY); diff --git a/examples/src/models/models_first_person_maze.c b/examples/src/models/models_first_person_maze.c index 093334b..4236374 100644 --- a/examples/src/models/models_first_person_maze.c +++ b/examples/src/models/models_first_person_maze.c @@ -13,12 +13,12 @@ #include // Required for: free() -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [models] example - first person maze"); @@ -29,18 +29,18 @@ int main() Texture2D cubicmap = LoadTextureFromImage(imMap); // Convert image to texture to display (VRAM) Mesh mesh = GenMeshCubicmap(imMap, (Vector3){ 1.0f, 1.0f, 1.0f }); Model model = LoadModelFromMesh(mesh); - + // NOTE: By default each cube is mapped to one part of texture atlas Texture2D texture = LoadTexture("resources/cubicmap_atlas.png"); // Load map texture model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture - + // Get map image data to be used for collision detection Color *mapPixels = GetImageData(imMap); UnloadImage(imMap); // Unload image from RAM - + Vector3 mapPosition = { -16.0f, 0.0f, -8.0f }; // Set model position Vector3 playerPosition = camera.position; // Set player position - + SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set camera mode SetTargetFPS(60); // Set our game to run at 60 frames-per-second @@ -52,23 +52,23 @@ int main() // Update //---------------------------------------------------------------------------------- Vector3 oldCamPos = camera.position; // Store old camera position - + UpdateCamera(&camera); // Update camera - + // Check player collision (we simplify to 2D collision detection) Vector2 playerPos = { camera.position.x, camera.position.z }; float playerRadius = 0.1f; // Collision radius (player is modelled as a cilinder for collision) - + int playerCellX = (int)(playerPos.x - mapPosition.x + 0.5f); int playerCellY = (int)(playerPos.y - mapPosition.z + 0.5f); - + // Out-of-limits security check if (playerCellX < 0) playerCellX = 0; else if (playerCellX >= cubicmap.width) playerCellX = cubicmap.width - 1; - + if (playerCellY < 0) playerCellY = 0; else if (playerCellY >= cubicmap.height) playerCellY = cubicmap.height - 1; - + // Check map collisions using image data and player position // TODO: Improvement: Just check player surrounding cells for collision for (int y = 0; y < cubicmap.height; y++) @@ -76,7 +76,7 @@ int main() for (int x = 0; x < cubicmap.width; x++) { if ((mapPixels[y*cubicmap.width + x].r == 255) && // Collision: white pixel, only check R channel - (CheckCollisionCircleRec(playerPos, playerRadius, + (CheckCollisionCircleRec(playerPos, playerRadius, (Rectangle){ mapPosition.x - 0.5f + x*1.0f, mapPosition.z - 0.5f + y*1.0f, 1.0f, 1.0f }))) { // Collision detected, reset camera position @@ -98,10 +98,10 @@ int main() //DrawCubeV(playerPosition, (Vector3){ 0.2f, 0.4f, 0.2f }, RED); // Draw player EndMode3D(); - + DrawTextureEx(cubicmap, (Vector2){ GetScreenWidth() - cubicmap.width*4 - 20, 20 }, 0.0f, 4.0f, WHITE); DrawRectangleLines(GetScreenWidth() - cubicmap.width*4 - 20, 20, cubicmap.width*4, cubicmap.height*4, GREEN); - + // Draw player position radar DrawRectangle(GetScreenWidth() - cubicmap.width*4 - 20 + playerCellX*4, 20 + playerCellY*4, 4, 4, RED); @@ -114,7 +114,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- free(mapPixels); // Unload color array - + UnloadTexture(cubicmap); // Unload cubicmap texture UnloadTexture(texture); // Unload map texture UnloadModel(model); // Unload map model diff --git a/examples/src/models/models_geometric_shapes.c b/examples/src/models/models_geometric_shapes.c index 82ca4c6..3947792 100644 --- a/examples/src/models/models_geometric_shapes.c +++ b/examples/src/models/models_geometric_shapes.c @@ -11,12 +11,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [models] example - geometric shapes"); @@ -28,7 +28,7 @@ int main() camera.fovy = 45.0f; camera.type = CAMERA_PERSPECTIVE; - SetTargetFPS(60); // Set our game to run at 60 frames-per-second + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/src/models/models_heightmap.c b/examples/src/models/models_heightmap.c index e0475f1..e242db1 100644 --- a/examples/src/models/models_heightmap.c +++ b/examples/src/models/models_heightmap.c @@ -11,12 +11,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [models] example - heightmap loading and drawing"); @@ -25,7 +25,7 @@ int main() Image image = LoadImage("resources/heightmap.png"); // Load heightmap image (RAM) Texture2D texture = LoadTextureFromImage(image); // Convert image to texture (VRAM) - + Mesh mesh = GenMeshHeightmap(image, (Vector3){ 16, 8, 16 }); // Generate heightmap mesh (RAM and VRAM) Model model = LoadModelFromMesh(mesh); // Load model from generated mesh @@ -33,7 +33,7 @@ int main() Vector3 mapPosition = { -8.0f, 0.0f, -8.0f }; // Define model position UnloadImage(image); // Unload heightmap image from RAM, already uploaded to VRAM - + SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode SetTargetFPS(60); // Set our game to run at 60 frames-per-second @@ -60,7 +60,7 @@ int main() DrawGrid(20, 1.0f); EndMode3D(); - + DrawTexture(texture, screenWidth - texture.width - 20, 20, WHITE); DrawRectangleLines(screenWidth - texture.width - 20, 20, texture.width, texture.height, GREEN); diff --git a/examples/src/models/models_material_pbr.c b/examples/src/models/models_material_pbr.c index 5c308cf..8d51eef 100644 --- a/examples/src/models/models_material_pbr.c +++ b/examples/src/models/models_material_pbr.c @@ -25,12 +25,12 @@ // PBR material loading static Material LoadMaterialPBR(Color albedo, float metalness, float roughness); -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; SetConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available) InitWindow(screenWidth, screenHeight, "raylib [models] example - pbr material"); @@ -45,7 +45,7 @@ int main() // Load model and PBR material Model model = LoadModel("resources/pbr/trooper.obj"); - + // Mesh tangents are generated... and uploaded to GPU // NOTE: New VBO for tangents is generated at default location and also binded to mesh VAO MeshTangents(&model.meshes[0]); @@ -54,13 +54,13 @@ int main() // Define lights attributes // NOTE: Shader is passed to every light on creation to define shader bindings internally - Light lights[MAX_LIGHTS] = { + Light lights[MAX_LIGHTS] = { CreateLight(LIGHT_POINT, (Vector3){ LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 0, 255 }, model.materials[0].shader), CreateLight(LIGHT_POINT, (Vector3){ 0.0f, LIGHT_HEIGHT, LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 0, 255, 0, 255 }, model.materials[0].shader), CreateLight(LIGHT_POINT, (Vector3){ -LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 0, 0, 255, 255 }, model.materials[0].shader), - CreateLight(LIGHT_DIRECTIONAL, (Vector3){ 0.0f, LIGHT_HEIGHT*2.0f, -LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 255, 255 }, model.materials[0].shader) + CreateLight(LIGHT_DIRECTIONAL, (Vector3){ 0.0f, LIGHT_HEIGHT*2.0f, -LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 255, 255 }, model.materials[0].shader) }; - + SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode SetTargetFPS(60); // Set our game to run at 60 frames-per-second @@ -72,7 +72,7 @@ int main() // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update camera - + // Send to material PBR shader camera view position float cameraPos[3] = { camera.position.x, camera.position.y, camera.position.z }; SetShaderValue(model.materials[0].shader, model.materials[0].shader.locs[LOC_VECTOR_VIEW], cameraPos, UNIFORM_VEC3); @@ -87,7 +87,7 @@ int main() BeginMode3D(camera); DrawModel(model, Vector3Zero(), 1.0f, WHITE); - + DrawGrid(10, 1.0f); EndMode3D(); @@ -114,11 +114,12 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) { Material mat = { 0 }; // NOTE: All maps textures are set to { 0 } - #define PATH_PBR_VS "resources/shaders/pbr.vs" // Path to physically based rendering vertex shader - #define PATH_PBR_FS "resources/shaders/pbr.fs" // Path to physically based rendering fragment shader - - mat.shader = LoadShader(PATH_PBR_VS, PATH_PBR_FS); - +#if defined(PLATFORM_DESKTOP) + mat.shader = LoadShader("resources/shaders/glsl330/pbr.vs", "resources/shaders/glsl330/pbr.fs"); +#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB + mat.shader = LoadShader("resources/shaders/glsl100/pbr.vs", "resources/shaders/glsl100/pbr.fs"); +#endif + // Get required locations points for PBR material // NOTE: Those location names must be available and used in the shader code mat.shader.locs[LOC_MAP_ALBEDO] = GetShaderLocation(mat.shader, "albedo.sampler"); @@ -136,7 +137,7 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) mat.shader.locs[LOC_MATRIX_MODEL] = GetShaderLocation(mat.shader, "matModel"); mat.shader.locs[LOC_MATRIX_VIEW] = GetShaderLocation(mat.shader, "view"); mat.shader.locs[LOC_VECTOR_VIEW] = GetShaderLocation(mat.shader, "viewPos"); - + // Set PBR standard maps mat.maps[MAP_ALBEDO].texture = LoadTexture("resources/pbr/trooper_albedo.png"); mat.maps[MAP_NORMAL].texture = LoadTexture("resources/pbr/trooper_normals.png"); @@ -144,23 +145,33 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) mat.maps[MAP_ROUGHNESS].texture = LoadTexture("resources/pbr/trooper_roughness.png"); mat.maps[MAP_OCCLUSION].texture = LoadTexture("resources/pbr/trooper_ao.png"); - // Set environment maps - #define PATH_CUBEMAP_VS "resources/shaders/cubemap.vs" // Path to equirectangular to cubemap vertex shader - #define PATH_CUBEMAP_FS "resources/shaders/cubemap.fs" // Path to equirectangular to cubemap fragment shader - #define PATH_SKYBOX_VS "resources/shaders/skybox.vs" // Path to skybox vertex shader - #define PATH_IRRADIANCE_FS "resources/shaders/irradiance.fs" // Path to irradiance (GI) calculation fragment shader - #define PATH_PREFILTER_FS "resources/shaders/prefilter.fs" // Path to reflection prefilter calculation fragment shader - #define PATH_BRDF_VS "resources/shaders/brdf.vs" // Path to bidirectional reflectance distribution function vertex shader - #define PATH_BRDF_FS "resources/shaders/brdf.fs" // Path to bidirectional reflectance distribution function fragment shader - - Shader shdrCubemap = LoadShader(PATH_CUBEMAP_VS, PATH_CUBEMAP_FS); - printf("Loaded shader: cubemap\n"); - Shader shdrIrradiance = LoadShader(PATH_SKYBOX_VS, PATH_IRRADIANCE_FS); - printf("Loaded shader: irradiance\n"); - Shader shdrPrefilter = LoadShader(PATH_SKYBOX_VS, PATH_PREFILTER_FS); - printf("Loaded shader: prefilter\n"); - Shader shdrBRDF = LoadShader(PATH_BRDF_VS, PATH_BRDF_FS); - printf("Loaded shader: brdf\n"); + // Load equirectangular to cubemap shader +#if defined(PLATFORM_DESKTOP) + Shader shdrCubemap = LoadShader("resources/shaders/glsl330/cubemap.vs", "resources/shaders/glsl330/cubemap.fs"); +#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB + Shader shdrCubemap = LoadShader("resources/shaders/glsl100/cubemap.vs", "resources/shaders/glsl100/cubemap.fs"); +#endif + + // Load irradiance (GI) calculation shader +#if defined(PLATFORM_DESKTOP) + Shader shdrIrradiance = LoadShader("resources/shaders/glsl330/skybox.vs", "resources/shaders/glsl330/irradiance.fs"); +#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB + Shader shdrIrradiance = LoadShader("resources/shaders/glsl100/skybox.vs", "resources/shaders/glsl100/irradiance.fs"); +#endif + + // Load reflection prefilter calculation shader +#if defined(PLATFORM_DESKTOP) + Shader shdrPrefilter = LoadShader("resources/shaders/glsl330/skybox.vs", "resources/shaders/glsl330/prefilter.fs"); +#else + Shader shdrPrefilter = LoadShader("resources/shaders/glsl100/skybox.vs", "resources/shaders/glsl100/prefilter.fs"); +#endif + + // Load bidirectional reflectance distribution function shader +#if defined(PLATFORM_DESKTOP) + Shader shdrBRDF = LoadShader("resources/shaders/glsl330/brdf.vs", "resources/shaders/glsl330/brdf.fs"); +#else + Shader shdrBRDF = LoadShader("resources/shaders/glsl100/brdf.vs", "resources/shaders/glsl100/brdf.fs"); +#endif // Setup required shader locations SetShaderValue(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, UNIFORM_INT); @@ -174,27 +185,27 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) mat.maps[MAP_BRDF].texture = GenTextureBRDF(shdrBRDF, BRDF_SIZE); UnloadTexture(cubemap); UnloadTexture(texHDR); - + // Unload already used shaders (to create specific textures) UnloadShader(shdrCubemap); UnloadShader(shdrIrradiance); UnloadShader(shdrPrefilter); UnloadShader(shdrBRDF); - + // Set textures filtering for better quality SetTextureFilter(mat.maps[MAP_ALBEDO].texture, FILTER_BILINEAR); SetTextureFilter(mat.maps[MAP_NORMAL].texture, FILTER_BILINEAR); SetTextureFilter(mat.maps[MAP_METALNESS].texture, FILTER_BILINEAR); SetTextureFilter(mat.maps[MAP_ROUGHNESS].texture, FILTER_BILINEAR); SetTextureFilter(mat.maps[MAP_OCCLUSION].texture, FILTER_BILINEAR); - + // Enable sample usage in shader for assigned textures SetShaderValue(mat.shader, GetShaderLocation(mat.shader, "albedo.useSampler"), (int[1]){ 1 }, UNIFORM_INT); SetShaderValue(mat.shader, GetShaderLocation(mat.shader, "normals.useSampler"), (int[1]){ 1 }, UNIFORM_INT); SetShaderValue(mat.shader, GetShaderLocation(mat.shader, "metalness.useSampler"), (int[1]){ 1 }, UNIFORM_INT); SetShaderValue(mat.shader, GetShaderLocation(mat.shader, "roughness.useSampler"), (int[1]){ 1 }, UNIFORM_INT); SetShaderValue(mat.shader, GetShaderLocation(mat.shader, "occlusion.useSampler"), (int[1]){ 1 }, UNIFORM_INT); - + int renderModeLoc = GetShaderLocation(mat.shader, "renderMode"); SetShaderValue(mat.shader, renderModeLoc, (int[1]){ 0 }, UNIFORM_INT); diff --git a/examples/src/models/models_mesh_generation.c b/examples/src/models/models_mesh_generation.c index 2b4b75a..cfc3bdd 100644 --- a/examples/src/models/models_mesh_generation.c +++ b/examples/src/models/models_mesh_generation.c @@ -11,24 +11,24 @@ #include "raylib.h" -#define NUM_MODELS 8 // We generate 8 parametric 3d shapes +#define NUM_MODELS 8 // Parametric 3d shapes to generate -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [models] example - mesh generation"); - + // We generate a checked image for texturing Image checked = GenImageChecked(2, 2, 1, 1, RED, GREEN); Texture2D texture = LoadTextureFromImage(checked); UnloadImage(checked); - + Model models[NUM_MODELS]; - + models[0] = LoadModelFromMesh(GenMeshPlane(2, 2, 5, 5)); models[1] = LoadModelFromMesh(GenMeshCube(2.0f, 1.0f, 2.0f)); models[2] = LoadModelFromMesh(GenMeshSphere(2, 32, 32)); @@ -37,7 +37,7 @@ int main() models[5] = LoadModelFromMesh(GenMeshTorus(0.25f, 4.0f, 16, 32)); models[6] = LoadModelFromMesh(GenMeshKnot(1.0f, 2.0f, 16, 128)); models[7] = LoadModelFromMesh(GenMeshPoly(5, 2.0f)); - + // Set checked texture as default diffuse component for all models material for (int i = 0; i < NUM_MODELS; i++) models[i].materials[0].maps[MAP_DIFFUSE].texture = texture; @@ -46,12 +46,12 @@ int main() // Model drawing position Vector3 position = { 0.0f, 0.0f, 0.0f }; - + int currentModel = 0; - + SetCameraMode(camera, CAMERA_ORBITAL); // Set a orbital camera mode - SetTargetFPS(60); // Set our game to run at 60 frames-per-second + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -60,14 +60,14 @@ int main() // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update internal camera and our camera - + if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) { currentModel = (currentModel + 1)%NUM_MODELS; // Cycle between the textures } - + if (IsKeyPressed(KEY_RIGHT)) - { + { currentModel++; if (currentModel >= NUM_MODELS) currentModel = 0; } @@ -91,11 +91,11 @@ int main() DrawGrid(10, 1.0); EndMode3D(); - + DrawRectangle(30, 400, 310, 30, Fade(SKYBLUE, 0.5f)); DrawRectangleLines(30, 400, 310, 30, Fade(DARKBLUE, 0.5f)); DrawText("MOUSE LEFT BUTTON to CYCLE PROCEDURAL MODELS", 40, 410, 10, BLUE); - + switch(currentModel) { case 0: DrawText("PLANE", 680, 10, 20, DARKBLUE); break; @@ -115,10 +115,10 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- - + // Unload models data (GPU VRAM) for (int i = 0; i < NUM_MODELS; i++) UnloadModel(models[i]); - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/models/models_mesh_picking.c b/examples/src/models/models_mesh_picking.c index 4202882..26d9fa7 100644 --- a/examples/src/models/models_mesh_picking.c +++ b/examples/src/models/models_mesh_picking.c @@ -15,12 +15,12 @@ #define FLT_MAX 340282346638528859811704183484516925440.0f // Maximum value of a float, from bit pattern 01111111011111111111111111111111 -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [models] example - mesh picking"); @@ -33,22 +33,22 @@ int main() camera.type = CAMERA_PERSPECTIVE; // Camera mode type Ray ray = { 0 }; // Picking ray - + Model tower = LoadModel("resources/models/turret.obj"); // Load OBJ model Texture2D texture = LoadTexture("resources/models/turret_diffuse.png"); // Load model texture tower.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set model diffuse texture - + Vector3 towerPos = { 0.0f, 0.0f, 0.0f }; // Set model position BoundingBox towerBBox = MeshBoundingBox(tower.meshes[0]); // Get mesh bounding box bool hitMeshBBox = false; bool hitTriangle = false; // Test triangle - Vector3 ta = (Vector3){ -25.0, 0.5, 0.0 }; + Vector3 ta = (Vector3){ -25.0, 0.5, 0.0 }; Vector3 tb = (Vector3){ -4.0, 2.5, 1.0 }; Vector3 tc = (Vector3){ -8.0, 6.5, 0.0 }; - Vector3 bary = { 0.0f, 0.0f, 0.0f }; + Vector3 bary = { 0.0f, 0.0f, 0.0f }; SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode @@ -60,7 +60,7 @@ int main() // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update camera - + // Display information about closest hit RayHitInfo nearestHit = { 0 }; char *hitObjectName = "None"; @@ -70,10 +70,10 @@ int main() // Get ray and test against ground, triangle, and mesh ray = GetMouseRay(GetMousePosition(), camera); - + // Check ray collision aginst ground plane RayHitInfo groundHitInfo = GetCollisionRayGround(ray, 0.0f); - + if ((groundHitInfo.hit) && (groundHitInfo.distance < nearestHit.distance)) { nearestHit = groundHitInfo; @@ -83,8 +83,8 @@ int main() // Check ray collision against test triangle RayHitInfo triHitInfo = GetCollisionRayTriangle(ray, ta, tb, tc); - - if ((triHitInfo.hit) && (triHitInfo.distance < nearestHit.distance)) + + if ((triHitInfo.hit) && (triHitInfo.distance < nearestHit.distance)) { nearestHit = triHitInfo; cursorColor = PURPLE; @@ -92,32 +92,31 @@ int main() bary = Vector3Barycenter(nearestHit.position, ta, tb, tc); hitTriangle = true; - } + } else hitTriangle = false; RayHitInfo meshHitInfo = { 0 }; // Check ray collision against bounding box first, before trying the full ray-mesh test - if (CheckCollisionRayBox(ray, towerBBox)) + if (CheckCollisionRayBox(ray, towerBBox)) { hitMeshBBox = true; - + // Check ray collision against model // NOTE: It considers model.transform matrix! - meshHitInfo = GetCollisionRayModel(ray, &tower); - - if ((meshHitInfo.hit) && (meshHitInfo.distance < nearestHit.distance)) + meshHitInfo = GetCollisionRayModel(ray, &tower); + + if ((meshHitInfo.hit) && (meshHitInfo.distance < nearestHit.distance)) { nearestHit = meshHitInfo; cursorColor = ORANGE; hitObjectName = "Mesh"; } - - } - - hitMeshBBox = false; + } + + hitMeshBBox = false; //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); @@ -127,10 +126,10 @@ int main() BeginMode3D(camera); // Draw the tower - // WARNING: If scale is different than 1.0f, + // WARNING: If scale is different than 1.0f, // not considered by GetCollisionRayModel() DrawModel(tower, towerPos, 1.0f, WHITE); - + // Draw the test triangle DrawLine3D(ta, tb, PURPLE); DrawLine3D(tb, tc, PURPLE); @@ -140,7 +139,7 @@ int main() if (hitMeshBBox) DrawBoundingBox(towerBBox, LIME); // If we hit something, draw the cursor at the hit point - if (nearestHit.hit) + if (nearestHit.hit) { DrawCube(nearestHit.position, 0.3, 0.3, 0.3, cursorColor); DrawCubeWires(nearestHit.position, 0.3, 0.3, 0.3, RED); @@ -149,40 +148,40 @@ int main() normalEnd.x = nearestHit.position.x + nearestHit.normal.x; normalEnd.y = nearestHit.position.y + nearestHit.normal.y; normalEnd.z = nearestHit.position.z + nearestHit.normal.z; - + DrawLine3D(nearestHit.position, normalEnd, RED); } DrawRay(ray, MAROON); - + DrawGrid(10, 10.0f); EndMode3D(); - + // Draw some debug GUI text DrawText(FormatText("Hit Object: %s", hitObjectName), 10, 50, 10, BLACK); - if (nearestHit.hit) + if (nearestHit.hit) { int ypos = 70; DrawText(FormatText("Distance: %3.2f", nearestHit.distance), 10, ypos, 10, BLACK); - - DrawText(FormatText("Hit Pos: %3.2f %3.2f %3.2f", - nearestHit.position.x, - nearestHit.position.y, + + DrawText(FormatText("Hit Pos: %3.2f %3.2f %3.2f", + nearestHit.position.x, + nearestHit.position.y, nearestHit.position.z), 10, ypos + 15, 10, BLACK); - - DrawText(FormatText("Hit Norm: %3.2f %3.2f %3.2f", - nearestHit.normal.x, - nearestHit.normal.y, + + DrawText(FormatText("Hit Norm: %3.2f %3.2f %3.2f", + nearestHit.normal.x, + nearestHit.normal.y, nearestHit.normal.z), 10, ypos + 30, 10, BLACK); if (hitTriangle) DrawText(FormatText("Barycenter: %3.2f %3.2f %3.2f", bary.x, bary.y, bary.z), 10, ypos + 45, 10, BLACK); } DrawText("Use Mouse to Move Camera", 10, 430, 10, GRAY); - + DrawText("(c) Turret 3D model by Alberto Cano", screenWidth - 200, screenHeight - 20, 10, GRAY); DrawFPS(10, 10); @@ -195,7 +194,7 @@ int main() //-------------------------------------------------------------------------------------- UnloadModel(tower); // Unload model UnloadTexture(texture); // Unload texture - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/models/models_obj_loading.c b/examples/src/models/models_obj_loading.c index 74e7d08..51578bc 100644 --- a/examples/src/models/models_obj_loading.c +++ b/examples/src/models/models_obj_loading.c @@ -11,12 +11,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [models] example - obj model loading"); @@ -33,7 +33,7 @@ int main() model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position - SetTargetFPS(60); // Set our game to run at 60 frames-per-second + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/src/models/models_obj_viewer.c b/examples/src/models/models_obj_viewer.c index 7d38744..dc6787e 100644 --- a/examples/src/models/models_obj_viewer.c +++ b/examples/src/models/models_obj_viewer.c @@ -13,12 +13,12 @@ #include // Required for: strcpy() -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib example - obj viewer"); @@ -37,7 +37,7 @@ int main() char objFilename[64] = "turret.obj"; - SetTargetFPS(60); // Set our game to run at 60 frames-per-second + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/src/models/models_orthographic_projection.c b/examples/src/models/models_orthographic_projection.c index 3ad32b6..ca9d83c 100644 --- a/examples/src/models/models_orthographic_projection.c +++ b/examples/src/models/models_orthographic_projection.c @@ -1,6 +1,6 @@ /******************************************************************************************* * -* raylib [models] example - Show the difference between perspective and orthographic projection +* raylib [models] example - Show the difference between perspective and orthographic projection * * This program is heavily based on the geometric objects example * @@ -18,19 +18,19 @@ #define FOVY_PERSPECTIVE 45.0f #define WIDTH_ORTHOGRAPHIC 10.0f -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [models] example - geometric shapes"); // Define the camera to look into our 3d world Camera camera = {{ 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, FOVY_PERSPECTIVE, CAMERA_PERSPECTIVE }; - SetTargetFPS(60); // Set our game to run at 60 frames-per-second + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -38,14 +38,14 @@ int main() { // Update //---------------------------------------------------------------------------------- - if (IsKeyPressed(KEY_SPACE)) + if (IsKeyPressed(KEY_SPACE)) { - if (camera.type == CAMERA_PERSPECTIVE) + if (camera.type == CAMERA_PERSPECTIVE) { camera.fovy = WIDTH_ORTHOGRAPHIC; camera.type = CAMERA_ORTHOGRAPHIC; - } - else + } + else { camera.fovy = FOVY_PERSPECTIVE; camera.type = CAMERA_PERSPECTIVE; diff --git a/examples/src/models/models_rlgl_solar_system.c b/examples/src/models/models_rlgl_solar_system.c index 7193d6f..cb9289a 100644 --- a/examples/src/models/models_rlgl_solar_system.c +++ b/examples/src/models/models_rlgl_solar_system.c @@ -22,13 +22,13 @@ void DrawSphereBasic(Color color); // Draw sphere without any matrix transf //------------------------------------------------------------------------------------ // Program main entry point //------------------------------------------------------------------------------------ -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- const int screenWidth = 800; const int screenHeight = 450; - + const float sunRadius = 4.0f; const float earthRadius = 0.6f; const float earthOrbitRadius = 8.0f; @@ -44,26 +44,26 @@ int main() camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; camera.fovy = 45.0f; camera.type = CAMERA_PERSPECTIVE; - + SetCameraMode(camera, CAMERA_FREE); - + float rotationSpeed = 0.2f; // General system rotation speed - + float earthRotation = 0.0f; // Rotation of earth around itself (days) in degrees float earthOrbitRotation = 0.0f; // Rotation of earth around the Sun (years) in degrees float moonRotation = 0.0f; // Rotation of moon around itself float moonOrbitRotation = 0.0f; // Rotation of moon around earth in degrees - SetTargetFPS(60); // Set our game to run at 60 frames-per-second + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key + while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); - + earthRotation += (5.0f*rotationSpeed); earthOrbitRotation += (365/360.0f*(5.0f*rotationSpeed)*rotationSpeed); moonRotation += (2.0f*rotationSpeed); @@ -77,12 +77,12 @@ int main() ClearBackground(RAYWHITE); BeginMode3D(camera); - + rlPushMatrix(); rlScalef(sunRadius, sunRadius, sunRadius); // Scale Sun DrawSphereBasic(GOLD); // Draw the Sun rlPopMatrix(); - + rlPushMatrix(); rlRotatef(earthOrbitRotation, 0.0f, 1.0f, 0.0f); // Rotation for Earth orbit around Sun rlTranslatef(earthOrbitRadius, 0.0f, 0.0f); // Translation for Earth orbit @@ -91,19 +91,19 @@ int main() rlPushMatrix(); rlRotatef(earthRotation, 0.25, 1.0, 0.0); // Rotation for Earth itself rlScalef(earthRadius, earthRadius, earthRadius);// Scale Earth - + DrawSphereBasic(BLUE); // Draw the Earth rlPopMatrix(); - + rlRotatef(moonOrbitRotation, 0.0f, 1.0f, 0.0f); // Rotation for Moon orbit around Earth rlTranslatef(moonOrbitRadius, 0.0f, 0.0f); // Translation for Moon orbit rlRotatef(-moonOrbitRotation, 0.0f, 1.0f, 0.0f); // Rotation for Moon orbit around Earth inverted rlRotatef(moonRotation, 0.0f, 1.0f, 0.0f); // Rotation for Moon itself rlScalef(moonRadius, moonRadius, moonRadius); // Scale Moon - + DrawSphereBasic(LIGHTGRAY); // Draw the Moon rlPopMatrix(); - + // Some reference elements (not affected by previous matrix transformations) DrawCircle3D((Vector3){ 0.0f, 0.0f, 0.0f }, earthOrbitRadius, (Vector3){ 1, 0, 0 }, 90.0f, Fade(RED, 0.5f)); DrawGrid(20, 1.0f); @@ -135,7 +135,7 @@ void DrawSphereBasic(Color color) { int rings = 16; int slices = 16; - + rlBegin(RL_TRIANGLES); rlColor4ub(color.r, color.g, color.b, color.a); diff --git a/examples/src/models/models_skybox.c b/examples/src/models/models_skybox.c index 759c79c..1693d9b 100644 --- a/examples/src/models/models_skybox.c +++ b/examples/src/models/models_skybox.c @@ -11,41 +11,49 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [models] example - skybox loading and drawing"); // Define the camera to look into our 3d world Camera camera = {{ 1.0f, 1.0f, 1.0f }, { 4.0f, 1.0f, 4.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f, 0 }; - // Load skybox model + // Load skybox model Mesh cube = GenMeshCube(1.0f, 1.0f, 1.0f); Model skybox = LoadModelFromMesh(cube); - + // Load skybox shader and set required locations // NOTE: Some locations are automatically set at shader loading - skybox.materials[0].shader = LoadShader("resources/shaders/skybox.vs", "resources/shaders/skybox.fs"); +#if defined(PLATFORM_DESKTOP) + skybox.materials[0].shader = LoadShader("resources/shaders/glsl330/skybox.vs", "resources/shaders/glsl330/skybox.fs"); +#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB + skybox.materials[0].shader = LoadShader("resources/shaders/glsl100/skybox.vs", "resources/shaders/glsl100/skybox.fs"); +#endif SetShaderValue(skybox.materials[0].shader, GetShaderLocation(skybox.materials[0].shader, "environmentMap"), (int[1]){ MAP_CUBEMAP }, UNIFORM_INT); // Load cubemap shader and setup required shader locations - Shader shdrCubemap = LoadShader("resources/shaders/cubemap.vs", "resources/shaders/cubemap.fs"); +#if defined(PLATFORM_DESKTOP) + Shader shdrCubemap = LoadShader("resources/shaders/glsl330/cubemap.vs", "resources/shaders/glsl330/cubemap.fs"); +#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB + Shader shdrCubemap = LoadShader("resources/shaders/glsl100/cubemap.vs", "resources/shaders/glsl100/cubemap.fs"); +#endif SetShaderValue(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, UNIFORM_INT); - + // Load HDR panorama (sphere) texture Texture2D texHDR = LoadTexture("resources/dresden_square.hdr"); - + // Generate cubemap (texture with 6 quads-cube-mapping) from panorama HDR texture // NOTE: New texture is generated rendering to texture, shader computes the sphre->cube coordinates mapping skybox.materials[0].maps[MAP_CUBEMAP].texture = GenTextureCubemap(shdrCubemap, texHDR, 512); - + UnloadTexture(texHDR); // Texture not required anymore, cubemap already generated UnloadShader(shdrCubemap); // Unload cubemap generation shader, not required anymore - + SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set a first person camera mode SetTargetFPS(60); // Set our game to run at 60 frames-per-second @@ -68,7 +76,7 @@ int main() BeginMode3D(camera); DrawModel(skybox, (Vector3){0, 0, 0}, 1.0f, WHITE); - + DrawGrid(10, 1.0f); EndMode3D(); diff --git a/examples/src/models/models_yaw_pitch_roll.c b/examples/src/models/models_yaw_pitch_roll.c index 658be08..0931c00 100644 --- a/examples/src/models/models_yaw_pitch_roll.c +++ b/examples/src/models/models_yaw_pitch_roll.c @@ -17,10 +17,7 @@ // Draw angle gauge controls void DrawAngleGauge(Texture2D angleGauge, int x, int y, float angle, char title[], Color color); -//---------------------------------------------------------------------------------- -// Main entry point -//---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -53,10 +50,10 @@ int main() float roll = 0.0f; float yaw = 0.0f; - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { // Update diff --git a/examples/src/physac/physics_demo.c b/examples/src/physac/physics_demo.c index a92bb9e..421c82a 100644 --- a/examples/src/physac/physics_demo.c +++ b/examples/src/physac/physics_demo.c @@ -10,7 +10,7 @@ * gcc -o $(NAME_PART).exe $(FILE_NAME) -s -static / * -lraylib -lpthread -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm / * -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition -* +* * Copyright (c) 2016-2018 Victor Fisac * ********************************************************************************************/ @@ -21,12 +21,12 @@ #define PHYSAC_NO_THREADS #include "physac.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; SetConfigFlags(FLAG_MSAA_4X_HINT); InitWindow(screenWidth, screenHeight, "Physac [raylib] - Physics demo"); @@ -41,13 +41,13 @@ int main() // Create floor rectangle physics body PhysicsBody floor = CreatePhysicsBodyRectangle((Vector2){ screenWidth/2, screenHeight }, 500, 100, 10); - floor->enabled = false; // Disable body state to convert it to static (no dynamics, but collisions) + floor->enabled = false; // Disable body state to convert it to static (no dynamics, but collisions) // Create obstacle circle physics body PhysicsBody circle = CreatePhysicsBodyCircle((Vector2){ screenWidth/2, screenHeight/2 }, 45, 10); - circle->enabled = false; // Disable body state to convert it to static (no dynamics, but collisions) - - SetTargetFPS(60); + circle->enabled = false; // Disable body state to convert it to static (no dynamics, but collisions) + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -132,9 +132,9 @@ int main() } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- ClosePhysics(); // Unitialize physics - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/physac/physics_friction.c b/examples/src/physac/physics_friction.c index 337a126..cbb9dc4 100644 --- a/examples/src/physac/physics_friction.c +++ b/examples/src/physac/physics_friction.c @@ -10,7 +10,7 @@ * gcc -o $(NAME_PART).exe $(FILE_NAME) -s -static / * -lraylib -lpthread -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm / * -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition -* +* * Copyright (c) 2016-2018 Victor Fisac * ********************************************************************************************/ @@ -21,12 +21,12 @@ #define PHYSAC_NO_THREADS #include "physac.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; SetConfigFlags(FLAG_MSAA_4X_HINT); InitWindow(screenWidth, screenHeight, "Physac [raylib] - Physics friction"); @@ -65,7 +65,7 @@ int main() bodyB->dynamicFriction = 1; SetPhysicsBodyRotation(bodyB, 330*DEG2RAD); - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -82,7 +82,7 @@ int main() bodyA->velocity = (Vector2){ 0, 0 }; bodyA->angularVelocity = 0; SetPhysicsBodyRotation(bodyA, 30*DEG2RAD); - + bodyB->position = (Vector2){ screenWidth - 35, screenHeight*0.6f }; bodyB->velocity = (Vector2){ 0, 0 }; bodyB->angularVelocity = 0; @@ -137,9 +137,9 @@ int main() } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- ClosePhysics(); // Unitialize physics - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/physac/physics_movement.c b/examples/src/physac/physics_movement.c index e799eaa..d946811 100644 --- a/examples/src/physac/physics_movement.c +++ b/examples/src/physac/physics_movement.c @@ -10,7 +10,7 @@ * gcc -o $(NAME_PART).exe $(FILE_NAME) -s -static / * -lraylib -lpthread -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm / * -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition -* +* * Copyright (c) 2016-2018 Victor Fisac * ********************************************************************************************/ @@ -23,12 +23,12 @@ #define VELOCITY 0.5f -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; SetConfigFlags(FLAG_MSAA_4X_HINT); InitWindow(screenWidth, screenHeight, "Physac [raylib] - Physics movement"); @@ -56,9 +56,9 @@ int main() // Create movement physics body PhysicsBody body = CreatePhysicsBodyRectangle((Vector2){ screenWidth/2, screenHeight/2 }, 50, 50, 1); - body->freezeOrient = true; // Constrain body rotation to avoid little collision torque amounts - - SetTargetFPS(60); + body->freezeOrient = true; // Constrain body rotation to avoid little collision torque amounts + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -123,9 +123,9 @@ int main() } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- ClosePhysics(); // Unitialize physics - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/physac/physics_restitution.c b/examples/src/physac/physics_restitution.c index 3231d0c..a701252 100644 --- a/examples/src/physac/physics_restitution.c +++ b/examples/src/physac/physics_restitution.c @@ -10,7 +10,7 @@ * gcc -o $(NAME_PART).exe $(FILE_NAME) -s -static / * -lraylib -lpthread -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm / * -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition -* +* * Copyright (c) 2016-2018 Victor Fisac * ********************************************************************************************/ @@ -21,12 +21,12 @@ #define PHYSAC_NO_THREADS #include "physac.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; SetConfigFlags(FLAG_MSAA_4X_HINT); InitWindow(screenWidth, screenHeight, "Physac [raylib] - Physics restitution"); @@ -50,11 +50,11 @@ int main() circleB->restitution = 0.5f; PhysicsBody circleC = CreatePhysicsBodyCircle((Vector2){ screenWidth*0.75f, screenHeight/2 }, 30, 10); circleC->restitution = 1; - - SetTargetFPS(60); // Restitution demo needs a very tiny physics time step for a proper simulation - SetPhysicsTimeStep(1.0/60.0/100 * 1000); + SetPhysicsTimeStep(1.0/60.0/100*1000); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -119,9 +119,9 @@ int main() } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- ClosePhysics(); // Unitialize physics - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/physac/physics_shatter.c b/examples/src/physac/physics_shatter.c index 7478522..cbc6522 100644 --- a/examples/src/physac/physics_shatter.c +++ b/examples/src/physac/physics_shatter.c @@ -10,7 +10,7 @@ * gcc -o $(NAME_PART).exe $(FILE_NAME) -s -static / * -lraylib -lpthread -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm / * -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition -* +* * Copyright (c) 2016-2018 Victor Fisac * ********************************************************************************************/ @@ -21,12 +21,12 @@ #define PHYSAC_NO_THREADS #include "physac.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; SetConfigFlags(FLAG_MSAA_4X_HINT); InitWindow(screenWidth, screenHeight, "Physac [raylib] - Body shatter"); @@ -43,7 +43,7 @@ int main() // Create random polygon physics body to shatter CreatePhysicsBodyPolygon((Vector2){ screenWidth/2, screenHeight/2 }, GetRandomValue(80, 200), GetRandomValue(3, 8), 10); - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -115,9 +115,9 @@ int main() } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- ClosePhysics(); // Unitialize physics - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/shaders/shaders_custom_uniform.c b/examples/src/shaders/shaders_custom_uniform.c index 74b9e77..1c82bba 100644 --- a/examples/src/shaders/shaders_custom_uniform.c +++ b/examples/src/shaders/shaders_custom_uniform.c @@ -24,13 +24,13 @@ #define GLSL_VERSION 100 #endif -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; - + const int screenWidth = 800; + const int screenHeight = 450; + SetConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available) InitWindow(screenWidth, screenHeight, "raylib [shaders] example - custom uniform variable"); @@ -48,20 +48,20 @@ int main() model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set model diffuse texture Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position - + // Load postprocessing shader // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader Shader shader = LoadShader(0, FormatText("resources/shaders/glsl%i/swirl.fs", GLSL_VERSION)); - + // Get variable (uniform) location on the shader to connect with the program // NOTE: If uniform variable could not be found in the shader, function returns -1 int swirlCenterLoc = GetShaderLocation(shader, "center"); - + float swirlCenter[2] = { (float)screenWidth/2, (float)screenHeight/2 }; - + // Create a RenderTexture2D to be used for render to texture RenderTexture2D target = LoadRenderTexture(screenWidth, screenHeight); - + // Setup orbital camera SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode @@ -80,7 +80,7 @@ int main() // Send new value to the shader to be used on drawing SetShaderValue(shader, swirlCenterLoc, swirlCenter, UNIFORM_VEC2); - + UpdateCamera(&camera); // Update camera //---------------------------------------------------------------------------------- @@ -89,9 +89,9 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - + BeginTextureMode(target); // Enable drawing to texture - + ClearBackground(RAYWHITE); // Clear texture background BeginMode3D(camera); // Begin 3d mode drawing @@ -101,21 +101,21 @@ int main() DrawGrid(10, 1.0f); // Draw a grid EndMode3D(); // End 3d mode drawing, returns to orthographic 2d mode - + DrawText("TEXT DRAWN IN RENDER TEXTURE", 200, 10, 30, RED); - + EndTextureMode(); // End drawing to texture (now we have a texture available for next passes) - + BeginShaderMode(shader); - + // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom) DrawTextureRec(target.texture, (Rectangle){ 0, 0, target.texture.width, -target.texture.height }, (Vector2){ 0, 0 }, WHITE); - + EndShaderMode(); - + // Draw some 2d text over drawn texture DrawText("(c) Barracks 3D model by Alberto Cano", screenWidth - 220, screenHeight - 20, 10, GRAY); - + DrawFPS(10, 10); EndDrawing(); diff --git a/examples/src/shaders/shaders_eratosthenes.c b/examples/src/shaders/shaders_eratosthenes.c index bfe516b..068fc26 100644 --- a/examples/src/shaders/shaders_eratosthenes.c +++ b/examples/src/shaders/shaders_eratosthenes.c @@ -31,7 +31,7 @@ #define GLSL_VERSION 100 #endif -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -46,11 +46,11 @@ int main() // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader Shader shader = LoadShader(0, FormatText("resources/shaders/glsl%i/eratosthenes.fs", GLSL_VERSION)); - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key + while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- @@ -64,7 +64,7 @@ int main() ClearBackground(RAYWHITE); BeginTextureMode(target); // Enable drawing to texture - ClearBackground(BLACK); // Clear the render texture + ClearBackground(BLACK); // Clear the render texture // Draw a rectangle in shader mode to be used as shader canvas // NOTE: Rectangle uses font white character texture coordinates, diff --git a/examples/src/shaders/shaders_julia_set.c b/examples/src/shaders/shaders_julia_set.c index 6c45f84..e64b622 100644 --- a/examples/src/shaders/shaders_julia_set.c +++ b/examples/src/shaders/shaders_julia_set.c @@ -26,7 +26,7 @@ // A few good julia sets const float POINTS_OF_INTEREST[6][2] = -{ +{ { -0.348827, 0.607167 }, { -0.786268, 0.169728 }, { -0.8, 0.156 }, @@ -35,7 +35,7 @@ const float POINTS_OF_INTEREST[6][2] = { -0.70176, -0.3842 }, }; -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -47,16 +47,16 @@ int main() // Load julia set shader // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader Shader shader = LoadShader(0, FormatText("resources/shaders/glsl%i/julia_set.fs", GLSL_VERSION)); - + // c constant to use in z^2 + c float c[2] = { POINTS_OF_INTEREST[0][0], POINTS_OF_INTEREST[0][1] }; - + // Offset and zoom to draw the julia set at. (centered on screen and default size) float offset[2] = { -(float)screenWidth/2, -(float)screenHeight/2 }; float zoom = 1.0f; - + Vector2 offsetSpeed = { 0.0f, 0.0f }; - + // Get variable (uniform) locations on the shader to connect with the program // NOTE: If uniform variable could not be found in the shader, function returns -1 int cLoc = GetShaderLocation(shader, "c"); @@ -66,33 +66,32 @@ int main() // Tell the shader what the screen dimensions, zoom, offset and c are float screenDims[2] = { (float)screenWidth, (float)screenHeight }; SetShaderValue(shader, GetShaderLocation(shader, "screenDims"), screenDims, UNIFORM_VEC2); - + SetShaderValue(shader, cLoc, c, UNIFORM_VEC2); SetShaderValue(shader, zoomLoc, &zoom, UNIFORM_FLOAT); SetShaderValue(shader, offsetLoc, offset, UNIFORM_VEC2); // Create a RenderTexture2D to be used for render to texture RenderTexture2D target = LoadRenderTexture(screenWidth, screenHeight); - - int incrementSpeed = 0; // Multiplier of speed to change c value - bool showControls = true; // Show controls - bool pause = false; // Pause animation - SetTargetFPS(60); // Set the window to run at 60 frames-per-second + int incrementSpeed = 0; // Multiplier of speed to change c value + bool showControls = true; // Show controls + bool pause = false; // Pause animation + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key + while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- - // Press [1 - 6] to reset c to a point of interest - if (IsKeyPressed(KEY_ONE) || - IsKeyPressed(KEY_TWO) || - IsKeyPressed(KEY_THREE) || - IsKeyPressed(KEY_FOUR) || - IsKeyPressed(KEY_FIVE) || + if (IsKeyPressed(KEY_ONE) || + IsKeyPressed(KEY_TWO) || + IsKeyPressed(KEY_THREE) || + IsKeyPressed(KEY_FOUR) || + IsKeyPressed(KEY_FIVE) || IsKeyPressed(KEY_SIX)) { if (IsKeyPressed(KEY_ONE)) c[0] = POINTS_OF_INTEREST[0][0], c[1] = POINTS_OF_INTEREST[0][1]; @@ -107,7 +106,7 @@ int main() if (IsKeyPressed(KEY_SPACE)) pause = !pause; // Pause animation (c change) if (IsKeyPressed(KEY_F1)) showControls = !showControls; // Toggle whether or not to show controls - + if (!pause) { if (IsKeyPressed(KEY_RIGHT)) incrementSpeed++; @@ -121,10 +120,10 @@ int main() if (IsMouseButtonDown(MOUSE_RIGHT_BUTTON)) zoom -= zoom*0.003f; Vector2 mousePos = GetMousePosition(); - + offsetSpeed.x = mousePos.x -(float)screenWidth/2; offsetSpeed.y = mousePos.y -(float)screenHeight/2; - + // Slowly move camera to targetOffset offset[0] += GetFrameTime()*offsetSpeed.x*0.8f; offset[1] += GetFrameTime()*offsetSpeed.y*0.8f; @@ -148,7 +147,7 @@ int main() BeginDrawing(); ClearBackground(BLACK); // Clear the screen of the previous frame. - + // Using a render texture to draw Julia set BeginTextureMode(target); // Enable drawing to texture ClearBackground(BLACK); // Clear the render texture @@ -165,7 +164,7 @@ int main() BeginShaderMode(shader); DrawTexture(target.texture, 0, 0, WHITE); EndShaderMode(); - + if (showControls) { DrawText("Press Mouse buttons right/left to zoom in/out and move", 10, 15, 10, RAYWHITE); diff --git a/examples/src/shaders/shaders_model_shader.c b/examples/src/shaders/shaders_model_shader.c index 2717c19..8224a33 100644 --- a/examples/src/shaders/shaders_model_shader.c +++ b/examples/src/shaders/shaders_model_shader.c @@ -24,13 +24,13 @@ #define GLSL_VERSION 100 #endif -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; - + const int screenWidth = 800; + const int screenHeight = 450; + SetConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available) InitWindow(screenWidth, screenHeight, "raylib [shaders] example - model shader"); @@ -45,16 +45,16 @@ int main() Model model = LoadModel("resources/models/watermill.obj"); // Load OBJ model Texture2D texture = LoadTexture("resources/models/watermill_diffuse.png"); // Load model texture - + // Load shader for model // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader Shader shader = LoadShader(0, FormatText("resources/shaders/glsl%i/grayscale.fs", GLSL_VERSION)); model.materials[0].shader = shader; // Set shader effect to 3d model model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Bind texture to model - + Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position - + SetCameraMode(camera, CAMERA_FREE); // Set an orbital camera mode SetTargetFPS(60); // Set our game to run at 60 frames-per-second @@ -81,11 +81,8 @@ int main() DrawGrid(10, 1.0f); // Draw a grid EndMode3D(); - + DrawText("(c) Watermill 3D model by Alberto Cano", screenWidth - 210, screenHeight - 20, 10, GRAY); - - DrawText(FormatText("Camera position: (%.2f, %.2f, %.2f)", camera.position.x, camera.position.y, camera.position.z), 600, 20, 10, BLACK); - DrawText(FormatText("Camera target: (%.2f, %.2f, %.2f)", camera.target.x, camera.target.y, camera.target.z), 600, 40, 10, GRAY); DrawFPS(10, 10); diff --git a/examples/src/shaders/shaders_palette_switch.c b/examples/src/shaders/shaders_palette_switch.c index 197ae54..05e2e50 100644 --- a/examples/src/shaders/shaders_palette_switch.c +++ b/examples/src/shaders/shaders_palette_switch.c @@ -69,19 +69,19 @@ static const char *paletteText[] = { "RKBV (2-strip film)" }; -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [shaders] example - color palette switch"); // Load shader to be used on some parts drawing // NOTE 1: Using GLSL 330 shader version, on OpenGL ES 2.0 use GLSL 100 shader version // NOTE 2: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader - Shader shader = LoadShader(0, FormatText("resources/shaders/glsl%i/palette-switch.fs", GLSL_VERSION)); + Shader shader = LoadShader(0, FormatText("resources/shaders/glsl%i/palette_switch.fs", GLSL_VERSION)); // Get variable (uniform) location on the shader to connect with the program // NOTE: If uniform variable could not be found in the shader, function returns -1 @@ -117,7 +117,7 @@ int main() BeginShaderMode(shader); - for (int i = 0; i < COLORS_PER_PALETTE; i++) + for (int i = 0; i < COLORS_PER_PALETTE; i++) { // Draw horizontal screen-wide rectangles with increasing "palette index" // The used palette index is encoded in the RGB components of the pixel @@ -129,7 +129,7 @@ int main() DrawText("< >", 10, 10, 30, DARKBLUE); DrawText("CURRENT PALETTE:", 60, 15, 20, RAYWHITE); DrawText(paletteText[currentPalette], 300, 15, 20, RED); - + DrawFPS(700, 15); EndDrawing(); diff --git a/examples/src/shaders/shaders_postprocessing.c b/examples/src/shaders/shaders_postprocessing.c index 7c14641..018b8d1 100644 --- a/examples/src/shaders/shaders_postprocessing.c +++ b/examples/src/shaders/shaders_postprocessing.c @@ -58,31 +58,31 @@ static const char *postproShaderText[] = { //"FXAA" }; -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; - + const int screenWidth = 800; + const int screenHeight = 450; + SetConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available) InitWindow(screenWidth, screenHeight, "raylib [shaders] example - postprocessing shader"); // Define the camera to look into our 3d world Camera camera = {{ 2.0f, 3.0f, 2.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f, 0 }; - + Model model = LoadModel("resources/models/church.obj"); // Load OBJ model Texture2D texture = LoadTexture("resources/models/church_diffuse.png"); // Load model texture (diffuse map) model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set model diffuse texture Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position - + // Load all postpro shaders // NOTE 1: All postpro shader use the base vertex shader (DEFAULT_VERTEX_SHADER) // NOTE 2: We load the correct shader depending on GLSL version Shader shaders[MAX_POSTPRO_SHADERS]; - + // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader shaders[FX_GRAYSCALE] = LoadShader(0, FormatText("resources/shaders/glsl%i/grayscale.fs", GLSL_VERSION)); shaders[FX_POSTERIZATION] = LoadShader(0, FormatText("resources/shaders/glsl%i/posterization.fs", GLSL_VERSION)); @@ -96,12 +96,12 @@ int main() shaders[FX_SOBEL] = LoadShader(0, FormatText("resources/shaders/glsl%i/sobel.fs", GLSL_VERSION)); shaders[FX_BLOOM] = LoadShader(0, FormatText("resources/shaders/glsl%i/bloom.fs", GLSL_VERSION)); shaders[FX_BLUR] = LoadShader(0, FormatText("resources/shaders/glsl%i/blur.fs", GLSL_VERSION)); - + int currentShader = FX_GRAYSCALE; // Create a RenderTexture2D to be used for render to texture RenderTexture2D target = LoadRenderTexture(screenWidth, screenHeight); - + // Setup orbital camera SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode @@ -114,10 +114,10 @@ int main() // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update camera - + if (IsKeyPressed(KEY_RIGHT)) currentShader++; else if (IsKeyPressed(KEY_LEFT)) currentShader--; - + if (currentShader >= MAX_POSTPRO_SHADERS) currentShader = 0; else if (currentShader < 0) currentShader = MAX_POSTPRO_SHADERS - 1; //---------------------------------------------------------------------------------- @@ -129,7 +129,7 @@ int main() ClearBackground(RAYWHITE); BeginTextureMode(target); // Enable drawing to texture - + ClearBackground(RAYWHITE); // Clear texture background BeginMode3D(camera); // Begin 3d mode drawing @@ -139,26 +139,26 @@ int main() DrawGrid(10, 1.0f); // Draw a grid EndMode3D(); // End 3d mode drawing, returns to orthographic 2d mode - + EndTextureMode(); // End drawing to texture (now we have a texture available for next passes) - + // Render previously generated texture using selected postpro shader BeginShaderMode(shaders[currentShader]); - + // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom) DrawTextureRec(target.texture, (Rectangle){ 0, 0, target.texture.width, -target.texture.height }, (Vector2){ 0, 0 }, WHITE); - + EndShaderMode(); - + // Draw 2d shapes and text over drawn texture DrawRectangle(0, 9, 580, 30, Fade(LIGHTGRAY, 0.7f)); - + DrawText("(c) Church 3D model by Alberto Cano", screenWidth - 200, screenHeight - 20, 10, GRAY); - + DrawText("CURRENT POSTPRO SHADER:", 10, 15, 20, BLACK); DrawText(postproShaderText[currentShader], 330, 15, 20, RED); DrawText("< >", 540, 10, 30, DARKBLUE); - + DrawFPS(700, 15); EndDrawing(); @@ -167,10 +167,10 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- - + // Unload all postpro shaders for (int i = 0; i < MAX_POSTPRO_SHADERS; i++) UnloadShader(shaders[i]); - + UnloadTexture(texture); // Unload texture UnloadModel(model); // Unload model UnloadRenderTexture(target); // Unload render texture diff --git a/examples/src/shaders/shaders_raymarching.c b/examples/src/shaders/shaders_raymarching.c index f68222b..3409179 100644 --- a/examples/src/shaders/shaders_raymarching.c +++ b/examples/src/shaders/shaders_raymarching.c @@ -24,13 +24,13 @@ #define GLSL_VERSION 100 #endif -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; - + const int screenWidth = 800; + const int screenHeight = 450; + InitWindow(screenWidth, screenHeight, "raylib [shaders] example - raymarching shapes"); Camera camera = { 0 }; @@ -44,7 +44,7 @@ int main() // Load raymarching shader // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader Shader shader = LoadShader(0, FormatText("resources/shaders/glsl%i/raymarching.fs", GLSL_VERSION)); - + // Get shader locations for required uniforms int viewEyeLoc = GetShaderLocation(shader, "viewEye"); int viewCenterLoc = GetShaderLocation(shader, "viewCenter"); @@ -72,7 +72,7 @@ int main() float cameraTarget[3] = { camera.target.x, camera.target.y, camera.target.z }; float cameraUp[3] = { camera.up.x, camera.up.y, camera.up.z }; - float deltaTime = GetFrameTime(); + float deltaTime = GetFrameTime(); runTime += deltaTime; // Set shader required uniform values diff --git a/examples/src/shaders/shaders_shapes_textures.c b/examples/src/shaders/shaders_shapes_textures.c index 5ee5d56..cf53bf9 100644 --- a/examples/src/shaders/shaders_shapes_textures.c +++ b/examples/src/shaders/shaders_shapes_textures.c @@ -24,23 +24,23 @@ #define GLSL_VERSION 100 #endif -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [shaders] example - shapes and texture shaders"); - + Texture2D fudesumi = LoadTexture("resources/fudesumi.png"); // Load shader to be used on some parts drawing - // NOTE 1: Using GLSL 330 shader version, on OpenGL ES 2.0 use GLSL 100 shader version + // NOTE 1: Using GLSL 330 shader version, on OpenGL ES 2.0 use GLSL 100 shader version // NOTE 2: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader Shader shader = LoadShader(0, FormatText("resources/shaders/glsl%i/grayscale.fs", GLSL_VERSION)); - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -56,19 +56,19 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - + // Start drawing with default shader DrawText("USING DEFAULT SHADER", 20, 40, 10, RED); - + DrawCircle(80, 120, 35, DARKBLUE); DrawCircleGradient(80, 220, 60, GREEN, SKYBLUE); DrawCircleLines(80, 340, 80, DARKBLUE); - + // Activate our custom shader to be applied on next shapes/textures drawings BeginShaderMode(shader); - + DrawText("USING CUSTOM SHADER", 190, 40, 10, RED); DrawRectangle(250 - 60, 90, 120, 60, RED); @@ -77,29 +77,29 @@ int main() // Activate our default shader for next drawings EndShaderMode(); - + DrawText("USING DEFAULT SHADER", 370, 40, 10, RED); - + DrawTriangle((Vector2){430, 80}, (Vector2){430 - 60, 150}, (Vector2){430 + 60, 150}, VIOLET); - + DrawTriangleLines((Vector2){430, 160}, (Vector2){430 - 20, 230}, (Vector2){430 + 20, 230}, DARKBLUE); DrawPoly((Vector2){430, 320}, 6, 80, 0, BROWN); - + // Activate our custom shader to be applied on next shapes/textures drawings BeginShaderMode(shader); DrawTexture(fudesumi, 500, -30, WHITE); // Using custom shader - + // Activate our default shader for next drawings EndShaderMode(); - + DrawText("(c) Fudesumi sprite by Eiden Marsal", 380, screenHeight - 20, 10, GRAY); - + EndDrawing(); //---------------------------------------------------------------------------------- } @@ -108,7 +108,7 @@ int main() //-------------------------------------------------------------------------------------- UnloadShader(shader); // Unload shader UnloadTexture(fudesumi); // Unload texture - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/shaders/shaders_texture_drawing.c b/examples/src/shaders/shaders_texture_drawing.c index 3a54009..697000b 100644 --- a/examples/src/shaders/shaders_texture_drawing.c +++ b/examples/src/shaders/shaders_texture_drawing.c @@ -21,12 +21,12 @@ #define GLSL_VERSION 100 #endif -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [shaders] example - texture drawing"); @@ -41,17 +41,18 @@ int main() int timeLoc = GetShaderLocation(shader, "uTime"); SetShaderValue(shader, timeLoc, &time, UNIFORM_FLOAT); - SetTargetFPS(60); - //-------------------------------------------------------------------------------------- + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + // ------------------------------------------------------------------------------------------------------------- - while (!WindowShouldClose()) + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- time = GetTime(); SetShaderValue(shader, timeLoc, &time, UNIFORM_FLOAT); //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); @@ -61,13 +62,13 @@ int main() BeginShaderMode(shader); // Enable our custom shader for next shapes/textures drawings DrawTexture(texture, 0, 0, WHITE); // Drawing BLANK texture, all magic happens on shader EndShaderMode(); // Disable our custom shader, return to default shader - + DrawText("BACKGROUND is PAINTED and ANIMATED on SHADER!", 10, 10, 20, MAROON); EndDrawing(); //---------------------------------------------------------------------------------- } - + // De-Initialization //-------------------------------------------------------------------------------------- UnloadShader(shader); diff --git a/examples/src/shaders/shaders_texture_waves.c b/examples/src/shaders/shaders_texture_waves.c index bc677c7..07186d3 100644 --- a/examples/src/shaders/shaders_texture_waves.c +++ b/examples/src/shaders/shaders_texture_waves.c @@ -26,10 +26,7 @@ #define GLSL_VERSION 100 #endif -// ------------------------------------------------------------------------------------------------------------- -// Main Entry point -// ------------------------------------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -38,22 +35,19 @@ int main() InitWindow(screenWidth, screenHeight, "raylib [shaders] example - texture waves"); - // Load space texture to apply shaders - Texture2D space = LoadTexture("resources/space.png"); + // Load texture texture to apply shaders + Texture2D texture = LoadTexture("resources/space.png"); // Load shader and setup location points and values - Shader wave = LoadShader(0, FormatText("resources/shaders/glsl%i/wave.fs", GLSL_VERSION)); + Shader shader = LoadShader(0, FormatText("resources/shaders/glsl%i/wave.fs", GLSL_VERSION)); - float screenSizeLoc = GetShaderLocation(wave, "size"); - float secondsLoc = GetShaderLocation(wave, "secondes"); - float freqXLoc = GetShaderLocation(wave, "freqX"); - float freqYLoc = GetShaderLocation(wave, "freqY"); - float ampXLoc = GetShaderLocation(wave, "ampX"); - float ampYLoc = GetShaderLocation(wave, "ampY"); - float speedXLoc = GetShaderLocation(wave, "speedX"); - float speedYLoc = GetShaderLocation(wave, "speedY"); - - float screenSize[2] = { 800, 450 }; + int secondsLoc = GetShaderLocation(shader, "secondes"); + int freqXLoc = GetShaderLocation(shader, "freqX"); + int freqYLoc = GetShaderLocation(shader, "freqY"); + int ampXLoc = GetShaderLocation(shader, "ampX"); + int ampYLoc = GetShaderLocation(shader, "ampY"); + int speedXLoc = GetShaderLocation(shader, "speedX"); + int speedYLoc = GetShaderLocation(shader, "speedY"); // Shader uniform values that can be updated at any time float freqX = 25.0f; @@ -63,53 +57,54 @@ int main() float speedX = 8.0f; float speedY = 8.0f; - SetShaderValue(wave, screenSizeLoc, &screenSize, UNIFORM_VEC2); - SetShaderValue(wave, freqXLoc, &freqX, UNIFORM_FLOAT); - SetShaderValue(wave, freqYLoc, &freqY, UNIFORM_FLOAT); - SetShaderValue(wave, ampXLoc, &X, UNIFORM_FLOAT); - SetShaderValue(wave, ampYLoc, &Y, UNIFORM_FLOAT); - SetShaderValue(wave, speedXLoc, &speedX, UNIFORM_FLOAT); - SetShaderValue(wave, speedYLoc, &speedY, UNIFORM_FLOAT); + float screenSize[2] = { (float)GetScreenWidth(), (float)GetScreenHeight() }; + SetShaderValue(shader, GetShaderLocation(shader, "size"), &screenSize, UNIFORM_VEC2); + SetShaderValue(shader, freqXLoc, &freqX, UNIFORM_FLOAT); + SetShaderValue(shader, freqYLoc, &freqY, UNIFORM_FLOAT); + SetShaderValue(shader, ampXLoc, &X, UNIFORM_FLOAT); + SetShaderValue(shader, ampYLoc, &Y, UNIFORM_FLOAT); + SetShaderValue(shader, speedXLoc, &speedX, UNIFORM_FLOAT); + SetShaderValue(shader, speedYLoc, &speedY, UNIFORM_FLOAT); + + float seconds = 0.0f; + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + // ------------------------------------------------------------------------------------------------------------- - float seconds = 0.0f; - - SetTargetFPS(60); - // ------------------------------------------------------------------------------------------------------------- - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key + while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- seconds += GetFrameTime(); - SetShaderValue(wave, secondsLoc, &seconds, UNIFORM_FLOAT); + SetShaderValue(shader, secondsLoc, &seconds, UNIFORM_FLOAT); //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- - BeginDrawing(); + BeginDrawing(); - ClearBackground(RAYWHITE); + ClearBackground(RAYWHITE); - BeginShaderMode(wave); + BeginShaderMode(shader); - DrawTexture(space, 0, 0, WHITE); - DrawTexture(space, space.width, 0, WHITE); + DrawTexture(texture, 0, 0, WHITE); + DrawTexture(texture, texture.width, 0, WHITE); EndShaderMode(); - EndDrawing(); + EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- - UnloadShader(wave); // Unload shader - UnloadTexture(space); // Unload texture + UnloadShader(shader); // Unload shader + UnloadTexture(texture); // Unload texture CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- - return 0; + return 0; } diff --git a/examples/src/shapes/shapes_basic_shapes.c b/examples/src/shapes/shapes_basic_shapes.c index 67eea9d..f7a8d02 100644 --- a/examples/src/shapes/shapes_basic_shapes.c +++ b/examples/src/shapes/shapes_basic_shapes.c @@ -11,16 +11,16 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [shapes] example - basic shapes drawing"); - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/src/shapes/shapes_bouncing_ball.c b/examples/src/shapes/shapes_bouncing_ball.c index 6b27c9d..9f01ff1 100644 --- a/examples/src/shapes/shapes_bouncing_ball.c +++ b/examples/src/shapes/shapes_bouncing_ball.c @@ -11,58 +11,58 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //--------------------------------------------------------- const int screenWidth = 800; const int screenHeight = 450; - + InitWindow(screenWidth, screenHeight, "raylib [shapes] example - bouncing ball"); - - Vector2 ballPosition = { GetScreenWidth()/2, GetScreenHeight()/2 }; - Vector2 ballSpeed = { 5.0f, 4.0f }; - int ballRadius = 20; - + + Vector2 ballPosition = { GetScreenWidth()/2, GetScreenHeight()/2 }; + Vector2 ballSpeed = { 5.0f, 4.0f }; + int ballRadius = 20; + bool pause = 0; int framesCounter = 0; - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //---------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //----------------------------------------------------- if (IsKeyPressed(KEY_SPACE)) pause = !pause; - + if (!pause) { ballPosition.x += ballSpeed.x; ballPosition.y += ballSpeed.y; - + // Check walls collision for bouncing if ((ballPosition.x >= (GetScreenWidth() - ballRadius)) || (ballPosition.x <= ballRadius)) ballSpeed.x *= -1.0f; if ((ballPosition.y >= (GetScreenHeight() - ballRadius)) || (ballPosition.y <= ballRadius)) ballSpeed.y *= -1.0f; } else framesCounter++; //----------------------------------------------------- - + // Draw //----------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + DrawCircleV(ballPosition, ballRadius, MAROON); DrawText("PRESS SPACE to PAUSE BALL MOVEMENT", 10, GetScreenHeight() - 25, 20, LIGHTGRAY); - + // On pause, we draw a blinking message if (pause && ((framesCounter/30)%2)) DrawText("PAUSED", 350, 200, 30, GRAY); DrawFPS(10, 10); - + EndDrawing(); //----------------------------------------------------- } @@ -71,6 +71,6 @@ int main() //--------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //---------------------------------------------------------- - + return 0; } \ No newline at end of file diff --git a/examples/src/shapes/shapes_collision_area.c b/examples/src/shapes/shapes_collision_area.c index e61623a..0deba0d 100644 --- a/examples/src/shapes/shapes_collision_area.c +++ b/examples/src/shapes/shapes_collision_area.c @@ -12,89 +12,89 @@ #include "raylib.h" #include // Required for abs() -int main() +int main(void) { // Initialization //--------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [shapes] example - collision area"); - + // Box A: Moving box Rectangle boxA = { 10, GetScreenHeight()/2 - 50, 200, 100 }; - int boxASpeedX = 4; - + int boxASpeedX = 4; + // Box B: Mouse moved box Rectangle boxB = { GetScreenWidth()/2 - 30, GetScreenHeight()/2 - 30, 60, 60 }; - - Rectangle boxCollision = { 0 }; // Collision rectangle - + + Rectangle boxCollision = { 0 }; // Collision rectangle + int screenUpperLimit = 40; // Top menu limits - - bool pause = false; // Movement pause - bool collision = false; // Collision detection - - SetTargetFPS(60); + + bool pause = false; // Movement pause + bool collision = false; // Collision detection + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //---------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //----------------------------------------------------- // Move box if not paused - if (!pause) boxA.x += boxASpeedX; - + if (!pause) boxA.x += boxASpeedX; + // Bounce box on x screen limits - if (((boxA.x + boxA.width) >= GetScreenWidth()) || (boxA.x <= 0)) boxASpeedX *= -1; - - // Update player-controlled-box (box02) - boxB.x = GetMouseX() - boxB.width/2; - boxB.y = GetMouseY() - boxB.height/2; - + if (((boxA.x + boxA.width) >= GetScreenWidth()) || (boxA.x <= 0)) boxASpeedX *= -1; + + // Update player-controlled-box (box02) + boxB.x = GetMouseX() - boxB.width/2; + boxB.y = GetMouseY() - boxB.height/2; + // Make sure Box B does not go out of move area limits - if ((boxB.x + boxB.width) >= GetScreenWidth()) boxB.x = GetScreenWidth() - boxB.width; - else if (boxB.x <= 0) boxB.x = 0; - - if ((boxB.y + boxB.height) >= GetScreenHeight()) boxB.y = GetScreenHeight() - boxB.height; - else if (boxB.y <= screenUpperLimit) boxB.y = screenUpperLimit; - + if ((boxB.x + boxB.width) >= GetScreenWidth()) boxB.x = GetScreenWidth() - boxB.width; + else if (boxB.x <= 0) boxB.x = 0; + + if ((boxB.y + boxB.height) >= GetScreenHeight()) boxB.y = GetScreenHeight() - boxB.height; + else if (boxB.y <= screenUpperLimit) boxB.y = screenUpperLimit; + // Check boxes collision collision = CheckCollisionRecs(boxA, boxB); - - // Get collision rectangle (only on collision) - if (collision) boxCollision = GetCollisionRec(boxA, boxB); - + + // Get collision rectangle (only on collision) + if (collision) boxCollision = GetCollisionRec(boxA, boxB); + // Pause Box A movement - if (IsKeyPressed(KEY_SPACE)) pause = !pause; + if (IsKeyPressed(KEY_SPACE)) pause = !pause; //----------------------------------------------------- - + // Draw //----------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + DrawRectangle(0, 0, screenWidth, screenUpperLimit, collision? RED : BLACK); DrawRectangleRec(boxA, GOLD); DrawRectangleRec(boxB, BLUE); - + if (collision) { // Draw collision area DrawRectangleRec(boxCollision, LIME); - + // Draw collision message DrawText("COLLISION!", GetScreenWidth()/2 - MeasureText("COLLISION!", 20)/2, screenUpperLimit/2 - 10, 20, BLACK); - + // Draw collision area DrawText(FormatText("Collision Area: %i", (int)boxCollision.width*(int)boxCollision.height), GetScreenWidth()/2 - 100, screenUpperLimit + 10, 20, BLACK); - } + } DrawFPS(10, 10); - + EndDrawing(); //----------------------------------------------------- } @@ -103,6 +103,6 @@ int main() //--------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //---------------------------------------------------------- - + return 0; } \ No newline at end of file diff --git a/examples/src/shapes/shapes_colors_palette.c b/examples/src/shapes/shapes_colors_palette.c index d6ac30a..7322f7e 100644 --- a/examples/src/shapes/shapes_colors_palette.c +++ b/examples/src/shapes/shapes_colors_palette.c @@ -13,7 +13,7 @@ #define MAX_COLORS_COUNT 21 // Number of colors available -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -22,14 +22,14 @@ int main() InitWindow(screenWidth, screenHeight, "raylib [shapes] example - colors palette"); - Color colors[MAX_COLORS_COUNT] = { + Color colors[MAX_COLORS_COUNT] = { DARKGRAY, MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, DARKBROWN, GRAY, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK, YELLOW, GREEN, SKYBLUE, PURPLE, BEIGE }; - - const char *colorNames[MAX_COLORS_COUNT] = { - "DARKGRAY", "MAROON", "ORANGE", "DARKGREEN", "DARKBLUE", "DARKPURPLE", - "DARKBROWN", "GRAY", "RED", "GOLD", "LIME", "BLUE", "VIOLET", "BROWN", + + const char *colorNames[MAX_COLORS_COUNT] = { + "DARKGRAY", "MAROON", "ORANGE", "DARKGREEN", "DARKBLUE", "DARKPURPLE", + "DARKBROWN", "GRAY", "RED", "GOLD", "LIME", "BLUE", "VIOLET", "BROWN", "LIGHTGRAY", "PINK", "YELLOW", "GREEN", "SKYBLUE", "PURPLE", "BEIGE" }; Rectangle colorsRecs[MAX_COLORS_COUNT] = { 0 }; // Rectangles array @@ -69,19 +69,19 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - + DrawText("raylib colors palette", 28, 42, 20, BLACK); DrawText("press SPACE to see all colors", GetScreenWidth() - 180, GetScreenHeight() - 40, 10, GRAY); for (int i = 0; i < MAX_COLORS_COUNT; i++) // Draw all rectangles { DrawRectangleRec(colorsRecs[i], Fade(colors[i], colorState[i]? 0.6f : 1.0f)); - - if (IsKeyDown(KEY_SPACE) || colorState[i]) + + if (IsKeyDown(KEY_SPACE) || colorState[i]) { DrawRectangle(colorsRecs[i].x, colorsRecs[i].y + colorsRecs[i].height - 26, colorsRecs[i].width, 20, BLACK); DrawRectangleLinesEx(colorsRecs[i], 6, Fade(BLACK, 0.3f)); - DrawText(colorNames[i], colorsRecs[i].x + colorsRecs[i].width - MeasureText(colorNames[i], 10) - 12, + DrawText(colorNames[i], colorsRecs[i].x + colorsRecs[i].width - MeasureText(colorNames[i], 10) - 12, colorsRecs[i].y + colorsRecs[i].height - 20, 10, colors[i]); } } diff --git a/examples/src/shapes/shapes_draw_circle_sector.c b/examples/src/shapes/shapes_draw_circle_sector.c index 597b85a..ae6de5f 100644 --- a/examples/src/shapes/shapes_draw_circle_sector.c +++ b/examples/src/shapes/shapes_draw_circle_sector.c @@ -16,7 +16,7 @@ #define RAYGUI_IMPLEMENTATION #include "raygui.h" // Required for GUI controls -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -32,7 +32,7 @@ int main() int endAngle = 180; int segments = 0; - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/src/shapes/shapes_draw_rectangle_rounded.c b/examples/src/shapes/shapes_draw_rectangle_rounded.c index e36e273..c183e88 100644 --- a/examples/src/shapes/shapes_draw_rectangle_rounded.c +++ b/examples/src/shapes/shapes_draw_rectangle_rounded.c @@ -30,12 +30,12 @@ int main(void) int height = 100; int segments = 0; int lineThick = 1; - + bool drawRect = false; bool drawRoundedRect = true; bool drawRoundedLines = false; - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -45,20 +45,20 @@ int main(void) //---------------------------------------------------------------------------------- Rectangle rec = { (GetScreenWidth() - width - 250)/2, (GetScreenHeight() - height)/2, width, height }; //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + DrawLine(560, 0, 560, GetScreenHeight(), Fade(LIGHTGRAY, 0.6f)); DrawRectangle(560, 0, GetScreenWidth() - 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.3f)); if (drawRect) DrawRectangleRec(rec, Fade(GOLD, 0.6)); if (drawRoundedRect) DrawRectangleRounded(rec, roundness, segments, Fade(MAROON, 0.2)); if (drawRoundedLines) DrawRectangleRoundedLines(rec,roundness, segments, lineThick, Fade(MAROON, 0.4)); - + // Draw GUI controls //------------------------------------------------------------------------------ width = GuiSliderBar((Rectangle){ 640, 40, 105, 20 }, "Width", width, 0, GetScreenWidth() - 300, true ); @@ -66,22 +66,22 @@ int main(void) roundness = GuiSliderBar((Rectangle){ 640, 140, 105, 20 }, "Roundness", roundness, 0.0f, 1.0f, true); lineThick = GuiSliderBar((Rectangle){ 640, 170, 105, 20 }, "Thickness", lineThick, 0, 20, true); segments = GuiSliderBar((Rectangle){ 640, 240, 105, 20}, "Segments", segments, 0, 60, true); - + drawRoundedRect = GuiCheckBox((Rectangle){ 640, 320, 20, 20 }, "DrawRoundedRect", drawRoundedRect); drawRoundedLines = GuiCheckBox((Rectangle){ 640, 350, 20, 20 }, "DrawRoundedLines", drawRoundedLines); drawRect = GuiCheckBox((Rectangle){ 640, 380, 20, 20}, "DrawRect", drawRect); //------------------------------------------------------------------------------ - + DrawText(FormatText("MODE: %s", (segments >= 4)? "MANUAL" : "AUTO"), 640, 280, 10, (segments >= 4)? MAROON : DARKGRAY); - + DrawFPS(10, 10); - + EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/shapes/shapes_draw_ring.c b/examples/src/shapes/shapes_draw_ring.c index 44a3ec5..a90feab 100644 --- a/examples/src/shapes/shapes_draw_ring.c +++ b/examples/src/shapes/shapes_draw_ring.c @@ -16,7 +16,7 @@ #define RAYGUI_IMPLEMENTATION #include "raygui.h" // Required for GUI controls -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -29,16 +29,16 @@ int main() float innerRadius = 80.0f; float outerRadius = 190.0f; - + int startAngle = 0; int endAngle = 360; int segments = 0; - + bool drawRing = true; bool drawRingLines = false; bool drawCircleLines = false; - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -48,13 +48,13 @@ int main() //---------------------------------------------------------------------------------- // NOTE: All variables update happens inside GUI control functions //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + DrawLine(500, 0, 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.6f)); DrawRectangle(500, 0, GetScreenWidth() - 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.3f)); @@ -66,27 +66,27 @@ int main() //------------------------------------------------------------------------------ startAngle = GuiSliderBar((Rectangle){ 600, 40, 120, 20 }, "StartAngle", startAngle, -450, 450, true); endAngle = GuiSliderBar((Rectangle){ 600, 70, 120, 20 }, "EndAngle", endAngle, -450, 450, true); - + innerRadius = GuiSliderBar((Rectangle){ 600, 140, 120, 20 }, "InnerRadius", innerRadius, 0, 100, true); outerRadius = GuiSliderBar((Rectangle){ 600, 170, 120, 20 }, "OuterRadius", outerRadius, 0, 200, true); - + segments = GuiSliderBar((Rectangle){ 600, 240, 120, 20 }, "Segments", segments, 0, 100, true); - + drawRing = GuiCheckBox((Rectangle){ 600, 320, 20, 20 }, "Draw Ring", drawRing); drawRingLines = GuiCheckBox((Rectangle){ 600, 350, 20, 20 }, "Draw RingLines", drawRingLines); drawCircleLines = GuiCheckBox((Rectangle){ 600, 380, 20, 20 }, "Draw CircleLines", drawCircleLines); //------------------------------------------------------------------------------ - + DrawText(FormatText("MODE: %s", (segments >= 4)? "MANUAL" : "AUTO"), 600, 270, 10, (segments >= 4)? MAROON : DARKGRAY); - + DrawFPS(10, 10); - + EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/shapes/shapes_easings_ball_anim.c b/examples/src/shapes/shapes_easings_ball_anim.c index 4477203..5bb2b4c 100644 --- a/examples/src/shapes/shapes_easings_ball_anim.c +++ b/examples/src/shapes/shapes_easings_ball_anim.c @@ -11,9 +11,9 @@ #include "raylib.h" -#include "easings.h" // Required for easing functions +#include "easings.h" // Required for easing functions -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -21,16 +21,16 @@ int main() const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [shapes] example - easings ball anim"); - + // Ball variable value to be animated with easings int ballPositionX = -100; int ballRadius = 20; float ballAlpha = 0.0f; - + int state = 0; int framesCounter = 0; - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -42,7 +42,7 @@ int main() { framesCounter++; ballPositionX = EaseElasticOut(framesCounter, -100, screenWidth/2 + 100, 120); - + if (framesCounter >= 120) { framesCounter = 0; @@ -53,7 +53,7 @@ int main() { framesCounter++; ballRadius = EaseElasticIn(framesCounter, 20, 500, 200); - + if (framesCounter >= 200) { framesCounter = 0; @@ -64,7 +64,7 @@ int main() { framesCounter++; ballAlpha = EaseCubicOut(framesCounter, 0.0f, 1.0f, 200); - + if (framesCounter >= 200) { framesCounter = 0; @@ -73,7 +73,7 @@ int main() } else if (state == 3) // Reset state to play again { - if (IsKeyPressed(KEY_ENTER)) + if (IsKeyPressed(KEY_ENTER)) { // Reset required variables to play again ballPositionX = -100; @@ -82,7 +82,7 @@ int main() state = 0; } } - + if (IsKeyPressed(KEY_R)) framesCounter = 0; //---------------------------------------------------------------------------------- @@ -94,15 +94,15 @@ int main() if (state >= 2) DrawRectangle(0, 0, screenWidth, screenHeight, GREEN); DrawCircle(ballPositionX, 200, ballRadius, Fade(RED, 1.0f - ballAlpha)); - + if (state == 3) DrawText("PRESS [ENTER] TO PLAY AGAIN!", 240, 200, 20, BLACK); - + EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/shapes/shapes_easings_box_anim.c b/examples/src/shapes/shapes_easings_box_anim.c index c74cb2a..6805d53 100644 --- a/examples/src/shapes/shapes_easings_box_anim.c +++ b/examples/src/shapes/shapes_easings_box_anim.c @@ -13,7 +13,7 @@ #include "easings.h" // Required for easing functions -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -21,16 +21,16 @@ int main() const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [shapes] example - easings box anim"); - + // Box variables to be animated with easings Rectangle rec = { GetScreenWidth()/2, -100, 100, 100 }; float rotation = 0.0f; float alpha = 1.0f; - + int state = 0; int framesCounter = 0; - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -43,12 +43,12 @@ int main() case 0: // Move box down to center of screen { framesCounter++; - + // NOTE: Remember that 3rd parameter of easing function refers to // desired value variation, do not confuse it with expected final value! rec.y = EaseElasticOut(framesCounter, -100, GetScreenHeight()/2 + 100, 120); - if (framesCounter >= 120) + if (framesCounter >= 120) { framesCounter = 0; state = 1; @@ -59,8 +59,8 @@ int main() framesCounter++; rec.height = EaseBounceOut(framesCounter, 100, -90, 120); rec.width = EaseBounceOut(framesCounter, 100, GetScreenWidth(), 120); - - if (framesCounter >= 120) + + if (framesCounter >= 120) { framesCounter = 0; state = 2; @@ -70,8 +70,8 @@ int main() { framesCounter++; rotation = EaseQuadOut(framesCounter, 0.0f, 270.0f, 240); - - if (framesCounter >= 240) + + if (framesCounter >= 240) { framesCounter = 0; state = 3; @@ -81,8 +81,8 @@ int main() { framesCounter++; rec.height = EaseCircOut(framesCounter, 10, GetScreenWidth(), 120); - - if (framesCounter >= 120) + + if (framesCounter >= 120) { framesCounter = 0; state = 4; @@ -92,7 +92,7 @@ int main() { framesCounter++; alpha = EaseSineOut(framesCounter, 1.0f, -1.0f, 160); - + if (framesCounter >= 160) { framesCounter = 0; @@ -101,7 +101,7 @@ int main() } break; default: break; } - + // Reset animation at any moment if (IsKeyPressed(KEY_SPACE)) { @@ -112,7 +112,7 @@ int main() framesCounter = 0; } //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); @@ -120,7 +120,7 @@ int main() ClearBackground(RAYWHITE); DrawRectanglePro(rec, (Vector2){ rec.width/2, rec.height/2 }, rotation, Fade(BLACK, alpha)); - + DrawText("PRESS [SPACE] TO RESET BOX ANIMATION!", 10, GetScreenHeight() - 25, 20, LIGHTGRAY); EndDrawing(); @@ -128,7 +128,7 @@ int main() } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/shapes/shapes_easings_rectangle_array.c b/examples/src/shapes/shapes_easings_rectangle_array.c index 27bad5c..9844af6 100644 --- a/examples/src/shapes/shapes_easings_rectangle_array.c +++ b/examples/src/shapes/shapes_easings_rectangle_array.c @@ -2,7 +2,7 @@ * * raylib [shapes] example - easings rectangle array * -* NOTE: This example requires 'easings.h' library, provided on raylib/src. Just copy +* NOTE: This example requires 'easings.h' library, provided on raylib/src. Just copy * the library to same directory as example or make sure it's available on include path. * * This example has been created using raylib 2.0 (www.raylib.com) @@ -24,17 +24,17 @@ #define PLAY_TIME_IN_FRAMES 240 // At 60 fps = 4 seconds -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [shapes] example - easings rectangle array"); - + Rectangle recs[MAX_RECS_X*MAX_RECS_Y]; - + for (int y = 0; y < MAX_RECS_Y; y++) { for (int x = 0; x < MAX_RECS_X; x++) @@ -45,12 +45,12 @@ int main() recs[y*MAX_RECS_X + x].height = RECS_HEIGHT; } } - + float rotation = 0.0f; int framesCounter = 0; - int state = 0; // Rectangles animation state: 0-Playing, 1-Finished - - SetTargetFPS(60); + int state = 0; // Rectangles animation state: 0-Playing, 1-Finished + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -62,16 +62,16 @@ int main() { framesCounter++; - for (int i = 0; i < MAX_RECS_X*MAX_RECS_Y; i++) + for (int i = 0; i < MAX_RECS_X*MAX_RECS_Y; i++) { recs[i].height = EaseCircOut(framesCounter, RECS_HEIGHT, -RECS_HEIGHT, PLAY_TIME_IN_FRAMES); recs[i].width = EaseCircOut(framesCounter, RECS_WIDTH, -RECS_WIDTH, PLAY_TIME_IN_FRAMES); - + if (recs[i].height < 0) recs[i].height = 0; if (recs[i].width < 0) recs[i].width = 0; - + if ((recs[i].height == 0) && (recs[i].width == 0)) state = 1; // Finish playing - + rotation = EaseLinearIn(framesCounter, 0.0f, 360.0f, PLAY_TIME_IN_FRAMES); } } @@ -79,13 +79,13 @@ int main() { // When animation has finished, press space to restart framesCounter = 0; - - for (int i = 0; i < MAX_RECS_X*MAX_RECS_Y; i++) + + for (int i = 0; i < MAX_RECS_X*MAX_RECS_Y; i++) { recs[i].height = RECS_HEIGHT; recs[i].width = RECS_WIDTH; } - + state = 0; } //---------------------------------------------------------------------------------- @@ -110,7 +110,7 @@ int main() } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/shapes/shapes_following_eyes.c b/examples/src/shapes/shapes_following_eyes.c index e99a7e0..a36a8d6 100644 --- a/examples/src/shapes/shapes_following_eyes.c +++ b/examples/src/shapes/shapes_following_eyes.c @@ -13,7 +13,7 @@ #include // Required for: atan2f() -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -21,19 +21,19 @@ int main() const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [shapes] example - following eyes"); - + Vector2 scleraLeftPosition = { GetScreenWidth()/2 - 100, GetScreenHeight()/2 }; Vector2 scleraRightPosition = { GetScreenWidth()/2 + 100, GetScreenHeight()/2 }; float scleraRadius = 80; - + Vector2 irisLeftPosition = { GetScreenWidth()/2 - 100, GetScreenHeight()/2 }; Vector2 irisRightPosition = { GetScreenWidth()/2 + 100, GetScreenHeight()/2}; float irisRadius = 24; - - float angle; - float dx, dy, dxx, dyy; - - SetTargetFPS(60); + + float angle = 0.0f; + float dx = 0.0f, dy = 0.0f, dxx = 0.0f, dyy = 0.0f; + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -43,13 +43,13 @@ int main() //---------------------------------------------------------------------------------- irisLeftPosition = GetMousePosition(); irisRightPosition = GetMousePosition(); - + // Check not inside the left eye sclera if (!CheckCollisionPointCircle(irisLeftPosition, scleraLeftPosition, scleraRadius - 20)) { dx = irisLeftPosition.x - scleraLeftPosition.x; dy = irisLeftPosition.y - scleraLeftPosition.y; - + angle = atan2f(dy, dx); dxx = (scleraRadius - irisRadius)*cosf(angle); @@ -64,7 +64,7 @@ int main() { dx = irisRightPosition.x - scleraRightPosition.x; dy = irisRightPosition.y - scleraRightPosition.y; - + angle = atan2f(dy, dx); dxx = (scleraRadius - irisRadius)*cosf(angle); @@ -84,19 +84,19 @@ int main() DrawCircleV(scleraLeftPosition, scleraRadius, LIGHTGRAY); DrawCircleV(irisLeftPosition, irisRadius, BROWN); DrawCircleV(irisLeftPosition, 10, BLACK); - + DrawCircleV(scleraRightPosition, scleraRadius, LIGHTGRAY); DrawCircleV(irisRightPosition, irisRadius, DARKGREEN); DrawCircleV(irisRightPosition, 10, BLACK); - + DrawFPS(10, 10); - + EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/shapes/shapes_lines_bezier.c b/examples/src/shapes/shapes_lines_bezier.c index f413345..3d4edcd 100644 --- a/examples/src/shapes/shapes_lines_bezier.c +++ b/examples/src/shapes/shapes_lines_bezier.c @@ -11,20 +11,20 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; SetConfigFlags(FLAG_MSAA_4X_HINT); InitWindow(screenWidth, screenHeight, "raylib [shapes] example - cubic-bezier lines"); - + Vector2 start = { 0, 0 }; Vector2 end = { screenWidth, screenHeight }; - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -41,17 +41,17 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - + DrawText("USE MOUSE LEFT-RIGHT CLICK to DEFINE LINE START and END POINTS", 15, 20, 20, GRAY); DrawLineBezier(start, end, 2.0f, RED); - + EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/shapes/shapes_logo_raylib.c b/examples/src/shapes/shapes_logo_raylib.c index be94988..3e2d343 100644 --- a/examples/src/shapes/shapes_logo_raylib.c +++ b/examples/src/shapes/shapes_logo_raylib.c @@ -11,16 +11,16 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [shapes] example - raylib logo using shapes"); - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/src/shapes/shapes_logo_raylib_anim.c b/examples/src/shapes/shapes_logo_raylib_anim.c index 9be1d96..b855839 100644 --- a/examples/src/shapes/shapes_logo_raylib_anim.c +++ b/examples/src/shapes/shapes_logo_raylib_anim.c @@ -11,12 +11,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [shapes] example - raylib logo animation"); @@ -35,7 +35,7 @@ int main() int state = 0; // Tracking animation states (State Machine) float alpha = 1.0f; // Useful for fading - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/src/shapes/shapes_rectangle_scaling.c b/examples/src/shapes/shapes_rectangle_scaling.c index 036a1dd..6940cbc 100644 --- a/examples/src/shapes/shapes_rectangle_scaling.c +++ b/examples/src/shapes/shapes_rectangle_scaling.c @@ -15,23 +15,23 @@ #define MOUSE_SCALE_MARK_SIZE 12 -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [shapes] example - rectangle scaling mouse"); - + Rectangle rec = { 100, 100, 200, 80 }; - + Vector2 mousePosition = { 0 }; - + bool mouseScaleReady = false; bool mouseScaleMode = false; - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -40,25 +40,25 @@ int main() // Update //---------------------------------------------------------------------------------- mousePosition = GetMousePosition(); - - if (CheckCollisionPointRec(mousePosition, rec) && + + if (CheckCollisionPointRec(mousePosition, rec) && CheckCollisionPointRec(mousePosition, (Rectangle){ rec.x + rec.width - MOUSE_SCALE_MARK_SIZE, rec.y + rec.height - MOUSE_SCALE_MARK_SIZE, MOUSE_SCALE_MARK_SIZE, MOUSE_SCALE_MARK_SIZE })) { mouseScaleReady = true; if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) mouseScaleMode = true; } else mouseScaleReady = false; - + if (mouseScaleMode) { mouseScaleReady = true; - + rec.width = (mousePosition.x - rec.x); rec.height = (mousePosition.y - rec.y); - + if (rec.width < MOUSE_SCALE_MARK_SIZE) rec.width = MOUSE_SCALE_MARK_SIZE; if (rec.height < MOUSE_SCALE_MARK_SIZE) rec.height = MOUSE_SCALE_MARK_SIZE; - + if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) mouseScaleMode = false; } //---------------------------------------------------------------------------------- @@ -68,15 +68,15 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - + DrawText("Scale rectangle dragging from bottom-right corner!", 10, 10, 20, GRAY); DrawRectangleRec(rec, Fade(GREEN, 0.5f)); - - if (mouseScaleReady) + + if (mouseScaleReady) { DrawRectangleLinesEx(rec, 1, RED); - DrawTriangle((Vector2){ rec.x + rec.width - MOUSE_SCALE_MARK_SIZE, rec.y + rec.height }, + DrawTriangle((Vector2){ rec.x + rec.width - MOUSE_SCALE_MARK_SIZE, rec.y + rec.height }, (Vector2){ rec.x + rec.width, rec.y + rec.height }, (Vector2){ rec.x + rec.width, rec.y + rec.height - MOUSE_SCALE_MARK_SIZE }, RED); } @@ -86,7 +86,7 @@ int main() } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/text/text_bmfont_ttf.c b/examples/src/text/text_bmfont_ttf.c index ca26b2c..175d3f1 100644 --- a/examples/src/text/text_bmfont_ttf.c +++ b/examples/src/text/text_bmfont_ttf.c @@ -11,12 +11,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [text] example - bmfont and ttf sprite fonts loading"); @@ -25,17 +25,17 @@ int main() const char msg[256] = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI\nJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmn\nopqrstuvwxyz{|}~¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓ\nÔÕÖרÙÚÛÜÃÞßàáâãäåæçèéêëìíîïðñòóôõö÷\nøùúûüýþÿ"; // NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) - + // BMFont (AngelCode) : Font data and image atlas have been generated using external program Font fontBm = LoadFont("resources/pixantiqua.fnt"); - + // TTF font : Font data and atlas are generated directly from TTF // NOTE: We define a font base size of 32 pixels tall and up-to 250 characters Font fontTtf = LoadFontEx("resources/pixantiqua.ttf", 32, 0, 250); - + bool useTtf = false; - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -52,7 +52,7 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - + DrawText("Press SPACE to use TTF generated font", 20, 20, 20, LIGHTGRAY); if (!useTtf) diff --git a/examples/src/text/text_font_sdf.c b/examples/src/text/text_font_sdf.c index 69cff47..d3c76c4 100644 --- a/examples/src/text/text_font_sdf.c +++ b/examples/src/text/text_font_sdf.c @@ -17,17 +17,17 @@ #define GLSL_VERSION 100 #endif -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [text] example - SDF fonts"); // NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) - + const char msg[50] = "Signed Distance Fields"; // Default font generation from TTF font @@ -40,7 +40,7 @@ int main() Image atlas = GenImageFontAtlas(fontDefault.chars, 95, 16, 4, 0); fontDefault.texture = LoadTextureFromImage(atlas); UnloadImage(atlas); - + // SDF font generation from TTF font Font fontSDF = { 0 }; fontSDF.baseSize = 16; @@ -51,7 +51,7 @@ int main() atlas = GenImageFontAtlas(fontSDF.chars, 95, 16, 0, 1); fontSDF.texture = LoadTextureFromImage(atlas); UnloadImage(atlas); - + // Load SDF required shader (we use default vertex shader) Shader shader = LoadShader(0, FormatText("resources/shaders/glsl%i/sdf.fs", GLSL_VERSION)); SetTextureFilter(fontSDF.texture, FILTER_BILINEAR); // Required for SDF font @@ -59,51 +59,51 @@ int main() Vector2 fontPosition = { 40, screenHeight/2 - 50 }; Vector2 textSize = { 0.0f }; float fontSize = 16.0f; - int currentFont = 0; // 0 - fontDefault, 1 - fontSDF - - SetTargetFPS(60); - //-------------------------------------------------------------------------------------- + int currentFont = 0; // 0 - fontDefault, 1 - fontSDF + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- fontSize += GetMouseWheelMove()*8.0f; - + if (fontSize < 6) fontSize = 6; - + if (IsKeyDown(KEY_SPACE)) currentFont = 1; else currentFont = 0; - + if (currentFont == 0) textSize = MeasureTextEx(fontDefault, msg, fontSize, 0); else textSize = MeasureTextEx(fontSDF, msg, fontSize, 0); - + fontPosition.x = GetScreenWidth()/2 - textSize.x/2; fontPosition.y = GetScreenHeight()/2 - textSize.y/2 + 80; //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + if (currentFont == 1) { // NOTE: SDF fonts require a custom SDf shader to compute fragment color BeginShaderMode(shader); // Activate SDF font shader DrawTextEx(fontSDF, msg, fontPosition, fontSize, 0, BLACK); EndShaderMode(); // Activate our default shader for next drawings - + DrawTexture(fontSDF.texture, 10, 10, BLACK); } - else + else { DrawTextEx(fontDefault, msg, fontPosition, fontSize, 0, BLACK); DrawTexture(fontDefault.texture, 10, 10, BLACK); } - + if (currentFont == 1) DrawText("SDF!", 320, 20, 80, RED); else DrawText("default font", 315, 40, 30, GRAY); @@ -112,7 +112,7 @@ int main() DrawText("Use MOUSE WHEEL to SCALE TEXT!", GetScreenWidth() - 240, 90, 10, DARKGRAY); DrawText("PRESS SPACE to USE SDF FONT VERSION!", 340, GetScreenHeight() - 30, 20, MAROON); - + EndDrawing(); //---------------------------------------------------------------------------------- } @@ -121,11 +121,11 @@ int main() //-------------------------------------------------------------------------------------- UnloadFont(fontDefault); // Default font unloading UnloadFont(fontSDF); // SDF font unloading - + UnloadShader(shader); // Unload SDF shader - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- - + return 0; } \ No newline at end of file diff --git a/examples/src/text/text_format_text.c b/examples/src/text/text_format_text.c index ca28be7..a9f0417 100644 --- a/examples/src/text/text_format_text.c +++ b/examples/src/text/text_format_text.c @@ -11,12 +11,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [text] example - text formatting"); @@ -24,7 +24,7 @@ int main() int hiscore = 200450; int lives = 5; - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/src/text/text_input_box.c b/examples/src/text/text_input_box.c index 5f8d1c0..ea3d299 100644 --- a/examples/src/text/text_input_box.c +++ b/examples/src/text/text_input_box.c @@ -13,12 +13,12 @@ #define MAX_INPUT_CHARS 9 -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [text] example - input box"); @@ -30,7 +30,7 @@ int main() int framesCounter = 0; - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -40,27 +40,27 @@ int main() //---------------------------------------------------------------------------------- if (CheckCollisionPointRec(GetMousePosition(), textBox)) mouseOnText = true; else mouseOnText = false; - + if (mouseOnText) { int key = GetKeyPressed(); - + // NOTE: Only allow keys in range [32..125] if ((key >= 32) && (key <= 125) && (letterCount < MAX_INPUT_CHARS)) { name[letterCount] = (char)key; letterCount++; } - + if (IsKeyPressed(KEY_BACKSPACE)) { letterCount--; name[letterCount] = '\0'; - + if (letterCount < 0) letterCount = 0; } } - + if (mouseOnText) framesCounter++; else framesCounter = 0; //---------------------------------------------------------------------------------- @@ -70,15 +70,15 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - + DrawText("PLACE MOUSE OVER INPUT BOX!", 240, 140, 20, GRAY); DrawRectangleRec(textBox, LIGHTGRAY); if (mouseOnText) DrawRectangleLines(textBox.x, textBox.y, textBox.width, textBox.height, RED); else DrawRectangleLines(textBox.x, textBox.y, textBox.width, textBox.height, DARKGRAY); - + DrawText(name, textBox.x + 5, textBox.y + 8, 40, MAROON); - + DrawText(FormatText("INPUT CHARS: %i/%i", letterCount, MAX_INPUT_CHARS), 315, 250, 20, DARKGRAY); if (mouseOnText) @@ -90,13 +90,13 @@ int main() } else DrawText("Press BACKSPACE to delete chars...", 230, 300, 20, GRAY); } - + EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/text/text_raylib_fonts.c b/examples/src/text/text_raylib_fonts.c index 3c930ac..06e6372 100644 --- a/examples/src/text/text_raylib_fonts.c +++ b/examples/src/text/text_raylib_fonts.c @@ -16,18 +16,18 @@ #define MAX_FONTS 8 -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [text] example - raylib fonts"); // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) Font fonts[MAX_FONTS]; - + fonts[0] = LoadFont("resources/fonts/alagard.png"); fonts[1] = LoadFont("resources/fonts/pixelplay.png"); fonts[2] = LoadFont("resources/fonts/mecha.png"); @@ -36,32 +36,34 @@ int main() fonts[5] = LoadFont("resources/fonts/pixantiqua.png"); fonts[6] = LoadFont("resources/fonts/alpha_beta.png"); fonts[7] = LoadFont("resources/fonts/jupiter_crash.png"); - - const char *messages[MAX_FONTS] = { "ALAGARD FONT designed by Hewett Tsoi", + + const char *messages[MAX_FONTS] = { "ALAGARD FONT designed by Hewett Tsoi", "PIXELPLAY FONT designed by Aleksander Shevchuk", - "MECHA FONT designed by Captain Falcon", - "SETBACK FONT designed by Brian Kent (AEnigma)", - "ROMULUS FONT designed by Hewett Tsoi", + "MECHA FONT designed by Captain Falcon", + "SETBACK FONT designed by Brian Kent (AEnigma)", + "ROMULUS FONT designed by Hewett Tsoi", "PIXANTIQUA FONT designed by Gerhard Grossmann", "ALPHA_BETA FONT designed by Brian Kent (AEnigma)", "JUPITER_CRASH FONT designed by Brian Kent (AEnigma)" }; - + const int spacings[MAX_FONTS] = { 2, 4, 8, 4, 3, 4, 4, 1 }; - + Vector2 positions[MAX_FONTS]; - + for (int i = 0; i < MAX_FONTS; i++) { positions[i].x = screenWidth/2 - MeasureTextEx(fonts[i], messages[i], fonts[i].baseSize*2, spacings[i]).x/2; positions[i].y = 60 + fonts[i].baseSize + 45*i; } - + // Small Y position corrections positions[3].y += 8; positions[4].y += 2; positions[7].y -= 8; - + Color colors[MAX_FONTS] = { MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, LIME, GOLD, RED }; + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -77,10 +79,10 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - + DrawText("free fonts included with raylib", 250, 20, 20, DARKGRAY); DrawLine(220, 50, 590, 50, DARKGRAY); - + for (int i = 0; i < MAX_FONTS; i++) { DrawTextEx(fonts[i], messages[i], positions[i], fonts[i].baseSize*2, spacings[i], colors[i]); @@ -92,7 +94,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- - + // Fonts unloading for (int i = 0; i < MAX_FONTS; i++) UnloadFont(fonts[i]); diff --git a/examples/src/text/text_rectangle_bounds.c b/examples/src/text/text_rectangle_bounds.c index d4cd240..5871278 100644 --- a/examples/src/text/text_rectangle_bounds.c +++ b/examples/src/text/text_rectangle_bounds.c @@ -13,36 +13,36 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [text] example - draw text inside a rectangle"); - + char text[] = "Text cannot escape\tthis container\t...word wrap also works when active so here's\ - a long text for testing.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod\ - tempor incididunt ut labore et dolore magna aliqua. Nec ullamcorper sit amet risus nullam eget felis eget."; - + a long text for testing.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod\ + tempor incididunt ut labore et dolore magna aliqua. Nec ullamcorper sit amet risus nullam eget felis eget."; + bool resizing = false; bool wordWrap = true; - + Rectangle container = { 25, 25, screenWidth - 50, screenHeight - 250}; Rectangle resizer = { container.x + container.width - 17, container.y + container.height - 17, 14, 14 }; - + // Minimum width and heigh for the container rectangle const int minWidth = 60; - const int minHeight = 60; + const int minHeight = 60; const int maxWidth = screenWidth - 50; const int maxHeight = screenHeight - 160; - + Vector2 lastMouse = { 0, 0 }; // Stores last mouse coordinates Color borderColor = MAROON; // Container border color Font font = GetFontDefault(); // Get default system font - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -51,34 +51,34 @@ int main() // Update //---------------------------------------------------------------------------------- if (IsKeyPressed(KEY_SPACE)) wordWrap = !wordWrap; - + Vector2 mouse = GetMousePosition(); - + // Check if the mouse is inside the container and toggle border color if (CheckCollisionPointRec(mouse, container)) borderColor = Fade(MAROON, 0.4f); else if (!resizing) borderColor = MAROON; - + // Container resizing logic - if (resizing) + if (resizing) { if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) resizing = false; - + int width = container.width + (mouse.x - lastMouse.x); container.width = (width > minWidth)? ((width < maxWidth)? width : maxWidth) : minWidth; - + int height = container.height + (mouse.y - lastMouse.y); container.height = (height > minHeight)? ((height < maxHeight)? height : maxHeight) : minHeight; - } - else + } + else { // Check if we're resizing if (IsMouseButtonDown(MOUSE_LEFT_BUTTON) && CheckCollisionPointRec(mouse, resizer)) resizing = true; } - + // Move resizer rectangle properly resizer.x = container.x + container.width - 17; resizer.y = container.y + container.height - 17; - + lastMouse = mouse; // Update mouse //---------------------------------------------------------------------------------- @@ -89,10 +89,10 @@ int main() ClearBackground(RAYWHITE); DrawRectangleLinesEx(container, 3, borderColor); // Draw container border - + // Draw text in container (add some padding) - DrawTextRec(font, text, - (Rectangle){ container.x + 4, container.y + 4, container.width - 4, container.height - 4 }, + DrawTextRec(font, text, + (Rectangle){ container.x + 4, container.y + 4, container.width - 4, container.height - 4 }, 20.0f, 2.0f, wordWrap, GRAY); DrawRectangleRec(resizer, borderColor); // Draw the resize box @@ -106,13 +106,13 @@ int main() DrawRectangle(0, screenHeight - 54, screenWidth, 54, GRAY); DrawText("Click hold & drag the to resize the container", 155, screenHeight - 38, 20, RAYWHITE); DrawRectangleRec((Rectangle){ 382, screenHeight - 34, 12, 12 }, MAROON); - + EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/text/text_sprite_fonts.c b/examples/src/text/text_sprite_fonts.c index 7ce2fef..3002893 100644 --- a/examples/src/text/text_sprite_fonts.c +++ b/examples/src/text/text_sprite_fonts.c @@ -11,12 +11,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [text] example - sprite fonts usage"); @@ -40,6 +40,7 @@ int main() fontPosition3.x = screenWidth/2 - MeasureTextEx(font3, msg3, font3.baseSize, 2).x/2; fontPosition3.y = screenHeight/2 - font3.baseSize/2 + 50; + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/src/text/text_ttf_loading.c b/examples/src/text/text_ttf_loading.c index 0e964eb..cc59417 100644 --- a/examples/src/text/text_ttf_loading.c +++ b/examples/src/text/text_ttf_loading.c @@ -11,22 +11,22 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [text] example - ttf loading"); - + const char msg[50] = "TTF Font"; // NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) - + // TTF Font loading with custom generation parameters Font font = LoadFontEx("resources/KAISG.ttf", 96, 0, 0); - + // Generate mipmap levels to use trilinear filtering // NOTE: On 2D drawing it won't be noticeable, it looks like FILTER_BILINEAR GenTextureMipmaps(&font.texture); @@ -35,25 +35,20 @@ int main() Vector2 fontPosition = { 40, screenHeight/2 - 80 }; Vector2 textSize; + // Setup texture scaling filter SetTextureFilter(font.texture, FILTER_POINT); int currentFontFilter = 0; // FILTER_POINT - - // NOTE: Drag and drop support only available for desktop platforms: Windows, Linux, OSX -#if defined(PLATFORM_DESKTOP) - int count = 0; - char **droppedFiles; -#endif - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- fontSize += GetMouseWheelMove()*4.0f; - + // Choose font texture filter method if (IsKeyPressed(KEY_ONE)) { @@ -71,18 +66,18 @@ int main() SetTextureFilter(font.texture, FILTER_TRILINEAR); currentFontFilter = 2; } - + textSize = MeasureTextEx(font, msg, fontSize, 0); - + if (IsKeyDown(KEY_LEFT)) fontPosition.x -= 10; else if (IsKeyDown(KEY_RIGHT)) fontPosition.x += 10; - -#if defined(PLATFORM_DESKTOP) + // Load a dropped TTF file dynamically (at current fontSize) if (IsFileDropped()) { - droppedFiles = GetDroppedFiles(&count); - + int count = 0; + char **droppedFiles = GetDroppedFiles(&count); + if (count == 1) // Only support one ttf file dropped { UnloadFont(font); @@ -90,47 +85,45 @@ int main() ClearDroppedFiles(); } } -#endif //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + DrawText("Use mouse wheel to change font size", 20, 20, 10, GRAY); DrawText("Use KEY_RIGHT and KEY_LEFT to move text", 20, 40, 10, GRAY); DrawText("Use 1, 2, 3 to change texture filter", 20, 60, 10, GRAY); DrawText("Drop a new TTF font for dynamic loading", 20, 80, 10, DARKGRAY); DrawTextEx(font, msg, fontPosition, fontSize, 0, BLACK); - + // TODO: It seems texSize measurement is not accurate due to chars offsets... //DrawRectangleLines(fontPosition.x, fontPosition.y, textSize.x, textSize.y, RED); - + DrawRectangle(0, screenHeight - 80, screenWidth, 80, LIGHTGRAY); DrawText(FormatText("Font size: %02.02f", fontSize), 20, screenHeight - 50, 10, DARKGRAY); DrawText(FormatText("Text size: [%02.02f, %02.02f]", textSize.x, textSize.y), 20, screenHeight - 30, 10, DARKGRAY); DrawText("CURRENT TEXTURE FILTER:", 250, 400, 20, GRAY); - + if (currentFontFilter == 0) DrawText("POINT", 570, 400, 20, BLACK); else if (currentFontFilter == 1) DrawText("BILINEAR", 570, 400, 20, BLACK); else if (currentFontFilter == 2) DrawText("TRILINEAR", 570, 400, 20, BLACK); - + EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- -#if defined(PLATFORM_DESKTOP) ClearDroppedFiles(); // Clear internal buffers -#endif - UnloadFont(font); // Font unloading - + + UnloadFont(font); // Font unloading + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- - + return 0; } \ No newline at end of file diff --git a/examples/src/text/text_unicode.c b/examples/src/text/text_unicode.c index 6b456a7..3525f01 100644 --- a/examples/src/text/text_unicode.c +++ b/examples/src/text/text_unicode.c @@ -139,15 +139,12 @@ static void RandomizeEmoji(void); // Fills the emoji array with random emojis // Arrays that holds the random emojis struct { int index; // Index inside `emojiCodepoints` - int message; // Message index + int message; // Message index Color color; // Emoji color } emoji[EMOJI_PER_WIDTH*EMOJI_PER_HEIGHT] = { 0 }; static int hovered = -1, selected = -1; -//-------------------------------------------------------------------------------------- -// Main entry point -//-------------------------------------------------------------------------------------- int main(int argc, char **argv) { // Initialization @@ -156,26 +153,26 @@ int main(int argc, char **argv) const int screenHeight = 450; SetConfigFlags(FLAG_MSAA_4X_HINT | FLAG_VSYNC_HINT); - InitWindow(screenWidth, screenHeight, "raylib - unicode test"); + InitWindow(screenWidth, screenHeight, "raylib [text] example - unicode"); // Load the font resources - // NOTE: fontAsian is for asian languages, - // fontEmoji is the emojis and fontDefault is used for everything else + // NOTE: fontAsian is for asian languages, + // fontEmoji is the emojis and fontDefault is used for everything else Font fontDefault = LoadFont("resources/dejavu.fnt"); Font fontAsian = LoadFont("resources/notoCJK.fnt"); Font fontEmoji = LoadFont("resources/emoji.fnt"); - + Vector2 hoveredPos = { 0.0f, 0.0f }; Vector2 selectedPos = { 0.0f, 0.0f }; // Set a random set of emojis when starting up RandomizeEmoji(); - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main loop - while (!WindowShouldClose()) + while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- @@ -189,89 +186,89 @@ int main(int argc, char **argv) selectedPos = hoveredPos; SetClipboardText(messages[emoji[selected].message].text); } - + Vector2 mouse = GetMousePosition(); Vector2 pos = { 28.8f, 10.0f }; hovered = -1; //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + // Draw random emojis in the background //------------------------------------------------------------------------------ for (int i = 0; i < SIZEOF(emoji); ++i) { const char *txt = &emojiCodepoints[emoji[i].index]; Rectangle emojiRect = { pos.x, pos.y, fontEmoji.baseSize, fontEmoji.baseSize }; - + if (!CheckCollisionPointRec(mouse, emojiRect)) { DrawTextEx(fontEmoji, txt, pos, fontEmoji.baseSize, 1.0, selected == i ? emoji[i].color : Fade(LIGHTGRAY, 0.4f)); } - else + else { DrawTextEx(fontEmoji, txt, pos, fontEmoji.baseSize, 1.0, emoji[i].color ); hovered = i; hoveredPos = pos; } - + if ((i != 0) && (i%EMOJI_PER_WIDTH == 0)) { pos.y += fontEmoji.baseSize + 24.25f; pos.x = 28.8f; } else pos.x += fontEmoji.baseSize + 28.8f; } //------------------------------------------------------------------------------ - + // Draw the message when a emoji is selected //------------------------------------------------------------------------------ - if (selected != -1) + if (selected != -1) { const int message = emoji[selected].message; const int horizontalPadding = 20, verticalPadding = 30; Font *font = &fontDefault; - + // Set correct font for asian languages - if (TextIsEqual(messages[message].language, "Chinese") || - TextIsEqual(messages[message].language, "Korean") || + if (TextIsEqual(messages[message].language, "Chinese") || + TextIsEqual(messages[message].language, "Korean") || TextIsEqual(messages[message].language, "Japanese")) font = &fontAsian; - + // Calculate size for the message box (approximate the height and width) Vector2 sz = MeasureTextEx(*font, messages[message].text, font->baseSize, 1.0f); - if (sz.x > 300) { sz.y *= sz.x/300; sz.x = 300; } + if (sz.x > 300) { sz.y *= sz.x/300; sz.x = 300; } else if (sz.x < 160) sz.x = 160; - + Rectangle msgRect = { selectedPos.x - 38.8f, selectedPos.y, 2 * horizontalPadding + sz.x, 2 * verticalPadding + sz.y }; msgRect.y -= msgRect.height; - + // Coordinates for the chat bubble triangle Vector2 a = { selectedPos.x, msgRect.y + msgRect.height }, b = {a.x + 8, a.y + 10}, c= { a.x + 10, a.y }; - + // Don't go outside the screen if (msgRect.x < 10) msgRect.x += 28; - if (msgRect.y < 10) + if (msgRect.y < 10) { msgRect.y = selectedPos.y + 84; a.y = msgRect.y; c.y = a.y; b.y = a.y - 10; - + // Swap values so we can actually render the triangle :( Vector2 tmp = a; a = b; b = tmp; } if (msgRect.x + msgRect.width > screenWidth) msgRect.x -= (msgRect.x + msgRect.width) - screenWidth + 10; - + // Draw chat bubble DrawRectangleRec(msgRect, emoji[selected].color); DrawTriangle(a, b, c, emoji[selected].color); - + // Draw the main text message Rectangle textRect = { msgRect.x + horizontalPadding/2, msgRect.y + verticalPadding/2, msgRect.width - horizontalPadding, msgRect.height }; DrawTextRec(*font, messages[message].text, textRect, font->baseSize, 1.0f, true, WHITE); - + // Draw the info text below the main message int size = strlen(messages[message].text); unsigned int len = TextCountCodepoints(messages[message].text); @@ -281,25 +278,25 @@ int main(int argc, char **argv) DrawText(info, pos.x, pos.y, 10, RAYWHITE); } //------------------------------------------------------------------------------ - + // Draw the info text DrawText("These emojis have something to tell you, click each to find out!", (screenWidth - 650)/2, screenHeight - 40, 20, GRAY); DrawText("Each emoji is a unicode character from a font, not a texture... Press [SPACEBAR] to refresh", (screenWidth - 484)/2, screenHeight - 16, 10, GRAY); - - EndDrawing(); + + EndDrawing(); //---------------------------------------------------------------------------------- - } - + } + // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- UnloadFont(fontDefault); // Unload font resource UnloadFont(fontAsian); // Unload font resource UnloadFont(fontEmoji); // Unload font resource - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - return 0; + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; } // Fills the emoji array with random emoji (only those emojis present in fontEmoji) @@ -307,16 +304,16 @@ static void RandomizeEmoji(void) { hovered = selected = -1; int start = GetRandomValue(45, 360); - + for (int i = 0; i < SIZEOF(emoji); ++i) { // 0-179 emoji codepoints (from emoji char array) each 4bytes + null char emoji[i].index = GetRandomValue(0, 179)*5; - + // Generate a random color for this emoji Vector3 hsv = {(start*(i + 1))%360, 0.6f, 0.85f}; emoji[i].color = Fade(ColorFromHSV(hsv), 0.8f); - + // Set a random message for this emoji emoji[i].message = GetRandomValue(0, SIZEOF(messages) - 1); } diff --git a/examples/src/text/text_writing_anim.c b/examples/src/text/text_writing_anim.c index b2aba69..2cf2eaa 100644 --- a/examples/src/text/text_writing_anim.c +++ b/examples/src/text/text_writing_anim.c @@ -11,20 +11,20 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [text] example - text writing anim"); - + const char message[128] = "This sample illustrates a text writing\nanimation effect! Check it out! ;)"; - + int framesCounter = 0; - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -34,7 +34,7 @@ int main() //---------------------------------------------------------------------------------- if (IsKeyDown(KEY_SPACE)) framesCounter += 8; else framesCounter++; - + if (IsKeyPressed(KEY_ENTER)) framesCounter = 0; //---------------------------------------------------------------------------------- @@ -45,7 +45,7 @@ int main() ClearBackground(RAYWHITE); DrawText(TextSubtext(message, 0, framesCounter/10), 210, 160, 20, MAROON); - + DrawText("PRESS [ENTER] to RESTART!", 240, 260, 20, LIGHTGRAY); DrawText("PRESS [SPACE] to SPEED UP!", 239, 300, 20, LIGHTGRAY); @@ -54,7 +54,7 @@ int main() } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/textures/textures_background_scrolling.c b/examples/src/textures/textures_background_scrolling.c index 2be0810..d91b258 100644 --- a/examples/src/textures/textures_background_scrolling.c +++ b/examples/src/textures/textures_background_scrolling.c @@ -11,26 +11,26 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [textures] example - background scrolling"); - + // NOTE: Be careful, background width must be equal or bigger than screen width // if not, texture should be draw more than two times for scrolling effect Texture2D background = LoadTexture("resources/cyberpunk_street_background.png"); Texture2D midground = LoadTexture("resources/cyberpunk_street_midground.png"); Texture2D foreground = LoadTexture("resources/cyberpunk_street_foreground.png"); - + float scrollingBack = 0; float scrollingMid = 0; float scrollingFore = 0; - - SetTargetFPS(60); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -41,7 +41,7 @@ int main() scrollingBack -= 0.1f; scrollingMid -= 0.5f; scrollingFore -= 1.0f; - + // NOTE: Texture is scaled twice its size, so it sould be considered on scrolling if (scrollingBack <= -background.width*2) scrollingBack = 0; if (scrollingMid <= -midground.width*2) scrollingMid = 0; @@ -58,15 +58,15 @@ int main() // NOTE: Texture is scaled twice its size DrawTextureEx(background, (Vector2){ scrollingBack, 20 }, 0.0f, 2.0f, WHITE); DrawTextureEx(background, (Vector2){ background.width*2 + scrollingBack, 20 }, 0.0f, 2.0f, WHITE); - + // Draw midground image twice DrawTextureEx(midground, (Vector2){ scrollingMid, 20 }, 0.0f, 2.0f, WHITE); DrawTextureEx(midground, (Vector2){ midground.width*2 + scrollingMid, 20 }, 0.0f, 2.0f, WHITE); - + // Draw foreground image twice DrawTextureEx(foreground, (Vector2){ scrollingFore, 70 }, 0.0f, 2.0f, WHITE); DrawTextureEx(foreground, (Vector2){ foreground.width*2 + scrollingFore, 70 }, 0.0f, 2.0f, WHITE); - + DrawText("BACKGROUND SCROLLING & PARALLAX", 10, 10, 20, RED); DrawText("(c) Cyberpunk Street Environment by Luis Zuno (@ansimuz)", screenWidth - 330, screenHeight - 20, 10, RAYWHITE); diff --git a/examples/src/textures/textures_bunnymark.c b/examples/src/textures/textures_bunnymark.c index 7607883..6b91d64 100644 --- a/examples/src/textures/textures_bunnymark.c +++ b/examples/src/textures/textures_bunnymark.c @@ -25,7 +25,7 @@ typedef struct Bunny { Color color; } Bunny; -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -34,13 +34,14 @@ int main() InitWindow(screenWidth, screenHeight, "raylib [textures] example - bunnymark"); + // Load bunny texture Texture2D texBunny = LoadTexture("resources/wabbit_alpha.png"); - Bunny *bunnies = (Bunny *)malloc(MAX_BUNNIES*sizeof(Bunny)); // Bunnies array + Bunny *bunnies = (Bunny *)malloc(MAX_BUNNIES*sizeof(Bunny)); // Bunnies array - int bunniesCount = 0; // Bunnies counter + int bunniesCount = 0; // Bunnies counter - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -56,8 +57,8 @@ int main() bunnies[bunniesCount].position = GetMousePosition(); bunnies[bunniesCount].speed.x = (float)GetRandomValue(-250, 250)/60.0f; bunnies[bunniesCount].speed.y = (float)GetRandomValue(-250, 250)/60.0f; - bunnies[bunniesCount].color = (Color){ GetRandomValue(50, 240), - GetRandomValue(80, 240), + bunnies[bunniesCount].color = (Color){ GetRandomValue(50, 240), + GetRandomValue(80, 240), GetRandomValue(100, 240), 255 }; bunniesCount++; } @@ -69,9 +70,9 @@ int main() bunnies[i].position.x += bunnies[i].speed.x; bunnies[i].position.y += bunnies[i].speed.y; - if (((bunnies[i].position.x + texBunny.width/2) > GetScreenWidth()) || + if (((bunnies[i].position.x + texBunny.width/2) > GetScreenWidth()) || ((bunnies[i].position.x + texBunny.width/2) < 0)) bunnies[i].speed.x *= -1; - if (((bunnies[i].position.y + texBunny.height/2) > GetScreenHeight()) || + if (((bunnies[i].position.y + texBunny.height/2) > GetScreenHeight()) || ((bunnies[i].position.y + texBunny.height/2 - 40) < 0)) bunnies[i].speed.y *= -1; } //---------------------------------------------------------------------------------- @@ -84,9 +85,9 @@ int main() for (int i = 0; i < bunniesCount; i++) { - // NOTE: When internal batch buffer limit is reached (MAX_BATCH_ELEMENTS), + // NOTE: When internal batch buffer limit is reached (MAX_BATCH_ELEMENTS), // a draw call is launched and buffer starts being filled again; - // before issuing a draw call, updated vertex data from internal CPU buffer is send to GPU... + // before issuing a draw call, updated vertex data from internal CPU buffer is send to GPU... // Process of sending data is costly and it could happen that GPU data has not been completely // processed for drawing while new data is tried to be sent (updating current in-use buffers) // it could generates a stall and consequently a frame drop, limiting the number of drawn bunnies @@ -96,7 +97,7 @@ int main() DrawRectangle(0, 0, screenWidth, 40, BLACK); DrawText(FormatText("bunnies: %i", bunniesCount), 120, 10, 20, GREEN); DrawText(FormatText("batched draw calls: %i", 1 + bunniesCount/MAX_BATCH_ELEMENTS), 320, 10, 20, MAROON); - + DrawFPS(10, 10); EndDrawing(); @@ -106,7 +107,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- free(bunnies); // Unload bunnies data array - + UnloadTexture(texBunny); // Unload bunny texture CloseWindow(); // Close window and OpenGL context diff --git a/examples/src/textures/textures_image_drawing.c b/examples/src/textures/textures_image_drawing.c index b179612..f5c3c85 100644 --- a/examples/src/textures/textures_image_drawing.c +++ b/examples/src/textures/textures_image_drawing.c @@ -13,12 +13,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [textures] example - image drawing"); @@ -28,26 +28,26 @@ int main() ImageCrop(&cat, (Rectangle){ 100, 10, 280, 380 }); // Crop an image piece ImageFlipHorizontal(&cat); // Flip cropped image horizontally ImageResize(&cat, 150, 200); // Resize flipped-cropped image - + Image parrots = LoadImage("resources/parrots.png"); // Load image in CPU memory (RAM) - + // Draw one image over the other with a scaling of 1.5f ImageDraw(&parrots, cat, (Rectangle){ 0, 0, cat.width, cat.height }, (Rectangle){ 30, 40, cat.width*1.5f, cat.height*1.5f }); ImageCrop(&parrots, (Rectangle){ 0, 50, parrots.width, parrots.height - 100 }); // Crop resulting image - + UnloadImage(cat); // Unload image from RAM - + // Load custom font for frawing on image Font font = LoadFont("resources/custom_jupiter_crash.png"); - + // Draw over image using custom font ImageDrawTextEx(&parrots, (Vector2){ 300, 230 }, font, "PARROTS & CAT", font.baseSize, -2, WHITE); - + UnloadFont(font); // Unload custom spritefont (already drawn used on image) Texture2D texture = LoadTextureFromImage(parrots); // Image converted to texture, uploaded to GPU memory (VRAM) UnloadImage(parrots); // Once image has been converted to texture and uploaded to VRAM, it can be unloaded from RAM - + SetTargetFPS(60); //--------------------------------------------------------------------------------------- diff --git a/examples/src/textures/textures_image_generation.c b/examples/src/textures/textures_image_generation.c index b9608c8..d9a39a2 100644 --- a/examples/src/textures/textures_image_generation.c +++ b/examples/src/textures/textures_image_generation.c @@ -13,12 +13,12 @@ #define NUM_TEXTURES 7 // Currently we have 7 generation algorithms -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [textures] example - procedural images generation"); @@ -38,7 +38,7 @@ int main() textures[4] = LoadTextureFromImage(whiteNoise); textures[5] = LoadTextureFromImage(perlinNoise); textures[6] = LoadTextureFromImage(cellular); - + // Unload image data (CPU RAM) UnloadImage(verticalGradient); UnloadImage(horizontalGradient); @@ -49,10 +49,10 @@ int main() UnloadImage(cellular); int currentTexture = 0; - + SetTargetFPS(60); //--------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) { @@ -67,15 +67,15 @@ int main() // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + DrawTexture(textures[currentTexture], 0, 0, WHITE); - + DrawRectangle(30, 400, 325, 30, Fade(SKYBLUE, 0.5f)); DrawRectangleLines(30, 400, 325, 30, Fade(WHITE, 0.5f)); DrawText("MOUSE LEFT BUTTON to CYCLE PROCEDURAL TEXTURES", 40, 410, 10, WHITE); - + switch(currentTexture) { case 0: DrawText("VERTICAL GRADIENT", 560, 10, 20, RAYWHITE); break; @@ -87,19 +87,19 @@ int main() case 6: DrawText("CELLULAR", 670, 10, 20, RAYWHITE); break; default: break; } - + EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- - + // Unload textures data (GPU VRAM) for (int i = 0; i < NUM_TEXTURES; i++) UnloadTexture(textures[i]); - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- - + return 0; } diff --git a/examples/src/textures/textures_image_loading.c b/examples/src/textures/textures_image_loading.c index 54c7358..265cab4 100644 --- a/examples/src/textures/textures_image_loading.c +++ b/examples/src/textures/textures_image_loading.c @@ -13,12 +13,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [textures] example - image loading"); diff --git a/examples/src/textures/textures_image_processing.c b/examples/src/textures/textures_image_processing.c index 6d33d95..b9ed51d 100644 --- a/examples/src/textures/textures_image_processing.c +++ b/examples/src/textures/textures_image_processing.c @@ -13,19 +13,19 @@ #include "raylib.h" -#include // Required for: free() +#include // Required for: free() #define NUM_PROCESSES 8 -typedef enum { - NONE = 0, - COLOR_GRAYSCALE, - COLOR_TINT, - COLOR_INVERT, - COLOR_CONTRAST, - COLOR_BRIGHTNESS, - FLIP_VERTICAL, - FLIP_HORIZONTAL +typedef enum { + NONE = 0, + COLOR_GRAYSCALE, + COLOR_TINT, + COLOR_INVERT, + COLOR_CONTRAST, + COLOR_BRIGHTNESS, + FLIP_VERTICAL, + FLIP_HORIZONTAL } ImageProcess; static const char *processText[] = { @@ -39,12 +39,12 @@ static const char *processText[] = { "FLIP HORIZONTAL" }; -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [textures] example - image processing"); @@ -58,9 +58,9 @@ int main() bool textureReload = false; Rectangle selectRecs[NUM_PROCESSES]; - + for (int i = 0; i < NUM_PROCESSES; i++) selectRecs[i] = (Rectangle){ 40.0f, (float)(50 + 32*i), 150.0f, 30.0f }; - + SetTargetFPS(60); //--------------------------------------------------------------------------------------- @@ -81,14 +81,14 @@ int main() if (currentProcess < 0) currentProcess = 7; textureReload = true; } - + if (textureReload) { UnloadImage(image); // Unload current image data image = LoadImage("resources/parrots.png"); // Re-load image data - // NOTE: Image processing is a costly CPU process to be done every frame, - // If image processing is required in a frame-basis, it should be done + // NOTE: Image processing is a costly CPU process to be done every frame, + // If image processing is required in a frame-basis, it should be done // with a texture and by shaders switch (currentProcess) { @@ -101,11 +101,11 @@ int main() case FLIP_HORIZONTAL: ImageFlipHorizontal(&image); break; default: break; } - + Color *pixels = GetImageData(image); // Get pixel data from image (RGBA 32bit) UpdateTexture(texture, pixels); // Update texture with new image data free(pixels); // Unload pixels data from RAM - + textureReload = false; } //---------------------------------------------------------------------------------- @@ -115,9 +115,9 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - + DrawText("IMAGE PROCESSING:", 40, 30, 10, DARKGRAY); - + // Draw rectangles for (int i = 0; i < NUM_PROCESSES; i++) { @@ -128,7 +128,7 @@ int main() DrawTexture(texture, screenWidth - texture.width - 60, screenHeight/2 - texture.height/2, WHITE); DrawRectangleLines(screenWidth - texture.width - 60, screenHeight/2 - texture.height/2, texture.width, texture.height, BLACK); - + EndDrawing(); //---------------------------------------------------------------------------------- } diff --git a/examples/src/textures/textures_image_text.c b/examples/src/textures/textures_image_text.c index ce91fbf..c8dfe45 100644 --- a/examples/src/textures/textures_image_text.c +++ b/examples/src/textures/textures_image_text.c @@ -11,28 +11,28 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [texture] example - image text drawing"); + Image parrots = LoadImage("resources/parrots.png"); // Load image in CPU memory (RAM) + // TTF Font loading with custom generation parameters Font font = LoadFontEx("resources/KAISG.ttf", 64, 0, 0); - - Image parrots = LoadImage("resources/parrots.png"); // Load image in CPU memory (RAM) // Draw over image using custom font ImageDrawTextEx(&parrots, (Vector2){ 20.0f, 20.0f }, font, "[Parrots font drawing]", (float)font.baseSize, 0.0f, RED); Texture2D texture = LoadTextureFromImage(parrots); // Image converted to texture, uploaded to GPU memory (VRAM) UnloadImage(parrots); // Once image has been converted to texture and uploaded to VRAM, it can be unloaded from RAM - + Vector2 position = { (float)(screenWidth/2 - texture.width/2), (float)(screenHeight/2 - texture.height/2 - 20) }; - + bool showFont = false; SetTargetFPS(60); @@ -57,15 +57,15 @@ int main() { // Draw texture with text already drawn inside DrawTextureV(texture, position, WHITE); - + // Draw text directly using sprite font - DrawTextEx(font, "[Parrots font drawing]", (Vector2){ position.x + 20, + DrawTextEx(font, "[Parrots font drawing]", (Vector2){ position.x + 20, position.y + 20 + 280 }, (float)font.baseSize, 0.0f, WHITE); } else DrawTexture(font.texture, screenWidth/2 - font.texture.width/2, 50, BLACK); - + DrawText("PRESS SPACE to SEE USED SPRITEFONT ", 290, 420, 10, DARKGRAY); - + EndDrawing(); //---------------------------------------------------------------------------------- } @@ -73,9 +73,9 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- UnloadTexture(texture); // Texture unloading - - UnloadFont(font); // Unload custom spritefont - + + UnloadFont(font); // Unload custom spritefont + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/textures/textures_logo_raylib.c b/examples/src/textures/textures_logo_raylib.c index f2f9312..de8bb2a 100644 --- a/examples/src/textures/textures_logo_raylib.c +++ b/examples/src/textures/textures_logo_raylib.c @@ -11,12 +11,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [textures] example - texture loading and drawing"); diff --git a/examples/src/textures/textures_npatch_drawing.c b/examples/src/textures/textures_npatch_drawing.c index 0514efe..1c57e2e 100644 --- a/examples/src/textures/textures_npatch_drawing.c +++ b/examples/src/textures/textures_npatch_drawing.c @@ -15,18 +15,18 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [textures] example - N-patch drawing"); // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) Texture2D nPatchTexture = LoadTexture("resources/ninepatch_button.png"); - + Vector2 mousePosition = { 0 }; Vector2 origin = { 0.0f, 0.0f }; @@ -39,13 +39,13 @@ int main() // A 9-patch (NPT_9PATCH) changes its sizes in both axis NPatchInfo ninePatchInfo1 = { (Rectangle){ 0.0f, 0.0f, 64.0f, 64.0f }, 12, 40, 12, 12, NPT_9PATCH }; NPatchInfo ninePatchInfo2 = { (Rectangle){ 0.0f, 128.0f, 64.0f, 64.0f }, 16, 16, 16, 16, NPT_9PATCH }; - + // A horizontal 3-patch (NPT_3PATCH_HORIZONTAL) changes its sizes along the x axis only NPatchInfo h3PatchInfo = { (Rectangle){ 0.0f, 64.0f, 64.0f, 64.0f }, 8, 8, 8, 8, NPT_3PATCH_HORIZONTAL }; - + // A vertical 3-patch (NPT_3PATCH_VERTICAL) changes its sizes along the y axis only NPatchInfo v3PatchInfo = { (Rectangle){ 0.0f, 192.0f, 64.0f, 64.0f }, 6, 6, 6, 6, NPT_3PATCH_VERTICAL }; - + SetTargetFPS(60); //--------------------------------------------------------------------------------------- @@ -55,7 +55,7 @@ int main() // Update //---------------------------------------------------------------------------------- mousePosition = GetMousePosition(); - + // Resize the n-patches based on mouse position dstRec1.width = mousePosition.x - dstRec1.x; dstRec1.height = mousePosition.y - dstRec1.y; @@ -86,7 +86,7 @@ int main() DrawTextureNPatch(nPatchTexture, ninePatchInfo1, dstRec1, origin, 0.0f, WHITE); DrawTextureNPatch(nPatchTexture, h3PatchInfo, dstRecH, origin, 0.0f, WHITE); DrawTextureNPatch(nPatchTexture, v3PatchInfo, dstRecV, origin, 0.0f, WHITE); - + // Draw the source texture DrawRectangleLines(5, 88, 74, 266, BLUE); DrawTexture(nPatchTexture, 10, 93, WHITE); diff --git a/examples/src/textures/textures_particles_blending.c b/examples/src/textures/textures_particles_blending.c index 3b7dcaa..75287ea 100644 --- a/examples/src/textures/textures_particles_blending.c +++ b/examples/src/textures/textures_particles_blending.c @@ -23,18 +23,18 @@ typedef struct { bool active; // NOTE: Use it to activate/deactive particle } Particle; -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [textures] example - particles blending"); - + // Particles pool, reuse them! - Particle mouseTail[MAX_PARTICLES]; - + Particle mouseTail[MAX_PARTICLES]; + // Initialize particles for (int i = 0; i < MAX_PARTICLES; i++) { @@ -45,13 +45,13 @@ int main() mouseTail[i].rotation = (float)GetRandomValue(0, 360); mouseTail[i].active = false; } - + float gravity = 3.0f; Texture2D smoke = LoadTexture("resources/smoke.png"); - + int blending = BLEND_ALPHA; - + SetTargetFPS(60); //-------------------------------------------------------------------------------------- @@ -60,7 +60,7 @@ int main() { // Update //---------------------------------------------------------------------------------- - + // Activate one particle every frame and Update active particles // NOTE: Particles initial position should be mouse position when activated // NOTE: Particles fall down with gravity and rotation... and disappear after 2 seconds (alpha = 0) @@ -82,13 +82,13 @@ int main() { mouseTail[i].position.y += gravity; mouseTail[i].alpha -= 0.01f; - + if (mouseTail[i].alpha <= 0.0f) mouseTail[i].active = false; - + mouseTail[i].rotation += 5.0f; } } - + if (IsKeyPressed(KEY_SPACE)) { if (blending == BLEND_ALPHA) blending = BLEND_ADDITIVE; @@ -101,25 +101,25 @@ int main() BeginDrawing(); ClearBackground(DARKGRAY); - + BeginBlendMode(blending); // Draw active particles for (int i = 0; i < MAX_PARTICLES; i++) { - if (mouseTail[i].active) DrawTexturePro(smoke, (Rectangle){ 0.0f, 0.0f, (float)smoke.width, (float)smoke.height }, + if (mouseTail[i].active) DrawTexturePro(smoke, (Rectangle){ 0.0f, 0.0f, (float)smoke.width, (float)smoke.height }, (Rectangle){ mouseTail[i].position.x, mouseTail[i].position.y, smoke.width*mouseTail[i].size, smoke.height*mouseTail[i].size }, (Vector2){ (float)(smoke.width*mouseTail[i].size/2.0f), (float)(smoke.height*mouseTail[i].size/2.0f) }, mouseTail[i].rotation, Fade(mouseTail[i].color, mouseTail[i].alpha)); } - + EndBlendMode(); - + DrawText("PRESS SPACE to CHANGE BLENDING MODE", 180, 20, 20, BLACK); - + if (blending == BLEND_ALPHA) DrawText("ALPHA BLENDING", 290, screenHeight - 40, 20, BLACK); else DrawText("ADDITIVE BLENDING", 280, screenHeight - 40, 20, RAYWHITE); - + EndDrawing(); //---------------------------------------------------------------------------------- } @@ -127,7 +127,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- UnloadTexture(smoke); - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/src/textures/textures_raw_data.c b/examples/src/textures/textures_raw_data.c index 481bd66..17604bd 100644 --- a/examples/src/textures/textures_raw_data.c +++ b/examples/src/textures/textures_raw_data.c @@ -13,31 +13,31 @@ #include "raylib.h" -#include // Required for malloc() and free() +#include // Required for: malloc() and free() -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [textures] example - texture from raw data"); // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - + // Load RAW image data (512x512, 32bit RGBA, no file header) Image fudesumiRaw = LoadImageRaw("resources/fudesumi.raw", 384, 512, UNCOMPRESSED_R8G8B8A8, 0); - Texture2D fudesumi = LoadTextureFromImage(fudesumiRaw); // Upload CPU (RAM) image to GPU (VRAM) - UnloadImage(fudesumiRaw); // Unload CPU (RAM) image data - + Texture2D fudesumi = LoadTextureFromImage(fudesumiRaw); // Upload CPU (RAM) image to GPU (VRAM) + UnloadImage(fudesumiRaw); // Unload CPU (RAM) image data + // Generate a checked texture by code (1024x1024 pixels) int width = 960; int height = 480; - + // Dynamic memory allocation to store pixels data (Color type) Color *pixels = (Color *)malloc(width*height*sizeof(Color)); - + for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) @@ -46,14 +46,14 @@ int main() else pixels[y*width + x] = GOLD; } } - + // Load pixels data into an image structure and create texture Image checkedIm = LoadImageEx(pixels, width, height); Texture2D checked = LoadTextureFromImage(checkedIm); - UnloadImage(checkedIm); // Unload CPU (RAM) image data - + UnloadImage(checkedIm); // Unload CPU (RAM) image data + // Dynamic memory must be freed after using it - free(pixels); // Unload CPU (RAM) pixels data + free(pixels); // Unload CPU (RAM) pixels data //--------------------------------------------------------------------------------------- // Main game loop @@ -76,7 +76,7 @@ int main() DrawText("CHECKED TEXTURE ", 84, 85, 30, BROWN); DrawText("GENERATED by CODE", 72, 148, 30, BROWN); DrawText("and RAW IMAGE LOADING", 46, 210, 30, BROWN); - + DrawText("(c) Fudesumi sprite by Eiden Marsal", 310, screenHeight - 20, 10, BROWN); EndDrawing(); diff --git a/examples/src/textures/textures_rectangle.c b/examples/src/textures/textures_rectangle.c index e124774..8be647a 100644 --- a/examples/src/textures/textures_rectangle.c +++ b/examples/src/textures/textures_rectangle.c @@ -14,12 +14,12 @@ #define MAX_FRAME_SPEED 15 #define MIN_FRAME_SPEED 1 -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [texture] example - texture rectangle"); @@ -29,10 +29,10 @@ int main() Vector2 position = { 350.0f, 280.0f }; Rectangle frameRec = { 0.0f, 0.0f, (float)scarfy.width/6, (float)scarfy.height }; int currentFrame = 0; - + int framesCounter = 0; - int framesSpeed = 8; // Number of spritesheet frames shown by second - + int framesSpeed = 8; // Number of spritesheet frames shown by second + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- @@ -42,20 +42,20 @@ int main() // Update //---------------------------------------------------------------------------------- framesCounter++; - + if (framesCounter >= (60/framesSpeed)) { framesCounter = 0; currentFrame++; - + if (currentFrame > 5) currentFrame = 0; - + frameRec.x = (float)currentFrame*(float)scarfy.width/6; } - + if (IsKeyPressed(KEY_RIGHT)) framesSpeed++; else if (IsKeyPressed(KEY_LEFT)) framesSpeed--; - + if (framesSpeed > MAX_FRAME_SPEED) framesSpeed = MAX_FRAME_SPEED; else if (framesSpeed < MIN_FRAME_SPEED) framesSpeed = MIN_FRAME_SPEED; //---------------------------------------------------------------------------------- @@ -69,17 +69,17 @@ int main() DrawTexture(scarfy, 15, 40, WHITE); DrawRectangleLines(15, 40, scarfy.width, scarfy.height, LIME); DrawRectangleLines(15 + frameRec.x, 40 + frameRec.y, frameRec.width, frameRec.height, RED); - + DrawText("FRAME SPEED: ", 165, 210, 10, DARKGRAY); DrawText(FormatText("%02i FPS", framesSpeed), 575, 210, 10, DARKGRAY); DrawText("PRESS RIGHT/LEFT KEYS to CHANGE SPEED!", 290, 240, 10, DARKGRAY); - + for (int i = 0; i < MAX_FRAME_SPEED; i++) { if (i < framesSpeed) DrawRectangle(250 + 21*i, 205, 20, 20, RED); DrawRectangleLines(250 + 21*i, 205, 20, 20, MAROON); } - + DrawTextureRec(scarfy, frameRec, position, WHITE); // Draw part of the texture DrawText("(c) Scarfy sprite by Eiden Marsal", screenWidth - 200, screenHeight - 20, 10, GRAY); diff --git a/examples/src/textures/textures_sprite_button.c b/examples/src/textures/textures_sprite_button.c index bbd5732..a5b2d8d 100644 --- a/examples/src/textures/textures_sprite_button.c +++ b/examples/src/textures/textures_sprite_button.c @@ -13,35 +13,35 @@ #define NUM_FRAMES 3 // Number of frames (rectangles) for the button sprite texture -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- const int screenWidth = 800; const int screenHeight = 450; - + InitWindow(screenWidth, screenHeight, "raylib [textures] example - sprite button"); InitAudioDevice(); // Initialize audio device - + Sound fxButton = LoadSound("resources/buttonfx.wav"); // Load button sound Texture2D button = LoadTexture("resources/button.png"); // Load button texture - + // Define frame rectangle for drawing int frameHeight = button.height/NUM_FRAMES; Rectangle sourceRec = { 0, 0, button.width, frameHeight }; - + // Define button bounds on screen Rectangle btnBounds = { screenWidth/2 - button.width/2, screenHeight/2 - button.height/NUM_FRAMES/2, button.width, frameHeight }; - + int btnState = 0; // Button state: 0-NORMAL, 1-MOUSE_HOVER, 2-PRESSED bool btnAction = false; // Button action should be activated - + Vector2 mousePoint = { 0.0f, 0.0f }; - + SetTargetFPS(60); //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -49,7 +49,7 @@ int main() //---------------------------------------------------------------------------------- mousePoint = GetMousePosition(); btnAction = false; - + // Check button state if (CheckCollisionPointRec(mousePoint, btnBounds)) { @@ -59,26 +59,26 @@ int main() if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) btnAction = true; } else btnState = 0; - + if (btnAction) { PlaySound(fxButton); - + // TODO: Any desired action } - + // Calculate button frame rectangle to draw depending on button state sourceRec.y = btnState*frameHeight; //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); DrawTextureRec(button, sourceRec, (Vector2){ btnBounds.x, btnBounds.y }, WHITE); // Draw button frame - + EndDrawing(); //---------------------------------------------------------------------------------- } @@ -89,9 +89,9 @@ int main() UnloadSound(fxButton); // Unload sound CloseAudioDevice(); // Close audio device - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- - + return 0; } \ No newline at end of file diff --git a/examples/src/textures/textures_sprite_explosion.c b/examples/src/textures/textures_sprite_explosion.c index aa10a76..58a8f6f 100644 --- a/examples/src/textures/textures_sprite_explosion.c +++ b/examples/src/textures/textures_sprite_explosion.c @@ -11,97 +11,97 @@ #include "raylib.h" -#define NUM_FRAMES 8 -#define NUM_LINES 6 +#define NUM_FRAMES 8 +#define NUM_LINES 6 -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- const int screenWidth = 800; const int screenHeight = 450; - + InitWindow(screenWidth, screenHeight, "raylib [textures] example - sprite explosion"); - + InitAudioDevice(); - + // Load explosion sound Sound fxBoom = LoadSound("resources/boom.wav"); - + // Load explosion texture - Texture2D explosion = LoadTexture("resources/explosion2.png"); + Texture2D explosion = LoadTexture("resources/explosion.png"); // Init variables for animation int frameWidth = explosion.width/NUM_FRAMES; // Sprite one frame rectangle width int frameHeight = explosion.height/NUM_LINES; // Sprite one frame rectangle height int currentFrame = 0; int currentLine = 0; - + Rectangle frameRec = { 0, 0, frameWidth, frameHeight }; Vector2 position = { 0, 0 }; - + bool active = false; int framesCounter = 0; - + SetTargetFPS(120); //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- - + // Check for mouse button pressed and activate explosion (if not active) if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && !active) { position = GetMousePosition(); active = true; - + position.x -= frameWidth/2; position.y -= frameHeight/2; - + PlaySound(fxBoom); } - + // Compute explosion animation frames if (active) { framesCounter++; - + if (framesCounter > 2) { currentFrame++; - + if (currentFrame >= NUM_FRAMES) { currentFrame = 0; currentLine++; - + if (currentLine >= NUM_LINES) { currentLine = 0; active = false; } } - + framesCounter = 0; } } - + frameRec.x = frameWidth*currentFrame; frameRec.y = frameHeight*currentLine; //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + // Draw explosion required frame rectangle if (active) DrawTextureRec(explosion, frameRec, position, WHITE); - + EndDrawing(); //---------------------------------------------------------------------------------- } @@ -109,12 +109,12 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- UnloadTexture(explosion); // Unload texture - UnloadSound(fxBoom); // Unload sound - + UnloadSound(fxBoom); // Unload sound + CloseAudioDevice(); - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- - + return 0; } \ No newline at end of file diff --git a/examples/src/textures/textures_srcrec_dstrec.c b/examples/src/textures/textures_srcrec_dstrec.c index 298a0c6..e86b729 100644 --- a/examples/src/textures/textures_srcrec_dstrec.c +++ b/examples/src/textures/textures_srcrec_dstrec.c @@ -11,32 +11,33 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [textures] examples - texture source and destination rectangles"); // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) + Texture2D scarfy = LoadTexture("resources/scarfy.png"); // Texture loading int frameWidth = scarfy.width/6; int frameHeight = scarfy.height; - - // NOTE: Source rectangle (part of the texture to use for drawing) + + // Source rectangle (part of the texture to use for drawing) Rectangle sourceRec = { 0.0f, 0.0f, frameWidth, frameHeight }; - // NOTE: Destination rectangle (screen rectangle where drawing part of texture) + // Destination rectangle (screen rectangle where drawing part of texture) Rectangle destRec = { screenWidth/2, screenHeight/2, frameWidth*2, frameHeight*2 }; - // NOTE: Origin of the texture (rotation/scale point), it's relative to destination rectangle size + // Origin of the texture (rotation/scale point), it's relative to destination rectangle size Vector2 origin = { frameWidth, frameHeight }; - + int rotation = 0; - + SetTargetFPS(60); //-------------------------------------------------------------------------------------- @@ -63,7 +64,7 @@ int main() DrawLine((int)destRec.x, 0, (int)destRec.x, screenHeight, GRAY); DrawLine(0, (int)destRec.y, screenWidth, (int)destRec.y, GRAY); - + DrawText("(c) Scarfy sprite by Eiden Marsal", screenWidth - 200, screenHeight - 20, 10, GRAY); EndDrawing(); diff --git a/examples/src/textures/textures_to_image.c b/examples/src/textures/textures_to_image.c index 37c3b5a..c0989ba 100644 --- a/examples/src/textures/textures_to_image.c +++ b/examples/src/textures/textures_to_image.c @@ -1,6 +1,6 @@ /******************************************************************************************* * -* raylib [textures] example - Retrieve image data from texture: GetTextureData() +* raylib [textures] example - Retrieve image data from texture: GetTextureData() * * NOTE: Images are loaded in CPU memory (RAM); textures are loaded in GPU memory (VRAM) * @@ -13,12 +13,12 @@ #include "raylib.h" -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [textures] example - texture to image"); @@ -27,10 +27,10 @@ int main() Image image = LoadImage("resources/raylib_logo.png"); // Load image data into CPU memory (RAM) Texture2D texture = LoadTextureFromImage(image); // Image converted to texture, GPU memory (RAM -> VRAM) UnloadImage(image); // Unload image data from CPU memory (RAM) - + image = GetTextureData(texture); // Retrieve image data from GPU memory (VRAM -> RAM) UnloadTexture(texture); // Unload texture from GPU memory (VRAM) - + texture = LoadTextureFromImage(image); // Recreate texture from retrieved image data (RAM -> VRAM) UnloadImage(image); // Unload retrieved image data from CPU memory (RAM) //--------------------------------------------------------------------------------------- diff --git a/examples/web/Makefile b/examples/web/Makefile index fdfd8e7..ceca20c 100644 --- a/examples/web/Makefile +++ b/examples/web/Makefile @@ -440,7 +440,6 @@ EXAMPLES = \ models/models_skybox \ models/models_material_pbr \ models/models_rlgl_solar_system \ - shaders/shaders_model_shader \ shaders/shaders_shapes_textures \ shaders/shaders_custom_uniform \ @@ -493,7 +492,8 @@ core/core_input_gamepad: core/core_input_gamepad.c --preload-file core/resources/ps3.png@resources/ps3.png \ --preload-file core/resources/xbox.png@resources/xbox.png -core/core_input_multitouch \ +core/core_input_multitouch: core/core_input_multitouch.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) # compile [core] example - 2d camera core/core_2d_camera: core/core_2d_camera.c @@ -519,8 +519,11 @@ core/core_3d_picking: core/core_3d_picking.c core/core_world_screen: core/core_world_screen.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -core/core_custom_logging \ -core/core_window_letterbox \ +core/core_custom_logging: core/core_custom_logging.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + +core/core_window_letterbox: core/core_window_letterbox.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) # compile [core] example - drop files # NOTE: File drop not supported on PLATFORM_ANDROID and PLATFORM_RPI (native) @@ -537,15 +540,18 @@ core/core_storage_values: core/core_storage_values.c # compile [core] example - vr simulator core/core_vr_simulator: core/core_vr_simulator.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file shaders/resources/shaders/glsl100/distortion.fs@resources/shaders/glsl100/distortion.fs -core/core_loading_thread \ +core/core_loading_thread: core/core_loading_thread.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -std=c11 # compile [shapes] example - basic shapes usage (rectangle, circle, ...) shapes/shapes_basic_shapes: shapes/shapes_basic_shapes.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -shapes/shapes_bouncing_ball \ +shapes/shapes_bouncing_ball: shapes/shapes_bouncing_ball.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) # compile [shapes] example - raylib color palette shapes/shapes_colors_palette: shapes/shapes_colors_palette.c @@ -559,20 +565,36 @@ shapes/shapes_logo_raylib: shapes/shapes_logo_raylib.c shapes/shapes_logo_raylib_anim: shapes/shapes_logo_raylib_anim.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -shapes/shapes_rectangle_scaling \ +shapes/shapes_rectangle_scaling: shapes/shapes_rectangle_scaling.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) # compile [shapes] example - lines bezier shapes/shapes_lines_bezier: shapes/shapes_lines_bezier.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -shapes/shapes_collision_area \ -shapes/shapes_following_eyes \ -shapes/shapes_easings_ball_anim \ -shapes/shapes_easings_box_anim \ -shapes/shapes_easings_rectangle_array \ -shapes/shapes_draw_ring \ -shapes/shapes_draw_circle_sector \ -shapes/shapes_draw_rectangle_rounded \ +shapes/shapes_collision_area: shapes/shapes_collision_area.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + +shapes/shapes_following_eyes: shapes/shapes_following_eyes.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + +shapes/shapes_easings_ball_anim: shapes/shapes_easings_ball_anim.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + +shapes/shapes_easings_box_anim: shapes/shapes_easings_box_anim.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + +shapes/shapes_easings_rectangle_array: shapes/shapes_easings_rectangle_array.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + +shapes/shapes_draw_ring: shapes/shapes_draw_ring.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + +shapes/shapes_draw_circle_sector: shapes/shapes_draw_circle_sector.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + +shapes/shapes_draw_rectangle_rounded: shapes/shapes_draw_rectangle_rounded.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) # compile [textures] example - raylib logo texture loading textures/textures_logo_raylib: textures/textures_logo_raylib.c @@ -609,7 +631,10 @@ textures/textures_image_processing: textures/textures_image_processing.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ --preload-file textures/resources/parrots.png@resources/parrots.png -textures/textures_image_text \ +textures/textures_image_text: textures/textures_image_text.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -s TOTAL_MEMORY=67108864 \ + --preload-file textures/resources/parrots.png@resources/parrots.png \ + --preload-file textures/resources/KAISG.ttf@resources/KAISG.ttf # compile [textures] example - texture to image textures/textures_to_image: textures/textures_to_image.c @@ -626,11 +651,29 @@ textures/textures_particles_blending: textures/textures_particles_blending.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ --preload-file textures/resources/smoke.png@resources/smoke.png -textures/textures_npatch_drawing \ -textures/textures_background_scrolling \ -textures/textures_sprite_button \ -textures/textures_sprite_explosion \ -textures/textures_bunnymark \ +textures/textures_npatch_drawing: textures/textures_npatch_drawing.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file textures/resources/ninepatch_button.png@resources/ninepatch_button.png + +textures/textures_background_scrolling: textures/textures_background_scrolling.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file textures/resources/cyberpunk_street_background.png@resources/cyberpunk_street_background.png \ + --preload-file textures/resources/cyberpunk_street_midground.png@resources/cyberpunk_street_midground.png \ + --preload-file textures/resources/cyberpunk_street_foreground.png@resources/cyberpunk_street_foreground.png \ + +textures/textures_sprite_button: textures/textures_sprite_button.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file textures/resources/button.png@resources/button.png \ + --preload-file textures/resources/buttonfx.wav@resources/buttonfx.wav + +textures/textures_sprite_explosion: textures/textures_sprite_explosion.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file textures/resources/explosion.png@resources/explosion.png \ + --preload-file textures/resources/boom.wav@resources/boom.wav + +textures/textures_bunnymark: textures/textures_bunnymark.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file textures/resources/wabbit_alpha.png@resources/wabbit_alpha.png # compile [text] example - raylib fonts text/text_raylib_fonts: text/text_raylib_fonts.c @@ -663,7 +706,10 @@ text/text_bmfont_ttf: text/text_bmfont_ttf.c --preload-file text/resources/bmfont.png@resources/bmfont.png \ --preload-file text/resources/pixantiqua.ttf@resources/pixantiqua.ttf -text/text_font_sdf \ +text/text_font_sdf: text/text_font_sdf.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -s TOTAL_MEMORY=67108864 \ + --preload-file text/resources/AnonymousPro-Bold.ttf@resources/AnonymousPro-Bold.ttf \ + --preload-file shaders/resources/shaders/glsl100/sdf.fs@resources/shaders/glsl100/sdf.fs # compile [text] example - text formatting text/text_format_text: text/text_format_text.c @@ -677,31 +723,64 @@ text/text_writing_anim: text/text_writing_anim.c text/text_input_box: text/text_input_box.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -text/text_rectangle_bounds \ -text/text_unicode \ +text/text_rectangle_bounds: text/text_rectangle_bounds.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + +text/text_unicode: text/text_unicode.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -s TOTAL_MEMORY=67108864 \ + --preload-file text/resources/dejavu.fnt@resources/dejavu.fnt \ + --preload-file text/resources/dejavu.png@resources/dejavu.png \ + --preload-file text/resources/notoCJK.fnt@resources/notoCJK.fnt \ + --preload-file text/resources/notoCJK.png@resources/notoCJK.png \ + --preload-file text/resources/emoji.fnt@resources/emoji.fnt \ + --preload-file text/resources/emoji.png@resources/emoji.png # compile [models] example - basic geometric 3d shapes models/models_geometric_shapes: models/models_geometric_shapes.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + +models/models_orthographic_projection: models/models_orthographic_projection.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) # compile [models] example - box collisions models/models_box_collisions: models/models_box_collisions.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -# compile [models] example - basic window -models/models_planes: models/models_planes.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) - # compile [models] example - billboard usage models/models_billboard: models/models_billboard.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ --preload-file models/resources/billboard.png@resources/billboard.png - + # compile [models] example - OBJ model loading models/models_obj_loading: models/models_obj_loading.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -s TOTAL_MEMORY=67108864 \ - --preload-file models/resources/model/dwarf.obj@resources/model/dwarf.obj \ - --preload-file models/resources/model/dwarf_diffuse.png@resources/model/dwarf_diffuse.png + --preload-file models/resources/models/castle.obj@resources/models/castle.obj \ + --preload-file models/resources/models/castle_diffuse.png@resources/model/castle_diffuse.png + +models/models_obj_viewer: models/models_obj_viewer.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -s FORCE_FILESYSTEM=1 \ + --preload-file models/resources/models/turret.obj@resources/models/turret.obj \ + --preload-file models/resources/models/turret_diffuse.png@resources/model/turret_diffuse.png + +# compile [models] example - models yaw pitch roll +models/models_yaw_pitch_roll: models/models_yaw_pitch_roll.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -s TOTAL_MEMORY=67108864 \ + --preload-file models/resources/plane.obj@resources/plane.obj \ + --preload-file models/resources/plane_diffuse.png@resources/plane_diffuse.png \ + --preload-file models/resources/plane.png@resources/plane.png \ + --preload-file models/resources/pitch.png@resources/pitch.png \ + --preload-file models/resources/background.png@resources/background.png \ + --preload-file models/resources/angle_gauge.png@resources/angle_gauge.png + +# compile [models] example - models mesh generation +models/models_mesh_generation: models/models_mesh_generation.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + +# compile [models] example - model mesh picking +models/models_mesh_picking: models/models_mesh_picking.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file models/resources/tower.obj@resources/tower.obj \ + --preload-file models/resources/tower.png@resources/tower.png # compile [models] example - heightmap loading models/models_heightmap: models/models_heightmap.c @@ -714,48 +793,42 @@ models/models_cubicmap: models/models_cubicmap.c --preload-file models/resources/cubicmap.png@resources/cubicmap.png \ --preload-file models/resources/cubicmap_atlas.png@resources/cubicmap_atlas.png -# compile [models] example - model mesh picking -models/models_mesh_picking: models/models_mesh_picking.c +models/models_first_person_maze: models/models_first_person_maze.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ - --preload-file models/resources/tower.obj@resources/tower.obj \ - --preload-file models/resources/tower.png@resources/tower.png + --preload-file models/resources/cubicmap.png@resources/cubicmap.png \ + --preload-file models/resources/cubicmap_atlas.png@resources/cubicmap_atlas.png -# compile [models] example - models mesh generation -models/models_mesh_generation: models/models_mesh_generation.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) +models/models_animation: models/models_animation.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -s TOTAL_MEMORY=67108864 \ + --preload-file models/resources/guy/guy.iqm@resources/guy/guy.iqm \ + --preload-file models/resources/guy/guytex.png@resources/guy/guytex.png \ + --preload-file models/resources/guy/guyanim.iqm@resources/guy/guyanim.iqm -# compile [models] example - models material pbr -models/models_material_pbr: models/models_material_pbr.c +# compile [models] example - models skybox +models/models_skybox: models/models_skybox.c ifeq ($(PLATFORM), $(filter $(PLATFORM),PLATFORM_DESKTOP)) $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + --preload-file models/resources/dresden_square.hdr@resources/dresden_square.hdr else - @echo models_material_pbr: Example not supported on PLATFORM_ANDROID, PLATFORM_WEB or PLATFORM_RPI + @echo models_skybox: Example not supported on PLATFORM_ANDROID, PLATFORM_WEB or PLATFORM_RPI endif -# compile [models] example - models skybox -models/models_skybox: models/models_skybox.c +# compile [models] example - models material pbr +models/models_material_pbr: models/models_material_pbr.c ifeq ($(PLATFORM), $(filter $(PLATFORM),PLATFORM_DESKTOP)) $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) else - @echo models_skybox: Example not supported on PLATFORM_ANDROID, PLATFORM_WEB or PLATFORM_RPI + @echo models_material_pbr: Example not supported on PLATFORM_ANDROID, PLATFORM_WEB or PLATFORM_RPI endif -# compile [models] example - models yaw pitch roll -models/models_yaw_pitch_roll: models/models_yaw_pitch_roll.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -s TOTAL_MEMORY=67108864 \ - --preload-file models/resources/plane.obj@resources/plane.obj \ - --preload-file models/resources/plane_diffuse.png@resources/plane_diffuse.png \ - --preload-file models/resources/plane.png@resources/plane.png \ - --preload-file models/resources/pitch.png@resources/pitch.png \ - --preload-file models/resources/background.png@resources/background.png \ - --preload-file models/resources/angle_gauge.png@resources/angle_gauge.png \ - +models/models_rlgl_solar_system: models/models_rlgl_solar_system.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + # compile [shaders] example - model shader shaders/shaders_model_shader: shaders/shaders_model_shader.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -s TOTAL_MEMORY=67108864 \ - --preload-file shaders/resources/model/dwarf.obj@resources/model/dwarf.obj \ - --preload-file shaders/resources/model/dwarf_diffuse.png@resources/model/dwarf_diffuse.png \ - --preload-file shaders/resources/shaders/glsl100/base.vs@resources/shaders/glsl100/base.vs \ + --preload-file shaders/resources/models/watermill.obj@resources/models/watermill.obj \ + --preload-file shaders/resources/models/watermill_diffuse.png@resources/models/watermill_diffuse.png \ --preload-file shaders/resources/shaders/glsl100/grayscale.fs@resources/shaders/glsl100/grayscale.fs # compile [shaders] example - shapes texture shader @@ -768,18 +841,42 @@ shaders/shaders_shapes_textures: shaders/shaders_shapes_textures.c # compile [shaders] example - custom uniform in shader shaders/shaders_custom_uniform: shaders/shaders_custom_uniform.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -s TOTAL_MEMORY=67108864 \ - --preload-file shaders/resources/model/dwarf.obj@resources/model/dwarf.obj \ - --preload-file shaders/resources/model/dwarf_diffuse.png@resources/model/dwarf_diffuse.png \ - --preload-file shaders/resources/shaders/glsl100/base.vs@resources/shaders/glsl100/base.vs \ + --preload-file shaders/resources/models/barracks.obj@resources/models/barracks.obj \ + --preload-file shaders/resources/models/barracks_diffuse.png@resources/models/barracks_diffuse.png \ --preload-file shaders/resources/shaders/glsl100/swirl.fs@resources/shaders/glsl100/swirl.fs # compile [shaders] example - postprocessing shader shaders/shaders_postprocessing: shaders/shaders_postprocessing.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) -s TOTAL_MEMORY=67108864 \ - --preload-file shaders/resources/model/dwarf.obj@resources/model/dwarf.obj \ - --preload-file shaders/resources/model/dwarf_diffuse.png@resources/model/dwarf_diffuse.png \ + --preload-file shaders/resources/models/church.obj@resources/models/church.obj \ + --preload-file shaders/resources/models/church_diffuse.png@resources/models/church_diffuse.png \ --preload-file shaders/resources/shaders/glsl100@resources/shaders/glsl100 +shaders/shaders_palette_switch: shaders/shaders_palette_switch.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file shaders/resources/shaders/glsl100/palette_switch.fs@resources/shaders/glsl100/palette_switch.fs + +shaders/shaders_raymarching: shaders/shaders_raymarching.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file shaders/resources/shaders/glsl100/raymarching.fs@resources/shaders/glsl100/raymarching.fs + +shaders/shaders_texture_drawing: shaders/shaders_texture_drawing.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file shaders/resources/shaders/glsl100/cubes_panning.fs@resources/shaders/glsl100/cubes_panning.fs + +shaders/shaders_texture_waves: shaders/shaders_texture_waves.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file shaders/resources/space.png@resources/space.png \ + --preload-file shaders/resources/shaders/glsl100/wave.fs@resources/shaders/glsl100/wave.fs + +shaders/shaders_julia_set: shaders/shaders_julia_set.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file shaders/resources/shaders/glsl100/julia_set.fs@resources/shaders/glsl100/julia_set.fs + +shaders/shaders_eratosthenes: shaders/shaders_eratosthenes.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file shaders/resources/shaders/glsl100/erastosthenes.fs@resources/shaders/glsl100/erastosthenes.fs + # compile [audio] example - sound loading and playing (WAV and OGG) audio/audio_sound_loading: audio/audio_sound_loading.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ diff --git a/examples/web/audio/audio_module_playing.c b/examples/web/audio/audio_module_playing.c index 5d607b8..92af3ac 100644 --- a/examples/web/audio/audio_module_playing.c +++ b/examples/web/audio/audio_module_playing.c @@ -33,8 +33,8 @@ typedef struct { //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; Color colors[14] = { ORANGE, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK, YELLOW, GREEN, SKYBLUE, PURPLE, BEIGE }; @@ -42,7 +42,7 @@ Color colors[14] = { ORANGE, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PI // Creates ome circles for visual effect CircleWave circles[MAX_CIRCLES]; -Music xm; +Music xm = { 0 }; float timePlayed = 0.0f; static bool pause = false; @@ -53,7 +53,7 @@ static bool pause = false; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -62,7 +62,7 @@ int main(void) InitWindow(screenWidth, screenHeight, "raylib [audio] example - module playing (streaming)"); InitAudioDevice(); // Initialize audio device - + for (int i = MAX_CIRCLES - 1; i >= 0; i--) { circles[i].alpha = 0.0f; @@ -74,15 +74,15 @@ int main(void) } xm = LoadMusicStream("resources/mini1111.xm"); - + PlayMusicStream(xm); // Play module stream - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -93,7 +93,7 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- UnloadMusicStream(xm); // Unload music stream buffers from RAM - + CloseAudioDevice(); // Close audio device (music streaming is automatically stopped) CloseWindow(); // Close window and OpenGL context @@ -110,23 +110,23 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateMusicStream(xm); // Update music buffer with new stream data - + // Restart music playing (stop and play) - if (IsKeyPressed(KEY_SPACE)) + if (IsKeyPressed(KEY_SPACE)) { StopMusicStream(xm); PlayMusicStream(xm); } - - // Pause/Resume music playing + + // Pause/Resume music playing if (IsKeyPressed(KEY_P)) { pause = !pause; - + if (pause) PauseMusicStream(xm); else ResumeMusicStream(xm); } - + // Get timePlayed scaled to bar dimensions timePlayed = GetMusicTimePlayed(xm)/GetMusicTimeLength(xm)*(screenWidth - 40); @@ -135,9 +135,9 @@ void UpdateDrawFrame(void) { circles[i].alpha += circles[i].speed; circles[i].radius += circles[i].speed*10.0f; - + if (circles[i].alpha > 1.0f) circles[i].speed *= -1; - + if (circles[i].alpha <= 0.0f) { circles[i].alpha = 0.0f; @@ -155,12 +155,12 @@ void UpdateDrawFrame(void) BeginDrawing(); ClearBackground(RAYWHITE); - + for (int i = MAX_CIRCLES - 1; i >= 0; i--) { DrawCircleV(circles[i].position, circles[i].radius, Fade(circles[i].color, circles[i].alpha)); } - + // Draw time bar DrawRectangle(20, screenHeight - 20 - 12, screenWidth - 40, 12, LIGHTGRAY); DrawRectangle(20, screenHeight - 20 - 12, (int)timePlayed, 12, MAROON); diff --git a/examples/web/audio/audio_module_playing.data b/examples/web/audio/audio_module_playing.data new file mode 100644 index 0000000..a185c1a Binary files /dev/null and b/examples/web/audio/audio_module_playing.data differ diff --git a/examples/web/audio/audio_module_playing.html b/examples/web/audio/audio_module_playing.html new file mode 100644 index 0000000..be823c1 --- /dev/null +++ b/examples/web/audio/audio_module_playing.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/audio/audio_module_playing.js b/examples/web/audio/audio_module_playing.js new file mode 100644 index 0000000..fd1a79a --- /dev/null +++ b/examples/web/audio/audio_module_playing.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="audio/audio_module_playing.data";var REMOTE_PACKAGE_BASE="audio_module_playing.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5392224,DYNAMICTOP_PTR=149312;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="audio_module_playing.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":430,"maximum":430,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};var ASM_CONSTS=[function($0){return navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined},function($0){try{var temp=new(window.AudioContext||window.webkitAudioContext);var sampleRate=temp.sampleRate;temp.close();return sampleRate}catch(e){return 0}},function($0,$1){var device=miniaudio.get_device_by_index($0);if(device.scriptNode!==undefined){device.scriptNode.onaudioprocess=function(e){};device.scriptNode.disconnect();device.scriptNode=undefined}if(device.streamNode!==undefined){device.streamNode.disconnect();device.streamNode=undefined}device.webaudio.close();device.webaudio=undefined;if(device.intermediaryBuffer!==undefined){Module._free(device.intermediaryBuffer);device.intermediaryBuffer=undefined;device.intermediaryBufferView=undefined;device.intermediaryBufferSizeInBytes=undefined}miniaudio.untrack_device_by_index($0)},function($0,$1,$2,$3,$4){var channels=$0;var sampleRate=$1;var bufferSize=$2;var isCapture=$3;var pDevice=$4;if(typeof miniaudio==="undefined"){return-1}var device={};device.webaudio=new(window.AudioContext||window.webkitAudioContext)({sampleRate:sampleRate});device.webaudio.suspend();device.intermediaryBufferSizeInBytes=channels*bufferSize*4;device.intermediaryBuffer=Module._malloc(device.intermediaryBufferSizeInBytes);device.intermediaryBufferView=new Float32Array(Module.HEAPF32.buffer,device.intermediaryBuffer,device.intermediaryBufferSizeInBytes);device.scriptNode=device.webaudio.createScriptProcessor(bufferSize,channels,channels);if(isCapture){device.scriptNode.onaudioprocess=function(e){if(device.intermediaryBuffer===undefined){return}for(var iChannel=0;iChanneldevice.intermediaryBufferSizeInBytes/channels/4){framesToProcess=device.intermediaryBufferSizeInBytes/channels/4}if(sendSilence){device.intermediaryBufferView.fill(0)}else{for(var iFrame=0;iFramedevice.intermediaryBufferSizeInBytes/channels/4){framesToProcess=device.intermediaryBufferSizeInBytes/channels/4}ccall("ma_device_process_pcm_frames_playback__webaudio","undefined",["number","number","number"],[pDevice,framesToProcess,device.intermediaryBuffer]);if(outputSilence){for(var iChannel=0;iChannel0){if(miniaudio.devices[miniaudio.devices.length-1]==null){miniaudio.devices.pop()}else{break}}};miniaudio.untrack_device=function(device){for(var iDevice=0;iDevice>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _pthread_attr_destroy(attr){return 0}function _pthread_attr_init(attr){return 0}function _pthread_cond_destroy(){return 0}function _pthread_cond_init(){return 0}function _pthread_cond_signal(){return 0}function _pthread_cond_wait(){return 0}function _pthread_create(){return 11}function _pthread_join(){}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"uc":___lock,"A":___setErrNo,"$a":___syscall140,"Qa":___syscall145,"z":___syscall146,"m":___syscall221,"la":___syscall5,"y":___syscall54,"S":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"e":_emscripten_asm_const_ii,"Cd":_emscripten_asm_const_iii,"rd":_emscripten_asm_const_iiiiii,"R":_emscripten_exit_pointerlock,"Yc":_emscripten_get_gamepad_status,"Nc":_emscripten_get_heap_size,"Dc":_emscripten_get_num_gamepads,"N":_emscripten_get_pointerlock_status,"qc":_emscripten_glActiveTexture,"kc":_emscripten_glAttachShader,"ec":_emscripten_glBeginQueryEXT,"Zb":_emscripten_glBindAttribLocation,"Rb":_emscripten_glBindBuffer,"Hb":_emscripten_glBindFramebuffer,"yb":_emscripten_glBindRenderbuffer,"pb":_emscripten_glBindTexture,"kb":_emscripten_glBindVertexArrayOES,"jb":_emscripten_glBlendColor,"ib":_emscripten_glBlendEquation,"hb":_emscripten_glBlendEquationSeparate,"gb":_emscripten_glBlendFunc,"fb":_emscripten_glBlendFuncSeparate,"eb":_emscripten_glBufferData,"db":_emscripten_glBufferSubData,"cb":_emscripten_glCheckFramebufferStatus,"bb":_emscripten_glClear,"ab":_emscripten_glClearColor,"_a":_emscripten_glClearDepthf,"Za":_emscripten_glClearStencil,"Ya":_emscripten_glColorMask,"Xa":_emscripten_glCompileShader,"Wa":_emscripten_glCompressedTexImage2D,"Va":_emscripten_glCompressedTexSubImage2D,"Ua":_emscripten_glCopyTexImage2D,"Ta":_emscripten_glCopyTexSubImage2D,"Sa":_emscripten_glCreateProgram,"Ra":_emscripten_glCreateShader,"Pa":_emscripten_glCullFace,"Oa":_emscripten_glDeleteBuffers,"Na":_emscripten_glDeleteFramebuffers,"Ma":_emscripten_glDeleteProgram,"La":_emscripten_glDeleteQueriesEXT,"Ka":_emscripten_glDeleteRenderbuffers,"Ja":_emscripten_glDeleteShader,"Ia":_emscripten_glDeleteTextures,"Ha":_emscripten_glDeleteVertexArraysOES,"Ga":_emscripten_glDepthFunc,"Fa":_emscripten_glDepthMask,"Ea":_emscripten_glDepthRangef,"Da":_emscripten_glDetachShader,"Ca":_emscripten_glDisable,"Ba":_emscripten_glDisableVertexAttribArray,"Aa":_emscripten_glDrawArrays,"za":_emscripten_glDrawArraysInstancedANGLE,"ya":_emscripten_glDrawBuffersWEBGL,"xa":_emscripten_glDrawElements,"wa":_emscripten_glDrawElementsInstancedANGLE,"va":_emscripten_glEnable,"ua":_emscripten_glEnableVertexAttribArray,"ta":_emscripten_glEndQueryEXT,"sa":_emscripten_glFinish,"ra":_emscripten_glFlush,"qa":_emscripten_glFramebufferRenderbuffer,"pa":_emscripten_glFramebufferTexture2D,"oa":_emscripten_glFrontFace,"na":_emscripten_glGenBuffers,"ma":_emscripten_glGenFramebuffers,"ka":_emscripten_glGenQueriesEXT,"ja":_emscripten_glGenRenderbuffers,"ia":_emscripten_glGenTextures,"ha":_emscripten_glGenVertexArraysOES,"ga":_emscripten_glGenerateMipmap,"fa":_emscripten_glGetActiveAttrib,"ea":_emscripten_glGetActiveUniform,"da":_emscripten_glGetAttachedShaders,"ca":_emscripten_glGetAttribLocation,"ba":_emscripten_glGetBooleanv,"aa":_emscripten_glGetBufferParameteriv,"$":_emscripten_glGetError,"_":_emscripten_glGetFloatv,"Z":_emscripten_glGetFramebufferAttachmentParameteriv,"Y":_emscripten_glGetIntegerv,"X":_emscripten_glGetProgramInfoLog,"W":_emscripten_glGetProgramiv,"V":_emscripten_glGetQueryObjecti64vEXT,"U":_emscripten_glGetQueryObjectivEXT,"T":_emscripten_glGetQueryObjectui64vEXT,"oe":_emscripten_glGetQueryObjectuivEXT,"ne":_emscripten_glGetQueryivEXT,"me":_emscripten_glGetRenderbufferParameteriv,"le":_emscripten_glGetShaderInfoLog,"ke":_emscripten_glGetShaderPrecisionFormat,"je":_emscripten_glGetShaderSource,"ie":_emscripten_glGetShaderiv,"he":_emscripten_glGetString,"ge":_emscripten_glGetTexParameterfv,"fe":_emscripten_glGetTexParameteriv,"ee":_emscripten_glGetUniformLocation,"de":_emscripten_glGetUniformfv,"ce":_emscripten_glGetUniformiv,"be":_emscripten_glGetVertexAttribPointerv,"ae":_emscripten_glGetVertexAttribfv,"$d":_emscripten_glGetVertexAttribiv,"_d":_emscripten_glHint,"Zd":_emscripten_glIsBuffer,"Yd":_emscripten_glIsEnabled,"Xd":_emscripten_glIsFramebuffer,"Wd":_emscripten_glIsProgram,"Vd":_emscripten_glIsQueryEXT,"Ud":_emscripten_glIsRenderbuffer,"Td":_emscripten_glIsShader,"Sd":_emscripten_glIsTexture,"Rd":_emscripten_glIsVertexArrayOES,"Qd":_emscripten_glLineWidth,"Pd":_emscripten_glLinkProgram,"Od":_emscripten_glPixelStorei,"Nd":_emscripten_glPolygonOffset,"Md":_emscripten_glQueryCounterEXT,"Ld":_emscripten_glReadPixels,"Kd":_emscripten_glReleaseShaderCompiler,"Jd":_emscripten_glRenderbufferStorage,"Id":_emscripten_glSampleCoverage,"Hd":_emscripten_glScissor,"Gd":_emscripten_glShaderBinary,"Fd":_emscripten_glShaderSource,"Ed":_emscripten_glStencilFunc,"Dd":_emscripten_glStencilFuncSeparate,"Bd":_emscripten_glStencilMask,"Ad":_emscripten_glStencilMaskSeparate,"zd":_emscripten_glStencilOp,"yd":_emscripten_glStencilOpSeparate,"xd":_emscripten_glTexImage2D,"wd":_emscripten_glTexParameterf,"vd":_emscripten_glTexParameterfv,"ud":_emscripten_glTexParameteri,"td":_emscripten_glTexParameteriv,"sd":_emscripten_glTexSubImage2D,"qd":_emscripten_glUniform1f,"pd":_emscripten_glUniform1fv,"od":_emscripten_glUniform1i,"nd":_emscripten_glUniform1iv,"md":_emscripten_glUniform2f,"ld":_emscripten_glUniform2fv,"kd":_emscripten_glUniform2i,"jd":_emscripten_glUniform2iv,"id":_emscripten_glUniform3f,"hd":_emscripten_glUniform3fv,"gd":_emscripten_glUniform3i,"fd":_emscripten_glUniform3iv,"ed":_emscripten_glUniform4f,"dd":_emscripten_glUniform4fv,"cd":_emscripten_glUniform4i,"bd":_emscripten_glUniform4iv,"ad":_emscripten_glUniformMatrix2fv,"$c":_emscripten_glUniformMatrix3fv,"_c":_emscripten_glUniformMatrix4fv,"Zc":_emscripten_glUseProgram,"Xc":_emscripten_glValidateProgram,"Wc":_emscripten_glVertexAttrib1f,"Vc":_emscripten_glVertexAttrib1fv,"Uc":_emscripten_glVertexAttrib2f,"Tc":_emscripten_glVertexAttrib2fv,"Sc":_emscripten_glVertexAttrib3f,"Rc":_emscripten_glVertexAttrib3fv,"Qc":_emscripten_glVertexAttrib4f,"Pc":_emscripten_glVertexAttrib4fv,"Oc":_emscripten_glVertexAttribDivisorANGLE,"Mc":_emscripten_glVertexAttribPointer,"Lc":_emscripten_glViewport,"Kc":_emscripten_memcpy_big,"Jc":_emscripten_request_pointerlock,"Ic":_emscripten_resize_heap,"Q":_emscripten_run_script,"Hc":_emscripten_sample_gamepad_data,"Gc":_emscripten_set_click_callback_on_thread,"Fc":_emscripten_set_fullscreenchange_callback_on_thread,"Ec":_emscripten_set_gamepadconnected_callback_on_thread,"Cc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Bc":_emscripten_set_keypress_callback_on_thread,"Ac":_emscripten_set_main_loop,"zc":_emscripten_set_touchcancel_callback_on_thread,"yc":_emscripten_set_touchend_callback_on_thread,"xc":_emscripten_set_touchmove_callback_on_thread,"wc":_emscripten_set_touchstart_callback_on_thread,"P":_exit,"vc":_glActiveTexture,"O":_glAttachShader,"j":_glBindAttribLocation,"d":_glBindBuffer,"l":_glBindTexture,"tc":_glBlendFunc,"r":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"sc":_glClearDepthf,"rc":_glCompileShader,"pc":_glCompressedTexImage2D,"oc":_glCreateProgram,"nc":_glCreateShader,"mc":_glCullFace,"q":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"lc":_glDepthFunc,"H":_glDetachShader,"jc":_glDisable,"p":_glDisableVertexAttribArray,"ic":_glDrawArrays,"hc":_glDrawElements,"G":_glEnable,"i":_glEnableVertexAttribArray,"gc":_glFrontFace,"o":_glGenBuffers,"fc":_glGenTextures,"u":_glGetAttribLocation,"dc":_glGetFloatv,"cc":_glGetProgramInfoLog,"F":_glGetProgramiv,"bc":_glGetShaderInfoLog,"E":_glGetShaderiv,"k":_glGetString,"t":_glGetUniformLocation,"ac":_glLinkProgram,"$b":_glPixelStorei,"_b":_glReadPixels,"Yb":_glShaderSource,"Xb":_glTexImage2D,"h":_glTexParameteri,"Wb":_glUniform1i,"Vb":_glUniform4f,"Ub":_glUniformMatrix4fv,"s":_glUseProgram,"g":_glVertexAttribPointer,"Tb":_glViewport,"Sb":_glfwCreateWindow,"Qb":_glfwDefaultWindowHints,"Pb":_glfwDestroyWindow,"Ob":_glfwGetCursorPos,"n":_glfwGetTime,"Nb":_glfwInit,"Mb":_glfwMakeContextCurrent,"Lb":_glfwSetCharCallback,"Kb":_glfwSetCursorEnterCallback,"Jb":_glfwSetCursorPosCallback,"Ib":_glfwSetDropCallback,"Gb":_glfwSetErrorCallback,"Fb":_glfwSetKeyCallback,"Eb":_glfwSetMouseButtonCallback,"Db":_glfwSetScrollCallback,"Cb":_glfwSetWindowIconifyCallback,"Bb":_glfwSetWindowShouldClose,"Ab":_glfwSetWindowSizeCallback,"zb":_glfwSwapBuffers,"D":_glfwTerminate,"f":_glfwWindowHint,"xb":_llvm_exp2_f32,"C":_llvm_stackrestore,"B":_llvm_stacksave,"wb":_nanosleep,"vb":_pthread_attr_destroy,"ub":_pthread_attr_init,"tb":_pthread_cond_destroy,"sb":_pthread_cond_init,"rb":_pthread_cond_signal,"qb":_pthread_cond_wait,"ob":_pthread_create,"nb":_pthread_join,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["De"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/audio/audio_module_playing.wasm b/examples/web/audio/audio_module_playing.wasm new file mode 100644 index 0000000..d7b31b0 Binary files /dev/null and b/examples/web/audio/audio_module_playing.wasm differ diff --git a/examples/web/audio/audio_music_stream.c b/examples/web/audio/audio_music_stream.c index 942b110..c0dd085 100644 --- a/examples/web/audio/audio_music_stream.c +++ b/examples/web/audio/audio_music_stream.c @@ -20,14 +20,14 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; int framesCounter = 0; float timePlayed = 0.0f; static bool pause = false; -Music music; +Music music = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -35,7 +35,7 @@ Music music; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -46,15 +46,15 @@ int main(void) InitAudioDevice(); // Initialize audio device music = LoadMusicStream("resources/guitar_noodling.ogg"); - + PlayMusicStream(music); - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -81,26 +81,26 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateMusicStream(music); // Update music buffer with new stream data - + // Restart music playing (stop and play) - if (IsKeyPressed(KEY_SPACE)) + if (IsKeyPressed(KEY_SPACE)) { StopMusicStream(music); PlayMusicStream(music); } - - // Pause/Resume music playing + + // Pause/Resume music playing if (IsKeyPressed(KEY_P)) { pause = !pause; - + if (pause) PauseMusicStream(music); else ResumeMusicStream(music); } - + // Get timePlayed scaled to bar dimensions (400 pixels) timePlayed = GetMusicTimePlayed(music)/GetMusicTimeLength(music)*400; - + if (timePlayed > 400) StopMusicStream(music); //---------------------------------------------------------------------------------- @@ -115,10 +115,10 @@ void UpdateDrawFrame(void) DrawRectangle(200, 200, 400, 12, LIGHTGRAY); DrawRectangle(200, 200, (int)timePlayed, 12, MAROON); DrawRectangleLines(200, 200, 400, 12, GRAY); - + DrawText("PRESS SPACE TO RESTART MUSIC", 215, 250, 20, LIGHTGRAY); DrawText("PRESS P TO PAUSE/RESUME MUSIC", 208, 280, 20, LIGHTGRAY); - + EndDrawing(); //---------------------------------------------------------------------------------- } \ No newline at end of file diff --git a/examples/web/audio/audio_music_stream.data b/examples/web/audio/audio_music_stream.data new file mode 100644 index 0000000..f8a9c02 Binary files /dev/null and b/examples/web/audio/audio_music_stream.data differ diff --git a/examples/web/audio/audio_music_stream.html b/examples/web/audio/audio_music_stream.html new file mode 100644 index 0000000..052b639 --- /dev/null +++ b/examples/web/audio/audio_music_stream.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/audio/audio_music_stream.js b/examples/web/audio/audio_music_stream.js new file mode 100644 index 0000000..92a1160 --- /dev/null +++ b/examples/web/audio/audio_music_stream.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="audio/audio_music_stream.data";var REMOTE_PACKAGE_BASE="audio_music_stream.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5391440,DYNAMICTOP_PTR=148528;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="audio_music_stream.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":430,"maximum":430,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};var ASM_CONSTS=[function($0){return navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined},function($0){try{var temp=new(window.AudioContext||window.webkitAudioContext);var sampleRate=temp.sampleRate;temp.close();return sampleRate}catch(e){return 0}},function($0,$1){var device=miniaudio.get_device_by_index($0);if(device.scriptNode!==undefined){device.scriptNode.onaudioprocess=function(e){};device.scriptNode.disconnect();device.scriptNode=undefined}if(device.streamNode!==undefined){device.streamNode.disconnect();device.streamNode=undefined}device.webaudio.close();device.webaudio=undefined;if(device.intermediaryBuffer!==undefined){Module._free(device.intermediaryBuffer);device.intermediaryBuffer=undefined;device.intermediaryBufferView=undefined;device.intermediaryBufferSizeInBytes=undefined}miniaudio.untrack_device_by_index($0)},function($0,$1,$2,$3,$4){var channels=$0;var sampleRate=$1;var bufferSize=$2;var isCapture=$3;var pDevice=$4;if(typeof miniaudio==="undefined"){return-1}var device={};device.webaudio=new(window.AudioContext||window.webkitAudioContext)({sampleRate:sampleRate});device.webaudio.suspend();device.intermediaryBufferSizeInBytes=channels*bufferSize*4;device.intermediaryBuffer=Module._malloc(device.intermediaryBufferSizeInBytes);device.intermediaryBufferView=new Float32Array(Module.HEAPF32.buffer,device.intermediaryBuffer,device.intermediaryBufferSizeInBytes);device.scriptNode=device.webaudio.createScriptProcessor(bufferSize,channels,channels);if(isCapture){device.scriptNode.onaudioprocess=function(e){if(device.intermediaryBuffer===undefined){return}for(var iChannel=0;iChanneldevice.intermediaryBufferSizeInBytes/channels/4){framesToProcess=device.intermediaryBufferSizeInBytes/channels/4}if(sendSilence){device.intermediaryBufferView.fill(0)}else{for(var iFrame=0;iFramedevice.intermediaryBufferSizeInBytes/channels/4){framesToProcess=device.intermediaryBufferSizeInBytes/channels/4}ccall("ma_device_process_pcm_frames_playback__webaudio","undefined",["number","number","number"],[pDevice,framesToProcess,device.intermediaryBuffer]);if(outputSilence){for(var iChannel=0;iChannel0){if(miniaudio.devices[miniaudio.devices.length-1]==null){miniaudio.devices.pop()}else{break}}};miniaudio.untrack_device=function(device){for(var iDevice=0;iDevice>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _pthread_attr_destroy(attr){return 0}function _pthread_attr_init(attr){return 0}function _pthread_cond_destroy(){return 0}function _pthread_cond_init(){return 0}function _pthread_cond_signal(){return 0}function _pthread_cond_wait(){return 0}function _pthread_create(){return 11}function _pthread_join(){}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"uc":___lock,"A":___setErrNo,"$a":___syscall140,"Qa":___syscall145,"z":___syscall146,"m":___syscall221,"la":___syscall5,"y":___syscall54,"S":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"e":_emscripten_asm_const_ii,"Cd":_emscripten_asm_const_iii,"rd":_emscripten_asm_const_iiiiii,"R":_emscripten_exit_pointerlock,"Yc":_emscripten_get_gamepad_status,"Nc":_emscripten_get_heap_size,"Dc":_emscripten_get_num_gamepads,"N":_emscripten_get_pointerlock_status,"qc":_emscripten_glActiveTexture,"kc":_emscripten_glAttachShader,"ec":_emscripten_glBeginQueryEXT,"Zb":_emscripten_glBindAttribLocation,"Rb":_emscripten_glBindBuffer,"Hb":_emscripten_glBindFramebuffer,"yb":_emscripten_glBindRenderbuffer,"pb":_emscripten_glBindTexture,"kb":_emscripten_glBindVertexArrayOES,"jb":_emscripten_glBlendColor,"ib":_emscripten_glBlendEquation,"hb":_emscripten_glBlendEquationSeparate,"gb":_emscripten_glBlendFunc,"fb":_emscripten_glBlendFuncSeparate,"eb":_emscripten_glBufferData,"db":_emscripten_glBufferSubData,"cb":_emscripten_glCheckFramebufferStatus,"bb":_emscripten_glClear,"ab":_emscripten_glClearColor,"_a":_emscripten_glClearDepthf,"Za":_emscripten_glClearStencil,"Ya":_emscripten_glColorMask,"Xa":_emscripten_glCompileShader,"Wa":_emscripten_glCompressedTexImage2D,"Va":_emscripten_glCompressedTexSubImage2D,"Ua":_emscripten_glCopyTexImage2D,"Ta":_emscripten_glCopyTexSubImage2D,"Sa":_emscripten_glCreateProgram,"Ra":_emscripten_glCreateShader,"Pa":_emscripten_glCullFace,"Oa":_emscripten_glDeleteBuffers,"Na":_emscripten_glDeleteFramebuffers,"Ma":_emscripten_glDeleteProgram,"La":_emscripten_glDeleteQueriesEXT,"Ka":_emscripten_glDeleteRenderbuffers,"Ja":_emscripten_glDeleteShader,"Ia":_emscripten_glDeleteTextures,"Ha":_emscripten_glDeleteVertexArraysOES,"Ga":_emscripten_glDepthFunc,"Fa":_emscripten_glDepthMask,"Ea":_emscripten_glDepthRangef,"Da":_emscripten_glDetachShader,"Ca":_emscripten_glDisable,"Ba":_emscripten_glDisableVertexAttribArray,"Aa":_emscripten_glDrawArrays,"za":_emscripten_glDrawArraysInstancedANGLE,"ya":_emscripten_glDrawBuffersWEBGL,"xa":_emscripten_glDrawElements,"wa":_emscripten_glDrawElementsInstancedANGLE,"va":_emscripten_glEnable,"ua":_emscripten_glEnableVertexAttribArray,"ta":_emscripten_glEndQueryEXT,"sa":_emscripten_glFinish,"ra":_emscripten_glFlush,"qa":_emscripten_glFramebufferRenderbuffer,"pa":_emscripten_glFramebufferTexture2D,"oa":_emscripten_glFrontFace,"na":_emscripten_glGenBuffers,"ma":_emscripten_glGenFramebuffers,"ka":_emscripten_glGenQueriesEXT,"ja":_emscripten_glGenRenderbuffers,"ia":_emscripten_glGenTextures,"ha":_emscripten_glGenVertexArraysOES,"ga":_emscripten_glGenerateMipmap,"fa":_emscripten_glGetActiveAttrib,"ea":_emscripten_glGetActiveUniform,"da":_emscripten_glGetAttachedShaders,"ca":_emscripten_glGetAttribLocation,"ba":_emscripten_glGetBooleanv,"aa":_emscripten_glGetBufferParameteriv,"$":_emscripten_glGetError,"_":_emscripten_glGetFloatv,"Z":_emscripten_glGetFramebufferAttachmentParameteriv,"Y":_emscripten_glGetIntegerv,"X":_emscripten_glGetProgramInfoLog,"W":_emscripten_glGetProgramiv,"V":_emscripten_glGetQueryObjecti64vEXT,"U":_emscripten_glGetQueryObjectivEXT,"T":_emscripten_glGetQueryObjectui64vEXT,"oe":_emscripten_glGetQueryObjectuivEXT,"ne":_emscripten_glGetQueryivEXT,"me":_emscripten_glGetRenderbufferParameteriv,"le":_emscripten_glGetShaderInfoLog,"ke":_emscripten_glGetShaderPrecisionFormat,"je":_emscripten_glGetShaderSource,"ie":_emscripten_glGetShaderiv,"he":_emscripten_glGetString,"ge":_emscripten_glGetTexParameterfv,"fe":_emscripten_glGetTexParameteriv,"ee":_emscripten_glGetUniformLocation,"de":_emscripten_glGetUniformfv,"ce":_emscripten_glGetUniformiv,"be":_emscripten_glGetVertexAttribPointerv,"ae":_emscripten_glGetVertexAttribfv,"$d":_emscripten_glGetVertexAttribiv,"_d":_emscripten_glHint,"Zd":_emscripten_glIsBuffer,"Yd":_emscripten_glIsEnabled,"Xd":_emscripten_glIsFramebuffer,"Wd":_emscripten_glIsProgram,"Vd":_emscripten_glIsQueryEXT,"Ud":_emscripten_glIsRenderbuffer,"Td":_emscripten_glIsShader,"Sd":_emscripten_glIsTexture,"Rd":_emscripten_glIsVertexArrayOES,"Qd":_emscripten_glLineWidth,"Pd":_emscripten_glLinkProgram,"Od":_emscripten_glPixelStorei,"Nd":_emscripten_glPolygonOffset,"Md":_emscripten_glQueryCounterEXT,"Ld":_emscripten_glReadPixels,"Kd":_emscripten_glReleaseShaderCompiler,"Jd":_emscripten_glRenderbufferStorage,"Id":_emscripten_glSampleCoverage,"Hd":_emscripten_glScissor,"Gd":_emscripten_glShaderBinary,"Fd":_emscripten_glShaderSource,"Ed":_emscripten_glStencilFunc,"Dd":_emscripten_glStencilFuncSeparate,"Bd":_emscripten_glStencilMask,"Ad":_emscripten_glStencilMaskSeparate,"zd":_emscripten_glStencilOp,"yd":_emscripten_glStencilOpSeparate,"xd":_emscripten_glTexImage2D,"wd":_emscripten_glTexParameterf,"vd":_emscripten_glTexParameterfv,"ud":_emscripten_glTexParameteri,"td":_emscripten_glTexParameteriv,"sd":_emscripten_glTexSubImage2D,"qd":_emscripten_glUniform1f,"pd":_emscripten_glUniform1fv,"od":_emscripten_glUniform1i,"nd":_emscripten_glUniform1iv,"md":_emscripten_glUniform2f,"ld":_emscripten_glUniform2fv,"kd":_emscripten_glUniform2i,"jd":_emscripten_glUniform2iv,"id":_emscripten_glUniform3f,"hd":_emscripten_glUniform3fv,"gd":_emscripten_glUniform3i,"fd":_emscripten_glUniform3iv,"ed":_emscripten_glUniform4f,"dd":_emscripten_glUniform4fv,"cd":_emscripten_glUniform4i,"bd":_emscripten_glUniform4iv,"ad":_emscripten_glUniformMatrix2fv,"$c":_emscripten_glUniformMatrix3fv,"_c":_emscripten_glUniformMatrix4fv,"Zc":_emscripten_glUseProgram,"Xc":_emscripten_glValidateProgram,"Wc":_emscripten_glVertexAttrib1f,"Vc":_emscripten_glVertexAttrib1fv,"Uc":_emscripten_glVertexAttrib2f,"Tc":_emscripten_glVertexAttrib2fv,"Sc":_emscripten_glVertexAttrib3f,"Rc":_emscripten_glVertexAttrib3fv,"Qc":_emscripten_glVertexAttrib4f,"Pc":_emscripten_glVertexAttrib4fv,"Oc":_emscripten_glVertexAttribDivisorANGLE,"Mc":_emscripten_glVertexAttribPointer,"Lc":_emscripten_glViewport,"Kc":_emscripten_memcpy_big,"Jc":_emscripten_request_pointerlock,"Ic":_emscripten_resize_heap,"Q":_emscripten_run_script,"Hc":_emscripten_sample_gamepad_data,"Gc":_emscripten_set_click_callback_on_thread,"Fc":_emscripten_set_fullscreenchange_callback_on_thread,"Ec":_emscripten_set_gamepadconnected_callback_on_thread,"Cc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Bc":_emscripten_set_keypress_callback_on_thread,"Ac":_emscripten_set_main_loop,"zc":_emscripten_set_touchcancel_callback_on_thread,"yc":_emscripten_set_touchend_callback_on_thread,"xc":_emscripten_set_touchmove_callback_on_thread,"wc":_emscripten_set_touchstart_callback_on_thread,"P":_exit,"vc":_glActiveTexture,"O":_glAttachShader,"j":_glBindAttribLocation,"d":_glBindBuffer,"l":_glBindTexture,"tc":_glBlendFunc,"r":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"sc":_glClearDepthf,"rc":_glCompileShader,"pc":_glCompressedTexImage2D,"oc":_glCreateProgram,"nc":_glCreateShader,"mc":_glCullFace,"q":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"lc":_glDepthFunc,"H":_glDetachShader,"jc":_glDisable,"p":_glDisableVertexAttribArray,"ic":_glDrawArrays,"hc":_glDrawElements,"G":_glEnable,"i":_glEnableVertexAttribArray,"gc":_glFrontFace,"o":_glGenBuffers,"fc":_glGenTextures,"u":_glGetAttribLocation,"dc":_glGetFloatv,"cc":_glGetProgramInfoLog,"F":_glGetProgramiv,"bc":_glGetShaderInfoLog,"E":_glGetShaderiv,"k":_glGetString,"t":_glGetUniformLocation,"ac":_glLinkProgram,"$b":_glPixelStorei,"_b":_glReadPixels,"Yb":_glShaderSource,"Xb":_glTexImage2D,"h":_glTexParameteri,"Wb":_glUniform1i,"Vb":_glUniform4f,"Ub":_glUniformMatrix4fv,"s":_glUseProgram,"g":_glVertexAttribPointer,"Tb":_glViewport,"Sb":_glfwCreateWindow,"Qb":_glfwDefaultWindowHints,"Pb":_glfwDestroyWindow,"Ob":_glfwGetCursorPos,"n":_glfwGetTime,"Nb":_glfwInit,"Mb":_glfwMakeContextCurrent,"Lb":_glfwSetCharCallback,"Kb":_glfwSetCursorEnterCallback,"Jb":_glfwSetCursorPosCallback,"Ib":_glfwSetDropCallback,"Gb":_glfwSetErrorCallback,"Fb":_glfwSetKeyCallback,"Eb":_glfwSetMouseButtonCallback,"Db":_glfwSetScrollCallback,"Cb":_glfwSetWindowIconifyCallback,"Bb":_glfwSetWindowShouldClose,"Ab":_glfwSetWindowSizeCallback,"zb":_glfwSwapBuffers,"D":_glfwTerminate,"f":_glfwWindowHint,"xb":_llvm_exp2_f32,"C":_llvm_stackrestore,"B":_llvm_stacksave,"wb":_nanosleep,"vb":_pthread_attr_destroy,"ub":_pthread_attr_init,"tb":_pthread_cond_destroy,"sb":_pthread_cond_init,"rb":_pthread_cond_signal,"qb":_pthread_cond_wait,"ob":_pthread_create,"nb":_pthread_join,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["De"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/audio/audio_music_stream.wasm b/examples/web/audio/audio_music_stream.wasm new file mode 100644 index 0000000..6714336 Binary files /dev/null and b/examples/web/audio/audio_music_stream.wasm differ diff --git a/examples/web/audio/audio_raw_stream.c b/examples/web/audio/audio_raw_stream.c index 5a3bcb3..60af7e2 100644 --- a/examples/web/audio/audio_raw_stream.c +++ b/examples/web/audio/audio_raw_stream.c @@ -30,7 +30,7 @@ const int screenWidth = 800; const int screenHeight = 450; -AudioStream stream; +AudioStream stream = { 0 }; short *data; short *writeBuf; @@ -45,7 +45,7 @@ Vector2 position = { 0, 0 }; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -57,21 +57,21 @@ int main(void) // Init raw audio stream (sample rate: 22050, sample size: 16bit-short, channels: 1-mono) stream = InitAudioStream(22050, 16, 1); - + // Buffer for the single cycle waveform we are synthesizing data = (short *)malloc(sizeof(short)*MAX_SAMPLES); // Frame buffer, describing the waveform when repeated over the course of a frame writeBuf = (short *)malloc(sizeof(short)*MAX_SAMPLES_PER_UPDATE); - + PlayAudioStream(stream); // Start processing stream buffer (no data loaded currently) - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -83,7 +83,7 @@ int main(void) //-------------------------------------------------------------------------------------- free(data); // Unload sine wave data free(writeBuf); // Unload write buffer - + CloseAudioStream(stream); // Close raw audio stream and delete buffers from RAM CloseAudioDevice(); // Close audio device (music streaming is automatically stopped) @@ -100,21 +100,21 @@ void UpdateDrawFrame(void) { // Update //---------------------------------------------------------------------------------- - + // Refill audio stream if required // NOTE: Every update we check if stream data has been already consumed and we update // buffer with new data from the generated samples, we upload data at a rate (MAX_SAMPLES_PER_UPDATE), // but notice that at some point we update < MAX_SAMPLES_PER_UPDATE data... - if (IsAudioBufferProcessed(stream)) + if (IsAudioBufferProcessed(stream)) { int numSamples = 0; if (samplesLeft >= MAX_SAMPLES_PER_UPDATE) numSamples = MAX_SAMPLES_PER_UPDATE; else numSamples = samplesLeft; UpdateAudioStream(stream, data + (totalSamples - samplesLeft), numSamples); - + samplesLeft -= numSamples; - + // Reset samples feeding (loop audio) if (samplesLeft <= 0) samplesLeft = totalSamples; } @@ -127,13 +127,13 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); DrawText("SINE WAVE SHOULD BE PLAYING!", 240, 140, 20, LIGHTGRAY); - + // NOTE: Draw a part of the sine wave (only screen width, proportional values) for (int i = 0; i < GetScreenWidth(); i++) { position.x = i; position.y = 250 + 50*data[i]/32000; - + DrawPixelV(position, RED); } diff --git a/examples/web/audio/audio_raw_stream.html b/examples/web/audio/audio_raw_stream.html new file mode 100644 index 0000000..6edc9a9 --- /dev/null +++ b/examples/web/audio/audio_raw_stream.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/audio/audio_raw_stream.js b/examples/web/audio/audio_raw_stream.js new file mode 100644 index 0000000..8c4e2cc --- /dev/null +++ b/examples/web/audio/audio_raw_stream.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5377136,DYNAMICTOP_PTR=134224;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="audio_raw_stream.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":420,"maximum":420,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};var ASM_CONSTS=[function($0){return navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined},function($0){try{var temp=new(window.AudioContext||window.webkitAudioContext);var sampleRate=temp.sampleRate;temp.close();return sampleRate}catch(e){return 0}},function($0,$1){var device=miniaudio.get_device_by_index($0);if(device.scriptNode!==undefined){device.scriptNode.onaudioprocess=function(e){};device.scriptNode.disconnect();device.scriptNode=undefined}if(device.streamNode!==undefined){device.streamNode.disconnect();device.streamNode=undefined}device.webaudio.close();device.webaudio=undefined;if(device.intermediaryBuffer!==undefined){Module._free(device.intermediaryBuffer);device.intermediaryBuffer=undefined;device.intermediaryBufferView=undefined;device.intermediaryBufferSizeInBytes=undefined}miniaudio.untrack_device_by_index($0)},function($0,$1,$2,$3,$4){var channels=$0;var sampleRate=$1;var bufferSize=$2;var isCapture=$3;var pDevice=$4;if(typeof miniaudio==="undefined"){return-1}var device={};device.webaudio=new(window.AudioContext||window.webkitAudioContext)({sampleRate:sampleRate});device.webaudio.suspend();device.intermediaryBufferSizeInBytes=channels*bufferSize*4;device.intermediaryBuffer=Module._malloc(device.intermediaryBufferSizeInBytes);device.intermediaryBufferView=new Float32Array(Module.HEAPF32.buffer,device.intermediaryBuffer,device.intermediaryBufferSizeInBytes);device.scriptNode=device.webaudio.createScriptProcessor(bufferSize,channels,channels);if(isCapture){device.scriptNode.onaudioprocess=function(e){if(device.intermediaryBuffer===undefined){return}for(var iChannel=0;iChanneldevice.intermediaryBufferSizeInBytes/channels/4){framesToProcess=device.intermediaryBufferSizeInBytes/channels/4}if(sendSilence){device.intermediaryBufferView.fill(0)}else{for(var iFrame=0;iFramedevice.intermediaryBufferSizeInBytes/channels/4){framesToProcess=device.intermediaryBufferSizeInBytes/channels/4}ccall("ma_device_process_pcm_frames_playback__webaudio","undefined",["number","number","number"],[pDevice,framesToProcess,device.intermediaryBuffer]);if(outputSilence){for(var iChannel=0;iChannel0){if(miniaudio.devices[miniaudio.devices.length-1]==null){miniaudio.devices.pop()}else{break}}};miniaudio.untrack_device=function(device){for(var iDevice=0;iDevice>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _pthread_attr_destroy(attr){return 0}function _pthread_attr_init(attr){return 0}function _pthread_cond_destroy(){return 0}function _pthread_cond_init(){return 0}function _pthread_cond_signal(){return 0}function _pthread_cond_wait(){return 0}function _pthread_create(){return 11}function _pthread_join(){}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"sc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"m":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"e":_emscripten_asm_const_ii,"Bd":_emscripten_asm_const_iii,"qd":_emscripten_asm_const_iiiiii,"Q":_emscripten_exit_pointerlock,"Xc":_emscripten_get_gamepad_status,"Mc":_emscripten_get_heap_size,"Cc":_emscripten_get_num_gamepads,"N":_emscripten_get_pointerlock_status,"oc":_emscripten_glActiveTexture,"ic":_emscripten_glAttachShader,"cc":_emscripten_glBeginQueryEXT,"Xb":_emscripten_glBindAttribLocation,"Pb":_emscripten_glBindBuffer,"Fb":_emscripten_glBindFramebuffer,"wb":_emscripten_glBindRenderbuffer,"nb":_emscripten_glBindTexture,"jb":_emscripten_glBindVertexArrayOES,"ib":_emscripten_glBlendColor,"hb":_emscripten_glBlendEquation,"gb":_emscripten_glBlendEquationSeparate,"fb":_emscripten_glBlendFunc,"eb":_emscripten_glBlendFuncSeparate,"db":_emscripten_glBufferData,"cb":_emscripten_glBufferSubData,"bb":_emscripten_glCheckFramebufferStatus,"ab":_emscripten_glClear,"$a":_emscripten_glClearColor,"Za":_emscripten_glClearDepthf,"Ya":_emscripten_glClearStencil,"Xa":_emscripten_glColorMask,"Wa":_emscripten_glCompileShader,"Va":_emscripten_glCompressedTexImage2D,"Ua":_emscripten_glCompressedTexSubImage2D,"Ta":_emscripten_glCopyTexImage2D,"Sa":_emscripten_glCopyTexSubImage2D,"Ra":_emscripten_glCreateProgram,"Qa":_emscripten_glCreateShader,"Oa":_emscripten_glCullFace,"Na":_emscripten_glDeleteBuffers,"Ma":_emscripten_glDeleteFramebuffers,"La":_emscripten_glDeleteProgram,"Ka":_emscripten_glDeleteQueriesEXT,"Ja":_emscripten_glDeleteRenderbuffers,"Ia":_emscripten_glDeleteShader,"Ha":_emscripten_glDeleteTextures,"Ga":_emscripten_glDeleteVertexArraysOES,"Fa":_emscripten_glDepthFunc,"Ea":_emscripten_glDepthMask,"Da":_emscripten_glDepthRangef,"Ca":_emscripten_glDetachShader,"Ba":_emscripten_glDisable,"Aa":_emscripten_glDisableVertexAttribArray,"za":_emscripten_glDrawArrays,"ya":_emscripten_glDrawArraysInstancedANGLE,"xa":_emscripten_glDrawBuffersWEBGL,"wa":_emscripten_glDrawElements,"va":_emscripten_glDrawElementsInstancedANGLE,"ua":_emscripten_glEnable,"ta":_emscripten_glEnableVertexAttribArray,"sa":_emscripten_glEndQueryEXT,"ra":_emscripten_glFinish,"qa":_emscripten_glFlush,"pa":_emscripten_glFramebufferRenderbuffer,"oa":_emscripten_glFramebufferTexture2D,"na":_emscripten_glFrontFace,"ma":_emscripten_glGenBuffers,"la":_emscripten_glGenFramebuffers,"ja":_emscripten_glGenQueriesEXT,"ia":_emscripten_glGenRenderbuffers,"ha":_emscripten_glGenTextures,"ga":_emscripten_glGenVertexArraysOES,"fa":_emscripten_glGenerateMipmap,"ea":_emscripten_glGetActiveAttrib,"da":_emscripten_glGetActiveUniform,"ca":_emscripten_glGetAttachedShaders,"ba":_emscripten_glGetAttribLocation,"aa":_emscripten_glGetBooleanv,"$":_emscripten_glGetBufferParameteriv,"_":_emscripten_glGetError,"Z":_emscripten_glGetFloatv,"Y":_emscripten_glGetFramebufferAttachmentParameteriv,"X":_emscripten_glGetIntegerv,"W":_emscripten_glGetProgramInfoLog,"V":_emscripten_glGetProgramiv,"U":_emscripten_glGetQueryObjecti64vEXT,"T":_emscripten_glGetQueryObjectivEXT,"S":_emscripten_glGetQueryObjectui64vEXT,"ne":_emscripten_glGetQueryObjectuivEXT,"me":_emscripten_glGetQueryivEXT,"le":_emscripten_glGetRenderbufferParameteriv,"ke":_emscripten_glGetShaderInfoLog,"je":_emscripten_glGetShaderPrecisionFormat,"ie":_emscripten_glGetShaderSource,"he":_emscripten_glGetShaderiv,"ge":_emscripten_glGetString,"fe":_emscripten_glGetTexParameterfv,"ee":_emscripten_glGetTexParameteriv,"de":_emscripten_glGetUniformLocation,"ce":_emscripten_glGetUniformfv,"be":_emscripten_glGetUniformiv,"ae":_emscripten_glGetVertexAttribPointerv,"$d":_emscripten_glGetVertexAttribfv,"_d":_emscripten_glGetVertexAttribiv,"Zd":_emscripten_glHint,"Yd":_emscripten_glIsBuffer,"Xd":_emscripten_glIsEnabled,"Wd":_emscripten_glIsFramebuffer,"Vd":_emscripten_glIsProgram,"Ud":_emscripten_glIsQueryEXT,"Td":_emscripten_glIsRenderbuffer,"Sd":_emscripten_glIsShader,"Rd":_emscripten_glIsTexture,"Qd":_emscripten_glIsVertexArrayOES,"Pd":_emscripten_glLineWidth,"Od":_emscripten_glLinkProgram,"Nd":_emscripten_glPixelStorei,"Md":_emscripten_glPolygonOffset,"Ld":_emscripten_glQueryCounterEXT,"Kd":_emscripten_glReadPixels,"Jd":_emscripten_glReleaseShaderCompiler,"Id":_emscripten_glRenderbufferStorage,"Hd":_emscripten_glSampleCoverage,"Gd":_emscripten_glScissor,"Fd":_emscripten_glShaderBinary,"Ed":_emscripten_glShaderSource,"Dd":_emscripten_glStencilFunc,"Cd":_emscripten_glStencilFuncSeparate,"Ad":_emscripten_glStencilMask,"zd":_emscripten_glStencilMaskSeparate,"yd":_emscripten_glStencilOp,"xd":_emscripten_glStencilOpSeparate,"wd":_emscripten_glTexImage2D,"vd":_emscripten_glTexParameterf,"ud":_emscripten_glTexParameterfv,"td":_emscripten_glTexParameteri,"sd":_emscripten_glTexParameteriv,"rd":_emscripten_glTexSubImage2D,"pd":_emscripten_glUniform1f,"od":_emscripten_glUniform1fv,"nd":_emscripten_glUniform1i,"md":_emscripten_glUniform1iv,"ld":_emscripten_glUniform2f,"kd":_emscripten_glUniform2fv,"jd":_emscripten_glUniform2i,"id":_emscripten_glUniform2iv,"hd":_emscripten_glUniform3f,"gd":_emscripten_glUniform3fv,"fd":_emscripten_glUniform3i,"ed":_emscripten_glUniform3iv,"dd":_emscripten_glUniform4f,"cd":_emscripten_glUniform4fv,"bd":_emscripten_glUniform4i,"ad":_emscripten_glUniform4iv,"$c":_emscripten_glUniformMatrix2fv,"_c":_emscripten_glUniformMatrix3fv,"Zc":_emscripten_glUniformMatrix4fv,"Yc":_emscripten_glUseProgram,"Wc":_emscripten_glValidateProgram,"Vc":_emscripten_glVertexAttrib1f,"Uc":_emscripten_glVertexAttrib1fv,"Tc":_emscripten_glVertexAttrib2f,"Sc":_emscripten_glVertexAttrib2fv,"Rc":_emscripten_glVertexAttrib3f,"Qc":_emscripten_glVertexAttrib3fv,"Pc":_emscripten_glVertexAttrib4f,"Oc":_emscripten_glVertexAttrib4fv,"Nc":_emscripten_glVertexAttribDivisorANGLE,"Lc":_emscripten_glVertexAttribPointer,"Kc":_emscripten_glViewport,"Jc":_emscripten_memcpy_big,"Ic":_emscripten_request_pointerlock,"Hc":_emscripten_resize_heap,"P":_emscripten_run_script,"Gc":_emscripten_sample_gamepad_data,"Fc":_emscripten_set_click_callback_on_thread,"Ec":_emscripten_set_fullscreenchange_callback_on_thread,"Dc":_emscripten_set_gamepadconnected_callback_on_thread,"Bc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Ac":_emscripten_set_keypress_callback_on_thread,"zc":_emscripten_set_main_loop,"yc":_emscripten_set_touchcancel_callback_on_thread,"xc":_emscripten_set_touchend_callback_on_thread,"wc":_emscripten_set_touchmove_callback_on_thread,"vc":_emscripten_set_touchstart_callback_on_thread,"uc":_exit,"tc":_glActiveTexture,"O":_glAttachShader,"j":_glBindAttribLocation,"d":_glBindBuffer,"l":_glBindTexture,"rc":_glBlendFunc,"r":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"qc":_glClearDepthf,"pc":_glCompileShader,"nc":_glCompressedTexImage2D,"mc":_glCreateProgram,"lc":_glCreateShader,"kc":_glCullFace,"q":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"jc":_glDepthFunc,"H":_glDetachShader,"hc":_glDisable,"p":_glDisableVertexAttribArray,"gc":_glDrawArrays,"fc":_glDrawElements,"G":_glEnable,"i":_glEnableVertexAttribArray,"ec":_glFrontFace,"o":_glGenBuffers,"dc":_glGenTextures,"u":_glGetAttribLocation,"bc":_glGetFloatv,"ac":_glGetProgramInfoLog,"F":_glGetProgramiv,"$b":_glGetShaderInfoLog,"E":_glGetShaderiv,"k":_glGetString,"t":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Wb":_glShaderSource,"Vb":_glTexImage2D,"h":_glTexParameteri,"Ub":_glUniform1i,"Tb":_glUniform4f,"Sb":_glUniformMatrix4fv,"s":_glUseProgram,"g":_glVertexAttribPointer,"Rb":_glViewport,"Qb":_glfwCreateWindow,"Ob":_glfwDefaultWindowHints,"Nb":_glfwDestroyWindow,"Mb":_glfwGetCursorPos,"n":_glfwGetTime,"Lb":_glfwInit,"Kb":_glfwMakeContextCurrent,"Jb":_glfwSetCharCallback,"Ib":_glfwSetCursorEnterCallback,"Hb":_glfwSetCursorPosCallback,"Gb":_glfwSetDropCallback,"Eb":_glfwSetErrorCallback,"Db":_glfwSetKeyCallback,"Cb":_glfwSetMouseButtonCallback,"Bb":_glfwSetScrollCallback,"Ab":_glfwSetWindowIconifyCallback,"zb":_glfwSetWindowShouldClose,"yb":_glfwSetWindowSizeCallback,"xb":_glfwSwapBuffers,"D":_glfwTerminate,"f":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"vb":_nanosleep,"ub":_pthread_attr_destroy,"tb":_pthread_attr_init,"sb":_pthread_cond_destroy,"rb":_pthread_cond_init,"qb":_pthread_cond_signal,"pb":_pthread_cond_wait,"ob":_pthread_create,"mb":_pthread_join,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["De"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/audio/audio_raw_stream.wasm b/examples/web/audio/audio_raw_stream.wasm new file mode 100644 index 0000000..023e879 Binary files /dev/null and b/examples/web/audio/audio_raw_stream.wasm differ diff --git a/examples/web/audio/audio_sound_loading.c b/examples/web/audio/audio_sound_loading.c index 94afde5..7888025 100644 --- a/examples/web/audio/audio_sound_loading.c +++ b/examples/web/audio/audio_sound_loading.c @@ -20,11 +20,11 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; -Sound fxWav; -Sound fxOgg; +Sound fxWav = { 0 }; +Sound fxOgg = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -32,7 +32,7 @@ Sound fxOgg; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -44,13 +44,13 @@ int main(void) fxWav = LoadSound("resources/weird.wav"); // Load WAV audio file fxOgg = LoadSound("resources/tanatana.ogg"); // Load OGG audio file - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { diff --git a/examples/web/audio/audio_sound_loading.data b/examples/web/audio/audio_sound_loading.data new file mode 100644 index 0000000..f8a9c02 Binary files /dev/null and b/examples/web/audio/audio_sound_loading.data differ diff --git a/examples/web/audio/audio_sound_loading.html b/examples/web/audio/audio_sound_loading.html new file mode 100644 index 0000000..bc53cf8 --- /dev/null +++ b/examples/web/audio/audio_sound_loading.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/audio/audio_sound_loading.js b/examples/web/audio/audio_sound_loading.js new file mode 100644 index 0000000..8f86126 --- /dev/null +++ b/examples/web/audio/audio_sound_loading.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="audio/audio_sound_loading.data";var REMOTE_PACKAGE_BASE="audio_sound_loading.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5390368,DYNAMICTOP_PTR=147456;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="audio_sound_loading.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":430,"maximum":430,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};var ASM_CONSTS=[function($0){return navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined},function($0){try{var temp=new(window.AudioContext||window.webkitAudioContext);var sampleRate=temp.sampleRate;temp.close();return sampleRate}catch(e){return 0}},function($0,$1){var device=miniaudio.get_device_by_index($0);if(device.scriptNode!==undefined){device.scriptNode.onaudioprocess=function(e){};device.scriptNode.disconnect();device.scriptNode=undefined}if(device.streamNode!==undefined){device.streamNode.disconnect();device.streamNode=undefined}device.webaudio.close();device.webaudio=undefined;if(device.intermediaryBuffer!==undefined){Module._free(device.intermediaryBuffer);device.intermediaryBuffer=undefined;device.intermediaryBufferView=undefined;device.intermediaryBufferSizeInBytes=undefined}miniaudio.untrack_device_by_index($0)},function($0,$1,$2,$3,$4){var channels=$0;var sampleRate=$1;var bufferSize=$2;var isCapture=$3;var pDevice=$4;if(typeof miniaudio==="undefined"){return-1}var device={};device.webaudio=new(window.AudioContext||window.webkitAudioContext)({sampleRate:sampleRate});device.webaudio.suspend();device.intermediaryBufferSizeInBytes=channels*bufferSize*4;device.intermediaryBuffer=Module._malloc(device.intermediaryBufferSizeInBytes);device.intermediaryBufferView=new Float32Array(Module.HEAPF32.buffer,device.intermediaryBuffer,device.intermediaryBufferSizeInBytes);device.scriptNode=device.webaudio.createScriptProcessor(bufferSize,channels,channels);if(isCapture){device.scriptNode.onaudioprocess=function(e){if(device.intermediaryBuffer===undefined){return}for(var iChannel=0;iChanneldevice.intermediaryBufferSizeInBytes/channels/4){framesToProcess=device.intermediaryBufferSizeInBytes/channels/4}if(sendSilence){device.intermediaryBufferView.fill(0)}else{for(var iFrame=0;iFramedevice.intermediaryBufferSizeInBytes/channels/4){framesToProcess=device.intermediaryBufferSizeInBytes/channels/4}ccall("ma_device_process_pcm_frames_playback__webaudio","undefined",["number","number","number"],[pDevice,framesToProcess,device.intermediaryBuffer]);if(outputSilence){for(var iChannel=0;iChannel0){if(miniaudio.devices[miniaudio.devices.length-1]==null){miniaudio.devices.pop()}else{break}}};miniaudio.untrack_device=function(device){for(var iDevice=0;iDevice>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _pthread_attr_destroy(attr){return 0}function _pthread_attr_init(attr){return 0}function _pthread_cond_destroy(){return 0}function _pthread_cond_init(){return 0}function _pthread_cond_signal(){return 0}function _pthread_cond_wait(){return 0}function _pthread_create(){return 11}function _pthread_join(){}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"sc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"m":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"e":_emscripten_asm_const_ii,"Bd":_emscripten_asm_const_iii,"qd":_emscripten_asm_const_iiiiii,"Q":_emscripten_exit_pointerlock,"Xc":_emscripten_get_gamepad_status,"Mc":_emscripten_get_heap_size,"Cc":_emscripten_get_num_gamepads,"N":_emscripten_get_pointerlock_status,"oc":_emscripten_glActiveTexture,"ic":_emscripten_glAttachShader,"cc":_emscripten_glBeginQueryEXT,"Xb":_emscripten_glBindAttribLocation,"Pb":_emscripten_glBindBuffer,"Fb":_emscripten_glBindFramebuffer,"wb":_emscripten_glBindRenderbuffer,"nb":_emscripten_glBindTexture,"jb":_emscripten_glBindVertexArrayOES,"ib":_emscripten_glBlendColor,"hb":_emscripten_glBlendEquation,"gb":_emscripten_glBlendEquationSeparate,"fb":_emscripten_glBlendFunc,"eb":_emscripten_glBlendFuncSeparate,"db":_emscripten_glBufferData,"cb":_emscripten_glBufferSubData,"bb":_emscripten_glCheckFramebufferStatus,"ab":_emscripten_glClear,"$a":_emscripten_glClearColor,"Za":_emscripten_glClearDepthf,"Ya":_emscripten_glClearStencil,"Xa":_emscripten_glColorMask,"Wa":_emscripten_glCompileShader,"Va":_emscripten_glCompressedTexImage2D,"Ua":_emscripten_glCompressedTexSubImage2D,"Ta":_emscripten_glCopyTexImage2D,"Sa":_emscripten_glCopyTexSubImage2D,"Ra":_emscripten_glCreateProgram,"Qa":_emscripten_glCreateShader,"Oa":_emscripten_glCullFace,"Na":_emscripten_glDeleteBuffers,"Ma":_emscripten_glDeleteFramebuffers,"La":_emscripten_glDeleteProgram,"Ka":_emscripten_glDeleteQueriesEXT,"Ja":_emscripten_glDeleteRenderbuffers,"Ia":_emscripten_glDeleteShader,"Ha":_emscripten_glDeleteTextures,"Ga":_emscripten_glDeleteVertexArraysOES,"Fa":_emscripten_glDepthFunc,"Ea":_emscripten_glDepthMask,"Da":_emscripten_glDepthRangef,"Ca":_emscripten_glDetachShader,"Ba":_emscripten_glDisable,"Aa":_emscripten_glDisableVertexAttribArray,"za":_emscripten_glDrawArrays,"ya":_emscripten_glDrawArraysInstancedANGLE,"xa":_emscripten_glDrawBuffersWEBGL,"wa":_emscripten_glDrawElements,"va":_emscripten_glDrawElementsInstancedANGLE,"ua":_emscripten_glEnable,"ta":_emscripten_glEnableVertexAttribArray,"sa":_emscripten_glEndQueryEXT,"ra":_emscripten_glFinish,"qa":_emscripten_glFlush,"pa":_emscripten_glFramebufferRenderbuffer,"oa":_emscripten_glFramebufferTexture2D,"na":_emscripten_glFrontFace,"ma":_emscripten_glGenBuffers,"la":_emscripten_glGenFramebuffers,"ja":_emscripten_glGenQueriesEXT,"ia":_emscripten_glGenRenderbuffers,"ha":_emscripten_glGenTextures,"ga":_emscripten_glGenVertexArraysOES,"fa":_emscripten_glGenerateMipmap,"ea":_emscripten_glGetActiveAttrib,"da":_emscripten_glGetActiveUniform,"ca":_emscripten_glGetAttachedShaders,"ba":_emscripten_glGetAttribLocation,"aa":_emscripten_glGetBooleanv,"$":_emscripten_glGetBufferParameteriv,"_":_emscripten_glGetError,"Z":_emscripten_glGetFloatv,"Y":_emscripten_glGetFramebufferAttachmentParameteriv,"X":_emscripten_glGetIntegerv,"W":_emscripten_glGetProgramInfoLog,"V":_emscripten_glGetProgramiv,"U":_emscripten_glGetQueryObjecti64vEXT,"T":_emscripten_glGetQueryObjectivEXT,"S":_emscripten_glGetQueryObjectui64vEXT,"ne":_emscripten_glGetQueryObjectuivEXT,"me":_emscripten_glGetQueryivEXT,"le":_emscripten_glGetRenderbufferParameteriv,"ke":_emscripten_glGetShaderInfoLog,"je":_emscripten_glGetShaderPrecisionFormat,"ie":_emscripten_glGetShaderSource,"he":_emscripten_glGetShaderiv,"ge":_emscripten_glGetString,"fe":_emscripten_glGetTexParameterfv,"ee":_emscripten_glGetTexParameteriv,"de":_emscripten_glGetUniformLocation,"ce":_emscripten_glGetUniformfv,"be":_emscripten_glGetUniformiv,"ae":_emscripten_glGetVertexAttribPointerv,"$d":_emscripten_glGetVertexAttribfv,"_d":_emscripten_glGetVertexAttribiv,"Zd":_emscripten_glHint,"Yd":_emscripten_glIsBuffer,"Xd":_emscripten_glIsEnabled,"Wd":_emscripten_glIsFramebuffer,"Vd":_emscripten_glIsProgram,"Ud":_emscripten_glIsQueryEXT,"Td":_emscripten_glIsRenderbuffer,"Sd":_emscripten_glIsShader,"Rd":_emscripten_glIsTexture,"Qd":_emscripten_glIsVertexArrayOES,"Pd":_emscripten_glLineWidth,"Od":_emscripten_glLinkProgram,"Nd":_emscripten_glPixelStorei,"Md":_emscripten_glPolygonOffset,"Ld":_emscripten_glQueryCounterEXT,"Kd":_emscripten_glReadPixels,"Jd":_emscripten_glReleaseShaderCompiler,"Id":_emscripten_glRenderbufferStorage,"Hd":_emscripten_glSampleCoverage,"Gd":_emscripten_glScissor,"Fd":_emscripten_glShaderBinary,"Ed":_emscripten_glShaderSource,"Dd":_emscripten_glStencilFunc,"Cd":_emscripten_glStencilFuncSeparate,"Ad":_emscripten_glStencilMask,"zd":_emscripten_glStencilMaskSeparate,"yd":_emscripten_glStencilOp,"xd":_emscripten_glStencilOpSeparate,"wd":_emscripten_glTexImage2D,"vd":_emscripten_glTexParameterf,"ud":_emscripten_glTexParameterfv,"td":_emscripten_glTexParameteri,"sd":_emscripten_glTexParameteriv,"rd":_emscripten_glTexSubImage2D,"pd":_emscripten_glUniform1f,"od":_emscripten_glUniform1fv,"nd":_emscripten_glUniform1i,"md":_emscripten_glUniform1iv,"ld":_emscripten_glUniform2f,"kd":_emscripten_glUniform2fv,"jd":_emscripten_glUniform2i,"id":_emscripten_glUniform2iv,"hd":_emscripten_glUniform3f,"gd":_emscripten_glUniform3fv,"fd":_emscripten_glUniform3i,"ed":_emscripten_glUniform3iv,"dd":_emscripten_glUniform4f,"cd":_emscripten_glUniform4fv,"bd":_emscripten_glUniform4i,"ad":_emscripten_glUniform4iv,"$c":_emscripten_glUniformMatrix2fv,"_c":_emscripten_glUniformMatrix3fv,"Zc":_emscripten_glUniformMatrix4fv,"Yc":_emscripten_glUseProgram,"Wc":_emscripten_glValidateProgram,"Vc":_emscripten_glVertexAttrib1f,"Uc":_emscripten_glVertexAttrib1fv,"Tc":_emscripten_glVertexAttrib2f,"Sc":_emscripten_glVertexAttrib2fv,"Rc":_emscripten_glVertexAttrib3f,"Qc":_emscripten_glVertexAttrib3fv,"Pc":_emscripten_glVertexAttrib4f,"Oc":_emscripten_glVertexAttrib4fv,"Nc":_emscripten_glVertexAttribDivisorANGLE,"Lc":_emscripten_glVertexAttribPointer,"Kc":_emscripten_glViewport,"Jc":_emscripten_memcpy_big,"Ic":_emscripten_request_pointerlock,"Hc":_emscripten_resize_heap,"P":_emscripten_run_script,"Gc":_emscripten_sample_gamepad_data,"Fc":_emscripten_set_click_callback_on_thread,"Ec":_emscripten_set_fullscreenchange_callback_on_thread,"Dc":_emscripten_set_gamepadconnected_callback_on_thread,"Bc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Ac":_emscripten_set_keypress_callback_on_thread,"zc":_emscripten_set_main_loop,"yc":_emscripten_set_touchcancel_callback_on_thread,"xc":_emscripten_set_touchend_callback_on_thread,"wc":_emscripten_set_touchmove_callback_on_thread,"vc":_emscripten_set_touchstart_callback_on_thread,"uc":_exit,"tc":_glActiveTexture,"O":_glAttachShader,"j":_glBindAttribLocation,"d":_glBindBuffer,"l":_glBindTexture,"rc":_glBlendFunc,"r":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"qc":_glClearDepthf,"pc":_glCompileShader,"nc":_glCompressedTexImage2D,"mc":_glCreateProgram,"lc":_glCreateShader,"kc":_glCullFace,"q":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"jc":_glDepthFunc,"H":_glDetachShader,"hc":_glDisable,"p":_glDisableVertexAttribArray,"gc":_glDrawArrays,"fc":_glDrawElements,"G":_glEnable,"i":_glEnableVertexAttribArray,"ec":_glFrontFace,"o":_glGenBuffers,"dc":_glGenTextures,"u":_glGetAttribLocation,"bc":_glGetFloatv,"ac":_glGetProgramInfoLog,"F":_glGetProgramiv,"$b":_glGetShaderInfoLog,"E":_glGetShaderiv,"k":_glGetString,"t":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Wb":_glShaderSource,"Vb":_glTexImage2D,"h":_glTexParameteri,"Ub":_glUniform1i,"Tb":_glUniform4f,"Sb":_glUniformMatrix4fv,"s":_glUseProgram,"g":_glVertexAttribPointer,"Rb":_glViewport,"Qb":_glfwCreateWindow,"Ob":_glfwDefaultWindowHints,"Nb":_glfwDestroyWindow,"Mb":_glfwGetCursorPos,"n":_glfwGetTime,"Lb":_glfwInit,"Kb":_glfwMakeContextCurrent,"Jb":_glfwSetCharCallback,"Ib":_glfwSetCursorEnterCallback,"Hb":_glfwSetCursorPosCallback,"Gb":_glfwSetDropCallback,"Eb":_glfwSetErrorCallback,"Db":_glfwSetKeyCallback,"Cb":_glfwSetMouseButtonCallback,"Bb":_glfwSetScrollCallback,"Ab":_glfwSetWindowIconifyCallback,"zb":_glfwSetWindowShouldClose,"yb":_glfwSetWindowSizeCallback,"xb":_glfwSwapBuffers,"D":_glfwTerminate,"f":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"vb":_nanosleep,"ub":_pthread_attr_destroy,"tb":_pthread_attr_init,"sb":_pthread_cond_destroy,"rb":_pthread_cond_init,"qb":_pthread_cond_signal,"pb":_pthread_cond_wait,"ob":_pthread_create,"mb":_pthread_join,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["De"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/audio/audio_sound_loading.wasm b/examples/web/audio/audio_sound_loading.wasm new file mode 100644 index 0000000..c74ef06 Binary files /dev/null and b/examples/web/audio/audio_sound_loading.wasm differ diff --git a/examples/web/build_examples.bat b/examples/web/build_examples.bat new file mode 100644 index 0000000..4a931ae --- /dev/null +++ b/examples/web/build_examples.bat @@ -0,0 +1,105 @@ +::@echo off +:: > Setup required Environment +:: ------------------------------------- +set RAYLIB_DIR=C:\raylib +set PATH=%PATH%;%RAYLIB_DIR%\mingw\bin +cd %~dp0 +:: . +:: > Compile all raylib web examples +:: ------------------------------------- +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_basic_window +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_input_keys +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_input_mouse +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_input_mouse_wheel +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_input_gamepad +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_input_multitouch +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_input_gestures +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_2d_camera +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_3d_camera_mode +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_3d_camera_free +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_3d_camera_first_person +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_3d_picking +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_world_screen +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_custom_logging +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_window_letterbox +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_drop_files +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_random_values +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_storage_values +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_vr_simulator +cmd /c mingw32-make PLATFORM=PLATFORM_WEB core/core_loading_thread +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_basic_shapes +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_bouncing_ball +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_colors_palette +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_logo_raylib +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_logo_raylib_anim +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_rectangle_scaling +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_lines_bezier +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_collision_area +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_following_eyes +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_easings_ball_anim +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_easings_box_anim +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_easings_rectangle_array +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_draw_ring +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_draw_circle_sector +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shapes/shapes_draw_rectangle_rounded +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB text/text_raylib_fonts +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB text/text_sprite_fonts +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB text/text_ttf_loading +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB text/text_bmfont_ttf +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB text/text_font_sdf +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB text/text_format_text +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB text/text_input_box +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB text/text_writing_anim +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB text/text_rectangle_bounds +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB text/text_unicode +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_logo_raylib +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_rectangle +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_srcrec_dstrec +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_image_drawing +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_image_generation +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_image_loading +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_image_processing +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_image_text +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_to_image +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_raw_data +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_particles_blending +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_npatch_drawing +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_background_scrolling +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_sprite_button +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_sprite_explosion +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB textures/textures_bunnymark +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_animation +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_billboard +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_box_collisions +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_cubicmap +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_first_person_maze +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_geometric_shapes +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_material_pbr +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_mesh_generation +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_mesh_picking +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_obj_loading +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_obj_viewer +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_orthographic_projection +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_rlgl_solar_system +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_skybox +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_yaw_pitch_roll +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB models/models_heightmap +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shaders/shaders_model_shader +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shaders/shaders_shapes_textures +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shaders/shaders_custom_uniform +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shaders/shaders_postprocessing +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shaders/shaders_palette_switch +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shaders/shaders_raymarching +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shaders/shaders_texture_drawing +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shaders/shaders_texture_waves +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shaders/shaders_julia_set +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB shaders/shaders_erastosthenes +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB audio/audio_module_playing +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB audio/audio_music_stream +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB audio/audio_raw_stream +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB audio/audio_sound_loading +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB physac/physics_demo +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB physac/physics_friction +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB physac/physics_movement +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB physac/physics_restitution +:: cmd /c mingw32-make PLATFORM=PLATFORM_WEB physac/physics_shatter diff --git a/examples/web/core/core_2d_camera.c b/examples/web/core/core_2d_camera.c index 8ec209d..1ae28b0 100644 --- a/examples/web/core/core_2d_camera.c +++ b/examples/web/core/core_2d_camera.c @@ -20,14 +20,14 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; Rectangle player = { 400, 280, 40, 40 }; -Rectangle buildings[MAX_BUILDINGS]; -Color buildColors[MAX_BUILDINGS]; +Rectangle buildings[MAX_BUILDINGS] = { 0 }; +Color buildColors[MAX_BUILDINGS] = { 0 }; -Camera2D camera; +Camera2D camera = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -35,7 +35,7 @@ Camera2D camera; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -44,7 +44,7 @@ int main(void) InitWindow(screenWidth, screenHeight, "raylib [core] example - 2d camera"); int spacing = 0; - + for (int i = 0; i < MAX_BUILDINGS; i++) { buildings[i].width = GetRandomValue(50, 200); @@ -53,7 +53,7 @@ int main(void) buildings[i].x = -6000 + spacing; spacing += buildings[i].width; - + buildColors[i] = (Color){ GetRandomValue(200, 240), GetRandomValue(200, 240), GetRandomValue(200, 250), 255 }; } @@ -61,13 +61,13 @@ int main(void) camera.offset = (Vector2){ 0, 0 }; camera.rotation = 0.0f; camera.zoom = 1.0f; - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -76,7 +76,7 @@ int main(void) #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -100,26 +100,26 @@ void UpdateDrawFrame(void) player.x -= 2; // Player movement camera.offset.x += 2; // Camera displacement with player movement } - + // Camera target follows player camera.target = (Vector2){ player.x + 20, player.y + 20 }; - + // Camera rotation controls if (IsKeyDown(KEY_A)) camera.rotation--; else if (IsKeyDown(KEY_S)) camera.rotation++; - + // Limit camera rotation to 80 degrees (-40 to 40) - if (camera.rotation > 40) camera.rotation = 40; + if (camera.rotation > 40) camera.rotation = 40; else if (camera.rotation < -40) camera.rotation = -40; - + // Camera zoom controls camera.zoom += ((float)GetMouseWheelMove()*0.05f); - + if (camera.zoom > 3.0f) camera.zoom = 3.0f; else if (camera.zoom < 0.1f) camera.zoom = 0.1f; - + // Camera reset (zoom and rotation) - if (IsKeyPressed(KEY_R)) + if (IsKeyPressed(KEY_R)) { camera.zoom = 1.0f; camera.rotation = 0.0f; @@ -129,32 +129,32 @@ void UpdateDrawFrame(void) // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - - Begin2dMode(camera); + + BeginMode2D(camera); DrawRectangle(-6000, 320, 13000, 8000, DARKGRAY); - + for (int i = 0; i < MAX_BUILDINGS; i++) DrawRectangleRec(buildings[i], buildColors[i]); - + DrawRectangleRec(player, RED); - - DrawRectangle(camera.target.x, -500, 1, screenHeight*4, GREEN); - DrawRectangle(-500, camera.target.y, screenWidth*4, 1, GREEN); - - End2dMode(); - + + DrawLine(camera.target.x, -screenHeight*10, camera.target.x, screenHeight*10, GREEN); + DrawLine(-screenWidth*10, camera.target.y, screenWidth*10, camera.target.y, GREEN); + + EndMode2D(); + DrawText("SCREEN AREA", 640, 10, 20, RED); - + DrawRectangle(0, 0, screenWidth, 5, RED); DrawRectangle(0, 5, 5, screenHeight - 10, RED); DrawRectangle(screenWidth - 5, 5, 5, screenHeight - 10, RED); DrawRectangle(0, screenHeight - 5, screenWidth, 5, RED); - + DrawRectangle( 10, 10, 250, 113, Fade(SKYBLUE, 0.5f)); DrawRectangleLines( 10, 10, 250, 113, BLUE); - + DrawText("Free 2d camera controls:", 20, 20, 10, BLACK); DrawText("- Right/Left to move Offset", 40, 40, 10, DARKGRAY); DrawText("- Mouse Wheel to Zoom in-out", 40, 60, 10, DARKGRAY); diff --git a/examples/web/core/core_2d_camera.html b/examples/web/core/core_2d_camera.html new file mode 100644 index 0000000..690f589 --- /dev/null +++ b/examples/web/core/core_2d_camera.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_2d_camera.js b/examples/web/core/core_2d_camera.js new file mode 100644 index 0000000..0fa32a3 --- /dev/null +++ b/examples/web/core/core_2d_camera.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5272768,DYNAMICTOP_PTR=29856;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_2d_camera.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"N":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"jc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"bc":_glDepthFunc,"G":_glDetachShader,"ac":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"E":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"Db":_glfwGetKey,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"tb":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_2d_camera.wasm b/examples/web/core/core_2d_camera.wasm new file mode 100644 index 0000000..1da9fd3 Binary files /dev/null and b/examples/web/core/core_2d_camera.wasm differ diff --git a/examples/web/core/core_3d_camera_first_person.c b/examples/web/core/core_3d_camera_first_person.c index da5ac86..6a80f6d 100644 --- a/examples/web/core/core_3d_camera_first_person.c +++ b/examples/web/core/core_3d_camera_first_person.c @@ -20,16 +20,16 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world (position, target, up vector) -Camera camera = {{ 4.0f, 2.0f, 4.0f }, { 0.0f, 1.8f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 60.0f }; +Camera camera = { 0 }; // Generates some random columns -float heights[MAX_COLUMNS]; -Vector3 positions[MAX_COLUMNS]; -Color colors[MAX_COLUMNS]; +float heights[MAX_COLUMNS] = { 0 }; +Vector3 positions[MAX_COLUMNS] = { 0 }; +Color colors[MAX_COLUMNS] = { 0 }; //Vector3 playerPosition; Vector3 playerPosition = { 4.0f, 2.0f, 4.0f }; // Define player position @@ -40,7 +40,7 @@ Vector3 playerPosition = { 4.0f, 2.0f, 4.0f }; // Define player position void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -54,7 +54,14 @@ int main(void) positions[i] = (Vector3){ GetRandomValue(-15, 15), heights[i]/2, GetRandomValue(-15, 15) }; colors[i] = (Color){ GetRandomValue(20, 255), GetRandomValue(10, 55), 30, 255 }; } - + + // Define the camera to look into our 3d world (position, target, up vector) + camera.position = (Vector3){ 4.0f, 2.0f, 4.0f }; + camera.target = (Vector3){ 0.0f, 1.8f, 0.0f }; + camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; + camera.fovy = 60.0f; + camera.type = CAMERA_PERSPECTIVE; + SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set a first person camera mode #if defined(PLATFORM_WEB) @@ -63,7 +70,7 @@ int main(void) SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -87,7 +94,7 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update camera and player position - + // Lock mouse cursor if mouse click on canvas if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) DisableCursor(); //---------------------------------------------------------------------------------- @@ -98,13 +105,13 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); DrawPlane((Vector3){ 0.0f, 0.0f, 0.0f }, (Vector2){ 32.0f, 32.0f }, LIGHTGRAY); // Draw ground DrawCube((Vector3){ -16.0f, 2.5f, 0.0f }, 1.0f, 5.0f, 32.0f, BLUE); // Draw a blue wall DrawCube((Vector3){ 16.0f, 2.5f, 0.0f }, 1.0f, 5.0f, 32.0f, LIME); // Draw a green wall DrawCube((Vector3){ 0.0f, 2.5f, 16.0f }, 32.0f, 5.0f, 1.0f, GOLD); // Draw a yellow wall - + // Draw some cubes around for (int i = 0; i < MAX_COLUMNS; i++) { @@ -112,8 +119,8 @@ void UpdateDrawFrame(void) DrawCubeWires(positions[i], 2.0f, heights[i], 2.0f, MAROON); } - End3dMode(); - + EndMode3D(); + DrawRectangle( 10, 10, 220, 70, Fade(SKYBLUE, 0.5f)); DrawRectangleLines( 10, 10, 220, 70, BLUE); diff --git a/examples/web/core/core_3d_camera_first_person.html b/examples/web/core/core_3d_camera_first_person.html new file mode 100644 index 0000000..ecdea7a --- /dev/null +++ b/examples/web/core/core_3d_camera_first_person.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_3d_camera_first_person.js b/examples/web/core/core_3d_camera_first_person.js new file mode 100644 index 0000000..a3100c1 --- /dev/null +++ b/examples/web/core/core_3d_camera_first_person.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5270160,DYNAMICTOP_PTR=27248;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_3d_camera_first_person.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"mc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"sd":_emscripten_get_gamepad_status,"hd":_emscripten_get_heap_size,"Yc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Dc":_emscripten_glActiveTexture,"tc":_emscripten_glAttachShader,"lc":_emscripten_glBeginQueryEXT,"ec":_emscripten_glBindAttribLocation,"ac":_emscripten_glBindBuffer,"Wb":_emscripten_glBindFramebuffer,"Pb":_emscripten_glBindRenderbuffer,"Gb":_emscripten_glBindTexture,"wb":_emscripten_glBindVertexArrayOES,"ob":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ee":_emscripten_glGetShaderInfoLog,"de":_emscripten_glGetShaderPrecisionFormat,"ce":_emscripten_glGetShaderSource,"be":_emscripten_glGetShaderiv,"ae":_emscripten_glGetString,"$d":_emscripten_glGetTexParameterfv,"_d":_emscripten_glGetTexParameteriv,"Zd":_emscripten_glGetUniformLocation,"Yd":_emscripten_glGetUniformfv,"Xd":_emscripten_glGetUniformiv,"Wd":_emscripten_glGetVertexAttribPointerv,"Vd":_emscripten_glGetVertexAttribfv,"Ud":_emscripten_glGetVertexAttribiv,"Td":_emscripten_glHint,"Sd":_emscripten_glIsBuffer,"Rd":_emscripten_glIsEnabled,"Qd":_emscripten_glIsFramebuffer,"Pd":_emscripten_glIsProgram,"Od":_emscripten_glIsQueryEXT,"Nd":_emscripten_glIsRenderbuffer,"Md":_emscripten_glIsShader,"Ld":_emscripten_glIsTexture,"Kd":_emscripten_glIsVertexArrayOES,"Jd":_emscripten_glLineWidth,"Id":_emscripten_glLinkProgram,"Hd":_emscripten_glPixelStorei,"Gd":_emscripten_glPolygonOffset,"Fd":_emscripten_glQueryCounterEXT,"Ed":_emscripten_glReadPixels,"Dd":_emscripten_glReleaseShaderCompiler,"Cd":_emscripten_glRenderbufferStorage,"Bd":_emscripten_glSampleCoverage,"Ad":_emscripten_glScissor,"zd":_emscripten_glShaderBinary,"yd":_emscripten_glShaderSource,"xd":_emscripten_glStencilFunc,"wd":_emscripten_glStencilFuncSeparate,"vd":_emscripten_glStencilMask,"ud":_emscripten_glStencilMaskSeparate,"td":_emscripten_glStencilOp,"rd":_emscripten_glStencilOpSeparate,"qd":_emscripten_glTexImage2D,"pd":_emscripten_glTexParameterf,"od":_emscripten_glTexParameterfv,"nd":_emscripten_glTexParameteri,"md":_emscripten_glTexParameteriv,"ld":_emscripten_glTexSubImage2D,"kd":_emscripten_glUniform1f,"jd":_emscripten_glUniform1fv,"id":_emscripten_glUniform1i,"gd":_emscripten_glUniform1iv,"fd":_emscripten_glUniform2f,"ed":_emscripten_glUniform2fv,"dd":_emscripten_glUniform2i,"cd":_emscripten_glUniform2iv,"bd":_emscripten_glUniform3f,"ad":_emscripten_glUniform3fv,"$c":_emscripten_glUniform3i,"_c":_emscripten_glUniform3iv,"Zc":_emscripten_glUniform4f,"Xc":_emscripten_glUniform4fv,"Wc":_emscripten_glUniform4i,"Vc":_emscripten_glUniform4iv,"Uc":_emscripten_glUniformMatrix2fv,"Tc":_emscripten_glUniformMatrix3fv,"Sc":_emscripten_glUniformMatrix4fv,"Rc":_emscripten_glUseProgram,"Qc":_emscripten_glValidateProgram,"Pc":_emscripten_glVertexAttrib1f,"Oc":_emscripten_glVertexAttrib1fv,"Nc":_emscripten_glVertexAttrib2f,"Mc":_emscripten_glVertexAttrib2fv,"Lc":_emscripten_glVertexAttrib3f,"Kc":_emscripten_glVertexAttrib3fv,"Jc":_emscripten_glVertexAttrib4f,"Ic":_emscripten_glVertexAttrib4fv,"Hc":_emscripten_glVertexAttribDivisorANGLE,"Gc":_emscripten_glVertexAttribPointer,"Fc":_emscripten_glViewport,"Ec":_emscripten_memcpy_big,"Cc":_emscripten_request_pointerlock,"Bc":_emscripten_resize_heap,"O":_emscripten_run_script,"Ac":_emscripten_sample_gamepad_data,"zc":_emscripten_set_click_callback_on_thread,"yc":_emscripten_set_fullscreenchange_callback_on_thread,"xc":_emscripten_set_gamepadconnected_callback_on_thread,"wc":_emscripten_set_gamepaddisconnected_callback_on_thread,"vc":_emscripten_set_keypress_callback_on_thread,"uc":_emscripten_set_main_loop,"sc":_emscripten_set_touchcancel_callback_on_thread,"rc":_emscripten_set_touchend_callback_on_thread,"qc":_emscripten_set_touchmove_callback_on_thread,"pc":_emscripten_set_touchstart_callback_on_thread,"oc":_exit,"nc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"kc":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"jc":_glClearDepthf,"ic":_glCompileShader,"hc":_glCompressedTexImage2D,"gc":_glCreateProgram,"fc":_glCreateShader,"dc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"cc":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"bc":_glDrawArrays,"$b":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"_b":_glFrontFace,"n":_glGenBuffers,"Zb":_glGenTextures,"t":_glGetAttribLocation,"Yb":_glGetFloatv,"Xb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Vb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Ub":_glLinkProgram,"Tb":_glPixelStorei,"Sb":_glReadPixels,"Rb":_glShaderSource,"Qb":_glTexImage2D,"g":_glTexParameteri,"Ob":_glUniform1i,"Nb":_glUniform4f,"Mb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Lb":_glViewport,"Kb":_glfwCreateWindow,"Jb":_glfwDefaultWindowHints,"Ib":_glfwDestroyWindow,"Hb":_glfwGetCursorPos,"Fb":_glfwGetKey,"Eb":_glfwGetMouseButton,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["le"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_3d_camera_first_person.wasm b/examples/web/core/core_3d_camera_first_person.wasm new file mode 100644 index 0000000..c4c132e Binary files /dev/null and b/examples/web/core/core_3d_camera_first_person.wasm differ diff --git a/examples/web/core/core_3d_camera_free.c b/examples/web/core/core_3d_camera_free.c index e4d1ecf..d390d05 100644 --- a/examples/web/core/core_3d_camera_free.c +++ b/examples/web/core/core_3d_camera_free.c @@ -18,11 +18,11 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world -Camera camera; +Camera camera = { 0 }; Vector3 cubePosition = { 0.0f, 0.0f, 0.0f }; //---------------------------------------------------------------------------------- @@ -31,7 +31,7 @@ Vector3 cubePosition = { 0.0f, 0.0f, 0.0f }; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -44,7 +44,8 @@ int main(void) camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 45.0f; // Camera field-of-view Y - + camera.type = CAMERA_PERSPECTIVE; // Camera mode type + SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode #if defined(PLATFORM_WEB) @@ -52,7 +53,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -76,6 +77,8 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update internal camera and our camera + + if (IsKeyDown('Z')) camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; //---------------------------------------------------------------------------------- // Draw @@ -84,18 +87,18 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED); DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON); DrawGrid(10, 1.0f); - End3dMode(); + EndMode3D(); DrawRectangle( 10, 10, 320, 133, Fade(SKYBLUE, 0.5f)); DrawRectangleLines( 10, 10, 320, 133, BLUE); - + DrawText("Free camera default controls:", 20, 20, 10, BLACK); DrawText("- Mouse Wheel to Zoom in-out", 40, 40, 10, DARKGRAY); DrawText("- Mouse Wheel Pressed to Pan", 40, 60, 10, DARKGRAY); diff --git a/examples/web/core/core_3d_camera_free.html b/examples/web/core/core_3d_camera_free.html new file mode 100644 index 0000000..4d69633 --- /dev/null +++ b/examples/web/core/core_3d_camera_free.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_3d_camera_free.js b/examples/web/core/core_3d_camera_free.js new file mode 100644 index 0000000..df8ea05 --- /dev/null +++ b/examples/web/core/core_3d_camera_free.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269856,DYNAMICTOP_PTR=26944;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_3d_camera_free.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"mc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"sd":_emscripten_get_gamepad_status,"hd":_emscripten_get_heap_size,"Yc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Dc":_emscripten_glActiveTexture,"tc":_emscripten_glAttachShader,"lc":_emscripten_glBeginQueryEXT,"ec":_emscripten_glBindAttribLocation,"ac":_emscripten_glBindBuffer,"Wb":_emscripten_glBindFramebuffer,"Pb":_emscripten_glBindRenderbuffer,"Gb":_emscripten_glBindTexture,"wb":_emscripten_glBindVertexArrayOES,"ob":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ee":_emscripten_glGetShaderInfoLog,"de":_emscripten_glGetShaderPrecisionFormat,"ce":_emscripten_glGetShaderSource,"be":_emscripten_glGetShaderiv,"ae":_emscripten_glGetString,"$d":_emscripten_glGetTexParameterfv,"_d":_emscripten_glGetTexParameteriv,"Zd":_emscripten_glGetUniformLocation,"Yd":_emscripten_glGetUniformfv,"Xd":_emscripten_glGetUniformiv,"Wd":_emscripten_glGetVertexAttribPointerv,"Vd":_emscripten_glGetVertexAttribfv,"Ud":_emscripten_glGetVertexAttribiv,"Td":_emscripten_glHint,"Sd":_emscripten_glIsBuffer,"Rd":_emscripten_glIsEnabled,"Qd":_emscripten_glIsFramebuffer,"Pd":_emscripten_glIsProgram,"Od":_emscripten_glIsQueryEXT,"Nd":_emscripten_glIsRenderbuffer,"Md":_emscripten_glIsShader,"Ld":_emscripten_glIsTexture,"Kd":_emscripten_glIsVertexArrayOES,"Jd":_emscripten_glLineWidth,"Id":_emscripten_glLinkProgram,"Hd":_emscripten_glPixelStorei,"Gd":_emscripten_glPolygonOffset,"Fd":_emscripten_glQueryCounterEXT,"Ed":_emscripten_glReadPixels,"Dd":_emscripten_glReleaseShaderCompiler,"Cd":_emscripten_glRenderbufferStorage,"Bd":_emscripten_glSampleCoverage,"Ad":_emscripten_glScissor,"zd":_emscripten_glShaderBinary,"yd":_emscripten_glShaderSource,"xd":_emscripten_glStencilFunc,"wd":_emscripten_glStencilFuncSeparate,"vd":_emscripten_glStencilMask,"ud":_emscripten_glStencilMaskSeparate,"td":_emscripten_glStencilOp,"rd":_emscripten_glStencilOpSeparate,"qd":_emscripten_glTexImage2D,"pd":_emscripten_glTexParameterf,"od":_emscripten_glTexParameterfv,"nd":_emscripten_glTexParameteri,"md":_emscripten_glTexParameteriv,"ld":_emscripten_glTexSubImage2D,"kd":_emscripten_glUniform1f,"jd":_emscripten_glUniform1fv,"id":_emscripten_glUniform1i,"gd":_emscripten_glUniform1iv,"fd":_emscripten_glUniform2f,"ed":_emscripten_glUniform2fv,"dd":_emscripten_glUniform2i,"cd":_emscripten_glUniform2iv,"bd":_emscripten_glUniform3f,"ad":_emscripten_glUniform3fv,"$c":_emscripten_glUniform3i,"_c":_emscripten_glUniform3iv,"Zc":_emscripten_glUniform4f,"Xc":_emscripten_glUniform4fv,"Wc":_emscripten_glUniform4i,"Vc":_emscripten_glUniform4iv,"Uc":_emscripten_glUniformMatrix2fv,"Tc":_emscripten_glUniformMatrix3fv,"Sc":_emscripten_glUniformMatrix4fv,"Rc":_emscripten_glUseProgram,"Qc":_emscripten_glValidateProgram,"Pc":_emscripten_glVertexAttrib1f,"Oc":_emscripten_glVertexAttrib1fv,"Nc":_emscripten_glVertexAttrib2f,"Mc":_emscripten_glVertexAttrib2fv,"Lc":_emscripten_glVertexAttrib3f,"Kc":_emscripten_glVertexAttrib3fv,"Jc":_emscripten_glVertexAttrib4f,"Ic":_emscripten_glVertexAttrib4fv,"Hc":_emscripten_glVertexAttribDivisorANGLE,"Gc":_emscripten_glVertexAttribPointer,"Fc":_emscripten_glViewport,"Ec":_emscripten_memcpy_big,"Cc":_emscripten_request_pointerlock,"Bc":_emscripten_resize_heap,"O":_emscripten_run_script,"Ac":_emscripten_sample_gamepad_data,"zc":_emscripten_set_click_callback_on_thread,"yc":_emscripten_set_fullscreenchange_callback_on_thread,"xc":_emscripten_set_gamepadconnected_callback_on_thread,"wc":_emscripten_set_gamepaddisconnected_callback_on_thread,"vc":_emscripten_set_keypress_callback_on_thread,"uc":_emscripten_set_main_loop,"sc":_emscripten_set_touchcancel_callback_on_thread,"rc":_emscripten_set_touchend_callback_on_thread,"qc":_emscripten_set_touchmove_callback_on_thread,"pc":_emscripten_set_touchstart_callback_on_thread,"oc":_exit,"nc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"kc":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"jc":_glClearDepthf,"ic":_glCompileShader,"hc":_glCompressedTexImage2D,"gc":_glCreateProgram,"fc":_glCreateShader,"dc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"cc":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"bc":_glDrawArrays,"$b":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"_b":_glFrontFace,"n":_glGenBuffers,"Zb":_glGenTextures,"t":_glGetAttribLocation,"Yb":_glGetFloatv,"Xb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Vb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Ub":_glLinkProgram,"Tb":_glPixelStorei,"Sb":_glReadPixels,"Rb":_glShaderSource,"Qb":_glTexImage2D,"g":_glTexParameteri,"Ob":_glUniform1i,"Nb":_glUniform4f,"Mb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Lb":_glViewport,"Kb":_glfwCreateWindow,"Jb":_glfwDefaultWindowHints,"Ib":_glfwDestroyWindow,"Hb":_glfwGetCursorPos,"Fb":_glfwGetKey,"Eb":_glfwGetMouseButton,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["le"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_3d_camera_free.wasm b/examples/web/core/core_3d_camera_free.wasm new file mode 100644 index 0000000..8b69b10 Binary files /dev/null and b/examples/web/core/core_3d_camera_free.wasm differ diff --git a/examples/web/core/core_3d_camera_mode.c b/examples/web/core/core_3d_camera_mode.c index 2629147..a49a1dc 100644 --- a/examples/web/core/core_3d_camera_mode.c +++ b/examples/web/core/core_3d_camera_mode.c @@ -33,9 +33,9 @@ Vector3 cubePosition = { 0.0f, 0.0f, 0.0f }; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -53,7 +53,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { diff --git a/examples/web/core/core_3d_camera_mode.html b/examples/web/core/core_3d_camera_mode.html new file mode 100644 index 0000000..b4e9abd --- /dev/null +++ b/examples/web/core/core_3d_camera_mode.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_3d_camera_mode.js b/examples/web/core/core_3d_camera_mode.js new file mode 100644 index 0000000..417b137 --- /dev/null +++ b/examples/web/core/core_3d_camera_mode.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269680,DYNAMICTOP_PTR=26768;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_3d_camera_mode.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"O":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"ac":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"wb":_glfwSetKeyCallback,"vb":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"ob":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_3d_camera_mode.wasm b/examples/web/core/core_3d_camera_mode.wasm new file mode 100644 index 0000000..fc50d08 Binary files /dev/null and b/examples/web/core/core_3d_camera_mode.wasm differ diff --git a/examples/web/core/core_3d_picking.c b/examples/web/core/core_3d_picking.c index e5ea4aa..01e0b7e 100644 --- a/examples/web/core/core_3d_picking.c +++ b/examples/web/core/core_3d_picking.c @@ -18,16 +18,16 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world -Camera camera; +Camera camera = { 0 }; Vector3 cubePosition = { 0.0f, 1.0f, 0.0f }; Vector3 cubeSize = { 2.0f, 2.0f, 2.0f }; -Ray ray; // Picking line ray +Ray ray = { 0 }; // Picking line ray bool collision = false; @@ -37,7 +37,7 @@ bool collision = false; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -57,7 +57,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -81,14 +81,13 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update internal camera and our camera - + if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) { - // NOTE: This function is NOT WORKING properly! ray = GetMouseRay(GetMousePosition(), camera); - - // TODO: Check collision between ray and box - collision = CheckCollisionRayBox(ray, + + // Check collision between ray and box + collision = CheckCollisionRayBox(ray, (BoundingBox){(Vector3){ cubePosition.x - cubeSize.x/2, cubePosition.y - cubeSize.y/2, cubePosition.z - cubeSize.z/2 }, (Vector3){ cubePosition.x + cubeSize.x/2, cubePosition.y + cubeSize.y/2, cubePosition.z + cubeSize.z/2 }}); } @@ -100,9 +99,9 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); - if (collision) + if (collision) { DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, RED); DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, MAROON); @@ -114,16 +113,16 @@ void UpdateDrawFrame(void) DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, GRAY); DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, DARKGRAY); } - + DrawRay(ray, MAROON); - + DrawGrid(10, 1.0f); - End3dMode(); - + EndMode3D(); + DrawText("Try selecting the box with mouse!", 240, 10, 20, DARKGRAY); - - if(collision) DrawText("BOX SELECTED", (screenWidth - MeasureText("BOX SELECTED", 30)) / 2, screenHeight * 0.1f, 30, GREEN); + + if(collision) DrawText("BOX SELECTED", (screenWidth - MeasureText("BOX SELECTED", 30)) / 2, screenHeight * 0.1f, 30, GREEN); DrawFPS(10, 10); diff --git a/examples/web/core/core_3d_picking.html b/examples/web/core/core_3d_picking.html new file mode 100644 index 0000000..4b8efac --- /dev/null +++ b/examples/web/core/core_3d_picking.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_3d_picking.js b/examples/web/core/core_3d_picking.js new file mode 100644 index 0000000..dcf588e --- /dev/null +++ b/examples/web/core/core_3d_picking.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269760,DYNAMICTOP_PTR=26848;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_3d_picking.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"mc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"sd":_emscripten_get_gamepad_status,"hd":_emscripten_get_heap_size,"Yc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Dc":_emscripten_glActiveTexture,"tc":_emscripten_glAttachShader,"lc":_emscripten_glBeginQueryEXT,"ec":_emscripten_glBindAttribLocation,"ac":_emscripten_glBindBuffer,"Wb":_emscripten_glBindFramebuffer,"Pb":_emscripten_glBindRenderbuffer,"Gb":_emscripten_glBindTexture,"wb":_emscripten_glBindVertexArrayOES,"ob":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ee":_emscripten_glGetShaderInfoLog,"de":_emscripten_glGetShaderPrecisionFormat,"ce":_emscripten_glGetShaderSource,"be":_emscripten_glGetShaderiv,"ae":_emscripten_glGetString,"$d":_emscripten_glGetTexParameterfv,"_d":_emscripten_glGetTexParameteriv,"Zd":_emscripten_glGetUniformLocation,"Yd":_emscripten_glGetUniformfv,"Xd":_emscripten_glGetUniformiv,"Wd":_emscripten_glGetVertexAttribPointerv,"Vd":_emscripten_glGetVertexAttribfv,"Ud":_emscripten_glGetVertexAttribiv,"Td":_emscripten_glHint,"Sd":_emscripten_glIsBuffer,"Rd":_emscripten_glIsEnabled,"Qd":_emscripten_glIsFramebuffer,"Pd":_emscripten_glIsProgram,"Od":_emscripten_glIsQueryEXT,"Nd":_emscripten_glIsRenderbuffer,"Md":_emscripten_glIsShader,"Ld":_emscripten_glIsTexture,"Kd":_emscripten_glIsVertexArrayOES,"Jd":_emscripten_glLineWidth,"Id":_emscripten_glLinkProgram,"Hd":_emscripten_glPixelStorei,"Gd":_emscripten_glPolygonOffset,"Fd":_emscripten_glQueryCounterEXT,"Ed":_emscripten_glReadPixels,"Dd":_emscripten_glReleaseShaderCompiler,"Cd":_emscripten_glRenderbufferStorage,"Bd":_emscripten_glSampleCoverage,"Ad":_emscripten_glScissor,"zd":_emscripten_glShaderBinary,"yd":_emscripten_glShaderSource,"xd":_emscripten_glStencilFunc,"wd":_emscripten_glStencilFuncSeparate,"vd":_emscripten_glStencilMask,"ud":_emscripten_glStencilMaskSeparate,"td":_emscripten_glStencilOp,"rd":_emscripten_glStencilOpSeparate,"qd":_emscripten_glTexImage2D,"pd":_emscripten_glTexParameterf,"od":_emscripten_glTexParameterfv,"nd":_emscripten_glTexParameteri,"md":_emscripten_glTexParameteriv,"ld":_emscripten_glTexSubImage2D,"kd":_emscripten_glUniform1f,"jd":_emscripten_glUniform1fv,"id":_emscripten_glUniform1i,"gd":_emscripten_glUniform1iv,"fd":_emscripten_glUniform2f,"ed":_emscripten_glUniform2fv,"dd":_emscripten_glUniform2i,"cd":_emscripten_glUniform2iv,"bd":_emscripten_glUniform3f,"ad":_emscripten_glUniform3fv,"$c":_emscripten_glUniform3i,"_c":_emscripten_glUniform3iv,"Zc":_emscripten_glUniform4f,"Xc":_emscripten_glUniform4fv,"Wc":_emscripten_glUniform4i,"Vc":_emscripten_glUniform4iv,"Uc":_emscripten_glUniformMatrix2fv,"Tc":_emscripten_glUniformMatrix3fv,"Sc":_emscripten_glUniformMatrix4fv,"Rc":_emscripten_glUseProgram,"Qc":_emscripten_glValidateProgram,"Pc":_emscripten_glVertexAttrib1f,"Oc":_emscripten_glVertexAttrib1fv,"Nc":_emscripten_glVertexAttrib2f,"Mc":_emscripten_glVertexAttrib2fv,"Lc":_emscripten_glVertexAttrib3f,"Kc":_emscripten_glVertexAttrib3fv,"Jc":_emscripten_glVertexAttrib4f,"Ic":_emscripten_glVertexAttrib4fv,"Hc":_emscripten_glVertexAttribDivisorANGLE,"Gc":_emscripten_glVertexAttribPointer,"Fc":_emscripten_glViewport,"Ec":_emscripten_memcpy_big,"Cc":_emscripten_request_pointerlock,"Bc":_emscripten_resize_heap,"O":_emscripten_run_script,"Ac":_emscripten_sample_gamepad_data,"zc":_emscripten_set_click_callback_on_thread,"yc":_emscripten_set_fullscreenchange_callback_on_thread,"xc":_emscripten_set_gamepadconnected_callback_on_thread,"wc":_emscripten_set_gamepaddisconnected_callback_on_thread,"vc":_emscripten_set_keypress_callback_on_thread,"uc":_emscripten_set_main_loop,"sc":_emscripten_set_touchcancel_callback_on_thread,"rc":_emscripten_set_touchend_callback_on_thread,"qc":_emscripten_set_touchmove_callback_on_thread,"pc":_emscripten_set_touchstart_callback_on_thread,"oc":_exit,"nc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"kc":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"jc":_glClearDepthf,"ic":_glCompileShader,"hc":_glCompressedTexImage2D,"gc":_glCreateProgram,"fc":_glCreateShader,"dc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"cc":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"bc":_glDrawArrays,"$b":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"_b":_glFrontFace,"n":_glGenBuffers,"Zb":_glGenTextures,"t":_glGetAttribLocation,"Yb":_glGetFloatv,"Xb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Vb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Ub":_glLinkProgram,"Tb":_glPixelStorei,"Sb":_glReadPixels,"Rb":_glShaderSource,"Qb":_glTexImage2D,"g":_glTexParameteri,"Ob":_glUniform1i,"Nb":_glUniform4f,"Mb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Lb":_glViewport,"Kb":_glfwCreateWindow,"Jb":_glfwDefaultWindowHints,"Ib":_glfwDestroyWindow,"Hb":_glfwGetCursorPos,"Fb":_glfwGetKey,"Eb":_glfwGetMouseButton,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["le"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_3d_picking.wasm b/examples/web/core/core_3d_picking.wasm new file mode 100644 index 0000000..b01ab18 Binary files /dev/null and b/examples/web/core/core_3d_picking.wasm differ diff --git a/examples/web/core/core_basic_window.c b/examples/web/core/core_basic_window.c index 2c42f89..8a178fc 100644 --- a/examples/web/core/core_basic_window.c +++ b/examples/web/core/core_basic_window.c @@ -22,8 +22,8 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -31,7 +31,7 @@ int screenHeight = 450; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -44,7 +44,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { diff --git a/examples/web/core/core_basic_window.html b/examples/web/core/core_basic_window.html new file mode 100644 index 0000000..0e37012 --- /dev/null +++ b/examples/web/core/core_basic_window.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_basic_window.js b/examples/web/core/core_basic_window.js new file mode 100644 index 0000000..063027a --- /dev/null +++ b/examples/web/core/core_basic_window.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269600,DYNAMICTOP_PTR=26688;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_basic_window.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_basic_window.wasm b/examples/web/core/core_basic_window.wasm new file mode 100644 index 0000000..7e0b189 Binary files /dev/null and b/examples/web/core/core_basic_window.wasm differ diff --git a/examples/web/core/core_custom_logging.c b/examples/web/core/core_custom_logging.c index 10c6fdd..29d727e 100644 --- a/examples/web/core/core_custom_logging.c +++ b/examples/web/core/core_custom_logging.c @@ -23,24 +23,24 @@ // Custom logging function void LogCustom(int msgType, const char *text, va_list args) { - char timeStr[64]; - time_t now = time(NULL); - struct tm *tm_info = localtime(&now); - - strftime(timeStr, sizeof(timeStr), "%Y-%m-%d %H:%M:%S", tm_info); - printf("[%s] ", timeStr); - - switch (msgType) - { - case LOG_INFO: printf("[INFO] : "); break; - case LOG_ERROR: printf("[ERROR]: "); break; - case LOG_WARNING: printf("[WARN] : "); break; - case LOG_DEBUG: printf("[DEBUG]: "); break; - default: break; - } - - vprintf(text, args); - printf("\n"); + char timeStr[64]; + time_t now = time(NULL); + struct tm *tm_info = localtime(&now); + + strftime(timeStr, sizeof(timeStr), "%Y-%m-%d %H:%M:%S", tm_info); + printf("[%s] ", timeStr); + + switch (msgType) + { + case LOG_INFO: printf("[INFO] : "); break; + case LOG_ERROR: printf("[ERROR]: "); break; + case LOG_WARNING: printf("[WARN] : "); break; + case LOG_DEBUG: printf("[DEBUG]: "); break; + default: break; + } + + vprintf(text, args); + printf("\n"); } //---------------------------------------------------------------------------------- @@ -51,31 +51,30 @@ const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - //---------------------------------------------------------------------------------- // Module Functions Declaration //---------------------------------------------------------------------------------- void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main(int argc, char* argv[]) +int main(void) { - // Initialization - //-------------------------------------------------------------------------------------- - // First thing we do is setting our custom logger to ensure everything raylib logs - // will use our own logger instead of its internal one - SetTraceLogCallback(LogCustom); + // Initialization + //-------------------------------------------------------------------------------------- + // First thing we do is setting our custom logger to ensure everything raylib logs + // will use our own logger instead of its internal one + SetTraceLogCallback(LogCustom); - InitWindow(screenWidth, screenHeight, "raylib [core] example - custom logging"); + InitWindow(screenWidth, screenHeight, "raylib [core] example - custom logging"); #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -83,12 +82,12 @@ int main(int argc, char* argv[]) } #endif - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- - return 0; + return 0; } //---------------------------------------------------------------------------------- diff --git a/examples/web/core/core_custom_logging.html b/examples/web/core/core_custom_logging.html new file mode 100644 index 0000000..6d527b2 --- /dev/null +++ b/examples/web/core/core_custom_logging.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_custom_logging.js b/examples/web/core/core_custom_logging.js new file mode 100644 index 0000000..0ef5302 --- /dev/null +++ b/examples/web/core/core_custom_logging.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269712,DYNAMICTOP_PTR=26800;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_custom_logging.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};__ATINIT__.push({func:function(){___emscripten_environ_constructor()}});function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var ENV={};function ___buildEnvironment(environ){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV["USER"]=ENV["LOGNAME"]="web_user";ENV["PATH"]="/";ENV["PWD"]="/";ENV["HOME"]="/home/web_user";ENV["LANG"]="C.UTF-8";ENV["_"]=Module["thisProgram"];poolPtr=getMemory(TOTAL_ENV_SIZE);envPtr=getMemory(MAX_ENV_VALUES*4);HEAP32[envPtr>>2]=poolPtr;HEAP32[environ>>2]=envPtr}else{envPtr=HEAP32[environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in ENV){if(typeof ENV[key]==="string"){var line=key+"="+ENV[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2]=(new Date).getTimezoneOffset()*60;var winter=new Date(2e3,0,1);var summer=new Date(2e3,6,1);HEAP32[__get_daylight()>>2]=Number(winter.getTimezoneOffset()!=summer.getTimezoneOffset());function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocate(intArrayFromString(winterName),"i8",ALLOC_NORMAL);var summerNamePtr=allocate(intArrayFromString(summerName),"i8",ALLOC_NORMAL);if(summer.getTimezoneOffset()>2]=winterNamePtr;HEAP32[__get_tzname()+4>>2]=summerNamePtr}else{HEAP32[__get_tzname()>>2]=summerNamePtr;HEAP32[__get_tzname()+4>>2]=winterNamePtr}}function _localtime_r(time,tmPtr){_tzset();var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(2e3,6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst;var zonePtr=HEAP32[__get_tzname()+(dst?4:0)>>2];HEAP32[tmPtr+40>>2]=zonePtr;return tmPtr}function _localtime(time){return _localtime_r(time,___tm_current)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function _usleep(useconds){var msec=useconds/1e3;if((ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&self["performance"]&&self["performance"]["now"]){var start=self["performance"]["now"]();while(self["performance"]["now"]()-start>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]);return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){var day=new Date(date.tm_year+1900,date.tm_mon+1,date.tm_mday,0,0,0,0);return day.getDay()||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"nc":___buildEnvironment,"jb":___lock,"y":___setErrNo,"Qa":___syscall140,"Fa":___syscall145,"x":___syscall146,"l":___syscall221,"aa":___syscall5,"R":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"jd":_emscripten_get_gamepad_status,"_c":_emscripten_get_heap_size,"Pc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"vc":_emscripten_glActiveTexture,"mc":_emscripten_glAttachShader,"gc":_emscripten_glBeginQueryEXT,"bc":_emscripten_glBindAttribLocation,"Wb":_emscripten_glBindBuffer,"Pb":_emscripten_glBindFramebuffer,"Hb":_emscripten_glBindRenderbuffer,"xb":_emscripten_glBindTexture,"qb":_emscripten_glBindVertexArrayOES,"lb":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"fe":_emscripten_glGetRenderbufferParameteriv,"ee":_emscripten_glGetShaderInfoLog,"de":_emscripten_glGetShaderPrecisionFormat,"ce":_emscripten_glGetShaderSource,"be":_emscripten_glGetShaderiv,"ae":_emscripten_glGetString,"$d":_emscripten_glGetTexParameterfv,"_d":_emscripten_glGetTexParameteriv,"Zd":_emscripten_glGetUniformLocation,"Yd":_emscripten_glGetUniformfv,"Xd":_emscripten_glGetUniformiv,"Wd":_emscripten_glGetVertexAttribPointerv,"Vd":_emscripten_glGetVertexAttribfv,"Ud":_emscripten_glGetVertexAttribiv,"Td":_emscripten_glHint,"Sd":_emscripten_glIsBuffer,"Rd":_emscripten_glIsEnabled,"Qd":_emscripten_glIsFramebuffer,"Pd":_emscripten_glIsProgram,"Od":_emscripten_glIsQueryEXT,"Nd":_emscripten_glIsRenderbuffer,"Md":_emscripten_glIsShader,"Ld":_emscripten_glIsTexture,"Kd":_emscripten_glIsVertexArrayOES,"Jd":_emscripten_glLineWidth,"Id":_emscripten_glLinkProgram,"Hd":_emscripten_glPixelStorei,"Gd":_emscripten_glPolygonOffset,"Fd":_emscripten_glQueryCounterEXT,"Ed":_emscripten_glReadPixels,"Dd":_emscripten_glReleaseShaderCompiler,"Cd":_emscripten_glRenderbufferStorage,"Bd":_emscripten_glSampleCoverage,"Ad":_emscripten_glScissor,"zd":_emscripten_glShaderBinary,"yd":_emscripten_glShaderSource,"xd":_emscripten_glStencilFunc,"wd":_emscripten_glStencilFuncSeparate,"vd":_emscripten_glStencilMask,"ud":_emscripten_glStencilMaskSeparate,"td":_emscripten_glStencilOp,"sd":_emscripten_glStencilOpSeparate,"rd":_emscripten_glTexImage2D,"qd":_emscripten_glTexParameterf,"pd":_emscripten_glTexParameterfv,"od":_emscripten_glTexParameteri,"nd":_emscripten_glTexParameteriv,"md":_emscripten_glTexSubImage2D,"ld":_emscripten_glUniform1f,"kd":_emscripten_glUniform1fv,"id":_emscripten_glUniform1i,"hd":_emscripten_glUniform1iv,"gd":_emscripten_glUniform2f,"fd":_emscripten_glUniform2fv,"ed":_emscripten_glUniform2i,"dd":_emscripten_glUniform2iv,"cd":_emscripten_glUniform3f,"bd":_emscripten_glUniform3fv,"ad":_emscripten_glUniform3i,"$c":_emscripten_glUniform3iv,"Zc":_emscripten_glUniform4f,"Yc":_emscripten_glUniform4fv,"Xc":_emscripten_glUniform4i,"Wc":_emscripten_glUniform4iv,"Vc":_emscripten_glUniformMatrix2fv,"Uc":_emscripten_glUniformMatrix3fv,"Tc":_emscripten_glUniformMatrix4fv,"Sc":_emscripten_glUseProgram,"Rc":_emscripten_glValidateProgram,"Qc":_emscripten_glVertexAttrib1f,"Oc":_emscripten_glVertexAttrib1fv,"Nc":_emscripten_glVertexAttrib2f,"Mc":_emscripten_glVertexAttrib2fv,"Lc":_emscripten_glVertexAttrib3f,"Kc":_emscripten_glVertexAttrib3fv,"Jc":_emscripten_glVertexAttrib4f,"Ic":_emscripten_glVertexAttrib4fv,"Hc":_emscripten_glVertexAttribDivisorANGLE,"Gc":_emscripten_glVertexAttribPointer,"Fc":_emscripten_glViewport,"Ec":_emscripten_memcpy_big,"Dc":_emscripten_request_pointerlock,"Cc":_emscripten_resize_heap,"N":_emscripten_run_script,"Bc":_emscripten_sample_gamepad_data,"Ac":_emscripten_set_click_callback_on_thread,"zc":_emscripten_set_fullscreenchange_callback_on_thread,"yc":_emscripten_set_gamepadconnected_callback_on_thread,"xc":_emscripten_set_gamepaddisconnected_callback_on_thread,"wc":_emscripten_set_keypress_callback_on_thread,"uc":_emscripten_set_main_loop,"tc":_emscripten_set_touchcancel_callback_on_thread,"sc":_emscripten_set_touchend_callback_on_thread,"rc":_emscripten_set_touchmove_callback_on_thread,"qc":_emscripten_set_touchstart_callback_on_thread,"pc":_exit,"oc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"lc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"kc":_glClearDepthf,"jc":_glCompileShader,"ic":_glCompressedTexImage2D,"hc":_glCreateProgram,"fc":_glCreateShader,"ec":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"dc":_glDepthFunc,"G":_glDetachShader,"cc":_glDisable,"o":_glDisableVertexAttribArray,"ac":_glDrawArrays,"$b":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"_b":_glFrontFace,"n":_glGenBuffers,"Zb":_glGenTextures,"t":_glGetAttribLocation,"Yb":_glGetFloatv,"Xb":_glGetProgramInfoLog,"E":_glGetProgramiv,"Vb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Ub":_glLinkProgram,"Tb":_glPixelStorei,"Sb":_glReadPixels,"Rb":_glShaderSource,"Qb":_glTexImage2D,"g":_glTexParameteri,"Ob":_glUniform1i,"Nb":_glUniform4f,"Mb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Lb":_glViewport,"Kb":_glfwCreateWindow,"Jb":_glfwDefaultWindowHints,"Ib":_glfwDestroyWindow,"Gb":_glfwGetCursorPos,"m":_glfwGetTime,"Fb":_glfwInit,"Eb":_glfwMakeContextCurrent,"Db":_glfwSetCharCallback,"Cb":_glfwSetCursorEnterCallback,"Bb":_glfwSetCursorPosCallback,"Ab":_glfwSetDropCallback,"zb":_glfwSetErrorCallback,"yb":_glfwSetKeyCallback,"wb":_glfwSetMouseButtonCallback,"vb":_glfwSetScrollCallback,"ub":_glfwSetWindowIconifyCallback,"tb":_glfwSetWindowShouldClose,"sb":_glfwSetWindowSizeCallback,"rb":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"pb":_localtime,"ob":_nanosleep,"nb":_strftime,"z":_time,"mb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___emscripten_environ_constructor=Module["___emscripten_environ_constructor"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["he"].apply(null,arguments)};var __get_daylight=Module["__get_daylight"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var __get_timezone=Module["__get_timezone"]=function(){return Module["asm"]["je"].apply(null,arguments)};var __get_tzname=Module["__get_tzname"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["ye"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_custom_logging.wasm b/examples/web/core/core_custom_logging.wasm new file mode 100644 index 0000000..25dda3d Binary files /dev/null and b/examples/web/core/core_custom_logging.wasm differ diff --git a/examples/web/core/core_drop_files.c b/examples/web/core/core_drop_files.c index 0bb1a41..27ca479 100644 --- a/examples/web/core/core_drop_files.c +++ b/examples/web/core/core_drop_files.c @@ -18,20 +18,19 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; int count = 0; char **droppedFiles; - //---------------------------------------------------------------------------------- // Module Functions Declaration //---------------------------------------------------------------------------------- void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -44,7 +43,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -55,7 +54,7 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- ClearDroppedFiles(); // Clear internal buffers - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -85,15 +84,15 @@ void UpdateDrawFrame(void) else { DrawText("Dropped files:", 100, 40, 20, DARKGRAY); - + for (int i = 0; i < count; i++) { if (i%2 == 0) DrawRectangle(0, 85 + 40*i, screenWidth, 40, Fade(LIGHTGRAY, 0.5f)); else DrawRectangle(0, 85 + 40*i, screenWidth, 40, Fade(LIGHTGRAY, 0.3f)); - + DrawText(droppedFiles[i], 120, 100 + 40*i, 10, GRAY); } - + DrawText("Drop new files...", 100, 110 + 40*count, 20, DARKGRAY); } diff --git a/examples/web/core/core_drop_files.html b/examples/web/core/core_drop_files.html new file mode 100644 index 0000000..90c1da2 --- /dev/null +++ b/examples/web/core/core_drop_files.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_drop_files.js b/examples/web/core/core_drop_files.js new file mode 100644 index 0000000..835b468 --- /dev/null +++ b/examples/web/core/core_drop_files.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269632,DYNAMICTOP_PTR=26720;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_drop_files.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_drop_files.wasm b/examples/web/core/core_drop_files.wasm new file mode 100644 index 0000000..4382676 Binary files /dev/null and b/examples/web/core/core_drop_files.wasm differ diff --git a/examples/web/core/core_input_gamepad.c b/examples/web/core/core_input_gamepad.c index f0eee87..eea237b 100644 --- a/examples/web/core/core_input_gamepad.c +++ b/examples/web/core/core_input_gamepad.c @@ -3,15 +3,15 @@ * raylib [core] example - Gamepad input * * NOTE: This example requires a Gamepad connected to the system -* raylib is configured to work with the following gamepads: +* raylib is configured to work with the following gamepads: * - Xbox 360 Controller (Xbox 360, Xbox One) -* - PLAYSTATION(R)3 Controller +* - PLAYSTATION(R)3 Controller * Check raylib.h for buttons configuration * -* This example has been created using raylib 1.7 (www.raylib.com) +* This example has been created using raylib 2.5 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * -* Copyright (c) 2017 Ramon Santamaria (@raysan5) +* Copyright (c) 2013-2019 Ramon Santamaria (@raysan5) * ********************************************************************************************/ @@ -33,11 +33,11 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; -Texture2D texPs3Pad; -Texture2D texXboxPad; +Texture2D texPs3Pad = { 0 }; +Texture2D texXboxPad = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -45,7 +45,7 @@ Texture2D texXboxPad; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -55,13 +55,13 @@ int main(void) texPs3Pad = LoadTexture("resources/ps3.png"); texXboxPad = LoadTexture("resources/xbox.png"); - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -73,7 +73,7 @@ int main(void) //-------------------------------------------------------------------------------------- UnloadTexture(texPs3Pad); UnloadTexture(texXboxPad); - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -95,7 +95,7 @@ void UpdateDrawFrame(void) BeginDrawing(); ClearBackground(RAYWHITE); - + if (IsGamepadAvailable(GAMEPAD_PLAYER1)) { DrawText(FormatText("GP1: %s", GetGamepadName(GAMEPAD_PLAYER1)), 10, 10, 10, BLACK); @@ -103,117 +103,117 @@ void UpdateDrawFrame(void) if (IsGamepadName(GAMEPAD_PLAYER1, XBOX360_NAME_ID)) { DrawTexture(texXboxPad, 0, 0, DARKGRAY); - + // Draw buttons: xbox home - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_HOME)) DrawCircle(394, 89, 19, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_MIDDLE)) DrawCircle(394, 89, 19, RED); // Draw buttons: basic - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_START)) DrawCircle(436, 150, 9, RED); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_SELECT)) DrawCircle(352, 150, 9, RED); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_X)) DrawCircle(501, 151, 15, BLUE); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_A)) DrawCircle(536, 187, 15, LIME); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_B)) DrawCircle(572, 151, 15, MAROON); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_Y)) DrawCircle(536, 115, 15, GOLD); - + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_MIDDLE_RIGHT)) DrawCircle(436, 150, 9, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_MIDDLE_LEFT)) DrawCircle(352, 150, 9, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_FACE_LEFT)) DrawCircle(501, 151, 15, BLUE); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_FACE_DOWN)) DrawCircle(536, 187, 15, LIME); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_FACE_RIGHT)) DrawCircle(572, 151, 15, MAROON); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_FACE_UP)) DrawCircle(536, 115, 15, GOLD); + // Draw buttons: d-pad DrawRectangle(317, 202, 19, 71, BLACK); DrawRectangle(293, 228, 69, 19, BLACK); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_UP)) DrawRectangle(317, 202, 19, 26, RED); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_DOWN)) DrawRectangle(317, 202 + 45, 19, 26, RED); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_LEFT)) DrawRectangle(292, 228, 25, 19, RED); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_RIGHT)) DrawRectangle(292 + 44, 228, 26, 19, RED); - + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_FACE_UP)) DrawRectangle(317, 202, 19, 26, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_FACE_DOWN)) DrawRectangle(317, 202 + 45, 19, 26, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_FACE_LEFT)) DrawRectangle(292, 228, 25, 19, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_FACE_RIGHT)) DrawRectangle(292 + 44, 228, 26, 19, RED); + // Draw buttons: left-right back - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_LB)) DrawCircle(259, 61, 20, RED); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_RB)) DrawCircle(536, 61, 20, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_TRIGGER_1)) DrawCircle(259, 61, 20, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_TRIGGER_1)) DrawCircle(536, 61, 20, RED); // Draw axis: left joystick DrawCircle(259, 152, 39, BLACK); DrawCircle(259, 152, 34, LIGHTGRAY); - DrawCircle(259 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_LEFT_X)*20), - 152 - (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_LEFT_Y)*20), 25, BLACK); - + DrawCircle(259 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_X)*20), + 152 - (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_Y)*20), 25, BLACK); + // Draw axis: right joystick DrawCircle(461, 237, 38, BLACK); DrawCircle(461, 237, 33, LIGHTGRAY); - DrawCircle(461 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_RIGHT_X)*20), - 237 - (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_RIGHT_Y)*20), 25, BLACK); + DrawCircle(461 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_X)*20), + 237 - (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_Y)*20), 25, BLACK); // Draw axis: left-right triggers DrawRectangle(170, 30, 15, 70, GRAY); - DrawRectangle(604, 30, 15, 70, GRAY); - DrawRectangle(170, 30, 15, (((1.0f + GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_LT))/2.0f)*70), RED); - DrawRectangle(604, 30, 15, (((1.0f + GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_RT))/2.0f)*70), RED); - - //DrawText(FormatText("Xbox axis LT: %02.02f", GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_LT)), 10, 40, 10, BLACK); - //DrawText(FormatText("Xbox axis RT: %02.02f", GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_RT)), 10, 60, 10, BLACK); + DrawRectangle(604, 30, 15, 70, GRAY); + DrawRectangle(170, 30, 15, (((1.0f + GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_TRIGGER))/2.0f)*70), RED); + DrawRectangle(604, 30, 15, (((1.0f + GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_TRIGGER))/2.0f)*70), RED); + + //DrawText(FormatText("Xbox axis LT: %02.02f", GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_TRIGGER)), 10, 40, 10, BLACK); + //DrawText(FormatText("Xbox axis RT: %02.02f", GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_TRIGGER)), 10, 60, 10, BLACK); } else if (IsGamepadName(GAMEPAD_PLAYER1, PS3_NAME_ID)) { DrawTexture(texPs3Pad, 0, 0, DARKGRAY); // Draw buttons: ps - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_PS)) DrawCircle(396, 222, 13, RED); - + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_MIDDLE)) DrawCircle(396, 222, 13, RED); + // Draw buttons: basic - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_SELECT)) DrawRectangle(328, 170, 32, 13, RED); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_START)) DrawTriangle((Vector2){ 436, 168 }, (Vector2){ 436, 185 }, (Vector2){ 464, 177 }, RED); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_TRIANGLE)) DrawCircle(557, 144, 13, LIME); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_CIRCLE)) DrawCircle(586, 173, 13, RED); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_CROSS)) DrawCircle(557, 203, 13, VIOLET); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_SQUARE)) DrawCircle(527, 173, 13, PINK); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_MIDDLE_LEFT)) DrawRectangle(328, 170, 32, 13, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_MIDDLE_RIGHT)) DrawTriangle((Vector2){ 436, 168 }, (Vector2){ 436, 185 }, (Vector2){ 464, 177 }, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_FACE_UP)) DrawCircle(557, 144, 13, LIME); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_FACE_RIGHT)) DrawCircle(586, 173, 13, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_FACE_DOWN)) DrawCircle(557, 203, 13, VIOLET); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_FACE_LEFT)) DrawCircle(527, 173, 13, PINK); // Draw buttons: d-pad DrawRectangle(225, 132, 24, 84, BLACK); DrawRectangle(195, 161, 84, 25, BLACK); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_UP)) DrawRectangle(225, 132, 24, 29, RED); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_DOWN)) DrawRectangle(225, 132 + 54, 24, 30, RED); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_LEFT)) DrawRectangle(195, 161, 30, 25, RED); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_RIGHT)) DrawRectangle(195 + 54, 161, 30, 25, RED); - + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_FACE_UP)) DrawRectangle(225, 132, 24, 29, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_FACE_DOWN)) DrawRectangle(225, 132 + 54, 24, 30, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_FACE_LEFT)) DrawRectangle(195, 161, 30, 25, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_FACE_RIGHT)) DrawRectangle(195 + 54, 161, 30, 25, RED); + // Draw buttons: left-right back buttons - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_L1)) DrawCircle(239, 82, 20, RED); - if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_R1)) DrawCircle(557, 82, 20, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_LEFT_TRIGGER_1)) DrawCircle(239, 82, 20, RED); + if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_RIGHT_TRIGGER_1)) DrawCircle(557, 82, 20, RED); // Draw axis: left joystick DrawCircle(319, 255, 35, BLACK); DrawCircle(319, 255, 31, LIGHTGRAY); - DrawCircle(319 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_LEFT_X)*20), - 255 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_LEFT_Y)*20), 25, BLACK); - + DrawCircle(319 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_X)*20), + 255 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_Y)*20), 25, BLACK); + // Draw axis: right joystick DrawCircle(475, 255, 35, BLACK); DrawCircle(475, 255, 31, LIGHTGRAY); - DrawCircle(475 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_RIGHT_X)*20), - 255 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_RIGHT_Y)*20), 25, BLACK); + DrawCircle(475 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_X)*20), + 255 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_Y)*20), 25, BLACK); // Draw axis: left-right triggers DrawRectangle(169, 48, 15, 70, GRAY); - DrawRectangle(611, 48, 15, 70, GRAY); - DrawRectangle(169, 48, 15, (((1.0f - GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_L2))/2.0f)*70), RED); - DrawRectangle(611, 48, 15, (((1.0f - GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_R2))/2.0f)*70), RED); + DrawRectangle(611, 48, 15, 70, GRAY); + DrawRectangle(169, 48, 15, (((1.0f - GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_LEFT_TRIGGER))/2.0f)*70), RED); + DrawRectangle(611, 48, 15, (((1.0f - GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_AXIS_RIGHT_TRIGGER))/2.0f)*70), RED); } else { DrawText("- GENERIC GAMEPAD -", 280, 180, 20, GRAY); - + // TODO: Draw generic gamepad } - - DrawText(FormatText("DETECTED AXIS [%i]:", GetGamepadAxisCount(GAMEPAD_PLAYER1)), 10, 50, 10, MAROON); - + + DrawText(FormatText("DETECTED AXIS [%i]:", GetGamepadAxisCount(GAMEPAD_PLAYER1)), 10, 50, 10, MAROON); + for (int i = 0; i < GetGamepadAxisCount(GAMEPAD_PLAYER1); i++) { DrawText(FormatText("AXIS %i: %.02f", i, GetGamepadAxisMovement(GAMEPAD_PLAYER1, i)), 20, 70 + 20*i, 10, DARKGRAY); } - + if (GetGamepadButtonPressed() != -1) DrawText(FormatText("DETECTED BUTTON: %i", GetGamepadButtonPressed()), 10, 430, 10, RED); else DrawText("DETECTED BUTTON: NONE", 10, 430, 10, GRAY); } else { DrawText("GP1: NOT DETECTED", 10, 10, 10, GRAY); - + DrawTexture(texXboxPad, 0, 0, LIGHTGRAY); } diff --git a/examples/web/core/core_input_gamepad.data b/examples/web/core/core_input_gamepad.data new file mode 100644 index 0000000..4d18fcc Binary files /dev/null and b/examples/web/core/core_input_gamepad.data differ diff --git a/examples/web/core/core_input_gamepad.html b/examples/web/core/core_input_gamepad.html new file mode 100644 index 0000000..1dd98b4 --- /dev/null +++ b/examples/web/core/core_input_gamepad.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_input_gamepad.js b/examples/web/core/core_input_gamepad.js new file mode 100644 index 0000000..fa50518 --- /dev/null +++ b/examples/web/core/core_input_gamepad.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="core/core_input_gamepad.data";var REMOTE_PACKAGE_BASE="core_input_gamepad.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273424,DYNAMICTOP_PTR=30512;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_input_gamepad.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_input_gamepad.wasm b/examples/web/core/core_input_gamepad.wasm new file mode 100644 index 0000000..8b06ed0 Binary files /dev/null and b/examples/web/core/core_input_gamepad.wasm differ diff --git a/examples/web/core/core_input_gestures.c b/examples/web/core/core_input_gestures.c index 507fb3b..308f890 100644 --- a/examples/web/core/core_input_gestures.c +++ b/examples/web/core/core_input_gestures.c @@ -41,24 +41,24 @@ int lastGesture = GESTURE_NONE; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [core] example - input gestures"); - + touchArea = (Rectangle){ 220, 10, screenWidth - 230, screenHeight - 20 }; - + //SetGesturesEnabled(0b0000000000001001); // Enable only some gestures to be detected - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -67,7 +67,7 @@ int main() #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- } @@ -102,14 +102,14 @@ void UpdateDrawFrame(void) case GESTURE_PINCH_OUT: strcpy(gestureStrings[gesturesCount], "GESTURE PINCH OUT"); break; default: break; } - + gesturesCount++; - + // Reset gestures strings if (gesturesCount >= MAX_GESTURE_STRINGS) { for (int i = 0; i < MAX_GESTURE_STRINGS; i++) strcpy(gestureStrings[i], "\0"); - + gesturesCount = 0; } } @@ -121,26 +121,26 @@ void UpdateDrawFrame(void) BeginDrawing(); ClearBackground(RAYWHITE); - + DrawRectangleRec(touchArea, GRAY); DrawRectangle(225, 15, screenWidth - 240, screenHeight - 30, RAYWHITE); - + DrawText("GESTURES TEST AREA", screenWidth - 270, screenHeight - 40, 20, Fade(GRAY, 0.5f)); - + for (int i = 0; i < gesturesCount; i++) { if (i%2 == 0) DrawRectangle(10, 30 + 20*i, 200, 20, Fade(LIGHTGRAY, 0.5f)); else DrawRectangle(10, 30 + 20*i, 200, 20, Fade(LIGHTGRAY, 0.3f)); - + if (i < gesturesCount - 1) DrawText(gestureStrings[i], 35, 36 + 20*i, 10, DARKGRAY); else DrawText(gestureStrings[i], 35, 36 + 20*i, 10, MAROON); } - + DrawRectangleLines(10, 29, 200, screenHeight - 50, GRAY); DrawText("DETECTED GESTURES", 50, 15, 10, GRAY); - + if (currentGesture != GESTURE_NONE) DrawCircleV(touchPosition, 30, MAROON); - + EndDrawing(); //---------------------------------------------------------------------------------- } diff --git a/examples/web/core/core_input_gestures.html b/examples/web/core/core_input_gestures.html new file mode 100644 index 0000000..c86a6c2 --- /dev/null +++ b/examples/web/core/core_input_gestures.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_input_gestures.js b/examples/web/core/core_input_gestures.js new file mode 100644 index 0000000..55240ca --- /dev/null +++ b/examples/web/core/core_input_gestures.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5270432,DYNAMICTOP_PTR=27520;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_input_gestures.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_input_gestures.wasm b/examples/web/core/core_input_gestures.wasm new file mode 100644 index 0000000..2b97f11 Binary files /dev/null and b/examples/web/core/core_input_gestures.wasm differ diff --git a/examples/web/core/core_input_keys.c b/examples/web/core/core_input_keys.c index 334676e..259009c 100644 --- a/examples/web/core/core_input_keys.c +++ b/examples/web/core/core_input_keys.c @@ -18,11 +18,10 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; - -Vector2 ballPosition; +const int screenWidth = 800; +const int screenHeight = 450; +Vector2 ballPosition = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -30,7 +29,7 @@ Vector2 ballPosition; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -39,13 +38,13 @@ int main(void) InitWindow(screenWidth, screenHeight, "raylib [core] example - keyboard input"); ballPosition = (Vector2){ (float)screenWidth/2, (float)screenHeight/2 }; - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { diff --git a/examples/web/core/core_input_keys.html b/examples/web/core/core_input_keys.html new file mode 100644 index 0000000..35c1c62 --- /dev/null +++ b/examples/web/core/core_input_keys.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_input_keys.js b/examples/web/core/core_input_keys.js new file mode 100644 index 0000000..7d2cfd5 --- /dev/null +++ b/examples/web/core/core_input_keys.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269600,DYNAMICTOP_PTR=26688;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_input_keys.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"N":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"jc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"bc":_glDepthFunc,"G":_glDetachShader,"ac":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"E":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"Db":_glfwGetKey,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"tb":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_input_keys.wasm b/examples/web/core/core_input_keys.wasm new file mode 100644 index 0000000..681bbb7 Binary files /dev/null and b/examples/web/core/core_input_keys.wasm differ diff --git a/examples/web/core/core_input_mouse.c b/examples/web/core/core_input_mouse.c index 8e3b38c..ec9d39d 100644 --- a/examples/web/core/core_input_mouse.c +++ b/examples/web/core/core_input_mouse.c @@ -18,8 +18,8 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; Vector2 ballPosition = { -100.0f, -100.0f }; Color ballColor = MAROON; @@ -30,7 +30,7 @@ Color ballColor = MAROON; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -43,7 +43,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -67,7 +67,7 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- ballPosition = GetMousePosition(); - + if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) ballColor = MAROON; else if (IsMouseButtonPressed(MOUSE_MIDDLE_BUTTON)) ballColor = LIME; else if (IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)) ballColor = DARKBLUE; diff --git a/examples/web/core/core_input_mouse.html b/examples/web/core/core_input_mouse.html new file mode 100644 index 0000000..c702e0b --- /dev/null +++ b/examples/web/core/core_input_mouse.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_input_mouse.js b/examples/web/core/core_input_mouse.js new file mode 100644 index 0000000..9e621c9 --- /dev/null +++ b/examples/web/core/core_input_mouse.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269632,DYNAMICTOP_PTR=26720;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_input_mouse.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_input_mouse.wasm b/examples/web/core/core_input_mouse.wasm new file mode 100644 index 0000000..0d31067 Binary files /dev/null and b/examples/web/core/core_input_mouse.wasm differ diff --git a/examples/web/core/core_input_mouse_wheel.c b/examples/web/core/core_input_mouse_wheel.c index 7efd180..bfad898 100644 --- a/examples/web/core/core_input_mouse_wheel.c +++ b/examples/web/core/core_input_mouse_wheel.c @@ -32,9 +32,9 @@ int scrollSpeed = 4; // Scrolling speed in pixels void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -47,7 +47,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { diff --git a/examples/web/core/core_input_mouse_wheel.html b/examples/web/core/core_input_mouse_wheel.html new file mode 100644 index 0000000..1f464ec --- /dev/null +++ b/examples/web/core/core_input_mouse_wheel.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_input_mouse_wheel.js b/examples/web/core/core_input_mouse_wheel.js new file mode 100644 index 0000000..ecfe351 --- /dev/null +++ b/examples/web/core/core_input_mouse_wheel.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269648,DYNAMICTOP_PTR=26736;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_input_mouse_wheel.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_input_mouse_wheel.wasm b/examples/web/core/core_input_mouse_wheel.wasm new file mode 100644 index 0000000..85c871f Binary files /dev/null and b/examples/web/core/core_input_mouse_wheel.wasm differ diff --git a/examples/web/core/core_input_multitouch.c b/examples/web/core/core_input_multitouch.c index e4dd9f1..75f659c 100644 --- a/examples/web/core/core_input_multitouch.c +++ b/examples/web/core/core_input_multitouch.c @@ -37,9 +37,9 @@ Vector2 touchPosition = { 0.0f }; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -50,7 +50,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -74,7 +74,7 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- ballPosition = GetMousePosition(); - + ballColor = BEIGE; if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) ballColor = MAROON; @@ -84,7 +84,7 @@ void UpdateDrawFrame(void) if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) touchCounter = 10; if (IsMouseButtonPressed(MOUSE_MIDDLE_BUTTON)) touchCounter = 10; if (IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)) touchCounter = 10; - + if (touchCounter > 0) touchCounter--; //---------------------------------------------------------------------------------- @@ -96,15 +96,15 @@ void UpdateDrawFrame(void) // Multitouch for (int i = 0; i < MAX_TOUCH_POINTS; ++i) - { + { touchPosition = GetTouchPosition(i); // Get the touch point - + if ((touchPosition.x >= 0) && (touchPosition.y >= 0)) // Make sure point is not (-1,-1) as this means there is no touch for it { // Draw circle and touch index number DrawCircleV(touchPosition, 34, ORANGE); DrawText(FormatText("%d", i), touchPosition.x - 10, touchPosition.y - 70, 40, BLACK); - } + } } // Draw the normal mouse location diff --git a/examples/web/core/core_input_multitouch.html b/examples/web/core/core_input_multitouch.html new file mode 100644 index 0000000..0f0cfd9 --- /dev/null +++ b/examples/web/core/core_input_multitouch.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_input_multitouch.js b/examples/web/core/core_input_multitouch.js new file mode 100644 index 0000000..74b687f --- /dev/null +++ b/examples/web/core/core_input_multitouch.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269712,DYNAMICTOP_PTR=26800;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_input_multitouch.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"N":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"jc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"bc":_glDepthFunc,"G":_glDetachShader,"ac":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"E":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"Db":_glfwGetMouseButton,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"tb":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_input_multitouch.wasm b/examples/web/core/core_input_multitouch.wasm new file mode 100644 index 0000000..60e7661 Binary files /dev/null and b/examples/web/core/core_input_multitouch.wasm differ diff --git a/examples/web/core/core_loading_thread.c b/examples/web/core/core_loading_thread.c index b867ddd..64e34e0 100644 --- a/examples/web/core/core_loading_thread.c +++ b/examples/web/core/core_loading_thread.c @@ -2,7 +2,7 @@ * * raylib example - loading thread * -* NOTE: This example requires linking with pthreads library, +* NOTE: This example requires linking with pthreads library, * on MinGW, it can be accomplished passing -static parameter to compiler * * This example has been created using raylib 2.5 (www.raylib.com) @@ -16,7 +16,6 @@ #include "pthread.h" // POSIX style threads management -#include // C11 atomic data types #include // Required for: clock() #if defined(PLATFORM_WEB) @@ -25,7 +24,7 @@ // Using C11 atomics for synchronization // NOTE: A plain bool (or any plain data type for that matter) can't be used for inter-thread synchronization -static atomic_bool dataLoaded = ATOMIC_VAR_INIT(false); // Data Loaded completion indicator +static bool dataLoaded = false; // Data Loaded completion indicator static void *LoadDataThread(void *arg); // Loading data thread function declaration static int dataProgress = 0; // Data progress accumulator @@ -49,20 +48,20 @@ int framesCounter = 0; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [core] example - loading thread"); - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -78,29 +77,6 @@ int main() return 0; } -// Loading data thread function definition -static void *LoadDataThread(void *arg) -{ - int timeCounter = 0; // Time counted in ms - clock_t prevTime = clock(); // Previous time - - // We simulate data loading with a time counter for 5 seconds - while (timeCounter < 5000) - { - clock_t currentTime = clock() - prevTime; - timeCounter = currentTime*1000/CLOCKS_PER_SEC; - - // We accumulate time over a global variable to be used in - // main thread as a progress bar - dataProgress = timeCounter/10; - } - - // When data has finished loading, we set global variable - atomic_store(&dataLoaded, true); - - return NULL; -} - //---------------------------------------------------------------------------------- // Module Functions Definition //---------------------------------------------------------------------------------- @@ -124,7 +100,7 @@ void UpdateDrawFrame(void) case STATE_LOADING: { framesCounter++; - if (atomic_load(&dataLoaded)) + if (dataLoaded) { framesCounter = 0; state = STATE_FINISHED; @@ -135,7 +111,7 @@ void UpdateDrawFrame(void) if (IsKeyPressed(KEY_ENTER)) { // Reset everything to launch again - atomic_store(&dataLoaded, false); + dataLoaded = false; dataProgress = 0; state = STATE_WAITING; } @@ -149,27 +125,51 @@ void UpdateDrawFrame(void) BeginDrawing(); ClearBackground(RAYWHITE); - - switch (state) + + switch (state) { case STATE_WAITING: DrawText("PRESS ENTER to START LOADING DATA", 150, 170, 20, DARKGRAY); break; case STATE_LOADING: { DrawRectangle(150, 200, dataProgress, 60, SKYBLUE); if ((framesCounter/15)%2) DrawText("LOADING DATA...", 240, 210, 40, DARKBLUE); - + } break; case STATE_FINISHED: { DrawRectangle(150, 200, 500, 60, LIME); DrawText("DATA LOADED!", 250, 210, 40, GREEN); - + } break; default: break; } - + DrawRectangleLines(150, 200, 500, 60, DARKGRAY); EndDrawing(); //---------------------------------------------------------------------------------- } + + +// Loading data thread function definition +static void *LoadDataThread(void *arg) +{ + int timeCounter = 0; // Time counted in ms + clock_t prevTime = clock(); // Previous time + + // We simulate data loading with a time counter for 5 seconds + while (timeCounter < 5000) + { + clock_t currentTime = clock() - prevTime; + timeCounter = currentTime*1000/CLOCKS_PER_SEC; + + // We accumulate time over a global variable to be used in + // main thread as a progress bar + dataProgress = timeCounter/10; + } + + // When data has finished loading, we set global variable + dataLoaded = true; + + return NULL; +} \ No newline at end of file diff --git a/examples/web/core/core_loading_thread.html b/examples/web/core/core_loading_thread.html new file mode 100644 index 0000000..b86e964 --- /dev/null +++ b/examples/web/core/core_loading_thread.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_loading_thread.js b/examples/web/core/core_loading_thread.js new file mode 100644 index 0000000..5f77e19 --- /dev/null +++ b/examples/web/core/core_loading_thread.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5270720,DYNAMICTOP_PTR=27808;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_loading_thread.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _clock(){if(_clock.start===undefined)_clock.start=Date.now();return(Date.now()-_clock.start)*(1e6/1e3)|0}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _pthread_create(){return 11}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"mc":___lock,"z":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"y":___syscall146,"l":___syscall221,"ka":___syscall5,"x":___syscall54,"R":___syscall6,"w":___unlock,"Q":_clock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"id":_emscripten_get_gamepad_status,"Zc":_emscripten_get_heap_size,"Oc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"uc":_emscripten_glActiveTexture,"lc":_emscripten_glAttachShader,"fc":_emscripten_glBeginQueryEXT,"ac":_emscripten_glBindAttribLocation,"Vb":_emscripten_glBindBuffer,"Ob":_emscripten_glBindFramebuffer,"Gb":_emscripten_glBindRenderbuffer,"wb":_emscripten_glBindTexture,"pb":_emscripten_glBindVertexArrayOES,"kb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"Za":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Oa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ja":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"ee":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"rd":_emscripten_glStencilOpSeparate,"qd":_emscripten_glTexImage2D,"pd":_emscripten_glTexParameterf,"od":_emscripten_glTexParameterfv,"nd":_emscripten_glTexParameteri,"md":_emscripten_glTexParameteriv,"ld":_emscripten_glTexSubImage2D,"kd":_emscripten_glUniform1f,"jd":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"gd":_emscripten_glUniform1iv,"fd":_emscripten_glUniform2f,"ed":_emscripten_glUniform2fv,"dd":_emscripten_glUniform2i,"cd":_emscripten_glUniform2iv,"bd":_emscripten_glUniform3f,"ad":_emscripten_glUniform3fv,"$c":_emscripten_glUniform3i,"_c":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Xc":_emscripten_glUniform4fv,"Wc":_emscripten_glUniform4i,"Vc":_emscripten_glUniform4iv,"Uc":_emscripten_glUniformMatrix2fv,"Tc":_emscripten_glUniformMatrix3fv,"Sc":_emscripten_glUniformMatrix4fv,"Rc":_emscripten_glUseProgram,"Qc":_emscripten_glValidateProgram,"Pc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Cc":_emscripten_request_pointerlock,"Bc":_emscripten_resize_heap,"N":_emscripten_run_script,"Ac":_emscripten_sample_gamepad_data,"zc":_emscripten_set_click_callback_on_thread,"yc":_emscripten_set_fullscreenchange_callback_on_thread,"xc":_emscripten_set_gamepadconnected_callback_on_thread,"wc":_emscripten_set_gamepaddisconnected_callback_on_thread,"vc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"sc":_emscripten_set_touchcancel_callback_on_thread,"rc":_emscripten_set_touchend_callback_on_thread,"qc":_emscripten_set_touchmove_callback_on_thread,"pc":_emscripten_set_touchstart_callback_on_thread,"oc":_exit,"nc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"kc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"jc":_glClearDepthf,"ic":_glCompileShader,"hc":_glCompressedTexImage2D,"gc":_glCreateProgram,"ec":_glCreateShader,"dc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"cc":_glDepthFunc,"G":_glDetachShader,"bc":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"_b":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Zb":_glFrontFace,"n":_glGenBuffers,"Yb":_glGenTextures,"t":_glGetAttribLocation,"Xb":_glGetFloatv,"Wb":_glGetProgramInfoLog,"E":_glGetProgramiv,"Ub":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Tb":_glLinkProgram,"Sb":_glPixelStorei,"Rb":_glReadPixels,"Qb":_glShaderSource,"Pb":_glTexImage2D,"g":_glTexParameteri,"Nb":_glUniform1i,"Mb":_glUniform4f,"Lb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Kb":_glViewport,"Jb":_glfwCreateWindow,"Ib":_glfwDefaultWindowHints,"Hb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"m":_glfwGetTime,"Eb":_glfwInit,"Db":_glfwMakeContextCurrent,"Cb":_glfwSetCharCallback,"Bb":_glfwSetCursorEnterCallback,"Ab":_glfwSetCursorPosCallback,"zb":_glfwSetDropCallback,"yb":_glfwSetErrorCallback,"xb":_glfwSetKeyCallback,"vb":_glfwSetMouseButtonCallback,"ub":_glfwSetScrollCallback,"tb":_glfwSetWindowIconifyCallback,"sb":_glfwSetWindowShouldClose,"rb":_glfwSetWindowSizeCallback,"qb":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"ob":_nanosleep,"nb":_pthread_create,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["le"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_loading_thread.wasm b/examples/web/core/core_loading_thread.wasm new file mode 100644 index 0000000..ef0d6ee Binary files /dev/null and b/examples/web/core/core_loading_thread.wasm differ diff --git a/examples/web/core/core_random_values.c b/examples/web/core/core_random_values.c index 805941e..68c7813 100644 --- a/examples/web/core/core_random_values.c +++ b/examples/web/core/core_random_values.c @@ -18,11 +18,11 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; -int framesCounter = 0; // Variable used to count frames -int randValue; +int framesCounter = 0; // Variable used to count frames +int randValue = 0; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -30,7 +30,7 @@ int randValue; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -39,13 +39,13 @@ int main(void) InitWindow(screenWidth, screenHeight, "raylib [core] example - generate random values"); randValue = GetRandomValue(-8, 5); // Get a random integer number between -8 and 5 (both included) - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { diff --git a/examples/web/core/core_random_values.html b/examples/web/core/core_random_values.html new file mode 100644 index 0000000..a904eb9 --- /dev/null +++ b/examples/web/core/core_random_values.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_random_values.js b/examples/web/core/core_random_values.js new file mode 100644 index 0000000..6b05886 --- /dev/null +++ b/examples/web/core/core_random_values.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269632,DYNAMICTOP_PTR=26720;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_random_values.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_random_values.wasm b/examples/web/core/core_random_values.wasm new file mode 100644 index 0000000..59a5228 Binary files /dev/null and b/examples/web/core/core_random_values.wasm differ diff --git a/examples/web/core/core_storage_values.c b/examples/web/core/core_storage_values.c index 88d3803..225beda 100644 --- a/examples/web/core/core_storage_values.c +++ b/examples/web/core/core_storage_values.c @@ -18,8 +18,8 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; int score = 0; int hiscore = 0; @@ -35,7 +35,7 @@ typedef enum { STORAGE_SCORE = 0, STORAGE_HISCORE } StorageData; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -48,7 +48,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -73,7 +73,7 @@ void UpdateDrawFrame(void) score = GetRandomValue(1000, 2000); hiscore = GetRandomValue(2000, 4000); } - + if (IsKeyPressed(KEY_ENTER)) { StorageSaveValue(STORAGE_SCORE, score); @@ -85,7 +85,7 @@ void UpdateDrawFrame(void) score = StorageLoadValue(STORAGE_SCORE); hiscore = StorageLoadValue(STORAGE_HISCORE); } - + framesCounter++; //---------------------------------------------------------------------------------- @@ -97,9 +97,9 @@ void UpdateDrawFrame(void) DrawText(FormatText("SCORE: %i", score), 280, 130, 40, MAROON); DrawText(FormatText("HI-SCORE: %i", hiscore), 210, 200, 50, BLACK); - + DrawText(FormatText("frames: %i", framesCounter), 10, 10, 20, LIME); - + DrawText("Press R to generate random numbers", 220, 40, 20, LIGHTGRAY); DrawText("Press ENTER to SAVE values", 250, 310, 20, LIGHTGRAY); DrawText("Press SPACE to LOAD values", 252, 350, 20, LIGHTGRAY); diff --git a/examples/web/core/core_storage_values.html b/examples/web/core/core_storage_values.html new file mode 100644 index 0000000..d122817 --- /dev/null +++ b/examples/web/core/core_storage_values.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_storage_values.js b/examples/web/core/core_storage_values.js new file mode 100644 index 0000000..89af13a --- /dev/null +++ b/examples/web/core/core_storage_values.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5270864,DYNAMICTOP_PTR=27952;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_storage_values.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_storage_values.wasm b/examples/web/core/core_storage_values.wasm new file mode 100644 index 0000000..c35163d Binary files /dev/null and b/examples/web/core/core_storage_values.wasm differ diff --git a/examples/web/core/core_vr_simulator.c b/examples/web/core/core_vr_simulator.c index c1af939..1190bdc 100644 --- a/examples/web/core/core_vr_simulator.c +++ b/examples/web/core/core_vr_simulator.c @@ -15,25 +15,32 @@ #include #endif +#if defined(PLATFORM_DESKTOP) + #define GLSL_VERSION 330 +#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB + #define GLSL_VERSION 100 +#endif + //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: screenWidth/screenHeight should match VR device aspect ratio -Camera camera; - +Camera camera = { 0 }; +Shader distortion = { 0 }; + Vector3 cubePosition = { 0.0f, 0.0f, 0.0f }; - + //---------------------------------------------------------------------------------- // Module Functions Declaration //---------------------------------------------------------------------------------- void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -42,22 +49,50 @@ int main(void) InitWindow(screenWidth, screenHeight, "raylib [core] example - oculus rift"); // Init VR simulator (Oculus Rift CV1 parameters) - InitVrSimulator(GetVrDeviceInfo(HMD_OCULUS_RIFT_CV1)); - + InitVrSimulator(); + + VrDeviceInfo hmd = { 0 }; // VR device parameters (head-mounted-device) + + // Oculus Rift CV1 parameters for simulator + hmd.hResolution = 2160; // HMD horizontal resolution in pixels + hmd.vResolution = 1200; // HMD vertical resolution in pixels + hmd.hScreenSize = 0.133793f; // HMD horizontal size in meters + hmd.vScreenSize = 0.0669f; // HMD vertical size in meters + hmd.vScreenCenter = 0.04678f; // HMD screen center in meters + hmd.eyeToScreenDistance = 0.041f; // HMD distance between eye and display in meters + hmd.lensSeparationDistance = 0.07f; // HMD lens separation distance in meters + hmd.interpupillaryDistance = 0.07f; // HMD IPD (distance between pupils) in meters + + // NOTE: CV1 uses a Fresnel-hybrid-asymmetric lenses with specific distortion compute shaders. + // Following parameters are an approximation to distortion stereo rendering but results differ from actual device. + hmd.lensDistortionValues[0] = 1.0f; // HMD lens distortion constant parameter 0 + hmd.lensDistortionValues[1] = 0.22f; // HMD lens distortion constant parameter 1 + hmd.lensDistortionValues[2] = 0.24f; // HMD lens distortion constant parameter 2 + hmd.lensDistortionValues[3] = 0.0f; // HMD lens distortion constant parameter 3 + hmd.chromaAbCorrection[0] = 0.996f; // HMD chromatic aberration correction parameter 0 + hmd.chromaAbCorrection[1] = -0.004f; // HMD chromatic aberration correction parameter 1 + hmd.chromaAbCorrection[2] = 1.014f; // HMD chromatic aberration correction parameter 2 + hmd.chromaAbCorrection[3] = 0.0f; // HMD chromatic aberration correction parameter 3 + + // Distortion shader (uses device lens distortion and chroma) + distortion = LoadShader(0, FormatText("resources/distortion%i.fs", GLSL_VERSION)); + + SetVrConfiguration(hmd, distortion); // Set Vr device parameters for stereo rendering // Define the camera to look into our 3d world - camera.position = (Vector3){ 5.0f, 5.0f, 5.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point + camera.position = (Vector3){ 5.0f, 2.0f, 5.0f }; // Camera position + camera.target = (Vector3){ 0.0f, 2.0f, 0.0f }; // Camera looking at point camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 60.0f; // Camera field-of-view Y - + camera.type = CAMERA_PERSPECTIVE; // Camera type + SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set first person camera mode - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -67,9 +102,11 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - CloseVrSimulator(); // Close VR simulator - - CloseWindow(); // Close window and OpenGL context + UnloadShader(distortion); // Unload distortion shader + + CloseVrSimulator(); // Close VR simulator + + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; @@ -85,7 +122,7 @@ void UpdateDrawFrame(void) UpdateCamera(&camera); // Update camera (simulator mode) if (IsKeyPressed(KEY_SPACE)) ToggleVrMode(); // Toggle VR mode - + // Lock mouse cursor if mouse click on canvas if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) DisableCursor(); //---------------------------------------------------------------------------------- @@ -98,15 +135,15 @@ void UpdateDrawFrame(void) BeginVrDrawing(); - Begin3dMode(camera); + BeginMode3D(camera); DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED); DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON); DrawGrid(40, 1.0f); - End3dMode(); - + EndMode3D(); + EndVrDrawing(); DrawFPS(10, 10); diff --git a/examples/web/core/core_vr_simulator.data b/examples/web/core/core_vr_simulator.data new file mode 100644 index 0000000..50116ce --- /dev/null +++ b/examples/web/core/core_vr_simulator.data @@ -0,0 +1,54 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; + +// Input uniform values +uniform sampler2D texture0; + +// NOTE: Default parameters for Oculus Rift DK2 device +const vec2 LeftLensCenter = vec2(0.2863248, 0.5); +const vec2 RightLensCenter = vec2(0.7136753, 0.5); +const vec2 LeftScreenCenter = vec2(0.25, 0.5); +const vec2 RightScreenCenter = vec2(0.75, 0.5); +const vec2 Scale = vec2(0.25, 0.45); +const vec2 ScaleIn = vec2(4.0, 2.5); +const vec4 HmdWarpParam = vec4(1.0, 0.22, 0.24, 0.0); +const vec4 ChromaAbParam = vec4(0.996, -0.004, 1.014, 0.0); + +void main() +{ + // The following two variables need to be set per eye + vec2 LensCenter = fragTexCoord.x < 0.5 ? LeftLensCenter : RightLensCenter; + vec2 ScreenCenter = fragTexCoord.x < 0.5 ? LeftScreenCenter : RightScreenCenter; + + // Scales input texture coordinates for distortion: vec2 HmdWarp(vec2 fragTexCoord, vec2 LensCenter) + vec2 theta = (fragTexCoord - LensCenter)*ScaleIn; // Scales to [-1, 1] + float rSq = theta.x*theta.x + theta.y*theta.y; + vec2 theta1 = theta*(HmdWarpParam.x + HmdWarpParam.y*rSq + HmdWarpParam.z*rSq*rSq + HmdWarpParam.w*rSq*rSq*rSq); + //vec2 tc = LensCenter + Scale*theta1; + + // Detect whether blue texture coordinates are out of range since these will scaled out the furthest + vec2 thetaBlue = theta1*(ChromaAbParam.z + ChromaAbParam.w*rSq); + vec2 tcBlue = LensCenter + Scale*thetaBlue; + + if (any(bvec2(clamp(tcBlue, ScreenCenter - vec2(0.25, 0.5), ScreenCenter + vec2(0.25, 0.5)) - tcBlue))) gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + else + { + // Do blue texture lookup + float blue = texture2D(texture0, tcBlue).b; + + // Do green lookup (no scaling) + vec2 tcGreen = LensCenter + Scale*theta1; + float green = texture2D(texture0, tcGreen).g; + + // Do red scale and lookup + vec2 thetaRed = theta1*(ChromaAbParam.x + ChromaAbParam.y*rSq); + vec2 tcRed = LensCenter + Scale*thetaRed; + float red = texture2D(texture0, tcRed).r; + + gl_FragColor = vec4(red, green, blue, 1.0); + } +} diff --git a/examples/web/core/core_vr_simulator.html b/examples/web/core/core_vr_simulator.html new file mode 100644 index 0000000..fec8129 --- /dev/null +++ b/examples/web/core/core_vr_simulator.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_vr_simulator.js b/examples/web/core/core_vr_simulator.js new file mode 100644 index 0000000..ffd36f6 --- /dev/null +++ b/examples/web/core/core_vr_simulator.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="core/core_vr_simulator.data";var REMOTE_PACKAGE_BASE="core_vr_simulator.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","shaders",true,true);Module["FS_createPath"]("/resources/shaders","glsl100",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5271936,DYNAMICTOP_PTR=29024;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_vr_simulator.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"Fc":___lock,"H":___setErrNo,"eb":___syscall140,"Va":___syscall145,"G":___syscall146,"o":___syscall221,"qa":___syscall5,"F":___syscall54,"X":___syscall6,"E":___unlock,"D":_eglGetProcAddress,"W":_emscripten_exit_pointerlock,"Ld":_emscripten_get_gamepad_status,"Ad":_emscripten_get_heap_size,"pd":_emscripten_get_num_gamepads,"V":_emscripten_get_pointerlock_status,"Wc":_emscripten_glActiveTexture,"Mc":_emscripten_glAttachShader,"Ec":_emscripten_glBeginQueryEXT,"zc":_emscripten_glBindAttribLocation,"sc":_emscripten_glBindBuffer,"nc":_emscripten_glBindFramebuffer,"gc":_emscripten_glBindRenderbuffer,"$b":_emscripten_glBindTexture,"Sb":_emscripten_glBindVertexArrayOES,"Jb":_emscripten_glBlendColor,"zb":_emscripten_glBlendEquation,"sb":_emscripten_glBlendEquationSeparate,"ob":_emscripten_glBlendFunc,"nb":_emscripten_glBlendFuncSeparate,"mb":_emscripten_glBufferData,"lb":_emscripten_glBufferSubData,"kb":_emscripten_glCheckFramebufferStatus,"jb":_emscripten_glClear,"ib":_emscripten_glClearColor,"hb":_emscripten_glClearDepthf,"gb":_emscripten_glClearStencil,"fb":_emscripten_glColorMask,"db":_emscripten_glCompileShader,"cb":_emscripten_glCompressedTexImage2D,"bb":_emscripten_glCompressedTexSubImage2D,"ab":_emscripten_glCopyTexImage2D,"$a":_emscripten_glCopyTexSubImage2D,"_a":_emscripten_glCreateProgram,"Za":_emscripten_glCreateShader,"Ya":_emscripten_glCullFace,"Xa":_emscripten_glDeleteBuffers,"Wa":_emscripten_glDeleteFramebuffers,"Ua":_emscripten_glDeleteProgram,"Ta":_emscripten_glDeleteQueriesEXT,"Sa":_emscripten_glDeleteRenderbuffers,"Ra":_emscripten_glDeleteShader,"Qa":_emscripten_glDeleteTextures,"Pa":_emscripten_glDeleteVertexArraysOES,"Oa":_emscripten_glDepthFunc,"Na":_emscripten_glDepthMask,"Ma":_emscripten_glDepthRangef,"La":_emscripten_glDetachShader,"Ka":_emscripten_glDisable,"Ja":_emscripten_glDisableVertexAttribArray,"Ia":_emscripten_glDrawArrays,"Ha":_emscripten_glDrawArraysInstancedANGLE,"Ga":_emscripten_glDrawBuffersWEBGL,"Fa":_emscripten_glDrawElements,"Ea":_emscripten_glDrawElementsInstancedANGLE,"Da":_emscripten_glEnable,"Ca":_emscripten_glEnableVertexAttribArray,"Ba":_emscripten_glEndQueryEXT,"Aa":_emscripten_glFinish,"za":_emscripten_glFlush,"ya":_emscripten_glFramebufferRenderbuffer,"xa":_emscripten_glFramebufferTexture2D,"wa":_emscripten_glFrontFace,"va":_emscripten_glGenBuffers,"ua":_emscripten_glGenFramebuffers,"ta":_emscripten_glGenQueriesEXT,"sa":_emscripten_glGenRenderbuffers,"ra":_emscripten_glGenTextures,"pa":_emscripten_glGenVertexArraysOES,"oa":_emscripten_glGenerateMipmap,"na":_emscripten_glGetActiveAttrib,"ma":_emscripten_glGetActiveUniform,"la":_emscripten_glGetAttachedShaders,"ka":_emscripten_glGetAttribLocation,"ja":_emscripten_glGetBooleanv,"ia":_emscripten_glGetBufferParameteriv,"ha":_emscripten_glGetError,"ga":_emscripten_glGetFloatv,"fa":_emscripten_glGetFramebufferAttachmentParameteriv,"ea":_emscripten_glGetIntegerv,"da":_emscripten_glGetProgramInfoLog,"ca":_emscripten_glGetProgramiv,"ba":_emscripten_glGetQueryObjecti64vEXT,"aa":_emscripten_glGetQueryObjectivEXT,"$":_emscripten_glGetQueryObjectui64vEXT,"_":_emscripten_glGetQueryObjectuivEXT,"Z":_emscripten_glGetQueryivEXT,"Y":_emscripten_glGetRenderbufferParameteriv,"xe":_emscripten_glGetShaderInfoLog,"we":_emscripten_glGetShaderPrecisionFormat,"ve":_emscripten_glGetShaderSource,"ue":_emscripten_glGetShaderiv,"te":_emscripten_glGetString,"se":_emscripten_glGetTexParameterfv,"re":_emscripten_glGetTexParameteriv,"qe":_emscripten_glGetUniformLocation,"pe":_emscripten_glGetUniformfv,"oe":_emscripten_glGetUniformiv,"ne":_emscripten_glGetVertexAttribPointerv,"me":_emscripten_glGetVertexAttribfv,"le":_emscripten_glGetVertexAttribiv,"ke":_emscripten_glHint,"je":_emscripten_glIsBuffer,"ie":_emscripten_glIsEnabled,"he":_emscripten_glIsFramebuffer,"ge":_emscripten_glIsProgram,"fe":_emscripten_glIsQueryEXT,"ee":_emscripten_glIsRenderbuffer,"de":_emscripten_glIsShader,"ce":_emscripten_glIsTexture,"be":_emscripten_glIsVertexArrayOES,"ae":_emscripten_glLineWidth,"$d":_emscripten_glLinkProgram,"_d":_emscripten_glPixelStorei,"Zd":_emscripten_glPolygonOffset,"Yd":_emscripten_glQueryCounterEXT,"Xd":_emscripten_glReadPixels,"Wd":_emscripten_glReleaseShaderCompiler,"Vd":_emscripten_glRenderbufferStorage,"Ud":_emscripten_glSampleCoverage,"Td":_emscripten_glScissor,"Sd":_emscripten_glShaderBinary,"Rd":_emscripten_glShaderSource,"Qd":_emscripten_glStencilFunc,"Pd":_emscripten_glStencilFuncSeparate,"Od":_emscripten_glStencilMask,"Nd":_emscripten_glStencilMaskSeparate,"Md":_emscripten_glStencilOp,"Kd":_emscripten_glStencilOpSeparate,"Jd":_emscripten_glTexImage2D,"Id":_emscripten_glTexParameterf,"Hd":_emscripten_glTexParameterfv,"Gd":_emscripten_glTexParameteri,"Fd":_emscripten_glTexParameteriv,"Ed":_emscripten_glTexSubImage2D,"Dd":_emscripten_glUniform1f,"Cd":_emscripten_glUniform1fv,"Bd":_emscripten_glUniform1i,"zd":_emscripten_glUniform1iv,"yd":_emscripten_glUniform2f,"xd":_emscripten_glUniform2fv,"wd":_emscripten_glUniform2i,"vd":_emscripten_glUniform2iv,"ud":_emscripten_glUniform3f,"td":_emscripten_glUniform3fv,"sd":_emscripten_glUniform3i,"rd":_emscripten_glUniform3iv,"qd":_emscripten_glUniform4f,"od":_emscripten_glUniform4fv,"nd":_emscripten_glUniform4i,"md":_emscripten_glUniform4iv,"ld":_emscripten_glUniformMatrix2fv,"kd":_emscripten_glUniformMatrix3fv,"jd":_emscripten_glUniformMatrix4fv,"id":_emscripten_glUseProgram,"hd":_emscripten_glValidateProgram,"gd":_emscripten_glVertexAttrib1f,"fd":_emscripten_glVertexAttrib1fv,"ed":_emscripten_glVertexAttrib2f,"dd":_emscripten_glVertexAttrib2fv,"cd":_emscripten_glVertexAttrib3f,"bd":_emscripten_glVertexAttrib3fv,"ad":_emscripten_glVertexAttrib4f,"$c":_emscripten_glVertexAttrib4fv,"_c":_emscripten_glVertexAttribDivisorANGLE,"Zc":_emscripten_glVertexAttribPointer,"Yc":_emscripten_glViewport,"Xc":_emscripten_memcpy_big,"Vc":_emscripten_request_pointerlock,"Uc":_emscripten_resize_heap,"U":_emscripten_run_script,"Tc":_emscripten_sample_gamepad_data,"Sc":_emscripten_set_click_callback_on_thread,"Rc":_emscripten_set_fullscreenchange_callback_on_thread,"Qc":_emscripten_set_gamepadconnected_callback_on_thread,"Pc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Oc":_emscripten_set_keypress_callback_on_thread,"Nc":_emscripten_set_main_loop,"Lc":_emscripten_set_touchcancel_callback_on_thread,"Kc":_emscripten_set_touchend_callback_on_thread,"Jc":_emscripten_set_touchmove_callback_on_thread,"Ic":_emscripten_set_touchstart_callback_on_thread,"Hc":_exit,"Gc":_glActiveTexture,"T":_glAttachShader,"m":_glBindAttribLocation,"d":_glBindBuffer,"h":_glBindFramebuffer,"S":_glBindRenderbuffer,"j":_glBindTexture,"Dc":_glBlendFunc,"x":_glBufferData,"C":_glBufferSubData,"Cc":_glCheckFramebufferStatus,"w":_glClear,"R":_glClearColor,"Bc":_glClearDepthf,"Ac":_glCompileShader,"yc":_glCompressedTexImage2D,"xc":_glCreateProgram,"wc":_glCreateShader,"vc":_glCullFace,"v":_glDeleteBuffers,"uc":_glDeleteFramebuffers,"B":_glDeleteProgram,"tc":_glDeleteRenderbuffers,"u":_glDeleteShader,"t":_glDeleteTextures,"rc":_glDepthFunc,"Q":_glDetachShader,"A":_glDisable,"s":_glDisableVertexAttribArray,"qc":_glDrawArrays,"pc":_glDrawElements,"z":_glEnable,"l":_glEnableVertexAttribArray,"oc":_glFramebufferRenderbuffer,"P":_glFramebufferTexture2D,"mc":_glFrontFace,"r":_glGenBuffers,"lc":_glGenFramebuffers,"kc":_glGenRenderbuffers,"O":_glGenTextures,"jc":_glGetActiveUniform,"g":_glGetAttribLocation,"ic":_glGetFloatv,"hc":_glGetProgramInfoLog,"y":_glGetProgramiv,"fc":_glGetShaderInfoLog,"N":_glGetShaderiv,"n":_glGetString,"e":_glGetUniformLocation,"ec":_glLinkProgram,"dc":_glPixelStorei,"cc":_glReadPixels,"bc":_glRenderbufferStorage,"ac":_glShaderSource,"M":_glTexImage2D,"f":_glTexParameteri,"_b":_glUniform1fv,"Zb":_glUniform1i,"L":_glUniform1iv,"Yb":_glUniform2fv,"Xb":_glUniform2iv,"Wb":_glUniform3fv,"Vb":_glUniform3iv,"Ub":_glUniform4f,"Tb":_glUniform4fv,"Rb":_glUniform4iv,"Qb":_glUniformMatrix4fv,"q":_glUseProgram,"k":_glVertexAttribPointer,"Pb":_glViewport,"Ob":_glfwCreateWindow,"Nb":_glfwDefaultWindowHints,"Mb":_glfwDestroyWindow,"Lb":_glfwGetCursorPos,"Kb":_glfwGetKey,"Ib":_glfwGetMouseButton,"p":_glfwGetTime,"Hb":_glfwInit,"Gb":_glfwMakeContextCurrent,"Fb":_glfwSetCharCallback,"Eb":_glfwSetCursorEnterCallback,"Db":_glfwSetCursorPosCallback,"Cb":_glfwSetDropCallback,"Bb":_glfwSetErrorCallback,"Ab":_glfwSetKeyCallback,"yb":_glfwSetMouseButtonCallback,"xb":_glfwSetScrollCallback,"wb":_glfwSetWindowIconifyCallback,"vb":_glfwSetWindowShouldClose,"ub":_glfwSetWindowSizeCallback,"tb":_glfwSwapBuffers,"K":_glfwTerminate,"i":_glfwWindowHint,"J":_llvm_stackrestore,"I":_llvm_stacksave,"rb":_nanosleep,"qb":_time,"pb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["De"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Ne"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Oe"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Pe"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["He"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["Ie"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["Je"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Ke"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Le"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Me"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_vr_simulator.wasm b/examples/web/core/core_vr_simulator.wasm new file mode 100644 index 0000000..f7cc9c5 Binary files /dev/null and b/examples/web/core/core_vr_simulator.wasm differ diff --git a/examples/web/core/core_window_letterbox.c b/examples/web/core/core_window_letterbox.c index 8c0843d..c01d6e7 100644 --- a/examples/web/core/core_window_letterbox.c +++ b/examples/web/core/core_window_letterbox.c @@ -13,78 +13,108 @@ #include "raylib.h" +#if defined(PLATFORM_WEB) + #include +#endif + #define max(a, b) ((a)>(b)? (a) : (b)) #define min(a, b) ((a)<(b)? (a) : (b)) -int main() -{ - const int windowWidth = 800; - const int windowHeight = 450; +//---------------------------------------------------------------------------------- +// Global Variables Definition +//---------------------------------------------------------------------------------- +const int windowWidth = 800; +const int windowHeight = 450; + +// NOTE: screenWidth/screenHeight should match VR device aspect ratio + +RenderTexture2D target = { 0 }; +Color colors[10] = { 0 }; - // Enable config flags for resizable window and vertical synchro +int gameScreenWidth = 640; +int gameScreenHeight = 480; + +//---------------------------------------------------------------------------------- +// Module Functions Declaration +//---------------------------------------------------------------------------------- +void UpdateDrawFrame(void); // Update and Draw one frame + +//---------------------------------------------------------------------------------- +// Program Main Entry Point +//---------------------------------------------------------------------------------- +int main(void) +{ SetConfigFlags(FLAG_WINDOW_RESIZABLE | FLAG_VSYNC_HINT); InitWindow(windowWidth, windowHeight, "raylib [core] example - window scale letterbox"); SetWindowMinSize(320, 240); - int gameScreenWidth = 640; - int gameScreenHeight = 480; - // Render texture initialization - RenderTexture2D target = LoadRenderTexture(gameScreenWidth, gameScreenHeight); + target = LoadRenderTexture(gameScreenWidth, gameScreenHeight); SetTextureFilter(target.texture, FILTER_BILINEAR); // Texture scale filter to use - - Color colors[10] = { 0 }; + for (int i = 0; i < 10; i++) colors[i] = (Color){ GetRandomValue(100, 250), GetRandomValue(50, 150), GetRandomValue(10, 100), 255 }; - - SetTargetFPS(60); + +#if defined(PLATFORM_WEB) + emscripten_set_main_loop(UpdateDrawFrame, 0, 1); +#else + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop - while( !WindowShouldClose() ) // Detect window close button or ESC key + while (!WindowShouldClose()) // Detect window close button or ESC key { - // Update - //---------------------------------------------------------------------------------- - // Compute required framebuffer scaling - float scale = min((float)GetScreenWidth()/gameScreenWidth, (float)GetScreenHeight()/gameScreenHeight); - - if (IsKeyPressed(KEY_SPACE)) - { - // Recalculate random colors for the bars - for (int i = 0; i < 10; i++) colors[i] = (Color){ GetRandomValue(100, 250), GetRandomValue(50, 150), GetRandomValue(10, 100), 255 }; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - ClearBackground(BLACK); - - // Draw everything in the render texture - BeginTextureMode(target); - - ClearBackground(RAYWHITE); // Clear render texture background color - - for (int i = 0; i < 10; i++) DrawRectangle(0, (gameScreenHeight/10)*i, gameScreenWidth, gameScreenHeight/10, colors[i]); - - DrawText("You can resize the window,\nand see the screen scaling!", 10, 25, 20, WHITE); - - EndTextureMode(); - - // Draw RenderTexture2D to window, properly scaled - DrawTexturePro(target.texture, (Rectangle){ 0.0f, 0.0f, (float)target.texture.width, (float)-target.texture.height }, - (Rectangle){ (GetScreenWidth() - ((float)gameScreenWidth*scale))*0.5, (GetScreenHeight() - ((float)gameScreenHeight*scale))*0.5, - (float)gameScreenWidth*scale, (float)gameScreenHeight*scale }, (Vector2){ 0, 0 }, 0.0f, WHITE); - - EndDrawing(); - //-------------------------------------------------------------------------------------- + UpdateDrawFrame(); } - +#endif + // De-Initialization //-------------------------------------------------------------------------------------- UnloadRenderTexture(target); // Unload render texture - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- - + return 0; } + +//---------------------------------------------------------------------------------- +// Module Functions Definition +//---------------------------------------------------------------------------------- +void UpdateDrawFrame(void) +{ + // Update + //---------------------------------------------------------------------------------- + // Compute required framebuffer scaling + float scale = min((float)GetScreenWidth()/gameScreenWidth, (float)GetScreenHeight()/gameScreenHeight); + + if (IsKeyPressed(KEY_SPACE)) + { + // Recalculate random colors for the bars + for (int i = 0; i < 10; i++) colors[i] = (Color){ GetRandomValue(100, 250), GetRandomValue(50, 150), GetRandomValue(10, 100), 255 }; + } + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + ClearBackground(BLACK); + + // Draw everything in the render texture + BeginTextureMode(target); + + ClearBackground(RAYWHITE); // Clear render texture background color + + for (int i = 0; i < 10; i++) DrawRectangle(0, (gameScreenHeight/10)*i, gameScreenWidth, gameScreenHeight/10, colors[i]); + + DrawText("You can resize the window,\nand see the screen scaling!", 10, 25, 20, WHITE); + + EndTextureMode(); + + // Draw RenderTexture2D to window, properly scaled + DrawTexturePro(target.texture, (Rectangle){ 0.0f, 0.0f, (float)target.texture.width, (float)-target.texture.height }, + (Rectangle){ (GetScreenWidth() - ((float)gameScreenWidth*scale))*0.5, (GetScreenHeight() - ((float)gameScreenHeight*scale))*0.5, + (float)gameScreenWidth*scale, (float)gameScreenHeight*scale }, (Vector2){ 0, 0 }, 0.0f, WHITE); + + EndDrawing(); + //-------------------------------------------------------------------------------------- +} diff --git a/examples/web/core/core_window_letterbox.html b/examples/web/core/core_window_letterbox.html new file mode 100644 index 0000000..bb433ba --- /dev/null +++ b/examples/web/core/core_window_letterbox.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_window_letterbox.js b/examples/web/core/core_window_letterbox.js new file mode 100644 index 0000000..882f879 --- /dev/null +++ b/examples/web/core/core_window_letterbox.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5271248,DYNAMICTOP_PTR=28336;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_window_letterbox.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"yc":___lock,"B":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"A":___syscall146,"m":___syscall221,"ra":___syscall5,"z":___syscall54,"Y":___syscall6,"y":___unlock,"x":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"Ed":_emscripten_get_gamepad_status,"td":_emscripten_get_heap_size,"id":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Pc":_emscripten_glActiveTexture,"Fc":_emscripten_glAttachShader,"xc":_emscripten_glBeginQueryEXT,"sc":_emscripten_glBindAttribLocation,"lc":_emscripten_glBindBuffer,"fc":_emscripten_glBindFramebuffer,"_b":_emscripten_glBindRenderbuffer,"Ub":_emscripten_glBindTexture,"Nb":_emscripten_glBindVertexArrayOES,"Eb":_emscripten_glBlendColor,"ub":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"qe":_emscripten_glGetShaderInfoLog,"pe":_emscripten_glGetShaderPrecisionFormat,"oe":_emscripten_glGetShaderSource,"ne":_emscripten_glGetShaderiv,"me":_emscripten_glGetString,"le":_emscripten_glGetTexParameterfv,"ke":_emscripten_glGetTexParameteriv,"je":_emscripten_glGetUniformLocation,"ie":_emscripten_glGetUniformfv,"he":_emscripten_glGetUniformiv,"ge":_emscripten_glGetVertexAttribPointerv,"fe":_emscripten_glGetVertexAttribfv,"ee":_emscripten_glGetVertexAttribiv,"de":_emscripten_glHint,"ce":_emscripten_glIsBuffer,"be":_emscripten_glIsEnabled,"ae":_emscripten_glIsFramebuffer,"$d":_emscripten_glIsProgram,"_d":_emscripten_glIsQueryEXT,"Zd":_emscripten_glIsRenderbuffer,"Yd":_emscripten_glIsShader,"Xd":_emscripten_glIsTexture,"Wd":_emscripten_glIsVertexArrayOES,"Vd":_emscripten_glLineWidth,"Ud":_emscripten_glLinkProgram,"Td":_emscripten_glPixelStorei,"Sd":_emscripten_glPolygonOffset,"Rd":_emscripten_glQueryCounterEXT,"Qd":_emscripten_glReadPixels,"Pd":_emscripten_glReleaseShaderCompiler,"Od":_emscripten_glRenderbufferStorage,"Nd":_emscripten_glSampleCoverage,"Md":_emscripten_glScissor,"Ld":_emscripten_glShaderBinary,"Kd":_emscripten_glShaderSource,"Jd":_emscripten_glStencilFunc,"Id":_emscripten_glStencilFuncSeparate,"Hd":_emscripten_glStencilMask,"Gd":_emscripten_glStencilMaskSeparate,"Fd":_emscripten_glStencilOp,"Dd":_emscripten_glStencilOpSeparate,"Cd":_emscripten_glTexImage2D,"Bd":_emscripten_glTexParameterf,"Ad":_emscripten_glTexParameterfv,"zd":_emscripten_glTexParameteri,"yd":_emscripten_glTexParameteriv,"xd":_emscripten_glTexSubImage2D,"wd":_emscripten_glUniform1f,"vd":_emscripten_glUniform1fv,"ud":_emscripten_glUniform1i,"sd":_emscripten_glUniform1iv,"rd":_emscripten_glUniform2f,"qd":_emscripten_glUniform2fv,"pd":_emscripten_glUniform2i,"od":_emscripten_glUniform2iv,"nd":_emscripten_glUniform3f,"md":_emscripten_glUniform3fv,"ld":_emscripten_glUniform3i,"kd":_emscripten_glUniform3iv,"jd":_emscripten_glUniform4f,"hd":_emscripten_glUniform4fv,"gd":_emscripten_glUniform4i,"fd":_emscripten_glUniform4iv,"ed":_emscripten_glUniformMatrix2fv,"dd":_emscripten_glUniformMatrix3fv,"cd":_emscripten_glUniformMatrix4fv,"bd":_emscripten_glUseProgram,"ad":_emscripten_glValidateProgram,"$c":_emscripten_glVertexAttrib1f,"_c":_emscripten_glVertexAttrib1fv,"Zc":_emscripten_glVertexAttrib2f,"Yc":_emscripten_glVertexAttrib2fv,"Xc":_emscripten_glVertexAttrib3f,"Wc":_emscripten_glVertexAttrib3fv,"Vc":_emscripten_glVertexAttrib4f,"Uc":_emscripten_glVertexAttrib4fv,"Tc":_emscripten_glVertexAttribDivisorANGLE,"Sc":_emscripten_glVertexAttribPointer,"Rc":_emscripten_glViewport,"Qc":_emscripten_memcpy_big,"Oc":_emscripten_request_pointerlock,"Nc":_emscripten_resize_heap,"V":_emscripten_run_script,"Mc":_emscripten_sample_gamepad_data,"Lc":_emscripten_set_click_callback_on_thread,"Kc":_emscripten_set_fullscreenchange_callback_on_thread,"Jc":_emscripten_set_gamepadconnected_callback_on_thread,"Ic":_emscripten_set_gamepaddisconnected_callback_on_thread,"Hc":_emscripten_set_keypress_callback_on_thread,"Gc":_emscripten_set_main_loop,"Ec":_emscripten_set_touchcancel_callback_on_thread,"Dc":_emscripten_set_touchend_callback_on_thread,"Cc":_emscripten_set_touchmove_callback_on_thread,"Bc":_emscripten_set_touchstart_callback_on_thread,"Ac":_exit,"zc":_glActiveTexture,"U":_glAttachShader,"k":_glBindAttribLocation,"d":_glBindBuffer,"h":_glBindFramebuffer,"T":_glBindRenderbuffer,"g":_glBindTexture,"wc":_glBlendFunc,"s":_glBufferData,"w":_glBufferSubData,"vc":_glCheckFramebufferStatus,"S":_glClear,"R":_glClearColor,"uc":_glClearDepthf,"tc":_glCompileShader,"rc":_glCompressedTexImage2D,"qc":_glCreateProgram,"pc":_glCreateShader,"oc":_glCullFace,"r":_glDeleteBuffers,"nc":_glDeleteFramebuffers,"Q":_glDeleteProgram,"mc":_glDeleteRenderbuffers,"P":_glDeleteShader,"q":_glDeleteTextures,"kc":_glDepthFunc,"O":_glDetachShader,"jc":_glDisable,"p":_glDisableVertexAttribArray,"ic":_glDrawArrays,"hc":_glDrawElements,"N":_glEnable,"j":_glEnableVertexAttribArray,"gc":_glFramebufferRenderbuffer,"M":_glFramebufferTexture2D,"ec":_glFrontFace,"o":_glGenBuffers,"dc":_glGenFramebuffers,"cc":_glGenRenderbuffers,"L":_glGenTextures,"v":_glGetAttribLocation,"bc":_glGetFloatv,"ac":_glGetProgramInfoLog,"K":_glGetProgramiv,"$b":_glGetShaderInfoLog,"J":_glGetShaderiv,"l":_glGetString,"u":_glGetUniformLocation,"Zb":_glLinkProgram,"Yb":_glPixelStorei,"Xb":_glReadPixels,"Wb":_glRenderbufferStorage,"Vb":_glShaderSource,"I":_glTexImage2D,"H":_glTexParameterf,"f":_glTexParameteri,"Tb":_glUniform1i,"Sb":_glUniform4f,"Rb":_glUniformMatrix4fv,"t":_glUseProgram,"i":_glVertexAttribPointer,"Qb":_glViewport,"G":_glfwCreateWindow,"Pb":_glfwDefaultWindowHints,"Ob":_glfwDestroyWindow,"Mb":_glfwGetCursorPos,"F":_glfwGetPrimaryMonitor,"n":_glfwGetTime,"Lb":_glfwGetVideoModes,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Gb":_glfwSetCursorPosCallback,"Fb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"vb":_glfwSwapInterval,"E":_glfwTerminate,"e":_glfwWindowHint,"D":_llvm_stackrestore,"C":_llvm_stacksave,"tb":_nanosleep,"sb":_time,"rb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["we"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["He"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Ie"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["De"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_window_letterbox.wasm b/examples/web/core/core_window_letterbox.wasm new file mode 100644 index 0000000..326b6b6 Binary files /dev/null and b/examples/web/core/core_window_letterbox.wasm differ diff --git a/examples/web/core/core_world_screen.c b/examples/web/core/core_world_screen.c index 2a34e92..677435d 100644 --- a/examples/web/core/core_world_screen.c +++ b/examples/web/core/core_world_screen.c @@ -18,15 +18,15 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world -Camera camera = {{ 8.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; +Camera camera = { 0 }; Vector3 cubePosition = { 0.0f, 0.0f, 0.0f }; -Vector2 cubeScreenPosition; +Vector2 cubeScreenPosition = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -34,7 +34,7 @@ Vector2 cubeScreenPosition; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -42,6 +42,13 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera free"); + // Define the camera to look into our 3d world + camera.position = (Vector3){ 10.0f, 10.0f, 10.0f }; + camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; + camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; + camera.fovy = 45.0f; + camera.type = CAMERA_PERSPECTIVE; + SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode #if defined(PLATFORM_WEB) @@ -49,7 +56,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -72,7 +79,7 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update internal camera and our camera - + // Calculate cube screen space position (with a little offset to be in top) cubeScreenPosition = GetWorldToScreen((Vector3){cubePosition.x, cubePosition.y + 2.5f, cubePosition.z}, camera); //---------------------------------------------------------------------------------- @@ -83,18 +90,18 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED); DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON); DrawGrid(10, 1.0f); - End3dMode(); - + EndMode3D(); + DrawText("Enemy: 100 / 100", cubeScreenPosition.x - MeasureText("Enemy: 100 / 100", 20) / 2, cubeScreenPosition.y, 20, BLACK); DrawText("Text is always on top of the cube", (screenWidth - MeasureText("Text is always on top of the cube", 20)) / 2, 25, 20, GRAY); - + EndDrawing(); //---------------------------------------------------------------------------------- } \ No newline at end of file diff --git a/examples/web/core/core_world_screen.html b/examples/web/core/core_world_screen.html new file mode 100644 index 0000000..bbbc80e --- /dev/null +++ b/examples/web/core/core_world_screen.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/core/core_world_screen.js b/examples/web/core/core_world_screen.js new file mode 100644 index 0000000..a55050c --- /dev/null +++ b/examples/web/core/core_world_screen.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269728,DYNAMICTOP_PTR=26816;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="core_world_screen.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"mc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"sd":_emscripten_get_gamepad_status,"hd":_emscripten_get_heap_size,"Yc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Dc":_emscripten_glActiveTexture,"tc":_emscripten_glAttachShader,"lc":_emscripten_glBeginQueryEXT,"ec":_emscripten_glBindAttribLocation,"ac":_emscripten_glBindBuffer,"Wb":_emscripten_glBindFramebuffer,"Pb":_emscripten_glBindRenderbuffer,"Gb":_emscripten_glBindTexture,"wb":_emscripten_glBindVertexArrayOES,"ob":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ee":_emscripten_glGetShaderInfoLog,"de":_emscripten_glGetShaderPrecisionFormat,"ce":_emscripten_glGetShaderSource,"be":_emscripten_glGetShaderiv,"ae":_emscripten_glGetString,"$d":_emscripten_glGetTexParameterfv,"_d":_emscripten_glGetTexParameteriv,"Zd":_emscripten_glGetUniformLocation,"Yd":_emscripten_glGetUniformfv,"Xd":_emscripten_glGetUniformiv,"Wd":_emscripten_glGetVertexAttribPointerv,"Vd":_emscripten_glGetVertexAttribfv,"Ud":_emscripten_glGetVertexAttribiv,"Td":_emscripten_glHint,"Sd":_emscripten_glIsBuffer,"Rd":_emscripten_glIsEnabled,"Qd":_emscripten_glIsFramebuffer,"Pd":_emscripten_glIsProgram,"Od":_emscripten_glIsQueryEXT,"Nd":_emscripten_glIsRenderbuffer,"Md":_emscripten_glIsShader,"Ld":_emscripten_glIsTexture,"Kd":_emscripten_glIsVertexArrayOES,"Jd":_emscripten_glLineWidth,"Id":_emscripten_glLinkProgram,"Hd":_emscripten_glPixelStorei,"Gd":_emscripten_glPolygonOffset,"Fd":_emscripten_glQueryCounterEXT,"Ed":_emscripten_glReadPixels,"Dd":_emscripten_glReleaseShaderCompiler,"Cd":_emscripten_glRenderbufferStorage,"Bd":_emscripten_glSampleCoverage,"Ad":_emscripten_glScissor,"zd":_emscripten_glShaderBinary,"yd":_emscripten_glShaderSource,"xd":_emscripten_glStencilFunc,"wd":_emscripten_glStencilFuncSeparate,"vd":_emscripten_glStencilMask,"ud":_emscripten_glStencilMaskSeparate,"td":_emscripten_glStencilOp,"rd":_emscripten_glStencilOpSeparate,"qd":_emscripten_glTexImage2D,"pd":_emscripten_glTexParameterf,"od":_emscripten_glTexParameterfv,"nd":_emscripten_glTexParameteri,"md":_emscripten_glTexParameteriv,"ld":_emscripten_glTexSubImage2D,"kd":_emscripten_glUniform1f,"jd":_emscripten_glUniform1fv,"id":_emscripten_glUniform1i,"gd":_emscripten_glUniform1iv,"fd":_emscripten_glUniform2f,"ed":_emscripten_glUniform2fv,"dd":_emscripten_glUniform2i,"cd":_emscripten_glUniform2iv,"bd":_emscripten_glUniform3f,"ad":_emscripten_glUniform3fv,"$c":_emscripten_glUniform3i,"_c":_emscripten_glUniform3iv,"Zc":_emscripten_glUniform4f,"Xc":_emscripten_glUniform4fv,"Wc":_emscripten_glUniform4i,"Vc":_emscripten_glUniform4iv,"Uc":_emscripten_glUniformMatrix2fv,"Tc":_emscripten_glUniformMatrix3fv,"Sc":_emscripten_glUniformMatrix4fv,"Rc":_emscripten_glUseProgram,"Qc":_emscripten_glValidateProgram,"Pc":_emscripten_glVertexAttrib1f,"Oc":_emscripten_glVertexAttrib1fv,"Nc":_emscripten_glVertexAttrib2f,"Mc":_emscripten_glVertexAttrib2fv,"Lc":_emscripten_glVertexAttrib3f,"Kc":_emscripten_glVertexAttrib3fv,"Jc":_emscripten_glVertexAttrib4f,"Ic":_emscripten_glVertexAttrib4fv,"Hc":_emscripten_glVertexAttribDivisorANGLE,"Gc":_emscripten_glVertexAttribPointer,"Fc":_emscripten_glViewport,"Ec":_emscripten_memcpy_big,"Cc":_emscripten_request_pointerlock,"Bc":_emscripten_resize_heap,"O":_emscripten_run_script,"Ac":_emscripten_sample_gamepad_data,"zc":_emscripten_set_click_callback_on_thread,"yc":_emscripten_set_fullscreenchange_callback_on_thread,"xc":_emscripten_set_gamepadconnected_callback_on_thread,"wc":_emscripten_set_gamepaddisconnected_callback_on_thread,"vc":_emscripten_set_keypress_callback_on_thread,"uc":_emscripten_set_main_loop,"sc":_emscripten_set_touchcancel_callback_on_thread,"rc":_emscripten_set_touchend_callback_on_thread,"qc":_emscripten_set_touchmove_callback_on_thread,"pc":_emscripten_set_touchstart_callback_on_thread,"oc":_exit,"nc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"kc":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"jc":_glClearDepthf,"ic":_glCompileShader,"hc":_glCompressedTexImage2D,"gc":_glCreateProgram,"fc":_glCreateShader,"dc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"cc":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"bc":_glDrawArrays,"$b":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"_b":_glFrontFace,"n":_glGenBuffers,"Zb":_glGenTextures,"t":_glGetAttribLocation,"Yb":_glGetFloatv,"Xb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Vb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Ub":_glLinkProgram,"Tb":_glPixelStorei,"Sb":_glReadPixels,"Rb":_glShaderSource,"Qb":_glTexImage2D,"g":_glTexParameteri,"Ob":_glUniform1i,"Nb":_glUniform4f,"Mb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Lb":_glViewport,"Kb":_glfwCreateWindow,"Jb":_glfwDefaultWindowHints,"Ib":_glfwDestroyWindow,"Hb":_glfwGetCursorPos,"Fb":_glfwGetKey,"Eb":_glfwGetMouseButton,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["le"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/core/core_world_screen.wasm b/examples/web/core/core_world_screen.wasm new file mode 100644 index 0000000..2815632 Binary files /dev/null and b/examples/web/core/core_world_screen.wasm differ diff --git a/examples/web/models/models_animation.c b/examples/web/models/models_animation.c index 10e2425..dfafbd2 100644 --- a/examples/web/models/models_animation.c +++ b/examples/web/models/models_animation.c @@ -27,7 +27,7 @@ Camera camera = { 0 }; Model model = { 0 }; Texture2D texture = { 0 }; - + Vector3 position = { 0.0f, 0.0f, 0.0f }; // Load animation data @@ -43,7 +43,7 @@ void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- // Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -70,7 +70,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -82,7 +82,7 @@ int main() //-------------------------------------------------------------------------------------- // Unload model animations data for (int i = 0; i < animsCount; i++) UnloadModelAnimation(anims[i]); - + UnloadModel(model); // Unload model CloseWindow(); // Close window and OpenGL context diff --git a/examples/web/models/models_animation.data b/examples/web/models/models_animation.data new file mode 100644 index 0000000..087b208 Binary files /dev/null and b/examples/web/models/models_animation.data differ diff --git a/examples/web/models/models_animation.html b/examples/web/models/models_animation.html new file mode 100644 index 0000000..fb57b0b --- /dev/null +++ b/examples/web/models/models_animation.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/models/models_animation.js b/examples/web/models/models_animation.js new file mode 100644 index 0000000..24ac6ee --- /dev/null +++ b/examples/web/models/models_animation.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_animation.data";var REMOTE_PACKAGE_BASE="models_animation.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","guy",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5279488,DYNAMICTOP_PTR=36576;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_animation.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"qc":___lock,"F":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"E":___syscall146,"q":___syscall221,"ra":___syscall5,"D":___syscall54,"Y":___syscall6,"C":___unlock,"B":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"vd":_emscripten_get_gamepad_status,"kd":_emscripten_get_heap_size,"$c":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Gc":_emscripten_glActiveTexture,"wc":_emscripten_glAttachShader,"pc":_emscripten_glBeginQueryEXT,"ic":_emscripten_glBindAttribLocation,"fc":_emscripten_glBindBuffer,"ac":_emscripten_glBindFramebuffer,"Vb":_emscripten_glBindRenderbuffer,"Qb":_emscripten_glBindTexture,"Gb":_emscripten_glBindVertexArrayOES,"vb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"he":_emscripten_glGetShaderInfoLog,"ge":_emscripten_glGetShaderPrecisionFormat,"fe":_emscripten_glGetShaderSource,"ee":_emscripten_glGetShaderiv,"de":_emscripten_glGetString,"ce":_emscripten_glGetTexParameterfv,"be":_emscripten_glGetTexParameteriv,"ae":_emscripten_glGetUniformLocation,"$d":_emscripten_glGetUniformfv,"_d":_emscripten_glGetUniformiv,"Zd":_emscripten_glGetVertexAttribPointerv,"Yd":_emscripten_glGetVertexAttribfv,"Xd":_emscripten_glGetVertexAttribiv,"Wd":_emscripten_glHint,"Vd":_emscripten_glIsBuffer,"Ud":_emscripten_glIsEnabled,"Td":_emscripten_glIsFramebuffer,"Sd":_emscripten_glIsProgram,"Rd":_emscripten_glIsQueryEXT,"Qd":_emscripten_glIsRenderbuffer,"Pd":_emscripten_glIsShader,"Od":_emscripten_glIsTexture,"Nd":_emscripten_glIsVertexArrayOES,"Md":_emscripten_glLineWidth,"Ld":_emscripten_glLinkProgram,"Kd":_emscripten_glPixelStorei,"Jd":_emscripten_glPolygonOffset,"Id":_emscripten_glQueryCounterEXT,"Hd":_emscripten_glReadPixels,"Gd":_emscripten_glReleaseShaderCompiler,"Fd":_emscripten_glRenderbufferStorage,"Ed":_emscripten_glSampleCoverage,"Dd":_emscripten_glScissor,"Cd":_emscripten_glShaderBinary,"Bd":_emscripten_glShaderSource,"Ad":_emscripten_glStencilFunc,"zd":_emscripten_glStencilFuncSeparate,"yd":_emscripten_glStencilMask,"xd":_emscripten_glStencilMaskSeparate,"wd":_emscripten_glStencilOp,"ud":_emscripten_glStencilOpSeparate,"td":_emscripten_glTexImage2D,"sd":_emscripten_glTexParameterf,"rd":_emscripten_glTexParameterfv,"qd":_emscripten_glTexParameteri,"pd":_emscripten_glTexParameteriv,"od":_emscripten_glTexSubImage2D,"nd":_emscripten_glUniform1f,"md":_emscripten_glUniform1fv,"ld":_emscripten_glUniform1i,"jd":_emscripten_glUniform1iv,"id":_emscripten_glUniform2f,"hd":_emscripten_glUniform2fv,"gd":_emscripten_glUniform2i,"fd":_emscripten_glUniform2iv,"ed":_emscripten_glUniform3f,"dd":_emscripten_glUniform3fv,"cd":_emscripten_glUniform3i,"bd":_emscripten_glUniform3iv,"ad":_emscripten_glUniform4f,"_c":_emscripten_glUniform4fv,"Zc":_emscripten_glUniform4i,"Yc":_emscripten_glUniform4iv,"Xc":_emscripten_glUniformMatrix2fv,"Wc":_emscripten_glUniformMatrix3fv,"Vc":_emscripten_glUniformMatrix4fv,"Uc":_emscripten_glUseProgram,"Tc":_emscripten_glValidateProgram,"Sc":_emscripten_glVertexAttrib1f,"Rc":_emscripten_glVertexAttrib1fv,"Qc":_emscripten_glVertexAttrib2f,"Pc":_emscripten_glVertexAttrib2fv,"Oc":_emscripten_glVertexAttrib3f,"Nc":_emscripten_glVertexAttrib3fv,"Mc":_emscripten_glVertexAttrib4f,"Lc":_emscripten_glVertexAttrib4fv,"Kc":_emscripten_glVertexAttribDivisorANGLE,"Jc":_emscripten_glVertexAttribPointer,"Ic":_emscripten_glViewport,"Hc":_emscripten_memcpy_big,"Fc":_emscripten_request_pointerlock,"Ec":_emscripten_resize_heap,"V":_emscripten_run_script,"Dc":_emscripten_sample_gamepad_data,"Cc":_emscripten_set_click_callback_on_thread,"Bc":_emscripten_set_fullscreenchange_callback_on_thread,"Ac":_emscripten_set_gamepadconnected_callback_on_thread,"zc":_emscripten_set_gamepaddisconnected_callback_on_thread,"yc":_emscripten_set_keypress_callback_on_thread,"xc":_emscripten_set_main_loop,"vc":_emscripten_set_touchcancel_callback_on_thread,"uc":_emscripten_set_touchend_callback_on_thread,"tc":_emscripten_set_touchmove_callback_on_thread,"sc":_emscripten_set_touchstart_callback_on_thread,"rc":_exit,"A":_glActiveTexture,"U":_glAttachShader,"n":_glBindAttribLocation,"c":_glBindBuffer,"j":_glBindTexture,"oc":_glBlendFunc,"h":_glBufferData,"s":_glBufferSubData,"T":_glClear,"S":_glClearColor,"nc":_glClearDepthf,"mc":_glCompileShader,"lc":_glCompressedTexImage2D,"kc":_glCreateProgram,"jc":_glCreateShader,"hc":_glCullFace,"p":_glDeleteBuffers,"z":_glDeleteProgram,"R":_glDeleteShader,"Q":_glDeleteTextures,"gc":_glDepthFunc,"P":_glDetachShader,"O":_glDisable,"i":_glDisableVertexAttribArray,"N":_glDrawArrays,"M":_glDrawElements,"y":_glEnable,"f":_glEnableVertexAttribArray,"ec":_glFrontFace,"g":_glGenBuffers,"dc":_glGenTextures,"x":_glGetAttribLocation,"cc":_glGetFloatv,"bc":_glGetProgramInfoLog,"L":_glGetProgramiv,"$b":_glGetShaderInfoLog,"K":_glGetShaderiv,"o":_glGetString,"w":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Xb":_glShaderSource,"Wb":_glTexImage2D,"m":_glTexParameteri,"J":_glUniform1i,"v":_glUniform4f,"u":_glUniformMatrix4fv,"l":_glUseProgram,"Ub":_glVertexAttrib2f,"Tb":_glVertexAttrib3f,"t":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Sb":_glViewport,"Rb":_glfwCreateWindow,"Pb":_glfwDefaultWindowHints,"Ob":_glfwDestroyWindow,"Nb":_glfwGetCursorPos,"Mb":_glfwGetKey,"Lb":_glfwGetMouseButton,"r":_glfwGetTime,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Fb":_glfwSetCursorPosCallback,"Eb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"I":_glfwTerminate,"k":_glfwWindowHint,"H":_llvm_stackrestore,"G":_llvm_stacksave,"ub":_nanosleep,"tb":_time,"sb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_animation.wasm b/examples/web/models/models_animation.wasm new file mode 100644 index 0000000..aedee06 Binary files /dev/null and b/examples/web/models/models_animation.wasm differ diff --git a/examples/web/models/models_billboard.c b/examples/web/models/models_billboard.c index ea64d03..cd83e33 100644 --- a/examples/web/models/models_billboard.c +++ b/examples/web/models/models_billboard.c @@ -18,22 +18,22 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world -Camera camera = {{ 5.0f, 4.0f, 5.0f }, { 0.0f, 2.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; +Camera camera = { 0 }; -Texture2D bill; // Our texture billboard +Texture2D bill = { 0 }; // Our texture billboard Vector3 billPosition = { 0.0f, 2.0f, 0.0f }; // Position where draw billboard - + //---------------------------------------------------------------------------------- // Module Functions Declaration //---------------------------------------------------------------------------------- void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -41,8 +41,14 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [models] example - drawing billboards"); + camera.position = (Vector3){ 5.0f, 4.0f, 5.0f }; + camera.target = (Vector3){ 0.0f, 2.0f, 0.0f }; + camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; + camera.fovy = 45.0f; + camera.type = CAMERA_PERSPECTIVE; + bill = LoadTexture("resources/billboard.png"); // Our texture billboard - + SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode #if defined(PLATFORM_WEB) @@ -50,7 +56,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -84,13 +90,12 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); - - DrawBillboard(camera, bill, billPosition, 2.0f, WHITE); + BeginMode3D(camera); DrawGrid(10, 1.0f); // Draw a grid + DrawBillboard(camera, bill, billPosition, 2.0f, WHITE); - End3dMode(); + EndMode3D(); DrawFPS(10, 10); diff --git a/examples/web/models/models_billboard.data b/examples/web/models/models_billboard.data new file mode 100644 index 0000000..e2fe398 Binary files /dev/null and b/examples/web/models/models_billboard.data differ diff --git a/examples/web/models/models_billboard.html b/examples/web/models/models_billboard.html new file mode 100644 index 0000000..842297e --- /dev/null +++ b/examples/web/models/models_billboard.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/models/models_billboard.js b/examples/web/models/models_billboard.js new file mode 100644 index 0000000..177e3a7 --- /dev/null +++ b/examples/web/models/models_billboard.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_billboard.data";var REMOTE_PACKAGE_BASE="models_billboard.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273104,DYNAMICTOP_PTR=30192;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_billboard.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"mc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"sd":_emscripten_get_gamepad_status,"hd":_emscripten_get_heap_size,"Yc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Dc":_emscripten_glActiveTexture,"tc":_emscripten_glAttachShader,"lc":_emscripten_glBeginQueryEXT,"ec":_emscripten_glBindAttribLocation,"ac":_emscripten_glBindBuffer,"Wb":_emscripten_glBindFramebuffer,"Pb":_emscripten_glBindRenderbuffer,"Gb":_emscripten_glBindTexture,"wb":_emscripten_glBindVertexArrayOES,"ob":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ee":_emscripten_glGetShaderInfoLog,"de":_emscripten_glGetShaderPrecisionFormat,"ce":_emscripten_glGetShaderSource,"be":_emscripten_glGetShaderiv,"ae":_emscripten_glGetString,"$d":_emscripten_glGetTexParameterfv,"_d":_emscripten_glGetTexParameteriv,"Zd":_emscripten_glGetUniformLocation,"Yd":_emscripten_glGetUniformfv,"Xd":_emscripten_glGetUniformiv,"Wd":_emscripten_glGetVertexAttribPointerv,"Vd":_emscripten_glGetVertexAttribfv,"Ud":_emscripten_glGetVertexAttribiv,"Td":_emscripten_glHint,"Sd":_emscripten_glIsBuffer,"Rd":_emscripten_glIsEnabled,"Qd":_emscripten_glIsFramebuffer,"Pd":_emscripten_glIsProgram,"Od":_emscripten_glIsQueryEXT,"Nd":_emscripten_glIsRenderbuffer,"Md":_emscripten_glIsShader,"Ld":_emscripten_glIsTexture,"Kd":_emscripten_glIsVertexArrayOES,"Jd":_emscripten_glLineWidth,"Id":_emscripten_glLinkProgram,"Hd":_emscripten_glPixelStorei,"Gd":_emscripten_glPolygonOffset,"Fd":_emscripten_glQueryCounterEXT,"Ed":_emscripten_glReadPixels,"Dd":_emscripten_glReleaseShaderCompiler,"Cd":_emscripten_glRenderbufferStorage,"Bd":_emscripten_glSampleCoverage,"Ad":_emscripten_glScissor,"zd":_emscripten_glShaderBinary,"yd":_emscripten_glShaderSource,"xd":_emscripten_glStencilFunc,"wd":_emscripten_glStencilFuncSeparate,"vd":_emscripten_glStencilMask,"ud":_emscripten_glStencilMaskSeparate,"td":_emscripten_glStencilOp,"rd":_emscripten_glStencilOpSeparate,"qd":_emscripten_glTexImage2D,"pd":_emscripten_glTexParameterf,"od":_emscripten_glTexParameterfv,"nd":_emscripten_glTexParameteri,"md":_emscripten_glTexParameteriv,"ld":_emscripten_glTexSubImage2D,"kd":_emscripten_glUniform1f,"jd":_emscripten_glUniform1fv,"id":_emscripten_glUniform1i,"gd":_emscripten_glUniform1iv,"fd":_emscripten_glUniform2f,"ed":_emscripten_glUniform2fv,"dd":_emscripten_glUniform2i,"cd":_emscripten_glUniform2iv,"bd":_emscripten_glUniform3f,"ad":_emscripten_glUniform3fv,"$c":_emscripten_glUniform3i,"_c":_emscripten_glUniform3iv,"Zc":_emscripten_glUniform4f,"Xc":_emscripten_glUniform4fv,"Wc":_emscripten_glUniform4i,"Vc":_emscripten_glUniform4iv,"Uc":_emscripten_glUniformMatrix2fv,"Tc":_emscripten_glUniformMatrix3fv,"Sc":_emscripten_glUniformMatrix4fv,"Rc":_emscripten_glUseProgram,"Qc":_emscripten_glValidateProgram,"Pc":_emscripten_glVertexAttrib1f,"Oc":_emscripten_glVertexAttrib1fv,"Nc":_emscripten_glVertexAttrib2f,"Mc":_emscripten_glVertexAttrib2fv,"Lc":_emscripten_glVertexAttrib3f,"Kc":_emscripten_glVertexAttrib3fv,"Jc":_emscripten_glVertexAttrib4f,"Ic":_emscripten_glVertexAttrib4fv,"Hc":_emscripten_glVertexAttribDivisorANGLE,"Gc":_emscripten_glVertexAttribPointer,"Fc":_emscripten_glViewport,"Ec":_emscripten_memcpy_big,"Cc":_emscripten_request_pointerlock,"Bc":_emscripten_resize_heap,"O":_emscripten_run_script,"Ac":_emscripten_sample_gamepad_data,"zc":_emscripten_set_click_callback_on_thread,"yc":_emscripten_set_fullscreenchange_callback_on_thread,"xc":_emscripten_set_gamepadconnected_callback_on_thread,"wc":_emscripten_set_gamepaddisconnected_callback_on_thread,"vc":_emscripten_set_keypress_callback_on_thread,"uc":_emscripten_set_main_loop,"sc":_emscripten_set_touchcancel_callback_on_thread,"rc":_emscripten_set_touchend_callback_on_thread,"qc":_emscripten_set_touchmove_callback_on_thread,"pc":_emscripten_set_touchstart_callback_on_thread,"oc":_exit,"nc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"kc":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"jc":_glClearDepthf,"ic":_glCompileShader,"hc":_glCompressedTexImage2D,"gc":_glCreateProgram,"fc":_glCreateShader,"dc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"cc":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"bc":_glDrawArrays,"$b":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"_b":_glFrontFace,"n":_glGenBuffers,"Zb":_glGenTextures,"t":_glGetAttribLocation,"Yb":_glGetFloatv,"Xb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Vb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Ub":_glLinkProgram,"Tb":_glPixelStorei,"Sb":_glReadPixels,"Rb":_glShaderSource,"Qb":_glTexImage2D,"g":_glTexParameteri,"Ob":_glUniform1i,"Nb":_glUniform4f,"Mb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Lb":_glViewport,"Kb":_glfwCreateWindow,"Jb":_glfwDefaultWindowHints,"Ib":_glfwDestroyWindow,"Hb":_glfwGetCursorPos,"Fb":_glfwGetKey,"Eb":_glfwGetMouseButton,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["le"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_billboard.wasm b/examples/web/models/models_billboard.wasm new file mode 100644 index 0000000..2ed68df Binary files /dev/null and b/examples/web/models/models_billboard.wasm differ diff --git a/examples/web/models/models_box_collisions.c b/examples/web/models/models_box_collisions.c index 71fe55f..9aa63db 100644 --- a/examples/web/models/models_box_collisions.c +++ b/examples/web/models/models_box_collisions.c @@ -18,23 +18,23 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world Camera camera = {{ 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; - + Vector3 playerPosition = { 0.0f, 1.0f, 2.0f }; Vector3 playerSize = { 1.0f, 2.0f, 1.0f }; -Color playerColor; - +Color playerColor = GREEN; + Vector3 enemyBoxPos = { -4.0f, 1.0f, 0.0f }; Vector3 enemyBoxSize = { 2.0f, 2.0f, 2.0f }; - + Vector3 enemySpherePos = { 4.0f, 0.0f, 0.0f }; float enemySphereSize = 1.5f; - + bool collision = false; //---------------------------------------------------------------------------------- @@ -43,7 +43,7 @@ bool collision = false; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -51,14 +51,12 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [models] example - box collisions"); - playerColor = GREEN; - #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -81,40 +79,40 @@ void UpdateDrawFrame(void) { // Update //---------------------------------------------------------------------------------- - + // Move player if (IsKeyDown(KEY_RIGHT)) playerPosition.x += 0.2f; else if (IsKeyDown(KEY_LEFT)) playerPosition.x -= 0.2f; else if (IsKeyDown(KEY_DOWN)) playerPosition.z += 0.2f; else if (IsKeyDown(KEY_UP)) playerPosition.z -= 0.2f; - + collision = false; - + // Check collisions player vs enemy-box if (CheckCollisionBoxes( - (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2, - playerPosition.y - playerSize.y/2, - playerPosition.z - playerSize.z/2 }, + (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2, + playerPosition.y - playerSize.y/2, + playerPosition.z - playerSize.z/2 }, (Vector3){ playerPosition.x + playerSize.x/2, - playerPosition.y + playerSize.y/2, + playerPosition.y + playerSize.y/2, playerPosition.z + playerSize.z/2 }}, - (BoundingBox){(Vector3){ enemyBoxPos.x - enemyBoxSize.x/2, - enemyBoxPos.y - enemyBoxSize.y/2, - enemyBoxPos.z - enemyBoxSize.z/2 }, + (BoundingBox){(Vector3){ enemyBoxPos.x - enemyBoxSize.x/2, + enemyBoxPos.y - enemyBoxSize.y/2, + enemyBoxPos.z - enemyBoxSize.z/2 }, (Vector3){ enemyBoxPos.x + enemyBoxSize.x/2, - enemyBoxPos.y + enemyBoxSize.y/2, + enemyBoxPos.y + enemyBoxSize.y/2, enemyBoxPos.z + enemyBoxSize.z/2 }})) collision = true; - + // Check collisions player vs enemy-sphere if (CheckCollisionBoxSphere( - (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2, - playerPosition.y - playerSize.y/2, - playerPosition.z - playerSize.z/2 }, + (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2, + playerPosition.y - playerSize.y/2, + playerPosition.z - playerSize.z/2 }, (Vector3){ playerPosition.x + playerSize.x/2, - playerPosition.y + playerSize.y/2, - playerPosition.z + playerSize.z/2 }}, + playerPosition.y + playerSize.y/2, + playerPosition.z + playerSize.z/2 }}, enemySpherePos, enemySphereSize)) collision = true; - + if (collision) playerColor = RED; else playerColor = GREEN; //---------------------------------------------------------------------------------- @@ -125,23 +123,23 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); // Draw enemy-box DrawCube(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, GRAY); DrawCubeWires(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, DARKGRAY); - + // Draw enemy-sphere DrawSphere(enemySpherePos, enemySphereSize, GRAY); DrawSphereWires(enemySpherePos, enemySphereSize, 16, 16, DARKGRAY); - + // Draw player DrawCubeV(playerPosition, playerSize, playerColor); DrawGrid(10, 1.0f); // Draw a grid - End3dMode(); - + EndMode3D(); + DrawText("Move player with cursors to collide", 220, 40, 20, GRAY); DrawFPS(10, 10); diff --git a/examples/web/models/models_box_collisions.html b/examples/web/models/models_box_collisions.html new file mode 100644 index 0000000..255e55b --- /dev/null +++ b/examples/web/models/models_box_collisions.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/models/models_box_collisions.js b/examples/web/models/models_box_collisions.js new file mode 100644 index 0000000..aad0cf4 --- /dev/null +++ b/examples/web/models/models_box_collisions.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269728,DYNAMICTOP_PTR=26816;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_box_collisions.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"$b":_emscripten_glBindBuffer,"Vb":_emscripten_glBindFramebuffer,"Ob":_emscripten_glBindRenderbuffer,"Fb":_emscripten_glBindTexture,"vb":_emscripten_glBindVertexArrayOES,"ob":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"O":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"jc":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"bc":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"ac":_glDrawArrays,"_b":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"Zb":_glFrontFace,"n":_glGenBuffers,"Yb":_glGenTextures,"t":_glGetAttribLocation,"Xb":_glGetFloatv,"Wb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Ub":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Tb":_glLinkProgram,"Sb":_glPixelStorei,"Rb":_glReadPixels,"Qb":_glShaderSource,"Pb":_glTexImage2D,"g":_glTexParameteri,"Nb":_glUniform1i,"Mb":_glUniform4f,"Lb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Kb":_glViewport,"Jb":_glfwCreateWindow,"Ib":_glfwDefaultWindowHints,"Hb":_glfwDestroyWindow,"Gb":_glfwGetCursorPos,"Eb":_glfwGetKey,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"wb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_box_collisions.wasm b/examples/web/models/models_box_collisions.wasm new file mode 100644 index 0000000..d15a7a2 Binary files /dev/null and b/examples/web/models/models_box_collisions.wasm differ diff --git a/examples/web/models/models_cubicmap.c b/examples/web/models/models_cubicmap.c index 9f87992..a4cb271 100644 --- a/examples/web/models/models_cubicmap.c +++ b/examples/web/models/models_cubicmap.c @@ -18,14 +18,14 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world Camera camera = {{ 16.0f, 14.0f, 16.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; -Texture2D cubicmap; -Model map; +Texture2D cubicmap = { 0 }; +Model model = { 0 }; Vector3 mapPosition = { -16.0f, 0.0f, -8.0f }; // Set model position @@ -35,7 +35,7 @@ Vector3 mapPosition = { -16.0f, 0.0f, -8.0f }; // Set model posi void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -45,16 +45,16 @@ int main(void) Image image = LoadImage("resources/cubicmap.png"); // Load cubicmap image (RAM) cubicmap = LoadTextureFromImage(image); // Convert image to texture to display (VRAM) - + Mesh mesh = GenMeshCubicmap(image, (Vector3){ 1.0f, 1.0f, 1.0f }); - map = LoadModelFromMesh(mesh); - + model = LoadModelFromMesh(mesh); + // NOTE: By default each cube is mapped to one part of texture atlas Texture2D texture = LoadTexture("resources/cubicmap_atlas.png"); // Load map texture - map.material.maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture + model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture UnloadImage(image); // Unload cubesmap image from RAM, already uploaded to VRAM - + SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode #if defined(PLATFORM_WEB) @@ -62,7 +62,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -74,7 +74,7 @@ int main(void) //-------------------------------------------------------------------------------------- UnloadTexture(cubicmap); // Unload cubicmap texture UnloadTexture(texture); // Unload map texture - UnloadModel(map); // Unload map model + UnloadModel(model); // Unload map model CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -98,15 +98,15 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); + + DrawModel(model, mapPosition, 1.0f, WHITE); - DrawModel(map, mapPosition, 1.0f, WHITE); + EndMode3D(); - End3dMode(); - DrawTextureEx(cubicmap, (Vector2){ screenWidth - cubicmap.width*4 - 20, 20 }, 0.0f, 4.0f, WHITE); DrawRectangleLines(screenWidth - cubicmap.width*4 - 20, 20, cubicmap.width*4, cubicmap.height*4, GREEN); - + DrawText("cubicmap image used to", 658, 90, 10, GRAY); DrawText("generate map 3d model", 658, 104, 10, GRAY); diff --git a/examples/web/models/models_cubicmap.data b/examples/web/models/models_cubicmap.data new file mode 100644 index 0000000..c7df666 Binary files /dev/null and b/examples/web/models/models_cubicmap.data differ diff --git a/examples/web/models/models_cubicmap.html b/examples/web/models/models_cubicmap.html new file mode 100644 index 0000000..7ad93af --- /dev/null +++ b/examples/web/models/models_cubicmap.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/models/models_cubicmap.js b/examples/web/models/models_cubicmap.js new file mode 100644 index 0000000..29f3080 --- /dev/null +++ b/examples/web/models/models_cubicmap.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_cubicmap.data";var REMOTE_PACKAGE_BASE="models_cubicmap.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273696,DYNAMICTOP_PTR=30784;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_cubicmap.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"qc":___lock,"F":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"E":___syscall146,"q":___syscall221,"ra":___syscall5,"D":___syscall54,"Y":___syscall6,"C":___unlock,"B":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"vd":_emscripten_get_gamepad_status,"kd":_emscripten_get_heap_size,"$c":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Gc":_emscripten_glActiveTexture,"wc":_emscripten_glAttachShader,"pc":_emscripten_glBeginQueryEXT,"ic":_emscripten_glBindAttribLocation,"fc":_emscripten_glBindBuffer,"ac":_emscripten_glBindFramebuffer,"Vb":_emscripten_glBindRenderbuffer,"Qb":_emscripten_glBindTexture,"Gb":_emscripten_glBindVertexArrayOES,"vb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"he":_emscripten_glGetShaderInfoLog,"ge":_emscripten_glGetShaderPrecisionFormat,"fe":_emscripten_glGetShaderSource,"ee":_emscripten_glGetShaderiv,"de":_emscripten_glGetString,"ce":_emscripten_glGetTexParameterfv,"be":_emscripten_glGetTexParameteriv,"ae":_emscripten_glGetUniformLocation,"$d":_emscripten_glGetUniformfv,"_d":_emscripten_glGetUniformiv,"Zd":_emscripten_glGetVertexAttribPointerv,"Yd":_emscripten_glGetVertexAttribfv,"Xd":_emscripten_glGetVertexAttribiv,"Wd":_emscripten_glHint,"Vd":_emscripten_glIsBuffer,"Ud":_emscripten_glIsEnabled,"Td":_emscripten_glIsFramebuffer,"Sd":_emscripten_glIsProgram,"Rd":_emscripten_glIsQueryEXT,"Qd":_emscripten_glIsRenderbuffer,"Pd":_emscripten_glIsShader,"Od":_emscripten_glIsTexture,"Nd":_emscripten_glIsVertexArrayOES,"Md":_emscripten_glLineWidth,"Ld":_emscripten_glLinkProgram,"Kd":_emscripten_glPixelStorei,"Jd":_emscripten_glPolygonOffset,"Id":_emscripten_glQueryCounterEXT,"Hd":_emscripten_glReadPixels,"Gd":_emscripten_glReleaseShaderCompiler,"Fd":_emscripten_glRenderbufferStorage,"Ed":_emscripten_glSampleCoverage,"Dd":_emscripten_glScissor,"Cd":_emscripten_glShaderBinary,"Bd":_emscripten_glShaderSource,"Ad":_emscripten_glStencilFunc,"zd":_emscripten_glStencilFuncSeparate,"yd":_emscripten_glStencilMask,"xd":_emscripten_glStencilMaskSeparate,"wd":_emscripten_glStencilOp,"ud":_emscripten_glStencilOpSeparate,"td":_emscripten_glTexImage2D,"sd":_emscripten_glTexParameterf,"rd":_emscripten_glTexParameterfv,"qd":_emscripten_glTexParameteri,"pd":_emscripten_glTexParameteriv,"od":_emscripten_glTexSubImage2D,"nd":_emscripten_glUniform1f,"md":_emscripten_glUniform1fv,"ld":_emscripten_glUniform1i,"jd":_emscripten_glUniform1iv,"id":_emscripten_glUniform2f,"hd":_emscripten_glUniform2fv,"gd":_emscripten_glUniform2i,"fd":_emscripten_glUniform2iv,"ed":_emscripten_glUniform3f,"dd":_emscripten_glUniform3fv,"cd":_emscripten_glUniform3i,"bd":_emscripten_glUniform3iv,"ad":_emscripten_glUniform4f,"_c":_emscripten_glUniform4fv,"Zc":_emscripten_glUniform4i,"Yc":_emscripten_glUniform4iv,"Xc":_emscripten_glUniformMatrix2fv,"Wc":_emscripten_glUniformMatrix3fv,"Vc":_emscripten_glUniformMatrix4fv,"Uc":_emscripten_glUseProgram,"Tc":_emscripten_glValidateProgram,"Sc":_emscripten_glVertexAttrib1f,"Rc":_emscripten_glVertexAttrib1fv,"Qc":_emscripten_glVertexAttrib2f,"Pc":_emscripten_glVertexAttrib2fv,"Oc":_emscripten_glVertexAttrib3f,"Nc":_emscripten_glVertexAttrib3fv,"Mc":_emscripten_glVertexAttrib4f,"Lc":_emscripten_glVertexAttrib4fv,"Kc":_emscripten_glVertexAttribDivisorANGLE,"Jc":_emscripten_glVertexAttribPointer,"Ic":_emscripten_glViewport,"Hc":_emscripten_memcpy_big,"Fc":_emscripten_request_pointerlock,"Ec":_emscripten_resize_heap,"V":_emscripten_run_script,"Dc":_emscripten_sample_gamepad_data,"Cc":_emscripten_set_click_callback_on_thread,"Bc":_emscripten_set_fullscreenchange_callback_on_thread,"Ac":_emscripten_set_gamepadconnected_callback_on_thread,"zc":_emscripten_set_gamepaddisconnected_callback_on_thread,"yc":_emscripten_set_keypress_callback_on_thread,"xc":_emscripten_set_main_loop,"vc":_emscripten_set_touchcancel_callback_on_thread,"uc":_emscripten_set_touchend_callback_on_thread,"tc":_emscripten_set_touchmove_callback_on_thread,"sc":_emscripten_set_touchstart_callback_on_thread,"rc":_exit,"A":_glActiveTexture,"U":_glAttachShader,"n":_glBindAttribLocation,"c":_glBindBuffer,"j":_glBindTexture,"oc":_glBlendFunc,"h":_glBufferData,"z":_glBufferSubData,"T":_glClear,"S":_glClearColor,"nc":_glClearDepthf,"mc":_glCompileShader,"lc":_glCompressedTexImage2D,"kc":_glCreateProgram,"jc":_glCreateShader,"hc":_glCullFace,"p":_glDeleteBuffers,"y":_glDeleteProgram,"R":_glDeleteShader,"Q":_glDeleteTextures,"gc":_glDepthFunc,"P":_glDetachShader,"O":_glDisable,"i":_glDisableVertexAttribArray,"N":_glDrawArrays,"M":_glDrawElements,"x":_glEnable,"f":_glEnableVertexAttribArray,"ec":_glFrontFace,"g":_glGenBuffers,"dc":_glGenTextures,"w":_glGetAttribLocation,"cc":_glGetFloatv,"bc":_glGetProgramInfoLog,"L":_glGetProgramiv,"$b":_glGetShaderInfoLog,"K":_glGetShaderiv,"o":_glGetString,"v":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Xb":_glShaderSource,"Wb":_glTexImage2D,"m":_glTexParameteri,"J":_glUniform1i,"u":_glUniform4f,"t":_glUniformMatrix4fv,"l":_glUseProgram,"Ub":_glVertexAttrib2f,"Tb":_glVertexAttrib3f,"s":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Sb":_glViewport,"Rb":_glfwCreateWindow,"Pb":_glfwDefaultWindowHints,"Ob":_glfwDestroyWindow,"Nb":_glfwGetCursorPos,"Mb":_glfwGetKey,"Lb":_glfwGetMouseButton,"r":_glfwGetTime,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Fb":_glfwSetCursorPosCallback,"Eb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"I":_glfwTerminate,"k":_glfwWindowHint,"H":_llvm_stackrestore,"G":_llvm_stacksave,"ub":_nanosleep,"tb":_time,"sb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_cubicmap.wasm b/examples/web/models/models_cubicmap.wasm new file mode 100644 index 0000000..a468730 Binary files /dev/null and b/examples/web/models/models_cubicmap.wasm differ diff --git a/examples/web/models/models_first_person_maze.c b/examples/web/models/models_first_person_maze.c index 9926f7e..b48495b 100644 --- a/examples/web/models/models_first_person_maze.c +++ b/examples/web/models/models_first_person_maze.c @@ -44,7 +44,7 @@ void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- // Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -57,17 +57,17 @@ int main() cubicmap = LoadTextureFromImage(imMap); // Convert image to texture to display (VRAM) Mesh mesh = GenMeshCubicmap(imMap, (Vector3){ 1.0f, 1.0f, 1.0f }); model = LoadModelFromMesh(mesh); - + // NOTE: By default each cube is mapped to one part of texture atlas texture = LoadTexture("resources/cubicmap_atlas.png"); // Load map texture model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture - + // Get map image data to be used for collision detection mapPixels = GetImageData(imMap); UnloadImage(imMap); // Unload image from RAM playerPosition = camera.position; // Set player position - + SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set camera mode #if defined(PLATFORM_WEB) @@ -75,7 +75,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -86,7 +86,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- free(mapPixels); // Unload color array - + UnloadTexture(cubicmap); // Unload cubicmap texture UnloadTexture(texture); // Unload map texture UnloadModel(model); // Unload map model @@ -105,23 +105,23 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- Vector3 oldCamPos = camera.position; // Store old camera position - + UpdateCamera(&camera); // Update camera - + // Check player collision (we simplify to 2D collision detection) Vector2 playerPos = { camera.position.x, camera.position.z }; float playerRadius = 0.1f; // Collision radius (player is modelled as a cilinder for collision) - + int playerCellX = (int)(playerPos.x - mapPosition.x + 0.5f); int playerCellY = (int)(playerPos.y - mapPosition.z + 0.5f); - + // Out-of-limits security check if (playerCellX < 0) playerCellX = 0; else if (playerCellX >= cubicmap.width) playerCellX = cubicmap.width - 1; - + if (playerCellY < 0) playerCellY = 0; else if (playerCellY >= cubicmap.height) playerCellY = cubicmap.height - 1; - + // Check map collisions using image data and player position // TODO: Improvement: Just check player surrounding cells for collision for (int y = 0; y < cubicmap.height; y++) @@ -129,7 +129,7 @@ void UpdateDrawFrame(void) for (int x = 0; x < cubicmap.width; x++) { if ((mapPixels[y*cubicmap.width + x].r == 255) && // Collision: white pixel, only check R channel - (CheckCollisionCircleRec(playerPos, playerRadius, + (CheckCollisionCircleRec(playerPos, playerRadius, (Rectangle){ mapPosition.x - 0.5f + x*1.0f, mapPosition.z - 0.5f + y*1.0f, 1.0f, 1.0f }))) { // Collision detected, reset camera position @@ -151,10 +151,10 @@ void UpdateDrawFrame(void) //DrawCubeV(playerPosition, (Vector3){ 0.2f, 0.4f, 0.2f }, RED); // Draw player EndMode3D(); - + DrawTextureEx(cubicmap, (Vector2){ GetScreenWidth() - cubicmap.width*4 - 20, 20 }, 0.0f, 4.0f, WHITE); DrawRectangleLines(GetScreenWidth() - cubicmap.width*4 - 20, 20, cubicmap.width*4, cubicmap.height*4, GREEN); - + // Draw player position radar DrawRectangle(GetScreenWidth() - cubicmap.width*4 - 20 + playerCellX*4, 20 + playerCellY*4, 4, 4, RED); diff --git a/examples/web/models/models_first_person_maze.data b/examples/web/models/models_first_person_maze.data new file mode 100644 index 0000000..c7df666 Binary files /dev/null and b/examples/web/models/models_first_person_maze.data differ diff --git a/examples/web/models/models_first_person_maze.html b/examples/web/models/models_first_person_maze.html new file mode 100644 index 0000000..aafcd59 --- /dev/null +++ b/examples/web/models/models_first_person_maze.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/models/models_first_person_maze.js b/examples/web/models/models_first_person_maze.js new file mode 100644 index 0000000..09586f8 --- /dev/null +++ b/examples/web/models/models_first_person_maze.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_first_person_maze.data";var REMOTE_PACKAGE_BASE="models_first_person_maze.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273664,DYNAMICTOP_PTR=30752;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_first_person_maze.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"qc":___lock,"F":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"E":___syscall146,"q":___syscall221,"ra":___syscall5,"D":___syscall54,"Y":___syscall6,"C":___unlock,"B":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"vd":_emscripten_get_gamepad_status,"kd":_emscripten_get_heap_size,"$c":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Gc":_emscripten_glActiveTexture,"wc":_emscripten_glAttachShader,"pc":_emscripten_glBeginQueryEXT,"ic":_emscripten_glBindAttribLocation,"fc":_emscripten_glBindBuffer,"ac":_emscripten_glBindFramebuffer,"Vb":_emscripten_glBindRenderbuffer,"Qb":_emscripten_glBindTexture,"Gb":_emscripten_glBindVertexArrayOES,"vb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"he":_emscripten_glGetShaderInfoLog,"ge":_emscripten_glGetShaderPrecisionFormat,"fe":_emscripten_glGetShaderSource,"ee":_emscripten_glGetShaderiv,"de":_emscripten_glGetString,"ce":_emscripten_glGetTexParameterfv,"be":_emscripten_glGetTexParameteriv,"ae":_emscripten_glGetUniformLocation,"$d":_emscripten_glGetUniformfv,"_d":_emscripten_glGetUniformiv,"Zd":_emscripten_glGetVertexAttribPointerv,"Yd":_emscripten_glGetVertexAttribfv,"Xd":_emscripten_glGetVertexAttribiv,"Wd":_emscripten_glHint,"Vd":_emscripten_glIsBuffer,"Ud":_emscripten_glIsEnabled,"Td":_emscripten_glIsFramebuffer,"Sd":_emscripten_glIsProgram,"Rd":_emscripten_glIsQueryEXT,"Qd":_emscripten_glIsRenderbuffer,"Pd":_emscripten_glIsShader,"Od":_emscripten_glIsTexture,"Nd":_emscripten_glIsVertexArrayOES,"Md":_emscripten_glLineWidth,"Ld":_emscripten_glLinkProgram,"Kd":_emscripten_glPixelStorei,"Jd":_emscripten_glPolygonOffset,"Id":_emscripten_glQueryCounterEXT,"Hd":_emscripten_glReadPixels,"Gd":_emscripten_glReleaseShaderCompiler,"Fd":_emscripten_glRenderbufferStorage,"Ed":_emscripten_glSampleCoverage,"Dd":_emscripten_glScissor,"Cd":_emscripten_glShaderBinary,"Bd":_emscripten_glShaderSource,"Ad":_emscripten_glStencilFunc,"zd":_emscripten_glStencilFuncSeparate,"yd":_emscripten_glStencilMask,"xd":_emscripten_glStencilMaskSeparate,"wd":_emscripten_glStencilOp,"ud":_emscripten_glStencilOpSeparate,"td":_emscripten_glTexImage2D,"sd":_emscripten_glTexParameterf,"rd":_emscripten_glTexParameterfv,"qd":_emscripten_glTexParameteri,"pd":_emscripten_glTexParameteriv,"od":_emscripten_glTexSubImage2D,"nd":_emscripten_glUniform1f,"md":_emscripten_glUniform1fv,"ld":_emscripten_glUniform1i,"jd":_emscripten_glUniform1iv,"id":_emscripten_glUniform2f,"hd":_emscripten_glUniform2fv,"gd":_emscripten_glUniform2i,"fd":_emscripten_glUniform2iv,"ed":_emscripten_glUniform3f,"dd":_emscripten_glUniform3fv,"cd":_emscripten_glUniform3i,"bd":_emscripten_glUniform3iv,"ad":_emscripten_glUniform4f,"_c":_emscripten_glUniform4fv,"Zc":_emscripten_glUniform4i,"Yc":_emscripten_glUniform4iv,"Xc":_emscripten_glUniformMatrix2fv,"Wc":_emscripten_glUniformMatrix3fv,"Vc":_emscripten_glUniformMatrix4fv,"Uc":_emscripten_glUseProgram,"Tc":_emscripten_glValidateProgram,"Sc":_emscripten_glVertexAttrib1f,"Rc":_emscripten_glVertexAttrib1fv,"Qc":_emscripten_glVertexAttrib2f,"Pc":_emscripten_glVertexAttrib2fv,"Oc":_emscripten_glVertexAttrib3f,"Nc":_emscripten_glVertexAttrib3fv,"Mc":_emscripten_glVertexAttrib4f,"Lc":_emscripten_glVertexAttrib4fv,"Kc":_emscripten_glVertexAttribDivisorANGLE,"Jc":_emscripten_glVertexAttribPointer,"Ic":_emscripten_glViewport,"Hc":_emscripten_memcpy_big,"Fc":_emscripten_request_pointerlock,"Ec":_emscripten_resize_heap,"V":_emscripten_run_script,"Dc":_emscripten_sample_gamepad_data,"Cc":_emscripten_set_click_callback_on_thread,"Bc":_emscripten_set_fullscreenchange_callback_on_thread,"Ac":_emscripten_set_gamepadconnected_callback_on_thread,"zc":_emscripten_set_gamepaddisconnected_callback_on_thread,"yc":_emscripten_set_keypress_callback_on_thread,"xc":_emscripten_set_main_loop,"vc":_emscripten_set_touchcancel_callback_on_thread,"uc":_emscripten_set_touchend_callback_on_thread,"tc":_emscripten_set_touchmove_callback_on_thread,"sc":_emscripten_set_touchstart_callback_on_thread,"rc":_exit,"A":_glActiveTexture,"U":_glAttachShader,"n":_glBindAttribLocation,"c":_glBindBuffer,"j":_glBindTexture,"oc":_glBlendFunc,"h":_glBufferData,"z":_glBufferSubData,"T":_glClear,"S":_glClearColor,"nc":_glClearDepthf,"mc":_glCompileShader,"lc":_glCompressedTexImage2D,"kc":_glCreateProgram,"jc":_glCreateShader,"hc":_glCullFace,"p":_glDeleteBuffers,"y":_glDeleteProgram,"R":_glDeleteShader,"Q":_glDeleteTextures,"gc":_glDepthFunc,"P":_glDetachShader,"O":_glDisable,"i":_glDisableVertexAttribArray,"N":_glDrawArrays,"M":_glDrawElements,"x":_glEnable,"f":_glEnableVertexAttribArray,"ec":_glFrontFace,"g":_glGenBuffers,"dc":_glGenTextures,"w":_glGetAttribLocation,"cc":_glGetFloatv,"bc":_glGetProgramInfoLog,"L":_glGetProgramiv,"$b":_glGetShaderInfoLog,"K":_glGetShaderiv,"o":_glGetString,"v":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Xb":_glShaderSource,"Wb":_glTexImage2D,"m":_glTexParameteri,"J":_glUniform1i,"u":_glUniform4f,"t":_glUniformMatrix4fv,"l":_glUseProgram,"Ub":_glVertexAttrib2f,"Tb":_glVertexAttrib3f,"s":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Sb":_glViewport,"Rb":_glfwCreateWindow,"Pb":_glfwDefaultWindowHints,"Ob":_glfwDestroyWindow,"Nb":_glfwGetCursorPos,"Mb":_glfwGetKey,"Lb":_glfwGetMouseButton,"r":_glfwGetTime,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Fb":_glfwSetCursorPosCallback,"Eb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"I":_glfwTerminate,"k":_glfwWindowHint,"H":_llvm_stackrestore,"G":_llvm_stacksave,"ub":_nanosleep,"tb":_time,"sb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_first_person_maze.wasm b/examples/web/models/models_first_person_maze.wasm new file mode 100644 index 0000000..f4cba3a Binary files /dev/null and b/examples/web/models/models_first_person_maze.wasm differ diff --git a/examples/web/models/models_geometric_shapes.c b/examples/web/models/models_geometric_shapes.c index a0f8a7f..5d56eed 100644 --- a/examples/web/models/models_geometric_shapes.c +++ b/examples/web/models/models_geometric_shapes.c @@ -18,11 +18,11 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world -Camera camera = {{ 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; +Camera camera = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -30,7 +30,7 @@ Camera camera = {{ 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0 void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -38,12 +38,18 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [models] example - geometric shapes"); + camera.position = (Vector3){ 0.0f, 10.0f, 10.0f }; + camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; + camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; + camera.fovy = 45.0f; + camera.type = CAMERA_PERSPECTIVE; + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -75,9 +81,9 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); - DrawCube((Vector3){-4.0f, 0.0f, 2.0f}, 2.0f, 5.0f, 2.0f, RED); + DrawCube((Vector3){-4.0f, 0.0f, 2.0f}, 2.0f, 5.0f, 2.0f, RED); DrawCubeWires((Vector3){-4.0f, 0.0f, 2.0f}, 2.0f, 5.0f, 2.0f, GOLD); DrawCubeWires((Vector3){-4.0f, 0.0f, -2.0f}, 3.0f, 6.0f, 2.0f, MAROON); @@ -93,7 +99,7 @@ void UpdateDrawFrame(void) DrawGrid(10, 1.0f); // Draw a grid - End3dMode(); + EndMode3D(); DrawFPS(10, 10); diff --git a/examples/web/models/models_geometric_shapes.html b/examples/web/models/models_geometric_shapes.html new file mode 100644 index 0000000..b9c3054 --- /dev/null +++ b/examples/web/models/models_geometric_shapes.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/models/models_geometric_shapes.js b/examples/web/models/models_geometric_shapes.js new file mode 100644 index 0000000..5be9da4 --- /dev/null +++ b/examples/web/models/models_geometric_shapes.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269632,DYNAMICTOP_PTR=26720;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_geometric_shapes.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"O":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"ac":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"wb":_glfwSetKeyCallback,"vb":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"ob":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_geometric_shapes.wasm b/examples/web/models/models_geometric_shapes.wasm new file mode 100644 index 0000000..bc48e03 Binary files /dev/null and b/examples/web/models/models_geometric_shapes.wasm differ diff --git a/examples/web/models/models_heightmap.c b/examples/web/models/models_heightmap.c index 009b50e..73ff4a3 100644 --- a/examples/web/models/models_heightmap.c +++ b/examples/web/models/models_heightmap.c @@ -18,16 +18,16 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define our custom camera to look into our 3d world Camera camera = {{ 18.0f, 16.0f, 18.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; -Texture2D texture; -Model map; +Texture2D texture = { 0 }; +Model model = { 0 }; -Vector3 mapPosition = { -8.0f, 0.0f, -8.0f }; // Set model position (depends on model scaling!) +Vector3 mapPosition = { -8.0f, 0.0f, -8.0f }; // Set model position (depends on model scaling!) //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -35,7 +35,7 @@ Vector3 mapPosition = { -8.0f, 0.0f, -8.0f }; // Set model position (depends on void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -45,13 +45,13 @@ int main(void) Image image = LoadImage("resources/heightmap.png"); // Load heightmap image (RAM) texture = LoadTextureFromImage(image); // Convert image to texture (VRAM) - + Mesh mesh = GenMeshHeightmap(image, (Vector3){ 16, 8, 16 }); // Generate heightmap mesh (RAM and VRAM) - map = LoadModelFromMesh(mesh); // Load model from generated mesh - map.material.maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture - + model = LoadModelFromMesh(mesh); // Load model from generated mesh + model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture + UnloadImage(image); // Unload heightmap image from RAM, already uploaded to VRAM - + SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode #if defined(PLATFORM_WEB) @@ -59,7 +59,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -70,7 +70,7 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- UnloadTexture(texture); // Unload texture - UnloadModel(map); // Unload model + UnloadModel(model); // Unload model CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -94,15 +94,14 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); + + DrawModel(model, mapPosition, 1.0f, RED); - // NOTE: Model is scaled to 1/4 of its original size (128x128 units) - DrawModel(map, mapPosition, 1.0f, RED); + DrawGrid(20, 1.0f); - DrawGrid(20, 1.0f); + EndMode3D(); - End3dMode(); - DrawTexture(texture, screenWidth - texture.width - 20, 20, WHITE); DrawRectangleLines(screenWidth - texture.width - 20, 20, texture.width, texture.height, GREEN); diff --git a/examples/web/models/models_heightmap.data b/examples/web/models/models_heightmap.data new file mode 100644 index 0000000..fe30f67 Binary files /dev/null and b/examples/web/models/models_heightmap.data differ diff --git a/examples/web/models/models_heightmap.html b/examples/web/models/models_heightmap.html new file mode 100644 index 0000000..f84df91 --- /dev/null +++ b/examples/web/models/models_heightmap.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/models/models_heightmap.js b/examples/web/models/models_heightmap.js new file mode 100644 index 0000000..bf6f225 --- /dev/null +++ b/examples/web/models/models_heightmap.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_heightmap.data";var REMOTE_PACKAGE_BASE="models_heightmap.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273568,DYNAMICTOP_PTR=30656;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_heightmap.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"qc":___lock,"F":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"E":___syscall146,"q":___syscall221,"ra":___syscall5,"D":___syscall54,"Y":___syscall6,"C":___unlock,"B":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"vd":_emscripten_get_gamepad_status,"kd":_emscripten_get_heap_size,"$c":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Gc":_emscripten_glActiveTexture,"wc":_emscripten_glAttachShader,"pc":_emscripten_glBeginQueryEXT,"ic":_emscripten_glBindAttribLocation,"fc":_emscripten_glBindBuffer,"ac":_emscripten_glBindFramebuffer,"Vb":_emscripten_glBindRenderbuffer,"Qb":_emscripten_glBindTexture,"Gb":_emscripten_glBindVertexArrayOES,"vb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"he":_emscripten_glGetShaderInfoLog,"ge":_emscripten_glGetShaderPrecisionFormat,"fe":_emscripten_glGetShaderSource,"ee":_emscripten_glGetShaderiv,"de":_emscripten_glGetString,"ce":_emscripten_glGetTexParameterfv,"be":_emscripten_glGetTexParameteriv,"ae":_emscripten_glGetUniformLocation,"$d":_emscripten_glGetUniformfv,"_d":_emscripten_glGetUniformiv,"Zd":_emscripten_glGetVertexAttribPointerv,"Yd":_emscripten_glGetVertexAttribfv,"Xd":_emscripten_glGetVertexAttribiv,"Wd":_emscripten_glHint,"Vd":_emscripten_glIsBuffer,"Ud":_emscripten_glIsEnabled,"Td":_emscripten_glIsFramebuffer,"Sd":_emscripten_glIsProgram,"Rd":_emscripten_glIsQueryEXT,"Qd":_emscripten_glIsRenderbuffer,"Pd":_emscripten_glIsShader,"Od":_emscripten_glIsTexture,"Nd":_emscripten_glIsVertexArrayOES,"Md":_emscripten_glLineWidth,"Ld":_emscripten_glLinkProgram,"Kd":_emscripten_glPixelStorei,"Jd":_emscripten_glPolygonOffset,"Id":_emscripten_glQueryCounterEXT,"Hd":_emscripten_glReadPixels,"Gd":_emscripten_glReleaseShaderCompiler,"Fd":_emscripten_glRenderbufferStorage,"Ed":_emscripten_glSampleCoverage,"Dd":_emscripten_glScissor,"Cd":_emscripten_glShaderBinary,"Bd":_emscripten_glShaderSource,"Ad":_emscripten_glStencilFunc,"zd":_emscripten_glStencilFuncSeparate,"yd":_emscripten_glStencilMask,"xd":_emscripten_glStencilMaskSeparate,"wd":_emscripten_glStencilOp,"ud":_emscripten_glStencilOpSeparate,"td":_emscripten_glTexImage2D,"sd":_emscripten_glTexParameterf,"rd":_emscripten_glTexParameterfv,"qd":_emscripten_glTexParameteri,"pd":_emscripten_glTexParameteriv,"od":_emscripten_glTexSubImage2D,"nd":_emscripten_glUniform1f,"md":_emscripten_glUniform1fv,"ld":_emscripten_glUniform1i,"jd":_emscripten_glUniform1iv,"id":_emscripten_glUniform2f,"hd":_emscripten_glUniform2fv,"gd":_emscripten_glUniform2i,"fd":_emscripten_glUniform2iv,"ed":_emscripten_glUniform3f,"dd":_emscripten_glUniform3fv,"cd":_emscripten_glUniform3i,"bd":_emscripten_glUniform3iv,"ad":_emscripten_glUniform4f,"_c":_emscripten_glUniform4fv,"Zc":_emscripten_glUniform4i,"Yc":_emscripten_glUniform4iv,"Xc":_emscripten_glUniformMatrix2fv,"Wc":_emscripten_glUniformMatrix3fv,"Vc":_emscripten_glUniformMatrix4fv,"Uc":_emscripten_glUseProgram,"Tc":_emscripten_glValidateProgram,"Sc":_emscripten_glVertexAttrib1f,"Rc":_emscripten_glVertexAttrib1fv,"Qc":_emscripten_glVertexAttrib2f,"Pc":_emscripten_glVertexAttrib2fv,"Oc":_emscripten_glVertexAttrib3f,"Nc":_emscripten_glVertexAttrib3fv,"Mc":_emscripten_glVertexAttrib4f,"Lc":_emscripten_glVertexAttrib4fv,"Kc":_emscripten_glVertexAttribDivisorANGLE,"Jc":_emscripten_glVertexAttribPointer,"Ic":_emscripten_glViewport,"Hc":_emscripten_memcpy_big,"Fc":_emscripten_request_pointerlock,"Ec":_emscripten_resize_heap,"V":_emscripten_run_script,"Dc":_emscripten_sample_gamepad_data,"Cc":_emscripten_set_click_callback_on_thread,"Bc":_emscripten_set_fullscreenchange_callback_on_thread,"Ac":_emscripten_set_gamepadconnected_callback_on_thread,"zc":_emscripten_set_gamepaddisconnected_callback_on_thread,"yc":_emscripten_set_keypress_callback_on_thread,"xc":_emscripten_set_main_loop,"vc":_emscripten_set_touchcancel_callback_on_thread,"uc":_emscripten_set_touchend_callback_on_thread,"tc":_emscripten_set_touchmove_callback_on_thread,"sc":_emscripten_set_touchstart_callback_on_thread,"rc":_exit,"A":_glActiveTexture,"U":_glAttachShader,"n":_glBindAttribLocation,"c":_glBindBuffer,"j":_glBindTexture,"oc":_glBlendFunc,"h":_glBufferData,"z":_glBufferSubData,"T":_glClear,"S":_glClearColor,"nc":_glClearDepthf,"mc":_glCompileShader,"lc":_glCompressedTexImage2D,"kc":_glCreateProgram,"jc":_glCreateShader,"hc":_glCullFace,"p":_glDeleteBuffers,"y":_glDeleteProgram,"R":_glDeleteShader,"Q":_glDeleteTextures,"gc":_glDepthFunc,"P":_glDetachShader,"O":_glDisable,"i":_glDisableVertexAttribArray,"N":_glDrawArrays,"M":_glDrawElements,"x":_glEnable,"f":_glEnableVertexAttribArray,"ec":_glFrontFace,"g":_glGenBuffers,"dc":_glGenTextures,"w":_glGetAttribLocation,"cc":_glGetFloatv,"bc":_glGetProgramInfoLog,"L":_glGetProgramiv,"$b":_glGetShaderInfoLog,"K":_glGetShaderiv,"o":_glGetString,"v":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Xb":_glShaderSource,"Wb":_glTexImage2D,"m":_glTexParameteri,"J":_glUniform1i,"u":_glUniform4f,"t":_glUniformMatrix4fv,"l":_glUseProgram,"Ub":_glVertexAttrib2f,"Tb":_glVertexAttrib3f,"s":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Sb":_glViewport,"Rb":_glfwCreateWindow,"Pb":_glfwDefaultWindowHints,"Ob":_glfwDestroyWindow,"Nb":_glfwGetCursorPos,"Mb":_glfwGetKey,"Lb":_glfwGetMouseButton,"r":_glfwGetTime,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Fb":_glfwSetCursorPosCallback,"Eb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"I":_glfwTerminate,"k":_glfwWindowHint,"H":_llvm_stackrestore,"G":_llvm_stacksave,"ub":_nanosleep,"tb":_time,"sb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_heightmap.wasm b/examples/web/models/models_heightmap.wasm new file mode 100644 index 0000000..e1db331 Binary files /dev/null and b/examples/web/models/models_heightmap.wasm differ diff --git a/examples/web/models/models_material_pbr.c b/examples/web/models/models_material_pbr.c index b2b7ac6..bbec491 100644 --- a/examples/web/models/models_material_pbr.c +++ b/examples/web/models/models_material_pbr.c @@ -27,13 +27,13 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world Camera camera = {{ 4.0f, 4.0f, 4.0f }, { 0.0f, 0.5f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; -Model model; +Model model = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -44,7 +44,7 @@ void UpdateDrawFrame(void); // Update and Draw one frame static Material LoadMaterialPBR(Color albedo, float metalness, float roughness); //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -59,13 +59,13 @@ int main(void) // Define lights attributes // NOTE: Shader is passed to every light on creation to define shader bindings internally - Light lights[MAX_LIGHTS] = { + Light lights[MAX_LIGHTS] = { CreateLight(LIGHT_POINT, (Vector3){ LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 0, 255 }, model.material.shader), CreateLight(LIGHT_POINT, (Vector3){ 0.0f, LIGHT_HEIGHT, LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 0, 255, 0, 255 }, model.material.shader), CreateLight(LIGHT_POINT, (Vector3){ -LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 0, 0, 255, 255 }, model.material.shader), - CreateLight(LIGHT_DIRECTIONAL, (Vector3){ 0.0f, LIGHT_HEIGHT*2.0f, -LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 255, 255 }, model.material.shader) + CreateLight(LIGHT_DIRECTIONAL, (Vector3){ 0.0f, LIGHT_HEIGHT*2.0f, -LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 255, 255 }, model.material.shader) }; - + SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode #if defined(PLATFORM_WEB) @@ -73,7 +73,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -99,7 +99,7 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update camera - + // Send to material PBR shader camera view position float cameraPos[3] = { camera.position.x, camera.position.y, camera.position.z }; SetShaderValue(model.material.shader, model.material.shader.locs[LOC_VECTOR_VIEW], cameraPos, 3); @@ -114,7 +114,7 @@ void UpdateDrawFrame(void) Begin3dMode(camera); DrawModel(model, Vector3Zero(), 1.0f, WHITE); - + DrawGrid(10, 1.0f); End3dMode(); @@ -130,12 +130,12 @@ void UpdateDrawFrame(void) static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) { Material mat = { 0 }; // NOTE: All maps textures are set to { 0 } - + #define PATH_PBR_VS "resources/shaders/pbr.vs" // Path to physically based rendering vertex shader #define PATH_PBR_FS "resources/shaders/pbr.fs" // Path to physically based rendering fragment shader - + mat.shader = LoadShader(PATH_PBR_VS, PATH_PBR_FS); - + // Get required locations points for PBR material // NOTE: Those location names must be available and used in the shader code mat.shader.locs[LOC_MAP_ALBEDO] = GetShaderLocation(mat.shader, "albedo.sampler"); @@ -153,28 +153,28 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) mat.shader.locs[LOC_MATRIX_MODEL] = GetShaderLocation(mat.shader, "mMatrix"); mat.shader.locs[LOC_MATRIX_VIEW] = GetShaderLocation(mat.shader, "view"); mat.shader.locs[LOC_VECTOR_VIEW] = GetShaderLocation(mat.shader, "viewPos"); - + // Set PBR standard maps mat.maps[MAP_ALBEDO].texture = LoadTexture("resources/pbr/trooper_albedo.png"); mat.maps[MAP_NORMAL].texture = LoadTexture("resources/pbr/trooper_normals.png"); mat.maps[MAP_METALNESS].texture = LoadTexture("resources/pbr/trooper_metalness.png"); mat.maps[MAP_ROUGHNESS].texture = LoadTexture("resources/pbr/trooper_roughness.png"); mat.maps[MAP_OCCLUSION].texture = LoadTexture("resources/pbr/trooper_ao.png"); - + // Set environment maps #define PATH_CUBEMAP_VS "resources/shaders/cubemap.vs" // Path to equirectangular to cubemap vertex shader #define PATH_CUBEMAP_FS "resources/shaders/cubemap.fs" // Path to equirectangular to cubemap fragment shader #define PATH_SKYBOX_VS "resources/shaders/skybox.vs" // Path to skybox vertex shader #define PATH_IRRADIANCE_FS "resources/shaders/irradiance.fs" // Path to irradiance (GI) calculation fragment shader #define PATH_PREFILTER_FS "resources/shaders/prefilter.fs" // Path to reflection prefilter calculation fragment shader - #define PATH_BRDF_VS "resources/shaders/brdf.vs" // Path to bidirectional reflectance distribution function vertex shader + #define PATH_BRDF_VS "resources/shaders/brdf.vs" // Path to bidirectional reflectance distribution function vertex shader #define PATH_BRDF_FS "resources/shaders/brdf.fs" // Path to bidirectional reflectance distribution function fragment shader - + Shader shdrCubemap = LoadShader(PATH_CUBEMAP_VS, PATH_CUBEMAP_FS); Shader shdrIrradiance = LoadShader(PATH_SKYBOX_VS, PATH_IRRADIANCE_FS); Shader shdrPrefilter = LoadShader(PATH_SKYBOX_VS, PATH_PREFILTER_FS); Shader shdrBRDF = LoadShader(PATH_BRDF_VS, PATH_BRDF_FS); - + // Setup required shader locations SetShaderValuei(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, 1); SetShaderValuei(shdrIrradiance, GetShaderLocation(shdrIrradiance, "environmentMap"), (int[1]){ 0 }, 1); @@ -187,27 +187,27 @@ static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) mat.maps[MAP_BRDF].texture = GenTextureBRDF(shdrBRDF, cubemap, BRDF_SIZE); UnloadTexture(cubemap); UnloadTexture(texHDR); - + // Unload already used shaders (to create specific textures) UnloadShader(shdrCubemap); UnloadShader(shdrIrradiance); UnloadShader(shdrPrefilter); UnloadShader(shdrBRDF); - + // Set textures filtering for better quality SetTextureFilter(mat.maps[MAP_ALBEDO].texture, FILTER_BILINEAR); SetTextureFilter(mat.maps[MAP_NORMAL].texture, FILTER_BILINEAR); SetTextureFilter(mat.maps[MAP_METALNESS].texture, FILTER_BILINEAR); SetTextureFilter(mat.maps[MAP_ROUGHNESS].texture, FILTER_BILINEAR); SetTextureFilter(mat.maps[MAP_OCCLUSION].texture, FILTER_BILINEAR); - + // Enable sample usage in shader for assigned textures SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "albedo.useSampler"), (int[1]){ 1 }, 1); SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "normals.useSampler"), (int[1]){ 1 }, 1); SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "metalness.useSampler"), (int[1]){ 1 }, 1); SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "roughness.useSampler"), (int[1]){ 1 }, 1); SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "occlusion.useSampler"), (int[1]){ 1 }, 1); - + int renderModeLoc = GetShaderLocation(mat.shader, "renderMode"); SetShaderValuei(mat.shader, renderModeLoc, (int[1]){ 0 }, 1); diff --git a/examples/web/models/models_mesh_generation.c b/examples/web/models/models_mesh_generation.c index 32060ca..053672c 100644 --- a/examples/web/models/models_mesh_generation.c +++ b/examples/web/models/models_mesh_generation.c @@ -15,15 +15,15 @@ #include #endif -#define NUM_MODELS 7 // We generate 7 parametric 3d shapes +#define NUM_MODELS 8 // Parametric 3d shapes to generate //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; -Model models[NUM_MODELS]; +Model models[NUM_MODELS] = { 0 }; // Define the camera to look into our 3d world Camera camera = {{ 5.0f, 5.0f, 5.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; @@ -39,7 +39,7 @@ int currentModel = 0; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -51,7 +51,7 @@ int main(void) Image checked = GenImageChecked(2, 2, 1, 1, RED, GREEN); Texture2D texture = LoadTextureFromImage(checked); UnloadImage(checked); - + models[0] = LoadModelFromMesh(GenMeshPlane(2, 2, 5, 5)); models[1] = LoadModelFromMesh(GenMeshCube(2.0f, 1.0f, 2.0f)); models[2] = LoadModelFromMesh(GenMeshSphere(2, 32, 32)); @@ -59,10 +59,11 @@ int main(void) models[4] = LoadModelFromMesh(GenMeshCylinder(1, 2, 16)); models[5] = LoadModelFromMesh(GenMeshTorus(0.25f, 4.0f, 16, 32)); models[6] = LoadModelFromMesh(GenMeshKnot(1.0f, 2.0f, 16, 128)); - + models[7] = LoadModelFromMesh(GenMeshPoly(5, 2.0f)); + // Set checked texture as default diffuse component for all models material - for (int i = 0; i < NUM_MODELS; i++) models[i].material.maps[MAP_DIFFUSE].texture = texture; - + for (int i = 0; i < NUM_MODELS; i++) models[i].materials[0].maps[MAP_DIFFUSE].texture = texture; + SetCameraMode(camera, CAMERA_ORBITAL); // Set a orbital camera mode #if defined(PLATFORM_WEB) @@ -70,7 +71,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -79,10 +80,10 @@ int main(void) #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- // Unload models data (GPU VRAM) for (int i = 0; i < NUM_MODELS; i++) UnloadModel(models[i]); - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -97,11 +98,22 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update internal camera and our camera - + if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) { currentModel = (currentModel + 1)%NUM_MODELS; // Cycle between the textures } + + if (IsKeyPressed(KEY_RIGHT)) + { + currentModel++; + if (currentModel >= NUM_MODELS) currentModel = 0; + } + else if (IsKeyPressed(KEY_LEFT)) + { + currentModel--; + if (currentModel < 0) currentModel = NUM_MODELS - 1; + } //---------------------------------------------------------------------------------- // Draw @@ -110,18 +122,18 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); DrawModel(models[currentModel], position, 1.0f, WHITE); DrawGrid(10, 1.0); - End3dMode(); - + EndMode3D(); + DrawRectangle(30, 400, 310, 30, Fade(SKYBLUE, 0.5f)); DrawRectangleLines(30, 400, 310, 30, Fade(DARKBLUE, 0.5f)); DrawText("MOUSE LEFT BUTTON to CYCLE PROCEDURAL MODELS", 40, 410, 10, BLUE); - + switch(currentModel) { case 0: DrawText("PLANE", 680, 10, 20, DARKBLUE); break; @@ -131,6 +143,7 @@ void UpdateDrawFrame(void) case 4: DrawText("CYLINDER", 680, 10, 20, DARKBLUE); break; case 5: DrawText("TORUS", 680, 10, 20, DARKBLUE); break; case 6: DrawText("KNOT", 680, 10, 20, DARKBLUE); break; + case 7: DrawText("POLY", 680, 10, 20, DARKBLUE); break; default: break; } diff --git a/examples/web/models/models_mesh_generation.html b/examples/web/models/models_mesh_generation.html new file mode 100644 index 0000000..07113bb --- /dev/null +++ b/examples/web/models/models_mesh_generation.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/models/models_mesh_generation.js b/examples/web/models/models_mesh_generation.js new file mode 100644 index 0000000..6d5d44e --- /dev/null +++ b/examples/web/models/models_mesh_generation.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5272848,DYNAMICTOP_PTR=29936;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_mesh_generation.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"qc":___lock,"F":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"E":___syscall146,"q":___syscall221,"ra":___syscall5,"D":___syscall54,"Y":___syscall6,"C":___unlock,"B":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"vd":_emscripten_get_gamepad_status,"kd":_emscripten_get_heap_size,"$c":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Gc":_emscripten_glActiveTexture,"wc":_emscripten_glAttachShader,"pc":_emscripten_glBeginQueryEXT,"ic":_emscripten_glBindAttribLocation,"fc":_emscripten_glBindBuffer,"ac":_emscripten_glBindFramebuffer,"Vb":_emscripten_glBindRenderbuffer,"Qb":_emscripten_glBindTexture,"Gb":_emscripten_glBindVertexArrayOES,"vb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"he":_emscripten_glGetShaderInfoLog,"ge":_emscripten_glGetShaderPrecisionFormat,"fe":_emscripten_glGetShaderSource,"ee":_emscripten_glGetShaderiv,"de":_emscripten_glGetString,"ce":_emscripten_glGetTexParameterfv,"be":_emscripten_glGetTexParameteriv,"ae":_emscripten_glGetUniformLocation,"$d":_emscripten_glGetUniformfv,"_d":_emscripten_glGetUniformiv,"Zd":_emscripten_glGetVertexAttribPointerv,"Yd":_emscripten_glGetVertexAttribfv,"Xd":_emscripten_glGetVertexAttribiv,"Wd":_emscripten_glHint,"Vd":_emscripten_glIsBuffer,"Ud":_emscripten_glIsEnabled,"Td":_emscripten_glIsFramebuffer,"Sd":_emscripten_glIsProgram,"Rd":_emscripten_glIsQueryEXT,"Qd":_emscripten_glIsRenderbuffer,"Pd":_emscripten_glIsShader,"Od":_emscripten_glIsTexture,"Nd":_emscripten_glIsVertexArrayOES,"Md":_emscripten_glLineWidth,"Ld":_emscripten_glLinkProgram,"Kd":_emscripten_glPixelStorei,"Jd":_emscripten_glPolygonOffset,"Id":_emscripten_glQueryCounterEXT,"Hd":_emscripten_glReadPixels,"Gd":_emscripten_glReleaseShaderCompiler,"Fd":_emscripten_glRenderbufferStorage,"Ed":_emscripten_glSampleCoverage,"Dd":_emscripten_glScissor,"Cd":_emscripten_glShaderBinary,"Bd":_emscripten_glShaderSource,"Ad":_emscripten_glStencilFunc,"zd":_emscripten_glStencilFuncSeparate,"yd":_emscripten_glStencilMask,"xd":_emscripten_glStencilMaskSeparate,"wd":_emscripten_glStencilOp,"ud":_emscripten_glStencilOpSeparate,"td":_emscripten_glTexImage2D,"sd":_emscripten_glTexParameterf,"rd":_emscripten_glTexParameterfv,"qd":_emscripten_glTexParameteri,"pd":_emscripten_glTexParameteriv,"od":_emscripten_glTexSubImage2D,"nd":_emscripten_glUniform1f,"md":_emscripten_glUniform1fv,"ld":_emscripten_glUniform1i,"jd":_emscripten_glUniform1iv,"id":_emscripten_glUniform2f,"hd":_emscripten_glUniform2fv,"gd":_emscripten_glUniform2i,"fd":_emscripten_glUniform2iv,"ed":_emscripten_glUniform3f,"dd":_emscripten_glUniform3fv,"cd":_emscripten_glUniform3i,"bd":_emscripten_glUniform3iv,"ad":_emscripten_glUniform4f,"_c":_emscripten_glUniform4fv,"Zc":_emscripten_glUniform4i,"Yc":_emscripten_glUniform4iv,"Xc":_emscripten_glUniformMatrix2fv,"Wc":_emscripten_glUniformMatrix3fv,"Vc":_emscripten_glUniformMatrix4fv,"Uc":_emscripten_glUseProgram,"Tc":_emscripten_glValidateProgram,"Sc":_emscripten_glVertexAttrib1f,"Rc":_emscripten_glVertexAttrib1fv,"Qc":_emscripten_glVertexAttrib2f,"Pc":_emscripten_glVertexAttrib2fv,"Oc":_emscripten_glVertexAttrib3f,"Nc":_emscripten_glVertexAttrib3fv,"Mc":_emscripten_glVertexAttrib4f,"Lc":_emscripten_glVertexAttrib4fv,"Kc":_emscripten_glVertexAttribDivisorANGLE,"Jc":_emscripten_glVertexAttribPointer,"Ic":_emscripten_glViewport,"Hc":_emscripten_memcpy_big,"Fc":_emscripten_request_pointerlock,"Ec":_emscripten_resize_heap,"V":_emscripten_run_script,"Dc":_emscripten_sample_gamepad_data,"Cc":_emscripten_set_click_callback_on_thread,"Bc":_emscripten_set_fullscreenchange_callback_on_thread,"Ac":_emscripten_set_gamepadconnected_callback_on_thread,"zc":_emscripten_set_gamepaddisconnected_callback_on_thread,"yc":_emscripten_set_keypress_callback_on_thread,"xc":_emscripten_set_main_loop,"vc":_emscripten_set_touchcancel_callback_on_thread,"uc":_emscripten_set_touchend_callback_on_thread,"tc":_emscripten_set_touchmove_callback_on_thread,"sc":_emscripten_set_touchstart_callback_on_thread,"rc":_exit,"A":_glActiveTexture,"U":_glAttachShader,"n":_glBindAttribLocation,"c":_glBindBuffer,"j":_glBindTexture,"oc":_glBlendFunc,"h":_glBufferData,"z":_glBufferSubData,"T":_glClear,"S":_glClearColor,"nc":_glClearDepthf,"mc":_glCompileShader,"lc":_glCompressedTexImage2D,"kc":_glCreateProgram,"jc":_glCreateShader,"hc":_glCullFace,"p":_glDeleteBuffers,"y":_glDeleteProgram,"R":_glDeleteShader,"Q":_glDeleteTextures,"gc":_glDepthFunc,"P":_glDetachShader,"O":_glDisable,"i":_glDisableVertexAttribArray,"N":_glDrawArrays,"M":_glDrawElements,"x":_glEnable,"f":_glEnableVertexAttribArray,"ec":_glFrontFace,"g":_glGenBuffers,"dc":_glGenTextures,"w":_glGetAttribLocation,"cc":_glGetFloatv,"bc":_glGetProgramInfoLog,"L":_glGetProgramiv,"$b":_glGetShaderInfoLog,"K":_glGetShaderiv,"o":_glGetString,"v":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Xb":_glShaderSource,"Wb":_glTexImage2D,"m":_glTexParameteri,"J":_glUniform1i,"u":_glUniform4f,"t":_glUniformMatrix4fv,"l":_glUseProgram,"Ub":_glVertexAttrib2f,"Tb":_glVertexAttrib3f,"s":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Sb":_glViewport,"Rb":_glfwCreateWindow,"Pb":_glfwDefaultWindowHints,"Ob":_glfwDestroyWindow,"Nb":_glfwGetCursorPos,"Mb":_glfwGetKey,"Lb":_glfwGetMouseButton,"r":_glfwGetTime,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Fb":_glfwSetCursorPosCallback,"Eb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"I":_glfwTerminate,"k":_glfwWindowHint,"H":_llvm_stackrestore,"G":_llvm_stacksave,"ub":_nanosleep,"tb":_time,"sb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_mesh_generation.wasm b/examples/web/models/models_mesh_generation.wasm new file mode 100644 index 0000000..9ff4f10 Binary files /dev/null and b/examples/web/models/models_mesh_generation.wasm differ diff --git a/examples/web/models/models_mesh_picking.c b/examples/web/models/models_mesh_picking.c index 9a0400b..4e51086 100644 --- a/examples/web/models/models_mesh_picking.c +++ b/examples/web/models/models_mesh_picking.c @@ -25,23 +25,23 @@ const int screenWidth = 800; const int screenHeight = 450; -Camera camera; - +Camera camera = { 0 }; + Vector3 cubePosition = { 0.0f, 1.0f, 0.0f }; Vector3 cubeSize = { 2.0f, 2.0f, 2.0f }; -Ray ray; // Picking line ray +Ray ray = { 0 }; // Picking line ray -Model tower; -Texture2D texture; +Model tower = { 0 }; +Texture2D texture = { 0 }; Vector3 towerPos = { 0.0f, 0.0f, 0.0f }; -BoundingBox towerBBox; +BoundingBox towerBBox = { 0 }; bool hitMeshBBox = false; bool hitTriangle = false; // Test triangle -Vector3 ta = (Vector3){ -25.0, 0.5, 0.0 }; +Vector3 ta = (Vector3){ -25.0, 0.5, 0.0 }; Vector3 tb = (Vector3){ -4.0, 2.5, 1.0 }; Vector3 tc = (Vector3){ -8.0, 6.5, 0.0 }; @@ -53,7 +53,7 @@ Vector3 bary = { 0.0f, 0.0f, 0.0f }; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -66,24 +66,25 @@ int main(void) camera.target = (Vector3){ 0.0f, 2.3f, 0.0f }; // Camera looking at point camera.up = (Vector3){ 0.0f, 1.6f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 45.0f; // Camera field-of-view Y + camera.type = CAMERA_PERSPECTIVE; // Camera mode type + + tower = LoadModel("resources/models/turret.obj"); // Load OBJ model + texture = LoadTexture("resources/models/turret_diffuse.png"); // Load model texture + tower.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set model diffuse texture - tower = LoadModel("resources/tower.obj"); // Load OBJ model - texture = LoadTexture("resources/tower.png"); // Load model texture - tower.material.maps[MAP_DIFFUSE].texture = texture; // Set model diffuse texture - - towerBBox = CalculateBoundingBox(tower.mesh); + towerBBox = MeshBoundingBox(tower.meshes[0]); // Get mesh bounding box SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -95,7 +96,7 @@ int main(void) //-------------------------------------------------------------------------------------- UnloadModel(tower); // Unload model from GPU UnloadTexture(texture); // Unload texture from GPU - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -110,9 +111,9 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update camera - + // Display information about closest hit - RayHitInfo nearestHit; + RayHitInfo nearestHit = { 0 }; char *hitObjectName = "None"; nearestHit.distance = FLT_MAX; nearestHit.hit = false; @@ -120,10 +121,10 @@ void UpdateDrawFrame(void) // Get ray and test against ground, triangle, and mesh ray = GetMouseRay(GetMousePosition(), camera); - + // Check ray collision aginst ground plane RayHitInfo groundHitInfo = GetCollisionRayGround(ray, 0.0f); - + if ((groundHitInfo.hit) && (groundHitInfo.distance < nearestHit.distance)) { nearestHit = groundHitInfo; @@ -133,8 +134,8 @@ void UpdateDrawFrame(void) // Check ray collision against test triangle RayHitInfo triHitInfo = GetCollisionRayTriangle(ray, ta, tb, tc); - - if ((triHitInfo.hit) && (triHitInfo.distance < nearestHit.distance)) + + if ((triHitInfo.hit) && (triHitInfo.distance < nearestHit.distance)) { nearestHit = triHitInfo; cursorColor = PURPLE; @@ -142,40 +143,44 @@ void UpdateDrawFrame(void) bary = Vector3Barycenter(nearestHit.position, ta, tb, tc); hitTriangle = true; - } + } else hitTriangle = false; - RayHitInfo meshHitInfo; + RayHitInfo meshHitInfo = { 0 }; // Check ray collision against bounding box first, before trying the full ray-mesh test - if (CheckCollisionRayBox(ray, towerBBox)) + if (CheckCollisionRayBox(ray, towerBBox)) { hitMeshBBox = true; - - // Check ray collision against mesh - meshHitInfo = GetCollisionRayMesh(ray, &tower.mesh); - - if ((meshHitInfo.hit) && (meshHitInfo.distance < nearestHit.distance)) + + // Check ray collision against model + // NOTE: It considers model.transform matrix! + meshHitInfo = GetCollisionRayModel(ray, &tower); + + if ((meshHitInfo.hit) && (meshHitInfo.distance < nearestHit.distance)) { nearestHit = meshHitInfo; cursorColor = ORANGE; hitObjectName = "Mesh"; } - - } hitMeshBBox = false; + } + + hitMeshBBox = false; //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); // Draw the tower - DrawModel(tower, towerPos, 1.0, WHITE); - + // WARNING: If scale is different than 1.0f, + // not considered by GetCollisionRayModel() + DrawModel(tower, towerPos, 1.0f, WHITE); + // Draw the test triangle DrawLine3D(ta, tb, PURPLE); DrawLine3D(tb, tc, PURPLE); @@ -185,42 +190,42 @@ void UpdateDrawFrame(void) if (hitMeshBBox) DrawBoundingBox(towerBBox, LIME); // If we hit something, draw the cursor at the hit point - if (nearestHit.hit) + if (nearestHit.hit) { - DrawCube(nearestHit.position, 0.5, 0.5, 0.5, cursorColor); - DrawCubeWires(nearestHit.position, 0.5, 0.5, 0.5, YELLOW); + DrawCube(nearestHit.position, 0.3, 0.3, 0.3, cursorColor); + DrawCubeWires(nearestHit.position, 0.3, 0.3, 0.3, RED); Vector3 normalEnd; normalEnd.x = nearestHit.position.x + nearestHit.normal.x; normalEnd.y = nearestHit.position.y + nearestHit.normal.y; normalEnd.z = nearestHit.position.z + nearestHit.normal.z; - - DrawLine3D(nearestHit.position, normalEnd, YELLOW); + + DrawLine3D(nearestHit.position, normalEnd, RED); } DrawRay(ray, MAROON); - - DrawGrid(100, 1.0f); - End3dMode(); - + DrawGrid(10, 10.0f); + + EndMode3D(); + // Draw some debug GUI text DrawText(FormatText("Hit Object: %s", hitObjectName), 10, 50, 10, BLACK); - if (nearestHit.hit) + if (nearestHit.hit) { int ypos = 70; DrawText(FormatText("Distance: %3.2f", nearestHit.distance), 10, ypos, 10, BLACK); - - DrawText(FormatText("Hit Pos: %3.2f %3.2f %3.2f", - nearestHit.position.x, - nearestHit.position.y, + + DrawText(FormatText("Hit Pos: %3.2f %3.2f %3.2f", + nearestHit.position.x, + nearestHit.position.y, nearestHit.position.z), 10, ypos + 15, 10, BLACK); - - DrawText(FormatText("Hit Norm: %3.2f %3.2f %3.2f", - nearestHit.normal.x, - nearestHit.normal.y, + + DrawText(FormatText("Hit Norm: %3.2f %3.2f %3.2f", + nearestHit.normal.x, + nearestHit.normal.y, nearestHit.normal.z), 10, ypos + 30, 10, BLACK); if (hitTriangle) DrawText(FormatText("Barycenter: %3.2f %3.2f %3.2f", bary.x, bary.y, bary.z), 10, ypos + 45, 10, BLACK); @@ -228,6 +233,8 @@ void UpdateDrawFrame(void) DrawText("Use Mouse to Move Camera", 10, 430, 10, GRAY); + DrawText("(c) Turret 3D model by Alberto Cano", screenWidth - 200, screenHeight - 20, 10, GRAY); + DrawFPS(10, 10); EndDrawing(); diff --git a/examples/web/models/models_obj_loading.c b/examples/web/models/models_obj_loading.c index c6a8429..c6e224c 100644 --- a/examples/web/models/models_obj_loading.c +++ b/examples/web/models/models_obj_loading.c @@ -18,14 +18,14 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world -Camera camera = {{ 3.0f, 3.0f, 3.0f }, { 0.0f, 1.5f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; +Camera camera = { 0 }; -Model dwarf; // Declare OBJ model -Texture2D texture; // Declare model texture +Model model = { 0 }; // Declare OBJ model +Texture2D texture = { 0 }; // Declare model texture Vector3 position = { 0.0f, 0.0f, 0.0f }; // Define model position @@ -35,7 +35,7 @@ Vector3 position = { 0.0f, 0.0f, 0.0f }; // Define model position void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -43,16 +43,22 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [models] example - obj model loading"); - dwarf = LoadModel("resources/model/dwarf.obj"); // Load OBJ model - texture = LoadTexture("resources/model/dwarf_diffuse.png"); // Load model texture - dwarf.material.maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture + camera.position = (Vector3){ 8.0f, 8.0f, 8.0f }; // Camera position + camera.target = (Vector3){ 0.0f, 2.5f, 0.0f }; // Camera looking at point + camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) + camera.fovy = 45.0f; // Camera field-of-view Y + camera.type = CAMERA_PERSPECTIVE; // Camera mode type + + model = LoadModel("resources/models/castle.obj"); // Load OBJ model + texture = LoadTexture("resources/models/castle_diffuse.png"); // Load model texture + model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set map diffuse texture #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -63,7 +69,7 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- UnloadTexture(texture); // Unload texture - UnloadModel(dwarf); // Unload model + UnloadModel(model); // Unload model CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -87,17 +93,17 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); - DrawModel(dwarf, position, 2.0f, WHITE); // Draw 3d model with texture + DrawModel(model, position, 0.2f, WHITE); // Draw 3d model with texture DrawGrid(10, 1.0f); // Draw a grid DrawGizmo(position); // Draw gizmo - End3dMode(); - - DrawText("(c) Dwarf 3D model by David Moreno", screenWidth - 200, screenHeight - 20, 10, GRAY); + EndMode3D(); + + DrawText("(c) Castle 3D model by Alberto Cano", screenWidth - 200, screenHeight - 20, 10, GRAY); DrawFPS(10, 10); diff --git a/examples/web/models/models_obj_loading.data b/examples/web/models/models_obj_loading.data new file mode 100644 index 0000000..fe2e2d6 --- /dev/null +++ b/examples/web/models/models_obj_loading.data @@ -0,0 +1,20267 @@ +# (c) 2018 Medieval Assets Pack by Alberto Cano +# Licensed as Creative Commons Attribution-NonCommercial 4.0 + +# +# object castle +# + +v -17.17 7.76 -10.68 +v -16.55 7.76 -12.98 +v -16.55 0.00 -12.98 +v -17.17 0.00 -10.68 +v -14.87 7.76 -14.66 +v -14.87 0.00 -14.66 +v -12.57 7.76 -15.28 +v -12.57 0.00 -15.28 +v -10.27 7.76 -14.66 +v -10.27 0.00 -14.66 +v -8.58 7.76 -12.98 +v -8.58 0.00 -12.98 +v -7.97 7.76 -10.68 +v -7.97 0.00 -10.68 +v -8.58 7.76 -8.38 +v -8.58 0.00 -8.38 +v -10.27 7.76 -6.69 +v -10.27 0.00 -6.69 +v -12.57 7.76 -6.08 +v -12.57 0.00 -6.08 +v -14.87 7.76 -6.69 +v -14.87 0.00 -6.69 +v -16.55 7.76 -8.38 +v -16.55 0.00 -8.38 +v -16.78 7.76 -13.11 +v -17.43 7.76 -10.68 +v -17.43 8.57 -10.68 +v -16.78 8.57 -13.11 +v -15.00 7.76 -14.89 +v -15.00 8.57 -14.89 +v -12.57 7.76 -15.54 +v -12.57 8.57 -15.54 +v -10.13 7.76 -14.89 +v -10.13 8.57 -14.89 +v -8.35 7.76 -13.11 +v -8.35 8.57 -13.11 +v -7.70 7.76 -10.68 +v -7.70 8.57 -10.68 +v -8.35 7.76 -8.24 +v -8.35 8.57 -8.24 +v -10.13 7.76 -6.46 +v -10.13 8.57 -6.46 +v -12.57 7.76 -5.81 +v -12.57 8.57 -5.81 +v -15.00 7.76 -6.46 +v -15.00 8.57 -6.46 +v -16.78 7.76 -8.24 +v -16.78 8.57 -8.24 +v -17.17 8.57 -10.68 +v -16.55 8.57 -12.98 +v -14.87 8.57 -14.66 +v -12.57 8.57 -15.28 +v -10.27 8.57 -14.66 +v -8.58 8.57 -12.98 +v -7.97 8.57 -10.68 +v -8.58 8.57 -8.38 +v -10.27 8.57 -6.69 +v -12.57 8.57 -6.08 +v -14.87 8.57 -6.69 +v -16.55 8.57 -8.38 +v -17.17 16.89 -10.68 +v -16.55 16.89 -12.98 +v -14.87 16.89 -14.66 +v -12.57 16.89 -15.28 +v -10.27 16.89 -14.66 +v -8.58 16.89 -12.98 +v -7.97 16.89 -10.68 +v -8.58 16.89 -8.38 +v -10.27 16.89 -6.69 +v -12.57 16.89 -6.08 +v -14.87 16.89 -6.69 +v -16.55 16.89 -8.38 +v -17.13 21.30 -13.31 +v -17.83 21.30 -10.68 +v -18.23 21.30 -10.68 +v -17.47 21.30 -13.51 +v -15.20 21.30 -15.24 +v -15.40 21.30 -15.58 +v -12.57 21.30 -15.94 +v -12.57 21.30 -16.34 +v -9.93 21.30 -15.24 +v -9.73 21.30 -15.58 +v -8.01 21.30 -13.31 +v -7.66 21.30 -13.51 +v -7.30 21.30 -10.68 +v -6.90 21.30 -10.68 +v -8.01 21.30 -8.04 +v -7.66 21.30 -7.84 +v -9.93 21.30 -6.12 +v -9.73 21.30 -5.77 +v -12.57 21.30 -5.41 +v -12.57 21.30 -5.01 +v -15.20 21.30 -6.12 +v -15.40 21.30 -5.77 +v -17.13 21.30 -8.04 +v -17.47 21.30 -7.84 +v -16.72 24.76 -10.68 +v -16.17 24.76 -12.76 +v -14.64 24.76 -14.28 +v -12.57 24.76 -14.83 +v -10.49 24.76 -14.28 +v -8.97 24.76 -12.76 +v -8.41 24.76 -10.68 +v -8.97 24.76 -8.60 +v -10.49 24.76 -7.08 +v -12.57 24.76 -6.52 +v -14.64 24.76 -7.08 +v -16.17 24.76 -8.60 +v -16.69 28.50 -10.68 +v -16.13 28.50 -12.74 +v -14.63 28.50 -14.24 +v -12.57 28.50 -14.80 +v -10.51 28.50 -14.24 +v -9.00 28.50 -12.74 +v -8.45 28.50 -10.68 +v -9.00 28.50 -8.62 +v -10.51 28.50 -7.11 +v -12.57 28.50 -6.56 +v -14.63 28.50 -7.11 +v -16.13 28.50 -8.62 +v -17.83 17.36 -10.68 +v -17.13 17.36 -13.31 +v -15.20 17.36 -15.24 +v -12.57 17.36 -15.94 +v -9.93 17.36 -15.24 +v -8.01 17.36 -13.31 +v -7.30 17.36 -10.68 +v -8.01 17.36 -8.04 +v -9.93 17.36 -6.12 +v -12.57 17.36 -5.41 +v -15.20 17.36 -6.12 +v -17.13 17.36 -8.04 +v -17.91 20.21 -10.37 +v -17.91 20.52 -10.80 +v -17.91 19.21 -10.80 +v -17.91 19.23 -10.37 +v -17.81 19.26 -10.03 +v -17.91 19.26 -10.04 +v -17.91 19.12 -10.04 +v -17.81 19.12 -10.03 +v -17.89 20.75 -10.80 +v -17.98 20.75 -10.81 +v -17.94 20.29 -10.15 +v -17.84 20.29 -10.15 +v -17.68 19.12 -11.55 +v -17.78 19.12 -11.56 +v -17.78 19.26 -11.56 +v -17.68 19.26 -11.55 +v -17.89 19.07 -10.80 +v -17.98 19.07 -10.81 +v -17.82 19.12 -11.45 +v -17.73 19.12 -11.45 +v -18.05 19.12 -10.16 +v -18.05 19.26 -10.16 +v -18.08 19.23 -10.39 +v -17.98 20.52 -10.81 +v -17.98 20.21 -10.38 +v -17.93 19.26 -11.46 +v -17.93 19.12 -11.46 +v -18.01 19.24 -11.24 +v -18.09 19.07 -10.82 +v -18.09 19.21 -10.82 +v -17.83 20.21 -11.23 +v -17.83 19.24 -11.23 +v -17.73 20.29 -11.45 +v -17.82 20.29 -11.45 +v -17.84 19.12 -10.15 +v -17.94 19.12 -10.15 +v -17.90 20.21 -11.23 +v -17.98 19.23 -10.38 +v -17.90 19.24 -11.23 +v -17.98 19.21 -10.81 +v -17.82 19.26 -11.45 +v -17.73 19.26 -11.45 +v -17.94 19.26 -10.15 +v -17.84 19.26 -10.15 +v -18.02 19.26 -10.05 +v -18.02 19.12 -10.05 +v -17.88 19.12 -11.57 +v -17.88 19.26 -11.57 +v -12.87 20.21 -16.02 +v -12.44 20.52 -16.02 +v -12.44 19.21 -16.02 +v -12.87 19.23 -16.02 +v -13.21 19.26 -15.92 +v -13.20 19.26 -16.02 +v -13.20 19.12 -16.02 +v -13.21 19.12 -15.92 +v -12.44 20.75 -16.00 +v -12.43 20.75 -16.10 +v -13.09 20.29 -16.05 +v -13.10 20.29 -15.95 +v -11.69 19.12 -15.79 +v -11.68 19.12 -15.89 +v -11.68 19.26 -15.89 +v -11.69 19.26 -15.79 +v -12.44 19.07 -16.00 +v -12.43 19.07 -16.10 +v -11.79 19.12 -15.94 +v -11.80 19.12 -15.84 +v -13.08 19.12 -16.16 +v -13.08 19.26 -16.16 +v -12.85 19.23 -16.20 +v -12.43 20.52 -16.10 +v -12.86 20.21 -16.09 +v -11.78 19.26 -16.04 +v -11.78 19.12 -16.04 +v -12.00 19.24 -16.12 +v -12.42 19.07 -16.20 +v -12.42 19.21 -16.20 +v -12.01 20.21 -15.94 +v -12.01 19.24 -15.94 +v -11.80 20.29 -15.84 +v -11.79 20.29 -15.94 +v -13.10 19.12 -15.95 +v -13.09 19.12 -16.05 +v -12.01 20.21 -16.01 +v -12.86 19.23 -16.09 +v -12.01 19.24 -16.01 +v -12.43 19.21 -16.10 +v -11.79 19.26 -15.94 +v -11.80 19.26 -15.84 +v -13.09 19.26 -16.05 +v -13.10 19.26 -15.95 +v -13.19 19.26 -16.13 +v -13.19 19.12 -16.13 +v -11.67 19.12 -16.00 +v -11.67 19.26 -16.00 +v -9.24 23.34 -12.52 +v -9.78 23.34 -13.29 +v -9.10 24.92 -13.76 +v -8.56 24.92 -12.99 +v -8.63 28.41 -12.92 +v -9.53 28.41 -12.29 +v -9.18 28.41 -13.70 +v -10.08 28.41 -13.07 +v -12.87 27.21 -14.81 +v -12.44 27.52 -14.82 +v -12.44 26.21 -14.82 +v -12.87 26.24 -14.81 +v -13.21 26.26 -14.72 +v -13.20 26.26 -14.82 +v -13.20 26.12 -14.82 +v -13.21 26.12 -14.72 +v -12.44 27.75 -14.80 +v -12.43 27.75 -14.89 +v -13.09 27.30 -14.85 +v -13.10 27.30 -14.75 +v -11.69 26.12 -14.59 +v -11.68 26.12 -14.69 +v -11.68 26.26 -14.69 +v -11.69 26.26 -14.59 +v -12.44 26.07 -14.80 +v -12.43 26.07 -14.89 +v -11.79 26.12 -14.73 +v -11.80 26.12 -14.64 +v -13.08 26.12 -14.96 +v -13.08 26.26 -14.96 +v -12.85 26.24 -14.99 +v -12.43 27.52 -14.89 +v -12.86 27.21 -14.89 +v -11.78 26.26 -14.84 +v -11.78 26.12 -14.84 +v -12.00 26.25 -14.92 +v -12.42 26.07 -15.00 +v -12.42 26.21 -15.00 +v -12.01 27.21 -14.74 +v -12.01 26.25 -14.74 +v -11.80 27.30 -14.64 +v -11.79 27.30 -14.73 +v -13.10 26.12 -14.75 +v -13.09 26.12 -14.85 +v -12.01 27.21 -14.81 +v -12.86 26.24 -14.89 +v -12.01 26.25 -14.81 +v -12.43 26.21 -14.89 +v -11.79 26.26 -14.73 +v -11.80 26.26 -14.64 +v -13.09 26.26 -14.85 +v -13.10 26.26 -14.75 +v -13.19 26.26 -14.93 +v -13.19 26.12 -14.93 +v -11.67 26.12 -14.79 +v -11.67 26.26 -14.79 +v -14.41 23.34 -14.01 +v -15.18 23.34 -13.46 +v -15.65 24.92 -14.14 +v -14.88 24.92 -14.68 +v -14.81 28.41 -14.61 +v -14.18 28.41 -13.71 +v -15.59 28.41 -14.07 +v -14.96 28.41 -13.17 +v -8.43 27.21 -10.98 +v -8.42 27.52 -10.55 +v -8.42 26.21 -10.55 +v -8.43 26.24 -10.98 +v -8.52 26.26 -11.32 +v -8.42 26.26 -11.31 +v -8.42 26.12 -11.31 +v -8.52 26.12 -11.32 +v -8.45 27.75 -10.55 +v -8.35 27.75 -10.54 +v -8.39 27.30 -11.20 +v -8.49 27.30 -11.21 +v -8.65 26.12 -9.80 +v -8.56 26.12 -9.79 +v -8.56 26.26 -9.79 +v -8.65 26.26 -9.80 +v -8.45 26.07 -10.55 +v -8.35 26.07 -10.54 +v -8.51 26.12 -9.90 +v -8.61 26.12 -9.91 +v -8.29 26.12 -11.19 +v -8.29 26.26 -11.19 +v -8.25 26.24 -10.96 +v -8.35 27.52 -10.54 +v -8.35 27.21 -10.97 +v -8.40 26.26 -9.89 +v -8.40 26.12 -9.89 +v -8.32 26.25 -10.11 +v -8.24 26.07 -10.53 +v -8.24 26.21 -10.53 +v -8.50 27.21 -10.13 +v -8.50 26.25 -10.13 +v -8.61 27.30 -9.91 +v -8.51 27.30 -9.90 +v -8.49 26.12 -11.21 +v -8.39 26.12 -11.20 +v -8.43 27.21 -10.12 +v -8.35 26.24 -10.97 +v -8.43 26.25 -10.12 +v -8.35 26.21 -10.54 +v -8.51 26.26 -9.90 +v -8.61 26.26 -9.91 +v -8.39 26.26 -11.20 +v -8.49 26.26 -11.21 +v -8.32 26.26 -11.30 +v -8.32 26.12 -11.30 +v -8.45 26.12 -9.78 +v -8.45 26.26 -9.78 +v -13.04 12.70 -6.81 +v -12.09 12.70 -6.81 +v -12.09 14.28 -5.99 +v -13.04 14.28 -5.99 +v -13.04 17.34 -5.64 +v -13.04 17.34 -6.74 +v -12.09 17.34 -5.64 +v -12.09 17.34 -6.74 +v -8.98 12.70 -12.20 +v -9.46 12.70 -13.02 +v -8.74 14.28 -13.43 +v -8.27 14.28 -12.61 +v -7.97 17.34 -12.79 +v -8.92 17.34 -12.24 +v -8.44 17.34 -13.61 +v -9.39 17.34 -13.06 +v -12.09 12.70 -14.54 +v -13.04 12.70 -14.54 +v -13.04 14.28 -15.36 +v -12.09 14.28 -15.36 +v -12.09 17.34 -15.71 +v -12.09 17.34 -14.62 +v -13.04 17.34 -15.71 +v -13.04 17.34 -14.62 +v -10.73 23.34 -7.35 +v -9.95 23.34 -7.89 +v -9.48 24.92 -7.22 +v -10.25 24.92 -6.67 +v -10.32 28.41 -6.74 +v -10.95 28.41 -7.65 +v -9.55 28.41 -7.29 +v -10.18 28.41 -8.19 +v -9.46 12.70 -8.34 +v -8.98 12.70 -9.15 +v -8.27 14.28 -8.74 +v -8.74 14.28 -7.92 +v -8.44 17.34 -7.75 +v -9.39 17.34 -8.30 +v -7.97 17.34 -8.57 +v -8.92 17.34 -9.12 +v -7.23 20.21 -10.98 +v -7.22 20.52 -10.55 +v -7.22 19.21 -10.55 +v -7.23 19.23 -10.98 +v -7.32 19.26 -11.32 +v -7.22 19.26 -11.31 +v -7.22 19.12 -11.31 +v -7.32 19.12 -11.32 +v -7.24 20.75 -10.55 +v -7.15 20.75 -10.54 +v -7.19 20.29 -11.20 +v -7.29 20.29 -11.21 +v -7.45 19.12 -9.80 +v -7.35 19.12 -9.79 +v -7.35 19.26 -9.79 +v -7.45 19.26 -9.80 +v -7.24 19.07 -10.55 +v -7.15 19.07 -10.54 +v -7.31 19.12 -9.90 +v -7.41 19.12 -9.91 +v -7.09 19.12 -11.19 +v -7.09 19.26 -11.19 +v -7.05 19.23 -10.96 +v -7.15 20.52 -10.54 +v -7.15 20.21 -10.97 +v -7.20 19.26 -9.89 +v -7.20 19.12 -9.89 +v -7.12 19.24 -10.11 +v -7.04 19.07 -10.53 +v -7.04 19.21 -10.53 +v -7.30 20.21 -10.13 +v -7.30 19.24 -10.13 +v -7.41 20.29 -9.91 +v -7.31 20.29 -9.90 +v -7.29 19.12 -11.21 +v -7.19 19.12 -11.20 +v -7.23 20.21 -10.12 +v -7.15 19.23 -10.97 +v -7.23 19.24 -10.12 +v -7.15 19.21 -10.54 +v -7.31 19.26 -9.90 +v -7.41 19.26 -9.91 +v -7.19 19.26 -11.20 +v -7.29 19.26 -11.21 +v -7.11 19.26 -11.30 +v -7.11 19.12 -11.30 +v -7.25 19.12 -9.78 +v -7.25 19.26 -9.78 +v -12.26 27.21 -6.54 +v -12.69 27.52 -6.53 +v -12.69 26.21 -6.53 +v -12.26 26.24 -6.54 +v -11.92 26.26 -6.63 +v -11.93 26.26 -6.53 +v -11.93 26.12 -6.53 +v -11.92 26.12 -6.63 +v -12.69 27.75 -6.56 +v -12.70 27.75 -6.46 +v -12.04 27.30 -6.51 +v -12.03 27.30 -6.60 +v -13.44 26.12 -6.76 +v -13.45 26.12 -6.67 +v -13.45 26.26 -6.67 +v -13.44 26.26 -6.76 +v -12.69 26.07 -6.56 +v -12.70 26.07 -6.46 +v -13.34 26.12 -6.62 +v -13.34 26.12 -6.72 +v -12.05 26.12 -6.40 +v -12.05 26.26 -6.40 +v -12.28 26.24 -6.36 +v -12.70 27.52 -6.46 +v -12.27 27.21 -6.47 +v -13.35 26.26 -6.51 +v -13.35 26.12 -6.51 +v -13.13 26.25 -6.43 +v -12.71 26.07 -6.35 +v -12.71 26.21 -6.35 +v -13.12 27.21 -6.61 +v -13.12 26.25 -6.61 +v -13.34 27.30 -6.72 +v -13.34 27.30 -6.62 +v -12.03 26.12 -6.60 +v -12.04 26.12 -6.51 +v -13.12 27.21 -6.54 +v -12.27 26.24 -6.47 +v -13.12 26.25 -6.54 +v -12.70 26.21 -6.46 +v -13.34 26.26 -6.62 +v -13.34 26.26 -6.72 +v -12.04 26.26 -6.51 +v -12.03 26.26 -6.60 +v -11.94 26.26 -6.43 +v -11.94 26.12 -6.43 +v -13.46 26.12 -6.56 +v -13.46 26.26 -6.56 +v -16.15 12.70 -9.15 +v -15.67 12.70 -8.34 +v -16.39 14.28 -7.92 +v -16.86 14.28 -8.74 +v -17.17 17.34 -8.57 +v -16.21 17.34 -9.12 +v -16.69 17.34 -7.75 +v -15.74 17.34 -8.30 +v -12.26 20.21 -5.34 +v -12.69 20.52 -5.33 +v -12.69 19.21 -5.33 +v -12.26 19.23 -5.34 +v -11.92 19.26 -5.43 +v -11.93 19.26 -5.33 +v -11.93 19.12 -5.33 +v -11.92 19.12 -5.43 +v -12.69 20.75 -5.36 +v -12.70 20.75 -5.26 +v -12.04 20.29 -5.30 +v -12.03 20.29 -5.40 +v -13.44 19.12 -5.56 +v -13.45 19.12 -5.47 +v -13.45 19.26 -5.47 +v -13.44 19.26 -5.56 +v -12.69 19.07 -5.36 +v -12.70 19.07 -5.26 +v -13.34 19.12 -5.42 +v -13.34 19.12 -5.52 +v -12.05 19.12 -5.20 +v -12.05 19.26 -5.20 +v -12.28 19.23 -5.16 +v -12.70 20.52 -5.26 +v -12.27 20.21 -5.26 +v -13.35 19.26 -5.31 +v -13.35 19.12 -5.31 +v -13.13 19.24 -5.23 +v -12.71 19.07 -5.15 +v -12.71 19.21 -5.15 +v -13.12 20.21 -5.41 +v -13.12 19.24 -5.41 +v -13.34 20.29 -5.52 +v -13.34 20.29 -5.42 +v -12.03 19.12 -5.40 +v -12.04 19.12 -5.30 +v -13.12 20.21 -5.34 +v -12.27 19.23 -5.26 +v -13.12 19.24 -5.34 +v -12.70 19.21 -5.26 +v -13.34 19.26 -5.42 +v -13.34 19.26 -5.52 +v -12.04 19.26 -5.30 +v -12.03 19.26 -5.40 +v -11.94 19.26 -5.23 +v -11.94 19.12 -5.23 +v -13.46 19.12 -5.36 +v -13.46 19.26 -5.36 +v -15.89 23.34 -8.84 +v -15.35 23.34 -8.06 +v -16.03 24.92 -7.59 +v -16.57 24.92 -8.36 +v -16.50 28.41 -8.43 +v -15.60 28.41 -9.06 +v -15.96 28.41 -7.66 +v -15.06 28.41 -8.29 +v -16.70 27.21 -10.37 +v -16.71 27.52 -10.80 +v -16.71 26.21 -10.80 +v -16.70 26.24 -10.37 +v -16.61 26.26 -10.03 +v -16.71 26.26 -10.04 +v -16.71 26.12 -10.04 +v -16.61 26.12 -10.03 +v -16.69 27.75 -10.80 +v -16.78 27.75 -10.81 +v -16.74 27.30 -10.15 +v -16.64 27.30 -10.15 +v -16.48 26.12 -11.55 +v -16.58 26.12 -11.56 +v -16.58 26.26 -11.56 +v -16.48 26.26 -11.55 +v -16.69 26.07 -10.80 +v -16.78 26.07 -10.81 +v -16.62 26.12 -11.45 +v -16.53 26.12 -11.45 +v -16.84 26.12 -10.16 +v -16.84 26.26 -10.16 +v -16.88 26.24 -10.39 +v -16.78 27.52 -10.81 +v -16.78 27.21 -10.38 +v -16.73 26.26 -11.46 +v -16.73 26.12 -11.46 +v -16.81 26.25 -11.24 +v -16.89 26.07 -10.82 +v -16.89 26.21 -10.82 +v -16.63 27.21 -11.23 +v -16.63 26.25 -11.23 +v -16.53 27.30 -11.45 +v -16.62 27.30 -11.45 +v -16.64 26.12 -10.15 +v -16.74 26.12 -10.15 +v -16.70 27.21 -11.23 +v -16.78 26.24 -10.38 +v -16.70 26.25 -11.23 +v -16.78 26.21 -10.81 +v -16.62 26.26 -11.45 +v -16.53 26.26 -11.45 +v -16.74 26.26 -10.15 +v -16.64 26.26 -10.15 +v -16.82 26.26 -10.05 +v -16.82 26.12 -10.05 +v -16.68 26.12 -11.57 +v -16.68 26.26 -11.57 +v -15.67 12.70 -13.02 +v -16.15 12.70 -12.20 +v -16.86 14.28 -12.61 +v -16.39 14.28 -13.43 +v -16.69 17.34 -13.61 +v -15.74 17.34 -13.06 +v -17.17 17.34 -12.79 +v -16.21 17.34 -12.24 +v -16.83 28.50 -13.14 +v -17.49 28.50 -10.68 +v -17.49 30.29 -10.68 +v -16.83 30.29 -13.14 +v -15.03 28.50 -14.94 +v -15.03 30.29 -14.94 +v -12.57 28.50 -15.60 +v -12.57 30.29 -15.60 +v -10.10 28.50 -14.94 +v -10.10 30.29 -14.94 +v -8.30 28.50 -13.14 +v -8.30 30.29 -13.14 +v -7.64 28.50 -10.68 +v -7.64 30.29 -10.68 +v -8.30 28.50 -8.21 +v -8.30 30.29 -8.21 +v -10.10 28.50 -6.41 +v -10.10 30.29 -6.41 +v -12.57 28.50 -5.75 +v -12.57 30.29 -5.75 +v -15.03 28.50 -6.41 +v -15.03 30.29 -6.41 +v -16.83 28.50 -8.21 +v -16.83 30.29 -8.21 +v -16.78 30.29 -10.68 +v -16.21 30.29 -12.78 +v -15.03 30.90 -14.94 +v -16.83 30.90 -13.14 +v -16.21 30.90 -12.78 +v -14.67 30.90 -14.32 +v -14.67 30.29 -14.32 +v -12.57 30.29 -14.89 +v -10.10 30.90 -14.94 +v -12.57 30.90 -15.60 +v -12.57 30.90 -14.89 +v -10.46 30.90 -14.32 +v -10.46 30.29 -14.32 +v -8.92 30.29 -12.78 +v -7.64 30.90 -10.68 +v -8.30 30.90 -13.14 +v -8.92 30.90 -12.78 +v -8.36 30.90 -10.68 +v -8.36 30.29 -10.68 +v -8.92 30.29 -8.57 +v -10.10 30.90 -6.41 +v -8.30 30.90 -8.21 +v -8.92 30.90 -8.57 +v -10.46 30.90 -7.03 +v -10.46 30.29 -7.03 +v -12.57 30.29 -6.47 +v -15.03 30.90 -6.41 +v -12.57 30.90 -5.75 +v -12.57 30.90 -6.47 +v -14.67 30.90 -7.03 +v -14.67 30.29 -7.03 +v -16.21 30.29 -8.57 +v -17.49 30.90 -10.68 +v -16.83 30.90 -8.21 +v -16.21 30.90 -8.57 +v -16.78 30.90 -10.68 +v -16.78 29.42 -10.68 +v -16.21 29.42 -12.78 +v -14.67 29.42 -14.32 +v -12.57 29.42 -14.89 +v -10.46 29.42 -14.32 +v -8.92 29.42 -12.78 +v -8.36 29.42 -10.68 +v -8.92 29.42 -8.57 +v -10.46 29.42 -7.03 +v -12.57 29.42 -6.47 +v -14.67 29.42 -7.03 +v -16.21 29.42 -8.57 +v -12.57 29.42 -10.68 +v 15.69 11.78 11.98 +v 15.69 11.78 -12.46 +v 10.74 17.79 -7.40 +v 10.74 17.79 7.40 +v -15.69 11.78 -12.46 +v -10.74 17.79 -7.40 +v -15.69 11.78 11.98 +v -10.74 17.79 7.40 +v 12.89 0.00 11.03 +v 12.89 0.00 -11.03 +v 12.89 11.78 -11.03 +v 12.89 11.78 11.03 +v -12.89 0.00 -11.03 +v -12.89 11.78 -11.03 +v -23.42 0.00 -6.76 +v -23.42 0.00 6.76 +v -23.42 6.95 6.76 +v -23.42 6.95 -6.76 +v -12.89 0.00 11.03 +v -12.89 11.78 11.03 +v 8.74 17.79 -3.62 +v 8.74 17.79 3.62 +v -8.74 17.79 -3.62 +v -8.74 17.79 3.62 +v -12.89 6.95 6.76 +v -12.89 0.00 6.76 +v -12.89 6.95 -6.76 +v -12.89 0.00 -6.76 +v -9.46 12.70 7.57 +v -8.74 14.28 7.16 +v -8.27 14.28 7.98 +v -8.98 12.70 8.39 +v -9.39 17.34 7.53 +v -8.44 17.34 6.98 +v -7.97 17.34 7.80 +v -8.92 17.34 8.35 +v -9.31 28.15 -0.00 +v -9.31 23.30 4.54 +v 0.00 22.65 4.30 +v -0.11 25.84 -0.00 +v -9.31 27.72 -0.00 +v -9.31 22.87 4.55 +v 0.00 22.23 4.31 +v 0.00 22.65 -4.30 +v -9.31 23.30 -4.54 +v -9.31 22.87 -4.55 +v 0.00 22.23 -4.31 +v 9.31 28.15 -0.00 +v 9.31 23.30 4.54 +v 9.31 27.72 -0.00 +v 9.31 22.87 4.55 +v 9.31 23.30 -4.54 +v 9.31 22.87 -4.55 +v 4.76 26.71 -0.63 +v 5.87 26.95 -0.63 +v 5.91 26.75 -0.63 +v 4.80 26.52 -0.63 +v 4.68 27.10 -0.11 +v 5.79 27.34 -0.11 +v 4.72 26.91 -0.11 +v 5.79 27.35 -0.00 +v 4.68 27.12 -0.00 +v 4.72 26.93 -0.00 +v 5.91 26.75 0.63 +v 5.87 26.95 0.63 +v 4.76 26.71 0.63 +v 4.80 26.52 0.63 +v 5.79 27.34 0.11 +v 4.68 27.10 0.11 +v 4.72 26.91 0.11 +v 3.88 26.49 -0.63 +v 5.00 26.69 -0.63 +v 5.03 26.49 -0.63 +v 3.91 26.30 -0.63 +v 3.81 26.89 -0.11 +v 4.93 27.08 -0.11 +v 3.84 26.69 -0.11 +v 4.92 27.09 -0.00 +v 3.81 26.90 -0.00 +v 3.84 26.71 -0.00 +v 5.03 26.49 0.63 +v 5.00 26.69 0.63 +v 3.88 26.49 0.63 +v 3.91 26.30 0.63 +v 4.93 27.08 0.11 +v 3.81 26.89 0.11 +v 3.84 26.69 0.11 +v 2.89 26.32 -0.63 +v 4.01 26.46 -0.63 +v 4.04 26.27 -0.63 +v 2.91 26.13 -0.63 +v 2.84 26.72 -0.11 +v 3.96 26.86 -0.11 +v 2.86 26.53 -0.11 +v 3.96 26.87 -0.00 +v 2.84 26.74 -0.00 +v 2.86 26.54 -0.00 +v 4.04 26.27 0.63 +v 4.01 26.46 0.63 +v 2.89 26.32 0.63 +v 2.91 26.13 0.63 +v 3.96 26.86 0.11 +v 2.84 26.72 0.11 +v 2.86 26.53 0.11 +v 1.88 26.15 -0.63 +v 3.00 26.29 -0.63 +v 3.02 26.09 -0.63 +v 1.90 25.96 -0.63 +v 1.83 26.55 -0.11 +v 2.95 26.69 -0.11 +v 1.85 26.36 -0.11 +v 2.95 26.70 -0.00 +v 1.83 26.56 -0.00 +v 1.85 26.37 -0.00 +v 3.02 26.09 0.63 +v 3.00 26.29 0.63 +v 1.88 26.15 0.63 +v 1.90 25.96 0.63 +v 2.95 26.69 0.11 +v 1.83 26.55 0.11 +v 1.85 26.36 0.11 +v 0.78 26.08 -0.63 +v 1.91 26.12 -0.63 +v 1.92 25.93 -0.63 +v 0.79 25.89 -0.63 +v 0.77 26.49 -0.11 +v 1.90 26.52 -0.11 +v 0.77 26.29 -0.11 +v 1.90 26.54 -0.00 +v 0.77 26.50 -0.00 +v 0.77 26.30 -0.00 +v 1.92 25.93 0.63 +v 1.91 26.12 0.63 +v 0.78 26.08 0.63 +v 0.79 25.89 0.63 +v 1.90 26.52 0.11 +v 0.77 26.49 0.11 +v 0.77 26.29 0.11 +v -0.35 26.05 -0.63 +v 0.78 26.11 -0.63 +v 0.79 25.91 -0.63 +v -0.34 25.85 -0.63 +v -0.37 26.45 -0.11 +v 0.76 26.51 -0.11 +v -0.36 26.25 -0.11 +v 0.76 26.52 -0.00 +v -0.38 26.46 -0.00 +v -0.37 26.27 -0.00 +v 0.79 25.91 0.63 +v 0.78 26.11 0.63 +v -0.35 26.05 0.63 +v -0.34 25.85 0.63 +v 0.76 26.51 0.11 +v -0.37 26.45 0.11 +v -0.36 26.25 0.11 +v 6.98 27.27 -0.63 +v 8.09 27.50 -0.63 +v 8.13 27.31 -0.63 +v 7.02 27.08 -0.63 +v 6.90 27.66 -0.11 +v 8.01 27.90 -0.11 +v 6.94 27.47 -0.11 +v 8.00 27.91 -0.00 +v 6.89 27.68 -0.00 +v 6.93 27.48 -0.00 +v 8.13 27.31 0.63 +v 8.09 27.50 0.63 +v 6.98 27.27 0.63 +v 7.02 27.08 0.63 +v 8.01 27.90 0.11 +v 6.90 27.66 0.11 +v 6.94 27.47 0.11 +v 5.87 26.96 -0.63 +v 6.98 27.20 -0.63 +v 7.02 27.01 -0.63 +v 5.91 26.77 -0.63 +v 5.79 27.36 -0.11 +v 6.90 27.59 -0.11 +v 5.83 27.17 -0.11 +v 6.89 27.60 -0.00 +v 5.79 27.37 -0.00 +v 5.83 27.18 -0.00 +v 7.02 27.01 0.63 +v 6.98 27.20 0.63 +v 5.87 26.96 0.63 +v 5.91 26.77 0.63 +v 6.90 27.59 0.11 +v 5.79 27.36 0.11 +v 5.83 27.17 0.11 +v -6.20 26.77 -0.63 +v -6.16 26.96 -0.63 +v -5.05 26.72 -0.63 +v -5.09 26.53 -0.63 +v -4.97 27.12 -0.11 +v -6.08 27.35 -0.11 +v -5.01 26.92 -0.11 +v -6.07 27.36 -0.00 +v -4.96 27.13 -0.00 +v -5.01 26.94 -0.00 +v -5.05 26.72 0.63 +v -6.16 26.96 0.63 +v -6.20 26.77 0.63 +v -5.09 26.53 0.63 +v -4.97 27.12 0.11 +v -6.08 27.35 0.11 +v -5.01 26.92 0.11 +v -5.32 26.52 -0.63 +v -5.28 26.71 -0.63 +v -4.17 26.51 -0.63 +v -4.20 26.32 -0.63 +v -4.10 26.91 -0.11 +v -5.21 27.11 -0.11 +v -4.13 26.72 -0.11 +v -5.21 27.12 -0.00 +v -4.10 26.92 -0.00 +v -4.13 26.73 -0.00 +v -4.17 26.51 0.63 +v -5.28 26.71 0.63 +v -5.32 26.52 0.63 +v -4.20 26.32 0.63 +v -4.10 26.91 0.11 +v -5.21 27.11 0.11 +v -4.13 26.72 0.11 +v -4.32 26.27 -0.63 +v -4.30 26.46 -0.63 +v -3.18 26.32 -0.63 +v -3.20 26.13 -0.63 +v -3.13 26.72 -0.11 +v -4.25 26.86 -0.11 +v -3.15 26.53 -0.11 +v -4.25 26.87 -0.00 +v -3.13 26.73 -0.00 +v -3.15 26.54 -0.00 +v -3.18 26.32 0.63 +v -4.30 26.46 0.63 +v -4.32 26.27 0.63 +v -3.20 26.13 0.63 +v -3.13 26.72 0.11 +v -4.25 26.86 0.11 +v -3.15 26.53 0.11 +v -3.31 26.05 -0.63 +v -3.29 26.24 -0.63 +v -2.16 26.11 -0.63 +v -2.19 25.91 -0.63 +v -2.12 26.50 -0.11 +v -3.24 26.64 -0.11 +v -2.14 26.31 -0.11 +v -3.24 26.65 -0.00 +v -2.11 26.52 -0.00 +v -2.14 26.32 -0.00 +v -2.16 26.11 0.63 +v -3.29 26.24 0.63 +v -3.31 26.05 0.63 +v -2.19 25.91 0.63 +v -2.12 26.50 0.11 +v -3.24 26.64 0.11 +v -2.14 26.31 0.11 +v -2.21 25.88 -0.63 +v -2.20 26.08 -0.63 +v -1.07 26.04 -0.63 +v -1.07 25.84 -0.63 +v -1.05 26.44 -0.11 +v -2.19 26.48 -0.11 +v -1.06 26.25 -0.11 +v -2.19 26.49 -0.00 +v -1.05 26.45 -0.00 +v -1.06 26.26 -0.00 +v -1.07 26.04 0.63 +v -2.20 26.08 0.63 +v -2.21 25.88 0.63 +v -1.07 25.84 0.63 +v -1.05 26.44 0.11 +v -2.19 26.48 0.11 +v -1.06 26.25 0.11 +v -1.08 25.87 -0.63 +v -1.07 26.06 -0.63 +v 0.07 26.00 -0.63 +v 0.06 25.80 -0.63 +v 0.09 26.40 -0.11 +v -1.04 26.46 -0.11 +v 0.08 26.21 -0.11 +v -1.04 26.47 -0.00 +v 0.09 26.41 -0.00 +v 0.08 26.22 -0.00 +v 0.07 26.00 0.63 +v -1.07 26.06 0.63 +v -1.08 25.87 0.63 +v 0.06 25.80 0.63 +v 0.09 26.40 0.11 +v -1.04 26.46 0.11 +v 0.08 26.21 0.11 +v -8.19 27.32 -0.63 +v -8.15 27.51 -0.63 +v -7.04 27.28 -0.63 +v -7.08 27.09 -0.63 +v -6.96 27.67 -0.11 +v -8.07 27.90 -0.11 +v -7.00 27.48 -0.11 +v -8.06 27.92 -0.00 +v -6.95 27.68 -0.00 +v -6.99 27.49 -0.00 +v -7.04 27.28 0.63 +v -8.15 27.51 0.63 +v -8.19 27.32 0.63 +v -7.08 27.09 0.63 +v -6.96 27.67 0.11 +v -8.07 27.90 0.11 +v -7.00 27.48 0.11 +v -7.06 27.02 -0.63 +v -7.02 27.21 -0.63 +v -5.92 26.97 -0.63 +v -5.96 26.78 -0.63 +v -5.83 27.37 -0.11 +v -6.94 27.60 -0.11 +v -5.87 27.18 -0.11 +v -6.94 27.61 -0.00 +v -5.83 27.38 -0.00 +v -5.87 27.19 -0.00 +v -5.92 26.97 0.63 +v -7.02 27.21 0.63 +v -7.06 27.02 0.63 +v -5.96 26.78 0.63 +v -5.83 27.37 0.11 +v -6.94 27.60 0.11 +v -5.87 27.18 0.11 +v -9.18 27.83 -0.63 +v -8.10 27.48 -0.63 +v -8.16 27.29 -0.63 +v -9.24 27.64 -0.63 +v -9.05 28.21 -0.11 +v -7.98 27.86 -0.11 +v -9.11 28.02 -0.11 +v -7.97 27.87 -0.00 +v -9.05 28.22 -0.00 +v -9.11 28.04 -0.00 +v -8.16 27.29 0.63 +v -8.10 27.48 0.63 +v -9.18 27.83 0.63 +v -9.24 27.64 0.63 +v -7.98 27.86 0.11 +v -9.05 28.21 0.11 +v -9.11 28.02 0.11 +v 8.19 27.28 -0.63 +v 8.13 27.46 -0.63 +v 9.21 27.81 -0.63 +v 9.27 27.63 -0.63 +v 9.08 28.20 -0.11 +v 8.01 27.84 -0.11 +v 9.15 28.01 -0.11 +v 8.00 27.86 -0.00 +v 9.08 28.21 -0.00 +v 9.14 28.02 -0.00 +v 9.21 27.81 0.63 +v 8.13 27.46 0.63 +v 8.19 27.28 0.63 +v 9.27 27.63 0.63 +v 9.08 28.20 0.11 +v 8.01 27.84 0.11 +v 9.15 28.01 0.11 +v 9.46 12.70 7.57 +v 8.98 12.70 8.39 +v 8.27 14.28 7.98 +v 8.74 14.28 7.16 +v 8.44 17.34 6.98 +v 9.39 17.34 7.53 +v 7.97 17.34 7.80 +v 8.92 17.34 8.35 +v -15.48 7.80 6.90 +v -15.48 7.80 6.03 +v -17.46 7.80 6.03 +v -17.46 7.80 6.90 +v -15.48 6.95 6.90 +v -15.48 6.95 6.03 +v -17.46 6.95 6.03 +v -17.46 6.95 6.90 +v -18.47 7.80 6.90 +v -18.47 7.80 6.03 +v -20.45 7.80 6.03 +v -20.45 7.80 6.90 +v -18.47 6.95 6.90 +v -18.47 6.95 6.03 +v -20.45 6.95 6.03 +v -20.45 6.95 6.90 +v -21.45 7.80 6.90 +v -21.45 7.80 6.03 +v -23.44 7.80 6.03 +v -23.44 7.80 6.90 +v -21.45 6.95 6.90 +v -21.45 6.95 6.03 +v -23.44 6.95 6.03 +v -23.44 6.95 6.90 +v -23.40 7.80 5.50 +v -22.53 7.80 5.50 +v -22.53 7.80 3.51 +v -23.40 7.80 3.51 +v -23.40 6.95 5.50 +v -22.53 6.95 5.50 +v -22.53 6.95 3.51 +v -23.40 6.95 3.51 +v -23.40 7.80 2.51 +v -22.53 7.80 2.51 +v -22.53 7.80 0.53 +v -23.40 7.80 0.53 +v -23.40 6.95 2.51 +v -22.53 6.95 2.51 +v -22.53 6.95 0.53 +v -23.40 6.95 0.53 +v -23.40 7.80 -0.48 +v -22.53 7.80 -0.48 +v -22.53 7.80 -2.46 +v -23.40 7.80 -2.46 +v -23.40 6.95 -0.48 +v -22.53 6.95 -0.48 +v -22.53 6.95 -2.46 +v -23.40 6.95 -2.46 +v -23.40 7.80 -3.47 +v -22.53 7.80 -3.47 +v -22.53 7.80 -5.45 +v -23.40 7.80 -5.45 +v -23.40 6.95 -3.47 +v -22.53 6.95 -3.47 +v -22.53 6.95 -5.45 +v -23.40 6.95 -5.45 +v -21.45 7.80 -6.02 +v -21.45 7.80 -6.88 +v -23.44 7.80 -6.88 +v -23.44 7.80 -6.02 +v -21.45 6.95 -6.02 +v -21.45 6.95 -6.88 +v -23.44 6.95 -6.88 +v -23.44 6.95 -6.02 +v -18.47 7.80 -6.02 +v -18.47 7.80 -6.88 +v -20.45 7.80 -6.88 +v -20.45 7.80 -6.02 +v -18.47 6.95 -6.02 +v -18.47 6.95 -6.88 +v -20.45 6.95 -6.88 +v -20.45 6.95 -6.02 +v -15.48 7.80 -6.02 +v -15.48 7.80 -6.88 +v -17.46 7.80 -6.88 +v -17.46 7.80 -6.02 +v -15.48 6.95 -6.02 +v -15.48 6.95 -6.88 +v -17.46 6.95 -6.88 +v -17.46 6.95 -6.02 +v -7.10 7.80 -12.06 +v -7.10 7.80 -12.93 +v -9.08 7.80 -12.93 +v -9.08 7.80 -12.06 +v -7.10 6.95 -12.06 +v -7.10 6.95 -12.93 +v -9.08 6.95 -12.93 +v -9.08 6.95 -12.06 +v -4.46 7.80 -12.06 +v -4.46 7.80 -12.93 +v -6.45 7.80 -12.93 +v -6.45 7.80 -12.06 +v -4.46 6.95 -12.06 +v -4.46 6.95 -12.93 +v -6.45 6.95 -12.93 +v -6.45 6.95 -12.06 +v -1.83 7.80 -12.06 +v -1.83 7.80 -12.93 +v -3.81 7.80 -12.93 +v -3.81 7.80 -12.06 +v -1.83 6.95 -12.06 +v -1.83 6.95 -12.93 +v -3.81 6.95 -12.93 +v -3.81 6.95 -12.06 +v 0.81 7.80 -12.06 +v 0.81 7.80 -12.93 +v -1.17 7.80 -12.93 +v -1.17 7.80 -12.06 +v 0.81 6.95 -12.06 +v 0.81 6.95 -12.93 +v -1.17 6.95 -12.93 +v -1.17 6.95 -12.06 +v 3.44 7.80 -12.06 +v 3.44 7.80 -12.93 +v 1.46 7.80 -12.93 +v 1.46 7.80 -12.06 +v 3.44 6.95 -12.06 +v 3.44 6.95 -12.93 +v 1.46 6.95 -12.93 +v 1.46 6.95 -12.06 +v 6.08 7.80 -12.06 +v 6.08 7.80 -12.93 +v 4.10 7.80 -12.93 +v 4.10 7.80 -12.06 +v 6.08 6.95 -12.06 +v 6.08 6.95 -12.93 +v 4.10 6.95 -12.93 +v 4.10 6.95 -12.06 +v 8.72 7.80 -12.06 +v 8.72 7.80 -12.93 +v 6.74 7.80 -12.93 +v 6.74 7.80 -12.06 +v 8.72 6.95 -12.06 +v 8.72 6.95 -12.93 +v 6.74 6.95 -12.93 +v 6.74 6.95 -12.06 +v -4.39 18.64 -6.78 +v -4.39 18.64 -7.64 +v -6.37 18.64 -7.64 +v -6.37 18.64 -6.78 +v -4.39 17.79 -6.78 +v -4.39 17.79 -7.64 +v -6.37 17.79 -7.64 +v -6.37 17.79 -6.78 +v -1.66 18.64 -6.78 +v -1.66 18.64 -7.64 +v -3.64 18.64 -7.64 +v -3.64 18.64 -6.78 +v -1.66 17.79 -6.78 +v -1.66 17.79 -7.64 +v -3.64 17.79 -7.64 +v -3.64 17.79 -6.78 +v 1.06 18.64 -6.78 +v 1.06 18.64 -7.64 +v -0.92 18.64 -7.64 +v -0.92 18.64 -6.78 +v 1.06 17.79 -6.78 +v 1.06 17.79 -7.64 +v -0.92 17.79 -7.64 +v -0.92 17.79 -6.78 +v 3.79 18.64 -6.78 +v 3.79 18.64 -7.64 +v 1.80 18.64 -7.64 +v 1.80 18.64 -6.78 +v 3.79 17.79 -6.78 +v 3.79 17.79 -7.64 +v 1.80 17.79 -7.64 +v 1.80 17.79 -6.78 +v 6.51 18.64 -6.78 +v 6.51 18.64 -7.64 +v 4.53 18.64 -7.64 +v 4.53 18.64 -6.78 +v 6.51 17.79 -6.78 +v 6.51 17.79 -7.64 +v 4.53 17.79 -7.64 +v 4.53 17.79 -6.78 +v 9.24 18.64 -6.78 +v 9.24 18.64 -7.64 +v 7.25 18.64 -7.64 +v 7.25 18.64 -6.78 +v 9.24 17.79 -6.78 +v 9.24 17.79 -7.64 +v 7.25 17.79 -7.64 +v 7.25 17.79 -6.78 +v -7.11 18.64 -6.78 +v -7.11 18.64 -7.64 +v -9.09 18.64 -7.64 +v -9.09 18.64 -6.78 +v -7.11 17.79 -6.78 +v -7.11 17.79 -7.64 +v -9.09 17.79 -7.64 +v -9.09 17.79 -6.78 +v -9.92 18.64 -6.55 +v -10.78 18.64 -6.55 +v -10.78 18.64 -4.56 +v -9.92 18.64 -4.56 +v -9.92 17.79 -6.55 +v -10.78 17.79 -6.55 +v -10.78 17.79 -4.56 +v -9.92 17.79 -4.56 +v -9.92 18.64 -3.82 +v -10.78 18.64 -3.82 +v -10.78 18.64 -1.84 +v -9.92 18.64 -1.84 +v -9.92 17.79 -3.82 +v -10.78 17.79 -3.82 +v -10.78 17.79 -1.84 +v -9.92 17.79 -1.84 +v -9.92 18.64 -1.10 +v -10.78 18.64 -1.10 +v -10.78 18.64 0.88 +v -9.92 18.64 0.88 +v -9.92 17.79 -1.10 +v -10.78 17.79 -1.10 +v -10.78 17.79 0.88 +v -9.92 17.79 0.88 +v -9.92 18.64 1.63 +v -10.78 18.64 1.63 +v -10.78 18.64 3.61 +v -9.92 18.64 3.61 +v -9.92 17.79 1.63 +v -10.78 17.79 1.63 +v -10.78 17.79 3.61 +v -9.92 17.79 3.61 +v -7.11 18.64 7.48 +v -7.11 18.64 6.62 +v -9.09 18.64 6.62 +v -9.09 18.64 7.48 +v -7.11 17.79 7.48 +v -7.11 17.79 6.62 +v -9.09 17.79 6.62 +v -9.09 17.79 7.48 +v -4.39 18.64 7.48 +v -4.39 18.64 6.62 +v -6.37 18.64 6.62 +v -6.37 18.64 7.48 +v -4.39 17.79 7.48 +v -4.39 17.79 6.62 +v -6.37 17.79 6.62 +v -6.37 17.79 7.48 +v -1.66 18.64 7.48 +v -1.66 18.64 6.62 +v -3.64 18.64 6.62 +v -3.64 18.64 7.48 +v -1.66 17.79 7.48 +v -1.66 17.79 6.62 +v -3.64 17.79 6.62 +v -3.64 17.79 7.48 +v 1.06 18.64 7.48 +v 1.06 18.64 6.62 +v -0.92 18.64 6.62 +v -0.92 18.64 7.48 +v 1.06 17.79 7.48 +v 1.06 17.79 6.62 +v -0.92 17.79 6.62 +v -0.92 17.79 7.48 +v 3.79 18.64 7.48 +v 3.79 18.64 6.62 +v 1.80 18.64 6.62 +v 1.80 18.64 7.48 +v 3.79 17.79 7.48 +v 3.79 17.79 6.62 +v 1.80 17.79 6.62 +v 1.80 17.79 7.48 +v 9.24 18.64 7.48 +v 9.24 18.64 6.62 +v 7.25 18.64 6.62 +v 7.25 18.64 7.48 +v 9.24 17.79 7.48 +v 9.24 17.79 6.62 +v 7.25 17.79 6.62 +v 7.25 17.79 7.48 +v 6.51 18.64 7.48 +v 6.51 18.64 6.62 +v 4.53 18.64 6.62 +v 4.53 18.64 7.48 +v 6.51 17.79 7.48 +v 6.51 17.79 6.62 +v 4.53 17.79 6.62 +v 4.53 17.79 7.48 +v 10.85 18.64 -6.55 +v 9.99 18.64 -6.55 +v 9.99 18.64 -4.56 +v 10.85 18.64 -4.56 +v 10.85 17.79 -6.55 +v 9.99 17.79 -6.55 +v 9.99 17.79 -4.56 +v 10.85 17.79 -4.56 +v 10.85 18.64 -3.82 +v 9.99 18.64 -3.82 +v 9.99 18.64 -1.84 +v 10.85 18.64 -1.84 +v 10.85 17.79 -3.82 +v 9.99 17.79 -3.82 +v 9.99 17.79 -1.84 +v 10.85 17.79 -1.84 +v 10.85 18.64 -1.10 +v 9.99 18.64 -1.10 +v 9.99 18.64 0.88 +v 10.85 18.64 0.88 +v 10.85 17.79 -1.10 +v 9.99 17.79 -1.10 +v 9.99 17.79 0.88 +v 10.85 17.79 0.88 +v 10.85 18.64 1.63 +v 9.99 18.64 1.63 +v 9.99 18.64 3.61 +v 10.85 18.64 3.61 +v 10.85 17.79 1.63 +v 9.99 17.79 1.63 +v 9.99 17.79 3.61 +v 10.85 17.79 3.61 +v 10.85 18.64 4.35 +v 9.99 18.64 4.35 +v 9.99 18.64 6.33 +v 10.85 18.64 6.33 +v 10.85 17.79 4.35 +v 9.99 17.79 4.35 +v 9.99 17.79 6.33 +v 10.85 17.79 6.33 +v 11.17 6.95 -11.03 +v 11.17 6.95 -12.83 +v -11.17 6.95 -12.83 +v -11.17 6.95 -11.03 +v 11.17 -0.02 -12.83 +v -11.17 -0.02 -12.83 +v -19.96 4.66 -6.77 +v -19.60 5.22 -6.77 +v -19.60 2.88 -6.77 +v -19.96 2.92 -6.77 +v -20.24 2.96 -6.83 +v -20.24 2.71 -6.83 +v -20.24 2.71 -6.75 +v -20.24 2.96 -6.75 +v -19.60 5.63 -6.83 +v -20.15 4.82 -6.83 +v -20.15 4.82 -6.75 +v -19.60 5.63 -6.75 +v -18.96 2.71 -6.83 +v -18.96 2.96 -6.83 +v -18.96 2.96 -6.75 +v -18.96 2.71 -6.75 +v -19.60 2.63 -6.83 +v -19.05 2.71 -6.83 +v -19.05 2.71 -6.75 +v -19.60 2.63 -6.75 +v -20.15 2.71 -6.92 +v -20.15 2.96 -6.92 +v -19.96 2.92 -6.92 +v -19.60 5.22 -6.83 +v -19.96 4.66 -6.83 +v -19.05 2.96 -6.92 +v -19.05 2.71 -6.92 +v -19.24 2.94 -6.92 +v -19.60 2.63 -6.92 +v -19.60 2.88 -6.92 +v -19.24 4.66 -6.77 +v -19.24 2.94 -6.77 +v -19.05 4.82 -6.83 +v -19.05 4.82 -6.75 +v -20.15 2.71 -6.83 +v -20.15 2.71 -6.75 +v -19.24 4.66 -6.83 +v -19.96 2.92 -6.83 +v -19.24 2.94 -6.83 +v -19.60 2.88 -6.83 +v -19.05 2.96 -6.83 +v -19.05 2.96 -6.75 +v -20.15 2.96 -6.83 +v -20.15 2.96 -6.75 +v -20.24 2.96 -6.92 +v -20.24 2.71 -6.92 +v -18.96 2.71 -6.92 +v -18.96 2.96 -6.92 +v -6.81 4.66 -12.83 +v -6.45 5.22 -12.83 +v -6.45 2.88 -12.83 +v -6.81 2.92 -12.83 +v -7.09 2.96 -12.89 +v -7.09 2.71 -12.89 +v -7.09 2.71 -12.81 +v -7.09 2.96 -12.81 +v -6.45 5.63 -12.89 +v -6.99 4.82 -12.89 +v -6.99 4.82 -12.81 +v -6.45 5.63 -12.81 +v -5.81 2.71 -12.89 +v -5.81 2.96 -12.89 +v -5.81 2.96 -12.81 +v -5.81 2.71 -12.81 +v -6.45 2.63 -12.89 +v -5.90 2.71 -12.89 +v -5.90 2.71 -12.81 +v -6.45 2.63 -12.81 +v -6.99 2.71 -12.98 +v -6.99 2.96 -12.98 +v -6.81 2.92 -12.98 +v -6.45 5.22 -12.89 +v -6.81 4.66 -12.89 +v -5.90 2.96 -12.98 +v -5.90 2.71 -12.98 +v -6.09 2.94 -12.98 +v -6.45 2.63 -12.98 +v -6.45 2.88 -12.98 +v -6.09 4.66 -12.83 +v -6.09 2.94 -12.83 +v -5.90 4.82 -12.89 +v -5.90 4.82 -12.81 +v -6.99 2.71 -12.89 +v -6.99 2.71 -12.81 +v -6.09 4.66 -12.89 +v -6.81 2.92 -12.89 +v -6.09 2.94 -12.89 +v -6.45 2.88 -12.89 +v -5.90 2.96 -12.89 +v -5.90 2.96 -12.81 +v -6.99 2.96 -12.89 +v -6.99 2.96 -12.81 +v -7.09 2.96 -12.98 +v -7.09 2.71 -12.98 +v -5.81 2.71 -12.98 +v -5.81 2.96 -12.98 +v -4.17 10.56 -11.04 +v -3.81 11.12 -11.04 +v -3.81 8.77 -11.04 +v -4.17 8.82 -11.04 +v -4.45 8.86 -11.10 +v -4.45 8.61 -11.10 +v -4.45 8.61 -11.02 +v -4.45 8.86 -11.02 +v -3.81 11.53 -11.10 +v -4.36 10.72 -11.10 +v -4.36 10.72 -11.02 +v -3.81 11.53 -11.02 +v -3.17 8.61 -11.10 +v -3.17 8.86 -11.10 +v -3.17 8.86 -11.02 +v -3.17 8.61 -11.02 +v -3.81 8.52 -11.10 +v -3.27 8.61 -11.10 +v -3.27 8.61 -11.02 +v -3.81 8.52 -11.02 +v -4.36 8.61 -11.19 +v -4.36 8.86 -11.19 +v -4.17 8.82 -11.19 +v -3.81 11.12 -11.10 +v -4.17 10.56 -11.10 +v -3.27 8.86 -11.19 +v -3.27 8.61 -11.19 +v -3.45 8.83 -11.19 +v -3.81 8.52 -11.19 +v -3.81 8.77 -11.19 +v -3.45 10.56 -11.04 +v -3.45 8.83 -11.04 +v -3.27 10.72 -11.10 +v -3.27 10.72 -11.02 +v -4.36 8.61 -11.10 +v -4.36 8.61 -11.02 +v -3.45 10.56 -11.10 +v -4.17 8.82 -11.10 +v -3.45 8.83 -11.10 +v -3.81 8.77 -11.10 +v -3.27 8.86 -11.10 +v -3.27 8.86 -11.02 +v -4.36 8.86 -11.10 +v -4.36 8.86 -11.02 +v -4.45 8.86 -11.19 +v -4.45 8.61 -11.19 +v -3.17 8.61 -11.19 +v -3.17 8.86 -11.19 +v 3.09 10.56 -11.04 +v 3.44 11.12 -11.04 +v 3.44 8.77 -11.04 +v 3.09 8.82 -11.04 +v 2.81 8.86 -11.10 +v 2.81 8.61 -11.10 +v 2.81 8.61 -11.02 +v 2.81 8.86 -11.02 +v 3.44 11.53 -11.10 +v 2.90 10.72 -11.10 +v 2.90 10.72 -11.02 +v 3.44 11.53 -11.02 +v 4.08 8.61 -11.10 +v 4.08 8.86 -11.10 +v 4.08 8.86 -11.02 +v 4.08 8.61 -11.02 +v 3.44 8.52 -11.10 +v 3.99 8.61 -11.10 +v 3.99 8.61 -11.02 +v 3.44 8.52 -11.02 +v 2.90 8.61 -11.19 +v 2.90 8.86 -11.19 +v 3.09 8.82 -11.19 +v 3.44 11.12 -11.10 +v 3.09 10.56 -11.10 +v 3.99 8.86 -11.19 +v 3.99 8.61 -11.19 +v 3.80 8.83 -11.19 +v 3.44 8.52 -11.19 +v 3.44 8.77 -11.19 +v 3.80 10.56 -11.04 +v 3.80 8.83 -11.04 +v 3.99 10.72 -11.10 +v 3.99 10.72 -11.02 +v 2.90 8.61 -11.10 +v 2.90 8.61 -11.02 +v 3.80 10.56 -11.10 +v 3.09 8.82 -11.10 +v 3.80 8.83 -11.10 +v 3.44 8.77 -11.10 +v 3.99 8.86 -11.10 +v 3.99 8.86 -11.02 +v 2.90 8.86 -11.10 +v 2.90 8.86 -11.02 +v 2.81 8.86 -11.19 +v 2.81 8.61 -11.19 +v 4.08 8.61 -11.19 +v 4.08 8.86 -11.19 +v 5.72 4.66 -12.83 +v 6.08 5.22 -12.83 +v 6.08 2.88 -12.83 +v 5.72 2.92 -12.83 +v 5.44 2.96 -12.89 +v 5.44 2.71 -12.89 +v 5.44 2.71 -12.81 +v 5.44 2.96 -12.81 +v 6.08 5.63 -12.89 +v 5.54 4.82 -12.89 +v 5.54 4.82 -12.81 +v 6.08 5.63 -12.81 +v 6.72 2.71 -12.89 +v 6.72 2.96 -12.89 +v 6.72 2.96 -12.81 +v 6.72 2.71 -12.81 +v 6.08 2.63 -12.89 +v 6.63 2.71 -12.89 +v 6.63 2.71 -12.81 +v 6.08 2.63 -12.81 +v 5.54 2.71 -12.98 +v 5.54 2.96 -12.98 +v 5.72 2.92 -12.98 +v 6.08 5.22 -12.89 +v 5.72 4.66 -12.89 +v 6.63 2.96 -12.98 +v 6.63 2.71 -12.98 +v 6.44 2.94 -12.98 +v 6.08 2.63 -12.98 +v 6.08 2.88 -12.98 +v 6.44 4.66 -12.83 +v 6.44 2.94 -12.83 +v 6.63 4.82 -12.89 +v 6.63 4.82 -12.81 +v 5.54 2.71 -12.89 +v 5.54 2.71 -12.81 +v 6.44 4.66 -12.89 +v 5.72 2.92 -12.89 +v 6.44 2.94 -12.89 +v 6.08 2.88 -12.89 +v 6.63 2.96 -12.89 +v 6.63 2.96 -12.81 +v 5.54 2.96 -12.89 +v 5.54 2.96 -12.81 +v 5.44 2.96 -12.98 +v 5.44 2.71 -12.98 +v 6.72 2.71 -12.98 +v 6.72 2.96 -12.98 +v -6.30 20.76 -3.63 +v -5.94 21.32 -3.63 +v -5.94 18.98 -3.63 +v -6.30 19.02 -3.63 +v -6.58 19.06 -3.69 +v -6.58 18.81 -3.69 +v -6.58 18.81 -3.60 +v -6.58 19.06 -3.60 +v -5.94 21.73 -3.69 +v -6.49 20.92 -3.69 +v -6.49 20.92 -3.60 +v -5.94 21.73 -3.60 +v -5.30 18.81 -3.69 +v -5.30 19.06 -3.69 +v -5.30 19.06 -3.60 +v -5.30 18.81 -3.60 +v -5.94 18.73 -3.69 +v -5.40 18.81 -3.69 +v -5.40 18.81 -3.60 +v -5.94 18.73 -3.60 +v -6.49 18.81 -3.78 +v -6.49 19.06 -3.78 +v -6.30 19.02 -3.78 +v -5.94 21.32 -3.69 +v -6.30 20.76 -3.69 +v -5.40 19.06 -3.78 +v -5.40 18.81 -3.78 +v -5.58 19.04 -3.78 +v -5.94 18.73 -3.78 +v -5.94 18.98 -3.78 +v -5.58 20.76 -3.63 +v -5.58 19.04 -3.63 +v -5.40 20.92 -3.69 +v -5.40 20.92 -3.60 +v -6.49 18.81 -3.69 +v -6.49 18.81 -3.60 +v -5.58 20.76 -3.69 +v -6.30 19.02 -3.69 +v -5.58 19.04 -3.69 +v -5.94 18.98 -3.69 +v -5.40 19.06 -3.69 +v -5.40 19.06 -3.60 +v -6.49 19.06 -3.69 +v -6.49 19.06 -3.60 +v -6.58 19.06 -3.78 +v -6.58 18.81 -3.78 +v -5.30 18.81 -3.78 +v -5.30 19.06 -3.78 +v 5.89 20.76 -3.63 +v 6.25 21.32 -3.63 +v 6.25 18.98 -3.63 +v 5.89 19.02 -3.63 +v 5.61 19.06 -3.69 +v 5.61 18.81 -3.69 +v 5.61 18.81 -3.60 +v 5.61 19.06 -3.60 +v 6.25 21.73 -3.69 +v 5.70 20.92 -3.69 +v 5.70 20.92 -3.60 +v 6.25 21.73 -3.60 +v 6.89 18.81 -3.69 +v 6.89 19.06 -3.69 +v 6.89 19.06 -3.60 +v 6.89 18.81 -3.60 +v 6.25 18.73 -3.69 +v 6.79 18.81 -3.69 +v 6.79 18.81 -3.60 +v 6.25 18.73 -3.60 +v 5.70 18.81 -3.78 +v 5.70 19.06 -3.78 +v 5.89 19.02 -3.78 +v 6.25 21.32 -3.69 +v 5.89 20.76 -3.69 +v 6.79 19.06 -3.78 +v 6.79 18.81 -3.78 +v 6.61 19.04 -3.78 +v 6.25 18.73 -3.78 +v 6.25 18.98 -3.78 +v 6.61 20.76 -3.63 +v 6.61 19.04 -3.63 +v 6.79 20.92 -3.69 +v 6.79 20.92 -3.60 +v 5.70 18.81 -3.69 +v 5.70 18.81 -3.60 +v 6.61 20.76 -3.69 +v 5.89 19.02 -3.69 +v 6.61 19.04 -3.69 +v 6.25 18.98 -3.69 +v 6.79 19.06 -3.69 +v 6.79 19.06 -3.60 +v 5.70 19.06 -3.69 +v 5.70 19.06 -3.60 +v 5.61 19.06 -3.78 +v 5.61 18.81 -3.78 +v 6.89 18.81 -3.78 +v 6.89 19.06 -3.78 +v -8.76 20.76 0.36 +v -8.76 21.32 -0.00 +v -8.76 18.98 -0.00 +v -8.76 19.02 0.36 +v -8.82 19.06 0.64 +v -8.82 18.81 0.64 +v -8.74 18.81 0.64 +v -8.74 19.06 0.64 +v -8.82 21.73 -0.00 +v -8.82 20.92 0.55 +v -8.74 20.92 0.55 +v -8.74 21.73 -0.00 +v -8.82 18.81 -0.64 +v -8.82 19.06 -0.64 +v -8.74 19.06 -0.64 +v -8.74 18.81 -0.64 +v -8.82 18.73 -0.00 +v -8.82 18.81 -0.55 +v -8.74 18.81 -0.55 +v -8.74 18.73 -0.00 +v -8.91 18.81 0.55 +v -8.91 19.06 0.55 +v -8.91 19.02 0.36 +v -8.82 21.32 -0.00 +v -8.82 20.76 0.36 +v -8.91 19.06 -0.55 +v -8.91 18.81 -0.55 +v -8.91 19.04 -0.36 +v -8.91 18.73 -0.00 +v -8.91 18.98 -0.00 +v -8.76 20.76 -0.36 +v -8.76 19.04 -0.36 +v -8.82 20.92 -0.55 +v -8.74 20.92 -0.55 +v -8.82 18.81 0.55 +v -8.74 18.81 0.55 +v -8.82 20.76 -0.36 +v -8.82 19.02 0.36 +v -8.82 19.04 -0.36 +v -8.82 18.98 -0.00 +v -8.82 19.06 -0.55 +v -8.74 19.06 -0.55 +v -8.82 19.06 0.55 +v -8.74 19.06 0.55 +v -8.91 19.06 0.64 +v -8.91 18.81 0.64 +v -8.91 18.81 -0.64 +v -8.91 19.06 -0.64 +v -23.42 4.66 -0.35 +v -23.42 2.92 -0.35 +v -23.42 2.88 0.01 +v -23.42 5.22 0.01 +v -23.48 2.96 -0.63 +v -23.40 2.96 -0.63 +v -23.40 2.71 -0.63 +v -23.48 2.71 -0.63 +v -23.48 5.63 0.01 +v -23.40 5.63 0.01 +v -23.40 4.82 -0.54 +v -23.48 4.82 -0.54 +v -23.48 2.71 0.65 +v -23.40 2.71 0.65 +v -23.40 2.96 0.65 +v -23.48 2.96 0.65 +v -23.48 2.63 0.01 +v -23.40 2.63 0.01 +v -23.40 2.71 0.55 +v -23.48 2.71 0.55 +v -23.57 2.71 -0.54 +v -23.57 2.92 -0.35 +v -23.57 2.96 -0.54 +v -23.48 5.22 0.01 +v -23.48 4.66 -0.35 +v -23.57 2.96 0.55 +v -23.57 2.94 0.37 +v -23.57 2.71 0.55 +v -23.57 2.63 0.01 +v -23.57 2.88 0.01 +v -23.42 4.66 0.37 +v -23.42 2.94 0.37 +v -23.48 4.82 0.55 +v -23.40 4.82 0.55 +v -23.48 2.71 -0.54 +v -23.40 2.71 -0.54 +v -23.48 4.66 0.37 +v -23.48 2.92 -0.35 +v -23.48 2.94 0.37 +v -23.48 2.88 0.01 +v -23.48 2.96 0.55 +v -23.40 2.96 0.55 +v -23.40 2.96 -0.54 +v -23.48 2.96 -0.54 +v -23.57 2.71 -0.63 +v -23.57 2.96 -0.63 +v -23.57 2.96 0.65 +v -23.57 2.71 0.65 +v -19.96 4.66 6.78 +v -19.96 2.92 6.78 +v -19.60 2.88 6.78 +v -19.60 5.22 6.78 +v -20.24 2.96 6.85 +v -20.24 2.96 6.76 +v -20.24 2.71 6.76 +v -20.24 2.71 6.85 +v -19.60 5.63 6.85 +v -19.60 5.63 6.76 +v -20.15 4.82 6.76 +v -20.15 4.82 6.85 +v -18.96 2.71 6.85 +v -18.96 2.71 6.76 +v -18.96 2.96 6.76 +v -18.96 2.96 6.85 +v -19.60 2.63 6.85 +v -19.60 2.63 6.76 +v -19.05 2.71 6.76 +v -19.05 2.71 6.85 +v -20.15 2.71 6.94 +v -19.96 2.92 6.94 +v -20.15 2.96 6.94 +v -19.60 5.22 6.85 +v -19.96 4.66 6.85 +v -19.05 2.96 6.94 +v -19.24 2.94 6.94 +v -19.05 2.71 6.94 +v -19.60 2.63 6.94 +v -19.60 2.88 6.94 +v -19.24 4.66 6.78 +v -19.24 2.94 6.78 +v -19.05 4.82 6.85 +v -19.05 4.82 6.76 +v -20.15 2.71 6.85 +v -20.15 2.71 6.76 +v -19.24 4.66 6.85 +v -19.96 2.92 6.85 +v -19.24 2.94 6.85 +v -19.60 2.88 6.85 +v -19.05 2.96 6.85 +v -19.05 2.96 6.76 +v -20.15 2.96 6.76 +v -20.15 2.96 6.85 +v -20.24 2.71 6.94 +v -20.24 2.96 6.94 +v -18.96 2.96 6.94 +v -18.96 2.71 6.94 +v -5.42 9.62 11.04 +v -5.42 7.88 11.04 +v -5.06 7.83 11.04 +v -5.06 10.18 11.04 +v -5.70 7.92 11.10 +v -5.70 7.92 11.01 +v -5.70 7.67 11.01 +v -5.70 7.67 11.10 +v -5.06 10.59 11.10 +v -5.06 10.59 11.01 +v -5.61 9.78 11.01 +v -5.61 9.78 11.10 +v -4.43 7.67 11.10 +v -4.43 7.67 11.01 +v -4.43 7.92 11.01 +v -4.43 7.92 11.10 +v -5.06 7.58 11.10 +v -5.06 7.58 11.01 +v -4.52 7.67 11.01 +v -4.52 7.67 11.10 +v -5.61 7.67 11.19 +v -5.42 7.88 11.19 +v -5.61 7.92 11.19 +v -5.06 10.18 11.10 +v -5.42 9.62 11.10 +v -4.52 7.92 11.19 +v -4.71 7.89 11.19 +v -4.52 7.67 11.19 +v -5.06 7.58 11.19 +v -5.06 7.83 11.19 +v -4.71 9.62 11.04 +v -4.71 7.89 11.04 +v -4.52 9.78 11.10 +v -4.52 9.78 11.01 +v -5.61 7.67 11.10 +v -5.61 7.67 11.01 +v -4.71 9.62 11.10 +v -5.42 7.88 11.10 +v -4.71 7.89 11.10 +v -5.06 7.83 11.10 +v -4.52 7.92 11.10 +v -4.52 7.92 11.01 +v -5.61 7.92 11.01 +v -5.61 7.92 11.10 +v -5.70 7.67 11.19 +v -5.70 7.92 11.19 +v -4.43 7.92 11.19 +v -4.43 7.67 11.19 +v 3.43 9.62 11.04 +v 3.43 7.88 11.04 +v 3.79 7.83 11.04 +v 3.79 10.18 11.04 +v 3.15 7.92 11.10 +v 3.15 7.92 11.01 +v 3.15 7.67 11.01 +v 3.15 7.67 11.10 +v 3.79 10.59 11.10 +v 3.79 10.59 11.01 +v 3.24 9.78 11.01 +v 3.24 9.78 11.10 +v 4.43 7.67 11.10 +v 4.43 7.67 11.01 +v 4.43 7.92 11.01 +v 4.43 7.92 11.10 +v 3.79 7.58 11.10 +v 3.79 7.58 11.01 +v 4.33 7.67 11.01 +v 4.33 7.67 11.10 +v 3.24 7.67 11.19 +v 3.43 7.88 11.19 +v 3.24 7.92 11.19 +v 3.79 10.18 11.10 +v 3.43 9.62 11.10 +v 4.33 7.92 11.19 +v 4.15 7.89 11.19 +v 4.33 7.67 11.19 +v 3.79 7.58 11.19 +v 3.79 7.83 11.19 +v 4.15 9.62 11.04 +v 4.15 7.89 11.04 +v 4.33 9.78 11.10 +v 4.33 9.78 11.01 +v 3.24 7.67 11.10 +v 3.24 7.67 11.01 +v 4.15 9.62 11.10 +v 3.43 7.88 11.10 +v 4.15 7.89 11.10 +v 3.79 7.83 11.10 +v 4.33 7.92 11.10 +v 4.33 7.92 11.01 +v 3.24 7.92 11.01 +v 3.24 7.92 11.10 +v 3.15 7.67 11.19 +v 3.15 7.92 11.19 +v 4.43 7.92 11.19 +v 4.43 7.67 11.19 +v -0.84 4.66 11.04 +v -0.84 2.92 11.04 +v -0.48 2.88 11.04 +v -0.48 5.22 11.04 +v -1.12 2.96 11.10 +v -1.12 2.96 11.01 +v -1.12 2.71 11.01 +v -1.12 2.71 11.10 +v -0.48 5.63 11.10 +v -0.48 5.63 11.01 +v -1.03 4.82 11.01 +v -1.03 4.82 11.10 +v 0.15 2.71 11.10 +v 0.15 2.71 11.01 +v 0.15 2.96 11.01 +v 0.15 2.96 11.10 +v -0.48 2.63 11.10 +v -0.48 2.63 11.01 +v 0.06 2.71 11.01 +v 0.06 2.71 11.10 +v -1.03 2.71 11.19 +v -0.84 2.92 11.19 +v -1.03 2.96 11.19 +v -0.48 5.22 11.10 +v -0.84 4.66 11.10 +v 0.06 2.96 11.19 +v -0.13 2.94 11.19 +v 0.06 2.71 11.19 +v -0.48 2.63 11.19 +v -0.48 2.88 11.19 +v -0.13 4.66 11.04 +v -0.13 2.94 11.04 +v 0.06 4.82 11.10 +v 0.06 4.82 11.01 +v -1.03 2.71 11.10 +v -1.03 2.71 11.01 +v -0.13 4.66 11.10 +v -0.84 2.92 11.10 +v -0.13 2.94 11.10 +v -0.48 2.88 11.10 +v 0.06 2.96 11.10 +v 0.06 2.96 11.01 +v -1.03 2.96 11.01 +v -1.03 2.96 11.10 +v -1.12 2.71 11.19 +v -1.12 2.96 11.19 +v 0.15 2.96 11.19 +v 0.15 2.71 11.19 +v 0.43 20.76 3.64 +v 0.07 21.32 3.64 +v 0.07 18.98 3.64 +v 0.43 19.02 3.64 +v 0.71 19.06 3.70 +v 0.71 18.81 3.70 +v 0.71 18.81 3.61 +v 0.71 19.06 3.61 +v 0.07 21.73 3.70 +v 0.62 20.92 3.70 +v 0.62 20.92 3.61 +v 0.07 21.73 3.61 +v -0.57 18.81 3.70 +v -0.57 19.06 3.70 +v -0.57 19.06 3.61 +v -0.57 18.81 3.61 +v 0.07 18.73 3.70 +v -0.47 18.81 3.70 +v -0.47 18.81 3.61 +v 0.07 18.73 3.61 +v 0.62 18.81 3.79 +v 0.62 19.06 3.79 +v 0.43 19.02 3.79 +v 0.07 21.32 3.70 +v 0.43 20.76 3.70 +v -0.47 19.06 3.79 +v -0.47 18.81 3.79 +v -0.29 19.04 3.79 +v 0.07 18.73 3.79 +v 0.07 18.98 3.79 +v -0.29 20.76 3.64 +v -0.29 19.04 3.64 +v -0.47 20.92 3.70 +v -0.47 20.92 3.61 +v 0.62 18.81 3.70 +v 0.62 18.81 3.61 +v -0.29 20.76 3.70 +v 0.43 19.02 3.70 +v -0.29 19.04 3.70 +v 0.07 18.98 3.70 +v -0.47 19.06 3.70 +v -0.47 19.06 3.61 +v 0.62 19.06 3.70 +v 0.62 19.06 3.61 +v 0.71 19.06 3.79 +v 0.71 18.81 3.79 +v -0.57 18.81 3.79 +v -0.57 19.06 3.79 +v 6.58 20.76 3.64 +v 6.22 21.32 3.64 +v 6.22 18.98 3.64 +v 6.58 19.02 3.64 +v 6.86 19.06 3.70 +v 6.86 18.81 3.70 +v 6.86 18.81 3.61 +v 6.86 19.06 3.61 +v 6.22 21.73 3.70 +v 6.76 20.92 3.70 +v 6.76 20.92 3.61 +v 6.22 21.73 3.61 +v 5.58 18.81 3.70 +v 5.58 19.06 3.70 +v 5.58 19.06 3.61 +v 5.58 18.81 3.61 +v 6.22 18.73 3.70 +v 5.67 18.81 3.70 +v 5.67 18.81 3.61 +v 6.22 18.73 3.61 +v 6.76 18.81 3.79 +v 6.76 19.06 3.79 +v 6.58 19.02 3.79 +v 6.22 21.32 3.70 +v 6.58 20.76 3.70 +v 5.67 19.06 3.79 +v 5.67 18.81 3.79 +v 5.86 19.04 3.79 +v 6.22 18.73 3.79 +v 6.22 18.98 3.79 +v 5.86 20.76 3.64 +v 5.86 19.04 3.64 +v 5.67 20.92 3.70 +v 5.67 20.92 3.61 +v 6.76 18.81 3.70 +v 6.76 18.81 3.61 +v 5.86 20.76 3.70 +v 6.58 19.02 3.70 +v 5.86 19.04 3.70 +v 6.22 18.98 3.70 +v 5.67 19.06 3.70 +v 5.67 19.06 3.61 +v 6.76 19.06 3.70 +v 6.76 19.06 3.61 +v 6.86 19.06 3.79 +v 6.86 18.81 3.79 +v 5.58 18.81 3.79 +v 5.58 19.06 3.79 +v 12.89 4.66 -3.98 +v 12.89 5.22 -3.62 +v 12.89 2.88 -3.62 +v 12.89 2.92 -3.98 +v 12.96 2.96 -4.26 +v 12.96 2.71 -4.26 +v 12.87 2.71 -4.26 +v 12.87 2.96 -4.26 +v 12.96 5.63 -3.62 +v 12.96 4.82 -4.17 +v 12.87 4.82 -4.17 +v 12.87 5.63 -3.62 +v 12.96 2.71 -2.98 +v 12.96 2.96 -2.98 +v 12.87 2.96 -2.98 +v 12.87 2.71 -2.98 +v 12.96 2.63 -3.62 +v 12.96 2.71 -3.08 +v 12.87 2.71 -3.08 +v 12.87 2.63 -3.62 +v 13.05 2.71 -4.17 +v 13.05 2.96 -4.17 +v 13.05 2.92 -3.98 +v 12.96 5.22 -3.62 +v 12.96 4.66 -3.98 +v 13.05 2.96 -3.08 +v 13.05 2.71 -3.08 +v 13.05 2.94 -3.26 +v 13.05 2.63 -3.62 +v 13.05 2.88 -3.62 +v 12.89 4.66 -3.26 +v 12.89 2.94 -3.26 +v 12.96 4.82 -3.08 +v 12.87 4.82 -3.08 +v 12.96 2.71 -4.17 +v 12.87 2.71 -4.17 +v 12.96 4.66 -3.26 +v 12.96 2.92 -3.98 +v 12.96 2.94 -3.26 +v 12.96 2.88 -3.62 +v 12.96 2.96 -3.08 +v 12.87 2.96 -3.08 +v 12.96 2.96 -4.17 +v 12.87 2.96 -4.17 +v 13.05 2.96 -4.26 +v 13.05 2.71 -4.26 +v 13.05 2.71 -2.98 +v 13.05 2.96 -2.98 +v 12.89 4.66 3.26 +v 12.89 5.22 3.62 +v 12.89 2.88 3.62 +v 12.89 2.92 3.26 +v 12.96 2.96 2.98 +v 12.96 2.71 2.98 +v 12.87 2.71 2.98 +v 12.87 2.96 2.98 +v 12.96 5.63 3.62 +v 12.96 4.82 3.08 +v 12.87 4.82 3.08 +v 12.87 5.63 3.62 +v 12.96 2.71 4.26 +v 12.96 2.96 4.26 +v 12.87 2.96 4.26 +v 12.87 2.71 4.26 +v 12.96 2.63 3.62 +v 12.96 2.71 4.17 +v 12.87 2.71 4.17 +v 12.87 2.63 3.62 +v 13.05 2.71 3.08 +v 13.05 2.96 3.08 +v 13.05 2.92 3.26 +v 12.96 5.22 3.62 +v 12.96 4.66 3.26 +v 13.05 2.96 4.17 +v 13.05 2.71 4.17 +v 13.05 2.94 3.98 +v 13.05 2.63 3.62 +v 13.05 2.88 3.62 +v 12.89 4.66 3.98 +v 12.89 2.94 3.98 +v 12.96 4.82 4.17 +v 12.87 4.82 4.17 +v 12.96 2.71 3.08 +v 12.87 2.71 3.08 +v 12.96 4.66 3.98 +v 12.96 2.92 3.26 +v 12.96 2.94 3.98 +v 12.96 2.88 3.62 +v 12.96 2.96 4.17 +v 12.87 2.96 4.17 +v 12.96 2.96 3.08 +v 12.87 2.96 3.08 +v 13.05 2.96 2.98 +v 13.05 2.71 2.98 +v 13.05 2.71 4.26 +v 13.05 2.96 4.26 +v 8.75 20.76 0.36 +v 8.75 19.02 0.36 +v 8.75 18.98 -0.00 +v 8.75 21.32 -0.00 +v 8.81 19.06 0.64 +v 8.73 19.06 0.64 +v 8.73 18.81 0.64 +v 8.81 18.81 0.64 +v 8.81 21.73 -0.00 +v 8.73 21.73 -0.00 +v 8.73 20.92 0.55 +v 8.81 20.92 0.55 +v 8.81 18.81 -0.64 +v 8.73 18.81 -0.64 +v 8.73 19.06 -0.64 +v 8.81 19.06 -0.64 +v 8.81 18.73 -0.00 +v 8.73 18.73 -0.00 +v 8.73 18.81 -0.55 +v 8.81 18.81 -0.55 +v 8.90 18.81 0.55 +v 8.90 19.02 0.36 +v 8.90 19.06 0.55 +v 8.81 21.32 -0.00 +v 8.81 20.76 0.36 +v 8.90 19.06 -0.55 +v 8.90 19.04 -0.36 +v 8.90 18.81 -0.55 +v 8.90 18.73 -0.00 +v 8.90 18.98 -0.00 +v 8.75 20.76 -0.36 +v 8.75 19.04 -0.36 +v 8.81 20.92 -0.55 +v 8.73 20.92 -0.55 +v 8.81 18.81 0.55 +v 8.73 18.81 0.55 +v 8.81 20.76 -0.36 +v 8.81 19.02 0.36 +v 8.81 19.04 -0.36 +v 8.81 18.98 -0.00 +v 8.81 19.06 -0.55 +v 8.73 19.06 -0.55 +v 8.73 19.06 0.55 +v 8.81 19.06 0.55 +v 8.90 18.81 0.64 +v 8.90 19.06 0.64 +v 8.90 19.06 -0.64 +v 8.90 18.81 -0.64 +v -5.91 20.76 3.64 +v -6.27 21.32 3.64 +v -6.27 18.98 3.64 +v -5.91 19.02 3.64 +v -5.63 19.06 3.70 +v -5.63 18.81 3.70 +v -5.63 18.81 3.61 +v -5.63 19.06 3.61 +v -6.27 21.73 3.70 +v -5.73 20.92 3.70 +v -5.73 20.92 3.61 +v -6.27 21.73 3.61 +v -6.91 18.81 3.70 +v -6.91 19.06 3.70 +v -6.91 19.06 3.61 +v -6.91 18.81 3.61 +v -6.27 18.73 3.70 +v -6.82 18.81 3.70 +v -6.82 18.81 3.61 +v -6.27 18.73 3.61 +v -5.73 18.81 3.79 +v -5.73 19.06 3.79 +v -5.91 19.02 3.79 +v -6.27 21.32 3.70 +v -5.91 20.76 3.70 +v -6.82 19.06 3.79 +v -6.82 18.81 3.79 +v -6.63 19.04 3.79 +v -6.27 18.73 3.79 +v -6.27 18.98 3.79 +v -6.63 20.76 3.64 +v -6.63 19.04 3.64 +v -6.82 20.92 3.70 +v -6.82 20.92 3.61 +v -5.73 18.81 3.70 +v -5.73 18.81 3.61 +v -6.63 20.76 3.70 +v -5.91 19.02 3.70 +v -6.63 19.04 3.70 +v -6.27 18.98 3.70 +v -6.82 19.06 3.70 +v -6.82 19.06 3.61 +v -5.73 19.06 3.70 +v -5.73 19.06 3.61 +v -5.63 19.06 3.79 +v -5.63 18.81 3.79 +v -6.91 18.81 3.79 +v -6.91 19.06 3.79 +v 1.22 3.89 -13.04 +v 1.22 0.00 -13.04 +v 0.00 0.00 -13.04 +v 0.00 4.45 -13.04 +v -2.44 3.02 -13.04 +v -1.22 3.89 -13.04 +v -1.22 0.00 -13.04 +v -2.44 0.00 -13.04 +v 2.44 3.02 -13.04 +v 2.44 0.00 -13.04 +v 2.76 0.00 -12.61 +v 2.76 0.00 -13.28 +v 2.72 2.63 -13.28 +v 2.72 2.63 -12.61 +v 2.32 0.00 -13.28 +v 2.28 2.21 -13.28 +v 2.32 0.00 -12.61 +v 2.28 2.21 -12.61 +v 1.57 4.51 -13.28 +v 1.57 4.51 -12.61 +v 1.32 3.79 -13.28 +v 1.32 3.79 -12.61 +v 0.00 5.20 -13.28 +v 0.00 5.20 -12.61 +v 0.00 4.45 -13.28 +v 0.00 4.45 -12.61 +v -1.57 4.51 -13.28 +v -1.57 4.51 -12.61 +v -1.32 3.79 -13.28 +v -1.32 3.79 -12.61 +v -2.72 2.63 -13.28 +v -2.72 2.63 -12.61 +v -2.28 2.21 -13.28 +v -2.28 2.21 -12.61 +v -2.76 0.00 -13.28 +v -2.76 0.00 -12.61 +v -2.32 0.00 -13.28 +v -2.32 0.00 -12.61 +v -23.02 0.02 -7.19 +v -23.81 0.02 -7.26 +v -23.50 3.76 -6.94 +v -22.95 3.76 -6.89 +v -23.10 0.02 -6.35 +v -23.01 3.76 -6.25 +v -23.88 0.02 -6.42 +v -23.56 3.76 -6.30 +v -23.00 6.77 -7.20 +v -23.83 6.77 -7.27 +v -23.08 7.23 -6.33 +v -23.90 7.23 -6.41 +v -23.14 6.61 -6.66 +v -23.14 6.39 0.01 +v -23.82 6.39 0.01 +v -23.82 6.61 -6.66 +v -23.82 7.03 0.01 +v -23.82 7.24 -6.66 +v -23.14 7.03 0.01 +v -23.14 7.24 -6.66 +v -23.14 6.61 6.68 +v -23.82 6.61 6.68 +v -23.82 7.24 6.68 +v -23.14 7.24 6.68 +v -10.64 6.61 -6.65 +v -17.31 6.39 -6.65 +v -17.31 6.39 -7.33 +v -10.64 6.61 -7.33 +v -17.31 7.03 -7.33 +v -10.64 7.24 -7.33 +v -17.31 7.03 -6.65 +v -10.64 7.24 -6.65 +v -23.99 6.61 -6.65 +v -23.99 6.61 -7.33 +v -23.99 7.24 -7.33 +v -23.99 7.24 -6.65 +v -23.02 0.02 7.20 +v -22.95 3.76 6.91 +v -23.50 3.76 6.95 +v -23.81 0.02 7.27 +v -23.10 0.02 6.37 +v -23.01 3.76 6.27 +v -23.88 0.02 6.44 +v -23.56 3.76 6.32 +v -23.00 6.77 7.22 +v -23.83 6.77 7.29 +v -23.08 7.23 6.35 +v -23.90 7.23 6.42 +v -10.64 6.61 6.68 +v -10.64 6.61 7.36 +v -17.31 6.39 7.36 +v -17.31 6.39 6.68 +v -10.64 7.24 7.36 +v -17.31 7.03 7.36 +v -10.64 7.24 6.68 +v -17.31 7.03 6.68 +v -23.99 6.61 7.36 +v -23.99 6.61 6.68 +v -23.99 7.24 7.36 +v -23.99 7.24 6.68 +v 8.74 6.44 10.70 +v 8.74 6.44 11.59 +v 0.00 6.16 11.59 +v 0.00 6.16 10.70 +v 8.74 7.27 11.59 +v 0.00 6.98 11.59 +v 8.74 7.27 10.70 +v 0.00 6.98 10.70 +v -8.74 6.44 11.59 +v -8.74 6.44 10.70 +v -8.74 7.27 11.59 +v -8.74 7.27 10.70 +v 8.74 17.79 -0.00 +v 8.74 27.72 -0.00 +v 8.74 23.62 3.62 +v 0.00 17.79 -3.62 +v 0.00 23.02 -3.62 +v 8.74 23.62 -3.62 +v -8.74 17.79 -0.00 +v -8.74 27.60 -0.00 +v -8.74 23.62 -3.62 +v 0.00 17.79 3.62 +v 0.00 23.02 3.62 +v -8.74 23.62 3.62 +v 8.34 17.58 -3.11 +v 8.50 20.48 -3.15 +v 8.50 20.48 -3.73 +v 8.34 17.58 -3.92 +v 8.34 24.35 -3.11 +v 8.34 23.76 -3.83 +v 9.14 17.58 -3.11 +v 9.09 20.48 -3.15 +v 9.14 24.35 -3.11 +v 9.14 17.58 -3.92 +v 9.09 20.48 -3.73 +v 9.14 23.76 -3.83 +v -0.81 20.18 -3.56 +v -0.81 17.74 -3.56 +v -0.81 17.74 -3.74 +v -0.81 20.18 -3.74 +v -0.95 20.13 -3.74 +v -0.95 17.74 -3.74 +v -0.95 17.74 -3.56 +v -0.95 20.13 -3.56 +v -1.04 20.10 -3.76 +v -1.04 20.10 -3.58 +v -1.04 20.32 -3.58 +v -1.04 20.32 -3.76 +v 1.04 20.32 -3.58 +v 1.04 20.10 -3.58 +v 1.04 20.10 -3.76 +v 1.04 20.32 -3.76 +v -0.39 20.29 -3.76 +v -0.39 20.29 -3.58 +v -0.39 20.51 -3.76 +v -0.39 20.51 -3.58 +v 0.94 20.15 -3.56 +v 0.94 17.74 -3.56 +v 0.94 17.74 -3.74 +v 0.94 20.15 -3.74 +v 0.80 17.74 -3.74 +v 0.80 20.19 -3.74 +v 0.80 17.74 -3.56 +v 0.80 20.19 -3.56 +v 0.39 20.29 -3.76 +v 0.39 20.29 -3.58 +v 0.39 20.51 -3.76 +v 0.39 20.51 -3.58 +v 0.00 20.34 -3.76 +v 0.00 20.34 -3.58 +v 0.00 20.56 -3.76 +v 0.00 20.56 -3.58 +v -0.01 17.69 -4.00 +v 0.78 17.69 -4.00 +v 0.78 17.66 -3.95 +v -0.01 17.66 -3.95 +v -0.01 17.76 -4.01 +v 0.78 17.76 -4.01 +v 0.78 17.75 -3.95 +v 0.78 17.85 -3.95 +v 0.78 17.85 -3.64 +v 0.78 17.75 -3.64 +v 0.78 17.82 -4.00 +v 0.78 17.66 -3.64 +v -0.01 17.85 -3.95 +v -0.01 17.85 -3.64 +v -0.01 17.82 -4.00 +v -0.80 17.66 -3.95 +v -0.80 17.69 -4.00 +v -0.80 17.76 -4.01 +v -0.80 17.85 -3.64 +v -0.80 17.85 -3.95 +v -0.80 17.75 -3.95 +v -0.80 17.75 -3.64 +v -0.80 17.82 -4.00 +v -0.80 17.66 -3.64 +v 0.86 20.19 -3.66 +v 0.86 17.72 -3.66 +v 0.02 17.72 -3.66 +v 0.02 20.45 -3.66 +v -0.82 20.19 -3.66 +v -0.82 17.72 -3.66 +v -9.14 17.58 -3.11 +v -8.97 20.48 -3.15 +v -8.97 20.48 -3.73 +v -9.14 17.58 -3.92 +v -9.14 24.35 -3.11 +v -9.14 23.76 -3.83 +v -8.34 17.58 -3.11 +v -8.39 20.48 -3.15 +v -8.34 24.35 -3.11 +v -8.34 17.58 -3.92 +v -8.39 20.48 -3.73 +v -8.34 23.76 -3.83 +v -9.14 17.58 3.11 +v -9.14 17.58 3.92 +v -8.97 20.48 3.73 +v -8.97 20.48 3.15 +v -9.14 23.76 3.83 +v -9.14 24.35 3.11 +v -8.34 17.58 3.11 +v -8.39 20.48 3.15 +v -8.34 24.35 3.11 +v -8.39 20.48 3.73 +v -8.34 17.58 3.92 +v -8.34 23.76 3.83 +v 8.34 17.58 3.11 +v 8.34 17.58 3.92 +v 8.50 20.48 3.73 +v 8.50 20.48 3.15 +v 8.34 23.76 3.83 +v 8.34 24.35 3.11 +v 9.14 17.58 3.11 +v 9.09 20.48 3.15 +v 9.14 24.35 3.11 +v 9.09 20.48 3.73 +v 9.14 17.58 3.92 +v 9.14 23.76 3.83 +v 12.59 6.44 -8.74 +v 13.48 6.44 -8.74 +v 13.48 6.16 -0.00 +v 12.59 6.16 -0.00 +v 13.48 7.27 -8.74 +v 13.48 6.98 -0.00 +v 12.59 7.27 -8.74 +v 12.59 6.98 -0.00 +v 13.48 6.44 8.74 +v 12.59 6.44 8.74 +v 13.48 7.27 8.74 +v 12.59 7.27 8.74 +v -9.92 18.64 4.67 +v -10.78 18.64 4.67 +v -10.78 18.64 6.66 +v -9.92 18.64 6.66 +v -9.92 17.79 4.67 +v -10.78 17.79 4.67 +v -10.78 17.79 6.66 +v -9.92 17.79 6.66 +v -12.40 7.80 6.90 +v -12.40 7.80 6.03 +v -14.38 7.80 6.03 +v -14.38 7.80 6.90 +v -12.40 6.95 6.90 +v -12.40 6.95 6.03 +v -14.38 6.95 6.03 +v -14.38 6.95 6.90 +v -12.40 7.80 -5.99 +v -12.40 7.80 -6.86 +v -14.38 7.80 -6.86 +v -14.38 7.80 -5.99 +v -12.40 6.95 -5.99 +v -12.40 6.95 -6.86 +v -14.38 6.95 -6.86 +v -14.38 6.95 -5.99 +v -16.55 0.00 12.98 +v -16.55 7.76 12.98 +v -17.17 7.76 10.68 +v -17.17 0.00 10.68 +v -14.87 0.00 14.66 +v -14.87 7.76 14.66 +v -12.57 0.00 15.28 +v -12.57 7.76 15.28 +v -10.27 0.00 14.66 +v -10.27 7.76 14.66 +v -8.58 0.00 12.98 +v -8.58 7.76 12.98 +v -7.97 0.00 10.68 +v -7.97 7.76 10.68 +v -8.58 0.00 8.38 +v -8.58 7.76 8.38 +v -10.27 0.00 6.69 +v -10.27 7.76 6.69 +v -12.57 0.00 6.08 +v -12.57 7.76 6.08 +v -14.87 0.00 6.69 +v -14.87 7.76 6.69 +v -16.55 0.00 8.38 +v -16.55 7.76 8.38 +v -16.78 7.76 13.11 +v -16.78 8.57 13.11 +v -17.43 8.57 10.68 +v -17.43 7.76 10.68 +v -15.00 7.76 14.89 +v -15.00 8.57 14.89 +v -12.57 7.76 15.54 +v -12.57 8.57 15.54 +v -10.13 7.76 14.89 +v -10.13 8.57 14.89 +v -8.35 7.76 13.11 +v -8.35 8.57 13.11 +v -7.70 7.76 10.68 +v -7.70 8.57 10.68 +v -8.35 7.76 8.24 +v -8.35 8.57 8.24 +v -10.13 7.76 6.46 +v -10.13 8.57 6.46 +v -12.57 7.76 5.81 +v -12.57 8.57 5.81 +v -15.00 7.76 6.46 +v -15.00 8.57 6.46 +v -16.78 7.76 8.24 +v -16.78 8.57 8.24 +v -17.17 8.57 10.68 +v -16.55 8.57 12.98 +v -14.87 8.57 14.66 +v -12.57 8.57 15.28 +v -10.27 8.57 14.66 +v -8.58 8.57 12.98 +v -7.97 8.57 10.68 +v -8.58 8.57 8.38 +v -10.27 8.57 6.69 +v -12.57 8.57 6.08 +v -14.87 8.57 6.69 +v -16.55 8.57 8.38 +v -16.55 16.89 12.98 +v -17.17 16.89 10.68 +v -14.87 16.89 14.66 +v -12.57 16.89 15.28 +v -10.27 16.89 14.66 +v -8.58 16.89 12.98 +v -7.97 16.89 10.68 +v -8.58 16.89 8.38 +v -10.27 16.89 6.69 +v -12.57 16.89 6.08 +v -14.87 16.89 6.69 +v -16.55 16.89 8.38 +v -17.13 21.30 13.31 +v -17.47 21.30 13.51 +v -18.23 21.30 10.68 +v -17.83 21.30 10.68 +v -15.20 21.30 15.24 +v -15.40 21.30 15.58 +v -12.57 21.30 15.94 +v -12.57 21.30 16.34 +v -9.93 21.30 15.24 +v -9.73 21.30 15.58 +v -8.01 21.30 13.31 +v -7.66 21.30 13.51 +v -7.30 21.30 10.68 +v -6.90 21.30 10.68 +v -8.01 21.30 8.04 +v -7.66 21.30 7.84 +v -9.93 21.30 6.12 +v -9.73 21.30 5.77 +v -12.57 21.30 5.41 +v -12.57 21.30 5.01 +v -15.20 21.30 6.12 +v -15.40 21.30 5.77 +v -17.13 21.30 8.04 +v -17.47 21.30 7.84 +v -16.17 24.76 12.76 +v -16.72 24.76 10.68 +v -14.64 24.76 14.28 +v -12.57 24.76 14.83 +v -10.49 24.76 14.28 +v -8.97 24.76 12.76 +v -8.41 24.76 10.68 +v -8.97 24.76 8.60 +v -10.49 24.76 7.08 +v -12.57 24.76 6.52 +v -14.64 24.76 7.08 +v -16.17 24.76 8.60 +v -16.13 28.50 12.74 +v -16.69 28.50 10.68 +v -14.63 28.50 14.24 +v -12.57 28.50 14.80 +v -10.51 28.50 14.24 +v -9.00 28.50 12.74 +v -8.45 28.50 10.68 +v -9.00 28.50 8.62 +v -10.51 28.50 7.11 +v -12.57 28.50 6.56 +v -14.63 28.50 7.11 +v -16.13 28.50 8.62 +v -17.13 17.36 13.31 +v -17.83 17.36 10.68 +v -15.20 17.36 15.24 +v -12.57 17.36 15.94 +v -9.93 17.36 15.24 +v -8.01 17.36 13.31 +v -7.30 17.36 10.68 +v -8.01 17.36 8.04 +v -9.93 17.36 6.12 +v -12.57 17.36 5.41 +v -15.20 17.36 6.12 +v -17.13 17.36 8.04 +v -17.91 20.21 10.37 +v -17.91 19.23 10.37 +v -17.91 19.21 10.80 +v -17.91 20.52 10.80 +v -17.81 19.26 10.03 +v -17.81 19.12 10.03 +v -17.91 19.12 10.04 +v -17.91 19.26 10.04 +v -17.89 20.75 10.80 +v -17.84 20.29 10.15 +v -17.94 20.29 10.15 +v -17.98 20.75 10.81 +v -17.68 19.12 11.55 +v -17.68 19.26 11.55 +v -17.78 19.26 11.56 +v -17.78 19.12 11.56 +v -17.89 19.07 10.80 +v -17.73 19.12 11.45 +v -17.82 19.12 11.45 +v -17.98 19.07 10.81 +v -18.05 19.12 10.16 +v -18.08 19.23 10.39 +v -18.05 19.26 10.16 +v -17.98 20.21 10.38 +v -17.98 20.52 10.81 +v -17.93 19.26 11.46 +v -18.01 19.24 11.24 +v -17.93 19.12 11.46 +v -18.09 19.07 10.82 +v -18.09 19.21 10.82 +v -17.83 20.21 11.23 +v -17.83 19.24 11.23 +v -17.73 20.29 11.45 +v -17.82 20.29 11.45 +v -17.84 19.12 10.15 +v -17.94 19.12 10.15 +v -17.90 20.21 11.23 +v -17.98 19.23 10.38 +v -17.90 19.24 11.23 +v -17.98 19.21 10.81 +v -17.82 19.26 11.45 +v -17.73 19.26 11.45 +v -17.84 19.26 10.15 +v -17.94 19.26 10.15 +v -18.02 19.12 10.05 +v -18.02 19.26 10.05 +v -17.88 19.26 11.57 +v -17.88 19.12 11.57 +v -12.87 20.21 16.02 +v -12.87 19.23 16.02 +v -12.44 19.21 16.02 +v -12.44 20.52 16.02 +v -13.21 19.26 15.92 +v -13.21 19.12 15.92 +v -13.20 19.12 16.02 +v -13.20 19.26 16.02 +v -12.44 20.75 16.00 +v -13.10 20.29 15.95 +v -13.09 20.29 16.05 +v -12.43 20.75 16.10 +v -11.69 19.12 15.79 +v -11.69 19.26 15.79 +v -11.68 19.26 15.89 +v -11.68 19.12 15.89 +v -12.44 19.07 16.00 +v -11.80 19.12 15.84 +v -11.79 19.12 15.94 +v -12.43 19.07 16.10 +v -13.08 19.12 16.16 +v -12.85 19.23 16.20 +v -13.08 19.26 16.16 +v -12.86 20.21 16.09 +v -12.43 20.52 16.10 +v -11.78 19.26 16.04 +v -12.00 19.24 16.12 +v -11.78 19.12 16.04 +v -12.42 19.07 16.20 +v -12.42 19.21 16.20 +v -12.01 20.21 15.94 +v -12.01 19.24 15.94 +v -11.80 20.29 15.84 +v -11.79 20.29 15.94 +v -13.10 19.12 15.95 +v -13.09 19.12 16.05 +v -12.01 20.21 16.01 +v -12.86 19.23 16.09 +v -12.01 19.24 16.01 +v -12.43 19.21 16.10 +v -11.79 19.26 15.94 +v -11.80 19.26 15.84 +v -13.10 19.26 15.95 +v -13.09 19.26 16.05 +v -13.19 19.12 16.13 +v -13.19 19.26 16.13 +v -11.67 19.26 16.00 +v -11.67 19.12 16.00 +v -9.24 23.34 12.52 +v -8.56 24.92 12.99 +v -9.10 24.92 13.76 +v -9.78 23.34 13.29 +v -9.53 28.41 12.29 +v -8.63 28.41 12.92 +v -9.18 28.41 13.70 +v -10.08 28.41 13.07 +v -12.87 27.21 14.81 +v -12.87 26.24 14.81 +v -12.44 26.21 14.82 +v -12.44 27.52 14.82 +v -13.21 26.26 14.72 +v -13.21 26.12 14.72 +v -13.20 26.12 14.82 +v -13.20 26.26 14.82 +v -12.44 27.75 14.80 +v -13.10 27.30 14.75 +v -13.09 27.30 14.85 +v -12.43 27.75 14.89 +v -11.69 26.12 14.59 +v -11.69 26.26 14.59 +v -11.68 26.26 14.69 +v -11.68 26.12 14.69 +v -12.44 26.07 14.80 +v -11.80 26.12 14.64 +v -11.79 26.12 14.73 +v -12.43 26.07 14.89 +v -13.08 26.12 14.96 +v -12.85 26.24 14.99 +v -13.08 26.26 14.96 +v -12.86 27.21 14.89 +v -12.43 27.52 14.89 +v -11.78 26.26 14.84 +v -12.00 26.25 14.92 +v -11.78 26.12 14.84 +v -12.42 26.07 15.00 +v -12.42 26.21 15.00 +v -12.01 27.21 14.74 +v -12.01 26.25 14.74 +v -11.80 27.30 14.64 +v -11.79 27.30 14.73 +v -13.10 26.12 14.75 +v -13.09 26.12 14.85 +v -12.01 27.21 14.81 +v -12.86 26.24 14.89 +v -12.01 26.25 14.81 +v -12.43 26.21 14.89 +v -11.79 26.26 14.73 +v -11.80 26.26 14.64 +v -13.10 26.26 14.75 +v -13.09 26.26 14.85 +v -13.19 26.12 14.93 +v -13.19 26.26 14.93 +v -11.67 26.26 14.79 +v -11.67 26.12 14.79 +v -14.41 23.34 14.01 +v -14.88 24.92 14.68 +v -15.65 24.92 14.14 +v -15.18 23.34 13.46 +v -14.18 28.41 13.71 +v -14.81 28.41 14.61 +v -15.59 28.41 14.07 +v -14.96 28.41 13.17 +v -8.43 27.21 10.98 +v -8.43 26.24 10.98 +v -8.42 26.21 10.55 +v -8.42 27.52 10.55 +v -8.52 26.26 11.32 +v -8.52 26.12 11.32 +v -8.42 26.12 11.31 +v -8.42 26.26 11.31 +v -8.45 27.75 10.55 +v -8.49 27.30 11.21 +v -8.39 27.30 11.20 +v -8.35 27.75 10.54 +v -8.65 26.12 9.80 +v -8.65 26.26 9.80 +v -8.56 26.26 9.79 +v -8.56 26.12 9.79 +v -8.45 26.07 10.55 +v -8.61 26.12 9.91 +v -8.51 26.12 9.90 +v -8.35 26.07 10.54 +v -8.29 26.12 11.19 +v -8.25 26.24 10.96 +v -8.29 26.26 11.19 +v -8.35 27.21 10.97 +v -8.35 27.52 10.54 +v -8.40 26.26 9.89 +v -8.32 26.25 10.11 +v -8.40 26.12 9.89 +v -8.24 26.07 10.53 +v -8.24 26.21 10.53 +v -8.50 27.21 10.13 +v -8.50 26.25 10.13 +v -8.61 27.30 9.91 +v -8.51 27.30 9.90 +v -8.49 26.12 11.21 +v -8.39 26.12 11.20 +v -8.43 27.21 10.12 +v -8.35 26.24 10.97 +v -8.43 26.25 10.12 +v -8.35 26.21 10.54 +v -8.51 26.26 9.90 +v -8.61 26.26 9.91 +v -8.49 26.26 11.21 +v -8.39 26.26 11.20 +v -8.32 26.12 11.30 +v -8.32 26.26 11.30 +v -8.45 26.26 9.78 +v -8.45 26.12 9.78 +v -13.04 12.70 6.81 +v -13.04 14.28 5.99 +v -12.09 14.28 5.99 +v -12.09 12.70 6.81 +v -13.04 17.34 6.74 +v -13.04 17.34 5.64 +v -12.09 17.34 5.64 +v -12.09 17.34 6.74 +v -8.98 12.70 12.20 +v -8.27 14.28 12.61 +v -8.74 14.28 13.43 +v -9.46 12.70 13.02 +v -8.92 17.34 12.24 +v -7.97 17.34 12.79 +v -8.44 17.34 13.61 +v -9.39 17.34 13.06 +v -12.09 12.70 14.54 +v -12.09 14.28 15.36 +v -13.04 14.28 15.36 +v -13.04 12.70 14.54 +v -12.09 17.34 14.62 +v -12.09 17.34 15.71 +v -13.04 17.34 15.71 +v -13.04 17.34 14.62 +v -10.73 23.34 7.35 +v -10.25 24.92 6.67 +v -9.48 24.92 7.22 +v -9.95 23.34 7.89 +v -10.95 28.41 7.65 +v -10.32 28.41 6.74 +v -9.55 28.41 7.29 +v -10.18 28.41 8.19 +v -9.46 12.70 8.34 +v -8.74 14.28 7.92 +v -8.27 14.28 8.74 +v -8.98 12.70 9.15 +v -9.39 17.34 8.30 +v -8.44 17.34 7.75 +v -7.97 17.34 8.57 +v -8.92 17.34 9.12 +v -7.23 20.21 10.98 +v -7.23 19.23 10.98 +v -7.22 19.21 10.55 +v -7.22 20.52 10.55 +v -7.32 19.26 11.32 +v -7.32 19.12 11.32 +v -7.22 19.12 11.31 +v -7.22 19.26 11.31 +v -7.24 20.75 10.55 +v -7.29 20.29 11.21 +v -7.19 20.29 11.20 +v -7.15 20.75 10.54 +v -7.45 19.12 9.80 +v -7.45 19.26 9.80 +v -7.35 19.26 9.79 +v -7.35 19.12 9.79 +v -7.24 19.07 10.55 +v -7.41 19.12 9.91 +v -7.31 19.12 9.90 +v -7.15 19.07 10.54 +v -7.09 19.12 11.19 +v -7.05 19.23 10.96 +v -7.09 19.26 11.19 +v -7.15 20.21 10.97 +v -7.15 20.52 10.54 +v -7.20 19.26 9.89 +v -7.12 19.24 10.11 +v -7.20 19.12 9.89 +v -7.04 19.07 10.53 +v -7.04 19.21 10.53 +v -7.30 20.21 10.13 +v -7.30 19.24 10.13 +v -7.41 20.29 9.91 +v -7.31 20.29 9.90 +v -7.29 19.12 11.21 +v -7.19 19.12 11.20 +v -7.23 20.21 10.12 +v -7.15 19.23 10.97 +v -7.23 19.24 10.12 +v -7.15 19.21 10.54 +v -7.31 19.26 9.90 +v -7.41 19.26 9.91 +v -7.29 19.26 11.21 +v -7.19 19.26 11.20 +v -7.11 19.12 11.30 +v -7.11 19.26 11.30 +v -7.25 19.26 9.78 +v -7.25 19.12 9.78 +v -12.26 27.21 6.54 +v -12.26 26.24 6.54 +v -12.69 26.21 6.53 +v -12.69 27.52 6.53 +v -11.92 26.26 6.63 +v -11.92 26.12 6.63 +v -11.93 26.12 6.53 +v -11.93 26.26 6.53 +v -12.69 27.75 6.56 +v -12.03 27.30 6.60 +v -12.04 27.30 6.51 +v -12.70 27.75 6.46 +v -13.44 26.12 6.76 +v -13.44 26.26 6.76 +v -13.45 26.26 6.67 +v -13.45 26.12 6.67 +v -12.69 26.07 6.56 +v -13.34 26.12 6.72 +v -13.34 26.12 6.62 +v -12.70 26.07 6.46 +v -12.05 26.12 6.40 +v -12.28 26.24 6.36 +v -12.05 26.26 6.40 +v -12.27 27.21 6.47 +v -12.70 27.52 6.46 +v -13.35 26.26 6.51 +v -13.13 26.25 6.43 +v -13.35 26.12 6.51 +v -12.71 26.07 6.35 +v -12.71 26.21 6.35 +v -13.12 27.21 6.61 +v -13.12 26.25 6.61 +v -13.34 27.30 6.72 +v -13.34 27.30 6.62 +v -12.03 26.12 6.60 +v -12.04 26.12 6.51 +v -13.12 27.21 6.54 +v -12.27 26.24 6.47 +v -13.12 26.25 6.54 +v -12.70 26.21 6.46 +v -13.34 26.26 6.62 +v -13.34 26.26 6.72 +v -12.03 26.26 6.60 +v -12.04 26.26 6.51 +v -11.94 26.12 6.43 +v -11.94 26.26 6.43 +v -13.46 26.26 6.56 +v -13.46 26.12 6.56 +v -16.15 12.70 9.15 +v -16.86 14.28 8.74 +v -16.39 14.28 7.92 +v -15.67 12.70 8.34 +v -16.21 17.34 9.12 +v -17.17 17.34 8.57 +v -16.69 17.34 7.75 +v -15.74 17.34 8.30 +v -12.26 20.21 5.34 +v -12.26 19.23 5.34 +v -12.69 19.21 5.33 +v -12.69 20.52 5.33 +v -11.92 19.26 5.43 +v -11.92 19.12 5.43 +v -11.93 19.12 5.33 +v -11.93 19.26 5.33 +v -12.69 20.75 5.36 +v -12.03 20.29 5.40 +v -12.04 20.29 5.30 +v -12.70 20.75 5.26 +v -13.44 19.12 5.56 +v -13.44 19.26 5.56 +v -13.45 19.26 5.47 +v -13.45 19.12 5.47 +v -12.69 19.07 5.36 +v -13.34 19.12 5.52 +v -13.34 19.12 5.42 +v -12.70 19.07 5.26 +v -12.05 19.12 5.20 +v -12.28 19.23 5.16 +v -12.05 19.26 5.20 +v -12.27 20.21 5.26 +v -12.70 20.52 5.26 +v -13.35 19.26 5.31 +v -13.13 19.24 5.23 +v -13.35 19.12 5.31 +v -12.71 19.07 5.15 +v -12.71 19.21 5.15 +v -13.12 20.21 5.41 +v -13.12 19.24 5.41 +v -13.34 20.29 5.52 +v -13.34 20.29 5.42 +v -12.03 19.12 5.40 +v -12.04 19.12 5.30 +v -13.12 20.21 5.34 +v -12.27 19.23 5.26 +v -13.12 19.24 5.34 +v -12.70 19.21 5.26 +v -13.34 19.26 5.42 +v -13.34 19.26 5.52 +v -12.03 19.26 5.40 +v -12.04 19.26 5.30 +v -11.94 19.12 5.23 +v -11.94 19.26 5.23 +v -13.46 19.26 5.36 +v -13.46 19.12 5.36 +v -15.89 23.34 8.84 +v -16.57 24.92 8.36 +v -16.03 24.92 7.59 +v -15.35 23.34 8.06 +v -15.60 28.41 9.06 +v -16.50 28.41 8.43 +v -15.96 28.41 7.66 +v -15.06 28.41 8.29 +v -16.70 27.21 10.37 +v -16.70 26.24 10.37 +v -16.71 26.21 10.80 +v -16.71 27.52 10.80 +v -16.61 26.26 10.03 +v -16.61 26.12 10.03 +v -16.71 26.12 10.04 +v -16.71 26.26 10.04 +v -16.69 27.75 10.80 +v -16.64 27.30 10.15 +v -16.74 27.30 10.15 +v -16.78 27.75 10.81 +v -16.48 26.12 11.55 +v -16.48 26.26 11.55 +v -16.58 26.26 11.56 +v -16.58 26.12 11.56 +v -16.69 26.07 10.80 +v -16.53 26.12 11.45 +v -16.62 26.12 11.45 +v -16.78 26.07 10.81 +v -16.84 26.12 10.16 +v -16.88 26.24 10.39 +v -16.84 26.26 10.16 +v -16.78 27.21 10.38 +v -16.78 27.52 10.81 +v -16.73 26.26 11.46 +v -16.81 26.25 11.24 +v -16.73 26.12 11.46 +v -16.89 26.07 10.82 +v -16.89 26.21 10.82 +v -16.63 27.21 11.23 +v -16.63 26.25 11.23 +v -16.53 27.30 11.45 +v -16.62 27.30 11.45 +v -16.64 26.12 10.15 +v -16.74 26.12 10.15 +v -16.70 27.21 11.23 +v -16.78 26.24 10.38 +v -16.70 26.25 11.23 +v -16.78 26.21 10.81 +v -16.62 26.26 11.45 +v -16.53 26.26 11.45 +v -16.64 26.26 10.15 +v -16.74 26.26 10.15 +v -16.82 26.12 10.05 +v -16.82 26.26 10.05 +v -16.68 26.26 11.57 +v -16.68 26.12 11.57 +v -15.67 12.70 13.02 +v -16.39 14.28 13.43 +v -16.86 14.28 12.61 +v -16.15 12.70 12.20 +v -15.74 17.34 13.06 +v -16.69 17.34 13.61 +v -17.17 17.34 12.79 +v -16.21 17.34 12.24 +v -16.83 28.50 13.14 +v -16.83 30.29 13.14 +v -17.49 30.29 10.68 +v -17.49 28.50 10.68 +v -15.03 28.50 14.94 +v -15.03 30.29 14.94 +v -12.57 28.50 15.60 +v -12.57 30.29 15.60 +v -10.10 28.50 14.94 +v -10.10 30.29 14.94 +v -8.30 28.50 13.14 +v -8.30 30.29 13.14 +v -7.64 28.50 10.68 +v -7.64 30.29 10.68 +v -8.30 28.50 8.21 +v -8.30 30.29 8.21 +v -10.10 28.50 6.41 +v -10.10 30.29 6.41 +v -12.57 28.50 5.75 +v -12.57 30.29 5.75 +v -15.03 28.50 6.41 +v -15.03 30.29 6.41 +v -16.83 28.50 8.21 +v -16.83 30.29 8.21 +v -16.21 30.29 12.78 +v -16.78 30.29 10.68 +v -15.03 30.90 14.94 +v -14.67 30.90 14.32 +v -16.21 30.90 12.78 +v -16.83 30.90 13.14 +v -12.57 30.29 14.89 +v -14.67 30.29 14.32 +v -10.10 30.90 14.94 +v -10.46 30.90 14.32 +v -12.57 30.90 14.89 +v -12.57 30.90 15.60 +v -8.92 30.29 12.78 +v -10.46 30.29 14.32 +v -7.64 30.90 10.68 +v -8.36 30.90 10.68 +v -8.92 30.90 12.78 +v -8.30 30.90 13.14 +v -8.92 30.29 8.57 +v -8.36 30.29 10.68 +v -10.10 30.90 6.41 +v -10.46 30.90 7.03 +v -8.92 30.90 8.57 +v -8.30 30.90 8.21 +v -12.57 30.29 6.47 +v -10.46 30.29 7.03 +v -15.03 30.90 6.41 +v -14.67 30.90 7.03 +v -12.57 30.90 6.47 +v -12.57 30.90 5.75 +v -16.21 30.29 8.57 +v -14.67 30.29 7.03 +v -17.49 30.90 10.68 +v -16.78 30.90 10.68 +v -16.21 30.90 8.57 +v -16.83 30.90 8.21 +v -16.21 29.42 12.78 +v -16.78 29.42 10.68 +v -14.67 29.42 14.32 +v -12.57 29.42 14.89 +v -10.46 29.42 14.32 +v -8.92 29.42 12.78 +v -8.36 29.42 10.68 +v -8.92 29.42 8.57 +v -10.46 29.42 7.03 +v -12.57 29.42 6.47 +v -14.67 29.42 7.03 +v -16.21 29.42 8.57 +v -12.57 29.42 10.68 +v 17.17 7.76 10.68 +v 16.55 7.76 12.98 +v 16.55 0.00 12.98 +v 17.17 0.00 10.68 +v 14.87 7.76 14.66 +v 14.87 0.00 14.66 +v 12.57 7.76 15.28 +v 12.57 0.00 15.28 +v 10.27 7.76 14.66 +v 10.27 0.00 14.66 +v 8.58 7.76 12.98 +v 8.58 0.00 12.98 +v 7.97 7.76 10.68 +v 7.97 0.00 10.68 +v 8.58 7.76 8.38 +v 8.58 0.00 8.38 +v 10.27 7.76 6.69 +v 10.27 0.00 6.69 +v 12.57 7.76 6.08 +v 12.57 0.00 6.08 +v 14.87 7.76 6.69 +v 14.87 0.00 6.69 +v 16.55 7.76 8.38 +v 16.55 0.00 8.38 +v 16.78 7.76 13.11 +v 17.43 7.76 10.68 +v 17.43 8.57 10.68 +v 16.78 8.57 13.11 +v 15.00 7.76 14.89 +v 15.00 8.57 14.89 +v 12.57 7.76 15.54 +v 12.57 8.57 15.54 +v 10.13 7.76 14.89 +v 10.13 8.57 14.89 +v 8.35 7.76 13.11 +v 8.35 8.57 13.11 +v 7.70 7.76 10.68 +v 7.70 8.57 10.68 +v 8.35 7.76 8.24 +v 8.35 8.57 8.24 +v 10.13 7.76 6.46 +v 10.13 8.57 6.46 +v 12.57 7.76 5.81 +v 12.57 8.57 5.81 +v 15.00 7.76 6.46 +v 15.00 8.57 6.46 +v 16.78 7.76 8.24 +v 16.78 8.57 8.24 +v 17.17 8.57 10.68 +v 16.55 8.57 12.98 +v 14.87 8.57 14.66 +v 12.57 8.57 15.28 +v 10.27 8.57 14.66 +v 8.58 8.57 12.98 +v 7.97 8.57 10.68 +v 8.58 8.57 8.38 +v 10.27 8.57 6.69 +v 12.57 8.57 6.08 +v 14.87 8.57 6.69 +v 16.55 8.57 8.38 +v 17.17 16.89 10.68 +v 16.55 16.89 12.98 +v 14.87 16.89 14.66 +v 12.57 16.89 15.28 +v 10.27 16.89 14.66 +v 8.58 16.89 12.98 +v 7.97 16.89 10.68 +v 8.58 16.89 8.38 +v 10.27 16.89 6.69 +v 12.57 16.89 6.08 +v 14.87 16.89 6.69 +v 16.55 16.89 8.38 +v 17.13 21.30 13.31 +v 17.83 21.30 10.68 +v 18.23 21.30 10.68 +v 17.47 21.30 13.51 +v 15.20 21.30 15.24 +v 15.40 21.30 15.58 +v 12.57 21.30 15.94 +v 12.57 21.30 16.34 +v 9.93 21.30 15.24 +v 9.73 21.30 15.58 +v 8.01 21.30 13.31 +v 7.66 21.30 13.51 +v 7.30 21.30 10.68 +v 6.90 21.30 10.68 +v 8.01 21.30 8.04 +v 7.66 21.30 7.84 +v 9.93 21.30 6.12 +v 9.73 21.30 5.77 +v 12.57 21.30 5.41 +v 12.57 21.30 5.01 +v 15.20 21.30 6.12 +v 15.40 21.30 5.77 +v 17.13 21.30 8.04 +v 17.47 21.30 7.84 +v 16.72 24.76 10.68 +v 16.17 24.76 12.76 +v 14.64 24.76 14.28 +v 12.57 24.76 14.83 +v 10.49 24.76 14.28 +v 8.97 24.76 12.76 +v 8.41 24.76 10.68 +v 8.97 24.76 8.60 +v 10.49 24.76 7.08 +v 12.57 24.76 6.52 +v 14.64 24.76 7.08 +v 16.17 24.76 8.60 +v 16.69 28.50 10.68 +v 16.13 28.50 12.74 +v 14.63 28.50 14.24 +v 12.57 28.50 14.80 +v 10.51 28.50 14.24 +v 9.00 28.50 12.74 +v 8.45 28.50 10.68 +v 9.00 28.50 8.62 +v 10.51 28.50 7.11 +v 12.57 28.50 6.56 +v 14.63 28.50 7.11 +v 16.13 28.50 8.62 +v 17.83 17.36 10.68 +v 17.13 17.36 13.31 +v 15.20 17.36 15.24 +v 12.57 17.36 15.94 +v 9.93 17.36 15.24 +v 8.01 17.36 13.31 +v 7.30 17.36 10.68 +v 8.01 17.36 8.04 +v 9.93 17.36 6.12 +v 12.57 17.36 5.41 +v 15.20 17.36 6.12 +v 17.13 17.36 8.04 +v 17.91 20.21 10.37 +v 17.91 20.52 10.80 +v 17.91 19.21 10.80 +v 17.91 19.23 10.37 +v 17.81 19.26 10.03 +v 17.91 19.26 10.04 +v 17.91 19.12 10.04 +v 17.81 19.12 10.03 +v 17.89 20.75 10.80 +v 17.98 20.75 10.81 +v 17.94 20.29 10.15 +v 17.84 20.29 10.15 +v 17.68 19.12 11.55 +v 17.78 19.12 11.56 +v 17.78 19.26 11.56 +v 17.68 19.26 11.55 +v 17.89 19.07 10.80 +v 17.98 19.07 10.81 +v 17.82 19.12 11.45 +v 17.73 19.12 11.45 +v 18.05 19.12 10.16 +v 18.05 19.26 10.16 +v 18.08 19.23 10.39 +v 17.98 20.52 10.81 +v 17.98 20.21 10.38 +v 17.93 19.26 11.46 +v 17.93 19.12 11.46 +v 18.01 19.24 11.24 +v 18.09 19.07 10.82 +v 18.09 19.21 10.82 +v 17.83 20.21 11.23 +v 17.83 19.24 11.23 +v 17.73 20.29 11.45 +v 17.82 20.29 11.45 +v 17.84 19.12 10.15 +v 17.94 19.12 10.15 +v 17.90 20.21 11.23 +v 17.98 19.23 10.38 +v 17.90 19.24 11.23 +v 17.98 19.21 10.81 +v 17.82 19.26 11.45 +v 17.73 19.26 11.45 +v 17.94 19.26 10.15 +v 17.84 19.26 10.15 +v 18.02 19.26 10.05 +v 18.02 19.12 10.05 +v 17.88 19.12 11.57 +v 17.88 19.26 11.57 +v 12.87 20.21 16.02 +v 12.44 20.52 16.02 +v 12.44 19.21 16.02 +v 12.87 19.23 16.02 +v 13.21 19.26 15.92 +v 13.20 19.26 16.02 +v 13.20 19.12 16.02 +v 13.21 19.12 15.92 +v 12.44 20.75 16.00 +v 12.43 20.75 16.10 +v 13.09 20.29 16.05 +v 13.10 20.29 15.95 +v 11.69 19.12 15.79 +v 11.68 19.12 15.89 +v 11.68 19.26 15.89 +v 11.69 19.26 15.79 +v 12.44 19.07 16.00 +v 12.43 19.07 16.10 +v 11.79 19.12 15.94 +v 11.80 19.12 15.84 +v 13.08 19.12 16.16 +v 13.08 19.26 16.16 +v 12.85 19.23 16.20 +v 12.43 20.52 16.10 +v 12.86 20.21 16.09 +v 11.78 19.26 16.04 +v 11.78 19.12 16.04 +v 12.00 19.24 16.12 +v 12.42 19.07 16.20 +v 12.42 19.21 16.20 +v 12.01 20.21 15.94 +v 12.01 19.24 15.94 +v 11.80 20.29 15.84 +v 11.79 20.29 15.94 +v 13.10 19.12 15.95 +v 13.09 19.12 16.05 +v 12.01 20.21 16.01 +v 12.86 19.23 16.09 +v 12.01 19.24 16.01 +v 12.43 19.21 16.10 +v 11.79 19.26 15.94 +v 11.80 19.26 15.84 +v 13.09 19.26 16.05 +v 13.10 19.26 15.95 +v 13.19 19.26 16.13 +v 13.19 19.12 16.13 +v 11.67 19.12 16.00 +v 11.67 19.26 16.00 +v 9.24 23.34 12.52 +v 9.78 23.34 13.29 +v 9.10 24.92 13.76 +v 8.56 24.92 12.99 +v 8.63 28.41 12.92 +v 9.53 28.41 12.29 +v 9.18 28.41 13.70 +v 10.08 28.41 13.07 +v 12.87 27.21 14.81 +v 12.44 27.52 14.82 +v 12.44 26.21 14.82 +v 12.87 26.24 14.81 +v 13.21 26.26 14.72 +v 13.20 26.26 14.82 +v 13.20 26.12 14.82 +v 13.21 26.12 14.72 +v 12.44 27.75 14.80 +v 12.43 27.75 14.89 +v 13.09 27.30 14.85 +v 13.10 27.30 14.75 +v 11.69 26.12 14.59 +v 11.68 26.12 14.69 +v 11.68 26.26 14.69 +v 11.69 26.26 14.59 +v 12.44 26.07 14.80 +v 12.43 26.07 14.89 +v 11.79 26.12 14.73 +v 11.80 26.12 14.64 +v 13.08 26.12 14.96 +v 13.08 26.26 14.96 +v 12.85 26.24 14.99 +v 12.43 27.52 14.89 +v 12.86 27.21 14.89 +v 11.78 26.26 14.84 +v 11.78 26.12 14.84 +v 12.00 26.25 14.92 +v 12.42 26.07 15.00 +v 12.42 26.21 15.00 +v 12.01 27.21 14.74 +v 12.01 26.25 14.74 +v 11.80 27.30 14.64 +v 11.79 27.30 14.73 +v 13.10 26.12 14.75 +v 13.09 26.12 14.85 +v 12.01 27.21 14.81 +v 12.86 26.24 14.89 +v 12.01 26.25 14.81 +v 12.43 26.21 14.89 +v 11.79 26.26 14.73 +v 11.80 26.26 14.64 +v 13.09 26.26 14.85 +v 13.10 26.26 14.75 +v 13.19 26.26 14.93 +v 13.19 26.12 14.93 +v 11.67 26.12 14.79 +v 11.67 26.26 14.79 +v 14.41 23.34 14.01 +v 15.18 23.34 13.46 +v 15.65 24.92 14.14 +v 14.88 24.92 14.68 +v 14.81 28.41 14.61 +v 14.18 28.41 13.71 +v 15.59 28.41 14.07 +v 14.96 28.41 13.17 +v 8.43 27.21 10.98 +v 8.42 27.52 10.55 +v 8.42 26.21 10.55 +v 8.43 26.24 10.98 +v 8.52 26.26 11.32 +v 8.42 26.26 11.31 +v 8.42 26.12 11.31 +v 8.52 26.12 11.32 +v 8.45 27.75 10.55 +v 8.35 27.75 10.54 +v 8.39 27.30 11.20 +v 8.49 27.30 11.21 +v 8.65 26.12 9.80 +v 8.56 26.12 9.79 +v 8.56 26.26 9.79 +v 8.65 26.26 9.80 +v 8.45 26.07 10.55 +v 8.35 26.07 10.54 +v 8.51 26.12 9.90 +v 8.61 26.12 9.91 +v 8.29 26.12 11.19 +v 8.29 26.26 11.19 +v 8.25 26.24 10.96 +v 8.35 27.52 10.54 +v 8.35 27.21 10.97 +v 8.40 26.26 9.89 +v 8.40 26.12 9.89 +v 8.32 26.25 10.11 +v 8.24 26.07 10.53 +v 8.24 26.21 10.53 +v 8.50 27.21 10.13 +v 8.50 26.25 10.13 +v 8.61 27.30 9.91 +v 8.51 27.30 9.90 +v 8.49 26.12 11.21 +v 8.39 26.12 11.20 +v 8.43 27.21 10.12 +v 8.35 26.24 10.97 +v 8.43 26.25 10.12 +v 8.35 26.21 10.54 +v 8.51 26.26 9.90 +v 8.61 26.26 9.91 +v 8.39 26.26 11.20 +v 8.49 26.26 11.21 +v 8.32 26.26 11.30 +v 8.32 26.12 11.30 +v 8.45 26.12 9.78 +v 8.45 26.26 9.78 +v 13.04 12.70 6.81 +v 12.09 12.70 6.81 +v 12.09 14.28 5.99 +v 13.04 14.28 5.99 +v 13.04 17.34 5.64 +v 13.04 17.34 6.74 +v 12.09 17.34 5.64 +v 12.09 17.34 6.74 +v 8.98 12.70 12.20 +v 9.46 12.70 13.02 +v 8.74 14.28 13.43 +v 8.27 14.28 12.61 +v 7.97 17.34 12.79 +v 8.92 17.34 12.24 +v 8.44 17.34 13.61 +v 9.39 17.34 13.06 +v 12.09 12.70 14.54 +v 13.04 12.70 14.54 +v 13.04 14.28 15.36 +v 12.09 14.28 15.36 +v 12.09 17.34 15.71 +v 12.09 17.34 14.62 +v 13.04 17.34 15.71 +v 13.04 17.34 14.62 +v 10.73 23.34 7.35 +v 9.95 23.34 7.89 +v 9.48 24.92 7.22 +v 10.25 24.92 6.67 +v 10.32 28.41 6.74 +v 10.95 28.41 7.65 +v 9.55 28.41 7.29 +v 10.18 28.41 8.19 +v 9.46 12.70 8.34 +v 8.98 12.70 9.15 +v 8.27 14.28 8.74 +v 8.74 14.28 7.92 +v 8.44 17.34 7.75 +v 9.39 17.34 8.30 +v 7.97 17.34 8.57 +v 8.92 17.34 9.12 +v 7.23 20.21 10.98 +v 7.22 20.52 10.55 +v 7.22 19.21 10.55 +v 7.23 19.23 10.98 +v 7.32 19.26 11.32 +v 7.22 19.26 11.31 +v 7.22 19.12 11.31 +v 7.32 19.12 11.32 +v 7.24 20.75 10.55 +v 7.15 20.75 10.54 +v 7.19 20.29 11.20 +v 7.29 20.29 11.21 +v 7.45 19.12 9.80 +v 7.35 19.12 9.79 +v 7.35 19.26 9.79 +v 7.45 19.26 9.80 +v 7.24 19.07 10.55 +v 7.15 19.07 10.54 +v 7.31 19.12 9.90 +v 7.41 19.12 9.91 +v 7.09 19.12 11.19 +v 7.09 19.26 11.19 +v 7.05 19.23 10.96 +v 7.15 20.52 10.54 +v 7.15 20.21 10.97 +v 7.20 19.26 9.89 +v 7.20 19.12 9.89 +v 7.12 19.24 10.11 +v 7.04 19.07 10.53 +v 7.04 19.21 10.53 +v 7.30 20.21 10.13 +v 7.30 19.24 10.13 +v 7.41 20.29 9.91 +v 7.31 20.29 9.90 +v 7.29 19.12 11.21 +v 7.19 19.12 11.20 +v 7.23 20.21 10.12 +v 7.15 19.23 10.97 +v 7.23 19.24 10.12 +v 7.15 19.21 10.54 +v 7.31 19.26 9.90 +v 7.41 19.26 9.91 +v 7.19 19.26 11.20 +v 7.29 19.26 11.21 +v 7.11 19.26 11.30 +v 7.11 19.12 11.30 +v 7.25 19.12 9.78 +v 7.25 19.26 9.78 +v 12.26 27.21 6.54 +v 12.69 27.52 6.53 +v 12.69 26.21 6.53 +v 12.26 26.24 6.54 +v 11.92 26.26 6.63 +v 11.93 26.26 6.53 +v 11.93 26.12 6.53 +v 11.92 26.12 6.63 +v 12.69 27.75 6.56 +v 12.70 27.75 6.46 +v 12.04 27.30 6.51 +v 12.03 27.30 6.60 +v 13.44 26.12 6.76 +v 13.45 26.12 6.67 +v 13.45 26.26 6.67 +v 13.44 26.26 6.76 +v 12.69 26.07 6.56 +v 12.70 26.07 6.46 +v 13.34 26.12 6.62 +v 13.34 26.12 6.72 +v 12.05 26.12 6.40 +v 12.05 26.26 6.40 +v 12.28 26.24 6.36 +v 12.70 27.52 6.46 +v 12.27 27.21 6.47 +v 13.35 26.26 6.51 +v 13.35 26.12 6.51 +v 13.13 26.25 6.43 +v 12.71 26.07 6.35 +v 12.71 26.21 6.35 +v 13.12 27.21 6.61 +v 13.12 26.25 6.61 +v 13.34 27.30 6.72 +v 13.34 27.30 6.62 +v 12.03 26.12 6.60 +v 12.04 26.12 6.51 +v 13.12 27.21 6.54 +v 12.27 26.24 6.47 +v 13.12 26.25 6.54 +v 12.70 26.21 6.46 +v 13.34 26.26 6.62 +v 13.34 26.26 6.72 +v 12.04 26.26 6.51 +v 12.03 26.26 6.60 +v 11.94 26.26 6.43 +v 11.94 26.12 6.43 +v 13.46 26.12 6.56 +v 13.46 26.26 6.56 +v 16.15 12.70 9.15 +v 15.67 12.70 8.34 +v 16.39 14.28 7.92 +v 16.86 14.28 8.74 +v 17.17 17.34 8.57 +v 16.21 17.34 9.12 +v 16.69 17.34 7.75 +v 15.74 17.34 8.30 +v 12.26 20.21 5.34 +v 12.69 20.52 5.33 +v 12.69 19.21 5.33 +v 12.26 19.23 5.34 +v 11.92 19.26 5.43 +v 11.93 19.26 5.33 +v 11.93 19.12 5.33 +v 11.92 19.12 5.43 +v 12.69 20.75 5.36 +v 12.70 20.75 5.26 +v 12.04 20.29 5.30 +v 12.03 20.29 5.40 +v 13.44 19.12 5.56 +v 13.45 19.12 5.47 +v 13.45 19.26 5.47 +v 13.44 19.26 5.56 +v 12.69 19.07 5.36 +v 12.70 19.07 5.26 +v 13.34 19.12 5.42 +v 13.34 19.12 5.52 +v 12.05 19.12 5.20 +v 12.05 19.26 5.20 +v 12.28 19.23 5.16 +v 12.70 20.52 5.26 +v 12.27 20.21 5.26 +v 13.35 19.26 5.31 +v 13.35 19.12 5.31 +v 13.13 19.24 5.23 +v 12.71 19.07 5.15 +v 12.71 19.21 5.15 +v 13.12 20.21 5.41 +v 13.12 19.24 5.41 +v 13.34 20.29 5.52 +v 13.34 20.29 5.42 +v 12.03 19.12 5.40 +v 12.04 19.12 5.30 +v 13.12 20.21 5.34 +v 12.27 19.23 5.26 +v 13.12 19.24 5.34 +v 12.70 19.21 5.26 +v 13.34 19.26 5.42 +v 13.34 19.26 5.52 +v 12.04 19.26 5.30 +v 12.03 19.26 5.40 +v 11.94 19.26 5.23 +v 11.94 19.12 5.23 +v 13.46 19.12 5.36 +v 13.46 19.26 5.36 +v 15.89 23.34 8.84 +v 15.35 23.34 8.06 +v 16.03 24.92 7.59 +v 16.57 24.92 8.36 +v 16.50 28.41 8.43 +v 15.60 28.41 9.06 +v 15.96 28.41 7.66 +v 15.06 28.41 8.29 +v 16.70 27.21 10.37 +v 16.71 27.52 10.80 +v 16.71 26.21 10.80 +v 16.70 26.24 10.37 +v 16.61 26.26 10.03 +v 16.71 26.26 10.04 +v 16.71 26.12 10.04 +v 16.61 26.12 10.03 +v 16.69 27.75 10.80 +v 16.78 27.75 10.81 +v 16.74 27.30 10.15 +v 16.64 27.30 10.15 +v 16.48 26.12 11.55 +v 16.58 26.12 11.56 +v 16.58 26.26 11.56 +v 16.48 26.26 11.55 +v 16.69 26.07 10.80 +v 16.78 26.07 10.81 +v 16.62 26.12 11.45 +v 16.53 26.12 11.45 +v 16.84 26.12 10.16 +v 16.84 26.26 10.16 +v 16.88 26.24 10.39 +v 16.78 27.52 10.81 +v 16.78 27.21 10.38 +v 16.73 26.26 11.46 +v 16.73 26.12 11.46 +v 16.81 26.25 11.24 +v 16.89 26.07 10.82 +v 16.89 26.21 10.82 +v 16.63 27.21 11.23 +v 16.63 26.25 11.23 +v 16.53 27.30 11.45 +v 16.62 27.30 11.45 +v 16.64 26.12 10.15 +v 16.74 26.12 10.15 +v 16.70 27.21 11.23 +v 16.78 26.24 10.38 +v 16.70 26.25 11.23 +v 16.78 26.21 10.81 +v 16.62 26.26 11.45 +v 16.53 26.26 11.45 +v 16.74 26.26 10.15 +v 16.64 26.26 10.15 +v 16.82 26.26 10.05 +v 16.82 26.12 10.05 +v 16.68 26.12 11.57 +v 16.68 26.26 11.57 +v 15.67 12.70 13.02 +v 16.15 12.70 12.20 +v 16.86 14.28 12.61 +v 16.39 14.28 13.43 +v 16.69 17.34 13.61 +v 15.74 17.34 13.06 +v 17.17 17.34 12.79 +v 16.21 17.34 12.24 +v 16.83 28.50 13.14 +v 17.49 28.50 10.68 +v 17.49 30.29 10.68 +v 16.83 30.29 13.14 +v 15.03 28.50 14.94 +v 15.03 30.29 14.94 +v 12.57 28.50 15.60 +v 12.57 30.29 15.60 +v 10.10 28.50 14.94 +v 10.10 30.29 14.94 +v 8.30 28.50 13.14 +v 8.30 30.29 13.14 +v 7.64 28.50 10.68 +v 7.64 30.29 10.68 +v 8.30 28.50 8.21 +v 8.30 30.29 8.21 +v 10.10 28.50 6.41 +v 10.10 30.29 6.41 +v 12.57 28.50 5.75 +v 12.57 30.29 5.75 +v 15.03 28.50 6.41 +v 15.03 30.29 6.41 +v 16.83 28.50 8.21 +v 16.83 30.29 8.21 +v 16.78 30.29 10.68 +v 16.21 30.29 12.78 +v 15.03 30.90 14.94 +v 16.83 30.90 13.14 +v 16.21 30.90 12.78 +v 14.67 30.90 14.32 +v 14.67 30.29 14.32 +v 12.57 30.29 14.89 +v 10.10 30.90 14.94 +v 12.57 30.90 15.60 +v 12.57 30.90 14.89 +v 10.46 30.90 14.32 +v 10.46 30.29 14.32 +v 8.92 30.29 12.78 +v 7.64 30.90 10.68 +v 8.30 30.90 13.14 +v 8.92 30.90 12.78 +v 8.36 30.90 10.68 +v 8.36 30.29 10.68 +v 8.92 30.29 8.57 +v 10.10 30.90 6.41 +v 8.30 30.90 8.21 +v 8.92 30.90 8.57 +v 10.46 30.90 7.03 +v 10.46 30.29 7.03 +v 12.57 30.29 6.47 +v 15.03 30.90 6.41 +v 12.57 30.90 5.75 +v 12.57 30.90 6.47 +v 14.67 30.90 7.03 +v 14.67 30.29 7.03 +v 16.21 30.29 8.57 +v 17.49 30.90 10.68 +v 16.83 30.90 8.21 +v 16.21 30.90 8.57 +v 16.78 30.90 10.68 +v 16.78 29.42 10.68 +v 16.21 29.42 12.78 +v 14.67 29.42 14.32 +v 12.57 29.42 14.89 +v 10.46 29.42 14.32 +v 8.92 29.42 12.78 +v 8.36 29.42 10.68 +v 8.92 29.42 8.57 +v 10.46 29.42 7.03 +v 12.57 29.42 6.47 +v 14.67 29.42 7.03 +v 16.21 29.42 8.57 +v 12.57 29.42 10.68 +v 16.55 0.00 -12.98 +v 16.55 7.76 -12.98 +v 17.17 7.76 -10.68 +v 17.17 0.00 -10.68 +v 14.87 0.00 -14.66 +v 14.87 7.76 -14.66 +v 12.57 0.00 -15.28 +v 12.57 7.76 -15.28 +v 10.27 0.00 -14.66 +v 10.27 7.76 -14.66 +v 8.58 0.00 -12.98 +v 8.58 7.76 -12.98 +v 7.97 0.00 -10.68 +v 7.97 7.76 -10.68 +v 8.58 0.00 -8.38 +v 8.58 7.76 -8.38 +v 10.27 0.00 -6.69 +v 10.27 7.76 -6.69 +v 12.57 0.00 -6.08 +v 12.57 7.76 -6.08 +v 14.87 0.00 -6.69 +v 14.87 7.76 -6.69 +v 16.55 0.00 -8.38 +v 16.55 7.76 -8.38 +v 16.78 7.76 -13.11 +v 16.78 8.57 -13.11 +v 17.43 8.57 -10.68 +v 17.43 7.76 -10.68 +v 15.00 7.76 -14.89 +v 15.00 8.57 -14.89 +v 12.57 7.76 -15.54 +v 12.57 8.57 -15.54 +v 10.13 7.76 -14.89 +v 10.13 8.57 -14.89 +v 8.35 7.76 -13.11 +v 8.35 8.57 -13.11 +v 7.70 7.76 -10.68 +v 7.70 8.57 -10.68 +v 8.35 7.76 -8.24 +v 8.35 8.57 -8.24 +v 10.13 7.76 -6.46 +v 10.13 8.57 -6.46 +v 12.57 7.76 -5.81 +v 12.57 8.57 -5.81 +v 15.00 7.76 -6.46 +v 15.00 8.57 -6.46 +v 16.78 7.76 -8.24 +v 16.78 8.57 -8.24 +v 17.17 8.57 -10.68 +v 16.55 8.57 -12.98 +v 14.87 8.57 -14.66 +v 12.57 8.57 -15.28 +v 10.27 8.57 -14.66 +v 8.58 8.57 -12.98 +v 7.97 8.57 -10.68 +v 8.58 8.57 -8.38 +v 10.27 8.57 -6.69 +v 12.57 8.57 -6.08 +v 14.87 8.57 -6.69 +v 16.55 8.57 -8.38 +v 16.55 16.89 -12.98 +v 17.17 16.89 -10.68 +v 14.87 16.89 -14.66 +v 12.57 16.89 -15.28 +v 10.27 16.89 -14.66 +v 8.58 16.89 -12.98 +v 7.97 16.89 -10.68 +v 8.58 16.89 -8.38 +v 10.27 16.89 -6.69 +v 12.57 16.89 -6.08 +v 14.87 16.89 -6.69 +v 16.55 16.89 -8.38 +v 17.13 21.30 -13.31 +v 17.47 21.30 -13.51 +v 18.23 21.30 -10.68 +v 17.83 21.30 -10.68 +v 15.20 21.30 -15.24 +v 15.40 21.30 -15.58 +v 12.57 21.30 -15.94 +v 12.57 21.30 -16.34 +v 9.93 21.30 -15.24 +v 9.73 21.30 -15.58 +v 8.01 21.30 -13.31 +v 7.66 21.30 -13.51 +v 7.30 21.30 -10.68 +v 6.90 21.30 -10.68 +v 8.01 21.30 -8.04 +v 7.66 21.30 -7.84 +v 9.93 21.30 -6.12 +v 9.73 21.30 -5.77 +v 12.57 21.30 -5.41 +v 12.57 21.30 -5.01 +v 15.20 21.30 -6.12 +v 15.40 21.30 -5.77 +v 17.13 21.30 -8.04 +v 17.47 21.30 -7.84 +v 16.17 24.76 -12.76 +v 16.72 24.76 -10.68 +v 14.64 24.76 -14.28 +v 12.57 24.76 -14.83 +v 10.49 24.76 -14.28 +v 8.97 24.76 -12.76 +v 8.41 24.76 -10.68 +v 8.97 24.76 -8.60 +v 10.49 24.76 -7.08 +v 12.57 24.76 -6.52 +v 14.64 24.76 -7.08 +v 16.17 24.76 -8.60 +v 16.13 28.50 -12.74 +v 16.69 28.50 -10.68 +v 14.63 28.50 -14.24 +v 12.57 28.50 -14.80 +v 10.51 28.50 -14.24 +v 9.00 28.50 -12.74 +v 8.45 28.50 -10.68 +v 9.00 28.50 -8.62 +v 10.51 28.50 -7.11 +v 12.57 28.50 -6.56 +v 14.63 28.50 -7.11 +v 16.13 28.50 -8.62 +v 17.13 17.36 -13.31 +v 17.83 17.36 -10.68 +v 15.20 17.36 -15.24 +v 12.57 17.36 -15.94 +v 9.93 17.36 -15.24 +v 8.01 17.36 -13.31 +v 7.30 17.36 -10.68 +v 8.01 17.36 -8.04 +v 9.93 17.36 -6.12 +v 12.57 17.36 -5.41 +v 15.20 17.36 -6.12 +v 17.13 17.36 -8.04 +v 17.91 20.21 -10.37 +v 17.91 19.23 -10.37 +v 17.91 19.21 -10.80 +v 17.91 20.52 -10.80 +v 17.81 19.26 -10.03 +v 17.81 19.12 -10.03 +v 17.91 19.12 -10.04 +v 17.91 19.26 -10.04 +v 17.89 20.75 -10.80 +v 17.84 20.29 -10.15 +v 17.94 20.29 -10.15 +v 17.98 20.75 -10.81 +v 17.68 19.12 -11.55 +v 17.68 19.26 -11.55 +v 17.78 19.26 -11.56 +v 17.78 19.12 -11.56 +v 17.89 19.07 -10.80 +v 17.73 19.12 -11.45 +v 17.82 19.12 -11.45 +v 17.98 19.07 -10.81 +v 18.05 19.12 -10.16 +v 18.08 19.23 -10.39 +v 18.05 19.26 -10.16 +v 17.98 20.21 -10.38 +v 17.98 20.52 -10.81 +v 17.93 19.26 -11.46 +v 18.01 19.24 -11.24 +v 17.93 19.12 -11.46 +v 18.09 19.07 -10.82 +v 18.09 19.21 -10.82 +v 17.83 20.21 -11.23 +v 17.83 19.24 -11.23 +v 17.73 20.29 -11.45 +v 17.82 20.29 -11.45 +v 17.84 19.12 -10.15 +v 17.94 19.12 -10.15 +v 17.90 20.21 -11.23 +v 17.98 19.23 -10.38 +v 17.90 19.24 -11.23 +v 17.98 19.21 -10.81 +v 17.82 19.26 -11.45 +v 17.73 19.26 -11.45 +v 17.84 19.26 -10.15 +v 17.94 19.26 -10.15 +v 18.02 19.12 -10.05 +v 18.02 19.26 -10.05 +v 17.88 19.26 -11.57 +v 17.88 19.12 -11.57 +v 12.87 20.21 -16.02 +v 12.87 19.23 -16.02 +v 12.44 19.21 -16.02 +v 12.44 20.52 -16.02 +v 13.21 19.26 -15.92 +v 13.21 19.12 -15.92 +v 13.20 19.12 -16.02 +v 13.20 19.26 -16.02 +v 12.44 20.75 -16.00 +v 13.10 20.29 -15.95 +v 13.09 20.29 -16.05 +v 12.43 20.75 -16.10 +v 11.69 19.12 -15.79 +v 11.69 19.26 -15.79 +v 11.68 19.26 -15.89 +v 11.68 19.12 -15.89 +v 12.44 19.07 -16.00 +v 11.80 19.12 -15.84 +v 11.79 19.12 -15.94 +v 12.43 19.07 -16.10 +v 13.08 19.12 -16.16 +v 12.85 19.23 -16.20 +v 13.08 19.26 -16.16 +v 12.86 20.21 -16.09 +v 12.43 20.52 -16.10 +v 11.78 19.26 -16.04 +v 12.00 19.24 -16.12 +v 11.78 19.12 -16.04 +v 12.42 19.07 -16.20 +v 12.42 19.21 -16.20 +v 12.01 20.21 -15.94 +v 12.01 19.24 -15.94 +v 11.80 20.29 -15.84 +v 11.79 20.29 -15.94 +v 13.10 19.12 -15.95 +v 13.09 19.12 -16.05 +v 12.01 20.21 -16.01 +v 12.86 19.23 -16.09 +v 12.01 19.24 -16.01 +v 12.43 19.21 -16.10 +v 11.79 19.26 -15.94 +v 11.80 19.26 -15.84 +v 13.10 19.26 -15.95 +v 13.09 19.26 -16.05 +v 13.19 19.12 -16.13 +v 13.19 19.26 -16.13 +v 11.67 19.26 -16.00 +v 11.67 19.12 -16.00 +v 9.24 23.34 -12.52 +v 8.56 24.92 -12.99 +v 9.10 24.92 -13.76 +v 9.78 23.34 -13.29 +v 9.53 28.41 -12.29 +v 8.63 28.41 -12.92 +v 9.18 28.41 -13.70 +v 10.08 28.41 -13.07 +v 12.87 27.21 -14.81 +v 12.87 26.24 -14.81 +v 12.44 26.21 -14.82 +v 12.44 27.52 -14.82 +v 13.21 26.26 -14.72 +v 13.21 26.12 -14.72 +v 13.20 26.12 -14.82 +v 13.20 26.26 -14.82 +v 12.44 27.75 -14.80 +v 13.10 27.30 -14.75 +v 13.09 27.30 -14.85 +v 12.43 27.75 -14.89 +v 11.69 26.12 -14.59 +v 11.69 26.26 -14.59 +v 11.68 26.26 -14.69 +v 11.68 26.12 -14.69 +v 12.44 26.07 -14.80 +v 11.80 26.12 -14.64 +v 11.79 26.12 -14.73 +v 12.43 26.07 -14.89 +v 13.08 26.12 -14.96 +v 12.85 26.24 -14.99 +v 13.08 26.26 -14.96 +v 12.86 27.21 -14.89 +v 12.43 27.52 -14.89 +v 11.78 26.26 -14.84 +v 12.00 26.25 -14.92 +v 11.78 26.12 -14.84 +v 12.42 26.07 -15.00 +v 12.42 26.21 -15.00 +v 12.01 27.21 -14.74 +v 12.01 26.25 -14.74 +v 11.80 27.30 -14.64 +v 11.79 27.30 -14.73 +v 13.10 26.12 -14.75 +v 13.09 26.12 -14.85 +v 12.01 27.21 -14.81 +v 12.86 26.24 -14.89 +v 12.01 26.25 -14.81 +v 12.43 26.21 -14.89 +v 11.79 26.26 -14.73 +v 11.80 26.26 -14.64 +v 13.10 26.26 -14.75 +v 13.09 26.26 -14.85 +v 13.19 26.12 -14.93 +v 13.19 26.26 -14.93 +v 11.67 26.26 -14.79 +v 11.67 26.12 -14.79 +v 14.41 23.34 -14.01 +v 14.88 24.92 -14.68 +v 15.65 24.92 -14.14 +v 15.18 23.34 -13.46 +v 14.18 28.41 -13.71 +v 14.81 28.41 -14.61 +v 15.59 28.41 -14.07 +v 14.96 28.41 -13.17 +v 8.43 27.21 -10.98 +v 8.43 26.24 -10.98 +v 8.42 26.21 -10.55 +v 8.42 27.52 -10.55 +v 8.52 26.26 -11.32 +v 8.52 26.12 -11.32 +v 8.42 26.12 -11.31 +v 8.42 26.26 -11.31 +v 8.45 27.75 -10.55 +v 8.49 27.30 -11.21 +v 8.39 27.30 -11.20 +v 8.35 27.75 -10.54 +v 8.65 26.12 -9.80 +v 8.65 26.26 -9.80 +v 8.56 26.26 -9.79 +v 8.56 26.12 -9.79 +v 8.45 26.07 -10.55 +v 8.61 26.12 -9.91 +v 8.51 26.12 -9.90 +v 8.35 26.07 -10.54 +v 8.29 26.12 -11.19 +v 8.25 26.24 -10.96 +v 8.29 26.26 -11.19 +v 8.35 27.21 -10.97 +v 8.35 27.52 -10.54 +v 8.40 26.26 -9.89 +v 8.32 26.25 -10.11 +v 8.40 26.12 -9.89 +v 8.24 26.07 -10.53 +v 8.24 26.21 -10.53 +v 8.50 27.21 -10.13 +v 8.50 26.25 -10.13 +v 8.61 27.30 -9.91 +v 8.51 27.30 -9.90 +v 8.49 26.12 -11.21 +v 8.39 26.12 -11.20 +v 8.43 27.21 -10.12 +v 8.35 26.24 -10.97 +v 8.43 26.25 -10.12 +v 8.35 26.21 -10.54 +v 8.51 26.26 -9.90 +v 8.61 26.26 -9.91 +v 8.49 26.26 -11.21 +v 8.39 26.26 -11.20 +v 8.32 26.12 -11.30 +v 8.32 26.26 -11.30 +v 8.45 26.26 -9.78 +v 8.45 26.12 -9.78 +v 13.04 12.70 -6.81 +v 13.04 14.28 -5.99 +v 12.09 14.28 -5.99 +v 12.09 12.70 -6.81 +v 13.04 17.34 -6.74 +v 13.04 17.34 -5.64 +v 12.09 17.34 -5.64 +v 12.09 17.34 -6.74 +v 8.98 12.70 -12.20 +v 8.27 14.28 -12.61 +v 8.74 14.28 -13.43 +v 9.46 12.70 -13.02 +v 8.92 17.34 -12.24 +v 7.97 17.34 -12.79 +v 8.44 17.34 -13.61 +v 9.39 17.34 -13.06 +v 12.09 12.70 -14.54 +v 12.09 14.28 -15.36 +v 13.04 14.28 -15.36 +v 13.04 12.70 -14.54 +v 12.09 17.34 -14.62 +v 12.09 17.34 -15.71 +v 13.04 17.34 -15.71 +v 13.04 17.34 -14.62 +v 10.73 23.34 -7.35 +v 10.25 24.92 -6.67 +v 9.48 24.92 -7.22 +v 9.95 23.34 -7.89 +v 10.95 28.41 -7.65 +v 10.32 28.41 -6.74 +v 9.55 28.41 -7.29 +v 10.18 28.41 -8.19 +v 9.46 12.70 -8.34 +v 8.74 14.28 -7.92 +v 8.27 14.28 -8.74 +v 8.98 12.70 -9.15 +v 9.39 17.34 -8.30 +v 8.44 17.34 -7.75 +v 7.97 17.34 -8.57 +v 8.92 17.34 -9.12 +v 7.23 20.21 -10.98 +v 7.23 19.23 -10.98 +v 7.22 19.21 -10.55 +v 7.22 20.52 -10.55 +v 7.32 19.26 -11.32 +v 7.32 19.12 -11.32 +v 7.22 19.12 -11.31 +v 7.22 19.26 -11.31 +v 7.24 20.75 -10.55 +v 7.29 20.29 -11.21 +v 7.19 20.29 -11.20 +v 7.15 20.75 -10.54 +v 7.45 19.12 -9.80 +v 7.45 19.26 -9.80 +v 7.35 19.26 -9.79 +v 7.35 19.12 -9.79 +v 7.24 19.07 -10.55 +v 7.41 19.12 -9.91 +v 7.31 19.12 -9.90 +v 7.15 19.07 -10.54 +v 7.09 19.12 -11.19 +v 7.05 19.23 -10.96 +v 7.09 19.26 -11.19 +v 7.15 20.21 -10.97 +v 7.15 20.52 -10.54 +v 7.20 19.26 -9.89 +v 7.12 19.24 -10.11 +v 7.20 19.12 -9.89 +v 7.04 19.07 -10.53 +v 7.04 19.21 -10.53 +v 7.30 20.21 -10.13 +v 7.30 19.24 -10.13 +v 7.41 20.29 -9.91 +v 7.31 20.29 -9.90 +v 7.29 19.12 -11.21 +v 7.19 19.12 -11.20 +v 7.23 20.21 -10.12 +v 7.15 19.23 -10.97 +v 7.23 19.24 -10.12 +v 7.15 19.21 -10.54 +v 7.31 19.26 -9.90 +v 7.41 19.26 -9.91 +v 7.29 19.26 -11.21 +v 7.19 19.26 -11.20 +v 7.11 19.12 -11.30 +v 7.11 19.26 -11.30 +v 7.25 19.26 -9.78 +v 7.25 19.12 -9.78 +v 12.26 27.21 -6.54 +v 12.26 26.24 -6.54 +v 12.69 26.21 -6.53 +v 12.69 27.52 -6.53 +v 11.92 26.26 -6.63 +v 11.92 26.12 -6.63 +v 11.93 26.12 -6.53 +v 11.93 26.26 -6.53 +v 12.69 27.75 -6.56 +v 12.03 27.30 -6.60 +v 12.04 27.30 -6.51 +v 12.70 27.75 -6.46 +v 13.44 26.12 -6.76 +v 13.44 26.26 -6.76 +v 13.45 26.26 -6.67 +v 13.45 26.12 -6.67 +v 12.69 26.07 -6.56 +v 13.34 26.12 -6.72 +v 13.34 26.12 -6.62 +v 12.70 26.07 -6.46 +v 12.05 26.12 -6.40 +v 12.28 26.24 -6.36 +v 12.05 26.26 -6.40 +v 12.27 27.21 -6.47 +v 12.70 27.52 -6.46 +v 13.35 26.26 -6.51 +v 13.13 26.25 -6.43 +v 13.35 26.12 -6.51 +v 12.71 26.07 -6.35 +v 12.71 26.21 -6.35 +v 13.12 27.21 -6.61 +v 13.12 26.25 -6.61 +v 13.34 27.30 -6.72 +v 13.34 27.30 -6.62 +v 12.03 26.12 -6.60 +v 12.04 26.12 -6.51 +v 13.12 27.21 -6.54 +v 12.27 26.24 -6.47 +v 13.12 26.25 -6.54 +v 12.70 26.21 -6.46 +v 13.34 26.26 -6.62 +v 13.34 26.26 -6.72 +v 12.03 26.26 -6.60 +v 12.04 26.26 -6.51 +v 11.94 26.12 -6.43 +v 11.94 26.26 -6.43 +v 13.46 26.26 -6.56 +v 13.46 26.12 -6.56 +v 16.15 12.70 -9.15 +v 16.86 14.28 -8.74 +v 16.39 14.28 -7.92 +v 15.67 12.70 -8.34 +v 16.21 17.34 -9.12 +v 17.17 17.34 -8.57 +v 16.69 17.34 -7.75 +v 15.74 17.34 -8.30 +v 12.26 20.21 -5.34 +v 12.26 19.23 -5.34 +v 12.69 19.21 -5.33 +v 12.69 20.52 -5.33 +v 11.92 19.26 -5.43 +v 11.92 19.12 -5.43 +v 11.93 19.12 -5.33 +v 11.93 19.26 -5.33 +v 12.69 20.75 -5.36 +v 12.03 20.29 -5.40 +v 12.04 20.29 -5.30 +v 12.70 20.75 -5.26 +v 13.44 19.12 -5.56 +v 13.44 19.26 -5.56 +v 13.45 19.26 -5.47 +v 13.45 19.12 -5.47 +v 12.69 19.07 -5.36 +v 13.34 19.12 -5.52 +v 13.34 19.12 -5.42 +v 12.70 19.07 -5.26 +v 12.05 19.12 -5.20 +v 12.28 19.23 -5.16 +v 12.05 19.26 -5.20 +v 12.27 20.21 -5.26 +v 12.70 20.52 -5.26 +v 13.35 19.26 -5.31 +v 13.13 19.24 -5.23 +v 13.35 19.12 -5.31 +v 12.71 19.07 -5.15 +v 12.71 19.21 -5.15 +v 13.12 20.21 -5.41 +v 13.12 19.24 -5.41 +v 13.34 20.29 -5.52 +v 13.34 20.29 -5.42 +v 12.03 19.12 -5.40 +v 12.04 19.12 -5.30 +v 13.12 20.21 -5.34 +v 12.27 19.23 -5.26 +v 13.12 19.24 -5.34 +v 12.70 19.21 -5.26 +v 13.34 19.26 -5.42 +v 13.34 19.26 -5.52 +v 12.03 19.26 -5.40 +v 12.04 19.26 -5.30 +v 11.94 19.12 -5.23 +v 11.94 19.26 -5.23 +v 13.46 19.26 -5.36 +v 13.46 19.12 -5.36 +v 15.89 23.34 -8.84 +v 16.57 24.92 -8.36 +v 16.03 24.92 -7.59 +v 15.35 23.34 -8.06 +v 15.60 28.41 -9.06 +v 16.50 28.41 -8.43 +v 15.96 28.41 -7.66 +v 15.06 28.41 -8.29 +v 16.70 27.21 -10.37 +v 16.70 26.24 -10.37 +v 16.71 26.21 -10.80 +v 16.71 27.52 -10.80 +v 16.61 26.26 -10.03 +v 16.61 26.12 -10.03 +v 16.71 26.12 -10.04 +v 16.71 26.26 -10.04 +v 16.69 27.75 -10.80 +v 16.64 27.30 -10.15 +v 16.74 27.30 -10.15 +v 16.78 27.75 -10.81 +v 16.48 26.12 -11.55 +v 16.48 26.26 -11.55 +v 16.58 26.26 -11.56 +v 16.58 26.12 -11.56 +v 16.69 26.07 -10.80 +v 16.53 26.12 -11.45 +v 16.62 26.12 -11.45 +v 16.78 26.07 -10.81 +v 16.84 26.12 -10.16 +v 16.88 26.24 -10.39 +v 16.84 26.26 -10.16 +v 16.78 27.21 -10.38 +v 16.78 27.52 -10.81 +v 16.73 26.26 -11.46 +v 16.81 26.25 -11.24 +v 16.73 26.12 -11.46 +v 16.89 26.07 -10.82 +v 16.89 26.21 -10.82 +v 16.63 27.21 -11.23 +v 16.63 26.25 -11.23 +v 16.53 27.30 -11.45 +v 16.62 27.30 -11.45 +v 16.64 26.12 -10.15 +v 16.74 26.12 -10.15 +v 16.70 27.21 -11.23 +v 16.78 26.24 -10.38 +v 16.70 26.25 -11.23 +v 16.78 26.21 -10.81 +v 16.62 26.26 -11.45 +v 16.53 26.26 -11.45 +v 16.64 26.26 -10.15 +v 16.74 26.26 -10.15 +v 16.82 26.12 -10.05 +v 16.82 26.26 -10.05 +v 16.68 26.26 -11.57 +v 16.68 26.12 -11.57 +v 15.67 12.70 -13.02 +v 16.39 14.28 -13.43 +v 16.86 14.28 -12.61 +v 16.15 12.70 -12.20 +v 15.74 17.34 -13.06 +v 16.69 17.34 -13.61 +v 17.17 17.34 -12.79 +v 16.21 17.34 -12.24 +v 16.83 28.50 -13.14 +v 16.83 30.29 -13.14 +v 17.49 30.29 -10.68 +v 17.49 28.50 -10.68 +v 15.03 28.50 -14.94 +v 15.03 30.29 -14.94 +v 12.57 28.50 -15.60 +v 12.57 30.29 -15.60 +v 10.10 28.50 -14.94 +v 10.10 30.29 -14.94 +v 8.30 28.50 -13.14 +v 8.30 30.29 -13.14 +v 7.64 28.50 -10.68 +v 7.64 30.29 -10.68 +v 8.30 28.50 -8.21 +v 8.30 30.29 -8.21 +v 10.10 28.50 -6.41 +v 10.10 30.29 -6.41 +v 12.57 28.50 -5.75 +v 12.57 30.29 -5.75 +v 15.03 28.50 -6.41 +v 15.03 30.29 -6.41 +v 16.83 28.50 -8.21 +v 16.83 30.29 -8.21 +v 16.21 30.29 -12.78 +v 16.78 30.29 -10.68 +v 15.03 30.90 -14.94 +v 14.67 30.90 -14.32 +v 16.21 30.90 -12.78 +v 16.83 30.90 -13.14 +v 12.57 30.29 -14.89 +v 14.67 30.29 -14.32 +v 10.10 30.90 -14.94 +v 10.46 30.90 -14.32 +v 12.57 30.90 -14.89 +v 12.57 30.90 -15.60 +v 8.92 30.29 -12.78 +v 10.46 30.29 -14.32 +v 7.64 30.90 -10.68 +v 8.36 30.90 -10.68 +v 8.92 30.90 -12.78 +v 8.30 30.90 -13.14 +v 8.92 30.29 -8.57 +v 8.36 30.29 -10.68 +v 10.10 30.90 -6.41 +v 10.46 30.90 -7.03 +v 8.92 30.90 -8.57 +v 8.30 30.90 -8.21 +v 12.57 30.29 -6.47 +v 10.46 30.29 -7.03 +v 15.03 30.90 -6.41 +v 14.67 30.90 -7.03 +v 12.57 30.90 -6.47 +v 12.57 30.90 -5.75 +v 16.21 30.29 -8.57 +v 14.67 30.29 -7.03 +v 17.49 30.90 -10.68 +v 16.78 30.90 -10.68 +v 16.21 30.90 -8.57 +v 16.83 30.90 -8.21 +v 16.21 29.42 -12.78 +v 16.78 29.42 -10.68 +v 14.67 29.42 -14.32 +v 12.57 29.42 -14.89 +v 10.46 29.42 -14.32 +v 8.92 29.42 -12.78 +v 8.36 29.42 -10.68 +v 8.92 29.42 -8.57 +v 10.46 29.42 -7.03 +v 12.57 29.42 -6.47 +v 14.67 29.42 -7.03 +v 16.21 29.42 -8.57 +v 12.57 29.42 -10.68 +# 4553 vertices + +vn -1.00 0.00 -0.00 +vn -0.48 0.00 -0.88 +vn -0.17 0.00 -0.99 +vn 0.00 0.00 -1.00 +vn 0.17 0.00 -0.99 +vn 0.48 0.00 -0.88 +vn 1.00 0.00 -0.00 +vn 0.48 0.00 0.88 +vn 0.17 0.00 0.99 +vn 0.00 0.00 1.00 +vn -0.17 0.00 0.99 +vn -0.48 0.00 0.88 +vn -0.73 0.00 -0.69 +vn -0.27 0.00 -0.96 +vn -0.08 0.00 -1.00 +vn 0.08 0.00 -1.00 +vn 0.27 0.00 -0.96 +vn 0.73 0.00 -0.69 +vn 0.73 0.00 0.69 +vn 0.27 0.00 0.96 +vn 0.08 0.00 1.00 +vn -0.08 0.00 1.00 +vn -0.27 0.00 0.96 +vn -0.73 0.00 0.69 +vn -0.72 0.00 0.69 +vn 0.00 -1.00 -0.00 +vn 0.00 1.00 -0.00 +vn -0.60 0.56 -0.57 +vn -0.26 0.33 -0.91 +vn -0.07 0.25 -0.96 +vn 0.07 0.25 -0.96 +vn 0.26 0.33 -0.91 +vn 0.60 0.56 -0.57 +vn 0.60 0.56 0.57 +vn 0.26 0.33 0.91 +vn 0.07 0.25 0.96 +vn -0.07 0.25 0.96 +vn -0.26 0.33 0.91 +vn -0.60 0.56 0.57 +vn -0.73 0.01 -0.69 +vn -0.27 0.01 -0.96 +vn -0.08 0.01 -1.00 +vn -0.07 0.01 -1.00 +vn 0.08 0.01 -1.00 +vn 0.27 0.01 -0.96 +vn 0.73 0.01 -0.69 +vn 0.72 0.01 0.69 +vn 0.73 0.01 0.69 +vn 0.27 0.01 0.96 +vn 0.08 0.01 1.00 +vn -0.08 0.01 1.00 +vn -0.07 0.01 1.00 +vn -0.27 0.01 0.96 +vn -0.73 0.01 0.69 +vn -0.72 0.01 0.69 +vn -0.30 -0.91 -0.29 +vn -0.18 -0.75 -0.64 +vn -0.18 -0.74 -0.64 +vn -0.06 -0.65 -0.76 +vn 0.06 -0.65 -0.76 +vn 0.18 -0.75 -0.64 +vn 0.18 -0.74 -0.64 +vn 0.30 -0.91 -0.29 +vn 0.30 -0.91 0.29 +vn 0.18 -0.74 0.64 +vn 0.18 -0.75 0.64 +vn 0.06 -0.65 0.76 +vn -0.06 -0.65 0.76 +vn -0.18 -0.74 0.64 +vn -0.18 -0.75 0.64 +vn -0.30 -0.91 0.29 +vn -1.00 0.00 0.06 +vn -0.02 0.00 1.00 +vn -0.02 0.65 0.76 +vn 0.02 0.00 -1.00 +vn 0.00 -0.99 -0.12 +vn -0.85 0.00 0.52 +vn -0.95 0.12 0.30 +vn -0.62 0.00 -0.78 +vn -0.76 -0.16 -0.63 +vn -0.83 0.00 -0.56 +vn 0.02 0.66 -0.75 +vn -0.00 -0.99 0.12 +vn -0.72 0.09 -0.69 +vn -0.96 -0.21 0.19 +vn 0.02 -0.64 -0.77 +vn -0.02 -0.64 0.77 +vn -0.00 0.99 0.13 +vn 0.00 1.00 -0.10 +vn 0.00 0.99 -0.17 +vn 0.01 0.99 -0.17 +vn -0.00 0.99 0.10 +vn -0.74 0.00 0.67 +vn -0.75 0.00 0.67 +vn -0.54 0.00 -0.84 +vn -0.00 0.00 -1.00 +vn -0.96 0.00 -0.29 +vn -0.95 0.00 -0.30 +vn -0.31 0.95 -0.10 +vn 0.95 0.00 0.30 +vn 0.96 0.00 0.29 +vn 0.03 -1.00 0.01 +vn -0.05 0.00 -1.00 +vn -0.03 0.04 -1.00 +vn 0.10 0.00 -1.00 +vn 0.07 -0.06 -1.00 +vn 0.05 0.00 -1.00 +vn 0.31 0.95 0.10 +vn -0.04 -1.00 -0.01 +vn 0.08 0.04 -1.00 +vn -0.02 -0.06 -1.00 +vn 0.32 -0.94 0.10 +vn -0.32 -0.94 -0.10 +vn -0.04 1.00 -0.01 +vn 0.03 1.00 0.01 +vn 0.05 1.00 0.01 +vn -0.03 1.00 -0.01 +vn -0.07 0.00 -1.00 +vn 0.12 0.00 -0.99 +vn 0.33 -0.45 -0.83 +vn 0.19 -0.00 0.98 +vn 0.37 0.03 -0.93 +vn -0.19 0.00 -0.98 +vn -0.01 0.00 -1.00 +vn -0.96 0.00 -0.30 +vn 0.31 0.95 0.09 +vn -0.18 -0.35 -0.92 +vn 0.37 -0.00 -0.93 +vn -0.19 0.02 -0.98 +vn -0.37 0.00 0.93 +vn 1.00 0.00 -0.06 +vn 0.02 0.65 -0.76 +vn 0.85 0.00 -0.52 +vn 0.95 0.12 -0.30 +vn 0.62 0.00 0.78 +vn 0.76 -0.16 0.63 +vn 0.83 0.00 0.56 +vn 0.82 0.00 0.57 +vn -0.02 0.66 0.75 +vn 0.72 0.09 0.69 +vn 0.96 -0.21 -0.19 +vn 0.00 0.99 -0.13 +vn -0.00 1.00 0.10 +vn -0.00 0.99 0.17 +vn 0.00 0.99 -0.10 +vn 0.75 0.00 -0.67 +vn 0.54 0.00 0.84 +vn 0.00 -0.30 0.95 +vn 0.00 -0.07 1.00 +vn 0.38 -0.49 -0.78 +vn 0.16 0.00 0.99 +vn 0.44 -0.12 -0.89 +vn -0.16 0.00 -0.99 +vn 0.00 -0.30 -0.95 +vn 0.00 -0.07 -1.00 +vn 0.18 -0.35 0.92 +vn -0.37 -0.00 0.93 +vn 0.19 0.02 0.98 +vn 0.37 0.00 -0.93 +vn 0.38 -0.49 0.78 +vn -0.16 0.00 0.99 +vn 0.44 -0.12 0.89 +vn 0.16 0.00 -0.99 +vn 0.01 0.00 1.00 +vn 0.96 0.00 0.30 +vn -0.03 -1.00 -0.01 +vn 0.05 0.00 1.00 +vn 0.03 0.04 1.00 +vn -0.10 0.00 1.00 +vn -0.07 -0.06 1.00 +vn -0.05 0.00 1.00 +vn -0.31 0.95 -0.09 +vn 0.04 -1.00 0.01 +vn -0.08 0.04 1.00 +vn 0.02 -0.06 1.00 +vn 0.04 1.00 0.01 +vn -0.05 1.00 -0.02 +vn 0.07 0.00 1.00 +vn -0.12 0.00 0.99 +vn -0.38 -0.49 0.78 +vn -0.44 -0.12 0.89 +vn -0.43 -0.12 0.89 +vn -0.33 -0.45 0.83 +vn -0.19 -0.00 -0.98 +vn -0.37 0.03 0.93 +vn 0.19 0.00 0.98 +vn -0.38 -0.49 -0.78 +vn -0.44 -0.12 -0.89 +vn -0.43 -0.12 -0.89 +vn 0.72 0.00 0.69 +vn -0.07 0.00 1.00 +vn -0.72 0.00 -0.69 +vn 0.07 0.00 -1.00 +vn 0.72 0.00 -0.69 +vn 0.44 0.00 -0.90 +vn 0.44 0.00 0.90 +vn -0.44 0.00 0.90 +vn -0.44 0.00 -0.90 +vn 0.50 0.87 -0.00 +vn 0.00 0.45 -0.89 +vn -0.50 0.87 -0.00 +vn 0.00 0.42 0.91 +vn 0.08 1.00 -0.00 +vn 0.04 0.55 0.83 +vn -0.00 0.55 0.83 +vn 0.01 0.01 1.00 +vn -0.00 0.55 -0.83 +vn 0.04 0.55 -0.83 +vn 0.01 0.01 -1.00 +vn -0.08 1.00 -0.00 +vn -0.04 0.55 0.83 +vn -0.01 0.01 1.00 +vn -0.04 0.55 -0.83 +vn -0.01 0.01 -1.00 +vn -0.06 0.60 -0.79 +vn -0.91 -0.41 0.00 +vn -0.10 0.98 -0.19 +vn -0.06 0.60 0.79 +vn -0.91 -0.41 -0.00 +vn -0.10 0.98 0.19 +vn -0.05 0.61 -0.79 +vn -0.94 -0.35 -0.00 +vn -0.08 0.98 -0.19 +vn -0.05 0.61 0.79 +vn -0.08 0.98 0.19 +vn -0.04 0.61 -0.79 +vn -0.03 0.61 -0.79 +vn -0.97 -0.25 0.00 +vn -0.97 -0.25 -0.00 +vn -0.06 0.98 -0.19 +vn -0.04 0.61 0.79 +vn -0.03 0.61 0.79 +vn -0.06 0.98 0.19 +vn -0.01 0.61 -0.79 +vn -1.00 -0.07 -0.00 +vn -0.02 0.98 -0.19 +vn -0.01 0.61 0.79 +vn -0.02 0.98 0.19 +vn -1.00 -0.07 0.00 +vn -0.02 0.61 -0.79 +vn -0.99 -0.11 -0.00 +vn -0.02 0.61 0.79 +vn -0.99 -0.11 0.00 +vn 0.06 0.60 -0.79 +vn 0.91 -0.41 0.00 +vn 0.10 0.98 -0.19 +vn 0.06 0.60 0.79 +vn 0.91 -0.41 -0.00 +vn 0.10 0.98 0.19 +vn 0.05 0.61 -0.79 +vn 0.94 -0.35 -0.00 +vn 0.08 0.98 -0.19 +vn 0.05 0.61 0.79 +vn 0.94 -0.35 0.00 +vn 0.08 0.98 0.19 +vn 0.03 0.61 -0.79 +vn 0.04 0.61 -0.79 +vn 0.97 -0.25 0.00 +vn 0.06 0.98 -0.19 +vn 0.03 0.61 0.79 +vn 0.97 -0.25 -0.00 +vn 0.06 0.98 0.19 +vn 0.04 0.61 0.79 +vn 0.01 0.61 -0.79 +vn 1.00 -0.07 -0.00 +vn 0.02 0.98 -0.19 +vn 0.01 0.61 0.79 +vn 0.02 0.98 0.19 +vn 1.00 -0.07 0.00 +vn 0.02 0.61 -0.79 +vn 0.99 -0.11 -0.00 +vn 0.02 0.61 0.79 +vn 0.99 -0.11 0.00 +vn 0.10 0.98 -0.20 +vn 0.10 0.98 0.20 +vn 0.09 0.59 -0.80 +vn -0.82 0.57 0.00 +vn -0.82 0.57 -0.00 +vn 0.15 0.97 -0.20 +vn 0.09 0.59 0.80 +vn 0.15 0.97 0.20 +vn -0.09 0.59 -0.80 +vn 0.82 0.57 0.00 +vn -0.15 0.97 -0.20 +vn -0.09 0.59 0.80 +vn 0.82 0.57 -0.00 +vn -0.15 0.97 0.20 +vn -0.57 0.82 -0.00 +vn 0.08 -1.00 -0.00 +vn 0.57 0.82 -0.00 +vn -0.08 -1.00 -0.00 +vn 0.59 -0.81 -0.00 +vn -0.59 -0.81 -0.00 +vn 0.06 1.00 -0.00 +vn 0.10 0.99 -0.00 +vn -0.06 1.00 -0.00 +vn -0.07 -1.00 -0.00 +vn 0.07 -1.00 -0.00 +vn 0.00 0.37 0.93 +vn 0.00 -0.97 -0.26 +vn 0.00 0.37 -0.93 +vn 0.00 -0.97 0.26 +vn 0.00 -0.36 -0.93 +vn 0.00 -0.36 0.93 +vn 0.00 0.96 0.28 +vn 0.00 0.98 -0.21 +vn 0.00 0.94 -0.35 +vn 0.00 0.98 0.22 +vn 0.00 0.96 -0.28 +vn 0.00 0.98 0.21 +vn 0.00 0.94 0.35 +vn 0.00 0.98 -0.22 +vn 0.11 0.99 -0.00 +vn -0.10 0.99 -0.00 +vn 1.00 0.04 -0.00 +vn 0.87 0.50 -0.00 +vn -1.00 -0.04 -0.00 +vn -0.87 -0.50 -0.00 +vn 0.40 0.92 -0.00 +vn -0.42 -0.91 -0.00 +vn -0.40 0.92 -0.00 +vn 0.42 -0.91 -0.00 +vn -0.87 0.50 -0.00 +vn 0.87 -0.50 -0.00 +vn -1.00 0.04 -0.00 +vn 1.00 -0.04 -0.00 +vn 0.02 0.05 -1.00 +vn 0.95 -0.05 0.30 +vn -0.02 -0.01 1.00 +vn -0.94 0.18 -0.29 +vn 0.03 -0.06 -1.00 +vn 0.02 -0.06 -1.00 +vn 0.96 0.05 0.27 +vn -0.02 0.01 1.00 +vn -0.96 -0.22 -0.19 +vn 0.00 -1.00 -0.05 +vn 0.00 1.00 0.05 +vn 0.00 -1.00 0.05 +vn 0.00 1.00 -0.05 +vn 0.02 -1.00 -0.00 +vn -0.02 1.00 -0.00 +vn -0.01 1.00 -0.00 +vn -0.01 -1.00 -0.00 +vn 0.01 1.00 -0.00 +vn 0.02 0.05 1.00 +vn 0.95 -0.05 -0.30 +vn -0.02 -0.01 -1.00 +vn -0.94 0.18 0.29 +vn 0.03 -0.06 1.00 +vn 0.96 0.05 -0.27 +vn -0.02 0.01 -1.00 +vn -0.96 -0.22 0.19 +vn -0.96 -0.22 0.18 +vn 0.01 -1.00 -0.00 +vn -0.02 -1.00 -0.00 +vn 0.02 1.00 -0.00 +vn -0.99 0.12 -0.00 +vn -1.00 0.01 0.04 +vn -0.99 -0.10 0.07 +vn 0.00 0.01 1.00 +vn 0.00 -0.00 1.00 +vn 1.00 0.01 0.01 +vn 1.00 -0.03 0.02 +vn 0.00 0.04 -1.00 +vn 0.00 0.01 -1.00 +vn 0.00 -0.02 -1.00 +vn 0.13 -0.99 -0.00 +vn -0.13 0.99 -0.00 +vn -0.13 -0.99 -0.00 +vn 0.13 0.99 -0.00 +vn -0.07 1.00 -0.00 +vn 0.07 1.00 -0.00 +vn 0.00 -0.67 -0.74 +vn 0.00 -0.13 -0.99 +vn 0.00 0.67 -0.74 +vn 0.00 0.13 -0.99 +vn 0.00 0.12 -0.99 +vn -1.00 0.01 -0.04 +vn -0.99 -0.10 -0.07 +vn 0.00 -0.00 -1.00 +vn 1.00 0.01 -0.01 +vn 1.00 -0.03 -0.02 +vn 0.00 0.04 1.00 +vn 0.00 -0.02 1.00 +vn 0.72 0.01 -0.69 +vn -0.72 0.01 -0.69 +vn -1.00 0.00 -0.06 +vn -0.02 0.00 -1.00 +vn -0.02 0.65 -0.76 +vn 0.02 0.00 1.00 +vn 0.00 -0.99 0.12 +vn -0.85 0.00 -0.52 +vn -0.95 0.12 -0.30 +vn -0.62 0.00 0.78 +vn -0.76 -0.16 0.63 +vn -0.83 0.00 0.56 +vn 0.02 0.66 0.75 +vn -0.00 -0.99 -0.12 +vn -0.72 0.09 0.69 +vn -0.96 -0.21 -0.19 +vn 0.02 -0.64 0.77 +vn -0.02 -0.64 -0.77 +vn -0.00 0.99 -0.13 +vn 0.00 1.00 0.10 +vn 0.00 0.99 0.17 +vn 0.01 0.99 0.17 +vn -0.00 0.99 -0.10 +vn -0.74 0.00 -0.67 +vn -0.75 0.00 -0.67 +vn -0.54 0.00 0.84 +vn -0.00 0.00 1.00 +vn -0.96 0.00 0.29 +vn -0.95 0.00 0.30 +vn -0.31 0.95 0.10 +vn 0.95 0.00 -0.30 +vn 0.96 0.00 -0.29 +vn 0.03 -1.00 -0.01 +vn -0.03 0.04 1.00 +vn 0.10 0.00 1.00 +vn 0.07 -0.06 1.00 +vn 0.31 0.95 -0.10 +vn -0.04 -1.00 0.01 +vn 0.08 0.04 1.00 +vn -0.02 -0.06 1.00 +vn 0.32 -0.94 -0.10 +vn -0.32 -0.94 0.10 +vn -0.04 1.00 0.01 +vn 0.03 1.00 -0.01 +vn 0.05 1.00 -0.01 +vn -0.03 1.00 0.01 +vn 0.12 0.00 0.99 +vn 0.33 -0.45 0.83 +vn 0.19 -0.00 -0.98 +vn 0.37 0.03 0.93 +vn -0.19 0.00 0.98 +vn -0.01 0.00 1.00 +vn -0.96 0.00 0.30 +vn 0.31 0.95 -0.09 +vn -0.18 -0.35 0.92 +vn 0.37 -0.00 0.93 +vn -0.19 0.02 0.98 +vn -0.37 0.00 -0.93 +vn 1.00 0.00 0.06 +vn 0.02 0.65 0.76 +vn 0.85 0.00 0.52 +vn 0.95 0.12 0.30 +vn 0.62 0.00 -0.78 +vn 0.76 -0.16 -0.63 +vn 0.83 0.00 -0.56 +vn 0.82 0.00 -0.57 +vn -0.02 0.66 -0.75 +vn 0.72 0.09 -0.69 +vn 0.96 -0.21 0.19 +vn 0.00 0.99 0.13 +vn -0.00 1.00 -0.10 +vn -0.00 0.99 -0.17 +vn 0.00 0.99 0.10 +vn 0.75 0.00 0.67 +vn 0.54 0.00 -0.84 +vn 0.18 -0.35 -0.92 +vn -0.37 -0.00 -0.93 +vn 0.19 0.02 -0.98 +vn 0.37 0.00 0.93 +vn 0.01 0.00 -1.00 +vn 0.96 0.00 -0.30 +vn -0.03 -1.00 0.01 +vn 0.03 0.04 -1.00 +vn -0.10 0.00 -1.00 +vn -0.07 -0.06 -1.00 +vn -0.31 0.95 0.09 +vn 0.04 -1.00 -0.01 +vn -0.08 0.04 -1.00 +vn 0.04 1.00 -0.01 +vn -0.05 1.00 0.02 +vn -0.12 0.00 -0.99 +vn -0.33 -0.45 -0.83 +vn -0.19 -0.00 0.98 +vn -0.37 0.03 -0.93 +vn 0.19 0.00 -0.98 +vn 0.74 0.00 -0.67 +vn -0.05 1.00 -0.01 +vn -0.82 0.00 -0.57 +vn 0.05 1.00 0.02 +vn 0.74 0.00 0.67 +vn -0.05 1.00 0.01 +vn -0.82 0.00 0.57 +vn 0.05 1.00 -0.02 +# 487 vertex normals + +vt 0.10 0.10 0.00 +vt 0.07 0.10 0.00 +vt 0.07 0.01 0.00 +vt 0.10 0.01 0.00 +vt 0.05 0.10 0.00 +vt 0.05 0.01 0.00 +vt 0.02 0.10 0.00 +vt 0.02 0.01 0.00 +vt 0.38 0.10 0.00 +vt 0.35 0.10 0.00 +vt 0.35 0.01 0.00 +vt 0.38 0.01 0.00 +vt 0.32 0.10 0.00 +vt 0.32 0.01 0.00 +vt 0.29 0.10 0.00 +vt 0.29 0.01 0.00 +vt 0.27 0.10 0.00 +vt 0.27 0.01 0.00 +vt 0.24 0.10 0.00 +vt 0.24 0.01 0.00 +vt 0.21 0.10 0.00 +vt 0.21 0.01 0.00 +vt 0.17 0.10 0.00 +vt 0.17 0.01 0.00 +vt 0.13 0.10 0.00 +vt 0.13 0.01 0.00 +vt 0.34 0.56 0.00 +vt 0.37 0.56 0.00 +vt 0.37 0.57 0.00 +vt 0.34 0.57 0.00 +vt 0.30 0.56 0.00 +vt 0.30 0.57 0.00 +vt 0.27 0.56 0.00 +vt 0.27 0.57 0.00 +vt 0.61 0.56 0.00 +vt 0.64 0.56 0.00 +vt 0.64 0.57 0.00 +vt 0.61 0.57 0.00 +vt 0.58 0.56 0.00 +vt 0.58 0.57 0.00 +vt 0.55 0.56 0.00 +vt 0.55 0.57 0.00 +vt 0.52 0.56 0.00 +vt 0.52 0.57 0.00 +vt 0.49 0.56 0.00 +vt 0.49 0.57 0.00 +vt 0.46 0.56 0.00 +vt 0.46 0.57 0.00 +vt 0.43 0.56 0.00 +vt 0.43 0.57 0.00 +vt 0.40 0.56 0.00 +vt 0.40 0.57 0.00 +vt 0.97 0.27 0.00 +vt 0.96 0.28 0.00 +vt 0.94 0.27 0.00 +vt 0.93 0.26 0.00 +vt 0.93 0.25 0.00 +vt 0.93 0.24 0.00 +vt 0.93 0.23 0.00 +vt 0.94 0.23 0.00 +vt 0.94 0.22 0.00 +vt 0.96 0.22 0.00 +vt 0.97 0.23 0.00 +vt 0.97 0.22 0.00 +vt 0.98 0.24 0.00 +vt 0.98 0.23 0.00 +vt 0.99 0.25 0.00 +vt 0.98 0.26 0.00 +vt 0.81 0.06 0.00 +vt 0.81 0.16 0.00 +vt 0.78 0.16 0.00 +vt 0.78 0.06 0.00 +vt 0.76 0.16 0.00 +vt 0.76 0.06 0.00 +vt 0.73 0.16 0.00 +vt 0.73 0.06 0.00 +vt 0.71 0.16 0.00 +vt 0.71 0.06 0.00 +vt 0.69 0.16 0.00 +vt 0.69 0.06 0.00 +vt 0.98 0.06 0.00 +vt 0.98 0.16 0.00 +vt 0.95 0.16 0.00 +vt 0.95 0.06 0.00 +vt 0.93 0.16 0.00 +vt 0.93 0.06 0.00 +vt 0.91 0.16 0.00 +vt 0.91 0.06 0.00 +vt 0.88 0.16 0.00 +vt 0.88 0.06 0.00 +vt 0.86 0.16 0.00 +vt 0.86 0.07 0.00 +vt 0.83 0.16 0.00 +vt 0.83 0.07 0.00 +vt 0.98 0.28 0.00 +vt 0.96 0.29 0.00 +vt 0.99 0.27 0.00 +vt 1.00 0.25 0.00 +vt 0.99 0.23 0.00 +vt 0.98 0.22 0.00 +vt 0.96 0.21 0.00 +vt 0.92 0.23 0.00 +vt 0.92 0.25 0.00 +vt 0.93 0.27 0.00 +vt 0.92 0.27 0.00 +vt 0.94 0.28 0.00 +vt 0.11 0.23 0.00 +vt 0.09 0.22 0.00 +vt 0.10 0.18 0.00 +vt 0.13 0.19 0.00 +vt 0.14 0.24 0.00 +vt 0.15 0.19 0.00 +vt 0.17 0.24 0.00 +vt 0.18 0.20 0.00 +vt 0.21 0.24 0.00 +vt 0.20 0.20 0.00 +vt 0.24 0.24 0.00 +vt 0.23 0.19 0.00 +vt 0.27 0.23 0.00 +vt 0.25 0.19 0.00 +vt 0.30 0.22 0.00 +vt 0.28 0.18 0.00 +vt 0.32 0.21 0.00 +vt 0.30 0.17 0.00 +vt 0.35 0.19 0.00 +vt 0.32 0.16 0.00 +vt 0.03 0.19 0.00 +vt 0.01 0.17 0.00 +vt 0.04 0.14 0.00 +vt 0.06 0.16 0.00 +vt 0.06 0.21 0.00 +vt 0.08 0.17 0.00 +vt 0.12 0.14 0.00 +vt 0.14 0.15 0.00 +vt 0.16 0.15 0.00 +vt 0.18 0.16 0.00 +vt 0.20 0.16 0.00 +vt 0.22 0.15 0.00 +vt 0.24 0.15 0.00 +vt 0.26 0.14 0.00 +vt 0.28 0.13 0.00 +vt 0.31 0.12 0.00 +vt 0.06 0.11 0.00 +vt 0.08 0.12 0.00 +vt 0.10 0.13 0.00 +vt 0.14 0.12 0.00 +vt 0.12 0.12 0.00 +vt 0.12 0.11 0.00 +vt 0.14 0.11 0.00 +vt 0.10 0.12 0.00 +vt 0.10 0.11 0.00 +vt 0.35 0.12 0.00 +vt 0.33 0.12 0.00 +vt 0.33 0.11 0.00 +vt 0.35 0.11 0.00 +vt 0.31 0.11 0.00 +vt 0.29 0.12 0.00 +vt 0.29 0.11 0.00 +vt 0.27 0.12 0.00 +vt 0.27 0.11 0.00 +vt 0.24 0.12 0.00 +vt 0.24 0.11 0.00 +vt 0.22 0.12 0.00 +vt 0.22 0.11 0.00 +vt 0.20 0.12 0.00 +vt 0.20 0.11 0.00 +vt 0.18 0.12 0.00 +vt 0.18 0.11 0.00 +vt 0.16 0.12 0.00 +vt 0.16 0.11 0.00 +vt 0.67 0.06 0.00 +vt 0.64 0.06 0.00 +vt 0.64 0.01 0.00 +vt 0.67 0.01 0.00 +vt 0.60 0.06 0.00 +vt 0.60 0.01 0.00 +vt 0.99 0.06 0.00 +vt 0.96 0.06 0.00 +vt 0.96 0.01 0.00 +vt 0.99 0.01 0.00 +vt 0.93 0.01 0.00 +vt 0.89 0.06 0.00 +vt 0.89 0.01 0.00 +vt 0.86 0.06 0.00 +vt 0.86 0.01 0.00 +vt 0.83 0.06 0.00 +vt 0.83 0.01 0.00 +vt 0.80 0.06 0.00 +vt 0.80 0.01 0.00 +vt 0.77 0.06 0.00 +vt 0.77 0.01 0.00 +vt 0.73 0.01 0.00 +vt 0.70 0.06 0.00 +vt 0.70 0.01 0.00 +vt 0.95 0.87 0.00 +vt 0.93 0.89 0.00 +vt 0.92 0.82 0.00 +vt 0.95 0.82 0.00 +vt 0.92 0.79 0.00 +vt 0.90 0.79 0.00 +vt 0.90 0.77 0.00 +vt 0.92 0.77 0.00 +vt 0.99 0.56 0.00 +vt 0.98 0.56 0.00 +vt 0.98 0.52 0.00 +vt 0.99 0.52 0.00 +vt 0.93 0.78 0.00 +vt 0.96 0.78 0.00 +vt 0.96 0.79 0.00 +vt 0.96 0.81 0.00 +vt 0.94 0.81 0.00 +vt 0.93 0.90 0.00 +vt 0.95 0.88 0.00 +vt 0.96 0.88 0.00 +vt 0.89 0.79 0.00 +vt 0.89 0.81 0.00 +vt 0.90 0.87 0.00 +vt 0.90 0.82 0.00 +vt 0.99 0.60 0.00 +vt 0.98 0.60 0.00 +vt 0.99 0.66 0.00 +vt 0.99 0.59 0.00 +vt 0.99 0.46 0.00 +vt 0.92 0.76 0.00 +vt 0.86 0.76 0.00 +vt 0.86 0.77 0.00 +vt 0.96 0.83 0.00 +vt 0.95 0.83 0.00 +vt 0.98 0.66 0.00 +vt 0.98 0.46 0.00 +vt 0.96 0.76 0.00 +vt 0.92 0.75 0.00 +vt 0.96 0.75 0.00 +vt 0.86 0.75 0.00 +vt 0.93 0.77 0.00 +vt 0.96 0.77 0.00 +vt 0.97 0.76 0.00 +vt 0.97 0.77 0.00 +vt 0.97 0.75 0.00 +vt 0.97 0.79 0.00 +vt 0.98 0.80 0.00 +vt 0.97 0.78 0.00 +vt 0.62 0.90 0.00 +vt 0.63 0.90 0.00 +vt 0.63 0.93 0.00 +vt 0.62 0.93 0.00 +vt 0.66 0.90 0.00 +vt 0.64 0.93 0.00 +vt 0.64 0.98 0.00 +vt 0.66 0.98 0.00 +vt 0.63 0.99 0.00 +vt 0.62 0.99 0.00 +vt 0.60 0.18 0.00 +vt 0.63 0.18 0.00 +vt 0.63 0.20 0.00 +vt 0.60 0.20 0.00 +vt 0.56 0.18 0.00 +vt 0.56 0.20 0.00 +vt 0.53 0.18 0.00 +vt 0.53 0.20 0.00 +vt 0.89 0.18 0.00 +vt 0.92 0.18 0.00 +vt 0.92 0.20 0.00 +vt 0.89 0.20 0.00 +vt 0.86 0.18 0.00 +vt 0.86 0.20 0.00 +vt 0.82 0.18 0.00 +vt 0.82 0.20 0.00 +vt 0.79 0.18 0.00 +vt 0.79 0.20 0.00 +vt 0.76 0.18 0.00 +vt 0.76 0.20 0.00 +vt 0.73 0.18 0.00 +vt 0.73 0.20 0.00 +vt 0.69 0.18 0.00 +vt 0.69 0.20 0.00 +vt 0.66 0.18 0.00 +vt 0.66 0.20 0.00 +vt 0.86 0.88 0.00 +vt 0.83 0.89 0.00 +vt 0.83 0.88 0.00 +vt 0.85 0.88 0.00 +vt 0.88 0.87 0.00 +vt 0.87 0.86 0.00 +vt 0.88 0.84 0.00 +vt 0.88 0.81 0.00 +vt 0.87 0.82 0.00 +vt 0.86 0.79 0.00 +vt 0.85 0.80 0.00 +vt 0.83 0.79 0.00 +vt 0.83 0.80 0.00 +vt 0.81 0.79 0.00 +vt 0.81 0.80 0.00 +vt 0.79 0.81 0.00 +vt 0.79 0.82 0.00 +vt 0.78 0.84 0.00 +vt 0.79 0.84 0.00 +vt 0.79 0.87 0.00 +vt 0.79 0.86 0.00 +vt 0.81 0.88 0.00 +vt 0.60 0.67 0.00 +vt 0.58 0.67 0.00 +vt 0.58 0.66 0.00 +vt 0.61 0.66 0.00 +vt 0.64 0.67 0.00 +vt 0.64 0.66 0.00 +vt 0.68 0.67 0.00 +vt 0.68 0.66 0.00 +vt 0.72 0.67 0.00 +vt 0.72 0.66 0.00 +vt 0.76 0.67 0.00 +vt 0.76 0.66 0.00 +vt 0.79 0.67 0.00 +vt 0.79 0.66 0.00 +vt 0.81 0.67 0.00 +vt 0.81 0.66 0.00 +vt 0.84 0.67 0.00 +vt 0.84 0.66 0.00 +vt 0.88 0.67 0.00 +vt 0.88 0.66 0.00 +vt 0.53 0.67 0.00 +vt 0.49 0.67 0.00 +vt 0.50 0.66 0.00 +vt 0.53 0.66 0.00 +vt 0.56 0.67 0.00 +vt 0.56 0.66 0.00 +vt 0.66 0.16 0.00 +vt 0.63 0.17 0.00 +vt 0.63 0.12 0.00 +vt 0.68 0.14 0.00 +vt 0.68 0.12 0.00 +vt 0.68 0.09 0.00 +vt 0.66 0.07 0.00 +vt 0.63 0.07 0.00 +vt 0.61 0.07 0.00 +vt 0.59 0.09 0.00 +vt 0.59 0.12 0.00 +vt 0.59 0.14 0.00 +vt 0.61 0.16 0.00 +vt 0.60 0.21 0.00 +vt 0.56 0.21 0.00 +vt 0.64 0.68 0.00 +vt 0.60 0.68 0.00 +vt 0.92 0.21 0.00 +vt 0.89 0.21 0.00 +vt 0.72 0.68 0.00 +vt 0.68 0.68 0.00 +vt 0.86 0.21 0.00 +vt 0.82 0.21 0.00 +vt 0.79 0.68 0.00 +vt 0.76 0.68 0.00 +vt 0.79 0.21 0.00 +vt 0.76 0.21 0.00 +vt 0.84 0.68 0.00 +vt 0.81 0.68 0.00 +vt 0.73 0.21 0.00 +vt 0.69 0.21 0.00 +vt 0.53 0.68 0.00 +vt 0.49 0.68 0.00 +vt 0.66 0.21 0.00 +vt 0.63 0.21 0.00 +vt 0.58 0.68 0.00 +vt 0.56 0.68 0.00 +vt 0.24 0.62 0.00 +vt 0.00 0.62 0.00 +vt 0.05 0.71 0.00 +vt 0.19 0.71 0.00 +vt 0.00 0.41 0.00 +vt 0.28 0.41 0.00 +vt 0.24 0.49 0.00 +vt 0.05 0.49 0.00 +vt 0.01 0.52 0.00 +vt 0.29 0.52 0.00 +vt 0.24 0.59 0.00 +vt 0.05 0.59 0.00 +vt 0.38 0.32 0.00 +vt 0.53 0.32 0.00 +vt 0.53 0.42 0.00 +vt 0.38 0.42 0.00 +vt 0.67 0.21 0.00 +vt 0.49 0.21 0.00 +vt 0.49 0.30 0.00 +vt 0.67 0.30 0.00 +vt 0.46 0.89 0.00 +vt 0.27 0.89 0.00 +vt 0.27 0.99 0.00 +vt 0.46 0.99 0.00 +vt 0.62 0.80 0.00 +vt 0.77 0.80 0.00 +vt 0.77 0.88 0.00 +vt 0.62 0.88 0.00 +vt 0.24 0.73 0.00 +vt 0.32 0.73 0.00 +vt 0.31 0.72 0.00 +vt 0.24 0.72 0.00 +vt 0.32 0.63 0.00 +vt 0.31 0.64 0.00 +vt 0.24 0.63 0.00 +vt 0.24 0.64 0.00 +vt 0.19 0.33 0.00 +vt 0.19 0.25 0.00 +vt 0.20 0.27 0.00 +vt 0.20 0.31 0.00 +vt 0.31 0.25 0.00 +vt 0.30 0.27 0.00 +vt 0.31 0.33 0.00 +vt 0.30 0.31 0.00 +vt 0.14 0.26 0.00 +vt 0.14 0.40 0.00 +vt 0.18 0.34 0.00 +vt 0.18 0.26 0.00 +vt 0.36 0.40 0.00 +vt 0.32 0.34 0.00 +vt 0.36 0.26 0.00 +vt 0.32 0.26 0.00 +vt 0.49 0.15 0.00 +vt 0.49 0.25 0.00 +vt 0.36 0.25 0.00 +vt 0.36 0.15 0.00 +vt 0.41 0.01 0.00 +vt 0.58 0.01 0.00 +vt 0.58 0.14 0.00 +vt 0.41 0.14 0.00 +vt 0.58 0.42 0.00 +vt 0.58 0.54 0.00 +vt 0.45 0.53 0.00 +vt 0.45 0.45 0.00 +vt 0.71 0.95 0.00 +vt 0.66 0.89 0.00 +vt 0.14 0.94 0.00 +vt 0.01 0.95 0.00 +vt 0.76 0.89 0.00 +vt 0.32 0.41 0.00 +vt 0.32 0.53 0.00 +vt 0.27 0.95 0.00 +vt 0.80 0.98 0.00 +vt 0.80 0.93 0.00 +vt 0.81 0.93 0.00 +vt 0.81 0.98 0.00 +vt 0.78 0.98 0.00 +vt 0.78 0.93 0.00 +vt 0.77 0.93 0.00 +vt 0.77 0.98 0.00 +vt 0.77 0.99 0.00 +vt 0.78 0.99 0.00 +vt 0.73 0.93 0.00 +vt 0.74 0.93 0.00 +vt 0.74 0.98 0.00 +vt 0.73 0.98 0.00 +vt 0.76 0.98 0.00 +vt 0.86 0.48 0.00 +vt 0.86 0.45 0.00 +vt 0.94 0.45 0.00 +vt 0.94 0.48 0.00 +vt 0.95 0.40 0.00 +vt 0.99 0.40 0.00 +vt 0.99 0.45 0.00 +vt 0.95 0.45 0.00 +vt 0.99 0.35 0.00 +vt 0.90 0.35 0.00 +vt 0.90 0.39 0.00 +vt 0.99 0.39 0.00 +vt 0.68 0.24 0.00 +vt 0.71 0.24 0.00 +vt 0.71 0.62 0.00 +vt 0.68 0.62 0.00 +vt 0.61 0.69 0.00 +vt 0.80 0.69 0.00 +vt 0.80 0.76 0.00 +vt 0.61 0.76 0.00 +vt 0.87 0.95 0.00 +vt 0.86 0.97 0.00 +vt 0.86 0.91 0.00 +vt 0.87 0.91 0.00 +vt 0.90 0.94 0.00 +vt 0.90 0.91 0.00 +vt 0.91 0.91 0.00 +vt 0.91 0.94 0.00 +vt 0.98 0.83 0.00 +vt 0.98 0.76 0.00 +vt 0.89 0.94 0.00 +vt 0.89 0.91 0.00 +vt 0.95 0.93 0.00 +vt 0.97 0.93 0.00 +vt 0.97 0.94 0.00 +vt 0.97 0.97 0.00 +vt 0.97 0.99 0.00 +vt 0.96 0.99 0.00 +vt 0.86 0.98 0.00 +vt 0.87 0.97 0.00 +vt 0.88 0.97 0.00 +vt 0.86 0.99 0.00 +vt 0.90 0.99 0.00 +vt 0.90 0.97 0.00 +vt 0.91 0.99 0.00 +vt 0.93 0.97 0.00 +vt 0.93 0.98 0.00 +vt 0.85 0.95 0.00 +vt 0.85 0.91 0.00 +vt 0.98 0.90 0.00 +vt 0.93 0.93 0.00 +vt 0.84 0.97 0.00 +vt 0.85 0.97 0.00 +vt 0.99 0.78 0.00 +vt 0.99 0.67 0.00 +vt 0.99 0.83 0.00 +vt 0.99 0.89 0.00 +vt 0.99 0.99 0.00 +vt 0.93 0.95 0.00 +vt 0.93 0.96 0.00 +vt 0.90 0.96 0.00 +vt 0.90 0.95 0.00 +vt 0.96 0.95 0.00 +vt 0.96 0.96 0.00 +vt 0.84 0.92 0.00 +vt 0.85 0.92 0.00 +vt 0.98 0.99 0.00 +vt 0.98 0.67 0.00 +vt 0.88 0.92 0.00 +vt 0.97 0.95 0.00 +vt 0.89 0.95 0.00 +vt 0.95 0.92 0.00 +vt 0.97 0.92 0.00 +vt 0.93 0.92 0.00 +vt 0.98 0.95 0.00 +vt 0.98 0.96 0.00 +vt 0.97 0.96 0.00 +vt 0.98 0.94 0.00 +vt 0.89 0.99 0.00 +vt 0.89 0.97 0.00 +vt 0.88 0.96 0.00 +vt 0.88 0.95 0.00 +vt 0.89 0.96 0.00 +vt 0.04 0.35 0.00 +vt 0.04 0.25 0.00 +vt 0.07 0.25 0.00 +vt 0.07 0.36 0.00 +vt 0.13 0.33 0.00 +vt 0.10 0.35 0.00 +vt 0.10 0.25 0.00 +vt 0.13 0.25 0.00 +vt 0.01 0.33 0.00 +vt 0.01 0.25 0.00 +vt 0.93 0.52 0.00 +vt 0.94 0.52 0.00 +vt 0.94 0.58 0.00 +vt 0.93 0.58 0.00 +vt 0.92 0.49 0.00 +vt 0.91 0.49 0.00 +vt 0.91 0.54 0.00 +vt 0.92 0.55 0.00 +vt 0.97 0.52 0.00 +vt 0.95 0.52 0.00 +vt 0.95 0.58 0.00 +vt 0.97 0.58 0.00 +vt 0.94 0.64 0.00 +vt 0.93 0.64 0.00 +vt 0.89 0.58 0.00 +vt 0.89 0.59 0.00 +vt 0.95 0.64 0.00 +vt 0.97 0.64 0.00 +vt 0.94 0.69 0.00 +vt 0.93 0.69 0.00 +vt 0.86 0.59 0.00 +vt 0.86 0.61 0.00 +vt 0.95 0.69 0.00 +vt 0.97 0.69 0.00 +vt 0.83 0.58 0.00 +vt 0.83 0.59 0.00 +vt 0.81 0.54 0.00 +vt 0.80 0.55 0.00 +vt 0.81 0.49 0.00 +vt 0.80 0.49 0.00 +vt 0.82 0.22 0.00 +vt 0.85 0.22 0.00 +vt 0.84 0.39 0.00 +vt 0.81 0.39 0.00 +vt 0.76 0.22 0.00 +vt 0.80 0.22 0.00 +vt 0.79 0.38 0.00 +vt 0.76 0.38 0.00 +vt 0.82 0.52 0.00 +vt 0.85 0.52 0.00 +vt 0.80 0.51 0.00 +vt 0.76 0.53 0.00 +vt 0.18 0.92 0.00 +vt 0.09 0.92 0.00 +vt 0.09 0.93 0.00 +vt 0.18 0.93 0.00 +vt 0.00 0.90 0.00 +vt 0.10 0.89 0.00 +vt 0.10 0.90 0.00 +vt 0.00 0.91 0.00 +vt 0.00 0.92 0.00 +vt 0.00 0.93 0.00 +vt 0.20 0.90 0.00 +vt 0.20 0.91 0.00 +vt 0.20 0.93 0.00 +vt 0.23 0.90 0.00 +vt 0.23 0.93 0.00 +vt 0.26 0.76 0.00 +vt 0.26 0.90 0.00 +vt 0.22 0.84 0.00 +vt 0.22 0.76 0.00 +vt 0.11 0.81 0.00 +vt 0.11 0.87 0.00 +vt 0.02 0.88 0.00 +vt 0.02 0.81 0.00 +vt 0.31 0.84 0.00 +vt 0.31 0.76 0.00 +vt 0.11 0.74 0.00 +vt 0.11 0.80 0.00 +vt 0.01 0.80 0.00 +vt 0.01 0.74 0.00 +vt 0.20 0.81 0.00 +vt 0.20 0.88 0.00 +vt 0.20 0.74 0.00 +vt 0.20 0.80 0.00 +vt 0.36 0.65 0.00 +vt 0.36 0.75 0.00 +vt 0.34 0.75 0.00 +vt 0.33 0.65 0.00 +vt 0.36 0.89 0.00 +vt 0.33 0.87 0.00 +vt 0.45 0.67 0.00 +vt 0.45 0.76 0.00 +vt 0.43 0.76 0.00 +vt 0.42 0.67 0.00 +vt 0.45 0.89 0.00 +vt 0.42 0.89 0.00 +vt 0.41 0.66 0.00 +vt 0.38 0.66 0.00 +vt 0.39 0.77 0.00 +vt 0.41 0.77 0.00 +vt 0.38 0.88 0.00 +vt 0.41 0.88 0.00 +vt 0.72 0.62 0.00 +vt 0.72 0.52 0.00 +vt 0.73 0.52 0.00 +vt 0.73 0.62 0.00 +vt 0.74 0.62 0.00 +vt 0.74 0.43 0.00 +vt 0.73 0.43 0.00 +vt 0.59 0.58 0.00 +vt 0.64 0.58 0.00 +vt 0.64 0.63 0.00 +vt 0.59 0.63 0.00 +vt 0.75 0.42 0.00 +vt 0.73 0.42 0.00 +vt 0.73 0.36 0.00 +vt 0.75 0.36 0.00 +vt 0.92 0.71 0.00 +vt 0.97 0.71 0.00 +vt 0.92 0.73 0.00 +vt 0.73 0.29 0.00 +vt 0.73 0.24 0.00 +vt 0.75 0.24 0.00 +vt 0.75 0.29 0.00 +vt 0.86 0.72 0.00 +vt 0.86 0.73 0.00 +vt 0.81 0.72 0.00 +vt 0.81 0.70 0.00 +vt 0.73 0.33 0.00 +vt 0.75 0.33 0.00 +vt 0.89 0.74 0.00 +vt 0.89 0.72 0.00 +vt 0.83 0.62 0.00 +vt 0.92 0.62 0.00 +vt 0.92 0.61 0.00 +vt 0.83 0.61 0.00 +vt 0.83 0.63 0.00 +vt 0.92 0.63 0.00 +vt 0.71 0.65 0.00 +vt 0.71 0.66 0.00 +vt 0.75 0.66 0.00 +vt 0.75 0.65 0.00 +vt 0.71 0.64 0.00 +vt 0.75 0.64 0.00 +vt 0.58 0.64 0.00 +vt 0.62 0.66 0.00 +vt 0.62 0.64 0.00 +vt 0.92 0.64 0.00 +vt 0.83 0.64 0.00 +vt 0.75 0.61 0.00 +vt 0.75 0.62 0.00 +vt 0.75 0.63 0.00 +vt 0.67 0.66 0.00 +vt 0.67 0.64 0.00 +vt 0.41 0.65 0.00 +vt 0.41 0.57 0.00 +vt 0.44 0.57 0.00 +vt 0.44 0.66 0.00 +vt 0.48 0.65 0.00 +vt 0.48 0.57 0.00 +# 694 texture coords + +o castle +g castle +f 1/1/1 2/2/2 3/3/2 +f 3/3/2 4/4/1 1/1/1 +f 2/2/2 5/5/3 6/6/3 +f 6/6/3 3/3/2 2/2/2 +f 5/5/3 7/7/4 8/8/4 +f 8/8/4 6/6/3 5/5/3 +f 7/9/4 9/10/5 10/11/5 +f 10/11/5 8/12/4 7/9/4 +f 9/10/5 11/13/6 12/14/6 +f 12/14/6 10/11/5 9/10/5 +f 11/13/6 13/15/7 14/16/7 +f 14/16/7 12/14/6 11/13/6 +f 13/15/7 15/17/8 16/18/8 +f 16/18/8 14/16/7 13/15/7 +f 15/17/8 17/19/9 18/20/9 +f 18/20/9 16/18/8 15/17/8 +f 17/19/9 19/21/10 20/22/10 +f 20/22/10 18/20/9 17/19/9 +f 19/21/10 21/23/11 22/24/11 +f 22/24/11 20/22/10 19/21/10 +f 21/23/11 23/25/12 24/26/12 +f 24/26/12 22/24/11 21/23/11 +f 23/25/12 1/1/1 4/4/1 +f 4/4/1 24/26/12 23/25/12 +f 25/27/13 26/28/13 27/29/13 +f 27/29/13 28/30/13 25/27/13 +f 29/31/14 25/27/14 28/30/14 +f 28/30/14 30/32/14 29/31/14 +f 31/33/15 29/31/15 30/32/15 +f 30/32/15 32/34/15 31/33/15 +f 33/35/16 31/36/16 32/37/16 +f 32/37/16 34/38/16 33/35/16 +f 35/39/17 33/35/17 34/38/17 +f 34/38/17 36/40/17 35/39/17 +f 37/41/18 35/39/18 36/40/18 +f 36/40/18 38/42/18 37/41/18 +f 39/43/19 37/41/19 38/42/19 +f 38/42/19 40/44/19 39/43/19 +f 41/45/20 39/43/20 40/44/20 +f 40/44/20 42/46/20 41/45/20 +f 43/47/21 41/45/21 42/46/21 +f 42/46/21 44/48/21 43/47/21 +f 45/49/22 43/47/22 44/48/22 +f 44/48/22 46/50/22 45/49/22 +f 47/51/23 45/49/23 46/50/23 +f 46/50/23 48/52/23 47/51/23 +f 26/28/24 47/51/25 48/52/25 +f 48/52/25 27/29/24 26/28/24 +f 2/53/26 1/54/26 26/54/26 +f 26/54/26 25/53/26 2/53/26 +f 1/54/26 23/55/26 47/55/26 +f 47/55/26 26/54/26 1/54/26 +f 23/55/26 21/56/26 45/56/26 +f 45/56/26 47/55/26 23/55/26 +f 21/56/26 19/57/26 43/57/26 +f 43/57/26 45/56/26 21/56/26 +f 19/57/26 17/58/26 41/59/26 +f 41/59/26 43/57/26 19/57/26 +f 17/58/26 15/60/26 39/61/26 +f 39/61/26 41/59/26 17/58/26 +f 15/60/26 13/62/26 37/62/26 +f 37/62/26 39/61/26 15/60/26 +f 13/62/26 11/63/26 35/64/26 +f 35/64/26 37/62/26 13/62/26 +f 11/63/26 9/65/26 33/66/26 +f 33/66/26 35/64/26 11/63/26 +f 9/65/26 7/67/26 31/67/26 +f 31/67/26 33/66/26 9/65/26 +f 7/67/26 5/68/26 29/68/26 +f 29/68/26 31/67/26 7/67/26 +f 5/68/26 2/53/26 25/53/26 +f 25/53/26 29/68/26 5/68/26 +f 49/54/27 50/53/27 28/53/27 +f 28/53/27 27/54/27 49/54/27 +f 50/53/27 51/68/27 30/68/27 +f 30/68/27 28/53/27 50/53/27 +f 51/68/27 52/67/27 32/67/27 +f 32/67/27 30/68/27 51/68/27 +f 52/67/27 53/65/27 34/66/27 +f 34/66/27 32/67/27 52/67/27 +f 53/65/27 54/63/27 36/64/27 +f 36/64/27 34/66/27 53/65/27 +f 54/63/27 55/62/27 38/62/27 +f 38/62/27 36/64/27 54/63/27 +f 55/62/27 56/60/27 40/61/27 +f 40/61/27 38/62/27 55/62/27 +f 56/60/27 57/58/27 42/59/27 +f 42/59/27 40/61/27 56/60/27 +f 57/58/27 58/57/27 44/57/27 +f 44/57/27 42/59/27 57/58/27 +f 58/57/27 59/56/27 46/56/27 +f 46/56/27 44/57/27 58/57/27 +f 59/56/27 60/55/27 48/55/27 +f 48/55/27 46/56/27 59/56/27 +f 60/55/27 49/54/27 27/54/27 +f 27/54/27 48/55/27 60/55/27 +f 49/69/1 61/70/1 62/71/2 +f 62/71/2 50/72/2 49/69/1 +f 50/72/2 62/71/2 63/73/14 +f 63/73/14 51/74/14 50/72/2 +f 51/74/15 63/73/15 64/75/15 +f 64/75/15 52/76/15 51/74/15 +f 52/76/16 64/75/16 65/77/5 +f 65/77/5 53/78/5 52/76/16 +f 53/78/5 65/77/5 66/79/6 +f 66/79/6 54/80/6 53/78/5 +f 54/81/6 66/82/6 67/83/7 +f 67/83/7 55/84/7 54/81/6 +f 55/84/7 67/83/7 68/85/8 +f 68/85/8 56/86/8 55/84/7 +f 56/86/8 68/85/8 69/87/9 +f 69/87/9 57/88/9 56/86/8 +f 57/88/9 69/87/9 70/89/10 +f 70/89/10 58/90/10 57/88/9 +f 58/90/10 70/89/10 71/91/11 +f 71/91/11 59/92/11 58/90/10 +f 59/92/11 71/91/11 72/93/12 +f 72/93/12 60/94/12 59/92/11 +f 60/94/12 72/93/12 61/70/1 +f 61/70/1 49/69/1 60/94/12 +f 73/95/26 74/96/26 75/96/26 +f 75/96/26 76/95/26 73/95/26 +f 77/97/26 73/95/26 76/95/26 +f 76/95/26 78/97/26 77/97/26 +f 79/67/26 77/97/26 78/97/26 +f 78/97/26 80/98/26 79/67/26 +f 81/99/26 79/67/26 80/98/26 +f 80/98/26 82/99/26 81/99/26 +f 83/100/26 81/99/26 82/99/26 +f 82/99/26 84/100/26 83/100/26 +f 85/101/26 83/100/26 84/100/26 +f 84/100/26 86/101/26 85/101/26 +f 87/61/26 85/101/26 86/101/26 +f 86/101/26 88/61/26 87/61/26 +f 89/59/26 87/61/26 88/61/26 +f 88/61/26 90/102/26 89/59/26 +f 91/103/26 89/59/26 90/102/26 +f 90/102/26 92/103/26 91/103/26 +f 93/104/26 91/103/26 92/103/26 +f 92/103/26 94/105/26 93/104/26 +f 95/106/26 93/104/26 94/105/26 +f 94/105/26 96/106/26 95/106/26 +f 74/96/26 95/106/26 96/106/26 +f 96/106/26 75/96/26 74/96/26 +f 76/107/28 75/108/28 97/109/28 +f 97/109/28 98/110/28 76/107/28 +f 78/111/29 76/107/29 98/110/29 +f 98/110/29 99/112/29 78/111/29 +f 80/113/30 78/111/30 99/112/30 +f 99/112/30 100/114/30 80/113/30 +f 82/115/31 80/113/31 100/114/31 +f 100/114/31 101/116/31 82/115/31 +f 84/117/32 82/115/32 101/116/32 +f 101/116/32 102/118/32 84/117/32 +f 86/119/33 84/117/33 102/118/33 +f 102/118/33 103/120/33 86/119/33 +f 88/121/34 86/119/34 103/120/34 +f 103/120/34 104/122/34 88/121/34 +f 90/123/35 88/121/35 104/122/35 +f 104/122/35 105/124/35 90/123/35 +f 92/125/36 90/123/36 105/124/36 +f 105/124/36 106/126/36 92/125/36 +f 94/127/37 92/128/37 106/129/37 +f 106/129/37 107/130/37 94/127/37 +f 96/131/38 94/127/38 107/130/38 +f 107/130/38 108/132/38 96/131/38 +f 75/108/39 96/131/39 108/132/39 +f 108/132/39 97/109/39 75/108/39 +f 98/110/40 97/109/40 109/133/40 +f 109/133/40 110/134/40 98/110/40 +f 99/112/41 98/110/41 110/134/41 +f 110/134/41 111/135/41 99/112/41 +f 100/114/42 99/112/42 111/135/42 +f 111/135/42 112/136/43 100/114/42 +f 101/116/44 100/114/44 112/136/44 +f 112/136/44 113/137/44 101/116/44 +f 102/118/45 101/116/45 113/137/45 +f 113/137/45 114/138/45 102/118/45 +f 103/120/46 102/118/46 114/138/46 +f 114/138/46 115/139/46 103/120/46 +f 104/122/47 103/120/48 115/139/48 +f 115/139/48 116/140/48 104/122/47 +f 105/124/49 104/122/49 116/140/49 +f 116/140/49 117/141/49 105/124/49 +f 106/126/50 105/124/50 117/141/50 +f 117/141/50 118/142/50 106/126/50 +f 107/130/51 106/129/51 118/143/52 +f 118/143/52 119/144/51 107/130/51 +f 108/132/53 107/130/53 119/144/53 +f 119/144/53 120/145/53 108/132/53 +f 97/109/54 108/132/55 120/145/54 +f 120/145/54 109/133/54 97/109/54 +f 121/146/56 122/147/56 62/148/56 +f 62/148/56 61/149/56 121/146/56 +f 122/147/57 123/150/58 63/151/58 +f 63/151/58 62/148/57 122/147/57 +f 123/152/59 124/153/59 64/154/59 +f 64/154/59 63/155/59 123/152/59 +f 124/153/60 125/142/60 65/156/60 +f 65/156/60 64/154/60 124/153/60 +f 125/142/61 126/157/62 66/158/61 +f 66/158/61 65/156/62 125/142/61 +f 126/157/63 127/159/63 67/160/63 +f 67/160/63 66/158/63 126/157/63 +f 127/159/64 128/161/64 68/162/64 +f 68/162/64 67/160/64 127/159/64 +f 128/161/65 129/163/66 69/164/66 +f 69/164/66 68/162/66 128/161/65 +f 129/163/67 130/165/67 70/166/67 +f 70/166/67 69/164/67 129/163/67 +f 130/165/68 131/167/68 71/168/68 +f 71/168/68 70/166/68 130/165/68 +f 131/167/69 132/169/70 72/170/70 +f 72/170/70 71/168/70 131/167/69 +f 132/169/71 121/146/71 61/149/71 +f 61/149/71 72/170/71 132/169/71 +f 74/171/1 73/172/2 122/173/2 +f 122/173/2 121/174/1 74/171/1 +f 73/172/2 77/175/3 123/176/3 +f 123/176/3 122/173/2 73/172/2 +f 77/177/3 79/178/4 124/179/4 +f 124/179/4 123/180/3 77/177/3 +f 79/178/4 81/86/5 125/181/5 +f 125/181/5 124/179/4 79/178/4 +f 81/86/5 83/182/6 126/183/6 +f 126/183/6 125/181/5 81/86/5 +f 83/182/6 85/184/7 127/185/7 +f 127/185/7 126/183/6 83/182/6 +f 85/184/7 87/186/8 128/187/8 +f 128/187/8 127/185/7 85/184/7 +f 87/186/8 89/188/9 129/189/9 +f 129/189/9 128/187/8 87/186/8 +f 89/188/9 91/190/10 130/191/10 +f 130/191/10 129/189/9 89/188/9 +f 91/190/10 93/76/11 131/192/11 +f 131/192/11 130/191/10 91/190/10 +f 93/76/11 95/193/12 132/194/12 +f 132/194/12 131/192/11 93/76/11 +f 95/193/12 74/171/1 121/174/1 +f 121/174/1 132/194/12 95/193/12 +f 133/195/72 134/196/72 135/197/72 +f 135/197/72 136/198/72 133/195/72 +f 137/199/73 138/200/73 139/201/73 +f 139/201/73 140/202/73 137/199/73 +f 141/203/74 142/204/74 143/205/74 +f 143/205/74 144/206/74 141/203/74 +f 145/202/75 146/201/75 147/200/75 +f 147/200/75 148/199/75 145/202/75 +f 149/207/76 150/207/76 151/208/76 +f 151/208/76 152/209/76 149/207/76 +f 153/209/77 154/210/77 155/211/77 +f 142/212/78 156/196/78 157/213/78 +f 157/213/78 143/214/78 142/212/78 +f 158/210/79 159/209/79 160/211/79 +f 161/215/80 162/216/80 160/211/80 +f 160/211/80 159/209/80 161/215/80 +f 163/217/81 164/218/81 135/197/81 +f 135/197/81 134/196/81 163/217/81 +f 165/219/82 166/220/82 142/204/82 +f 142/204/82 141/203/82 165/219/82 +f 167/209/83 168/208/83 150/207/83 +f 150/207/83 149/207/83 167/209/83 +f 142/212/84 166/214/84 169/213/84 +f 169/213/84 156/196/84 142/212/84 +f 161/215/85 153/209/85 155/211/85 +f 155/211/85 162/216/85 161/215/85 +f 170/221/75 157/222/75 133/222/75 +f 133/222/75 136/221/75 170/221/75 +f 157/222/86 156/203/86 134/203/86 +f 134/203/86 133/222/86 157/222/86 +f 156/203/87 169/206/87 163/206/87 +f 163/206/87 134/203/87 156/203/87 +f 169/206/73 171/223/73 164/223/73 +f 164/223/73 163/206/73 169/206/73 +f 171/224/88 172/225/88 135/226/88 +f 135/226/88 164/224/88 171/224/88 +f 172/225/89 170/224/89 136/224/89 +f 136/224/89 135/226/89 172/225/89 +f 166/214/79 173/227/79 171/228/79 +f 171/228/79 169/213/79 166/214/79 +f 173/229/75 166/220/75 165/219/75 +f 165/219/75 174/221/75 173/229/75 +f 144/206/73 143/205/73 175/230/73 +f 175/230/73 176/223/73 144/206/73 +f 175/227/77 143/214/77 157/213/77 +f 157/213/77 170/228/77 175/227/77 +f 139/201/73 138/200/73 177/199/73 +f 177/199/73 178/202/73 139/201/73 +f 175/231/90 170/224/90 155/232/90 +f 155/232/90 154/233/91 175/231/90 +f 170/224/89 172/225/89 162/234/89 +f 162/234/89 155/232/89 170/224/89 +f 172/225/88 171/224/88 160/232/88 +f 160/232/88 162/234/88 172/225/88 +f 171/224/92 173/231/92 158/233/92 +f 158/233/92 160/232/92 171/224/92 +f 147/200/75 146/201/75 179/202/75 +f 179/202/75 180/199/75 147/200/75 +f 151/208/76 150/207/76 161/235/76 +f 161/235/76 159/236/76 151/208/76 +f 150/207/83 168/208/83 153/236/83 +f 153/236/83 161/235/83 150/207/83 +f 176/236/27 175/231/27 138/237/27 +f 138/237/27 137/238/27 176/236/27 +f 175/231/27 154/233/27 177/239/27 +f 177/239/27 138/237/27 175/231/27 +f 154/210/93 153/209/93 178/240/94 +f 178/240/94 177/241/94 154/210/93 +f 153/236/26 168/208/26 139/242/26 +f 139/242/26 178/238/26 153/236/26 +f 168/208/26 167/209/26 140/240/26 +f 140/240/26 139/242/26 168/208/26 +f 152/209/26 151/208/26 146/242/26 +f 146/242/26 145/240/26 152/209/26 +f 151/208/26 159/236/26 179/238/26 +f 179/238/26 146/242/26 151/208/26 +f 159/209/95 158/210/95 180/241/95 +f 180/241/95 179/240/95 159/209/95 +f 158/233/27 173/231/27 147/237/27 +f 147/237/27 180/239/27 158/233/27 +f 173/231/27 174/236/27 148/238/27 +f 148/238/27 147/237/27 173/231/27 +f 181/195/96 182/196/96 183/197/96 +f 183/197/96 184/198/96 181/195/96 +f 185/199/97 186/200/98 187/201/98 +f 187/201/98 188/202/97 185/199/97 +f 189/203/99 190/204/99 191/205/99 +f 191/205/99 192/206/99 189/203/99 +f 193/202/100 194/201/101 195/200/101 +f 195/200/101 196/199/100 193/202/100 +f 197/207/102 198/207/102 199/208/102 +f 199/208/102 200/209/102 197/207/102 +f 201/209/103 202/210/103 203/211/103 +f 190/212/104 204/196/104 205/213/104 +f 205/213/104 191/214/104 190/212/104 +f 206/210/105 207/209/105 208/211/105 +f 209/215/106 210/216/106 208/211/106 +f 208/211/106 207/209/106 209/215/106 +f 211/217/107 212/218/107 183/197/107 +f 183/197/107 182/196/107 211/217/107 +f 213/219/108 214/220/108 190/204/108 +f 190/204/108 189/203/108 213/219/108 +f 215/209/109 216/208/109 198/207/109 +f 198/207/109 197/207/109 215/209/109 +f 190/212/110 214/214/110 217/213/110 +f 217/213/110 204/196/110 190/212/110 +f 209/215/111 201/209/111 203/211/111 +f 203/211/111 210/216/111 209/215/111 +f 218/221/100 205/222/100 181/222/101 +f 181/222/101 184/221/101 218/221/100 +f 205/222/112 204/203/112 182/203/112 +f 182/203/112 181/222/112 205/222/112 +f 204/203/113 217/206/113 211/206/113 +f 211/206/113 182/203/113 204/203/113 +f 217/206/98 219/223/98 212/223/98 +f 212/223/98 211/206/98 217/206/98 +f 219/224/114 220/225/114 183/226/114 +f 183/226/114 212/224/114 219/224/114 +f 220/225/115 218/224/115 184/224/115 +f 184/224/115 183/226/115 220/225/115 +f 214/214/105 221/227/105 219/228/105 +f 219/228/105 217/213/105 214/214/105 +f 221/229/100 214/220/100 213/219/100 +f 213/219/100 222/221/100 221/229/100 +f 192/206/98 191/205/98 223/230/98 +f 223/230/98 224/223/98 192/206/98 +f 223/227/103 191/214/103 205/213/103 +f 205/213/103 218/228/103 223/227/103 +f 187/201/98 186/200/98 225/199/97 +f 225/199/97 226/202/97 187/201/98 +f 223/231/116 218/224/116 203/232/116 +f 203/232/116 202/233/116 223/231/116 +f 218/224/115 220/225/115 210/234/115 +f 210/234/115 203/232/115 218/224/115 +f 220/225/114 219/224/114 208/232/114 +f 208/232/114 210/234/114 220/225/114 +f 219/224/117 221/231/117 206/233/117 +f 206/233/117 208/232/117 219/224/117 +f 195/200/101 194/201/101 227/202/100 +f 227/202/100 228/199/100 195/200/101 +f 199/208/102 198/207/102 209/235/102 +f 209/235/102 207/236/102 199/208/102 +f 198/207/109 216/208/109 201/236/109 +f 201/236/109 209/235/109 198/207/109 +f 224/236/27 223/231/27 186/237/27 +f 186/237/27 185/238/27 224/236/27 +f 223/231/27 202/233/27 225/239/27 +f 225/239/27 186/237/27 223/231/27 +f 202/210/118 201/209/118 226/240/118 +f 226/240/118 225/241/118 202/210/118 +f 201/236/26 216/208/26 187/242/26 +f 187/242/26 226/238/26 201/236/26 +f 216/208/26 215/209/26 188/240/26 +f 188/240/26 187/242/26 216/208/26 +f 200/209/26 199/208/26 194/242/26 +f 194/242/26 193/240/26 200/209/26 +f 199/208/26 207/236/26 227/238/26 +f 227/238/26 194/242/26 199/208/26 +f 207/209/119 206/210/119 228/241/119 +f 228/241/119 227/240/119 207/209/119 +f 206/233/27 221/231/27 195/237/27 +f 195/237/27 228/239/27 206/233/27 +f 221/231/27 222/236/27 196/238/27 +f 196/238/27 195/237/27 221/231/27 +f 229/243/120 230/244/120 231/245/120 +f 231/245/120 232/246/120 229/243/120 +f 229/247/121 232/248/121 233/249/121 +f 233/249/121 234/250/121 229/247/121 +f 232/246/122 231/245/122 235/251/122 +f 235/251/122 233/252/122 232/246/122 +f 231/248/123 230/247/123 236/250/123 +f 236/250/123 235/249/123 231/248/123 +f 237/195/124 238/196/124 239/197/124 +f 239/197/124 240/198/124 237/195/124 +f 241/199/125 242/200/98 243/201/98 +f 243/201/98 244/202/125 241/199/125 +f 245/203/99 246/204/99 247/205/99 +f 247/205/99 248/206/99 245/203/99 +f 249/202/100 250/201/101 251/200/101 +f 251/200/101 252/199/100 249/202/100 +f 253/207/102 254/207/102 255/208/102 +f 255/208/102 256/209/102 253/207/102 +f 257/209/103 258/210/103 259/211/103 +f 246/212/104 260/196/104 261/213/104 +f 261/213/104 247/214/104 246/212/104 +f 262/210/105 263/209/105 264/211/105 +f 265/215/106 266/216/106 264/211/106 +f 264/211/106 263/209/106 265/215/106 +f 267/217/107 268/218/107 239/197/107 +f 239/197/107 238/196/107 267/217/107 +f 269/219/126 270/220/126 246/204/108 +f 246/204/108 245/203/108 269/219/126 +f 271/209/109 272/208/109 254/207/109 +f 254/207/109 253/207/109 271/209/109 +f 246/212/110 270/214/110 273/213/110 +f 273/213/110 260/196/110 246/212/110 +f 265/215/111 257/209/111 259/211/111 +f 259/211/111 266/216/111 265/215/111 +f 274/221/100 261/222/100 237/222/100 +f 237/222/100 240/221/100 274/221/100 +f 261/222/112 260/203/112 238/203/112 +f 238/203/112 237/222/112 261/222/112 +f 260/203/113 273/206/113 267/206/113 +f 267/206/113 238/203/113 260/203/113 +f 273/206/98 275/223/98 268/223/98 +f 268/223/98 267/206/98 273/206/98 +f 275/224/114 276/225/114 239/226/114 +f 239/226/114 268/224/114 275/224/114 +f 276/225/115 274/224/115 240/224/115 +f 240/224/115 239/226/115 276/225/115 +f 270/214/105 277/227/105 275/228/105 +f 275/228/105 273/213/105 270/214/105 +f 277/229/101 270/220/101 269/219/101 +f 269/219/101 278/221/101 277/229/101 +f 248/206/98 247/205/97 279/230/97 +f 279/230/97 280/223/98 248/206/98 +f 279/227/103 247/214/103 261/213/103 +f 261/213/103 274/228/103 279/227/103 +f 243/201/98 242/200/98 281/199/97 +f 281/199/97 282/202/97 243/201/98 +f 279/231/116 274/224/116 259/232/116 +f 259/232/116 258/233/116 279/231/116 +f 274/224/115 276/225/115 266/234/115 +f 266/234/115 259/232/115 274/224/115 +f 276/225/114 275/224/114 264/232/114 +f 264/232/114 266/234/114 276/225/114 +f 275/224/117 277/231/117 262/233/117 +f 262/233/117 264/232/117 275/224/117 +f 251/200/101 250/201/101 283/202/100 +f 283/202/100 284/199/100 251/200/101 +f 255/208/102 254/207/102 265/235/102 +f 265/235/102 263/236/102 255/208/102 +f 254/207/109 272/208/109 257/236/109 +f 257/236/109 265/235/109 254/207/109 +f 280/236/27 279/231/27 242/237/27 +f 242/237/27 241/238/27 280/236/27 +f 279/231/27 258/233/27 281/239/27 +f 281/239/27 242/237/27 279/231/27 +f 258/210/118 257/209/118 282/240/118 +f 282/240/118 281/241/118 258/210/118 +f 257/236/26 272/208/26 243/242/26 +f 243/242/26 282/238/26 257/236/26 +f 272/208/26 271/209/26 244/240/26 +f 244/240/26 243/242/26 272/208/26 +f 256/209/26 255/208/26 250/242/26 +f 250/242/26 249/240/26 256/209/26 +f 255/208/26 263/236/26 283/238/26 +f 283/238/26 250/242/26 255/208/26 +f 263/209/119 262/210/119 284/241/119 +f 284/241/119 283/240/119 263/209/119 +f 262/233/27 277/231/27 251/237/27 +f 251/237/27 284/239/27 262/233/27 +f 277/231/27 278/236/27 252/238/27 +f 252/238/27 251/237/27 277/231/27 +f 285/243/127 286/244/127 287/245/127 +f 287/245/127 288/246/127 285/243/127 +f 285/247/128 288/248/128 289/249/128 +f 289/249/128 290/250/128 285/247/128 +f 288/246/129 287/245/129 291/251/129 +f 291/251/129 289/252/129 288/246/129 +f 287/248/130 286/247/130 292/250/130 +f 292/250/130 291/249/130 287/248/130 +f 293/195/131 294/196/131 295/197/131 +f 295/197/131 296/198/131 293/195/131 +f 297/199/75 298/200/75 299/201/75 +f 299/201/75 300/202/75 297/199/75 +f 301/203/132 302/204/132 303/205/132 +f 303/205/132 304/206/132 301/203/132 +f 305/202/73 306/201/73 307/200/73 +f 307/200/73 308/199/73 305/202/73 +f 309/207/83 310/207/83 311/208/83 +f 311/208/83 312/209/83 309/207/83 +f 313/209/133 314/210/133 315/211/133 +f 302/212/134 316/196/134 317/213/134 +f 317/213/134 303/214/134 302/212/134 +f 318/210/135 319/209/135 320/211/135 +f 321/215/136 322/216/136 320/211/136 +f 320/211/136 319/209/136 321/215/136 +f 323/217/137 324/218/137 295/197/138 +f 295/197/138 294/196/138 323/217/137 +f 325/219/139 326/220/139 302/204/139 +f 302/204/139 301/203/139 325/219/139 +f 327/209/76 328/208/76 310/207/76 +f 310/207/76 309/207/76 327/209/76 +f 302/212/140 326/214/140 329/213/140 +f 329/213/140 316/196/140 302/212/140 +f 321/215/141 313/209/141 315/211/141 +f 315/211/141 322/216/141 321/215/141 +f 330/221/73 317/222/73 293/222/73 +f 293/222/73 296/221/73 330/221/73 +f 317/222/87 316/203/87 294/203/87 +f 294/203/87 293/222/87 317/222/87 +f 316/203/86 329/206/86 323/206/86 +f 323/206/86 294/203/86 316/203/86 +f 329/206/75 331/223/75 324/223/75 +f 324/223/75 323/206/75 329/206/75 +f 331/224/142 332/225/142 295/226/142 +f 295/226/142 324/224/142 331/224/142 +f 332/225/143 330/224/143 296/224/143 +f 296/224/143 295/226/143 332/225/143 +f 326/214/135 333/227/135 331/228/135 +f 331/228/135 329/213/135 326/214/135 +f 333/229/73 326/220/73 325/219/73 +f 325/219/73 334/221/73 333/229/73 +f 304/206/75 303/205/75 335/230/75 +f 335/230/75 336/223/75 304/206/75 +f 335/227/133 303/214/133 317/213/133 +f 317/213/133 330/228/133 335/227/133 +f 299/201/75 298/200/75 337/199/75 +f 337/199/75 338/202/75 299/201/75 +f 335/231/144 330/224/144 315/232/144 +f 315/232/144 314/233/144 335/231/144 +f 330/224/143 332/225/143 322/234/143 +f 322/234/143 315/232/143 330/224/143 +f 332/225/142 331/224/142 320/232/142 +f 320/232/142 322/234/142 332/225/142 +f 331/224/145 333/231/145 318/233/145 +f 318/233/145 320/232/145 331/224/145 +f 307/200/73 306/201/73 339/202/73 +f 339/202/73 340/199/73 307/200/73 +f 311/208/83 310/207/83 321/235/83 +f 321/235/83 319/236/83 311/208/83 +f 310/207/76 328/208/76 313/236/76 +f 313/236/76 321/235/76 310/207/76 +f 336/236/27 335/231/27 298/237/27 +f 298/237/27 297/238/27 336/236/27 +f 335/231/27 314/233/27 337/239/27 +f 337/239/27 298/237/27 335/231/27 +f 314/210/146 313/209/146 338/240/146 +f 338/240/146 337/241/146 314/210/146 +f 313/236/26 328/208/26 299/242/26 +f 299/242/26 338/238/26 313/236/26 +f 328/208/26 327/209/26 300/240/26 +f 300/240/26 299/242/26 328/208/26 +f 312/209/26 311/208/26 306/242/26 +f 306/242/26 305/240/26 312/209/26 +f 311/208/26 319/236/26 339/238/26 +f 339/238/26 306/242/26 311/208/26 +f 319/209/147 318/210/147 340/241/147 +f 340/241/147 339/240/147 319/209/147 +f 318/233/27 333/231/27 307/237/27 +f 307/237/27 340/239/27 318/233/27 +f 333/231/27 334/236/27 308/238/27 +f 308/238/27 307/237/27 333/231/27 +f 341/243/148 342/244/148 343/245/148 +f 343/245/148 344/246/148 341/243/148 +f 341/247/1 344/248/1 345/249/1 +f 345/249/1 346/250/1 341/247/1 +f 344/246/149 343/245/149 347/251/149 +f 347/251/149 345/252/149 344/246/149 +f 343/248/7 342/247/7 348/250/7 +f 348/250/7 347/249/7 343/248/7 +f 349/243/150 350/244/150 351/245/150 +f 351/245/150 352/246/150 349/243/150 +f 349/247/151 352/248/151 353/249/151 +f 353/249/151 354/250/151 349/247/151 +f 352/246/152 351/245/152 355/251/152 +f 355/251/152 353/252/152 352/246/152 +f 351/248/153 350/247/153 356/250/153 +f 356/250/153 355/249/153 351/248/153 +f 357/243/154 358/244/154 359/245/154 +f 359/245/154 360/246/154 357/243/154 +f 357/247/7 360/248/7 361/249/7 +f 361/249/7 362/250/7 357/247/7 +f 360/246/155 359/245/155 363/251/155 +f 363/251/155 361/252/155 360/246/155 +f 359/248/1 358/247/1 364/250/1 +f 364/250/1 363/249/1 359/248/1 +f 365/243/156 366/244/156 367/245/156 +f 367/245/156 368/246/156 365/243/156 +f 365/247/157 368/248/157 369/249/157 +f 369/249/157 370/250/157 365/247/157 +f 368/246/158 367/245/158 371/251/158 +f 371/251/158 369/252/158 368/246/158 +f 367/248/159 366/247/159 372/250/159 +f 372/250/159 371/249/159 367/248/159 +f 373/243/160 374/244/160 375/245/160 +f 375/245/160 376/246/160 373/243/160 +f 373/247/161 376/248/161 377/249/161 +f 377/249/161 378/250/161 373/247/161 +f 376/246/162 375/245/162 379/251/162 +f 379/251/162 377/252/162 376/246/162 +f 375/248/163 374/247/163 380/250/163 +f 380/250/163 379/249/163 375/248/163 +f 381/195/131 382/196/131 383/197/131 +f 383/197/131 384/198/131 381/195/131 +f 385/199/75 386/200/75 387/201/75 +f 387/201/75 388/202/75 385/199/75 +f 389/203/132 390/204/132 391/205/132 +f 391/205/132 392/206/132 389/203/132 +f 393/202/73 394/201/73 395/200/73 +f 395/200/73 396/199/73 393/202/73 +f 397/207/83 398/207/83 399/208/83 +f 399/208/83 400/209/83 397/207/83 +f 401/209/133 402/210/133 403/211/133 +f 390/212/134 404/196/134 405/213/134 +f 405/213/134 391/214/134 390/212/134 +f 406/210/135 407/209/135 408/211/135 +f 409/215/136 410/216/136 408/211/136 +f 408/211/136 407/209/136 409/215/136 +f 411/217/137 412/218/137 383/197/138 +f 383/197/138 382/196/138 411/217/137 +f 413/219/139 414/220/139 390/204/139 +f 390/204/139 389/203/139 413/219/139 +f 415/209/76 416/208/76 398/207/76 +f 398/207/76 397/207/76 415/209/76 +f 390/212/140 414/214/140 417/213/140 +f 417/213/140 404/196/140 390/212/140 +f 409/215/141 401/209/141 403/211/141 +f 403/211/141 410/216/141 409/215/141 +f 418/221/73 405/222/73 381/222/73 +f 381/222/73 384/221/73 418/221/73 +f 405/222/87 404/203/87 382/203/87 +f 382/203/87 381/222/87 405/222/87 +f 404/203/86 417/206/86 411/206/86 +f 411/206/86 382/203/86 404/203/86 +f 417/206/75 419/223/75 412/223/75 +f 412/223/75 411/206/75 417/206/75 +f 419/224/142 420/225/142 383/226/142 +f 383/226/142 412/224/142 419/224/142 +f 420/225/143 418/224/143 384/224/143 +f 384/224/143 383/226/143 420/225/143 +f 414/214/135 421/227/135 419/228/135 +f 419/228/135 417/213/135 414/214/135 +f 421/229/73 414/220/73 413/219/73 +f 413/219/73 422/221/73 421/229/73 +f 392/206/75 391/205/75 423/230/75 +f 423/230/75 424/223/75 392/206/75 +f 423/227/133 391/214/133 405/213/133 +f 405/213/133 418/228/133 423/227/133 +f 387/201/75 386/200/75 425/199/75 +f 425/199/75 426/202/75 387/201/75 +f 423/231/144 418/224/144 403/232/144 +f 403/232/144 402/233/144 423/231/144 +f 418/224/143 420/225/143 410/234/143 +f 410/234/143 403/232/143 418/224/143 +f 420/225/142 419/224/142 408/232/142 +f 408/232/142 410/234/142 420/225/142 +f 419/224/145 421/231/145 406/233/145 +f 406/233/145 408/232/145 419/224/145 +f 395/200/73 394/201/73 427/202/73 +f 427/202/73 428/199/73 395/200/73 +f 399/208/83 398/207/83 409/235/83 +f 409/235/83 407/236/83 399/208/83 +f 398/207/76 416/208/76 401/236/76 +f 401/236/76 409/235/76 398/207/76 +f 424/236/27 423/231/27 386/237/27 +f 386/237/27 385/238/27 424/236/27 +f 423/231/27 402/233/27 425/239/27 +f 425/239/27 386/237/27 423/231/27 +f 402/210/146 401/209/146 426/240/146 +f 426/240/146 425/241/146 402/210/146 +f 401/236/26 416/208/26 387/242/26 +f 387/242/26 426/238/26 401/236/26 +f 416/208/26 415/209/26 388/240/26 +f 388/240/26 387/242/26 416/208/26 +f 400/209/26 399/208/26 394/242/26 +f 394/242/26 393/240/26 400/209/26 +f 399/208/26 407/236/26 427/238/26 +f 427/238/26 394/242/26 399/208/26 +f 407/209/147 406/210/147 428/241/147 +f 428/241/147 427/240/147 407/209/147 +f 406/233/27 421/231/27 395/237/27 +f 395/237/27 428/239/27 406/233/27 +f 421/231/27 422/236/27 396/238/27 +f 396/238/27 395/237/27 421/231/27 +f 429/195/164 430/196/10 431/197/10 +f 431/197/10 432/198/164 429/195/164 +f 433/199/165 434/200/165 435/201/165 +f 435/201/165 436/202/165 433/199/165 +f 437/203/108 438/204/108 439/205/108 +f 439/205/108 440/206/108 437/203/108 +f 441/202/125 442/201/125 443/200/125 +f 443/200/125 444/199/125 441/202/125 +f 445/207/166 446/207/166 447/208/166 +f 447/208/166 448/209/166 445/207/166 +f 449/209/167 450/210/167 451/211/167 +f 438/212/168 452/196/168 453/213/168 +f 453/213/168 439/214/168 438/212/168 +f 454/210/169 455/209/169 456/211/169 +f 457/215/170 458/216/170 456/211/170 +f 456/211/170 455/209/170 457/215/170 +f 459/217/171 460/218/171 431/197/171 +f 431/197/171 430/196/171 459/217/171 +f 461/219/172 462/220/99 438/204/99 +f 438/204/99 437/203/99 461/219/172 +f 463/209/173 464/208/173 446/207/173 +f 446/207/173 445/207/173 463/209/173 +f 438/212/174 462/214/174 465/213/174 +f 465/213/174 452/196/174 438/212/174 +f 457/215/175 449/209/175 451/211/175 +f 451/211/175 458/216/175 457/215/175 +f 466/221/125 453/222/125 429/222/125 +f 429/222/125 432/221/125 466/221/125 +f 453/222/113 452/203/113 430/203/113 +f 430/203/113 429/222/113 453/222/113 +f 452/203/112 465/206/112 459/206/112 +f 459/206/112 430/203/112 452/203/112 +f 465/206/165 467/223/165 460/223/165 +f 460/223/165 459/206/165 465/206/165 +f 467/224/176 468/225/176 431/226/176 +f 431/226/176 460/224/176 467/224/176 +f 468/225/117 466/224/117 432/224/117 +f 432/224/117 431/226/117 468/225/117 +f 462/214/169 469/227/169 467/228/169 +f 467/228/169 465/213/169 462/214/169 +f 469/229/125 462/220/125 461/219/125 +f 461/219/125 470/221/125 469/229/125 +f 440/206/165 439/205/165 471/230/165 +f 471/230/165 472/223/165 440/206/165 +f 471/227/167 439/214/167 453/213/167 +f 453/213/167 466/228/167 471/227/167 +f 435/201/165 434/200/165 473/199/165 +f 473/199/165 474/202/165 435/201/165 +f 471/231/177 466/224/177 451/232/177 +f 451/232/177 450/233/177 471/231/177 +f 466/224/117 468/225/117 458/234/117 +f 458/234/117 451/232/117 466/224/117 +f 468/225/176 467/224/176 456/232/176 +f 456/232/176 458/234/176 468/225/176 +f 467/224/115 469/231/115 454/233/115 +f 454/233/115 456/232/115 467/224/115 +f 443/200/125 442/201/125 475/202/125 +f 475/202/125 476/199/125 443/200/125 +f 447/208/166 446/207/166 457/235/166 +f 457/235/166 455/236/166 447/208/166 +f 446/207/173 464/208/173 449/236/173 +f 449/236/173 457/235/173 446/207/173 +f 472/236/27 471/231/27 434/237/27 +f 434/237/27 433/238/27 472/236/27 +f 471/231/27 450/233/27 473/239/27 +f 473/239/27 434/237/27 471/231/27 +f 450/210/178 449/209/178 474/240/178 +f 474/240/178 473/241/178 450/210/178 +f 449/236/26 464/208/26 435/242/26 +f 435/242/26 474/238/26 449/236/26 +f 464/208/26 463/209/26 436/240/26 +f 436/240/26 435/242/26 464/208/26 +f 448/209/26 447/208/26 442/242/26 +f 442/242/26 441/240/26 448/209/26 +f 447/208/26 455/236/26 475/238/26 +f 475/238/26 442/242/26 447/208/26 +f 455/209/179 454/210/179 476/241/179 +f 476/241/179 475/240/179 455/209/179 +f 454/233/27 469/231/27 443/237/27 +f 443/237/27 476/239/27 454/233/27 +f 469/231/27 470/236/27 444/238/27 +f 444/238/27 443/237/27 469/231/27 +f 477/243/180 478/244/180 479/245/180 +f 479/245/180 480/246/180 477/243/180 +f 477/247/153 480/248/153 481/249/153 +f 481/249/153 482/250/153 477/247/153 +f 480/246/181 479/245/181 483/251/181 +f 483/251/181 481/252/182 480/246/181 +f 479/248/151 478/247/151 484/250/151 +f 484/250/151 483/249/151 479/248/151 +f 485/195/10 486/196/10 487/197/10 +f 487/197/10 488/198/10 485/195/10 +f 489/199/165 490/200/165 491/201/165 +f 491/201/165 492/202/165 489/199/165 +f 493/203/108 494/204/108 495/205/108 +f 495/205/108 496/206/108 493/203/108 +f 497/202/125 498/201/125 499/200/125 +f 499/200/125 500/199/125 497/202/125 +f 501/207/166 502/207/166 503/208/166 +f 503/208/166 504/209/166 501/207/166 +f 505/209/167 506/210/167 507/211/167 +f 494/212/168 508/196/168 509/213/168 +f 509/213/168 495/214/168 494/212/168 +f 510/210/169 511/209/169 512/211/169 +f 513/215/170 514/216/170 512/211/170 +f 512/211/170 511/209/170 513/215/170 +f 515/217/171 516/218/171 487/197/171 +f 487/197/171 486/196/171 515/217/171 +f 517/219/99 518/220/99 494/204/172 +f 494/204/172 493/203/99 517/219/99 +f 519/209/173 520/208/173 502/207/173 +f 502/207/173 501/207/173 519/209/173 +f 494/212/174 518/214/174 521/213/174 +f 521/213/174 508/196/174 494/212/174 +f 513/215/175 505/209/175 507/211/175 +f 507/211/175 514/216/175 513/215/175 +f 522/221/125 509/222/125 485/222/125 +f 485/222/125 488/221/125 522/221/125 +f 509/222/113 508/203/113 486/203/113 +f 486/203/113 485/222/113 509/222/113 +f 508/203/112 521/206/112 515/206/112 +f 515/206/112 486/203/112 508/203/112 +f 521/206/165 523/223/165 516/223/165 +f 516/223/165 515/206/165 521/206/165 +f 523/224/176 524/225/176 487/226/176 +f 487/226/176 516/224/176 523/224/176 +f 524/225/117 522/224/117 488/224/117 +f 488/224/117 487/226/117 524/225/117 +f 518/214/169 525/227/169 523/228/169 +f 523/228/169 521/213/169 518/214/169 +f 525/229/125 518/220/125 517/219/125 +f 517/219/125 526/221/125 525/229/125 +f 496/206/165 495/205/165 527/230/165 +f 527/230/165 528/223/165 496/206/165 +f 527/227/167 495/214/167 509/213/167 +f 509/213/167 522/228/167 527/227/167 +f 491/201/165 490/200/165 529/199/165 +f 529/199/165 530/202/165 491/201/165 +f 527/231/177 522/224/177 507/232/177 +f 507/232/177 506/233/177 527/231/177 +f 522/224/117 524/225/117 514/234/117 +f 514/234/117 507/232/117 522/224/117 +f 524/225/176 523/224/176 512/232/176 +f 512/232/176 514/234/176 524/225/176 +f 523/224/115 525/231/115 510/233/115 +f 510/233/115 512/232/115 523/224/115 +f 499/200/125 498/201/125 531/202/125 +f 531/202/125 532/199/125 499/200/125 +f 503/208/166 502/207/166 513/235/166 +f 513/235/166 511/236/166 503/208/166 +f 502/207/173 520/208/173 505/236/173 +f 505/236/173 513/235/173 502/207/173 +f 528/236/27 527/231/27 490/237/27 +f 490/237/27 489/238/27 528/236/27 +f 527/231/27 506/233/27 529/239/27 +f 529/239/27 490/237/27 527/231/27 +f 506/210/178 505/209/178 530/240/178 +f 530/240/178 529/241/178 506/210/178 +f 505/236/26 520/208/26 491/242/26 +f 491/242/26 530/238/26 505/236/26 +f 520/208/26 519/209/26 492/240/26 +f 492/240/26 491/242/26 520/208/26 +f 504/209/26 503/208/26 498/242/26 +f 498/242/26 497/240/26 504/209/26 +f 503/208/26 511/236/26 531/238/26 +f 531/238/26 498/242/26 503/208/26 +f 511/209/179 510/210/179 532/241/179 +f 532/241/179 531/240/179 511/209/179 +f 510/233/27 525/231/27 499/237/27 +f 499/237/27 532/239/27 510/233/27 +f 525/231/27 526/236/27 500/238/27 +f 500/238/27 499/237/27 525/231/27 +f 533/243/183 534/244/183 535/245/183 +f 535/245/183 536/246/183 533/243/183 +f 533/247/184 536/248/184 537/249/184 +f 537/249/184 538/250/184 533/247/184 +f 536/246/185 535/245/185 539/251/185 +f 539/251/185 537/252/185 536/246/185 +f 535/248/186 534/247/186 540/250/186 +f 540/250/186 539/249/186 535/248/186 +f 541/195/72 542/196/72 543/197/72 +f 543/197/72 544/198/72 541/195/72 +f 545/199/73 546/200/73 547/201/73 +f 547/201/73 548/202/73 545/199/73 +f 549/203/74 550/204/74 551/205/74 +f 551/205/74 552/206/74 549/203/74 +f 553/202/75 554/201/75 555/200/75 +f 555/200/75 556/199/75 553/202/75 +f 557/207/76 558/207/76 559/208/76 +f 559/208/76 560/209/76 557/207/76 +f 561/209/77 562/210/77 563/211/77 +f 550/212/78 564/196/78 565/213/78 +f 565/213/78 551/214/78 550/212/78 +f 566/210/79 567/209/79 568/211/79 +f 569/215/80 570/216/80 568/211/80 +f 568/211/80 567/209/80 569/215/80 +f 571/217/81 572/218/81 543/197/81 +f 543/197/81 542/196/81 571/217/81 +f 573/219/82 574/220/82 550/204/82 +f 550/204/82 549/203/82 573/219/82 +f 575/209/83 576/208/83 558/207/83 +f 558/207/83 557/207/83 575/209/83 +f 550/212/84 574/214/84 577/213/84 +f 577/213/84 564/196/84 550/212/84 +f 569/215/85 561/209/85 563/211/85 +f 563/211/85 570/216/85 569/215/85 +f 578/221/75 565/222/75 541/222/75 +f 541/222/75 544/221/75 578/221/75 +f 565/222/86 564/203/86 542/203/86 +f 542/203/86 541/222/86 565/222/86 +f 564/203/87 577/206/87 571/206/87 +f 571/206/87 542/203/87 564/203/87 +f 577/206/73 579/223/73 572/223/73 +f 572/223/73 571/206/73 577/206/73 +f 579/224/88 580/225/88 543/226/88 +f 543/226/88 572/224/88 579/224/88 +f 580/225/89 578/224/89 544/224/89 +f 544/224/89 543/226/89 580/225/89 +f 574/214/79 581/227/79 579/228/79 +f 579/228/79 577/213/79 574/214/79 +f 581/229/75 574/220/75 573/219/75 +f 573/219/75 582/221/75 581/229/75 +f 552/206/73 551/205/73 583/230/73 +f 583/230/73 584/223/73 552/206/73 +f 583/227/77 551/214/77 565/213/77 +f 565/213/77 578/228/77 583/227/77 +f 547/201/73 546/200/73 585/199/73 +f 585/199/73 586/202/73 547/201/73 +f 583/231/90 578/224/90 563/232/90 +f 563/232/90 562/233/90 583/231/90 +f 578/224/89 580/225/89 570/234/89 +f 570/234/89 563/232/89 578/224/89 +f 580/225/88 579/224/88 568/232/88 +f 568/232/88 570/234/88 580/225/88 +f 579/224/92 581/231/92 566/233/92 +f 566/233/92 568/232/92 579/224/92 +f 555/200/75 554/201/75 587/202/75 +f 587/202/75 588/199/75 555/200/75 +f 559/208/76 558/207/76 569/235/76 +f 569/235/76 567/236/76 559/208/76 +f 558/207/83 576/208/83 561/236/83 +f 561/236/83 569/235/83 558/207/83 +f 584/236/27 583/231/27 546/237/27 +f 546/237/27 545/238/27 584/236/27 +f 583/231/27 562/233/27 585/239/27 +f 585/239/27 546/237/27 583/231/27 +f 562/210/94 561/209/94 586/240/94 +f 586/240/94 585/241/94 562/210/94 +f 561/236/26 576/208/26 547/242/26 +f 547/242/26 586/238/26 561/236/26 +f 576/208/26 575/209/26 548/240/26 +f 548/240/26 547/242/26 576/208/26 +f 560/209/26 559/208/26 554/242/26 +f 554/242/26 553/240/26 560/209/26 +f 559/208/26 567/236/26 587/238/26 +f 587/238/26 554/242/26 559/208/26 +f 567/209/95 566/210/95 588/241/95 +f 588/241/95 587/240/95 567/209/95 +f 566/233/27 581/231/27 555/237/27 +f 555/237/27 588/239/27 566/233/27 +f 581/231/27 582/236/27 556/238/27 +f 556/238/27 555/237/27 581/231/27 +f 589/243/187 590/244/187 591/245/187 +f 591/245/187 592/246/187 589/243/187 +f 589/247/163 592/248/163 593/249/163 +f 593/249/163 594/250/163 589/247/163 +f 592/246/188 591/245/188 595/251/189 +f 595/251/189 593/252/188 592/246/188 +f 591/248/161 590/247/161 596/250/161 +f 596/250/161 595/249/161 591/248/161 +f 597/253/13 598/254/13 599/255/13 +f 599/255/13 600/256/13 597/253/13 +f 601/257/14 597/253/14 600/256/14 +f 600/256/14 602/258/14 601/257/14 +f 603/259/118 601/257/118 602/258/118 +f 602/258/118 604/260/15 603/259/118 +f 605/261/16 603/262/16 604/263/16 +f 604/263/16 606/264/16 605/261/16 +f 607/265/17 605/261/17 606/264/17 +f 606/264/17 608/266/17 607/265/17 +f 609/267/18 607/265/18 608/266/18 +f 608/266/18 610/268/18 609/267/18 +f 611/269/190 609/267/19 610/268/19 +f 610/268/19 612/270/190 611/269/190 +f 613/271/20 611/269/20 612/270/20 +f 612/270/20 614/272/20 613/271/20 +f 615/273/21 613/271/21 614/272/21 +f 614/272/21 616/274/21 615/273/21 +f 617/275/191 615/273/191 616/274/22 +f 616/274/22 618/276/191 617/275/191 +f 619/277/23 617/275/23 618/276/23 +f 618/276/23 620/278/23 619/277/23 +f 598/254/24 619/277/25 620/278/25 +f 620/278/25 599/255/24 598/254/24 +f 600/279/27 599/280/27 621/281/27 +f 621/281/27 622/282/27 600/279/27 +f 623/283/27 624/279/27 625/282/27 +f 625/282/27 626/284/27 623/283/27 +f 604/285/27 602/283/27 627/284/27 +f 627/284/27 628/285/27 604/285/27 +f 629/286/27 630/285/27 631/285/27 +f 631/285/27 632/287/27 629/286/27 +f 608/288/27 606/286/27 633/287/27 +f 633/287/27 634/289/27 608/288/27 +f 635/290/27 636/288/27 637/289/27 +f 637/289/27 638/291/27 635/290/27 +f 612/292/27 610/290/27 639/291/27 +f 639/291/27 640/293/27 612/292/27 +f 641/294/27 642/292/27 643/293/27 +f 643/293/27 644/295/27 641/294/27 +f 616/296/27 614/294/27 645/295/27 +f 645/295/27 646/297/27 616/296/27 +f 647/298/27 648/296/27 649/297/27 +f 649/297/27 650/299/27 647/298/27 +f 620/300/27 618/298/27 651/299/27 +f 651/299/27 652/300/27 620/300/27 +f 653/280/27 654/300/27 655/300/27 +f 655/300/27 656/281/27 653/280/27 +f 622/301/19 621/302/19 657/303/19 +f 657/303/19 658/304/19 622/301/19 +f 627/305/20 622/301/20 658/304/20 +f 658/304/20 659/306/20 627/305/20 +f 628/307/21 627/305/21 659/306/21 +f 659/306/21 660/308/21 628/307/21 +f 633/309/22 628/307/22 660/308/22 +f 660/308/22 661/310/22 633/309/22 +f 634/311/23 633/309/23 661/310/23 +f 661/310/23 662/312/23 634/311/23 +f 639/313/24 634/311/24 662/312/24 +f 662/312/24 663/314/24 639/313/24 +f 640/315/192 639/313/13 663/314/13 +f 663/314/13 664/316/192 640/315/192 +f 645/317/14 640/315/14 664/316/14 +f 664/316/14 665/318/14 645/317/14 +f 646/319/15 645/317/15 665/318/15 +f 665/318/15 666/320/15 646/319/15 +f 651/321/16 646/322/16 666/323/193 +f 666/323/193 667/324/16 651/321/16 +f 652/325/17 651/321/17 667/324/17 +f 667/324/17 668/326/17 652/325/17 +f 621/302/18 652/325/194 668/326/194 +f 668/326/194 657/303/18 621/302/18 +f 658/327/27 657/328/27 669/329/27 +f 659/330/27 658/327/27 669/329/27 +f 660/331/27 659/330/27 669/329/27 +f 661/332/27 660/331/27 669/329/27 +f 662/333/27 661/332/27 669/329/27 +f 663/334/27 662/333/27 669/329/27 +f 664/335/27 663/334/27 669/329/27 +f 665/336/27 664/335/27 669/329/27 +f 666/337/27 665/336/27 669/329/27 +f 667/338/27 666/337/27 669/329/27 +f 668/339/27 667/338/27 669/329/27 +f 657/328/27 668/339/27 669/329/27 +f 602/258/14 600/256/14 624/340/14 +f 624/340/14 623/341/14 602/258/14 +f 600/279/161 622/282/161 625/282/161 +f 625/282/161 624/279/161 600/279/161 +f 622/301/20 627/305/20 626/342/20 +f 626/342/20 625/343/20 622/301/20 +f 627/284/195 602/283/195 623/283/195 +f 623/283/195 626/284/195 627/284/195 +f 606/264/16 604/263/16 630/344/193 +f 630/344/193 629/345/16 606/264/16 +f 604/285/1 628/285/1 631/285/1 +f 631/285/1 630/285/1 604/285/1 +f 628/307/22 633/309/22 632/346/22 +f 632/346/22 631/347/22 628/307/22 +f 633/287/196 606/286/196 629/286/196 +f 629/286/196 632/287/196 633/287/196 +f 610/268/18 608/266/18 636/348/18 +f 636/348/18 635/349/18 610/268/18 +f 608/288/153 634/289/153 637/289/153 +f 637/289/153 636/288/153 608/288/153 +f 634/311/24 639/313/24 638/350/24 +f 638/350/24 637/351/24 634/311/24 +f 639/291/10 610/290/10 635/290/10 +f 635/290/10 638/291/10 639/291/10 +f 614/272/20 612/270/20 642/352/20 +f 642/352/20 641/353/20 614/272/20 +f 612/292/163 640/293/163 643/293/163 +f 643/293/163 642/292/163 612/292/163 +f 640/315/14 645/317/14 644/354/14 +f 644/354/14 643/355/14 640/315/14 +f 645/295/197 614/294/197 641/294/197 +f 641/294/197 644/295/197 645/295/197 +f 618/276/191 616/274/22 648/356/22 +f 648/356/22 647/357/22 618/276/191 +f 616/296/7 646/297/7 649/297/7 +f 649/297/7 648/296/7 616/296/7 +f 646/322/16 651/321/16 650/358/16 +f 650/358/16 649/359/16 646/322/16 +f 651/299/198 618/298/198 647/298/198 +f 647/298/198 650/299/198 651/299/198 +f 599/255/24 620/278/25 654/360/24 +f 654/360/24 653/361/24 599/255/24 +f 620/300/151 652/300/151 655/300/151 +f 655/300/151 654/300/151 620/300/151 +f 652/325/194 621/302/18 656/362/18 +f 656/362/18 655/363/194 652/325/194 +f 621/281/4 599/280/4 653/280/4 +f 653/280/4 656/281/4 621/281/4 +f 670/364/199 671/365/199 672/366/199 +f 672/366/199 673/367/199 670/364/199 +f 671/368/200 674/369/200 675/370/200 +f 675/370/200 672/371/200 671/368/200 +f 674/365/201 676/364/201 677/367/201 +f 677/367/201 675/366/201 674/365/201 +f 676/372/202 670/373/202 673/374/202 +f 673/374/202 677/375/202 676/372/202 +f 678/376/7 679/377/7 680/378/7 +f 680/378/7 681/379/7 678/376/7 +f 679/380/4 682/381/4 683/382/4 +f 683/382/4 680/383/4 679/380/4 +f 684/384/1 685/385/1 686/386/1 +f 686/386/1 687/387/1 684/384/1 +f 688/388/10 678/389/10 681/390/10 +f 681/390/10 689/391/10 688/388/10 +f 676/392/26 674/393/26 683/394/26 +f 683/394/26 689/395/26 676/392/26 +f 683/394/26 674/393/26 671/396/26 +f 671/396/26 680/397/26 683/394/26 +f 680/397/26 671/396/26 670/398/26 +f 670/398/26 681/399/26 680/397/26 +f 681/399/26 670/398/26 676/392/26 +f 676/392/26 689/395/26 681/399/26 +f 673/400/27 672/401/27 690/402/27 +f 690/402/27 691/403/27 673/400/27 +f 672/401/27 675/404/27 692/405/27 +f 692/405/27 690/402/27 672/401/27 +f 675/404/27 677/406/27 693/407/27 +f 693/407/27 692/405/27 675/404/27 +f 677/406/27 673/400/27 691/403/27 +f 691/403/27 693/407/27 677/406/27 +f 688/408/1 689/409/1 694/410/1 +f 694/410/1 695/411/1 688/408/1 +f 689/409/1 683/412/1 696/413/1 +f 696/413/1 694/410/1 689/409/1 +f 683/412/1 682/414/1 697/415/1 +f 697/415/1 696/413/1 683/412/1 +f 695/416/10 694/417/10 686/418/10 +f 686/418/10 685/419/10 695/416/10 +f 694/420/27 696/421/27 687/422/27 +f 687/422/27 686/423/27 694/420/27 +f 696/417/4 697/416/4 684/419/4 +f 684/419/4 687/418/4 696/417/4 +f 698/243/150 699/246/150 700/245/150 +f 700/245/150 701/244/150 698/243/150 +f 698/247/153 702/250/153 703/249/153 +f 703/249/153 699/248/153 698/247/153 +f 699/246/152 703/252/152 704/251/152 +f 704/251/152 700/245/152 699/246/152 +f 700/248/151 704/249/151 705/250/151 +f 705/250/151 701/247/151 700/248/151 +f 706/424/203 707/425/204 708/426/205 +f 708/426/205 709/427/27 706/424/203 +f 710/428/1 711/429/1 707/429/1 +f 707/429/1 706/428/1 710/428/1 +f 712/430/206 708/430/206 707/431/206 +f 707/431/206 711/431/206 712/430/206 +f 706/424/203 709/427/27 713/426/207 +f 713/426/207 714/425/208 706/424/203 +f 710/428/1 706/428/1 714/432/1 +f 714/432/1 715/432/1 710/428/1 +f 714/431/209 713/430/209 716/430/209 +f 716/430/209 715/431/209 714/431/209 +f 717/433/210 709/427/27 708/426/205 +f 708/426/205 718/434/211 717/433/210 +f 719/428/7 717/428/7 718/429/7 +f 718/429/7 720/429/7 719/428/7 +f 718/435/212 708/430/212 712/430/212 +f 712/430/212 720/435/212 718/435/212 +f 717/433/210 721/434/213 713/426/207 +f 713/426/207 709/427/27 717/433/210 +f 719/428/7 722/432/7 721/432/7 +f 721/432/7 717/428/7 719/428/7 +f 716/430/214 713/430/214 721/435/214 +f 721/435/214 722/435/214 716/430/214 +f 723/436/4 724/437/4 725/438/4 +f 725/438/4 726/439/4 723/436/4 +f 724/437/215 723/436/215 727/440/215 +f 727/440/215 728/441/215 724/437/215 +f 723/436/216 726/439/216 729/440/216 +f 729/440/216 727/440/216 723/436/216 +f 730/442/217 728/441/217 727/440/217 +f 727/440/217 731/443/217 730/442/217 +f 732/444/216 731/443/216 727/440/216 +f 727/440/216 729/445/216 732/444/216 +f 733/446/10 734/447/10 735/448/10 +f 735/448/10 736/449/10 733/446/10 +f 734/447/218 737/442/218 738/443/218 +f 738/443/218 735/448/218 734/447/218 +f 735/448/219 738/443/219 739/450/219 +f 739/450/219 736/449/219 735/448/219 +f 738/443/220 737/442/220 730/442/220 +f 730/442/220 731/443/220 738/443/220 +f 732/444/219 739/444/219 738/443/219 +f 738/443/219 731/443/219 732/444/219 +f 740/436/4 741/437/4 742/438/4 +f 742/438/4 743/439/4 740/436/4 +f 741/437/221 740/436/221 744/440/221 +f 744/440/221 745/441/221 741/437/221 +f 740/436/222 743/439/222 746/440/222 +f 746/440/222 744/440/222 740/436/222 +f 747/442/223 745/441/223 744/440/223 +f 744/440/223 748/443/223 747/442/223 +f 749/444/222 748/443/222 744/440/222 +f 744/440/222 746/445/222 749/444/222 +f 750/446/10 751/447/10 752/448/10 +f 752/448/10 753/449/10 750/446/10 +f 751/447/224 754/442/224 755/443/224 +f 755/443/224 752/448/224 751/447/224 +f 752/448/222 755/443/222 756/450/222 +f 756/450/222 753/449/222 752/448/222 +f 755/443/225 754/442/225 747/442/225 +f 747/442/225 748/443/225 755/443/225 +f 749/444/222 756/444/222 755/443/222 +f 755/443/222 748/443/222 749/444/222 +f 757/436/4 758/437/4 759/438/4 +f 759/438/4 760/439/4 757/436/4 +f 758/437/226 757/436/226 761/440/226 +f 761/440/226 762/441/227 758/437/226 +f 757/436/228 760/439/228 763/440/229 +f 763/440/229 761/440/229 757/436/228 +f 764/442/230 762/441/230 761/440/230 +f 761/440/230 765/443/230 764/442/230 +f 766/444/228 765/443/228 761/440/228 +f 761/440/228 763/445/228 766/444/228 +f 767/446/10 768/447/10 769/448/10 +f 769/448/10 770/449/10 767/446/10 +f 768/447/231 771/442/232 772/443/231 +f 772/443/231 769/448/232 768/447/231 +f 769/448/229 772/443/229 773/450/229 +f 773/450/229 770/449/229 769/448/229 +f 772/443/233 771/442/233 764/442/233 +f 764/442/233 765/443/233 772/443/233 +f 766/444/229 773/444/229 772/443/229 +f 772/443/229 765/443/229 766/444/229 +f 774/436/4 775/437/4 776/438/4 +f 776/438/4 777/439/4 774/436/4 +f 775/437/226 774/436/227 778/440/227 +f 778/440/227 779/441/227 775/437/226 +f 774/436/229 777/439/229 780/440/229 +f 780/440/229 778/440/229 774/436/229 +f 781/442/230 779/441/230 778/440/230 +f 778/440/230 782/443/230 781/442/230 +f 783/444/229 782/443/229 778/440/229 +f 778/440/229 780/445/229 783/444/229 +f 784/446/10 785/447/10 786/448/10 +f 786/448/10 787/449/10 784/446/10 +f 785/447/231 788/442/232 789/443/232 +f 789/443/232 786/448/231 785/447/231 +f 786/448/228 789/443/229 790/450/229 +f 790/450/229 787/449/228 786/448/228 +f 789/443/233 788/442/233 781/442/233 +f 781/442/233 782/443/233 789/443/233 +f 783/444/229 790/444/229 789/443/229 +f 789/443/229 782/443/229 783/444/229 +f 791/436/4 792/437/4 793/438/4 +f 793/438/4 794/439/4 791/436/4 +f 792/437/234 791/436/234 795/440/234 +f 795/440/234 796/441/234 792/437/234 +f 791/436/235 794/439/235 797/440/235 +f 797/440/235 795/440/235 791/436/235 +f 798/442/236 796/441/236 795/440/236 +f 795/440/236 799/443/236 798/442/236 +f 800/444/235 799/443/235 795/440/235 +f 795/440/235 797/445/235 800/444/235 +f 801/446/10 802/447/10 803/448/10 +f 803/448/10 804/449/10 801/446/10 +f 802/447/237 805/442/237 806/443/237 +f 806/443/237 803/448/237 802/447/237 +f 803/448/235 806/443/235 807/450/235 +f 807/450/235 804/449/235 803/448/235 +f 806/443/238 805/442/238 798/442/238 +f 798/442/238 799/443/238 806/443/238 +f 800/444/239 807/444/239 806/443/239 +f 806/443/239 799/443/239 800/444/239 +f 808/436/4 809/437/4 810/438/4 +f 810/438/4 811/439/4 808/436/4 +f 809/437/240 808/436/240 812/440/240 +f 812/440/240 813/441/240 809/437/240 +f 808/436/241 811/439/241 814/440/241 +f 814/440/241 812/440/241 808/436/241 +f 815/442/236 813/441/236 812/440/236 +f 812/440/236 816/443/236 815/442/236 +f 817/444/241 816/443/241 812/440/241 +f 812/440/241 814/445/241 817/444/241 +f 818/446/10 819/447/10 820/448/10 +f 820/448/10 821/449/10 818/446/10 +f 819/447/242 822/442/242 823/443/242 +f 823/443/242 820/448/242 819/447/242 +f 820/448/243 823/443/241 824/450/241 +f 824/450/241 821/449/243 820/448/243 +f 823/443/238 822/442/238 815/442/238 +f 815/442/238 816/443/238 823/443/238 +f 817/444/241 824/444/241 823/443/241 +f 823/443/241 816/443/241 817/444/241 +f 825/436/4 826/437/4 827/438/4 +f 827/438/4 828/439/4 825/436/4 +f 826/437/215 825/436/215 829/440/215 +f 829/440/215 830/441/215 826/437/215 +f 825/436/216 828/439/216 831/440/216 +f 831/440/216 829/440/216 825/436/216 +f 832/442/217 830/441/217 829/440/217 +f 829/440/217 833/443/217 832/442/217 +f 834/444/216 833/443/216 829/440/216 +f 829/440/216 831/445/216 834/444/216 +f 835/446/10 836/447/10 837/448/10 +f 837/448/10 838/449/10 835/446/10 +f 836/447/218 839/442/218 840/443/218 +f 840/443/218 837/448/218 836/447/218 +f 837/448/219 840/443/219 841/450/219 +f 841/450/219 838/449/219 837/448/219 +f 840/443/220 839/442/220 832/442/220 +f 832/442/220 833/443/220 840/443/220 +f 834/444/219 841/444/219 840/443/219 +f 840/443/219 833/443/219 834/444/219 +f 842/436/4 843/437/4 844/438/4 +f 844/438/4 845/439/4 842/436/4 +f 843/437/215 842/436/215 846/440/215 +f 846/440/215 847/441/215 843/437/215 +f 842/436/216 845/439/216 848/440/216 +f 848/440/216 846/440/216 842/436/216 +f 849/442/217 847/441/217 846/440/217 +f 846/440/217 850/443/217 849/442/217 +f 851/444/216 850/443/216 846/440/216 +f 846/440/216 848/445/216 851/444/216 +f 852/446/10 853/447/10 854/448/10 +f 854/448/10 855/449/10 852/446/10 +f 853/447/218 856/442/218 857/443/218 +f 857/443/218 854/448/218 853/447/218 +f 854/448/219 857/443/219 858/450/219 +f 858/450/219 855/449/219 854/448/219 +f 857/443/220 856/442/220 849/442/220 +f 849/442/220 850/443/220 857/443/220 +f 851/444/219 858/444/219 857/443/219 +f 857/443/219 850/443/219 851/444/219 +f 859/438/4 860/437/4 861/436/4 +f 861/436/4 862/439/4 859/438/4 +f 863/440/244 861/436/244 860/437/244 +f 860/437/244 864/441/244 863/440/244 +f 865/440/245 862/439/245 861/436/245 +f 861/436/245 863/440/245 865/440/245 +f 863/440/246 864/441/246 866/442/246 +f 866/442/246 867/443/246 863/440/246 +f 868/444/245 865/445/245 863/440/245 +f 863/440/245 867/443/245 868/444/245 +f 869/448/10 870/447/10 871/446/10 +f 871/446/10 872/449/10 869/448/10 +f 873/443/247 874/442/247 870/447/247 +f 870/447/247 869/448/247 873/443/247 +f 875/450/248 873/443/248 869/448/248 +f 869/448/248 872/449/248 875/450/248 +f 866/442/249 874/442/249 873/443/249 +f 873/443/249 867/443/249 866/442/249 +f 868/444/248 867/443/248 873/443/248 +f 873/443/248 875/444/248 868/444/248 +f 876/438/4 877/437/4 878/436/4 +f 878/436/4 879/439/4 876/438/4 +f 880/440/250 878/436/250 877/437/250 +f 877/437/250 881/441/250 880/440/250 +f 882/440/251 879/439/251 878/436/251 +f 878/436/251 880/440/251 882/440/251 +f 880/440/252 881/441/252 883/442/252 +f 883/442/252 884/443/252 880/440/252 +f 885/444/251 882/445/251 880/440/251 +f 880/440/251 884/443/251 885/444/251 +f 886/448/10 887/447/10 888/446/10 +f 888/446/10 889/449/10 886/448/10 +f 890/443/253 891/442/253 887/447/253 +f 887/447/253 886/448/253 890/443/253 +f 892/450/251 890/443/251 886/448/254 +f 886/448/254 889/449/254 892/450/251 +f 883/442/255 891/442/255 890/443/255 +f 890/443/255 884/443/255 883/442/255 +f 885/444/251 884/443/251 890/443/251 +f 890/443/251 892/444/251 885/444/251 +f 893/438/4 894/437/4 895/436/4 +f 895/436/4 896/439/4 893/438/4 +f 897/440/256 895/436/257 894/437/256 +f 894/437/256 898/441/256 897/440/256 +f 899/440/258 896/439/258 895/436/258 +f 895/436/258 897/440/258 899/440/258 +f 897/440/259 898/441/259 900/442/259 +f 900/442/259 901/443/259 897/440/259 +f 902/444/258 899/445/258 897/440/258 +f 897/440/258 901/443/258 902/444/258 +f 903/448/10 904/447/10 905/446/10 +f 905/446/10 906/449/10 903/448/10 +f 907/443/260 908/442/260 904/447/260 +f 904/447/260 903/448/260 907/443/260 +f 909/450/261 907/443/261 903/448/261 +f 903/448/261 906/449/261 909/450/261 +f 900/442/262 908/442/262 907/443/262 +f 907/443/262 901/443/262 900/442/262 +f 902/444/261 901/443/261 907/443/261 +f 907/443/261 909/444/261 902/444/261 +f 910/438/4 911/437/4 912/436/4 +f 912/436/4 913/439/4 910/438/4 +f 914/440/257 912/436/257 911/437/257 +f 911/437/257 915/441/256 914/440/257 +f 916/440/261 913/439/261 912/436/261 +f 912/436/261 914/440/261 916/440/261 +f 914/440/259 915/441/259 917/442/259 +f 917/442/259 918/443/259 914/440/259 +f 919/444/261 916/445/261 914/440/261 +f 914/440/261 918/443/261 919/444/261 +f 920/448/10 921/447/10 922/446/10 +f 922/446/10 923/449/10 920/448/10 +f 924/443/263 925/442/260 921/447/263 +f 921/447/263 920/448/263 924/443/263 +f 926/450/258 924/443/258 920/448/261 +f 920/448/261 923/449/261 926/450/258 +f 917/442/262 925/442/262 924/443/262 +f 924/443/262 918/443/262 917/442/262 +f 919/444/261 918/443/261 924/443/261 +f 924/443/261 926/444/261 919/444/261 +f 927/438/4 928/437/4 929/436/4 +f 929/436/4 930/439/4 927/438/4 +f 931/440/264 929/436/264 928/437/264 +f 928/437/264 932/441/264 931/440/264 +f 933/440/265 930/439/265 929/436/265 +f 929/436/265 931/440/265 933/440/265 +f 931/440/266 932/441/266 934/442/266 +f 934/442/266 935/443/266 931/440/266 +f 936/444/265 933/445/265 931/440/265 +f 931/440/265 935/443/265 936/444/265 +f 937/448/10 938/447/10 939/446/10 +f 939/446/10 940/449/10 937/448/10 +f 941/443/267 942/442/267 938/447/267 +f 938/447/267 937/448/267 941/443/267 +f 943/450/265 941/443/265 937/448/265 +f 937/448/265 940/449/265 943/450/265 +f 934/442/268 942/442/268 941/443/268 +f 941/443/268 935/443/268 934/442/268 +f 936/444/269 935/443/269 941/443/269 +f 941/443/269 943/444/269 936/444/269 +f 944/438/4 945/437/4 946/436/4 +f 946/436/4 947/439/4 944/438/4 +f 948/440/270 946/436/270 945/437/270 +f 945/437/270 949/441/270 948/440/270 +f 950/440/271 947/439/271 946/436/271 +f 946/436/271 948/440/271 950/440/271 +f 948/440/266 949/441/266 951/442/266 +f 951/442/266 952/443/266 948/440/266 +f 953/444/271 950/445/271 948/440/271 +f 948/440/271 952/443/271 953/444/271 +f 954/448/10 955/447/10 956/446/10 +f 956/446/10 957/449/10 954/448/10 +f 958/443/272 959/442/272 955/447/272 +f 955/447/272 954/448/272 958/443/272 +f 960/450/271 958/443/271 954/448/273 +f 954/448/273 957/449/273 960/450/271 +f 951/442/268 959/442/268 958/443/268 +f 958/443/268 952/443/268 951/442/268 +f 953/444/271 952/443/271 958/443/271 +f 958/443/271 960/444/271 953/444/271 +f 961/438/4 962/437/4 963/436/4 +f 963/436/4 964/439/4 961/438/4 +f 965/440/244 963/436/244 962/437/244 +f 962/437/244 966/441/244 965/440/244 +f 967/440/245 964/439/245 963/436/245 +f 963/436/245 965/440/245 967/440/245 +f 965/440/246 966/441/246 968/442/274 +f 968/442/274 969/443/246 965/440/246 +f 970/444/245 967/445/245 965/440/245 +f 965/440/245 969/443/245 970/444/245 +f 971/448/10 972/447/10 973/446/10 +f 973/446/10 974/449/10 971/448/10 +f 975/443/247 976/442/247 972/447/247 +f 972/447/247 971/448/247 975/443/247 +f 977/450/248 975/443/248 971/448/248 +f 971/448/248 974/449/248 977/450/248 +f 968/442/275 976/442/249 975/443/249 +f 975/443/249 969/443/249 968/442/275 +f 970/444/248 969/443/248 975/443/248 +f 975/443/248 977/444/248 970/444/248 +f 978/438/4 979/437/4 980/436/4 +f 980/436/4 981/439/4 978/438/4 +f 982/440/244 980/436/244 979/437/244 +f 979/437/244 983/441/244 982/440/244 +f 984/440/245 981/439/245 980/436/245 +f 980/436/245 982/440/245 984/440/245 +f 982/440/246 983/441/246 985/442/246 +f 985/442/246 986/443/246 982/440/246 +f 987/444/245 984/445/245 982/440/245 +f 982/440/245 986/443/245 987/444/245 +f 988/448/10 989/447/10 990/446/10 +f 990/446/10 991/449/10 988/448/10 +f 992/443/247 993/442/247 989/447/247 +f 989/447/247 988/448/247 992/443/247 +f 994/450/248 992/443/248 988/448/248 +f 988/448/248 991/449/248 994/450/248 +f 985/442/249 993/442/249 992/443/249 +f 992/443/249 986/443/249 985/442/249 +f 987/444/248 986/443/248 992/443/248 +f 992/443/248 994/444/248 987/444/248 +f 995/436/4 996/437/4 997/438/4 +f 997/438/4 998/439/4 995/436/4 +f 996/437/276 995/436/276 999/440/276 +f 999/440/276 1000/441/276 996/437/276 +f 995/436/277 998/439/277 1001/440/278 +f 1001/440/278 999/440/278 995/436/277 +f 1002/442/279 1000/441/279 999/440/279 +f 999/440/279 1003/443/279 1002/442/279 +f 1004/444/277 1003/443/277 999/440/277 +f 999/440/277 1001/445/277 1004/444/277 +f 1005/446/10 1006/447/10 1007/448/10 +f 1007/448/10 1008/449/10 1005/446/10 +f 1006/447/280 1009/442/280 1010/443/280 +f 1010/443/280 1007/448/280 1006/447/280 +f 1007/448/278 1010/443/278 1011/450/278 +f 1011/450/278 1008/449/278 1007/448/278 +f 1010/443/281 1009/442/281 1002/442/281 +f 1002/442/281 1003/443/281 1010/443/281 +f 1004/444/278 1011/444/278 1010/443/278 +f 1010/443/278 1003/443/278 1004/444/278 +f 1012/438/4 1013/437/4 1014/436/4 +f 1014/436/4 1015/439/4 1012/438/4 +f 1016/440/282 1014/436/282 1013/437/282 +f 1013/437/282 1017/441/282 1016/440/282 +f 1018/440/283 1015/439/283 1014/436/283 +f 1014/436/283 1016/440/283 1018/440/283 +f 1016/440/284 1017/441/284 1019/442/284 +f 1019/442/284 1020/443/284 1016/440/284 +f 1021/444/283 1018/445/283 1016/440/283 +f 1016/440/283 1020/443/283 1021/444/283 +f 1022/448/10 1023/447/10 1024/446/10 +f 1024/446/10 1025/449/10 1022/448/10 +f 1026/443/285 1027/442/285 1023/447/285 +f 1023/447/285 1022/448/285 1026/443/285 +f 1028/450/286 1026/443/286 1022/448/286 +f 1022/448/286 1025/449/286 1028/450/286 +f 1019/442/287 1027/442/287 1026/443/287 +f 1026/443/287 1020/443/287 1019/442/287 +f 1021/444/286 1020/443/286 1026/443/286 +f 1026/443/286 1028/444/286 1021/444/286 +f 1029/243/187 1030/244/187 1031/245/187 +f 1031/245/187 1032/246/187 1029/243/187 +f 1029/247/163 1032/248/163 1033/249/163 +f 1033/249/163 1034/250/163 1029/247/163 +f 1032/246/188 1031/245/188 1035/251/188 +f 1035/251/188 1033/252/188 1032/246/188 +f 1031/248/161 1030/247/161 1036/250/161 +f 1036/250/161 1035/249/161 1031/248/161 +f 1037/451/27 1038/452/27 1039/453/27 +f 1039/453/27 1040/454/27 1037/451/27 +f 1041/455/7 1042/456/7 1038/457/7 +f 1038/457/7 1037/458/7 1041/455/7 +f 1042/459/4 1043/460/4 1039/461/4 +f 1039/461/4 1038/462/4 1042/459/4 +f 1043/456/1 1044/455/1 1040/458/1 +f 1040/458/1 1039/457/1 1043/456/1 +f 1044/460/10 1041/459/10 1037/462/10 +f 1037/462/10 1040/461/10 1044/460/10 +f 1045/451/27 1046/452/27 1047/453/27 +f 1047/453/27 1048/454/27 1045/451/27 +f 1049/455/7 1050/456/7 1046/457/7 +f 1046/457/7 1045/458/7 1049/455/7 +f 1050/459/4 1051/460/4 1047/461/4 +f 1047/461/4 1046/462/4 1050/459/4 +f 1051/456/1 1052/455/1 1048/458/1 +f 1048/458/1 1047/457/1 1051/456/1 +f 1052/460/10 1049/459/10 1045/462/10 +f 1045/462/10 1048/461/10 1052/460/10 +f 1053/451/27 1054/452/27 1055/453/27 +f 1055/453/27 1056/454/27 1053/451/27 +f 1057/455/7 1058/456/7 1054/457/7 +f 1054/457/7 1053/458/7 1057/455/7 +f 1058/459/4 1059/460/4 1055/461/4 +f 1055/461/4 1054/462/4 1058/459/4 +f 1059/456/1 1060/455/1 1056/458/1 +f 1056/458/1 1055/457/1 1059/456/1 +f 1060/460/10 1057/459/10 1053/462/10 +f 1053/462/10 1056/461/10 1060/460/10 +f 1061/451/27 1062/452/27 1063/453/27 +f 1063/453/27 1064/454/27 1061/451/27 +f 1065/455/10 1066/456/10 1062/457/10 +f 1062/457/10 1061/458/10 1065/455/10 +f 1066/459/7 1067/460/7 1063/461/7 +f 1063/461/7 1062/462/7 1066/459/7 +f 1067/456/4 1068/455/4 1064/458/4 +f 1064/458/4 1063/457/4 1067/456/4 +f 1068/460/1 1065/459/1 1061/462/1 +f 1061/462/1 1064/461/1 1068/460/1 +f 1069/451/27 1070/452/27 1071/453/27 +f 1071/453/27 1072/454/27 1069/451/27 +f 1073/455/10 1074/456/10 1070/457/10 +f 1070/457/10 1069/458/10 1073/455/10 +f 1074/459/7 1075/460/7 1071/461/7 +f 1071/461/7 1070/462/7 1074/459/7 +f 1075/456/4 1076/455/4 1072/458/4 +f 1072/458/4 1071/457/4 1075/456/4 +f 1076/460/1 1073/459/1 1069/462/1 +f 1069/462/1 1072/461/1 1076/460/1 +f 1077/451/27 1078/452/27 1079/453/27 +f 1079/453/27 1080/454/27 1077/451/27 +f 1081/455/10 1082/456/10 1078/457/10 +f 1078/457/10 1077/458/10 1081/455/10 +f 1082/459/7 1083/460/7 1079/461/7 +f 1079/461/7 1078/462/7 1082/459/7 +f 1083/456/4 1084/455/4 1080/458/4 +f 1080/458/4 1079/457/4 1083/456/4 +f 1084/460/1 1081/459/1 1077/462/1 +f 1077/462/1 1080/461/1 1084/460/1 +f 1085/451/27 1086/452/27 1087/453/27 +f 1087/453/27 1088/454/27 1085/451/27 +f 1089/455/10 1090/456/10 1086/457/10 +f 1086/457/10 1085/458/10 1089/455/10 +f 1090/459/7 1091/460/7 1087/461/7 +f 1087/461/7 1086/462/7 1090/459/7 +f 1091/456/4 1092/455/4 1088/458/4 +f 1088/458/4 1087/457/4 1091/456/4 +f 1092/460/1 1089/459/1 1085/462/1 +f 1085/462/1 1088/461/1 1092/460/1 +f 1093/451/27 1094/452/27 1095/453/27 +f 1095/453/27 1096/454/27 1093/451/27 +f 1097/455/7 1098/456/7 1094/457/7 +f 1094/457/7 1093/458/7 1097/455/7 +f 1098/459/4 1099/460/4 1095/461/4 +f 1095/461/4 1094/462/4 1098/459/4 +f 1099/456/1 1100/455/1 1096/458/1 +f 1096/458/1 1095/457/1 1099/456/1 +f 1100/460/10 1097/459/10 1093/462/10 +f 1093/462/10 1096/461/10 1100/460/10 +f 1101/451/27 1102/452/27 1103/453/27 +f 1103/453/27 1104/454/27 1101/451/27 +f 1105/455/7 1106/456/7 1102/457/7 +f 1102/457/7 1101/458/7 1105/455/7 +f 1106/459/4 1107/460/4 1103/461/4 +f 1103/461/4 1102/462/4 1106/459/4 +f 1107/456/1 1108/455/1 1104/458/1 +f 1104/458/1 1103/457/1 1107/456/1 +f 1108/460/10 1105/459/10 1101/462/10 +f 1101/462/10 1104/461/10 1108/460/10 +f 1109/451/27 1110/452/27 1111/453/27 +f 1111/453/27 1112/454/27 1109/451/27 +f 1113/455/7 1114/456/7 1110/457/7 +f 1110/457/7 1109/458/7 1113/455/7 +f 1114/459/4 1115/460/4 1111/461/4 +f 1111/461/4 1110/462/4 1114/459/4 +f 1115/456/1 1116/455/1 1112/458/1 +f 1112/458/1 1111/457/1 1115/456/1 +f 1116/460/10 1113/459/10 1109/462/10 +f 1109/462/10 1112/461/10 1116/460/10 +f 1117/451/27 1118/452/27 1119/453/27 +f 1119/453/27 1120/454/27 1117/451/27 +f 1121/455/7 1122/456/7 1118/457/7 +f 1118/457/7 1117/458/7 1121/455/7 +f 1122/459/4 1123/460/4 1119/461/4 +f 1119/461/4 1118/462/4 1122/459/4 +f 1123/456/1 1124/455/1 1120/458/1 +f 1120/458/1 1119/457/1 1123/456/1 +f 1124/460/10 1121/459/10 1117/462/10 +f 1117/462/10 1120/461/10 1124/460/10 +f 1125/451/27 1126/452/27 1127/453/27 +f 1127/453/27 1128/454/27 1125/451/27 +f 1129/455/7 1130/456/7 1126/457/7 +f 1126/457/7 1125/458/7 1129/455/7 +f 1130/459/4 1131/460/4 1127/461/4 +f 1127/461/4 1126/462/4 1130/459/4 +f 1131/456/1 1132/455/1 1128/458/1 +f 1128/458/1 1127/457/1 1131/456/1 +f 1132/460/10 1129/459/10 1125/462/10 +f 1125/462/10 1128/461/10 1132/460/10 +f 1133/451/27 1134/452/27 1135/453/27 +f 1135/453/27 1136/454/27 1133/451/27 +f 1137/455/7 1138/456/7 1134/457/7 +f 1134/457/7 1133/458/7 1137/455/7 +f 1138/459/4 1139/460/4 1135/461/4 +f 1135/461/4 1134/462/4 1138/459/4 +f 1139/456/1 1140/455/1 1136/458/1 +f 1136/458/1 1135/457/1 1139/456/1 +f 1140/460/10 1137/459/10 1133/462/10 +f 1133/462/10 1136/461/10 1140/460/10 +f 1141/451/27 1142/452/27 1143/453/27 +f 1143/453/27 1144/454/27 1141/451/27 +f 1145/455/7 1146/456/7 1142/457/7 +f 1142/457/7 1141/458/7 1145/455/7 +f 1146/459/4 1147/460/4 1143/461/4 +f 1143/461/4 1142/462/4 1146/459/4 +f 1147/456/1 1148/455/1 1144/458/1 +f 1144/458/1 1143/457/1 1147/456/1 +f 1148/460/10 1145/459/10 1141/462/10 +f 1141/462/10 1144/461/10 1148/460/10 +f 1149/451/27 1150/452/27 1151/453/27 +f 1151/453/27 1152/454/27 1149/451/27 +f 1153/455/7 1154/456/7 1150/457/7 +f 1150/457/7 1149/458/7 1153/455/7 +f 1154/459/4 1155/460/4 1151/461/4 +f 1151/461/4 1150/462/4 1154/459/4 +f 1155/456/1 1156/455/1 1152/458/1 +f 1152/458/1 1151/457/1 1155/456/1 +f 1156/460/10 1153/459/10 1149/462/10 +f 1149/462/10 1152/461/10 1156/460/10 +f 1157/451/27 1158/452/27 1159/453/27 +f 1159/453/27 1160/454/27 1157/451/27 +f 1161/455/7 1162/456/7 1158/457/7 +f 1158/457/7 1157/458/7 1161/455/7 +f 1162/459/4 1163/460/4 1159/461/4 +f 1159/461/4 1158/462/4 1162/459/4 +f 1163/456/1 1164/455/1 1160/458/1 +f 1160/458/1 1159/457/1 1163/456/1 +f 1164/460/10 1161/459/10 1157/462/10 +f 1157/462/10 1160/461/10 1164/460/10 +f 1165/451/27 1166/452/27 1167/453/27 +f 1167/453/27 1168/454/27 1165/451/27 +f 1169/455/7 1170/456/7 1166/457/7 +f 1166/457/7 1165/458/7 1169/455/7 +f 1170/459/4 1171/460/4 1167/461/4 +f 1167/461/4 1166/462/4 1170/459/4 +f 1171/456/1 1172/455/1 1168/458/1 +f 1168/458/1 1167/457/1 1171/456/1 +f 1172/460/10 1169/459/10 1165/462/10 +f 1165/462/10 1168/461/10 1172/460/10 +f 1173/451/27 1174/452/27 1175/453/27 +f 1175/453/27 1176/454/27 1173/451/27 +f 1177/455/7 1178/456/7 1174/457/7 +f 1174/457/7 1173/458/7 1177/455/7 +f 1178/459/4 1179/460/4 1175/461/4 +f 1175/461/4 1174/462/4 1178/459/4 +f 1179/456/1 1180/455/1 1176/458/1 +f 1176/458/1 1175/457/1 1179/456/1 +f 1180/460/10 1177/459/10 1173/462/10 +f 1173/462/10 1176/461/10 1180/460/10 +f 1181/451/27 1182/452/27 1183/453/27 +f 1183/453/27 1184/454/27 1181/451/27 +f 1185/455/7 1186/456/7 1182/457/7 +f 1182/457/7 1181/458/7 1185/455/7 +f 1186/459/4 1187/460/4 1183/461/4 +f 1183/461/4 1182/462/4 1186/459/4 +f 1187/456/1 1188/455/1 1184/458/1 +f 1184/458/1 1183/457/1 1187/456/1 +f 1188/460/10 1185/459/10 1181/462/10 +f 1181/462/10 1184/461/10 1188/460/10 +f 1189/451/27 1190/452/27 1191/453/27 +f 1191/453/27 1192/454/27 1189/451/27 +f 1193/455/7 1194/456/7 1190/457/7 +f 1190/457/7 1189/458/7 1193/455/7 +f 1194/459/4 1195/460/4 1191/461/4 +f 1191/461/4 1190/462/4 1194/459/4 +f 1195/456/1 1196/455/1 1192/458/1 +f 1192/458/1 1191/457/1 1195/456/1 +f 1196/460/10 1193/459/10 1189/462/10 +f 1189/462/10 1192/461/10 1196/460/10 +f 1197/451/27 1198/452/27 1199/453/27 +f 1199/453/27 1200/454/27 1197/451/27 +f 1201/455/7 1202/456/7 1198/457/7 +f 1198/457/7 1197/458/7 1201/455/7 +f 1202/459/4 1203/460/4 1199/461/4 +f 1199/461/4 1198/462/4 1202/459/4 +f 1203/456/1 1204/455/1 1200/458/1 +f 1200/458/1 1199/457/1 1203/456/1 +f 1204/460/10 1201/459/10 1197/462/10 +f 1197/462/10 1200/461/10 1204/460/10 +f 1205/451/27 1206/452/27 1207/453/27 +f 1207/453/27 1208/454/27 1205/451/27 +f 1209/455/7 1210/456/7 1206/457/7 +f 1206/457/7 1205/458/7 1209/455/7 +f 1210/459/4 1211/460/4 1207/461/4 +f 1207/461/4 1206/462/4 1210/459/4 +f 1211/456/1 1212/455/1 1208/458/1 +f 1208/458/1 1207/457/1 1211/456/1 +f 1212/460/10 1209/459/10 1205/462/10 +f 1205/462/10 1208/461/10 1212/460/10 +f 1213/451/27 1214/452/27 1215/453/27 +f 1215/453/27 1216/454/27 1213/451/27 +f 1217/455/7 1218/456/7 1214/457/7 +f 1214/457/7 1213/458/7 1217/455/7 +f 1218/459/4 1219/460/4 1215/461/4 +f 1215/461/4 1214/462/4 1218/459/4 +f 1219/456/1 1220/455/1 1216/458/1 +f 1216/458/1 1215/457/1 1219/456/1 +f 1220/460/10 1217/459/10 1213/462/10 +f 1213/462/10 1216/461/10 1220/460/10 +f 1221/451/27 1222/452/27 1223/453/27 +f 1223/453/27 1224/454/27 1221/451/27 +f 1225/455/7 1226/456/7 1222/457/7 +f 1222/457/7 1221/458/7 1225/455/7 +f 1226/459/4 1227/460/4 1223/461/4 +f 1223/461/4 1222/462/4 1226/459/4 +f 1227/456/1 1228/455/1 1224/458/1 +f 1224/458/1 1223/457/1 1227/456/1 +f 1228/460/10 1225/459/10 1221/462/10 +f 1221/462/10 1224/461/10 1228/460/10 +f 1229/451/27 1230/452/27 1231/453/27 +f 1231/453/27 1232/454/27 1229/451/27 +f 1233/455/4 1234/456/4 1230/457/4 +f 1230/457/4 1229/458/4 1233/455/4 +f 1234/459/1 1235/460/1 1231/461/1 +f 1231/461/1 1230/462/1 1234/459/1 +f 1235/456/10 1236/455/10 1232/458/10 +f 1232/458/10 1231/457/10 1235/456/10 +f 1236/460/7 1233/459/7 1229/462/7 +f 1229/462/7 1232/461/7 1236/460/7 +f 1237/451/27 1238/452/27 1239/453/27 +f 1239/453/27 1240/454/27 1237/451/27 +f 1241/455/4 1242/456/4 1238/457/4 +f 1238/457/4 1237/458/4 1241/455/4 +f 1242/459/1 1243/460/1 1239/461/1 +f 1239/461/1 1238/462/1 1242/459/1 +f 1243/456/10 1244/455/10 1240/458/10 +f 1240/458/10 1239/457/10 1243/456/10 +f 1244/460/7 1241/459/7 1237/462/7 +f 1237/462/7 1240/461/7 1244/460/7 +f 1245/451/27 1246/452/27 1247/453/27 +f 1247/453/27 1248/454/27 1245/451/27 +f 1249/455/4 1250/456/4 1246/457/4 +f 1246/457/4 1245/458/4 1249/455/4 +f 1250/459/1 1251/460/1 1247/461/1 +f 1247/461/1 1246/462/1 1250/459/1 +f 1251/456/10 1252/455/10 1248/458/10 +f 1248/458/10 1247/457/10 1251/456/10 +f 1252/460/7 1249/459/7 1245/462/7 +f 1245/462/7 1248/461/7 1252/460/7 +f 1253/451/27 1254/452/27 1255/453/27 +f 1255/453/27 1256/454/27 1253/451/27 +f 1257/455/4 1258/456/4 1254/457/4 +f 1254/457/4 1253/458/4 1257/455/4 +f 1258/459/1 1259/460/1 1255/461/1 +f 1255/461/1 1254/462/1 1258/459/1 +f 1259/456/10 1260/455/10 1256/458/10 +f 1256/458/10 1255/457/10 1259/456/10 +f 1260/460/7 1257/459/7 1253/462/7 +f 1253/462/7 1256/461/7 1260/460/7 +f 1261/451/27 1262/452/27 1263/453/27 +f 1263/453/27 1264/454/27 1261/451/27 +f 1265/455/7 1266/456/7 1262/457/7 +f 1262/457/7 1261/458/7 1265/455/7 +f 1266/459/4 1267/460/4 1263/461/4 +f 1263/461/4 1262/462/4 1266/459/4 +f 1267/456/1 1268/455/1 1264/458/1 +f 1264/458/1 1263/457/1 1267/456/1 +f 1268/460/10 1265/459/10 1261/462/10 +f 1261/462/10 1264/461/10 1268/460/10 +f 1269/451/27 1270/452/27 1271/453/27 +f 1271/453/27 1272/454/27 1269/451/27 +f 1273/455/7 1274/456/7 1270/457/7 +f 1270/457/7 1269/458/7 1273/455/7 +f 1274/459/4 1275/460/4 1271/461/4 +f 1271/461/4 1270/462/4 1274/459/4 +f 1275/456/1 1276/455/1 1272/458/1 +f 1272/458/1 1271/457/1 1275/456/1 +f 1276/460/10 1273/459/10 1269/462/10 +f 1269/462/10 1272/461/10 1276/460/10 +f 1277/451/27 1278/452/27 1279/453/27 +f 1279/453/27 1280/454/27 1277/451/27 +f 1281/455/7 1282/456/7 1278/457/7 +f 1278/457/7 1277/458/7 1281/455/7 +f 1282/459/4 1283/460/4 1279/461/4 +f 1279/461/4 1278/462/4 1282/459/4 +f 1283/456/1 1284/455/1 1280/458/1 +f 1280/458/1 1279/457/1 1283/456/1 +f 1284/460/10 1281/459/10 1277/462/10 +f 1277/462/10 1280/461/10 1284/460/10 +f 1285/451/27 1286/452/27 1287/453/27 +f 1287/453/27 1288/454/27 1285/451/27 +f 1289/455/7 1290/456/7 1286/457/7 +f 1286/457/7 1285/458/7 1289/455/7 +f 1290/459/4 1291/460/4 1287/461/4 +f 1287/461/4 1286/462/4 1290/459/4 +f 1291/456/1 1292/455/1 1288/458/1 +f 1288/458/1 1287/457/1 1291/456/1 +f 1292/460/10 1289/459/10 1285/462/10 +f 1285/462/10 1288/461/10 1292/460/10 +f 1293/451/27 1294/452/27 1295/453/27 +f 1295/453/27 1296/454/27 1293/451/27 +f 1297/455/7 1298/456/7 1294/457/7 +f 1294/457/7 1293/458/7 1297/455/7 +f 1298/459/4 1299/460/4 1295/461/4 +f 1295/461/4 1294/462/4 1298/459/4 +f 1299/456/1 1300/455/1 1296/458/1 +f 1296/458/1 1295/457/1 1299/456/1 +f 1300/460/10 1297/459/10 1293/462/10 +f 1293/462/10 1296/461/10 1300/460/10 +f 1301/451/27 1302/452/27 1303/453/27 +f 1303/453/27 1304/454/27 1301/451/27 +f 1305/455/7 1306/456/7 1302/457/7 +f 1302/457/7 1301/458/7 1305/455/7 +f 1306/459/4 1307/460/4 1303/461/4 +f 1303/461/4 1302/462/4 1306/459/4 +f 1307/456/1 1308/455/1 1304/458/1 +f 1304/458/1 1303/457/1 1307/456/1 +f 1308/460/10 1305/459/10 1301/462/10 +f 1301/462/10 1304/461/10 1308/460/10 +f 1309/451/27 1310/452/27 1311/453/27 +f 1311/453/27 1312/454/27 1309/451/27 +f 1313/455/7 1314/456/7 1310/457/7 +f 1310/457/7 1309/458/7 1313/455/7 +f 1314/459/4 1315/460/4 1311/461/4 +f 1311/461/4 1310/462/4 1314/459/4 +f 1315/456/1 1316/455/1 1312/458/1 +f 1312/458/1 1311/457/1 1315/456/1 +f 1316/460/10 1313/459/10 1309/462/10 +f 1309/462/10 1312/461/10 1316/460/10 +f 1317/451/27 1318/452/27 1319/453/27 +f 1319/453/27 1320/454/27 1317/451/27 +f 1321/455/4 1322/456/4 1318/457/4 +f 1318/457/4 1317/458/4 1321/455/4 +f 1322/459/1 1323/460/1 1319/461/1 +f 1319/461/1 1318/462/1 1322/459/1 +f 1323/456/10 1324/455/10 1320/458/10 +f 1320/458/10 1319/457/10 1323/456/10 +f 1324/460/7 1321/459/7 1317/462/7 +f 1317/462/7 1320/461/7 1324/460/7 +f 1325/451/27 1326/452/27 1327/453/27 +f 1327/453/27 1328/454/27 1325/451/27 +f 1329/455/4 1330/456/4 1326/457/4 +f 1326/457/4 1325/458/4 1329/455/4 +f 1330/459/1 1331/460/1 1327/461/1 +f 1327/461/1 1326/462/1 1330/459/1 +f 1331/456/10 1332/455/10 1328/458/10 +f 1328/458/10 1327/457/10 1331/456/10 +f 1332/460/7 1329/459/7 1325/462/7 +f 1325/462/7 1328/461/7 1332/460/7 +f 1333/451/27 1334/452/27 1335/453/27 +f 1335/453/27 1336/454/27 1333/451/27 +f 1337/455/4 1338/456/4 1334/457/4 +f 1334/457/4 1333/458/4 1337/455/4 +f 1338/459/1 1339/460/1 1335/461/1 +f 1335/461/1 1334/462/1 1338/459/1 +f 1339/456/10 1340/455/10 1336/458/10 +f 1336/458/10 1335/457/10 1339/456/10 +f 1340/460/7 1337/459/7 1333/462/7 +f 1333/462/7 1336/461/7 1340/460/7 +f 1341/451/27 1342/452/27 1343/453/27 +f 1343/453/27 1344/454/27 1341/451/27 +f 1345/455/4 1346/456/4 1342/457/4 +f 1342/457/4 1341/458/4 1345/455/4 +f 1346/459/1 1347/460/1 1343/461/1 +f 1343/461/1 1342/462/1 1346/459/1 +f 1347/456/10 1348/455/10 1344/458/10 +f 1344/458/10 1343/457/10 1347/456/10 +f 1348/460/7 1345/459/7 1341/462/7 +f 1341/462/7 1344/461/7 1348/460/7 +f 1349/451/27 1350/452/27 1351/453/27 +f 1351/453/27 1352/454/27 1349/451/27 +f 1353/455/4 1354/456/4 1350/457/4 +f 1350/457/4 1349/458/4 1353/455/4 +f 1354/459/1 1355/460/1 1351/461/1 +f 1351/461/1 1350/462/1 1354/459/1 +f 1355/456/10 1356/455/10 1352/458/10 +f 1352/458/10 1351/457/10 1355/456/10 +f 1356/460/7 1353/459/7 1349/462/7 +f 1349/462/7 1352/461/7 1356/460/7 +f 1357/463/27 1358/464/27 1359/465/27 +f 1359/465/27 1360/466/27 1357/463/27 +f 1361/467/4 1362/468/4 1359/469/4 +f 1359/469/4 1358/470/4 1361/467/4 +f 1363/471/4 1364/472/4 1365/473/4 +f 1365/473/4 1366/474/4 1363/471/4 +f 1367/475/1 1368/476/1 1369/477/1 +f 1369/477/1 1370/478/1 1367/475/1 +f 1371/479/27 1372/480/288 1373/480/288 +f 1373/480/288 1374/479/27 1371/479/27 +f 1375/476/7 1376/475/7 1377/481/7 +f 1377/481/7 1378/482/7 1375/476/7 +f 1379/483/26 1380/484/289 1381/485/289 +f 1381/485/289 1382/483/26 1379/483/26 +f 1383/486/4 1384/487/4 1385/488/4 +f 1386/489/4 1387/490/4 1372/491/4 +f 1372/491/4 1371/492/4 1386/489/4 +f 1388/493/4 1389/494/4 1390/495/4 +f 1391/496/4 1392/497/4 1390/495/4 +f 1390/495/4 1389/494/4 1391/496/4 +f 1393/498/4 1394/499/4 1365/473/4 +f 1365/473/4 1364/472/4 1393/498/4 +f 1395/500/290 1371/479/27 1374/479/27 +f 1374/479/27 1396/500/290 1395/500/290 +f 1397/501/291 1379/483/26 1382/483/26 +f 1382/483/26 1398/501/291 1397/501/291 +f 1395/502/4 1399/503/4 1386/489/4 +f 1386/489/4 1371/492/4 1395/502/4 +f 1391/496/4 1383/486/4 1385/488/4 +f 1385/488/4 1392/497/4 1391/496/4 +f 1387/504/7 1363/504/7 1366/505/7 +f 1366/505/7 1400/505/7 1387/504/7 +f 1386/506/292 1364/506/292 1363/504/292 +f 1363/504/292 1387/504/292 1386/506/292 +f 1399/507/293 1393/507/293 1364/506/293 +f 1364/506/293 1386/506/293 1399/507/293 +f 1401/508/1 1394/508/1 1393/507/1 +f 1393/507/1 1399/507/1 1401/508/1 +f 1402/509/210 1365/510/210 1394/511/210 +f 1394/511/210 1401/512/210 1402/509/210 +f 1400/513/294 1366/514/294 1365/510/294 +f 1365/510/294 1402/509/294 1400/513/294 +f 1403/515/4 1401/516/4 1399/503/4 +f 1399/503/4 1395/502/4 1403/515/4 +f 1395/500/7 1396/500/7 1404/517/7 +f 1404/517/7 1403/517/7 1395/500/7 +f 1372/480/1 1405/518/1 1406/518/1 +f 1406/518/1 1373/480/1 1372/480/1 +f 1405/519/4 1372/491/4 1387/490/4 +f 1387/490/4 1400/474/4 1405/519/4 +f 1367/475/1 1407/481/1 1408/482/1 +f 1408/482/1 1368/476/1 1367/475/1 +f 1400/513/295 1385/513/295 1384/485/295 +f 1384/485/295 1405/520/295 1400/513/295 +f 1402/509/294 1392/509/294 1385/513/294 +f 1385/513/294 1400/513/294 1402/509/294 +f 1401/512/210 1390/512/210 1392/509/210 +f 1392/509/210 1402/509/210 1401/512/210 +f 1403/521/296 1388/521/296 1390/512/296 +f 1390/512/296 1401/512/296 1403/521/296 +f 1375/476/7 1409/477/7 1410/478/7 +f 1410/478/7 1376/475/7 1375/476/7 +f 1379/483/289 1391/522/289 1389/523/289 +f 1389/523/289 1380/484/289 1379/483/289 +f 1397/501/291 1383/524/291 1391/522/291 +f 1391/522/291 1379/483/291 1397/501/291 +f 1405/520/27 1367/525/27 1370/526/27 +f 1370/526/27 1406/527/27 1405/520/27 +f 1384/485/27 1407/528/27 1367/525/27 +f 1367/525/27 1405/520/27 1384/485/27 +f 1383/486/4 1408/486/4 1407/487/4 +f 1407/487/4 1384/487/4 1383/486/4 +f 1397/501/26 1368/501/26 1408/524/26 +f 1408/524/26 1383/524/26 1397/501/26 +f 1398/501/26 1369/501/26 1368/501/26 +f 1368/501/26 1397/501/26 1398/501/26 +f 1380/484/26 1375/484/26 1378/485/26 +f 1378/485/26 1381/485/26 1380/484/26 +f 1389/523/26 1409/523/26 1375/484/26 +f 1375/484/26 1380/484/26 1389/523/26 +f 1388/493/4 1410/529/4 1409/530/4 +f 1409/530/4 1389/494/4 1388/493/4 +f 1403/521/27 1376/531/27 1410/532/27 +f 1410/532/27 1388/521/27 1403/521/27 +f 1404/533/27 1377/531/27 1376/531/27 +f 1376/531/27 1403/521/27 1404/533/27 +f 1411/471/4 1412/472/4 1413/473/4 +f 1413/473/4 1414/474/4 1411/471/4 +f 1415/475/1 1416/476/1 1417/477/1 +f 1417/477/1 1418/478/1 1415/475/1 +f 1419/479/27 1420/480/288 1421/480/288 +f 1421/480/288 1422/479/27 1419/479/27 +f 1423/476/7 1424/475/7 1425/481/7 +f 1425/481/7 1426/482/7 1423/476/7 +f 1427/483/26 1428/484/289 1429/485/289 +f 1429/485/289 1430/483/26 1427/483/26 +f 1431/486/4 1432/487/4 1433/488/4 +f 1434/489/4 1435/490/4 1420/491/4 +f 1420/491/4 1419/492/4 1434/489/4 +f 1436/493/4 1437/494/4 1438/495/4 +f 1439/496/4 1440/497/4 1438/495/4 +f 1438/495/4 1437/494/4 1439/496/4 +f 1441/498/4 1442/499/4 1413/473/4 +f 1413/473/4 1412/472/4 1441/498/4 +f 1443/500/290 1419/479/27 1422/479/27 +f 1422/479/27 1444/500/290 1443/500/290 +f 1445/501/291 1427/483/26 1430/483/26 +f 1430/483/26 1446/501/291 1445/501/291 +f 1443/502/4 1447/503/4 1434/489/4 +f 1434/489/4 1419/492/4 1443/502/4 +f 1439/496/4 1431/486/4 1433/488/4 +f 1433/488/4 1440/497/4 1439/496/4 +f 1435/504/7 1411/504/7 1414/505/7 +f 1414/505/7 1448/505/7 1435/504/7 +f 1434/506/292 1412/506/292 1411/504/292 +f 1411/504/292 1435/504/292 1434/506/292 +f 1447/507/293 1441/507/293 1412/506/293 +f 1412/506/293 1434/506/293 1447/507/293 +f 1449/508/1 1442/508/1 1441/507/1 +f 1441/507/1 1447/507/1 1449/508/1 +f 1450/509/210 1413/510/210 1442/511/210 +f 1442/511/210 1449/512/210 1450/509/210 +f 1448/513/294 1414/514/294 1413/510/294 +f 1413/510/294 1450/509/294 1448/513/294 +f 1451/515/4 1449/516/4 1447/503/4 +f 1447/503/4 1443/502/4 1451/515/4 +f 1443/500/7 1444/500/7 1452/517/7 +f 1452/517/7 1451/517/7 1443/500/7 +f 1420/480/1 1453/518/1 1454/518/1 +f 1454/518/1 1421/480/1 1420/480/1 +f 1453/519/4 1420/491/4 1435/490/4 +f 1435/490/4 1448/474/4 1453/519/4 +f 1415/475/1 1455/481/1 1456/482/1 +f 1456/482/1 1416/476/1 1415/475/1 +f 1448/513/295 1433/513/295 1432/485/295 +f 1432/485/295 1453/520/295 1448/513/295 +f 1450/509/294 1440/509/294 1433/513/294 +f 1433/513/294 1448/513/294 1450/509/294 +f 1449/512/210 1438/512/210 1440/509/210 +f 1440/509/210 1450/509/210 1449/512/210 +f 1451/521/296 1436/521/296 1438/512/296 +f 1438/512/296 1449/512/296 1451/521/296 +f 1423/476/7 1457/477/7 1458/478/7 +f 1458/478/7 1424/475/7 1423/476/7 +f 1427/483/289 1439/522/289 1437/523/289 +f 1437/523/289 1428/484/289 1427/483/289 +f 1445/501/291 1431/524/291 1439/522/291 +f 1439/522/291 1427/483/291 1445/501/291 +f 1453/520/27 1415/525/27 1418/526/27 +f 1418/526/27 1454/527/27 1453/520/27 +f 1432/485/27 1455/528/27 1415/525/27 +f 1415/525/27 1453/520/27 1432/485/27 +f 1431/486/4 1456/486/4 1455/487/4 +f 1455/487/4 1432/487/4 1431/486/4 +f 1445/501/26 1416/501/26 1456/524/26 +f 1456/524/26 1431/524/26 1445/501/26 +f 1446/501/26 1417/501/26 1416/501/26 +f 1416/501/26 1445/501/26 1446/501/26 +f 1428/484/26 1423/484/26 1426/485/26 +f 1426/485/26 1429/485/26 1428/484/26 +f 1437/523/26 1457/523/26 1423/484/26 +f 1423/484/26 1428/484/26 1437/523/26 +f 1436/493/4 1458/529/4 1457/530/4 +f 1457/530/4 1437/494/4 1436/493/4 +f 1451/521/27 1424/531/27 1458/532/27 +f 1458/532/27 1436/521/27 1451/521/27 +f 1452/533/27 1425/531/27 1424/531/27 +f 1424/531/27 1451/521/27 1452/533/27 +f 1459/471/4 1460/472/4 1461/473/4 +f 1461/473/4 1462/474/4 1459/471/4 +f 1463/475/1 1464/476/1 1465/477/1 +f 1465/477/1 1466/478/1 1463/475/1 +f 1467/479/27 1468/480/288 1469/480/288 +f 1469/480/288 1470/479/27 1467/479/27 +f 1471/476/7 1472/475/7 1473/481/7 +f 1473/481/7 1474/482/7 1471/476/7 +f 1475/483/26 1476/484/289 1477/485/289 +f 1477/485/289 1478/483/26 1475/483/26 +f 1479/486/4 1480/487/4 1481/488/4 +f 1482/489/4 1483/490/4 1468/491/4 +f 1468/491/4 1467/492/4 1482/489/4 +f 1484/493/4 1485/494/4 1486/495/4 +f 1487/496/4 1488/497/4 1486/495/4 +f 1486/495/4 1485/494/4 1487/496/4 +f 1489/498/4 1490/499/4 1461/473/4 +f 1461/473/4 1460/472/4 1489/498/4 +f 1491/500/290 1467/479/27 1470/479/27 +f 1470/479/27 1492/500/290 1491/500/290 +f 1493/501/291 1475/483/26 1478/483/26 +f 1478/483/26 1494/501/291 1493/501/291 +f 1491/502/4 1495/503/4 1482/489/4 +f 1482/489/4 1467/492/4 1491/502/4 +f 1487/496/4 1479/486/4 1481/488/4 +f 1481/488/4 1488/497/4 1487/496/4 +f 1483/504/7 1459/504/7 1462/505/7 +f 1462/505/7 1496/505/7 1483/504/7 +f 1482/506/292 1460/506/292 1459/504/292 +f 1459/504/292 1483/504/292 1482/506/292 +f 1495/507/293 1489/507/293 1460/506/293 +f 1460/506/293 1482/506/293 1495/507/293 +f 1497/508/1 1490/508/1 1489/507/1 +f 1489/507/1 1495/507/1 1497/508/1 +f 1498/509/210 1461/510/210 1490/511/210 +f 1490/511/210 1497/512/210 1498/509/210 +f 1496/513/294 1462/514/294 1461/510/294 +f 1461/510/294 1498/509/294 1496/513/294 +f 1499/515/4 1497/516/4 1495/503/4 +f 1495/503/4 1491/502/4 1499/515/4 +f 1491/500/7 1492/500/7 1500/517/7 +f 1500/517/7 1499/517/7 1491/500/7 +f 1468/480/1 1501/518/1 1502/518/1 +f 1502/518/1 1469/480/1 1468/480/1 +f 1501/519/4 1468/491/4 1483/490/4 +f 1483/490/4 1496/474/4 1501/519/4 +f 1463/475/1 1503/481/1 1504/482/1 +f 1504/482/1 1464/476/1 1463/475/1 +f 1496/513/295 1481/513/295 1480/485/295 +f 1480/485/295 1501/520/295 1496/513/295 +f 1498/509/294 1488/509/294 1481/513/294 +f 1481/513/294 1496/513/294 1498/509/294 +f 1497/512/210 1486/512/210 1488/509/210 +f 1488/509/210 1498/509/210 1497/512/210 +f 1499/521/296 1484/521/296 1486/512/296 +f 1486/512/296 1497/512/296 1499/521/296 +f 1471/476/7 1505/477/7 1506/478/7 +f 1506/478/7 1472/475/7 1471/476/7 +f 1475/483/289 1487/522/289 1485/523/289 +f 1485/523/289 1476/484/289 1475/483/289 +f 1493/501/291 1479/524/291 1487/522/291 +f 1487/522/291 1475/483/291 1493/501/291 +f 1501/520/27 1463/525/27 1466/526/27 +f 1466/526/27 1502/527/27 1501/520/27 +f 1480/485/27 1503/528/27 1463/525/27 +f 1463/525/27 1501/520/27 1480/485/27 +f 1479/486/4 1504/486/4 1503/487/4 +f 1503/487/4 1480/487/4 1479/486/4 +f 1493/501/26 1464/501/26 1504/524/26 +f 1504/524/26 1479/524/26 1493/501/26 +f 1494/501/26 1465/501/26 1464/501/26 +f 1464/501/26 1493/501/26 1494/501/26 +f 1476/484/26 1471/484/26 1474/485/26 +f 1474/485/26 1477/485/26 1476/484/26 +f 1485/523/26 1505/523/26 1471/484/26 +f 1471/484/26 1476/484/26 1485/523/26 +f 1484/493/4 1506/529/4 1505/530/4 +f 1505/530/4 1485/494/4 1484/493/4 +f 1499/521/27 1472/531/27 1506/532/27 +f 1506/532/27 1484/521/27 1499/521/27 +f 1500/533/27 1473/531/27 1472/531/27 +f 1472/531/27 1499/521/27 1500/533/27 +f 1507/471/4 1508/472/4 1509/473/4 +f 1509/473/4 1510/474/4 1507/471/4 +f 1511/475/1 1512/476/1 1513/477/1 +f 1513/477/1 1514/478/1 1511/475/1 +f 1515/479/27 1516/480/288 1517/480/288 +f 1517/480/288 1518/479/27 1515/479/27 +f 1519/476/7 1520/475/7 1521/481/7 +f 1521/481/7 1522/482/7 1519/476/7 +f 1523/483/26 1524/484/289 1525/485/289 +f 1525/485/289 1526/483/26 1523/483/26 +f 1527/486/4 1528/487/4 1529/488/4 +f 1530/489/4 1531/490/4 1516/491/4 +f 1516/491/4 1515/492/4 1530/489/4 +f 1532/493/4 1533/494/4 1534/495/4 +f 1535/496/4 1536/497/4 1534/495/4 +f 1534/495/4 1533/494/4 1535/496/4 +f 1537/498/4 1538/499/4 1509/473/4 +f 1509/473/4 1508/472/4 1537/498/4 +f 1539/500/290 1515/479/27 1518/479/27 +f 1518/479/27 1540/500/290 1539/500/290 +f 1541/501/291 1523/483/26 1526/483/26 +f 1526/483/26 1542/501/291 1541/501/291 +f 1539/502/4 1543/503/4 1530/489/4 +f 1530/489/4 1515/492/4 1539/502/4 +f 1535/496/4 1527/486/4 1529/488/4 +f 1529/488/4 1536/497/4 1535/496/4 +f 1531/504/7 1507/504/7 1510/505/7 +f 1510/505/7 1544/505/7 1531/504/7 +f 1530/506/292 1508/506/292 1507/504/292 +f 1507/504/292 1531/504/292 1530/506/292 +f 1543/507/293 1537/507/293 1508/506/293 +f 1508/506/293 1530/506/293 1543/507/293 +f 1545/508/1 1538/508/1 1537/507/1 +f 1537/507/1 1543/507/1 1545/508/1 +f 1546/509/210 1509/510/210 1538/511/210 +f 1538/511/210 1545/512/210 1546/509/210 +f 1544/513/294 1510/514/294 1509/510/294 +f 1509/510/294 1546/509/294 1544/513/294 +f 1547/515/4 1545/516/4 1543/503/4 +f 1543/503/4 1539/502/4 1547/515/4 +f 1539/500/7 1540/500/7 1548/517/7 +f 1548/517/7 1547/517/7 1539/500/7 +f 1516/480/1 1549/518/1 1550/518/1 +f 1550/518/1 1517/480/1 1516/480/1 +f 1549/519/4 1516/491/4 1531/490/4 +f 1531/490/4 1544/474/4 1549/519/4 +f 1511/475/1 1551/481/1 1552/482/1 +f 1552/482/1 1512/476/1 1511/475/1 +f 1544/513/295 1529/513/295 1528/485/295 +f 1528/485/295 1549/520/295 1544/513/295 +f 1546/509/294 1536/509/294 1529/513/294 +f 1529/513/294 1544/513/294 1546/509/294 +f 1545/512/210 1534/512/210 1536/509/210 +f 1536/509/210 1546/509/210 1545/512/210 +f 1547/521/296 1532/521/296 1534/512/296 +f 1534/512/296 1545/512/296 1547/521/296 +f 1519/476/7 1553/477/7 1554/478/7 +f 1554/478/7 1520/475/7 1519/476/7 +f 1523/483/289 1535/522/289 1533/523/289 +f 1533/523/289 1524/484/289 1523/483/289 +f 1541/501/291 1527/524/291 1535/522/291 +f 1535/522/291 1523/483/291 1541/501/291 +f 1549/520/27 1511/525/27 1514/526/27 +f 1514/526/27 1550/527/27 1549/520/27 +f 1528/485/27 1551/528/27 1511/525/27 +f 1511/525/27 1549/520/27 1528/485/27 +f 1527/486/4 1552/486/4 1551/487/4 +f 1551/487/4 1528/487/4 1527/486/4 +f 1541/501/26 1512/501/26 1552/524/26 +f 1552/524/26 1527/524/26 1541/501/26 +f 1542/501/26 1513/501/26 1512/501/26 +f 1512/501/26 1541/501/26 1542/501/26 +f 1524/484/26 1519/484/26 1522/485/26 +f 1522/485/26 1525/485/26 1524/484/26 +f 1533/523/26 1553/523/26 1519/484/26 +f 1519/484/26 1524/484/26 1533/523/26 +f 1532/493/4 1554/529/4 1553/530/4 +f 1553/530/4 1533/494/4 1532/493/4 +f 1547/521/27 1520/531/27 1554/532/27 +f 1554/532/27 1532/521/27 1547/521/27 +f 1548/533/27 1521/531/27 1520/531/27 +f 1520/531/27 1547/521/27 1548/533/27 +f 1555/471/4 1556/472/4 1557/473/4 +f 1557/473/4 1558/474/4 1555/471/4 +f 1559/475/1 1560/476/1 1561/477/1 +f 1561/477/1 1562/478/1 1559/475/1 +f 1563/479/27 1564/480/288 1565/480/288 +f 1565/480/288 1566/479/27 1563/479/27 +f 1567/476/7 1568/475/7 1569/481/7 +f 1569/481/7 1570/482/7 1567/476/7 +f 1571/483/26 1572/484/289 1573/485/289 +f 1573/485/289 1574/483/26 1571/483/26 +f 1575/486/4 1576/487/4 1577/488/4 +f 1578/489/4 1579/490/4 1564/491/4 +f 1564/491/4 1563/492/4 1578/489/4 +f 1580/493/4 1581/494/4 1582/495/4 +f 1583/496/4 1584/497/4 1582/495/4 +f 1582/495/4 1581/494/4 1583/496/4 +f 1585/498/4 1586/499/4 1557/473/4 +f 1557/473/4 1556/472/4 1585/498/4 +f 1587/500/290 1563/479/27 1566/479/27 +f 1566/479/27 1588/500/290 1587/500/290 +f 1589/501/291 1571/483/26 1574/483/26 +f 1574/483/26 1590/501/291 1589/501/291 +f 1587/502/4 1591/503/4 1578/489/4 +f 1578/489/4 1563/492/4 1587/502/4 +f 1583/496/4 1575/486/4 1577/488/4 +f 1577/488/4 1584/497/4 1583/496/4 +f 1579/504/7 1555/504/7 1558/505/7 +f 1558/505/7 1592/505/7 1579/504/7 +f 1578/506/292 1556/506/292 1555/504/292 +f 1555/504/292 1579/504/292 1578/506/292 +f 1591/507/293 1585/507/293 1556/506/293 +f 1556/506/293 1578/506/293 1591/507/293 +f 1593/508/1 1586/508/1 1585/507/1 +f 1585/507/1 1591/507/1 1593/508/1 +f 1594/509/210 1557/510/210 1586/511/210 +f 1586/511/210 1593/512/210 1594/509/210 +f 1592/513/294 1558/514/294 1557/510/294 +f 1557/510/294 1594/509/294 1592/513/294 +f 1595/515/4 1593/516/4 1591/503/4 +f 1591/503/4 1587/502/4 1595/515/4 +f 1587/500/7 1588/500/7 1596/517/7 +f 1596/517/7 1595/517/7 1587/500/7 +f 1564/480/1 1597/518/1 1598/518/1 +f 1598/518/1 1565/480/1 1564/480/1 +f 1597/519/4 1564/491/4 1579/490/4 +f 1579/490/4 1592/474/4 1597/519/4 +f 1559/475/1 1599/481/1 1600/482/1 +f 1600/482/1 1560/476/1 1559/475/1 +f 1592/513/295 1577/513/295 1576/485/295 +f 1576/485/295 1597/520/295 1592/513/295 +f 1594/509/294 1584/509/294 1577/513/294 +f 1577/513/294 1592/513/294 1594/509/294 +f 1593/512/210 1582/512/210 1584/509/210 +f 1584/509/210 1594/509/210 1593/512/210 +f 1595/521/296 1580/521/296 1582/512/296 +f 1582/512/296 1593/512/296 1595/521/296 +f 1567/476/7 1601/477/7 1602/478/7 +f 1602/478/7 1568/475/7 1567/476/7 +f 1571/483/289 1583/522/289 1581/523/289 +f 1581/523/289 1572/484/289 1571/483/289 +f 1589/501/291 1575/524/291 1583/522/291 +f 1583/522/291 1571/483/291 1589/501/291 +f 1597/520/27 1559/525/27 1562/526/27 +f 1562/526/27 1598/527/27 1597/520/27 +f 1576/485/27 1599/528/27 1559/525/27 +f 1559/525/27 1597/520/27 1576/485/27 +f 1575/486/4 1600/486/4 1599/487/4 +f 1599/487/4 1576/487/4 1575/486/4 +f 1589/501/26 1560/501/26 1600/524/26 +f 1600/524/26 1575/524/26 1589/501/26 +f 1590/501/26 1561/501/26 1560/501/26 +f 1560/501/26 1589/501/26 1590/501/26 +f 1572/484/26 1567/484/26 1570/485/26 +f 1570/485/26 1573/485/26 1572/484/26 +f 1581/523/26 1601/523/26 1567/484/26 +f 1567/484/26 1572/484/26 1581/523/26 +f 1580/493/4 1602/529/4 1601/530/4 +f 1601/530/4 1581/494/4 1580/493/4 +f 1595/521/27 1568/531/27 1602/532/27 +f 1602/532/27 1580/521/27 1595/521/27 +f 1596/533/27 1569/531/27 1568/531/27 +f 1568/531/27 1595/521/27 1596/533/27 +f 1603/471/4 1604/472/4 1605/473/4 +f 1605/473/4 1606/474/4 1603/471/4 +f 1607/475/1 1608/476/1 1609/477/1 +f 1609/477/1 1610/478/1 1607/475/1 +f 1611/479/27 1612/480/288 1613/480/288 +f 1613/480/288 1614/479/27 1611/479/27 +f 1615/476/7 1616/475/7 1617/481/7 +f 1617/481/7 1618/482/7 1615/476/7 +f 1619/483/26 1620/484/289 1621/485/289 +f 1621/485/289 1622/483/26 1619/483/26 +f 1623/486/4 1624/487/4 1625/488/4 +f 1626/489/4 1627/490/4 1612/491/4 +f 1612/491/4 1611/492/4 1626/489/4 +f 1628/493/4 1629/494/4 1630/495/4 +f 1631/496/4 1632/497/4 1630/495/4 +f 1630/495/4 1629/494/4 1631/496/4 +f 1633/498/4 1634/499/4 1605/473/4 +f 1605/473/4 1604/472/4 1633/498/4 +f 1635/500/290 1611/479/27 1614/479/27 +f 1614/479/27 1636/500/290 1635/500/290 +f 1637/501/291 1619/483/26 1622/483/26 +f 1622/483/26 1638/501/291 1637/501/291 +f 1635/502/4 1639/503/4 1626/489/4 +f 1626/489/4 1611/492/4 1635/502/4 +f 1631/496/4 1623/486/4 1625/488/4 +f 1625/488/4 1632/497/4 1631/496/4 +f 1627/504/7 1603/504/7 1606/505/7 +f 1606/505/7 1640/505/7 1627/504/7 +f 1626/506/292 1604/506/292 1603/504/292 +f 1603/504/292 1627/504/292 1626/506/292 +f 1639/507/293 1633/507/293 1604/506/293 +f 1604/506/293 1626/506/293 1639/507/293 +f 1641/508/1 1634/508/1 1633/507/1 +f 1633/507/1 1639/507/1 1641/508/1 +f 1642/509/210 1605/510/210 1634/511/210 +f 1634/511/210 1641/512/210 1642/509/210 +f 1640/513/294 1606/514/294 1605/510/294 +f 1605/510/294 1642/509/294 1640/513/294 +f 1643/515/4 1641/516/4 1639/503/4 +f 1639/503/4 1635/502/4 1643/515/4 +f 1635/500/7 1636/500/7 1644/517/7 +f 1644/517/7 1643/517/7 1635/500/7 +f 1612/480/1 1645/518/1 1646/518/1 +f 1646/518/1 1613/480/1 1612/480/1 +f 1645/519/4 1612/491/4 1627/490/4 +f 1627/490/4 1640/474/4 1645/519/4 +f 1607/475/1 1647/481/1 1648/482/1 +f 1648/482/1 1608/476/1 1607/475/1 +f 1640/513/295 1625/513/295 1624/485/295 +f 1624/485/295 1645/520/295 1640/513/295 +f 1642/509/294 1632/509/294 1625/513/294 +f 1625/513/294 1640/513/294 1642/509/294 +f 1641/512/210 1630/512/210 1632/509/210 +f 1632/509/210 1642/509/210 1641/512/210 +f 1643/521/296 1628/521/296 1630/512/296 +f 1630/512/296 1641/512/296 1643/521/296 +f 1615/476/7 1649/477/7 1650/478/7 +f 1650/478/7 1616/475/7 1615/476/7 +f 1619/483/289 1631/522/289 1629/523/289 +f 1629/523/289 1620/484/289 1619/483/289 +f 1637/501/291 1623/524/291 1631/522/297 +f 1631/522/297 1619/483/297 1637/501/291 +f 1645/520/27 1607/525/27 1610/526/27 +f 1610/526/27 1646/527/27 1645/520/27 +f 1624/485/27 1647/528/27 1607/525/27 +f 1607/525/27 1645/520/27 1624/485/27 +f 1623/486/4 1648/486/4 1647/487/4 +f 1647/487/4 1624/487/4 1623/486/4 +f 1637/501/26 1608/501/26 1648/524/26 +f 1648/524/26 1623/524/26 1637/501/26 +f 1638/501/26 1609/501/26 1608/501/26 +f 1608/501/26 1637/501/26 1638/501/26 +f 1620/484/26 1615/484/26 1618/485/26 +f 1618/485/26 1621/485/26 1620/484/26 +f 1629/523/26 1649/523/26 1615/484/26 +f 1615/484/26 1620/484/26 1629/523/26 +f 1628/493/4 1650/529/4 1649/530/4 +f 1649/530/4 1629/494/4 1628/493/4 +f 1643/521/27 1616/531/27 1650/532/27 +f 1650/532/27 1628/521/27 1643/521/27 +f 1644/533/27 1617/531/27 1616/531/27 +f 1616/531/27 1643/521/27 1644/533/27 +f 1651/471/4 1652/472/4 1653/473/4 +f 1653/473/4 1654/474/4 1651/471/4 +f 1655/475/1 1656/476/1 1657/477/1 +f 1657/477/1 1658/478/1 1655/475/1 +f 1659/479/27 1660/480/288 1661/480/288 +f 1661/480/288 1662/479/27 1659/479/27 +f 1663/476/7 1664/475/7 1665/481/7 +f 1665/481/7 1666/482/7 1663/476/7 +f 1667/483/26 1668/484/289 1669/485/289 +f 1669/485/289 1670/483/26 1667/483/26 +f 1671/486/4 1672/487/4 1673/488/4 +f 1674/489/4 1675/490/4 1660/491/4 +f 1660/491/4 1659/492/4 1674/489/4 +f 1676/493/4 1677/494/4 1678/495/4 +f 1679/496/4 1680/497/4 1678/495/4 +f 1678/495/4 1677/494/4 1679/496/4 +f 1681/498/4 1682/499/4 1653/473/4 +f 1653/473/4 1652/472/4 1681/498/4 +f 1683/500/290 1659/479/27 1662/479/27 +f 1662/479/27 1684/500/290 1683/500/290 +f 1685/501/291 1667/483/26 1670/483/26 +f 1670/483/26 1686/501/291 1685/501/291 +f 1683/502/4 1687/503/4 1674/489/4 +f 1674/489/4 1659/492/4 1683/502/4 +f 1679/496/4 1671/486/4 1673/488/4 +f 1673/488/4 1680/497/4 1679/496/4 +f 1675/504/7 1651/504/7 1654/505/7 +f 1654/505/7 1688/505/7 1675/504/7 +f 1674/506/292 1652/506/292 1651/504/292 +f 1651/504/292 1675/504/292 1674/506/292 +f 1687/507/293 1681/507/293 1652/506/293 +f 1652/506/293 1674/506/293 1687/507/293 +f 1689/508/1 1682/508/1 1681/507/1 +f 1681/507/1 1687/507/1 1689/508/1 +f 1690/509/210 1653/510/210 1682/511/210 +f 1682/511/210 1689/512/210 1690/509/210 +f 1688/513/294 1654/514/294 1653/510/294 +f 1653/510/294 1690/509/294 1688/513/294 +f 1691/515/4 1689/516/4 1687/503/4 +f 1687/503/4 1683/502/4 1691/515/4 +f 1683/500/7 1684/500/7 1692/517/7 +f 1692/517/7 1691/517/7 1683/500/7 +f 1660/480/1 1693/518/1 1694/518/1 +f 1694/518/1 1661/480/1 1660/480/1 +f 1693/519/4 1660/491/4 1675/490/4 +f 1675/490/4 1688/474/4 1693/519/4 +f 1655/475/1 1695/481/1 1696/482/1 +f 1696/482/1 1656/476/1 1655/475/1 +f 1688/513/295 1673/513/295 1672/485/295 +f 1672/485/295 1693/520/295 1688/513/295 +f 1690/509/294 1680/509/294 1673/513/294 +f 1673/513/294 1688/513/294 1690/509/294 +f 1689/512/210 1678/512/210 1680/509/210 +f 1680/509/210 1690/509/210 1689/512/210 +f 1691/521/296 1676/521/296 1678/512/296 +f 1678/512/296 1689/512/296 1691/521/296 +f 1663/476/7 1697/477/7 1698/478/7 +f 1698/478/7 1664/475/7 1663/476/7 +f 1667/483/298 1679/522/298 1677/523/289 +f 1677/523/289 1668/484/289 1667/483/298 +f 1685/501/291 1671/524/291 1679/522/297 +f 1679/522/297 1667/483/297 1685/501/291 +f 1693/520/27 1655/525/27 1658/526/27 +f 1658/526/27 1694/527/27 1693/520/27 +f 1672/485/27 1695/528/27 1655/525/27 +f 1655/525/27 1693/520/27 1672/485/27 +f 1671/486/4 1696/486/4 1695/487/4 +f 1695/487/4 1672/487/4 1671/486/4 +f 1685/501/26 1656/501/26 1696/524/26 +f 1696/524/26 1671/524/26 1685/501/26 +f 1686/501/26 1657/501/26 1656/501/26 +f 1656/501/26 1685/501/26 1686/501/26 +f 1668/484/26 1663/484/26 1666/485/26 +f 1666/485/26 1669/485/26 1668/484/26 +f 1677/523/26 1697/523/26 1663/484/26 +f 1663/484/26 1668/484/26 1677/523/26 +f 1676/493/4 1698/529/4 1697/530/4 +f 1697/530/4 1677/494/4 1676/493/4 +f 1691/521/27 1664/531/27 1698/532/27 +f 1698/532/27 1676/521/27 1691/521/27 +f 1692/533/27 1665/531/27 1664/531/27 +f 1664/531/27 1691/521/27 1692/533/27 +f 1699/471/1 1700/472/1 1701/473/1 +f 1701/473/1 1702/474/1 1699/471/1 +f 1703/475/10 1704/476/10 1705/477/10 +f 1705/477/10 1706/478/10 1703/475/10 +f 1707/479/27 1708/480/299 1709/480/299 +f 1709/480/299 1710/479/27 1707/479/27 +f 1711/476/4 1712/475/4 1713/481/4 +f 1713/481/4 1714/482/4 1711/476/4 +f 1715/483/26 1716/484/300 1717/485/300 +f 1717/485/300 1718/483/26 1715/483/26 +f 1719/486/1 1720/487/1 1721/488/1 +f 1722/489/1 1723/490/1 1708/491/1 +f 1708/491/1 1707/492/1 1722/489/1 +f 1724/493/1 1725/494/1 1726/495/1 +f 1727/496/1 1728/497/1 1726/495/1 +f 1726/495/1 1725/494/1 1727/496/1 +f 1729/498/1 1730/499/1 1701/473/1 +f 1701/473/1 1700/472/1 1729/498/1 +f 1731/500/301 1707/479/27 1710/479/27 +f 1710/479/27 1732/500/301 1731/500/301 +f 1733/501/302 1715/483/26 1718/483/26 +f 1718/483/26 1734/501/302 1733/501/302 +f 1731/502/1 1735/503/1 1722/489/1 +f 1722/489/1 1707/492/1 1731/502/1 +f 1727/496/1 1719/486/1 1721/488/1 +f 1721/488/1 1728/497/1 1727/496/1 +f 1723/504/4 1699/504/4 1702/505/4 +f 1702/505/4 1736/505/4 1723/504/4 +f 1722/506/303 1700/506/303 1699/504/303 +f 1699/504/303 1723/504/303 1722/506/303 +f 1735/507/304 1729/507/304 1700/506/304 +f 1700/506/304 1722/506/304 1735/507/304 +f 1737/508/10 1730/508/10 1729/507/10 +f 1729/507/10 1735/507/10 1737/508/10 +f 1738/509/305 1701/510/305 1730/511/305 +f 1730/511/305 1737/512/305 1738/509/305 +f 1736/513/306 1702/514/306 1701/510/306 +f 1701/510/306 1738/509/306 1736/513/306 +f 1739/515/1 1737/516/1 1735/503/1 +f 1735/503/1 1731/502/1 1739/515/1 +f 1731/500/4 1732/500/4 1740/517/4 +f 1740/517/4 1739/517/4 1731/500/4 +f 1708/480/10 1741/518/10 1742/518/10 +f 1742/518/10 1709/480/10 1708/480/10 +f 1741/519/1 1708/491/1 1723/490/1 +f 1723/490/1 1736/474/1 1741/519/1 +f 1703/475/10 1743/481/10 1744/482/10 +f 1744/482/10 1704/476/10 1703/475/10 +f 1736/513/307 1721/513/307 1720/485/307 +f 1720/485/307 1741/520/307 1736/513/307 +f 1738/509/306 1728/509/306 1721/513/306 +f 1721/513/306 1736/513/306 1738/509/306 +f 1737/512/305 1726/512/305 1728/509/305 +f 1728/509/305 1738/509/305 1737/512/305 +f 1739/521/308 1724/521/308 1726/512/308 +f 1726/512/308 1737/512/308 1739/521/308 +f 1711/476/4 1745/477/4 1746/478/4 +f 1746/478/4 1712/475/4 1711/476/4 +f 1715/483/300 1727/522/300 1725/523/300 +f 1725/523/300 1716/484/300 1715/483/300 +f 1733/501/302 1719/524/302 1727/522/302 +f 1727/522/302 1715/483/302 1733/501/302 +f 1741/520/27 1703/525/27 1706/526/27 +f 1706/526/27 1742/527/27 1741/520/27 +f 1720/485/27 1743/528/27 1703/525/27 +f 1703/525/27 1741/520/27 1720/485/27 +f 1719/486/1 1744/486/1 1743/487/1 +f 1743/487/1 1720/487/1 1719/486/1 +f 1733/501/26 1704/501/26 1744/524/26 +f 1744/524/26 1719/524/26 1733/501/26 +f 1734/501/26 1705/501/26 1704/501/26 +f 1704/501/26 1733/501/26 1734/501/26 +f 1716/484/26 1711/484/26 1714/485/26 +f 1714/485/26 1717/485/26 1716/484/26 +f 1725/523/26 1745/523/26 1711/484/26 +f 1711/484/26 1716/484/26 1725/523/26 +f 1724/493/1 1746/529/1 1745/530/1 +f 1745/530/1 1725/494/1 1724/493/1 +f 1739/521/27 1712/531/27 1746/532/27 +f 1746/532/27 1724/521/27 1739/521/27 +f 1740/533/27 1713/531/27 1712/531/27 +f 1712/531/27 1739/521/27 1740/533/27 +f 1747/471/1 1748/474/1 1749/473/1 +f 1749/473/1 1750/472/1 1747/471/1 +f 1751/475/4 1752/478/4 1753/477/4 +f 1753/477/4 1754/476/4 1751/475/4 +f 1755/479/27 1756/479/27 1757/480/301 +f 1757/480/301 1758/480/301 1755/479/27 +f 1759/476/10 1760/482/10 1761/481/10 +f 1761/481/10 1762/475/10 1759/476/10 +f 1763/483/26 1764/483/26 1765/485/302 +f 1765/485/302 1766/484/302 1763/483/26 +f 1767/486/1 1768/488/1 1769/487/1 +f 1770/489/1 1755/492/1 1758/491/1 +f 1758/491/1 1771/490/1 1770/489/1 +f 1772/493/1 1773/495/1 1774/494/1 +f 1775/496/1 1774/494/1 1773/495/1 +f 1773/495/1 1776/497/1 1775/496/1 +f 1777/498/1 1750/472/1 1749/473/1 +f 1749/473/1 1778/499/1 1777/498/1 +f 1779/500/299 1780/500/299 1756/479/27 +f 1756/479/27 1755/479/27 1779/500/299 +f 1781/501/300 1782/501/300 1764/483/26 +f 1764/483/26 1763/483/26 1781/501/300 +f 1779/502/1 1755/492/1 1770/489/1 +f 1770/489/1 1783/503/1 1779/502/1 +f 1775/496/1 1776/497/1 1768/488/1 +f 1768/488/1 1767/486/1 1775/496/1 +f 1771/504/10 1784/505/10 1748/505/10 +f 1748/505/10 1747/504/10 1771/504/10 +f 1770/506/304 1771/504/304 1747/504/304 +f 1747/504/304 1750/506/304 1770/506/304 +f 1783/507/303 1770/506/303 1750/506/303 +f 1750/506/303 1777/507/303 1783/507/303 +f 1785/508/4 1783/507/4 1777/507/4 +f 1777/507/4 1778/508/4 1785/508/4 +f 1786/509/309 1785/512/309 1778/511/309 +f 1778/511/309 1749/510/309 1786/509/309 +f 1784/513/310 1786/509/310 1749/510/310 +f 1749/510/310 1748/514/310 1784/513/310 +f 1787/515/1 1779/502/1 1783/503/1 +f 1783/503/1 1785/516/1 1787/515/1 +f 1779/500/10 1787/517/10 1788/517/10 +f 1788/517/10 1780/500/10 1779/500/10 +f 1758/480/4 1757/480/4 1789/518/4 +f 1789/518/4 1790/518/4 1758/480/4 +f 1790/519/1 1784/474/1 1771/490/1 +f 1771/490/1 1758/491/1 1790/519/1 +f 1751/475/4 1754/476/4 1791/482/4 +f 1791/482/4 1792/481/4 1751/475/4 +f 1784/513/311 1790/520/311 1769/485/311 +f 1769/485/311 1768/513/311 1784/513/311 +f 1786/509/310 1784/513/310 1768/513/310 +f 1768/513/310 1776/509/310 1786/509/310 +f 1785/512/309 1786/509/309 1776/509/309 +f 1776/509/309 1773/512/309 1785/512/309 +f 1787/521/312 1785/512/312 1773/512/312 +f 1773/512/312 1772/521/312 1787/521/312 +f 1759/476/10 1762/475/10 1793/478/10 +f 1793/478/10 1794/477/10 1759/476/10 +f 1763/483/302 1766/484/302 1774/523/302 +f 1774/523/302 1775/522/302 1763/483/302 +f 1781/501/300 1763/483/300 1775/522/300 +f 1775/522/300 1767/524/300 1781/501/300 +f 1790/520/27 1789/527/27 1752/526/27 +f 1752/526/27 1751/525/27 1790/520/27 +f 1769/485/27 1790/520/27 1751/525/27 +f 1751/525/27 1792/528/27 1769/485/27 +f 1767/486/1 1769/487/1 1792/487/1 +f 1792/487/1 1791/486/1 1767/486/1 +f 1781/501/26 1767/524/26 1791/524/26 +f 1791/524/26 1754/501/26 1781/501/26 +f 1782/501/26 1781/501/26 1754/501/26 +f 1754/501/26 1753/501/26 1782/501/26 +f 1766/484/26 1765/485/26 1760/485/26 +f 1760/485/26 1759/484/26 1766/484/26 +f 1774/523/26 1766/484/26 1759/484/26 +f 1759/484/26 1794/523/26 1774/523/26 +f 1772/493/1 1774/494/1 1794/530/1 +f 1794/530/1 1793/529/1 1772/493/1 +f 1787/521/27 1772/521/27 1793/532/27 +f 1793/532/27 1762/531/27 1787/521/27 +f 1788/533/27 1787/521/27 1762/531/27 +f 1762/531/27 1761/531/27 1788/533/27 +f 1795/471/10 1796/474/10 1797/473/10 +f 1797/473/10 1798/472/10 1795/471/10 +f 1799/475/1 1800/478/1 1801/477/1 +f 1801/477/1 1802/476/1 1799/475/1 +f 1803/479/27 1804/479/27 1805/480/288 +f 1805/480/288 1806/480/288 1803/479/27 +f 1807/476/7 1808/482/7 1809/481/7 +f 1809/481/7 1810/475/7 1807/476/7 +f 1811/483/26 1812/483/26 1813/485/289 +f 1813/485/289 1814/484/289 1811/483/26 +f 1815/486/10 1816/488/10 1817/487/10 +f 1818/489/10 1803/492/10 1806/491/10 +f 1806/491/10 1819/490/10 1818/489/10 +f 1820/493/10 1821/495/10 1822/494/10 +f 1823/496/10 1822/494/10 1821/495/10 +f 1821/495/10 1824/497/10 1823/496/10 +f 1825/498/10 1798/472/10 1797/473/10 +f 1797/473/10 1826/499/10 1825/498/10 +f 1827/500/290 1828/500/290 1804/479/27 +f 1804/479/27 1803/479/27 1827/500/290 +f 1829/501/291 1830/501/291 1812/483/26 +f 1812/483/26 1811/483/26 1829/501/291 +f 1827/502/10 1803/492/10 1818/489/10 +f 1818/489/10 1831/503/10 1827/502/10 +f 1823/496/10 1824/497/10 1816/488/10 +f 1816/488/10 1815/486/10 1823/496/10 +f 1819/504/7 1832/505/7 1796/505/7 +f 1796/505/7 1795/504/7 1819/504/7 +f 1818/506/292 1819/504/292 1795/504/292 +f 1795/504/292 1798/506/292 1818/506/292 +f 1831/507/293 1818/506/293 1798/506/293 +f 1798/506/293 1825/507/293 1831/507/293 +f 1833/508/1 1831/507/1 1825/507/1 +f 1825/507/1 1826/508/1 1833/508/1 +f 1834/509/210 1833/512/210 1826/511/210 +f 1826/511/210 1797/510/210 1834/509/210 +f 1832/513/294 1834/509/294 1797/510/294 +f 1797/510/294 1796/514/294 1832/513/294 +f 1835/515/10 1827/502/10 1831/503/10 +f 1831/503/10 1833/516/10 1835/515/10 +f 1827/500/7 1835/517/7 1836/517/7 +f 1836/517/7 1828/500/7 1827/500/7 +f 1806/480/1 1805/480/1 1837/518/1 +f 1837/518/1 1838/518/1 1806/480/1 +f 1838/519/10 1832/474/10 1819/490/10 +f 1819/490/10 1806/491/10 1838/519/10 +f 1799/475/1 1802/476/1 1839/482/1 +f 1839/482/1 1840/481/1 1799/475/1 +f 1832/513/313 1838/520/295 1817/485/295 +f 1817/485/295 1816/513/313 1832/513/313 +f 1834/509/294 1832/513/294 1816/513/294 +f 1816/513/294 1824/509/294 1834/509/294 +f 1833/512/210 1834/509/210 1824/509/210 +f 1824/509/210 1821/512/210 1833/512/210 +f 1835/521/296 1833/512/296 1821/512/296 +f 1821/512/296 1820/521/296 1835/521/296 +f 1807/476/7 1810/475/7 1841/478/7 +f 1841/478/7 1842/477/7 1807/476/7 +f 1811/483/289 1814/484/289 1822/523/289 +f 1822/523/289 1823/522/289 1811/483/289 +f 1829/501/291 1811/483/291 1823/522/291 +f 1823/522/291 1815/524/291 1829/501/291 +f 1838/520/27 1837/527/27 1800/526/27 +f 1800/526/27 1799/525/27 1838/520/27 +f 1817/485/27 1838/520/27 1799/525/27 +f 1799/525/27 1840/528/27 1817/485/27 +f 1815/486/10 1817/487/10 1840/487/10 +f 1840/487/10 1839/486/10 1815/486/10 +f 1829/501/26 1815/524/26 1839/524/26 +f 1839/524/26 1802/501/26 1829/501/26 +f 1830/501/26 1829/501/26 1802/501/26 +f 1802/501/26 1801/501/26 1830/501/26 +f 1814/484/26 1813/485/26 1808/485/26 +f 1808/485/26 1807/484/26 1814/484/26 +f 1822/523/26 1814/484/26 1807/484/26 +f 1807/484/26 1842/523/26 1822/523/26 +f 1820/493/10 1822/494/10 1842/530/10 +f 1842/530/10 1841/529/10 1820/493/10 +f 1835/521/27 1820/521/27 1841/532/27 +f 1841/532/27 1810/531/27 1835/521/27 +f 1836/533/27 1835/521/27 1810/531/27 +f 1810/531/27 1809/531/27 1836/533/27 +f 1843/471/10 1844/474/10 1845/473/10 +f 1845/473/10 1846/472/10 1843/471/10 +f 1847/475/1 1848/478/1 1849/477/1 +f 1849/477/1 1850/476/1 1847/475/1 +f 1851/479/27 1852/479/27 1853/480/288 +f 1853/480/288 1854/480/288 1851/479/27 +f 1855/476/7 1856/482/7 1857/481/7 +f 1857/481/7 1858/475/7 1855/476/7 +f 1859/483/26 1860/483/26 1861/485/289 +f 1861/485/289 1862/484/289 1859/483/26 +f 1863/486/10 1864/488/10 1865/487/10 +f 1866/489/10 1851/492/10 1854/491/10 +f 1854/491/10 1867/490/10 1866/489/10 +f 1868/493/10 1869/495/10 1870/494/10 +f 1871/496/10 1870/494/10 1869/495/10 +f 1869/495/10 1872/497/10 1871/496/10 +f 1873/498/10 1846/472/10 1845/473/10 +f 1845/473/10 1874/499/10 1873/498/10 +f 1875/500/290 1876/500/290 1852/479/27 +f 1852/479/27 1851/479/27 1875/500/290 +f 1877/501/291 1878/501/291 1860/483/26 +f 1860/483/26 1859/483/26 1877/501/291 +f 1875/502/10 1851/492/10 1866/489/10 +f 1866/489/10 1879/503/10 1875/502/10 +f 1871/496/10 1872/497/10 1864/488/10 +f 1864/488/10 1863/486/10 1871/496/10 +f 1867/504/7 1880/505/7 1844/505/7 +f 1844/505/7 1843/504/7 1867/504/7 +f 1866/506/292 1867/504/292 1843/504/292 +f 1843/504/292 1846/506/292 1866/506/292 +f 1879/507/293 1866/506/293 1846/506/293 +f 1846/506/293 1873/507/293 1879/507/293 +f 1881/508/1 1879/507/1 1873/507/1 +f 1873/507/1 1874/508/1 1881/508/1 +f 1882/509/210 1881/512/210 1874/511/210 +f 1874/511/210 1845/510/210 1882/509/210 +f 1880/513/294 1882/509/294 1845/510/294 +f 1845/510/294 1844/514/294 1880/513/294 +f 1883/515/10 1875/502/10 1879/503/10 +f 1879/503/10 1881/516/10 1883/515/10 +f 1875/500/7 1883/517/7 1884/517/7 +f 1884/517/7 1876/500/7 1875/500/7 +f 1854/480/1 1853/480/1 1885/518/1 +f 1885/518/1 1886/518/1 1854/480/1 +f 1886/519/10 1880/474/10 1867/490/10 +f 1867/490/10 1854/491/10 1886/519/10 +f 1847/475/1 1850/476/1 1887/482/1 +f 1887/482/1 1888/481/1 1847/475/1 +f 1880/513/295 1886/520/295 1865/485/295 +f 1865/485/295 1864/513/295 1880/513/295 +f 1882/509/294 1880/513/294 1864/513/294 +f 1864/513/294 1872/509/294 1882/509/294 +f 1881/512/210 1882/509/210 1872/509/210 +f 1872/509/210 1869/512/210 1881/512/210 +f 1883/521/296 1881/512/296 1869/512/296 +f 1869/512/296 1868/521/296 1883/521/296 +f 1855/476/7 1858/475/7 1889/478/7 +f 1889/478/7 1890/477/7 1855/476/7 +f 1859/483/289 1862/484/289 1870/523/289 +f 1870/523/289 1871/522/289 1859/483/289 +f 1877/501/291 1859/483/291 1871/522/291 +f 1871/522/291 1863/524/291 1877/501/291 +f 1886/520/27 1885/527/27 1848/526/27 +f 1848/526/27 1847/525/27 1886/520/27 +f 1865/485/27 1886/520/27 1847/525/27 +f 1847/525/27 1888/528/27 1865/485/27 +f 1863/486/10 1865/487/10 1888/487/10 +f 1888/487/10 1887/486/10 1863/486/10 +f 1877/501/26 1863/524/26 1887/524/26 +f 1887/524/26 1850/501/26 1877/501/26 +f 1878/501/26 1877/501/26 1850/501/26 +f 1850/501/26 1849/501/26 1878/501/26 +f 1862/484/26 1861/485/26 1856/485/26 +f 1856/485/26 1855/484/26 1862/484/26 +f 1870/523/26 1862/484/26 1855/484/26 +f 1855/484/26 1890/523/26 1870/523/26 +f 1868/493/10 1870/494/10 1890/530/10 +f 1890/530/10 1889/529/10 1868/493/10 +f 1883/521/27 1868/521/27 1889/532/27 +f 1889/532/27 1858/531/27 1883/521/27 +f 1884/533/27 1883/521/27 1858/531/27 +f 1858/531/27 1857/531/27 1884/533/27 +f 1891/471/10 1892/474/10 1893/473/10 +f 1893/473/10 1894/472/10 1891/471/10 +f 1895/475/1 1896/478/1 1897/477/1 +f 1897/477/1 1898/476/1 1895/475/1 +f 1899/479/27 1900/479/27 1901/480/288 +f 1901/480/288 1902/480/288 1899/479/27 +f 1903/476/7 1904/482/7 1905/481/7 +f 1905/481/7 1906/475/7 1903/476/7 +f 1907/483/26 1908/483/26 1909/485/289 +f 1909/485/289 1910/484/289 1907/483/26 +f 1911/486/10 1912/488/10 1913/487/10 +f 1914/489/10 1899/492/10 1902/491/10 +f 1902/491/10 1915/490/10 1914/489/10 +f 1916/493/10 1917/495/10 1918/494/10 +f 1919/496/10 1918/494/10 1917/495/10 +f 1917/495/10 1920/497/10 1919/496/10 +f 1921/498/10 1894/472/10 1893/473/10 +f 1893/473/10 1922/499/10 1921/498/10 +f 1923/500/290 1924/500/290 1900/479/27 +f 1900/479/27 1899/479/27 1923/500/290 +f 1925/501/291 1926/501/291 1908/483/26 +f 1908/483/26 1907/483/26 1925/501/291 +f 1923/502/10 1899/492/10 1914/489/10 +f 1914/489/10 1927/503/10 1923/502/10 +f 1919/496/10 1920/497/10 1912/488/10 +f 1912/488/10 1911/486/10 1919/496/10 +f 1915/504/7 1928/505/7 1892/505/7 +f 1892/505/7 1891/504/7 1915/504/7 +f 1914/506/292 1915/504/292 1891/504/292 +f 1891/504/292 1894/506/292 1914/506/292 +f 1927/507/293 1914/506/293 1894/506/293 +f 1894/506/293 1921/507/293 1927/507/293 +f 1929/508/1 1927/507/1 1921/507/1 +f 1921/507/1 1922/508/1 1929/508/1 +f 1930/509/210 1929/512/210 1922/511/210 +f 1922/511/210 1893/510/210 1930/509/210 +f 1928/513/294 1930/509/294 1893/510/294 +f 1893/510/294 1892/514/294 1928/513/294 +f 1931/515/10 1923/502/10 1927/503/10 +f 1927/503/10 1929/516/10 1931/515/10 +f 1923/500/7 1931/517/7 1932/517/7 +f 1932/517/7 1924/500/7 1923/500/7 +f 1902/480/1 1901/480/1 1933/518/1 +f 1933/518/1 1934/518/1 1902/480/1 +f 1934/519/10 1928/474/10 1915/490/10 +f 1915/490/10 1902/491/10 1934/519/10 +f 1895/475/1 1898/476/1 1935/482/1 +f 1935/482/1 1936/481/1 1895/475/1 +f 1928/513/295 1934/520/295 1913/485/295 +f 1913/485/295 1912/513/295 1928/513/295 +f 1930/509/294 1928/513/294 1912/513/294 +f 1912/513/294 1920/509/294 1930/509/294 +f 1929/512/210 1930/509/210 1920/509/210 +f 1920/509/210 1917/512/210 1929/512/210 +f 1931/521/296 1929/512/296 1917/512/296 +f 1917/512/296 1916/521/296 1931/521/296 +f 1903/476/7 1906/475/7 1937/478/7 +f 1937/478/7 1938/477/7 1903/476/7 +f 1907/483/289 1910/484/289 1918/523/289 +f 1918/523/289 1919/522/289 1907/483/289 +f 1925/501/291 1907/483/291 1919/522/291 +f 1919/522/291 1911/524/291 1925/501/291 +f 1934/520/27 1933/527/27 1896/526/27 +f 1896/526/27 1895/525/27 1934/520/27 +f 1913/485/27 1934/520/27 1895/525/27 +f 1895/525/27 1936/528/27 1913/485/27 +f 1911/486/10 1913/487/10 1936/487/10 +f 1936/487/10 1935/486/10 1911/486/10 +f 1925/501/26 1911/524/26 1935/524/26 +f 1935/524/26 1898/501/26 1925/501/26 +f 1926/501/26 1925/501/26 1898/501/26 +f 1898/501/26 1897/501/26 1926/501/26 +f 1910/484/26 1909/485/26 1904/485/26 +f 1904/485/26 1903/484/26 1910/484/26 +f 1918/523/26 1910/484/26 1903/484/26 +f 1903/484/26 1938/523/26 1918/523/26 +f 1916/493/10 1918/494/10 1938/530/10 +f 1938/530/10 1937/529/10 1916/493/10 +f 1931/521/27 1916/521/27 1937/532/27 +f 1937/532/27 1906/531/27 1931/521/27 +f 1932/533/27 1931/521/27 1906/531/27 +f 1906/531/27 1905/531/27 1932/533/27 +f 1939/471/10 1940/474/10 1941/473/10 +f 1941/473/10 1942/472/10 1939/471/10 +f 1943/475/1 1944/478/1 1945/477/1 +f 1945/477/1 1946/476/1 1943/475/1 +f 1947/479/27 1948/479/27 1949/480/288 +f 1949/480/288 1950/480/288 1947/479/27 +f 1951/476/7 1952/482/7 1953/481/7 +f 1953/481/7 1954/475/7 1951/476/7 +f 1955/483/26 1956/483/26 1957/485/289 +f 1957/485/289 1958/484/289 1955/483/26 +f 1959/486/10 1960/488/10 1961/487/10 +f 1962/489/10 1947/492/10 1950/491/10 +f 1950/491/10 1963/490/10 1962/489/10 +f 1964/493/10 1965/495/10 1966/494/10 +f 1967/496/10 1966/494/10 1965/495/10 +f 1965/495/10 1968/497/10 1967/496/10 +f 1969/498/10 1942/472/10 1941/473/10 +f 1941/473/10 1970/499/10 1969/498/10 +f 1971/500/290 1972/500/290 1948/479/27 +f 1948/479/27 1947/479/27 1971/500/290 +f 1973/501/291 1974/501/291 1956/483/26 +f 1956/483/26 1955/483/26 1973/501/291 +f 1971/502/10 1947/492/10 1962/489/10 +f 1962/489/10 1975/503/10 1971/502/10 +f 1967/496/10 1968/497/10 1960/488/10 +f 1960/488/10 1959/486/10 1967/496/10 +f 1963/504/7 1976/505/7 1940/505/7 +f 1940/505/7 1939/504/7 1963/504/7 +f 1962/506/292 1963/504/292 1939/504/292 +f 1939/504/292 1942/506/292 1962/506/292 +f 1975/507/293 1962/506/293 1942/506/293 +f 1942/506/293 1969/507/293 1975/507/293 +f 1977/508/1 1975/507/1 1969/507/1 +f 1969/507/1 1970/508/1 1977/508/1 +f 1978/509/210 1977/512/210 1970/511/210 +f 1970/511/210 1941/510/210 1978/509/210 +f 1976/513/294 1978/509/294 1941/510/294 +f 1941/510/294 1940/514/294 1976/513/294 +f 1979/515/10 1971/502/10 1975/503/10 +f 1975/503/10 1977/516/10 1979/515/10 +f 1971/500/7 1979/517/7 1980/517/7 +f 1980/517/7 1972/500/7 1971/500/7 +f 1950/480/1 1949/480/1 1981/518/1 +f 1981/518/1 1982/518/1 1950/480/1 +f 1982/519/10 1976/474/10 1963/490/10 +f 1963/490/10 1950/491/10 1982/519/10 +f 1943/475/1 1946/476/1 1983/482/1 +f 1983/482/1 1984/481/1 1943/475/1 +f 1976/513/295 1982/520/295 1961/485/295 +f 1961/485/295 1960/513/295 1976/513/295 +f 1978/509/294 1976/513/294 1960/513/294 +f 1960/513/294 1968/509/294 1978/509/294 +f 1977/512/210 1978/509/210 1968/509/210 +f 1968/509/210 1965/512/210 1977/512/210 +f 1979/521/296 1977/512/296 1965/512/296 +f 1965/512/296 1964/521/296 1979/521/296 +f 1951/476/7 1954/475/7 1985/478/7 +f 1985/478/7 1986/477/7 1951/476/7 +f 1955/483/289 1958/484/289 1966/523/289 +f 1966/523/289 1967/522/289 1955/483/289 +f 1973/501/291 1955/483/291 1967/522/291 +f 1967/522/291 1959/524/291 1973/501/291 +f 1982/520/27 1981/527/27 1944/526/27 +f 1944/526/27 1943/525/27 1982/520/27 +f 1961/485/27 1982/520/27 1943/525/27 +f 1943/525/27 1984/528/27 1961/485/27 +f 1959/486/10 1961/487/10 1984/487/10 +f 1984/487/10 1983/486/10 1959/486/10 +f 1973/501/26 1959/524/26 1983/524/26 +f 1983/524/26 1946/501/26 1973/501/26 +f 1974/501/26 1973/501/26 1946/501/26 +f 1946/501/26 1945/501/26 1974/501/26 +f 1958/484/26 1957/485/26 1952/485/26 +f 1952/485/26 1951/484/26 1958/484/26 +f 1966/523/26 1958/484/26 1951/484/26 +f 1951/484/26 1986/523/26 1966/523/26 +f 1964/493/10 1966/494/10 1986/530/10 +f 1986/530/10 1985/529/10 1964/493/10 +f 1979/521/27 1964/521/27 1985/532/27 +f 1985/532/27 1954/531/27 1979/521/27 +f 1980/533/27 1979/521/27 1954/531/27 +f 1954/531/27 1953/531/27 1980/533/27 +f 1987/471/10 1988/472/10 1989/473/10 +f 1989/473/10 1990/474/10 1987/471/10 +f 1991/475/7 1992/476/7 1993/477/7 +f 1993/477/7 1994/478/7 1991/475/7 +f 1995/479/27 1996/480/290 1997/480/290 +f 1997/480/290 1998/479/27 1995/479/27 +f 1999/476/1 2000/475/1 2001/481/1 +f 2001/481/1 2002/482/1 1999/476/1 +f 2003/483/26 2004/484/291 2005/485/291 +f 2005/485/291 2006/483/26 2003/483/26 +f 2007/486/10 2008/487/10 2009/488/10 +f 2010/489/10 2011/490/10 1996/491/10 +f 1996/491/10 1995/492/10 2010/489/10 +f 2012/493/10 2013/494/10 2014/495/10 +f 2015/496/10 2016/497/10 2014/495/10 +f 2014/495/10 2013/494/10 2015/496/10 +f 2017/498/10 2018/499/10 1989/473/10 +f 1989/473/10 1988/472/10 2017/498/10 +f 2019/500/288 1995/479/27 1998/479/27 +f 1998/479/27 2020/500/288 2019/500/288 +f 2021/501/289 2003/483/26 2006/483/26 +f 2006/483/26 2022/501/289 2021/501/289 +f 2019/502/10 2023/503/10 2010/489/10 +f 2010/489/10 1995/492/10 2019/502/10 +f 2015/496/10 2007/486/10 2009/488/10 +f 2009/488/10 2016/497/10 2015/496/10 +f 2011/504/1 1987/504/1 1990/505/1 +f 1990/505/1 2024/505/1 2011/504/1 +f 2010/506/293 1988/506/293 1987/504/293 +f 1987/504/293 2011/504/293 2010/506/293 +f 2023/507/292 2017/507/292 1988/506/292 +f 1988/506/292 2010/506/292 2023/507/292 +f 2025/508/7 2018/508/7 2017/507/7 +f 2017/507/7 2023/507/7 2025/508/7 +f 2026/509/203 1989/510/203 2018/511/203 +f 2018/511/203 2025/512/203 2026/509/203 +f 2024/513/296 1990/514/296 1989/510/296 +f 1989/510/296 2026/509/296 2024/513/296 +f 2027/515/10 2025/516/10 2023/503/10 +f 2023/503/10 2019/502/10 2027/515/10 +f 2019/500/1 2020/500/1 2028/517/1 +f 2028/517/1 2027/517/1 2019/500/1 +f 1996/480/7 2029/518/7 2030/518/7 +f 2030/518/7 1997/480/7 1996/480/7 +f 2029/519/10 1996/491/10 2011/490/10 +f 2011/490/10 2024/474/10 2029/519/10 +f 1991/475/7 2031/481/7 2032/482/7 +f 2032/482/7 1992/476/7 1991/475/7 +f 2024/513/314 2009/513/314 2008/485/314 +f 2008/485/314 2029/520/314 2024/513/314 +f 2026/509/296 2016/509/296 2009/513/296 +f 2009/513/296 2024/513/296 2026/509/296 +f 2025/512/203 2014/512/203 2016/509/203 +f 2016/509/203 2026/509/203 2025/512/203 +f 2027/521/294 2012/521/294 2014/512/294 +f 2014/512/294 2025/512/294 2027/521/294 +f 1999/476/1 2033/477/1 2034/478/1 +f 2034/478/1 2000/475/1 1999/476/1 +f 2003/483/291 2015/522/291 2013/523/291 +f 2013/523/291 2004/484/291 2003/483/291 +f 2021/501/289 2007/524/289 2015/522/289 +f 2015/522/289 2003/483/289 2021/501/289 +f 2029/520/27 1991/525/27 1994/526/27 +f 1994/526/27 2030/527/27 2029/520/27 +f 2008/485/27 2031/528/27 1991/525/27 +f 1991/525/27 2029/520/27 2008/485/27 +f 2007/486/10 2032/486/10 2031/487/10 +f 2031/487/10 2008/487/10 2007/486/10 +f 2021/501/26 1992/501/26 2032/524/26 +f 2032/524/26 2007/524/26 2021/501/26 +f 2022/501/26 1993/501/26 1992/501/26 +f 1992/501/26 2021/501/26 2022/501/26 +f 2004/484/26 1999/484/26 2002/485/26 +f 2002/485/26 2005/485/26 2004/484/26 +f 2013/523/26 2033/523/26 1999/484/26 +f 1999/484/26 2004/484/26 2013/523/26 +f 2012/493/10 2034/529/10 2033/530/10 +f 2033/530/10 2013/494/10 2012/493/10 +f 2027/521/27 2000/531/27 2034/532/27 +f 2034/532/27 2012/521/27 2027/521/27 +f 2028/533/27 2001/531/27 2000/531/27 +f 2000/531/27 2027/521/27 2028/533/27 +f 2035/471/10 2036/472/10 2037/473/10 +f 2037/473/10 2038/474/10 2035/471/10 +f 2039/475/7 2040/476/7 2041/477/7 +f 2041/477/7 2042/478/7 2039/475/7 +f 2043/479/27 2044/480/290 2045/480/290 +f 2045/480/290 2046/479/27 2043/479/27 +f 2047/476/1 2048/475/1 2049/481/1 +f 2049/481/1 2050/482/1 2047/476/1 +f 2051/483/26 2052/484/291 2053/485/291 +f 2053/485/291 2054/483/26 2051/483/26 +f 2055/486/10 2056/487/10 2057/488/10 +f 2058/489/10 2059/490/10 2044/491/10 +f 2044/491/10 2043/492/10 2058/489/10 +f 2060/493/10 2061/494/10 2062/495/10 +f 2063/496/10 2064/497/10 2062/495/10 +f 2062/495/10 2061/494/10 2063/496/10 +f 2065/498/10 2066/499/10 2037/473/10 +f 2037/473/10 2036/472/10 2065/498/10 +f 2067/500/288 2043/479/27 2046/479/27 +f 2046/479/27 2068/500/288 2067/500/288 +f 2069/501/289 2051/483/26 2054/483/26 +f 2054/483/26 2070/501/289 2069/501/289 +f 2067/502/10 2071/503/10 2058/489/10 +f 2058/489/10 2043/492/10 2067/502/10 +f 2063/496/10 2055/486/10 2057/488/10 +f 2057/488/10 2064/497/10 2063/496/10 +f 2059/504/1 2035/504/1 2038/505/1 +f 2038/505/1 2072/505/1 2059/504/1 +f 2058/506/293 2036/506/293 2035/504/293 +f 2035/504/293 2059/504/293 2058/506/293 +f 2071/507/292 2065/507/292 2036/506/292 +f 2036/506/292 2058/506/292 2071/507/292 +f 2073/508/7 2066/508/7 2065/507/7 +f 2065/507/7 2071/507/7 2073/508/7 +f 2074/509/203 2037/510/203 2066/511/203 +f 2066/511/203 2073/512/203 2074/509/203 +f 2072/513/296 2038/514/296 2037/510/296 +f 2037/510/296 2074/509/296 2072/513/296 +f 2075/515/10 2073/516/10 2071/503/10 +f 2071/503/10 2067/502/10 2075/515/10 +f 2067/500/1 2068/500/1 2076/517/1 +f 2076/517/1 2075/517/1 2067/500/1 +f 2044/480/7 2077/518/7 2078/518/7 +f 2078/518/7 2045/480/7 2044/480/7 +f 2077/519/10 2044/491/10 2059/490/10 +f 2059/490/10 2072/474/10 2077/519/10 +f 2039/475/7 2079/481/7 2080/482/7 +f 2080/482/7 2040/476/7 2039/475/7 +f 2072/513/314 2057/513/314 2056/485/314 +f 2056/485/314 2077/520/314 2072/513/314 +f 2074/509/296 2064/509/296 2057/513/296 +f 2057/513/296 2072/513/296 2074/509/296 +f 2073/512/203 2062/512/203 2064/509/203 +f 2064/509/203 2074/509/203 2073/512/203 +f 2075/521/294 2060/521/294 2062/512/294 +f 2062/512/294 2073/512/294 2075/521/294 +f 2047/476/1 2081/477/1 2082/478/1 +f 2082/478/1 2048/475/1 2047/476/1 +f 2051/483/291 2063/522/291 2061/523/291 +f 2061/523/291 2052/484/291 2051/483/291 +f 2069/501/289 2055/524/289 2063/522/298 +f 2063/522/298 2051/483/298 2069/501/289 +f 2077/520/27 2039/525/27 2042/526/27 +f 2042/526/27 2078/527/27 2077/520/27 +f 2056/485/27 2079/528/27 2039/525/27 +f 2039/525/27 2077/520/27 2056/485/27 +f 2055/486/10 2080/486/10 2079/487/10 +f 2079/487/10 2056/487/10 2055/486/10 +f 2069/501/26 2040/501/26 2080/524/26 +f 2080/524/26 2055/524/26 2069/501/26 +f 2070/501/26 2041/501/26 2040/501/26 +f 2040/501/26 2069/501/26 2070/501/26 +f 2052/484/26 2047/484/26 2050/485/26 +f 2050/485/26 2053/485/26 2052/484/26 +f 2061/523/26 2081/523/26 2047/484/26 +f 2047/484/26 2052/484/26 2061/523/26 +f 2060/493/10 2082/529/10 2081/530/10 +f 2081/530/10 2061/494/10 2060/493/10 +f 2075/521/27 2048/531/27 2082/532/27 +f 2082/532/27 2060/521/27 2075/521/27 +f 2076/533/27 2049/531/27 2048/531/27 +f 2048/531/27 2075/521/27 2076/533/27 +f 2083/471/7 2084/472/7 2085/473/7 +f 2085/473/7 2086/474/7 2083/471/7 +f 2087/475/4 2088/476/4 2089/477/4 +f 2089/477/4 2090/478/4 2087/475/4 +f 2091/479/27 2092/480/301 2093/480/301 +f 2093/480/301 2094/479/27 2091/479/27 +f 2095/476/10 2096/475/10 2097/481/10 +f 2097/481/10 2098/482/10 2095/476/10 +f 2099/483/26 2100/484/302 2101/485/302 +f 2101/485/302 2102/483/26 2099/483/26 +f 2103/486/7 2104/487/7 2105/488/7 +f 2106/489/7 2107/490/7 2092/491/7 +f 2092/491/7 2091/492/7 2106/489/7 +f 2108/493/7 2109/494/7 2110/495/7 +f 2111/496/7 2112/497/7 2110/495/7 +f 2110/495/7 2109/494/7 2111/496/7 +f 2113/498/7 2114/499/7 2085/473/7 +f 2085/473/7 2084/472/7 2113/498/7 +f 2115/500/299 2091/479/27 2094/479/27 +f 2094/479/27 2116/500/299 2115/500/299 +f 2117/501/300 2099/483/26 2102/483/26 +f 2102/483/26 2118/501/300 2117/501/300 +f 2115/502/7 2119/503/7 2106/489/7 +f 2106/489/7 2091/492/7 2115/502/7 +f 2111/496/7 2103/486/7 2105/488/7 +f 2105/488/7 2112/497/7 2111/496/7 +f 2107/504/10 2083/504/10 2086/505/10 +f 2086/505/10 2120/505/10 2107/504/10 +f 2106/506/304 2084/506/304 2083/504/304 +f 2083/504/304 2107/504/304 2106/506/304 +f 2119/507/303 2113/507/303 2084/506/303 +f 2084/506/303 2106/506/303 2119/507/303 +f 2121/508/4 2114/508/4 2113/507/4 +f 2113/507/4 2119/507/4 2121/508/4 +f 2122/509/309 2085/510/309 2114/511/309 +f 2114/511/309 2121/512/309 2122/509/309 +f 2120/513/310 2086/514/310 2085/510/310 +f 2085/510/310 2122/509/310 2120/513/310 +f 2123/515/7 2121/516/7 2119/503/7 +f 2119/503/7 2115/502/7 2123/515/7 +f 2115/500/10 2116/500/10 2124/517/10 +f 2124/517/10 2123/517/10 2115/500/10 +f 2092/480/4 2125/518/4 2126/518/4 +f 2126/518/4 2093/480/4 2092/480/4 +f 2125/519/7 2092/491/7 2107/490/7 +f 2107/490/7 2120/474/7 2125/519/7 +f 2087/475/4 2127/481/4 2128/482/4 +f 2128/482/4 2088/476/4 2087/475/4 +f 2120/513/311 2105/513/311 2104/485/311 +f 2104/485/311 2125/520/311 2120/513/311 +f 2122/509/310 2112/509/310 2105/513/310 +f 2105/513/310 2120/513/310 2122/509/310 +f 2121/512/309 2110/512/309 2112/509/309 +f 2112/509/309 2122/509/309 2121/512/309 +f 2123/521/312 2108/521/312 2110/512/312 +f 2110/512/312 2121/512/312 2123/521/312 +f 2095/476/10 2129/477/10 2130/478/10 +f 2130/478/10 2096/475/10 2095/476/10 +f 2099/483/302 2111/522/302 2109/523/302 +f 2109/523/302 2100/484/302 2099/483/302 +f 2117/501/300 2103/524/300 2111/522/300 +f 2111/522/300 2099/483/300 2117/501/300 +f 2125/520/27 2087/525/27 2090/526/27 +f 2090/526/27 2126/527/27 2125/520/27 +f 2104/485/27 2127/528/27 2087/525/27 +f 2087/525/27 2125/520/27 2104/485/27 +f 2103/486/7 2128/486/7 2127/487/7 +f 2127/487/7 2104/487/7 2103/486/7 +f 2117/501/26 2088/501/26 2128/524/26 +f 2128/524/26 2103/524/26 2117/501/26 +f 2118/501/26 2089/501/26 2088/501/26 +f 2088/501/26 2117/501/26 2118/501/26 +f 2100/484/26 2095/484/26 2098/485/26 +f 2098/485/26 2101/485/26 2100/484/26 +f 2109/523/26 2129/523/26 2095/484/26 +f 2095/484/26 2100/484/26 2109/523/26 +f 2108/493/7 2130/529/7 2129/530/7 +f 2129/530/7 2109/494/7 2108/493/7 +f 2123/521/27 2096/531/27 2130/532/27 +f 2130/532/27 2108/521/27 2123/521/27 +f 2124/533/27 2097/531/27 2096/531/27 +f 2096/531/27 2123/521/27 2124/533/27 +f 2131/471/7 2132/472/7 2133/473/7 +f 2133/473/7 2134/474/7 2131/471/7 +f 2135/475/4 2136/476/4 2137/477/4 +f 2137/477/4 2138/478/4 2135/475/4 +f 2139/479/27 2140/480/301 2141/480/301 +f 2141/480/301 2142/479/27 2139/479/27 +f 2143/476/10 2144/475/10 2145/481/10 +f 2145/481/10 2146/482/10 2143/476/10 +f 2147/483/26 2148/484/302 2149/485/302 +f 2149/485/302 2150/483/26 2147/483/26 +f 2151/486/7 2152/487/7 2153/488/7 +f 2154/489/7 2155/490/7 2140/491/7 +f 2140/491/7 2139/492/7 2154/489/7 +f 2156/493/7 2157/494/7 2158/495/7 +f 2159/496/7 2160/497/7 2158/495/7 +f 2158/495/7 2157/494/7 2159/496/7 +f 2161/498/7 2162/499/7 2133/473/7 +f 2133/473/7 2132/472/7 2161/498/7 +f 2163/500/299 2139/479/27 2142/479/27 +f 2142/479/27 2164/500/299 2163/500/299 +f 2165/501/300 2147/483/26 2150/483/26 +f 2150/483/26 2166/501/300 2165/501/300 +f 2163/502/7 2167/503/7 2154/489/7 +f 2154/489/7 2139/492/7 2163/502/7 +f 2159/496/7 2151/486/7 2153/488/7 +f 2153/488/7 2160/497/7 2159/496/7 +f 2155/504/10 2131/504/10 2134/505/10 +f 2134/505/10 2168/505/10 2155/504/10 +f 2154/506/304 2132/506/304 2131/504/304 +f 2131/504/304 2155/504/304 2154/506/304 +f 2167/507/303 2161/507/303 2132/506/303 +f 2132/506/303 2154/506/303 2167/507/303 +f 2169/508/4 2162/508/4 2161/507/4 +f 2161/507/4 2167/507/4 2169/508/4 +f 2170/509/309 2133/510/309 2162/511/309 +f 2162/511/309 2169/512/309 2170/509/309 +f 2168/513/310 2134/514/310 2133/510/310 +f 2133/510/310 2170/509/310 2168/513/310 +f 2171/515/7 2169/516/7 2167/503/7 +f 2167/503/7 2163/502/7 2171/515/7 +f 2163/500/10 2164/500/10 2172/517/10 +f 2172/517/10 2171/517/10 2163/500/10 +f 2140/480/4 2173/518/4 2174/518/4 +f 2174/518/4 2141/480/4 2140/480/4 +f 2173/519/7 2140/491/7 2155/490/7 +f 2155/490/7 2168/474/7 2173/519/7 +f 2135/475/4 2175/481/4 2176/482/4 +f 2176/482/4 2136/476/4 2135/475/4 +f 2168/513/311 2153/513/311 2152/485/311 +f 2152/485/311 2173/520/311 2168/513/311 +f 2170/509/310 2160/509/310 2153/513/310 +f 2153/513/310 2168/513/310 2170/509/310 +f 2169/512/309 2158/512/309 2160/509/309 +f 2160/509/309 2170/509/309 2169/512/309 +f 2171/521/312 2156/521/312 2158/512/312 +f 2158/512/312 2169/512/312 2171/521/312 +f 2143/476/10 2177/477/10 2178/478/10 +f 2178/478/10 2144/475/10 2143/476/10 +f 2147/483/302 2159/522/302 2157/523/302 +f 2157/523/302 2148/484/302 2147/483/302 +f 2165/501/300 2151/524/300 2159/522/300 +f 2159/522/300 2147/483/300 2165/501/300 +f 2173/520/27 2135/525/27 2138/526/27 +f 2138/526/27 2174/527/27 2173/520/27 +f 2152/485/27 2175/528/27 2135/525/27 +f 2135/525/27 2173/520/27 2152/485/27 +f 2151/486/7 2176/486/7 2175/487/7 +f 2175/487/7 2152/487/7 2151/486/7 +f 2165/501/26 2136/501/26 2176/524/26 +f 2176/524/26 2151/524/26 2165/501/26 +f 2166/501/26 2137/501/26 2136/501/26 +f 2136/501/26 2165/501/26 2166/501/26 +f 2148/484/26 2143/484/26 2146/485/26 +f 2146/485/26 2149/485/26 2148/484/26 +f 2157/523/26 2177/523/26 2143/484/26 +f 2143/484/26 2148/484/26 2157/523/26 +f 2156/493/7 2178/529/7 2177/530/7 +f 2177/530/7 2157/494/7 2156/493/7 +f 2171/521/27 2144/531/27 2178/532/27 +f 2178/532/27 2156/521/27 2171/521/27 +f 2172/533/27 2145/531/27 2144/531/27 +f 2144/531/27 2171/521/27 2172/533/27 +f 2179/471/7 2180/474/7 2181/473/7 +f 2181/473/7 2182/472/7 2179/471/7 +f 2183/475/10 2184/478/10 2185/477/10 +f 2185/477/10 2186/476/10 2183/475/10 +f 2187/479/27 2188/479/27 2189/480/299 +f 2189/480/299 2190/480/299 2187/479/27 +f 2191/476/4 2192/482/4 2193/481/4 +f 2193/481/4 2194/475/4 2191/476/4 +f 2195/483/26 2196/483/26 2197/485/300 +f 2197/485/300 2198/484/300 2195/483/26 +f 2199/486/7 2200/488/7 2201/487/7 +f 2202/489/7 2187/492/7 2190/491/7 +f 2190/491/7 2203/490/7 2202/489/7 +f 2204/493/7 2205/495/7 2206/494/7 +f 2207/496/7 2206/494/7 2205/495/7 +f 2205/495/7 2208/497/7 2207/496/7 +f 2209/498/7 2182/472/7 2181/473/7 +f 2181/473/7 2210/499/7 2209/498/7 +f 2211/500/301 2212/500/301 2188/479/27 +f 2188/479/27 2187/479/27 2211/500/301 +f 2213/501/302 2214/501/302 2196/483/26 +f 2196/483/26 2195/483/26 2213/501/302 +f 2211/502/7 2187/492/7 2202/489/7 +f 2202/489/7 2215/503/7 2211/502/7 +f 2207/496/7 2208/497/7 2200/488/7 +f 2200/488/7 2199/486/7 2207/496/7 +f 2203/504/4 2216/505/4 2180/505/4 +f 2180/505/4 2179/504/4 2203/504/4 +f 2202/506/303 2203/504/303 2179/504/303 +f 2179/504/303 2182/506/303 2202/506/303 +f 2215/507/304 2202/506/304 2182/506/304 +f 2182/506/304 2209/507/304 2215/507/304 +f 2217/508/10 2215/507/10 2209/507/10 +f 2209/507/10 2210/508/10 2217/508/10 +f 2218/509/305 2217/512/305 2210/511/305 +f 2210/511/305 2181/510/305 2218/509/305 +f 2216/513/306 2218/509/306 2181/510/306 +f 2181/510/306 2180/514/306 2216/513/306 +f 2219/515/7 2211/502/7 2215/503/7 +f 2215/503/7 2217/516/7 2219/515/7 +f 2211/500/4 2219/517/4 2220/517/4 +f 2220/517/4 2212/500/4 2211/500/4 +f 2190/480/10 2189/480/10 2221/518/10 +f 2221/518/10 2222/518/10 2190/480/10 +f 2222/519/7 2216/474/7 2203/490/7 +f 2203/490/7 2190/491/7 2222/519/7 +f 2183/475/10 2186/476/10 2223/482/10 +f 2223/482/10 2224/481/10 2183/475/10 +f 2216/513/307 2222/520/307 2201/485/307 +f 2201/485/307 2200/513/307 2216/513/307 +f 2218/509/306 2216/513/306 2200/513/306 +f 2200/513/306 2208/509/306 2218/509/306 +f 2217/512/305 2218/509/305 2208/509/305 +f 2208/509/305 2205/512/305 2217/512/305 +f 2219/521/308 2217/512/308 2205/512/308 +f 2205/512/308 2204/521/308 2219/521/308 +f 2191/476/4 2194/475/4 2225/478/4 +f 2225/478/4 2226/477/4 2191/476/4 +f 2195/483/300 2198/484/300 2206/523/300 +f 2206/523/300 2207/522/300 2195/483/300 +f 2213/501/302 2195/483/302 2207/522/302 +f 2207/522/302 2199/524/302 2213/501/302 +f 2222/520/27 2221/527/27 2184/526/27 +f 2184/526/27 2183/525/27 2222/520/27 +f 2201/485/27 2222/520/27 2183/525/27 +f 2183/525/27 2224/528/27 2201/485/27 +f 2199/486/7 2201/487/7 2224/487/7 +f 2224/487/7 2223/486/7 2199/486/7 +f 2213/501/26 2199/524/26 2223/524/26 +f 2223/524/26 2186/501/26 2213/501/26 +f 2214/501/26 2213/501/26 2186/501/26 +f 2186/501/26 2185/501/26 2214/501/26 +f 2198/484/26 2197/485/26 2192/485/26 +f 2192/485/26 2191/484/26 2198/484/26 +f 2206/523/26 2198/484/26 2191/484/26 +f 2191/484/26 2226/523/26 2206/523/26 +f 2204/493/7 2206/494/7 2226/530/7 +f 2226/530/7 2225/529/7 2204/493/7 +f 2219/521/27 2204/521/27 2225/532/27 +f 2225/532/27 2194/531/27 2219/521/27 +f 2220/533/27 2219/521/27 2194/531/27 +f 2194/531/27 2193/531/27 2220/533/27 +f 2227/471/10 2228/472/10 2229/473/10 +f 2229/473/10 2230/474/10 2227/471/10 +f 2231/475/7 2232/476/7 2233/477/7 +f 2233/477/7 2234/478/7 2231/475/7 +f 2235/479/27 2236/480/290 2237/480/290 +f 2237/480/290 2238/479/27 2235/479/27 +f 2239/476/1 2240/475/1 2241/481/1 +f 2241/481/1 2242/482/1 2239/476/1 +f 2243/483/26 2244/484/291 2245/485/291 +f 2245/485/291 2246/483/26 2243/483/26 +f 2247/486/10 2248/487/10 2249/488/10 +f 2250/489/10 2251/490/10 2236/491/10 +f 2236/491/10 2235/492/10 2250/489/10 +f 2252/493/10 2253/494/10 2254/495/10 +f 2255/496/10 2256/497/10 2254/495/10 +f 2254/495/10 2253/494/10 2255/496/10 +f 2257/498/10 2258/499/10 2229/473/10 +f 2229/473/10 2228/472/10 2257/498/10 +f 2259/500/288 2235/479/27 2238/479/27 +f 2238/479/27 2260/500/288 2259/500/288 +f 2261/501/289 2243/483/26 2246/483/26 +f 2246/483/26 2262/501/289 2261/501/289 +f 2259/502/10 2263/503/10 2250/489/10 +f 2250/489/10 2235/492/10 2259/502/10 +f 2255/496/10 2247/486/10 2249/488/10 +f 2249/488/10 2256/497/10 2255/496/10 +f 2251/504/1 2227/504/1 2230/505/1 +f 2230/505/1 2264/505/1 2251/504/1 +f 2250/506/293 2228/506/293 2227/504/293 +f 2227/504/293 2251/504/293 2250/506/293 +f 2263/507/292 2257/507/292 2228/506/292 +f 2228/506/292 2250/506/292 2263/507/292 +f 2265/508/7 2258/508/7 2257/507/7 +f 2257/507/7 2263/507/7 2265/508/7 +f 2266/509/203 2229/510/203 2258/511/203 +f 2258/511/203 2265/512/203 2266/509/203 +f 2264/513/296 2230/514/296 2229/510/296 +f 2229/510/296 2266/509/296 2264/513/296 +f 2267/515/10 2265/516/10 2263/503/10 +f 2263/503/10 2259/502/10 2267/515/10 +f 2259/500/1 2260/500/1 2268/517/1 +f 2268/517/1 2267/517/1 2259/500/1 +f 2236/480/7 2269/518/7 2270/518/7 +f 2270/518/7 2237/480/7 2236/480/7 +f 2269/519/10 2236/491/10 2251/490/10 +f 2251/490/10 2264/474/10 2269/519/10 +f 2231/475/7 2271/481/7 2272/482/7 +f 2272/482/7 2232/476/7 2231/475/7 +f 2264/513/314 2249/513/314 2248/485/314 +f 2248/485/314 2269/520/314 2264/513/314 +f 2266/509/296 2256/509/296 2249/513/296 +f 2249/513/296 2264/513/296 2266/509/296 +f 2265/512/203 2254/512/203 2256/509/203 +f 2256/509/203 2266/509/203 2265/512/203 +f 2267/521/294 2252/521/294 2254/512/294 +f 2254/512/294 2265/512/294 2267/521/294 +f 2239/476/1 2273/477/1 2274/478/1 +f 2274/478/1 2240/475/1 2239/476/1 +f 2243/483/297 2255/522/297 2253/523/291 +f 2253/523/291 2244/484/291 2243/483/297 +f 2261/501/289 2247/524/289 2255/522/289 +f 2255/522/289 2243/483/289 2261/501/289 +f 2269/520/27 2231/525/27 2234/526/27 +f 2234/526/27 2270/527/27 2269/520/27 +f 2248/485/27 2271/528/27 2231/525/27 +f 2231/525/27 2269/520/27 2248/485/27 +f 2247/486/10 2272/486/10 2271/487/10 +f 2271/487/10 2248/487/10 2247/486/10 +f 2261/501/26 2232/501/26 2272/524/26 +f 2272/524/26 2247/524/26 2261/501/26 +f 2262/501/26 2233/501/26 2232/501/26 +f 2232/501/26 2261/501/26 2262/501/26 +f 2244/484/26 2239/484/26 2242/485/26 +f 2242/485/26 2245/485/26 2244/484/26 +f 2253/523/26 2273/523/26 2239/484/26 +f 2239/484/26 2244/484/26 2253/523/26 +f 2252/493/10 2274/529/10 2273/530/10 +f 2273/530/10 2253/494/10 2252/493/10 +f 2267/521/27 2240/531/27 2274/532/27 +f 2274/532/27 2252/521/27 2267/521/27 +f 2268/533/27 2241/531/27 2240/531/27 +f 2240/531/27 2267/521/27 2268/533/27 +f 2275/534/4 2276/535/4 2277/536/4 +f 2277/536/4 2278/537/4 2275/534/4 +f 2279/538/4 2280/539/4 2281/540/4 +f 2281/540/4 2282/541/4 2279/538/4 +f 2283/542/4 2284/543/4 2276/535/4 +f 2276/535/4 2275/534/4 2283/542/4 +f 2280/539/4 2278/537/4 2277/536/4 +f 2277/536/4 2281/540/4 2280/539/4 +f 2285/544/315 2286/545/315 2287/546/316 +f 2287/546/316 2288/547/316 2285/544/315 +f 2286/548/4 2289/549/4 2290/550/4 +f 2290/550/4 2287/551/4 2286/548/4 +f 2289/552/317 2291/553/317 2292/554/318 +f 2292/554/318 2290/555/318 2289/552/317 +f 2288/547/316 2287/546/316 2293/556/319 +f 2293/556/319 2294/557/319 2288/547/316 +f 2287/551/4 2290/550/4 2295/558/4 +f 2295/558/4 2293/559/4 2287/551/4 +f 2290/555/318 2292/554/318 2296/560/320 +f 2296/560/320 2295/561/320 2290/555/318 +f 2294/557/319 2293/556/319 2297/562/27 +f 2297/562/27 2298/563/27 2294/557/319 +f 2293/559/4 2295/558/4 2299/564/4 +f 2299/564/4 2297/565/4 2293/559/4 +f 2295/561/320 2296/560/320 2300/566/26 +f 2300/566/26 2299/567/26 2295/561/320 +f 2298/563/27 2297/562/27 2301/556/321 +f 2301/556/321 2302/557/321 2298/563/27 +f 2297/565/4 2299/564/4 2303/568/4 +f 2303/568/4 2301/569/4 2297/565/4 +f 2299/567/26 2300/566/26 2304/560/322 +f 2304/560/322 2303/561/322 2299/567/26 +f 2302/557/321 2301/556/321 2305/546/323 +f 2305/546/323 2306/547/323 2302/557/321 +f 2301/569/4 2303/568/4 2307/570/4 +f 2307/570/4 2305/571/4 2301/569/4 +f 2303/561/322 2304/560/322 2308/554/324 +f 2308/554/324 2307/555/324 2303/561/322 +f 2306/547/323 2305/546/323 2309/545/325 +f 2309/545/325 2310/544/325 2306/547/323 +f 2305/571/4 2307/570/4 2311/572/4 +f 2311/572/4 2309/573/4 2305/571/4 +f 2307/555/324 2308/554/324 2312/553/326 +f 2312/553/326 2311/552/326 2307/555/324 +f 2313/574/327 2314/575/327 2315/576/327 +f 2315/576/327 2316/577/327 2313/574/327 +f 2317/578/328 2313/579/328 2316/580/328 +f 2316/580/328 2318/581/328 2317/578/328 +f 2319/579/329 2317/578/329 2318/581/329 +f 2318/581/329 2320/580/329 2319/579/329 +f 2319/578/330 2320/581/330 2315/580/330 +f 2315/580/330 2314/579/330 2319/578/330 +f 2321/582/331 2316/577/331 2315/576/331 +f 2315/576/331 2322/583/332 2321/582/331 +f 2318/581/333 2316/580/333 2321/584/333 +f 2321/584/333 2323/585/333 2318/581/333 +f 2324/584/334 2320/580/334 2318/581/334 +f 2318/581/334 2323/585/334 2324/584/334 +f 2322/584/335 2315/580/335 2320/581/335 +f 2320/581/335 2324/585/335 2322/584/335 +f 2325/586/336 2326/587/26 2327/588/26 +f 2327/588/26 2328/589/336 2325/586/336 +f 2328/590/1 2327/591/1 2329/592/1 +f 2329/592/1 2330/593/1 2328/590/1 +f 2330/589/337 2329/588/27 2331/587/27 +f 2331/587/27 2332/586/337 2330/589/337 +f 2327/588/26 2326/587/26 2333/594/338 +f 2333/594/338 2334/595/338 2327/588/26 +f 2329/592/1 2327/591/1 2334/596/1 +f 2334/596/1 2335/597/1 2329/592/1 +f 2331/587/27 2329/588/27 2335/595/339 +f 2335/595/339 2336/594/339 2331/587/27 +f 2337/586/340 2338/587/26 2339/588/26 +f 2339/588/26 2340/589/340 2337/586/340 +f 2340/590/4 2339/591/4 2341/592/4 +f 2341/592/4 2342/593/4 2340/590/4 +f 2342/589/341 2341/588/27 2343/587/27 +f 2343/587/27 2344/586/342 2342/589/341 +f 2339/588/26 2338/587/26 2345/594/343 +f 2345/594/343 2346/595/343 2339/588/26 +f 2341/592/4 2339/591/4 2346/596/4 +f 2346/596/4 2347/597/4 2341/592/4 +f 2343/587/27 2341/588/27 2347/595/344 +f 2347/595/344 2348/594/344 2343/587/27 +f 2347/598/1 2346/596/1 2345/599/1 +f 2345/599/1 2348/600/1 2347/598/1 +f 2349/574/345 2350/577/345 2351/576/345 +f 2351/576/345 2352/575/345 2349/574/345 +f 2353/578/346 2354/581/346 2350/580/346 +f 2350/580/346 2349/579/346 2353/578/346 +f 2355/579/347 2356/580/347 2354/581/347 +f 2354/581/347 2353/578/347 2355/579/347 +f 2355/578/348 2352/579/348 2351/580/348 +f 2351/580/348 2356/581/348 2355/578/348 +f 2357/582/175 2358/583/349 2351/576/349 +f 2351/576/349 2350/577/349 2357/582/175 +f 2354/581/350 2359/585/350 2357/584/350 +f 2357/584/350 2350/580/350 2354/581/350 +f 2360/584/351 2359/585/351 2354/581/351 +f 2354/581/351 2356/580/351 2360/584/351 +f 2358/584/352 2360/585/352 2356/581/353 +f 2356/581/353 2351/580/352 2358/584/352 +f 2361/586/340 2362/589/340 2363/588/26 +f 2363/588/26 2364/587/26 2361/586/340 +f 2362/590/10 2365/593/10 2366/592/10 +f 2366/592/10 2363/591/10 2362/590/10 +f 2365/589/341 2367/586/342 2368/587/27 +f 2368/587/27 2366/588/27 2365/589/341 +f 2363/588/26 2369/595/343 2370/594/343 +f 2370/594/343 2364/587/26 2363/588/26 +f 2366/592/10 2371/597/10 2369/596/10 +f 2369/596/10 2363/591/10 2366/592/10 +f 2368/587/27 2372/594/344 2371/595/344 +f 2371/595/344 2366/588/27 2368/587/27 +f 2370/599/1 2369/596/1 2371/598/1 +f 2371/598/1 2372/600/1 2370/599/1 +f 2373/586/354 2374/589/340 2375/588/26 +f 2375/588/26 2376/587/26 2373/586/354 +f 2374/590/10 2377/593/10 2378/592/10 +f 2378/592/10 2375/591/10 2374/590/10 +f 2377/589/342 2379/586/341 2380/587/27 +f 2380/587/27 2378/588/27 2377/589/342 +f 2375/588/26 2381/595/355 2382/594/355 +f 2382/594/355 2376/587/26 2375/588/26 +f 2378/592/10 2383/597/10 2381/596/10 +f 2381/596/10 2375/591/10 2378/592/10 +f 2380/587/27 2384/594/356 2383/595/344 +f 2383/595/344 2378/588/27 2380/587/27 +f 2385/601/7 2386/602/7 2387/603/7 +f 2387/603/7 691/604/7 2385/601/7 +f 2388/605/4 2389/606/4 2390/607/4 +f 2390/607/4 690/608/4 2388/605/4 +f 2391/601/1 2392/602/1 2393/609/1 +f 2393/609/1 692/610/1 2391/601/1 +f 2394/611/10 2395/612/10 2396/613/10 +f 2396/613/10 693/614/10 2394/611/10 +f 690/610/7 2390/609/7 2386/602/7 +f 2386/602/7 2385/601/7 690/610/7 +f 693/604/1 2396/603/1 2392/602/1 +f 2392/602/1 2391/601/1 693/604/1 +f 692/615/4 2393/616/4 2389/606/4 +f 2389/606/4 2388/605/4 692/615/4 +f 691/617/10 2387/618/10 2395/612/10 +f 2395/612/10 2394/611/10 691/617/10 +f 2397/619/357 2398/620/358 2399/621/358 +f 2399/621/358 2400/622/357 2397/619/357 +f 2398/620/358 2401/623/359 2402/624/359 +f 2402/624/359 2399/621/358 2398/620/358 +f 2403/625/360 2404/626/10 2398/627/10 +f 2398/627/10 2397/628/360 2403/625/360 +f 2398/627/10 2404/626/10 2405/629/361 +f 2405/629/361 2401/630/361 2398/627/10 +f 2403/619/315 2406/622/315 2407/621/362 +f 2407/621/362 2404/620/362 2403/619/315 +f 2404/620/362 2407/621/362 2408/624/363 +f 2408/624/363 2405/623/363 2404/620/362 +f 2406/631/364 2400/632/364 2399/633/365 +f 2399/633/365 2407/634/365 2406/631/364 +f 2399/633/365 2402/635/366 2408/636/366 +f 2408/636/366 2407/634/365 2399/633/365 +f 2409/637/7 2410/638/7 2411/639/7 +f 2411/639/7 2412/640/7 2409/637/7 +f 2413/640/4 2412/641/4 2411/642/4 +f 2411/642/4 2414/643/4 2413/640/4 +f 2413/637/1 2414/638/1 2415/639/1 +f 2415/639/1 2416/640/1 2413/637/1 +f 2417/644/1 2418/645/1 2419/646/1 +f 2419/646/1 2420/647/1 2417/644/1 +f 2421/647/7 2422/644/7 2423/645/7 +f 2423/645/7 2424/646/7 2421/647/7 +f 2418/648/367 2417/649/367 2425/650/367 +f 2425/650/367 2426/651/367 2418/648/367 +f 2425/652/4 2417/567/4 2420/653/4 +f 2420/653/4 2427/654/4 2425/652/4 +f 2420/648/368 2419/649/368 2428/650/368 +f 2428/650/368 2427/651/368 2420/648/368 +f 2429/637/7 2430/638/7 2431/639/7 +f 2431/639/7 2432/640/7 2429/637/7 +f 2432/640/4 2431/643/4 2433/642/4 +f 2433/642/4 2434/641/4 2432/640/4 +f 2434/637/1 2433/638/1 2435/639/1 +f 2435/639/1 2436/640/1 2434/637/1 +f 2437/655/369 2423/656/369 2422/657/369 +f 2422/657/369 2438/658/369 2437/655/369 +f 2437/659/4 2439/660/4 2424/661/4 +f 2424/661/4 2423/662/4 2437/659/4 +f 2440/655/370 2421/656/370 2424/657/370 +f 2424/657/370 2439/658/370 2440/655/370 +f 2441/663/298 2442/664/298 2426/651/298 +f 2426/651/298 2425/650/298 2441/663/298 +f 2427/654/4 2443/665/4 2441/666/4 +f 2441/666/4 2425/652/4 2427/654/4 +f 2444/663/371 2443/664/371 2427/651/371 +f 2427/651/371 2428/650/371 2444/663/371 +f 2437/655/297 2438/658/297 2442/664/297 +f 2442/664/297 2441/663/297 2437/655/297 +f 2439/660/4 2437/659/4 2441/666/4 +f 2441/666/4 2443/665/4 2439/660/4 +f 2440/655/372 2439/658/372 2443/664/372 +f 2443/664/372 2444/663/372 2440/655/372 +f 2445/667/373 2446/668/373 2447/669/373 +f 2447/669/373 2448/670/373 2445/667/373 +f 2449/671/374 2450/672/374 2446/668/374 +f 2446/668/374 2445/667/374 2449/671/374 +f 2451/673/7 2452/674/7 2453/675/7 +f 2453/675/7 2454/676/7 2451/673/7 +f 2451/673/7 2450/673/7 2455/673/7 +f 2455/673/7 2452/674/7 2451/673/7 +f 2451/673/7 2447/677/7 2446/677/7 +f 2446/677/7 2450/673/7 2451/673/7 +f 2456/678/7 2447/677/7 2451/673/7 +f 2451/673/7 2454/676/7 2456/678/7 +f 2453/679/27 2452/303/27 2457/680/27 +f 2457/680/27 2458/681/27 2453/679/27 +f 2452/682/375 2455/672/375 2459/671/375 +f 2459/671/375 2457/683/375 2452/682/375 +f 2455/672/376 2450/672/377 2449/671/377 +f 2449/671/377 2459/671/376 2455/672/376 +f 2460/684/373 2461/685/373 2445/667/373 +f 2445/667/373 2448/670/373 2460/684/373 +f 2461/685/374 2462/686/374 2449/671/374 +f 2449/671/374 2445/667/374 2461/685/374 +f 2463/678/1 2464/677/1 2465/673/1 +f 2465/673/1 2466/676/1 2463/678/1 +f 2465/673/1 2464/677/1 2467/677/1 +f 2467/677/1 2462/673/1 2465/673/1 +f 2465/673/1 2462/673/1 2461/673/1 +f 2461/673/1 2460/674/1 2465/673/1 +f 2465/673/1 2460/674/1 2468/675/1 +f 2468/675/1 2466/676/1 2465/673/1 +f 2457/680/27 2464/687/27 2463/688/27 +f 2463/688/27 2458/681/27 2457/680/27 +f 2459/671/375 2467/686/375 2464/678/375 +f 2464/678/375 2457/683/375 2459/671/375 +f 2449/671/377 2462/686/377 2467/686/376 +f 2467/686/376 2459/671/376 2449/671/377 +f 2469/689/4 2470/690/4 2471/691/4 +f 2471/691/4 2472/692/4 2469/689/4 +f 2473/693/4 2472/692/4 2471/691/4 +f 2471/691/4 2474/694/4 2473/693/4 +f 2475/619/357 2476/620/358 2477/621/358 +f 2477/621/358 2478/622/357 2475/619/357 +f 2476/620/358 2479/623/359 2480/624/359 +f 2480/624/359 2477/621/358 2476/620/358 +f 2481/625/360 2482/626/10 2476/627/10 +f 2476/627/10 2475/628/360 2481/625/360 +f 2476/627/10 2482/626/10 2483/629/361 +f 2483/629/361 2479/630/361 2476/627/10 +f 2481/619/315 2484/622/315 2485/621/362 +f 2485/621/362 2482/620/362 2481/619/315 +f 2482/620/362 2485/621/362 2486/624/363 +f 2486/624/363 2483/623/363 2482/620/362 +f 2484/631/364 2478/632/364 2477/633/365 +f 2477/633/365 2485/634/365 2484/631/364 +f 2477/633/365 2480/635/366 2486/636/366 +f 2486/636/366 2485/634/365 2477/633/365 +f 2487/619/357 2488/622/357 2489/621/378 +f 2489/621/378 2490/620/378 2487/619/357 +f 2490/620/378 2489/621/378 2491/624/379 +f 2491/624/379 2492/623/379 2490/620/378 +f 2493/625/365 2487/628/365 2490/627/4 +f 2490/627/4 2494/626/4 2493/625/365 +f 2490/627/4 2492/630/380 2495/629/380 +f 2495/629/380 2494/626/4 2490/627/4 +f 2493/619/315 2494/620/381 2496/621/381 +f 2496/621/381 2497/622/315 2493/619/315 +f 2494/620/381 2495/623/382 2498/624/382 +f 2498/624/382 2496/621/381 2494/620/381 +f 2497/631/383 2496/634/360 2489/633/360 +f 2489/633/360 2488/632/383 2497/631/383 +f 2489/633/360 2496/634/360 2498/636/384 +f 2498/636/384 2491/635/384 2489/633/360 +f 2499/619/357 2500/622/357 2501/621/378 +f 2501/621/378 2502/620/378 2499/619/357 +f 2502/620/378 2501/621/378 2503/624/379 +f 2503/624/379 2504/623/379 2502/620/378 +f 2505/625/365 2499/628/365 2502/627/4 +f 2502/627/4 2506/626/4 2505/625/365 +f 2502/627/4 2504/630/380 2507/629/380 +f 2507/629/380 2506/626/4 2502/627/4 +f 2505/619/315 2506/620/381 2508/621/381 +f 2508/621/381 2509/622/315 2505/619/315 +f 2506/620/381 2507/623/382 2510/624/382 +f 2510/624/382 2508/621/381 2506/620/381 +f 2509/631/383 2508/634/360 2501/633/360 +f 2501/633/360 2500/632/383 2509/631/383 +f 2501/633/360 2508/634/360 2510/636/384 +f 2510/636/384 2503/635/384 2501/633/360 +f 2511/586/336 2512/589/336 2513/588/26 +f 2513/588/26 2514/587/26 2511/586/336 +f 2512/590/7 2515/593/7 2516/592/7 +f 2516/592/7 2513/591/7 2512/590/7 +f 2515/589/337 2517/586/337 2518/587/27 +f 2518/587/27 2516/588/27 2515/589/337 +f 2513/588/26 2519/595/338 2520/594/338 +f 2520/594/338 2514/587/26 2513/588/26 +f 2516/592/7 2521/597/7 2519/596/7 +f 2519/596/7 2513/591/7 2516/592/7 +f 2518/587/27 2522/594/339 2521/595/339 +f 2521/595/339 2516/588/27 2518/587/27 +f 2523/451/27 2524/452/27 2525/453/27 +f 2525/453/27 2526/454/27 2523/451/27 +f 2527/455/4 2528/456/4 2524/457/4 +f 2524/457/4 2523/458/4 2527/455/4 +f 2528/459/1 2529/460/1 2525/461/1 +f 2525/461/1 2524/462/1 2528/459/1 +f 2529/456/10 2530/455/10 2526/458/10 +f 2526/458/10 2525/457/10 2529/456/10 +f 2530/460/7 2527/459/7 2523/462/7 +f 2523/462/7 2526/461/7 2530/460/7 +f 2531/451/27 2532/452/27 2533/453/27 +f 2533/453/27 2534/454/27 2531/451/27 +f 2535/455/7 2536/456/7 2532/457/7 +f 2532/457/7 2531/458/7 2535/455/7 +f 2536/459/4 2537/460/4 2533/461/4 +f 2533/461/4 2532/462/4 2536/459/4 +f 2537/456/1 2538/455/1 2534/458/1 +f 2534/458/1 2533/457/1 2537/456/1 +f 2538/460/10 2535/459/10 2531/462/10 +f 2531/462/10 2534/461/10 2538/460/10 +f 2539/451/27 2540/452/27 2541/453/27 +f 2541/453/27 2542/454/27 2539/451/27 +f 2543/455/7 2544/456/7 2540/457/7 +f 2540/457/7 2539/458/7 2543/455/7 +f 2544/459/4 2545/460/4 2541/461/4 +f 2541/461/4 2540/462/4 2544/459/4 +f 2545/456/1 2546/455/1 2542/458/1 +f 2542/458/1 2541/457/1 2545/456/1 +f 2546/460/10 2543/459/10 2539/462/10 +f 2539/462/10 2542/461/10 2546/460/10 +f 2547/3/12 2548/2/12 2549/1/1 +f 2549/1/1 2550/4/1 2547/3/12 +f 2551/6/11 2552/5/11 2548/2/12 +f 2548/2/12 2547/3/12 2551/6/11 +f 2553/8/10 2554/7/10 2552/5/11 +f 2552/5/11 2551/6/11 2553/8/10 +f 2555/11/9 2556/10/9 2554/9/10 +f 2554/9/10 2553/12/10 2555/11/9 +f 2557/14/8 2558/13/8 2556/10/9 +f 2556/10/9 2555/11/9 2557/14/8 +f 2559/16/7 2560/15/7 2558/13/8 +f 2558/13/8 2557/14/8 2559/16/7 +f 2561/18/6 2562/17/6 2560/15/7 +f 2560/15/7 2559/16/7 2561/18/6 +f 2563/20/5 2564/19/5 2562/17/6 +f 2562/17/6 2561/18/6 2563/20/5 +f 2565/22/4 2566/21/4 2564/19/5 +f 2564/19/5 2563/20/5 2565/22/4 +f 2567/24/3 2568/23/3 2566/21/4 +f 2566/21/4 2565/22/4 2567/24/3 +f 2569/26/2 2570/25/2 2568/23/3 +f 2568/23/3 2567/24/3 2569/26/2 +f 2550/4/1 2549/1/1 2570/25/2 +f 2570/25/2 2569/26/2 2550/4/1 +f 2571/27/24 2572/30/24 2573/29/24 +f 2573/29/24 2574/28/24 2571/27/24 +f 2575/31/23 2576/32/23 2572/30/23 +f 2572/30/23 2571/27/23 2575/31/23 +f 2577/33/22 2578/34/22 2576/32/22 +f 2576/32/22 2575/31/22 2577/33/22 +f 2579/35/21 2580/38/21 2578/37/21 +f 2578/37/21 2577/36/21 2579/35/21 +f 2581/39/20 2582/40/20 2580/38/20 +f 2580/38/20 2579/35/20 2581/39/20 +f 2583/41/19 2584/42/19 2582/40/19 +f 2582/40/19 2581/39/19 2583/41/19 +f 2585/43/18 2586/44/18 2584/42/18 +f 2584/42/18 2583/41/18 2585/43/18 +f 2587/45/17 2588/46/17 2586/44/17 +f 2586/44/17 2585/43/17 2587/45/17 +f 2589/47/16 2590/48/16 2588/46/16 +f 2588/46/16 2587/45/16 2589/47/16 +f 2591/49/15 2592/50/15 2590/48/15 +f 2590/48/15 2589/47/15 2591/49/15 +f 2593/51/14 2594/52/14 2592/50/14 +f 2592/50/14 2591/49/14 2593/51/14 +f 2574/28/13 2573/29/13 2594/52/192 +f 2594/52/192 2593/51/192 2574/28/13 +f 2548/53/26 2571/53/26 2574/54/26 +f 2574/54/26 2549/54/26 2548/53/26 +f 2549/54/26 2574/54/26 2593/55/26 +f 2593/55/26 2570/55/26 2549/54/26 +f 2570/55/26 2593/55/26 2591/56/26 +f 2591/56/26 2568/56/26 2570/55/26 +f 2568/56/26 2591/56/26 2589/57/26 +f 2589/57/26 2566/57/26 2568/56/26 +f 2566/57/26 2589/57/26 2587/59/26 +f 2587/59/26 2564/58/26 2566/57/26 +f 2564/58/26 2587/59/26 2585/61/26 +f 2585/61/26 2562/60/26 2564/58/26 +f 2562/60/26 2585/61/26 2583/62/26 +f 2583/62/26 2560/62/26 2562/60/26 +f 2560/62/26 2583/62/26 2581/64/26 +f 2581/64/26 2558/63/26 2560/62/26 +f 2558/63/26 2581/64/26 2579/66/26 +f 2579/66/26 2556/65/26 2558/63/26 +f 2556/65/26 2579/66/26 2577/67/26 +f 2577/67/26 2554/67/26 2556/65/26 +f 2554/67/26 2577/67/26 2575/68/26 +f 2575/68/26 2552/68/26 2554/67/26 +f 2552/68/26 2575/68/26 2571/53/26 +f 2571/53/26 2548/53/26 2552/68/26 +f 2595/54/27 2573/54/27 2572/53/27 +f 2572/53/27 2596/53/27 2595/54/27 +f 2596/53/27 2572/53/27 2576/68/27 +f 2576/68/27 2597/68/27 2596/53/27 +f 2597/68/27 2576/68/27 2578/67/27 +f 2578/67/27 2598/67/27 2597/68/27 +f 2598/67/27 2578/67/27 2580/66/27 +f 2580/66/27 2599/65/27 2598/67/27 +f 2599/65/27 2580/66/27 2582/64/27 +f 2582/64/27 2600/63/27 2599/65/27 +f 2600/63/27 2582/64/27 2584/62/27 +f 2584/62/27 2601/62/27 2600/63/27 +f 2601/62/27 2584/62/27 2586/61/27 +f 2586/61/27 2602/60/27 2601/62/27 +f 2602/60/27 2586/61/27 2588/59/27 +f 2588/59/27 2603/58/27 2602/60/27 +f 2603/58/27 2588/59/27 2590/57/27 +f 2590/57/27 2604/57/27 2603/58/27 +f 2604/57/27 2590/57/27 2592/56/27 +f 2592/56/27 2605/56/27 2604/57/27 +f 2605/56/27 2592/56/27 2594/55/27 +f 2594/55/27 2606/55/27 2605/56/27 +f 2606/55/27 2594/55/27 2573/54/27 +f 2573/54/27 2595/54/27 2606/55/27 +f 2607/71/12 2608/70/1 2595/69/1 +f 2595/69/1 2596/72/12 2607/71/12 +f 2609/73/23 2607/71/12 2596/72/12 +f 2596/72/12 2597/74/23 2609/73/23 +f 2610/75/22 2609/73/22 2597/74/22 +f 2597/74/22 2598/76/22 2610/75/22 +f 2611/77/9 2610/75/21 2598/76/21 +f 2598/76/21 2599/78/9 2611/77/9 +f 2612/79/8 2611/77/9 2599/78/9 +f 2599/78/9 2600/80/8 2612/79/8 +f 2613/83/7 2612/82/8 2600/81/8 +f 2600/81/8 2601/84/7 2613/83/7 +f 2614/85/6 2613/83/7 2601/84/7 +f 2601/84/7 2602/86/6 2614/85/6 +f 2615/87/5 2614/85/6 2602/86/6 +f 2602/86/6 2603/88/5 2615/87/5 +f 2616/89/4 2615/87/5 2603/88/5 +f 2603/88/5 2604/90/4 2616/89/4 +f 2617/91/3 2616/89/4 2604/90/4 +f 2604/90/4 2605/92/3 2617/91/3 +f 2618/93/2 2617/91/3 2605/92/3 +f 2605/92/3 2606/94/2 2618/93/2 +f 2608/70/1 2618/93/2 2606/94/2 +f 2606/94/2 2595/69/1 2608/70/1 +f 2619/95/26 2620/95/26 2621/96/26 +f 2621/96/26 2622/96/26 2619/95/26 +f 2623/97/26 2624/97/26 2620/95/26 +f 2620/95/26 2619/95/26 2623/97/26 +f 2625/67/26 2626/98/26 2624/97/26 +f 2624/97/26 2623/97/26 2625/67/26 +f 2627/99/26 2628/99/26 2626/98/26 +f 2626/98/26 2625/67/26 2627/99/26 +f 2629/100/26 2630/100/26 2628/99/26 +f 2628/99/26 2627/99/26 2629/100/26 +f 2631/101/26 2632/101/26 2630/100/26 +f 2630/100/26 2629/100/26 2631/101/26 +f 2633/61/26 2634/61/26 2632/101/26 +f 2632/101/26 2631/101/26 2633/61/26 +f 2635/59/26 2636/102/26 2634/61/26 +f 2634/61/26 2633/61/26 2635/59/26 +f 2637/103/26 2638/103/26 2636/102/26 +f 2636/102/26 2635/59/26 2637/103/26 +f 2639/104/26 2640/105/26 2638/103/26 +f 2638/103/26 2637/103/26 2639/104/26 +f 2641/106/26 2642/106/26 2640/105/26 +f 2640/105/26 2639/104/26 2641/106/26 +f 2622/96/26 2621/96/26 2642/106/26 +f 2642/106/26 2641/106/26 2622/96/26 +f 2620/107/39 2643/110/39 2644/109/39 +f 2644/109/39 2621/108/39 2620/107/39 +f 2624/111/38 2645/112/38 2643/110/38 +f 2643/110/38 2620/107/38 2624/111/38 +f 2626/113/37 2646/114/37 2645/112/37 +f 2645/112/37 2624/111/37 2626/113/37 +f 2628/115/36 2647/116/36 2646/114/36 +f 2646/114/36 2626/113/36 2628/115/36 +f 2630/117/35 2648/118/35 2647/116/35 +f 2647/116/35 2628/115/35 2630/117/35 +f 2632/119/34 2649/120/34 2648/118/34 +f 2648/118/34 2630/117/34 2632/119/34 +f 2634/121/33 2650/122/33 2649/120/33 +f 2649/120/33 2632/119/33 2634/121/33 +f 2636/123/32 2651/124/32 2650/122/32 +f 2650/122/32 2634/121/32 2636/123/32 +f 2638/125/31 2652/126/31 2651/124/31 +f 2651/124/31 2636/123/31 2638/125/31 +f 2640/127/30 2653/130/30 2652/129/30 +f 2652/129/30 2638/128/30 2640/127/30 +f 2642/131/29 2654/132/29 2653/130/29 +f 2653/130/29 2640/127/29 2642/131/29 +f 2621/108/28 2644/109/28 2654/132/28 +f 2654/132/28 2642/131/28 2621/108/28 +f 2643/110/54 2655/134/54 2656/133/54 +f 2656/133/54 2644/109/54 2643/110/54 +f 2645/112/53 2657/135/53 2655/134/53 +f 2655/134/53 2643/110/53 2645/112/53 +f 2646/114/51 2658/136/52 2657/135/51 +f 2657/135/51 2645/112/51 2646/114/51 +f 2647/116/50 2659/137/50 2658/136/50 +f 2658/136/50 2646/114/50 2647/116/50 +f 2648/118/49 2660/138/49 2659/137/49 +f 2659/137/49 2647/116/49 2648/118/49 +f 2649/120/48 2661/139/48 2660/138/48 +f 2660/138/48 2648/118/48 2649/120/48 +f 2650/122/385 2662/140/46 2661/139/46 +f 2661/139/46 2649/120/46 2650/122/385 +f 2651/124/45 2663/141/45 2662/140/45 +f 2662/140/45 2650/122/45 2651/124/45 +f 2652/126/44 2664/142/44 2663/141/44 +f 2663/141/44 2651/124/44 2652/126/44 +f 2653/130/42 2665/144/42 2664/143/43 +f 2664/143/43 2652/129/42 2653/130/42 +f 2654/132/41 2666/145/41 2665/144/41 +f 2665/144/41 2653/130/41 2654/132/41 +f 2644/109/40 2656/133/40 2666/145/40 +f 2666/145/40 2654/132/386 2644/109/40 +f 2607/148/71 2667/147/71 2668/146/71 +f 2668/146/71 2608/149/71 2607/148/71 +f 2609/151/69 2669/150/70 2667/147/70 +f 2667/147/70 2607/148/69 2609/151/69 +f 2610/154/68 2670/153/68 2669/152/68 +f 2669/152/68 2609/155/68 2610/154/68 +f 2611/156/67 2671/142/67 2670/153/67 +f 2670/153/67 2610/154/67 2611/156/67 +f 2612/158/65 2672/157/66 2671/142/66 +f 2671/142/66 2611/156/65 2612/158/65 +f 2613/160/64 2673/159/64 2672/157/64 +f 2672/157/64 2612/158/64 2613/160/64 +f 2614/162/63 2674/161/63 2673/159/63 +f 2673/159/63 2613/160/63 2614/162/63 +f 2615/164/62 2675/163/61 2674/161/61 +f 2674/161/61 2614/162/62 2615/164/62 +f 2616/166/60 2676/165/60 2675/163/60 +f 2675/163/60 2615/164/60 2616/166/60 +f 2617/168/59 2677/167/59 2676/165/59 +f 2676/165/59 2616/166/59 2617/168/59 +f 2618/170/58 2678/169/57 2677/167/57 +f 2677/167/57 2617/168/57 2618/170/58 +f 2608/149/56 2668/146/56 2678/169/56 +f 2678/169/56 2618/170/56 2608/149/56 +f 2667/173/12 2619/172/12 2622/171/1 +f 2622/171/1 2668/174/1 2667/173/12 +f 2669/176/11 2623/175/11 2619/172/12 +f 2619/172/12 2667/173/12 2669/176/11 +f 2670/179/10 2625/178/10 2623/177/11 +f 2623/177/11 2669/180/11 2670/179/10 +f 2671/181/9 2627/86/9 2625/178/10 +f 2625/178/10 2670/179/10 2671/181/9 +f 2672/183/8 2629/182/8 2627/86/9 +f 2627/86/9 2671/181/9 2672/183/8 +f 2673/185/7 2631/184/7 2629/182/8 +f 2629/182/8 2672/183/8 2673/185/7 +f 2674/187/6 2633/186/6 2631/184/7 +f 2631/184/7 2673/185/7 2674/187/6 +f 2675/189/5 2635/188/5 2633/186/6 +f 2633/186/6 2674/187/6 2675/189/5 +f 2676/191/4 2637/190/4 2635/188/5 +f 2635/188/5 2675/189/5 2676/191/4 +f 2677/192/3 2639/76/3 2637/190/4 +f 2637/190/4 2676/191/4 2677/192/3 +f 2678/194/2 2641/193/2 2639/76/3 +f 2639/76/3 2677/192/3 2678/194/2 +f 2668/174/1 2622/171/1 2641/193/2 +f 2641/193/2 2678/194/2 2668/174/1 +f 2679/195/387 2680/198/387 2681/197/387 +f 2681/197/387 2682/196/387 2679/195/387 +f 2683/199/388 2684/202/388 2685/201/388 +f 2685/201/388 2686/200/388 2683/199/388 +f 2687/203/389 2688/206/389 2689/205/389 +f 2689/205/389 2690/204/389 2687/203/389 +f 2691/202/390 2692/199/390 2693/200/390 +f 2693/200/390 2694/201/390 2691/202/390 +f 2695/207/391 2696/209/391 2697/208/391 +f 2697/208/391 2698/207/391 2695/207/391 +f 2699/209/392 2700/211/392 2701/210/392 +f 2690/212/393 2689/214/393 2702/213/393 +f 2702/213/393 2703/196/393 2690/212/393 +f 2704/210/394 2705/211/394 2706/209/394 +f 2707/215/395 2706/209/395 2705/211/395 +f 2705/211/395 2708/216/395 2707/215/395 +f 2709/217/396 2682/196/396 2681/197/396 +f 2681/197/396 2710/218/396 2709/217/396 +f 2711/219/397 2687/203/397 2690/204/397 +f 2690/204/397 2712/220/397 2711/219/397 +f 2713/209/398 2695/207/398 2698/207/398 +f 2698/207/398 2714/208/398 2713/209/398 +f 2690/212/399 2703/196/399 2715/213/399 +f 2715/213/399 2712/214/399 2690/212/399 +f 2707/215/400 2708/216/400 2700/211/400 +f 2700/211/400 2699/209/400 2707/215/400 +f 2716/221/390 2680/221/390 2679/222/390 +f 2679/222/390 2702/222/390 2716/221/390 +f 2702/222/401 2679/222/401 2682/203/401 +f 2682/203/401 2703/203/401 2702/222/401 +f 2703/203/402 2682/203/402 2709/206/402 +f 2709/206/402 2715/206/402 2703/203/402 +f 2715/206/388 2709/206/388 2710/223/388 +f 2710/223/388 2717/223/388 2715/206/388 +f 2717/224/403 2710/224/403 2681/226/403 +f 2681/226/403 2718/225/403 2717/224/403 +f 2718/225/404 2681/226/404 2680/224/404 +f 2680/224/404 2716/224/404 2718/225/404 +f 2712/214/394 2715/213/394 2717/228/394 +f 2717/228/394 2719/227/394 2712/214/394 +f 2719/229/390 2720/221/390 2711/219/390 +f 2711/219/390 2712/220/390 2719/229/390 +f 2688/206/388 2721/223/388 2722/230/388 +f 2722/230/388 2689/205/388 2688/206/388 +f 2722/227/392 2716/228/392 2702/213/392 +f 2702/213/392 2689/214/392 2722/227/392 +f 2685/201/388 2723/202/388 2724/199/388 +f 2724/199/388 2686/200/388 2685/201/388 +f 2722/231/405 2701/233/406 2700/232/405 +f 2700/232/405 2716/224/405 2722/231/405 +f 2716/224/404 2700/232/404 2708/234/404 +f 2708/234/404 2718/225/404 2716/224/404 +f 2718/225/403 2708/234/403 2705/232/403 +f 2705/232/403 2717/224/403 2718/225/403 +f 2717/224/407 2705/232/407 2704/233/407 +f 2704/233/407 2719/231/407 2717/224/407 +f 2693/200/390 2725/199/390 2726/202/390 +f 2726/202/390 2694/201/390 2693/200/390 +f 2697/208/391 2706/236/391 2707/235/391 +f 2707/235/391 2698/207/391 2697/208/391 +f 2698/207/398 2707/235/398 2699/236/398 +f 2699/236/398 2714/208/398 2698/207/398 +f 2721/236/27 2683/238/27 2686/237/27 +f 2686/237/27 2722/231/27 2721/236/27 +f 2722/231/27 2686/237/27 2724/239/27 +f 2724/239/27 2701/233/27 2722/231/27 +f 2701/210/408 2724/241/409 2723/240/409 +f 2723/240/409 2699/209/408 2701/210/408 +f 2699/236/26 2723/238/26 2685/242/26 +f 2685/242/26 2714/208/26 2699/236/26 +f 2714/208/26 2685/242/26 2684/240/26 +f 2684/240/26 2713/209/26 2714/208/26 +f 2696/209/26 2691/240/26 2694/242/26 +f 2694/242/26 2697/208/26 2696/209/26 +f 2697/208/26 2694/242/26 2726/238/26 +f 2726/238/26 2706/236/26 2697/208/26 +f 2706/209/410 2726/240/410 2725/241/410 +f 2725/241/410 2704/210/410 2706/209/410 +f 2704/233/27 2725/239/27 2693/237/27 +f 2693/237/27 2719/231/27 2704/233/27 +f 2719/231/27 2693/237/27 2692/238/27 +f 2692/238/27 2720/236/27 2719/231/27 +f 2727/195/411 2728/198/411 2729/197/411 +f 2729/197/411 2730/196/411 2727/195/411 +f 2731/199/412 2732/202/412 2733/201/413 +f 2733/201/413 2734/200/413 2731/199/412 +f 2735/203/414 2736/206/414 2737/205/414 +f 2737/205/414 2738/204/414 2735/203/414 +f 2739/202/415 2740/199/415 2741/200/416 +f 2741/200/416 2742/201/416 2739/202/415 +f 2743/207/417 2744/209/417 2745/208/417 +f 2745/208/417 2746/207/417 2743/207/417 +f 2747/209/171 2748/211/171 2749/210/171 +f 2738/212/418 2737/214/418 2750/213/418 +f 2750/213/418 2751/196/418 2738/212/418 +f 2752/210/419 2753/211/419 2754/209/419 +f 2755/215/420 2754/209/420 2753/211/420 +f 2753/211/420 2756/216/420 2755/215/420 +f 2757/217/167 2730/196/167 2729/197/167 +f 2729/197/167 2758/218/167 2757/217/167 +f 2759/219/421 2735/203/421 2738/204/421 +f 2738/204/421 2760/220/421 2759/219/421 +f 2761/209/422 2743/207/422 2746/207/422 +f 2746/207/422 2762/208/422 2761/209/422 +f 2738/212/423 2751/196/423 2763/213/423 +f 2763/213/423 2760/214/423 2738/212/423 +f 2755/215/424 2756/216/424 2748/211/424 +f 2748/211/424 2747/209/424 2755/215/424 +f 2764/221/415 2728/221/416 2727/222/416 +f 2727/222/416 2750/222/415 2764/221/415 +f 2750/222/425 2727/222/425 2730/203/425 +f 2730/203/425 2751/203/425 2750/222/425 +f 2751/203/426 2730/203/426 2757/206/426 +f 2757/206/426 2763/206/426 2751/203/426 +f 2763/206/413 2757/206/413 2758/223/413 +f 2758/223/413 2765/223/413 2763/206/413 +f 2765/224/427 2758/224/427 2729/226/427 +f 2729/226/427 2766/225/427 2765/224/427 +f 2766/225/428 2729/226/428 2728/224/428 +f 2728/224/428 2764/224/428 2766/225/428 +f 2760/214/419 2763/213/419 2765/228/419 +f 2765/228/419 2767/227/419 2760/214/419 +f 2767/229/415 2768/221/415 2759/219/415 +f 2759/219/415 2760/220/415 2767/229/415 +f 2736/206/413 2769/223/413 2770/230/413 +f 2770/230/413 2737/205/413 2736/206/413 +f 2770/227/171 2764/228/171 2750/213/171 +f 2750/213/171 2737/214/171 2770/227/171 +f 2733/201/413 2771/202/412 2772/199/412 +f 2772/199/412 2734/200/413 2733/201/413 +f 2770/231/429 2749/233/429 2748/232/429 +f 2748/232/429 2764/224/429 2770/231/429 +f 2764/224/428 2748/232/428 2756/234/428 +f 2756/234/428 2766/225/428 2764/224/428 +f 2766/225/427 2756/234/427 2753/232/427 +f 2753/232/427 2765/224/427 2766/225/427 +f 2765/224/430 2753/232/430 2752/233/430 +f 2752/233/430 2767/231/430 2765/224/430 +f 2741/200/416 2773/199/415 2774/202/415 +f 2774/202/415 2742/201/416 2741/200/416 +f 2745/208/417 2754/236/417 2755/235/417 +f 2755/235/417 2746/207/417 2745/208/417 +f 2746/207/422 2755/235/422 2747/236/422 +f 2747/236/422 2762/208/422 2746/207/422 +f 2769/236/27 2731/238/27 2734/237/27 +f 2734/237/27 2770/231/27 2769/236/27 +f 2770/231/27 2734/237/27 2772/239/27 +f 2772/239/27 2749/233/27 2770/231/27 +f 2749/210/191 2772/241/191 2771/240/191 +f 2771/240/191 2747/209/191 2749/210/191 +f 2747/236/26 2771/238/26 2733/242/26 +f 2733/242/26 2762/208/26 2747/236/26 +f 2762/208/26 2733/242/26 2732/240/26 +f 2732/240/26 2761/209/26 2762/208/26 +f 2744/209/26 2739/240/26 2742/242/26 +f 2742/242/26 2745/208/26 2744/209/26 +f 2745/208/26 2742/242/26 2774/238/26 +f 2774/238/26 2754/236/26 2745/208/26 +f 2754/209/431 2774/240/431 2773/241/431 +f 2773/241/431 2752/210/431 2754/209/431 +f 2752/233/27 2773/239/27 2741/237/27 +f 2741/237/27 2767/231/27 2752/233/27 +f 2767/231/27 2741/237/27 2740/238/27 +f 2740/238/27 2768/236/27 2767/231/27 +f 2775/243/432 2776/246/432 2777/245/432 +f 2777/245/432 2778/244/432 2775/243/432 +f 2775/247/433 2779/250/433 2780/249/433 +f 2780/249/433 2776/248/433 2775/247/433 +f 2776/246/434 2780/252/434 2781/251/434 +f 2781/251/434 2777/245/434 2776/246/434 +f 2777/248/435 2781/249/435 2782/250/435 +f 2782/250/435 2778/247/435 2777/248/435 +f 2783/195/436 2784/198/436 2785/197/436 +f 2785/197/436 2786/196/436 2783/195/436 +f 2787/199/437 2788/202/437 2789/201/413 +f 2789/201/413 2790/200/413 2787/199/437 +f 2791/203/414 2792/206/414 2793/205/414 +f 2793/205/414 2794/204/414 2791/203/414 +f 2795/202/415 2796/199/415 2797/200/416 +f 2797/200/416 2798/201/416 2795/202/415 +f 2799/207/417 2800/209/417 2801/208/417 +f 2801/208/417 2802/207/417 2799/207/417 +f 2803/209/171 2804/211/171 2805/210/171 +f 2794/212/418 2793/214/418 2806/213/418 +f 2806/213/418 2807/196/418 2794/212/418 +f 2808/210/419 2809/211/419 2810/209/419 +f 2811/215/420 2810/209/420 2809/211/420 +f 2809/211/420 2812/216/420 2811/215/420 +f 2813/217/167 2786/196/167 2785/197/167 +f 2785/197/167 2814/218/167 2813/217/167 +f 2815/219/438 2791/203/421 2794/204/421 +f 2794/204/421 2816/220/438 2815/219/438 +f 2817/209/422 2799/207/422 2802/207/422 +f 2802/207/422 2818/208/422 2817/209/422 +f 2794/212/423 2807/196/423 2819/213/423 +f 2819/213/423 2816/214/423 2794/212/423 +f 2811/215/424 2812/216/424 2804/211/424 +f 2804/211/424 2803/209/424 2811/215/424 +f 2820/221/415 2784/221/415 2783/222/415 +f 2783/222/415 2806/222/415 2820/221/415 +f 2806/222/425 2783/222/425 2786/203/425 +f 2786/203/425 2807/203/425 2806/222/425 +f 2807/203/426 2786/203/426 2813/206/426 +f 2813/206/426 2819/206/426 2807/203/426 +f 2819/206/413 2813/206/413 2814/223/413 +f 2814/223/413 2821/223/413 2819/206/413 +f 2821/224/427 2814/224/427 2785/226/427 +f 2785/226/427 2822/225/427 2821/224/427 +f 2822/225/428 2785/226/428 2784/224/428 +f 2784/224/428 2820/224/428 2822/225/428 +f 2816/214/419 2819/213/419 2821/228/419 +f 2821/228/419 2823/227/419 2816/214/419 +f 2823/229/416 2824/221/416 2815/219/416 +f 2815/219/416 2816/220/416 2823/229/416 +f 2792/206/413 2825/223/413 2826/230/412 +f 2826/230/412 2793/205/412 2792/206/413 +f 2826/227/171 2820/228/171 2806/213/171 +f 2806/213/171 2793/214/171 2826/227/171 +f 2789/201/413 2827/202/412 2828/199/412 +f 2828/199/412 2790/200/413 2789/201/413 +f 2826/231/429 2805/233/429 2804/232/429 +f 2804/232/429 2820/224/429 2826/231/429 +f 2820/224/428 2804/232/428 2812/234/428 +f 2812/234/428 2822/225/428 2820/224/428 +f 2822/225/427 2812/234/427 2809/232/427 +f 2809/232/427 2821/224/427 2822/225/427 +f 2821/224/430 2809/232/430 2808/233/430 +f 2808/233/430 2823/231/430 2821/224/430 +f 2797/200/416 2829/199/415 2830/202/415 +f 2830/202/415 2798/201/416 2797/200/416 +f 2801/208/417 2810/236/417 2811/235/417 +f 2811/235/417 2802/207/417 2801/208/417 +f 2802/207/422 2811/235/422 2803/236/422 +f 2803/236/422 2818/208/422 2802/207/422 +f 2825/236/27 2787/238/27 2790/237/27 +f 2790/237/27 2826/231/27 2825/236/27 +f 2826/231/27 2790/237/27 2828/239/27 +f 2828/239/27 2805/233/27 2826/231/27 +f 2805/210/191 2828/241/191 2827/240/191 +f 2827/240/191 2803/209/191 2805/210/191 +f 2803/236/26 2827/238/26 2789/242/26 +f 2789/242/26 2818/208/26 2803/236/26 +f 2818/208/26 2789/242/26 2788/240/26 +f 2788/240/26 2817/209/26 2818/208/26 +f 2800/209/26 2795/240/26 2798/242/26 +f 2798/242/26 2801/208/26 2800/209/26 +f 2801/208/26 2798/242/26 2830/238/26 +f 2830/238/26 2810/236/26 2801/208/26 +f 2810/209/431 2830/240/431 2829/241/431 +f 2829/241/431 2808/210/431 2810/209/431 +f 2808/233/27 2829/239/27 2797/237/27 +f 2797/237/27 2823/231/27 2808/233/27 +f 2823/231/27 2797/237/27 2796/238/27 +f 2796/238/27 2824/236/27 2823/231/27 +f 2831/243/439 2832/246/439 2833/245/439 +f 2833/245/439 2834/244/439 2831/243/439 +f 2831/247/440 2835/250/440 2836/249/440 +f 2836/249/440 2832/248/440 2831/247/440 +f 2832/246/441 2836/252/441 2837/251/441 +f 2837/251/441 2833/245/441 2832/246/441 +f 2833/248/442 2837/249/442 2838/250/442 +f 2838/250/442 2834/247/442 2833/248/442 +f 2839/195/443 2840/198/443 2841/197/443 +f 2841/197/443 2842/196/443 2839/195/443 +f 2843/199/390 2844/202/390 2845/201/390 +f 2845/201/390 2846/200/390 2843/199/390 +f 2847/203/444 2848/206/444 2849/205/444 +f 2849/205/444 2850/204/444 2847/203/444 +f 2851/202/388 2852/199/388 2853/200/388 +f 2853/200/388 2854/201/388 2851/202/388 +f 2855/207/398 2856/209/398 2857/208/398 +f 2857/208/398 2858/207/398 2855/207/398 +f 2859/209/445 2860/211/445 2861/210/445 +f 2850/212/446 2849/214/446 2862/213/446 +f 2862/213/446 2863/196/446 2850/212/446 +f 2864/210/447 2865/211/447 2866/209/447 +f 2867/215/448 2866/209/448 2865/211/448 +f 2865/211/448 2868/216/448 2867/215/448 +f 2869/217/449 2842/196/450 2841/197/450 +f 2841/197/450 2870/218/449 2869/217/449 +f 2871/219/451 2847/203/451 2850/204/451 +f 2850/204/451 2872/220/451 2871/219/451 +f 2873/209/391 2855/207/391 2858/207/391 +f 2858/207/391 2874/208/391 2873/209/391 +f 2850/212/452 2863/196/452 2875/213/452 +f 2875/213/452 2872/214/452 2850/212/452 +f 2867/215/453 2868/216/453 2860/211/453 +f 2860/211/453 2859/209/453 2867/215/453 +f 2876/221/388 2840/221/388 2839/222/388 +f 2839/222/388 2862/222/388 2876/221/388 +f 2862/222/402 2839/222/402 2842/203/402 +f 2842/203/402 2863/203/402 2862/222/402 +f 2863/203/401 2842/203/401 2869/206/401 +f 2869/206/401 2875/206/401 2863/203/401 +f 2875/206/390 2869/206/390 2870/223/390 +f 2870/223/390 2877/223/390 2875/206/390 +f 2877/224/454 2870/224/454 2841/226/454 +f 2841/226/454 2878/225/454 2877/224/454 +f 2878/225/455 2841/226/455 2840/224/455 +f 2840/224/455 2876/224/455 2878/225/455 +f 2872/214/447 2875/213/447 2877/228/447 +f 2877/228/447 2879/227/447 2872/214/447 +f 2879/229/388 2880/221/388 2871/219/388 +f 2871/219/388 2872/220/388 2879/229/388 +f 2848/206/390 2881/223/390 2882/230/390 +f 2882/230/390 2849/205/390 2848/206/390 +f 2882/227/445 2876/228/445 2862/213/445 +f 2862/213/445 2849/214/445 2882/227/445 +f 2845/201/390 2883/202/390 2884/199/390 +f 2884/199/390 2846/200/390 2845/201/390 +f 2882/231/456 2861/233/456 2860/232/456 +f 2860/232/456 2876/224/456 2882/231/456 +f 2876/224/455 2860/232/455 2868/234/455 +f 2868/234/455 2878/225/455 2876/224/455 +f 2878/225/454 2868/234/454 2865/232/454 +f 2865/232/454 2877/224/454 2878/225/454 +f 2877/224/457 2865/232/457 2864/233/457 +f 2864/233/457 2879/231/457 2877/224/457 +f 2853/200/388 2885/199/388 2886/202/388 +f 2886/202/388 2854/201/388 2853/200/388 +f 2857/208/398 2866/236/398 2867/235/398 +f 2867/235/398 2858/207/398 2857/208/398 +f 2858/207/391 2867/235/391 2859/236/391 +f 2859/236/391 2874/208/391 2858/207/391 +f 2881/236/27 2843/238/27 2846/237/27 +f 2846/237/27 2882/231/27 2881/236/27 +f 2882/231/27 2846/237/27 2884/239/27 +f 2884/239/27 2861/233/27 2882/231/27 +f 2861/210/458 2884/241/458 2883/240/458 +f 2883/240/458 2859/209/458 2861/210/458 +f 2859/236/26 2883/238/26 2845/242/26 +f 2845/242/26 2874/208/26 2859/236/26 +f 2874/208/26 2845/242/26 2844/240/26 +f 2844/240/26 2873/209/26 2874/208/26 +f 2856/209/26 2851/240/26 2854/242/26 +f 2854/242/26 2857/208/26 2856/209/26 +f 2857/208/26 2854/242/26 2886/238/26 +f 2886/238/26 2866/236/26 2857/208/26 +f 2866/209/459 2886/240/459 2885/241/459 +f 2885/241/459 2864/210/459 2866/209/459 +f 2864/233/27 2885/239/27 2853/237/27 +f 2853/237/27 2879/231/27 2864/233/27 +f 2879/231/27 2853/237/27 2852/238/27 +f 2852/238/27 2880/236/27 2879/231/27 +f 2887/243/154 2888/246/154 2889/245/154 +f 2889/245/154 2890/244/154 2887/243/154 +f 2887/247/1 2891/250/1 2892/249/1 +f 2892/249/1 2888/248/1 2887/247/1 +f 2888/246/155 2892/252/155 2893/251/155 +f 2893/251/155 2889/245/155 2888/246/155 +f 2889/248/7 2893/249/7 2894/250/7 +f 2894/250/7 2890/247/7 2889/248/7 +f 2895/243/160 2896/246/160 2897/245/160 +f 2897/245/160 2898/244/160 2895/243/160 +f 2895/247/163 2899/250/163 2900/249/163 +f 2900/249/163 2896/248/163 2895/247/163 +f 2896/246/162 2900/252/162 2901/251/162 +f 2901/251/162 2897/245/162 2896/246/162 +f 2897/248/161 2901/249/161 2902/250/161 +f 2902/250/161 2898/247/161 2897/248/161 +f 2903/243/148 2904/246/148 2905/245/148 +f 2905/245/148 2906/244/148 2903/243/148 +f 2903/247/7 2907/250/7 2908/249/7 +f 2908/249/7 2904/248/7 2903/247/7 +f 2904/246/149 2908/252/149 2909/251/149 +f 2909/251/149 2905/245/149 2904/246/149 +f 2905/248/1 2909/249/1 2910/250/1 +f 2910/250/1 2906/247/1 2905/248/1 +f 2911/243/460 2912/246/460 2913/245/460 +f 2913/245/460 2914/244/460 2911/243/460 +f 2911/247/461 2915/250/461 2916/249/461 +f 2916/249/461 2912/248/461 2911/247/461 +f 2912/246/462 2916/252/462 2917/251/462 +f 2917/251/462 2913/245/462 2912/246/462 +f 2913/248/463 2917/249/463 2918/250/463 +f 2918/250/463 2914/247/463 2913/248/463 +f 2919/243/150 2920/246/150 2921/245/150 +f 2921/245/150 2922/244/150 2919/243/150 +f 2919/247/153 2923/250/153 2924/249/153 +f 2924/249/153 2920/248/153 2919/247/153 +f 2920/246/152 2924/252/152 2925/251/152 +f 2925/251/152 2921/245/152 2920/246/152 +f 2921/248/151 2925/249/151 2926/250/151 +f 2926/250/151 2922/247/151 2921/248/151 +f 2927/195/443 2928/198/443 2929/197/443 +f 2929/197/443 2930/196/443 2927/195/443 +f 2931/199/390 2932/202/390 2933/201/390 +f 2933/201/390 2934/200/390 2931/199/390 +f 2935/203/444 2936/206/444 2937/205/444 +f 2937/205/444 2938/204/444 2935/203/444 +f 2939/202/388 2940/199/388 2941/200/388 +f 2941/200/388 2942/201/388 2939/202/388 +f 2943/207/398 2944/209/398 2945/208/398 +f 2945/208/398 2946/207/398 2943/207/398 +f 2947/209/445 2948/211/445 2949/210/445 +f 2938/212/446 2937/214/446 2950/213/446 +f 2950/213/446 2951/196/446 2938/212/446 +f 2952/210/447 2953/211/447 2954/209/447 +f 2955/215/448 2954/209/448 2953/211/448 +f 2953/211/448 2956/216/448 2955/215/448 +f 2957/217/449 2930/196/450 2929/197/450 +f 2929/197/450 2958/218/449 2957/217/449 +f 2959/219/451 2935/203/451 2938/204/451 +f 2938/204/451 2960/220/451 2959/219/451 +f 2961/209/391 2943/207/391 2946/207/391 +f 2946/207/391 2962/208/391 2961/209/391 +f 2938/212/452 2951/196/452 2963/213/452 +f 2963/213/452 2960/214/452 2938/212/452 +f 2955/215/453 2956/216/453 2948/211/453 +f 2948/211/453 2947/209/453 2955/215/453 +f 2964/221/388 2928/221/388 2927/222/388 +f 2927/222/388 2950/222/388 2964/221/388 +f 2950/222/402 2927/222/402 2930/203/402 +f 2930/203/402 2951/203/402 2950/222/402 +f 2951/203/401 2930/203/401 2957/206/401 +f 2957/206/401 2963/206/401 2951/203/401 +f 2963/206/390 2957/206/390 2958/223/390 +f 2958/223/390 2965/223/390 2963/206/390 +f 2965/224/454 2958/224/454 2929/226/454 +f 2929/226/454 2966/225/454 2965/224/454 +f 2966/225/455 2929/226/455 2928/224/455 +f 2928/224/455 2964/224/455 2966/225/455 +f 2960/214/447 2963/213/447 2965/228/447 +f 2965/228/447 2967/227/447 2960/214/447 +f 2967/229/388 2968/221/388 2959/219/388 +f 2959/219/388 2960/220/388 2967/229/388 +f 2936/206/390 2969/223/390 2970/230/390 +f 2970/230/390 2937/205/390 2936/206/390 +f 2970/227/445 2964/228/445 2950/213/445 +f 2950/213/445 2937/214/445 2970/227/445 +f 2933/201/390 2971/202/390 2972/199/390 +f 2972/199/390 2934/200/390 2933/201/390 +f 2970/231/456 2949/233/456 2948/232/456 +f 2948/232/456 2964/224/456 2970/231/456 +f 2964/224/455 2948/232/455 2956/234/455 +f 2956/234/455 2966/225/455 2964/224/455 +f 2966/225/454 2956/234/454 2953/232/454 +f 2953/232/454 2965/224/454 2966/225/454 +f 2965/224/457 2953/232/457 2952/233/457 +f 2952/233/457 2967/231/457 2965/224/457 +f 2941/200/388 2973/199/388 2974/202/388 +f 2974/202/388 2942/201/388 2941/200/388 +f 2945/208/398 2954/236/398 2955/235/398 +f 2955/235/398 2946/207/398 2945/208/398 +f 2946/207/391 2955/235/391 2947/236/391 +f 2947/236/391 2962/208/391 2946/207/391 +f 2969/236/27 2931/238/27 2934/237/27 +f 2934/237/27 2970/231/27 2969/236/27 +f 2970/231/27 2934/237/27 2972/239/27 +f 2972/239/27 2949/233/27 2970/231/27 +f 2949/210/458 2972/241/458 2971/240/458 +f 2971/240/458 2947/209/458 2949/210/458 +f 2947/236/26 2971/238/26 2933/242/26 +f 2933/242/26 2962/208/26 2947/236/26 +f 2962/208/26 2933/242/26 2932/240/26 +f 2932/240/26 2961/209/26 2962/208/26 +f 2944/209/26 2939/240/26 2942/242/26 +f 2942/242/26 2945/208/26 2944/209/26 +f 2945/208/26 2942/242/26 2974/238/26 +f 2974/238/26 2954/236/26 2945/208/26 +f 2954/209/459 2974/240/459 2973/241/459 +f 2973/241/459 2952/210/459 2954/209/459 +f 2952/233/27 2973/239/27 2941/237/27 +f 2941/237/27 2967/231/27 2952/233/27 +f 2967/231/27 2941/237/27 2940/238/27 +f 2940/238/27 2968/236/27 2967/231/27 +f 2975/195/464 2976/198/464 2977/197/4 +f 2977/197/4 2978/196/4 2975/195/464 +f 2979/199/465 2980/202/465 2981/201/465 +f 2981/201/465 2982/200/465 2979/199/465 +f 2983/203/421 2984/206/421 2985/205/421 +f 2985/205/421 2986/204/421 2983/203/421 +f 2987/202/437 2988/199/437 2989/200/437 +f 2989/200/437 2990/201/437 2987/202/437 +f 2991/207/466 2992/209/466 2993/208/466 +f 2993/208/466 2994/207/466 2991/207/466 +f 2995/209/107 2996/211/107 2997/210/107 +f 2986/212/467 2985/214/467 2998/213/467 +f 2998/213/467 2999/196/467 2986/212/467 +f 3000/210/468 3001/211/468 3002/209/468 +f 3003/215/469 3002/209/469 3001/211/469 +f 3001/211/469 3004/216/469 3003/215/469 +f 3005/217/103 2978/196/103 2977/197/103 +f 2977/197/103 3006/218/103 3005/217/103 +f 3007/219/470 2983/203/414 2986/204/414 +f 2986/204/414 3008/220/414 3007/219/470 +f 3009/209/471 2991/207/471 2994/207/471 +f 2994/207/471 3010/208/471 3009/209/471 +f 2986/212/472 2999/196/472 3011/213/472 +f 3011/213/472 3008/214/472 2986/212/472 +f 3003/215/332 3004/216/332 2996/211/332 +f 2996/211/332 2995/209/332 3003/215/332 +f 3012/221/437 2976/221/437 2975/222/437 +f 2975/222/437 2998/222/437 3012/221/437 +f 2998/222/426 2975/222/426 2978/203/426 +f 2978/203/426 2999/203/426 2998/222/426 +f 2999/203/425 2978/203/425 3005/206/425 +f 3005/206/425 3011/206/425 2999/203/425 +f 3011/206/465 3005/206/465 3006/223/465 +f 3006/223/465 3013/223/465 3011/206/465 +f 3013/224/473 3006/224/473 2977/226/473 +f 2977/226/473 3014/225/473 3013/224/473 +f 3014/225/430 2977/226/430 2976/224/430 +f 2976/224/430 3012/224/430 3014/225/430 +f 3008/214/468 3011/213/468 3013/228/468 +f 3013/228/468 3015/227/468 3008/214/468 +f 3015/229/437 3016/221/437 3007/219/437 +f 3007/219/437 3008/220/437 3015/229/437 +f 2984/206/465 3017/223/465 3018/230/465 +f 3018/230/465 2985/205/465 2984/206/465 +f 3018/227/107 3012/228/107 2998/213/107 +f 2998/213/107 2985/214/107 3018/227/107 +f 2981/201/465 3019/202/465 3020/199/465 +f 3020/199/465 2982/200/465 2981/201/465 +f 3018/231/474 2997/233/474 2996/232/474 +f 2996/232/474 3012/224/474 3018/231/474 +f 3012/224/430 2996/232/430 3004/234/430 +f 3004/234/430 3014/225/430 3012/224/430 +f 3014/225/473 3004/234/473 3001/232/473 +f 3001/232/473 3013/224/473 3014/225/473 +f 3013/224/428 3001/232/428 3000/233/428 +f 3000/233/428 3015/231/428 3013/224/428 +f 2989/200/437 3021/199/437 3022/202/437 +f 3022/202/437 2990/201/437 2989/200/437 +f 2993/208/466 3002/236/466 3003/235/466 +f 3003/235/466 2994/207/466 2993/208/466 +f 2994/207/471 3003/235/471 2995/236/471 +f 2995/236/471 3010/208/471 2994/207/471 +f 3017/236/27 2979/238/27 2982/237/27 +f 2982/237/27 3018/231/27 3017/236/27 +f 3018/231/27 2982/237/27 3020/239/27 +f 3020/239/27 2997/233/27 3018/231/27 +f 2997/210/193 3020/241/193 3019/240/193 +f 3019/240/193 2995/209/193 2997/210/193 +f 2995/236/26 3019/238/26 2981/242/26 +f 2981/242/26 3010/208/26 2995/236/26 +f 3010/208/26 2981/242/26 2980/240/26 +f 2980/240/26 3009/209/26 3010/208/26 +f 2992/209/26 2987/240/26 2990/242/26 +f 2990/242/26 2993/208/26 2992/209/26 +f 2993/208/26 2990/242/26 3022/238/26 +f 3022/238/26 3002/236/26 2993/208/26 +f 3002/209/475 3022/240/475 3021/241/475 +f 3021/241/475 3000/210/475 3002/209/475 +f 3000/233/27 3021/239/27 2989/237/27 +f 2989/237/27 3015/231/27 3000/233/27 +f 3015/231/27 2989/237/27 2988/238/27 +f 2988/238/27 3016/236/27 3015/231/27 +f 3023/243/187 3024/246/187 3025/245/187 +f 3025/245/187 3026/244/187 3023/243/187 +f 3023/247/161 3027/250/161 3028/249/161 +f 3028/249/161 3024/248/161 3023/247/161 +f 3024/246/188 3028/252/189 3029/251/188 +f 3029/251/188 3025/245/188 3024/246/188 +f 3025/248/163 3029/249/163 3030/250/163 +f 3030/250/163 3026/247/163 3025/248/163 +f 3031/195/4 3032/198/4 3033/197/4 +f 3033/197/4 3034/196/4 3031/195/4 +f 3035/199/465 3036/202/465 3037/201/465 +f 3037/201/465 3038/200/465 3035/199/465 +f 3039/203/421 3040/206/421 3041/205/421 +f 3041/205/421 3042/204/421 3039/203/421 +f 3043/202/437 3044/199/437 3045/200/437 +f 3045/200/437 3046/201/437 3043/202/437 +f 3047/207/466 3048/209/466 3049/208/466 +f 3049/208/466 3050/207/466 3047/207/466 +f 3051/209/107 3052/211/107 3053/210/107 +f 3042/212/467 3041/214/467 3054/213/467 +f 3054/213/467 3055/196/467 3042/212/467 +f 3056/210/468 3057/211/468 3058/209/468 +f 3059/215/469 3058/209/469 3057/211/469 +f 3057/211/469 3060/216/469 3059/215/469 +f 3061/217/103 3034/196/103 3033/197/103 +f 3033/197/103 3062/218/103 3061/217/103 +f 3063/219/414 3039/203/414 3042/204/470 +f 3042/204/470 3064/220/414 3063/219/414 +f 3065/209/471 3047/207/471 3050/207/471 +f 3050/207/471 3066/208/471 3065/209/471 +f 3042/212/472 3055/196/472 3067/213/472 +f 3067/213/472 3064/214/472 3042/212/472 +f 3059/215/332 3060/216/332 3052/211/332 +f 3052/211/332 3051/209/332 3059/215/332 +f 3068/221/437 3032/221/437 3031/222/437 +f 3031/222/437 3054/222/437 3068/221/437 +f 3054/222/426 3031/222/426 3034/203/426 +f 3034/203/426 3055/203/426 3054/222/426 +f 3055/203/425 3034/203/425 3061/206/425 +f 3061/206/425 3067/206/425 3055/203/425 +f 3067/206/465 3061/206/465 3062/223/465 +f 3062/223/465 3069/223/465 3067/206/465 +f 3069/224/473 3062/224/473 3033/226/473 +f 3033/226/473 3070/225/473 3069/224/473 +f 3070/225/430 3033/226/430 3032/224/430 +f 3032/224/430 3068/224/430 3070/225/430 +f 3064/214/468 3067/213/468 3069/228/468 +f 3069/228/468 3071/227/468 3064/214/468 +f 3071/229/437 3072/221/437 3063/219/437 +f 3063/219/437 3064/220/437 3071/229/437 +f 3040/206/465 3073/223/465 3074/230/465 +f 3074/230/465 3041/205/465 3040/206/465 +f 3074/227/107 3068/228/107 3054/213/107 +f 3054/213/107 3041/214/107 3074/227/107 +f 3037/201/465 3075/202/465 3076/199/465 +f 3076/199/465 3038/200/465 3037/201/465 +f 3074/231/474 3053/233/474 3052/232/474 +f 3052/232/474 3068/224/474 3074/231/474 +f 3068/224/430 3052/232/430 3060/234/430 +f 3060/234/430 3070/225/430 3068/224/430 +f 3070/225/473 3060/234/473 3057/232/473 +f 3057/232/473 3069/224/473 3070/225/473 +f 3069/224/428 3057/232/428 3056/233/428 +f 3056/233/428 3071/231/428 3069/224/428 +f 3045/200/437 3077/199/437 3078/202/437 +f 3078/202/437 3046/201/437 3045/200/437 +f 3049/208/466 3058/236/466 3059/235/466 +f 3059/235/466 3050/207/466 3049/208/466 +f 3050/207/471 3059/235/471 3051/236/471 +f 3051/236/471 3066/208/471 3050/207/471 +f 3073/236/27 3035/238/27 3038/237/27 +f 3038/237/27 3074/231/27 3073/236/27 +f 3074/231/27 3038/237/27 3076/239/27 +f 3076/239/27 3053/233/27 3074/231/27 +f 3053/210/193 3076/241/193 3075/240/193 +f 3075/240/193 3051/209/193 3053/210/193 +f 3051/236/26 3075/238/26 3037/242/26 +f 3037/242/26 3066/208/26 3051/236/26 +f 3066/208/26 3037/242/26 3036/240/26 +f 3036/240/26 3065/209/26 3066/208/26 +f 3048/209/26 3043/240/26 3046/242/26 +f 3046/242/26 3049/208/26 3048/209/26 +f 3049/208/26 3046/242/26 3078/238/26 +f 3078/238/26 3058/236/26 3049/208/26 +f 3058/209/475 3078/240/475 3077/241/475 +f 3077/241/475 3056/210/475 3058/209/475 +f 3056/233/27 3077/239/27 3045/237/27 +f 3045/237/27 3071/231/27 3056/233/27 +f 3071/231/27 3045/237/27 3044/238/27 +f 3044/238/27 3072/236/27 3071/231/27 +f 3079/243/476 3080/246/476 3081/245/476 +f 3081/245/476 3082/244/476 3079/243/476 +f 3079/247/477 3083/250/477 3084/249/477 +f 3084/249/477 3080/248/477 3079/247/477 +f 3080/246/478 3084/252/478 3085/251/478 +f 3085/251/478 3081/245/478 3080/246/478 +f 3081/248/479 3085/249/479 3086/250/479 +f 3086/250/479 3082/247/479 3081/248/479 +f 3087/195/387 3088/198/387 3089/197/387 +f 3089/197/387 3090/196/387 3087/195/387 +f 3091/199/388 3092/202/388 3093/201/388 +f 3093/201/388 3094/200/388 3091/199/388 +f 3095/203/389 3096/206/389 3097/205/389 +f 3097/205/389 3098/204/389 3095/203/389 +f 3099/202/390 3100/199/390 3101/200/390 +f 3101/200/390 3102/201/390 3099/202/390 +f 3103/207/391 3104/209/391 3105/208/391 +f 3105/208/391 3106/207/391 3103/207/391 +f 3107/209/392 3108/211/392 3109/210/392 +f 3098/212/393 3097/214/393 3110/213/393 +f 3110/213/393 3111/196/393 3098/212/393 +f 3112/210/394 3113/211/394 3114/209/394 +f 3115/215/395 3114/209/395 3113/211/395 +f 3113/211/395 3116/216/395 3115/215/395 +f 3117/217/396 3090/196/396 3089/197/396 +f 3089/197/396 3118/218/396 3117/217/396 +f 3119/219/397 3095/203/397 3098/204/397 +f 3098/204/397 3120/220/397 3119/219/397 +f 3121/209/398 3103/207/398 3106/207/398 +f 3106/207/398 3122/208/398 3121/209/398 +f 3098/212/399 3111/196/399 3123/213/399 +f 3123/213/399 3120/214/399 3098/212/399 +f 3115/215/400 3116/216/400 3108/211/400 +f 3108/211/400 3107/209/400 3115/215/400 +f 3124/221/390 3088/221/390 3087/222/390 +f 3087/222/390 3110/222/390 3124/221/390 +f 3110/222/401 3087/222/401 3090/203/401 +f 3090/203/401 3111/203/401 3110/222/401 +f 3111/203/402 3090/203/402 3117/206/402 +f 3117/206/402 3123/206/402 3111/203/402 +f 3123/206/388 3117/206/388 3118/223/388 +f 3118/223/388 3125/223/388 3123/206/388 +f 3125/224/403 3118/224/403 3089/226/403 +f 3089/226/403 3126/225/403 3125/224/403 +f 3126/225/404 3089/226/404 3088/224/404 +f 3088/224/404 3124/224/404 3126/225/404 +f 3120/214/394 3123/213/394 3125/228/394 +f 3125/228/394 3127/227/394 3120/214/394 +f 3127/229/390 3128/221/390 3119/219/390 +f 3119/219/390 3120/220/390 3127/229/390 +f 3096/206/388 3129/223/388 3130/230/388 +f 3130/230/388 3097/205/388 3096/206/388 +f 3130/227/392 3124/228/392 3110/213/392 +f 3110/213/392 3097/214/392 3130/227/392 +f 3093/201/388 3131/202/388 3132/199/388 +f 3132/199/388 3094/200/388 3093/201/388 +f 3130/231/405 3109/233/405 3108/232/405 +f 3108/232/405 3124/224/405 3130/231/405 +f 3124/224/404 3108/232/404 3116/234/404 +f 3116/234/404 3126/225/404 3124/224/404 +f 3126/225/403 3116/234/403 3113/232/403 +f 3113/232/403 3125/224/403 3126/225/403 +f 3125/224/407 3113/232/407 3112/233/407 +f 3112/233/407 3127/231/407 3125/224/407 +f 3101/200/390 3133/199/390 3134/202/390 +f 3134/202/390 3102/201/390 3101/200/390 +f 3105/208/391 3114/236/391 3115/235/391 +f 3115/235/391 3106/207/391 3105/208/391 +f 3106/207/398 3115/235/398 3107/236/398 +f 3107/236/398 3122/208/398 3106/207/398 +f 3129/236/27 3091/238/27 3094/237/27 +f 3094/237/27 3130/231/27 3129/236/27 +f 3130/231/27 3094/237/27 3132/239/27 +f 3132/239/27 3109/233/27 3130/231/27 +f 3109/210/409 3132/241/409 3131/240/409 +f 3131/240/409 3107/209/409 3109/210/409 +f 3107/236/26 3131/238/26 3093/242/26 +f 3093/242/26 3122/208/26 3107/236/26 +f 3122/208/26 3093/242/26 3092/240/26 +f 3092/240/26 3121/209/26 3122/208/26 +f 3104/209/26 3099/240/26 3102/242/26 +f 3102/242/26 3105/208/26 3104/209/26 +f 3105/208/26 3102/242/26 3134/238/26 +f 3134/238/26 3114/236/26 3105/208/26 +f 3114/209/410 3134/240/410 3133/241/410 +f 3133/241/410 3112/210/410 3114/209/410 +f 3112/233/27 3133/239/27 3101/237/27 +f 3101/237/27 3127/231/27 3112/233/27 +f 3127/231/27 3101/237/27 3100/238/27 +f 3100/238/27 3128/236/27 3127/231/27 +f 3135/243/180 3136/246/180 3137/245/180 +f 3137/245/180 3138/244/180 3135/243/180 +f 3135/247/151 3139/250/151 3140/249/151 +f 3140/249/151 3136/248/151 3135/247/151 +f 3136/246/181 3140/252/181 3141/251/182 +f 3141/251/182 3137/245/181 3136/246/181 +f 3137/248/153 3141/249/153 3142/250/153 +f 3142/250/153 3138/247/153 3137/248/153 +f 3143/253/24 3144/256/24 3145/255/24 +f 3145/255/24 3146/254/24 3143/253/24 +f 3147/257/23 3148/258/23 3144/256/23 +f 3144/256/23 3143/253/23 3147/257/23 +f 3149/259/191 3150/260/22 3148/258/191 +f 3148/258/191 3147/257/191 3149/259/191 +f 3151/261/21 3152/264/21 3150/263/21 +f 3150/263/21 3149/262/21 3151/261/21 +f 3153/265/20 3154/266/20 3152/264/20 +f 3152/264/20 3151/261/20 3153/265/20 +f 3155/267/19 3156/268/19 3154/266/19 +f 3154/266/19 3153/265/19 3155/267/19 +f 3157/269/194 3158/270/194 3156/268/18 +f 3156/268/18 3155/267/18 3157/269/194 +f 3159/271/17 3160/272/17 3158/270/17 +f 3158/270/17 3157/269/17 3159/271/17 +f 3161/273/16 3162/274/16 3160/272/16 +f 3160/272/16 3159/271/16 3161/273/16 +f 3163/275/118 3164/276/118 3162/274/15 +f 3162/274/15 3161/273/118 3163/275/118 +f 3165/277/14 3166/278/14 3164/276/14 +f 3164/276/14 3163/275/14 3165/277/14 +f 3146/254/13 3145/255/13 3166/278/192 +f 3166/278/192 3165/277/192 3146/254/13 +f 3144/279/27 3167/282/27 3168/281/27 +f 3168/281/27 3145/280/27 3144/279/27 +f 3169/283/27 3170/284/27 3171/282/27 +f 3171/282/27 3172/279/27 3169/283/27 +f 3150/285/27 3173/285/27 3174/284/27 +f 3174/284/27 3148/283/27 3150/285/27 +f 3175/286/27 3176/287/27 3177/285/27 +f 3177/285/27 3178/285/27 3175/286/27 +f 3154/288/27 3179/289/27 3180/287/27 +f 3180/287/27 3152/286/27 3154/288/27 +f 3181/290/27 3182/291/27 3183/289/27 +f 3183/289/27 3184/288/27 3181/290/27 +f 3158/292/27 3185/293/27 3186/291/27 +f 3186/291/27 3156/290/27 3158/292/27 +f 3187/294/27 3188/295/27 3189/293/27 +f 3189/293/27 3190/292/27 3187/294/27 +f 3162/296/27 3191/297/27 3192/295/27 +f 3192/295/27 3160/294/27 3162/296/27 +f 3193/298/27 3194/299/27 3195/297/27 +f 3195/297/27 3196/296/27 3193/298/27 +f 3166/300/27 3197/300/27 3198/299/27 +f 3198/299/27 3164/298/27 3166/300/27 +f 3199/280/27 3200/281/27 3201/300/27 +f 3201/300/27 3202/300/27 3199/280/27 +f 3167/301/18 3203/304/18 3204/303/18 +f 3204/303/18 3168/302/18 3167/301/18 +f 3174/305/17 3205/306/17 3203/304/17 +f 3203/304/17 3167/301/17 3174/305/17 +f 3173/307/16 3206/308/16 3205/306/16 +f 3205/306/16 3174/305/16 3173/307/16 +f 3180/309/15 3207/310/15 3206/308/15 +f 3206/308/15 3173/307/15 3180/309/15 +f 3179/311/14 3208/312/14 3207/310/14 +f 3207/310/14 3180/309/14 3179/311/14 +f 3186/313/13 3209/314/13 3208/312/13 +f 3208/312/13 3179/311/13 3186/313/13 +f 3185/315/25 3210/316/25 3209/314/24 +f 3209/314/24 3186/313/24 3185/315/25 +f 3192/317/23 3211/318/23 3210/316/23 +f 3210/316/23 3185/315/23 3192/317/23 +f 3191/319/22 3212/320/22 3211/318/22 +f 3211/318/22 3192/317/22 3191/319/22 +f 3198/321/21 3213/324/21 3212/323/178 +f 3212/323/178 3191/322/21 3198/321/21 +f 3197/325/20 3214/326/20 3213/324/20 +f 3213/324/20 3198/321/20 3197/325/20 +f 3168/302/19 3204/303/19 3214/326/190 +f 3214/326/190 3197/325/190 3168/302/19 +f 3203/327/27 3215/329/27 3204/328/27 +f 3205/330/27 3215/329/27 3203/327/27 +f 3206/331/27 3215/329/27 3205/330/27 +f 3207/332/27 3215/329/27 3206/331/27 +f 3208/333/27 3215/329/27 3207/332/27 +f 3209/334/27 3215/329/27 3208/333/27 +f 3210/335/27 3215/329/27 3209/334/27 +f 3211/336/27 3215/329/27 3210/335/27 +f 3212/337/27 3215/329/27 3211/336/27 +f 3213/338/27 3215/329/27 3212/337/27 +f 3214/339/27 3215/329/27 3213/338/27 +f 3204/328/27 3215/329/27 3214/339/27 +f 3148/258/23 3169/341/23 3172/340/23 +f 3172/340/23 3144/256/23 3148/258/23 +f 3144/279/153 3172/279/153 3171/282/153 +f 3171/282/153 3167/282/153 3144/279/153 +f 3167/301/17 3171/343/17 3170/342/17 +f 3170/342/17 3174/305/17 3167/301/17 +f 3174/284/196 3170/284/196 3169/283/196 +f 3169/283/196 3148/283/196 3174/284/196 +f 3152/264/21 3175/345/21 3178/344/178 +f 3178/344/178 3150/263/21 3152/264/21 +f 3150/285/1 3178/285/1 3177/285/1 +f 3177/285/1 3173/285/1 3150/285/1 +f 3173/307/15 3177/347/15 3176/346/15 +f 3176/346/15 3180/309/15 3173/307/15 +f 3180/287/195 3176/287/195 3175/286/195 +f 3175/286/195 3152/286/195 3180/287/195 +f 3156/268/19 3181/349/19 3184/348/19 +f 3184/348/19 3154/266/19 3156/268/19 +f 3154/288/161 3184/288/161 3183/289/161 +f 3183/289/161 3179/289/161 3154/288/161 +f 3179/311/13 3183/351/13 3182/350/13 +f 3182/350/13 3186/313/13 3179/311/13 +f 3186/291/4 3182/291/4 3181/290/4 +f 3181/290/4 3156/290/4 3186/291/4 +f 3160/272/17 3187/353/17 3190/352/17 +f 3190/352/17 3158/270/17 3160/272/17 +f 3158/292/151 3190/292/151 3189/293/151 +f 3189/293/151 3185/293/151 3158/292/151 +f 3185/315/23 3189/355/23 3188/354/23 +f 3188/354/23 3192/317/23 3185/315/23 +f 3192/295/198 3188/295/198 3187/294/198 +f 3187/294/198 3160/294/198 3192/295/198 +f 3164/276/118 3193/357/15 3196/356/15 +f 3196/356/15 3162/274/15 3164/276/118 +f 3162/296/7 3196/296/7 3195/297/7 +f 3195/297/7 3191/297/7 3162/296/7 +f 3191/322/21 3195/359/21 3194/358/21 +f 3194/358/21 3198/321/21 3191/322/21 +f 3198/299/197 3194/299/197 3193/298/197 +f 3193/298/197 3164/298/197 3198/299/197 +f 3145/255/13 3199/361/13 3202/360/13 +f 3202/360/13 3166/278/192 3145/255/13 +f 3166/300/163 3202/300/163 3201/300/163 +f 3201/300/163 3197/300/163 3166/300/163 +f 3197/325/190 3201/363/190 3200/362/19 +f 3200/362/19 3168/302/19 3197/325/190 +f 3168/281/10 3200/281/10 3199/280/10 +f 3199/280/10 3145/280/10 3168/281/10 +f 3216/1/7 3217/2/8 3218/3/8 +f 3218/3/8 3219/4/7 3216/1/7 +f 3217/2/8 3220/5/9 3221/6/9 +f 3221/6/9 3218/3/8 3217/2/8 +f 3220/5/9 3222/7/10 3223/8/10 +f 3223/8/10 3221/6/9 3220/5/9 +f 3222/9/10 3224/10/11 3225/11/11 +f 3225/11/11 3223/12/10 3222/9/10 +f 3224/10/11 3226/13/12 3227/14/12 +f 3227/14/12 3225/11/11 3224/10/11 +f 3226/13/12 3228/15/1 3229/16/1 +f 3229/16/1 3227/14/12 3226/13/12 +f 3228/15/1 3230/17/2 3231/18/2 +f 3231/18/2 3229/16/1 3228/15/1 +f 3230/17/2 3232/19/3 3233/20/3 +f 3233/20/3 3231/18/2 3230/17/2 +f 3232/19/3 3234/21/4 3235/22/4 +f 3235/22/4 3233/20/3 3232/19/3 +f 3234/21/4 3236/23/5 3237/24/5 +f 3237/24/5 3235/22/4 3234/21/4 +f 3236/23/5 3238/25/6 3239/26/6 +f 3239/26/6 3237/24/5 3236/23/5 +f 3238/25/6 3216/1/7 3219/4/7 +f 3219/4/7 3239/26/6 3238/25/6 +f 3240/27/19 3241/28/19 3242/29/19 +f 3242/29/19 3243/30/19 3240/27/19 +f 3244/31/20 3240/27/20 3243/30/20 +f 3243/30/20 3245/32/20 3244/31/20 +f 3246/33/21 3244/31/21 3245/32/21 +f 3245/32/21 3247/34/21 3246/33/21 +f 3248/35/22 3246/36/22 3247/37/22 +f 3247/37/22 3249/38/22 3248/35/22 +f 3250/39/23 3248/35/23 3249/38/23 +f 3249/38/23 3251/40/23 3250/39/23 +f 3252/41/24 3250/39/24 3251/40/24 +f 3251/40/24 3253/42/24 3252/41/24 +f 3254/43/13 3252/41/13 3253/42/13 +f 3253/42/13 3255/44/13 3254/43/13 +f 3256/45/14 3254/43/14 3255/44/14 +f 3255/44/14 3257/46/14 3256/45/14 +f 3258/47/15 3256/45/15 3257/46/15 +f 3257/46/15 3259/48/15 3258/47/15 +f 3260/49/16 3258/47/16 3259/48/16 +f 3259/48/16 3261/50/16 3260/49/16 +f 3262/51/17 3260/49/17 3261/50/17 +f 3261/50/17 3263/52/17 3262/51/17 +f 3241/28/18 3262/51/194 3263/52/18 +f 3263/52/18 3242/29/18 3241/28/18 +f 3217/53/26 3216/54/26 3241/54/26 +f 3241/54/26 3240/53/26 3217/53/26 +f 3216/54/26 3238/55/26 3262/55/26 +f 3262/55/26 3241/54/26 3216/54/26 +f 3238/55/26 3236/56/26 3260/56/26 +f 3260/56/26 3262/55/26 3238/55/26 +f 3236/56/26 3234/57/26 3258/57/26 +f 3258/57/26 3260/56/26 3236/56/26 +f 3234/57/26 3232/58/26 3256/59/26 +f 3256/59/26 3258/57/26 3234/57/26 +f 3232/58/26 3230/60/26 3254/61/26 +f 3254/61/26 3256/59/26 3232/58/26 +f 3230/60/26 3228/62/26 3252/62/26 +f 3252/62/26 3254/61/26 3230/60/26 +f 3228/62/26 3226/63/26 3250/64/26 +f 3250/64/26 3252/62/26 3228/62/26 +f 3226/63/26 3224/65/26 3248/66/26 +f 3248/66/26 3250/64/26 3226/63/26 +f 3224/65/26 3222/67/26 3246/67/26 +f 3246/67/26 3248/66/26 3224/65/26 +f 3222/67/26 3220/68/26 3244/68/26 +f 3244/68/26 3246/67/26 3222/67/26 +f 3220/68/26 3217/53/26 3240/53/26 +f 3240/53/26 3244/68/26 3220/68/26 +f 3264/54/27 3265/53/27 3243/53/27 +f 3243/53/27 3242/54/27 3264/54/27 +f 3265/53/27 3266/68/27 3245/68/27 +f 3245/68/27 3243/53/27 3265/53/27 +f 3266/68/27 3267/67/27 3247/67/27 +f 3247/67/27 3245/68/27 3266/68/27 +f 3267/67/27 3268/65/27 3249/66/27 +f 3249/66/27 3247/67/27 3267/67/27 +f 3268/65/27 3269/63/27 3251/64/27 +f 3251/64/27 3249/66/27 3268/65/27 +f 3269/63/27 3270/62/27 3253/62/27 +f 3253/62/27 3251/64/27 3269/63/27 +f 3270/62/27 3271/60/27 3255/61/27 +f 3255/61/27 3253/62/27 3270/62/27 +f 3271/60/27 3272/58/27 3257/59/27 +f 3257/59/27 3255/61/27 3271/60/27 +f 3272/58/27 3273/57/27 3259/57/27 +f 3259/57/27 3257/59/27 3272/58/27 +f 3273/57/27 3274/56/27 3261/56/27 +f 3261/56/27 3259/57/27 3273/57/27 +f 3274/56/27 3275/55/27 3263/55/27 +f 3263/55/27 3261/56/27 3274/56/27 +f 3275/55/27 3264/54/27 3242/54/27 +f 3242/54/27 3263/55/27 3275/55/27 +f 3264/69/7 3276/70/7 3277/71/8 +f 3277/71/8 3265/72/8 3264/69/7 +f 3265/72/8 3277/71/8 3278/73/20 +f 3278/73/20 3266/74/20 3265/72/8 +f 3266/74/21 3278/73/21 3279/75/21 +f 3279/75/21 3267/76/21 3266/74/21 +f 3267/76/22 3279/75/22 3280/77/11 +f 3280/77/11 3268/78/11 3267/76/22 +f 3268/78/11 3280/77/11 3281/79/12 +f 3281/79/12 3269/80/12 3268/78/11 +f 3269/81/12 3281/82/12 3282/83/1 +f 3282/83/1 3270/84/1 3269/81/12 +f 3270/84/1 3282/83/1 3283/85/2 +f 3283/85/2 3271/86/2 3270/84/1 +f 3271/86/2 3283/85/2 3284/87/3 +f 3284/87/3 3272/88/3 3271/86/2 +f 3272/88/3 3284/87/3 3285/89/4 +f 3285/89/4 3273/90/4 3272/88/3 +f 3273/90/4 3285/89/4 3286/91/5 +f 3286/91/5 3274/92/5 3273/90/4 +f 3274/92/5 3286/91/5 3287/93/6 +f 3287/93/6 3275/94/6 3274/92/5 +f 3275/94/6 3287/93/6 3276/70/7 +f 3276/70/7 3264/69/7 3275/94/6 +f 3288/95/26 3289/96/26 3290/96/26 +f 3290/96/26 3291/95/26 3288/95/26 +f 3292/97/26 3288/95/26 3291/95/26 +f 3291/95/26 3293/97/26 3292/97/26 +f 3294/67/26 3292/97/26 3293/97/26 +f 3293/97/26 3295/98/26 3294/67/26 +f 3296/99/26 3294/67/26 3295/98/26 +f 3295/98/26 3297/99/26 3296/99/26 +f 3298/100/26 3296/99/26 3297/99/26 +f 3297/99/26 3299/100/26 3298/100/26 +f 3300/101/26 3298/100/26 3299/100/26 +f 3299/100/26 3301/101/26 3300/101/26 +f 3302/61/26 3300/101/26 3301/101/26 +f 3301/101/26 3303/61/26 3302/61/26 +f 3304/59/26 3302/61/26 3303/61/26 +f 3303/61/26 3305/102/26 3304/59/26 +f 3306/103/26 3304/59/26 3305/102/26 +f 3305/102/26 3307/103/26 3306/103/26 +f 3308/104/26 3306/103/26 3307/103/26 +f 3307/103/26 3309/105/26 3308/104/26 +f 3310/106/26 3308/104/26 3309/105/26 +f 3309/105/26 3311/106/26 3310/106/26 +f 3289/96/26 3310/106/26 3311/106/26 +f 3311/106/26 3290/96/26 3289/96/26 +f 3291/107/34 3290/108/34 3312/109/34 +f 3312/109/34 3313/110/34 3291/107/34 +f 3293/111/35 3291/107/35 3313/110/35 +f 3313/110/35 3314/112/35 3293/111/35 +f 3295/113/36 3293/111/36 3314/112/36 +f 3314/112/36 3315/114/36 3295/113/36 +f 3297/115/37 3295/113/37 3315/114/37 +f 3315/114/37 3316/116/37 3297/115/37 +f 3299/117/38 3297/115/38 3316/116/38 +f 3316/116/38 3317/118/38 3299/117/38 +f 3301/119/39 3299/117/39 3317/118/39 +f 3317/118/39 3318/120/39 3301/119/39 +f 3303/121/28 3301/119/28 3318/120/28 +f 3318/120/28 3319/122/28 3303/121/28 +f 3305/123/29 3303/121/29 3319/122/29 +f 3319/122/29 3320/124/29 3305/123/29 +f 3307/125/30 3305/123/30 3320/124/30 +f 3320/124/30 3321/126/30 3307/125/30 +f 3309/127/31 3307/128/31 3321/129/31 +f 3321/129/31 3322/130/31 3309/127/31 +f 3311/131/32 3309/127/32 3322/130/32 +f 3322/130/32 3323/132/32 3311/131/32 +f 3290/108/33 3311/131/33 3323/132/33 +f 3323/132/33 3312/109/33 3290/108/33 +f 3313/110/48 3312/109/48 3324/133/48 +f 3324/133/48 3325/134/48 3313/110/48 +f 3314/112/49 3313/110/49 3325/134/49 +f 3325/134/49 3326/135/49 3314/112/49 +f 3315/114/50 3314/112/50 3326/135/50 +f 3326/135/50 3327/136/50 3315/114/50 +f 3316/116/51 3315/114/51 3327/136/52 +f 3327/136/52 3328/137/51 3316/116/51 +f 3317/118/53 3316/116/53 3328/137/53 +f 3328/137/53 3329/138/53 3317/118/53 +f 3318/120/54 3317/118/54 3329/138/54 +f 3329/138/54 3330/139/54 3318/120/54 +f 3319/122/386 3318/120/40 3330/139/40 +f 3330/139/40 3331/140/40 3319/122/386 +f 3320/124/41 3319/122/41 3331/140/41 +f 3331/140/41 3332/141/41 3320/124/41 +f 3321/126/42 3320/124/42 3332/141/42 +f 3332/141/42 3333/142/43 3321/126/42 +f 3322/130/44 3321/129/44 3333/143/44 +f 3333/143/44 3334/144/44 3322/130/44 +f 3323/132/45 3322/130/45 3334/144/45 +f 3334/144/45 3335/145/45 3323/132/45 +f 3312/109/46 3323/132/385 3335/145/46 +f 3335/145/46 3324/133/46 3312/109/46 +f 3336/146/64 3337/147/64 3277/148/64 +f 3277/148/64 3276/149/64 3336/146/64 +f 3337/147/66 3338/150/66 3278/151/65 +f 3278/151/65 3277/148/65 3337/147/66 +f 3338/152/67 3339/153/67 3279/154/67 +f 3279/154/67 3278/155/67 3338/152/67 +f 3339/153/68 3340/142/68 3280/156/68 +f 3280/156/68 3279/154/68 3339/153/68 +f 3340/142/70 3341/157/70 3281/158/69 +f 3281/158/69 3280/156/69 3340/142/70 +f 3341/157/71 3342/159/71 3282/160/71 +f 3282/160/71 3281/158/71 3341/157/71 +f 3342/159/56 3343/161/56 3283/162/56 +f 3283/162/56 3282/160/56 3342/159/56 +f 3343/161/57 3344/163/57 3284/164/58 +f 3284/164/58 3283/162/58 3343/161/57 +f 3344/163/59 3345/165/59 3285/166/59 +f 3285/166/59 3284/164/59 3344/163/59 +f 3345/165/60 3346/167/60 3286/168/60 +f 3286/168/60 3285/166/60 3345/165/60 +f 3346/167/61 3347/169/61 3287/170/61 +f 3287/170/61 3286/168/62 3346/167/61 +f 3347/169/63 3336/146/63 3276/149/63 +f 3276/149/63 3287/170/63 3347/169/63 +f 3289/171/7 3288/172/8 3337/173/8 +f 3337/173/8 3336/174/7 3289/171/7 +f 3288/172/8 3292/175/9 3338/176/9 +f 3338/176/9 3337/173/8 3288/172/8 +f 3292/177/9 3294/178/10 3339/179/10 +f 3339/179/10 3338/180/9 3292/177/9 +f 3294/178/10 3296/86/11 3340/181/11 +f 3340/181/11 3339/179/10 3294/178/10 +f 3296/86/11 3298/182/12 3341/183/12 +f 3341/183/12 3340/181/11 3296/86/11 +f 3298/182/12 3300/184/1 3342/185/1 +f 3342/185/1 3341/183/12 3298/182/12 +f 3300/184/1 3302/186/2 3343/187/2 +f 3343/187/2 3342/185/1 3300/184/1 +f 3302/186/2 3304/188/3 3344/189/3 +f 3344/189/3 3343/187/2 3302/186/2 +f 3304/188/3 3306/190/4 3345/191/4 +f 3345/191/4 3344/189/3 3304/188/3 +f 3306/190/4 3308/76/5 3346/192/5 +f 3346/192/5 3345/191/4 3306/190/4 +f 3308/76/5 3310/193/6 3347/194/6 +f 3347/194/6 3346/192/5 3308/76/5 +f 3310/193/6 3289/171/7 3336/174/7 +f 3336/174/7 3347/194/6 3310/193/6 +f 3348/195/131 3349/196/131 3350/197/131 +f 3350/197/131 3351/198/131 3348/195/131 +f 3352/199/75 3353/200/75 3354/201/75 +f 3354/201/75 3355/202/75 3352/199/75 +f 3356/203/132 3357/204/132 3358/205/132 +f 3358/205/132 3359/206/132 3356/203/132 +f 3360/202/73 3361/201/73 3362/200/73 +f 3362/200/73 3363/199/73 3360/202/73 +f 3364/207/83 3365/207/83 3366/208/83 +f 3366/208/83 3367/209/83 3364/207/83 +f 3368/209/133 3369/210/133 3370/211/133 +f 3357/212/134 3371/196/134 3372/213/134 +f 3372/213/134 3358/214/134 3357/212/134 +f 3373/210/135 3374/209/135 3375/211/135 +f 3376/215/136 3377/216/136 3375/211/136 +f 3375/211/136 3374/209/136 3376/215/136 +f 3378/217/137 3379/218/137 3350/197/137 +f 3350/197/137 3349/196/137 3378/217/137 +f 3380/219/139 3381/220/139 3357/204/139 +f 3357/204/139 3356/203/139 3380/219/139 +f 3382/209/76 3383/208/76 3365/207/76 +f 3365/207/76 3364/207/76 3382/209/76 +f 3357/212/140 3381/214/140 3384/213/140 +f 3384/213/140 3371/196/140 3357/212/140 +f 3376/215/141 3368/209/141 3370/211/141 +f 3370/211/141 3377/216/141 3376/215/141 +f 3385/221/73 3372/222/73 3348/222/73 +f 3348/222/73 3351/221/73 3385/221/73 +f 3372/222/87 3371/203/87 3349/203/87 +f 3349/203/87 3348/222/87 3372/222/87 +f 3371/203/86 3384/206/86 3378/206/86 +f 3378/206/86 3349/203/86 3371/203/86 +f 3384/206/75 3386/223/75 3379/223/75 +f 3379/223/75 3378/206/75 3384/206/75 +f 3386/224/142 3387/225/142 3350/226/142 +f 3350/226/142 3379/224/142 3386/224/142 +f 3387/225/143 3385/224/143 3351/224/143 +f 3351/224/143 3350/226/143 3387/225/143 +f 3381/214/135 3388/227/135 3386/228/135 +f 3386/228/135 3384/213/135 3381/214/135 +f 3388/229/73 3381/220/73 3380/219/73 +f 3380/219/73 3389/221/73 3388/229/73 +f 3359/206/75 3358/205/75 3390/230/75 +f 3390/230/75 3391/223/75 3359/206/75 +f 3390/227/133 3358/214/133 3372/213/133 +f 3372/213/133 3385/228/133 3390/227/133 +f 3354/201/75 3353/200/75 3392/199/75 +f 3392/199/75 3393/202/75 3354/201/75 +f 3390/231/144 3385/224/144 3370/232/144 +f 3370/232/144 3369/233/144 3390/231/144 +f 3385/224/143 3387/225/143 3377/234/143 +f 3377/234/143 3370/232/143 3385/224/143 +f 3387/225/142 3386/224/142 3375/232/142 +f 3375/232/142 3377/234/142 3387/225/142 +f 3386/224/145 3388/231/145 3373/233/145 +f 3373/233/145 3375/232/145 3386/224/145 +f 3362/200/73 3361/201/73 3394/202/73 +f 3394/202/73 3395/199/73 3362/200/73 +f 3366/208/83 3365/207/83 3376/235/83 +f 3376/235/83 3374/236/83 3366/208/83 +f 3365/207/76 3383/208/76 3368/236/76 +f 3368/236/76 3376/235/76 3365/207/76 +f 3391/236/27 3390/231/27 3353/237/27 +f 3353/237/27 3352/238/27 3391/236/27 +f 3390/231/27 3369/233/27 3392/239/27 +f 3392/239/27 3353/237/27 3390/231/27 +f 3369/210/480 3368/209/480 3393/240/480 +f 3393/240/480 3392/241/480 3369/210/480 +f 3368/236/26 3383/208/26 3354/242/26 +f 3354/242/26 3393/238/26 3368/236/26 +f 3383/208/26 3382/209/26 3355/240/26 +f 3355/240/26 3354/242/26 3383/208/26 +f 3367/209/26 3366/208/26 3361/242/26 +f 3361/242/26 3360/240/26 3367/209/26 +f 3366/208/26 3374/236/26 3394/238/26 +f 3394/238/26 3361/242/26 3366/208/26 +f 3374/209/147 3373/210/147 3395/241/147 +f 3395/241/147 3394/240/147 3374/209/147 +f 3373/233/27 3388/231/27 3362/237/27 +f 3362/237/27 3395/239/27 3373/233/27 +f 3388/231/27 3389/236/27 3363/238/27 +f 3363/238/27 3362/237/27 3388/231/27 +f 3396/195/10 3397/196/10 3398/197/10 +f 3398/197/10 3399/198/10 3396/195/10 +f 3400/199/101 3401/200/100 3402/201/100 +f 3402/201/100 3403/202/101 3400/199/101 +f 3404/203/108 3405/204/108 3406/205/108 +f 3406/205/108 3407/206/108 3404/203/108 +f 3408/202/98 3409/201/97 3410/200/97 +f 3410/200/97 3411/199/98 3408/202/98 +f 3412/207/166 3413/207/166 3414/208/166 +f 3414/208/166 3415/209/166 3412/207/166 +f 3416/209/167 3417/210/167 3418/211/167 +f 3405/212/168 3419/196/168 3420/213/168 +f 3420/213/168 3406/214/168 3405/212/168 +f 3421/210/169 3422/209/169 3423/211/169 +f 3424/215/170 3425/216/170 3423/211/170 +f 3423/211/170 3422/209/170 3424/215/170 +f 3426/217/171 3427/218/171 3398/197/171 +f 3398/197/171 3397/196/171 3426/217/171 +f 3428/219/99 3429/220/99 3405/204/99 +f 3405/204/99 3404/203/99 3428/219/99 +f 3430/209/173 3431/208/173 3413/207/173 +f 3413/207/173 3412/207/173 3430/209/173 +f 3405/212/174 3429/214/174 3432/213/174 +f 3432/213/174 3419/196/174 3405/212/174 +f 3424/215/175 3416/209/175 3418/211/175 +f 3418/211/175 3425/216/175 3424/215/175 +f 3433/221/98 3420/222/98 3396/222/97 +f 3396/222/97 3399/221/97 3433/221/98 +f 3420/222/113 3419/203/113 3397/203/113 +f 3397/203/113 3396/222/113 3420/222/113 +f 3419/203/112 3432/206/112 3426/206/112 +f 3426/206/112 3397/203/112 3419/203/112 +f 3432/206/100 3434/223/100 3427/223/100 +f 3427/223/100 3426/206/100 3432/206/100 +f 3434/224/176 3435/225/176 3398/226/176 +f 3398/226/176 3427/224/176 3434/224/176 +f 3435/225/117 3433/224/117 3399/224/117 +f 3399/224/117 3398/226/117 3435/225/117 +f 3429/214/169 3436/227/169 3434/228/169 +f 3434/228/169 3432/213/169 3429/214/169 +f 3436/229/98 3429/220/98 3428/219/98 +f 3428/219/98 3437/221/98 3436/229/98 +f 3407/206/100 3406/205/100 3438/230/100 +f 3438/230/100 3439/223/100 3407/206/100 +f 3438/227/167 3406/214/167 3420/213/167 +f 3420/213/167 3433/228/167 3438/227/167 +f 3402/201/100 3401/200/100 3440/199/101 +f 3440/199/101 3441/202/101 3402/201/100 +f 3438/231/481 3433/224/481 3418/232/481 +f 3418/232/481 3417/233/481 3438/231/481 +f 3433/224/117 3435/225/117 3425/234/117 +f 3425/234/117 3418/232/117 3433/224/117 +f 3435/225/176 3434/224/176 3423/232/176 +f 3423/232/176 3425/234/176 3435/225/176 +f 3434/224/115 3436/231/115 3421/233/115 +f 3421/233/115 3423/232/115 3434/224/115 +f 3410/200/97 3409/201/97 3442/202/98 +f 3442/202/98 3443/199/98 3410/200/97 +f 3414/208/166 3413/207/166 3424/235/166 +f 3424/235/166 3422/236/166 3414/208/166 +f 3413/207/173 3431/208/173 3416/236/173 +f 3416/236/173 3424/235/173 3413/207/173 +f 3439/236/27 3438/231/27 3401/237/27 +f 3401/237/27 3400/238/27 3439/236/27 +f 3438/231/27 3417/233/27 3440/239/27 +f 3440/239/27 3401/237/27 3438/231/27 +f 3417/210/178 3416/209/178 3441/240/178 +f 3441/240/178 3440/241/178 3417/210/178 +f 3416/236/26 3431/208/26 3402/242/26 +f 3402/242/26 3441/238/26 3416/236/26 +f 3431/208/26 3430/209/26 3403/240/26 +f 3403/240/26 3402/242/26 3431/208/26 +f 3415/209/26 3414/208/26 3409/242/26 +f 3409/242/26 3408/240/26 3415/209/26 +f 3414/208/26 3422/236/26 3442/238/26 +f 3442/238/26 3409/242/26 3414/208/26 +f 3422/209/179 3421/210/179 3443/241/179 +f 3443/241/179 3442/240/179 3422/209/179 +f 3421/233/27 3436/231/27 3410/237/27 +f 3410/237/27 3443/239/27 3421/233/27 +f 3436/231/27 3437/236/27 3411/238/27 +f 3411/238/27 3410/237/27 3436/231/27 +f 3444/243/183 3445/244/183 3446/245/183 +f 3446/245/183 3447/246/183 3444/243/183 +f 3444/247/184 3447/248/184 3448/249/184 +f 3448/249/184 3449/250/184 3444/247/184 +f 3447/246/185 3446/245/185 3450/251/185 +f 3450/251/185 3448/252/185 3447/246/185 +f 3446/248/186 3445/247/186 3451/250/186 +f 3451/250/186 3450/249/186 3446/248/186 +f 3452/195/164 3453/196/164 3454/197/164 +f 3454/197/164 3455/198/164 3452/195/164 +f 3456/199/101 3457/200/100 3458/201/100 +f 3458/201/100 3459/202/101 3456/199/101 +f 3460/203/108 3461/204/108 3462/205/108 +f 3462/205/108 3463/206/108 3460/203/108 +f 3464/202/98 3465/201/97 3466/200/97 +f 3466/200/97 3467/199/98 3464/202/98 +f 3468/207/166 3469/207/166 3470/208/166 +f 3470/208/166 3471/209/166 3468/207/166 +f 3472/209/167 3473/210/167 3474/211/167 +f 3461/212/168 3475/196/168 3476/213/168 +f 3476/213/168 3462/214/168 3461/212/168 +f 3477/210/169 3478/209/169 3479/211/169 +f 3480/215/170 3481/216/170 3479/211/170 +f 3479/211/170 3478/209/170 3480/215/170 +f 3482/217/171 3483/218/171 3454/197/171 +f 3454/197/171 3453/196/171 3482/217/171 +f 3484/219/172 3485/220/172 3461/204/99 +f 3461/204/99 3460/203/99 3484/219/172 +f 3486/209/173 3487/208/173 3469/207/173 +f 3469/207/173 3468/207/173 3486/209/173 +f 3461/212/174 3485/214/174 3488/213/174 +f 3488/213/174 3475/196/174 3461/212/174 +f 3480/215/175 3472/209/175 3474/211/175 +f 3474/211/175 3481/216/175 3480/215/175 +f 3489/221/98 3476/222/98 3452/222/98 +f 3452/222/98 3455/221/98 3489/221/98 +f 3476/222/113 3475/203/113 3453/203/113 +f 3453/203/113 3452/222/113 3476/222/113 +f 3475/203/112 3488/206/112 3482/206/112 +f 3482/206/112 3453/203/112 3475/203/112 +f 3488/206/100 3490/223/100 3483/223/100 +f 3483/223/100 3482/206/100 3488/206/100 +f 3490/224/176 3491/225/176 3454/226/176 +f 3454/226/176 3483/224/176 3490/224/176 +f 3491/225/117 3489/224/117 3455/224/117 +f 3455/224/117 3454/226/117 3491/225/117 +f 3485/214/169 3492/227/169 3490/228/169 +f 3490/228/169 3488/213/169 3485/214/169 +f 3492/229/125 3485/220/125 3484/219/97 +f 3484/219/97 3493/221/97 3492/229/125 +f 3463/206/100 3462/205/101 3494/230/101 +f 3494/230/101 3495/223/100 3463/206/100 +f 3494/227/167 3462/214/167 3476/213/167 +f 3476/213/167 3489/228/167 3494/227/167 +f 3458/201/100 3457/200/100 3496/199/101 +f 3496/199/101 3497/202/101 3458/201/100 +f 3494/231/481 3489/224/481 3474/232/481 +f 3474/232/481 3473/233/481 3494/231/481 +f 3489/224/117 3491/225/117 3481/234/117 +f 3481/234/117 3474/232/117 3489/224/117 +f 3491/225/176 3490/224/176 3479/232/176 +f 3479/232/176 3481/234/176 3491/225/176 +f 3490/224/115 3492/231/115 3477/233/115 +f 3477/233/115 3479/232/115 3490/224/115 +f 3466/200/97 3465/201/97 3498/202/98 +f 3498/202/98 3499/199/98 3466/200/97 +f 3470/208/166 3469/207/166 3480/235/166 +f 3480/235/166 3478/236/166 3470/208/166 +f 3469/207/173 3487/208/173 3472/236/173 +f 3472/236/173 3480/235/173 3469/207/173 +f 3495/236/27 3494/231/27 3457/237/27 +f 3457/237/27 3456/238/27 3495/236/27 +f 3494/231/27 3473/233/27 3496/239/27 +f 3496/239/27 3457/237/27 3494/231/27 +f 3473/210/178 3472/209/178 3497/240/178 +f 3497/240/178 3496/241/178 3473/210/178 +f 3472/236/26 3487/208/26 3458/242/26 +f 3458/242/26 3497/238/26 3472/236/26 +f 3487/208/26 3486/209/26 3459/240/26 +f 3459/240/26 3458/242/26 3487/208/26 +f 3471/209/26 3470/208/26 3465/242/26 +f 3465/242/26 3464/240/26 3471/209/26 +f 3470/208/26 3478/236/26 3498/238/26 +f 3498/238/26 3465/242/26 3470/208/26 +f 3478/209/179 3477/210/179 3499/241/179 +f 3499/241/179 3498/240/179 3478/209/179 +f 3477/233/27 3492/231/27 3466/237/27 +f 3466/237/27 3499/239/27 3477/233/27 +f 3492/231/27 3493/236/27 3467/238/27 +f 3467/238/27 3466/237/27 3492/231/27 +f 3500/243/156 3501/244/156 3502/245/156 +f 3502/245/156 3503/246/156 3500/243/156 +f 3500/247/157 3503/248/157 3504/249/157 +f 3504/249/157 3505/250/157 3500/247/157 +f 3503/246/158 3502/245/158 3506/251/158 +f 3506/251/158 3504/252/158 3503/246/158 +f 3502/248/159 3501/247/159 3507/250/159 +f 3507/250/159 3506/249/159 3502/248/159 +f 3508/195/72 3509/196/72 3510/197/72 +f 3510/197/72 3511/198/72 3508/195/72 +f 3512/199/73 3513/200/73 3514/201/73 +f 3514/201/73 3515/202/73 3512/199/73 +f 3516/203/74 3517/204/74 3518/205/74 +f 3518/205/74 3519/206/74 3516/203/74 +f 3520/202/75 3521/201/75 3522/200/75 +f 3522/200/75 3523/199/75 3520/202/75 +f 3524/207/76 3525/207/76 3526/208/76 +f 3526/208/76 3527/209/76 3524/207/76 +f 3528/209/77 3529/210/77 3530/211/77 +f 3517/212/78 3531/196/78 3532/213/78 +f 3532/213/78 3518/214/78 3517/212/78 +f 3533/210/79 3534/209/79 3535/211/79 +f 3536/215/80 3537/216/80 3535/211/80 +f 3535/211/80 3534/209/80 3536/215/80 +f 3538/217/81 3539/218/81 3510/197/482 +f 3510/197/482 3509/196/482 3538/217/81 +f 3540/219/82 3541/220/82 3517/204/82 +f 3517/204/82 3516/203/82 3540/219/82 +f 3542/209/83 3543/208/83 3525/207/83 +f 3525/207/83 3524/207/83 3542/209/83 +f 3517/212/84 3541/214/84 3544/213/84 +f 3544/213/84 3531/196/84 3517/212/84 +f 3536/215/85 3528/209/85 3530/211/85 +f 3530/211/85 3537/216/85 3536/215/85 +f 3545/221/75 3532/222/75 3508/222/75 +f 3508/222/75 3511/221/75 3545/221/75 +f 3532/222/86 3531/203/86 3509/203/86 +f 3509/203/86 3508/222/86 3532/222/86 +f 3531/203/87 3544/206/87 3538/206/87 +f 3538/206/87 3509/203/87 3531/203/87 +f 3544/206/73 3546/223/73 3539/223/73 +f 3539/223/73 3538/206/73 3544/206/73 +f 3546/224/88 3547/225/88 3510/226/88 +f 3510/226/88 3539/224/88 3546/224/88 +f 3547/225/89 3545/224/89 3511/224/89 +f 3511/224/89 3510/226/89 3547/225/89 +f 3541/214/79 3548/227/79 3546/228/79 +f 3546/228/79 3544/213/79 3541/214/79 +f 3548/229/75 3541/220/75 3540/219/75 +f 3540/219/75 3549/221/75 3548/229/75 +f 3519/206/73 3518/205/73 3550/230/73 +f 3550/230/73 3551/223/73 3519/206/73 +f 3550/227/77 3518/214/77 3532/213/77 +f 3532/213/77 3545/228/77 3550/227/77 +f 3514/201/73 3513/200/73 3552/199/73 +f 3552/199/73 3553/202/73 3514/201/73 +f 3550/231/90 3545/224/90 3530/232/90 +f 3530/232/90 3529/233/90 3550/231/90 +f 3545/224/89 3547/225/89 3537/234/89 +f 3537/234/89 3530/232/89 3545/224/89 +f 3547/225/88 3546/224/88 3535/232/88 +f 3535/232/88 3537/234/88 3547/225/88 +f 3546/224/92 3548/231/92 3533/233/92 +f 3533/233/92 3535/232/92 3546/224/92 +f 3522/200/75 3521/201/75 3554/202/75 +f 3554/202/75 3555/199/75 3522/200/75 +f 3526/208/76 3525/207/76 3536/235/76 +f 3536/235/76 3534/236/76 3526/208/76 +f 3525/207/83 3543/208/83 3528/236/83 +f 3528/236/83 3536/235/83 3525/207/83 +f 3551/236/27 3550/231/27 3513/237/27 +f 3513/237/27 3512/238/27 3551/236/27 +f 3550/231/27 3529/233/27 3552/239/27 +f 3552/239/27 3513/237/27 3550/231/27 +f 3529/210/94 3528/209/94 3553/240/94 +f 3553/240/94 3552/241/94 3529/210/94 +f 3528/236/26 3543/208/26 3514/242/26 +f 3514/242/26 3553/238/26 3528/236/26 +f 3543/208/26 3542/209/26 3515/240/26 +f 3515/240/26 3514/242/26 3543/208/26 +f 3527/209/26 3526/208/26 3521/242/26 +f 3521/242/26 3520/240/26 3527/209/26 +f 3526/208/26 3534/236/26 3554/238/26 +f 3554/238/26 3521/242/26 3526/208/26 +f 3534/209/95 3533/210/95 3555/241/95 +f 3555/241/95 3554/240/95 3534/209/95 +f 3533/233/27 3548/231/27 3522/237/27 +f 3522/237/27 3555/239/27 3533/233/27 +f 3548/231/27 3549/236/27 3523/238/27 +f 3523/238/27 3522/237/27 3548/231/27 +f 3556/243/154 3557/244/154 3558/245/154 +f 3558/245/154 3559/246/154 3556/243/154 +f 3556/247/7 3559/248/7 3560/249/7 +f 3560/249/7 3561/250/7 3556/247/7 +f 3559/246/155 3558/245/155 3562/251/155 +f 3562/251/155 3560/252/155 3559/246/155 +f 3558/248/1 3557/247/1 3563/250/1 +f 3563/250/1 3562/249/1 3558/248/1 +f 3564/243/180 3565/244/180 3566/245/180 +f 3566/245/180 3567/246/180 3564/243/180 +f 3564/247/153 3567/248/153 3568/249/153 +f 3568/249/153 3569/250/153 3564/247/153 +f 3567/246/181 3566/245/181 3570/251/181 +f 3570/251/181 3568/252/181 3567/246/181 +f 3566/248/151 3565/247/151 3571/250/151 +f 3571/250/151 3570/249/151 3566/248/151 +f 3572/243/148 3573/244/148 3574/245/148 +f 3574/245/148 3575/246/148 3572/243/148 +f 3572/247/1 3575/248/1 3576/249/1 +f 3576/249/1 3577/250/1 3572/247/1 +f 3575/246/149 3574/245/149 3578/251/149 +f 3578/251/149 3576/252/149 3575/246/149 +f 3574/248/7 3573/247/7 3579/250/7 +f 3579/250/7 3578/249/7 3574/248/7 +f 3580/243/127 3581/244/127 3582/245/127 +f 3582/245/127 3583/246/127 3580/243/127 +f 3580/247/128 3583/248/128 3584/249/128 +f 3584/249/128 3585/250/128 3580/247/128 +f 3583/246/129 3582/245/129 3586/251/129 +f 3586/251/129 3584/252/129 3583/246/129 +f 3582/248/130 3581/247/130 3587/250/130 +f 3587/250/130 3586/249/130 3582/248/130 +f 3588/243/187 3589/244/187 3590/245/187 +f 3590/245/187 3591/246/187 3588/243/187 +f 3588/247/163 3591/248/163 3592/249/163 +f 3592/249/163 3593/250/163 3588/247/163 +f 3591/246/188 3590/245/188 3594/251/188 +f 3594/251/188 3592/252/188 3591/246/188 +f 3590/248/161 3589/247/161 3595/250/161 +f 3595/250/161 3594/249/161 3590/248/161 +f 3596/195/72 3597/196/72 3598/197/72 +f 3598/197/72 3599/198/72 3596/195/72 +f 3600/199/73 3601/200/73 3602/201/73 +f 3602/201/73 3603/202/73 3600/199/73 +f 3604/203/74 3605/204/74 3606/205/74 +f 3606/205/74 3607/206/74 3604/203/74 +f 3608/202/75 3609/201/75 3610/200/75 +f 3610/200/75 3611/199/75 3608/202/75 +f 3612/207/76 3613/207/76 3614/208/76 +f 3614/208/76 3615/209/76 3612/207/76 +f 3616/209/77 3617/210/77 3618/211/77 +f 3605/212/78 3619/196/78 3620/213/78 +f 3620/213/78 3606/214/78 3605/212/78 +f 3621/210/79 3622/209/79 3623/211/79 +f 3624/215/80 3625/216/80 3623/211/80 +f 3623/211/80 3622/209/80 3624/215/80 +f 3626/217/81 3627/218/81 3598/197/482 +f 3598/197/482 3597/196/482 3626/217/81 +f 3628/219/82 3629/220/82 3605/204/82 +f 3605/204/82 3604/203/82 3628/219/82 +f 3630/209/83 3631/208/83 3613/207/83 +f 3613/207/83 3612/207/83 3630/209/83 +f 3605/212/84 3629/214/84 3632/213/84 +f 3632/213/84 3619/196/84 3605/212/84 +f 3624/215/85 3616/209/85 3618/211/85 +f 3618/211/85 3625/216/85 3624/215/85 +f 3633/221/75 3620/222/75 3596/222/75 +f 3596/222/75 3599/221/75 3633/221/75 +f 3620/222/86 3619/203/86 3597/203/86 +f 3597/203/86 3596/222/86 3620/222/86 +f 3619/203/87 3632/206/87 3626/206/87 +f 3626/206/87 3597/203/87 3619/203/87 +f 3632/206/73 3634/223/73 3627/223/73 +f 3627/223/73 3626/206/73 3632/206/73 +f 3634/224/88 3635/225/88 3598/226/88 +f 3598/226/88 3627/224/88 3634/224/88 +f 3635/225/89 3633/224/89 3599/224/89 +f 3599/224/89 3598/226/89 3635/225/89 +f 3629/214/79 3636/227/79 3634/228/79 +f 3634/228/79 3632/213/79 3629/214/79 +f 3636/229/75 3629/220/75 3628/219/75 +f 3628/219/75 3637/221/75 3636/229/75 +f 3607/206/73 3606/205/73 3638/230/73 +f 3638/230/73 3639/223/73 3607/206/73 +f 3638/227/77 3606/214/77 3620/213/77 +f 3620/213/77 3633/228/77 3638/227/77 +f 3602/201/73 3601/200/73 3640/199/73 +f 3640/199/73 3641/202/73 3602/201/73 +f 3638/231/90 3633/224/90 3618/232/90 +f 3618/232/90 3617/233/90 3638/231/90 +f 3633/224/89 3635/225/89 3625/234/89 +f 3625/234/89 3618/232/89 3633/224/89 +f 3635/225/88 3634/224/88 3623/232/88 +f 3623/232/88 3625/234/88 3635/225/88 +f 3634/224/92 3636/231/92 3621/233/92 +f 3621/233/92 3623/232/92 3634/224/92 +f 3610/200/75 3609/201/75 3642/202/75 +f 3642/202/75 3643/199/75 3610/200/75 +f 3614/208/76 3613/207/76 3624/235/76 +f 3624/235/76 3622/236/76 3614/208/76 +f 3613/207/83 3631/208/83 3616/236/83 +f 3616/236/83 3624/235/83 3613/207/83 +f 3639/236/27 3638/231/27 3601/237/27 +f 3601/237/27 3600/238/27 3639/236/27 +f 3638/231/27 3617/233/27 3640/239/27 +f 3640/239/27 3601/237/27 3638/231/27 +f 3617/210/94 3616/209/94 3641/240/94 +f 3641/240/94 3640/241/94 3617/210/94 +f 3616/236/26 3631/208/26 3602/242/26 +f 3602/242/26 3641/238/26 3616/236/26 +f 3631/208/26 3630/209/26 3603/240/26 +f 3603/240/26 3602/242/26 3631/208/26 +f 3615/209/26 3614/208/26 3609/242/26 +f 3609/242/26 3608/240/26 3615/209/26 +f 3614/208/26 3622/236/26 3642/238/26 +f 3642/238/26 3609/242/26 3614/208/26 +f 3622/209/95 3621/210/95 3643/241/95 +f 3643/241/95 3642/240/95 3622/209/95 +f 3621/233/27 3636/231/27 3610/237/27 +f 3610/237/27 3643/239/27 3621/233/27 +f 3636/231/27 3637/236/27 3611/238/27 +f 3611/238/27 3610/237/27 3636/231/27 +f 3644/195/124 3645/196/96 3646/197/96 +f 3646/197/96 3647/198/124 3644/195/124 +f 3648/199/125 3649/200/125 3650/201/125 +f 3650/201/125 3651/202/125 3648/199/125 +f 3652/203/99 3653/204/99 3654/205/99 +f 3654/205/99 3655/206/99 3652/203/99 +f 3656/202/165 3657/201/165 3658/200/165 +f 3658/200/165 3659/199/165 3656/202/165 +f 3660/207/102 3661/207/102 3662/208/102 +f 3662/208/102 3663/209/102 3660/207/102 +f 3664/209/103 3665/210/103 3666/211/103 +f 3653/212/104 3667/196/104 3668/213/104 +f 3668/213/104 3654/214/104 3653/212/104 +f 3669/210/105 3670/209/105 3671/211/105 +f 3672/215/106 3673/216/106 3671/211/106 +f 3671/211/106 3670/209/106 3672/215/106 +f 3674/217/107 3675/218/107 3646/197/107 +f 3646/197/107 3645/196/107 3674/217/107 +f 3676/219/126 3677/220/108 3653/204/108 +f 3653/204/108 3652/203/108 3676/219/126 +f 3678/209/109 3679/208/109 3661/207/109 +f 3661/207/109 3660/207/109 3678/209/109 +f 3653/212/110 3677/214/110 3680/213/110 +f 3680/213/110 3667/196/110 3653/212/110 +f 3672/215/111 3664/209/111 3666/211/111 +f 3666/211/111 3673/216/111 3672/215/111 +f 3681/221/165 3668/222/165 3644/222/165 +f 3644/222/165 3647/221/165 3681/221/165 +f 3668/222/112 3667/203/112 3645/203/112 +f 3645/203/112 3644/222/112 3668/222/112 +f 3667/203/113 3680/206/113 3674/206/113 +f 3674/206/113 3645/203/113 3667/203/113 +f 3680/206/125 3682/223/125 3675/223/125 +f 3675/223/125 3674/206/125 3680/206/125 +f 3682/224/114 3683/225/114 3646/226/114 +f 3646/226/114 3675/224/114 3682/224/114 +f 3683/225/115 3681/224/115 3647/224/115 +f 3647/224/115 3646/226/115 3683/225/115 +f 3677/214/105 3684/227/105 3682/228/105 +f 3682/228/105 3680/213/105 3677/214/105 +f 3684/229/165 3677/220/165 3676/219/165 +f 3676/219/165 3685/221/165 3684/229/165 +f 3655/206/125 3654/205/125 3686/230/125 +f 3686/230/125 3687/223/125 3655/206/125 +f 3686/227/103 3654/214/103 3668/213/103 +f 3668/213/103 3681/228/103 3686/227/103 +f 3650/201/125 3649/200/125 3688/199/125 +f 3688/199/125 3689/202/125 3650/201/125 +f 3686/231/483 3681/224/483 3666/232/483 +f 3666/232/483 3665/233/483 3686/231/483 +f 3681/224/115 3683/225/115 3673/234/115 +f 3673/234/115 3666/232/115 3681/224/115 +f 3683/225/114 3682/224/114 3671/232/114 +f 3671/232/114 3673/234/114 3683/225/114 +f 3682/224/117 3684/231/117 3669/233/117 +f 3669/233/117 3671/232/117 3682/224/117 +f 3658/200/165 3657/201/165 3690/202/165 +f 3690/202/165 3691/199/165 3658/200/165 +f 3662/208/102 3661/207/102 3672/235/102 +f 3672/235/102 3670/236/102 3662/208/102 +f 3661/207/109 3679/208/109 3664/236/109 +f 3664/236/109 3672/235/109 3661/207/109 +f 3687/236/27 3686/231/27 3649/237/27 +f 3649/237/27 3648/238/27 3687/236/27 +f 3686/231/27 3665/233/27 3688/239/27 +f 3688/239/27 3649/237/27 3686/231/27 +f 3665/210/118 3664/209/118 3689/240/118 +f 3689/240/118 3688/241/118 3665/210/118 +f 3664/236/26 3679/208/26 3650/242/26 +f 3650/242/26 3689/238/26 3664/236/26 +f 3679/208/26 3678/209/26 3651/240/26 +f 3651/240/26 3650/242/26 3679/208/26 +f 3663/209/26 3662/208/26 3657/242/26 +f 3657/242/26 3656/240/26 3663/209/26 +f 3662/208/26 3670/236/26 3690/238/26 +f 3690/238/26 3657/242/26 3662/208/26 +f 3670/209/119 3669/210/119 3691/241/119 +f 3691/241/119 3690/240/119 3670/209/119 +f 3669/233/27 3684/231/27 3658/237/27 +f 3658/237/27 3691/239/27 3669/233/27 +f 3684/231/27 3685/236/27 3659/238/27 +f 3659/238/27 3658/237/27 3684/231/27 +f 3692/243/150 3693/244/150 3694/245/150 +f 3694/245/150 3695/246/150 3692/243/150 +f 3692/247/151 3695/248/151 3696/249/151 +f 3696/249/151 3697/250/151 3692/247/151 +f 3695/246/152 3694/245/152 3698/251/152 +f 3698/251/152 3696/252/152 3695/246/152 +f 3694/248/153 3693/247/153 3699/250/153 +f 3699/250/153 3698/249/153 3694/248/153 +f 3700/195/96 3701/196/124 3702/197/124 +f 3702/197/124 3703/198/96 3700/195/96 +f 3704/199/125 3705/200/125 3706/201/125 +f 3706/201/125 3707/202/125 3704/199/125 +f 3708/203/99 3709/204/99 3710/205/99 +f 3710/205/99 3711/206/99 3708/203/99 +f 3712/202/165 3713/201/165 3714/200/165 +f 3714/200/165 3715/199/165 3712/202/165 +f 3716/207/102 3717/207/102 3718/208/102 +f 3718/208/102 3719/209/102 3716/207/102 +f 3720/209/103 3721/210/103 3722/211/103 +f 3709/212/104 3723/196/104 3724/213/104 +f 3724/213/104 3710/214/104 3709/212/104 +f 3725/210/105 3726/209/105 3727/211/105 +f 3728/215/106 3729/216/106 3727/211/106 +f 3727/211/106 3726/209/106 3728/215/106 +f 3730/217/107 3731/218/107 3702/197/107 +f 3702/197/107 3701/196/107 3730/217/107 +f 3732/219/108 3733/220/108 3709/204/126 +f 3709/204/126 3708/203/108 3732/219/108 +f 3734/209/109 3735/208/109 3717/207/109 +f 3717/207/109 3716/207/109 3734/209/109 +f 3709/212/110 3733/214/110 3736/213/110 +f 3736/213/110 3723/196/110 3709/212/110 +f 3728/215/111 3720/209/111 3722/211/111 +f 3722/211/111 3729/216/111 3728/215/111 +f 3737/221/165 3724/222/165 3700/222/165 +f 3700/222/165 3703/221/165 3737/221/165 +f 3724/222/112 3723/203/112 3701/203/112 +f 3701/203/112 3700/222/112 3724/222/112 +f 3723/203/113 3736/206/113 3730/206/113 +f 3730/206/113 3701/203/113 3723/203/113 +f 3736/206/125 3738/223/125 3731/223/125 +f 3731/223/125 3730/206/125 3736/206/125 +f 3738/224/114 3739/225/114 3702/226/114 +f 3702/226/114 3731/224/114 3738/224/114 +f 3739/225/115 3737/224/115 3703/224/115 +f 3703/224/115 3702/226/115 3739/225/115 +f 3733/214/105 3740/227/105 3738/228/105 +f 3738/228/105 3736/213/105 3733/214/105 +f 3740/229/165 3733/220/165 3732/219/165 +f 3732/219/165 3741/221/165 3740/229/165 +f 3711/206/125 3710/205/125 3742/230/125 +f 3742/230/125 3743/223/125 3711/206/125 +f 3742/227/103 3710/214/103 3724/213/103 +f 3724/213/103 3737/228/103 3742/227/103 +f 3706/201/125 3705/200/125 3744/199/125 +f 3744/199/125 3745/202/125 3706/201/125 +f 3742/231/483 3737/224/483 3722/232/483 +f 3722/232/483 3721/233/483 3742/231/483 +f 3737/224/115 3739/225/115 3729/234/115 +f 3729/234/115 3722/232/115 3737/224/115 +f 3739/225/114 3738/224/114 3727/232/114 +f 3727/232/114 3729/234/114 3739/225/114 +f 3738/224/117 3740/231/117 3725/233/117 +f 3725/233/117 3727/232/117 3738/224/117 +f 3714/200/165 3713/201/165 3746/202/165 +f 3746/202/165 3747/199/165 3714/200/165 +f 3718/208/102 3717/207/102 3728/235/102 +f 3728/235/102 3726/236/102 3718/208/102 +f 3717/207/109 3735/208/109 3720/236/109 +f 3720/236/109 3728/235/109 3717/207/109 +f 3743/236/27 3742/231/27 3705/237/27 +f 3705/237/27 3704/238/27 3743/236/27 +f 3742/231/27 3721/233/27 3744/239/27 +f 3744/239/27 3705/237/27 3742/231/27 +f 3721/210/118 3720/209/118 3745/240/118 +f 3745/240/118 3744/241/118 3721/210/118 +f 3720/236/26 3735/208/26 3706/242/26 +f 3706/242/26 3745/238/26 3720/236/26 +f 3735/208/26 3734/209/26 3707/240/26 +f 3707/240/26 3706/242/26 3735/208/26 +f 3719/209/26 3718/208/26 3713/242/26 +f 3713/242/26 3712/240/26 3719/209/26 +f 3718/208/26 3726/236/26 3746/238/26 +f 3746/238/26 3713/242/26 3718/208/26 +f 3726/209/119 3725/210/119 3747/241/119 +f 3747/241/119 3746/240/119 3726/209/119 +f 3725/233/27 3740/231/27 3714/237/27 +f 3714/237/27 3747/239/27 3725/233/27 +f 3740/231/27 3741/236/27 3715/238/27 +f 3715/238/27 3714/237/27 3740/231/27 +f 3748/243/120 3749/244/120 3750/245/120 +f 3750/245/120 3751/246/120 3748/243/120 +f 3748/247/121 3751/248/121 3752/249/121 +f 3752/249/121 3753/250/121 3748/247/121 +f 3751/246/122 3750/245/122 3754/251/122 +f 3754/251/122 3752/252/122 3751/246/122 +f 3750/248/123 3749/247/123 3755/250/123 +f 3755/250/123 3754/249/123 3750/248/123 +f 3756/195/131 3757/196/131 3758/197/131 +f 3758/197/131 3759/198/131 3756/195/131 +f 3760/199/75 3761/200/75 3762/201/75 +f 3762/201/75 3763/202/75 3760/199/75 +f 3764/203/132 3765/204/132 3766/205/132 +f 3766/205/132 3767/206/132 3764/203/132 +f 3768/202/73 3769/201/73 3770/200/73 +f 3770/200/73 3771/199/73 3768/202/73 +f 3772/207/83 3773/207/83 3774/208/83 +f 3774/208/83 3775/209/83 3772/207/83 +f 3776/209/133 3777/210/133 3778/211/133 +f 3765/212/134 3779/196/134 3780/213/134 +f 3780/213/134 3766/214/134 3765/212/134 +f 3781/210/135 3782/209/135 3783/211/135 +f 3784/215/136 3785/216/136 3783/211/136 +f 3783/211/136 3782/209/136 3784/215/136 +f 3786/217/137 3787/218/137 3758/197/137 +f 3758/197/137 3757/196/137 3786/217/137 +f 3788/219/139 3789/220/139 3765/204/139 +f 3765/204/139 3764/203/139 3788/219/139 +f 3790/209/76 3791/208/76 3773/207/76 +f 3773/207/76 3772/207/76 3790/209/76 +f 3765/212/140 3789/214/140 3792/213/140 +f 3792/213/140 3779/196/140 3765/212/140 +f 3784/215/141 3776/209/141 3778/211/141 +f 3778/211/141 3785/216/141 3784/215/141 +f 3793/221/73 3780/222/73 3756/222/73 +f 3756/222/73 3759/221/73 3793/221/73 +f 3780/222/87 3779/203/87 3757/203/87 +f 3757/203/87 3756/222/87 3780/222/87 +f 3779/203/86 3792/206/86 3786/206/86 +f 3786/206/86 3757/203/86 3779/203/86 +f 3792/206/75 3794/223/75 3787/223/75 +f 3787/223/75 3786/206/75 3792/206/75 +f 3794/224/142 3795/225/142 3758/226/142 +f 3758/226/142 3787/224/142 3794/224/142 +f 3795/225/143 3793/224/143 3759/224/143 +f 3759/224/143 3758/226/143 3795/225/143 +f 3789/214/135 3796/227/135 3794/228/135 +f 3794/228/135 3792/213/135 3789/214/135 +f 3796/229/73 3789/220/73 3788/219/73 +f 3788/219/73 3797/221/73 3796/229/73 +f 3767/206/75 3766/205/75 3798/230/75 +f 3798/230/75 3799/223/75 3767/206/75 +f 3798/227/133 3766/214/133 3780/213/133 +f 3780/213/133 3793/228/133 3798/227/133 +f 3762/201/75 3761/200/75 3800/199/75 +f 3800/199/75 3801/202/75 3762/201/75 +f 3798/231/144 3793/224/144 3778/232/144 +f 3778/232/144 3777/233/144 3798/231/144 +f 3793/224/143 3795/225/143 3785/234/143 +f 3785/234/143 3778/232/143 3793/224/143 +f 3795/225/142 3794/224/142 3783/232/142 +f 3783/232/142 3785/234/142 3795/225/142 +f 3794/224/145 3796/231/145 3781/233/145 +f 3781/233/145 3783/232/145 3794/224/145 +f 3770/200/73 3769/201/73 3802/202/73 +f 3802/202/73 3803/199/73 3770/200/73 +f 3774/208/83 3773/207/83 3784/235/83 +f 3784/235/83 3782/236/83 3774/208/83 +f 3773/207/76 3791/208/76 3776/236/76 +f 3776/236/76 3784/235/76 3773/207/76 +f 3799/236/27 3798/231/27 3761/237/27 +f 3761/237/27 3760/238/27 3799/236/27 +f 3798/231/27 3777/233/27 3800/239/27 +f 3800/239/27 3761/237/27 3798/231/27 +f 3777/210/480 3776/209/480 3801/240/480 +f 3801/240/480 3800/241/480 3777/210/480 +f 3776/236/26 3791/208/26 3762/242/26 +f 3762/242/26 3801/238/26 3776/236/26 +f 3791/208/26 3790/209/26 3763/240/26 +f 3763/240/26 3762/242/26 3791/208/26 +f 3775/209/26 3774/208/26 3769/242/26 +f 3769/242/26 3768/240/26 3775/209/26 +f 3774/208/26 3782/236/26 3802/238/26 +f 3802/238/26 3769/242/26 3774/208/26 +f 3782/209/147 3781/210/147 3803/241/147 +f 3803/241/147 3802/240/147 3782/209/147 +f 3781/233/27 3796/231/27 3770/237/27 +f 3770/237/27 3803/239/27 3781/233/27 +f 3796/231/27 3797/236/27 3771/238/27 +f 3771/238/27 3770/237/27 3796/231/27 +f 3804/243/160 3805/244/160 3806/245/160 +f 3806/245/160 3807/246/160 3804/243/160 +f 3804/247/161 3807/248/161 3808/249/161 +f 3808/249/161 3809/250/161 3804/247/161 +f 3807/246/162 3806/245/162 3810/251/162 +f 3810/251/162 3808/252/162 3807/246/162 +f 3806/248/163 3805/247/163 3811/250/163 +f 3811/250/163 3810/249/163 3806/248/163 +f 3812/253/19 3813/254/19 3814/255/19 +f 3814/255/19 3815/256/19 3812/253/19 +f 3816/257/20 3812/253/20 3815/256/20 +f 3815/256/20 3817/258/20 3816/257/20 +f 3818/259/21 3816/257/21 3817/258/21 +f 3817/258/21 3819/260/21 3818/259/21 +f 3820/261/22 3818/262/191 3819/263/22 +f 3819/263/22 3821/264/22 3820/261/22 +f 3822/265/23 3820/261/23 3821/264/23 +f 3821/264/23 3823/266/23 3822/265/23 +f 3824/267/24 3822/265/24 3823/266/24 +f 3823/266/24 3825/268/24 3824/267/24 +f 3826/269/192 3824/267/13 3825/268/13 +f 3825/268/13 3827/270/192 3826/269/192 +f 3828/271/14 3826/269/14 3827/270/14 +f 3827/270/14 3829/272/14 3828/271/14 +f 3830/273/118 3828/271/15 3829/272/15 +f 3829/272/15 3831/274/15 3830/273/118 +f 3832/275/16 3830/273/16 3831/274/16 +f 3831/274/16 3833/276/16 3832/275/16 +f 3834/277/17 3832/275/17 3833/276/17 +f 3833/276/17 3835/278/17 3834/277/17 +f 3813/254/18 3834/277/194 3835/278/194 +f 3835/278/194 3814/255/18 3813/254/18 +f 3815/279/27 3814/280/27 3836/281/27 +f 3836/281/27 3837/282/27 3815/279/27 +f 3838/283/27 3839/279/27 3840/282/27 +f 3840/282/27 3841/284/27 3838/283/27 +f 3819/285/27 3817/283/27 3842/284/27 +f 3842/284/27 3843/285/27 3819/285/27 +f 3844/286/27 3845/285/27 3846/285/27 +f 3846/285/27 3847/287/27 3844/286/27 +f 3823/288/27 3821/286/27 3848/287/27 +f 3848/287/27 3849/289/27 3823/288/27 +f 3850/290/27 3851/288/27 3852/289/27 +f 3852/289/27 3853/291/27 3850/290/27 +f 3827/292/27 3825/290/27 3854/291/27 +f 3854/291/27 3855/293/27 3827/292/27 +f 3856/294/27 3857/292/27 3858/293/27 +f 3858/293/27 3859/295/27 3856/294/27 +f 3831/296/27 3829/294/27 3860/295/27 +f 3860/295/27 3861/297/27 3831/296/27 +f 3862/298/27 3863/296/27 3864/297/27 +f 3864/297/27 3865/299/27 3862/298/27 +f 3835/300/27 3833/298/27 3866/299/27 +f 3866/299/27 3867/300/27 3835/300/27 +f 3868/280/27 3869/300/27 3870/300/27 +f 3870/300/27 3871/281/27 3868/280/27 +f 3837/301/13 3836/302/13 3872/303/13 +f 3872/303/13 3873/304/13 3837/301/13 +f 3842/305/14 3837/301/14 3873/304/14 +f 3873/304/14 3874/306/14 3842/305/14 +f 3843/307/15 3842/305/118 3874/306/15 +f 3874/306/15 3875/308/15 3843/307/15 +f 3848/309/16 3843/307/16 3875/308/16 +f 3875/308/16 3876/310/16 3848/309/16 +f 3849/311/17 3848/309/17 3876/310/17 +f 3876/310/17 3877/312/17 3849/311/17 +f 3854/313/18 3849/311/18 3877/312/18 +f 3877/312/18 3878/314/18 3854/313/18 +f 3855/315/190 3854/313/19 3878/314/19 +f 3878/314/19 3879/316/190 3855/315/190 +f 3860/317/20 3855/315/20 3879/316/20 +f 3879/316/20 3880/318/20 3860/317/20 +f 3861/319/21 3860/317/21 3880/318/21 +f 3880/318/21 3881/320/21 3861/319/21 +f 3866/321/191 3861/322/22 3881/323/22 +f 3881/323/22 3882/324/22 3866/321/191 +f 3867/325/23 3866/321/23 3882/324/23 +f 3882/324/23 3883/326/23 3867/325/23 +f 3836/302/24 3867/325/25 3883/326/25 +f 3883/326/25 3872/303/24 3836/302/24 +f 3873/327/27 3872/328/27 3884/329/27 +f 3874/330/27 3873/327/27 3884/329/27 +f 3875/331/27 3874/330/27 3884/329/27 +f 3876/332/27 3875/331/27 3884/329/27 +f 3877/333/27 3876/332/27 3884/329/27 +f 3878/334/27 3877/333/27 3884/329/27 +f 3879/335/27 3878/334/27 3884/329/27 +f 3880/336/27 3879/335/27 3884/329/27 +f 3881/337/27 3880/336/27 3884/329/27 +f 3882/338/27 3881/337/27 3884/329/27 +f 3883/339/27 3882/338/27 3884/329/27 +f 3872/328/27 3883/339/27 3884/329/27 +f 3817/258/20 3815/256/20 3839/340/20 +f 3839/340/20 3838/341/20 3817/258/20 +f 3815/279/163 3837/282/163 3840/282/163 +f 3840/282/163 3839/279/163 3815/279/163 +f 3837/301/14 3842/305/14 3841/342/14 +f 3841/342/14 3840/343/14 3837/301/14 +f 3842/284/197 3817/283/197 3838/283/197 +f 3838/283/197 3841/284/197 3842/284/197 +f 3821/264/22 3819/263/22 3845/344/22 +f 3845/344/22 3844/345/22 3821/264/22 +f 3819/285/7 3843/285/7 3846/285/7 +f 3846/285/7 3845/285/7 3819/285/7 +f 3843/307/16 3848/309/16 3847/346/16 +f 3847/346/16 3846/347/16 3843/307/16 +f 3848/287/198 3821/286/198 3844/286/198 +f 3844/286/198 3847/287/198 3848/287/198 +f 3825/268/24 3823/266/24 3851/348/24 +f 3851/348/24 3850/349/24 3825/268/24 +f 3823/288/151 3849/289/151 3852/289/151 +f 3852/289/151 3851/288/151 3823/288/151 +f 3849/311/18 3854/313/18 3853/350/18 +f 3853/350/18 3852/351/18 3849/311/18 +f 3854/291/4 3825/290/4 3850/290/4 +f 3850/290/4 3853/291/4 3854/291/4 +f 3829/272/14 3827/270/14 3857/352/14 +f 3857/352/14 3856/353/14 3829/272/14 +f 3827/292/161 3855/293/161 3858/293/161 +f 3858/293/161 3857/292/161 3827/292/161 +f 3855/315/20 3860/317/20 3859/354/20 +f 3859/354/20 3858/355/20 3855/315/20 +f 3860/295/195 3829/294/195 3856/294/195 +f 3856/294/195 3859/295/195 3860/295/195 +f 3833/276/16 3831/274/16 3863/356/193 +f 3863/356/193 3862/357/16 3833/276/16 +f 3831/296/1 3861/297/1 3864/297/1 +f 3864/297/1 3863/296/1 3831/296/1 +f 3861/322/22 3866/321/191 3865/358/22 +f 3865/358/22 3864/359/22 3861/322/22 +f 3866/299/196 3833/298/196 3862/298/196 +f 3862/298/196 3865/299/196 3866/299/196 +f 3814/255/18 3835/278/194 3869/360/18 +f 3869/360/18 3868/361/18 3814/255/18 +f 3835/300/153 3867/300/153 3870/300/153 +f 3870/300/153 3869/300/153 3835/300/153 +f 3867/325/25 3836/302/24 3871/362/24 +f 3871/362/24 3870/363/25 3867/325/25 +f 3836/281/10 3814/280/10 3868/280/10 +f 3868/280/10 3871/281/10 3836/281/10 +f 3885/3/6 3886/2/6 3887/1/7 +f 3887/1/7 3888/4/7 3885/3/6 +f 3889/6/5 3890/5/5 3886/2/6 +f 3886/2/6 3885/3/6 3889/6/5 +f 3891/8/4 3892/7/4 3890/5/5 +f 3890/5/5 3889/6/5 3891/8/4 +f 3893/11/3 3894/10/3 3892/9/4 +f 3892/9/4 3891/12/4 3893/11/3 +f 3895/14/2 3896/13/2 3894/10/3 +f 3894/10/3 3893/11/3 3895/14/2 +f 3897/16/1 3898/15/1 3896/13/2 +f 3896/13/2 3895/14/2 3897/16/1 +f 3899/18/12 3900/17/12 3898/15/1 +f 3898/15/1 3897/16/1 3899/18/12 +f 3901/20/11 3902/19/11 3900/17/12 +f 3900/17/12 3899/18/12 3901/20/11 +f 3903/22/10 3904/21/10 3902/19/11 +f 3902/19/11 3901/20/11 3903/22/10 +f 3905/24/9 3906/23/9 3904/21/10 +f 3904/21/10 3903/22/10 3905/24/9 +f 3907/26/8 3908/25/8 3906/23/9 +f 3906/23/9 3905/24/9 3907/26/8 +f 3888/4/7 3887/1/7 3908/25/8 +f 3908/25/8 3907/26/8 3888/4/7 +f 3909/27/18 3910/30/18 3911/29/18 +f 3911/29/18 3912/28/18 3909/27/18 +f 3913/31/17 3914/32/17 3910/30/17 +f 3910/30/17 3909/27/17 3913/31/17 +f 3915/33/16 3916/34/16 3914/32/16 +f 3914/32/16 3913/31/16 3915/33/16 +f 3917/35/15 3918/38/15 3916/37/15 +f 3916/37/15 3915/36/15 3917/35/15 +f 3919/39/14 3920/40/14 3918/38/14 +f 3918/38/14 3917/35/14 3919/39/14 +f 3921/41/13 3922/42/13 3920/40/13 +f 3920/40/13 3919/39/13 3921/41/13 +f 3923/43/24 3924/44/24 3922/42/24 +f 3922/42/24 3921/41/24 3923/43/24 +f 3925/45/23 3926/46/23 3924/44/23 +f 3924/44/23 3923/43/23 3925/45/23 +f 3927/47/22 3928/48/22 3926/46/22 +f 3926/46/22 3925/45/22 3927/47/22 +f 3929/49/21 3930/50/21 3928/48/21 +f 3928/48/21 3927/47/21 3929/49/21 +f 3931/51/20 3932/52/20 3930/50/20 +f 3930/50/20 3929/49/20 3931/51/20 +f 3912/28/19 3911/29/19 3932/52/19 +f 3932/52/19 3931/51/190 3912/28/19 +f 3886/53/26 3909/53/26 3912/54/26 +f 3912/54/26 3887/54/26 3886/53/26 +f 3887/54/26 3912/54/26 3931/55/26 +f 3931/55/26 3908/55/26 3887/54/26 +f 3908/55/26 3931/55/26 3929/56/26 +f 3929/56/26 3906/56/26 3908/55/26 +f 3906/56/26 3929/56/26 3927/57/26 +f 3927/57/26 3904/57/26 3906/56/26 +f 3904/57/26 3927/57/26 3925/59/26 +f 3925/59/26 3902/58/26 3904/57/26 +f 3902/58/26 3925/59/26 3923/61/26 +f 3923/61/26 3900/60/26 3902/58/26 +f 3900/60/26 3923/61/26 3921/62/26 +f 3921/62/26 3898/62/26 3900/60/26 +f 3898/62/26 3921/62/26 3919/64/26 +f 3919/64/26 3896/63/26 3898/62/26 +f 3896/63/26 3919/64/26 3917/66/26 +f 3917/66/26 3894/65/26 3896/63/26 +f 3894/65/26 3917/66/26 3915/67/26 +f 3915/67/26 3892/67/26 3894/65/26 +f 3892/67/26 3915/67/26 3913/68/26 +f 3913/68/26 3890/68/26 3892/67/26 +f 3890/68/26 3913/68/26 3909/53/26 +f 3909/53/26 3886/53/26 3890/68/26 +f 3933/54/27 3911/54/27 3910/53/27 +f 3910/53/27 3934/53/27 3933/54/27 +f 3934/53/27 3910/53/27 3914/68/27 +f 3914/68/27 3935/68/27 3934/53/27 +f 3935/68/27 3914/68/27 3916/67/27 +f 3916/67/27 3936/67/27 3935/68/27 +f 3936/67/27 3916/67/27 3918/66/27 +f 3918/66/27 3937/65/27 3936/67/27 +f 3937/65/27 3918/66/27 3920/64/27 +f 3920/64/27 3938/63/27 3937/65/27 +f 3938/63/27 3920/64/27 3922/62/27 +f 3922/62/27 3939/62/27 3938/63/27 +f 3939/62/27 3922/62/27 3924/61/27 +f 3924/61/27 3940/60/27 3939/62/27 +f 3940/60/27 3924/61/27 3926/59/27 +f 3926/59/27 3941/58/27 3940/60/27 +f 3941/58/27 3926/59/27 3928/57/27 +f 3928/57/27 3942/57/27 3941/58/27 +f 3942/57/27 3928/57/27 3930/56/27 +f 3930/56/27 3943/56/27 3942/57/27 +f 3943/56/27 3930/56/27 3932/55/27 +f 3932/55/27 3944/55/27 3943/56/27 +f 3944/55/27 3932/55/27 3911/54/27 +f 3911/54/27 3933/54/27 3944/55/27 +f 3945/71/6 3946/70/7 3933/69/7 +f 3933/69/7 3934/72/6 3945/71/6 +f 3947/73/17 3945/71/6 3934/72/6 +f 3934/72/6 3935/74/17 3947/73/17 +f 3948/75/16 3947/73/16 3935/74/16 +f 3935/74/16 3936/76/16 3948/75/16 +f 3949/77/3 3948/75/15 3936/76/15 +f 3936/76/15 3937/78/3 3949/77/3 +f 3950/79/2 3949/77/3 3937/78/3 +f 3937/78/3 3938/80/2 3950/79/2 +f 3951/83/1 3950/82/2 3938/81/2 +f 3938/81/2 3939/84/1 3951/83/1 +f 3952/85/12 3951/83/1 3939/84/1 +f 3939/84/1 3940/86/12 3952/85/12 +f 3953/87/11 3952/85/12 3940/86/12 +f 3940/86/12 3941/88/11 3953/87/11 +f 3954/89/10 3953/87/11 3941/88/11 +f 3941/88/11 3942/90/10 3954/89/10 +f 3955/91/9 3954/89/10 3942/90/10 +f 3942/90/10 3943/92/9 3955/91/9 +f 3956/93/8 3955/91/9 3943/92/9 +f 3943/92/9 3944/94/8 3956/93/8 +f 3946/70/7 3956/93/8 3944/94/8 +f 3944/94/8 3933/69/7 3946/70/7 +f 3957/95/26 3958/95/26 3959/96/26 +f 3959/96/26 3960/96/26 3957/95/26 +f 3961/97/26 3962/97/26 3958/95/26 +f 3958/95/26 3957/95/26 3961/97/26 +f 3963/67/26 3964/98/26 3962/97/26 +f 3962/97/26 3961/97/26 3963/67/26 +f 3965/99/26 3966/99/26 3964/98/26 +f 3964/98/26 3963/67/26 3965/99/26 +f 3967/100/26 3968/100/26 3966/99/26 +f 3966/99/26 3965/99/26 3967/100/26 +f 3969/101/26 3970/101/26 3968/100/26 +f 3968/100/26 3967/100/26 3969/101/26 +f 3971/61/26 3972/61/26 3970/101/26 +f 3970/101/26 3969/101/26 3971/61/26 +f 3973/59/26 3974/102/26 3972/61/26 +f 3972/61/26 3971/61/26 3973/59/26 +f 3975/103/26 3976/103/26 3974/102/26 +f 3974/102/26 3973/59/26 3975/103/26 +f 3977/104/26 3978/105/26 3976/103/26 +f 3976/103/26 3975/103/26 3977/104/26 +f 3979/106/26 3980/106/26 3978/105/26 +f 3978/105/26 3977/104/26 3979/106/26 +f 3960/96/26 3959/96/26 3980/106/26 +f 3980/106/26 3979/106/26 3960/96/26 +f 3958/107/33 3981/110/33 3982/109/33 +f 3982/109/33 3959/108/33 3958/107/33 +f 3962/111/32 3983/112/32 3981/110/32 +f 3981/110/32 3958/107/32 3962/111/32 +f 3964/113/31 3984/114/31 3983/112/31 +f 3983/112/31 3962/111/31 3964/113/31 +f 3966/115/30 3985/116/30 3984/114/30 +f 3984/114/30 3964/113/30 3966/115/30 +f 3968/117/29 3986/118/29 3985/116/29 +f 3985/116/29 3966/115/29 3968/117/29 +f 3970/119/28 3987/120/28 3986/118/28 +f 3986/118/28 3968/117/28 3970/119/28 +f 3972/121/39 3988/122/39 3987/120/39 +f 3987/120/39 3970/119/39 3972/121/39 +f 3974/123/38 3989/124/38 3988/122/38 +f 3988/122/38 3972/121/38 3974/123/38 +f 3976/125/37 3990/126/37 3989/124/37 +f 3989/124/37 3974/123/37 3976/125/37 +f 3978/127/36 3991/130/36 3990/129/36 +f 3990/129/36 3976/128/36 3978/127/36 +f 3980/131/35 3992/132/35 3991/130/35 +f 3991/130/35 3978/127/35 3980/131/35 +f 3959/108/34 3982/109/34 3992/132/34 +f 3992/132/34 3980/131/34 3959/108/34 +f 3981/110/46 3993/134/46 3994/133/46 +f 3994/133/46 3982/109/46 3981/110/46 +f 3983/112/45 3995/135/45 3993/134/45 +f 3993/134/45 3981/110/45 3983/112/45 +f 3984/114/44 3996/136/44 3995/135/44 +f 3995/135/44 3983/112/44 3984/114/44 +f 3985/116/42 3997/137/42 3996/136/43 +f 3996/136/43 3984/114/42 3985/116/42 +f 3986/118/41 3998/138/41 3997/137/41 +f 3997/137/41 3985/116/41 3986/118/41 +f 3987/120/40 3999/139/40 3998/138/40 +f 3998/138/40 3986/118/40 3987/120/40 +f 3988/122/55 4000/140/54 3999/139/54 +f 3999/139/54 3987/120/54 3988/122/55 +f 3989/124/53 4001/141/53 4000/140/53 +f 4000/140/53 3988/122/53 3989/124/53 +f 3990/126/51 4002/142/52 4001/141/51 +f 4001/141/51 3989/124/51 3990/126/51 +f 3991/130/50 4003/144/50 4002/143/50 +f 4002/143/50 3990/129/50 3991/130/50 +f 3992/132/49 4004/145/49 4003/144/49 +f 4003/144/49 3991/130/49 3992/132/49 +f 3982/109/48 3994/133/48 4004/145/48 +f 4004/145/48 3992/132/47 3982/109/48 +f 3945/148/63 4005/147/63 4006/146/63 +f 4006/146/63 3946/149/63 3945/148/63 +f 3947/151/62 4007/150/61 4005/147/61 +f 4005/147/61 3945/148/62 3947/151/62 +f 3948/154/60 4008/153/60 4007/152/60 +f 4007/152/60 3947/155/60 3948/154/60 +f 3949/156/59 4009/142/59 4008/153/59 +f 4008/153/59 3948/154/59 3949/156/59 +f 3950/158/58 4010/157/57 4009/142/57 +f 4009/142/57 3949/156/58 3950/158/58 +f 3951/160/56 4011/159/56 4010/157/56 +f 4010/157/56 3950/158/56 3951/160/56 +f 3952/162/71 4012/161/71 4011/159/71 +f 4011/159/71 3951/160/71 3952/162/71 +f 3953/164/69 4013/163/70 4012/161/70 +f 4012/161/70 3952/162/69 3953/164/69 +f 3954/166/68 4014/165/68 4013/163/68 +f 4013/163/68 3953/164/68 3954/166/68 +f 3955/168/67 4015/167/67 4014/165/67 +f 4014/165/67 3954/166/67 3955/168/67 +f 3956/170/66 4016/169/66 4015/167/66 +f 4015/167/66 3955/168/65 3956/170/66 +f 3946/149/64 4006/146/64 4016/169/64 +f 4016/169/64 3956/170/64 3946/149/64 +f 4005/173/6 3957/172/6 3960/171/7 +f 3960/171/7 4006/174/7 4005/173/6 +f 4007/176/5 3961/175/5 3957/172/6 +f 3957/172/6 4005/173/6 4007/176/5 +f 4008/179/4 3963/178/4 3961/177/5 +f 3961/177/5 4007/180/5 4008/179/4 +f 4009/181/3 3965/86/3 3963/178/4 +f 3963/178/4 4008/179/4 4009/181/3 +f 4010/183/2 3967/182/2 3965/86/3 +f 3965/86/3 4009/181/3 4010/183/2 +f 4011/185/1 3969/184/1 3967/182/2 +f 3967/182/2 4010/183/2 4011/185/1 +f 4012/187/12 3971/186/12 3969/184/1 +f 3969/184/1 4011/185/1 4012/187/12 +f 4013/189/11 3973/188/11 3971/186/12 +f 3971/186/12 4012/187/12 4013/189/11 +f 4014/191/10 3975/190/10 3973/188/11 +f 3973/188/11 4013/189/11 4014/191/10 +f 4015/192/9 3977/76/9 3975/190/10 +f 3975/190/10 4014/191/10 4015/192/9 +f 4016/194/8 3979/193/8 3977/76/9 +f 3977/76/9 4015/192/9 4016/194/8 +f 4006/174/7 3960/171/7 3979/193/8 +f 3979/193/8 4016/194/8 4006/174/7 +f 4017/195/443 4018/198/443 4019/197/443 +f 4019/197/443 4020/196/443 4017/195/443 +f 4021/199/390 4022/202/390 4023/201/390 +f 4023/201/390 4024/200/390 4021/199/390 +f 4025/203/444 4026/206/444 4027/205/444 +f 4027/205/444 4028/204/444 4025/203/444 +f 4029/202/388 4030/199/388 4031/200/388 +f 4031/200/388 4032/201/388 4029/202/388 +f 4033/207/398 4034/209/398 4035/208/398 +f 4035/208/398 4036/207/398 4033/207/398 +f 4037/209/445 4038/211/445 4039/210/445 +f 4028/212/446 4027/214/446 4040/213/446 +f 4040/213/446 4041/196/446 4028/212/446 +f 4042/210/447 4043/211/447 4044/209/447 +f 4045/215/448 4044/209/448 4043/211/448 +f 4043/211/448 4046/216/448 4045/215/448 +f 4047/217/449 4020/196/449 4019/197/449 +f 4019/197/449 4048/218/449 4047/217/449 +f 4049/219/451 4025/203/451 4028/204/451 +f 4028/204/451 4050/220/451 4049/219/451 +f 4051/209/391 4033/207/391 4036/207/391 +f 4036/207/391 4052/208/391 4051/209/391 +f 4028/212/452 4041/196/452 4053/213/452 +f 4053/213/452 4050/214/452 4028/212/452 +f 4045/215/453 4046/216/453 4038/211/453 +f 4038/211/453 4037/209/453 4045/215/453 +f 4054/221/388 4018/221/388 4017/222/388 +f 4017/222/388 4040/222/388 4054/221/388 +f 4040/222/402 4017/222/402 4020/203/402 +f 4020/203/402 4041/203/402 4040/222/402 +f 4041/203/401 4020/203/401 4047/206/401 +f 4047/206/401 4053/206/401 4041/203/401 +f 4053/206/390 4047/206/390 4048/223/390 +f 4048/223/390 4055/223/390 4053/206/390 +f 4055/224/454 4048/224/454 4019/226/454 +f 4019/226/454 4056/225/454 4055/224/454 +f 4056/225/455 4019/226/455 4018/224/455 +f 4018/224/455 4054/224/455 4056/225/455 +f 4050/214/447 4053/213/447 4055/228/447 +f 4055/228/447 4057/227/447 4050/214/447 +f 4057/229/388 4058/221/388 4049/219/388 +f 4049/219/388 4050/220/388 4057/229/388 +f 4026/206/390 4059/223/390 4060/230/390 +f 4060/230/390 4027/205/390 4026/206/390 +f 4060/227/445 4054/228/445 4040/213/445 +f 4040/213/445 4027/214/445 4060/227/445 +f 4023/201/390 4061/202/390 4062/199/390 +f 4062/199/390 4024/200/390 4023/201/390 +f 4060/231/456 4039/233/456 4038/232/456 +f 4038/232/456 4054/224/456 4060/231/456 +f 4054/224/455 4038/232/455 4046/234/455 +f 4046/234/455 4056/225/455 4054/224/455 +f 4056/225/454 4046/234/454 4043/232/454 +f 4043/232/454 4055/224/454 4056/225/454 +f 4055/224/457 4043/232/457 4042/233/457 +f 4042/233/457 4057/231/457 4055/224/457 +f 4031/200/388 4063/199/388 4064/202/388 +f 4064/202/388 4032/201/388 4031/200/388 +f 4035/208/398 4044/236/398 4045/235/398 +f 4045/235/398 4036/207/398 4035/208/398 +f 4036/207/391 4045/235/391 4037/236/391 +f 4037/236/391 4052/208/391 4036/207/391 +f 4059/236/27 4021/238/27 4024/237/27 +f 4024/237/27 4060/231/27 4059/236/27 +f 4060/231/27 4024/237/27 4062/239/27 +f 4062/239/27 4039/233/27 4060/231/27 +f 4039/210/484 4062/241/484 4061/240/484 +f 4061/240/484 4037/209/484 4039/210/484 +f 4037/236/26 4061/238/26 4023/242/26 +f 4023/242/26 4052/208/26 4037/236/26 +f 4052/208/26 4023/242/26 4022/240/26 +f 4022/240/26 4051/209/26 4052/208/26 +f 4034/209/26 4029/240/26 4032/242/26 +f 4032/242/26 4035/208/26 4034/209/26 +f 4035/208/26 4032/242/26 4064/238/26 +f 4064/238/26 4044/236/26 4035/208/26 +f 4044/209/459 4064/240/459 4063/241/459 +f 4063/241/459 4042/210/459 4044/209/459 +f 4042/233/27 4063/239/27 4031/237/27 +f 4031/237/27 4057/231/27 4042/233/27 +f 4057/231/27 4031/237/27 4030/238/27 +f 4030/238/27 4058/236/27 4057/231/27 +f 4065/195/4 4066/198/4 4067/197/4 +f 4067/197/4 4068/196/4 4065/195/4 +f 4069/199/416 4070/202/416 4071/201/415 +f 4071/201/415 4072/200/415 4069/199/416 +f 4073/203/421 4074/206/421 4075/205/421 +f 4075/205/421 4076/204/421 4073/203/421 +f 4077/202/413 4078/199/413 4079/200/412 +f 4079/200/412 4080/201/412 4077/202/413 +f 4081/207/466 4082/209/466 4083/208/466 +f 4083/208/466 4084/207/466 4081/207/466 +f 4085/209/107 4086/211/107 4087/210/107 +f 4076/212/467 4075/214/467 4088/213/467 +f 4088/213/467 4089/196/467 4076/212/467 +f 4090/210/468 4091/211/468 4092/209/468 +f 4093/215/469 4092/209/469 4091/211/469 +f 4091/211/469 4094/216/469 4093/215/469 +f 4095/217/103 4068/196/103 4067/197/103 +f 4067/197/103 4096/218/103 4095/217/103 +f 4097/219/414 4073/203/414 4076/204/414 +f 4076/204/414 4098/220/414 4097/219/414 +f 4099/209/471 4081/207/471 4084/207/471 +f 4084/207/471 4100/208/471 4099/209/471 +f 4076/212/472 4089/196/472 4101/213/472 +f 4101/213/472 4098/214/472 4076/212/472 +f 4093/215/332 4094/216/332 4086/211/332 +f 4086/211/332 4085/209/332 4093/215/332 +f 4102/221/413 4066/221/412 4065/222/412 +f 4065/222/412 4088/222/413 4102/221/413 +f 4088/222/426 4065/222/426 4068/203/426 +f 4068/203/426 4089/203/426 4088/222/426 +f 4089/203/425 4068/203/425 4095/206/425 +f 4095/206/425 4101/206/425 4089/203/425 +f 4101/206/415 4095/206/415 4096/223/415 +f 4096/223/415 4103/223/415 4101/206/415 +f 4103/224/473 4096/224/473 4067/226/473 +f 4067/226/473 4104/225/473 4103/224/473 +f 4104/225/430 4067/226/430 4066/224/430 +f 4066/224/430 4102/224/430 4104/225/430 +f 4098/214/468 4101/213/468 4103/228/468 +f 4103/228/468 4105/227/468 4098/214/468 +f 4105/229/413 4106/221/413 4097/219/413 +f 4097/219/413 4098/220/413 4105/229/413 +f 4074/206/415 4107/223/415 4108/230/415 +f 4108/230/415 4075/205/415 4074/206/415 +f 4108/227/107 4102/228/107 4088/213/107 +f 4088/213/107 4075/214/107 4108/227/107 +f 4071/201/415 4109/202/416 4110/199/416 +f 4110/199/416 4072/200/415 4071/201/415 +f 4108/231/485 4087/233/485 4086/232/485 +f 4086/232/485 4102/224/485 4108/231/485 +f 4102/224/430 4086/232/430 4094/234/430 +f 4094/234/430 4104/225/430 4102/224/430 +f 4104/225/473 4094/234/473 4091/232/473 +f 4091/232/473 4103/224/473 4104/225/473 +f 4103/224/428 4091/232/428 4090/233/428 +f 4090/233/428 4105/231/428 4103/224/428 +f 4079/200/412 4111/199/413 4112/202/413 +f 4112/202/413 4080/201/412 4079/200/412 +f 4083/208/466 4092/236/466 4093/235/466 +f 4093/235/466 4084/207/466 4083/208/466 +f 4084/207/471 4093/235/471 4085/236/471 +f 4085/236/471 4100/208/471 4084/207/471 +f 4107/236/27 4069/238/27 4072/237/27 +f 4072/237/27 4108/231/27 4107/236/27 +f 4108/231/27 4072/237/27 4110/239/27 +f 4110/239/27 4087/233/27 4108/231/27 +f 4087/210/193 4110/241/193 4109/240/193 +f 4109/240/193 4085/209/193 4087/210/193 +f 4085/236/26 4109/238/26 4071/242/26 +f 4071/242/26 4100/208/26 4085/236/26 +f 4100/208/26 4071/242/26 4070/240/26 +f 4070/240/26 4099/209/26 4100/208/26 +f 4082/209/26 4077/240/26 4080/242/26 +f 4080/242/26 4083/208/26 4082/209/26 +f 4083/208/26 4080/242/26 4112/238/26 +f 4112/238/26 4092/236/26 4083/208/26 +f 4092/209/475 4112/240/475 4111/241/475 +f 4111/241/475 4090/210/475 4092/209/475 +f 4090/233/27 4111/239/27 4079/237/27 +f 4079/237/27 4105/231/27 4090/233/27 +f 4105/231/27 4079/237/27 4078/238/27 +f 4078/238/27 4106/236/27 4105/231/27 +f 4113/243/476 4114/246/476 4115/245/476 +f 4115/245/476 4116/244/476 4113/243/476 +f 4113/247/477 4117/250/477 4118/249/477 +f 4118/249/477 4114/248/477 4113/247/477 +f 4114/246/478 4118/252/478 4119/251/478 +f 4119/251/478 4115/245/478 4114/246/478 +f 4115/248/479 4119/249/479 4120/250/479 +f 4120/250/479 4116/247/479 4115/248/479 +f 4121/195/464 4122/198/464 4123/197/464 +f 4123/197/464 4124/196/464 4121/195/464 +f 4125/199/416 4126/202/416 4127/201/415 +f 4127/201/415 4128/200/415 4125/199/416 +f 4129/203/421 4130/206/421 4131/205/421 +f 4131/205/421 4132/204/421 4129/203/421 +f 4133/202/413 4134/199/413 4135/200/412 +f 4135/200/412 4136/201/412 4133/202/413 +f 4137/207/466 4138/209/466 4139/208/466 +f 4139/208/466 4140/207/466 4137/207/466 +f 4141/209/107 4142/211/107 4143/210/107 +f 4132/212/467 4131/214/467 4144/213/467 +f 4144/213/467 4145/196/467 4132/212/467 +f 4146/210/468 4147/211/468 4148/209/468 +f 4149/215/469 4148/209/469 4147/211/469 +f 4147/211/469 4150/216/469 4149/215/469 +f 4151/217/103 4124/196/103 4123/197/103 +f 4123/197/103 4152/218/103 4151/217/103 +f 4153/219/470 4129/203/414 4132/204/414 +f 4132/204/414 4154/220/470 4153/219/470 +f 4155/209/471 4137/207/471 4140/207/471 +f 4140/207/471 4156/208/471 4155/209/471 +f 4132/212/472 4145/196/472 4157/213/472 +f 4157/213/472 4154/214/472 4132/212/472 +f 4149/215/332 4150/216/332 4142/211/332 +f 4142/211/332 4141/209/332 4149/215/332 +f 4158/221/413 4122/221/413 4121/222/413 +f 4121/222/413 4144/222/413 4158/221/413 +f 4144/222/426 4121/222/426 4124/203/426 +f 4124/203/426 4145/203/426 4144/222/426 +f 4145/203/425 4124/203/425 4151/206/425 +f 4151/206/425 4157/206/425 4145/203/425 +f 4157/206/415 4151/206/415 4152/223/415 +f 4152/223/415 4159/223/415 4157/206/415 +f 4159/224/473 4152/224/473 4123/226/473 +f 4123/226/473 4160/225/473 4159/224/473 +f 4160/225/430 4123/226/430 4122/224/430 +f 4122/224/430 4158/224/430 4160/225/430 +f 4154/214/468 4157/213/468 4159/228/468 +f 4159/228/468 4161/227/468 4154/214/468 +f 4161/229/437 4162/221/412 4153/219/412 +f 4153/219/412 4154/220/437 4161/229/437 +f 4130/206/415 4163/223/415 4164/230/416 +f 4164/230/416 4131/205/416 4130/206/415 +f 4164/227/107 4158/228/107 4144/213/107 +f 4144/213/107 4131/214/107 4164/227/107 +f 4127/201/415 4165/202/416 4166/199/416 +f 4166/199/416 4128/200/415 4127/201/415 +f 4164/231/485 4143/233/485 4142/232/485 +f 4142/232/485 4158/224/485 4164/231/485 +f 4158/224/430 4142/232/430 4150/234/430 +f 4150/234/430 4160/225/430 4158/224/430 +f 4160/225/473 4150/234/473 4147/232/473 +f 4147/232/473 4159/224/473 4160/225/473 +f 4159/224/428 4147/232/428 4146/233/428 +f 4146/233/428 4161/231/428 4159/224/428 +f 4135/200/412 4167/199/413 4168/202/413 +f 4168/202/413 4136/201/412 4135/200/412 +f 4139/208/466 4148/236/466 4149/235/466 +f 4149/235/466 4140/207/466 4139/208/466 +f 4140/207/471 4149/235/471 4141/236/471 +f 4141/236/471 4156/208/471 4140/207/471 +f 4163/236/27 4125/238/27 4128/237/27 +f 4128/237/27 4164/231/27 4163/236/27 +f 4164/231/27 4128/237/27 4166/239/27 +f 4166/239/27 4143/233/27 4164/231/27 +f 4143/210/193 4166/241/193 4165/240/193 +f 4165/240/193 4141/209/193 4143/210/193 +f 4141/236/26 4165/238/26 4127/242/26 +f 4127/242/26 4156/208/26 4141/236/26 +f 4156/208/26 4127/242/26 4126/240/26 +f 4126/240/26 4155/209/26 4156/208/26 +f 4138/209/26 4133/240/26 4136/242/26 +f 4136/242/26 4139/208/26 4138/209/26 +f 4139/208/26 4136/242/26 4168/238/26 +f 4168/238/26 4148/236/26 4139/208/26 +f 4148/209/475 4168/240/475 4167/241/475 +f 4167/241/475 4146/210/475 4148/209/475 +f 4146/233/27 4167/239/27 4135/237/27 +f 4135/237/27 4161/231/27 4146/233/27 +f 4161/231/27 4135/237/27 4134/238/27 +f 4134/238/27 4162/236/27 4161/231/27 +f 4169/243/460 4170/246/460 4171/245/460 +f 4171/245/460 4172/244/460 4169/243/460 +f 4169/247/461 4173/250/461 4174/249/461 +f 4174/249/461 4170/248/461 4169/247/461 +f 4170/246/462 4174/252/462 4175/251/462 +f 4175/251/462 4171/245/462 4170/246/462 +f 4171/248/463 4175/249/463 4176/250/463 +f 4176/250/463 4172/247/463 4171/248/463 +f 4177/195/387 4178/198/387 4179/197/387 +f 4179/197/387 4180/196/387 4177/195/387 +f 4181/199/388 4182/202/388 4183/201/388 +f 4183/201/388 4184/200/388 4181/199/388 +f 4185/203/389 4186/206/389 4187/205/389 +f 4187/205/389 4188/204/389 4185/203/389 +f 4189/202/390 4190/199/390 4191/200/390 +f 4191/200/390 4192/201/390 4189/202/390 +f 4193/207/391 4194/209/391 4195/208/391 +f 4195/208/391 4196/207/391 4193/207/391 +f 4197/209/392 4198/211/392 4199/210/392 +f 4188/212/393 4187/214/393 4200/213/393 +f 4200/213/393 4201/196/393 4188/212/393 +f 4202/210/394 4203/211/394 4204/209/394 +f 4205/215/395 4204/209/395 4203/211/395 +f 4203/211/395 4206/216/395 4205/215/395 +f 4207/217/396 4180/196/486 4179/197/486 +f 4179/197/486 4208/218/396 4207/217/396 +f 4209/219/397 4185/203/397 4188/204/397 +f 4188/204/397 4210/220/397 4209/219/397 +f 4211/209/398 4193/207/398 4196/207/398 +f 4196/207/398 4212/208/398 4211/209/398 +f 4188/212/399 4201/196/399 4213/213/399 +f 4213/213/399 4210/214/399 4188/212/399 +f 4205/215/400 4206/216/400 4198/211/400 +f 4198/211/400 4197/209/400 4205/215/400 +f 4214/221/390 4178/221/390 4177/222/390 +f 4177/222/390 4200/222/390 4214/221/390 +f 4200/222/401 4177/222/401 4180/203/401 +f 4180/203/401 4201/203/401 4200/222/401 +f 4201/203/402 4180/203/402 4207/206/402 +f 4207/206/402 4213/206/402 4201/203/402 +f 4213/206/388 4207/206/388 4208/223/388 +f 4208/223/388 4215/223/388 4213/206/388 +f 4215/224/403 4208/224/403 4179/226/403 +f 4179/226/403 4216/225/403 4215/224/403 +f 4216/225/404 4179/226/404 4178/224/404 +f 4178/224/404 4214/224/404 4216/225/404 +f 4210/214/394 4213/213/394 4215/228/394 +f 4215/228/394 4217/227/394 4210/214/394 +f 4217/229/390 4218/221/390 4209/219/390 +f 4209/219/390 4210/220/390 4217/229/390 +f 4186/206/388 4219/223/388 4220/230/388 +f 4220/230/388 4187/205/388 4186/206/388 +f 4220/227/392 4214/228/392 4200/213/392 +f 4200/213/392 4187/214/392 4220/227/392 +f 4183/201/388 4221/202/388 4222/199/388 +f 4222/199/388 4184/200/388 4183/201/388 +f 4220/231/405 4199/233/405 4198/232/405 +f 4198/232/405 4214/224/405 4220/231/405 +f 4214/224/404 4198/232/404 4206/234/404 +f 4206/234/404 4216/225/404 4214/224/404 +f 4216/225/403 4206/234/403 4203/232/403 +f 4203/232/403 4215/224/403 4216/225/403 +f 4215/224/407 4203/232/407 4202/233/407 +f 4202/233/407 4217/231/407 4215/224/407 +f 4191/200/390 4223/199/390 4224/202/390 +f 4224/202/390 4192/201/390 4191/200/390 +f 4195/208/391 4204/236/391 4205/235/391 +f 4205/235/391 4196/207/391 4195/208/391 +f 4196/207/398 4205/235/398 4197/236/398 +f 4197/236/398 4212/208/398 4196/207/398 +f 4219/236/27 4181/238/27 4184/237/27 +f 4184/237/27 4220/231/27 4219/236/27 +f 4220/231/27 4184/237/27 4222/239/27 +f 4222/239/27 4199/233/27 4220/231/27 +f 4199/210/409 4222/241/409 4221/240/409 +f 4221/240/409 4197/209/409 4199/210/409 +f 4197/236/26 4221/238/26 4183/242/26 +f 4183/242/26 4212/208/26 4197/236/26 +f 4212/208/26 4183/242/26 4182/240/26 +f 4182/240/26 4211/209/26 4212/208/26 +f 4194/209/26 4189/240/26 4192/242/26 +f 4192/242/26 4195/208/26 4194/209/26 +f 4195/208/26 4192/242/26 4224/238/26 +f 4224/238/26 4204/236/26 4195/208/26 +f 4204/209/410 4224/240/410 4223/241/410 +f 4223/241/410 4202/210/410 4204/209/410 +f 4202/233/27 4223/239/27 4191/237/27 +f 4191/237/27 4217/231/27 4202/233/27 +f 4217/231/27 4191/237/27 4190/238/27 +f 4190/238/27 4218/236/27 4217/231/27 +f 4225/243/148 4226/246/148 4227/245/148 +f 4227/245/148 4228/244/148 4225/243/148 +f 4225/247/7 4229/250/7 4230/249/7 +f 4230/249/7 4226/248/7 4225/247/7 +f 4226/246/149 4230/252/149 4231/251/149 +f 4231/251/149 4227/245/149 4226/246/149 +f 4227/248/1 4231/249/1 4232/250/1 +f 4232/250/1 4228/247/1 4227/248/1 +f 4233/243/187 4234/246/187 4235/245/187 +f 4235/245/187 4236/244/187 4233/243/187 +f 4233/247/161 4237/250/161 4238/249/161 +f 4238/249/161 4234/248/161 4233/247/161 +f 4234/246/188 4238/252/188 4239/251/188 +f 4239/251/188 4235/245/188 4234/246/188 +f 4235/248/163 4239/249/163 4240/250/163 +f 4240/250/163 4236/247/163 4235/248/163 +f 4241/243/154 4242/246/154 4243/245/154 +f 4243/245/154 4244/244/154 4241/243/154 +f 4241/247/1 4245/250/1 4246/249/1 +f 4246/249/1 4242/248/1 4241/247/1 +f 4242/246/155 4246/252/155 4247/251/155 +f 4247/251/155 4243/245/155 4242/246/155 +f 4243/248/7 4247/249/7 4248/250/7 +f 4248/250/7 4244/247/7 4243/248/7 +f 4249/243/439 4250/246/439 4251/245/439 +f 4251/245/439 4252/244/439 4249/243/439 +f 4249/247/440 4253/250/440 4254/249/440 +f 4254/249/440 4250/248/440 4249/247/440 +f 4250/246/441 4254/252/441 4255/251/441 +f 4255/251/441 4251/245/441 4250/246/441 +f 4251/248/442 4255/249/442 4256/250/442 +f 4256/250/442 4252/247/442 4251/248/442 +f 4257/243/180 4258/246/180 4259/245/180 +f 4259/245/180 4260/244/180 4257/243/180 +f 4257/247/151 4261/250/151 4262/249/151 +f 4262/249/151 4258/248/151 4257/247/151 +f 4258/246/181 4262/252/181 4263/251/181 +f 4263/251/181 4259/245/181 4258/246/181 +f 4259/248/153 4263/249/153 4264/250/153 +f 4264/250/153 4260/247/153 4259/248/153 +f 4265/195/387 4266/198/387 4267/197/387 +f 4267/197/387 4268/196/387 4265/195/387 +f 4269/199/388 4270/202/388 4271/201/388 +f 4271/201/388 4272/200/388 4269/199/388 +f 4273/203/389 4274/206/389 4275/205/389 +f 4275/205/389 4276/204/389 4273/203/389 +f 4277/202/390 4278/199/390 4279/200/390 +f 4279/200/390 4280/201/390 4277/202/390 +f 4281/207/391 4282/209/391 4283/208/391 +f 4283/208/391 4284/207/391 4281/207/391 +f 4285/209/392 4286/211/392 4287/210/392 +f 4276/212/393 4275/214/393 4288/213/393 +f 4288/213/393 4289/196/393 4276/212/393 +f 4290/210/394 4291/211/394 4292/209/394 +f 4293/215/395 4292/209/395 4291/211/395 +f 4291/211/395 4294/216/395 4293/215/395 +f 4295/217/396 4268/196/486 4267/197/486 +f 4267/197/486 4296/218/396 4295/217/396 +f 4297/219/397 4273/203/397 4276/204/397 +f 4276/204/397 4298/220/397 4297/219/397 +f 4299/209/398 4281/207/398 4284/207/398 +f 4284/207/398 4300/208/398 4299/209/398 +f 4276/212/399 4289/196/399 4301/213/399 +f 4301/213/399 4298/214/399 4276/212/399 +f 4293/215/400 4294/216/400 4286/211/400 +f 4286/211/400 4285/209/400 4293/215/400 +f 4302/221/390 4266/221/390 4265/222/390 +f 4265/222/390 4288/222/390 4302/221/390 +f 4288/222/401 4265/222/401 4268/203/401 +f 4268/203/401 4289/203/401 4288/222/401 +f 4289/203/402 4268/203/402 4295/206/402 +f 4295/206/402 4301/206/402 4289/203/402 +f 4301/206/388 4295/206/388 4296/223/388 +f 4296/223/388 4303/223/388 4301/206/388 +f 4303/224/403 4296/224/403 4267/226/403 +f 4267/226/403 4304/225/403 4303/224/403 +f 4304/225/404 4267/226/404 4266/224/404 +f 4266/224/404 4302/224/404 4304/225/404 +f 4298/214/394 4301/213/394 4303/228/394 +f 4303/228/394 4305/227/394 4298/214/394 +f 4305/229/390 4306/221/390 4297/219/390 +f 4297/219/390 4298/220/390 4305/229/390 +f 4274/206/388 4307/223/388 4308/230/388 +f 4308/230/388 4275/205/388 4274/206/388 +f 4308/227/392 4302/228/392 4288/213/392 +f 4288/213/392 4275/214/392 4308/227/392 +f 4271/201/388 4309/202/388 4310/199/388 +f 4310/199/388 4272/200/388 4271/201/388 +f 4308/231/405 4287/233/405 4286/232/405 +f 4286/232/405 4302/224/405 4308/231/405 +f 4302/224/404 4286/232/404 4294/234/404 +f 4294/234/404 4304/225/404 4302/224/404 +f 4304/225/403 4294/234/403 4291/232/403 +f 4291/232/403 4303/224/403 4304/225/403 +f 4303/224/407 4291/232/407 4290/233/407 +f 4290/233/407 4305/231/407 4303/224/407 +f 4279/200/390 4311/199/390 4312/202/390 +f 4312/202/390 4280/201/390 4279/200/390 +f 4283/208/391 4292/236/391 4293/235/391 +f 4293/235/391 4284/207/391 4283/208/391 +f 4284/207/398 4293/235/398 4285/236/398 +f 4285/236/398 4300/208/398 4284/207/398 +f 4307/236/27 4269/238/27 4272/237/27 +f 4272/237/27 4308/231/27 4307/236/27 +f 4308/231/27 4272/237/27 4310/239/27 +f 4310/239/27 4287/233/27 4308/231/27 +f 4287/210/409 4310/241/409 4309/240/409 +f 4309/240/409 4285/209/409 4287/210/409 +f 4285/236/26 4309/238/26 4271/242/26 +f 4271/242/26 4300/208/26 4285/236/26 +f 4300/208/26 4271/242/26 4270/240/26 +f 4270/240/26 4299/209/26 4300/208/26 +f 4282/209/26 4277/240/26 4280/242/26 +f 4280/242/26 4283/208/26 4282/209/26 +f 4283/208/26 4280/242/26 4312/238/26 +f 4312/238/26 4292/236/26 4283/208/26 +f 4292/209/410 4312/240/410 4311/241/410 +f 4311/241/410 4290/210/410 4292/209/410 +f 4290/233/27 4311/239/27 4279/237/27 +f 4279/237/27 4305/231/27 4290/233/27 +f 4305/231/27 4279/237/27 4278/238/27 +f 4278/238/27 4306/236/27 4305/231/27 +f 4313/195/436 4314/198/436 4315/197/411 +f 4315/197/411 4316/196/411 4313/195/436 +f 4317/199/437 4318/202/437 4319/201/437 +f 4319/201/437 4320/200/437 4317/199/437 +f 4321/203/414 4322/206/414 4323/205/414 +f 4323/205/414 4324/204/414 4321/203/414 +f 4325/202/465 4326/199/465 4327/200/465 +f 4327/200/465 4328/201/465 4325/202/465 +f 4329/207/417 4330/209/417 4331/208/417 +f 4331/208/417 4332/207/417 4329/207/417 +f 4333/209/171 4334/211/171 4335/210/171 +f 4324/212/418 4323/214/418 4336/213/418 +f 4336/213/418 4337/196/418 4324/212/418 +f 4338/210/419 4339/211/419 4340/209/419 +f 4341/215/420 4340/209/420 4339/211/420 +f 4339/211/420 4342/216/420 4341/215/420 +f 4343/217/167 4316/196/167 4315/197/167 +f 4315/197/167 4344/218/167 4343/217/167 +f 4345/219/438 4321/203/421 4324/204/421 +f 4324/204/421 4346/220/421 4345/219/438 +f 4347/209/422 4329/207/422 4332/207/422 +f 4332/207/422 4348/208/422 4347/209/422 +f 4324/212/423 4337/196/423 4349/213/423 +f 4349/213/423 4346/214/423 4324/212/423 +f 4341/215/424 4342/216/424 4334/211/424 +f 4334/211/424 4333/209/424 4341/215/424 +f 4350/221/465 4314/221/465 4313/222/465 +f 4313/222/465 4336/222/465 4350/221/465 +f 4336/222/425 4313/222/425 4316/203/425 +f 4316/203/425 4337/203/425 4336/222/425 +f 4337/203/426 4316/203/426 4343/206/426 +f 4343/206/426 4349/206/426 4337/203/426 +f 4349/206/437 4343/206/437 4344/223/437 +f 4344/223/437 4351/223/437 4349/206/437 +f 4351/224/427 4344/224/427 4315/226/427 +f 4315/226/427 4352/225/427 4351/224/427 +f 4352/225/428 4315/226/428 4314/224/428 +f 4314/224/428 4350/224/428 4352/225/428 +f 4346/214/419 4349/213/419 4351/228/419 +f 4351/228/419 4353/227/419 4346/214/419 +f 4353/229/465 4354/221/465 4345/219/465 +f 4345/219/465 4346/220/465 4353/229/465 +f 4322/206/437 4355/223/437 4356/230/437 +f 4356/230/437 4323/205/437 4322/206/437 +f 4356/227/171 4350/228/171 4336/213/171 +f 4336/213/171 4323/214/171 4356/227/171 +f 4319/201/437 4357/202/437 4358/199/437 +f 4358/199/437 4320/200/437 4319/201/437 +f 4356/231/487 4335/233/487 4334/232/487 +f 4334/232/487 4350/224/487 4356/231/487 +f 4350/224/428 4334/232/428 4342/234/428 +f 4342/234/428 4352/225/428 4350/224/428 +f 4352/225/427 4342/234/427 4339/232/427 +f 4339/232/427 4351/224/427 4352/225/427 +f 4351/224/430 4339/232/430 4338/233/430 +f 4338/233/430 4353/231/430 4351/224/430 +f 4327/200/465 4359/199/465 4360/202/465 +f 4360/202/465 4328/201/465 4327/200/465 +f 4331/208/417 4340/236/417 4341/235/417 +f 4341/235/417 4332/207/417 4331/208/417 +f 4332/207/422 4341/235/422 4333/236/422 +f 4333/236/422 4348/208/422 4332/207/422 +f 4355/236/27 4317/238/27 4320/237/27 +f 4320/237/27 4356/231/27 4355/236/27 +f 4356/231/27 4320/237/27 4358/239/27 +f 4358/239/27 4335/233/27 4356/231/27 +f 4335/210/191 4358/241/191 4357/240/191 +f 4357/240/191 4333/209/191 4335/210/191 +f 4333/236/26 4357/238/26 4319/242/26 +f 4319/242/26 4348/208/26 4333/236/26 +f 4348/208/26 4319/242/26 4318/240/26 +f 4318/240/26 4347/209/26 4348/208/26 +f 4330/209/26 4325/240/26 4328/242/26 +f 4328/242/26 4331/208/26 4330/209/26 +f 4331/208/26 4328/242/26 4360/238/26 +f 4360/238/26 4340/236/26 4331/208/26 +f 4340/209/431 4360/240/431 4359/241/431 +f 4359/241/431 4338/210/431 4340/209/431 +f 4338/233/27 4359/239/27 4327/237/27 +f 4327/237/27 4353/231/27 4338/233/27 +f 4353/231/27 4327/237/27 4326/238/27 +f 4326/238/27 4354/236/27 4353/231/27 +f 4361/243/160 4362/246/160 4363/245/160 +f 4363/245/160 4364/244/160 4361/243/160 +f 4361/247/163 4365/250/163 4366/249/163 +f 4366/249/163 4362/248/163 4361/247/163 +f 4362/246/162 4366/252/162 4367/251/162 +f 4367/251/162 4363/245/162 4362/246/162 +f 4363/248/161 4367/249/161 4368/250/161 +f 4368/250/161 4364/247/161 4363/248/161 +f 4369/195/411 4370/198/411 4371/197/436 +f 4371/197/436 4372/196/436 4369/195/411 +f 4373/199/437 4374/202/437 4375/201/437 +f 4375/201/437 4376/200/437 4373/199/437 +f 4377/203/414 4378/206/414 4379/205/414 +f 4379/205/414 4380/204/414 4377/203/414 +f 4381/202/465 4382/199/465 4383/200/465 +f 4383/200/465 4384/201/465 4381/202/465 +f 4385/207/417 4386/209/417 4387/208/417 +f 4387/208/417 4388/207/417 4385/207/417 +f 4389/209/171 4390/211/171 4391/210/171 +f 4380/212/418 4379/214/418 4392/213/418 +f 4392/213/418 4393/196/418 4380/212/418 +f 4394/210/419 4395/211/419 4396/209/419 +f 4397/215/420 4396/209/420 4395/211/420 +f 4395/211/420 4398/216/420 4397/215/420 +f 4399/217/167 4372/196/167 4371/197/167 +f 4371/197/167 4400/218/167 4399/217/167 +f 4401/219/421 4377/203/421 4380/204/438 +f 4380/204/438 4402/220/421 4401/219/421 +f 4403/209/422 4385/207/422 4388/207/422 +f 4388/207/422 4404/208/422 4403/209/422 +f 4380/212/423 4393/196/423 4405/213/423 +f 4405/213/423 4402/214/423 4380/212/423 +f 4397/215/424 4398/216/424 4390/211/424 +f 4390/211/424 4389/209/424 4397/215/424 +f 4406/221/465 4370/221/465 4369/222/465 +f 4369/222/465 4392/222/465 4406/221/465 +f 4392/222/425 4369/222/425 4372/203/425 +f 4372/203/425 4393/203/425 4392/222/425 +f 4393/203/426 4372/203/426 4399/206/426 +f 4399/206/426 4405/206/426 4393/203/426 +f 4405/206/437 4399/206/437 4400/223/437 +f 4400/223/437 4407/223/437 4405/206/437 +f 4407/224/427 4400/224/427 4371/226/427 +f 4371/226/427 4408/225/427 4407/224/427 +f 4408/225/428 4371/226/428 4370/224/428 +f 4370/224/428 4406/224/428 4408/225/428 +f 4402/214/419 4405/213/419 4407/228/419 +f 4407/228/419 4409/227/419 4402/214/419 +f 4409/229/465 4410/221/465 4401/219/465 +f 4401/219/465 4402/220/465 4409/229/465 +f 4378/206/437 4411/223/437 4412/230/437 +f 4412/230/437 4379/205/437 4378/206/437 +f 4412/227/171 4406/228/171 4392/213/171 +f 4392/213/171 4379/214/171 4412/227/171 +f 4375/201/437 4413/202/437 4414/199/437 +f 4414/199/437 4376/200/437 4375/201/437 +f 4412/231/487 4391/233/487 4390/232/487 +f 4390/232/487 4406/224/487 4412/231/487 +f 4406/224/428 4390/232/428 4398/234/428 +f 4398/234/428 4408/225/428 4406/224/428 +f 4408/225/427 4398/234/427 4395/232/427 +f 4395/232/427 4407/224/427 4408/225/427 +f 4407/224/430 4395/232/430 4394/233/430 +f 4394/233/430 4409/231/430 4407/224/430 +f 4383/200/465 4415/199/465 4416/202/465 +f 4416/202/465 4384/201/465 4383/200/465 +f 4387/208/417 4396/236/417 4397/235/417 +f 4397/235/417 4388/207/417 4387/208/417 +f 4388/207/422 4397/235/422 4389/236/422 +f 4389/236/422 4404/208/422 4388/207/422 +f 4411/236/27 4373/238/27 4376/237/27 +f 4376/237/27 4412/231/27 4411/236/27 +f 4412/231/27 4376/237/27 4414/239/27 +f 4414/239/27 4391/233/27 4412/231/27 +f 4391/210/191 4414/241/191 4413/240/191 +f 4413/240/191 4389/209/191 4391/210/191 +f 4389/236/26 4413/238/26 4375/242/26 +f 4375/242/26 4404/208/26 4389/236/26 +f 4404/208/26 4375/242/26 4374/240/26 +f 4374/240/26 4403/209/26 4404/208/26 +f 4386/209/26 4381/240/26 4384/242/26 +f 4384/242/26 4387/208/26 4386/209/26 +f 4387/208/26 4384/242/26 4416/238/26 +f 4416/238/26 4396/236/26 4387/208/26 +f 4396/209/431 4416/240/431 4415/241/431 +f 4415/241/431 4394/210/431 4396/209/431 +f 4394/233/27 4415/239/27 4383/237/27 +f 4383/237/27 4409/231/27 4394/233/27 +f 4409/231/27 4383/237/27 4382/238/27 +f 4382/238/27 4410/236/27 4409/231/27 +f 4417/243/432 4418/246/432 4419/245/432 +f 4419/245/432 4420/244/432 4417/243/432 +f 4417/247/433 4421/250/433 4422/249/433 +f 4422/249/433 4418/248/433 4417/247/433 +f 4418/246/434 4422/252/434 4423/251/434 +f 4423/251/434 4419/245/434 4418/246/434 +f 4419/248/435 4423/249/435 4424/250/435 +f 4424/250/435 4420/247/435 4419/248/435 +f 4425/195/443 4426/198/443 4427/197/443 +f 4427/197/443 4428/196/443 4425/195/443 +f 4429/199/390 4430/202/390 4431/201/390 +f 4431/201/390 4432/200/390 4429/199/390 +f 4433/203/444 4434/206/444 4435/205/444 +f 4435/205/444 4436/204/444 4433/203/444 +f 4437/202/388 4438/199/388 4439/200/388 +f 4439/200/388 4440/201/388 4437/202/388 +f 4441/207/398 4442/209/398 4443/208/398 +f 4443/208/398 4444/207/398 4441/207/398 +f 4445/209/445 4446/211/445 4447/210/445 +f 4436/212/446 4435/214/446 4448/213/446 +f 4448/213/446 4449/196/446 4436/212/446 +f 4450/210/447 4451/211/447 4452/209/447 +f 4453/215/448 4452/209/448 4451/211/448 +f 4451/211/448 4454/216/448 4453/215/448 +f 4455/217/449 4428/196/449 4427/197/449 +f 4427/197/449 4456/218/449 4455/217/449 +f 4457/219/451 4433/203/451 4436/204/451 +f 4436/204/451 4458/220/451 4457/219/451 +f 4459/209/391 4441/207/391 4444/207/391 +f 4444/207/391 4460/208/391 4459/209/391 +f 4436/212/452 4449/196/452 4461/213/452 +f 4461/213/452 4458/214/452 4436/212/452 +f 4453/215/453 4454/216/453 4446/211/453 +f 4446/211/453 4445/209/453 4453/215/453 +f 4462/221/388 4426/221/388 4425/222/388 +f 4425/222/388 4448/222/388 4462/221/388 +f 4448/222/402 4425/222/402 4428/203/402 +f 4428/203/402 4449/203/402 4448/222/402 +f 4449/203/401 4428/203/401 4455/206/401 +f 4455/206/401 4461/206/401 4449/203/401 +f 4461/206/390 4455/206/390 4456/223/390 +f 4456/223/390 4463/223/390 4461/206/390 +f 4463/224/454 4456/224/454 4427/226/454 +f 4427/226/454 4464/225/454 4463/224/454 +f 4464/225/455 4427/226/455 4426/224/455 +f 4426/224/455 4462/224/455 4464/225/455 +f 4458/214/447 4461/213/447 4463/228/447 +f 4463/228/447 4465/227/447 4458/214/447 +f 4465/229/388 4466/221/388 4457/219/388 +f 4457/219/388 4458/220/388 4465/229/388 +f 4434/206/390 4467/223/390 4468/230/390 +f 4468/230/390 4435/205/390 4434/206/390 +f 4468/227/445 4462/228/445 4448/213/445 +f 4448/213/445 4435/214/445 4468/227/445 +f 4431/201/390 4469/202/390 4470/199/390 +f 4470/199/390 4432/200/390 4431/201/390 +f 4468/231/456 4447/233/456 4446/232/456 +f 4446/232/456 4462/224/456 4468/231/456 +f 4462/224/455 4446/232/455 4454/234/455 +f 4454/234/455 4464/225/455 4462/224/455 +f 4464/225/454 4454/234/454 4451/232/454 +f 4451/232/454 4463/224/454 4464/225/454 +f 4463/224/457 4451/232/457 4450/233/457 +f 4450/233/457 4465/231/457 4463/224/457 +f 4439/200/388 4471/199/388 4472/202/388 +f 4472/202/388 4440/201/388 4439/200/388 +f 4443/208/398 4452/236/398 4453/235/398 +f 4453/235/398 4444/207/398 4443/208/398 +f 4444/207/391 4453/235/391 4445/236/391 +f 4445/236/391 4460/208/391 4444/207/391 +f 4467/236/27 4429/238/27 4432/237/27 +f 4432/237/27 4468/231/27 4467/236/27 +f 4468/231/27 4432/237/27 4470/239/27 +f 4470/239/27 4447/233/27 4468/231/27 +f 4447/210/484 4470/241/484 4469/240/484 +f 4469/240/484 4445/209/484 4447/210/484 +f 4445/236/26 4469/238/26 4431/242/26 +f 4431/242/26 4460/208/26 4445/236/26 +f 4460/208/26 4431/242/26 4430/240/26 +f 4430/240/26 4459/209/26 4460/208/26 +f 4442/209/26 4437/240/26 4440/242/26 +f 4440/242/26 4443/208/26 4442/209/26 +f 4443/208/26 4440/242/26 4472/238/26 +f 4472/238/26 4452/236/26 4443/208/26 +f 4452/209/459 4472/240/459 4471/241/459 +f 4471/241/459 4450/210/459 4452/209/459 +f 4450/233/27 4471/239/27 4439/237/27 +f 4439/237/27 4465/231/27 4450/233/27 +f 4465/231/27 4439/237/27 4438/238/27 +f 4438/238/27 4466/236/27 4465/231/27 +f 4473/243/150 4474/246/150 4475/245/150 +f 4475/245/150 4476/244/150 4473/243/150 +f 4473/247/153 4477/250/153 4478/249/153 +f 4478/249/153 4474/248/153 4473/247/153 +f 4474/246/152 4478/252/152 4479/251/152 +f 4479/251/152 4475/245/152 4474/246/152 +f 4475/248/151 4479/249/151 4480/250/151 +f 4480/250/151 4476/247/151 4475/248/151 +f 4481/253/18 4482/256/18 4483/255/18 +f 4483/255/18 4484/254/18 4481/253/18 +f 4485/257/17 4486/258/17 4482/256/17 +f 4482/256/17 4481/253/17 4485/257/17 +f 4487/259/16 4488/260/16 4486/258/16 +f 4486/258/16 4485/257/16 4487/259/16 +f 4489/261/15 4490/264/15 4488/263/15 +f 4488/263/15 4487/262/118 4489/261/15 +f 4491/265/14 4492/266/14 4490/264/14 +f 4490/264/14 4489/261/14 4491/265/14 +f 4493/267/13 4494/268/13 4492/266/13 +f 4492/266/13 4491/265/13 4493/267/13 +f 4495/269/25 4496/270/25 4494/268/24 +f 4494/268/24 4493/267/24 4495/269/25 +f 4497/271/23 4498/272/23 4496/270/23 +f 4496/270/23 4495/269/23 4497/271/23 +f 4499/273/191 4500/274/22 4498/272/22 +f 4498/272/22 4497/271/22 4499/273/191 +f 4501/275/21 4502/276/21 4500/274/21 +f 4500/274/21 4499/273/21 4501/275/21 +f 4503/277/20 4504/278/20 4502/276/20 +f 4502/276/20 4501/275/20 4503/277/20 +f 4484/254/19 4483/255/19 4504/278/190 +f 4504/278/190 4503/277/190 4484/254/19 +f 4482/279/27 4505/282/27 4506/281/27 +f 4506/281/27 4483/280/27 4482/279/27 +f 4507/283/27 4508/284/27 4509/282/27 +f 4509/282/27 4510/279/27 4507/283/27 +f 4488/285/27 4511/285/27 4512/284/27 +f 4512/284/27 4486/283/27 4488/285/27 +f 4513/286/27 4514/287/27 4515/285/27 +f 4515/285/27 4516/285/27 4513/286/27 +f 4492/288/27 4517/289/27 4518/287/27 +f 4518/287/27 4490/286/27 4492/288/27 +f 4519/290/27 4520/291/27 4521/289/27 +f 4521/289/27 4522/288/27 4519/290/27 +f 4496/292/27 4523/293/27 4524/291/27 +f 4524/291/27 4494/290/27 4496/292/27 +f 4525/294/27 4526/295/27 4527/293/27 +f 4527/293/27 4528/292/27 4525/294/27 +f 4500/296/27 4529/297/27 4530/295/27 +f 4530/295/27 4498/294/27 4500/296/27 +f 4531/298/27 4532/299/27 4533/297/27 +f 4533/297/27 4534/296/27 4531/298/27 +f 4504/300/27 4535/300/27 4536/299/27 +f 4536/299/27 4502/298/27 4504/300/27 +f 4537/280/27 4538/281/27 4539/300/27 +f 4539/300/27 4540/300/27 4537/280/27 +f 4505/301/24 4541/304/24 4542/303/24 +f 4542/303/24 4506/302/24 4505/301/24 +f 4512/305/23 4543/306/23 4541/304/23 +f 4541/304/23 4505/301/23 4512/305/23 +f 4511/307/22 4544/308/22 4543/306/22 +f 4543/306/22 4512/305/191 4511/307/22 +f 4518/309/21 4545/310/21 4544/308/21 +f 4544/308/21 4511/307/21 4518/309/21 +f 4517/311/20 4546/312/20 4545/310/20 +f 4545/310/20 4518/309/20 4517/311/20 +f 4524/313/19 4547/314/19 4546/312/19 +f 4546/312/19 4517/311/19 4524/313/19 +f 4523/315/194 4548/316/194 4547/314/18 +f 4547/314/18 4524/313/18 4523/315/194 +f 4530/317/17 4549/318/17 4548/316/17 +f 4548/316/17 4523/315/17 4530/317/17 +f 4529/319/16 4550/320/16 4549/318/16 +f 4549/318/16 4530/317/16 4529/319/16 +f 4536/321/118 4551/324/15 4550/323/15 +f 4550/323/15 4529/322/15 4536/321/118 +f 4535/325/14 4552/326/14 4551/324/14 +f 4551/324/14 4536/321/14 4535/325/14 +f 4506/302/13 4542/303/13 4552/326/192 +f 4552/326/192 4535/325/192 4506/302/13 +f 4541/327/27 4553/329/27 4542/328/27 +f 4543/330/27 4553/329/27 4541/327/27 +f 4544/331/27 4553/329/27 4543/330/27 +f 4545/332/27 4553/329/27 4544/331/27 +f 4546/333/27 4553/329/27 4545/332/27 +f 4547/334/27 4553/329/27 4546/333/27 +f 4548/335/27 4553/329/27 4547/334/27 +f 4549/336/27 4553/329/27 4548/335/27 +f 4550/337/27 4553/329/27 4549/336/27 +f 4551/338/27 4553/329/27 4550/337/27 +f 4552/339/27 4553/329/27 4551/338/27 +f 4542/328/27 4553/329/27 4552/339/27 +f 4486/258/17 4507/341/17 4510/340/17 +f 4510/340/17 4482/256/17 4486/258/17 +f 4482/279/151 4510/279/151 4509/282/151 +f 4509/282/151 4505/282/151 4482/279/151 +f 4505/301/23 4509/343/23 4508/342/23 +f 4508/342/23 4512/305/23 4505/301/23 +f 4512/284/198 4508/284/198 4507/283/198 +f 4507/283/198 4486/283/198 4512/284/198 +f 4490/264/15 4513/345/15 4516/344/15 +f 4516/344/15 4488/263/15 4490/264/15 +f 4488/285/7 4516/285/7 4515/285/7 +f 4515/285/7 4511/285/7 4488/285/7 +f 4511/307/21 4515/347/21 4514/346/21 +f 4514/346/21 4518/309/21 4511/307/21 +f 4518/287/197 4514/287/197 4513/286/197 +f 4513/286/197 4490/286/197 4518/287/197 +f 4494/268/13 4519/349/13 4522/348/13 +f 4522/348/13 4492/266/13 4494/268/13 +f 4492/288/163 4522/288/163 4521/289/163 +f 4521/289/163 4517/289/163 4492/288/163 +f 4517/311/19 4521/351/19 4520/350/19 +f 4520/350/19 4524/313/19 4517/311/19 +f 4524/291/10 4520/291/10 4519/290/10 +f 4519/290/10 4494/290/10 4524/291/10 +f 4498/272/23 4525/353/23 4528/352/23 +f 4528/352/23 4496/270/23 4498/272/23 +f 4496/292/153 4528/292/153 4527/293/153 +f 4527/293/153 4523/293/153 4496/292/153 +f 4523/315/17 4527/355/17 4526/354/17 +f 4526/354/17 4530/317/17 4523/315/17 +f 4530/295/196 4526/295/196 4525/294/196 +f 4525/294/196 4498/294/196 4530/295/196 +f 4502/276/21 4531/357/21 4534/356/178 +f 4534/356/178 4500/274/21 4502/276/21 +f 4500/296/1 4534/296/1 4533/297/1 +f 4533/297/1 4529/297/1 4500/296/1 +f 4529/322/15 4533/359/15 4532/358/15 +f 4532/358/15 4536/321/118 4529/322/15 +f 4536/299/195 4532/299/195 4531/298/195 +f 4531/298/195 4502/298/195 4536/299/195 +f 4483/255/19 4537/361/19 4540/360/19 +f 4540/360/19 4504/278/190 4483/255/19 +f 4504/300/161 4540/300/161 4539/300/161 +f 4539/300/161 4535/300/161 4504/300/161 +f 4535/325/192 4539/363/192 4538/362/13 +f 4538/362/13 4506/302/13 4535/325/192 +f 4506/281/4 4538/281/4 4537/280/4 +f 4537/280/4 4483/280/4 4506/281/4 +# 7168 faces + +‰PNG + + IHDR…y#sRGB®ÎégAMA± üaPLTE         %) +  # ++ #"&# *, ##((0843;:  (" # -&)!.(;"2+;3$#"%&(&(%&((*%#(&(+(&,++-/0.0..010�)&1-,8/-0/020.83.98/333568685689854868<95:;;7?@<>@?@<=AB?GH?HHADEHKLQRXXC$B&E(D)H&N I)L,F0 M1 D9V T P,P. [ Z" +_(S3 V8X6 Y8Q6U9X6\;I? A>;c& k+`>s, r-y0x1@?@I@]@LB DA=UJ%]Q(aAdEeHhEhFjHjKpNpPdX,k]0wV n`2wi6~p;BCCCFHEIJIEBHGHMIEJKKFNPLNPFPPMQQNWXNXXQMIPNQVQMRSSTVXUXYZUQXWZ]YTZ[\\^`V``]`aa]X`_dfb\xlD}pFtPbccdfhfhikfahgknicjkkmopnpqrlgxrl}wq„7€o;ƒs=ŠzC‰|S~C‚|vŽ€L€V•„H—ˆWž]ƒbˆ‚{˜‹d˜Žp‘iœ“t L ŽT¢N¦”W§—g§›u°žh® m­¡x±¡l²¤yŒ‡Šƒ———¦¬£‡®¦‘µª‡´¬“»±»²•§§§¼¶ ···ÁµÂ·™Å¼£ÈÁ©ÇÇÇ×××èèèüüü§uytRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿS÷% pHYs  ÒÝ~ütEXtSoftwarepaint.net 4.0.19ÔÖ²dûhIDATx^Ôýÿs×}&ŒÊ»‰e’o@F°@ÛyI€Î +#BÃÍE ƒ!†B8—¸Õ@w Üš1@‰"i*¸|a”„b¹ä•í0q’*§6ïÊN©X•-X{ )×½?póƒß­Ú\§¶nå×ÔnÕýGîó<ŸO÷tfTrŸîéé/§OŸé™9ÏóùœÏ9ýBn'šÐŸD9J +~öøaƒŸ¹Ù$üDÁÏüðNøqƒŸh(_§µXN`8‰jž½à¹·€—ˆðæð›)x.‚Ÿgð´Â[ xZƒ—zx¬TšyîgB!?ÑwâDþ|‘˜ ‚™°VÛÄR˜Ç†5®–Fë!OÃbÚŽÎÍÏó(1ÿx~)ÂZKA1 ˜ŸV¦JXLÏh]° µZ!Ø~ò dë;/óµù¹ù¹KZ +WžÖp1\ÎJ dÜVR‚»Ãpsó3mñ òA&a8;Z«3 +—\ˆùÇ8Xú!KŽ¢MÍb‘.yj]7í,b¾>UÚúüs”ɶ­hÓ\òÃÇóùbß¡>fÙu}-:á·øÆ7¾ñë¿þo#üz ø$ü¼ç‚o|ãë²´(LâÀן­,7÷ŠÛëÀÝ{ë·WÚà7n¼³‚éÆ pk}}ÃñðÑ£›+#+물ö9dPƒf«Ì•õêpeX+ÙaÔB¹ìpÿÀÀÉÜálÿaLÞš ZŸ°ª tðb˜Ç‹8p’L1<<À”º2˜Bž¨ så,êÜj¥š[¬TË^cu Ýp~Wüº÷šáÇ ßÓÊ)¿ííŒÓƒƒÑáë]bðûyxŒ¸A‡„SŽ~]€PJCÿ)L‚ï;ëï)¼°gèçžñ¦p2 g'At¿±–35f?sŒ2~¢PiL~x'¼?Q¸ +æ^kk«‰i)ç~Áÿ9†…$<{¡ù–%æü³|Ÿà¹~x'œûOkð¿ÅðØÔ”Âs…(k~2“B03áCåc.J ‚4Šcs50›±_íqío"%q&X”üYšš"u^™™.º2Q“4çÂ9RtmB€×ÓŘ5 üq —Øäåê³£WžÎƒ³q5NGÉççßœ›ãÒsïÜÀŒëS›\Ìž©Õy<ss¼">ßãy€ …Ké¨äSd•&Z£PAYò7M@£ð‚*¸ssXLNCœ(žø +Ë•|8 +äјt#²ílðÿsÉÂx)"øíÿ"ÀmN P‰À++cFû PÜxç¼qíNjðÿ£(n=pp@`!·<’Sí”^ ÀŒ*¾¿!ŽäNéï?9p¸ÿEÓiàæ~0;§Ã‡_|19Ÿ<‰<“'(†‡ûû³YÃG rå\îÀB‚d_ Yì~œð=;`  ?}dÓ:XºÓLÆÇ +p:Ëyðtv í"ÆFRS´WÓà`?&Ü+MÚåô8ý§lꮑ§0õSX–˜ZJgõ=€¿†¦¹‰ÿ›=fOsE€ùOIà¨)šÜvÀ™Ñàg +•rcÎ&æ¬?QhÐÿÕr‚ý1ùoKX]^~+šýŸcpÛßáù©û•š½D‚6ƒßLÁs¼¤O+8÷ žÖà¥6,-þÑ¢Ï:ø/âxc²,yGÀä @ér1@.@ÃŽæ[+2™«m6<Ì”ôÌ5ñ}¸_ÀÜü›,|+³§š°SQò„¬ÏòE%w_FäÀ'p€NNzP^/š<33Áôøøùüøñèxì%—äê'A4šfÖð$\ÂÏ{.ˆ</ø5‰ž¯aÆ‹ëÚÿö׿þŒà·n¾}óúµ]†ëZ&Ø^Ëš=ë·Ö7> }|yÞ]ßøÄ©û`àÁI €Ål•U²@³oîû­<GNªæwþïïOó?R f@–WÆ‹ ö,/®Vª¹ê>$À=Lœw×mj§<⡽=ŠøàìYÐy»™F<“`æ?=”ÙÓ“ëS/íõƒ§Ä︗¸Y‡_4¦vú§Èj÷S&ôž: ½¡kXJ¡ŸüOÀ)ßqp€&Ã<ÐÑpÜä/1N„4í7³Ÿ¶¿KQ[ c:üLad!ž*Yü¢ã9 /‚ÁOüuÕÿ²ÿx?ÂkÃÃñÜäHºšoYbN§òð`6ž=ÁoÀN8÷ žÖà‹&,™¨8!N¼|·©Zïòÿ“º¯}ïç„`àÔ)Øÿ§äÐEé†A)JÓ6íÀYgõ=@œeÌåË@?`¦Xã8üg»¤}’–‰­%œ2 ~¦àlj?¼*@?Qpö…¸jMß÷—ÿ´„Uäð?Žá57ýž?QNß²Ä2 /·ÿŒxö\/©ÁÓ +Îý‚§ux¹ ï.Ù °£ÆÏä`"ˆÀdäxÜÎ šnxØ€w0yíqíq$Œ5E£`ζ;3Àl) <óD €5f=)9þM%åYÆÂ‘¼N†né`ꔀM±àF @Tr +çÿ8€¹GM,3³¢±ñÚbrF‹8€“}ÑN¬’p ?ï¹ m@ŠÿµÿÙÀÞà€{í<7›=Ï?ÀëƒWCÏ €j¶:‚ÜX¯¶NÊp25q?+î8é¶?é_>mæaMHÆ&ˆ ó° À=×÷ãð;NÚiäG€Hic.|Gž@ú¿÷ð^Ãü__¿mv¾ÓzrVºm’›‘:#Ú$Œ½¬€”Ïšo_€;o‹ü©œþ³àþAÐ<^ ]#ÙÀ6óÄA-øÿ€<Mü¿Ó ‹³ŽìOI÷Ýüï²…hÀs'šè5O`ðç~:Ê öÇËmÁlþ4²ýwñ ,Íw-šHÑ9Àðà€ÍÏèH €¥êâ^ï6\_€€t4NÇ1ŠHxÌÊ·µ‹Fdœö´ŠƒËæQoë T:‡ËÑ€ü»ó¼iôÞU óoÄ$=Ai2á@¡1j€‚™¶+fÚÀ‚ðŽz Àt" éhé·[: +äѳî€`:ÁÏ{.hÕÐjÀö³ +š÷×:/ð°Çtð\kå`€ZžK €×[X = Ì«–sÃäýrK@Ù=à—ûÁjbû‹ãÿf8y$='Qõðd÷ë0Ö6D-ý.ðí¥”ߎáîѰáö?ù?ÆÂòØÁ¶1âàU6Aùo°|VòRp9öDHx:õ˜™™œo ¶oMÿÿ`°Ë÷Ðú7@,pè™=lçï´pþ &€1;<Œ0|òœb¼ˆá5Æ~yʪž`Ûµ€ù? ʧ՟œp€Q€="÷ 5òÐ"ŠÀeÛÄ<«X_¿ÓähåØáð³Íý©ßíþ n;·Ë ªO®Àø?íð¾¤CÏfÉðBƒîíEˆ¢ñ–òŒSûc)î?MþgG¾Ì€k$ÛÈÿPæó· ÿýö{5æýzZ#æÎÎm; ¾Œà'§ŒàÏ)x ~¢ æ·8‹À¼ïx‹1 ,VÜö7xþ‚•²Õ2Þ£ø5ŒÿƒÍž‰ÀO#©œû žØàŒ¬ ÏÝ@:šk4L*`/1µšØÓ½ºÀ<—Ž“z @ªÀ±&]ž%DŽ͖½˜«Ô²ê& n` @Êw‘öh5ì€KÎüËEÐ!Àh¾=œòhLºÙLjv~a½¾ÖÃK +¸.J ÿ¸˜Üÿ4Ð ìÛ`øb^í¤á.bç`ýG€Ã'#ï¿&Z}QÀ@¿“ähŽ`‡Áíà·<U¿¸;›Ü àÛ‚Ÿñÿ¹?rÿK¬°UßœýzK®`ÆÂ–ÖøoüìGˆDó¿Ì‡ä@¿byFþ˜ZüO(Pˆbú£€FÀߨØÀ ÍzDü‘ Îê{~bøzø›ˆ–ûhÙ`Ìï +€ÄÖ +Θ?Q¨ÀðÐÄú xƒŸ)ˆù}!×?·¡Zzým¤°èìàíŠîZcÝK$ø‡3˜,¶Ù3TΞÖàÜ/xbƒ—Û n’ä‡g…çr0@À~cœeIÙç÷@vNz¬ €¬‘ïÛÀ«ëòZ!¸;å@N˜[x˜ý€‚PŒcXð´ Ñ Y¿ÙÖÀïÐàØiùk‰…s ý×åàõššvx  @ +à:™ºíÂa:@ } Àµ–1é^Ï_<“Ø=à= î#4þ¤â¹_Ýâ&€Öä{AüÏÃ`>’¼ €»ò$4€ÑÊàg²ù?âÀÌNø¶AÕNñ4ø›V`íg©´iQ€ƒ ~±&§{LÑNZÿ˜`Û÷ž¢ýÏ™´lÿïÉ î—€…jiOAe¨y!íP <–{+þßW€,9ïêˆ^Î6†4í7àüOût€…Jc$?L úŠÁ‹`ð3k°…5þ;ÜøÄü›"ò':xp›l²9±ž@C+ƒnþvëèRïâEà‡ ‘Ãs9)á(¾±Ï2ê¾b0wðàÚûê è`À΀)yJoìæðæK$bæÞT °è DD+òœ äÑnÓ ~ÞsA«&€¯õ´ŠxfÀo]»N/Û["D°D;ÀÍn<Ï7ÀaÕÑ>  ÔOíbä8I€î?‰…œ°@iþ´€by¤z4y2@à·FŠ ŠÑîZ_À†ðódþc¦éÿÓŸZó¿ÀoÛè߬þ¦¹DÉܤõ¯UŽý³^"g‡VEñô P#ÿ( ‚yNõ{ƒÁ¤`O <â{¤#š°^Î\Ée“À~@LÎj;Æh 7þI[]Æø‰¯Q^Ð$µÿ§¼̽?SH{@ü«jX[Mx Ì@€ÿqLtð°¼[v×ëIø‡ó»…DKŸò¤Ë›„s¿ài ^pÇ»K +ü° Zx>hyº¨Õ¢€ÚãZ—1xkxðjްÐ@ežòX€—€ Èñ-{p_‡qÄÝI@4ŠYJz"ßEìÌÙÀL¼ À‹Ã ÌY ÖZÇ ú$ý ®œ Ñ˜X;5|¡+Vò¿Vüðë=_{Ö²8÷]¼ÍEîh°ÓЈˆ<Ï; ‚UJ{†@Ѐ·Èp潚8ÇÀªåÅJN€6) ¤c€¹9ã€ì_œ¾<‡< `)lÓO¢íÿðÞCj7y$¶ÿ逽oíýFÿñ +™œ¯Uî¦È2 +p0°Žö’@À6gP7 {Ùÿ/Ú8€àÿ(`Œyÿ÷Ó[pŠ£òÊIÀ‘, ð”®¡i'œÕ÷ã­ÔÜä0Ëß‘ ÿ®{˜ñ¯…ˆ­Œ0~¢ÀÀJŽÓ»—ªý?mþwÎþ\–åþ§àìÆ?‘ ø-üiÜüžÑ@:çmràßÈwwxÐsü°°w»èýÝ´x®>rR8´íÐÕ8NÆÝ{挈17÷ž±sÕA¼µìÀ’§=q ÀTÛ0âÀcä@F€üQ zðÆ€ó;bœO`3¹Çù/y´Á¬âÙ&ئü¼ç‚ö½ ÚÍ_;˜&€¶ô¯næûïªÀµÖ€¦^_@€Á뤽Á<ˆÒn1Šú; —ñ/Ð-À @€²…¤<J@Q@¢èè8°áù½},`Êà§<´èÿ‡Öø5ÿ›ùÍˬ§ÅßX!s“;¼Á:çwEÞ~oû·öí±Î ”ÿÿð‹Øïhtˆ` +àT¿_/åàH +ˆ> &ü´ðõˆ¹|ÙÀkÆ 19ý§CÚ÷hüKðôV0Ætø‰éј‰ðƒ¢÷:ÁO4ø}º*׿Ťz´ðx;À.1|ñ–%×±lÀï“–q`vpx`ØsTP‡Fpî<­Á žFuiÉ;œ‘ᚈˆzì1Fû¾cšÆPvÌÛbž¡rÂÜ€àLÀò©äÐ-z0“D 3³¢E€™ññ|ËqœòÌï«N1@£ ÓÚ‰60‹›ðóž ºí<»¸.ºo‡æƒjh€äÍ€F@Ô à‹û’Š`ÅÔÂ` ŠÐH€GN20Bä d@²7ò—àÈ΀þxä7= q7àÀCc ðø æýÌÿTó¿Ó;ù]œ¯È/pvÄO?€íÃGoö‚p`…:`päÞOþÇ Ú&s[ûä²à‹ÑóÔÉ(@zxŠyŽ}Ûw7ÁY}HpX4wòˆÍŒÖºkpÍÿýxFpfY½yßÌ>†Ÿ(ˆÿÝ @Þg€¹ÜúÌøÞrûß–]zXb•Ú1|Î;FòÇ<À¿¥ç"X +ÃÞ=Äy7?ÁØáy€t4?Ÿ ©€Yùà¶v1µZäÿnê²£;öHzDÙÜKò~†^ÌÄÕA71óq Àäî1Y+fÔ ’[ °Àbη eõû–Î~ GcÒµq­Áwr• ?ï¹ E/‚mŒðÀÒCÿí– ¢!öíp:|q1UJ{‚yrQÀn1 ðpÿ‘D?p:ŸÐÁ°k €õØ @+þ‡PoÀ†@N€"@$@þ\4›ÿ1ÿ¯ˆqÁÚ²ú¹ˆWÌևѯ %£@^'{:ƒ6€ø_kÐ@€cì ¡…x»$”® &t4y(¨$šà¬¾8‹%—»xœþ[„´jØÇ8~¢Pfÿ%©ŒÐîHµx ~¢@â7h$àÕïS@ÜnêÐäˆ:xx§XP+-—vï°š€ +î¸Jò`(`ÓH@Ì ‚§58÷ žÖàå6,)°9PC<ÜŽ¦ ëÑtÒ óìãY$Ò½äÀùþz´èÔ ”ß! Ñ @%šLEEKÄä[~ü28÷%íÂð…uì¶À³{:¶$½©^mb@ùÍ€çÿ,¯ÚÁ+¦®yX'£>Ú-Àƒ®ø$iãFÀ¾D @£^ãxô‰H¼ Æà‰fzš}.Èÿ4ÿeüï4ÿð5V=¹=±à $<€ÔƒÖØO*æì/zœŸuôÔà4Ýÿœåa ÀÛÖ`Líÿÿ ìü#‘ ÙЈàó€èŽh‚³ú༕œ;yôßäØAüŽÿs±µ€è2‚Ÿ)ð z*•&ÂOÚÆÓO5èx?Q ¿Â§Š ¶P¤`Æ¿ÀE@“ ©x§ðÒýR‰£õ”à}â$ú©ŒÚ°Teû?•€n†ö£¾ýwOŸ>Ý$‰ÎŒ“ýkóâþ-ñÛVýóÏñóϾ½ýô÷wÛ¿¨Íÿ§ÚýÑp{Ú ¾ùÙöÖÖÏŸüýV½6ÖêO‹P··g§&j?Dõú}<زÎésvvVùÖ¶þþÛ8móÉÏ·>«×?«Í×þKm9"ƒÍ§‡ìëOŸnöd³Vÿü¿þ¢^¯mRüò~¡^ûÅææ“§¿üv¡POŸ~q°ùäÉgõM\Ÿçq}! ëO>ÿüéçÛ[ŸoÿýÓmLµ¹z­ž qQ”¼^GÉ·¶žr %ß®CÌמ<½?;:‹"oÕ·ÂÚËþ-t€J¢à¢øúyºµU›«Õ·¶‘Owîïê³µÚnàã_ü¢Žå6>Ú&²Ù|ºMƒ²8~~¦x¨X|‚‚nÿòiýñæç,yk8õ%AÝ]$€Ÿ÷\о€!qà@S˜_¦Œùȱµüÿ¯b€&XíÔ-$ z gw1À:âÉ"NæZ{@k­b†2€-[zîh\àT ÀŽ8âuþ§hnþ"¾—ßXht¶Èà·mm0 +0Šþc Àˆ<Nþ¸Mú÷qm `Ì×èˆÆˆÇŒzìâèÐp?½ðk0òŠ–»Å8ýwÙ ÀÉ߀x­Œ/~¦À¬aü/Œ,ä*f÷ãW¦ÿÎMà_ƒdÿﯶ3ÿ4‘ý?<¼”ö$ÛÔ¯F“ÍñºÉàŸÎtøŸ7ÿŒõÕÖm•J0}à“†›š*æûˆL&ŸÏÇí÷<„uÁa0ËWX/½úãÙR‰)f¿K2G¢)>/Ÿ $ î¾Zº_,N” —J—ðÂÚÓšÃë2Ï)d=k9]Á©££¥©GymÚßJƒ ©ÀÉ[[ÛS£³÷CP6÷ñº8ÝÒñ ù1{PõèŒ`–¾|]èþwYªÙÙÚì«÷ï[ɃDɧ‚ïâ|•<¼4TBЍä¥Â¥bQ+,©¤’#kk‹¥¢6ÃàJŽ,Xò—˜ô)6Žà-óBßd2)*9‹*¨Ì| %g¾@£1±¶mÀ‚|+øyÏÝ÷xæ§Ê@CŸ¯æqý–Yò÷´Ž¸ÙÂБà {“ŠxMU{瀨àÐz<©Úï§ÈUvx vxÆ^ähé0oH¬è0€øŸ·—ìÿSœ°Ãþ·IóD Ñ=Vâq,BŸ1Gñþ¤}Ìl pI@pel ´>{Œ¦ñRÀ÷ ¢ Ð=9žCþ·ôŒ1€ÀŸ°“ý gõ=Ày+9ïæ0úoЪ â²Ó>žd­ÿL²0²ƒø#x ~¢àô/þ•å//^nû ôü;"€k€\FwN+®EëIæsüX~ü7žÕ°C€þÿ¨• `aahh(sÀ¯¡W‡†FÏdÎd^î9ô¡C=G{z{‡^ÊÜ;::z¯ÑÂ$C:&ÎhËRgÎ`‡ã RÚ{ dÎp·'@3zõÕW¹/ƒ|^E’W5 ¡ g2,_ØË âeE·"Ù…­0H­-äcogF …¡WY¼Ì«C¯èaâ(e£à£gT@ ›€ìÏ Jüp‹ìó¬,_æÌ¹æó^zùåÞÞÞ£=‡¾r¨§÷ùNóc­àÄ—y´Á¬âÙ&ø~&$ü¼ç‚ö½~ïˆWóô \»é<ÞU/€v€çú,VZ»Ãj§n`Ž Úi·ï˜ˆ4]p$)­›€g —[1€?À7 |û×@³€‡!¼ïŸìsÿþ=Ç åÒ¨7·Eô&›ß€úèC'@8ï‹ùåù'ýSÈ<×;hœ.€þ#ræþ±±×ÉÕ²þ¡ÆCvðŒ‘þ ÊÝÍØ» À¸ ßPcÙ•œê,cØÁü²K´õˆ.cø™Úh€¹ö#ªüDôÏ‚rŽp[* ¥0îÿ¿6L«Ú!Èå÷.Z³•$t›x·ü%q;ñö¬€´°¡w›ºÐwR¡Åz ¯Ò¥ÂïÞgÃâD¦ïXooh%ÓT…ñ]ïcmv¶4T‚Ù K™.ÌèðÇÜ ã› ùöï‡÷aïjó +íOïþ¾Œhé0t§‚Z' ;kÿ§ù cz×)Œâ9ÁdG:ZÅ0¦ggu”Îvä=Uš(b¯Ær^å‡ÈL–¾ÒÓ%À¼~̃Úßâ +sµðþÔ«¥ÙšJŽÌ’ËÇ¥¸ä–\›s(úößÕf§TpùÁ,3gsÀ}\ ÏÇÙ(ÚîÐýÒ+9PãÍ)b*M”‚bëLY,æ{í+ €,9>ÖÄ﵄ó^@£ ÓšÔÚ ;@¾ü¼ç‚/²ŸàÐJcÒÅ´‰ýwà9= À«]Á +ªHh€6¼%bäô‡ýƒ.¸ §Á€cLòÝÞfvuœÁe}k+ 7k5ª‘p{q0ü!–ÔÅ™psëéç›5â<¥«Õ?c íÉöögõ§ÛµÒh eDÉë(JŽ|UòÚöçVrØz<Ý~²ùÙ“úhéþ§µûWpLŸ…å©ÕæPò-”|K%ÇÙ5\%ÿ´¾µÍ˜‚%P–aÈ8Âóùñ|_>Ï{ʒ߯ýp¢0ÚbrÚky4&]'ûâÿR½ÄüNÿq1¹ÿÙÛÌØO-°+¦ØÍ@þÿâcTku«¢vƒ@÷ã¸@Öö±‰Ÿ+Q@ÃÀ[ vÆœlŠØ÷³ì“òÛ€škÄþIùßÑðàÖZû¿Z ø½ëKN`À¨^³·õGMþ¾°]làþÁD cH÷|“$¸vj€´~„Ü0£ík¤jr¿¼fþ±à03—$`B‡<ðí6ô¿€;Œ¯‡¿‰hÙ] XÕÆ ïÊZRž2¿Óÿ~b­õŸ¶ìÈâ7MG:_ X ~¦@úgI©<@n€–üÓ¸ýOÐÁ€ÜYT¿k>q‘„<E` þt°´÷t× ‚ÇxwI\’ÖÚ‰‹/_<ÀWpvt´öß>2ÃqúúŽgÀxqü";ÎÌpè¾™ùÏ7ÃÒ¹`ÛÌ\Ú¸jឥ›6 ·aÏ€zas3(”ä€aîðXéŠÝg\a³61a–9§',NaZF70M§,îðþh&üå/>³0~¥r m?ÿùÖã)Hí/—Š—•w8O¶‰2ø‰qÉYöÚæfm¨DþN–Ü×Â@%ÊÎÌÕJ…€½ u7`í#a *Ù‰ €»™ÏŸè;Þ×—·®§™s;''½váøWÖ ‡D€àÍØo,"4t€© PF×€¨ à¹= À«nÀZjWD€îÆÐ@¿µSp,À„@IZÄÐò—x&€ÎÜÊ»ø:ÜÐF¤}æð€‡þiƒá­èù?Ãû+Zß8ö¼FÏ€yDû|3kߌ~lSH ¨ààà4‰»¯½.ÿ?TÀÛ" AòôQOž*R7œcl$€Ö +Ài½{8o%ç.<z9Áš‰?BÄÿb'ÑZ ]:üDAg(`¡Ló¹5¬?S0ãŸN ÿs( 7þ‰x @y¼õ_èè°û¦ÂjÉm[I ºS²d/@Nž‰à‡….Ûü/"DC¶Š0~îu9G3A07ÿdòüñ—(NäÙ Y€Ã`¦^<l{§ŠNË3࿈D¡ÀÒÆé¢Ñz0:[.‹<Ùn +Kl3ìg@®w“©káï”OWšÈ«îøý¨C"]þް04ÖÞæy*ª0ˆ#Ø…‹ÌL‡Áïo•F§žF'–m|¿I×F€Ó‘óá°†››a&Øâþ8š¯¤p ¸–gÉ­¡Î +‹£êæÀQ((0O‹‹Åñó˜!ú^:•"¤ ÒpÎÛ òèî ¡ü¼ç‚ö½žC €ÚDòêÀ…† õƒôr ò´ëЭà_"ÀaµTG˜ ÛqG½Ô´D®˜&|@Ãà E ,´„`1þ!é0@+`ôßä0p×zðÛú)ýîÿ·¯8åKro¾ìMng|î‹òÏ«íü«€Ø1@IFÇä!§EÜ `ÀÛ>P<À©A°»y 1¸C¤n8{Ê:ÑOÂi½{ˆ¹øãh,¼€ßEk-à|iðeÍêÛýÑh¥Šàg +ý£°ö4`@* “€€à@€<ºWÑ-³u­$‚74u1­Nž‰AE5ìË0\¡y,àÄΆR)3‚ 6y⥗ŽAô‘ÎãºñO^œœ,^¼¸U*ݧMkÐ `:˜¿¦°BãØÍèÍ`4¨a/Ø©Ùj/2%ÀÛf0êka¡ð)t7çÂØðfȽ‘´ +Lãý&†fÁªµMìÔ¶;@Ï û ¦¡CJô](φnüϬž=¢¡6×Ã!ê ~ñ ~XœËXKÉ“¹j€üf¦ 1û Šß¸Ar?pâxßK}ùqà@þ[…¦É)¯@£1±vhøâFLÆ +Aþ׊àþjËÓÀwÛ¶• ƒ{ZÅþ;ÅD€¡‡×Ví!Ðõ8@Ô €–=&‹8ÙßÒÀTñH€RÈ@½ÜÀÏ›öê°Ï'ðëx“yZD쌈À½{êHûÿ¡uÿÛÑú¿¢|="ãÓ̳Û)ßÞ°ð^JB S=Þdí{ @®q A†P8eÓðÇ|ýHõÂ)˜ð¤ÀÙ~{'pÿ·ÿE< úßC/™ÿÔ¢µ[Fð¶hv0 7fÓ”pEÀI¡-”ˆ»xx«¢[Æ…¯x¡ˆ˜Í]€ùñ—Ôc=A ûð¤ÿ¥¥j;`´r0(æ¿ÚSìë›Ì}G¿üå£GRpLÀù<Ÿcã6SìÍ'íÖq’[qrÆXTæ·üô¢u*€ùÚ“©QöÅJ Ä;{ J&Ï‘N's8¡ V»TxL +¡AƒïÆÎ4R;ýº-] +‹Å0Øž§ýÏÑ ‰i¿’©ý"êµQ÷çè¬Çõé~à€<Ú§3Ô–Á’Ï? Ó]º`M}ƒpZ˜Ç1÷îA1Ó{¹Ý”|ß9­ÀÄN•Äñ}/ñ¾â°Îâqv~HÁ¯È£IfÝ Ûý…¼ë³¨ °À˜üœ¹“¿€å.1âÿnzü‹5¼ªj €=Ž ^€‰É‚a# ƒD €ÐbVѼrʰ—ÿp†ÿJVÌТ7€ùøeF + òðë¥À­ýÓOdÿ·4ÿͳ ¢'÷‹ðù¦о)0ÿið¿RÈ? ú¥€Û2ôõ£ž.€#Gx¿^¤ †5Æþ´ÿ£€)1´ÇÓ @û(À}ôu9uð–L`vr1ì`~GÊæ·Œ/~¢ £z0¦Àöo¢ÿ€ØÀ%Œúÿ±X[û¾ÿЄ&@£€Ýøvz7Ž¥VѽLßè zÀþÔíVÎý‚§5¨Ü–`ðÃ-àÔr08z¨Ð÷›à©£_ÂèK/… +8öÒK/}‰R€[ ïPßxß1âÜw »Nœ8?I:ùßÍcq(Àçî ý MÙc›œ€<é…Bä§Í/Ýx¿r%à8CL­…®N ýÒb~žãûM»uϺ8kG--Õ¢¬ d+?¥\šJþtv(f`#‰):/ÆÎLŽÇôÎûç+ºSº7àû¯â&âÍñå¾tô%hªÇ•.ÿÕ&t"JÐhÊ´Þ ßOÂ%ü¼ç‚n{ÄÓ¹ýñį%¡&PD €ø¿Ã8ÏéY^ ì^Yµ†@×ã¤zpµßcp‚@9×ì §@ä{@ &öà,ÂȈÚó´ôÜ[çä_©¨ €Ïzôè§?5ÿ¿å”Éß<Në +@oäx½aŽžH)À* Ð |2²vEŽlØÿ+€ ¯Áî7þÿÞØëö<ÀA>6€½@r$€³ƒ @¿ÔE+«ïÆa©¹ÉÐïÖ?AsÚç´ð/k'’ü¿w€e^^`/€¶¿Á9üDÁù¥¥ÀÚnË àÆ¿`ÔßðPHì¸wÑ: €Îu§ ìÀ?þ)à‡‰ýyªz à‡[`$|0ØþÐ ÇŽ¾ðBßÑcþ‚  iaÆëËRê³Ø©ÃGöå'I¶ñ€BNìbÑÿÛüç¥ÑYR&øŸÝÈIÓQ0mDºµ†— +ALÇ8‹=û\°í€òá3ãµh@á°C½X¬=ÙúyƒÉ‘_ªåú}nQàeÇ„Ú\m€ÂcF~|€|€\óóÿç•!ù.¨Y¨°fƒ_Qªp¦x‚w'º?¸c¸#šqS´vTw‰÷‰`,uÃ…¯ö¦át×äјtmÅÈVˆw~QA€Ý= à ž€¦›¨^Ñ@ô<Cgjfdó¯< ‚ê¬Ö0À^Ç0 À6Æœ´(~€Rzä0þ?Ò"à¤Y9M½º°Ï”À€Úy¨½š@² +ûî2«lxô§ìàJ"#Š€ÕôɿԶCÛ<ÀwN¶n.ÿÆÉ:€Ìò¦ª^û=QõØÛîh „¤)¶-)qò ŸQ€ì  ÚÝU{ADZ‰egÍ$€s‹`ß½M~€È@rÚG €Ú =ù(€˜þÓ1V‡Ÿ(˜ío€Ž¨÷5ÿ±-cˆ×xÔaG/¾¢‡7_x©ÿ|¶ÿ³u ËÔó€UVÃ~<j°n~¸Ê#’g‡qù*/ƒÓÀgä0(دà5¼;CÇŽžŸóòá>i‚3,@Œš~zù\p +ö¦]´7&'á2ÐÖ‰é Ûb’Í=°í½ 3a0MÛž¾z¼ã¬‰WKµRq™Ö§/bY,ª`^Y^œ´ †ðJFæ +P/?¼K €Ÿ(8û î°7ÐeFý‘ Ñ  £ÀH_…Õ²%ÿC¨ šÊü_ k, õDþÀÒM4•JȦ Tþ?v”6¬•¬Z,iú“µ8é޼“ÑëÇ¿ôÒ‰q>9ˆmÛÀx1_d›8ÃßIĵÂP¡x; +ãjÔ®ä‚:~>(f^æÙ–`œÏç/äóçÎáÅ%›Ö'ÇÇ‘~rFõ”™àoœ•É'âΟÇK±÷Ü +½…º²f¶|Gé^8_`œ®Ð.)žä3ÿO‘ÿµB†«”÷€ˆ·s“ û€„ ‚Ø_ X«µ‚±¥ÃϬ€Oà£ö@ö^4ý5WÝø'Äü4þ2<­¢mŽ×1%6è}ȤÊ쇉ýx|$`àÇ… B¾{öéXß¡úúŽ} „ˆ±Ø”MÎ…:0> +‰™À óØn‘#²€’x y1p“6Àµù£‡Žõa‡NKÀ”ÒÙ¦á7^—F-ç˜hOÓ7Á©X¤Y²îož˜TÞÌ ÀhPòòGŸ€F¹e÷öE¢Å€µ—úŽþf¢ZÃ3 ‚–«QÑÕG‡ >*??)Á _:Úó;ÀS ›ø9X~$ÞÞ¦cÇò8Ôë/§ºö ¦˜uìÓ ~ÞsAû^Ïc€D@ÖRcdþ·ñü+x@kx­•‚@×ãÐþg €¨ýðIùù1¤'6z–‘/p%;¨gøÇØÖ @˜`Go¾=XMæàø +àÏÿt‡@üï"À@Öî +$e6÷ëZ€\¯Uìxïg 8B‰‹»ö¶‚í@rÕÓåïÇðFp;v ¿ÈÀ4JÉãƒYÍŽSV¥íÎ\Éå~z$¨?%žÑàǽ@Lÿ]Æ€úÝ `½9ߦXö߇Ðàó˜›À­¢] K¬—­x©Þ'Š%½Äü(<–ž‰À¢:ºô$e Dýü¸°STÌæ}¶ ¦íÑC}0ŸÙ€ª¾D_5Úxœ¤Îï;zè¨mé$,ÁÇÇË‹à ÚÀ1å1qºã7¾„ £h,‹ÉÉj5S¿ðÂ11·1¸¯lM7Rž(2xÍñµRf¶VÌ[Á#Xbšå>ñ°Ä6Ѐƒ_îs=€…›î„¶¾ÿÂ!ÜRþNð³áãƒóuwмKÜÅ5OK€ (=„…wè‹ú°3…S]{€FÓ¦õø~.áç=tß àž¸÷eƒù±äŽk\’ØP@«%l`x>ϨV½Ø¼úJ ò°NFu´[ ¨'îàüâêf­T¡ˆÈ!!ÙŸ ®vÄôƒï÷ Ð +Îþ¾ṵ̀£7@¤ÜðÐǸ§‘ÿò/Íðî +”Á/ÎÈ?¢ÿ ¿N ˆöò°Ø˜ ÿÓè'ïÅ1¿%6R8"€<v¢Á‡† `_! ðÅ€ÿ äyÜXð¾ïèUf{qXjnò˜íoÙÜeމüIN<©%D–?Ñ`™W¬€a/1¢~-ÒHxâ)濵¤\;<[f“½%¡O)üèPK€g"(‘¡½ ¥†XZ4E°Kv‹<Näó½=ß!½z&M‚ª~ÔÕ„}‡z#ú¢cüÄdä '@ùFŠ&޳\’CµÎ(ãÛÆlS-°K‚‚ <êë¿ÞäÏšo° ¿üÒK_>jqD¹æûä„¿kþ5ØÛ¿¦æxÍÈŠC~¼ÙúËGÇÉã G òØKtwÇêKnÇ{Y¹Ä®/¡Ôttôâ}!—FAm´î ÇŽBnஜȳÕA-"J+8Ñuy4&][1²â_” Ûgˆà·Þf¥zíÚõ·ßV4V´-FgtÀÛ4éWHÿ±€–<€:Ü¡3pB+€!ö`À'´2¬æÚ/¼êŠa€®Ç8ÒèÐÒ…¨žNKÔÅ8-;€ƒòà@«g4{ºx€¿`gLjMxv‹ÞRê È5yÖR åOÿB€Xå­3‘2ñ{ËÉÝÞèäGiHâ\$ö;p‚fudÀa> «§¹ûuÚü`}Hâuˆ¼š÷ŒÀM–;â®þÈÜwÐäw³?«xA£l°òÛp‹©ËýÇÐ ÐÜ@5Ë_³h­¬ø?QИ„½€½ÆÈ@'€ `¤hŒb€ƒ(³lCS î•ß5\¬±’€}<ŸÀ1èðL•ÕÐAxb!í€õùèðãB p#± ÿ«=ù"(L†ô—@’€›þò[¾ïP_ô¥†óHœHià5¬ƒõɈѩ ºGåé(g’:“Ýâyo'W2Í!ÚÜÀ GQzû±<$æ×¥™ýÒyFëYØÁx>Ó“)ž@Á)]hccAo;ý +ÈÉøžÚ§ã*à—<&áÂÏ!@ÚMëSpï ähpºlzÒ:Îâá8nƒûAðA¿u´çBtC 8ôr/Ní¥à§:9r,?É ÆóTùqOÙ ÿwéø‚Gü‚zü–Wð $Ûö Aï1ëïŒdY¡«VÚy¢&€çô,V1,ÀÅeÝUØ•TQÒ2ë*˜û´ÓAÖœÁ9X М?Lt ëcÝRç1`(F ‚#Ø €ŒÏ4]¹~z 18ºÀ®Yέ®òye¹j¹R¶ +5‚½5ðu$$¿ºö½"Ö—@î¬ÙÀÿòO7ÖõÅ ëàä@Ê |7˜ËßšhÓ³ÕßÀþû§9PÐiû§ ”`ÿKLт羱±·µ„P4À˜úœýÃþ'Û· Ø"óZÌŸÐÿéìiŽÀ¶lgOgEê{AÄ[‰¹ÉŒHГˆ©?­Hý”ûó,”mB& P­ûàDËŸ£+  E €T€þ3Ö`€Åö•4ºe6Ù[ s¿aMHbù<ÁŽ +¹rJ38÷ žXHy| ùü¸ÐRT8Ý3!?^ìcÈ;ìuzè¿ô¡Õ9ÓŸÀtü|2ÁUÙW̸üóЏ72S~Uo’ù—!RhH§ÏÈŸŽÕC=°å[äÿ_¦ºÐù/˜?Á§¼$ƒN¢láüJOˆçÅÿG!]Há¤y6LðL¼òŒ§©€…~‚j']t¨[Á©ÇùÙm ŸóèE߈•Ðû2Îêííëí; ñÒ P!ãá|0^4 ãpšëò讀oLHøyÏí{4ÇH/€ …1NÀÛïĽÖo­ø°.Ùhrþÿ‚ÇýïÆ‡»C•˜€ˆ€rv5©×T¬Ÿ!è†Dm„úýdÿ0l|€“'éµcî?l¬þêËôçª8Úàˆ‡H&°Å€MàxP?ìdC!¡Œqyz¨- =P·-®^ç§C-•Š­Þåóެ8÷Ø@D€´0ÅØ@@làí•ÐÙ7××?Á‰îHÂȵÀ·h\NË¿%mïecÙ8V¦8}àˆ5 kÿÌý8»°Œê4‡ˆ,†º-Äúâ~Cº7Íø$À£Aÿ ú‡|ðMû ܼywývš  Œõo5cA¤b,ÚŸJÀÃþEÖ¶‡²`pQûFÜ l$yÛÍÿïÅk\ï¼òéAå'`0upú4ÕÉÁÇà[o@=ë}Þ)¼€3)ÉÌ,Ej­Àßj?Q°¼e#³ã½°Ãb½”0€-cþ§  µ ê˜ðtŽФs¡{ÇE(¸n•ÀzðNäÇýx¬ Àü~\h#* bñ}£È±ì‹ $0³ÚÌÁV°Z…üñ¼žL‹à H¤ £ì!09>3Y¿xÑ Zu¥£¬uPèѾóìhGV„½"F--ißÀ¥z8 ®_Ø 6'ÐǾŠò½4.rî3CÝú~“濚36zOØ\à§Q«Åø8‡`«†¹:Lð à'Š™C82á¸H]*•*ÃÏçŸøÜq¬õõä/ 8÷oéblàB© ¬^`¡ÆÇÃ`ò"ã.hr–ë òhƒYųMðLHøyÏí{´ÛŒckJ¾X2ПUéÛ×Þ1J'®€õQ‰Ó’âôN óðM â&ylú?@  ê‡u ©5êR¬ /È\a 5(º?ÛO7ýÀVöÔ´ê³9ŸÛ…øå`¶`]”OY '!tÖa,1ñ1@<Y`öŒ@RØ”(ÅÚ?¢¹ÿ#àîkH´¤zÐŒo°8y¤¿¾.ûߤRþå#ïí¹rûìºZ~˜ß¶·ØÍ¼ÛÿûÃYuĽ•{Cpîß{7@ç­äÜäâ3$=M  Èÿ&öåðãå‘ +¨±M @[ æ÷™ãÐö·¹Ù5Ä-|'±vòH,E·/ZÁ”Dá;–ÃÍ$÷k<ÏEð$À¾<jý·w?.¤¾Ÿä‘j…,¼ç†Bº¤ÁS +<úUqð·ŒÐˆóàÊÉBO~†O·§Ï@Æóx~òâÌ̤‰ˆñq-=½½=Î÷ö1cp"PpNbæò‰ UÀåÞÞ¢ä .`wÛ»ôôö˜$OÃP/ȇf|‚¦>2£ß¡H€]Žñ +*eq|æ¢K?ñ0Âù°è§ôQûćå? ‚þasˆ>n10ŠŒp<4ÚŽ2Nñ¨nédN“s“Å‹˜œävy4&]'û¢XeBÂÏ{.èúYäaG ÇGo¢óHŒ½ýöÛ`xšõP7W@ü##®²qínÌϳñf1¾o.c”±‘•›’Å÷ˆ˜ô1qækQôïàœfÿ£F)/B gTYXËeQs çÊÃåáT:žA¨÷͘é˜äB +ç.§{Ó{a—Ÿ©ÆcdFe‘[PMNÀ$Àvn­ºŠJŠ=ø¡KÒ¶bk8çWR +Àã ¾ +:wcžãÒ@@5 ÀCެGýÿîÉó¿Ãû`ŸØ»%ì(h6>_à_ úc£~LólÝOR~÷Øqžïè&7§õîáÌ•\vöИ¥HÌ‚¾,zš¾T3J]ˆÔZÁéRðåMàZ(]+úï ô_vîçëû««ü!FhöÄÀ±N1,¨n˜Ý8_ÑÎøéxÇoxÃߺÛsTZwÏ Îý‚§Zõü¸n£IµËôþ19Y+ô™øÍ£ +üêËäS½+œëƒÜ‹½…orøŸ qjLO^,ŠümÜ|ž€7QããBo,ÇUn bîâðÁ Kð}Ðûr”™9q<–¤aQ(`tzî—AqzrüüL¾÷|äÜ&7e†Å!ãz2“,1¯ÅÏÞŸœò¿HtLìàA¤,†8Ň GÙ‘ˆ„Ÿ4À‡Ö(ÁµLo>ÔdàïK~3ÁÇÞX¾1hß9´ Å àò"ò‘9¯µ™ps+ ƒ=yw²¸9??CðY>“|N8 믋ì©?Ifd:Û¢t(NòÑ8½x‘ ˜ ¦¹¸/ööf.„Åó‘†@zò¥Ö±°ý \®Päg‚°˜Á9þö­>ŠÁÒ£ì½Epîüã0äGÁëb1¬Ḭ́„=ä”Î"]$±[.—Q8bÅöC-‘,Bí)/_˜}¹÷\±¦"ÅÏd`€*…k€>h$nk·Â=´¤=À`°Ë·zÀ= °³ hz“þÔoÝ’€ÄÏ(jÂl=ù|­Bç©T둌ýhãî•,Ê»!¢}ð¼Ñ½V“/Ì´4ÜüwÀÊeÿ—«Á>G¾­À&ÏV–ªr ÐG7Ô¦¨ŒPƒñ‘¿Ãfú1FI Öfª¬´_•—½ñÝ0 õ€½´jTst3@p°´áá#ý¼B®Zþ¨Ê&€¬ªE§/k'8á-{ܼù¤J@  ¿Fœt"®5ý+*@_}Gx< Y×ÖÑà <È$® +vâm$8}úÛ–Öƒ Ù‘Oß<üúEbWËLvÂi½{à“³Ë]b" ÐÂÐø®c`¿ÇV°_ŽÁOü0±³ñÿèH{Ú +ð~<©û¿ud ƒò §~Š€×vóhtÍÆÓÓ‹eðÒó–]…6f ÿ(í=ûаÁ€«KKm@ª[Œöüß{®–ò™¯ý 0Õù<™-¬Õja©x¹¾ÇæäÅÚß é¹þ`°Ï#ÕÊõP¿yð?Ö.‹&í\.NÏz‘êŠlåâ…ñ"ʤU²Ëx],ÎÍÿ¼ö7µz-,žz%“ßë\!ó-œV(^(Ú》ù‹<5“»gòçò¤W–cr2“éíË—°Ê3郀&¸È’O³xA(j½È g)Î,œÏÓ°$Ô+, N0ª®„¥^œÝsÇ‘‚w&œãYr~Ú°öù|ýq½NýÄ’X*Ò»ÌÁJŽÕ|^ã:ÚÛ‡<'‚Y^¨`p’۠јX;5o?ï¹ Û^X?@¯}[˜ýÿÎÊ;7ߟӨ·&˜ÿgIÿìS5<8 ª”±ß¬‹OŸc7iÁ*Î`”wF²c7M ´FÄõZÑkÓŽh]ošˆp`˪„ý3j“ÊBuì (•M™Ý³ ÃjXeýÅ1@Ò0âÙFI‡S°߇/EV:@’7z0ß?É}˜‘ô8¨ND–• +® {f`ðäIÔy¹r5·º¼´¼Ä! G ºó8Ý;vöX¹yÓã¤ðõh$ÀØpûp7z#òÄ9š ñðžQq;Äýº•@$š´€çïì,cøñûSî~´Hã[cÿ.‘'a“pZïÆa©9Éÿøf»  éK•é¯×"1ÒÍF–?Q°¼üj‡›ºÿ9Ú +ùþíÅ&5HÀZŽ™ÿôäÀüi@S @ÓGNÞ;–ÛxkŽŠI€4†ùÏ>« 9”5¬‰šUO@¤@³ —íç2¯ô e2C/÷ÂïçСC|>ý˽C/Ûa{ÊF{ +…s™Ì+/ãÈPfˆÇÁyç JÔ€m†pJA«}}8Ç‘?Ç|Îex–-…Þ=_x%Àu´ŽàbØ#ðâ|Ç /g^îý_°Cû ¥~YeîãûË@æ\Ïå S•<“祙, ì²â2qÉyg¸Ä‡,Œž£ÔÎá8Š>Š<Îôô ±Ä,ö+zç9C½¸:înen*îìQîâm*pp’Ûôüsº'¹?†ø†œÏWü=ÿæßxiüú¦RãüÛ_ÿÚ„Ázíñ6Àh¬ÊþgϾõ[Ô)(Œ‹ÏqŽ9uú¬ܸ©Éäp2ÊÙÊÍ;­ºóÁGïñl;@úÑ.À T1)Àÿé>®¦^à8{‹ Us9WÍ-äsÃ`fÔ¨0CÀ稲ú+dü~9ù& F +PÜŸÙ+¸+´»¤°­Nþ8JægÜBõÆú­ YŽ÷˧#Æ0`±L€:ªZaK„ ’v„³=¡€D+€ÅB0Îß¿šý }M\§°€â€6ÍÿÈ'‰FwÂȺ…ðbq¾5£µåþ:£ˆk¯¿Í‡jÓæ–74¨eåÃ}üŸ> CÆê{ KÔÕXvöD É°ƒú äÐè5¬/ÝøÉ$à' +q/€‘5˜é/O@m€¼ÿ’Q/@>ïÕ† êH¼…üéOphËx«t¿tã¢uLIØ'”nb ýdøã4äåøMÀ¹_ø'&vޥɄ¹{@.gL¼g€¥¿ V:ªê9þï9ÚsD c›¤GÂ#Sæ ™s£¤.RODPfÜQJ +«!wꕞžobv’ÛßøÚ¯ïltOB‡H¸Ï_ü–5Gü]ÒõàwX=ð6þo·X¹±B_>ÉŸ¸} ü/0xv5BºúûÇÆzä‚ýùÊ‘St0àæÍõ; ÀÃõ•‘Á±›ë&Œ×çˆÝã¾[o­`þ3йße·ôGÝ"À€üýeØÝl@ý²XFUZ¦{ÕUYfL¿ØÛ:ïƒøY‘ïAPb®S ÄõÛøŽÔ\£…ÆXŸ£êAeÉ‚¨LµXYe€jkóHìQ¸`G Àí›÷6èˆ=Þ‘ €}²ùS€Ø°SàdÌ<ɵ%Ò^~Áø+ý'Ó_·D»N< 9Ð÷¤ûÓº2Œ©?FRNëÝ#æ°ÆÌ¯:FÛqZx„ô·Jî7ú¯,¶8…¿£~¢§âp@:Ú¢'@{ â•ð&€µU5´õ¸H«,»›ÿþE~·J÷KeŽÖµÝ€Ý+þ'Œÿç?§KÀ¢“?ñ±'&Ò + ë¢¶/„…¡W2æÔ·€oÃb©X¼ü)ŽÍýp.œ«×C Ä4¥"Xo4SºR’¯ü +›ÂÃÍííºžÐÏ]a oa9A åAX§=¸ÀVò |¼U{Þ¯ÜÈ\k[OæÃ™V X8“A’RÌáKÄr²m¡”BÙ.Qº 4æ/\(L — …|±8[G‰pÝúc>/™ÖgP>tȾ`qŒA1˜‚æ­_lêÑÂl¾@¸”ÅÑ¿Åêt0½²a –._¾Ö¶ë™Ù¢è÷k[[(BX PòÒÄ·Xr|ä0ønÉ - XP êÓ€¯ö„˵OÀª³“Üî €”KºmóÅÝ€ŸòÜ·GøÅÅûNÿ€ùZÏפ(×Éîm×n\{çÚÛX1Üûƒ0À䃃¤~ƒ±?Ð# ‡¸Q í„à‘ìÈÍ;bp‡ó;_Îú~PëZõWäÐËx?‰gUîP?æW†Ýà †¹e:€u¸JÏ*Œ‘éÖdÐ:Ìê ‡r'À2sÈ =¥Ï+g‡1«†çɨ6«¹ùØVÀч*åêòêò2+¢*dˆÀ¤áT É Ãüù½€ÀÙ{¬€îxwýÞþ7ú·3î7Aäq|õÆ é¸i€.pöß!§y9´`§ÔÓ§¡¢}z×J;8­wÜd}íe*ß¶ÿ)ŠIòi­E ~kMüo$àûž= ¸h¦ÿ]ƒMDÞ!áHÅ óF€Ž¢Üü÷ÒM¼[ºeöî똒ðH0@€AÜßö1É;“í=€ôÿîRÛ&€$âj…ä·glÎ +Šé .PÀú³… AæWK—‹C³Wx†Êû˜Ï噂AÀÅËÁ|0T˜ ŠW‚I°¨2'÷]E/iw|)°ù»¤3.CÛý0‹£\e´À… ½#Ãdç¾R…µÂ9®#“Zb ÏB9µ‹Å‹LŽÕB/c.ÁôÌL°ÉG +ãCxÉšP›g +xŸG  +ŠÐ3ÁEÆ61Íàô·Ç è@¨èŒOÃW +8ÉÛã* îc1¯g-í;‡CÊ+Üš 'e(ã$·;¾áìšÌî¯ûªãùs¿À €4¾æüŸ*ä×ë@ŠZ‡µßnS¾aÿó@äÿ›¨ç`ïœþ)€â®vƒ[tP€S6¨F`P’ÁAãÎõ§G/Û§E<Û{âÓº ëþWÝ+R PæãXÀ¾Ù\¥:\YVÁ,;æø˜À¨"@ì4˜þÞõ P~´`4ÈcLˆUšBU>1›Î^JªbœQÉÁüZ4K„€\”áDŸD%¥ x[ +Àì/€Gxðpý]sx7ÀŒÿ!5Ó¦f‘´ÖÒpߤނ°ñŠÁ½:®TÊ¢á¶"RÇ*›ÿiëÛs„¢ý¯Údæ˜ä , –à´Þ=œ·’sÒ@àæÿÉ“øÒ"ú'…‹M;©ß@ +ÝÅ€3-?‘àøU#šø…ío1ÝöˆÈŸ*@¦?%]­<|eEþ¯™ §²ànþ-=,pô·Qá¹+å ‚ÏÉl@óLOEð¯Ó@w¼þH!Õ½yö©j…Â}V£€ ÚÔ†Iš·0µQ8÷ŠÈö"xpºÆ0@ð)$bð,·Cj$a„¹;Æd¼Jõ5¬’ë…—‹óŒštÑZŽ‹¿{@4¥ È ªG˜_ˆñ˜9ûëMbT(ZÉ!8¦ƒù™é™iPº¸œº€%§(¢Ø3VN.¯ÈU@+\³g§€í Cʏä*‘VÔ‘èãÓp[yŒdk–-ÝÇì$ݯÔìnøZÏ`ý¸Jª0_ï‹þà@‰¶Æ¿7WøŒ@=-Xph +ö?ŸÛ"8û. +z¤p¾Ø%ò¼;’¹q«¢ôè•ä÷¦>Ç{¢WD÷Fþi°? P‘Ñ.{©ÌÖüíË옭.–Q߀ŸÕ +Àª•Öj¨âe5ΗâøéÝ·n€ñOsK$\ÌUé[0>G]Žê  0õ5ì@e8Ë!˜ûrµ +€úŠUKÀËtF%úOóŸô?†àöM|#nÁ3p]@Û<€zMØáHšÿ@·rÖõR{D÷Z´uÁ$û/ÂÌGÑx}3~6’Dú„ïÁg…¡b+(·Ë¦ódë˜ç臔Vv„¹×J +\ØCÀ7ÔÎÞÀ×H·Ò¾ƒcsKô|íkXC¨䈔ÁÁ  ˆæÛ-®­\{÷æÍwn^»ã¸MF¿C&àð­g §ÿÈWÅ×(FnŒ228òÎúÆ£¿ÀôÓÄ+ù†Et Úõn{“lý<@/¯Jö„2j ÐÏÇð-£î)£.c_¼Å +kžEð¶š-/ÊX¨@  nS…†¥*$VË°Ìø|{B ŸÐÏÿM`BJ²<*à\Õ¼ÿ°û‘3ß«0R¨!¨Dø0@^€W'0›"”²ã´2¶Rq¢o@ V+¨!ä P@x} À•Ûæ éióŸÞ˜–³Ùñ q.’l.êQ7CÉÛ‰+4 À^Þ/•ýãº6IþÝò<¨4§Ö»‡óVrnò¸ùTâ€&€ïÔ~3œRà7nôß! zÔ¿à'Œ¤ž¬äFP0¡Éüÿ3ï~¦ ú·Ey•–4pK &€äÔÎ1,kƒö+ 8÷ ¹²Ç°/@JxÚ׈î<ö€%>¨Ë^¨ +"l÷2ƒòΜ#W€¯‚ÿ3ùsrh¼ÁÌö ùñóÅÚ¹L4ŽM@'ºÃzûk5¬ÍM„Á$fN¼ +Ž+£‹™È|ô8¤}@IìBZÔ@Õ¸t!¶ó…ñÈ«›A0Ê6ýˆíÕ6P(\È"¹Ð2üÝb±^*¦iésÌË@V–àñl¦NuŒ²‡rF‡y®È _æ;<¯>1Ä’SÐè×!,ý¡ztàQ= +ˆŠa8Ñ;ÄÉInw|#²ö±Ýöàõõ¯ƒˆÉÿ’`⃢ÜÝ€ë|W—ú  Ð*øŸ/m˜@½ÚÐ?±‚ׄàÖ­{Š`åÚOiÎÙÙŸèýpêêeTÝR`XÜXhߘ~¿ýôÏ|«?å¶$ÀŸG)¢É)ß–I)€u)V5{›Ë¨hÀÕþãlég}Pέ‚za11 < ;¼8’…ýF5€z–Kn8ZDȆOýŸ$ÿÓÀ‰‘8Ÿu|Vãú`ƒÖ=-ÿÊbUn~Öíj@n eT© à2EU´ÂXe³S} ¹ÎF +àÝ È¢Àðl葆K{°*% ¤×Ýëco¾ô_ChD'k&yJÏ Å74VHíbj*zhèSaˆíé$pMDü/€•‡Ö»î20‰eûc*I€«iС€XT`Ï&²(ü£Dió¿Ø¤ð ,f¤ø}ʈ€V1”æÀÒ·ÀtÏDü|E+)ØGÔMË•ýÇiø`= °ÔÞبÒgƒ„µÜ/f2¢3zèÐý(Ì$€|šžÈOLCØÑ5J̘ÿ?W’ ¥)Âú• ‡Þù3™Ø^ÃîLQP£A±8…½X¡Aç©üÒ;0"ç1ôÅÌP!ˆ”³þXàã–Ê€+ù …âýDɧàîÒù$ûüSPl•œƒë02(ùÅbÉB#ñ ŋµâPðéîbC«à^Èç¿u<â„50(@–ñ¯“Üî’W©À¸X#ÁÊþýâí ä–EÒƒìÿµo@†€ö¹¥7lÐ/À4'ÚãmºÿoøÀ'ßa4ì +?gÓ??g…u½ø?j8Mž Y¹q{å¬yþüÏÁâúŸÅolˆwjû/þâÏþâÏ~ïµÉÙ¿M6P· fÝõÌ1~#P†Åflí¯Epþ0jT9`ïÜj67°€äà ¨ÄÔ~¿€ + õ?ÿG¼H ÐÏ΂^Õ‘Å+¬€¡$ÌÔ¹Šš ×Áµ¬¡¹¢VÏê"PUÄó KvC…Ç]i–ŒK(€1víkò˜¸ þxüÚ¯Âa Þ]¿C–Aó?Éÿl€m9af ¼–`dþÔE„CóÄlïÆüßé±·MlÙÏÇN²Wôpàè!A±=Ï7_<^U + Žl}ˆ­²wT«öÂð×Âi½{D¼•˜ÛÆìæØüâx°³@*±?•ÁY0þF*ô°@‹”w?Qˆíy¬ ÀÚyöØ Àʪ[æS´žo–ý7øW†aà=þ¾s$ÀÄI=åp1×nËËÁ|É@áxßÑßP €†µ·†uR´“86.æ ù <— BPglûGÍè$6aæi˜)Õƒi‹qÝsÙS3DÙ¿Q,¾!ÿf‚ÇÎä~ù‰€DB¶4@o!$Õ'Lþ¸íׂýNÉAª¾L·@@Ñ~*Yäÿ (Ѳÿ,-Ì™^aŒŸ{/Ì@„ÁÌäJÌ;†?Q•¶Šîzð€þý©¿ß:Þ×÷Ò±¾ãùb ŸV·©ðÊ''¹ÝA>5ê'×’x &Œþ¿H` +„‘/B…ð7‡§68³·Çô·Gû ·aÑ߃)Ï¿êà€ªPÀØ^ÏWaN  ·#§Î¾s“Ϙ§àÞíTÀ+àž?û³¿|ô§öè/+þ›ŸëÜúéŸbõ§ØûS¶úÛ>9˧58XÓ¨révf~ÓµQ•-´¨(X£VÈÒBÏU9 ÞQaçÀƒTAò¨/@Eùðñ€ ÿM¨€!9ÆâV)ÈbñêU\c + S‡F>2d?€~zX5ÒnAH FÄžæR7ÏàëÊJ -ÆØ,ÀÑó\¨oÄâòD +@,wýÆr í==(ñD@;Ñé ÍÎŽõ`r[’ŽišÓR7§a†; ä@ªAÆ”>lüù”&Sñ9_=¬›Ê OöOþòUföÛ +$€æ³ƒ/¼¨©{àFóV'—ÝÄìðüA4©:Ò³^•ÅìÞcØÿŸ)”(H ÐÖ@ö4À²ˆß¦ÔH€©€È’\ý/´Šˆî‹­\O¥4dù >€i€ƒôïêy€é&€äI +€” Wå‚tµØu ›·˜ÉLÉ0ÍÕ<w2Ù'³ âp43;Çô†À‰¶2>™-ÕgBEØÜñ633Ï {#R:Ø•·¶€R1¸|™õæHOÃÙÝ=qÜ G(êeà0Qœp»;6¿Uìâ$>â Ë@v' ØgAþ$P.q}¸Y+Ll±äܧ l-ˆµE;Zæ?4@ ,¾ÆûÈŽ3|HÁÑc}çñ1©[&ƒž{E£9Éíê׿A‡;Íìˆc{Œý}ÓÓ>oØÅHö¿®+£^ oˆpxòg„3{;Ðû¿róú-ÛbTßûë7ø<`S± +Måý0}å+/¾øÂ‘ÓcqÀ½›ôP€Ôÿü§ t,ø¢“ÿ/ííϱƒlor`ƒÉ´ÏN0ú7ºonÐ6f¯cRõtÇ%ênÔØ~Ç&€2­t:dÁêôØ`½07¨@æ 8 ¤Ï]솲¹Žå‹ª +ܯùEŠ{¸_Î:"%+ÉÜry ¬~À› qG6|œ`$ª`‰9‚:¬®¶3lý•‘•¾5Iõà—Æw™<›Ÿ5˜ ¡oþo Ú•„Ñ¿ÜÿÄ¢Þ Ù·÷ÇÖ~„´ì´Þx“->S$ù +É®#ƒT¼†¢üd÷«‘?ö´ƒÓz÷°ßLjî@"£M½Ó°ƒú JNÒ?ùjÒX =ÅȶÀAzð[ÅoÔÓàÿ\Ê"67þõª’ù€øßÍ öà…ßœ +€¬Ê»ù4yʸU˜T`Þ·èöq_ööÍÁÿIƒm¤@ãØèÀ)ý:xÊeã¦n1;4Ä^y૾£=z `#¸¬i$;µF;ú±XÔÎ fØÕÏ‘˜©×Gƒ'ó|f€©C±ª66ƒ˜Ïo¼áÛ¸Àe(è€ÑLI­æ¶œì1Ü›OŒ“ZƒÞžDW…HE6G‘xFt>SX*Õ Àÿ±öàšoð„[…âŠJåbŸˆŸ4*ùô&ÖPRuØ€m, +C*ùÅàb£ùAåÌçc QZqÏjùW¾‰©{)M°¾ñÿoD~‡'}Þð«¤{Bì`ÛKFxòg„{Àþ¿Öˆ¸yëöíõ»®¯èI€æ³ÿ¨•Åÿ”ïPÈÀÞƒò +îçÒV"D[ÑÛ†.¸ŽWLùù§E€o¨2aÏûî–¬»­ uŸ [ Ô0e˜ï¨¸‚wµþW‡QÓaÌ #,*2Aý ~¶¼¨²k^ +T2têÓöÏ]}my‘@gb!P@ÀâÑHUò<ÀcdˆNó +ùì¿b+$ûFðKúÀCðø˜ü´ÿSdtÒÿ=ziÅò‚ìç®ÑþÇË)}74)ÂÙÀaüŽdÊsáZÀVÛ‚Ùÿ‡Ùä¤üc·¥_lôb¯À){6‘Ái½{ð{ i5–»Äý±H €]zH$=I «6à'̺Ìn€ •80EÿDÒÎZ„³¿¦e ÔX€«ø±Š-‰räþ'èpúoíHÛÔ,* ¯’qÝî`êÓ¸€ÿ<ÞPÜU¼y.„ŠkèÖ€‚EH>¨moš={SÅÙÌÇø€ñ†Ëý :îå¢ +tÌ×ÙRBŸ³â|P¥øÒÔPÛ.Ô¶jsΛ´¹I£,+:œað&mt¨x±XŠŽ´y˜ý"A{!`%GR–|†E}ƒ=Kþ Æ1” p)fÂ]@\ÐóP' <‰¦^èíý&&'¹n Nm0~cÍ"îOúœáK€JÇS?+œÚ;aåæÛ·×µÆzVhL6FoT¨¨‡ûèàérçæ +ègåæ]Sû†Õ-Z6ඪ”lž.–¬»Oö÷søñì*îʰºÝÑ÷^FÕE &;Þä^P ŸU¿ÜWy€ô  Þ§x+'Éÿ¬ä•Œ<Öóô(îO ª™C?›!˜žêCƒW`¬‚üÌ«õœéË`>¸‘¿à>PäÈÊí»¸ä~yìÅ ã4¨rÀ\ý†ÿÚOkžnühŽaŒ‰À’æ;~<2ëO)¤Ä’ȹЋ pæÇDpøEISø)Ú˜ÔZ±=ìèá)8­wÜi}㉹C ™Œ„ºÓÐ d`î‰ø<Õ^$<¬1¬ùŸ ИøEì5@@¨^ÿ¾b„¤à*xßíÿeüûò©”‹Ûÿò4]‹?R¿ûˆ)Ý0{åÊtþã©6Ï…àŸÒˆ¯)@âÚËI°¸lCr,€T€JïH €f@¹lÜÓBµä- ²ÿAal±6CX{ +yðl°],ð±€t£ÃôijO柂Ïù¤@Ð&T< +òähµfRà"Ï'¦È‹@p.ÃM7ÝÉüØÏ&ˆˆ÷qÌרµþhß¡¯ôé…¶h°©Þ˜26æ:!?Ád½”ñ’3µë¥b[ˆ0÷ˉÒS•œÂBÀKNÀQƒ°‚Œ!˜”7óá=*Ñ0 ã¿Q@W?€lx à¢>)À+‚“\Wp^mFƒþ¿x0÷©RÛU˜Û!Ú¿ù.;òu› +àîú1¹“³Q[ª*Ü¢SGNŸ}çÆ-5<\¿ *ȲMYÔa¸CTQgï=b't­lÕZ{iaêîÓ´o[¾Ïë¥îÖ>™S¯}Ô¯¨V˜~F­%îGÅ< €Zˆ¶?k×J–ϰ*Áª2R4¸@–ÿäÔ|ñ"{à8½2 ik\…x­áÜGäN~ç@@$\a˜õ +ÃË)Œ¹×vøý³þ nvàZ °Â†¹Vnj {~¨Q]˜0úüÿ+c7n[«@Œý7DÑ|<Ç0öÇ2¹»`OàuKÀÓ¶Ù8Ïv4 ¤t‚Êz /Bø!z|*e~©ô¸–ˆ`¬¾à«à×\&<`°¶12Ð »õ ñ 1Ò Á˜)À£ô%q$@m0 ‰fRŽAúgI9-¯ú“€8¥=‚4~q„DÀkqÌŽ…ê™Ò±š1iáwÐ fÐG4äÊøcâ¡8€ÄÝK–ºÉP?XòÔ@ÚPm× UZvzö¤Â3ìùx/€ãQƒ»øT¨-·²·§ +÷éGwâWÔÁ˜®^êá<‰ÓùK¼g„:q/Ÿ˜G§ŠA©Ä&Æð"¤~s“T·½ñN%ïLH\¤™s´%ŸÍ\uÛ÷zg** CíÅZò)Çö¤c–Þ>ÈïÏÈw¡d,®FÏ ã¿0¤Ay•IH‚É7PvÏ«àKòðÄ7p^8±Ç€çÕNð”Ïv--L~ô0P­ÿï0Šo)€7¯ß2)š¸ùáÆ:ìC>æóo;õŸÔš{ zÇÆ8 ý##nRF—ÜãBK›bhÕ¶{#êo³ˆ–^'w™îÆ×jfT4ÀQP Ð_, ~-gY•Uø?œ•_›²Ï]€úû±Ê•OFîjgxM)Py Ï%Ô6Øð“³Š€ž@ºa¨¬2jiyœüÏŠy•-^mfÚÿ2üAÿcZ‡;ÿ{,`Ê@·Dÿ†oûÛâ³ÿWV*ïÜæ­¾²OðM$ø?’djÙþ6Çm;us#á +ð¤ñü}7Ùɢؗ Ü™Ø Xöxæ£Ñ©ÉìJÂÞØjðÔYöS€^hâÿƒöà‹jĬ™@/~éF'„yvÂ=|uð$cRÀ2¯,ŒP‚ž-IÊ Ð1€@(WAÿö,`¬¤< þ¨൤@|ªÂ»ý¿Ã€¿ +®û-´©õðu¿öͺ”  ™c)!:xìmG/ÝyG‡€U^©Nín*ne2³xœüß—Ï›Q=y±ÄñbáAmº^*pü_ û;ʼnDI¤:>Þ jóamnÞT€Lçy)®…óQr\ìY"ÿ³Y½04ÅÌpIõ׋ÙVÜ‚\ v°ïë+~µ'z¯Å@€DLîçštjA= ·py¼(Ta'ƒI,q–š1ÂùŸOLÌχçÃ9É –7¹ày(¹šÔjâ³äÅ‹x&ØxÁƒœ6yaä´ßÍ•Ðþ`ö¬fk\EͪÊÕ€4À‘žß>{çl|òhãÎ Ðhh…ý÷ñ{Šò Š€Ô>S´Ãw›ýmpà0ê9X«­+¬‰¨(¬âFµƒZk„ïÖÀ¢h-)úO*òx ÿ¤bNÒ§—Y¥##ž¡‹4ªB«È¹MÁ@?„€,w^‘Šj²h3Àî7ßHŽ +ì°22{>Ù°¨¿ÈúÇÛÝ»ßþGÙÿòˆî]ñùm­=ÆÐ$ô­‹¿u4¢ðo‹÷ ß6Íà OÆV2î;­¼tØ ¬”M”W3x½þýòÿ Ïìà·¡/*Z&cð=5<‘Ü’{íö{0$€5ÿ,ä* üyŠæ§%I™¿ëFÿ(+–ì`øþj"`)áx+Š4ùéIPpûÍ1¼ˆ~غuvû´ž„}FÜ´«¸7ü|øeã=pbè/dÀß)¡ºóHìÒ  ) yŸ$öàøqfTÏé)‚¥Ž±³š;Õ§#ÇøÅé 4S +ÀÒäà°ê¤r>‡~o^ ÌÅ?÷d³€ù775о±çÞ Æî(ú›ü ÿ™¹šu àYbŠì˜-)€BaAøè„IzüÇÕ€þ +yTHx0ÄÉI®;8±¶…'û‚àm YxºgI½ýl +àF´²Î&˜Žt˜ ›ýmU«”§alÑh@òœ:}vìÚ-Øüë7Æ„þîmcòý¡Lj'»Ý7[ÿvDû°Ð€ü»Íö†Ê›/ªUéjĵ/ëqÔF‹•œˆƒ°ÂT)ðM©ÕüЈ‚ä{æ p˜äÌÊ2j2Àµxyö¾Õ0÷UG«*ÄI¬÷²fÅ)]H`LƒW›y˜&? 5h3±à׆åú6ÜYß 0þçâÛßþo ‘ý?R¹a á´‰›ÿ0‚ŽçÀ̢쭷$ì±ÇÓ´2ò—¹ªŸ6<9œ`2¾;—kÝ·ØÓ° t$;+ªÏIÀi½{ðëhšqó#àûkÄ$=à‘¥€„vR?AéŸüß¶@ûŽ 8Câ¨wH +¤B°ó FÿRå*ƒåHy—Êi@Æ­,½Ûÿ-<~ïì¾%Ö½hBdþæà#y_ +€Þ9þˆ¾Ftç¨òóìÒ `±Ü °Š-»E‚ €®@x&S›Õè6}¿Éñêc]Dj“æ¯çs벞iËã=bZt kþI}ôþf-œÙª…ósð&h?œ{m@ÀìÑÏêÛôÕ¢op)BW +Á{õ“晳0T$Š8Í_©é„^8àqðMò;7¬)„TÆìUðHƒÁ®@Ú`×à3±ÉÃfü§ÀÕÍÙoØaÔo2`Ô¯A€¾¿Ðð,•ÿ¥ÄÿQ#@K@S €ß;NZøzâãx€©Ü=þü†³” ýt CS @¢¸åe_içÈê»N³aaÄT &IS}ä0ÂYÉÓw>_ ƒÂÖ÷2DNoÚ–íçõÍí ÔææÂùí'›µ¨ôqmsÞÖÐjŽe^›oÒ"¿2+ý”F¡«´º8`“ +þ‹–î—2ùb´ËÄ5°´¥bÞXZ‘t&¬ýih SÓ£ÙmKÒº0ƒ x¼ùô +=ÀÖ“º +\›¯ÕjUr¨(€ÇÌ=ÜäþÙ+¸ÀoÞìD&Yr`žÔ`BÀxžÈŸ×}œØ`؇é61¯ùâá×O¢Éà ›°×"¯ß¾ÝaŽ‚¸Jþ‡X¿ÇÖã•Ô½‘58«V‚m=|$€\=ô@|°ñ‰žÌ&€w×ïìÔþª[TÃ4@Úç^/ï +r4-wP¯èœÕ*k™Êð¢†ø¡P}¥ª‹ýý¹“‹¬$€NÀFŠÊQg!2>üâaúÌÑ@ãaçÓ' ¾ù.°®3ÉÀ ¼èCPѰàÚnðq€LpoÞ'@€ƒ1C¬(°)Òÿ:Í÷˜@FïÞ¸}ó.S6‚0äh–δ>;¸&æ‚æ·§‹E U’Sgù|^¼…³¥Biû¿üòéöÖv½nu ö„^o¼oÕ@²Á¨Ñè\ýq­µP{²¹¹ ¾ßÚÚúü—¿ü¯¿üå/þëÖO¾rŸLÔê[ ÿK££—ê³%\£ÆcA)T À 5Ðåçjõ€6>¨‡÷ÃzáL¦„"âäÚ•éû¼ )¶ÆÓë|X?χ¼˜æ©³(Üì™ÒÖÓ§¿ýs»¸a~ åÅ„’‡X+@ëÓaødóñ&ÂüÖæfíñææg(úßÿý/ù÷O¹ëéJ(yéǵíZX*ÎjWJ(º•\Ïþ/) AÀq>´w¥ö´v¿VÛO@+ÎÚòY°óíêà û-£‡û·í~0Òp{}ýáÆÆÝc9y €A]°Ôƒöœ&ÿ߂ظsse$Kcô[Îûþùbwcøfë[é]4ŒwŸŒ^EÑÃ4ôÒ‡Zµ¢WÑ´»¢Ç $Þ·ú‹ GŸïbðÁöbw~Ž^£'ô³–ÎÛsnÒ± û>qËvq¯mQ ´dôÓÀ&Ùÿcê@2WàˆZanÜ¢Gf½Ñ?±¾þ˜ÿ±@ +àÝ7Þ½ysãCþq× 6Ãøj {'[ÎFð§¹f$Œßµ¿AЄ‘½íäšìÅŠÓs?x*18_6@HžÆö“Ú’?èÙêò˜G8X5¥ÇJÃY}à—Mòj,ÛǤ=Iкp"QQuϽ4 X¦‡ÁÍöPRC[À‰ŸôâæØ *€†`‘ÝãF€¨@2@IH³bì–Eoo¶’ðO‰»ÆÝÀà0‡Æγ’€ì><É^ ÔF‹ÝxråB˜}u¨¤•s/÷êíËd2ùÑs™Â¹B!_€6à[JÁ諰اؾ¥ÂÄ¥‰ÂÄ^¥âD¡B,€åгS¯î_†¥;Q +¦¹÷KSHn ©<¢PDæç2¼Àèèè™oB]ÄĽGûF ¥B¦÷è¡C½”/8óÍK…Q®ÈåÀv €gN42P¸o–fu}¤½4d¥K,9?KŽÕÙÙ¡ÑÙY|”œÉPôFÉé×ÿ.(œç-ͨh(ùè7‘A\ÊÑs,yþî%Ð÷òË/í9tôe/)€’¼úÍ¡o¾º7RtbMÃw{’ýa§ë¢»À“ +ÍÛ]é¾5< +0á¸m1ý|²Ýs*Öƒ0¶"$€8býæÊÙì¸àgi0íïõ‹3}³ð…ï&{î>‘ZOê<ŽÓÆíÕ u[ëÙü^Žë+Öá(UdD¶«^,€ +—ïn àéÖ¸ȪÙ1Íð@¶0*·(S*A² Í’Ñÿà{=2@- ð 6¿p$€ÀúòüÞ{ýõ¤ +àŸ¸~—Ô§áh-œi}vpÃÞœóñÑ›6®Å +€ùc²CLíI•G¼›[ À zà~vfùcæ¶+ž`%€&ÅnkHiú^ÜÿDD^‰9ñýðëlÄà7DK–/ðHR¤lï‘€¯ÅjÂM €¶1Œ[áÓ?‚£»ÅØiyÄÿW¯f—¯«€öº€J0 jè 62Þ/.œù¹ÆxËä3!¿rX„ƒôXó¿÷hãXìÊËœwAa¼¶Ígz:ÚÛ Ê:ç\¾"Ïe2gø:s†\‡å™ÌhÔoÜ'œÃÞsg2àC±")ý\áÒ¥b¡ð{¯œ!'*Gx2gF‡ +ß‚ýf(3šâÎsÈä .IC™3ñ2×PÊ^8Äçz)ÏÔ*š ¿W˜ø=H€K¥¡o"GB&ÈõLt1”œÔ¯u|(|"ÆU3XZ›¸„4—ôáµËOÀ]âUìÈ 0ôMÃù¸K(ó¬Ì¯¼ÜÛÛÓÛÓÃ2÷ô"ÑÐTsãµÎ9É%A¦lÕv(B”ÒÞöĮͩ۞Ý.gíoƒF­´Ýî*!†o +€”àæ:V7B¼;F»ßñÛQµšð|y>X¿6ºÁ­}N6$z%—¢|‚lŸÚg\zÕ¼+ú‹„iÞƒžåZE­ƒ:Ž;$DÚÒXµ°½rnG¹Ko¦«ÀØ»ÿ$ÉœU€3¸&»K!„¬½™7UEäËîÏö›´â1žÈ÷A­íEÿ‘þ ÀÜ2g7èP+ ÀO!6îÞa+€I€÷ÞûÎëIÀ·o¬¬Ü¸}oöÿÆwß_¿ç^lk)Óúl8ÝØE%ài76 ¤~){#7À}–„oÔÌy¸@œ.Ë«òЀ´‚)ÁfÁ•$DéÀï(} ^à‘¤hôHBéi; DŒ¦µÿSn`“‡÷°$ê'ÊW³ +ÔX@I@ù-3ÿ¹Hx^ë.Ào&»s\h+û”TòЀO¹Ÿ€ÆÕr%þM½ÚxºŠà(7~'°Yšn~àb__ß·.—'/w8 k+³Á,Ö‘Î<ñxÕî×·j÷¹ßÅîÙ໳X̆u¤gž8Tû¬V«ÿ¢´U«×ò»µös­¾µ½õôÿU¯ãâS«3о8 Veû~ ÙÓÒ\›{ö»Á,»ø»Ù2óZ9z(Ïnz¼L^ fkµYvJD‘ï׿Ã:>Ól8û)”î£t³³áýÙà>?VYòðÓíZ¨Ï£‚B3K~ŸYNóApÿÉf­þ´pŸý+¼7ø<(y}û?o?ÝbÉ?­}j%‡~*±B)”à äÛXѳƒéã(ä¿•Ï\Èkõû¥©©mQ%Ÿ +'¹Œ)ßNÂ8š7»Gsòö§óH‹CÚ­¾–Bœ‚+m·¹Hg8±·,D¾Ñ ,oßæ¸>êÕ?À~šQ—Ò¶RKpÄ»Zc>¸µÂaÆFø(º}Ãÿx•rƒá“´ï[é]Ý)ZÝâÿaÆå¡ÞÄŸÛêVî°ŠŠ´Lþ¶mT½Ú¶c jÖ7af=[ôaÒb+Ë&Ê¡â_X®–G–+«ÕÊG#(ê>Áõ& ¼È£†ZE%U]ås ñ¡pby¹(ö€…‚4€ÖìÅZá€À`Å Æøpƒö¿$À{Àw^Oz¾}ãtÁÆÝ>Øxýý¨à½{¶/¼`¶¿Í޳cߎ$€C$l”îà±¾vJ r¸Â8Iœ”‡,KÌØkx4‰üù,ÂØÀSuyF˜X@©‡súž ï;=7<üEÄ1ØÑÐLþDì %›Ò m LÙÿ˜±å1ôhEè`>R¯ž q€›<Šð€•ÜæHô³ÃçÅõÞ4®Ù­Ôߨj&Véûvð4Öé¨8ýÓÐ8#íXNöhãè.€Ú],ß›52é´8ž?1Îò™yPw8=?¿ +`²’'ɘÛ~ÖÉŠli¯Í1òo6¼‚½X™Q‹|øÃÇ`ÎùÍúöçOë³µmì®ÕןÔ7Ùv.RáGŸ­Mœ ~²0 e²4²¾΂թBW›û.‡ôËœË/ͳs3á|™\,Qb|”ÇxÕN‘ðßÿ°T€.A‰ÀßÐ(”ÞgVá›,ù½S dÅx¾¶É’ÏáÊoÎÏÕ~ñùv½>%ïS³Ä%Ç›ú(Œ0ê¥L†-ûÿQJ +Eçk›’0ÀÅ´pAc,å‹¥íBñ³zí±_7t’KÀ˜’ð ø–ð$;<­Eûš·w Ýô^¥J!y¦V´Ù2«]ñn'° `§€ûÝ[_1“Ëæ†mEþ‡Hz¸22öî­„I¿·Éÿw´ÄíÆô)`öŠv›=Ö¨…â‡÷[]αyÜ*{ŸœŽú–ñ}¨uQs¹]½†]ÿ¨$bÏ¿€t ˜¡YF²UÔ­XEí^­¬V²ÜÉbbKí§|«Ž öá3ˆ°;*UèÔ¦´zXAvÀ +ÿÍå_á^rØ`À##c7ï>úé#»øŸÓþX +à;ôüo¢ÿÿí'?¹ûá‡ë¸ëê%ÈàÞûëwÒÏÄŒF¶œ¶¹Aö¥$à6@?˜Ö ؤÀõí —JÉôz—áïya{`ÿÛ‹¿B’¿ò°àwÉÄIòöîÿPéó O,1ü†â/ÿ1ä¢Ý{à+Æ€ +Iö쨂ÍþgK™ù/9Û@G'"kO$°LyÄýÄ[ø_4EÖ³ðþ·S @"Ì^Šºqë¢ .“ÀG¤bäT˜Ž€† púïäð&b_1±FÁՇ˹¹ÎÙ¿d4YÌ?Á@vðàûðJf‚†2Q +¦ÀtìD7=;s%˜ƒq²4ÁîõX/M[xýÌ4¦Íù­ÍÒw댊7÷´ °'ÝýâhÁÕoQsâÎ’Qd(>0¨ÈGëåóµÞb½6Cè1çóùIŽ3Ì©ëÞ4/Wµ‹‰/—J”,­ éÏ0?Biõé°Í•’´È=ŸÌo~>QÚÖÑ €Ö`Â8¼@P›-)LQýŠEöxã3'`üÔ #RõÂÄÓ'¼ˆÝ|'¹œ)cøn@¶³<ÑøaVô#&äÞx­]¢MG,-Ñ”…o †ˆµÅíØ`Ñ·(>z¸þîHÃÀnÚ§8m±„0 ±ÿn­ "ûŒÜ`Èùþ¦¨„X÷8€dû„ 0  Ãn’u³Gö;ÁáøPïPòèÓ`}÷Qe°ƒ-Vñú ‰Dr%hhÚ~F­C[døè@¥\Í‚ÔYÐÜuÐûÂÂp¹º*C£J@eö¦\ù:6F"ˇâ#¬VQåFèki? ÈúÑGì8¦r À³gWnÒ…£–ýHüäGï½ ðúwDþÀ~Ü»Ë/îƒõ÷ß_b€øàÞúÆf€S#%ù67 `¤n&~:Dr×Þbò6XêFØ ó¥ 8}úÛýæà/Žo =妓Q–ãcHÿLƒe¶^€{"­ôÜäˆb"€è _rÌG c°f/€yÀ>¢Ñö u @…Áÿfÿ+{6/@J$X®Á£@Ô À=¤ h5 Z|9LÈ»vzp³ü¦IÆØšý"äx»LРXZÜÙ&@ƒƒ³|šf„”@í.†&@½›<‰/*!h”sê{×°{ççækó ­ü (€óÞPÝÃàLÌG¯6ùm*x îMÒÖUÎWœIÕ׎ÔYºŒÉÍa¸YÛ‚-¼¥¬üD€¹ñ]`gÄZéÜ„ lq(`èZ!~—æóùz&øem.ÜÜÄUæB”;_œÔ„i€s$wÐ¥¿Ô)IPF,˜Îº*)€Mœv+©Ÿ ŸÔêµÑÒ/JEæÀ‡ÊOE3 ˜¥OƒsçJ”.*#à«`~°ÿù»,h […â/ëµ¹Ï>³›ïØ€‘^¾_Ú3¥'Š>MˆW›3Ioûi†äžh=zo‚vLj6›ö{Ú™h³œê[ƒÃºà;ÀÈÀ{÷pc$á`ÕzÊ*W±¿7° à=Ÿ(j0Ë&€•õ÷ ÿßÑ–Àˆ?F´‘Øeë¢äÎéΑd7‘ùéì7à·ýpÈíÅ~˜Ã|àZ.Ëz"Q“›`ðÿa=¦ <¸þϮ·€ (//T+ׯ/. ƒÞQ;U¹D倪¤¿Š¹’ƒ™ˆõ…e +€ +¬I«6Û¾rŒ°Q€*ô´ÈúçP?À³Ù‘Ü +ŸÎ¸±ñþ Läÿu²=$€ÞãŽ?ùÉÝ7>ø`}ý}¶Dí6÷>\_¿ãŸœ ¤Üù’}±0% `j߸­wãlm‚¨ýˆÒi‹ÀáÓ*P»µ @œ¯=˜‚?ÃÈÀ3OS„ -Çp ÐJ»o5îxbÙ¥ )â^)æ‹?Mí›ôCp¤<¸‚ÂFHN:Î_ó@—g,éˆFnŠ0óŸ0€èÿµ6€\;€ß9.¸LÂ?&Ê»‡²³ €Ÿ¶~„Ä]íIy C @½*ø ¾&@âF5{:ö|\{ì¶íLP<üx~œCìhìî K™QžŒo€ýõ@š4þeFÃV•Fò{ôÖÁ¡a0·9ÿ`›iplÖzåSN \Ár-Ã’„·a8³EÝ6´.65þŸkg&jÁ̼FÚ &‹ãùü8Xæ½+³…Q>ZpЧ1¿°Nþ0šÂY¼Ü@]€eé2EMŽ|€y€â´O„Ò›X Rë½eË’WSé +€ô¯ÞR}}}/=š¿P êç +Û3s[‘?ÁIΉ°ú;Ô–*=#±ÃÑê.|ëçÉm­s#zo‚vïDzç´màTßñßnx°ë-È»7WDüº°¤fa€§Ž0P€[·À¬¿­ô‘‘wÃþÿñ訰7 è½…°Wc·×ÏÀ°=¶ ®D½†‡œ¯zF– «`¼©¶Å˜°ÂèÈV`žW`ëXÑX» dQýƒûOBœìÏò  åìš œ a«¨=–±gq9W]¼¾¸œ]Z†­R©\¯PÐa°Hƒ$‹¡nŠ?kTFØ Àâ,€þ@ÈQœY¹}ï(€?\ÿ`ýƒ;ëwÄÿ?ù%Àw^ýwÞ{Oö?$ÀưýÅÿïß}_üÿÁ=È·ô㜓 NKÔ+þiœLOn÷MAÔ¯…½5Ü÷<oÌ@‡ÇHüʘ{dêÓ³¯‰m± r#ðÌò4’êë ‘ {%àÌ•œ›<îHyH^I3XƒÊ@Áæ0þïàhP)ÓöçËèÊͤI€4Ëé<Ç¢‘¿f®Q°3@Êàö?fX¿q@$Ttwàï·€î—j­èA¸³(yJx’N€ö1öÖª@\\èô†H{Ö➊ØÀw„²l¶ÅãMð0ø VïdD•/òA@|Œ>‰ æ/ÉMs1€ÍM9­gÒ©¸žL¦u­E@+ôonÎÿ]xiª®4²¸¹F¶èþ'JA!S@FÔy=àWÉÔÅÐâè° ëÄÿÁ•¡ÂÖäŒÖ‘ +à|q¼Žsèþ×ÛÜl!ý³TôR ùk@¦Q"÷°è,­6Ô:Àç@º|ŽNXË~ –¯€€Z¹9Ç…õ‰‚=˜HGòEöS`óù™¾¾¯š 6ZøœcàÆq@'nôc»0§§i‚L`7þõ£S“ë܈WÒ°Ý;д¿SÒv ]Øàê[R.èX_¿Ë6€{·)4Ëô¢PÝJþ?ÕÓ¯®7oáäOØ  @>~ŸÀÿÍÿyR»dŸP€m™üŒ¶X(¯–-šŸ×€ …zõÇreq˜&ƒUÊ‹K• +ì!°óêâòL4œ8²ð}Ô•ÕµêÕ¨2q´¢xVZGú¿ØÏXA:üWQ§äÖPžÕ‘Õë ùÕ…j67²È&þeà-·¼Šê)™0²F‹²€M¬±`†±ºì˜ùìfA»ŸôoþFÿA +`ÄN+ëÿÌýáÆöðÿ@ö>$ `üÿ'˜~òçÿ÷Ù£€{w>|_=b¤1@¿"_ÍFØ d±|´E湇ô&þNÀ6¾SxøÛ¦+°‡KóÈþ'ýã§G €NÓÂ<#Œ’U¤¿wþ?ˆypG’ƒ) HÏdèEÈ¿½{ ø¢Vd")Y>NOI¦!X‚KÞ@€¢[ÿÔm<`?e€7pJxÚÅD7 m%à÷ ÀZ…æÿ@vã´öì7 îßž >ôÀW›=Ë,¡€«Û=tþj°¿0Oôõçl8¢ý$Ÿ0ŒR‚Éj¥`ôÏ™&¬š…/’„ÍÎPñ(Þ¤æon~^’‹œ€Ñ ¨AD:å,Z(†Å¡Â²q{`Q?^ÐRù"R™LVµ\ˆ /‹'íÉFí +Ð+d˜½$KÎçà +fTÏ'*1Á‚[ÉçUò™¹Ú“Í_ÔÎMÜ“ŒðWÙÁò^ÔYÜ!Wd›.Lü.Ù?j8Þ÷2´\ Âsç,+ƒ“\K4ÈR¼ ¤·Û“€ïà{÷†Ä©‰U"±¥Õlç^Ðí9 o;ß ñs°€Ñ?Gºw÷À:€I@c­² àÔi €S§Žô@ÐpË<·ÞÖ“èžQä4ØyV2 âÖ{lû½ri çãå£Tð—flóeP:ˆµ0ÝY­22†ûG¸zv!·JKgmuy¹úQ¥ŠZ‘ Ë™ìÏž¤ –<ãøQ—ÂÖÿÅY­~ć­^G©r Ø¢™Ÿƒ$X­æpÕ¤Ëå5È Ôé ॡ PvþpGè ÇŸ[x1(@»À/`C1ï¸þÁ½;ï5À¿ÿÑ~bô¯ÅŸÀòÇ}ÿƒõ!îÝY_ÿp}ボ[@Äo³Œ,–o@{DÍ\rvûŸ»užŒx;È÷1jd˜{’5( öè9 Ni¯¥X@)G×À™+97yº‹ {Iò@-Æ ×] ~ž¼Ÿ ÄmÖ@m= Vƒò0ã_"Àº²ýŸhãÈ&{¸U 6Þ5ÀŒmp‹Mn1Œ]uÏ$é  hçÐc»ÝŬ.®6z¬6@ÒÖÎŽP1±æŒÓ30¤óçÝ(§ƒž®•aKe(-è ¢¦ÕŸŽuâ}Z±x +¨Ï=†pÿ¹ã2‡bË ôB §úf„ ÅüH€‰‰ñ<‹ gëã=€È?z @.€> ¶bh% æÃÂ|é•€º…  D*9 9R›Ž©Ïo†£|b¥àrijªx9R¸1¥Ú™st`£ñèµ€j‰ø_mò„T–'ŠZì$’ÄjëÚðÕ:œ„ï7ø¶éÑ9|÷UCjÛ6"4vimwt›P–~;¼K²N÷ܽ·Á¡€`w¹À °ÁÓ1ýG€³c7×o­¿O°2Æôgø£ág=¡Bvt’`"À^Éý^C·Cÿ¤Ena/ö+Ê-ä––s`c!F ;µÃ*ɘòÇ0 ²#•êjþýÕryuü/·£ª Te°0cÐx P=Ý×?ºÎ¨>œ¸¹@gЇ“–‘ïâ2Ÿ½V­,WÖª¹µ\–»Xúв¶qÛƒ´oMþl +PˆßöÐ#Àí>Úxøpãá‡ôÐèwŸ?èÿ'ò'dsüä'pV¿ùýïÝùpý.•€ãC§ÅÖ`#@$Äñ§cA`p2Ç›X^}íÚ­[Œ ûàæŠy( ö‡ÜˆþlqUˆê!j Ù'éÞ$€-}¿×ÑmÀ`}¶˜ªF)W²ÕÊÒÌ—åÅÜù_–LµR]£M^­\Çßþ´@6W½^Í®~T]† xpuy¹ +Sƒdž+/ /À‘þÁ\¥º0€LÁó¹ÜÚêêÂêBõ”Äõjõû ‹k |ú –×r˨lWW!=W*« ƒÕJ‡±Y…°ê¶=ä´Ø`kôäp•¯³ìaO°±ñèÑ#(ø=Æþ½÷R?ñ'?$\྿OûŸà£gŶùj3œ¡1ñKÄÏçhJ° €ìÏ´ˆV=©]üÎb”™˜Ì@Mð•¿B@—žJx¬ k àÜ•œcŽnÝPNŽ@òJ +1 ¤Ae;< ô+c@9[ð˜io @·±?1µq<ðÀ<¸>ï\ÆkM™ÿ þßO @|Ç›c$¬@c¢ÓwÄDÄ{h­œÕµšŒŒH~ÅóÇûNäÇZçQ€³µsŠ çaó÷A’¿Ä|꯼ü:€8€"PoB²ë¼ž¥g4†£&˜0½‹ #ZÍûSõÑ`;jƒzkz±˜ÿ]’?VƋŠŒQÈkŒLFVõqs@’LYræÍÆ ”.Øš8#éÂfº ~ÒþçƒÍñu+93žp´8:Pð„FaöÛ…Â/üï.Š—¼â(òÇÝ@pÄ •p’kƒ˜MÅ«@3ë¶àP?àð{CãÌÆZ ß¡#1td'Úé¿åÿ»ÖP ›°@›æ¸ pÚ'Õ½fŒEàTO¿y8ÐÆ›cꃎùæ­ýÁþ~€ýûúÄ­7öÄ`a—žÿËÀ@ŽA€0ýQÙª_þŒïÕåJymµ¼ +R.ƒ†‘Mef9l-˜è«$Å:˜|y­¼ CaÌ^ÅÃt`9ûœ<ÜÏ̹…jyu¹šù#Ö3 uÔ2ðÆx+šþkkKË µ@2<¨.~´ú`m é–aÎu„è_Ö?Á·c~>'^€³ø + îl|B<„x]à½÷¤@ÿõþêgà}‘?æýdý.Ãþ ,@Ã9ûo¼ï¤øL S“ÿñN9ïÍî|õôiu ÐØa¬oäÏH¶X €²A¶îü +"$@—Òó?^]ÓçrYì¨üáñ”Ñx$&0yÈþ@Rtò@`Ë`1)`aÄc jI­]y®ÚH€(®yÈüRÉ^•½Ç øµ$P(μO¼¦î —‰š@7 kþlÐÔ `±ìüO@Cr5Å,ã©/`[ÀŽöÂ1,Ç6n_4d85'êß—|0¡g‚b¾ï%ï`=ɦgFCòœ¶À‰¿¤ÞÝP [Æí {·c'è7¬ƒpE²s›³™©0°Ñô 60ˆ%0KÁ§…Ò6J N.+A¡p¡pÁ“N€ò¿ +-g!Šùã Öñ"ÌþL“j¾€×Eê…s ÎgÑø9èº@ÑYŒ†táЃ€v*ùãì­‡£—0¥Þ E ~QQÙ³‹%™Ÿ˜ø]¶ÿcW^ÍT+ôWD †³\;¹rÙžL°MÛ4vµAÛcó±noM°1|ïNì8Ö9ykÐ…ñøŽ‰.€» à=æÞÍ> feVU·u±‰€L§Nݺµ~k}ã“;7WPƒ~Îî· @3ÎÉ@ùÒ„ï”ïk®y%Ýý¹Ü÷ÙÕ.ó²ÕP>(xy–@nuyíÁâÒ*Ì}Ð7Ãòðúþbu$—]X]«B ¬=Xx›é°ó›¨šµ\5ǰÿlvmµºˆuµ\EÍš[-?XËAI¨]aíóY\[]†ÒXFƬQi`cùÁò*tDgÛFúŽØ@‡yîÐðè4À£ßI(€ŸýÕ_ÿõøë¿úÙÏÌ þÿч¢ó|@ÀúûКÞoÕ`Ÿp +ŽøŸ0ê6öwy6 Èðm¼"[¬K &Ëê…„¶¿YÿÄ‘#ê²Ñÿ{,àð⮇Édx%=åÈ@4¨¬Ëpe# %¤0ô £uf@ײì õs‘ôTãääˆ5¨ðæÀŸ®¼¸š/ºi,v´Ö"@÷€yó©Z]{bð1²ðô•årÙúþ ÝÐ4UëÐ! êëò4Àj.Š)ÆF»ꬳ`P˜ô“ô‡!Mð† kgΉïÀqÆ¢„Ñ%¡DƱ¾Gýç>«yPhôÊ(ÏÍn)ÒÇ +Àh'NÔ¶BבÍNX0½õ²ƒ>Á3¥L¾TÏŸÿ#O$8qôË$ØI|<äÈß2ò20´ œcï•<.Û KÓò°i>”Üc ¾¯â£þn'¤ò‰WÚb`À?ÓrÊŽÜ ` ?ÀmÌX¹ÇžàŸ|@Ÿ²€³¿ ÀŽ€ŒS/ë7ù(€gñD³üíô÷l<’}ƒî Ûâ2Úï•tä²ß(g³ ¬¦z·º +ë~uy2 ü0ÖÙˆ_]ÍV F´›«²º¶Pùhõ£ËVËxCu‚T9T¨ÛØ@`8»œ¥]„Ê:5êƒÜ2¬ú2‰½²¶Œ«°îY{°´ Ë‹¦ÿ2öCL•òƒåªŒUµíA’ï~S#ì¸aâuWßyïßÿäg-Ðð' +PD þõ;˜äÀ;°ñ¾¦]º…qpŒ¾p¾¼tþ“ÏÝÖ÷´€ô°ú©"ÐÀxÕˆÿñêHÿ,]4í! Ü. Œ¯2êÐP@ ©«€&€à Ñ8Ñ0ÛÑc 0  ÿ“ƒ1E€y$Ô{P8ÿ.ÌÌÌS§¢ãÿcP @{Knï;<¤P¡ù?¬~€i{Ó1)@ô0¢j¹²ý&WZõˆHŸ1±H{`ØÕš<¯-–E=-†Á]<Ϩ:XÕ´ÿm +k鸆›õM +ãJ-CØÔ:]ö?ÿ¸O9Z–äÞ­ð 7x„"‚ÇJ¥Ë°…™­c*œ-è¤)šì®?pÀ¢ÿñk W=ÿŠC…w‘ÿ‰™™âqìù¢Z'PFìy2q†"¢Üëu(O ‘uÅÇEé·4.€J®RÎÔC>Ô˜§ÙÇ$Šo ä—5꟤J)˜=7ªf„ 85°y x#`ÀÂù”=ø]H˜|>ÓwL  +oZN!'ã¿¶plOdð}¢öÞ OøŽZHíR‡ïj‰ø°¯è„t>ñJ[xuÕƒ`‹»wå`w@> X +@cÁÁ¦hJ¸èµÑ{N±¨›Ýß¿i9»r]™ìü›á5¢\“ÀС €/Ž)ÒýÙòÚÂÞ«ËË0Â×V?§¯}DüÇ«¯ýÃÇÖ|Ä>ÿ Ü»n~ðC¶²ÊýðàkHÿÑÚÇ‹`kƲ6†8yd` ¼È.¨­"›½~½ZA½ú ŒúU`­ÌŠv±¼DK ›ÜXC µÆ&ƒ%è‰\•õÁòb\ï·ó|[ ‰<Æåøÿw~G +à½Ñ 0 +ô/þÿÑ{Üáί§é‚ëw(°Ûò ûv¢`RýÙ¾Ò1M'ÀêO{ø$AˆT»¶ ë¼óSsË€þÅvã˜Àˆ#)ÖÜ@Su€È‹ +`  `*\©rø ¦æÐ,¹Ê¬2N-8‘­úôP”Šo\õ¿¡zbB,²ùâ<<â5ã¿Äz¾h³ßÛ +žðm¥é&-áéøÖ:½ïo>žØlyfËÍè·Ê·À½{ë·Ùޝ@Ễ=äà¾1œü…ÈÀ¾€§5àõ[+ T À­[·÷<Ýòÿßøo‹¨òlLÀ¤ 0 `Ëxÿøm7 Ð^ª01jŽ…¾ +’Få·š[+?Xüx­üñâêÈGYì¹¾ú}¤[Óp½«kÕÜÂÚGWþa-‡úüÎÁ€è)kL`v„¨²·`.‡êÎ¥µòÒÚ[kWAìßZ{ë­ÅòëTúÖÖ*kPk ~ì¡Y­®-­-CyðSw‚¾‰ÿŸ©èÑ Xø¿ó;6øß_ý‡¿þkðÿ¯~õÿ¦ÀÞûÑ¿÷#ûÒï¨ÙB`}KI§ÄgC +o †P¦ôlswÐößá F=²ÇŒ£ýÔ·¸ ÇžÈ]±¥Çp·V„È@ãì9`17ã_2@;p\Úzô—rdå0þ/[ ½ÿM½Òë /€;Õj€]="þx-í %͉ÿu|ЙÂzFv7gÇ¿çi‡ñÒŠžÇ +¦<ÝÇ X}„ù*^Y’O<ªoæâù ¤ƒaM^ƒµÎfÎL€ÎDÔA°5??cqbE³ö/3 +J$+®ÄÂ2¦*ŸÌŽ[Ø%¹0„b Fü_º2«u‰)vMðãÖØ¥º €€)0j±'Ã!€A÷êÿϸDž‚rONb• +`º6:41[b«=K¾¹9ÿP!ý,dt1+9´‹—Í:„,ëµÑ) }¤”œEŸD¹@óäé¸0€$*°7pèŽìÏ(ïŸ5×ô`—âA²h’}[ð]mÐ>Mzoœ,^ÙžLÉ[¥÷ýzK$hÚð•’ÇÛ‚ÿ¯¤)œš(în¬›ë?wïš`Ýž:7ÂÁfû‰A* çÔØØµõ›èý›cìW0Æ…÷<é?Æ:A5AÿAƒ3|‚ö#p/íBmÙfFM:Ð?ÀŽ¿°Á–s•åe:¬|TPkPc€Äײױçlüru­úñõÅ‘Õ5Ô¯ýÃÒ?p$À56*Tñ•…\¹´°H€b[×?(¿…åÒòÒƒ¥¥·Ö––¯.®-—Y+½µ¼Võ£Š¢O`±º J¨./^][ühù™ÀààY6ÃÜl<ÍŽþ÷Þû×_ï'?ÿÓð«üÕ?þýWò“?þÑ¿ÿãQ|À €;|ÀêP„ˆiwþý +fh€(Yúm7ÐöOy,àÔ©#_AÌä€bÄe‘ ›ˆðËržñ³»ô€ú|UyaCJ( È2@OÓ {5 +,_€Z%ÿ³€ ö°@+Àk.Tôîctû¸ÔpÿŽø­y03 %ͽÒ1K~ÂŽqV5`@÷1¼‡Ü`8 ÒNN`Ëß§¹ î»xþx_þ¼= ôJš +‹†ÒYäûD1ÜÎÌJå3§a\gÓ P«Ùc‚gf8v†õ`t§™ÈÀž7D£lJçIbI°èì¨?»£ +µãã°ýUó¾ÕÓß`—Å‹8Ù³/àEóðSÕF3oÀÌñà)ì{W., SP¸@½àäùÚ›îÀn+ùwðJ8 §ðDì#óO²ƒ­Bi*¸_åãŠqÔ¥MC×ò|‹Ã@ä‹ó™ ‡O4ÁõH!i3¹Ã·ßÕmÓ¤ö&R%V;!JÕ&¹vc¿½7¤¶Úœèkšù¾y’`Àú:}îÝ½Ç €õþÄ€•ÊŠq¿`1ôx/€[·Þ—€íÏcgÏV®)³=N^WYµY†ywû +Vãšèƒçù­&TBýÙ¦ªÇb¹ + ¿J_ÿrùÁòÚƒ×~_ËU¯g·OŸ½œôÕPAü`õãŬ•—qÆb… •ÊBvÐBu`Q€=—ߺº¼vuù­5XVW×––ÖÞZZÃ/Cs,Bj,CApHa^Õ,jžju©¼¶ø`m)YàVÓÈ.Óà€Æº¹þÉÆ=ƒzú½÷Þw¾ó#’ÿÿéÿéŸþñWý3>àGïýñ^ÿ¾qþõ{j`7¨*ãÇg„ˆÕ¸µ-^|6¼¸:¢áè½+Àêßá` €y,Ÿ®3i¥ç&€òàKýã»D†f²@R¤bR á0›^L™å&¿Z©´ƒf3_]{¶DMT-<@ìpDüyPü¶N,0W*ZrÛ=µOÊÛ†[e>Œº¨{@Î=ÑG]._MôXÆ•CÚ³Z{vÆ ë>M1¶†=ø$àŸÆÄlDbœ)æûNœ°^€¤2òY­tf”ãÞcš*AlÍÿAܳ?JÇÖMð€òfh`X›ÍOM4<Ù祰^˜°ñ‚D…)ÈS ‘K…8µ7ãiÞ˜œ„/ÂðŸ“(RÔµÒEkS*yý‰:ø[1ÀèßÕ±›Í3 í¢…Q Gƒ:öcU’A 1x)(ˆÙú„Knó-Qâ7¬ÌÖp¬/_ tfñAªÇ¥ˆP´Ùr‡-;ÀÓíDSv¾&ì–'çÊ•Émg¾{Gê—‰[ÒÖÐX~­ça,ÍÐ â.ŸðÉ£{7ÿ'‚ukÔpjLA€0ïÜ€ñOÀ>=¬¬Œæøwã_àH@Ø—Ñ~¤X`³AË«žÖIøÓ/²*­r8žUþ‡:åÁòê[‹ÿ°\©\gl_•¦yT½HO?ÀG~P&õãÇF]•-ð ÃYhTà#Hœ…>(/Ãè—€+2YƒX¼º¼D¶§×Ÿ=ª–`¡pXáE‹KË‹¡4¬éÈ(m^fç·¾ÎÜÈÙ‘›Po.,Øï;ï½§4ÿÿû¯þ øGºØð×qÐøŸ€<€ôÿÌ€$çîο`î˜ó»fkVÊÇPU0³çmĘ)ËßAOÔ t£¡«€”€Ñ%dLB€ñ)ê@ZÅ«k‹jkø>5Àƒ9ðéIý{ìŒà¥ð6¬'mér™ô讟´nŽÐ Ð9€ÍýŠPŽ\M€jìÀŸ€¸@ûWæˆnts €JÆ×Ë’DYR]2‹ÁŽ“ì[?ÛÑáôDæ\éSÛ aþèH;?§(@{Dn„¹ú¼ûxR Fgë^‡lcÈcOwfØÐäÍû…Ò§Æ£IL©1€¤s*KzóWj +Í)ói€ç'‘ß =؇̩AÎŒ^ªûƒŠ!f`ËëS¢„$ûé`¶QtŽ[°£äuz>…°’+¡µ5XAKS¸X ©P‹žu(&ï"Wòùs}½r„ŒØBæ®bþ³ÀX/I³íx%B´ín>#±·9E›3b$òäjc‹ð=Éçû'wJ׉ƒZmT(íçì˜@w9ÐÆ£„`›ªƒü/ú'ÎŽÁzgÀ:û Ù±ûˆÀŸ^ + ª²L4zTl<€íGHJ€jt~ó ù°Nå#P{²V®,WײUË«¨‚`',±Æ@m‚a5WaO=6øc™«<ÀÎ>‚xÀP}TkHZE ð$c†ª•2sD]R~€ês ´“~méÁcP¿¬AUp$À·ÖÊ<.?Àr$]@¬-³E鄨OF›‰MgÏæV®Åïíå_9ýÿã'ÿÿÓ?ýJßÿ¿ç¬Ï€õ÷é0Ÿ€Sâ3€äÛxk ¸sudùwsV žÝìNñÃñ¢5¢«Úd´Ÿš[ÅÎUâqHà‘ÈÐLô÷èçG@š@4ŠT-cHêq @Ò€§“~z„'Ú“@Ÿ„?q¹R÷,/#¯¤@ŒJ°ðæÀßn§Àoø¼.×›=ºi¼m¸eY”F÷…õŒ$dxëÖ”>€ö€DØ"Q³Óàc+ òØMšcl 3=ꪛ­'†sÛÛ›õ­¿Û®MžèËkµéÚgµp®öxë³Z­ðêèLá0¼_۪ݯoýò¿}þ¤öf8ÿdk{¶2˜lvö‡[Oë? ±nýŸõÍúg››5žQǵ'õOK£×6y±í§ÛÛxÕ° +–œ½ÿ).ìï×K…Bˆ[ÿy{ëqýq­Vût+¬moÕ¶ÿYͲ‚þöPa>S +obõ3d\›ÏçÇ'ÃÚç8Ÿ¯ííz­”-Ì2ûûµm”¼þ÷ÿíïTòúÖv}n¥…x ëO·j(yÖÿk½¶ù¤Ž’C äuqvtjþÉfíñæ&îJ®Ý!DKøébÎaí?ñqÀÿ”ÀAì©à·¶0û#øÊçÏŸ8‘ÂûÁD)d*,ˆˆípÚKñf´iGR¬ÙX·5¬û{3yè=Fóv̹‘µ#½4óUwìDtÌÞ;¡‰òS3^æHχiný¬Z£€ß>Ë À[dzÔ0rã6›öü ùÓÄšÄ.ùï#l<€HØ+&~_g•ÇÿèŽ×2XXcE»Àöý\yuym¶<ê + +ê hìÅeÙ š«^çòÁâGË#¹êÇ–~ð ¼¼úuIu 5 e€Ã0aÅ ,C'd®WaY¼…úç×þð‹àü?\zkm÷ƒe°|yñ­Õe†¬¡Ê…"X\FaøL¢EŽRÒXíqß(ØÈÍ;PÔ¤~N?û+5ÿÃü'ÿÿ³)€Ÿýä=ãÿ÷dÿ¯ßáØþ[à–ä³ÂÉ|€¹îΈã?åðq,€ØÅq¿R{9‘ÙÒ=d/¼"€Ç¸ ±ö~B¸ÀhÚêó5þ-yaa‡À}ø]3Åà0~]{LDNô´ò¼ÅN²³Àt t®þuŠpÅ'àÍÂËÊ{xÓvÆ€½£õT >‹ `å– Üðà>¹hò¨|‚Åà#aV €§âé±P @kÀj.Ò¸úpy€mÜP €Õ‘+%!Ïu”ÔϾ/s.Ÿ/&ø¾R0uih´P˜½T*\ ,RÐUw¸RÌ¡€µRiê~ø]Ùí³³ØWšÍbï«ÿ×OÁÃýŒ˜šÂn]¢P¸t ÉJ—^eÅâß,Û‰Bi¢4…·‰KWÁ9¥ÙÙWF' +—ˆPîC_êÍàLTÉ‘ÇTXzõÌè%æ9q %Ÿ(È §«ä~™ÙRá÷Ø1%A`%¿ŒýS³?ÄòÕKVòÙY”| +I+*9ò˜*É`_±ÄÞ‰¶àÒ²ÖsŒKº‹…sùL¦¯ï垣/gгµ3£¥KÈ‚ÙN‡N„Ñ»`û…h#yÄ×ãèÐzüÀÎí“;tV#mj‡¯Ò‡ÒÇÙ'6¢CöÞ 6”_›™•þ=«ö#Ü» þ€¸½òN4Ñ¢rœ>ÅöUÇÙkl=øà“õ±à[ ×~—sÂ;ÿböΪËèÛ @Fþ‘ `ÛÃboÖHHáTQSgËË•¹å*ÿ}òÚâÔϪ8xïjEƒôV  ª´¼ö We `ŽÙRÍ1° Kò­V¾?0Â&€·––Ö®®ý!}W€ö—èç_^zki9·„Ú6·%±\FõÄ @)T¼‹–ìâX„}ß #ƒ¸ýgGpçÞð¿ÿËø?Òÿ—ùÿÏÿôÏ øÑwÄÿlßú&ÀõЫ#{ €'ŠÖ:ž’B ~£ýŒ@.¢ÿ™5Q8i%縀\æ10©@“ZD¡Ÿ•à‡Å†È€ƒ*‡=ÆÐ° AŸFlß0ŸHŸVCðïÂü ú9Ì @äPàî*€Hxéýi-<˜mшàÔäp`w¥×Íea=' O£€Htð°ÓŸƒ1 Ø{xª”@1m<¸¤•Ã9H®áuµüZ$úÏFÓ™ÑÌhæÌ¹3™¡ÞžC/:t´§÷•—‡„W´ÊhåL&“öÌè™3XÇ"“ÒÞ«C£g2çF3™3gü„(ý«ZŽâä8€$£CßÌ )`©‘¿ª]™¡38}ôÌ«C¯Úµ‡z_éíµò¯`Y }(ö ‡z°öro¯—Ü0:ô*>¡Òêú¸øÀ*¶¼ä¸<Ò ¥Š„ËŸ³ô\žË`Öåøùpx4óM”/Æ«üÐÉøl™¡oråÇ=ôÂWzzQèWQ$Ü"]?“16ÄuÑ»ÁÄGâcZš6[œÜ@¼³ùP«Ä1xVã¸mÉKÙq_mÚ¸'µ¯±Õ”²@ô˜ZÏ·×7hò'qWA€7ÖoÄp뀠Eöï9õÛzðúMzÆp#áÚïr²ÚÓyŸ5ƒ¿ ú/²RèÜþ_Ð?·Å+7Œ +æ#äŠ a‘å`¼YÖP¹ÅkË——ÝW*´Œ*ß_¬~„šôœ½^}ðñòÚ?äh3”ËkÐÈõÚÀÀaš‚å…ìÀB5·ÊAW«åKË4ð—–¯¢J}P^{kyULüÅ·®BTËkì)XYZæÓ…aݰEuquƒû;A«=βàÙœz¨{úÆÿ¿úǤÿôÿOÿü?¨Hþ‡F°¯ýƒ{ 溌p£¹ ¢c»ð/Ã`nYáQj¼v9)¬þ”Àb{ºò袜¸ðƒ#Ñ'–Q Ù /óäâ€òU¾áçëôåüêº÷Ä ×ÙP†‚erü)Èhµ­€gù_‰Í 9ö¬Ý–hå€0€ÐÎÀJj –Ö>*ìbcG eWPJ¶ Z @+{\Lr¡ c°à‡jëhÝiö`Y@z¸Ÿ±à5€òTä°Úgƒ°XÈõh_&?Å'îE˜Å¥ V,^º44K;x6¼bmßµÙð¾þµ°Æf€Ù°VŸÿîì¥ß«ÏÎÖêHˆ]Ö¼NËYçÌÔþ~ × Í6ÿ ®½³£SØæ8À¡¬ÿ`V¦6ö)Ñýú§S—^ªÓ?Rˆ/²1@ðAIQl޲”ðè¶™¿U‚¥ý:JÎAˆB>Ž0ø}® µû!ŠðÝi”¼ve¶4ú¯ØS8û]+ùløt[ï³`Íý³gfQ⢆ ¢¯Â>>´>FÞÿÁ¥3¥zI΄ËÅ > ·… 3â©ac$@q]ôîhÀª½ûÎRû´áð]1Zí#ÚíxH®'a»y4y¸isÇqîñ•.#)À8?;²s @L`?`ío`õ*ëŸã |0ÖðìöGÄß^Õ&ÿ~¨`í‡7¹YéÄ”ßÔ þ÷Z£ú‡+ÑΠ±¶Àáz—Qs,çèX|ŠÎ1ê…X]ƒÙðàúòPT–«ÙjuõãµåÖ(@ÿ©~W €Æ¨d86àÂj6w}•–ãÿ Pa…Áÿ …%LªG9> òG«㢠|ñƒµ5~ÌN€fë4PdÙ _Ýû묃þ©~æíÿÿ$ÿÿ?ÿÿù?ÿÇÿðF=X¤€¿‹ ýße Àn,ÍãxuLÖÞ`{vC ¨ò»gääÏ7'­äÜäP ÈŠ1´©!N|Ù^­<$Qy1 @Rb@°I°P!5â¶Ï WÛyøGŠPŽ<œñQ| Š€V(äõZÎ×í=¢¬¨ Àn&vós°0€9N(p +kŸ€e;!í` c¢^~CZĘh 2²D c€rΡëõÍZ8‡WP §Ùc­x!^»OöAá5U*=­…á•Z­¶õùÖfíóùM†ÌÕ7ësµ_>©mrkóIX*@|Zg+ùæßÔHþ? kµúãíÍÚü“_>!×Âû`J°.Öê[¥ÑÙú}6·× %¶¶7Ù€®°Bœ‹SqíOKg~ÌfÿYFÖó)zØêGÙêuœ7?=S›Çv¾ïxÙ†Å"ÛåÉÚ÷k³Èjâ÷J?§vA)¶ž~^Ÿß®1º!D‰Ãù§[7ëVòàÌìýY”ã1î/ËóççkµÏQ Íÿ¶Þ¿¼©M®Ô3³úv0:¥•ü?n×?­ÍÕPH1û•Úý`zú>>\m~^})¦K|ÎîíD·è³'[[õÍãÎu &÷sW +‰JÃwÆhq.¥NÑ6ÀõÄF´âï%2ø¡Å¶¯EH¤àj'øœølóä„ÁFzšZîb†xøhýöÍh2ã߯ 0úg ÏØøäÞú55Q+àÆÿ}ÓíŽoJüYC`Æ’ÿ@BÿFV´F÷„‘$Üþ·ZºʃÃì8{…R"WA ȇòÂR(g——¬¢®XE¥,Ÿ<ì]|PÅ$ø¨‚ŠøØ—[]]äX?×WWPgËà ¶`5;˜cCÁZvduY\ÎØÔ«oq€ò*耜ÿÖ²bÙ€%ätªšŠ‚×p…¨3V;Œp$€ö/Tuc7ïÙˆ¾·4Öøÿ¿ÿJ ¤ +àõPò¿ €»ïx¯ÁÿX7v‚óæ.ØyÌÍ윈…]NгR€T 3ÁNKÙ +<…YØ[ûþŒLà€XÈ@€Œ îàŒÝ=`»Xð$]¥RáÓ§ð×`’N1<-þñYtÿCзq¨Zõ ˜™ÈŽï"~£:Î ³þr­bXZ~öÀ+ºƒ¸V>€¥,€|Š=Äøåp°3ÛKQ/€´ÀCmäp°G€ Cgÿyõqƒ-Ï;ª§°'›,lpíl81Ôy¼4k½eºú @Á–³†ó[…3¥ÙÒ4£ë¹ -?~\«=ÞD6Øk¿a:Ü.[>öÞåä1$´¶ú° • MØóO1,}jà÷A°“ö ºø»,6^$bØá¥K¥ÿ' ù©àŠJ=£NŠ¡ù[ÿ‡­ÒP‰Òûl€à² +3~ßÜœ fxUí'&‘ñ6Ç6š³;ÀN º)èàÙõ SkŒþ¾Å^ßBqvã&6{@†öaÇ~OÝ@r¯Öð½Ž{ žTo)DÇ’hÚ§ ßáˆ÷Dvd•Ü¡ ÚÜÐÙ³é @ëx÷Þ‡t<Úh4ÒËö7мúm§Ç°ñèÞúMzÿÇäØóÓ€Hʨ ¨XUñ_ˆ7V ú'¢úÓÿÑ|å\DüßN,€ÿ+¹ØT¹a°ïrn¹ÊnxUÔ ‹Ë²à~šX`f +€¥Õ¨Mª•…jî#lœcø_¹}€7Öð M°GP,JQ^ãØ?eŽøó‡‹KÊ×P|˜P•å·ÊW!pe67¬Q n“Mð`â¡3Î*p£í+öÜÙø€w•ÃÿòþúWÿøÿQ￘ÿÿçÿüçfO€Ÿ±“ÀŸüägüÖ?Üøž®:œ!;£·F0†õ €ÇIR»Ì½ÓÀ8ï œ:çæ¥ã›1VjŽ[LÈà1²dSÐRÜ `1á¨ìðDà*˜“ôDÈÅPe&@5™Ì‡:UíÀO„28œÖ?'0n®j!«kŒxmòXòjô s +(:?@[oo•aIl±³büÇdaXA)ð1|€–üy®ÒóOÈà ½¬¨Ó‚y쎸ÀN±€–Ž`eÄ=øžXh÷Ð)Bi"Èe“ãÇ_‚]i,@±-øªVÊÌ~fCݺÊ=&ç3‡ŸpxìÜæÐû´Òµ \œ `&$ãðñLß`—1»:Ô‡[Áh8âÁÔeùü †b©ÍÙ`ë~†O*Ñ…0öNmãE•˜O1†‰Ý€ÆÐýáã©KƒYq\€¹p†Ï(ÿ«3âÌ7Xr %a:œ/Ââg_Hœë‹ÖyPüÌ<…àÛå`ÉY8¶@\Áá3<“ÅVàWãUƒG4 +@b(àˆ í½‰ýž>BbŸV›`Gˆ¦Í¾[‡Shµ3:ÁÁMÁ·w ý‘4<›–pªo³9s§Áq Ýìÿu5œ:Mç¿D@³à²«Ð°âÍÝCC¯AUs²r€È)~ŸÐÿ‘Cë&€˜ÿÛ €ÊÀ+›ØÈÕ!¹ŸÖ>LzûZù#TÙÅ,ꪦŒ µ««¹åë¨y?^]]û8Í Zo.PCWQ­Ñ°šY\ͽµ¸ºöÖ"à +aW=@í Ë%Xÿè*¥Ç ªÏPQr°Í 3héï4üãŒÇ”@ü~GOø:`ÿ³@ƒÿð+{0àO~ò3 Ž˜ö‰ÛB½+K+ì{Ûê~Ò®™ T f¼;^|ñˆEpO‡¬tªf%ÂïÁY,Zz F$3©>S<~Qd2ü®ˆv€J2 )úÁW’€j³€?](X¦ÀÏÏb W»ò\õ&È |–eÙÿX\§«Ê=ø9ªiJ`fäþ޽ZÄø]£×Å;7“‘+È‘ÀA\ag €}p÷¸ EÀ9&Ú{`CZ € œ{, ¥`9'SÀÕé@Ù¸‘ö¼öZä ôS¿ÔwBÀÁgfçœä¯œ¤`ðü¦ž²S 9êœ:Lé®G&Àæôf8‘¼a¦@zÆ…Á®dV"Á¦·çÌ ƒ‚×ów&Æ‹“ó ñIi—¾cÇúÆé €2Ð%uzX/]b‹{ –\¾ `:˜ž{2Ï’Ïm‡p J?(ü öïKþxz+¨GŸ‹@AŸòñW¨x§|?Ïep¿mÓ0«’çó™oéQ_¥H fôHÅ1õÅDh+i4Üt4vØZ+$b]‹°ã ´Ü•NiÛ€oï@òPûTQ[i5Û;Ç»Û"Pàá˜ß§S ?NŸþíHŒ¹¸sëÅ€ÞqZïöÇYHúX=°BÃÄþ€É8ÂÈßÅ@ƒÿÛ)€2ŸÚW® ^ZÈ•+èÖÊ|.?MpÔ†4ÇaäPA €èÙ‡mqíã +Ÿ&†+€wW…µœLX‹èÎ`í`ùåµÊ">NÔ À@Ò°ØÉ €¤ ŠàM‘ g +€lòIÿ“Åj8/Kõ{ôADMÀd0ÏÑþq„@0_ ÿ`6~a¨þÿØûßฮóÌ•«nY6YCú˜#èË¥Eáf#QáÒÚ¢Ø#¤BS;PÏtƒýG MÓ4•¾v’lsØŒué8±5¥Ý„œ ê&…ðÌ £¹5SŠÏ\'§âHÉL¤{®bebɧnÅNN¾Þ÷ù½ïÚ»whR<ö¹§øîîÞÿÖ^{íîÞëyÞg½kmåhÐÍ 8¼àÏöç ÈùDb'‹›IÉçïí%ïzÓ…,*žƒÚˆüÂä/LŽŒØ¿dr._,—£5}mu9~ÊÚõ—Ò–J`ƺYjÕw¶m»íßw=Þ-$LR†UYذÍÒ{ûKïÒBGþ!6}ö3«>°‚þSŸ_ý¢)«/øtáÂø}†ø|¢X ëÞ ðÒ³Oæ“G3Ö ú]šªàß^ƽ^^§q¯Å•N{ßó·åÿ¬2½Ó„×Óªfþ˪C -9÷•fK·¸Ü˜¶V²íl-KP öµ;Ÿí´«o˃hÕ;Ê¿Ýj>C·AñÚù6-Uy.6€2FS]n‹Ôë­J‡ª^YÖ:YU@Ùv­…‚© +T¦¹Bã?é@€ju]€ö>sSÁÚÍ(“‰c¾öÄÇ>ö±ßüÚóÞ@ðÿ_ücN^½öÂs€çŸç™Îù7Éž +¹“9„ÆP:¨‰ Ùœ6${†2KÒkå[8^i@ú¸ ;iÂâvósY–È+2ÿ4Àð–XHbbÀÿ¼± xR Vš²˜èd»*:h2)H*ŸÒž>H+v˜ß;ÌÏĶ€ |®%:»Eðúø¿%À%€]bô¦ À¾>}¦»•uÍ1ÐY´Óc€ÜžÐWø +œ¸à€ S„l¨ble›À¥p:}m¦ŒRäX›1ð‘ìGÖ°hñ±òcBÓÇ\86{ܬ'ü7(Û,L0x­›)üÚQ6ü£A}q©ûدFKåbn’ÝÚg"}ÃåÛØÿ ‘e†ËÎXúö Ánq¦×#rì<)0¯äˆ÷Ž­ÊºØ£yžþCLæær<­°kºHÀ‡?|üýÄó:µå°†R·ë#Xð#+9ø¿¸ÈPŸ¹ štŒO+¾}Š(m +ÿÛ/ÿ í3Ý Æ¶K¥Ð<H‡‡ïiA×[˜ôçÏ>ðÀììäÝwíß¿ÿ®¢‹ kåÅǼðŽqiP ¶ŒÌ/¨ûz"0€ÿöì®L··jNQªœ*MíJ“è{ Ñì´®¨&VõÃø@<(ˆç6ÚW«ŸCãµÕ¹šMP}¢³ÉõYV å +€*jµYm×Ϋ²jÙðÿ3íf£¥š§mWˆîëñùÛ:ëJM4ÀøªHœ†µv懛°Ã€¯\ºxñ"úØW¿fC€ÿoüßÓäÀÀŸ\ƒõŧž¾ôëO}Æ6ÿ}ÿ´$ƒ÷cìiÀïIðŠ;Qæ4Àª.«!t[jf7&Ž–Å€úþ|âÿXÖ†Kß:áPT—3òÑ—q`¦*u9üt¼' Ÿ ¼gÖ åOÈž@û×Úzëjµ%Pm-W¯ÖÚ  lžWÝY§ÒVÕ0zÏÞѱ±©åÌTõ|U´ ³ÜnTVí•f¥#àÏ +åuŠ• + Žª—äj­ÐÈZi7èP)¨QçqÍÍZ§)ê°«œjã‚Ú àù¯ÑËϺ¼úÚŸ½ñúë†ü0€ï}÷¯ŒüÙ«(pñB_ÑduµÈÛ`Ó7Ä;¶'°ƒxÅfë¶`ï~¿/Çoˆ€MáÏvµ)¹‡-Û-ä:Ôü<þ@D[\˜âÿcò§µn¬ÈÀ£èÇð8Ê´`Lçë+‚ö„5yZ'š¦\$ 1· 4àÌüqÙg ;ƬØ1þO ÷ƒs½EØ@á}žÄè•V¸¹Ö8…%3î1~ +@ˆp "pŒ€ ØÕ*[ŸÐð–ßV¼çqèV¦€j¢Ð£õÝñùÙ»?|pvöxÜàžïFa"úrF͉?™†.ˆ4 Ã‹>,•¯G¹IùôÅà°#±jº¾ƒz±ÀCóóy¼ß¨8s¹g0 +pîÇO&9ÑüÄÜi Y™Ò‹.¿ }Œ>¨U­-®ÝXZ3ðáƒ'O.ž4åBn¾5ˆ>ÌO”¶–ÖN4`´VŽTò¹‰RÏ¡ù¤Š¥)¨¬…˜ºíU’GÄ¢h†k5ÀwÀXì%ˆh®PTÀäÈÈÈùG‹‘‘£bwóeM›äv´`öaT¶Þ"¸äì½3¾»… ¶Ë®wa!Žoçé…Ϙ¯·ÅžZ}ú‹OY·ðÄþ÷û8þ‡´€ÿ¿¬yòÙ§]¨5pî]Mª¬Æ³(€”`·¿U)Z rÜ€ êÿÂK½uªdÇÆ©“•/7…ãqø飿­Dào7Th¥bhÚ¢„€´@ÖĈTÃ-a÷Œ‡Å°béd‰ìÒânÝÛÃm1Þ +!0`«Ì8Àð¾/> ^"6lSRM ,W`…õœœ8gx€îVn¢¤bZSf +@£fͦè޶CB €E$ +€ÿXÖ €‡¡ŒªÔZq €¬ƒÕB±|}] à„+£XϼÜS˜,•£Š½Ì ¥!%½‹’N`qÉÜyÃxkD0lDÙOdtðÏ^ŒJ36´œÜ…¤zYb âÇ6ŠsÏÙå û`nö&gÁWÑ„r§Ž€¿í&/Ÿè„âda©¬oÝ”ÅI|‰Føê•—r“ë$”CðMùÌt *E‚èJ '‹PžèљҗÉMÁÓǨԅê0dÀM,àüP³€é³«—Ùá…^xî¹çž¿öêë(¯¿áÀw¿÷}8ø/ =b_ûê¿ù›.¤g…`b2ñãe<·…$¶8h‚y@ßåþ¾«[¼òгŒWíÅÚc'i¬p$fý];%"›07`« T©8@ûõgåOë@X¢¶)ÇR¿°å` ‰п ¯ÔP9wVjÐbä¯iñR輤WÎý^ÂÚÝ@P`­veˆÐL) pë1a2`àÏ”V(«¯.VÆÙÏñEÈ ä[dÀØ) &Ü|ƒ +€#AÀz *|¯}€§A>’Íåçæ@Ëâbw³‰|˜Ç +³rA²ºÏi¹(4g~’8ù²0ti‰(zâÚ×¢ÜÞRv{]l0‚ ÈäþOò Ÿrq¦Ø=m{æi4(àÿsjÀÖ­àû4@ Y˜Ëå½®/RS¹m0Ì›#­ãrX¼¹ÝZJ²4 +¶1>Q²¾›Ý, X>Ô.=ýôN +ÀÓÚõE€§ûæ +€šà`Ü€X àïÊZ¡^ЛSf€êË€é  ÛPÕ @hØŠÿÜ·vo±ê˜|U/±P©7:òÔxîï”üÕºñåèªkN£M’ÎÕÚ•L§Ýi·²õ–ªºêÎV}YUÄáà€e•^ UÏÔÛ+gÚMÕNåÐVÓÎj®úWulжÖá9gG@³aè4tÎ]-àüP³€iz>yñâµk×^xž‡úÀ&|÷{2kp €0@âŸxâ7ˆ$ bnØêi³ØâEKà«Ij»¯ø `O@û¾i//ír#—ø•Z±÷ÎÆ¡ö!Í[·ZÈmˆ¥N¢wøÃ¤M*¡µU÷ßcÈøYÚÏ_U+ýµjµXÐæå! +€þ³©€ÆŠ>ú`H ™3J5"˜™Åè4‰ÀFI3VØ‚ÀÚb€^€€Xäé`A€¦À¿§^¶à16퀠™A;¬°€¯$ަh‹l[ @[Ný'u]Ö  Q«3PˆpÎÇ *V†¸€}}AëÏ­¯[Ét þ½LOsù¹\$_»»~ò˜Pê Ûb’-nÌC¼-]~.íÚ¨â‹ÚÆÀ:Kå½Væ!»¹† ¢ç @ðD +FñëC”?®½eD†ÑüŒ0$#¹¥åAA}È}±4‘ïÍ?h ŽûiÁð?—ωóÝ|~qäóǭsÁÉ“p9ï(þ½G'Š<ÜO ‰ž¶eU¤Ô‹eÿš¨ û-XãåæÌvªØÈ׊“”é:%/Î$m ^r$h€Qu's }@v¢TÇþ¢\y%d@î§d·ÈïÖû8ã8ûxÃn§»Õ²|q7Ä?µ•‘ÇÖê´:ÔÈu”yU>͆jëN“0r«Smu:ígD êôh¶ÚÍåL}Œ^£:-õµjb”°¶¢£Œó£:S ÊÑ4Ì&+m•8ËÓ€Eš*¾ªzZgÝÕŽê ÞeªŽáÛ·aŒ`¯¾úú«Æ(@éê¿À÷iøË(€ðÄ… `ÿàÁà1m1ÜXš……@- K†æ€?:¿#;ó°Ø7HAØÄQññaŠ_ZÞÉHÚ›”;™% ˲ÁT–…Äw„ª=mt0vjB†j6ן@ +€þZIPD‡)úíÓ +€>ú ¥Ð2€ƒº‡0Æ>7ÀIÚ~ €6©$A°³Ú__æ +€·$ +€Œ&€ ! +ÀJSçU~\üG¦¦´]û0üjSìþ:€•&ÚÖÒ +÷£Áy B2îmwJi9À¦¸€ÁŽÀ†ùÛÀ­­«2À®Œo8(hq ‘¿I/}ß:eÜ €Ó«Äúè§òZÄʈ $J#ý…ÿsBòNFÅÜ›*Œ +»Š ‹ Ýâáhƒ€@Aw’µˆü«À¹¼Ñ+óݹ\¿› XŒ€yÇkMßÐÑ w£¨0Å©(kƒ›dÝîd¡k¤| ]•Πsîx.?'P<±8;rð¸)*õƒ:¿NSÐ1Q¯4S¢l@µŠ€À2§VÉ…üëëåòâZ/?#F h2N•â.óÈ:Dþ–ïYZ,'J–Væé4é}êrºw8·a_…etœ¢-þ…+w˜€¦r?-»E̽%Kç€Ø¶®ïd·JBe¾³ö;ØÓ«_\¥ xÿÀúoÀzÞ€'!—V?1}äH• À#Ó¡ƒÁ-&Óͧۊwe™@€DPÁ}Ç} T#âÇ ÿ?u‰íQ±mʪ‚iYÁ²\&1ùjƒh?ù*ÊÌ}ŠÎÏ16:øˆ¶pqBÿ1jÌàH `6*öOÏÓ?yÂÐ_.±f ÂéIï7ˆ ÉÇR·lð_Ž×‰ÿª{*×µ®{n{2TÌA‘‡ò’üpžà©•Bû[32)€ã½ÒļEZ›„°{Ñäúó¤]ÚŠùîñƒûGfq¬($ã$ýˆÅ?õh¥`S@šE7%‰¥ž.ÐbÜ(†Œ/†S¬s)6^Gžv!Ð0\Yüõp\TšœÛàôÖ”ãÇŽˆ\±ø‹ _äfÈýCìVô'l»bþOˆìÔ Ð4„7k ‘x €7ô€Õ³G3€Ð‘Ìø»#àÿ VÀÑ‘Y÷f³fŒ ¨ 0€AÿÏȶeØfcSÙe*¯ZuJ˜+O ¥ªzŠ‘y¿ ÐW[®UÅÚr!Ï´íÎ3‚þo·„íÏtšW²WPªÒû@¸Ç€lf¹Òl{h®Ø³~jY¥jU÷ת¢þL`…‡àYáá0*!4.ìfiw§‰€2ÓŸXý +À×Ávùù0€¿²Àï}÷ûßýo!ð/ÿ +Ð'2büw`Ø +z‚& n¶äÀ©—¯Ø")³íz¿©ÿfF¬ ÀóêèËi‹×<±¥÷Y0-ÜÿûG'f[Ùmó;†)èÙ"ƒ©Qþ“ú³Ú_XÓŒß_Ò`§Zk5+SÃýR +€ ¨ñ Zî`(§$ÕiX)#Ò SÂ]àŸ"¦ Ãc õ¹@Îò0`[ @PnàEÒ„ +ie‡ˆŠ0ÆlÝ +@`Àx@ ±Àå& +3‹à{ÖEŽXåpWD’€J¦V•K`?TM%ÐoÙHº +íUb8C{M@„Ø“ÀGGrù¶)ÊC¤äjÓÄM,Ÿ|æùÃ֌ʬE]@_–o@W¸¶^ÈuF%~ ‚·ßev¬Á'0]#€-Ø<½ƒmgšt7ŠwµÑöCü!ä“…ƒëE÷ï?~Ì›h]ààyJ=T"Ø †v³…h©W^ò’ÓQ.Û°>1uQi„€Ñ¾}Ýv..F( +‹½hRE‹Muü¦Ô‹G`;jJþ¸À¬?ÌÀ  ÷±ÿ}€°°‹ýDÀíÿ. <½úŧåH~1žV-ðß?\ð6€@ 49$'t¨ÐO[7j[4€:5˜3îF݆ñ[–Æ¥ [evÄàD-S‡âH…Ò'O¾NÿJ}J¾ÙŠ\…v-&#œ¯µªv­ýÌ•Zísß¾"0ï´ÛW3çëÍl«®Š£ÕRA50ªŠ`,3ÍT, Qõ!0®j©Òlãñ·Ûöø«Vñ­j-—µ?k}Ðþ©àT»vn¡ €‹ÝÞC™£Ÿºxé Ÿ¸ÀŸýYPäýÿ{oÿíï#X K<p@ˆ)@€Ö-fH:Ù/ÙÆ°é  õ] +þOžÈçgi@J wÿÎeäþAö³!?5 •ù0Û©À–é’œÿXÀÿ÷€}÷=j@>å +£Ñe¤áiQ €4HÅԨŬžÕnJnSjƒz6ÿV]˜Õ:~lÚt<Âêò²|ue>E €w~¦Új›NßVÕB]7µ,ÿ©°Õ¹Zm×EšÍ+ßî\4ÈóYn5Ûõeå8… “[ÉšÕúyÕò(¨ÙF'«êµQ³&PÕJ-+ï°Á¸fÖPF}F­ÚZqìn‚y8Öз+°zíëÞ𪠴ÐúÿýïŠ|ßÀ_%Ãõ‰ßüêûå‰èLð5gÈ$SPjl»m3KdËÁ<…À’Ëþ¶ô®-äçyŧ`5˜ç›Ú c•v22!±/Þ±zY/¡ vO&ÓÖOnK´²*ò§Ošµ%2˜!¶ƒ'ÿÃf뎠 +ŠP=ßW”8‰°Áh@œ(Â,¬ReH nÃvpU;k)`žjH¬UK&ÓŸ/(•D°”n"}ºж&S¬ @‚þ·À˜3*ïx®ðµmi×L9IKN àtw˜À1*‚H§¯ÀB @u¬ê1ì "î·}C håÓè—ªLÉûGÅP9(ŒÎר¨˜Ge%ì­ê›î›4f„ºø7(ÉgÉ#S nå´Æ}êŠQ @¸ º-D Ì(À½ëë‹‹ZÓÁh¹œ›ù†0Ò`R†@½2g•x8¹É±ýÑâZ´¸9@œ‚ùÃÄìÍ£ß.=4Wò¦uewÒ37`Þ"0;y÷ÈÈþõ½Ûº~ß,4"À7'#`ttf@84oH:›?6‚‰h»<Õb©xÅax +ƒykMÆ¢è:ãéÍx€Á ²€¹0¯þ„POHÈ"P[\|Äš„¢¶[†Pê,ˆŠ /æäG«(ÆFNÒ¬/ Mɰ‡æy‚A\§*í©’üï~ Vv+9ä%Šºå¥ò—ç&‹„/êaôaŽ–‹YdíA1]¤ò/v»3—“ÔÅÂÃ"q/‡ØJÝð0 ìÄ #",Ú½ø‰*ÿ;¶Ÿ +Ø©ÀÓ«—VEB ì@ùû +Csü³Ï®ž?ËPÀàÿøô‘0ŒßÍúcmª¯% ù±@¤UŠ`0ü£:xþžÆÿÑ[ÌngÕ(^‰êè–ü½ZÙeºZgýN¶ÒÒZäA´T‡\m¶ªNëÛM‘€«9ïu¹õÄNéœ*%õ€^Ô •óxÙj»©´ëªÎíÔÎ÷ßÈêç_oÜÕH3":©6š(¬š¨!P _Ä03˜¯}G½Vþ/<ÿ€)oïû-,~÷»ÿ5€ßˆc€£f©/Rºt:n†EÛëé¶<â=xü»b}:`çæ¥bŠ%+gÚ|ƒÒ†Žy[L3PÊ`)³'# ¦ëO)fi¡¥D«kÿ ©ÿ¥8!›ˆãŠÆ¥ŠH¶ +ºªxÙPD!˜Á¸8$ÿÑ èL‰€jÙa÷ˆa;%A€ZN)ì +@®Ð €>±Ðúœ7ô€? `Dv`jжªm1\E0@| +À. Å9”Sß“¾¨~ Œ$ް(€˜èÛKz¢ãJ+úÆû +ß?KâècÕl§‰ÌW'*){MÈO­¢¶·å(OÍ>²™6í$Ü ”Ý#Їüyë?·=Ô_À€Èœ}`VøÜwk·6+ö^œìõé¸O…ŸŽûô¥g­•ËÝ\Î"Œ`ŽÒ@Èoü±ÅH<¡¸¤íÝnnÓ6-ø“õYòfŠ|¯tЧô‘‰²R¹bØ%çÜ/Ór‘ω|pÿìI!zФW¾ˆÇõOõ6¢¨·—œâ©Ä¢0*¹_A¹ÜëGD9Æ…à ?älËyéߊ®’3† V£ß™yÉöÚóã>މQÈ4Èù‡½88xœ<¡/I,@¹Û6ÜBeþ®,VRæ½YG‹T¾²zx"~šÀß̶¹ùýÇËj”  2ª gÚGõÈ­lÊ&Î/ü÷Ú*m1}aörçUåµÕ²‚ñvµ%G o¼Ñ¬6 +¸UkU§ˆô¯¶ZÓÂ}€+ío7Û­«W:T4ÙV½~¾ÞV® +Á RoÕ[*R[ÐO7¯3ív–G«<ò?šÙ¦ê`\~€x@åL£ÑVýpÄ` ´«MOŸ…è‹Þñ(Œl½žcxûodßÿþ÷þÛwõþÞ÷èð—¯ûHÏ}õ‰¯z €$ <ŒñrY /ÃÜ–l1n?!6x0PÐ;e{5Ó¢=É7Ù°ƒÙIúç8µ¯¸äJ=p`l™ó_alŒ²Ë£™)!“–üoÈL¦uý–ÀS ;&Y‹ú3² ß[A 0©ˆ]4]ñŸà¿¬Cn ÔužXP¾Äªê^¨g—§‰°A&PòÛÀ €mSYô7•í¤ÐÀ)?¸¯ò(²6ü€…’æEcº!:Ë. +€§7hM¦Ä_ ¬¯˜ï+ä€X°HCP Yý/U³17Ð:ßØÓ˜œyî1c0¢ŸÔL´ß@þkŠÄd²ªªUÍíû¢¼¦J ÷h5Ý3 +°€„ܳGSWÖëýŽ=/¯Äh5³E\éŨ×+ó½ar…™B¯u{kåîÚïm^×!ë›Ýµµu½„ªÝëÝhsýz·xêT±×ëv767´ó•ÍM%Œw£^ןǧåu­^ß\ëF‚ó¥Ü+‹‹ÖÃ`£§xlŸ’/©Dqº¤# +EÝÍ !ïÉbY¹[–ä¥-K/öz€5 à󊺊®ƒ£Ódõ[Ýn¡Pèö––zk:nã}–×6¯__{i­J^^ßX»^ÔnhçÆæzoãÆ@É_ „CW¿Ñ]êuo¨*y´9³•µØEosÓhLI—¡ãÖXd-Ÿ+]Þ°’‹åõr1lDð¯TÝnérïwz—#¦r·m¸…Ê|¸mL€”10F A€ÎÂÀV/= 82=}dœfèwѰ9ú®ϪåABµ²XMQ­eêÙÚè˜ÅG…:X‚ùÿ;€¬¸‚îqªÒN‰5Èéo-·²-‘á¦UI·ðÉ›"<Ê¿Ó1`þ¶êJ€jë¼’×Åtbl*ù"ÚY­Ó hWÍ´2Õ¶ñKlEkª‡U•Bèo  ¤T­D „†]ÌÖ.¦&“áiÀA¸ö<|íµ×ßxãíwœ à¿}ÿm{  Ïzâ7\ø< ÇH¦ è ‹n­}ó#ml€(ÀNÖ?*6êØØ©½$õ†ž·£¿>MqHJ›ŸÂÊÆüŽ;¨äzŸj_ fÍÑŒþz ƒ†6ù?’_i þÿôIDATýÏjôÔ¿lªR¯0b´]ž2/Oh=Ðç2Q¤òn›ú—[C³Ž&òO'°\YX– , n¡p/è›OÄ<¤ ‰`Aí2+™þÝg²•0€@®¿5˜¹Pñ&SVÿöWvŽPQ„—F–´À¬3êb  ØY0‘Ee3 aØmÇTD×;(5¾ +¦[¾BÑô¡©&6P¯Š›´›N ”B5…ùÀàݪ)TP6pr־ƚ +œ©è¼ÀÝåú4ˆ _Ýò{ŒŒŽæÌòss§ +…¹9×Òñy‰}×Vh1ú§¥ûc\Æ€2à3Ü3å¾0“+iUGàìÏÓ*á9ëØÂ¼2’=ZÈæ,D¾×n¾ryfs£W’é¥ÈÒhÍæ*O^ç/ÝÙ†Î{àœÚ•¢RF÷¹|Á ŸËÍNîÿGûFÈ_6a€`B +®³J-‰E”¬Âóè´fœ ³¥Åû(%—Haƒúµì3›§L8ìE¾ˆÂ+½Ia»²26RºÌÞBQ%çKË©à”|¢DuýF®fsÊ›ï"OÆ\ö@@ÿi¡2f#­®2`߬Í_Æ +(ô{òÙgŸ¼€wÊÃhŽdnÕû—ánð7‹o:UƒÔ)±ÄkâöÔÛêŽej +UúTb3¢~ ÿ·3€Š’êÈeÕ¼d¨ÃõìÕÂ-{Z3£ª?^U®ê¼Žªo7ëWD:µV癃ý¨:§^WIÜPÕ¦ú‚ -U1ö¯ÌÚòú+æX5 æ©Ä ±Bh È£þ©ÕµþYz"îjóà ÀÆø‚¼xb^ àõ?{ýï¼ý×€:üÕëI @<€€,Q u Í0°Üa_ߨçxù¶Á¡=Þ†³Ÿ8üšÉû7`ÞÑâóYÊØX÷Ìø ÙÚyL'GË´fÓ€ý̘߹ÀFUû†ü7ï1”Ðßp5à‹8¬öG¬ ùǦ­@Ȧ=ÓBW³ú´˜g­®¿j¶eþˆÏþŸ÷œXª‚~Ú ˆù?Šœ„ûÃnKjÌ#Ú&Dÿa»iØåÅÒ¯?9Œ…§: +ÝW=€‘®¬Ø!ÀÀßþ¬˜!èV­#&v!úA€¶É¿*+’ÎçÀ¼íþÓÙϵ€ïFdÃc€x]›® +×eEY¨Äu¸ŒD£”Π/¹®¢5h—cMN‰å£¯Q!L“®AQQ)ŒˆŽT¼ öÒâØèžQ( +nx(€/Ž +ƒš™ø'Áö}ðƒ3119iG*™½âµí6ïãØ™™ÉôžÐÂÊP¯û'߯ÛŽ7êÌ9æ‡u’Ê©l39/ù?ù9•úŽPÆJ%X=õ]•¥½ÿðCZ?õ•üþ™Ã‡gt^•|Ò^äë%×Ûm[d”Áìð¤ +­2ÏÌLèúUìÃÚ¤œtæp¤å9h”éôÝî»kBe{(§o’âaänÛp •ùpÛ®Xà¿ зD°¶ðßF +ÀWž]5€Àpô·llý±ù­Ç'u +÷³1`;ÑTµY•§¬G |Ô{©+ê´×{×7¢n¤´½µk/)9u£ÙŒD„¨ÌŸ×ñ¢"~243Y§;5Ó-kzA¹€ÿ[Z,¯ñ (¿oÿþ»gExðoŒÅÚ[–âþ<¦§4SذÓxá5‰0€Ò\ +§Kuy˜-ÒüÌð<þv¶˜D…ÉÓEOÁ<ÁP@ô¥¬Â”_ +Å wÛ†›Cú»2}n pôþýîæ*MŸ 03~dú]€Ñÿ²þfMªêݵ) ';znƒú5ÍM +þ÷ýð«ÐÎŽUTÿª¡ÍLÉsÂ7ça`Ùz{…QZÛuÔVBµ+MzgµëU¹Bõæ·ß¨wšFl À +ä +ª>g †¼¢¼D®Täà Î!Ây€f5ÛRÍÃ++Ä-Á1tÁ¡ Ÿ‘ yc»YÀù¡FŒFfðù‹_ýº$ðö3Ç_èùò÷ øõ×_·qþÅ®X À…‹bÃë0ó|–vÄÿ´ê¯·2?ÖÞ)©vÆðAãt»$´Üøðᬘ½/ó2Xa˜ßq‡<þÁ‰‡>' +€P (†0š1D X£7›w娇fzKÀ_…‡F’D Òk#g›3Óð[ûßc–ä›0JÁ??ã!(<¢®sêo® @ŸBî”J¦Bpnл&¸“WÜßf +€pŸ®õA€„€fs%À]¢”Pb-…&€V:`@à*WP¯Y@¢èº¸Üׂd¾+¥eh­1:D^„ÊÊ5Ù¸{|éZ·Ä2»¦†ØŒ])&¦J¡ªŠC•ý{t .[‡¨$Üñö+™Ms?’(€RèPFkäG²¯O7µÒªœx*±){ÒM¦ŒîÕF€WÎ2Ñú]À±ƒ#³Ç +˜!sÁ§rO0Œ·kÃè¡ +à‹¼m'JôèO¬À ¼æ…—…€`§ 2†¼Q&½\ÿérµû¾rI'Å NûHÃ3ð™Ëùxûâ†Û,__,æŒò|hdö„ö’LXn=œØÓ‡ÉžËñb"§ +ÁM¥³|sJëC YÁÉà¥Âd´ŠU„gxÑ *€LB8Ÿ\¶G¢ZâÊÇbÁ¾TXÀ†S†ÛàæFþì©§„#isìç‰@¦pä«"®=¢;þ])º¡À~7Ç~·&7,V­´4†ð¬f3ª“¨dl¸ÓûþÖð+Ðfîòåe*RÕ +ôÖ¢ë|UR펩þ6r® + —Þ @ûJ»#ðINó À6ͪu¬>P­`Ö1u†ìT$¬5VPTÏ («fVïC­Ôš+J jVU¸•KõŸ¼z tòò¿´Ë;àüPKÀÛþäÕ$06#ï¼ý]Æpàc(ƒ2Ñ>ÎújÚl£íÒ´ÕÒø¯)äÕ‘ñ;•=æ9&æͶ$L[œÐ‰ ÔßÎjÆÊÀ[µ­ÌLO™ðŸÏ 0&ÀÔ=Ö ?_ZÀ jÌâ° dÁÄó6æÊ&}ŽéŸ«}NȤ¦ÞuµEŸv¶eÅ4¯¶ßnˆ¬ ŽÿKëŠpŽà»Yjr¢u:ýù¹SÌy'9ˆË ÂÍÀ]ý_u·¡†*FVš_r ã1+îý w,w¢)íR`WA)Å@ÿnùÙu"cÅ¿¹îÁ* +?_…¸O׬¶Ä¸¹ª]79!€Œ°Í½_‰ —®Fß¡^Üù\’NdF¯rÄí­èF场¼ŠÎ?ò´†ÿ ¿N¢œµ•—®ÕÐ~”Æø +<@ߟ)©&üÿ{ì‰8奃Ûô¢‰\wöàݳÇò6àÔ0ÖqïÖÏÁ gCqq#bü¼Øx‚Dw[Ÿà¦õ›cœ!ÒbI Ô?Ná(¼vÖ8Ø2&°<=7c[Ë–p·",.þêb¯åóѾ#ž=Avp—¸ä×C>*2þ¿ör˜òìuOúù6`s¢<ø‡-”< ’$êR˜,½d‰Í,Ÿ˜ŸxɽÔáŒìâ=wø4ÚÅBwñäIšŽŸDiÿ¿ôØf‘ð‹ëÝr·m¸@W&ô_}êó«©¡€¿x‰aÝ4?d”=ûy€/\ø”õ×ç­€¦Æ¨LˆÓI4€š@»ÙªfkWä¸X9B6ðÊVüoÒJØ7UT< GŠê'£Z©bOãyCÊTÕ)„ê ¹‚¤µSi]…4›Wäÿ×ÎC¬î¤nUÝ J&žÜÒáµ+gt5"ýhM ìOÖF”lèE“Ýÿ+ ]†íòJUѰ›œjöëL‹’}AÞû«×¾N7Àk¯þÙ¡ àÿã˜0Q€¦<ÑWäø_¼#}\Ýf!‚ŸÅíø¿EË7—<.i9(É!eÚ–¶Yðê·Û–í‚ó„mØzß è}11xéH¬U~QP ¼a¦Œ™ ÊÇ<€Ì\À´n˜ïžªZ¤£x°Â³iÎ|rLu6 Äè|*è“c^Á)oœÑóD¸È"rU¦¥¬¾ÙìˆTyä$ —]ž^ÕJ«dEæ>7íIì“!.mäYM„¹#hÕ&ž“cÃT§€gV,@E&еÚ˜©@ZȤcÎø|á ’N·§.H|¢B§œ " *G›¦7•€»[¥bT>%©Ÿ§NwpõsÊYPÞjoUM°ù’9¿˜_Š +Ç•è"ÇTƪ¨ƒ¾ÁfËúØê†ÒÑrÝtÆá«¶oÞ¢3"£”–!ÿx¬ˆÃoMÆ‚pϨÁ¿¬Ç`»½h21Z€P4X‚oÉâbñÖº‹›¥ ¢îƒÚ *Ae—_®eÆÓ‚âKç-„~#7SÅì3ÆKå>“¿oð9­ 8îsp+“á?h^\3½$°8—ŠÌ~}­]xKyR„ül)a.娚g’Qn{¡_ÝÃà¿ëqÉ Å¹‰0ö?£ÊÂw"˜×°àk²°Ju¼lð¯C”CO1]òÚº*P¹8N]§º±už&€g²òùY°¡ú¬Â“Èh q¦X}®ð‰ÐÚ¬Ó~)³A!è{UõG»óíÿ[§Ñª.˽jeD¬jV' È:­R4›ÙåFe…nת+=˜Á¿‘½K±•ËÖinr>š±&'Á×”–»Öª.p£ýßat±[š,ZKº0´X0@®3­âÂõ<ƒõ1"¿=k/ºP,D¹e§4@©(*ÿ_k`4[ò‹Äýƒ– ŨW  _8A÷/ÇšýêÒïuOóÌîŸåÜäüháöÖBJŒ½Y‚ çAl•¼Px˜‹QÑbárŽ€G+¹—”˜ÅŠd _\ tIÅïgJ*y>ÀšØU^úU‘˜ò:]7ÈÝ¶áæ•ú»7‚ö›9ü301< pä(1Þ ÐcP>ukfU­^· Ô]PÄ~ªJ`øÿËfèjb6“†æë[vyl9›—S¡Z ¦W•ÖO*^­×s…ºWu¤>jÍÊÕ¶|°NçêU*n½U‘Y/@‚¦0ˆÙ´‰ç-ñ|Ûâ-êm‹üCö?c} ¨žõာVU'`5èÊJûñUg»XÀù¡¦ß'c#ʇ¿@Àó"¯½þæÛï0 €ðÿï`?vð×o3@_ @o‘Ú.<ñ‹?;h§ÍàÛ÷ogƒø¯·2óÙ€Ns­úgl¾Ùl+1HöZB`Üs·ÕÄ,ïpce`ƒ­ÚVæwÞaž¿¿ ûšî1L7Ô`‰¹ãá\ÚÊ€°áf>gÿ^#„6Ð’g £„ÈaÕßN(-y¹ZY#XnÉGï´å8wZmÝÀ¿0u> üä}£Š‹ÌÒ56+¬“‰0Õfý•‡þ|öŠ€øÆXF9˜3/,Jp¦öøãŽ÷Ú  6Çêâ*W„œŸvÒ4ѤAh=Ý5õ¦RèŸ Š6;Sµ–èwgÆ£R0•nÝ^™j‡0t.AµXn]W¥ÛSŒ[ÿÿóˆ†èS)uõºmÑáPáô-a¶.?]ùAtߙ̡ԺªÏíR6ºkŒTêÙ1Ý´M¥æžî4t½ÂZú„˜øˆýH*|JP5ãÀù~/ýà"{ïúù^lï耿\þU R २4SèºàOÔmÑÐ?a1FÝÒDA¼×^®¿¼ÅúóÄ<€KmJ€|þòÌdáQS „©–‰€’O½=wmвŽŒë|N„Ò ô ÅýªÞÑzo1`ÿÈþ»ƒ§M~GHG/»“%¿|ꔂ…ÞîðÓaQ…XðÓ0—܈M>è:ô»!,0³ƒdÌOÛ—aÿt2•B Z?É‹KxðøÉÅ¥¥ˆWY/³r·m¸9œ¿+ó&Q€´!ú€F€Ð Q.­~‚€ÞàPP›Vt_ @•¤LµáB\Ó«ª&§ âÕ­\•Gã?Õ”9܉Uä-g§TÑ8À‹ uMÖ¡YA?ã´ ã©éñß©^íT[Ÿk‹àýw J 6bíÑYž#ép¤½ +Uµ+°Š•©æŠ\¡ªn6šrôÛYzRª\¯Ä·+J=dâ#àüPC8rö€ò>xð£ ü}¢ü Q€ö8@#.èg¤@à3O\øŒÐÿó0€aw2Ð5ì߆ÿ² +°M`†îO›ïÝflݦ³ea¸­ ì f§53 ÷ÅÄ8‚ƒ þQÜó7ßß?M°ð?V@ Ð}›¯±¬9R–MÀ +€þ´è¯‡¸eRw…!€xü¤ÜmƒáB…A^þ´Rr,ÀÚ= + ;Eh•' õJsE¼‚¡&yÖ_sŒs‘ Öü¬þ†4RuL·ªŠ­ +QWšcœ¶#2°òxçÛ¢:»JFqôÒùƒA8²ú£wt<8 ÿ lÑšš<«>^é@2èäÒnW¸' °QÉuÖºr! +Gß r\”†öq_@ ²tÛÑ+¸…áëKCïà h ñ«+gÚº¥V'Aìa¬É`œÊ&!®è~\I:òÓPP i >r€Uk@¸Ç{8пaÏ=9,}¿´X.ßøƒ¥SùâìÝ#³Ç hO× lSÊE!—€K Ž×ú|)š˜àù÷ =¢ù¼<ôÑ÷µÅ„tFôŒÎÏå_œ™ <±¤|}NB3:˜ ’b8 +þk67Ó% ¬1Ðkiñ1^.¿ôrñÀ‘ýDØ™hA7%_ÐÜrQñmä€(~äàb¯{*/àÞ|ÞŸ- )Q)œ˜Ð€a”NÃã z¹t¼C(9}8‰L&»yBlca±[˜9÷F´&€Ù“*¯™Šï änÛp£N׿àÒSFì_ß<pßø‘£` Кn€Áÿ‰Åø¯÷xŸ 2¨yЀ]ó}°lm¹ÕZ¶ þ:}é©%Òú¿WH}ã‘ýÕ̘ê^† Fh¤z¥æƒ¡ú­Ù̶U3‰¨êÔL§F¸¢óv:ß¾ÚéT—ëŸk¯OS=׫ËËÙ*WK (gFc§@€Z¼“…UTÝPå§jXFUÛ—"ÐÐ(fSu´Î§zNœáqUSñkËÛ6Š`íj"cÓg/^Z]½€®ýÉko0à_ óåýÿýeNÞ1 !¦XàÅ‹.|æ3O@.~ž(€€ÁÎisßÝ÷ïÀ¶H +áV‡ý˜¯ÙV7ßl6°"c/%pð&qðãÝÂ)ý´Á,/ºÙa~¤½ýyùÿ[ÀDj$Ò +€Þ@‹™+àZHbªõeÔmWh¿J)eBÅ{‘ZïtÄD?ÛÙ1á ûú/ú&¼$š@7þµ@¥²P¶Ú¨D:¡uo¯6ôɳ^ËÖ-ýéô÷œsÑOþ’ÜXNg¥ÑS¡ mý)¿$âÛ€¬ˆ'¨48üˆƯ+Ôêþb˜Zè)7h}jFyö•Z£Ýdg­¾\W·Sézum'*£5 qk•v®Lô]BR´·>¦‹Ò—•sNfræq]T»¹¢ëhÖÓ +@Íš:¢ÍZM(0Ç£ÛbôÐoMÞ QF÷b•Ëkkt]Nðñ»G†E޹Ÿ‹ÿX,ÐÝMÆp:¥ëP¿ÕzÞZÓ½Û]$wÃ….°ÿC&°H3‰d‹xäœ̵-Úf êª(yk½PñçUt]ƒ]¬}À¬äš«äÅ(wÿ\ÏK®Ýz“›J¾X|ÔJ¾¸pÚ!q:û¦{Åüa ¤èFŽí[çc1|ÿänÛp3(öÔê4€€ü˜Qc÷ùx O¯~â,ãg§Ü"¨üç55Œ8@PÅ%°×–óÔV©J™®/ëž—?@Ǫ*ê!OæVÉŒe—+㸮X,rƒ°geÝæa}ª„ýÔ9ÉÈ€­ªü9?ÎUÚý!!òkDT“©¢~ÍЮÈW ÈÉB NmdW+hYê(½í æg*"¦2“£¤ràeUEªºíį-oÛý¡¦ú-½úço¼ýŽ7üÝü÷¯'óŽ l1O|,éúæ3‚1$‡RXŸÒæP| -$ó# – iðý±‘ׯÖí +@ÛFÿ0;«˃å÷ÃìHæý‘ ÿ}n +1Bay¬6¶(òˆ™ÂÚ`QqŸÓ¨¯@zÚê[ö¦Ÿ?à +ÁìWôÏæê¯iÿlþDñyÕìôò´Ý°áQ-€Ö**P[Þ2·€þ~xùUÝ £Dà0ÑA @ü€~3¢ÄÂÿöãM#BV#`3§ätº;€t³šÅ‘iˆ'Ð)Få`/+O“¦nH +1Eð«¼yºÓ¶†} +/NRÕÍ…Ð_ïTõEYQ´ }O·’V¹·‘J´R36ª›¨´! [F€°Á@÷k¢p3% +@-‰Àt>§ii€Éuјj¤~ €õسµ€‡ ™uÁÿõ?z¹Ôë.ÌÞÍH€òÇ»ÝÞu¢+ðÖ¢²ÖÊ×»×=a_´Ô]ëÎtmt¼G8 ݺÝ5«Í¥Rxl`±È03‡ó½H +üº]+¼v½×[ï‘Ôm)êêuYK¿·¾¦b­olvOçfæu^C]g¯i_ïzY%Rš~ãÆÈìììñ> x×Õ\Wi—¬ä 溎¹¾"tÈÆ¯<ºI™¢ß¢¥ QV,©L‡ˆ¤äJñ[¹É¹îeí)¡Ø¼Uò¨ël©¡ûeŸ¯÷(ùKëk¥S3…ˆ‡û_Ì?v²¼ÖÓW­ò“ä:@î¶ 7ÀüÝZܰúùþË ?6F÷ùDL(ÃÃoU fð¯»*ÍúÀ @5ª!ŽOö®Õä‡SÉ E3£øO…”XMu§êÃe*ªbùQÄA©Â  Ø[¡ ¾?¥N#?Jp~p¥sUîËù+:ót«EÌ1ê¤ ¾fƒT—3õe€ŒœþN¥ÒVTiËÙSz†œ•= +@£CS@£ÑÔZP(*-Á8q´ý¶Wâ×–·m ŽþPó&‚2âóƒÀ_¿ýöüæOü‹s¡€u¼ðùÿH´8 ;–¦ àtÝÉ|·í·Ä{´1…Ñiüg=Ì‚ùv³{9ØOäfÙ ý¼n$æÕ·dK  þã¸ïØï,À“ú +€7€n†ùC#?RmËê +f@~}ó³b-SìR‚ÜŽÜÙfG·@˜h ÿX'$«,ë?/¯XÛFiT‚T+*9h•^)ú6›cøð,ÖZwhg &…?fãñÁ¦ÆpÏùG>Þø’€¼r8r½Z¦“Š,›@ËÙæä/¬B‹WèÆ¡i­º,à¶“ÔéÛOÒÔ®èBɿֺ"†¯\€z»çØ«Lu[.ÄÓ0ý©QF,Ê$@\ÝDSV\àëLFä 11¨UåÅ«ÐúeüwJ)æòÀÇð‹›°e³ØLïÞËë/­¿ü +"·ÐßaÔö ¸ßÝøæ ž©¯ ›¶ÖÛœÙèýŽìÓv­b–È­šµ‡}RÕ³D\+™€v­^ŽM¨ž>xŠ($€ ãj‡(Àg:çiüoÖ³òàšç©þTÝ ýGÇ3ãªU]m7%PÅÓª´Ï4Vè|üY€˜¹Zò³ä¢üç¬B¡ú×–]ç,í6á¸9{ñ ‚qW^xáÚkÖ`-?þ»#üXK"(ÿõ×_c€1€hƒ·È>ó Ê…OCRJ› , ;w0Oaʤ—¡µ`ĶåžLK;àúv³­7Q8›Õ7øLÆIc 錤¤¶ÃƒÀø6õb„[€Á^ S0càÀÖX`$ý” t6cyÕaêÝ }€gIâ*§´€%¹1Œ&¢cE p–[-qkáç_§x³€è.Ð)µµR÷àQrœE8›µ)ÑãFgfü%JÇê@Úï[Õ+úÛªÀ"7YØt¥ÕÕE5ªæœ«€"*J­6fF\&ìVu÷q {¼nÖ[Õ)»&%t¸Çÿ‰ÔLs Ü÷ +€N“(‚v˜ô +²³+røç§ê+pµ´Àª£>A€q/À=÷ÌnàÆœvîâéÒá‡r#ö8099ù°åqõOÀ͇s…S…œÖgfr*º_ fÏèÅ‚IfÏ˵ýö´^Kê¦ §NÝ?q?Kz+'ž‡7gÅ›;eÉyqD޽BgR»NýÊቂ<ð€Še{yza0‹Ô/öíß÷pf¥±’ËT¶‡,·ù‚ÎrJ%/„’ +ÿô£JÀŠÊNÁUòI/y(%·Kó-§ +÷ÿ\ù”•œ2'%·cدӨäúZµéTafâÔ©œ +ý€ +v—¾ÚÉÙ¹<wŒ»mÃͱü½:€œÿÕ/òzÚÑ?2*ø?~ä\°ú‰£(ãÓGŽLòVŒ[sP ß Ç(˜1:.înê➥™)†ÿA0k7…ûÀ I Çÿc ë +@;(Ú:+ôSQF´¾ÓÞŽ6©»Àn +™Àfm…n­b ›/´×-Ðz\þ>ã_ÊëgŒŠ•F糟Õq¬Z_¡Ó€Öå;ë ಀ_óvƒó{û˜/S£ô*7¨îE€¸Þª‹è?ÏíÔÖþ,mʦ£ûúkìëT2ì‡ ëââPtíFjpÑ)³@¬8 +€J¼«&Ö € €¾À;P¹~ €á_Ðo>ºçž¸Õ( ÛónÌñ‚åÀòL˜ýàa-Lës,uÀ“:v¹ÍæK÷ßYxk©ŽBo–Ä1„{‚ÆS9AaîÔ¯œú¹€~JaGj'[N ¶aÊäÔ©‡~^;Áb–µ–#8O¸/oy˜(½üì?Þ·ÿ®âÄýñ2´²Ò.[&Qt")«²qmîÔ|ifâ2qŒgÖ™ØSð‚+9𮥟ˆSNË@ÉS%ÏqR +ßaЙøª¸f}LŽ™ÌüÊÁ¾s³r·m¸Q­¿WÃóêi^O¯ÆcÙpÀtÀî;z¶ß à,£ËLOgn‰pgÊRÀX&aªÿûÍœºÃu«««Q‹úAJ®í¹ )üÒ:ö›é¯fǨƒˆUÎÔ¬±²UË^5 w'£ü‰ÿ£¢‚£rn·¯4Uuu ¸•5 !@uUúc6Tè˜5T¯(³ög!" +"ÍFã °ÝÚì­ëkë­÷TðW¾É@î¶ 7‡ò¸Å +@"Ä +À“" +—žýÊ“è0~ÄšÈïfvgʪ¢÷P½Çû€êÇÿ„È»wÿ_ª<‰¤£³UžOFn‹Ü‡ÿÍ? –ÍŽOU²ãª)é58EeI@5ÛÉVlx”¨êÇåɰ¥íˆíg¾Ô¹*âJ‹¨ë"AVõµ€jvºj­.zP'"º#Ðo6Úgèpfå̙Ǜ+ÙZ»-„Ãìè®fr€TešÉIÙÝ2™C»N¦@b€‘ÿô zþèG?  ÀƒdÚð×o÷×_í?^ûÚW?ö/žxâ ú›ûooS ZÓf0» Hel†ýE:Ÿ™Ô’È,À–43ô5³õxîæ;ÌVdì…?„œâ³…lãìÃY IšLI\áPfZú +€ûý6% +P¼Aa¹)æ÷ËML 0K +¸ï é€óº£`nqÀ­Ð +€þ¥þw6@6¨ÊSÖÍc”Öµ±–þUMA£>,D…Ý?ÞÀí_iŒ1z`óñFóñÇ­wŒJÚ¤ÉßÐÝþº<PkZÿ>Îh…á1ÂeƒUÄ¡)Ê[Lýº¦ó(Ê\PÉR +@5ÄP” +t3@ù%15ëh +A}@ß)ü”HF€9#®ØoÎH€¡€v9þ§¬»¶þïþ`}}í%éäI €f-Ú@CéVü£Ïò—weMੇ'´Œ +3ù%Ñ +bäÏKe!"q–Ëâbtš0¹èr¯8Ó{…C°°«4Ú¨å2ÁúJL¡–µ%*ž¿¼®üy6Ÿ,¿ÀÃté¨-•YýWëkQñäˆ@.×ÎÚ ‚g;i0+³6—Àwí {íõ|Ѧ/s§¢Þõ¸äê+ƒ¥ëž‰Jnó¨Wš¼ì%¿Þ]ÓQ𮂰Ni%gáË…‰BÔ[¢(ô ;åɓǎ\x¬ì_øÚ?[ûW6»mÃÍáûn÷Þ'À§ýÿ¾TÀ¡Dxö ÎNñ€³g?uÓÉîL¬’ô0vnøo ¦ÎäÁ¸kÖën°ŠB•Ÿm«Ö§¬zô +‘MÔ†±U*æ‘™úÏ:µH]®L¶£¦-£¢á!C•}­U•èEÿëZû¢¿Î#P[çiÀÅ#PÝC¨™mvïÀ+\WÚ7VÎÐK)»Òxœú­ÂÊT5ЍúUî…T­¦Z1[Ñiœ ±juüPf\8?ì½w4sô +À¹ < ˆahøÁ_ÿüüëõ#ø +½„ÿæý¯ÒöïñöfÚ€‚¡[Ñ5Þêû™ÂŒ›½´à·pë¶¶Ø{å[öDZý¯WzÅý!­›{Ь¾›VM† X»)£[H©+öã!3 ƶŘÅ1fà™°“(úÇ¥þ ±Ц V8`@¨,» ë+¬‘…LHHTëPkŒYØ’”þ±t´;‹n ýcåúצÀü&,/šîµºH c<įN¿q mÓ­c +€r`ÍÊBëútCé„ÚÕVž"Ø)à +@ëÊtJàVÐ>n`™)I@¢(ýÝ·‰ ’ß‚ C@ı€Ã~£¡€I|(¡ÀXò€¾­ýó5bîåHώܽ¤‹ÈÑcOðå}óÌJŽ÷[Í£ás…îuËRËÖ÷Žþ„èI·@Ù7 +ÅîR¿xüØììñž¤KƒßÈþÕÚmpssø~ƃÃ$اå_ðO€‡˜@¨À¥¯<{éÂQkøTéwžìÆt;Só»N•ìøxeG wCÐ?]FýéÅô2µ‚œwUZuüKBõ—XEhm54M2¢•©˜²WU¹µi¥ÁÕb²-èC¡Z]×j·mˆþfõÊy€úù–È„ï0žÉ.gë9rÙv§Ù©4VäÉÑTªéL M@~Ö™3(M“Z >Ø’ÿ¥4­ÙêºR£ŽÜÕøzw™ô O' +¸öþüÍwÞü§Ãÿýà·…ÿ¯¿þÚ5z³OŠÃmnû»´÷ï?õ6…úÿÈoø/ðGÿÙ¦?þ#Ù6°£…’%¦Ä#&Æðù‡(. *,Åf +@X6Àñ@1æÿËeݦ€ÿ±`]B €Ý‰ û#‰°»@é·+¬…;fŨ+"BQÂþõü’¼üFÛîA-Q‚£‡ejӨ뵆-7 +@š1ÅAçnè©g§Æ`) ® [“¥3  zR¯ÔÇımŸîŒDP.FP,@7pEת¢qqA \0QR½Œè~w@%î+ÊU%Š+‰~ €€XÐbØïdÍ~MSìYTF‰ Ÿœ‘mQÈm5ÀHð%p÷/워À,$´µYßm [“ÁuXAXWv!õu0 ½ûݺ"=üoíYâÃÖ_Y­41À +Fg.÷8”Íåó÷¼=€õàp_]\8yldÿþÙÙÉÉÓöÐýüÃÈ<æ_¥·'™©„Žå~qÉ­ó`4Ÿ›ÿ91åe¨ƒJå' +¶]@E°Ë^y²~`0öz¬M–ìáAó]v\%;xðÄÉÅ%¾à_ wÛ†›ùOÂÿ6 }0Ɉ`(à§Ÿ €Ç§±~ÇÉnÌ`gB+-oƒ P€6p[·Ê”O­LW„ÿ(º©­Æˆñÿ#aªTxÀ´j ì²Åp\«YÍ^ÉVZv§‚ Ÿ%~ºšU=BF['KÏ4;Ï\U\i[ó¿áµB?ÀññÌA€ ”¹ÚªeZ†ò¾Ü­Ï~– Õ¡•Çi5UÅUñ&#ÊYå¯×x˜!žBDrqCLçÛqòíã®LŸÓï!Ç&!bû àÇ?þ£X€÷ø´Ç8úŸ3à¿ði_ +¨ŸšlÍÀÔÞÁ [ RmÉÒøÌõfß½½?­øÃ?úÏBÁ? +À¢|(¤nV–c‹ÊäÅBpÄS_@/ÿ«ùSY©µê‚ÏX-Ïk…VVULYq]­€®£Z9ÃøiTáTÞýÊy˜Öï`úÚùçÁãGÏ­^”Îàÿ…k¯ý/"Âÿ‰üýß›ðC½ðƒ¼óöÿ ðÄÇžçÆ0Ô?wñœÏ ŽÞ}3ØÜ†¤nÎ ìÅQ> [}ÿ`Çü[µ÷èàbïß öÿÐþËÌÿÿÏòþ‘nM%e‘Q4^ÆŽÚQ€ Àñÿ=(B~SÜìß+úólQ°`·AÜ @XgMúSÅ +Œ6!l w@øO¥ûŸŒ„Ø&viûJ§i ¶²rfÅú¦ZIšòú•Ì!UÌU|ìÖ u'qö¥qÀx :- I@‰¹U¶´îPK+€[TB @=V¸Aô[ö;YÛ¢¨2`´¯ÈöŒ†^p[L µ&èZZÍÎŽ|pD€•“«P€Øä/†0•Öm€Þ0²@'ú¹ÉÜËë 6."ÐÛ‡Ÿ2>R0šŸD;7 Û¢P5Ú°Æ÷Çø°×cé¯YÄÉüœÐ_è>;{Ü|áÿñãr¬åSçùÐû÷LÞ5É~ã átfZYŒu+9EK^´.y3¹7¼äVj£%J±ÀÂfä8Ïã´Çš5ìâ”j!b,%§¸öQÔUÉ‹×ý’ÿÙÜñÙÙ»Gî>~rñ1í&ߨ|½¼VîvÈݶáfàý“° `Dbûî=j#ÏnUÒH¿ód÷eßÄÿZoÈ6«YQxšÃí ˜–—@• ü§EvlTõBÓÆÖµÝ“Ýxª@+³Œ—¶,6!È&U[ç­â[4ÚÙ Ä[[-8ëT2 Žö¥ÎU:T«’áCÔ?Äàÿ«Žl €,#®W| òJ»ùøÕ·lámõX³rÆj$ºN¡›ê"t¨vÁ +è;°»ÝDW½uofÚZóÏÀÃÿ㟿õÎ;+¼Gø  *Àþú¾àM(¢Oœ» Ã™]¸ ŸL¼X0˜ßb¾U»ùdÍg¾`›ß‹óo€ÿ§!¿·ü‘·Ð`1'ß•à V4Çÿ˜4qèè¡#GŽì `@p0À#ÄÄ6LØ1€&ZÖಯ Æð›Ç½Ú±`wGP,ÁÊ­ +€y`ú+¬ômH)Œ…Ýü,îN¦ö7æ´"S Ú‡.‡Ïî +€ÇÔª(€¾@0àÀšÀ,­ôÇí¢¤bo#E¶)núV þS +€1€Xû¯·~·@¦Æöìñ^PoЯñÈV³³û?8 |š ¬S@ꋤ›7ì·À|€>åq“ºpxF"ñ v!Èì±f>Š3]D‚ C¶†@@¹Ïö©ùZ1WÐa*Œ¸ÉÈÝP€cxÿ³ÇŽ3pü$;ößñ¾‘‘wiÑ€L®7Y»YqÇ“þw0ÎKºBq~fFÞyqQ%×F•ÜR?ÂQVD³“Åîd®bí¶ÉËkÿ\Щäv `'OP˜¹cÇT´;¹¸dÄgqѨ‚,€ÜmnŽÞ? +Á€ã¼aİÏbÎò@zSΞÆïúöû²ogjÍ ŒŽÁ¼Ž³šC¸Ù=g£Ïj•e:JÕ¦+À¿ðŸ Tð_‰mð ÙÜg³´LÃZ¬Ôùãö€8P›d( l‡ !©&%æ¾¶ŽA[€„ *zn“VêCbb€&€ñ±äi€|_)@?¥Å¨¢1²? +‡ +·–¶O –=×W({pòƒ#ùYœkì¤ÀÑÆàwG™%Ìžž³ùÀè‡ 6 àdŸZ‰¨8†æö”=\ì&_´óÅ(jaQ…øg@¢ð!(-Í»KJf@v÷ÁYu½…«¿tò ðÿûïØ¿ÿÀÒ0D1èä}.ÀÐ*¹³€ÅHoÏ-.ºCýyöh‰ÓÆÎlÑÃÅMo8àa t!Zu €®=ú’ËF¸n/Ìlnöî‘Ìžé!:¯²@î¶ 7 ñqüÝýÀ½GÏÚ¾@P +x'ÈxÛm9`ª›§úë3† `SC hH |öñ_IL¨gTÈ´¨«3bšÙªë¦jϨ*TµØTú:MMÍU¿à†hEçix¦sõ“¶t‚º| ª¦L53žæªöXÎ.O‹Ó +¾?iƒj‰uÆà À í%ÐZygÛŒºf&G¦*úÃePGí:œj'S.^­é\HÌ(ŸŸ[Ì6ø~f¤êÏôùÞí}AøOÖà +À +ûÿßï^HŠ_‚`ß_"w:ú‹GŽèÍ듘ÀH. +2¼à- +@b™¸ÀÀ @:ÀñßGÑ”ÄÄM ­ýy¡«Ø»SxÎä`¥Ù®­X d VîN\ÐMè `»‘Y?Ë€€®&@ À€ÐJ€:…ë+¢IúHšR +©b –Žˆ€ÿïÍl«ÀïÉ/+šôÃ@`/½|üýmV 芀ì/¸`(êg  Xx8ÆÿyÆÞ)Øðl`>êiŠ{ìÈ)ŒL„ÿ…bòa€hÖ⾤’S¼v=vþÝÖJ¹’ùÑ´ùÏ +è…ÿòð›=&øŸ=¨ÇŽåúÞÇþ‘Ù#ò³1JïOà!ó<(t+ð˜?ÌJ.ô^@k±[Œff".ä z‚ýˆÁèJ_˜lqqim*ýcð€ÅÇÖEº¤Q ì„ÇMª˜"´D‹å"QKbänÛp3€þI˜;ýýÇÂ!½÷ŽÛ¸3««OÆ Q>¹ëÛïÝ;€ŒŽ + Uî5Úµ–nN%±8!««Ü¬b©Rþ[µÑ´z;ü«AS꺣qÌ øòq¦j,.»)ÊŠóekÍ,Ì£¥ºˆÎkùßnVÛ­úùºøÀùóÕiÓä2Ð@n: f›íJGèÞß“m4ÛzÓý¿²ÒPm ö7*gš"Ù +O`!ú‰ÂKÛ¨VÚª‡wεQ½2G!D¾~í9€k®üX Àÿß1Ж€'~ÃÐßðùÀf.|Ú¼c{'†`ªX5à<ëþa öffëïÕÞ·ÿîÈÚþÈð_ ö¦P+N²–¬`}ÀIÀóþ5ùEÃÿ£G +Ã^ŒîÝ»G¯=wî¹sï{e;Ä$¦?šã?ÀQF–Ä$½ÀrÌcÒ +d1 ¥òOíâqÜ€ß[UÌ‚À=–(lHvV°@œÄˆ'Ç +€a°‘Ž g Êgi' ‰PÆŒ±¾€ª‘(Ê«¯Èt—foŽó»@ßO¢P78ð©¯Lí¹‡^4\'~jf—dbè|p$š @€Q7¹É6‚2z°¬0/X—-êHp´ÍÏä¢%ÁºÀ3@{ ¤é€‚  ‘O0¶FM0/<]+ÍDk£¢$#r¡Á}Níêÿ‰ãZ8¡MP€ÙÙ“EÇÙƒát”?Æ1+:³yv/­ÃÃÃÅ£¢JÞUa1Û“*ùƒI³A·8YÜ,.òÜÁØ´$Dïñì!a¿µ°PôGfNox""tòC#³yžR,ó/ÄänÛp3ðþIØø!ùý²€T!Ê‚ðä³ÿÒƒ-àÈ?øNÜŠ”¡„ûo\•*Õ  BeÁýI5‚ y¨,TÔ9§,øÿÔ„Ú¡£þWTDožv¬Ö¢€JµRoñ8óà7y( H@K5Eá,ÔSò4äuži_­UZu«°ZTáæï‰îÈ=P¦bËW[UÒ7Aå#ªLÏ4•6ƒ4Ç¿R¹yP€XBE§TJªrˆ¦7šg*»Nãc»N㣣ã`nüµkÏ?ÿ5'ïîˆðw>1 Ým€t € +è›ûïq€bè'VÞ'ÌÀ} ¸j +õ¬¶È1!Ñ{³í½¾õ‡hÀî +@ý1+bb¾’²Æ +o{±¬×!Ø®ÙöÞ þß¹gÏl][Ò×fã Yú +ÀöCü¸€‡(²Oêo‚ ôÿL¢XúÁ6üÞ'$ˆ @GÀŸÑ? ÙWü~ò#c®hE0°])HeH= 0›¸§} Y¢XÑR1¦$ €û'hVãfº‡õîÇhÒï½7Û£;k\]t¶Ûb´†§ŠÊþ:­aø?)8O¤­\>´9ÑsôËó`{Ὲ€¼ê¨8‘È2ž'ð¿°Pìåï/ñ$ÝA[\,Û`iÂ5.—¯wr¿Ý3WÛt¿t?yò„ØzâDd­ÌæÿÉ$× ¤ßò4ø×¢9ñóù¥?”ÜŠþSr1™™ÓkVò¸Èœ—wr•Z¡c7´Ø63/ù?³(J®¢¯E3åuίœÈçõš½[ßí1åDl¡~g‹‹Žq·m3€þI˜kþôSzxä\¢¬¢Êø@@;Â~ü>Ûn§@¸Ã]½,€Š†;xäµöI„s‘€¸³A‚e±ÿoU‰2Ä9b5öŠŒì·¦T +­HÀ^­´ÚBüjµ ïŸïÎH“@&Á´Å´;í«Œ ¤Ú»ù9ycÕÚ4~ŸjŒqØJ¦® ¯´ëÄöµU6åñgU™ÂÚš­¬4šµ,- Ê;K€.´vF•¤ªi.ß¼'ÕÕV# 7÷ó‡[è€?¹öÜs_{Aà-±ÿÿ¿Ù‘~„ð7^ýõx ÀßðßÃÿ]°¶qMò­?h΃<þOmƒ§Å—&%³°@ö½™Ç0ÀúÖ·þçXp €×ÿá®1”)^J­˜% +€Ï‰°7¯#GŽ1€¡¯÷Ý Úïø› øßÐKS*ed¼`ß>»Ed:Ø·„÷ÿe + ­XÀÚB/ý{tPò'7³qì¯þ.€T/6$ +€¶' +Ö WS¸+S +€ +¢]i@‰I£T©}ª|}°UàjUŠ”€éÎåØz€ìŸ´e!AÈ¢x  ß `J àž) i'@H$[è +Ûg'Gößq 8ÑxÊâb{Xž³ÙfI +ňtóÄFóÞTt¡d +ÿ ¡ `‘Þô¥n9ÑÜŠkå.` 5[+Í,¬['òÖÕoäxÞ¿c/ ž½@>ìDabR •ÒJh{{Øz)`qÉç)¹æDäçO‹X»|_ù Jâ ˆÝâÄ|TNƒ¿L%_/—ÿ@¦²ÿª>zÑÅEyÿ(dr’‚àC'ÒqX¹Û6Ü ¼–4ýëCh£ù¾Qz°ïÉgŸýu¹Ä4ÜLø$Ú§ ë&Œ2 @u`©:C0ã¡zï"Ôcÿ}ÿ_yTˆÐmkÊÒkÅš@y a(àJ•'ÖZ"Ê«EŧÓ)±?ÛRîo;¯¦V§ÉãÚ-€*âó8]xxYjÕ™Œ*Ûªhñ}:¥ð¥i +@çÌ™•FíŒ2lÔ¦(¯@…pj;UšŽû¡r´VÉa–u˜fc±paõ ÀµçŸCxíMï@÷?ºˆÐ øµß´q üûÏÁ߆ÐëÈè&K2À.-Ø¢}X:pÕØ Ú:sö¾G{ßûgK¡@K6 €ÀN +L% ø[Ðß×éÀ +øuÀ€C6¦+bà?À´â  Ïm¸Ðìþ÷‰2˜Ý'²<ºOG’‹)hÌÇï#g7ž.ÁÓÓ +€yÑ}@Á?Nœï–þ,û§¿wüïǸаLí^Õß6À ÙWôW&—}Àbœ@œƒö½OŠe줸þïb™8 ¥Ø‡)¨-ÿÏ[&ë/4Ž„SBÙîÏ!œÌޱO«à„ÌŠò$|ãÈïVˆJ‡s‚QàmÁرA3“Üõ^ÐNüè%÷£û•_@oHÐ¥%ÝBéNäg~øýw€ N\I' í¦ärò's<ÝW‹‰0`%üúa'J¥ö|Bf/yØ?·gaA%/Nø +û߇N‰¹¨¼7nxüâ¯"²”£™ÐÉ@F@ŽfŠƒÇŽ‹  3@ÜÈݶáfàý“0‡!>¨¿°ñ ¬~åÙKŸÿÔÑ̡̑éé#Gó»š<êÀ€‹6€îßaµ†i)kÿþ?À>æ_­œX«ÖPµ3‚Ù)Õ˜uyçrhxi§A @ÝÆÖ±6âP­Á`Àµ:ùóXyBuZbkŸk‰Lë ˆ†0½è¥ØiÕåûëÀìJ­€»Õ¨hå AJÞzŠ›¤OÕ½-’ò÷líŒá~vŠ9Ù³J"öï4ÉDL¸¸jàÚó_{îëøÃþðÇÿ›õ0þÿõÛo¿ñÆŸ½ö*OüØÇ.œ{š‚ÀŸ7n±0-Æ~Ð]Ÿà»à.-þ¨>…-¶ÌÞ³½oÿHÒ ‰€˜ýÁ7¿ùÍÍn~ eIáÌèþg¤Å®Ízþâ¡ 0ækn¼‰ÿ®ð›°oïhLîï¡Ú¢EMz üþß—â¦5hŠmü>ý=ÀHšô_²¿»Y¥OXõ÷­wVðóc€õD@PìTþ/VB ++W ÊÊ1? OH®§Õ{ˆ˜@µ°U¡HýßËL@Ð mào +À¨?(²ÿw²¨ pÿàÿŸ >Ȩ;¾+FJ™vÊ…ŽŸÆ'M°P~ôdÎ,GBì‚¥â脤QaòtÄ8–›æóÂÌnwM¬`í[댫ãöh®(>An'ó³#ï¿@’ÑŒ*«¨x˜@~ Ä|{Œâ²yNF¹)¾IýgòÍG(]Çeôý/æ¹ÄÍO() )Þì¡# E{Ž‘¼þòòZ—a~eÑâ81ûÑ÷zlöFö‡â‹¸ô•†r·m¸>ÿ$Ìá_Úøø}öTÀ{÷Þ{äìgØ÷ä¯ÿË__?â +Àîü#X½€Å8¯z@ ÀEÆ(“³8€Ú¯ÕšÎ¸oe[ð_0ªÚO;̪A#š²tœr˜G——¯Õ`,`†¦BMšÊÕˆлÝRug–Çd3õq{€EeÎ_ ¢^±ò8ÿš®Ð†ÐâT“§¼.4Π¢©bd$À©¸rj üð7 +€õ¸@À…?¹öÂóÏAÞx @øïºý€Løº+ ø3룿Ìy¼d›ÂÌÀÎÁ?¬m±~ª°{§DïÆFòQïw7zz›ýîï²ð»/ëýöâlH9`P”~ å™Ö¤ÆØ¢Ðød|áýÞ=ÄüßI0 Àà_¯ûîÝkkb÷™¢3€»/½•Û,ÍØ[èàÿ|°z¬ø +fÁ*Àÿn€3mÞî ô®¨„2€Ô) ÒªÄ‰¶)˜ +·UȘþïiúšÀªªH€@?Q4–f€Üà”`Q´pâØÝû?x`–¾ëÂѰÙ[Òc +' +ÐÛÑ£øÿJ·`n:œ‹º:] }=Àrb!bþþbW³Å²Fºˆ‡kÞ¥}sÝõôµµÅ™hm‰ÁxTšcÞ‚Z2$ô„ºè2ß39ËÖ€ÞKmk1Ê[CbZs4ÖYe:Ø €­)[º„’û…`§yÆÖqêa]­-ÁVÊݸ±îýÖ"`Q§û¥Ù€‘Y•Š>:k(z¹Û6Ü ¼oÅñ7søW¤j6lüèQkxêÙ_ÿõKÎê:$ @?ÌhUç1û;04€f=k÷àxœUmáÐŽY€’ÑÐ ÁAºá?÷3xoœêš6,Óißäÿ1¯ùOÙª}òäó([ Ï—Ó¤=MÁ²‘~Ë6Õê­*ælÊW5ƒëd:új«^5Ph¯4²íF[Kgg<`”™ê`Õ°JÁ++" d£ZU—O»„ªÇ]Í Þ¼ýçã{GïŸ>€¯Ó ðÚµ¯ûÃPÌ|+¡ àcûô§…üçýô& Xt?cçÃ, ÀÐ5eae+ÌþìýïKÕ_}óÊ;1ûát» ”g°pZæà= Qy7í|@ àazéc»°wŸà>f¬M(ÈAÐÜ,…ø,êTÌ xÿEâEÛ¥ü,ÿdó¡í +€»¦`~'€N€(> ›2Mb´d1´0à Æüt €Î9H€_# +@€èÿÎfþ?ÄŒþª€R +ÀÂ.æ -‹º'fgG>ø…Wò¢=Ž>¦Àfþ¾ã¨> HÛ…gÖ/¾tyfÎzñ‡ já¶tõ¨0Q¤×µ0`@„oV”3­þùË¢××nD¹¥ÄÕ)͉Yb’H‡á¥›'üõzmóŒèV`%ë͘Ù>º²"úb +;;—ûòu;“•yqÁÆr³|l%*MxÄŸ®BE)ŒñeX‡Êrù÷7 ¯tg¢â¦/óø1š><{?íñªÊ€k¬  +¶ª¾jfUaázA0T_h×¹´¾Ü@×'Æe…¾ ¹ÿt1p·Ë®P¥QÙÏPéB*xÿV%êcŠâïjçûˆ¿e}ÏèXh”yâœøü ×^{~€&XLà‡<(< ðë<øcŒû‡ + Èg1–XtdLM4˜ÃÌyN™+©­aq Ý{¶÷íß¿ÿCzïÿÇöùˆfòl>´ÿÀþÌh&; %åö§Ý´Î5ñò0?­=tèƒb>p§^î±õ€ˆx €@_÷Š% +1î4ò'6°•Þ6i¯_ËÉŠg¢ ÷Ùý¶&fäÅì}v´¾ƒÀ½¶“P›p`ØmzXÀV V +€xñö}££ã‡øb-¼¢o–&¥ü´ð_¶UÐgÒ `*€ÍƒÍœ\i¸¿£¾€–n­é}j£Üè„Ã"ëþDGM9ù! €Dò°µ‰Ì{7@ˆƒX€ó>ô¡è6{X°¾´¸x=z g9Qr‡v•!òè7•ÕJî}8£ò+a±ØËå¢ÞOG-,Ø3m˜RùõÐx1‘WÉiÈ–BÉÅâïf©-®¯½R.¯}sm&z™ÿE‹K‹6  c þ¢ïA_ ÌÄó wÛ†›£÷Mí©§.éVv4‡ÿXÿõyÄ€ÕgŸ}ö‹(GÈš„õ÷Ûç†ýFD¬f ý­b££YùDÕËú @‹õÑBµOš ü÷ +#åÿÛm;æÉñíe•ñ©lujyJÜ@t`¬RË´*ò5TŸµ*rÁ™¯Ñ„P Õª"rù•Š'òô>ÕtâžDœe *þÿø˜ê‰jvªvEU ÎP€y2<@<À¬P6šo­yÁ»À*gTi±¨2eDnbçc¼ßö²šuú¬À ðšðÿÚµ×xp¢hþÃÊÿÿÑ€ðÄÇ.~ZàîâEýßàÿœéŸpPK ôÒíê;þ›~º&ŒßBJ¶ ´kd.Çßc *€7î hß#ßÚÿE¼ `› ôþïÛàÓûFí`È€C?͆z[bܵÍ:ܦ(AJ=Ðöq˜Ä€`f ¿xˆ÷Q–01rpH‹ °­Àð?V2⨃ +ÎyüæVM)Ú0 hwµfõƒŒ’êt§&£M*º +•à¿.$¾FÂe÷³l9 óOÂÀ?Qh íb‹<ZÉòÇòœeÁ'O·娤nĈú¥¾¬Ïbñ´Ò”yðõîÒFqæT´±~ýz¹»V¶gäZ4ö »]ð¾«)7YØÔâRÔ][êöÖØ¬ü¢ðÔýbñztc­÷­Í÷ÇÝÜÆËBe!©Üèc³³<åO¨«OÕãÇ,ÜOS~a±Ü›™·²ZÑÉê1å™*¹ 7 Omµ’ëêT¹íݵn¯ôÐ\´¾±f+]»j},ñ¨‚TÉ{ݹ‰Â†U¤µ¨Ü둎ü‚ç—¢µîÚ+›ÿw•|í[ ±¨’ëL²ÇgÎæóbDž”±r·m¸>ßÜžúBXjÿº¥õÁKKûî;ú‰ D¢\ºpöÈxf|úH&söhõìY½Žò±u~¶Ñˆ€€1€åzدZ%ÅpBꪮê ûؘ@ŸÊÂ2‹!לѾë~?#ð¡Y@Çø-ÈáVÛX[-AWHh‹ñÒOß‚ûuˆ€¨!sÀp?­¼`™ÁØž=wÀÙ€$IB €œõ€Ø[»Ot€Í‰ÄðÙ7–ý0þïC)ߢ8{1ÌøƒÿÆ~‘]‚|VÄr¼ƒCÚDÂ˃1F@œ—€:—%ߪQ¬|`*$Í'|u{ M„Nè›·A–‚ùÅúeɰù§cº‰©N¶+½›Øæÿc£ûe!p±—Ÿ½ïÀˆ@³ôe¤íùRÔ}Q€¸±¹¹¡Y¯[*E¥Ò|¡øh1ºE—O—„‹/m¹AWí›9¥Í @côeæv•%¨‚ó‰ùS÷h­&ëøè˦ˆU(sL©¿µ±^VÆÝèTôÒæÆúKBèè¤ òsBxn Çò'Žç¾¾6;{2ÊONñ½pá ºþÃäý÷,`?fsñ¶HÐÇX-… aé§o`þì§WlY×â×§;x€ÐS@ †Š{ÈoN<íû„àúè-[bö +Þ»oÔú°üs·\ùØiOÏMˆé[ô)Û…#,:@;Ñ+lÄ ÆÁx`^höàZ¸>»®>Ø6R°Í¸"®„Ž |nñð.;Et ‡ ÿ‰™¼SäI bB""á›ÝÉìßþÓôÿÍt#'ãô€ÜMm† ›8°ÿ}àƒ“wMLNNè=3c»Ð$›Ô²-°yæðäa_6#].÷+3¥S9ëh§C,—;üs3¹ÃÊ<å›û–Ë +:”º¿Ä¢¶Mª@#îºëÀ]ؿ´ïŽêçúà¬ìßwàÀ÷Qò‰I<”\GzÙÃYká!Í⢳ÕÒå~åðýÿôTîÔ)–×ÏÍ|ñ¡™Ÿ;œ›‰3ß©äyJ>W(žšPÁçæ”âôUNÜ5y—Š}€‹V²BÿÐr·m¸ Æ/ Ë´°úÔêW/œåIò2ÃßÎG<ùû}°ïÞ£¡९ÏŒAˆÁ~‡ùQA@lÖÀ€à&§c@±Xýí³ÿ…Ø×c1ƒ:2‰55M_ómÈoÆ6ÛÎG¬ôöÙ€˜í0 +%ڢЎίò÷á_o÷ðY7`_Ô1¨¾˜X¼ »Ï c4ºª„$ßëÎ +W¯oL”Ét“Ñ{õý¦N¯ ´W¡[,ÀòOѼ V¸µÇnÿ Ög…^söØ·ÿÀ]“¹ÙÉÉYà\žnóºPÍRæ +sBo— |Ó‘¾knîÔ)!ŸlÞ¦SZÎú¹™Bát?ØL € –AÀ8!¥mÒâ©Biæçgr‘Z¬íBÑIaû„Ð_%ñeþsýŸ >øvPÉgí\*Μ¡y(>óùûCɹ*+¹suΊ®rÏ«ä€ø©‰‰’J>£’Çh/Ó1“:0AoÏÛK®d³úzŠ©äl ?;óÀä]wÝ¥’ï×WkÀš}À,€Ümn}ßaº¸ú â[½ôÖ7f!•Oû¦ýü×瑳ʂ&€K_±^‡L8;íš¿ ÿ[æÀn£+íÎ 0ThdG…ÇÍúÎ ÀÇ ÙŽÿSÿ[bžw-›=c€¨½êx¢dXÖî¨0šW3uÁ4Ž¿r³('óÙAõ–(3oîlµkÓÕª^Õº*ˆQóÿEêôâW*•Çog›?nO³ªgÈé*´ýWš $ë`EWÙåÿOyüâ.¶UòßúÚ#0&`#¢ðªÀÛbI€^†ÿï¼#üw†ÿ‘ÿúC¬~4PΛ¶*`jm²öKÿ-áfa‰3§K™^aY ÀH€] +€9§¦,3ѽŒYÓˆ`ÃŽ +@ˆ°›„6z2ÈÔc®ûÎ1,‚˜a“ܼ{_ÁˆøKV-cÍÈq@0Ä@3cèÖÀ%2ÄAH›€>ûÂJ ÏZç»°rú© ÁþM°«O}Û2êÜIß\Z°ÜdÊÖ_¾b ?ü0€QÀÆïlüîMÞÝèQú³GQ”›<022ûË õûv黸H¬Œ+M·4SÈÏ£W¾õJ¯[ÔaÝÞÆZ—¦ýr·ûr¯×{y£·f‡•Šó‡só½îåM{:p¤¤¡u K“ñsÊÎøh­èOé#ÑæÆ+½âáS…âåßÚ¸ühñQRD8lD]¥p¶X˜åIÀGþ‡»TäÉÙ»~a…=ŠåyÚðÃg9ÒÙ¢h£tÊ.ÜØüÖz©棨·‰Bß}LC‘ß¼Ñ[[Ó”\¢x>ܱN1?ñ(‘ )ÐÒÝëö®_ï®­—»kk7þõKJ°¤Â—fæ~Ç¢ S%Wy, +tš¹íìRr]‚í*F7.ÏDœ70l*æa³< Àšgd‚xßmpsKcø¶‰æâ‹@ø“—V?>-o^ @ÀÌi@l&ö§Œq +èÒ³< @`8ž9B/“Ðü·Íyô­ б(@Ó#3š©íÂÐ ýcüϤð_è¥ÓnЕ©–=Ólº0m]¨¢ðäР4PÀç hÉa: + . +P¯Õ[í:£® êOO™Ù¢œyüñvÆ €)FR +À™DhèãÙÊ”(@Àù¡p~¨Þ±gtÔš‚ð| o¿åýÌ ÿû +À×!û€|Úž0øß®¤àô½X Ï[§àaipÛpKޱä~Ll¬Ñ5PØ4ú[{yù\þ. . ODÆŽÃ~{é#àÿVÀœã„˜ ØÓ:|@ë¦ +Øõ?˜)³­8üƒ½¨§Ù?İg›úé `>ÌËGÙ‡´˜/Cb Áý”VYt fû ÿuýfñ°“0~ï¨o[€ødÊ+iÐ,@òOÛbù&ɘ¹ÄOÞeÛ^ÙF ò>q‹Öñ]¶àÏÑ-•-Àí0ÁêRy}‘|×x¦¶t»Å™~–[l8J[/<½{óEN@èžt\\ì]Ÿ)ÙXA”ÖÕÞF'À~Ù(€YþøñÙãÇŽŸ8ùÀd!:q¢x‚SQ™a°Ù¢–~ ï²€J®B ”¼ÇLìÅJ¾Ø-—r…W”&MÈ,Ä󛩨/áù«è‘ +観l>P´'[É­¼¿”Ï©¨#t8Q°·p›ÜÜ>sa·ÉÀç!Ÿ1 ~§±]ò»ãß§‡Ž„¸K—žýÊêYÆÈLgŽVi쯊Lûìh5¬’º 0€•vË)€3€fÍ­‹¤€;̱ÀðßBüþ;üƒ°šxøN«ÕÊŽf”H@­T"™¸ À-¤g:—)òù›Myþ¡  Úúœ•‚Vª°“PLRP‚ppK +!»M£wBŽž[E à9€W_ãM àðÎÞz;M.\üÌ>í4ì7ôçíõ{b1|¦A4mö» t|ð$/è³T¼d“ýÁXêgäÛãâÛ¦Xýå†ûƒ +€¡­,‰0 ÍÙ²€$@TãõÚ³h¯ÇuwÐÛjô`f+‡Dêð_[ôöu4ÙÇV@W 3wßПwØeË,lqÁÁþ840Á™5¸ÿüóeì»w¯5kôñ?|«ƒ +€+Þ P¼)ôÔ‘æº ùŠ/@þ©[P` ›Ø aÕ"©8  ²¾uÖá,F Ê€PƯ6:X²ôÆRpt `FË×ËÑ"^÷èp¡—†Má^j}àQHJ¯ü|¡›çi}Ú¼ Üн’€PÆðlÆ@~–>2î˜A”›‹`ÆË&ÆBÑtu2•¼°F1M¼Ðn+yàÝÅEÆð½®]”¼·4“ÛŒ jfã÷…åy‰ÐŸ!òù¨Ÿ·’SV}O3ó]£<îœeö˜&|ИËI}» ¶@î¶ 7aüð ÀÚ>iõÂôÙ O +ˇ+}ç߸ó°úëŒô Æ@¨®NW>zÖg0_ÕÝÀÝ@LH1\ó CšÊê­¡ ÀX §úø¥ó¥vG ÛhtMqŒV“4%H)dè +€Š’ÄØY ¬QtSðÿ³Ìo˜^®Žïp†€ÐÇÐýo \Js‹1»Û¨<Ò±#G?n +ÀµW¯=+€¿ýá~ÈÛý€ï¼ ¸vík¿ùÑ}ìâ¹'>#¿ŸØwüȼ‚ßÅBÍïC +l6ÆÖ_M#tŠÑ[o} n ¶=,m[ü¯Úœs÷A `îöÛËçÿ‚Aï ŽøëÇO´At•»õHbKá½) £Ö ¸iN3 ˆÀØk (òô͸›ê/ZW‹ T l6þqþÍ÷ãðFÐn!¯©Û»8Ý1ZÀsŸ ˆx¡0]^|#üÞý/`‹ ÂÝÇ0öÕ‰`ÜJ&)³/$àñOßú +€=0÷&&Ë/wgïÊ ° +€   °Ü˜›,tyê\eF¸Æ0ºTrÅ Ìÿ_*G½îL~“#=²+èýæô®çžÏÏ—vjGE{î®JàÉIY,â:“Üq_žÿ쉓ºÄ|q­—ŸŒlpAŒ²PôÔi)ßf~"½ÜíÚcûŽOÛ—¼èKåÅ@BÉ×z¹¹î#áp3åhÔEÅ8IÛ>EÑ'ÃÙã‹×Kî1gåôû,Dhé¨5ñ»Å Ñ@DðÝ’ˆd­³_m¨à¿Éÿ†ÿÿô-þu¨ ñË`gv;VjÖ Ðbú 0 +i5#øVnЇÊÁ°dòí¯ü|µn1(vv½\ ß]e¯ÜŒT¤cT@mû *{öŒÞ›9zÖbþ„§¹wÀýwûÛü­@üª)ú#œû´Ž£à€yý¾ƒ -û–¸W7`¶*ô5D6d6õÓôßa“L a9¤Ž_áÃéC¼®W(PbV–°ì¦5ù‡÷øÇ +X8 X?áXxÀÎ +h`ÐBg´!Œ`/RèÝÖߦ%°зg7݇6€ç·EÀ‘wôû}Ñ}~WÂKPÞKTxÁ¾Œ¢% + `tïÍcxlˆ +Ég#(„€ûTˆää–µ½âïDóÇ?ãadb'¯7Ÿhï öŠ'EÎÚ8€†T‰±öÀus…] p~Dà‰cÌv}–µ‘5{ I—Ö»3÷ãsÿß”uyõóæBÛw8ƒà”™²Ù˜?\܈,ÎÎün{8‘^©²àú”O–u¹Érr&,ô‡jxÉ7æ&æ6qï!6Vrö fà»OX4íâz9—(¹²Kø„iVp}jY[DOŒÓ¨äE$eÈšLirùü¬= øC##ùüƒ<Òù0LänÛp ð=Ô`W¿xéóŽ~|õÒ“4ÄÈx@°‹ÔcámðÏRB~ýÙK_øÔ‘ŒÐÿHæˆüÿi{Ëç×§¯°nOÑÇÍŒˆ˜` +€/ d(@’Š 0™¡¿¬ÿ £ùÿ†ÿzÿæø‹4é§½B‹ÀÖ€¤À'뉠­[€–)©€pöju§^g¶(ºŠ€3!À€[‹Hãý¶ÉªÖ#ÓGàY/$ +ÀwˆpßÿoÍÞé+Þpî‰ ¢ ®0¯×oÅäËÅ6¼á 6_Õçûîx¿¡sßXñ·!öûm!žxÙ;^ç=¸+,%‹ƒóP ˜¬lUØA©=J‘9N0]å ‰ˆh°ÙN +€Å@ /u0@@8ª™›cž‹Ú‘lq Ÿ@8ŸìT¾ò­C À€   ?Ÿ_0O(à/ý¿@ÍpFAÐõ…£U lØVë¼á¥«Ð•pu7Wd*ö¨Åèû¢ÿäÞÑQy‘`–ä¯afýFAš›O€‘³L?à˜Ð + +`ϲ?áÛ`œÐ °ÜÈMä4gø~S„èþh^¼i­Ú"˜ªÕî—gæb$4s->¬›b9I˜> òô±åk,ñݹÃ9â m»Œ’C¬äº t°¦¥ÅµîŒ+l¦,”PW׿–ù@](¹•0!LÑÄßSØ*;žŸÍÑb1²ÿó³0Ûd—År·m¸0ßÙL àÉK«ªŸ”#ÏhÀñ·*æùàe¢èøï:è +À…ì¡ÌHdµÍ4ï³ú´Ÿu´6—½ô@H@%+X 0€º¥Ü‘€ÿž¡Þà€óÿdU€¶wJ Sâbuë#H@ˆ°&bPâ?»lx €uÚ ÀblÈÁw£ˆ^íf£Ô­™#Gòs_g$@ïè +ÀŒ8þÃÞþÎoü—D8§¿Àv³j=šaAÐIW@¯ûm0_6ÔMÌ‘ÖÐݰù}‰ùz²#žk&ã3Þaf+aƒ}¼?l N!ìãýÄ4órô'Lö—úŽCc˜\ûAÀ‹ˆ%m‡ú8ÆBÀ6 Hh»„ý–ëã¼yýÊÈrÛÃX€Ì¤‡r]™­¦ü~3VÃï‹ý"…úù”ÀèÆ(fñ·¹5 ’«7À9“=  Š-fÀøgbÄRS8?t"•o ›AðF€“'NĨæõ‚ øÑF +ò'cÑ{Q¶=05¤”Éÿ§ÞÌœûÑïÁ}P§4EB×qÚdgŒ‰º…ŠÝrT†2 Æ'yPî´=ˆâ’çqÅ‹/ó¹âÌ×-²Ï-YxX<¥ UÈDwNÐÌ6yá2å þSrø­ä0J€~ÉS@%wüÏçy¤0¤BWÁžžĵ³rÒŠ=7 ài€<ÌÈRÑòâ\é6¸¹øÞň¼téÒ…é š}‘öì¢îggN°T7À¯\úÂ…#B¨±Ì¡qsúw´×㲘 Ä  b#çkG¬ذ;1P• cýßðÿ™N‡?¶Z¦ÖІÿås÷rŠÇ |®z7@k€5x @_pÀpÃzl‰€Qpº]‹)·xû;MªcGGU³äGÁÿÄPÞài?€ýo™ÿÿ–+×®=ðħÏ=±“û/ó +~Àð ìÜ+ˆa••Û-€sßöÇ;âýšë3Öô“Uß–õûxœ_üq3 ¸ÿÜÌqŸ12Ј{ÜÙWdpg©¹Öú1—BÀd|zab_ØÀ^Ìx€=M´'¡.-hNƒ\³ +€3˜ði¦«±½Dpq¶"ÔO¶`šÌð_—ÂÚ7`Û|/Üé|w¦ì½÷>SâSèRíjm +ÿlltÔ<×[0RE‹kQ~.MŽœ¤]íµYèjp% L@Þ²`´…6ü`æU (ÑkÆÊåh¦pÙ’„ãµ7,˜ÅÏŒ +“ 4µÈžh~&Z³qôíCReâ‰gIâ.'NÊ^X,çgó/ær×i0phO¤0pY*LÌ—ìŠôö$ qÉ£Eq`ºœr7Êå"ºú%ÖgX¡ø`Ì€rJN‚,*&HÒó'Pd +ü?@ò£pY¹Û6Ü|±‹W Á/ø)Íìy@Þ°M0à§& ð/#Ðö+ÊÁ}ÔL@ûL0dµ°bš½p°Ä/ ÀD€€ðß2Ó§á¿«ÿøÿ–V£ @p‹&ü»/>`eØ¢XBùì® Ä´ëÓF–+U±…! +@f0€¬·Ç¼k€/w•w… ÿ81ÖðêkÞ €ðަ·Þyë;o‡€W_½ö¼+ ÿ ÿÜÇÓæø™U½Õöaüü›"¾,Ùÿ¾°5ª5 k>ù̼úÀmy<³Ä¶wË+dHž–žFû~aƒÙ¢_O¢¸8îà/äLÇ€vI €kÆ8ÜÌÐ0`ó!ï1g‹< »»/tpDÔ'øO'‹#Ù'ЇZø,luS¡ ò7ØOÐ_ †ä<((i³}BäÀúŸ²> í‚KâÛà A0|¯ÛbtãNôï‰c€‹ÓÛ_fa øgd†ì}?ødXTÞxp6WèNNž¤w½0Kào +"ó@–…t× ¥Ó!\/Àhl‹KÖüŽX®•ÅhI~tX摹†ëauùÈ=HéX‚£ Q‘Ç銟íôËËNZôÚÅ“³¹üF~¦×]ð«Ø[j7•T‡ôôÐ)l±¨è]­ärà× ]ž$Ißû·b„r¨ì!þ_ogQq²´FL™É!àCûÿÀl1zl±¬)€Ümn¾w6öÅK—.}ÒÀmÝl‹`A€¼øÝ7~äÆžZ½ô//=y ÀÑñ©á +(ÞÀ¸Ì@™X@·o¥M€ nÔš  lgòÿqÿ=þŸ¡pÿåîð—!X àã)üo4ê> '‰{ôc´QK S bâq>çï£ `z°%ÀzdcvQÞU €(@Êãß:á\¡È~œÀçxàkº€þîûCÞzûM‚¯]{Îc>Mä@ úÝäL´ô æ Kei@0K&^¾`мe²¨}$<À–ô‘¬kÅÑßVìåS|ˆÈ @¿­ÚÂû)°GÊÊÄ®'Qð‚1À_–Šˆù±Þžmð¿³`Ðað>ƒNeŽ& #_0ÓXMè'Ð!ñÇ÷cØ“¶#4²Ês!,aÖ¹A¦®+åä'RÈÂRY7ÀC‡~žéÅE˜pK14x €¾:ˆ€øT[ÌO øgcrl}Ÿ›M`õRo1?—/ö&GŠ>\ ›tnÜ1xMü§7}i »Ì<¥ Ô€ŒçìÒ pFÀ”L£(ÈÌS{0¤[û…¤Qi2ÂV½ŒŽíôYp£%¬ûm›…¹žu¾tÔ)ÙüIÁ8ž~·49o¥a»Ÿiž’“³@†ÀZ4“‹JAèßZr}Ú1gûˆ_ÄlP#òŽ¢IÛ(~E!)`AßÏct¤(—ÈݶáÐ{ˆ9þ¯>uéÒêù¾à¶µ À€¾9KwBkøŠ€jïØøØúú48«ø'—90Ðx7…¸D°\˜&"À6 ¼þ2ÃÿgþñŸÓè¸ö +ãïÇøâ ±)1[{8^;d§bâqÚ °¬€›÷ çx @pô‡šÅŒOÓpôœ€çBÀ›o½…ç à-ÙwÞ¤àëJõÕa +À¹ O8øø°Å*c•1Ó; ªÏ}V’­̸èµ Üf¾¶$“^ö¨wéã8Ò‡£Œ2Ør8Ïö€¸œf¶à¸ßWRž¯pˆ?ù( ·W\Á@\6ºwTì÷^¶ ÿÓçñ ¹@“? À2³[GŸîAcù²´È>`¿&þ¿È€/'àÈ÷C-GâB3 Ý’¥oÔûÄ8(‘ˆ*rØ,Îò&’yF€^\¬¾ÀØP¼­ÃÌKÆ—‡ï?ª-v5I¬¡ ÕcÀh¹ïgK„htt»ù„u» Ô|wrä8£Õ¾Ê÷íÔðzk½ÒÄéž ÎGíqÏ×Bà{&Ø#µ”Ê–  ¨€ÑÝè30w ýÎ!¢2±|Êf~¢T&'ñÑuôÍ“ƒþØb¹ ÆÎor½ëaSJ2­MÂÀzÑC<ƒ04Ö£ük™H†µnh¹P™­;à¢)^òxt¢”ékÑ9m€_]º +ÆóµPš EA¿5ýìà­ï|çÍ?ÿÓ×þãµkÏ}õ ‹ð€[@¨Ø·šcz@Ó¤®ca 4`À™éÓbÄöí¶5L|ø‹=aÅgJd ™ðŒúy²`Óv ÿ©·+©g€é±¹¢ñ7ß<hˆ#Ïv!ëÞ½!ÿ¾)çp0išàšÁ¿a(æŽ;P.¨O`Xg!TÀ |3v[Q0ãÚl/í·“îÜ™ôÐã£(úðëÞ¶!¶}tM´‹r «í²üe¥$Á[@Ì”+Lbß>œ>t‘Æâ/@ÌG§f’é8ûÎŒÊpšC¨F’¼°¸† Pü³1C´[´5a&]š¼köàÁ»gØÂ}f F½âD$ê‡-…I+[È bûgwi)*÷.ÏÌ™ŒN¤ÜV*š͇h}!¿1ÚëK¾ÌôKBúÿ ^HÉó…hn&Zcü1å#x/:Uuñ’ÿŒ.ÀÎãÿSrNJÞÍåà<~i[ŒR +3þeÖc¦@f±qòäƒù“'ŽÛ(Þec<²øH¹Û6ÜÔ1CzWÎZàS€wˆ§´úO >P,“KÏ^zú¢ÅÜ0ÇØ,,Ú¬#L® €ì @PËx=Ö ¬ƒÈÖ¾ZCØxò—Ï2%d€±©ýGüÊÜéVN¢þ¿a²YÐïšøØ!À²„X#—uÓ^¦( (ï%ÀQ~»ÇW^xþ9†4€€ß/K±àù?D½% K=˜¯%èê³$,؃ÍaÆÄ¢^ï 4Àw8¨‡UC|›…y²)$Ö,>4¼™ –ÑÖlCkPØŠ…?¸¸Õ7Ce±‡††ûhàï»À )DäÆ=´âx+ëûÆf~CY»ÀæQÃ~Îdøi¦}Äàfn4”BÇÙ‹¶Xºì)³Sê`'KrgCroÛΰ¨"X9RŽ?— §æÛ×@DýíJ‡”o‘Ý-ã˜ô0…y€âŸÄ·hå²°Èé®mÀZ ÞØˆ[;sè•Òdé¦Þ³¼7|¡[f€½ˆð¢eb 4/çÞbóúætàApb±Íažñ)UW,k+­ ì²äb è=L^èðú»Œeì ˜¿œ”ó’ÕÈJιè{P.¯‰”¼Ýc'{0–öeØÉüôåb.faã$÷%€ã³G\PL¼î—u;àæfP~þï Hw´ð/?CŽÏ°Ç^zöYÀ¡ÌØ£4$––„ÊŸÐÝu߬4`뙘€¡ÚÒmm°ðÿìØXý?àþ+!x.»Ý²A÷ßg þ˶öMZÚ÷ø\¬`Þ°» ÒÆ(ÊëcÆÇn2™øô¹5`1Ö È—×ÿÇÀwÞüSB …¤zMO†a}‹jGVÿÜf¾KI}%¤ºóŽ̸è1tûšã5ŸÁƒ÷Ýa!ýÒG²¤™éËZŸ!ϰ s{Í„ÓIqdÚnîè @xƒ#x 0§±^¶¾ƒ#Œ'2TΈ¦ø‰â$vÇrfqö§w~€òlÛ–Ón5ƒÎTªÁähØdŸÖæ`C¨«eíGom¨Nü’ù´MáŠÝ•šÅ_éȺ@ìÓ©ûMÖ×ÜÚV~ŽÂ{ž|ìlŠ6†—y«“`¶L0[aâÀˆÀì1‹¥ðïeÑ+E‹КÖºC"AéË„ü×}©`ç Å Ì‘¦ @ï"Ç\cÛÕŸ(vø´ÊÛ;6/'ÈÃð£y"¡€žœ +°¼¼¤N +*¹ÖT`F/(<ì—·f‰´¬Ác´¸‘;eû§þÉ(lªä©o©XÜ(Ζ(ƒÓ¡?ožY0²ÿÁã*ú#dò½&±r·m¸,ßÝÄ.¸ðtز£ùÉSÀöÒ Xõá‘O\`$`Sž\=š¸óÎñÄïgÁmfþ…ôP€ 8´›{N@s¥V=S‘O,x…þ *‰p žb:|Êüÿ/9ÈïÖÇÿ¦/$Svÿiüo†gô P [cäÿ‡§€‡/#¼‡^ï%'m×iÏžQ#‚q‚MxÁ À›ßùΛòù‘ÿûÿyç­·þâÍ?·^€€~ôܹO% …þç>~N ™šâªÞ°-,%•=É^[ˆ?L‡wì´ë#ž|ßÀ”Z´ ÷mÙ’Æ»bÌw!!d þš•dÀ@/íòÿø Švb‚A3;ƒÂ›Ì$;Qb) @¶çνƒY +.¹£ÂÚ‹qØð]æŸ;öîÆy=>Á_Ö€yNq!Ày.0Þ û¥šq‰²0,\s¸häh²0¤_âÝË øgc Ï­Úb/ê +ÄJÅÉ#³wôn€±°`ÃêÊ` Œï‹£ªí‘壵µëBRlµûû3…øèAKtù@’uwß +˜&¢÷ÝÊÝnÈ´DÅHøË˜zÅŵè%"¢¹ðBõ(i* °?²§ö‰»(ûh³{Šùm/¹˜ËúÚ?§üë’—ÿ —ë+ n‚mm‰åƒyô Šò3S6 +¹‚éÿ–’,ªô‹ùüñƒ#A°ç,ˆuÙynÞÜVŸÚeÂ4GøLh°mCŒûÒÄ͸Š€ÕK_yöé (‡ÆîMü~l1ó‰³g?áÈܨµ¼` hÖD "pæ Cí @û”Œ8@ë `G`ÿÿ/üߪÿæà?-øda`+äÕ&[Ã8![5Å1ý À­1­Ô³ŒL/W–+Âþ›õP®»(*Ï­ÅÜ;:~“‰0kS< ­È÷—ÿÿÖ›¦˜ :ð焼ðÜo>ñÑ}ôܧ=(Q‚üÿñý8ˆÙŸ¼Š÷™,Ù4hlã…äC¨lH­f‡u_‹›ïc\O<~ûëvPØàs|ÍÞö²“¦Jn +@XásPЫO@>‡.MD»ÅX¦ÏQn€ˆcO +ÉÖqQ†òÁ‘ägŸ6O&$s?›ÍB:;d_ØpÇm™Óœè 9 1Ï–—8‹fÊÍU|¦Ÿ+±Þš…©h±´’²€ÿn„ÿ™Ù!Vul1û†ú¯xÚ øgc£[@¨(êv{¿;{—9ÿô®Û°Îþemæÿ]!ç|ôÒæÍÍîä‹ÖÜïÆãsu¤Ðv­»öò¿{å›tcýå›ëZÛ\ÿ£^N°K²^¯—¤ôÂÖBñ4ãí,K‚Ð’°Œ_SVÝòRt:*Lv7i›/o¬u_ÒI¢b·Ø[ä¡SÜši··7K¹^ocíºŽï½Òû²Ò¨Ø_îv7Ö{J<z}㕯t —¿Ì(½n*lMŒ¡×]»ñòËøÍ—×ÿÝ—o¨ä76þàwæ£ÿÑ +¬ »×mX#¬=A&dú¤íA_Œ]zÁÝ©G7z×£…ro­Ü½¾T.ŠJ-–OäóÇFWÚPt+¸,€Ümn}´ßq +$ V¾¸+ˆ½ 1Ú{¯€ýè¹Ï$ +À¥ Óxûãw2:ŽK†ÿgc.ƒÒ5c‰`x,œ,®ªA4€ÀLp—Aú @»üo †û±¬®-a¼pÖâû*ÃíËÀÿŠ_ “^¦øÒ¶šú +}t,—¹S Àî½ÞC À˜|üÑ]ß<¡.Ž€J/3´Ncf?ª*>5ÉÂbŒ£ïÊbö‰r[²ýnüÏüÛRœAj²MÚfóPÔ¤ Z´WºìùMÐË ƒá&7y`@;ba`ôÀwa'`kÝm2?’ãàáx­ˆSÄ‹!@3Þi³a—úY*›83YêT)sÊ D@ø02£wrö-€Ä m.³ëâo°‹Ù—Þ7åÄ©) є䛼bÛ øgc½õ[Ÿ„_ÅùÂ|±03™Ÿ=ž?Nou”õ|¡uK§…þ%@ï²!bép¯{ºTŠJQ±4_˜ÃýÕÞ÷môðý×Ö„Ô²%ÁvîÔ|F€’ÐÑi¹ãù¹B‰CŠ¥î—ÙØc´üè’=P;º¥ÂCZ×"N·òÊçææX‰Še‘ it¢+bÒ +…ùùb飛:o·X:]êQÜBáò‹Q©KÁ ¤¤@Ñ©Ëì³’?\˜ãT*ˆ®1Uòž!½r?õP¡‡| ’ŸVz¤•’B(ËÒe½m”ØF„#WE~¿U*äfЊÅùE‹|ÈÍÎ>Ëñ<³ÂÒ‹VòMq³r·m¸­^Úe„ø(ŽŠüú¥ÕÏï€ݼDùŽîű?{öœðßú¢òÇ÷²Ë%€€üÁ8·?)ÐîkÁ%GÇ]ýcà€{îÁè ³™¸ùß;ö ü¶æuÇìj%+DîûÿÍ€ÿÏö8`ö (ƒ14l‰€Ü¬€€x €)÷ŽôCæ±€ ð¼¾úÚ¼ó!¸þno¾ùÆ 1>|ÔÐÿ& +€Ù. ]––$þŽ·˜[n(íP Xk=í¹ûÖÔVýc=IÓŸ‡)_“KŸK+2mߪüf1J!Ùkf*øvàgp¬§v¼ ”¶eãYH‡Râ ¸íJ2³Þ‰“¥Ì6ömz¼Ñ‡¾y‘B>}¬gÙ/(6­„Cœ:ÝÜ,eÚldDC»†`¾lW·Ó øgc3“·>É&ôž™Ù÷Áýwì;pஓwMÈÏÈÐûðäáÇ''çš¹ßW5‘"1Ò¹qØÌLnæ~e #ïWÞ²Ã3‡9xæ~mÒáZ×^å%;VÊÃ?71£­V`¶Êîºë®öï»ãƒûîÒ—dǒЦr·m¸­®òŒßaošü¬V­ ÀIÁ0£Ý_Nн{G¾_¸@ÀE€¯Ä +€¸ðP¿oaÄ?}ÔäU·…i±` l®~£q¦†þúCLpG¸€eãæÿ-ð/üÓƒÿoðLËS7ÜÍð_€ âW›Íf?ÀCv*À\mµ‘&dÿÕiÀN +Àî½ÞC À88?ꈿmnŸ±ðÄ9aø „8p à·EÞü‹¿xë­¿xë/þBøÿÆŸÛÓ€m(à ô9J3- (¡VM Ü"„wl­fÍðÝcüöeÛ¡WØf)lÖûk¾Ê~?Ê_¾ê¹›0ŸGðxÝ>åõ-è¿‚p°‘f†×¤ !–¾NŒ3ùž ðê™Ä 9÷mðŒÁ<3+C,ÄÆ#Rf—KÙâË–õ´¤4Ê.u&+"SÊ”©hÒ ™ìd©“¹iC0Ja[>°µð) Pü³±ù[7ÚȱùBnò€õÈÍâ³æ +3ÅB^^>6'ï¼—Ó/w›qÙá˜ù+?'§W«ù¼œcùçâùb:Hþ±í“—\Œpôó…Ò©‰ÞåÒ|1ºLH7Ù+sÙÜ\©?g¬ÏBc(ÝŸÓ¡deÞö|I.=ë0?Ž“˜bÀõh{qæ~T7ùæ”D¾¾JGÉ“¢îŸÐùò§tZJ^re+œ*˜Ë¯CuzV(*‡ÒD·««“ÏUªä)|=§õlE dº†¹çü'v¦ÙÉ‘‘Frºj—íáB!€ÜmnòóŸúöCžFˆcvkúËýwïÿÈ‘O½h y_úÊW.]´ ÀÌ(ì €~Ú„ºÞÐîÔjçëm(@„‚òDÛ€ ¸Ш…X¾Äâæÿg:ÏîǦœðJÅ||Là?5RŸ±ì+†ÿòùu‚Šð_¦í±&zÛ8Ö °ÞjWㆴn»+Ê 0DÐÕÞR Àè½àý8˜?®×–¹À½÷ +ÿ÷ì;rôÜ'„Ü/Ð`Ý_}íÏÿü á?²¿Ðß üMÀrà£ö·ÍB ¾ƒm«åÍvÞLïm3Ÿúb@pßÅã‰[Âæ-< N›äÀDF¶—&)“žeŸÂ,øþAˆ7ÄLý¥D½d;Ol;‚€QÌ଄Âjíœnɲ¡½™æäa9m5‡êÄ茩¿?亓õ÷mIVï´𶱓(þÙØ+·n›××zÝîRý{áxþ¤Ç¨m +˜çfJÝî娫Ý›ÿ~ƒfóÞÆïoüþ·nôz7667#í-*Ua#*u7zt¡ë®­­m˜ºm-úëßì•»¨õëëÝòK7º¿SÊ•6ÿø•^¤S¯ÿÁúzo­»Ùë) ÝñigènÐPþÛ=-ù²Î¸Q6: Ð yF›ÐJ4×Íj\ÊkÆ)û[b Àt³¤ùÀÿT\ÿªÁÿŒ^.º[e%øÿ¦0V°GÆ +€ö Æh½ 2ÐvT27éðîcô£¼âÙ–9‹{ïܳwô^pÛ Às/\{Õ$€7¿óÖwÞ~ë;o½iøOÀŸ¿ñÚk¯2À××ßm+pg-™¼òöÙ0³Ý©4ZŒ× °cÜÖg¼àËÉÞ0Çkñ‡^[²ðÃôJeéåMJ þ§Šb‹®¤tÛ–ž|Ӯح–óÎgìf#e»Ÿu«á[s6?U|fÊž¶Ø1œ¢ëÖ1ŽN>üH_OÙàÚ»6ÏÜ2e>üÿl,Šnuf½Â°ÇÞ}ðxÞž±³X.gr oçãä´f]ý—ºkKKtš7[Œz¿;‘ú n…þt¡=Ú®]ìáÀÚ³¹¶~#êv 3ò¶óQù¥µî7×,™²Ó%îø@ÂãÁt¢Ó3à´J \UÈ›0{›óÁ•ÁõkÝÓ…™®ŽXSŽnK]¤ W(ùÆáÉDE ä× @¤ "J´-*½vÞPÉÅJEî^ß(snƒöðà%žz•¬äÅ¢[è=x¸PìÎØÅÊŽÏŽÜ}÷ËŒÉsòýa  ._(%:v\’dA((üŽ¿@3ßo )”býd¡Dž“eŸœ ûµ®Å›m¿owÛ6ÞÄ8.ìró |’•–Dž:X5,0³óÿ´-@ñÏÆR“‰Þjô·ÓìØÁ‘ÙcÇOØP{ÝS|`à/÷l6¸?‰fa£Þ¹u‹"½"ýõ †-ŒÁ†îÑ[^ù#š-•ÿõKìüòœ=”'¿¶¸Q^\×,Ö!‹K<€7¯5Íx¢Oð1»Ή…øÈU†do€ëÇê#œš¥ß?›aDþr/ZPzßj剺”˳-.'gæ7BŠrù±Ç<e÷Ò—ËÌ–Êkëºâ¨W˜È—Šù]JÞ»Ñ/9M¡ƒ #éS%õó—''‹‘ã?#,ä­w X IÍÈݶᶳçÏ›Sž¢íÿ3Ó·Àÿ‘‹Ÿb ayÿ0~$36¾S@LœtbÀÓ¦„ðò‚!LÁ¦3Y` 1Ø©ùßà_fú¿åáø_oÉÄ7P‚þŸà¿ ßŒS46€¦m1Œ`1nþ,bÞC/€wÄßÌì u÷Ž;n›ÿomôüÓÿåMQ€·Þ|ë/ˆ àOÿ¯øèÇŽžý¨·Í¬öïOnïÌQ}tœu–ãwâÀÛJjâÃ?-MqŠÔ<älsmþ{yû¥þÿ±÷÷Ïq\W–( +…;$Q lRâN4‚d[`¢ D +‚Th”QÄa^A* Õ˜ÔR4øaÀ`È +? ³¯~x²Ô6Ý3×ÓÒ“]„ìq%£éÛì+…º/§î;&c¬¶Þx¢51sçGé¿xk­½OfÖPÔ‡û¬¬ÊÏ“'OfUæZ{Ÿ}N˜M7‘þéÕv?€êôŒ›“\‹\#õ=oâ[A$L§{œ!²ÔX‡ÑÔÊ qÚUy’+?ŠÖZKP…¤Ú]õÜù±eÌV C’s+À•u¤f-q;.4/~:Q8ÿÓÀù¥°ÈzSôtÊ0û´¸^ÊÂÅ!ÑSj’¯7ç 0Øi~[Kw€1ö‡E¤x†:BįùnâjEÛJ«X…ôÙýc…''' °ÇKÅ"·a#Ç* h” <uWEÓ}cdnr³Vé¸PÊÞ;*éí:3Di}&?Ña¥TÉ9}ªPRïÁ~¬(êUkKRBÌâÌ™6Cµ”¯K”Vqâ(yþØ _(•WQòuªìˆÔ,&wâ–'ô2…¾¾\4‘‡èêÜ9’›˜â6œ™ +8Ém¡9Èõøœ[××LýU°2o`ÃV‹‹Îþ àö˜x^¹üÊâì ûÚ»g#`TýÜñçÕ±ßXРgzÈ«äyP§¸? tˆœUWx e'¸eoÓþM;ÿ“þaá8ÀLRõÿÁýO@"2”K} €y¾m5à~:Ž>»i+EUÈøÓÇø#{Cà©yšðµï ÿïËÀ:€¿ý‡ÿ ðß ä€  %Èþ‰íooÄwè9 &›"<ãkf[“°e瓪¸ÉÃØ¦6ÄÄ_]`sHìÓdÁó6X)¼,`zÌOÁf¸RNúØ`£>t-Ú^>6¶àTkb(ÿÆíþÃlõ§¾Ø +Mþ4ÏÎðzzØ!^³Ž{€Ýõc'Ë×ÀNÿÍ dß¾wùö{Ö±ÝB8d€Îã‡2&´‰)ùIvv[ WdóÅ( w÷â:ð·Ð+‹ØÂá°j¸ñàTüOs0oޢɑÅÂx¦»«³;3šcw:ÑjùÐX¹ZÕIÀ&mMY_öØ™NøÞ¼8 Wœ*Šæ@»Éœ6þ/”ÇúìM€•ÊõRTÒ?€ƒDl-LÒªÖN˜‹Ù¿þþÃâ,²8žbÉ™R^ŒXBª€re},[¾J’i?f A­`%'ÕGåCYN¹,mCÞVÖ,¯®JY%§h`Éó½c ~ÌUV¯ãdx>•œ€«x,. ÅÂÄ(kä ttÝ·ªZ¸Þ(¿nJ€Y:ýM°+`nØN + ó´þ)äx™Bœ£`_ÿžžAoCVQ«Á8ûøñÔ¹ÿÏäh«“=xß>RꀻR„JE*+ÖÅü uò?é ±qìÿ'ÇÅÿ ^¾ƒÈñ'ôÿs0‘¡lªc¬à1ÌZÆÏ’ÿ±ð©ZÜn YgSð‘÷îž}ÃÃx²’ÿ¡^ÿHþo?€ €"€1ÿ•ïÿ¿<iðY}0|œ&ÃÐ +˜Ê¾µCLìbl'~7ü1öq* \²Dœ÷‡ùxÖRùÔrAxDÿ¤–4kI~ÚÚì +¤10ÐÓ³{wOO?‹468à ÷ƾûs|9 @ò;?éþ$ݪ„N½R3åB6[Z-‘Ó%A¸‰Þš%WmŽñ¥¿<;nŸAr̤JŽížkÅý@”/<É·”W¡”3öˆK bâ‘€©Â„<;UÀ _Î-@ 8ŽT‹¿~Љ°ÿÓ/jÞ½4ÿþÀåÅÙzzz@¾ ÖœQÿÿÇôxþø·ÓF—Óz6ò×DÈÙŒtŠºÿÓÕÿ"ZR7ýÿ"éÿ³†ÿÀ£Ï›{‘×YµàÜÏóæØAêúp€ü€èŸQ¿‹wÿã¿á@Côží{íM«ßÿþ÷µüõ¯?ø‡øÇÿ + ð‘ÅZ €B^íµWc À05ßoæ¿S `4æHÈ®1È©4œÕ~"lckº|Ö©ÛFÆâ©Õøb`ÊarТæõÁvÇ*;ž•ÂË< áîNÆçµù‹¯ç‡ÁÒþO>uŠoJÔ_½8IP× Is_Ï=!O€Ýúïsöô óãt–ì>;l²Ø3ðL‘-_ºaÀ]…Ñ2ÞgÔÚTÜ‹Ë+.¬\ÀÜò‹Š¹q Öb˜%W1í½žÈ’a»ür⇢‚´'$x’\Éeñ¤Z—:žé iÈüõ,Rc§åe»B'q®8=®Aá_•‘à>áTüO‚ò›e’̦ƒÙÓ -pÑT!G3µ+“ag€…(w(Ë.ð +O™‘mù)Ñ”æ[sŒ-# +Î`¥™Ú\(øË„¹@Ë›ø¾^¬Œ²½l‰—£ÏœÉ+TSiâÅZV<ˆI±xäJùÐá¨<£²ð˜8K ²;ÆšWTŠ¥P‚`ç|ØŸ'ÈâªÑ*絞;DÑ¡$’ÀØ×É)Ðىыë¶2ÊõæQêI|Çe(¬qÛGï'ĈÂZ@+Š‘yÆÇsÝ]¸²ã¼¬Üb '¹-4L|°dmZ깂 bÑ’¡µ+èÙñc¯™ò$Lû²˜˪H   TF•\ëË’Ž­äÊ›9 <~ÄÎ +Ù»_4Fú§ ˜(E7Tr¼^—H‰j<|¹C¯¤seg`…r’ÛBsêY³ouÿUSy8à.\r° ÿ/Ìê·ï‚ñ?òüÁeèé¡ÝÄÎÿS0 »âKð(ûOŸyÞ<2ЪÁ­ÎÄÕÕäeó¨1T@ûŸìÏ¡ÿËÿàÀ?ÿ×ê{óxFýrèxÌš9š—ˆc^WÇÈPçø"Þ ‚O¸¾áp<wݳûËûöýaOÏ÷Ìðš<¿V«>ú¯ÿø_ÿë?šàoô7o¼Î~€,€V¬ìÖ}ûÒ€g;„À¾„қͥ94ng8Œé0„̉¼IÜ2Ói¨kYsñǤûhΧ6gÍ8CÞçDËÖ ´ô«K,ûŸeä—ãQbnöÌÜÜ(#Ld*/&j@ìO‡ý@O;2кçn‹ÀïÂ74÷ ž>)£–ðì©S³§Nž>9úÜÂÂ3#õ5ãÆlˆ—ÈïÐëK X®äTH¬l +ÇÒyÞôd{¾€S¶üÅš‹”ȃ{]À*™ý³Ãr& Ï/òm³3tj˜  +`û^÷@éÑBŽ70óPB”9̿ҋ‹NÆÿ ÿ·.ÈräÒ‚ÞXÃ(€ÌèÄDTÈAÐA?UœzŠIª}®Ù^VÝOâí-¬‹÷‘#gQJ‰®à¦b™¯íÉç£lo.¢ÁñàÑRÅ@ +Öw/ s”ËCyôäLn‹º•Ž\ÁÛÆÁŽ(*!f®ÌP0Èݯ¢c¬’?UPõíóés¬â°B«ø†ð`.sïÒã…ÿ£®J>?Ά\)ºF%ñT8ú8†B‘Ê…‡ãÚñBùСB¹½0Ð=:ŽÕê(XG#œä¶Ð²ö—– ëk§ì H‚‘hF1žù1¹(ÆlÜ +à6cDðé› î€Æ8±}âUŒüÇÀðPÿøŸÿA +@€A€Ø»ZùªY>žëâÈST)ÛY«8J“ik{SÝŒw4†Ô,º"ñ5âçj9£m̃s–U\ÊøC„•U0­â€»SÀ`ÜlHûè4of1®~„íìô—2L )øÉÙÓà~ð?]áUÆ?=ù2¼aÝc.܈KKàt#ÏÛÌëMîãL§´jÄ"á¤!äY‹à¡ +ƒÃ¦ûÝß¡ø§Uè¼··ão‡ äÿ³òà“vCÐ0C@ ԃΧãß9ÞtК2Ô®Ë츯³³ó¡L&“{eûÈ– iá;ST•·ñf¢|oޝîµ\”Îè@KXÇŠ|.1`’½ÿó¥~Ó…UÍHÄo@D¶'»*Ï™Jvòº­ÈëHBЦåN¬j½J›óC.\=ñ¢‚"!Œs%5OúÆ,³Bñ)|¨øI`'S(ÓæWàáKù|®›àû€±‚Q–’ Þ±hByM¬°šÍVŠ…‰Üh&ÓÝ YÅd,9]*‚“Üšc‰~žaƒ>æÉâE×Ç +kêˆþý2»”Å;Ü™*áñH¾O*´@`ÿ;:-”åTÉ=füOQÀ’ïÏÀ×8´2ÒÆ: %²ëç'óT˜™Èås“øŽå +P%HaÄŽ<¥ðžËDab¢°žÉ”ŠSÝÝ]Ýì_A'ÈíòÈÝwß ò—àcˆ=ÌUÜ©AŸ˜K*)Õ÷p(ÏÐÈvC]üm#¹Ñ·¾Æía°Oí²¯³=تû‡lšÂCÒEŽWøŒ1?1§Ð:ÿÆößÔ˜ó.ØfÍ=4…!¤øž~ºÃM€OÎR$heÝqë€ÿY€;/e§ƒåp£¨òÐpAÁr¾¢ +çWä°{Ù(“ÛGæ<µ“|Ÿ]ƒ›y¨¬1 Ç¸@.Òÿ=ÕUt4÷$ü¿8àœü;…S¿P~,Ö| £"}Ïx¦[ óPf$“•öõÙfÎ"oŸa{A±—¹¿'(Ê)Amgã9Z½|·îØÿ…üPoái±è$é_®ts™'‘æÉÿE¶/ŒÊCù+ì”Ç7(KîÇ•Y= ’Î[´^9ë-\§ÿ‹3A¥ÐÀÙ(Ú?ÆÆq[Lur¾òŸˆ”µ µ`PÑ yÒÀÁ¾Æ˜bçÐ!k<7ÒÝÍ>–&L.ÐybQ[ýlÜ€¸ üÛ1=u€ê(Î`’z5…îí@ÿA,ãÎ]™=À†A= _ £z+¿ŠàÄÿz¢Ÿu4ß«¶»H¬kQ3GŠ! Œý›ò¿ìÿ´Ðéýé1ýp°ÿ½PZØ’ÁÂýÔ +à,¿€ï0Gp›­n+€ìn4Qó¯È6´ÿ§<P€ÿÿ¯¿ÿÿØ×1ð5U<ü0»tÙûåžöÝ{ öˆcÿm“4Â*0­ÒÚ ØLÛݰÐc¦×„}’MÉ o"ÂÇWcÐZs(‹æ`ø‰a…ÒÈgª=s-xH‹zóÁ}{a·[~ ÿIüó)@ì°¾´éXv—=o@3Ý1jɰìÓ´`É<ôçé~g¶´óãç|ÍE%úÎ{pÐùÿƒä æoêàTA€îÀ…±ü©èÙ€$iÙ`F + ÿŸ@T9±_“Á¨‘Tu@¦+“Éü1@Ô7¤n‘Y‘méÞ0¯™J¡I —¢~Q(Ñq,úÒÈEŸÏöM³w\Ö`qv²ºÒ@øœ¨y Í}J”-ŠÈÂJ”Ø×¦*yüîA£jêCÐ$|³€ØëYZä µs)LÌÈÀY[ƒ5IÉ£èHa‚9÷Ê8J6à*híÁ‘ªxMý‚âÌf†!#€L¦«³ktB¹êD¸}zËÐøÀx~ñ¢*SS|¹›q'ÎÓ~:4(?±þnã•Sƒý{öôì¨dgu¼&L|Çž{¼Ê¾tY ެR/û“ñC->Ø ëŒ±ÿÅ¢ø’_TÛÿ gò>$ƒñ?äÅ1ÙÿÏÿ‰å¥ü‚™‘ëC+ VÂú§àmØ +€ç޹ÅÐø+–¥€ÜCþ—à £z¶øõÿæom)à7^ýµïIPlW‹.îNˆý1`ƒ2v¶ä‚Ϧhó¶`DO{†»MHô\æ8M†Ú$jÀàcËI£ ÐØŠ¨ +vg€ì1(’Ĩy›Iº7½]€³e¯‡¯Æ2ÞÜt@lflVûÛ2çâ[›CÔó¿Ï‡“²™Oåø&)^A€w·{ . èß=Ö@ˆ0 èÞ1€Å8nÃÐ@˜ÀêŒý5S[g¾‘EÂyÇ€ÁÙ<üƒÐ × (Àª¾éýìÇè<$@«]Â=¿sPë@8lõ4¹îÎléËärãÅh([.Àœ½aWó5ÁäG¡Ö€âŠ ÂhºÉ‡íf@{æ1Hƹ¡¡#HŸÏ7â&@£\ˆ“ã ÜlCE•¡<(ÚC +€MȸæÇ'LõÉ<= Èf**燘eÅNžˆ®f¯C€œ¡:¦÷ N +š–œÈî›&ß?Ü •ÏÚ{JÉàãåC}˜ËeÔ + {T!‡,`¬uœä¶ÐxªÐº×Ó" M¦ì±þ_‚0@ú)¤çBí[ÿi¨ç‘•ùáþ½{öì˜õ§ciÔG@ÊðÜño?v³)nÂV/0Í}Œ4_,Îö¿roÎÿ°ÍAû'Àÿfþ?VÇæñ•=ójËÎX%¯ò r-%@ 1¸Ÿ6Àù½Îâ¯ù:%ßu˜Çøð—ì(Á?ý¿þÚ÷¿ÿ½Wÿ_À´\Û÷’ö…ÄÀA¶?dE;°Æçn ‡fÔñ `V|PUGñ\Õ4ì¡©6l*±¾æ­ä¡@y8cÌO4‰° Göç¦C_1æ€ðV¦NÎnî`UFFÄmä  . ©03Knâx&}‡‡E<êc¬à˜b—yð/©òPÔzηìHèß=ç¡~ÇÀI¿ +Î6áøàÎLC:Õ +€‘o‡#'ºHƃP?ºàPÒmmL¢Âƒ¬oÏK€ÿU o\o×`:;t©RY2¥ÚÒ0iûYµ;ûô3S™ Øe¯JQdWÿˆÏËvyäÍ.'ÿC!TƆhµs§P†)•\%žUsu„ÄÔ +Œ=13é +Ÿ§Ò4/DÙýQ… ÚVà[Š—&s“ºòð8ã¹ñò¡^lÎŒŽttwgFyý”d*H&'¹-4‡Ø^|ÏE=X|ê€ó¼9Ù +p7*6ĨzN¤Poý/²’`°»=™õÕÏ>+Ÿ\h> òÓIW)H€”xéôU§@®øÂ ²«¢ÿý7°ÿEÿ zÆÿ);r9s%ûsÙ +ÃEÁ–„Ðí¯ƒæ~ì°w0ð‹}€ó??;Ü(ö¶ƒÿ_ý?Ä÷_{Ý+ªð†½ñÚ÷_ÿþkHúØÃn¿{ïÞÝI1°¯žáÁòû +îüOÑËË"ôZ@‡¿_ÿZÅŸTZ›Ù^ê”jÁœ¹þÍüoÅ`UµðáA!Ì`ñÿ—y†ñpÀæ1Á ;ôóñ0þ¾éÇK>õ8"‹„óŽ=à~Õ4‹°f€I €{æÏ‚À]¨-Åè‚HœgOÇý=ÎÍ¿ 4pbÃ&æÇ2™Îue2læ yð0al¢Vk<7_‘ àR>÷¸UŒçóO1*'“NhFûè +l>†-å&}-ŽÊZ~È€² r{±@/û`’R ÀqÙ(Ÿ¾|D_вCÓ<5S/ßékï`™rVòr´èRÁš#¢äÈ)?ãé%ÛGùÞi#îê’cOM‘‹¦Ú—_¤âÛGX¥ÒÝÙ•`Õ·•Cؤ“ÜšC†ÅâE݆xª¤¦p×Ë='À @ë,Fxx$û(­ýäèÙ³gOÏàœ¯8vŒ/Î?#@’‡Š__8a\ï +@|X­ÌD××ÙŸƒ³¶Þý§e"ÍÿìÈãÿÌûOþ×ÈG¬âûxvUPÔŸ@úשlæøŒ1d÷@ÿa¾æ‹Áظgß« äxíàHã7ø¾@Š„ï<öð†»ñ0oßmÔOÀÀ Û×ÂÙÓêÿoWÔyª±²ZwN÷¡~F³¡Ò?¬ÂâF€Dâ0hIgÏó c’‘K€ê€” ©hÍ€Án1l¼‘@.€=ÊPÆ4Ä“û9g==©~pŒ²-`³V8Éj€N—'ÇLåÀ™´â¨¦ÿàý³oqgçßœñëPn +öŰ‹{‚þň¹)ö”+È.Óx­´ªÚyÑ›¤Áh4 Ä>Ê?©>yAs±û]0ÒŒÊù¾<ÍfÊ„DY@0¦.cXÛÀƒ•¢¡Ã Þ'E³<6$ ƒÂ0¾¦³»M•dA×XÌ[/ —ÕÕ«|ᯑ§€’Âq¡ Bå¤K}É­ì‘Ú;p‰ã’£TÞs`®÷³dôf§Š‡zŸÄeÍt?ÔÕÙÙ5’ƒ>)³ÐqÉä¶Ð¸ÿÌз@ŒÂ#{*PÌH=š¡ö ®{š÷°ªv× €cÏž€ ¥’nÙ@.;fTÇðS¥Höúzc})Ðù_;‰“ßÿ?‚ìþ§ýÏlÜþ?þü·µL-ø"p´Æþ¯Nƒ?E+€Öc@ñÁPoúÛãØpWšÿ¡¾O€A"@†À¯Ûû‚^=û˜9:Ò.<áYã¯:~0oæ2¹_1çmÂÿÍÀ?ÓràtÒv??6onØÿ¯é&ÓÇ¥ÖØWñdlƒ¨´GÈúuFÚ<@­âöHŠü41º]9úL‹+Ä'>oö:pCU @U+`vðä1öp¶¹ €óýæéù³Áþ‡¸Hkcû5H{ö8;ñhìœí 4ƒÍë»3¹ÑÑ‘Qðá“}C|bñH»˜Bð-{tDz·~T¬”ú²Ó´žéćͦ~"pöá7ÕwBRý<[ €SØT0¿; öæ¡@åÙ±·¦ò–±PŒf0Å “àu(«bGÖÙ¡HÎ +îÎ׋×JT`r­/–g††Èÿ´à麠@Ùñ ÅÈŸ0ýTáêd¯Â±kX›£ÓA"€üoà©3"_t¨oüŸÉô)º’Šlw83Sfxà$·…æ ©¯(ô¦j&t^¯™ŸÐËk<­{¿Bú·*€Ý{ööÌÖH˜ÿÏ;A¤€ÙË6uäßç@ÐÇ^øÉ:Ôp#'bpéô%w»€ h%Õठø^íEÿÓògïvpv'tŒÑt 4ÁÿŸð©àjãØ +ô:À*Àçü.cx2½~ÀÙïžMữ~v>ñºdÀëoüèõ0ð5@ä€àxà½`¯ö8 ÍLï8§âH¹Ê{úºj4\¼m§1Ègü¿.‹ÐmÐ(¥`óû F^e€™Mù?í°"jɸ?Ìõf9ˆHÿZò°‘'OŸb/¿´î¹ZìÙm.{o¿ƒw÷n¥ÙÀ [O÷¦}6ò4ŒˆaÚßÊ&(€€ô¼)ÅÀü7€ª6õôô~æù&EèŒ$Ø:˜É fOÒ+ê W#¤<{vÿÎ\N÷ àt_™Š½Ù¯8•!ÿýiGCùëz0#ÛU+­•¾¾vmm­TZÅâ T*­U¬Ó3ûȽ ÞjþÊ…l_žÝò–WéÉgœ’ƒAÙª0Úý³ÂIV+…!H —Š@d½ETX¹²Ž’#íS|ßv U*‡ÇÖ­/¡#{ä‚"ÿŸkkWfV¯•JÅ™½RÉf§)E,g÷bÆÔXQžÎöŽáfÊ‹žß……Å7h…Jå(ç†ñRf2ÝlȦr^T"æA8Ém¡9–ù,¸¸ ¾¿È>1ЧKöò_¶|qö€Þ”~R4xLÔƒDɰ‡€pàÀ³PÏÊZ ƒZ1Ãr0€ISaKÊ X@®â«là'ö4åVýëKû_yÈþý³Bà(是²&ÒjÀójøß¶â ÏBm°q+€–cDñâø0ªüãôHÿU ß=ûIr¼k)€×Þxý "áÿWÏ>zÐéŸkõ lèh“@‹üÔÀ×$»T›ñ?ù ÿBü_—WŒåeÜû¬fŸÆôom7… +€QªÔñ*Ÿ©ôð|FI<óSþÞ=‚q‚§)€ñ),Sìݾ{û^ÐÝîí»õN~|{ ‹gE²ûç-äg©xÞÈþÅÅÖÁ ÀP[Ti˶ó~«A"ªû û#³˜ÿhÍÇ+‘€ôFgd˜Ÿ;£2Ôcñâ…½ P[=õé9ž%’½DWPüß3@þ§ØÛC <6‚yÈzE'è/o½åtßkMP)_[]¯”¯¬]aCÀ\1Êdr㹉(Û—-\ýëëï\+W€kà´)°èÚê*Ûä—Ëë +ÿ_‹F¬r§82=U®W´ÌÚ®Ž*3 <0w¹òË íÏ‚fWa¢W®]³ºðDÉÀšér¹²Ž¢TÖTM‚µS…ܡ޾l&—ý*»YVh%ý… +J®¢Uœä¶ÐK¤yŽ0!é§¦ìøŸ›ðÀ` ÞÍb8¤€‡³?ø_€Ý»{Žö­†þcÕ +€Ì FdÍ útÚtM£nEîò?Eàÿ„? +§œêÈëâwŸÑÇWH˜@h¡þŸPÙ’âáŠq••ØgœûzT/žòˆèdþÀþ¶zp ¿ +lâyö`ºgïîÝ{vï†ù?ÒüÿsæAXd༽{X§n°qLqÐ œé#.¡ƒ"Þ•à{;<ó^œgMÇÎR©ø²Â˜ÿœ°&iðrð÷Yb†Ú¦¤|éÇ©ù9)!R?=®èØ»wwûî}ÃU]¢ÊþÇ!P(˜óîøùÞÚHäƒ FÌ3 c—Ú:”Éäó¸ŸÛÙ¼ ¯|l’ṉ+<3ú£K>q Û³‡ÇÆòù±üØaÌ e±`àú1nÆLvl(Ûû@þ°šì±+±,0„õH4É}³Bž91(€©²=84Ï>”‡ÎŽecn2‹ ^r/!Ž‹,åÓ>8ÍÂÙÚK5 :çŠTÉŸ.?8¤’ãð‡s(—œGÄ¡ñÁI`Àæ, ýáa™LNZÉ‘gU€Íì%Ïå'szSÏl¬÷òÙ> óþ]‡xÜ%œä¶ÐAôù>ŒÒ ¼Ïp+ÏÏເd2´ìèä0—Á<ìj=ýýGaô+@ +@|@JPþ¯R Þ#LÄn¤R>1<9áÆ?Æÿ;ÿ3þÏøÿOp`Ï“E"®þOó¿oÔ= pôØí·h!€÷˜–ge2Š¿â¬ ’>?>® â}^}•=òÀÁvÚùMEî#+V\éŒù©àÿ‰& 5K—8«©Ø´¯˜yï´ï^ã{›Òýϵ›‚MþTrŽýXÁÁšk ˆQ¿A€ywht„8'új€{`ö÷°KÓ`¯Ý»O¥<Lyò¤3ž=à<·Ñ‰o‰®_$½jžS/K5R« (°7Y^_ÎJ¥ñ‚ €ÁþáÙy‹É”øÔ;§0:a9t¨Å‹Ë+’#)À7Ù•p«  Ø[@ûn«p€C$¨¯ €1¿+À +`¨1@e¤½ìþÞ]íÛ:Úw÷÷öîê@]‡ú,)YvlÿC‡°KC íçŒdNfìýÃýCØ}?÷í뵡³³†íLJÍìÏþáÚQúö#OGòèí}ðÁ÷amïX¥9¦+“„­dVÂCûûpØ^/4Vûz&ê=ÄBªC,ºo³½…Þ?ìeɇ˜óQÑTòýœö£D5%ïÃnÊŠ;0;\î‰}îßõG¼ í»¶Ý½ —T…çñX. Nr[h™üfï‡QjOWx:º¤ìeïgó<…ìØáÃCy\rù¯=l1=Í·ÊÉf·õá’šÓ¤d• €“ÜšC&•ÑŸ^`AóôÓ* ÍS¤~ µôþ_¦`N)àîï©™ç±ïñfCÀ$¦Ò +@ôlÖº5ÀW¼jÌLxRÂÈŸôÏúîȤð¿EŽ”¡)ÿ?ë3„o´H ¡†·ß + y @6ûVå-uÀX£zѾÏ-À‰ñ0ÿÉùÒÁpöìw¿K§?q–ä¯õ=úðÁƒàcì¯xç{P¢Ï˜Dc&mþ§h F¶ÁÈ¥@ÿ(Çòò…å næ;߇Y ­Ùÿ(nâˆá šó;@è^F'ç¿A~ ¨Sƒ=í»=€u°ýA_ ˜"Ž€ýïöÏß^4ǹôêk°é<ÔHR–j¤W¿/ιQý¥J{ê?Ë2Y&µ˜ãó–±»ÓðR€®Ã©Ä0Ȧº€h*¤(öìþ¹~¾™Xm„R¹Ö½¶ZŽ&FGG39¶r¥NúͲV»RY1—ÊåJ©üf>;½~­t¥¼zëA{««•õõµòÌúZem}uíÚ¬ä‡òP(}øN†ªOÍþtmtñúS ch€BTø3òôtal(›¹².r,_y™é¹öŠ.ÍOáˆXw¤ü—×VW£ÒÚj©r­R©”V×*(Q¹ŒQTšÁ~XÀ‰­Wä€Â£äøL*ÍM(òU+ùÚµkå™ +Š~­²zíï¯åûò…òt„bOæs¬@É˫ϠÈ” %(äÆÇ *9ä0@ùcC¹¨¼^¾A_p +ý2ž{¬¢ p :·er|A]»¾Z)•,ÃIn Í!“?mô'SnX\^º¸‚;y¶x~‰õ¯i Ж¢ŽþÁÿƒÇúaø '¥pHô“Ý@ƒêˆœ)0’O€ ý› /+YUÀ HF¦…ÒüǧƒIÄÄ‚'#Hüdhò?÷Ápì¨Ñ¿ñ?hW‡àèù*ûöxŒ4ÿûfÂ×l °a+ + ›ÆPéWß¾ú¶ýïÖÈ­}£|ûúãfq~b< +`„9n´™ëõ( Àøß3¨\8‹r§­ÂÿÁ¿ìÜs :ý¥6 +U|n!¦MHû8j¥ú_ð“°غÑ€FFý†Ùác‹50\XËÿPô0@5»{ö2€ìIó€ïªcÀ¤)]rá´Þy°†¾ý¸8\Ž×ù±#ì~Ûõ[2îMÄ©R`"~íœj¡bT{¨ii€bþß×ÃMÐ`1FüUôߨÀ¹•~ö.ú»ôl ,ô¼ +Xãkv‹…\¦»;›˜`{ö¢î\¶®—µ ‘.½¯s7Š®`À[©|mMïê]ýúÚZ”후᜵×ý ìi÷Ihµ“Dzºß±íjEíÏÂòŸaïzPÖð›¸àQ¢üøFt‰íüUro.@{^ Un`ËÛÆE°ïõüPá:™-7*ƒRi} ÛQòUȉ|/K®ýùÂ8Æ*D.ÇÙPrÊØûX=t(Ïö ®™µc”`£Š‘Lg['Nž’AEµ2ny6‡Lþ´ÑŸL¹ÜÊ œ_Æ­û.FbùÛÀPOÿx’ᆗ˜?Ÿàœ FBÙÁwià>Áâ\ø:‚–:8”2€æÿ®ŽŽŽ¶mNÂUôþ—õσöiþgý?é_†9Ë=Íÿž#°'Íÿqø_ýCØý­R1GÍ +…].»x«òv­à)5«M(?8ÿ«Ÿ¯¹XÃ?òÈ#NøŽG6<èVü_Û@fÌž6›ð¿OC(ž,—âF¸ë¯G©Šá‚‘Ê ÐBùÓåN{$Œú ójûf¤©Ñɹ3)€qå©ê€öÀ:Xÿ˜Û³ÛèãóH‰@ÜËìÍÇï·Íq®õjP @ª,ÕHVq{S0—ØÿOp#G<ªÅ€@Q, “¶äÀ51Ò v^‡Ø P@¯À%ÙÎ À” 9ÿã ( +=+ý ÿ={v;Ipà|_£ˆ*Á“ÅQðÿÈhnü?á á±8 ›AÊìÿj>[^Ã"ÀÊ3Ò3àÏ[_C"°(–]ñÒò§\Qw…ÜãFˆ|q?ÆÖq [›Ç™„¹œïËN«ÅÚáS¶r†€¬z9 J.þ·)J¤Þk©(‰ÂS¼^Š®•"ë¨È†ŒLSZ}§„d__ýY©\Îõæ£I‹ Ï/ +Çú ÅûË£áðN @ëì5™3Ò†‰X°c €\¡XFiXF$$œä¶Ð2ùÓF2å=m嘗푢ÿªy+´Î¹Ðcšý¡Ì³Ò¯§û=5€£`Ç” ã&ñs‰ày(€o$>$#kV+2¹±ùÑ]ä|;Œ†=‰`¡‰þíScÿ“{q|ñ9ˆ›SGÿ¿çÙøŸœÙ&18R½àˆn²ˆ@ + Ë ×'²o5 +€·3oh™þfýû#ñ¿s>Èÿ;ŒþG¦{ŸxäáGøyäÑGÜê' š(üi„åÀþ˜¤¨´%øŸ¢!,0 4¨q<˜ÑÌÓE½:@¼oäoJ UX™«ùŸÀ’XPë8 v Sç9ÿ³@ˆ` ÀÞÖ°À=â<÷(?õ&ô"¡³4±ÃsmìÐ:ûTË©u`ø9ú|×Dx*mk°¸Øˆÿ«=(nM €§ +€a*Ð?d]ýj @è p•H%‘`åß0º»çwР³?á|_ã4HE¸‹K¥¯MvwuŒ‚üé“é¶µÍ2~t£-³1½ÌhÐ(8”ü¿z|åële‡r«…X¬Uà”­àx’>vÌ‚dù™žìË–IÕ( 1 öôEvÜG2ʕɡé2„ˆ8žEgºÒב^TÏc—PmÅF+¸-ÓYq#*ÃÊÇžr0|A%¯”žÁXÇzsåtÉ .Ò2±(@XÉ'ùÞ‚ÉÉB> A¨”ëI‡ 4@nbŸ@®s[gn\=#‰'Ýò´ö +œçÄG©Æý«€á³ó¼£ußmlvòOYÿ ¼ßÁÿ|î Ì.¸õO€/]°-ÀÑÁãÇO8þì`èE¯‘x!ލQ´ÓÉæ÷íêØ±ä‡GG'hØ2ýmäÉù ô_Ëÿø@&Ò7Uÿ¿çÙTü_cþ§ùOÀÑ;;[oÀÛ¸ð$k¸ôI€áê[ÕX·˜@P¼3¨R_Èr2­~~Ùì/O@@°öAþÆÿ²ü…&*€4S\´o¬êÑh] ÿ 5ÿJFÿU€ø–1 – вÿŸÌo·©æñ ü/W@]cjÕ¨@U+€=ê ¨g”Zœ®‹ï"{vÊe +@‡mè áò«²T#YEû^ +À<ÆìÚαy`Ÿ×Æ4®PΪ6@ 0 /€·Ío»ü†{øôèéwšþâàä/8ß×äW òdñê•Ri"¶Aö7·“­@¬$5ÌCÀ̧‘Žû;cÃL‰Žm‚[J…¡¾|À“¤Ê\Y³ ~²)Íh|ÈŸ`[v¢ËV†åýcôïÓGöxVTV­~(c®t&¼ÁJDäm¤ç±ÄͲ÷Î|fTp$gÉ+Q¶ü—´À‘7}3E '.`_¤ëM•\úd’%ÇTž ž‚¶H°âBëñ賨A]%GqåÁà;Éÿ£¥Î»;39–ÉJ­ñ– ,-§à<'>J-à¡‚‡ìå¥ùÙÙée­aY$©ŸÅ¥júÇÝ*¹û´ÖNÏà¬ú61ˆ1ÅÿŒ€íÎ¥ ö5 "¥9Ì<U +ÀzçïèàNh€Ž®Îm¾Qó› À"vþ ñ$dçÐøqé,×'æšÿÙŒÀák™ÿòt¢@Ð÷Œhú.þ«)ØÕ&ÿÎø0$@6ûÖÕj@Zà¶0Ú¿äÚþ z9ÿ¥RàÑGÕÑ(=€GèˆÑÄpð ØyWƒ«ÈšÎôF¡-Ãÿ@¶g €Å Õþyåš#¤e€ûØPËÀ±¼©c!áÕˆm±C#M2ï<‰.˜ðä~Z³1ÿCT·`?t¨`‹Ùz+)ÆÈ€;+Õ@À94Í#ëè Ò.¥5Û þ³ÕUþ:æ°ÏiÊ +xPEÙÕk(ŸöÆ—çĝоú3rw¾·=¥ÒåUJ¾hÈJŽE_§Ež×¹6 ¾BDWH©¼:UX_¥\šÿs (w¶uŽæXbUÓ-Ðdò§þdÊ æ8¿p Ïyøø1Ø£¨ +aEŠþÍú„DïÿƒçO-ºõgšè?Çãktímú‰8nö?áqªœ÷Òí¿k§y(vtvlkëôÍâÿP F7þOìÿ?ñnˆþÇV,ž±lÄTñBÿ©c~÷ìûã«×÷u6jÉàoÿ$þøz0`d7`1¹ ®¾ýVM`šÿ«Ýtñ;ïs\ zÚðhìóÿAq½ø2 Å«DŸ· ÿû4kûÙ :‚`I}S +jþË–ùÞ Ï¹°€<5Æ'æÅø¡Þ%<ªxóÅ9JÝÕš;CþÇç ù_àÌÊþ÷׃`ùJ½àå1aº’ñ|ªß^‚æ8‰T©el‡zþ’UœS €·Ðvêƒý@?„{, + ÊÙÝQêÍbèûç—!€Ö`7+=Ê/p•HE]HÄà<ý…áý÷«$€~-ìŽLT,Ì”&rÝÝÝ£ã_ûZñk 'Ò·[²*n]Ì®O­—¿ì+¿¶êÑK_ÿ÷ô fû +ì­Ÿ‘~´“&Eœ„½‚‹“³i´ßŸ+—ÉÅe°?•Be?À2¬,Pñ’)X]ˆ @û_‡ø÷«_¿B· ~™Û"wåH»6­¬;õVr±T¾Rª”pD½ð‡eƒ™Ï1Ë™ÏKÃIÉiü³è|KÁP6ªÈsQZ•é\­€  êcŠTœâU”¬œä¶ÐNÄͰÄÎÄ/3p6t˜~КE_E dlýÓùaÏnÖ)2àœôpྠZ€ô)¿±xî9³ÿÝÐ@tlëÓü¿/x::º:Û¶aÉÐùOö'ÿ“úÍàììËc–Œ%áëAï*ŠÛ"ÿ@'ØJ“Ž8{_g*à8ßhèOoî/ z +wSm=W+oq{ª U €Q_&öÈý/öùŸ}ì;šÓ`üÿhìH<ÇM="I#{lÄqŠ?oöjü›Ø þ1úg,.ù»¬lMƒuW+žsK OÃÊJÎóñu:›»ÚÈNPÚ©SgææH0¦¿µ˜˜ºgøª@€„gìa,?ÌžÛ¥ô.@†Â ú£< ‚õŸ0ŸÎƒóó$å:ûTËñ:ÙÿV`;VÇÔ± 6@>€Zp¯ ´ÿ—OŸ¾ð’$I’Ñ%Ä+! R¸4VpÊë?6JÊ>˜¬H€óôð+ + EÝoHN _+'F»GŸ˜ýímÀ³²lE¼Å¨T)ÀP׬q)Öæ(•×ÙþØÑ(]þ´œéøg|y{åß$¸U1v\ÈÓ¯éd_ž¯¬®®•Í•VK°¥y ½–ŠX…/QB `³e9ÿWö³µµÏJ€™``3œà”ŠËSQi=Ê®®i“ÝŽ!Ç=ý +œøã(s>÷$Ù%g£ÿ*¦)‚Âôk†¡Ã|·N æ?r†mDÅ„'àø¸ÀŒ²¸&^¶^ÔômŽ‹KzS§Å¨cÀæàVûj×jëÃîÁþ<Ýæcþ?çÄyTïú@6ÙÀ%@¢HõÁ àüq¨èèØvï½àZý±TÛѶ“ HAò÷*€˜ÿŸ;îì_Ïÿ1Ÿ£˜oÌÿ:Cšÿuæ8z¦5À÷È•rŸyœýÉÞœ1»Z¼“Òu’o½ýöUÝŽ4ÿCOú2¹L'ØŸ5îó'ã×h¿Æ ðùÿö<ƒË?†Ø¿ŽD[‡þE aÖ>°*€•âD1SÍŸ)/¬¬\ð¬[€ºP™­øëãƒVß ø+SÜ‚ülÙ¼ügÀþ²þS`ÍÀü<ßøOߊC˜"@ïÖ7°5¿Bü⼆ ÀÙW‘û5\Ÿ Ye b@ûSVXÒæ1 ©Ü‘7® óÃÃ=='_¹|~‘Ï\"UíSœ:uš +@€5jÀžöîÞ¾wß0kæêüýU…ÄY@ y¾xpã½V€ß“O9ÿŠ3«0úÁƒ_/ýlõ™¯Ÿ™š ÍêÕv2ïY•Ž¡\Ég¯Š?IÜŒ­‹!Š¥éìP™úÆ?méÇÙq®u–k/õÅ&Ð(+ÒAý¢|£Âþœˆ|Í^AÄÃQè!#¨äEå‹a+ùTéÆÚ;×þîÖü»wþúŸ)–/Æ Jþ ¦*ùúôP¥á|°#KžH–üJ ‡È÷F«*«÷YHÇ—ë¹e’%×hí£Ó…¡1€Å’c5@Äç$@n4un£õ„b Î’Nr[h{Ž6Î_¼xÞ=/*0¶ô7ϵÖOÿÀà<-Oû»ÀgNùÌ@€ùȺ|™Þ`Úðœ¨^"À€&XdOÛò€ó)bÀyèçß3ýð?³#ÿ3c£rrø1|8"ú[âYþ6= ÊçÐiŠ-qìÔŸÑÿzgþÿñæÝ™ÔWߺ*€ß2¼Ij=ã™TÛÕý/%€‡ÿÿ§± <úè#i@Ó:±d²¿é-ù(bøŸ¢ðO\áD­°†Ï+ ¦.¬œ÷¼[@PIñ¹Àe4rϘ`G6þ÷ÖÿTÖ @ +àìú_h½ @/z¤(ŒüM0éÉùSâ:±,jšü´ùEw$꘳c ‘a¼˜p¤³Éš8Мé~¯'Aš¸CÖײÅ#÷g Ó'!ê£0ÁÊåËNƒÙÙ°¯ç4%öt!_ˆŸ+$¯€E¶oß½oøÔi°?£![…üE'ê/ +ï¿þoAT»D£¸…ÁX¥òÛfFan¯•X €›[Ò€ühDI-å³ë3\MîãÖ¤AÂ2c†øÊ#Kòe.kMëÉþ¦äC„Q !vg.…¡üìøwØà M2C‹â/1Éú¤W ¸S”.Ø—%ÿßW¯”¾V*!ÞÑ+J3ÞÂEmøö>¡\Áñƒ2¸—`[Fj—¨ï3ßû(y!Gá‚¢³ .¹œ”,,9s)d³«8îµʬKÆí,&wS£™‘€Î‰q”ºº'¹-4‡¤Íq^‘¶|à,žÂUÏÚ„@õOþï˜;=_ý" §N)€Áo¼pâÇ_0þq{Öè_Ö·Ó¿œ±@VºdÀ‰¶ÎîÎ÷šà>¸S1ÛÌ@£;ãU ùÿOèæ—íï‰ÿ«@°ÿ) Ró?KÃŒ…¹o5,Œ@ý”ý ºk¥r…qÝx&P¶*F6õh0ÒÙ¹“a‡¤ú@ùÞ u€€GZô¤†tî]­F£uþ§¨ÿ‰‹çÎUW\Çã_¸Œí`¤*Rm€¥Zö¼[@ÊCk|ÐY‘}0Õbª¹Åóhnîôó +huÄöâÿ~Ò?îÔø:p¯È %³J½âƒÝ± L +CQEç„çPIÉ‘æˆÅä +ËuQP_U%ÇÆ<$ÀdN"+Œg¢lþú¿ç‹†íj(8ÎÄ_²˜Q3Àœ,ÿ¸ä€“ܚÓMq~ॕÅcŒÀƒ`#ÖO÷c•õß38p Ÿ·¬ñ?Ãv9œx>~ÇÞó'þôÿó§ÿë‰o¿` +@üâÓ + å õKtvlëL< W‹àBG×ÎmmîØÑZd€‘?GNþUrsó?ð¹ÊÂEó¾’æ+ºPËÿñèè¾L5`~spVæ?>ýÍùëfÐ +ÿxyÒuWßöÞ€-Qµ˜ÆˆU ÿDÿ¿+㟋Âˬ ]PãhªÈ‡9!%D šh®Uè¯ÑKtFq&U`>áøGÆL•“€ƒ.Þ† €A~:_¶…¤Œl„À½$£4΀ï%@oøÏþéÙùÓ³ƒû,ÐøŸuŒ$ò˜§T®1@}8|ušrh sËûÞP°TÔBü†+ @avîÌ#f1áŒU^x&8:š€æÀùóççûAüÍYþçç‡û{æõÞáåEpÿìÞžáÅCï ˆœÇ =%ÛIÃþV3@yT@ÏGúø Sˆ*ÓÙCÓåŒæI6€1­:ôÉÉÇåp߈ eM¯ö…ýPøðÚ:«âé¹çn£€/9r}r¨¼ZRß*·P€áÿÏÖwÂe­tmÍ*,Rô.‘ŠV™Ï—dÌõøj&Ц¢µ(ßÇŽEŽ‹Iöd(½#åÂscÎÜßJ~òÖ;kj‘™Sb¨p|^ŽŽH°E5õ8Ém¡9x«n÷,Î@K Æúï줪wóaQÆÀ¼¸ØºÙýÓã/}áÿ}âÛ)ÀJy€:€¹ÄÔôùWyB =àÙ vvv€;:þOÌÿ˜ÿ1ȳ`Ln!‰üŠß[㉗xt€«€Áo€°0¬ ìïÐ=`Õ~ûâOŸÄ[o¿Ý¤À´&}™‰î.ãÿ ÚWõ¿t`^€à Hø?í¨ªh ²£¦ Æ÷É’Z‡ý9ê¡`>’ÊúWà ÿe¤šõì7ƒ‚üUæªS¨~PZ¤á¼”VŠϨÝ! f€ÖÀ£ˆØô?5wòóß° ¨£  D†lŸs^mt±µP|B-¼\€ÒPDÄ{ù@‹Ü”8p‘í`x+0._^Y`¡©èÏbîÅÝÛïÞ3{úôð@OÏðÂÊÀÞݧ_¹¼È¼a¹»#ĬÿáÁa ýÓÀWMÓ ‚‚¼áX^Í']ƒ3õ„›7é0'€³?á´ã­7úS@sàöK¶`W€l¹Æ®€¢2ؘÔjD +®,sšú wrÏ„ËY$ZJ4ƒi*ëî§ IÞNcÃ@}éÛ~&®ýûkªìOˆÔÏ–Q™Ä iQ¸AAÀ;öèûª{]•eâ¸t•/ +¨’£é¡¨¢dtÃs#¶©•® 4ùÞ¨ òÒ…åó’OŠÿ©]´–€’ð£C¿TòùµŸ­•ž¢Ñ/`XšÀ0:šÉŒgÚ:Ç»»GG¹—€åÜ-AÏÓ¦p€ª6‰LƒO„˜ýéýŸ;*ÿX=<0Çg/¾ß~þÀóÏ¿pâÄ7jÀ±AhF¦|ôgN€ã÷‚Ik<ø$1&H¶# ÝŽŽö®œüS!ÿc:÷’j¤˜öÿ‹øUüÏO2:z)’Í/€9ôé¨õ„†šPËòžK €'ø¹ê½Ç7zÊÀQ_vA".ÂÀõì7…Ùÿ©s‘ÿî²A]˜rå`$Î}ë[ßW;=5Â7æO ƒåð@wXµ¸†LªÀYíN&f¾œé{›¬(Ž õ¹*HJ„ìÔå‡q¼2L«=Q–±~þŒ; Püùù¥—._^ĉºüÃÅÙEНE€s°/Ÿ_dIxv&¨Àÿ{†ÙNÀËœÒ €­y ’3õƒ›·¨‚à]§À‰ßAþÿé•rzÀ‹»w,;S.ÀD‚ÞhÓö__-!Éõë½¶VY«”ß)—*åh¨¼~¥\ŽfÊW®¬^Y][»QÁâ•õµµ2îýõûÑäal®D…rå'Qôt¡šçH¯“ì×xÌJiíúõ¹V¹ºZ.¿³>YY¿ÎHz”ãõʵëï p8v¥Ä`À(º=åÕÕµzÇJ~­\*¯^¿¾vu}ý:_YD°ñ`eýÊÕÕÊ_ÿõ;××Yò|›Q¹ïÒu+ù*†+W×n\]Åò_Vþ²<à WžRɧaÓ赃e¾úÏ.É´—¹¡„%îÆuæ\.][¿tiíÈcœÏµë•™ÒÕ«åÔDnt¤ÙÖÙ ón¢R¹ZY]­\Q¸ãªsÜ6€?)› ÖÐR àâbÚúï8Àû9¶þ€ÌŽ÷<ÿü‰ž?A¤@Ü'0$@Z<'òǨcÛ¶{Aú5€`ýX ÀÖ˜àÎ;:Ú¥œü–BìO.Ç×¹<jŸÐà+_iÿ«=÷õö‡…bóŸÀþaB:7è@7]ÊðÖºõ+€„ÿC+€cŒ`uñÕ `Šøã €R U€2¦KQ¿ÖpF«*möÿ¨‡º¢d›‘š +€%Jýkÿ’ `4S±~Þ° Hð~:Ÿ¿Àðÿ]mó áß r6Òœ  Uh¬(Ì @ú²+ £<¡×)æååE¾•ƒ³¢};[ʃäoáyZ +sõLJìNCÄ®k h.\Æ%Üínyz%4ëÐWh†æ9ë.ÿðßýÅ_üpe~xp gxñ‡?\è™e%ÀåùÙ ggWÎÏb=¬½?Åv~Ø;øäPhäv\Æÿ‘5èŸêCå xé%–•ݔŠr!Î;U1ÿߢ@N€÷ßk¢Äÿ?% §ÀúpôÓÓ¹LgW¸Ïuãj‹bâ¦ýÄ€ëÓûåÅ×[û./¹PÈON3“.=±F1}å´˜13‰§ùÉI¾—ùñŽöz\¦aÏ¿ÓcY¾DpI +Ok»63ÛõõÿpýÆë7¢¡è'"oÐ5,wî8}Ò÷œäUÐë|Áã8PRò¨ò惗˜'¶pM(¹ÁdåBt¸7 …ÍO³ Ó,1Ê^˜œÄ:$…˜Æ= RX v-òC“…èi¤×j;èBV€è£™l›ºÏLD(º +K8Çmaø­Õ± ÿÌíx` +þ¨²þææÂ3Ôi +ÄûmÆæ×*¾€!Š<–j ðœìÖòßÛÐî ñìtÀ66 Äqbþ'•cìT^ÅÿÇ8~àÄñŒÿIû1jø¿j¤Ê~R>‡NXÿаûÇ °:'S‰ åȾ]yÛzˆ‘DpÄVòp”ÉtgÒáU2 ðÿ§óþ9&Ä›äI'~Íj®5Ü}÷ÝúçÔƒ­Q`á×udV¿¬Äš@¥¹@#ô +µý›5Vlç) +P4ûB"óò¨jGÏóô·ŸRÜ|=èÉOE´ÏB±& q0A¡'| ¸m9^€¸÷÷= Ð&2Ý ½¶Ž +ߘÔ+°‚¡rÚÏ΃¼èç /¿Aoûú!ðñÿß¿xeþ~bvñÏWNõô ¯¬œæÙœ^™˜½°xn`÷nHW H ë°íé í¿07ˆãõ÷Kf°ŒŠ=¸üÊe(€ÐÇXœª¿ÐÐð5@C`üÿÖOÅk‡Þß;ÔìÚµmÛ¶ööö]»výÑ®û{ûúðöïïåÌÐЃCCCû÷ï?¼ÿ‡° +èÛÏ퇸öÁ¾ý½Ø¶?Ò e±m/v©¸”FßáÃCC‡ éèùÃYŒ0~pèAy2§>dˆœ†x„|þ_ä§óÙ쿜ž~´wè0–þÒs—ÃC½*0´¨÷Á>'“€åA>îGFû÷?1d%Gɼ¤Hñàþ>žÉ!$à9>ȳB +bHã,ù~\/_×ÍKŽ£ á ÚÍvDF¸z8u¡¯÷P¦o×¶¶m¸eweÆl×G³Cœã¶°üöi‚ú€ÖÐóbýK€þøÜİ@ò4pS|iðìÑg=Ëzªgâ…ã‡[ + I €÷b°Z€ ƒßïtöOÛÿägrÀ‹øÿØÑGOР )þ¯6þ9¢ÏV(#m~ƒÙþ5­ð• Ÿ„´êÜRÀ€÷`¯ÿ¬åÿذ“aàÿîÌ“óSÔŸhâÿ&€fCÆæ2é^˾FÚ:ÚïþR{c â¯æ€ÄÕ„æR±ê§5Ê,[_³^v.“ùY `5©ÈXêׄ†MqúT*P +À"geÿË7ΈÇîWÿôIDAT÷XX7ˆÔŒ¹'²a>1; v29µmü°‘BÂ…Zæ I^2" ­¤p`çÊÌ;>5¬}q!n3€E&‡Íÿÿ á~vþÊ<¦ó¯\¸@É¿2¿oðô…WNBñìÞ=|^Ý[ @ ÿa ‘ÿ÷Ùë€ÀÀdî —›Ä±“OÓþŸ.LN?MGwRÉ£råÍÞ2RO²äÊ—'€žžD•?Š©’žž¾tx?]“,×4OtìðX~,«R2†ßlfWG;ßþq_²›ÆöìOžÁ@ÏÀe?Œþž¥• .,/¯œž=½øÊûùÝ·ryÌjLÄQò(€-…E6û\Pè€Å4ª]Ñ ®¿v!0Äp®þBpë–<Ñü—à¯jÀOÉÿoÿkê&a‰®¬®W +£l˜+ðí7¸e¯”W+×n\_¿±~uµüÎj”ʯ_/—×××+ëäþò:ýìåëåk×ËQ9š.WÖ×Ö×Ö®]¿¼sµ²ZY+å‘âH4 JÅže°~yý:’ƒ×o\ÿû +vü‰ž•ëoå³È ×o`ü&+^þ3l¯`çõ7‘¢r…)EëÀËëQ¹ê+à°×Ê8 +‚rq[¥‚büýµ¿¿¾VY½^™AÉ+7*(ùu+ùË×P`%/±ä(öÚZe=Uòõ!(lÂá~Žc¿ImóÖõÿƒµ +Qåï¯ýýJV®¬²ä땼|¥¼~ƒ‘ (Û¥K¬r(C)ü$ŠŽ +#xþïh»—÷RåR9¢•8ÇmaØ# >› mýãAIú_ sQöÿü±ã(NÀ®Æäù£)@ž pû_o +`´«£­­cGûÆ1ÞÀ½51¬6ÀŠ®.“ÔàÕýoÀÿ(ÔzìĉcÏ&üß_Ãÿµõ>à]ÿ¤ZH¢`‰¢Ï·ýׄî ðç®òÀÕ·®Úû€\+$ü_`5zð<îôoÌïôßÜ®h r¥ì}‡ñ¿fÄ6ªA£um¾ ;\z$ßÉ n9ž;W]½»xvö›Þ±SÍ3Héš@Uº û¼¦µÝ&ËÉ\6';éÀ¾U΂—þÍðÊÙùÓ(ó)‰XÞ +ÞØì.ÌÿÊâ,ÏLçszJ``÷îݧò×jŒqÒƒdôa\$··Ñ>'â¨,#‰bÒN]@¹ú €<€û b @þëÍ·Þ4þÿéOí¦tT +CÙµ¿_/'F3]¼3¹ £ßqƒ«j"æê:h´ðžv mœÃ -¸ÿ§®¨©½jµñ4`t½âôÙ£ÿt6oó0ËU?«Xò4Ó`Œ9¢R9œWE½0ù$½ žôɉ¨Ô#ïmkùÒP_ùÖÚ*› + %P6K@úR©r£\ÊßP¾²¬r!O³c ¢ˆžCÎ*8K^îÍãfŶ"[ù‘’Ýð퇡õ@¹œÏ*POB<ñ”œÇÁdœÀEíÆ“½­£3c¯Q«°`« + è¶oŠÚ€V%=|«wú·`Îz'Íð-².À¿†€þ|S@Ÿ»Rþ;;GAù ñm ü b¸`Ê8àÎmÁ@ Ð — ýïLNøÁÿçQXÐ?æÅýDÿ׎vÉÈ7Ê—Ío.®³[8 rð~w€¹¼ +àêÛþFÀ†u¡@·ñ¿ž9b|Iu (Ô €V=Æ4˜-µ`ÜÏYµ€/³îhoÀ°2øÉç1.’ìÝUÿI,œ3ÀÊEUP ú‘6AÔ‚'´¡ T¸/{“«îÓg ì‹pê‘< zôdŒ•Iƒ²EÆ<³ó@ìP&qºnÞºæñYà˜²ž•¢ ”[Ú—â ÇÚ¶ó¸r¶;QÂþ^D þ·þ;úÿøÃ?¿üçŽñŸÿ¯ÿº0?Ü38Æ_$Á“âçÏ^¸0¼{{Ϲsó + +p£³öø?‡êÚ÷`Ÿj$^:-¨Χ^&…â\ýEüo>€¤à@âÿÿM̈ÿ«Àt4Ô[ˆÊWW'F»;ÕÝŒ9v]¦V‹Qà +À„ìÓw2€eR¡-Yã:’*hôë««…¡Cئn’|ødxr°ë?½÷‡ Jê-–£lÖÀŒSyPÊáM÷|e{sQ©²ÎlTÐØà`BY?ñ 8ªõˆAZ W@æ?>ã¢}2 þƒå`ÿö© ¯xû-kà7$oà„ÿcÃèt£à¦Œ-ÿñÿ§õãH–F “gïH ¥g¬›^vç[Žg˲ñ©˜ÂøŸck¨ çŒÃé¼0Ö‹’OU®`•¹¿³¯€ÜgØßSxð ùë0óÍ4×f¢Â’kG¹9؃0Æ|·PÔÇÎŒÕrÁJ?ÉPF¾øÈ\SS<‘ÜPT¶pè¨èù+õ¸êÿù6`v€çÛ]£ÚŒ ç¸-l{’4C] @‹èifýÃüQzÜ1àôÄ1òsÀHùž=ö{ôóìŒ=¤ÿÛîà^óìäý6nÛÖVËÿ~X@üÏ +|S1f%(ž¯á¤å“úãê«°V¤}7ÿ1ÎA.øMñ:ÿöîˆÀ p@’2¥B ÏôOÀûDé"‹B@ô»‰  Œðaú‚‹ûj=§Íñècr<ðÀ—î– àKw·Ûß&<þ4`¥,V£‡*yˆ°ø¬µ—*ÚŸ¸Äœ¡ùŸö@ ÇCŒþþÇîÝ=»5#â=9o¥ ¸pzxé_•æ¤ÿù³ ‹gÎ., `N¤!<=Ö—qVº'qW’éb8C¦¦¥ïÖþ0K6ìD¤úêI@Å`5眠 ÜsîE¯w ·“áyïÓ9@€{kšZ,…'.ÿðòòéYÜøgQÒåyú;N¯¬ÌÓþÛ9z}‡õHüY`A€üQ©6w(¾Oƒ•VÀ_W€WAp²þ"àüŸT€þÕ +àç£ÿwß_wZŒ¡Þ(—+Êxútª% nÆq½ ˜€d‹ÑÚ3Îæ†ÐÕÍ ÛÜÇŒŒ§¼ñfGW +öV@"h4Oò?‚àåG× ý–ËcÙJ‘žúØ}$:0»Ûx®šÎZÉß™Q)ãcˆe¬~ ‹åKCôç 8>³%g2ÛÀ©*ƒ%/­E½î(…ñfž}c|ÂJŽ‚O•Ëù¡27L±Î ‘tª!÷${Tâsm€àÈKUŒWÌm €V 'K3Ôzš¨ï:€ÿm†–MÚú_øÖùA,ŠÏ ìH ‰`—€îP`ßy@öÛ:îýýàÂL`üô¿_eËûA°¼•…äøQΰä,uö¿xŸÔX0ňòeó$Q°’±£Rîð ÿÁø'óÆÐ™°ð–«o×EÿWÅàãü/§#Óé¾*9ûƾÆÿÕ€Íé2˜Ì"Ë Œ;&mг>öhÐ Œh¿ + Æ£ž6 +ÄŸп·_Zí€\ wÀGZKà؇Á –\¤¾©)J¤*óÄJÍËdçHÞàăôþï;8pP"€F0kÂí²’•g=¸Ó1V¤3acXÂ:û€½ø¢„0ðOÁtWáD©¢xÝàìaט +#ÝVný¥%¶„˜Ÿe”à¾áå—.¯°?€± l(¯ÇIŠ&Ò>Cÿvoß¾ýž»¶óÚoß­À]A–Ѥ Ä s ß[µ +r2­ÂŠmú"ßðaðÄÕ·pã=)€ŸÃþ§û?áÿ›º%c€FÙh½¤*€ÑUÞÙkk”(:²ºbÕñ~ç;Yò†uþ—ðÕÀµÉðZ`²)4G¹rd: øÑ‹3¬`ßCÖ˜RB=VUírñóôXï%dÕ&r™‰œ €¶ŽîÑ óglyZ–MQÐ*:4–cÓ­}idÌ-.Ì8Á§TlQOesÀ:{;:L÷mmìÆ¬I»}Ó€Z@M =¸%ñ·i#5‰~H@üoö?='Ø À‰c, ìÿ:<T˜±€êV¦ÒÀ£p¿Mð¾áýF»ä¸j=ˆÕ Æ)¤?1¸k´Êv>e–».[ +À”–¦Q¡ÚÝ¡DU_ìf8ÿÒå Ãûö /\þ·—mSi°ÎcBàäð>€{(îÁg;ù ö§ôô÷ìñ9@ÅaègdCÚýðÅuð!àÀ«nÞüÜðóŸ2Püÿ–øÿf•ˆ²}—&s¹Õ• ž8¼Å[Ø‚{Ö<ë˜-†¦¯†%¢\Z]]»*Äíïìèþ‹–Ê×òæ4Ðk8ø$,ã&¸ØûrE‡³ö +A‚–t¨}W;?Ò*÷ û¶»Ñh_.€ò ¾É#S-Èœ® jªpe:$ÎXY]ýÙjiäí‰Â@éÿžV e[¢Ð<¬8‚ª%¬çcJž£}ÿ3Y>4‹##xàí¸³£;G§SéܜⶰôLm†O× +€Ä×mµ Áú×÷[ì`ÜOÎä¬ÊÚtö½àìOˆX8ȾíÖàÀ½Ÿ¡€à`{‚¶6ÅŠÊSôþ‹¶Ç%¦ËâøÑc)þÙÌî÷‘U(€=’ô11óEÚ1:B@öõœØñ'–Ò€xË{ +ÀøwsÚÀÀ¤ ~6ÄvþŒ€˜-9!{’þõ +›âQ’ÿYòx‘<0·õ/rX @¬¨Œ‰êè ¬§ thÕæ.˜ø:ø¬|^–ìp18|fžt¹ðƒ0΀#ÎÏÃü?}’iÀÀfÇ÷ìÞ~Èn··íÏZCÙe÷ó{ÿ…• çÎãÍ× +³Ç«åYgo^üWT¤£1½Ù¥^¸z©`E‡e*Ï:ÁKÝ4¾çæ¤4˜–οtGáœê̳'°I™ÓlJÀÖ»òÿvþ{¶ï&Ïóƒý(RF&¶ì‚‰:š§È[48]î ÿ§€ ¿²N ðæÏEÿÿoR´pÏe{A¥ +UW3ÞŠ|À*ïÙ§xSÒª®L]ª¤i4b¼¥2ÿ±4¤è—u䌥ÿ»BÂé`OûΛ,ù§¸áŸ:’è 1*Êd{Q`žµ âgçÙq©6Z DÎçQ…üoGFºr44ÍÚ…W¡ é"a»Nñåʾ\¾…×{lФf¡ÌšY@@†(©DfÉþôyT¸¸Ý ¾BU%œâ¶°ìqÒu1­8·Ñ+Ÿiíž²þñ<Äçß«+€c°ÿñátê…ßÛ&ò¶€<øH,ǹ ‹'ÿ£((—ó? Ͳ³€k´Lþ÷ôš £»ì ´óEù²ùÍ›ÿ;GGc€`@ÿvÜžzŸ'Qãxâê[W½/@s̹ð·fã~¬Àkp;êÞš–‡Œf>\.× +€Ûðpˆ¡Å˜þm€ƒ!!U pw;>í_ªö,5òXgöñÃ_X^Œ{ -H¶ÆÜÖÑŸI ”˜àTŽì°-yIœ‰¿÷ÊeÍ^‚`ƒºênë(¿·gŸ»ÿ-¶ðÙųdÇÅ…å +°HÀ4..ãTϳ?$Z½ÊìòŠÐÿ–lÿç~YÑù„Úö±#ÝеóÜ©lpî7‡½æ¥<¹4ƒ­Æ:†ôè +Ú;ÆÂ⬻JDäDˆ— ëÓôg€‹Ðÿ ¯¦Ž@½àO›¥sš˜¡Øyë,p_” À@ +àWj ðî»ïþ\=° ðJDÅé!F¼ås< ¶ªÓqGJ— ëÓCÓë)K·*ÃåÉÆP¬+ðÕv “G¯ÃôÆî}ÏÇ6=YRœO¨]]±ð“h,kµã‚ñ5»Úy’½ÃǨb/•žaæbÞ#Qv¡.ÌEî±èÐyi ¦Œ’ß°‚»Â` „U† ÍTꔬD(úéýìõÈ1 “>”Û!f8æ1Pþr9¿ß¶Ùµ²ýt {`NŒtƒîèÈä(pÒâÿ-Ð +ü>jŒOáØf†7lôÖqd_~ 6à +ŽŽbÒTP€×eºwüÞæ¯Oy>E?@b†`ùgçtt—ýý¢”€å–%>zìÀ³:ãX§ ý`}Q¿F,HÇ}ò÷×µˆÍÌGéÈ™ù¯?3Gz*˜âåÍœ0À[Wz(Ò=‚ÿét´@yñqÿÿYùjåj%—·ã[ñsÁ¿Nû)"McøàÃäÿÄWXCÀvVøŸI0¾sùâ +iË+à«þÖ[ c硬€îoíuá\+./1Ç¡ìɹñÌÚÚ”­A&èðî$ÿü[±RL²°äݘç:[½¼0LçxŒ`JQ%ˆ“RÀÏ%Á¹s6Y5Ï\»ÄŽ{•%³~I+6@íƒ/uK3ƒ‹TW}M Ä0¡Å¹oͽ8Ò‘j«Ò®ßéùë(9fæŽ VÇ1àrñÜþš f0àððÂ…sç(Møk!úÓÏä¥WV^Ñù(2ÁŽ›Àûó…óÿ‡~ä@NH€_ýêW¬x÷õó·þì-¶ˆùÿWâ~·hæ.¸ +Â?7Â[÷¢+Àæ®LØÑŽq V¢Õ+¥"x”w72"âöæ®ô+ëyy‚jȳ^ÜÀ,x§k/"*žZ;=É÷X^AïŽf˜7wž*”a{£ä¹ØbGnOñ©ÉT¥0”‡táÓ'UòU½pŠI©¸Ò[1²ò¢ £>Ur+N”GôÊ¿)ˆÂá¡Â%Û,ØNFÿc|òDÕh¦{'ó#Ô=Å)ö¥8ÅmaCèk‚Ú€º{®ÛÀÑ=ïïëA Up4¼y§¹å3?0ªÅB ´À… úùï ™Ë6;ýîØÿ(©™ÿGœÀ¼‚P¸ ™Fð>©_#›¢ƒv>¢:o Y.q<55:Ú=:.aŒ‘Œ9 +ã¸!tS¤]Wß®¼e¢<­ŒÿS=2 ùá^Å»½Ž˜@6P®ðõ[¼™FGG]´è ÓƒIŒÆŽZá_[ÁU~xGxX n’˜(€/±€^€”`uÕz“ÒÔãHõ˜8|Åæ.úøè ,rnZqWZœ™cœ^?}/.žX°ò°¾ d þØ6îô0cÞC3Wóß$õ§¬þz{oeñTø; Ì@nº¹P¥+ªolwlz· ’€Q> °<¯öÇv(ÏèÂ… ˬØ`U_¨HõÚ€ƒl ¸Òh`ø4$Ð9/œ€¢@I½"À—¸ž¡`Ou³?WÀöwð±óÿ­é Ïÿê—ï¾÷î/~®–?ÿEÂÿ¿úP7-NcUýdaŒ&Gn‚÷b.7Øë(³?=2"v ‡‘JŸZ[-•˜ kx{SàVÇö™™™rÅ*Çc ¾-›Ý@G€V” Ù¬§«Æã¹ÇA˜ÇWÀüØÏøŸ:#¿š}LZ íÐÐWÅ„ÀŽ€Ê(Ä‹0ÂnXi€F‰U^Èúè#pЉ`5À{Åø?€Ÿ§øÿiÛÀ.~Ømm.›Ñ« +™Œ¿ ÀH5i¬ Å´òýèf?[å6Ldë¯4=“šŽ6§í¹É¸&¦H`~…"X¶83}x(apí€hŸìo•ðS4Û­“A4Š’OÓ]¨vðr"‹](@å*ºêðYÜÒ;^r±‘þŒìôp€éÞÂOPò@ìù(ÖXƒ’G3H©b"ñýGB:ŽX•gl,›åƒk|bŠÝ,Á2Ä㔨ðmÓÓÎp[ؼӚ¡.`tÜ×±ã>ÙÓ@gW[l\§ÆjX‡» V:’`:Lê€h4íy· ´òØêºYý*1–¨PR ÃøŸPý¿Ðì€æ?Æ¢zɃÿ¡TÂ},·Q>”@.ÎbµüESòˆücö Ü úG§‚ÜP }ú=™RI+k£ÃB%¦-Ðô@LÿfÂÀÚÊ€3%Gä}ÓþÃ&MyüAúJ<, ûCÔ í0€×Èàöúé€á%€Îâcî9¿ài£‡¯QáIþd~€SËÙÀpüáyί\þ7ò¼³ß<T(ëùzÀÀAqú >-þwš_†8·Qsþü¹ ªÔ`8uÐìE§cFñÕ³ Z¶¼ªaõÅùÙYkK€+tlvn£[›Îƒ2Mƒ+¹ÝÒ±…«Ééœýj¬ aåÌ… P38Ù……ùo‚þ¿iWa` xpNÜM»Òt>íP^*œÇá¬ýùüOœºà—Œxëç~ññÊ flÌÛêP&÷UÜåä¯ pG@©°4Ê»=šš¢œ7QºîîxdDÞGº)³aG³<îfîL–9²}?Cê ¥"‡ê¡P`O€&Õ"3$Àêbi½t €°¢Sa`§ +jÁ+ S%@i LÅanûJ™Båïã’«iŸRZÉg¢R¹Ð+#rcÙ +£Df¤ÌÐý¯ƒ°'@Û?¦ €±,È?›ÉªcåòDTíîêÅÓ”WªlÞg¸-l ÞPMP먻ã`ûƒ[ïéOïaËбëè¿®Çý³W=k è«kr“-¾æL»bª<Ÿ­€îê÷tuÜÙÁã?üyÖÿ{ÙŽ5ûŸÖÿ±ç©b0“†GÒ,,ŽJSŸ–>L ÁüÇ8S`43>nìï>ýÍY`wr}ÀºõCaB5ïXG| XV…#‰x™€ +;Ô0þ7x9è›A„i WÆ#Í ÿ' +À|Xa.)€öƒìô/@¢ôOL<`6 +€š?âù”çØq=󋛺pd•>)6ÀJ4ö°r“ùE«ç‹ LÐp±ÚÀ*€”@A Áù…ù˜ÿïgÀ‹ËK+Ëñ¹îd%€UŽ3GŸk¦°g@zõO“{ºH(- çÀy¾8F?ûeÐ e?&pÂ+|I€ø?åø¦yØwà¬{L\8GÀÅkÇ<Î ’„Ç«†óöç +€´ `ÖÈþý÷Þý«_üüç¿øù/Þûå¯bþÿðC»Õ@€¥è0›ëO‚¬u>”9”“GNU|P﬷‡x™½ú±%øÕbôøXTö8opŽe K}ü\6:øÑ˜Y:_œçÉ´É–²Cj«Ç6ƒ¶ +óOZ0ý˜x½¸>E×n\[]5ãǘ"O{ª\.B:ï ’ÃQކ&QríBo„ÊY\cÇBª€J®* åé¾éŸ„<¬8¹{4¼ä~(z⤠J‹¯dË<†Q&“•qSÏå¦Ê…‘ [W°ØaËÐ2xC5A+ýÀð–ÅK†í¼óŽvðëÝ÷¶Ñ¿ÏÉ1À5À19ø=šò‰h™ÓbG†4™cÀÎM=­õö‡ b‘?€”Ç#Rfÿ{ÙXn£ð?FÏ=AúwÛß ãË¡c«ÜøpdshVŸŽû3øÓ2€V¹×}I_º³êƒÞ®¼zp +Àø?y€EXR¨ŽϘ´ rU€Ç]ÐðPgç°Ð„s}CkÙu€›Ï¶Æ6‰K‘òQ˜üâ) €‡«\î8xÐê@M þ†&ÒÿGr¶ÑV¾8"½TÂ6îó,Ls€àQ`Z¥pX»¡Àbø¢¼Òà®0žÄÌø¸ä‰`ßÁt$àé…Ó|]=jzÈÿ+K—ƒü9gÚâ4§1‰éÜh3U ÷¤}å\µg¨ãP’¼Ï`…LqÖ ¼ÚÖ+Ÿ.<ÀE[«—Bå…{$†0aÎnñ¬<ª8‹kÀ> *óø~æÀ + +óHa5ñ|Þ +Àø?íøÈœÿñþ»ïþ$À/~ñøŸÈÿ‰ ¶ñ˜úëÉýq¦«³7ãX&ë7$oÜÇ1"ñ™ð@£ÖŸÍ ö§ kk¦‚ E@QyZwÃû:˜øØÙŠOk  ûL­Å¿%aã?u!ĉI +€’À×ÝP*™ð +=F/Š:‹Æ7%Ekò ä0ä­9`xþ0̰ðàó_"±I +õ`Èà3…ÂÓvzPÊÚ_§&þŸd™³¬0@971Z(OuBW± +cËÐ:ìNkˆÄ`„sô‰ ïmäNò.­ðûhíÒpÇ +Õ3øt—ø³'ŽèwÛú_ X§@ðÆæ Ò;q@ót´!{Ì1ýìììÆ®”“ ­ñ¬®0Õb½‹ÿIükC€<Gð¬Ý VøÿSÁüß±£³÷þCôPŒ€‰û¯36Çs¼Ý 'ãÿ:îÛ¤¯(_*¯UÖ*º»M,㘘˜ˆŒí€¼o_\AQ¿ósíAÿ?Ìf郀ˆÃ0±(€võh€XØ_щ“.€/)"`fzhòM5Þù’§ R€ØŽ&h^7ô¨?`ÞìJf渲Y%ÎÇo Â<ˆ´àë&D¢gÜ€$Á740Fª= |²HÀhÂVLÆ%?Â’ã(åéÞéŸÙb9²!"çðµ’+¢9EÑáCVrÜ=¸xcY(›É|•+OärÅ+…Ìȸ€y08ÁmaènkyÈ—ä]Uóß‹ÓZæÁö”ž3à]z:w€I á+y:íc\ë@mÐô c”Oc™‘÷æ=òÈŸ¦€.$ö´Ý{o[[ÿ©Øl +ð?>ǽ!`-#/Ь€­æ¸(VÕÇ5þèx0LØ¡> â=Xs Q!€üà!¸xg™NÕ˜ ÈÈ€ò2`™"üÛiÊ¿$z‘>&>æÈèŸ_r½Úu +Àº[¥ôNyþÙ—ƒßºÚÀ—6òøÖ•‹FÏIxžÌ÷â†Q$úø\Ô ,¢¡ Žˆ=dcgàº$å`Ð[ŒaÚ€Oyxiã\€q1GFÜÐ@:(J'ãh|È iú–Iò>ïÀ2Mqãz€L¿Ä5føó팚1ŠïŸxÈþ¤ô*ã- +P1‰ và ¸8IÀ=DSÀçªHäu –7oýêÖ¯~ùË_½÷î{ïàÿ[7o†dÁªvÀhìP n[ÜÞ¹€Å°Y,æwþ•{ p÷Ú}Ž›8ñhU ÜØ¢qãÊ`} EÑPðÄü? 6M{þ™^û×VËÕîbˆØvuF— H{ŽÐÀ7ר¤2aJî õóG”fJ…¾†»̪„©wêç€'å»°‡Ê€ì€qy®Lສ +Àb /œß¶° ìžj„óKNeŽàeNiŸÓ°ƒ¼KÛµÿ4k) +託\ºvæ4°Ö8zœó„öÓ>€Ì¥“GÀîÌ’"PÕàçÖ@(ó°×"Éœ*rhkóRÅõÿ,45ÀñZ€¡¯›Ep Íá­01hÖ +U +€mjþÕùµ»¦.àí«omæ0ûßCå3}$UðrùêÕµ$@}ddûË þ§¦/ôÓ0ƒñ&éŸ_±?‰=Ðÿ£õ +€)låYL¼ ýKÖ +àËíô'¼ýƒ8¿ÂÞïüio =©Iø™ ‚Àø~¾KØê 0耓»è¸ ƒyªšÒ ~Ü UPƒùIT˜W €ÊŽ ~“o n@û¿™àBë1‰@íòò&¯­@‰b-áK„æ9"ÛÃçVr½©ÍbAÁ œ Y;¬ ÁÀ*€sËËg˜öÀøWpD*€gè1+‹Õ\_;«ä0 œ»?“»ˆ5ÀG~졪ñÿÕûï¿û>À{ïýò懿²ºAw[U =}ð8ùä/ÊshÔ=t¤ÃvÀ3æ0µ»Ø=o!…¦=$J£Q‚î†lƒ€)]#(ªOdZåX-=£20`<­{¢)ï¹`%gÃK©€Äà*Âr´…•Ü=Øå°9:òO²ûJ6” £Ú”1ó” Ü]ípzÛ¦°®HbU0À½í È;v`.C£YÞú¤ûÎ;±žéØ +€lÛ¹ã¾]ª,¯þ`$]ZÄý+–°M±ÎJ´Œãx Àæ=~š~DÍHÇ Ú“ï P5öÿ1Öø=ÚϪ€j´ñÃ(’U3Tµ Áo.,¸`”no§Ût³-@\ çƒUjiÀ[±ðv=r¼›xcM{+ÀàB/îÐ…RüÏ]÷ˆ!ƒ +°Y€kÛ56p0Q±0 `q€L-€7øgí>âôj8F ýìÇ<7d.&-Ž)9[ˆÿû{úõs6yLpÙžd@è€*·û_ Ÿ-{ö s0œ>iÍáÓ­¨6ñ0O÷¨YÜmyœ¡ÿµÂµäp{KŠ0p“{ð‰ù?™1 Ð4À=tX À7O?Êë0€+Â$%íf^ +€–<ŸŸp"ÀâE(€¡~É@H€÷1Á:O|¤Û6‰H<Š¥=eXÛi€L{‹€U¬^x/ÖxªbܦF&ÜÃ$11‡S TyÖyaÏñc€g< å@BÁ¹[Ä^`Űä|î˜ ÿôìoâAVôØA¢hìÅ<É$*Ê1Æ0Àª€+£\M– +c«àv {ª¢Á੸ÌÚæ¥`§Å˜€V6èúÞ8À<;Ø·©2ù‚HÅ 2§¦ÈÁäßû ³cT±à6bZêûòœ<»aF1ô´™hC9Óüs@é1w4ÝÂö¶.FúQ|¨ä2þëÞ€E-a̺û Ìjx;àfµ»¦> ôß“âFš 3x<À{ðn2%.•¯¸¬ +ôðºüG5ü­¯ïßïÔopºwê׿dqVï» +H‰ž\g‚_€ÿ·?ûÿ øÿáƒɈ󋯱`É=ɳf±mÅØ[ ÖVÀ‹ÿæû7V °IŸƒÏÖyR1Þ +@ öÐ~WAøŽ|zÒþOÕÐcxá›I@Àv€Ë›ÇÈíÐØ,ÔÆèÒ5ö€ÅͲOƒÉ´ {i#f¹£Ïr¡5LZßd À>¤cL/X?È…·•€ÏO¤BÿŒò°Œ5œÞºÉ8€_Ý‚ +xïý_2$ ®øð£?æM“Žx¨*€ +€÷%¾Q} @qÊZ°=?8ÜÚÌùóÀ=bòOŠâ•ŒÏ¨ÞúY·£y<—Œî‹=¼ªº°KXy(¢už|Y+Å@xêš‡åø¸·ˆ}{ø¯è³gØ+õüâéážÝ|y$_§!ôìÛ»w;ïÏí{¿üå½_Þ»wŸ{œÜ¶Ðü×OCüU‡¶öŽÛ:îø=P-HR*n‚qÍ À{±>i :ì5òåÐ$¥À¨¤ßà@¦Ø•uö4åi=Ç­6í Gn­ +J•­Úît@t€jŒÿ˜ÓªaWÛ½I)^ÙùÉìÇÅ  @³út|M + óP¦º?Ÿ ± .àí¤7`º +‚(Æ­üE€|ܨÉ1£‰ÀÿÕ½\­TR! :€Zþ/®¯÷õM¹4Spú—@ä¯kd"à®öƒ¢ñÈÿú­öÐÔa’3Ã×{â7¥˜Wðt¶µm A€IO€ /¨é pƒ€Mú Éa„SJ<Lå1 9 úêøßæÒèØq/{?±ÝðûŠ‹°V˜Aa„`þïØ¡û!í`±Àµºîšª )€(…®G‡2£Ý<¡„ÿU€»”5q `¹ü2¬%½ÐàôÿÕü_$ÿ?ˆçÈ Åu`hgKMd$3x¯],þÀc>büËßðHU%@Êð*€³AøIÿŒxì,ëÆÍ„v plSÛ +àÜEupC™ fN\¸°Bö7ûp`@?gc¸@§CçpC­ ÕÀ¿½üç|ŒêA +ŠÂ´Y 迪ëH‡ŒçéTÇ€þ6òÐúoÝbŒ;]¤I”&½8Þ— KÊc#—à#Ž5µªßÃaQ cä¨j€1.ÃAV‹ìS@}?Œ¤hÍðù(ð?Ù<†+_ÃÉG± +€nPþÍ÷ß—¸uëæGPHþªb`oÔÄø>Ž›¼.·¬ÅÀd&áj§„{Z‰à¾È6ĈÃ-µ×ø[$xY¥¬øw9¿b­>€ÄÀ:€<¸­Ã]+Nñ —søÿÊp×]z¡¦°F¿zðà ¶÷î£ èÙ»p{°?²1ÀJ€{ã€àã„iOI+[-†qàh¿&$Ò ÀÆdJì{,S¶¤0ðV ïÏ¥t)CˆÀæÄІǥX1¦gy5ÕR/ͽ™níÞŽ;Éÿ(²ì|ž›BP^3ÿ;;qËÌ€Çdâw* +`¢Ó½U`Q€ªHóv昂èËŒvá|»äȱ·Oá΋¦§ŒÅà’^ V€â¤ö€®û¿‘ÿŸŽ.Á”!¸vf¦ÂkCÎ$5Þ%ö'Ì`äQøp}@UKh†GÄ>Ø~ýÖxýCO€jzÀþKV‡Pç`žò8ýoPëp~…'×ÑA¡§±´xîœ(^›ä ý:ícobä@¸c?yZí¼ ôذ0¯Vª .:hU b..ž'Eµð¹ò?ØžÒ9áKìàÃ[Ðí\õ$AÂÿ}ÜÈP@ÔzÈëSÑ;а~¦Œÿ7x²A @!ºZP À¸¹®%ÿ«üïú…µ¦_‹+q?Ÿ. Ž^ 1°Q =|¯ÄF +€…y€{î¹¶w°Š ­N÷|¹gï–ý{°_ß úk< w´“žÍ°“V{ˆ {ö5õ5€Ž¶~0¤ñ÷Ë`>ìÜ-§ _ß×€ÝÅ£òØsÆäE«ïظÖrÓbØ + *f?áä„·mcyÿÿs[ˆKÂcuñ¬©YTÅú3€CâPh@çŽÅ¯ñ¾I|ì`4¼0“1qÌ$Dƒ°»Èž!z=Gq*ºVè˰ufg'³P  ¶—鈎LSÿYp•/šõzhÿWÇÿc'çÿ#fÿ?¥•33kke§Å»Íö°Js8ÿ7 ÀüYSbþÇÈú¬ V8û(ò?IÃÉ‹^`iñ¢lÆ‹+‹¬ ÿ8i`v/ß.¿±àY°ß?óeˆø &ÀȨ_ .€tL¶Ãó”€8 xT¦ l=ÖÅ€ú–éߨ׈û±?Р¤ªH”Ë‚/s’ºÀ¶Éö&9sVJ Ì*eŠ˜­ Ö`ì°VVÀ 0<À@öŽPÛ Å,­ðmK­µœÄ?@ä´ò)bpSŒп¯5q}?DÀÍ›þò&«>ÂFпó?÷®òTÇànâ=Ž´> n° Q g‘©’‘©Pë0䨜q-Ó +À=KÄôôë•΃øçã§ÄŸ×ÀêŸùÁž¬¿°L‰·°xêÔì0o•ÙSs§0êôi-±å p:å ý7ó|c.ö Òp÷îݬîÿƒî)èØGU@ °¯Ç‰m -B¿>@ÖÚàÝò(Ú?xhyÛ[oAº$¿ð.€ØÐ†ý°ÿ¿B•=†í°Èé€ù<Fæôǃ5ÀƒâHŸG?Ĉš™y#€: à‰‘éYfNû¿ò|=†T+3ûÍàæ?Æ”é3Úq€õdqÐ…q<Ü`Àá·Þ¾Z1‹÷4(7;;ºQè;”éæOÀLØPå2$…éé(€²yô& òÿ(+ XØæüoGãAŠ¥&›%GÂx6æÿgííÿ &! €äNV÷0€ƒI@@*WÀÙÇξúê÷^õÔgÁÁ‹F¤|æ/ð1a”fÐ+m°ÍøHµàc‰=ÚÐ< +'ãôŸR±€g)`Üo¨‰HµàÓ´åšÿŠà‰ !`ÔÇÀ.º@n“ˆýÎ(ç §¯#/nLò10 F¯öpŒ‘Å`‚ŸÈf±{U €»p-Äè €‡¨àöXba €@«€ÏªØÄï–{@æÆñ)€µTHrS©ÖüòÖ¯( >ºìÿÁÿÌÃ<œy¨> ©€”ŸŽà;€”p“€'AÿÊ™70¶z‚$€„kj,Y“)ÍòÏÂe@“€Ñ?î(PþÁømggz‡!XÏÃî·Èÿó ”ð?ÿø@ðð¯™òT;bÀ¢<wѰoo-`ô¿w¯óÚZ„~ýÍèßbÈü`»T @h³™ôе˜ÒäÌAäGÐ"=$zì½váÛ˜!擞­€ªVŸ­6Úãã=Ý +  e@zîHyî@~w “Àÿý_9pÀ¹ŸØF„cA= ”˜%`NW€¤‰%ÑÒÎÞ뼡«}Œ@oà+… Ü0–»ú–ÀtTY§uµ\‚•_úûéýeräÿQ±¿ñ„ýð0ÿð2CU`ýãpÁH!óÿ3(% 2—¢«käÿ'"uÝ:ïs˜ O €)†x—À±Ð ™žk1yõ{ßûþ÷¾÷½WMH@1œJøpÀc'õä?ïõ‹K`eP|èŠa¡ù¸hÖÀzü·‘q=?›yêúàqÁS¢ezâ€Ð +ÀbŒû ÀøÒXJyëÔ÷EĈÞÉžRU$ÊeÁ—í2“Ç1X¢‚³XË¢ølÈ:@iØ +À^„ïY\ƒê¡q ®/n«1ŸQˆÿ©ä 9OŠn‚ÚEì\}óÃO˜Àñ#±F¡€Jv¼ùa³~ȧø6Ž(ú»ÜШ@} ¦FòJ–ŽðVîàEä_ËÞ )À5ÔUìzÒ¿t£Ñ?î'Žhéó_•x.ÐÐ?pL ÊpÆ<P\’ ˆ–çqðÿ€€»¹¶À>¶À­‰5=Œ€8á×ym ­¿>‰qwÛÌô®Í‚^ƒ ªÀN°ì¡K€!ó QΊp°ëÎήêõ8ĽïLõhýlÚ`Ký0 å¨o€ †;L´Ñ²GAv¡è_ùÊþ”ùÿJ÷„wÈs¡|5HèðМåGz_wjµ i 5ïfX7¸~ë*AåÍ©Kz2Lóž/­ÿ}4Ý×וÁùâA#ñPYûËkWaHÐeC`_Å2É܄‡Øk7ñÿ;ÿϬ­•JP!Q¹­¤é¯ð€yð‰+ë“é wÈòçôÿ½×^{ € + øÎÙGñ,‘¸ FzJÄÏ~ÌÈ“¹²8?þï9  eÎxr@-àqe„ÿ¦u €Mý­÷?yßÑØîàÏé°wðiºQ @UO@0ÿª[P+ÿÉ÷|H7Œ°VX+ú¿­‚W ™ñ[ r¸àËš‚ÑeÝ»800’cÐ6n–€YÇ1q +LþOÇœþfì``d•À/š<KÕzV6ö|&ºúÛ“à1ú$Vr°î_ëÅòd{¬þkåÿÃîwþg7ða“~š¶`µù”÷°© À7Ë©ÎÛ[}§ÄÀF‚ú{òßÊÿ.&ýG±Àß*øx–êbòÆü¦6ðœÆß¿0VŠÿ‡gçbíÿaóð£o¡@þoÍ0س‚|{âèù2=ZÓ¿çË\³å¸m´BÿdEï *ÀZ€ùvÊU^p§™Òb€Mèå 9Á ~e>ê 0‰fM«þóè€ô_ß +€;x @›l~•Ûމ“ìbÖ¤ÿ4ÿwðzX €$ҊΓ§®Á„f¿Aæ?W>E:-~­_ía$ ºgÉÝøz ’Ãí¨ö€ô`ÈqœËGÓùÞ]v}î¿¿³ïСlª¤Íù±Üá±1ãÿ—/™ i°tµñÿìÿ™«•Rù Øÿå’ÌÐ'¨ŸìOHÄ€øHÔtd>€aÌ‹ì¿ëôO|Ÿà»g¥˜ &2€Õ ˜Ã=ç—^ÿ‹è¹(ÁóI€q@Ó(ð¾Õð“ÀÌ ‰ `/=¥=c†Ó5âKI+ÅàÑì + ¹à%EîFû bŒ=ñœ¯öÒõè€%Ä’ôˆñ‚<þ°•?Úlôoé*HMO€€$O(ª(Ì’û) TçÏ•X&ÿxë¦-¹ýoüÔ¾ € +òžlí€&︭0|^ÊBÉ<€ ðž1¸züŸr‚+Ì:¦üôßÅ];~NÎMW{bÛŸuA4ð`½~dóÈ0çð?GNÿòàCæßÐà18Ú`Ï=¸U°}w»<íÛqsÞ³›Ä/ë“}Nk[h¤«ÍÁ~Ú;î¸äKF¬mÀzú;Û±@ÞÃ¥bˆ;Ó@ pô(£ÈÁ0¿Á”µ1àPìŠ-Tñ»>§~Àÿµ1ÕïtС !!Ƕ6FÄûß[@þ¯í@ö?•’VÓ ’Û˜ {Ô|#Œ€)ìÿÁ@Y|åhœü`ï¿xpW; +½­}×®]½}}}T žŠ³H½ŒŒÌÿ»Õ »%ûŸžÙÿ¥2Íÿ»Û¿ÔÖžBÄa¢ÿT@ Àÿïúýõ7~ô:%+Î~—Nn_ )âaÅgŸUþ¥•å—ð욟ÄCéØàŸn$^ùÏ*g`Ö~Ò:þÀjƒ?`ó¾¬ÿ +­q̵Ä'íÑoæàbÚ@®b€3Ê9qžàëü¯ ÈáÎò ÔÙ2ÙÞ6™¸ÌÊ7ûƒÀlM €•Dï £§ûðž€Ø p`˜­ö¥ZÐa [yèh)À¹pJ¿þ Ï!®¨ö°‚ÿÖ'J "þ˜–7?ºùÉGbù«ÿßD6ßf €¿ À=´ˆÁVîàMŒ­ž ¼ ¿ ºÇT>* +MümMð²² ~jþ¤é€K1ó+ TÔ{†çñ‡1ýdäÿ”` 0¿‹¿«7÷,ÌÀÞ¿ë®»aðÇN€íXêÙÇ(ö´å¸mó6c䀹[b¼–òm÷Ö{øŽ@>GÉÿG¥Ž2HÁâG÷Ðe.a=ò€¤ü¸‹øœú Ó?Ðè](µ€Â33ÅÐK ƒßÉæ?.†{îEAX•]G¥µ+ x´ºsÇT¡Èúb‰7uâ`kÀðn@¿}…B«üÙ­ÆÓÑÌ¥ˆo¾>2=} “¨|}úQÜÿæLy(ó§£Ê›Ó°0Œñx@²KW*W¯NLLäÆc@Sÿý¿VRýù™ò×Aüm|‹ÿ—ü5þ‰À\6T0€•ÿ ÿÞ€ €‘؛ы°/,ó]@ÁJp€vìÙõâì ]ýÆÿÈAöR0ÃÝ~ÓZÈ@Ž¿@º€Ø G)µ¯ ûؾ 2¶X$1ønÐ +@I€F ùµ1âM²'.]µ@Ë_Á´"ÚV { –•ˆYˆ-l3ÕƒváØ ‚x€ð.€Äpp€¯ÀåH¿ ©C @ð€·xRõ§íÎë­Bä/øþq5@¢@îŸX;µ09€/æŠ?¢óÛÔ8@ðÂ:T€[Šl -PÐJ+€&ý0®NÉpÃRJx+\!?†WønüGùÇ1®¬þ¶”rú1Öw1åå³6M~š{ŽÉà1ÃUyfO!uJp× =s±àäÀn(tÖloß®H‹ Os=òàã´¶…Va”µ`W‚öÁoU1´¼ù.ШnÀ€þûò=†œhx›C×ÅÀ &r–ù™Àzü\úà¡©Tâ¤7¸ ¼ €àN¨*”ôÜAÊïèü +äDH[GI"Az0žóE™dö› ‹Z¢—oË&«&mLØ»©r¸—§¢x`ý?üßï¼³¾ºº¶~um­R®ÜX_§  MUp©²þ‹éìÿQÎ!ÿ]07²¹B¹½\ˆ*W•¬üìó“ÊÕëìH€øßªÌТýOþÏFV¢¸»­€>€fü‡`•Ù! ·4@EþOÑ?ñÆk¯½¦PíͪP#Ø@!€iày¥f€.†çÎ`€e¤œŸŸ­rœ™=ÓDˆþ­ Hßæ8»a?±OSÌm„œ>i®pÚOVŠ`/¿ ÑÿmÇäkqv\Kr¸à«´riQbq@v`=WÊQa!?îŽO.ƒ†t+{ ]ì °º€_5ˆn=·„Ó9»Ní­À8Úá»CÐ` +@¤N¢'ïÛ,Fr| óŸJÀeÅÁG ÿßTkI…ªc6ìà¶c¬’à­Š­¾SéB¹Ð?”ÿVÎ./áu¥+‹‹­·Aâ÷ãý;ÈUôŸ#å‹÷c°Q+€U0€·Iâ`=iú?ÿåÆÙÿs˜Y<=°[rœ€í{ÛÍ €Ýê@}mµ¸}ˆô6EðÐâwVõÊ7²Pc] É {xçïƒhvÞ  ú〈ž2"ôh4÷Àw@C|.ý(ߪìÇ•tÐ`^ ¬ñà±è¸' ÐÓÇV”K(«‹Ç–Ò™€í©k8°"CÀz9pcÒ±§;¾ÎÀ÷x€ËyØŨTZ[[%y—Ê¥Ä4¾SG뻺šºå2<8›R¼+‡ÂÔ‘(:ÂQaZÎî +r¤€ +` +‰Q´ÖìÿgÌþ/!‡¨ @ðü/®$èÞýc"ƒþª7Ëüý £þ_ÿZ“7^g$€èÿói³@ªá£G í..Î öôž™Çƒ ôqQUÞ³5öÿ†ŽX âýàp1àÜOèÁb𤿉ç½(ãæÍ÷ (ìu‹­’ÿS€a™ÀÞ@翞ÇļôébdÚqH®$Àeƒ¯ D´Ü•›XÿOß+•Wb³Ñ¿¥`Aây¼€9óTµZ1 ¥‹ 0•w¿ºÅøuÅqÍo5€óû&ð‰ïíÕ¦Èôl(ÿ?wøäN¡¨8Ã@)²†ÿÌÔ¿  q @ ­šôP0%ëÚ~ ÖÈ + +à_Æÿÿ ø%Ùàƒ9ü…Ï/‚ÿ)Hü¤±¿)«hà˜_H{x¸@@€*€lª=‹<<Âl?CþÛX@˜p°åø´0ÊÚ äÀ¶÷¶ß+ã»ÕV;B @Û;wìÊ@6 €Ú€8Ó;Sý´Ø +€G–Ù0šCQªx+lM<ñ»îˆcXB–‰çˆ/ŽJþ¿£Úƒ~¸ާLhü3_) š³Xiâßãˆ*k +HÌ °óKgïgS(–£ÃCQ!‡sÅQÊd¿JSC‡ØJ`ÿ]xÎDÅr¹X 5™)9Z·ÿåÿ—óü<é’ÞØÖ?€H)m2÷¿Ìÿ_@¼ñšÅ2éø` í`ψêü3GÀQ'¶ÿc@þo¢ÔÛRÿðEú¶d NþBò'ýƒ…4ŽÀ/Þ{ï—X ´È$¾œýVX?Îÿ©€%‘_ãvÛ®3ÕCü¶b|¼ó[@òxú š([bC¹àñ¥^+l]M €yÜ@§>=¡¸ŸògcÀ­?ùø€´n'ó;¸Úï§@3€à¿è¶wŠˆ€ø?VàðO¬¿?,Ýúè“é *€@A?þø“>f{À?úÄøÿ#k;çÝÜ@4°VŸª€Úý ± Õ/ù_ó+æ ÿÓ©$9ç¿5&®`ÿùØÓÌПŠ˜§ýŸÄü- JøÿR +@³M<‹‹§zøæ«`-8¿]>µœÖ¶Ð*ÄW›†¹<R1q+€Në i ÀwÒÀ +÷ô¨Ñ=@b¬H÷HZæ ³¦{áóè@Gnô6@lˆcÜ€iNJ® ¦a‘îEæ|"’Q…(  ¶Šœ?;0³ßà­¨ëùò‹¨i àqr$w¹ZLEìÓÇž @j3¶–Çú¦_6ö哯=1Ü^^.A`û8»,d:ZŒÿ'ÿ?Áø?Úÿ3Q‘ÖûÝÛÔ *@ü5øòx€¢Àú.1þí5˜ÿ?õÿæƒ$,@‘ßEb(€W_}u‘d ¶Ôã"à"ûÃa•ðÜ0¬}zÈ:âÿ*€óc€ùÿY$ý<ìVÝÀÒ À¸/?ï½_‘›Œ@LHÜRg1àÐ(ããqF8§¤M©V<Öó $@#ˆý16ˆÂÓl͇¾s|¼Ú’âÐLé16¦sÞxßÀî¦ô,Ùÿ»” Ý +à,Ìÿož>(n—’M?üÐ/‹­ºIöØ÷.Va‚kÉwï·,6“:8HZ +€4Î +@ 4¦°F!ñ'¶Ù5½#‹‰ÿ_»iø0é€lý9¾ ÓêûȬ±`5€¹ä÷çÝ<ñ÷ÓïÈßZ=?¸ ïƒùâ1>M<ý +4Àü<9ßbÄÿ¦Ø °J c~/dãaÖëuòÄpZÛB« ­mò.chžÃ®¯i@ês@U+hƒ  ¦<Ö + 6ÀÈœ;•Ö{+ˆ‹c¸°A?]ò 'ÀcxÄØá°*±:v0ŠŽÝ‰“긗€m)c&ëSðhÿS‰h5ø—κ$tê>€ )€nµœ(E)ÇM-CÌä¤i>ˆ"ù¿<¶:Ê=Ôy +T`0CŠð”™zÓb {N¨ Ó=‘iOÙÿ|x´RÿÏdìˆÄ©ÞÔ'`h¼Gàt[@S”Uôøžüÿ›ßüö7¿þ f~,À@ÅJ@œ%ÿÓbD3ɲœÃÃçØ)F ýÿUÆÿüW­=ÿ¾(˜Ñïó¶àä/ÌÍÎZ𠈿–06þSƒB"È` ƒ[‰è`Þ’‘‡Ò|ôáM†ý7ˆ0€LÿÛŠpvæã]œ]r¸Óy }(œg;@¤C`=–¸‚)˜¸a bèÐãJàjà”?þ–³ñ$®™üZ“¬§À.zë®yÞåõÇEß  +Àà\ßvÕ? jý¸(&XþæñçÒG·ð‰ð?á;óÓ‚J-5€ŸÙìÏZ;*·[ˆø4ï(TÅ€8YëcWü5 Àeñœ<œÅÿ$îÞ‘¿µñÿùÅÜ@ÿ>ÜJ°í},ÇÚ‹¯bé¨Óz›÷€)õ@M€?Æ=æ0pÝ^À(‹ØŸ b¬Í³øÞŽß#ÑÁ5ï`|ܽØXçØA#šoջêº:ÁËÛÚÈÂâG÷P8à‹½v±Žg­€Xøsé€Mé1z6 8q @Ü +€æ?{Àfµ`1bŠÁ8HäÁf–#†W€ +@ZÐlGŽ.xÞª`Ü&m2£0ÏGù6÷ÿQ,h®¼º®çA ôŽQ1*GÙÞB”cu~W_îG÷4DÈÂÞϵÊ*ä?ÒÝÝ9‘Ù•Iø%i¡þŸ¦I1"ù‰=µµ·…8‡}¢ÿG;HÀ–Z!œ5þWõ?íà·øB pÍÔ"P­¾{ö»¬ xôaU.&À wqein¸`pîEˆóàØÿƒ)@àÿfA^ˆöù1ÛÜ`|Æ×GLÁU±ø¹Wè¹ï €l€±»´ vedš•·$®ø˜žof§1ÓäRyøÜnÄýÉŸh½-;â5JjƾÅþk“ØÀL˜¢=½A§§H:œ“CgÎË!p#6“"ÅœÜZ帕ֳs’x‚ØÄ@8ß×Gãà1c¤€±¼'Õ>6"ÑmRbO(9ünœ¹…‚HAMý?Çúàk/ñHµø<Þ ó"&YS¿9nÚ”c$©Ê*ð¿<üCà‡•Ðeƒìšþa¼3{ë=‹ §ö Vy†Sð¿<§Xõ•|°gµ€=x¥q*îp@Ú—€ïHÁim ­\ÚtíS¨[‘€‰Éò ð{>M6úœv©ÞǪVa±zKNÕ§­Úë÷0Ä&~«¨)F#¸³csäÇ‚ =ó®êÚŒ›;»Gø„ˆ"Üíö$›³SÌÛ¦*åì~$•ÎU9zAû`vÉwL@Èÿ™L7*»2øãúîÁúÿm°ý9Å€P`à€ +àà#«ê_nýïÿSü?øí¿ý5« þÖ½ñº+€W¿û]¤>ûØ#? ƒAðG‚ €þY +úÎaÿ¦ÿÁÜþTA*€Hùî0öÌß“ùÅ$~çÿ*¹I0À‡?@Êà„DsWœb›IœO OM«˜qf¶E„øÑG úÛŒC;ÿk…k±,’€%•óÁ7X`e‚И«—Œ Q>|é5줂ÀYßQíà…ÁÊjÀ‡Zø„ÄÏó5®ûm +€F +ÀÊÀ‹(èx)PuèwF‘ÔûÊhgƒ§Âð?5ü篂5ŸÜ”P»?¤ˆíe«t@ŽnÝÚÀ {ô³Äœ$eøÃë³M,Óàð_Â.6}v…¯ä/MGSlÿŸ_¤Ã¿¿_jŒOÿžþa ñÀÿŠbïé>`º€tO¯ñ€õOžN>þ¿Ä8.ª²Œ¡SIyxÃn‡hßݾ7ÄX“‡ÓÚZíÕÍq?Ýôô~°2390lz~dôÚ&¤Ùe6; tØëÄ0¡ï¼Sö7ré€ÕÜëL5B×ûFÔu<¤úÓ9%¡Ò|Gî4ºiƒÓK€ñÎÎŒ—ƒ¹drØÖ6%í`wD8Pf['½(Ñ6¡ÀJ‡2»«#˜çÝ#Ì‘oN‹ö@°¥–9oÈ@£Nœ¸“u™QS­ù}‰U;Î4»ó‚+7o @Ï®à8xsEùS¢_òµO!8©Då^j +€‡ú\°aêžxˆ01ŸxöL¬2PöÿŽŽLç®@›Øÿ©úÙÿX}·Lz`<©_B•&hü+ à1)€‡ÕôŸ‹ôê‹ÿ­ýyàƒßHZí]°@q=¦Gž6â(ÑÀEö@ÀÄYº¸ÂnR€˜ÿñðiìH<Z¬öøB"ŒéEÎüq¹ÊǾÅt|ôƒ¸Ay\6 E K “Õz, å‚'wÀ”LdàãÜQ\7~c¦'¸ìð5€ô~Ìj ›ü£L0v?a8:'pt™œÕá(ÎǰŽYÁñ Ï»¹@—E ‰/µÐ-÷ðDépHU;Ô{6­œö¼²‘¾¦<=ýÈôhN é%Èðe,Üúø&$‹ŠÏ$Ü1ä£$(€,HáC jPÐB+€úµx\¿z¬ð£ãC Û€¨Þ]˜ÿ³ÍóáÄ/•çC@ŸÝ¬ëç¿*í êœ 7øiùŸ:5GúÇ<$ÁÜÉ“ó'çOã‹ñi*”=:“*À]àz@ûæتøL Gµðc»œûŒî'v‚¥è‚7v@‰Æ€†àIo#ý3–^œÝµ­Tl™tìílëêÚÙ¹Cø€”²ÚÖÑÅÔHfkX¯ÆƒÝm +±ÃVåòÅþ(ˆ-kUgÛ.θTë9äQNÛîs›ŽÐ½£AtIOÀ¬çÇf ' rg"€›£(]ÛX®±‚t°|”8Kd“*d{{]ÈhÒ`¤{gGÛ#Òýw +v|±Àø?ZóS…h +X-Getdr_ÍQýõx,p¢PzFVìØ‘ËÜŸÊ´@¤BZ¬ÿ×㊆?¨;@Î¥Úx@ðèÏçcA˜Æêâ‘#ô¨W\ƒ‡zÈc +|J(µ=Ir3%o"—éfFw1Ó À' Ó[«ÿ'¢"h“N0?lùj}Ö€$€€ ñ¿UPü +à°?†ß0 Ðj¨B§@Tô%`Œ‡Kx¦‰É‚Pß$xŒ-› gÀ@šýÏ4ô°N„­-ÀàüïsÁ@šÑý`‘†Äøãž y +€Æ$ Õ€u\p#9 ³$ P KÛfB"&,.ñ((†”PÎIJ"dò‘_F‚Oÿ¥%l]ÞºE.ƒEÏb+î'¯6€¢|ÌÐxKÉÜQV2¾ft@žNP{VUHæ6ÜÌ¢á‹Vš0¢Í W˜àö”௔g« ‘ÈHYhÐ%ÒÈ ×¿ýˆ\Ï:~žÐ-\¹8,1¯ÏB0­€‘yBþça|ÊßÒû¹¾ ¿!Û‘ªàÝÂF +`dïí¨ª<zÍ#I_#ÜêOñÙÝ3ÌÊû*Àâì1k¸l±0ú{Ø «4kÀ”{VaSßê@ö[€Ï™ÌH÷Hó‘ÁºÝ£Œ~§Ç”Çø|òG—h„1CÜm÷J¤‰ºMŸ1ÅЕ¹ŸQy1Úv0f$W™öu@Ò¥MÒéQA:ØÓóEaa…’#˜tun“|`ŠûlKˆv"ŸnÐ:vW”Û.º~'k Øk5Bq=e®ø¥ƒvv‘ïQ|&Q<k``ÓÔP©d«|¬7>·먈29¬'1ÓÈ·¨?= Uà‹G*/€_ÍeÁÿòLS00ÂSL;^(!Ï©‰ÑnhŸîL®œë+Ìx çÿMëÿõ´Š`úóÃn¬CÌHå áë?BÐÿ÷¾ÿzpü'µøà7üö׿¡'à·ª ðÖ¯»`set—¨!åœ}q‘¯ ”èÇêžÿ›@àŒèIøš5Ã__: Hÿ"ã™ü  Fÿ˜À¥7ã=óù¼·‡?@båDDGšÐZl&a`!©ù‚bB€ŒÍ Ûr$,V‚` +;Xµ¸õ Ó«@$9‰ +q™<-€$†¯vàˆt&>3È^Æ[Ɇ<ØÇÿgÐAaç‡Eì¦,Y*%gñ¸/ÏÌvÇZ²?öå€P€ôLB:ÆÝ`.€«ˆ˜þU*+ÁU€â3eø!P*VfàRAÉÜb€£yl³`×À©ó¤9ËìuÊ€]0|,GJ€†1·ý.6ùúÜyE}@ €ûÀþ±ðж'¹,[jÄõ?qƒa@fzÌ™Ý=ƒ´úëGðv\85Ü¿g`ÂÀÚ¨³ŒÁa¾³=]ôT ¼ÓØ ÀïO‹Ùo€êfNk[hàÔQk£ÑÇßÑîÑÑbggY†ã8Ùb&ìò%.wnß§A=ªU¾#iñ¤ICW®óî¾q¼Õ¡°k€Ù©Ü± ;#øNìê,ä2Éq‰® è¶”H‡UH25’¡ß]ÜeÛÈÔ™Žm#tß›ü0'À}÷#'W"²éΰ  è‘ñÑöL Çe>Ø—¢òe(€Ä@ö®m ™ˆFGг~=¸‰·¼n{ò¸V`à»à–ðPŸ9rØI¡0p‚{çt°‰ (Œݹ©+Gzó…g°;7±ÿëêÿ…(ú’ªÎÙ?Û0RÞ)°»Ô¹ +àà#Æÿ¯½öºEþøÇò|ð[º~óëßX,€œ|;ÐwΞ5þ?{vf‚îXZ<3Ø3x@jxN5âÿÆ1â“ ìa#Y@u@²§°¼Ãi%«\„€ðØ'‘8ðÔ'á‚OÈ‘ ­Gˆ)“* y„³—¤HÃØ¶±F æšé*e-†¶yÐèÇqZdÉ©<~‚Ýœ«ÍnfÁ=/r½l(zD>V ‰AÎçñ€T88Aí‹,O®7¥¢°ØÌ¢ñª0¡„(Ÿ«H´æ@JUhÇOí `éY"+V ®&¼(ÜJðuúöSXJÜüHuàeµ±Zr†ÛÉò¶ŠçUvÁ\H^]îÖ à¶ß€;vûÒÒ¹E +€ PªÐmâj™ +·‹ÅxóÌÄ`„_ *i²~2æ ÀIæ›ö,̱éí0{Ôz0þð Mþ3 ÿ9¶0Àצ-zÒ %¼ +À›Pèm€æÀ¢}œÖ¶Ð*&Z8o|€¡ã¾K§ËLM€ô×IX·;ÓþP–0ŠÛîä[ýé0€½)d2£»FlŸL®{['8Ýi>3»`©#à Œlä ¾EF'8ÊíÊL€Â‘ ¤!@RgÎÊÉ1—{h#X2b„3Ýv·D»µãœ¶u*®Qf>€‚S¹pßv¦‚ÀP©FF2(ÁøÄ5ÀHûÈrde€â!P™)› …'ßLû„ê¶}Ù‰™ÜH¦kçŽ]£¬#00 ±`<ÀÔÔ‘©²z r€¹±ÜÓxjð)íÞÀx– +fº:vŽLD•hè0Ìæ¸ý_]ÿ/û¿XdۈŶ±@èÀj’Þhø?öÈ# ÿ“þÍ`PÿoéÿÇI{@4ÿÁwèÀ“B•‡(.BôÎÂúwÀ†,×óófàð¼‘>À§ +«Hý ŽXù¶ÙðcÄO»#$¡Vã©ÏÇ=¾6‡yñ‹¾$ +œAëHW&”Á-Pu¢€˜Ò1³s ¦M ¬À~!5s¸õ‰X›%2vÉo\ ‘`¡mV2æ†|•…@Ç·§ÄvFû!-V£ìÜÌòñü°Qk,eÊ s–Ì(“_ìö‘=Ž¡jäŸjLtfJln•ßɨ@+z׮Ίf;Š}ÇÇõ½qä’ëQsºøø˜ ‰‘ÆCa<_ HÇÐɧ»Ÿ·x©ÐÃ]!z;:Àæ9ÝùävÝò€19VG("Ø×¿{2}õ=”Ë*¢ávÀvîˆì +ʼn‰ñQ6âÈLDëÑþ±H µ\ÿ¯²~í«þ—ã_3\Ä4À€ú¢õN)úü/ÿÿôÁ¯?~ ð~~óÀo<0(µ´NÎ>†)/â!ƒÇ¹Ä@ògG4ó³=ýSÌoCc€p½üÿö%|56ˆñÉñTFüî ´±Êд øËò¹µV\Aæj=F¤IP¬o“ ¦åêë±%€@2ØËòPÊûUåQëõzË +Ç š*czp~˜ƒ$NIÀ9Kâh_“À¾ØA—Ëa3‹ù Nâ¾Ø1Ä …SêD¸c­k4Ó…ÀÃÚ¡cøŽåk>¹%·¿*R´Egj{JèR°¶§Ë³§‚¡’¢b:aG]-^íÆ£8>ûȑ¦—L€ü%\p éY€0ÞwÖ7À+—xqé">4 +CSÀìâBÊÀ"ÌyWÀ8¡€Ð@Ò +`vöô©ªAK!x‚ÐYÔ{B€ªŒùNk[h,rß9Poß!9áA•#íatJä&v‘‰®®‡À¤w˜M0p ïÎ]J12‘ÛÕ7®ÜöÙ:WgÊdî%+ã¯X|b¢<ÌBð°fÌ *’a4·Ë˰cltÚÏŒOLpw(šû;•¨;—Ûö˜aI;øú!놨 ûÚ)‰âQ’'¥ˆ´È.Y2ßpèj-RpîÉ+5q¼ÉŪ¼Ã‹}Ùòéuª¡´ÝúÆû„Œy­#¸¦h(vH€ðôÓ…èH{Šÿb‚o‚ò¹sçH¡t#ÊKà©3½¿åúF,Dä{6¸ûKÆýþûÇ>ò>=ÄYõþÿý×cþÿ[Ñ?ízè0x‹@¤^,0#=d¨ØóßÒâ,›¦czð¤jÙêÒœ@ÇÀ]ªÁÓÖ÷1ØÞÜþ\âZ®‘($1zú‹í8øàç„®np‚¨PJPcª +€<ÃÔÐ$@Ì:ó1¥Ô‰€}Ø$fFÒòEæp‹f¿QõëJ‚mU1`bpXðpWç.yŽ+¸Žì¦Uøê”XJóhW”Î3µsLAÙËÀ/Và,S1, €õd[Œ«bÔðíx¬l‚•2Uv–X†—–!‰ U>ºIÝÊÍ7íB{ +Ëš8ƒY\ýŠü‘°’ç§ý§cp£¶ú.1äüéÔOú— ÀÀ`€p€y¬Þÿó¼býIŸÛéîç°"«ŸˆÇ§ë=³ì +øôâ²­e+€c ü9ï +¾èavè™Ë—FM@,æÓ5„á¿}û]ìЩßà´¶…Vb$q6‚(Ñ1>>1Õ—©°Y‘ Ç"=~@­à6ŒsOîÂzQÐ#–ýÈ¥*°ËhÔ× –)€ÿ¹ÏD!7ê¬y(¡Ï\_Ÿ€j#7*âe‘@Á0’‹|kŽA;ŒÀÂçJé€@¢ÄÐ,óUrÇyÀBÆ!¸±ýOSdô½K…FAve'”ÅH¦“G>tLLìÊE¸ <r–0T]ºr8ê“ùZ@h PüZ±Ê­&r*ÅNhp.z Ôzð$`µaT(G—ÀÉ™‡Íaàj:ø6@Û jƒo#çIðL£¥¿+Î[ÀZ¹¯·ÕúÑÌ—ô&ºþï¾û÷ðµŽj|lùO@þÿŽø?Tÿ³à¿ù_.úlá·z3@`ï0€þÖb2…?Âí¤‹Ö~‹1ÎÀ‚ªÃ ~ÙÊ3qXk@n2R±óß—È*p?=+Í=‹4ú‰d û;= u€ak‹ëAùƒuºNVC%K»J¸ÿ»À[´¥=¸i·<Ÿ ¤¯ÍAº+dFJ01€‚É{šÕêññûs…gÞ‡ÉÎÖû¬ü–LÀgbÆÉß=vvøb Í|ÙúÆ7’Z‡Y\“öˆ…ùÌO UusÎ<4©¹Zæ$S¸Pý3‰‚‡‘•,šÕ6ì*ê ´½à!-ÊR2‡ºî„à\-€‚I²/§=â[ýx‡ôŸÄX¦<"“[9±¬œo%V¨—ä ëMàJ`'÷¸¸*/œ‚¾V ¥t|/®u‰+2?Ì}ˆÛyQnÝäU¶"ò„™§íd–üåx,>³6G[æMî1­¼ ÀøÑ0g!þ¬X¢À"¤ææpOW)æ— è¸ÌþÔ +Àø¿±àüJ``7!@Lÿ€..s½b†-Àà€ÙÓ©ú*] +i÷? þ—`8öÐ`€½ôl €Ï# 2±³˜¯˜Ë•a›Z +šÐ™Ü¸ŒpÌÿƒ^z¹>ûUùâYÐf¡ñ¢Ò‰q È'ÓÞÍE»12:ö:÷á‚_17Þ—F! ²$WÝØQýヿŠ! +BJVÜÄ>ÎÂqp|É‚¿Ê<¿ŠÍ0ßÈýã+‡ž,"ñT;t F…Ëðû&èˆzsEd.ãÚaœeb.}å)“î~Àýî–`âÚÁ0QïÀ=?e>€h-:”»ÆL¥DX† ßÕC€&² X vø2L†‡2 +ÈÐÀ×ÿ[ÀvHŒý£ìÊ`¼XºþröÁ<³¹žï|Ëž5,Ç&õÿÅgŠ3ÑÃÿAÿ |¥5À¤ÊðcÿBí?»ÿ‰ûÿýÿÿHõÿå¿ÿÖ@5Ì@(€ý‹ÿxüšÎ ` Ï1*€ù¹Áþ=ýý- +¶ ÉK&ðå:º±¥MÆ¿hŸ”AìOú‰þ«=u1‚è„‹‡¾¬Â@@d.%UU¾=PÛ†½Ä N#äš* _¾t„ÔqJ|Aî$y’T* d¥àðõž©( Åç!¥%$M¬8œá¹TÇTyx`ÛUûr3öÄëp<*¬Â¡fG@™¡ÍF¢îxWo¼ €•އsØ‹#Èñ õ–¿•ЍRá× èaeÊÊÒ hØü1 +À_—[ÿy¥ (†ûŸ‰ª†ÿ™™i Þ[­´(;?Øm@€Â‚ ˜§ð‹ËKtý»Ôï(ð½Ñ~`Î.Òá/³_c‘?!x¾Ú0€Õ8­d À1yÀþôðþ“P@ñ`åJ€]›y<ê\ðþnÆlU|6$ô䣆ä ¼°–+¬’wéI7.ƒU-s›,,LäveA´™¯fI»¬ÔWÃy6€Ñ,æ)NT² çѨ¯/"ïbÕS_ãËisöG3…lŠÃ +˜Ý +ŒOW3e¾ÏvT”¬ƒ«6€êíP`@.‹rdñÉe Ê‹øXP<&ƒÉå*»²mxªù"P^ØÞÀ…ÔWúòQ\ ÀA©ˆJ}PDVrm¥ J¤!XXœJ@ *G}¹uõÔD °Whœ¥My¨ô< ¸1 +ðÒ¥K‘â‚;DGð@‘@ÕTeSů_9ÿ`v2š¾õf/) ÚþoXÿÌ¿6Qdì¿Uý³7@ÌY{€P €7þ; ë_Þ§¶ýûÜëÿüÏÿù_þŸÿî¬ÿÛÿþÛÿ`†Isx0 %+â´Ì×¼8;Ðs`öÅ%ò?žZ‹ó0FzZ¬ ±O’Ï;ùÓÊà">gÉó€x?°¿f¥R€§«cðàç³s亲Eéòp…V“p@YçÀ±ø–<GHŽi!¯Ø"]À$LÒê€êÀJdìÀ퀵  +aBî r´G`;9L…¥©ËY_Gb…Rò°Lî»2­úÀÞXGªXÞO>‚¼’`Z{€DcÀm +dÃ3‰OÂfãâàài *…(^+ÿ &Æjþy¿  å ¾CW­º»@²ÆcÅk¹|oîÒ.ð`ìö þðÚ ¬ ¢Âz#,“°x4Æ®aVl1:1XöÿÏÞ߯Öu÷¾¨Œ{áÆõ©¨J1l€p¼7d´aUŽÂ(YÜ\᢭šÁ¢¹¤izµÈWZÊl} %W:üÅu•¨÷[‚&KTÅíjmr[—:(Áæú”`’hœh×îqvN»#'Š$œÂ±QØíÇûÿýŸ1× IQôžßô̵æË˜cŽ1æXäü=Ï3^f”€pdS»)å¼ Y67Dõj´ò\M¢,¯Ë=RY"g7N<72:R*xž"&.êìTê+('*ƒãiiAÊž%Àdõy*dS¡y#œ›õ =Ur¥·ü_0BöãDÙUÿÛ4?$1×ï‘‘úÔ«áÀ€­ †àà& É=ÒɤÕ®\Y«§º{ËsûöÕÍU@‹ý¿iû¿¶æÿ`i÷ÿ{¿ø˜€ÄÐ@É¿Á€ æþÇü7ÿôƒýDüÿï?ÿ¹>ñEL‹=-N€¦ÀÀ—>ûY| Ÿý–ø¯‡ûLˆýzþñ„›8ð$M­Ö?Ë==Áÿ°÷-tü”Nù Ѓßȉ>¹.€ +€p©á0…ßÄsýð@¸WTE4â’Ðô(±RäÑIóÂS¿¡¬kà +M±}Ùº&?³ÊÖ|C†8(×*°™(ÀvžPã˜0„È'<J0…8Q…ÿ.@T ˜wáÈHeQHò¸@(‚§OSAXüV®--‹©Š³M@©sËäß¼(-9[Ú4B÷» Ü1)ênÓÍZ¥aC.âô­ª±Šä)4úW…¶–‹â€$¿þÝwõ¿½õ»‚Œëää‰S§NÙpú¥É—oäDh“gV™ÿxdÕ‹ûÁÿs¯Ù öÂ=+Þ •/:‘ˆ¿Nž:p¼áþ· ÿÁãÌ8£ŽOœ`Ô[ £Zé¯ÅÔo‘{yN5=ÖÄ<Rèز$¬=íŠyp_;R¦­“æ"Ô U@¸¹kúeÝânEÜ>ý…Ýæ?£è‡d¼ BïÅâžr÷Qsw0LûçGI† yðR™«”Ã#mîpÖpÍŠµiÌæ†DÝ t’)÷P d¤ÞpŸÓ ®6:’Õj*ÈÌ•bõs•îºãcµˆ´CtVúw‹¼h •:þ†sžÊòô#è©×6)ˆ÷6Yú¾š:p“úŒŽŽñŸ¬LמW€û ]­ì¸t´­Àz¨¸ÆDs0¸Q„8Zïàz‘8<>§`ˆr˜Ö'[›8IÊI]à´Òs\ ñδöVç£Hœ…‹sÀºHòXi°j¢på☊Kq &CÎ9Q@õ]ø¾\˜Ð7h=G (ð3õ@ÞÜP6=ïRÿÛW\”f‘B8Ö’„ìR0ÂKý¡ÓÍS@'!ñ½ØÎç€D¢¾Ñƒ¸÷)Å¢G{® ” D{ÔqÊ-•lÙ q1àÃp'@C8}ÆhEΆàÜ…×Ü`À…×îí¸‡ð䡉ÿÂ?3b<!ÿ€'þAèph[€ÿ[=n"ïàÙ}BÜÇm7–„µ²]ñ×}Å$¨dÓsB¯þ6%¢•µAA€µ³9«¾šuëâÓÌõ±úôtmè¹Âîν]}2—/Ö§‡^Ùæ®Lg²|?W’Y‰)=:T© e¯?— +Z}ºV›žË¦êõʨ¢IAvAŠõ+2PÅ©Z¦ø¤£µ‹yA²KRfô¯3s½VŸ™®×æD|&ЯÏ\¿~%ã꿼r%ë­öv—£ ÜȤ6ÐxÁ„†q7›¾^ªÖeM×ÑÀ“ˆƒ#ÙôXýbq†¤ÆjúÖëcZjAmt¬ŽÙ½^”ª»¢¤(ÃvÀˆ´ÝêôL½·\¿"E´F•a8`(Jšç²n&‚éXŸ*<Ýð¨&Nm(ëð ¹ XH:;GÌÿ¿®T‹Õßß×;õ׌$ˆD[Ûÿk›ØÿÙè˜t¥þνwàù“Ùú `jÂÿϺÀ£ÿ£û?þáÿzüÿ<Ë?þÃÛR¬ü¨Mø³ïÑ +ð­¯|åËæÿNi“zBxr?óœ“ d`ü)wl¥?Kz€´Ixü‰c¯b€O1Ð݇œÆX¾Ó« M€¸£¢¦+Àªv€œ" ?ü1pµ·Þ¶£àj¬8ºb$¤[l“ ²® €+t]Äæ´b»€SÁ‚M¹Ô )VèOѹ†²µ`»€Mz +G<Šè8V| :´£œ4uäè`^yêËi +¥«IÀM2¸\ôPFÖ” ˜|[ú xÝ¥·%J…¿ó ‰Ý(Ò®$,(‚îBÅÄqóþ¹ââH·à\ÿԺʛ\¬ÓùƼ´È=ß°¹ùo9é±ø^âÕ¯¡C8ÁDÁÖNN¾„ Àò]Î{Űÿd€¹ 4€ÜpH{ßr¸û¬ó ±m1ö[dsÀäÄd»@𗹟š—áÿh¾$¬=íŠi± )W²rELMúh¥*ˈ(cmZŠÅâ@¹[•ºßQ%Òбç±ÎwçÇðU¼JùkÏf—Ðþ½g.èòbQÑ¡R–áý5eÊ{.Ë•ª§¶- xSyµ§^§ç;™ SõŠÎUòH¤TùüL%ÍpƒK¢RV9®{<ç÷âÀ>á¿X»©/¼„‚¤ó›üoøtu«ïÞt½^¯½~]ÚÍÅéé¹ëÓ¸D—˜€ÔAH€† ]×F=ë)x}ó*]“@2K×P­öWþúÍJµ·÷÷§z{ËÙõÞ'èD­^¥öé5F¿EìËj¶ÿyÓo‹ž‚?ö àÏ|40üßøoðßcÿÿ!áþZ6‘ü‡ÿ=˜°©Ä”ÌÛ…vîüåÀcâTzй³zê‘6ɬd¾ÙÊ~–Í=²þíío4à  F²ó;˜Ä k‘–c›yó—+ÃG/Í..­,ÓFÐâ°Øž¸a[ƒÖl0õeÞÐô@ÍÜP`}2ÄIbƒþ«lRÕj€…]í«*¹ §Du†SΪø¤.Üy÷¿yÇåkz»C¢\€í;¤Æ¸V•ä$‰H- vpZ‚Oä}¨áþÝ+«‹K‹óî°Â`Ä+Û²¤$Q$V q¹#¡àåW/õuL­è܇^¦ êI´ãzåGuÉ#•6ö(ÌZ/æ”#„„ÖÄ!98—VÙÜ`(ÞS&O½tŠt€4€oœ8}F*AÈKüw¼&«Ÿ Ë+n pv³Q§O'⯓§áÀIßúuÀ©àq÷ôMÿ4 +à]6¿©`¹láøL›Ðîhñ$¬=íJÏ6åàÁÞÞRyXH.•?'üÁëÞžžBñ Nî;G{'HÞs°X.v:;yDÀžÎÅ-wË‚|YQ݃…ƒ…žžÎÇ:.®’¡«ùT»«e¥%.‹µŠØÓŠ¡¼zz‹‡KÃ’²²0×É›EPæ*G‘‹9Q,Vº{]Øbá`R3Šº‘n©EÝ‹ ƒ +ÝŠðßùØct¾ÛÙ±§§Xú·¥ëK´Òý6 ÒËMZG)U»»œ”Ô5ѻɘ‚¾ÍûHŸàÞú/¯Ït¾>ÿþÌŒ4&èÊ]¹P©`ÒóD@„ÿYýU<ñ"€ðÈø·¥^¹ Óíÿo¾Yÿ¿þõ…ޫׯUùeóR4Ûÿ/’C«ýÏ^øÿ;v=ÜÕ¿“ÎB%.€pü?˜`ç§àÿ—¾òÿ‡ÿVüîq=w´ÓÿfíÒ+ÀÞ–ÂЦDG@ì‰8‡ž @ü?+‹f’nÓ ‚#˜û°?„&?4vScˆ¶þøØöDµ…ËåòÔÕÙÅ…Õ•SO~Na$¼dÉÂw‘¦Žß$úØ.áÐ$ —V ìÍ&€Pt]Dæ¼b» Þ€.0ríÎÏ€4 +@+E%ØÅdWW(vPFSP3Ï1¬èt2…ä +_¤¨¡Ppåbˆª¨Î!¡óEÈ®víbük»º²¼´¸pma HS¹÷rD”A¾JâR8Äb @7rǪU«#¤XèF\í4P¸y +~ß$©u¨2¾*~Oúÿ§kÚ…àÍú˜‰[È©S“ÒÃ|@’ÉcLØ$÷¸ Àƒ8°É(I"þ:iQÀ?rñ6À'éÐÚà·Z÷Ö^¤ ù]7ʯk[ÞØPÚ< õ%öà Ø¹ó = ôMX{ Û•øëºT³^;73=÷—ÓÓõ™JïëbTmfFæaÒO+õê‘JUqê‚ØÈÌ £UŠ•Œá…Â`ê >£3…Ê_ÿyv±^Ÿ®Íñ^gæ¹Áç*u7#d3s3cÓ¯gõ±r±\<õ¹iÙu,ëú%VF¶òQA®ÿåÌôL½\’ÝšÕ_ŸcÎ[%åÈô§@™NÍñš¼g‹¯Î UTâ¬~]'€X½^®ÿM}F‹n‡Œ®ŒÙÆÖ…*j¡T-uõõõWFÊKº¢2ZŸ«Í(Íúp©\¯—Ê•ª’¯Wê33oÎQbyN¹Më¾!qxÜ×I'¯ *lÚ »µbŸDŠKw7ŠD1«Lç@!)M€-zîÃG#õ©Lü:RG#Ð"Ý`äÈ‘(O‹`oð¿Réýò׫¿?Ü[Ü'å¦WYw÷t£w}­ø5ÕíÿÆ¿û?{þ…çéÿ'û_øïøí0‚Áß8HÒhøÞŸ!\üÓeÿÿ÷¤à- ØÿËØèØqüHøo uüò" úO¤—å€ÓÌ | …ü±lÞç>Mý)„%´\)ð£|kÛV.WêW––WÌ7}Äo÷p“€Y D`}û’œzæû(š„ÞVƒðp‘õˆmN䈅‘H[@ KW”ˆÉiÔGÄòÇÍOš›ôåd¢» +Öi³v©D7o +Y¦P8"C‚Pt¤/J¨ N+ú «(,²ÓZQ<Õ;D4L]EkÒ­Ðæ——V¤lpÊÜC¸cK)•+ ÇZB¤pƒÒY’’廡Q„K<쀚÷åAÂ…úU´Ò>jÓZr"(J“jfá–QâÖ—Ä¢XüîRøoŒ0·Æ¸ƒQN04Ÿá±×—s@Þ zžyé̽ôGúhñ*í¾ôR"þ:yòü×û½99yÒpã@58îQ‡Dxóÿ¯ +@hM‰’5¤þõ€–QÒÙcÀÎÇQÚÓã¥Èþô‰ÇÖÈv%xq_‘© Tü—˜•‹k±Ÿ¼ÑŠP‘-I²¬Péïd"@æ +ð4zúkî™k€LDÑÞˆ¡!†¬©Wz™&)¿xß}úÿcèzÙ©3´–kŸ‚è;X*?+‹œ †Ì•Å\& +2ßÉŠþv½×ÉJ—¸;¿ñ>© ÓH¯•ºËF/—e¾ËÁ²Ë )—ÆÈü9•´·2eÍkd£0’t7öÈE7yXõœeÕ¬Z,VŽ´jQÄhºHl¶øÁ#Gd· +=…¯–xÐÑÐFFªt? ~Yõœ{¢ý_öÿ—Ÿ­þþ×§¦²©jU +—”<¶SG³£Õ–ñÿ²=”½íÖØÿ{™£H*ÀÃAá{HÓðÝÔýÿûâx4üƒ™ßìØÿå{·o¾gàgÿøÿˆà'¼"X*@CÈ]_ú,ƒ þŸLœ{Μ;G¯À'·ù.Ûù¹@’¯£UvèyÌS>žÕlÙU:„D+×.Wªç¯Î/-ã)Dbú¨ÁAL ÷ Qžú¶†Á¨iô±Ý)F6ûV˜®ºB4¥8…,:“'n*¿Í=qÞÎ+·¯k fŸ¸ÌDîtñÝhÆwb°6 Àö' t.äÀ†ÆÅIi X +G_'Ù£4:­=Ó]E1îÑts¦¨ +w7€zTk««Ë‹K‹ µÄµŽFWQf™ç»)9D–€˜]nWGâ8ÑøýT@¾úѬ¡9­£ª¬Á®&Dºœ*H;N™Ø-±| ÿz @qKa,€}/±À?“çò&€Sáp׿s¯hcÀk3 ø4¼äUÚm(Oø¢ýNðÆ¿œÿÇ¥œ?”ÏhiíÐphY/©dINÙ°© Eˆ>èé];!?J€> kd»2 Zܱt%­—λ9Êãì`éÙJåY}Cj¥b… ç;»x S ŽVz怑`+‰*#Ú5†j#tÔ3iz+uýõÓ .,Òw "ð¦‚d"5—dÓ. @¹ôìà³mªH½X)Q2ÄV©•ÃÁi«LA44Š“ü¹(Ó öúxÇïÞ¾¡¬Òƒc Æ9RrÈËáÁ’‘ìàðÅØM’ηM ø6ö¨gõ™™¹¹¹™©¬:S©Œ-\œQõJ€G¢Hí‰ûL€† Ý#Ì0•õ<§=ÿ‰ˆ€u¬äÈíÿâ—«Õßÿý©ìÊÜÜ}}®^Ÿ®×kÓs3"?1óþÿ®(ý*yû¿nfwÇÃöüvBýæò…/Úÿÿ4äüoôø“ü")·nÞ~ïö­÷nùÀ}%~C üÿ[iRþì»ßùηÿø+_úÂïìüÂÎßñâÀg¬ð^ú.MžØ¿ýa€­€ýóÝ\üPÞZ ÓÂÕáòÔåù…¥µF Øêe@`'†2+›†@TäÌ@!ü5=Š×Ò@D* ñµ0 ª¶7ÀƒÐ”ƒè =±II†Ëí"÷ذÉ(¢™jÖEì ªNißiM|€UŽÈ0ådÀš +w }Ú6œ€âÑØ@©Ø'>—¡ü8HS¾qQxyueq~~v‰¦Ŷp?!¿\œ{Á9Y"È"µH7®0Šäû¢ÎW)6Á±!”/)“êŽ@ÔÍ8UÁš;¶b7Duøß¨[Iû‰\(§îvUÿåaw%"ÞOèíç&‘\ +À£r€0jþû%Àñ:ü¯þ›Kû»O“á2€‰è@c€CÝüwüI޳j‘(™…Œ÷ô´Ì¨ÿÍ ¿¾hç2ýw>ñ8J€ötü¤’€±mH^/õf£ ˜Ékøã”ˆÏeh’+Y¹Ôµ{·°Ç;|¤ˆ<•¬§.ŽA|œ—* ñÜhàøͦ‹#ø"Ëp. ´ñf˜œØI:€ØŸ{ÐΖöƒÎ½…ÒЇd4šÕ²^Y·ºjÄãu‰)úiªïëÚÛU(Õ«ÅÑÚhž3[RŒ#Épä5:Ó[®QBnâ"}"ùÖõpBˆ"ñ–¯zm¦~eÀsÕ†@JJ^Xçvÿ4:˜UÆê…§Ÿ.K_- Tì82Â×q%žJ!aÿW{Ÿ}ö÷¿žÍÍAúlìâÌE‘_¿X«Õ[ÆÿS5ÖÊ\cL#¼›i’ìèþovbŒ!mù¦†F€ÄìÿyÆÿÿþ‰ý© Ïÿ­÷Dÿ[·nß|ï½ÐÂð“i±€ñ À—¿ L¾°ÓOˆOíÿ&~(x¶ß Õ¤ÝwÜRD…ËGžŸ]X\ÁÀ\ÏqzËhwÐ ¶xÌc +òN…6QÒÆ%±s@ÒâÀ‘ ³: V7Tû2Ô‡¶&ÎÂTÇ$±±J9oÔ霂‰˜÷hzôU‘Ù¨n÷[6¹Ö.Œ¶J%Š +7EY @ÑN:­¢Éâ'eðh¾G0e$&))$4פP+ÀÂüÕ•ÕåÅ…ùkËÒ(2ŽŸ i%Qâ^9‹ƒœ}ª[DÅŒVd)Ô¢ôîÃ1}»IAÐÊüOçPظÊg}’Ÿ&‰~LtƒˆJ¬V!oÿ èDè.1 + xx_9yâ¤} ßÿãxÐl^Ÿ4ó_£ë_xPð$ௗœù±Í?Oá8q‚—q„ÀMO~fÿøñð(œN€ÒdýÛ€ +po€ÊŒæB%“Íqþï>¡ôÛ<¿ñ¨x½´<ñ„”¯ÖÈv¥ÕÎßjiˆ5ÀX?!Þ$·m)’i=È$Ú”gê…’[YïI{q¬G`(•A‘M<þ 7fÖ«y4üØLqdf4¦ïE¬+4\QÔ‹2™IרÇ=QN# $Då+½Yf@‚³þ£Ô{ëL7`íC‹.—1¤KûýÂc<ý%) +£õ†0TzF+}ÛD÷0Ó+5cH94¢õ¢s@{?6qG x¨”¤Ôës3£ÒFš>Úrþ£ Ü ÅG#GêÙÓÖ-$™=tÌ»¨JZù/û¿òåߟúºìÿ¹+NDZ‘`²_óf]ÿÿFûg'ö?\¿ nùb™³K À·þ×o3 ì±³¾ÑàW?ÿ•ðÿË÷~uë¶äÖí÷$á° @´Xø>Cÿä+_ñLŸõ"5Øpúܹ—“°^Ò¤MÚ<>þÞ¶ˆûúm¹È][]ºz´rþêÂj¡ÛÓs^r#×OýÆs_¤0îDm3#( @Dg;âÍu0¢³6̤U` +Bû"’„¥-Mâ;W)¶ãAë·ï値€ 0¶±+ÑN9eàœ`Æ6íGºË“ _Çõ! +1ìõg'NpDË€'"Žÿw£f¥HQÇÚ]YY^œŸ]X^QrqîKdÛ(åà|ó:R!´«x8µ(‚sÖ_§BtŠ¥¦zh.°¶ âê$ÿMÕ,C«(Ižø/Ñ¿jâávÄ$E¶ph|Â/ÉBtÜËþoôðqL´©<þ™'>óø“Zbû-Z7=Ñ Å#^Â}h"9&&¢€éŸ·x@²üsq±ÒÒðh½Þpr£àq£ß"ó?:>þÀðI%ñý~KSd—2Ø_( Üê[*ÃØx­]åÙÒL¥0 +óöÊ’îs{J3n”VtiŠÏìû]{÷â¡Ç¡`ƒ3ËfŠíëÀÏøé­´b)upAì‚ ¢à `¦T¬ðàg’A³ì`Æ„À>4ŽŽä çýÈ…Â^jгf:í$])= µ‹‰Ù’g+åz±ì&<#ºwòoTІ ¥@)’Žƒ´.¨Þ¤Ù$@ôT‘p ºDjøÚá~d$«3 ’(­óÄ4@¹Ûÿøÿ3øOwc•\êט0cÙØXÝ:v?Õå­–hÿx€+}ý¯×¿ó¥|Àà? ë-ºŠÿ9ý-¿º ùs¹%ü7T€½ðÇðƒpàà…Ÿý&ràÉß“-ñGôàw&€ošú-’žíâ®þ8´ß42B È—m4@ßå…ËÕ*€%™©øÌÝõzÑF L6 +YcòXC@ö¢¡d›ÚìT ãÓ@È ±æ…c!ˆ(ÚõÆ€d,ËjÏ=ºØ„‚hŽg;X±/vvòèη÷ÈGX…HÁ¤‚îÒÚk`¾yK†ì‘n+öRß·¤Œx»®ó$ +IûÖ`-¹“ =¨Aw÷CSY[^Y]Y\Xœ_XX¶‚…Sྒrn +÷D!ãÞvò™I¢]‚ÐüÃì°ˆ›VÚHÙ²F@Œp†hApåFšˆ”Ô„tmlsqÜäÿêê»AÃm 󈪞P +À7Ädû;ÌÒÏë/F Àw¬üèû²ÿqæ»@Þà?ÿů~õ«›¿xï=³ÿ}-·o¡X`$.:† +à~€ßû.“y6À/˜ì>㉀˜ôô,Àäøþ·Ý&Ñ¿}€@~“þ­%ÜÓ,¢µN­ó(M.õ< uc­ pDÄfáVðW˜= ‹¶£ }e#ûæ%ù¹ AKp¨c†Ó“ŸЕ$DÚKbeÄ÷DÖ  P]K])s2‹oxÚ/­­.-ÌÎ/ªŽišWàv„ëù4Äé:ÔµCÎwî¬RƒÔŒŠI‘ÓÚóÍ» \'quùfýk¸]‘ºQº?GÕÀ‘öT_q[Ä$:‹ã$q)¬èS!Š4Ü®œˆF€3çÎLÊ ?ÑP$R<ðOôûµk@¢ý&ò™ÇŸ0þŸÀþ×A|Ÿ<ðâɉc'Ž%þŸÙ/%¥ïÀ'Àpÿ’g˘ßçK=ŒN1ŒŒA( 2¯ç4*3@ÖE'´Ð××Wíê+ÑzP)DBp+BÄ¡Ñçmr +>Jøúá7Ö¸mnÀÕ©‹cÐ+…Éà…úVCþ‹ ¢¬Jµì`Éï0Ä#îh  ]çø°Ý¯êw«ûëÅ<âˆmâv‰g¯ö×¢!ì· Z}~©`£•EJÞôD?€A)%J>Ï`½`¤*ÞdY®VøÉ*¸ÿGò1yÀ¦ýÿuúÿËþÏùO™lý,ƒÿµl,ºk¨RGǤœUFK»÷ÿ¹ £ã·íˆ‡ü¼üŸ½”€/}å+(ß³¼q ä¯¸ùó›7uûW²ùsþ#·o£ Høïÿ…á­† M~Dxò©ñS'Ͻt–ÆOi§Æ·Ý ïè6€ücè7—Û舷qáêTõÒÕ…%iÂsüžQ†“ÅV±Ia„ÿÝBHÅT¸Ûms;ÜÕE>¡T +ô€ ‡Î§µ£ÁϤJQ W[Y €; (Z‹À Âl¢°€[û”} '>W—Ýïx€ Ük/ÙÒ9çò# +×Ê£ÿˆOš¤ª#%ïØ#¦“!y•9௨hVk+Kó×®-/J O@`r+!$Î/Ä);—\ ûÀ¹+”U:g(©/õÂ*šv|^×i­ÓQÔM\Gõ[‘ðr½/f»NHZßTnÄQ?© €Qg0¾ÿP‹@?ÙðxËT@lï×ð$ZŠ<&½?nxJ +€[$4„ ¡äüÇÐÄ~/§Ä7ÿkiõh;9q¨ù.€\xôQ5zÜ?%@ßßHX{ ÛѬÝï›3ØNêb»Ð°:;:â¶vt¦FKº£ÕêÃÅ™Ã;÷† €&ÿц÷ 6Cé]EÄïÞ×?(ö@€£úÀ\4ÑËìTzúcÓJ’€  2S,Ê>‚(wl{Ÿ’¡D’¢‘e‹²d¤RÏz³‹+™ðÎâ0lûû0Ö }4èžàfäñ —ë:þÙåNUéÓ®‘¨‡èÑ*èí>€BÐZ0›rt@Š->÷ÈǸ:š3(«„ÿˆ¯ÀzêàšÿYð(jÌ„–Óbÿ»ÿâ¿‹©_£±h7~펎 ô3þ_ü¸Ã.€]»:vwt$öþP" fŠ>€(o½õ–íÿ°pó—7…  ÅüÿýÌá_a:Ÿ»šq„ðE{üœàuÀ§dóð”³àÀSOþž™ß&éùÑ&©ý¿áØü7ùÓ²Qx©—QÎ_½FqЇ9mÝú =žò0!D{Âè 4@po¹¤ ,À$ípQOF ú*q\ñ ” ftå‰)ë ‰»!ÚiÞâ0äȦÙ (¯¤îüÑwn Mâ.óØ‘Š£Œ-Cé)®²´Cѱk‚¾wSÊ^yIq §ÉYQu-ŠBTXŸFeeþc-˜f‘z¿ŸÄÉé“ )F`T´vc¥rqº)ª(* +.q:¡Áiƒäc'¤dt;.¬BT³èP‘ú@%sŠÛ†‹øN>!ªÿ•oWN Àé3ç^–íhÎlô3Ðk~pH¢ý&Ò°ýÓŽðõãˆ>Ç™ 8š¡¸€Ð ðÝÃc€ÐØŒð®¨ß&”3Àú>!³Hý/Qèo>ð|R vÜOÜ¢ÜÃ=µé±xù$'P-›ñÀ1”¦ç¤tÅÛqöK+Y½WÑ$c•¾Îއ: £6 5µlôA§^›žÉ²òœè“–(@;døRq ^ËðöRÄóÒHíâ æ«]åÁéúÁ¯V¤„ôëHFòˆ_x;Sï=R—;Vc´¼NLKQ©KƒƒuŒRfÅš{&~”5I\R®öª¼µZ`9j¤MÜáÅ¢µ@X'èK½ +-ÜdòTŠÅÑ|,€àœ2M€FF”½*ƒŸõÕ¯¥0^#¢ÛÅÚÿÍÿû?úÿÇí±fG_úÐP*><ªƒ‘¡ÁÁÎN™ýwì~5ÀJÀoÿögÿM€çÎcø{ý;^éË_iô”ðºÂÿ_Ðð‹›xüÿð×z{ë¶ܾu+פ„@z€ûîw?'ÆŸú=úœáŧh‡žúÌÆ&€o¤çÇ:iñäbè7—íÍxcuyñêÑ©KBÓ"žiqG+lzwbãAþ®!‹j '½-D]ÈóŸ'¿ €ÑÍžvŽ(6Ђ‹Àœ7!âl¸™%6¼9Kzˆc9Ðf„‡ +¡…ÁøÂžåRÎ(-ˆé¤àD"„É”ÅAð_ +…Õ"Ѓ_'%‘´/&iN2%Ï‘(ŽÊA¦8>tÅv[J<‡8ƒ˜pa~vqiÉ -7è°¥¤K7%ïE%Š -Ô9µ®»T óAå(?™ëÅ÷ñW}­+V;«B>7A¹‰¡à?*ÕîhêHE§v|r=ÿùú¯|ÛÂ/ó6ŸjõÐ@ÿLÿW^±àáK@Ãöþµó$øÿLxm¹ð”ôZtÃÛ<Ñ>|©\¹ Lþ‡M=Íw ´÷ÈÎGyЧýßÔWÛ„µ²]1Hî+U!eFXªfõj&(U3™½æ @Îf®\¿þæ›WÄSF²Ó]®WÊ=¥gE» +¬+ÈšvÜbud¤>]­ð¢ Î¾Q±iúb=›{óú2y™cµ^î­Ôç.êP§æ”q©tä(SÕ¹ ~Å)÷VNGt,dQ±™ë×ÿòÍ7_Ïê.ˆ¢T²RwitŽÒŠ†Õº•jQ§§³‘¬>'-¢.S\±v:“:Ò§‚Ó11è©Ô®0añX63w û^IÏ¡NRA¦²j¹w8«sÌüÕʦÒi‘!^z¼¾…jˆ=eï~54€cÚg@àŽ…è;:’ºXYr?á¿¡§„ðf‹ýŸ÷ÿÏí:M¢Œ‰ÿ~ۣ…üÿÒúK»w ûï€?Z…±Ÿ¯Ùðe•{x 0¯½=àè Û_Kàßü‡þ` àö­èxûW·i€ÿÑðÖÛ¡|ï»ßþã¯|Ñ +€í†ñÀÙ³R>‘  Õ YïHÏã­emyþòù£õÙ…<†>ìׄhîæ‰žPWÀ ~$ç±,s6@ˆ”A.1f”]ÿáü&ÛÑÛ BRŒ WŠê†ÂdS+f+_ë{ÜqiqÝÚ]PľРS†>¶±âI* ;7h3 "E$Š^—ç0vX †³^q ôõö–³%T!¡ª §€ûåÕµ5Æ.ÒÑRµÞê/ß\¸ã$ŸÈ…#²B kô%׺«9?ëÒ膒Þâ ¥ts…"º]Þ¥BepËÑ|AªRáVµ¦ââx:MyÚñïK”Ú*¾ñ\ð‘{“öã8"x­ÿ‚Óxh8ðM)gÒT@¡DÿÿmõhØþÖÑÿ3 €ÐŒ@«“ÌðÔ¡ã'€cǾ!àçó@bC ð¿oCÂø;±píF +]tü¤/¶¹¯ìëííÝǪ÷àç÷uwmŸÂzÜÓÝ­ÐÃåâárùðÀábO·Âº{Š_ëù\ÏžŽtìÙ³g§¾{ëî>Xì.w‹={Ù±ã‘=ÓËu,ö<¨{ L>ßÍ ƒÒ«{zK)’99êÛÝ­ÒìfÞü˜G_']bùkÅòáò×\îóÝûŠEåޱ籃ůùe>Ž^<üùÇËûʇ# éî~챞îÇ}çÎG$¹»oRiTB“M¯ÒVMôîû¼¾ºrŸÊ£ËÉR7ájjÚ9žñ”> ÀÞPJÀBq˜¾q,¤˜'@â?sør|$ÿTñø?¿ +x°áÿ[íÿÔÿ_Š…edàKH/h«…ý_ìÜ‹ùߎÿŽßþÿ?µ+5€CF|V +À·òN€ðû'oE¦û¥Äø?ðÿá|(àÆ äW¿²À\~!ÀM3|ûO¾ò%wôƒcü):ž=ãϧÏ=åYI6Hz~¬ÿÑ °UÖyÒy Y“5º²`ÀüÒŠ47 +ÐLÍS]yæ€òø0RwïBtNzM™A1mu”7¤%é +°ÍQ‰ÜÚ'!]êT(2Aûü¤3ȳ!ÃOçÁò 3?ÐëKiO° Eè×IÐ}®Zaá,_ÚÁµr4ÕƒNØiÀƉ¹°Äµ*@¸â¥ºDWܵiÏå$fŸ õ‰…áÿË ×f—–WWðþ{µ¥„6Ô".Z.ä( ë^ñÍQ+†û èqºCâ„[Ÿ=»;TOQó +µ&Ä£]I鵯ü&©ê­6iÛgE^|S™‘È#>Nб¹ÈÞŽMÚãˆà=ÿH8MÀ8 +€ ¸G„w„ÿ¯lÙÀäË?Ñ>~‘ݬ?6Žà +À1eî°“ÇOÃÕoëŸoh¦~îðÊÿ¾-" `Ò«6`bòdÛ(€¦À«€·@˃&€ÿ$;šéãÕÛ¬þçsöÝËÊÝWÎÎkçhV®Ê÷ð‰6n÷Kå>¾{ýf½ÎR©³p°PÀº­”ªår¥ÞK ~O率eb—ŸÕ%²/ɢǗŽ-ø{•˜ú„ r¤’I€èÆ1TyS%l±ÿ÷úüO îþW«±éÜÝ úwÙù*@ìØôO ôíK   àOè}h€å8Äþ_Þþ¥ð?üõ¢¿ìípÌhÀ›7þÎ?¼M@Þ +h?Mßù“oµ*œ8uʯAã}€§íðп| —ôüh{ìhjÌýǦùvþ­DÖèÊ…ËG+—./.ÓÀ£\¡aþ3-‚}ˆ‹2è ©MhÇZ”Àír1ŸÍtÃŰ‚>ìD¸V±%9xæˆVädˆÂ¢èŒ^÷!‘ß]¥Œ»3µIDô¤gB¤ª]6ÖH.®%”æ~ŠÁ1EñMãÝ剜HE[vÃÀ÷}˜P¨+T_ö•p¤D¨C¶:ïWVæ¥e‰‘Пð-$Æ#ä’rnòs(M+¯;ü*DV°ªF•’_PaÔ ·fÝG + +É¢ûã‡t½ÛùÅY}ô“'Ž¢hårèì“øR->89y0ú›ï§]ï6ŽÁòH8™{NM¾ÜÐÚ„—ÿo.†bþÅpÌó;†Ãÿ˜}þxƵc‡Zùí°4<Æþ¯Ù÷¿o‹@ýܧ €SmÑ`a øÏ0Ñ_Á<ŸTÜÃ+V[l™®Îë᧯d½ÐÁ©JåY3¨zÈT*R„äúÔážÊ¥¬úì³¥žŽ‚ SãeÙ‘}õ™J©°ë¡»:+~rÜøYe´–Õ_Ÿ« ×É5ËF0BGGëµ±Ñz6EQÜ1¤Ú{ ¼ÊQ® « `/ - «É^U¢Å^),¥B©ðtA0/C¿Þ„êzý|ïL}º£+p/O32FJY½HÏ>.HT1U ý䦩‘™ëåbuL™º_"-ZÚ…Iž) µù¤tÑ7²µ@ ä*À:@êpÏ™Fi©ŒÄ¥T….g±À“ùR´Vû?øŸ¸ü§¶ýJø¯#Ýfþôÿ§íߨoõü6Æ?¿h¼S¦¿õk_øòW¾õ¿2Àw¥Ø` /ý»}ó6 ðþ×ïËòÿð׿öšKSÀÀH€˜(†x*À/|'Ûä‰ñqÆ>mõðAm’žë„æ¾â|nðkÏ;)h; +ÖþÊâå)^œðO‡k\_³‚G=ÈRx¸+4> @ëD@RxI°4µŽb5ÄÆ?³$@êp&€'è( Àƒa€ŸXL·Xm±…¼"ü9xÔ§x*Ø Ó¾<¹Âò…K¥î˜â¾À;ã:¤úÀÙJC£•᥽»vìèèŠÎï2uÇ*nŽ&Ñ1Q»:SWRäh§F}ÀÔ²¬žôH~§€(·¢Ë@OFx6°¯ªR|µPPÐBZEiL¦s\_*¨4£ƒ…ÑR?07Á`V¬¦I] •‹8ɤ˜Tzy©q¹R¦Fœ· + vbØô ^ àÐ%{@‡ðNjH>Þ cTB¥fàÞo*Xñp“Ÿ÷1`càPÁ6³ÿ}k­öCPÂè9µQýrôÿú»sô‡ 5¬·ÓŸµ÷¼k ù*ú¤1€ðÿæÍû_øÇùŸÖRÛøü¯~‘€ŸäÓ}ßsþÉ·¾üÅ/Iâ¹ÁCb¢áç<=à‡G«ÜÇšÒ¢øé¼¥Ø½0;u”N€++4È”Öc~â ù˜Õ<ÔM@ —bĆƒb8.½t,›Ó „è„ðð)ÃÝ»Šˆ£j +Ù0˜PÖZrø:«%2ö ’‚ïGŠ£ôãJNÐÚ`~q©³u¸%3ÀÈW—^ô p¨#r%ªÎ¨`Ái•'J£¸sXS9V“Iíå ›ûE³Z[\”–µ¬:¦åe[ +@›à”Ó>? +I×£,©¼ùV§ïàq—@Ý‚£Qå•VÕãh*`L‘(qßÁúJaÐøF@yNSƒŠ«ËŒz‹‚©²äEy¾,Þo9ôÆÇ¬üŸÐ𜡠@"´žM­þ¬è ’p¿‰4˜ŸãCÿKaý“`ÀþCüzT€=¹`"“ßÔ÷'ö’áß]y‚Á€í +ÀÈ—x +àäøÍG?õ›ÒÖÈv%A>ž÷÷Þšu¨c3=fJ¥^ïÀ>à2¶b +¼r)“@èW¥ìèèø4ô-ü{bHdgw P¥½»¥ìåÂÌ4íÍ#³¶^®L ø`(uScP€âhkÏ€6s½1•O†í-‰uáåÊŸô)ŠÊ}otoW²ê¾ìHè !Ù¨´“R_i¨¿¯k/³J£+÷*‰x£Â2va¦³brWëv¸2ži[ª¸hH>+Fž#Q5ÓWmhxÚúÐ +>€{y’k€‰ lû3Ü!„p¡¿•ÿ­ökû¿D¿µ¢kƒp ÿGûûv3ÿo`¿õ£›)í7:~‹N€ßKÓüȯL +À/‰À¬óÍÿ?¼ÿÑG:g \?‘öð?ú[ÏÄ\À €DÏŒ¤œöиt?>qrâÅýO>5þâÉhÐ' þ6!p?>±Åjˆ=¬Zš¶ôHv>sG`ÂÚٮȲ·UÍê^[Æ…kûæ`6W¤E;Wü67^Ž’§àÕN½Ü ÇdGwì'D:8g€bÔ{ªºªÐ±cǮ΂ôˆ7u@«yôF¥ŒÖQ©<çé%/h—ˆ;&«T3…9]EŠäotBRmÃP.gå}UŠñôÓáð©†e=dSñ d¯ò‘‘Ý'ŠÊJÇÐÕ_+ˆ¬´]c.‘ýOMHP²jÉÃ$ø†^›ˆÿ¡Ðph°T #}TÌÞ¶ɦýܱª¥æL˜ø¹($«Tu™TªðeÌL€~nc£ý¿Žÿú¢Z êqR)ë‡þýîÝ3ð:øƒÿRÂýF± õ¤ à'²âòöÛæÿ/oß²þãúoáÑIbÜzïæÏÞ‘ûýR@%æ>- +Àé?”{Îò3ã<;Ú%=?Ú¤éh>`$ ?àïO¢üÖrcmaöÒù«ó‹ÒVVDt‚ftžïñÐ×ÚhãyÏ–þî‚0Ày£ÆgïŒÈ‘|úra,J$¿†$Dlˆ”ÔRì(ká\`×I‘J—…q­³Ú· ®C_çµöíßç À,®ã˜‚~ì»ÏžÎ*P— „ÈfgWgõ•šðÜlÁÎS[EXcê%YÞ¹›w–Ô¡ß[õC&\•*.­,¡¸‚égéö—{-ÌIBI¨QghQ:ÎÓ?•r„஢ÅFµGa¾ÿV¨& +_å^}Š•î2Dµà œ¦~iîâîš4 +‡ÒÍÑñ}[þì%\ã%‹ÿ ñ·½•Øö÷ +y à“óœ¹pî\ê›{ÚÖ:y/ àoÜüO€Ï<ÅèÀã/¢0 +`½€F¸ŸØK†Ct¥hß>pò´( ö–ûÕÀò  à |§X³÷؃wŒÙa®ÍxÁå].3%~rb›»ÌSîÎdà »ÞñPÇsŽ™x$ƒC•z·¢ñJùÂOe´nìEXËÄ!Ùúo”Ëõ4•ïè Ù(ÕÇPT64Gd¼ÐOPS1ÊÂý³å þc€§~€åÊùrïLIü/¨="í³e^˜KV•&òl¹TQœRqu—ú ¥þJ×^i…Rý`YŠs£‰T¤¤‚d5Ðø— STÐÿ ™ÛûÑ&ÁÿÐ$L‚¤z¡mßHTLS^€uý< u&öÈ©D7Œ¢~Šð0 à(+…Úý¯OõË[·ÿædü룂YåêÚ½ãáÔúŸÃŸ÷;‚ÿ­<_ö»€òËÛI°Àüÿà×ïÈ/ëùÈÀG訷nÞDˆö‰G|çO¾ +)=Úôè8E×'ËËL´]€_ˆÐðHxØ´hÛ -^•pmq‘÷§§ºÛ³-‡FÏ€ÂOé0:ŽWøô}ì‹c”²g«X›t ŸM¥k^Ž€ aÄñ^J‚+C= †Uˆí’9^È8vBtº† û}^éÂ0"è&¢˜b¬öo0 ×è,äh•ˆ4Âr–ž`þ“Žõ!·]€Ó(+gµ!?Ø5`Ñð«,¯®,/¹/û*}·«#!Ü%Úá•|SÄ~ã_»”ÁS(ùæt•«ÜÅõýú.ðypZd÷ZW°+Ow•"‡HÍñVÉ(šïåÎ]c^·©o ÿ¹o*$‰ù¿`“M:ð7Vî091þÔSã§™ð‰—Í{„Y)\³‰<ù”—×¶ýwŒ8É?T°ýø¸ÎŒÇÝýî)Š xðßp?>±—òÉÅÆÿzÀ6<¡$¬=í +³á0!«{mÝ´xgÀõ"­ñ‚Ê3bž­o¤lóŸ}JÝØ¢8h¡K_·èíþle°ÞS‘~P;û8#ÒTxÛñ. +ÕÊÓBMë“ ïçÉ»öŠkµ±Ñ¬€á]–}ËP» x¯®òWQÊôéËzç(ÇÁƒ¡(ö‹ò%ÞDLY³ +M„¡“(9ØßWàm@}xúúGzJÒ +|àQ™3FžÉ]Yý°Mn%J…¸ Öé«Ä“ `n.«ôwuº€©xË/H¢ø‘@{?€|,*’4Ó_â0¿ÎÞ€:ä쑘˜RI†dÿ?»eû?aÄTzõÿråÊÌÜõ7®¼>3w¥^ÙÛÑÙhÈ-ÿ†à ÑìŽSŽr€€ù(@ïD€[·nE À¯™ AV}À„€‰ÿL +póïñ ÑÐÃÓ(=5ôøÒóBVC’—ÏÿÌ'ñØÐÊÿDÿ¦ÐbQÞcÁ4]Y¾†àÚÊÒÊ +l²?]T0VÀ˳ÝxA¢›yGO™ú6 -↮Œ“’0+•¼SsÊPTyøŒQNt«¼ê/ ë^ëŽé#°±|$SU;«øÞuÊ©’=˜^ì;?Š»ªHàN85ÊÍùæ1|Ë”Eò4ÿ:£Ä¥Au"G|r#S(E[Ð(3®:Îòal„j·ÊêÒòÒâÂÂi ìÞ"þo¢v$l¡Ÿ^ÌéK愺(Ô„•Âü! +øïÊ”W]2"çТLy]@ +ü4¢PÁ¤N$­tÿ©PÖ$ö=[+ÿSfé0ñ>þ¶M÷õ›$5CPNÚßP`<àŸ,ÿ|çÌ=\gN'‹0ãOÃpâ¸]‡öÆ}ÿÛû¸`ÎÿûyÄÿ† éX?@®0ä7š°ö@¶+FÙ}¥^§-^fomT +€yR +°Øæ•Õ +ÿ᪳rw¥T,~U†÷oÉnÌí\YÖp­Rï•J…Ýí02*µ‚öj]&ûZˆgÖ™úÀ€ Lò#•D¨ýƒ‹*Hè*R¥Þ›°kœ^Øé‚ FÙª=Õ”®N÷ ŒÒ¡¤«½¯F­ÝCXøC*"šJ_ï(ÜÝÕ?ÔS̆†JÏ J= y^À´²¿X«¸ÙÈùuÁaxú–ÅqÚ3Â`/. „ +:{zte‹lÞ  ø„o*RÊ\ˆ’r Ûa`(I·Ùhÿ' Íþv_ ¡ íxxÇCú>¼Ã6Xþù6úü·w U yPþöG¼ +.¿üeðØ'þÇêú(ð£>ú àÖí÷nÞüû·ß~;ÆZhó0È™Æ)=ßdBHÎâÕd'þúå^}rIÇHпÁÿíL$­,Î^ºtu^Æé²ÀŒ©¨çÛó6¡@|€„­OÂòA~F‚µ‡À7F¥Nq–…ëR¶AxÎÑ’o·´CXøDơʓ]4•ϼOšˆ±qD2YòÚÐÏMZ#nž‰é*gzÙOaÃ/ÓqL®q·I2q¹.# ¥aç±Up…úêI{Ü¡•®q¯G; ÖV!æŠðÀD€ú0` ±°±ÀÞ‰rbM-«y< ÿ¿>öð uâ¢æÀv<­Àz2àPÕȶÅÿmˆ O°r©&É*N˜+ 3´O>{É‘J÷³•RQäý´€Nã‚P.áè´[žCCü´PüÂè ÅR­ÂëüF¤¼ö  (PI¸k~ð[)Æ»ùµC‰rà)¬Zî©–pE:ŸŽyÈÉo¤å½¾Ïù¡Šu ÉÐüÒöîîìêìiôð§ Ï'mJJ )½z9<8œ9n¼é;ìÈI|e6=wåÊõÿr±¢‚í•б¡ÀI[?€è ˜»˜ ñ‰G÷˜{FFF2ævM¨r7ôÿg%Yoÿ«ˆÕ#Ý=•á©úÜÜë3Ù s"Ð^ýsÛ?Ö¼ayè™!ƒxÁ+8ñpÜ”Yß蘚þ™ãÿƒ´¸ Àí÷n¯ó 4šâIå'†"zú>3ùÍGÀôöÅ€$éñèo÷¤çñkVg/_¾zm‘9jd$ +2¶ÍK?×Y±ñ»pƒ$FT2Bm& S!ì³ã%—Ø »’»æA0ïÔ€¨‚Ì«;1™Ò3Ó*ˆ÷5±}>]Fš¸ÁQØrŠŽï´0plˆ¥4ò"ˆãæ4¡iÍTùâºJ…a¯˜f Tq#SU{Ü)~мžï‚SB¬r¥ùÁÍ ï®IX]u#/\R¥ßϰ²A zÜ÷]Æ=Ä ~•Ä¥àœËÃ6øf]ô¨j0þ©`_§}Ý ‰ZÓEܪ²÷%:ÈyïR°¤ã¦ÿaáÒ¥KþûFr‹??jçA²ÿÃpè©§öONNŒóF€hˆm.¤ôH£7ÈSO>¹ÙçPÞ`B´ßE|;Ä{ét”ÅoõÀ¬Üþë$ ÿ$ÊPÌßÄ ê €\xâQ<ïLT{ Û–Äû ˜–¯Ò[_’­¿[*‡Qw»ƒg»¤ˆ¨f†e(ë)W‡ +»zx7/¹ÍF*ÏH¥(ŠÿÏ¿0&Ú—J3P µ£–‰»Ùó²¼ ^ ª—ö±U?N}TŠ’Ê!<îÎJbz $j£ 3Â. ó_”Eï‰unè/eE׎þA8#dû× àѧ>3ÐKjÃZœEM U¨g‘ ƒì"¬Ô¿wï§÷üO| À†~•‘äþ7€¸gÞÍ ÿU£~°"èniødöÿç‡Ë¯¾ZÌôCbÂf-T•’Àô|¦4Ô?xï&whŽdÀ;Ñð½_0ðÿ¡‡üs ßíŒéïå£ xë½÷nþ €{Zø³Vï: Àéä8srüÉ'¿ágG›¤çG»Ä8À6 ©±â³@ËÊâìÕ˳óž(õ¨áùµ­ ÌHNvÓž]øAã½-ØÅ$·|cû”f9°# + *˜£8¢­0G„” Ù‘&׊ÆtÐãb ¼nx«cQ³yå"Gñ>±\&íGt"Prg•¤/P¨£ú€¾‘:æŽH6\ÆuÎÕ5„àhQ5,//-Ià­aåß[h˜ þK’ÐЬàà Ã(IúPÔ0…q;¾/ß‚‹ÌD÷ïb!¢{kýmWA‹zõ¨š×ݬ­Þ¡dIýhå?÷¯èé°ÿk2ÿÏ[Ƚü¹´Yò &ò¼cwßÐ +¦•êJ‚nþJªT®›K#Ì +€À]°å˜æW½Ü“²Cž­”ŸCЮk¯¬(s04):×'„Îì˘ӗ)oFŸ³k¸õ:õíëâ”ÒÁ +¥"FÄš;d`nf3Å×=2R7Ί9 |” o ¢CqÇ$:B¤†àÓÛí`@Üuò44—¸wkúŒ¢è®õªbÿ_Ùnû¥üê”'HªÐbö÷õ¡5lÿ¡þgµâûŒA¼‰|1Zè(l»à?¾sÓ€x]?ûþs H‚ +@3€§t'ÀŸ1€{()€Ö>§õäaÑpúÔ¸»$¯?B ö´pØlà0DgÜ+0_¶ã€÷K×.Ç«Vâ5@ñœ2~¸ó̆˜%‚­eíë2øÈ_ÓOWÁ@sNÒÄoÞBÆ©íËVU*Úó¤ëF{ +×sê +pLG¦õý®Ô +‚T +³JÈã|¤ÑÒïÔ£ ÞUZNUWYEÀö…mÊEÆM‘„ ¢¤\MºÊÅÍèãTâ{Úç*gïɆnÜ@ÓZYZœGÀú_£+À=ÀÖ€«A ;cw΋y)·ÃPjtc(éãÞœ0ŽB¸môÃ+aÛ? ê¤º} U+=j•ºÔq“ÿÄ–lÊÌÉ ýiëï»yKK@ÚzóÒK(Ç<õ»¶ =>qæÜ™Óâ=-þ´¼váµ ¯è@öÿi +÷ ¶| ôŸ<™ýeú“ñ6¿{ÂzŽBúQšäO‹Kœ %׿éF€‚mÒ` àñx@’Dµ²mh÷aY`Æq=Sé-eu÷€ãý} o†q##¬yON5›é™©×­ƒî³Ý ºÍ¼2X™ëž†úvÓ@Á £×„#%r¥VŸ®üíéœÖ`rT˜Ö–@Çè.+¿Ù¼SJ©ÄDPAŽTêS½s‚q©2¨b”tJ'u¿ÌG)ÌÑ‹0³ï? Èd9*i¥î’Å_/Ög<ûÁù?ʘmëuÞQh¡ Àû@7¯‘V‘ +ÍÊ‚>„ccÊ̤S¯wmêþCØ0ûk­6¹ jƒZª”iÿŸÛfûÿpùUG-º:;÷võõ'ú·ÚþCƒƒƒ¥¡gGG âM ZâU€vD€_Ä{€„xSÿ_°ÿs ü|8~Æ\€1 KxÒ<M@¸ô97ùM€SAÿ¦x?Ñ_â°ý:ljØò÷‘ÕµÕå¥kW/_c ‡ 0ùyYB ÅYSA!1Ñö SÀ!àœ1eÁTˆŸ¸‚4‰)ã>‰‹™ë¥È ×ä‘M™ SÑàÉ`|÷Á5 +éH=€Ãœ¤< OEÔõ¯VÞ˜W1ÂDç2ƒS)Q&íê”6¡Û %œãND‰µ  P/Z‹²˜ß„pV7!ÎFý8A2ryiô_YY^\X^Z»ÁlÀ+ ô^¢³Ö64äçI–E[Ý!µIS]Qzûj\p­´Æª÷íZ±Š»!ÄwŒÂ¥_@‡ão‘àÑÆõLéUúr¦ÿ.GIŒKÂÿ¥kùßwƒõ-;ë…w…àÉ'ŸÄ–šìÐç•ÜpáOÏMŽJ¯ËZ''Ú ÿô¸í@`ÒÚŽM0öô£Ð/€× +ë_ÒÐd¿—0ý“„àÔä 뵘ÿúÏžØÄ`â·Ùÿ€O.ÏÝOŽVŽ +`•ê”Ø_X˼©7c”ßVªõ™lnîú_¾93?pAOe½UN™]}=ŸÞÛ78šVd¯é™S2¥®Ž&Ûy†± +Ò9°T©_¬ÍH‰ôõÜ™n ÛɆAAªånª—+2•Ù© +Â3*ÉušøD­ôf@´Ðc€>Y}f*V‡+*wïu×ôÁr6}µBi‰wª3Å*o~¡Î+p+PªÊppV§«ÙÅzÕï.v} ‹ÿٟוK‹è$ó÷BZü cµ4›à(ýB6ólÑ ¤Ý@¥°h‡eäˆVGtcî 1üIúÿÿ¾~AŸíï+tuú +ýƒýýCƒªÑ¿ßvÿ3Z÷?±î¥„ o`€wþñZn¾wû=wxÿC:Jø—‘ðÁGV¢€÷ßÿˆ™¥üÔs¦F)ßÛÌ0ñRÃpè©ýãv-¶,§ ~ÃüÏu¼€0ßIA±lç]Ë‚> +ïZ]ÿí·Ð@ÐÁ¬Á ÁÙ5@‰Î Ç6ç] Gô>•Di¥ƒ„dñ“ÎglÄI…9Udã4y©»ÎÙD +w¿"«.£ÓÒ®öÍ9òWt ÓJF…c.ÔiîV;5œ N…cb(®P\-Xó­Z‹ LÓÿÏM: Š­"Ùíà3wT£ÊY씦µ¸¼°À<@5ý›É%PŠ %ø¿^ µžòªH(27ÊyÆÕD±‘p’P‡fv”ÏúVÜ¿…ÈÜöݫܤй”ç¹ßZƒÿÚWD%í#Éb‚?Íÿ þãØ\6ª§'­xj¿ý™'öOœ;üw7ÀWP¬\¸p᥉³¿‰`ïï·ÕßXƒí‚²[ðÈŸ8îŽ\aà¸æù³€%àßä~c ò·ˆþ¥x‹„pjrâÐgZ€0ÿs EÕȶÅãÒ·\$¬º?·OGî5¢ãžž}½Ÿï-ö<¸¯»···Xìí=ØÛÝëÓŸëîÙó?í|D²'ä±=;÷<Öý¹žžÇö<Â/ùˆŽËò%g¸¯¨4•ÔÁ^´Ë¿MÛ B9$~O®U9TâÏíylçΘØyœ´Ò†¬´UûÜcÅÓ‡?BIEw4à{ê=苸Šuja_¤ãá8ɾÞ}ÜCC„n‹´)¡7é’èoÙl4à½û„ض->:@èGt"<Ì`ûûíÿ¼"¿¤/E”F…~ÞhøŒ•€Áþ¡þÄ4‰7Jòà¶ó.?¿yóö¯~eÀû¹Ý_øÿ—ù¸µàcÓq€ô6:þmjhõœfâGŸ†gOKˆ°¦„€ç‡ïøa’ A–\=ˆˆ, ([ÈâÊÒÚÊÒüåË×èp’á Nýp Cƒ<€„X7Ó#ð"m‰aHr>`í‹M(¦fhÆ W8‚7iè¿ÈCk´6n/PÊqu´Qƒª|Ú7ª$ÊëÀ0Ȭ¸wì÷Ö¤c]ÂI©Ø\&vúbÛºx“›¤ìOçVÈ_ß|V_bG©”,õDUGœ±JÀ>‰äú‡É(%`umy×RÉÑ÷âžrù’ÐϧU¸Ñ¢ Ã¨t* Õ@^䯲˜ÿ®+•RzÜk×OâÀê˜ ÀÎ@Ê}Ã}þKó[àA±OÅ~‚þÇG’à³ù_ø÷Ïâ?ðm +/ö(T€ã“g^J=νÿµ}íÂZ +¡×Ë:Û?Íá{àб“'iüÇP‡úÇ'ÆÝÿ–€Ü hŠÇY‹”šäOK¾ädlô_|ê?lôœZçØ„ý–Dµ²m {q«£¶*Ã_¥z>òçµÿÚ)Wª¸Ú§æ†{§ŽÖçþ³bÖ¯×u…O—d—*GÊEÙÒ²ûgâÎú•úë38è »wìØ]*••?–Õ_­VE«D¯ìH6=}qzzz&œì£Ñ¿“"Z©»—X¤VÅ,/ó.]52Eo¼,›«geÌûè´x„dÎyOnV›£„d$óýÿýúØLæ—ýU³Áª +U©LU*¸TègUVwfZŸ+vñסR=¢«V+‡{‹ºˆzP³£®ÕÈT633p¸U µ¨KF†¯5w$ÈҤ–OÔ1ÿ¹“‚\ûZÓ4 % ã$ŸÄþW"ÿÿ¥’*Cý²ûŸ¡Õßšbo”äÈGà à—7oÞzO`w@;þ?´ðñ‡"hàHÀ{ïåmnøÁßJøþw¿óíô2 ñÿe· +ð“á8£ÇÅS¾ÉëOÛ>§Ü¡ÏlO;ñ4ÁØoStÚ1""GéÁ¼…˜L‹ ôˆVé5q'`jÀɾžð°-€ +<ð“ߵȋH†¦g¨5)¹B‡$Ç9¢G¤€‡çaxÂ.ïæQ GRm( ç´ZM±à« \Þ¶Ui¡†ÛwM²¸"< Žwà;±Ùؤ_tã;9ÍuAQ}…¸6³Áê‡ÂI–P%†k¡y-…Òׄâ*šå•‘êuy‰7.Éö— «î)"çåÀ?+ã_Ò¢(u»URùNSö©ÙD‹î)bE‘ÌqÎIâ"÷Îdãs’;Œ»pa'¿„*BI¨Ž’A¹bOÑø²äö«ù¯j_‹6€{Èz/@ðÿþ'÷ŸÒáK¹àµWÎ]xå€×^¹ðÚä8ûl¶äþ¿+øK˜ÁÎ}xPNž<‰Ùï>ÇÖ{öçwˆë×/€?_¼âyò;K®´½ `Ç=ÌI¢ÚÙ¶ðÜ¿¿ŒÕªÅ4mŽxg?¸Ð“Û™éMP­ÏÔ.Nψe2&Ãyÿz©P)Äû€ ƒCu¼Ùb@{ºcÇC»:û=(Ÿ‹=Þ>Œã‘‘O<4ÍÄ@œá +v°ŸËRpú+$Á+DåªñÅKêõZ­>]w'‚JIVla¨§\T)÷*°VZ)×g)ÑPeè™RÖSªPØB”¬î÷0ïO‹¥ÌÍÕËÅ|æZFhü¨&[¿þuê,—Èm°R*îø ©Õž£S@.Ÿ°À†™PÕ´F8Â,tä·`»ýÿt÷dU8O õÂŽƒC#*2N‰/k“x£´7ÐðtÀÛÑàýhøüÃÿ ¿„,ðÿ£ÿ/ÚÞI/ + ÝÏ ?øô <=9~àÀ7õÔ8Õö9e²›íiÐü‚B#"²¤'ó‚=º,àj> +.øí]×s? I …‰‰8ÞEc‡2ì‚ ïaJõF£Ñ i%êÀMìk ‹N3ñÅl'Ü_÷¸JÁ=­iôWzîd`H¥Ä%2SU +£^Ñ*ÓèÐãÂc¨N‹+TVseÐ9.7樉 Ü Mº 'IDüçk;ÖFòSvÓôÀ„¤§XZ¤-}…·ÜK.]¾l –Õ•\Ð=‡`^SÞ¸3k,ÜEp=©rtŸ +ÓÝS"h­¸ÐX…§„î;iŽøª¶|6¸UâpOÜ*±¸„ª!.–ðÏqÎÿŦýŸð/þë¾þ ߎ¼íý.€§ìOFX7€wè 8yL6•ð˜Üô"v¬Ñøï&ú0¬ÿq{¬à Ú6úÄìE“ÑÀ€ }¬Œ?îYËo¤¹€4üŒÒ-—ØdÓ_Ën'rŽÐî÷è˜I•:éFÀiØ&É¡"j–<@.ÝPL’Q¾w÷ŽL(“²T)d.<â‹F•¤tÀ&×q¡¾£YO±/ÐOH )•²²¸чT.;Ø•Øû!vöí)0'¯Té§ÔÁãÐ`eÐ +€DéAaè²Û{hˆ;r9(Ésm˜l‘ÑZÖó‹²R3\#tOÐ^yªEFy©±{ ÝÀ ¢é4•€m÷pR^ +çs€véäüöûÿ?7BnýƒiáåÑñᚊç‹Ö‹I¼QBÈG0Ð;~Àí›Lì.–AHì÷–Ùƒÿï¿€Ào4ÿó>áxÉóð¼hx´9! =QZD$7ÎsƇ$üKØK"^:(e+Ñó{méÚìU^S³Ê»€x`ëI¹L/=ýýøOmü8‹Å“„x"‡9ÀÞVÜ Wq““Ý)sÇ&¶IîR¨#à@”âÃnÿØõ¡5¡3“xÊžY| !ÜÓWª1IøhpÔ*¢³#ªÝ Ú!L§µRBñ}9 ¥!1K”PGRqP—°ü ãþ¸Ä¤€PÑŸî•ËË+‹ K¼q‘€[xÀÿåÜàu(J—®è)‘°*Æ÷® ¸ 3ÊÇ:´}|ç:£”t‡h#®P‹v´GÑaº¾nõ ˆ“:Ç®GެèX8nØÿ‰ÿHKó¿+2uÜžXø†ìÿÌ<>ñÒ™3á¸À<¯]H}^¹pnr|ÿã}Ù³¿!”C4O^}¾aÀ‰ã''íÀÿ¯OÐ^üg"7pè@ÓœdÖIóŸô$:€5ùõe¶þm€ölæHT{ Ûâ¾"TÉêÌ-^x1‚0YÆKuÄ2Ã{”A;ƒ²>Ð +@vÁ=6$ˆéìØ±ãaÂK}ýýYÝcV$&¡{$£Ã¼vÝz¼–·ÒSÄ­?ìú`Ï“ñŠ»Ç"Ö Ï¿ }v©{ +B›-{¶ÎË×ñžIÉ—úëŠEÃw™‘íö°ÙÊI9M÷O…dEá9jDGQ!‘y½LK@þq‰Fi@+©pm´&U lØTؼÀh¥EàZ‹ANô=¢"=˯ Âl¯ÿµ‡|ÒT!ªiECÏmfø#/hyÞ$Þ(Rþ$&üÑߊÛ?yëwþQ$oàÿýp|üÏÉÿÙD Àï¨(ÿ$€>?ûéOßyû­4à†Q/…ÁÀs§ˆž|RÒƒ¥Er²ÇF_¶‰þ’xº¤S'_ä·žÝ+K ³—¯¹ À½ P0mk߯ŸþF¡H£s#ÏuáYA#g‚¶ù®$ §« ât8¡¯­Y<&/ÉA1Eg~]ŽÜÖ'C+´[õD!àøª€f'=Ñœ8ÄÁu€¢ãê <ÇÄôÇwÂ鸻ãñUæ4b«/ôÞ] «@ܰ¿©Ø‘£}>ôUéž S6в¶º"`y‰W°È°¿—„@Kü:,¨SèÛPr”>ŧq#²TÍP.ÂYQ&Ê¡³Ü9ÃõãƒÖ†º¦Ø‘n ¤SG«ŠÀ½§À?»:ˆc¶ôp´4íÿDÿhþ÷ßÒÝ7 + +ÀÄ!±ÿ€›Pš}Âàà &ÇÜÃ Ýæ÷¸à ÿmÊŸÀpbâäIæþðÇŸÀ ¥éöô×TˆC‡ö·-ôïŠýo»÷òLŒ?ÞÐØÑÙÅúÍøÿ@øÄÂã+€b`–.Êúµ +Àˆ=I C2ÅD8#¦SIȬem/tT*µžB×îή½ð¿_§MZ¸¯óá;ÚÕ…uÞßU(uÊòF°™ÍÕ’Ñ¡xOÐÐÐ3ºÈ)*NO€éö†xÕ]šÛG¨ªWz«2Éz:è^ûLî+dW¡£Óc)‡Î ¾ÊST†´¢»›X7¸§Pé/ô©\²{)ѲLs ùŠ†Ô«½žì—}n>Þ)L›ˆ€©©¬ñi8RÄg9G± ÿ|6úŒ>Zþå_þ³닎 à½÷þ/iîø_­¤yò>z°¥&€SLwN'@F´~´2Ëùx“?Oþ[ú$ì§–m ÔzñÚÜì5<x§Í3‘BÔƒ +ñ¨><ñûÒMIö=Œä+øáPc£M¾ÀIrdÃŽzCöe3 ÒŽ<áš¹ãµi!W±°oµƒKFZ9mÑÌÊ 1×¹ ¤¬µ£’,é*é*ÈÊ„ + X•‹’pR¾ÊW™NiKlPûJ€K|©cFº¬u{ª1A|yeyQ˜\^Y[IÓÜC®^üáÿe7ðQ&Ê@¢ô©5ߢ«ƒÊTñœ¥…úBåÐ!6r”"mWWc(…NDGýÊÜ´¢ê×qÇ?†Vè0´"p~Q׊®ñÍKÀâ?3%ñäðßìWø~‚6+ãô€þOÖy^qcÀ… /8 5aSÁ¿¾âæ¸eb‚q€RrÀ8óHÌ‚hhzŒÿ‡ö§„“ìOªySø?Þè˜8uèÉGýŸèÿO7lÚ0Qíl[L§­‹°S.2¤.5²'K“Áö•ÌM:*?Sªè)9mdzà¯ûðž]:Ëàç}û;zx×ÞBcî +¥Ç:_°/äZ{ЇYæÈÙö¹B´‘"0˜õôVŠáËW¸b„”Ê¥Lv1yê[ä”.彃¼Ú¿«£Gdk# ÅÄûoÌI@9ØSÀe°w/ÓsjpPZ‡t$e2šfþAkDRyŽI%3íMTŸç|kO<¤ÀÚócµÚóϾðü èÏg5T€±¬Ö®PéÞié03Óª€o¤Ñ@ZHvÄ/þ+øÿ·aÿüªŽÐLÿgø ”s¿È?B½ Ü?o5À–?ô=£xƒàˆyÌúÀÿ[‰ÿá @¸Pþ•¾ÈïG7ÀÛt¸ùÞÏnþ”‘€¹à»ßýö·xx@<9Âpfò›RhEðç$ú&úKüpIâ‡MÎÿí½ @ÏðÅk³W—–Ešeèä';PŒquÑñNÌ`¼JÁ»ºL ½ îÄ=ãÅ%CVØ‘¨$ ÀN‡r Ðr çá}ºÄK|8AnÊã•Ðh"éHÝ€äÌ]Å‚¹²d¹Ö¹8®CILA´Ógµâ68«]%E4+” +nŒ„”+êdtdÅ"ŸSÖT†JJ# ysŠ‚CÉóÁ÷®õÒÒÒÂʲöoqÏNW%ሎÅWºÖüj^nÖÅÐÖUcÊR~|Ô +1Pb¤ŒŠ²JWW Ѩ8owÐ×JõìˆJ‡ÊBP¢« z']ST–ÖøßjÿS¢üûIÆ„€à€ üðüü·Ý¯¯ùîÂÿëÂE³u¾‰¾7ÿ'NŸœ¤+ =ߌ™€8jxü: õ%@:@ËÒ>¢ÿÔÍ=RZtö{i‰jdÛ¶–h†¯—¤àòfŒ‚ À]–y*\#‰s2³+K¼êÙUèÜ-œ2lFƒ²BEÚ¾B×]¡HJ==£`&ÖŠÌá–—”ÄxÈ9L~á:ë ôå~XÔq…ö+¥ƒÀ|àÀm-ýƒ÷õ?V`äºÇµõ;Q_“Íþ« RT8”&ÀÑ9JÃ&nNk*@7že‡3üóe*¨,þJ ’J„ `¦œRÓ‡úµ¢®_dàæ;þbÀó²°™’»TI6ïàên÷((÷(xÄó«ÜssÛ°ÿ1þö?cþð»„HExN—ùªdú‹þ£ÏKwÁ0fo†àÆö[o½ýÓ¼wëÖ­÷­õÛþÈ¿âøðc¿ ðý_åŸòN?»I7@7|ÿûßûη¿•¦æ'zÜùiáŸ;Ãæ±ÙßX&NÅ(€Æ'œ$üoéˆçóV²¶Â 4)ó‹†ÍòÊ +6žÛþxâc# +iÔ4à‡_<øbÇ<‰€!mîèÆ QŠì²NèLØæ §I_Zb?¥Ø4Þ9 ¹ÙrE¾‡¶¢èLˆçQ:æR€ék” åŽuJÑ‚w:gVfâŽ"ÓÙ¥ 0ãO×i ¦;BMâ +JæSÑ0 +C|œœ£¾$‹+‹~ ¯\Smo.ðßN€pèGAÈ5¬uW{ûã¡ôüDZJ¢P¢Ëh_ªœõŸÒŽ®Ñå\äî °Ü +©Dc‰Ï(™¨º|¢ùö\m9ÿWšönþ7øñŸø¶$yžÚ`k¦Fþô5· œ;™Üóå^ó LØ` s€›ZúH¾ÑÒÿÏKÂ~SüÜð˜ÿIx¼ñ/Šiðçù’¨ö@¶-öðß{i`ïúáÆÞ±oöÈjt_íUý2öêö“ÖjÙP©Ðß'Óþ·:úx•œ j<ìÌ(fùòŽ9mfÖ×—uöÀnô4­,}O:7h,eÝ|ùÞ'11ã‰ËËÿ¼§‚é +µRè|¨CU:KîÞæ~Gi@–Q K©£§¿ÐÕµ·s÷.]Öå¨J}¨¬”<—šó³‹‡§Hƒ]êA†¸öˆQ™9Ì0^ÈÇðœxåu%ó(úÅÇí"ó:«I/ ö¨éÙ´€sj×T.N{à‘#1pEö?Ý3$÷¶ÿuf¿mÿA÷w~¡#i-æ×x"×>/ú»Ð*s–½`o{ÌÿŸü(½ €1€°=ñŸy€ÿ7àÐGBwÆüÀ;Ñ Fæø.=/„~4€³§èª”ÂrÑ!ho~xèðGüpIbì75? ·_\š]XZY\]æ©®çõ +½ñzúC6<ÕW–…#ºÌ݉—ù¤ÎŠD¶:9¶·Ùá!F†“Ð +„(%¶Šd·‚®ˆŒô¡!@tSb*¦´Hä¦~aʇb‚=,Þè è‘ "µu 9ØxÛÓ 3qüaûmP¯pߌ‘írS*Šäk x— ‡CqljRt Q¦µ«ØªIÓrUÕ&õJµ§Jו7‚÷$€«u{6hdä[lh®H—1æ5¢*È9Ât›üˆTN:uŽªÓÅæŽRS} 7yü$Dsê‚ó‹JÐJÉâþ¡Éc#ÿý/-çìOøß¾£ðü£€ÌþszîÜ+Éð§znbüÀ7m¾€óMD +Àq-'­üíöéØt H •þZö‚& M@ßÿħ>åÿZþ;þÿ‚wzIT{ ÛçÛ¬6\¬3 +Àˆ±Q q$åjeŸ_p/¢ôÜè´'´ˆñëÇêàe²{QúehËþOŽøX›0¢h¡ÀÀó!Ìv·hmªCBñˆ-^iés=åRxð#®ßã!Aþ$Ô³Õ•?4ý_ÿ/Ô(i6&måùÚ´Q¼ABÈ_óܼ)s>¼ÿkk~Œð¯¸þ5uøXÊ=ÿdÀ€Ÿå +€ç’ðEgÚ$ñ¼L Ã÷8ŽÝ²±Òéÿ¿z,Ë׿g––í0@Ox=é̓D»2Â×p›ƒCˆI‰è¼,kLz¿ÏsU 2ãu*¢)ØK\sF[†8ð‹î¿G §… A3ŸSL•Ïìø¨4*Éá%'.ñ(G.<ÃEîcT ¥¢„é`Iλ|ÉN­¬G úUqcuE±'N‘‰îQ0´¤ €Î•+«KLÏQ»¨êM$)hv\ºæ+¬xP‚Å…Q­¸`¾9àìªA/£ª%Ô>5§Mܼ¾DæX¥äböd4,]€[‡š¼»ê÷.Jè~W¸ºIÓ½P‚ÿ++Íþ¹ùüW!ù†¼›É€ýèÛè@€Px!ÄSÓN°©€ôMä¤þÝÄÿ†`b@[†8ÀÿÔÊ~/‰û ñ?êzÀ±ýO>ÚÐ~#& `çã²üÑø&ª=mKš®ö>2ýúõìèU¦ý/jÚ2{ÌѪ^îaÞ,›žÑ™¹+ÓÓÓod£¢F¡Ð¡«c/ïlû‡ i¥}Zée¬+b©T,Œ [X·£J¼JÇ„)!]8Œæ†šr­yûP©ò,øÂèÕ‰Pïé)euÑÊ(œæW†ú;îèR +IfH© • +4ëW3«è* Íÿ¼µ ³£³RèïëÚ+ ££Ð2XãFeÙ3-°n²VWÌÍ•/ÍÔ©l¬žÍ¨F¢BrµØ" +3pöù'y^õ(s½ +` bW¾T„–ï´ö°~&€èp„ ú¨VJôÿ·ÜÓþ×oýþ ~øR6Hÿè¨Ô4•9l^Û(%€w#L‹×K£ ÀüûGRnÒpûV›àŸc"€•HðHÀ6nþ €€·~ðýô6ऄ€‡…ž~ò%À1&eÐÚ3õ0 ŨÁŽŽÝu<ô”–G +»É­#x÷+oÈò­×çfeÿ_š¹ò—W®\W¼q}æ9ÕÆ\M•2WÿÏn hˆ8?†0Ò_è­×b¼ŸiÊ$1 ×I†6•ËÆ~3Áÿ–6<Gdüj…`½ýŸzòçö¿Œ¬üg6qü£$ÑQ€éiorú ý±“ˆ¿N¢  Ñ -ï½w;y˜ éùÿ¯ÿ*þk%ùHŸh€i’€Qá@8SËÀ—倗'OŽËä9yRú@¾ÒæäÉdÖ§øGþÛ€õ€p*ß{ï1LgççÝ?]öÿrnºñÜöÓ[Üàù©»´(\¬­,^• Ëy/ìÀÜS4¢ +¬&¹¥ X‹H&ª9ê˜ÓZL"®Îȶ\%ÑïÚsÏu§Æ)>A">±M˜)N„;*dW:/…µ’qg7âX‰´)Ž‚%ø*”¹Ž0z•îo’ „ºBÈluåÚÕ«‹+d¨zÓ +èº<¥¢{GGÑG¸GU6U·˜¹$ÀÞüÕåp¾¬ý$’¤\=é¼»^ºvM +)¸ÌJßEAãÀõNÙtKñcPVÕ/÷£»”†æ +ðUqµ-ï«nb¬…ùïûåYÑ`·¥MÊ@·À8†ÄÿÜüß”ÿÊOõx¿¿¼”<LôÔø¸Ž¥´hpö¥s˜ ø^ +À“¢ùÿ²ÉmÀäÄ7Á»€cÑäïNÉÐhÿâ=ÝÚeýt÷öìGHÿ£­Mvþ‡@«Dµ²mys[Rî>ÝÙáW‰P1Ø^›+öVgj£FT¶æ9Q«Gu¬Õ5}‰¶èÄèèóc¸Õ ×õbK6ô­×ÿ[fЇ##î`…CÒ´ÿ­f°3äïðwÿ/Dœv†üÆñ'ø1þ…gœß.Màû?z‹QîðÞ­÷þßÀ¿ÄD¢ø¢à‡´Ä«€¿{ëÇ?üá~ôƒÜ@&ôxYvƒŸ~òÙ@¯'Is…ýváYÒx¸„0/pƒÿÛè€@0ZX˜_X\\¦]y¥¡ÈÔ£ßÐä«kË‹‹o®ˆªº`~qe ÓÎÀ„PÚp—#:Á‘Üî/¼º1ÝPæ +8©ÈI˜q–f>ýÓr°¢8H¥“úNh{GÚ C…àø/ òE\­[â"­ql»­>ŠŽ1­üè]§­Ä‚r¢µv¹Ô QXȯ * û ‹èL«k+V8œŠ/‹ ,Ä[/mI–ÿÒâ’“ºßLÌÿ  ~ÀåËÒì®!1¬•Š*“}M¿ï.2•º’4,”+ï¡ÄÍzH?5â{¢Þ‰ íøE@Ô?¸½Ú0!¢ªçN*'òW0Ω0KÁÿ«‰þ—ôDMÇ'DÙøóîúÒl7,<Ì´ÿ'&Åÿ†Àë ì½,€‰3[ßù×ú±½¿QÄÿ'P±'^ÄDGÐöPÂ> °ÝC¶, ü¹ØÀ¿rȉÉpâØ{zè`€¾‰jdÛ’LüûHïT/ö¥g#pTf0 ‘é*”¸¹™qµÚœ¾rå?]y£²GF{Wçî];èJ×!ìÂ]YÛíb»öú…ûÜݨK è E‡»;;ö(:GÎïÞ« <›À#Oï) â]]b|Ýö»è³¯] ‚]](ƒC=ÒIBI¶бî°®tÕÓììÝËW2p—âÒà‘§ûTFñ߀>uïÙLåó_/×]#U#˜ðLZ akØÙ!G˜ €š{- ¾€EÑêODn” ò†~´$  á D•‘êȈ=•P5}`ioÿÇöO)¶éö-Š®5³êãd‚ÿ¢¿,ÿ”é}ìˆ>·ß£ÀmÆ›ÌÿÐ’ð‘t¸ð³Ÿ[È=ž0yNÛÀƒC‰Ð5É +@ÿž˜äµ-ŸŸ² á¿ÿ„[ˆïö:ê;?maá}¢÷5a^9¬d¥Ç¹Ì൵å…k³Khk+Ë‹+‹+ Ί¾âÀ+X´£Ç~b¶@l‚?&B ÁGæðÅV†ZZ)Å‘DyØe ±IOZ\`³W —j@l“JèÄ×Z—*¥Rå˜Â:!]/œ×«Ê$hàФO„r _¢ëßÒüå« Ëâbî/O!•2Ó;@{º1û¤5ÑÆ‚û|K UÀ p‰©š“@¹Lj}©*•»õ̵ͦv1Ò/âžwÕJ'UááˆúКªóµñO!Òóû+~Ý‹Ñnþ¯®Hÿ[ò_…â£]þ¨“ìï!V<à©ý‡¬ä‘Ï¿¶g'ó©ŸÚ/àÿî†-~$6é õxYk}Ln°„àÐø~<RBè-m²©@_ÿ?·xNŒz¢U+aÿ?jGÀÀ'–ê‘í,årqj,¤üA²`µò38i)Ôþð/¦ÿð/®ŒVºa‰ þ0ƒð÷Ê*ïêïÚS4s }øâ=ïžýðÄÚñðއ%Ò¬0ìø-­SçADVù®Ý’ÁŽÎWhÈ Ø}™öZ‰Ûf½TˆÝœíëúí;y“5ƒnU@Š+D;íüèoíˆÏ}ûàŽ†*Ë âZ”A‹•ºâîý<Å1þh‡¦¯,Íž¿<¿Œ5)È\ ÛÓ8Y#ú»¼†O|`‡‚¤XÓETãFû3%D9ˆá¬ÍLl[ 8; •0Ë¿™?AK‡ Ú¨¦WŸ² +ä°ò~äÆÅ«”Ü]ƒÎ}fÒátJRbjé´VVbäT¬»È\~JíÆâìÔÑÙ…p¦Sܸ‰KŒÎÌ\\\Ša€ËÑ`ƒÜ¹KTK«pùò¥« ÌÔ¤K#MÐuaàFpéZ£Ù‚ÃzR² ó¡ QFÕ·¤-e'H¨ÜòêT ]ÍFt>t%âÂ~¾+8Ž®ÍÎæøoò¿!$F©|дú‘|¿uAò&wüƱ“Æ>öïOõM^x‚×þíoµüÓg¿qßmÀ?-úŸãUããÇy'€9üŦ@Ö~ŽÿhÀ@h˲™ EZ<­Ãw´ðÿ ¾î ÏÎDµ²mééÞÆòù™êÀŒíÝÑZ½žfƒ•A(CÖ(,ü‹¿˜þWj•žÊà ³ðîÞ© "l©ÐÝWè/|5ú›‹6L8S,Ét§ÇýÃö¹[Äê|bÝà! ®ogçŽÎ{A3~i|ø°ò…ø‡Àü®‡Qvïå}^”ÄC·HDÊó»~¨œûÁ ýýCRJÜj€ß¡Ðã‰B*üßöÞ¨×W¦¡ûèhÝ ã®ûâS}$™®ƒÿÜ ]€•Êðð0³*+àyØ/5`”æP ¶I*ÂÆ~<GÐ x0¬4ü-öLŠÔ*”µþ•ÊÑJµªOU•¤"—KÅZ6“„üvYß šn1ø÷êC:þ%úçfD>ÀpóöMšRÀˆðÇßúòÝpöôÙ³gEw€Hø¦mþt˜vè[„JÚmS÷Óg[t€åEš–eÜë/»€Ð¡GÿªPfejY¼|ù°è†qþ°Ë}rO´èÉ€B¡(ü¥,.߇ÿ}â0^’Ã~I£D¬ûÇèˆ4f´'àåÓç^¹ðÊé ¿ø?ùˇ> ³? øG˜˜4$À-9õ[dý0€†"ÏF +ÀxðÿwEo·´{˜€|Õȶefnfö¾ß+3sø fÀÓ³~tºFw6¡„xð"otì…ÚüÇ+ÓÓÿi4;øª†Jë{áÿàà`aOÀËŒiÌá/ ¿°l@P¼cG‡â~O²ËÝ +;JC}»eáïîܵ»·?= wívÖ–pìÞÛ¥”¤^¢t)ÞÐ1ñ¡‡; C¼ÂÇà³0³°½âîMÐE?…B©§,ã7Ê=̨ÈJ66V«]©÷¾ù7åz]¬WŒfuîÔ&6•Ñê¸8}qºÞÛ»¯wß¾}{{{v÷ôtww÷6LëøñŒzXÀ†þ.ƒJ…i¶Pý#y'Ð/ëŸ÷Éíþ´ikÿwM!¡ðIîŸb*'²¯7f6h%}Z‹ôàöõLœÿƉ÷›ßú\ü<¹×(¸ŸkÛš@0Z^Y¼¶°°ä1€4Uë  ¼Ùzø¯áð½6¯˜@m ÃúTÇ¥Löã/F'@@€¶ytì&€À~cY? ?ÈŸ{Úšü“<ñøNÆꓨö@¶-1Žë¾ß¬|] ² êøÿž/AD!µÚôšžž®Ô{¯Fû¹0í÷ê –öTúÜ”`†X :RÁ·_ŸNz{K{¨ @jð(€¼ À¯pÐðw¡¼õóx&@7$€M‰Ýý'ÿgÙ!é1¨÷Øù–„Šw$ñliH› @²•`P®,-2@»ôL}…?Ð|ÈÃ|umiiEøZ˜½zmq‰:Ã=L_E±i©Ç= Ðb BAAÙ¡wáŒÇ£û½‚¿ŒXGàÜþ¦qG%N×çéi =øG’ºŽF|Ý„J©S:™º Rk.\IÙôŧ s Ì–²D„Œ\!»€:KÎj'0Î Ç$KÎë~ÈÆ‘ÅÙ«³ó Ë"»{LºTN@Š Âº>U7V—W—ñããdÑÊÀ_'ª›M4€ó—êç/]ž]XXÔOpƒI„T¬¨ Vªב3¦|ä¯@ëbœ HÜ7ñÑ›|gDÖýt+üÞ%&×À~O¬DpùèZU]Xô—» ç/ÿ¯¶ðßq‘ȧÉÿ@ö¥Å@3Àø©\àVð07Ð…WÎNÐ ÐÀE _?õä “ßì×ÿ˜=̨UXøâÿ‹@žR˜{B-°ÝûMY× 7ý“x KxÚ€¤<ÎL?a5ààK¢Ë}äJµ<'´(„WþBS#G;£µé¿¸R›­dªúR©°Wvzg¡~ûY·h# `f§wúú ⸚á EË +; _Õ.ýó:y{`ilÏÌèÐL±˜üá¼ÜO©0‰M?¯ W 4 Kièùš”‘BO…7õõ)všÕw¨´g¤P’uo|ª¬ž¡ ÖPÀB¿]¨÷^Ø—4€aŠ Ck3Å7ëµ+ÙœÌ}׈*À5Òðþç[É4ÀÅééú•+WÞrTÏêõëoÔ3Q6Á?ñT|~KZ@†€æ†q1r õ`&D-\€¬:’¡$湕ÿér$ß?ÈFøcý×ëõW=Ëãy©•#Y½9â ÿ‘‘Òð7“¤ØÖ~" €&€Æ^ùƒàŸ›.€ð„@QnßþÅÍ›¿ÒE´üøï~üÖßúá_Ñ ·¦™_ÖÓ®Áÿ‰x$Êa€õ’Hß"܃(¬][µ6ô)IB¢v—=]ìFñHŽó>tí7V¯Ne—æñË/Hˆë""ÌUšíu…„Vó%¼@|3@ð_bþS ÖêSç§.ûu Jƒ_!ÊoŠ“üŽÙ‹ûˆ±Q« +ãµO/À»ªuj–RBg®C ³ÚÅO„èx +çEÁ¤ Û /Ý:SK•ÿæ¯^ššÚœÿN£ÿ¸š–~ìµ/–3ç^š”ð”>Ozf¾@ç¿ðÐà&φà©{Hjóülr@ÞðßâH +'¤4;äM÷ëy¹@þFý‹¶)!Ì ¼ó‰ð<þÀð‰%±å>r%+_¬é™/‚ˆ-ôþÓ¡÷[DÁµ?œ®ÕêÕÞz¥ülEÖ7}Íÿ¡ +õãÈ»Ÿ ù•?0deß-ñƒ’™¢pó9…­Àd42®¯tϲӥòœ§ ¶¤×ôF)”Â3R L2aú/jÏŽ=[¡ é¼=ôY¥§>DA"”MÌ$ì9ï]4÷MütÇ®Îg{ŽL•»‡9)î’m&þ÷^×-ÎÉ…ÁÔbƒ]Æ{{… Vþ@*ÀÓÅÓºn¢!_ëýZ/Ÿboúóž=<îÐî pëúÿ[<•Q^H˜ÀŸ·ÿ7øŸ®ôÝ»úYoèþ¹ËÑ‘±±ÚtKÑú•®4£Ê`É0^'_n÷üèí·ßÆð¾=ü©I°à_y'°»¸üÇLÀ²ÿñü@ +mée@gOŸ}ùlz\ЃØÏ¾ %Þi—à|«ð@I»ë]m€Ô²¼…ˆFËÌæ¾¸¼´ºl«4‘GyŒ@Aû+úbæêÄâÕlêê"¦¡ðËÀ›žõЬ ÀŒžüúv´‹â•uæ1+Ð #²6äÈWÀaœf"U +¨º’nëÖ5d´*6°Ä9GÅWét`Ì·=P”B| ÄÓá/·ÃÂ¥RÞœgÎR¯ ¸»N‹€Â阌ëjQV¸™Oë¾Ëáæ}œ +1^_xè0œeåî"Ë%2½RïžÅkÓåêE$^ˆhkµ9Wˆ²!¨U¨8‘Üi=á²\Œþ/·¶³;Øì§O¾.ÄšHhy?€ <ο ðC ØÀÎú Àø›þƪXD 9·†˜þª¹J2úÛäK_ùÖŸ„` àíu)~ü¾@ßð¤&€Ô +ðøÿË›ôxÏ +€è¯å¯høÞw¿“+“/Ÿž|YäOƒ‡õ@¤÷ŸIéAØ* ô-³¤!ñpi•† +`Ðl-z´¯¬,-˜À¿žÔ&‚Ø/€Y>kãå—¯]¾tm~‰ÆÁŸqí`Øh¤õ˜k¼ D£==(@Z¡"@ásìk‹SƒYäJIG‹äDñ pÒ\ˇ¼³ŠÚú*Ÿ6¸¹˜$ ›ýÙœŽ©í( v•ëbÆÊ‰ˆ¶î¹ÊÊB•ªB¤d«ª¦óéÉmöÒÕy*@UÇ =3V{¥i‚j‡Dߥ¢¥i-ÎÏ_›WõÑš¿AtuC +‰*eþò¥êÑ˳â¬ÏÓ¤ Ï]ûèçwç.¸V!9 ®¢2ðà'à)wÍD‡®g¥ ]€øš¶«”:ùQýû¨FÐ?T»+‹«KK‹ ×.Ÿ¯_¾:/þ»[DÊMK?öÚI(1 <XþØý ÿ1`’°s“ãû¿UP‚ÿþh¢Ó¡ŒþÉdõ¯÷èÃì¼ ¨¡Ø€¦õÏ"â{¬Nþÿb¯‘ÜpŒ>¿Ñð$ìçòÄN<L ¨ö@¶- ,÷‘¹¬Þ%£cÎ;&ûç6 —œ/t18ÖîV°òr ô .í¯µ9Öe«’ UDVüìÒD]åW¯-¬àlX•çI‹jâz’‚Fu”óÿêùó³ ÒŸRý·Š¯I +@®ˆ¼+ —§²óõÙy]æ6ÛŸ 2¸®JæÈ +Ь¹KnÖÎ*Åâ– )a:ÇÔGìrŸ:ÃÊ¥&>õÍnlã®\mÊ@ñè8*]daaöÒԥ˪€à¿+ÛÂ/AJé°!Áø­<§'O‹ø“¢pî€ÿi ¾¯ywRËkV~o¿b*n˱ÿ©â£•Àÿfú?yO¿±<õÀqð̰ç¤U4€Ðl÷7æÓòŸý¯œ´y‰èÿÍcáhÈßw¨ö@¶- +"æ=¾–7²Ê›žG¬ÝÄ$BAÔÁïmDxbõLÁFìîd†¾þRvy`_©0 Eº.¡Kç"ÀáÃY¥|dêk݇ëõñvz¦r·è×jofÕëöD£4 +¢ ÂÕØÎ*HýÞÉj•¢ßš+…Á &‚€¿¦ J†Rd K¢  ÀDE»;:»J=ôÙ˪½ûÊõó3ØýõRiz¬–½P›Îþw*@PdÎxÇŸ}| e/:‡@è L¥( ®r]äb죴èÑ@'ó¨¾'Àú~dDí‡ ®©¤€‰ÿmðO[èŸ ßØbú#S€ÞW²&y­P*Œÿý•”VÉèo{BÀÛo3@> *À¯ßÿ˜aVà?ðÿñ‡0ðÖÍ›ºBëŸyàßýø­ÿÏ[¥Ô¢Àg€ଞ§x<éÁñò©ö¿M`›ÓbKÆeÒÚ¢Pe1ŒõìO;˜À^Y^¼6{mvqiíÆ2\Ò w²Óy“ÈùAzƒ—óš w19KÞþÄef¥©ácG pP{¾ˆ<ôÅ +¥xÑÃ^;b”VÕ©àç" E’ Îoe tœIè"Ž Û0ö( §ØXïr \èym‰ +Y¸|yVƯ*!‘¡:­Òh9F¶ÞQ)y_ З®NU†/Í.2ÀêúÅÅ\ËUvêÚâµóG/]ÆÓZ*‡î”s­· R9Ó»4»ÐêAþVf¤ÂMwöU«(k¸ +àËM Š®;V¢J‰i>ì(>Y逿þf–¥]½4u~Ö}t·ëøOE¬—ô¾µ¼ôGî˜{b Éo À¯ø£Ií0Àý¿ŽC ˆÅÇÉÞ磕ÀŸ<2úOó<À²òuåcÔ¸ñxîH*BôHMMûŸ>¦~¾4Ñ‚À#ÇÛ<ë€'DÿÇÙIT{ Û–D•Zg›}-W^­þÑ,ÜÈ(þÀü÷YÅœ®ŒŽU÷ .#(nèg*ÝJ±†öjÓ¼zŠ~pÅ0!Yñðú›×«½½ålF0ʺëÓàßT«MŽQáNW£ Ñ ñô±¾Â ;}HTQ9˜ÎŠ dÔ• +óû”+Ñ€à Oaa/£ð”ãj¹·XqAÊ=*ŒTŸšR¿îr(ÏfA<“60È(ÔnM—ë«@ü*0IŠ¥dªË8¥ÄWx3ÏÚÚÒÂeqÇ¿ ø.!âzW‚>è"ZPŸ¨6~Eµ|µZÈ®./ÃÐuBy(ESоҼ±2›UÏóÆæ%æjÐ’`ë¾ +Òõ¾£Ï¸¥Ÿ¹G—Ìqˆ{WÅògrB +†ÓÆM$:r¥ú"âQ%þ[PmêV–fgÏŸ¿4»¤ó.Œ‹$¡¶´¤£V Âo-§ÓL@byŒ0ý£濇Nž“špáÂä1ã~Éí}}´ûÙøs\ +À‹Ì¸%y1úþá8>þ⋇Ñ 0BYI°°®@ÎýÜþßè¡€”uÿK& ] x|ç>úÀð‰öh‘°Úø“Wêå×W€Sœ1ˆ0Q%BìõéÚô›°¶Ç éïb´~g¡«Ð×Wì^ÃÆ†¼ÇÒ¥R(œ’+Gê‡2|ó—þó¥ÏÓ7®·øù™9ðe3Gip1@[B"g$.ˆA)`zn4ûór±åe¹c¶ØëY±^SÌ¡ç(Š{%²|ÅhvÒz1Ô]*³Ô/MQÞî73Cî/d3ÃSWHÎÍ1r³ ¼9¸ïú² )%€®aˆ70ÒTìp§@»’/ Ø‹À,Áù­‘ÄÆ~¾M­ëB’œÿ‰þ±¡Í½åoú#hx¾´]H“T•Ù3 ÛØÅØRø^£ à'o¿ó÷îøOxþÉ#-Þ‡ï?‰'üµ€Þ¿-ôÿÜüÿÙOöÎOéøÖÏ LðœÖ“ÂN†¡œ=wvÀ'÷HB H®å-$TYsºíXñU_ΙI øÓI!ùoÓ¼AĆhh ðDñ@{0( ‹74×keŽÄu$È«/Ü2ÓM+búj+Ô )H¥å +LpR€J€ÉàZÚøÀ€0&%3:”§È•ƒt]l%ƒ½KñòÌ=Ä{:û––¥uø Šóºy‘|Yjˆ(½ºL4¥÷NÒ‰´QåÞÐ)%NÏÿåÅÅÙ¬PØÞ÷Ý2EãFtÏé7ÒiBôSNåùH‰ë‘-+ªÑ-ñ£‡¸¸xíj}êí!:í*q=Q~ðMÄŒ¿0õ? +€ìÿ4€G¸JÛ—OŸ>}Ž×M˜Ð‰Ôù—Mnï룕ØÏÆŸã''^œx1ð>ž<ãÇŽ)äÅñãh4(8I«áhп!ü׿ìÏ÷Z<-ïh°üj3 Qíl[(‚a¹Ù›ž‘€«Ý×êëÓõ¬663&Ö* …ËÌ­‹‡å=¢©«³ã¡¼T·ƒYü:éìO3ýtvv¹›]’®BRd" aÙÔÀ¥…©ò¾r•÷ïb¹_,þù´Š!ýbº^™æÕº¹\¤ +¨ëz…rB iWût¥8'ð;4«)ªnáz¹·2Zèô¤A* åH³±£Š«"?¬¢w”©T +{öŠ1Án­^ï½B-(±™JöºA‚ö£cüðMPÄy EÀrF\OÑPÀgd”¦€‘ÊhÓ€ÿí hÕZZØ´õ°]Ä ÄFÀ¹²øMÿMàß ÿFËß%¶H-ÐÚ© ¬Sö ñìß|à“@ +ÀßâÀ@'€[ÿt+øï‘€ïðá‡7=âôp'À÷’à§âÿO=à‡ôp@Ìè>zRè™ÁÃéÔ$ïÿÿ7j‰jdÛòú•ûŠ¢¼)î +ÎSuY½•#õ™Ü®®V¼¬>wåÏëµúÿ~fòÊ‘ÊXi§¸jãŸwð<ÄýìÐþ.fûE)ˆY-Óò3+O=+ÛŠUâ3S—zËç§Ü?}êz]™uޝ¿9#óÿurÌź¼ cY¥š½JAh§ŸysŽ‚ͲKÕ2:Ä«õë×_óoææ¤ÃLgåžBa·ß-ðð០¿Åüi-ITÔ=ìééé)VKÕlŽ[-:ǹ7¦ß¨Öçꪋs¯fÕìb´ HŽT8/ý(…€RÚ8¨£Ñ`€ÊÀ‡^ö2Ú[=/dY+÷[v{{›Ži­ýR€=XëÏ‘«ùŸx=û7…¿é¿¹åÒnƒ°ýÙÕq´•ü=x²P($è·Ê¿4<i.À[ž + ¥Ýè +ýÿ%hQøíäøYhi€€ïàhа´¯gßiúnX¿Nô+§½ üOîFK‚Ë‚ +€#i/?Ö]à<$” j²ùõè—À›ï„.â¹YyDÇ86o‚IF0ÆìtcqÂY›ª +±È"­¹Ò^x³ßˆ’á¢`®²´†„ÔwWWôq47má3`tYÖVïÓZ¹A[ôr4e­X 1P¥¹À(=. +ÅÖʯ@ë-œ‹2‘ ®¤Œª-Ï›°,€ÑùªEÏ”äÀ$¹0+>X[¾AÛÉÕóG EQsmÕ.[…L\ +}|1 +ßXœ¯W™ øÚ¢ô4î•z`MyTJTdKU‘ÎÚÝ;¼@)ñXöUùJðλܺé®|#tï”Á~‰wýUáÞ]S]SÒô§²4Ïœ—2n%*Jeö 8¿{H~+‘mï‰Æ…FLXÀðÚ+çþÔž;G´³R^»§þs6““Ç'ò>B¼m}í4=6÷¦o`ã?ÈŸ$'S ÄK‘„ÿxþUÓ?%€ÍÚ(ŸXoKʇ?_d¬º¾ûöí‹Þ}=¼)¨{_ïáÞÞmz*°{_wwÏžO="Þo[ÙÓÝÓÛ³oŸ>J¥¸¯·»»ØÛ£ ¥/ú—‹Eet°Ü],÷zýeÎ9GòäúÅìQî„ÔÎA]Úû¹}=ŸW¤Ã¢eïÁâÀÁÞ}½ŸßÙ“^5´Ñ}üÖž={”j¯ªaX÷ªdËûÊåÞÏÓ%À…é¡FjDÒ{økÅ´˜ÊHnOÓië?<>E³z‹' HžìãÿË‘OéÒ5FGÇb^ h¨Ú€,wÿÿáwU¶ï×Ãú+Ú=àŸddhÄØ,y%I†¿$šN6UR@êà&¿ àÖ?ýñàøèƒþ$‰ÿôü…5áÿ§ïüþÿ8ï À.?íô¤ˆ'†Œ”SÌpöô$þ€u’Hß" öÓûÿS;Ó/Þ"zÜ(†v‚,[Ɇ)ïu]ZòÜþærah;oUv£à‰h¯5Óbþ+æè6.@8Q©‹[ЃÊ NŽ .&ÊhÄfþÆBtmMoë'*˜ +¨=âÆ";vQO`Õ¨%N­Šöu…•Ækóó—°¬Ëñþ ©QO\p/ñ_ýýÄã1 ß€sx^ɯÎ|Y»[xlôóoåM¾˜8Î+€u>àÎZßG°><…°4<ÑòßÔZ%áÿĉñë<›«‰jdÛrt[R®TeQg33•J™OUÈ)”+åòp%;Z– OÕÏgÙå}3Yé«=øÓ£€×ñIâ~¸ÖeWÇK{üî^ÍóPǧ{J•z¹\qoý‘¬Èü™Ï–KYe&KîæJõ1iâÝ3BÞH±P( ÅRy pP6=G•’ü–?¥Õ —¡T.–^fVûJê:W艂àø-^Hy~k¾ + +ÇÛãÕ¸‰ P(=[©LÕç¦ÄPÝxvéjOµ:ìyò³™zEu£ïù£•aj„·ü]27‘äÄ”A•ºÛFÜ‘ @¼ål‹'@æûsÏ©²S€PÚRtM-ù¾Ju䕈nŽ ìäþFŒÿvø‹þ[ß-àý61úCô[å‹_ùÊŸ|û;ßit´À.€[Í¡€ïÓØÿQ€ÿÃ?ÂûÿÁ^½›™i ¿ àG&Z>ûò¤aß#&&þçoÑpòôËëŸ$˜_'y/@©üÞKZ¶è¹0Ë„>"*vø’؈û+Ë¢¤ Ë@ŠÁ¬vKžÐðyêuø˜bíò +_[óŒt¤fP€·¾1:äjÚõ9ŽHœÐ¾ +ȳ‡ ‚H¡Ï‚èlVè–·&èÂ_4  ôLmÛ¾NÔ¤2£”Ð"?—óÆšýEâ`²ç2ŠЕ^4H!’1¾H¦¤C? +[¦K€Îq{ŠW­))©'î ê/\® +GgiGIõßg“2̉ld¯-Íž?zùêÕåé71)Ô²A\VRTUÜgu’wÁtœ¹?âße çGe±¯ÅJ Ü»€“¾P§¢î‰ßú^Y˜—05E'ÀH”ìµ£¥Ù\<À½ Íû“ã¿—{ŒýðD?€Üð +Ãî!9ñqüþ´e&`šý/º[ °ä>íO}ì{ò%DiE£©û+ÙÜð)ý«†Àxþ‡H6µåp¡]€1^Áƒt`‹Ý zØÍŽtgY©ØWàEû]¦üî½¼ž·ùuîÞ]èìêÚ[ØåæöèÔ™½}îU^ÂÁ†€·Ú÷u>Ý)üwvöDo>© +Õ…•âÓ=…â`jõ󪀡o%’0οOçˆ +ÒÑÙ±k÷®Ž]LY¸k½vïÖ«Ý»vtéFJ}ý¼wt„W‰ºª‡‹c=®&>¢ûõ£FªaŒ"ñîDI 5âYì@Hî 0”ŸÓŽt€Vî¹èÃ4:¦¢øvÜ uТŒ‚å#Q„JÐ>ÿæð¯Ö‰1“¸X­ðÏP¤uñúf =([é/IÐo÷ˆN€QîÀTh àƒ÷?úè£þ|Dó?;(øóŸýýO=àÿämÀ?ü¡4€£$ÀàûñaÀ˼ pƒõm‚‰¯Í½< Á¼¿ŸÑÅkÐ\QàOóôؾÁK€ ¾Nâæ†"Àµk ˰ˆOâ¤$V¨õ%Ç9ÃCœ–ŠáQxð½!²RD4vLh* pÊø i4\¸Ûw Ò¹ìŠ‹ÉP¥tóò©T¶WÉ„*xl)  ¤„èé:‚\Ú]»#¦£ܹ±ºpõê<~ ‰6¼è‡f|'ê:r”ÅA´H(ŠšËŠ¼Nœ«³bÅ 8 )1‹³"í̬Ô4©1!“…JRq¹D±õ#y>“¯¹O#GJŽhwòGMp(%«1(@1ÇiE˜$ù=PiX£Ö,­,,^»tiêüüJäd? ?'Qï%&ü=%igμæq€ûŸ´ lþW°ø“ yPf׋YÏ›|;1ñ¢þ˜¤Ïpøcƒ½¯Å}`|h>µÎô€‰“§Nҗλ[{žhkØÿ€O.-”ßb1Žàx®ØŒÎ'ÐK³èVd¾—½Û­_-ú D×nÙÔ»ÜÅ®ƒ—þj+¥ ÔoíÓkƒ.ºßKº +¥þÁÊÓ°\Qtb/3ò#„®(áDÈ%ÚñÅp墬>­ƒÎΊ«#¥íWZPJÜ qo—ÎòÖ¿Î]ðž i„³K?@I×Î.ÝÓ-U÷ãë¾Î>´••m;\‡ÃîÎH#`©ìëéÿcÀ:àïªÔ¶Îí@Z=Ì ­è\yÝôoL¿”×YJR'%<šÚÿ¥ƒä¬oà?¡£à½áÏ&¼þì0A¢J³$Ûõ¯IšËž=Áü6ié*€=Œx/Í þC|ã_ìÿµØÿ¡Oݶàçï`ÿÛ`@®ˆÿÍ&}Ãz`ü?3ÄQ»€ùu¢JÚûTwCx§Ï¡ñ“g€¾=¼ ¸ÕpîÂ…üm÷ƒ¿ý+ à¸$§4x€Œÿð`ïƉÄÿD}-¹è— ¼N¶Ì `\v$ü¯ëÀTÀ›k‰jdÛb+ñ¾KvĽÉàŸ}Ü€ûì”™ŸN +€ö¼¨O¶s—ðž^È ŒûŸîdžGÚ#㽿ªW›®®Á!¡9Æâ%ð íà]G; +F}’îÉ×ñðŽŽ©Ka‹^°k*‡ìx²/(C¤Ðç÷üHÁèìé,õI# qAÐbg·òëê(0šQ"¦ûGÄÙ}2ýMpרGˆüORî‘p°‡^vµ¬>77wý͹™Ld¶P=âHp»Í 4ã y® £­†ê^€iQùº@¸€~0?á?BŽøt«¸À>m£ÍŸcVµó*U¦GUƒÕkµÄ}ËK‚~«´)¸~ò¶{2Àûh þËìÇæ×æc)ïKð)÷ÿßù{}S Àðý}ÿ{ß €„ÞÉ<üè`G“—Om:Ц}vn¥ÄP¿­D Y’9GCö²,Tñ]x^šn_°Wæ¾(/óì_ΠåùÙÙ b‘Úéù/Øl “>Yœf¸P£C’ +°ˆ@=_E*ÓÃû:cý‹ónEü\ê¯-.xМZ._½6??m‘Fœî\)%…|HÎXòÖ°óÊeaùä/îIÀuɸ‚PÔJŠ+E*ÍÂÕKóøûñЬ©ÖVÞ]]^¤‰^PyPEò6 ÝÍ&€Í%Qíl[*åí,3°2SˆœqÃ%ò­ÆŸlÞ©h˜Öþ`a/fÿ^àÞ'Ðb‰÷:GG‡y?‡]{\íäFz?o x¬Pé“uÞµÍ!½ëÙ»÷‘ÄiÙí»vÁ÷Ý,}´…=¸>­2æ)ET¥ÚÇ›‚õßÐÿû+…BmhKVq”½J¢MzˆµüôÑé®o@5Ý©$«öÔG0âA®äÙ†J4DmIè!Á°¯gßÁLÐÏÀ~5K§¸Ž$ޱÐâ °+Ÿ´ñ(בiG&ô7¥EePeUõÍ.’?”€þmú· ¹ì›Û ¿–¡R_é«Å¢>Ê÷¿¤ øïùÜÎ{(ßÎ'J€pÐÐàçs%€*$â° @üÿéÿiþ¿¥dò‰€< +þëÉqê[ÿ‹Ÿh§¢U`ƒ0Ú¯uy”Šû¸ ÀÏ–ÍŶږŒ´«ôOmýCsTäò##à†Îšö,K‹’ÍfH¼…ˆ@@û½˜ ø±»á(ˆ01o¥À3Ci ÃÑH€H \‚æAwÅ…ù…«—/_c>ç§œg™'ÿ*¯Ë—–"¡4À7@Mwx/@dâò‰‹*¨\b/©¾';´L`ôPÚRˆÄ>^‰lgˆÕŽÕË+óóL×)ªÃ»ÖÖ½·²´píRµX˜šYÀ{±N¨‡¨ gèúq©Ö–g«G3<KÊ@wNú¾9}¸'z*ªÆ|ý¾G[÷úй8f~à»öÞ@tC±!ÖÝð (/ï‘$¥Wúƒçqrµ Jô×"à*/)š]ZÕiλ4J} I¶þf‹Å›ÓL`ÀþCtDÀ ö_ 3`x<À–€@~(Z74€ãÇÈúqý·ôÞá¿%ìÿ† )úßõÐ?møF‘osÐ <|„ú€ÿ1<º ÓÍ\.²œÿ²µ†ôv‚»GZ5+Öc’X…– +]³¸Êû®ˆQ*õˆ:C¼_ýb÷¿[÷ÅèÁ¡ƒ…`Ý'ƒ%[é:94´SÞXÏÅ»]øíR(ì¤eAh')<×¥AíiÕ'Žõ—F ýµÑÑA&%’¸ù†ë÷ºÝ'xòÆÜn=Ë®\ì1ls1óã,«h ±xhƒV½Zöíû¼`‹$ž°ì=f®dÏU²‘çFFŸ;úØ÷€`‚ƆD…›ÿØÿ9íý )·Š³MÐonÃñ¯Ÿ×ð/~UëÒWwîܹggÇÎ<²³#a?—ŸÓ*˜ß&¹àû¹ À +ÀÍ›?¥ €É·õ¿ÿþG¬À?!I¸õÞ{àÿïßù™çJöÿü. )1ϱø¡_ñKusjüJ  ‘ÜR¬TP$ÌW«”º0¤eþ ëbïì{ÙܵçS<ëÁ÷>fàw½¡J¡TÃÞ´ eh´P¨@ð¡ì±‚;ð5üöÑq€v}JÍ0»½*:’Š¡HQ¶#%-–®<¯b •ú[Ëì•Æ¢$vïÝ©ÈîIý?’ñšƒ×éx¥¾7îI’ JP×G(¹(#æ.KBi¯¾ÞXèªçžãuƒ-ž€pŒzaGù*xî¹££M7€ã5%¹°ÿ›øoõóââ%è›÷#ªïó-ˆþ2ü¿:@é1UGGÇžŽŽŽÚìéüܘ/‘éÏž6¸ã×IÃ`àosÀOí¸õÞÿýÐoÈ·axBèø³›?¿ùópÿÿøÇeûÿ~à·¾£ð¦§’ÄügoÞ ž=¤í}lÿoÅÿíL„7}yi‰i欙= æõtâä‚(&âè‚4ÜXyë2oa–n/(ð@t…‚D}b`¦ê<“-žìä@±èg³•´™»¼,…1tÒÎO=:ÏÛxY),/]®”‡­ž¿*þ../˰FeÐIëÊ‚ôˆNªàœcïjMÃ{œ\Å+` ˆ^ŽvoPpŵ>¢…amiYùT0 ~J¨«Kó×–WH_NÖÀ…˜Q««ªâ…ËGŠS8ó74¸ê›™]ž;kK—ÏW˜ pÁc0T$ö]†›žÒ©Rïz¢_~1f‡[&”N€Ö£#ª…Wu"´+Ô¾Ï1z@+ãñ­Q6Ý󵫗.½tuÉŠ›rN o%‰ó—69sÁsÓà›“îúÏÊÞÿ RZ<çÎ¥‘ÍDÿ^mü?î!ÇO0àø!èà‘ã¼ Ù@¸O'Ü ÞÛÐ*b~îà*@R Äÿ–>ÉБßïx|çÎ'Õȶ¥<\þú}¾Ãá±FØ–Í»0€°Ý¥1èp@Ñ`é§`¾¯ÂK…ëµÑ,K#ÓÌÞù’Á!é¥:¸N!¥¡ÚÈÐà È*=»U¤Zô­'øÓ=OJ{d÷—ú” ‰!*ÔÈèÐ7ú‚Xš®éH‘T†-„¤¤P(öîýc(cåÆêWjÓâmúJ­Ç‘$î`-É[Bè/—êÈ-#•£Ñ90iÒÜÐâ 8b~ðßž<x*ZTŽ>÷\êÀ©VQê9ÿ“ÁðG ÉqyüÙÒæ¯ŸÝHG_ýj¢,¥>4$U C5¨÷ÿõÿm˜þŸÛÊ`àÏì»™@ü·¦ +ÒóaÉýèÿ÷-¿ +èiáxë‡oýÕ÷¤…>€(Öâ1a±YÂÎËzlîXÇÿG1&Bvn9 + 0ÛR0Ey/Í2mè‹BšðzäC¨ ãò2/ Öóß8†kk²ç–Á(ƬX¨§¿‚ ‚Â<@» H@prhü‚×FŒ¢ éQ<^À³@çiyž½öÿeïŸãºÎ;_T)§lëú éM°jNTÙ¢ ˆU⥅À´›‡ínšB Ú šØ{\yKŠ1tÕÕ Ê”Ìé*¿‘dœÉ¹/œr² 3´…Þcœè +© °&¶Çù:5•¸j*dÍÔü ÷ûù>k7 Àgò’OwïÞ?Ö^kíM¢?ßçY?v„Á#&×›[˜[:ÒEÐó`2¡ºêÍÛµèZeˆ‰¨† ¤šž®"ÓûKD0‚é°‰,ú ÆkTB«~¨‚uÄ“¹¸”9×¢ä˜nÒ¦îòÚÊl³Rm/ ØÕÿÚaªš/Rß«sí6Þ_^£Æ¥R‚§öå>FÇ>7P¼¾•ÀëªÏ榟flÚ“/é,w\Sè¯CÈ 79è2i¸Iÿ^ìàbp¤A7¦"]ËÊâœÔØ,Md£%%îiwá²m:à&3ùa'ëêèÿ®?ÄǾñõ·oD'À·¥B\' 3ý½d¬/P޼fôú§}âÞÀÿÛòÿû"îÊÜço÷Ƭõ €Þ(€Ñl×ßàç>ó,O~ø•­™5_ÙçÓlnÈL§ñ>o·þJDšÕJ"÷úéÃ!XäYe†Æíó=ä÷)Æ[Õly[ï "–6µÈŽVíÇÙp} LÓýút@Ýs¿5å£(¾ÏÔ³÷_“¡m€‹gê /¬ÓL¡ìõ:6P9|ž‹D1Ð³Ž‡ùµ¦òV§u;L¹e-Ý݇ jiÊÐ M@@QMˆ„$dܰ^$ µX„°ðè€!ˆ G€wo3 DHþ0ó{Fîýð÷·L«ºù°ÿKüëEìßm'Ø9ý{Ђ"It;¯ãóc|ÿGõp@ôðó‰ °ÿÊP-ìJûïnø…Üÿ¿ÿ/â¿@ôø£"þ•Ø2‡ôc¿;,±¾g’ÓŠûüÏFä3ØyÏ+À'ßÝÌõk˜tpÏĺü‹„:giY¯½t¦R:H¡ Nwt–I,ÄÀ±ËAt ¥$ óßÄ»TN0~ÉÊ…8£{ë›ë+‹ÓÅâŠ;þ‹¡t]I$ýP0R=Ö–Ù¯ËQýÖ–Vb™Œ\êàÜÀ˜êž8¥Ri_`/‡hìWR³“-4€ÞhšèH.(Ý¢•…9.^›L \å®.-.#ú1H tHRŠ1s‚@­>Éx’û½í3UÀrJuÓõONÏ..ëbþçÑ!­Ãú_>.:ivòX`¶…t÷ä»ÿ€©~dÝÉô¥ÝøØí !€vøÐ“%rÿ”w„ÿwW|ëk’b Åd¡KQzé@€nÎv°‰€¾~óÛ7¯ó0€ã/ž~ãFôû—ëïH@Š¼í®‚I¤¿’‡,¡ßÔ/é¯÷•7<Þ¤®^Ñÿª‰Ÿhþ÷)BÉô‡Úˆ’vép™yü4 €íÿrþýõìcð+›~ìG÷ùTy6OÏx|¾;­áËå)së#ß¶& +9Xs¶ò}óÃÁP•™KD¶Í)#nÆ + ¨Ôs‘_ÄAˆüòÔµÔg°’U·ùû¨ + ÊBÚÍ<Ÿ%Ž-3Ø;{|A®®>Ê3›×5DšRx•~´#«:Ç¥pO$jÍðØÿxÚaÏß×)oH´¥ýÏFwÄ#ôQÄž® бRI +`pIE~4ÀE­Ds@D¸Ó à‚Œ $al€t‘÷öY]7¯(Jöþøþüܯ‹þpŸfÿ3¢?7þÇKÿ6ž@)³NãÈ‘£Ÿu;ÀÑ î&>Ÿ"Øð\€¥“ÿ_eÿ€àå @àÿ¿ë°ç–ÿOüÿñ~H&ƒ$íñû +À;vÄêc™âþ)€H°ßÍ’“¿—™ª+8Îñ3 Ð7ˆØ“†r«×q£õû¯Døð›««‹Ë+à\ ÍÌð(4qÛ^ƒa•—ÎL]çå3â„j§@6(Ænº¹Æ>=²±º0ÝÈæVÈ‘òÂR®Ö$‰ÐG×W–žwÕí½›ŠÂСóÎõ2»ôä XœAít}JÃ…€¤(ß\_Z\XŠIFç>•µ¹¶L'=—êýTŒ¯¸”É*“.ÏN×&Wµwm}ûë¾ìÁÖ‡jÇúè̶gé¨ p¶v¸¹!âû]úáûBe&ÿ&>¾ü}]YDZ8îx¿*çA~œGÒampô­Š; û|º6ø·ç.¢dôf}ue‘ö˜éÅUNT¶2îÓž–¿·½åÀi:þ–€(ÿíï|Çí û3f½Õ ÈÒ_Ê ì÷VÃ<ÁŸDx¶Êóx§@Úˆ&€”ß§€}éþ§ ä·,ñÿ×OF€¹;%ÏðeµZM”¯ùµû7À¨`´Bž¨¤åyÀEcž ¯6 ƒÆ{ þ$÷Á䚢6óša$œ— ™ä SÆJQ­·Ì'!Ñk­×.M´.éœúPNà‘ðèœñT©Ÿ]W/2:ª¬„wrR!öÌ•ÅøI W°‘ý@ÉÆUw½=qÕ!ã§Ÿ¦À™Ãu‚ 8!Ÿ™¹=C UdƒnѽÐ5»ÒpšïŒ)y&âb¢¦ØáÃÌ7“"ödžoˆv†fMÔŠ{.D€ ëßn~0SQ>¡I–¸¿eI4$ã6?Ò2]Ú8æ5ݘ¨>m\-ŸT¬íÓ %“Ò8*ÕrT/Þ±– ßoß’ø^/¦úEO$“(#iŠÀøÚ-þÿüïö7ÂÿÏ~c‰HH|MàÐK‡ž;ä_‰-‹ß§øñ«ññOò2VÜ {†ä÷°5ùskÌ뺲ª5Zµé¬N—{¦ „m®é¸‡„ ‚è·¼º.Œ° Ui*˼dD‚èÃQèâl‹ØNŒø¯dƒ_¥²nÛõ±¹•ÁaËH$Üs:l2нŅ9˜wy&Ødô£@z€*“彘ûˆjÀ|¥å¼Ð®„j¬¥RÐÈ k]_^\p@¬J|¨{D'Dåç„Ê qDI* lm}eeuy.«Ö&—Äûu®¡ß(©ßT 1[+úç™mÏIo©Lî´Šäné¢(Lß¾¿Ô¤ë(8¦æ¦2²Æ] ½Î‡á‚t@p’¾UЧæ¨yÒQ{ÕìûŠ0b?´´¬Ñ,³07=»´®$¨®›¬mÞOˆßÛRàÅ“Ç_<}íÆ·åû» €$@êpëÆ·o|ý-ö[úk KnÿU>þëŠÚ¾úÆëŽôÃùàÿeíОˆù'‡Ÿ56´©w„ýya|'æ'É^ +÷ox*Yâ¿#Rëú[ þ?ÿHV}Ê¿ çÅû]¿k£µ‚Q‰ý2Ñ"Ü|ño+8p!¿Ð)ªù ô#ÙD½B_ú§ÿ³†¿¬Èª­9cœ#d–ÔBb²6[3Õ¦|sŒ\&ZÅWZS­ ½²úP¡ð¥/®çÍ|MkSæ|½BÐÿ|V4y´ Yà3ËÆ³VqÉmëä<Ñmd·gþe‹»*¢¼¢nHº>}æHî6Òè{fæOÅÿ¢ÕšieCºÈ­;‚ºðFýBgcã±cOãÙIôž‚ð‡,>+„†v#¿ Þ_2õe¬PèCFU·¸Ïž´º«qÛÇj@Í/è1˜þZÄZ_]O1qž7zäO:`ðh‚~¿IÐ ÷ß½ÿð/D€ÀÏÑÿ_þò~ùR¦?cþëÿÿÍ€_þ\ +àïÿÆà§?ýé_1Àš,ž“H¿Éâ7J +`ûîd Þî¿–±¢”üOG„z9–«t úô1[]üžó»o2­rœ‡3vj¹¾º¼´Bë¹\žŠwŒVƒ>Ø©3ØÉ–€ÍÍomqÈ8UðSÉ 0"ož}ÌÚCÇ9‘f¶Ýžž“HÑkH…=j*ŽnÒuAéÚ²ôˆ²_[Y≅&5n°r„†úv”¾S<£#èЦŠQQ!ýnB'îëw=¹]ª2…ú+‹ ËÌÊvp¿|¸¸¼°ÂÌägç›÷;²Æ`£ÑàùÜ‘¢«ûp›‡~:aáê„xZ/f2úèñú?5ð)åþ9½Ì½ipýkw˜Jú嫵m`Ÿe- €à¾­Üà{7ãŸà‚®Þ]l !€ÿæ¢Z …ƒÞ©Cÿí– ßoID€ÿô‡TvøÙßüÍùÙ/ú5€ƒÄÿ=:ð—¬iŸüÝ/bÀ_ÿ”aþ(š~g[€ß#-õuÙ`÷À5\~H/ߟ6ýˆ8`%°'ÿÔ°¶NóõÊÊ +pÍpž >ð%ĉ´r÷ˆn³šqlƒžð+pvámsÐÌ‹€Sìƒì¡ìs2ýöî=aܬR’9]ûøb¯»›-¹¿ÙääôìÜÂÒÒMé‚Ï#¢fËÒ/ËKÝÅٞ˻¹ê!v”Ï Ÿà“Öu¾‹âR|-T’t*ÖØ%µ¡ŽÑõ§Óµ‹>xºZšVT€ªGûW}wmyáÁ…%æóÅ¦Õ +·i}emiin²ZŸ–tBmm7Ò3×>+æ:ðD€t„TYÜOÕID%™eN4çk…‘2{X¡K¿{]Ð^°ùÀ‘yí¾[ÿ™ Ð}ts$ ˆ/°—(-Ü5]%¢‹g4J—-ÎNÏ.®1¸C•ñ?b”÷HK„ßÇÞò0À?uùÚ×a¿°ïðú½[ï¼ÿ™ `7–þrÒ_V®]½öz_ :ÆÜ€ཧOÿVO$ ‹@zÅ”IÄ··“ +¸öÆW/[¤-úƒêwW‰jíÀcÊö³ÑÑ/ð|>Yõå¾gÓ<1èÇÞÅfµZ|y´V­5££/W‡Žþ' 8zD~¢ŸÝGúaÙÖ#ü0}•['†F_©Sž>Õ¶ªú jýÓ‡|VéuÚ Ÿlüìà #ìx‚  Œ<÷2ªFUõ«ªFZ©’å°òSVCµ‘ÊHY‘#É•=:H¶ÿåГ²#‡ÈG%ûÂbQ­Õ”Ïè ÒG/¨x?c=9QE>ÙÌ™'3ôÄ…1ï0ü‡ý<ÉàØÀ°#»úþýì÷D„é8aj€—õï´q4±¦ùµš_˜ " \R ¾T6’µš ÿcm³ý~+;–Æ2àß1³ßßýÍßÿ"Я×?üRÜwà¿ií¿k]%Ü€-öGÎ)xéÐvÖ_½vÙ?Qå^ÿvôLäÀ"‚ñ{b °—ðd{šH¹&˜//,ʳ¦éœ^mb‘~ÒG赩_û%Ƙ~D˜Å7·ƒãµ*…£ÙJ'DÈ串Ÿl ©ƒ~ƒ]iàk¿CðÙ >Ücߎ«qBy€”‡,.¶³áÊX>;˼Kët^dì¢j¾ _ta¶Ýl/®ê„˜'ØUE%IfPÞªª¶©*QyºÂ*…ÂÅsdUÑa×’J«ªðª8Så³¹Rd—V×W$“è& ’”;÷!âHk«4œO3 + ã9ývÅn3À €ï­,òؽUºR…¨÷‰;Å'½õ­ûد{úÀ;uI¬¥„¬pÌ +x*!géÐõ/q_W¨+àÖéJ½H–--̵§—WIìÙt“¹è=,~³8M'ÀË×¾!p3= ìðõ½"aüý¶ßiQÚu"~úŸán{]òþdzB°Hólc¹%ØCýpÿKþ ý‰ÿ¸œ"Œ ÀüOÿøæ¥µDµÇv`³7¼ME»1ÒÄÍŸÄëm2pCpÖ“§_Ìó¤ül,+:yçe›×ïæsùö½®uõó´Ž×kCõ©N·33ߙɳWò)|s¢òØ•F«yÑhfrM;Eë}¹ïAœ‹y;Ë;yѼØÌ³áázÌ9Ðh¼ÒhhY«k³V¥á'ñ_̲z£gݪòê8Ñ”gÞívßã>ªU'+TùÛóª…œwJͯàÿ׳¼^ý\…цÕÊ“C•sãy1S|@A¦ ïí¢SÌæív19Ò(Ú¹Ÿ²ÏÑí`´$"dy7ݸÂó +bŸ@>œú +ÿ(€!ýˆÿùþÓø÷Ñø×UæxöÚ%"ç­dÛà_~ï0k¦¤Eƒy‡¾ô€ÛˆWŸ1QÁØØXâ~Ïôû­7€©ýŸB8 ûyÿhÿã¿3?À/ù?þ1«ã< P +à§Rôÿÿ“²úÞwéMþ•¯çÿõËþÒÆÕxœY¿…Ûð×oȶ>z'Øïf"ä~FLymuQHc2`$À*hÃc@ä=Ã#0p/=3P»×W—9cCÀÿÝüÆ]8¨ð ¾ƒB­B~@¯%ÞöÝa¦¶Sæ´6 îØÔä›X³<úåÕÅéêá'ªœ9ñ—–™`memyIÖ™[\˜››mg“sŒVä‚5t˜s¥\08Cn¸,{«xþ.µAsºÕõ€*û>û>D4@N.ÁOÒ‘U¼}dù ùºW«D´ÑSsíVäŽ`¢Ê{c}“©Œ¦'k)•Õ5ɪífØö•$\ñáÚât>½¸²¶â&ò£ª:îDŽ×›í€>A_+²èòƒIØÖ‘HàvÙ: *õ}Ü¡½IIxßgpÇüÑõëúÖUßÕå…Yýk¬z|A€”å–¿IРŒØñ·ÿ«ï(‰$À> =ýG –|]—¸`À¾Gñß"úñúã(ü¿¼[ÄOŸ> ePÎI¸@êXúÿ+‡>ñÌãQ¿ºA†ý­è4jAJ™ g³‹±)FÎwZB¤z7R¼×š*ŠVGäÌΊuOÓ½îlýüùü|6UÔÚßgny&§§VFçi ¸˜U6s›6ní-ò©ù™©y§²¡jVÿR:ËÒô»:8ÓÑy†¡Ò-Њ º¹W%ujÑrc>CùŠjwžŠŒkw½þÊ9y¸¯Ð¿€•xæà“•¬U¸%‚klߟ)ºSùʼnlRçLuò‘#8(þ»ºMI¬u{&™ilÀÓ~ÊÍþ28 ·; =½[äûÑæoÓ}¤Ø¦ÁtnE’Ö v¤1`ÂÝ;Ç'¢g€ý +Àú Ë&sIY"2ÉÛn/ðÓÿåÿ'ð_~öw´ðoWZü·_òÂtðøÿŽüìÇ?úé~ôC²‘}7 €m} ý—_¿zåʵ«×¿víÈç§cËû'ðÏâ©ßØk€ ËÞ&^V_Ñ´*¼¸ @?ö@ ŠI¬¬,>yãP÷æ:OÄ[ÕOáIÐ8˜©d _‘<À Ñ rA‘ŽÂ¤CÀñVÛåLå:ä GyUÅ/ÌNVΦ—–é°¨ŠË¡–ÐK4^XYÛsK«Ìj¼¶.¡².àR]‹òW¦úR©„ÄkÅ8vQ íd¡ZêhTÍo«’Òû]S¥èñß[¦¹aM;}Ïtg˜ ¤SCt·€M¨_KúUêB:ÓÍJmrvE·y§‘[†ë¯/Ý‘MÉŸ¶tóná¶r«¹„Ð÷E_±Û{|ºÖÌv¶”DÇ=Mºá~<&@ Õ“5ø‡¡Eà¾#7ô‰dH[ Úˆ&þY¸(É‘Eý«Lëÿ€ç rÞÜ«½,¿ŸEÀÉŸ¼üæ[ ø6mÿ°ß}Þ¹¹ ào¾â¥·#¥8-¯ßÜ¿"ç_»À8¦>!€xE tÿƒþ;"_ÝŠ|Œ‰ý÷š€gÿÿŸxV‰jíÀ`ÑF‡Ùj²WävÛÏeÉ ºíÑÝ®ÅjÖi–R ÏÏŸxŠGñœñh8¢Y5K”šh±‡³WX‘»iU!p[œš™“ ZkþûVp.:Üç#Õ4À§ÏÄ{»®¬›ƒSãrVU– ¯ozº›mFäD6,Yú´¥ó1x>AûÉʹl"ŸŸQŠ™|jæýùÛî¯@RùHÖa«!åà;¢{Âs’ ­Ä âüè ¾mZׇç ëðþ¿ßGÿ=Âþ–,Mñ_hVbó]ùõI€ƒˆ€й Úó "ݸ›6]8¼J%Y¢¿,yýýö›Œ@D@à/i ðóŸÿìî 2à¿þò¿ºï_2áÿï~ñw?‹a?ý™›< MÿÆMŽÐ™ÖÿˆèWè_]‰-6i”ܲpôíðK +¸ à€}ñ{íèrhV¤ì4Ëé¶Ÿ?÷ú­öKË´y‡ÿ¯]ÂÞš ¼„Ã-˜ b$Ä ’Š&:wÏZ+ËP7èA0}ÕIn˜ø í<"ïöGžþÒÒl{¬røh=_Xý—âtý£S-.,ÎÎÎ-ëR‹“ÂrältYP#WF¦"6ôq•]žè)ù¶ÀÁ%¤=ú $ðHòéFðJf°F 2‚ •k•BFÂÊý'‡+Í&ÓOÿ=‹®ò=»G€6«Ôbgí®Uš³V¥™ë7hÞÚÐŒveá}º³››÷7 jë= ?ÎÑN +“È¡· ú +ðö1ñÍ]Òá²iXeÀt{q Y§DIìc‰ðûXðÓ€=ÖïáÀ×Àõ×kK\ïE wÇÿ™ÿ÷Šþ΂øÚç€dDúÉŸ¶`~à?Þl{µä¿NM õ0ýËvèY½ôþ„¾ÕÛÍCÁöµ¼hT;©Ÿž\îºÐ/ÖÉõÔ¶y%‚plâ¢@(€‰ó•d@H€¼R‡8%¸›ùy‚|¼;˺ÕfQˆ¹3ó1íÎÌŸÎÌé鱃‚ëH­ˆ±ûXµ^#}Î×Ï‹ÿÀzÉåŸ lä‹éÛÉMáìb$WîQ“È +«Ô*ôÎHÀú•úùñ¼5¯ŠÐûo^±`€‰ÌØ;2VXé~ŒéŽè*šªÑjÍ|Åvâ©ZýÒ—È;6l}þ=ÜîϽìcÿ£=ô–j|¾>2’yXFëÒkŒ­ð]”ðÓƒz¶¯°àî°*gXw‡«mÊÈ\â'á?ì‘à¥/øîwÿ°7 àï'ÊþÎ3Jü‚'ýþ"úô˜ìÇ-þÿ!ЋüvO°ˆ‰Hùbçµ+½W/üÏËàãi€Öÿ§#k8¦‹s ž‡ü&§Ì”iû^g” §1Z¯–’SóâþüŒ>!.lyµæØçÖ+õjU_LAlÊ=¤ÖÁ"à¼Æ»€¯»óó`ªã÷Y8ãiŸ¬œ;¯ÿd~^FHPEx›]” Ð0ÕA& «~ºWªw2wPÐG‡+½gJ^ üÆCô÷}ô¤çßò=v‰tÍh:tÂqºzb ñÁ-ÛOøöätËÜ1pœh€À~ŸåËÝncÔ¯ÒvøÒc"€ à@’~–?×ò¿(›þöoÿÖsýÜýÿm?f& fˆÀwÓTÀâÿsú­¹zõŠüŽðöõst•m”âÿëê5ÿlD·!:È"`ü<±~W‹Øòž¶"j­ +›B<~uüÀë%€Iü>¢Õ+kx·üòßeÚÆ¦X&°ÁœùB¨Iºñ[µÔ&ÌÅÓ7DÁ¯À¨”ÐØhE|ÜpÁ…^æZÛXç 'ʼnڳºº¼Ð®W‡†Çæ\[OøqK¿ÀtuU€\]^^ì,È=ç¼ße¢0íÒ,>X@q#ã¨õYrÙvu©¯®HÙÄ%²º¹IË‚òÝX™ó0@®H{‘iîœ3á‚}TüóÀ…¤f'kµÉÅ©®¤¿zfÎnY„âaö½õ¥éf{v¦ä*Tc»'|ãyÃ_wé·ßƒt¢þùÒ +&™êþ’ÉéáÀ$ K„ÖïZQD·î‹^t”ÐOûwο‡ÿÓ 6]{ÛŠ¸$v..Ê{ç«U¡7Æ ¶*ö€»»"™¡¶¹!'xniEIH¨}›¢r0ð ™RH,$Oà%š`:j¿2c/çÜSeô­´øÔìZgæùåŹÉFuøèPsA•$ÏR$[[cJšuaqM)ƒ———g—¢ÙÝyë›±{ Y4CohUFi€áw7ÀŽá©²ÎQÙÚGõ]½ø¦D—X%òwmS»î®ó( ‘>’žp†¥w‹^þk+Ò' s³y{vÑO^Øa&dŸÁc¡W‚d}n²Ý^”`UÛ²@%¸F·ùì7®ÿýûè¦ÿAÜ/ŸóÇiB7è$go¯ß«Þ£•hv Êt2ÁÒ?ŠGu]_us3®è9"J¸I{Z~{‹yxy€î'_ß:»yãm:¦"àá—hÿµôa¹¸Î¬?Ž„‰úW%6Np3@24@4lg¹U¶õ÷/Ë/Ùo\¾üUi€¯ºü÷ŠèYDž}ø¿eéG}?+FkÑn f† ’@ÇG04?ú­þ䬟]Å×óy¥–H#¹àÉ倨r’Ï޲¼SËgZSâ.sîÚ žÐ&)Ê*qˆQ0Ni€wÙU„Ç Y‰4‡<„ Wg™¨GeÇ‹Ó ±N^çÏ9'Ëh¨ðêŽ\Âñgî˜\´¸“Î/ÏOlE’ˆ(Ÿ¼%H:th°¦zº¾²4+R2'ì£ÿÞ?ÇÂõo³:•>‘6óÔƒ.•8W9ïGæ_HôO–nãD@ÄIÜ@Î?xÝ{vGüïÊý!ž3öÓ'z–3D€ŸüuL!€žýâç¿ø[i¡ÿoÿ¶l€ÿØ~äù—Ä”}ž;ä6È+„´¸â_ý ÿln·«üjÀûw+~Pþú0»Óº ži2 aÛÄ 3q÷RÿÄÁ=‘ocu™G×`ÑÎÒ@D„Š€@\]3OÁ*Î?yB`ÀH^œB€ž¤:Ù))X8¬8P®.N7͹%4ŠñÕÕ͵ÍMÕ~emUë+<›`Y Z&<À=ÞÜXsì9@Ó´—ˆú­K­€/¶cPUŽc,¢Æ\ OEdeenA0¦C€R¬«¤»›< Ãž2Aù¹½D÷G«Ž¨( ­Å¹¹9bx(Žû,9ìò¯ïm,í¹¹Å]˜ªŸ +FßËÝ @øväß\Gødzô›á÷…ý»<]_¿Ì!Ä9%ÇõŠ=Ê„Tð=¾øÇâ¶éî#––æŠö4„v–*Våêø^„ßÏb*`G¾“ú¤ù±·z€G7ØA·yíúµß¶ ÇDÿ¯\>yüq\¾†€ù,b‰2ß½ `7sàÀˆ¿Õ°íf¿»&ª=¶[úMßÏ:åS[¼ƒÞ± +E²ì\Þ‹ 4Ý_¬~–§êóœ½çÎÊaU‚jmJéq)Óܲ„øžAÑÌZÚÎüKPÈÀö×DÓ¤=èoWT9uðœÀÕèÍêãÂòÀ“PÄ *²eÆZN+¹Šϳ‘L,íÆ™P/NÄx´€€TË“T ¼’…”M"áìƒT©¸#´ŠøŽ¨TÚ"’Áÿ*ÏÖ9r¨Zí)€­Ð?iúØ¿‹çϵØz®ZzGÜÿŸ{=qéµK¯…ÄIÝ­ÎÃmÝ—€t ¤@Z€ÊBË­çA)ùûÝåï[„0÷QV^ùÍ/|íwB8` þû‰ðŸ·á/ò ÷åü³Ð’$ü‡y@:|75ÿÿëgNCz ç\9}J¿+nðoÏvÃég_/‡ˆ*Ú8`¿›%´ìa«~Ô®¨ ^è\Oˆ[ AŒnîæð£¾E0@¿ûÚ +àáWIxJ_ttÇ9îüÔëD¥Ä»&GzÁéôXÑ>1J{«è¢38™eò u>!6i Xšk7k•JSˆu„‚4 äçÀº¤ÌâÒz@žéRèÑ›Ê(Ë5 +W¡lá›òªÈ') •ç*8™úKÐÓ‘»ë«< °NÓÿŠùôôA嵦Úlúñ¸K4=H(WøO骞rPÉݲ…Å%1ê¢Ö¸l³h&ïïøÞƒÍÅééYæ–è¡‘%nOÕÂü®xÚŽ9Dë ÂÿÝûÿ?§({’Ø«¤N‘o:à|oI#à÷kíþ}‡DÅ-)ú·u«´Öl{viÕ£*’XÁÞ–¿·Ýãß ð[oHØÉ÷l@)Þÿþ?Øýëü† Ø pU*üòÉO^¾æ¹ôç§z_‰ù >!€ô2ïwÚÖ³<ßøêå¯Zœ>ùÌLjxÀmã¿Q€úJT{l¶ô£¾ŸþÐϾ¨ÇÎ`8ôKF˜’/YÅzš^€¸ÿ4LW«-ÜIñFÉÆ[Œb7ŸQÞ©6»öþñ¢óמ"-êãNuŒâä®3)`¥Va¯óÓƒ\õmýñV“…ÍX‹Bd#ÙŒ¶2Iê¥êédÄÄ9ž-p¦R9;ðä€@NìÒ”Ôƒ{$»XœèkéŽÔÇД” +qC}Xõ³‡¤¨µt‹Oˆfû>úïâù—ôßæúÇ‹’ÿvÍCqô0nIcÕõ¯ƒ3a²ú+E¤u(À?pߥæÅ»EQÀ^¥ð¸?Àoø{%†þî¿AØþòG?ùÉ_ÿä'i>Àm +àH±__›:äGý“ýU‰ rùÞ¤Às‡>sèà/üûH?AâÿIm`ÿût$ö!÷`MïÄú]-Ȳ—ñT7¹ÍKn£4ãaú‘¢!í&ýÏ™ƒî.cïàp—äj“þº#¼!nÊâV³&aŒs´ue‘W›xßœ¥“p±Yq^:¦â¤Of§³ÚðÑáæÜꊟ_(‚Lñª²×I¢ë +!øÕUZVUp”«‹a•¬T|rüÔØKIúÙ]­r§’B›ëîmÇ6‡¬Lˆvèö,.Ì-/1™L·‚0ÁúJ<€ÑB!ú¯#`ÖÜÝ ÅêÊâ2/ÕRÞÿCüh DƒïÞ¿»¾Ü¶XýýwØí2'À›nÊ—1Ü/Dh2ºÏlÀÂ>šÀO¦ÿ '+sø8§Þ­/ÎdAÁëÚÒ¿‹Ê¥Œ¶˜›mO/I’8„ľ–¿·½UFN¿ñ–#Dÿ#´Ýx‹À­›·n}ç›·ñz(mW¿ÖÀ$ÇO¦'nè·GŒpÞ;Œ¾€½iˆè£>þc*àRl—‰jíÀ–~Õ÷³îhÍ<êÙ˜±f?S‹/kUÌŠld ‹õúÓŸ<̰÷§!+v €º=É ¹êçC8x1Ò;mÌe¦õ1ÏbÂn½>¦ª \RX‰ÇÿÖýd€ŒÌ <Úã­Æà–Ëj‹lì$l! £8( µsŸõÖÊï|Mpe&ˆäE³Úð0;ºSDéÅ·Èòò‘†È.þ—ñt&B‰È˜PÀöežWÓ«GZq>Ê9 +ûØG „Ðç왳•3OWŽ<9@§þ.] " eªHÞ9‘Ý&‹ò&¼B€FD"ÊÒ3¹ÈÍêЧëÕN—¹vÆû]ÿ]=•L5è¹þ^yE‡£ ó?†f¢T^£»Diº¨^ à|éþéÔ?žMŒOŽü +‘U¢€¬¼Ð-€¥8@ ô—ø×Ú¿ø­$þ œ +诅ÿ¿ü‘À_ýô§b¼@¼Œ~/mÚ¥Ã?%ü¯“’óŸÆ0 5H$¶Kù'OžÔÏŠä€÷í0ùþþíYêóqž-r€€œá}lï~eqq.lx¥+rõ¥ „O™`pÖVÅV­Ñ€g uW–f :*£ãH'7W§UMx}I ˜µàð®ÝÙ‹W€V -Ö­H@*KÕXžkÕ‡gÓKxÏ4:H“¦°“¯býxz] nš¿EcUO¨¢¾ä¨%(Z‹@7…QmÛ·W–?DÿÀ>WáÊ+¥Û:´ªÂæ˜qÍ}‚TbqaY)öSuAŸÚ¡V¹©¬¥˜oAä'ÖB¤b›ñ°þ>Ã57WïÝ][œæqÀ‹Ü` úfÐΞ~f8c<‘Í €›=yžï í ~®ôÔA‘ŒˆÞ6I-| +a…Bˆ%(ߘ’FÝÝåUI@ž°ŽRÑ‹žt-Øó•¿·ùqÀ—‰øQ}$À;Lðuúî¡ú"`ŸÁ5½7WËyb íṃ|£¬d"‰þü‰¦­È|»y4Àõ¾>Žè/Ôü/5€ÿ”mÏ>Küß“%ª=¶[úQßÇ<P°M¤\Œ;:Ï…5Ć¡F>6öŠañJ}`àð*gÏÕ'Uõ­SO¨!©ÃØÂI+ϪÏL×3ŽoÙ|5õ×镳†ëÿÐ[Á³ÌÆzù$,å“gÊ^%U§iŠðlç)/9ë¡ÎH <É=Hk/9»´¼3”ϦuL%!¼®ÖÆÿ&g ¨–—é -¥kX"°ÍV à-.创ëK³“³ ËËÊRwˆÑxˆô¸ûbú}w p¯üy9õ´èlè¨dà£$  \èä'“zЊ?Dþ!>äæýüƒ…ÿ¯¡‹`HC±²éu†jBн^ ñ{™èî&€“/J¼•"‚}¹¼õ ÑÿÆ×ßö(€G½ðûÛo­™û¥Áú”€×µëÔñã§ŽóúÕÔ2–º +4 þ¿ñFêÀ(óÿ2³S*€^ðŸg<# `KT{l6ÿªïkyѨõ‡ÔiþO®>~fÝ9°ÍO4râݨWöó€ëgÏŠIçÏe¹øw>;—j*1ÆÙŒg„¹ññvU„¶×oæöµºËD²;UÁBUà™Š5˜\S¢Ý´Â»"yspLU šzGÓ|–MåYkºIPzÕ!WŽ! äþŸ=[9vL@Y×’†Î¢œ7ïœH°¶Q…p†¬.µã—§*ªé­œ›ÆÈg‡ªuž  +Hí™ÏEFa‚â~xþ-z7*Ë‚ø?ýÿËøâ¿’¦ŠÊøW‰ ÕÌQfúÓ9›¿J$À#]Ž-bï79ã¼ã•Ö-xæ‘Ðß&²;ÝJð³Ÿÿ”§þü˜¥ÀÏþêG-ðŸ<ÿ¿ìÒ<@î~.€à~šFÿ“'Ÿ?þ¼Ö­üÓg'O\^?à‡þ|ñ0 „mêw·Ä–=L`mMŽéÜbWhZ‚¯8׆:޵lyÕ® fßön¬È ž%.î,À$Ý@©ø 4anvè|vA`évè¤èS€Æ +¡>ÖW–-ŽY¨¼uU̶iMít±y<®bMÄÕËÂDÕ‹á‹òá)Œ^¨ª°Ž3«}Èe ^Ñ)( `òCŸ«î-&J´&ñC¼uG¸5ÌWÈÐ@_½®U©uXgʨÕ“>YTÕÄqn;w~»™¢[Ö‹¬#ÚÍYGhÖRÏLß¾)ïýP~דûpˆ×öÿÝto9ÑyÚ0gju¹µáˆ@TÐ à<ÐÒ Þ§O(&V ½D*ˆN€Ó‹RQ¾¯½ôÝÛ‚ñ{íû×èpòò5ºÿûã…1 +ð€ðîO²˜ Œè£•«×®œ:þâ)šß|³ûŸtHô× ã;òßfoÞðSGÀ­Àñgˆ¤€ø¿8DàÙ˜¨öØlþ9ßߊÚ(³þôA:¼íby!0»^À<ç΃ÿ:êÑ3/ËfŒ™–ÜoÁÉt²ïÔš„<;wb»¤ÉîTå‹jÀÕMµº÷ê•ìB>;ø®ê!6²¦Z3<ÛWåLtªLW`0Q9å <Ï!Ä)‹/=éà‚ëQVÄÅäùÊó´À³#ŒhÃv¹bS~‚¿@#ŸmÎ~zðOU68·Ì©Ù+±õ®>iBåü’Vë\‹®ùª¡Ïÿw•$^cÀDOª¨®JëËÀyz^:àéþ³ñƒE´áÌlÍ‹19Ô6 äã¿ô™˜ŸÏ¯ç$¾@ŸøÑOÙ÷³ÿì§ŽökÐû§ÿùDZ»ó_ÏÿO& à._ûâç­5%GŸŸ”Sðÿ8,öo3`OÀ }éCÀü×;Á~7{˜2;i4æÎ.œ2¼~ÿ‚,Ü «‹m"Ça§¾‹éÅAÓ-úòªñ ÚÅF$l…û¨ˆK|jö . ˜ÜqÎÍè ʼnœ+Ä.Ï6ë•á#6S¢P¡ëà^¯ód¢Õ ‘uqU»¤fѰÎwŒ,h™§."P Ô„ò¨ •Ô)Œª£Äk$¹ÎD +è«,±~n W,kmuina…^‘Ö5¾wd¨«qÏDž§´´„Њ¦nà3cû ` ©rÄy€À + +ø¯…˜ÝôÝœ/`CpHM@Þƒð^å"¤‡;ï=:à 6yø8ü¾üÜ% @rGWÜcô$}¸+’4t¶\˜›œ]ÜÖ°Œ (ÁÜë•¿·ÅTÀD®ßê¤5"_— +Ø+pËÜßæÏ—VFâ`8u™vöD”€@ŸÀø6ò·Ûk:¥©@/€áþ'àç‰ýÏ ÕÛn^xuµø¥O´u +ºô› Þ)dLÓ Ð#ãòâÜÐÀÀ±cÇ*gäû B`(ë% ÝDþýÃÏ'جµ;µ‹ÈÐE(+¥g¢ Λ‘‡L‘p \'ÞS®Hª›N§`4è¼Z]N·v2§ùLLµÙLŒåz¢#¨ãiH›Vwˆ€—áòÇ"^Zû¼m–VI8ð#HÿÓp÷j ðŸ XøÙ?ØNàAtøâç_‚ÿ¥`!þ?{œÀé“Ï?lrýõ«á…^|<ž- X¿«ùiy{š~Æ%æèd.À\ô Ü€ŸL{ãfýu†ÖyÜûšüÞè À°éÀe‚%\5Ü¡N7^ESÓSè•› Q­ ¥W탳ÎWì¢×6VàŒ +[Y*ÆjÃLJ2I¡“óU-¥t@ÄV¥b–WT³Å¹Å¥E&8ÐÉ„ ”¬¤¸ŒUíV•ÄltŠõˆTÄú +- +lê ·ŸK ?›œËµ.Ù„ås8äÈ£úó¯mlJèêf› $º‘Äýé7Ïp~FP.-.qçú-9É¥AdA›|×§§; H3B*Ü;Âí„îIàÅs"ú ›çüÝ¿·éÆHN:°ÿð; ¢ôJ*#‰ýüW)7ð€#:¸ u=‹ Óy{qãD8_Çö|%Äïc·ÄÒS/¾x²o"ÀôÂèðö4À#^ß¶ë¾› êåL€Âÿ•˯Ëõ?uüÅ“W®^‹Þ:pšcåéÛÛ0¾ümvJŸzƒŽ€×®‰ÿ)ð¼G`©`Ëxà'Y $ª=¶[qû@¯¼új[mñ–êñçy1ßiáV­Û—:nÀŸ¨5æšBC^d÷rÔWÎ +ãçÍlá¢×E°53C¼53??C(¼jMw´(Þ¥˜Ö%7,-Ê£èl4oN\• +@¢‚ŠÌL©"Ê®˜*貟åµÁÌè´Î¢Óe:ÿ÷ççoÏûù~Å»£wBGä—<Ðo*/f”G6q.«G'ÀüII‹\ùQÑx,3 NëE§hg#mn‚ªD,_²§™)“ïßV5ûÍ®´˜­ Vëy§Óér9aÜ <WÕú‰pùç³ú˜áÏb¼Çüþ¿G+¼&`'f{'j†¬Qçt>&*MœÂ‘?ðwÏH@Ð_›îkLðG$ àzøL¼´þ7H¤ À÷˜û +àÏQX(i€ŸÿÌIƒ¿úYšûçG[à{(ñ½ï)£ßý]Zb€É~òyÁ_ßÂÿ³Ï?Îb; —_ gQª€F}M®óÂB›§ì./­J àÎëµ"¿_ìÝx½¼*§ˆ¡”fyiqvŽ&€õÕe%”0R‡û„ÌU‹ qÒ|g ¾éÎÌy~ b#œÅuætó_{ š¯…käU+< `QuÆnzÆ4°#x6Í‚Cæ˜/½B©äèjQ ö hª —¯]0ÄuZ¶u\ئÊQÞ°œlÈ€ ‘@¹ÄÏ,°ôJ¬\77–¦g  ŸÉ®‘.ZKºÏºÉ‹»Äf@z¿Éí¦×ž<ëUÄÖ’/Ü7WÎø}ù…\üz ïõáKîþT€DhèhE`àˤ +Ìûrt%²G2m@œ_"ÂÈ랟DµBDLc®=½¤ªH¤øB¨„=í`àæ­ô8.À£ùKþßò,ûD¾™Ø½Ë{+€¯õò•«WN¿€k»GóýêEÄy†üõ½,.ëK&þ¿ÿ߈QOð8þfñÿ©é¿7 Qí±ØÂ—ÛïÕøF[ª~ñiZo4òv›_ÿ¼+ðçàHlê´EÁFý°¸,ŸÍs: TÎ3HЫÙh»{çNWl³Çœ•¾n³yQP½Ý¹}§;ú/„6±‘††z#k±n·PéSÊùåvNëƒçø\eXR„ŒŠ. vEÚÅ\>Ù{a´é^ŒZoâ\<ûŸÂ´Þit>pE”$"âTÉ,¯ ˜Yöä! å˜)#œöIÑíÞÉ/ +÷Fó5â&p?Y¯NWòB•/_µšØÿdz³³‚ÿÐèdC%ªœ¼Ã ƒ33TÝ®éû{ðƒ¾Ãó7öU¥>i–ñ%Ê9Y&T·^£ }ö y­VkwHþŠ(:8ò¬ÿ Ù G.cÙ+–„U\žNÕ?®u¼üß‘eæ~Â~’!ˆ”€@RBûŸýð‡?üóÿyhÿ~Μÿ?þ3ùÿHõ—4ûÿ¯0ùÿLô­2 €D|ÑÿÙg>ñ쳟Ñoì0#ß‹ò%è[ ðúŸxrs““Óðs™'éy.€U ·¦Úû…¾Õ&ÛÎÖV6V– +z¦ðv0ž ¾VìFkƒmÑ¿UfÊB_o‘F褯>h•)!™Œ”Bƒ»üöµ•Å6}KHrˆÏ+ ¡;€#A•¾x ‚ó²ôÁz +‘i)UËN9¢$ôkå¸}_UБ1{ãT +ý°²$°¼47=M'E =Á’ŹiúéqË”D3„Òq‹xbá–•Å%UvA‚e»%Hö̽úˆ®ß][Vyºt]¬n’»ˆÏ®$@øßAôûÂù“ïÞ"€Ð?ˆ¿kê›þ²ûHw$6`Q ci¦ KùýÊžM²’Ö‹ÿ¡êC ßÿ¾æ1Ù^^ý‰1Ü•hp½÷²„ø½í­­€À¶/¥ ð虀¾mÖïnŽX\¹råòÕ+×®œ>.±qõÚ•2霢!±ß¯¾@t÷Û2UúÅ/_·x}Ç<ðqXi‰jíÀ–~í÷±¡~ñ„^ÕƒÕêpU¦Ã~+ÕÐÐ aî…C'Nœ¨Ž yòÉC‡þ—¡¡£ƒ¼˜hxxxdøDupˆ3ªz±ä|åE=çûÃ*®Z«QT4Ÿ;Ÿ!e/úì‰êpTd(*R”·íjœH¹(ÇÑÁ±QòЮ!ê« Ð…}šóx§L9rtàèáC‡PétÍ'ª/ ŽR‘*5t†2_6wdh¤:ø2ç˜.°÷’ç?;[·aºd‘ÔQPtIE ÜÖçÎ|w$ë(KùåDíok½(îä#L-Xç"ˆ¨Oä—ò¬¸}ûu5gêãEÑòeçSüåª<óeeÓU–< +Õ‘; ­æÅ¢}¢ø PEDP‘d³³·‹Û³D4^Q¥T³â½ù;Û4a„ëŸáïó][*}*yþ„íµ¾?«ÈÔþÏ-¦A߆p€" 6ZÓ{´¦cÛcç¢C$ôfJ#!ŒîZáiÿ»EŠâÝn§YJ”Bÿ Ýñ më[ ¸Ð‹üûí/-?ÿů¥@tˆÙü޽Àÿüψ°ûó?ûáþLøW +¥äÑ_üÇÿÿ®€»”€ÄvY/( з¾e@>5ý{É79þ¿w ¡e[\Z˜¦Ûíö¬ $nòP ½ìèƒ>Ñ unq‰‡í..(Í*þõÂÂt1‡X€Jì€oÃMÉ…ãàøÜbh€$Ø- o|%+ünúÕ³Åü9š†Æ¦CÀW”zBüV=íaK£¨j1§WÐ:$ë¸3–©FzÓKOÛ®¬/Á€d ‘°a1 =*huenºÙœãáÃËʟчºþå…Y  +&g\$ÁÃ-—él©D ¶Xâ¡Û €–&"m³úþÝõÅÙIÆ\Ò ¸€y÷溰ía}l…Gï¼_FúYåLD€¿#þoó>܇þ< ÐNR4L=î2À•ßÃÞûØÍ[_çi€½>}1)˜ ˆÀ£-Ñ~7³Ÿíyü€«1â@ø¿vQPFø~ÝM‰þzõEìêË<âàÆ7®½¡:§€Üÿ¯¦@€õEdÏð0Àgáÿ3Ÿø+[úeßÏšö7]öóüv£šS—ZìuìY.¥œJ!áO ˆW;^÷ƒï³£æ–¯ûãa†^ÔD=œIø75ÕßgnÓ.mÏÙx>*?tÜl×¾è)ˆ3}oýÌÙl¨!äöÆÓã×Ü&.í¦`l.æyw„ö +÷Ü·÷-/v<ëðtAíÈ 1–Hù¸ˆ{Ö“ž9OØÛQŠNµú®ünmÐc ¹ëS`CYNwö¸Èx·U‹ú—F_mð&>ßl6˜6ÀôSá¿d„L¥ò£ÁÄ:€DØäB£äÿ';ÏÍhµ.½¦2 ÚT‘Î'RE FÆ2ZõÉOžì&U—]#M +[OþÅ È?vÜèæx†/nöÿ3¯ü¯î Œ@ôd À–YüðÏ2ÆüøG¬ýð‡ú¤42âþÿËÀ¿ùÝßýÚ×¾ðyGJý€`º~ÊþÁ17HÿGG”ŒÉ€Y–Ó_‹ûÝ,¡e“`B·éé¹i­‹Q‚½ÕpòEJ­/kŸà6Ç A׌_G!Èý[T2VõYÇㆄ‚žÀ ðÕÝO ¤Ï +À¹BF0Ÿ|x™Q _q³Ù‚î2ô€;;9V82Ü(ðìUC-89!öe¢êÔ]ž8ÛaBƒe¢ðÔ 5ÔuAïê¦ +¦ÊRÙè‚~ŠÕ·]~D‰«ÏaQ^7Cwd!o4¦çUìÚ’¨ŽXY’{O‰ÂEªÈt-kœ£›ë6æ[XFt­,0 +³ßÂGÞ2Œ[}s}izrŽ'™¿}7ümáVþzpnÓ0PîQöåEuxaz[`ŸS+ Ü÷4‚:H± K*ˆù‡`¶þ‰W–æŠY7HŒÐ^ñx‹À)&èߥÀMÂÿ‘j/ †—^ßÛ#À("òÜŸa& éi€èPJ]G˜óZ0û¯7Þ¼ñ†„DŠ”ó¼~šN€t + ß®ÿÂÃ=«?îx(ðãÀ¯lÆÎþ&‚NÐ|›ZEµÚï 1G G÷¢Ú²‹0pl@àLEHõ|ÀÙy±HVœÈÂc×¹>+2*;Щ4¶”黵ÜB)tQ}Ú”i=ªS3<1˜ tˆé°ÌqS·¾täÎð£ÜÛ@劾`]9")ÎiaüËx0ëdzÙj•“©–C’EúнÅ`6Ñ*\‘”"¬ñrµþr£ÞøÒÐÐ ÚNŒ  é}bè‡ÝÞãýUáú¹pú!ÿüuãýþŒÅÇÎ#x°§Êó Ê&ð_«eÌ·Ü{e„a¸kXœ¬€ø"ž/Õä[£È4wv À^®¾\­:À0êõ&pêÿ3¨ÿÀgô!ðÒ¿ˆøÝÔ +€ˆGa(€°À>/ºüa?þû§ÁÐÿOü—øÖ×¾øà#ú¤_ûóxú‰à¢ÿ¢gòûýñPg@+€Äú]-Q~#0·0Ýn¶ÝÀP@á O—öl±VüŸnÏ-.»¼•¥U‰‚éö¬ÅAƒè1FE?áUP¿øÃ"§Y͆á/Y;g·¶ iû«Ë¬ùi08ÜhÜ{éŽ@eèð@cšnöHç˜u¢ˆLhS·v™›cº % %µ°DQiRpœnªfhœYq~CõR­Bð€Aø¯TìApYvåí½/L޵ç–TÜø…)Ý6ÓõK +pK\¦óOg±Ç<×&Lp‡ô<p›ÙEî3‚üâ°˜»¶8Û^X¢Gj«mGî ÒCwCÞHÖ{ÐÍÂ-˜lšò å±WÒAgóä¦@R f±@.¤&¾û*Ò;ì¢ëZœÓµ ĈN¡y€öz%xïm7oÝp hð÷üžˆ9pëæ# Úûó1

¯Åÿø'ÀÄüË©´Ëø§€ÖØRÀ¨ßÝZö2Q}nzºùj>7-4ÙÁÁx,€XçnÿôyËóé9ưÓm`Y§hmÚO¨“À{õðÃv·—нcó8ÒúÆïŠX]R¾±s@(YÇaW´SÈ]ï­óŸ¹f£6D'@š)9(±ÎZ_!ß59Ýt±øA/ÓÓ©NJ@ã…n À)ÔŒÂâµeŒaÔ@_ä#Âq“½j¿´L;ƒ^¤Ö½Ðí’`jOŽÕuCˆŸ¬èfÌv$æÚI‹+xú*E*Ì"«¢ó +†grÛ¶Yr’KÃ™× ºz*`=6õ–Î@AävÛY7²a4×6ü.ƒüòÑÍ»’´ °C»L%ì-‰²$© ,$EÈ_%[†øn-ÎÍÎ.¯BýûÊD‡YîiAï}LÀ€S¯¿E@è7ûC”úÜŒÕݬ¤éø÷Þ¯;@ @¾¿ã¢~D¼J@À¾¶µô"=ôó…Ðz_À³¼¡"`ã{ëÏÇ_¦¥¾ÕÛ €ìo;B¶Ö/õj§®½ °·R$¢„ÙG=[xêØ@ýcëÏZ˜<8åù3úBVêá»G Àè”Ik4FÌÝ2­t‚k4.šªóJCu„÷[f/U¦ó>RŽÞi㊨H;m»M!À™ÊÓÇŽ TÎ*ceˆ¸PEj!0Þ[ì#ê/CèD +ê-LGáh‰ÈM ÷æ‡ôÕpuÝÆÅ¹Éöâªr¤XT`OKxÞÛ< +€gñ4à^ øï.¶oÀž +°ë+ÈíåóîàFm\»vúÅg_¾z‡ìŒ(-úëUFâé‚^0í°–Ž¼¸#pùô‹Ïð‡ðlŸø„#ŸxöqàÿŽØ%¼ZÐ,^2ãE­ÚiÔ(;§&D:¥*Ñ+Ïð„v ;R©àTÃ?ˆ ykXhƒ—¸ž6öjŒKQ¨¸är6F:e + mS¼YùêgëË"æ…¨ˆh­RnU$VUÝc½l=£¥#6rÄÄÀÀÓg…s +ørå«åÜÿt3°µ¦Z·JŽN𤺠+‹ زz9¯¿z8Ò§ãyw÷WÚm`û¦Hévo÷ÿ{ÀPÞ¨þy`&xC™©2ô|é*«}@Æø@T˜îÿˆ1z§°´j­bæ½ÿÿù?pçôWöô4­j!›ú˜Èï àó}1™D€ð?µëÿÁ22@àÿž»û‡}ÏÁ7ø‡qb¬}ëkâÿ~“ÀÇ?¢ŸÞ6ƒÐú‘ +À³ÿ"pø­âÄdœû£›ßÞ6'ˆÍζÇ2Ñ|V‚M €mŽö×¹éWÇšÓ³Óâ×ôœ  /X”°np¯áRDõ[míUþ&6š`EÞ¶²u u™“¡ ¶liÍôÕ–1.|Џî@@Ò$b¿xÈYÂòªãòªümžÔÈAlòÖDZ ]yÒeaÙ­KR4uhß"úCG•5+¾†$Jt +íÿ‹ ¹iiŸ¦ÄêX>' ‹øB?wF÷#kTŽ 6¨§Œ¾¬ª–f•vº£Sè|¹o@µly­¯Ü>y V“Ê1x’ê¸ÿ—Þœ—ï¯/àYÆ:'³yžëwi?ˆ$a I­+'·òoøæÿ»ZøžÄTÀ+½¶ûX‚÷>öŽ;ÔŸ®¿2s`@æ&ß? €•u‚´8ƒ},áyo»õÖ«¿uòEyÓoõ÷Kiäqc}>ÿ¶× ƒÛ% ¢DN>{üô•^ …þ# ,úZz»üòüµˆÀu" t€>€e€à þoûg ½|Ÿ}&Qí±Ø Èþ65%Ä3sM@&/ŠFÇ0Lä3óìêL,™˜™ÕÏÈ®TŽ5V‰®‹AãEk&/²áFG' ¾>)Î1ü¥2DÕÖ3*Ë"í8?[¯Év•ÝÙ3õ¡,UDÂd¾°q^pÒ+=+ÚÀÍð©# +Í ÷  OÔÒ rìéóãBùÔ ó æy—‰Rï;¢*I.ñL øNs¤­¼/hu<ŸŠÖs[–é<•JC‡*¦åàžó.‰Ó&õyøQeeÌ"Ðïÿ—!‹mÖ`ðT@ŽÓ7åÓ»ˆÝûÐ3Ãû·™/¡"™¡‚èµ¹ëÀü¿ûw¥˜Ÿ¯½L@Šìb/¹ ð¯øo}KR˜'¾'³ÐfúìÓî ùeôÀëÂ?ügéD@?žà7ý8ôYýñ¢5 ÎŒ¨€OÞÝh²ßÇÄ÷…YyóMF,ÌÑåŸgÖz<€<{}/vÄ8¹þ ò~Ý]>,‰ÐÀ£j‰€o o„ ˜§ßZ@U)}ðÿég°âåóMç?í–Û¼]–í¼ ŸÒ(³í1‰ò#uF*è»êä%ÊP-UÝÅü~ &(`~À‹Ûe*¯ˆ@åE†åSÔÒ1 Êv‚ìô—5kZ( bÉØÃ@€Mw ”ÐБß~ÕisÓ"øŸ2—Ï.­’ ‡ˆD ö2S{?{ë­¯Ó/ï4ϰÅÿ2ÀÔ»{YùKß?Þf¾{”«)p9 z^¹zåõ^`¿§Êà§VDˆ0ÐîĽ@ú“ÆúçJT{l¶„©}¬;ßí0m«(þâƒÛ  oŽwÛùçÅ|Wøévf:Ýî{10þ¢@ÕdÞ½ºDÀçŽ5òŸ'ÌòzVd‘FÖéüqᙳ"o^”ït±è¾?Ó¹óVLñØž©â½î«UOóÇ‚b~¾3ïYý% ºå\VÍÚ⸠^tçuäÎ ñðüÙ˜õÎÿõÁL»ùB™ˆón«h™Ëv‡ŠŒwn3¤_°«Ó³°R©œ=?‘iQä󢿅ÈÌ|×R¡x—Öðîí.³HL·ßû€fý™¼ÚV%˜5 ó¾tÒNË躈‚ÑKvޏÿ9ûýýtNk´¸4à ȷéÿ—]$Ìi:A +€}²Lÿ2à2¶úTt­üƒì4•AƒÐwûF¨>Z¦¦Àÿ¿ŸÿwzÙ¤¾ð(@À ¾õ;_Ó«襡bÅË-Ó9P‹­o)R|ü ^üÙ›âŽ$'ácOìÆA¾÷‰ð;”–`¿›%´ìaBÑââl.ЖG;·H?"ébàR¿ta¡3Í(@§]œ^]iI¹»súžÌ“Óöµm)àÔGzXkŸVDiµгæÃ:É=çdÂ/ÊÄ÷.Z"hð(€Ig%ÈåRˆ&,2€Þÿ$–ѹ$¤d—!Ì%-(T{t"rCÕ 3¿O;‚ޏÊÚ¡¼ cp²„Ž%)¥ yAgÝ&óó0t‡f‹ÙÙŽ¶T÷iyE‡iG!Š¢Û<7]´'ÛJ@¸‚ºÝ@x¿ÑÛ_ˆ×bUÒƒ)„™¼ˆGÒŸ8Þ1!鷩γîÃqÿ®TÐ!w‰ D¨1 l렋чg ³ê”äõ "0 %@Ìô‡pëÈÊÊ‚”éÀ)û[ÂóÞ&àg]¶€þ1Ð;€”FMk»à.ßÛ Ì»@iDž¡ €¥ßï%ëúì: +ÀÁ/¬nH¼qúÅ“) ­¾Ú70«ð;Í: Qí±ØÒÈî}ŒÉóN0…ÞhctTŸ—#L´724¨]¢MUûªÚ]9Qb>F¼=ò¤ìÈ“GaÀº'É«UG^Չɘ>ð}”bdÔV«±ᑑ/ÄÌTa¤>TN¨DCCG«ƒƒ'FNœÐÂQïÑšP©:FEtdèD9[_õåAUZEWÇF«ªiup¤:JE”³ ýìÏ.xèÈ‘C‡>:<¢ŠŒŽ ;‹^ÐBÉtm##º#ªŠÖtåÜ’—Gº†ŒñTí}a S g^ûÖ’8ÿxá –FnòúÁ³"vþÿûýž]€×< §p–N þJä"°{?€$À."@B#¤G'Æ/(_wxD ˜þ¤P@Íýñü¤Wz?÷ÒKÑ + +€&ˆÿ®^=®o·¾ÝV ßbS²oÂÿ2 ¦xâ#Oz ŸL? Xìè—=Pç>ÂÀÐÞ†? +`ÇD6y²¼{·…Ÿ +ëÚÓFVp éhãÄÄZ-cúý»(ÛqèíKÃ\ó”VvíÀîaê‚]Ažýq€üE_AèRèÜÜd4Ô&çè´§S 'ÊT¹£r¾•Ù,ιȮ*¦BH§×*ôW‚+Q’• |çÐêê¢ÈG- |ðr KºÖ¼ñj®K%•O& ŽTµ¹1èéYWc‰ÛÁ¥á÷ þ¾sst˜œ^èZ1<¬’“\Ì„ñç×VižÑ=ÄýO]h´¸Ï"5¬‡ÞÄø‰ø ûÖ›Žï+©;HʇÝÊ“Yyà¬îÒºÏc^PuœÛ½{1Aÿ” k´(XŽŽØÇž÷¶›7o\s€‡û·"ià€ÙÍdþ8󧽈1VaW®\Ñòò‹½Àæÿ耒ù~•£?õ° Àoõf,#—O¶lÞ£}o—?o[¢Úc;°u»KxW=† NÈ·o4˜ÑNîu³Ùhj_½ÑÈ<ý“ï4ÆÆÆY“©øêGõ®Ô«Ÿm‡úȉf»)wLîyç½6]Ü„´6Úì¼/š ímÍ,Ÿl´qåµ·Ó™­6b|£®÷ç†Ä¯Wš]“!}T‘ædT‘‚5³IœxeïmTncäUíkŒŽ¨ž@æ9?{@X¬VªÃ‡†„áñ¢ÙÐQpõT$kSnÁSiP`8ŸŠÓå“Ny5Fšm—&Â3´þýënqÚ”7„ÙQ’_+â4]ÎæÈ†ñfv{v+þßïÿó´ŸÔ`{@«fP±ǶúXTÆÝ§1åÛ3çˆMÐ!ÐI1%T)´ÐòÐDã‰Çz}œuoÓðÒo–Í_û×°ÛG H”ÖÃ~Ø×8ò¯üÔxøY°­“K¦ßóÛ€2ðÄ.MNe±àÕ´½e)¿Ý,¡e/¹æ¦'µ¬-ü˳íŠXÂê ÚìýþTœÿ9üÜ®.éXWš`aº©ÿž´º»uàO1?H³±BY•ZÀÌåJ¦Sí0 ›B>}*ÁœU +7:Ö&g™ˆˆ^†þ~ãs«ªLÄã&€bÂW‘,4b¹vû©Âª¶T•4¥]G¦6pCb.bÕÍäNµ•óÂt{¬¡ŽÊÉÉv üÝ}B÷ÊaßUJÔ%ª$•áÁÜô´òJ›J´Ãöm/ñ÷l½·¹º¬]Ðú]0íðB¶ß^eËQ~¿_ð~‰dÆ;‚ƒb|-â4^úáÁ­Ñ"@1N­q9ûÂ3óã͇î^—9à“w7з·áôÏNgµ†þû»[›Èäâ—xß¡qÛ ³àkZt˳Úhk1Ö¨Mæ3L¤­;xtÖI÷1¡ßÉމßCt° ó-p±EÊîC'Çj•£‡Ör©í†ý>žÊƒ¦s³æ~tÊs|ž®vª™¡ ~ãú‡~ð1zàÊ®w•ã 4Žc «òçW»d-Å>)}¡÷l‡ç((õÜ\>™—Ý!ÄiF j}•Ew¬£*ÎÍN6›mtk¥µ¶Û\bdi¸Ãà»wWç¦çWÖ×ìý‡£íÀ¿¹Î|Õ£òÜy408—ˆÃ¸÷|éxo÷ýû´1Ð2ƒhx`G^gkÏæ]í àlÐrñ7ïnèuW:D@Zk6Ÿ^\¥›"ɬö1Ãy?“¸zêÅã/¦cø„EÈzåQæà}jH¾² i×P§_|æøéÓ½}ˆôznñ¿Àá¿ñ¦iзޗwlõà/wWKT{l¶•„ø½m¤‘ßÞ¢ƒühûáÍÁ*£ùí9 /ãïf¼:ÔÎ^qÏpx`@à¬`U5 O}0ƒWÊ °˜'²Âöšyµ1Ó*8[“Û)& m’ Ðë\=ëÐï|]Ì‚þŸ:|øð@µÞÌjƒ¦+Bþ粼˚ÌÛ“Ù˜BHå¨®íÆ !ˆÆèJMÌ© Óžsîg©Ú£ʟ˜à9¬Ð}!0šu›Ò'^mH˜ð‘5Q¾×„ðϾ2¨®ztg¨h‰~Ùa½Î9söLâÿøøÅ<›yDû¿VÅÿ² À%UÒo]Ïj'5(™ê¸K `{?™ÎÙMàùk'åq(¬7Çþ=ùÜ~{a @€f€ßüBôØf¦?ß2ÿwJê÷¾mI,Ä)=ûÂ~s+ Š; ŸL+é¡ß swcÌÞÞæÞk4±7šôê“Ç/ÄÒ¾=ÇŒzB™–³…’Lê‰þqô… ðM6ÖÔMI‡¶Z`jñ j +|¿7g¡n4ÈDZQN±(i‹s”Â`Ñás±['²GGç$ªÃGÔš¦'ü•û[ÅÏ2SÑ’0Ì´…2Ÿ­Z†|bMi‘~«lW(ÕVëÊ‹Ô`i…‚d†«©Åâât;›ÌñF™ÉbqAÿÏ«±ºþråÝÏ"B>BE –$`Âáï0WÀ$æ +FRj±Ý#· ®ò¹»¶² |W×W×ÝŸX|†âb´°-\8 ÷ ô雀–¸ûô)ð†}{ºj';hЇ.NËp>Æ DñþºÏ$¿:@`b}óîÚó"3?ÑòšÛ’Y/ìñJx~¤Ù­ïEßI€¼ø¿O@@$ô‡Áù¾]þ.Ÿ|öø)G„}i€€¾€^ ˆì§:”ùÆ©]#Iøo÷7 ¨öØl·ýXÚý¬:;Øìøà"j]?a|W³M *` ¸©{Þž/{×Ù§“8#ÌT³êP£Z¯53zꛓàÑþ¤\ìèÿr£ð`;°Ÿx§ýhöåóõV5;ÒÈÏ3J`àðá>qx ÒhTU9ØŸjçÑøÍZUE”3ê‘£ðœe>BõµA:pqq Öb¢¬úäÀÙ3O×Î_°WÍAÔˆ Àòv³9Òîr©ìQncF>vb°Y„Úaº˜ åõh+Ïg²ó<器]08Rø×Rð?s†6ø/ÿâ¡öÿÒÆEõÄwÐ ~s*7.ø_•p!þ°3°£À—¸bOÌüÿù€ +°¼™üiÅöï%Ã%/s)‚à¿}û-<q€çÙ°2Ønå9œý›¿ùƒS9²s~’“°[賈ÑLg†¥Üv³„–=M ƒìíIæö£/€'ø}%¦''³Fex`@^x£= rçÚcÕ¡ájµÖ“SÌ `Oßzë<û÷€\TåNÔ = m¦a¬T…Š>9®|,”¡@½6üÉCGkc€Ëå—ʶû­ƒ*ЈåÀð92ï¢:\*—‚O¤‡ï%b VT,ð®ÔdO5äÆÕªnÄsSÅvcàÈÑáŠnD£Ik‰JXÃïjR{䀪"qÀéM1“X€nôôK í™îxúw7üØ$´¯€ÄþåÏ›óò“O?4À}ÂüÚÅqŽ21²‚>l; aΗŨ”môo˜mO/­2ÑPªªg +Üëc8?Ò"ªÿ–€Ðçg9ðÏbKìÙØ ßo=ú_¹r GÿòÕ«§= +àº$.?ÏÖâÚ”$Øm€ˆßÇyíÓ/–ÚŠx€þºiçã¯5þ¢wZ¢Úc;°¡ým¤ygx8/Ÿe+P«?Û(‚!bŠÜn8‘çµðñ +¬9n`à©cO?M”Yþtã³zµVT2Doò2üsÓkc¼]Íî½YưùÔMŽŠ<ŸI=䇎VëGäü”ŸæÃ•lDØMo¹—gùh•~ÆìgË6ªt¼Ñjy¡™Õµ!· À1+•$טù +UÙ/=Yùßt•‚¢l„KBè4*M5G:ù`CõŽm-yöÂP›a²ÒÙæå+pÉÆ'.Mt¦&ZÀ²Þ"²é6»`ˆ‡ÿß|Tû?'–À]t-wT]Î.‡ÔD ’Ð@vñb¿ˆ’²‹úwÐúÅ/ôŒv*€‡Ý,Bh€ß´m造¹yîïDÿ°Xý‚aŸ¾?ÿ…Ï>¢x‰G¦B0óÛÿH8°‹à°Šü÷7ȈD^»ZBË&0=7Ù¨TjlBˆaÈ&VdŸ•ûߨK>|h Þ„ö‹ ͆ÁÀpµÞhæ:¯Ä’‹wf,®4ZÂ`£2±T¹&3Xçæð°ñ–!gORšÊ¥X̵›õÊÐáCŸ¬Œ‰ë–'.)Ê€3O'\`Þl;Ÿ.”ÁºäÑ5Š[ ý"]ó8SµaÊÑ&L•Ùr…vþ©µ*')Ò«T†ŽºC"‡çšUýM=j0IèA;9 )@måû[HHgMÚ'¸ËR;lc»1úŽ˜ºh½¹ªl–˜\P…æq„ó à³Ox†ï÷àÿƒrˆ÷w-”D_J‹û?ï´)H(H* Îq€åëŒÐ?×äôÒ„TŸ=>&å#¬ô›o]»ü[Ï É¿G/@·¤nNcEÝ7½±«õÆø=d½€œ±^¾þÕË§Ž»€›Ü€y‚z&àóÞf.ŸEÀ_ëxÝ-Dü4ÀÔ ПîãÀ?Šå탼hzo ö¨€5>ÝhËÛ­ÖĶq*ŽÆHQ’Jlyê)ý¸1€¬úÊðP£.PLäp¸"e!ðį=ñÄ@ehp ìFE”Š@þD>U«õ¦øÃÈ%@eó£ÍFV;q[ c*¹Ä*À'ž‡ÿg+gêOT*õóÌzDÝŒ_®Ÿ&²©l¤Ómž™ÔV²<“ÿO@Ä©¹÷ñud”ùøùq- 6OïQy©Ùÿ<‘Ì%Á¹Ýã½ö:3lïÿ¯Úô]Ïw´í@9€j…¬)gÜŠ<ÜË¥J %i™¯‘ÿ"þ·Ú²Kù%ðß²p'€­ €7ÍÿC/9 +`“û¾3°# €¥¥…|Àäü‹þÂÿ6@ŠÄïDúEØ2óÞïäü£’±²-Cré3qf?“×O„]`2o3€ôÒ‚uQO@ÜCo  ×'çæ +›« Wjµj#sà 3›`JxÐ*Þx_èÀlBñÙ.šÂq•±=]è´1‡Œ9aFÔ//Ñ"áò3>\+:ª Yî"Xä"@O…œP¼û3  ¨W$>K'¹ïñªÖÐ)Ú‡îÑV—¤Ž^¤ > Eíéötsl¬V¯UÇÚ©íaÉ áZcLrWp' + ¸BÑ:m¡þuîä«Lžäj Øa ·¥Áy!÷zmYºˆ¡ÈÌ=bµ+T–i]i¥Üñü8ü Ûˆw)»”&Å>D8À'Z ÜPÀG›L*ð}€8ÒPéž X‹õÕFÌ.ò4@'QùÈ€=-Ñò!»nü—€7^?õ"àÛÿÖãÿ°ï Æ^Ûÿ7n˜õ»›;ûñ! »r-J»z]{Ù¾’NGáüGã;ácéϧ_ú«¤@/à÷6KT{l6ÿ”ïk#Y'/ÆÝaÿ"Ïk7>mìÖjuñ.E¨keÕS[ˆ9_‰&0i†zµ^G0¤,p¦Ì¡˜hŠªç¹±tØ;OܪÉÎ7†ŽT+•cÇô‰_8Ô0v•s}ÌMØD«Ñø~dbƒŠaRyã…2ÐRMØ+ñâ%!€³õ3•WSµ™Œ'U„eÀY‘ óàÿꈛüéÿ—7O e½Šˆ¯Rñ)iÍñÊx„îµýOð?s&¿à"¯ýÿ^û¿nR¿ÿïkqޤö,—TOèÿ^i2ÀÂçì× T²$Ðúv‰²˜`›EÀ¥‰K4øûãÖÛ8ôœ€ žÌ®¼/œ{ëY$e™LÉØFH0ÍàV'@L¿Û"úN? ¥1ù/³…Òß-° ÀÉ·ÜÈ´'kò_Çš“ÍIfõ±€– ³³òœõ#¯t“ÍæXcŒá2“œÃñ„¥Æh&À7û +Á^( WX_ksÀ‚R“[„ljצÖ/Ku° + µ†Ñ[ : Ó³ù$ ÖUX)0Q±“ÕÂbW‹%g?ßåž³7ê¡%騤Ø|–tzHyO· fE¤ÍŸg'Ì…îÃX£îÁAî@‘ Ÿ*éÞYh‰Ò*˜@P·K +@÷<÷­ï·ÄÈ>»+°‚ú•YOn¸FЂúf5ƒõ¹£Bø&ÜvxÿÃ{îÓ­On=Ôr•#žü% ñ@oGÈLFÀ-J¡Ã¬šì›Ò40ÀÆÆÚ +}¦×9î3ØÛLÌýŒH¾â&€¾!úÞêxíMºà?êeÔïn0úïÙÕ+§O?yEYJ?ÈQúìbÉõ÷’… +½vêä©7¢reàõr€¾ÔþÓî³DµÇv`󸾯#÷ÄÍAýyƒ¼9öéF~˜ÿxÕxÆâLѬ®¹=_|«Ÿ­„'sk*ÊâëZ“`#?¹žñA†úxýH=×êЕY­ |ò‰Ã‡Ÿ¬5»§j¤š`l¬+wZsG<í+ûé1‚p°9–5N¸ `†an6]‚V£@v¨2pŒ>€©ªˆSÕCbäé•fUÞyìÈG†Æðª£ÛÌÀ5r™½ç!œ§c øöÜÙ³[ø× àÂõ½Íÿ/ÛÿKõÁ½u€^Ð¥Ìß¹£Óu4bäIŒ‡c;ç Pç–X°d"àžèqåÂ"‘ÌÏ1–ØÕÄX·ôGÿeŸOû0íì±ÎCy“¾gœ÷ùßôÇÿƒÿiئß~ðú¤Ÿ„žÅðOaï)wKDFaö6JûØA³ÚÉ‹­Tcͱé\»ä­m|XB…ج˜ê¶™Ëo•‡­d“m‘vr’¸$€`gÂbÂ'„ï/€âP:‰Ð +g½¦#‚5¼–×ï> «ƒ¸NÆÓ €ÃG†”ät´úSÝ Õ¢=;‘â¹HGÞÔ€–rS-–Œ|*€tpÅý„ðש´ö¤Z¢´‡î…z7uõ¹nUÑÝÐmiK·EÖ™ëEÑÕHµÒm¤ù`¬ÖÔjÜUF÷›é»eâ´°J×ú͵%e5·²²æ™øÅÑ·¸,w?†ÿÓšoÖåŒã§ƒ¿v|(l+¸û o" bòAmníuÀ! CqŒ ðß@lnòŒäÕw”ÛDìcàr?#`píÆ·S'À­QDn0ê‹ô»ZBý®Âÿ5ðÎÌ@*íäå«Êv[ oÀÃæRJüûûÍ7Ný?/§g¾ü¿üÕÓ'cÙe`KT{l¶ÔÈ¿d·'²‹³ù‰Az,ympìbIgc¬Ü:yõ½)Á“èˆ|r+Pͪƒ‚ïxÄò3uHÜjÝæ)YÖ©6 +F²“-d€Ê&êG2|Ò¢1¨œä·~â㕲µ^EVw³F—Ì©g²?¬ÑÈŠ—«Ò/#1§`yH€VÁ.~rÑ!ªäÉÎ‡Š˜Èdž +HÜn Ž4šYóvóZLT„zˆ®ñüàš-›ÖÇõ:þ¬œÿÿ©ÙªíðÿÅÿ‹}Õ§ŠÎ¯×àµ4`¢{çŽraÔcêÈ8ŸJ?†‡cªg¯ …¤ÒLv™ÛÜr’uPÜ–9LIŒKóE$ ¦xΓl™@ÿAùs6˜¾‹¥ý‘‚óè ïØ©Œc¨%© };S™Þé'!™~1zXêåm[Ìä3K³†Hv€&¶7†‡ôŸjÄ'ṗYoeâ*À'ÈòÉ<ÎPœRÈõíDJQO8%n× q;¬þÖ +t•,ð¾õ’à€ä:oš°:}ùtLЭ¹b²Q @#SuÚ®—¨OÉ”Òf]sU½-Ì6§WÁ|9 ¨÷•Ζ=s‰ £¦?ƒpW“Jºj¬UÕ˜F]©4“Lð§Oß¤Ê +ô³¯˜&LŠ.xú?ã mèFÑŽR«ê&û|êߥɹï]ñâ¯u%––—ñ»µ-I Lt଀ž•»x\€6¢W?n;Íï<÷Гwžž}dê%(üˆ É´IÁéôîB?úƒ ‰×WV—( š( ¢>{/”ûÚ[o]§UþÔUžÏ(í-GÌØkonùû¿Júk¹ó ýc­?ðâék×®kWD^‡ý1À€þO,ñùKôS%juêT@ µð,ãß±»8ÿ¶DµÇv`K„ßÇFqg<y«ygvd°™Óñv$׌ž˜¸=^û@Ôu¬žzêðSæ¿ør–¹ŠNñòEÖ¡ Ü"ßš™)n+ƒ¼Z“ãKV¶ 2 ûløH‚T%E¦*OzZÄÃSÀ y,@^/¦ÊŠøÔóð†â…âN1¿T‘˜ Çæ|Ñs‡Ùò 듈ȧΛÈ¡úݦ*Rt›ƒ£ÚãÙ~¶±ŒÉâ3fܪ|ž1$«×¿ü>{ö\‰žz@)æÿ®íÿ¥Ùÿ`"§.ºQ9Ó%£hKÉÝ@ÅDØbŸ~_*[ÎÔSl?jCÀt/zE¿E2ú=YÒúï-1O½ð!ìÿ‹ä°ý‹d)ÆÖ¶© "‡(Æ’ƒÒ(4"á#ÈÒOBivöý†ÿF~ìèy•:¢gÉ·ÜÃðdófmx Zc<ŸH%\ ZsÅà'^-Àk©c¢”>y» Íôñp$ ´Wi;Œú +˜)vk’NãZp* /,(g¸­ssr·µæíÚ{6"Ã[Ü„ôâe³Q>úÉC‡‡kMUF…ň {úJ¤Šæ\ÇÍn6U!ñi«b$!=@§Nô|ÔÉ€šÆâZ‹>Ó RpNôÉÌñGVÎİÀ›º òÿ æû­»£ú08ƒüºsÜAe*‘ÐÎÇ•*kRWÁLÿa“Ýž —Dä¡o¬-Nç ‹«««k››ëž @¾¼‰­Zǧù!l + ðXs;<ü´î/A]ªÀ[òí-hÝç ïÝîS¬Ö9IÅhø”ÿ˜izve]*…Dt´ØØË.÷¶[7®»UþÚ[Ñ`«À­›7Pf,éw³’þ[òÿYÿ§wD®Ï_æJŸrÙ+;©€k7®µ_Dàõ2þ¶õ—Û§ž9ôL| €_Ùá÷±‘†¸›7³Ùì…F»ZM´“sà…1⢛ºÌK'µ2:8&¸™¬ÈFßkWÌDjSÖRÉõ™4í*=ëM}Œ^ì[Vd6¬h|¶ñÊ¡#ŸSƯP‘1s ÷š8þøD§Yÿ ŸµUH¦:ÆYÉŠbl²[ŒÅ”Ãî€ ®Oœ?¯ª×Ïže€OIø¬(p{=¦²Â0;óvc°9íj5 Vh”’¨g"-ðO[ÊþüÄÙ/[ ðÈÁ§Ÿ®¥-B8U TÙ}ÛÿóÜüßêà“õžO¦,(#ZMý(öîPíµœ©W’ÐÝW~œí€÷üý¦}fdðs‹¢øg4lëZDrS Æ›úi%¶J{(ðÀ|ÿÞìC)Â÷éÇ!L|Ç?yÿ±ºÕ`·@ùRn¸ëû™ÀÕ¬IíJx[ µ?+rü2ç¸?^¯ÙÅHIø€1îiiàw/NÀRðÔ·ò’¯uÌÔÂ1o=á «¬`œë€sa2“Öœl3`àèá'Ô2CV$æìd‚¸jH/<ñvsŒ~ +¹ÒÈõVu•‘E‚wq_[Ò4à]G”‚Fi“ÂÏõw%¦˜#WÂe´§pF²‚þ±Òž|Z÷€77Œ‘Ü'jÁ½Ó^nMj¥Ñà’tQy®}ˆ¨òeööІ¬ërµ––y +ÿÆÚ 'ˆ‡Ñ÷å¿Cp:ÿu­P‚èÞÏt % Tú˜ðzº°¢m: +p²G9:•^€ln¬­,-/êbÖÄõˆÐ°3÷³[×ßðèðçëf_€@Ðw—·oÜ?ô.#L`/ÿêå^À³D€#a§Oõðïx€—.ÆŸTäkÛ€²@\>3ö"»Ú¡DµÇv`K„ßÇFJNä‘Ý"1µ<Þ°­¼Ú›1¨^O@TSë‚[1Ü-Få¿C±¤Z-m¶ä´Nd“tTªG[>¤l»ÎÚÓCŸ®ç "Ôæ?±w;Û²ÎÅFàlu:Â÷Êä¶äÆH7—p-$2]š€‡ñ©ºgI¶T"®±‹¹G;ÊÆ/ÎN¾0ØŽi äðÇ ¡kDïu–¡…ña&ùËZ—DÞ³gž>+àžÑ/²ù?I7øÿpûßPûÿ‰ÿ© @ëÒkœ7qibžçé*|wS Æ,„Rgøýû÷ pFËÅíÛþç—YÙæ‚û ã‹ó±±Rá4¼j§€ùo_žÀ¡‡t–öhW,·"œF¶‡>B™`Ñá·ºeÛ€€OD"ñÁúHüg3 †Ùã%^’­200TkàÐÙ©‡e8ª†7Ìø¹HXz»ýŸMó| +xrðµªÏ䬇ãù íÀ´) ÓÕ `fÜäUûl%™q´YŸ”öd½6$ðÄ¡Úe‰Ú’ A +e¤…TÂØ˜ôˆ¾kµ±Œ:²×UV•hØP–:‰jE6:h7ߪÀ—a¡"mÏ;tm©é4„€i­ëÑ•$çFø2uûx§â©w¶=9æiš;hËë5œÿ° lÏ T¼ëïn,J¶0“ñêZn†oÜ|øÎ&-ÿÚç€}wÜs&C‚"ú‡L€áùþ:(Á Bk]'r¾ tïþ]B i¸»±F€I’™tq‘‰‰Ü=}˜´ÁË}í£Ž÷ €­6€·Ü`ÆÊÞôÀ]ßBü8ÿ°‰ÿh€+Zã‘§/kͳ¸€«xþ¥pÔËÒ6-ñË7/#>ÊÀü¿\öp ¯TþÂ÷–—VÕÛÇÚíkóÕ1"€#Ï;'<ŽLàþwr°ëâ‹vy5&õÃÁ¬ÄL€•óEv6keãù|Æìûï) 9¯Ž\Š6v@›‘kÒ„ö‰²³›qúñ΂+•˜_4®µšÊŠÜÎê­þö`e3ªz1ÓjÍü@"f¤Cä]<#ð}1÷¿ÕëgDÀú!Ê;—KÏr«"òbÄÿ”¯®£ˆéÿb»ñp@ +@æ5yýä÷ë¾<õô±#‡ÊÙ§;Änþÿ.íÿªpðÕâ.€-è¯Ý]7–+7þGk´qØê¿J?€JåБW^yEÿœ2žpp‘yû“•ó ÐChíŸ €%¾4ó?"ý^¾,Øoc«—ÎÛøgå³Ãõç©@|÷"&·"ÂŒ|S¿Ä?Z ”a®yÏùYÓÊ6s÷—¼Ø±šäÜ@µVÓÿò±Ihej™`‰fÒ ´Ðö/ÚÑ÷­Ýį…w€¢&ºW>8€q ë.²Ù›v+Ó_zÀ»|\€Ö¿ *.øÄáê-vª•†Ä0ßÙH¹0ÆN:@@+—Z³nÁÐnz—ôH¹SqïfK9ð¤>-µá+àm“„̈r̪~ª¬ör_Yaá\$–ÈDërþ]’+å<&õÒ½”^Èj•Z1 ª2" IKÛ«éÓ4]· vK@×µ…¹ÙÅ••õUø/ÐBÚ€»|š÷A4ƒøø÷Ú'W?èO»?G¦×ŠvÞ'DÀ‰°Ÿßy`| sVZð<‘pc§-éòÀQÓT÷Gša¹Ÿ½µ-ð͈ð(À4 ìxýÑÑ´ø/ÞÑ@¸wàj/pÕïd"¾ÛÒ§´.¼G-®I|õÚôÐgÇ(€¾ð?vèÙôLàÇ€_Ùîüà¯F<Ó.-òb¬“ÆãndZ¨&&ŠLÀë¢KñúLpö¼€á¹ïòjÖ(f`T²)¢ÿyã­gãSb*F™òÓV ü;ÌEpN¬ª×§²6=ñK£/bEfµŽx™ðG,X·n¿/þç­¼ßiŒU;½ÇöȦ²óç*Ï|öóø‘ü‘AGÔOë&²©öÈ”¶TÚ˜œã;/lU¤Ñëг^àÈ‘£²#GË}ôÉÂ÷ÑÁ–~¡%zåÿïlÿÏósý Õ"àêwçû"ž h´ÆLª›hÏ­9H?½8tdç6ŽTõ©òŠ'ö¥Ê®] Rb ß+òÐEÙÀÿsý€à?üGÒÑðý ÿ“ik+ ¼”ígùô8H=ôM@Kð¿ý“–\}/ÝÀJß7Z`·@)ÆÆ²}^t™oÖ‡ªÔçWµ)ÿ¹™ËI…‘D·é·¾ú§áZ03јÝámd@ø™›Î¤w»@8 ¨µ®¥T¢9ËK‡9ZBWïÓŸë÷«Ù¤PÉÔ; >¯]øŸ?ëŠNN6’“IJx¬‡/Œ¬]¨.É •ÄåR³h¡³ÝÖÐt"ö bÈ‘‹Ta®Žs±ùÖp>EPwלûáú¨rÜÎç"ýMnî›”VUµ”2ð,D$Sý@·àN€«Ë bXY_%øîýB³À/þßãY}ú™pwÞöÓ[*@{´—ǦG'ˆã¡” çAg'ð^Õ‡bHAWÉò™÷gT«%šŸp¸S–Å»#²T±E»Ó©¶2wŸ‚T‘>‹€átàÐáCO>)¤<ùäáC‡¥¹s"¶@ªš>äÿ?Üþ¯Úõ LÉs7À.9KMðÂçØêð¥Þ|  ñ(dlˆG<» ~ƒÿ×ß|35Ƈéçú#ip' £>“û“¥=ÚçEÀb‚|)2B’£´ ðÏÂ'žÇøÉíU«„ºlá?Œ3{–Ðïœø–='s·xÔ¨ ><0\«[9µdzÁ|ü½—.ö“-ìúĪšŠ6ð‡>Ўɶ®t@—VsSQDUÎÖÊS'òˆ÷çÞéIƒDÑ?êÀñÿ£Ç*cQÄ7i#%'4Ç`ЀÀ«MOÚïÌÈ\§?«^pÞŒ¦ƒÎ& 'uÊü¡¹3ˆT*!®U>¼î†Š`7§Ç7 ­¹…"œÛ$€g `­ªÿ¢¬½ªýª”@6öê«éÓ ÚöL°ׂðÆê"##VW™ x ›Ý"2§ðsî0‡ê> Ï}ÉåA+€Oþ7¢ÿ€/áå#¾´u_‡£{ Ú¦<‰׆ˆLE¼n°¸0=·¼fök¿Ò£-ö´„ø½M§[Þåˆù ȶµ\{óúõ»¿ËQáé÷¿YèE @Ì÷+Ì{*@Â÷»Ev´hË; ¾¥†?lI\6üù„xÐWz`à_ºñ×½- KT{l6þ"÷ÿŒÀ\ýíjŸ)ÞýxÖn{¶ã'áfWä _,:c#EGnÃEžß[DÀ±³õó_då€OÍü2üŸ*n­NÑ.xª®ç÷iŒiMLä‰Áù\·“éÞãÐò¼ÛáYƒ*”‰÷õÚìl£XèÍW Ñ}¶£*"Ö]”ThŒZ×¾‹ïK4x£vq»ûþ|§ùÍšù»®HgJòÃ`ÏëõjƒÆðꓟJ3Sx1«Špù*\ûÞ×Ö‰1màƒ¨*Ýfó»EA=›J[¨Ð~«ÔÏþØPåsº#GTê4`¸Ôñ’ÿhÿGalñ¿ìÀê|wQÀ +0î^£U·¨Ày•¶[ à¡~¶3<¿ £‹…L?Õ>K—•Œý©^·÷Ÿ úqBò2úÀoSýá3úôÁ¾4c?ö§=Û"©€Ëé9ˆ%ýHÜø}ýhܸuúÙgŸyöù“ÇOJ$Ø'þÛúù`q6É ¿#¡|ö´ºþS޹×ëðp  ÿ6áÍ´ICd“:†®d[ë0Q  CØ8À"šäL‹¥Æ'®4|Æ&Ù´3G×9—_ðçtºôËh8ôÑ'ž8Za¾= +ãïÛ*$Ô‰Ët<ˆ—Z½Zã©Þʃ’• +ñB•î +R‡ixOÔÓGþëRKŠÖÒ¬GøPɹœvœwÎ’ÌЇ\èOÑË1 ~yÈIÉ%µêµZ¥R# Úþôç¢ÿ½å'1²4ã8:ñm,Ï1£ñúúÚÚæ†ÇòlÞ :Á0íø=½úyËÙâ­´ú 9è÷t0pˆXÑRñ¾ïî€Ú Ø@Ü@åêL¦ôL@«+KtMX#¦ ´d+Õ²·ÁÊ}íæM"/ž¾~Ó€­&€þ‰€±½ú÷=ì÷½õJ1€2 ÚÓâpåÚuÿðq}¶5$=: ú•¾”® €ãÏ?ëxœ$þÇ?žFìb‰jíÀV=áV_xaÔ® ¶–ؾNh·+wðèàÑ#Gä¦?ùä‘AÎò¢Ê;?2©*Cm½æï6àzm®¯ÌÎ..-¯l¬o¬À§qrc¸íƽ˜ÿ‰Þñ´ZúÅðpã媧q„¤@J>þô– fðÎØ°‹O#ÄúæºøÏӀ榧—Ö´—œïsæ~&6ïý’ñ0 Àå´!Þb`úÓ•ítüÓ[v.€±ØùÆÑ×½´ø.%pòø??yÙGˆˆÜA~¾{èïI›ù±ˆ €#T*EÜ€€E9A>þXƒ÷É€DµÇv`“|ëÊû¾Ó“³,÷´Ûé~ÐY¿Ó•ÓË!ùÞSŽÈ›]•GÞ¾(޵u C'€!‘w3x¡4Ùh=—÷ÿƒ;Ew®Utîü ¯ÎÎ(Û¶\_9,™r*è+ø²œã( (ÞºÓ]žŸÉ;‹N§ûrÓ)f:wît?ˆŠ´ŠîT‡Øe4;wªùÿÌg×.îtV:¢*§´íðÏDÛCsTµ,:?誕ԽS­‹suñE¾¡¡ +ÍçÍ—³½Š¼[KwºóEÞùªH1BEÞ͵úA·ûÁûÝyHY,±£ÏnþôLvæéxÌ€nŠn =áÿ?Üþïý>à€Cù¼;Þ! Tt°I +(›óÌ ÂïØÑ@f 00ðIáâÓ(Ò“B}–ùŸ“¿ÔÒÞ ‹¤ôÑ×þórÖ¿-@àÐsŸ9$æ'Êoyû»õì‹ð(àÏ(gFIð)ðñ'^þÙçß~ûúÕ«×û#‚ÿI)€„ýÔóOëúöê–‘SiöûÓR_é^îaõšS €'”MC€À5#Z­- N¶±f®MÚ™å¨vLj!är#\?ÉÓ¡'9Ȥ²4PbåäìDfýÇ%7T&87¢ àa]ÐÑá*›Ò:]¤M@nÖ•¯ö×Xމ²†«Lõs1DšDÜÇP ­QbR”F20Mu¸n‡ •Åãjø´Î­p) ÈYN>ÖxµY×ù$Œt ×^"*’ë„zC»2ÿéŸ}ñtŠþSë‹ý-cç!†ÿo2'±?€ëIp¢ðÿÕx Þâ¿^(øÝ,Qí±ØhŽßßÄÚÎMáŽß|-&ÆÇsÒiD§ù{ßôâÔíj;¿˜]ÔŸ9‹sgh& ϦêV«Û¨‘¥Ù§ï·Å_`mªÈðr›E£)œ{Âyñ‡)™-¨u»Ó™y¯ÖÔ ìR–Y>5SV„Ú}1¯O8üOE@©ó±m ’K=4²Ûœ”JíÔy@'þ©â¢t#k·«í"u€W=L½b¾h©ÐÛK¼C¡ä­B§fÞSηSEú¬þgu'Æ'ΞÝaÀAûüÿ-þû¼K¯EaÜÈî‚€#ˆ€‹tôó€"£/ëÒ~…~ÇŽñÀå§tlgÎÐ*àºô›>’É]øIÈDÖl…ƒO–€#‡äó'Æcvüü;m:±?P΄à`ÊÁˆÿ_>ùì‹7$ˆèÈàÙgÚÞêƒÿÙG}¶Ð¦6=Ò¢jåè‡õÄ—U9Ùf=à2¾dúØ«‚}p‹¾" pGåPÓ†Qª èÞYô4‰JH—÷HNà\-Ø% +#4ØÀá'­@Z—×Lr–‡ŽúÚžr€_ ô’tQºQ èˆè¸±±F 8mU¢(Çù÷°>_·W˜€[¿×7€5À[oÝx; €¥Ï›¢ï#Þ»+€à¿VtäZðŸ€ÿ•SÐ+ŸRñÓW¹zÚÏüüˆ¿vDR.ý€ÀKÈßn‰jíÀÏûßÏægþdæNÖ(xì ,Љ©ÖÔTðÇ;Àôým"o½2ðIOAÎu<Ö>o½Ÿ5@»{æë»98©Í”ýaùh£ƒ$(³SÞBEækYá~îâ?61%U‘*RŽyË‹!ªjSE8´5Œm^ØoIÌ7ò•çLdµO«Rr„ùùÿŸ¤û¢ÎÉx¬ gÄ“1Ñ¿Ô ùÓ™?¹Ýi(OFTDYK ¥Ôز„~›¨=ÓšhAð¨?—®4ôÿu’€ÿ ¸„Ð{¾ëQ[ãb ãȈòìå£vÆî€:6pDÿ|~f,Ô—Ï)¿Ó-{C²r<Cí}b +ÿàxâ¿#î Ч£=à¯à¿M[ý€Þ³RÖžøÈ·¯K<ÿNDþwýh¸ À}Ð7n˜ô)ðïX@o+™Ù˜Œ›¾¥ xö0`T>úëRC29¨Â(Cd…uÐj„EZöзBIвëJÚ“ë-{§y(Ô{LŽÂC9½©v “Ê‚øT “Sû"w—J®ý§‡ý×õïƒÿ,e§Ý4¨û|œiç%ôSášþ*:Lvs,òR{Çžê¸Û£@¯TJ_jï]ZêÛ×3¦K÷igPÖÜjBm´_*@g¼ªÛÂPDúã +*ªÿ>‡+–Uí¡!OÇÒ§šYš0̼o,áj/®®­Ù}gŸ›Ýqáõ}÷ÃÍûžþ?,BŒ …ÀA}{þÊscC_›<ÒŸ€€‰oÁ*½Ewé»û¬! 6•cTˆr¸'Ú+“µõõÕ••ÅÙÙöÜA NW1ž)`ÏWBü#,cýEä_€ðßk¸Éñø£ÅßÃvã¿ÉïUÑ1£>úô"¯ót`Ã;0xÜ×Îø¾œú$ö;@ØY€¸–ðÿÕÓ< 0þCHì¢ÕÛíOdcù÷Ç' +OÙ‡\6˜urÜçaÔ+¬mLáo%0rfÆõ¸ÛÝñ|ª{OÙ-¡\ MLp`h«"òQ„ÿh¤À¾?C¯ÿ¢õÁX®Š¨hGªƒY+Iÿ7Õûð€§.F²N6ÎÌÿaùÄ‚ÈÖèÌŒçEùücä¤x¦~ÏäïÛÎ=;?ÿ§’3­?i•2Jv‘ùæÿ£úÏ(ŸÔŸïVð Л €€në—³¬óèÀÎ~) +âÇ9?3:k§Ã}€?Ñíö¦~xôã‚ó€˜ ¨´ÄÿÝ#=K;J{8€Hì?„8uí[W%è Ÿ¥w¾sõ´~öÊ€4¿xà¾lþw_ @æß—žm‹è¢÷1b•ÃOHÑ-« ËCåÙ€Bˆ†Ü¦“°%¦br±µñ!‰†•€d¢vEÃÐ +:Z3ˆ×Ús!©câJå…0Ö dô„øI^”$}24à°‰ê8D@ü”QŸjµ®šU²jÎÆðÀÑáajD¥¹ ŠVÝ\'2nT)÷Ü¢tÕ‚o6¡6Õòih –ª™Ê¢ïwéZ¥ÚT¥®òjºVîsâ(õó«V‡«º­0ÿè‘£CZÕMW]éP.?pÛ÷2RïÑâom…$­¬â¾k/ž¸˜ëDñEÔ䣘 Àq@C¸Å_+wW7Ö¤!äÊk šúuПûˆ„ï>@8î¯oŒŽ†Ä8Ï +‚ǯ­®,/3—âÒ:)tú†; *é^/1Þ-绿“Ý|Ë€7,Ò(€0¼mßÛ<‡¿×¯½}íú›-·+Ã?­°àÈ•ÔÑÏ}Ng*@€øoxûd[øßzŸ†ùé­¯k4Ø8Ï39ð1[âÿ–z¦|%ª=¶[ì öƒ,¿û.³ˆ ìqÎ'Ü&€‰"Og„öû„ñ†€œÇŸã¨ +UEcŒžénøî6^Èç[Ê-ÑÀ…øFÑÌ.^´`’ZäþeæOßo´ÞŸ)pÝE×ð޳@Boù W)r̶Ía3ñÁmÚ ZÅ_4ò–gÒeÃCY!ž?/øLe@5JÒå|ÖȫͶ•ˆ/Qðl‰P=fÞïT‹hÐÕ#I‘¨È6 úŸûSáßüŸùÊ{$ó9€]g+ƒøÿ=€OÀ×Äpï.ÝjÀãb&€ø2 +à ýÄ(¦)<–èÿ°3•/m‹¤?Ò~ÛšSäúõ7¯áмÔHø'pè¹Ï0`‹ö)À··bgض>©€È?}…ùÓWß¹uíòóÏžÜÑà™gxþyW(yü,þØ Ó³1=ÿð6Ò’.¬û˜ 4Ä,;„Ž yGÐʵ Ëmk £ÅU¥ÐŠø×seÙ‚M=ƒÑôÕ&,Žmè¦Ë•rgÝ…r’ Hº&"¦ê÷Q_Òááav¨xÑQTÖ¾ŽHÇPaÈ”jåR¯¬"F»LU,–>–6‘ }5å\ökW Ðs)d Öµ™*Ë}áã:u>‰6×A·c•…ð>¿øög8ñ¶4Ó݈¾»¾4;½°¸¼¶N<¢ð".ðéØ}? 0ˆ±â°€ƒþ’öâôÚêòò +y¬­¬¬%ZG9Žàîê7ÑUÍ Ð_{”ˆ&€»rÿuúÆÚæêÆÊÒÒÜôt±´J‡+„•ØËéÔûZ„Þºy“‡¼vãÛÿö÷¶ÏàG¤¿Ød’‚îŽåµ7úû ÿ´Â""øç/2þŠpÈßàþ!þ{Î_¿ýõ¹\NL@œz9ú`Áþz{øGÄ'Qí±ØÞïä%ìμ×hþÇÛ~p?6Ü +×Ó=ØÀÙ8MÆaعú(zÆÓàœ«3c + ù¿¸ÿSÅØ`ÞÉsfÄÆ²ú˜ˆ-Po4kL dæøøß¾~úùãÂÿ³Ï ¶GÊN€©€7¯ÇïÆÖ§´ˆÄïKiÛ" ò{ØÐðÐÐÀ9Øb“ch{¤0 z‰W(q–·öiÆNöó% vqƒÜìfeH |HÞ0 4›ƒÏÒz°’£ùR––C•¡#ôÄþ©4ÊÀ€ë­jë¨|}­S‡!‘]0pôð‘£R ®œ¯Bj€¼)þòÇTÍíRÝ8)UªéÜ­]q>ß7HWäú“J_”£"S +)¯ŽM%çÎ=‚ÐEÍüâÛŸ +|í{ÑžvÅÖÕå…Ù…¥åµµUyà2â÷RÉÏ—õ€ŽÐA@›¸ì î#-­÷Êh}uqvn™a|+ sË„ e?G€Bà›h¾Q¾Á3 ¿1ŽÜ½»qws.€Ë ‹³y{ieÃèWJO\°÷ þ—#õv}Ë¢àñ-Œÿ² à­·¶ÀÕ+t¸Až7™`ÇR€‡ø‰ý†¿W~»\•¡/_¾òú•Ó'i yâÿëb|ió_oSŸ¸Ezaþ‡qž)xòü9: ¿ÕíáÿÒÿøÕ­õ•ƒ¼nÏ­™±ìû·î€'þà -Ú€°ïbÊÀ°ˆ“(B§ÀF=¿ƒò™|„V'ÑÀÙcÇF±¦w¥þ-*Â×L5‡»TÄ\=û*ŠÊêW":BÃ9w^—¦ò¼ÃS i^dƒ8÷YŽ ÜìûTð–›ÊSøä¯á­™b¤èº(Ý rF¹wB)z&îÃ":ï_rzk +JËèƒà•øÿƒÚìã¿è‚Ë.(Ûò ü}”›²sÀ +`ß~~ÂB |šÖÿcOé·§zq€ô7ºÍ¶"ÉRþðõ›7¿óßÿ·ßAÿÒŽ\9ùìóߨÖqðüI†’ƒIp?5ÿ—à‰ò»ÏÂÛè-ýßa_;jÿúII+lH/¸$0Ñ.€Û ¤´bM´[ÞßF#‹¤ŒÓ+ÿ{q:o +ðCÞåœ@ß¿Ag­ÐgŽÚ”dÊQk›ë¢ŠºóÂÀÑ£: =2ÚÔø:8ΫòCÔNUPõ£‚iY¢X»9L¢ $N•RmØËTaòà¨ÖyÙøã³9Ù;\7ÝãÀÿ“ºËÚPM)k»ð>ƒí4ÜýpS XX\Y…ÿôÁ»w—'‰õ÷=e¹ÅßÍ»@¸òaòýû8çR{cuea²½°ºqo}iº½°B0ÁGïÃmJÄ¥Ñô€çwïßW‰!èH`c}cC•Y\š›žœ^\£²ÚŒxÁž¯`åîïëZòÿ= €“×n|ç÷ˆü3¦àŽ¿&Ø.{S¨o¾-ÍþЖƒy' ð۱¿ä÷›ÿ¶“<~8ú€v•RíÄ¿gLïø°ˆU×i8ý|tdºOL + §ž-Àã>¿º ËyµZ·;ìbhrwý ~À%p‚>VäV÷sWNäÀ'ŽUκ#¹hÿ³‰n½ª4ÂW§lŠäÌÃçôr@ËN€±¬Zœ´„ÝØÔÔÉ;Õw%ìgƒZ¼I©,]á¸Õyw«":ÜLê@©…p? UŒ6”‰ÎêJˆÐC¡E ö%ü{ª÷ØX6Ò$A³G>Aù=›i8À àMw)ÜÑ""˜8W7MµÝªd¾¿ÿÿ·µ0 YŸº8°5À¸g¨©RÔŠ@vt¯@êp®ž£ØÒh}=}ìðS’=âü}>dÛ#Râ?݈¼“"¥)Õ×uÈ=’úM¿\ ZA4`ÊK¿rJ¢åðÍo~çÿýo_=}òø3DN=8}5:z€èðæõk׃þáñ—_¥KÛàþvôðáCO<ñQÁU +àˆÜçDXàiP +|Ú4Õô_LÕ1àÊwPÖi ¬õ)`dj'(%%ǵDQ(3r s®hÊi:œ ŸrÕÊÑ£eà‰_Ý=8µ'd‘J5wC©ífG|HÇlwŠ×Nê©Uí¡*®D€*q–…H:BÕÈBìÒ…ÚHäGIË–!N\­'ÓMVýl›mn7:ï Ì"ë]F,.ÃBvÐqÅ­èë/dK Èa¸ Ñ_/ûõ¸½¶4'°~ïîÚÒl{qÅ# +à¿Ò=ºU¤e}ú¼éC(þ+?½ P3úl¬®­,Ì͵g—V­ (Äq€½Mÿ•MúÝÞòÜ èëæõ×O?eàø_@°4ã_{3,¾·-oúû ¯xÉËÏÄN_¾r%¦ä0}Ì}A¾4š¶ÁŸw¯@2¯ð‡Æy–ž °üãûݨöØl€d-[3ì?ŠÿvGíQL«Z÷.@ô¾“?/p˜a€gΞ=[÷lwÊ)ï6Ù„üÿ&þ1“žµ¿Íòj£ 'Gôó)ò›WEf¾2Scô*BÁ¨€8#U„jÈU¯¶SýÆÆ$*.ާF%|Ã$ðí'îdƒM*ך!ŸÌ!€˜¿àD +jXC´ +ùï´$‰tÄH>¯ŠøÊ €YM!Û­èñFªJõF”÷±ÿGöóÿË€¨Œ^Ó1ß]¶"ä;‘Æôòû²^GHýôB¼ÉÜ{Sÿv•cÇ>)êóÚzŸÙ5°-À¶#<˜ìëÂù7z©8ª•Z†½…Dˆ¹ÊúÌôç§ +ðÍo~ó÷ÿ÷RàÙgRàŇúp'rxS?šoõ2Áÿw‰¤¯@ˆEòL?úį?ñk‡€Ó§€SÒ8Ì•Ú0×j8¾Ú¡"ÇøàÐJ }N´G kíÚƒM“•³È4¢Wµ'„€eƒ²Ð¦KsÝì„«*ª—¯G–ð)œöK€°ÃÒÈi|”ЏB³Ë‘QQ޵vÑ`è7ª°'ÞA}uÀbÆ!K•‹Ú¥W¡œ|àëÃJJÉÒ€;þ/Ó-ŽÛ»ÓŒý-ƒýù‡w×,VV××y¿hKD?!õÁ}:ï`ÌœºYð( ·&àµ‹Ù«Ë Ë«w?ÜXYžp;ÿ!îñü NeÓ£Ø÷Sì ÀY››ëëk+K<ÃyyuC‰pý‰Ð@±—ñÿ¹îßñ.íftîðuGèêì~ýV6ìˆàù p€`yXö¯ÃÖB×OÿA(¼`Pø9ãRè4×àd îÑoR9Vž(®¿ß,®–€äfcd£Ïððoа`ÆrŒCÔŠBëö}žV¸~ØG ïÓð¡ùx‰&@Qê#G†t *©¡| .8zÁ©4à+Ò ì{CùZ:D DH+Ô¥sWÐoç¥”Š—¶HÊÝ`Ë…Ejê«ê¹ @*ë(WàÛL¨ÝnÁyÁxsci°=ðyíÅÙ‡Ú÷iægrñ>4ƒvŠÆáÄÛPôÛ—1’œK l¬n®oDFn(Pr»þ2¢ÊÏ- ŒtÎ.\¿¶®Ü–‹¹¥5Kƒàÿ¾–½ëÛÇdoݼyMà”þb D€’±ÿêuXç=âµE|Ó¿·bYÀ;E„ù+Ú8}¼œ ˜øïã¿%üüySÓ‡Í5ÃÒ¹ÛG`‰ý;,Qí±ØÌ÷ý 7Ëïî mRv½2ž·¦Ò0@)€FÖ¨ëÏQÞ£øд&Z¯‰~1G:CY›œCñʪá•zŒ¨×ÇÍNÂ#½Žè»Óà‰~A΄Q,*¢MUD€Š™4…€4="L1ÓÒkæöû †,LƒY[yP•ׯÏK$æÀéŽèi¥Eè[àýÂé^w2%Úa)°åÿ÷ø_šj:ÞÝÓÿ´«ÞÇwH´._²(Ç\  S&Γ@vdÀ9$@½þeÖë¾úsçˆÐ°­ ý…î°¾½­½¾që €¯;@ФʨàCšømæØÑ€QR™ÈóßÅý—à~Dÿ½‚¯fº<Òð÷¦'>ŠØ5ðCŸ34KÔÓ±ZbT „…$ÐTQœnŸX'+çDŠ'Yê`Ù„®5ööG"óáÝ8U D¦I8pD_‰Ò8ôÔó ”í2ø0lÆÝ°l¡~®‡\­ÔiÀçrÞçÈÆ®›tlI+ƒR:u§d%´pà×\ÿ¸½;,!²gú§ŽyÝÛX™”Ëî‰7tRÇdý&· n»ëŸ |?< ”ïƒ"þÝ úß]§k ¡üµõ5ºšÛ>DøFÿôIDATI*hÅ1¿9-²Ó†VÜúp÷à «€Íõ•ÕååÅvgyÖ%tŒ`?óè}ì-qþò©~ª?v³¯ "=Þ?ôê#þ¶•X÷,a(€kWO¿xüäei " ß˜Oð÷—Í +ÀUÝi„]7 º¾~yk€ô׺-гDµÇv`3Iö7q÷ƒfÞe^>›¼Ô^`BjmhL <8¹Þ8W9[ù¤þ"õ—¶‚»“ )õr½u +]ÙbäVö«wÆÆfRaãpßÁšÛ[­ùF×á€t0U$ê¡3šÚ9•ú•a]yÎy³‰DhJ†\š™¡3ßWfFG”¼3#]“© /ø£ÆT¨à"âZ©QK­N­ È}ŒZÑSEúlb‚@_üßbf‹ÿ!zòNUªåÑþÜ €4 €€«_vˆ@êHÓ?ø§`_ ;²G Ë•yýÜù T„i£~Î +``G7€-‘¾Í¶Eˆì1âH4¿ùè€úmÿÀ­o~ó;ôpà€í}b&Àgž9ùüóÏŸtYoê7E?,éäaóïK²-÷ß~©müÇØÕh8rè‰_{â×áÓá£G>Õâ—Y Ëk}ñ‰á~±WLuY°ãOà\pt^ ¤„Náñoè«¶"wQVdh¨ãPƒòÞ €'>J ÀSQs=Xj×?MwÔ%¤€^–€ÝeXúŸ³ÇÏ…‹&€´ÍsuŸS•¨(Õôù.MÙdžNQޱ[ç(ëaÕ½—Îoð>‘=yè£nØ%Xû_„îÝùîî½ÕåéöÂ"ð~ˆ†öôжDƒë |Ó…Ÿà>è¶ï¾¶Ê þÊO[ÈŠµµ ’ˆ 7\þR +yZó.$qòLBž´²´0;½$ALB'(#Woã¯B¢y×wi)ðmñŸY€RàÛú‹ëÀÕ ~ðÐ2Á~×7 }žÇÿÒàÊ5©ðè`à'üo‘¿5U¶ß$Iâ¯Uç^þj°þïT‰jíÀPØÏ„ÎÖLÖ¼ƒóœ# Îw4€gÙ$‘ûòÃROÓ‘Lä2ý¾ÒúAãDµùžÛ„Q²gfæ‹÷ƒ±a±\¥Í˸ú©—½CïªH­ Ÿ·Ab×C_$AøÑCª ûǨÈüm¯3N_»§èÊ/›oŒÔE]Fp=L5 !2cW?$ŸÔom=kuGóB.¸Îãºû*2U#]U$î]]ì}Ȉlçÿ–ÿ/©ô +ßí¼Ê<Šòÿ[€(Ÿ˜ç—&üÌæm[3èŒÈ*{ÄHH €Ö¡¿ÖÜ+"À' ô$À;7Þö_èë‹Ðºw-yø)°{~¶¶~¸ÞÚŠ”Þ?öpà÷o¥Qô¸uëê•“;û€ÿÇSTè͘pKp,Í + ­%ü' Ðl7štWHN|}[ššpÈ(hpÒN:ÈÓ¶ÕááÏ鿟¹4µ@HÓ( ¶²¡øÊú Ú´B`S‡£œH©ª>üÑ4 +à×hp:Õ[)lQׇ"0Vo2¤.á‹+o`¯5×és*JE–}H¦:¡JTÕˆ³Dõ$kt.Ÿ2p Yà >¦û¢[¤«a…M½¸Î €ø'úÐÀΖ¹exÖ æß¼»¶4·0çÇ»C¾©mÞz¸=ÿ »»»Ñ÷¤À"<ÿúëë„6ÖÝ—ðÞ]åÿ…tè®÷ƒÄzŸà5JPRÿµ…&Ñ)œ¹¾¾¶¾²,0»²N± +ÎÚÏüóˆwùǀ㧮Fü'zñÊéRx½ì@¸ciÎﲌU-ˆÉ€µçô‹ÇO•œ>}ªT= à¯RD%¶ó”ð>ñ ›"âÿã&€L»p3Fþ>¡kñ +wb ™¢@L•Û>Áô=ØÄT13q†©€„ÿ3õü|æÞw_™ù 'á¿]jºõ½ÿƒÒ‘näóY}b&ÿ ÏѪLS¶y«UÔxBS=<5BÄ'üiˆõ–ä…GË»ŽÌÔüïüE£1’e"2µ5?C'€³•§UoQo¢È»užNìÆ%M¢Š\ ä/¹PÕ I¡&–D”ôÐlÀJÿÿ¾öoYøöE»:”•³ +bä§s“ÿ_ó¾àšÀ0ëóù…îü™þº!©”Qy•Ýb)Yÿ9—çnn   §Äór6ñ~ë‹è/XßV_×âo¿MGÀ‡#YŠÈb€î˜L}€ß>ý|Œp€ÝfŒyT$ÙèM¤I6£1{;"[fØl™PtDüÿuœk™@_˜ ‹Úàðs¦¾^¦i0.X:t tïà¦Îrà<Ï1XDIî=¿ArP kI¯u¤‚’$É5ÜŠÐp´/@éñeÀF@±½WVp™¼·Ehð¾m¥´:†–ñ%¹Ùƺ%Bo%mÕ›X3þ{}t‡µG»wXÂ~ŸÁ]7ï.ζ—–V×V×<•? tá;~¹Q0ýÂî¯ÝF¹¸Mï}wÞßÜ\í. +Ús´%819éKùH <¢ßÛˆ‚(1¢]wïn¬ñ0àõÕµ? Py9ìàR\øÆŸÅžÆÛ^À}úšsKŠžëÏâQoý9ü‡—|Óè/Ïì&€¾>ÁÐ;Eý±XÑ;U¢ß(‹uÄ úX`;|ÿCz±LT{l6OV»Ÿ 'LáËü;ðŽÇÿL•Lö1¨çß91VÈÿÎÞ³­ŒN $¯WëüÏÌÏ‹gÿb¨c>»oDƵ6|Ä­™–üê;yþ>9cÑÏž¥WEF;B:Û ´T!U$ùÕÍæ95³½‹VLXHP g¼ñ?ÿýÑö ÍÑE ×¥Zvxõ[vL?]ôTlufíIVF=­¢úÈŠl—SùŽøÿ–ÿIõDóŽo¥m»ÿ?:¶°Z±^¹¤ŠÐ Pþÿ<€Æ–àúcÀhÇ.È" ï°Ûßb&ƒ0qY€!B8ï˜Õçá(ÀŽ€ /úFÀ€Ý#}VF$Òüwþ[€ÿý–€ð/{T™üÿ“߈,8ßkþ yȱ’ÿå–‘¿‹r0ôˆÐ½wé`¤é[†7 ñ‰8qÒ,åc†j7’@,Wí±ÿ¬,H‰zÔY'ÜpœoXÌ^‰N NSUþ¨ª'ã‰Gb@Šð ˜>à™Psª¤*dWK¼à£ˆ@‡éÅHU‡*rò©(U#9ï^`ˆÎŽ›¡Ì”ØÕ×¥§ô”•K}ˆÐ†ÁΖþiz&ÒŠªøà›ë‹s³ ËLD^†Ç÷ÍíΛ΂uù€ßÐ ¦³yá\¾ûÜôìâš{ö) R(+eD¨À§Âr$v<û~ì#HˆnØX]Û\[]__Yf€åÕè@GA²ù¿ñ>æÀI €H1-ü§•Ù¡y ûÝ–ú‡—úf–@yú6{ùÚ}úä?÷³üh`¬ïY ~^åúëÛ©So¨úñ÷þUΓ8}r+` °¥<À³Ÿ`Àcð+›ˆºßkêR>Óëf¿ÿÞy÷gæ»­N§3Ó):ÝbæÎÂ5Œí´Gÿ#ïüE÷vçýîÅDå˜èF ™)îÜù¿»¿?_Œ6^lv‰«KK|ÿ}yÑÅ¢ êšZæEçû3·g>(ÚÚWwºEÑéÄóx;:ö^§3?Öyþ/Tvѹs»ÛÕað{{¾èüàœ"Ÿ¹›©"]Uä½™Îù¿xÿ½ÎÌm&Úét~0÷/þ¿óóÂwj´Ý‘Ò¸H£5?ÿ}-g²â|½ú¥J^ùܱ3Bl1óAó] +.ît¤$üÜ`]y^¼w[itçç?Ò Ý×ýèÜ.T±ùÜùA¿ÝùÁþ÷ùãÉò‹ïÕ‘¢ã90Ñ¿Ïÿo”Qz›@<ÀCòyñŸqûc!ÐbÜãj5É«¤Ìy)€‡bÊ´NÅÆc‚em§&¯E+À1€P‡Åæú™è·¾€Ž˜ïîýˆØe2y'}ïzd@?7êp™@9€#Ò#Ô•Š™÷™ÙØgv7Ø2cGÐô4DbÀ–€—¸Ç]€ÞTsXêu ,Úw¶GMšPDB8ôMh<£”òãH+wG8_ë.×ÀÆø÷ú„év«À§¶"®¾ªâê‘V%ùb(ѪCeë"·ð…«–Žž‹â\}q¹Ê>®M“XÂQRÒ¸ ö:ãŸÛ,c¶¥Oí> + ý«ôLtÆÿÙ7ח榻§^ï`.TNx÷d¾`‚ß»"¯žÓBL¬¯.µ§V7=yºA¨Ïßçè|vpì.R‚ؾs óxÖÏÞ`.ÀÅÅé¼½´Æ0@Ñßî¿OÙÃüw±—Ý|«?ð{< £ àwâïŠ ÂÜån÷÷^€«W®\¹vÅ}xÉäøŸ|æ¤Àežxúô)ޤ~‚hcŸE€w=d!⇅mñÿá@ÏÒ@¾Ïø«[cô@¯Fc¬íaó26XêSóS?$e¦ÏÆ`Q4r7ª7ǪÕϦ9ôÈ‘áJµV÷ó=y¼Î¿h4rOYª³³¦óc Ñ>—Ñ®V_®Žò`ºòØe»‘Íž ÛžŸpμÁ~¤xY*[}y¤:úB§ÝhÏ*Y³Ù`‚áT¿š;ÜMò´ò¬=:ûrGå¨Ð*Þ0S™Wõ[%gIu–TaLBûÄèhu”ç•ÈjQ‘(¬Y¼PÐàÁ£Ü<„­¡¢¸U»Øîþ¿4OZÓz¾PÉo§‰þü7õeÀƒÂ(™øßUå¿ôP ƨ”4 ÀÇw‰€ye‡¥°DÐß%~¹?ÿŸz¨óHÑ›;$@_€G|›ð¢/NÇGG¶Ùö@h€Ý"Ñàñßú”€óDþkðoH²Þ8ÀÄF[@߉%2ýbÛOÜôL{j·€«vàµ-3Þ’0ÐQ»ÍÑ@8ÄÝò‹¦`,ÂGgPF´—¬PŒ¼go’±e¼e£s8PöàRà¡@ô°*¡*Ô SÎræÇ†>‡×žúX¶pTIŸˆ wT5Ÿ£ÅV*'5ä{ÀKY r†ŽZï°g`è7B ” +`A¶´´¶ŠC~÷Gz&ào·õÍuð ðW§§ç–××^!Øñ}Üiü¾Ð ³ïž¢¸ÿ]ÙI_t¯76äþÓ¦°±<C÷ ù4ÉÇ<›J¼ïÈÿ‡wïãý“‡s3æiK  €€¹v{qMu%ë"û˜ÿCïaüQ•}®Küžzð7{ã-·µÇÕufìÔ_Ƶ×ù«í_Ó¨O^ÿ’×ë_MÓã< H*ÜOº~í +ü×ÎSb|ô€þýèOëÛ‹ý€swDüך"öü‰<«å3Ÿð+[ÕçØÿ%¸5ð5ó|2oŽÈË"ܲ¦­tcJúª¸[e" ŽZ©“€N‚ôÑ“ûFçü1ï.Žeõº® Í<~Œ%1~¤M/=É”fÑžFG¸"Ià¢çí¼YT›m2ÚqKú,†@ìðÿ/BÚÞÈ»Õ!Kdk‡ÿ/þ[@cZëá´àVi‡nwÞ€PÞ­œ1@<ÀT—¡vÄdt MGÕ‹bz +@Ç­@|]Ž:Aý›h€~ °-c¸uã»Ghìï(ÛH€Ýû8°K€¾yn–ŒŠí0·Œß›Ô°¯à7™9—ká%â¦ñs;h×ðCàf$–¾®án¼‰¬þà†w€¤iô@xùf¯Ñø9!ò[!Ì^ƒÉÄ%ÔCÐê¶QщþÀ}”—MÎZ’–ÒØmàÃQ1"ª65rÁJ©™HÈé\œ³e1tŒœ©Öœ7tŒ›&ãQ ÈS ][Zœ[\\”X\[‹@¾ÁJ0ÿ[ô=öø§Ð?ÏêâìôÜÊÚúêºv³üËð…ë¯DöÑùR:ÃÿnD 6À÷Ý»tÙg g®­..­2þ_ ïê~-žæÇö¦p¯/Ü|åp—€$ÐÒåz © F®,ζ§—˜ +˜JR›ô¿æÑ¯ø»ØÃéç€püηˇ2ð;~°þ²DVÇÄ® +÷0_®¢~|õÖ÷ˆÈË¿ü:- =H~íú€øoÿ_„?åý§ÝI0!ûû”’lîoèdZÞ¸|œ™ùsÜ¥€Øÿ,=G~u+ŠÙ¼Šw;í<ÿà/ÞïvïÌw'«Ý.!ù¢Sä„ÜUÛßE»›±ï…R]dLÝÙ³õ¨Ñ|Ï4þáÓZÝb~ÆÁýÛ™âÒÌíB¢`ªèÎwf:ïÍwš£<]Ÿ”ó"ÙT^4µ©"dïæÍÎt»ïßYè4ßWI²ÎT{**R¼;K¥T‹²"æXçýn§øã¢ø€ø´ûvçÎØU¤[LóÚl·…fšó[xàõìüDV?[/Šl$Sv:Gù1Ñ¿®T¦ÂÉÍîÌÿûªt­ygF •j]äí–÷ñ¿ßÿÏÇšÇ[Ñíñ˜à`§ÿŸÿ“0ÿ'ü ¡þ’gx/"µ80zÀ…2°K @â'kY„QV¿ ¥À™§=ðmûâº>áÃó׊mpÜsýîØÑ`÷Q!È_yîèàgÜÚc€›)@'@g¶»6†ýŠq†±]rçÖW1¿œ~íEs…‰fX³Gˆ1CŒÈ$6Kï×î;\x´(ÑÚ"¶í#2\ÕÁ +m‹¿>ѹ™±ÆêöQO”€²¶€Û"F0V|°O2'þ:¤:©Rª ê„>Q,RÀŒfl”´9./½¥AyúÚ#–„ÿÅň™eN§ ýÝo fêK^{±°¸ºº¾¶zwݨu1ÊŸð¼¬\¸`‰U,eM+þ¦œõ…©éý[/K ÄwW?ÐnW„S9Á™zðÿ&v:}\"×QƘVpÉSÇ„‚Ä&ìcþ½—¡«o½uãS'O_¿õí¾€>ûÿ³÷¿m]Y¾/š6vªâsíFeGy9)ÇU­Ä²«Uí6ÔK,Ñí +oT cFì´ïA½ÊRÚj5pò $võrpõݨ{ßTÑ–Q(@‡9M0ÍÇ@Ò›ßò'Øû¯¸ßÏwÌE.R$e;ÙuÎÁõX‹kÍ5×üµ(-~¿cÌ1çÔë°:·š‘bµ7Øï…u! À<Òý¿¶¶j @bóо;7=ëõ€í@O¿@Þ§±ÿzx›Ë[œ•Q¶ÿaàêòöÂÙ3¢.¼´<·”–‹§o¨â訠•аR„£zg>Lÿ$ôX­èXª.2 +`!ìË7t»Z½ö À@Üð(Œ0œüèÎWÕke»îÙ +FI•À„ÂQ5¤TòT¼á¡ŸK©¶ÞºUýPj» +þß=7 ˜J…V¬Ò…oª,-ð‘"Ô0 {7u×Üç],‹|¸+–àÖ©ø¨¡T¤cB5Äã w e–Þr )'å„þo‡;f(Žô*e鲬¶ˆ êÿÕ@¸ DÇBBµôzj“«õ?È  , +À”ÌJ¦’)^ɇ@š€^TVñLƒÿÛl!þmé‰ïÛðÅÖöh @È( ”Á $úEöð(€>ýy¶3 Ù ÿù>zôyåÜgÂuÆ óãE¿ÈRa#Þ'h~ÂöDüó-!*º‹µ=ñô! €AÆÇß +øÃ```EÛªè <¶TI¬ß³‡-žh¤`„€6൞òIKmï> ÔvÑüÉyÞ\ˆGöwðäÛ'‚DDh˜À›§çžà'8]=Õ7êïd´`?Y¥QBÕ—? ®F õ­¶ö÷öp°(9ß±ÊGóö…¤ 8˜­K‚*U^§n·Õ¨“›Î€Ã#&J…wš& +ÇGEº€xFäOã`ÎØªïïÖöb365CN¿'Äï–»®¬n2€èx 2Îí¹ÙUzéx)ðÛPØøßÓúûGÎ=ø·¬ml2Àª×Æ`~~nŽCÈÚç„ùù¢º( +S÷-’WuòkPTBµ—òÌ‚jwº,—–ß/‡‘»\Ý]¾öH@jE´Š–JE—v”ÿ°úûr±º0õ#€0€›7Ð\E„X·«)»=ú%Â_S @§Ý¥*ËåD©™ÆÌjAá0ï«ÛJµ„^Ž‹›ÚÃÚ:™úÑ -»Ë» oS­Q¶äÎîî5û#}Ô°Ÿg‘* âA„uo]_¼u§R¸ó{’pÓD¨Œ+Ãûï+ @˜"€î~Cú2Zÿ{R{ÌvÊ¥™Š¿=ÐÛžéÿ»`gâ‹Ô‰Öêa< @€ ð‹‹ý>ýi¨>€¥%eù ÿ=ŠK}0`à 6߃H’að÷ñ­xF ûz=í°€°|*°þAmÞ^îÒ׸½õà³/¶¾ØŽNýí­ûPD %ô¯MNFXòø¯èÁyÆûÄ<Û™¥y @þŒ¤ŸÝq:€!ÌÐë0ì{CËõuHfð-A"é-ŠÓáµÑ9° Œ'ÀÈ16¤Ð‡ ec0C´¨Ãðâ©ðSð†€ŒôPT²h€.3 g±Ä*|öãã§~®è[ÏÄ ÿä)I$zîõ$S#',ã‡-{ÉëpA’ø‹äÅèo'€Nã`¿Î4’ôUú;Å•_M)Q…ð}èp[hö&î÷BB(ð‡mÖòƒô?¶ß9ìšø©@•¥\ÊN@Áø‹©H4| +Ž"$‡]Y¯ìíí¹?k7p’øÿx’°à¯À:€¾@LÞ7ЛÊÞ³ÅÞ ëhò¨ÍМ÷U½zësW®ÌoüKš PøÂ sþ¨sþ³*F0H”Yû|rìõhõUAþ…³ç/œ½8£·=¡ÚKyf‰.êÓ„‰ýðߓܪ~S*ØP-Œ¬z @·ogVéËÕG+,üæ[‹BŽ›Å7”âöî5´þÛJ¡ €WXcàa×üWÌî£÷ªžPsiH¦WÿX*2Ãg Êl’ÊHiȇå¯wª»¾LðϾÝÝ‚ÀÍ—;°7Š‹‚ºÅ·Š7íÞPöRù©t‰xˆ¿“dO¯6 +åß+s4D¯ðIÕÿÿaWh)½wmï/I_ÿßUUÎDë2 €à;“Ä,×.¦>€ô…šx.@‘ jNËÅ·ò6€¢Y¼ €þ4·ÿ‘Ù™xŒA@J3€7ÏY×-mÜ÷@{«þŸùD~æ™·>s?ÀŠäyÀÔ´ëçh”øŸÝÙþÍÿûw7™h}cóáöüô…‡ôõºõp}uýÁCú¶ö,x5þGO”°IÊF|6€Ã£Îa»+P2/á hðíãXk•ÐÀÀ Vâ$¶!‹x:R¹ˆDKŒ'ºE‰˜T½ÒxEÛ(Z. œÇYÎ2W!êþˆQ#|´Ñó° µÞ-¡RÒ£Ç\`­zŸÐ$õô˜ð~îÇO!¤CL¾}ªÓSü|s} €Î€ žEé/Å_@w„@D®"»È 00·[u¯ |B`UDËTÓ™ +ÕíÄ»ÑtÙ@ø–:¦DwUF—ž±‘„cS¨›à|üe¢ûŸºêS)Ø8`‹yÔjÔökûÍV—¶Ó0U³˜´ùÅ/Áœ·?Ý\•¾¹|ÂMØ\³À(œ-ö^X >ßÇL˜ `73ðæÆü•wèØÈ,¾ÁÁ'΃ǹ_lsúŒ´Ì^øÿu{€œQ.á?"pá¥à¹EÀö ‚É»Äìþ%Áýn©ô]éºà„=£ˆ®Èÿm§pkáG?zsaaQÈÁH³[·nï^­HW"¡‘ÐF¼ÊЩ«Àÿø þE¡0€Ä¹nˆˆ*ô£¥÷þ¬QŽiHÊ&»!ñ'5+5 q¥»ÿåþ t?¨©Ø½%R¨ unîâõ…·n”¿Ú- .Vbžá #Õò×…ÊWƒ A³ÚŒÿªÍB2ô7ôOúúQ¯ÉBe·üá®µË Éžþ¿[ºÙ÷ÔÉ­ÍæTž`!opGK¹ú€½ + +S@OŠ 9À !zòÕî£Güæ¿þû¿ÿûŸX÷™ofˆ¤^€m4x!ûñ›%Ýú<2|üCÒ­bS€Uýlù¿Ñâ{Ÿàqðùoþîw¿Ûœ_ÝØþíÖìêö¿þëoÿ?[«·±ñðóÙéÍÿ¯~ù>߯ÜЯS¹ü#’w䟟HÀ³ÐïrÏA`Iœ¯7VëÑ}Kú0é%ö1YÀÈ ÿ­O@e5¥0jä +y!dÊv¥K-‘ u?yâ§’œC¿?-TKD,˜ÉÆ9Aaì–€rº44òXRë•˜æ¨ pšÊ•- *Å©…"6©)ƒ€ððòL€•Ì`ñ•K8<(Õ÷£oÉ»×h6›înWVþp¶¸*? ¢šU”|¡úsº@Wþ²J/¿Ñj«ìv“niû +u¾Á`Ò¹|}ø#øÏD3Ì%LgôéPPßă֡î*›¢ãûš$é?y²ˆ|ÿ”Þ;÷úõïÇI¦õÀ9Cu××77Vg= +ÀwÁ1€»'ÀçÐßüÆï†…!Y ú’~Dú‚@OÀýØü“ó¬€.ûzé‡ZF@›5z`.D1›o·úP¦­w+ZiWu&JLÕ¤1 ÙÉ›Ý +V »Ö»iš`˜4Qúx(Û\)ŽÌÜu!Rö¥““l€½[Â}[h‹žIÙ](•YëO—"X¢¼hÉÔïYœ¨ïàh¥ Vs€•áQ~XIú“ ÷ÁðnKä¡Iß½ŠÂ¨À7 •Qª \&ÂO= ü?¶9žÊD(çÛ£o»Ýf³AðÍŸÛè~ØmƒðA²GqùþK¨ðÃ#%„`4è1`·Ýl5DKj»õðh< ÀpФã‰Ãç’=ž +h›n»O·6ÖEeÖŽ–œÖ?,}phçtäŸ 'ÀÕuc{Œ@”"R¥óËô¯s ð €^Dö°`xÅ\ÁŸª½”gêg!C üc«î|„ÑxÅÒ|˜@¹šÀ› ˜Dt €ÀüB  ¤–Zl L}ú|´ ÀqO¢ +þ€vðû`¼ n·´dTÕ'5Ä ’R±MLÿèÑ{eôi* UŸªv¯±Ä)€R¹]¶£X·ˆà­ë7« +ÂJ Qað°Câû(=ºV‰†Ü*ëaŠ8CŽqúÿ¿Wwff.^œ¹vé⥋–mHèÿ0žÈ +ëD[c%@= .̰ ,Y@°¬*€÷–ÞS… ñ3ˆ$ÀÅ7¤ ^|ã'TÊ$jÊÌ8€1H äµ…|ÌÀOàÕ—{€õѯ}z¾¶ô¡´÷„íyšÛþn #À63žÞßþÝÖÆ…¹û¿ûÏÛ9S$ 'ñ#2(ÆþLŒýxÅÐ2^ $€ÓèQ„À€>!ÅÅ1ïœuˆ\ó1;± ÀL€(¬q+tq‰Õn!)m0ÑÝC?¦z.é ÄÙÖ~g…Ëô°†ÊîÖ(qX(Ò ¸­4öH% üM\`fņOX¢%îï[¼¨0ó„PÓ ðç¨äv€. Ír@¾5t%Q]ÌðÇ× ‡9ä’VY]gퟣ:{<ÊQ§ÕnëºÛnµºj´Zlúgôg×#òªJÊñýÝôKÄ?ÚmƶÛífóà`§Voã\øCÜð ’þ§…~ÿþ]«³"¿ýí¿f€û¸ÀŠ7V¯ô-ñ"|ýLj_m÷1€õ°„n?? %òià˜@?/W¦¦š5,vÓíãÿ™3z;{Iª½”gÐà™eY°[,í–¯.‚Ei£RBKIµ¼ûU©P½þæ¦Þº¾¸yƒ‘m»×Ê¿¿%<®MáþÏäÿ±"_õ›Ò#!ªñR°ì‚3ìM‡b©¸\-,)aXà“ºŽ‡¾+¨~ôhi™n|`ÓÝÙ-|ôGž@ûI¢vóvq‘õÅ¢tû?ý£p[JIÿI„þjÈ7…’¹„Ë’>)þ¾þÿ?ýûÎÿryÆk`:_€ÿ7YHÉ(ð?ÍÀBéi< À/´‰ X>Ðwëè»ONñm +Éß² @R(,”Jï^¼v­ÀdIKÅ÷g&0€ÅE^ÎQbd•F/ï÷„õq€t‘n܃Z¹]>Ãaï9à?2"nÎßݾϚƒ››«Ó“nŒ’øÉ$ÌŠà~’€ýÎégwœè'ß]»GÝn«Ëø2)…à¡ õÝ» öV)9ë@'¨é[À N™Å€r(âDqÎ žP J&¥aWßR3¢l[L¾}&z*¸Êr.Šöý> ¯Rš[òßh…X‰=NUÐJmî¾·€«§ÇXhÅéf"ˆê€¸ççÒW9è@©p!1`Üj<ª­TkM!&ãó‡Ä-Ï‹Þ`¯?P»}°ß¨·»mq1kÜ::M0þˆ +° ÌU!V3:þ¸.\vˆ¾úmÛx±þòP=®øCäGå×S¢†0@@Ôz}:N£ÑØÛÙk6;(ÿbwI8YÒÿq¾]ûr‚`mÞ>ÙL€ŸC>ßúôóÏ7Ef×eÖŽ@~¢Ø}\]‡ÌcØd5ྤâ§ÓÀ1~_®\™†˜¤_ë =ÏÌ™9>ƒçÚÚª½”gÃÁ3 ÓÝ•wß»&DÅü ±ö®ä›]acDÊK¿/¾‰à:#Xõ«By׊p`!H†õ?Ìÿt Üúºô˜j'4 œ–âGï-íŠ:(‰bëÇnÈí?b¸¿Ê_í–ÊbÆ?ðÓ…`õ—ÕG‡¬xAØ• +鯿µX¼!ðõG©½†Äˆ: ñrÃ<[–ß"8J¸ÇíAýç™þ«M¾þ#³ˆéÌôÇéÿå…b±¿@„ýß.øº ü݀ĸ)*u;°À_S˜bq€ ¸ýèëâÌÅkÅR•Ù—ô'Ϙp|¾äÙ`;æ@>‹aŸù˜L )ÃQÊ ýbÌÎÎ^™½2·zoVzÁôqfvC¿,ºáŸ”U‘•¤¶õìþ ÉË@€$(À3Z "’£N[û2¿ú &  AKA›ÔZЇ#ÌqJÊ´ÀN€`¬ð…(a‰ €îP½Â= ¸K|ºep¥L W4Ay±„F¢' €³*š€ƒ} D$@]Â]TvÚK Y$¤<¶€ëž ŽÃ6=+mtq 0J²ÓGy +é.j¸  >l7ÕÒò>nóÌÊ7$~è!«­÷RÜš-a®×iÁd +æ‰QÀÁg……ö¢G ±MB +8´ÁAé±C´¹xÜ•Ú/½Ÿ$u»k–äó¡–„ίæ›Dv3…8Ãa§Õ®ìì7:ݦ2îųOxM$ò§Cðõñ*]¿ýW[ˆÜßÞ¶`scŽ…ûÁ~<ýpòsgJõ»ãh7º³±¯¢úÏ]™c`Xf1<@ïlX&+9i0þcÀ0'g_€ç£Á3¨%)•Þ/U WqT‹Uæ;a ·„ÿBðª5éåݯ*Kß,¾ùÖ[R¥ÁÏÛ·w®–YY‡ ÕêmÁ— +‚ÿ +éeì–¾ù*cà’tÇGTo¡óÒ¿R©!Æ<ß*³N$/í~U¬<¢$á6¦ %»-\½V}„÷!ãÝÐóæ­Û‚ÿ›7m·(Ww—þ“ôP¿ÇCÒ¨Hœv®•þhFdÊA5#Åé…ÂJ”Ãÿ™ÔÕ¯6ßñÔŒÃÓ—±ËÂ7Ë‹ 7Ë7 +äuRs„ÿ, Qd€ë……`9ëÀ€q$ú–’ 3`Í_xKôl·zu¦/á^ùý½x޲l1àxà×Ö²žÎ’!gâ‘ð÷K«}ð[ÁÛ¾×êG +%05çÕù+oƒòüºÜÛøä³‡›³.Lo>Ü6¹çÂ)1IHbÐï‹~UÜןIÀ~/xˆÆ?îH3ÑczõK äsŽI±0ÌøðvÒ€î R޲š<îY\WXå¥"€+¸T¹¥`"ͤ…¶–²”tŸÐ(ØyÁNÁ¿´÷Vcoeiy¿Í:INIÀT)ÝLäÓÐ_H¨mg; †dÌ!J +PóðDGsŒþÇÝvçHùôPºÃs/Â1΄bF{†€Àü¸wÄ|ßeØ€ðï‚ ‡ê?¦^߇´º%h¨jðŸl’x˜­H³ÀÜn.–A€»«sw{>Â~n}úéçŸn­Ï_±¯^±»Þbï…9ðs »±¼ç°¾±)Õ=ÞißuªS-Wá?£¢ea¸·úqf`Ë@XêÛ—„j/å™z61Ū¥k=ºóÅ´¾Â …„•üÓW(°Ò\?¬–¿þZ0\ÄÂ|½xè‘í.••à÷_IA®Þaâ<æöï0Q ÔßÝß?úãîN‰Eû”$ÛZ%–T¢)øÞ½'=™ ¨_âU¿úú›¯îüÞúá‡åÿú¨´ãuû:ë³ûo"LDø•çï¹}§ªÖê–ñO |Ë.ïÂãÊÒîï=aŒÅípC¢)•˺!•k¥¯c^£¬!#…ÜôAýÿ²ð_˜O6ââé°,.ˆ@•~AÐøŸùþߚų,$ @¯@àŸ, (*åé{‚À[a ¹Y¬–¯Î,)yò¶|ÿýñ àAß?‰dxŸ£=Icñý»µ1?ýö´ßú¿öû?­ Á´ f}ÒϯÊÛ—{‚óÕ-ì“k*/Ì|ø›ÿüðÁï~Óo𢏹ý™Ã& ‡ö{òÊôâߗ1rê(CàÐi5;è@aÒâ€V®Áv eÚp’¾À)I›,€EF¢¨¨‰›ý.Ýà{;·´»ÝÍ,ˆJѽÌ@Y®ž€ÏOŸ’˜¼€¸ë¥3‚VâÉŸ³pWm€èÒWÙ(€ñ1?3ízbý;‰U“J¢‚ʇGv³¹·RXÞmAc ƒâ–ç% ^ûãCüíÄÑ;‚n•HbºÐÖi%( ¡¡2=6 3‚ƒË‡‡f[Áîa»Ým{9aûvpûT½G‡ T•Dnð_!êILÂÅR+¥Qvˆ.Náè›J«Ã©ÒG}I ŠÀ½Õ¹Õ­íßþ+«Bèpº Ñm½ ~7ÃmÇÞ;)äñ>ƒ€îìa˜ŸçÈ|ôgPO*¼å’ÀþÙw®\Ñ ¾-J7{á þ'0dxIž[Üß|ªç?Ü­àž^ÞÙ) +åK þMukw÷ëo¾ùúkÐ\*ý²RéV¥4S,/,ÜÔü‚ûr™…s +;B,Öë+W¿~Yq¨–?zôõu*²xQŒò +Zp•އe<áJæösC*;Õ÷®)ªXÙQ†Ý]Aqu÷Ñ¿ÿojy¨LM+Wv+…Ru¯Z}ôµ¢ÔfVPýôbìŠ#Œ•þÎ.óú—‹pÝ;å0—)o¥p±ºû{P¶lØ/‹U¾5²ò! Av*¥kª­Te%d*6I%jÒpÿÿNØÿÍv„èÁXl"!ž \~#gÿc! ¥|}€ @¡ðº @ê (ÝN“.-™v¨ ,ú[èP\€èaw‹jF|ý–Òxàñýÿû +Ò·Ýöx«À¯ËÌO0 ÿŠóoKööÏþµÞýÀ}]ûÑDÞž~[»“Òôìú¡"°ÈŸjt¹–Ab2x£wϸߗ1£³Ó©]è‰`͡Хm\1€€1# @ÆIhƒ:° †¡›ãægF`T&½îq3,uWXnt˜ŽG2 QgA.¥$ §º¸Êt-*K7°hâq‚ˆDVWª€Ž:‹®ô,j‡« +2"±€túP²ï©²lO’F(`@K\YÜçq~ÌFJE¹?@©‰¦`/Μ +¸;æÁ^¥¸´×¢AíA‘Z=$jvúëxþD@(R XÛèö‚Âj°O5ú´Ûžwè¨So4Ûa¿ˆ¼ Ýiv•Kl€^ÚJQf”ˆŽ©B_Hòdä&9ÉܪKjµýF“»*ç™ÿÄžd;û€lÃð@yþnÌ>€`~…ðtŸ0®Ÿ-ö^xµïê?AúÈŽ`C€åmЫªè, Iœ4 ½ßèïó;:ç-ú¡X[]Ëæ€d±ö—€ï,3—Ÿe»víZ¡ ƒdéâµK—fff.ã·~yæâÅË—/ã9Ž( ¨Ë×.^Sü»gß=ûú¹³¯¿®ÝŽíˆ3ºë+f.:ïe•Nñ3TPÐvé"‰œìÚU]“ûº ¹xM•«Nš€Û¼Â®äÚUʾzY4Dw}™êRÆk3j³žébášïÂåëxU™/¾Î,ijµïPrÕ9)Ky¤Há2 q;âHé +ŒØÆëÿ˜pO`&œûnÝ~$°ðÖ›o‰Š‹¯ ³cÍÞòMpÿ#z("Æü Àõ Y€-Ú±¼·´t­|ûƒpfÏ9Ü,.¼9unj +oDzÀ‡»i°!RËôÛêÛð…6ý˜|n"¸‚ÿ`lžÄ…UôôííÊ8$åÒm}¦´“^Œ^é!P~æ>^»—ïðÏÃIIŽ… )ô°Â(º~ƒ +„¿ÂoH_^Å}&º&ÊÑ JÆ hñíÑq§Ñêð;n0 ’8 Ò¬ü ¸…j¨ÉÖèaha°î ³¡4;'Ù`nÄ–ÈP^N© Àåé;·°Xк•Gà”,&(} Y͇8' Qõ +ªØ¬ À ­:r7Ê]èìºêûÞSŒŠxÂÓ–ñ(Jù{ <#ï€á]¥³T.¨l>Ø[Y*íÕ ¢Dˆtë¡ e]¼6íÔÌრ+ï*CwŒºJD?€’ú†;ðÐ÷ø-¨ø‡ÝæÁ~½öwñä;î4ëÍ6‹Q(þäÕ·¡  +òßËþ¸kÀBú¨V†ŒBšõƒƒ½Z­Á ÂÇzŠVcO‘ øu4اnÿžpñ`{k½o%xðàSñÔë]›ðçÓ=ý&Š1Þð¾.°:;{w=³Ìæ,§8ùý³ó|Rß½d†obLÈ</-ßYrð4aÌýÑîÚµ÷~rMÐzñ’N<à’ñP°OÛå«×Çe ý@Ó”`8ÜêK3—¯’OY„§W•ÛRP±‰%‘…³A1._äþ{‘æÚµŸˆ'¸HßâÀnN  &ré'4$ê¾|zbK¹zQu]ÐiC*ć«3 Œs«ßPÔOÄ!”Qb&r™–¨ù³äÂÔ8µ„o„gÓDNl3'ûÿ“þo~á¿¢ñ…TðÖ_ + ß|«úÆë…rùœYè1á¬ôžà„€Éo` €ÀŒˆ‡{þÞT¿¹øÖ¹s?š Åxãâ­Ý÷‹zKi øŒ™ÿ¿àG‡dÀÿè0ÏOÚzÂ…X‚öÔc“G’ÙzG¥ ÆË'÷bø ølû[67V¥Œ"¯¼N€Ã 'üˆOàT?þ­&s£BêGZgkßÜÖYpêIrA[zôTß×ôÔ£ñ*kâæ¦N \›¨T)ùØ ’€B)“’i»ødPöœ€”= ùâã£ÏH£|ëéÓÿVy Ò‡’©“VÃ"±Õ}û=(ÀÃ;‹+ .HŒ‡¼ÂLÚÊãðˆJÁ£¸DžC+Ôdä]ce©¸ß@Ã&jP y¡K§ wê{5¹´uÁ,Û·lt _­„ð§û–\¤ß{àãnso¯Þ"9®,çwPg,àã#ðŸ¿ÏB&•åoLE€û4.è:ð‡2ë­f½¶W­ÕUÏCåþ³M–€û„ùôgþéú„@ÇH;ÎzŒ¶ÛäÕún 4¿»¾qc~vv^ï߀D:`¿Ìð–ΟggWÍÝýƒÿ !² ÃÉO$Ã2I¨öRžY¬ Ÿ*‚¹ÐÑm0pKIW^áÝ%.{ \^{W xñÝŸý˜YÀW¥Qj7X+DwÔA Èj €!Ü œ†k(˜)ÞX.¹rBÉnH†ÿ¹hÁµË1´^*$eõ¸ ©É,ÿ¶"¨ +•À€w1EÓÁø„U¥dÍÀð_hæ%œÛÅ +SŒÓÿŸ` í#PwqêÜ_¡Þx½X^H€äxçÎ?P\ + 4I ÀÆA†ÀåÒín3 ”‡üÇ¿œz“õšŠ§Jwb¾æ$¥Ñ …ÖÆdnÞ“A@à ; šã6¾F,„‰@×÷ûàÎZf÷·Üߺ?Gxïû Ï8f îT˜,ÑÛà€…“Õ+ÓÚ,#¿,!£8À«§ývx‡pý%t¬¨ßé·;;Þ⺻’#:0’ZÍÎâAÒÀâ žº°•_×='@å&Þ·”Ð8«ÉEÎ@HäÄ= €7ªs@ç^€$©ê@ü€Àž€–kÑ•Žj'ÇP!×ï[Q‡̈?ŠäèÒ±vÎàôn¿¾K?Œ0·Ãäyû+Åå&X)’øês"=ÝÏrÜ=j7ööö›ô0„0´stîàÆl¯:¤Lþ›Ò¤ Àv‹)Žš}†ìbͧAF½Iî#`Á‹T_1;ÿ¤ÕÐ#hw:­N§YßßßYÙa1 €I©é$½,åÁ¶þïm`&ÀŒÀÆõ¾mÌÿµ¡ÖÖÏG‹ñû4 4·`óîì•ùÌ€ nê"Ìç@üœ\™»2{OMêY2€édȼì S‚þ„j/å™å2xvª$Üó~ùW‚»Ë‚3a ¸+4¼ +ðe¸«CÖö‡@Ðè4@,S!« +@U§|•€‚€2è®K¿jÅÖ¥ïÿØ•ü]ÚoÛ.I¯ÏÚa Àå¿*ÐL罬Ò ŸâRX 6Ûk')€™×1^0=Ž¢ ñ™‰8¨ÖSÌR¢—i±jŽî«D.FlWgnÝš¨ÿ[£¯Þ¹ƒy_\@Ÿ›š*þìâë…rÑ«* +…Œ€Hþǯ±À/ +j13e}à¿»$U€rùÖ¹^~ÉÍë”ÿ#ŠÅ©7ŠU<O±0“/ùs䮿Øâc èHZEØTÐÃyŸM„ý_( Œ@ "¬šã¬û9a>ž¤¸LRlO<×ÐÖ–ÄìçìD€%Á½$~gð镉¿Èü^c.̵[t/+dÔ  ÔÀŠ^Ï%ÆñoÃçÎ0Á}dž= Ù¬Á)Pƒ)J œ™Ä”ǨôÊLÉ 0—”&LV ‘¶ø&l¡±I™Y\1¶ P¡n&€É¥ÞYÀŒ¯tpŽô-P?qªFŒ€p<»-!Ѷ¸K‹ƒ~覿(ÚÃ…q|ÂJ¼)½ üFÅö*K¥½–Ü<(´e@@]a¯Ðù°{°·»ßluƒæ +x·„z/DÅètZñVLB^ú¤ãc8{ñìë?,‰bÁs,î H]”!{ÐP¸ö·/ w)ÔÜCèÑWÞ¸bÅ[↨$7Ä%²ÙàÝ¿³^/ÆÒ³ü-€ËÒÚ)ख[Þ¥ àòÅŸ\,¸Ý f=€.Õ`.âù¥-â4dwWÍH˜?¸]š˜ÿç„þ¯ó?xF¯„T@ŸXœ™z½pk±`@InÛÀ À¯¿..þÓ»A’àßÂð&€êÒ{3Ë’@šàVù憿œ‚”g.–«Õ7Xµ9“ÒðE,áôû®?ðýÅgÛ÷·}mãÀ– /èþÃHòÅýÏî+Ç[÷±!|žìúÉÀ…hPz*½%Æ$x¿‡³r(ô±‡þ}üñǾ‹(¬+߉q¿'`|ìsÒ»6`Œ“n×?ÉúÙf@³Í½µ>c€(0M›@Z!©½R{Â; +<˜©°Z™·jL1$Vö \ZUN*?ÐÚ¸›vTê¬ß\ šbUI¼‰ƒ-åÂ)¢Y‰(•Z¦ m#dBŒDǧGv×'—NÍR¥_õøa} +™bèC! _ˆÈÄS"Z3‚R( FxZéÆ+d¦S‘ó+ÅÒ~Ãèï¯>/éÒÐûø1óøvÛõZí>&ò'3KK„Ø<l€ÈoÃÔ"à*b#/>x„« P²>Ývã Á4þÇÝnGèMqdÂ]®±œ´zØÏñP4„9 Ûõv³¾_Û«›Sèš6PÈdIÿÇÅ€ùÕM,_2Eæ,±7KxÂ=,÷@Ý1LÝBòÁ€¹é9&ð»<›~ÿàsîøk²æIÁ*Ä${ãí WÚ£ÌôZÂFZ¨½”g¡{BÌI›à.õ\{O*ñ%â0xmÜuO{Xf2 =oèš]™f.‹A€¡Ñ˯äV¨m¸„’MX8öán(ÞÀsÎ@cðò*­ð–‰KjàëÍ€w,ªGO Ϙ™ù[•uÉ€N«”JgRŠ–dºþÊ !Í̵pFPeŠw+uM[ðP”-ªnxb›¹4Yÿ·JçÎsç#!.>?šZ¸>õúëÅja1#P€¼ÃHaøúÅÂu = àßlPZÀ7K×JiE08À…©¿ø‹sç~ô#qŒòSº˜h@‹+Ÿ¾ýÙçŸ?øôÓ/„ëf>îø¶$`ù,TÿíÏ?Å€âþ&Sõ7öŒ“ðÞÐ/1ög÷rQ–þLlFÿ¼Æm?ØüÔ‹´<¸Ë¿áÀ—Rø#X6²é¨§ßKD K$µ°BxùT÷Œš|„’Bc©. ­¾ Œ:"à¸w öA¬.œ@À˱ï1!AßêR‘44™ šK{%¾§\¦*Ž%AôuDJ®i'MJìkЃ’J·a ‘ݸ|M¦4†O?‚bt!x”v»­ƒÒò^Ëàu@hïÀ&lŽáùÇG탽Ú~½Ù¢ ‹;ó‹h$Èžá¿"GÈ…Uv@`¦ï¡­òU;Ó ˜·™š¸›8ìvÂ|uÀ™ß…ѳÀ_í1“Á.:H»MhX ¸Õ88¨Õöìa ¼¦T?Qüšœ"¶HÎY¶?} R`smξv^(?X“Goq°8tw}ckcž)¹èÿ³a€!Ù9/dÅÒ0gƒƒè€‚Ÿl}²™zýÿ4@à?o*ïl€—€ï*B¶„˜“6Á\H'@+Þö•l½RìðWaÀ Z-:›( P €6ä-ƒ£.§Q\ÞN`ùå€À ôf-‘&žo €SÀ("§- +c iJ"΢ÜÙ(Ó–\@8(Ry§vä}D2TP†÷'¶‹W'ëÿL À|âÂß "‰—þ¾§YRza²òýãí¯èÀðŸÞ}}Æ ëøCêÐáÎ×"^Á12{ŠÛåÅ7ÏýÇ¿üË©M½Y…ÕËÕjñæDÀÖö61÷ûë,XO.GL?ŠËŸ°Ý‹Ò#ð…‚BüûŸÝÿì eÁ4é!÷q/„A$±Gа¤YÓ•d ;–Ä)Œû=é«ú'C:îÀÐ/aQ—ÅÝp×¼!àã´ Ý|¨ÅÖoA=4}à‘S@i ¸ž +Î… X{¸HyÀE@Ý¥¨PËá9éû(Ÿ‚Äd•Σè {¨ÎÍuÒñu÷ÝŸØ€ „5tº à]œð…¢ô8›G¨ølN€ôÓ+‡9o:ëGøô,^›"¢v-ð(˜ +Í£O 2Š è™z@Ûi8Ú€@"Ñ4 +€4PÈÐ3ЄK×.^u‰9ÔïoôyLÔÿH+óß,^_˜úѹ©7ËÅ…‹o”«€"³Ýf$à¯<  Z}D@qÁ€‹6Ì”–Kåo¾ù·?„€'zT˜)TË€8€EœUY¹¸¸°8õÖ›SSÅ/«{Õâ$€ô÷œB˜Ç?ÝŒÏ,Ÿ}~ûs”ÿá¹…sÞ)п¦œ‰’¤§H&½_–À|ûèoI¿ºcE?ùül¶ZM:ŠEFºYO(” +|Àžb $¹` eŠ®kA! )àCoÏÒé2hÁSmEÀ1è¢:ƒÓ`&÷L"sP‹½òz„›ËRdÏ  ¥ó®Mê?¸LÃT¢Êöä.„&$FàÇÕAjj‘ÃHÈîvr#6'ß)Oq<3U‘XÚÍÄdS^¾g7¥Fcvoî×–+B]5ýúhŠÒ„¹þ°ÛØß§ {¨-†ñu¹Í^ƒ¾Üþ€þ³‚Ê(øÀü!# öA|Åâ ^|€¹qêS„j;2üûßÀg—JS:0ÊÓ©Ëš¶G5ÔvvšŒKà_ô'ídIÿÇ“Ä>wçÖ¼À—±Pø|`Tt¬Îýõ츽à#·úwc=àé¹ÕN€¤ä‡Š=…NE ýÿá€qϺâ½Ô›Ê;ûÒðýˆÀêTÁ ëñ¾öN€D +jzŠ·12á®`öâß]~wȾ’,Y.^M2)—ð_҆¯ÐßwÝ´4 +@À¸k«»¤ rðF´ÎÍá2 SÄ–æ€À€T>½—’ÀµûÍ”D§^£c`´$ˆâ)&¾ä º•]äà˜M{ÂÿÑúÿðÿúê«?|ýõ. I_¼~»¸°pñýê#OŒ¤»_ýÛ¿ÿë&Ýù÷o¾úê«?þñëRqÁ=A.^+-cøƒJyôh÷«ß?ÚýºR¸öËReWµíþáÑ£¯‰6üéݺ)è_8·8555óÆa˜ä€Þþùg½aÿÑÁŸ¶ð ôÎïJ_øžž~©UÞý ‰ü¸”Ô£Ï'2#¥8˜d +DOX + —Ö¸ßÿ²d`Ÿ“^T`Ë t:j³¤ pÁï¼QMØ%ü´‰‰¨=?7]§3Øç¤t¡YYÆûÞiœÑARKï¦ãßeiÇa4uBD Ô'\œèmèćn.Êñ4,ÒL§f§µøöëiÈ:'Z£öy4#eΔL†zGû&œA1zÇñm¸lÐ>XŽ.Éâ|"j‰ÓòMÒvE›Íˆ5 l‹·>zs»u°'Ѐƒ±CbxÌ u“¥{šLÜEýgÐn¼\ú32·¯.Ô<þ~ÚÔšèi†ßÅÒ¯2öjÍ®þÚà<€f£ÝvÀÝ?j|[é¸Mk"?ð~]ñÿA¼žD™p¬×vjûÎ%N£;ñmM”ôî;½é´ê·3œò&€j/å9DØxš¤.÷¤Þ_ +•(\…ÍJÃz6âß•m€³1€Eª²-@w¨Ö—×úðH>زQ‚se±…@š·±·?ÍQèÄ(€KUX§ZF6xãõ/cÀ”¡¬¤ñIõôP¡’4 +À…ù ¡ö`ÿÆÀû›v÷Dýÿÿµ+üÿ“½yîÓLÍË3¯ï”JÅRi©pµP,WÊɘ/¾Z­(m±À ÀÿáßÜå‹Ë%&AdÎäêî#æ,-_»ô^¡TªxVÇÈÆ¬†Åå_LM;Çt@S3m¨N°0‡ù¾t÷èÞßîmŸóÑ. +8Àh•œ7<{Ïq‰ôëd¹ŸF J>a–ò¾°0©]þÜÝOOŽ€ú'ë'ü™Ä/KûLÒµOüdOø½––ÙjÑ;lô6ÀFàQ`†ÛœBÆs‚/¡k'PPwH.à‹áqÆ÷qòµp×I„>®Õù…ÈÜH¢âÐçI$u¡Nß± Õíº\:Ib±A ì;/¹¨BÍÑÑ}ä´™;È1Å¥G”eÌ€(“¨ ;‚Š´þŸ¤´ª‰a„äŠÂ‹qøš'Cõ}¡w:‚à½ÊJ½Á÷Ls%þ"9Iˆ+l?ì40ßK•ï°rOW˜ðï$ä¤NŠñA Êb +. +þa·SÇaè'Vå¶êu•yÔî6˜ÒΊÀ¼óR¨9AüCpTº ! `&À½ýZÍ„ÆÀO“ôêãݺV76×pðï  Q°Ïâ4aVx×GG½ìþ‰°{=|b€ uaèY„ü=I˜öRžC.'Àœ´a0æJ˜ Ì|Bñ!ëºTk)Þ™€€ „Aëä!` €0“œ@ÙICÇ ? +€.ò‘Ÿ›YCT ` îº! +…)"m€wÿÎuªÁð ²Ç(xÇÕž€²ÝB}z>ïz໽.º'è2P« ’Ô>1 +àªïÚØ.^½tšþ端ý¡\™yãœpç‡gÏâB9££ +¡¤pÕ³ªEWʼnffÙÐÛ¹þÛ°:7=‡`Mï©€Az„$)9éãÔóCÈ Ú¿©ÿ=!?ø¿úqÌÈ‹ +Ð; 8±p´—òp9q I¨ÁL€i€_hè®÷”Xz¶§úÉY€°Ø”LéÞ½6s5Y©4 +@pš÷°I£K¶üà¥1î‹ÐF™—è‘À@›¼‘çò»Bg ®vf£ÄQ…>< +%õ-='@š™˜ˆÒªìðÈ`U` ÀŒ‚TŸCýþæ©OÕÿý±\¡çÎþ?ÎS3f¦f¤ÙKŠÚ–v/^¬,•"B×…%溪4S3]—–––0,³Â2:ÿFÉ{¬—*;¥÷J +}ñZñs?|åõטdÀ‡ |ûö¦L h ÿâ‹í4-€ðÿ¾çôbKšë÷Ê´äÊ4&G vCLƒ‰ _l–sÁg̘d\ ã$€?ðÐ.²8@d‚øG] E׿í²Í˜j´Ã;O× /¨êWAÙ¹ˆ!¬,R [ºH¨ø8f棧ÖÂ(ÑJ¶N¶ÔªÓ.íú©§-÷áèö´ˆ²t—(2ã  8Ý‚w@Ò2¸´N;2ˆ 8‘÷0Mð’­”NS©I׊6‹€)™‰©up|P{Áf•ËL9­V}o¥Ro[SN¾€ùÈ£vÓMßÜß`&;t@ÚŽiDàu­&JàbŽºën‡.€ÃVý`¿é?óáQ[¹ÛͦЦ·Z-r–µ … ^Ô‘º\¤…E ºÝn‹n‰úþ^­¶ßòðoÏ éÿx’Ø`m~mkûˈ·­‡J6nk& ðê°ÚßÛ±Ö£· È æÂw[æÃÀ0Àgñˆæ ‰~X¬Ü£À>™ÿϰ0  oH˜öRžC„À§ˆP0óìh´ÐÁ6ÅôptüžJ,‰oã.Å‘òsLëû®»ì…´®œF· +ßï€o 0àš A3*»2ê)LÝ 2€Pb±d>vüÉÅ)$&'Ô£=oð˜lÐ~ñO§èÿþ«FÏÐû³……÷…À7ŠþT+‚ï‹ åÊn¸êŒ[_©\X˜YøOçξ¾P,Wvlá_©>z´»ËK,BÄjJ¥eмZ»*UTÒru§R(Ì«Åsbù:3grÒoÅßÒÐÍ +B¾ø<º÷J‰öK"!fD@ +`S:«{te3V*$Q”P˜ Áuò1îR%p Ф0¥§<]I“wN@„ŽBs%Q=Ì‚ÃÚ|ǘ|S Ž_œÊ„\DÛŽÑâi{ÔC×¾ãbUë8˜Q +à_—Šƒ €ü1Úß_D<}#ÊDý|EjŠr*JÎç°{ÔiÖw—W]wJy@@ÝØ[ý݃z½åÅü$*ŒÛº©dVÿÁ_ª# ^;Ía»í‡ÝÖþnú  ²ŠÔ=±`§)ï‰v©7NÑaÔJ“ˆqt:úoi4šÍæ^-F¨"*dÒÂÓÄjþ¤Mb ÀÜ:€‡_~É@}ÌX¬ÇÀ²±š˜÷°ÀȺ Ý›q=YîÎM30N€ƒIäpÎtZµÅnhç·`u=r€Œ¼´|o"hÝÿâ¾4}¯?Ÿ±Òÿ14gouÈ'ÉŠ?ÐÿO?å—Û…îré7@?¿ÆN _¥¾¿õž7@¼"Í€<HП¤‡öã$ d¼¨Œ]  œ¸ôë˜ghôe"|c -ÀT +†ßœÓ¤£¹ +(Uƒ7°>p +œ«Bƒ4ìÎì‚ÝMo£€AX7úíÖ +ã•_pø;ÉA`üäȬBñªÀƉîPü¦#¶蚤€¾cuRe6îSa>:Ô²ðmÐÃ@…¨<¨¢ Ø©ÛQ„¢ŽhQ€N}¯¼óÈN€ÆæÉ"8Ö_È>ÍÆ^moÿ ÑéÆ%yéø–1b9úªíÆO½úc²p¿ \x­ûGm†6=Ž £?xWtÀ"8€ZõW¶V¨Í”O+UIÕ=d £Fš*p·¶WÇÀ`=epȉ’þ'ʃ"«ëž +Ø]|ÿ)‹öI±Fù'ÝÆøè Çpwcs]ÏäÀ/ÁоI?1p²$ü?+€ À?$aÚKyàO‘Px“ÄL€Â2#¡BF6»*7¿œ@bh%Wf¸dpSÅ+×(€4 +€Â/¡ÂgÃb)¢!áŒÐÃ4y]ÑVh‚"0å“1,¯Ò¼eè¼Of&@w(š à+¥Âô ù¨neGÊðþÄvñ꥙Óúÿ«Âÿ™……ë?ƒ˜X„Õ‹?¹V(ïŠ 0io&Õ²Ò(í_1`9eÉ­4Öÿ¶à\WRæö£ÒµŸüj›€J©Z¼øaŒ³ðSñ\b@¼ï!õ– ÆëGRT´?ûâ‹mýf=`ß<|øð·¨ú·ß%ë§ßšXJxu.Vž½2'N .â’žAò'ø÷ä/_=…¸ËW?Ê ¦Ÿqýî ?Ñnn¦ƒæÀJ#²軺…âvnMZw¸‹.¶ž‚–ºáÑzÜá¦D©#ôœ#ÕòÄx¥O¾ÎêD!”‹­ÁçTþþz›ê‰Kú>ué~¸2¸ÅLô]Œ)€Ô9T¯šC#Ȥ4<‚Ó¹6q532òÝ(7_IÈîïO±Ær©æÒ½[õ½¯È7BÒߤ/xýyòÍúëî¶›tÚ£ÿë/Çíiµ–€Ä¼ˆƒ®1Öƒû ÙGã?j×÷÷›ÍŽgýáV§U?hBÚž™Áp} вåÖù6•véTh‰>Ô{ÕÚ~³Ûþuß-:ErºþèM‚àÞ¼ = €nÀÃÅ„ÖN¸ñkúàÆÈ½p“%ˆ€¶¾@P^ ½ÄS9­ó¤Óê†{üwÀßÇUœ|’ô,g³å€_Z^P.gˆ9i»&Ôü¼i&@뻺ú^óRJ,BVÅ' &€P°X÷çp EüXìÀZá4g£€èdH ±@¥9 +@·© @à6<Zc€¬œÜ¤Ü(€“k7B20 +ÀO6Æ€€Êš¤ÿÿ±\6þ_¦‡àúÂ0_.—Þý‰à>¬ÿ–D Šåâ›Âîþ`J,áýÒÍRU_À-“áÿm1Ry·RºX¨04  Åë…sç^ùá¹ÿ4Ù¸=IÅ3Îwú“-R˜ÚCñ ØXH›ax x¸- ðŸûŸ'ùíÇ¿Yã§ÆÃ„Tâ=ý’\YÝÆMà@þ$þîùÉ!Ø2VÐÿu||Œ ~C T<²æn·Å˜ó%€+èaâìæÆC!_ô•ƒ‚:&°µ?ió¢J|r/î?U~œž².ÄD7;Á8)e4Å6ˆtÌ… +xB³´}ò¨xÁpÁ ŠM¸¡æG4M)´„&)DUXò]ÝqÀõ†D.?;µIùvR]Ç·EñÎ!í\ŠþŒÍ½q°¿²Ãô{£(€á1/‚oEê†0ü`o§vÀT€°Üi»Lû‹rN5‹½;ðÁþ O¡vKì®ÓjìïÕjÅqW„?þúÇÍ!´JTW-¢c‚ A:Ú‡LÐn·-F¨Y™o"L…†M–pó› J>[Ûÿ À§vdÍ@½9~¡,I׿¦§ßÖæÃp`:0{üžPÍ€õù+¬tw~Õøï;‰8è«©øOKòG~Ø=ÚÇ g`ÞÎdÀ YÂ0í¥<€–“·ð.fì ô€ÎáQÀlZ  o½œ: ¸g.‚ÕW)ƒLÊvýžÀ>Qh@ödÈä ‘¤†±\E;€Q4”Hø†rÅ(iíýQn©ôéùx-€4€«þ§Q<¦$Yòkœîpªÿÿ5ëÿÂ}VéC +ÅŸ ÅRqæ'K•]ïåeqaQL`¡ø£©W^yýÂõr)§º÷ÄTÃ󕪀Àn¹RÁ°X4° `fŒ €_Šï(Ÿðs# äO{ÄÊgŸÞ?¹R°„~ÿõ —Á r¢Ë­ímwK¤m²$äOÒOôá–~Æq 0js)°üÙæŸ¡g: í˜Q x‚Àã#ã¨Ò‰E•ܧ¯?ʰf¦ Œç¾C.\ ªâ]]ðŸßÄ×F±nàW¯ÝÊ„Î܉b‰æYü0qd.`Êd +ßRë°(¤Jðp”娲’ qœƒNÅóë¤/LéCƒ!È!C ÈR¹;ÍFm§VoªÉ€éÐ6,Ä™‘6ë+;ûõV“Iû,€ ³ø‹«Q" -Öæ¿"–®ÀšQ€Ý–p^È]?¨ÕõgVÉâ̓fÛ€ Ö‚Cfõ—€ý†ÚÄ™ ÷ï)‡Hó0ð ¶³sÐ5 ±û\À$á'mˆ»lðrÀ"î‡ €v€OH¹:÷¶ñ>ƒýÀÛA·'‹ €Àúü;"vH]ÈÜ €¿ôކÀ4@1Ï÷ €?ä¥à…mx²œ…¿ ¸K3 +GÀ®/¨Í[8JDå²äF ­¸Š7Øiô À˜QÊõ3•‚Ð2GbÍÀûào…þ>< +%õGôæPA’Þ(0^Õø(iØDhÜhádý¿23cýÿúÂT²,, +á‹%€™Ê×LŒAàïÿ>õ”‹‹‹‹ ×Eνòzá+£µ½’à6™f`  Z©Ê{»»¥riïý +mKî˜d°Ž?IøÉèiÞ tE‚Oô~‡ *Ég÷Á~i*ÚAù!ù’^$P‚l{ø›¾G ÃOë HÈŸ‰~€ ‰~˜' Ú¾]Ô<ú#8¢(PS€kë9x' ´R³ú\aty öB ·V¯ý[¯²sŒê|?>ò{@>–|ƒ9޳>ðA˜Ë‚/pW¤¦5Zµ'ƒ»(”œÄ¨óðµÞL@÷uŽÑjeE°:€[Û“§z${ ªÅbIû×'™@| %¡ïë–#0AI¥ºmŠðL ¤¤ÂfkÔÒÃ1ˆtÕl,C›ôòA…ã¨Ö­½Zí ÎšÖ¶‘c _7ù£16'$樖»—€´Âú^€G­ƒƒÚ~ƒN|@\Þh4üÇ€¨FbîçŸÌ7õÐ.ŽÈHW*£ç{hµ›­fã`B£¶þ¢%™“âIÿÈ%†®m=xø¯¿5Ø~pŸ:>õ‹þÇ {÷×ÂyI%YÀ öÈ=Îçÿv˜_g…á¹ÙÙù9¨A0ãºrÈáÌ`Ô €$~˜ðããXÌ+oøÂ[„úýí%xÜ& €d(ôfÌæd üO¸#ý‡ç°èô `l=1 + ùkÃ÷Ž| wéˆdV¼£ :€À€9p͆À%†,:ïeøD\àòÅ4€ `ã0´€Êô<ÑF“êQ5y ÀàZ“áý‰ €™ÉãÿñÿGÿ_xsêÍ ÅâÏ3ð¿V–– +AnÞ¼Y¨…þ" â ¯¼2Uô‚?‚þ@Ïdô¿u›5p `0dww·ü~y·Ry¿R¼>déÐõ†ýÛÓ“PìW›ƒ>};€hÂ} ÿ÷aC’ñG +¼AÌa`‚!I‚üIB±HXŸIvÚqê0@Ð:ÿô <ÿiÀY(è#´¡tþY'xd±>3ßáÆô€UB$P 1@£NX<€xcÍ™² ž\ê£4Ožˆ2(UªM;·I :sCG8AD/ˆu Çj"‰i)Õ%Tb4—ålªp=žiXôÀæÂ¹#¡ò |\*•Ñf}YåÊaAgEƒ-,ùR» øÃ’²/3”}em×wVpT c݇ð.„Ædš¿‘ÚÀßñ¨ÓÀnßj²¥ö7j{ –’´»ŒlÖéQhcè02PyM¡üo@2º¶1P¦ÉÀ!dÁóK굕Ås—ªÝ®IÒ×õGoˆ^¥Í{ók›ÛÁwÜw@Η”kóçßž¾Üëà=;æÇHÀ>`œÛ€ñ³WæÖÖ×Ó³ ÿÓ0Bô;ðÅÀ¿Ÿ|²ñ±}ðÌ[`= @Rþ“$H{)Ï#IÍŸ$ ˜-¿ôL€RsÑš‡Gxp]¶@f@•6¾‚³i-ÏÀ|5t0ì#æ0îf£p÷¿ÌZ&"n‹»Þ)ZeæOŒ¸|)VÊG(ÅÐ<Q’ €Zl-îM”À ‰ÒlÐ3ضñ>jáDýßþÿ‚÷˜$ü/©ÒJì/ì`ü/ +¹ÿ o½9uî•׋»vý»™´ÜÿÿVýYHÇ"]å2 T.•߯Tʶd~cÇx(þ„mû¡´p{ïçÕžáúƒ&ùŒÄ™4y ÀýPÿAòç–|–1&€` ù39¡ü‘}~Ä'lúÝñc5@À!¸»Œr =ýõò§ºgÝ84Ƴ=£€’%{*P!A»ŸJ`¬‚iù¨Ÿ¼:ó´.–¢ü( +91±L!1® jv»s›;(€¦’Ÿk«X“ÇÇ€æAµÖèxä^ÂÃIÒ=ôßDúwk¿VÛÛo¶ R·Ö ¾Ð¶­r”HKÐÿq€ÂnÜ~éêØö[µ½ze½ÛmÛ÷ßã +;" z×½äöC0àŠ… Ú vY¨ía€fƒ± Õ•ýÜýÿ¯ƒÓ$ý;O”íôï¯n>ø/@[ÄB™lÒ)·µŠ€ðÿ|fõ×Þ O?bG|‚ ølnÌ_yg~mÈ9|­êGÀ(éY,égÁ? ^Ö7ŸÁQÉ ×6ºR7ÀK À Jæ„ …·w1 â„„9Å['ö(Ö˜œ|%™-ÊÛ·¸üœxy\MÙãnBåÑ£DfpFà)@ýȈàR²ÐlÚn›PèÙ ÒˆÚ¨f%¥Ä“>nÇi£´_ž™¨ÿÛÿŸ}jêÍ©ŸA–~^ü9³ù¨•âÂbáKÅ‚Ýo`¸á.€…·”þÜß(JÕ7¨öL÷ª¨jÕŸ°>= Àž@Xó6€Ñó€ñ§‹;ãÄ€ØCâý޽oQÚ¼à~Ÿ^<£ÐqÌAyNR€@m ø“0@’À>'½¨ éÇm(î:¡ÂÑ—'8âìýÆŽ`‚tú“Äx(b°ôaç1Bkø˜U‚lë¾9(ot†4ÐèÙØåò¿:Ó‡½påÆ TŽšTjÜC¹—¨.…ï€btpÝ +Ú­„âî‚PÚ{ùà7v]x„Síj±ÁœUJ4UL©è4Y³yHÕ„=@߆òéËîà‡·Â¸y] SJȾnc©øíF½¶»_o4›¢iBuë³É›¿4} Np›?¨‚¸óI©Ç\ï¿ms¿¶s UŸõ„™S˜ÅüÂ;5tÆ.ܫ͠Xø1!!‰à¿«FÐÐhìïTDDF‚"ôû'ÆKúž öùÛº7¿ºqßÙ@”@ð*ùdcS„`}.ü>èÇ[zÀ›Ä>ÿ²q—õ€q˜››M–d 0ô'ÐÝ,Lþ3Ѐ@fìðÒàÅ$ƒÌ±›Àóòßw`oš Ðú®n‚¾ýQÖ³‡Öÿûkˆäf4¶*¯Ð ÀÐZæib @x¯º€8Gܲþ(±Ï0i-áQkDƒigò0É@혨ÿÛÿŸ}êgɰXüy2Ì|X( +ý …Ìû_"½¸xÀ[ç~8EÁåò-ã‘°âlÈð¿g à}q²-l£m†ÔI>yc,ÀzаøýNïzX’0Í@f¸x^ÿ}2e8Iz’?“Øßß3ŒßSúy×O;fbýÄß…{`Ÿ Ì#ò;£]  »pSéb8IdÔ#1·ÁÊ|B¾uS äŸêÀ¥òq?ŠLeD( ¨%¨Ü:ašwr5’Û@º0›®.I¡‚lz% N5OÏ¡ º¨À¦#tzwH¨`âé,Ö£ÅF@Ѥ žàiñý SR‹Ž8!˜kpKWú²™@÷`gÏÀŠö c…)z¥¼K‹?Øõ €&Ú÷!*qÐ_˜¾÷¶Ó¡?'&导ߕŠßj5›b ­zmG:«m“ýáa³ÁZ£N«ÞhµZ”!ü¶  2S&l@劊µÀ €'C§%ÐjÕ›*±²³ßÕPCÔ&§8EÒ?ò$aØÿÖ½¹ÕÍ­mwx*`ä +©-î+XË?§ù÷"æÇ ,À]úÈ]ºXw{ŒÐ}wŒcé‡ ·GŒ}°š[  ‡ÿ™ vKB´—ò\‚~¢ 9÷FÄL€B[8oÅÛ™p7Óñ‡çFêpéÄZ*dô<îZñfÄŸq÷ÚR¸#†@ðã á‚ eÜLáàü ŠÈ,´Í-Ô§ç @‹{]tO¤Qº ‰ˆ<ßZL©3Qÿü‡`澊%ÃôÏú‘›7ÿ‹‹ o‰,üå§A<òÏèÜ’"_³@Æ}@²ü?’ €ù^ùá9¯ 0< õTm8ÿÏbО£Ï$ÆÿÔu \hüc$&#-ýëWO] Ôh5š Á+ +;„dž×€® È +îØDÐtŽ>9>zúä c•Øq 2!t|Á«”`ᤀ€U±º¥¼Œp‰ž € +´ªºGüt…±éšŠ©lNÍQyíGà"t¢ùĉ¡ åG%´ÌåR(ν°ìÃ^|¢<Ì ìvA€˜ý×.NÔÿ“`áM,þg€ŸKÿÇ`/ÀLo(Ù[oU§Î.|s»ª àÞ½÷·`·?ÃaˆA¥²» '¡XÂàõQcR'l#-gΜ?{æÌíçÏh;{þÂùlÞŽLòIßàE, þÝžïfH1Ù ýzOÓa·¾»p °-=Üþ[76ÚÑYþTº-fXäp—P ¿# ¸¿³L!}Ÿ”Ĥhð±S„oú£( š ŽähÿHgð=R  ·.‘ ×%0àŠc˜l0àŠ +(Â@ñøðŒé {%í?åúôDÉ! J¢RSc•†P.¹Õ€fÑà¡øµ:*ª5, ûG  +é»ý½ýz³i7@ú°ÊsÁ{[à äêJõǹCÉÀùnK™0Ú×÷jÁ4J& ^À/6Ñj5X +’¢èôôUýþP(ê=ÍB´¼”ÀþÞÊJy¿ÅpCæèvÄN‘ôc$Ï‹¨ÀÍõ»WÞ¬GN†yÜFKÂûþs)ì'.€dÈÖÐûÚ³ü ? €=ÚKy>9Õ`…×xWèÍâÆ6¡³Q7p÷¤€t,¹™ã•#7¦õüZ1 + P•û=œ6#‰v„Æp™*$eäí®˜FÐÂQ„CÇh´0ð²ç0þ{¢Êp8oxε®MÔÿSÀ=ñá€Æø?Süy¡¸ð‹úã¸(ø¾þÖ[o•§Î¾õõGŽßßWå¿ÒKy¨¦i%fÂ|`JA†¨Ð¼@ZhÀ¨>‹ X„û˜¨+±mÚ3ÂÞ—¾@Ôáþg® +M>O9žQ ÿ|œ÷™ @('Y€ñßÑ`Í$y|Ômî-—v„(¬^ƒÆˆŠéd³–ÍÀ§OŽŒx!V±C}¬S;Npª³hBŒ Z*0‚’œ{ aî|@g"°ø¦ ¨åˆ"NB™¶¸,”t2ŒÖɧQÁ¶À¾ ¬Bléô´‹’§"¥ÅãGÍNÆóSqºVæ(†nç°ÁßU“€V9€¹_i˜›¯Ë0À½½f»«8¦>MœHføàŠÔwI«ÕF ÆvÇWKûö Ÿ™ÙAX¬;\Ë[FxE¯w÷ôõè¾Ól4›`¶gõ…¸:Œ +ut¢K@mÖÎAm˜ð ãí&N„{{µ +lb :EÒ?ò¹¿%½‰àÓ‡¿}øÛ Ã 'ÀÕÙó$°}ÄnñÙ×iÀ¿0 pv~Ý3„ L³÷'DÍað„a¬÷í±€÷î% @¼©9oK€öRžO.dŽß¬ð&@Ì( Gk 0£ÖÀðè@›› ؆^ P˜ ánR¼É€¼ö¸d Ü@·±UÐaÊݖвx 3^ê[ Î 0r-]ª”yô ¶œæ ¯çôþíÌY–’`¦°´è3 oÚ°øæ¹Ÿ}}ûŽŠ-ßþèήÔvt},Õ(ÿ¥ö» fþWÊ×UIØÆ­ ÷áxÔvÒÞ'ì?{^!Ï_ÐÖ›¼3“Hnù|ë‹ï`0üë€ó d|À)_ê×%‚œé“Ь®V˜F?þ¸¶„ù†C ÍWˆÀîi`|óý¹ $ ÑäÄÈ+ÈdªtrJÓFZÄŠùS8jSª„›XâÂ(JÆá‹LE‘]¬$X ì>¢ÝëF ‘·Pª(JpncVAaOãóàðr‘Êâ È€Ýq:à +5!ˆNŽ\6ÅbCÑýciä(Íû{Í.‹ï£¯ŠA4/ÒðéñGÍo¬¬ììb²—2ïÞvvh€@·c¨f–þ£Î±mpEÅ}\¢̓Zí I¾°š™|Z ¦Ä /A¾;” û?:½}ˆÏC¢ ¥ê@+{+ÕÊÊ^ƒ1º ¼À&€­µ9º¼ ý1`’-†ÞÏ_žJ™Îíéüê™WÏd(?^Àxï1Àê•óWæ×ÖE=fûÙ`¤¤– Øÿ‰Í +~üqÞ ³˜„fqÞÇ3/-/&Þ6¥á‰™…eBžâmŒtRpûÚ»ùQ 4´’Kg)Þ‚]‘ôpÊÐi¤@w­x»îf}*‡R]&¦ˆpFÈðM^Wa è‡ÈÈÏÈ}X„[I½ ?Nój£6ºPm“ˆÈó­pñÚDýÿmè¹ü|©¸°4hð €ëo½U,¾yög»·“ z§|ó¦)€û< ü¿].½oç[v߇ ¼_1ò÷ý~ØŸ(³¼€@ï#¼°ÿ¬p_ïçYOšú €uã±{=’i/|^oûsˆÛ› +% ø39iˆ ŽYÍŸ$ÇGõÚÂBe_HbÜ1€ZœRAì1n|¬#dËöªA\~æ< ¡±2@Ò ØUè1™”…^‰)ˆ2}Àø@„]1ˆ¡•k%›»àV·h$qîiÕœjûÃÝÜÍQ ¢jÚ:ùï +\Æ´á8ç×)¡½î[¯wMl‘ȱÇT£§Ô)bE6ž@ž|®|ø-.BH€Guâ3÷}Áì.€ +Þ<Ø©ììaX·„ÓŠVy(þRâ=7üM"¨æžÙÑ[@ïEº­½ÚÊACðïv…ÿtüЀgñŸ +•MÅGfe‡gèŠ~€nW¸à +ZÌ$¼··âÏЀv&pš¤äñ‚ g`o¨ïWð_`Öÿÿc$Ð?A|n_õý$ŽºËâžÌp~|Ì&ûŒ{÷°Xlè[سü@¿'ç­ýÃÎ'@{)Ï)¨á“Ä +¯€”N3Zß<…ˆýQXÞéÕÿ™âóóƒºú3~à?ÀèµÐ°xiÉ3¬ð“€Ü(UêQ™!)8¹‘Éàu©À#×àBMHŒè9ÖÀóàâÄþÿÄÿ1 c–²€úðè[„ÿ‹dxóÜî],*ú£ª  „sX<>€÷+åJÌÔ·œ˜€_ëùã·a @@»UþÄ9/^kÄB‰ßì€Þ\˜_ßþ³  à9 ÀhIÕHð[^= + ,œ¾ðñÑa}§°PÙk¶;¶Kc8²à“Ç1%€ýæXg÷I,ˆúáç,œ3þ£ùr€´_X>Šl¯u默 @ ܹÊ4h¤ÃÌ¢$, ¤ ÷³Ny€—š¿}ê>* ½cžR=Kme¿¸é»Ròá2J`à¢[õw!$U,t‚“Š×}5 Ê‘Uprå8²kß -¢Wå1özä”ð®8ÁI²/B\ôÿöQ§ÛÄ`×]ÌÜdü¾­ÿ‡­vûÈD@Ú¿0œ]pÌ\žæe¿ÙlÖ鳯ïï챚€.o¶ö‰g]Xˆõ錀4~—aže€+lXú›êu1Š*]5ÆlÅ-Ÿ$éy’x`fØ ÀvÌ” Ñů¯$¬) ßOðŸ(Ï1,ó³oOÏy Q?N³sc»ÂðŸÛÙl0ø‡Œ°èµõrÀ¡Rp|Ùð‚b|™ ΄w1 Š0jµàl3D&ÜÈ ®  t 'Šv¬£\† +=@šFß¾w™â@€mjˆA–:ÜŽX Y¢Ú“?F(¦? +Àí¢}z>ïÚÀ<Ü—ÿÓ(=/õ§†<ÇZ$¼f }Rÿ¿öa@êŸür€©€oÝX,¾)•þÎ.ø_·(–ÿþf1ùÞþ@‘Á>°`æ`2,aÀ +pr>€€øgž@p¯WS +z=³"<çÂ;y1àÍfa~Ë™w ¶Ìbø^@$èïɰ  œ: ¾dõê‚@]¢ú´[Â,aš}ß À¡ÏÆà>6c(¨ üÚÚníðU” Ö"”55pþ@Lî)«3:ä.ÅwÙ¢ôûš” +(‰9DÊ蛎£“žÖ¡‹cµ<Úæ$$wE®D—^â?5™x»Ø}€2ˆS%ô\VŒiDI)u_D‰N?\C.àžúÖ[Íæ¾fÏÝwB’Þß)é”êîa«±ÏL€‚]æïežÄ@ÏìÀá¨gØW-¶`­P°á)ÙÚ^m¿AVårÀØHxó·èîÞ1¨¸#%„t=Ñot æ·<ƒ[£þhogçWU=Py”L“%ý'om=³}úàSmxð%=ÛŸ> ØXCéïO(žpŠ ¡¿>…ü9øÈùÕ»ë«1Àôô\Î ñ€AøM¹GÉ¢Aü.Yô+“ûqIxöRžW’¦?N¬ð& À{ž ÐkààöG g 1òÌð +Œ’§7 aÍڻРÀ €3d£„ØÚ,ýyú£„ôƒFÀ<âÉZæg™1òàQ(©? +à{_ àªø>È„þÆd€Ü€™baq©7p0€Ñp]Ƚ8%øOØÓùXn•³q·ð(Á »ž  Ì8€œ ÖÈÙnÜûÚþ¨mРW2T«ýôÑõDàÿSq€wÒeüن^[‚„à|Ÿ¿ƒÄfÂ}Ë+úü{(àpv–$p'‡GGm,+¨†LP'˜' G£N*n¨õdÐψÎcÉ'U\rÞ“ÀiÉr„©\ÈéÙÿR/;ĉ™ä=¹4;¤ 8Î'U€À÷`DÒ­ Gÿ€â)ãqÌÜ-H±Ê¤ ?G圴EwTI"&Y,ü¸’8FjéþzÌÔl=¥m_7|¢Ï€/ÈWQÒ÷*ª%„¬3¯ýì†LÇ'- ù!zu·Å$>{ûû†ðZ˜Ý>lÙ6/Ø=Dcøg8 5¬uCHŒù_ú}»!]ÒÐØ_ÙÙ«Û°Ó¢cà vP¯7Ûzý L +VóõYíéKhušf ÐÄ(*u¯¶RÙ©Õ“["f3—‰²õù§![,5jÛþtëÓû[«s«›9 ÀÖ½U[ýû¢‹Õg´ðפكíÚ|TÔ:÷#ÁúÆÆ:>…"ºwÕø0?Á`ÿð&ØWQ«ss««Ðûˆô}¼P_Ãx9 ð…%æ¸M`ÙóÈfÌæ0¶ SR)îCkJAHDgÑÝÅ 8«ðÊ•³PSøõmy§A]kðÙ<ø`ÀwiHæŒ\³ÑéÝ_Øä…oäFˆK„I¹ïDƒkô†ÿcˆ"õpA8Yžg-%¼†úÿÑ„þí},™ü_À[”Á Ѱk Àm•}=?ÀÞ8f`úŸ^@åýÊûŒ@X†çÈÜêN•dˆWr”L¿óÓi©ü?Õ6 ¿ßlyͱüË&]Óú9ùÞ,Áùû¢hUÉÑ›a0àe¼Õw–*{ a ˜„®zt¦†9àјɪ>@îõö­#ÎØiÀËÈSðÑæ]ç6­Ò‘Ì(,‰bˆ–x>b9XŸ6¸gˆLÞ§Y¯Ïàª+âØµ…]ÞìCUm±[÷—BÈE‚^@E˜b`ý‡šÐ…T…GòDè@•äWJˆÎ nqǼIiö¤à,ôÇŸ‚H}·‚øvó`éx!^‡ƒ[t¶hj,>l7™roo¿Îz@ôÛ ™1è~«+LÓ= +¿”°œŒbÚÁÿ}|ÿêû++b*ZÐ&z'<ŪÃ#À=ÿØÐê±@x¨Íî/òA—Bü¯ïïíìTÊ+"JwåP25o²l3Y6²=fÃVªþº6fd í-–ßË3¿~ ‹ýÝÕžÓQgGͯ޿{w}scss}nzzöîúÆZ¼-³sF 1KX„ÿb= w1,’Þ0@á¾YD ÁÙKy^1dŽß¬ð&绘 PÈ‹Ö<< + ùä×Àð5p¶?à5ÔoÊ |,ƒów³QÈ¥Þ<–gX Àvç0À¥KCóDI&l¨¿#×°É"çðÌk\C˜±Š>¡ÿ_{Ï ßòG@0€¬@®ã (ôÏ€ðÿ#á¿ç€„ÿ +ËÅ’BaHãÃ0 0<@€{^ß?¹å-õ'ä§Þ™Ög¤ðbë… €7,x|>!C €~S$é~ ~ˆ$l8Ÿ$U€ýf‡Q€À›Ð ø³l†>±ƒ³áºÛ\î…w*1`¡#ÁTìŠ5„wƒiJDñÚAVb°Æk‚ÉOR@™$¡Y¼Gâæ¸Š&8Huro½bhºj§ãŸt$¡ÿ^ç§6ÄÀ€'Œ4ÄðA^·C·€q ÏœµŸ`4…;…Ô"2B‰øž<‹Â≀‹¦óÑÆ7êµ½z»ã5—AÚþfð¡4kî ^ýÊ23±‚¯ XñRÏuÄæµ ¯§'´–²®Xzÿm©úûx2 ñë )µh6öj\¶D+l"p‰*F…A„ø‡”Õ¢t»¶„ïÍf£Ýh‰3¨Mbåårí@ìBwÉJu§ˆÀ<$‡ù›dëÁƒM,÷À)pun}ëó! ÀÜ•¼öêØ ¤·ØgÁt„$¹»º¶¡—vcmvúíY[ìz0R”cp—ñÃ0wevîcµÒN€¼^×°à ð1gÏŸ=“àì¥<·ØÒ?^À9ã]!Í(@æo 6p7Óñ-à+ÉÒ<9 eåç ’“kàï—¸åÄL€vFèáÿÐZ—Ýãàç°@hÜ@ÛÀm¸K4Ú32€Ó|kÐWp™þ˨þÛ˜ ,ùY +FçA @®¿e €»Üð‘@Õ@b @™ù$:z  è`=;$ä_0€ Ì þÄ€„÷yù©öw.¼sá§CŠOÜûŸYôžÿ÷|¯>ãþ€¨NÓmþõ~Wé3Šç¤íè¸[ßYZZI@HeVÆ íá …¤ ¼°Œ)s;¢AIócÔm²²»D ˆŠ-H¤ñ ëÅBsz ä9†jìuTy.0õЄ'jê£brÚžà]k$'EFÿ½î;9 +YœÖÝJ¨Ò¨å(ªbÔ¢o£ûÓ•›µ„h’+4â¹ÈK©N¥/†v+xd«‚#‰åëÔ7Íð<€ÆÞþAø÷—= Í´»0€N³±_­ììîvÛíøMA‹Q{@/ó¢®{Èo·@æ âÔ÷êÍN«¾·Ra=EÓÍF}O”B‰›û ;øñßþÅêß?Õ(æ¨7›*vge¥TÙ;h5[](I§m ÁdÉý8Ùútss-Ö`l©Aúso¬^Éáý‰ ¤O$ ‚éhRà¨y€¯ÏO_˜›_g* w˜Σ䓭 ð à¯çVÀp†·R? P€œÀ8¯@B³—òÜbˆ/¹Ìð˘ Ðú®€ôíP˜.€üL€òk\´€Ìñi&Àþ<…ž€ùE`þЛÀd( è €Û¡ «ÁÐL€ýQÌxêZtŒ\ @× +ö}žu-€Ì0±ÿ_à¿gÈÆÌ€Òý9,ºZ\¼ã.€¬à#›ÊEã?6€ð(ßÂìW˜ p×s2@Ø®÷˜@~>€ø9ÉtýÑ[ߨç÷éŸúxüçŸJèçŽÿÉ€Ú}æ'&óÓÉðÚ }"útáç#'vÀns¦ä¬x®¸Œ•ã£fm©°²§ßþ.}ZÀ8KÈH¯ƒuiƒ£€íß0`ÚÙ³ åüT+€!šax`¢ +T>–Ë„±è;9é"=H‹ Å£»+Õqà¿•jîÒ*2ÁgŸ‰8Rn¹ݧ14IEP@Ôy)(Rfv#ì¾")‡j§ #<¢*šŽ +Ò1’‘3u*†H=´Jrÿnú%úZ¤áãY/µyOh©¸“^€BîAAÁ—±ÅV*•ÚþÁÀ×Ó6ái«ìÚž'A·!¾‹ ]ö÷ ¼Ò×…×B|Fð)s£~pP«ís»Yßoˆ P™>©üW!TÏ 9""Ì„ Ž¢ »µÚriyv¡Än©[0ñ³ÀøÓE @@ÿÓü> °îÏõOßš‡À –¼¼z&F žûÂôy¯\4žŸQ |Õ¢B¾Ì‰XÆ Á -“(/êp`¼Ñíßnî +ûú —ZŠO€PNG°Ò[Rš}´òË'øE'ÖéCÏ'AÄH„…Øôq›gZœ°¦Û¯3©\<°¨Rm'@ +•©HXW%’žq0ò»ÂÍH—tþGÉÔDN·Öi Ö.ˆJ\D3„k +†@Ùj·h…G:šôDKØ?gQÛ¨È߀šba9Šq%ñ½AóÝjk·{Œ·µðÏÉ.á1XŠ×k++;;µà#¾n¡õ¶«@«¾)€n +«ÑÿQÛa MA}S¾Ê(ï1䳿p þ^v±KÏ€D9lÍw¦÷,ˆ +ÀT0S+«á8à•JåZ8&(¯“&é…› Òùîkó^øË/·ïã/°17w7$ >óW€Óq²¾¾ŽÓÿšÿì÷ç`:Š˜þ²`c~öÂì<àûjX&¬|O¨¿Ñ?zZÀ°Ü›Ÿ½rE f«g@ýg8{F¸œ÷l@:½´| Ô·s^Pú=!⤵¤[͈-=6%Sºþ<ä·ö®¢± ú8C6 +x;À˜QöÐmR` ’gQÍù™yÚà Z’0r-5†&˜³HðPÒ°‰`äWúê÷7¾›K3“Æÿ{ïò³ÿ 1 @’Þ,@ (bÿ§ À}wªáPf `ØÂð}E[ÿ̈@%ôŠé3üŒ‡ˆ~PúÚþ¨-³L¿Ã¿Þ.ôîÁúAÇ?ñ¼€¶ÙòꫯyíüÐZÊÃ;gûÒ8uk‹±Ü'Š”lp‚!`BèUì¯|"„:Vü£ÃojKK•ZÝkÊ€ˆ`4@,³_€ýä¸îÒ€¾'R¸HÊ»q7C=@¸$» ð7½íºÏ|¤Ó8Ÿ®©Æfy>Š¥BÏ( pÑÚŸ¨½º !>ØbáÔªJmm䔩¾zX\(OD½4%ˆ@\²Ë‹jÍ" ðTJÜcìæ‰%D'¿ˆÚ=c'+‰É Ø©‰DGp˜d 8j·öEµ°»œìtDh‰NÞm±ˆàJ¹RÛß’ m´ÂþÀq]DJQ,öBýè uè +ë‚mfñ«;{t4¤ôÛPÛ£hµ$ºOI ¦’&¾ÞTASõ@ب7ööjÕÊò²§‘v“hÔ© ?Y°¶ùàáoõf>Ðþ` €0¿'ºX››N³þŽà¨gër›vPþîüúÝ5ðs}þÊô•¹ùõ^ÇüŸäšq/@&a¸·zez¶×à÷W’,Â`À3gÏcxéøĨ9nçÞe3‚¸@§±M˜¥Ôap&@8€!ÑYŠ·`WX-|€¼[Ãɵ´Q²$)Þ1 + • Aˆ†ËÊøåŸH=ç~øôG(½ÊÍFP:‰H‰å › 'ÀŸ\,À $&Ô£jò€çX @Láê¥úì™ ï üÿy1õ, “ ÿ€ Ò/º…ý6ô,˜z¦tØa~š `w`&€þšÏ™|–~T&ËÄçC’|tuD¥pðÌkV/2IµäD÷Ï3gÀ…éw¦Ioàþ&qÀ( Lç%®(ʼn|ðætüyQtŽ^¸¼ÈÊ‘qg‚H-­×ŠKXp8:de{&ÀP&JA3¡Ø·‡ž*ÀóØ{ú„ƒ7Ò|ës)ÑFEBMá[ºÔ½€Q%¶Á‡BÀU LNäü†P`ÖX¬Œ°›&T£€š€‡ˆ¯v¹À(ÚæJ³Ù‘$î;±Øˆ+PWí4[‹CH÷Ÿ£Š5HEC%È Š¢˜Ý‡¯Â$Ð)ÈOƒãdЦp¸~|°ÐR+ø JȾ0C_«õ'pµQ«®¬ììØ`º‘(‡ 0”_ÈÛé6Ó!1zl%ª~Po6ÛµJE*?ü”Þ8¨ÕjLK¤Ûû1à &lA*èKà ho«x$Nžè`¯V[)—J»°‡¡Ñb|À)ÒóHƒ†…·ñÁÖæ¦xóÁ—^ Xq[sº¶àŸÀÙOD6WçޞIJa 쇶°Ü…(ôÏ1ðìÛ¬°±¾~w~ߺÆ =èW LƒwLÛëßo¶Þa LU¬˜`\¿/¿ƒ‰ÇŠÞdˆ™¥8£5={p&ÀlA§ù™mò P˜ án(Þh΀üDÚvX¸­†œ R¸-‰–™@À3._þ[¡ÿÀ<4.À©k(B¥ô}†F`Sèa~~åÐ)ôÿGcúÿµ÷-¹1̸Tȹ +ÿoÿh @¿ àvõ#;”En¡ÿ øþÛfðz°rBþŒ°‚=æõý“›-¿1˜OæFOO€;2¹ªéIêåC¢»Oo~’µ¥løîÎG—7ªK|?Äæ|éf’ä¨<Ô+Éêè‡Op|Ü(ìì·Ó\²¨«XÞ­Ø *Ä$Þ‚ºdókÒ†BH€pF€Ø¸À¨Âº„‘‚]nêƒõ*`mÜçÈ…× &Á\g¨Y+q +·ÆÔ$ôuxwkð÷·ŸÚAl¥¡<"¾O Ø$T—“æû3_!Oè) u•p爇 ÜCzÛÕ]P À“àt 8ÉÉßt‡i÷Òª Ék^ðôÖnÔv„Þ5–j2*üA¤ÌëJ% ž,üÆ7@qôÔë8ùÕ÷÷*+;xKöª IØÛS±ìÛïAÆ´[ŒŒf´‚¨:,¸R)Uj´F)šj˜›3QÐèc-¶¿Ì|°| QÐacnÎ~¡õ–Dxý¶€þ̘ý À]ÖôïÞÅìOÀ• RÜïBâ®düD€nŒ‘?õ aXûõìt¿ ï D¯µ-g3` + xixq©~tçN ÍIðˆ™q°P¼H¸{b&@ Ø4r& @Ìh +0Ò ‡»(Þè°Ä<1 +€:£!'F ö®Š;Ò…€føS†.©7k´‚îP5—o@)ñ*p1‰ˆ<ÏZ×.–1|õÕsöÿþ{¿î…à @6 P\úù’}ógZ¼ø]fUíPÌÆܾ­äq7*Ñ ÉÏðó¤ÿ_D‹p0ý¶ŒÁû€ÿŸwK:ç;$cö’Àå$\GtNÒAàï¿ „ûø/¡Ó1¤{ªÀ¬Aq“IþüŸj8<:ìÖ«¥"£ºh¥v\³Êoü +€ì¤ÅfXÆô³Ò{ ªäÇOc’^»€Ýîl.â[Ti%çŽn-ÉLÖÌÀt»Švb`WZÅ’*²y¨>ÉÝÿ _ 7úÃJ”œÎ +*UP&A0­wK(<ÐÞð­UÛJá3­IqnWx?¢Ç»¬ú¾Á£:¡}úRŽ„¯^L—Q<°²c¨à>ÄB_’ù*GGݶg士þÖ0¸ùƒR"Û;¯¾_[Y®Ôj^7n{ž¾¼ îsb•?¶¡š|Ž·‘à` šõ=,uáÓUC.FÁ(ÁƒGîÿ¥ÅS‚B*®Í¢¢ÄØù lÌĜƵêÊòòr8Ð\5ît€AÿKmÛNnzñÏݵ€"°0±Î€k8sŠ`}u­o¸÷/XÖç)0LkºÌÏyOâFð1ø ö-© `þ¯Mú£Òë,€51ºì õ_’Àì¥<·Üþß¹S­†Æ?$Öœ{óÄL€ÖwO!b–wÁ¬!>?€ñÉ,@7hJåU¹Xì0z-`7f„+˜.¤9‰U8ÍQèÄ(€Ë‡² HH +Nnä°€J’ôG(ZÁ¾À3¯W?¨î~õ‡Gcúÿµ»àD@±¸°ô z’ °øÖuAö"=© ÆLål€;ÿCò3x. ¼ó#ŒC" Ôž×ù7,=¸#Y·ÿˆÉâ½N’Ù‚>OÈ­ì‹î§ÐZß—ðÊ’YÒ$\†ù jáaŒ@àü$i7VJKÕƒv·‹†ÏTyè­‚7´lm3 +`ì=¶·Zç^ œzÀj¯ÒqÄ l;‡‰_" Ø#TwÉË0ƒÐ ”jç÷=¬CWé*ßð +8 þ¥Awi(kß¯ŠŒYz£dý ‹½Š¹“ñÞÍ´‚Fá^zëv(=y̆Æu!ºw=€ÊÀñíq·¹_«í3¥>~ñþÎ L<Ôñ!ø/|W“Y€‡þsØ“ÉË €­‚f­]‡úþN©´¼³¿Ï¾ƒ:`Œ)»=bX„ùvÓÃÇW_Ñèúƒ&+ +/ïÔ„ÒìtìUwö\úÞ>&wò ÆÉ„§AÌ ¤bthRšâ¡MÁýà`¯VÛ©,++8``©áùIbÂ=A¾ °n €n÷ïÍÍ­÷|pÙSpõJ{Éö¯ýT€µÕu<û€ÍyõÛAÖç×ç=!PoÀ0  €À¾þH"s³W®Ìœ,ñ#`Á à8€40¡ÙKyn¹@ Ío}Ï`ÜÅtZñ6D:©àrÄL€Jr‚Ö1 + ,Q†´æ‘óD¡¹µLúÂ(*O 1ÈÐÑhð^º9´Ay/Û@þ4 +àRÎàv‘JŸžÀ»1 ç êÜZª‚ú“à×ôþÞ*ï¾.ë[Õÿ¯ýMü ³P÷ÌLáçÅ¥´PÏà1’E]ûsN1€R©J,·²™$Ä¥™lÀ @¸æݸwRŒˆ`aú}% ܇÷¼úÙ0ú'äOµXN´ñ8/yÅ>âDòÀë~jù€¤»™ØúQH·-ñ´±ë#MyâvtÜ=Ø)Vö™õ,5öö B|]}8(5¡æþA³+`èÁ<”ic¨.ž*Ò~ 6»¾â õäÚqŽ#ØZoM\Ú¶ÐÙT. Ýz¹+á¾…ÎÆ W ¬0ÒÙÉÐ ø¨pO@`ƒ<±¨û<­Š`w3Ð Šp‹'Izç&ÈÃ/à ðÛ‡¿e‘ìa€µu{~çr`XİLµu,bwWW…øaxûü…+ŒãUÄü]”ÿ°d’'tõ”­OîÙ0gÈD€…ÆÝ€ `š àå(€TFÉG·«±RÍ퀶<4 ¢G@ÏVúüL€ìÀ®hF¤™l'æPxÄZNÚ›ÀldÔZ‚Z7ـ˗~B)HjYo€ßóô}xJêÀ päZBy7A×™€*›ˆIÉ  T\àµTË·÷ +_W?,ìÿw@ÎЛ`±Xø9ë ZÈv]úŒÌu¤™Ê °àv~&€RÉ+z&€Ý˜ éýÃ`Ù°0aiNïïoÛ§ïCØï]‡þt€ÿ#û]£²_sWlw¾ì!Fý,6cƒÂ/†Ú™ È[²\ÙN3=§Èa£Z(ìÔ[¢B*LÖÆ;«Ä@™tSÁ™‘Æpü¸Û¢Û6o} ¥àæm@¶n€º‚Ø' <Ñ•P§Lr9V¨ +1ìà sÿ“è­ÜeCÅ·P”à²Ý9<›xLqG­RJµ4Õ ½öèøÔNf³ ›xBg;l=ª, Võõ‘LÅüýeQ—r¯óM ö³õf'y[ h= à*J¹Ðw§´TÞÙÙ³ àkS€À|¾R‘H©X(€Xü…ÆÂcêÍýýýƒÊX^†à rq°¿»RÝÛ®ì…of&”"H£0 ¸h£<ÌEˆ±&R«í¬TôžïˆŠ"ˆBD§HBù òСm¸…`mnö]ëèÛa¸;7Þ¼¼ô §DØ/=ý.:¿‡NŸ9eîî†êÄóï0Ÿðþ„À æær>~ãm¶ uØ€“ñ™—󼨠2ö-Õê­ÛÕÊÅ +Å–«y€l&Àlcœbz¸ë^þœ ›À"tŒ»Xg{¹r !¾-ïÆéÞL€‰ˆ0 + À6Î@u´„1¶€Ë¤P!)c°£‚Fè0¸]žÀøC©‡ ÂÉ0z-€´üžÔí¢ðÿïÓ…¤z«¼»ôõ‡ôÈ'Ðïkÿlî° fp}3^h!çgå +äϺzã°dë”{3|P.½ÿ¾CJ,À ¥W*`Ò˜7BâF é+¯¦Ÿ˜¼_`¨_o€l×@H,À£Oº¸ò$©J ï:8ŸI\Z@}]§«ôË€¸‘q)ΘíJ¥ßcHö¼.ãôQÒDP­ã™†F-`Æ¢yž¼£#iݱoqe³ç8(0WjÖ Æéžaw‚M4)Þ`°•{Ï ÝH*ôGŒ°˜ÎuB£`sߪ¼¨@ 7)èì³H‹êï‰*Ð'ÁÈ@Œ¨ð$OÅjÓ>Uî§p .+Vàš„<ŽŒ ¤¨ö<ù?UK{6ßõ¡Û«â®`uùyô͸‚œ¢*ÆB*ôêD§Å1õFó5ûbý¼¬rÀx{áª2íW‹¥åáÿþóö +qÔ ²Õ~6ê¹"Z ô£‘«6füê×vWTÄʾ +±Û¿\Ìe¿Þ”ï¡Ø+;å)«¶„ü.϶ ÞTb€ÚŠØ‡û .Pý§Jzë&È—_z1@†þö_øàÁöÖZÏÀã6Ãpæü÷óŒÁI4 üþ¥Ô¯®®‹Ä(€óç§¥ÜÿË?ßð£íZDXÿ?äÊÆÖ'Ï…À`Z¯zzÇõ#à~º„üÞÏ2%@³—ò|`ä,:Ü®~xQÁÚ±½ed>À°|û.VgfªBZ)—Œ3s|˜—srëCÁÝNßúLêêGåÛÕkåÝJY\#W:0¥(ôXn˜ŠT«¥kὦ §Û·?P’üÇêJ¹¢D·v %Å‹±Ç &•hò‚ƒ{Èíjù›kýê$< Ù%¿ëF0–óPž¯w÷# +Üåp«ºTØu +åã$}Z!Ê©^,þ=PÌÈ{¾P=;áÿ¾ˆy³/Õru÷—ÈÐÏ'…bb€ ?_Z,Œþ= @æh @ôäœôU„7ÀèH¢Àû¶!õRÅ‹øÞ”HjDŒ4yõÿ á¿àáz: í!VýáÓþ³óμ!F÷$}¸kÀQ“i{ìý4ä”E!nu´{Ø çæÀ9Iz̆¸wy‚K{…%©°`úáñ!.u ?hgDwÂ,!A»#œ;djøÃH§$ Ùqà'=ÜH‘…éŽçŽ£„’BlôoÝâJ¡F— Yaúˆqlôæ[”“é »pôw(€[A’µP “þµK¥1鮃®‚½nÐc/= &ãÙ‹ô|n³®I]Üuz} žÇ÷úNÜ"—*®‘5—*ðXàøð°ÑªK±¦ãB_ä„‚œ—A.ðÛjî­,/•í¸‡#ˆмh€  Â(<`»B®»8û©ý©ï×k+ÅBy¥¶¿/ØÛad¡À|W:|ô+(9Ëc䇨ò¶>*^Å@$àÔN‰µ€«¥•Ó‡ƒx EL–„ò øêæö—LŒÛà|è¬ïùÌM îüÚÀ~þÌϼf +ÀD@cONv¸›,ëë³Óx®²Ðì•y;Œ] 0Yþç¡Í€çfßîwè M¯³ÞïdðL@Ξ½ÀùÌËQ/$F«žÌÓ%€Rù†Cø.@ª¼ý7D¦ªÅâºsKñÂ<[›¡ y{7XøÕ{yÜuUå[€[BYÓ ôQ•ñ<£äÕC˜ +¯.g^"Qöí* ¯w–ÊÞ '0q‹!*·W±ÚÿÍÌpCúk;‚äAÀó–͈øFnïRs|¨–ªr¥÷“ëû —¸ÆÅ…÷noð=DC¹!¼ø÷jнñ-ʾ[øúVÆÊü';@L` €ð¿ïøó¥âÏsƒ£Æp]DáF1ƒ59?€×v/Ä#=üíb©œ€ „F€Úô>õ1o@R¼OÚ,ºN?5©û_’™ûóbÕ?»s›CônøûèÏ ¦'`—P +N7”÷ÛÆßZ©lxðx`G‘3Ë8æwšµ¥âN'@[¦m +ÇF~…ÀÑÇG¯vµ[ u ©!N‰Á81“[ñ04꾕sS$˜‹+ê²ôùy—|‚$©Bk‡Ðñ%jdÄž +„­s4ükO0íéz­ˆKÙ§8JV,L:‚7¤ø#`ÚžŠ=ƒñ®Ü‰¢ÝÉΠêè´[ú.ôÕèËèvº¶ö‹Ô(S±+%V]ÒΡ€š 0 ; @26ýFCÚ»4í•ÚÎ>ª»5zîÒ7^ø+å]S>Ìh}’ïïí‚øµÊҒкV‡ ¨­¬”YX`Ž£ÛT“‚•yMÕOQ-?pƒö)p_ø’©€aŸnàð©ýíð À4Ú~~·œOSuÆéüw…úœW×èØWÜÆ½a=à3°¾Ê€Ñá?–ŒTÿ%øÌ]aeá­­ž€_bð?,?ˆq€Ù\À Ñ^ÊóˆÑ*³|‚šÌ*¬ÎÈn•oFº®nf€›7*L2°”úæn@O0¸ûÞNèÌ!Jš ÞËGHû-kÞ¹[¡Ö„@˜øE]‚zQaµjî[>r4Xí&¿Úݯ7,=ÜU +åî[üˆ€BzÚqG µ ¢ê{= @4„´˜LVî÷«SÍ·õXô•¾˜àQ™`Xú_30Öw¤¤†þ`†ÿ°äð†I€< `ŸÜÀ°èiY@’ïЗôÑGXôç`&JbTÖÀ<>¡Iî y£$’räУ !BöiÁüO§uÒ!¿c`Î$(À…w¢Ï‘‹ÌOàBäà>îÇD[rÎñ³‘IèûÞ‘€xØ´Ç3&p™ ‡ÍâR­Îbðºà ÿlͶ%^ç=á~á[í0oK Ö‘¨ÓÒÕÑþ•Òà¯h)ÐÑ©]:¼î~«$Š›=ˆ×}:ç‰p£(tg»Ð×â#BO·éøÐ…ˆ °ÕU¯Fn Àd=m¢(êÅr 6ÿ˜m@MÀô`d'Edéý”*‡ªâã//>©ÿø(ýñ‘‚ʧ +Å2Ÿ.”P ÕI®§Ó¥³%üþ¨º1¼ÙÜ߯,‹ìÔöPÞ…Ù ;ö~a²R`çþÀð:þz‚k@¼^WÔ^M8/ÔÞY^XXZ^©Šìj¨ˆSÔë{û*w¿~ l§í€JÂ𵊦ÕÊú?¢ ÚE!vT@uEÍZZ©Ñ̬ŧJ€üùòáöƒÍÕ9ÀC|81 +À€AÉÀÿÇ:ØŸ,þëwmˆÙ~Ví÷S ¾=;7Ï€@87ÇâtŒ`jàêÜ•·M2€xykÃÀtaÌÚ¤½”磅A5,ˆ.mÈ|ÈÑŸªÌ˜ª.ܸ!e0ÃpC¤!y„ܾýÕh‰« +ð¡ÐÞ` +>‚ÿhÞƒ]/_«ÚŽoF€Øp%\ nÝYzÿÃ’tq,"·?´š ´Båß*ÿï3={½„†è²oˆ6b`O€/cÐÏ ¾‡ÀÙt¨\,”¯ƒõ7o~@%`ÐW}î|~>!N|;(@æH0fü_Ê–°åú[E¯’cž @ü ý¤:ƒšaÍ/ðþêz·"ö„¤xŸ@S3€\ZÑo¼r{‡~€_ÿ€LO'Í?ÞéœÄKî·=$ÎÉ(®I/Ú—ÚÙ¢LhO²ä@Jí#Oœú—Ç ºha€õNåõÈÓ8TÜñóÌÛ  ´¶˜É1tj¾èŠ\u&ˆc(Í•Šu7?`ÉGY(Cå ŠÝc¬Qýì`mK àø°M{ˆq›tÿЉ¢@gpö4xšKØÅ€”¤;RUp šŒMx×A-6y¢xp\™£ÎJÿQ»k#ˆ‡Gdr¥RRÅêòWyh埯öè¨d·»‡Ý£¶XÌBó"u;NÒáWŠ Ø“ €3Pìr®7ßõ}Ê¢«¦ï«®ƒºRïT+µÝý½ÒÂÕ¥’hÄ»¤¼´\Ù‘þ¿§Mé•rÏÄá,ùtöÃèе-8 @D (¦\Ñ{½\³é¹hêi(?I¾ÜÞÏÏ­m=ø’©€?g€uûý’»ú@Þ>óZÞüÿ°O£ýDñ €5}f&@w\`oÎ?§àÚšJZƒüµÀ'¶ð.óÎêWà ¬ˆú^ídK˜öRž]Œ>’d@çï2 €° “V|Ò ¸ËYŒwîˆ@f¨ì¾·£ãÚ©ÃP9i@÷ €¢VhÏ|tá“êrgÿ‡†â[»¿c(º}æ¡âñb*µ€ÒB;lØ¥™',[üõèS}ã‚ÿbñƒ›7ÍÔŒÌÐÿJ$X +=€°„Øðæ€ ÿ{=C€è0i°ÀÀßëèÏà&0€öÛäПWÉç€5éˆòNH/©NÚÿý:¦¯L¿Ã”½Ó?²3³Ÿ®"`¤7æÛc®ÀQï+0;‰Þkƒw„“øN&ÙUJ8x!„§•!ýPdó.ØçiFÁ¿-{ÂÐòÇJ÷ð¸Û¨•J;"tb¨ÃŒtÅuNXmÙAB’*-ø'Ì KRǰ¦x +±ænÜå*>)$T•®ouÜÆ×duöHMX%ˆs~sæK¥f4‚ ï„î1Øܲ‹VÐññ s¨†#£AzÔÉ´‡Û¡-eÒÂlzÈ`¾AReþQâýEùÉ!F|#bJj¬„²‘Ìý(]÷ЫÑþ"‡Ä ŸC»•ïƒZy ìÆ|/ ÆtÒ߀ ô¤nàÛÏ©a~@}§RY®ÕjÕÒÕ«…be¹"Õ¿ZÙYY.Ì)öæbLíÇxA«ÿt Ô©,Q .Íîƒ& µÚ“WJï©D²1,À÷¬åO’„ò .ë›z*`Åmõ¢à^@oÿs»HAäûâå3‰(àŸ‘*s}S¸ 8?ÍZÞBåÙÕù˜ pŒ$Ä?!jájÖàØ–gàK Àw#2ÊP.á§ â P‘8IrxàYÿg„ý˜·x À[‹¢7b@¯ œ`IÂÿYÔ}-¨ùll# · 8OHèÛ> Y^y‡<ü@ztå€N#D€ù€ÿIõSÞé’½ìè3É®tN $'\#Y0•¾(L¶”9n™ ¤'AÒS:ŠC—ñrØmÖ–‹;Ñ3k  +dpƒß +rÁ=¡¬ÐM÷qäsJèIøm°j¼OPŸu¦8—¼ +HÝL¥1”ÆY¹ƒnt¹p^A9Kúº!j‰ð©%Üoï­¬ì)pÌšwváw +Ò{ê`µÀ C¥ÐŪºïº dRáGÆ@ˆ­-̸"@)´^¢º¥Ôã2¡{0&,j˜GûEx&± FšÇúÆè4a±>;b+8! ì˜0QOMÚ{a¹RRÓ¸ò‹µ,þB∄(³èB­²\Z©ì­,/\]XZ^./W*¿Z^^.-,¨È½=:övn4|9€O¥Bkh# €Øÿ°S³¡¸‰€.xÇ:pŠÈO’/Eîa—gào…ÿŒ°@êØXÈ2YðÛ‚|!~oÿ±Mÿ¾Ð'0I Ÿ:ïà?+oذ67}á<‹xJ3 _€ÓºFÈ*+¬ÎM¿ýö•Ì ÷•×Qo*øN€øœ=/€­âåL€Ï/†¤g‚ +ïžÅ°8` ^rÂðÁî{;9¸ïÆù ZþQ­Ð>Ê€ªŸY–&ZÈbQñy‰r÷|T´ñš’Ô +7„vL°Ü†vüCÏ>7NúK#,C>9©ö\„ÿÙ€ý@,öÔIô,`3`!€l@¾ OI¯Èrð ø3¤õw>tÃ3BœÔØãºÎĽûÂtŽ(ýuðSÛìøÁŸâ0€øˆ=B@ç¼®‡âBbÑ€¼¤¤Ï „'픥¶;:C•®ãdãòxît5óúo€` ´Ð ŒOÐ}.léF£•,ÅxCSZšh<)Áœ€}ëP/ µ)]÷@Hg%¡NºqŒ³^`ïLÒl.QAúÓÛõzGÍhí//´Õ6¢UÓÂ`5ê:X}dG~·ÌUP9'·9 n®»%|ÏO¬ä8 ‘JÑÁÐ}?Çøü1¢éf~‘#ñsæ'"¡2*ÀØ +ðŸåyÔö)J1(Àù dšü£•ÒÌÕ…Òreg§¶+õ ¤hïÜÂ1_ǃú×à6¶€¯u®Õ*¥¥‚@ze¹ n¾\Y®¨ ŠXAqaayEeíè" +‚üG`8] F€ü*×ôà@‰ óµ½Ýá?ƒ–––<²@w`6PL–„òãåˇÛÛ›kóó«" `@òHø¿zOê:.{Âùó¹Ýú¿N?Ö;ôc[Ü'ù']§ ó€ÿL„`^¸íÉ…)é…¼ÀíPœÛ›,ýa€·Êÿu’@d€’³Œô¢xúrÕµûÞI€¼„ @n€‚Â'-t0 Àbæ€õß]½q&®Ü8f4Ó¡·óÑÛtª@Šõmo0€¡´Ùª=½ƒ>¯:ÌÈ; û1¸ƒ`° `PŒã*- Ž9U:”Ròk‘Z—“`±§Ÿ¸L>exõ•€§ Ûáa³V*ÖìšÆd€Âvk±`6Öok²GŽ4WôØ#¯ÛeØ;s +ë à6u“ 6ä +Ì•üx>•úÌørÀqÐ` +`à ¼þ i;”g²%´Ç÷Nlåña»Q«5˜™ Ûnwà$ˆa]|„6yU*P¤Š<5ßEí“0'a\™ ¹²€.Y`X‡‡š¹˜ÑW¯o¦ëÞ“C5¨åõ`1}CÔ%Š ò¼p¾à&êm† Ò]0(†6´x +¥´0µ°\ùUG@4vÆî¹\’‘¬¶ cÅÞ« eúúWôÓ²¼RÙ©TÞUQ€åå +eí‰VÔjû»âÂ}º>˜ŽZŸÊ¦°}›0Ø‹@$¢´ r¡hÅc ß)’`~‚0àštïµ­-¯àyb&@c,ÓíÞÛØ¼·:'¨~MˆßÛm8ÿcø$Ô¿»þOé#èÏ> Ö0¿zw} À&>Þž–ú¯ÒpÐÍñ À +ÿ É,çmp£xýjãÀ ¬_ðß‹Ÿ}9 +à9Åp’,R½_Ð`¼w{Þwàú.ó€¯h»Æ»ðÜŽ±¼7ÉàEÅç}¯ÜãF ZFŽPƒnžô û(ê¤`¤@Nìž ðßK§y€C< ÌP\¼3Ô› @¢Úb€Y3`Ëb0ªM²ä’§í¤@ `¤è%?M ‘€Á€ºŠAô\€(d;¯·!´íŒÐZGêDâFO—8œÅ¥öæ%gÐé’¤Œý#Šé$éw{Ë¥F¿"0 ¾ÒM0Û¶~Ôjî´ÚÐ…N«ÕhÕÛo3H&|”ò.ptJγëc ÑìŸbIê­ŸƒÐ@ºµk¥^D OHÑ>)é4D”DAO¡¬ð´ÉЯf™œÐNY@—Qi#‹xjH?nS7–æà«7›öã£6]UÂ/ÒOïVÛ¦¢êÛc‚~S­0 ˆ@{p°Û/´¯ W Kåå©òI]ßß„þô +¡aRøuÆ @˜ vcÔßÙ)®^]®Öömmµ[ðp ”¬ªR…íÊfK>Äë€U÷,0Z@<¡v ÄÊ,!PX`h¡J #A·O§ å'ÈÃíû›œ·yÿˇÁÿ¶îAÂ@ {oÓìÞFQÏ[¢ g8E°ÌßÅà‰€Öm˜ÆpÆ‹Ø pœ$Ä’5üéèŒ×T¯5ï|òx ügÃà¥à9ÅX“d¤ 7 +@0e úÇÛwˆ ÀõF Lp»<8€ñ;,Ïå0Þ0è@]9 @øþ§óô|ÈàY-‰Ë ùÄ<-Ê<Þ /á˜ðß õd>€7ùü} (‘Må›± uìí|ô6ç“,Κí¤r–iÏ_Àá?œþuáýŸÄ‹w_˜Îüu2öŸyÕ{Ÿ \¼úªâµj[Nâ×!30AáTÔ«¯¾–íîH{ä I¥ ñ]eÇgØnî-/{*`a”àTpx,ð²©ÿñ·G‡­½•ƒ¦’´M«…,hÓn ‰;!XÉBÃ: +3¶ Eè5×µb°«s¶a Ývfn‹:@! œz::MS”Ñ Ã…î0¨®ÛÅÌ +^ÒXn•]@d‚±ªb=E±¶ïŠ1Ò$ã - i9@qh€ÛÕ?—À=ÃGÕ@^šl €Aآ⿹\ÍYÞ©qÜ(€A ÀHÓŒ>’ÛÏbï“þ,Òý‡,7¯³ —Îͨ&sv~1¢˜ (KÐÎãZÄœîÉ{™9Œ°x>€1b/€ ?ý©Ý$Òÿßù›ÙÙØ%¼Òz›y¹z@ì¶5?vÝtŠƒäèºæç’Áÿ€ØšÐ·Àd$=VDÅ1¬ËcE +k§^[®ÔX¢F[·+Tsç6à%¤æêè°Yß©*ÉñQ§Åp{­Ž ·Ól*¹4fÀÔ¤=¤T Ö§(¿\½æÆÜ(_-ˆµ›ÐJ9„•~ÔZYç6 ]¿ÝuÀz¿0‚¥錂¿æÔñèé#=‘O`r%DÜ€ZYA˜ÊÜ8&pÈÐ RèË€”Àuû­îÑ·Ý6sâîí·ø¢˜•Ï3%ÆrdC¶Ãoù¥öwXK¯¥G µÃ‚Î= ùG +ÔöªËWgpàcî;íé.?€6%dn€† Úp `†_s­R*¼1µ´,Õßà}¨Ié×FÁplÕÀ)½ë³™¿ò‰Ž(L.³…3ˆŽ”ЦPbíÜ:mK0?Az)€Õyá'³>xpë§OØÜÜZ[½rÅß^t ¥{íü™ ÿ±èòµÓ§ÞX§ÿß‹êbcs=Yð8þÂìüÝS,jKûcË€˜ ÞLöDû§7UàÂù³™®‘€í¥<“%2eèJl ð‹‘£†f¼UþNóô|Æèû¯'Y|hvß ß0Â0rLh”@`ºo¼@O2ü_ZȰØà°ér3Ü”ú߃2Ò{¤=Nz›Nó .}ôΑl¤`\//kzC± `ÄèŸòXŒÿ¼×ìéÐCþ,2”vP;¢Äñºãé&–ô«‘„GÂx‡ãÙ{Btz\‡¸ŒáR§¹·\\©·…P€ªàËhôé€þzxˆ÷úA«£¬2#-ÖðÊ«'¡C¹|¥Óþ)¶ub­›~yN\ë#BÓëQ‹‚Ô†¦.ªp,5ݙȭÂ)’£ðTL¤Qï +Yqº“ÒÜîv;, üøð°#ÅZ˜fø ©(ÝÞŠÊ@õT­ +eº'v<õd݃ùÂT„P|=4I¼©Ý´&Ô¦ç½^Çàq»ÅIA(h"ä‰9Š¿ë6ý'm/|r* P}@¤û»g]X¼¼„iùWRÔWv„áàØDÇ€kÌ2î Øú¥ú+ÝûVJ…©©™b©¢  .lW6ÁüîŠ(Eiyy¹,•^à¬b©,iû†zJöÔCÄLöƒÚίªËx– + 3 Åe”Ú® +ØÝ«Ò;0Qª ëcK§“›äðs.÷ïC¢ @»j ÀüìÛÀ¾Ô~kþÂ|ÛÿÏ3þ€ó“À»«óëë,Œ¸2}ám½‚Xèˆ/&'„yr±øÇ'½çXDôSBïÿYL/}žG 1=éY„x»gñ´$ÍõØp € +Œk§~%cèù§1zÓÚ24 ñöíÊèy^p `Ü<JAŽ €Ó|2 ðób‘…z€À†„`Bþÿ`dÖ·ôÑÍ›à/N€aG°÷bŒYÌ(‰Y¾À óDr¿ 20¼yõÌ…é3p;$áΉtú|(ÀÜ$@`îsä“påÈþHž$ÇÔ¤œ ˆï'“ôXÇäa>NDíÆþr©vЕ›Â)Á•7  £ÏºÓN3ØÒÝl2J-lÁ3Þ !•¤%¨ ƒ+æ•¢]ˆ +¢»DëÀfk÷ ?¤¡ °ÝÈOУÅ& ¤ÂÛ:K«Fµ¨Óî2¿Úp|ͬdäÆk/ªRù¯Šä¶6¨Ø"¸c`WÁž'È´€û4PGá¾ãh•RaÇ×¼‚|Iâ>úöDÿŽ>Èô•ùùuV'4æ¤ÜK€·§ç~M™¶ð2&üÿCÿó$åâ¥àyÄÓ“ž`äZ<ÉÀ(€Q¦éy"/â0< +ÀÇZú>X†æè¾ +ÇÐoeç|²ßÍàF(ó³ød``@ßÀ` @Â?ºÂ @ßIøêA™qf“^'à:º­»Ü„Ô˜ôO`æsçÎ]-ËÄÀ!ûª 8sî•WΛ*”*ÕÕë]P¥{;Ì!¨ƒ¿‘_Õ¥¼;Ì#PZZ(ÌÌ,”*XöU§‚½&‹ >€ÿÓ ñ3>’û«¸ÞÓ€-wd>€øÜƒHSÏzX ók„p?pN„ÿv„¬on®{fPi¼&@`ýHqkNȽ{XþÚ3 Þ €T ¿®~•±Ár€Xðxéð‚ä1€‰ó|H‹Šöµ-#G(ÅÍqó˜#¨ßÑ ,…þ?`XX|kñ-Uˆ`d€x&ãÍ1’ÖE0°Í7P†­ +ûsRHã¤)`ü÷˘ä$¡þ d3ÿÎϾóS3÷\P(¡´ƒîÇž,œ4 0Ò“12#¾ÿ8Ûû’c6x$ €ŸC‘ô\ÇPôÇŠÿ°¹W.í0A­ðÿ˜¡ì†Â¤¢£ÇIgÅ&Ï…Ò°¿B (Ȧ”‚R¦Ü3|’—œhÙ¤Qª°!ÔØŠJÄÀ;Üý$M_ ç@8 ³Û@}{Ô¨¯ìÔѼ»í&Cº­fCcMãCr‚*ҥɋlìé–"šÈäB~Z`ÚÕ¡8[,ÄJbì _ í¶ˆp%¤çùù»öýƒ~èdÄ×' øwñP§Cf`áå6ÞC[‚Ö¾ÔóµÝiú;Ë¥™©……%–†òYYæa:íR›.5>ÂôFL}å?\-*éŠÊ¬T™ ¼¯,M½òÊxåÜÔL±=ù& ?¾~æ*ÛÄÎî.%¯Äð?:–õr/L‰å/¯ÔvM+” cãÅ0ðsêm‚y>_ê.€µùU~²<Øz°µ~Ò0åüy©ü±Ÿ?ÿ‡¼ÄP¿I²æ€õ»wY^€Õçí,³óó¸"Œãý ¡wB¨¯r®Ì}¼ù €.~uþûwä•×¼°Ä‡„m/åÄÑ—žÑåà(4dR ŒeP†¡Õmèá«a÷E|Æ[&®Ðc*œQéJBÙºü>G|_ó ‰€ÿç ú“ˆ¸àúBq1ð߀tî1€¤þóÚ8àS:³Ç) q¢@Ê'^A3€1iý&žúè8ãøÿÓ³gDþfØîŸ ¸ Þ¡l“æïÛ0Ã{@¡9Qùx]%± 1= €>ø~öL‘×A÷.OœK{õýùh·F#ú¿ÎÂ7Ýò Ý[JÔi3OÀ&úo€h³ |å_!È€NÀ%‚tÓàJ©Rʦ ʉ¿£ÔîEr`(=ºµ/ ZXÝît„£ª¿Õî?î6k;&­GW-Ê(dÑc£¸D4(žºt¢›_ AÔÆÝʧXÚg„XB±mBí=ä.£$­ýó=Ù˜û;#a¥b%ÖS¨DH,É̉ó¡ðŸu—»‡îŸºƒŸª°y`cÈ^U8-$¯§¦® +%!/è_Ý)¯¬üj¥ÂÄ@¼À6}µý]°O]é®z 3SRó—Ûe÷ÝK.I!ÅëÎjüÊÅÑû¿SUI;µŠxf†!ؽÏøUùWËz› …«3SS…e*‚­p/×þÑ›ð\J€>dÀ6€ ù™@rߣ’À§Ÿ~ú gXOàÞ½Í5,îú·âÞÿš·ì”P~Œ0÷ûÖ×¼€ÀÜ• oÛÀ0É 0XÂà +óÌÿÓ– @zUã5€WéIÄÛK€gCKNÆø<û(€ÀÏr©8b€ +Œë@Íÿ>>#ç艊ÿæ²n§K‰rçQÃ>’ïe€!ùyš g(¦•€ßº±¸¸(õßèoäO]vT ,ëƒY÷‰(ccsBz™ú¹Á +•|Èá9pÓ=OÀòÎ;tè £@ˆ_ê¾dʾ0ƒ?¸®ã€œïA}¹t‹ˆ$À~üt¨Ý9ID 'ñ\Ǥé•ÎQû€‰€ê-ª@Œ®l´t™ ;Ì]¶o½×ÚíN»k#·’ é…¡Á;Ð5È>¾ @Q¦dÕ0,$’MéB÷FÝÁ^6PÛ$B 8¡q«~VàZi¥0U@*ü?n×wvêí£o™™bÚS_öÁ­@‘"Ô$Ýõ¿îÀp? †kê¦F®É ;Ð# ù Dúbº]}Øò1’(ÎHß3R~‡mÃ}Äÿ6ˆ0ð¡*OþøšttÌò;µêraê üíJžÊeü„Ö+ ëG§W +¡sýÐ߉wtE²T\˜zý©‚pi©°T¸zõê’%]â03S(¨XXòÝéà’kUÇpª¬T—Ë +¯T<ÐRiáêÂÕ©üDt[èOçÄä Ð7ìÿòS"ûFþtØÚd|þꦀn>øôÓ­û8&'ÀU€M€+çAjöœ! w:Õ@À=kf" ùééóW¦ß¾@vûLê0ÞŸ˜ŸÃ0¿¶¹½Ž^b[ÜÀJçí *Àí¥œ*Æ•¼Œ²œ²À( €”ùQ£2˜`{€±>ÃçkÈÏpb&Àà«ðšÝ÷x¡QþFF͘îßÙ $Í’z Òÿ‹XNt`0tõ±Lͧì‚]¯pž ˜aÉRÆÉ¸?Á0¢§Sv‹"Þ™ÿÁ+gèå´óV'·{Ÿ@oºàåW0‹L8ï3wú‘qR\ª~bþ ÉÄì•„çc‹OVò'J»µ»¼¼[ou„¥‚2ØtlüÒe·-ÈâÅF÷µgúºÁ<€ÇÝ£v¨d‚uW:ü…ž^…7ÐøÕ]”m[Â30´jÀ<@Ÿº‚;HóG÷&1l.‹–I•êñc)ÚÊLctëqç`¥ÌºÕJÑ"žàõÑðÝ£'VìI¥ì*ž5ü•©•Î S*ÝîUˆHô…òõ-4¥ÍóPúFší.M3‹úöÈÌG ´@&ˆã €BÊç5ò’ÉØ¤O Ž+€ïòÂÔS K‚«îBàʇªÒÕ8ðÐì ôC‹·^.Žð«26!ýÕ« ‚léìo¼.ØWp¡ ÄÏ} ÊŽý€Ž…`µš8…Kî3Vp‡µI(U¼¢DRO  &™•LØ’À§_>Hf#~N¸`€Ôò ÜÚÚz°% Gû_‹‘v} @¢ð–Nóã„‘™à.æ<öæ¯0 €ñ Àê XèX·`vnÕ€iÞT½Œ~¡õz{.ŘЊÆK€g–À•œô,ϾÀH€a €GüYæ8Í€Q#æxñQ#|$'Öø®>!9€ðÿðÏ À"#¾¥Ïnß6ŠñŠ€béàOo÷‰àü{´Œ x>>óg_í-ŒCÏ€€öq¶@<Ÿ˜œ myѵ£ú±Äd’­ð{âÇr·BÒsEŒÆøñ"¼¢ `¹Vou;¸ª1ÍÕFKÜÂÌ.ÌŠn)²­ƒƒ¡Ÿôá®Íh @$Á\¼÷¼ƒÁF[»F¬ä(ÊÒº…í$´©ÔÌÀ” ùÑi ÈEõV«HG)RõÝó âéŽ|Ô8(UöÛâ-Æq¥@+H©Ê‚³áC½Š^GÃ`JIq˜÷Ý„÷uEC1fè ©Ç6èû ²ýAÅáÝ×ÑWÇWŠÃ–ÕߢϬý°«¯‹>€c¾·!†N:ù…½V­ƒŠKÒÚK¥r¥\Z.c ”¹¯ô»>+°·Çè?ŒÛ€òry©0%è¿:#ôŸšzýܹ7ÞxÍÿþ¡eÖ¥ÀuÐc 0åWñî£ ÿje¥lÞÁ €+ŒÐ[½´pufjf¡¤63ø•oN”•¤ÿ?ÀºÏfÄO¸Â`Uš·-_nßß¾/ +°)µt…„À£îöÞ)€~¬úXt×І`6YÄ.¼˜€©€¡ˆàÄ¥¿€Þf½ÚÙ(p?ëxixVI¨’“Q€SÖãtï$/âðâk(Ñd @º’P¶.¿ÏQÿ|BøK°€þ \,z%@£¿‘?ëØÍÀ+}x÷½³Þ§S}"qdàœlnÿ ’œ“¥-=¨÷')û + ^QÜ"Kì‰!{Šæv&aH­‹Ÿ‘žÄå†gí=oçÇŠ4èvý`¹´wài}Áw¡X¨a0Vv…i€ƒðh­ÆÁ^<:l)½ð:yN+J³nº@ôk¥°­]Êõãã§t–#$Ï`X°{Ä\>Ì/Œ-Š jÁY”TAL¦*Úwë{+åýÝö7 Tý ”b¬Go×F߃[A£Ã2À“êÑ=NÁÉÕ¥¢ šêçQÀP®¯¡Kí¢Aö? w»ÓƒúVÚ?ã%üÚ•š'2wÁ®Ò=êv[ívGiF€= BKôû*ýø S禮º;mi+€{ðu„¬,cz'­”pº L´ Ä ÖÒØ ŒØŸZ@ÿ›˜º:sUðµ°´´Dy`;œÁ¼U_¨Î˜¨`y¨橸´\\.¨´,ËP}Ênï©Æûc ¤úþêüÚ†XÂö6úÿ3êà]ç¹vô(€¹ ìÓþcæè_æÇ‰uþ°ÿ‡,Êþö;sº—À~”ïOÈÇ|VUÎùÙ!'@¿Ð¼àt¼òêyá>ëú˜àí¥œ& Tr’,R½_Ð`¼#KOÝôÐwÿLkŒš °/*þ{] À4cÌ<æjÆ÷æ`É,î`@²ýÝX?Áÿn@X z½÷CÙ7¬YÌ 1>fIc?Å0aJ@ +¼ÃÈÆÿe<$$Ãq†õ°0O ãÿÙò’*~&ñCÒ9&î!Šv¤C¾/Ü™$ôE×÷˜ °%½V|@qîû—XáÖ‡!÷tmÁnàø°Uoµ±Â3îа™)Ô:pXac>— +ê@/8ŽHÙ'©€®Î‡v¡3ÖK›…ÝÂPš$v ‰è…¤díýJe¿)–BQªÉèÜ‚j¥vï<¥r"·ñ°Oxh(ɹ¯vFÀ ÍBØ<ìÿ1¾ ôm”8E:t#Ì(1ˆ2Ðs‚ƒàaÒàDÉ £/ s®VåJ± ¤q^*––ìÁW*ÄfxsLðBqæ PX<€(Aù²¹´T¸º0£tvÉ”°JèUê¡è"¾E&Ü‘ï"t!øÇ× ²¼ò«åå_Á:Ê¿*Ñÿ/Qk¦Þ/Y*þ˜QèI8ŸC~«þ½îo_WW7é!¸ÿÁý­­û1pã.V[¼–ú±b #î0Àà©×76°¼Í(S€Ù¹µlÌ]±ÁjXx-~ÒTÀ¯¼ò&D)ÿ>½´<£$HÉËH ÀäµF[ò`'ùs® ¼ždø3¬ðýÏÿ„1:ðH oé1€€±@³eŽè‡zz›€óéÄŒ¸áݰ9Ù0n(ÀÄ‚À|Èâ÷: ÞŸ¼ÝŸè,2©úÏ ÿ’ø!ÉIh2žýñq‚@Aè±;×JhÖÆë°¼åm àJPº}ÆÅÎ×Lè2( Ð&ôDyEA¢mhâARX„‚ÛûË•Gž†ÏeÄÔ‚.†æ 4]ä'MdWóü¤TPŒkÓ{.ˆh§ÒÓÏÃ"Õ,áxÇSÿ<>êu0ŽÀ§º-'¢F¾>•Ï7§J‰ ¥Õj뫆 : LÓg^YYºú:¾ú…¥ÂÒBIˆÍ(|‰4ñŠÂ ¯A¬£ƒÚ ?y)ˆÄKiìôû‹ðÒûµ° ø_üã¨JÊÚ?ùôQIU> ®U (íK85õúëWK4Rwñ F2Q¾ÄöK0,ºÂ0?·¶ùàË/­þc0ºþÓÆº €`ɽPúµ‹¢Œô£{?P€5ã¿»®ÐpÁøáÊü [(çüì¯ï†íüä,¸{.`Ñ€—>Ï( Qò2ÆàÙG/Z P%ýùÖ89àà<—ûóH”û;øsÍГ ÿ¹€ë‚ÿÅEšiô7òG˜ÖC¯ü~ò‚à|¼À™’¦€ñ?psœá%-ý3BR¿Ú }ÿ€<ú?/¼®rb2ø‡Š<Ÿ¸éì~4=Åà“ø¦Ÿ”'”ú ›½ÓØ«,ï5°Ÿ³ Ü­[Á†ƒsž½V°ÄiíÃf«­Ê­°t'Ø—ðà (”Î.èÅð.h‰ƒ#:@˜(PZbâb’)Á;Áj:Nð’w|j¬,³:+|§ÔÃ'vDL…(”çöá‡å¦žQ'§vãy23M£ÿÜš#\× ‡4®+¦}ÏH¨ïˆ¥8}(þWyakëkk±~pWy‡¶„}SC/Þ8÷ÆÌÌ‚[J{XíKâï—+¿Â‡¯RFA'1 +»ô~¼Ô\EÄ’ÛŸN*H‡0(À( Þ:WVª ÿ2£ ™PEHõæ”Jåâ’Š*EaSoL‰—,,-—!¦î'˜,¡äûc à€E`k}~n~uu‹¡ŸnÝ¿¿µ¹µó{ @—ksX2ïÿ3½9½Kõ’À?;ß½»º&‰;›ó³tœ÷¬ß8ñ™Œ[˜öœ”»«|l˜[Ë|â•åG@¯~æèQF© áÛK9E¢äe”àÖ8±àŸ{-€SfLW*²uù}ŽøÞ×8!ýaqqñFÂ~¤gÅ»Œl¹} !½MÏâÐÛš§Y°Ð9—Üsâ ¼¶à€¤=#æ~>ZÕO«%€pÐ'å}>á!xŽÞQŸtK7ýSãgõ3ž: +@ºh»Q[®ìÕÛ¾ðQY@Žmîß¶À<@èvèem2gwÁH”nŸÓPø# ¦¢fÊq²‹ž‡à,g¸a…š¡¢DcP}j•1>Ôq:&t§}P^9hz•\À“´LQ4Â¥ø©l& | ö´â3{¦ÝgZ$JSmj˜HßÁÖ ¶ÐkÂ÷¥;]a:ƒ!‘ò¢B)˜Nkÿ‡mÁ~£ÕÚbzch^°µKý^Y.— +3çΞ›r¯½€@[x^„8‘-tYD€iì 1&ùÊò{*ŠÑùXfD áKÅâ’îêv-,õFé_)“W ¦S ˜q,1ÿ|«$ü Λ)=*úÅ"ø©™(I×}¸O[|ÚZÇ`}“ÈØL`ë   ,ýÿ˜(,:².°@@ýè÷)Œÿºêw`8æÂºØ’üa¡àÞܬXÄ\\Ö”_U€ñ?YÒd€L5’ðí¥L–„&Ò³ñ„wßÁ`Ä(ך/à c,Ï<À÷½€ª5À3x‹ñ?XßH+úÐ;¹»Ò©·Ÿ¼ åDCd/iì§[N€„èÝEÀz$¥·¤¨ÿ >p Ї}Ø0û™E-g÷8ìOO‚¤[ÜIà2N˜‘¦¹·Rñ0@«óXôÁfÂ9!|§Õ:<êÒÛòéà |è¼P*P*ÏÆR#¦®W •D º‚é`2IIB…ÆYÃ0pxMBéäQƒ ,ý«:ÔLšÜ2pá€=Wøí˜‡A\WÊDœv + ¤‡s¸|\L¬Ý*Hš˜|£}à8 ȤJ;|ʪ,¬$Ð]fHÂ,àJ篬{|Ømµ;­¶‡H’á¿/X×Dp +þ²èîÂÔÙÿxnj +äpW€pXqð +f[Û‡èÄDVîb©(ì§ õ@#ˆq)LÓ­Tâq(@….ÿŠbD„üÅ÷”@%©ê¥«âWSðú¹s¯O-Ô{JÔª÷&o¡çO’›àîê=|„ÿPÁ?Ó® ú×L­wç¦{øÏ'±t=h0Ü÷ÅáM¼pXÖ×ÿ%ÀÛ¶¼vþšh] `•I +§gçÖ>é[ô:òàW?f”.pVªÅ^ZžM˜ HÏðÝÖ8±àŸs-FüŸ»@ÌðßÉÀ=†ÿ·®/..z@ƒ`Þ'‚ì|ô6ç Ò{Râ†wãé‰ažñ:žÐvÃÀ¬hôHJ› ïvþ“³@ z·¼iOÙžS< €žÄÎ'1ŠgMÏ#ÌÆ +}½Sñ0Àè¦Z%€½Xòþ¨Ýj +ò„rŒըcóF± ‘:‚|¡Õã"æFTД ¨„0‚A:4nA:GŠ Y¨Ô„ÙFð€Ñpø£zE +ŒÍ˜»øñqë`yy¯!òâê4t» * Š(Ú1ÔÍÓëú¸å°h÷Ÿˆ†(@#i©¹´ÃçyT$=!nÛ«¯Cð¯ +éVG_³¾ÂN»Õn²ˆ]/ öû‚‹ÿÀ†ºK Wÿòì™±Qw…«¼÷­¾—(üVªøˆ70@_@ýÞ’.¸öÜ? }A8ÀÌ”H€@¡öS IØ•VYlí—¼gÍ'U@"KØTÐÔUð_­ºªB$&-TxŠ$”+Rú7±¬®m±0ÐöýûX6°¬ÿ÷¤¶Ûð±@†ÿ}èïŸÕûп±nåŸÏ?§ÈÕUúù×Öĸ±qwö +ƒ.`Bø€µ¹+oOcH«úE•ð³ü½€¢À½”‰’ dP’@*í Zˆ— ­ˆ¾û¡µz–w¥Pîï4 +`Ì<Ï4 +à…|B`6ÐYò]ã »zûÐG>BÂïß çæF=ßÂË+ÍG@4hçÐÿ#&¸¿)Áÿ…ñŸöÛîÏD#r QPÄ Ýò~*{8h[¿¨ ÒÀAQ`LPÛî4Э™õ^¸?zµMfÂýý°Î DCÙjeX©ëJs›!y¤#,%¥)©a[\œ%†[t©˜ ©jŠ€ÊW£eü¶ÖÜÞ¯,ï‡ûÁ]ˆúbÅ·û`M瀲)G¥fÞaåfØ2y} +%7í¤Y„h Gî=Œë‘!©ÏÄíR¤ÊäûKäÀîÿ4Rk)²xaÛ«*ûÀ“€øoè-L{å/½/`@. +°Tp×¾pQ+=}^‚Æ.„W"”~üþ§0"à¨ì¢K0ð{áê ¡bÊá3—X þªÌu«4;¾~î‡çÞ˜a,¡ŠSê÷HuŠ„Á¶ý`K¸»:o> øg. @Wf^3ØØfìÓžérÐ 0q$‚)BL |oEÒ) .W¥öÀJ FyÀ"``§-¤]˜bð?òÿñ?¨Y¯{•¸íÀdá' +óÌÏÍÏ1 =a@ÖLþIØ+åzŽA{c%`þ¤ôÕÿõ»ÿy»Š½ñLƒDN·Äìù㆚ַÐÈdð«jÍ@›kÓ¿Ð'!ÜK™$ E†¤gø¿íZ£f^ `Ä<ßëZaP +rL°|$ÍpÃã¿îÿ¯xI²Çxqˆ’ЄõF9Gk,à>öD7”¶ÀN®ÿžÒ«”æG®0«ÕñnRŠxIpð•#{—®À©^y%™—ÇI÷°ÓnÔ––*µ–´|)«,°Ët©¸Œ 0Z +…¸â Ù·GíVÕo0Ë „ xÀ­©°'ÀLá"ðn<[`Ì V ´ä4¶½…üÜ ?Àµ(ÜGÇðJU+PÄÓ €û¥Ò^ K@OÇy1ÕÙ¸tby…èà>‰©€ i~ä6àà âö8|ŒÉ£…)ÄÃ#;:K„ûV þ¤/T_ÕÐB6A»ÑªÔm7Í£m#~~3 1¹àÿÿµ¿.à©üAbÒ8‰Äú5:8PŽÞ'ü‡.˜3ØP\@¼ÈÀ›Ê=ÀÐmô›ƒÏ^1'Ÿ)Ei]„ò¢ÿŸ=ûúoóèæ¤gÀÉr•‘þ“eû_VççæŸpëA"Bÿ(-û“­µù+Ó6p}¬ÿ¥ücÀü÷.Ï.˜,§€û}«ýùã?­Ùàŀë'æHœB^ZžMˆ ÉHëæà©TbÕ©£”aÔ(€„®WuŠÀ‹® ¼>Í®$”­ËïsÀŸÇÑoËâBš˜füß ÈÊPÍbŽ’x¥èŒ7â[±Jü3KTlN¢æ³ÇYâ`ºèE¾ˆðئ±¿”q¯ä4IrH’@¦÷ôïŽx°wÿÕ¾pt&À®¨ø…oHþžp@ø°çNà®Ìÿ'é³8 +$‹ˆò(‰B`¾ýeD÷ìÿOÄð/±*¥æ‡töõ•ùC„¼!qäÈŽp˜~®ç…áÕóÝõzmncWÀ%°‘Ïj\£ß?=× î¹NÿwðXÀ[@†,@œ + ¤3ŽÿOìb°Ü÷p£ÛĶ5LœÙ,AqNñ§NYYREìuñ)P& è/|e}ºÕhl=A„ÓŸÆ…@p²£ÈÎiUÀ®Dî«OgF.—€³Y çWjX%Ý#Ï,€#ÀÅ}·ûl÷| +BTv”ðlEþïüA%¾ôlg÷é3ÐÏÀA{…OíhÜâÖž{M¨ÛQ$ࢶ2½ Àª7„—¾ö‡["HBþ{Ø‹HH”OHN'AÓ°_;ΔÈ/aþ?üÿ4J¸kBŠ>XщÂì>§.i&ÀÒÀ<@áXýï¬,/,,ÜYZY[YX8ùöeÕÛÉøà + ô d"!8Àé ¿\8º'-? påò `eytÐ=Ž~=÷~n»I‚¸Wrš$9$ùq€ò-€ÒöNò¯ý-€SæøWøÀ¿ü<¥TÞ{ÇóþÝÀÓ€€YlA7×!ñ•G‘òÿbâǪ[Û^%Ó1—ÀQÏ™ï%\¹KÑÎÕxÛ‘§_ŠHàr’|ûíwßBšÅÎÓçß2-@4[ÿÁhtýöù3AÔ@–«/€P‘¸¶2²ÑÕ9ƒŸ~BàÖˆôy|îÚs.v¤$ô?ØfÊÁlÔ'A YX/]<ôO §²­ öO·kµõ]ÏdàBËÂUå?›3¨ë¤"T"Nz6þ«ÎŪdí@o*Öyå +%”ÝÜù;´ç;w&)™öXùÑ_BéÑîvYàFá€ÂüçÏwwŸ€˜¸?0åŽR±ùŸxVÔjOE\*Û ·ë£2W1eP\æ¡*tüÝpêGVí•AA’:?gÐCâ2¾ûöÙSê×-``$Qö’ 9X;®Âçô§{ö|—ΓϟýñÛ?<‹›ß#Fك¸ÿ,~Lí3çèЧaP ÐÔ#È7 $6dã@”/ÒbIû* ú€rv;›!<Ö8°BLÂÖ¿ë2é £äõ×é–€@#蛨*:]O‘„ò§SMN.­Þ§  œxUÀÃÿV–ÄøÀÒ8ëÑý¨q^Оv€˜PâQD1€bðÿ2ÒÏã˜d=A¬‹™IÚ—áÒð€µÒ áíàN€ñ ô‡$ˆ{%§HÂÃrœà| à ØIþ5¿À(€ÿ{  G*²ÿ»j­JýˆðqœµŒ¨ÓÄ©RX‡®Áë ¢$.¸Lü½ÄؤÜi“¤,ÐÄîEWpT¢\礒SвšòÇ–ÆåÓDص“×js[´a{ŠzŒ}  ‡6ðÿ‡gÏvŸxÒÁ¾àžöø?>Ž?¶@ÇA¹%8jžs„ánt7OàèÓ´¸³ž‚#ÿ™®ad3ÁwÐqRÙ/ðÇ?ÙãnLM[íÿð‰Ÿl5êë» ±ñÐ'£6”¼ByD4ˆ2—ÀA!}T2…QêrB%‚ ½#¨&.Š2¿cjdšD¾{PJeÿîéӧϱöÿ@÷~J„UÄ@q#íxöô .€çJvD@ãƒ"ä`Êæ~ËM÷<Ó¶ïõþ×Áá‰W2 káoaå ×VˆdËlçé…Ü2ãUÕUÛ$&üŠ+~%@Ìt XŸ(Ož& åO‘äXÀð™Ó‚®Kw–d®ãXXb½; 2ö“Åd/p@Œ÷!ߘ\˜¤õyeqQ»»ËËtß{ãüù÷R£ŒøV­ÃV°0z™Nc‹+k++ñ-€xVõ~0ÞsÛ"”$aÜ+9E~–Ž@ˆ'¼ûá}º-öüÿ×·^vÀŸÝ@"ûߟFZF°^)1®”ÃÇIx„Ž—SNõH*7@;¡¶sjÃþåJ)EE”»P;Ó-¨Qß«†2±÷A‡‹pÄÅmx—Of§ÛY¯WšÛ¦)E†Æì?âë·vw!¸ûñr (~ºË¨AOr÷V?(*ÔäëÀ†lÚ€`›Ø†Wp”ˆJr˜ƒðXØJã ”eìÄXøÎRb· +å •kO]B ¬*y¶=ÝØxú\'©•ÿY{J'ÆEiƒÜÑ•~‰à¿3P˜ŠqÙ®-ÉO&Üþ’gôö÷ľ:+¤IÂ!¢´Ïž™QŽv:§ëaR2šPžíïî<õ\ÀG)@ÂÇôÓésŸ?¯…©wÎö¿~¦ÜM"Ø5 `G lzåÖÖg…ÿ*Ç÷,8‚=Xì°‹@ŒAí2HÅØú‡D8Qxúû0ÿüŸyÍ=$$ŠrO]Ò`¿“åˇ÷ýþràÚýÒà.€KKž'øÎêê…€ü~zýbp +-¯üªÓÀ0@!+Â{>(9ÿÆy€SØ?^&2˜¦^[¥xåø_" >KÇðç} àÈ×ÿu¿pêL€ÿ +ßx‰QÊü¿¢€Ä€hÐCáþûéáN@¿ò\’8dk<$¤¿ûÖÓ +3•Þ°ÇT@‚llj%<R%‹- Xð=Œlú7è+=ÄBBSý?«:ÊÑ*#µ0-1iþÈÄ;à­¬±±í¾yÖZá +|e¥ä¶&:¤Qª!®nA¹Ž1C@o§¤Š(ÉjºÍCf<óúy>dî•©ÑS¾— øP  +• +A¡[Ř4@kww'>ø<ýº’`´+t2¼Óß×r–®÷LÁÓm (Å Ô ì±ê)!$•ƒôõŸëæ@Håºð $cÞ<¡_·˜À¿-¢g‚&^^’™Š0 +ÀêƒïûSáö§Q€’;x„ô'K‰ö¿òJ§?~2üeè/¯*J"g Ä–©M.™„`ìø%¡ý!q€ÑA1€‘±Oî­éRÜ@O¤_]S…Ƭ’„q¯äIèqX’@&íô/9ô5@ìÝÿ }  £ˆR(÷Ÿ5 +à„yþ¥¿Ð#xÜÏÄ=?an—¢8#£Ÿ/P°+:Ã,ˆŽd;­2eèî¾ûOö”ÅE¸<÷òõD®2‹K÷îHeŠÏ6ŒË%@­ÚÜÞyú­e© +f7`R Üž=†}ËgxÏ¿}²ýä9Iø®=èï?ýÑþyšè‡Zù˜ +&&‚ƒ¥‚ +h¡,£§¶Fs›àĸyÌòXzåÖV*}÷t£Á÷ u ~—ŽS*E‘ ¿ö”f…ö¬8¬›ï?©U+*9^‹ÊF"2ÜjÿŽù¹ßé&Ñ)ò[øÉ·p%#ÜK립hÀs _9··ww¥üóçOKÂÇ®w­²ÿÒJduÓ8{¦¿nýý¯÷¿Þ—0#ÛÞý@mHB" +}J¦ 2“?¶;Sf~&„AíI£ºúΜ{½ÏõKk‚ˆ ôé3«He* åO‘‡tÆ‹a€°–|ìÿxpàûÉ(ëȱ{^p/X€ €ùû‚ép,ª¬ÔüOgÀ_-O^¼2xùÊ¥ó—G@¤õ{”:^ÆÆ.Ûðéêý5šx$%ñzÜóìâ(áÿxIàqX:D‡G`!“ê…£Nø`_ »?¤ÀÉ€ƒ}g}ñüßä[=’:Äñ爞¼jý¸OýÓÅcI¤²Äs(2Hi xõ6ø˜‡ÔÛ åvêKY½S9!ɶ»wÍ/””6r <ÖéÀëAï ½Œ¸i?âµTJ¸WrŠ$ì8,'ôxùQŸ½-€žJú×êpÜL€]Qñÿ +ßüË  Gÿgðúab¨ExžÒ^?æÔ*½?VÒ£ˆ”ê½ßeÐÓgÄž ®Xeu*Låi‰’J)KôQ§ +¹½ô(LÆXbÓ#=Ñeáné?Y¾rmÏUkÓëÌðÝ3Å`[ Ë@-лÿ©{¸3žD•½»Í¸÷?lÚJ€M£&¹M“SÀ-'0©au‹>qŽ”Á`L&285E „‘ÚÃêÀbA>pËY…ÉO62€o¥ŽÀ×ilý«®ïT¡{ Xý¼süžã¤w4‘Ð…@wª$ôµ>œÕØ øýI‘Ž“Šf€Òýxò„6/ìs¡3Åwß)ÑîÖ.Ý-™ø°ô½vd±·_fö1 @âgÏ0ŸÖs‚sìù¿v÷½öºÐ¸ï/dë+Æðؽ¯sè¯%¯i_½_†¾@_ÔCôC!©Q#©r@# ©Š9÷ºöçtpÊšÌü“å·pŸyc @òXŒÚx–J¬Ô?´éೋP6þËà—¤HfVÄè¨ç¾Äýó'ŠÁþ8Yúåè%7ÜYûlmyôÊyHI<¼¡¸k¯À÷”‡å8Àø€,Þd{'ù×ü€ðú4À¿Â·b€ÀtŸø—ì i­x~¨t9@WNÆüãÎù‘Œ>U w]Ñ3Ú‘€ÓcE%ôâ€/<ùI¨œ6e(?I:ɤR€ÔÚ:¹ÙuË_#›(üGgž.Ïn^«4·vK}VOuË\uÂ.ÁX|ÂV ¦èg:Á¼vOŸìì>tÒm/f¹ƒ €²†Kìå8p„OIl!Yâ¤a;à7•¤­ +Ñ`›3±íâ"Ÿv) s_(g@ê8[¸#ˆF–Ð#œ/ ‚PPýÑ-Ù“£ÿy¸¶ä&€ðø;;’U{ô[Zú%mwÖ^DKhâ‰û®ˆ,¤³ÚG€Ñ‘Á«bW^ì ÃÿqÂ<@ƒƒ—GÆ×ÖF;_L²@<À¯<ßOZ­¿?nµ­ÖãÍÍÍV1_´=h¾~Ëö+ÐLt!àÅì˜U†sÚ¶…ÇYþHp©s¥)-ˆ¨j%›¤Zk·Ø@¦Nµ‹½Öcáv{Ϧµ }eR¸Ø|ìQmÅß·[­¯7ÛZEÞ.n¶K€®«¦6*~EÖÙb~o½šµ³|F:ùf{³hmê<µæ³Máx±c,Cf1#E¼Ò±ÕÞlçíÆD³Ý–zQ’fvb¢‚¸Ræw¤]E¾ßlè’BÝÖ¬j*mnâ™™ÏÛÙp6£;25;5“ºY-ndðÁ=wH€ÿ¹8ʹݾ!‰itE tPˆ™?²´>zŸ€ƒå?tïŸÝý©£ßñP<]R—°×jì©•xª£ÂžjÀÌâÃXŠâSA!åyïÉ“$Žz…s©HŸÕ/¡Ë‰òôÙîö\ex\t á÷4~û-Ýüé ð„æàsíh|ÇQðdgG@À ¹ß£ÊøV¡F|r:‚¡¾U(o; ™Ì là/ì‚Äϱ É@‚qÌt¥Tý.» Xw—úõZm}û)–¶p7‘åþÓ·"ˆ§À~€PràrwJÔž/ùˆÂ˜Xwž]‘ÎQ ’ë¦zB'@zˆ™<ÛÅðü»gOž câ0:+~BW Ý<š¶7¶¶vvŸ=H}ÿ»b íqþZÎÉ‚ª§‹Ù‚R½f¸ö +Ûªˆ$GJ"“!=˜À9³ŽF»¿ÃR*òC£“ÄžˆJ.%ÂÁPnÏÿ©³ßIòåƒÕ « ôl—ðß}hHP|¼0X`rqq1Mæ8ß‘•À{1€èPò€Ñ±ÑÁ‘«Âï+/Ñ@Y{h€Zµ¢c#—.‹Œ-¬­NŠNœO­g½¥ü5@=ŸñÖ²$Œ{%§H!t?fm_·»¹ ŒjÏ]k¬ç{û:œß{¼ù5n{ÙÆ2Ý—²i³÷«Í[zMü@0– àáÚœ¦ý½)°®ƒXÏ&nÖ›ºp¶ÝÞlèT=Ï›kLµ´÷r¥¼­ˆf£1­)ÒÞßp“"_5«¢Ø—"Eñß•^,*ÑtM$¸¹¾Ny‚tfYÛóâ·T ŠL‡"_|Õ.¶ò滵†ªÉ÷8Ç`…†24&>TYööšYs=2T„Ï´XªoiLèâÑí )²÷¨Ðe‹ýd·ÑÖ3¼®Âë•Ê)hÚÀmP$ÊÌòuI¹fcâf#o4t{”õ@ Á÷£÷q†ýKî¯ðØð,yMØ_bñApð(Ðó ¤S!‡±ÔräôAQb×XV“š@áB=<¤ŸbÿúSZ ]äüÐÐE¯éü†¯I†'q¥y×åpBÉ® U¯)Áл×TM•$)ŠÊkïNÔøø¶ÆÇÇ¥ÈøÄ5%TÁ*ŸäÒsüÚµñkþ`¶4)kþ`Hå„( =&ÞU,gCñqéà ª&ETмKÁJ€ÃJAÜðÄC7ù$x•üÃãÜŠBËŽ"©¾!Êâ6„\œèãÆ ºö8§ê”%ÐmX·ûšR_ÓÕ“à‡Ëµ!Á8Pþƒˆž$ ä´Xø´¤ãI>~g +é –§wŠŽ·Ù¡‹NÇSëðaºÑK1à±µR •–4M!IÊÝ•>/¡u²¤«#}”Ò+./Š,%Y—' >€í¬:ÐØþ?xl®B<Þó§2UE OÀéÃÍìpÇ7oÝ @šÒ0ðlw½V›Û~* MTAF§ArU$íÞêÖã +ÐN‡$Ð1ÎóÔvõTkÍ#&Du‰3Ñ)RUÓ'Á½¿®‹@žÑˆÂ­ãn>7xέ~²³»µ¾±óô™îó³ô芼ÿ\Ùþo€@ó‚™]n º=¸›Ë/A|WÀz¯e†’UØ—á”2+Îë)e$ƒÅgϼÂ÷4÷Y8<+ °aöÓ `aaL¦ýÊÚ; Š—ÀØ«~Á‚`õ º9å‰É1¦¼J?Àyza¿—,Ðpydauytð8€oÙüPÇš0"ã¥øfs<Ëí8Çønæ{;í/¾(ŠGßìW2›Xë2·óFVoÔµÊâ­Õó¬^¯Ï(z®)‹»6ÑP""SwÓö³Ì_Ù¿yã]¬üf³:±#óž¢dïQÑ¢TçÍæÞž,tŸ&ó†¶Íboïÿ‰ ýÍž,}Ùé:-»=Ÿ¶:JÚl~0‘­çuÜ +ŠY—í³*Ÿ2“"[¥"7¯¡H>w³Ú.TŠRäÅÞ×_h‹"_äEE&šû{{­ T€ªj£›ÊÛû§­ Æó1C§³ºõoeº1†UI£ž­£#)>ÐÍ“BMÁiQä é™5³›YS7K7ö‡JÖŒ_9/(×ïíq˜‰;( 2v°4Å?n]ä?”DyyXy: ¦ˆƒ]HEHÏtœÖÙT@W|ÒÒI\þ’/Sž ÅÎÿXT#$åAŸÎ¦«›#bušqÿòSD0µ W¦7¶vŸz €1KV²,WÀ{òdçÉSüÓÝoŸ=Þ>—»³½½û›Ü\ +$ ¹ 6Hj4:ÝNЩ2 —Q{ÉèäÂfÛܶ²£ à;`]€¯Ê(S€®Rpµ£f·Ns‚o=Ófg½ZÍ·ŸÈÖ†–) >Åó“6Š4à«4g¦rh€B@Œ»@™ŒÇBÙg 1Aý€d³•lÓ_©hPô3‘ ì¨èžu˜ÖëÕúÜîSRH)WÎÔE*Žò¥‘4Äõ€§Ë¡ •&b\‰Ži=pµðØÒ14?Åó?<ûV7Û lßÝy"WA‚™õDz¢_JÒ GAÐq†§t,qùL÷ýˆðys¯ÿ…lLÚ⪪©½]AcwBrxD„C ¾ÅÉÀödGPåôŠ6¶îSèD'*DÅJE‘_,S. äüòáƒÕ…ðÜ¥ øÐZz–~9©³Š×îÄõ—“KÆûØö¬ÚL.Ú QDð˜’0pq² “UëZÿ±_ƒ>\¾ô“…µÅÁÑ‘¿*i;p¼vx~Á¿B˜0aÜ+9EjµÚÍcÖ¢Õf1 NWmAum³lâšaU–«®‚Ô«Õ¾÷¨Q†fõšðšl¥˜M¨°¼ùnc=kd €è<Ÿ5 ðî<6ój£hdžüŠc7]–ؾV•eaå¦õFv냡FLh5 ²Íªj›î*Âe©"…6²!ÙýFm8woAU¡ØP„¾v.~}"Ó!;à Ha}¦Ëy÷†êÌd4­bøO2t¡šqk’Ìêl><] ò…¸Vœ"ÒßÊ^2 ø+’¸þ—.{–Là°ð°ÅsÇûªÃâD!Ú—©-óÚr!óˆ=^LbD7¼ Þ”¿Ÿ,‡ +”7ÒèK´‰£8„-'É¥ÍJezn‡^l ¹G¶ ? ]Â<ð.¼Û0Z¯Í bÀD ù ,x.èfòÚ) œ…·*Xhêó¶Âi« 9KçªeŒŸ‡° ªFpØHª2a'FTjyöDÀúìéîz½Ð9U\+€Ùnw¡±ô{¦³öPH_§ŸPZÜÌÞ ÍIÁ…OQÎ-ý9Ö)Õ«U·JéÖÑn"Þ‚W€þ¸}4£ ›©Åó§öˆ¦(€š;Ûs"â»Éðï‘ðükêžö¿¼ pÞÐ6xZ]ÀÙ4Žÿ ƒ–Èaõ£q¡ÏѼNJk‰ª)Èa—׿•/ˆðXe€ðÈjÅòg  ]KbGP¿³–Òü½k9@°ëXœ\öÌŠ¥`pä{L&¹36x9<+áðóèç7=Îé¹÷Œ~¯ú¼„ˆ'ÅW`;Ör·˜Þ§^Œ·'êƒ×Ýw®^Èݨ÷ey½ò~‚;%fkà qîTž ‹8oL4í¡&=ýÈtc­W³Ç¶äH¯à-¿/PÜleíGi–•v«ÑȳkÃëÅ4º‰ý­E­:¯£R!twEqƒªÍ[ÓÓ"G®¹ÁTÃö˜þÜ·›{ódVDäJ”$¤XoR¤•&ú ɪ­‹77ªÿ]=*`‚Qÿ'í|/á4E•ÍkÓº=xþ½—æ;aºÿ0¤ý蜿d¯€©: ìŸ6¿œx;cpŒþ$"uçYd•”|B’‚~n]–ÅF ' +u©þbl_ì9f“â%¤îJšÝ éÓ#üÿñ‡4ê‰c+Ø9Mžî>Û)ÃãÓë[néL|`Pš€_(ŒPäwOŸîlmíâ ìÜ)¯·Û ¨X¡/æ¾±8 ~¡·!_¥ 5m¾Àé†ÊpR¸ŠÐ9@Ï„{( cj¥]º<ƒÃ<{ºÝ¬7Ö·½”¨¬TkËÞ +òȦª¨î¦ óÓ(‘„Ú„òŠ„^ ;jª,<#J—_†üŽêþüéÎ6ó'¢‡LûmlŸÐVŘ{04@êÓìÿ”i€¶Ö7¶v ]O’ ¦GΜcþ>Yþ¯õ•YÿÚ_š/’€ð±`–0Ù#š5ÂiSJ‰ë‘Å'Õÿš{ò9g0€¨ógO€.À™¬Q©Zl#äQ'-ú=øòÁÊ¢xlÒwÿ _ûrÂÿèxgeeUDÀ€~ì–ßRç ÷DÌþcG@T F0õ?F¯ŽžÎ¢~÷`µÛ`e Àùx4ýŒÇÓ¬ƒôšAJ÷JN™ÍõcÖ¯qZ€ÆlDHUŸf¤¿ÂÙ7Õ¡¬HÀ[¿^~_Ön£Y¯T+UàN€ø(¯N¡;¥£,Jühc½ÙÊè'?dC›ÿ”E‚Y¬nzÔÏ|Qm~M%"÷ÑlöÊ HƒÙ³üöÄú7ò½C¡¨ˆÅ»Ãy³^¯Õª€®Iù«žãwJJ9ŠjÀÞF=ÛʇšzÓÕ† €´1èsíVÄîŠõkù¬ƒHœi<Ÿ/R’gÕ¢=<žÑ`œ¤=µf­o\7dxàíÊõÀzÏ”œ7¾"Ÿc¸FJSP÷œ~ž`eeéŽï‡K‚ÆÒmOTDHôÄ!>•ž²ÃRžð#ÉÇÝ…âJÈO”Cø}TH ÊàiÒÑ(4aD¤¡ß?Þ)ùŽZ4&tâåO&§_o ˆIOž‡²™%†»Ým[°bO±½¡ÛʶþÆ< ”ÁòÏ”Wùlåÿëš¶~šëÂ_û× »ô ÿ9挀ø¥¥ž¤g+š +í]¾I +xÊ<.€Áï\£6·óüÆ‹¯"¸æáªäö%=­§SÐ…D +|áðo)5p +¸vgÂ%B›ƒ#¶ÅšL +vw·¶Ÿ<…™è*!M*K°/å¥.Wñt÷é“í­¹9€Ðþ€<ï{ý\ÿ9£m »¯3"Ÿ,åIö v¹E v0¡r€üQ—ï$Fl#q¿ÎôE&ÚŽd=^”<Ø'¢çPEŸõ(€Þ£ßkì9ý`ual,f\5². Yï»E–îåxV çFúc¶B{ÖN ØÃ*y¿¼¤€aš"t’äÓ–Àè§_¡daÒ3Ž,,xH!»ÓŽHô,w_2–„q¯ä‘µÄÿ¯ußÖ p’)`*àNVlÖ.C%êÖë•ze¨¯šá PPð7%S˜9póƸ-øRʧéŸ×˜€ µmycâ“Àf7À¨úò¢:íù‡„ÿ:Éû8H¸>›òÆÝý!·³w‡@S©‚޵ù|£V˜É¤œ¥"u1åb7‡÷ÂåOíJQ*B+H^ óµBò…"ÆlÎRœÍ&ÚE^SÍé©êFß0½#¤ +qf#b"Mޤ–§˜+ðUñà)ÈÏY0Ýd`Ó› €A•‚]FÒÑïžÒeQƒ ÂWÁ°ôÙ˜«Tç¶¥…V³À&=ÀK ÊVŠþŽžùRÄ>}¬|(ViJ©ª“+WDÃêS5>ƒ°`Òç>¸BžïìîhrÏŸì´w¤Œ*yF‰²á]Æh¤­ö þÎööú\!ðÔ7ûì k ýýýç<ˆù")§€-Fñ„èlÙq@ Ñħú‘FÙýÙ¿è€þ›“Ä™.L§©‹`©HÍ’"Î%ØÇÜïÄ¡¿ÃVKÀ¯±ÿËF€^€`úÎÊêÇÈIÛ GÖ…4öŸ"Ë>‹4 0k€›$€SI€Áþ°XYf½|yt”>z2m”¢§û€$Œ{%§Hxüˆq×Ö¯$aàfÃ5›Èd-g²à›Õ¯¿?Ü÷þ­Šìý°“…;2Ø‹ ÞfsH–zc8€YJcô€À™Ùû˜§]ml‘z&ð:ºêäÙ°Ò!EÖÓ‡~ñÿ7°ÿMC²¿+át¦ÕhìG¾`É‚—î [ÞÚ ÓAŠ8E¤j‰pä̃DôlÚÅ”…úE€¢1ÞVŽêðt‘…K àž´8Š +u;ôŠÓøì‹„D.²,ø ô<Ƈ`ÿd+ÿ8T—$¸w‘À¿¶´8Êû´ Àç}¾§Múù¨ŒÓ·ôŸ,O„åëõájsc›/Õ ái¶~&cÔß[[ûÝ'Ov¶cœÚ76ÖÅàÊ"„àiþDY…ðÊo€QUˆ(Pž +Q…¼Ñ @6½P’S@¨Á¤B“˜¦¨à_fµPTð¦+î‰4ËGåÝi¾gÀd†(Íp@ìáõSÁ6,_>°¬³Š°±¯ô¶/€§6TRœÏ˜@ `&Lû£0î~‘Qñ"©#Úi3‘Ò3Q‚p“à?xJAÅéöîínoÍå¢N"b‡do—ñ÷üo&p®?ÙÓ'JŒîjØ›X?p6B„¤ge‰Ï9©¾æI ²û\àK‰ó*±öú.1¢9€k$¤ïý±‹÷ìp€û«k‰àHÐnÀØÂÂʽû"' ¿¿ ü³eì¿÷År&@Ï4¹ˆ@›„ñ“ŒF8IÌJ¤VHr@˜€6:ŽŽz]}¼ºï$aÜ+9Edƒ'4þws&£ý\`™P,o´…zõ¡›>¬gõá¾JÃö?@xw£>…Ç|f3«þž™öfó)G輦_óZµ1==Ä €ù=,o<ý o˃”lÿ¦˜°.#œlJÀXç´AF®)X¯W…ÿ5hˆÓ©úÙv6½G›?¸S@êG0/"{W™k…à½eEÄA¤µðži•¬˜XG>+`ôVïÓɧÅè² Ú“_䯇£säÛÃ?í8#tù~#gÎ L¥«H÷@ãÝÆ4£ù~Ð/‹'eeel4,è,u²ø£å.`"`p×Nv!H` +q/Kú)%;¤'Cù ;˜ðùEâdNØÝ„³—C*D! +ú QÅ€ò.¼ƒöIûDDÂ"¦ö\mx & xßÝVè²dAEÐN8·!Ì’¡€Ö]Y²[²yeÊ +€•ÚPÒBKÃ) dî+Þh/TV¢?á*p7ÊËÆ«Nhƒû^çtÞ©h@wO-L§ãn‰»Òa[°+…wŸ>Ù˜¯LoˆÏ( ‰=Z–Ä“ ŠmŸëÀêávp•D²s5:a"CÍÐDÔB·A÷WíôœÔ]ÐaŽwÓ¾³C{ OOwÅdñ+ÛÎîÖFÓTKl*Pÿ€œé7`Ú p¶Oø‹÷ýtÁ€•]‚lÂÙÞ2Ò;¶ xŸ@¨2ås ªÞŸ$Ž%± œäH)) Gƒ8H§’áôïýÅÎïJÀÂêÝ_ÿXNãÿðŒ-L*æ3¾x¢îíø/Û"Ìv1&Äð_І`¾"¬„£ø!NôüÊï0Â~í + ô ¸tipdtð€ÄÏs) ã^É)róxž¦©=íÃÞ)<ÿL±Uªê8¯ÿußûÙû•ª)@ïÔ ã®Àãy!)°[ÚÀ!i•ñn¶Þ¬æóÑà>ë~ùÂ]™á››¶Ä‹j£ÐÙÈ„é-.¡Â”°9tÏ|Ñ·"íæÐ5C©@ O„mì)ð|¯ÙØ ‚a½¼4Éôôtqs‚2Š<ì~+bü—"…»&Ÿ +R(nEyG|CDZ²aŸkgCCõÆ-%ªÞ¢ 2ÌÊ qB•Ù®ÅÇÚg³ºIâ(§>-q³™{Jƒ°ÄÃ"Mïï+€¦A±óõ]J€ï£K±ï»ÔwþÒ•@q Ÿ>ƒ¦¯ðØ©êô©ˆý“ðè–•w6é™îÝ¥Œ¼Ìæ7Åu0_¿N£€õèóa!˜¢I§xtŠ`‡n4.Ö¦‹ A’‡Ôwà¹à <¶ås[»š_aßúts]@&LSœ ¬ýƒà20[p þÚ¢&B'»l¡ÂÇð«Klö ##=1lÉ…:ú޲µJ'L~I [0,•¼>Ù]o gëRN‰p¯?¥WKÁ`±ÊSZ $ôô%äJ9G£Áóo€ùoŸ?!6PœŸR0_‚Ôw¡}±#’[7Möüö–H´@ +ï¾óZÿ'xBs¥_Ÿã¾ ÿ}çË„§ÿ\ÿ9»ÿc@éÓÅøZ.… sÊð{P&œõŽ‹‚ð?£žàHæã$eM‹ ŽEöLõSñ®Ža€£“ «k÷Á~ËH ü'ᄄÀêʃõÇ‹á>Yý±F˜&W΋ö³‰1¿RÐ àdü÷<–^`0ŠõÏd‚|Q(<z;yÌKI÷JNæ·;F„€M’dív ïì‹ñúf6ÓÌò¢ñîµõv~aX&w¥^y¯Z}¿Z©ð ÷³EVÝ–d“òK7Y¾SÝxÜn¬óѰWð VËom>ÞÙój­Ð¾Txv ŽÕü‘ŽSÓ|¾Þª®·³¿®þ#53‘h²î6ë›V$5#tÄ# +Û׊ýbŸˆùЈQR„)„³|¸Ñ{GŠÙ4øE>Òéæµ€òüvõ/kE»þ—²æñC@ìˆn3³­¢‘‰¹g!:2]È·†ŠÜÿaK<+Èѱ±ô|_a"!áw æ}Wíç¬$‰÷6öK`'el:ù#%haµ—@ë.Èl1J‘@GTJ'ºbðŽqÖ7è ¥õZˆÄŹx9”ZXbµøÃÐô¥ø\Äü¿° @²Ý¬\¬67¶v¶t$|ÇàÝ5 îžílo¬Ï5 –Ñ?·®ÝöÎÖÖÖÜôô\¾½%à£÷[4( æsÀ¦-fað·4ÂwÀ‚ híå€g[ö„)´Å‚'L@óÀÈyŽmÛýÛëÒacK »³EÄ\u` 1'õír§>)CÆoé  B¥1üˆv‡ôU˜ÖéMm^©¬¡yÇœ“È ßÙØ˜+¤ÇÖÆÜ:¬ÉL`#_ßÚãÛ‚w)±³…‰O1ÂO7幕zÀű€]°’wAå¹þ~mɧHàlXè„ý רêêœ8$d%20:’À¥Äk¯{&^O§Ù¸ÇÁ±âŒQ–öeÓ¿cRÝ©ºõôˆP ˆ‡ÀØäòêƒ w…¬x< PbçþÂÒ‹€áþÀBêo À®ÿépè~IjP½+“2þÿýàÈ¿¼tyd¬ôèyLïƒ?Ïå/aÜ+9Eà–´C€Õl1Ñø‚}Ö,ò‰kÍ!·v»Õ]ûÄ ¼‚çê *üÏ3!â‚ò"¯}Õnð}]{þ ìn™Ýüdnc‡ÀüüwŸä€Zys¸,°h7Öÿš™tê‚RmkÕª(@£ô;lfoLðFTd:kÙ\[@ À>IR¤Ý’(Â÷zcvWZ™G;"[ÙP£1„ô4¨„7Â2»Ùhúލ+’¸RÏóýƘøq‘è™[á [Ñÿÿ÷ƒvçáøéÏ}dØëq (6NsÉpÊï# ‡â!Ö¾û$w¤›ª§î‰+ƒŠçA’Tvs_Q (rjï"ìBå‰8“å$ÙmÔ.^¨4æ¶ +Yµ2Ui]7¢Ãžl×›YCп±¾ÎfC@·½1—7§›sÀ°Lð ©ÞaV ý · ÔÊê<¾­ aŒ^â ŠU6§´é,S]çÀcw©nŸ»ªÛ(¶Š­uíóuÉF±^ìîlÍU/\¨å‚^¥" MÚÓ1 *;Ø¥Ìoá|âÅ '´Ú[.ç7[Q:·íSUF;¾š–6(%’ÔÔÍ)À 5¶±üŸ¹:Ýå¶2îïŠbm4§ë`? Gd׳ÿàè;Û—:;_,à26»A$÷ÊϨ›"¡w¤å´B‘#¥…‡¤‹^Ð#0N¼HRÕI Ž¢Ø³œ-Aß` ÷_µ-=Ë«÷E «ËÉ äžÄþ/¬®¬ùEr’î“Õk„ÙNª4»þÍÌ‚ÀˆAÜ ðd@hÖ¥–µUt€‡ЏÀ!€[üºK¸WrŠ$À?,¬ë4j—à«mÁÄ·–<ßküe£Ƚ €ù€ªàÀ;•ÍçÕè|ÂL=eq|\¯ÝØ/ lWZ­‚áw3TÌßÉ»j”ŠˆÃO3R¿¨yžaø½.t­zÜ šõ^E˜¿ Ú3t5E«hMìåÚ%%lüÓ1±åM]jJß cnKñ +‚÷?_¾VäRBR}/€4²"’v£¹Ù«HÚjëÚç«{?LÒ“‚,‹è®¬ÄÛã{‰¬æKòìŸ7’ Ým¾‡ØÿÏ«_©u©ÓôGœá‘ôhú‰ éEqÂúÅZ:)JŒöÎ'-©è¤5âãn¡nò$q06NÌëB[x—°q Â!"EÇÑ™3 ZN”ÝÝöÜôð@­1'LÛïŽÏèÒâ ¼dèNO7×7D„·¤ÒWöÜ6¸âÚxá2šŒ½3´rl÷¹-p!©K$ òü·…×Ý5²§×<Ùiïw¢o¿¥™Ð‚Wé!Œ•ª:ŽpJdµúÜ3óÀahSPFxÅP%°ˆ” Š¹'è©Ï©€›?ȈÆÔì$q¸+üg +äí|n£Ö¯‹¬ ôqàYß.¶æææø°¢^·ÒÖ?¼÷­Ô}Ëæ +Ý÷§qûKB“¹x^8` :øj{]à›ÕёȘ|H+!!¥&Dî¾se {´p¤8Aᵋ@:ðŽUäøËó†ûòË;VaèèØÂòš=¸ÕÚº¾|â"ˆ6Ô§ k„Ù.Úý:L `òW±“ÿKð3îýMÞ…“ðKÆ?ª®¬®­.ùc€ŒÔàç4žäŽðîè. ã^É)b¸?*yDË…’t™3ö[ ˜ï?¼„wÕ¶Pî½z]ëu€–ÚTÝõe' ñͯ6g‹MÁÝ?åÍü?æþ–¯î^pWð&ª+þÓ´6ž¡poˆƒ[uÁþí¼=D|Ð_\Aè[¡ »1e¬ÞÌjmò•3XòÍÍbVøßÚÜÏÚùD»K$"³³ª\y1á)Œ­ˆ +ˆ;’f&’&:O“*ÉzÕ³þ÷Ãø#’jRdföë™îH/˜žÎòv1?Kí_?®µÄ£"Ñs‡à§ã{‰aN¨Oó|ØûzìÃ{@ë%p^áCøÈ•¾˜ê׸J€ÜZ5ø—8ÝÁëâØt*)†öv$Å–’bËWBäFzr‘Êç‹cÙè<«Ó¥L’nt”pæXOs¯Ïšú´¬ù­AàI—5ÃßÓ=Pw“8þµþmoíìlb œk +÷v” L¨/ÔŒ®„4cJ1‰¥¾ +=Á§ƒËÊ&û\gÈç̵vL=¶èDO#„޶ÚlhXQ– ¾ÅˆL¸-ÊêNÚGµ¬aõ‹\È´‡”¨øçžàׄø²VØù¿q˜HÀœ†Õévÿ-݃º#$=6rÈÒΓJ¤79œMwrcc®Y›¦Ý`çø&€ÝðÿŸíû v/Ñ s’@¤Ð7ܦaû¸‚ŒüŠN©:xí ªph•:yOe$¥QBGéðì™IþIôòÙÄòåÃð0 +píá}ƒªÁ˜÷1áÙ,‰èôɰméÀ:¸DpÑî~@¸ý;<À€ÅŸÅQ(FuH9뇊q°Êô„1€‘ÁKƒ|]˜?zòK,€ôK÷JN‘Ôéï°ö yB»ÙÂýó@+ÌÌîW›m&óÑq;— Ÿ×¯W„ý–­ï•Òó^d]Ã;ÿHAÁÝ<Õßlå­Ç÷>h6ø®¡?ÙÝLÈ+@/„üíjƒªÁeå‡0>ÏJ<¹¸-ìY1#&’ ïÍKô*ÕÒÂ.µÇÔµ¡‘}”·Š=+òõãv£Qm÷º"DOi—M³ÀÃ=fužÊ¥Òž™ùˆÂh (Ö}™ (ÕØ¢‡@Ü3ö$U ù7µé¶ûC ·CÕ¶¹§ënµ~ÿx§ùCÄL)Ëw˜t“Pz…¼¬€y?ú±ÀÝ·€;¬ùÉ èe„Ĥ lgÇТc{ +JøC¾Óãê]¹¦Ó*}Œº„Y¾-¦'ìSï„ÄÈtTJð>^"§½sÚRÑqôÂ>;Û»[;²^›sByÙ®pP–«` fm+Éö†0_‰A5ÌTû¯! Ov7æ¦ësëšñ;›ß‚ ÀA‰ãÁeŸŸ0-®aŸh'…CÐóÔÆñ—0-ÙÞÊ©ÔzokDi~G³ímÜXãXÝxvq¸Bñ ¡8ƒ×èt3׃ûIL”=V‰ P9$ÆàÊÁrü$O˜ ±Ðî;¥ÀÆtC¿MØ”v„ßÒ²1רצ•Í™Ž“¾³xdÔ9;Ð{‚Ð*ï„iëÎvÂì³¥Õ˜N1ÄôŠO9I'è>Æ"½ƒ‡$éŽJ§Ôݰvhûå1ökù¯Á,i‡èÌêò$ŸÐY^ ë²MvÛÿö,,ÙÐcðYRwÄ,€ÅÀ`’qÿ°ÃÿAü÷®ãpãÀäÏ´+‹e^håπ屑+eÀàO&»}þý ¿BbI÷JN‘dñ–¼xÔ~Ôþúq«Ý~ôø«Üä‹}þ,`ÑÎÛ{Õæž?/Švör¼¾õì .ó¬=?3û¸h¿gŠ<ÙØÊ žE‘=.ŠÍÍÿñõïo~½¿÷u£ÑPY{{bíöæææãö^|"¯Ð~§ê¯äo>þº]h···Ÿ«PžÏ[ó¨4ÑÜ+ò EY!¶Ðä3}ª¬Èç2+’3öO>ú¦QSí {‘Ï´TZ>»‡"¿ÿúëöæ×ÚT×'¶Úí½ÇU›yÔþJçI-…6÷ó‰Æ(²÷õ&_ôßÛߣNNóQ¿œ{°ï[¤ƒ"¯6Íg¤³ÿ[‘G|èð±îÝ~£ñ²ÌGöGнy]÷×_ÿŸ››û¿ûÇy®ø{JzL,4Ÿ…@â䥅'ê̸ñqê QíÐ/‘^‹¯ÐüŸ"ôÓ&á:gûÜ.—ð4$Áù!‰Ø„÷%ìé@H2ãM8,Ô@'KŒò« ÅC¥C‚±S éœ7À“!]DHÝ9c$:E„U Ó¶ýéb¹£Fkºvmaª(À6´€¾€©p”NìOmÍZµ¹ž˜0 lîšu(}òX€w nåWÑÆz°Z4@ȪÅ9Ãú{jAx²#Œßš££d€nvÒ·€j†‚…¯ù6#ìAïè `@gÐ]À<ù¨À ¯ª@°ê±VÊ¡ÔÊ,è¦1ú-Š}ª+†IcÝ +…Ñv뢪w6ÃÃõ9±SîRÐñƒõ­õ<«WªM<8 Ž‘¶òìëÆ]!¯Ñó%ĸé•¿$)¾8l¿».íž ÑwõœMzøÜéÎ+]Bþ(Ò|„B•?Pø/±ÿÁIþ€„ü‰0À(à¡;b[c¬ô,/­ +l{ÿÐbÈ>$@? @š€ÿ´°µ@ØßÓPzlñ+U0~½¾¼&Û?ökk÷b€QWí(á¡EÏ€x‘è—0"'ÕÓôj˳F­žÏåE“voæPÜVѼvSs£z7Ö‹‰z!˜ âИV°¦\¥.㲆§ÉÙhç|˜¶÷¹|³á 7?k4ým]IS!­™ŽdKæÄž¿‰O½‘ ßµW*¢ÌC +ÕêU4©®oUçÚhY•AÀ ú:KH3«V·œO9w¤Ñ´Ô âÍÍðûñáÍw§o3TÇßßœG‘¦ÉšÓù»Ôˆzº¾Æº[‡*KW&Eþ!oèüÍÆMôhÔ¶›·Ö æ–TªROwB—ȇ:7­œY³­ËR`Z·6M“àsß{‰‡¤#Ë+¥`eŘõò ð&ˆÇîF~j‰»  $€sß%úÓƒ`©U(ÞƒØÝ žÏéõÀúií‰ +$7½0Ñp³C:õ"éI÷£ó?zÃZlÄÆB¬µñ=V6ñ])Ïûè êSð:®BW¡¬@ÏÈ/ìjÛü7˜)‚Anô²Û†?bË{gg}ºRÉš¢` ÁòÉ·ÿ[ߦ»ð’S¦Â{Û +øÈ ÀmÐ8­( XÅâsØÝÚØÀKaCÛ™e”Óun[< ­Ë¡ €.÷Ð*|N*„„»û&n–`Ú#]©Ò’ì¹B0 Ý¬ÕTM\ù•šÛ€¥¯*vbß6J¦OºkÛÍÆÀ@5ßp*ÕhÓ_ét_=h`N|%c(ÅÎ}.[g™€{®èU0né(O—©zÄHM´P]!°]Y/ø‡JÀÌDºOÆV¢½ñ}¼ó±€]˜\6òó ðÇBþ4$ÀÃr½2€h½-–íõ?¹°¼pç¥O’ÀûýýEP=ð?¶!y–'{&BtäмÎb¡Õ5Oèa€ô[8ì`£×CïÇÚ¿„q¯ä>F®]»61Q­~P¸Y}÷?ÞÚß¼ùAõ¦ð¬¦°¤ª˜é‰ ‚7«ÿ±Zó(@á0 ¦„É0­N¿«ˆ¼V•³v³úÁ7o'§ƒ4>˜˜ø`NتÛ Po¶ßuuU•R½6Œ" +6&®‘@«2Q“ +îé_½Ùª~P»Yû ŠÏŸOK=òXÐB%4ÿò&êëXE¨« +À뛪õäˆR6Äsš +ÖÕZ­ÑܽP.01wÄ—ô³[¾~UEŠ ©pmÙø@% ï¹@8Ô£7Æ—¡›ð®”Mw5|S«7oNO—z¸æûÉü‡ÓŽþ¤d+Z/¿¼=ÿh¶·ÉŸ †D CœñÚ€+ ©§¡eEQÞIx˜¯‡µÜø8(@â©ÖK¤à±N Rµ‰> :Acù-Ú§3Q‘i‹¶^Cs¶½ Åxu˜ÆòSdG¨/§wÝØ‹-1ìU(¸…‡`{[°„ƒè€ Þ §ß˜›®ÕšØåf¶Î±ù±¥AyÂA ;!«ÊV:Hº½~8\€Ò¾B^`çÓÙ~½¹¾±:þa§ûô6Þ t¡“¢h EÑ@åfn± ¿í@êæ2©ãžÏûp¾¥¡zDR—B]·rH¶ªÜØ*tõsëÛ\–ÊÚºçsÍf}¼2=·Ám£0 7iën¯¯O×*ÕÆºàŸË9^€Ì×ûϼ.ä}íå< 20+¼ ôåÐ}Ê0(gñIC5µù _%ð)÷p)Gò%W¡CìË#“G¿%á,pè϶d)¦ì »`qyíÁƒÕ•_é•Á›)=ú--» à  >I\àϦ÷C @ÐßÛ Pg~Fòä#0'aíà¿ßmkžàÓŒ\ýåädô8ìУí_, ã^É)²·÷äÈ*)n7׋õfþoâãnûÅ^{]ûvûq»¥ðÞ7ûæV»]|‘UìÍçy{¯Õ"i«øY±ÙmüïÅ^õÉFXõùž2ãÏ÷÷ö÷÷(³½¿ß.þ¡½ÞhÌíýÇxÖ¿h*·±÷M{s«ØßËוMæ?&yãæŽ5Ù+ž¹Êúê1ÍÛ{ÿØ®fЧ:é%M÷ÚR¢xD¢|.»}ÛŠLìåÍÛYSZI‘ö“b=ÿEh”Ølÿ¿¤O{§y³Y_íKe÷÷¯åJ°-ÝT¸ Ë¿ÈóÛ4Ú¡Èü~"ºpÝ•½ß·'Tii%Е´Q*/²–;9 ëí½æŽösúO¶Ú÷Šü‹âɾQžç(²ù}E-sG–WîtÚ$ ‰_Fôºùѱòéé²4ÃIYŽË¨„ªô°€2üóÃi€ùDH‚{ö<²ì"ì(ÕÁR/GNéq ú¸N <ˆy œ·#¥…U‘=¯ „K÷š~¾„Žør|E±9ó"’moíΡFx[ýHí~m:X/=U2^m´o¯ë°6-idBA<BIðœ È¿iÄÎN ±7k’€UŽa®ƒ„º>ë”K‡1]žMkàZšM‹K•ÆÜ–ôƒ6<ÝÞY_—nÓ:Å A´"]Áaá6ØN)€µ9 +ð¯4¾Rñ:ç¾ûœ÷Õ˜6XE%"·.EwFl‰¡‘ Ý€|Cytn#7Ÿ·oŽ›hùÑaÐ4`§`÷/B]Ÿ7¸Ûðô°€3QçÑ#¦ 8€pÅ¿öãþ£Ê„pœá‹pþTâ]xÍÐ)ìgáóü& ñKì§M Ü~yß_œ\¹o²£ðþbKwìç758~¥Ú“üwë?<€cýµ/”ïÈAü—$ï¿Ej­|º¼ò)À/2ëªÀØà%>¤ßàØÂÒ¤l =~ÅÄ#ìǘŽ]^ƽ’S„æû“¥h2'àmFÇgLd+im>.6U|“5„kÀkV¯¿_¿!leúÜÌÝóCfç'n3I9FÞB‚ÂV{SÈ)øý¦Ù`D€{×å³y{ú]¦ìS6rÝrÉV£‰"ÔFùLÔÃt­¯6[›ÕFt4T¼¬îl¶…|´GBç»[ÙÇEgœ>âi~ÜE@R´I )ò •¤ˆª™-Úµ‰}NÓˆ]Ö,ªë_DV~ ~ýJ]×ñèñfk­œ67²LEuzûé×Ìš3EþA®=Q͸¥Ìç­Ç|U¾ŸèÉ –œDÏiO/“‹áÍ}ÀpxŒ¡ÆRXA1N#Ôeež@°“bJy H‚ú´7¬—ØŽ`ßÄ]¶<<¢‹ÿ¤€©xñaÚwÄyz(ðïå¯þêJß¼'~ÌKBkàÁ÷ÐßHV‡ß§ÊVBm40º}k»À<áóok¿½Þœ®\¼Øß?0]0aðîÖzm ¿¿ÿâx¥:ÝÌ¡ g>÷Ú.z€øª`0] ÙÝ=ÜóÂIAp1°%ÌÎÇ ·¡4_oÖ«ãûsª€ÝÝÙj6Æ/ ×͹õ-à˜1v†n›ø4j¸!žªƱ@ÉOh7"Q‘â]ø43Pôšã€ÐÆô`·½!F4—ÕÆ.è~ÜÌE~tUsuÝ‹ãUF#„n€>¾~ðÈßÚ(Öu'«Ós4œÄÚ;Xãvá»í$=QŒÇ·ÔeQqKðÇ]1F—6ºðÿ;u" |‚) RâSDç‘(0.!ò€bý ýZ¬ÿ¯Éì×Üäþò¾÷4 pÕ¶µ@ôðoaáŽ"ðfÿõ)Ý“ÍÍb³áÙ ˆöW³©†N•‰FЬ®§04Àüéö [É>ïÍ––ðôR1€˜ äÓ•—ýD0ïšýÈÆvjþg‰Í $jƒ-€Ù—Šz‹_{€¹4üÆ>ÂÝV°mO5Z­â”!#tÃiBO(k° e·Ú6þþ£Bô¢0þ¿¡­ÄZ—?ëïW/⃈ñþÌ €Ìþõm\ü¹½ü[ëØ¸À•`KÈÇH¿¬QuûûÎô×Ö·ÁÒí¹j?ÓÖ ÔÍõ-Á›ÏÍÞÊô‚©l’@@]Çg0U‰—Žó¥ƒ¹¬ëŒÊ¤aBP**Ò¨H“¾þZ“¦ åØÙÙhŠŒ\®Lgž¨, Û …žJñ(Cñ×–š ÿÛâŠj9Ç…Éí¶)±µ±>ݨU.âï¯ðEQ“¹Ê…3}0¢Út¾^ØÞw·E…¶b®ÂmÚ(šÚxeZyNl`ˆáëçúϪì×zßO!.æ7›v>Fvï8(ô>°SÀ*O™«²HÆÑ ö¿%ʈr´SÀ^tD°-ü‡L +£ÕÿKƒ=Áÿú°Ë8¾»Â÷øc&@ü¯°ç—[«×`éν0Ö0!NZ]ñ!éÁòÀîe&ÿçØw/¿—Æ{,Ú}[ÀêÂèeæ€ މñàðãZúìÐVЫg“0" Ž•[YÞøà›,ñÃfóy¡®ä¿m>Îòßç­vkà}ÏØËxÁ™dzc»ÏæÌÔ'ðœö°<‹í^úÈïÑÿ®U´¾RùLœÍÍæEQ{7g”\”1]:neÿÐhÌg·¿@¨Ë†ßü{ðó›µü±jv‡û$SYK¸;å0¶ølΗzia'»9ÈmOúGŸ?ᮨH«øf:E>’"_LL˜‡x¤LÄ¢ÝúDÖΔC•^y§ÿ­ëS¿››­›E{&7+2ý˜ššU°¼{:Ùœ˜·ýïéôØ™{EZÅǨò½DøÏ œñÐ öô¶pÎÐuúbÔŒ×âx(è[)8ï¥cüí‹þݲ@@©„³ ò1b$/A¿Üøgæ¡ÅU  +)=e +êv°žãô¡‚RtÞk)@?‹áà-Á*&àk/oC\‰3º{ÆO¡Ùºàh}£I›¾°‹&‚‰v¶ÛÂKдØ¨×*Ã2pñ½ïÛësµŠŽ*ãÕ³9´zïmïÐm€U0kðä ù»{œßñ GàɃ™KZ€ȧ,Á¹lkË0úéê85×›Œ»Xj™« U+µ†g+Ú‘uMA˜Ý¡eêצM£_õ_õ ’Û©KÑ|ü@!³ Bp §'³D\in®Ù¨Žˆñ%ÚP6²ÚO†Ç«µŒy7é)à ¨¸s®ÏeõññFÆxE¼-'ˆàSØOG@:ÅíSÈMðëÞ:Là D:Ã|ÙÐA˜‡(„›Îœ;WÎø"MH‘ÿÌÁªÀšúÉ–·à¸þ'Œÿ‰”Ø_†¿|ðpuÅÈ»|ÿÁƒÔÊ¿LÀÊ +ÐoÀäÒ%Ϻ›üG·++@7 ÝøÊ_'èÖ?þK.€ø£IÀb MŽ—åOíø4>ˆ&€Ñø`x–'ËN€¿á_⎎ü¦Ðš0"B·Ã+KH#Ÿ¾¹‡¥Š ËgÂñ¾ù¸ÛÏò?Ùt72 ÀúTiz[fšíkyúŽ ⵑ5L;•I¬…!»‘}1‘3 ²OÝP•Êõ©ÙÖߣÌfµØßä~0 ’˜Ç-¾÷7uã.ôγ™"Ÿ(‚ X¸]y¼©2*ßC—¯oÌåÓÓU毞ö|Àb ÛÐ-”Ü}²çmÐÚ'IÐ\¤d¡.OvåqR'@\mømE:°ÝÝ.PDJTñ³ÏÌJ¬Ê‰kHEцÒ.JE;_üŒãÚêb0:¹%à×%R»‚ªR|¢á¶¬víœE‘[ +ñ Cž“ÓfˆuäâM“j>sô¤ÀÀ‡p÷RIs7¦T§ñ¼è¦(¯Û»}N–Õ»k‚À»÷ÖVïê±éyªì¿¿º<6xuòjßE-ÿêjB±åÉ_ñ!Ü€¸å¡ªÊXûŒžëƒc‹«¿üß®­LŽ.¬þæ·¿ýß¿|¸¶¶º²„¯Û ‡D+øèèU-““Wŧ¯ŒNÞ}°z—oó}vM‹ÔZQ:1ƒ-Vû’=ÚÐð¡!¼÷½¦wɰB'@< +K i°ˆ+ßm}½åþÐV5ÇÒÅÿ±îa €ÄÝ`£»“6¥ÿO"éžÛ ‘þË+ºa c—造Ç/™Ä*¬w4@k¸WrŠ€n‡VĶr=ËÕ¶àK`É|w¶î×ø6Ù?¥¦{Lmá\Lþ')½³·¯¹  q«Q•…áéÜü.™y\ˆä­|sºQÌÎÂ-dÿO4‰c8³TÁî‰wµ¿Ù`&‘,ŸWÆÍÖ/~Ñ–>­GÕìñìL˜û0€Êuæ%´ˆ°­ç¡ü¶Ùª¨€Û©€‰€ù¼hŇzgfqDL@ áhH‹i(Àtƒ&[Wˆm/Š1%2"èÖ:‘oÆ I¢s¾7ºu´+Ì0“a5µ›Xšî¢è9$U†Ž¾—@Üi辨$:èõØ•vçEú~ô£7„¡öžƒã0<=1Z ÐÉ•£€é‡Å¨`Õ†­CªVEºªÓOeC齄DåœL]ô·tº +ùÙ&ô÷¦¯;VH¯‰n€R÷ø%!*öÐ&ýÁN_ˆ¾5'ˆÐQVa·J?ÆÊèÍà:Ýh4ý/…X/¶fâ Ìnc¬Ô·xîqmЌ֡– äœå\B]ýÚ|WGÇ2¤·È¢®‚^þÁÅV¤MiцÈL°;àõ£XåU«‚c¡L!HÑŠ$ÅÑ"”­dŸÇôߥ•ž€9 Àcƒ¦rè"Éh¡9Ñ!¾R´Å…ÜCÝÝP´¢ç€Ö«ã•_Ø Õå$)ø.°‡Úž>*<)«÷î­Ü áP }HGäWõï£ÿ©Á`8§´ãq\_Y¹·¶Fǵ‘‘…{÷+Èÿdlppdaeí·¿ýÏÿù¡ðåŽ.~rgaqQ+cæeÙ—À8:zåÒyñ…Ùêð•…µí®‡ÝwðÓ-"ÂÄzVýìãüwðÁjêpŸQº0vÍý@|“KKöÐ>À·‚$‡·«]@wéñu%¶ÿí`“š˜Þà`=^ŒøÚ°–ᮀY€GDSÊÒ À(@ÍXƽ’SDˆˆôn‘àf£*¸¢ µrYëô»kýÐj7²ßCtæ†Ð߀«¤=4 fÐu¸^èï`6\<Þ +åïóß4áÈ7›ïæ_o湿¿§7!öÛî–4«7 ðÎηýBÀƲÈ@%kÍ&¿ðÿú{X×»sŠdÙ°‹2ÁiÜÂ#/žÁ»z&£×½ƒnfxýgu‰üwRd3¨ˆÉP(¢+ôœ€ÊÓ +ÿ/”ÎrPãHolÕŸ"þ¢ŽpUøŸ Áøà±kc{Ã¹Óæ@foÚƒ{ÓzÔ;\—¬³ž$Ø@” +F ö 9ÓÞ¥)Ì‘¡¬JÖ^X¨H€Wâ^‡Å)gwÚ;4J`4óž¹üCéa]riü!V7D†š¸p6º•Ý)F£+)™šÄ3¨Âü#êRÕ\=—¿‹ñ.ƒ¨zÎl)2Õ/6" '" AA®p‹Y u]‚y•Eáuq–-'5Ý;“•S„ø"ý' ¿€à÷ÚòÉ'ñètdqìòˆ Àù+b†±’~/2’³œQk&KcBñ{þöáÚ§“ƒ—…è"¿}@`ûÉÊ'ËzzCT’(8réÒy%_•­^tØ+=‚[Uþÿ40>¿\,Þ&€ðXaìt, +P¬vKKËtÔ¢¦‡¶*C¿D/˜î"Ž€þ >ðâ'ÀÎóüOŽry\å‰ T;$ÉÀL@£ º© úöKüw0A¸WrŠ€E'ŠÐr"Ýtoáê6æ¶ZE{:ÛrÍÌÌ|§˜´•™]b`žOäóÆO€wÞ‹xK!a¼ûºQËaù~>”oªhÁ±S4<•ER­NlࣕÕÀ«ŠqEJþuá~¥òÎÛ•·MPÇm"ÍüFÝ +ñ¨F³8"tIó" .TÝlJ‘EwBr•ŠH®5išër±þa3ÚçÅüpÞžw–¸S7Rý¦-33">EófÜOÄ$+€\‘9Däã®?àe$¦ð° ‹ÿFüÞ™:rçE½m:Ð&Ë?Œëp€¥îÐñÌWÍh†¿¤Ú¾d€ô±?°IpÅÔëÒužæ Zx¬@é*Ò#bl…üö°FÊÂWXB¿UŽ C!%òÇ6Ž0”O®) ¶„ PA1!¾µ-K™Ùi ¼:•Ñð¡¨S^E‹ nk„ÈX!'3¨Êjôt®ƒí ÑÀi€*[†b°Ùó ;“ìð]•é•Lftž7ùîŽð?®@ÄDh*èu[LzçVaQ&UòµçœªÚÝ)8§ŠÛè‚èJ ýŽÔ"§"ȧuWu©Q¨&œPfsÚÍ'Ú‰;áLqVITºiÏwƒòé])jMn3Ô+?i8Ûü»;Ÿÿ¦Iôl¬®ømü÷z•~PdÉ›è_jPölà°?lú…1ýdÿÙÿ<"á¸ÐÑZéXY(gâö ÕùÚý%Z z€0pu5<î`´ÔQjXfKÐO;¿,pH£?¹« EÙcÁ‹#jg»Œ€{ +Ú®÷‡=0/è Ü7ôcýëp1Úðž8ÅÉÀ‘ä°`ead€ûèq ü7îK‚ÚÇ£ýм„ŠNé¬hTç>/pZ`%îz¡ôætöOóBaÐîF=|Ý7¦¦²|‡-_ÖŸ­~Ö+nP1 ¢KƒJHŠßM3•ðl¾Ÿ a”ü¨]¶½ëMI^­Eo‰­tjVmà\`jJ†ÿ{aüXDDaÆ`ðwoD‚‚ÒT")RÔ¢•¡Ý¢3Àü/¾îôFèê‘åY1ã’%ìéŸsÝq€àEˆÎ‚ú´:y82Ì­ÙíÛJ¦ûz[ÙŠV;ùÂCk€ŒŽ.Àâ?0@¯tîÈÂ³ÄÆ€-ÐõÎ(j•qöPH镟½Š0ŠR$ÏãÉ3zS®åÆ?§£ €j¼RM7’`¿ôPwìCb @™½·@xôº(ÇÄôÅIåras@|kÒïsðN`ö¡ŒS¡SÙ¯°uqeƒ–a©*íÜÈK[(0ÿq`Q\;¡5X+°6ÝŽ;£Xpª¥-øÕX:Ö˜ ¾*’¹ˆL)8g;ܧ6D + ð«!EÀ(Œ.C‚ÿBN¸<Ùð¾ãŒ'§ò‡ŽTb¥N³Ñ‘âèüˆŠªÙ¿jÓåø‹R­¯UQ×\SLà7üëÎ)bn}Kç¹ôÑñ¥™¡ˆeéÎÕªã* ”–ê§IÎüÃ=y*þ2ÚÃø_»·ªí*àÓ¥—ñ7}JÏ¡íh%°0&ƒµã(=J€…åOz€Ê‹ñ}ƒ—Üpš€ŠéüÇq40€—ÿú0ö^ƒ<øòa9 +`íaxD¡‹¡¶Uïzü;²]~ìƒx8BºCþ®`Ñ“ü‡ ^âò€ÿ“@´6ßËË—._[àÝ&…K€x@òÄû&‰ì¿"/!Gǭ߬ÁvBfmùÓë/<ÞYö8µxOÕoØØÍ</Ì_ó… o\è:Wù)oÕë•÷„ÀB=†ßkýýtcO©ÛÍ!úÄ‹üQªýî¥á]oWk 9%³n2˜Íêg0žSŒD|‡ßÀÀ[ý’· ðñýJq!93û¢Hú‹¢(×ܺ¿/üÇ'?_|ÝmÐç3?ôåŸn4Enû£­Ã½€xÝ“‰¢èäÜÀ%ý0þ{j¤Gym= Hd:b‰” U„“¾bpßKI¼8ÌzfxäÒ¡ÞZôHrbwÀ€{€QÏùÓ;!½Å +—1¶¿…ÎWðèà¸>%(”ÀqÄ ^nÒ xEªÈ8~Iõ„G;Äš˜%”+2} „ÐÖÖÂÿ¿*=%þ#I_éÎê_HQHìèO! p*«×±fán}‚8[þ4bþ±c9'ü¥Õ Ï;Îàn+ÆÄÑv!Ð4*,TI0|¶Ò!*ÔÙÏÞ) åéPØIS»Bán Z¶­“þ‰¸ ´€€Ÿ…J…p†rD[ ñÁ:f¸ò‹xl«F‘ P?ÎZI²¢—# •^ +˜ ˆÓàÙߦÉCŠr 4è4×Ññ-±nŶ›E8 Û 9š›k4•á ÇëÚ;Û‰²¾~¦ßó¸w½%ÀZàῚ°_[€ŒãÀ{ÇôÀÇ9 ízî$À—×,›z?!Kò$`¤À¿;Ù g»`ã@€¹„öÿåZzÄ:ìX^½¯Rñÿñ¤.h¾ÄL@§ €1{ÊŽ"ÒY‘ +ôøƒÀ'=*ЀKƒŠà*GÇþú‘TMˆ(G,¦f൥‘U驵»ÑÓ«Ÿ_̤m¸WrЏÁŸÍÁm@T=Ÿ¾ù N~I VÇkiß*ÚÍ\éîí W-‚Äæù5ឣ«þ:@‘ߨ¼õžAø&n„Íͯ›xò¶`W`.ÏD ¤d×ÈoN?Š( 餆,l°7Vèz²üß2üŸõhjåúTýbýýœ-[ !5Åäb)³hØÜ|´w³ùh&kåCªÜŠD'…Ì]‚4èZöª¹¨O s´@OßFš%ª¿Ó ñäŠ)íÿë¢DákPeE³ +þsƒƒÜ´ÛÊá;›ç›þÞwäeE¸‚à@#€ïˆt$éå'tôägêÇxÜ1ô§ÌûC( ÔˆkP&Ä idK("¡¨E@[´¤ƒÐ x<¨]èüçW¦s}ª#܆l/=’<Ý,±3qf+ªPÙÀ4€yÂ@?_v\¼ï›t3Ê_H'”ðä$5çòiÙÿ’iœÓF5?‚ÚzYÏp(ÛÀ9ÍyRwÎ,%œ‡ÜÔ€è¹90ßM ±Œm%ï)Ðé×›Á@@ÓˆÓ‰„[ùµKxºˆÁ8©ÅmðöB޹-Œr¡°^‚è”ð½[Þ#F™¬ %P­Ò:ö(Y†¼¶Tªƒ&,ÄZ@†ˆÐO5ûâux#¬vÜ-Ý:™Õþ‹•ƇM:¼@æ<¯ãÐã°&“À}@¿—èܧˇ=4EëÐæçqLãq€O&ËN€<²ÿ{ÛÂÁ}”ü°@h}Ô๗&—Áú/ÅbïÃ| +à™Àµþ//¥™ý‰^€]ä=´Üe ì‹îÂ*¥Ðõéß”h`—Ù0¤ÐA:‰ ‹&ïÜúÎ0'K™‘ ÆœV¤`§ñ”p0’˜€¸ÚÆb0½ ¨pcb3%¢NJ»çÖÑRºÐjAK†Ä—£]Ðg +ÛQ½9ÀLÍ4”•âÅ8á[‚o Üu¥6|ÒÑÂ@³<¨¯¬øòÝüQ²õ\*РÓÖ‘«¦|ÒqL]›ÓÓ5: ×s©áàT9g@¸jÿ²ý}ã~gk°²tt@Ù@ÿR©@éà<âð(šÆþ=y`!?·íƒ‹'÷Púÿaü‹,º@~ìØ¤C7§KcY¤÷ÂÒ‚ìs•jøJJ¼?¼èŒ©ÇqØm?€M~÷ûg&¯! (³½ë8ÿë š!S£—™ +plauidtraôJzKóŸOH`¼#´{åxzš¸»ázÖÈZí¼Qä32“s X|ÙíihîÏÏÚ:ø_¿áùK÷ølþî4¯Oe³E+«¿W~»RÏê9£þ-ÿÔ¼ùA^ÔÆÿœ¶ôÍÍÇ›û.Àê4¤ +]I`¡÷=[Áëõ×ë7dÿÿeò¿óNE¨¯ îÿD +Þ®\¯^ú[¿n÷R \BÿB•6&j¹ˆM öèK‘¯7¿‰dˆÔžmíÝLSý i: ÂÇ™”8²42B©ZH@–͉²î†2ü#„¡ÓŢŋ//aq 0÷.@  ëÿG”llá— ¿4ÞuDO’·Ñ@`Ši-ø§ÓŸÞuÁé;wþ“~*FÌ_ëåË£ A>üÏ_~.ãf—žÅo­ãûÄCB Ë|¨tå@ÄØt<© !áy(‹.cE[Èëüi`ÿf=€xmÔ}íi˜$¤ã´K`r’dú¥îéãµútÃڄq‚6¸ §Óë4€cF5ÎEB·Çc‚ƒw‚D 1ˆ: pX +0¨sM P\/R"TŸË›ÓĨˆ„¸Öø{ð ‹ÒÄ$’ +ÓÓ†6º´µš†î€a8‰ +À; CëÌ€N(!1P‰á=\¡”´!é·Þtb¸²Q PÇZjñ±£œR|H3Q ó$ø_õ£j£!æbÿå©ÒépWFµ¬–0úµö.ú_\¸sÄ0zz€“< 'xd…ÇÓè#}Ž UÂ^@Z½[˜”Á¬ˆx g„èu!ü7èx‚½¨¾SdÌ,B&¿-þðþ—úxcÙɀŒù p\¤T€&€ÈpþÛ @À¥Ë—Fðè¦.º €Gמ‰ŸYyGþµ&Œ{%§Èt UêH +ƒrú=Λ€¾ ÃØÚ Åôü×t ÄÊ]Çîÿe=h–u<ÆÉ,™˜U’÷‹ß q¿ŽÄAŠÒ.ž‘“…ýÚ4hª×Ü»ÝóÌ*S[°S} ´xhpBÁ=LdŽ…{v8žÞoö 4…º:I›½aàWš.‡Ê)QâtlõcU*U+ôV©øWåEKÖœvduµ:Ð\: Üâ4hê3ˆyî[ø +ŒÄ©]µ)©öÚ+­s£»ŠÃ’W.H¾€Ð=¼œ”x´@Ö¨W‡!ãbZ ¾É}ê"a"€sgþÀt,‚{c~w«•òeþýHÇ ÿ¨cúXz=å(=Ç÷X>Ð@ШÀ¨LåS<pïÔ ÌZÌÞwDÀ_Êê²qwÑóHÛåÅŽ`‘~€.zayÙ5ž( ¾‘>:‚æÞ°H`(îðoÀgà˜â@¢ˆ®`rôjÄnäQÑ ›½tùŠoá¨XVéô/[DôdüÙ&Œ{%§ØN/´RR8F¥µÚEséñŠ»>næ_{ +¡p &gL{gÐ6dðѱ>˘=`³5;Kd*bcÿç׿o|øî‡Lô ì„‚`ûÙ…½Œÿxv?/öT¯c~}ÕeP©_ïz½¿Ry¨¯ÐÝú‘ ¸þNÿÙst ¸ö¿N igµRº 8×%0¯áæãß?¾¹þn£‰ë¡«H««HžU(êëÆþc]òÔ{oãÉЩövÌfõÙ|œî ¨0S!M鮈ÂÛÐ/Ì0 ·z¤{«{àQ*[[{¨’?YLÞMK JÂ8ߌ^ƬIè/ÓæáLL‰_Þ縋Ð*UÅì:XYñÓ)ŒN»Øw7X¥ Ϧ¯Ï€ÍÂNoÏ_z ?ƒgÓ 8Ø7ô—øGI”Çi—pþDùP?º§×ÆÇ+²Lm¨‚‡˜¬:øÄædû +ç ÍÆ\6=gBK@Àj`p®„FJ¥äXÂʹõL™ApE‚ºT"û?’)…+S^@43å0þ’É€êtñSI†ž¡øÊ)Ê"­2ܧ€ ÁDqÀtzêÂ×?ä¼ÂR˜‹%-]R!3 +çuwуH¯57QLTkžäŸ´b|·Ô=iª8^烵éZ^/<÷©¯Eÿ¤ú…ÉÈŸ¶ú‰!/ÈH? /èpš`äxÀ'1–7€ +4ŽºÀQMë½w$øw‡€£.· wŒ¼=2<}QÂího?EÂú·€…p(Žzýù€Ÿ8€÷?[,=è‘ÉÛ|P’àҥ˗ +cc ˽€Ä|ÌÄo^ ã^É)zõJŒpBím¶‹ö7íf^|1ßjó¹Úýy¾ƒ+Àò÷x¿ÞÚûúñWßüþ›¯¡³2éóv{è´”™/ +íæDc¯ø‡o~·7ÏÇq…ëSÙL³9Cá_oþãÞæã½½v1ÝhVó½bÝCòÚ¿.æ[bŒ>Ä á9ƒ7¯×Fq[ T×fŒÐÅ*ShY¨_¯ëDû«Í½âQ{ÿ‹|¶Ží¯DïÕú”c¯Ud³_ó5ci)Lnæ{û{û›ûQds½Ñüðƒõ¶ëT¥_í·òGm]ïfûC¸ ÿG¶®ëÏgð<âfˆÀ&´¶«ûíÇíßïïííû›>*…ïÏΈ&QÑÞÖNûɬ½×þÓcõ?Ú÷¿Ššÿ}ÿ÷_ýÞŠ¼”ðÂY9ÝpÐ3‹m³x ùÿ›_ÿFøÿpiiy‘NP‹îÈèOÆðè‘ üG¾|¸¶Ììg ¿œ¤€Ïx/ݹ³ #çŽö%ÐûqåÞ@ê@õ.øóÜJ°ì£³A`ø‰}”&E¸ÛbWÒù€iøß™€˜/Ã{,@}ÄAœ`c”?Eêµ3ûð‘½ñj­ÞÀ`¿@0ƒ@TOð'€›þPÿÚÙ¬”™° Q0n0TÿÀF ZVºÝø Lv28¡j`¯h¦Sx¾¿(ÄæŸ›Ê0ö9@+W!!d¬•ê:EÁXöN€ûJĨU¥(œA¥(÷܇:+º£k$csýC¥ZDº¹fƒ¹‚0Q¡µFW­º E˜þX™¸†éFÙ´ÌyO¥<Ž ÿ‚¨VM‡/#¯­¹ßŸmÿdÿ³9¸èTOÑÂÁæ³{‡gü^ªÀ +žƒãæX$ øèpd€€aºÛÌý»dîÿ—Ä’`yí>1댠ËþâÂä˜Ê^^ŽªNZŒöT^"?~BŠÓ!ÀM¡x´„GÄÏ‘.àˆøFݰ1<—I¹Ôë ¸Ÿ\fö¦ö˜ + ã^É)rM2Á&Épì&&ªÕjm¢Q}·:A¸¦C’è Ú¸6Ñh4j7kÕñaËxÚ_ëìªÙ¬é HQµêD$¾¨]­V¿Ù¨Þ¬xóæÍõ† +U¤‹zƇ'†'X]ÙDcXÇúWÇÇLJ .ôéÁýõþ÷\ÔÑ…‹ÃÊ/‹@2®lãÃ.(Aßë}¯¿þ?®\¸0@íã•áñjEÅ£_m"tã½qóÃkÍ꺮êµZaíÐ +C¥n )Äu\T}CÃRdø¢t!¦ú— ŠãÆ•XŠ]rfDûkï®3¿yõf­qS…¹ÉMÕ‡7ÝqüÅ¢—ŒÞ9½€.<wÄλz;3)™_#Šäi?$÷sÿ×÷µ[{¸°ðÉ'zE¤\’^ÀÊÚQÀ—x>™T”ä—÷±%°tîÈú@¿xãÓ ì%¶ælÀµƒ8‰ê”*Á~ÏL€½»ú7 +oI¢%ö: œ½wx’O:¼j7]­U†+•ZU @Ö*ØÈ¨@p/ð¬! 9àÌ´ @ýC7exv 05ŸÓƒ¸D1œ±«¬Ôލ +s ˆM§´~q6NŠå¼bƒ­?lJ E `o¢¸ðVjJ“†Ò¹^òÈúŸúPQ0‡,Ṡì,.[¹\›’¡ŠhQœtÅÌCj( eÐoB;oT%éÖ”Y1J~S{†éi¯W+"z ˆjé ö¢©ðGÛiðkÛ ø§ÔO—–Ëæ¯RNŸàè(€±Ò06xù€8@ÉâU¤ÝèêyŽÀ0×3~À¸þã00ì–ûÑÀ¼Áý†Xòg –µ[ô|„“ 2 ôJè ý1‹ªîôÐ>y¬Šüþ6HÚÿJãþ‰ð¯d¾•¥ô\¹,R´²¶Àǀ 'Uˆ¯@I`~Ix“0"2Œ“ÑoÑ«À"Y¶u+×Ó›eEÁ'»s¡sâé¹4Ë—»)¾]LäÙÔ[´Æ1Ù^­¦$2/ô‚IǵO™ÍfÕEçÙ­z}x rK&uQ|·÷rYäíGØÁ²„×±ˆÃ‡öŽgùVu]öš`}çõÊð°Öa¾Î÷Ã뙿XÈR·=ó!c 0I={àŽ×߯T*ïOW=þ.c^žKOêYÿ@Öº)æ( U¬Ï«¨ÛLcÀù¶Éóõ‰‚×-ë·ò =ª•êð€.H—Ÿº¦½b}¯ºŽÚYó–‡jÕ«-'§DÅmq¶Y|Ðäc„¾À$EÑü™îÊ‹e¦¼Üë8n@w&ì1e`z_õ|¦%<Ÿ¯ÝÈD!á8€ü¥Øà·Z"–µE<z NŠDÜ»9 ýº“ +bç΄–ˆ³ðb €7èÿA"ÚÀ§“…o/AÑAK ?ØïUðôÇ&ЋC’€=(@ ñDu„ g;Gþ„Ï©‹àIè$²9^‘e*@3#˜V¼Ð­Úa¾r>»ãÙ´"…x‚iŽ@»€#V²„-ŸÈ1¬*›ÐVé(10;‹j#а2·^j~¢ª]»­¢¸T^Ø¡/Š'‰åD]@lÏÛ« ÜW?éq.úY¤/Z)[S7`ºñ¡®Š„±Ñ¯ñ¡ ÇèPÕR AòV™æíƒs…`½ˆt­R×óýÚÚùíôºx±ýkö‡ÐIQü?Šûÿ²+™õ?õ2ót<¿ÄpL¯E HëàÀá>áðÏn€#€± Fð~0R3…¡^:ä¢"ð¨¢Å0OÝÉêÀ–ÈEÚñ¸1 + +ºéŸËüGßäÃb0£W×–¢`ù€ú Þûø»’0"´#±Íö|gk6Ïn3«ŸàŠqëy{»U´ÚÙpL€›Ñ×Û+è0ÍÚ.¾ØËªy»EëÁüìÔ›ý•,úpsïŸZ…ª˜oµ‹Í¢hoz¨ym¶mʪà&m e|jß?ãþeÕ¿Ùß_ÉZùtOÑh쉔ÒIÙÓd·oÝ¢“pÿÀ@e Bs}^g _¾>›·„ŸÏ3ûN»ñ;jÏóùö#)aE6q仑^÷âQ{³hïeðëGDõ=F4TÄC*uÕ¦èö|Þš/ª·~ךåsƒ³î"ЌϠ”³%=wt h'Qé{[¹¨~×øÿéO/\õ°ò\$ø—òã5ôœTxlÁ€cš~sÿ7k¿±`íTÀêOFG~2zù +fM`?}<à™&€&W[»·°"Õîˆ,ï#kòü§Ä"Òµ°§gŸGÝöíök³ïÈ%÷pð ¹J¦,@xJÐgÇK$öDÅK%ÄgâWÏt Êc—Jµ*0ª×ÆÇ†+ã•ZU€VdÙŽ áÄÂ’þ5¢å@«Mc>4MD‚Grm€¬V êjã¯öù<+ü®f EUqœ TÕÆÙüÓ‘Öšª¨ßì`¼²€ÜR@*Ù¥–×ÈKr´D-Hƒ4W‘TµÓ‹Ä1ÈëÇJ)އ68ˆ†$ÃÔçâQ™=åà!Ó5é$+ZÑÓ_‘¤L3¤X…ŠÝëu/ô¿~æµþ‹ºëb[/#þÿãØßý8(ý.þÐê‰=&âá§Ž8ÎÀ(Àô«¤² à¸o€Ë`ª€!ØôŒÝ .äîB¯@/ ý’ÀÓ»L=~®ñDÚwú€úìc1/Hö×ÿ_ +Ÿ\>0 /áˆ`ºhYí]¸«á»³¶¶06v'Fèqä§}ÆýŽ$Œ{%§HëajÛb"{Ôb~£9 økZh6“5g…»Ã9#Þ¢3<âwA +g|@¼ ÏÜÑ_2[ûì™÷”¿(ªß©çÝ“ÐÓ ëÈ[:ëÍŠPøH¶ø„Œkè…ªAxŠþm?Cþûû™[˜É‰Šz]@:£œÊ?ÃàzË­êÛJÄÔ€Ì TW*©_çÛÅnÀ—j" ¿Ó†ÚfˆŠýÈlŠÓ¯9~jârgêïU~Zyý ëYtxäÆL4ŠÙ46 ^¿Þ¹/:…kãvvš´Y]W=Ð&×+5æçåµýý¯_$zNÜÀ+Ço6½Ï#D'€ž™zN+èq¿Œ 8Ø€`íׂ~Ù(¿y¸¶|ª`M cŒa€+÷ÿÈ—W±zÄ/TÒ}åëõt[Pè¯ô +X¸8µÖÓ ‡$„7ºcõ? +@ycAØ&4 úžâùqÈQéCº‡)T«œ¶¸©HÛª˜á…ø =ñ"«‚.,Z™¯¢‚0Ç@õ›P`&F*°µñ@/ô¼éYµô‰AXá¥BŽŽKå¤)³L7(A‰á:¨7ÌUt +¼•šáÀ}¦8J’’Î(à-“Ñ ° Ë¥´W æVÅ*¸ÒÔ8Ï(ƒ‘œ|©L²(…+‰ :»* +תD´ðëö锊‡cñáàñaÞ´ó9ÓATk\·ý%;ÿ×ù@~‡â°Üjõÿã!@OýKÓÀÒ!Gß < ‡ZÏ«0ZcæÐ`@o€püG­'»î¯.¼“‹«÷ïßå èGsl¾FÐc»ø2€ø•€´Œqä1€ËñéßåŸy79ù3-pƒÉÑÁË¡7@»¿9²L2Û€/äþšnüåK—F w&õB±À£ŸL!¿ñÿ H÷JNÏñ"8j w…w ¼JÑ3™Õ³élÎG"õáü†§äæ{õ[‚ýäiG˜íŽoþX¦®œ=7PøŠê>`;/ØþH(;?«J»Àk1U€ÿêþÁòg˜¿ÉÆí¼¸YÛtÂlíÓXéÃÔ•ÊõJ…]½bqƒïøÌÎò‰¾ÙÙb~¢3ÚQz‘dEDE$Ü‘ù|óv°N¹h¢¢*o TxæÌþ+ÉÇë­þÇ0È$ºiœEÞf–åé{,…¥ø¢F¿ÁÓå¯ ãd¼:$2³` ^ÇpÐÑÉÉ1ôâ‘6äþoÀ<ŸœêX¹b³&П>öŒþR*é«÷Ü¢,=®tHóH`:úOB$"_K +w4^ ÚùõPÔ@_Ù ¹ÿK`/ÑKÄ[ïü2é¾U:RF—2.³þ䥂çŸE.\¤'ªðVkà Û€2N±3~œt‚Zƒ$=)Cƒ…t +‡×¡<ÙÉWIF²–Ô¨ºÁÖYH¢“ÒQfuR{hC:§PYšðqÎå¸mØq‰\- +R ‰gÁrEH çjT)i4'•ojr‰è@½æJÄúœQœ.6ºµÃÃbú“ôÿ›E¨¸‹þÿŒó†ûöSD¹Õq²‡</êpŠ`ìØQî‰ÒÅÅc¿.ëWu¾’ì+*¹Nô|ù`uɼAàaÙ pAÆ?߯‚üSäÂòêÝÓ€ª¦ý_±ÀWàVˆÜ Ы¤3Pe“€Á+î˜.óoßÉC¢puaäʥ˃“wÖ>“u :Ðñ°ót@<¿ÆýŽ$Œ{%§ˆÁþ8É?nµ«ù#¦ÂÈÍÒeؤÆÓïÕ‡Ã2K×p§Mé`ú •‘'óX˜øÎ[gÎ \Ïö{Õ­Âö¿Ð}Ƴ è+0ÔFjð­Üùö·ÓÿV Ë?oö`Hª¡^ÞnÔðÌ3rÌž‘H‚®ÂiUL«ÁÛyõ}©ËdBà¿´£²b¢- ¯G| HUsP*’îHëñzµµé9ˆ%ºJàŸÏðâqœD÷¤=ÞhMùËH1@èÁ¬FMÐߟÿͲ¯{¹Ñ Ô.n¦6˜“åÒ%€pr¹ã°ô µDÏ÷¨Hy::Ð €^$‚çOãÝÒ#Ÿýú×nøŒùÓ=#xx«u=®~ÑŠpï¾ìœ¥;+ÀrFð¿ÇÐÃ÷¹ êó¥X ädÀ }z=Þ„ý$ ï >%– >ÐSH¿NÈ6tùŸÎU°~YtH"åT†ññÌ`:«CÙ¿N9έŒIœäqà’#ƒþwõ =T˜cŒ»*ȇÐi'‰ì.“ºUYœ e-èˆò˜æ +F¾H£,(š8‹¯ªKPÙÜ¡²8Òz$%EÀ=*¬› +ýÆD¯úû™×O¯ƒt§_(1íïä/ƒå"ñö¿®€=Çôð(<‰ +2°R"}þÝËõH°ÏO|à´N©àbÏ0ÀÅ…Å¥%ÕÏŒøØKõ`„ôîµÄ¡áÿWŠvcÿ¢¢Ñ*P~ ÔeúCâ›|D S£—/]@Ÿìðƒš¸:.A~/Ð[ Ü+9YÛŽÚå«ÍÇéÓ|S“iOS]êÞCÃvm8Ÿ’¡[zºAF-·´˜Ê÷˜ø½œ&€YfíxëÌY@^<š¸Íˆi€_N>¼¿zOOê/:X€á>e…t=)áRRÐ À?< "Æ?ØÉÔ¿BOx€mðýþ¦}þ”(+o}ÇøÐQ¼TN!ÍË=T/öã\zÃ2€NXf˜¢+ˆy«U$Üw:o…ÑN…°‹"£1PJ¡BWJ€ÒÂJ £Î€R2¢KÚIÍaAx×çÖØùÌn¨ŒÃa%ŠXð•Êߺ¾”VeX ŠÀâH¸NŒ’°åJ\t䌩„†•öU°¤ÚÆ+†{~u“õ'9w.0LÜ.÷%Ð{ï0‡ÉVÿ‚G=«§÷8õ[ß³€¸Ã‹ûÿc(€6”‘àþ°|ùàîÒäèÈè˜ +õ0À¥Ä<0þq¨Háÿâò‹<§ 5Ù›Q¤~ªÝ€ŸIÍ«#£É Óß @rõÊÁ¯j{õÀ2z5Z0 +º?n‚G˜Bq'–ÓÇ€ô žàÐ+@›r¯äd1¶#‚¤Ö¾íÝdHKMƒh06‚°Æ0SüS±™xÊý"¹Á7{Ô€ˆ)0iÏšTÁ£ªˆA|_PkëXˆ?ÛÁI¦ŒÛ5A¦LxÏóÏ\¿ý?­`ùO›ŽÈºžnÖ-fç/Mÿ$(‰wa¦þÞÀ›ÙÅJv½n|æììG®‹/ùJTŸa~`¨Grà£@/Š*SýO¹ÿÎØ-Áþç¶Xõ­‰º®•âUËuü,¾!ˆd·ÛÕB5QœIÒ*ò‰ó' +ÓaðºÐ£áwNÇЃÔ{ô\¦ÃCÂ\€*â°üú7¿ø^S§{Ö< +`laåþg&Ï8‚@VÎÚ}¥ÒëðÓr ä8äpd—Q2•Ð%<é ˆôz°ÿïeĉ‹à¿ô\é3ääKÐÈ'ØXº¡Røÿ;EªFz©ö÷_¸pq|`@à%¸ºyÀP:º‚z†EâŽN›{¿ÄQÀDðRÌ»ä0ÄÁRΡM£8bˆ ªH]Ö SçIŠü¨<Â'È¡€ÁX)­kQfguŠÑ%èA"ˆä0.G‡ø"-ÊPº/ͧ‰V`xØ$I•8㨓Š>’“F÷yà¢ðÿ"³û÷™h½œê—ÈŸ@?HŠâŸðð瀿ÿ<e€O< +à}QÆ—ì@åFþDðç—€XR€;þʃñÐv… _o˜FTwÌÂ0@c}ìí´ˆöá•Í »¤3ÓÍÐý®^v@0xÌÁ…ß>ÁžŸÀ}¸D¿Hî…nÞÕÔ ž_í÷c§çß®ÂWm/–@ž£Â$µßT Á"Øe8Kø’¶ó¹hÀp6u7Žõdî2(Ð÷ +˜¡¡ ÊdþS×e†÷Ÿ9k·'²²íWA¸Üi˜Wýóó:….:кY–§ê'Û=á?3ÿ lãÓî5U/ªµ<«_¯\ÏyÅÏÒÐi(tªþÞÛ•ëý´ËKbZBP~~}"k»n+B·ACÚ>A'þvµÍg îØþ˜ýnb¨ªºä¨×7Ç|'¯˜(1wQ7M%R7µE‹p8ð½E| bëUœ"k—R€‘Ò €C3èÓ눨$ä¤ÀŠ,PµGè»÷ëû_ưÖ<ž`aŒ>köˆ·¯@Q>ýõsÆÀÃÿ!€/%…{ôŠ÷_H„õ€ öÝ 4úyÂì坸H Àï@?ð>ÀßÇq"x@G ¥)yÂBï ðQþc" ·Õ1!œÁ=…Ù‚™ÆMA]À°ÄýØ(š+]iÑímNÀìð ػª4Z}‚Ìu6Ç“˜¢áX‚¿BA“€pÄ£Ý:Y[.Á™or`Ðwm¦¶üuˆ!)‹D*XE‡U9t6RêîÚÜÇÐßw†?u£ókä ôÞû(:Q++‹‡Xµä‡öøôxÀÁ>z^¦’c¾ ÿû£óõùÓ*Yöýã#@ÝeuattdT…ÞpW¯ µê½!óß]ɬØû÷yÄNXVõN1þÇÞamÇb8€$†.O^ güL‘—Ò<Ð…è0yµ»Œþ üdiõN/üCt˜ +xPtŠ÷‚ˆ™Žx<Pðï£r¯äd1•V+Ïf‹ª¿ø¿4ªùKiâëõ!Ìÿøö›×‘DÊO´Šz•å Ÿß~ó¬À{Bç–,{šE b3Âmð6¸÷k›³³îR'@õ¼ÿ1±÷KÈ«UÜüo½Õÿ&_Tå’8ŸçTLøDÞKÀ`UU_«˜ø¸xßUÄiARpd"ßäùG$‘  ex¤¿uIÍ{uë+Éð,¸Ã„)hÉEjò Rñ\y>¿Y¼  `mõÒåKW.aièÙXîípðe¥‡ðÀL‡æXö\@ +/ÆË¥á¿=ð"ÀŠGüråþç&–µe†N~ö@EO¯Cwèàxt£{=\{_ÚÄ['`¿¿Y%z+`ó ÜÓ(€3â0úÛúgkô×¢Õo 'Äð÷q`}7t¼FN[dÅ&I õH€è–hÁ·Û„u€bQ –xï½ÇÆ‚ÁD:á—ç£r”HKq&¹f­¤¤D¤TÇ{1v‰²Õ¨XÐM§…ä‰Wáɺ¯ ¤rø¥òÍ +X'’[#z28#EC tHi0 ÕØ£@K¿’º(‹Žu‚b”QaŽÿ7áø¸îõÀÅþ×p¶;íF­o€ù2‡)’ÿdG>Üí ©cúXz=îðåõ¥ïÛà `õ3÷Àèïâ?J€å¿tþààèÈØâŠ^¯‡˜ÿGÀ€p,øòàÁýSÄjb­{f;€½¶xú!c1àß’:èÔà•ÔÀB?ÝÁƒ"ü_ZMo²X»¯+g*`ÝÑ €=ñÜ"¥óÿ•àû +wTìñÎö' ´Ècˆ'¸-1Õ"Ã;+ª‚:Z»ƒXWx<Ë7ñ}_Úׂ:wè?sæ­Ê”жíoëbð‚ª†°íVw¸€B:Õ¾ù{m§nܘº.ÁØá¿ë±Ð-Aõµ«ÕÖõ·ý¡Ï3ý?ì[¡,ùcºJê•ïô ܨð¡’ªÈ./Ü`Ç¡HGèˆ(}fg÷j[Ò7¥™ªÿ¾€œË¦šéàb¸Qȴו×ë[©Oéꦑ¢-.ñQ4lÍǰ šHT¯¯¼ÈkÉÒ?Aô.H.·Ä»CrØ`áE‘‚ª¥è`™¡z' ü·rº`å à?ùù—Ÿ­}ÂKo…ܼæV>Y ÀÒ/z9ÞKÄ‘!\H©iÒáý—‚ÀÿJà¿_±Äë0è÷€NmüÒ0HèàïcÎŽ×JG +Ú…%'ÿz=ÿ6@À¢.¶"Xì·aýËNöÞ[ ÏØÝû‹€Clè§4eÖÁa@„õ3šv .Šña<Ú¦lQ$§„ÛI礈no¥™/(?Š2D›Rì”°ÀI#õq' 5(â_é@¤)‰|HMVÑÑÚs§¹ÍéhyæÜ™þþ£ððÀO^¼ñ¸ïÝÇ&`‹Ÿêðýç(g|©>€"0zÜ·ôíð¿‡L.ðeðƒûäþÊ‚vÒ_ª/­Èüçk@¸¼¬ÊîGuÇ ÌÃV¿­ÿ6¤'€äWRspÄPß+x: íTHWÇóïñÿqõòº|Éo! WÓL€ž@øKþÝYˆ¿Q¹Wr²wŽ!ŸÐh¯¶-«Ý˜Ø‘€È¬“4šÕ¡á?5ðªÎàþ“¹^¿ñwY6ÿ(«£ušÎ9gÀ|Qmn¶ +¾ˆ“Í~$lÁ/üõ±”ø¹UÁ@¯í3°^xzý=ºò3ì~& ñ¤ã…‹j¥¨¼å‡³oT8‰²,ߣ/“UêõþïÑ `FLäp6À Ä]EÜ¢¼#y­ýãÞ¹`íò[\6ó)Ь7‡«mÕ¬Ûá>€7TLÜ5ð?Q‘¬€ýû:5;“KWÚ¤—á)"¼[M΀r&áAÔÃzüLè\þÓÐõè xª`!õøüáoL$«‹“#²t>ÃÊá=·°ø©44Ô—]Tšeý‹@è“p¥šÖ¥ôôŠŽ#ÁŽ Ì?Рôý½é̘Þ@Oˆ] üײôCð#ŸüÐÎÂ(€ž&À‰PÕ½‚†o·Á;AT·ÅM£@:éä¦ $#’œå)…Êr"»qÜXê ü4D £’„@x” Z +C±žÎO,ÝùK†Q*&!Xmm)äÑb@)0(×ê:U¤“p+”×POa¾ô >…ÚÀݾxÁ€×âN¿ÿåEkšàò—ÁAÿdþÿï‘þ-€;/ÓËh¤À¡Q~ŽéƦ>xVïÞM˜@Ö–'Ç®º JI ¼ñ1ÀÉú‹Nw' +5ªêÀïNØ‘bƒŒ^í΀p0:z…:“gärÿF‡ia³¼‚rÉÞ€…±ÁpŠð¾¸—Hi<œ½€ô +€${%'KB–CÒúºØûªÈ«EkÏ߬à Bó/´„MæÃiæ:Êòêð­"›Ö€9ŸÖ®µÿ˜yÁݼ™}³Yoì þønÏÛçν}c¶µ¹_4nõhóñïÚTå£Vñµ`–9ø˜  ØÜ,6ç‹Ç­½Í/²›Š9§h¨¼S©Ü°[]z¤ÚàÍ¡áìÆ[o9«¡¼’0ÁpëÑ?íµ©0…UÂÞÔ@e¶þž¨L;ƒJØc¦¡¢Ø{,:²™kó{¾ý£ð¿h·7Ûó_µ‹ßµ‹fõÑf_ÀÇø|mO +äÙº"'j_³Ü³bÙíÜ ÅæÿP¡Èí¼ø&¯æû-ÕÀˆ­öÏ«ëô:8aáÑ\ÓƒÀ0€ƒ3à8êè™ @ÒsNÁ…É_ó9šº}ß§zšÓõ0 €'=WÔgeGè]B€•Ô òÙ C»ÒÛ_H +ƒî%ô÷€•²@ïGø\çôQ€–¿"D€hÐÌ7Hèàïã¼H ó%ÜÙËŒü%.ï(Á êbƒ zs‰3|*„ýMr¢´$§ì‰4@‚˜þü˜Û2±Tu™‘ÝÉ}BE‘[{ƒ:Ú‡U9¯:…Ùä¤`W9I©c,*Ùé\J( ¢˜ÿ8")ž >+ +!¥¥Ùß*^‹@Í$ƒóq_w=ã2¨Z•epb÷²ðÝÆÐÿú™þ>ßiÁûÛ/ZSÀõ½a#Ò++Ÿ.}Ïy¾÷(€#}Ù_ö[Ñ÷߀x wõÜÝÕ’€¿”»+ÆÛÑ…å»îó¦°€¹€ìˆV€É…UmAðD†¿­þÀú„ø=B'‚ðê-‰Ð1 ëà:ÅŸÒTÞy#ÍôÚH €€n•®Ÿ¦€Ÿ,àXgí‹>| ÀûŽ ½, ä^ÉÉ"¸:N˜ ,k¼Û°á˜ÿ xÀy0?ö„Øþ>æ\¹ž, çÞw›º¡`g  2`4…„œŠ@S@)€êß:¤T‰J¬p™ ØÕšÊá¨LJvÅQ0"TW¤K‡¡S„™ÐÂzšiÂŽ‚îpyÂ#¡0b ÷exC|\]$`ïúÉQ÷HDO…Ák¡j!Ê‹Bq%¼—„Àʱ`ýÿo8Z.^ìépñ§ºçþœ²¾]B¼~%Üðãç-þÇÿüyÊQŸþy}ü,ÛÀ«w¸TÎÚÊ]e¸' Iè/§`xôvÁ HÖK#)-Y”bâ0' +uJC45ðQDXŸÉ_™?LŽŽt @W®B ~¦¤,.÷üJx¿$ýVîÐ«ÞØW.ŒéÔʲ¸ÓÂ`Ù žÈä°úCȽ’“Åç1rSËÄЄŒ£¸V­v¾ÎW­Ý¼ySí†>à£x‡ôžöÇñ†‡'ª)•yE ÿe•ï 91<Ð÷ºþ`¯_,Kj¼{SÑôsmTˆ^–¢2ª|ÀOð@¿¿ê×QäfãfhXíRú.–ù?Ð2qm¢ú—|‘oˆÏF!’q¾;èÂCºbRS^R¤Ö¸©+/£kÕ¡wõòÓ¡ÞPܘ‰agÖë(¾CHºšøKæS|)¯’? +þÞ}—µQÜÍš¢âb&¤&INø ÂõfZ[»t9Æðhø©DŽõà+LA?H]Ñ‘^%Ç| gÀýS=é©í•ö³ÏÂàQŠú¨€TU²……O ÷½c?”à΄ç—¡+LÚXªÅ`@Iâü}öõÙZ@¿@g€¿2ÀüØúøû8¬¥ô;LXR¸{, êé€g»¶Þ Xé b{´aò#Øá„ÁEí¢ÉÜ‘s§Òêw•É Ë€3D…²¡'ˆ9ЀúJ7Bêo(ØSQ­ò·˜êº.%à¤+7oèNu@YÎd•tuŒýQÏŽ “ ‰T€6¸Ç*£REÊt‡c@ôÀO˜ü‡Ö••»÷pt¯ÈÈö;@·RyNpÜ<wå*|¸tóéé¿D/û¨ýC†`ís<z,’àˇŸó/,[ÿ•ž|²þS$ÓÞöŽÀ1§ÿm=àÁ]@¬ÞX¸Ë ÍýU¾wt÷î}wê“Õƒa„ÉvS×+ÝUä2S/“Tv Ç‹RHÍîSû?kð•„üjyrðjÄt…Q"A¸êa^ý#R7Ò®ÿ´aå^.Ù0¶¤[ þO^e€b?‘á8Œÿ¯À‹eïwÇ.í¢½¹Ñ˜hÅy±_y{óñ¾¿c#Yo?ûæ›vQ¬?jï5'm>Ás›znÙ„–U«_Æ=]põZ Û¿–5÷ +™õ•þ3ýo׳V‘¯7óõø ØÉ›ëû*cË¥çù~ûñæþÆüG¹K.Šfu<Ìó<«TêïÍ´é5€¬ï}óÍ7LáÓ*ŠúÅÊÊÛïxŽÀ·0½þm¥z«˜–±Î7÷¾ © 1ƒA¯‘z¥Š7"»ÍÇŠT4ß>Üi¬ͬØo±—© o?~´ŸñQ¾÷ûÍöív^Uœö2ÿõ“veæ½ýýý‚^Rdx}oS·ë:ËÌ@MÞäëŠÒD¹·ü5T&9_/öÖÝÔ YçHnV9Iô4ÜÑ[ÀÞ~#õº ¥ð BÓOé@€_4¿¾ÿùÚÃ5÷P¡d;ÆÀcÉüÜôXûõÃÏÊ«ËcƒŠþ#*aeQ + +êÿS×pÏØD¤…K(•$s`y€{Çë´ì‡÷£ïR™úÁÚÃÏ +øÃ ø/ñ_ï‹Î«ãX@Ný ¤\zµv†‚N¥3v±ÇîC¾Álý Š© U…¶d*ul&y r ¿>å(L9‘×€p˜²$`1ž²Ñé@Z…ÊQTjçŠ{€kdŠ"8ƒv +‡Àï_ 3AdôK3¾Ç}¡(å¥ À§¤h¤£#…uÌÇ@¹§ºÅ1 + Û þ§¬?Ÿ¿¯©ÿ$áªB>ÀîW¼£%BÉ®Oª·c“Wõu©ËùlðžCPÙYø'\Y‚ ¯®})^¼<Æ·lï­})šük€Odr—- ¢ÑÕ0(„L ÞÒÿ6XYšTØWEÝæįEÝ»»vWúß…8Ü%›ý÷ï./PøØä¯VÅ”éÀT@KÉ€Ú‹ ôoU½' jàc\,ÇÿÅÖÄÐÓ¢øÉ²ò7Þ3À;Êb& žýº;­ºò;ô‹¼¾.69Ú—ž[?`Ç @ûL¬¯À‹„>FèýöuÑx$H¢WÔ$tˆ›™™ñ·q$óL]7‘åþÎ.O+.ï)¾÷[/Gè㸯ç_0>ý÷èsz…V„›!ù¸Û+MѹófÙT6Ûj=n4Z==ÿ@å†â¤‘ÇÔK :Ö?ª\¨óÑŸRÎù€ú#Jù¬Yˆ†…·/èÜOËÉw)¸–>jH#DH‘·>rO}:7´ZÅ~æáSªz–Î{à6ņ4mÑ^c\1*š·W•iø.‚G @Žšùí,ÿ úEºd>™À·••­è ²²ü©àsõÞÚ•èhéÇR‚àˆ àuý.;,J6ÆÓ¼¸²\bfGîÿúóe€…Þò=–¼1èå´&ðà€àÀ}ÞsôX°­ßõÄ4€æÌ˜Ä—‘ÂIË 3+|2<Ü¢>×=[Æ­ÝþKôJüíokø÷(€ÿÁüØúøû8¬§‰°=,~~Fý€NÀÅŽÀЖ€< €KldÀ–Ét9b#IópXþ"à€.„Ti,FW¢ÅGÎe4í!1 +uûXEÉ©h®w ˆþ·Ö”ÆIÅ êu®–f"m +€ÿ¨åQA[¤žY…RDÉ„\5Ž"(ÙI}âbHEDÜz­ðýú”ø~¯ èpUO–6,ü›Ã$2?ÿmSŸ´wo½z¥ëÐÿ™€–ý¯'ÓÿéúG¤½`L Ï7²ðŒ.¬|Ît™æ°þwvêY¤[½ä*= !xâð5¥Ûò¢ u¨»_ªÖu‡L»º.<‰¬ÝÅ '‚>#tÐ]}p÷ÀÎ<̳Àñ0(ž²x²Øñ/Mó¥±lÁoë%ð+{¸1‡e0yÈÂé ¨pºÕq·cåM³46¢[2âŽO\òä`š =ª]€¿¤ ä^ÉÉ8tTòÖÇ›YcL¢ üì<0(¸-èïQq°ùüñ8h'˜Ór½37oˆ@OÛ¬:äæñzCÌ@6Æ¿í?söì[tÒGòüÚíÔ/¾á¶ð[ùlÑΧø¡{Û¤jë2ÖÁÿë×ßxë­Êõl¾hÍ[/zñeõwÞy»rýõúÀ[|õŸ åM¿ƒ/ˆúæ7¯åÓ2¼ýy`Ó”Ô &4Êòæ°¸.H¶—ó¬ØÌ§D0Œÿ³bEUªqVQó¢BÊ5/Àh‚Ùá$Š/²ñ¦;ÿKa¿¿\ ÝèaÉ«y6m†Dl"ÁˆÄj<7Б_´á¯®Ý[c@êðýfèžæÉZžü¥Çô hȯïþùgÑ+ŒJ9‰ +Ð;‰·ˆ+I€Ïþæ7~ÏéA–b³€þp¿g“(;´´Ñ]⿲õRëDDBÑ4 ÛûŒJÐ{b‰&×ßþvlÌ}üÂ8ø+·ìÄ¥èãå  Beå(€® VÂ?D8@1 lUcg””ƒ+}hà¤wJgº@2"m’—‹yD*ÇÙb +vPHO‡ŠW]¢ªp2ã¦åe‰DÂùC}â”7Au¬-¥“UÉáQœ4%p qMhAÐÜ#òP„)Eð<‘Ò…Ž¿£»}.à  àå<?¶…O#’ˆða¼Å;¦ÿ]þ!—ïðQKÙžöL®0­pÆ@(]—ÜÀ×/xPõïdXdô[Ëô\<øòËx0–0bO—€˜¹ripdrõAü;{ŠnkÊ×{\‘×âvsݦ ×q—K¹ww•/JfÞ\Ö“¡³ +¶]àâäè¥óç!' ÊJ?¸Š©J˜s±`ytôH>p…‹óuN^ÔŠFìb" B¼™¯ºˆ…ðLÒ=€Æ‹±ä(Óÿ™*¼ëx5À‹Å sT„9³E³†@øcÓ_1ó­à‚ßj_sÏþ:#ìuU¾êÎo‚ü©úF½š×D8Äè?{æÌ›•©@ý|}8}'S¸ÎúU¸gãUMxf³¢VãƒÃ8ÞyëÍ·Þ©K!I£óoTÞ:×ÿfåõë~éÖõë¿Ðÿf|*˜þAîpØh´kÃÂÝ[½/”Lï)ªs ¸øá,Bj1ŽVá1 Õí)ªMf32Ð !À·%Ò¢€RÙDá)€ ?²“$Uãÿ´ytc§ZuJˆ5ê·7AÒ¤ åÈ/ãQÐéG7@F 0žKÉq€SgÀŠð\@`¨$Úéþ÷kð?úmI•è5â†M½¤Ц3 +àáoî»W^‰‰Üq·ÀdÑ‹ø"’•…J¼ú$€:­2âøÐi„CÙXÒFï·À€Ëz {ïÞKìâ}ÂþEb,ÑÆÛrÑñú—£Nð ¶nkú÷êbc×|fPèî÷ˆÒN À)¡Äô/»Á?·UÑ  +,5Ê¢%ð{úp¼§’h%@îÚ¸çˆQ.’:•H¿r'«lRZšáЂ–ÊyUé{=ƒP/:e@AíâNû»à¹þ‹/ãàOæÿ°—™Û‹‹ LeýÉ‚ðËS<2ª‡faò*¸ùŸWOÓ˜­y +Ðâž…É;«¾d¾ûèßR`UCÊÂbøÃ['<d +±‘Ë—.èüKôìuð_?ðÛ¬yo–îÞ[½GR{Äèp—©t&GG™¡ÿîg÷)'Q+±¼¸ˆ`dð7ÎŽqî1ì³rÕð4×6µð5`U tG<Œ¸*^âîþÚà +¼­°1ÝÉKWDMˆáâK@ù¸v=Æà_¿W€K ÖQÜ}•W ²ÐGoG8V¿ñ¿˜·ñ­Ãýj!ìç}ïÛÔ}_O¶ €Á÷²ÆƒBLô{«â¡ôùíÛíkô…™ôíGyþˆvÜý˜Ù¬WTÁ¿Lý·*×QL–FÙìÔõ·ûÏë8ô#iª`ÛùgΞ9ÛoÅêõ¼q-CþB§ÊV€©ô¡£æðŒÌEð…Ÿ¶ìùÍyéŽü¾Šc³ ïgfã“Âdž}¤€ÙѬȃ«ýëïó’#ÂÐç“ðœ[Ec¢Íìňô™9qúñMÄ™üö‘ßm øO t­~é™~°Õ|H““¿œ\YìEP›Ÿ?øü3ð¨ä”ü¨&%_ÑkJ¡k 8½!ù:€x;¹Ñàiî¸{uxà]Àré„2`ûAtç­ÊyŒ$÷®cÿ¯­Þ_»¯÷ìCÝÿÇ.˰åEÁ0Ÿ‚åDkD¦3§I/ò—áÿÿõzôHàŠƒe + +… ·~GF”}çANVCC€]íôà­”ÃQ™LŽ<Ú BÔÞ9,Á×§Ì@ŠÎ(FÕ\VÝÀÉ(çψ“*8ö’C£<ÀÑQ/ðÈüÿéÀK€eƒ´ÌÍ¥…E?dbËËBÉI:Ð\¼"¡ÑL3 =ü— +yPÀ*-hcƒ˜ý"¤+²`õ\Œx,a1sý#ƒÖÂñð¹‹7\W^¾ÿ`íþÝ;ÆePyÆR‰7Qä•ç^€“+2Õðެ,/º¯A)Æpã¿vé %•ˆt¸@€麼z¯ +)aMìX^T­çÿªÅt8A𘭠wx-à\yÙ€€#„î(_ª÷¦Ì@_ +/%æ÷®ºnîä%Èž’±ðtb¡½ð``yÕðbÜ:" ÿgÛÓm™À… @ œ@SØÛÚ”uÀМšº^©\לé!eWoÜjÜÊ7 q"Ž“èô@ÿ¹3çJeí‰õhüž/æU È.•H ‚³³ÍVªŒúÛïTÞ»>E—;”˜ºþÎ;ïèg¼k Ÿ ‚:ÂËa€ï±J|“—p›ºÂ›Jó•Ál*Ï®ñé ‰gú™$EðLA… º­‰F!ÝìŸ@pýŒÂÙl«ÐñÇ?W†¼Ú05Q5*]Þå{p¾Ù˜Ø!EÇ€òF”BÓÈáŸðiÃ_@9 ^À1.=›é°w"‰-Ø=ÒñÜ/G'Ô£l+c#—Ç€]7<øüágôQx°º0¶ð©àzaá“䀄 I×°´•¥’Ê»àŸD¸¯óts²¤NÄ À”Z/Yi£ëëâÿ¥Ë—õª1´ë¥Q¢|èìX{7]‰D±$@@1ÅûRà8€ŽMÀpÍhb% ¢†:'ŒPµú现€œQ]ÄGÀµ ûnÒ*æ9¤DTK_Ç¡(9…×”ï4 +¹ðãFü-Þ 4Àu3ŽB ¾¢¸/¨¤¼(iY¨B¤;8 + fü~£ÂüÿéË·tLm:Þ°±ó'GG—èˆÀtû fxÃùÆL2Uöäè‹ [Áµú/Å‹í ˆP[Óˆñÿ<` ƒwÌ3áè) *çRâ%’EFĆ]:XýI»>‡ïߥß `ayõÁÚÝÀÚÿã-@?@÷pµ˜ã×@i]¥·lì»(ý€nE|öïŒ\êzb€€ÿª¿pUû«Ú3ðòàºl£õ‚ˆ«@W÷z2ÅL’üèx±€¤Ç˜×Ê&¾ l¦“º°9ŸÚµ6ÿ¾õ¨õñüŒ"ŠÖì“jSàü^å½÷Ý÷¿[„w ¡¡Ú&13úH„½| àMÑ—Ü,&ÜöMùÔÉX:÷þÃÙíê3yµB?!ýÀõz`¯Òþ|¦‚ëÿÍþ·Þz[çê}z_¼c«ÞòS=ó!ô8sîÌ™ŸåÑÒ€o¼ÍŒÀÆjI–O0HQ€[ØP@`"­ùyU÷sZýEÜ °^ŸáŽX¸[:ùs¥Aá,«æþR0ÜÂ>ݘøŸå7'¾@ºn´?VÀE^)ŸâYLôìåç9¾€Õ÷ˆª™\¹+®¬’ô®0òSØ"%áxCZêÁ9Q( -„"VS{~¥[ÃÁùC'Óÿéþ]õÈ?8€c$WÃ?«´ —Mqùá Ñ.èGx^5¼„€_LjLÙÙÖtu?·0Íhl³[Æÿ榀zS˜æ€êºû”Ît¦×«Õ~NŠT§êi€ÏâÈ·€OAÖ'’á=øSC82ígf…«MÍVÆsÕñ¶ÌüëSì¡ú¹þ·úßÀöﯗ.A¯ª©ˆïGw€þ×<=ð{÷ýå`F#¼ý&-×LK²b_»eGîç—AIˆQÅ=úþKòhðŸýy«õ 7´ÏOe7f?Êãm·MÐ'²^¹î®Ð!eÒ}P`:¯Vo»ÿ?ÓŠ02pÆ–>Ÿ8F0ÞY…w<PÙ éu@k=¯ôäÍáoCôü›¨Œ€X÷¢7À’DÃp H‹bp&(×ò؈X¹³ãøüs‘ˆE{h„øå²ð^¯Ãðä'@lJü_þÄð÷‚¿Á]¿H`ŽP&‰Dž(R1ð÷€Kc#8/ ð~oèW‚½ƒ}H'pœ”6B¡t ›ãFZ x%À DÄm ª ÞŠ‰”ƒ+N£'½R#Òɦ±ü-èÜ-ÇÙ±§AggÔ=~@oŸ< +ÀRöà¤Ï“ªcm)ÌœFÁ@_»8+Z4M"»•uUìC£ðT¸Ûé[ç^Ð Ìþõ_fY2>vÅ¥}Ê&èNC{ð‹ gõܸ%üŠ[þï +|mÁN +}BùÇTBàÿÕÑAa Ìáÿ¥ó?>š!Ž?ÒuÆ“ á!™û úÿz þ þ½_»»"|GÜpŸËK.R›ÅE)y9<'Kùõë#Ìùà( Ò~e–½¯€î–ûþ+³·:<þ=ŠàHéÐü‡ôH¹Wr²èŽ +pW@°‚ñp+êç³óÂEПqÂ¥¿cÒ_ÙÍõë•÷dKÇ@ð®Ä±ø<^cÈÓÞÔùfïõª¬ô7é™@òafçɲ®HÇÏ?þX, ›¯P‡Œö·*ð;å[³7Þ>w欞þ7ôï\¯^"Uh¸^ù©<+Û›t<3P +ˆÎÒ €–Ùþ‹ Ki1‹ç˜ÍâOdµ«Ý$ ±&°$>—H1­ÆDÛ—­[a_ˆ¨QTZJc½1QÚûæÜÎ(õ€£ #øÓú© /šºOÄIôT¤ K! ,c¼¨zAVðÿ›û>úÿÚƒ…ÂØOY’à ÔNÏ%€%™å«¥ FŒ­¬•€{«Ÿ®D@‚|{ä¨Ãôþ’D%I™õ’@, Ž{Ää%qð,õv¼–r£_÷ðTÑ¿ ïðÒ è| àÔQ@&Žq¢À;mÜ:ãCá¡ÓðÃýQÚ)Gà}$4@‚”þ±øÓÀ¹ã‡G8©ÑU¢ZtÚ¼ § {F8‰Sqd¶B²ãF¤oPuyRp/Þ"¥¥À¯%¢HI\©Sw=CmÔ‹ (C$v61 + ÷€¿xÀêï¬üuôw!ôö²@å%÷¶× fz«%ÂiŒ]BiB@1€ t ”í ƒ‚ñ+££ÎKçÅä:ét!F~ ½ +½vE¥*ýUºÓýŠ¢:µÀ>Qø ðªÍݵèH]&Z]a à¯úÑ–è©îˆ¨ûüÇâ +¸)qo¢%°¼,¾s¬`r:T^üäßÀ—DÒÂÕ_Ñ«å ü³Šð'E'@®1<=)¸ÿÊðC$Ðí¨àŠFuv&püÏç?–½‹…Nœ0Ä*&öÔ+Uƒi°€F‚wwu«)D¤–šðù-Áq·Àü0ÞoX€ýL- ,¬OeSuaëßóAÀ©DÞã#Býo¾ÃZæ¥F}àÜÙso¾%ü—å_0Àòÿ={xÿØ'ðóœ;Óÿöð°jÂs¼©|t\àC†Ò¦F™,/>F‘y>HHÌÔ^Ñù|~"+tõ°Ý‘ÙÙff?þù|>˰_¢¶·«ª…{à{ÁÐEƒ¼(C ó#t³ª ãpל}ĆŽå¢;èYX^»·ê^€/;À˜,rúÑöö ÖÏÿÁ­=øõ¯>üÍÃß„`E0êHÒž§R‰W&GÜ à-=´vêA]{øåg+ #¿\° 0âŸÐ Ô§pÆýËçñßžŒU»ºiœ®“R¯7ú#>”yÓ%—„ÿö˜t= í{7¬iÓ+œ-—3 硃!½°@7šÿG% ScwÌ(€ïñ--æeR09òhƒ +Q{ç0tŠðÁyHá™Uæ¸;8 +¤p‡Êy:Ò@u\FYÎ +(KŒpä)£P(NªŒØKU‰;Þ@Àñ€²õŸƒá@² 5°`Õ+Bê\\ÿ8€½ Éu†Œˆ(‚`KF·ý<¡e½[jý ÿJ$»"`¼ôÆyô!ØÛØI ܇×Ið>P¿ç·v7ÀU{î®Ò™^Bzera{8è‘tCBB뎸=É`5KÀý“ZCt;Ý%P‰ãc€Á›û‘K‘ßkx˜èòè¢BÑp°@à€~¯${%'Ë/ŽãüfV•­/>€­˜´‚µól¢>#+÷=ÙÜýëbü€ 0ƒÐÀCýˆoõÌ0SL0ïǪa^&wÎô>Q‡H‹eW†gTÝúß¡#bžÿ¼õqköÆ;ožë øO–üð…Jý½zå}ÕPeDBGht8×?0<„ç}ZÀ 8ÛÿÖÛ: m™ú»õ¬ =ÐÅâ Ìé§z| õº¨Éß[—¢Ê´ÂºlÑ"øÁ m G€$ôÞ¬ŠHL¹gÁõ÷êzUþ-P/a²@²vub/†þÝò©|†ÛœÍ¸µå¨èA-±;†¸à%žvâü”"<Ñ¥ ÖÕ•‘Ñ?æã.’Kt@þ1anÄbIÿÆ èmT34Ïùzòê¡LN†€ÇÝ?|ø™gd*ŽEÛ'—ï)ßîùy*`ÇtKH'eHDÆ4€ÞDÑ|A ?O¸¸œ< >cd¤X¾kW®àË{Ú_zC>ê~ à¥FpÎikHÎé0L~D(˜ÀÒɘ ¡)épBÏ%H–ê¦ áw” •8AÌ>¤(Ý6¾-+c9€#ÐÈ•ÃTˆ¢ˆÖ&Ô‹,`¿9k“z0Ÿ×!“=I¤7$J"V­>?î°=Qý'Íà¿„Ao Ú_Fìi/­~ú§á£ýþ÷ +€Ö0€ð v؈‡Ýo··ýK]fàR#¹‘¹„C¾lç©åÒù7.9­ ògà/AßÝñ«^€~¬ŸD¨<‚`ù.ω§ÓQ†øŠ_lÙÐhÌ? VüDñe+Ý#ÊkëèÜñ¤>ìÄ›ÒÕëò/]¹¢ÀAø÷«§ãXâ{HHôèŠÁß ƒcM ÷JNšô‘ «>µ˜¥Vö0(ñx@AŸÏ)'„ð‚a® ´R¯1¯.SøâÙž‰^€C_=ºÆ ™úÏœx°›à7oç3EkSº<—îô¸!$²¯Ç+™püš¦ÜëŽy€¦®¿ƒ/¿~½~ýFå‚‹§ L¯¼—Ã6˜=¯=+wT°dÚ€~s@Ý-€G9þµ„"Sh @ e¢ð”½R‘ž"'v0žEnÃ|µ8<Þ ØgÞb Áv­s%?·Ò4ËDàˆÜáË¡å0€•ô9€Sf€¤F±çQ·Éû˜“JÀ!¸ý5 è¬Ýç“%b3! +$;=<(´öPf7ëÚòØùK# «ŸùùÊÂèS“ZÂúù€y€Bî­°X¬½gPII2í;BæåaýŸ¶’xèVÿ“àòèHà¸xe^€¹?^çøÀüÞ#­/÷-ƒv ªB8ýFí-ÿìo¨’¬[\…¢QÇUtúV¡0ÏݪTgpÚ«Ø4 ¬&•Cí>n€•Eƒè< 3\»kðÅ}¡(å¥ @I]lJºC£˜ 0ú¼h@Çü·`xÀÿh/! yï‚t¯\I`/¼rΟïrIɃ&€l3y“þÊ_©¤«WÎÿèü•«1$|O%9 s{_RJðýøÒ_)ŸùCg0È©b‡í¡8²-» ˜ti@ò€W`°Ìó/qÖ…N€„×QŒd²g¡þ“¤ôîòàƒˆ³¹ÏîÄ^â>Wù¦‚oàÏþ0þ»¿1€?`…FöðëÆÁÌ:’@,óÇŠ›ú‹Œ>t‰Ÿ&EÆ^í=w¯ñ*oNäù}À;‹° 8œ‘E+¸h'Ü•“ßy»ÿì™·*™áu&ÿ¦šg¹llÁ=“éS[€½Y%QÕ²+•Œ!ï T<À‘Âÿ·dÿâBü¼r!›IÀ:$³Þ^G9™d"ÃD +’|TàmæHMSö¨zé¡ËšE#}Vß$bUÙŸh~SLÒÛj}4õw7ȼo‹ Pµõ¨¼Ÿå40Å„^y£ÑŽÄ!Q$¿,ûè#•y@ô¨Þ‘e¼_·ÌV³Ùs-@‰àE3ϽÌöŒtªúÇDp3 œô,8ÚøÉ¹}$·³Ïfö +^ÃL´ ̃ÖFWg‚t¯…a7œe45”:¸ˆÏÒWkù~t"Y²PÚÍðüâ±È5;GéuIßY¿±ØÁš/°à“´ðoŸ”…S1é ‹hñˆ cô ô›1Ì,÷˜úÚàY¢Óã\äÌu ö…ûrsÏœ† ÿÍÛ:ê䘠OÐNµÿB0ý{½znxxPT@é¯^9§Ó•ÁUÍÿ ÙòŸ¬åXÄ£FWüôÆo3öCB ÀpÁUÙÒ¯m2ôhÀ†ø1£Ãéõsæ«k >}þ¶ @0 1n/Юàýƒýý5 ðåæt“^^â&(òV‚ß2>|®G àH-@¹íx CѱæÓæAëQýOÍôÉA³Ñ@4šÍfÒ|Ö:<øæðYK™>«L”0!^C_-’´™Ö~Qm¶¨Ñ׎¤5’~kÜLZô’W¼té/Î߬"+´­Ã‰g©àµÕzrØh¤új®C­…Eœæ4Ñž¤\MäÈWË3ÂÃÆáÁÁ“fmö¯n–å¾—®š×’JU'ªVS±Ž¤:_ýp±Q›ÕqˆÝ/ýeUY§¿KŸQ +Š:¬u 9ýzBEú0e”¿FãÉíÓń¨8‹­æ³f«9}ø'•O鞈´šz2:^KuizøMZ«&ÍäÆH9i¥ü¿Z®PöV³Eª¦îs‘ìZ*Ïþë“$}”¦u¥MZºÿÃC]/ ˜7áä{ë¡!€f›{{Ÿ1 `ßžD g +Àº 3P€Àøè—´,G¹ƒ¶Ï÷ö¿ØÛ§1@Pì•çì®ÏÕW€Œ0ºnlŽ1··Æ_¥ÏÓ‡_Š„Á;T®÷únßû,tdN@.dJ7@º¯*kJ“yö™ik›´Ÿ~ÖÛ ÝÓÆçÔd +˜ï6Fáÿúº_é»>Ì:kÏ3ƒ½Ñ>›:{˜h,ý Ž-Û(iTÎÑfp}‰±ŒÎnáÓ¹ûPTiBþY‘0­äc\0we.ÊG;ue_NëíV2Ï8ª£¸x¡VÜ +ÀÆŠ„³l\FásØ«ŒuY²T¦¬ú ™†žyæÏ ïþ£\|ü—ÿ`é +>¾‘Š¥"XY®—:æÁ˜aBïã¬ÕÿÖÙ+oÀ +”)ÙD—?3+ØáߎSN+!Ô‚“ÞxC§Éa ëy ü™E@ˆ(€ËÛÛtFH€  €­GÀãÿ»??Æ(˜s"n16•–íG+AÕþgOËOãÕÒƒÿz™Ñ܈VZå57¹>~U´cà¿?*/oÓýM°UÅ».j¥B+þJ™¨5šú“¢B¨ÿ|½~­R.‰Ÿèg9¢÷„¨=mhRO77¼§*×’J©\™éŸ. \8G?%rR6ɵ¯“z]yÏëÎÒ>z`¼}Þ5ïTËÕ7èæ·X,ëÒ岎#áŸâG¯_ý¯¡r¥ô¯u-l¹R9Ú–KÂs§Î_)M—çæ(µçñÍlÊáZZ¡Ù‚üvÝܼNW)æu˺&w!ïý÷oÑk!M÷)î Åñé¬Ïë±UꥑirW9&üº**Ÿ´ÕbÈC‚þ¦ç*õwß­» =ÕªërÕº(†›Ï[yK~½ð?Cmáš!¿]€˜Ÿ„íL@Oï~@©NØÞÚö¹ +@?%çÁ)ñ4”?ý¦›ùÞ€Üßw§{!Y–žoXèEÀš€¡Ñ;ÂãÏîÑipVTáE¶»ñ?Äþ&>§û˜Òd  _ @ØÅAïõƒ8Õ¾Û¬wwÛÐüùx‘ÍžkFͺçÙÞ€½ pÓ³@ Ùa©Y”Æe€cBÿë.|™ þùÈÿüº×8Ñ»LWÑá ðwbHèV¤'?ÿ+Ç*+¸ê¡ + ¬úÀÏñرÈÂW!uGÈrà¨>*S  !1οuhpÌX!v¶?Fž“¡íÂÜÏ8é—µ#þ›t›ǟ#P‹#œ~U¸¯„îÂò7<*e'×¶Ù…ÍþñΞsæ:AûÏ _}ãªÎñ‰0€@ŽôãÌà_“9Àö'ˆà»ÎExð©iÜ~¥3 è`4´Ìá?«á«k?磧¦ÌˆXèjÜ~Ù¿ÒîŸA”zòêUƒ~û½¦7 0º>ŸÒ +ÁTvbÄZô§ÉÿHO¿zêUý€T^ÞJ}'ReìG²§ÃnçJo¾¸³11!‡çÚˆ¬8"ð­Tþ­ Îè¦û½0§Dz1”*×FþÕù¿Ô_ìüHI0;1!À›O꺖¦òœ\šÇÜý¦äucQU</P^Pø¿ð—ø]sùðÞðŠVK•’¸É<{´ ðuÅ&JÓõ‰wÅEDEx?èµ£™C=”ˆì¦'s*ˆ¶Ù\»ßÁ2iPLU@ݘ²(Mˆ€°GÏ€ç4A‰ä +jªNLTëuN©ÖE(Ä,”1w1Qš«¿YÑÓÑÓ†þT*<Ûn›=:,஀:= æE3þkiÿ_¶±Å½1 d€‡¿¤À®4 +ÀCÖI°¾Ë´G¿JpšÎé +8§ìmŸ*ŒoÝÿ»}¥ë®œ °ýïc+€ÏÌ(…_¿ãûÓ7âyÇ"¸û¶"Wɼ¶: +@ Ó à Óü_Ÿãû|ü–[ícK÷º„½ú¼( ‚²¸WôÏ +F²ƒoŸVaÓs +ÿ`h0`W AjÀVèórR09œ£EWoo†2…õ\ ,Z+ +œ«7ƒé”²Là k4Õa§¾ÞAY)“~Ù¨x.¼&hº,dCçBÂAå–²>­Âh€ÇÐãþRxžÔ¬ÔGGýÜ`{B`—õz6¨Cs€`範úÌQ€³Â'˜äìÕ³§•Y‡œ~Õ'ŠˆˆO¼áªò@B3dô>–CÿŒ +P)ò¢Ýp’†µÚ1:|Ú +€%i µðíÂûøñ´$À¼2šŽ¡ ^àͲ—ümúÊÀŸe`¸8yð÷›†zL +6®á]7)BW¨þðßÃ"ÈýhÇÛAk¥Vëàéa«ùìÛÃCî$iýÞÕÕÈÔÕ‰‘4Áϧ»Z-Ï”ß+k%©.|=£Z©êXRm==h$i­¦si;÷^’V+?¯–/¾~þõb5ù}«ž´É5N’ô@9%iSgµZÍfë0©k3i(—¤Vý0i”§.•¦Ê•¶ÐÙKE2)Þ,œ»@½>î~5ù ù€Áô\$-Mx'ƒ 'T/\,–« u9äóõ´•”/]š*ÏT«©ÊëëÞTÎD‡ÒT—j¶þë|ú¬¥¢¤­Ã4}òá³§ÏšióéSŠ‘¤¨ûº˜ACW,N”ªÕGne˜4ÈŠGã.޾âè~Ÿ¶ž<ÑÉÏþ>ù]ROêéÿYª·ôtõ¬›\E©zŒ1H]µ¯Ÿ¿¡Aü¼T³¡ÐôaJ»µ5NÿòæåJ›}:1î¨Kø"*Ôß;¤°ÇsWèÔ­=+2‘‚!€½Ž°ÕV@~2h+Y;À;w]ü;±p.F®DÑ|SŽè:²=*ûÃ}bšMý|.ƒÀ›¶ß'¼‚ù>Ï 0Fûl÷xM¼Ïò +€q-[Ï@Ðé¿:Ú +ÀH †}ZùXœÏXvÊÌ ©Z÷Ö @›†eèÌ'5b@¸ 9„¤:’ E»@®4Èk*un,úâðÝ)óyñ~á&dZ8+ЧX|JÁjT¢©<<'ñ^¨T¤ ­ô͵è À üçðg ì{NfDê ‘À|P: ?K€ÁsY €þ[€#y°¼ ™hÍj¾a\'G^ŒÊaWö§”@ÿ©Ógt ŸÔ¦Ä +ÐÏ"ä·Ñ?L1@Óèæ–6>e £Ð!¡ÞŒÈbtø”¿ÂŒ8lU_?™^ D€"Mö?êcéÞvaýjÖÀÛÚƒÀMôÏÖ®Øåè©×O àŒÛ•Ž’®äcNÓ)@ ]µä~´ã D?Æè™/io&qó3B2BÝu°TªWÞ“3ŒK,píØìïFbˆ»ãéBD_u^r*ÍéÒ, ðäCg„–$ÄkQQ`“p;]ìƒJ«Fí›~—§Š¯_œšÕuHžEñ_,Þ,^л…šNŸœÏZO}Eµ$·[—-.Ð,ojê’8Ã%'KZsIZyÀ"Ê?WBBð8FÈžcöUúf¥¾X«…Šy"º#úrÁ¸ïâT©L •ky$6ƒÔݲï÷=ïX¨<‚ߨÜÄRx”á,‡$øš°…úûõúû¢ u=.Kî=…¡! +|ÜûlÏA§õƒ;=8”ˆ ø¯ÄÛ[w·9ÝË2ü¤[ÀÓÚVÜ 0œBâÌ´¾á_(…O{4@ч @Ƈ‡Æ·îï?ÜråC¯ðY>àž +JYy)ñ\.è9Û6#‰2ÿŸÍLÐzè(ë`O¸ßÕ@¡r7ý‘OX¾ØÀà‡y@™¸Çk/ìÀAÇ7ºmFÕ°Ð>0Òhçµ~,RzEæ‚1iÙ‰ ­ÖÜ@(©`Úût0ók½Ý +@ÆÕ´Þ·ê%8I+6”4dë‚’®§@QOúÆóÆèqÿµiV@uú‰,‹Ò?wå,`X€Vr +€ÿ4BšŽ ¤Îd9 ¬È {1m°£ +À9ÒŸ:õêÙ3§^E°jðÆâbcCî zózŠðß¶Oô«AЛ  o@n4t £0“×¾1Y@¶¯iƒïz{••£×‹ß«Í]€ ¯£à=Ùz®# †n;þ^²6è· Ÿh¡#²0Pa}s{kÄd|ø¬‰Ñxv²€—7‚îú™ ªP/n ¦f\K¾%é\))»M½¶fÃ8@ay¦’¼•„–ïð€_ÔfÝMÎ,‡g’é‘Áî+Œº +"Ø~AVÙ^]h—<­9_»fËø?ÿº©Q?OX?]Üœ¹0RÖûDWv†ëÊ(IR)j ƒþS SS¯¿®‚r<«?©–Οrw€”>ë·ìçª.HÒ*9z‘G@ÛÀ&—)PB•¢Xü+.ÅùUºýgÕ`V“¶Še`_5õÉÍ_2˜²6•Çb:QOûïW~á«s¹¼e +@»€‡08«Ÿ4š0hý¦œ_ûÕN¿·}Gàç*oÎÃBi…‡ìˆþ™Ñðs€v>Ê3*Û[¡@P +!àaPöÄOÚmý]­îm‰gà"÷”1¹«< W67Œëü ‹ãd¸ ×€‡´¼¾>¿÷Óõ}Žc"úô»¶^À d°Ï{<mÀ:›Ù7¬x 3^k[Yyóƒ %Ù¼öYFÓ°J*xë=ZË÷ dÎ’Câ¬°Ê 0ÎÀA › Ûc0 çÈŒÞ?d+?j>ÇŒŽj³ý û ž'3S¨ÐìœýØ€6º€9Fr›Rô*WÞ8{ÖU1 ˆ¶éìþ#ý4ˆàÀá¿XƒðŸÅ„1ਅ6fŸj¹pgAnáªÐý“O©p×›±€ߤ~ƒ£Ã*þ•Ñq½Qè^˜¹W:«\! ûã¯æVÀwbÄSŒùokíý½~Õ#‡nèü7*‘`ƒ¡+@ÍÚ“^ŸÞUɨÈóÐ"ø-(¹ß¨²ž&ÿÿGॠlëcŽà— ™“æ“”f€Æ§`‚æR©z±“ ÝåbãõQ+ã8Þà¿,4Îo”컿rþbQ‡YŒ^pÁ`UÀŸÔZårh6P»ûO›½óS5{â †U1÷äW¾0R2ýs-6Ø*åjRž€pLH=U~gꃠù'­éJš”/½v~àâ-uFÖŒÏð×LÎá'âÎèaldnNo¦›¦ä@œ2åpF!7®\.&Ó&µðL|º„2¢Þa¢î4Zl†Ù1ëçwp‘ïe€@s{kphðô`$ôZj»@.p{¯£ð[b!/˜ +€¥|A§Ô®ôûT`$fx®`>Ýg¢Ëɶ3€*‘À}ÀP¨8àÑÛ +À¿×c:·‡±ÊUÀÿ£@¯"r,@}pþ#ðw)ÂÆ6É€Þ6¼ŠF Æø#Ÿ0Å—J\ö38 Ö:{Bx:–o`hÀ¢ÉÚz¸± LÕ†Á[{BJ™ÁʽñÒÉãN'7š†‰|t ËǧãOk†áÆsÑPóî2yEÆJ.ÀÛÇŒ֩׈ Dì` ªÃ;'Ç2én§3.Š„³l\Qçrº ëK±ÀzZÐ@ˆ¸` {,€>µÿa5‚ç ,"’Ì +€qeNfëAÿ1Bš¶@²x¢¬­ +ßE²€s]Uý8c`¡÷@†ÛŸ€ý¦þ†Åö§Ÿ¸ + 0ã½òƒgg“Ù™bñ’V/˜‹¯¿þ:uñ„è‡:ò@ïÜs‘¤š4*ÓMJÒ%ðÍ"ƒú\¼9¥4¡*ºÀêìµ?€=üßÌÊ¿«ÜÐÜ^øÍ›ôä¦ÿz—(U:'w\®Œ‹b3.e<‘놎T’ð™þã )ò³ UgÈËéÒ@ñf­:A÷ƒ%3zB¬ÎÎ̈Šå…ÊÚ$ +¦‡YKÅw´*Ž1Q‚¬¡Í‘_)oøþQˆ#ˆê¶ÖÏN"¿aƒE€ß‰VwÆ €ðÖ2ü®þ³-Ž´ WÞ€žv€:ƈ¬ªQˆýäªb ÀvO€‘t).däÎúf£(ôÿ,@{·ùºq½c”•Ä|{j„ùù6£~JôŒ0ª×ÇÑ¿aö\ÓQ?®e“vœ¨€à,úìZaŒƒ”í}†O¯Ðf—:)à}Hh€)ýe>ÒœmT‰X÷']eºŠà ÄR )•ãÚ×9‘$ú°Â5p%{ÎXÎ#;H )*YŒT$,€L•¡¾Ü©Sw€°Ç×æÒºX  !ñðÜýˆ…ÿÝcð÷àpü¸ö_œ@«èËšPèGS—ê5Fò`„§„€ŒTd»â¿^. S€~³×K° ÐûôÛí×Ü«^ñ·„¼¹éã›V6„þ!TÅLôkaAOQø p˜ [Ð×7|²µ«ÍAw€·³f€ÿ­ü,Äx›1€”H7‚å€ðrêftH7á=¦°cü¨‚µ-~T^Î"Ð5A­Åpc², _Ê’éñìÖÀyQ¡Þ;³øþo5ÊÔÅk¯¾ï,医!þ¥Ù ¯ 4oÊoúA-@Új=y§ØÛétåP(¬kÍÎÎVÓ¸Ú¡ Œä#S> ïìOJU½8ØÿÂï’®«2(}Ò`@ ®? TBy!`è${Œ.ù…ÏuÏKu÷Í£ªMQ¡r0…¸T®L(³ÝÞQáL•Óò#‚Uðwf•AÐôe_k‚NBî ­Dzð¹éžœDˆ#·?Ûš<=¨_(ä<g¨•‘€ö³Þ6ºòëb%(Þqâ3Ûßw ƒ‘¾²¢bí.´¡ŒoÝVAÉuI¥_VšU—zi…óuÖuNU©¸­BA¯÷¡3*«ðçòàeßÊé3~¡ssƒCccƒc««”ÓEÕ¬hë–žÅʪ²^Õ\³ ô«ýg‚Dœ9™µk§å¯ƒøm­tÅð¯"¤i+¡ + ³®€ @,ˆ©1ÎVÆ/ßð‘ÄrÿsÅ„ÿŽ|¢óO˜?ka¢7À¨ŒSÃFk:ð9À? +ùaLŽ«`WF'‰üï2AXÑ|™Î³µ¶€Ð „ÄÝ“£WÜ/²O€´€¶pe—  czÏ8pÈc…*€@¨ #´r?Úñ°çˆEŒ’‘ÅÂhu 0­´*¥Tð6Ï~@Žj€j™ ·juÄ +|°w„«µFKÎ2½|áüÀùó§t`¶Ê˜‚‹‹@ª®A?ø±+|]+­TZšr؇¾D‡}"¥pôâù¿8ÿÚë¡ö¾FìÝô´3£ ¯VÞgÌ=J…O^žºé^UŠ×ŠÕtŽàCÈÄÍKS°% Q ™Q¤"¡úSõTüôX­ND¨‚0(/”ê¸<*(—tÿDU³—bêö”*y’s£Ñ$>BëI«ô¨Éc û4eŒ£úk’ï/SÂˆŽ¾“ïÍðb|s +@¬ 0>{voûÞxax}ÓÐ) Úý&}ù…¤N¶ÙÕùÞÇ›Ì Ò±* €?ûЯRlàÁýûQØT.*#U›¢%îåÙ»÷ßÎh€(1wÖ©mPî(dyÔ|¸/7ÈÌ5ˆ ð?߀¾ +££÷¿ð«»çãï ,À¼øÏ¯…e;Fý¹­ìÛ™gÍsû¸ cÎVÖ„žB=£­ H ˆ^oÞ{FÍËOhŽ  +×5 f‡ú‚ßHœ·‘°Uu(ÀàК€XÆŠ €®³l¶ ô^) ^W :º;‹•ÛZg×`aG—ÐqÒ.­|d¬&…6]j W[2€‡ˆ!@††\êÁ˺±ÃüsˆÒ@D!|.™’ŸJ²¼ô‘VÄ<ÇVßC…Îê"xžÌÎ æ5ÙëJ{ lköÜ€c€¸"×'¦ÌÌuÎÅÄVFÿ0ËL€Û×¶>Ùb0yýÂýlú„@Á2^ú&ݲiü [Gû(ØØt3À  [øAŸöŽa­9“O€ú¨¼-W_Ç`\ðŠÒЭ!”€Ñ”lP€`Â;(úw&ýêÇ¡ˆ…Q÷h©J¾+àþÌâŸ#Z¹íx3²õ3`ÄÁ üÊ ÖjíP®¾`Î=ÛjE€h ­ùæGæ Ÿø½ð.Y,…¼.Ï¿&Œ4—¨jO]¸ÌÎ5è(‚!W¸Z9 ЀKv¹!:µHðÑ{„$×ÊòŸd‘LÆW‘æ«€÷èé_§)pJ>û©WŠ3‡Ó .&3¨ 7§tL¥×Ù9Àͦ¥÷[*~d7€Qž*1*Çëç_£uAZJŠ*SuÆø›0+*§0QFÓÀ†N¯%ŒµÐГù@Ov"t.l Wÿ—QûŸÅÐJ.¢°}ïÓt%TÔOdÓ× +R…ÔŒÎç-~M‘T³¼Îùø  ‹ðpï7¢BçÍM]5Ð÷Fû7©½”b¨p§­|±·Ÿ€³Ô ì?Ì$‰€öA1ÄqA?ê)ôÙ&sÝ•Šr”˜-ÄÝ™Ð`=ްù±€Ø @W½=õ‹¾  ½úLÌô®gú*Gª´­ýQ0*v›Ñí£¥[€v!€B ÂÌX@FP†º@TÀÞ!Ø |ƒårÙnçmpÝþ¿]8*:Š @P&v—¢°šW‚ŒŒü‚f&ƒgTj9—}+y Æ RûYpñ.[•åÝ}ô Õ/U€ço— ££`Љÿ5BšŽÀñ¶å%ëÄt3€~ +€N ýÀ¼A3*,¸ Ÿm~ê°¿0‹þÿ¦{-\-0$ñö¶: ˜MÔœíŒtÄBKB:"‹0^¾ZÐuróg@}Öç_?Îð¶Pá€év²µ¶ûß® `}ÜÃ*:¢ÈUë£WyRшÆàOÁüQx9‹@Ó׋‹&Õ_wQßki9V[”Òê¼€M{ºöäŒWË×ÊE~!ÿa~„š7Ë—ªGD¨Ë÷áÀ1ô%K¢à°:÷ý'•yzv À¥‹Sæ !_/q¢3‡#p9€!(É|¥œ”JÞ#êÎÎ.Ôfåï¿~~`êæ{Ïæêi{F }‰±² -,DD’t.=HS‚ÿ;¶P.^t…%+^ºT,^ºX,Ï~Sªÿ\n^ÌÈLD…ÿùÍbñënÀÝ6ˆlþ±I{À“ +@Òr;KÙ"±–™Ú-pïΦ܃zT Ú×l] +]¸þ ÙÏPn¨gfO;$eSÛC½Üð›ôdüï(™Q€pp?Ã4|øpÿ>þ÷ÖzAd}}û!ÍMîµcTØnÀÙÈøUß¡;rÖ)tüÛøŽùÂ}ˆA\>ãl®oXp @§ €#D +££ŸßðÛ»ëã/–-±óBx€¿{Å‹b‚ gïßοg áQ[Y¢?ò .èáK ¯ËSåáÅgÔ<ÓQLD†¯¯(Sj*³l+ˤ…È‚§ €S£äú6•À Ç¿­¬ä)õíHL4tR¬ðmAB@P. ü ÿáöÎ\v@GÐÝ ê]’ t5«üAâÀâ"ÀyR;KŸOÆÂÐ/àGxàZåÑ£  $'Ë +ÑŽèRòv,ÐOD? O4ûä“íÍO5gFÏ?B\!õøä'ÛŸêW"G¿Óª5ݳКÀÞÉ3*ˆ> ‚›´Kð?4 ^Wº2¨5˜€+ûÃnb®h-(~@ÿl-ú(qBôv #@ù1îWT…Í+<: ßk?*/gOú[«ÕüæàÛƒ4I~—¦OÜT]³º;ª9¨Ôu_ÉhŠ˜4‡[¨$¡4täãÛ­WÒoÓoté“VÚúæOO[:„¾€Ø‘$¥X3¡ÓÒ¤R†ÿ‰÷×.²LUb1‘ž¥õ÷-:¤ô²tpÐL›tÿÿ¨þî£Giú;ú:ÔU~À9ËÇÜ^êç €ø~ÙÝ1²,nO¿!уÑ!NŽÄÚ¿*W¦‘BÛù*ÇÜyI·¡«©ç“ôE d V)™#âà€=q´‰ÁÑÉ-ú,LÞáLâÚpŸ18€wÈ¢@ìBÈ;R‘^ó]D´þ`Y@À +€€#mÖ »ñ¾ /Ýì–/¶ˆú€¾×ò[lxU–o ¤÷ÌqDÔaZûÙÊš0í#Ag¥ í05ù€¨ü{àÿ¨€ªo Ž +€äŽ +€.ÒxzwbHÛQn¯,ÝêQºb,¬Œ…ˆÈ,Äàò (í¿Óus"”K'U2³)C ;銟hŽ£Nè‹uÐ_ó¶€¾BšŽ d'a9 ¬ ý1ƒhý« ]1Ý&û xÿŸ†+²Ø pšFþÛî8o€* í”ÆCà_ÏäYzÈGdWÉ€}‘@$2àmϽ-¸â18@¦èagFa»8€&bI€-‡+ŒwþOü¿â—€—37Òécîöwº411ñÖ[oi~C«Á86ñÖµxlbbdäÚÀȵŸ\»vMk×F&þõ[±Üt°«L¦Ý7‰k#¬(‡‰×Fè2wBsíˆ62òÖˆRMTÞz‹ôØO.Їï+ç”ï[oó5wê{îü¹ ×.hëß:™Nã{#vÁ«ýJzmâ­÷QLY¨˜Õûøü_ž¿p­Tz³47G¡F”—öü䂊¯´tkì¬t¦n­ô×oòü,2ÓM\øK][©TXåÌ 7Šoýë‘ .\û û¼Wù]ÓS¹paäÚ›:ë­n;ôô[Žy)·7õ|ØÏºgÝ&´å—Ö·í|[8­ŸÄ +À=a§4SÚ€:v4€ß’À_Ÿð»Ê +²J3ûÍo~ó0*Vò»÷1%q)ò +À}z|xÿ‹ým•lhx}koktx’°ÀaÀû=ÐßQ€A [Pè€ ÓñòÛ ++N¼µwŸm’t’Ù~ãN>ŽQÈÚŒZ˜\¦üÿâïüöÎü ³çZ€yð>®å¶ô%²ÔöÜVZ#ÈžZ€ãáœû(@©Aï#|i¡lŸ€Ž€;Tf_¤ð9ª,ý4ᮀHÈBo+±Ô& :¬ƒr^Ttz» +àH €_躹^@9 +â)ÉGÇ™(ÀÊjüÛ03p_óÅsa½É€ F É[= +°Ô8]°þ1®ÈbrÞ?v€œ·VŽ˜€?š†Y6ÀðpatróSë]¶¾±Ä[FGÌïšî( +¸O4Vþµª5»õ9þW¯„qÿb—®­)hü÷`ɽo ß@œÓƒ‰É(® +À¸vt)þxÞ±r?Úñö¨¿%Éïë•wå[ç¯ÎËï&ÒŽ®oõý`n¢¢µôÐÒ5¾w[CORÔ9*‡¼Ö8+^Ky¤r§«Õ¯«õúIÚhÕ'ìÒ·Z*óõ¯[ʵ\u—ø8Ò:÷/ _úìÿWÅò{ót;T©Ì…ã¡9_¹Ta$ôï)‡Nkµ”\OJ‡ÒÑÿN-}R«VG.è­L¼Â|=­'(Qu~à/c@É꺿4ý Z ÃóT*:ÜH“G¨R=‘GõŸéÆ’ÊtqDoóŠûRE¥ÔT¯Ôßš¦“ä¤Z¯ýýß'íp‚$¡ÇŸ6éÁî»2§ŒÒG:5uyŸ¦­¿©$­Vëÿ²ãß64Äo·þO ÐK ÀÙáq€;Ùh=14«C ò—séÞ›ð?ã? +•p 1‹¡XThÀa;ñm@€v’‰^*ãVä‹ßßß(P…P0¾õðá¦{ho†*$øÏ×8GY(ÿˆ eÛTiz ÝF'Eåš^iSo~¹ÿpkÃm´èm°Nè_@ö¿âáGö /޵(û°–ÛbÇ bb€Cþl€áq€ÄÄ*€p4ðE1`(*J”«°°¢ƒV,ä#J`V²V=1.5IdЖ¨(HrUÝ1¼Î}s/ÐkV¬ ر?w‚¹ð?'Ä7Ú‚ýFh€Ð?:ðÔ<ûÑ i: +i|ÖVzúë:ÖOЉ=1=&0GX~æ¹µþBM¼õÉÍ­O7{Ù:øNsûAÆ0ôæw‡àë›)W Þb!ü·Ç¶‡>ÿèÈB€¨•ØÅdT®ëÞy¹/Wj£¿×ô‹ßp ­ô +ŽwÅüÿ-Fþhä~´ã-M¯´ž|›Ì={´(ઃ~€rBmuš6¿­OL|ýí³o´zpxpÐt¼r‹IÃzxC[ ©ûôààéÓƒ§É(¬\‹‡5Öo¦ÉtÚx‚@¯S=‡$ïÓû#m6[Åšð_ûg#ÕòBàUzßÁǺYžU¦¥{£uØlêbt¦ßTÄ—®{ÓCö +ûuŒRþñà°qxó'åâÍ"=¤­ÅÖ7­fs±Y¾@Øþϵ·^­¼WH³×¸¯O›dÖLZ­oþT©&©;"ßq]@«FcÁ'­ÒµÒáA#™­-6 ñstC퉵êÌÊÿ¢î¿yðçú/OÿËŸŸþ¹^9l¶ô[Ïžˆµ´š­Ö?'PÚìþ÷Qr1>¿cß)à ;ü½&(@˜þõÅé·øDÌ>Pš @ýüû9`£gŠ{¬À~>Ð|ÿ[m@vÕáþ^£!@l`Z0ê¥<ÈŸlé·œÑ_ÖôB/PIPÏ•»Gˆ¿]ÿÓúƒEûÑŽ7Bñú˜€3­O½ ç_Î0Þ½Àl'^ýÛéwKZ]”CÛlþr‘®ö±ªþ[XRû°ÑøUóÍ?ˆÐa>ù„Ô>)Ô¦Ê#ÅŸ·9K†€!ÎB¶Z¥õþ“R]”E… _!ú¸9EüãÌl5½V*%3tyPk¼F@à^‰Ð&¡Ž\°yðÿñ?þ—§õŠcÿa" mÿšO‡Õú?§Íìâ™ ñùõ+ˆþ¿!R69¬·åÐøÆöö½ó +€×b*/ˆ NÀbsã®8À]­ÉQŽ µ÷®0>‚¨ +ÀCBê9¨V"ØäÜ hƒl{k|xL@'[ø"§ìÅ @2YÇãç„ÌÚ +€÷n¬;@egƒO^è üƒÐpT+œ‚Y'm÷¶6>Жp`éj0þ;`ÿ«/yoä?'å9ÔÏüþΖVú)` ¬»1Ïõþ±£1Kc—C @GЛÏàL[ˆUÇ)}cÆ'‹Èr +Àq1jÀZ¬ø<£øõŸj¿J”)¹Víc¢îíû(™­®ž•?Ï$tÁ +þã÷³-ˆk s[@µ÷?ަ£œ,¸k[?Ày?'€({ü½0?~Ìóh0¹õé'ŸôQ„¬£Ž¶Ú÷›ðr +€<ø¬À[€:þÊ‹qþb;@€÷R ¤ÅU2ä•”÷”Ls¯é÷B‡õu!`arü* )š›¹a‘?Z¹íx‡ú˜ 8­—„çæÐÍÞ¼½ÊÛ~óÑDºð +ÑÚ‚»¼~:bÏð€žÿpP¾Pž* 4/Ñ~¾L<~µQ-QoP}¤Bë²²7h›ÔR¸€òœ¢}µ8 î½t|êüùKîÍÎ.V¯UJ-pvAdCÁèQ`Q M>˜.¦‚üª)ü?(Ž0$ -‹³º¡{£ùÞHmVïê×ðY3*ÈBõ„ç+«Zí*Ü£R=©VÀ|Š%›š)^‚ ¤T +TËS3³³µFãoÃÅ͉4Ÿ裌 Dÿøç??«TàRº‚x–x&RpØ ]f.lìÎæ6üú‚~…uaèFÀX|Th0(3}¦Àh6>0 ÀD@™9å=Ô§ë`îý¿yðpÿ¾p•³HœtjˆKØì(ÂqbL‚0¾yoc|”^G``ë"(z}óTDül»ƒÿѬ<à eðϽím}¼'°½½.ÌòVÒZˆ_×û§€¯öÿîïôÊÈ>Ù,Ûó< 00?€~ÜÖ:Ã÷ˆUÅâô_ Ï·£1†R!gðü¡€®~º€‰±Êð‶µÐéí*€#1ñÏpDPŽz +”ä¹1]¦Óï;‹×ù¢¹áå_”!pûõ§X}Žà“Ñ=­¼b!&¶½8à¨v[vMü€þ^ñìÓÍOé 0*4h+rÿTÓÓßø¨¶ùÝ“ ´îÀWÀàŸùý™@k?t0 !ñ²a¿óÑ[ůfVxýLŽ¢\)Lf +£tÀ‡mÍT^Î"Ðô±¤:ýH°_.W*`XÙ¼@ðŸ|;ý¨2-C&‚þíÂì;@Ÿà-—ä“ç­ƒP€YœfÌ-î¡å‰”!z¹P«q›M î Xœ¹Qa§6å|¿~êÔk¯_¼TœÒ5¾¹ö¨T¢a¡ºá?p½€òÎ.ˆàûoU_ýQQ1DN(Ó.@Ö¬ÞH2 Ò™õü¯Èj‰ ø0Áݨ|7§¦Ê U€™Ùq =Î0öÓÃ0ŒG'»¡Fãÿ±ùÇÿxШÌ'UÚOè!†bÈ*ÓÏP9ºÍp™7[§Â®°Ž°þ¯ 8éŒëü|†h?6Eâ?&Pû=(Lß#„e j@¸úpo»ƒüÙ*<ÄÒ«ô2”u,—::b<àûâ(*ÈÞÖÞf—`èÆÆ–8HVê˜æn,K´Ž‡¢{ÙÁƒvâ/ö¿ØØßÛÿßÛ`½0:€ý¯¾Ü/Žö'l¾Ðúøý^ [#«F–op´ + «Ã¿c-Sná*›dA€}b: +@F^: S”È ×Às€cúèŠè´О@(ƒ @¾À÷ê ¿qÑ%ðÝà ú˜¹þsJæã÷ ü½DúÇñQ €)§Ìr +€’µc\б~ +€NìÄÄÜÚƒ ¼Àq×÷6ücí5÷ÈqÀÖ§ÚŠý¦Ç™e„@¾öq +ùp\ÿàþkp[Z`oOþÌB‚!_9³Oˆÿ¶Ö¯ªà Bt’î=ö‘ÛÏe< s½g”_ˆð[¥B{r£ê±ùÉù“Çÿ À‹-Í[¨§x×ÕùùJy¶â(@Zé ¨ž&¥ªÏ¾Oå·1>t0cìôª +î6~ùG*üª×Ê7oÞBÊ„ÒIuÛÂðüÜ,…:¹áj…ò”pöb±\ª¨ •J¥üNÙ½~éÒÔÔl­U*·*ešê$Jöa äH…Ùˆ™È?üê—oªeFddÁ×tzð¼›ó×èZøb &ÝøûNµf0¦Û-UÓ÷"@˜šš) þg®éP%=ÌV“E1¨Ìl™:M8¿V£ +àÿØücóÐ +@M ¡’Á–ÌOè.{Í?·¼cŽ· vó;œ i'…¡ëY+À£ZòK¡±õQzë‹¶yWþ»¸~oƒj…;w¨XÏ`÷ bÜíù v*˜ÝEûïܳðÙÖ˜€ñááÂøæýõÍq^6½ +€{ÿ¹ÓVØZ¿ +³©b:ë<Æ;â?3òÈbXt’Ù¾ørïî–Àƒí;Èý@T +ãAø +૬!@ööh/žoà}~c~{-0€“ðüØ¿¶µÌ GàØ­Ř¼œÀv¯ÀEé$@ ß +à§#‹  + o ÀÑV/àÿ£%<|a|¯?› [C,@Tìök€_ˆŽzŸS &@¹Íî?, GèÄ }çí1}MX.‡ÿjï7*xþÑûgI×€ f f€tdü&Žà*¯ö~}ÿö÷}0Ÿ, l²°wfW³®Ù6À€fo°ã*›`~×Èï1€5Žж€ñ«ýbà?*/g‚Ý~“ð.­Ì=’“ê +aX"3à·Jÿ÷aZyJ1”íš Z?k˜7(¿CDÀ‡æÁ¯~Ù¬VGäìû Q€ü U¹¦¬©Z ‚½ZYXH€›E¨—Ã^,ëÿI$ÍòÅWΟñ}¶Y->kV+N_«þ:âž…Û@ ïUòZydÑÀkÊTÅiH+#U+Åò hOŒÆÍQn!™ 3„Ht§Ü¬ì Xm=+‰ÇÌÎøÚbz$2ú1”¡`ÖKþ±Ùü¦U©¦ÔMP ‘Ðû +Ò¬OU Œm3þ™Èë"Ëòì¶ÃvçÎFÆtXmG}}”šâ~"•°„¯M‹[Ôéß»»4¢f +À~G */¬…S­Üïܹç*€H¶× ÃׇǷT¨BácdHá@0­Üe;#›trLë2ÍŽ@{f¾ª-à»:ûü‹ý/÷÷6×·Qî­ ¯† +!°Ó à?Ñ‚_}ùwû~m„Ÿ°VŸcçõoӳ歎àó…–o (â Ã{côÚËÀÉ€¾1]­t8NÒÚ:¾À-ðùÅ1=­èH bÀsúø> +€®'*¢Ó„ïBøÌÓ?n.l÷„ ‘iVÓÜô¥Ô"TÑ'‹"øçoY _&àÏüw”öKÒÜ„øÇ¼wšÁ„ßò× #¬5+ÕÑ‚ÊDЛ‚¼>Wà³Ufš&å‘êÏÉòüÍâÔ,7“,6ë#‰2¸¤2¿ËïS±´»A´%_Sz`"â&Œù3;[kU’ƒÚ³Rüw]v6Ἢ³c ­—+UÑ•ãþéÒTÅ^¨C)B'ƒ(iµ´HÖÎ¥m°]¾aî 7Ñíµ¶>Ê0?ZUB=?p*ôõh@˜Nµÿ–{4Eؤ‹!ᨵ|Ù©·÷¹ @È$cAƒðïR¶U–QÔƒ.`xhxx\übsüލFtÛþkýßùy€˜€6oÉ+V"2s&m@y•°“Xß[_ßÛÿþno|tp¸0:ЋI¹O†@ìÿ¦øÊõçÄ–¡}€ûÜš·F`”ì~N+€€«'°¨(5ÀX +”êܼЩøÁc²~Æ\pŒ‘ˆ +€Žg +Ib©Ûýø*Y+N +@Ÿ€€ÿß/@‰l* ˜)45š÷Ÿë“·à_ƒè¤ÉÇÑ^rêQ\c ù(€Ä12—»oÈïþ^¡¦¸ˆ“ðßJº¬ÐÝ  ¶-Æ€öÝ_fú°×<(Ö , mGðØÿ®ò׆žÇÙ+ ¿nûŒjÚ™ã¥ô˜€Ðe€€¤Txúü#*{¹Xý¹ë.Ýd8B1€Fr#-ÏÃ)f,XÇç—‰çïP“ê³Ò×鵌ˆ¹n¿Ú*‹Y$i©žºØd°×zdÀj‹¿l>ýU£yPñ +TèT$⥄~œ°mÁ{ÍŒX>w hÛ\. í{œnÛVLbÕ¾Àto{s|h˜‚ïÈ]¿#ku`ƒJ„¨Ü‰ +@@Óû_d +@†¸0¯Úÿש0­lw)´$`¸0|]÷ÆzAeÙz ÓÖÝfsm aul©°¹±î¿]ÞsP ¯}ÛŒ¬rA[b‚Ïìù`o#(V +±€\€ÂAP"Y|‡t¬ý~Žœ7òÇ)¯ä‚û÷pã†pÏ0h}¾å[„aø‘€N`Tx¹ñ‘@o€*€ï`À¦mwd”2€×Fu‡! ƒý1©@±pßr?°™¤€h@ª„ô¡# á7pú!hãêð‡vS¬ö\¯—#ŸI¹Q™·€«?µð—`ËO1Nä~´ã-MKæçÒdn—Wˆ‡ +žÔš­ÏÒFz˜TšOµž çtÂBÓq*.Ë­ðpà¡Èà> ÚM¦I«ò{3€…ž!Å…¨N§ Iy^1gzsç %ÜŒ8¹.X#˜¯­¯^øçî&±õ åÖñ¡Â¸ÓëÌ ©¡„´rÑMìVg +Àî‹£lF €{÷î‰TØÉï€õ!ý^ÇÅ/6ï€è¡ÿþ`°ˆ0ÐÝ.p'»¡Nä€ûù(Ž@Y™|¦>„í¹_÷µ… §cÀè?:*°%Ïatܽ!ÿÿÎ/œ…®]GMÿ?9ï?[f{F:Uýc‚úªzåùÖŽ°/ èÙ— +>§'ÀRxN?!°DV±^Ô@[È‚uz ?àXm#A@ãÿG ¸Ðû¬¦þs/â$4ó##wì:ÎÎ(PX@ #Y @ÎûÇž ¬„"Hžg<連Œù9À³íO>ÝÚ´eôë pt<¯0Bo¬½ÏãŒh+û3&@[@e|µ@Ý>©þßòí©ì=ºå?'_9{&4€¸ºË+üú»á_`¼0,‚x…žEkŽ*2½¿Ç"ÈýhÇ›±©Ÿ%É_—ÞOês×JŒû7Ÿ$ò£›×ZMù«I¥E;¶ŒDÌâòf}ß ƒÐH›©àó­ô½v“ÿ… $•ÃF#´0’9aðÁHfÜ` X¾QJ’zéßÞÁÿ—û^œJf/<ÄÖÒwÊÏpú3æ° kÒ…öDÜð6g“éÉÏ•åűˆ‹®ï^+ß͘"²? U%ùÉ'f•ˆ¨ oBˆwIžU'Éâb³Rmª Úåý3”äbD3! RæÛn‰Ê}˜åa‹`]e¢ùB, Éd.ËA!A(jè¹@×ö`÷÷D°·¹®÷FTF hk|’§¨rýѲ÷Gü„õY·÷Q?îaÖ¯@4ýû­®ÜÁÆP€žÁíGGûЫ/àÿ÷øÎýÜÊ+ýbÜ +À¦=& ïX2ßÜwSt6ø³ '¼güýþs/ÂüQPÖhKÕ{µÙQзKeà´`}bNØ Õ¸ƒ®Ü~ ÔMÄ™ñ¾›hžu¤¿a¦ß̧“(éÃCW'Ãø5ο,£Ú(_aý3ÐûJ6oºÀ +€q]©F¯ê1ÑôOWƒÀÀ£Ãz¤!øïV² ¼c:ŸM½À‚ ¯¢£tõè?Cxz], ‚Üv¼E éc ýÕVë•k¥z+má¶·Ò‰ä@`ÚxšTžÊíÕ>¹¯ösgg |—³ ‚Ȳ5¿q&] +¢­îˆä€½aJª¬3@ ƒ XK›€­iûï„Åð%z%€@ø7; ö?ìò¡`= +Àè€Àè(µ'  T-líç$¿wÃ'¾L^déóS—ð¼£  | ˆÇÚÑ~úÄè­gðôÐ3@¾€t,÷ØVò­~€~¸Ð-$=nž-‚¡ý{!Äͦ`î$ØÎ@— lÏv)lǼPЉ§NeQÿpŸ=°Y@ ¯}úÉäøð•!Áû'›Ÿ€¢2ÚŽwÂG¨/¸ïà~{Â6¸†ÑÞf:8AXpÅÿÕAü±b~p»?Ø‘é€jYþQl}Þ¼eüL†‡¬ÈA ï¢œž™ÿqíGà<õ³zµU)½_®T*Éï?xs®Rgp܉”n÷$õ?¬CM«Mã]èÌî +ñª ‹F´½`@f'¶˜Ì=i|¸(”üEu^˜Ü_€óx +“ÊoM×U”†AÿôIDATrùâ_è¯:0ð¿”GFÄtní°Zýï¸ÏÊZ'dTɳϤcA¬ÀZ|yD—š¢ÀkçEÊ‚b€dö’ÛˆnP’H=œv²riªïW7QIÊ•råëzýÚœ˜@=¨¦‹Âé¤v8Ÿˆ‰¸ 6èm ,dÛOÐÊ×ç*Œ£Ìãc®= bơՋ.ù™¼ +ãaFó/EhžW€£Æÿí­åH¨5Âÿèuó#±Ò¡N¿x 0ï«`®þw;ú ÓAÈA‡þ‡ +*–~¬m€%ì"lÀ ¬[ðH+Ë£»ÁÞéX¾¸‡¨•F*¸/ß@W˜*^8ÿÊ_¼viFÉÒd¢V.^ºt“ÊÿY×p”C]Ȫ$’ßMTëóÕGéï½;‘¨@óI©EÍ?÷YI\KÊ¡Óã*}Òõ¬Æ6š­êÂa‰Ž€¢…"'­z%õ¸…]ÆK±c}ømÈo×Ì¡ÿÁî܃ X õôgýðÝôgkŸÛ +ÀÇòÜCÕ~d@9€aÔhʸþ€# +£ vßS>= +À¶à¿K¹8d‘ãAÉps +bSæfk6bH·}î9EÓùí’º¨¹T2úÿÖþ—ûÊu|ôŠ€Ññ= Fõð·-¾B:–±cm´Ëœ÷ÏÚqý”Š»»Æ&£ P&e_Ë·ÈbŽöp¤'ÀÀ^.@`ü=bN2@wO€‚~­FÐg,^êÜÜË)Ê¿þÑù¿«[ºuëVDÉŠÿñp;bv—p’€Ø©@fýmÅ,†wÈÌL‚=È)÷¬`´0¾uŸãcë[÷sþ¿,¼1ÚÖµqœõq + ßµu\ Àò®ì±±)@•Àí _ù/¿ÇÚ +ÀKÆDð}€N?}€‰±Êðâ~Žè7@Àÿ—ë@;møÇû¿uk\NäËY'}ÀÞÃ^¶€W¢Ðm}c‚ÿž+wˆÐN¬íøw€v_Pñã|s’Ñ€'Áþá+š}ÉìÿÛ,´»ÞÜüY83Σ=Gu¸úo[ÐÕ®:P€ÝWG‡¯œ=sV«|è6q~þm +ÀL×ô …ú_gsþ ûÅøñ±×kž"ÈýhÇ[«¿%iëðÑïÓÊ[•¯ÉK–¿Úü0ÿúiÚH“fóðÏó‡ÍfÚÔFKn«ÀºÖhµjä@k¤M†öM’´Ñ”¿/'»¥„‹ €‡Þj¥­?UJõ§Í'餭ôÙ3R„ ¥iCøéúqa|±X^(µ•FêIù=ÿ¯Ÿ¿Tž*ßHÂúZ£ñ§ÖHÂJÆî×¥”ýÓCe¨k©x­Ýÿ$U +­ò´*¥o”µý‹ç_y½\SI+7*)ýùН,4j‡´ZH«.ˆJÂ7Ìy"ßÎýç¤ôÖê‡-RHªõ¯-†Óõ¹4©Ë’jeº¥R¥ÂÂåŠ R‰çç‘FªÚQ™Ô:•$õÊDe鿬TóœS×+Øüt‰ÿRñF©HÀ@qb®òèoææFþò5#¥râ΄Õ!œ¾Z—³]*Wë. 2&ïe‘²YUžï•F¦•ç ¹ùÅKçÏ_*ê„ù¹k%.¢5]š.W¡ ®âN« e²*OW¨¢ÐT&Jýˆ¬5«'ÊýQÉ7É•êiÝmûçÓ軚Ö)uºJ¢„¾‰¦¨¿«ÇZ™¯T[‡š zHs¾ +ùw ØïØp¬$†+¿‘)6¯† @4z½­õ« pçžiÐY ý`.ZSðÅ}~‘Ðr0Ý1w6Áå¸><\X§.¹.WÞ=ˆBXµï¯‹Æþ(G02e|œLÜÁóA<gíDA˜´ \õÞþGÇQö¿|˜)úƒ…7ÇËÿ„†z£~\Ë&í装§ËP€Ç»Æ§YY‹€ø ›·¨(Mô¥C €Ò=¿'@S€¢Àsú`P¸µ¨èæ2àH @ïh€œ€b,vdèjþõÝ1ü‚ÿCC ÷É>8ÙÃ8OÙ<ÛÀ¦Wˆ™ô*‚óQ}bt +@è‹ìó£ÇN·MÈý3|yºþ½ªÍ«;ö>°4o¸òžV:læ@@XwÀäfpßÛSÜd=˜pž¬èã¡ÿú&%Qÿgé ˆS…^@æǶÿÏDaG‡¯Ð +`R/Í;zéØÃIä-²'?ÄxèÇ ÀX¥ò×ý¦ùG•‰¹¹zeznnúÝÒ\ezpǦ+o–J•9í¬ÌiÇÄ„<ìÚµkaMvc¢4!6ðæ¼ŽO¼¥°]ÑId2ÇmϽYñ¶¿¬NLg‰BÏz£^¸6"ž›.œ×õü¹ ?Ñ+VV,ÿëÒÄÈÄôœÊ¦st™ÒÄ´.21ÁщlÛ”ÑôôµŠv_sùn\cö—Êjä†N.ŒÈQ¸pÁ¶•n„b:;Sæ+´®§*™¨O„º¤KªT•ËíèÍéæô8¸piDOEïþ{á'#¡Ú'ÜŸÓ)M¼Å)Íi—¨N|¶Ú™³Ë"òGs3{ò›‚mýÜ ÝcÛ6:bÀúÖÆ½õ Üóí­õÂ9¾‚ÎÍ{Âë»ÀÿÇÄBìü v/PÁô! +ÀçÇÄð3t|[Èz€áaƒ~²ðã:Èñˆ `ƒ‰ +€vlº,Ñ:=üWIµ]Ñ};IÏQ¶÷¿ÜßÞȵ@xðw¢BãŽø2@°ð®èXx÷¼]z¬ã÷çÖŠ ·žÇ _!§DÓ³ þq°«N`(ù}¦ƒÖ•¯ÓôIš4Ó4}–´´õ(ù=šÿô#­!‹ÿ‡ÃÃGõj2_–ËOþó:áü-ûä©%ýß´¾þûÖ#Tƒä?(Q«Õ:x"?ýƒ$}öäëGiZ¯¶”?ù)çäÙê`«•(‡FR™)ŒpÑÆb2S|ýü¥¢›êË’d_'>jµå}'r²ÿÓnv%•+]=tA”k+yôè­´õ(UañØËEFºX.RîÖ!–GŠi­š€¨‚$é¡ +Â=>KU˜oZió›´2ßú°•~HUÀ´õ{òU¢¯¿~‹‚´ñ0=¬ÎÏ'åùªî@OdÚÂÄ!j‰æÔ#<ª¤‡ië}ž>ï§Hï¶„ÿç!ײÂÐ1$¿ÎT˜DÛ ‚žŽý? gø)õÏÖ„õz€íõÑ!ZÁ ƒšÄ´öîIû€Ï6PèÜ)X__ßÞëÂÿ落Â÷êaéf€ld +€1@ŠZØÝ5Vè‚Çáa7³>1@©þ õ˜õ0öýÇP t•£1b3Gb"ž(€bap€ÿ2ÝÇòRôþ¯Ëä;ÓÛ}þáG?g](+~¾…âPˆ+! 'ëž· BCº,ÛÖ»€ö†Úî™ÎÒX øwBþÇXýŸ`q?8ýæ tØ¢·^¥˜ü™¥viþ³°ý@¼Stÿý G ûo_½r†æý 1€Øð îóŠñŸPÀþ +€Èÿ'w™yÚ¢ƒÉñ Àè8â#/84?°A?,Úà,‚Üv¼5ûÛ?þ9©dõÙ„«9Ên¼M=*>j{ˆ½Ì ?§èa¯Xœ.—ËïUÞcä~:ö«V¯QK€"N ¼¶“FJ;¸ØFOÀ^y–6,#©Óe5ˆ *Oˆ–¨D\Z™èÎÍCâaÒø&"4¹F9£._ø‡×í_ÂÇ!Ö>“6„æ ŸÁ ß¢–(÷D 7>¾³. +¾Š O+€N @`/ 0>Ðé@;uðø€“€ÀÜ7÷b€L~å¾±?†þÝ2üËûçs=ÂÌe”O¾K._Ë)D  V"DëU2ð;×v ÚÓ•6Àò$ŸèŸ,hþ)Rȯÿ30<¨â†UÈßeå±Zœ=´Á?fpõÊàé3ƒ± +àÊ•¾ +@D}¦»¿n: +¯,€î€Žõþv#ÈýhÇ[ü#öß“Šá°v$|@<ÁÖ£’‹Å¿Ô•ÜŒ.Xå=Ðw$&%²k4è ÷ ø¥Iå ÙtË¿œé€æ 103;#P­RêÔ¥óqž^ûÝm¿øÁˆ’1Ä€-¿V¼  yP™§ óŒ>¬$ïé´rùæ¥WÎ ôfñâT±ØÐ¶G°qQ}){£ùžÓ ø‰„}.³0¿–Ô¯=óZ˜…ëcÿ‰h˜§éý +c È P rK©žˆc ¸XjÜo[Œ + ý6î úÝ{w©g¿³þq¦ÿcÁ§wøo`ñy‡Öq”ƒpWÞù=ýŽ„â$æ&Pu€”þòŶ÷úSArÿ•‹€8(Ä +ÿżÀ¯ô*@DPÛ.{¶4€àc™\lÆr`¡€ÍÐtboë3mCdŸïý†žs¡Œ¹€«öî,‹Ü‘ðb`^ß«Ðp ºµ¼ÚEŽÆ@(ëC +°k+˜AVÇô ð/Ù€M%úÿóX¬Dôïÿ1å;4hì×S¸~} X0û¸u"üìÙ?ßÂÃgÍçëß +@D@+1ï=g=1ÎúEæÉ%ÿ={6u—‰ 7?ÝD@}ƒ¿Ì)Üg†¼\þhfÊâõ9´Ç)⿳’s?8¬U`Ädžõè 8Èz.q—éuü½ +‚€aý‡Œº +`Ó#£hÿný-‚Üv¼¹µùQk=­Î.‚P‚E¯ ѵ´4Ÿ&Éû@ËÅ©"ëʘ ÅžU+×bŒžá.gœ Ü%•§lr’E¤jÆà‚3åâììOÍé¢ +05ðÊ©×^¸@µ2·éDÁ¥VŠÐr­ÐÓÒ…Ï{Z£{^ùü¯?i¶Öh¢L]ºT-–U*nRGÉÐÔB%”éöuùƒfIÅ¥ P¢ÜQª‘®m]o†Ëü¼T¼É“á‘̨|#ÕÊ„ÈF¦áYزhÂVWPÆ<°ß1÷þ ʳv|€m[pD ££p/(ÃC gT67î­ß»#  gÒÅÂUƒ¬PÛû|;Œ hƒ·|tÈ +Àö*»Ñ%>VQb €iäÂ[hÿq_0—üw Ädƒ2s@§@É•FëÊQCüƼEÆF_~ùpo}SDàË=ú!`T 0Tu€û'P21ö‹¨Ÿóû;[lxUö“ Ë‚~£·ÚÀ±±"àEÀ®®ö IoƵõ‘R‰èàÒõLÀs4<ã“Ó@©L˜§¯œÿ öºs^Z,¬±¾+ËBjeiÕe8.Œ_Ù媤ês¡(·tÐð­­|’õeyÞ—•vUû̺ + ^ÓvÌF”»®Ò8[Í!'ùè^·`.s&ö Ïå¡å[ƒckkAŠ¥ŽÏÀàÏc àŸ‹ü÷cÞ¿àùVDÏ›ÿþFžc.Ÿ’Gö€£„•,ày +ù¾À¸&W +“{tä‚uÛ÷÷Šù0ÍÒ@/èR|®f9à~ŽáèËñ{’þ®àúÍýA´GOÊï?gYðÿ'^áÃÛf\y‡VáýfÀèEAîG;Þ²6ç=#þº×?+À[À椺ðM©’Òú_på]»©›àÒ|fÑOK¤y _\¥`ðÛ©Þ'ãôQõðÿá‰0ÖYÉqo8ƒòÔÔÔ@1­Ñ¼¿:uéü+çEìX—gk‹#vóE<u2.ìyog“$×µ7ŒÌ335Uxí•×!ˆ3ÅK—fŠ%Òñ0°‘–*{š–š<=‹n°¦o1°÷q=®ù_¡Ü,êa E̳lU©Ðã¨.ðDÈ0š.D¾­ÊßTæÛßžVƒŒ½{Ï=ðÇNÿ€MlÓ+mN0ÙQ„š£Ó•yÀ?':ªHb°4À¹»Ž@†ÝJ¸¹…÷O;€pïNN  ÀðÆÇpeZG¨wm}X5èi@ñÙø\þhþCÑTŽ@öö>SvÜT€ÿÏ¿ cA»\ÿ­‡_}µ·õñ¤°/ë`@àúÖƒÿ +@nK_·]Á~"×€YóÁ¤áȰKæF‚8>0@zyygmMà–€¦%³A)8Ûl^Ö¿Èå¡|ÞëcT\Xº­S–w–P„Êl€ÇBú°Ôо…ÁÁƒ¬öÖ]㸖Ë;+Nàòê$Ê …•%ð~Y¼êw$œ[ÕeÄbÅ +€Y´D4`m‰•Z…h JÀ *ð€Ž›;s}gi¨`N¢âúʺJ°Ê'#Ž"¢ÛûGü×s0þWo-ÜOd\YóL*áQ o @w?G€þûúÏ3þÞùKæØDDjY›`¡'+Wµ…|uÀŸ¾zœ +à4ÍÛ'{©Äâ¬Æ€þ; /!½rÐobpuxP`ÐkÂÿcÃ>o¯l"¬¢\) \¨,n؇Äÿž`fä~´ã lë35Ò÷«-¯/DÔÉõO*ó©³  +þª(%ß;®/OO—«õÒ×NTs`í€R±`åà?ürñï3 @Žwå=ƒ/8ª\oÞ(C” |ñ•S¯ Ì/éJ‚ÚFZª.*, JïœÇŠe¯ª,åÒt9©0h‘Ué`øâ믜¿4›4éÎh¡xi`¦XlþªQ[ ¿]« [@éçþu¹ÿdÀ–>pФ#yÀ%·Á!.‚uà_–Ì—þ³‹ëÇž”ˆˆÇ´!Và*€¿Žß~@㦠´Õæzø3AÖ¾¨0RÏž¨öͨ| æs¶1]ëw…¦†YMó½Ïá :ÈϱÞˆr±Ð +À,ÃgX Â!SHíS¶¬ê³*‹ÀŸ…ÝY×ã?~½1Þ&ühÂÿ­Ïàè{ûû_}ùá¾€ÐzHÀ­Æ7÷¨0€&<ì˜ß9‹¨ó\‹ø}þ0϶ØcÀðU €z€ØÀ@ÇŽÄ´)€`Š€­,C–Vni¾¼ +,Ó¢^Îðr¡[ÐÛUÿ!"—My"@ׇ¬¿ rÏ»cCckºÄªp˜Ì-ö+ç ãËɺý皃°ÀBRPrT|~ê4§Þ4V —µãÖ`aêÀ9l›@"–)õš '/eÝ)¡(‡ Àõ!*.ÀlQjÚ!§NÚÛ¸Ÿ€Cø­®êcèÇ"úç¼ÿöc0üëù¿Œà‡zúÕLN¦äoÜÞ?ÖV:ý¼¨'Àÿå‰.б®€ÌšÿL¸¿Ú‚ç ¿ðOM=–k!ŸeÌ@sCüóMð€á«tõ3øÍX}ãJß ÀÌ÷g¶y— +€Êe`Cø¿I#€þ +@üwÉý€#ÈýhÇ(ÔÏšÕj3ôk¯ñM³Ñ|¢Í'Óó­ÃB°vI>Cà+MW“éd!IDt"ýÿ ?õaiM¬ úßšO d%,§ÊžUF’‰Wü¤ÜŒ +ÀÀë§^y½8;5ãÄÍt‚Àˆú9‹d Ân¹^¿æsä˜WgfxàõW^+κ$i£|q@~úA£áz}ÎôÙäNß~t+(â“–R@x µ›O“'Mq¥äi:BQŽ Ôà0˜?Wv€ §éò£jé)£T¡ý@ [)ÅÐWë™q?˜8€a¿c…É;([nÓB~P6>f=«¸Ç €ÔûuxØð)¸Þؼ»!ð1Ò¿K“AiÌ`N @ØSHjùŸ€Ð@¯@+@šèOÑWYØÑb€2D@»ƒÐÁÿö‡É§°M-S§ÈïïõÕ¡üÖÞW_ÑÀ¸ÝúÀCáôþ±øªx) 0Þǵü–näØù—ãi`…o¤Ã´c\ÅFW'XY]¬ÞÞ][“k½ü‘Àà°w¥£œ>%Àö£?åKãó +û "î…µÔ÷#Ô óug/Tw°·Z?´€k ¹Ë]€«@‚Ȉò¡'ñK·t*eV±È‰,¡/K+·a;+®X1ǪÂu7,€X\€ žÁW÷ ØýÏÇ ©D •! ÉøÑ¿×ûo‹ÿú#@V"„¾ØÀÿ¸ú|  ;NèÄô"_.àD×$×þ _ &ðþdò“O?¸Â€ÀèöúÁ~`Z[oÃ_µìëË"®+äƒ|_  +À à VùøgN…Á®˜i ÄX8þ7z,<öEûÑŽ7ƒÛQ#2ÿ¡]k¼éÁA ôn6Z¥ÐùN´w ±BÕ`ò°íWPæ«ïZìv`?ö9+2‘×+À;<|TýÿþñÚ3“eø;‘˜0_(3ön£V-œÿ‹×nÎÎê +³µæbãhkœ–Uʬ©°lÀ1:rÏ<#.ó{Ž˜šºtñ<1tØ÷Krž-–›¿­5 ¢@Wáë `~#8HM‰ü@’FóM•!i¶ž$ v$óºOAT‚ +‡®¨c2­' *ꡈÄ' HÅ®x"­Ãoç]û?‚{Ûãúî}&ðà”9ÀøßÈÀ¦o oðïå¯o!PpO?¦¾¸ÿhúL=3˜ïí; Êqy`KW„„ž{bèpC#*Ñë½Øö¿[pdw  È=5m@áœŸìøšXpðó½Ï÷÷¿´Î¿õà˯öö6iþGÀøØèøÖý/¿t_À(]ßm‹ïá¸Õßr¨Ÿùý-­@ÀB™¡ÀhŽˆäb:*"NtÐðú—ÖÖ–Ö–v½²ð¢œ~.­d1”–€Ëg‡.]F Àõ-Pÿ/"`÷_Êÿl>L¯jO€}¡%ž?;qü2yÎk;«·DVíi›Pc06æ­QgÞ‹¬¢DŒÉïWZHŒ´à¸€•åÛâ-Zw¸};#œ §ŸÙe¢:âºÁàiŠ<4DEm ¾½S z\^v,£hÇš²!D‘BúâÇzÿ™ø>¡AOb€,ÕûÏù²óŽð¢(@È)Îðd–»dÇú*m[ÿTÐI½ôHO½,ì¤[ <3x5B¿?ÙL®·ftà8ó`Fö8ƒE<€øÐ©W €ú½2…&¹ý&†þð±#!pehx”7—»è¯dÖùùFûÑŽ7ƒÙQk|[¯ü™•˜Ê€úÄîÝf©š'º)¨Ñ®ˆÛ}w¬Z/áC/$u<å`À^#ý•ò’çû¤5ØÔ:—‰¹‹LoN](6€ÜÚìÔ%ñ¿dçºFÌþH@‚ÿÞá$Á.eål)8›yòIª×ÒÄ0[™¢Àëç_/êÚ³7‹Õbù€àGçíý¬Tº~z8Ñhr5Z4Ò.€‘õDš®ÕÛàÏL$C'Â4ñŽ(@¥\™¨¼Ÿ”;ÂTŠÁù›y™gØ Þdé,Zö=9ò[Y àÛâù6ÂÞXê@t }{Kþ:§ÿ…ÎkYô»mòæû÷¸‚ÛO€ÜpXFjƒfa,€.€~‡?ÞP¹‚ Saâ +¾cý?=þö*Úaÿ“"gæFúP|Ã>¦Í° p²Ï÷ì=x°/Ï ²v€í*€-=Юɭßð°=ÅWÅKY€ù€ùôãž°vãÆ~°Ì +@˜-¯héo¾" MòcˆÜÀØ8õë+kkk+k·Wð +Pqĸ×ã‹Î@ž3ÿ$!Àâÿu!¦ P¨‰Ÿ „// ‡ÇÈHe“W¿#÷]«Žàâ«;Â`ìÒÊ-mqÂØŠø‚øÕK1Ò9µ¾H :UÕ>Àªèʘ2Êû6t{\W… ­–Ä 8ÁFh¢òP‚U•ÔY¸|æ²°‹wwfhùúå1Ó·cØ…µP ž×ÎN„ÿ^ï?DAdðÏŸã%ê^Ò"cǵðŠ€~=ÿµzRë‹ÿÇ)ÖðÆóƒ ¸²Þø?Ì éþÌ »¶É9þýÙÔâßq²>í‰õø ZÐ +u6öø"  £PjC¼æ·À_% +šãõÉûa•*N@×X9ã1j +AîG;Þ"±g•ŠÊ€ +:×pxÿIZ*½oTôhÛ&<žyÇÎn‰Ž}Ûèô]zß1o¼0j?ÈÙ }!@vXyj9@— § ©QŠ*ØTÆ—.MËÍZíC×dñsˆë*öÁq \×O$øèv®é)”«ez@žÑµôa„$î X-{O¹<«ƒÊ³2*œ9ù Žèþ³&ÿÛ¦7"½`fßáIA4 +À'm@®öÝM!®VC @0°ß†G`oÝ¡'€Ñ—^ ¼I€qV`¾wß1âá²í¶`ý?ÄD  +†(€œ¡ºÃ"òæâÊîp·ÿmçßà;7ÐM ã, ðåW_îS#þ¢0náÿËý½½ ÷Йâ{£m~¼Àúøý^ [#7€Ôq€¡_‡d_V‡hWÜV#ˆJLh¾)€@ï–\wÎJ ÍPÚ@DÐеSÀØG˜]¨o€#ð+Ë%ùéÚ"ŠP´^«8ðZÑ%ôŸ²r{U®¼¶¸¥P0†•åëƒÊ,6@ý7$ ¿——n¯|´RÒÚŠØ…„–z4a$pAVD vàvä cÃ]*°$.@Û€Á˺‘¨øE~Y;ÇÄyn…ØlD÷¢ûY[^&;êýcìÓmùËÁ`s‹8{¼u¥hÃ1ñø¸øÁr +À©,à9=jw½ÈœÎÁÿa¢‹`¦ã3€Ð +€qúu#¾€ŒÑúY|u0Çå·Û/ô7 ŽPP¯O˜†ß®g_!¼f|tHY† ÀˆÿT¼¡€ýp:ˆD{fg#è½uòŸœÔ†ñ¿_`çwþs˜"ÈýhÇ[¢£v0_ÆUÅ yÔRËé«'J4î§ÿêDŠflÊwµD@¸¿€Ç+\uNÆ»0o4ZóxÒZ§OÛBmÁØýó²²” €1¯œ:ÿúÔÌÂ,H]K*#%ªb> ¢³¬‚C CÝR$JîA†]P[lÔÊE€¢Àßþ­ 9³dÊú…àÛ'Ébk"Mc'@fD*øð¿‘VG*ĘkÀ1PD¬ÿ룯ƒ”O³j@D¬†|¹åžˆîò0†ÿ…*€ùAÆÁ2ô†1·¶ÿ½@¨Ðß$Þ?(Úb‘Ø€ôm:çÙ‰ ‚Ï턵1€ +}¦^À¨oØî`7©IžÐnÃÿÃ=+*l^‘™²Ê8D È*(‚€ D¸€ˆ$À;³R°©¢ÿ³´ö~ó`ÿ«?|ùp{cã¡1(ã£ð€­}€ýí­ññ-÷øðKâøÆ—ÆKY_¿¿Ã©òÝ—–Æ|HÀC(@ö=JÚ±m +  TBßÕ¥UìÊÚòÚòl@X;6x}Œˆ¾±ëC—”æ,gÈNÿ/‘-ÿnÁ]‚ WÇ.”%ò9þ».° XYº×¾º#]Ù]ºé°¬ÄºÔ,A®Ã<&‘MlBgQOx!…]¾¥ôc»´¸­C;ÜßÒ.` f¡s`šhœ¨Œ‘'®`hˆ8Ý /q¨Í™Ë°‚1•1BIuºr×õÅV–uAô‘㽞6¤ËßÕ•þ€Nô¾—u+}cËÅ€¸u —Õ0úkñÿ¹Ýø +Ã…Ÿ®À¬ùÿñÿµ.Ï}”û©0äاº&iÀÕíûM˜—ÿBs|ühÐpÚÃêá0÷]ä-úýöýÿ,P6øúŸÍU û˜*Ã~g%‚Üv¼¥ý­uPÿ›ÃƒƒÖA£ÕJZé³§ÏÔÍæÁŸ«¥9 ,:ÈJ“&ëlƒhžäöÿ.i=9Hç’§OŸ¤_6c0M›iëYK>ÚjéÌæ?×+­|ʰwͤÉðziëIJß8ÊŠú3åÙ© ÅVª¤iZ½øúù‹³Œ<ü·Åæ7¿(—¦X'+Ù®5-ê8ëúP®u˜”’?µ´‹!w«³SÎ_ªVÝšimª˜ŒkˆúOZO’'Ây¤Ì<ªaš0¼¾$ #aÈÄâ}]ôŽ)¬"E¸0p©WÅ‹VVמãýó¥ †¾p“åås} Ðk’Nj HÆù·õ‰8¾'À¸ub#_Åó%ôüú´€õßázÞΞ¾rUÀÚëká`SóHðÞë’Ý_æ^ ÛË){ÏOŸ¢+ÀqõH,dˆ´àÆaC/‚e“lP¢Éq1•ø[ ' ýí=»ÀdF +“[û_YX‡|[b}ûx>üS°^³6[#À¨@P0@ ð7¶è§ìæûXY¾.”¨²þÑÚÊ.~¼ŽÉ—Fšç36tÙ8ipù²àS´ûÿ‘Èg¦ÝǺÈêÒàÒ®<{ò$¯ögeI®úÎòøàÐÒí5•qume‰*ô|× Öi—¨ˆÐ— +þ¥¥57XÔ¯íŒ .=&*ßMõWWvE–oß¾½kz±r{™8>á?´F´ƒ’ ÐÆÄVèຠ~Æ@‡H±'˜@'3ƒMy미 + ‹@´Ï™c¢¤ŸËôø ó%¢‰s°¥ïääÛ„ó‡Oý;Fºo£>­ ¼*ô1p @$ÿö"¬¹3ëÅÿ \¹îŸ;;h§?šGÿ½J+± ­pư«ºmá߀ÞZêçΫ€—Ÿ^®8žðË ?oEûÑŽ7ãÛQ›˜ ƒàasvFº+iü|w®RŸx«ÂÀ{Âh‘‘Ÿ\ûIðÆ#ý1¼ƒâ•êo +¥a ßʼÀÓ:W™ž«”æ*o½ ´ô;£ë‘m`pdäü… #Å2çO‡Ñ/üddàÆ +ÃëU*×&SOg¼Ë‰ÐK飰Êꆒկ1²Ÿ.þß08ÿ¯Še§¹ñ“óþò aÓÓdÀ‰2þÓM¿[©¼ù7ñ‰èx²JI<‡±ütø¯¯ñ$¸:³P|Íy,EÑ‚i=ÒÙo) ‘îH9U+A6]VFŒ‡øÃ,v â+Ls¹ñ‚Àްµ¾¹! ÿcÆú‹àßQ€V˜)ôРŸÚÆ]·È)  ­ø7‰X¿Ñî ð^.àú0#d +@8^a2øÃ^ÌeÅ´b°ÄÖ†€hÊME5­Pâ €µH +&8<ÂL¹Î‚7¨ÝźҭkÇÖ––WwåˆïïRîhš¢°ogíÖÐPhÀ=¬Þ2˜Sɯ,„õî +Xàû‘y¦ìÉø[TýôðP$™¨|ÍN='ă÷ª‹•÷´F¯ÀÕoõ¹/*)Z“þ÷Ö³gOŸ¤O¿ýgMßþóA3]Ô‘Ãgÿ!ÕÕ-ê¹òhY û??³ÁÂä½í{´¦×|wgûãœЩè¾"nHB(==¾•ÛÎ7 +Àý=c·9R#ŒÙwD€§ KÐ`V‘=R}›Bàü·c\Vߌ#îæ;èÀ¿¿á·ÄVbÆ"û|Opþ¥€õm­nß[ÍGÅ¢@µÀƃ‡(î H³~y䌷Çóá¿Ð?¿¶2¹ËÑ 9Žð@*…OlQšS…®­Â,™ÀS ýØQkŽƒw[}ôp€}¥0€SEO64T €1Ü`Jc€å4!çš`yM~úÎÚXA¥Û¹½²ÃE«:$w~ymgyp¨°²DQ©2_5Î.ƒòc+«ô!pËaˆ”†¼½{[T°öë±`™µqû×JµX¾}[¾¦Âà péó!îa9“€Í4¼†4K· +gÆÖÄ–—éQÙñÑó[Z[ZÚ¶,Ãöñþá2¾ +¾Òíç|YØzöûÕ<¢¹ ÙôA»z´¬€# +€á_à®O2Qéß©iÈY@ýl +Ö¡Y3@ Ô·pu¸€pVÀö5cù³°Ú°°Ÿ}µ?0æd)ê# oW°7‹¸"×_võÊUžAÿÏœ±+‚ìÏýýÐg8 +¡À¸òŠ¿ÅnËð?Òør?ÚñðþˆÕç[MÚ¦Óþ>y²˜<}ä×fešjú`ÈõE„n¬Ruÿº5W¼_Ÿ ÷üFÚX¤æ„óÙX´*¾I&p13Yy>öÅG~Š3³µÅ':»Z¼tþ•)4{›,$–ÊTRtÛ|… j&mü(ÈB­~íkÚ&ÉBRe8À×^9_,{×âL¹X¼@Û?Âók Ys¾›:øœD‹t‚h´™|¨'B™=zpH“Š´G¾7S¦ãžK¹\,Wk¿Òƒ$“…jZ-¥‹ò(ô`ˆÀbI-ÒÖ\üD+ ëíØ¶ÁaZŠàl+|£±ÿ2A'Q€î +èÞO‚@;PßIµonÝ5Y`Ø{x?øÜ&ø½kðwWÀG€!1 ¦7È×t™ #à®Rn¸·ø÷\…RÊHF!©@0üëóðÁÃûòûÿðbðò÷î­ãýcAíC@ÄÿðåEÑeáÕáÕã¬ãý›Ä-;²Âµn + ˆ~m ¹¥lEH +À*®xÖ; ŽóŽ wMx*÷ûöí¥_úKÑϲ¼ò1ï¢) `Fn3ásÂA€;¿Ó?Œa–J|‚–i>÷˜šú¹Ñ«Bé]€uyuVô`÷–`œž! ú,-ßÒ‰Ä Ž)‘.¬Âþµµ•_[¤¸½»¢=*,:p›ŽWרð¿ CX±é(Pe‡A2žahGKw 2pFåå) 2œ‘c¸³3×uúØã }¨$ÊKìBÙéRBªöwVE[¬ý÷ñþ35&{Öd?ïûÝ,€9¡ym;&àhO€1ýÉ­¯ÿ¯œíœES\À¥ž…cµj `8v|Œé +Ð{%›¼#~‡é ðÊà ˆF» {Û [€„¯žø>Lþè‚®¸'ÀÍ,Ð}5÷·ø Ö"‚Ü÷·¡¸üŸÏˆÍëc•jsñCºÿ«Én4~ùôà€0~ÐŽ>lÒJ¥ES‹÷ÂÏ¢G¤àY¡í>šÜ ÷àp½öº T{Ÿ0z¤eûü˜r‘Ûì. §fk¿:€Š_;ÿú¬àÛý:îa±T£ëUç)J¥R­ÌW‚!º¾FÖÂÈaƒöù—hx)Æ”‹Ï••1Mª5gÞ6RèÔm‹Â}Ñ–¦ØLóé‚¶¿ãNÙrý¿gÂzH„f@DÈE‰E‰Ú(,ÛO„Æ’ÉM:VðäÙà UîO‡v|Äll…þÿ]ûÖrŒ$ŠÀà.À¶€‚àßIýK‹€17S²Ððn€Ôè W6(ÄdÉ ÙV€! G[P–:¨ÏðÏé€~Ì1f¦ðŽÙ„ÿ({ã[B²Ž€FÇ×7÷¿úò¾{ÚØ£+@ÃÿþÃý}:ò«ã¹üý60Š]s³»£*ÀØrV`÷_ØŸk£CJØ}ŒÒ.ðX9¬ Á; Nþ.4ÍÝ¿Ž®8èV§OÓ}ð/7zÐb: ÊdÃÿ‡¬®­‰¬þVÞôêo?þíîã•ÕíŠ +áwwäJPtM¸Ôeõý˜’Œö*ÆÚ¯…ø·—Wo íÅI~ +[ÙÅX[ùh—º†!¶ò½}Ûõ Kâƒï¡EIJ¤˜ËJMC@:ˆ½êÖÎ 1¶àZapliw¹P¸µ»³»»ó˜!ÿÑ3Tj‘¤ÝUÑšñþy†]ð/;÷G¿LßÁs™s!ƒ. ®D Û^ÿó$£Û öá£oDÿ ÿ]ŸåŠ€·íôãõÇ*­¢Òg 8þíU[¼Hýs¸oDÇXQfo‹¡ ·í~Ãÿ臥‡àÔ1À „{Èxe/>ÙÚüdcÓ}Fïho(Èq +oôOø«@—Òo+nýÏeŽí?j•jJç4|j yðǦ «ÒÅN’NÏÅŽu€<ùÿÅòÏK?n–˵ڇ´mC¿WÚ kúmŒ .·7 z;¬Té[Ð_lB92–Žl¦ È?¢¿&­!W3h@F‚§J,€ Ï@d@, ½–§YE›TµË±ÞÙ¡qž ÓuõB_ôËôì·B=Ímnx6ó&¡iÁÍæWƒÿ¿¦\…ö»Ç†–Ã*ª˜Ÿz‡dË·Ö”à-z¢kê ØYÝY[^[[»5T¸5&èýh  âýZ.¿Š¤Ю±A4ôÝ5)¬Úû&ZP…ÿµNã 5Zð­ÈõgÍõ ÿîãÌ™¡pW2ÝRal·p©€UJ©Yxš+tj¨œvðÿó}þ‡vÿ¾²Óa~Æ;;ŸóÇ1ÁôK`N$_ÜìR²~úõè´/eôµ€² ô{MPêC–ýßvà0 À„`ôÊàiÚÛw ?®iÎJ¼H4ó€Ü7­F‡‘: +ÀTÀ‡\íÜþÎ6Þ+¼Zâwss[¯ù“£…¡+Ãã±cÙsZ˜Ä_p¹ïg`¤ÿ²€èñ÷Z¥òDîiã tÿÓl>ù¥UlÁ¥ýtÎÃüÙÊåŸ{x>è«Öjµ€vBÀZýF=¥5}èÊG0¿häcŒ!öþÓ•À¢Ôþ€®s” +T/ oC ¤1séõ×.^ššµ`ü ¾;ÝVÞ¡wpì­(ìäŒ_“£’ʀ׊å_à‚WgnÌœ+Ò¾p¶:ëaüÊ4(¼Âج›¶ ðÇ4 žÈ¯šÎ¿ Ld#$8FE’1ðݶ À‡õRÊÃðÑ£Ò¡¤Öx$ÿGü ø¡|MBà–[ÿߕ˿E @¬È+¹(@Ág”öîÄ €#='#Ns +èß@€Ã6c?tðŸV*D'ÀF`¿‹-ô±¹¤(Jë^: +@-Œò¤lB›ðåH¶>øùÞçP€/ÿðåþÞæòÆöCêûG ã“Q `–ãëÛJ†ûï¾þƯŒœé5ô\ðÇ¢О–å›ÿì§úºù1§AÀ¥y Ð'5<é4ä‚?ÀÞ^Y½½¶ŠúÄûE%äúŸZÕNÚÌ ùOY,—û 7t†`ºÿ4½ùØÙ¥$BßÕ1¹Ê"(QˆÉœx%´)¸_[û-´`‡~}ä΋ XÔ·w í[{|{Ç-ûÐúw CË ü_¡á"@Lcmõ×<èÃòиˆÁã%Z$(Ûß +ƯAL8¬ëºÔ2ý“Ó«ÌæŒþ qT¸u^À-‚ò6xÞåÛaGÎûј<ð.øßÙµ{ß ùÝßLxã%§€ëÎ… z€N @OO€¾ÖËØñÀÑ~º‰€PÜ£¡ýãôãõÛ ÿ(g®hë°€Ìþu¼JÛ€ý6ôGƒM 3%‘À3Ùíº`Û÷ìäÇØødë“uªˆ‚ÕÚÆ‹c¼$ ‚Ü÷2°¿ ÿaù? ˆuͽV™÷Ø·º_ᣠÀ"šÚäx—ÒP +—Š7ŠÅ’pYZèÙ+(,&8è±B€ÀLÅ!¯=-U”µÁ¸å -äB¿³_àÂÀTy6ô»[žzý•×nÎ̼ã”\é&*m&õw:'ÄÀSJòŽ’&Õ‘G!¬¢xq€®€/͘…, œ»ús\g-Ë•ÊÆ +€Jž6ÿÁŒH¥þ0R"?] >j!E\ýo›µ&Â¥«Õ´ÂpÀÊ5$ÖÚb"A†´RŠëц WC-À(,Àà³¥9Þ(LÞê§8 0Ð@ èí €I^8Þ5éæ1  Îö‡ÀÍl,€¼0$Ja6ÑßFŽ‘ô˜//»£\)öi\y˜Ó´Ï ìÏÈ*¡uðïî`ocòΞÜü ÀFÇ7¶öÿ°ÿð>14pb:ú®ûÌùd€0°_“`IÈš«0 ¡ ÃËÀ~-ä[ghåT†¨ ¬¬üïŽÏ[Y»ý‘À î2ð.îs@9^?£×ïMÍ%Ð猜aûÊ\qõ–ÎYÛcØúkA·@>& v"ÖãW3~Õ%y,î±*àÖ)c»t;ÄPÁc· +K«ckk¿A‘ó¾{›j šÞÞ},7þñÎ…ݽ-Ú"Ò"&°£ãð‡µÕ[ƒ·v !2êVEEDO¨Òy«ÔŒ˜QD Ý™ìô™!x ÀÈO·•'Í¥Î{ÿb<>?m.˜ÁÿîÎîÕ玤?þK|ïK}ç/Šp+€|@Húröb cÝŸß ÜM/误J<|ÕÈÐßóˆÉ›áß³(|Xp@» +Àu>ÿ¯bN§í3yïkã~ƶ¶½².7h.Œ=à8 +Àsb:Aî{X†ùm + fg†.ÆÿB66ö?†v¤OúN•jºØXü» +Œn¤òÓåÓÛ1nU"îÒ†ÏADúrû•¬ÃB%,OüGÀГs¦"ÕRJ§A®ŒÐ™¦ Iàz"z)¤ËL°À°(/ù6 Ÿ€¨Ï:àY„ÿ0€`˜:$+üÆH +œ» >ø¬­Àò`t}‡ır +€Ê +¥|CRŸ«2ß‹ B®. ­ìúŸjþéƒ=æž¶7ÇyKQl€X +“ •Œy€lÿÐðøºè€;Ÿ\°ð‡ý=íÛð1ûþqНж½ØÿïV 2¶ˆÿ® +z)Àòm¼ÖVô±§2$€ÝÝ_ï®­C'ऋœ)ˆ PÿOaôÞ$Ý mdöååÓþ_¼CäC,"”䀹Ñü´ÈƒSkXN +;ˆþBí@H whpŒŽ‰–„ÿoŸøXÀOÅÄŽ +º;.ðxggmgW¥^^rý"ÊeemíñêêЭÿý·k»D¬ˆ:¬Œ]—÷NÕˆ|w0ÿ, ._ž—-€…`¢TðÓM€µ + ß§bZR6á€Ýæ’¥?éÎsÅûGÚXzŠ„8úþߨÆÎà%?:àˆï «'@®ô²F'}@z¿×Þ=!ù£dÆ-ôáo~ÐßâEzm¸«,Â}e¤ƒXÐð‚|dK +ê6^HyCÐBtE 0¹kŽUz,‚Üw6·À*#nPÛö/&ð.¾¼7H{Öß*ú³Ãý7Ø ÿ5êܦ•éÞÑÐM¡àVkŒº;[®ÈN'†ÄUOßèòj}®B“>íðqÙB5¡ï^ú^…˜­^˜™]pA’ÙKÿÏS¯‹xˆ=á´¦êa)2‘èö¨21&®£JHÂh€2Ó•×_‹ +@­6{óÒÀ¹‹å)1€ÚBðÿgã}R\§iµ&’Ö/ F.Ä š9‘-ˆ +MBeÁÅ2¤ z8ïTZu+™¹ZÄ—°Õ’*1‚9«ü€A¹ÂôÏtÚÙïVÖïök(ÄtZ:àhOvès +ÀÞÃû_uQôm;àVB@`hX%É›…2¼[ñüÈ1.¾¾.è×E|êª~_?";¿üÂäæöÖäÕ³$çL»ö_´"0¥|@#Àý/¿úê«}ªA¶Ä¬è]±>ÎX"÷no `Fx@|U¼”eqÿù^d+ÔP€*í…s +a•ÃñlÀ•Û\=*ÀÎî®°s ðxui @I® êp—…”ÉS¡Q€Ë4¡¤’°¼ä¦øÍà¥6ü&!ROî¹üöëËBJ(ê¸>€ZЕ` HòèìÑtazû¿%×}éñã_S¦µÇ·wרžXUÙ½5´º»¶JC€Ç¿Þý-:¿’¯.¯Š¬Éó_a¿@@äÕ‹-ýTùÿÔ—EpÜ @þ•ÿ6þswzíê‘òX—ÆT ++*,¥×ªr,øaÞ‚®P cám‡Žt5ëÿÅ´°ºë'ý\~a?¤Êõ¾¬!Tô³Ð +Àaqæo{]6êð>øýQ•à¶hAHê93}Ã'^åù¦ìˆÐÝB,D µLG¨Ÿ3Þ*y£2-Öé ˜àÅNà¿„Ðþü3–¶˜ú…_ŸL`g'îüá,Öù÷Út™(·'EÜ^GíeµØ¶ÖÜth€snXDŠ‚¹Ú)T ¡qíÊ‚#ªA/X¥¨Õ9j8m‚×JHî³33å fkr¹åÎÏ^zí•W.MMe@ÞöaW€,à…}šg©Z`<à2# 9àÒ”ð…™bñâ¹Kh³µšàúw=ѹ¢#žÓúÈ/ž6]ÿ}¨½z(íG '2YŽ/IECé¯ôXªt/öšØ4+´Ÿl?‘šŠÐ~ µš.㵎ø‘b €c©þã¼`W^³£AÔ t‚ºzÀÿÀ +€ Õ +ÀC.êë°‘ŽÚƒ#1÷ˆtýT‚©ÌŒC`³óßV¸ø6¾>_™ü~VY|ºý`/(›ÛŸL^=ç1WtвÿƒSþݶïË}ݸöÇ€eðß­þ°¿÷P…X· É1ƒúÆWEÛ@ž‰!îÀ1î˜ÁÆfà4Y¡ÈaÅW:S½ûÿA@_»%oEž5€@?þlÞ=–iÃøïဇ._6!,^ÿ/‚ð‚@•<Ø’Ê ­@"X[ñ ?îÝ_s}\vÒ!ÉCX„ýô:€¡»~}é§c·ïþz }â#ÍèõGžýÎw»|ûñ¯Mýig °¼3Xº_*ø'ÿH—¡gß±ŸþTç]1üúU‰øwÿNÔ¦0¤¹«B(îŠñßu*6;ý»Ÿgþwwvø³ˆðÇ}57J}àÐGìc =þã:/oÇál€y`;ÛÌ1Ï£2ÀM?}üЄÛgÏ 4è&“oÇ‹5Š“ÉŽÿàÙ0òP€{‚ êÈÝò +÷Û¦wŒçš'ÿUÀÀpoŸ?À¶Ô7SdüçÆÚ·¾V€bf&;cñÈeˆz­›£j¥Âk܇sÓí :í*^¼)G¾ÉL‡DÚ`‡‘Ý +ƒv‚Õéj‹¡ ~`FQã¿üp¹ÏÎß,Ë—ÿp±V›ºtþ•ó—Šw«”«ùæ÷²ÐÜ¢œø@5)_swæ*.U¯]*» ÕòÔÅs7á³tPnשð@²083òP•áÝ”‘b#82HëMzRþ–"ÈBTœ-ßœ*² ‚ˆ$Iyâ÷$hc {D±r~«õ÷]Spÿ£ ܜ촳ßV‚Fà_@/û÷À¯Œ(¼(T­Ü×N׳ ØØëUÒ0Ùñ%©g8íDíõ1Á¿µþJòÀkT¨œÐ½Oï ˆlN^ ý¥…ÓÛ1.©)Àƒýû_~õ‡/ÿ béùì=|¸E?z]@hÿðÁƒm† +üç,¾*rfÔy.p€»¼Y¹8€³ +PÀ¯5.q8˜ }Ç;*€À?/´!K?wúÌU&CbP ˜c`Oú/Èÿ ÀeM9·Dî;ŸAFÏéÈW+ÁǷïòúE4ð£éòÇa†\Y_Ÿ«/ÓaŒ}J_«>8t]'覗VW>[ +5ëáÃuŒÌx•ziõîÎÊêÍø–A^=×Þ“ñ²ÎÕ +·è(>‘PîËthÀý€ñm!ÊqHéõL+ô u æÖBÎÜ×qðÿë5­íìx_d@V×OøÑ À›ìØ€Lɾ‹s*ý¶gqëãŠ?"På/lv-½z¦‚ßÖúä('Q[Ð9y4^äxó­“%RÂzÔ–ž‰wÒ¢ŸN—ï¶;wüû]OÙ&ÄÈþbŒèðùtÖ˜u)¡õ’@Š»³O?Cû\™÷CõŸNâpý/-^³ÇâÁh&»c?° +ð~½ßTŸ.ðÞ9h´k~5xT{@~ Îõݱ]Û”àZtÐ“Ð¯Ž naFs T i•*´â_Xd8ÿÔ˜*ðå<#¸\òâùâÔLÊúZYà5€›¢Î_I’¬ + šá·¢ê£U“Ê5ñqïž*^;þÒÔ 7V¹yé⹟ӻ@`¶Q#!Ü-+àr2ÿ¦J4­èApY=ùzä˜HY„FŒxÈŠ[Á*Õd:«*hWÐñ…µçÝ™þÄÿšð¯4˜)4ü½;*ÁóÿøyA kÿž”_{<0•v€Ý +@À9©¯pÿ‹ëÃ*Þøé:µÎý¬CèúÇ`÷äïs1»ývç© °û¯i¯­l[`Ð5þ“\,XE +(Âÿý/¿üêKe¼½EüàÖ¨À2ø/°õðË}¥"’@ÜàAÎâ«¢m'RFVVhП^úr `Œ0aÈí:.'^L ¾Á?'¶?ÖÏ\6¬]¤^ÜUãá5R(#‹‚ñêüëUã7it]Œ°½€kBo€C * ÿ1.ÀÊGlÊt :  Úî{@LA‡¨ µÖ”¡€|•îÛy¼¬”vǹ’›Èb4âêꪮ®É¸ÛIðµtØÊB$-º F„x‡²Ó~ãŠ(T‚UÅ•–Í’(ۘΠÅÖ´°÷ùF@õ—ø0cÑOˆ+!aÖ€S¾›‘?pÓ¶¿3½m_˜)ÇÞ% 6Ð ,À•ú]Êš„,øé¡° vl@¤<,tO:G7|†.œ9€O;À+ƒ´í(Ýü`›wüqO€[4¼:èËÿp€Ÿ¿'³~zþ„Õ£ +Àå ðï듨ãÑÿ𙳧—Ã9¤ÔoBÿ¿âÇúUt€Ìâű¸§cQع»»“ü¶Øè3¥¿+͹›;@‰¯á.gi¥ãxËá52A¶—&ãä­éz™ÖùaÄ›6d&I$]¤Å¾v¥`>øj€áÀã?¿pAÈLAøü+ç_¿X¼Tá0…gÕ'á ]°äj¡üãZ’)-­Î_,ÎTki£Z8§.ô×an:!¢Ðë+N«#õ&= dD3d–¤o%)Ž9×አ›¨TIu¢Nœ‚,ž³©R˜¤õ‰ôw]Sçð×|Ô S”=G8†–é ÀnwPµ°¯Ëÿ»&}îö‹P>¶+[7ìQÌ "Øø…ÿÿÛ{˜EËb6EÜcZ2-¾`eÃ1©ðÿÁþþðÕWº7f|ø€òý ]ß9xQ}qï7¿yÀôùÞoöâ«"gFçR£‹½sky +Ÿé§0ý|=@H5Lzíˆ è"‚ ¼µŸKÿ»zkIÃëÇr]ÎqPdᵊ +$ +3@ŽÀ˜w MÿAr6šù›YNÈú ׬'@pñ»LÇ›`[î{~Ò¶ [;¡êþe^ÿQ¸zå £Š0Øù—ÏïÓÂìy +Ðï/-(ýõk5JŠîô ä@d z(Ç)‘ܹ£·„ØÇûÉUüWŒãàϯ1ëQ膚ߦùkø‘Š‹\îVäÙËÿÃÇØQø7¸+pWLûñÒR,ç÷6ºú?:}S©<æ£Mw;á¡!Ñþv’NOw8!•ú¢ö\ýL‡Ò‘ +£Þ„íJù=¼Æ8ú¢Ê7­ÔM3Rå!'ßWÊ3ta@ êӪ勮¸ÈÅ”û;DÕ=ëUt™ÎÈeiÔw-–ƒ^‹‹Å‹çÏŸ¿Tm¤­FR›¸@Ë3\’»å®ƒäAñ¸Õ¿Ÿ¨6Á|±…K„x~=‘‘NH (‘Í‹)ØÊ;¡5"ÌI`^e¢,új—îš>†¹}]i"¶ÃÌì?ü—u€NCÀ.À®|^èÐ û÷@~òËËÂH3€ý/î?`è 0Û¦[Ê:­îd °±®Ã±J!â¼²³b϶{°ÿ@WòB³¶ÀœéÁö¦Ü÷«A°ûßQ\K+ßBoCáúçöC€¯tCÔÈݽå€ý½=Ñq…½‡:Ã]<Ü;BN¢_°ŒD`ð±ûÐ'M‡—Ü ª9À¤@°)€6N-»ê<¨†2½Iä\èM LÛgN þ/‹è5#K—~Šz0$—ÛPk9ä«ë«t÷# ¦Çšö¹xÌ4_[éX&ôÀÀ +PÙT±¥´O/0|ðˆâÔP¨ðˆ.õÝ öç@ÓÖ8·#PBöà§Ìˆ™àý©Âih!Þõ‡àîô4Èk ñ_Å\¥‰ƒJæ{ÐRæµ#ðß¶]°÷…fˆ2ª¿ÄG_¯„Žzò 1‚>_Âÿ¿ße’Eí1 —>ýr“ÐY@¾¼Q•žÿ4ãô„âƒ9íê(ÁŠWìÿ“‰(JYË«“Çé<-Ù –J¢Ìt‡AxC…uyµ¢çˆ‰µ»ýG + ×ˆÀÆææä0€‚;‰ ÿr/oÀ¼Þ¿8>Þ3}{€P`à5ªÜ‡*ý.¦Š”¼ž«<ϲ*€»ÿÛò.5t±¨ßÓÒþV©àï +‰™Þ-З>UJ@wØ)($Ó q{VÈÖª 鄿õ.ˆâU²£þ(§WR;Ûº”P‡l +0U\¼00sÓN¹ÀÀùó¯ c{'j•”§CâYÈ3„¶¥×¢èŸG€îó¯gåP)^,_ÀOŸá^ ðß·­ûwõ¼ ½–N$8àMÍi§À£¨%^$é[Õ|£ßm >¡lCQeµÚ“úD ïŸîŠIRVfI#m†Æz¥gßþ×ÿöß:ŸzV(\-\% ðjˆ @ !@лþ(Gë„©ÛV„±½=˜è<Ðz3 Çç[ôSôãTQh +b”0¹رPùo¬—áö-!ÀžúöÞ+ã(od +€@[¸ê—(À¾OàW_Q¶-er?(ëë±Àƒ?¸ +àá¾;Àöüæ;Åa‚@=€Ídkûÿ¬t:Õ*@»k “yçÖÂqºüÑæNaðºgÒï#½Xzʦ§Þ3(¼›ýúê=#ü”#Ž»”}e*´¦ :–Çv¸Ýþ"ŸsY%öR[«ãCCËkk+ãZa>%Ók«À¬h…AÀ|ƒ^!ã*òí——ÖÄYÈEëðŸ`K·Æhý¨L´G*ZꘖB7 ‹w]yC?:ŸEŽL° ¨ï7üòþcÛD~­HÃoÄŽÿè ´ˆÀýtÙ™|€W7ô¢3pèL˜d8àç( +Aî¥-ƒú6ðçטõ*í*ýûò#<bDƒÿY¿Ë“)ý,«ØÙ]}þÛci¿—Ũÿ^dÒc-.9‡_nx e­¹Š—ÂAíÿå>·šŽåÓ×GêIÔº‰ 1Ýø/° Ô¬¤Er+hÐ'ŽD¶AO@ÕŸ8ŠÞû¦.A.ojWÄÔ÷ë¥÷ ÖÊÃ÷Åž5•ü¦ìÚ®-Ö§¯%ˆ˜^UÜ…âÀ+¯ÝC_²P¾Y¸P›š¡w²öý­o9ëŸ <€äp¢Å‚‚ø/7ö%ï'ŒHØ&ï9ñé¢PüÔ'ÓnX©Öá =•Ežˆ á8,Å?@Û< þT,€ xÁ-’{Pîß¹{Tp€þÝpoOm ÀØ$€L8& ô¤o[¸ðÿsbõ{ý Âÿ¦cöÃéÁùg2Ëàk@3æ|ÍL >­&'(z‰À^¢ÃÃöÒð+Jµ½·õðážñ@9Œo úéhßðÃØc_9ëq;ûš1&3S€cTûÿ¡a`GÀWÕaá¦~Ä‘˜À bã T`‰vüƒCtØS?Î{hPïèXŒÌxwbxá=ãW«Cø±¥5ð[À=Foþ««ò÷WWvÆ¢¯UùÐ+«·ÆÅ¸¬vî¬ììÜ* )ÝÎ*(ë"ë+ ãVY!<y@·' ÌšÈauel˜ µ®7>÷«,ùæåiÎn–?ÕÝ£\$\¥ÁÓgEiŽþ%Ns× ƒT*§ãyPÐû¾Ç3á¹ûô°¼íâ[жñ^ …ñÞuüÎS¹bWôèÝŽŸŸ'û¯ê†ÐSé;Ñ} c‡F¹€P¬hz +0€(^@ø+·?§OGüÀú亠г=q9ã„Uÿ¯¶E¼;‘â@¾þݘûÓÞÇÿ` «`íLˆèQð¾¯p÷îo—ÿ7ýÒnÅ‹íþ{-yÔJ“¦|Óôð|fà4m¤­Öá³4™/UUÓ„ÑýhÕ†¶/¾Ðú§V# ¨…ñ~“ê£ò[¥¯Êä°õí³§:¹Ñh=;h6ÿìwŸ¥õ¯AÍ$=l>i¦ÏþéÙ·~v8d·²LGÊ‚ìNòaR<~`J•W8h-Ö+suA¿ +Rÿr¤×áG:røìOæÓ¦NWy(HZº6í® ßo¥‡-e05ðúEÆ |Ö¢‚rñ'‰H…ÊÎn´þüç?ûôŸšÊñwŒüÛÔ?+)Ÿ†.Ûh=U†u]ãYk±ÉhÂ-ÆKž›xH«*wl;h5º +rH~Ii¢ž™¶ž=ûöIëYºØO§ëˆ²Õ¾éébéçç.\Qæ²#çO:þ‘¢+µ +8Q3+%™(©Œì/ãîÏ…h»*)殽[*½õÖ[¾)9ü΋L”+óJ¦ŒþrD>y¹tC“®]*«4TÔSŽ„,æ“7çæÂÑœ éæ²'¢‘7ã g…áØ`$4€\xA¦dZ¾Á"þgAÃC lßž”À8 +o[ø"0€øc`¿Y@¯ðp¯ ì'G² +™É¨è(›Ñýå)K;ÿ&T0 ÚxèøÍõú¤@P¨\Ô›ëêÊ¥ìÞ +À$ +€Ä&ƒq‘½‡:´·÷¹9€gáeѱ^Ù¹Ÿ3]f +ÐOàgnÀD $ÎÌ „˜±wÀ Ðﯰ ǰ\]£ó~ÞÿóB§XŒ`~sBxÓ@ìŸ^T,{ȆíuæòÂñ” ÃgdJbžv® ™ˆÀêòØõ啱]Aµ÷Évvé7Àý ѱ@{´SëöéI¶³³¬—ÝÒ­[zIiOÖÈ«cÊv|uihiõ¶h ýü)°O©YÐ +à´\Q±°ž¿ ½l¹Àº‚H‰JM4£‰‹¬þ û™Á…ôú Oì¹óï¤èão{­Kp–!ú?àhoþ;|5Ð?¨þîéìç£ íœÔÂ1òî í>*"@žÚP‘ô&?›ý–ôáTgÅ÷,¿¼~“HZáw©[õ´n8˜ƒÍ­lç^H6xƒè½ZÄ*•ä¤ +@žœ˜â5á™ûã0Ó÷¸ó%×£ˆ1±Ôà‡‰@p €~[¼¾g,@¬óï59±±¹8%»– +«I«U[u:(ÈÒU&J¡J›Qp„Î%¡'@\š+ýâŒåúN¤æu„'9˪õkæ¾쀺q‡ãÍÿ×b‘ðy]°8 ø¿p®:RÔ¡4u HÌB9Íq…d¢®”U®€W¦ËUx ®/£›þâÈÅ çÿ—¿TéÝ"ýºü¯:R­ë>Án·Y0îW*< +žeÃhNÈÅ]ì´¥#<‘°×ÿ{¿Ñ7Èᑳ¡¿ÌèÝk¦ÇÄÄ yHœYL‘õ  ÙØ2ŠÀXá^ùò*át®?ˆ­Ž‹¥È,þÎ\v€Þ5zÁ+'p¼¥< + køºäêjh/¿æ•]¹óÁß§0‚-tPo‚ñëÔ„êuí5Ø¡Î@lÁÝ +(¥5wã;¦0îR‹¬ñ‚»å~ù¡8KKZ_^Ú¡¾Aè]¦hQ0 ë¥hÓ‹”ªPà(€Þ?Æi€¡3gè +™W"%o«*ÌŽÿ8ï_%üóê[’[~ú ¢üsæ(ØÆÚ—úÄYØêŠˆ+Y2üîïªø +ƒÊãÈÔ‰ºßÖo‡^}Àp\yŽÄø2äúPȘÿþ—倬€Ð1®þk©ºbõå¿:ù8 ®ºc@q#¹]yÃæ(}üMŠ+›!#·@ ƒgO“…Ïs^ÖâÆ¨|Gª”+>³s +ƒ]çB"Up+ÊA[þê_¹{ +°ß± ·A + +ÀÒ c~'pÀ¯,NÌÂ?$ŸÎ³“¶ÐL¿É¬€~É?P @GЯ\`eè»”õýÓ3y ( +òW®–È »‹n¹ÏÞÙjñÆû³r–cÔ|]Ù{Æ;YRÛHžV”±÷É”ŒFï§ÉïÀïEo f|^›’ * Õ(ÿä‚[p*˜ê<)YjåÙD…X=•$ì&… =>d¬Óp ¹@/„ô[ ø§ ruƃñO,¿Êºþ10#rÆ„–HdÒ.äÕê +ÄV’kÕ™šOÄÙhÍÙR¿À5XèPõïUäøDúR€jUàO€ügÉPÌî¹Ý?N?4 â~N ±ÿц_hƒ¸íþì - ê}IÄ5²)/iýÿu€R ?óøÎÖ—²SÈTØŽÀ=â{g‘Õäç±z¤# ÜÿœÀ$§h +퇟nN›¬ËÿÕÞLØ#PAfù¿¯¾>ýe»»½˜)À1*Ÿn@.4>²ur(€\l¹ÞšÉuö|mlwWiÇBO8¢m<óË! Ð/%`thH„qlͱàä² yIž9}ô3N?<`Gn< ¾26nü\K—×Ön Íw¨X_¾u}mE”€ ZƒF ´]£‡ßëÄÿ Ko߆F(k`^·á»Uv*3¤ä×)Äje•a|–W‚¿4¶Ý msÑ +8ÿÿYñ£q§zT©ê‰@lt\E%RéDbôz ð¡ô ÿ4ŒpÔ¥þÌYœýcçZ¢hŸ{©0ÿqK¦;h+v‰­@ZM\ñæ¿Ã÷X0,´N;.»Öz øñáÝP@@;íõ[PA4± `8ƒÿ£Æµ ?|iÈ€Vt—ÃŽàv)odnÈs ½!mäS€ýŽÑ +ü +À¨wÂd¾#x1à'fžû“ícçIZ„q9õÏôC÷p÷îooe1·–¢ ðø»µ +\ìo_ E#¨ ¶çMÞ_ˆ¨Ž,2< Ö ôÚá™gZ­¼g4XêMôÓÊ×nDPž½ f x^ ÿgg ÿ ŒÛ/pîçЩ°ÝûPÜSYÿsižH}퀽#¨PEÏŠØŠÎ/Þ¼t±À;¦f³å$ÑýÎ΀æ*Ê ZÁ}CpDܪ 2€p„ãÑÛñHÕ}é6ØË-‡¢ÌWÞƒX²øÅ/(bJœÏ‘¶í×e®(\˱N@ˆˆ +@ì×c#&ó¿êÿY=‘á<ê;¸¤3ôÆäõ¬ÿ>ý§É¥|S<Ó ¢lò3Úg®?“¶²zîy;€f€ù:€~ +ÀöÖ§¼+>ùT˜ätêÔä:ãPа÷à>=ü÷޾1/2*š ßG-0€£*À +øj=?l›SSPv€f€•Àzõ–|FÀÑk%Àb,Df§óÀP à$y;:Gªæï¤ð³7X^ù8¤ŽÖK`ûÊš#ãp›EÓßDÈìžò¦7§¹Œ?²¿‘\¿½4$'H%u ÆÉÊïˆâBæëò$pó…œÂñÕÛc;w•Xع¤rêÀ˜+d;åµ& \á·×¬_¸êR«øKD Š gj ¹càºAδ䬪´üÅÒë"–pÿÅ{Ì,PþO t¸,°³Fó1 ×V ÿw¼í5ü+µ»E@~Py—Ξ¥’ÿÌ«róqÒúÌOÝ?ˆE ß@€Xk/´Ÿì@?3ðG·ß*€·B[ÀÐ +àêäÃ>~Õ +yñ+¢€ P޵õõ»àÓ©Þºë†õlϹVóõ7LPØæ (˰ +c@+šn…ƒ™ù¸Ð +W}TÅñä®îè—/|5c:æÇü_TBF½d`nÊuhO[ÞÿÊÊ.€¤¿*ø±`œÞ±ß~Œ$0†ï¢–ön@ÿXai…¿6HUØ•¿+q{—‘„ô:KçáÖ +´sewmgIüE×±¡ÍS­¬-Aôîü•¥¸Ãm%5ù_Ooʱë"–;tcñ;Ö&ú—Ô3B Ô¢4®Ø 3€Ìû‡dð½ˆ&ïLïgþ•ä¦õ Àx°?„¡túi1³VïË~5?Öìð¿9€?!¢OûhÜ7ÇD '¢Fصïc&ž ÖüÑö'ÓbP„b¾+øÁf +€Éµ€~—M¶›³É8€€+¡ +pbीÁ»=1óܟγ·p?=­ô›üþ1w»Z´~ìñ^Nhð{  ÐQpw3¸{ž¡Ý{ýã¿a±ða„¿œÀ"( e€v XiÅóVÆJ¡‚ýç’ÐôIê=¡˜ÎÐUQÐJ@€€Ù¤z#(1§§eÝ1ÜFŸ=_Ð~wÏ›™`úþöæøðàðäæÞ§‘Àx "ú½‚CE æ[Ÿ|²½ÍËb{àJ¦„7ŒÞ¾è¯¾zÿþ}àŸÜC €çÍ Óó^ê5Tæï¦èИF9Cô—Ÿk»kkÂ\×§¯,­ÑÔW?l#àhÉt›î@¯þðúû飿ØøÑÐ`Á?PÀyõ:ùòΘ }µ°¶º* \Z2¯í¬¦«·…ý;W—o‹\ ðY+îÂO¿²*z°³òX¸‚ñé)èÚÎ. í +vÇ8¬#s*¦r¨Ç—VÄhV– ËrÝ©—à‘ð\ø×Ó¿  €øŒ@¼Çœ POë¹Áå%\ú*"_•zW”™4 þ¯w¼ÿ€ÿ+Ëà¼Øä}´zt®éHˆúw´¶ ÿ[¡¾¼ä|á°/³ä{œèAû&2ÍE ˜³­™ Ÿ +3€xsåÈ1&tïÀ|ö{æ²ý,CÌC–½}þ@ôDLà?µöב;9›¤Ãñ­O6ˆ¸rv¨0€—¨8JžÃŒøí‰™çþx#Ìô=A+€Ø@W+~øßKc¬¶cò +Àò­±±þ±—j¿Çw¿J3`ñ»(­wy@'Rãm6ÐGàRØQ€ÌÊ7 <ÇHÀúÊ6*OKó)ü…22eˆJ À± +€C¦Ê0I&€wW¸((ÊæÃ¿í¯è¡„:€p„ÔAXp Œ(@aPïU|èE  Mˆ~Ò[ÞØcð_[?ýi &¢üÚø_|©qTª”:SÄ.3 TtÇÈìÀo/µŸ­Í½­íÏö¶¶ö¶Ý÷ý ð0Ÿ™öù`Û´ëá6 +À`ar €~\ À&„ýzÇ€ÿÛŸlB—E››Ÿ>øt«G8}J§q~8ýl¼DÀ/‰—µÝhö" +À2lî6þLn 7@7<ÁáW–o?~,ïœ5!ìG<ëµåúëG`n ?÷°þB=ÀOÿCCcà H«+ Pï΀–våæï®ì¬ -i ðX¨¯5¸‚ô±êµå¡Õ9T!è„Í—wõ_·z{yWïA¿«ö¡*Ê—R¯d´fGåÕ΢ +YÜÕÍ€É9(­„áf|y3º–´pýÌé vô'´ôý-ï,/=v@‚J½6&ÏwiU”&˜}~{ÿ¼,;Þ?‚ €WÑù!=sýçýYü@–°ÜîJ«€äD°òK}Â?‹@~\“iUÈ©y¨p¼@&O¿íòwOY@{áß{2S.ÿ’À² €¶n‡*ãÿ÷Q®Ëë +@ðÓË~5p¤€^ÑzI˘³®e\„¬ ÿqñ}Ïùt™ws83ÂloŒ_]ßzð0(€ß/‘ð~¹ú†€ñÿÓL  +ÀeÐ[%¼dN¿új‡A0–`œŽ¾F|Ò àw[³R€¾*@¦ná‡Ô1ðœ&–=V˜Ë%JA/+ý‘÷ uþ¸.Ð÷»Eôami(bº‚^«ËKk« °:&/Ÿ·‰Œþ—ëžtí[Ë+ã D[Á¥!a«rZ–½²º¶öxLp»»ëøåÏNðªâÐjtÙÛ·•Fÿ®rÉWVn­*9ý +ÝEˆ¸µ¶|K¼cL3nQ¸LQUÞUªô©!Õ¦€ý'ýûÄ{ÌV4ˆ‡Ü~þ*ÈšnnGÔdylíÖ-ÿl)zÿZ#yÀŠ»²bÀb¿ƒòs¼;üÿfÀR€P<¹i€¾Æsïaæõ-½ˆÿþGLˆŽ¯Ÿ a-€þI;u¿§œ þMSŽNòÙm9¨ïoÊ%Üo„ÿø° ÿ!™ÐýŽŽÛ&é¢< 0|åÌ`ùÿºÅÁïAŽaáe €‡‰™çþ´÷ñ*í¯ô @d2(øÁbÄ¿!µýbôCºî ƒxS/0D·ˆú9cTž_5~E?øß¥ä[’bØ“€•,Õ=¥ï׳|H­´%”vP]Í}²AûÅQÑWæ­- Ž„……þj ”jçç"MmäìÁ•/ªÄ/Wˆ "*±DÇü‘®ßÏëÙ¨¯8A¡@ãŸF?q|5žkmpzÂr웎vl±øU¤ÛÀµ€ê%keÜ#[—"ŽÒ’äœúç;‹«Lh„k_rˆöOëöh«ýÿgè§´…WüzåÂíÞöA…ÚNZþ½Û«WÝ:AüÏc à×9báÿÚÑÍO‘˜~øßþ‰²Á•o"zržéþ&u( êŸý½ÛÔ¡ÉGÄRq@ @Q ÙÕ3IEøºà›×%ÐUVïæ—£ººèŸö¾Éðl €g‡'(8ŸŸ»ì³í\î¾þ@æù.@÷sj@7= ~9»uàÅ®_]ì[Ò¤wþ5Ü~¼½û¢§¨9G,{Dÿüõ#ϱ(þo·ÄÐŒA¤-¥"ç¬^pk׫±€¿“ ­gß:J7ã òîÖøz¾|?CŒCv@/G¶ 5Tîe æì'£ B€x+UoÄ™óå¿:  ,“¸yñ÷óÂtr´÷Àã)‘RT8¥…Ži¢åLCÆöÏOž˜ `ÉUìÍäAy³xõ§dÕíÓ‚‘@«Öz/‘ŒØ÷ +üçÐÀ<Ðî¡9¾xlêÿ—,_x/ÃJÌI‘°B7R°Ž@ÛýÃß›Ãuо@*”÷¤{H ûõÖà* < W÷÷Kõo‡²@Woœ Àù €gJv”Õs¶Ÿ»ì³å¤vüŸñ@›ð‡ @ ÀÿâãÖX&e¡ò‘!]ôWE€ÀP£A‘ZþúŸÿçÿW`MtÛ_ ìíuåå"~i€„ôØ`&m?±¿o‹Û·ÊýuˆúÅ9Í@Nûo¤±P¢',6–rÅÝnÀã·dfo­TÁÖº@Û}õ'«ùÿ‚ö$±ïgóõÈ…„ÇË Ì§£¾#¸Vš¦ìVî'ëåj:œÍ6k‡4Ö#ã¬b  ë +¹¼Dž#÷âÕ+¿{,ÀˬCA]?\‡Îx¬ýw@×4=ð¯ÃÖ!H©ÃÆÙ¿cÏîô;0´\ÔoX®A ®ÐûøN¸x¹{‚‚ÿ_´óÒ-¯ý²¯i|‹`ŸH„Úk‚:Ï*š ÇÀ-õkn‡ð7ÂýÁàÕðMoßpdöΨ¡þ>5ÜRúÉê9ÛÏ]öÙrRÞ8žñ@æpçkVúÃæ´•§®8ØŸààÚ°,ݳۊw„¢ü‡Ê +Ðo‹ÅðŸþçÿggØ{ À!€çY\wû€ÇsÀ¼¯Yê¦Âús¡2ùÑñ§OÒ7>îüüió±¢]4Tç`ܹœZ6ô¥ôe)ú ßÖøovo4îÁç/Îøÿ‡¨+†Þ­ðï J1¼´gpÀ£·"ø#ýˆ# ÉN5\£’—ce?ç¹á1ê÷§¨8Ï€Àp>Ÿ¢øÃçÒ—ïÉdL{t@t{rõg£UDÖ³¼–‡@Îßæ+¤šåf6ÞLÖH %ƒ8s!§{Z mNôä¨Äó—ËP!9@®# ÕPé.8¨ýôg·@Åw4”~œåŽŸ¶DÈjÈiÊߺ/g€¿Ð< +uÓîõh¾±ô?>&XNÀýŠù$þo-±Å’ó ê&Ô@À²ÜÄ:ÀÕ½¿û/[öÈ”b(о9 Ϥ§™€Sà¯Ð,4 @¶;ü¿x·>x5Ôß§ƒêÙaçST?wÙgÛ¹Ü}Û[´Úß;àÁ: +߈ W©•ð! ûòdO‘¹ø@&<¶D9–wû€šà$¾» 'ô•9ÛŸ@zúX +½}ªGƒ¹îTœÝæx+¤³ò$—3òת·]ã~¨×?·†è4¼Ò°?ø?=˜Ѐ88macP6ÀÝYj€dš.±gøoµXB¢Ä°`€ÿ«5rÿUþX2`ûÀ1 ­¸³ðÌuöz¿vþê•#ÿªö{› k÷w ÿ"a: ÀÍí§n! -®8B'¡‹ þüù`À£·”öÆükxØ U„¯ô.ébæW¬ ò¿hH»]Ÿ/}+UÝ÷L’» ¼ç«)· ÿ~‡`WSn7ÍÀfosºdŠò0_߇çè=ØÓ¢ ôÂ(D°sçæÅÇ*žê@Ì€ŸèÒH θôÍÂ¥³äYÈõ€®—.:ÔŸ¨°hp˜L棥ÉÏWÃátJ:³õôr4Z!H’ê0mÔõ ¡¸¿° €ôŠÖ,Wb¼ tÔOÂu¸õ‡Új¿IN÷³Ážü‰Í7E|ÝNpGCñº­¨¿cïŽëp•#V6Ü&¹ +«lñ’,Â3À +þG()  ÿ’œÉ¸L/ÛVž~]“ks-íýÙŸ?Û Ø7@ðà€;*?uBÕ~ÁàÖQ–Ì˽WÃ7§=?fXøÿ¢9RCý}j@XTýdõœíç.ûlŸžOXÞ@ ÷y<| €‡ï˜ÐVüê€-µBî“z¯Ð/hª[ y àÈ`‹«âY®<²j^a¤ }e¾_²(Ë_ü|îí˜èÅp5 & S¬:®P€øî,ÞÈSo#×SôÔÀù¿ÿoœpü-€'×xô-€àÈ·,Þ ç8ýoßP@½°gpÀ÷)J E”ñùsž°P{±PÏ›°íòâYç'Ày†õïtÔÿq±Ëà?úÞ(ð'¤“în¯>ÜÝê†2pK±f¾=wÀ~8+å[ïz»ÞÅ^'‘!çx§‹jÿ§^ø2u.Â|Å +p x¬Sa+Tß ‚} }‹Mu9†rà”tyäçôwAîøTUïH@nuž~{—ºµçýá¹½Ùð5EÏ,7T?\ñENÈ‘ÞÅû.ë¢!áoØbUöœ­çË,´^¥ÉŽè’'—¼m[fÆæâjÀÿ)øÿ³ @pêÊÈQ©Qø‚[­1iìkÿÁ}¶:â Øs÷ÅþÚøk$Â7;§T›þÝûrjWÏÅñÚÒ€;·Š=$ìž{¬@Û˜Áÿ=Å}G[üïì;) s€ÇçoIŠ`—R€_dîÊó%ŠQ¥³(ìÿ:ÄW L­ +pHb~þíç[d@@xwqþÒç¶þ5(”Z;´ùmî²Ï¶s¹ûú[eø+| àÁJ€ßÐpv(< +õüsÝC­£{°—58½þ`0ADº Wñá²»òcžBC 7AïÂ(«£`—BÀWæ±ÍÐæè»µ„y’­áˆìaÌ5¹K?êåÇO¾d(êÛ:Žãµ «,OϰB,©‘ãøÿ Àû*´e xß¶q‘c; ÀvÀÙþ[ +ßbàp÷K†ö¹ÿôËGÜ¿Üòù ö…ü¿üäóÏi¶O7œø#¢ÁnÀë^7@OewFgv÷ñîÖ +EWø‡Ÿ?Þ¼ëŒå; âG„èàÿÈBû±ž¤`x ]Øù½V€ÖrûnMÕï÷çóy$ Õïçhå~ ¥’£ü“bRÍ3ê£]ÏÃä $¢çG(Å˽ ?\ju€¿È ‚iéÒãÅl>ì 'ðâàjº~;*\Ï–Duf5±ž-Ö›ÕhµÐ"Øg— Ä`ƒûÐ~ˆ\bëαE‰ ˆñ”2µâ= W´MËbâcg’…Ó]”~å:Ë(ÙIvÚC~ë¾|óÆ +ㆂNš€3[nZ±¼|ë¾9i°m@@0ÐD‚r£ì ½Âýá9'¶ôÃí)Úç¨)Ž<1"~@½ +8C`rÏWÍ·rÜÿËL*è(¥Ö²÷ Ý‘’.É;?~iª üšðÑýÚ È97ùÆ×ÕðÍÉžÀ÷*_F ô¨!ÔúÉê9ÛÏ]öÙrRÞ8žñ@Úðƒ·ò ü~ À¤›p`hëh ¿t½O­¤Eà½üW?¶tópØ›øîwu yÿ›Ñ) +á”ï{€ê\¬ä™±ßŒ5DlöÌ9µÀá·L“ÔÛ_YD~¡o{ÎX¤&àã¹,@OZP“¹p @»·öVÔð{bÀv»°Ô™ý˜Ý"µ–{æƒ\ 'Ýú¿ŽÖ“ÑÜ>WS+4~z@þ; €…ùÊ[É0döÏœ Ë_´P{Ï€{ëYŽW'Ÿ‚õ¿Üg¿Û'×äUûW*îãú|÷ËÝçO pÇvwuq>¼øpûùîÇÎ`×a·Rz÷.·ŸÓUÜ}üçÏ7oö-¯¾KdÈø&á,$ÿß6@@S$Í/[¢ù—òX§i#š®M! †J÷Ùô=~h6^/76hÐ +©cµæÜp¨G[$iÿ٣ϗ`êû©â3Mpìky³ "6@±'ÆÇH\:Uo²&eEƒÒ©ñW&µµ#KË4"ãˆÂ-—TÈjCò`óxñ÷~ãW•V|õÄ?¯†å_q ë³h«¾Dýô€9Û Ç˘$èVU­2-5ô/N½ðwë|[KxŠòE`[î稜ȟ: €@éñžì»=¡Ëww®À° —m«’?¢øŸ_í¶-…ço ^ÑÊàŒëJ¨‚l=8´ºyLþ»~ø®¶ÿê»|õÏw‘¬ãvÊÿÊÇP¡àñý-Å_ä¯_,YÝ£¾¬@ À»wǦÃ|…êïSƒÃ?ÈpðMøÑ[4Ûßgj€´òc+Ö[t,R++´ý—Ü—š`—ÑXô ½Fš`øØ àÇÇòH»`_› T°›ð?59SÎ&Oqì,ö ðÑ€Q€±2Ž#ý[€ÄÙ³ôŽ[¤í·`@Ž-OÌ(þd€ƒ¡h) ¹ÙR¼NÍMæ?­ÿͱO;¨ 7Ëûh¿h]=Âÿ­òİÿÀñ-açØ:û€oœïûϪô¢ýÇÏBýG_þèëë¼ï>û„øÅ%€rN„›š Àv¿é+Ð[à}éݹßÔ +®âîãg€žêÆNØŽ¤«r’û¦¢£§@瀖 Â; +ð?e8ŽXTem¤ÂšMU>ÛÒ׿¼£Þqæ¬b‡½Ù¡¥OÚzZe@:GÁ~J+q= qÿÑäR0 FúÞÁ2ÆtK·  +õÑö °DàYÊ¢¾ñ`tà³å,Úñ`Çõp6#ùN +®ûybSèÈÖ,)§ $÷ûç¶]þ¾@«i%|HgtCðæ›¾h׈KV¨³ýta“£©m ô/ße ë äTÀ¢mkþÖ}v´WÕuû£€:ÛËwwîÉ.\Û £C ôÛ!?Ÿ­ÿ™öÏã·ú ©Q‚„O”/ùzi+<$¾°þ!Eïï,* @¤í5÷åüP?>Ðп±ÜÖÀy›puáç ^l€êïSÄ®Ÿ¬ž³ýÜeŸ-'µãÿŒ·"ÄÒ÷•&ýëÐQø,MÇ$´7 { €þþˆ°{¹ÉŽá†âIáX'À­d¯`˜õ:¿j8Kù@±—¬°ÿ-€$l²ƒlžœP^ÉNtK%èûÀà-ẅ? ão|á[Aîê÷ÜÛïɈª ÝÄZMó) €ß`›o[ÜØ=”vÃÿÙÎxhhY~Û€X<ÂüQ UùÜ9Ûÿæß–à÷É)ÿ:@ø6ùÍÿÚKŸ¼ €s>o_¬®¤‘ý=Ûù»|jè €_>|ø¹ÐN¨N +åÝ?}Ó7Y€ùHW ý½V€Õ=PÜEZ„¸J£¦ÒP ÑÙS øßõ3±Ø*ù¹WtO3£‹O]{Hûî! ˺̬…Òwy¶-ßÓ®44¡Ô¡^,_Æ·f d´] —S¹¶‰Ò-‘P¬v5}†< +iûiÿÅg¿w>LŸdë=‹õô€V DŒ&øía„á"gÂw€ž-›?+±|—Ëù×$€Öx«ýþž}ÑÖ°§Ðs¾¿×qäüЫ_ MI¥û£ü‹éoqhÿ×à‡úâWXðþÔž£<+yzŽm[ü加½0o¼\ÉÀ]7é/hg£Û’:ÿUð¿9j!¿ +âwÁðÍ$Àoš»ÓPŸ +muyrܺŸ»ì³í\î¾í-€?n@:„§ß ã@‰¥úowøê„3žÄ<Š»988b82 ,¦~ëø•uD¼Ý€Ý$ÀÿX¬ÔÎÂí`€<˜k³„×Êò± ëësŠÊv¡¯Ìø¿pGGC°ÿ{Ó +›û€êÎÌQƽ;óùúßFëéÖ@!à¶í—ðÿK€ý9ïßÿþ·XŽÎø¦u:ï{4ÿŸv_üã$‡ö‡¼¾#PŽþ«ÿóD¯!_ã+Mâ:Ü”Ü;Ò™” +¾PiÇÚŒdìÜOªÃXÄ{|{›âü—ãÇ7Êö‡€‹wo^?ç9}D õ÷)øßõ“Õs¶Ÿ»ì³mýìJ[Þøk~ `»ñ³çt4¯1Æð-D zaOždë¨àsR²ö÷ðå9úm-êÖÒ¿ÿ—ÚuŽ/̈W2ÄÇNÅœ¡ñ}Ö©³ÈïWæ¤ÔûX¾?bÍ#¬ö-ÀÈ<‹ÀßÝá€#o¤0”îÖ°½”«ÒÔ@í=o@;ì{êÚÂzG{Î'(o ¯´ìÏzCôg®e‚Z£ñúèÀÏwwŸµl‘ý@0~$ÝeÊSzñGDÐ.À¯ðB+€'êâB×M›f;]émÈ“±‹éLPF(Àw>D‰ÏTúeâ-ˆ°åZt#eûÕÃE'£Þ€È®‡ÃÉ~Æ5sÁ]—åA"0fkîkP‰ )<Îæýź¾^,W")Äå%€<ú€Sã/×q œL#ÂõÈ/ó œ(ì…¡ù¥$€-–8Ž P¨t`iø²GëåéQqÉÓüß¿¨R.VICÒÃâLåÒÂàrœ’Òø¬n×ëGÚ¿ÞAµ'7à)9m÷ škÓê È›*ßmO,çºÚéîRšÿòèÿeß÷3€-s¼°g€^·Ïø«ýC±¯åÙý­ŠL•e籡üÃ-ïþù€j7ñ°³(Y4Ñb‹ø5ð§Ç£øWü5ýOLJ?Þ¸Ä×ÍÏ®ÎOý ¤à›æ„ìïÑvÀìÄñú¹Ë>[Njg ýú[mÀ‹¿@Üæz@»9_]€þþ `2DÓüƒxî9á‚lZD¸í€Îà{ÜÐë ×ý¶ˆ +@êWçä­¹ÿðÂÔc¢Þ`S –Ä[óµœzÈB1”+ƽ¸ ™8±‹x§OséuŽP_ Àƒ·ŽÌ0Mï&z¿"]¤²ï,Ö²õœæ³gØü›s´„>¶ä`¶†ÿ³+ Àñ9_µè|š`:̵P›Ï›Ðûžq5P •àÏwŸïoêc@ö6ÛAà_ň_³@Y ðóçWç]ºA¿³0~椇£¯kÁ^Deð/ †‚èÓ¿ÀK¬PXåÒ6+”ŠÝi7~SGôtl››qÂãmgÚæTi Oò¶‰ÕÚlïç3hîŠ<ƒáTc[Æ ?ûBéâzq½^lÌQ}5/ü.1 ÚÉP…Š£FËWýr©È5¬Õoô&ädÚËÊ€ãÙ†öCÄ„HùÒuôå@ †½kM¤pUå¯N-z¤_¢“Ž%ò= %¸¦¶•ˆåoÒD«õþ‰Ð´®¬ViCOeÍJð‘†ìî¥îíngØió‡j}íŸ?e8N>ÙmÎûï¤M™°´ÌP@¿ž‚ïŒ.º7èÕé .ñ¿=dÝ$ÀÂ~iïãZÝîhrùáj’_„Ä€®p‹pã€wÝ€ïÅÔ`ª³ü*¡R)™æq{¯Sµ“ÇH§OÇY=1BuMˆþ“G[ÍŠ`Η?BD8kδ?à @)-Öèˆ8ïTù½}Û¶×ÚÆ?rÁ¾¿þøµû‹öíÿ¶6$,%ôá&ʹäȇ£FÇJàoàØÌ|z„÷ƒ Øwùdmÿ[1› M¨²Ë¤.*#€+±_R@øuÀÿ»/µäšß4üÖ!€PÃý-Ù>ƒèF ÷¡“+žƒÞàÌY7Ȭv›'Á Ƹb‰K?L—z†€«  ¾*Bð¨G~¹Þ”ØR‚0þ7øÇc_ûG0ÙlZ#:JçàÖ^cÞ_âÞ§­àP›ßž––Ÿ€ç‡€ò,&Ÿ$ñ¾~mk~PØYò<ìS^ Ð8ÆÓ¡Á2mf™àt¸ñ§ªº“"ÓQØèO5‡‡QŸÇäƒù1((¸ öísj%À«‹w¿Ç5àoÔ:Ëç‘jXï$UúÔô·Ãŵ[pj@ªóþéÉ9!\áÊçR•oÓ¶OõŽêùvÞÊíô€2àÁ:O¾p|Àhè{@öè…ú þ¹â? —s¢]?| à sô€v;ˆ'ù̧èpvæ tZ þµö<4"úg·+‡ÙPÞ`9eѬ"Ú+˜²—õ¦e–ÄN_\"•о:Îý{L'}WW¯AÂ)ùÅ®~vZ À·”ädg€?Ù#Ag0y3:´dÀS?ÇÒÁÿ/Íø}ë X~Ï:=q}‹ ë\\ÝÜýË}›`?â>¿ü¿ñc€·ùߺà§O¿~"|ë_PGpnu“$P]Zö: _×-ü…ÿÊ…‡R ]#À ¬+tVMìøÅ¬ Xûc¢hsÇo8Ÿp °]o”@ÒËšS©«¦K3QÊã^•nAÛ +‘pð…!‡Ë ù9ñ_Ⱥ›iæõÍibx,®— |Ì‚°èì„ð•;ž±¤È/ˆ×ðï5Ü«õ¨?çË,0k\ë%Àb×+ç(DÌæ›ùÜ‚ätY¢?4žÚ-ÒÛDl–õ"`šUþŠž‡X<8ˆÚàŒª“;ÒõIúúÀúw¤¶¾¤ýo `âS?UØ¢Ž‰-=Û}°£ÁF‡ï´ùíþáöЗâìo_:áxŸR lþ^¿v½žx+ïQžŒ^Í“UP. ÞE^í@^*àØù·+º¹à3wª! ‘)vL¸ºDï¿üÀþêG¥€ +WN¼l³Æhq¾ö‡òì<‡Ú»¶ºœs£ží?pVû »PtB„=EûO×ßëOÕRûdÏkáÓëó =ÜHš §y*)CeèÖ #~É{\6A_ÀˆÄ©ÇoðP>÷-€ô=VAíƒQŸHP=uWØß$¨=)*Y¶ìÚ™€«˜"_ô‹™q ~`ÊNEܪ»±é,FîK( y¬’„k-0)Ÿ±(Þy³•Ï: @ïäÀ $à[[ÀSotAü˜@¡r0 êJ‡sßpþ‘*ÃP +csˆó)l-ü¹ñ¿s@\‡žåj¸þ|ºßY>\½îà_¥¤¦Í7·Zÿïnnï|ÐIƒÕChíÔ™ÞIøgkS²;nøJïrÿnQ,CBúW¬Ñú÷Ã’³Ì³kãÚ«!ºôtÛÄ<Ë„fËåd¬à§r«©Y©jƒøOóW ·ùÿ“y¦ó9Ä0Gþœ F«9¨9&ÉMüD ˜Ï—jÓø #,~I}±f’±:ŸLzÃín¾p|Bù®¯3r@Àµ/ ‚­å +·ôV H.hæ«IoDÆÊ1H‘m"+¨øÀò4úÊ-bÐÑÀ_ýGû§$!9RfrÙzB€Åò!>Üd`eYðO1iÿТááñßNøƒè¡`»¯­s'ÔÁygØÛ¾fè„€‚ýι=ÇËÕ,õXl01(kø5 Tùö=& Q N «ôÚ³~‡øY—swºG@þ仫“Kޏÿ|øßÞ, @­è,Àßg€øCÕU>ƒèþEyÁ† 8/ ~xÑŒÏN„òþ9g Í`Úóu5žR€Ûˆé÷7°ƒtì±ûhÊœ? Öxò-€c€œM3‡à_¸fxPwx8`kp „ö/ÌØˆÍ¿ýSg¨!€ØÖãÍ¢2«' y<1÷ÇD©š`BaÜp(Œ«-ÓåâqÂQ²*\Ÿž"ø(LrŸWÍ’@,‹CµÚ­ûü+ôHÜ']rRH.±PdlÍVf€/ÎpAxìCíž¶e€¿îÓ†‚ÿÕÁÑ;¦ùîðŸ¿/ñó§«‹NE0R=Dôhþ÷ðhÀW°?à/èïœ[ þ5+Àžã5wqñ^çb¶ZǘN¬qóádŒª tšÉ†0¿¸1<{õNUtMæ^*‚Úy g5Æ×ähóÉtê €)­v*gi߇Ӕ–š?",(Rão±D‹w† Ñòò`8ášP«´ @ùÆ=.)(9Óm1‰`³Ö`dä‡õ_æ +5#G4YªËð«™ eˆeõP8Éðˆ€>—]h¬‰aåàÔFr^"Œ(„)˜Nè'´êq±pVüS2¦nÿ0¢ÁîÍPÛ¾®¿s—kwîIçî¶'%€ˆµ[çÁqKNÇ‹-î`¿1¹° +øû¤ì~œå:B¥ök°¤ºüô?û’”üwV³´³=º¼ý~-Zb¸»ût¯`Ø{3¼ø1³ï@¨áÿ FÄ­Sw6Mö\ ÿ^¦—=CÝr‚ðtħýsžÖaîNp:Å/0ñXÉ·Kõ§àìñåàÛÖ 7vs|ÒDŒN¤Ä©ÇoX¯g[ NÛ¾@¾YjÀzŒ·ØÐ(ú–Ô»e­vÍéàæà$˜®ÂêT5Tº  ¯ùæjíÄø(‹ÈfŠ""é0HIúÿC €p €­âŠîà>Š7ðÈPUŒ"“̬%n€¬Ýçˆ _„¡XƒÇ@Y¬Ô¯¼@«lDR´IeŽÇé6wsl%OÎÐðŒ99?ô,W¡ú `ˆp{÷YÀ~EŠòz{.ú¿{óö6#w?ûݱÜ\¼®Us: Àžnbÿ“]TBÒWe€‚~wM +`€)j"À3­î×#Ëóå„°ùêÞl®âÇÕØš“Îìz³Z€»!€T-±“ñhçÞLnX ±Š"êÙ¨Ê4?íôK`ÓOGW†Ô’gó@éh2œ]/׋k`\yÌÎ~w€¾Êæ^\kÓçª|£qäzƒæý0EWX¯7ð¯ÀàV=9¥ÁÇL¡“æ&Ãé‹l¶}Ÿ¾”‘=÷À¢“C„+“¬Z0š DüÅò}É6p£CzBû½{û4ýáÀ ¶ro÷q<>?´4/M»žî9éŽPš=%Kû[(®_žN8J ò˜‚ûu¬Sá^€'Í]¥¾µù?m¸úpùa¢`‚Ã)€nþìG>ï‘®.Þh¸) àš>þÔC i²K¿Jg+î#ˆ J± +S€^øœçR¥ ö‚˜XÎo:E*ßÛ„ýÎprä]ÀÝ€¯¿pd k5>ŠäÒ·Îøâñ=Ê #bˆªÄdg05l CpuUE¸–¨ÅËö¢<ÿ­€*°¼ùCxîa…„g+õެXà N‰K SÂi®ek¡"¼°³L5€ð¦›*¾ý¹ÈxøÓï €¨J$ãE`CJÛZêç Þ›`½ Ã{€ŸÖÿ6Þû@:ÁÝî,€€Áäþé-€ÃuÈRN!ùnèpŒ”´¶ñƒÛ¦ÌóÇ|  y–«Áú³©Þˆ ëØ‰Ð¥t¨Öxsþ±ìÿ®x»³Tó§?©X2À>ShwK©p‹ÿ͹“: +ð³6 åmD/^.Ð,nÈÙ¹XéKm(þs„vkIÂ9n¾0ž|—еni‘vFJÀÕ¹ž¶åûÿy5î"€¨ÊܹÑr¢Þ |–°PI^Á‚}ˆë8Á߬æ šÖ@þrIçÓiï§8ž +çAùA¶[æ¨ú\×@Ê1ÿûUc?<ík.#:<íB VHIÛç®iá>ÞÊÍŽVòNž †C<4d6ÎRFH5VÏl²àaú ¿åuŠ„Ãq•/hÿ’ ãwàŽëijE9NDn%ž¹W>j&Ÿô·øÏ#VrB;Û£XÄ}-l¸þ| þº·+èõ..þÿî9EÒË?ƒw–Àg®ò×Ý\ ý¼VaºYÚ0Ê?ýdæóÑGæÝ)¥€ Š*þýþÜ0ÑÖètw[ë±mù}‡É‡é?öh8¯¦óé +=ü§•€b4]³ªùx0_£š«ƒÃ < +ßÄ“%&nçS¢¥щŸ^7Š-숹FŸ‚ˆaÀ”#a9ŸŒím”ÄVcF0Ê5Uÿð-k1gMåA—¬õjYVíÍ›ÛÛðÿîög—þxpóîMõ‰üÓn`:¸@?Ú&€„Ú§gô,ëuÃüÀh{‰€ë¢ïL¬Ú\y¯)I"¯®×¿Œº— µ_hÃÞ+€3”W¶Íjº>Ù4ÿKnØÌ¦B£‡ÉÔÿÀóhª0_+7þdêáWY`9š+R"f‚žÚÿµ¡/'0i¶"éj5#¬)|Éÿ b š¶ë:û>âÁZ|¥(¨öx.ÕÉ}§p…xáÁ’€¦‹Ì0¢ˆ±OÀ¢‹ðÄØÊP5ŠZ-M'kÐì×7ö–Ïøi6»ìSí\ƒ#Ï`½§ÀÆ£G3íǺ֓§ü»Zåè@ >ŸOV@5 mpG<Áv©ö×5àttòNI|Bÿ¯’O®óÕÜç‡ –<ܨ•±)aÂVRòWh€´ƒÝáQ•qG>uRO+@sSHõQb™ëƒJUÇHî“Bc¶H-0?x @GÎêZQ5¨žz¯ ["} ™‡Nðž2ÈGÇzc!é ãõøE½P(€€CwÃ|yT8@æïeÛÃñ9Öªå¢>Vt!ÿ÷ùY+v¿©.wäÜn€"Èh4¥»â–­èðæ¾ÕÁ×õÛ€Õ9˜žôl¨Lm7 õ 3Š=¡G*4R˜GëcŸŠäMv%s~Ê”¦ù}*ç O¨§g®ðì9ÛCçY®“†ëϦàã€ô%‡úB¥tÿ;§Ò=ø-€ Q^—f²WŠæ_ýáëÇßx†œäD€Ú„›NÊ€SOXÕŒ»FÆ"ðQ´,—®ÖÏ3N«¹6º3ð: O¹ÓgTh ŽÜp[™ ‡gœGOàGzè&h "%b?]vóþa‚LçË ˜EßÝj¼T™OF‹k˜Ù·B°4ÁÚLÛC‰w º€1—“Íâ2„ë¹C³^NFp¼Þ=[nVÔè‡ÌK$_š³b,ìІiÏéaѾT€ jš »ï¾;q‹›îx®éŸŒ—ãÕÆq€É‘e½–늿e‚ë¼Týê¡ö/ÍfÛóÿþº€¸¨õµ|þ̀ó î‹ó¤…è"¹ÄåÂîØ–‚|‘÷ÂÿÈÜI©íß›sŸ„ü«I¡ÿ¥»w£à×OŸn?\ž÷Qno‘®.ÞõZ”ßK<4>8Ïú·GL«2ÍTµ( –n™þ1Va H<Öü;ô½Sõ}€,êº ŸªÓЩtZØ!³i)' ç•5 À©³Û£ÞÐ¥¯'óá´çCãóMGŒ,ÐÎÆÃŸÖˆøš‘cœ…“íˆW€¼öçØûïSs˜b¶ÂBB€ˆTɬÊÔðÌ +˜`g` 78ßýDöÂÿÁ[ÖU¼k׿ø°o)þޝÐÙhठ+ñÜ:¦ŠÕX ½à xïÑ;´«²…À/(Pïf7Cwÿ&q<²DÀ›C‰ +œ:ó‘©oÉæ!d&Ó"Õ3;àÝq˜u8_ÓŽµá ÁíeØ·œõNË8ÔÈ¥]ìÚtî4€÷ãÙÀ÷œfï¾ïô^ Âj<¡6¤͇ŒëÎ@Þ1ïÓ!q­€n€ü?=àYß(G;Ïr½úüBê€XÒSÙ›ô4ßKêÿµð¹•ü€“Þp.²qÙ¿¡þ{Ðq¬ú*q7ä;à߈¨Á)@£à¨@ ôJ7ŠïߣQ™F=_ý NÏ–èÒ“Å|›”a!ÿ„ûÜOņšìªhì³Mc£wX:À„–­(à¾ÑhµœÌçs2ŠI^ýxéÃ|9ÞÀcúr3Ö¶D‚µs¤”Q&}_•,®—HÖ½fßaLùŽkÿ¹E.ûÔï¯jØ©ò{û¶m¯µÿž <Ÿ´t8ß~ž»5y·Dg§ÆæÀöT@m?äsvdpœ²¥’ Bg_©3û½'ìäŽ.œö?äàîïnoïï?}úõ—»?_Ï/QòiÀ«‡ŸûþfЦ&¸}ýßPP@ÙÙ§¾ï/.ŽÅžÃ a°<’CPcØû 2A¯?§ÓÕÎè—£„n©ÿ*ÀO—ê¯ÞÒ óìè¤ï1yÏ{€‡ƒg—ôæ<1yz§µE¤sß‘p`o€X´ÿîý¤°r"œŒ\Ôj“€}³äº{ýØQ“„³ê¨z§†ñ4 5 #Þ­“ +/$ç>s ý…KT(¹¦Çó’lÊ:(Vg†iPH!ÓdHÒGƒx¨Êþ”@ÑA`åb\=;¢ÈŒî·8ƒ]€µçËýe.îÝd´B3›U~Àó €¥<´œTß[;­?Z‘QœF“ñr4þ^ãîèýü½Æ!<ɃS î-÷Û¦—–SÅß§ç[hCÏ›Ðûžå:i¸þlªI€n?Þk¨^ˆ^e«Ù€ÿéß:SX €ÃÍÇÛz  Œ„vCôté„쇊´ýK µOG:¦‡$¤” °Ãý Ðy¦À—æ5ë¯7³Íú%€ôz1¥`æÄ^‚ncObÎ6Á,Èç;C»Gˆ&ëíâþÚÌh<æ +‡£ñr>ZÑVPì§“Õ|Š˜Ù»\!’ðoz&HÊ+'. ˆ.½\\ÏþÕ¥—«µX¯)À·Æ} ¾Wáúz »Î]€ùaß™”1Ëð ú az"Ö~ àr¾ž­øÏ}Öy°y>Ÿ€à<æé¨žfÈcãƒF»ñ!Cà "ѱ"SŒÿyBºÞÐä§±\/~C–ów\SÇG´Ë íáýÃß›7½/¡ÝËé] ðI  ýºC9«ÑÛäkàK@ª)…úâç}Ðò°?E¦æáp×Ê´£æS“„IeØÎg6¿½Ë ›sŸ„ýúñöïîîïùõó/÷÷á /øqà?JH·ýLJ_*nÒ¡F +ˆ X8-è¿è¨.NŽŒh¿SÐ*ÜŒyHyyHµÓ«rµ.X¢‘ó+A4 ÀIïT @Ð`Gó‰9öÆ}‚âÓ?Ïyò„õŒ~¹¬X‰Ì +‚ÐÁ€‘à¶Oª·0ÓlŽr˜RRs$ŒÞ;þl@àô@âÈ–èšÄtQ‡o(,íu_íVHñÖ·¥R/ ‹ðbVžÓãÁŒ©ÁvðÆmðÀ.õ—Jà.ß»V¾­ök·¬ÿãsb¨?7,y¯X ?a‘ ôÌ 'xí­Ó”Ã-ÑŽÙýŒzð¼êœÏUäPÍýiù0žQ0:ÅšÀ­•ƒ3_B±qÏéRm5´ézW»’ê €Î-Ñ7Ïh‡Ïr}£àêöþW'Úi¤'êD€LôCgoî>ò×pûñÓ?!´!€Xè÷ŒœÞ ¢ |í›Î$ôh€gO¸òPè¶z ™Nx + D-›ñµ3ïbØ,–£ž­¢ÎåÉ%½¹&NÞX£<Ÿòœws|¸hŒiÍÞ)“£ù4”ùÚO£2k=\ÃJ<ø ޝýJOÖ±7xº°Þh ŒFÁ÷]:Twµé Ïq>¨]ÏæHlØm?ü™ y_q½g b¾\ÿeþ²¦{S/o6S„ØÏhʈ³“©–«áx²šP;*šh=€´œLTÿ_"ŒÇSžŽT'Ëùl}©@®avIe­—±;Pµ§àßIoßý»wïŽþ3Rþ öØÎÿpóJ·wÛ÷Õ¸ßnÇqê࿎´ü˜ùùûøÜhùoê¹>às <^¡àCñð9y´Ô Rø ¨Ópï®’¯ýþgNnsîSƒý=º½¹½ÿôËç_¹¿ûp9Tøt{{óáêÝ4 öóHM×~Îäãyú]‡Î“vÊ_|œÓˆé Àļwîè©æÓ3uÑš˜ßÇŒ½G¨j»·Dçƒ0½þ̸j³ÚíÔAu“Œs­¡z.¶ÀÚÔö#èw8€,ÜýD<8Èü¶Pr΂þl‚ø ÀɹÙð’ЙÆn¡ƒð5ù[R]!î«-wÚ³ÉñÌÈÈ’?‹®ÃüwÄ…ð.þRŠÈ)€²x†œÅÝî‘ :⬠OY(”èoávs VÑBÉDG' EÒ…aôw`š;˧ï\þÅâ¡à>TŠõбèÁÕ›ÆÎÓ›ãR +˜¡˜ç¾æö8ËAva£Z€­Bì*³*(M`gÀ‡8 èÈ€ßù-€—[>º`Íhв3hþwðW@9Àyÿé z{:¿:!O$U•!\ õBò†1Í +ÐP+ø°Cèˆ æljàÌ„ÿÎUŽî¬ólg¶:B¿tÞP¿Ãÿîg“ï9  äë³à+z!Ÿ‰ýŒ™¡}àÞíÁ܈A|» +*Õ¿ü“îà +û§5ÔߣÛÛfp øß™þ/.Ò>‹¢úBv©±W µé4EG„y}ÿ“óþÉ«©¨›qæc×î*ÆQ ‘ÎPpfkÈ€ rwtÖG<¶Ó_º¤`ˆäH²¯@ÀCåB€" ˆ”)¶EhüÍ`R‡s€Ç-‰hpƒàÏR +N·øéf”‚<åL°‹xÖØýxb” +Tuøuuð^´¡-â.òhæüAÆÞHËì)t †_‰ãIÀò7ø>›(Ÿ‚¿…Z˜”s¤ù‘ €± Zy«‘ñ¶ô𼨡þÝ:àóç_ýçû?_^\þx¯€Çüªó4‰tR“ <^&()]ºB´½/ÅO£á0GÕr:>D§K7 êŠr'gM)qýSÀõ•šÈ8ê笿Ì胇¾9~6Ï8n&ÀuÔsÞ9žM `°tô,_Ù¤‡† -N +ƒúSc5 XñÈà¸Cý´tÝøëŠ$`q$ŸIºq'IñÀD± ‚ÀÈ” ýßn?Ô0ž¶áQLÝ}   Ù†¶äyþì­©ò…*7öJ!(ôí$‘¡ŠrU vû~ð=Eþ¾Ï +î[ÜYšü¡§,•.Ü©`FJæ•BŽê0$id!z+»M]Þ±·ÜE¨qùh€¦¡àšN² ûƒÑÍf¸œh˜´ÌÞ›¦ö Z0j¸¡Éz%¶†}Ñ ù3›ÀðY+’Îÿæœ+|®· sû°ÖãÅ€ðñ>"׸½ûts•å"H]g ‚Ôà¿÷M0/" ]F€²ÔÖ¬m ÃœàÏ+€&}/q®1œuà:ß@òÔͪ”gÃOæ>y;>]¯mTØÌ†z}‡òa0í†Ö‚¤ˆ à4zçËÍ׈‘[‘_ÈgµÙà ;«ùÌ·\aw±žãË@iÔøÅÐY~pM¹àÚÅ‹7?ÀõbìÒ© ˆ Ëãî¾À@1-”€¹ð8ÚeÒ)M–Ó)˜?›kÐX¢MÕPl®tuÑ1x íò¾z¥Æ_óõÂ5}qÂÏ9™¯øœš×Î7¤žþ•¢Ø/¾]QdÝ5ø; êþƒ¿»?ú=ÀÞqH§ñ6W´*O7\™ç×Ö¹êÂuË^2Ô{ðc+…_éÖ_¹¥?) t“Dò< õTìY +»Ÿ$›[À>(ßÐ>m°íÛOÿ¡,‘0¼ÖœôáÃßòÛ§ÎpÿËýŸ¯†—ûÿü‹Ïº€«ô^ÿçÜ,+îüüݹ"ã^F_&jìíë 0â™í—æ©€ªÐóÔùýp4 ­ÒÛ­:ô:쿲Lýxl¿N›ˆ=1Ýt%À`q +ªxܾ Àˆ¡^Å‹¨?ï/eƒNyÊSÃóî«›±ú¡€Ú©(Àžàp I=¿ýøìip¤‘Üõzâ·0Ëi—È6d ~ì-àÔkÝÎg<ö(þ•ú %s³*…§øZ½gµ¤1Ql•¥¤²C€k‘¸æ.ÐÜ~{À# ÂneôT#‰×ùGðr2‡ZþÃf€ŽÍ»6ãžr?JQ ”êÀpÚ;³ Õ-Ö~šã<³±®óI8ú¾óh°T˜µ5 ϶+먚 +tþwÈ&gO[ŽÎˆð¿÷[—WwÎ(€NKð·w‹€â=Jÿ=äÝÃýÇ»«‹f +=_â–@ @€}ä7[!bY™#t@í"h't"dp!q=Ÿ!¸¯­Íl|½Øl~V¯×Yqo¯ææs4÷Ø´¯‰´Z-G3ÛH/äJ@Þ­Ü鬠*Ëw†PþQ}÷x¼ƒË—$7ŸÍ6N)t ˜Õ—3u{íê 2j9®j½^^k–¸F@á€Hã' +B\-‰äz6ÞÀ5ed›8^¯ÑìÉgíK…›ݤ¨ +ëÉRi4ýŽ4$ëÚ;@œ!¸NFœÞ™½‡]ÀÀa3ߢq=¹žPÇ84æ.@°Z¬6¾0SóõCdoDê}ýwðß½Äßÿã÷ïÞ¾A‚ÜaÚïþípêNr<8 = +»çgv‡ +àƒýõ‹›Àçæ4ËþáäTœßIÅäü"þÄ-KíùY?ÜìwµEЃ¤t§©vd€ÇT ¿/DøõÓ¯¿þr÷weøÅ1€ÛÛ•ÀûÓÞ¹_ e}ã™Ô³ xsuaGí& ÔöðØ6åÒÖD{ý1}£=.€§Jó+:úØ‘}ƒßR•žtéÏÕþ…e[þp¤J#¤]¯нë-€š h5 à¬?A Eö9™ ì ôý®¯…Ú€¸ !7„懀csvCþf$ŒŽ +L…½"Ã+>™œ¡7r] s’ìKÕãÕñ›Þp€WL•Õp3j[4àn§Ù——Õ@ý}?Êì¿¢ Èe4^ã˜R„‚m!ž1 rW»`úZ&P[ã7™;ÍÆ§ŠãbJ´ °TÊήº¿XÈ;@…ŒV5ÐOË‘ÒäÒe¼›ôÈÈÞep; QšJ¯G;ÍLU'½…ÎØ8nàOòþè€ß½À翼ä‡p À§Ãoø¯þŽŽ:S?:9ø#ªÁÏe 8´l»ºà?äp(É{ à™-F`e´é€ÝÎð'‰vV€õwL›åb,’¢ekÃΕò¼&ºV¡.“˜»Â{Î]B:lÌX³tÜro© Œ;¥]Qc>Ž∀˜·NW¿qëB´©jö!/Læšé]3ÀY¦`­³î¸FèÑx8Ë‘D`Bë¿ævn€Ù_6+²ñ%ÃÉZEÜI€ì·‹ J®”F“²ñy +#Å@†dÀ3Û#}%O@š’û´W|¹JDƒU… 1‡»®'cEHŒ×ß<íhþÛknûÿø¡uÿÁ€tœ×¾÷þi¨´ÿ=Úžnûê 4ójßjþÿ¸Óì›)À¿xŸ9ú!ôq[̦M5Ï£Ôa¼ûüñhç¹ÔNÅ~ö-¤³k®!.6× ùe€8nnÿáŸ>Ýÿúëçû²ÜýòÏyÌoo~üóÕå;€7çïò`þ +Àð®×ù‚ÿ±\\Ø¿WÇXŽGÇr€i—¢=-ÖV¬ÛoÒ˸ìÈÏÒ¾ÁšíàÜX½¡Ÿž§¹bìël…A<´A˜Hªî…$ÕÞ¨a]ƒ’Þ¤ßéãk>Áàa¾G&æ1µg–ÄG©€'¥b› žôò!«¼ÒŸeTí¶Uc@Øþ(Ý@‡º^8XO­Ïmíø¼ÕÙ³Úéùà®Å»EåŠi›'U#›ð§ §{å,s-B©0nI  ßì¥*¿Wò©­¢†¬ô6@9às"#ú'¡!ùH%¢ìà„-o+Äý@èâ^ØwÑ—Â ‘øï–Ÿ Àú’!ÀïøQ ‰ê?˜‡Ëï“qì—Pòj‰ DÔÙL-Jš]zÙ)½!È£¸$¯ÈŸ,*g¿s@wºïY®W¿¼ˆ>ÖÀå‡;WöÛÎhºoÆÎßžŸ£ûßÝÿÃG-(š®®Úb¡~$‘kTr‹þ™ ðM€L°ÖJ¾PF€P{¶C àÐ + …³þ×õ¿n~Ž–ëÍ_³ÍlrîwõV“édÎ Þ—ý]£V/dn47+.dÝú8l4=ÄÒ9¦“¼p:›Œ+4cסž¯/ƒ¶î|Òik$òJFDØôo çx?Ö.á´~@½¸vÀ5€ã“‡R‡å‰çxçÃÁ\\®æ¥P£&ïý(¢å÷ÐöEþͲk²©Õƃ”¶CQi“éó4ä±)ÎÒëÅ}ãÚ”Ú5D—ñ{*ØÒü/KÑÞmÿßü´líwÿ2j¿g¯Ón·sׯ¿yÔIÛme‚:ì£??6[ºB€0•?M<žÝAS06`j7/À¤Þ_"A)P¿¥æ,—/’âÄ0{¤ßcò)sÀÿÏŸïÚ—þ¾¹¹¹¾9íýJWW±¨7~•hZo^¿}ýæÊ•…yhòIãáQ0oibèÏ.÷F ¤àoáMµÈùpôþ‚ñíˆ}YÜïj-‹ ƒ:ô=8ËÐ"Áë-€n€ïúcút_ôá„z½ñðìL @Æÿ¿7mÀ aÅGw0 §Þ³áøù©¢Z>ÍÛbw®bÅåGpV @-5òžðÚì¤coH9«kEÛ»æ±]ÉÑS„šÒ¼EX~`BáÖ”GŠ'/Eˆ2ˆ¡ú~µ˜®kèj(ù`þ÷cçÔë€; @þ99nðn™2ä‰e/óZ½À—¥:F5]Õiï¾–E ÖžªaÏ®û°n€€•Áˆ1ð ÝèMç\ãp3s0È•’]r ç!a…3ïfuœ„ÓP•öFNȈ³½9_°Ðäž7 燞åzÑJ€™î«àòÏ·<ý€î,¯ï¥tà¹*ÛÇóï~z 3 }ŠkžÚõ5ªŽ°DSùf  ¨…¿¦Æ +P[ôÏžc“Y2÷}œ÷ë2u>ÓÕ–ëûí7°).÷œÛw® ¤ÑÔ¬'Èc€£r~ëT­Y𦷗[ÆŽŽ ^ÍçHÚ ì¢^Gnä,üÑháAã€eT~›&”$NK‚‚´)‚L£þ;€þï,Ío¿ý¶žL\"ÛáÚgn,ÌÏV䊖|9QöíÅ +M<´µ,tftZ#„êD³i…¤µÎÀë[ï/I ¹6¢ ì”Z’úlÿÀ?$ÚGáßûÇïÝÛ^,…h¿ût¿K›-Úâ8Ž}T¯­ó(ŠßÖgωð¥»gkPÏ®kç9èA¸=Ïí¡°†ß Ä¿`0¡wa·§gße° ¡ê§-\kÇj¨¿G7àÿ?úì{€ë[; @^8?é¿Á;à✻vˆ+ÇéÃ)²ƒ€±\²¶úz¨s<<Ú›óK˵}ªˆû°ÙÍsN·/Ø·¶!€þ«ŒÐ £Ç ûôì´Nuú<£Ú`·®Úo\1(X,Z¤‡‘Å—»í§}ù+’®þ ÏzƒPÏ“ aY>DO'{s|¶Î€ÁB +{žGˆ(ô4&a)C°”ÂQçFvßS¥†²÷:蜺;| LwÔ?Cÿwΰ‡p@º?h#ûG°_#@^Šþ& @$f€oR´›T8…t-M¥ )Í9(Õî˜[®eC®ç3'àÆcø/À ÿ?\_ÇŽäd’½ÿ[w0ç?ä— jûÀÄÿ²´=;[·ÿlu, @ྶ×58VCSêe2U­ÚŽCà>¶¥½Y)RÂWùšW.™A;ü7µÇx_)<¤î ;j€_é~œÄ€(€œ àxï•xÉyÀ-0ó5ú,÷zÍpq~‘ük;œï#F/m—ò6¦?K‚€ >ŠÊ t­úÐÁÚŸô—¡F°Μ¿zöÑ¿`&!’|D RžœÑ3 xª)C·&$(û`Wò!“ì-<¼ÇçÀÚÛKØœ“4g~Ãhè§ÿµÓ‘µ(e#Liû°ã¡p }ÜJ²§/ÐÞqP§yè+olÓØÎð°Mà ¸úKz©øìÄ`ƒä"•iUÊ`5FH×ôHôÜFèû*¹ìgzÊÀÝQÞMGòjÁtŽ|ƒøÌp„sIÜ6jòÎJp +"d™=»= ÀÄ‚µ!_÷ ÀÈJÚµ +×ßÓ*àÐqêKäLJ¡ÈçèôH’çi¬Êuén HA`²¦Q’N2¢xøoV<:Ïr}÷.χû@Þ¼Ü$©§Ý}ü_ø_ôm¿"°[ €&¤K$EˆÌ•~ü-€gP $@€]x®7"tÀî˜`;@ðöD#qz;5,DÒ\…üÔxðÎû-8ûåÜñ{TiãeÑG_¬.÷UM2± †ß›Îx–G¼ˆs†¤©€ƒ@9QÔp& i +ÿ¤­ŠÎEþÁâÙ’V³ôc»2íçŠÌžà»qíƒd†üm.ðr]?#)Bt#òÈ$é£ù22¥iy)†‚” +®yÚ åW~ª[HÉbÚ>Àóõ 1¬«i쪦5YZ~xöËY£0þàÿ‡ÅõõõúÝ»,&½÷÷ÀÃgx—)êœÐQ¯4ÿ¦ÿ÷ÞØ¾mê;üüËÃC=¥ô×yéê­%ù‹€«Ç¶„jÿÎ%å, 5·9ÄK+ø>=<5Ôߣ›ÛÛ_>ýúëýM,ŸE¾oÀ‡Ësçvø/!¼jFç§éÇ+ôÿ×oc@n lW¾HÑÍ¢‚e¹ê;{Á“žuÔ×}àèõéNmÆ´®àžœú=?æÒÇUóÐÄû ;à‡IÑíZÄ EDžƒù=žgxD:CW}™ PsÁ8̓Ž<ÌDöçZ”8"PÐ'æ¤ B>ÄÎÞÄW|ŸÁX}ÃûúÚg€Ú½›·á²Ë©K ïu Dú3ªVÀʣäNskeàÈ€iÍh€t\ˆ!ɰC%€¤Ã̓î=ZƒANlÊIÊcÏŒÔGää6X â·Øªžž0UÒøßÕ€t~`°G pk8·Ã. èþãË@]+4}Ì«XìÿèëL€$À}zK’ð âôï‰ðsUÐW3žâ=M~Ò“U4r„ +1Z‹™ø‰ÙjÌИœMWØÈiOn¹öSÁY¨°pÕ6"Ï-¡ -Ö¿ü_i9Ù€Ö«Ñ|2wñTÊ@D§èèýä½\Ó’mi>/R:† +MÒÌ@±$‹–aœÔÇ+"× \SÝÒ"ï&‹øö/ü/oiG¨û»¿‚hm÷ÍGÍÿÎÈëê4í¡?›ù1R¨(ÏLÉ¡†ÕîŠbÿ·aÙZ#t@Yâ&îŸCy Þho€ô÷¿üúë¿hp)àÛÎàlß/éÒb¸ºþ›ð'‘å ¿ˆþêÿ¯óòÀpx!ä~ì[£¹sÔÄ +¡Ž½ÊÃŽ:`eOo·móåÐyØk¢:D¼eFèÝôØ*Z_&äÙ J¨¸0Zˆa"‘!Ó¥÷F"$¦ÛŸÂýBã#©¸L"IÎGŒŽ^åÞt'S´O&\{¥þh”T¯¸úTPbMŽ€E $jJªûüÐ)em8Š"d +G>Eh¸°®Ë¸™A|O Š%Ê7ŠæÍ9UQõ̉µ'«rsL8©lì5”P¨™,›_ýã÷⥋(Î5—R=© 3B*P²Äî—´"È'QÈB{â¯Õ˜W‘ÚO²´ +&áͲ(Óx“ ÏÆÍäþyO5¦[»I6÷XN}§„ Ëá8iЗ/KÈ¢c$˜ O$4wRiR€ÞTËR¾ã–^½êP£Bæ¦ì3¢š`ÖÍ’{Ìž ·gÜÖt¼™M=œ(2!‚ ´QXƒ‘Sòµ✠íÉÇÜñ“Ó$ó|ª·ûŸO~üâòæþóÇ»½•Ký‰þþÊ€ @·pÿéþ“ë¼®N'QJØY~Š õB +4*Üe‚Ë™ Xsàßÿ * ¹à æ+ë诂¤âWÇKñ¹¢]Lò±“s…Wþ!Ï–E×J#± Òà¼6k±q4?çþMIî}TåsßúçXÌÊB£Ìlæ»ù$òÊ ±Ïe!‘4^U\€\®×u¦ÈÐÀÕ=\Oæýþ„¹^’Aüë`óEóIM”5ªf-6#ã” Îßœ®† ÀRú([ðdDÝ’F#_‹ ò7àuA%|Ìr€+…Ú‡ÿ­ö/•Êðo#±õÚî"?Ð À,÷w³zàK„üxnyô´¨ZTûèö 2`…äP'ÏŽl> €þtÿwWÃKïÎPCCÐ?–€wo€ŸW§{xÿàwué׆OÑéÞ¾1âùðÝðOÏxÎbàq³C/"èvÏb­ŽÀr+ÐIŠŽ\½B¿Nƒæ¸-x‡ Y;&NOM‡/d«&'a¼Ictª&çl/ºëB¹@ÊšÈͨïpÕAa`ÁZz„Àˆž + Ž Ós.j”ƒbOã†a„Ÿp>Hmb¦Þ£¶››grjR¸`ynÔS„GÀX®¸ ‘5Ó8#–i†R2mÒ>$fz\Àê5 ¨w º\Ž“épB=ÑúcŠA}õ3 ”lúñÒÙöú}gcïY•úÙÔpýÙôñöC üòÀxÓOïÏ(@Y>}º¿½¹z]zޝ;5ÀµNL¢&v»ôWΛ›”;Œù¥¢@r‰Övr +`º `Î&¢æÈÕ!Àh®—k߀Ûåj-×ò™&áG…8s‡$2[©†«¡kðÂÂo,F0ÂC§ùMóŽÒÐCé\Y´´Š(Ñ$)^M“œÖÓ)I’1R…Óf«zõP>Ø׆¥Ò­ï=øßÓþ¥èúoþàB7À›Ýí¾é¨þ¯ùÿ @Ä…ŒßO[9âÀ°xD%7* , ÿÛòDW<lì^J-Ê3c6Ôß#-NDø³€ûídý} Àe$->JGÿW—ÀÿÕß™ôá}õîêitˆÐàsôE²{çA³'öÓ³Ú Ú)‚tóÎÆ©n‘N50Ò9°ï²×Æ™]¬×Ž´H/*6SL4¶4Àf×à ˜AkmÀ*ÈIðLÙÒ–ÍsÃó¯uFK&xN€éXHJEOê€i@=p¥¸¡ÃŒ¡³süÑЙJ#]&cZgõñxq+ÒÄ'©Fܯò°[ \8ÉDò˜®“!àÔcï§o¬Á] +néHͨÕK ­¨N‰+û.†Õ•XþõȽÑKÉ\#û y;\©å\›9—´ÎØ)E9l +w”ÇLr¦ôÊ[L2•>îd¢©$UknÅhÝ@%'4*ÑEä¦ÑÄ $`ÄïiŠj¹Ï¦ÉÁÄáa0©¦¬€5“Ó3«‘ÛFs’sëU3DJdN‘Åp—†N¾Š„²m&9˜›â%MѼH’ÛDÏIÔ||ÓU{ƒÒI¬FÄ—Gj*™ÕûBúüËÇlŸq2ÿP €s[Î饋¢þCoînÅÿÎè Úü«,üï,Ù½þV @É„Áøáç4€¯Z–cWÕ]¸ˆÞx¼X¹æ¿zù¥³ð’{ˆV‰Àµtõüš5è>›f™nDzœ¶K-™‘ç’Q"êèýlƃ>šÎ]ÛOp4Q-ð«†ÿ‹ÉØoèI•#´ŽY¶£l/…Rø28M"pM1ë먾Z;v1™;!02E—ŠbõÄ•øÀh„—XŠïHýÔY…´M@ò‰Ý‚,Å¡óâaˆAS §lJ±„ùц”œP˜O.dâ+„~ÉI€³UŠ•´q($séþ güï½P§üÞÕ€-<~ëñ¼äÔ­à| :í²çg+цch³óáuKqwünË„y6+ÿgÒñ·@ÿÏM¸9°ü ÀÝ{p¨âI“õ[ toÑÿß];@¬ê¤ž&zxqZÐؿⲳw)@G´ÈÅöû +°ûòš(ñè„Gô¾"€ +ã@tÉ»‡†ò® Áöpcê< „·°à„íÖïC°âp‚È%Žòèˆædêt2U['!2– +÷uä4ßÛ ‹enûçàS˜T¼$Òѵ8Àé¼S” \åA…E€k¡çp.h‹Õ0«æmD¼³’ϹaNèþ‰œ¨ÆyѤìÿêÿV ³* àˆ‰•/·dY Z2óÅe_C}›€ËØÈÈ",e‘›’JÌ‘T(µ`šC*¡ËC+*÷ƒÚR}o|Pá%·+b 7$0˜šõ”heW°Âª +`’›¡ÍØÊAÞÎ}&ÈQ¾Út87G‹ÅxÍWifë<>È©L +upMÕxC DX>áVÉ‘¶o›¸Í˜V:QfU V£m8ÅHuæÓË’l µ:¤E°]Tý‘a!Õ…1Aó£m|ÇmªÚó¾ÙÃöÏSpË6 Bø³Æºµ&{ˆ|´wFƒj¤/¡2ì?Ÿüè¹$XÀ×P&í´E@¿‹ä-€H®øîÑ@Ãà¿C~ߺÀß.ê[ú{2€ºcØŠ[üÏßh‹H.P¡5“g~IÌ'C LÄ„¢|¹}2žÏQà§£‰ŸÃ Õ(ŽÊÇÜ#ߌ+àýŒXËÉð|€Ê¿Ú¬üún@Z­y¦LNNÉO6šî羡V.Iþí9[ÁîrQûÙb…8±v>ÀR®"hšiÃôb6Y  ôG€ï +'0\_þ7§ ºû|´¢q…ËXôW‹÷Ä¡|pXhi݇Þ~…6›W &SÀRNMÉr©è„`³²þôvêâråpE-ØÖš ûGð¿ÙlÀã/ZØv}ç|îùù2ª­´½ à‘Ž‹YÑÿàw@Ho>âÚsíC[gøßß^}ö7R ྵ„鍯ºÌõ(Ÿ¯Qþ>ôŸ‚ÿ¿ÞýùrxÕ,5 ðæf€Ó¯..Ûò;PüëŸ9ÿ—¦ +ü³¹ +ÀÅÕ»óáù=Ä+zûê'‰çÍ^Ó ;e¼í wíwÏN¾KWO“=¡ðæ„@¾&G@á>ÈfÓ&܈iêíùlfƒºn2v¼<„Ñ–ÜéÒé–Õ:•4¾;ùË`jŠ$K'sòlÖ¥{÷Ø€j±òö/;– +/Æ †MÙü“æârô΢;B(– ‰‡eÈœ<”s’¶  aÞ(ÍÖwâÊ^ÜTaR¦Œ8¯7;‹.“¯ŒF£Ry-jÒá`¶•aí6Dvóþœ»àÌÜ7q1ñ½%:”ꨛ.6à=7m”¥•és‡—cNSûäB°—¤ªY„­âÀ ôÄ£*†òÔ]04Ø[åH&ÂKØŠŽ©R¡º»¨€. ž½¥h‡íd ÈÞ“ü¥"L7ª}8ñ&Ý[‰¥šP´-_…Ð ‰†ˆEy…• +Uß’Ë‹¨æö?Ÿ>Z gôúÛOü¥Î@Ç€@ÌÛ›«·oÈ@:$¥×Y;Íå€&Òó¼Ì€ÊzGâw$€š °[ °¿¬ ÷¢Ñ}ܵý…R×ý¯Lsª’;™ümã?¥Á‘¸¤‰[[»Sá\ ˜Û ¹F®íGƒ#Ý££¨*\â?®7›•p ZÏ'óérè%¹ˆ#œrÐÈ¿!~ØÚ¥àý:_ †ë~¼Ð)ãÙZÛ»|ò’Κ?û”Ïô,ˆ1x5;oðýx⇀à3|€Õø*ŸT´œ:9Ó‘T)iÔ®z=™N¦S€$HX²Z9Èà7•¨Åù +Id5–k?@¼vâp½šÓþÿÍF]ŒÞý3PñÒI5‡­ÝI·Ûs>q䓚æÿBþ²üÀS€d½ûåþÐVˆOqNâ: €ýq*èo„cèÃô2"!žG²9 ˜' ; 8ŽQ0ÿ€Êàk€û€ØÎøq; YÄ{XÙûŸÀCïÍÕeF®4ºÿ[ À¹MLÒÖŽˆÍ/È €stÈ}/^ôÌg¾ ÑR³l?¯NG#¦UUP°Ã7ºøD( "N®i5 R˜Ów7 Å‹B§÷×Ó§CËBdõS€³Ò +H'ÌŠRùÛ­'ÅBÌ€€d±ÂÉ©X[iR €–Œ!ð!2iˆŽ øù0)svyVÁs¹ ‘š±ã,ÒéÙ×Ì-™&žnáŸk¥dÇÉQþ4žŒg§%"QŽœ›,»\51c\²š“©E•éLÔ5É’ + +Φö"UÉYÖ1¯3’3 «Á\È”âçD“§çmƒAõÔQ5NÈ€»lº ¿9´Ï¶S$‡†’Œ<´YÅ‹I°pIE!Ë2ãan:DN‚¶¡ñÜŸŒÄmÄ6‹lËDùwÒ”ÃEòHÖáß»šQ©jZr¥>ÅEtÚ +õÖ8²Élˆ;甀’ù^´¬?—>ûIŸóóËTú›Xb³[ß’1€ÐÇ{´ÿw?ß~$êýGb–Èþ«Š4 Àk®€l` —°U4·Ój dÉ\€n]€&ÿIÇž «ÑÊÕW «P:wè}9™ü´r8]û<Ú-Ðæó‰₩5{ì¨þp4¡)¤^½u>˜ + žÂ”iï¾­9šÖ›ÕüW ÷û¹ËL¢@œ ÿV“e}s@Ÿü+Pº‚å5˜ÎËâZ¯ñhži~&Äß²Ã(“%=øµÁÙYc!@¬'¤ŸFŽédä’0 Ä‹¥å*Î)í–fïT›wå ‡B–“áhJ +ÄsPÁŒ¹4ƒ}²' ÿb¹qId¸ž+kÂ?R4›· ·¿ñ£y¢¨»rµ“çž«ÿƒöZØZÞ]Ø|ÿdÆ{?¸HÃoªÿvL =ø&MúõìÐ+@•¯kGËG¡{çï\œ—²zzqqŽ 0‡¬&oªÇ}*Ðß'¾Fæ4 €sÞœ_8°ßͨ/äïÿPøßˆÿ5ÀµÀÞ:lðîÝp8´[°„2õ%¢¯î¾E ݼ(bix3Ïš>Üó$(j‹T ½§FiºqbÇ` ¤¯œ‘ +º={zˆ¼3’Ò|`×Þzn]LÁBrÛÓÉL±Â‹jú©ß¦»¯+•1Á=šsbÉH`!ÉÆÐdQIjÆüÉpêH’¯ø ¢l vÉqýÕb™ŽSìtä‚UAš-/k~ówRD¦F˜¬UÂM•¥&TQH“}+BX’q!µÙ³ª3óee(7kñNXYÞEËë¡uSj±šJD `˜°"%ÊÏ~뫌˜nï˜øQ/ÜÉ?|x‡­Âz;~kԬʇP¸È‹—D1¼ 3ŽåÓüQ€ 0 ‘”c2#®Rk‹6A*•£7Ôtl…ØEÅ—8f*óNz0¥ò¶(TR£J@„S^ ‹fQÓ…-|h_@<¹/¡úàÕÍý§ûÛíJ€àk¿—ÒÕH™(m-~ ¨º¹ô8vvÕûEˆ0>@vz)uX/xJ{3ËÛ¹Ðá\€R÷뺮|í—vR4ñ +IMc>‰Ý8ˆž/óù[Z棑‹ski¥¡ÁPĶՋuª\O]Gó) ½ò´¥¸Z;HŽÓuDlq[¸†Ôy~¿ÁÈZ Àbµ¼ÞøõÿÙ@VÑÆµ£ïr›¹çEÇ0FƒñŠƒs Âõa0“A˜™ô†ãéxÎc±®Aehd›„¢lu–’†‰4™!úLÑð•5(ŒƒŠK-d@Aœ’øS¸Ör±YÎÂõr /È]{ð_èüù¸¹ o¤ÙxéuòÌój›´Ò‡0±ð7Ó#0`Ö;’ý´4ð$ uÇÔã ²{2@÷ß$ÑØ™õWW7L+ÿôIDATq6r•þÓ7(ìoÎíd S‡†©ÞÑß§²”ðÈÐÍp`~y   eÝß9½ón +à?Ä=®w†ï†ç'í/KÀBôe@Áé~vÛº=#§ÖwBÙÙS_}ǾyV#¶ÿö0xòœ|G¼,Ûãu£ÇÞìˆ!°@'Ì©Á„A.µIyA"¼`@ ÞvÙ“CûtØ‹A )šMãÄŽ‹eΕƒïÕy•]<¨ ˜ ‡™B"¨sЈՔ#x×&P‡Ó£pi‚£q1ZŰø8^i/ðQ¾²^„ÕT6eæ<õª“pcÄuÅ/Ç\ +ULë%ú[%B½ùqIJš*ØÃW¾ú­U6ò +nX=)@:¢?÷3!ÞúÓåÎì¼g8b¸ñ†dî’G€¯‘IÏ‘+“g“ +é¼{g¸BÁè+2H±m}Ê”$ ´è0½ñÔ²™j@òFÐ6 MíéÍߢÚHãOšÎµjü ùz²Áâ…bE‡1³‘ÓÔ…´hHrϧϨé/øÝÕRÀ·w÷î^|íüÝÿ›¶QC†ÿxóóíýÇOŸîò5@i:¾î(Z8uÀiÊßjB‚›R–<0HÇçd €¸Ä_ŽP|Q¤›Ùh´X­4š\N&+8C. 0E?&@õùØáv +±À(Óq3†gÕ9 p¼Œ¨ã "ëh5ù  ú¹à>Ÿ¯6—Î_XÍW‰×Ž„ îû¥_!UkÄ

ù.ÇëÜ»Ea5™ÐëñlãÊÂZJNñÝ@®ý£VK¦ €þ„&æ’üiuqÄ—3§À~‡+B.–÷ è܇./.¥ìAØýLÏÅÕÍÝM¢€_îs¼¾hûÞ"h}@'ç}éðùÑ%€z `€oÐÓŠùÑûã<¹þÉîªìC"¼Peä¡ú©Ú‘Ó¿¦ 8Ðbéâ­o±TøÈ‘Jv¹t{Ê3¿ yÁEÿD<»†3Âw¯ÐpqÕZ:xÛÅkÒãI”?È~Û®Úܹ.·]´8Ð,R‚M ŽM»v^Á!'ÉØ’H°‘p&gˆ<-lb:½AäƒÂÎPANîS~Aô´w^€H¶Ö—od†h¤T79uJM‚ø¤eÞÄŠ]¢Ú’ kÝPTó%†J÷Ø O" +òSs±QD~Äß…%iYCÙ÷öY‰ÊQ¹-ÅMñ'Y Þ;áNXå¡ðê_ ˜2ë#Ö`†mà‰¦.kæ7¶’=ŸòÉþÐÝÍÅùŇÛ;¿ üV§ˆ ‘}iÈ/6 ÀÏä À¿k†Nâ¨ö;ÐXüJêëßö ЊóD탩€Šû#sj `‰BúP,Ý œëLÀ3òp-ŠÍÑ÷;`m’!€L—[ε8º0™ ¼ãÕHœ62pÈ\­µ¼Y•FÜ·é|º\oÖŽÓ 0½ZƒÑd·Böˆ °X.óÁaÔæ•X:#€««ñ º´¯û!¨8õo¤N ׈-F`>®ÔòIÓDR ‹§Îî=¸¾\|&“é©F¡Öæ+já½C5hÑ€S #G0lü¶Äþ‰Ê"  ²Gv±¦ç.£Ϥ°¯(âjÔ÷¾ä+Ä‹Íâñe4™ošþß¡ÿÆûdeŽXTÿ3ð.‚´Ú7ÑÿÝÔ@qwr©µá?”hš-÷"šp^¨ÿ•ÜšêßçSÃû‡ò_\EP `›ðs¡áÿÅ;úš7ý’zoì%Æ=j°¿£= ÀÑ9f Îô—pzbGR2GÏ! „ÿׯ5¸ ÀŸ| ½ÿ“$2TjgžÐöÝx´9æàk€ +œ@1ËÒ]ë¤+'‰mðn—Ô³oŽØ¢¦Ú“$dÿ,%÷“þ©°*j•„RH +z&ا7šÂ†ü{¶Ì>s$ð8R¶Ä3™6G:~‘Ç$õRmJšbˆÓàz‰Ìá~ÓÓš19Å0ˆŒq`¯Í¿(¿V¼Î4¢Ä7”'È1HÞ´ ·Héñ#-Æ7ìps,+мŽ*s•ÍJ䊗9ÈPÝÝú£,j½ùLB—*¸ßh°.ò …R“´~sÉ +êŸ*“‘žžJ>‡¾bbò²fqkØiâP,ˆŽ­ù ‹³MÁMyG.±›¥bËu¸vj!\Ð×"Ȇ¸Ó¡ #‚,f›Uróò|²^p6ûmܤ|xgìÞ÷ú­* +àØIÿ4vÅá|î$cÛCŸzªO ýÎ͗䄤r—(xœ8Y­×Mã‚×jBåkü þÿ’¨(„Ší¿°ßßÛ·~MÂf»ÕhÌÏ<ßA}U ÁO¯šð{¢¹öiÇDcåUÁÎrˆå¿ þϧø¨YáË«üñd¾»÷€+”õL€š9 êî÷HéÁÿLÜ›àó~—¬‹nñˆTuH)ØzBø‚9Î{²Rs÷Þhßhdzœè5«Nšž¶9ìsó¯Ñ_ÂO§©¥¿å¼ë›¹B'ÈàŠ8Cˆü4ÿ³Â E© *@ð†?x+`™¡ƒàý;düºBˆ&’¬=-W;í¨eOHä<¹•[ 4ÙÆCVú~â$(0Ôí5Ù“G"ž\ýÄ0I dÞ;”ZæM”3´J’N›IXäŒÎœg—`Ȥ €¯i—Ú,ZIbü¶v’,ðK²g^uVä‰+êuµÖ~ˆgŽWhJáÄ›Grä­1BcoA ªbOˆ;¥W=“ÉRxM“L6R¥>D]0·DÉ–oª¼×øºžá„px[·‘Ù›šè.wD’sš€E`óT<œá•bDŽSYEÖQ¹L0 9'1 Z­Ö‚¬Â6òÀ°²z>ìaû³~ðÌút×ÚàKûoˆþén>"ܹ@{ 0 +‡ÿéýLBÕ?ï|› €@Y„ÿ½i!½çEԈыGèÕ ¿¥¿XŒ×UòÕ|5W@}—F ?€ÛŽÕü¾5ø§•\-yäJŒ>[ÀõIx숡2U`2]þeã«~‰" žä€B,¢™ÜéòküÐã'«±Ø¼çÈ×hÿªú‹åõj4wZÝõõf9¯SP’€U W©eÛ÷ ]Ž—%Y‰ø[Ú,Vd½÷ûïóe¿ùœšY^ÿñ€Ðbä'S_¹Àt‘n#ÓsÄ:MFh>ûi6§Þ¦ìœ1¹¯(Þf>¤*c³°H×Ôõx¶ZÀ4ðߦþÁXÕ#Éü1€hÝ/Ïû[ €Æ€PïÌ—¶û‚ýêm€_%=¾šàœ\¡[Ä~€ÿû>øß¿üpÄ?i _DŽ7Š(¦‰¨Qsàübè*‚uGéQõcÕivõÌž.’ú¶>xy41Ž-¾ù›@Ü I$æzúîv-w”;„ŠoA\ÑWœÐ _r5pÒªw%{}»Ó=– nêõ«‹:³II§œ­ÜðH üU¶É˜_¸Ò[ô<ªçí1ßÇsã³QêÑ]]ˆÇ¨33ùR‹‚õx¼DÙßóN]aÈI€S’Zi¸ç +(¹šn¦ }`~‰ ­VÉ «@ŽW×뼟0[/–½€kg +¤‹ñî‰5_‡FDç‡c¤…ùO ûo–h5vÐ]k$Ã†Ó 5kŒò „õf‰ôC=Ä~áOiB‹žöyäš¼ŸÂ“q:Ú·&çë­¶XæJ0p?º!]Škí;øGR”€%åŽÉS€7>$/y«7Ô' ÔªÒêvÛ«öDrk;<ìl+ØÖ=‡ìšçõä£O…2%½’”`ô@rö‚¹SE Ö…¯,ãçŽ}yUÆñJrá±…â 9ËÅb£@³’h'˜×Ý*¦8 H úà·!,”‘`K¸‹‹žÄÖËic²]$N02ξ JÕ…$˜kA_æ’«©w#æw‡«•6¼$|E‚,L«¿œ·èüBwWêrŽD6¾>©˜x4Š??7ùPüƒ°ÞG3Q0k:¾’…ÜLÀ}9%]ùók[ñPÙu¬HÒ«®Ô¥Dão}ý›W— s*_»#^ +r™ìž»©Ôß½äŸ7î>ñ¼ï[Zo×Þ@kÛZ~Öðàöêêm7àO¯ ÿëmèœÿÚ‘¾Ý Š¡¿ß— 2d."€F jšN~âD=õzáÿ½Z]‚øóùh,â#(ŒáwQ?Ù|'ó¼¿Áp=†W®=@-o0ô5{ðÿ½Ÿ˜L¦Ã~_Yâ_öÕàG™OGk0^½|t‘·$­c?ÑãwÞ/P¿Á߉–ˆÕRˆØAy؋ҽ¾^‹¡”fœÙÄ ÀŸRqœÀµ©gH$º®’¾öµ¼õo“þh¶dÛäý„Ñh£iÊr!àÑ\Pý_!¾ø"`?F€þ”l‰ÈˆÛÔ'3¹‡ð;ÆnAfsmJ²6[_#¯¨ý4[bLž´8à[l;°à×pXÞ~»@²Çˆ‡»µPˆŽ`ï¡7j޽ÀÏ"ñ5¿ùÕ†aW,Hßý‹n~Dåö…ÀX¬…óá;ð¿ßçþÙ)pHˆ #Óø—_?ýúë?#4 €pÏó ÀyÝ­â¿×: ’ÃíÍ?ýÓ?iÈ@áÿU ¼åÑwáZNœ(¹GíF>¤êÇì!Õ5ÚÑ£Ìuuɱ¶êÍyEªÈ!¡Ï‹²B×u"”« _®1ˆ E†Ê»rçŠ2´*9I­­9¥Š–…»J/Q¸Øâ´ƒdÊÓ`7w¡¦¡çb‘¾†Ó¿Ð¿Œ);7NãþY@5AZF ž“$UþE­>šo¥¿ °ÅqRØò´ãnÎO7p§?¯A›vr@œ–`dR¨ñœýpæßeÒêÓœøã¬J)J‚-­Ü²ÜBÏË·¨¢’SÏä,i¥”¸œô[&×£®ä×6së +Vá²…ü¸Dªú±o^5T‡ŠR¶³)iÍÀÊ^ByjŸÿG@@¿¹»ÿthn—¾VŸZ{+ú‹ÿ[ ÀÏûo„”š ÷úM&Dø¦uĪ¢­ЦJ»yRù ÔN!©‚Dì¼À¦Y°;ÏAl›‚ÕóÙ´4ßÎöØ”ô¹¢¢3`~Ñ™¤ÇƒQßY~¾Aè|AÐr4D˜)l.á¼0:àîŒ("j:e`</Þûá¼Á€ýïQÄMs8A‰í¾È/öЏ×8² +µ g—EŠ&“õ|·¡ œ/(î+ðp^­†—“Õ„üçëÍj2¸\õ7Ÿ LÀó³!Ì# €þe†S'1º©ŒÀA àzö~ñ^±ÇìRÃε¬¸&4GÀ>,Õ’ þ!›ÒC ¢ÀëoNN`Þ¤€þÌXÞôjsNOŽä?‡H¨¹öɶéÓ_¿¢êô墨¢=ç×éB¼—®:å_£?î­-¥úÇ?Ü\ß\þ k(ßZ†®½ßÓð­<°Ÿëjà/Z à_øÏZnï?ßÿs³Ü^\Ðæ´¨ïkˆÀ²Gø§X95 þ+ ù»|Ì\Ð9<°¤7Œê¿]µ¦¬o…X½,“þ+ƒç¼¢™ÞVè¼¾¶¿oKö?ó÷áâüêöîÓ]^ÂÅoq»è­}µò=¡C7?ßíã? q\iÀ…egÈI¡¿)¥J^H?nÔDõþ&ÌŸøFÀ"°ÉpõÀ0q7`ŠÊÍ]øò»ÐðANš©l¥ +6oF¯Öâ„D… +³ÙF#Ð~Lg(O‡Šþ 'èhÆ!Y|ïüx±øá C`49Ž…ùNÎ'ªüð{®ÕÅýT„\#½„²8`ßPo¼ÍÀ·½ ¨¨r„ZóÜ£mïsàüF +È7ÅÏ À¿ýY =?¿üs,7žk¾¡uHNÈ@Ÿ`_Õß]‡ÿû&'Þüú)/þz þß:8¨ÂŽpûáò¼7¼üp{¯ Âïþ‚&?toÿåþŸîIðM/ëÖ2@dë+okÀ‹áPëg+aGí^> ¼Û•ê$íãâ1l¥ +ÔUx‹bÿ×"Wh¿›3s3ܾ+—âò1OŒmZÕKó×-8à™@1WÀDMtC5dð4auŇGÃ'Nwر½^Å,ñ%'R…¬èExnSj¹%½•3˜Ï=J” +ÝÒö¬]©4“n9;ÆZ¶FѧËL*ÀªâY‹äxWÂ:º}þuk¹×0¿¢ïÕBˆp¹j:uè.²ß^é(žÁÏŽAÓq…\N&úÚǃ±.…P>ü#/&‹‰½ –N¨mÖ1çvž<*᎑J"[¹ã,ßÝ5] ¤NZ$Áá¬ãàÙt§Zÿ’ÿëÛOº´4Àv) ·™X%iö—>:H‹ÁÞ:…ÿû%­¾Pðm+Š*¢zQD€ÈePõÌyGq |ÞÙ8ïÃ,Æ €8è+Nª¨J`Þƒç< Èq¹&Žf¬/'kˆ¹@°/ ´è#M ÁÞGðjÉ +©Ê™_å—` ¾^ü°€­ÈfŠX@5æp=†ë6_¿÷¤Ý¥&×dˆKÎcÒØAJD^Æ+ ü^ï§—S?V´2r%0ý¸áðÜ7ˆ£÷ódØ ²¤ ¹3‰ g…ÈÀø=ÌâÎ=€±T’—Í]#\#¿PJÄ,Ù²ú÷à¹O÷-ùqâÒ‘/%_?ß‚(CU‡sšàO§Ç‡ò¿™Zó< Ÿözäñlò5ÿ©³d­ÝýJŸ‹ö9àæ¨ ½ÐtÿîPPÿ“Ê🽋à—û¾ÿ÷ÿá²ß€¢{u¤Ðáž1 üÓý¿ "˜Ûv +€™ñô¿m«h8yÔ ´»yHøvc@ÍÝ%â)½d1œÓòÊ™AËÕ(Î +ÌßcyÆÿγòñJKެsÒÎï»~.$X")Æ»" &‰å…æ•(îêL§»ºÔöRì¼™Tc.d² Ýû/ U忇«à ÉnÚƒüˆ5^cï–“Æ÷Þ"0™­9’שŸJºê±Êf˜½Ÿ[ùuW_½¢J·"@²’*99mžâÑXÍyK¹¨y´únuêVǨá)Ïw”Ú•.ï–v‘ð3h—>{¥²m1¤dFà0¢·ÚnÆ·Ž­`-ZÂJÝ@qÇs/¤BéçÓ­‹{ùDYDs»Ž¢@—Bçÿ«ÁííÇÛOé®®þ‹6€Æóuh%¤X"øK•¼ +dD¸¢ €ð¾¥PÞœƒøKu9î AÆBÅHôËëi8úÐ7¸(¼¶2ãñ8ïgHõ2ÐÉ™]X™ òGYFP)×Ñ%ÄŸDLjHmþl‰Îa1…J¯ÿ‘”'Î6ÁVÍô}%‚”Ku½øž˜ÁåZ)Æ au¶P‰Ý=¹ Gšä…n0¼˜‹Ãa¿íY>ð/ö×È}µCM67ËÍß´…ü’I¬ÍÅèûïËëEf>ÈSÝ)Å"\O,¢Â¡ñô¿^Ný¢~Ûòç'í^L6¯£s"¬ÎÐÀ¥4å?†Zó|‚Úãÿíˆ?òkœ~˜Œõ¹½½Í:èðW7wW; €¤FÎ-v5þíлjW÷€šAxû©Æ¶€{‡ü#¨Ù#¸H€ûCÄŒ‹ÉÕåøß,Ô±SbðK@¯¹Áõ%@-'¯Yv]ç–Ê·õŠÝ^Çwjiû 6Ý:é39±¤KAïF¸íê&ÕåøUH¯‡Š¡7Ƨ"ÚДN¾ëW/^¹î‚‘§ÇxH;,ì†o '\b›[ÚÕJ(Î}ªèEå±·çPüÑcõ^õÏSr…\L.'ü+tP¬œÙãŽÏö°½â©ñZUZ;GJexñLÚ’~Ù “_NÚ>þ}ÿ仚†P ä"¿®æâé=Íù6©ºZg&STÁù7f” ¹ï(Ö9k.OÌy…/ji'¡:â£{Û´ZcNB[ªëмž+ p5¾F°>+fÎü³3z"$nÒíi;~uë÷ +ÖŸO·7nî³ ÀnÀý·øÿÖ…€@…[¤€OŸ>ÞÓk¼ÍB@OXDÿø¦9¾É'j}Á +°X¸0îÁGf³ÍµŸÿ™ùÂZß` - ÉNÞól<›ŽÑYIuݨï€ö\M樃ŒÈ€å­:ƒã³Ÿë׌¹%NƒzªèÈdOÐâ?@½¸þÁF®¯¯ã;C»¹Ç³Íz¶F½¶`r­`®#ï hgú©mïæÚE°“%¯V~f€"交¨Àùx<—ë”U{ÀV°tüËjÀ1‘¤*Êö Nž +¸|û†àáÿq±¨:®•oRÁà4©æ$ð‡âx« ÝïçÒiO[ÌC @Ôü ÿ ¯6 €cR/ùÙpS¯±ñ×¢ãúÿ# ¿‹«Z@àGøê¢³ø@ß2sSÛ¿D÷z(È_¤øp Àþõ./ù_ÿigelÿüwÎaè÷.&Wvw®@r§¾t(§ÍÐ{ëÀwˆ)èÿCàÿð€P\Q:ñƒ]÷ U·ø³òŸaà fÕõÒu*°ç×Y±êB²‘ô÷zÐÏKøT¿Oeè6*¤ +D&ØÖ•=[RJʉTÇ +Ðñ4(˜Pö24H€#ÑB7»¶çP€²³$Uvjï?µî’Ÿ1s!—=x¡¼Ý‡qã[ IgGÂçá§Q»žò5îâ×G÷IS?ÏØùÉFÝ)‰äbQr)Ò·¢ÕicÏ­#ý©¶0°ÿëxË˃';·C @Ž2¸^  ¯;7ŽfWõbþ(Á#¹”9|^J8wæìERh¾•K‹}`ø.Ÿ­’Õîïá‹î~oX¸þ\ºÿXózî"t_âùªV‘æ¤ÿw7He10‚…üZü.)iDø& €ËͬÀ*C"¨‘æL&Ù,~X^p9Î%4퀒黎I.¨§Ë¯-3r/$ª(»ú¿¸å¹,¾V8V +þä Ùï)*ˆÄõ'júh< î!$c¦ö~ŠK5iÄóÈVÈÕ…` oÙüðƒ– +2ë-ç®ÕÀI ÂC$‰I›ùO^É_ë?™' Š6>×T‘‚³@?;ÇAˆ2› ȬCüN+Ôv‘W œãE¬\ñ€43¡p8™¹$€ù»" 1a?³F‹ÑB‰j¶Ù,·4¶Ìú¾ý÷ +J”TÃþ¥jO ’\_@àmë¡ ãT‡€Ã9ç´Æ}tÎï¸Кç_‹¶Cý¨^”´ÙZj +€$žß7Ý¿¡Cý‡ŇãcW7·wm€Cûõ1€t ªûìÿÎ1€šè$À¿ÃË ÿt…ìeu‰ÿŽNø)`¨·~¹èbˆ@B—B_ùˆê–V_šCúÈxÓÑC²oý¢ýtÂ%¨AļŠêkI¡ísLÊ-t¼âŽÃS"&n<ÝôŒd¶JÀ£éT¸ a§"BéÞ9oiT ÷íÌ­Ü#)vW§ .Ê;ŠráÁž +ðÇsìWp¬¬\¨ë-XÂë~"¸ã³=l¯x*;‹ÓD¨àâÙîféQ[õÛmñ6fÛŸìºàx$4é¶¼[´òŽc›—\ųK˃ˆŠ[¨ç—|&Xzö% @—þ¿m6€„Î0ÀM\·7W[ €_ÀÖÀóÿ:_à÷Ms|þI@ @ÌÛÒVJë÷~N9ëãKX”mPRP4ã㦣ž)£ögÞݸ, ›Xç’Ÿb"Ÿ¨0;5Žpš Æ«aA);Çã Ö.±È¹æýl¼ž‘-\ïWËp=ö{À‘… øJxéÐH{4¼ùõë,õ@æ¸N ¤ðü¿ÃØ=Û0¢ƒxÖöß$̾€Ôöý-¾úqùcû`áÿÍÅÐ\Áö¼à´¼Ã9>?× ‹€#W÷Vøüz5¼Bøç²ÜÞû9ÀXè þüç²Ü\ž÷úþ¯G.ÎÏ_’“ü™ÚB‡Ûw¯PÄ µCO?êiç%¥{tOÏöØH̓C…2¼xÑRHbE:ëÔàÉ­ÎsAÿž^W1 öÆÉâÕwOYìZ¢öóFÔ™¬’º‡`{lWuÕ9ÿÆIડ +rÎ ï,°=@¸Ñ´»´e*¿pQ%®”=ƳÜE^±lá§yUÉ eE-M~•~òõHØœ±ûšÀ}v•PõTÏ:“‹PÁ)ÍÍ}÷Ëiʼn/ƒ¹=¶H*OÃ7··&{¶Tõ"P~¸÷-ì8 ƒ\$j«ä0¥§[€œïÏØ;¶³kç|ŃÖï¡Ññ0‹èÏø þŸ\Ó hPGq™6oX×@{ À׉‡òquõ®^͉ÒO,€&Bd)ÁlþR%/$Ð?F€¯YB{Ã@é¢Ù×±N„©P 0©¹š£ñÀ—¿'m'ìƒWQ{¡c¿–wrvŠ8í$º©3èò~>ñ ²nPŠ4¡'^GÑØ†€ö|ì +ýfçQU±üÉd´-6kθ¸ÈW·\[*¹æˆ¸v DÅ‹ÓÙ°ou(iȵ×,G‡Æ«*4ÁZ$V@¯‘:ˆ½µ!€±Ð¯þ+ 8pÖO³Ó`\(i4×n€ÎOu/G³b‹€±ó,ÉáE®«X^"u-Ãõ#ø$4 ³$ÈgS`ø˜@€¶þ‡EQ-¨¤äðÌ?2ÈCV½Ðš}ãä¯EOXöæe¯´ü¸µü9“·€wÃw~@æw‡ ¼n°}`¿»ÿôùs¾ fPSþnËàk7 JÀ¼ðæÜ—Ùné8Þ Ô@§\·ußä€ó!ýÊq d’N„Î0Ýf6ûBŽôi¸tû®¶Ýf(½\QsJ°t­œuýjís4DB¶¨ºs=§-òﮄ‡©¿àÚLNÒß<[øxµcw^Ü·S·DƒÝ¤›®ŠÍ™\=óŸèE¹ô`_Åïæì,»`üs>÷1éÚç°»bȰ´âÄÔ¥„Jö‰RWº½×+ýnÛù'º€¶!‘4ûT Îî˜ u¨ »¼L¦(ÁÓl:vDQÅ_ ß8œéõ @Ž&šë¹Tv» PåYWtà¥YÕ­‹Vÿ¤‡ëÏÎèeð4C¼¬z©Ý1nöuúò-ý¾Zý³~îÐÿÑyãÂ~o¿î›>soàÝ+ƒÝÝý|{ó³oÚï\½yò6¥ß¸ù€Ï{!“¬Œî·w·¾H…þîA@ë +€8TsŠ›ÍÒÔ;  oCvЏ©ˆ„âÛ 7žÖàÿ0€_ô›ŽVˆZ&ý““S¤é~ìïÏñ—wûj|`´.£éŠým’6Ùh:ç*¹‰Î(ßéÆ§Ì Œ?€–r»˜ø™ÞP:»Vpêbüå"ƒ ß«yÇòï—Éω|€÷d¾ã£°'+?<è×…æ¿!xáH6À2œ×c—ÿ'b–*°HÈêÿŠCÚ!…4#¥!%&%‹õòýìúz9/ Ä–Åfqnuh\ƒÿ‡ð!îȶ¡Œø2 @Á¸sÎÐü/òm-Eûsô M…¾v õ\ÅÚI¬Úº}kž-âýv·Œ ›à{||ËÃZp@³DðØkø2Ñðc^¨Dˆ\ŽÐÍ øÚ;wù¡F?’ÄÖ+»sà†Ã5Œ’œ_`ˆà €,xJv”ðv³gˆË޲:K[cõ…ô•.ÿpW›ÛSC¡Ã (‰%B]'¸ûŠUôOv^«ëDê÷É"öêî +}®3ÌÎ\x¾H¯¶g—Nœ„o]Žü]øy‚K ´q„Sÿœ$1*¾2Ž¿)h£ìÂxkØõÏ#´–í•»8†ʰ-8”"WÒ^(ïÝE#ÅsWµ É9Á›o^ ǃÑ÷N3þÞ™Dƒþè{6\ýQÿû½®®¼Æ\/iúãÑo+úÕþh>_;Vù~<– «ÀÌw8©o~nå¨lÜbV Ý]$tÕå±>âúò€¶ßH‘Ùš°­&W<àæÉl@ä¨O1ø” “WØÇ€êewqÕYy´Ýv;러á9·?Xý,º¿ÿô)S,t|<ÀPn‰ À5?ÞòSè¿ûøóíÙ½!€üj€ ôw2€¥ìÈ¿SE_¡6ЦxG­ÐÖ ïrñ— «[té¸ÔûÞèë ât<î÷F~¥‹Î;%‘_ÀÄ¡ 5 åðϲ¸4ð(ùЈw¬\kA ¦¨ÒÏùu—!ÌAòr.å¬ù6‡ÊPT«g ä:;±NöïÛñú‡M]áR`u2 W¸ÛÆ42€ ipPðöºÖoÕøÉÄmû¡í¼ì Fæ{€›÷X €MA»0f“a yާæùÙd “»sð f³z¿oŒ¸^_s%€*r^_ÃõÒA€åz®-€|“|Æ@ñ|<'1õu¹%óÈÎpíߥãkDËK0?×?žOÖOç‘Kj(äõõ‚ O@X.–Ëp½FX"ly7&2>® 4™Ù* +už‚çQ¬R~fŽ˜-¸5=,ûs^ŠÿDý Û·æùW# ^ÿáïÐpuóc,™à$ߨZj@4HMœPL‰KoN껽!j‘?ð8µ¢ÿ]{[ƒêÌZÔ·ÎŽûs;‘^¿æé†íÓ7ˆe¸ ëôaWÃá;_èúŇTeØQVgYd“¤c|¶ ðB—Ws(§º±.»‹Ú¡×êzóá(TÚWGík€-°Ý/ÏÌÙ© ½½Î8BÁüu‡¨ƒYWÌgßùéû k$-ÂÿYž +Nk²&.̾¯ékêì·€áV8O‘.›%’)ÓŒ+dµx’‡rlòBç‘VUõwß}?úžÎ! ½Š‹ˆ+ œl\€ÚR'4 ÀX_êMÆ¿ý=ÝVYF3ºæ Ûxla¥ÂÉÐÁíiWê .Šr¡Jzð«ÖÑ®àáÍ´.¨_¯äzQKfë™CíZ~Í®¥*ms*f<àŽYÕ‹J³á8͈‹Dí*Y¦ôôJÝ\oCžwÛþ?[w<éŸ!jX +'CçÔP ÿ/G¶9ñnŽÒ;Ÿr¥ræÄ¸žØï'ËV Í{¥äêXZ:Le¬¨xFawPÝy“¹r.Ž{z-Æ“ëbñÿ0ÎiäùÝdꢞùš0P €Ö€iõT¾SÈ/JŽ1ÌW0F†KØÊG{7³Ír=ŸM3T´Ì§«9\Ëc <¯þÿ5@Ãê!B¬'äf¨ñ|m-I~  kùžâúùаM¸ž×Ü +Of ïÖ>)U«j¤q=*öó-rãG-_™€jKvÆ~ u³3+@i qóW£ã&€½9Z2 ð‚1øÿclö7Í`ùúQÿ!ŸÂS 9²ux®zßÑùŸÒ×âÿŸNýÃÍÉóÇw¯p7)Jϼ»™õ˜RŸéO(”TH_ €#oß¹ +@P¥2¡®3ÈѼÜҦό+(y`0t`©¬¶Wn†Hȸâì\†¨<â_—rV~ ÂÖŠ9ú/ ÀY¯ôz(]±OQœÅ}sH"!…|J#b±„Z´¸Kø.bAã·³"IšÈ¡ âr¹tÛvÒq'™P•”D-cUN* ]I†‰.ZqR‘¶c€þQå#ì[è7Ë“ÿW,fëÑB Û$<™Uq“e¼u„¥¸¶Oý[ùR3½Zë#ÁPà+€m‹øU‚©Ê®;ÏÞ|p‡tàÕáy­þI/#ÔŸ¾‰S?UÄQÞ=tG®vîýÍ.¼Þ,çìbúKhgˆà|0àööæ£Ú?=ÍφVxý:!æ7üÏ–®¡ð¿~¹¶#ëcÿ®%`CàoV€/ŠÁK…ôO?ª$ů„ªTt¹š AL¢“J7àl:š+íuŠ"íg—s?‡Ë™Cy ÇõblùÊÈýçk۴ܨ"›æíÜÎþóÓ³ùbí>%‹ÅR ÜøYB¿ý7~3Å×ðÖ‚¡~Àp¶\®@8°LrM ' àA¾~F8ƌȣú¬°;™¬( +Ú?JùÄO"â¥ÉNE.…ìÍpXÆå >µŽd`$á>a5ž"~PÀ \ÌdFﯭY×Yœs/ò9àe¸æõWM€“å"™l)÷f>O³x@][øúÀÑfµ<ñ-ý: @Ù«Öˆè`S}Áf,Ñ¿ÙN_8iñ( ÿø·³¸ÿàB@WWû ¹àþ[ÞÐ5Ñïú$@S"Tzd€¡¦|_èê]{õ—R¿Ž8Y…; ÀΠ—¦ådET:öúmV&‡ó¡ºq+ÝâRA\v”­7íötoϵd§¿»x7JO¼êœ‚H^«ëœ Rý>©—O#zã K¤µw;âÚâ—àU€ŠYz‹@ÿÎygH¤¤Áf}µh¢;ÁŨ¤†• : ”|¼N·O/çbv c¢Ê7…’RäÔ‰ÎÔKUA;‚Uñ¬ÊmDô“ïÐèC‚ÿéH[ØÐ÷Ѥ¶»N-ÃñC €ê¶é¸Ë%ÙI·‡½Wê ¦‹ôìJºÿ ïUø”Þ`n-+}hëY±ËáÖ€m¤íµ0¹â÷ €WðK€–R7 |êy|Ë®w:Ô0È€X¨óìϦX$ûIç;I»NÖÊèxwsû‘NƒÞÂÂ&R‰N4`Ÿ>³ý¼V¿ÚY ÖOjê) +tü#èÒǦöPhh© m~âã×ÞÀå:9 š3ýIAàŸ÷{h¹ã©í×ñû)Mo‰V=wÀx>é!ÙK®óï;ÁIsµÌFs`—4!UýÙd¾Féö[zSgýû}Ò•=çÅæz³a—9×”gãÛŠ¨ñ\Zȵ¶ÿÙbÇ5»tè lþ“Ñj6G@ŒA1׎QáVãÉÊÉ”~ÎE n… GsùýFï|²™ oÇ$áãZƒv)Oe^¢5ñÏ)¬GˆLJZû'£álÒÓe4o&CÄ–È/ÇõßÃÒ!%Èvõ€h õLõwb³Ì@ã=²ŸŽXöÖˆÆù¼$ò§Çpú×~ àÉ¥·sÔØ…òZ ÖþñÁ:´ÜBÿM¯µ8@ü †ÞCLÓ½D`jÍê0ÀOß9!ÀjT…ïúñ¥±r$ˆO¥JŽ(œj#È);ªÙÅAý°« IáO_9i=¦G;·ô‡ö™­kT[ô°"är—3ºÁ„ÖEëÌ>Ç„7t\-~¹ Aää’´¼¤§> Rÿ +±O…Îgôñeý÷[óRöÁkÂbôË Q‚ØŠ3‚ƒàãcÇÅ„OXM÷[§Cå7ì‘¢n?úc‚ ábÞJymél8tUN’(ÖõÀ©ª»ÝZIM³ö9Ä/Wñ% €]q?–|»F%€ç[€üˆ ýé¡ Ô-ÓI˜È •‘ÆküâKåµ¥xZ2 ȵBÔ*º§u?ˆaùÙyö À6j +]—:`/(*Ÿº¢Orw­þ©Ï8’u²ðÏy"ä× $þn{èᎦ Àö-¤:ö¼Åó5ùkz€²ìðÿml«!z˜šsÌáç8} @æþ—À¾3“Ú/ÝiJ°ÒûöoÜcr(Ú¢¿ûøØl["Œg‹ëë\‹FEÕ÷&€—fÀ>z«è •}šb&€OC¼œãN¯Ÿ¯€sÔz-.€„à$@­Ã±¶tR‰­}ä‹r¤@sÔeåÖÉf­0Œ–ã%¸¼DOƒ‹¢ÿZÌ®7?\ÿðƒÌ Ü6rR½7®ââ?"½²‹ +?â@_]Ú9ùŽ[ë“å +©%“ò-Ô`²^Í׫Ùj£ìák|МMç“5’¶‹süÇšà|J)–¨Ÿ§é!EÎÆkK¦ ðžÃåË÷ë%¢Ò{ñ±x BncÅ€E]Nú~ƒ¶‹IÝ;ÉâþçýÔ}êZÂ3~6©Œ'==(Â]ðßÑþ5ù’žC¶T¾ù—Ÿú¿ênkž5âüv€¬ àòÇŸæ\ž·9üƒð6aßœ|€Ÿi¹~—OžHùÒõÁû¿©w 9\]8ÝÃ9O‚è˜GPÇ£LÐd.‰š%Ì–Lš”_¿CØ"|a²#ðW@Üê,Ó=º§‹{ÉceïF‰P—lLì+V]Ð?䵺ÎI1 öÆ]G½ÛìŒ:`À·N3®Ç¼¸\qùÈžß>¶¥ÐísLÊZßì›Ë‰^þuIÏø@Í£BìSƒÝ¤!µHJ©_½ro×õ[ŠŠÌ¾Yìý:²þâ¹HZ¸K¡×ÏëS“@·›ž@¼¿ÑÌ?¼ýÙà HîùNÉÉ_òÉ>) ;Û­!%4Ùª×T€žü tÜ€='[Iv¢å…ŽohãWR€~ºÎèÿêþ¸J +á”8›¬}kÊ€žuŸÈ¨ÙðØºø7nê¶…Å]¡ù‹¢þÒ:ðú,!¬Ë¯ÏP\óoÀx($»]P¨ò¬+:ðjx¾VÿÔgF¨?;}Ëàÿà-ÎÛ±;ìÎü6]†¶Ö³“ÛÛŸ¿¶ü~ÞÏÃÞ@éÿÒžàçBÿ&ü¼o0Rð?cvèJÛß¡`¸&°{’ÁÞŠiÛ©GE`Ê7ÞëkôÎù\mÙ™jÁÞÅbå༆ãé¼ß›¢Ã¦Ó2_«³É k§ãËa¾€ ðÓÆ @&3‘߯îécÿ§ñz¡7ˆÃ9.ú?àGzËÑ|¼t"þæ[\Ï®ýÀ_oœ÷/`FX.6Ðùj»Þ€væš%ü)tÀâ°?Ÿ++Ï|f@òÙd5—ëF›Õr9Fê!{Š'ÞÏWy0%ˆ†”Â-›Ïkz ÊK}#[h0ëùæß‹ñõ2DP©ÅûTêû1B +·iyÀuV^öΉþ[øœïDZGk6†¯‘ËKm¼Vã;²ÛÁ€¢šP³Åÿ–Žçñš ~õ×cˆÎøÛYÜš žEõúXÐüÐÁ¿€8}s’ºA§§J•¤•Ó¥ÿ`µz?õÊ~žî¢¬ãÛË«ÊyE°M­Ð& ·V_6$\’t@€ä-ÒAø)5á)â¢A¹ìª³,²[¤c|d ,W;'nCa/r+J ºž˜]¬ìö‚µ_¼ì†9*eT¿_¼øë¬_Ñj¼p Ù'sîãdô±Ž^W{χh FÌĨ^®]¹½r|ßé‡ræßhñ+cŽ3-Áƒ³á€›aÄ +pUxhØ·¥9u¢3õ¢«ˆ#‘âY5\”¤:’’ì–•ØiÜÇÏ!” ¿  €~% +hUu-Õ +7› Œ†Š¶^8&»OB³Ùewp{ØëYg0]” –ͪé~9­Kqâ•jõ-[2<ÇöO2nMØÖˆm„ “+poÅ@%ˆ¤kÎ^$jypÕ@‰½“WÌé,ß¿On'}$AþZzÃÝ»s +¦yÿ˛ȟýþÔw»;{†fÌÀ>¡{hHE‡XÆUàìõëØbp>ñ%ˆU±»oGm3àgÃû›Po˜¥yôB ÎŒæ3Só™=ý(¡°^ÏÖ4¯1‰¤²¿žÏhÀ#^4Cö ÓzrRŸ|†¨M*3Ø+@lî3a7¦xã˜Úx>@õïæ³¿ß,H•f=™gëÍ:¾œqü·Í›õid¾Íp];K  ³e¸Ø÷Áo®ùýšãx ç$ްšÍ3ô`F19è\ÎÆ+ Z°å2RôJ[ø¿ÒV1N¦óõ’,çˆ#ãXäÕG7¢¹eóùíkf¤=QȼDˆèþËfö,RóáøD)‡–ïg¾ð´Ÿ;¦@¢;®ÇKJ®±ÅºJTâù€2la´û=lOPtJ4Șg¿9ïÚ²KÛ{¦€î¿' (¡Ö<ÿztQxÿ€vsP¹}Ù.€šxõá&sÊ`Ãm"@ö”Ý1¸2õC5J_Ô +…p ¿ºúÈSÍÉÏ!íOÏjÙ8ƒ àU+”‘À0]õ@¦NÏá-9Ïýj}â“”ËéìªW¤w³Ïl]£ýâ“}Òcò·kn)´}ŽIÙÐ-jÇe#šKÒò’žñš‡t…Óå¯EñD¸ï¦äðêì´Ô¿ŠÆ?Ñè;JР˜±¡v9Ê]Þ¯œg`ù‹ÃÄ Àï"tG?]Úžœ©Ö¾rx¢ò¯ôØ›ÈC"IËX•“ ôäOèã€ïè>ìBjçL@çÿûš)Ñòãí¤?M¨Â¾`ïdª&1ô††ôÃþd8ôµ)z Ü£º¡2Žê  GãF¾;Šg +Z Q«üÙ@Ôå ¯¯Yº¿<$¿ºÔ€Ý9ÿ¤N\1¬žJnzwÑêŸúŒ#YËüõ¨6ãïÀÝ‘ ÕŸ›ž9¾x¾{ €ŠVþó‹_ÜJû—Ž[ìFCéj:úèh€ë¤¼¥Ml-éZj¹7w¸ã³£„,ªÚ:F™[¶³´!€މ‹™Ÿ¥ñS5kšp‰f<”®Ñ²}ûn¢ùZ¼Ê-:úrÜï¹PK†½š}†Ÿ<4¢%— ¥tÏ+pë1š8:òtŠÀàj{#Ü@ìr3r~›úl¾žƒÂ«Õ\›9lÿo™­—êçÀå ýVç³÷׳k¿®‡. ~ZÚp¼°º¾ž-×ãåoó„'ÒÒ€èAGSmÀ°ƒÁ#Èq àlH²Ñ`ŒW˜YŒ=rf€…öÙùŠÃhÒ9¥ˆÕ VLHÒ,òoA¨B"ˆÜ°X\“%’O†àz½˜Q<²Ž°µZ,—×ëÅõrûIÁÿ9}U=ÚÃþ ¨Û¾ž!”@3ÆÓs +ù› øßædàëijéù7ëçQgwxSû¿þ@L[Í¿ûZ®ö-5à8¦Åªÿwð_.mð"ÂÉÒ:E´°.V.ó³X¬–$=rRÂ\o ï~ïÈDëî©ëÅz³¹Æw‚Ä€|PðöOõz³ +QPk&Oÿh.´” —Úåñ9¥n>¶+ç¬èŸþT¨þ¥½QñZóü+Ò1Àñu¶€ÝnáåÅ€Œ[äK=VA¬(ébå¾à‹Î…pó#b†©^èç—WœW(X ›ØÔõl§/ï=ô']C-“§ûH¾G¥@—ê,ŠH JôF#µÐCÎ(™Jus`B>p¤<µu”pÍrµò¥Œòî¡þøy|Ö€Š]·&´ѯr‰[ò€[± ÎIK¸Æï¹€Ý:7Éþ˜§Ï>É:»o8 0ÚÇíÏwOnÇ,ö€wuоX¿Bÿ­ oø>TK"o-‰ß‰êuH„ ¥²ŽÒZÌMGd2N‘ fSŽ–  (G¾ šÏW0ç^Í<Ö·éh>™Ž'C~†ÑÐ~½ÙÐÏpÃ@©wˆF ²oVKßσë÷¾- Î¾8…RøÖV l‹ÖÉA0víâÕ|³²<Ó¹“3ÙÉ€‚ÂÕrîÀœª³Š(Ï|²ÜŒÆ›åX®”#Äóˆúú`"2h:6Óž/ðPü”Ê"øðÂ3ïxéÊEspdüþ_×?m¹%ÿõÆ‘P2*0&»Òþ“5lcxHMxŠ”wÎÒ–Ž®€L T AÛoÄpüÛ «yÒJ;=øi*©á!½{w!;‚Ÿ…\Ÿ• +ôÖ’%]7G˜F®à•/‘ÚÙ1jˆ@»9€n·@ÖãRhsŽJSdîkyDà¿á5G˜øˆæûã% úxüW»§§?îcw¸úP +o¨-Ê`  ßÒ‚tg¡oXîôxOS.ÂbºÍléí3[×øÈ`húH:Ó'W¿Zû“rÅÒWgç2D¢—]Ò3>P9Bö®ö„ëºäpWÍ.á3•ž×:w¦Ã7WöþÍ£mß•™_¾Â) µV:ÎK Çû}‹Gê©&‰ÚW§˜cUéÌ¿Z¡[ê­¼îÍ2Ü­Ì™…[Q?r¾#“<àc€ÞÙÉtÃ^Mé<èpPMí,„þ‘3«4ô]¢e†‡üRõã`C€É®6sÐÅ?,ÅkKa1Gg e[ßÜ‹‹o«K\î(9I•D‹šÒ×¥NØ J Ê§®èÀ“ÜãÝE«w'téËüõH„ò/Ö+ÙÇ[D会pJ5¼@7 ÀÉÉž¾ÿxËÇýC{“÷,ÛŽ6]M‡ÿéxö,Ѭؾs%û™]% ì~éù¶ºR*ë(õû"@gØ7ìDg¶vðØÄõÓ +r1[¨Ð0³-Ñî}ô|É C€’.»Ú,}Ã:·æ|@ V-r@tt®©¤}"¡:´ešEýèÔ¢+ ;è€DàO¾¬øÖ ‹".pÂör¼@DYe _@”\(Lq-D“‹·´q×3A}2Dæþ×ëßjž?QÇ«¥8jQí.¹Fºh‰{6™¢“O¨TpQ&Û\zNÝä-õ ìˆdÚ&db†ø²Öâ«ÃaÇu&U£?@Ýiÿ=iMâ!Ñ(žÚN{; €vùØçi@G礱Xvs ãu Ç© ø4•áà‘ÐæÔ¨Âÿ—¸ÿùqìºö|AÏdd>¨Gí7yH2Ÿ;¸Å`À·€¨g4  ´Ýò@PÍH&(#2œ +EŸ.oúV¦3a?¡ý<è¿ Ã53<ÔCƒ ×ý§úóù®}HFdDþl¿Eòœ}öÙ?Ö9Üg×Z{í}$ªïÁZ\éDÀããå +9ßçlìŠ*öª†ë>Ä7 ¿ôÙYvëþ—Àùñá0wæÊÏYü +æÜ2_ t·½)6² ÌZ,O´¯ÿ½xòôâìèðäÜ·ƒžÛÐþ`¨€rÇ RÇÉ‘ÿ£SG b:PHqòÍÎÔç?JÖÜö—ùrÆÎ²Bv”»>5}!­òM}ŠRXQµæìre³—¬}e7Ì^)Ãà‹Tàât<…€z|øUΖß~œÈŠò¤½JWZö©¿ÅVLm“È߉€¯LkeqÈÆÄü¢îÝé¡ûôçÉàs + +Öì]ClÜw? Mѻ”½7¡Âªäé9œkX]ˆO{oéCß \/là|¿²D»@ãÖAߣ£úÈ,ÄÚ³ãÅd¼¢;¶› ÿXZÁU²îT¿÷÷°mœûí¨à´n×ö“ÃÊ“ Q&SP¸l*-”螘 øõ†P]+Õ¨V—a„á+ŽÂ 'ó—TöÔÂÏ3Ä`M×¼  ¾tÖYQŠç¹@÷wÀÖ`pP>pó\Ðß@dËúÞFé¯ × Ãùˆ-bÀ9a{½\mëPÍ @ò똹|:eÄO‘É Ü«ëI#ö V€`+Д’Âk‡»ó%²fðPDиîsˆîk$šqÚ¦:>ßád2Eu(èœOF@G&X ®n»éƒÄ#Øa \Y‹B©+žuìtzIhþ ~æ +œ/º‚Dø–kß°׫‰«÷¢ÊGß–m9ÍîÏLÖ¡hôdùB5,—«ù9ÜZœ# 1‡Žän-Žì“r!<“Ú sЋѶ¥è2ž ¯#µÀu‰¶•Ðm³OzS&”`2…­…ø:edb Jr-‘ËNØ^6©ÓÛ&Öø±Ç%6$©pð SùRQ•“ì d Ÿt•À$áŽÃ9BÄwNà«@oöœ«Ü¦0èM2>ßí/ÅÖÍIfK&“;u’_Ç=ú`|ì–ò”Ó—Ð鍨'Òé éçpÿÀa€²@ô@¾„L«€o“Ä~‚Îb^}ÆöËmø _Ù" KÚRxæšòƒv6u/ÜhoGòzäy €×oÃ2«¤PÕm“BÞKbBˆjx¾ÍV¿ÜϺ’ÈØj~.ÍØûÒU×¢­Ð;·ûÛngÜÙΠÓï,·n;ÔÍWøßZxà¿¿º¾ñíšÍ#þâ^Øú-i0ö¦Q®¾ À®Úñ´5ý츛$À'³±^C˜ÍþùªÐYö„$N¢µFýuÊp̦î±Ãû44Ñ©p6E;´h1oÇ]Tô¬‘ÈXwn û 6Y‚%\%t *‡vŽàeÉTø¢ +[€–ï¡núà=Jób©|â+y ˆ à(Òkuh„píI½è†÷ |ž#Qí´¶Šì¸/Š Î jçæ¥6¹¶udtáÒÆ‘f ŸL. ù1­|õB”‰¦ +: ðDsaÖ-Âûïx<‰våàù ®#ò³Ùè¾RXÝ‹þýƳ`¿¸¿…ÿNÓ¿‰.[Lz½‡‚5álD7NC—,…ˆ s¯ý4§‚bcG[ø™¢ê5º¥ü’;gÉa éžc„ ¿«EP¸÷v®¶´*»zjt5óÓëì“êH}ünûáÝ?÷Σ¿Á +°gˆ@3š-† + „vµcRDB××ø¢À›`©@Í›Å1™™ñ¢ªÍXñú6· aš¨jÃAÉ4ßAC=ÉUAŽò2Z/–'†ãÙ„Jgˬ +($Ã`¸…\OYÁ«‚X™ÌÌ)ô.fÅõš3|ÍB2ÇaàUq"5ATIÌ/V«ÄwàE)ìtè?E„¾¸>„±ô†tÒ6—ˆ@^Ã(ïà¶z,ǹC^Ÿ@¿—`Þ{ݸ¶âÙ®ïÏ>0•9¡&¸!üØž +ûKPÐ.½k—> +‹—,ÆØ|^°DJÕˆ ÈBAX}zâ?ß=­ûæO¹´÷ÈRSx}Rýß»&Fa;àžÄé:Ú™:ùpìª{UÐ Ô0š¶Q¢@ì4@Ú<ˆ¾Ïÿ¼ƒ}¾wváà¿§Pܬù6 ¤@…àé³gOy®Ï?¥[pL@ €3 2ÞpjÊ‹óÓCº›¡ÃÇg§g‘‡±Q(N8<<¡¨ ÈIºt}åµd×.³¾éí3[×ø¢@N'˜˜ô˜üìš[ m›}Jn©©ã„LaFkñtNiL’äà:ò‘GPävTÈVŽEå¼}| RNÂéÙç”±wR¾×JŠV€Ô¥N:1J¾IjÛ!øœÛ©¼ÇÀ£€Ý,€8v>Üè ×²ùÒaÔ6«ˆ~d¨ôh€þ"ø¯úÔ(9êÛ}|á12Ôá>ùßVokD(íg°à¥éF+@38ß})*êC +*Îî£{B¥«À"5Dx°¬3Õlr?eˆhºÜ,ôW!¬p;ÞpÜ9[^ŒA~ï¼>í4Þè‚ 8ìLã8qÚR@Ê¢2¥x›Ï|±ÏB)`â”ýBCrŒ~©`¶¸oYz +¶º(ŒÈÈ.¤+L‚<Ž]mp‘‚<î|²âƒ››µX9H1)ˆÏ©†þí2}u¼; ;‚dSAæI<Í©  Â’Q‘-äB™&\×∠ɤâ„»ÌÕ>ãÈ õyÕü +ûÛ·¨,; Ñ{ZãM>À ðšÆÚatQ|bPM3-"LTiú×þø$p™ôàÛà?¡Òøî.å>ÇgˆFfY}~Õnrý<"@_ZQ—~R>R@÷¹lÈ:ûo<½¬ÿ—PÛ šè Y$+Ãz`Ê‹pÂc­.ðäÙ³'çÇÓ³'O« rÓû‡§<ÿ'§\tº‚“ÓS\8†«pzz(qz”—*¸@›ˆpqŽG>¿ê8«7Ì–NìõW¬ž¶JHaEëÐän+W0>ä¹:ÏA1ð2²Ó¶‡MR|‚JéJðŒ”¨É† Hºå:YÝT×ïi6®HYãÎk‹ CJdIðÖ; mÖôJñ–PØV1ùÞ@]up EÙ—ýŸn¯¾;BÜX¡N &1úkIÕ˜ :Ì«ú¤ J/$RéÈ=ŠÄx0§ÒJIßïêëh8´zƒæéÈ~p§ßã‚oucè¡9G9ƒw”H:&zà,y}#íÅQìƒ[ÄEX"EGVï^J‘Э5¦ô(ÜàTA„šì*é0‡qAX>à̤æFß¹¿‰Hß +‡– +C +äÀÑ ìpSnõHÌuh`!äI«N¹•„Ë÷Qõ)B @Ⱦ¬`ØCû× pÿ]°’tÔs ~ï}Er·>䵿dÐLߺàn@õ5{ m²²˜9€ï~w«kID¤ºL¯Â€Ÿ‹67[Ê ~O¬ãþ§”@P7s€g®“éjôÎøŸ—è²"È©ÜT—0MãUáoO^I´Ñ[¹©iÀδꈣÑa—4N€Er­=4]ü ×ËèðU7œºPÀl6÷=X.`$\æºÔê½ Ò¿sÿƒ "âD1ª²Ç3˜%Dà<‹Æ›_·@ž9N ò|ïωœº0FÊQˆCÚœÏÀ­;J“^ ?W®Ò@‘£Ñ|šH¤)G1fÜ3¸¾ï(·Ñ¯,ŽÑÿ¹Í÷]‘!ë*äR¼dÙçÂöG÷/€˜ŽZ¯…þÊGr)M‰¿£›£k}¾¯ ýR³¡š`.ÈjÊßvgÛ´ ¢Ò_û¹÷}¥Š»Í ûˆäõ«¯¤@˜TÛíÙüo ÂŒÎs°²o-ÇÇJ¸æç÷À ëì| +øéøÈ&—p5p?ŠáŽ,::~Eàñ-ç±<¹ c8{ü$€þ݃£%ÿ“Xú‡'Ô®ïÁE&Dš9½OÎ;îpëƒEy毧·-F‰W‚`C®—Zø™¨ÓÐZ Ý6û”lÊ–µŽ2E²W|221/¥ê_ ÐÓ¦ò–%Eu¹«,÷¦Î&§’€+( €ñ]Ê}J†Ü¨ø'I鈴¬ÎØoP”ãaÎÉTX–fÉÔdm|yT»îW7“uKÂ7Ñ{» +z’ö=È¡1½Þ +Ís@_@/3ö‡}_èœa˜%pØŠ·ìBGN8"Úÿ¦§¯é© ^Cd‰q{Ô3±ÅуQ-X©k ·W ì§fÑÝ •&i +bw‹Þ޳„#TÃ;ýaT¶9ë° >ò4a5Ë¥P™ý%à.!p%›9¼™šã‰°¸ª8®!ÜqDh‹î5*Ôýl‡^z`…ÕÊtÙÀÓ[ÚöÊ /™`‡îuôÚYR˜}!À3Àž@z[5$¨áÿ÷[òí!ž,yŒÓÁªð§Itßö¶—)õ@f¿žÀœ€ÆË|$S€I“M½øÆIsB”гa—sWã”6ËBü¦²çÀ:pŸvàúÀb¥èØï‡ùºmÜTöü/ÄšÞµûþð¡r>!lM¦G.¹£Ÿßxéê;ÎÔGH5Ñö•ìþV³q]Ü! Ë q2í¥©uK¹b‡¥{/¸&RûÈ6ðPkæóÚUÖ'sØ‚«9±F;VŸdúL›Ø¢ƒ@YàÒ¶4Î͘ÎgSYÎýT”¡6s$f“ƒáÆrÁa-wTZÞÜ®ÉDò:ݨT¿ƒÿ»â²¦¦«ÐzûîΠ)\ëº5ä/øoÔ|2’üï,¶Wâ¶hÿâ'Ê¿€åî( ßá´P]¨·L~ߧÃ쒖MXVKöÈÃû—ö~£NGè>; €Û¬н P€üyד׮Äü;µïä,^Ae8Ahyòô±€Ú}çðQ,'gO.Nކ±\ œž?y|Ž42ä>Ty\N/ž}rqzT÷,ÆÑ¥îýu”5ÅøÙ™ŠMW-•ª…=4Um¶”Š’(‡†’±N»ÙKÖ>‰øv§®!zÖ¶µÞB\+O¶Ä\SB²…ÈÕ ±$3i +HÐm·i ‹ ÿFݪ—¥êäaƒ†:P›$RS²gÉÖÊ1˜ïMT÷Âr”möŠß¹bÿ²Ú ý© eÿÒs c™Ú€¶(Â¥»ƒ{„cn¹Õブô=jÔš/´?*)»Ý72d MW¤<‹CƒÞä¿­HQ€wQ€ZÃZÀø¢r+)ì[ÔûÑóÏN@ž iYÔ驃œZÒ54dü]ñ@äµÛ´@ ŽÂ_#©zä÷ûGFX`,?Yj€œS,@ðæ”À9çd£è›‹â‰àÎrºªi”µò¨!žÈ[mÒû.€½Yæì÷âÂó©ûûð_±ÄŸ>“nºIýŽÔ^xP=ãz´öâð*%]n Ð }…@?ÂêØë%À#Íì`0%ð ]ÎÊO—è«NøWå4 D‰†4ßá|:U8@eW²u»ó·ù|îi¶þKƒÑÁ´Í ­O¦\à°ýçøeBz0,òŽäÕxµ˜ñÀýëæ-„J¯ª’…æŠ-„Ò(ÝÍ@ˆ¢)^VJ>ÎHh†®Ó˜Él¾\Žx‡Gò‚àÂ#;Çtî‚=en†.MŽŸ-ÝÖÂbÑ|®.#¨Ê+-QÿFçãI‚€ 3᚟¢szµ¬‹kî¥åÊâPCýüigyÕîåOá?:,migH ôÚ+fв4Š­fçÖRʰõ¿üIêÿ—¨aç>yÿ•YEÐ-€Å÷èÉœ%Ñ=?-ûÕ}QCý-E]‘½­ U^:> ÖßD^¿×JåqýßRJKyöЀg'‡GçÏb`sl—}p0|XMþg µ@çOžœ?<†áFG‡GZ?<:é0nS—ùŸŒô l‰úÇ€;¢È ëñd±ôu€ÚEÂzÆäk=ßqMüÄ5tЫ#¶¬ïäš`:’AIœöuèá}kŽÔÖ'YÑP¨¶ÚÕdåRE½ÐïO·ƒw†ÓÙì>ÒOö +œpÛŸÑ8Õÿyi¼ãÙpäúÂrEy%-qo8\SÉz6—ë¥sþ¹«ÿ‡9®j1X; Àn€Ón%À {Ó‡;Åu gy¡Ö¢jŸò²¸ø®ðôÙ“³££³'O{7ú*üÀÓ‹“ãfP ÓÅÓb¢´úøÙ'OÈë¢ÜçÞíïÒÉêù ®Ûj°7°OHÏ îd|x= »dÎ&Ñ’¡N‘ÜmåªƇì±ì­‡8Dœ•ÖΔÕ©›ÈÛR‰»„ÙßúÎuøßQo" Ò{–`â(@08F€`'î¹WÏW½¦Ž×$s@BJ¾$ì[Btw1ÿ-êBj¼‘Ê€ý¦€nðosgˆêM¡ o®¨, +¨çpEX #÷œŠÜqÐ „âp€êS¼I.ù(ÀÞmd‘ÊY—ÖÓv¯XGŒÒù/h.ú#íï[|‡Ÿ¦”ܽÎàðÞÝÈnæÈ£Ls1œIi=ù—)õ¼ÜP"@3Üh ˜¥ö†“,pÇ{UR€ç¾»öþf©²l™ã‰Ì|L¼‡=­åÀ ­v:žróÀ&Ø®uX-òOõO‘|<Í”2lèlm¢àd³`3‹e{¾-],w¥á¾2IÐБ €+XúWãå-z2!Ýj¾¼?º¿YÏ\¤P‘€JÔÉøþÌ7çJzÜrW†A¼h׿´¼ š³ƒG”zk—àÚ¹ecÅÿáÒ¦Ï5ÛkôFóÕ@†bÀçv‰är1žÏœÐhù}¯Á%Š]™8W4A6ÈU!l€¨®c¶è„ƒý×þ;·OHo¸ß}@ñœvx€¶B¢UE&¥-_ã @ôù+s‚ÀÂHPý¥‚QÕA°ÀðŠˆâ(v°ãuHºÞ;öªÖ} À; åD{ V € š »}Tw +e ›¤qÉ À›»I £*}o¡þo-zߥH®'ÙàÏ#nXó8²¸”ç&VŒp§ôÑß àûŠàöM®T·H€ u¶u”ȲµP“qýkl'âÿyŒ¾Þ?dßüG7‹‰T ]M£zô2PO°_ÚJò¿}÷•€¢üÁ׸ `4ïD€¬`(4_l@Ý•/ÃW +˜‘Æh6Ë 0;^l–“)(†Î}ç/à4ÒÁ ðän©QëÈfÉ­ã¦ùרìC·‡cÞDm°UB(å 1(œÍ'G+íý›¼/:»¯Ññ׫Õj¾X®Æ3_ù'¬Îä>ÌÉ`¬Ùe6Y‘œý‰aµ}7\°ðë‚Wî#¸\À.e,׫Ñęʾ6˜¢ú:Åá@ËàÍÝôç¸ïì~/Äyüx‚Ç<¯4’´^Dƒ•« Þ2‹ÏN)„ýR&fcJ_+ip3½Lä° Îr±^ŒG÷ý›ôlP2(è—¬: z™€ø«€ƒïÓꂼ; €V©›}L¾„çû>\`"Lܽƒï§œæç²÷áåõ•€˜ôyÊ1Þƒ+ Ç ûŽd9 îíân"Z! >; €_ÜX´Ä†/AZÜoÛ­ ±ᤠ;–«“že§tJ±¢@OžK02ð?ÎÔá®'³çèþ^$òÃí_ø¿¾?Zn¼Ñ§%ï[‘Ú-3âÈ'®ük +™ tUà¥ãÊ‚ò[7s:MÇ ' ‡Šu"î¶E[9íÉf4^;ZÁ½¢zC.äÞÚßMžóÇ(ÂŒ•´l,Ñÿ׋Ù;‹Íšû¬û€¬4 À›?º*蘗¯Ÿý‰â¥xsÜùЬcš-²¿d¨Y{ë$kZ[Ky™àûßç<øo­; +6_&PtëPcgÇ!0Š@KX&xü ¹\û‰yÀùtÂ~GMu‡(À7çfj*}K-OÅ€MŽÝ= ^åùΠm­Å[ÜhÐ’þòô—OÎŽO/ž"¥Ç +B@ì :RuP@bȦ¤p†Tqúô“ß:|0¼§@ó Heá}/Ú vaá§A¸j[4Èïª ÉDØŠNþê€×¤â†â†²­òö~l«2Cm›kLÖ$—bGÑ\zÑwnõŠõüZ):ÿKnSwHGº¸Ñ…j!e¨râ¥Ô•ïVVä'-ìfõ{11‚ÏZ4tJZ”`«ý _Ëÿ®^‹È=¼íYl¼ÁÐõØüRµ€¨÷Ͱï @¤ÎìYº!€k|†ÆPÃ%7¦ó +ÉV€É¸q±ô&<9aVŒkTuI0DB¹Ø<ð2 @€=‹Õ…ÛüﯠÆU À± Ð}‰ôt°O @ƒeE]UšÄ;Áƒï—Ájù´|¿^¬@zÕ= @+ +Jß½£tà­'~…@*@8tÅ +æMÖ™_7Y®gN¨;Ù8AÞ€ÙÔ¥@él:#³¼ ÐG!výšÇ\Ñ@|t}þ0¥Iþ'¡sBË`ÇdË1]„W|ߨ4ñ#Tè °ßØj`á[ùçë5ÌÁc~&e·˜…k4hß¾ŒÂ5’鸜Õf1Z€ÂŽÁ;0qÙ +®bù•@×%¡9ÂÇbF¯Æèäº佄°œ«…q§*Èãû\ÏŒfU€ƒcÅa›/ÍÅÁDP€!#ÞpN çó•/X¢4¹Vx!Õfµ¹×\µ6Å…ÔWðtÝ#Z™Sý]ònö‚ۨ߶mpÏÐ{¹Gø2žßä äG¶XjÀaŸî~ß"|ºßÁ]]ø÷?®ë#Þëݹ?”%³Ë / ˜¤KŠþJ_KÝØ€è¼ý\¶ì­8wT!áº}k7<¼W€­@èÒІž>}蟺 ôôâ,ãý3æ¿Î€z^n¸}Ù /èrŠä‘_¶‘; . ×[ög4€ò&ð–6êîf8ª é‘p/Z¸%/Ú4þÕ·YøEír1@ú º½ïû¹ÛàÿTëf‘«Ÿå_¬jð¯øÐ:Zí ‰*Òá+:ù21#àÔ‰×ÎÙËÍf  ®'®¦ v‚üd²&óÕd¶BI]Œ×ëù| +M§ÐŒ(hÌöˆF£;0ãf9£–9ãÞ¤qT°ê²[ÉâþÒW9| j ÝóÙFŒŒÄ©PºB§÷¼B‰<Ž}0¢Ëì9\s +B f4§ÏÖ •X*"—™c; ZŠLx|¡1'äÄÎ(qäuþdC°pöMJ€*ïs}¬( €“n]±XBÐÓö•Î#Œçz8r¿ëš\Äl±˜L¦Ï)}ʵn„©Ùιh½[6‘ÌH¼!PàŸĬ†¯E®]mÂÉ€.ÕÇGýn Ò#WÒh"“~ƒw¤0EŽÒBýy¦,&|Q¸›7û5>v´Eþî©ø×@“\53cNt¯á‚©²@?0¢Å_Ù·b]S§£nÈžì­àå†Äûn»GhÔ{Å´¦´|5ÜÓ ñŸüë“g§GÃ㋈Ožœ9ÞO1½ƒXÿŸœò$=D8?=?ò´ÖÐöŸ.E‘âüâ“ß>þ0Þ†äæ¾iðž¿‚:4W£Õ&ôâ,€ S³ädêªÄràén›½)*¥¡W›Ô±ƒ$öÛð˨ÒYq•!Ud˜p[¼µØVÙ6PQ^D‚µ‘ÌÖ‚!¾%ÊÛa€S|sí>»ö÷—¢o‰~¯|-¥ü*œr,Ù®ðe4µ£Œ.‘Ñÿé,• +8 ?Á°[sÑàÃΫ W°‚Wø¤~}-‚j‚Âk Sök}vN€ˆJjΔª€šÜ/ùy¥kf4¹ô BŒ¬qKÂÝÎÀó¯²ð »gà·õ¸ü.®áºYÔDAt÷×ÙþR7{]oð_Ènðà`ÏÀ@¡í4@³”@«IçºgH„¯Ñßnø5,…¢›#AMì”.YT¢7¿^¯WàTñD{u|ZDžÏÖ³Ñb9‰7ît4w‘S×ÌA—\I°ÑdÚøØ¸ÝÒWÎ&Ž$6Ò­m2] øãÅúÁr0B‡11Ÿãµsú8ëyÐq”×ãêˆ.m.”}Ò-7¿Þ<_-gŵ"À\ýÚTb¹v‹¸Ûïa3j©7<Œ霿pøaÁ¡Ÿªâ»&‘*>Ê÷!ˆKTZ¬×³œváAÎÕ=NtÜ¡%Ýy«‡°^S_ b!ÖÜkØ*^, ôãµV/nÅ×ËÙPS×MkáÄÿË­,ë¨÷G "ê|³Ä@@S)ßR“Üäà@Z)áfþß¼€”¸àåðÑÚ'Nj€ ~õÝ!>Ák‡.Ïðñˆ Fü·ø¾'´ク'MŽÊ°>; €Ûí:Áø|*TÄÞ`;tÀ»`¹¡V`3'×Zòµèè#cœ×ˆÀÓóã£aÕpäûj8×pxüpkp€K€“£“§Ï>¹x¨0, @ @¤®Wp*c+¾`($ë‚„ƒÃÙï&Ñ Ö¡ÉÝV®:a|ÈsuÞ¯¢”%›)h[s׎êSÇf)r_ñ +Þ[l…j_” ³®Ž)â¾ó;Þ–œïò5! v‰ª<žJ¨¢ºRn"“˜%[÷âîKåA[)Hk'é ©àŸŸN`%È¢ŠiÚê º(·Õ÷R¢Ë%›èýWó`·g0I³¼Ê@#ˆÚ,Æ=,X |àîÁîÔXœYâಀX¯£ÊàpN—äÒ:òÑ|öfp‡÷ÖàÆ½h8àrPö‰Gß!¾gÇöŽü|°·ux5]`á_Y@g·`ëVÿv­}k?®´ýíêHj(òõ$fî‰ûF€€ðh ”¢sÎV(µ+ IS»'ĵîår²\Œ–«åh…&+þ7$EyüPgæŒÜOgc=WhšQ€È ÿ• ø?h1hÁÅé„*©v½™ ‡Ga/ìrk +×"ÏÑJëül!˜»P,QrÉx=ÛüúƒOø1Ú9®9Aƈ-³Õrµ=x°GÑH” ×÷á{ጿþX7ä‘…ºŸ‚F¶“Ùx_ŽÒp€€@4\#/L,g÷7¾a€öÊ3Ë-í Î|`nÝôǃát¹˜¯´sPg œ¹úÍfñœ‹™ôG“•/3V4Ñï6­‡ÿe9Ú,VºÊ,;--IŠ÷)†ý­À{ñxk¸´@Yl?¯= `o€HiuiæP,zêôwϘ=ê}?M?Yå¦vÔ©Ý&è|š Ä€L¸ËS‡ÿD‰ófô¨€Ê‘[DÖ8Ûiðb·Ô  ÷K@ØT¡eL€Ø¦0Jó­à ¾›§ç‡'gñxúTs¿õŽj-`_ ÀÁðXÕÉÁ•IóãÀ'ÏŸ”  ÞØîìË©ƒ!‚¾+¡kf˜¬YŒ ö›0@\%Ô6{S$cËZÇ ™‚Ì©%eyª…^N&K6© †êDí-« vñûßœÙBDzÔŽ (üøéÈTLjÍaå™ð‘_åwW¿* ‘¯A&´Ž8¾„D$¾t–ô¤ý‘óabôༀøJ“Ti ˜´97íwx …äu| +åö,Qï›l÷dàü¦°ðxÉ ¶>{cÞ"ãk®@N 8“Çêþt¬QÕ5Àõ€›f8ªRÀŽœ±7 €ò›À[u0\g ¢ËSžtþøÃXµD™üÛÛº‰útp÷L×càßßÙ)=ÁéþJ€É·gÈJ€Þ ÛÒ-{ùtñÑÂB$“ò7_K‹û= X|aFç—ëÿã×jÒëÙp þ‰›±@HFõGãÕr9wb| _èÌïG÷— + «ø`Y·Î«þ†#þ/ à_P3ç;šj8X/|°Y£ä#é‚” -ÁHAßYð®õ³ž€d1ÙAqHô¤¦Õú׿^üáz= ÐʶnQ`;bËýõE;ª¿6x¹wƒñr9Œãå"e»`ψ èÿ6 D R¯F}€ºo‹õ‚¨w>~d +H„Z.¼Üß! É1Ä;ƒá|<ðFZ¢¶\pØøõ´Ÿ,§ý)÷QýÖ´ö§bnóh¶r±À WþGMû÷ØÆ´%šÃÖÙP˜Ú·(…ÒTÊ`s|™D¸Yíù$_Z©D˜(³%»d³Ü£X*g°¿Hh.8OˆÍ¾ß|¶€¬Ð ÀÞ€€Ÿw˜ÅØm9Úß—Œn +{)Ù—Öð’Ü·ýø7êÞ;x;ÈbâI"%£²Ÿ¢ÿ¡'hýÃ#}.žøbWós& þä"°uÛ,€ ÛÜYâ  ì¹Æ×^ ßÿŸˆCÔÙúìfl× Ò[þr|ÙÀ áInª#­Zx˜u´¿ÑÊÊ3+r@H¿£‚ú4=èó: @׫ҾÜÙ—«µuô]»^©Ûwé_ê€Î´ß@Fq)ÑZÕñlýëÍ tíÉбj±v¬Ujôçå °t¼\¬³¤£Ùøþx6|g<LæÓxÙÍ@® ÿÿS7ùaoi€ÃáØ—÷?p*Þ J?Ø,דLੌœü'qÞÀ¸D°\‘Ú!òñd±qÒßx¹ú5ŠòŽûृp½U¤ðR‘a1¸ºg(-¯a)náÀ`5C@XPx$“ÅzùÁ~œ8_M´d}À>7kœÑû‹5RÂB @¿îCæ¹ ´´Èç':¸ ûŸ£%\xÄ­ár¶ù–‰íÏ〠AÉKç8Èêl¾X zêòÇp`ÓØ\*AkNm-µ ŽëPˆKSá×Y\7ð€W|á]%}–° ↚R2nG:8ö•¯"@BMïÏ'!(h~ÉP e•€$° …š*Æ÷4¨?¬wìíÛÏH íùµâ¬È:<äçgxM}Z<ÞÁðÞ=æýù –Ñ,G)LE^õz,À£Þ»ÀÓg¾ XqB@ ÝxOÜá1݆ø¯ ¦î$‚Ož=»8µªæðÚ€Œ@e(°xù,~&Ò@&¸Jè ̈ü +sŒ©ã„L‘ìßN½ª?X¾YÎæhñ›9 /›ÚÞMlQ&*ü½0 ÀO³`á÷* @B v!S˜ÑZRÖR+X4ï‚!öVWQ–½=‘ZÛ‰Ó•O¾] ¡–¢Ñ a?v›²†sü èW¿ûÕ¯~õÇ?&¯$olvI¬ý(©1òÆÜô‡¾·´ÿ¿ê:¤¥0¥ÎìY^æ@÷’@œ¥-mÀU @ªº$xþ -(`GÞº2 àv,θÎÐèòDÀ_ø× p7 °€ß¡YT¤¢S=€Žª.œ¨ÿó¨ïû¤Wõï7üöÛ½K@| +ÒÓßEåó7•”¿úZcµ4_€HÒ#¢;#Xî¬~½Vï]¹¤ÎlŽz.þsvÍN™ h8Ÿ¯]¼ž8güOFGfýá¸ß'¡å9¢°­ï;‘…û¤àO=\…±uPzEÄröàÁƒû€mßé{S@/u­Bkm°¶FöX‘|@'Üdõ_X ˆLýìÞ+È‹ÝéÖðªwëut@Y®óð[€ò¸: €2-àz @@íª@Ùÿ}ö· ÑK¢—¥o¶“l] Š½™2}›ø¿oФjG]²€+¦]´O:x_Èž!_ð®~IË ²ø~¹è¸€`U)—³Ÿ›`…ê½Øüz3^ìà8˜¥Ê¬S`M¶C´GË«®Aµ…h®(ئɓ‘´¨žn4\—ìèÐø€¸6sÈFñÛÀÚz±Ü4—×°¸!£hnPYÌÕÊÒ´Ø>ýyÆê¨«f_¤T¡P!_ù†¿K€F7Y¶>]R•ñˆ нKEtÔ䀌G@tu4 +;? +89=”ói»Ý§¾ÛOYxî¸KMiÂu„€ ¿ÏµÓ ÿu8:n‚Яž lBD…»×óèf E»³ìûl‡ÌriÀµ€Ü•ÁàÒ²¾<òÍYöŽ<€±(l-bÿYLÿôl1Ó]¦U§ª¥s½ìø–èrtÁšJ‹¨ð + €v,.[Žæqtw¨|9™ÏW›Û<_>_¯&ÃÙfÞp*Kê¯\‰ÆAi }€z D­ç£õb®Ç4Žv>ó¥þC0ôRÅO €û¬m©þï9°?êû®!˜›É|¸é\‡2<™£§ƒy³•NËçºÀ–šÜUÜW.ë»YmœÔ—«ù—›[ÿzµÙÌGC~®³Â2’ÂÆ×ðÁõd9¿³AyŸ?XÏUܹü r_¡¶–„Ãøx¾/½ØlнóV¥€åœ„3¤ÙFÈ„½Åð=s‰@A;ƒcnÇŠV–±Ú“K̹a+®Æ›½žé‰(4YÿúƒÑ£þz»Ê_+§¬GT;ãÏf÷Gÿ¼Ys‘ ¸f¯2•ð/þÏf uû@Mï§ULƒÆï5+FP(¥ýð°_±åf´+.Ô|Rt𿓘ÊVKù >®hRÑW¡ä/êÀ¾)ûî»ëb"$” `gnÊÔTþNß϶¾í7<¸;Œa§Û•X?e€øG(Uàèøü±G;€^g8¥§ nX‡ôÎ8žä.h0ëÙÉÑñãß>;oþ’²´ûZ@šÅæ×µdc¼›D7J†:Er·•«N_T~+ê 9[7è"[%û‘ÛT»H7­ sö(g’¬%q#m£wQ߈Þ{ïwàF  %ý[‘P¿@³ˆq/õC¯õ žWY.ùì,)µ€ò¸: RÀ_ã]ñ@ÔájËàÊ,2ðÀÞ`8°nè_Pý×þ·À&+®©í9‹ýSñ ÿŸ><&¼·€=ªøßù ¶ÕUd·ÍWÂÁyÀÓ¿¤Æº þ+,PÛ3ìßl£Hhžs1wõk‘pµ^Ù?—TôAÁJ&ù‚§ ΗkTìdÚdzÅèñzþ;ýhÆ <0·™ ×ãwDt~p¯?ZŒòÒýÙ0½ÝøÁbóÏ`ëd8˜QùjX#Ì7ÚV(ä õàõB&9'¬‚·ˆóÕ|õëõs!v£ØBV=úÁR”깆]àÚS”1Yo–ó¹k/¬ïp“I|0¤ß,G¿^ol6^±oܾ¾GX,Ø Œß_ÌH³X8÷é N¹ÁãÙh‰à%§…ܟ͉pÀrI­£)Õ Á*Ú å#t­ã 0!h‰DC•1uŒGëßXÿjåB†.Y4@¦ý•Uî/·øß‰–!Ñ y Z·›Š¥í[4ã_; <“µD€í»ïhïq'Hûôgy‚âNŒv+¥Ä‘¿¾–Aá`r÷ñ ½Ü€@Òñ»Æ G€V\HÁÙ>:{ÓÝ…ðηì¶Áí·Nôâ þkHôUÿ#ð‰à4€È]ìßµ€•raZPù«¿àzz\ÊÿÙi,ÝB@Ú¸Þó‹‡GÇOž!pJ.òôF“kP ð÷Šuèè: €"€§»möf¨Œ•µŽ2E²çÀߎ®±;¼¦ì.Š}‚ûI o™Þ?шËJüöÔ~øÛÑ»ï¿_ÀnZº¿!iسüýߢ)µ³PÃ%€¨ÞÂñM€ðL‰ +Vî8"ô* ÀM>ûë\ð + @¼!äŽJýwNÏñ÷ÿJ±DØvÓ ¾¾Ç<äÀÿ™rŠÅÛir¥ÌC´Xw/y¢ ùßÖåËŽø-d€·^>  D ý5ªîV‚¤&Ó Úí|>­'°H$-ÑK¥ÍlÒ®6³û±™¸ñXHÖ…ÞWùÝ¿?žº€EOhKÙóå§ãáf9ÔãoìB¹:îõ}9žC÷]ˆ´öáÄ¥´á@!ôw»šL×®þ¿ž­uËÛ¨§ð‚Z¾.³dµVŠ5¥ÃõDY@ÆIÅI- @ûÝ : tlÖúÚ ©‚ø¥ëðŒ$˜9‹Ùüß&£ß|º\lHÇ=Ia0éÄå,}CÀf1R\•)‘'ÄYsÄ u{Þ×Iýi'R|»¾ÿzñO)H·ÿ5rÙH…¬3Ãæz³As¢X fÚ-dA®×K +ÔnQtÿ>rA0·>­iA‰¯ö,m+ÍÀãk}ÈlÁìK€¾·@`ÀßÂh¤ÄɃ9vC`´•j›¸WþoW©°?7¯òu`nñ¤7‹[å_ø·vçÄêý]¬/œ¯@€¿·ßí ªU玶ò"LD¬hø¯ð§'xòäéùÉáÖp¤öïï°fÐaœÓ-gÀÙ‰ïl@Š¡Àó§Ï¸ôó§ÏÊàË›àí×þ@é9ìL¯³€uœí‚„Mez7Œn”D94Ôájn…Dÿ5èšrº(+lÁË´­<ûÝ+¼ îSxßH ]“úMègï½ÿ^ ÿÿø§ RG-ÑߘDÂf\EÌWú|ëw¼Êàê»/"S?û†÷MíVi¿jà¨âà’ðúïHI`‚J^œ@™pÃ,€ ÿÁ i èvþ» £‚ºàß¹é0p|òÐïñÙ‰LJû 4Hö)àò€ÆÿÌŒVúnðÿ%MÜêDwúºÕ@@‰Ü)þ¬C~]±g8Dù ý:ÚÐ-V@«š¿à¹Y£B#Œ–€ŠÓ ÚÆÂ-QñÇBóhŠþëéx¶µ&¾gO™`ÒÇqpD‘kíú‹O'Ó_ÏÇè´‘÷O3%iÁ:³9Œ¯—Ÿ´¨Sa3\*Ï5®‚kGòŸ»Z/ Ð`ú9ê»\/©Ä×¢JƒÔâ82Ä"Z8ïq1ÿt6Þüµ)B¬(©a4C‚¡%\¯]øß(o>^/׋³Q$Oi-YøÄDŠFï‡18ä|žBÚ-•Ôdâx0˜p‰+ ±ØG¸i\sOµÇX)\gJäHSÌ}È ]6 …:=¿á¿Gößpi%@c®÷ø¾nf -`Ï  6$k5P…Ôë-Bt¯w—¯kçFžè¾ILlC?Ò/÷¨Y¡ýu*æðx7pKÝ9N5{€HZ˜ÍïX|o8_ n¿u‚],TÈßÊÚþ?vàßy€Ñ o-åþâìäˆÿj €Áų‹³’N´óÙ''ÇOž<¤t%n¢€ºç¯IŠ—|^ï]ÿÌø6ÔU¸Wñ%rpWWؽ)ÙÓ»ï½×Yô@ØÚZŠ¿Ù/¾¡€ø(@öí¦Õ…×§(ò×úìÎîù ³ö}8"qÎ_µìÏ0Ñ·z@ƒ[ xþêw\oÈmyÁpöÑùG” ø­Ê \Ûuùx×7ÓßC=óßê,>j…ÿW-⿦[ö1Ø©Ó×˯'Àðª0ïVl€Êå¸÷}ö"vjNŽ3娾é(¼„¯€«ÑüAVûA©/ÁüQ„}@xæÌ5àv3›80ïÊñ–ù—Œ×™P?VÝÕ¦ÿiýéf¼^¡Y¸àfREEH{ÿþìþâ¸=W$ º‡kslÉAv¯ýµÔ²>ŽEÝ]Ú¥Œõ«yýùxŒ +³»¨º™¬fÿsèÍröÞ`±Y9T°Xn~³Ù _|:\}ºF*x Œ0ãÑŠMˆ ¤]Øi$<üä£.F[M‹rHÄÆ8з¼XæÒ•J´p£—p½™~­àr1ëõj4×÷ùI0W8 +BAV[Y‚; bhgH£ÆÑ&_ô(„6"›†ÿÍ ŠvÀÖÝ(ò„Õ\ñ8DiWòÄ®k¨Cš¯J>Œ¼Æ "AêŠ[  ÃùœÝ&®xx +¸î,µ4_Ãù +ø[pû­ý= @j/ýÅa[@œQ@}ßïïZ¾™ À]$€^k@±GË,€.H‹x|rttrñÉo)àìüœrå:Ó{üi<ïö¯ñ‹¾.ä& èÇÙöÐTv5»M¢%C"¹ÛÊU'ŒOøÿBj,uSµ ]à ¸àv ~1Ù›ÓÏÞÿ'-¡à?€F€vúïD´ÜΠùŸ®éoÿ.€W­ ˆDm7AäÒÔK(xɵX5¹½yb½Ž\51e¸Ñ@>^õ.€k-5ÁFA£x|t~A¿Gg›>’¾–®·Çæm»Îëúµ»ÈRÀLJ(Xirv§ö©>Kî• .Y2ËËqÈ­à»M@È¿}-iÅ¿Fh«w÷.aãð¼®ý¸V]”2¨‹(€^?^ÿfñ¬ž–ëùäÈWÿf ' ep¾ñjî$¾ 7±î}D³'nZë?¿Íhó)š4PºzuqýW8ÏnpŸíâþ8« pÆ‘bbQ—k¡>\çÈ)³þm¹& +pü}¼ùÍL#ýr²Ìè˜À?ì3  åMFrà•sWJ´àTüïfKG*Ö›ß Ÿÿ&îù~¼]©“òÈpÁÑÞI:YNÿ³É|Z€Eì‚ïò´7-EÝ‘†Òû¦YZ.¯ð.€{ _ËZͳšhY2 `7à8½š{Öü#Ü¢÷©C> ¡_ê‰áþ,D!UûÊÎ>lˆ¨Ä{äá¾@°}xÏ ØšÀA6‡¿+ï×6G÷:å *¢E +á?42@ÍÈ8€ Ÿ?þ8Æ€z@¿W*¿+‡¶k àCú§èQ"À9€«…äþä¿Ç-‡±ý?¶ÈüÍjSÑÍ_6 G +ü¾€'ÿ.d­-x íNµÐMi_RÆ7§ÿ×Ï~ö~,”€ÀÛé¿x/Ý Hü÷yuD¸nc®€Å½`(€š ¯nø¥*XJÔ+}¾Ý»®³XwÈî©#m}bð1õAµ¯õÜ™²p}O³(Ð €½jÐÍò¸û`5ª'߇›M“Œ~éC§Âø¢ЭX¨*n e£¯þº` X +@A"ê@eÔ÷×ϧèÒ°å¹^ÍT@ëSRt]þ‡º“ÑnèFKTúõl¾™fŸnV(êÐsÒq‰!>| ƒN̼ù‰€²ŠÓè²(ŽQ“3äD¤b½~òM½\‚Þ|,+€õdúHçzø_ÍçàjMNß4¢×ïË5'cj±ÝŒF‹˜-ŸsŸëR• YÎ%Ú\½d¯Ù’ÈkÐ /C +9›­)€m|v\SÔxñér««q¸ŽW¦è/üO¦£Q0n‹s÷|[L$€43ƒZs÷-´Ê›| 7ä/øï(>Uô%€ÖÆÍ–êv䃊–ÕàýÚI¹ˆ7óPˆ @"¶'íëþÿ®K!×nÈ&¼ßü݈ñn³ÙnÛw{‚jµPw‰jåJªìl”è}@á?_—DƒWx†.ÐëÅ ð'uŸÇ¢­@½G{p ®èÀ2-P—Ì€Ö 45ÿ¦ŸÝ„"€{z±ù¯·€Û„+W0>qzU5í¼ŒUèfâ¶üÕéÇ?û§÷ùîÏ(àï+„¢kÁæà©8h% Ù%'äÁnÐÝo¥§¦#¯¾\´c£Ý R&ÓmRhœsÈ·zw·´4ðôwZ‘VD·àìi„€jEYc9ª9ß ¹Œ&Gý™‰øb!|—Ð>ð‚ŒÔæ*½Dbr*Å'‹¯šÞ2ÆZâÀ¥„—Ž€˜nõGKˆàˆ½[ÿ”§[· ú‹âð‘ö<;F¾>†t¶å Ш³hp5@û¼»½´Òt¨||ŒÒÃúÕ¾ßEŒè9¢=cñ€òw_K ¼Öû«"Šn­è‘请¿Ã³Éül\Ïo6ŒÊß~2ê“h4ÚÌu¹›Ï§À÷\|Ó³o4ÚöåßáÖÛlÞIãÐLÂ?W0uŸÑt>t•Êšèvˆ*RP¡Ne_ñh¼ZÌÆ*çc§ùåCp59ˆ£¼‚Íth¤>ƒ"|¶|Aˆt|ÀÓmFg€@¹x3–©ŒÜ±BïBÌõ8+†90ÎMq=fÒR’·ÐÿPÖòÎ(À…+n³øU™n°œ*Þ; c[ @¼µÉž¯„~¾ßåQþù§œX€ÞËž:Aþª ºXþ &RŠ•µâe˜„ÆÌ–¾£(¯÷!–ÄÅ\o\Zo²àh…¬¢ûŸ‹É¼Öçë‘3ìfÈ\°v‹µ.z"ûh"lñ:<Ùïϲpåζ÷† +Ù€/3šÎµŒ(tä¿F¢;·{"™ÀO½þ@<Ù‡ó£ÑDï ¥xËåדñÙÊ×eEf'Ž2•`•«Ö‘’›×0$ÅÛ^ " ªúýï·cZ˜M¥ùt}Äêº5p«À%ÒÆP.gÏM8vÝZ0.磙ká ‹ç÷ÓœÄóüÞ¶N&9¼3zgüŽoÈ÷ƒ¢AIÔG¢ˆ$ õgbX¢¶¼!€:‰~áiA4LÀ¨Yïô‘ÅÎ!Êsø\¹¦±xω&J(Ó­Âuªš-2úñcä@XŽ8ÇWág<^|°xðÁƒ– EœE¤JM²à<¿æ ÑŸ" Æþ Íù –P0)(¨å|+PD³(Ep‹)7\÷Д…ŠŽ#‘Œ¦ Æm1ÒÛoƒÖ41ÛŒÇZLËG¿©ÙŠÿf- §HJtJª1gŸê­úÝ”¦úLÜ(ˆ~è˜w°ûZ›ƒÙE/X"l}š@,ô[)J·ß§m̶܎ê„J5×&¼ïÀ¾íÜÛòk$û»wAâØ ¶C±(4 àĵ€>*CÀ‰³2pêðÝ+·ÿøxØ»{à<³óz‹Ð™CM89öÿý­"Aº ÿ_î0wº§‚à°ïÉ/ì£úwIü§Uë_œÜn€‰ý±¼Ü ¡–¿B¦ø»éÿ²ð*êR„Ù—QNoÓ¼ºàWÑ?þ?òÓŸ¼û³÷w³ö|þôçÏþôYKø·§²€é¡ŽÍ¥4ð¡ær*°c#Zóÿ« +ƒvïlœÁ$¼þ±Áy3)(€‡w@}RÜaOVJæ|te1ýÚÝn j>•ˆ»]ZöÖ)H;R¡P‚bN{Ò°O‡Ç¦9¢o¥¤áAúX'î…}brN‹úÃÛÃÛHÜ”E…·ÃQÒɶ|ËŸRˆUÝÉY¢Œ†ômÔ—ÑYˆÓÁ-Å’&‰)Šv€<À>ù®ÿ••ƒå`gØŸpzrªyïð ™g·ša+@AžÎ»H5ŽGí?zX,$ôÛþðkùO—¬Â]YÎ¥æ `ã=TO”VÕVpMÃûd8Yq «<y³i^ªÏce¥ŠP•5;GR¢ÅZ°ž’trHÅD‹òý‚£ñ¥ ·SaL%] DFP]®¥rEwˆÀÇRîÇK´÷ÅÎÅc/‚¢Ö2t¹T°&V#=59æ>©`@™#RÝGøè/À­²CRË&ˆØ¼ƒCänEeW4ðòŒˆ¸JsRÎ ¯ã9WóÉHíE §ùÍh¬¡"ãñŠ •-3^@ZXT¸°6¸¿¯°"üF@#°Œ›x@»$€€qéãÑîœ)R#´¢4ž +ðÌn»ªPŠ0w €FL1…@”)¨ÚNc q,nw$’ægú±ß@ 4×ú´!À¯Ž;TW¼ ½YR–ÚdÀÄÅ âß t;ð¿à]ÚB|‹¬3u¸”|}| —+þç¦w"@ð_ÓþùˆnG@‡÷ž>9;j@âÒpzrvvrtx·?¬—Æ àPüñO#œtö€àþ«Ëç/Ì&š~‚—÷nê¸" Ó‡ýí}ª¤¿]ªéÚjù: ]køæWòÃþø§?ùñ{ÿô³ëfhøÓgþsKû·¦ô ¨ õUg:&}Kc N7ÝM;€]WŽ ¸`§®Ž¯ä@"E¡ZüDm"…ÔPVÓÑš.œòÑ_EE>~…µCXP sä$EÃ'!)¹ %3DíNÉ#p@F¸Ð}kÒ€`Àm½ÉàK<{w†å„|³ÏQUªtZH©áÄñ‡zäd“ ³P­ܯ[·¨oÎ}ñ¦ÜáK +oKIDl|Ú»¯Oüc7±¨¾g¶ŽÃõ—fø4·ozŒSúë÷5¾â%PÊ–2`†Ï|Ö÷äj±r:¢é)Ü çµz +‡ÔnzŠ»OXáéF–õÊJØÿ‹.˜Câ²ü*x$ 'Ê^•Ê,TØ®\|7–öåíâGü «ÂGn5û”é:‹#ô˜¢‹‘/yÂ}Qb0Wø*«‹!ßz ¢cIdtÕăÿ!pDãI³²É¤*’"yßu<[ªÝ~¾Ú¹Ž>;ÒöˆQˆ@šžƒ½LRW^áú½áÉùyäÜë(HÝÀÙ ß`€D¹ +À~A*û{G»-;ªÕ…÷Ä'¢"k“ß^dYÞŽÀ=*Ê|ÿX ““Óó³Ç@9?‘?v€Ð÷c88:¡»8={ÈUõï’] €—©íÐ[AŸ(ĸ þóп¥bñMÈÿÿe+æ°,ßt€ñ + /§–¾+|S–Ëñ7¥z]ú!À¾ {À¾àó/þ>"@4a´¢G.@¿=‚ËwPÊ(^Àõ_šï¨hô£× Š\Ä!”†l~°Ñ|…´®§ç ~èÌÀ,‡$ÐÄî.Õ9ìà!)ÀÝ(Übprõo nQCˆì åB¨!E€ir+'‘졸8B@¼cVDÉŸº8ÞÖ*OwP>`²µüªÄ²¢²H∻rS› —óGè´®ýï„x0h6ÙLœ‘>/Gs⡤XÅ1øþ}LݹÛà“·+¤€æAã:™T¶'£3«ê×"37™ñ…ê[B1ÜÑ‘r€šøx¼È«uÄ}Á„ô®QÔáT}°tJ?9µ¸ï\·šŠ²LE@8 xŠAp¨ýSÐR·d%OJ°ÂÉMYæZ($£M²…"P"Àër:Ï×# ‹é4š#!ù 0Jÿ(‰Ë^ÂàÊ«·òÜÂ.E[„«zǯp¯À@OD£»w#XÒ‚Z;„´L¤ÉXi{X[aÖÒ<²B/‚Ci|h4©“Øíh Ƈz¹Ý(þ'ª®úœ>~u¢õÿ¢é¿ÙжBÃöF;°ß¯Øí9_ýµµx)FÀšBq?ýù4üUmá1êøøÂ…Nµ ²..±ä²œÿÿì·ÏΛ ò]n½@¤¸oB×XÀ;ZE$Ü,…úÙ$º‘Á:4¹ÛÊU'<ü{Ñ«êjܼKU±üÿQ,ïýì½ëfhøà‹ÿÖ2ü-ÉNjƒô § ©<@o-HŠ„ƒ‡*,ÚîÁºBlÏgxM·4^~ø5À€ªJ+Ü)Pc@±Ö°âS8/»IcºÜy‚üiPˆf.‡–ܱB$,ǵZÖ5ˆ*Ë@Ú4H/«ò'Øœå…À-`V3ü@Ô[•Vó†i­¯*·zQßl²Ág ¿"5ÜêO†\4¬xú)P—zoé¾ýþ  öí.v#ôöVºÖ@ÚjI@!B´¯2"ÄÐð×›¾ýã×è1›ý¼é´—­@ˆ(œ¾˜oèëh•ÄP×\-}m}¨ÓQO4R“œP£àÂwÍÉl4¸&èb¢äéø÷+H[à‡œ€n ÀÅlÚwÀ(µ¨ÆøýÔÝÉ1Ô `¶-–‘PVà+¶1ë^®æ”Ç}C´"³"’uXünà þG +gHÈ`Ëû@ÍÔ¤U@áÁ—êX^\aTG‘Ä£ˆU±µBêð6¬²ä‹%$r™>ñ¦@Ç€_“·l-š#ôi OF€Èµ(”Uo£ÄB]®–¾‘vx‚X܉¼/|­¯Ufþ«€/Yà^—["Å%Ðï3Rù þ\@¿0ÝmQ"¶Ïø+J¨×ùpêFDˆ `µe8ÕÎ`kH§ðäâ\ŸúÆÛG$PîëRIÄá¹€”V—uz€ìÓD ÎÀDl/v [þÆÀÎúé8ßmDvÊ/³@êþß|%Àñw¢«•åørd; +³/£ks}3úÞ÷Àÿ²ÿ7ù|þÅç_|ùç/Z¦¿ ùƒ!H©êÌ”g§…|8TÙq9Ó”{á·Pl‘<péÓ=×7 +AÛà¼X +tØ ›eCYïôîÜF(8ý õWSÖAR¿î"”`¬Œð­\±ÜFMåSÄU™T»”ŸÔêGVEü³ æe–¢Çú@¬Id˳ü"näR] ã-±r˜è–w/€ðO•¹#äF<ðŠl÷›€ÛŽèôºþO w,<>Ý@gÈ3å¿-ùl Š W[­¾>Mu¾Š €8«5ØÐ8G~4Œµ`¹Ü¥³EY2`$ÜiBŠÀ%¡Y `žŽ¸û`Ô@Ãz|ÿ½Õ÷Óðÿ$÷p²MÁøÔ;[& 5¨û‚Þâ¸@+ 'v¯ÁQ*7N¶{sÏç¾h˜wñ¬"°G¦@D?Gó…•Qx¡)W‚îœr(¦Î'<½óUêyÍ ¾¹v×H. ï$XÄ}yÈ€öƒ¹Ž"ôÜ-WâU¸ .ÿÖ`¾œO•–(C/öÜÃÉdªÌÔW +™;dAôr…°ò%\$I½×̶å/ˆâ?‡“ITM°ã< JŠ%€ÿ;06ìú~šS3Ø‹&âI¾@wéLÃe ‹‰!M™æ§ AÖ $ª .Î>,‘÷…ïÉ©Mâë}òhY{÷6ÀtxP0GXz‘þìW¨¼ÿ÷RåÒu=û ±­ ›¶Š;çË?r €zºü¿d8q0ÿì1¿ÂÿNxŠZp¨àåx_ΜóÏ0<ò=@‘š nGúä=€ÝÍåš½é½]óºo¶Ç-ÜEäkø }ŠŒn”D94”ŒuºNüéRu×ÖÈÝ™›ùûëYþQý¿Y~öþ ï¸døòÏ_þùoë (b†œòÇŽ>8ø*Š% +å€ETëq .¶nÀT½C¦ü â"¥ óÀ7¨–‡ª­#~›Ï,-©ýZדÂÎà»§9E6s&7ç]H»Aôz*Uˆ`UD¨øC›Ý+±‰-ò¢r!süPßI”-ô4HA& cî3·+€cqH.­T6HIcnLÝáßh‡C:ªG9ßX"öï;6è×  #ÕžöMh÷æ-t+tž[ +Ð~@A1#tÒ@^1(]g¸tÔ-ý_ D€Ålítö N + '}Ÿ…ßèÂ~çK'Ô‰BÁ£-þ«ÏƒUüe(ûã©«ü 2ò]÷‰Èüs´8ÁQÙŸe,5"X8ÊøÑA€0/¸¬ÀjÆÃa|ÿÊÈïÛ‚|cÐl×¾½˜b¸ «­Bd7…óu©ËEˆÑˆâ©¢ÅdÊs!Ê…BíæG>€=¢êZÉ®ˆaYlHìºGµÜ†ÿA®ÎkäÚi?¦øe%Ö g÷%)™‰.ç˼^`½ˆ˜jae«äî(QW|!½[“±ï扠n ® í)$6µàŽ4_Cªÿ/ñ­ ¥l³k=¢YK§¶ÑªtáÈwƒñEUÊÉñC‰ó‡‡G}ËÍC¼–(°Ê„^´¥µˆ-¥Ž ]µíç“f€}™ºôuGº}Sé÷©EìŬÃ*%(…ÜÃXTÛƒÔÎê@F?ÐuþÇ@ÑYÕ÷ROÔ ÿE´×ÿÓ`¢Ëî8}CÃóúVøêq¾ÛˆìÜ þß8 €_ ô¼ên¤ÚfŸô•ÚØÊ_¡Äýýè5ªkI¼”—&¿|î5 +¾‰¾÷¿ü£"@³8 ðºu¶€/¿øóßÒ¬êH>º`GÏuãS壿½[Ã[SA[W}»€<ØkÖ¾ë¢Ò8íŸ\È(ÍByàUǾ^ÀôØ¹Ž®Î@9¤‚%Û4”œ!‚ì4°—â¢ßÃŒ3WzÃáTÕ_»»ÒA~•›1fîH½Ó"9ˆ”âé„öynW>®`àUX\„Qæ0ÆŒHIó9oÊírp .-„õ¹´àÅGyâËÐ$ž¹t“ ÷Ö + èo¿â?}^›Øá¿ÎU‘ òÕ‡¢ÞVžÑÐ-Ÿ2h¸ê`+n?³“v’€"'ðÉ/ïLMæ“![Tðø¿Ò5ÀUv]|´RqLÕœìÂbA£þuâcï±m¨™|‡¤ vò§‘޲ÛÀ,Úµ_Å€q`µQ“%PÌ â‰—CÔãèä2ƒ‚. —r.7Ú-Hš,Ì…};Št0)­½ÌùN}/䀒}Ð|6ˆ ¢ý¡ØÊ€¤À˜X÷‘Fä)5º¥¸öí~œð,9¹´È +Šª´¦’5â3@Ê2—D"î7 ¹j¾\–µaÅEsgqìA®½ÑÆz©\²·ƒLS€Àÿxx `Óš +-*prê+§Š\l¢,Ø!àLÕö\ß;¨wIÚJ.µ¸³‡'§G$>ÆËÄ @)€ã¶Î‰ÓÓÓ‡®p¶Ï›8À?<:zúiصúË߈BŸ56`køhëj ® [À˜nô_ªÒ~,”lÂú>¼7ê‚Aûý3 ÝE7¯—i?IÍÀ×.NŸ(F5…Þÿæ1¿„vÕ‚CЛø …Èæû{ãxÿIggG±pKŽŽÏ.~{½ÀWÎÛ´¿¾zlxa¨N¼Ñ:Ù$ºQ2Ô)’»­\þ:TÍ™›Gãyòñ“µ¢ AÚÂ}išžŒ&Õ·¬×AG¥µ3×P;k‚”£蚨WÐ÷þñ‡ÿˆÐYÞu! ëghø² _ü·/[þ¿6¡ì7¨ôýêÿvLF sâe®§ý² ÜFW0¹†ÿA ¹G€2’%X @[”tHy~!+RkvżhÝNµ7¡%³3ûA©-ÈåÕX¹åh¼ˆpÔ¸;§Ùô±ð›Ô"ß+˜8kˆ˜B›7Þ +M”ó9°òàçÅÝ©Bû”•úÓ | Ê‹Á“#"D¢zrCç®ä哾ç‚‹ÝNÜëàg€Üò‹ ­°“š(à“û¶Ù}zÑþ+h¡íÙ†H\y÷È£î瀳ÿˆ!TÑz>Y‰¼óÙ£ÑàÿÁk‰–¼š qz°ºÈØM¢Qùµéiï¨Òt2qN87¡UçNEÖ E\µáLôh³~8š€‹S~ËVAa5 ÀjŽçš*̳r’¬›ã¹c°X—ƒà"ʮԓͼZ¸׊ ¡ø0Ä=¹d†Ü–Z™åme²Mú–"‘Zr#BÚí¹òñx„0UoçdY +øåªifzêsœ²B\Jœ4Ä3¡ø·ïµ*?ÿÀR›E—)\'ìªËñQ]TÌÓMBt;ø5Îañü¡À©Oø¾ €!(>iÎ*iHØnðMÓLŠ)¥ ®:c­›n ŠêHà€ >ÔÕ½e $çÅ“'çGG²…‹Ë¨¿ÿÝböË}ºYb¡ß¤€šD©÷gÀ‘G?ãÝ èÁt;Çݶ¨ÛqÔ"è€ù¬Àµ#@í,‚ÔNß³/ð¥ ÙœˆfÀ•ÅáÈi€ö7 @õ"î¼<Ë¡°³f°`û‰²4 ÝŠ+¨l¡ýãô:&ŒæôíÛÞ‚}°sç°gP(|Ü¢¤ý%—±ÉÑ…þ +¤¬Tôä +qw|w«u[gíºƒ„‹ºN´;ï‰ìö¶ñ &9´+èÍè{¢¿Ô|ÞÿÚw\±|ñÅW_ñmeü5)@ÖHX®˜¤%j™{€àÎ=?ŒÍ½ïäûx»’jÿZü5ÿ+´”nT©…NpÀ¾5¼ƒÊOü­;#hàogCr®O©1î»¶Ôõ-iÈÙ“³,¥swПÙÿ1”ƒo†–”pïöï(( pæ8àRA{ß{Lä‡AZJdEºÕWy +á³MŠ*ò¹Ý~³úGY"° yæ|PC(݄ݡ]l=Û; @µÓï$³ùoë÷Sê~u¾ÊóÌÁÖpµÕzÜ~ Ìn`±ØøÒ\!s=›< +dr~5s°»`DZö ý”|g¾'–h¢@4qZ©¨4uªð/^Úfôßv"”Þ[ò¨M ¾Þ¶\X °ÚÒuÖƒA6úùÌCÔûš; ;‹A 8 spž™~&7lî±™…øl|óhº]hê’.7„ Ðw-þÙÎÆ™(P%è@h5ŒÁxdn‹fGMÊ w ²š‚Ã\$—Ùëi °|Iñ„6îéh>|ÁÏùV×.g8^zI­aÇ·‘w'–èFxÐð<éðÿüÃ&8¯Dò´ÀšÏòÒi—ñ)O>ˆ[1ÐtOO»ž·´bƒÅ%–Ò‰9Uèa@R há”(„•¤¹ìfÉ‘9Ž#|æn S±üçú„\3 €ôf1RÊ®… ¬×l)G Õ/¡;Þî·Ÿú¯@ÓÞí¼÷†(*ø__îJžj—.È à¾üðϱrÚÙÉ!݇V×àüñ¡ÖW-0t®ðÑùö€…?Öèåµ»(pÅïâ»ô'ªúV;ç/‹ö]L-Hžìþ*ë$yÛµãoM¶6››íYÐú䂤¥÷âÀ«oŸç GEµŠj×%Vøuè[^ƒà°³üìÝkßÐYþ›>З_~õåWÿ) •ó×¢†PE"ÈG¯TÐØ¬ö½b¢¯¾à@\n©~¢b†w"¢ÀóŽ l†Ò®o÷œnw§pUˆ4Z$w$]×£,Làî½ñ"'ø”uÑS*(;@CðÛÅ "í[Öj½ù!#ƒe/•Y»™„jƒ¡ÔØvØKoA½}M]Ný¾+˜j“ݯS!+½Õd¡0Cꪉº«©úº¢¼ (Ýån@ŒuÑÙ÷fd`¿±ÎÒgd€ío'VÃ%cróè`«Pøï9%ï˯!º@ÃÕ-‰&Êqš“H1G õ—óGkàÍwѵ“º§»(ÝZ85§¿8ž‚fÑfA%§Ägú`¥ƒܨA¿ÆTª‡¢-Ïן3Þ)á S©¡•-**Œ'ºó» +ïjö|®æ °4±ËûOV“>ûuÌþËÂÏ\£+“ +Qq=TK ¶ìà78–£àsÕ†zûÃà„ò’IQH%MP¾Šs+Fcm PŸxÚ¨–€ròSµÏÄ,d`>éOç±7()ayáZùB®ËSS–¹Jq^¨xYÌÿµ{L$€¨ÞmGº´iòã €–€8ë¯C”¼_@ø±éBAüÊx&þÛO¶i—ô{HÀ’G Fi5qkÓN`ƪÓ,™þÞ,–xò• à¤áôË} à÷×ðŠ®øþ—Öß—Y`G Ô/}»ÝÞa÷ëb.YºYePknKeûÈ‹Á?ʽ`û}wðîm³¹2¢¤ÜÏ¥=Ì4@R˧ +?…?ùío[ïH¹0î’Zn7x^ ¤gÛ¢¶ÇÝ&Ÿ¶iÁmo‘>èÜùÐÑÅð f|kJãSX:¿øXë£hOwß¾Œÿäj µN4£¢ö¨0ÇÇC9U”‹ja©ŠØôô=‡ÿkj>»Y/ñøâ˯¾øú믾úò˯¿úº•öW ¡jKÁª ŸãÜ ¨Y÷]×3ün ý‹ÿ>_"k¦ è‹A¦¤L”‹€¬•;c÷âlæú9ü_¸ëF ëÿÓs$lÀï ø­pJª PR–­ )<}EÖÎV€ŽÀ±dŠL@ð0•t[½¼’¬ã'C™ hñ"9”Š=_Gò“³Ö§ã-bŒPL {ÇEˆ'·:<;>Z¯Ëì Í×ýÿ±d!à“Z Øgû @&ð ˆßÐ_Íÿ6%–þUú—ú¡€! L_ÿ “‹ÚOæ¾åfÔÑxŽ‚ö Þ8ÙÏ%é•€Ò¥cÕj«N[”H0Χ€!”W‘Wdå#4£ˆ“êË!r«S0›ùüh~ =>€x¹\ˆˆñóŸ3•ÎÃm§£ “a´š ÇÑ’¡µ/,–- ”«X׫âø:LcPB˜M–ÚÆË¹ø/¼{7̆t’ +æqÔCˆàî(è³ÙL4B¬Fó¾¦Q|ú- ößÏ<"œ±âÌ óû'ÈqV!=qiû˜ +9‘Z¹Ü6u®ó¯P¿NÈi™} §çt”çO@éGM8ÕߎV•æ( w˜­œ €\AàJ¬úYíx•#ô\³–À$¶t¾vÉç“£²XšoË“t)±žŸž³©§Àƒ–({òá‡ýuŸúÊø¯à²t½@¥Oœ`ïaë´þHˆœ5n‡ê/|oÚû½;ä¶ÅppÏ·8þS ÛŒÔ…l»„èØÆ @¯®ÌY¹(z ×àROIçÍ& +AH ÿ rY,üOu‘0ßYâPÀ^š~·TH¢»ã¸ZHÎÕ©쥋(;øNDiL¢Ý(‰ê<¡dlqß–¸ Û4 €ðŸÍÅ“ˆG7Z ¶‚¶C‰ØøWÒ®Œ7$`_í?迵ü‡WÎpàÿàë/¿üË_þJƒ…i[ +Ôq±Ü9¶=dô[ÄðH¢cг¶ô$wÃιóŽëÛT²†¥ø!@Û¬Ò[Ñý[ö¦J~v–—hšz6_AŽˆrœ,“e¥RÛ àÝQJØW‰ ÔZaÀ¨0s»I³!Y©Hž»4ò‘Ú¹$£|; +¥çH3ˆóWîâY!aK>Ê•"f'ši€Ž” +o§±Gé&Nv€š£½k»%tøß{[_¥ß™‘ô–Hsà ’¦ëý Nù×µn–Ôtwté¸çÍÇ#¨ŠØƒ]"ª«¯  ™Ih×{ÓÑR\šºX*­˜¯ç¦p7šúÚÇ5%©ÃZAaÇÎÑ€‡¾/’ƒ&òªSÄs¤A¤¾Ÿ`¹œlfkä¤U|‡ÎµÄ‹Þ“¹(¾ØX€ŒûòÜYò.å|QÃ:Ýg‡¸2éÃ+ùœc@ª¡«ïjã÷ʸ)Cµu‰‘Àìw€#®ûÈ>\!× QÃUz¼¼Éd§žžƒ²nù£)Æí[¾¯Wg€¤ÌË{“PJ#!Q¶Y±?'½›nh>ܦɞoŠ©`ÅuA«$XìÜá“8YI†Ì ¸¥ _ìî½O“B)Å]ÊÚm"Çúó ÊϹ¤KÆ:†]¶ML ZÑ1¢Š$0TÙrÈ'&ŽŽìòÚ'½%í·Y¢šƒÐ>u`v ¿ˆ§9€d×§~ã*mÞøÊä¡’Üþ ûh‘x–K ß4€ŽrëÚO Þú')øSF1^­ƒüžBvªÿ\:ð«'þÆU÷¹WW³ÁDZ<ËSâÇct:Œ‡+¡ÝôÉl Ô ûCg¬Û?9ˆ®©\œì€;ù–ÛùjÚÍÕ¥R %aƒÁq¨í6Ÿ‹¨Á0½p L8?ôMÁeÌÛ½$/SÌ šªÞ«Xû#³7‰¾0ÀÀ‰ŒX + n)"ÄÆo9.DPú|¾Ô PÉ ïW$.Z§¿+d¢™«-QÀFa ƹOý‘ÌÓŒú†e¹ž¬– /@±¡ÅKBüA€™{ó•»´qô5ÔÈõdžÞ1C¤Ñ3~øáÙ¹ÀÌ!Oµý^Ûì(8>9<ÓÉûáê …€}ï/~a ç'G1ÔhþVpÁ`v5âôïöy žüàøÃ'2õ"•`àÇ|B^| bã ê¯P½pÿ´Þëܽ¼M öwÝ'¶‹gÛÛÎh©³ƒ” ~òPçúsr7tbÈXw°7<<;ÿ²0c0ÞðÊÁmU@Óp|®   :ôêåx‹ÎE@ßûFíÏwwlˆ}•Í6þ¶CQº¶.HØÞЮ.=^6‰nd°Mî¶:™oK4–izüøº±ÑEHë~ò”æÄ£÷³¯Ë§6n»ã¢Ë>v©ßáSôj—€íÕ¼ÁeÅôð÷·µ¼z@ù|ýåW è¿¿¹  hz;M1txج}%ÏM~G\f…ê×]uB‰3r‚'+_åꦷ}‘¤ˆUûúeÛÊÈQ’¹Op—) WŒ§EåðÒ>Ý%%½Á:”’£ÎTÙ–Ñd ÛZŠrº…¥ph%Œ¼õV)![¢"¢Ô§óú´ž3³´”¯ÐÍÖ)üÔ…ê[{ží{¾âKni®‘Š"ëwN½ýy€%Œiï–ÈÔ±¸£º°ì!?xhž^©QÍ¢‘Y-~I™#nªþ‡ãÙT9È{q —]†©Õj½Ìp \/óØ(Þ‡@>ŸþxµBìÒ{ Ý#_;ÈóGnØ6÷=É6 ºúΟT(OŠÿ'G`(­PðR§¤ó‹Aúé…ÜœŸ€?G?§¸󣩺ÿ)÷ø8¾u;ëNã ðä¡>ÛÙˆ—©{ +Æ_´Ÿ[€f€à€±;€ï‚Wb60GíýnÃj϶‹ÕþWA6x”ch$î·=÷5ªz9DJ9°®ÀB•1FÊýÑÐó]‰Â}Û}u8ÁI¿}ö˜¿®$Îd >±ëïýìò—O°)ðP6{»o°@ËÚŽ¿-¥¹üØ þ_@¨XÊ<û°â…ý!;‰]ϧ°çLlö,Ýè]žÛÿïñ +Zh Ù-Rænu$Çí÷V^Û¿À$ƒBeTeÐ}HL6ËàÄf²å@FGÑ…ê ¨.½T•V}W‡'1بE{´RÍ:ÇÁU€Ý"è'.®DGðrJ& éKÍ q¨s +!5Ãèda¡Ô_ M?GDØ o«¼/—ëµXÍ.L.7³•+ Ë’BÉl¬D ó<\#Éè F¹n×åUƒåÀçJ4Ö»±Æ¨?€c>¬e^Eá ŒM€í:FhÝ/e?ß‚þ66ÐjEÀCÀün_ÿ._û +'P{¶],-ÈÉðý€.]J’Êü/–륀ñ”ÎOẏGÇôÎ"øj@„œ¼ Èè= ÀÙÙÓÿó·Ï\- •[žø[úˆäãצ¯a¿ìŽEû½lrŽèH]‡Q` {HGççÆx7‰n” uŠänÓÑ|;Òøµ¿¶Úö,4?ÚácîÏÖÐê.Ö‹“â%Ô0½"<Ø.±þ€*þ Ðßbö»u^ö.€Ï÷-Àý¾ è¿_•ø÷¶MžCÿ„·´¿žð$‚6ÅÍH‰`GzêÅtí„ 7¯»XÖ‰ ° +rwîÐ8k +Ý…ïÞØ¯‹Á¢noÀ°ùTŒÑí9©â'À§C‚i*“ñ޵ÊÎ%V¨È¾’¸|Ë T×âp€¤ó^Ö‚C3Pwê±î‘vN !K'Q~õ 0[\çV˜È +û·n] Xôþ½šé¯_Ýn}ÿnw>v>©—ÆúçKX[þÎÎ`ÛPC1¨û§öñ9æ¯ÖP6€$ݵ~Ÿ†¶iqA$ýù@‘ˆ@f³†{Góõ|= +Tr`쨳’µt6TEE÷ø‰õ½~¹Ò pêø¶>ûëãŒFïŒûºÁ9à¡ÓåF©¼€?è¶ÄÏ'“©2EVt@,ò²º\'ϵŽS'l6®Idb#§ çkRÅK?B‚.l …tÕÉ^^<—ùÅšj7ã>Ь¢# Àðf²\|ð`½ f“9Á0ŲÎ5v`bö|t0ZϧôÚ‡õ²hâúÃG“¡*ÿHÅÚÇÓ7|>A˜:›‘RÒàÂr#””|F ¸FF¡B®‰shüœ›µzÎÝâRÿ¿dëÏ?BIïÜú!}c2®›Àôø+€/ÀýHJZˆýEºà'$‘®Üù:äS·d[±6…Ó‡‘N éxqîRÀð¥Ìð +ºo°¼–@(G‰¹ÝùÐMæ=ôùž nRËA÷Ú«ùW¬¿ +Þí÷áJ ´—&½êBþÚóƒ;©8–âÿŸ[Ë0Ó.•&2pÒ䇼 H%ŽØ‹gŸ|òì±£)–ø`·hèý¶îáê±>{'¶›–7@z °sç@7Ç‘Ýæ›ø|;аËÿîóqÒô²ù˜4§Ü²ÿõÝ…ókÔ ]>¿[‘×XZpŸöŠz5ÕðDþ:€÷ßÿ/ñèœ_ôØR«¡£ïÞ¾[/Ø.*Y&ò<Íævï®í0&ÛäaÜÔCô¾½¬ Ÿ¥µËÒ°¥Ô»=bà¢:$ªqu¡ÐË´;Gq{#çÝ9áŽ|B±Áߤ›pŠO çRšš5ÀQ‘¬À7)’†\BˆœºCY=ß$'˜Gš –H§SÕÜê¾¾e\èÛj'u&Ôqã#E;¹Ðº†ÎûïxQ2EP Q=·'™8t‰!ŠF0Ũ§§ˆÁ%[4›ÌïÊ5óÛ¢?¸ |¶>Ap—@ìÞÙêÿÛâºçK~Õ.Åw%€­µŸ#oa±8ð_ÀÊÞµ¥î‰°Ì&€¾åûßDKk:¿G‚ùõ|íkuDÖŒq×jû€OÓÇ—Cñ´VÚ·ˆ1h$Ö +‘ãÙ¨?XFÁ÷ý@¾øo0zü÷ï>%èZÂÑ5—SD´ M¼?Z¯€amê÷ˆ«®¯¿ßp¾*M¼\‚¦+ä‘¥>ËÉh/ÆÃ´a¦(*LÊ5WY\Íåºw‚eφ ³îyÈ\À¼\gøú( +þK4³Î  €Ÿ>gúWÅ@7 €àùÿŽ0€p @j8©)Y`gShkÒZtŠq€ãá!’€<4œ¿LÁβ0þMר7;¿ÿ-Õ”€îÄ2înw£ù=ORž¨UowÐ߯()ôÐÞõBÏ€× Õ]ÈÖM©êzøeë:?AŠik ièÝ®uLõ+=m7ãèìüñ³ß>»pb@•[CÔ:˵å—e0~m·Ýdç¶‹ü‰6Ølõy邈) @‘Ñ’(‡†ºŒßŠbóåÿcCÙÒ¡š`0?:Ö»0ÜOÝݧv;^ªG¬c{R¸­¨Ë€ëÀ?ôúWU‹ÿEýïö; ÀÏœxÓ,€Ï] ›pÅ è¿·::BØZ b•ær¯ ȆÍpÈCGK0‹FY„ UUD£’M÷œuÅGh)ý#ßÈèóE&Ã!g]묧wÜ ¼Š â_à–_J'‰‘.,v +€óȰäT½HîËaÙ·cSYàA+Õ•Ô‡ÃÁæ8/¢p!ˆ:ª£°NŸòBœf õ|Ÿ;U×`ëÀÅ‚zNiÅG®ÌörªJã]ÇMR#lp©‚ϼï]¾>ï[R<}9½[\ŽÜ¯ƒW#»Ûî×Yâ¨ßv% ÑInuÿ¢,Ó®µM¶}ß°ûhÒ#›Ó‚ߺ}µÍzÌÏ]c +nu!眣Y¯Q/Ažç€ @¦y@€Ô'.ºîd¶Þ¬×C_Á#<k(4L@㜻ö|)ð9‡}l±}q;ù³ü·² ’è8OÉ·vPÑ×ù<øò~ÿáù\½ŸJùÃS5®“ç«Ys œ¬IUño<Ù°.׳À.7˜Ñ‹\º¨á`å A;;KĈ1}üéŠëtŒ€Xj^,,dPÃ[Õg£°3[¼_s)i”Þ‘VÒÿܵ€ê0„™Éò‡?n•}F³èø0:Þ'ZÖ‡~µ[€ k8ÿP¡µOº‡PÊxÃÿ㸜œ>Ô +Nå((vYöI¬k0Êî>؃…J‰Dÿ=;@’¸Ù¦.ªƒ :@¿ ÊgÌO\~n¥ÀûøðûüíBÉZ=Ÿ}tŽÆë³ÍÞI™PËô­ˆŠö/êÓÜ>Ž4ðñEFvD(E§q²ýt›¢-Ú·0i› @¿t3®5@¯{Mmñ¿-öwûfø§—¬ð­-U^¸}·GcÙYÓéKô^û}Õ' MGý¹R€‹Š—pzNÕôÑo ë£þ´ïëΧÃéÀî{:šöI1†ýƒÑ0ZéÜ€Š$¼ ËP­+z›ü5ØÉî€LYØO‘AûB•ÔÈ…U‰<ƒþ¤ßŸ8Ï<6P¾š§élU#‡G5¹,Š/`ÀeôNˆ4|pM +/aÄSÑNÁøþ€t½¼ÄÞ,1™ Æßj ôsÇútÑp+tã‘è|×Ū¤ôîǾ®,%tz¹Tx÷ ý¡B~»ÑöÉkÆ›`ÛxÝ€ï1t†;žZ‰ÞÈ&%^±\"°zK?C¸®ÅJdçÙl´™<ÒíR€ÃHèÇ@áj  +Hj¥›åj54=¹Ë‡Îù:¤QÜ©ÕL~„ò'õ>€±7ÖÉòÜOõ“")EeWVD6]âBÿÛ \ÀM^3øj9GØ(—è¿àaÔýçú¬gz4^£€¯–e²P÷—O€Ùzíìý”oºÑf‰ á’Á`)W5œ<_+²Xg”óÅøÁƒµþz5¾…P¿qYhŸ-(n2; +TÓœ§«ùx8ÏÇÓ¨dóUöN€Pí}àáSX‚ ç¢öO6È ÈJÈ6¥/X8† *جÆZ[䛸Ålòé‘còHqÀi‚Ã1R·“Î1dâù#Íà¯2iQg¸÷¢àè²ÀÇ`?ÈŸiexòäËOjI–æpàž€VíàVM0Ц]h8~M €£Ý/øŽÍàÊÛÙ$E]]m}J&ØYÜÓ§|SÒ `hýÝM;§eÈ̾i8  ëVoüèõ®«ÿËCÛYeÿ/[^êÐ*ÙÒwï¾}ðƒ´°PãÔpgèž& â ß)€ó¬é§.B:÷•-@­ý.ØN˜ø/ZT»Õ”æ¬r^c¹ý(p éˆ 8ªÓ¬?8Ró +±öÀª ë Ú”Èw8úh€¿öÝ·¡ZçhVhðÄú|2EM¥LxR¤‰šš:É­ Bzj&ÿ`„Æž¥Œ¬»*Séçj…zÊÔÅ ÷Åyêb!÷pIÈÓ)•0¤ +tP@¥oº¥êvcØ:ngÿ}æ4ìÈÎÒž²:M»Ó8– Zù‘;c<Ëyl)+3ùèm +­•HWZo jKü<žå+­ý@AÀuõ`E]æff•Ýåd¼˜­|%®Vx@i¾”4¦ûUIÁÝùlVZ˜L¢j4 Hãñ̛ν|ç¾Ò”¸8‚ˆ Í–NP®²xG–&ÃÀ^‰„SBQΣ–µð¸\ÎÊWxèë 5â/4Xlà|ƒÀ×áL;¼Ã"l¡Büjät:|ôêÕ¥#ˆ7stÿሠ+àjf á{õàÁâ‰8¶P@¿5„8ÇA{½^Œ&£ß”IãÑTðã·#€L¬ð¼E¾´h3^ŠâãGVýW¨ë¹žŽ«åf¡ãeÌþ-KšŒIx»Wë8®¸Üíxt€Gi‰ç—-¾à}™žBÚZ²€«ôtº^-çZþ÷X솑Á‹,pÕÀ®,%UذËðP @ª!xhY®}•ÝU ¥œ}Ľ¿I2Þkê?gÿ]ÎBÄ$À&A –—~ßíZ¸íÝòk;©v2… !–ÛèR@–¿Gµþ³ÍTÿ=âÐ+SÄ! ²ÑñÑ«Ž8ÀEžêx|8ÌúB|NžýŸÏòa˵‡èMbÎÓD›7) ‹'TvŽêÄ6`Þ:C/B÷ zî|ÞÜðí(n&mÙ?7gÛöécdƒóãï·~.õ×®X‘­Ž›íæ>/™V —†v³<ðW¶[ü/j·a€ëßÐYnœð¢pƒ€vX€«ÄÛƒÿ‡™ˆ¨Ùœ®BàS±¡³/EvbÀsSd¸z<2ÀmúîƒQo|0œ û$)ûvgƒ¡b4¶U”ÁúaC¹4 M èŠ~8<…÷Š)CŒb7 2J¦'E dÝ(Eûë|­åt’e[ôÈâ*âj.!íðÔÄ€¨ó©½lÿ:„)àXâË5Áž²‚BŠb—šÌ(ø.|ÔLúét°žËÚþ@@ÞïÝ’€ö‹@ÚPÈ¢=_/×9ð@ˆX`<@T©”¢š LŽô£ˆ¯AZTàBá%8(îÍ&kÐShäïŒ)ƒæ%Ð9jâ­FÐòO"-÷MOØÖÑ~¡IÖ¼^‘/œÙ®€< ^¬SþBCÑG)Ë‘³V›Ífú;[oV  ­‡ˆ$ÕV ÂuÏY/IðÜɋŵ›ªOwÝ ¹&¹†—±Q;bè¿XŽ—¹xs€£¢Éñ3´´¥ëx!ã™B5—>Ôøà€2‚ò窯`\‚Ì +í}²Dò¢Q-ázC%«•~—EÔ ?ÀjýoULÄ•ÇÇüL×ýÑrI +Ýâ@+tóèü²àÜF7qïZ ÀQgÈ⫨_`üÎÀ¹­À+,…ÿ”« |œxñ>… 7ú„®S©@)D‰h”ƒ­/ÀîTD„xìÀ=ÀÞm²Ï¶B]p¯?hÈ•ï“7„|³ÌwÌR“NyÒ`WñàáG秇ýÞwâøÐ-½¸ Þ‹ãóÇÏ>yöìY,kÔ›i€±Ð§üÚazâó-°ßålÛx2 œ§ j€=3@¢¬C“»ýVÙ²Øv ôË'ÿZ&Wâw~|ðÆÞjЉŒV‚jÀÍôÊ+ëôþ}ìÏ~kø§×žp@«fGŠžyЊŸàs øåa +‰ÊÒÔakGúuÔ¶ v€_šú.DÙ×ê®ÿ=°‹¢KìÜNÛ…’nPª+4<¸ƒŸ£Ú;: îíáç€ÞßIhÙ1þ 핆“Äižç¬HïH<¬À­é½ápH†yúhûl:R dª™n6 +W.ÃË‹ ¢`’õç’¬%uá"Íh‚œà E² úod £ãát(8I +~ɰjê?d§+þ+”ýŸ_'ÐÆ@fž²øë5øÏ€&»`º6»MÒ tÈM[­»=¼>én|´›o`…«C¶ßÖ†ƒP]4ž|ºz¾^ÿø?ûÔ©«Íêù-ú7+€Å5ÿ€7w±“+¬«ß‡¾fWõ@„Ò.! ¥:ÑñgP“÷õ ºJ‹CœÒ«_ã¿sàV '³GëI_\]u +·‘ó% ¼å—hñýø¹ŽŸÂùòùs@t³öf³ÍzTÚBɈ-Ú2~°YøÁâZÓ†[®k±ïzß'®¶›¯Cȱ/ní$e¸!ã91”ºáêk˜w%nÔÁÐa#6z R$ h–I®šÖ™=ÄGcÇ&6¤¤]!)h8đۀL"×N:Ìú\—³góG³GžElqÀ i+nöœjþÎP¸dW@%-?8Bèht{>â},‘^Ë  ³Î÷g¼Â Mù¡c†N…4j¹^Û 7út³LcÅIÑfp&û«T²ÀV"š3êS_,NˆÕ£ñ»£˜ê› €ª=üç/9>ãʸá!퇠ÙíÞ0ÞgÙ¢¸Ô @YâÈg†DáÿÁÝšü¦Chý݃‘‘ ¢û{TFU×Qѵ%o×í,üÔýÛ,€`ªpÙ¶Ùx[×bÌ·#-LlaÙî¡ÿÌo; + @,2Ñ8uüÝŠ2¶uŸÝ'÷:Ö]‚—X^)\^üÏ­PYÚÛ¾@«gGÀÈ5€}z¡í¤Z‹í¨ÃBGÕǃ¬Wb=J(ÛèòÎbÖ@Íœ†î¸TÀû`:îMÓ“Ù«ËLû= +¡3WÁs$¿ìý¦ôG.ÚAsíÿß;lrNŒ‰6•ñËSàPü×зžéQŠè{·HN«^¹ +ºzcS²|¤0 f‹íÊQé­5Š;‘i¤ý€}ð>5iˆH`nô¸/µ-ÛÈx0þ HÆãO=”hä³ ‰ÿ—-%` +ÎÀtÞ¨¯=eH šAÖ·àAä?®†‹¾{pý­·„÷-QL©ÿZ.™ª‘\GH‘(7qTé Øâ¬æÏQ«—(ù‚T¼é´’ƒ²Ž¢Ofñ–û†^­ùŸÌâ¿óÓ""€EóÉp²âÿ˜Ï™4°än·ú&šŽ@Fòð§yc$âƒ×úÌŸ[jÌn—“‘~èõ`åj9Twæ,BÀlñ\Ͼ5bÌ’Ï–k-*Ô¤p’éä::åz¾Ð67œø—y¸æjú“çÓ˜ VåÚ8›e N´Å+» -/ø\™P>4á@©àYì´/·®Ñ–)X ÁY¾!È—Þ¾‘€û= @Ás€Wâ71Y RÉo˜ÏNk@³t Ë¿5 @nã¾@\ågë@O_¸7Ï”\Æ'Ðc REôÏ@yºA¡]û>A +Bªù{¬ˆìVzöÅwÀéöZ€VÛ À9éSêðræ"·Ë1=w…>ò9™Qþ!þç&¶°çZàšÄ½åFužƒ¸LI*ñp Æj;P—¦†5:6ØÍÒ¬†“çs x´Üüf³^ýù&sN€­¼Hf¹oüë¶?Ý kò¾Ú{߈¸9Ó±ŽzSWOÒ†ºô°Ù„|ªnÛÃGK4$×K+±8G&`LéŠXç<ʉ’„˜o]ë…{Žáz4y¾ü—9Œ!:Ôß:Ë€";ºƒ,7̸ì@ï«)À¹Ípþä5gX¨_Zµ)ö-oàýáž@8|Ñ@e¿œš…¿NìS·`¶&Ò~–QýÚÝpðbÐÐPí@|ãx•Â`Ìû ¾€/ù) ?{oe@Îp%àÛ·ßê–Êâ€; À‘€Ç€+ðÝËTγžaÁt|¢Zˆò‚y¢"”= GD«êggDeàS¹2 +b÷Ú>•ü›S¤ÊÂùk(ÑÁý_*iÐПzÚÌl?;vÒ}v@³ÍÞt­‡mÇ7SJ»†vzÃüð×ù¼÷~¦@(øÙðr€ 7ù|×gç9& ÁvH `x¨ +&µ¡r-6½ÿDÃi>¿CÜt€ž;ì½3(Èì)Ä÷}0kàütà\»Ý`9Ø ”º/|w%rJ1GäÝ©ÁYe¤²˜K @q§„ñ`„h¡·Î¾G/G÷éLÇKº;wÙ€+× =.I.0E+_PWjU©BIÎ'aJÔPiÔðb'íýôîƒÑd€ºÜ#)…ò…êá-*üß³hà9s@€<<|vepsÊF&ŸÊWDN# à‹&R˜ÛHí[$Ûnk¿Ü½}@ÖjñV“ö5ç¥b©ää¶]£7˨ñhó©Ö¥sÉÍýºJÖG {΂X¥ˆ•ìü†#°Ó­ Lzþ7´Ü`™H;ÑÞç¿õý>…( Æ‹À1‚B˜<Ãhø…w§ÚÁ5íX |Ç'ÖCi p=PµÞlæËç;\¯ž¹‘.–ƒQ0Qƒú—ˆB`¼l‚‡L`s=Ûh²XƒòBvqÍ¥;ˆÜ¤)ÖhY`ºbpP°ú²]ÄÞ,Z.¨ß,5 ÀØnß<  óÎà,-ßÀ B@g¸Ù`·Ànìß ¶#þµLehx¾Eöë^ úæ~êjnäp'dJ ¤öÅŸ¿Á>¡2œzEÞޭ·z÷Pö“¬,¾­QÄ?={ü¯OŸê˜{íˆÿ¾ÐŒï ½©útþŸ®&–GÍ„ #Ô+ ósÊoNt~àµf¤{ùf´Uÿù¾øéÈy€¿ÜMÈ«|ÊP$¬ß`È·"ºÓ­•\![0 +«ÀV@µw½–½6mîcßXD…¯=·pU§ p@;yÀ×ò¨¤â(ª`Ÿh LÖ-Î +ÙÊ‘(8t \ÔGX:~nÝ*¸äG àoðÞ*`ñ¯(Dð§)•ýZ\¶¯Ç¥E,ÊBý2&€ +¯ù_'×äÙÀÝrµë®ÐÙ0¸œç3þy›4³€¼g¦/{ÑHßm +Ü/ò#%,r#‘ ×ò\Ãü$÷Jfî`{¸r6qã)Ï–NŨָºçÊ4k áj7Ëõs„ !¹Ï]ºX›‰RÓF3Nª&¤§Ü:* @V¼bpàZ Àåu:€½uœhçûš€æxrz À›®=´µœ>Þ®‘ Có+ëì«úE-&‚AõëÝ~´Î»—¾¹ý^ïJÀ{C^ôŽÚ¼ ˆù§‘òšßÒð•óÃ}‘B€ïl-gÇ`=]x^2àB€ ÿ³ÇÏ;†ÂaË¿§Ñ^ÁnìÉé` òÆèîû„²«˜mD*QÀ´ èØm-éŒj“èFë°²|3Òù¯&ü]Kœ0ÅS'üòÉ¿þ²b/û„µâØÝ%†Zš˜ø=˜7á¶}üK)î*5”¿~ôÃÿèG?þé?½ûî»ï¿‹ð»÷ÿ«ßÿøÿß>þÿÏÿ¤æÿç/þü•_}‰ðõW_~õÕ_þ¦Q«jŸ¾ûöuë@> +µo,Ûq2UóÖmà>ðÝ—>cKM(º¾©†Ôew"hQ®všÛ½£°p‘ü/hèœ) Kî3÷AϽÃdjTMx!BR–­Áû—Ûå=WÂôßq”e8tèG8Ld¡}šHš÷Úÿ5¸ ŒÍÓmSñ'ÎŒàÁ§µ#†Àõxéüÿ²gÈuÚ‡8çß\å(W@[r1Òê%(”Ò¬€6dMaʹ*¯)ÿ¶m„·Æ†ÄEõò4(7Èu²ØZl_|úý*Å<$Ì%Gœ‚“ÉlØ(}¥²H\Ž/xã¹ã.©Ì…"蔀6ñÆÃ¸Ó+Škt_»,[2ëÅš‘û6™”à…YÁHpðò,€æ Þw>ÛuÊ@óÀ.=íõ}"ì|Þl÷„„Q©ž.âÐ,‚¡ß¤ªîƒø¤kÖ€íÖ]ù¶ Âx·m+þÕwïl¶,úfÀ¥1€!µv‰¹¹p|²µ´@æþ¿ö€Xr‘§néZYÈeOÿ'Ïž[×PC½¬>¥úŸþ¦ù—iðmŽK?Æ')grÂ8ÓšŒSÉ¥¡@R÷- À·¡ò-A¯§})\ý©óé¿þò—ŸüÒaéãóã»ösé(ÃB8«ˆщÿr @ºØ—ªÿE×\è÷¾÷½xÉGàG?þÉO~úÓ÷~öÞüÝt øÏ @ÀgŸÿÿ ð‰²ÞñÅ×_ ÿÿeK­®}ºÉ@€½â£wkŸní¤@V¸±›Bøí[ó>ýÓ;ôMŒ{‚\ßu‚ŸêÂ#ýZPÛUðǥܸGl°odg§o÷NN6ê@ö“žoø›#ÂÚR¯+ ’„J¶½1ÌE¶pÎa?/Œ¥û[¢Ã9«Þ´´¿ ªÃ„/×™³ƒ¶OLç»G.ß›lÀ«½ñDaÈ JÏ,ÜkÝ|ªãVñ§GŒï{Çš@v‚h°¹’ÐVÿ/ ÀGçYÿ»ùD;oO(O¤½Š$òÛ°uƒ¶€4jî|*»‘>îÛoY': d¤ÔZI£z:Š4ö­ [ °s©ÏhÙq‡!3€:éägRO*E!í.Á.ï<"·^íÙ¯ÿ¥·FÛŽpVr/=‘‚ÃZez}Z¨÷žmÐÛ¿ ¾+K€/ÁNoNoš`ìÀ5ó=vHƒXDƒŠr]9å:ÿ'eÐÖ­Ùæ¯bÅ>®ùŸk·Mù¥!»Éž×>9´ã²§(Áƒ”@sƒ/ØG‚S€‰Æãé”f¤]A.½^4{k÷vç^C\©ÈÞBÊßz¨†qšr˜ödD:t~úÚ>à×ö]—×h³.è¢ñ‹òxYžø)½óxÃu²ï¶ëHd~õ:m]RÍÁöø„ÛÖEÿwßÝÙÄG0òàðäØõ:ÊÐ ÿÙ¥¶û?% [  É0@¾Q0–‘eâð×U)Îö-Ç':èü× €sHä·ÐÛ÷,î_{Ñë ˜¤‹«m}CeHÊî½|; @™ŠŒnÔº–„¾!¡"ÏŸ|üT˜×¾ù÷ñãÿŸ~òÉ'à¿ÀÓŸ"î–/–‰ÆWZé’àOš¨Âø=ïê\Cõ°¯C)pŸ^ÿÿð?üáü“Ÿò}⦅¾÷þû¿ÿýï~÷‡æøÙŸø~þÙgŸþ9ðÿùWˆ_}ùÅ_}…  £k-@{k=RãOâÙÎ}t¯‡¤ƒ´œj®útª†Üºº +”ÿyé¨{ܧSÑ|óPw;˜i¥«Ÿø.^»(aíª·½| ?¿D° yBÄmAû¾²˜°• 8™j– ù=ëº)ô“" +pÛïÙ-ë2.øƒü¾.Õ‰Ö¹5ÅáäÈ:Ý¡z¤µx”BÜ’­Ü+öÇâ×fÕ®I( XrÃjl&³ÑðþdöŽ£ºýþ;$!#[Yí¨=»jrÀÖ 0‚wän$nþLâ{ì/] ]©ßXö6WR·Üi×,”[›íÀ¢ÖJ:²ñ›™]€¡Ø‚øÂ¹ +¦¯Ë›èèç‹íôE+€$nupqÅ_ŸxH Ýæ +¸@´~OAu¡ þ]ï~þc€Q¿w@lÀŒ“þyÂ`A©³Hki§.L ò€Ø=_Nú#4ü¼XOüàÿdÛD­V+ X®# .˜•lòÉu´cˆ¨ t/Ìêá¨&–šˆ\TŸtqØû#\%‘²Äyv4¸X" )\0D9f&©¹h¡Þ¥?ZÌ–ó­^QÌ»+£Ö=^,H.©¸‘7nŠR37¸?ÔÕ@9®Éí5ø/)Í'@ô£³|®›ÐÖØÎh>WÖØú¼Ôö¡Â»½YßÀàè°YûdxÅ:-:Dبλ@΃êèE}ünŸo³ñW`÷ÝM¼éÍâ«x +÷-Z_3pÏaõt< üwПm8}ˆ¬ßIèÀ¡~JKe°ÈÃãÓ‹§O?áZ2E߃ú-ßUP· (ÞÃÄÙßD¹÷LÛU‚œ5fk0àÃŽÄ„»£Y:Tm[dD~éW¾5[S!|BõÝÛÇ=úÿ³ìžÆð: @˜ ƒ)^âþd韤p˜Ÿ;@bÓ™¾Ž ÒïÑ÷¾÷ÿð½|ÉüÿáòãŸüÓ»ïÆð¿üþ¿ ¨þÿáú¼F>‹ûÿWz|ý%øÿ… ü7õjµíÿÛõM>wÈ”w#l%€ê’i¡d›€ÞÿªÄS‘Ð(ºµZ9òœ](Àð™K·9ÕgáU˜u¿Ìþóº +•@¬‹EÃ'Ðm?!7]!p[¾¾*@P&Ì~b|×Cà¾x3ÏÔªZè}`‡G¯MQÁè]GNÛWÐRŠÏ¥€àvºÔ&ùù¡ŽÈlÂ;ªFr oHMðEù‚~"Œ ü®¹ðÍ2¯ äè‰d\ŽzC!ø¾¯Ôm0©:äá„«4k5ø•“Ô÷¹=io=þ) +³¢ë ÷ð?"6RhJÂ(Õ“Ylû}&Âæ¼¸–8ä»XÊõ:«»BA`òEÀœF:jĸ¼Ð]–ÉÖË"ëÊœ£IÜJ)€#OÃÇÊP®–³àœˆ×–%ÙóX‰Ó´U’Žûˆ^®ÍÒš 5@ «9M,3Ips±›;IÑÊ–r=æ>mïK*5…k¯€¬ÅVêi¼Ì¦ÈHãÉu>ÂÔkøÐÿÖ:ÛYÍðÊ•mÔ±ki¸< àÍ}º)õH ãõ>ÛuŽÚÔÿ—SÞîKÈïà Ï×g¨"ê°ûòKdN{Øvܪ²ðs.þú*»IxGL¨{ÑLÝ¢FIue{z†Ë³äÑ•€µ"<{RKS²[- 5]C€½]gÀ‚r¾ªôF”Š ~Ÿ§Kí7I¼Ë @`)æ°¡»i€f(dMt#ƒ9¬¾åI\¶gߎÑíwÛ§O~ùÉ'ŸÐä>ùÄ÷WÌGöøÔf_UçÙ“Öy»R’º«Ø$è:Ù× *³Ñ÷þáù¾ìó?úÑ¡Ÿ¼ûŸ_I¿ûÃïþ+àÿ§?þáOúì³Ïþ„òƒÿ_|ñç¯ã %à `¿Æÿ¡/[uûtÃ:ÐmÀÒNª™æ{p®G¢NTŽ!‡èÞèyQgƒ©súÀd Äü¥xÉwv[:õ)‰I8UjàœX –j·§Ë"½KäA"ÛÚþØ$˜4*Oª×ZC~O‹¥jîâ?ÚT1ªˆ’þt¢°œ–ã9j¹Àa7¬À–ïL™Á |àt25ƒ¦D4´’ªÐtÃjqËwï¶"O»fIv•"Ô¶­ +‹â¶èáŽÎÏ+8°³øôe+öë¡AïÜψ¦ð~˜ç>+æ1K¶Ê¸+>Yè®Ë5u^€Z+‘®<œxDªÅ/OŸMVÃÞhí¢6?/x)åÒ-ù–X‚Ib©žuõg—²G½ØÝ]¢‘ûíMjwY;Àx†x'²òóÿ¢H¶úòøDȼʇƒ ¿ð¦[þ´û>l¸,p¦°§~jý°¢`³&’XŠ _fÍA#®áÔi‹Š°° ÊoR÷"Zмæ0”D^әǸäãfÓÀjÑr]¥H>)‘?'¾K‰7qà"R?ï¿´? ~®s‚‹yŸÅouùü-\9ì ñã…ëûrRp?b¤`Wb‹¤)%€‹Eå!‰éf9ÑຕoxÀÅÞ,ºáÿsic¯ó.Ú5ð¯À¥YßÀ€%6pì|„ORðSîH˜+'Øø[Ì¿BöˆìE"ý¥ˆK”³-rßÁ]¤ð·ë¸Y\ ‰ +Âû‘#üÜ£f —üò*Õbžu@ @½ X:>RM‹ãã‹ÇÏž>}ü‹øñ¥Òøˆÿêï Ô{?ª¢¹ða€^A¤¯Ôet†€ú~(DH7•ÎbÏ .©m³7E’%õ›’ÃK…î-жݮE³eÇàç'çú8:°µø+6Š„ù]·gÚ6ìÂuR” ù ¼6í]ë÷Ðþÿ=_Sÿ [òãŸBï½ÿÞ¯Þÿ®ðû?þþü›?}öùgþÓ?ûìúÿüµ“¿üâÏšôè¨Uw‰nò3Þ¾ë3¨€ßÀÿn}ì”v˜T¡'BÒ ø +€aî ?à ¸Lò¦ 4ð\–óxvÙY?è¿#ø‹„…–<,¡n“;ûN”0«éj½ €¨ƒ¨•õKJQ×9tŒŽ‹ž½¬}š=Ýd6qÞ¡#/ƒhT.÷­‹U†|ÆÓùtšÉfÓ¤qHÁ^œb]¢Ž¸lA§@¸LúËA.IqAîê6Ph›®èm€G™ÞR)>ÿ; €@{ÚÚÃç¨[/q”B(Áÿž“qm¥i™…ÿÊ>g.´ý*ßåyþ)Ñ¢µVÒ(­¼ýV.ÑÏ]™œaÎ­ìæŽÇ²îvµ>ê\tÄ3j¼$ IÕÊhÞû±Hëë)*`ôëÔŽ0à ÞVî;Å97äÒ lª¦ò§x÷ɪ=¸Æ_ÔŽU‚¡ªnlÜ@ u­g}ß/…°¾˜;jA`iìsÊþ €Ø¸æoV^gKD†û\d_¢å˜ZXíÖË൤DB|–ð‚á%X@ÔgyC¤è .Ë&üNÉꌌÍÂÆ¶OpÚÓn”¨w>‡ëAf:*çÀR’yKªt¸EkDÕÌ} ³‚ç9Í?‘…Œ,Ü^') åŸ×/½¾àÅw¤ûíÞ€òÿš€€ž§(úVëJ‘¥öq2\ó6@Á¿âš  Q‰ 톟ýâ·!MÎÖ¹j@aï‚©°1ë »:ðî Ï~¦ÞºýVï`+ä0¥œ— ùx‘¹‚8(ÙÕ«ú +1DÝòÝ™¤úHã’ ŒŽ€.$½Í%€lÝÈ`ëWÞ˜jð¿ƒ~w mA¿wÛ§Oô@øä“_Æ9Pôépt'ŠùíR‡“Ä¥o‚Ѝü" ýmÔt Jãªþ*Òf)ÄïeǯíÄK!3iÉ¥%‚]œ8Ñʇ§Áð@ƒ³ZÙe•é"AîápQÏÏÞ¡7&èÏ=“î‘ ‹¡5cZæ®<¯ØÌ§®8™Nc ܰÓýM1 ñU÷ÆŸÆéˆ°%¨Ý ¯ÈeUo'ñ 7ÀÅÅÞ@Yòÿè rûÒ!º=9=#«€€½:ÿjH9ÀHƒHý9c9;JÑ­h­¤£4ó +:g_HŠu€E=ŽLŽhkÏsÄwµQNªæ/tÿÐ<,€H®d P…ÊܹÞqÜ«Èr¶šÜÓñ}` ÀJSê”(…€ÐÒ‡cÜ RLÆ&‹ÅJÑc<_Àp¢ûvÌ븩1€ÄZEР”’µZˆ§”¢ € aB4m¹/À/i…x+UJ‰×.k@l'x±^ÁbI΀rÇ5D[±=ºÚ‘éV“Õ´ŸiÊ:41/@Du06øç¥74—Ä}+‹ ×\‡ëV…µÂò#¸Î¸^Þ/á' 2J0ýçný!€ÅÑk±éZúÝ­Èß,å€pð&>|Ъõ­}Sä%Ash€Šéú‹bÈN›@~Õ%~s:<:Õà3¾¶YôFŒ@‚í¦áÃíÖPú¿~|0ëíO”C·¶À É30t4aØ,ˆzê[¸³ÜÊkB ìæ%¨ÉWPxOš@z Â|<—´÷Èé!ž Òaÿ±üõgИވHþË_~òÉÓŸo-Û·ÊEõpè$÷X¢§$ÎîRú§ä!دzÝŠªËƒ²ð_wP´;Ò¸þ­¾‡Zz>Ô<{à¿zaÖï )å4žŠõa-¹ xpèۀߺ}PC‰::èG®è,Oï|(™¡ß>"=°mPR@úE팧ÚÙk’%”ü•˜Ú,vFí6ÁÖ¯¼]Ćïš>¯÷ÙYNµ(ì|ênºà¤=LWYÛhÿ¦4XsÌ‘So@)ø{ÿ½ÿ™ÝÿÌþº­€ýýÿÝwßûÙ{šÞÿÝ~ÿ‡ßÿñ¿þàOŸýÙ9Nt 6`?"ÀW_|ñ—¯ø4ºf@Ô|ñ?>%´§ãã€K£´HšhI¢y„B"¢´›@ßKÿ\ˆ©úgç(ÓA w[¼öÓÝj¦=) ÎɬLÑW/L‘!äGP(éZ>Ø*NPŸPã©Ó©áÙEŒèà,[œçõ*&g/j⫌¸ /‹Š~<ÞWë(ý$ñÈeWGhpœ£]:Là µ|ê‡Fô:é¦$AÕ*IʸA î½`2µ/i#Ô´»¢Euë -”¸ N#wT=€trrv@¦-5íMR&°ùî>Èü%@Pr÷ך‰´}*èZ2Ê¢lS[k^< +NX¯æGƒáâ7ü…+ᤴhq&PºÄÄÕÅß§—¦¤¤©l´ ;€ÓþˆÐ¬³ÝHá_'mÄ[!(€í­.ùq)~%®/7ËŒ¦ç¤Œª¨ç»iWËÙÑ ¿ø¬u ~`Sô×[Äkœmäz$ú#·É)–†³œ­t{¤ ?âïbÄà¦W6²’Éä9@ZÅ!³©¡kà˜Œ7ŽÜ“‚6×Äà‡îŸª}+ ¸>›?ŸöiI¶Ó6êT_ Nõû3„-Z´z½¥sû"aLâ®gëŸAÐá>¨Œ›Ä×NݴΤ[Rf®[ÍŸVÜmþPç@^õ¸< €NW€ýu2 °d_nh°×&*|k‚ˆÒííÏàG[ €ê½³ÉA%Êñ–®âù#8 >Öt·B5}îðߪƒkäÓØ’í¿Ø£b-øáÁ­­À>Ý„Hh‘%jÀãÎ ›ÁN § ¢ÞºëlƒåAuÎT°Û%„ºŸ}Å´M'@góZ€7¤ÒþÞˆôܳ<9?þ__°ÈOà=!ûP:Òt¥µa›H,¡oBþ‹ðjÒðÓ¿ûÓwß× à½ßý—ßýràgüìO¢ÿçÁÑÿË?ÇðÅW|¾þâëÿá\íu!—)@VÈÊñ¿:ÞêÝu]ªNûï„hIð—JK!g¸¥7×Ç*óhÜ ”R.Ó¢½þ$Ò0À¦ÞÁÙàˆ`Ðß:ž°‰¾5Ÿ¬\]™ªý°Óy.ð>éÉ…$r[àæ[ßV(²ö‰õ‹VÚ /B'Âa®€nS݈ú‰å²¯ßd=Ÿ>ZMç«ç|\Euî»ã€@D€çóõr½œû& +È5€N‘ H¡i`…80E«LiªxêhãádðÜ%X#Æ4Jÿ:q + ¿òØYÀfÝrÚ%Ù„\üãXs_¼‹£í§e6 ™+nº‚Øñ¼v&?+i­¤QžŽ +:  €ëŸÏ6€g½ž«;fb…Èþ…Íæ‘º4øœ€Åà 5ÿ§åQœ1¢I/Ѽ%2àŠ»6£=¬À©à¿ÿGÚ +‡Àž~P’MI,7˜›)€JA;³<‹DD£]‰÷7.„ÿ›É`¼YºH>€§)À¯`îÂÐU®Íy¢ùë‚ð¤¤øÑd¡¶ 8“•žcS‰²VGhéq+ˆá€²dÀ!õùd±ø`CfAØ„\År²ÈHA^×zX¡™¸)‚æ`C9óçZ\RxÌsP~'i˜úµˆÓ„(4c¢å‹³vïкQÑ2@|:Çv\ºjúA”õoºUP*ç‰+…ë\ՍЭà^ޤ†ÿRX¯ 5SàøÐ€·nš@²/¸KeôÛ¤øèé3ÕàË>õËD/T +Å~´wT /9Ò³¯a¤®ow Ë|Øònc_àu+¯Oby´úl_ïú…€“ã²<ùWîEóàÖ²M ÝgGé>; €4jýû1[à ·¼¿’þàÇ?y÷g?ÿß{ÿý_ýî÷¿ûÃïþ ð'蟦R€Ê¿2€ƒÿ_ùÅ×_ùÕ_²*Ð “‚ÿÕžl\¶ÀŽl"x‚vÂ6زÿÉV,‹“Q4s¶óþD”ŸÅ$ˆA8´q¡Q=Ñ?Ã~QˆéߣÓÆ£á¿ôjŽŒPž•ì±èµ¯I0èí¬íœ9KOo~¾µAï(åk(©m‰#í$ ¾Ã UåØN›m24î»nv8=ÑG6lA>zæµûi!áóßøn¢G£GÊ)G#ß‹@7Žæ¶‚ýÑÈ“c%‚Ét:K2ÀV¹øÕÑð(Ýu(Êèìüq‰{ï(ÒRßãIíÈ´>® 2’"ˆŠf*jeܾ€J¦t.†KÄ'-#¯ 4D~]Q´üÓ²)­Ù:ÀÁÉj8eÒ²©°ÕG´@m÷=× +—£ÑT#¿ô ¤Ebauãû¢‚=Ÿ¨ut5+Ë(¥øÒFoH!D€ÿåŒTM¸äÒ¼ø.€²´wÄ 9ö³‚`¶i„ñÏ`ø}Ò߉û³ ØÉh<¾ê_Gǵ0à\¸ç^ùo¼=:jžuá¿7õÿÐaû/[m ÌÀ‡v îõôµ¿}pdŠÒOAk‚—æJ€Ÿ>9;3 ™"Óo5 €O>ÛèîÚ>”^!û.~{úr†íA—ìv³Øï4pÝuAFä÷&¤ý¨ýM-¿øÏ&çÏ>ù¤­pP€0g ˜ â'"D +³ßÍÜÿ@üe €×@ïšðÐÿý5é{?Ì:€ï¾÷ÓŸ½û«÷ÿ#Àï~ÿûÿâb€ÿõú<ëé à+7|ñµ£_ù—¿üåü¿ðiW²O%üû47>y%{òSªô9 +ü#ž7jjªý²¨*š§+b+˜j‹§—䃎N÷ÝW0y©å$'gÔóØ¡ƒ¸6‹Ò)GØîÓÿ}q×®^ŠÎ 줟SA¢"‡âWÿ2Û¾tíöœèVe °Ç¡˜#¦‰QÀtâ¡# ®1 ‘9αS˜§ÛðC ›O€ð©úÿv†á‰y¾šn­æŸ>#«¬¸ù mØ? ø£ùhµÞ<ʰAöÍI +=ðÑ”k¤£>Z ]«ØêŽøÖ3.iï, ÀÖ@k]àYe}Gþƒ¡Óžü_3z,·]ÆÐ€ÛoS€‘­„ZE—œ~Z‚+dæ!ÕOþ`FÕW ?DØbÍãÒíÈì(z´ÒJ<7[? —s‡Á‘î´=#¨¸+Ò4ü']=ÁÿV9`±ö4{•dšwSÏ7õôå +©1P*¢‰g¦õƒp Ôðõ|öé¬?[ÉJ.‹oJNqà(9À°¿F 2ùÐòG ¤_—’ƃâZ$à_'»÷^,È#H2H7K0Ùÿ€Ù‹µ‘<2‚UpMB2w‘#„ßm”K± bpm‘J6sôtGž"VÚþ½56Ú­©ßG˜*\çž=~'5ï¯ÑI‡kê/&“%O‰Õ’GÇ;•ù‚ü¯»Ïn €cz‹@ÈU À+Þ€xðڀȴeÿ÷Vü†>„JãyM€¸tÂv^@Û£ÃÝ|ãoçþ¾Ýë•;„…swŠ÷ÆÔÞdÔÐ=z¿ Z’ƒÞ­[·´h”ÐõrŸ”uvöô±c/Z¨ÃŒˆo5êWJÑ.t™nŠ¿áDË>€f^ÝÖNºÒ½’ÄíN÷ÿ–€Ý¢Åa-[¿/XDÿhü¦b³µ¤OÄð†äàÿë||àãðî{?ûÕ¯~õ¾¿ûýþ ÀgNüü‹Ïÿü…nì„4þ¯¾tÀ_¾úåpíJÀÀö®šR˜¿CýãÉ6,DvG¶¬}´GÍv¾hªdàè»~ù@ªx/èó Åöðü& /ýšP •€B„Êõj±w;ù¹kö‹.M?%Z;+ï7ëù&*KŒùÑí³C5´T‚‚~ºN;½ìôI£·‹ žTn zieË´NŠ£)ú¾x`ÀÊ£ùàÑü2u®´úN?ÝŒECà]uÂÝ 0:ìÕsèÓO׫O}µ¼Æ_¹F# GN ›¡Õ <ÐÕu$úC; @ðßñyp:óöåi‡èì=k mÚŒM0n÷è…Z,[ü·žÖL¤+¨[$P¨¥*™Ü|€<ãn¥M0 „Àñr¡t¼X#p/]mA÷ÀNàOòþ#›ÐÙ/ÿ-ìý£AB‘R‹•Î×ãæê±“¬å‘Ä““^¬—6Q÷I9~ÎÞs|[–l4`p;´Òê`¼ãõ¦,£‘gÀƒ¨ûb¹8kœE¦\½ €-Út†ÙIPmHA’ÔHs„¥%â+Æýq|Rœ× ú;€¤<ãÞ$®zÚÀFHš%Â¦ÙæÞõ_ ¼©b&·ØQñýÅèøpô` G³uÉC<¢}ãZƒ‡ñüËš‰Œv=Ù ãnâ­­à†wdÀ“î]oà þ ÿW,€Ùù7óp_C×øºõÿ ²M£­G@v ¤ªc9ø&[¸Ñð¶ø<Ê% è@"’Q6¶ì¤·ÐÞQÒTè@»à[·"X$?¾| ÏÅÿ 6LJ‹3»}Ôëÿ›QgP¨î§ë„ŒÈï5‰  Uæè Ö_›t|v~rt® @æ·»8Ùh;Íœ(*Øï,ÊF$éLÉQõ±o@ÍÂÿjÿôã—  àùý¯þð‡ÿê4ÀÏœò7€ËêðÅW¾ø‹/ÿòõWYøë¿\ó.@‰CkP'¡ú—hY¿v&€`4¤qßþ'ÎyhÚêi +m콇\€HàZÿq駯R8HF·v\ôam~†Ö­0 ÖÆyÀttl£ùêÑp‰Ê f>B‡=G#tµX*4 ×ß»J9Þ¬Ö3«SÙý)'ˆú*K¨B%<_­‘&ê½qóÑz… ¦„ºL§6–m>'´h ‘Œžÿ8Y\`:DºWVóåæÓ±£`þüÑÑÈÑor“D+ùdýhõhóÜóæ§Žü‹sަhþðù|tä AðŸ_òFà??}·OÏ*ß+€ê*ÌæÍ?¨°mÊ;ü/iÕV^Ÿ+K ?@É–*_Q.%¤^ŒÖZ_¸ûn@Õ£i,f³Ÿ‹[ =š±p Ä#4 YÑJ]<˜ºoX wG‹9Q|Êÿ´opT@ûÿ 6Y®š°µÕä¶Ð¶!Ì”)9W€oÉá<—³ÖcnñÀ¬‹È"³É¢‹90¬ðe¡Ê§d1qèDÅ_dCÀÑe\5÷ÌÖ²Àb‰Â¯@n@‘$6°?¦Åƒº%Œ­z{RäjT›ñ´ ¶³˜&úýñRÚ…£Ny‡é„Ù?²”†§Å¹È úèñ€Š÷ªuðÎÜ$Dè🭘¡ùŒ/¾ @G€‹Î°õxå,jqS€ãîm€ßf@bòd —W}‚’?0j{uÝ‹€šúï61!ôü¾Ù7?¸§¾C…ÿ\x¿ÛKY(ãÃtë®9åXŒÄáÑ=_1t[ %ˆànÍä¦2ÐÿìâÉc€234ÀÖ¥Ð?øõsí÷%§®ýîï£ügÓHÄl´ëV^I¶šÅÿÕOG®ë_Ÿ.\±9ÙÅðMæ§OŽŽø¤Þp×Å +ZgØ-¼oóKˆÀ‰€e°[MÂÞŒö”ü—~|Àõüé»ï¿«ýße~ÿû?øBjÀçŸù +çúZ`×úË×ùêÔ뿼n! ÛyÀG4…€&Z†”èyÀØå»g  Ã 5ˆµ›7ZüÖ M=ì}s¹š½Îù‘ôQ`tÏœ ¶'ò71ÁÉ÷ãÕPgжé{Fª‰€¨J›•Ù‰kIT¢€ûi§‡£;žŠüÃþ|¬;áÐFE#z„, +OþeýüºRÀp2 ¬É†ôGöËC{Z¨@¶ŽÖŽ€®Éýh:4™ôçÓÉø‘b…жš?×>°Bð@@PŠðMµZž?"ÿI X¹š®FSÊÑÕmYbõhî›ê ’ª#]žéºu”š°žõÙ÷ú¡äßì,4L[3”ä-·íxï9„Zÿòþï7ªk]÷ó•Ž6lÜ"­N‡Kl¾l[ŠäU. ŽäÓ¨ÁÍFb+ˆÜU—+˜8`œUaU X1ù.EZBÊÑ9} ±îGBôÊ]”‹u´ÿ©~>ÏûŽ9g•ËvÈÖ9ê·fÍß?Çc<ÏxÆ;Æ, À×ÈhRŒXî„q€!AËEРPB€‡€õ©¨ê*€Um¨•r-$íS# +€ŽÑ+³ ¸1¢äiV×;©˜XèŠÐÐEam`~GDŽÄYÁëk  +Àú­›M@t ˆëà}žOGêÑ­èt¨‹ã3lf\𱡌XBQ\yæ¤t˜ë¬Sûı&ú1 +1à–[. oòHºÜ˜ÐÅSB×-_jn¸®[ίÝáR¦1íî·à¾…ƒn÷Î`YäA—SÍ=ˆ ý!9wD(ZwV´íøOlÛŸUpÑg2Iذ +€«"*û0ÖT­#äop[€I +@Óü1M­',¶ðUÀm€N*zAVTjwlQ´çú_päW° +² +€@‚9­@½ˆÀUìx»^]å¢=ªˆ|«9•äc&àþz™þTè&@kERX[kù#D8\X:ôFjš‚(ÁÐºÛ  +ÀàŽÃý/¸§/\Ï?¢ÌîStÓ‡1å à Ð1àVø-€­­ûÔÓ ?o +@£€p4²ï3P3¶?= $Ím‚щ>zžÒ/* `Ÿ`ìÖ°,Ë'˜z¬Q K*ÚÏ+™âQŸN€8ÌG=æ{òXÉÛYuÐVå.Ú‰çÔùNñ9À0+""Z·¹ý5¹É×÷xmÚWDCÉ}vÖøOCNö FòÌJ¦—ejœÝĈœ©Xæ)GÊ¿ ÕŸ¿ŒîümÕºÆÆ´\SV>ðo… ü¿ÿ5>d„Î #KÔyh(QڧܯuþÚuñ ìTàX–ø~¤ ÿ/ÿ«ÐÿÚ5ÚÜ0ÀàÙ/Ï^>ñêÅk?à͛߄ÿ¿þúú¿kúûoÿøõþ + °Å“ŒØÌy"Ð& ÀvÛýÏ’Øð&Sz† ÀXáUW(ãÁ£½Õ¥—>c†·’òvå$-e[ʨµÇàÉ®*ÂYä'GçûýyN2Ç·³ææhö3€hå"~+š +=‡Oº*^cyc®·G…¿ÊYd~Îí´e]ô@Å6eÐê×»V—…¶­eÚus­¶Jê«ËÑôתÉ`¸:lé¼( uP±œÓ¸®~õfC6+`ïkG]© +¢²–v#ÓÔÍ=Yk? …u*Îë„OW„£=X»£3i=ES±ŽÖ¤M“ÂÞÚê|{Ù +ßs­LŸ¦bù nà +zš@¥øÃáv¤ +`’àuuâÓÇWdB3§]ÇÈh2ÁüFlkâ(Ú1 øÀ<©(ºÑI +€O'¢­0ñè4}j +±^»àF¢»‚xÝ‘€õ¢¼µVõ°rAˆ5â \Ûÿ-€hpû¾@ÝÀßp¼VŽþ+=Ô>oÛ@l#‘ì÷ÀýN×ÄÀþ@V6kÎ#3ÍícokË_ÞV:…TUB7€¸ýömå½qëqÿΚã.elc|¢üVÀ Ô »Âí6xÛüu­ÛÒMètƒÎ¿ÚûioøïÊ•ƒ³³nGzJè*j¯ª-ƒ°èHÝá믚ïöTÞ´t\¬¬’Š~Ú’}»Üêí{‡ûçîÀmå’b8úu—TÊS©+U6­ÕCe˜{Cåàwº«Ñ”±×0è +´qº}#iµ=@Y Ÿúv{µµÚZNõßæ/}Ù¨¸çoÔ +€Ò“ÑƽSæÈ »}{SE¤•Ö9åÂE >ü? ‰pä­#ÉÿÎÿiÀ3Ú + vfðߨoØè±QŠ  (Ahw=§‡âG€a'ªF}BÔ/M©èÖ¤èŽÜ + `*½E É>zað˜I +€îð@]÷h€¦Ð. +@í|b‚p¤À¸@Û|úÝðHÀwý>˜[øa¬2à(þé?ñ[Ù€Ô€c(lѯ٠+à]}4(‘Xp9Z·ïërá á°´lÿÏÞÀlb~¬xoÆÕS(ø¯ðléá­˜•3øVY¾îpQØL_>a !x¢ó¬­ªØ9gØî­ú”ïE ´,0Ó1€cO·òÎqGwÚ[lÍëöÛÃöò°«Ü] ¦£<œªq€nUÒíu–çÄŒwÚbTC´;Ëݦ ×¡ìQyféH Éýêgæ^LdA„Aï‰C6æg•}.U +ÇEBöÔÑ×ÑS,Ðñ(þ ÿà?u“€Œ>R2`ª(”ˆÁ$Vîh›ªˆ†°PjšŠ½“€@˜*€C·è1>©Œù<ÁàÖÁ +€«(J¯úpŽîì¸0Á V`ÑkŒ*>›Kû¬òÀú´÷)R( +Ó¢ø‘¸Â[û` (/ Cš +@ú€÷Å`;ûØB   +@´`jÖGVD?×ïÉ€Ðs¼]6AT+++^€ãf1?̳±<ýض²)€&YBæƒø>ÀHœÄûqKɲ ?Ö°9öb#Í +OÔUÚbG20ËØcü?ø[”ÿQ`S¶à¤ñ‹¦ ´ðŽ>”Å iG¿¨«V>,æÚ4þY=`Âñ +¤O=Ö(.d@é9 „Ê,ÀEèÿû£ü·ÒØ àÔ¨ âÀ<®ln}½-ö°õõ½Ü„ÊóJîP€Ón@.™„‡ø•yÊ|Ìx>WŽÍë_Íz­þÀ1r¦´È[&[]ø÷¨Øã‘êÿØðHÓ‚²sÅPì°³»ûøDÕŸv¦–£ø1?ªcß¹eß8+#(L€”ÿ…ÿÑà‹—Bÿtýã×7¿Ñ àï¿ÿOq´êñüt؉Ó€†ÙÀþ¹± Év4ªåW6¿ÊÀ÷PNñUùŽŠqš·—ŸÐm‰JÖZÆ:s€¢ßgNiS °lÓOÊ ß:jU×4ÀU³BÈ®°_9²5öî`}.Ù´¤ŒpOÅzv°ÞªàÿÓ_U˜·äÜU ½GÍ¿rÊÅîÞ@™ò€ÊýÖàÉöÞ õÓp(Î0øö¯Oö†{ß*k]} »{ƒ'ƒ½oß˺¬»úxQàšk‰ã¬­RJuµgןn[\øƒ´‡Ot_½Þ;]=·îÿÞ†:‘JäAÄaµ+B$ä‡X?tÐRÈÉÜzš—o¤ Ø4Û`¿€j ×x{iNÙgø8Îú0]:ÊŒ•f€>T€€àOds*ÓS¥*!IÆ|TVš>48fÀ»øè¯‹ê@+€¸Wd+›µcí`jå~ n0Ö€è@;¦Œû(XÆ€õ1 OGOWû|(Þ;BNã`'@3Ò÷ï S¦@yyr?ãßÈV;öÐÚãõ 0æ஀ßÁ@ƒNŽEõ©€…j­­L뙀ó‹UÓŒ+Ó• Jÿ1¡µ€«r?íXî,m1ƒÀ††±št?BP\›°roûë»›÷¾FBaÑØ@'|×M÷b5ÓæÄ3 “ç½K±·~n˜'ÖÈ3xî{Uæ*ûl«Qø¯ÊñY¦¯–r»ÿ,icY)‹ÿÙ…Àý@ ”±NP¬õËØ`c‰í²(íkêjTØ3fŽÅRà?Ò>¹äï_½zíúõÏ…ÿŸÿân€èàÅsˆ~d/ÝÀï¿þþúÍo¿‹Ð p +µ [õC}ðÁ¹%"“ûÅ áÈ8 0øcÿý~Û½âöÛBpÁT€îuU¶Aã¦C±þ¢òú;mr[˜·*ÜÔóºt0N³8Á¦ò>-*Ã^ki…?²%•ÜÉÚfùrJW²€~¯?$?ßët\³¯¢æ ÿ¤³Öâ#ôÿ×Þ:P=TŽ.L8aזּq@ ùßœZ«{ìÝ ÚU.¯’™ÎÜG6èé`e£óÁ·OD%¾ý÷Ÿ¾<ùioïÎðߟ€o]¾@íõÀœÏàJù®ûSS®üs0øÉù-· t´—âz‚5eý*Û ³'CnotÛs~rY¤ÅÕÿ6Êña·…þ›à¿ 1KÉø§ ~®¡ä{r7JÞ(KVô#¦9=æÔѸa:¼A%¨(–Ñd‚øc›ô8 €,û( +@+HäÑ Uïâ ó¦¿L ôk§kõ ¨‘­ØûX +g]÷ø>º†ÀWÄ3m¥†lLø_É@&¼qÉSèÈ£1ø^_VçÀb€=×ßÓnOKe;“(€ùc"|‚xLcEYò”¹²kbm®«6il€® €Öl‡ A1Gùê P¦[JjhO—«E8Ž%¾mŸ\¼xøÇ € +Úû_¸/À—/ÿþú5ß /QþxŠüJ'q›TDO€®xç~¦h€Ñ + (c>©x·#Zìëàh󤢵ÖþlP)ÇF+€Q0Y8žÀûè Íx†ŒøYö @söÐFše“»Oñ-“ +r#Î?Ú ™S2f‚ùÀ|ÏÅÔsšm ¡”V2ëí¾h´38W/TéèÉc`ßK1  a ßfGïÉ® }Ø=A­¤Ñb œw~ff>t[¡ i…òú¯·Uú·ßd×…J /hsÕ*F¹!FeÆ›b)Ö{×z“§Þ’¥}Ã?< @ÙwÎ_* ù(1;FšxH<¯–b‘QµTVzÖs1Ñ9K+ˆ6©ÈlmT¾Ç½ÈÈC™„±G©ëwöª‰÷ÑcN0•eWÿGÚÅK´¸"ô¿vãÚn<}ñüÙ‹—P€gôL@Lè/ðk|h €3ö;§;ÏÁOunaeóö¦"Å–‘f„@\@Ϳƕ%L »”/ n!ª Pö¤b¿Ö»‹û-Ü´»rÛ>Å.åh«&ÊöL4U™/€€²5+¿7p±zІÜÒ>C¾ 㽕çé`•é C\•qŠ> ܹR€r8üÿETÄ*’ Ú?‰Mô{æ½îO|¬ÿ;åïwž †Oî|«ûøéIwï¯w~ú÷Ÿ†ßÞ;ÐYu/Û!wtûZ%€ @n èêAö„ñw(züùÖ€= è)•ks€ÕNwàO´8ÝÕe­ëªäŸÃf–ÿ‹àV£ +€~ç¢<öôsz—é €Ö¹¦àé¨IJÔLFcoÔæÄþb†þ°ˆ&i±{‰þ²Z(U€¢dŸ@Õ +`Ÿ ¸«ñ‰Z8V?‡*& @ñOå܃úµ.r`+ 3˜Ö@«&*A ¸D.mýƒ|¾xo>º;CŽ €ÁÉøpà·¬hÛ1¾Èð¥¿(>üþZ0ñI îXíP•­Ñ¢ë¿…Xå1Îúºe2ÅXW3ÔG‚ëEL+õYPy}~QCXZùÏqk”Ùr†[·ùEx¬5ó³£UÂxŸqéöݯ·ïmnnßC€p;·@`u™Ä´Ìo4G±–¡Ìäúz>fËàðŸÐoPÀÃïjÀÂrƒy‚xLcEYò”¹²kbm®«6i¼OÈodîVÿŒêÅô8Î2E ì³ìƒ’Ó¦„`:Ëòý‘öÉÅKŸ^º|åj´xJ;À§Ï^<ûûs>H=€/€_½Böéø÷ß4ã1üˆ ¶“§ÐŒ· …ÀÿÖHéYúG/@‘„–ÿ+`5ýðh·Ÿ,SþUYŒr°p3 ÈÑÖ* ìZÛŽ£(§΃´øû"ÑœàÎ~`‘}ºÙ@Å¢¢Ð§ß2 +À`ðÇÿ;"OP~úvxGh¢ûQ9Tå.€;ƒ;¨ÿúÕ V’¤°Z€6_‰éZèìSø,P¥¬ôFjf”Aâù¼ X¦8#\'@š*ǘõ/ ¿WÌ"EÆáŠ£ñþ#ž‡@4ûm±V¢L±D0UJÄ`H€1Á—€$•@×=Rð.>*úê^ŽnàUöP¬x‹~€ÒTF|8‡€vL8Ê€‡QÊé¢À1}ÆzœäP)ïê o.´(KŽû€÷Å€o¸d€*€­cøþ#fïkðn>š­V  !;\`¥Ö4h€lÅMW.gsßÝt¡s³‘,I…ä0T×ÒŽö[ÈÒXlÕîvòO°0?C# žËûÌC-|®lpO¥ Òþ | Ò?9DoObó‘s4G¹9æsŸXUÏÇN1Nø·þ[%þËB(eÿÀp,á[‰çÕR,2ª–ÊJÏz.'÷€è(™s¸ÈîÆø*Û#çe ýÙ¥”ôcÂ>Ù w›Îß¶KbW._½výßÄ@ÿ_ž† JM_¿xE‡€¿¾æÿúW>¤Òÿ›ß„ÿUù~âqÏ™l£ÐÞ\X“ø¯´œU¡%AœŠd S# +€¬ªPöÔ±Ðtuµ¥Ì½¡D@Q´åÀ`‚@Àú@ë ÏçS¸S+B}¶V†¡ôQ² + R¾}²ú-_ö£ +àÎOÿþ×oévˆ³âP+\¨¡(ŸÐ/U(í;B€?ƒ¦Ð €¢Q„{tT¬¡Ûñf€‰ÿéÝY ×CÃÀnM•/;#jzF³ωÄŸ¡2×0„I*s”)Æ}l0Ò@øz Š­þŒ Ün\8žX{°€f×E5lî Pñn¼@Qn¿'*&oÝÀX+z´Ðèã±téãù´ý-ªRt¢1€÷ð-€Ú.¨T<®,MúŒ€ò´Øž¾@QÌ.Þ[O€9Œùˆô몶ÿ²Bbìâ{îïß‘CŽª½Ë²ž1úõ¶otމ¯'ó=æ­mºéæMœ x¯ø +'æMÜ/…ý•M:T.Ï×99×8çOŠWyDŒÊ ¿gôóR=òPæc³§¹²¬Ë]ø°ŸøßTDÄ ‰½'¦'ˆÇ4V”%O™+K±&ÖæºÆÄ +Àò²¿øHQ'À@Cg†1‰ÙF@(âÎMÝPϲE냘Õ&&ÓY*üGZ|ð²Àg×n\¿qƒž€Äž¹+`¾(ðêåKÊÿoìøÛ¯ÿ ø‡%€$µÀ½ÚNÎàë-EŒ{  Xw¢?–©HVÓ /®€oÛ”ïX }¥„€«(÷ émgć*®˜¤à`Ð;Lhu')«:EVˆq |F€îÚrøØ×ïh@·2¢t› +@§¡,¯-w—EUîø7¢l‰  ÎlmÔ +À¹ +ÿÂÿàîØ (?ôÁÍ•E€P£K2äp¤>¯UTpt(=æý Ûñ¿aŽ>‰þ2`ªVC’Œù((G€Æ·JÀ»ùPpT+¯±Àý¡4[¼…€‚e\Pän*yìD€ÃûØßàD?’®òÎ>2#uSPIa¤@úd?Âÿ»| èþôßPFÌ‚ñhO€:¦>¤iʪ2·b.¦žÓ|l‹aÌÀ¯Éú~¶z¶býL¸9wÔ£jï²Ì• NդÀe¤yM5WÔî ç6´ëÍÀ¬ÐvÃí?öç-ÎÂ+´°ùµJ8{%СÊ$ÒÀØí,¢ÌŒŒËšæüä•19ù0Àß°_@“<üwÀ‚æ1Æì¿¯Šßÿ£÷½ÊK^»ÆRÙæuž°$Þ©¢? +€}´.šF®æüP?›—¼š-z ]ÓÜ8¦°c®ˆ=¦²,ßOa—>ýÔüÿpãúS×üòì)ޝ^QøÇàÅëW¯_¾Â €úÿß}ó;ß°qAžÈOO…àþæC¸—è/K ÌÈ©H¨W­PΩRC€ðhwj ¢â$@Å·÷ ¸à +W÷h(ðeVzOPDÿö7=àÐUºû€} +€}R÷p@C üß±–¥lcsKcT¥Ù†øSw§¤‹' ²¿#ýPn¯ÌŸ#+0 >“Á”4Éw?]fG€ÉUa>›§Æ~›ùðVûúد5µýÝúÐE ‡øp¡ŠôUÀc­€‹³€6Ó@pû瀠³¿íR +I›ŒÓû}ÄŠÀ7¡lMÿ-ˆA*u+€÷ä°¼<ê @í ×W–K†Ý÷dºP(hVšÖ¢"ÄÁá/ä½U›æõ*ÿŒä÷Ê>(sœM`ûžÝ½Y[ âçÏãèì¡•Ic¡Þ˜KÍù°²2fË8¡ßfÙ?äÿ ý?Æä;ºç 4÷øA7ßÿ óQ¬õú²–…²Oé! vò:O´š-î`#šúk€‘½9ó‚&˜ÞR|ò€±%Å€xHg‹~Ú?FÀ ðòåkô€ÀÓ§¿<N_€Ïܰ;Pùÿ5¾þ @€*ýöÛxŒxÄê¡N+(A}}þfï)V¦ÄLz,Sfü/ +@+}†‚Ò (´˜ „€Jà @çx'€¬H@›ÞFp+€Áà‰reGŠ?ê¿KDŬ¬@'=LÐS÷Ðu¿ÿ#>ËkÅ€£G€Û4Ð;J@1,ÊèôÔ›Ø@¯È  :*µ(3'ù’@¬g ‘sT +À¹làž2ž„•XcKô—½Û·Ò «ÞÑ@=T €×„`*€àÓôP·x«~Ì“Š Ü Ž} € ­tÖPtÊ÷ï Wø@¶°˜ú[ŠÐ ãÿø×ßÙ` €Tø \Sæò¾ÖiZ}ý—•Æ\r õÜ!Cc’³eI—[ÈV.‡§€©<Ÿ_ìX—„qsÅ @÷£,˜øO}€•SÌ‚3úk€ÊèùUçD8>ó(Õ1ÖÈwÕœä\sÔ˜/lty´ü?þ&ü2s1c{<ÿz>~em®YY/Ä˹X¼ÿhçûðx¬ ž••6:W$_ô"°¯9ÌXY)«ØÃ' ;ù‘Ù:eñþH£€O/}z™f?\ÿüÆÓž>öìÙÓgTÿ¿zõŠ*:xóŠ>A{•üÿñ;Ÿ¤gÀ0.X=b<ý¤pOÑâë» ÿc +€ § ý Uc +@à @À?­€¦o©(ë+>Ó+û}à Ê)ï(÷²™ìþ¼ûèÁ㺩 fDh*ÅàN*öÈV#>©4}Tœ£@jMs¨غ}{iajIY @£Äkã¶ÞÃïssy~vNy +€c¶c¨ÌÇŸ¦ˆODˆè sÎS™6»«a®âX’6‚ÿ€R( +Aöõ0é[Ñ +àÏÂNE¦wõ8Lйó&&žú°Ód@wø>Z5±Àÿnß(¦ 7Î#аÿ[È~Ž÷5@÷ »xŸ=2@[°KÊÐ.ek(ë*«YÂû5](ªðé- +Àß &`„‡A|³µiñ^{³_²»ö³·M{ÍÏê̬Ó!¡Ð +€ëÈÎÍ*/±@ñÇØþçeù‘*ìAtÑ1.@c¬¬õš²ZÓ&ä—iµ“GÄB7$“g;üs08fÎHa>3<=GÉ/cýx8—÷•»’=†pËþ‘vñâ§—ÝÐõûA$€®ž þñxùRÃk¡¿hÀ+ºÒ>~ýõ÷ß~}óÛïþ4€¾ç¸õ´§M¶¾ÞüZ‰t(†nK@O€’QüBH €²°ŠXNå0M+€}* [,à×T:?+~$þ‹(r iÂRe`tú€÷Å`;ûØÊž‘¢€)| œØ ¡öpO€:¦>¤iäT±Åy–§™{å¶Àǃ|š`Ÿ^² +Xß—¹ã>'ËZƒ¸·€} à?ã Ÿ¿0oàŸ]Ëê)TÈw_€VhU„À +¥ü­Ì/Xøƒlÿe5øó'»bœ”—ùø•µ¹žÑ×^ðH³¹²ÞëkØf,*Ö}¿û}V|ÏÊÚ ‚GOÈ9-Éyþež‹§Ó p\ü£F—høÙϯý›ß|úô¹Kþ/_Qðʽ¾ÁðÍë_ßPüÇ ÛÊòÙ ÐßÂнº RÒ1ñ‰Ñò’ò£J(­hY €ôÐnÂ;í~€À»(µ@(Ê;Eýjò 0 +LðçŸÅ–-´CøùÇ݊ภ+mÅP–…7€;¡Ð + øŒô0É ·ß`¹áp‡Ï,ö¬|©LNåžèÞ—ÏV+Îà]kS¹g§Wý+›+hJÞc +€#¦¢¦£±€C À¬ÛêÌSúÒ +àÈo„@O€TâG€cùøc@GôàY€¢".«ÞÆÑ3¨m<Ìàèo˜ðXûÀQ>Zèöþ¨oŒ™3 ÅÖ£¿°]ùL÷-N:¢¼—ž–•ýqD{ŠÓ#>tÿWу¬ HΡž;dhLr¶±¤ … ¾MZ– Ö”äaAþX¦‚ ysiœ=ðþó{× @;Íg€ÈÍæ=êÿ7Ý èo€äTÆñŸŒÔ$ ™À¨ +ÀÇ;¨ 2®]Ï3ÕÿÑÎ}-äúØè5±?æ•ü½+¼ + + Éî¿á(j:Qi¤Ù$VØVm‘ñx…x·"x¯i,á} +ãc@—¯þ›;ȾùÀ‹Ï^ªäÿêÅkÀ«7o^þ¯ßüúø]ÿJøÍ7íÛÌgª|ÜÔìé°HÁ”&õO+©G#KE¨úñ®¡Ìÿ¡>"M@™ãÔ +@_À<|ð#üCvºÎ3ÚK[[ßíþ¼û˜èæKcÎ#åk[[B²ƒ|”Y§°zP+€q€nw¹KÅ +mVÝëI +_ªü¿Á'~5 +@â? +€±ú¶ +ÿ”Sê….Ï(Ž£…šrìá +@8੆$ó®Mô¨[¼‹€JǺ—£|¼ è– +€ÍÚ±VüD“€ºÀX?¢Sø(XÆ€±ž9cßÂ`B+5Κ +€I×x/>µýÕ}À·F¾¨ïú-÷øî>Q`ˆçœ²BF‰ß«]ôOð× +ÝUB÷øÜ!Cc’³eI—[(ýÐ +°à?å}!¿'® +àÖÊ½ÕæµÞŸ¬Á1Ïé¹g]ÀU8ÞSéÀ#]r \dÁªàbûÊÿ¦þ1’%ð°Ë +кÀ¹çÍëò}˜×—•i`þ¾•XÀ¿b](÷Râ7Zæ= +ðkµ3WrÇÀÿƦ#-þ#íâ'/]¾|Íø7z|êÏã@€+\ôõßýÒÐïÿøG£# žcÆæžé šf€¢â e¤e â$M¥ëHHŽTî ( +ä¡”*•·í°hà€÷Ó + ?¼CÀ1|zóËËŠ›&VÄô´¦[þ¹v,æ8K†‰- ,4ÀH+€ûXÞF}ø. }dÎîÈø4˜ƒ¡ll~i Ü À +h­lCpMñH¯sDplu C‡ZÐq‚vG„4Ÿ§2!?ä‚ïÿ`eþ˜ùàVúP€°­ô^©xýÁÚC|¸³2;Òà[ô@ÁY×}gΦ­ÿ›øTöWŒ câ·\' +í§ôpéƒt€ð´Xù Eh]ô«–÷wþ/ PMh•Õs‡XîÄdôHþº¸œÀÿ e?Ý~®Ô÷*î¬aÞ§0„þ þ €½Š`QVèÀUt=øÇ**Ñ _á¿Fû}4жÂg!tàxSÒQ™†Šþż[nŠíÛ¡l àãõh‚àQÎjÁ¦W”›’èyÀ‚öÞ-çGŠW‡Zï´O.]¼téò3€ŸÝøá÷ð\$ïÿ¿ëÿâÕkþƒ¼yÅ÷€¨  €ß¢'`¾è‡ñís·šµp÷k¼©Ø¹ŽŸ Ç胠ô pú‰d¤!€~ÝðX?ÓúÃßP¤R UG*ðù9=V€wþ1$ãÿìPàqåà¸êèªI…ÿ¶ +€®˜ +À¸@€nt4âÐ…„°ñ¥s<ý ›*ælлï—KóŽl‰þ8 ¯ÙÆí•Mèê‚/Ejƒ5dÜÔ ÆÙ¾ÏÒ0@\$¢ –1ól€?önßpù:=º +à|ÂTÑ€W¤€bÅñûh¶xßÐCFŸîúÀâø/;à[(| À=nïÜ=î·Ü1Éx+“‡Œ‰8¶0SÏi>¶ÅÀ÷D—þeÀ­/*ËU²´—µŒb¨ç“œ­—(ŠG€ Þ‚j]oÁ·)ÔÙ=ï¬aÜp…ùvð<§ îÀ}»+Ew²À>Ñ4 tÄóþ›Pþw>êqd©û}bctÇ”¹ÄsÏ{!V{!æê•¹¡Ì(Ö}Wùd?ÿç¸àQþ€}Læ‡Á +ØÛ(iqæÇ6j‰ïG>¸ˆ\¿qýúÓ„ýOŸ>}á~_>{ñÜü£Èÿû¯¿#þÿö_ý•Œ'ñÍç#i)œ•Hï!lÓF$@QH2%”LAÕèH`º~”G½V¥à‘ +ÀÎÎÃݼ{wn~H'{Qtïîà ¸ë(15"«–F €Í +@å +À!ßpG@£>xØÀ! +u²Û¡l„ dJu!fà§Ü@•=¹Ò@¯P媙hØh@úÎ9;4Œó4̘Ìf< «Ó¬VJ (Ùç0é[TdO€zù‚øPÞ¢€UÊÔÇñ8¬x¬p‘c¶ÐÆÃ|´ª©T=@H>ñ>SõðÖ>„ç–ðý-þÓ€SC(+_V +À{i ‹“v¶óøÏ¹eI9Ä£í-ÍjÇŽÍ24&9[–ôŒ©ì‡)‘ ÃÍ y/`:ª.ä½…ÂÛeQþ¯S4XZr=?k ;÷t¤»4ÛPæï  + 3ƒ÷jûËÿ‰ÿÎO¡Nô`è­q w…ñ1õõJÏî[YsS4x¸»³™'¯C/2aŽB>‚ª71Œ½w++¼qK…ÿHs3À+WÿW¯_»~ãÆçŸ?sG@Ïùà‹ç/h øRÅÿWoÞüþ+_PÉ-ÀËÅòaüÜ­X«üÅ”ƒà 4gù_àOs§ŸHFŒ¬YÝÀPY؈P|Žì`šVúT +@ô¸vH+€µå^D À® |®’ö)Ü%¯PÜØÝ}¸»käÏ1Vã øVKí0¹€€¦@gµ[|”Ï‘ÕËQÈûnßÞÔÛ( +€ @túÿÅXû}ÉÞ¨›Ëó§¢ +€¨HTõa79 &‘CŠ•i“ŒÓ¥þk‚%úË€©¢P"C’ìë Z$H·È*€wñÐ_=LiP÷HÄ |›ª¶¤0âÀ9ºÇö€ÍŒ*>›Kÿ¯ñ-€Yí§×’K“,±?miyß·Ü +@T€´#r0½ñAÌÉ¡éð^úPÞæ´‰©`º9Îb£´‡;îoÝ-¸mdµÕs‡Xî”§åUô¢éôDBŽÂ;ø¯4©§×>õè@–Ÿ*–Át,@û4‹:‡ËöT †*ëŸ + `eEÈ¿²òÿ‚,ÿÝйù?¨à¤ò?ìü5ì `ô–5 =‘<Æ1”•±“±•¹¡Ìè½>Üýnkye[ou´'@¢‡åÏÊ?Û þMˇÄ\ÒòN%›Òß4€O/_¹ríòõk×>£' zxþìéß_ðE`Z¾z%î Ê´€×þ2D÷íç +;qzIx±õ5BÍÞ€J`Ñ'0åOÐ2$ +ÇMQúÃQüï öhö8±€_~ÚCÁûÝ»ŠþcÀ;_ù!7¶hA©?÷·EŒ=„`ÍV‡| À +@Ó@ð/ä³…y _nlÞ ’‚¢Œ ;õù@ë´Ûv¤ˆÔTpaq$&Šš?hޝÎÌ(Ë©ºþñ-ºe<™`Æ~èsh+ØÁ߈VBMWŒù\{<Nê-ï ×Äû½ÕYEA¦KÊŠ&zÙ­¹Syo؉§Nœ’ÍÌžš››e˜›k‰M,.Î΂Œp Å´ŽËÔº¦Æš(¶Zëë7AJ]Ö{ùÀ» Q÷¥Ë )àk*lwy˜þâÌbGЫ?\E»­ïõ‡Š Ü½â Ô’½è².Àsòw1´[¤'š šdh'ƒ.×LÁ)t-ÑbRIw­PâqžS+0á™pƒ°ÅŹÙE=ÿ ‡‚av–P¡$P2fggZkðw?.µº¿uZ'ú[ÛÔkAø+«ZŒô@ù@+§oÀz2!ôÈ?ÀÀ˜ÿÍÎ7ž†Á¸7å*„ vD6|k6¦1ÏÍ<øŸ“˜-s±ãuz¡ðàçñ Д€Ô½«F…0µh1BFêP t®¨0·Ð1®еÚK9Á©™sâäïÛ&ã¿B–qà?óÆûÚBx Ê8žÈ]a¼§åPVzÖ;7Vzߨ3X¥|o€ø€A±Œb‘‚ŠÝ!Õ66åƒvÞ‹Š‚cY +üGŸ¼|õ_¯Ä×€ðxúô‡gO-Øà%.øÿ¿y#&ðëë߀ü7| ÈswìGñýc4TêÛùðgl3øòË»0`È5@c$ j +€ …å  ×šÖàhàèoÔ=NP2=‡)V)Yÿ(¯$€ŸwCØÝùм"€"+Q”£˜Q¶vþß×/‚¯Vt+£>M`ä["ËÜ« ר R=Ÿi^Y:‚+®6âÿ9íJš lÞ^š›AQ0áUÂÅFàsiìî„ãçY¶‡E43GžD™ÀáÐV‡  Ñ U•€Ï¸ö•N(ò É: +”š¬uO%X78ÈXmøà”2·SgggÏ‚~ú‹ÈææØ@;@Šúb€PX+à€h¨ítnvn6€žWÛuoýÁúÚÍ&8[€e€áúÞ-¾W=\ÿ‹îÝ@»Á-º¢}Š¿":» ÀP@Pn@(ê ×P7kZlÝÏßS\Pªm™[ëq׎®Ž: «ç2Òïl€FXÍž=»(@€+Rú*HJsë·L¨×8Œ$ìW¦ç­e,ød?Ûø¸ ËbSô sí–Â{÷0àïì|£?³ÅœÚwÀ¡PÚçª ñ{á ±1‰51_–B],È,\8¯Äwb†ê\ûD†0>OAb[`›Ö‚øi´”ù4óp(ÓJù³óó|ä>€ÿ%K~…ó@ÀAåyiŽðPñ+2ÝèÖ? ;‘<—Ò¼2÷ÕÌ}oŒ=YÝØÄXQR`Ô`‚Pá¼²ÎH%þ µ}´®›iÊF ê5SZÂû‘ö1ÍéˆøC@xd%€ À+Q> xýÚß´`k>Y˜5„Î#7”T’ÝÚÆ'`S0—5Š5Šü‘ŠÊH  œ{û€éú düî +ÀA=‘ë$mSüà7%’x<Ò°òÈqDÈ & + ‚lç°~TÖ÷ü |Vo“Ù)ÀCý÷`Q Rˆm™Åy1÷´•Û:67–Ï5ÕJ˜IÀØŸÕý4ûCö÷l2žL0c¿Z[ù-€Pè *Ð, _+û=QXk¢0“ö†ë·ÄÖzM€é€pöÔ쩳*OR ÛµÀ­U@×íPÅï½t‰›°×5*DQñ@B#@T`¶&zãëëý½¾î<€uÊÒ:·ž†3OT ùµÐ_\)Ú—{Ò%{©¬õ+` +¡è¹Ïž8ÁÔÀL(u`i +dC7 +€À:ÓT +@Â~1%G=ð ö ñ¸¯ùé}€’BCxO=ë1áS°éîŒFaš³°¼lì¾5ŠùX8hœ;Õ3ÕJ/áZ˜ +@Ô„ uJ{'‘¢aŸ÷íê_pñ_ƒ–ÅÒG ,È…}ˆn ìd™?Žãs‚Vt½Ù(÷lõû͸ÐO–ºÏàa*¢\*ÌSKϾQâç­Êâ>?-xe)ù{ˆ•±¯ÏâMÞ( `ûûTj˜’6"…°ÀT3Î>½Ú¿àiÎh1ÏÃRá?ÒøàåO¯\¹víÚg×ðüá—gÏøð3> +üüÍÄ^¼~ýÊÍ©À+ð×ß~¯zv?~~q»¡ý U† $ þÿJ{fð€úGj×µƒ6ø«ü¢¡×þø~Æ{TžJ€á>X,#9W €Xñð!u /$€JXùj'Àcœ8„cÒLò¼MÓµÀþûÊÞ4w××;ð[û|(·o+¯Ëì.g”É)ßÛÀY(¦Ñù´¿àqn4Œñ¢üØ\š; Ð~T\éµg¼Ôñà}ñ5#c*ÿg]€ûÆ2VO²ì]¿ÐÏž©°€ìÏú5·Nù_öÕúŸ› +À­µîLCÐT¡ÙžXpêìÙÙ¹J ¾ÐYW¸ÉJèpªQÐÒÙÖ÷nýE7=¦¸ +@<×@g¯@(¡ù× +€îL§l*MPj€`’à§›«€Yñ!€*@8UU¬¦À=†°×; q¿ðT²§lQõ@+RO(Þ6Å·àÄʉÆ|Üà;ùÎË”º¿ÐÜ·E ¥OVÌñÆY8hœ;Õ3ÕÊX +U‘á= zA)>¶"Z€\h*籆 y]@»âé?;``eÀ‡œƒí+9ÿÞ»H¸Ÿd‰ÿválKPÂ\–àí±þ±Ð´\é ձƋ±"g¶ù + +ÀŽ^k*çCð?Òà—4¢UšIï>V“§:7ÆfNž. +À1ƒ1 øG›û¸z~nüpãÆø>Gx!"ð‚_ñ5@MDðöSP»NòØÜ¼'`ô×È +€HÀöð €$(Ûç€ABk@ɪ~ÞS+€QÀˆ_ð?@Ó”®^?ÿ¸«E+î`ƒFî 8bгÄÇû€¤TèrqÈîÃÝ|²@å r+€Y‡JøÀMû*@ h^“Ìk €ƒã·±y»é@dÍØæ©Žµ0fÊ#\ù_×Éx2ÁŒý¶Z˜Ð +`¤€ª@Cˆ~Ü DWÿu@ „Uá_‹Süÿs(ðêÙ† ‘Àâä*€·Sn~±~sDÀ9±› +€}þ|ÐO°,vzkD¨|\`2Qp‘¿ö`¡»_ÀiA.Tªnšÿ6€ÅÙ¹³„€Ö ªT¸VG´¬(˜BHÜOü-0^«}„ú• üŸ¾€ã4"{¼¿žèmß úGe¥x`(ð¿RP}sàq£ž9h¾,—™j>–*€Ô6 _X°+5:£>¥|!ù>¬yävÖú1•9k€#DΊ^ÌÏjž6îú€Šï7sBWUQÂ9Äû3CûDcK…ÿd¬„sÓBx ìVC w€7• ÍCL;Ä\Åš\ü¾®xü`Ÿ@~©ƒq½¤yž‹eŒÏ6€¬8¶ðÑtö¡[\¾|ù +ŸºþÃ>ü?{Æ_¸?Àôˆ/À«—¯>Œ*”Ïeƒî…þi†2We¹±eø‡Ð€&$¤qË*€I +À´ßxOý¤À½;3f¡,;`PËÚ àîCaýî´ØV]ˆ<®€Š¦Pð÷yŠ/³ Pd. +ÀH+€Ê@·X¼÷+*öˆ|ùåÊŠ}(›´+Õ +É+@>Éï¶«üAð튀/©ÅRœ³ÀÔ³ )8¯@^9RO©4}Tø§àÞPÿÀ-{£€B„¢¿Êÿ¥þí+JÛTŒ(¥ +@¬ž ¨°{ö¬Àð÷6>2.qS·• +Ï«{Ò°Ï áHëÄ|&*µ@S`Q§WÄaUÒÀ +ÀÙ§R(UÎîÂΞ)>¢¡„€Âp˜@Z–ýÿuBûlg?[Ù€?,ô78Ê@q"lü/ý”žÉ“ò€QÌæ{.¦žû5v†PL‰ ¹Ê ÒºÁ(LsEX^oÿ õÎØ›óõ¶œ)+s¶(à¿5ÕñÂxR'™ô‰“ZRY=Ø×Ÿ–Š‹ùTùñöĬ‰~Ö¨€˜x?ýq¤ ã×Qv0þ;3e øóÛG*@ásÀŸ^¾zùÚÕëׯÑð/ÏžÿbàÅ ×¼xn +ð÷HÈÿ¯_åw~û=ì~>?^ܬ Àm1€D1ý7 þ+åÙ&*ËËEP)\yD¥ü‡ôÐô '@ØæD\ã¿–yÓµU^s1€B¬@B€m‰¹+®ýo*ŠÄ»Ò£åáÃZÈV•€È­n+CûòöŠ +ý›·õ/3ä€}¨ˆè¥è& 6þÛ×–øÏÞî +¸(ÄØ+= +@Â|±Yšþ3Ï6࿊Փ,Ñ_vd+€C¿P÷ˆ“¤¬ÕÒ¢ëþÿ}—þeRñ°_œQ¢ +à­€Q€)€Ú ðær»w„€âï +a  +€~VXQ€|F€tÌ`´®òè•VvÆ#€þ°~%Mh†TìX€ÊàÈV‘÷@ •ðN­tY£|±o¾÷”iÍ$ : 7ÐÎÓ?ÿ5¦ØÈ:FÕLNr–‡…X€Ö‹,,0ôÏz|—ò…ô´ûןÀaŽCmq¦À|[4 Ö ‡i_úž 'Àÿ’åX†€Y¥sWDñžÌÀ®Ìo’™üÁÿŠŒùÐ À4q‹xàm8…æ!&b®Œb··£ +ÀÍ=LP=MŒqù@f¢ÎOy7.ZÅ:ÙÛ*)ðmŸ\ºxYàÚÕkׯݸvƒ¾€…þî ðî¿@xùúõ«×/_¿z…€8ÀïAd~œx°¸ÛNž^YÜS¦¤xÏ@ÅH +Ÿ˜{Ðd¢°¼ý‚{Ío´ÒàÈ~ÞÉ j0Øë¿Å2"Ø `yn~#áÿÏ?† þï>~ü8 ÈÕt² ë¸ø$ &Ð*ÀMòÐdYà¶29£>õþn©£ü.|Vnëed+€P”¾eJ´0öëg`)^y‰©…èXò˜b®øG`\ܸÐ>ñF–è/U„Wc +H€íoP@ôX¬ÅjWý«˜íÒ?Z@S¸¥Cš +€¦“|²Àæ aŸÀˆ Îv =ÚÐ €µÎÑ>£­ J@d¨R‚Dþf›=[UŒ*·PõHä à70ü‹Î3±@¶°@(øLÕ@(&c­ÞÆ`ã«q°7E±P™Óï +^ JoKö°«f¢¡2]7fÕ‘Þ£($9%>« $NÅe^ÑŒý]’×3ó×QF~F†øý˜`d €;óì§ãuBq‚â ð_´2œ¸îüÂûUŒñ›Â6Áß;ζq€ïjð¾ì‘Þõ#;†€¬(‹1ôá߈@vÊFÌËi +¼æ^Ó[Âûvéâ§—®\¾zõê5Á¿À”þŸÚðå‹¿ üQÿ£àu~fî0‡Šc„¥À×ض­#JvJ~âæî-Ëõ_cæUVú¢M€vOåÛJ8ô[𾻀/cÃ2!šcѯ¿˜¢ØîÏ‚û¹ùî–å~|ÿ›@(q¨‹Qi)¾ÎÎ]®¥2‘x÷q¥Øš­š>Þ2øOX+‡[ñ‡€â'FH œÕŒà§eÌ“`Î(OÞÆ¶OF’ŒUQÍd€8gü7ä—ŸùÄìéìc¨‹ÀK*s¤É¸“è/;²€@ |* @¶Ðæõ?S/F-€Šþ6Ä—=Ž`Ó 8ºD¼Þéö'+ïÐ +`Ÿ€66ZLVN€îÍÃ}´ 䪼 Ý'·hú ŒútPôÜg³€RP™8Aå°Z÷ð—T+üaþ=*ð­­e?oç`’…“A­¼M+Ò‡À(Ø ûõÿ61¯:Ð`¹½¼A¡<-f¢°]¦£ëÆlt¥ž´RÀÿ…… !ÏenmÇXü§÷_öçÿüËHÎVα=¥pª*æ›Ìžœ=w~aþ}*À;Ð~€`ÔOügpnšËLö0þ¿Gðà‘ÞýÎw @” s¶Härþ)ëŒùl¹1†XÁ¸(e·i-ÑýH»x'ÀO¯^ùì*ŸüìÆèÿ¿ð=€¯è@ ÿâÅkÀÍ¿~õšª^&*Q€?®  *”ºèƒš.‚ûñ_ŒP„â€ÿˆ~Š€ +Òä"µeJ. +@,çCïPDε6DŠðU´l(ÄÓ‡Á&®£lÍÓ¸’U†1€RÄ·PÖFþ&ÚuûKPâÅ+ Õ +ÀíJPd ܦ--þµëæíÛ©r[â%Ày¤?„ÿøSû¯3†Í†8@†tP±'Ñ_ön߈V)ÿ§µ–|„ +þ œt}ý8* +@q<º€¿RÞÉà "c +ÀÁ>î` +ÍiQœiyqnÕà`à@€º€J¨ò|¬ð +uã•@‚>Ü ¡ßô—*@¿Â™(€ò·À î`Šo8R»(b"\û»€»_‘¬ cÅýo¼ZPšÒRtºåî– Þ–ñÝ +¯WS›ëÊ(gª#5‚¾Ï+]Ò ô™ý‚Nœˆ?Ðß¿&Ð#ÍÄùe{Æž!Û½MÁHO@§èå#‚ÔM/ˆh'§v]ö}¶X?̸8Ê€Îéâ}¼S™k'š굎´ˆ$»ñùOŸþð2Àóg/^>Þi 芀ç/^óuÀWoÞ¼ôÇÓêG+w+°²µyoûëøíloS°}Ï +@1¡¼"±‚­,gO€Ê#*`ê~Tˆ×V­Vk©E]FÃ"!»Jž%ËkSSé~cyÖ €ÿF3@¥ð7кZx`©ðà '@‹ÿVòJŽÄ´ðL˜7Lü€P›|@ïÛ2…> ¬ã€ÿ·Ás² —àÿ‰†*20ÄÇ€é3@‡-Ù`éÜ9+zßÛ’?„€,Â?ÔåHZÌq¥wopä·è@QaŒ´9GÏmzn@@Ó`¤'@þ€VoåP9¢¼»€Aס·Ö9Ú ®€µØ* êÀ>#NsÑ d£R Ðw} @B?àÏ0T2vBnÚÍN§¡àp ({¼½Ìã+3€q Úìܧ)à7^á‰3‰} +gl//mÜ¿o¨ÆbFXÜ˜Ž®³æJûÌÖ +)ÙÈ}zVkÉ«?ø¿)´_|žØƒÅ$«¨Ëÿc”@,pµJ8·>b^©fé(zëÞààãõ?È ¶kl9ä>Û[_ÞÖ9߇¡è¬µÐì ÆÏúgÍ4¶‘u²ÀZ2Õ`mZáÕ¹>xÂ1, øGøO#Ú¢üpãÙçú?ö,Ààñâï¨|ðõ«Wÿßׯñ|õÛoYð†GŠGó³ÊNþŸtT+_+)† ä©|dtåýý? ¡4}¦îà¿ ô_jÍkNɲ\Œå|JÒ¶ÞþÖF+€æ­@ dÙ +°n ýÿ°  i†¸¤¦å:ŽÄG/Ûß €ìf• d{Zø}^à.rzR¥ùóJóìÝŽVËEp|E,?…ÿHýõC  MT(¨ñ_ûh‰þ2CÃ@…ÿ1€ †0ñ[Å€þ´VKeÿÒ ½î¹ + éÐT„À‡´Hà;ùhãA­*€FO€ïà > Ä’ÂdÌà¨V„†@¥dG@™ÈD´àud¥Pp˜@b?fäøßWüïõÜâÚVõ-€ûÛÊÚ§ô àþ pJÒÜ}€³3çÅúÑü5[€šÃ+Àœz +ÀöÝ-¯ßÙxÐÓ&ò¡õ<{ Гx‰ÆH¢øz– 5þ˜?Ï)\ðØI2¯¥¦ Væq.Š>„Pffhð}ß3#€¿w%œmølêÝû…¼'S®ìVVŒõèVæôH$’ÄùØf‹²}Þ/Lm ïGí…ÿb×n\¿îÏßxÊøßð÷P\À‡ ¯_½¡;€°x y$ +>[Ep£í{Ûè.ˆÒ6!¼“!±ÿÛ×`û?¢• (ü[P²œÄ›ë‚¹MqNiZ`F\þGÀþÇŸþÿ„°äoNR à*˜TÌ"-ÛT×qÖ9 +€×‡ø´»ø2ŠôÖ²€ +*´/,ˆðU ×0+ø·NP+˜iWÓÀN÷ËlÀ Zð7þT€%úËm0ÒÀ¤oèÍVfìk·uˆKÿ…"M€)€wi0ÉàXý¼êt‡Þ­¦ðØß +@aÓ+‘‚I>¬á®ðHì—û)Pü…ÿ~禒­´€LÙ +À ôWÔ>~O€¤;$gQŠìS\ë_Û7¦€®nBZ ðýÎ?¨ +€Ó¥SµFBhÐ)¶ó–fÂóŸ`)È_¬( ó’;õûëTèýYP+4û9©+¾¿o)tKÉþàVþà?ûÎMs™I«k@„'’wþÑ`+ @*ZaBZÿŒ™ç‘œT4ý  Þ(ÏœóÕ’¹²7{ÆÒÔ–ð~¤]„\¢à—ÿ?çc|À_|ù,À Q€î€doÞà +æ‘1yœéøŸb  S’,ø/šmÀÓÉ¿åò‹ZhMÛ@ûú0ü/-ÀZ­eP8-ÓrÔ^ȧ´8ÙR<ð_Qðˆ*bÇî÷ù1€ˆ§f…Œð>y•ˆÔ*ÿ× +€OTYÓ ¡~²…ª¯Q8‚ÿ*³Ÿ^Xøá;ïÐâ"i(s³­¢h[KÝfÕ>¨þåg!pÚ‚ÂbÇ’‰à)Ão(ª1àÐoüÃÀþ0¡0 ACsChCh~ œ ”oüGú4z|> +X͉{p'ÇmÐðéVy\Zöè«4½€|üe@p•þ9 ¸_YÿÓ¶ã[*û‡Àýhu¥(z÷HÖ”Œåþe¾á«tgÈqºìðíÎ7*õ?ìP¯w$öΦ¥W²éÜÓ%~•ùáèP€S³‚kÙíëp±i⿬ùò›æÍ¾D¥üàŸþ„ÉfgOÏúÂçi(ðzçAAÂjd¦…°3áÜ´XÑðл_š÷+y/VÀßF¾@z¨àŸrÖÈ9½52Dç§¶\,ÆþÔ +Œ¯?Âß´?9sùÓO?½rùÚµë7®Qþÿáé7>ÿáÙ/tàΟÑ5Ð àÅó—/ÞÐ+°û| Àòcb«€Gv¾ßù~ûû„€úk€™ Í}'›(€€òˆ¦>Gõ lò­üh¨hµ”,'3€,«Íùþ‰JØ;[ó§–6îì]°K+•,’ ¸èŸ +d€o‚NThx× +» ¡xue÷ï×>‰ô˜áß@ß©P’]¸ ÌMd’Ñ +ü>¬þ´¢Ô?ºÿgÀ(þËrÿ<ùKô—Õ>Çþ€¡c„°5¬ÝªJÿpÒH?#ßxÿ­&ùhã‘­*'À÷ãàVÉý(úd4€ >c +U“Ô†¦À‡ù$ø7Úþ‹ìƒÿFñ?Í­vîã[åó˜ àèžIÒX¤u_€Æ2Ï’î4tE´¡9*V–Gû(>`?Tý‹´æM–Z ­ÖF£ sCp²¶‰ÖßY‡£´ãª&ÙýÒYG!µàÓc¯ÝÝTT 9dþM¬¨œ`ÈVvqúÜ¿,,¤t…‘S’‰~¹’­–ƒ1˜¬jhà(ýYþô›D €‡)€·üÀÄ9&‹h*h‹Ð p\x»o¼ `Ê~Æz|wî¡ôp¼V„ƒû HËžCmH€{Ôšƒ|ýCþÏ*€xÏüað¦ºøo© > `šoD¤Vn¤¼¨Ù +@“I>NmJ¹aš7ä(Éä Mü® H3Œ¤ YÍܽûÍ{`çsÑ +ÀqRãü…•  ÛJ¥J‹Ðpiáø/ò&ÿ…ý6 ÿ\6ê—™”%¶+ùê?_úNEk +ç9·’û‰÷Ø kN4aÞ#2T gÛ!>z„¿”w3JrÛþ¢ +€{  +@ù\AÆÈQGÎ `ˆŸèÎ’—›Æ>~dzìèïH;sñÒEº¾zMFG@×o¸ ÀÓ§Ï?§+€gÌ¡¼xñüÙK€gÏÝ3ð‹|(­<›ÏæV÷îôF¨[XH›š3ÒO6¶(¿¨>†;U?oÛ +@ùD{i~Qõ?9@k9¾ÿgËÔ…õ} +Àƒ•>D¬®X^jo(­+¸{×¢û»ü€rt~%6’¬’ç‚Zü`*Òõ?ËôTöO*ÿۘ |˜Á^¥‚QˆªüÁrÓ™¨G¶é>Þa€8}óM<Ð~€à­¼”Õ ÍoM«Ç€™Ó¼©w³hP€‡vmC +(2`¹R0¬Ë<~Î}ŠfF WÈåi-Ë÷GÚ'g.]ùôÓËW®\½*ü΀cøEÀÿô© *ÀË—øGÃ@Íeù_Æ•çôCÙ@Ééþ×ß§)´cØT¨¢È„ïJkFúÃl¤€Þ”ýLÓ +`¿€®Ö†,›¨ì 0/ +°Q·Ì´œP-€Vw,P<€|µ<7#¸·à. + n` ›OÄò㌕ù +•À^ŽÇ:¾ôàCÃ|KÞNLþ« …ý‰ƒÞýK¾¨4@õ=)Õ‘Ô}˜`™S2) +@TxOå/ÿ̸/`YŒe”ÿ•íþ&2vƒ=h‰þ2—íS&‚W# +ÀÄoÖ«,/?&R€Vû+Á%nûûx»o¼M+—˜î[q"’µüßé`_+€ì WX)‡ú$üWò?ÅoäÛ_üw8¬‘‘¿6±íœ“)©‘Èî'R¦Óv™6‚$ÆQSÒ4ÿ?êçdœÐp3ªŒ€½(¥ÿ¦,çå„õy*`©])ß|S!ù[þ€r:‘9+§ î„' +`°PÊüàÄy€ µàÚ€q›Í~däŽ:€V K¡ÿk\#@QŽ _£&Ötü7Îf†~Þ/¿} VŒû({:ïåííÑc"Ï£ª +À+·V¨J%5(œ0`ÁÈ<½-ŸQŸr¦Z몖ÞBøhJ;sñÒ§—.]¾ÄÇ€® +ÿ?»Á÷€žÞ ;€gÔðÞçè9~F‚4Äü€ÕC¸G3ÀG‚|M/€[ } +À” `T€?¤¡½€¥¥ö’;Õ@@Xˆm™š '*³"*í“ËüüßþùÁÝÖÆÖƒ$# +€Œ®€æ'(Z‹`¹†#0ëGlöJ›oț☈Ѹßíû!ÁÀ´£Ü¹óûɓʊ@–0üçg[EÐn€tÇ8Naä¯H¾FÊ2NϨìS ëØ]{æÉ'X¢¿ìm¾°¸¨×oôÇ@†É ÀŽTŒøü/ú-€Ê ð½ød+ýõ¨G÷p€€€CúÈž¹VÝ +Àßp+€}>þ‚—ýù+yk½q?Mà?¡øÿÅYϘ_ÌpÀ)‡&ÍdôØåÔ(¦PzŒšöKÀ ~öIâ ì"ÛçîGm¿¦šÜí 0E}€h°T|dïÊ€òTH†a’hùÈÀ̉sÒ-@ÕúF›Vpß +óÚÉ|ú¤ô(°p!HfêQûàêþv?ðÿz +Èn;ÈÀo‘qìJ8—×ù­í÷À[™ù.6¦|‡U þ̃æL\³oPH€²Þƒ€?² +ÀO/_½òÙ5>xýÆçÆýÏíø9ßxf-À^ÏŸ¾ø…Ͻ¤k€ÊüˆñLnßÛèg @| è¾þ[VRÈ6GÙÒrC˜¶€·ðˆ«… ÿ¼Uš¸?€Ú “rÁêQ`gçËŸØQöbð_é PD'ûUQÆ'(¶¸Œ3Ž"< @±9”ùnbkØò²½ö£ ‰ƒ E?ª”dÉN¨àa h>1sîÂÒ9€N?ÞPšvŸ]2pÌt¤TRgÂÌ锂Èì€g€ÉÌfÂ@$™l‰þ2åü ¬U ²º@”ÃrýM2æÒ€Y«½ö•\"}÷oüá>ï÷[ +X + (ºÌ¡­ “ú(øïËž}­à +À>€Äÿ&ü{} Øäâÿ:ë8ÁªüŸ¤ÖTîþì¯u†#ÓSP¡tÇÑœe² d;îîkö[€Ëi!Àçå„õyаÔZÎV(÷·²ÖÚßî¢Û@øO2 °°¹E7+ °]+ƪ–ŽøÉ +À”ý»€^WªS€Öü”>+?€H͹ PLqNÈNd•÷&Úíîþ×ÿN?tòµ>€M@)bÏA +€ +-úûf°œ@¿4ßL¿¨ÁÃ]ÃyÒ!¦@/@"z þf÷ ®Âç¢÷Ês +AígfüýÂôdóË•À‰ôp„sÁ¾B~“ã>EÚ£(©qFí88´À„~€&` 2ðA–K2ã? tYGLÿßâ[3À·è Z¿€™q€ì €oöð­á®Ç|ðoñ_a†%òÛTú+þón×…ÿ_D@ùmÀµ”f<- +@iMfàáßHM†r#R˜o#e*aM¡8E5$DzÀ¼×kª%Õ8§ÁÀ¥ %•¶î‡pwë¾1ømÿ º@@>î1CbÕ˜& à<ü@¸BWaú©û/–é88%3ÓžÕ:]*íñ¯SêLÿ/° +þ+õs²‰ oós0F‹J¿%¿¼˜Œ™7Æ^±+áÜ4¿5­Þ§hxg?€Gz³øŽ*¥íúk€$ +¥Œ€OyN*6 <ͪFž: ¹\ÏÓòþ4FO€à?¼rõÚ¿]»AÑÿÆÓ?\‡èÿìÙ³_~xvC”-¯jp Løþ<Ñ?žÓæf€°JÿÓ²€¬XRõe$IÒ…††ð‡ô@Ê—-w¡m®( + àŠ÷Pü¬È›°D¡¢Ê2¬lm´æñøûQ9ËC0ÀÖnt–ûëtQç9@Ðõ¸¢öq~ @ða™çd©Â?ÿe(G=üÝÞÜÚ\Y9­Èwú<4àôÂ<ïrfaÅŸ•ü§-·Zzk©D¤¬Éèôy:„ù3@Æv„ëd‰þ²ã}  ˜)@Ö’ç™ µþ*Ða= d+!ÿ;)2]cÊ~Æz|/ß0ÄÒÀ[ àð~²'@_¥¡ˆLðHü7ükXÝ_ü§ð?¹øÿ…~$€0'Œ:对LRQB +8 8=º0oØ(æô,±à +ÀÀŽ +ñZó à¼)ËVÒà.YŒqö-ÿ@:ýÜ*ü7PR×Öó ”}gæWL0ñ†0‘ΠQQþ!ñšÐ§>½¦\!õ~•÷ùþ°ÏRýN àZHþvÆ» ÿ¼§°‰•± ï‘Ñ~+&ùè ßÍÀßy´ûh W/­ØZYp>ð˜ Ãðïµ™ 2õ€Ì7#röX–>~GÚÇBàÿÒ•+Wþâÿ ¡ÿ]ÿüú¾ ¤,ðìD-Óx †|FN€÷6·¾¾/ìÌ97€ZÀTšDÚö3àË@Çêàx=ú-Éu©î’Šû-óQ€9û¨Tß +?Ù©`ÆEÃÅvîohÇ-\AG´h|  6•M1C}“4(€ /€Á¨ÀÿªßxÏýtè`¿Àߨßà¸ÀÄ~”æöûü»ì¯Á7$ ä·õÿ±:M¿'èÿ €S@Ó × 6©B𪂲PœÊ9ØÉc,|ýT û}èôO˜åÙÊR0Õç± «¬N¥²TîÃÞÖ„ÏJq€)ÎI{Áœ^1'_$ípºRÄì;à1ƒm'?ú¹€†<ˆzæ0€D{W+DsB:Òª“ø²¯«ÂJ™þ8?^À7”1?h*“M=ÄHcÂ9Þ^˜ßÚdK¿ó·´‡EØØúîo»ß÷ÝΣíŽ1Á1 ?ðŸ)F"!dâ?ÐtÜÛŸ}ô +sI–Gi.ÞOatð) €\»* + òÿ§ŸßÀàºxMYCAbþTî€ÏŸýòìé/ñã)Ësú¡ŠàÖvV|°YP¨§ ¢¤†,åhT`KËUO€Óõ0M+€â°¼àoóå¸j‹z÷ °¨Õ…õ ÙM¡"”A¶6”…ÖBj-îîò1 ÷¤2GºëŸûë.ÈŸÐV1€­­o|_ƒüBGÂâøÈVœ£d>7e1ÿ`£ñøÿýÊ9¿±”›N/±xn¢Â͸`3¬SÝh Íò ™õ„Jf^ôD’É–è/SþßðPáLÈ2"{5@-`ž˜ hÅ +’BP„Àÿ«| `¬'À÷ô-€ì @QŽjI˜ÔÀ„VÕ瀛 +À¤oþSñoø/o¶6Q¥1ùŸ}qþ§þÿ/ë™Û+ Ô>s¤¶Xz ü%!  £ +€R[&h«8AÞÿ†Ò?G‚ÿZW¾XòNXŸg’€ Á»1°ù´P¸˜› +šÍÄ(÷£Ó¯¬œ?¿pFòËth ÿ$ès€¿áßJ€Òp(\‚òó©hñ¿äÖHýNÙ  VÆ m*#À5jî#̸Ÿ#álË(+&ûð¸~9oghþÛ;» »»ß=ö×CˆQ%Œ`éñ¼LøT6H>2çeYŤ9ƒ@W@W®B®ßPiÿ†YÀu¾ ðôs!¾×àpCË?|þôÙÏ¢u#ýê§d„¡l‰|øÿèÑ×÷··õßú€â§%Á»`Åx5…)ßAxïý„ ·HT#‰újøä,Ùü‡à °¬²=ISI: +ëçH×2E±-•¾Ñ¨ì'›¡ +`c¹% +€S¿÷¶™O€rÒ0­m*úX?|*øüÄÙÜßy!|è@Àí­¿·ãßÌi^^àI7˜YY"³ùÃĬĭP¼(@À~:€JP”]jBáŸDá=|  Ù€áÜПƒþf4àxšÚ€ ðZAÉ^»q h¯ò>N©%À þÂ-ÊÕ#ý&0íà7‰Úñw•x%aÕ0f»ÎMó[Óêý +€˜¯ó­m;z~üHà  ²YH$4û—öXåû£íÌ'ù-¾HW€×ü1\þ_·ð¯¼>üÛ7àó§Oøåù3ªl§ÌÑÉsV¨  +À¶µ­4ñõ–‚@¤¿~]Á +,à ß’ØAY°À”ýLÓ +Ã[ÿ‚âLIŽø¸.`Ù¾€¡´VLHâ.™cåÀˆs÷·6–7á¼if¢+64E€Š 8¤%¸¦hÛÇè R÷t‘³m²®¶h)î¶FaÜ,ð¯ÁÅ8€€(@kvPLº4­»â¦UÎgUí¶ ¥:5Ó¦È-ÔíßÔDZ³m_¸tD•ëÚÎWû×z‹³mŠë”л–Ð~](*°6Ø»µPªy- úº®"ù¢Åß@‰@;ð@ +D7¦;}Z]\Ô5´ØÖxîYMW¹×;ºë[Zê´× ãòÿÜÜ)ªŒÿ³gÏÿ3_ÃΊ ò N…‰ÂF—Õ]¯÷o*¬û{¾ë^À:ðþC +LF0ÞkÚaÅÿ¿ (ã'dBȹþ\¯÷+$Gíðl²œ°< ÀÞç +€€ßèkeybNXŸ§(¸•~îê¨wcéåøâ¶ç]5G +üà䌶jYåt>¼ BC(vZeãYÜþÄ´(wú•Yð¡zíZåÌœà"‚Á« úñ¬zß<¸ÿ`š~â–É>+&ùDÁeaÁ¯çml·VvÞ}ì›W"a0Åô|^¯©çyà:ˆ +äs@ÎÏß´3g.]ôç¯]»võúU”ÿŸ}îÚæéøé M>C°‡€Öóo<{ê–‚¶‘§ä!QnoÅ·l +·–ШRô Ä:ȪÍ"Çé 3`üGPŸèæw_Ev»jýtØpq~n‰Úýq¸l+éZ¦(vÿîòòÝ-§ng3&TÜW–ãÕ6ïíO¸lRÃý¨€³-¼—ƒ<~ à8Œ(í<îAÿu»-çJY]°-þýÂþof ›/¬¸¨>JPô¾\ˆÚ*¤G8êšø¯ÔcîÀ$€K&Z¢¿ìÐVÅ â` 2C"@R_ @eáÁÞ^Ð +”D{«BZµ;BiÊނݶÊÀ§"Zc(@e`F³s‹0¡¨ pu™J®BðoD +'cÁ™Du&NS·Pî¡ÌÐt|C|I¥3bç]ÆMpF Ì×Ì¿XÿaMËPø;Z€Kÿ&óQ@‡³|søTv/à1ü¯å]e¸½ççÀJ €ðæÕ x#»ð*ýB çx{a9ö)î¯Ô9×ù÷êüŸÎÂ… €ß[´ =€Œ1È’ Xà×û9˜Å®o£¤ßÑv€+I®}v @¿Ï>ûÜûÔØEà3Áu¶á*H·o+‡´“§—V„.Vf²øo0ñp˜ ùsF¿÷Ý€ÑÒ>ÿAHÙl¬ˆPЂ›»@$€*€ØaDˆCœ¶ïß]±'¨ p‡üøàî +U©Ø"»ñ$f +ÀˆÁ4дùÅ#h…sª²½éº`úÏ/-eY²‘cÑ +pçѦ=ƒO@N®,i¤ÜBQraÅH}²A–õÒø2 Ý‡C fšÌÊ”3“®)ÿäÊ<Àÿ +þÍl°DÙßЫ-vŒP3€f{`Ã"@P€Á ?`ƒ(†€H ßCXÚ ÷úQáŸp²-ˆ¯D1Z·L¨§ °ê±fE-A_$ÊÒº# +×mtíN§µ„[ªg‘çQ阻âi{†º-àO«njÇŽ ÞÈëë¶Æ~oQDa­;Ô­ß”òl"H¼ëEJò‚s]D—‡üjÄu´®-z£ø««zÎNWÄ¥Ç#kgîË×§&C<Á¡j#(¤ÑæAO»8 þçÎâ!n”ù›íì쩼kÎ,r¤‡Š‘C[ꃵٶ^퀰þ[üçù±|©2_ú€â6@È” ‹l~@åýÕš*|3ªü +€6>2V9çtÊÎè<€Ö­› @ '¬ÏSŠ •pŸO€…‘¤ÞÂÄtD§„yZÀ'q²ÒiP\@HýÁó+¸íe@¥þ§YíWò¥O§ã43ö.hïÿ`) +x@ä|+ ÀX7åŸ"øœýÞ‡š±?Àß{ζä±b’€«ü\õ-ì{(@*ÛÝqËîP ò{ŠñÌÆó`>"çgYÀ?ÒÎ\¼ôÉ%\/_¾ŒàõkŸÓñDÜ«øo`F×®ý ÍŸ'9q—1øieV6·êo8”°m…º ÿ0€i:ª¶Ã–•WNÙÀ­(àøÓ)€“~dº½jóRh­Ö²y¾Ót೬P™¢ +€ÛˆìÒmïÿõç_‘¶ñ ÌjÇŸCû·à|'|Üë_ø½þs¼2+5þ+'hà?¥ÿùåöQ +,à¶XI€™½º™¥s'>Pqò¾´¤k0öóû +ñÖiÝ1NóöPÎR Jþ”<èWÔåX2Ñýeµ0¡€û1àc”Œ«D€R°&°6¼5è û)=k +€A¦’ƒâ:§ðîlDl™ü×pÖÀ"À¢@{~¶¥Ö9Ê€OÀºmU¦Ù›Êõ]ñ ¤!8¥cªùµy¶Õ^3Õ`x]·AÉÛd ßŸc+~x: ÛÂ5BS”‘þÞ@gÉ»ÑöÍ@Ú"JZµ¸ª$°ÎM(Pµ«îJ¥;ÐÆöœøÇºÎ×v!®ê×ýá +È]ë|º+ zJmúS0€E=ú Àÿ¬ÂF4¦hy®¶ š±Þ™7ºGmËP´e84mYWjÅ›Á¥ÿÄÿx¡NÔÿºøÏh-“‚SCxÃx6;³’Ù>@ÉQ›¶*9?| ”øqh+'©ý +ÀŽk¼®çö­Öç± t»$߸o ¸ßåîãþ‰aõ.ÛžþB ÏJ~*±k­’þ¹†0fÀ<íþCúwÚ­(@rWûÌœ=Q +8¥ êÒtH\ ^蟓)þfS @?…7¯N//&cæÍ~)~• æ·fZ7¦œsf(bÍ’ý´¿Ç9£Ês¡è +öȯêrÈ%òýÁwÈ‘–"ÝGØ÷~pˆ¥ß‘væÌ'ÑðÓË üuzô_Èã³ëŸáÀ·/_½rùò§Wà×þíÚ•«W?/0UÅã0; ôÚŽŽ€¿ÿñ߿Ҁ5ƒ +~‡Øˆ°²Òš¶€ÎQý€øþȧàzLcQTúBXÚ¸K ’·W Àئ8w_‰9 R•û¿Â Pd`ŸÀ(N¨”¯¬`”È”g1b£°†E>Rb¸b½ŸÂúÏ»ùBtù{€ùÐÐÎ#»œ;wR/MŒõÄÉyÍžœY𨀠@Á?cm¡¨Ê”’êâ?#˜ØoÈŽ€!D4™d‰þ2AÃ@…ÿ1@»ô&Ò !~Çi&‹*mމB(Àº@o@é_+Õ°íDr]I4SàEQØ%ßÚ̲.=¸ðëêðEAãœðn±3&uŒVøHÝv{`õÜU"7ûC—‹QT$öÜjkFqš»+ýñøc¢Sh¦‡À2,A÷WÎÓ±ÀTt϶ ‹Â}§¿±Lí­¶õœ]1žÅ2ƒNK €‡Jøó÷uŽŽITYè®uUíÎ"P8ëõT‹ÓØ0{âÔY|NÍâ¡P‰ .LkZ&J „‡žl]ìGŒEá-æÒ›m÷† +íuÞÅ‘þ'ü7Ûþû–â¿Ð_ã5ãw¤…è/ä¬ÖŒÜ7¦Ò 펟 =€ [•š ZÊø|‘x«ƒè øèh€«Ñ ÀÆ ëóT +€r™Ú ðþvÅvèDã¸?#1É @)P‰ +ày›? C_ùˆ‘ZeŠÝTÜ«(€˜¼·Ï‹ä[ ¬'eözLK|?Ò\ péâ¥ËØ•ëýxêù¯©üOïÀ*ú_v% – * Ñå«ÿj-ÀæGôÀóa4ÜܼWW>6·úI3í.Ûø«¶»ÍÀòJñx×~{zü)ÖÒŠ ¤z¢ß}1€P¼QÀêðšt-«r ¢Ÿ8 ;9uïPZßÝýï??Ôi6¶M¼Á%Y­˜è\LkãV¸ÈÄ÷dhö`Y±æÒrQ–¥ÜÛK„ðAV€]×þŸ>§ˆFß¡'fNG!)]fwA¿±dbË©8b6í[ˆt ç\ï¨l„‚Y2¦°“# +@Iþ(‡´ V›7H‘ˆŒP€DÒ?úˆ:Ù Ý"Êà¨Ö¬{¯N4¨ë Û}Å–nK±Š²tMH½E ƒD˜›Ÿ#ZiFxßÓÞ‘ ©¿EÑ»ÓkuÝ °Ãèu}º ž<A$h¬;j§õ›:\P¯;mÏ*>«¨¬ãº½Öœ‚E ©mýµ=ݯ«»î‰証ÞP €j{í.îÛB8ЊÕv‡Nx2¨ßžkõºë{†é>ÞŠlGе}׋¢‚aQN‹‡‚¸ÑC«%@àÝ8— £à)=2¡‰S„îzm}Ø_ë(­ö÷öÃ^oVìD0„ØM‚ÿÃjÿõ³ •%1„ÑžÃ4E|Œd¶_€”“Ž0¥4'hßÉÀè•?¯ÓQ3qšªmŒÒ€Î€u"ÿ¾ÙÉds;·°²pÚíÍ„jdgJ_ó€ +Pñ @ÏŒH´Pvú0æs˜Ú€ Úß>xüÃ8´&Ä:„?]˜È@Ò>†eÀ âÕdìÀ›Ô˜7S@¼~,bÆD€zêFÞf|T±ÞÁ“MþN‘N*é;èÂà˜<ÀõûÓØ'v¸D5ÀµkWükW¯C®ýÛg‚ùËWÙ|I4@?шŒAL!Œ‡‰¡ØÉÓK·Ý@ + +ž¯cØÚ"±ªà0á¯hÎæ™\»²Òž®€Ã}¢äéò=ǧS€Ì +X¡c ùÖ\!NêÆhYÑ dŠ€bó ¢<€líî(;иxþ™8êr¶ûãU²hh «BЕˆÐÄunÐú·æù:]´ òþßÞÚÝÔ›;yú4ÐOÉþœb­» +ÉÔîw†8@Ä%Jj®à?U}æ%1¡0¢uQ`È3rPÆ™“HÃýeQ¢U_U¡€Õ.ÓO¢~Íi&‹{µ + €neӶιnñý[Z½Úž¥Œ¬Ë¸,ÞQiJÖ-Lÿ-@Z­ +@§·ÞiU­åÐÙñŸÐ +Ju/\Ft?œTõt*ª+îj=@hÍS¢ü¯ëítsmý ô‚[…™@·G°áiOw½:€ J¸-tUâ†[ÕïõZ‹Ô9p$=˜ë(t—0Ží‡½ÕP‚Í_›ÿÝöüœÖv;CŠ>dzþ„->( g©@ ‹³Z\$@ Û>BœMgÔKEgÁƒ±´]èöŒýcøüû«m~w{YüÇýÿ/¬%Õ•*Ìù¼p? ?r}Ù$€Z`ez•šµÓq[ÆWýDáU¿XïU2NXŸ§(´;®}¸ÕŠÜÏ”s ›_X9ž}B¬<\ñ’'¨úwÖiûé¥Ûíà4†ÂϸÏh¶¢ï²tDZ~‘“£,o¢ìòm€ +€ƒ +Ó¢_ °oçˆÉ惙þ§÷øäÌ%¾஀]ÉïñgQ€ÛŸ~—é,˜^bßø|àeÁ7„m~Dz2[ølßû:?øývDýP èYªt¹^#ÈÀ¾¿}bF4ÁkµÂ>GöpX+€–0RI‰?kÿË88@´ 4°“´½F6×PŒØa™¬1Å:À}2Áüîc˜ÀÏ?îlˆÜ¬K!Hgó ¼€ànÀ:7à{ei^$.×óæ¢ô/øÐÓ¡'b›…l=üz–/†ˆ«ž<½àÊ0ÅHñù $ ™_VÏŽ*Ug#šÅ @ÀþÜ¿p$> .JèN€®˜R8 € äVÁs½ä‘z3€& À Ì(BOŠ5½ö€ÊA‰€HEéµnë”ÐShÙøvwD ’ÿøž¥úߦ¢±"–€[÷é ˆ¶9›¹×ˆ¶»ë]Ý€ýû»m#®ÀžBºi(£€ŽT.àû_Àþp}ýfW(ÝA/PôîôV[¢·t·°€½u¼fW]–Þ[Ó"««Á(ÕëÂÂ^]‚Æmþ\@×ÕS‰-¬Ò +@!¬=z½>þ…¢p‡voHë„¶]×BÄDþ¤`AÀŠàv‘²x‡²³ +ŠÎÜŒh‘¼mÚÐ*}¢W(Íî ÿ׺³tÄ];šÑwÁ@Œÿ^æÇ»ÿ)ýÿÅœaÔÈí‹ÿ?†°×„VlÖ"g U±SNeÓ*NR|ÊÏ«eÌFÊm|ìè´´>vü/dBø{¼ßù¥ ç‹`ø?qÒóéç#üܾù}šoøÒnCp‘Xg±™hM,¥…FÀî:©®}ðYìfÆ)c€ë+Nd´hLû)œÂ +ô‹e^lb ë)»ÎMó[Óê1€" +Ùº¥ À[h”ö¬,oìü.à?ˆVÊHAU˜@*Zëlœ 8°<Ç›;Ž¥Â¤9C?Ÿ~zåSë¯àéwõÊõ«ÿzàêu÷tùÓ‹& /}ò .~bBpñ’Û `±&z|ú-Ф=ÔÝp×î‚H)ÉLÈÄa±µÈÐ. ² @q<1÷§ +À¢5ó¨Öj{ €WЯ÷…ùÃ^wV¯v]w­Ëîõy¹Yþþ÷Éÿÿ¿ˆ +Q¯^'éç,Þ¨ï|Þ°?¢P@‡­)´û4­Þò[ÚŒýcú?Æ ëó€¢Gé 0[pˆêÊâÇù ÈΛfŸ< +/ø ñéÝÐ&?sniE;Ì,¬¨Ìné?„: +Ã(þ +ôÑ +°Ù§G6¯T „áñ,Bcó ýµŸ@ÄûÕ“CŒðçÑõs(5æ%a¼[~í'±bR?ñ4 ¿låÂRœfúŸ(€Þ«²óM h÷ñˆà€$ï `bRF&jˆúëFHéÍý +ÀÇBóO\¤Ç³¿«._ÕäÚ\¹vùʧ¨ÿ|4À_¾råòå«×ÿ-~Üe <–=Þ«Z<ÂWò{ýÜ€P„$c8º0ÿÚT´¨ Ý•¶ ÀQ>)ó-1>ü¥ê¿¬Àæ|@.O +Ÿ- +É»Æi'ëÈ=Q’°¨ÉÏ?îìè¤_m(bxõCÎ!Ó²§•íW`º}2@*ð‹¯ÿ£ôO_…Tÿ3°Ö7>Ù + ¸½¹óý +E~w¨÷m”K\8Æ«àeøçÒ ””x¦4îø¦9ç0§OŸãs@ʘ >Ö?ûy¿1'ˆ‡ü±Zi l¨á?Àá"ø/xN +€Á™(ókÃ=¥õE+¨]WùÔš£ ëâ}·ÛThñ&£ø?{6$c\ë”FPnAgÐZNÍ*Ú8ê*OÖUúçšñ»ê!8&RÅÏéU¿Åy×:‹"Ü8ôµUqYT¸Ù˜ªô¾:Ûí Öbz|Eza¨® ŒSAÐ[D){‚[€J؃î@w¨ ò¹¬ÕžŽm÷;ë{!³Ž^@8 Øo­@´…0_ëˆð@ëhp€¹b?(åSh%:I>ubvv‘õo·f{mû×ô×sRë" ›ôö 9ºÑ,ÿë*‡ÿSðêõ‚ÿ‘¹í+È?Ú@‰S›:8MXâ´H…ÒùQ +`¢€{t¡¿˜¹§­ÏÄiªV| À>–ŒÿN·cˆšÞ.„ €€ñãĉy×ù“ÄqÿS<¿¢e+€T*ƒPË?‚øIß–`v†N2Nœò¡2q .¾í€LØŽÕä°?ÁgܧàOø ÐHag{¿ýØkR·Ÿ> KK+KUÑ~ºŸòõG;;ß7€G# +€ŸÌO5ç·B(EN:ÉØügöà½&Ú‡SÚÇ8€ÿW®\½ìúþkÿJ¡^l@óú«×Ü \þ?û·ÏixãéOo<Õ(ÍÏCUøT]W¶µ¹A[rÿŒòÆ–€–}¶–«b^ÿ)ú˜ø-€ŽÊñBɳàÚ]Uý‡Q/$@qìÀn €–^¯bTÀÀ… +gÉRµsv@ Ùþ矵ÃR{ã«r¤ þk/RQ£›ÁÐ< ÀåÜò´:â¾b·Šÿÿ.û þÉCÐÿ5xµQ~²ñD·¿ØzDAà$m‚yq KéÏý =‡Ùè~%ôI3DN¢¤æ2†×Cˆ‘­Bÿ"È` +¾˜Í‘¼ýeB"!œryʇæÀPÿ§¦‹bû°½=´çþZ{@74€ËºJÜB£ö)×”w»îéÆÐv +G€ý>Â6sÙ¼€â“«dxÞkÆ5éÔÇET˜äÞŒúÿ`[Qu ÐE™éuæDn„Þ ¼†½Ž@RÅòÎÍõõ[ð’Ž…uÁp¯Óê n¡²]”VYzUñ|°·EhQa‘€5’€ÂPÜ¢Õéicüï ;ƒ6;¬¶W•pº«í¹6Åí( +„ÀõEz¸„DáYAÊh#sÈõÈAì¨`ÎU¡¤¥TÚ‹íEñ(žÖwÝ*mö Ãp],`5‚{·Qüoà¿á¿*þ»úßë5,¿(• ÷úë3sx?J|üÁpOd$9–Ê ¦PŒó• ˆWæüäp஀û8˜út¾»w3EMk¢ß~'C8qòÜÊkNi“}÷Uö?­ÍçW.ÿ£\¦©(¿S+6ªþ‡QG0Äëu§$À…IÞ¾$û5ľ¦qo“ÿ¤8Ffšsfz¸ñÎüRˆ2ÂÙ– VLò¨Q€ KÄ8ÅÔ?€;vw·ãsÀß§ßV繜.)Tó§Ø/|WÙ\ù¯Œ¡lEžìå˜LaYÀ?ÒÜ ?tfW¯Òæ/”ÿ«Wp ¸ÁןòÀçOŸ={Î^<þìå‹/_ü>€"à°AC€=õÜðH#(ô`æà<£Rîêöò9Z ¿0ó›C:t–¥ñ¦ÀŸÿ›I À11ñÿ|:#ŒiQˆÁ51eJðJHJNäQ )ÐÏ9Š9€ó”¼–Ì‘&Ò„çýe£ +€ €@‰·¢*웸óc·Ýî X„4 +ø»3ÿU\¬…g é¨›5˜©€@ÐU"*æ"¾C¸uqœñÅeÄ.´á[³À›{{îÊÀZßðŠÀa>ÃÎM +ùkk·†ëtXà®þt„˜n¿¯Ûü‹ÃˆÐè””¥Í¨@èÑÉ¥žˆí«Té‹k, +Ãï8TÌîPI<µÇœÒ H´>œºëõu¥Ëµ¹ >º°ÂŠJÞk{LþOø§íhÿnú'ÿ«€Š>Õ˜@$RR‚çE +ý¶é•Øð»øé^M®ásÂúþXí@+åø´Ð7þ$4)@2€šèAƒ=!ååCq§WÉ×­úJ‰¬Ä/.Ξåm¬ÔêÙ³¢‚>þu„BœzñöªàÒ·¨?ü“›RçÞCó¦çÛµþ¡°JðÔ=è–÷öTt_ö×[Ý;¾ oТJÀÃ[·n­ÝÚ»¹¾Ö£ K¯²¯R¿%: » ‰à܆žÚ1è®âu@ ø¢Bw=öÐíê@R‰h !C“À¾˜±nT³ðˆ´ŽÑ +$=ˆøÁZ·áR‚BþÇ‘ŸÀ_S¸ÒFrÑÿY:r@•³( -øKÌÑñ"íö`\zYs³-:PÒùqd@#©0þk·0ûkèEÁí?ñßð_ð_gîFþ¶Êø&ÑLPvk\ÇÜô +À>Z¡¿3‹0BÞj}8ŽÏ°ölà¾ÿV8Å€-'©þ@F$2`C¢/ ­™ñç?˜QZwR5þÓ’×ô!l¤éÊX<•áÔ£]Oé%k‰“ÌRÀ ÐP§Kó1`LjÕ±ƒ¹ý”òó§C 4yK[l%:DŒÈ(ÁÛ ‹ˆ±Op1E·}þ5K*ü ,­ìÐ{Í4ÿÇ| X3ßÓ°€ïvü-€…}­øïy—êáhz_ûÑÝa¢@g–ÿ@ àÌÅ‹—®XÀï>Íÿ/}òéõ§Bÿ—/…þo^kxýëïo~ó›Ð_KadºMÀ·³½½uÿîMúç=ZB ¸lôo¢>3¨mzÉw—ææçü™?'sý•™ÿ‚ir‚­¯6¾R±\±n—® é±ï!^€*¹ó í^~ü1³ ™ë%`¿ñTPFØ èÏ€\÷¿ï"þ/-Ý^Ù<àçðÔ‹¸M·€+¼»™ø(‹ +”ÿÿªàûÝoCCðÔq# +ÀÓT«P@©_&M R×óˆ³Å|¢¿l´€ MÝ r `Œ¬‰àvÞ_ëxBº&ÊPÞJ)ûg¶N!ðŸåÓt߆4aÚ¶Ì=ÍõÚsv °l{]™Ú×ˆÍ zËô;(¡ˆ©gÒuôCH¸*äwUn_ë-**‹Î®¯µ÷ÖÝÏ? +@Ž€†CY=¤b¼¿0t§z{ýv?ª DAÂua®}S×ÑÞk]¢ Œü‹”ôµÞêÚ@xÛi¯ ÛOÄNLT¬Pê÷Ÿ¾h$¨°¦¢@tÄj‘p§Ç…¨O‰dLÔ¾é9ºMœk¡%è‘èþ÷‰ÈN¹ëE¡ïšàkÖþþÁÿ +þÿòEl ü¯k2·W&Ùü¨v€€7‘NIz6ðGÆ9Y8B¸ €›®YÂ/–(Æ ëó(ÁW>Eü+{¤ F å-ƒÁ4ò  q(kzÞžy3çpÔ¤(w*þd“嬌Âÿ©™“r…öÕþ:éIÎ݀깦ýB˜ÖPÿPßè•úÍxIG™ +ð÷Þ„³-9@¬˜äàû6þË8ÀŠöÂcû¨ÿ÷ÚÏ]ÿY  ˜Öè&šýx?ø˜¼$Jþ™4`Ä8NïÀoôÅYVñiÑ·~Á>²ÿ•ÒåÏ¥K?9sñÚç/^¼|õJ¥ÿ—¯Þ¼yùæ·W¿þ**ð+J@±xDéNœ[ºP5¬l{+@ÅcOa&N›‹eE,,÷÷дVRïÞݺ»}ÄÿQøÄ¯pÓýýµ`…“åò²8~k~nvicËÅo§æ8#àL伻ѽ»µc}“´!V©ø/€Çñ-ÿ"[kÛ¯äOƉt ÄÂûZPñŸÁ¥ÿ¼s—ýÛú/·Z_ÒÙßÄ_ø0Ú¦Ç+ €ŒýßiAÖP4f¨X$žYˆøI^“†à pšž@ +¨MGq%ŒH#cœC¢¿¬V’G­ƒ€D°½jKôÇÿe fÐííᨓâ5?^Gš!Š€ûµ9U#¾@ýÌYÛ©S3 j wqvQ×Ð"8gŸ@ZÊã)ïÊ>ÜÒ¥‰ŽÝešõ÷@XzÁT¾M=4—íõo!þ÷÷øæ¿0Pñ¸=³¼öÓP·×ëöVuŽÁÞ΃ºelm`ìlwis§+림 !¬Z"Í(Lúý6ÏÍ] Ú]>Á+z€ÍµupG7Ë- ™™ÑýÏÏuW{®¿ÐÙt~“õE=-Õ%³g +¨* ýµOÌŸ8qvf®%ÂÕéé™|ßÝÑ]r±r×Ôÿó–1½U£?Å+Ùò¿‚ÿ +ÿ•Þœ¹c†tO…ØG¶À)äðß Ëèö®ß0y]1#YãLœ¦Ù + €`B¾¢ÈÈî½Óü•,Kr°(«ójf”ÒOÑe‡ö9)ܵ•tg]¦o˜Î$ޝýu2Ö£rODC+Œ ^¥SďІLe%3´ÈÐrvÀ«“Mî z‹1ª£DšßšVï÷0u9ŸuKP”Ï­è‚ôðwØ.ñXöÝîw[]7#ë=UüËO8>2ï×C8‘£F¦Z™tS +m1[`:•eùþH£/àø€á_$€…K´ü¿tæãÏ\yúLåÿW¯_¼~ýJ àµÊÿ¿ýfÔG HãYrHS¬ZÙTïo°½)ü¡4 †—!¦e¹šzó±XVäÂêa>#­ § 5 +Àöý»Ñ + ‡@=çÈoX[+´Q†^0·¼!àv’VœUîn¬„ôk…¨¡"œbáÑ΀½<þ‘hž%ÆÇ”*›7›ø¯4 +i*"ÏЮ• øÿ]‘!úbׯ¢Ü½[#þØÏ†pû¶ÞyʼnÓ!̸7¯ +ÿkÀÀŠBbI9…#§"d!6'Ã??Í ü“+”lÅSç&\IV" p›ó‰þ²Ú r}™‹ÿðÏÀjüŸ†@Z‚ašÃ¯®êD*›«Ü½Ž®ŽÂ®ø¢R)pÆÙfue>LÉKÐvü¬…a]c"@æ‚í"ðkëXÈuÛË*Fí®¬B' +€µ›ö2ÒÇOqoïIG0¨)ÔVl¶K…zpq^Ýu¯ížÝÀP÷®hîžv(¢wé`Q|Àõ袾ŠÈ…XG÷@o¸:x2x¢ÐéDƒ@{öS0áÂ`6B)_·ª[°ƒž+ªDhÈÌYzn·5 ÷™Í÷˜vböTíá ÜNùðO;ìõŸævîªÔ/ð·ï­Œ(F|Ûˆ@Uæ‡ hT-Û*9ÏÞuV{¤e??GÚGeO@Âd€O/]VÉÿâ'—ô?óñ‡g®~þâÅ+?øÿ†z\Þ¼~ ­<¢ŸËÆÇ€¶6·îÝOد-ûÈAVæ+˜iLË\.Ô+bº1e?$ºÄTÕß½»}w;[ üœmç«&€6Ï!,µ…ÿóË_ݯÒ$©Ðý +À %bFD;€½+†zsM£ºŸƒ9m˜k( h«Jü>ÄÎT&ApFqX4øSúø¿{·‰ù#?›&_ÂNóÎNÒnèßv+!$d•`øçßP”Ô@ !¥Ál* ˜8WHc·ŒÚ˜.)Ó”†DYÕ +`Ä€ÿ$Ç’˜]ž ÜDìàPʬ%ÈÛí©js§`Ù 53Ú“Æ`ß c!d@—証ï‹pv×h™2?Kí–0––ö‰y=šÙáŒ/&0þ×UÌïëÝY×ñû8ß¿•Aa_ŠmÀ+¨™ïôâzÆ?A ÖÖ©}ðMt´r îôÚývwµ+NµJ¿~ý­–°˜[ë·[|ôׂ¶ø‚ìé'#|b À_B×(h2àlQU’ Z™âZ;Èw­{Ö]hŸÓ^$lèA¦×˜Å—þMÿjøoâdîýÅÌUB ìˆt‰§Y|G1ˆpæ 6’n}&NÓl ´oàþ]e-‚½†@® ì@P}äOC]ò¦Ô¨ÀW!×3bèæß3TÔ!ßã z‡Û_X"|&ìä@¿?ò«iÓÈ5Pþâ$^£Uü|lÜÅØÌ·àjS¯î€wÈ ªiD‰|ýXÄŽ +"€‹-.ò„°°²°²²¤(@48ìÏï;çá߾ǀת%úˆ·@XÄÈ–£˜î*‡“‚k á9•ܶQКƲ€¤qOAŠàNÿÎ|ræ#€Ë7¨xõ:†¯^ýúJ à•Àÿ·ºÀÏCÚ‰sK+÷6Æ ûµmo q (Ös¨æÓzeüËŠÜiec½ [`ê–ÞûŽÀ}×»Às¦BÏq €d©è ˜o-ßÝyøØÉ\ÿT²—>‘øP´ÄëßÙy¬çK¬³`/€ÇÑö¯)äD7&ãÃÀiÆÿo´L®!ô\ƒ;вf ¨ÿ*;؇A äçv[ÎF¶š˜?ò³¡ll*šÓ @1Mù?šø/×íÁ1.¯,T>ä UÄt®a' Yp¥+™ÆMàì%€/ëQÄæýe•0fFˆ€&¦‚þ©)øo(ÕT|çx¶Ä¹Ànmɲ,5× wØ0PN z¾Á`Fè—Ò¿"Rœ¿Ó^¤;MAu_ÆEvTŠWa›GñGph]‡Ru`Oí +û¶T^k/'þs׿”ѽo~­°_C¿O‰üOm—¤MžT¨UÀç ƒÛhQA¤ýô_æ´à=•ëݶýtßve`›öj·Å˜ë"]hÙ·IwÀÂÂÀ®~² ¡ÚPg«ÄŸRì„Ëé¶uô€p½=èûBí›7ƒ é +þm®û¯þ†%øcdöåç̽6»à eI  ”ù „x08 Lø@)¦{§wú€pË(&óˆ©Öç) +ÀH+ £ +YÍ]a"€uÄ~ûK +L”2­(Y:í2cp2zﵑP=3Ê,ú+Ÿ¤_*𿳡/ÔæUºYCÜŦЌŒPÁäD?@ù)€éúð8^¥Œp¶%ˆ“|ÀÿÒ +'ZxXù^/éÑ¡ÿÇüÁÿ½T+*ۅྦ@×X!9Vâßg„ 9kZÉj§°¨á?Ú><ó1^€/ý¿/]æ ?ÈÿtûûÉ'gΜùèÃ/ßx.àVÑæï×7¯_ªô/{•5¯¹Íò˜aŠT›þPÂ>¾’aPŒ)M(oÌåbîT 9ŠÅ²Óʆr´€Ò + ¯‹ªˆw·¾aLÉ^j‡74Ú#ÅW¯­ù9ZÜ:£ø_zé½Û]ùjK9›mb©JÜ»;í`öˆXN$³ÈÈRj@sâlyðàGûì>N`ââ +ÄÿR øßÚjbþÈÏåãÿí••wX¡T,ÁUH¨€s*ó+ ÓÌ–”_D&›`J ü÷!%A¥²FÙ€§'O!/q,‘‘H1Ãè/£Î:3ýQ3p2«0ðb”4(@ ¿ Œ º9>ÐÏŒt¸¶®u€Š¹³­§ææÆŠÿ²¸eþný$èü_œU±xQdêÑÛ=ºÐ/üB5ÀXå‰t#k*kwh¤‡ÇݺðÆZè´ñ²·›½n¨Õ¦}¹ëv×wMàG3Ô#à7 Ö 6ÿIôIûÆÓ.MÛ(‹óºI@Ÿæ}<,lÄ7ÙÃ]qØ]ï"`}-oÂhŸÏî]݈¨ÖÂýO@O€dÕvb¶U|(N=‘ÊùÜ“ïZWßÓl» ýÿôúÜÉA8ÿ úQÿÙO–Ðo#Ÿ/¿Ìíñ4äÛJ#Õ^Aƒƒ8€¡œ4\YáÓ*Α&øX3Õ8§Á`´€¿°Oàî9w¤£#¬´éQ^ìÄvRÉ @I4¾ä2{±õ8H,=R©Ó(@žôW-ipòmPíOZhzú8®è¶?NL4^ŠT-BŽ_ 6 ”±Äl’±‘]e”¨ÍoM«÷û¸$ª-.Ô> Li崹̯̹j s3@ç# yJ¡?F©Œ+ÿ•ùà˜+obZËþ‘ö_†|j×?{ÿÁ„ÿŸùðôÇ—¯?¥À‹W/i @]€~¿¾ü¿~I=€­~ºøݨ˜¬Ð€Á;Äå +˽ÖseEcÈQ5‰õúèýð"¸jS²s¯BP¤&Y€_[,µæç—6Pôu¥b’£?à£b:1.óÇãÇ#ÀÃÊ @øÒÀˆYˆò¿9€Î ½@QZ¹…IgQ~  ¸ +wíGA0üïú)+ÄûCXrs ¢š;á>ç+ÿœÂcL€¬´è/Y„ñ_Ãù€ÿý…Y`GÌ±ÄæC†‘(Ñ_¶¶vg@ùp¿ౡªÂÿЏ[¹°„ ˜†‚O¦CDZ8‰Ž•é®|ÛOûâ2àŽuè»_HÚöÓ½õ®ýõýaí¦ð“ÍÂQ«v`îÀãËÚ:—fÖð6th;˜Ö:4Ô-é´F÷ ú  L,ÂIþ$ü‡̉É D%¨L #À+¦AER»Om~øŸnØcBýË|ôŸúŠÿŸœùð± €;ø/ÝÀ—oðÈ*÷édj;yš¯ÞÛÚÞÞþzçkþ;1<ò÷€Ãë‘~ÕPê5rTæs«ðè´y ,¡ñ¾Àý»ßPi‹íT”¦J}ýÅÌQp°ÔãH +6Ö# +@ÄÃïW'IÑ@z¤y_Y-@,é:®Е”k(·ˆŸ÷ÝÔm ÿíÁèòÖý‹‰¦Uˆ?ö+¦9—è+p^øºÒÿe”ùk‹f€ä$Ž¶Šœ1NÞ4üz’y ù†öu,q”‰È±‡y£þˆ9·ßgÆ~PKcàj¿  ü—sv:Ô:< ­9a\­x©‘æ¨P‰v±5'´£„ë[l˜Òâ©5Péß%üá‹.ä‚’ œÔ`Š<ÏÊõ"‰ÿP=¡@Ü×€*(©"¸à7æ ÝîÜ\œ$í±JyÃ7œ¡/RÈÅuM7Ô) ?© Í_¢Ï)õïóè¾2ýnÞ©ö'PéZ ú÷Ï:«®íý£ +€þ +gùÁ’ATÙ‰¹NW;ÎÎjžV:ÖôEwMx‹ÀèNDÖD¡Ê]»‡#Y”ýUúŸXüÈìž_UÜ#ÄßMXÊOPȺµÕ©V§)¦ô&SQñ¾ýèk1Ÿ÷ @eŽZ âo\ K h,p¤ ßãAâ¥I ‚j–•ÖaúJ¾Ót/±ÛF‚ÖȈSNž˜ôîDœ;…ÇM|AgÓ…%¡o  ©x GÖÒƒo¼×¡‘WÇálK+&ù¸ + [,\¨[า2U-€nü{·h*„Nü<ØÌ@|Ó˜ŒûFpÛ&ï4Ù>þø£©†3ÿ?¡-åS‚þùãËן?ù’¾Åžÿ׈ ø—åÿÒ`РÉ0°Ð‡u[­µ!_À“èðFP(Ü¶Í +«@Z`nQå×¼Õ0ä|ÿ 4‰c ½Pxýe.5 VÑí¹ Ljß5¥m]% €ž­R®m´Ó£èÞû¡Žçá~ܼkz÷á9tÆO¦GX{éi³ë :J ƒá]ïCnt["EºÓÞàO-"„€@Mà$ëýŽÐVs€~gºö BC{}Í’_ +üÿôL7(#£Aès+Eº «Š×aJÌ¢P +½Šÿ·ÒõoBñ?V”ìÞ¿:·7àÇ4‹ÿÎÿI—€æ×ÃHn2`ä]}ʼ3Aà´õ™8 +ýÑ + Å·PBد¸Kߟ‘ø£Çßx.l¦)­R@r;é”Ii>Ø 4,Ò3‰;RwœÔæuÞ ƒœz1W®¨#sîPã…` þ‚|fj À[sÇ÷ڀПl«(Kxÿ‹¤@Æ—/ë0ãó»»²+à]zlôFKÍ9ãd ÉöGº7EíÌNÇ`®àŸÂ>:ó1n€2Šþg.iAÔ@OøÑ¥ûåùË/^ˆ<{ù\°o €šÍˆ Øtoñ˜e +UÛãöh[¼‹.jG]¿j( õ 9*ó¹5×(÷X'lGÐ_8{—&þÀ?Õ¡¸M uÿI6\°Q€"& +`ÈýàÁÝ•îW5~¬(8&à0ÑÀø_{ÀøÉ}t&ÚTß Àö·­›öÓ ΈÿVù'üŠY87S>8³ \ÁŸô¬ÌÐoK“f"'™Ã˜@ob†ÿ4\’ÓByÏŒ'Š/žs&±'AÔªLÄ€=Õ Ì"Þò¯¦´šßÇ º8·Ø]Ð&­s§ÇgûTžUîŸmµûkó‹ZŒ×PÐ=…â}bF¥»Ã͵ÚÒŒPÌíÙÌÚ`u‘— ÒéŸvÀE"!³ïdhЃY_ö÷ú¼öukà#dÿô «­9m…˜œCÿgQ˜~O÷¢[Ð ¬)À9Ä/ÿ;t)¨mkƒÞ^þ:c•î‚CXЩu›º6µA>$vX[œ³ 2°(þ3'ü÷`I$ßgm§æÌ!Ú-…¡k8/çô]Ç%׺ýB[ºu×ÿߺ¥WþJÿÿGkôs3äô‡ø_ø€ä€•úaÉ´ônßxÈåu¶<1'¬ÏS%àJøæîýmíïøs2†pæ3x2¼+ ™ÐÔ&@RWÁŸ”®-ö YVÀÉCô¯Hâ1µižeワÎçŠX…^ú@#‡thÖáï'oüÿc¿÷—cïL87-VLð }.ÐpD8šú ÿ üÏkëÎå¿Haµ)gûBù)Ì©#Õz>Ž?H8Ì j± ÛÞgæ„õyŠ€ëQwû®¾¨¤oàcàÎmœDgã„N;“$¨“UiÕs¶PßN˜êkÎU‰úú3 #]ÜW†…å>Xˆy¹PŒUX㺚‚ƒð'4«7Ïý€iÌM¥xÞcìJ8Û’ÄŠC}°(ùG+€TŽbß»Tö0}(ßé[ÂÀ¯„ÁBOáJ¥úfh6Œ¬•Ããøux:ܧ±ü= 3—û4ÿ§  ?ü˜ |(ðôE‚š†óŸÝM0?eüÓhHQëký¶·ï€‘žrÎÐRцz†•ùÜZ­Ùh* +úHhGnú£É7”£+ 5®.ìwßa󭕯ÒPæÔ ÐØyŃ®ò€1€à~/GQs)Ÿ¨ü‡9!P u Ê1RðžIP¬þë¼óà„Ý]õ?ܨ€ ¬ÒíeØXTff•‹˜µÚ0s e"*SäQü!XeƒD^3ÒA(ѵÎZ>0~Æ/¡?­™ý×”0Œ‚¤7`Í* +@Ÿ;Þß ßëÌ-¶û‚B£_ªÑæ~»½×ëðÕ<¾^‡Ò=þ-7`$ÒÃRLêæðB3Oð-ëÑ÷^»g?=]°Ó݃ì Öo©Ä DëáøÜÅ_|ö)!÷õÃALîÞÑó‰p×­9´NÝF³­Óu}?w­à x½.(®ïé(wßBh¯õ¾îQág§D>t;T‰H('(èÈÜR(G@ì(½èí韡d;5·èPÐmµÛ³ˆýκ.G݆.Îíwÿ¬Iæ^ܵ‚à‹õ/€ÿ}ÅÿX–­×d +s +©çjà  | ÐÿHZAØ»~ ~‘Uär‹Æ™8 +€2\6t‡$å}_ Óíû¾|‡÷3÷/A©²¡4µU¤ŸTHÿ ÜϪý8‘&+3|Ù¼=̧.0å5ÕÕŒ|GÁ Á"@³èÏ#†`é@[c¿ê€ÓF34Ë©›æ·¦Õc +¥²½Ò +ÀW­œéÉò…hºs¶6¾„ì⸭ŒÕ¯BOIØišùžƒÈaEM*ûÇ+É}e%ЫP?ÊÞ§0*>¾xF¥1kVð¸tí©ñÿÙK] ðüïÈ/_¾zýüiZŠ7BÌDÔ£,À»wi¡(¸Ò¹^ ÿJ ­¥n6 fFjTÊdVëè¨)Ð?$« 5´Ê1uË­ Mân··Äû£øŸ•ÿ66UÀ„, t%jÿµ¥.þ;€|àNõ¿4‡!>Å/Ÿ0R  °^Z A1‘<'éG®¡C>}è_w%ÆÎØÕWÃHü*[¯ðœL ®0”L4h ôSëö‚€1`^OENqaµ±‘óì'‡;ÌÝ– +»ùx 0·O…Óûܬî²EûûÄA\ýÞéôUHæÆV·ºâPôc€BèõÏí´Ö*ü×éUì_Wá˜þzµªßi¯÷{BhQHÉÓ —5  +ˆjð BþN8-X¤¿Óõ]Ëð( º ½Ð›0Äå+|z(‡|K(M»tä: i¸Î‘ºItU3½U.ÌM¸9b_€Âr=8½ú@ÜEŠ $ÛY¾IàÊ<'Ü_[ï ‘Câ]qõÞÐ7GXSỾõÅþó ýX,Ê4»žù|þJS_á¿à_S/jN©ò›I +›du,œÌP¡…<þG*‘dS0Žéçu6PLÆ ëó(õ7€Ê€ìŇ3pç.pîÉ£’vƲHœ~ ‰7 Ó>âîJÄšgZReelô—ÅY=@Æ–‚Iyê@³X™«°‘ËN´ï ¥C3߀ÃîÏS:ôóŪˆHáQ‰µÅŠ >Yâö‹ÿ£­ÂòM¶Gœ±jÀW‚ôZë~€.^Jüƒâ[îš2z¯½¨ ûëé¾ëîÚùkk@)Da} gú¡`”¦ŽBMáÿz¯=7¯Ä´J·ƒoBo8ä ½~/•1 ]G÷®û÷’Ð2úœ#P8Ö@öEº*œG8Kg@„K’íúˆëAÖu»4^ÔyìsAKLî\¶®µºyœ%ƒµ?ÿÿ¼s›—lšÅÉ×¹|þ¢Xmô7¤3«²ÿÑ +I±Nµ™¶œr˜GV¹¼2sûVëó Ô߀ÈÌ{# +ø rN_,Ãy¢Árv4Á)µ‘VsóŒ«ó°D˜4¥Ä›*…ò3þ—Ä»ÕÂÀ:ͱj*‹ä…`(O!X°ŸÑS…Ý![µWœ¨€xýXÄŒ +"e­„€Fµ€!'_Ù${Œ=ßoX  +€PóP‚/La¯…U%Ø¡Ÿ»Æ òŽ%€¶žÎ>8ý¡;¶þñ¢¿ +@'€Á >üàô¥Ïž>ÿûóÏž… Í´pãúõëŸÿpãZOèŒdÙ€»FØql +öÍMÞ°øÍ¯ÊB½FCŽÊ|n­Ö`Êt…ü"ŠAæÇ¢÷ïŠÊÛ¡Wº¦g=e×@T`cKÄS(Š:9ê¯2ºu›^Š2VI­}øÏý2Ê;éçÉmڤÕTˆY…=Œ(+[Àâ¿ÇGÙ¨ßøa:ý+Àý‡€ÿ`v1‡m±T´ 1RG‰™`œ¨ßo^Wyz׈&$ŠÌNrþƒÚ£ `ºz#kŒ ¿V¡A‚–Õî2ûô¢Ð¯ÙžJ뀫p B€£<%hážv*Í-v„}±ÞºUþçÓ·§ðÿ£Hßh î&Â2Ý<—¡M=ú ïÅD`ü!ƒþPø§"¿¼ßowûx¿ é·oMð'XÔQ=*ƹqÌS< ú"3¢.==®À]Á]kŽ»n!ºkO>r|k}ïF ­÷u¶Ù¹öðÎÁÞp ì§ñ!п§»ë¯Ñ6ØÏU{k}çé +"]Ý„yMÏß„ð°‹ø?X  [ŒÔœ8‹,Bhø¾Úë¢AýuÝðÀ ÜÔUhuç¹k;Cu»â'Å/Ø4¯Á}ý+é‹’̸ i&IzßLRØI–T‹¥eÚé¿` n(™(9a}%ü¨Xj| €€q €ÎáÁçÊ€ž`¹Ð˜ÅLÙÓë1Éã#=f²d\~ZŒ¡2Ài|´®Ã–\5åë!ü Íx~6Ø“?T3Þápãòc$ãÔ¶ä±b’@¥È. ÿïSÀ˜|g“ì{Ψ©rßmM,lÇ·8‡Z01A­±Â,õßsâ]ñŠÖøOg‰àÓ >øÓàâ'š;óñÇ©üÿOºüÿãÒ•§/ž=¥@öRTàï/Ÿýð¹?tåÊÕ4îÓÆ6+_Sâ§-ÀöÖ½JtVDNLáZ~ÕPê5rTæskµÆçêX9GAÔàS™Ž°Ý¿K‹:s•¬çþ•ÀGG[Ÿ¡ä¤ÔˆoÆ$Ù `y¿àû¤¨¯{ðÄê4²¢ŠUü+õàán`Áb~ã>9ŠtPø bMܯ~2‚LÿÛtA^݇©ÁéJˆÀ¶9¬‹ 1XEþŒÉ‡þåÿX º Ÿc‰M‘5&Ž?öh«Ä˜ø/¬IèOCƒº9€þU"À¨ +€_[k((U9—’uO'¬TiÔRô 'pâðu ” tmê»u@|$èÄ,Í!á(P\¥S!ª²*§ëŒ:§+¶£ Þÿº½AG@¥}•÷ûë{Âf!#h¨U{ƒNGË}û%êìöÐêhœÿé½@cÕa\AÛï Å 0CÝõM•×ñáû{ëÿ—`ݤS+Ús³ÝA°÷d(Œ×“ëL½µ!þƒýŸÒ¹{ôÍÇ­êÆù¨¤¥ÝÓOÁAO€¼~7[ ˜óçù~Ò(þpbŽj**tc¢->H »Ö³ QÐN±#‚¢ýî" +€ˆ +@ÿ–îÚø/æ’/¼zç1?ò~un_€ÒŠ ;šÈH“û€@·˜Zp¢›¤·t†ÒÀ¦£gâ4u+€ò-€¿ØH×Àäýo2¤'`‘³fõB¤Ø á342—iP$ó3ÎÍó}z9&l(+Y¡}Yà0Ì8Û6‘°àÍøÑ¢¼ã_Ò/h6^ì€~|Þ¥G(–×Ò‹3þø(‡Ú× +À<@^ÚÆÁ àûÝ]÷°»³b€ðÈN€°ò/̡ذÊÀgnÔ8Ö*k0€?Bøgªè XÅþ‹—Î\ÔØ½@ þéÃÿôÁ?_¼úÃÓ§OŸ={þ ÒÿóÏ^¾xvãÓ3ò%á3—Â.FTñ“å–ž7CØ \’¡lðYqù«†²P¯Ñ£2Ÿ[«5~?F}+0øÜ¿ X0èW^K¸P"tzÔŸ ‚%ˆ‚#  €h8&4,"|ܤoÀÿ`úÅ´Éø_ò ïLf°Ä× »[Úã0qLÚýÉu¶H;†pòôy;F¾€o‡m1€å¢ò5)™ˆ#%ð=Å‚àië3“õ4œ‰`1ýà¿òød ‰ýiûÌð Ö"@¡{ ©˜A«§‚¨ ½Ý.…Ín ×<„¯0ÐZ‡ *½µ½îÜ¢î¢ÝíŒz†0;sJ%ܹ¹¹Vo•ö ?F†®ŽA¨ç\Â6]m÷w`O£ÛQÙWˆgY¾7T™w ØëjN=Üë«X¯{”)ïs‹Ü4ç»™^³Oòœ*±÷»*ékéIÖ¦Ãp. –C¦þ:U³âÞà§ŸöLxæ^@ òƒÿ„Î(–Ä!ÖöþÝ>¯épÒ@A#£3€>s®à Vvâ,ûŠ× Hˆ@9„úîžf€V¨¸èÿ´¬»îwD8´EÌ‡Š ­Nüo¿‹ÿ£ßŠ_$/ð<I莥ZŒ} €äHêvÊ!ɾӷÀØCS¯/é’ÖçQʯ|*`Â×µìWÉ[”ePï7P¥6¥ÎœóÊ—žWR Lqò3 â˜S$Ó‚[åÕjÊΑbu6¯c'Öh¹ða¦"s”Í B3²CžÎO^~n àͱãAÆôد²ä¸µÅŠC}°(ùµÀ66ò­M°G;ˆÎìd3@žƒ¯:#XîñàÐ$¿©Øb.—½kæ™kü§3—í§±>¢Ýh|€&SðÏ” ?¼xõÆÓ§¿üðÃsñýøáé³§×.}ôÁÒ6³9Fd$ãsÀÔöoÝK +A(Z°¹½)2rË¿ùUCY¨×hÈQ™Ï­ÕŸ +¼o*ÆÕcR€­»€}k!*p° ©sC ð›Ô­„ȨL_ˆL#Œ[xøÆuÿÇú0Ÿš¬âÁîß”ox“2‘ŸK?b++[ßÿ†8$Ms“Û„@Àmnà‚| 8ÀÌì¹üE`74ùFò€4«`ßV°?'3¦fŽ%6EVGGÍò£ ðŸ_bX‚BÃR00LÖÀ•{¢A(jk«*„Ä_lÆ N¥m™«ÝÑ呾ç]ÖmöHò:òµT>¦CœE+-$šÎ‰nÄ …Ê=´nýÖz‚µî”[ߺú{k·pÓÇA¿7ÐÐÐÚÍá ¾1‘QÐk á¢:Øxhθ>€M@Ö +*ïÓ£îþÙ ‰M ­b}ÿÉÞ^J +ôýAwHù_û¨ˆÞ£Â„ŽüÂg]£Ûkëò¨"vlS'Àã¶Zgçù¢Bâ”­Ê>øàÔl¶ˆÐUz˾ëvG÷¨E»fÜ™›£ÊCô O+€=)$þõÓXðà¾ù‹äh&ø70 ßWZ€&Œ¤(¯Ól¯*+*-¡@ôp‘½Z¦e’sãLœ¦j€ÈH•‚½•pt­/dÒÖ¸°€ƒ5€Ñrx”#µz+ÓÄI‰ÌÆr®²•¬ÝÓjÇy¨e¦¬9Ò?þï&Mo‡ò“yøõ¤!Þ±ß.€¼D™fŽ‹Ø±Oð·Ê•AU­V\ +@úgV¾Ì×6nßï>~ü`{cc‹å¢”€$x(Âç£óò=hª,Ôo¢ÎJÃØ{L(iQ¾?ÚDÇÝÿ¯à_ÓÜ ð?}øOÿôÁ‡Ÿ\¾ô?Í +ÿë׮߸~í’©_ Ëo‹‰ÀíÍ­¯7 Øk~îµæV釯ìÒLŽV £ð½Þë tÉþ°Ç} `¹º€xo¯ Ô‚ÒÜ_¿t„èÚÐß»µÞ¹µ·Gû=KÛ-óeÂG?_OEimQ©Ñ^÷LKaõ_Ыá 7OY°ÅpO„B‹ +-QœÚ|Iâ1ÞrC…È -œ_§¾¡ßm‹5 ú`ÿ` ¾"fÀåÅbüe w@cû<´ZÔˆ‰œ=gD¼EN€Tˆp¯=: ä®Â< Ìk½?\‡ôqÔÍèÖúEÿãðŸÅ dó£?§­Úv)á#0X2‡*J.‘ë䣢â;  .üÛâÄœ°>Ò~(#ßð©8¾(ÐXú÷ÿôIDAT,ÃŒŽå.™d`[)ȧÕIŽÔW¥@´8-:RëÅ99ŽŒÃê¹´Æ.e[,0Þ·÷DS0D8(šå  †R#à=7Þ,ï1öô¹±ä±b’@dRÂ~· ðoøQ„3_~¹¹ïmŸÑ +@øT +a¤`Q GÐxŽ<Ó¯"Âr–½]¬Òüq€Óÿ4Ý€ª$4 ZÒ Ð§?¼tùÆÓ§OŸÿòÃÕË|.ðʧW®^¾tÆø_OvâÜBtLý?íù¼Ö)Ü$èÐ廀úUCY¨×hÈQ™Ï­Õ,ðž¦1ð;Ê* + â½sß?zÈf€x.µ–¿‚x¿ü” /€1 @{?@¦$Wÿ3Ý8 #ïìkÒB˜¤Œ} `’ Ì üçœà¢AÒK[ÚãV½†1#©A@³$¾Y4 ôf>þ"¬¹µ¹ïáG#îSx šý»þ?Ÿõ,áûUŒ;Ä9bT2ÜÊüÖ´z¿žZãU&0Ñ Rî›|¿+Žñu¥:ðañ +ð'ðMãP*k,°UgËMGÙþ§)~ÿtZ8/ÄÄ©Ó?óÑÇâ‰ÿôðÁ‡Ÿ\½qãéóçO¯_êD¿V´7£4¿ò‘׎ â«Šÿn°µø¿±¼BG·)ü¯¬Ð Âfb( õ 9*ó¹µZƒé*€=ÀügîpK`å »÷ïn´ùónÈ—€Ã6„ºŽe0T'è4V1r,<º;Àq€¯mø'W¦m#ø¯Ã}jZ줰ü•w¾ú*÷Ó¬9™CgÜô> `|—©îÀ­URìËý‹±ÿ˜lÀ +€;üiü³œ—]Ø«IoÈ="…È\ì÷H(ÖdGÕÔ$ F5 "@€#dƒ¬v ˆQåÛÂy•Á;ˆåÆ'¸@gT\K XîŠ3ÔµJ…b4{?Ááú«,¬¢ñj‹NõW-%¸¦^ç²¢¹ Qé§Êž}*€÷ÖÚTÙ¯‰oé¢g(ˆä&d7o2Æ®×›k Úu×DwÝë–…ªz‚¾ï¾0„QàK¨"º À°MsúáÞ_‡{ëÅùÏðÞÿâVÐןèÁ…Éëk]Ý—Z{ „ïý^íãŽ{"ÖGôˆ”n»E/@ +6½:XlÍÎÒbQ€ŽÝ@ ©Ss|Ç¡»6\æKEºÎÐâÔ5ûëîèHO»ŠÙXÑ]¯¡èž›ðŸeÁ¿€óøÆ¯$.¥góN/# +€’Ý7$/í›irr+'gÏM§°ô. û66ä‰9a}%þ¨h| @yG¸äË ;çxç ;Ô˜™ î#¬¼P¨"J +ôÞ«ì:•U;W‡OcªÆÿÄs¿=PPþõtžê—¯9mr%@¼ÅUùme±b’@8þÝ +`?˜/WPnOv|œ>Ñ pÌ@ù›B;ÂÇsÎ4ÉE‹G@m¹ÄÞd—ÿþ“ûLc'írþÁ?JòöøÈÞ€g² ÓÿÇÿÇ}xæòµëŸÿð쇫?üàôlòCþE*+͔ÿí°ÑeXÙØT¸Óû܆ + Ù¡ëQ e¡^£!Ge>·Vk0Ô8j×(&šzäÉ!Ö JÂþV¶ ujþ® +% 5ÖæErÙÃ/À~÷p €#¹éª€¸QŸXæÓVù…Ìçàïþüó7•pæPŒYgzð®1±)®€&ÙÀ¹aõ¬àº²Ü?ÂÛ@’¸é)±5‘½q$eÚØ¢'¸;@öÏ‘cIIÃ?FÑ +3è+Ã/ø/¼Iì3¡Q|—ˆk0€µµ'*Ô Áмe=Kò½ŽÀÛW¢!ER`Ó`@wÕ]êtDzýî\‰Úô|JðØ­bïbo¾5×î‹]èr<- +úºî¢®ÏâÛK¸ÙÑo¾ôÅT|§! ®Ha˜’°nŠë¯ßº)òC—€{´¤ø 4vµ•_·¾kPZZ n8íx,›Z8Ð@Èõ-IÑ‚¾Ö½}«õyàãß°0ªÀåuû¾½ÇXPî‘á=­-9‰Ï©‹D3dzÆAÓküWÈâ†Qo†ÇÑC%`ö‡à×|ˆ±ƒÏ'* 81c‚à*ÏZ¤@ŒEô¦óÝ5¬R¶j€èÀÉ!‚¸¡ð +Jy¿¡Ä´2ÅÀù+‡O-œ<ñá ”?à÷¡G€yà?Ez1€ÿ'ÿež¹tùÚÕk×.ù²úã"€»À'g>I‹]GâÀið…ûîÁˆ°µ ¨¯EMpÆŒb( õ 9*ó¹µZƒ?e iŒ`åïpÓ{óÔ¼»Ñ¥À +@ÖÏ©˜íL‚h)²2ÖMòª àÞêX€Ï%ó}ùÎÑë=Ô¦M£ø>i¨B? +@k~ù«û*Ìpš°ÈÈ2¶9«CgÜôl·ý]ÆÚàƒ€oWX ý—›­'#‚þ»¬_~P‰z ›Ù‰=«„àCžSÒH´`„!i¼Š!°?ÍPø6IôB¨Ž²ºŽR©Ýó´€Xùó6öà +ÉU,ªTÊÇxéÃa{¶øäкO²ÀÜâ¬Ð+Žã!xΩ°ìórߺÝLkdž›ë7uAÝ’€$ô Ëܽ¾öó=·;­NçO®ZǬ2ø®»Ýa¯·èû´Á0ØÒ¦ ?Õ {At_w¬‚ö_kk‹{‚öhp¨G¬é{Ã._ÞÓù(ø÷z¢-žÑZz>äŽÁüµ›ÜÎâb{í&³\lqÞ¯A˜/ºØ¯8;;Í"›è)€|ßÕ½*øX[ã®Åt`/­¶îBÅîœXÀ@·”aSŠÿ ÿ‡(Êä#›§ÑŒ ˜Ö²zds$×HU}NÏs0(r|"`]ò‹<3'¬Ï£Ä_µ(ßøfÂ×µìQ}‹õ(Ã{*SºÍ¹"éé okÇ9r›×˜áOhú 8Óó“‡ðè?Í·|~¹«Ï%ˆ“|ȬFZ¨ì?ª˜„°¹é–~£v\—òad¤9?6n*¥ÙÏ4v´þ§Ãÿ¤½v³®Ï×Î|üÑ ïS¦ÕŸ|rñÒ§"˜˜õ²‹Ÿðñ ÛEv}ý(_p€÷@jð?‚“脪…°Í‘Ç1×\3>ÂF¶3ø'üðƒ±ž9Üôæ<Õ9în ¯“,ƒ´—7¾ãm`+óBFÏQ —ru˜+üËM˔Ƚ:Íy•cXš¬PR 0¿Œðón¹$·§C9iÈ +¨1¥áÈš +À̹ó8ëg‚°åþiTŒ) ºb«Á}ŸP~Ù ‘™ƒj€ÜÇÐÏŸÅücdÀ‚Qi„$FØ&Š*Æ»È-b¹Ä¥Và3w¢@ ÆùCwk:·ÚëvÚÐ],>ºSáÜløàÿ¾(”³ #r}ßt¦Î͸'-õ¿øÂ÷KOz&\º%´×¬°ÃxÌÎÍ›y:±ð?îÚ·­§Ðqf7œ&:æç®M9Z«snx°* +Ó® Ú (ÔGÀwu>| -‘ ==‡ +°hw$vÁ°~“ÔÀf-|÷[$ õè„‚ìììY€ËpÂ@q×î)AgÒEã®yJ‡€Ç«sí¾nQ÷Ü_Y×kö]ÛÜ_³ÝXyã™Ñ7~un àÀðW’ qLPÊ× ¶à´RÙ»} àé°°L[HÑ3qÊÊbšß€Ô@¹9JÈe~;|:´ØÊûŠ!³ð\8®ë˜à@² ><ˆïĵàÇÕÖÜñ}÷àú¨Œ$*Pù€3¡¬l(‡Î×Wì-}l(ž/’@eúV +€"̇ø÷OcÂÿ?þˆmû£ ì?ÅÊðp¨þF:äãÁiûß¾¿ ôw+j~Ëúo¬˜;ZHìgÞæ™zTMGV5­¹¤+–°Ÿ3@ªaգÌwsJ“¥@*w‰Sl#Š:%V–+2zÕ€ÖÔæ[Ò| 2m«ñÿ{ò‹]ŸàÇïß- +€³“`r/Ê™0ÍDÚRkiåv´ÇاèWƒ·Â·þ)´é8¨Vˆ“Ž ÿõeˆ“ (ÂþÙ·©8ò8 + +®aÆ5¦k>¸=@„†ŠÀ`i„4Ô,Ò?m,i¬mlæi®iê»Ù·57¿ª9!V·ÕªW„‰¨lã*„FúHG96ð\e}M˜zkÝ +ðqkkº2mú:naÏ®*mk ¿¸OLh«74dï å®»u±¾ïZÛçÚ«Ôsüÿ˜û—9Ž,Ý¥A”H4yîÑ‘îä‚™Dß +2ò´Ù6ir¨Qƒ‚j‘Œ™|³XRǦž„B* +Ôûuö¬¡î¬PƒBÝA£ggpþ§îï÷-óxäƒL=öî½"ÂÃÃÃÝÜÜÜ|}ßZ¶Ìl<œ¥¼€QMíéÈ&Öö¥Ùµ ü‚ ³gŽ­Qzm­à,ý¾Îx]pÜkã4’Ý­Ë[W¶®lÛ&ByHZ)E._qŽdO˜¡’½\HGVô² v-k¯ƒ<9qÎ8¡=3#!¯˜ÿìVw›òó±8ùÊ£Åã!ð×Z<r€üæ©ù€gá<@K²žî’@?=Xœº€ ½æúó@.ECLp•N”:&€Š8s6À¥ ƒt’Õ,>¾ˆ nÍå¯Õs—Z³öTú`.%Ìàûw…RÛ¨§¥Êß{Õ™æ‘ܯÈròcið+;¸´´áÏ•ìa€ $íÿH¡A“ç.›€$,àÌâÿ[+i;æBÛêͽƒŒýøËî'Юð.Ý(…þBJáw¡ËÆ¢ûc¹d‘­…E›lDP i»ÅÓÄ{é7”¥ÂPGÚQµ<–­¸YÍ¢UÐ.êÚ¦  md 2ùpàÖNLÒ,!®6œñtA€]@åÅ 7Å$jñœ”½½ƒ£š•aïæÕËW%Ü‘ÁÿÚ®|Gªx[y§ïÆA„¯ŽXQ•åqŠ>]¾®Ö@€MѤ–(ýîã[@¸”J€?²ùû9Š b+ØÆ7°¸×ADz©»ò£¿mÔ=€**ÅÞ ¼omŒ`v0oë†N€à¾H—ˆ¸$Œ€Ì&-ºß2“œmrg1™ˆíˆ¤Ão7ŒFÓá¶—KÑü–‘x8Èš o®Ì·›ÙÉ”IÃ}zŽió½ßßémo;@?_ýABô#(ZïI¥€8°Ñ†äVêøÊ£x.úýŸM¦w(¤:µ‰äêŠ Ø@lßÐBie¤P@Ò§ú—=ˆûõ +áNØÖ].¹ÞÝÞé‘m½(æÚlå\ânãê^G¿o¾êÑjX¯Äø/'@¶û8žáXŸ °‰º<›õgxžMKQw$««tôœœ àìÙÅð|L*É5ie~R^äÌ÷•z>¯Þ|ç×»t x»¹³ssÜã«ÉrekËÏÕâ·VÒ~,÷Y5®ÉÎÍ-ëÁeNfŸ¢f,ÅÜ~œB=§@Œ.Mðg%_náßÚï¼q\¤2Ô®&]w¯¤jÇ)€ã¨ïš`¯ft±ý·ô|òÉGíF¾o €ßEþåÛ…¿!Z€0€s=—»ªPæëñ<›{€ùîsí¥—NPw“&d¼@ÄÑ‚Eÿ \ânë>¿*0€Ì„ù/8Úo(@‚«hS¸§¥6ŸóçÉ?Dº•û\ˆ€íÇð¿ùvø>v®}ŸÊý£á~ooè0U?SÖ¾ó‰¸u°î(±.®\m[}U®JâäwânÉÐ +þQJ¤Ä•ôØù‹vŒO$Û•l;0×l‚%­ˆÖeo§·÷þ](ÀþZÀ5^žòÄÄ4ä^Þ ¶\z‚ÿPÒõöç˜ÕíCbéW˜€Ⱪ%%<©=ª ¾Tõ˜ QÀùýV°°”æ(äìNÒØÑo°Ý;$I ç$×xBF¾ŒœÃÇùqrT"Pv÷öÊ úkÿ+Wo`×t8"? €ã%ÉmÚþû€üd‚Á p¢{gÄ™Äò-Ô›Á‡·Ù/ðS.šÈ^‰´%¦sËuv»P§ÐˆÏ´þîÛIßK„˜Ä`ü»!)\PÊP× û,r¦âò[BQ¥X͵ñx£[$d™xxB3 €pé7ÂR *ºVLv¼º=¬óyÂ:gríLFYr¸Hýo.uØë¡S#)Ä"LŽ•üÉW5‰`<}6@7¶'ˆOÖØéGÎдqmU’î9€õ¹€õ@÷mÎó8' “i_µLþ[¡/…jÊã¶µsppä¸ +Zï€ó¯½vpÿ`Æ¿sð辊 dï€óG€¼¬¾V ^b¢²Ó{M² øßÞ^Ï¿O‹Îó­«ã~p˜,`íe¦KÆE£˜KsyráwàÏ×Ç‹0eïcíš´•ÆjÃY1eï´‹£Κ õ·ò|ò°Î¾w @Ãr~ Õ‹,¿Ø[µêºØÏ§™¤RQ\T>UXy}pé… ½.½¤‡y);Kêÿ—cûg¶g~óÍ·ßyû²ÿ—€5qÍ%~»ñé<ŽE' Ä ²m¿ÖVò®•å¶Í×ú> ´÷[ø¯˯§Š·“=!Á© rpÔþ.ñOUmOw¾–th¯²éH%f-™Ì[qkRT¨ÉæFøâ¼™zžH qëWìפ€œ­òa2Í¡PR…¼!{;{û÷V€64hÅÛ¡òJʹ»ÆH­4°<’Tþ”ÀY!­ `¹kj RõxM@ÔþH}ƒçõXG†’¥ ²G5oGÃm]ÁL€ä¥É 2‰³ƒÑPšÍXÉ.žPò½Ö°Âÿ4hÿï8 .öðdAC ãIF,åì9Ó}²…¶ýÑâ¶œà–·ÍˆûÕ±ëɵ+ä…¹&Q/¸4ó¬ðH -SXLP<Ùæ¼^u®yÖßJJšóõ8Ëçñ!)UÚ@ÒœÍ\ߺeAHÊsßòpƒøÑßýY#q€œÑpåÆÊCù=¡¼Æ”'LØÔŸ´É†i¯åzÚÛ²ìÊú_3ÿ‘€Áæ«i{á>˜èǾôAÉŸ3<Ýl€ 96墀ŽÔ“»ô|¬.F=ÿ€¹Â8|Ã`ö}ÆÅÅ|ó‡9PÈ~+õ&Aÿ-ìû¾L`G@>¸ÿé#,Ó«;{Ÿ=y¤rÎàì÷ïÝ3"˜¥+ˆÝ„£(ê±·ÛP¤mmù ø(íëèøÑýý=NÝãdX“Êò3<^ …— ¢¹–»¤,Øú7{Õ®&½.¹kl>å¨ÌOõ€ +t1¹jcÐ¥K@ÒŒ|ÿÌù%Ú³æú)ûÞCÏôt&cJÔ5+ª•®QJí¹kO{aæ_é… öóíz ú?C‚þŠó ý|°ÿß‚tÒñš,#/^³ äú³Àö¯:uÿÕ.•Å i«6)Oùë,yà>§D¼÷kµá¡ì¹òñãÏa‡!Cª<ŸÞ©@¿-ó|\fµUЧ»²!›Í“™ \kÿÇï„?«vu +ÇC?Ññ1|õÉãÆ”ÀärT®Uq­¤•Ѻè8’ÏJ^¼Üb^„¯ Ómh Å绞r£8ôݬ{ÂkK<·iÝ@*Íÿ¿$¡vÎÙJ|6VD`ƒÊjd¦ +%.î(xØAtK@¥‘h¤_íÛc¯ŽÇàÑ8Øí™gü]¨El]½‘dwK×xÏɃΕz(§YßÞÒ60˜ÄÙ?ýv1±×Ÿ¹ßõ7+ä/Ë—oÞé¼ ­LÒ˜áÂ$¿³€LÃ7Ù·ør°È ”nVMÀ +‘ðªÙËpEI“¼I ¶$úèÖh:í~Föí—WjÃÿLb“ïò£'@(‡Ó1ð#; +Æ%²o¶C´Â[(]=ÎÃHµ\K,<¹ÈDù6Í;@qôq¶·„ÏñÐyΜ 0*Â4LÆ4“X–^À'› €G§Ð?xô €Çpg‡øîñ“G7·vö}ûDMx|üé§Ñ‰›¢ið0Là¹ÍMΠöªEW%VRΈ(ÀÚ8àþÉ^è¾ €5 ‰vÎ|Âe˜ÿÜÏÕ{a2_\˜dΛÄ.Q»Iª%D•pXW«Ä^ÿ>¦Hî~¤3ù«‚X¹êg‚ÒBZ5x–¼`(€<àüvÑUÑu@]ÈM³¹²5ROŸ[; þ§‚aþ—õÏ·>gÿ•èØé|X ™@K4>±’VFëàqª `åÐü­óDˆâ‚?ÍŽéx—eçè@Öƒî§=šþ2e'€Ú=µDi¤¶šÄx­ÀI +ð÷a®‹%^€‚‡u +'€(‚T +iú†[Ú¢À# íjö‚;B’;Ò^?ÃàÌÙ·¿èsœçê÷v×=å¸qC@1€j°C€‰'óf´@ÖÙ&Nɸ#¾™S;冎÷L;¯Ÿ@·²).®r Jo‘\Œ‡\Á‡£ñ„K˜±³±CçˆúÎéÀ io2iÙ·rÅ'«ìs'øñÌõö¤ˆQƒN&D®)ŸéKÎCãû‡Ü8 yq0ÄAúE®7\¾¼½}…= TÍå`&œ[PºÁ¹gý§^hp?•`¸6 h²e°¥ËÀ\þ›¯’è÷W×€úŒ^ôëbV1Ûp¶à+ôí©¤˜ÊCø €à¼€î•͈«-««tâ@ìÍpöl€Í`â¡[+§fÃ+ú¸•¼’Id$(âOíóÄ^Þ‚z|ïæÎþýßû š!JñSÀpCî þ2¯¬ãqÀÒ%þè>»Þuÿ_ß#ßÇ0Rƒlßì°“¡½ö¼’d¹nÓWßr:à]ð¿ìPèÏÒAXý˜üÛv¾×f¡wpÈ(XxCM¥hâ§–5&²âgÑ~S„­<[ž¯¶€ó¤øûúØý@ÿ›ü€?ò¼ûn¦@Ú®ë’ À5ñbÒ @ØÑÀ¢¡¸“õåJ6Ö–¶ìþ\½Öþà®øÜ´ +¼”~ky-¬îmý)BÕé<ˆ¹7„¤vFªŠº´:¯>˺9€ŸÏ¹Áù×Û»”dgÍü?Ñ` þ— %À¿¾z¢ÀI öz•‹Ü„ÊÅâÜ;â)¦ì*0˜üâ_ƒÚ@u"÷…ÿ. Kñà—êr°Ét§­$Ø/]0iûnL”׋ ˆÂ /ÚùøŒþ´Èê)pž@)´Ó©,ü8¡í~—B6@1—‡6¡°UgÓÑx˜)k¾-ëŒ5%°àÖ<—¯8þ6 ÌþôrëI@<Î3šãþø0`2¹ Oú“ÌrËY'£ÛnAø+œ`W0Ìh=gCüÌÐÄ‚´IM7( :"äZgzßá~È÷d:ü’«õZíaš±èo[¶ºs-¦Ê¹Ð9á?dY—‡Ã qÒñtàðC33sGÚ²ëP‚ìÉ9½2²Án~ˮ؀Wu”YNÓ•íÞ¶“[|ìêIô88V²å®ßb×x‹PÎímâïÑ £"“yh ›¤'nîX%¿ùê´½Àß­ ùy׆˜gœòœ˜ À¥jµSñG͵̫6F*a\¥ƒ +(ÀÚ\g͈ÈÌŸÊ&ÙÌ +B^>Ù>þØñYäñÝÙÙÛ¿ÿø7{7·®¾(8ºÿ8à@¢->JDîæ‘_ú÷âÈP! ë«“æ¸÷ðˆЯ6 Ò;ØÛÞÁ¸{ŒêGÙtøßìÿ*䜀XÍ`~JÐEð?;ý'=R% yÒ໊¸}Õj·X.»¯µO[ãíøHUß é? ê¦k~××Ù"8(ü?0p¿Ú·.yó úuË?Ys¸ø(·¸¹Ü1â¿ËdäD€V#>Z³þI2QŸû‡,ùxL5G-k’r¡œNÈš൛@r# þøg*@–ë¾ Üì`¾ô„ð®é€›lØX€éºOö]zTUÕ ô祿&KÉ8¯?@0bƒ4'€¶°žkÑ ¨÷¶ã!PJr½>„@¬÷çÕ|<õ†Ž[üOÇÃ/£C Üö%P»^¹ÜÝà…í[M°“c ˜Y„ÁEµÊ¦zß-Ã…ÙýÃbtGg[wƒÿíÌ—H©w\<ïo‘טïˆV´PÚs`Ã`x¯7¤g~Æã…˜*\¥Il>Ü&±Œ(Èþ‘Ô)¿ìB "[@Cö°@L?…MÑ vGNÀ1·Š ú·n÷?ëï‚ÿ»Wä>éÿІÈmµý_2´ÕçF)Zþ”Ê~ÿp"ߌⷠœin‰OÅz³;˜—Ùp{šƒÿni2«hO¼VÚ¾@óˆÙµÁÇð´@PP^«;åMšªžÂÂÄøÕIt¿É®R24üæPÊÐITP'EVN ÀVyî>^÷Ø¿ÿmçøôñ§m&Ò&¿â€àϵ5øW ´5=î†Ü‡½k}ÅðÀã㸹 õ¸«êWÙþï‘ÏvO‹ø˜‚ãã+טUÞ’’óÆÈ.¾³«I¯KÕƒSõ“Z«<{N`±€Üãúψ¨&€\Nòà%v>¡‡¹Þ9Þ~i¹wwSág*[’*a XXz ç{Š]˜nñ‹Ž°ÖêÁ–ë¯8CðëÿïÿÆþ¿ûÞ;€ÿ{¿øÅ{¿øy^¿X‡þ’ p](ђĤ*Á‚,naL{·k[–ï“ßËw`N±žªw#|þü´®#?1ÀÞ&ô8÷vC¸sy­ÓÞç¬tUôT#÷¸¹üá–d¡å«y6eÿÿÙ߯O.þ +H,å”@©%‚y‚ t¾¬¿œê@€x^€ºo7wbª_ÛÚ·3ŠoŠWôç½ÏþG«&¤< +KñßÖþåk9€)™n‡ÿ«&*Žöÿ%’ +þŸ Øq¡óü¼þAÏu ²9ôLpm<îm¯}NÊ ý×îSÓ `¸(ôOÙÝþž¨€Ò…$PôOwµt¯ëmíjçúy{J–ã™sñÜÈ'™æ_`Ú:?L~Ë/¯j:ÙŽÀŸz&`ó(.Š€uoË -â\¹"Ó•ëAo˜)þ@pg‚ûpò±£ûòïh6‚ÕÀp §‹H±H x;¾?…c¶$ q•ÕáŒcɦM £; ‰æênÉäcWÀî Ìÿê-)ü¯‚.ß°D¶ú‡Ž-˜{•6K“ìÉòpJ®C[ȯÿ{Zr0/¦5ø@OBþäe6*œá(ªŽ¿¿­å*ÕÐ<çyÜè3‰ø+ó€}+€O 9˜­ëšÃEý&-i\¥ƒ¨&€¹rT4»osîã@Óõ$Ä')šÿF>‘ "ë€O=ÃP~C¿É݇ øŸ•!j`ÃÐ<Ñ +*^ÀñÝ_ÝW¿¢^Ò°ò`KÇþ¯(pýƒÿäΰ‡»pÑv¸öËBP²ÃS¥ +Âûè¢Î±.µAꤠZ<Óp^/Ôß1í6fËðÜV‰"G +*­•žËñò¼µmvˆV%’³UJÜŠ0,déXÓÑÈ'aS ì‡+Zíº?ë1üñâH€6ücøƒþo½Ý¼þ?ÿ»÷ßûÅ{W¯¶ëšÔ8kÒÚÓË öw  · æ‚ï“¿©€Kiux]¨’ý·mÍ•³åÉÇ€ äôCðrøð¬sóXpøÊ½é*éf ß«(€¶#*T¿}¹fR¤6|FMýä£ÐÍú÷›wjÊã‡GP Ç6"Q’òÀFùpûó:ØÛ†ŒQ›â¸üâÍÂdÇH‡_(1 ðöîXÂ"–m€@¹Ì¯óˆÿÇìK«óŽÝúvÄ!'CTUúþíòâÚz@'… Á~ÿïãhøÏ ý•b§(ÐÈh¸»5ÀÌõøxò×@7a&V©÷Ùà@öú ìÙ_sx½ŠèÅkx±ãß¶ni€ ®¢®z ØÑ"³ñi\ß¾³0¤þΜ,9ÕÍ)ÿé»ðÒ\5KúÄe)~ÊÛFù¥ï~—k²–/æÚÉû2vîÜyŽ8¶tÛ¹f£ÅpW(å‘"R ›„z=ৃïI‘È>Db8šßž™kNHöYÃgƒa  +0ؽ’ñ€,¡FGn<é²Ã$;QÐáaîoN$á°¿"Å ?‘lM3!Ôd>w·Oo/È1Ú&^­¹é„›rx¾ z8"æUt 6–j>áð):Ñ rÉ…=eﱞWUß<êå $ +ú”¶G÷^] À³<Y&­.«@½>ù¤8µÏZ‹8Çð1B}Øy à+ùU‹8z¸„DÐÉZ À½òÜ5ã錴õ¶+A[ÿvµ¹4ÏÉrpÒ ê'}AÖüª_²€ºuO íäé@q ¥U„ÿW€hºÓ½´ÿ])¼qqN µÃú‘<@ +é´Àkùp}vˆT‹£KªªÄãcýÎ6 +uð?M•ޝ”¥Óé¹Í +cÒÖsø£åÚuCÿÛÿ9À{ï½û‹Ÿ¿ÿ >ï½_ò‹¶oãþÊé&€²ÿOx´?[ÑÖÚ~[DKI%>!á©ï¾ƒýÖT¾Î’'×ñT ÀþÑÃe'€u©êÌÇûì2/²À‚·ŒH%A<{òƒ4àN(‰ýÚÒ`õXñŸozœ¶PpTM~øh ü;ëßµÇÎÆ¸ñÚïÅhÀ»<<ÿˆ¼øê¥ëÝJ)Ûຠ‚ãÆ|yp~¤ œ_â? ¿ÕF” +TªµkÎÖ$F£J+5H;ñ¤þ¤PY÷üÉñëM%VÌ l óó#П(¼TûM1 €ƒg1Þß>8ÖônÕó„¸ÁûêšëU×@œÞeÍølA%K5pp{½ €ö?õóŸ¼äó¤-E9@yövlËÿ0C¿ëγ´þù<¤b¯ÿyÙQsà¾a6Àº æûÕ-)Zñ4«v›½›¶èº— ûÁÿЧ-éh@-ã ÐuàØ"ª)ˆü~ù¾K|Cì rDÉ䀔õb½†ÿHÀ’€±™Ð^ƒS4õìÈéøÆ,Öüï@WÛ¾uè˜M |èYõìsžÞÊ`@\ÞÍÞÿC €MŽ2Ë¿?8©Àòt1Ÿ,îèáŸç‹;w€~N§kläø% +_¼ã‘Ðçp&[5ôøßÿ‘Ù`H®ÝKgº‘36P'¹Ð«a/ðKmé›=pÈŸ°°:†+Àz|f±=þ7›,Èòd6õ¸“f€ÌF”žŒâBá’íÿËà]¥˜®p£¶oH‚$ R ÝÙ’%ÅáDæš<“ëé”.8é`¥Vð+ +<·’Óã ·ùú×Ëm~'Ÿ?~†?Òižêjð¦¸Á[㢞FeÓ@­óÖÆ†W|2 +ÿã¦÷ñtc‰ÁJšÊÚy’Û?þSSl@öœ 0I62Qæ¿Ö¿'È–Èß½`ûwï{+ök ïžüK‹3x°wÉg 7ë5÷:é@ +ÿYÖÊJ²‰tOzRm‚ýõW„‡ ‘hn.e¬Iº ¸¢! µ+IK¹@cz8ïn‡‡ †é¡Ö®X b/ôŒ#»½á"1Óùl*÷Òƒmºj¨ÀW¶2 +ž#îo÷v¹Þî`wk×CHô÷tãÁ!I ¥‚œA€ ÿíÛB¾P<™Ü¹½ðìÃét``|:8@B^&Ö5¥-:.Â+€N°t:ëÛ¾!ÎFÛ»ÃÅ +0š}9Ÿ±IX¥ó)€:Zô{öl äX>Ä¥ÊF†¶rÌÎ4L‡óì`OBÊi¾¸Íßzã{·$,Å«?ØåfHÀwc#— ý:ü¿te‹"ÙÝêí§œáQ>—’&NïÅpQs™ÖÀ°?Û9ùx:ý‡9—Å©‡½ñÔ\“…±}:;ø?ËP*tS€–g{Θ ÐÉGÏç§´Ðÿ‡Å¬žè&Ñk)™ þä\r€§ŒX)û6§‘Àï:ÿqäcࣴ ©$™†÷áŸþd©•mÔ»=·› \;¯íÅ &ˆ@5«"[f„Óú³ˆ´Í‘.Çä/·GŽ–üFª@ ñs‘A~âŸòÃíO ¿òΠ@ªrÄJ‡«'ñF.êÉoµ”ÞöNœ4Ø<˜ê…þöþõäÉÐyìm>`?Ôö—íBØð)k?r’ ¤K`# ©%Q‰ÿü.7ðI +G‚ö|FËA:p‚$ª8ÌÄZpNh:­|ØßQý`8ÏÀÃìÙÏgóé üŸ± i;Ä`«²K6 v·àÖ•À^58ívŸµÃ&ö@[ºŸfw Cz>µKýÔÖ€¹Cÿð LïL~{‡]µûòe»ût®·­éK@¾É•ƒâèN‡ò»†#‘ÒKz£Ù^Ìæó9&¿ÇÕð{¡å?öF‡˜ÞéW+¥0ÑÁxhŸ„^Ü1üNÄ|óÉœÿ§ãÃ4ÌmÈ][ BºÝ¶3Pð{ûFЦ41NBÄŽˆ1ä~Ø7fÑ8ƒY_k}.ù8œrÖäe4D142… jøÿ@¼þYûËfÏͳÄ>öõ e׳c:ˆÊN?r.€âÈ2æ;b‚«tŒ4`î­xz6À¨ Óàm•Qæ“,=Ÿ«„cUAÔL ©Ž]2€Hý8éƒ‹ê¯ØÏõ*ÒãH±R ÃH^K¡µ|6©õîvÙIþ½‹µûäúêâõø+;"ïmãi}HV|'sl,æíùÿ„ú•ÿ>%)›>ÿ8cXS*PPS¬< -xT ÀÕǧ€€ò®{tíwb/>Ã÷S¾9$¥qT#A +ÿ×<6œô4ìg6Q€øRKR÷ÿµ,ˆ/¬Y“U;@}ú£þ¼W 1Pk2Á°=ÒrmܶôÛ™è¶õ~÷±ÙË]‡€’ÝéJ \œcïe r¥B½¬Â,<ð‘Ìr(ß Ùâÿœ`Aß¹ÄõÁØÅâ6· €]à§:é9õtØ×ÀfØc÷-sÆQÛFó‹è*ΦÆ6ÿ–•~ ã¸úÑÐîâ4†µG_Bl ápC!ràßTÓrrTÛ€!žØž„ÓÅï»Ú2íæÓù;&rOôý»›åÝü;@µäÆ^¹á=¹±‡r~â4@AÆcXWÊš€\“ã4>ð¿2^üÆü/»Üo•9þwwx[ ¿ñ*ª°?‹Âkôò3<Ýl€ 9ò-Ÿí‹zÔ?g{>° @éü&-««tä<…Èj.€³g4û]æ²â«É àwÿ<´Lá? )“?¢}‚@ótAK€ `çµ}þXzަ ³Ì§ ôwø_çjb®ó»Æ°ð[~#ÞÿÂcübiA|쯺uÈyãäFf¿”È É]có J.þÎê°wþ\gÆØð•ýr©]À @Máõ¬*—矬gôØð¤HLªR®•lI½c§ïð ¿Æ\ù®¿aüÿ»1ý߃¼ûîÏñþ7ÿôÍwß|÷Åïñ˼ՋH-#çÇ=úìø.v§£ÿ[Ñþ(IqŸAšõ»&b!ÅëJZż]¾[ío‚¡Þzè8Úï<@äÎEòàu?Ö¤{ ­‰ÈZ@ÖA]©\t1€¾ºçEüÿÌGáã8ûå y}ü9??‡tòɇlÊ/¦OÃäÿ Ërœ$ûoÑÝuÀ‹ë`Ëx=€ÿ™ G–p×ü— !ÿW×%Éþ_¼*اÂÔ ¼íh·B=š™ÂÚ)þJÜC'€Né%è¢1,éùóxfèº&3H&°}=P_`jÃ3˜è*Í~5ÕDb÷èš vÓÐë™ë0@i¸a#€é‡|íní +Ïý±óÀÞr1v¸„¬€®‹;‹ÉP#0¸5Ma5ñ=Àx€AñdŸ\ÙˆóÒ­æ~Áôã^à‹³bE “FÏceƒ»: d^‡Û 'ɱcyâEcÎv‚Ð?L|Á ¦0Š)& f_ÿÖ Ï&‹ñ´k:½÷²Öûv{ØÞºÒ+ +´½{cûÆÕU À•-òÔËH€–ÄHŽ5´["¬ˆŒJIôx­”>¼bÀ®Ž^4ÌÆäz—*×üü·Û»»»íññú˜ºßzs)ZóAјSáÊ¥iU²M|dUÏkhªðà~òq ê5µN2w^gh'm„¨¨Õº'¶_M\Æ©—DßG…ŸÒÂϯ٠쥥ÌUýƒ–‚AU"^ÿ:Üqu¹ÄžyøSP?ðöTF­÷ÑŽ´ÞÚ÷¡÷òÔ ÿ{ºÿ°uÓYÄ)þi$À‹¯l”x;|Ÿ/S#æ5˜Ã²ÅßÙE©â²³²þJQ¤ôLÅ >KZ[iÒôªïÙJ)fïE wpgÖz­tÖRBu"Æ> )åž-¹ó­”ØdJI°jÄúx/5‚šçµAàR²ÈË ]Þ:.³9Œ–V’"Kæ‘J€ûçñ‘/me¹Tó~/yáù矿î´ÏËš\ÿaû¿ýŽÐŸ¡|¿ÿÍß|÷O€ú"€¸c=öœï8úôÓã»úÿƒ%w«h¬Pà‘Ó€û ]~¿ùbIKRàK + à†r“j*€£oÓÚ­[­—ägnn«.€|ñP>þÔŒõ“9˱ˆæ¿ðþ ÿ5ý?~âR èî€5 +P ³Ð÷Ax „±¯ûö¶ArÁûÍ–Ž9ª:z#cQP ,öä'‡X¹˜º[W¶t{om{zýÑöH{Ø´sIs¬Ó&0û×¼c1›p†þè¶õœppg$¦Žô½˜Ã5Á[îL&ó~å:ž~r=îmýªr8ìï³7›½JæÉµÙ&©©‘ R»ÿM†€)'R,º CÒ‡qØL0š,z .Š-ƒ½p™-Æ‹ýíðFóÙôph €€Òèßܲ ¹1ÖÛÝÝ2 N€Ýò\iŠàŠ-ìqÁmº;2² cn,Å™éÈ5y–qØ$póábh+̨gÆ\ó_¯z{sÐëÌݼ °oŽW$ +Èwª¬N@.ì†õ|ùLªV#QÏ‹ïÙæ¦'žšá@Ï.X±Ø±åÊNŠ S†×¦?ò\ëdÅ3³¡jS¤¥Xo#Á’Cžè•ÒG–xÒ®*Ò6¡ÞZbœýÀÕñ') €µ³³>í?ëW¯\ÝçQß1ÎÄÁD¤ àµEÁ DÑ +üŒ–Ýä!£)U Ii9ãjŽöMPó¥qqö#±_„kÀ¿$gÉ•æ}Ö+ø­J<î[u@Ëu Çšày‘mm ƒ½4{FG!içØÙ)Æ#Ø G÷îÛ{;Óý?|Ôß³'v°‚‚BlØ J,kĉ*Ñ­R#¼'gÞ¡î.u5ÃϨ©EVY„\_®ðÊF$Sᥳøþ×ý±ô¼iÛÿ{¶þïýü½÷±ùYÀßÖ›:yJ/€GŸÚðÌd(ÀŸ@Ú]FNSáð„tøŸ·OO~¯{j=kÌÑ  ïL±¢ò:ØÕÃ&U1ùäÆ#kQÁq]UdÉJÝ:WJøÏ#ž8àŸfŽKs€€5ùê“ãX5å(ƒ†ƒIóïfý7±ZQu£¿w §/ÝË)}‰!ûe½[>=š )iŽÝð¢#Wž~§ð+ 4&pµë`ªPÕ‰ùO:¾Bš€·@Ñ`¿IÚö%“ +01zlÉŠ€¡ó;wæSLþ$3”ˆÈƒííÙ¯þþ°?ía_ΰ¥Þ©6õáèWÀãüË–*H:Ư³MYïW®˜Ç­«7®Šþ¸[ý·†CÖ°xG‡|zœ´µ©[?Äm22ŸsÊÉ‚ìöõxËP°ôçPZ3þÀ—@ì;€âDˆÆÖBgã!¹¶~Üß?Ô0˜ Ì5¨0ƒÌúÑ'`¶dp§-+›ÍÛã1àEØ^kïOgÛó9E½ÍóápÚŸ“ 9Ö 1·®~D1¦áÞqKø¿uìön¨HÀ­+WÁÿbB¿¸Øëö”&åy8œM$0bзW„ v»%v0qˆþ!׳ÙbÎ"®à¿£x“SÝ×$ÏÙ†Ï7]ôil@jèvËÿ버Q¥AÌf’%lúª)6ÑÔ<²®çפ†Pîƒþ˜X +>Ò@>Z m*q·˜|à5ß*õ™e÷b+Š_ùqÄÁú¹I6Jl€TÔ>G[[7E~$Ï$ ÉìÁª +( þßÜ;È„ÁP­zûQÇÊZBI–RÛ`\dý†ò ½Ab–ð©»F ×$½É‚é‰ÿ!gÉ«¥»ºêÓ i7¨„»Cù?j´èÌ3ªY×ryó¯¥@ñÚ)‹!r, RD—Œ¥ÆÝw¦vkA¾J¬V1ÎY•b³j¤ª­qò/kDþ‹Cxë…äŽCK«Ÿõ­™§ðâ‚Í/ ¸þüõç/]k€çØöê›XþïýÜæÿwß{ÿï¾0øï›/þðÍ7ÿÄçM²·º¼=ü|;àz )]Ú?zôXdzÈï=øi$w´ÉY`‰„K)P¸Ÿ§‡.]ÌaO·74²ÄتԮÔצ$µèd# +@¡nøeäÁF¶ØÇ…£ÙÿÓT:4Ö¿‘zVË,@šÿœ;iØ<uŠ”B+ªN–1ÎØÀ +ÿ]Ã,³·ì3ÐàòoQïíý5¶ü2 yÊ ™Àüâ‘ê(@yv¬³)Aþæþ‡J°XyxƒgP€`íПŒcQŸ¢À—ÍíàËX9Ä‚c³ò7çø°ï uÓŽ9Ëó1û€3€/çÿ~>ëÏæÂdKš _»ý-»pkWÄãã %ÁÃ60¾Œ ò—h€¡yvaœÝb:°…azÇi€&‹Ù„ì¿ÛŸ&³Û•ëé‚-äˆ×–‡;ôæ3v‡ãØ€ÅÌîÇUõ§‹/‹Yà^`ë{Ð!*²rú18l%Æ×'sCûœÚ¼²Áúx» r +¶F»Pê,™èÿ£Ê7¶ú^s¿Í`ëH)+[}~{|i è𠹿rl¹°¼ûÓ/[®gsÃýƶØ`†ùpªãö ×eýW[ÛÏ’zÞêÙáYòk¾¹´5çOŸÆZé64©u0m»61ŽÂ¶¨]ø +'àÅß b2éG)~R§¢̃™X»Ä㣽8(\ŠRþ2m#ZÉ­ÆñÞÁ‘~udöò:ÌÇ)uùøããS¯‹ºM‹}Ôã«°m¹ÖrsPˆÿÙ’k-&°”³OÛ$w¼V»›V1Æ:¼¦VÚª9LvnþõkÝp@Š…0€Z±à +°ÙsÜÒ†e=8zØêRõá¼*Áåyû>¢½9¾›äî€ –BÝ­eH€>¶{xJÖ·r¬áäáÒó,¯]¿þ‹øš à•· ?×ÿÿ^7ðŸ¦ÿwß}ó‡ïþ¨û_Y‡þ’S€BKñø7: +úÃÃ~¼T]ZÊ) +=]ÃZİ„—õ'd`)ÜÑ™Ši¸š XG`„›•¶þÙƒÔdÉr0 žKV<—g'_>—õô(î“C|?ì8€ZÿöýûøóÖçÑ3ùÉ'€øûM£Ä‰…Úßá +­žXo +÷ xqÍÄD +ú—(lÍ{2š¤@„ΖàÖûd1]ˆÓ¡ÑwÃü«áÛÚU~6š2<ž{ô sIïÁxö+wü% `<üNÍû½ÙhÐ ¶t:K +p+Øg bX ‚uãÐ@J¨€²ÜÜš.&óél¼X8îÎ-øÀtÂÏùh:îõÈ,°gß=¬ÚHÑ×wa#?{Ù2q¨`€•è“k.TjrrEXñv˜HÇ@þÁp1Õné¥ï¥|,<OüíƒÃaÏvAUƒÌ¿w9ûYøým³Þë S28š cVùN èrÁ=;AX1€RÚvjŸÙá˜\›ºTeŸ¬:þÿˆ«é;wì†,.y Wøµñ f{´C²)?rí€íÏ,fÀš‘ :¨QWZ^±éTUqVô¢˜¥¾õO1uõÚqˆïJ#{pžÅ&®—Ô¿kR;·´lÚ­¬u+n4U7d—§Ê‰]>€Ì«àèyÄ·ol“Í™Úþ-'Éié ¥Ó['Ä«yüÈ–˜àꑃ£ûÇ÷Œ‰$Bm7]q`{xÀkèõè•5øo ž-¹h…Ò!oµ®¬¯»—¨Ï;—bÃMm G +•Ûœ’Ì,·²±¸A{¹‰acjÄšx,I·_޵}Ðe¯Å—©^ÒåéíéüþÆ,‹ûP—çE>Z½XÞ&-‘UÈwÊ… úuònŸ)ÙgCê1¼˜ñ ÿ»~íúµ^° Àþóê¿{÷ç¿ýÓøÿK;`ýñO€|×`]NͯÌçî£O ¾l.€ŸÆà­Üg7t€/—yäΞž‹x¤(!kZÅ{æ YÿlÊ’¬¹Ò´ùÛ yîÎM϶ԋìðÊ15°¬ÿxÚØÈô ´¡^ À‘¡©È‡³fM¯„—nÅã\ÊòÀ±“T÷l`À^ÆdiW ’ÒEdj¿æàé üw €>ËŒœ×j2w/Oc i4ðþ_ZkÒ÷}P„…&-€Ý<€…±ºÚü; +£ øPtõ#ßÀùþaüþchaÐÏFu½èF?Óþ¨‡¾½tÓõ‘HÀÌ· 0à*ë00Øß33¼†qOˆ¨üšÛPøô–ÓÞqÏ"þpe8à8ß},2GÙm¹vT![ÈÀ¯CßïÙb6œõKÑ›ì`€¶ûû¿o`àÔ®Þ¯X†’1‹{b¼fÍ*gO`¤œ#8Ô«AæÍ2›¸Š[ JTÈÙÖ Ýÿ­õéÿWâ!éõ‡`ÿ˜ˆ\{äªÂÇSÂN§ÿ?+ÓÑ|0'ËÓñÈ ïrMžI°èG­tmê}ŒD5¾æ¿ °Ü€$Ž:£ëçQu+ÏÉ~™º<?³»€ž¿+×5I.H¸€\·ÿ¯ ¢×c0žJaÄQÝ Àè«Ë |ßÍ…°kÒe0JÊé϶ÞÀ„Û‰lèéÿþS˜¤Uù £©† ¶ÞØÁ°¼>È㪓#WÈJ.C…v$È|oïx?aTä´gäŸe=¶Aƒ\IrÀšyÖyB®=Ïp\·‘Í’ɇ%äFĺÞð:— +˜ìÂãQ­j|‚ÉnYJ­×@ö„V´0ø‘Í.’j;$¯T´ Êò·»">Â<Ëuè’ƒØùhG_»ñ„Â/Opu¤¡‹l/1*üÇî2ž'œ5' 3ÉÓz¦ÃNÈ“Oö=½¨˜ö𚈺¶™ íà øëÎ î³·zÅÏJÈHµs’l¹RìLÂB™«ú¢û÷ʆÄY†ákÝVÍ} â`·=¨>iI¯{ÏË|üg5#ÐÜHwh -Í„p…wïÚ °l—j´ÔýmesÇ&ˆàÈÒiMŸ¤g·Wµb)\W²GNüÌ*ÁWfOâv{KüÚIuP#™;• +u¿2ãεçðb ÐMxéÒõ—.½)Ð+ð«o½ûþûï9øÿó]¾ùÎÏ/èøµokvj·€ûñ- ÿ? ȳ|RÎðt XRCñÆî—XSÖbÀÖ×È.ø¶.7ÈÍ­¬\UÏ]tŸMñÞvâo颇RÜÀ•£T«o€D’nwWðÿÉÇëÑÂÿ·éÕÃF“ì?xü¡vòFníÜ%Ü®\± VŸšøØâ³Ù&¶¹r>­oZH§ €SÞÍà×2øÚþ”`Mx˜H«^yÂÜ7  j‰²lhkÚ¬§å;Øàß”îÿDÄ®îüz·“ImqI2AÍë ¤QRÙrÇ},ÿ¾MÔù[CvG^ÃÁ?øâ4‚!µ†®˜¼ÚÍ·$ âyü ü“«ƒÔĜӖþé,M˜ß£[\…A‚-×ݵ&×â1Gšë6ÌN¯GVµùÒ3f +Ã/0ØUó“Wñ~¹$cç… »¦?@Ü `:’”¯È² iŒðŸIDÂDz}ýÛΉàDqä¦ê0QÛb½ïrâÊW—ëÝþáÏÀ½«\'gìǹ6g•ë¥õïÑ£u¼ˆ³ÏK½ƒ1Š`ÁW÷³ÉÊÍ1m=RXÑ~DL·$ÏþúçØcM2xătûÔêó‘Ëm"fK±X;ý}ÙâŽ>ú°ÙÐà ɕZët|ÕÉÖÄ ¦èH¢RÀWß~›Ž"ä½­5ùÖ9F?²7û÷úì3ñÿÑ#Ðý~8†nµM* +PT¯ý=ÍFìuiWŒ¤ˆªÄÔEÕ…LfÉhÞ÷ÖwØßRZ¬Žâºý]œ€²’ÅI“ëî+õ[Ïý x?zL‘'c¦ó$ +`%;7ÿÚ€Àb|‚ÿ÷œ?Å鎸©ŸØ>k5HÔEî2§ÊMÎ]!ςIJF¬ª„ûV®Ò3U‚¿õ”äê¨Už T åkÈÑг_ß# žÿÌ–i¨6€k¯¾ùîûï9ïßßý¼†6à›ïþðÍüÃÒPé¬ËútÀ‡OhrPã ÿý<ʳ¼Ôâüf¡ñŸE Ül…{ íóTÖ_Ö謔Ôý\ÿ¬K*à‰F?.½­•›˜ÿÕÀn~þíÿäqæü× õ¿ŠþãaýªÌÿ\byhÏ´Ì?,¶’´›:jkëðp°¿À}ÒØ»DæXb¸M€·q¿ÐŸ%FÁ½xØA€·ZôWÎ`FÔK_B“ìVÕ$¢ã7ðŸE á'æ-ßn8›t‚<(Pä!¡êöܽu{r‡ ÙWxÕDSʨÕpÖìÍê.Ög`Ë|¦#' +Ò†AWºiéðž`i™øPÄ\ÏKW`Î5t“a;öù-æõƒ[Æ38Fz€ v ÝÁh2ww·ÔHxLC>X­±Þ¤Ëµíò£Ù,W*P6ÀÕÄ̱þêï{A¤l±Û§lŸ@“~8%™É°JÒS¤ „#=ÂÛ»?c=¶ý¸.çáúy —=½0O€ñ…›¨¬˜/„ÈuŸ\syz.B[ÌQ8‹«Éµ·=Û!‘Sdi+F2aþ¥ì¬iÏÅÇÐ(€ó#èI]º"pOÎÜëB‹vaT\“’¡ƒò’'å´£iå:Ùôs]«ûîÚïs š4À|\0ôð“LZsŠèI¯ÍIÆ\(€¨ýÞe£žüù‰wÙÁ;6¡@Ö‰?—§KÁL/Ó\.–ïz¼?|#²3“ùƒ—nøÙàGEӊŬõ•د|öä#ä³ü²#Î`È{) °¯9àŽ†WžÒ(¡ê +_m¢ZoÇ׸îw™òÄ”QŠ›Oèðëÿöµ&ü•‹+ñR²²qkÛ ´ñ¿9 :@Ø/U¢ ßaɸxì8ÀÎv° ¬P¥“òÚN €áäµçö·Eïâ‹•!N²Í3 ÆÜ¾\‚ÂÞÚJ…xÍbªA•جfÝ‚BòÓcõ‹´"¸ˆ<ªÇðòÂ¥çt4'À |^j.À«oþfÿß}ñ ;:ôŸè›ïV  ¥´&5@×ÐáÿÁýGݽ»ÄþŸ‚XÏ“3(À:`Õ–•ú”|òñ#k@oxäT<²Ù;ÿ­3«cÕ3?.7ÄZ°tÀÅh{ì…o˜¢T-´YûŸZÄ¿à?Ö¿}þµýõ4Ñ÷ï‚}si>rñø;Åã‡{=Ú|ƬTž¤«\UÚí÷¦€/„ü! ö5c:/ÛÀl0 OÚ~9@ó,qá ZкãZ€mÿÁ’ragµ@ð±|»a“`<ó.ôIÖœîoö)æð­ÑŸÝþ–!€‡ÃpÍñ6¶‹ B’`¨ +1ãYy­PÑH¸ëÌÛ8ÿm°@¸úeú‘J(Å ¿Åy ¿ý¥C€« Ôn÷§ºû½„\£»DÌõ4¹®TZ¾ÙIj!L’?ÎدóqEl°˜È5?Eͼ±¨Yì’¹ì>fêB6IÌ$®‹‘$È©$2èïDô‡ñÎPžübŸím‹çg6ÔKy€M[—o8P‘Àb÷Θ?Þ6(Ñ$l¹ç0Ý.׿Øï¼¹V¯y{§w88ôÓ•Q¥|(§Òû˜ù•äqXŸU^KñY=ªè·â¸Þ™ÜdÛêºälžOœò¡æyæ÷=Ð щ`‡sÃbg7ñ¿=žu_Fþë OÂÂZæ+ÔIôƒ¼E4Àã#/ÖýªyìX¢­ßž¨i‡,ìöV€(×È^ ˆçÙ @þøE.dg§h/'¥Ìî=<Î$ÁA{ËÆâ©R*½i¶(“*"²W/f©.ä[ØœõYâÆlbãGûCûc6®ÛÿC›»¶¬uk:±T9Q<êA šî:Ñ pÅ2Ä=Åê›;XèZSüòž ’kìÄ üÇÿuU^©‹ª'b¸)ì—½VÛÝQØ7C%«RX%.&ÈÆþçûJ±€—®=­xýÕ7îü¿ïÿ +`äß7ßü!öüãÿ§½’Ò¦Àï6À¯%‚ìß?þͲ=Àh…Ÿ@‡çÊI +`é|KËâõSÌVþСªxþ©è¨£iµsÿ=IjÑ~mHªF¤m]ËÇq Æ~Ö?€þñü ÿ[Íÿ›ó?âpVZü<“´± vYHÚu±íº>\ƒži8ú‘MPH°€%üǰÀÖM¯¿óPÔ÷îÝ c؈(@Ebý˧7ƒÝ€d×uPèÏK>¡ùN€¢Hœ±U•L4?õGA¨iÿØ“=ªKY+7ð‡ð³Vø×H{Á!ˆÇ[tíw½ +@‹÷r"ÝwUƒÛÖÌ2ñÃa“Žó«‘KƦ:Ü:,Ì€b™†®‚\…ì vÏF»•kà“í0aÉ^beË5%²Ìµ ö¯0¨·kéHBÞ–âÈúcÔ¶‡MÁ×|€=¤%ä•‚3‹ÏÍ{êˆÈ5r»öíÀÖltÙNq€È Ñ ¿°ŸœúP—Áî4ã*óv‘%% ÍÈǺ ÌõÙäÏd¥Wš\»£ýŠWŒF¥iW²aŸ×3§øLlJ÷Œ + ‡|µ½³$Ÿ8SÑö¦ä “ 2¥O¯¶œ9©"Ë —±òÜšH)%ãýnö«d•¬NÚžcÐH- `îcù:x`Áyið­è°Äø„ĹˆNFAœPÌ]x¿a…)r»X¤X¦5Ç]àý‘Åêt’…ØI+$rø +Š h±ûr‘+Í]òéÛ•%%âÕöŒ™¬ÑÔR^+ÂFeˆ$?–9å’€xœÖ$IÍ3EÐŒ–HBš –‹å¹¶L×ÞI;Q‰Waþ—®]º@“W\À¥ëo¿—è¿æ¨Ð¬ÿ/¾ûßþð§?ÖËdN€JTJ‡ÿw)¿—v>€/)©§È&àVþ6yœö,W–-¶ÁëØ‹3jÛ@GòUb}övfyò¾¦jDüQ€âr ªðÅM]kÿÿøs-ÿ¥ $¾dþmØÞéÃõîï·Ì?ØÛ9¨UmÎÑ®šggs$޵9oå4û»õØ{ÿÚVIôç Lf»Ù ˆ}ér@=oN÷ þÚµjȃTß¾Û¾ë á'!ˆ ¤Õ»|gÃy ‰àï*e ¼ú·¾^ÜÒÏŸ÷ |C8B„dvˆ9Ÿº¨jŠ€ñ«¤;4øLH¢¨ Ý‚ÿ¼W.cø¶®´Á+J@`¨¦ÎiÉzÀÕ9x퇟3§"Û¹^äicÇQ @[n-æ Ž—"T¿AòvòþÈ\ ‡æ7@ɾþÖNÀÒØéé[°@±c£À>îëK·¯ HÏ Èÿ’€,ÅTûãY†ç7Ãü Õ«a ,£mKÎôÅg[ø-ƒjprDЍnå Ûl£‘°ÖÛÞ;Sbä,;Ü“üÏyg3sí¹½.-GW̪³4ð÷ wx(Q,ŽŒò“R +¿–ÝÓö‰¶w»½•MM¾|âüq¾4ËS¼«ü¬7pR;xL%R?»•“.í3ºðmH¨þh¿Ö¤ ¿-žõ½±Yuèù@CÕ¤¢fV7ëÒ/üËþ¿jÀ½»þ£ã‡„fu„0¿¾Á‰ŽOa¤ˆ×Ä+ªâ2‡oAÒ…Q ~>8äòóƒG¬5â²Z²¥Býª Ö¥%ubýε:NéiœÂFŽÂŸ×n‚¤îB7©«šÊZ~exÀ¿†T€V­A`€N€ôˆ´S­®ÑE»Ò“R€±Y#jÏe-Èz~$K²½.(úöŸþRø¶ÀR^~åú+/ó})ãóÿ«oP´ÿ¿ùæ»?äûüãþÿ)ImÊ5K«5@~ݪÒüñÑýSóÇI«¸O‘^€¹‹&@p8À’|òÉ£‡(r€/X âi{ä«IÇ6oi¤ÝŽÜÄ&$Ñ@“:&Öÿã'Ÿ?ÁêgÿxJZÛÿ“¯Ž×œÿèÏk`_¡ªB÷öv†åˆg£]qäÃ{} qšR›W/_ +„G +ÿa[|ß¼YÄMÿísðÚ– 0^àŬ/5 +pX@Ãýz”¶nÊ-ÜiÕDiQ4 yóœ§)@`‹¿Á‹Ia<ØdÍG³Q"”¤¾3¾nÒY˜»ýq5"ô†Nߺ˜”ÉÖßÚ>„xìCÁÀåKvÿC.¦½º¿;Iˆ¼¬3øà>ý ö+¾ÓYòµ¶ƒh&úûfrLGó[æzJ†CEº\-×bÝo;^^r æ»r˜Ü‹¤ÃÙt´½íhÄ¡-,KÇfÎ?nñç`!y°gB•î¼ï…zO8ÛŽByŒçœ6ÜßâlŽ,@{Õ»@¹|£ó\¾|£ZFG68„S¶ägŸü’]Iã4ÜëmþöÏd=i»Or=ÂØbe¢%K•¸f5žÿ:Á}¢¾ª 8$Að‘ú« Ï•|…dYnªm>˜•nTu‡ng‹¶m0uô/Ï•·È¡øô4ò§û‘JKó„$•§ITâð`ih@ö›èŸ¼<¼ü¯¢ ÕM7‡ñ7)cø5Çÿì ÷Ÿ‘ŸjT½NrõZÅÜ–,ϺŒüÕا•Ü Qc6Û¤î:K+A;SU“]K:¸ýø‘Áiè².peóoàß¾-¿¡,À§V¨\µBøöÉï©UU/ܲvú§W‰ÜjCŠ¥5bO+ÂØ¡¾ÔežS#Αßû>]‚ðÏîw-¾ÿ—y]ùeñßQž·à%{üòýo~ù>Ûþ¿0ú MLhS._s"åê4YA€Üÿõ#É—µí'’ª»O—§SÐÿC¼®À:|l˜\óìíõކ§(@–MŠp£ªb®KÕ$?rXK¦™ÿœÛ¿óTİòDRŸ\|µ ý‹ rÅÿ‡x  gx¸¿½_®DOÑ.WùðÃc‹ÊÜ’ßô¼–‡Gn¨“©l¸{|ÿîÁk+ü·çÖ/`o¿bØûE%²%OX‡ÿ¥ÌF¥à?=ÿt'€#¬Q€áð @{z4Zݸ ÐhN ¥ °¾tÀt0ÚŸö·„RAi'I ®–ó8 ?À,þÛElEwê»ä°5þëò6øM#Û§Õù°‰÷ɉØ:ëÌ&ÙŒgXþl駆¼ÆóÑh'Îvñ®á”8œ{ÎOHÁîd±&×}§$ÁÁ­[á}e‡1tˆ°Ü;÷íq¨µî(ÀÉuŒha4@JÒòƒ;”Mëd?æÄcàyôÛ‰dB,6‚p6ïfó4À:f¾ÓÌä\Á ÿ@`·ÈΟ¾0%d Ô‡Ù”s#øOÖsspp Q€§ ‡6þ›k¸–¹f'-„¶8®@Ëuù&ÉõDþÃ’ℸÇóP)'õ}6ð¸äÁ9Ká|ch­cþGï(÷†ú›ÒÀ_èNîžÅšD)hßò°Û[§YÖÕh__ùI¹Ä©žÇ eQîã2ðù~øЬθÏÚIÑ]üƒ¹q€îU ]è²¥æÌCEv>EÅ`îâÐpµÍxtÏH€R„BΪä6¥ò6•õB:"ÓŸÑã»Ë]Õ¥¯&(NÓìª@'¹)îÊßíÚíR}š?¯ýµêH­ç&i½,.à²ÖJ2U0åqÿ׿~ôiåÊ>¿ÿýªnü[ªs×…™…Ês$5"Á ÖˆF«d‘ï½Þk™m’*‘KC<©Ï–c ýé/àÝ®~ŽÿûWb¾ à•W^½þÊ«P€—jJ K/¼òÖ{ïñÅ/¿xßáâøî;9ÀZà9½RXK±Eî?úÍ‘s"?  l."›Àê»AÄáUÀ²@yúÜîÓ’œArOÛ;Ÿ¥¤B"íg<kç–yP?lÿÿüI`¿óTM¢BÙöÿäÛ ç?øôßYz’§%{‰Œ ]íC+Ûñ±åÍ'ï½€t„Ú/ô/Ik}"®à ñèòðï’¬5„”€·\À…¯ø* +ÀÓœ&+i௔Àväå;Ît:• "ô~ ̰¥ùk4ÄnJÁ[· Ж¶ €£œýþL(uÐZLQ ô¬ìO…#ÃÝx(A;í[/Yg7tàŠÀ÷¿X<ÉÈ8‚.'á=ϸÇ÷ òð' f¾™·‡Óùx2t +?g÷ysÑ¡-6üƒÑ-(‹¹¶YD¦á‚Ôd)ƒëÚD?v:=.|<ÒAÐ?,( Z[>–Ìh’F=ú†3Ëe>ƒ ð‹­pñ¼?\ÌæS(†ŸèÂp²€ó‰ÿÆØšÂŠÅF‘Ø6’ÞþΖxÃ’ñg­OLwò³kïJó¡¬å,HŸ<0À\׈…ÞH÷4×äa2Ùƒ*mi}9R{Bx\:³}eØoˆ;ùÜjô¢Q?f÷<_KÍ݉FüþÛßËg3ö(ƒ¯E~oÖuýEåClã‡mT¥¥Áƒë/Ð!/›ö6ág‡’̺LJ êY¶qóJjbèK Æ!ñàhƒD±.%áCnJÐîÓL_FaÉܘåew½u×BTV„ù÷¸ŠÊE^jÈ“E§ dáçÞTkOb2ª¸Vü77È;Þ6¯I +&Z4Ç}<0€_t€˜?Š*°!¿Z,| ÔÀko.ìEÇdþÅÿ'¿oÕA1¡-+ú@~`•xD™RL×èŸ;Õõ˜|¦ßëpþË®ÿ:tý¿ü +߯pí¹kåxë½_8å?Àп/¾ýÿðGcÚ(@Hiîu¹|UÀÙàøø~U!÷øÑÒêÔEä| +@¶G`'™xÕ°¿è­·¬v]JǺ¯¥XV+rÔÃ+¨ƒë±û?¶í_Øo€ÔW+uêîWOr ÉŒëßÀÞ~ïèñÇüѺ>Ü¿i·+ÙôJí±Ø; +°¿³—÷Vì;Ö‹Wí„¿tãÃl¶·¢{|k€ÿ"ÈcÓb$þî<[Y\KgBSŠð³B”VMÎ’ÌY³”(û@I{gÃX:À qN«[Hƒ>Ìoõç‹i€¾tá‘X‹mêtõµ‡9y J¢&é”ëüßíÿ¬¦€qïYò–ðŽ]Œ­j}!›sÚ8ø'œ‘°È ”&Rìï G_ȹÝíäs€2ÜêOwN°='×ö'`ã¨ë–7ÓýÁjCÒ$žÇÓY>ÀÁÒeF©¶fb>º3¤P^7€e˜ØBBêöIœPbýÁÂi‡È0Wá,EœÞe™i¬I’®eß‚Ýê ÚºqùÆö ÃB.ߨÊ-¡o‰ä}ÌþáîVÜ‚ÿƒäúðÐB¦È³Ìzp1=)k¹‘ÓþhrG +àEIdI¹N$Hdizõë wmZɆ]Ôd¿ šÀîgÐ’ùÖsœ£©ùN'1ú"H€à èµäKDR~òy]×’ÉÂÚ‰+Ušm£e¨ `7½ÀOð¿µé#Mµ*¥´›ýoß =¾P§I'ÞÆ•éÄ·ºÑ™Ø>JT×FówÄå¡ì=üðdSM²âLË¡g¿ÿö¯\WÌ·_¹57cyÑùâp–ËûYÿ/%쀛øÙgaŸ}¶ôü¿o:þH4Y_ÈwÙùJ–.€"M¬íV!U¢®Ä*‘ïï'd"z.2¨ÓR¬íÏ–fߟû*ô¿ÔE\³àåWJ²å¹üýê›ïþâ}ðÿ‹o¾øâ}‚üvø›àL€Lñîý%¨Š„ܽÿëßÜåŸHÀBó” +P•I6=Oé|†a R~­Àrß5iðïgX¬ %Ÿxì*€ ¾Ÿ|þ9–ÿçéü¯ÀJ –÷WÉ~Ë +øg±ß#Wެ€8‹áÖëé14y/T_SÎEu @ÀþÝtÜ‘€æ>+pU‡oîÙ¾oy8^÷d&_qU +P €'Æ…q„kÂc¢½òøŸ’†üMÎuL1k"…RþÆÞžMç Ô†oðQÄ#!ÁNÚ±7OkÖ0øÑ¡íѼ°Tù$œîÐÆêÝÞîÏø¾-0÷W€ÿ +zƒè¸NŒÈ ÀîùÌ€œàçJÀÝ@*6‡^üj6žœXŒñál>^¹0egÁ—}‹˜i»,jÛ§ÀÆø~ßPñXɺégÓu8ÈÀ}K3\ˆ7˜Ð½z=KÓÂJy†(¨Z0ð­Ù`4ŸSîåÍxƒñzla ¶v‡ãC•chþëÙÝÞéo÷) +Èã80%C©ö ¨H†ØnªùñfMûœ‹âŠ* ú³#'¤ø¦Î› mÙµ]£eºðÜéÃöi ¼·¬ë_ëÇ X.j/üJJ¿hmJ’JédöÊ9–æ^;-Â>ðê盧Ï÷JÇRë*¢É‰Œ¯DU°ÊʺÕOâ:€Êój¦`0.‡TJyT{ð»“Ö†8 +£4Ö3öO‰ +b%*íT ‘ÑŠ­&ݤû¢Sx\¶¥@¾*¿â¡Í®µÏ#[Z?nó——PBU`]QÕH†OÀý`w‘~}ûíc®ôC.F‰¸^h¹sUýóO?­V{sVö?ø¯"ãêÐ}—¢¾¢À\.…ÕþÖþ¿÷7¹ò¸>² I}æˆmŸ“zhˆ9Xrωî_]žYYŠ.ûóªDkþþ’©ýŸõz!C]Šó_ÿÿ«¯¼Ralw€·~þþ/ÿÿâ—‰øîÿä€k ¥¹×åòµM ¸@‘xî9ó––æÅÀù |d@×ûëN€3(@î Ÿz/%ø_ €EG:Ê ŠÐáß<¬ñíL5bá·YoÙ@lý—ô÷ÀÿÞQÀ >ÚÛêxž…7\¿ Y¿A€730Ïûk7¯f8¾0€F»­÷Ît5×íû`Èa'=èûöà R€€¼‹L ¸&aÒOñR¾UíþMJå í]Ö)@œBy°èƒ`r€Ñ`¾À +[DbþT€Ô)õñƒ1â5à3ÓÜo¦“0€ñ|¸½kÿ´oÇw@õ†™¼rY¤ã\6ø}«:A tm×€Ü-r£˜óÖÄ& Xº£á`:râþÙèËáN È +fä6hÉÏœÆpgá¬þ•kÞšþÆÃÛFıH®ç1íÉõ4ÎJk6WžºÂ’xLïLnOG»=hC¯må3—gxŠ!ip¤1 +®$;¬BLBnK5’¢q.ü‡ø´@Ûn@ˆ®¤Flí†QÀÜÝÈÀì1ž 8?Üîpž¹é·\s¹6(ƒ!Eh®ÙËö¸î~/®Ä:25¯üGßõB|pNKSÇë¿| ƒ´Ë§½'CF}tïX{r)0•ð¸r$j¼bÀ\´ýêw“Ž+ «ãׯ¥tjéÊ?KÄÁ³å?þ—oõ ¦5Y˜ß¯p̃¥ì³Je½iËÕMþཧN)e†*\â}7°ßÁõЗ§aizð– oIÀRy~…'j¥QˆØµþ+mϳ$”,{wÒŠÕ[k"|µëÿÏÿá?ü—’ÿðínÛ”ÿà¢Û€íÿ™Óö‹Úàö§ÿ2€êÓ¥TSIT‘ƒ£¤5ôE˜ÀN-òëå•®äó,W9¯ËDÖ×W²4¹oÕZ».%%ø%Ãø¬aý9/ð¿õ|åÕ—ÿW_yÙ(€ã^ºþêÛï¾ïð?¿ü"~€Òãÿ]‹XJ+­uIEY9Ö›~s|¿Õ².Zÿ¾¿ؤ­¼ÁÉG˜ÿ€Ì`fanp¸Æ.L| V÷\ãŸw”Š$!ÍÐÿYÏSÛy›í–¥|ÿ;}‡Þ(ÿá‘ „Ntü¿Ó ÀŠ…¬ã¿Q€Ý{gkÇn¤ìXòq„«‘¸ðí¸ô¤Ä›MÐyÈgùè´ƒáî°)ri(EÛ³jÉR:ôgi+þ†œï8áI-PKU{V`ìß™°Y§>x üT«ß™C0&ƒU:ÍGÓÆ6Óÿkw4<ØßýgXŸãÃÝŠq«þ»ÆØ°ëXA6ÇgÄÁ$€3±I”Ò¦J=9)p®étñÛÅ—3ð}·¯Ë©Óo¾‹ÄãéŒ\Ïwóí_AZÀÔî…æz ÜÌõܤI+YÜþL±ÓAnF@,‰²¬b1'°ŠÁÅl¸È +ÛtøÛÄ@.A×™ýn1£Ñâ·sRš9G?åÄÕ¦m¤oã“­+ÛW®\ÑC²¥¿Do |M ,J¿çq\„[üAF-ôø-&œ b±;å|:¼•·Ìµù›Œî,æ“ù`•k$ð?š”jo ÿíÊÒßjþß+eß/¥‹›1jǮڦ‰(¼oJí».üúö÷ú Xï×¶‡û¶ÇÝð"¤%žMÍ>4Di†NÂ*‰ˆf´õŸ¾mwBþ¯úú¯ÿÕ%%P§p’_I ¬Fß}‘UÆv¼ñÕ¿>¼÷Q‡j˜ ñQçy¯‰€ä2ékÜ¥*@««S>rÒ¾G¡K\l—ÎW]U¬__¿ùyž,YS+€“RÛ-’‹H8@I7ê!òvûãG~PÖO@§ÇüŠ:z1Ûºÿ­ÉýGŸÆ èhé–üþ÷dÏÊ:ÁgU%Ê ÚçЋU‰5"UâÙ¯ßÿ#àžáüŸþ¶1ð<àÿUíÿW_†TW€.]ýÍwþ _øÿ柾ùÃ7ü#Ÿït¬¢¢»7åêI’×ÝûÇ6c¤›?èUp©Z{AY£Öà0Éi7yòä” R&w;Hiû¯‰÷pùî¤î¥kŸ4÷¿Àüá1÷?ÿ¬{r—S…²b–ÛÙ•¥õOi²HêÇG{zŒ<ÚÛÚI7€\Oåi4€R þíAVÀ_n帬ƒÿö8°£‰ŸgE_>•äZEþ…;¯‰ ´®Õ’©AòSN€hüÓN`°àB0Bë~:œNú“ù´?¸Ä±†Ä¬H t/À>±5Ã+ÜÇq V;Ôp8¸u8õô8 °ö/` 3¸M+Л„»žš˜ëK/ÑotÁ|²øíí/áƒ^4×úM–µ³%0†Ngý;ó™(_. }ïµÓ`rxèXÀè ×NÇΠ3]˜Žæº5 ¶ßÝñXÛÏGÓñ|´˜&‹É|Ÿ™M•â+p‹ÔYÉw£ÅY n0-“…­Û†í\0§×Ãl ¸ìØHr¹4XU‘. £!øï]€ +Ç]®)íá`–\›æ6ÙqDn.Ùºc®oÏçƒÞ6ÿÖ½“ý°×Y¡¾ÿóê«ÚIy„DhŸ£3%HÓ€ÇEϲ!ÊýÕ¾ëâ/ÎmhçðtÍ'P;çy÷É[¥¾dQõHäç¼”Ï?¼>ñwgøÿ—ÿ¤?Sþ+ø/yÞÇ6g€= |ÉÙÎVH@9ÿ{F˜cîß{{(Ãõ[ÚLAñÿµôã½zuç54AZuå¢R}ðè‘GSYj<.=¨ï›+÷W, «§$¥ñL)RtžTX ,àWà3}€vçø›Œ¨45ÆW”òâµ×þfïàoàA iëä7ÇŸ>Îì Ÿ°øäñGŸ¥WÀgŸ?ù”ä`{…Ub“¦TPcÏ6OÇ’T…¨*AM@ªJœ¨©ÔÏ~}õx?ög½Ÿ¯åeðÿuÀõDú¹tí¹Wß~ÏQ€ùþû¿(ÀwÀúÿâ ìþ†þˆ…uBʰ’ÿ›€éHÀëwfËvÙ*ïEeE +5ÈóZrØ'=¾çøšC²˜“tÂ%ðÈ´£"íˆ5±&ó©wïfWí[ ÌLįŠð«Oº²ÚNñ!ÞÖúïT“äH‰?rèã'±GëøáÒáØ}W€Ïw<Ž|W /Ãx;•ÿz @ ï_÷ î—Nð_)äwɆåÛˆš´(­štÜL„è8A„"ð®yxç7¶à† LCPÔ²Û!uf³ù b@šÀ%€{ Ë`dç€]öòÙ^mÿ&z¥IK«”3锯nM[[浂ÿ·w·/_ÙÞµ`°ËfLëœd6³ä˜ðœ×üò1/~k ÿ|Ô̾ø5Î7jÙSh‹ø+a‹~tÞüÁ?™’ëÁ¢âh†'Ì1ÿï̧öÙg ëÛ"š¤wF/†üüÖâþarg1tÌÝ:gä [ s +¥'± ?:þãp—· ¦ÓÅ‚,ôÀŒ°ëåîîfäÈ•ŽŒ8 + ¥fÁ…Œ P"æ4óß.$'Óá¶íý¢ð+zCÈ~~\2”Øhqû¾4^ )xphó ø¿¸37× XÂ|N¦ï w·‡»R¥ˆäüëßýîw¥Ûƒú¼±€kð•¯R…yŽÎu2ÚµPù´`ÿõ&šxµ•_êúx>`öm#|þ’zÓöí\Qõ«Ú{Ïöüçó= ?ðŽuaÍÖöM–*=™‰ÆæP Àšà讋R²›€0€eSøÒðÐáõlXR€%Ìpý™ àb€*ü§{ÖË¿û>Àퟥ¼þ³äÍ€èø_Éoé0Ó¹aù›²€êÀ};ßà´ôv¢  *D +ú T•8Q#.î¸þ‚ƒü$ÌïÌ%³ˆñ¼ú¿Æþç­¼òJƼ~íú›o½÷¾ãÿ2³¾ÿÝÿôÍßýöÿ7öh’ÒÚ”«;T ¿ÑŠÜÛ¿_€5Ñ …m~¿7•»ÌÿÈN/U÷{IGÄEÒ»²r ŽœÐJ²;<ѰØ÷¸¥´£6…{YÁ%ÞÏZ«:þŸ›Ý<u‹UYšß’ÅvÊÿmMÿžsl&©øg¾¢ýèˆçÚ~È£tþ÷Dõ…ȹV8Úñ9€£l]kø¿·ŸC°c”ž“XííÉéŽ- +‰àëÊòmðߥVM"@À5ö ˜ çÓ9æÿü"áÛý9§Ùôn\·Fým=—¯\¶ÐÃÒ•ÄìïcÊ;h@VÉÈ”òO´ñX@ÛïÑèÿÔ˜†¡lgF€iÎsôóÍuo4[p´Á\ë¸H®õüóÚš­šð‹Ñ; `rš>{`lo°¸5Jû“ `:sZŸÑìö­Ûÿ°àgzªäFÜ| +ù yv“¡@>ÄDw ×7H B[,Þ!G;g0Œ§g—@ýÿ…ÿm )À8Àæü\ޤG°©æŸñî,F"^ÜW.‘söØõ‡ì—nÐ÷œAÍþáöíùb¶»Ý(Ÿ×ÞŸcÿÿîë¯ûèöfîuߪý¥Àçè< Ò¬<]¤xœ»çÄœðð¤6€ýÑÿ@kȦ脦íc<Ãpv À)À9`ÌL†-]€“6€M*Ä&G™°› +P°æÀ°CÇ@«{m9¼î#¾®!%/ÖëÞ¸ “ŸÂЄjðËÈ%$àØQ6cšd5Š ufé°™®÷™ÂG?v\!ªK,ÿMU!jœÏZ•ÿ—5b“X'ªJ°%¥ÖÉFa\Øð­­û×/½”@ÿ“Ëç\ɯçÓ‰ÿÿ7^}ãÍW_//À+¯^¿þÒõ7Þù…€öüιôÿ;@Ù—…uB®íìç_è¤àCŒøqRx( èq¶ï/Œÿv_JìÀãs0Ü?2àTC@o/vÒÛzЗÀ»éwóÿõ×韻¬h÷Wqù-æ;]‰²mÿ°ÃÿI©º÷}x€6ÞðØê—n€û÷ŽuQqâœhM>\ó\ÝÞã!æ÷k[W5Ãà +ºyÐÛ(7o6ü¸=RÀÞ @sðÜ(×ÒáŸÿã1lðÏGø¿æ,Ñyµj¢¼(ìû +hè8ÅÊ  kZÀ†`EÆÃáŒ?¤ Í´9-óþÈ‘}ƒ,0PLà 7€û`0ïc$Ã8î=ÝÛÀ ó#Ãím3hÀ.¨·¥À€4ý½iž–³t‰ÛúÎuz ƒ=²9šýëí¯9;÷f±fÙÖỦ·Ãñ™r!^ÁœÌ›¨ö>;Û÷¿Ë5‡ “ëÅtaGÀÙÌ‘†‡=݃Þ`xëŽ-¶6 0›XÈn€f­ÿÙtƒß‘)ƒÉÆt1*±ý\C0ô §¿|IÇ þpÌUÚåÑà[œØfÊ#³^¾Òe4BØ„¥}k²Û;¤0)VS§äZÞrÃF®’]g'²{`®'”Òmvâ÷Ôé,,‰Ïx´€ÿÆ”roÈß<‰ÿ‘€¸²öÛÎm½„_ž¼ó`v=Åxn¶æÇº¹÷Éc¨ÿ³<ÿñôgKbøöê=oyÒ¹÷ì¿©íÐ<…û®è 8é@% °²P³gÅHáÓÐÅÍpn @ð|`3e¾óË=€Âþ¿é\²_/=ÒÆòPU>­—3U3îÙ€4u‘­FÔ”AŠÿü€ku KŸ÷K§—×^xéà΢º¼,þ¿ñƯ þ°€×ãÐ ðÊëo¿÷þû¿ø¹cð‰ß_äwp ú²°NÈÕ›).ʸÄ_‘û­fDðC¸U{Íþÿ{ý¬ô€L¾%XÅè›?‚ASÓ÷CNzà›N€s(@÷H(y0€ãã'ŸƒûŸ/=íçz£OÀÿ~à_ãÏ’)hÿðXwÞžyüp/ƒ§z–£a)ÒA¼ynÜÌH@gyÒ0Wmð0ÞiÈ0¿>2yPâðÝlÿ,3àö ÿ¬Å°w@a#UK"yà–²$ƒ¡ôYN£ÅO8ŠhéNDPÅPv´Ï*·ÓéƒÀ ì1?uè¹þ.ôPo†‹!òé|bC³=Æcö…3˜>ƒíEnlïÞ0êÝN1ÿ‘ÁÌÓ@®Š€`ñNÇó™ãW¯„ExžÎ‹¯ÁêYÍȃ´ íxîOör°b ž#Ù{@®RòmÀÜ­ùhˆÞe¯©&É5†ôü¶H:¹íi{! &‹;siÈXºÅ?,îܾÃi ¦ó²Eù‰ÍáR²ˆÝ§s{²Ç‹ÃÙ64ýíB.c €„Ä6€\îîÀ±’u2߸ì IW`qWz·(Ž”J¸ÍØ©ÿ·e5¨Lc1˜“k‹ÛNM¼£qr-·ŽnÏæ‹ñba»Åm¯Û{m¦§P©ÑøË/Åÿ%@–€¨ýŸÂ°ÿmçulF³ÇÆë<öUß IÖG0ßkÚ>:¡´½!ñðüã `ÃP ½ï)Ž5À^ë€< ó8Ðl¨ÀÉ|å( +p:S@@ç8>ÛÐðþ{xJQþ$€%úŸðñgŸ>~tü› ù2àZƒþ¨µ¥Àîÿ¯-[~]_ Àëúè£MnúÖ»§Æ¬jÄZ•ˆ¬W‰•lÆ…=¿¿ôœ~ŒüÓ /ðŸþÿçxÁW_ú_Çüð× `8 àåWß|çÝwß}çÝwÞy÷çï¼ýöÛüz⦅¿ûó÷~ñ>Û›XX'¤u¼šªÕäþñoº‰˜~¨ø/Íÿ¡cö›ÿD ‹;"Uo5XðÙ“Gβ…œá8éXÖÿM‘4ÀídÉžb1F?¸ßîöòîZk\;ÿ<½Fý ÿ’mÉÿ ÞƒïR.€d«¤Ö—€½­­ôìÞ½1ÜN|,2 +ÀÍkâ¿t'Eßu„êP>LßB=ÉÜ`Lž&‹ß~1;n³UD“°6ó"8µn r=Ÿg ÀîΜ”˜À|ÞÒo=H®Åìñb8_4gýûv!˜`^O{ÃÑ­Ä `2/&cƒé@ÓùÜ,:B¡sþÙŠ0þ’Ô“‹aÚ×ûù€¶°7θäšá³üàÃ¥sýv Hn\Þv2 ›úî†#þ‘0·‘²ÑÚó n $>ü„|sWa?çÛŒäžãî°Çt„ýoÑoѰW·H'Å)ø¯‹b>Ÿ£îð7 +ðùþIb6äì¡¥ó|²;Ê}7=ù‡­ù¡¹[Ú>mÏôüÇoŸâø¿:ˆW G€÷°£ `ép«äÀµ“½š ð¿ƒÿ1ªÃŸ8àb€*ü§{ +þ7ä„àSNÊÐá¿âôèH<þ ào]üæø³ò|”~å†à÷ï"ø©1TŠ\r«Y_ÖˆT‰ŸÀðÕKuí9ì{Gú=¹äŸkÏýÕKî¡û_À¯‹û.Þ|ãÍ·^£…°å7x+oúýæ[o¿Éç-€ÿ½&)­M)ZTzt¸^rÿ7èGˆ{MÄÿ>•Úû½åžMúÊ}jðÒð  ½hzû0IÇi/€À8[J;xMôw†5¿ scþW€ÜÚ’Šýo§húgÔ?Ûÿ×àið_½âH @ªÕº€ËÀ5Ëöw03»oC«þRœÍ×xÀ$ŽHxݵ @bY@;Ôc¯m9 @¬ÿ|iÿ_Î{éøÍñ1ïVM”vt“K‹Âþ­b°}Mš z™û®ß…ž1l¥` k³Á`wªv³áâ¶ Äkê8»¡½&Sq`ޱϘÉâÎ| +Ô§ƒþdîH@½Ì¢rõ·$)Nlà¶MŽÿG6†0z¾k¸†©1 žCÌç3ƒÿÆ ¯þ}®eñ¯‹¯ç_~IºžÛ!‹0ö´yE0ŽÍõÏ챎ó;pYÅd5¿¾õ€{c²tkmI®ï,SÇÆS{>ŽÙqäÆÚÍЊÉäÎâömöé †œ×ñÂãßõ©F$j„S +ü±óÿjO ׇµhãþ¶}\&×l‡‡–lcýë‘Ç]éqÔ ?$ ƒÙáv¿¿»}‹»¾ßâ®.ÈøÄx Ðß\sO’ë1¹¾I\ÆÉíÅí;iK¦Û$Þ vü’2¶æó¾‘È20‹çh½6¤ö]ÃæMßó=ë1Ñ¥íQªyu½r~ Àé ÀÍ€ÿÊï®Àñ‡c®Qñ`=İæHt€n€“½ qœé¸vó5‡‘”ë©õXyOÁ÷ÿÁ1g€>²æX9ÄÇŸ~úø7Ç¿NL‹@›u.€ ÀÞß¼öÚÒÐìþ£O+ &?þäSHE1€xÌÞˆ¨*±’¸°àÉsÚûϽ”p¿Ëë—þê%ðŸ=žk À>€ÕþÌÆ¿ùF‚_ÉÂ@»¤³à«á 0wô ¼óîÛÑã›b/€”U +m„7j„Öçû‹`Tþÿ® ·£5þ @¦Ýª[²Vƒ¹;Ÿ?„}Pzÿå8Á?öú'ÚΤK@1öúð81ÿ€ûå=“/Fa€Ìÿ6êÖ¸}ÿücþ/áÿaGô}øÑ¦ ;+…âH<ûw%;[Ï8M¶ò¾zµxÎþ^îr/« Æý¦ œ¤× ¸ò¢¶?Ë+ì ü[+’óÀ¥/Í`Ó€tN»º­œA|lk]ÕˆÓú¿M|Ö%0¨YÞŒÁÚÁ-½ÍýíÑäŽIêíþzä¾S`;È#©í[Î (ìÁêöKØ·Wn”ÓûÊ•4ô´ 1£gã]PÉNfÙ ¡=›ÇŽùc—À1yüíâKGû™ïŽ_ÎÇ ,÷¼e\–-ÇÎÉ5Æz—k¶ëY˜Îɵ>ŒCiKÊünÚÿí‚\ö2 •t%/ûýcãC%~Ûw‚Éo“;wFýݱ™’ÌÇóÑ— )‘¬g‹k÷¿‘ÄÅ^™h8m1¿eŸ_g³mŒ÷épFžÒÃ_'@#7Ð0ØéÁ? _è È5Ö¿˜¼¿õ¾ž;*ŒÃûD’»ƒùtæØÓÛæš¼üÖÎ#r}gAafT²EÉA +¾à_)è<ÿ…õŸÂ€±˜ÝJjßuá—ÐÒyžüÞ¹iÚ_Ȧ`= ƒͽÏ?¾H À9ã•´@/»bºAQ`/€r”Ø·õŸµ×P+§<¨ˆBÿ³bŒRNŽ `©ýÌóÅe¹¾Æþ»Ç(Ö‡B—gyte®ybÏ Žošz­ÅT b·AÅ‘ãànR[:€/$€ï°î 2Ä(¬*q¢F\Ôðí¥K×±ó/½pípÿù—®¯-/]þ]³#€þQô÷õºàÍ7ß~ó­7^/'€¨¯\»þ<Ÿ¾ |ãí·ßzÛOôø¦t¡?%Î%GGwïWÿ‹ +ÿâï:ü³´ƒQû?¬@À3šA€–0Í þèÉ#»˜ü ûÿˆ“ê4¤-¥¥qBŠ´]Ž?I¯ÿòä¶P¾=ÿé÷¯åÏ»¿—!þ„óàö°7C#G{Û;Ã{V4ζ:_ãŒÀ÷ªä÷w®lí” ÅDã%XóT÷Í8ý8̸CbB–WÑ÷_æ?Ú‚ÃÁÌ–,Äÿ"¿>¾ßª‰â±,êýâ%°lÓ €m¿I:'€h¾t GÀ‚íæ¯ r½ØÆ£ÝéBܘNç yè‹;Slñm l[Ǻ¡y`à¿û˜æ#åiJ6÷z¢–Žù¾ãÝ_IÀî®íݨVyDÅȹHö€ùzgÖÉFÈÌáXÿ|ýŒ4½ùpó·` ÌO‡˜¼à›føÏÀ} qÒ ×v»×)ÎQÜ6èã—‘ŒGäúëäz1’œà¸{‹ÔôLoêƒt¶g‹×÷$B<Â7Æó¾¬štÁsóŸŒÇå?ì9€¡A‹ ÂëoïBhtxpqötØN0@oÛÉ’ÃôìˆØlD`ÚK䀻B²$3ø×þàë¯gØü ·˜ë9ÒàøÂya÷F›¦¸g'יΜ þ9 J~éø.~Š€M©}×°yÓð‰4àÂ1è‚ÒölPÍ«ë•ó=ψXzº^{±ó»€¥À@^Õ°Ù @Š0àœ€Ö°ŒàòÎðpa¢ý÷ð”òý€uI“P[ƒJŠÀèŒøôÓÇ~]0ÔÅ€ú5¶YcÑLN@ ìýMæhøpðè³Ä<þ¨¦¨ñ–€àå¯W‰•lÆE=ß>¦/ Ù¶ü_{é¹k—®½ÀÇuãý¼pMÎü +$àUð¾úP ÈàÀò/ååW^I“@Iôø¦PQRT÷ÿöþ¯-¹eÙÝÿ5%ßÖ€ˆE'dG`Œ­^uø{J‚Ï@mŒé‡cþò@RëÂáÉÖùþ(@Õîö·ÂC_€Šýï>Vœ–l'<¿åŸwAù)øhÜ"ºì^ß&€“1œ:gÌßãÙî<<Å€š  j“ ç« w å;à€G +`o£ÿVøï¸Ùèˆÿ,åö¨nâ¿ ào€ +¼U¥ïä’QrNQu“,v—„èÏs€0à X`ƒðiKÛ·`4øÌ>lX¦vðs4ýéì·Ãáü_§‹¯A^}Ìãñ|¼{Kã]Àd~g0¸uk±½%ØÚÞ2ð*8@°‚A˜‚цž›3"ØÇ;/×Ûu¸<·¹‘O¯7Í )˜ÖÝKŸ/¾œBE’ëŸ?Õús™"`jj#NÃÅOíç?ý?‡ƒù¿¦Äà\Ìûý€â è‡LÌç„ßÎ4³ÿasèuýËONàdÂòjý/yL®µíõå÷\a®"ŒÌІáØÞÛvƒpwʣ甀ºHvíd¡`þúw„#ã[d~ü»AŸ\{B)Ì€ÿý[óÙœ›‰ÍñÍÿ:èÿv +GÈ^ð–*¼~i‰žœþÏr’J·y²ò#=­Àš\$€W;Ê}7=ù‡­ùÑt½æ[.ðŸ éÏ’õ€5@õÐæôëèbÊúïbžâ83@c@{ óØ<¥æV0Ï—åú3ÀÅ<Uøð”t-g{‚耈¸äw¹P´F€B®ß4œ‘k9áˆàGŰãö<ùöÒ¥çŸs˜-þ üóÂs—^ðSèFè@Møêëÿ»=lxõÍ7ßzó­7^Õ @®w3Õ<×_yåõþJJkS-䯷¾€H–cX¤Åù}D¼ÓôùÏB€&:¿¤²?@€­¼áÿGžztíöø5¯VMÆJ.½x k0`Tè_üŸãHû8ú¿ UTzz}Å|#¡Ô踹-üã!ÈŽ%‰©=ìocøcOÏ'ã´,Oüó¯$­­o—ÒÝÀ(œ],èÅöá¬èƒú¨Õ­+[7²n?x?²pkpkk¯ ØYÖ2ã;ïD,°»þ Áp4°ùÞxN9Ÿõ§00Ú+Þ† $ NKY€Þ@)|Á0¾P¢]Çì¥LÀd2]ü®7û×…`aOˆ–­è{¡%›É-,oèæø­hêóK2à·-ÿ¬noe;×¶» ¸Q½vyƒ[XŽÎ^@aîB½¼sãéØA¾æBõˆëAåzn«Îôös=¿óu,G€$×zZ,©ä¥r½ÿÈ~ÿ?Ù8+¨Wjß§y<×:H²>‚~­ÇüÀ3bZ/€:öxyÐåÈ0@¾ +ô+À§cºŽHGV1'zp–àß~k  ã”àך¦«€ú(ùV5u#¾v¢ÀýGŸ%€+ÉHÕ pÃðcÆH•XÉFa|€¶ýuçõÏ7ÒLÿxð˦ÿ+·èXù€¼.€4¼n´o0žŸià#°= Æ +†%¼õV"‘(òMiMpúŸzÝÿMá1€ï)A¼H@ƒW3ݨÖâx°ôorLè‚VOb$€ù5ÐÖ€“^úSN€S m^I<¹¡©)j‘oÏ€lŸV#[kCƒÿuëÿáÃÔŽ'O>~tÔ»©jÈJ|HÍÏ7 +°·sÞñl]¥²ÄŽê/TGâð‹ ¥ÀÁG÷îë<¸ªÒ`@‡àÿüu ôç»øÄÁÁñ£sü”n€€ÄLCxà 0> ¸rˆèÿж™OܱSàt:˜ÿÖ~mƒñP7û!ø?ìÛâ=œõÛrƒÙ 8ÂÒ‹0²IGx²@0‰ö2vìdé¹XìÎæ»qdœ2ÿ§ç‡=EÈÝŸÕù…«¡±êd0oŠnêõlŠðG{9Ú p𣆠ÿ`ñµýãœCXÚ‚É=ê{ÑÃqïp<ܰ>že6‹±­÷ŽÙ`N°Ù6s#é!‹Å×ýÅïä¬C‰8…‘ùÆðq”9Š€ 49 ×XÚþ%›BÜj±æ—WÉ:ý}¥ \n]qFÀj˜Út0<Ô^÷„ý>eí ãDi޶|Ø¿Ñ\7†a®{½QœЕÅo{äŠ`U˜;ô@åšL™‘$º)½^£ú}Š€uk¿íÜÖKø%´4_OólŒ°´÷8ÏOüçê=¯Š ͦzèÜñ8 øßyBê}j$ÀæÿÏ‹@²ßiÀRë5˜ç‹Ër}üw° €¢h@yŠ`P-¿º-š©<HËn€¿~ôÈ@QªL¹rú^?>€ý~¼à¥K/E»¦«_>—œÜ¯6åÃû%Û4ç…ÿ×_îÿŸÅÞ +xóM ‘ëì|€ÿ˯HÞzû­&¦zB O•`/ÞóÝäØÅÝ‚þ…ÿí‰ÛÏ÷Þqÿ©…•¹%vcåq‡dÛQÈÈ)ðt +Ð6mJÝÑh¨¢-¥¥ÿÚýðÀ^ÿa›Ø_üÏ-ü?yòé‡G(Ôƒ‡­ã€Èãc=<¼w÷w®Þ¸»éXcAì›ÙwÍrtïø óp—õpœ Oеk[®¬Ið¿HÀVç€n­7lxŠœ¦Ã¡N€ñTèk²rèè×ø÷¬œcÂaÏFôÙ N³!ÀAìÆ; Þ6 'tôwÅüíí¤T¶³ä/¾c˜Î†Ã8`ö~ `°Ë_Ê‘³j[ÃDß–ï ©p‘ †`,0ÇÖd +"pSq„=r=Ò7îdü6Ž¿œ‰ösý€³MÙÝ‘xå*9[à9pËû¼ŸHÂÅhú5g[|i_H#ími9iÚ2ÄN<^jà_æš/sí¶ÝÞðP¦Ð4vä`Hñ{lmm]©ö‹ô˜ÎúûŽshØÀ°Hiò¹UC›gJ®NÙåÚ;V\@÷åýåŒB0Ãd{:7Lƒœp%Ür3˜Ly|RPT=ÿrñã<ß»ú>ƒŸïXPß/ͽ¨yÊŽØD®^zùã° mýrìÙ¶ÈÏÓãèèܳ'<WOö8þÿ[ÇïÏìÿæ(£ã½éèbº&€úR5éØ;H'€ÆJî?úŒ¬Ú @OÇ*às¿3à‰ÀtK©u²QÅÿ,hgqé¹k~^¸æ´—®¿àâùë—^¸ö’›ÙÉ©ÿ4è±ä5ø èM ½àÿWß|ýÍ´¬¼Y{óÍ·ßyëß½Y¯(òM©`‘”–ð¿bå Y‡j‹J0oüj±-©ÒßûÞÒZ¼+YmòQ¹ÔÀàx¾á°€}Ìø½} úõ€5ü¾‰ù¿ÅÛ’÷FÙ?õpïþ==<.²†5€îAø€ÍKú¿¯¤iàÚÍ×î: УGéú_R‡wR`ZÍáë@ï('€óü#G¿€mn^ÆîaÆÿ¥³ñl1ÿ•ÿð™Ú7»w8ÔxÇ8Çäƒ[ˆ–¯À-(ƒu¶÷‡P¸ è³íèm (‡éÏ”À +²ÓÝ:ƒ‹ôV7‹cÅGcmcsj†uÜ i¯‘}䃡ÍàÆŒæ_/ÆFaú zãy­¡÷ô:l÷à“[^¸ì&fT¢Ûû}ÜSXðOé ,¨kœñ 1 ’ög£–£8HiÌg%œŽ-@í© žÉCÈàÆ¶óKúsNsÈ^\ yg<°¤ª¬×r͵&4À'k¡09 ÙÎG½áLÑE `Ì5e`I™kï§(üý°à§ 0ÚyÝþF €èÿäÛß×þ…lzò[]GËG×Ç܃«ÿt1EÖÇòÁý-G8Ñ À7Ÿ3ÆXzÎŒhz½óøŸ(`Iþñ"1'{Ę)ü_zxwþìø~süi&ìfô†‘³6/îÛ¿ñ8O4îÓÚo€ó?džÌý“ß×°ÿ»¹ìÛ÷Êöþ7Ûÿ­7ßðæ7< Áÿ+|]‡Ä]Gxçí§y´õ,´*åƒûÆ\Þwyls€›¾·X¡;ô_®P‡ÓΗÝã=øž¯‡Çz®øøÌ<äÎäÎFRà÷ÈÖÙ€þ{pþá)/ÀÙN€¶~–ä j(jKKc)>šöý+÷¿ø¯ù@þoùZ¿5ãÉcÀÖÞ GÈRóŠã#{½­«Û{©éœ^šÿ¼5û¥â¿`åöÇ„÷¡©ù6 ÀÒà+©éPBÚ‰;i ‘P´|04í k'qÌB¦³€t‰«Š&öÀA¿œög3wœÏí ßƒýˆ¨1n +¿Ápg2qȱ”ƒÁ& äЏ%†r7®,½ß‚•PÔo€_ŽÂ”±89çkEx,âèèy!}»Æež Î9ÓͼO¦Dœg«Óürýž£ÐüÖÏõ ·&·'_ȹ¸xË Ù6v10MvÌÇ`àÀÄc[ dJlº¢Ể„©ç±\¾@kP¢3ë¾ ä9ÖÁ}½$’{™ pW¡®èØêÁìr£¯w_¡˜)Kð¾wh€ÌŲrëȃä¤ç¬Ü×”œÎ‡°†m§€a 3›bØÉ²°,CÆB\Nà?Õ¡<¿?ÎÈÊ.+©}Ÿæ€œïXˆ4m¯–ÿ bàkã¬õôw¶w*`½@ÆÐð=ÇhM+Àÿ¤1‘ެ€ ãhŠr«€ÕP€èbìÀUg å>—j —i'Ç áæxò£ç Öe£0.Šÿß¾píùr`úóÒæîÚ v +ŒàÒslóýõ ½Ž}ßÎ}ïÆààüñJ"ì/¨³Àmo¿õö»Ž ¨ü; ë„t½¤L¿¦ šâ)öû©BßO‚z‘þbðʰ×ëI£¬’ßS èÞÔþãGi;G>ãæ†4˜}Xw8kó_ìŸ9ƒ´•³%7ËZÒŽ_ŠÁÿÄþ¯Ìr›ÿ[¦Ô‹T6–?Âð‡í`€¬‡išôçÝ=@[ßt :àÇ>Òð_ËÀ•Ĥ±ÖÑûs`k:HèKkoªuͤ…úˆàøqªä¬+é<6@6œzt,)@œ³™†õ"ð Ô²"à÷{¢ë| +ƒƒþ­I€Hdôå0þÆ‘åO tîðrˆÝQ"ï&·ìæøÝv°»+—¥à3ýI³þUHñPLÛøN€ÔCÐ2{ãž½ëÈáÈöÙdYö‚ ú³aßÁñØBR˜ÉåÏv[®=è(NÀÿÛé;7õDO7BeENˆîù½­ _ø/Ç ÖÝ œçãÆÌ>H^|“kÏÇ ÆÃ]ÒñwóZüÇB±‚ý2"—.]Ù¸çÏ]™Ònÿg”!Ù ÛœËìÞ–¸ ~,s-óâ||¼%æ ¿c ç6Ã!&fÈü»¯¹ð&)l’9jþH@ë°²öÛÎm½„_BËÊpñq¢ê±ò½~È8­¯@ÿVʰ6 àt R#ž3@4àY€ºT¤Á¼÷?> ¢:€Ÿïáh4 ÊiÕ  Ú0\å ÎxÈUQYrÖ#æ4åÙýa1© ?Ö yÿüóâ},~¡ÿÒ ÏÇèç›Ímõ…Dõ¿ìø¿ˆãþ½õæÛo‚êï¼ýŽ7Þxã-±?1‚¯¾â ö|ë­ý 넼(S„5U)‹þ¿N3@XÀÁýò¨|õ‚ü þKôbùÍW›ÿ¨¹ö/*a:kßòãÉÒ`CeÞœ÷ŠÇ 8ƒlWb³ÂÓ¤îi;v%ö÷ÿß•Àÿºù?¬ )o +ªŠ¯Œ[<èmï=|œ€u@ðÿ¡4§šìhÀ† á8bW¾-»óüW€£ûûûµ‡¤Mu ¼”.ÿÝû²ƒ¹àeP“%K5@8۠رÿt;@œK + ÔÏf«<+`™Ïùãù-„ÅÄלÜ.­þ. xƸÞoݞܑÀçžeSuO-vJ½´v_¶+€ ”ëClrϾƒ4`Æ­·ÌòÜ„À{RˆiË/C†SPÙ©úÌ£®{sát¢Vz˵=#ï1€Ùd®+C¾Í?‰Ü¾3ÒÀq£žˆ:ѽ‘ ÐUдë\å2f½`êNZ¯Œ‚°ìMîL ¨÷Ò=•€ÃþðËWÀþOAf.DJAøß¦XŠÕ]ÖÚßÒIAþ¹Š-÷ÚÕq¡è^!Ç·ÿ£i?rß4é+oÊŽä:— ºç‚Ü$+`_ß³ÿ‘Ùü§ñ¬ÃÛy›Ozx¿÷\>‰µwÀ÷`½@yl”€ÏkörÅy* Ìÿ3=W3 ÒyJ±üO5ÀJNz¸¥]/€G€—qj×ëq7à?Éà[ÓÃÃ_òxXu'šÿθ9@<VÔ«IÄ‹âÒ‘eX«¹üÔˆÇúx´üõø;#pü¬ÚÀ"_ü|‰×õK×°ÿLÃÿoéÿ#ØþÎÛo½ùæëo¾ñ:4ÿƒÿ ä\ÁF9ƒbau€¬Iìøwc0O ,.Á?Æ¿B5./Šðøñ=[¹¿tmÜçW©<-½ lÞ«†€€H€±O§Ï"ÆœÂÿnП^±€½`¸Ræ?ùè¤U +5ò1»ì@Ž«¦Å°îy;ÁŽ·àG” $àÏc¾ôËù¯m þ*û @r$P® òu`ƒ>KW®öÝû2oñ¤E¡µ Õ¡ÊI`·ðNf‹“‘K'@GÏFÐ2¾\”fµȱÛ\뜡sACÈJ]ŸÜ5A1VéÄaÿmŠÌîÀ»ôXe7{»yIÎ}/èz² PN€ä×Ô6Ïòª‘ŽYn“9-Y¬mКäI(6×#QX›#8/®²0åÿU®½P2Dãÿ¿=Š¥±ÎYá_qÚü»N¬3¤‘sôšh$Æ6‰õÇÃŒw²´9€¢æ[Òâñƒñá.'ôø2ÌRÚ v‡Ñþï<?K“¿\c—ãx±3…Eé o¾þ:_¯ÿq` Úý5Z ¢?!àoÀþÿ¿n1Jþù>`Œ4ðo_Öân €£¶qýuQIàpp Úô›,½…¸â ²8=,PQîçE@µé/Å Ê»>¿óÉž-‘ª›ðO™¤   ›êÐðN(@»öþëmöˆþŽ˜ ýJÿHyŽîß;Ѐ2(¼ÁÃ(Çþ³Ô `pA qðëæÍ†þJN¼”K>Q¥Ê#‰X§kN€Î Àó,jÍÙšaûc :®Nb”@LW¿¦Vž÷±á(q$ tktë–‡š°WfÐïÇøemÔôw·ßøòðß‘€W äÞ:01ÆóÌI|±£QJÎ  Ýø•v(Ÿ†»ñþÓÑœ“¢€Ìµ–¿dÀœ&×!0(ªäZ%e–‘äš|Ûl¡’ÓoAÊìèv’aáOt^‹ŠCôByÓÎŽ-=ÛL€úùX j·ŠŒ‰ä±dñp°;>Ô"w®"3X½—« ôßÚºá0ÉÖ @ÚE*ÝÃÞ–„  ,`ƒ-ɨz™\CNÈȤÏÕšs¯ÞŒÖHŒź¿ÝÌÎr‰œ /vø/üOy>ü z¬¬ý¶s[/á—àÓy~@û Ùôœ |þ¸@/€>€6¿Þ™íÍq–1|öðœú_d.€ÿ~1¹­u×¹í*rjyÀÉÄÕ|…êºûu6}}§<)ü‘‡)`½a“C«G¨ @vž«fÞ!lصÝP ffbÝ@Z“¹ÕþàGà1?Ö€eAù_Ò¬¾äo¿óvóëwþ7øÑðê+/CjÔéAøBä,ð"L15Eðÿ9@9Ф¼ˆP“ƒøKÓ?2´z;P‹  Óq¿þ½¨¤ÝìíeNÝ•í_ßåæ–ä@6(@âm6…D¹™"  ƒÞ Œù_€Ûù#U:øþ'Xþã“é6ú ‡KÒ&üqƒÄ À} @ ÕŽ`þ¯yÄÿƒ{€¬B؃_ðç^sèÕ¯Ù$Ð~8 P¦ø¯`ükÿ_N`ƶ·@vuqÊ0àÕg$‘¼ƒø‘5'@£_N1ß§ÌRm¡/†Ç Pˆ\+ýñp(ŽÒL€y¸ô¼‘‹@„+ -¹ Û[\Ó•«7ôzÛ@‹?¢ö]íþ¶=°AâVÖ¯Xfš~-jLÞ~kÜAÿ“T³d6›ØÇlŸ9‘¿`P4W{u¹æònà[ÐT5€^|Ôû’G ‡3mš)lçB†ÿ31{±\¢I¨ÎÆSBJ,ÏœY}éô·‡cc6$¯žß°Å€Â{HÜà+R”ÞPŠÀEÊ($ošW‘Û*[Ò@´’#s=]æš[1v(Äv€™6×Qé°©æÿÔ!¸B¤”áù"Р]Kóœ·m?´€4`¥íŸ€|oÀ÷ ³ª“4ŒôèÐþ?p:`€œðÔ8(¿ð8•¢ß;ß·\OœwØ;Ê­×g”mý/¥çñ8ñ†*Nø¶ºZå\ CæTé3uòŸ + @8±d<©.> ¤´F&E¨–V5þC5ÄPð¯ ÏL<·ãh›ð𑃓³´Š-´j¤vXM"V ñ­F¬W ÙOU‰¦5Ù¨Ãÿ¯ªá_c%[ž‹'ѧÿ +ÐþºíúØÉ~µîà„@Ò;`þ»÷uÆA › E¾) °1ßþÆîëø>"®­üþ«uÔáz@9G']Ttû{(€¤ŽQÈŸæw‹Î Øm’Óküë888År[/JV ½þ»÷þ^?ÿ†èýoç.Ie8 ÿ>é{ÃÓ€G¾>t +¬NÐogpÔzÂD|ÆEé•@Û@ë`Íàæò,ƒ<®€¶? ?@¿Q/¾htØÖµ¿†¸Ÿ² èμüžÏy¢þÞqî;©QÙ¿Iœ™€vËX DK½1žB¢?üåšÊ׳õÃáõèMíj(hÌ@‹»òÔ»¦ØÝWEbÑ å´›)Ž3%ðÖ¶‘m1j1Fù_/7¿Ð^óCôÌX ÊÌzóÑ<ÉË]˜\‹²3[ýýG#x8 m‰–JÞóñÚPˆÆ’Nlb®ÅC*Ûh ÷ÝvìB¯À,õ™06’“¿÷·÷M´š´ó¥5G¢ü°¤ˆLÍ‘æ™#˜-(Ôa¯@X× Å;ì< ‚ŒÀi’e)ˆQ•ÅÞ±Õë ! þ–„E7érM¶ù;ã.“Á™YP»ò7WëŸÎ?±D8ŒËtÎÃØÿ©&Íÿé\;Q™ù|ø˜œ-êä%Xy¬a¯%‡Œ¥©ˆÓÚ aá‹[ãd†` +uáÛ"ýªÈçh¸O)yßHc:3%у/6ô¶ùϦ«â¢’Ê”5NLÉP4Že)YxK²Ù/àœ1Àú\m6ÀsbxŸãþwðr€4è cÊh?Å´½ÕïO­½íak×B~õ¥•qu̵ ?ÙOÙQzEÆ€þá!{øí´¥^Ög ¾È9€™4{I¬ïI›<®I·²æàÆxÏW€Lu¡€;.øÛØvžÀ ]/€x~D |)€ãxÉÿ¯½p½¡|äÒõ—®½Æ€ˆãðº~ýecûôê¿áؾiúgñö›ï¼m8€hçM€8[^wö &M•¯Ëš€wbˆ À:‘N>U¨Èä¯|¬Qƒ7#À[ÄQò/þ¢ú(¾ñ#¨jg÷—ˆÿþ:M _'b½­ÜÌ €ÆÈ€ãþ-=ü‘¸?O…ñ?)„çßìw€ÇËÃÿ¾ +ü•»û€žâŠXwd,ÿ&â¿ ‚Ç÷ïiÀÝÒP¿¼zÍßbºÝ¯L>¦ˆù϶„èÈp×Nx +ýY:02‚tZ] ˜/Êﯤˆ.¹ÁèÎ4:Rë2c© m!4[ÔŠÀ ­?<Ô®D ‚¢®øÏ¿ê×xxÒªšÂÒ5-༃ÝmLÜU€pÇZ +Ä’žc‚…˜™ºOíå‚M@Ö0¹FAéN¯<&Æ+ú%7Ä3×2³G®QxÃ]2’ýÝL‚]þe*î¯åÂÂõ©ê³ÒÇÔ·PÇ@ÒѸ2o^Aí›$ž×Ñ“ùîýýSÍdC=nÛç/nfiQ0LzÒÌ}Jc{wpx¨Ã^åiI¢ˆM VÂ… õ[xÚ`®™¨^MöɵؑL¤)ë÷Š1Òâp¶¨Ô’fþ +ÛA"á#ržÿKÀ3Î& Ä5Òs.–ü°öG‡‡€q Âq».„\"cè‚ø%^“e“qè©P +î&Û¸Ï!¬³%fñ •®ú%jˆÆ[*:¦pku~D ȲÔÊÔ,X¼R­Áèî8¿tÚ½î‹ *HG¢-»Û© Ã4‡åy˜<д‹§ºÛ’ªÅî™ÒýÒËXxKï/g†¿½—¯Å+á‚–ÔÑ@zÃ>´Á §kgÃ=¥H|¹½ÛKÑzZ/J̵[õÅßÊE=X ÞI²^ UÓÀÂ3{‡:À-JÝB§z÷ûº#ç{\~^mF?r€ŸÀð¤aõ©IüÎ#ûÓ¹/ü‚üoä÷æÛoÆõŸ 3!™8¨&ä}ˆ RÆ~9ŸÆB0kõ| ´!§HÀNÉù´€GÇz(Þòz]L0äùôÛÐÛ?í?þÔ0€ÕkÍ PèÛ„´€D¬(@ï(àâ€À7ˆ¿é(ô> þÁÿóà?€?Ç# ÒãË?:Òã±Å®÷u1Åšl-øݳ ¹ÿ«òð•‚p{ÿ/_îíh4àeÛ„¯8%0Û·þ:‡­š"—þýÂÓ´áÈœp|– Jì“§É烎rJSMÍÁW‚úü܉BéƒÎå0j?ÆÈ­ß Ú5¿•Ž²Ú¶EÍ rPgjíÚ €Íßêl´GìÇ&õí”ͤGŠSÌjuuÎTGöõŸ¨XÑÑ-×ÃÁL•îZòšË +…á@1M Jíÿ°fѮ݋ûXé“8þó ºjw€ËC¶ÛÄïÆÆ0¢Õ»*›U‘á,cƒ¦D_ŠvJ®Ñ~-/ F羚]¸j S#•::EÎàÅÖvo@™VšdnâIl«1Q°ÉrvÝÿMÆCgl"5.%ý;Vd¶! LÃl:}ÿö–¨ÿ-b>yDÎuò’<þ蓆D+‘.忝ë#Oë6îX° ÜõW€\Ò>wºv´PæÖ ÊŽŽ©Ì­¶$V )ß–¨)uè<P0kXþÊéÀ°¿ÕïM=†"²€tŠYmr ù¹S€ªf¡²¥F¸@¬z”5r;±#+Š5™/Vá¹( tDíÜÐÕhhDkI€Î°, ÷õR<¤êBdé ,Hq¿•ûš`«çTÉMgynõoë8@:‹0§y$0@pûüð.€Uëß6 ûÅäåW`Ê›o¼nÄÿÛo¿ö¿õÖ;Fºýöˆ”Ç +àFÿé¤éòuYzìÀ§°¿ÞÝP€ûiMjýJÏme÷wë.õ_mFT Rž® ½{ûÓiîÃxîÙRå-è°á«~ù;£NnöøÄßVÞ€‡û½ƒ¿§Çæß×Pú{™öð?þ­]ü»ÿÛ;É€_}Â!ø< +àþUràõÜ?¾_ãÆ;Àµ•àÞ} Àý{ztÐ~€€uŒø‰aŸ ›’H}€¹Ë6ÐÊPö?ßÁý¥Ð àÃÕžjŒ». (zbÒ_h0eçæêæÁG— b}‹tgçŸÂ$xÊó°òG3gêc¥F`ÉS­ÎŒÕ„n‡Ä|²÷Ú‹í$é¿Pƒ-ìÿ+ú.ÞîŒ1À@dW{½öv©'êX0)uœ’SÎBrük®“iµ-æÌt0µÉž?ÇQpF3fQ3þœ©iõКÚÒ)W¨®f©¢â·= Â…©ôG0ŠÙ£hZ©ŸµÍ±’^R´ª`€úeï8ýͼèi&ÆÎà3¤Dw)N"èš¾˜ev´z@¿¾‹JEŠb‚'A‡&ÀÝ·Zˆy^æz87bÂu,z.H÷ÄL} €«ª±ñ‹p°çB½s ‘k Ê ÿ+í2ÿK ç‰ð¿"Ö«M^…~Î~ÂÐ?é°¶D<û¸¿{4<ä‹ÒYz¸¸%äº&€ÂôM€R€}@È¡ÅÍ‘ÙY±¢IÖ<žrK,§ò„€r©ƒn±áÄ7÷ܺ ‹b0bgѬˆüa$ËÜý1ÔeŸûÍ«\r/šÓ¹nÎæw¿>ËÐ@9ÉRšÀþzö?yüpoø½=ÇDZÿ—þA»y><þ[åúêÉq5FäZ¸$V÷rE%Av t¾ÃXñÊý¸ò!vnbµ#ë“û#Ùû^bl&¬‘Ïö¸®á¿¤Âÿeð’勉ˆ@iՉ߿y507àï—jœG»‹ˆê×59Z |ÐVÆâ›çÚÇ>•>–H‘§‚F<ÖN#€ÂQ¡¨ÝÜi8Å>§Ûz¢¬Ð]iîæ…±€¯^¶µ´«!†j?5§„6Šs1ÕyŠ5‚R‚ŸL툮q€‘õõ™§F1 ÿ ¼YEsU¶Éµ*0¹ÅÎÓ3×ÚÉ>qP2{ÏvmWÓ…°Gó飤 ó÷¢Ü^jÓ“§ðúfGŒsÌËu2rƾٸÓávfR2y»éÄ€{زíìÈz8¯ÿ–hìîn ÜIÙkŒÚ­\÷v’AîéX$ Gþï~ì%m1×iÐà sm<¥·8›ÌõbAɉÿ–i!1ÿKH3ºó´¨“;à½;%gyzØübܦ ö÷Ò!6Œ‡(sPèlÀ <çÊ Vºžo©ÃiÀ +F7<¡ÜØÜòæ_ÍPçÐë7¶#[þË6=Èr/Š8sh(€9á\¶è ÷Œ 2Ø?$çL9“áb ì<1>e{û/`3¡£^¯€¬œ +¢œŽè<·¦ã[V;kxó ·žîàCµú±ã<ùÑ1×ñݲ^v\¾¿r“Ä@¿ý¿é €†þg–?ñÿ-›úÁwvzéÒ ×œXð…ç@¸IÃÿó<Ý8‘ØþÍþ<蚪õÿé X_Ò¾ùrÍXCVÁGñîøxçÏ}ó±'\ˆÙÈkã9iä–´¶ÿ% àW~ž¢HÑ”£ýáGŸ|üÃ<0ìÿ%þ?Z"÷ øoÞÿ%XYÿ^ ¥A6j@Ã\‚©4Û? À¡€Kìÿ¿½µ³ïÐA«q"€ôÍÕPÀuÏ2‰C<Ç'brhõ(°&Žà ‰›—T舴j‚x^ñ¿É’ÌSçñj6²Œ(/À`@KÇ_Ÿg%úTtc¦Ð`®5³øŽ<7»òXCƒ¶TÛ¯P À&z€ç{h €xm‡¦µÍSMD° ` À÷ö®s²OÆ3)Užº\JU•VXG ësÀ¡—§4ÍM'Fñ ‹|Ûãþ|( 0…qtÖ4Æ´¢J¨ùCHÝÁÀ­+—ov Ö¯n7™ŠÞ£z‡ %Hý¥À4œæ¨¤™'ÐÀšõmÁ‰QJÓE¹üá. öC­™M7U®Yzu"ÞpD®§CvÌÁS´Wè?ĈY"â«Tð¨:t#—6îï€[Á.\Q„žv<ÔÛ/™Úxê¬ +sßèRT&0µÓvûºä)2.m‰¥eŽ:§€œ£@€MªMþ ƈh½þ–!ƒýCgaC ·¸"¨‹×D®)yóèq¶ÙÈ–ø²Ð“ëáØ™ý™¬F“c6%׃錼Îbý› ²iþ§$tΞu² v:CÎ÷pÎó`-Ô…ží°eyûCÔìÿõäðg +è À¤óXèEþŽy}¨€âÞŒ°éŒ! °ž¦•àÅpKß_%ƒ”)î÷Á[÷fO’Ѱ°á¨‡79:Pz‚j» o‰ %KàS^àŒv—1¬yÐ2rRå1ÙP?ËþbÊÄoË’fö¯K· &GNßÿÖðÍ7*Èykÿañ¿þ?øTó?‹Wªç Òtùº¼¸ 0ÒC|5Ù;´ÚúY¾­ ÿN\µõü?+@Þw/ðÞ©qó€v€[@†~à‚­a ÿó“w~mDTCðo&>ùä‡zl°õ¿ÿËÐÒï$÷ŸÜ}¥0:wæÛRXz¬l¤XøÏÈW ·`àÞ–!8Ð,¨q€vòjûCŒì<‰úÿ‹Ä—@¦ÿë„ Ð%Ä€$18Òª ²ÿ’KÆþ‘IÌ >Â+þ—=6ÜùË‚Ælž.lJf»¸P8¾L|w<¢ˆÊB}¡rcJú3t¦Ê‹MÙW¥Ž1‚&À°U'  ¢YYñ'¿TR:ÿ ŒÛ;{½¡ZÄ·,íÃÌYú REïPŽ÷£é‚•ªóK³÷ Ûp¿ÍlÅA|›k¶™kíÝèJ`Èëvgã +õ©£ÍÆä6™—xùP»Û|ŸkÖJšÍ 4˜A+Ûinûñ +)vÆ&Mç?à _ªѧäZ`d”ª})ˆšÔæz[=çL³ˆ‘‘d±ïäÿ)¼ÃþV7OÚ²¡Q¶ô{1¢”3çZ|=u£´äæƒm \ÿãÀäzhL)IU ä\xÎ6ÿ£¢Ï`Âzý#Âë÷÷X½ôðõÀ2 $ÉŠ%VfÕ/Qóp¸ðL@¯y8=µ½òà!fj²îH6OÆ™³< +Üø£ j÷O)èbX(E¾G @rcùŽ÷!CÙ›š'mQö~“Î@.Ìrns°ö„ÀÊ{¶ ß ÆßJΈÈ€ôðŒóLFÿÆ1OZG¿&eü?×~-å9^Ð^†<ð€Ÿ˜ÿˆýýß|÷wÞ–¼cË€³¼ýö;ï¾û®“¾óäuÖd@Nûp÷o}wãÿBÉ’ýJ…è¥éߤáÿÝãàÿѽûw÷ì\.ÿu@5‹èøñr–Í`A½­š —;ðoð†þŠfÈdŸþî üßéW€3"”‡&|éeܼrÝ' ðq)]C@–Yo«›^€º‰ÞÔì8†:4ï~ÜüööÃÅc!hú³¨CVòøÓò˜5î¡Ì×*@€Ó¸@6<ÿ[5PI9þþ{FÞ»w|´÷Pƒ?ŸcË# H"M ì^Ý@]/€ND~iK×.  ý#ñŒËï¯ÔúÓ§xŠà¾£20ªx¸'=ç÷E9Ds ¥œyh. ÞãÃÄÍPæÊþ<òTÒ!ZS·½zG^æ¯AÒïí: P&„8N‰L ¯2éõhU-·1„%ò£‚¦ãùhŽÒQG¹é¿˜qÄ„\ë÷žM{æƒK‰ <¶Ÿ¨ŒÂBG/Ðÿ£9)sõ‹ñ?Žœ (E¥Â<ØÑ¢¨kÅnQÕM§4…€õç›UÂYñÜ<6àÂÕ®{Xxfïl‰ýψXðœ]Ð0™ü›Æ8ùÿóÏ]Ãìg‰õï´ÿϳⶶ5ËÌ hsóyÕá€âxý ‡zù•Wßy÷‹ï¾ûîüã7üîø†•?þáþóŸþø§?ÿáßÁjª|]®:ðšÜ èÐ_€a³™à´ëO‰$ ·£Á~^€Atµï3¥ç¸yzóœ5›`<ݛũþHìÍûÁ1BÿÃB—-á¥äÞ·7÷øÉ…øoà¿:Ò—„&NýþŠÿퟓ€«;½½í›[¢Ðvಿšîµ×]Ž* `ÍP½Îô¤ û¸,ÀÍk×¶ k + ò—€‚ÊëSd2CšnSÃæ@©–5ÊÌŽ~AþUj³Ù|ÔÞÆÂW™"ú€":¸ç€a¹ÝAõŠc:¹§Ð9Ž–‹Ö‡”©¥Ö@¨°s·t „9€Mí«¥U +£‡(:¨ ¨Ÿ>mhš9J³§ 5l^ØÄ~Ào2(mÑ=Ê%¡I*J>Lcœ\/ÐÔX=üTaqMóÉ.^Ûx9Ê\Svü«GƒrŒA‡º³C? ‘˹¬D%-º¦hLõ6ÏzÃ/Ù†QÌèÒy 0.Æ»p Ï¡«D(,Dª‹ïmñP6Üê+©åÆöóë‡fgbFßš’k¹€Ö-´Åܪړk‡ÿÓÙOVQä^³{E÷ªëÍt”¸åT´ÅI—s1§ð?w=ï6ªDÔh“gÀ¿°q¶`Ð'gy’‡æ°Ê€B€FÎöäÍ*…pA@ư–zþïPjY<<©Ã˜øO9Ò¸k€µ³Éþ!k€Ž4Àz €5‹ò8ì!œ?{{ÑØ2 Hòi@~ذ頌Y^, 5œ5e8Ù Dûb1nú7Œҟ׶/y¡-œøÿéű«ßÙšùÿòõ—_}ëýoþâÿñ/üÓ_þôç?!ùÓ?ÿóŸÿåŸÿùŸÿâ¯HSäë²ô8±_ðkûÞo£9 ;OhѾÌ~–µ‚8„e9ÎŒî֞ϒæøèñ½¶ZøxRlû—&d×8ø +4Îß6Àë‡÷èD ?ÿþÂÿÖøoãö6L'ЮH-K`"åÛtCìÿuÀñ}Gº²µƒÒÖœ/´·ìP€0€ÿïwQ€GÄúo€«¼â(äob€ðïòêµÔâäâZ«&HCþæxñϹ0¶N&Xv?þré…¥˜Ì³ø)§Ó¹6"ßB ›vÀóC€¿l×VcˆdÃmuÆ& bŒ ”í4Ž—ðE9%ФÊÔ¸¼¥fÓ  âu'£JýÒ/±JY‡Qx +²‰ê€»ó!ÌË%ªV^àVò–\£:¦=­ Íè6¾Ó’@®Q\@8DG£…‹@`-·oOPkêBHé¹ÞÙF +žÉz;Ü£yÕ×ü'cHÀT7 ú°?úh‹³`.¬¡_g G˜õg±7Û¯} +øˆZ.X¢°{¡F™+q{7%•òƒ~Û½ñtÎŽ‡Bº %פ«œT®½~u+¬‡,dèd[Ì57íž¹ÝÕ”kädÜK®_A©ú¨ô‹´½k;û”"UÚNçŠðz¦€Ë?Û@.¨«] À…<`zJQЯU¾]àã”ÀÉ õ¾±‹Œ-§cÒžâδÏöÿo±¥ðîæ:ö:E@âOè@] ×uÒ`‚²{œáH µÐªA8¹0ËVÛ&·.ì¨Ä)ÄFò8QVþ£°¼°^’3<ó[€Üðg{&0€Neÿö|¥¹__×ÛÚõë,žç«6w»Ø€Ý¯ãß‘ÿßÿ_µ!ÀÞvÿ{õ­_|÷ >`àþÿíŸÿå_–  ©òuq  †ìi8ø5°ïÇ—@÷û~|OÅÿ&òw$À!€â8; ’™-žùŽÙ/´ëèÏò4ô‹°\ëðäÛŽ“PÂ!g™ÿÖ%•êm>Ë#²ô»ÙùËq€ +ÿ?ÌÄ„µ½aø½£ûÇ÷ö¶Àû­­ ŠÇ°¥ð÷}ó¾1‰Ûà(£¹w¯½¶á€ð³~oxØF²˜@ÇçëÚÕk+À1±ü—ZŸÒNž+)@Yxvý^“=~º¿p5š«°8ͳÙît2Û|À}±€´°¥ûãñ}ôå\õ%op'Àø`wt8žÚ*‰ZBç«¢šÖnkW˜³Ñ»†®€ò¨Ð3Ûƒ/ö“_Œ†h”¸A Ø‚CÌU¡M-Ä/T `&ÓÝyiǸï§@ûÙ6O®ÁåÝþïæØ cÏ^Œ£é;Ó;p˜jÄÕ–¶‹(oì¥î"\øx{Ò‹†v5˜ 4̆óÞðw(Q$8dÁPÝ*ú°7ž“4×*$ú#=@Èò° MhÚ@€Kð¥?s$\Õ²$ˆK¹3ÞQ)»ñ0ñæ·cAf™·€·ÙI4³”8œr¥*ÚÁ¿ƒYoø5W3Kù­ìϽÿj³û ¥KŸ‰ÿfð<€÷ã åÉû{ÆX‚Ô¶`¥?²ö}c„å`ÿÓ<äü<ûoÆè 2Ÿ°69°Æ„<Ö¢è¨ Úà¤nUY¼h +l`%Ø Òã6€Qb å?'<›1P€³b$gÄH¬¡ƒ“1w$Œp©¢þ·ˆ(«þ{È+ixõõ·´ûÅ~Ýâÿ+¯\»þÊÛï÷‡?èöÿ#æÿŸÿüÇ?ýñúËŸÿå/ÿòÏÿò—î¤éòu99@<Ü~GDÿóáÿ„Y®ôœÈ*ßçDD +¶Ÿ!Øëéô§ë~gˆ‚ol5†C‚4˜§½¡^ +î›;ü¯³…ÃónÛÙ¥DMÚvzªpB?9?ážïà„] Àë !œŠu±£n€4ÀS<©”¹"…RàÉ}~d € ZI ãÞñ¸m°òlÄè¸uºÀy}æq8 +÷ôÌ›Îê@)–7ÁÂñûY¢®öó?Ø Q_¯úý&¿ë5&PùZ ~½@Ä8mÿŒþ“Ù.]ë—ßýé"?Ðÿ§¿üé/È?óþo€a%òç¦Ê×åêÊ©Æߎ +€èýŸÆ‚õ,ÁßU‡ðO€³#š4Ì~º@$ÒðñÞ\àGû`ú?þl^y~L @I0]:Üo®¿ýñ–T7ñýõ¸ÃÀ‘Ôõ2@ÌÖú·àêÒÐI1€£‡'<1û_ÌHÀ®_5Ê¿½H×qøŸà¯€#y·j‚ü O‚KZ1Î@ Ùðå¿//Ú~.¦PýŠ« DtÙlº˜i!pø.üÙk|6müÍñàÙ\vü*Híï;’èŸ(j”ÜXݯVRë¡þ~@ÎðҽƗýûÔÔ¤>ÞÕ7”%{†) ‹ÑìË…¡ SàC“^»#~µMBD3×ÕTÁE¡MÎ~î$Ÿ\jo0Ûœ®âžˆ=Ó;ú-À$ÎMN9€„TQZÓ‰À6ÁÚ4‚€?lTPr=œ¿¯*D'Î{C +$M†(ÈPFshËb>›ÛëB݈b=,4F5 + †ûC™@³^ºÄpcK4²l}k`b5£Mµî@C²mI{ý(R–óõškì2Û‹ðV 0Oa%І°n$ûÈø¸ +s=˜Ct³á’Ò¿\t÷®?’^“Þ…ðŸÛþý<°#¥‹Ü7=<3@Øü~ãpä³=üK&“U„¿Ÿ@eѤõÐuÀZ Ùd‘{Ã@Ͱn4ÀÏÍ€`¸_#ðúÙÆÅt1'ÆÉ7c!3ùÙÉqVîÉZ €¸ +¿">9'<©™Íý*ÿ°“]l ´L8 [Ûí~†ü›ÄĨWÎoó?!¯: ˜ÿÆ›¯kýëÈì?ÿÛ+×/]û_ßþâ»?ýùþó_þøgÐÿŸÿòg þ?ÿù_þåÿþHÀÿݤ©òuyñæ&°ßÿ[ ä.ŸŠ +@Â\œ; @°~õQøæ½ð쀒µqoŸ"°gj€scN‰­Gépo±àõãc‚àKÉ-ooÎóÀm<àã7Ÿ3^€Ö@U«Wì²´†ÿ€ÌüË¢ðÿ¤ r ò׫zÜã®<ùplçpÚ¿-‡ÈËÖÿ+]ÀVyx]½v³j‰ò"†H„\î€Ï¹°Ðð†ËšÃ/hé‘Xù¼OìD³ÐIYCë¢YE ´Œ#àtÜG DM°6Ç“&Ü6O{” J‡^­€A%·½µ½uy+c¡†µÄœ.ˆìê€àœ‡À´( }'Æ–þR{Z ‘Ï™ƒWI@å\/¾6"!¹®<±œðÏXÊ2ž.À#.Ëߨ# ªðN°PÃÓKn?8ž³‘®‰ñ»âéY¥3t%ù=ϹYÎG3”)‡ØÑbj‰_’Æl¦bÖ›.PȲ”ÜJF]ŽJÄXÚ ÐþO€ØFñ©ÕG‡¨Ý-ý)"9¬ iSÈ™ Âõû;É5Yä'E”\kº›k2¨óߎ@MHJЉ·´efXõîZ.‘ Ën_‰8[{=]„׳=çôð^"] À…F,Ì×Ô*ù±pÁq(×HOy~è8ztüó‡7Ê-zEñqøb¿7bRÀþs]'<ɬz´ï%˜ €I/c MT63²ÀÖ3Æ 8y¢Îðl›5Ê0ŸC>y¬U¹ÙÜɉüQ¨B@,Ô¸j$UíÉ!¿Û…(ëëMºM¥¼ÿ‡zž\[¶þ?ßú»¥¯ +è^ñ¼œÉ}ß|õÍ×_ýß ÿÃþÝ‘¯ÇðÊ;ï÷§?ýé/Ö ðÏæU®ÿÿûÿ_þ[üÿÿüÏÿߦÊ×Å&¾“€ÿßÞ¿›€ÿZœ# ô;éHÀ¿ƒé¯à)ÎóøèÁ3_ûë€ý&HïÈ!÷6<Üá°IrÇ—ïvÚ È±øßz«e ະ_&ÛÖšàZðÿfÆÔþß¹Ù¡ÿñqú.›´øW íý®spCR30¢àZyÒÇ`c€Øþ‚¿ø¿$<¨²õ5 +P³“ôÿý—ÿÃt8›|9ëgª_.xìQcaâXA}µ¡¿˜F>ÂN`Fo4ÇH.P"QxF  ?U© y©°Ù¦>“Äó¿u㟯Ýhï¨6É ±ÕÇ€ù¨ÿåðÿÝ—èヒ/9½5 N†Ñh¢Y…úcT’rm;;ÿªº¢¾à+“YØE8 rîÒS=(ä`\…Ð’ØËxF[‡èFàåX„ÆÓcòó·:O8EmáOèB‘œ\¿´¤µúç‹/gó¯óßý +Êb{Éx‘¨}±×¢Qetjî~kw×NÖ¥W¶¶5‘òæj`ŠPQž±d`NÇš\šk•\>Áy/Kô2`*äÚ«é¢(3£l·áoMèÙ‚sˆ€R…,áß÷ió_K3ê3åûö°XAÎ?€Y¼¸À^I-àêž9À÷ˆ µ•€+é<kã˜ö÷Ö>Ë–¢³bÙ €Ã“b€\tyZ †?ÆÉOzl£hNz¬7§c84_Êþ°…<©õ»ÆÛò'wÙÆ1êö‚ð÷Õ“½Ýÿ)‚P/ħîÔ^Þ»“¯nå|  ýB^õ.7ÀóYóõ|ÛÚ½ãýÓëÏ~ŽÈïWx]OàÛ_üðÇ?ÿå/þËŸþôç¿€ÿ|þüçùoÿ¿%8' ð¾”_ó¾k`£íß§ ÒwÆ÷©/|ê%ë:ÒŸóÒP€t̆¡Ï–Þ)€7õÇzV ·»ÃÿvÒ‹‰Ù2G2qÿì€ûz°ÿ·ó"R€›ÿK@³ÿÙ½bŽ âø*à yº^â?$ÀVŽ@2°c­ÅýßR)à#Ú‰Ï:_EGZ/N^Ø« cQiž^=B §«}ÒCKèJV[ g*‡p¥ïèw‡˜ ‹¹^r·éOˆ½Æºš7ø~f †.Ê…‰²²ÀÖ•ía¯fBøÀ“QÍ1&¶H­×›õ1€:}9ÕøŸÃx‘k¬}ùŠ>ÀL?;‘qs-#0×¥½TUîì6hö.úk6ì/ÄbãЂÕêÁJo×%¶a‚yQ ò"7N‡;ãÅÿŸ¹{q3KÓ}Ñlh*³l°×šžö¾iRò®-ƒA¥°bb6‰“}‘PÌfRTþ"t…¶£Ý¥•¥tevwRŠNï„EÁú&¹îO0^Æ’¼ÈbþSû÷{Æ'…¡Gø»‡NŸ¾ÃøÞqøÆó¼ïxÇ4gGi;[Î៣&S0c +å̦³þè`4ùV¡"à”›™®ì'ÅÛÆ†¶?‚µ¥Î¤`{‹¢#_xItÚPˆQw‹6ßÙŒÁ5øÇd éz,ªˆFæ¨ú#žFÜÁ ÑƒiãŠÔ¤AŸÚûI»7é¥SEo1oÿÉÉ®ša—ó^,Ôµ€F˜·„¹À›€cÔ<×ZÆñ®}V,ÃŽ€ø¤7lî@j8ßßÄñÁ()!]sêÀÓ@Ô^ʹñˆ<œš<_ø ª° «>€µŸb÷èêR€Î=çn#X³Õˆ6¥Ihèê79l$I†ìß^8ÀŸFÀ¤:UÝâ%b“9CÐÆ@Ëý³Z~ùKÇöÀO¶.9éödÞv–n—£YÜ÷jºý3³ï'w®Ý¾v“ÙAÀ÷Ï´ÿ^ÆàÅË—¯?T¯WU[¾ìX±è˜±s@Ñü3Pþ ð—CÅœð”9JxüØœ^2ŒŸðBï_²ìžÝ€Ç-oï@úWÿ”é9Áß €Øb(ÿsüßÓ3 á:@½À@â@âÿþþî~ðÿÞæ öQÜæÚK.(D¹—™K4îZöd" «3VŸDõÁ>Žó`Ë—Ö¨"Å@«Õ åä‘T±v^ i¶œ!jÐfÇì@(Ñ&¨ÖÄÓZLâó†R56Ñ¥'Ît0£¡á@+á-Àq?žzn¬þAKsñCÓƒâ_€­~[<4Z½h›Žx‹Oœí€š-’joI+ˆF;!3Þ±Ñke1à4 ;|H”=âˆÁ'£zBOizÕ –}HŸLdmÈ}Ù–“Š ¿æƒ´€Ó^sp0™= ¥BD(u#¤ð·¥¶ ©D +ÛdZE}I¦í ,ÈãüÑ¢Ž?Í$D´xµ/|ì<v§$ùa½=aÀó­‘*3J¾nš¡1ÖŒ`Ë­Ôm ®Rð‘Ú†wÖ«àz\Ï S[z_®],“4·¨å¤þ²D­9þg³‹¬µážùºpN€bÃ(«žcSõ×wIŽåðÀi-€ìܰìàƒ²ÎP@Ò’K*€€… >h^!ÚBØÇ £Ïq º@wlíÕ +”êM|Ú‹d©S䤤ó $+&eU 8?SO}¡ßÌÓ…(d·÷&´$ÉçÄ!r×QÜ•sê)«D½Þ<á5Õ$-õeðþ}¢ÒŸ3\»zUô'ܼé@e×ú½rùÒ•O÷ÝóçNî¿|¡ùÿ…Öÿ—±üT…4ä«á¨@û?_÷øªö¤ úZöÁü%ÁÖÿ´9ì¼6l¶6:…œÏ`NÞ¹@%tÊš˜EÿÞæ9_$£bÑûŸ fy?žã¿€Ì$(.é°ຜ`1àþ+€b¸4_  èîÅ@±ø)ÞÅP»Å+úÿ²`KðÿÃVlÚÞ<üâ% ÞÁúB)-i2¸LLØ<Õ“ÈÚoO2@HÄGrµ0ÿ¿6G-—Þ™ÎÚýƒ§ 0š®šø`BÛÑ¥±¦áG—¶™W” â<ýNwÇã}!í­maÀ™ "Ö„^œlÕmØ¢µKEjXñ-¨’šp¾{IIÛvI|"’ÓX´m‚|£Vÿ€ §íA‘Z]ÆëIØ@¿–'§¥ÓZË,Á íõNu ɯ~o +â¼BhÞ«BWÓ&-\AÄ–³TRÓ0ƒƒÉQAMØ Ùš A3šú ü˜*;ϲDù Pñ]ÿ¸½Ñ™NfÐ/­5¢¾Ä£ß2e6öãi§¨gº@êÃ8¨«0 +ƒ°ò-RsS²AÞ$"÷n’ÏxÞ–:ÁzTAÖH*â¼&T‰ã+e\yrÒ(€Ì*i†W>§YN º Àºyü¬Xæ£ð˜àˆ›g÷0p€¼4pÁºyø™€€R"yNLÛœº„HÞ¸qåzT,[[£˲@‰=5£bø'õ‚‰ gÛC¨²ŒÄ1bªã“íB’a¤œè;PËÃäµüŒdjƒ!Û0·€óùá™î'Ǫ @/@áÉà#µþe ¦ê<|øSQ%ã¶¶3†´4åritPY¿UKŽf£!útðÔYyyêE¨?ŠåtäÔºÃîe`¡hD€V¾¥·hdÓ@Öõºº+×Qÿë­º>-ï­©PP±¨«æ/ ?-VÒ@3Æå+RtYjâk“0g×?ÒMäÊÌÞf¯¯SR“5¢Õ*@›Úä7À iÑãÐl A€ÞØÕ ïñÔA€ì·›M4Zv¹ ZÄæZq›ÈƒÈJ혼ÈKPL= ùÖЩ՟w9æÌˆµ?®ƒ,SàBÏ}Ù ôÌž ;KHlŒüJMªºOrI#Ø…Ô¤t4C¼ð5Wúk€NNJL‚Ñüä/´ñͦ ì²S6Ú/¢+3qÈ +ú/×%²(j4ÄÿP†×…óYø§6ŠNýÖ>nžÕP@WÀ³¸Þá<=ØÀÜ`|&ûq«åy”s­ ø_ïþÎ Â^€ú„zÿ¿úAðã?N à0Dõüï9`GoÜð”@…ù%,q à÷T;ÈçÎkÀî¡`#€jÿéáÉþ.³X¨ooØß·œcfØ”ÄÀÆÙ_$Ã™Š’; +R*áó9þßÐ; ݶÀü‚þÅ`pgПP‰´ÿÏû€ÿƒÝû :^Jß}t÷%/ÖƒàR Ps€ùËQe K VÕ„(±ÿ?üMO÷ÃÀ³nØ0Ñê^÷™W_à‰·x„iåÒâ¦=¡5äQEAQtçñ§½Ef61>Î<óiY «ƒûhµÚ[¨6„èK´Ql§q2»\ñÖùØú\Øæ @WŋʠòM›c@·Ê¤v¦'-¤Ó˜y"·eR·H¨½òýfª§Ù©'³>B7‘ÚQˆ\­CDàÆl·hZ93æ`+èØš`ÁV„Íùd¼±!í3w¶qææ¶|EÞ„.m숛v6hâU(®ÞKµjŠþäí¿Ý#ü1[Ä6q€ l¹î‚.“b–_Ç¥.fÙ8Ü¥n2˜iãTRóöUJ‹}”^¤Ió\®L¾ý+ø_ªH^N›;- 3ÉymœÖZÖŽptEî4÷x³QÉ.3æ-[ì(€³ù¤ @úCK]o>Hb8Pe(È"-‰XøXÎ…¬ú¤¬JJHס cQ +á #ŒÈ¢¤~åDvA©-æ‘R†¤ÄŒç£ã­u˜ñ„e.-X!)†ñzWsEÍ#K <ôì ÐçÉçÇ4¿[ †§¼A3:)qDZ³æ'‡vÛ[Ö\ +³ýo5ä1´N–ÀÖ!Ò—àÖá?· rÿ€‚êç ¨ûŽÔ€ï›z\YÌðÙ?:À÷/že‡¼²à§~€T£ÿ¿US¾B–¡=sø™÷8 €§œÔ°@ü%ð7´Õ$€§Î@óÕÞ¨¯O Nòد,åòÓ§¿G€2ƒA…ùZôý 8û{áIS¹ª0ÇÀÞf+Ns À!ÈPý9øgÁß°·¿»·»+ƒÓ7@į €KB>*NþZøTc.–Qš.]?Å |­¶Ü<µšæ@h ©š{›€v‚f‡¿<þµMOxNð‘Ï©£ §‰öÕÛDÙ·çùFa,¶Z™ÖžÖà08ÀÍÆظpAYÿ <ÙìàX]E8.ðž[kÔÓÀ¦±çös@RÓ:”Ú&“[*wNtÉ~lTU +n»%¼)µ¦MÌ<ûšJpR«OÒ‚p(M®mªróBÒìât$“~\®(gÙÉ_öWRsk'Íp&µîÜòAöGÞ îPþ3n“y>¾pác…i5K#<.W $_ŒÅ8jÛšÌΙJŸ6Ÿod–V¹_½Œ}ˆÃ1»vRk0 É6 ¹­"f7*kêÐR%r`¯ÄZo”¸_ʽJŽp%õ \ôò„­øÌ(d À»˜À7@·ÖS”haxÝ(€7Z `ÈH»4 +À °&R"gñ(%jUÈŸ ÕÚ´j 39÷0Šs8†R—“ý§+ÞN>I½”XA†CDeŸC¯?žm;p,IVÍ ‡’îl*ÃÔ Ñ¦Dú_ž%NôlrÉŸQ:l·arã@>åÖmw4þ#yÆ<*‹ .©á“'ݪäWÂ! ¨8ÀbG û˜ ûZ Àú ¡#Yi‡yÑÔz×H­V‰ÔìTjCd¤•™ö´®Ê‡\æé3ïFÂzЖÜ©seÑú£Q‘ø^ #1Þ‰±E$3ûNª”ßlŽˆ´¸¶¥HÙji7—Šd‰Õ/"qAI³( ]àßP“qÛz­…¿d&2˜ÉAF“!ó0~[%µ °›JMQPr‘Úã9K©à#+Í9kƒÀïx»‚ÿ“@,T¨ôÔgÄóÚPd’¿XÝþÍŽæ²)å‚þySñ€þÀÉ*¨mlƒ‰äÙnªô[à2òWlsI«?ñ(Q&‚.ì-{H­¥N¬£R…Ë)7×Yã˜àçðlæu8€!g– ÊG™x*kŠÒõ¥PÝp{þ¤žë²Oþwósø)Á¼j÷ 5¦:bæÞåc.{Âp:Îj€é¿GÐn} nï. +|G4LT²• +„œd¿6hkÒ2àW[KUÈ1‘Ï€ž¿A¸R”g2ÿì¹f÷ÁWîþî»gß?çõìù³—ÏAý8þ íÿõàï+,7úEýü66–°– ¿l仇޽®Ÿîà*øfs§}±vñ5³æîÃ?ç À€g?^ox7>HµðÙy¶÷~Õ 'AÜäS sü×pO ­ö…‹™ËçâÜ _P:ìÏ€þ¿»û ,´d¾¯é˧:!!@€áР𸀗¯e + DÚ,ѾÑH9tÌ‘¿Aª^µr¼ÍUšÝaÁ•´[´x¶<ÿ>ø´8}°ÐRÔu8!xDÛPÍêp¬ÚÔÚbZ‚š&€‹í¿éâw’š…¦&#A,š'#²Ã´4£"uGŽ|§=WèH6ÓÔ¼"ý’Ô¶z¶@l¨ÙÄðêE<»4dÚS”Zö`R£Ž%É46÷@=—Òˆ•>TΡa4Bùo[xš[^÷(³#!4@õo2%Gªh–i޹·IcIûH&Ø:’?Å@ +à>!Ó‚œ=Ž() ®·)ŽÔЖD—´ºQ|¯h©•iûݦhWµÑAý,ç$lÿS[¤ˆF¹ +ÿ£Qšo]lÃVfg!6(ÝÂ_Hçž] E½œ;T="[¡Ð4{#ö@¨Šš”ZE–ü4ŠÈhkÕ(2Z*pi7T.ÙQ×/~k«]oôÂ-TÎ#{<™TªùaŒµíLËâm¥ý&(ôg3˜œº=»­LÖ ã1« ž + !(™ž‘TYʼ­2^ÇË¿ 'iör?jôZJQªòC$dƒbiÒS%TæàÖ‘×·¹,ñ˜Ü¹Áüê‘åÝ2r´à¹ŒKÙ5œ‘+;ë¸\œj&ñvÕIaf㫤'o¢)Äîa»©‡P.6OGÝß©‹æô€º"Ù +óâA'ÈJM2,?P¸±økºÁñ÷ìPÁù¹ƒÿR€C÷ƒG~ùÁúôwyñâÙ‹ïö÷™àÕË—¯~úéÇzõJ€„Ò”¯„c] à_à¿Êlè%żœ6Àܰþ¿Žt\ Èó‹Àë €'?ùü½úœ}2‚õ^¢@È €ŽUXàÿîÞÞ½Îðߨi¨?„ÃõåQÐ)Þÿ¼¿¿w_ +p¯XÀyµö£€à¼]ùäà†qKî`¹Â[.ù6FšŒ0|I©‘L©¹Ì{r&ȋԚÛ=Æ}›„Èï¼l.%Øl*»RÅ¥¼KAÉ]Æÿ‘ë ·ÚQ”yp:ý]—Ötï(€IR#fúþ³'Åa1EÖµéá­ÿôIDATRrÝp¹9]!&³Ÿoâ |Ê>À~«Óè)!ÏZÀ—€%Á*åÍF“‰s>WµšXTäf,w£R9CWÒ @ª-Ÿng8ÞæÇgÄÜ#"b— ñOJ$«çlBGe¿J`tb0¥äŠ»£7мìð¶a“ì PÞs¤À"M n ó-ΪëØbYZæ'k(#÷äÙéëF+ÁqÛÔŠ¤©½=ûÛ>^Täö,â<›d‡@Ýóû¬‘ íü;«‚JÊÚa ¨1SØÐ†ØˆT³?2XþÚÈòÀ¿èß +¶/ ~ë%”C øž-__vÀs¿ðOÍÿfÖÌ,€üeÇU'úàòÝß~W†ê(úÐýÿ_ýµÂÿ}*,OˆïßÜÐÀÑF °þ—|W9@k>à€Çó¶¿ßî ÊÖ²÷„©ÑnûLïz¢àù¼=XT+)¥•« +Kø_|hÁ/k:T  v©V Y øÿ.üÿ"=†ÜOì`|É`׿Óþßà¿ïòZÀ!ŽpaÞU5)¨ à“å?ø 0g‹VœçÔ6¶zv§´&³©³ä1Îs­a6G‡Cÿ…RNH+ÙKß{.oלז¶¦ºÄæO{€¸à4[v4Z#›ƒÒÈÄðø_B³õ±­hZN!>pØûÄÍj”‡¸Õ½ü*u{6EddÈÓÒM§¨øƒ¯ ¶4ÊüO³e]ImäJJ`?èìÃʽÐÄÚD{Œ“+Í69\âêéA( Ñîõ\diJsëšÊ¦¹ä7;ËF€”ìTá"¤¦MMb Ä·Ñöi»Ý_K´\ø˜lI{šž šúmN"JBµÞ#5[‘Ú…•º$•ß™FlO—¶˜F£¤ì :<çq™!µÕ#¹ÁY© üw*×åŠÃfÁ"mÿÅøßræ…éÁ,ý¸§ý "z±{/~$1lÜçÝ…2~6y ²¨7›Ôç­_BÕ)iÓ^QÔâ+|xܵ2{c´\*Œe•+‘ËØòüä0LLmÙvZ‡æœÑßÙ+­rCrZ=ìéžÏ¾n]É¥"9%e*ÌqóߣíFîŽü›óRéØÑn’œZC³†i.pŸ Õð +žïQ‡ÀWÉ<Û¦±IUÝ.ŽÒRò‹r¶JóöŸâ•§_N +ƒ°ÝèÙSgMAVRoAY +^F z!ÚÏõ S‘÷5 @5iÏ]“ƒH¡Mk«®#¯f)v°³Ñh4]‘ÝÀï%”CÍF븠ûZ À›øüû¥_üÂUÿÏûÖàHÀk× ÅÀ  àƒÿõ»ý÷?^<Ï$ŽøáÇŸ~|õßU(MùJøèÒÆp$ìAn@Nš pŽø‡_ŸŒ×ÎüÀƺ¶Yí\>¯W,2‡Ó‚§zöýм€·ds)µ(Õâÿ“{»› ¿Ÿ{ú4* ð[áæð½^ôÿ0€‚ÿÿ,Ø»¿—‰€âp=*±|¸dXòXé¨:n€þP/-àj€@a<›ë"­«€:™öj•°J+§ò4Ó¨ˆa§ñÑ »“6}žF3à\bm½í²ü± pŒ12F?óCN³½±MO‹™«Õµ”€ ØjÒtä“n­;8 3“ÙxÒB%öÁhÒ Æÿ¡HmÔë”äqDœ 5¢n#2m·ÒŒµ=ÓÛ#5ç¦Áãð6& Rw¦–:¸‡ÃÜÚ¯(Ä»+ƒ&ŒÆÆÐ¦WÕÉ^T²bÒ¯;怖Ўj¼‘ã Gƒ €¡" ÞUKˆ3Må¯!Íâ@C¢I½aZh¢ùO`ÌÕ½Þxg*Ù:”Ú;xÜ=6ÔÜ-À𥦱vÇhj/®R;Щ) …Ešºå†}b /53JͰÿÀù— +<¸dPL@<’.f† ˆE*©–¿ ä,áù­›fŒ·b„0Ut@ H°Ô*Ùã7AR)i²*dIÐüÎh«I–¾—œíuÁRUéÈ™/¬O¿NÞ¦2qs4 ÿ”•ìß?³ö¥) ˜š0q“3J¹XECL ·5Ñ\¬tÒ'ûü9ߊÏQ3qÙƒ€¤ÞCŠëHj‚é°R¦VzgNI’ª®µDVr"ƒ27òȵz‘ŠÀAÏ7I:4v·w›óHçŒJîUUÖªD­^Ý®û yûÄ\oð<“ÐEIuáV) ;›-°Ü sMÀåíåP©fãïÑðï_;¦ïoÎÿ¾|ÕÕnþÝÍÛ®ì<€¼¯\¹üË_^¹ôûýìçÛNÇþø×Ÿò:ÉàV…å'†FÍEƒ3!À± Ü/pÁÀÿëæx\&ÜïtPnëÍ^§¬…¿öµÿ ²Ä­ïõÏ4¼×y’¿a8bX +»÷îý|öîíïí: + ^»(/ÔõÿÚ%@#ø=Ýÿ†½ý=—ÐÐÂÓéŸ`q;’ ²,Â¥#À^.Ì¡RKŠ⿰ðdVF€â°hÌA†4H`·jˆ“Ø—lAøæñGåßÐågýI|Ù¤%³ÅÌF4‹lkþÓ” „' wFš¥5Ós”Ó«–ɰ%ºAÊ3®W -Õ¼µðòÊ2¢PDGEƒ˜Ö›´èÒHÍå»8¹çéÕáA/"©sËbÚî‘äZ{–_S"k8”z8œŽ%é\àMœÆl^ÅÛÉæ/À替ŽWc[Gîç=BirÝ« íÉÄ5"ÚX[P«i=syÕ¢Ú>öhÛDs tÔjº(šh»Öt®#ÁÏŸ’ãþÃñ4´e1ã ÇI´ºì§u‹Ô Zé–¿²ùN‘¸ÞŸ¹ ÉU²’ø¬ +YÉR ^µ:¿Ò5(2µÿ/¦_ÌRŒ§JZÏ÷Io Rï ¼l‹R‚CQYÉ 2ÅŠBÊJÅ"¿9˜&òQ€‹7§I DýËD¼0c’‰V'Ä ”v›dƒ±{¨ÝrDÝcf”5ҖòÝiP–Óû‹qú%šrNo0›ÌFS¨!I:Á6™Èɹ΋H“éIš¶--¤ã¥àÚê‰ÇžÅOùSVFo‚lZ|(1³bz„ÃüM\ä§÷!ÎÉt2ðåÂÐò*¶Mlq‰@Þ0€"[¾è %È`#™@K'…Ét–§€`7²yÓr®’’s>¤Ê›¤:›C܉{¥ rrîgú*RÆÞÍî–3Íï}žð~}Ô×ß,\½,ÞÛ píæ;·aú”qü§O~ûûÿ_¾xäùêÅóç/È<@?¶À‡—ô8Í   :²°úì—0çâCü€Ù« uñ"ÚÙ¼¿Ú¿&ˆ×°oáÑ“?VNžixÏ>ïØpHîq´|ööö73ðu-1âû)Sø˜.€bà½Gؽ?·\:´äêÊà ÿò&Ì×HXa^Z…?ð¯!€W…™±#Àüq¦yO¯rÝh g£á0«Í3âp€¢íÔ¡ÛYBØËT –ð ÍBt´BiÙ hÚ’ŽátŠVÚ)#†ÁØÖVtRÇî9­  váƒÊ&!m5­„M M±2⃧w'D¹À¢|¸õÖάlÑ8ž]˜€ Ý h“t¨IÀüHo¤m“c·p/­vɈK[{^Ñ#™$¨? Ù ¥6ß"GÈÒdVL!ÓQ½;á9E©¹¤d9™ß· ¯µ¦Î¤DdÆÀ™_©@‰-òb‹Æò×íö¯…-òæc'Jð˜üÉn ) §˜ ©-³þx¸£¢L¼‘Z=¬_MÜæ÷h€Î<§-¾©àT£¶íûpæš‹³œË[©9nv3Aø·a·i ú5›¡ÿϦÓ3xr¡Uáûm11GS±4Q&‚O±È‹+ÁK#Hª~òœ¹=¿ÎDQ_º[`Š8#èôúÀ{·?i¦SëÐkªûÎFû3á`Dê{Ï Ó]j’H3Ý¢ ,`ò,KÌa<þãBo-M1+yx‚|ñgäDYC­&^l±GÈà›i +±µØI1;DĤwš\ÓkánËMû¹_“úìÃy!j&½ ‹›P}mÊÖl“öÃA_ÐnõœðŠ‹Úí-’÷rB¾ž€h“ Üƒ¸-Ø’íÖ™790˜È’]ÌÒ‚rø?Ïñ”º +±ÊÓÊ_)?+"×ñIA¡…Ùl÷t?5pw´'(ŽÿœÃþz}k ºB+ŒØ°Ø(¡:ÊW·û^-™ñç ^W.»ð_Ö¸s“×íÛÎtõŠ+]¹|éê§¿ýî{ _ À˱<õâ…Ã_¾øñ‡òZëx鯵šý"lØPkÀÖ[ +ì/ÛÐ)C^¿ +x¸5êÄ´»+ç:áýh³Õ¹ÊàŒ»O¾*‘¬a + ïÙàm @å(öŸhØËzÀ4ÙÝ~±Ø.ÅÀy|ß‹‰€{ûñÈL€±h¿ÙCÜ$š‚ü†E€vó²øûyUÕ„k> +ðË‚ÿ äðD?â,ŒÁC¦úÓšÍ§à”“áñ°Wi7Á‰)í 0Ô¾]ð%-—A³ÝªwiÉmö¼v”shü¼ßt¸3D+ j;\:MžmžP T«ö±Ú ›¿BÊó>çúêÒí>x»EŒNàÊÝòf"5œúð[§$ +ò…• +ÉL @ìßÑÈŠ €Û•t¤Nyl1•Ô%Ù½ñp¬Ô¹„w´§|Ïlt9¡M*¡,mËM^"|cÜ}؃hØd†64êÏøŪ7†O-Òû_¶jzŸÕl4Ñ Ì[èš’f† HÚÎøË-ÉLó—•´V£þxÜw@†9Ä™Ü?Ã@7¥#Ûû½à©a-d2¸óLÔBê¾§z4ÂEêÉpŽÿû/­F†ýkºméü7ûB  'žtêDû×-­¿åòl̓-…(Ã1ÉÔ~Áý´òQ({u´‚Rõ’MàгÌá¢Ñ{‚PÆ õé&ÖɤÛÖv?ÜÏ)sÀõcê ùOnØ™D6¶IâCÍG02GÖs½«[¸ˆE JÄ· ¬%»!£ýÑ„ö5©ø‹–ä‘N§žš ºÎ“=†Îyj4KªHSeÊSóW…Ú4¡n{: îdvÃy,IՔĻ +•Òóå”V$îBQ9“H;ɽDÀÙüyÀaBmOD´F&²×Ç„PÚ‰Ê"qŸ‘ÌÛZE‚¨Aä`vxÀS% Ayî•N¬GÐ*Q|×¥q¦B“‚‚|tØ×‘'#7•ØP¨Þ­T¥¿Uš§s†÷è ÿ\áç—çü¾|è÷c÷ÿm—r>à+°‚k™ àîo¿Ë,À ¯žÁ^½zá,e2€²PiËW‡—„ö3YÖŸÀŸ¿í3yT«ll´‹ óh÷þ4}ö­ùÞ× Xz±|µÔ?pôU­hxß>oÇb"µR­±ÜßÛß¿çT€ »Š 0ý÷b° Ñ@}õØß{tÿþb€9þ‹û#Ìß K]€ +ûóSY +C¨ª‰!Š¿Ùø€ç?Òs#@8€[ûëm½x"gßh¾ìÑäӨϺÍíH]€EF.儉Þpêõ%B[-ͨt Zvì c–f;7äéiüÕ*š‰ßµ?øXÕJ­€&–ƒvÄ6d¦›õŒ‹õpQš¼DÃÍi~¨vóO¿™T‰P$[,€r„Š™¦¤Têé˜cqMà$ ŒR·P¡P”åD“ΉÃé (å´@'±NÎff¤gÊPwàZ Q<Ù1¥= ½=í“#Â¥Kh5 ¦áp‚Ô¦`‚`͇\ôt¬ÀÙ6ªëò;'1È¢ÓÒD~l¯€0H¾ÔšŠdNzgò z¼ §lÌ.$LRŒ¯;G6°âŸv‹R[zUOCŽ! ?ˆÔ¶ÿÐ)¿©0­d¹kz„¨Âeì¿®¾f_”o|z )Ð"²K¼Døíþh<ŠºMü3ê¸SÁ$ľø/Øpó*ˆ;ÝuC:“ Í +ˆiO•³ëõZ­E@Q‹¦‚"låY_…QÔãÙ ‚Ť“,’Ge¢;r¶·åŠ:D+ŒöšöX’ÞÜ?èö²Jâθ…lq÷É2ê‡KA›D<íOgO3ÂN$<$¸!{ù5MÁwQ[º-©&Y³È(2ÅÚBîSZâþdͦÅÌ ü™Às¦jê$Š;#O?áípéµzÞ<ûðýAͧZØø oY œC:ëh×d4ðdÅt$Øsd¬5O&jCôYÐí’Šš4•$e„_E²xž´¾Åͺúñx†ä/EbaZ ÔÆ7½÷ex‹€ÌþûuóæíOªé€œ ˆc¿¼r÷O.üB€—tÀ¯ÐúÁ}8€Ë½\»à¥Ækâ‚IØ8bý÷½è÷4@ø­@µ +@»ã:7Îî&ø»~ð~åÛ_-Ìj@à×DpÂk·Z5Àð¾}Þ’È?"R„Z +»šñ‹)¿Z°²Ìçp!?ôÿ% ðÿO€À €û‹Ñ¿Ê»¢Þça þ •y@@©%^±ð¨6€ µ~Z_Iz±Ki¬Ä­‚;¶5ž!¸øìÓüJµˆa118)èÍÀ˜QévÕÙ *çœÆ75Ó”th‹¼ÌV›V”6‚fÇÇ·[¯‘Wƒx1(Ò8V–xŽÓÓ-Gˆ6Æê5C!Ô%‰æRQN@e© +Wq-²õF´œJÍ}F4]’Ô;ÁÓ¨Ÿ{¨ùØÊ–„Ûº™¬qœ£$zqúºMZáDƒtÄ-³(AÜmt‡Ð”Ñ´×D×ò­µh(Çt2äß$T©'½‡hY\¬*¸Õæ6ü @é<Öu«V¯\ËL€™˜ÖY„¥Nê‡ÆoZzª;æt²å$Àܯ$«×r™·™©ª€>“f°.Iqä¥oúKgRì^H#r*Œ¨JÛÕß>õ–ÎÿqÿçU~¼å©\±ùWÛìö@ÉB„Ú¥#êNkç”Í…xä²LºOEè;`Ôk5Ñ$3YbªF–ìBÉÞY&¸‘T²…$NÚ¤ÀE@Ew¥Ê‘+&Œf“–ÄÁ'ꬂܰö z®ÎOF«s/JJƒ˜š\p‰ +RЕ޽PÔ)˜ašÁ‘·ÇÓJ†ÛQ*³1x+"“ÑcŠË2 ˜ò ÆxâŠrNd§¦ªñˆÄq'(%p%KbrŒ' €=èÐ.q4»œ$7êx®mk(µ^†t?zü—SyùÒ Aæ gcA‰P9()êípþC£9F9}œ9ûf6­g›…¼Q)7rOZÆM;½ÞA»¥ÑeËõ+4_‘ϵN0vÿ7·`Îv§¬ Ûy-6ƒ–Ù¹àúü;ê¿ý7 ×Ê€„›P€;wØü_\ûìÏß?ñòùóçð€gp{œà§~rM€Jk¾>¼xãØDGÂ’À¯#/ðþˆþ ûÛâÿç¨w:à!{_G(@ÙàV»7¸ xðäkWÎYÿY&ïÛàíÀô +8r̓sùäsÿþþã½VýúõÊ07\„8§«P ÿ”逹*€ÝÕZ„ð€ +Ë/,;ÆP^勃•à²`~mÙø€v|æÿ¹%OÌgÕžÿ zÝV¯vÍó¬í¯¼Fé|vZÒûÛ£?виµiSP‰zÔ«eø1YŸ'{Ú›þ¦ÀÔ©»”~ðVýY?!ZW×’©×>ü0CÒ}«îÀ94T= •†ðÀNmþ¹æ=­®xåí8“ZM¤ˆT $ñ{ih;‡â˜~X€úºØ©ÌjX5õGöÈIÌÕ55| Ó™Vü>‰%x”Àš“ÆÐª7Þ0ø›'ò0Œz#’¼ö¯˜-Z^䕌…¶è$èa©cËæ…švÑ•Áÿ_Ç  .Ÿ„¨7Å>@þDæ–¤O-<WX‡¹R&e‘7ZdGx_Ì vó;àÐD´é¤ÞT¥@»%WÍæü°¿åTüªþÚ%„•þ/¢úçgVN ”‰÷ˆÅ×:ØÝ¶Iؽ1t‚3ìùqiÆþ˜ÓbÚFí$3ýÝ¡‰ð‡i:&Á*º¹è†–ßög +¸kpr]òš +g¿½ã3d®SI$¥»+!Ïä…*ζÌ(4²<äÃiC/Gc4âr À!ˆ†šcêgá|>@P`h +œq2;xútZlƒôNÄÏÃáJ<ÜzÓY³=µŸR E†É=@Z.i÷¨£–òÛ‰fŠÂàDojš¼†Gˆú¡Œ&F³•rÃËt¼D»5áyÖ¶Á£RC¥8LÒAyˆ; +:9XU¬4\>Ç4žÁ»%Išh+È z:ÛéNŸ’ŸŠ8qÙɃܛÍ-‡g´¡0Ío)‰®]6ƒ-­Á–©Ê%<+ZØýFÁ6˜†4mñ»³äè{£ü· cîܾÍÏ•+W2 ðÒåOÿäTÀ:ÿ½x¦àǯ^ÿ™(KÖ[ŽNp<áMì à«ÕÿOö¨ÍáN§v±Ö¨ÑîîŸü1û å7eP6\¸²l„óú°¹ñóùì?Ø}‹×’À™€ž<ùc¾:bpi´XâÇøGµWQ/&>ª>’sÿþ£X.•yÔùË„@ޝàÿõ9þë<ÆÇ txE öù­6Ôuš[L[›[_Ñ~ˆ"ÆÃÚ–ÐÞi T?§Í˜¢ê>Úw‚gwŒNàD'³y M¨ƒ‚b\tÇ!çÔum?ÕJ·4 sg;Û¢ù±M¤õ©,ñÒÐkC€ÏÇÆ‰vµ¦@¶´\4ý$mÒø²ñèÔ•r¨{w)=cè|¬ÜgŒÀC@‚2EjíHD¬âiò‡ÖÓIG·?€”»RžlA£* ¥}Ô4²\ ;ͣ׊Ç\_@ i0ã8Ä÷YVå邉k À¥,ÈceÚÒî$ ìÇæC±tµpî43½"~ñ£;ƒ… +Ýàb F— =úÍSjíÙ4¨¤Žk ¹\Bá·Tºí°˜H ’uâˆÜÜA%Z âØœëþ¾¾˜9ð@ÝV†yògݳ·e¦ƒ!@¬ˆÜÁz`eدYÚ“áh¶3œþOôyª'’[²*œî‘ÞdÖž å‡0‘º¬Ñ¸Ð$Bî¤{8³·L³—kÓHiQݵ'˜ë@u-+(Q{½–8€wFO·rrƒö¨`W8ŸÁ¤Õ"!¤ +%Ãá65ΛQ©ãñi!a1±O¿ù†:¤­^Œ´_ˆ yõ{pÚ¬û ¼¹sËd->˜Ü¨ Ø©ø<Œ3 0ÊÕ *™ä>˜ÍÀy‘µ%@8Ö›ñÄ) ]{k`‘Ã\Cè{!ÚÜ8³;áj“}>ÉŸi ªœ49ª=Û&J®6à4¸ætXhô˜A†³ÿI}™NCÓ‹Hà1zR1µfw§Émh‹"…޶š=¢ÑÀuì5‡[ GNx>é¬Ópå2°ŸáÂÿÍÛN L¸,¸tùÚÝß=s  ç/¾þá¨ý?ýð£??¾úщ ¥%_ ±,?)h(S® 毄X6ò€Û=N-Y ìȾE˜Ãö×YC5 0åq<@zK€÷ï°„çç~I™Bª`¼ùİ ›rÊkîpɉ€‚Þ„túÿiÿ_$àÕPÖÕ£½ƒaÕ9(/6ÊjŽôH®(!À¿jð¥€'Ù–˜'|N|öiÅhÚKç?Çh&hkµ8ª\åmZ€jè úØ—Ó:rªÂ(¥9 | Û¥yMÃÖ“Æñ—CÉ”p¸½ÕsõcèOœ èÃØ¼›Í2©eóg³åwôµÕ¼H' !i”|I­d.µ[.’ô -\2:’,ýÞS§€m;>ôÜr—HIó®žëªP:*ÕD"Ï4WÀJ!…›ÔËNY‡¿ÕxJK`ö€>ÙMš ²Ô3û#—CëÍF©D@-4ýĤàƒVM4ê:pÛžðàÍEÉ>§}„È¥-¤F)¤¥Q³H Ͳ](ü6Øæ5*È!!K‡°%µ$5[no‚Âz@껑ÐD.ªF„•~éÅ0˜8B=ØßÌX²%ô//¿ôH’Oü Ð=©‡1EC•Û”Çx{´í<ÀƒálL±Õ:†’4í‹+&’1{gä,QPCìÜi£7φ”JÀÌT Ĭh:ÜDiìgå1)ÐRöÙA¯i‘%=]ëÛx”ÜŠZbTÜÁg n—ÄDÚ"/%"îG††Â¡ÏQ«®¤x¯Á‰ŸxÌP¤@¾@»$l6ùƒ*C©µ&”@Šn·nå§H·ŸB‹LR™`ŠÚ/•ôy´ÚÜSdv!H)Ž›?ð4( 7àÒòZG¤:V&]·ô¾Kì8 Ž!¤³/EQä±öMÇC +°Ô‹Q¿Nr¬¿·ca7–&Cú?`jf.ˆàž{‹¨Eä¡i#A{ @oðmo6ŠñA‘ ÜTƒÖHNÒmvg'¬ð¿'À_ý¾öëx¿X<\Y.~TV8^0>o¾æ€‹¼e‰÷äáp-€ +öåeCì °¡ÈCmèñGÿ‘=j4¯B'‡ø¡Bl³5xKTkÔÀ¿´$ý®VCà ,שCqÜv›Æ PšŽõNï 6D®²§¾Û²•RÒ¼Î}ÊÄ >Ѷæ@ G;bWü”öÀ^ÕYžæŽV8îÔë@wA5{‚b…{\%­©‡;‘Jz EjíŽjô\Q塯}ÑN¯8ƒœ1‰+?&;}bzð^ùQ6¹_´ž`‰ÿ\BCŒÔ£az]=`¶U¢u"B46›Ç´‘vØ’Îlþ3ÀI2£Çµ[6ë葎sº4:m ÀH"5·&Ö¡öaJBŸI™NÊ’‚ÖD©ÁÉÖDDEb¥kÔ… +«×»^yþ£ØcË^å'%uZ LÄÖîFÛ0þnF(Ö£Ú€ŒGÌéÎÎì›äCkê°?™MF¨¯nKqŽ>Ö ¢Ì•vÝù (–&O£ù´q_M$Æ„L¾pl¡§Èwà`”5ÕÊüí¿ös}Ó!dEê^3 `Ò¶÷š²AãþˆJ¨Vny¡0c~ fñxÆF†¼LØ¡Þ<û†‚pQhk ÷=ÙÂÍ €%Å4ý&œS‹F’æóª˜H° +µÉÊZB(çAn¤™R!á5hÝ·²„;ðlXœ¤«fõa+f Ò«…‰„ñ¦tv¦;Ã!©æÐxÔß?ý¦p?Hw›Ä“ÎAAõZÔS^íÁV‹4xCKBóÿ[½–µ×oºhšÓ8Ÿlˆà̀ž7z]¾ð—áÿð€¿» H‡@À®øüáÅs»ÿ_½üáÅ+0ÿ¯Yx±@iÉWCíµ>*’éXoØ(Æþò›Í ñ߀Ö}òlÿ‘c*¸œ‡…ÀE=87ÛW'Ìf×£N£±ùZ @­µùäÉæÏé°ÿèÁ¿J’gnø7Eƒ[’ÊÝ÷øìÝßÕ«ÿ>ɨEƒŸ[®—Y€J@Óoþe.@R“a¥  ZügnàËÀõ77Ê›¯>ü肟âÈÁ_•Q€g±øŠå¿Ølßax»PŠV¥ÍKT±—æ%§@k¡MZ¥áxÍ -Øl8 gñãdZ00 Ëgž¥§WßB±ä^´k4.Ü +ÈØöÐHb°dQ籑¥U›‰€º¹ç«ñJk§Ju£'€Ò½qò±•GnČÜÍ2ÙÁÕ£iˆÇÓŽ@c*%ÍܬHÝéâ5NŽäs ©…H0 =:OŽ#Ô–Ã(õKŒ@0*øÂ ìޤ%B) Qj5r¥æÍ™“N½ÑûƒÖÚ‡¶Ò*bêEä¨àƒvæ<+Ýö¯ù²gÄau³Ý×Tضûó-å1²Ù&gÙ@jòNk³'ò]î麴Ù%§<ñiàQôÐ'‘ #½éá.™lys6EÁ·cTÿÕþ—{ÿ§³/ª?ùAªSß= ü6÷íe`!¡Ôê)J-´rñ]GµvÀå€×?0Fû%Èn¸F"±ŒZf-"ûø µãì. ‹š¬Î­)–ç"—T²ÉÞÑLゥSw¬µ=R¢Ñ +‡Ï‹õ¢~¯ù¥RsÅJËÀi!ô‡‰^l™¶Zä­X ÚOnÎö··©$m8Ý´`§}¶)ªo|Íbî¥3Å‚‚ÞµÏÉDAÀo¶åªJX"±ˆ +/±0¨ÜhÝžÝUjIe†Ôú ZÎáëUÈR¬yŽ­aNŒÉV€°cSY½€v%=©ÔWGÓ7Û{£ÙŽÞ΀Ȩʔ‚+"ë j(©Ieæ2hŠ–©ÝT>4"g25nÅQr•ºÞÊðÏÞ–6¾Þ”«Ö†bèž¿üZ +þé¶iGÓ@¿ À¯X‚Kèügß& +pG.}pùÎï¾ûîûï¸,¬ë?Jÿ_…ÿ9X»À¥ëëF°ëpïÜPüþV¿ôõk«î—·k·ë ¶áèÞ¯õ¨éЙ{TûWCá»-W Èb@)Ž#¡uìÿ|wãgôØß½ÿƯGÖ¦RÉ* ÀW_“ ±Ü[òˆ  U‹ "ÎãSŒô ÜôLñÙCªÊÐñhHä¯ßX +ÿ/øùHPæÊm.– ö½¸løD/šžíϪ»Û|hHë­îަDÀŽ`«Ø£enÔŽj-š¨?èÎWºüi8  1ÎÛh¸åÃá7(QzEõEZMç6yŽ£%¤i\ûö‡ëí^ÛXZZÀîƘNSZ>¤qQ2!Àæ“&¥«Þr,";`nOh«·ˆƒHÍ®"ª%‡@5GgŠÔ½§¤ •É‹†36K‡†©Ç³~º~œh\Ü"Ö¸†·áCZYDÉ ïËGš£;Wñ˜êé€XÆŸ0tþ×îAËI4‘Z½l0§ â´@z5ÜÒ¸ih×]4ñÐ?B´«Üù©”BîBéJÍ-‡HM‹m—ŽM.ð0QBÀ½VD€®ˆw=Âw½7LÅRαà9ć[hVê: +Ãÿç¯àÙ`ÿÖ`kpê»&0‘àžžd£íµ ¥žØWƒö\Àh +XjXV•–µ¦cC‚!¡=‚]z;ªÆR¦üDÃåj€¥ß×0u$FÀù@¦$-þòvXëaŒU&PzaÍ9ЦÖ뀮…tQ&Û;¶Éƒ”*¸Ü“¦ªŠ̱¿€ŠÖxg”àÑ`H9 —ú227ùÔ½æà·ª¸£;Ð^_QA‚¤5P~)ÂNéã˜ñ(š¸Šý/<ð‡¶>J€Ü3JJÀ¨áQH!¡"K5´¨A9Ìq_‹òZ +yLxy€·Ôÿ W®^u €¿sÅþÏÏå+Õj€y†æÿüÅ3'z Ú;ûÏ?@NøÑEðiŠ¿[Õïr¨| +àW¸_ýfà<Èò©7nðÝ€ÙÇŸ‹ÿ«øºìP«eÀâ`ÇÀI @ @EûûkÀ£Ý -O:?¯À£7zíÊ%•¦µòÈ6Ác¸¯!€ÛÝh,Ybý`aøgòåÿóϸÿ`·êˆ@pnÈö ÀÜ @ðÑE—:fø«ïlØNôO“Å{T:iÜUmã§½­‹m­í -PZT•®s£¦7]€áÙ7š5Ûm¡´ < —G4 6uÑt؇.AãĖͧÑpµhiih|êÍt¤ mT ›u9[ÕŽ‰vMÕ+H %R·l¥æÁ¶Ÿ¦Ç~Pû›û5KÍ@l¤FO5¦M”OàMÙGÓÙx6†bMªø&Šûp×dV¯GóÄùá”Ãv¶J³œ³G r¯æUhŽÆ• &@^@V²bÒIí2ÚÐÈ;TêBêm õGK©í3yÒlÚOBhª¦ @(a>Ñ£¡Å¾÷jŽ*£I8j3 :Œ#‰Ej©Šw$h®ùk‰£@zDÕ®¼ ŽpT©GÐÄ?«Þÿ/2ûßêë‹’¢SÞ5n‹*¹mÑYÔ"ÃLëB©÷دb9³§\ïqµ¡ ‹jƒ´ ‰Qµ_D;5^ˆñE[F±ôŽ)Z €÷ 5Öî$ Ýf®t•~p«;ÑÞ`ŽQec «óÜ ¹*‹„Ó%Ηe]&«¹C“ûPëý¹ÉÃܪ<ŽÆã?̶-Q˜êò ‘›š ô'u»5ˆÔrQ” ?_\-C2k/ž1ê—F©œL†j»£ÊÖ!Ö;òÍ'Ȩtöð™ÊseR&­šÅ_r>‰"Mäçå7”&#‹á‰m‡^ M“ˆ?Ãrå39‰²l^bþLìt‘gK ¥Ï‚ùmÊ,# ŒA”ž0oÒŸlˆàL€K¿¸ô·—œÑïÍ^¿ÌTÀ ×ìÿŸ/È^ØÁ/¯ÞýÓwÏŸ½xñìÙ³çÎü +½ÿ'€€ ÀZ€8VHB¨|ùÏçV.¸åÿ ‡.Í þ7x9 Óªw\¿ow÷t€ëÞý…€¡:éH3àÜðõ +£¾€Ç?ë<û˨~Ö—RÌC¿b_ýkvJAÖôÙ+ ³ (õ±ÄðŸ[Tÿ“{÷íÞŸwÄ€j¿dø°Ö¨°?!{KÈ €¿Bÿ× `É ° ÿuß1€¤¶©(Óêëm¨¶&49<ý @»ÞÒ'˜¶t\ÜéÐÎ<¥Û¥I›vë49Mºƒm„óÆ@g²ÔA1…c£§QÞ´Æ„Ë]íL €¡è(4GþØ©CÙŒ¸Ä…´ ý‡b©èf*´[ã´-6lÞ=Rs +`©izh޵ÃzÁtg7PêápÖ†—Õ_¾ö[7ÙeႺÚÃííä‹„r?Z,¥Ý”šbÑ 5Miü2Ô…¾íÕ'3 }2Sp]¨"5"F[ÍRwÒ?T#¢±6ë%½ÖÇÒnÈ +™D¨·»Ct·¶žœ¶·Ü{ÊÍi}i‘Œö˜h*éÀ¥Ë>eõ3ÿÙË?²ÁWjSÆ“!“Ùt2*R¨#~ùص‚‚ÆÊw£‰ú?櫱ÿeö¿å@à"Ûú7l$ï:±±]@™ +2ì„’ 7º ‘–ä.Ðå´5q1Ÿ’=-—–Gz®¦@ °#ý)xû£t¯sRC‹Mü—@×ö¹ÃºlЍäÁ^èI(¨_ÂbÏ9˜ì²¨@W”…KòÙï‰Á2f79PÆ`(È9Õ&·#­àæÎPw#ñˆø¹;ª»™Fí5o‘8N3u•¬€:Ò²»~$ï~ê¢ìUÃG¥ Pÿ¢ÕLV™#}L4?Ij87™¥Q¡®@øCjYrÇ^#ë„#m»M’ÁÝxn§*ù¤X¹G´ þt4t Å”¦bš«Ð¤;i¢b™gèÙr_R€P¼Èi_“N{¢WLC|÷hˆ¾o¶¯¼–ÏôO9n[üö€ÿýmG®–y€~ôÿ te€«W¯\¹|ÉQþþÙ÷ßKtøáÕÏ_90†vþ¯ª%_¹Эô'…Å<óPmÝò7¸X°8@½Ñ£AlàøËýG@^ÁÊyXö¨5:‹9 +4ŸÀvá €½÷K¤ +`ûÜðóúœ—(¡2ú;Pþò÷¿‚ÿ÷ïßw& û€ûs þúÿ5®‹ä2ñŸ„Ä@¡îWkd&@=«Aþ ä/…âüW¾>üˆ¸Cø˜ ¡0BÁü# `2@u€:4«éL(¥i¡u£1Ü9½õøèÅd8oÛŸ9t  f£µÍïØác´«Ûý€Ä£N;O£7Û¼ÓDôê ÌtÒF#F•l϶zí-šòš].‡Fà«<ájf`Òr1Ð’L¾} +±kÆG©ÑJgèÒ€÷ä.6>È BêϮԽº âÚ‚‰8¶Íí®óšvã^ˆrìP2Ôø :iß%9u:q€)ZEpÝ)󣲉‰ÎPÈ_¹Ž€‹ÜkŠ.ÝŸ|;@ù>8˜};=Pj´t¸4ëÈëÖd°…pq¤  2˦¸UKftÛNz&Ö‘;õ _¸PcçRÃm8wÚm›=–Òtl« ®IãÐï¢â >g¶]ß‘VÓµGåUn€ÞlA{¦À`úè˜>CŸ³(µb£ñõ•Ú túÿòçy}ñÚ™€ì„U#“ÉmˆŒEG±é®ÇÈxX×÷d4…"ÌLBº¦iæe=V[°ÉŠ"†˜ßä™—ƒpl‹žA3€»éØTÑÏŽ2Ykÿõ—€»‘¬A×µêCÃøô¶ V"¤ðiÙ W«Û;À‘FÀ©<@FF®[¯¦õíîH¯8$:5*¾Xç³2Ú†VnSœhf(Ë<¤Âtlw–ëZñôy€;øâAÝ zkÈœ<©‰çNúíá€RžLõ`Źϋ‰¨ì8­é MÇǰS +@ îí–1!‰@>½¦éñ©Ì1ÃP÷C +FM.’²I¯y,BWJ^2gNæ±%ð Bf -ô@Þ‘;’ã=Zí©ÌÍsOfüRXù럲Cü?ÑpV€,ô‹%—þs¾¼Øu +öß¶àÚMñ_Àÿ ;øàÚ§¿ƒ¼x®ÀËçN¬`™à§jàO?¥á^ e5@Pþ¿ðÞ+€r¤²Ìqÿ$,ÊVKpÝïeÀãc€€zm³X‰ÿñ0Tç­†X +hð!†rÉ×ÿ~hXðþ}ÎÞŽ…¹€ï/ÁÿR»>¯,YÔç>yùø~§4VA‡øþW€¢ÿï?þç0€{v÷´ Å ßúdÛHŽ[æ@ @Œ©$‹P ¿žE‘?¯>™nFº‰M¢w&@i<Ë£¥ªôÒ4;Ìœa¢.Ínl[žaoºãL§*4 ‰›)°‰jLCà©àœÈ)NÃl'ãëÄÿÔŸ_à*O®óܵ4°-ð¹ÜêöƒÙA»É´•1kªÇÒ~!“R«N¸ Ù2=ùBÞxïM'4©ƒ-pÚΚ 5²ÙбK ‚ŽQiÒÀ:ÁI:”:P +!Y‘2½°5Ô,=ñY.Ïö•†:êÏýYæ3™}ÛCê "r r·Š‘Ž„x÷A£Õš ÉV$ަ‡®ªc¿òéP#êCôŒ,㜠œ«!*T ÁÅ*3’ÄN>7€€imÑcцܤ Óö(§ AZ'e”qC IËø ÜdH'ÿS›.em_‘x–Å +ü:(.R?,óýœðšTn'È¢ƒèÆÀ»c‰_@9P}ÚÂò´ßD ßæŒí¡ösÙ±äf Fln9€Ü’µûEþtŠ8ÔrÞ(n¨)Á}Z'¤ †€Nz# -ÉCãÈ#¥±ÿßZ†‚^õf»çÒ”€(Õ“oŸ þ¦j„Œš:Zj¼˜¢óS×Í3N`C£Øx:†t¶àdœ·†ÔÀ‰þ{ˆ<˜8Kå^‡q(Cä4~Þªìn»#@}㩃œ+µ°K4>|NÌKö‘7<„^ÖíwSA<Ä,òv·‘ËdYdL&´äBY9†áÀí¦y´p ‡05ê<'ó2yÐÕræè±&Ø0„\KŒ)+§pJR@Ä$I®bª`ü”nîØ’€hg }§hJ· hB.Hš¿¦õ„pÖ NˆYD"þ™ë.L'ä¶tkä`s2r6F²Ì±—¡ s©iËÑÕœÎÒäëöù¥bZ îÈ òšØ%[D$ÐÏi @^¯_  íØ1"£Ð,ͶÀ1‘F¬ùÃxØ$¬¦·bæ=m“ÝŠCPAõ V—Â4.Z½aV±C<À¹ëa*àD·Hê>õmæà°õ„h«Dȼ¬ºº}-Iµô¬v>;ÞO„WÆ&¨G汊²¬ØzŸJk$ÍܾE¡ŒÆÓÙÎt`e¡Ø½K±$øÈ‘3ÓdbÉ’J"ÀÊ{ÔÛ>`NþwOM&XRÔóÉŒ7°ÌS’=É*DæbrªÐõ}ÈQ­ÅI¤*G¬’œ5-i¼IJП¥ «°¶‡£ÙxsRZ-¹T– +MþB¥¨¾€$Á°¥JX(‡ö‡A`ômà +XµÄðz J¼³õ½ñKÛAÔý›ºŠÿzj¸yóʵ+W.ð‹ËwÿüÌU€Ÿ‰þšü_½t _A~xYÖY>¸.Žƒü%T_…èÿ„×/Ö<톸_a?à/âøÏ·_z£ÑyôÕ×ì°wﯚVçÿ.à0t6öî}'@²]Âä¯Â“¯–,+3¾€Ó,ÞíuaÉ tò#^Å`õx³å”~ú\÷UðßÑüºqnlû~ =û)ÊX.]Œ¨ï±þçûbíWö'dw\'P€åyŽŸçÅ«¼ó\ƒCxºÍ'èUY„Rš\Ài´ÆþÙª €&wØ¿‹Íl* ·ÒŠ Q,i¨†@·ã=F €Ë†‹ÿ!î«,µhÙ” ÜCd#ndŠ€½XhJkùê©QbcpbÞñbÐ%›Ÿ4t• J¿=ÓæÙPNC¸ˆj ¸•ú‹»ÄÌyMp9¢b;¡.™¸™õ‘Z©ïH·>qƣѶÔÃêÇ‘tLYP`ÏEïÜTˆ¡õWLÑ~îäþv¨H3Žš_-÷W_´Š-!Sí¸MT+’1Q/Å#ªÀ”´ÉyN\"©¶ì@ŸÕ^`_¿ÿé7ö|q’û_éÏ6œÜ‘?º ¡Ûaî&T"=Ï€L(÷QW— hÐA1¹\„…0šøõõ9Œ=C^C­âAòŒ|4Â+r°Ÿ/IÜ#꘣(t­å–¼¸¥OQ¹(߇èÔÀm†;MYÈh|[P£ñxJ²Ù„]9u˜WI#:F‹`$¡Õ2Écn¬@Ž#þ‡uôÔü!Ü\ùÞ:¼­ +ü[‡ÂnÞ¾ùÉ^Ÿ\»}õªײðWîþîÙË—ÿ£,äT€®üï^ý˜¥«P5ÝËá£KPàŸ0X¾`ÿ…Ÿõb(¡ ý£¡òÕÙÿzNÀ°°ìà*84ÿ‹ÿ­–CÙWÞv´]G,”Ä¡àñÏ»ÀZ €w9cp`ƒ?_iÈëqÁÿØÿ}q›Ýš¦…þ’>€Lÿ£"¿‘7°ÿØi†ÜpâVKW~ÁuŒ@@yRŠ·,J=9.~ø‘S|ä;Ói0÷XLÚêUÞ| ¥4ƒš’C ­G6Ô+€^ÌåZüºÓ,vF[L q& Àïi!Tc8”.Y Ž(m¬iœ,6]Ç-r•£dI(?anØ:´Ìô]œÄP@eЪq¢IÉ(³bhÏhÖc˜H¤‰J ¿ç˜@(µ Íõ1 ‚Ì-½% @Àˆ\k¸¸dHV-¦‚ø!5Ç„Ç@ŽW€‘kÇéP?s” b(]Z¤j¯§vôH½ÀY‹ÔÔ•b1c8Úé¤K ì”ЭC‘¬©À𴞬D–n=e1Ú¦ÆD”3§ÂZþ€2u[À$è¬dÃ+¤†mkÀJÝNUb<óÌ›"ÀH6 q½G* ¨üç'|ÌŠæ!o'Âe›2z¬ùÛÙ—Üìœí°§G5¢.¸‡w|ZT¥ñpº=&ñ +™a€ÜQ¬Ýv«ÞDÀA² šÎíM“èì<À'ç"¯YÐëñÔqQLÔ0*Dn˜”dó¨¸'Ri”=Ñš;µpd*ûyä)Ù`W;N€2wXË7ì"P¿dòþßóI49Ý‚ª +ÞgœMa^„I™%kMKŠª§5‚"‚)´{­z×Z£toÿ:Ñp&Ñ%~nÊÃpÅa€„;7í¸ët^ÎtéùôOß?öòÕóç/Ÿ€óÿüøÃ?¾r`ª¦{%\ì3ÙL^þ3ÿåëžšd¼+Ì'ÜZ*Ì_ -ÇÿAvѽl—(XYù¸4@†ü«À_=áúŽá(X¶ºáË/—,›(ýK€ŸÓ 7—PŠ·nlº4Ç +àÂGŽÐ@ôç´èPèÓ,<ýG-è6ãe €Í8 `,N°=·Ø¼ñ`+PÊÿÍ™÷C@ü?Z&½mÀdÉ ö?(^ÍÈ @hË’ ô WZF3',íO´T]G-ËÙ µÒ`ŒK2 ²ÐêÚˆ’-æÜd6&ÅPº€ÙC ™ÚrhˆÄ•`À6 €?¾PŸ[†ÝÁàˆ€¤¥²ôÀPs—xcèkp´èn‰°s €SѹNñt²Ü°Æ0M€e×пšЗ›3Aí´@y"݈º‚ÆüMÛ:AY†ÖÊñÎ °E8Ú4¸"(;ÚYÖd¹•¥:TV­üIN û¸QS,ÙØØA¶q·‡÷d!c.ðD)–9ƒ©†âbÛ‰kÚ5ÔnïÄYÝ!˜æ °^6«›\˜^”áÎÎÊM{ýêgðqþ_â¢îì8†a4¦ëËèåDÅGÿž1{¸•iÎò¥jÌYDÀ±º–{äè÷o4Rm䡚ÎU˜\áL»G²àÓ {¹[>[þhm (´~,äWAį¶k7VÿE¨0%4P¾$66Ð…]0÷Xžà~ñ°cÀLv:ð½ý•71¸ç¥»«]àÿ²àg÷XÜëB "„€¯ç š_nT¾ÙóhNj2€bÐûÏ)@¹N àÑý½ÝÊ °r¸xñà ÑÿÓ €ï å@ó¿À'³÷›XTkýJ×Y„[’u>N÷³° ËÑD¬±pêÂ0.]•@ï÷ƒU€sY€S™¹€Í‡Ë€Êz+jåx6ÞnŽ\‰¾t™7”i„‡Ã¢Xr]ÀÄüE…TThv \5ig€a†¦Äm’,LnGötíÑxÄz[ ”J*¬^äÄDB ›{R,9KYѹsب=xg¼3}óM°×a²&ŠÝÃÙqºpƒl™ªäU¯%än×›$Ná½³„%iÊ¡DÒCN5zã®Ò +Ìó‹\„îÈÑ N•Ôz7!Ê~¯YX »¶ÚN,è{ÏÓSßkŒY“¿zß"ìŽóþÿ?1Æô4÷'UVsçpÜ«•­ +'ï +ƒIDü—©‰õôîÜ,§v';¨Ìv±p˜ï$œ`ˆàt @ÑßßApÈÿUÇÞ¹s;.vè ˜Å®B^ þgú¿3¢øÿì?u" šÿ÷ÿù‰Þã+`î@Øh±† +óWBfzüõ×÷;öîîðU-¾r¯æàè²êüÇNg£m>÷˜ÏÐá ;Dxtù §hÛ¯þ>‡¢œ?|ɽ•§¼¦Š²òüó½·ÿx¯SÀG•à ÅP….}íÙÀÉ @Æ–?'rÈ\›·6?ºpᣋØïŒÀ ÀsXl:ü5œd°²  X„²B–,¶ÏKmƒÄw²€Ói‰õpÀÜ`½@0·(¢>ʆÈtÜ`ŠlHø>f;¿ÉŽ¡ gôHNÍ-¨”K>«ï»â0š¸.ñŠ€éóÌ…€ó§Ÿâ°°Ä pÅàÈ(€þÜ wÄ`kÙÐ_ãÀù£ßñ(ÙlÝç]ƒ¦>öóŠþ¿øWö̪føÄÐ,QÊ‘:1Sùõ6ÚfØO¤!#Ç—™÷#2ÐÅ<ŠQ™â»uq…ØÅ-þ“a*Ìj•:ï.MÏÙVLyPG Ü„L†‘kä.5Rx !9äNÄGĨ²~ÊÊ–sÊôºÊØ.OQ·ß$£¸Í¡/™Û¡üç(GvŠ`:£’t4hŸ¯´9Ug™¨/æ—Dp°€¥L _hUÃõ‹ÙÏÝô± ž’*$“˜¯Ô¡VK²œJN¦U¼Àø fU ŽàtÞŒCmFŠ0üGjç )€Gù[%ÙGi:„åf³4)&ÃI»ÌêÜÝÛZgCi ¦ÈR³¸·Ým"BJëƒT®xáM-Áîw®\€‹ܸšYô¸tõî?~çR€~bxõÃK'ü±Ã:péè¿a BõæËJÊT€ÇB§Õ>òÞhC:»Ÿýõ~O ~$Ä»  èTX€¬ Sw@¯£`É ã¬Â€¢ÆÉ‹w±ßþ£ÍV}ã°›ýß×Zªƒ?‹ÉA‚òU^g ž Õɶëë/‘¤„û‹Pú–,Å0æÿÊ@¸± äž„YXw4¿¨ñ‚Ë Ë 0Ÿ·/¸ØE B>N`x—>´Q<ÍG-G|ƶ[4gg÷°µ£€áÒ(€óX¸Ï‰>«€édKW§ÊÀ¡òÅ tœÅ ï¹Ö ¢'*-ÊUYŠ1½t Ñ1 »æ›aòˆ»ú´×ù¬ZÖŒ8n¨Fô>Ã2 ©•ç˜`²ÚpÄ` úÿÊë‹ÙAZúS‚Ýî XBÞ~c*°à÷‚ªuã[êˆ+°#ö‹Là†j°r¸pW +ÑA6v‚,œ¼-€W¸":ªMI[D oô†Ð8 f%½@A7@å%‰]³{R$ãd y¢+—Ǩ߬þd–ü™ÝÔQž±{Æ,ïT|Ä«8…›ç½kH6âç¾Z8JšL•wCZð”;qa²0‚$Á¦ÙDèL1QéžpªÑ›ð }r©:Î# 3 +ã‰s®%Àó]°/N€À{?‰Š&Ó‹Ø=žílG˜ª JF òcò*WòéÛ%OMOù2É_g¶PŽwÖZ^ë0÷ã¯ÊÌ'ܹsûÚÍòÿÚÕËW/_¾ö韾{öý³ç/_<•é€3@÷¿Ÿ~úáÇŠ¬piCtMÚ  à—PÄl5j— Ì|Àrè}w6àT}OîÓŸk°  àì“Ìl[»à=2@4à¯:D@æ‹û÷ŽX*Àoc£7'ÿþõ1 ÀÊL€?ƒäÂX—pÿ +œþ2,[¾^²†Gr }óúÜÀògA?„TV>D©€ñ2 Йþ‹àâ…šk;XÂÕû£‹]¬Þq8· ¼ù"œf6ZNó°¥[øjGG’lz €><¯gðPć÷pÕ€6åÐà +‡iØç>K£P€‘¥ø”vï >!žº°´gð…e ‡È±#€ÉtiÀŠ€L }ž¹ðX²Ì}ZëFÄ °² üA[ŽŽ°»a0·¡\Z Àƒbˆ^¼°,ûp1—¬X¬+Å@= ¯ ´_§ÿLgˆT[€`'ñµÙÑyßÄЫÃÐ+g°DÏ|sÜ´ ³O¤â¨±Ï|~E¯ê=À?ÙFUª7!¨"¡oN(3 d¬dŠ] m +Ÿ‰p‰Ôëø–`P5Å[áŒûG–¼CÁ=G(9³Ó ¿™e0<÷Œ5mggê.Š$ïVê`~¹¯^Ý^t7‹ Ê›àCáßmRÁ%V“ Ôž6ZaˆO…´¯Ÿ”(r‰‹è«s“&#t›5GˆÑD>aú"–‰¢fÙ{¯ÄÙCA!gð?’ëð0ë7Û“ ±–d…[YÐðnãW`îžì´^,'‘l6<¥Ùxg¡›é³[Šê^¼ÿÞÎP€„Û7p5s\±àêgzö⥺ÿ‹ç/Ÿg&€W/Xûÿ_ÿ¿þø×µ€½ÇzŽÛ OxT€òÎ0€ÊÊ”ƒ†j T>òÖûÿwÐL]¿ÂÿýG ¸{½ñFíb}ãÈ*1´dWABN^¼—ñoV+éü;À̰ùÿ/€³ëþUøJYÊõ¦ùë/«W,ø˜F!‚ºøõ_ø/R®‹€r] ¡ |Ôÿ‹àÿ¡ÿÿ­Í;Åýyÿç€wh á¨]oêÀÖ²P:÷àÈûp-1ÈU-ñ ®âN§ü„5óü!N€§ŒXî i!€>¥ÔÅ@2V}ÊíŽúT€³ŒÎÈ#d:ôXkøø5£N´ } ýZ,†…`> +`¹  8–ä‘ä5ù[,s­þ_³a·×}Ý…h‹€¬Õ´ºñÏ\ g˜‚+nزE~½^  IMq—À^Ï1¢NJp«VU&±’ÛrȬt§qrO¢juI¦˜fV +‡Õ}8àIÄpÈ¡hV^žD­‘Ï“(vnöÃþ‰*i2pòpÇ3-Ø$Aßr ™„HH“gŒ¢CF˜Š•À„ðQ¢Eš +©×`ƒûä–à ‰âáFP©­„ÀT)¾Wó×™+ª %7È!M¬aØÎdIzÙ3þábN1ùâšrË’&.&óê¨÷­ ¿‘ð£ÀMöš¶RPUÂÞM¨šé ?A}-€“-¸ßQ@Ñ×íOÇ¿Û7o»` W²ðµÏþô“½r* WŒÀ?¼üñ•#Ò#°vÀ¡ fø?ó« Ä—ÆÅ•¹€Ù¿0¬³Ô³^/:9aÿÑfÀþ}0v¯ôh€Ô2að’À;Ìå@Ùj¸¿ÙØC6€ôŒ—#ŸûüÌóì“u_ÙŸ÷ù^Þ½J¿O¶ìj8Bææ ¿eîúª,÷(.'B•¯!‹ ïFé(+ $× þ;Ð-Gg\kª§Ñ9|2 + "'øpÜ$£üe+Ïý}´ŒÐóùF¦XB[ZÐÅ6=ùZ3 + šà£fÓA5 +@±—,K>1¦›-аêpÜÀ‡ôqê©ó,[>µ¥Qœ|lÀÉ>‡€á: ÙsÜ š(bWG×óQÇõÿ¼b85Ä€>KÌsAKÊÜà^ãñxû×]*“ãëÈü(£Ô¾ÂÚ¡ +ß*¸Bu±Öˆj~¯YÖ+,+(rRÔwõ䊸ô$ï˦øçMØ‘ZÎ,<€Ð´88CTCàmè¶¿Ňø<O©.,À,œ[H]Í—“ Jï樂ÈJ²’V~)u ž-EJço àgÜñ±¢Ò9jÁäEX8:r$!É21ïå鹄NS,iáôm³œªç Íy¤DXÒb9™Ú’¦!å4î7i$¨c;\ßd¿S± Zn™‚rHbBIS]Væo•¦êà; bGi¬C^kxû—Õà|ÿnßdN€/]ûôOß¿xîôÿ/^¼zžA!±þÿø×*TM÷r¸¾Y,⿚xAü#¡X:¿`‡…å :÷þ|µžXª.€Â àñ¥ä+pX ¢wN[°ÿÈQ…^‰4‡@&ù|ÌðøñÏíP¡ùà¿€$·T¬õ>øÒ²éT€à÷bô õ¿˜f6Bä …ìíÊ×tüUM@ ßpábFú5d ·R¸¼ ø—P»~£b„3Z +¤åK(]g†8ú6>r…%€2 + èÒâÕ[Ì Æ|lqi· nåŸ[&Ó#>ç Y¥Ô粜cÀºyŽXÊ(€å™Ï= + ò¨¦–¶(Ãq€Á¼ ÀQs€j—-û×ÿóúÂÂ;5Ô›A† øä¾ìàVÛÑ• ’:*„å +!©Âpò£î:ÉnºOtVPk“…á¢Ñ`òPÜßÈ×¾sý¶–*×b_«](™·PKBðã¹ K$ÊmUÓ-AŽM7úÛFBíå:塼Æelž2Ô~»ûk7å4f+Gd?œñ}ï%Qâ|ä!ÁÑDYP±IÙ¦âv‰.È]8c/§¹S»‚ª»œ>™–´qC¢«»à†4BVÐm‘ÜÛ †Jžó JOŒ¢¸£·¢@¤Pê\ÖÌœƒ)¦”ö„$½”‡ß%žb +ÿÈÇ<˜$Çrª +JçÅwÒLý êk§û·ß]¸zµŒ¼iÀÂpõª€¿¹öÙ?~_†ÿe@™ + ®€?þõ§b0Tm÷RX±À„ùKópÂbfÊ¡„²ÙÞXyƒÿúî'ȯBªN€èÿⱄ샱>ˆÿ«€‡‹·BîjðÊ:×=8?ÿü?jØ|òäg^ Àø*ïó½¼;ÒToò«ŠrÙؽ¿÷x·!@ÿêpô)ü@67'X® rÿÿ?r<|Å̓÷¡@À)€D”×›ÎplÀ)>pÚ<2ŸöÌÅõœ>Ž(à¥L+öm>ÈËG,™à£æ>ɧsø ç8> +L.Mì©óœd8âpdr|Õ€xc8ðûõ>œò<R‰ @úõúÿÁlFãþº@âRÐ)ð|kžaâŠ`eT@›E33Ê î*è°gÌŸ9†nD&N¨(dkÐÒ ’Cäm_šö¯Þk¼ aj P,á¾ìíEW–vµh÷êM¿ 1í6´l»€£èHÅ…yÙöx·¥`±Œ¾Añy Ÿî;SBºÜÃYNxq> p–û™[œÏ-O,Ð_‚Ó-,«ËÛ±>¢süg3F~…Òu¡Ã'öÍç° Xõø=[k}Î5 +ÀȹrÍ(€ð–U ÀŠ@éxËQG,Ò‘D¥@¹Î? +€\@ïþ€#3p–yvn0³œ0ÀÜ`> +àÐP¡þÊ«ÛyÍ‹”©ül:›Y»F">ý©˜àŠæ°áØO9¬Æ™ƒÎVb'¹bŸ3DO{ÄÕ[L·JÈfB¯àït0„r Úõ-½!Èó=ˆEHåã×]²œ*e6õ¶(…ÊPOË%ÈÕÛvؽ™4™yŽ$Mp\{¹³?]1kPž¼ç@kº¨ž¯@ƒVÛô “Ô4 Ý ²6›å!ädÒ5å]vX§{S€t4¨u9ÔŸJ7ô@ˆ¸N0Ïa)yFL—"ëE±`ž—læ tŠÅþËÓ6íMNðlAq ¦ÃíRPd.LM3CáÖ¸‰F@ž˜Q{`¢¼VþM·ÐÒ^´iw gœ‚ä”×Ál` ðÍtП ¾À €eþwñBûýo^»y;3\»}çæíÛWfNÀ_¾{ùìÙ+'ˆêÿòåÎøã_øéUµк‰.mìýÓª  +E7Œ™¸ò¨0¿„¹@{£Õi-}otZzçAÕ ÔT6€²*ø´è¨¼ùÔ[Oò(øÏ%hö [»QÓÄ@ø÷5€]!:$?‹@°!ÞÈ 8~¥F-’ž €ø5ó?ÙÛp ÿ…tÿWøoGþ"˜M~þ%]ú8 +,_±| @|(Z­·6oUØŸPüªŽ[ŸUü¯þNŸ`tÚ9â«,žºd(£–œW×8€P­L±€—+3*·’ ÀÒ(€j€sŒˆ.Mû”ì:ÁÀt +HË}NÀ‡ôyæió¬'ÀChËJÀ)óú¬µ=Ç}B <‹ ™@b_¶¬LX^38ÁÖk9í4N hú‘§Ž²MÉG‡»ó·àÑJèÚ+Az¸Fp¡Z³ƒpÒ{Š\µ„Ï‘:¾‡ÂÍ$5X©ÒC4êiã +7S+»¥b:ÉÍX"ìKhÿÌx'}ÁšÃyƒ6·¥–Œå$]x/Em=§H”å—Ü…-±˜g„mµˆ×$eÜ‘4Yßa’ÎàO9M§n8™Ì¦ßR‹Häààé ØlÕŸˆZÉ}óÌMF“§½¶)›™!¤êÖü/BêÌVRÄ©ñ¯(UˆÂžeÈÇ ªòÍ6܉'ÊáýœW+4 ì”3‘g’aÉ¥KcÖëzQvP +Š?…Ɇjƒ”N·ÈHîÈ|P¨ŠKyzµnkЦN’O +‹“‡Twú¶™.àt À×—.ÿí;}]ÉêÿšÿÕýíÐàÎí8J~§ àÐÿ"=¯2ÀO?¾Ê» +?¤_ ×Á€âv«`C€å¿h¸x]•ñx¨ÿ¥÷F'kª’gÅ@Ð`@±<~ø¸ÑîèØï‰HpÌ@¶ˆÝÙ<·•ø¯€°°tö÷! +FWWmôv÷?_ãÐèìÛoODr°û+c=ï+U)BñYðh÷~&P0HíCjÀøÅZ€¿ +«€„¥.-7®_,€¹@,t¸¸*è‹×kk¾/QÐ×ÕXkXÿ7žà5kœk€¹@ï÷4Ëó¼³Q¹Á¬¹`i-±añ¨Ì¬ïd@îV,ü±œi-€% àv²àÈ<GG(8ñÓ¤ž2À >fŽ€3ÎÅÿ‹5N¸¥eþÔ€Œà%d¾h£§~84©Úà— æyS!Fœ™ª”T8jpÜBÏ©ùKa(ýoI"×n :Ñ<:à,°@ЕÍ]K^“ºYN)S­©ßˆoÁ`@qÚ•ç GÝV*Ǩ;Àqðw¦H.(ß!(íZÅ"‡«N©3ðF^N†L.ºP¡–qn=$-$ ‚‰*s'°ÐN¶¬PTˆ)¡Š æN +GÓ™âÇp2};ì÷&ŠšI½uiê8tef‹¦³Áì)b“+VK+{»NŽÁg¤Dc…€¹4Ó`B•çÏl ˜>M¢¤à·l†¬;É,` cš¸âïPÓžò(@H±66÷‹¶ Ö,rè¹íT*Û™(ï:ñlèçY +Ëu´Ìœw +úÔ×NöP-·Áþÿx¢þ; ×nßÑ ²‘yž}ÿÌq™}_ð“‹yÖLpicïŸ×Z +°Ù¸ˆâYaΑPtÿ¥w§ÕhÄ\ÿ|î°û`Wý¿€Ïíš/>‡ çìJDÂà!ð¿·/Ÿ€M®Ü-€Gþ·G  Xä»KYA£s_ €Ž™¨§¶ÍÙžvH=Z˜ßÏ‚äš!4œëU‰ôO:´€ªš$€ûy—W…øåUÞ6H<¬ïn€×­`CAûoC5È,èÅÄ?Ç<'¬€øýC€¹`Ù`y&À3@_9¾À1€ð‘b0ç* ÀyÖxÍ<Ë3Ö—|Ž !«>Ú\HÀë}hçÏ>À¤(þ3\@ÿü]+jþ)RA”HŽÀíid(kÍì[èÛhôTSJÀaÏ´ °‚+¢` â’2ö;ßÂ'À-Å£ÔÀ¼þ˜ËŸj‘J¥‰]ÀÝ)„(9‡ÆV5¢©«OGÓî`vàÍú-xB䀹Åí'SðŸXEEâã;b¦L±¹S=á‡ÔÂ鈳©yЖ>ôAÅÚ˼Zx#oj¢•ôLÀï‰õ·BI1Mz­šÍt¸=Ç9@‘ѪêVTMö£!€¼“#UâÃËý8ñÆ5#²PLå0%žÇ[6 þHébˆˆ^žýܼä,tw +jõÉj8çÀ3¦rÇ\”’êO‰IÉcn:Ù"®'+IUê)'IX$P)ŠÊ’!M3†Ñ;|óÚT‡œf¨@û†«W2óoFdA {nC®: àÒµÏ~ûgàÿųçÅàZÀ/øñÕ?¾ú+š¿+9ð¸ 1£ø8àVõ\øMØ€d"€CÕsŠÖß^úÞèÔ[ @¨,‚hðE¾c·B§³¹»¯ €ý€ — Ži˼~6!jh´W-èÞÅШ·6Z]еDª·Ÿ#ÐÿñwÙ[@g_v<¡±nò¡”ÿëRd +Xò€7Í-éx´/¸PBUÏ?mîÝs')ÓÜ`1 +àÆ’@Bñ¸®õà–7\5¸v]#¿_7–(@UM„}ßù·<ȯPºÎ@‹ÄQ»V-Ñ–ÏäÀ©Ë>K£@ÜU€sÐ +@úv€gäW^¤¦‰ZöXÌ(Ø{êÛ°¥OTG,ç ä¶–€“|Ê(€×­€ÌÄ‚à¬>H­îŠÔª‘!7‡k,F䟭1|ñÚ‰€»rJ t >Š áÑç{ԉ錢’¶Åùm8í¡usœò*ð‚TnˆÈdÐëhÇ:·'Ó‡[RžA§Öj=$Ú°6¯,}¨·°R £¾óÓáçA0X[¼†”oUå)zK&õŠb57„bΦ¨J³o‡²ø¯ŽÜ›€‡¾äéXÐ’V’ï`V"µ9MÊ„HbãJž`i‘Œ¦[®èKe›¡aW€Ò«×!;¥pŸ>"{J’¨kTÔàn–Úd œhOˆeÃt¹#™+ññ1'­¥È¢ M¡Â¸À?kú”¬¶F„CžKäˆCJ!æÓ‡©9ÜÜÂÑà`IptJ–q1ðÎÝ'E6Ä@¦ ûJ@¾¸gxÕ â†Pe€B^3 + º4mzrìD‘c±xßb8yÒç™çž`y&@N–¶¬ZÞÜ€óOž 00Ë¢k‡œÿ£åSu¸Qï€v_œj7ÕF).•_é©t]Äæî$ÎŽ©W`Ú.Qìp2:˜¨ŒZõF[pJݦ`¹•„hàÖèód"e´)´QOÉBè,ÉÊ@͘ÅÍ«ª0êA»Ô8Àìé¸F>… p³ÁbÅAv"âT¯[<ˆˆ^/ã!óHwºLÅ¢€çÀÿŠÆÞ¶¦~n!—$‰Táš’eœMeLy¨¦K?Ȥ®·]“n´G=Žp²i!·¦ª"Û\hFKÈ/¤ëšhšÔˤ !ë|†s ù6iS‡V ùˆH.¢×À$ý +)«XR^ +ŠÊ¢æ@¸Ù”‡–|äŽÜÈ'Ó£BÞö´;§¤Æ|ì«ðÆï<¼Ö¸~çáÚ•« ÿí›wnf1=Ê’€—/ÿÍå«w~ó—ô<{þüÅs×~é,@.¨#À"T-ùa˜[*ü¯ Ÿ>b@äÛ-‡¨ø.cÿ£û·c p-Mð‡>YïǼg·}}jÍÝŽ]è· @qß/gì=ÑÝX|Û »y™D¸ÑÙ|@¨,\òåWvp¨Q—Wì>êëk¹†.ƒZâ—(â‡ØP,O>¯Ð¿ +¹ÛÙCUÞ Ä 2…|ýå!x _zïÉC à;·$”qš`ÿ½{üšTº´lÞ8bXp=D/s=ol^Ïò†KlÄÇÐy}WÕÄPpŽÿðˆ ûÕ«¼Å5ïu`ˆ£Ç-o¹@Ñ¥m{ßxÍ;1,ûŽÈý•_ymVÖXš ðЀœ¨´(We8Ç(€3ÌP|ŽÌxöQΘæõMç.’×\VY„ÿ¦@ú×…ääG­AFQJË2E*<ö‘qH‚ÁÇpJR" …@ ‰A[9ea¢NOêÓö ÀœZDzA úÇ3µÕ©0KµfŸp"sf0R²>  Ýo³‹ EíA»!æ‰`öÐx)‰oµ¶,Ëm(Àx2ìBfÔpªHڥʄ"/ßÂz ĉ< 5%¦Ð²™L¨UœM§æÈ ¼Gœñä `hoòM˜Ëh²Uw L¹g®Š ãXF+UáÑ-€™Ï‡‹ö˜T#$å¾ä5x ÃùpXH:?#DdøÅp6â0)0òN%P"S½àW€Ëú„ïk[ö;ŽÑæ‘#Y¯‹'šŒ©ñs£¸9ødÌØ Åmµy†‡!¥¼9¢Ýþ]‡a!'úT€ýŽÃ•+€½Èî~âªÀö\Ëb€—¯|òÛ¿|÷ýs€«É2 ð§W¼–ñq«>Áƒª­ ̦N€±”ÑçËïjÀ–ße€«ö·1Â*ô¯¶^AåÍÊP|„¿bXR‚÷qúý Z&àzŽ:~ Þê=‚ÙËµÝØýÜäÅš[Å=+])½/¹]k—ñ¿x'jX&g¶üÛ—¼¬¾Ïõš[Š òÒbRÌ&Ë>à·L¬¼ùX8 @ܞр¢½åu·6oú¡ 2øUõªªI ‡øÏÏYÁ~_åí£GCqê<£óø¨œœ¾·´±µÍâñÍ}hþ£Žû b/|–f¬º^ëP€§žä(5E«´³F ÒÎ<ë<‹QÇçX] ™—-–àÙ,Ë>ЖÊxU´…š²l˜¯°Nÿ‡­½> ç°KÖ²éw·)Bñ»H.pß‹ó €ä&JGÅý€¶jóPØBd=íá³€–Á5f«IƒJaŽÞ«CB“§zïP}Õú9´’‘¼®p£¦ÅÊÙš“_ý(Ëæù5Ç”áâÅä5LA3‚ÙFfò¬$6xC·ç8?+ˆ6taßd!?x•%G¹«WS¨]¢ŒfßB`6½Ú=…²MäÜ’ÂàÉ‚ƒF_–(“5:>Ú÷éK•NÕ(µoÒ…$‚±„g+oË?dÝpÌÓj3¼q6BëÊÁeÔ-2ºk¢ìRè>µ\´ÅH_¸#Ï6'†$Œz Ü{½o¢ò@q[(É:O Ñ&h +"×£ Fc_ïê]Å•^€-‹{ïöUóoÞùü¿É&ov_Íb@¿ûó÷/ž½|ñìùs8ÚÿË^½zùÃOhý?,æ  +`> + >A}Q-ôÿ£s;ÄóW¿Qøº¿ß-^õ€èà„G•4{`·vÀç±´:›»÷~ŰÀÝ{ûeê {û{!Ÿóÿq! gÚÝþuþÆ h7ìX¶üë×Oi9ØçŒX€ÛÏ9òå“ZøÔÈ_"Êé{Kÿür믯a#&Ÿàï² ô˜ø•Ž€ÃQhè2³²Zãܰ·I#+€z|ãÄQ·ªâÕ°ÿþ/€ +ú+pîQB€iÕmùL>l-û¥´ÆKÃßt€í8mÐÚQB©ò€U€w? + ÜN@†µ¼ÓµVg<6 +àmæÑ´œu€÷k_¯Ö’É4™XÝ@Y€ºLP/¼­ü€Œ¡~š,Ò¦ö©#¼r¨Xº¢¾ 7 &Àao4i×jƒž#ÚªjNí~;tøYbÓ¥Û¢XÃn),§¤2( $J^§]¨¡™«Ž +³ +Àª7‚ †]mìd:(6˜¶‰Ÿºà¯*1„£”³WúŒ ûÔ›®Pç“Àýù€•dþ õH—šq70U‡¹Ùì€ôšZ±¨ :Ì™&J~úÍS¹7•P9[5ž”nµ2¥©?+°ŸÄz“âä"êsxà“ïÙÔ|b$‰ÒW\õåÔb»PAç^ÄÑÁ€çO~áuyè$Ûœ(Á·¤ J`Yö¨t©à>BÔuJž¢€JÌ9äš©’ÕL¦ßT¾ûï:T€ŽX.ýâÒß\þàò/ßñÇaÕ\@·ÓpSÀÍkÿ™½¼ú›?}÷Ì•€Aÿ—Ï_ÿY ð'RÃÆü0è°°*haK·?qeóVº +ìûå÷|;ZÿáTàÿF <øœ=:´¨ÑÂÄTa<€ÍbˆñÖËE†{ *³ùp>°‚ÚP‡:T{¤bÀi¸sY7ZÅŽ{:ó™€"T5õÎn§ã½ùW|^*Ö…¯¾äEàË­s¼V,Ö(dž¿ôXgXõ €€bX±€ç¿:a.ÿom^*¸?1TøÄ`,þ¯Ž8ÓZ¼i4Fç™àõkРrŸ¥™εhÕHöÙGœe-Óé­cP„×àÚröyκÀ)ó¼fÙCI}€µ3–×Y “øGݰ[»t@u&#öÏPÌEgóŠ"ä¼*8Gåé©X:NJ7‰H=EF•ÉsX¡GâØË5Å9™|3AÁL’­ÔÃ̬'<Éj‘߇IMHt”f®ívëÁ°’þ²w>÷ ÇÉ#ˆH›T ]èw$rK™Ÿ|€„‘YÝ5€XÌÔo®WîÊ<”Îx¨X¤‰|&xȨ;áfœbE™};û–bèÒ€y¸Ãü°£~h™r]7õ¶]£øxŒg<~ÜÀNw¨KªõÔŠDR*H}™*X +^!×ö[]`Ï‚PNÊÊûøhJ‚©,  ÷4KÛvC¤„>-d†è‘ o6шÞÞ»¥ À ˆUC e@Øï<œhˆAþýÑÿÚMgºó @ø¯¦†8 ðÊ¿€—¾^½øáÇ—¯~Ðà°àø\Ëósȯ,þøÕ¸øaízœù«ÚŽ  þç—w;Šü×Úà%s°L @¦6c˜wÉ æø¯?›§>ˆ `jh€** àËBZ mÝÇé€0fÀ žmM[-ï •‹máÌ¡·¢Í[üon(ߦaž¨ü3ÀZ€|¯úlÞÓR²âpƒü¸´n@™ 0 þy¨@ÁÿCc(ªõãÃéã–Gίlù䯵°Ÿ£oã@ Ë>eÀÜ@[ó¦£-¢X? + ÷O{VYVGÐFÓÊüGôÐþ‚駯°:à±Q +Nü+€³Îaˆà„y棸ÉÜà„×Bäk• YÑý¸oLƽn3®}|ŠÒ:CfÁ@‘O½Îè>$™b˜ÌTx)H)'“§³)õ£C:€ÕŒ%ˆ£íbøFO8"#šv¯ëJøRÂ]\µO.`n—ÙÅrÏÑñn¦xsœÝmࢠ+Áa€•æ9ge{Ãé‘:4³´µüò†8 +Ð8—,j±ö¤ à±Xí0ÀMóB5ù©À1÷÷õ¨ð6]B´èÿ!_z¨Q,[œ/è8 üŒA|~íà_´ís€y¨$2D›'¼ ÀWû$¿¼ZÒ€ +¿d P:+€å©€c8:àáZvÿs}…û‹Pð?SñªªI +ö—7-Nye-Þ*"çð8ÃZJù^ãï¹}Šl4g6ðìZpúZK3¦¹í(€€Xg™€ à¼kœu€å™×­@Â’e¹ž€×úpþÉóH%Š€z àèü‹×lÖí´Û×½¨Ô>QEzÅ/X¡Ñ¸G…ÑÀ=Í/P[l*12MÕÔœµ·‚Þú^rx:ûb ++„9µ¹n[`±Šs5Š%`Td•eœyÈ”t¾sm^„¡Ê¹||èva¬Äm¹Ë S_zƒ.BbBÆÍúÝ6q;7ŸCÙÚœ FÂAg]Û† D¡hY €‘L¨(ÔPÓ„|\ç4AÓ‘IBÀÙ´Ô^’$ñü–$kÚm õ pºmrÛa‹Ö|d5%ÛÝVž°6é±> ›ºP÷L¨OK +*ü¬×¶g†ÝÓ^!gÊi’”PM= ÂN“÷G¦k-—/ýâÒûùèXÖºsûö'Ÿdàí0€ ”<{þý³gŽ 8!ðó¯*gÀÕ°âp8€¸êÿ½À.È6od€>ÅùlzÊ6xÏW^þ–wïÑ!¸_Yîï:³¾í‚çÜ €¢’g¦¿ +ÿ÷îÿ#á!:Ô\m€ öCµ|-hé¨ÀÎýà<à‘Ã* @Ìÿavðøÿ<þfü6oñ¿` þ‘ð+å)o„ª,•ÀñQlX:Kû4ç,|\  òýýªFT£ïp€•åZõ8ÑÀ®¹€\°)äî¯ñ82à±QÈLü'XÞj5Vòšü=Ýp–ID]j#¿Á"Þ-rº;ùÈÕaƒ¶æRIÁœ“ Ò¨ sÙêõìÀ{HÍdÿ⡸Òl?$º.Ú²ØmÖ À1J`ÔdÔm5zm¨LΪ~J”¢÷.Cç­ëBh¿@BÉü€kD‹¡b:tö?XmF Â&¬ÝT%†aƵ‘eÈoùª4CD×RɪÑî=¥Ã”Âp0¸-›QÏmËĽ^eÎpƒ*¡Ösž V#ÍÉ!eà-rb8@{_ +I˜‡x>’é9°¿ ¤«Ï£FU@2» $»ÄRÆ75³ß$ˆe'JBbtË*œœ×ærioçf÷¨;Íd>s(G»ÞyhÕº21À:Œëý„ဢ«ÿâ=}€úJý¿}çÇÞáŸëÅ ðOAùþܹ€„ÿçà¿,€°âPšô„Å<•Ê/°%|Ýò« +(‘k§¼!òæ¿%ì.l7S=¸8+NNëWœ½7ølß›* äWøZþ”à©Z2áŸc¡"â¿khß"æ—'œ[ƃ±äVoŠÞOxk ÀW_: + ¼5K¬õ˜È4 Î’@W‰Ò°4Àz€²ð±€j€ë›`•¤ý˜¿Ê›/ÂIžHš¥Ñy|J3QY*aŽ&˜,i„{ˆ·ü‰^æ9›Í¨8ƒv»ÑõàÜ>gRWJ4ýůÉ?€ •‘l•o˜ØNÁÒ&4òÊ 7¶š“’ $‡@`Ëa¦ ­BÛÄ(¸eÑú£n€h6 ÞL ÇÍ”’,3c2Ñ%’äÂ/Ú6/n‘É<çBìI°êT>¤µ2äj²ï}9`QüaŽÿï'\¹|åªþ.ðÉ»w%Ž„€ÿ.¤úÿàû, øâå³g?¸&à| /«ݰ°…0ˆçrþÞcô3/ À-±Ç/ÑÇΖz·À߀øY&»»•€C+C€»Ù¸x]pÓæ€ Ýò +ÔK n=ÌÿÀM5ß‘~oQ…e @½ãL€û¼ÀÖ¯+à8ÀWÞ3€ýGg›å^oÞ™€*„XÕ›¯U€ÃQUÖó]Æ.[–g,«Î}æ^Õ(ÉÞýÿúõ_In@òªª aüyŸ-€b8: +à-×(Çü¼ÍL€|/[κ€£Š-RN}ûQs]:~XδÀYçxÍZ§8Ý@ "Ÿq€õ£¾˜Íù AUYéÈvbæ5”ÉTDò§p¥y^вköSÈç*s‰j‰êAtlˆäLg>„4zjŸÃ8€é×^!€àPSI§Ú§ž» ÿ0U9 VöÈ3*…Mì3jbqxÔ-nGÅ£ú"˜⢊¨ï‚0CºÆ ã"$‡¬¦®5Õ7—–èü­“~›G„S„Jš¸JHøËÝ%V†licáÑíÎ’ÍÃþì›ÉCÈE†5v̹Fî˜Üô}†#>T¿·põšêÿ'w?ùäîÝ»Ÿh øä{ì¸öÙï¾Ó  $/ž½|öB€~äÏ‘PštÃÜ àÁÆæßù±€~a6¯«5–asð©¶ÁÛ¼µ¼ç‹ÓùÄpnHP•­,Àzep™Ïµˆ} ÷®éX·ýûéheµ—}S©khm¢0³7Üæñ}#Ö×àÊsÛB !—B¹ÿÂÛZæŠòå—é¸ðíWakF,‚…³l°`u&Àõ>Zb82€ àW'XŒfÎh9|–Ë«¼Ó˜€'[@•óÌðúµ¥Ð +}²ày×@¶ÕyB[ªQ§®€^£îU|Î4 +•ò kpÈ[k0ç^7 +m9û<Ë3žº2Óö.ûo,ïv€“Gœm ¥7ÜÖ§lL~#³õ‚LŦ¢¶LœN`B8o2M”Àbø^×á@ e fΜ¨ÕnRÚH,'ö‰~ñ‚¥º2˜lݪwz“/8)³Ü§‰:hIz;îÔ¬Û͘,âåÎü÷ÙàÉ oì'‘â‚Ì"+øL µd ebçæ=]à¥:UU§„¯éH™g‚P +FŸP‘´døÞp‡8•×ûÁ ´_B”òVÍ®~NCuO\ +DeBÒ6´[‰úÝz«¤Xr<:|Œ"©¢ §:°DH‹¢‡ýúXµÏ…¦šX½Ð¬ªü„[˜= f=Ùöé˃Áeœ§õß›X’T5¢¦5Ñm‚4 ó0¢LÇO©¥ï1DóŸ‡Åˆý÷óºþß¾©úþò)èÀßݾéd€güîù3:ÊÐý_¾øá•”`5üªIŸx,\ó·àB¸&°°,‡¡itò.€ê#Ð _¼}°»Yº`fîÖÀøÆ¼ Ë ;àZÍXlÀ§©æ×‹@àK`kooO9³¨]cc3“ãØØ€“Œ½½ýùÎÍÍû\¢\ùsQwDŠSÃþ¥hóohX2è¥pè¹&b8æ@¶öul€}¥ `>ˆ~èPH¯1\×ùÀ!ò—÷µæ£ŠÀÌ@›£|‡6ϺÀáL€Uþjx£Q6†‰êˆà£”eÀêL€Ç×8Ñ€.wf€µóœuŸ%3D3~ɵà + "%Ÿ¬‹V¿‚(ø"Ä4káÈ+{w (˜TKk6aWº8ÙÄ_ŸÒ‚₤ä01‘¥9‡d“x£#ñ.N’„2úMëÉ7~îË9•‚‰Ûä2Sæ0\+5Õ{q×.õƒHV™€Â§FšS5³aÄþÐêUã ÄÎiÙ$" VŸBÊ@y ží#k)“^ž¹ÏŠn­tƒK] +`'[Y­—Èfwý>I{’êܬl”çaâ| Pˆ1iõRPìM ›1\8KÕ² ?¹¬‚à^’½%nrÇ1Ê’ÄOWF·Íר—‚"Mÿ Æ!½ ½ðò÷K€JMáJ<ïþwïÞýô“ObpF ›×8öé?üåÙ_þò—ï¿ûðâÅÿõòÙ³¸êð¬‚ý¥ð¼4êóy¢ì«ù ú¼o ˜|ù-²è°˜ ïݸ¶*ÿs À°® öíL€±D­¯ýа¯‚W• àsO[¶(²´«]¸ £[­xÊ»Ûãë™ÇЄä‚7 Ešuáê¥ËjóïÆðµ> +åMØÿ\£Éi£LÓ ÀŠ@™ +ø¸@ºŽMPBòS7_U5I˜ƒù=÷Z>àvœÝ€¦(O·ØàpD €­#[Xk8ƒB.Fp$rû}̰<`šô׎˜û$Ç–-K>BiR¤Àû À¹Ö8Ç<§­pÊ<¯±„œ<€TbÞpÊ(€Ù™Ö0¾¬ ©€Åh¨/¹X¡HQB´Y0Š\âŒ;,©Gî˜Ær”Ò¡Æ,]Pj\ÅMYQ|”zø „ŠZ$ pQ{ò4ù r¨Ð‘ZÙk‚OÙ&d'g•ªG@øA&ÒåÏÌAâB¨ò¥ÇbÂþ65€#ÆrÁµ¦‘nV¤îÍœøßXa¤i‹âçlÅ™#”|ª„Kðކ;$Eú”4…@iÉOªJ/ć8©{å @:j7¿5) f·f·Fú4JžêûÀm‹(Z(&Z¨1jöÖ[¢¢öKÆ V„qâ¥$:Yç)HþÍsÐN®s“.L®§£g!º{3gs¯WG%H*Š€ÌKµð~ïãeè÷£û*”~oáʵ+Žû»yûÓO?ÿïÞ†Ä#àεkW._»û»?÷—ï¾ûþûïŸ}ÿì¨ÿ?{ö ìŸ=cïÑðVz,úú‹&|þTç7DÀõ„‰…€ÿ·6Ü+újóËwù!NÃ3·ÌñuV€¢^,€;ßV@±C}àß¡qûÿeÙ¼º¤B{‰ª®š©hw±æÿKùÎþø½‹jUÈT÷Z»ýÍgìÕ(ßek5©–ÂÝk—._F›C @œ|õoñ (ï}Ž Vg ðª¥yHìºQ_Q¬%/Ž„ñ¨æ8Í›¿Ê›/¡”']t ”úø·¼åZs íü’ÀÏ´ÀÒL€¥ à¨À: @!Þóõå:ÿ($Gïþ€#3 àÄ¿b@±:“ÀÜpÂ<"y}ºà‹3z@ÆÛ´ûDkϯ™¢õ䱯°Û}%¤”Üíóå%óËñ‚gÊNù÷´,–ªåîµjòƒÖI9z:©èµ¨iäs¿7þÆcþÊ—EAà\Îá0‹‹ +Vz&±'lNÝë +ÞCx&¶¹”$ms2¦alr,©·ìŸôb¤÷A7¹@'•;ýñl›Êê8 ­e¶M +∕liÕàöa5Ýn£Ö¦²!9bäBy±˜f~© T±ZËYÜ›ÌpËœŒ[ÛCÄlu³ª"pˆÿ%2ÿ+—‰¶Î£ò{Á¼òûÉvþs‘ÎùGÌrÜØÂ{-F™²´'ýmµˆ\eÕ-÷zŸAÀÏÿe ÀMUþ»ŸýŸ|òÉÝOoÂÿ›®tåÚÝßüù/úî/ÿý/ÿý;ƒ ~ÿ=$àûgß=ûî/kÂ/ͺ>“hýÀh€ÀœE$`È…Z:zùÎ.¾×È|óO†á;©0VYz¢uV·!ˆš@9z|Ýé|ì¾G·çl}woŽÿ €¥¢ðø¾«þ @PþâÅ@´p.áÃ\ᾄKl {0µáëþð@¸Ñ°£ o¶ç¬À­ÅþêhŠx~w÷*àò;²|µj ZŽŽ(e@é¬XîÉ‘–FæÕÕk]`‚ü§YŒì |ÄžûóøHàO_ €†ˆûd&@ÚVþŸ-€‡o¼€úÒyFÌ €§žÉ€0÷8ÏZ¯™`1 +àukذ~€×ŒXöàb.Y±XWŠ€z@^Ÿ8 +ÀArg T“bHÔ~¤0;,Çi¥XαŒDJ¬@± ø[*q9 Ö Ð„›uxãûƒj`¥'’4nè½ÉQ@‡:ú2˜Bãxg2ÒKxeÉ`â1°+£ÿÊ9 +fM!oHHhŒiÉnF]j@ÜnÓÊâQÿ›Nu0 CÙ0Ñ0ÎvR„ÄÞu “e°»ÝnÀ$8k¸­üd]¹k†ë)š¬Æ. Í À·O°2ÂL&}(I.Ħ IHZsóŒ‹H‚ФѶí8&É4HjüëËŒ‚Jô7ÊŸjW•¦êi`§c-BÖC0?Úëô¶y.[<)4Èg† s'7ÞË+ŸŸEÿ'Äà +€`¿^€w>uE€Ûwd7¯Ý¼û›ßþão ¿ùÍï~ûÛ?ÿãïþñw¿ûÓÿÓŸþüç¿üùÏìYþ!úõͽÀHÀ¤Úú{>NãŸ[A—j#€ý7b Ü„67Àbñ?ßñ¿ã; Ø À¡@¡vQgãÐ øœÓtz_™`ÅPzí£ý}ò`³Ë8´T8/ø(È@ ÷p°¿œqÌ€” ˾WþT[Õþòžó€êЋï À•Ëoe(A°Â>+£Öùl®ú$ÁkF\‡Í•Y‚޳IÝ¿¼RI–àß÷ȵ¸ø¼>\K r•C À™×HÀ¸Qi¾×Ͱ:àñQÈLü'XκRW]£€’›äyMþž6 +`‹“Ïô¢‹,¹X$Oš‰³ZpWzÈŽ²%„#hÖ›®þ½¶¸Tˆ³Rp +2w´î7[½®º²uˆª9„ÈÒ1CùÔÛ#rYÿ43‚胶ööóþ½FO @‘@%¶ÔÈvO»zõ¢ZtûÓœQPIL„ƒÿeg³à-aæORAº²‡üGNñЉ\8–d¿ÀIŠe¹¤‰Ìõ)?¬ÃÄP\c«\X òÖP¨É:'î-yb¢Jp¿ª#Å¡‚­‘Ϲ¢p;ï' `gp"¹ÑmYÖ9›zɵ¶Õ%ÔäA¿ÕŒÜm*–—8 <-i²JºnQ"Þâ$’ 2#=ž©‹P'hjÕ4 ‡;ý3„Á¿ý,øÀí;×´ù‹ÿG†ð}÷îgŸÝ½û ÿîf€Cï~úÙ§¿ùì³Ïþá7ëƒÍú¥`>¯âÿïV1ö²€1¤v=ˆ#<@*›¢¾m£Þ” À†w÷¿,£?_ñ(ø?>€bð<нXô+áÐ`ÞQpF_xЛ±…¬ +å 1ã¸j_:/c#Âg…œyHÀB_ "{aîˆþ¿¼Ú_yÀK @,aonpR)À—zy=Y7 +`Á„ýU Àæ“ÕQ'øPˆKZ¼*ý¿ôXGæa•¤É¨^gZ ÀFÄ.€³ûœm-â°yóHÿçX `y&ÀÒðÚyβ@iô¢ó(ÂëFð m9û<Ë3Â¥E…µkœ2Àk}€þ³Ï°~Àì¬ÅXK°åo7Ë/ÁR`Ev£þ¦“–>s9#š«x,Q_¸€ ëµÚµÔ!*¿AÏ—ñãÍ=­N&‰XÍ;P¸*[¡½×GvFM¶—*A&`$œƒ$°¤áP!ÙcjÐa© œ0‚•?œ"²;!7t{Øî:y¿ nWkóS§MŸ¸Þoqy1ÿÝáw ƫْ¦n«–ѧ$þvɱLVÌá™JIq‘ªpó¯mBì v6eW\»]ôò‘¡Ý:,¸Ðá½4«ót|0ïeË"ŸóN¤8ä››×-3S~cšæ±¾§0oïúÿréo/½÷·Ë_»iŸ?Z?Ð.ØþoÌçuû¶s²DàÕ+ldö G×þzfø/úü‘pKð/*æf£n8w Ø#°Ü +Ðà€z|ür[pþüߊnkÀƒÎnG@±eÏW®F8”¯ŒÅòäþÊ0À @‡úÿhscÅP»»cì'¨àΕ}À̱ì1!UÚ +ò¯ H/·ü.à/ÐWoá± +¡/_=«,†·´pÜ@‚×øùù6Q+€{‡øN\Ö¸NŠ@y!޼BŒÈ¾2°@–Àù×(€7÷°Õ]òXÐû½k³m½á(€Q:j×ÈýK#´f WùØ(zê»`DDuÄpŽQg˜ ŒXà£Îã°v€j—ìUlñ_ÿ±ê¥VpAˆ||wGbZ½\P H„œ´»ÓbÑV ªS¨4É+¾[T¢f½ÙÌrã×–34€Hù¨[œf$fÔÿ=1 HœæÓà½TP‘€j Œ^Ó&û[R2B†m|T "ô3OT*–i4Žöò=‘‰j–&ŒTòÑ´üKyúî"FgØVÒ´M±8]ÛioØÞFŪwQºs/o@ö°95Qb½9 V×$&ò’¼ª87õ‹HtÃèBŒ0ü 7²”É"äl7!ÇùCà¬p$ö¨·rw¯/S³ø¼ wl-*S¦FàÖÛn{»MAe|)ñê÷lýñþßÿ¹ôûvÜùä.è¯1àÎ'Ÿ~ªOÀíkW/ÿòƒ¿ýàÒß|pùƒ¿ùà—|ð‹_^úå/Îeƒn}ßvøÀˆ$ªüU˜#dÙ +Æþ¾²äÙÔ·>>€è­">¹Ú_lópJ›{,¥ àþÜ 4Ûßïm\±°>§ãzôXNQ|^zepÇ‚£ð3¸Q™&‘/a¾Û4=ÞFH­Ò¤Ðd‡ŽC–žt†{oy¿¦ÉDå“$Á$(%P•Šd'ðOÑl“›DšC £´sÌülu¨ÜÛŒ4·Ý:wP–DÌ +×ì Lç†ÝfNtî!b@B;égŠIÛ}’c»}“$a’×,¨6 +ŠúçKÌž£¢_nAÞòc¯uÌGsêœI&ÊRxïAðþƒÞq.ÀØû?èïû w>¹yíÊepèò+$ýâ—ÿ2ÀIᚈ>1ûg ²åHñ2 +àà hÈ‚~@a_@ô+ÛÎjoˆ òÐPMP¸¸ö߃ì•às×þ/€bàìM @Ë( biÝJ@×½P¹+üŠ«˜ Ç&KÐ?»:l +𫟄95púÿËC €+2^ºü–¸ž<9f¨ÒUyh¬Z6¹ X<-&€ã£jÉ:´ýª«éU‚žöVá½Ð&”®³|ŽY¢-¿¡Àb-àöÍ×0r®\; +@(üs À±Q•À; ITZ”ëü£´]GÜý-×8ÕðVóÌ}N`‘5câ-¨"æ ›ŠTÂQ`øs½;ð¡~lùf¹\àá¬ê+¿’Ø£û[Ô›Áà êëd´e]2ApLj7»Ô²bŽ÷íÝ€zÎá°qùªôN…äËŽ*ÙCò<“ÎÖ“9p¨¯ +Û¿HÕ¶i0^J¥ŠŒÓ4š&ï›ÓºZzâŸIð’žš%’JêDž%n6™=õ1ôáànÄã“l !Öùhycñ¿Ùlšlo\¥ŠZ„vF^êSÝjϘI:ž=ÅÜ%6‹<‚2~ÅUhB\ +j2êœcº<,³0Í J+D¹·1%B¥ñ æñðZïӞɉy¥°zßA˜}ÿÁÿnª»ßFñÿì3)€¨ÿ ø_œ>¹ã¤À—ÿVpéoø*—#b¿V1½XØ‹þOh\D­ž¯:øã–3üGó/_¼çÀûZ¢­ÛùÿÐðh—ÊS&Ò °XœÃ¿€ý À“Ç®Pz¥¨ +Ѓåðo'·ËDAöƒô NuèÉá'(À±°Q~õKZÿ<Üh”5—ž-|Èö«ïÉ À¡@)†¶þˆàÞ飊@ö&äØËðŒþ%¬R€ þüUÞ|NŸ`tvšßØ Ð_û@ 0F\´¥Yôh@Å«:é*òQö~üqýB­váãk×hŸê’ÂÍ©§ñòâIÛáKš|½öÄãH"Û¨…S!bk +à‚C“‡´/CqZ +2u!v™H4 Žœ}@ti@²ëD€ˆ±b8uÚOÏœ[^7@Ñ7i°ã¸2ÀêrÀïÖ ´À³’ Ä!öX–`ñ"Ég¡_ê§Ûd°— 6+Ë> +¥À@) ÑÖ \WP±f$©©0–‰ =1PŽfç¤T¢  _åÊVÓ\ñE´ŒÖ±*e eJ™_ª[WþØu=S¨e6ƒ,»:zPÉó9´m[×C´nêR)1¥V!©!lByò8pßÈ£®hLÔÛZ­Y+™lë,‚’ÒNä%%2#+­ Q#´VðGd« ¥:œò¤Bì¬vÏ,õš·³×ËdüÒCºH8ìäÿ®(ÕÑÄAò‹À;"&Q-ÓTÓašªbòÖ2S‘¿ò§{ xl“”‡0OWmD¨¡DRÊê=‡ íû®xíöÿíæM§.ìü¿s÷¶=ú^»"¨ÂÎŒþïú'„;¼ãþA¿Ã-tèX¢%kHÇzPäá«lëÐl´tptM @ð¨S1€åyömn8P| +¾þ@'ÀÊ@(`¯ò$hèì>Ùï@ ­ÝÞn/’*†’Èj€Ûñ-ðç1¥ßÜ¿åg þâÅŸðƒÂ$›€‘0güyöü…€ï} ·3$䡨IÀ ÀÉ€'OŽŒ(oBä?f¨|8é„QBüI¢7hàäOH‡ïóÎÈ~ŽÒ îà¬OA­ïm 4(·zšöÀ.n›©žšîd°Õ“„|páà)üƒÿ„z­ÎžkÝf  vF †IËiY[]0²MÔ_Ð"ÓV€ÖY ºm4n'B)d¯ÀH06ud¶ÁmwIŒé#n“`#ÔÌôÞãö4z´b4±´Nd•+£Z”åVRX¥Ê_AÕ=Ò \@mÓyTfmãçÁ$;ÐgÓ‡d eGjÍ,ã)шÏmÛÕSè/±C3MÀt4¶çMçBqÉè–u±W«Q_áxÎf8Ç]2Iï:']w¤c€ÏA +Ê|¯ÒäNþT²äŒ +ôyÞNjEÝ6#ÚpFK$€¢yO›—>"Ú:Lù¥ ì°[åý¿®ü,Aw>±˜¿ûég¿ùóFùÿX&pçfÖÖýO£4t@¿Û×nê°ö B¢í0Y„Ê'L­ ²ø¨FÔ?„ bùãØÌ†«ú dñèw-€â°Y¶ïíßs-Nu-¢ýû»Nù»»±Ñáßž‚œeô'£`ÏQõÞæîœ³(ˆbnÜhÐÌe¥›ˆ½£ÑÚØ•T € \~2pìó XzeO§úòOøÞÙ–—,.ÈtùÚíÛ(õç +A÷…àdðduÀ"(ÕQ À濜6 +@€Ò—“ð+ß«¯ìÖÀ?V$,À?ï7š ÍèDÕæ9ô B¶·[Z [ßÒàİ%ˆú ºÓ±€ÁœF®v¡y¡ ,µ W£) ý( ÛÝê €žÔ…аZT{$[4.44®Á¾ c‚[&s€Ìh²\TÌ\(àÐÐ>œ´¶f4ÿÑ„°e_-oZåBÐé3¸›qr‹Ö%[{p ­9a&­Ae‹Ôú-ÕEZö°ÏB­ª½å0oýûk¦_$ ª€  ”&ù%p»¾ÑÀŠÎ@J€æ±€bñÿà ¿§_|ñ-¿Çßé<Ç, §©%ÑëfäõºQ˘ïûx@ýç­  ÂŠ kþê}Þ™i?9z’môý„ŠU嘠 @À²àÃ?þðÂÇõ-ª¾µÒY˜%€>à »©XÒ ÀVLî‚÷‘.H Mw¿€ˆl/1ö%`2àÐ T§¡ýûÝmš°X @mZÖß—iØlûS@,õçF"Ûò…€6Žwe $“¾v#¼@ð¿þ±àŸl(ø?Ï*Â’ ÕÚ"S…¥)æÐõÿ  újºßÚwÏáÐ[t,Í0_ èXgàVÂÊ™_Ý6Ôl8œ )#Û}€j(’ŠºH2j›P2Š{K;„׸¥nŠNOµt“ö–‹Ù›œ\ˆ5$èBÁö¢·o;òÿg ü_»ê¹n„3œ2pÝûŽûAO{ÿÙ ª*³@th°uC%ò‚žtÀ¿l /Cà¿Y÷µtxˆWå9ƒ²£*»ꪄ ºAB9¸À—6.ÉF‹-Sº|´ð‡\¨]¬µ:÷XÏÖîF£ÅÙûû{{÷Š]¡ >{‹?‡ÁÏÑ¿ÄÍß Ùøó_þXãà¼L´Ÿ1ÛÑÿ«.€;™<92 +€À†ò·œ6 +àà UæžD ÀšÕï +ñà?áôyÖ¬PÁ}BµÍ£Ìïøç  ÀM q©rØpÄP仸øBÕ_ +0·\ø0€9@ß*ä.àa»ºÞ z€» -…;ÁÐ_²´Z‡€î¼ €¨"LþVqÔ £XhÚÉ…V!f¢—.¡<€€üá@%>¼²4ZÈ•… Aœ´øÿ¬(ÿb²†»b`Ï©>Èvò<êÿ…Ðl·H€õs„6@¥6¢~:VM|ÁMø˜6uòÐ|Ö~ÍAXÁàÒ>¯3F·OB(vÚ=‡¨|\6á´þ zÍ‚Ý\â Å´:¢Û›õ”Êó ç¨ ‹´˜@¢pL¥(ìdêJ;=ÄÜÏÆC€p6»ðΈœêE*Qj—ÑŸCûˆfÙÌZþL8b0\º + TÐ~¶dà«×X +XX + (.G-›§øÈR[„õ=e‚À€ ++«ðî™i|8zÜ Þ¸O¨¶ ˆ@~ зdÐàÃë4Í[€4g°ˆn|z£¹€“{®±ÐôT€ß`ãj‹ºÔ°ä€p'XBlP+ À‚ ³Þ +I¥"Ù3Š9B@8¶\ý}H4Mbäjj2å&QMRÄ ~é´Q÷N¿Uþj6ëo¥›œ72ͦÝv­ÕNç?±ãJüã~W1ì ëŽzC‘Œú$èO»ÃÙSA=ÐëõLNO',ʱTDáù…4 q8;KòŸjŸÔiör8ͤ7kS‡8‹TqÝ€ª†‚žî×@N>‚®:ý¥ÈxXG£V‹Š8˜¨ÙëhB f¢ÌA׉é0ާ¾å<Θ8CjõwŸ x­!ˆè¡'³o´i˜@vhLãNÄ>ì’lw®ãÞv)œ¦spÝí5È” t€'Z¯H“œdÚk´c¥Ke{ÏáòÕŸãþß¼};K„|êª@±è˜ß½“þèþqýÓ +póöÍÌxr¨”ý@=Ûù/º€1…ÜÚ¼uã:ÍXÌX Ë€üV]–C÷!¨ì›»àÿ ÔÑëÎÚkpÎÛk6/•:«‡äß<Dí¶6ÚúhØÔ `®¼ïô÷:€‹p€Ö¦æþÝÝû›»÷Ý¿ÙÊxž€ä{¨_†%ÌÃýDÊ/áÙÓ‰%€]Îÿ[ü?jˆ€]·oßTÐs¨@À¿}UÌk_OŠÀÊ(¥:f¸wÚ(€UÄ_ßå¿L\aEBAþù»Bü¼Î< Ïô²@”⻑Pmgç`ª€ˆ×Úzʳ Àk}>þ¸Y¡ÿ|Àq @º-8Í0z@ûXºV|ú€Á’±×[žœ9Å R €>4rÇ}h<Ú{¡: +NU>fà í9ò#|e¨Lÿá@¾ 8ÁÀAÔ[–T™Å0èŽÆài”ÿbàÍi1¸õZððÐ °X¬+§XЛÕOÏbp`( +âICp“›ÌØ1‘¦ý¦•@ëu…C†TªšŽPQ9ìE#GCRJÒ.UEV>œg–Ï(Îhi +ÈÊ?N!@*8Ê]Έß|¨¿Æ"Xàæ|®wUšÄ  î^kõÆãñÎxg¶3ímЂ‰Ôʈ·»¢ úèp1Òú$JË+Ò#@²ÍU ÍÆ•“^[Øå9ô9¡–-päsʬ-ÞZð/û# +ð¯ç’m@.Òð´ZIFýFË"1£Œš›8>ϲȡ&£Z½Ã{ h +†C8M×óÏoø¼3DòRDÃm™{ØK#í#(²¥ô{JRxIršû’fΠ]GzÉy4p´¢c GeM%ÇÍNmM5¹ô½‡IQßs¸"¸vç¶]þ.èÔ¿ndvŠóúT! Bp'CiþåýÉ;“[Ú2`™ä¿úUGÔ$agnX þ… vg6!÷þ#€SAú0È€|Ï߸4·Kæ"Â]FˆZ½ÍžË V @üóZšj×!¨À{›»÷4ìßÛÔ°)‘ìÍu~ç$¨Ló!h/òW¯Jó¯|6ÿñÁÿ£€¹€ àæ9lQøÕÿ€C¼?þúãÒ<æH0ñ'Z8Ï \PÛëW ÿgµÄ [6š´&Ç-<™Eo:´”ç* ÕvvƤLÎl(]õbÿ÷Kô#õs@”@ •Êû™,4”4WK€A†õ ñŸûãy,K>Å0÷u7?â@sv ÀJÀŠ`žU„e ´Aý¿ß×9<Űd¨Ô~þä#ÐPý]ëàµÅàLóñ ÎóW(µç™½(ê üE¥<èŽÆÚÕGÝfOöYø'¿ K:±îÅ6È/–Lq‡Ã>w,Űž¬ZÜ’jŸh".H$ˆÊ4@œºX¢)rNºÃ°ÔP}…İ¿»ü¯×[¢r…ÙQç?.€ÚÅú ÀÞî=H»÷÷:-PR½XÀ_@=Ž4¼¿«U ŽT¿úküI¥0vüîwéXçð¿ïRÔóÐ]@Ñþèë+^$Ë–F°¡TÇ-›‡€#£ŽjüŰúr—Ýÿç°¸òK8ÉÀ›6*-° F@M÷åi*ÛÙ9˜lñ«VŸÕ 86k/û óЫFœÙ`«u&€ À±Që-vZÌÁuq}Åà ÛÇf(z 3”€%€b2 +8ÉÀÁÜú,,ÀZå ÆGï/, pmþucªßµx²° 79ú¦óÌ$Jç +Îû«7ÛGGc§_Ó´p·É\éñ  êò(ˆJ¤ÜïŒb'(ç KÝŸªà„ +Y¨–Òƒl=Ôm%B³Ÿ +bu¦P)oïMLjÓÕZ‰0ЦÉ{2éÁ ˆS“õI Àl:ÞÙ™FWÎ0¨Hr†*/øBô“c ä÷® ¥.‘V-œêŒHkfûp)õ0Èù$WVÓ“/uƒsŒº7í‘Ã–×€Š†NõŠÒÍ›Ý0-LÀiª$Ï…¤¦å°{oƒøì@`¶Û¡  ¾BMúõz©f0‰Ê˜{ê‘Tbâykš2LEFNãTëÇS9!§îC|z”\_wÄ*psÝ ¤5^ÔÔš§ùß4[£¬åN¤ý[ŠJ'@ˆhv¼ïà ½÷bÖÀ ºƒÜêÿ¿Qõÿô³Ï~ãÛ®€;7ü›ÿ+×®Þ¼yÆ ÀÉ!È$¡Ùßô*àNTàV,€ë 4Jû•Ë[72&îhè<Š üìßlªDËâ˜Ùgʬ}ªüü+PöîoûåÇ™iŒ…ð˜(÷wÛœVoq¤ÓéuPï !ýã=‡Æà‘Ý{»ÚöІíؽ_,i¸_ 2\ðCfÀž„|Ti€f³óß~§`­ÀåKWoÿ?u€T +þëÃÿ9 Âô$kKŸb=K8ÁàÞI£Rdg +ag¶,1Z˜µösT¦± +sÄ·uH¨¶ (>h\g·8 °~áè(€£>e€sù„ /§Òò¨úÑt¦ `ÙÀ冀¥yŽ˜€íe ÙBé¸Îà<€¹@ø?ÑÚ`çÊ aŸ/XX±”·€rˆ²±äɦã>½å.€¹À|ÀZ €xz¾àÒ*Á# +‚ŽÐ’eB‚«@ +R¥Z-úy<æÒ]^·ˆ@’ž * œ‹É®NOÉoM&[­&Bös1Õ‰oH†¼ŒÂÙàbÏŸ&Z!ˆIǵ™Ú‘-èY! ¶ô´Rd©ýqÖÀ 6K‹nào¯×Ô¯°=0Uý\;†³á¬ê<ʱ½Dô­´_âû幆ÊãX9ÄãQâß“Ey ¦úHÈÑ4"ðR‡ 3’€ê>h ÀPÛÆ£†ÑtCXxHB2§G¿KžGãjpyÙN¥ê·ë¡,äÃtÛÄÁÔt Ĭ‚{sÅÅyfiKIqÏ<¹:ÝyÒ¦’Š/Â`øT³‰k/úÿQ¼çOÕþ¿ç¨;£O\úﺖŸsÅ.æð§ö_üÿnòºvûæ'é!8)FìÿõÕøÅ7Ø•7¢Ç 0ûŸPC¢´x\BÙ‚|XûÒíNìDÕHsIÅŒó‚‘QÀªÚœóŠTPÚè´Ðnr@€N5?ý&н·ÿøÞæF q±'@Õÿœv¸X`1ùGÕßÝsò½GAÐ{÷ÀüíÝ{ò}ï`Z,ÿíbøË¾çS.“ùö3🷀ϟ|õo_žöúòË€-ÄÅ®tº,[’ñg ¥ à˜`é›Ê?G7ˬ†Ó,4]tÄ„,P!¾pŸPmg'm“>ü;û<èû; +@ô_Ðuµ…`>ÀÜ`8Ͱ2 +`@´µ€Á`ë»LçŠàd€ÖªÀ‡>K£~a˜w±¬€CÃ! U1@æ£Túç*¿pϦÿ»€Ó/ˆ†¶|î 99q€tZ¨G-N‹wÞ€ê®n<ÒÅOKØ;ngZi;¦‡M󇔉ï¹?Iq£{*X:Èä­^G@. ¨ˆF\pe +ÇBËmQºæ˜Td'Ž‹/@ †’¨€ËQ…ÅNçàö$ü%¢¡FõQ¯]«wõ–$û²€á´ ®‹­å!âNV(!’I ‘Y±Me鈷 €±/¨z•0u¶ZG4™irÞ'°¯úÇq0t~gÍèvèaÏ™pKPüGšf‹¼‚ÍòµjHœZ>žíÁHCG_@ –¬˜íc2U ¥’™!)µ–Ê ¿à*i*ÍÆTf46§nS•ó%u¤‰sejî¤(GS蓹\ˆOÔÖ:ÈÝ0‘Î&“‰“jëï0pùûýüLó\¹°¸P€»L¬-€7ê¿SÞzª>€ôøÏ§uþ ‰½ÿAý˜ü/)€-®¨ë ¸å»Ñô5ýg‹ïfEÐh£sï ÕjÒÔ×eÖ>ÔYõYð^Ì òg[Š ò_N-0]úv;†€zÃHÁ÷9ÿ£éÇ ¡`È à±“op†ø¿—†Ãî-,NQø@Jâ/¶î?¬8Àƒ˜?øÿíN°ÄàRºþ.ÄëjÔú×¾æð¿êX^)àøë믾,]åsÂ<›÷H¨>f£&€Êì=kýáV”t 5øÜ–Ç7ðüQÎc¹Æ`sc«£k5O)ðŸõ +îªíì¬|Î5À… <: + Ö^ñÐ!+ À‰ó±ØD @º2À²Àª õðõ£¶»éxkÁÇWe˜ûd€à}¾ûƒó€³Èï¨uÿ¿/$?f8ašþXhâZ¾(õâ0„(žø@^£ÆR ‚`(üÇã~ÝúFNåDBQ³IâSpF\bŒ¦mß3Бò’¸‘[9-ÔVLá£é1GO¢‡( 4È,ºŒªÍvôgÄK¶D„Ñ %Ü®„épgìšõ`öx,B"*äzV¯[oª@#—*vÒÂ^ϱ¯€ú7¶;ÔîÕ%Id¨xÇ-8®R¡Fê<œìm™;°SCõ˜LâÄi4ib'=>©D‚b@ÛÈ2ãÀd6ê9/`éΘ˜´BtÁ3—¸ídÔëÕk’šÑvÌ ¹€fú¤€ZKk<3ÛØ_Ò¤Xn¦ Fý¦ÞûƒÈjv íå'nÝhXØžM´PÕµºHçHkÝœF„óÐ>„¼÷Pú}@z>¹ó)Ê~™ ³ó}7#u@+ØÏK࿬ 8!ˆ#ä'Tt€`@è±™+ì)[|ƒþM€¿YÞ"s£¾ùHLû\ Àãýû±þ„Š$ÜhdÒÞ2Ô¿ìJ{òsø)(-þÿëþnÇ ‡½‹œC¥°ïIîwâ¿ó õr/|¼ÏmaY& y@Ÿ gí¡õßEwÑýù¾÷Ðùö‚ÿìáÐ(À?üæþk±œà Ûª,WÏÆ|»ñ哯¾ü\ Ú ~ðeX 4k,0vé°4 + ûÃq €q,ÞÄÈSî#\½ª†ÓFØš–ö4[Ùày Ü'TÛÙ™y`÷£óÍðqýÂ’€È €àÈ<™ ðµ€(°è˜ûñôg¿ €Rr*ᙳ!¿c¹”gœx½VS¯V/>˜:Qn+í´ë ¹† õ F!éœPiÃpŒ@zûCbL”âQÍaŠ&ZM¢¤XÉQ&½2ÂDQ’Í88rëþtrPYú3By%]•Ýû =»èß{° ÑùAÿ :là3ù„À¿ÿ¯\-£‹À‹àëÃÄy—þd*䆯 0kìN(ö×ý[ÀÜ ø¶fð\<èøÚˆ+!‹÷ÖŠU!{糂uAi‚ʲkÇPººXîÇpßa€×%EÝGÓ/€ÝVJ€Dfi?¨õ`¼ñ>ry"A×÷ùæÏÃ{Åà`BO|¸ûÿõ7s À±Q†ù0Àð®«0€×‡Bwÿ–õýÕW ÿöõW‹b€-°Õ°I¶KŠ"_,²Ÿ1Øu `…†%ü7ø`ŠùåUÞ|dà‰çh`¿ú&dCÄîªíBŠ€à\ó4£ü¯Œh7×Íp Àê<j)#Z»b8ƒÀ: €]çõû×[È—% À€Âƒ +þWYE8f°õ_ã0Eëç'Ê¿ÅPùÿyÏ-^[|Î7À1ýÿLÁ‰êMÅ¢å$ô,v/ëi>ê×[”¯‰ÝÀVB ù©jð¸ÔQ,áCZ%0„éHO4•cJ¦2\¡ ~Xž{²~O†••úTëõµW;ÖΕw"N¯#!& +‡×Ù Àx¼cyowŒ_·9$VA&§[¤¦M•óN H’G ª Ë:H ÐÒkTx²Ùu"srÏ¼Ž“!l#Mz󕌷Ú÷Þ;Ù_Èš è/}±€ìòž¥ ž xD­I@\òí0˜¶B[kºæ›é +`Û2Sp-5NŠDµGa79Ijk–qèô?‘¨&ú=ÙI‘ly&…Àcæ|H&qJí#k`\oT—Î|RC¿Wàý•y'‚èî'Þ», dì–>*ÿW5Gà a79Mµt}¨ Äæóµ0€ÿüç£)ÙQ™·7†BÊ·ï°|»åЀPù¤=øŸ¾€ ½€ZÃHsœÈ ÕÝ—ƒ MxòX @Ö–k„}ñëÉÛ? àz£³ õØÛ×á'û0Š`ÿ!çÚw°{ooï‘?z´ÿ ,;Ýÿ^Ôýû»ÚŠAà¿ýÃÿëþkåpÂ<•Àß…z‰ @\ü¿:Ѱ€~__󉈙eë,(ý+g±ð©°‚ä/ðÜPÞ|N±–ÛÅF÷ Õ¶„jþœm€ù0À#kèxÄ.޳ù,æ¨|.]oçPYVGœæ Mx|¦G|T[W}ÂÎ>À‰>Eãâ_m¤ ì8ú¦ÖfÃïÍpþòŠØ‰· Ú·ÇzÈ^€)—¯c£.:äæœW*,(À¢Ì +À5Š¥D•ëÌ«H4.ôƒø–¿(‰¾a`ÊØƧæHµŽnòR‡¬[m>ô< @…\Œ†ƒX,4˜‘b4' ˜ò !²îK’€v2Ω‚†;&M6"À¢çé*Ú²S8&»µ$Ô匕›Ó±">¯Ó.q›lwA¿ ¿Õ@rÈÌp•îZ££Ó@¬+eI=ä‘"ƒl*} +­7"œv;å€èIŽžº e‚¥#bsøÿcîß~¤ºÒvO¯Fø3¨2—®,2;­²:*ù²Jä½Ìjl˲°ä-EDÆÁ™äq³+ÊE¾b/ø¼šºØ’Å¢/-!_¸´þ©ýû=cFdd’‰1vÖê7"æœ1ã4Çó¼ïxÇÄŒWùwฑš}I„I +`¦HÑ4qê `>ä:G‰õš†åÎðSŠ•.ÍŽŸEJA«$)5ù¶ÿ)m ù¿:ð…ËN|mù +LÀA–/gÀKïÅò|útð?¢% ×р0Ä.ÿ`¹¬²C.àx€q I°~Ë®‡Ë¿F €ö+@ôÿÚâZå hoìÜ(ªé±Ï¶àêàÈâ¿ÂͲÎxåÿÔV 4+æöÒ;µóeÂÄöüÒ¤¿eÀù8@ãµøûq ÀàŠüÜI +°¹ƒ®_€5~›È¶ÛÂ?¿õ- à/Ÿ|òþ'×>Öà@@‡ð,Lü8]÷Ÿ#Á’Jü—@fuþ}Ð_mÿ©dïDþã!€}½'~•?,!o:Л³³NÁß/beSÐßßͬ© +ó(oRV{x…ûˆ+ñ'•iñxáqà%Ü^U_{<À‹ö@ƒªš* @ÕðÌ\PŠƒ}^¨µ­585Þ¡>m;`°µdÆ0ñHÀ À„+!û,Džœª,†³k€ è  8G¾êï!¿§ÎæzŽi8d€C{´–Ú/ñ©-’ì ‘(Ìc+ƒ¸“|R9ŽÀáè9BáŠÀ/Î!‹OÈÓ௔€¡4ˆ|Bi头ѿÛý …ÞÌՀݒÊvÀ)A(bÔ\pP€þ ~¢ä)!Ž{‹>Þ†t±tG£æX0_) ûèõQÊ9I A–´‡ž@”Êýá +Zð\Ýž½#›1ìŸàä51%¶×^l¶ „ÃHØŠždòDh@P)j r.%>-7ÊBæaói¨;‚"Ä&Ú?wãæK=› ôRäAZ54–ÌݧâîÕ¼b$í¥ ×¢P{½Ö3‰ô5ÜËѪ¡ºár¼pŽÁ£­N8ƒó¹-ÓùÀ#}ƒ©µ&ö +‚ïNÎ…Y¢ÉËÏ—»û™ùš<»ßŠÀ™}.œ}¬¿veù* `ù²ÓØôPýçðýçtJ–^OïAM‚°•F©Æ? ¸Ðàø×Za7¯Öðÿ¢°o#@¬ÑÎÓ þ  mpŸEùNmï¼³pÊi{ +Üg±ìÈI¥çà›x†f† p¨uüæ­øø]ZçÙq÷c·`I›Àä$ÿ‹àÆÎæghûV®Y@ÖÖ×v8§®Œ| €Mû”¡€‹ òú¼Éð ÀÅ}½&¸þRÆ{Tûßk@þeñêŸ P™hýèÔ³ûHýbÐÔàEÇ `¯.è€ê?3¨ €:Xeøéãìú¼ü8ö09žçТN'Î{Ƙ±ÌŽP€´¼€Àžq$ €º~ø•À­ýíÿåë¶v Âvø8Á €íÃS Àø÷ãq •`·õ=)øR>éȧ²ì› @øa€©Àöÿ4úÛù/¾2´ LQ¿| ú»l†T>íÙ&€}>{,Ü>c¼„ÔìëükiMWa&'£XFyî÷[5[„ÍÔ¢&'SZMvÀ¥àJ+ù :-6ÁÐb'¨ N[dëØÂÜ£(,tÈÒA¼ +P‚ñ”.Ñe^TÓž?ÒÀrÀ4¬È›ÊƒÓŒÀôâa¢©OápŽÂhD=`ÐHÙŒÁI-”id«à7ø—è$iLzžQOã{X9§ÃexâJ °‡ÔtìCÞˆîào¿ááíÁp©F`ìÏ(MµMCì¶g-çºö’è‰Ù¥LwWr¿ aì õšQ+ýöm0ÑóêkŸÿÍ© Ùè¥iVÉV!ÅUjÙ0Ç@4ê5KNRŽXçtóŠïaÛ{½àwW&»„÷=¿ê›C“µ ô¿#ÿ”Ö|uù+0€«×–—/èüwíZ<tô»TÆt€³Õt@r† –k±çÊÁúÊŸ¨ø6õAÇì+ÝòŠÀ¡±Ø0~yjÿº,¡Û ° í†cöGDö‚ïk°‚wjÓ™ûËÎ]É™ìþ_,÷ÿµ4Ã2¦>ˆ.ü€XôÜÒàQ‚RÀ.)‰z°ŽŽ/Øþ·vø¬þ¬¶·ÂØf‹íÏÀÿ?¾öñ' ÀA>,yyÆpfîØ±çíŸþÿ¬nÿéÌé£ûOú'ÛAúçÈœø“†Ó^@9Àžaþ~ðS ‡ZªK^¸ úg³¬‘ƒ,T°ÄúbNHëùe#6*¿HýbÈþ½Ø82€spGý÷ö ¶šX&ãL|®çY¦ãØ `¿ÀÞ^‡øx#y À^ À û쀄"üþ€^’à@’ +ÙµÄ`Ï\3Ñ^ˆŸlBÈf°¿ú–…i,©ª|À¼/àa×`<£|ý8i,qÀ…LxS ¿­ÈV‡-ÊaQç9¡@I*pOÖ<°ËRë, Õ6Š6Ò×ÃŽœí6ô0dc³»¢܇Z´(B~Zføõ¸?ø+° N¶bE×%´a@º‹ÒÈ€w£¿2è¯rß Œ€/X6¤žyEZ¶”€ Ü5Ê2¤¦Ñv¬BÈseI[‚B€ˆ›!æ>‰Óe‡3bÐJÌ%¦Äi(è8«¼É6Ñ…Þ ¾&YØ?Ô P>¨iCI?ÇVO–ï"yšµ™_²È~Ô7Òç~ðˆ&L­ÄÈþŒ +†^ \-M#R€½ó1”PT±)•ŠD¥üñM…ÆûU_žÇ‰<‡ø·o¿ \£ìõN/öݕɮ\<û«–ÕÑÝuUõ©œ9¬ÈPü¯\½–i–åú^¸pùòòµ«_¹šy‚•+W®\Ë×?þøú§öðC*Ü÷OYʲýkÀuèyýg-¡@qð¸‚å|.V`[î Çé©DXŸ,Þ¡NZ´ƒ~Ù]µ¸Qæñ›Hó7wnýÙÙ€´ðôˆ@ýÿàæÍí%Ç –¬?/sÁ¥¥ ›&ÿjþ6ûßXÛº‘΄;[¶'Øæ¿±u£Œ1°¾þkøäýkU€gzÄ`.½Þ˜Z^ýø±°¸ø$`@,Býð‹ÌÒ€Rž/šJ€@. pfÿÌñûî¨ôÿP€ ++”]øø2Zc•Où² ‚}Æü+@Q½Vð> …¼ÙÔ¼‘ +úSeþØqJ7À»Šþ.À¾I/tß8»½@+žùcÆaãýs„Rìpà™^GâðRã„Ä.öùÙ €l… Ì~«ÿ,J +›y±ü˜qréK ˜K‘áÎ$ѲŒ:¬BicµšepŠ‚mA ”€ÝL­1kÌ,«c^ | úÁÅ™u(ÏgŠQ”Œ‰÷ÐÖ,š:>Ïh5$d]ÝÕ +‘fʼn ÊÈŠ`9¤àØ °Hp)$‘ò`I±.ƒ>ºEø)”AÖ€Ú ÀÀáx&לM´º[é–àGšþ%¼à¹o$„ˆ•F‚V@qQœåóRRn)âìï—H¡mÈÛ(ïj¨;ü—}%^ð¢Êu°;â”N’Ü‹ÿC´7RKÅäDÝ +ÅDXéC#œ‡!1àÌrÜ J©cºÜ%s1»Ü@Ö¤×ñ2xÛj<³ªzž•äáÌ×ÇUß=&;²ÎÒÿ.ËÚE©vXNŸ} +pÉ>}Žÿ+È_¾ríê§¼ôö…åkŸÝýT¤º~ç³;Ÿ]ÿô³;×ïÞsâúû÷îß‹Õú¹s7`½_°/Ø?ÙÈì `ÕÿÜ/ßrPØŽÅþ°> ñȸ{ÂðÐ^àѳ¾w° `ébñ_›•/¤ ÌŽà/;;K€|>|€9Çm8Oµ·øÎF: è Ê> r½}Mï?66w¸ÁÎÚŽƒþl³±¹sc“-ÿ­í¬Ý%9Áÿk×èÚõëλ\ÎúÌYËäûTíÿ»àöŸõÀŸ…þl—²ðb €½4æ«Ý¿ˆ, À´½ H1 câ°×ðüÙ«W‘Ô=Çú¥hþ.²I5‰TÐ/‚ÀôÜ8¬X@ÿ€z¼ì8€Á!#Zhxñ^&Ç‹û MªY Às„ üH€4L|ìî'@‡ðßÍ=ðï—ËÀ±y§.ü£ÆICBÿRR#)Ià耈˜ÈsúÝáêx…4o™gÄ@¨$² *HÖî%á‡vô=Ó¹·K¤ˆ‚Œ yi@´V+¥£l Óú€1…ÜC3TµjÙV[æ$Š[hPS@p¢¦Fù’I CP·Cœ`ÙêK„\e8¨-µ + +Èj¸Ù ¶~Æpç2—¡‰ËDOkD¦ú9@ ð(MXÿ4t—H!¸tùm‡×­»7áCá1ða«f€Ù@7M 6žîÖ ÆY£¤>/E²Â`@fˆÿfT_Ÿ§µf"†Zª£» ËÌoàûjŸ‘aìzäDÖ}Ül8ÝíÏ~ ו4˜.g¾YMöòó_¶Ë¿É²ú²Pÿ;òßýùϾ Æ8@íÿ——KW>½÷m÷ßÞ½wÿ[äáÃÿóÑÃ=zpïP™{Ñ?“ÿo]¬&„,žÒð­·.–ÖYÀEW,cøúË*}jKë‚mÆTBnØí^äÏB|oœ_8y¾±tq…ß=ü¦€0€Š”› ZÖ×ÔY©@ +/@-ï,Ô`iíæDÛ' ع¡"°KPý7€÷õmÀÖ xÀ&PðÛ5"°ŽþÏšßÚÝ»ŸïZ>ù~%u:Ðà}>¯Ÿ°šÁûg>¶þß¾ ¨À_âx¸Ì¿^=ëŤôæCœWÅ |TýsE%AŠ"‚lõsåÛ;a¼uÕ?^ˆ}€ ÿD¨ª!Šy©7«úLI«â)ž ý"H±P¿üH€sÍpÐ8»>/:õLe˜ix!€Ÿk.°ÿ` @ôÿg|bpõ>6®L,Ô¡• ÿ{Á¿R÷÷+øo˜f$X@ êÀ)Å¿Q_V ©–½µÓ^(”#Àý/P˜µ,ë!ø‚@CýÖ¹À3u®ƒzYTs¹ÇX¤Éªü°šwÙÛ*.uŠÄ—ÀŒžî«Éâ! ‹B!ý°d9aÝo I”ÿ\«}¿1±¹‡7†}\ë‡ðq#N)H©ÖJŒlûÀþ¸Û_͈;š&ÒÛ›auûvtÕ Þ¥Èöíx×!>ÜX #GÍsŸb¬mÖ(‡å2#žCMYõ[ÃŒ¸ITÈÁvìCA¸Zµ¦#!Êô)06kÓ0°þ<±ˆ}ôIñ¦ež3¼;µg |¿m÷þU¥çYç¤ÜÌùÜ( ¼s\Ϋ,ó!+|@ì U/ +ÊZŸ˜ôÌïêA»bœvÉ7 Žû&ÿ¦ß={óÇ­rlºovGUÝ­Ø ¹¤ïÿe¸rU@Ǽ1¸zýÞƒ‡ß~ûàKÊ“‡>ù¿C!~ý»Âÿ·.:$@ÿú-‡’I'€²7€p€·.‚ûzÿó™~«q2ÐÍôר¨ð¹‘¹û¹ÿ¢Cí‡T€o·¶ +ÿ³'ppËÛ±Cƒ€½7cÐpóæúÅÅÚùÚ©ťS¬·àæÚ;œêFv霰µ¡`}m{Sþ°M€¶Š`‡Í¢ûo®m­}s÷îgw¦>?w.€3.¼7ë0_êÙ?Ì þÞþÇ[€?ÍXž#?ÿ½êðæ‹u˜œUáÿ3€] +Úqò9t.€Àþ¬lõE½Ž¬.Õü¹²ê—½€âÀŸàU{œ¬S°Dÿ}½f,i xÀñ[àà^G<À €b x€ÙqB¦ãL‡ÿŸð€ýØŸoÿ ‘éòàqY €DIÚáA×?Zô-£ü˜|BQÁ²HŠŽ»¶Ó9Ó/Y³8’` (©þ—ËñhÔ{QÜ(Ðá?RÕí6ùbÒ‹+ü#±Rõû$)ßÁj7e²ÕX€G’•”'PÉ6sžIÚÊ=})äÇŽ0ð:mrÁhÕ°8î<¢,7ú2‚¾­<Ç Ã=ûý1`¹*]l,:unSÎ×Í“–J¬n‰ ¡îìT¯°ÀÈ%£”“ckh¸ä8hnÔ¼8ÍhjÀœ‘wš¸ ý§ƒƒhÌ äa^(ÛŒ¤aä=bQ³”š>>^%Ù‹©&b¢óê8f±í±Z2Ïy‡¹Ž»ÈÐͯu‚af18‰%¼C“ØÍà__¢XÄH[M59:#þe§‹rp²Þ=æÒÿÓÓ¦&g”{vT•í‘Êé3g/¼ý¶Ó_¶ `9Ú0*ç•ë÷>(ÐÿíÃGúéc´ÔGO¾{ü0»” +î«¥À?ÝB2"@iø}½ÿ×o]t¦-ß è—É€o5ü/ݧ*¸ƒÒŠø›±èÿ¹øŽÓÿ-.]Ì´}Ù¯ÀñÊ)⿟ê.;_jXs>`ðÿ|£]Àö6z< ô´€þÂâ;kSm%ûÏvÔ°Û°¡`smm{{kÀ:ó¨óoëõÝ_'µý»S ÀµOž7€`À|,‡Ùвòpð%{m8ìþ—~?BÞZ|óÍ7Ï¿i[€ž?øãÜ2 +À3`þßL«Ûò±^Íz¯€2°?+dÒÄ ++‹Òô(‚ Å®½ø8ÂÛa½$‡ðCÍÂ{|2 “—ÿ€Ê°Û €º-ÕÝÏç€=€ WBžã°kˆÖ_@?$À¯ ¶ÿ“²Â¿™g +”¬ìî€ÙqÔã$=xÎ’©ó’²hçñR+°dµ¹J9*Ú*I2,ÏŽuܘ²è“ý ¤ƒŒÈÔìͰñó®ZØËV´|fÐ^,®ô"¤G½£–/¤Áù„O9M¯åt¥ `pRãDNÄ•!d<ùH¤ì¸f +r5Cø%‰Oòg1ƒUÏ®f/4&i È ¤c×ñ)³ã>TƒgæÎÃsAΡL4ä…ÓÚKÎphüâ×ÐLѯÖ.!÷†E´Û¼ Iïf¹$ju6Œ‰ê½qj®háE¯b†äBB%àrö® ®Òø1诠óäÔ ¹8©8¼"Ï48ÚÞüK™äÑ<—* œiâa¾Ù/ï·aOOñk°Ù¨Ö3›,r¼,ý_ŽÍüÉæÌ6¿jñO±Ø W? ³û8ÉŸŽÿó÷ö™Óg®^¿_iþ¾½»?…– +&é ÜWÀ_¾1 8,ÿ¯Á}ªIhJó¿’1ûù5ò­V0€wœ  Ò¶]ܨ´þX[Öí€ßXò/z~ޏ.Aż¦ßÞÙi¿ÓXÐí a?AwÇàÄ~7Áùâ؈¾_!ùË—7ìJðç?ïr’)q(£Ç†àr ÜGýßq€­õµÍàÿgÓ^Ÿ|üÑás¤ `Ÿ€r€ èÌ€Ò"p˜ð„m˜/¨þÖ®àü&ÝÀþp€*Ef(À‹È‚ÜßÛlëµz0¢þOÇ(Ð/v€Œ?~€Œ8ë ò6À‹ùÌŒ°;@šBf{?µ€Éð³ŒÅ¿²H +xŽ@GL{Ö0™ @µ¿lýgÁbü/Ö¿f$R´;ˆû}8#>_I•P~/ñW i¥ÂòŒ”H´ïh–Õ.TE“Ê9’0¥™b®pí°K2‹i–``,•|æÞuvý¨Üì()'‰Q9¬ŸóT˜€ÃØl’¼!@æ+ÝÞŠå¤Lî4Ó‘ %¥Où a­w% ”§:Ư)ˆ®e{’±éËGÚ# +¸Ë‘f ¾›(ø¥A"8ý²Õh@²¹>w1”¼T>Æ–)ÝÖÈ×ÙÕÛâó¼Õ¨óªSÑòû‘…Mn.èÇbs ¤f¡9†ªUé¯]‚Ëö ßo9'r¿OxµXä ƒ[…±9‚A‡’ÆUÞ 'p‚W„ò#¿¹1÷XnT6'Ûå"~Õ®™Ý“ûþÌžš,¬íZÒ±ïíKo ù€¬ÿ—–/¼-àœ€®\¿›±ÿ!ª?«'Ÿ>yœÏÃCå-ûŠ—E–ÂúdKxgQ:áµ_à`@|¢ô«÷—• `qic¢mqóµ¼#Â*7ÄÛ%Û ÞYºx£²Ø½b ˜ZnU>€|mqñ|c©=!R +Tú›;7–ç©êÎ7Â@ÊÃU´o­qªmS @Àö¦>\/ (\€]ÙÚÔ°½~ÿîÝoî~¾k°àásT³Îô¨,ûm³ ý!šXì0«óÏ~xÄë/ÁÿÅïoº~þ%°ÿæ›×|ªLd +ÿ/Ö €—#ïnþ]±²€pÄÚ., ¶÷ Abøñ㜫 þÏôxv€ŸÔ  €_ý”q~ιžï ˜àÿs,æV,…L,šbˆ1 èŸåô;ÿ‚ýaâ¿îu¡œ6L|ö[ñ’­ü^â«ñ9 äÜVg­ì(0mÝçuªG±¬™ï†Hx‰ •qô{íEê@#Àß»š"ã-]TW +8H+cžƒAdæ¨wÉ$&‘2‹%È[É(."*Ux¿ü+»üVGÊÎÉî=ÿwÿì®¶wUU{¤rö´cú9·ƒÙ àÊòeùøvþµ3ËŸÞ¿ÿíÃð@­Ÿ%4à©Íê©.€¾èñÕ’_ùò»ˆòo+À[o.ü uÅyþZ ;øuÖ^þŒ`Ñ€ÒÒ^4n¡ÑäîʯŽK9]n „p4Êxµ3÷@Ào}&}Ý…`cjX|'.ÿ<œ/˜zûV±LŒ‘€ýÚšcÿɤ,aÕ À?2µÄà°¹Xîë0_ùç3c¨¿’}M‡[xÈËàÿü´àŒšèÏåÄP¾% +E +ÈN6x['èŸÍ²F* oN^Þ0$•à®PiÈJC@þ¥ @¿‚bþ½ø8ñ@ý- ª/˜÷s°Ï ›&€—ö¨,{{¼°À îÿ`Æ 4L}ŠÞ?Qÿùš`ûùš¦þ öûeŠøŸŽ>c 6×`¦þ¡>yr°ü —O‰J®Y|ËÊ þªTg´í&AMûàéLršèeJÊE %lõºÅ•Àríõù¢Tg»q’ô@á§°•’ÎDJmPŠ÷®-PyŽÿ» ¶X†6ðÝ )>–[ö}„ʹ¾t%ðí>!^¬‘pžQBcJTª°{t°°Ξ$g´É˜ŠÕøñ°Þbâë ^æ<°z[; +ÔÄg·cÁwÀˆ¹€‡¢»)Ñj¶ûlñÌDÝ[òTçrFð¬îR– 5Ùüƒ¶º„o“ý‰S½ÄŠxÕ‰”!ä¬öä ‰lqþÛꟆ¢a„4úRP´{h20“ru+Ö)UøöbHYSó*Q)þX6šRØŽ\ªªöH%ó;*æÛ—C`ÅpæôÜéåë÷|«·ßÃ`?"˜ÚÀA¯¾üU·W÷φ˜¯ €°ö—uXÂ[oÃû¥Ñg,‘àì.Ü ¸èþEÕg?76Pê'g"¹ÉÔÐhœ/½Ú18ÐÀµë¿ @™ ”‡ƒ¹·oî¸çÏ|ÿÕü3ÀÚv–âÙÚ®ðÿ  ²8ÐG?f.€‰€&€¹ãûuÿ"{-·þrˆ eà¥,o¾ùV¾P­ÿ)¥ÀyÇÞçä`QÀöys”jyBªwò` +°X|J•ìf$ÂHå0øq>çê 'š `×0`Ò @H;ÜpÀ8nêð?t.€çŽP€à¯1 €çøP“®„½|¯@_øw]¡ÙHE È̱*óˆ) £)ð/h’6 €ú!(©õ +@~ŠO°³Ró ;ÜÜ ì ”èÿú–Õ‚dÌ +k¹³x)©–Èà +’Ûz»,€2é;lSŽRg +µÏåq‚à_µs܇½¿5Å.HŸŸlŽÌ­Éª=yšñt£ñ¼Ý<Õh¦…ß°Bvh(¶îó:Pþ•¥ç„r3ž˜ý”#›¦L ?`nô¡)å"3ä âo# 'òd ¨Á'jÜŽ ˆS'³mœHB”Hµêõ¼U°NMÙN´ ‡mòx)¯ò ÅmîŠaʆK˽{˜ZްLtV‰ÂÔ.›åd¯j/ò"šFkºP&ÿÊw*“Ý»²çO¤ìa¹{rN½sÔŸùÓ§–·/8¹_<(=u˜?}õÓ{=R/}ˆî¯zúè êÿ“§OÔTÁžê~ªøKXþ"}H€3÷kð4ÁÄ8àç·ÖÖ–Ö.¶Yì®TÀÁÿ‰ €õUà€GÓ¿¸¶±1Ý[ˆÀú¶Æ‚]{AÅÒ `{×Pö":@nîl\lT‚ûÕAiíu÷üñÏèf' +êí å¿,ýdK5¿2LGüx2à3eÎqf}Ê8±H^« ¯¼˜ <áå€ê¼ƒðÕúðŸRÖÅ`Ÿà™øý—Où²Ð` R‰ïGÞ’¼ÊÕΉPM¨œê P$o~‘äåÆp:`Ñß•ÒAsìˆú! @Ƙñ „ãîOó¨,»½€Ë€Ÿ}.IÀÿµºg-ªÿã €)ú»Yêúbý/9æ1åFÃ!„ÆÈþù™bû}8w¸X†Ÿ" Ÿ¸"äŠc}Am³OÆ×P }°âŠ})—äA°Rr`s¹Êtb¯ž,. +ö£ƒˆq™pÏ~¡Ñ"î-T~Ûèò$È‚ˆÚm¯h§/%Ž2×Q’x.ÛõZƒs'Jx)üŸ¤ô¡OeˆèX‡ûX#ïJyymK5Pí­Dó¡™iCÀîx‘äåÆÐ p×@ä;l€î0`2A;°À?s.€ ¸”^~ xŽÀÌ\³€â'À µØÕþÅYƒ9Æ7յʴøçŠª {))S @¥3þ$¡Á‰¸µf Gʳ1þrJ… +lxž Â/B@³À¥,\s’%Æ{RljbšYèi-òÄP§/øJþ¤ € öHŽÈV\$UåC¬|tƒ×ò¥ÑXÌå ›À›»|—R>`/H‘Ìc¡,®µ‹UàÓœhľìÍ1î=àJø@³¹äûÆ9 +ág'èûèF"I,E¿EÊÆ]‚8Ò7R»G}5­Yó_+³Î£Æ² ‡A ²™]‰&ÀxgÓ ¬ˆ'pN-á^ÎŽjV Ö!”gÏDÁgw½Þ¨78­Õ\Yíuë½Á˜‚í\õa\ðj,õ™År n`8ÒeaQRÓNÓFBj¨Bb}LÂËEñÌ3E,½œP1a™²ÆQÃð/ï€O[â.¶ @ :º ¸ßo¥œÆ=…×ì³'vöÇãz“ü´2ÖIÓƒèP}ä")€²kõ]"MÉqB¡@¨@)ías¡`{ˆ •ÈYQ$Fœ™-3ŠøhÚi'3­>.s(±³K¡ÂÔò/>r©jÚ#– ð;@ºÿ½-Ò6óóÇÎ._ÿöæÿ‡ø¢ýëø]È€<àP©à>À_6üÊ€•æ~”AÀBœw¿“• ûŒ|‰Èõ|µL¬76À7Êô;0üc±Í-œü¯ÀÔÀWÆ›ÛÌpsgcýÆ`þ%tÀ † 5ç*`miíË[™À¼Æ0M@Öý?7&½®Å ð` €>ö˜õ˜é€Ìç¼ÇnWÀ?‘´›å§Y`KŽðÿŸj. óççü–(<+{ÇØ  Ó)½žöHÞÊRù*ÕÞJR±ÔêÕÐ@ÕxEŸ¬æøqãœ+wã4pÚMO”<ØXlê7è^ög'àÏE‚@ ¥‰£^]îÜ‚“îfJB ‰Á¥› ^/ÿÈûаg…7”žR…ÓºÎ]`1Ê%ž‘sÍ&2‘ì!q$Ä¥±àVW–ŒJªÃG*UM{´rfþÌ™KPµ±ýû;sö¬°péÎ}=ÐKµùŸÆ àéwϱ<ò÷ÿÝðoþð+8¿xJê|ðÞ…ë²â¬?£—ïý(€ÿ—;_þ +àëüƺ:}qÞNEÃ׋Àß‘„ ÎÇÀNiAÄûxï‰Èà—®ë›Nê«~¿ÖX\X8µøÎÅ ñ? àÖ­¿üåfiðŒÀ?àÆæÆ&ë @÷/Ë|„ý˜*;ÀÄðÑÇŽ˜]ù8à¬À™ÉH€‘Ç^™;>üر +ù+y¾À¿Í½6ìÇË^Þ 0#½è'Ó©üÏñ9U…þ™`¾Ÿ¸ðµ­ñÝÜ+¾Ðå½Ný_í-â;JÍP¯ÕìH;€–RjΗ`aÏH€ª¾éÐ|v€]€²Lá’Pªõ£ûÃ>ÿcçLðÿP €ºä³{ü~üûà¾,¬[KÍ*]ª±Ù¨ã§mÿEûßc0aJ˜ôÈ~ºÔk`Xe¢FñL.ó*J _[ ÜYñ?¯@Œ‘',Ò&BzX.M1ìI VýV­-@š{dN«Ýûª½”"C]ÏD©, T¤‡ƒäP’!V¡Ô€’mÒ„¤–ØÖÎ#Ø„³NùH$x¢Q*·ÏS8“¡)€»Ÿ~ƒí›aÈ#DžeÒl¹4pÃfZTúÝçý‹0þpÇÞp‹árVÃvƒ!„ÖP7#Š“—ÃßwÑÃyÝÛíÁîÉ{Ô6Z¾FƒN|-‹:îh Ér“CV[#° H ÖïÚ±„JF%™Ïörâ"IÉÒ|2Ölú#‹HroÉ ñ+]ƒðT|æÈ¥ªiXl¸`/€Ë€L (øŸ9}æôéùcg–?ƒ8€š)ÚÿÃ'ß±æóý“ï+´?H +öû©Vú”¿Äÿú­ó e2ÀeÒ»}æ#Î~y tÖØØ +øë›zØ;pep¬½ ¶olƒÄ7¶d +¨ýœ¶±òË ¶6üÀ}§>¢û—Ážµ}ù9^Yj‹Òƒâí÷gÀ—k×n°bà·Ip¶6v `Ý1€õÿ/_>Süg­`ê&ÀAsĀܙíÜ+Å`îÄÜ 6Y+À^ €M3rlþø+Ǹ»Í@ÈËYæQéÏÏØøàã¸oÿ§ææNío¨&Tfð¿ÚñB6›º€õëÉ+š1ÕÁ> +`EcûaÍC¥W€°R|P¡~Ì8'OÖf|&½f-“q&½”çYàà^ÿ̹~x€Bä@%& I…ìóØ`¯@忘ýƒþ³ðIôÛ +ü(ó¯4þï±ä\RßÂRõÈ­~A'h£&Té¬åÂ¥KliP¶L£YŠ\VÝV@ˆü@8bÈ)Ê¢š07"WTÍ»­~¹&aæ1R ‡[½1¥†XëÎÝ;äA”\™„l(Z’;C2`í5‡#Ê;9·%1€dq›Á ßhuìßî›âÚíð·EX@âR©æ5‘"°íf}±Af«`èÌú¯œöùRZÿÏ÷i…öHýҽ߹þƒüÓ!dï,Æ€XÞ/¹4HÖ7Qç·×6wíÿkèü*àhù;k;bþì@Û?רüoÁÂÜbgz€¢û—-ù›{,çZ¦#Þ¾}k{i}¯`çÆ: ¤„­êúï7ø¿Véý[0€ªÀÿó£k_ÿø` €>d‚`Æ@}?½Xgƒs 1 Tð€`¢üßæ¬ùcó'ææ½æÝ•—ò˜Ô§èþÈ‚“™Žf¼G!Ø/¾­/VWóÚõžKü)ÕîH”ªqj^È0Ó àgð¨,G<À `ÞÄ 5ãè?õü/ÖEªFÚqµAb ©êd–¯?Îî™LÖÏFQÛü"ë/½#q'Zà’Ħ ‘›ì]ER +¼­8OÖ†îI`Æð/R”/ñï©´ræ +wêkë.,gøÕhkÄú¤ÐhPko‡½¥^Ó9ð{œgH4WÀ¯'%kvz[MG*ÒO¤Tu‚¤dÚÐ÷EÉxÑ"´þÚ©Äi¡w‘—0nùÏ9ÐO/žðˆ +Eí*Dm¬áIí<¾ã-r”°!2<Éà-ì¢À{)Œazï <ñã"îD¶Q0H§JðþuۼܕJ]½ÓkŽå~M¨üÇh÷ºZ &΂džð,¾›Q@Âêþ``æïgÉ(sEêVÄMÿu[ðQƒÙ˜PŠ(sc^²Áð«ÉCŒVd¼­¤r2ó«£ÿTí röBéxùÒ…XÀ™Ó¶5Ï¿vöÊo>(cþ þKÿOàÉsÀÿ#àùE!_½?{ùÏÆù…¡ +-sÊ=#ü½¢V^¾E‚øQ¶oÀ*pÀ]ßpF>{òoÀôîs‰Êÿze@Øò~ ÀMð~W6Ö=Zœa+‹¼7Kú@¢Tßþó—›K›·¦>2ÂÂsY‡Lð¿ü)À/ (.•à“ßÿdb8È€å!#ü×0/Р̀g}ŽSõ?ÁçX值¤@PŸEøøL,ù¾ _àÖï^ˆP1%ªÝ‘ ¨/j¨ÆøñãœÕ8‘íp ÀÌ8»sìúü à9ã€FÿÅÇèíX¬jg,q üϸþ5HŸ]–^8ÓöoÅÜ—LƒIJ“Ñ\_oP^ bÚÏôñ[,‚ +( +¼›¶ÙÍcÓÎÍÃÍ]¿Y ƒô€ˆhá$þx@äÉBtL ½á,ôœáïëq¿;;¾A1æG‹‡> j  ÑDËÞb `©žŽth˲6b­’j*“óò5ŸDì5e K÷ˆÅu¦Š•Ô NÜLú(ìKú~!^Ü­ÕÔ5ïkm°"°i 9¥ó«!|„°+bKÌ¡º‰÷ ·E˜´IªÃ‘í£A Cš-(ô\k OA‡D°4FÄÓ@dHìdŸ‡’Qˆ–±" ²í'3 +ÂRSåÑDØæéÝf‹X˜Qv11bP±öxLœ8:î§VŸ×tЗ ûf'¬Î¢yğ׎\æÍ9òöeGŒ àìéhŸg—ïd Gú‚LOž<´÷_Ðp˜å'’Mµþ,BdNì\@Jú³°ÖR€©`mÓ©õvǸáüNÂoS€Íÿ[;|×¶Tý½ +°^Zb ð7íã3¢‡ñĵÆ;K…ó '#˜úܾ}kóâ¶øo˜nÚ `#âh¶Wý• ô,€kŸÄ °àÿÁãì› pÆ@Ð?q ’p<͘‘9>’„c¯¨s¿rLÅÿ„—¼âFõ„—dUN½°œ¯úFJðŠe§ú#•x…ý|âÊêïVóêH¬ €ê +Ðí¦ ¦Ic˜ø/ìPzì P–}>e€5ÀÞqJ7ÀŸ8À?o.db8ÜÀÐi …öùTêÿŒöâ¢îï’ˆEûׂBEœBø +p¥0p½ê9±tÅŸéÇ=Y\,6o2•’â 2“ã~‹EÀðç›ÐâÄ:môIò PÕ }oe–‘û’˶|rÀ á[ h¶;…ïX(&¾™ŽêÃcB^*âÄ?™µiÓmõ–:Ã-H!‰“Šºw1qHl8(™—€‡L¢™nbYtáZcccF Z£//ÅË7¯[k ÇûÛø¿›—ƒ¯Ç¼Î8:j©*Ú#” €pÿ¶3ÿ»€yÇš?{õ³o>|XöŸÆóÿé“ïPÿ¿^õ}P¾ú–EüiÈdÀÿR†>H@Utï=?ñ?ÐëUÑý× +ÚÛ×ø_¿±¾½÷;ÿ`¾ß5 +þ«÷¯mTñ ÜÔÓ ÷Ü• Ç–m@–ÖÖÞ)>¶õì½}ûËíö6K +bpH¢õõ-7[Bæ/_'¬à?úÿÿQYtxŽ >éŸñ¬@A|]ùO¸£ÀÜ„xmÇO v86|îĉù¹¯œx¾pbž=¯˜¿‘—µL÷yaøÕþ•Ä`Wf8À þ§nŸÈêó¬Õs ÀIjê‰XxË\(T/<ÀÉÌ@=#úÞ `ß8Ï·ÌŒðóúØ àg (Ƶ`â`ü÷[L¢äjÁÈj®?acö_à_è/4@í_’„p½É\›Bbü ¿vƒ `C45u Fí ¤´/óEGPìˆÙ̧ P´Ñá“Ð äÔ‡Ñ5ÉL"ÙW£¯ÿ/€•.Šf¤GxŒeø+!hÜmtl èö¶º6Y™AhË“¢J6/hi,çµAyïj_×eôN=hø5ÌJ7IÕ¬“•fg«Õiò2u$5CQÑ.€Æ‰øLd +–­a;Ò]Ðlù.(gƒŽ†Þ§Z{øèÿWX[½Ö +s³-¦¤6á~ƒ6¤Ù8£6ÄHD˜¹GgX«µ´`Huß&F8ÚùOʆ ­mmg 4ÀÜJð‡AñðÁÒ4NDÁfcÀI¿ÉYîÀíZ‹JAOáRØÆÃ–ï@f@F5û£ñ_É)² ZÓq D០¿˜?êÔŸÑ Pýÿò…K—D8{Ÿ³—ï~íÿ‘E|àß±Íú0矑²O¤è_uÜÿ™ˆ¿XŠ-{˜Ž`]ÖP† X‡Axt|€ž…léüó³?€7Ò À£{åF”yžÆ-öúOÿt¼½³}qûÖ¿ý!Ü$ `› €Í2ôÀþ+€?]Lƈà!½ >•œPÅÜÁýÿ èG +(‹Ð„ãèüz ¸zå•cÇ_Ñð "/é°;Ì…þ´ìõ˜Â¿?«²½Ú%«/kàOÞ­ˆ×w‹ê‰ +Š{9 XƒJ’jY-­c›fw„ÂÑ©UZ­€…“BßIôY@ÀÌ[ Ž@©|´SÛuPÁ¸¼›†}ð™š*JH°*5œTÏV–¶ÖR§ r„SGTå£(„à>õ¤ K5X«¡:Á#‚Œ„º=\ZTî¼R²>`$L»®ž~j¡Ùk´ˆÎh ½éÿmÄf*¬AŸÛH¨½usje|5ÂÕ±¥•Ûë;f¨´4Kú]MV¬¤¢Š`ƒ$ˆj\«õŸ­W_=°k8vŽšwÐô@O=Ï6)´k@Ü=…-Hp©éwµ!?ZµV“® +×þcȰñA“ŸåT‰0I“–ÅnØ\öt.'P£˜ßE¡꺌ÒþYL«Ð±rÈaY ›… ´%гñªhKðbŠŠ6(”ÝÁ°E4ÍFo‰‡s–PÀ6— ¶„° huàœ$*ùý‹Û¼%Ì\ã”6Y (n¾9ÍNÝþÉîNÀÌ­MŠ›šíRû÷‰“Q銥”j9|Täw¾Ü”%BB¸‰û`4üÊæ£^oèŽþ¶J&ÚD(€—‚d”DñPðÞ  Ç=a”A¢xÄXà&êâNFÈ>Ø-€TÆpð3‚›Èr¨®¥Hû¬ŒXa4 ê°Yëµy¥È=ß8ű Ñ÷ÍŸB®–VŽËn-0 û<@É…`æ§i0þ+@úÆ›Höµ'ŠŽXæìä}Ä*rU~UL~Z.œ}ûÌ™4 ?g—?ƒ ûk™ž>--ÿß}÷ý÷€CE¸ê£õíAþ²ÍNüú­ÅLð£šÀº"šý Úo¯on¬]\Zÿ762Ÿ»Jv¶ `Çö|ûú§(ÿHœ6vþ’cûdÃFß'oì¬5Î/¼sq:`EÚÛÎ +œþxòz|¶×Ú!Ù,~Ê Œðɵ?ú䣯_ÿ\À³>€CÆ×ÿv‰ñlÀ±(ús'Žsž;  ÿ{eäŸqxY ÀbFxa!£uxÖ`‚üÕF…ÿ{Õÿ"«Ï³X…DTòþTþD¯Ñºh(2ó“P6-ý†gªl`*±©Rj_E§ÕË­Vð¿¶`7ÀôÐÆˆ"CuŽB­ +ë em=$¤‘ØÄWÜr[+è#€µ ÈÆ©Âñ<2ê7!oEël—+Ák–й7ØnÅ¢• ÂQÒñ\wéÆÉXÚÆ$Ò×Öi±28 ZŒô>[Òr¡i•û4¢öÃ~8Êç™7H¢¸´ÿŠÀyl(ÈÏÒtp_’'i±£™A(3 Õo›+rO…Ð{ÚþIü€¿¹ºXï öÉÈ¡Fç¢ù“L®=i +ÿü¯›ªu)¹ÏOû/6y‹DÁò\pE§C;`Ža,  µP¾2€Af®' +!# ŒˆðW3Œ­ X‚þ¿ûB–åÆ1ýƒÜƒ:|Åí(Á‹äÉVÜà@±‹„)Ak(FàÔJñ}ä NkP£ 柔‹ˆˆ +ùkó Ø®éêƒîIûN§UsÚá¦Í-à¨ê}oK¦ è[(Üá6¬vh‚È (æÚ|ш¼ô¬& ì¯®;„œ}€/Aå£ö Ï𙈺ãno‰d2ÒЄGöuØ÷æö±¬õà­0ßð‹Œí¯ç¨Í¹tɆ §@˜nÀÔLL +Úœû +*«Efì@ÎqZ„}}eFZð+ïZ´ÿ>”¡¯¥gʺµøzô…/œaœPXÓ±tªŠöˆåŒc‚.ÞÖÕ,“ gΜ=ãWîó¤¿àÇ€4œâ»w€ üg-øóERÁï•Õß­þîP+@õÞXEZƒÌÞÁ?Tv¶êÊÅaÞà-T¡Í†N©è¡‡óÓüÝ>Y9¶ q ¨§pbÔàB@Ý:©Z¨e"Uê‡4u*¨4·Ök'YÆï;¯*•''º-Ñ–£„¶0a6[Œ¯¡¶¶–PS*ĉŸ¶jÔ¯:!èµl“Ñ¿úÄhØ +–AmH¢§·×ÐÚ[îQÔÄ;Ñwý¹‹a¶]ý +t5ÎÄ\&#:IøLd/8ÆYH=A7દúvM$¡&>e»‚ÿþ¬HŒÀ™ò‡-xRQÿ+ @N3T{࿲H"¼ÕOÿô`.Ø@ˆ4ÝËÂZíšZ"˜* w˜ªüƒLqWrH¯6 Y­ž$€;ÉCµÿR2‡ÃZsôõ¸¯bàyžSãR$Æ*Ÿ¢q>³µeáu¶L–¶~¬Å"L‘nÖK¯‰tDA͆§H¤u¦¹I_ãeÑoßÀèÌ.šªÜw(é¬Z(¹½QKgJsÀ[‹ Åi<è$=#Ëø¨a*@FIbD!nx|K H³F„¾ÐSÞ@RÆ´‰ñ2òxÎgjMHӜŭeF&ÑÑÚEø?ˆ‚ v@C©é'aßmÛXI­u @C±9L'°«S3©90"èp-î]ƒQ¼#®ƒkk[ÒDуu$ðœÅ#ÓÃv­¹:¯Ž-H^Ÿ·ÈI$´G/3¶ú£ú¼6qD.9Pq°Q€ßéù³WïÜË(Àe(à'@ÿãÇß?yòÝ“ï‘(ûÉ“}eH»P=«rèXNžZðßRuŸh‘ËÇöëAÝmzm©±´¶±¹±9Áð^Ök7¶‚ÿþÎfqÿ·õŸ­âPî¸ssPýìÀ. 2€µÆÂBf#*g²°¶¶U@µ×'W$v%Ø>5Dÿ¯,Ÿ|üñÇ}òɵë×ÝuØ8{,ÓÙíéS¿râØ([¡Eó‡  €€ZŽÏÏg€J^ÿçó¸ö½ØÇ“Y͇õ=ëPáfäTõ[ ÷ËËZü£r›‘ÅÁVº…o*HïÆ‘2æW†Nsɾ °ŒSÓ= ò[8¥ü©“_®U£¶Ú\ÌPh®ônv£b[iþÊ{êyµ²bØl1=ÅKD2Û,EÝ&T ^ÿ•¾X…n(Ù(ÿ +`rc•¶Â¬4cd(,PI[û’<£î®$µ$Õ +`ÍvùÎPsŸÂ‰ÊØvÜRõLd°¸†°®.!%&:I„,SF©*ò*øOx |!bš>‚Íc’âÆßè™$ZQ»ëùYø§â.¸_¾ÿ´EžT«L¹ÝOûñÕúƒ’&Ðl+ª¶e,8©ä$à)Lȃ‹Z®å¥ Jà +Û`àh“«Ý½@Wß–æRÞËIî¢ê¾†¸$l‚…²Á  ã4=@´ÏhìI‘êhÃò:šuм‹cˆZzÓ‰ŽhÝíœ^ßfw–-XKgò’À]2ÂS\QÌ8%5lÏÑ“%8 "˜@4q6AÅOíµêµÁx„¦LÉ´D¯ò1æŒFšB©l7t<€Œ—2¸‘à?7á‡V€Â˜Üç›dDzA©cá–4Ú„77%$R‡d”ID +‡µc»G‡c­$=gü'i! Ü3™ÎúFmÙ²ÙD²ˆÿƒA¿Ïs¬„(|M-«Cö÷rÐ@URTš­ÙYûŽæ£÷€K5@(Ðï@ó'æN/߉N*,ÙüÿØÿô;Áÿ»§r€C¤‚ñgå ñxÓ&€C-ÔgäæÎ­/¿Ü¹¼µ¡ß™€‚ºkëïÀ6ol¢~ë`€ª#@†. `cK@Ûÿ òë p|Ÿ[ù”?ÎŽÀ-; ìì\lœ¯=Ïàù2‡@6×2ƒñÅòÛg¸{Ï¿ŸÇn€× ð³p„g}`@™ °‚|Qž!'2€íÇ^‰A GO¨þW€ãÿm`÷üO÷˜þÏ ê/ôã0wþü©¹ @…üY»á[ÚÝ<œ¬þnõp+ïf%¾¦Ö"p$Ä;çT©¤@’BpÄ1ùD4oÖv{¶…ÈÔ4”a´ß“Á'¢Ò®ƒµ·‡Np³‚ÿÑÈÀêWÝ•¸ãÐ<Íz‹€r}*È*#„'RÜ÷;³ +ø—P1Ï·Š×¹Î!뚀®vƒÅ5lÛÎãâ€Ê%=´ÿ¶—À n™{ʰ¡.±O"$°U¨É±‚´l0ÞŠk˜L ¤ R%Ô±“zHx'ž°pjAÖ`¸Lƒ-»¨fd/º +þ©}©åÁÒc/ü£ˆ÷¥j¨ÂQÂhx½ñ®1è[.Œ”ðÒkk˜ÊŸân6h·KiGÏ~ÊA»ª%_Uàm1lë6–Ò †µí H¼<Šn‰f«bùÅŠ“¨F/u{±•{/(© ó\Û hoy'þ«¥“í„:"X± ›sÜŠ`j 0}Èm™«Z‡t®bA4‚‚"5QÐB I ÆBQ‚ 6,€â¢ž[‚à /´tD•Þp¾€ shÁÉ´è÷ÚDŠ1z¿-@mÛ"â á @»±”„Á„4|œNàS>ØC>B0x|Mk‰óüË1_žÖ f&0Z9 "œ{ÄëSÞy𽝏 G`jÐ`IÅ MàˆvžDœ 5ä‰=lˆ6YÓŒþß³}J·@.èµk­Õ1´Æ¦˵¥:9b©êÙ#^ß‘ô¸ÄfPsznþµùåëß>|ðàÑÑÿÉã‡:¨á?yòýwßÊþñ +Æ’w*àTÅ j$Þ#Ñý¢ÞM-ÂmF÷Íä{t ñÎŵk쇬«àW-ÿÚŠ–ÏqÇRûßÚñH4 °?Ãøx—Ûð·Ô¨'ÓFnÝüÃíÓð‡öò•Š8§Wóé Ào ×À"6€Ò à“÷?’b˜Œ0k83 0è¯ø^ñaŸŸøFÛ÷G œùe€ô¨äå-f#ŸÅ7øwÞém˜[Øç0þ@È«ÇRô­6G㕾ÈóŒÀ·øò±.Èͪ#å¥ÎÔï Ø±ÆÌn6Ø£  £xSåêO߬/$x•$”„“ŸÆ€b +…0Ô•˜*¼q'viB@DÚܺÝï¯PKQiÖµfÍÜ®,T4hÝÔ3ÄX·eïÀMK0Â%{¹³Ê˜õ2±t‹(ÔÔï-p<㻀ñ‹†¬ÖÔwOúP¸CÓRØ+1ðîÅÐÁ>nê½¼·ÉEÀ†•֊ßüªN0Kh* +à€uÛ'&&€*‘H£s²‰Û4kçj\†jîÕ%¹‰x©úV× ¹`QÉ4×÷Âÿ åjÈY^QR¡þ‰¨;NÆT<ù'¬v?Ûçò4LP~ªzYJ˜àV’m…ˆ[@®Æ +µþìg®":DE¥Ìèü°ò - Æ9….yÃaû÷í-’h«ÿ`w‹_³ô¼ɨßÁ‰‘—ü#Ûº­Žéím¹·3wÞ×K‰“˜Gȸ +Ò¡º}¬ät|±4®„ %ƒÌêµÇ€& DÙF}MQ [Ð"Nà’Z÷€"lî·Û(ÛN‡•Ø“ob}º¡³K'¯¥ÿv¼-òL$à^ %*”„ǧx‚½úžMhºí‚ïI$r›ÐÂc(p=Ð^GLû¸ß‘‹=%©G4ˆH 7}nar³x~Åv³¦³mk\ ¯W½ +è—nþñ|å?TŠ¥ügkb°#Àq{œp4xÀ‰c¿ø©>äS Ð~è'Uˆ€6€çZ*¡²£‚<˜¼¤À?¨^±¿{ZДº†Š'hMýÙ)UlÔG𠻏V)º'_=¦á[+À¹s'Ò'% hDã·Wv­c-ÌøRYñò]Yé¦2"O€_íËžaÖ=ù_ão³èü4z:¡LxjõŽ#³‰„:ñÓáË +ßHé¯T'0íz UDOPÚÎ$‹X3{C(øÊ-Gå!ž 9¯š”Æ\¨¸ aôzn*iBwoêÄj}H“Ï|œ‚°4ÁjÞ°Ï“­„°kѵÈsqkÖS¥þ£ KíëgJA ¸gÛ8¢ùB¾R˜Sùùʱ£½DA”øõ)î¶”Qîò,O‚è +@äÌ!Ì,ÁЇ‚'+à¾v×à-]åj7{ìðϪž=ZqÀ XMÓm§àØ/ŽÍ_¹~ïáƒßVMÿwOâüÿøé÷ÿ8œ|?Xt °% “Æ Rú÷H`ö)cËø£@§ÿ€µwÞYÚúwp]W¼âÇ¿\¬8RÀ°¯q ˜XÜØ*¨ >ï‚“·¸Z ÀŸoA*µóKÛó6œðg ¡"ÁÿʰóåM-Ñü«˜o×PXÀt$À÷«^ì9d.€ôÑ8l$ÀöÈV%‚¾ŸcÇ_öuð¬cZ48ÀÔPŒ/mÕÅÿ}PðïMͱ„TTЉ ŠŽ¯3õþ!àyV€ÔŽE¬ ¼5TŽø‹•KÖŒÖâ#@¥P³4[ò^q`ïÜ´ wòä¹´ûqÏKÓvCý?½ÐÓEWïÍ¢.©”·ˆ„woFo04Ö‹V°Ýq¨~‹Ô‹ìê£skHÝmEnU¨Î³à=j޲Ni„¨5(K[<â14ûly9@¯áÕ<×z€µZ¢¾ÜÎãNoî.kã¤LKà'Ôu­^WoþJø_¨9ÍbÝ¡t, J¥“µb³0Þ`ÿÊ ‹w÷ž`£9’€kqióTËà éA%<…IA*≄™iûþcëˆ9ãg“„Äæ{ +#0‡ +ߤøØˆ?PÓô…ƒÛ åtüuš‘í›×'ä@?ÜAï>•Hî5l/64¹#¤¶6õ”W #¦c×ìkØŸKbhozzšñy'/Ö! +„4IB!WÕ„È6øv·&ÈP9LQQ™'`Y["RÄŠðŒ Á–6õ±¯`ÒžXìíö)r¡Ÿ¼ªÍ«0¤‰Kç®çÕìçíA^1ý$- +Ð5Ü[€¡åeÑ$åÎ>É’Or.‰½ñª•\¤ôhÐò¯mtâ†Þ’`»»iwÓFÓ.¾ðHxuOvã9 €/7·Øòlð_ïXÊ[¸Yøy†7fOŸìñæé“á“Ì3…š Gþ­êÙ£g8Ã"& æíÒýÏ +`=R oR©³ÊÞ]-€dЕŸX –Z´ît&?5ÐdJÄ94ÿWû ´„ƒ7QÿK#ºPÊCÄfïlÕI}EmFúT“Ô4_”tpfMÐÆãþh@-MHášš…肚­ÞŠuW3œØ4PdËQk2viÝùVXÀÊørk®@‡u¬Rüï9ÏÉéÄiC$Òv 沆éî÷I]õb„å,@àýÿÉS(@ÉÓçH ãM¨H R¯Bm¬Ê£÷ýhÓhüâ?u39Σ?*îÕ`¾kpfÚþ›í‚ù32 ñgSÅÒcG1‘h“”%ŒÃÙA2‘¡Cq¥”5 lã ×tbð.Ìi`¾†eyh>¡«²µ$4/•Ök¡Îž…Ξ°àÙ} Öp¨zur«ýN¤ÄÒ%7¥Z-v½$©‰©íH€\àØ—¾‘"{l €Ã‡: gT†¡ 3™ +ýÞ#hð—•4 ÒôãðÇ[·Ö¶/¾S[¼8±Ü„üùöŸf,âþzeˆ€Ð\ý/ò[ +´WŸ"2€ÉH€òÑ'Åp`ŸÀÞ‘õ8¡¾o+õ?®€n”™µ°d[ @”ÿ™Nÿ$ À¢ +ð\ €¯lŒU‡€ÑÁ¾2€Ã¬Õ±^ön4> 4 •êIZ€nk…DÝÊiƒz½jˆž«à«§ôK_ua5á`\EÊZôeå¨tÔ½ö +ouÚìëån º-™@Û&€ÕV ÓW7[†žˆ­F‚ÍŽX¤• ?öïO…ØìQóAj6v9~`KÅ«Õig…ô,;*Ó`D¼VÓN`|$\Ä–ÈZ°€Vh Õ +ÙŠ—úêþÇY;7Â9 ÀÄðê9îŸ> Ó+´ˆ^ÒÚ¢ÑRžc¬†ÍEñ,1Òð +Ø!Ñþ£ùO,ž4£ý›K{¥‚ÿÅÊnrýgµÊÜIað0íˆç…:´èÌÚM‘AT¼©Zm"<ÅA•zýnߦò𔀤[~´I g‰§ –ÀR¹@»·´Ð’ÿ@N1nwS:«ñ7š(WµÒ*úyÒ¤-K’ +åÞÜ zh÷CÛ¡ði+°DøÚ´;µfckˆj«Éœ'K³a0 ìŠ¥<ÈÆx½+Vy% CBNLa7¶^pÊ`ÐP>«á¯™»³=ê€Ò> bÒꥉ`/nO6Péᆄ0³¿ÓyÚrkS¢ë÷¾ì‘8B4 fK—N:õ¡nö³°?kœ5›ºhw®ãL´ˆ˜ÍáØ ú}4~ë äœ"¨"ÄÛÑ މ–5 訥ªgVœöOô¿ ü£dj`Ì `ùS°_@*9Ð÷ÿøþ9N?LÞ©šÎ£VVÿ=S|DHÊì?@,ÿó—5¼ÎvzãUšÿ¶4 ª9\`}}•?ãÆà†«‚û1”%¸_®&ZÖÛKµFš¸ €½¤ü€½·vÖ7!#^á³´Dûwyqø³q¯ŒPø~5àA½-{Ç(>ëX (ãNL*ùž¤í?&€ã2Wdó¯°° à5þ—'¼,€¨]ƒÅýàÏ߉”p*»Ð?±(…¸|I+@yÇ‹”:‘¾†™æÌÙÎS ö4só,DWÃÙ b’Œš…˜‚qzý¿z,è/ø«ý‡PEQƒz4^6Šb]n’ZC2øÛ­ «1>Ö"£ß¥‘Y©Qﺙ@ðN(¨ô€J"Wµâ»S@E¯×»š¯Z{Æ *µ¶êŠàÏ Cø2j†ôhÖ(·î4‘B]©ƒ^h½Í>žD³"”—& -º9”ž µô¨«;y²$ÉD:öªú¿HoX­¸§ÄeÑ tN¨©™IWn­fI²iý'Ø„q¯ötÿëgá_«ËŒTðöÏõ}£üóˆM6©ò)ˆi5j$P–²É@?¥åÜr&…t‚&:™>Âö HAôÖZÔÿ»MÕŽSLDZRßtå=h³‹Â^V +rJ47–dQ’†RH1$“»” ®\q¤É–Ív¶‘5–¼*èë&)Ç“>n$Ï1 +œ˜èQbm×p§ É•±Õ°G´5BîØ’å¬Ã c‚ìYlîŽíèÓ([ðY¨¥`Øb~{ÉS´zJ3ÖÔóÕݾÂþNIŒXvsÓò:÷Ì’Œ±6oŒôÙwNëE{Ñö{ÓÖ£ð'~iÈÙÆ¶E)dH¸¹.ŒÝvß^ìàŒ!¡@ã¼On´—´=P6\€à£ÿØþÿ¶ø3@±œf÷é³`Ï+g®\¿ÿðÁ£2#}øþßýã @g€ƒ¥ÂùCåדqÝÄŸùˆ©~ .‹©•4󀿱k˜wlÄ ¥ß‹JßüŒ$tÃAƒµèh›âX>~‹ @¾ð§[kkN¸fÛ¿wÑð—Ûä‘€Ûÿw6oÿ5Üt”¢X.ºœ@ÿ P*€kt¸ >ûƼ‹ñÅ€z_@ÿرÿ¡ªýhûœOpR€c'^áÌùr@‰Àë?¹@øàçêübV ÿD*èˆìúTUle8Ð +°pˆ µÆDx©SX'.P[ Ì ÊGéz ͨ@U£ ®‹. UàFÇîJôœ+}ÿŠþ¯¨xyeÝ·ê•TiáVìZÓ©«š}”}*èkBÔZ!bš‘ ZK'@™»ùRwmà‰Ó *ìˆÏ"°VÝFЂGõÞÔÚ"eg¤W*]½;Ô°Ôð¶äRåbQ&Éd@¹:ÛÔ½r¡„]f©,åJ&ýŒÐ÷ú¼zÒî„QáQ;Y‹) éÃÝÕÛN?U:u+ú-qvSeÙ *Ú?êÑüµ©=Æÿ¶g-üGûïÆ¥âçPT¸—4¶O=!­P]G<Ü'QÓÕI4Õ|Kލ|{§k8€’‘=úeJ+LpÊ;™(÷HÆœ”¶Ñp ö·»£-aØMnÇsÙt,'ËpÉKÒØ²GæÃýÌ?ÂÝtd¡ôˆ+ "ÍÂ?Yœ•†ùn½ÖZÊ öfÐüoå‘–Kãï-½r»Áu¡,Ü ¢cÄ`™a.í@/7'<íæÐ¦‰M«¡á//¥¶ybhûÒAËZo‰³’·”qÝm…¥ Cæ«0Ó}¾!Þ)=eDÕH²%ÙK¸|óíѧ }'¹“©–ø½ Y…ì a½Z„}ûxúþµ‡½6LÃþGXà>dgHý~ßÕ¶ÆÍ¸äˆ¿ÿ”^§K?ÀXÄA˜q6ÀÓós¯Í/zïÑC(À£‡¶è˜€ßÿäÉ?þñý¡ŸÅó‡} +@Î/œ:ùê©óol(ð/ü"úä‹äÀ,ß Ð àÿöæöúš³÷0µlÎà=\.ßÐCP7 íÿ €>€þ¢þ‡ðìÈ—âÿMt}ªù%ƒ3kˆ@± <™ƒž¼„ò?±ðß•{÷ïß¿÷Í7ñøùøãÊ\@øV—‹î^»tVÍ^0à 2ÊÌ®çgîød(-Ô/òJè‹XX͘cËÆÿ㯰 ‰°?`uµ6€—ëp°=ÂÜ æô]HÙvÄ{Þ‰g­P€C­©&Rj“Zr5Šõ +{ÑÙSý€"hü Ýûê0€úd6€cÇìöW@ƶþB¼$ @R5¥.æfÁUq\%¦7Xå…^ÑVﬢÔkÔ.Ö—D¬?¦5p½ž#—^¢4ïRcê¨GU¥“bc¡Õq•pÚfa½®q”X«½×ZCÕ*hÁß!Þ¢ÿŒRkéɯV¦­8ú6m«aë°[jèV¢&ˆ ) ”äæ!™_'Ïm‹òm/€4ƒèprv 0@ì¯ɱ)­o€!-Ï"–dÆ¢U4ð?«ýWêÿÄ0õÒ¦QB é<½ýý +·ŸÑþ#*ª?Ç$= + /A„QS¿Û'¬¢u¬Ò*lG‰w£°ˆ1 ÇPÄ$×ÍæøPüšƒ!寿ýÒ&ÏÚ>÷†Ÿ?m}ÞT?‡”%¢O¶]omQ)ø‡þLÞsXÉ֓Ƥ4m™ãc‘4I8é¡ÁK&ƒ^,5óx&Øî)àOczž‘xK@â/\KšºÚªNHöÉ[‚žœÇ­{Íúœ”\Þ]!ŽsBQâõ:%˜`)9HÀ-òœ%%àô&Zu²—¸q#±ÝbK¦[t(¨ÆÙ÷…%„pveåà´CÀ“ò‡Gõd³¹¨³†Ãë ÉAÐÎY•Ü:ò÷þÞ|ÓF€Ã,ÓÕ«ÇD^½X*SÀó¬­ßnàµß++@TT;l¥ÂA?¢r« B‰çç@x{ù£å6뻽£åž< #H@ÀÍQDá§žzŠo†¦R¡&¶}&ËÕ¨‚°{÷{Ýt&ël¢µ2î[ZÙÖ¬‘¬L¥ .ŠÖmµ‰çø~lLí6Õiõ¨^©B©&;]çÑ×Úì”)#ªr.¡Ò„^€/½ö˜*•š¾àBÃ;²&xìóLêOÕÕ'ȉØ$ÈRtíŒÔl®´Ðý‰""( êX%“£“ + ¤Éè¨I$K=IÓ€s¹}½Lja-iëߣýõ¿XDÿBˆx¾ðÙ"é¡ÿ´ÿþýŸ« @œ1¨|)8˜ƒù/8èQ¡eK$cT, » 5ä.°±0+‚kbØ©Ûám¼­7(Žl1·nûvÃQkB˜ªð ,7+›8ë5€¹t ¤lÆéÃaîê¿AY9I;ó„Ã4‡[¨ãû\ØMÇ "¥'ønÀU\N¨Ã ¼Eª ¤R me ÷ñìþ€\co¯Ó“ çååH +¦¸©8@»ã®> +tMâÂÖz¿Ä–BÒ\Ò‡Ûæžc®³×¸òõqH¢‘oRRÙcÃâ¨èC=D¡!õ%gR$‚ô<Œâdvº„ zfÔ}R+T”43 %¹8/,fy¯Ù`d0þ)Ãüs,è”oÛ c‚2¥-@ ­yþÊõûöÐûÏGzúýSð9|2 ï©êß:ðgkpä¼€ô8¾Rû‹xNýê÷%Ÿ˜ÞV•n.Ð_SÀƆÁÖö ¾Œd7?8ÔÚsÑÆšƒÞ°Àްæ ú~ +ø’§z6BØÜ¾¼˜ð(7‹`cbÿc@Òüû½¸õý>`ñ­@ï®»±|òÉõO>· ÀÓª×.~%S5ÁlÐ à7.˜7ú˜ka»á Ðï8ÓN•1 ´ +  æÓ€âÿ‹yn~ìØÜkÎUJÂQ=|í`ÈßûãKþO%œ +ø!„FÆAðóÍT&“ÕaVÐÿP+€•ÅŒP1 ¬^¨Yì­¦7R[*7°\µÞŽíBˆ2;€ ÷êÉWuâñ½à¯j.I«J³h7@ïmAÍÒ]MYˆgOÓ^A6ÿIzá aÁ=â$&5è¥\ÄàuT(«.ZEŠ€±6½«ã&ÄS +P«µ¾ê1´#+…zÐâ}DK(䯭ÂŒ‚ÏóÝg‰Ð0´œ7>JnÄånz'Ex´/«×²p´ #ų&¤#–å&†.ÄDîŸs5Ëp¡Ñ£ÙÁCðW&Q#)|…”šáh $°c¤£NóÈe¶©þÈ>NTäRÐåí o]óÌéù¹Wæ/_¿÷àÑ·E~ðÞn€¨ÿO¿òý÷ì±¹ú`yS?ÿùo]|ë>¿ð/:çð(’Õ'.Úà ü¾ñÿ,m˜àÿööúÚöšVñØ·•_ Àèï7í¨ô\º¹ €:l³Ï„5(ÀÆ û#´x—kTÓþ:òÀ¬€MÎÕCñ/·oßJ@|r‡Y‘”Ñ×ÖÄõ]æÜGËG* 3 Mߨ6à wïÞùðÝ×_{íXÐY€åË…™5o8oSDÎvyyù’&€ãö(~ö…þ¬³9§KÀ܉׎%'æÏ½ò² “’§o-Bã~è‡öÏj*U•` ×üœL4 u¦¯xV›Åp `õp+@jŽ]A}iPƒ#T,Î:ÐQyP·Q9Û ˜í5*þìPÀ’‚“çjšâXQ‘ˆ*BG7{Ó×dAVêᆓ RïµG«cõ¤N·¹²ªvѬ {XQwû¿³]X³ý¨F¨©ªb»Cõ×°zÎ}lÕ­CÚÛøZÛ‚Ÿ­¦£¾[‘£O¦ÏYøOÇf'²§fuÎ6jÁqܯl7àR=þ‰? ßiÆ"³ÍöÖ~<­ÝtJaPªIXÿfS%¸Lë{Õ`aá\­ô¨R 9ÉÍ2m#%ó°ùÂ\Ò½;Ç¢.ZP¥SÓ:êŸ `¢þÐößÉ£ÕþµìÓþ…ÿ/TÿNCTRó›ZYlF¯tü8±(‡¥ýÌYω¬€o•^¸°Úšž=BÄ…Õlö7rŠ! +<î)(%_¬CûüýoìW×›êÿæ‘Û¢¢ó™9šbÆ*®rf¯ä…%¨LR:b\rÕ¾=h³=EËÂE0LÆ1q¢°˜æéÚçSè ¹Õš‹¤/l{°?‡³(w5»øŸÒ%—Ë)r#ï)ý4 rÏ Ã? ¶ØïoIÛåŸò²Ô[ÒB$CLY)?¹)Áluul,®´<Û]KÒ2nËãy‹`—¥´±ÄèÏ<ÈÂù|+ôy¼ÞšIð¬K.pˆ&H{°DñZ5ñø +ýNÝùO’ªž=Z™Œ ˜\ºtéí·C4Øýا¶ à±ã=…|÷ÝwOž~ÿÝ“SøŸX´N R€‹û€V€"`ŸþÉçŸ)¶Ø`àÚ¥3`´þiX~¼Ýÿ‚7”ü²­†L[^^¾pöõù×ÏžýOÿéDHÀ¬€üé(Uº +B^{mþÄÜq§Ž]€½¥,üH!çPîeu¸ú¹ªÀ_©‚W¤‚þüŽ¿š¡»­ù§àÇZ|ë+q^c¡ʨsÜ@I8ï¾½þÅüW@™…s3°6±Ô4ð ü‚ꢺÿiW·³€UõÕ5ˆ(ï¤oƒÕŒ0Z]unjá…*flõ­ jT¶nPÇz¼Ñk­X=BTºö ´c¼“®b¨ð`61A{¤©¢ôŒ¥ˆ©.è@iÓ·êvÂnùo’•)HõN 3˜XÀ­E©hG+$ukEŒ±Þ%Ée9"¿€$Ř¦Õ«²‰ Àô’ a6UhŒzw¾š´¢ý“á ÆTýý÷ÿÕþE}î €·<@û Hnÿ Rtia‚ëcCRÎå6Aráibvƒ?,`à9/.;Y²€žqGÁ²¹as±ùÐîE„4kä|4ƒnæŒtðJKLB<«Ñ\"!!í¥€á0MËœÂi¤›€‰h ª¡§ë/’jNÈh8K³éIzKÊ“ë†Ú9 €¦BÈ~ísòÒ%[rìE@)͘9\‚ʼ҃Î$fߨÙú¢ÚRÇñ”ÄG1/ý§Ø:âèƒÆ9¯¯§„5¢ €´ÚõòÞÖRÞ¸üÏû£’OX,ßåù,=nÔ¬2Ê<´-P.££`~þìòÝû=†ÄèÿôÉÓÇZþ¿Ó°¬ü|§^¸_ó/?•|Çzëü©yõ_œ  4 L âÿÔ`F¬±åg (O-èõÛÛ뛕àÆÍ@3R|Xù’K×Ö7o¬m8bð­ ´æ89¼W&˜.æ£öo/½S«,<[ ÀŸoÿ·ÛùßþlØv-òZR , ìïJAÿGÉ>ûìóÏ?ÿìóë|î~#¨À»óÞ‡ÂþzÀåKšÿ/\8€æ¯5@À¥ËË|ãÒ{—Þxãl5OP%ºÌš í¥1ð‹cóÇõ(…áG‰z},j÷,ž»æWa¤ +áTvÁ¶ÕšP€âoTÞWrÀAVÀÿ0+@j„j„Š-EWcŸ¦øÏ ¨Ó¨z®f„àÕs`;cÿG +˜:ÚB¥æòGíÖ¨eF^haMc…Æ·ÿ…“¾­¡€þªµiê /F®¨ªš6K„S…wšõ¥bËïÔ >!¶¥2´Â%ÐCbÇeÞY†Ãöð+°´…Èõç€ovzíQËù~‰+±- *þ²©Íº¡ a ÎP³ºi]Ûí;QmKÖâXÀPîÃzj$O„)€Ý´z•€‚2Θ¿2€bhúˆ®ÓÊ“¯©µvìþÑþ³¡ãŸ_ÑVû'ËÄþà?(Œbö¿GJ†ÿt؃̂¥0=„?Ú.¯•⮘n°p y øð¯¸î•»ˆCY‘Ÿv+æÍA‚ +˜“†€,§›Š!¸SšýEvÒD¢iY°€~÷¸GpfIÚçœäU•|ül'˜wØ/Ÿ ØJ‘Ðù…¨ã¼-DEŽi)ä=*/}•,ÄZ‹ŒÆŠa$R6xQ~Ú%èH¬;1ÁPf,Ð61Ù0±àz¸¬a‰ÈHüå¶G€þ.”`/4Dì^IyöCâ‰â²að¸½n«œàÙ¤.)9H7‹(õ“$%~æÆÛú’Éléç0Ð •¬Ûiû'cÞYht{ñ à>à/·€8 +àc@†zòý?¾ÿîßgN€ƒ>O+?èWI&<©À›èÿ³&Ï‹ñï·k‘Œ¼ºnú73€J÷æ¶£ÿ®ÝˆÛß®@ +.;ðæÆæ‹uðcmkCó~…û>U O. ²üq§ úÃÞÛ¹µ¶ÆÁ?Ú\¡A$„„ÕPá~äÛ»îêæ'xòäÁ·wÅÿ»w?ÿüúg×ïÜ ø+±Ö:ꀖ/æËÍ~Y,6Ó&€KËW¯\Y^¾rí +à?íe¥ `îØk,í"gÀc󯹞{í5=¡/Ñ ‰+ö›h÷n=gÍoF¦3ÏBÙ¶î(@­Ð÷ 2TÐ8:Ä@#€à+@Þdkj6ê¶Ð©TSSÆ I +þŸ+îì¯ÚdÚØ3ЄpÈwêÜ9T\绯gšðPó¹zq½“Auü…;[=BZ¾@¡°  Ý\¬®¢Ü­èvŒFŒÎûWÛ—í° ¤š]íu¤N® Ôð©²×íÉ€¡–ˆûÃÖkUÇ•;Yöì¨ä,1íÑ(ãÕ·‡­:59gÅÐ,™ú­õ:€šÊ%¡é;Eí,  ƒ®ôÔñ€¨ÿ­_eF@ðvÌdç^ ¨I‘(µÊ1àU§L¯k%ôòxŠ-ÎZÚ¢ýïcûúÏ?âè4ÉÄZx±Xÿù=«ýOðÿ‹|•rÝO!Ló‡9DN:o?ê)ÜGš`¶°ÃyêÆÎ<'ˆ#[¶Øö >,å@­…$ë‹2Æ àS,ÐB ÷6—¸«½6¸®ÙÕG>ƒWD +^B0ÙkÇ»RPöä¿¥ivä¤Öн8©Šì%V 6hÌoÕ›K ¾8.1ˆ¸¢˜{ÇXdAc§Á´¬²×Î|vÒ0NÍ®¹ V~1ÖaÀëeªýî»ï3 +À¡BÅñgvú ÞW€ ~é4P>òE_ïÿÙoÕˆJö—iØÜŽ%@ @ДŸµlT1zk} Ô_³ @&ÀÆ&›³È_}&ÏóÙ±¼Sk ïÿ1¦ö¥€€Ûúì†nÿ#†ïÞ®|£_±<¸oÿÿ0€ëŸ]‡ TrçÚ…ya™,˜›;SLoœ¹pæ ñ_‚FžI.]¾¼|õÚÇ|íãO®-¿wé³úœ81ÏW÷Á×ççTü (-0Çž °C`± +¼2wü¸Ã „u¼Ø‡œ‹ çîâ9k)ß®ÌXöKy­w j\Qÿ]H±#ÀAVë;k5Ð¥QèÔ†; jâ¸ðÆ[ ¦Àòo«1ãˆåÒ ìÕÎ… ð€6ÒFÿõ¨_©ÜQçÔ_ØDÙÍpÿŠm«¥? (hlT«äâ1µ›#Øu½N(€‘`IÜX¤h †ä +g%Õø«ÀžTv¨8]çZƒ‰L3Ðí ì¼îØrp¢fåkšù~wÔjè•Õ±ÇÖ`¨Ÿ¢ã³ ã¿Z£.µáÔã&¨]üQ©p‰·¦Ø~pŒTª¥Þ¬ÙŠ"ÐgÐdÉЄP§ +¶WCÌçÏÐiUÿ‡6 ìuý#~v±ðÁ±DökÿA}PÎúÉB.Xªˆ#-K6lÜ6á£væ ðAðnCõ 4 cè÷<¡£@¸3=Ú>ÐM0b€{Q•2‘ba_;ŠCLŽôÀ3–Z1d:d’¶NMYœÒ@.zs޾|—Ë 3'›xæ;e:œ• Ì|Á^,åÒ&9½dO9¯ãqþç2 7 'ç:w"œÛ‘¢f|?:Ø6(Ú++:äVü8[ø_ñ¯MJtÂÛðFd¨Ï¾E2q*t€¤áÎ7Q89$VD=8®‹%á„@òlƒkNðMcM¥Ã)Ï'h%AŒQH?’wØjdœE÷dåy:9‹ô¥¾•R¦³†L‹¼/âÈ¥ ôÑÊ™y±Ä.â?RÆråìòõ´<|Zù<þîÉwÿ°¡ÿ9# +äVøÏþÀ€Œü/ ‚Cö–Æd‘ÂÍàèÞoѹ’Ê诔–€XÐÃAö¢ôÏÊÍØ xmçÆšseL€;…[ÛÏ|*PÖߺµ®`íKÁÞ{±÷và·ÿÌΰ‹]Ù5Wò[•â?‘…èSñ$@üŸØÿÈÕ sb´6šyÀ{–£á G<óË‚ÿ€K——¯\½öéÇòñõO>~ÿ½4 9M»Î…³X1nX`ß}ðÿý³~åØœ~'^yå7x[É´²˜6°–âEbT(Ö@Eö¹V&pˆ»´b²‰Ÿ²A†³PQéTNdµ”K ˆ ,ÞÃŒãt"C,o1‘õ1–Ÿ§[@îcç?K¹¼ï%›yZî'8J¾·á>ÎpÜ]¥e ÛB¸!ù·ÒÿU³•n.d;/…k2³×cÄVÖBYüO"H7%Á´0~€öÿH@z<)6€C…Ú^Uÿ€Ÿºþ[oýTp*€Sþuo… 6÷ꮈ¬]K@&àû+ €M[;À=’®ý7vÖ×@ýÍ À?€ÜãÆÚ î—·¯S,ëkK€[)X/+@õßÙ^û²Xv!¿Ð“Òsñ±ÛðWr÷nÆú|¸ûùçà¿üìÎdÈÀk—^Oßý¹ù¹9Û.¼wáÂ/ß>óK>ÈÛgÞþWÀ¥Ë¨ÿŸ~úÉuúøý+W.9V€êQØÁò…3(þÇþ§‰¡ÿ8j> §äø€Ý nŸ8~Â^/ø³Ùæ-í:Ó…ËC×»ãŸ?¿·}øÎOdJDý‰+@µu°àkÁÿ_€êåf»VÆx@¢ƒ‰¶ p&•£0r¡ÍÛí½ ²y¯.œ«×ê aÍnÿªbT ƒ›T€ÖËÑUÆ©ÒÑ^ƒÑˆú¤/hf qk/Ízûm€˜ì±€ˆ±¤ZuðÖVmÁæÈ•vs UžzyÀ'˜M ë·¡ÿ<{H–0K”›½ºŠ¬bdóÂp0ìØ¿×«{«àÊæhD5\CUšú“‰CÞ&Ü"Ä*Õu¬öã_‰ÄZn¹²ìsЀ¶ëîÕ@*{1µA4ªg«ÛÞ°!ŽúÝa?ø¯A#S˦Φ–Ý éÝÿíÿ{Á!1. FYÚ"ÞUa,ÀAPtì繊žþÍÒ«?ÌÕlœfr:@bl&n%RçÂ=¿îu-É-ûytÔëG¼Ã&™Íú¯c8$Èè»Ð]5˜Ü•|vJéÀZ†´åB¬lÕeÚisפ°$$®ÿ“·D7†S *Å®”ôòÅ4%HÚï*¦q®Ö.äÝîÞx°Rw +)îÔv\€¼¦Í†%) ú>Ö¬¤”æMFÍÊÿuÜ„k0úDÊ’×n5俆‡î×i`/=OÖÙ° 婿‰‘fa$‰ [ü%hDªkßýûKî˜Oì2‹¸QÎ=’(™Èkµj$m8ÃÉ!?œ”¼:r Bµ (j¸àGÿ¿ws@ƃ6|ûÀé=~òô‘^ü¾—”ž‡ @nuÀÏ~þ B±œZÐ"€ø¿bÙ Œ(3¸¹óe ß±€§€Íøll­g½Gn‰Æ:¢þo‰ÿöpTÀXn΢¿ò¤Ê°-¸ø¥î¹øÿ¿Ýþ’»ýÙa`¹åÓ"ð‡í[šýw¿t÷Áýú À½oîÊî‚ÿS €½2’ÿ\†û»pÁŠ@ À¿^º¼|íãë×?µ píý+ïéP‰זߘ;>7÷šDùE‡°Ýr’ôK~PCP--8¶=5d÷«ÑpØ)“M€CÓ=7 Ðfp@‰ºAŸ*DC!5Kª5õTö¨J¥ +²":Þu©Á‡6DPÝûÝxôjo×Ђ! AßmžÔc3/h€Úà¶!î8~Q·–Ã$H +p|È9_~?6¹ý¨×tZzŽˆDÙÓ¿c"ÚœÒirXƒµ)P5*q(õ\Ý +0'užmùF*À¶äç>&ö2øÐ«çÄÿO¦òj-¶‹^,$˜ ã¨NÔnõFÖ¹D§ÝÜ2{G„ü×ö¯]ÙÄB¢ý{BePžÑþ§è¿K`SVö?ý£Í#ÈÔ0\š>’Pn[†<Ö.½ì2FC@W½›¼s4_@FÔT\CLF¿móC¢u³AÈÉìKŽT'sÌô÷JÂÐî-ö(3*ã1\ï+Ñ2}KÍVM 7ÉÕ$³ó‰uƒÑJëWu»šD Ð$Vx @fà³|ZžHxÄEÁw¤ÛÕm¶ÕI|‰‘§p3„[)~Ê6éZ”dæ4Ô;s +Uí-Ypo¬rŠÏk1‚Ž¥Í0ñžbÒíÁ eO×Á¨Ë;2èŽõ¦AI§A×É(îm¼ª¸Iv¤ÆÉ$÷M7"›Á-‰§ +½3ÍrjB¶Âº¤%9´ãÁ¸Iþ¿Á ØEâRë¹ÁG-gN§7ù…K¶¤Uù‚sž=“nNüàÑ#§xüô‰óÔ=~üô»ÇßKž|x/€'ë ¨ï]#@„”†÷Î4ó·BÒgDP®Tómÿ›âÿÄ íF`*7c/ÞX_Ïwc»XŠÀo§ÈÏ'J|QêÙümÔýµ‹Zþd—Èûnßúr{â0ÛD¡ôüöÖo‹æ?üCÏ/m¾±óàÿMÀu@1\»tZeýÄÜë:¼/[¾páí7´€ˆÿ~zýãk×`×Äÿ+ïU à2bëÀµ+—t8{ö7Îfãõ×çŸ(v$C–ŸÿáÚ2gÀ~æ‘Q‚z•·,ìæqøzv$Àð˜H(€ˆ™ÖÍ +û+sÀV€¯µìó°*£ÐÙÇÚdröÚ%Ôi´èAÇêA¿¶T<«»Õ¬í1R€d¶x/,Ph;»¢½ø‹‚JìOÓ€´ ¡µÜÊï ânÕ@Ò±ê µ¶Žà€Ïsú7 š<{¤,%g,´qÖærp‚$Øêt¶Œ¢KÎÂj ^3ì5E|ÔqÎSÓ×ÎH‹Å†ÊŠìF -Þ‘…†p +µQ¾9ýÖˆ° Ç!õê<µºN€#"àÛl 9N¦  J§JH jÑÒ@*TîX¨J“*|¯êheœ%21ÏÿUÇjÿŠÃ7«ýïZÿ…þé@1'z·Ÿ.<Îxž’*†LJ@92ÆI2†L^òõ"ž»F_LÂû–µT›°Ç”bn®çéž­¥”wâOYðxÒ£ì“>ügÄ…q[ö„FãWãÑ*9Ý·(%ýa4c Z+èͪOše»¹ £JÄÖn+zy½š­N‰&BhÏ +NB.ËÝLòz³•ˆ§õƒâÊ‚ îªC Ê­~Å—‘­¾ $&~±¼Ó +:8°K‰,ØÄ-¢ëìˆs–±÷Km‰gU;ŒWg_}}aÌ(ƒë·_bF “K‡Æ$ùÓ&oˆT‚!'/ÞF’,Á•º#¤vF6©‘ÁxøÕ×£Òb °ñ_ïÿÒP¼È(ÔÒZ>,s<ö§à÷OÇAþTõü¼i+À›VÎ\íWÀŠêï´¡ÿ©(€'€ÿëÛëëëÓ^ÅöùÐÑÝ=½HÀúİG85Ä~ø×ù­¡ î#þß¾}sÍ&O¸éÎ"nÜœZ ¿½uï›{»_m"|?¸o'ÀÿøÿÙgw¯§-ùðò¼z:Û À»fÒ/µØP @TüO?ÿß÷wE‘è ùÿ;,Wryù‚¿ gæ_ÓóOû…û…ÕY¥¡ «çÿXÔ¡r|Ê‚ÏYûEæò&–¼|{dbȸ{[&`jh¨6"Ö :<·Õ¯­pÛv=³j5;öèR£ µâÀ6#ú€u ]VZ¿OÚ þä©ÂXjf¦$S©™ØÃª^*jL*žü…::ë `ÆJ÷§"¨½‹ÁY¯KË3t¥Fñrl +~5lþÃaži£: +6гs«;Bº]ÖQö;„,µ"áNË=SQÖt³¢öCz¨ô^·TÕÔëŒVÂãp‡~h|ì\¨¬×èØÒï ·½ÞW` P“ÔÀ bòÎ'©ýDq9Œz2«ýïªÿ»Š¤«``ógøGƒc0QüAôTd8¶IgL4 XäI3RÝØx.;q%QÇÇú|²kÉÁ1°BžwH¢œ$r0÷Ç­La ¶ÇÖ?úŠ|:YÄHŸN‡¯A'rð«[⊔v4nQ‚IQÛb6Xid¾ÝÕþªJ-áìµÒK£2^Õ‰SÌcp³j»ƒ³Þò@¸- †ß¦bÉM‹ÿ¥i<,´šcÍä”aö^Ë W¯ˆÃ+«Iæ¥%RÀQ§ÖÐ0%“µíL<v4ZŒˆ|_çÐñ€’³*ò—‹ÉâqŸR>¯ò!9 ³[d¡´œh»·ªÓ“Ê&…#î—¤=&l€€·dj-;ñ’¨¹´Åû(¹H+_Ó‹FÖÞ~5’Ês]w`ÝrÔRaôÑÊÿÃqeÐÕ(Ùü/8ÀYýÍ_¾þ탟8P!ºø=ÎÀÀß=©ìýHp\¬?` h>uêØ« ö;H +˜,ÁZGõù×6×ùÿw-;kû q.)gNe]OÂ5!}ö»­I_ÂӾЬg/ë?ÞþÃΦve|àêA ^Áþ‰€ç÷&_ü¢ãëðàÁ7Ÿÿ0ƒX¤•\»tFý\æÐr&ˆÀ/ÓÈáòÕï\ÿôÚÕå+WÞG–ßÿÏ2€ðêUðÿÃk×>ºöÑõ>’ \åܳ޶øŠþ®ò îï~üW¾¯]¼¹(²OÀÝÅ"»lêîïÿ_Î>þÔù…¹ÝYvž‘T¨û¤Xl फ़`¿D€Wñ +À×P€´TVê…©ˆ]j ê8çCsÛTiÔÒA(ë·½Fm%ºÿB¡?è¯àœ7Š:\/fªVîЄèKc¢·Ü™:†ÛÛxL݃šîXj£-ôCÅa¯.#óÌ»„ÚzÛjʪr E@·ÀU¡_°±N>ÃŒžþßîk.æn쌭7Á(·à'Ï%¬B c°Ý‰¨{sNxƒöøXãQ#Ù¹PÛ3Z⮈ùܱ(’J«s#SÓªŒÁ[¢ÕšîÔº$醗'Z5k~Íã"¦ŒØ¯ýïÿ¢ý/ª9«¿ÿt‚žäSod8Îbxèè&á{]b•”$à.þ @rœÈð/*ähØn Fój‡líTOÕwA£ 6ZôÇc(\´`˜†ÎÄÌœ0X±Ä›«{r9¸ Q]¡PžkMíýqg#öÀùx Ù`Åž);6ø*ÒIìxwÐß8ž2tˆÞÅR‚-&FD.`áHT³)¥ _wˆE•ù&ŠÝú§RÜ€×^w²¦)À õG0\a¤ÝÃqÚƒ7혜RZ†lf5y×|®åjÍ$èšfîj<[Æ#;ÔZ¢ZíĉÚ*õИ¼ÇÚ¢Ð-ys¬ª²ˆ m7DÉ)²JFÙ¾2L'5 ³¹çÀBºª¢~ô†uâæîᣖ‚ÐG,¨“z–F¶Þ..æàÿiÀ™åOíµöð±CÙ à)Øÿ½Vþ§ÏsÐÌ?p  ž?EÕ 6$Nð9Àµ^€köå/^€›k“ùøÖ'€)ÈP¬+àŸŠSø­{‚°?Yæþàüö—°aÿO•à/q üùö-€^!{€WìúHf$sÞ½ûm@ý?¶àÿ§ +C¸v žsÞ_}]þÈ¥³0€7 +þ_Z¾úéõë_Q¿ö¿üþ•+ÿ¹´hÿGd×?º~ýú](@dù‚s V’ÊzêXp¿|²]þê*ðÌ:E³Ÿ]”Oì¬öý3Í=s§ÎŸš[øME&î€Å +°ÇWu¿@ +P8,53oyAQe%FEGhIO5‘]&õDó h“È„]à6[Oú5¡”Þçp‡€¼ß@3 UŒ÷æjŸ‚Íœos<õ»5.'ÉjPšºŽS^N<5]«jì,“¸ï”ðÚg[½ râE]Dy 5!hÔé¡|Ë[> Ñå”Tí¨H¤Õ=µ§_îSNá.ª‹Þ,>G”‰hZA$ÈžÁœWÏÕ¯~ÎÔò4R¼nx4T¡æA½„š4"Ôfš#‹ì…–\ +טÂÿ®ö_ð‚þS@šyfùSü'Jm° +éT­¥ð‘Q‹Íî‚ïÐ`’xšMöŠ¥é™MbZk¢D‚ÛÜið•-Þ(Ý™„&™Ýá›h÷ÃE\`$ð°!¨ +³“8ôP—)ª£±\DíŽW튦VjÚõÁCÙ£Q»Ne‚–+ƒ¼¬Õ[:‘dÊ^¢#œ’Ãmn-Ö¢5ƒ†€1Ù[¥:Á·ÐÙþB!±Ü°‡•kõö´w›¤MÆ7–Kh)QÉÖàDÀ&üDøîŽêì& jžGzz#âã{‘‰˜:ŽÃç5þ Œ"õ$†< 2AP}ÈRÚ Ä‹µT ZVÈÝÝ-’nS“B²šªˆM$„(Y¡Œ¶¾‚Àºxi>6”- ‚wƒµ Íš4°äÓ‘KUM­DÙwYxû’±0k˜;6¿|ç›ú<~øX€2 ê?ò½‹ƒ%(Èõ÷¯c8êä±Ìx TpúŒ|å\ +ƒùÎç³® `bØ®ðÚ §_ßLÀ®Þ€ßÜæ“š |XóÛ·ÖÞŠ€s„LÆøSa +a•ï­X + ¸PŸ‘ø°þðÍÿ=mö˜ŒpíÒ™4ÇÇpFËÿ.½ûî… oÀ„{|øé§Ÿ^]^~O +Àêý+ï¿¿ü^ÚsÀÿå«¥ àÚ‡üÎ7Äò£k)Xäì™ùã» ÕûÀ9G>>çL„ÇìëÏ*cÌ®ÙàØñ×të‹ÀtQ>ÑøYíÿïÞwjaîÔs,Å üY) X&Ø"p°0õà/o:gG/^À#7ø'SÙ³-Õ Äñ½½Š”†0-Ÿ“§Îq4j«ÆZƒ +ÜS€£6ਮ2ˆ®Ïd©Q€z—À{ÉÅ–©ùÎÐm£†wG†ÏS¡ZY'ÔÞ» +!;Ÿ\…Ú‹Cb +Ì¢•è,z{\I#\Ô´FcÈIÀ!‡yˆ^bP*QŽO€MÐ S€(çÎUm!â?R¥ÏDÐßZá ÜPqaÊ'°Î?R¢…‚\8š‘huìò®£X<Ï„jÿ3ÿÈ üÿƸR +"åv?Q«xhTËþSòÔ +Sêzºæ[i¯ý^”RYùØ-º¶í¯uÖÛås¨Æ­Þ:8m¤ì‚+ê›c”Öþ¤W¤š¿®üc·Q ½JÒmÅ$¤7BÓ—ì_ßî·†­-ýøñÛo±¼•.ìnvÚ‹ö·ÅÞdw4hƒC€$¡«P´Ž+2Ç{"h~Z0F–âЪՈ԰7êKO‡^‰ú וo aÓvAHI„î˜L·TYšÙiß„Á°vß…ð%,$È Ãz޹·â¤ÀÃn­Ñ[M‡ +/$8¤”¼@@ñç%4¤ÓÖxk8"-Æf—÷êi]€2‘¾¾#+y¾œ‘ŒÊŒ™ØKZµö—vì 0î’CDLÓL*3Ldæ¹¢V&öéGÏ0‡˜µÿŸC9À¥³ÿzöÌÐcg¯\¿ÿðÛ2nÝ㌤êÿı¿ÿGzü,Æû…¿u~á_bˆWø3Ràô0™Xl¨†`þ;íß~ _‹µéH +ügüñ?^€üÀðßâà”kwâ¹ÝíÛ´OA,»MÅÀ¿Í=ö,þ—ŸßÞ½+þßÿoÅp÷3ÇŒ—Àµ «gnþø¼ø?÷ÆÜ¿¼ðÞåL +X&¼¬À‡W—ü÷Þƒ\yùý© Àò•®^ùàŠýJ@>wîÜùèÃkËŽÌþe¡Hb8þ„ð €…Pï˜ÿìÚ-¦M? üoNåÃvVûþ‡þ¡ýCûžC@xÁã™XRQÌx;Ëû¸× +PQƒ÷[Ô ¶¦æ³¾¦&ˆ*$ŠÀ8À‘Mï 0¨Óç £^«{»ú4U¢ü¡‰Š +\®Á±Vƒà ªìÀ¾­6”RÅEƒ$ð>\ÚàC5cRo¡¿õWJ¨N +$çwæaö¼æ”LW<¶áæ`Gè€`ÏŠàåÊ_ö,rî’µz7øà:àÏ!ËCÐxL*jò’Lå±÷à9¶ “Nú@È…"ÏZôÉ6ò\ú` ‹z È24E„H%Ôü+Ú¿ "økHПÕþ+ÜŸiPû_lh .’ ÿTÏÙ9QÅ_ÇP[Ut”¦{4BÍè-ÝÒ,„¨ì*ˆªˆvÎÏAw›ðmßhXÓ4¸¢K_o„bYÜ5möGeî7D€ÞóÅEðrˆµ8SŽtòDŸÙ±xõVM}_„æÂ¨v +ûy=(Fd«Ý î±áÄÒ5Ê á·%).öšŽP»Í +[gaѶv@VxàÀµíhÕCˆÅn­®ýÎ2”¶†!@ÉMr‘,”¶:ÁOÕï+šƒ)aMHÌÈÁ§(—•[`wà$¼ûÍIBƒØmŠF³c3B?$ùÊÀ Ba¦½£cçL‚BjjG{™](ê,œv²áûàž»¾õ+–dõH»=üz8h-vÿF¦AÔä¶bîtè4ü$DÚaHˆaÿŸCR×íçôiû”Ù péÒÙ þlÉ0ó€ùWæ2ðÃGmˆ `~¢õ?^€‡IñE;€½ô8ð?€TpúŒ^«µ Ô_OW@YÀԠ応aS —8oà3R¶Oìh8µüigíI/iøK±Ø `ÒpPð?|£ˆ$@dß+–÷¿½ÿÍgÿû7ÿþÍý¿W¼ÿ&ƒ:à‰c¯½B½® ’¹ß5wÈ¥ôøðÊr†o~ïÒ{ˆ>ï9š£îÎðÁòû|(¨þ¿Ü"ðaìׯ]:“Æü‰Çò"óp®žй‚ñÐûÉö„Ìükñüâyà_©žy€¨ã¿¨ªˆB|AŸµÈÒàU͉ÔàÅÀ‘µ}Ñ=VdˆþdBàZí` J‰üB¤øÂ9”i³TöèF> ·~íBµõ£Ç=18«šåê¯VseU5Î{°ÏÚ‡ÿxF»]BÍ… ly¨gR3£²QE¹¿ 'sB%¿ãhpОN/U4×" °~u¶`ÐÀ½~W¼ƒƒÜX>¹4×B"I‘} àÕZ-Uµç„§Ó†64(©Ül&Ôì#MÄZží?ì…GÉa=ÚÿŒú¿ëø/‚Ózõ¯©ñ“?‹ŽmOÍÏýmÛN àöî#ä¨Ç„mqz­ ‡Ãñ0šéÍ1ZÒŸ ¶ûuÏ!!a ©×]·ã½¸#éÄ…!ô¢CÇÔ¿€{ô…cŸ£4Ô4ÿk4è¶ÀåÕ®³JÃ3—Í…fÏÔp‡wfŸÙØ_±y( ÝXàœ(½¶Ö+ ·CKšÉ‹X¾‚j@b)¨ê;IÐí|Ðt4­q¿V‡Åh¾ç*Þ‚YnвÁéÔê-}(ýÛZ4(lgÞß½ "ǰµî`€û$çí—›`º×0ÿÓ­µÆÒº[9xëæ­¿Ü†L-yŠRY~_D¿]¹WûGʈwØ÷÷4ðýì³»gü@ À+¯¡k¿þú\Ù/àýËaÞÿ¯£ÍëðŸVÀ~.]F÷ç³ü>ß®A>º&äßùüîÀD–ÏÚšü؉WŽÛÞ/ì¿>úôéù×]œž?SY‰ògf=Ï&g¾¾(ú‹ûàšÏdL§jUýÓñžmøÀ›&°Þ:@f­³ž¾¡aÍ{¬…µòˆè¶LíGÍù†³, &‰Jnïï€ü‹  ¾ °14WW64z5œüïu(DÖºGS%¥–5ÄÀ°×^ä¹VÓ +k«¯µ!þ‘ãÜg0êØ°ß‚êµZA ¼ðáU¹FX ñ“(Ç÷€ÀB&‰H¼ß×l“®µ{wåh/²'CmÖQ~![¡a_iD'›Èož’XúµÎw9Åëͧ£—‚ÐG,º@þõmÀ%6…Y€>€¯]¾sÿáƒG=´`±<}âŒÀOÿâðwˆéKåèÖð÷ÊÜsÀÄ €Í5õþ"›kë3ÎÿE¯6Š!ÿË 1ªP!%1þ?óñIZ +Šï¬--mO-î¹ý§/ãøG¹Eš$M ,ÝåW‘^€»E?¸_,ÿþïÅàÿu÷óëq¼ýÚ…×{íµ×æ_—++ÀÞý/6öCÞ]þàÚ‡^»z0Åÿ0¶ÓÀgyùòûÿåýå÷cøèC1ô·Eàúç×ï|öé• gOŸ™?–ÏŸþOlÈ-ÙóçQ·E'Æ}1>[!YÍü÷Ÿg“¹¶<—äí<€&È.¨°â ÀKúŒ  ÉâÛ±zÕ­‹:]jë@”P*'ª0!³Ù\r6jŒýÑuA;à4ö¢¿HÆå^* ±¨7:*`§`@ ÈyÙÑ2²h$käŒn“¸•·Ës££ó¢êØlõZÙ±>€ÝÕAoÜcW§é¬;Æ–D¦LêØ°B!´¥E7qLfû@=jK†\âåq+Oå,Þ¤.¡Hò=/¥Ä ˆ‘m„BæÖþŠH)LFåi>á>}ãák©äîH_€ŠT}Äb5ÏÏÖÿ o_Ò»üRq<=?7zù³oÜökxòØYìÓÀY¿s(›ƒ%¸0ýîýÃâÍY À3ø8=@„teb˜àÿæ¶Þ€ÏŽ\Dæ³³sckc Àeø+ϸÍÙúp*<(kîvó&ûþø¿ýi‡çU€©L|"eýÍý +û#Á~äÞýû÷ÿ~ÿþÝϾ¹÷ï¿÷ߊÀ矧# '9Àü/æ½o€Ž @/€ÿrÅþÝåâß÷Áòåw/WËÿùÊ^¸`À‰\^~ÿƒBâ HsÀ6¯-o$n…“?/*fTЯýÎOFuâË»vÿW‹àÿÂÜó||×xq´ì¥(F³Fk•b`=¡Ýî_C¨sØôÈ‹ó´~RÉÔXxÔ'®³D Åß­ïgBNž*MÿµÚI§žBl£Ïµàg}6¢$Œ„®RøÄx»Z[ÅSÁ¶kíÞ–ÃøDµò›³¨œ†+¿êÇÖÑ܉«´rz©íò(9%Öß µkž­´×uØ@¶Áo‘ k ÇsC:VmÍò]©=©õp\!¡›Ç%-t^DÍ¢~Œ!ÎÁ2‚  J åU5H‘«€C{©CRq[îÇÕÄiêèm‹„šNœ 'ð?«ýüß‹þEû_ܯý#<ý'JgI +%s,G6Ï'nÝÕ.L¨×ÖÁÜ¿4H2ûcÝ߸…Ü+\i·ÑÞGà¸ÐžûñŸ¸NÝ3íÞ2nï9K[d7Ï&ý8ä Ý·9“ò2 pÉ3ôhéB' öVد• EVÉ:¹[på<@dƒbÑ­-ÔÈêÂèfÐ- åí²0õ‡p<0~Э¦ÒñE‹œ­ìœÛlønB3 -qÒ‘ÎÖ|K‹í»Æ]¹´½P·Àº‡ÂײϤ%%Þ®~Fõ÷#nãœØÜ= XTþXDmxŒ€\Å 0/´L@툴X–©Q ¤)²—¼lfËW´k‹[ЕėUÉnl¬áŽºP ümØkƒóÜAÞC¤¹>^EÍbWFõòõèåô?Aæþ¾£Ä ã²Ã‘àþƒ‡<p*€ï2ðÓ'ÏÅÀ®¦R,o.Î…þJ§J8@Û;ÚýC¶××hw q(0½¶¹±µ(ä¡މö{>qä BsæÊÁ +Àßþƒ“€ÀXBòPé§HFšò(À7ŸÝÑðïéXyܽûͽë×.Í¿vìÅ.?ç|sgæÎ¼ñöÛ—?øðêà?Z=+üþÅÿ÷ÞŸŒè(ÿß_þ/Ëï¿ÿÁûòTE‡ðÿÎÏ>½–.„ÊeN¾|IÃ!JW¾ä©[ýÍVYæ[Á?â0@§žÓ °zo_À +àåÜ©'×VVµee<¢ +å|s­-¨m_·f *´®i6­§@×j(µ º)•Õ>@4ÝLçˆ@`†»‘@í ;_»ÑrðáÞÀÓÑ ‚bäþÄ©E…ÇÚ‹¢,!¶±Ñ:jÈ£9‹j¼Õ\Ûâ4Õ3{¨™S«Å5‡ h‹®ÏíÆ¢Ã4:BU'ZÕÛ°Ò +ýLа%’íîˆ*S‚"àžr«÷×¾>ìi`c}}Ö`¦iÿfÁc¶nìl­¯¯m¬mÅ %ÀþYìχgܺ ‚üûƒÿ1<8 Ýš±L(@±(žì±/5ûß/°_<îý7m÷ÿþíßïß½ûÙ7ÿþ÷Xløæ›Ï«¡€®^š?6÷  ßi}ççmxã_žùõ…«×>ü¯ ÿÕ>X~÷Ýw…m›n.-;Àûï•q€*TWþ‹}ƒÿH‰%àNL×®\¹š6 \ð#ÄŒª2ÙÝ:X&Çá||+´8@|åRû¥F{†XU » {Œ¾°S ++@ß™}Tø­|£«aR»Í%€CÆRUÆ:9¤«üX£5ªql&"üŸL³÷ÉszÂë GU ¾AU”Ú-‹šW¿*u}¿­Í ¡o{¤Å›Ê¾×®;55¶—§.Tiv!í(úF© Eÿ%ÔüGË·«97^Á ]ÎyŽu*hÕÑyDl.w¸eK{é@ qog!l~“Û[cŠÄÜÎ>çŠõ¸µ«õ.5¸ý ›Mpß6ŽÒp2­6‹ìÚ^=Y_”cøÜTâjŸ:Æn¡ßií” OIÞ˜r±â+8ÿgµÿJýŸ*íÿ øG‰Ÿ&àŠ¹u0÷dC\QÈÇñˆR°P‚::íó‰fiõÀÙÑ=§b"ŸU,-¢I¹‰k—dŒá:Š©½ÕÊ º¤"ØÇî •€bmƵVV¿èkõ'{zÁGÁ×jO€A7 ®bXÉ—ÜNÐhÕÏ¡-“ú¶!å7|ã’ÙíþÈVÊjøŸoˆ‰Š_×û±µÐ0(p"ÛZ «8ïËNa?D'æõÕÊA‘'D¥m†8üÃvÝÉöÕ²[Bñȉ0íÓ ?Þå† Èµæï[T»ó° yY'Àå¤kÂ`6ɶ• r¨¡¾Ä«¨§ ª¡Á{óÊš]æî°õ!Nd#Èœ(§r/‡Gt£?’Ø0bçL2ü¨?©úXÎØò«õÔýßÑ€ÄÇv  ;ß>xôàÁã8<~ü½èÎÖ“ïôÚ(Ue_!þŒäO€ì;@*8=P¢ü«hK~; ÀÿÄPõ@2`ì%ð…5ޝmlíÀŠ- `þlûÿM÷hàÂâ €õ°½Dö ˜X2 +‘È_–E<dÿ&ƒFüwï¾ïûíý{ŸÝùæïÿþ÷¿÷Í}À7÷b¸w÷εKóvËÅ&½ò‹à—Þýà¿^ûèÃUÿß}÷2?yï½÷ 8ûù]rÿÁû,ÞÿÀÊ€}øÑ‡úÿw>ƒ|pU[Ëkp„K&9;ÉcÕvYÍ~‹Äâ³à P‡J*Çòòòj`°–AfÝ•bàJ®Éü·Ò )UÙ§2 <µm1¥ê±bJ[U«P +(¹¯UßkÚ–v6~Ac®õ…j®’M¨8Q©4»ÞÚ\–{ˆ€@¼Žzµv÷oTõ" ç¢&âT‹„¨?^]Š¥žšÓ½†:SÄ¡B7¬°h"¡¦kœ½ÜÖÔáÐçËJ´õ§ñ>CÿÛÝ|Ô×µ¨ª³q u#µ·ÇÏuGÍÖhÐIØüçrâGíŽ +Ǫ‚ßÉàGµši¡G„)S%’@†@âšGDŒߦž =ÂáÄö,ÑËROK]·×±Œ õÿ÷iÿÖÉ•ì¢ñü? þ‰ÔO–A,ËÜ+YH’t[º— Ú öhHBè/øx^Šb?Îr²IË@½æˆ>{Ý™—~8NʳvªÓÀù>IeTÍÜY6*ŸCзÖ&%Zâ}Š0Oq`@[÷L™¹Wù¬˜¡f=瘖³ Y@kÍú‚ • âÏR×ÀïÑlõ¹%‡ÅB5d‘øXGòál-9ZØã­GSîä‹™`{ŽE'vùóÖ’ù±‡dÚý@·9%}ÜÓ»™r¬á¼&µcñBb#”ª\ig)-š.djzÿ%É-Ί ×%7u;¤³•òže²’󲿦šýqžf&ÅãmsúhL¤’î…§µØî{ÔrÚÖ~õÿ‚#j“Žœ&€³ó¯]v(à'>ô +ØÑž>|ìHN +Pùüíöï­ö÷À€»ANÆ0 `úEÄíEŸüGÿ)&€µÍµ‰? 2* €]´xÀ¸øì¬Ý€¬­¹% Å9Mlßý…È&×NÄsH ÀŸf->°0€,fÄ& }â +ò£ý³çþß¿ýÿ}ûïúüýï(ç À7w®]8}lþ•×~1wBÀ¤#À…·/,_ýè£>Eý¿ðn¾“Œ“ða+Ó]]¾²|õgx_(_4 øH>¼ö¾} øŸ«/þ1?§ÙZ¤ÚžÝUIi æüUpq€øÂù^–wàE¬1žv{È;?õh®rF*…ÔV9¦ ˜Ôì5¨½©‚©œÔ>ˆuĦi+¿½MqDáµå;C¥ÕÎ9®$ º +u*õœê mÆÏˆ'ô°âã08MÒí~e7@ªM¨Ôa\ö½Ñ +¡Ú¯e¡6öF©X uc` €-ͦÒ¨$­*²–FÊø0ÜÕUÞ¹ üSåÙ‡€k¬)ÙÌgˆÿ@”Fk*fÃHÂp"‘*ª?ôÇÆÉ…I€€Ò@f4M+ÇçrnÐo¦!F›ƒ­åŽDçMµªS-[ÇB½L¤¤ ‘}Úÿ@ÿÏ„iTÿ¦’ëÌðŸAÀ•Tõf“I-×l*èêµE}âü?Ü=küE¹4[Yo,®Ø Ôµ,©jž¦}!ƒ,ôÞ'[ʵÝÁ¸#ƒÅDýÔx š p)£J”¯‚êà{òNrÜ3µ³ôÓÄÕª‹ë”·ªÜç›–­S1™k §¬š¹„©ž3(-èÁöX”eŠÜ€`¼äµê rÏÆûܱ­MåÜÐúâHxÄdŠ‹úMIµ)Ì©„ޘ𨾯\¼WR"ƃ¹K½Ãs-µw#>¹!áoŸ’kDBÔëil šð([féDˤ6i0þL4ôð°m#·(©¯¢\En’†¶‚˜–ÖÊᨙ?˜ÙÀ¥G/©óXâê­ãß²Ÿ´)_°/€†4ÏLôàÁÃG<Œ €ßS§ûSÊò@I]¨Ä)|×P0"!"êÁb€«,A]§* €G¿dßÚŽòÑÄ‹íkscmëFì²o Ÿù©éWeJ|lðß^S @“'ÆE`/øÌ¸»Ôp÷î»og{|sçÎ7÷ïß¿wï›ûžÂÞ;Ÿ9%ðõ«—œ‹éµ×Žýù™Y¿œtÿ¿†êi{÷BFzOþöž}þ–Ks@ô«b¿›NTFº.øôÓàÿõëŸ~|íêU¯Bt*€!È^ôw½Ê°‚÷üö¢Ù1ý*6ÿW[Z ¼råͫꃃ¬ÔOYO|b«óœšBt¥_w‡ÔÙò²£,x_*{Ù©wQ›QÏpB;ã‹®òž÷l ¥FËtöS‰ ú¿ãÿ;Š]âClA°Ö–`Ú!, w³–[¡Ò. +Îóv3îu¿î. +.Ö%pê~«a‚H58B‡Œ×XjëKÕ-¿vM'@-Ùi|¬Ft–NBP]òðªt€»$ˆ˜~¿šSŸ7“1£éóxBÓ4=©@ƒ:}Ç‚jèe½ú) @a&G±ÿk¨ëÕsŽƒ`õ,»P€n¯®ÀñYy ®*,mY%kyZ 5±!)ŸÑþwñ*‹çÿ!ð/òš~?Yjµ˜¡Åm˜¢aNähô—Ú°ÉË‚ +®ÌIoÀ_Nj÷Ýñ ïMâùQÄtgAì†JouÒÂ!ƒÇ¤¹PI$’¥PÙ ´*e"Q)ï“^j#rˆì4*æ ØEÕ`!æþ+y5r®$®Xx6Jv … [¶Ì*cçyèÀÆÈ!<…ÓƒÊPófØ\ˆÉÈM‹ˆ%1ÇË“K€M%¡–G žÅƒ(`ÝŽC—Qþäì‰~^^£º$Ñ®µ/°:¹a-U„†?œIáHÝІ‡q?_fSÌÄçŽ>ƒb/÷òšÚ»0Ç|2’²Â\ÒÌy€q‡pL¡To™ÛR€õ +¥Ö5Gû+Fú#ÀÞn:“üSÒ.`ÀÙåÏî=xðàуo!Žh À“,XB BUÏ$ñxëM}Nî:ö§øð| €pëIÛÿÿEà‚Ä’‚œsü Ap¾ñPïû·m`½³¹É b}tþê÷¥­•x?!ü᦬nÞº}ûO_`(Û#Åÿoâ +¨_g–ÿÈ÷Nú„$ÜÿæîàÚ…ùãÇæOÌ× ðô™3|Ïè¹üÁýðë”Á.¼{I€ŸC¿wéÂ{—X @fø øäú'Ÿ\¿þÉõkP,×!W¯^‰ àý„ëŸ}~ÝO“OùîYguýÌ™)²O7*°¯V³’ÿÉâЀ‚I^Þ²ð¥C²P¹f½ÏpR¹æz@¿î”ž¼ÂT/å¶¹' D=ª?ZÀÇJ6ªŒ½@RѰÕí±€ÿ¨»çÒ÷/€fíÜB½Æ-*™ú[«ªU75‘=ðÔ8¬Ðy¨O-æ`0þëø+!¥®mUu"Xë„.©izC€3Æ:§K+;.eEtÜ*¡ÖÅLN¨ þ``%á«f­Nà‰[ôÿî@Ï?"ι¢ÕJv»aê$Y¨ÇIm·;*›ôtiÅÝwâBTôsZ. =ÃD>ý”£±¼ôÿðÓ2Á‹Š& ³lì÷c~u¨:Á_z.œ:uê_ +Z$ýT-©&ù)?l Ìû^ÈóDýfdf;]{O]»=Ф2Ö1 €¬.ão—“ѵŠN®Q›mÚŽàܹ…4Üš“â6ë2\ ¬óҩʺÏJY €œš„g£Bš¨w]"*D5»˜Œ½‚K¨¿¨eƒ¡¡æ6\(@τģb#Ôwt›<@wh0ˆ}ÀŒHëdº(•íö +Ê#º#Ç7ÃG'NU öt!ÔÆ¶$s±Ý À6‘(¡¥.ï¶Æ¿S©+sÉÕI…šÎU 3MñõnuìÔGÀ ¾XHŠÙÂTÆ„löEL¨¹Â‰›³ÿþÏ +Ǥ Î,Pí™H®`©êÁÿF¯óSÅfMÛö–y¡ÐáRg=Â!fA«kt¤ÿ& +x¸©þÜínõÁßÄ•áX⓬ܲ, +#"ìhÐ ®ÿ–c®ê&Á‰$9𡆻„v÷‹>9EAÉ•o%ö(»Rv¡úŸÇ§iŸ¤À´áŽk'c¢p’7€,\V¹m”……âÃaSXW„…³,èÚ1*@Ñ)æ4| ǽ!wOwBÄYb¶^€±Xœi&ÙÞhÛ”Ïk)Pëƒð(®”7ökmw ÛŠF»˜ËrçÆ\¬±J¦  +³ ºe°Ew G5Š}Ç´%I¹[èX˜õ¡'ïc2“—uðî%”Þ"ɇf;º}_Ó£þÍâô‘}Ðõü¥ÛØe킊n€0€3W®ßðèá£â¿RšÔüUô•Ôÿ‡‰€ós§¨Tw òOEð>P‚¯ü +þƒº3û¿tÛ ‚‚þ…Ìæº©ï$amk}Ç‘=äñYÉ«R.÷+ÈÞ»}ëŒg *àæo"÷&_ÏlÉ‚ÿ÷í(ðÍÝ;Ÿ}z +'ÀcÇ_K'À¶ÿ§“¾þËÿÿË… :n°´)À… +=ðÏWÜgãŠ}üñ'ð«½Ç +ðé‡×þWÀ•÷¯rüºî‡/.’’À.ÊïÙÚ'dñ©Sss§æ*´8@R­øŠ»Q½ëÖ3 <µÇŒP3í£¬òáê!ú§#j¨b´¨½¢ÝujÕížsߦq‡u‹í­±Êéà^mwJ`áÿ`g«·âÿ­ÚÉ“ lþþ £O¶ÎVÏF5ciP‡RÆ|5èþ¾ÝhQÕ8€YjRµLêI4<”y €¡²Ö¥r¶®6F+ŽB¨R´g9µ©6Œ¾¨rJoÔâp5ÜŽ¨hE¦ýºß]ýbÜ_w©N­Ð“PDXÀÿTÊÃ6´ÄöØ^I$÷±Îíh´'QðMŒ”q ò3औHt‰t™1­UÍbîmvHþмìÌ tǺ±ÅæPÐaþ÷IFýË,üÕŽ‰ä>¤dÁQÈõO“Ÿø•;'—XÐØê·c ÃqñXS€P›• XäTG?ÿëF½;†gކý!¥V“s)|‚Õìð>êɦ °&úííõµµÍÍõ°ð:^€Ao§t†@-ÿ @×A¶ö}¢áùíMǪè€Âs«­Ûùr};sÄ^`P¶w8›3ª{TRÿUü³Ö +P6çüuDv-—ÿÓÜ çÜ# ÎPàþÝË—¥j0ËïVýö§ >œÁPßVý\Iî‚üÜ^ì¿þá§Ÿ^ûT#M×5Ü)}_H– 6€g‘~²£°€éw2Às-¾]¾Y•ÈVßÎlL)@^ì]#À +ìX‡[›¥ò°b³]wd€ý~5Ÿsb\·‡#4ŠAó:]µ¶›2>põ«bpZ;ë8ë>,¸g]\éÔššue&•Áð¯c¢ØèrLÍC˜†ñÿ2ªêv„zM„¸Xo&ÐÔjŠ&ß±f´!§õ©–¨ +(÷@)U%³àZ–J¸;XÆòN÷ûã/Æ£Q»^ǹ³Íñ7”šµñB‘`…Ž.Ñøyx£×;¸~c©qJO=ñ¿v®v.þ§Iõª>õImoÒtWt}:@Ê`‘âFÿ‹/F 3 U¯€?CýøçXÕöÿÚ¿ ¦¥û'ŠÐ#y¤(òÏü¨J#e¨ß|\ÑßSÖŽzDA/^‹¹A£Ñýª7è“KöI+ mû€÷¸uk,´:BµmU#б¨Ò›w hÛ>+I=y¢¯ƒáñ((Üêý׫‹Ë\ +³´¤K7|Šãè²×ŽþíÆ¹BŠç +"…±µ©P,6X D[_iΛÖ&Q=«­@#WV +¢{fîbQ‚ë¹Y—+¦x†d§º'?I¶ªysQμ›FŠD3¹) +œE4ÝÙŒ''>ÂÉ](mq I“Q$ž}y$Ðf’k2µÅÅ´ŒÜ0¡È§^ï7¼å²;PËœ5¾N—”/Ø[qò|³!h545ð׊ãÈ%}ä"¶ùÀŠíÿ¢¿¸b?ÀÓó¯ÌCôDžÇ BÃá_L­°ˆA³šWOwsaõ\}±‰¾e/€ÚAãœ\à4Q'f/ê·ÍF‡PSíª©=ÃGtÓ¤š³Yƒ»·P»|À`°þg}ÿ£ý7êöâ¨öT’غ•öïm”ÊÿÒÒ«Õ‰7w•Lž<„'¹ÈÿI†v‡ÿö¤L…L"ÐËŸ:”HB<"šŽí" Qâá‰ÞWÌWØÅÝð¥B1»¢,{…ƒ;.‚¤%3 ,Ä‘¸f g ©¶Í )ý`µEÊëKYa%øÚ À<Í4h%k<ÄE{ÐoÖ@BÀ9yÃ|>…”S9EÓ|«3€$ðfÏiØ<äÄçŽe9´14{%þ¸Ã‹Ì1=UÈ>_é¹åœ`’Öìih!i[œ“´â€qWÀl_òµµNÄ…a=,Xð^sêøwµºS²MøsB^^I +º5‹™Vo´¿*SÚݳ'MTf‚uQo°qŒWÑcG-Õ`}G*zûIÐþŽôXR$g2Àg÷îëøðñÿùè1èÿm™@üÿþ%{ÌNÅÀÆÂ©ósZ…ùq¬õ±›¿-ôngìú(èü·à`ŸÀèæNÖ_á{ÑÿýYËx@›EÛg1û-—üöÖ—ÒîÀn +nܺ}«Ìà©Þ,Ï/¥BDÿ>?Õøœêÿ±ÿEÕ»ßþ À8;—.€0Ð?"Xþ¿ûDàÒ»¶û_¸ð†ðog€ååÞ§0å굊LÜO?üðÚ§²«²Øï=yqp‚4°03§R1€‚þ»&»^È ðŽùÖU«l*ÏZrv¶B|¹ónnjɆé[ƒ¤C]w´JÍ ý1-N¶ÛnÖÕùmF¤â5¥ÕU›!UËuw~u:ð«ÂÜ©tDíõ©× °Tu*0AsœºÔJÖá·‘MXy¨ôhX¤òÿÛ_[Ûpå0&ÏD×j6PÎH•îýmÎëéIÅžþ +µ†ZhËІS+tBíìqcýÃŵÉîÈó¨aW«vkä¹Üú‹ÑêØ‘VPÏRtTôÐqëoÔ™ÖrT¾Ã!‘i;:_“%¬¥7zߨ;2ªu}ü¬×€´ˆ°ÿ'àÕØn'€°Òm­vWÑQ U“uWeZIë¿ênûLod¨‰<ˆÃþÀa»íÿDw¢ýÿܤhÿþóÓç짉MÞ¼¯€ +R Ìã{_ÑNɶâv†2Ø´… ¨×Rts¿îx8 OÂäùÁ;aÏäh,¤£ÅÆ$” ð–'ó›rtÐ"’›XÐòPnÑÔ7ŽÓ (æÔ s îaÊ P—W(†í9È3x"–±æ +IXœ0ÏàžpæCp·>zðÚ ´´Ø|s$Õç€eĈµr‡ÜÔ„×Ù@þ±Q^B|λ@‹î2¢ehàBÞÐ÷Ä‘î +—UÛ$,çdÈÐÑë} «i´·|"ÿ½• §•$©•d‡@xÆz\Ž`Ý-XÎ*'™ådeG²–ÂöOÕ¿£–Ó ÚP¯ ý_@J@œÎ^½ƒÚŸ±?ÖÐ`ž¾‚‘g­yU²U¬œ ´Q?ƒs+Íþp0¦†æ@ú³^Ç襣Aj¢ö€øk»™Œð”8°è4ON ÀIÇìT{Áÿ_µÒ £ÖòìÔj½f,ÔÏZhãô6dk1ñíDÿëøkv»5ØAàÀ€) }*•š=óëý–àA»Û_M·h4(é•Q·Ö‘h´ðì„z4F³7#í’þ…½.5õʘ¨#ýaÜî“6ãþê [SÄ,û¤‘HZŠM6¤Q`”ðZÉ7Í ìDµêÖ³«tÈP€¼×ð¤Ç­]ÅÒW{U×Âf(d¼2gÜ6ÔÒ“„ºç”vÝñJ¯‡Êè4Ħ÷)Ú?êõ¿oh©ðþ”Ÿ*µÅtc+…Œ.Šk·ýŸ:£º·¾b‹ŒŽ<×fcÏR‡|vÛP=þQ°F_©ÓJª¸ X¨ß[¶lZýÔ+u +s¥|AT!ÛšôöÅŒt@ü`hΙ+MŠ[ŸûÚ 0Cå&´&€ÀK˜$½œ=d›L5l÷÷|H-ïBŽtìðÏsT¡-žbÒ¶êœÃuíú‚×"I–À’=¤Æ-®^¨ñ’°Í̓£<#ñgB`,‹€ëm^0qM=ö´WxºÖ»?ÈÁŒ©ÔÕAšDVäRŽ9$Gà¢ÂULAf7>.)³KÃ%Nößíþ†Òn˜ÌK¾)ñà +A’7q„Ûä‘ ) ¯UÍ0Úñ㟠©þXN; +Ð¥³q@÷ÏràI†š? øôAú’ÁFh U?J?•VÔºÃikæ¿¡ÖÇÀ‹:¢Êól ÎÀªì÷{ÝÕñRTíVsÏéùíõÛ½¯ÔI 4´E;5•©CSµŠZ¬Gã‘•tó(ܨé°ù€ì9k8Y£&×C±§9VÀo­8_N€èû›h»Do•¸I Œ¹VØ@¯N?Ô ¸OôB7Õþ÷âB>Eÿ‰õ? ¤ì|y!ƒƒÿä +èÊ:ÈÞw mLNbXë|ÈÿæÿÏÛßöJuey¾(¾² «ØÆ;߸ØQº¢UHAd쾨än’¤¡é Lå¡AÇW'VìXlÚ‰áXI¯&íêö!v¥Û­n¤ú©v»^ qtoßY~‘¥üR÷÷ûϱcÃÞø¡z׈ˆëa®9Ç|Xã?Ƙ˧þ¢Å Yá  ±ô{ªVèh°ÇIK›lØl NÐ\ÀV¦ZÓªiJ~)~j¢0©àIU$¡nЖQ)ˆ +\&í¬hDb ôHî£ä8YußhÓ`1q*±å#“±ó8E ïå—ÿžDݲ² a!O"šáõ÷“B´äšQH•Ô(Ô¡8çÜhßt-®.ЇÂAcä„oòÓ°¯ò~ƒÜ­ê@HË‘Îã1L_S|Àñ*ΆAúøê'Íí~×i€eô_*Ríæ£¢{»%&LC}SäèbæÎdŠšZQè÷k„Î>S+b÷™N½‹QY<Îpsöü™S«((}ùôÉÓçÏÿWzúÄUŸ=òìÅsýÿö ìJ/ù»~[úƒûó1o½µö–Sε蹃 +¦ƒ¯®Ýèá}¹_°?J|ïÞG~xÿCŽî,l‡õmÀýË–+Ë*ÀÇ!jsÜW•h;>ùì“xT“Úö”óýW¿~üþÞ‘šÿ®øóû¬ 5@Eà‘®ÒÿèæW„4²Cªq à/þâÔ™â8Ãÿ¿=çÛ·ÉŽœK4úÛWôçTYè'–¿+^»zãúÕº +nåàB²Î,NT òB m@ÆXI‘袺\ƒn–kÅ鬲¬Ç(v Èuf>NjíAÔ¡}Ùù?Ÿ÷ÿ²ùok°y,ð?ȿظæá?ê{²W€u*$†áŸöˆ +6ÙDXw­^1ÄF$ª„uÇ~T#_ÐÑ5 ²ã2Z$Å'º€8åg9§É‹z*!‡ñ„ƒV† I }1YV‰ryD‘ÕP“T¼ñè…i‘ÒED“à”O3=¡$õaЏz¸…kARN»åÐ;D[›:ìXÖª‰1µ.©°ËN‘ CÆ`v½T†ýg¦XH=EBùöRàòÓ_ë®[ÀÞð6LÚ ™§:]?퀢3Io&š(uc@âcå´DõÔÜ´Ð9¬›®õ3ÓÒU$R×üQÒîQ|Ü¢F£ê’²ßŸVôï+Í—ÎÀ2àÊÀÙvÀê•G_=}ò䙟L6‰q–KAhE0)„}C{ó»Ùï¼Ù¨;ÞÚjÿ)F·]¿H!“c £8>Žõ]€ÁQ“¥‚H±ßÍš¾)ˆÁ£þïÄìOß$4qÒ6%LaKžÏ ïxü»ÿ°)[y/굈™Ž·f)‘1à¬5ŽÚâ`}8Ÿ°§~Êôѣݲ«û'’À• +@܇O¼üŸ+‡¢L6Igˆ@Ýl€ìº‡êÅɰ UáÆf¨($FMºƒpÊàp†À{¡¼ñ¯ÌûÇX\¦6²9úS6‘ù¶§¥ö#{øËû£í7 ÍÐs´”ŽKÛÕ“ÜÕ¶$Z. ‹+ú ×Õcÿ%è‹{„eß«7B܇^å ¸.Ç´O>Ž! D +°ôE?Þn8ï$Ö„“h[â¦Ëü‰×Þ’óÙá‡æäÐWNvN¨¶ªT +ל(ØÝY(o%TÔ!¼ÄUâ®Ae“hîó•ØÑ CHƒ¾ +òš©$VÎm®x†üv\·€³a‚ë­®L©÷ÖºhÖÜÇÏUNGV^ ¤Þ€º‘3DÓ*P3í¯¹²fRlÒ$]§ÑÃL×à‘ a‘˜¿u W¤Ozê\EÃî ™ÜwZÌÕßÇ/7ÎêüG8áüE¾üçÍÀ«g.¢<} +ô?ãÿ‰o~þ"/¾~þ¢¨»Ð“9Ò¿úÓ[H ßî»]ã{N0\÷tïn€ûwÖ+ѹU^ö P]!CmQ;@„ÿ_/kKÀÿéÃßjÒ‡¢7<(c@õ=ALD’kŸ:€$vx¢¼ähÇÍ-ŒÇüüs¤Ñ`®|ùØWõF(sÜ+ß¿àsjá8÷—ç¨1‘Nþ àR»ütéâÕ+—.Æ+påÊe½þúnÞ¼qóÆë7®;ðúÕ›7õSm'€H¿M‹ƒvGØ?ªjR:%VÞ9&sÁöï"U»Ÿ´@ »P¿à?äcǃ™ŸO¨›Vê·@4@»Ø½‚]U9QB¤ÌþRcê*%M*»ÚNAésìÒf²9˜bÎñäÏQ­ô>|¢¬ýƒaã@Œ_»n•EˆB纭à€J*È`à,¿ø•.d£_M&ã˜Öš£îÀ·‘ƒÙMSÏÆ#¾ï=«¾œ†Wƒ1ÐS‚nŽ6êºÓwò¢}çOÿXõ?ÿ>2Œ¦c^{@é¨×O6v0söו ¦ ÛhU.GŒÒá…é´Oªh>àpMÁÀµc£}¥(`„­†#E;e²¶–U†‘Ü|툠ռ+¹@ äZôÎL$Ý M{µŒQõÇjð¹ÚVC¾É'yRÓ ŠÊͤ}÷ŸÄ-úþ‘ï´þ…±å/…?¬}ìþÖ¼ûÍvgÓ?hG$[¯'vô’P™.s¢Kó:¸ÜÛTc+šbâZ¼lPëœO +Ï*[Ô4§…IBÎÁ’| ”¸c%¤l=+žA÷³ÎoÚ u‡6`Þ~ajÔñuÀÒ ³±µ~z7ZþèupIÃVA°_Âtø©2÷PŽÞFE€ è_ßO˜+~€¬EƱxj9˜Œi‡Áx([Or±ËAÈ¢O^ˆ'!(¯F*y¨ÚŠè;Xƒò,n 'îKñGàÑʲ„è·r †xÁnÔskÍqšäC_§v$}RŒ6bó]> F÷“ޝìÿ\Y]Ív8 ¡`Qž:~ö* +€/üŸ@® + øgHà Ž<· =]†ü_>8R<œÒà÷­·Öœ à:1{xþ½°þ Œðèe€Ý*€|Œö ¹=­0§_£D àŠÀï'TôVg˜{€òÓý?.wèø°Ä@: Øÿ<5üéË_ìÿ[XùüyËzÛ ÐŽˆàÊÙwò*À2 ÀjR¡èêwÖŸÓ°ù©ªw[ü?{Ε€/`ñÏÇØÀ÷ò¥¼é'ðŸ€7o\»q=Coüêñ—E•{Œ©¿°ýóÍoi'ÈVÛµ@€ÿôk-ÎÑb7âáûŠ + ùpòoæô^€Æaf˜ú¿kÆõ'3çС܀»Ñhˆtõvù+¦_`Ãÿq:ûÜ7€Ú<÷Ý£óY€ýÇÝ^·Û?Ýs)¼¢ (öø—[pÔÔ‘xÚ5¹‚htä\ñ¶Ã¤Ûmq È âH–Õàžw7™5ˆ!r57cä•ÓÅzv’Ú-Íæ‹j ׿ãFt +,û­iÏÑŒ$$æ7£¦ùcÕû¼8ë®iÆ•]ø¦oyÁ¯F·?é’öf1£aN©ŽÈÖÏßE¾ú3¯iq¹ÓÓPÖF p,&'ЛÎ^Tž#VûMÄiw0Q¢Gð~AÿÑQ·äzÒ4}Ô–iÝÈ5ˆ:y­—Wú.ëÿeó_øÝ nÿ#è¤c¾1Qi€„Nœ´B Çš¦Tz.3áWù×ù\J–3d˜sXy T𸌒·!´ømgÞѪ¹‡„,h{¨&˜‰ã ½ 4?St— +QWò>ÿ +™.±ª€¡ÃÔ†j™rG5tÖ’`"Æ´þØÊ:™€(šŒm;-œ}WÊŽ¼¬ùÎ=´6*‰'q+ѨäT{ŪÎÀÚ¤I84GۜʗeFÁ†´š4¦À²š¸Œz‹ÙË.5`ÚH'½É°¶ +¦(|u…Õ•þ +šVXIà/;Äáã|M¹”·ý'm¿ý¦ã®pÊU€ój/^¸’¹€gϬž:{áÆ—Ÿ߯ˆðô«'N ÔðäÉWA¬Ýèq±òw!_Ê«²PpØW3@X³#`×1Áõ€W€ß´éþýßí|ƒÓ `Ûø‡>º?~¨µÿUJOÿo^öäm?žúÔ1.<s`À|p_û½þ‹þ®üûDZªþèßj7/œYyóà‘ƒàl V3-Èý ûl@ú3Åð?{.ïojÉ~5€K—œÝýé⥫—®ø¶ß+—.]¾|5¯ûyôøQ¦Þ¸~õúõ¬ ðìÿ÷Ôþé—¶Ùkw|K¤f’••UYC(†ýë¨Øþ‡~r€Ïk4€<Üÿ¡<† +×íM«ö [{{0+5­G} Æ~¾i:› \idÜŒÆXÿ˜ ˆ›ÆÅòìõžõ±BAV•öö:€? ×éêDô)ÔP äÊén,ìúŽ\ÏU›¨ ÕYŠ”Ìng¡ÒšI!…‹r<9 Gý-l|¸¶“-@}d›àY‡ìï¤qÜ9ˆér$¯.£Á=Vûô1ý!ìú/z³?êÚØDႤSÌJm'k÷áy´1‚ë2“ÁbHŠ‚£Ò€4÷ dÎ¥'Š `[©Ë»»µ³,àÜ~WÔ–j×@;lòû¼šŽ~‡æ³©úEæÉToÁõ&\· ÿ}­ÿ…ù?çS˜©“ä&«"þð­DNdzpSPÞ7íoÃÒ3ÀOÎpR¶àKp&aÜü{„†`«!ð?Žg6,p( •ƒKJ'‹!RQ"hU޵àiw_1CSV“±¸ß÷þ«WP9çSk~ä‘[öbõí3eÖ?ßÿ/\<ÑwÉ^ðÕgÎ\¼rëñÍGnbÆ­GÝüýc”s´Ú^TLý]> * +@V†á=`íˆN€8Z]¦¬õ÷ª`© àþ=1ú7å@0½ÅkiÌÐ’Ü—Ÿä¯ ÐÞõ x@òà¿éÞÿ˜ÿO] èN«,(A ô² ¶I÷ÿ­Gιk=âj4—ôÍ£G7.žY9pðÀA—<ª»]@0wuõ/|-Àõ3l#ó=p==.]Éú?—®–—èÿ¿‚pùÚÕ›ÿ—©¡ܸqí†ZÂÕ«7?H€cæTþÿ3[¨Ý è ûj&í~<|ï߃°_ÿñð±ëýì?=øðnv Ü'MÔ„ò6)çoí¤²âNÈnñ¿=Dø½øïz×.œZ9°ò摃GêXÀÿqÐß%¬Œ‚ùÙ,Ê@q \8‡G%:À?>(O•]¾víý÷Û7þ dÜh× ¸zóñWŽëØ¡ìF¤@Ƹã,€â8~ôX ð¯%û}¾CÈS̾hEPþçûÝ^ìÙÞ °÷Ö­}Â`C¥çyè³®©šç_‰«HR@Æ•7þn{2ðpf½#ØJÄú}Üâ¡5èÀh+è®û^TÍÐ#ýˆØéö4"´ES+p1ä/1F®Hæ¨|§ëéGðÝ̦Þ;eõT“D&*ãÂ$Ã®æš p‘X:€ÙÏÇÕ`¶ål{‚R¢XÜâTÉ´\íü”×IAµ2òà4Å'ÆB hË :(Ž4v‘|!º©Ã vA̰Ô x7Â(©Ýp­híûÎBjj¼mýï6ñÞ—ñß +‘;yuQx­ÿIÛnJ~Ó"¾ï¶´!~Úú£ØsÅÿüq*uÙë×#{dd‰å^6ç?õ ¡Ø8Âdì]Ám ðyʘb)Û˜ ¤aßæE²€,{Š=€rAB]ôˆ“n©.ÚUoà€—Q;_]Æœ˜Â­p9ËöÅÖ6.£ö“´9ßtÑ~?ü§A´û»A¼ƒ6`-®¹&”Œs`cô9âÁIL(#êQ  –ßqµ*,ä¼P +ªBé’·Ø1ÇÕG.BÍR½#e׬ÅêïÛ!Á¿HÍÏꢠå:ŒWлӳ¥—OKÔ+W U˜[ë¨ +6rRÎ}@¯7R/ˆ¶“J1æ}þûÓ}ÿ¬ú:`4—’Qü2ü¢s¥à èâ²@ÊzÿØpXº .\¾xá⮿Àÿ¶Ý¿ý™Ó¼ @Äç ѾÛð¸»ä˜+\,(ï€àîÔþW‰PûÛßbÑ»m?Û£êTPÈ´@GrÏÇ·€?jÇ´‰ŠÿsÀ¢+ 5ýçÔü €âWåÙS€VÀæÑÍ «+¼qà líƒGôÿ—€, +ìj€®ÙŠu­`ÿg)€Köä8ùÿÀYu­ÝÎñŸ4nåm€âÿÍðÿ<}ú÷¯¥€ÿ»üŽ.ƨ™ÀÑ•c±_KÄwáë೤ |•g~Øuû]^€¢œDžù~¯©=ͳ&p˵Ép4íŸìU#-‹À™6 4ol( gˆ ÎÚ6£ðÖ‰Ã'”Ô‚.rJËD¤ ñ×îI®2è0½(RW¨j]Æ•ÓÃÌI°Wˆq¥?äW®›jV5ŸÏÀ:5ç™9Z(•kØF mŒÇn[|"T,¬ÁÅSM¸-h2©Q'fS¥™©éê.åŽHB—u œ³Ä¹*úð§€$!m: Á€'Ô‹û> ¶œôÔ½c¾?¬†vºZ½^=Ò>µ¬5áº[¸&9%¬I"c‹](gNüÿ^Ö¿æ[öùqÆÁsµ‘SˆÛ²ÿ}¶†<âT®q1¥a+“ËAï¤ÜŽ­:2ã9wÚ H×"+ŠlÇ/pÍ­€% S–ýU5uX:rˆ«¶\¿~}‰|l©ÞÆŸ96r*ƒý‘w»~•<‚uyGY¡%û˜Ü»Jï½zêV˜òÂâ¿êuNJ[äŰÆÈ5¿ÖìG Ô4·JÉMÚ#{ÖrÇ7JÕõtËe’—‘ïÁÃ5O˜¡M–r··épK c<ÉèWèÉQC&@¹+k†êÉÖ¬™gôš¢s,¨}*a:ìÓ¼TlgÖL¾Ôh‰½]„kgQ"Q(6š0*¹vk‡ÎV(˜ûþÙ«¿oð?ˆ.vØë¾, 0dV@Ydnù~då§‘úù Gj "øóꯠÿ.ÔªGþÜqà‡~"æoc¿Ðïb1kG„ðð BpÀÃûÕÏ+]ï­°íþÇGŸ£2P„ž{ì¾ß…¼TüþépÏAéÝ'¡ß°˜…Ò à³ûw>¼ÿ1EzÙ‘5€eºÿ ÅÛ%è à8ìj5€Ðb&ÀãÇ7/œ:ràà•++™ `]ao¹ÚÿöõŸó­ ~©à¿~šŒtàÿÅ W/AÂ>JÀåË—®½ÿ/ßGñøÊaš¤ñè¦õÌÕë(_‰ÿOŠ¡¿‰øâÿÒ4Àv@úVV ¼†æ@ñ: @Y“BlÙ [6EÌ¾Æ  ¸päÙ´)ÝwáýQíò^"/¡ˆõ©¯|Ö?E^ ©PÈNö»'|F{q“Å‘Z±|J +Q"2ÂG¯«Ù¶‚aXœCêÙ°§œ÷ªˆz€‚¡Í?[¸žT£/š~¡Ý4­ +1…ëº?Df×°&ž˜ &+(ïPÿHHã%>ERÚ¬(á;)qW–„Sí/r»‘b"ŽÜAtÜŒÈ :Ú ²´ÌJþ” 9wÀ|€ec)ñ;Œù«$+;ÃÁ°ö×)¹x°¯àÝÈ > +¡?êm }pÊþ àĸøÖ¿Zò¯WOîøŸ›ÿFùãé%X‰·º¤d‰ª]uœ£._ANî*Xç ÅŽžÐu²è vm@g©¹VMZF¿3thy‰…£4ÑÑ\ÉÆ?ê|…„ΔQEYúÖ¨h>)‰¸“¦®–g O(‘šWjÎ…]dÑ9ŠÕ„t©À¢/ˆ¯s¨s_ò"Vv}\ÉGþÓ ®£¸`4mˆ¸¢lØåÂ1a|…m`Z7.»Ï?ÊGÝdn‰¡Ä~ØçD+­§Ž‡€e›/@LÃsU„¾w“fWÝÅÚVs Ô! +}"£õ£aÌf¥UµŽ„<‚É +;óŸÙˆ@*6vK­d¬u6¬FÏÈcŠ"U£t8.xJijB‘#?h[Ó™âÈ\Ù÷æ@ßýýüÓ¬xìø)ûýÏŸ7Ê"òWŽœd–E¥€?ò^™Ò«ÓÍ«¿æ_!ÏFxkÇ ÀWHÝ- Ý»÷áG*÷Þ[_—õ¹{zÛÀМ åZ;”N­Iþ‰ö Û¿|ʨÀlï•n~·Ñûfþ?}øŸ>{àB@j×Móü‡ù¿ü™“#œø•Žýÿœ‹à[n^üÙÊñ¿¼ôçS\º_Šºvö̹hÔSépçÙx}ãÿåkW¯\»‚ùÿ>‰|œWଵ}íæ­Ç_ýýÓÿûï_õ±È 'õ(¤‰c¡™_D„s‹„&!»Ô ̦SìE%_šßë,Æð?|HÈsô[6jˆvB\·—¦¦ØGî8l³c~ÃØ¶ð•Løv¿6+ó¿ß'£äf›k؈\ƒ\'àÛ4äúvVÍáî¼#ö½œ˜ú®©Ž8­0b*J†)È¢ÑVí¨(–»¼'™"BÙ °…Öz2J":€*@K‡t‹ wt²b¢%ÝqW˵DVaT’kóœñ ¤Ì‘vT ±à;­°bÎžÄ Ì‹T‚ýHŒðÌòL÷gÒÍô¨ËNº;ô4S¬4K-–u·3¨gÔ%7s.Ó4ëa\2¡¬Ù7 6'@àdàêUSàG¥0Ô;¤Z1žDÊÂJ¥e`‰ +RS@EÁAOÒj§³»jƒ•h#´À¸ëصëˆS šQê-¿Ù·5Sek:î éÿá¬îê…¨Ó•Ó¬I¥,¸ÂnÕµYÇ—±Ö2妚̈؉¯Ô9¨ŸäPY(½N’ ´ë¯ú¯úæç¬Í=»“Š…ºwï·¾àç^ñÌ€r)Awz|a€ø,\2ø«$˜ó]þÌ7¾xÿ„Áˆçc¡^”çêgŸ=tIÂE¼…ƒW5€òÏ?~õˆÿ™[1Çÿ¢äûèʰ?£,uÀä=ææÔ©SjjY”ôëU»8¶Ïž+gËŠ€—\À5€®¼?ïÿOO?ÿ·n\×;à4€GUEþ¾]aî hÏHí©e){«¶ þ¢J®¾Vøž¤Ä‰ÔÉf§@*’¥læëá,{0!ûÎ¥ÇnRrIŒžxÀ ùÆ3Ž„Ñ%XÄ@ÀùÚL67n÷¤‡¶³ kâÿ¡ô8ùÀ‘ð¢Z-¢Olì ×{¾o™Ë§ýG¹“_-6á¶®TFMêT…t5€'HÁpÍeðÚ×$ƒºšëì‹6jãÛM ¥ã1‚,É©:+ä1Ç8‚žc„¸…¡@¥À(=Y@JO‹ÀW¶R«xçH6Ó2qrgÙ‰ç_l¶Ö¥,¢X¨7Ø’¯ÑŒ¶Jó¢J±ÕoǬ˜-øíéª ‰T9P§&c.¦o¶ Ìö~VÜêÇBó\tRm¡J°;l&Ý×Ѥ³$Ò 7@0'FªÆTO>w—r8<›—yŒ³£Y£”Ñ*²ÑÍ<¶’5•Y3Å3¦&Ûõu~¦ŠÇ­Ò¸**hBÔhM³5Ážh|]‡Ÿ)ºœ™ø_BäÅü”ŸT^fî6rv¿I(wL™+åEò®ìzòñæŸ¿è ‚‹°Šˆ×ø_]ñP3‹sO°?H¿üõlûÕ0° á¡e@é¸÷^ýÞÃO¢`Óïð´p|Eá#ÐXÿ{6d4¯ÐÃÏvÁýÿŸ~Âæ^™²ûZAvÕ<õð?}öñ‡wŠRðñÜÀ¥ö·iùËgþçÀ,ÜwQ@)û_¢œ]9ˆpð€ã틱Ýb®…ï<?Ã6%txÿ3}ó¹ùb/]¼pé +_ìðßÑ_=ÞÁéÌáÿúõ7Ñ2î …þ'ù,vž|EÐýŸ.€cñ¹§ñ_6-{þ1ÁáUþêsÀç_YV6¡¹°í@J¥• +Á9ÖŸÞñ€½˜)âgÊíbZ$¥2ÑÜ«ˆò\Þöÿ1uלõö¿¥&к"TD ¦R é2Õ¤!éöËHß}_.Ó‘/0hv-³ˆke`¥Ta×ÞRÎ*ù̘Q뉄U¹–Ìf¸'@ÑLV÷Ðñ’Ö–‡šè”˜ë®ýJ\…”HþR \‡Sdª@XŠ­àZÃÞšùcÏçíÿÛ‚:p¸ŒÇrˆ$ÁàĮ̈́Œ‡kUû-\9oÔ¾ØË~HTó¿à¿nÉ0·„þzŠmÙ ê]TI²œ$Xÿhš ’ÙÓ,4Œ&h1ÞÑ\2iäøâ@Š“J4ﯾW~h—ìcX‚Dèªè`À°\#G` 8Ï}D²MPg£áh„uº®NM]jWc-c›¢dY5éY$(Ý5JÀ–O Jo{Q¨J äœd)î-£@`H[V_Ä”x-PT1kÁU‡à)û4ØH\œvm  Ø9Q¿78]@ýÑöJƒ'gp…`~¦6I2‘?!:ÍJp挠±Û-ÐwÚHß­uʰksä1 ú8êã”(I.¹ã[¨ÊÀ®4ê€bL{¨«™*ÕïÄ­›! òi!rR"' ºj—–„ +x¯ûpÈKuT'Q*ô¿D[%ÁÿedTó_^1±ØÆÔÞgO0&õþƒùW.^=ÏæÂYÕ€2ÐÅìX=æŒï˜ @Ξ$àïD|¿íw‹Ànn€éÐýÝ¥;÷ïaÕß[ï½·4àÞݬû¡Ìü±ÿk¡ú˜»ü— þ*Å׿äÿçãW`{@Æ>D°!Ž…ÿ¼ðdhÁÇ­ð(;|3  …ÿe%ZxÔÑŽEYË(€Rþл1ú[üŸ¤&Ïž=ç’À`¿Ã/^º þ_ÕþÏôƒà;ÿܼy=tãÆüUÀèÿ3ŸÿñÕÿpó?¿r/@Ó=²r°à¿³ÔôÀ' + ü#Hüò“Mv–UÅGhÁªø^ñ€\|„Êgö¶#5ø÷ÃipÌÈÃ’†ïÛ5Z€¥@à]kçˆp˜¶¾Ð`ß[Ž*pV!Å2¬Ì"´<Â- î³"˵B»Ó³÷ò~ås T| ¦ƒnüÆÉ=‚5rÒ¸Y +KûRÁ¤´·@YÇ»Ìuô[åêL.*¾, —øic%R+cÑŒÊíq_™^zD`Ý1lJöå:êÇxb¯…Õ>a/ʃWRÛ®YÓ#ïÀ‹ÿ2jVÆ +ì' 6r^¬ÿðï ºMàv3êO§[ì*›fì°z0\H©§ØŸÕhÚl5õÖ •à MéÆ6¨3Ù(À\Iw5x¦u £áïGîuÈ’]ÿOÆâV(p^ëõN—äE~´ɼ-¬©ê. ¸ÒWª¤èGâ¯zƒ +g¿ã\”@ßKœµŠ¹n[#Þ¾{Av6%ß3”§Ù¬!­›¾(¢®Ö üa¡;~ÁІª6íÖUëÁI9R! j.¬¹´¦ m“$ƒªØdíÓû‹²b»!´ŠÒ\¦Uw ÐõyæIµòù¸¡•Œ1þ}j@c”†É•Œ¼ q†©¶¦Éx«ßԳʦü“ÙçU±öUÈ uÓïo±‡àRØ 9FÅAšP0´ZLÞɪv.ް(>Z?ä³'iìÇìwCÄ‹íöX½ýû µO9Èkí_¸põŠ“ÈÊ@;PÆÿ’2>;±>[k—Ïùà|ð~ùÛžá÷– À®ÝÒ¡»kKwî8Ѿõhrë¸{g—.€Åäÿnò_Ê€_¿ôq ]ÆÄð©³ø±Š@YM¨ø“‡ÿ鳇–W »8à÷öèð/߯Àþ‚þËô(o<ˆH­}Ô‘÷® Ê¶­dìfY³Éþý8é8çbúr®¸@üü×\èæ'ê¯òyüüwà ¨™(S»çM´˜ÿþÔJʈÇøç¹ì[ ü#HD@ȆO@!Îňe%@Ä›X¤ÈÝÒY²¸Ô}kÛ +sN{C8Ùy+‹œ­éF4\¡–çà¤âj41)ͳ@­Ö”cº«ê¤¢è+.Rü)Êd6b0L"u˜*>9§'×f©¤Ç œ¦$4gR0j"Üí"‡b¶ˆÊÉ9 \sÜØï¯Û£+‡^‡kd`Dµ^‹c©kªÝN·Ÿ>»CÊ8@ŸeÊèP&Iþt¸ZyúºoÌ™Náz™H|"#¤¡Ú"öYWò\ð¿Ûþ"XÁ+@¹œyÿ¯ÀZÊ'¬@°£Þ²Ý®_è#ôL΃T“FÇ1ð?£q6Õô‹)âLËZg1ˆã2ºSö¬ZrJVÎDOÅoÐ5Òîsl¬¡X%6=u„ÚתاR È ªúbJÀÕû:ʦ€ëúÇþ/Ë?º|¦ tÀQ4€Å+þ4N›Ð»«ï¦'àL&¦Gæ<È@­ÙpõR™ÓqMÿ³þéü¿ù+ýÿ:\ÕÉK{’IªüE €ƒ³2‹ðZóGSAtžò ¿;?‡È÷ž«"~® l9¨ïà¡yþxºy¼ .*ê¿úø1yxâ!äH´á`ôÀŽK”F9ÀÖÉî"Ýš/Z[;ñVÐÁL,Tvɲo½:ý¸""XÃÀ,â˜Ôû‘rhXÃY D^Ád#2ÝÊ ŸÒs‰kôƒpmbB…¡ZBÒ#aMP™¯ÌÆì$õôéëäÇ>R"‚¬qÈ“ +ñ‘ `f*ót5ÍxÓ÷õoƪaßÞ£d`€¨I‡O(­1+.ŒW#°_®*˺€Úœ¬«j÷•Û]㇤¼£9øŸ€°³Œÿ$`ÑⓌµi¼D)¸ÿ©5ƒƒç˜Ÿ§`í(@ß7˜°*ßgŒIX,~ Vð´ƒê`ñÃ`Ïæ^ËÍpTÕÒÐ85á¢5Ë- ²J¥HXY–Ÿ¯Ã³QX¤ŒånÈ¿Mo„V¦“ ×â³ ÙB j«¾ŒÐGÐàE0çF.yÙf㲘êF„Ö:Xë—Ö ÏIõ“[¨0j ¦8Œ‹ÇT«³KT°4 !~$¿% Lkq{4„©¡ìà (ÓTTIa!9ñ’3ø :;$?Ï, +åJ"iÖkÔfx¤]¡±¨ÝË—ÃlÔ Ad|gY{¦s«ùœzl(ðéÐÎJc0¡¢¢pSˆ »qÈ„øo¦&u—=sx¡˜#²ñ’8Úƒ,Ï—h ô¨ï¯¥ùî"ˆ^÷ýþ(ÚOi>bùŸñë}{ìõ+.ä‚3g˜˜þgšÒýOxÌÍ…Éÿò'æ?æ}Vù/ßÅ&—怷~"þóÛù-. ¬-Ým=½Å,€âh/ƒ»-/Žî¬ßyðëûÚûKÖ?¿ +ú†ƒ +èÇ À=Áÿ¬X޸ˣ.{»Ìù]8šÀ2-Þ  àè¼™5÷€ÿ£+*ÅäV þ¥3óÿ¸À}ª/ë:‚ÿWPòà¼ðÚÍ÷Pèðße€¯\½á€[e…‚[,Óã[~¡[lC(€ìé’(ëÌOÀ«XðãÉG±?æé[úD˜;”Ç>áJ­®% ;Šk¡”pi7Z-"âo]ðF××V¶ ]òŽ‘üÇè"YäÐZÆ´øÁ êu]ÇAEEPLDF†I{ÕtH¢( Äï`¢v•_„>ÿcìÙ˜› +¸²œ É52‹»`qYÛh=¹È£öPXmî3ZŒL(Y••FZìyPÈÛ}Ç‹–Ø4zçˆÚ;]Í* 5 1B²ßZÏträÉnüªÊx‡vx; í8¬ßbÓNð¡"Ö-kå·U`FeLd× áT7YfcGÝ—œ…v ÿþÝôDÿ¹4&{;ˆz±ó¹a¶ÿ¨ß ‘ê}ä°2À\ …Q5f~ƒy‰-©3™ +îSÍõT”ËuCI©:À»¯Š‚›õ~V££€˜ØùêjJæÊË—l@élN4î«ëÌ« ö=»a©‘¶‘ž«ù°úY=S‘î£ÚÈ<ÇÜ4Áév&Öz’³Õ§ˆˆÅ–’“4®fÀ¶Ôµõ¨Î–&εXMHH­Ú²uŒÝõôh½ýªëÅò7}µ0Œtž¾ÇÿKéÓÏœ˜ÝÀ}«@¿ÝY ÿüã% ìç·DÏ“`>@ð·«ýO—zVϼ[àõÔ»é8Wfœ=Ñ.€XÿW¯ÞÔø÷ý?‹5€þûï¿ÿþÕ_ù¢ û +þßt‘—>åïV’äÀg(`¦ßÿü]ÁþxŽ=4ø±ÐDÊKG@ùøå,B~[€xX‘3 O(Ïp5ƆPNäôçUM.†ÈŸ¸‘N%¦jc°‘#dˆ†—²,Xðÿ„øàË‹;v´¶O¦…@qÐ#I¹‚oÒ—™H­ððUcøG¾¶Œ++¯hÐH‘¦½ Öó%ÒW9ÝE°æ¼]žfÉPÜNºII$÷›¼Y'1‰´e›¬©äFY%0«ÜK—ˆâ±6À„ÉNY&¡s¸à¿€Cz,¥5­ºIìWrS†ðÒé ê2¡ôÖD+¤ÑÚDM!<‘§È(˜¶2!Â/ã¿lH 8³˜÷¿;üÛGí}?œ>"šj¦õ¬þ5E«T;$/ñ¢šz”ŸºN­P€”œèÞ û]•w + P*5åÔƒ”ÄÁ¸>V11Xÿ, ÷¨,뱪‡=Ù!¿ÉÜ8}ÍR7‚ecÕhì€û¨^Üë¦"4×ÁŠ Q€C…8< ¡ :Q-/ñŠ¢D¡÷2èññ…t+Ãç@¸ütn{@Hq„ŠDâŽ!·e@}©} +]Àa+~T}TeÔûœ%³¦ŠHÅ&'XÉÕ\$˜+².š†kN#“uh‰S™\c¿“ ”Ím,’0“TÖƒ!ƒ±Z‰ÈI–›4ºˆ&înÑ[œRvDq—óQó)Ë'Ú²èðq>áú1?[qG¤tX° Ncƒ±0SµÅ#êfŸË²Öv¢8²ÌËì¶#ÿ_Á’ON-M x©yo•`ç[:ÄH²éÑ™võŒìü:Âë&SSŠa:èõ8E¥ŠÌ‰.6›ö,íl®¤]lCâz¼ëâd°Î‰sä@_ +Çy¾nš…¡€uЇˆ5ÌȾ }„ÊBa +vÄVHΛHÜÂ,:sêÁqøV«Æ ð„z·†)n;ç”ðMúüɯz‹N~_—ed€,Ó"Vr•WLs» uZPý“Ä`SŒig$"Óí÷'“L$) έ%È÷’!ÝÕtÔÐhiü\ñU“¥ÐH—  ¡³Öåb VU]_xtDS©¨Ü¡&õ'èaØ¥—* +“sŒº@ÑlKÛ܃ñ9¦û e'ð^.{<ïõoÿæ÷̃ÍQz?y𑉀 ÆÙ¸ÿ+W¯8!À·œú³lb†Naæ/¹ü_þ´8¾)³*ø?×ò¸ò-þÀ]lz ¾uôoO@9È”=7øÛ*ë(’Ýíù”«»‘³Ûëíß²àWLÔ-àÃoÿs’m ø‹”¿ó3í0€v @Æè]Õ¥ß\¬¾èÌ£eífmíVÈ«€ß úƒÿ~ÄAU¢\¿~ýê5ˆ¿ùXÀ˜ÿÿû¯ÄÿÖp«·|ÝÓžDb¦¨ÐvøšÂì8  xØ™{ޝþc|¶ý‘ÓÃé‘A +–|½‚¬_x”.J,¤h` +À;Ñ©­h@Xj‚ד±¯—á©­xıJ¿tD”±™˜bÊMÀpM€ó2ÂíÐ`nmÍÉ|óA:iø ›h‚¤Á‰È7·÷Òï«­ c-Ôë?H Çcþ"’±ÎÛ0“ƒºÏ!2°dd:žjVIãÛ‹€Bmi²e¢ŠÕÖŒ67ÓŒó£RR­›òqU6òª„Fe­ ²ÙŽÀCk1<ñk‡Œ¶\]V‹ÍFô÷Ì{уN¤,¢ðC°ƒ4¸ Q ö¦ áZóªpMtåjþÚÈuŽ1÷äzPùnC È ;ðŸòÝ ÿsëOø'‰öÔ%MÖéG5æþü| ‰hñd‚À´ÍËw¾ç. +@¤jÎjò—Ïö·@è2¯ñøùúÉ5dþòX‚ÁQú³‰ò³_ºo§ ôéãA—NUf(-Ì +?‘"b–¢9›oÀœ ßhùBé×àê8Üã¦m­i®ÑÑêSÓhüƒìU3ê‚ßöjŒ€òä‘pp­™‰ üóŽ919Ñ%hÂ=p†pó,™Ç’åÀB"‡EEæ †a/sY!+Ô¸ïŸbTãð¿-YÅ·Jqʍ1™A ¡ÜA Xëœè9’¢‰ph­«L7rR0» Õ`¨ ’YãÞUPø„ñe ®Ý•kËÊ@p¡Š,•Jâ´¿¨VíÈÿ—ñ_@óvÉ¥~,‘—½%çìÈi<NËÏ´žÕƒ™&uå°Ê¦ž‘l¬ÊdýûòûÂ¸Í }Ê2àÈ!ñdΆö/ZB› áÒÉéZê»°N¸,I•†“ZÆ‹/JT§“Eyˆ†‹jÍR+ÃæAùÖ£î Q«uÓÛnRTÄjä8¡áNT¡iýnʺˆ_Aæ BÑÚUUÚ÷ ’|>\ç-úƒµ^½N‰:Ï”Šé mo8¬ü êÃÆÂèéÓpÝÇ2`¯rd?Qu·£{D7i@aÁÙ»$E ~<³qÞsÉ’CC!ÃÑ=R`fr$€8K°â"?dJ¦=q§4úùÎYò‡ÊŽ8¿mÿÇð%¾àˬäR€:ÿù¥ Œ¸zÆYÀÿ›<𦓲(P<XØ«+o¯¼³ºú§ í»ï¦ǵ€ ñ¿øÿÅ‘I~7E÷Þ\f¼ÿøæûÅJô}?¡]×oÌÑŸÝùcGèOõGˆFÜÙž  +3!où±@Ûø¥ÊuâŠ@‰ 0ä/—”ûE@fø¼òçB!PsÒÓÚëiœäÁB šG¼SG×窉Ԉ‘ƒz]#ÅE”ríûÊ:ÀY(ô–ˆðÎ æálÜ=D÷°-ÄÙhôÑÔEàŒˆš8 ‘£¯¥édVk¥ÊÜ–¨1jƨ"O¸6o9H>áEb2Ëi»l#ÑÍ’˜£ oLG< ÈDìr3©+d˜—¸Ž¨SQPâ™ +¥¨‡¸ŒVlêHcªG™L‘kºT¤Í9ÕéÛ«Úõ×ÖNžh² )Ã!ËŠíþ Sõ„òƤ-k±ÕÂ,q®Iq+FèÖM`¡Ä— +¼XÒnvXÿ¯…Ë©½ðcháGr ¬LÇ“ô)[9ÇU2U¨ÿÈ®e‘­®› €GÙ‰O–4œù P¦„DQß%@nô‰Óà€/Ø5(†qX°Ó¥.væö c¢: P\Œ·¼¿X”™òõQ‘€ùR Ôl^kðƒóÂ}ðÔÀªÕm~»Zûº(ˆ¹Êлâb¦‰ GXÂf@-ÀPùm„Ó=ûÌ ßÄ—D ºìO©¸r‘ªg0ÿ7|Ò¹`¨mØjÈ“}Gåã^ïN˜9±^-'2“¼uþ´dV„]}<¶"š˜WTZ”¿OÅtÒïT®PC‰¢ÎƒA1ýD‹­©("gO´<šÁpå<ÎÙ´Èžý”½Å¿§Ú›ÒÿŸð…^:t¿•¦ûJêS?;sÆþÀ^óßõ€/\¼ª©*€p8¶º±/eù îs<àßÜÏ¿ÜùºsäÏç +GC,¾{¼Ø¥€ïß[_w>Oäì£ýj0ýk1`{%À92ï$ïá»üñ+}¡h |('$ÇdØaü°Àn9!O€¨/ÐÏ¿q´ðø—õ÷w¸âp €øß:0¸ß<¢ @ ÀßÕÕ·­èÝwƒýqãœS‰ke•ŸàÿÍ÷¡¿{W/¡ã]Š“ !·€kׯßàÔõ«¿b÷†?ÛHšIÁþB˳¢FŠþ/y$±ó‡RÛþ -¼J|üæÒ¢$aXú^ÄyƒQî“ 95Ï ë4›£ÝB]¾Y†ºÅÆjê´L’Ñ“m¡Ò2¬ËÃXœÞûè*.Fd#µV¹n+×ßCåTYæWÝÀ¡&r—iz(¿?îq=‰PºÿÃ&ß²kl“p"Þ7¯»'ì\OnëZÀ¼‰0N¦å•&mJ&ÜÉ›‹Ã€¤6kP¢&¾^×AÆ"ǽŒ¥$ÊãØª†ª¬š#­QÐXÐ*Ê>õuÖ +€aîåò«$°ät¬¸œ%©QˆÑ$P”5í´»Å¿ëžjOççÚÃùÝJØý'‡‘·ßè?ÞåÅ1Duà|^xLoÒÞnè#â¿·[B„—)˜_ÿË´ChÿÊ~¶BîKtïÞ‡€ùýûwÖ^-€‡/) w< œŽàº>zvÕ~ËÕeô_à<(÷¼mÞ°­<üø‹àþ² ØÏF7À¾ý¶ÿóÏ—OÐâ˜Ûÿz¾z|õlß1€¼ù¦í›ChלּðN€VÀ¹³ÎÿmNð4Ï èýï·ëðwõÊ¥¼$èâÅK¨€0¿JÈrƒÛüˆº¦Jùéÿ_Œ(.7òä^Ô†­ÕwÞy' þCÈ`‰Z/Àöº~1­¡éòº<ÀÆÂÉ%„´cí|òÑÊÓ +º[°:¾¬Äq +x¤…ÃÞ <ì×QB Åü£¼Ôÿkk½µÃ ŒR*Æ”²H‹‘Ã^+ËH¨ÊÆzü‰×¡ä•¯ìÑÚæT±¹ ,cß(cGÇk'K.Ø®=UG£”T¸=ð†ijÊ„ðzHP´rœp1ûhÞ¸6ãTðÙû1h ®ÉªDl" ¾"Í¢qÖ[ºBxÊÄ4€ô 8Ðy[¾LºS‡Ü:™¤Ï®µ£‰Yý³¢RB9[Ôš§Ét ÿå¬üݶþwâªÀÛ %ø/ÛC:FR¢ðÉžKù¢p™Æ8rŸìQë¾íÆ©MÎÙÙlªÝüCq +eJÐã‹ÒCÎÉNµîK'¸E“Søµ.±®»O4K›{ÀÝŠ(ÍßêV÷¥õÅôë-ñÔ× Ñ Œ $„‰« M|¤•Ó¬áÀ˜h¦‹jd#U‚qÈ9aÍͺöË&?êǼo›‚§b”`m÷!5Aƒ¤~á€ô@æÙ¡J—°zéÿ¡ö¿œÍ»Û´}äÅ:çÜOˆ,ÝorRßÙ3`Æ…«šûYзd ²`Þœ!hŽþκ^£ _úúÉW€_ŒâCoÙà9BÐíÿ륯xǵ€QúïÇQìØÙà»û}'ØG}±ÒA;DäW(`¾ƒ–ƘL"ã˹ÜAÔ¿ýä“÷rN;ß!‰° .à‰œŽ྿LÂô€Xÿdþ6 B€ép @æ: î¥ì%ñÿíwÞÿß9ê€âÿ?sŽŠ” +úëÇ÷+ _»ÊF%ãÿÀ¿/ ¼p ÀH÷ÖîӬ̨{Ûj€c–gÀOÔ€]<¡Ÿ׿7•¶¿DñŒùúPûØûmU€“­£ÀÀÍž ɉ¬Ž*ƒ²€ŸK»çŠáõªu𴦨ôûˆ¸èwN„+.ÜöØ€¤!Ü2$üø`÷úö +-&Sß 3©ÆYL™:„»#ñt°f÷¼ø¢hO×ËÓ= b X̓²žaÃ×S;0ñw]w¦Á&—šãS„pW¹%}ÖlÔÈ7àÇûéb6Ù¯§p Ž ÀzÕÂʹðïé~‡ì!àÿ¶)='Ÿ@Ir Àa<§²¥A7lp=!c±ûµñg(DãÍ 8 ¢Ö? #â•yõœ:‰üæ…«8¢…¡¼ñoaý¿þÓ$Ê÷GåFy(¿ Í&ÃÌ¢×ÌAGV”(·šÀ*uj,ª`”©,\ôOô–9š'¡Üò•;âÊPäÄ 'HiEÜG^Ínl~¹/¼eò_~àžØg냓- ó.÷ZpÖ~=V!-Ç,˳êªÎèÉ ![, ‘zRe ¥ª–uÑ î@}’³ŽÓă¿žñZoÍõ<‘_ô_‚—Ly´Î3£ªQ8E±`7{nÍ£‹pD¬è-œAòÝ>”—«¼NF†Â“L8Ér¤O€fcG=ÅÐE?¡°!´*ŠFeÈ’JGOÏÉ"RïM Q@T—J +*¥À­¡SµÖ–žŒá…ŠVì·‚SÑ»ÓKOpú£²Y:ni±³MÕEØï/! Ï®ú.GŽA鸠2 Àù³gO9ÌkcôÈ1Jÿ¤¸¢°'‰ò‚þ6þû[`î8°O°eô‡Í;È!yÀõŸcÔ@Ã{YˆÍÎ¥mCý~éר“âxÀÇÔ¡¥;¢rÄ`·C˂ڀ›„çD‹ô{‘øŸ™ÿ ûßñzŽÚðæƒEéŠýßzÞæwôí•·QÞ‰àÝ3gÀþsg/üeàÿ҅˾øÆ5Àÿêµï¿ÿþÍk7o^ÍJÀâÿ¥Ëšÿ¾0P€.¯ÜÜU0ú%è/.æ³ò·s€…`õg«?ûÙŸA¿8{–ïœþ,˜ºåÝIñ Õ5N" øÎ^Q„qÃed]g·gOú´AE`±¤AYLÜé SÉ@\åqæ²#µ° ºŠ­“ ,ø/ÚuTô ì:Jfm‚!(4Ø"ÄÔëƒ + +›ªþhðgG YEÒ¦šU=_Tª-"ûü(WÄå)\cüËl†®ÑFÓY¿;(¯¨…G j|{³­Ž:EØ$»B‰KYÄî-Sd¢&}ìOd“,°IÖFjEÚg`šzƒ«UŸP"yɨ3¡ýïR¥ àD—ÚtÊPU¡°Þ"݉q)·HQ®‹ãA®É¢f æ•\'œU£x¦lµûª‹yÿßÿT¶?’"˜…ãX£ZM´¼‹éºè Ò&„¤°Sºƒ)×DË`jö×”X˜N‹÷9] +ƒÞ†pchÁ40_²Ýs%÷K¿;›®Nowùó}@S@×&h­[ý2WEjºVtM9‡ENióRG±åU¼ cØøQ[¹dë‡× âéWƒÝòå‹b€⎷!»Cìq±##™‘ׄ_˜…=ý&('{ޝOB .lq- w +êò#~Óçö’Bž1ÂÃaØõ!õdÃ8²GªÆŠ²(H*e6òf9aÿ"U9ÄÚ÷&ud7Ø_ wC»N‡Ï7ûɵßÔJÓý¥Uöƒ}þŽs0€«^@-p àé’‘Ð~zà›¹x7*@?Çõv'{9jñÛ/@»-˜¾“òâßxæ +À½2ö®PàøÓO¸¢±>Çéh€ÿk€O_¦OÚ>€¹ Ýùó>ï(ôiq +ö*²ÀAÎÌÏó×ýNr@qèîßáÈÉÇ·ìÐü³Ð‘•Å‚€Ò;ïˆýo£¨”‰€g/œÒ/]¾ðoÏ_þßH@Qæ®Ì*öÜùsR븎pëà?‹ÿ9I€ÿrtËÊúÁò¹`À«³øìîø™ïüÅ/~yñ—¿üå²`ýïJˆ®W)#…ý(MÚï+*€²ô@Ž`‰MF=`@`@BFçà‚¿®‹ŠØå”VÇÀ0N¿ÓiË1òTÑ„€i:à-‡à-ßg/xDc +@Fšô†3€k²!œÄ0„GÒE´¸XLÏáþ$ˆ®cò’‰p rÝØÅw¬l-b'Øsµÿ›Fi­FƒL®°¤oo:‡@ A@ãÅÐ ’?·Ó÷eD%›Õ÷0h&ÀõzÚ¯¾À9]8UK×ÑÒC`×ÁcÈeur +l8<‹Ìw;Øÿk‡ßšÏ8ì¢.BŠ5A‘ RÓgÚLšÂ36½_¸ßÖ1ƒœ-\Sp.9Geâ ¨0ˆÿóöûþCŽþZÁ-Á6ÿ¢vÀr =ª¹LcA]#‹£^w(ÔÛv̘ˆ 8Œ\ß?îo>pZ©ÃèZf7“‰" /þ +–ê8ä_ÄÍ,bÎ@üÅÌ· À<–³mƒ+G 3ævÓï®Áè_ŒWJM-C†9´6øZΖ¯ý2¶Zn†%ÿ ¡i+¿°M¦WGÁÿNÜ>I&`T,Š/ÔŸ7."*Ó}Ë!ü¶‹…Ëà€[¨žG2ö}˜)NøàP0 +ÂlQeÅû.ë6yv‰’z›<-QEÕh]$ú‘Üæ.$ðB~ˆÓÒ÷Ùv—ýVUãÛ È¤C,¥”â 2„ºäÛ‘]Ì8Ù±—&ë‹í?9Äz¿ Y þvŸ¿xõÂÕ‹|3úÏWË9{ÊaÿÁ"¿oTR8päõž¿ùŽÿ!€ÖЖï¡Å¶`ú2iÿ—.€ÞÂp¯t½C¿q”ê?¢·qz›‚÷¯P öËÔž*‘}Lš(-þ/G¼Ày‡ìêà/0¿LBÿãÇ_ú&@éI–þiÑŸ_^øû¶  ý¬<ü/zÞ^9 +ð¯¼ýöJëÐpî/ôË—µÿ/]¾z̀׮ܸzýúµ÷³Ð-Ìü›—ôþýÏŸ;{îÂETAÀý…ý²iñߨçп p‘=›€ÿÒ:Û€ŸýLàg/^üÅ/ÏþÒ¤yö,¿_^ü7ÿæúõëÿæß\T7héâň¯'ÛŽ€ö;›ÍD”… +€x°ÃÛ¹™§½É¸‰ áv6cPrŠHØÝ^³¥`ph:2…ÆÊm¥ÞÉa+¶–ºêͨ×ív#·íGÔÿ¨‹I xSít­©]0VÅá~ £^Ö +Àó¯¨s@>‡vwõ˜[¹¶O7p¨cÞ^ÊN«™I´S&››“ÛÊlB#—ÝÑi>MY‘(ÇõGp G·'ÓjÖ«¾âRÉü¿˜Œ*DBTåt° 9G˜ÏXöd)`о‚Cf¿p=d¾yjäz´¹¹y{ƒÀìW#»[£sׄc5,µ–QSðÿ%ëß\.HYoùIÂ?ú“§ÝÈD¢üqdc +­ÙbS …k Ë ¨Lâ:q(I2áÚwŒú`ei°o©P(àæT½T“ˆ(V"·pÕ°^Çøó±g¿×§”K ­>±Ùðixl`J ¤F P6û4H’‰`ãЯ?q!ba¹îÉŠê‘]r˳r£¡­»‡Èõnõiªwò °ív‹%^°™""VòD4I™{smÎ*D’#³Ëºo +„ŠvôEOquTÁÝ?†ÌÖ¬z92ÂÒ8ÔG(«ûÜÐsðŸÎƒT‚i’Ã~*Ã&šö‰¾æbS°Ý³*x`i° aó²øP´-D=È"E›ë×ÞU˜ÙWŠœÝgÿAæ[äÁü«¯\ÄDLw@–R58¥ÀG x'–ÞñUp¿5ñZcn +¢h/{órÀVüwàîT`}™îè( +@ï8Ä}¸ðd‰5€O¸²Pâù/ÿ{y€ûß‚ø/BŸúà{¾êçãî—€ÄÌF°W <[‚§AŒýeÊ4@gfr€æ=þ„6·2 ð¿¢`Þ PHü{õ•Õ£©k0”¸s—/_¾ô/1ë±ÿ¡«×o\ãžß|ôøö¿¾ÿ ÍXSD7ÚƒåWÜÿöÛ%’WÀ @€•þL8w„Ëz6êÈ­ `‚$[no¢œÁdÔ‹.i¨p‚r4c²“ m¸ÎÈÿ»KÖ:[æYéÝPÿùË_¢ýqdfàíPÛœäÏ‚“(kµ}‚–ÜNц•nÿAƒ’À•ÚñÞäm€9n-i~%§hG4·t‚/ÐJC{;kíà‚lmmâ`ª‚Ò#õ^^ÖØwu)ð •C5SOØ+Žbˆ!^š&g9 axpUíÝaËo†ûÛ)†â67K:$ê)yS{+©Ö¢Í åSH«EY^‰§eÒVãø}ÑV5‚ðlö1ù˜(YY„×'Q”$ƒ IäŒAÉ£J’A-’âºë_“˜?K†ú4)kÄÇ…£$ÔC[§­Öˆ¢´žOQÌ87Yí6ïý§8V÷ùƒÔn§e-€ W?nïæÿŸ:sæüÅ«/:°Ü &P†˜ów½ ÇnT`Ëÿ=ãGŠþª®Èçâ»Û€ƒ:`{  opXY]Q dß}÷Ý3g0éÏŸ»ð/.ý Ìÿ÷¯Þ¼~íÆ«¾ïŸßõó?øGÀ¿À¹vƒýÉQ×¥ÕïB@ЯÜdïz¼@tB…‹vÏu ŸùûÙÙ_œÅø¿xÜÿʳTΣÿ_ý›ÒªZr À^*€ctDPä;Ûj^€ú®DÚ­s· ŒNí<À¬†¸ vúÓ-]9m9WœÝØD»7qgh(èÅu øvó?³Êè‘9È›ˆ'6Š“Vè’§ +W1èï鬙Lg¨#}øhù´ŸÈõ+}V¸ödp› >Ë\¾)ù@06ˆ*X«3¶qŠ-=ÚtÁcËK€˜ï¾h;ͪg¨dqŒHî¸d­ÎÐÕæP›Pœz”ßÌ‹¾bÇàÖ¸†0»3d^7£Ïm S*NJÉ¥€õfhŠà2ãš+Ýþp2á^Ø3´ €]…¬Ã³æ\ËQÕLd:+ï;#°ßY‡Í»cNúNø§dmAÙó|Âü"AÓ(\¾A\'§¶3Ç~d&Sø-mX·¿'ÍÒa Ôs‡ŒçÅò^äʈÓ~ÑÄi€jF)Yõ‚í V|Lâ4z–.õ Y²]²aG¬˜ÙGIÀøµF°ìóA8Ńý®ŽnûvôÛnm0Î5;µy’™¢_˜º[㫦ºw¿ Ch€Ä¥ß!n ‚XþD“G#ÍŸì$;‹•“\Ã'¡Õý:Þü®Êa­ø÷ À!?ïM¦â"@ˆÀaËdøðš˜¹AfÄsió°±b½eö¨%{¨P¾–ŠÐožú£a&öDP•ãžâ9ÛZÂé}ûdÀ©³çϸ~Lþ—?´έžºx忣›7ø¹ÍŠ1ÁÚÅcv§Gb}àÞÍbg¡ð÷zàî+@Æôzw@Ö îNàAQ‚Õ÷?.<·Ó÷Vúeì/ŸPñhÞs°­”s‹ÿÑG€¼“€­óíÏ6ýþ±óÿæ–¿ôåüò—?XtèÈ€ÅÀ•£oþ‹E$ß€ÎæØ>ŒúkWoú +`(ªÚõ÷©/¿zŒý¯ù?'ðÿœC$ªìÖãǯVg‡ ¨¯¾ ôßÃð34É_ü«_\üå/ÕÀÿs¼ðË‚ÿÿîúuÌþ…ýñ_·ƒZeoi F Plä9ßj½€ ’e k#TËXðqÕï=nÀÒ<¼\ÝÀê>€ÂEîÛðÅDâRGa™i€¾ 0CºhÊ€â$U¢(G‰‰è„Ò©/ׯ§³i6˜ö[Í i0ò]~.AYXŠÔ‘MMgŸ@Ãp]²\ôJ]ƒß®_Š- 0#ŸÈE4Õ›c5pIÄÁ*M^‹$«¦–Œ9vxÇ9åd×±h±NØ…eTJÄ%˜…U ®Ñ®TäfÝ!„˜c©;ú«k/ÀšÃÖ:Xÿé@Èl` Òá 9 ÀU¸‘bˆHkžS-v’Äo!`ʵ6Ù‘kض­ÂÎU©ÿK½ÿ¢ôø/½ÿ|!wB µ Wž/Ÿrõ5T«ŒDГ¯ûȾêÉ¥‰ª“Ø€Jö X¦„$I]‰8…>ˆœ;vBI”Æ«‘›Ž€ÒœJãÔâ-ðÅ^›”íß­pYÌó´WÐîwÊ +-Ã+ĘØ,$*›°¹õrO)õ4Û€¶¹tÇ)jqÛ+\”Jºä–pXÂ]+XÞ¹!Œ¨µ€_ ÖQjL±ÔŽ×5þ%—…yWDDˆÃ ð4iç2{CJ`=w‚Ñ0M^’y¡*•¤Õ“ 6Ž{N̉äÁ3}Š‚óèbQEò!›äIwLY ¹³ÜRɪg)`Ø¢õÆÃfãú' dî¾”ÕàÖn;þ9(€S§ŽŸ½xóË'_ùùêË/Ÿ<…¾zúäùógÏùËú5{P‹ã{jÀBØ1pN-ê/Ѷ ÷ó»­à%<ްd¢¥ÿmØôÛ]𿘛4ùQ6æø_:ʵœšãÿ¶@ø/[•€eôu_È]{Z¿&ˆòÿ{Šÿ­à ìÿôÿnÞ9¶rìx–†N¥àÜùËþí%ûÿçèïïâ•«Yélj™ýÛ¿tœ»àË$W¼uëñ­—© ùú³0>æ³Ú·¶€WǬÆà“ÅpnÉðWñü…ÒPˆgl×§,°ëÛuâØòUSPTD +_ÍÌEu'€#‚Û„U+®¹jÛ´©º£&2Kyè£>q‰5»»I»FßWØððwœúg @Y¨×ó#2°e‰ ]-¦ u«™ýÇæ‹-€/>Rg³Ïó7jš¾»2îÿôIDATدQªÖÀ¾A3E?7D‚ üåÁ|-Ð3™6؇r¹„Ÿ£‘]ê8Š‚ýÒv a€Ý(ôp$¯:Ÿ(ÜŠR€ÐÓu@ 8F`VU(, ŠªbnÍš/ªi£MÛsÚ²^Á‹Ðq%€LŒÌJ€Ñ’²` ̹ÒZœšÔÓAEC÷1èÙäOFªQ³î›™Ë”x²Û„Ê@S ë½èØ0'|ZFH¼xþMµl^J¨Pý@ª“)i Çé|¬8½ÉàŠ˜á¨0{Q(J +³Mµ‡¬ëæ^/Ë.À* …X¸æ4/!šRȳ E§ø”éw!,å\[dDYæì®v–s…J½m–Å–%V9JáÆø‚Àœ€Wgp?ì¢Xª‰XõÅG Ôír²Íú“ö\´ÌË{Î䣂Mд4–[N!•‡<.É¡À«zàF,%)9„pÙÌqÒJôxØ2À–«9õ~"÷F±?ïãN4m1†Ø£jÌ& vÓb`‘#ãPK‹&‘}c£)90éyqÍ+ªÖǃ2×Y¦E¶óþý¦ÈÙ}¦¢ÿÿù³g.œ9ï+~œN~öÌ.^xôäéÿÙÓ'OŸ={ñõóOŸ?}ñâé³çÏQö¤Ç_CK€]4€õwP똿 Äo ŠGÀúVø¤…ê—(hÞ^&à÷1Ç7ðÍÿ¹Ño,­M©U²À}=åã•ü‰öÛ´íø=Ð_f|åKìúÏUw­7Ÿpà Cè˜{@þ•?ýÓ·wŽÁAôcòs¸°Ð +qù7ôÛ¿Püü(öGðBh [·×p9à7Þ,¯ +;æ«€VåU@…ÔÄõ N¼víê•+— +þ_Á¼¿Ž}ÿèæÍ€¨ç.\½tI!€2û/äR.¼‡`—wðÙÃ0pö—ç…þ]ÇÌÉ.W)Ò*Ò|‰æ‚½]ÀuF|1Xµö4Ð:ê——í¡¸f\œ›ÚÎ ú# rR÷0mú5Ê(œÎlݱ=ÆêI_~÷;ÑT] ðìÎü$QÌè íðGj€Ý[àºc”)­<BFHi,dm ’ÅQ¬Ô1¸,*CÚ÷ú#`"1Á5æxœ“ž¹ÐŰ®íê0´h5mªž!í®VH‰¶dÙÌSn¾s SkKG‚`mF1 *Êís¸V¨*ç +Á¸Õák@Y¯•²!¡ù7@JÀš:;…t"ÓÍ­,«-X_Õ¨Kf)íþH¦§³)•¤„KªbUGµEÃŒú‚]ëÍ2Œ>jªŽJÿ…ù¯hÞþý† ´1v¥Äìå×Âþü`û³DånIãOo†˜ >F€Æ˜Ö^YÒ1Óh}Ë<7¡)qI.ºðÓƒG~º¤¬¬üéêÊÂà ß ¤ÿËâ¸võò•Ò½ÀuLûGÜöøç:e@&þݼõÁ·>ˆñóƒü +ò/<;Ç@œÿlö\àŸ—1Îp% €2 `É  -í¥äÌ·ˆŸÓòäòÓ*áXŸNg#½ÍàISÎ>ÖtlïQÏñé bó¿ž ë¡&·3õDÌÒnV s\T–¹Í$@Á_±Ë³X1U„a\ú‘‡±0uáBQAdÈÓÂk%§Žg‹h)¼ns­D7ãðFÚý>™éÃËÖ‚ëÙ¤‹IŒàúE.R[ ,§bS¡þÌ€r¦¡–nÀÉIF!š+ì›ObSúòvݘⰦý"$ƒ{Qô FÎkÎÍ ñ|ر>¯‹A€ª4É¡FÙûÄ:ýú?’…ò"EîTíM®ÉÖ¬î£hâÃŒS%¨´­pMÉKÝAM¨'Á%=áMTÒþ[è—Ê•„þo³[~yû +í8]"¢ZuûZkiŠj’%5ÓŸRs©ìà¨êJÀÒ¨X–0NÅb†Jæ °Ë©ûñŒû§;Y*GTë®éà¶¶ØCmÕÀãh¼±F5…U·DÀ-m˜Â”ퟘ<嚬†(pNÝ&Z®«ªxõQí¶¨\ +˜SrAœÖ6|$,J5 +ÀdT”Ýœâ²8,X» â›4Ô=ÍB׈J‚X½æóâ%9ìY¼]•˜#•Ó} ?’Oùë­½e!‘¿’µ´È’A"2פØ[·ñ»¤ŠuC $³Ùã! $(e@Ý Õ+E“.Hg[ -‡- üS¡¥¤ÔnL.C,¬è¼`àŸ€ŠœÝgBTû:`É?}ÿ~NBàsõ­¯ž>{òüÙÓ¯¾zŠ +€ñ¯€Í‹ß¼†ô{€ïŸã†âþÿž0öî ѿðp  ÿŸ¾Ü ÍîŽnŒ¿ŒýåxçžæuÀ—ðYeh»  hèwóHö߃üþ¶ñúRð÷LΖ`sZ  À—0œ/xôø1ÐÉðnñ\8ïÊ~—¯ÿv8°à(À›7Û)€ÑæšÀ¥+¨Åpká(«ñ#îçâùB p À+ïØc€Ÿ­þ¬ŒøÅE´€WÆüÕ¿{y À¿ŽЛÖ!.½¬ÌÚwd, À#ñŠ€‰´u0 ë‚¿†eºiF˜Óf,œ®ˆ^L4dÙÉ Å$ó—Äù„ë“N‹DQ@ãÞI¯Î‘@;Ù2×pÝòÙâdc +vÿsóJiC„ÙÜߦÜÛ[¶i àÕó”†cûI®Œ7• ƒ ÅY~Ô¥£ûåI2åe)Â3P!ÿþ´.aež}Š‘ ÙÚú¨…ʆ+>¡9Øù-’[Á]ÎÉ ±Ž7|q¤ÁŠ*f…Øà‚ÓZ¨>ñ9$IZƒ!­¯;¬†v#xÅ:‚ÿv]=ç‡ ˆ•#X3ÆF« º½u MÒæ;>;>0ÐiõƒJ^,ôÄâe¹„Sôº0ŽI­Ÿ½ÑŸÅiža£ãž7ÛÛZÉm3aŠrClþÖ‚çiy󇿱7CZOHC}þæñ¤i º'T©ˆÓ*7œûKOº^‘¯,÷•ì`ÝoRX;Û_£?}ÿÂ?öÿ¤7¢}õÂ#>}Ïý¯ãú÷ÿ›xûw¥Çw!Œ~ ÿ€¿æÐà€ +À¶ À`Ù~ߦ¼%èeâü§„õÊŸ ýzô·»Züoßú›ù¯:<œC»>o€“ÿã(zÁÜÐzthÐoûÙßý·ÿöàÎ{ëwîüúÃ{Áÿ½Û€Ì8—\ºz©íÐþÀÍG×·gž‹YÀ;@ã_Ûß±þZ$_‚þâ(,doþ.U÷ +-y–fü«ï5 @‘\íH€I‹¥…æó± ÅjEï·ŸR£m4[ô%ä¿nÐ +n`XÄS¤uˆ”‡®kweÿ¤,(ƒ:'ÒNÛf¨÷Zg’WÁ?]¡öuM$¡¢N,]# œÁ)!HS;®0¿ˆ îŒÿ9Û¡Â5Ljòw;Ìm!å,I¥$ºwìøGÔ2c‘C;, ÎF#,ÚCÂÅuQJÞCz‰¾² ópâ†ùdÓ*®Pœ–’³’+ÇôF¾ìŽè¦SJ´” WKq›’šš™dZFÜp•mô³%®3žK2öWá¿´ò•Jëœ+¹«øù[ç¯|wüÜîèð]5Žü—20AsFþ†dÅ^ËO`¶>ØSÙŠDf¶~-… kÄܦVP5ŽÓÙϾwZ„ ¸ñMir‚/ eß0¦]½ â,-:oæÌ €N ªáÔ:0BSQaåtü嶸6—`$!ÈÜ9ó(ØË<Š9“‰-U$lü:x$”)sëFlZ\s%#ø0lå¾U˜ôOŸ.9#@î œJåãS&y –Ã}j¤•8e’<Ñ¢ÚXù«Ëç¨%KÛe|²cQH¹XW ¡žärrÆ#JXÝÆ!‹æ kSµÆS@ðºÈǾRäì~“]« >°ï8ÿ;ÅG `eå§Ç/ÞøêÙ³ŽD ûý–îÿo” É¯å?Ÿp耾€—?-èï â¸³ûqºU^íp³«û½,ÿÿŠà¥òç{~€vÁB;=p’½—hÛª—¶Ø›/”þøÏï÷Aÿ’ЧŸýíßÞ¿{ äÓ*sÀŽ1§â8¬cùë¸zùò•Ìñ@xy @¨x.-xì¿*€£^ñÌq´wD¢—Vê(”…J¸âøçXüÿêìE`‰.ˆÿÎ4¼…pñ_·„0Wz½ÉG‘å¡—T€ÅA €úŠÅQ¼¬ BòÔú†ó"^´ ÙC!AñB$òø¤s®JŠ „ÐN´‹í«ÜSô)‹p!•aw”ÿ",NF0(üé³GŠèŠ(üÂ.r—œÁ(Ÿ‰\ç@Ù™&×aR~é9P(™?¾13ÍŒ6Ìhƒ›‚sŠ¥È9䮊 —粫D•D`†©Ë²‚áÛ­Gƒq†}|o[^—x-¥s°A öŸðUÒÃk +KD¦%›qlÜ™›±à­"6-×ýµ,Ê"×%˜$–Jr­!FÀàSðßãïÿéû{ÁkË ¾Lsäùò\  ´ü'˜ו¶59Ò :˜KEQîRÞ¤Í 2Ï„tX¶¦Y¹k!äÈ[A&n"Q +€¨IŽ&{TŒMic\À²À{´ÐT_A +`gÍ‚÷Íô4Qi +ëî0n-u`ð¹ðq†|úýá:…Ë``*:ü™¹) +@Ýï®swšO¿¸ld$@Ýúç%ÿØAÑdP k¹/E½ôÍGèôÆÆ†Yb×ÛºÝÓ†õµÃ‡}ÒüšKJÏÖg6‰‹S.MáðJ*ƒÃåFDf, ‘¯ämÄo 2Eਣ0˜*J>‚¿´;žF‚Få°$ŠòJhï3µÂt_)¯ý5üxe ˆâ€#ǯÜ|òüÉ“'/ž>öý»Ï>]V¢ š-yÞÍæÌÙs¥ àêÕkz–gd ÀõÅß­³âÈ€[7}!èŸê +HôKÔ"¼ +@V&Äúç8à¯JpüÝ3¨¶ªeÀÏþù/Îþ€_Ú :çk°ÿÿÿzëÖ_¹p¡ëÿͶÐs–Ú‚Š_Ðö€…\DƳßê aë>@,(’ºÅúÞš7bU¯£ñp^1´Ddˆ:Jˆò„w/‚v‡ÊbÀŠF6EÒEÌ‘B=JJ`r{¤r2žLAÚÌî“ß±ï×lý¶\Ë·Üx;|©$¨œp+æ—=œæbRPÓH–-%Z’V¼ÞæÑ…úнrKL¯ÈK÷I†;}ç +ÖüŒ2aˆtÙ"~s†isóLÊ€v@*-Ü»!(†f§;M‘›òci§j…¿’eös-0_B±‰Ñ)ï§÷¾Ì2ã|a šÃ¿qšé²‘Jô¿MÜ "¢RÎùÍ÷¼eñkÏçSn°3/”²q…¦a T—ÁòCг8)6ƒÑD$¢¢”â>/%bÁ-Árƒ¤íLA +pb-‘ÇMÈHÅ¢|PæiÃ…0(,BP/kkQÆøgOà‡;`c¡†©ÑÉä³ãº-–ú+ÔBÿ‚€ðëß Þ"0ó/qsÙMô¸B#ðp›´é·?êÓðå—ÿ‡ËÍÀ÷D`k…HäÓÏþn§€p|åØŸîœ€Âö®+8\ºpù +è¿íÈ,€í1ó>èÒ9«Wcò2 bû£°£à%*¸®Þ½@v¨<]$gŽg Àœ¿´®9ú‡â¸þÿïŰMK +€*@1˜CE,Ï)B=ä ¼ü)€Ù™`Xº2P@B3åèöµ#‹ìöß‹†Prô«!7#b”#…4r Šû_qÀ%äEÄŸ²Ù4åBh­92V£çdwUÛ~³”¡öº°¼B8æšvkòš«@™bc¹¬ý£`f ‚…lù/™òš _€¨Õ%"ï\›ÍØ<Óåªq*FÑGPVT‡œž$n£÷„ds ¹)hk1Α딌…âöÄ í}R4˜¡1׺µ)y.˜hªÉ³€3оä9¿rm0Èÿ.Rôƒ’ݸÁK–¡×ÂÛ÷Ÿs-•›(‰'iŽñëlm'zƒÉè_ äÙr…kàÆ´ûœézc.°Ï5_½ì¤?âEÍlu$ލ¶*Â;9 ÷ƒ’ã ¥‘‚'²2õ‰Ã€c,bª >ƒR O›øÆÝIUϦÄ5¬»`´–ÒÃ(hç¨8Adi6j€6 {®•„碠øŠþ4… :›¤ÆO}Æ¡3'ÔºòS^çc#ц7¸úêõDÛß¾îœ>M†K±•)vNÇÈ÷ÑòfWA° ƒÈ›fƒ'µµÃNèëÖ>®r@úòUø¥ÎÕÅ©¥äÔè­ªÔ‡q§’L?_RÑEèÕVŽøXûÜO) jŠÒ‰­cy¤öúÀ>R™]µ¯4Ðãì©3Á}%3¿3àÉ)dýñ•#Ç/>úê9ôôÙó,´=ðÿøöñöïJ +ÌÝÉiÁxöË_¾/}Z°["—|`îxUÈ:»xU€æ+¿ª†Æ¸ +' +.KñxÃMAG“ïœv®Tð_ô] xÞåï÷FØÒÃß¾ê¸w½ííe€½5§p¾¬põÚÕ÷Û~Ç€¶`ç,€«—Ú1n9PÛ_=€£6úû^?p$/„n{Àÿ¬ tÅÀ•‹¬øÞè7ÊÅ•·ß.ZÀŸý™¾Š³g3àüý¾Õþ*Ÿ—€×zìíž‚iôH€[¡t |Š®«¼ã2`Ð:5,¸àíüE4‹4*ü·"ƒ“ˆØþ~^;´V<ÿŠH»!‚ÓÈ=W­ã^0u4¯u§;» ðÙ ôgLå€Л&¿µžç´\'€È(;"¼êÁDGgáZQ.׌'JÕw +j›'§še\±!Ë=‡Ôú#¸ÍàÚùBp +Û ü‰Ï`=‚×ÂÂì9m†5 þwÖ\!É¢9áÈõt4DtºA¯uõ[LL·±S`fa‚¾TO, ¹n™u=b3fÏ{§äÓÏ +€‡Ðþ½b–MÁ@¥ïŸkËd%ýp*x@®D+”“ØŽ!AvâØqo~ù°£²”9Ô¼o{CD!M¢“´ß»¨K”6Í1’Ãþa(ÙÞIRã ¡ifþÁ×,u +?oa¦=®uNÐOb¦<‰z¨oM³âáqõýjV:Žï³ï« ¥Xl¾ˆÓ`Ã4'ÑqºlJ’áÙ”|9ž{âɆO€yžRÈ£\â¢ÎZ—Óñi=—¶RL7hMEÓq€Ïµl½5®uxÀ2 û.s<ݪ³zZ; ¯ß?áÓGìwxÐØ'1/†)S*o>N–l“þ—- &wYs°ÔVT{;䃫jŒ\ÜÙ!¹•‹qYcûO­ôÜ_è÷—1€Åà +@‘ôÇV¢d€¨Ïž=×þ× ðí7*_·æþ.Ìïñ îûmä[6K¿ë–É1/y\¦¿\,x)þïåZL^¦ÏÀØW(¦? €Vxøiñ4äw{Rf Îßÿï¥[`))­úbæÇÔ—2ð±“ìpwî'xLV~ÌH$ó™€{;4;v¬ À×9^Šàš¯_@ “ÀYí(€øœðÁñÒ–háÙoÿÇ\:òæ‘7\¯èÍ#ŽX›/ÑÞX™¿ºàݼ¸à¬]ŽøßùÜúw·nܺžÏ­wÀ‡p‰0&D¾9)îÛÝ"â³£ ³… °¾t±ûÒ‘,H (ÚÏg\rù\‚£ÉFÀ ÁÀ *Ø'­°ˆ°ÔÓ-Æ­zëð‰CعEVõºÄÄ‹÷¾šVkƒsJvH ð&¾±ÅÔÞB÷È÷:­CÔ£ ï%`zZƒX® ®AFû<$Ø×ÒŒ7›jMƒß š*rZ¼[r±‹,‘$€ÂVª(®Œ¦F:r¦½ñùŽ`.Z”™‘Qµ…öe)"¡ ©¯¨ìÚÓŒ`€¥c?j›±ØŽu¹ÖÃh$A&‘ZrM¹o6ƒÎ:§à::ŽéËÓxJ}‚4¨ÞFåm]¿ÿ|Ý䊹nûþsz‰ÂØ'@ÇéâÄM*€J†»éÚOi’å6Û;å[¨m(4]Y‚3¢EФ©'ÍÜÔŒÐâ&“± B{‡Áxz\ZûÆOÏñ?°%‘54‡qPÜSß¹0¢› ÷×Ð(ÙÉJŸ1œ”'™“)p2Ÿ j'u —‘ö@Ü´ø&ZâQ dÛÌ)&½gøUÕénßé¦3¾®ø0U=ž<ˆCí¦FAÊÍÓòbBEI˧f»ÊÝÎ‡Ž¯¢ü‡®/0iêVxïß;q8¹(ä½DH¼°;ð´u„éNúƒ¡ãcóœ’ã9µÍY-È> v’#™LÙ$B®ÓÞQõªÆÉ¹Íl:Æ*ÐÐjêûJ‘­ûL±"íú]Ð5€\hõ2þÈêÅGO^<{‚ùÿ Àþÿ¯Ÿ}ý"£ÿZ¨ßbèïþàµñpÀŽT¶;¨…ºeºk'@™èà¿¢|?€ÄÙOþæ?ÿͼó¿ý<ø›ówÐgå–¢ìô—K +ñ¨,<°ÿ=,çŠ'à!è^À=+?¤2e¾ÔÐHf>ü%@5>ûÛ¿ýôÁNÀ½ûÇÿtç:­àÂ…q©x®Ù `1 ë”wèüü/fd @¦þ«Àn›ÅñãzP/'Àü_9pÐe _Go¬äͅл*çìPø¯ü–é@yò–`Ù °÷]Aµ¡Ê¿vx¯ð„ÒÀ©h„Ñû[ƒ[ôÜÈ>úK^ Ì×§šÂQHX:Ñú.Ï4JúŒÌÕ]Xu*ñþS™¨·¿¤ Oö¼¤ÀƒˆxÇPxöìéó¬ÿÿY (#¾Ý›v˜ó;¢¾_Ús¯R uË”Y÷ç€(¿Ù¡h0 =ÿ7 òÇ‹Ïg-æï ß¶AÕ~CÔE>Y¬µ® ô2”ϸ‰À_û–¶ñÿ÷Žt&`Q²)øúõýßzþÛgÈô²pïCgß/¯PÆ8¶¯x.éPˆà¥uBK€ù,Íþbûgûx{ ß‚@ÿ–æ®ÿБƒotÉ‚×ÒÊÛ /À™?;{öâÅKׯ£f”aÛ¤À³·ƒvz”çEä°èØä4œ€ã †vÍÿ†/nÁEÌ•ÄC@:HÄmw•ƒÔzõpÈåÜll\D( 7eÀá5_„` ²&Y_&âW£! ŽÉ«P2]àÝ&¦°!¯ÝÞm$âx*Ì¥ù +r1ã@çÊO(yµ¯ËA|¦wÃKR_­{­FÝ¡dVï¾yö=€\ž  J)*qÙܵÝ%ªrQÞÎ`:ó­€j =›LîªLêI¥à]ëgÜ[®µ koÍ=ÓƒXYAx#Suº[Ȩã³åhLâ\1“ñí1\³W¸ÖªÖƒAI˜sû‹~`ép‡ç’ňƜ—J~ äù.}ÿ…àÇã'3.ƘyjÞéAˆÖ» pø5˜ä•`¸ ÄIkš—*Þ\ïÛA¾uSõ°˜ÑÇf ÍÎ\âˆ1£#“Ùl0¬gMMÔ*"—/îÙä›ÁÄ—* PÆ¡ ³»?hлkíâ“iIû„l‡/ò–²ñ̵3ÊEÈb§V óU<R©rÂŒäÆE¶f._1"gÝÞ k³· Gk#¬·èA±úØmúñµ?˜ÿöû¿yñâëoù?¼f@œü»ÿ +ü—¿=©Eºtçîû­ (KHÀ§¯í¶~ò7ÃŎùݨ¢üíðE#äÝ9Ž©ßî-ð¿üó÷1ؾ{@Y@÷Îÿ¾à›#ó¤ð·ûÙ×€û÷ÁÒêð̹í1™Û~y ÀÅùÀ—g´ï˜{g{Ó~»‘©¥ àÈOß<7€/*xó;ð òÞwÏ8 àŠGѹþÀâ{ u×*x„ôÚÝ ª"x0µå ˆâðIÀ7þØ€¨Ç _§J{ÈÏqÕCZ¨ãÑ@€²$ER)ìù'2Öm àÐ|•6d2ÄÄ榮y皪°”Åi*÷H®z:Áà\V“3fƒcõ¹Vm#\dyÁõX”cÃo¥&$©—˜]Íñ¦vs[ñ£ë(PKýZ¤%AË œ- +„ÊÏï(…ÉlÔUeg4Ȥ:—´hG ) y;Ñ, žª™ƒŠÐ‰C‡OP2‡uºŠQÕ&Å»+4p3yš)Ïp]Ê4ÊÊmázBqq“JW5—>œd<­`T­e湪Úf1AðonÊWJ5¨:™¿LÜ5g}¥úAŸ¡LêiUkA«ÆXeè@3?{Â!z‘¸Ü-«0ŽÇÜR¬R\~i9ª f̱-{½¾I5Q0 ¼ +Àˆ–8õ]ý±A?ø‚¦Ú8û-h¤výagmèjOj|:½I’û¸`*Å~šf:šM·T~ûؾãÈ’M²³–<†k­jN•ëQ‶ñ_¤Î)»à»ýÆ+‰!é5=_¶ATÉs5íUJ¥!ŸÁ%ΦŒ£mK%u Þ] ŠLÙ.lÙÃf!»Œ ª%÷Ú£7!Sê‡y`|ñg³…ÚšÙ…H,… <›°®«*ØŸ.+'¯E¬0ßŒì¬Ø—‰Ÿs•Ç«VV1š‘Ó¶£éV¿ÇàøØRbî7!ίž:uöL^tæüW°¯Iä§?=~áæ—Â†¼È4Ào¾ýúë`ûí·ÿ°'µ27zî/¨Eºt ¼ÿч H¹­˜Eÿ=<óöçBŸ<,ýŸé4x•Ê]þýæÞÜào>Ð+Ñà ,,CüÅ&øÏ^ëÝÏg®@¨_ýìxÎY%'’\öîÀßE¨vh÷î¿â8ã2NY °Œ¸¼= `·1¡2 `{ñ¿x‹ÿ­“h›VŽ=¶¢à8À£++è÷¦€#úêâ×ÑAǾ]úΜ± @”€ù÷€<%âœTŠà-D¿V!;(ç•‹•$.ßËà`ô×ãÉmÃxââ³ +¢9˜“ûuþc†¹)†™›ž“ˆ§§ àÐá·â7=¡0ÇDˆÂAÔÃz«´ª‡ ý‘cÝØÕØCìO>ÂØj~ç«÷ +O2¥ÌáX'±_—¾ž‚˜³š«;îÁöñ®Üï27FuÑÑ“°ƒ5¸¬T;¸N¬v *)´œ+h¼£"[£Ž+ +1‘Ÿ“¸2Ê8€É<™DÀ GÂ#êEe$e@qôÖZà°ó (£ âo®ª¡£üDoô)¥æ„jRô‡ëM‹‹¬%Ÿ„õÇ‚ìØEйpè8¡2ÁÓsÜâNh/m ð¿Gß?7yÒèMæ‡ý,Ë‘K1“ »C(_ôDIèJž €Uà±'& +UØh–¶8ò­*™«©;FALµ•6œ ´ÞòTõجª¾o•tÁj`’–^V»Šófý…ÚA"í®õ:•K5¨9Â2©Ù À¬T£^Œî.e_ƒ•ÆiêÚ À)7~aÎýí@ý©ž ‡4Ó-ZÖ¼«ªRÓúšò¾¢®ä]%w6£r¿H‰»œÇÄ9ćåÍj @CÔ0JFÀp°ÑW@Ïp¡OÙòWJšÍì÷zÕ èèêÒ.ݨ66Ï®ýgU½i6ÙlØ ê•Z4˜:¹J™Gÿàa™lÂ*Ïöô¤žxM{Û_j1z)â|µ,ìÀ³«|ÅÿÕ•#+Ž]¸ùÕÓ'¾è9øÿì…¾ýæxñ5›×Læ÷úøýNjqn'ݹ{·õ´ +€ [.~Á˽<™ÿ9±÷Éßø¿+-Â@K€OˈKZýQÄÿV˜ã~~?wôlwÄ^€¢8þïÃ?ü??tŠði<w] +pY¸sÿ•1gοpyî¸âˤí1×}`ëùOÀ|”Y¢?¿ù€£¾àoÇç´—•£âÿ\8ˆí0/*vÿµä”€–ÝwÿLàÒ%4€EX +€B<©²gNŸ—¼~C<—Êk/bi" 4‡Ûg(FðXÔ!Ô ‘<V¼)~xî@ +×]Žó"dãÍì¨ š&ˆ º>Ñé´ ´þaª+$Ú‰TEø6ÃŽ€ ˆo!Ó¾…²; êœ¼ ‘L!©hˆûŠþvè"6 ×Q[Dl°K¾ªy뤔Y¾. †ûæm¡”Dɬ(0•”ÝøÚÒøuàãxZ5lP QALÑ6Asô |½ÎITªÄùâÕ¡¥p.ë  áÇJ^¥&ßT#Ò#ÑhÄ&2À'©4(ÑR ª%fR–)%2÷ëdÃvÿf*?Iøß³ïߨ£ŽÒØ~È/Ù|qµ8¥”f‚÷{´&U7˜µÁÖ˜“òZO«îh°Žù‰—\¾(_! #™Rj›Q3ìÔÛÔt0àÇ”Ææ&ø 9ð|æê0ɯ¯vžÍ†Õç¾K`Z´›Î°×©‡ãÆÖå»ëúÑÉNk˜4}š#m`Š6(¢¾uÑme_Pÿhä»x¤Ö öX KQJ.ÉWÈØï:üí°ÃPÖØñ.§.f?öÊ'ïü-ëÿé ¢…ØñðàO<Âÿwô¼ñ†jÂÑÂqú ¨7ÝÌ¿”êŠ÷šH¡–¢´ ùÎS©1[È ¶´ù‘ßÎpÛØÌ8ä¡ŸŠ†z–½ “ƒÁ«‰±9nÄ, q`¶HÐØ °v¸³ÆŽ²S—®ìE2©ôõÜW[yq>vÄPI”Äy=ļº|(_Â5|À¿j‹k mÊ5jË‘“«V +ŒÂ¿Èƽ"—LÙÑ`H3‰ §X|Ó†êÞšîÕ¹Ô*°(Ä5c¬ž™c&úP9“7'ƒŠ‰#)ëz8è¬![…ñB9ßÑ¿Z¼£kvH(º»Ñž +œ P,Ѧ¼O_¯Y"ßrI†7ã˜Ôcõd +B!§LJ˜ÀµBÝj2€|…(®ðÿš¾2º€ÿAÔ­˜â‹ kxsˆíP §ØfNÈÄô'³U=ľttž<¢ª9ž=@ƒ0ÀJ—Â¥¢GM½…å þE¹PùÙmø†¿¡ÊÈ:æ3k짪+ÆÑ¬>É‚õÝ̾è>QÖú´Ëšy\¶Ÿ{Ã1´Z2ÎoƒpÕ‹–Ñ'fÖ€eµ'·Y£ù¥Æ ³’o‰6nC9T(#½«ÀÿR@fzjwÍ讼²K Ð2AÝìÙän“ñ-™Ð$óÝnÈ,ÕÅñd0¥í;0íÃx´%'ÔJ¢¢äGÝþÆjjŸ‡ÏjÅžn/éqÙ¦¨Þ"3óÑ㩦`†÷*¥¾Ô7gõh] ÏB + ÞwƒM©KâE5ïw²ˆÆæxs€Âs\ã$¼ï7!/÷Žg!~gÏ_@*Ûà‹€4ñV~ºr`åâÍ'Ï0ÿ} Ð ×ÖûÿÍ7øæë?|ó½h—¾ÿùï{Q‹ëKø¡´€o +@Þ=»<3Xö³Én ù;É+wïEØáþÇüOÏ>’—\0gæøÏßÃÖýïÇoKîÍ_>þ} ú;Hö>û»¿ûìáB€’aiy%ÀÖ·ú*€ù€Å,Ç8 @ziÀ|€¶ õ?ºË§¬ø?~tUß¿~ÿ7býûî¢ïpD8ýÁ… ] ºz=Ÿù÷@7bûU@äËcD +ÑèÒ‹Û½p öþvìD~c,[ ÝI|Ö:N5L1 *ÓÌPÒã‰mÆ wN¨¬­è8ÐþO=¸b¡ŽnýËØ † qcÔ+—*§_§§! ÃyÓ¬w:Å%Á©òš¹D cuHÃ5@lYÉŒ…ë1Ö0ʱŽAT®K¼hŸ™6+4~,¿ñ&@t¸ëªÄÈÏ(õƒ·¨=̺zHªÑ–†&…‘Ø ®fÒ!sêBðØC×9îX¡‡Þr ]ý±¥!8FÀŒ\uÑŠ´{¿rÂe:C((22ÞÜ´ @¨D¸ e³HY»äÚ®WbÑ«#Ohl6sÂm’%&Òsr™,7 PV Î?èçäšœJ%ÈA3™ú2Ô* Ù†%p œÔÕ°vN€ðª•èà;á…7q%rZÈòÔbõ%È( V”cQ¸”¹©ÀŸånÇ€@˜Ï˜³=´­h zµ&ãÙ ž¥*ì‹r4»rÿ¤oÔq MK—Jà*õÑëO&—Ë!^€9@UÊ6lB>e),OPÍöäÑó8 +@™`ì-qä‰ô§÷O ûͨ¶+ +@Õ*¨§‰.f·©UÓ<¦Ê›Ÿ÷+œ”Gý£K¨|ôOÓÆ\a¢7vs¼o¨Œêî¡6Íû¿êw‡èi6?¹îiºw÷P׳ñïþ蘃)9gcéXgèçÓ)šV—B³Â¨•’~¯¡¨S¯<Çüé³id¤O÷y®mr»ÏT zŸIƒN™œ€àÈ©¬X\2 ðÙógÏ¿þÚ€Îÿs +à‹¯£”ÿ»Ò®ÐŸ_ ßAwÚõÿ· äì‹ q·¬H⥀]hþ µ{»{ŒãNQL)í}Ž“Ž{ÁÿÂHëà—…€2* èÑ–:–ñ?þþZÈ_"2L2Ÿþm;àNÕ~¶µ€íu2àÒ…K—ß/+^ÚöÌÇÜpáh×(#æ³–PûSð_§Éd(ð¯p`å»F¨&¾}Sà»e5 )JÀ©(Øð°J‘@…Š + èŠlçQÔNÄ:4<±†ìÆŽVbÿ2 olNƘ•vZß› 6 V"F¡ 8Î*F8pZ—ÓßZóídQâg[ØCb +D +_÷Wœÿ؈`\¤Y&ÕxRcÉ`kuáZ,”kîÛíÉTOon¯z¼*3AÈ2|i§SÁD\¦: +l:g¼â:H“îÝþ¥PµLÝ‘‚bÓQ§¢`9Cå4IL»Û¶Ó8vÈ®p‘®Ù;q@ÿ¿½àìÆŽS8·í0OIfµ;}è¢áZîÂõX?·’wŒ¸QÕd„#5ªÒ“Ls‰ œ”=¤´-C6Mo©ïŸï‰¬œ1^wÁN2MÒjƒäŠ˜ýàÊæf·ÿ ¦<¨^BÖ ‡¤6Q—öëØÚ-AWŒhÏÔ-¥´ÁU<Ì´*«>ÊWºRˆÕÈ‘uö×Ó>bNgM¿!Ùn××S ãY¢ã zš»V¬ ö7°Ñ]ÁÑö5îw,7 +•tÒ7¸¶€Œ}ãÌBØÙû{I²zS2¹ÎAÑ4U¬……àˆ‚ÞÍ BGp°Ÿ­D¥r0ù]Ÿ£†¨ä¼ëý7›k'£PÒ¶—ï¢ZQb&z(#¾¨Â6ŒÄ]ÀƒÛí¡¦°ÿÿø;Í{ŒA]íÇ÷úØ7B} ShüèoÔn¿ï< +Ž”‚éªÅ-“ó|xîеìãÚïvß)ë¹cø«œ?{êì*z€öÿ*²~åÀÊùO\øwà7àÿ‹ß~ûÍ·_ÿᛯðßó·Û¯,ÿóT`n™Öï|¤ (Û ¿ƒ8í•2  ÃN‹ø;I ¿s§,ðñÂàM{™¨ Z`ÒæzxÏÉ‚-þ{,Ú/w”Y¿ßž þßá“ Áÿ?ü8ƒUîêxÏß’pO$†¢²9ó—ç/\p Àµ¼ p—1ô—<KïH'€Øï,-ü]>âyÿŸïýµù´Óÿô|—‘A0×|+¿ >"]ɲ¤ ƒ^òÀ„’7 \½(<°‚§ìfõ;êë`¯:ÈR¥3g2cOPÑ?j¢bÊ"¸¬ìl€µ¬Kî’¦'ip9 BQㆈ¼(ú´³Ò\vÀ6m7ð‡Üű(£È$­ùç”3QA”ãÐTup퀢d]¬E1 OF3léJä,c…¡ +á8FNU2¾ÀÛ£ïÕÄÌ6™(€½:˜ŽôÀZ,|ázlOwüÑ^òØs‘*‰®d·o¤L\s FHŠF`Ãè°2ª†ÃøÏ'öÂŽ£²êÑl×\—b 8ª\SÁ( (ñ[Ä–*ÀT¡ k¹œ¾ïÝ&ï°p­uÈF“êú4Õ‹ÜXË»+²ïäzoäBYy–‚ñ”ú£I|¥õªûSú”i 6Sêµv ºÙè4QœF?˜L11Q—Èð`<±o½jš g³û&'j4r|Æ5ý¡Û9DßZ§?ĸ&VÚåKN©¢jÐ]ëÀkFFEH«‡iª«šw%ù̎Ϙæ‰Ô3uì9‹àkþ `:¤¾—ñhöÓü©¨V¨fª„;}ú4Ñ€ÿ³Ûh% õá$ }ë¾'¾¾Ø‹:ó̸ܨÐÉÊ[ÀwHîH„â¯îêt«¡†ýÄùµ(«”;¥j•Ï¥3†´³ñáq·s MÄœ8”e€Þ;™N3È¢Qù¥9é7¿í†rDsS*&¬Žû><ÜÒ¾“òrß q|ê¸Ã²ÏŸÇú?sêl¦ó³òÓ#o_¸õô©¾(ß<×ðõ‹oUö$¡~ú^€ø¶“Ö×ïŠÄ*{x€c {WÐ]@ßßœrfï1*ü›’Ãñâ€8dK"ÁÿÖ È•¿¹ fÄ·]­ +¡äU@:D~¡¿àòëÁ€Òð^ô¯WèëwÞ{ï=>ÈuΞ;]éòûh;g¼f ÀÒ,€xþýè8~t÷—?+ïĉÿNY +ÐÉ@ÿËè¿WG@€Üü.øÿgEx…æ +€Ïdþy} çÔªs/€Kí ôŠüÏMSW¾çn¡TЄ¸ØÁŒu¦¥$E˜ØýÇÙÁl (mnrsd5R µ€pâbS±£¬S&º4L‚ÀJE=©x¬uÔ9e¿êE vNäºz,ŠAèºüu€ÈpðI¯å‚jÊæl³YW˜Æ¸"—õL³<ƒk£¾ÝÔ!m*Àê + ‚Òàˆ«Ênv¤º ìØ‚S ΦñD®¦rí$kèÐ~nÌ´É„{-añ?™G.S(Î~;| +Àáþ0¡ ’ë#èùn„ñcLzi©ÏI‹ßîZä讵§6Ù(2ÖSgÒ°shFÇ^ +©l-61,ûÜRß¿žïmýe·hÿåè×d*/¯a_®:dëOÿa&²s)ƒEh–à´sK-'ª@ áš4@;2ô¤Ðö´ÙÉ–žåÄ¡º‡^0Àº$s4tþ&£®˜† Ž"8¨66ÍØdÖ§@OsšÖ(ꢑV½ÎpÃØP”à?äjÇNt{1h zNôÉS¬Ü#,Ë–œ)>aYN ùêˆ÷\Ž£@ úCd®ÜÝïîf  k^ÿ‹À”â+ DÔons…x¶…ÊLãvŽÁdFs+Šñdƒ:ŸEŸàiIéfà74m}k¢?² €[tR¹ú±^¢‚[ÚëÒ›:Ñ Ïx´¹Œj©CD}>ñÙÊ&hm<){J‚ªgøihïÀ¾9¥ õ†úìxT}ªjCé²Ï»ß”×—•"’ÑήÿyЕ³¾zúìé³Ï¿v%ào¾yñõ·ß‚üß|û-šÀÞ´vä­·^þ-Ó¡P‹ »°Š ¾Ds ïT¥mÀ`ºËø.ƒüœ8W¾eŸ_joÀ{w¤+€ˆc²àƒö]b{ë@p8àœ«ìýÃéÇÛïØîˆ÷¿ÌxÜf±hÛZÀ‡÷³@€u0_@þWÙzô—pþ/Åõ+WŠà•w´+BK€2  € +9ù8`øËŸãÇßY=þvºŽÆµxÿýÿö¼ášx¦(¡Àþ6µ +ä3©¸IЙ{¦Žå% Ò–§?€Üô×zH;`}´9v( çbz)—nÏT²¦ž¯F±×œ/„”÷1µ¸®dŠñ”m§»–1x8ŽÉp2pz²IÉã4æÆ uºÒåyw<‰û1VÌâh¬à€Á™PÊߨÓÔËÚ¿™<gŠöH½iµfÄÞ)ÒÈ…f Úñœ•GþkÈ%åI1̰LÓ€x&£@y°-;Ð|)àÇ‘ºQWœ]®øÆ1Æ“†Œa(wŠý]kB&\ MŽ ×™w“f°ÃMÙ¶"ð_¬¸µþÓ`Z J€µµdBCîùaTÅ|'ÛdyÔ`ù£LíE·%¾Åcµ + „Kâò ryû”æ9©†"ˆXǽî`úƒØ¾°—FàH¶p¼±w…ÚOÛÀ#Šmas4@PçÐ4Žj€2Võº”«;ÉD½Rë¬9Þ—LO8tÅ ªt]†NØ•»B¦ç¿Í:³{ïãAþ¥.€v@Þ€ðë_Çéߺâ +ˆðáÇ?m=÷E}}w(Šè½w'èŸQ€ï:ðÒeß|Å•‹àûŒØ^ ‹óÕÿŒûóMEþ;N”®8òï à€JÀÞŠÀí<€ãyL¿»úghè-ö‡–€€gv|èwQ€,Â.|½x>É¢&+ 6ŒÇ“ÛBéx¦ýS 66ÎþIç5›çÞÄ]Ä‚ª€bÆp YŹé"Š`m­‹€øˆ<ŒXVÆc'ö¾VuV9cK«þÈžnÅŠpE¢ºƒër¹æ@cå?ߺ ¨ÁD‹Õ³é$þb¥Á–F5h°Y0Ö‰1;žmfÆ•>ŒQcâô„€ˆ jI‡¤ëAÇPISG)! Òs†]º5†k,©©]¸†´þQbÀŒ!lÛ"ý•¡s%;úÐC¾)¡x"µ¸ùJFöz 5¢—fà<5 ‡‡£fqhÍáΕ ÃÓ1òœÛÉuŠë ®Ýµb\[’&³Ô÷o5,Hô&bÀÿ»£±Xg?ŒÀ pH+¢D˜’:Ü-ˆÑm—é#õ"œó±m€¸äMøäÛc=&œ:ìØñ 5½Nµ‰Þ¹¹¡]´ÈªâƒÈN=öÈ@.ë!GSBï!2@ÞÖºÝt˜-I>SI"¯h?òç`»N›¶îLUö$3èž/ËÍÜïÓü¥ÈÒé2 –9ô­`BNVH§¾]Ím¸˜¶f[ñ¸`HªW*#(xh[èD`^ÙÓ=Oãð‰¤ †5Z¹j–ŒQì.×ÜA–Ἡ{½!m¨šÜžÑÈm!®:@ö›¤<“X×i@>dQÍÐ&fèK(j-ù²§N§r Û²«óÀ´çý÷üÓt¬´¯|Ñ+«@ØÿÇVWWŽX¹ðø«§Ï_<óE€Žøæë üöëo¾ùÚÍ^ôÏNîùù9ôÏNJþçkè­7`'Wç—wè.{/+íxdï¢ä ›|ËÇoþZÄßI\¸¿Þz>6ñ^à/€t3ˆúm(s?ïz°ØøùÍÃ|”÷¤»N*qÿ±ÿïÜù÷ùòû÷w~Í¿f` +!îÿ÷°ÿ×ËÑú¼ Ì@¸¤À§]`1 À1ó•—<΀Tn•% ¸ºúŽß—?«Øÿj+XÿYà k,÷þ¿Þ p0‹êPe‘ü÷]4ÏmÚV¤<… +®È˜ˆ'H @ÁŽh‹ÐÀàãY'Fƒéx:XCØóèbü–%ÄÕ&Ùë‚•ÁŒuäÎŒ ¬lM3ˆ›±²yÖùSÔ!q:½. +À[(žÅL$>H¨pB&aà ´´Yo "‹¦Z½Þt„HDl/¤÷Ñ5æ4Úk¹ìáz<â+q»Hk6›¦µÅü8°oì¤qrµ¹é@Cýl ,E¨êcX—}'F)ÅIa–¸r‰Õݱv¯ë!uè# ›\¹ü:–>â\¤½"¹Wéèv×ÊÛ×|p«lŽFÂ风RBéf¬…—\Q±Ô£¶Ð’ì æÀ2[­E3kNè0Iu'déûßÿFÆIPøG«¡lã÷FT®ý€J9®úSôž!8¡9Þ °9w;ãø½<µÑÓ©CÚ8í½4/ÃÐ8 ®8(b<è: À{Ô-•ÚêbÑÿÔQP@½pìÙÌÊŒ\éG]tÍÊàrÕ–¾.’h91QÓ2ÂúNA¦*¯ñïnˆeߤ‘·„v ˜{þœóá2 _i=äc[0 WùdyE¨ë0=¢ø$P¤Ô.O$:á„‹©N +§I±vè>%F)(˜ë¨T®æaËD{(2µù³‹E‡KŽÅ“‘rRa–iÃT“]ÕLßH4§8å„Y9"˜¶ÆI¢²¯†¼éP¢(púô1tµ}¥À•@dõÔÙwÑΟ=•¥Wí8~áæ“§€öÿ7šþØþß|‹.WÀôÏö$ñ_Bøó·Šàe +¢oæîÏ× Îß[ï½Àf_E Ubƒ—Kßáß’Hßî¶4?Üs À½VøMÒ>©æömÿ­ÀÞoø¶›|äÕõ€ Í]™ðefÿ¿.Ä¿» ¿Ÿï-<Ÿê YÏ(€ xïNõž»œ ŒÎWœ¿ àÊåË—¯.</ˆÍŽuýzn9Å;ÍÎO:‹Ð 1ÿ3àÈÁ#o¸ °ÿ]CèJ%žÐ»ñ,QVܦˆµìåñŽH‚¢ðcVUsÓô/ø ò"ú’XÌÚˆ:ÌgQó˜ ³sõA™Éd“§|c2剟L6¬m¡Æ©ëúXu¦jõ²éUÛÃyûº +€ØÄ‹LT ñ#|°œ¸gS§²ƒB1®BØF';}Àc´h÷‚ ðL(ET7åZ¨5·gñ n£žô;ÜÁ_‰ñxs6Ó¦J§ØÒµ/Ò5)„©:EÆ1 nNxílÈ€9qÝw·n:õÌ¡ùà·:Fˆg€í<¬cê{EìRDbeÞ´DóIY" ® +°Aj)]ê¡M!ƒ‰Œt«é©8ÿ¤ÉÌÇh<D€>\gж×€A0‚ŸEITØ^;úþ‘ä 2¢Ö‹ýÑÚ¦óÈ㼉0èVUOËÓ +ïMF·göp@º–Ë §_óÎ{}5°’VBL@3¼¢R‰+ÁPíW” .\¡º.ÑÄŠU¨ìë—‡¶¬ÊArèV6H®ë“¨\é'y¶3š­XùÉD=:mµ…åÀÞ’(ÀžƒÒз=hù#XÐJ9 uãð‰ÿ—€Ó„ôSNªø_<VgÒ¦Œ RU£) ê±A9"5aÛª¦Ü6ì@ÝQq8.íuÈjPìðì,€šªãñ¢YÍ~7³Wß!°AP®È·"BºiW0â¡p”ÞÒ×ïÍ]½µî Ým›ýisu?mvÿiåÈ?ÁgE°?uvU÷?ZÖ˜Næï+ço=yžuŸ=}ž‰ýûÃ?üÁu ÖïJ-ÌïFïñùù?ûùÉ(ÐŽ\&qu‰îÝ›{º·Pvxfá_ë|Wâ‚×J/@»ó鞀ûñ<4€ÜºäPÿ(Ÿû÷ϧµþýÞ€éhíÿ2 àñÿá,€?üpÑÀ¿»¿ÎçÃ;÷Ê À ÐÞÇüÏ×€ðh½ô¨ÃÍß àýË—.Ķß°s%@ÿÚYí:”a€n‰Ïüœ ²óSèøJ&êÿ_9ðÆ‘7ßüéA×øë_:xàÍ#.>ÕÆÔþIÔâs &Ü)Žòàù+L \hâq*@Tlž]{ ¾Ï67yP}Œ4a´éˆßš¾öRƒ '0¬ZŒ`+¬‘RÛN±¢ +€\ÓÑ­ÌdÛCš¹Îsñ‹LošºA¹¨ÅÒ~½õEó¹kꈧ?"­Ñzèi@a€iRóuÀ vï¨pôƒkØåÄæm‚É„šÌÀ‘ú€8:âÉiM€?2‚3ö¦W±™j±“2‡133MMz»&TPœ'µˆ6Gùëeh>¯:“é¦ÔlÞ‚kµ~Ïͤ©âÝtÏkû¤úUWË”’ `¯9ð0¸h5ħL@ºû~õ¿}³¦ ‰ÏÑLyhóÊ3+€df¨sp ލð¬Ó)ÉÑ%fê"{9‘oÃ(d ÚIA•Xÿ ì0iAëû™  b†êû55у¼€³ *Ò\ÒêâØÈD³Á˜§p…E3á˜"0÷©XBØí“Mp€| z¹š`ø¾Lý/Ú +€IÛ,\Ç®êè>´vBÕ„F5ô9 liÓTâ¤Ðkm¡‘pDrÒ:‘’¾.€NØð2ÿ}´R|ž°ªwè¯'ìö€DAþ<Ñßibã(Inî8­AüŸ5>Ê ø?3¹(œQÃô™pEêQÕØå á`08íÀFu𡹢&ËÍ Ãq¹Å+"·Žv£´œu<€±ýËGɆ>êÖ‡sÔ£íÙ’ˆCƒPÿ5íÈ5 +55}(.¥°1Û4›èÞVBåŸ‚ŠœÝw:^†"‰àjüe ÀO¬^|œè/ž9Ð1€ÿàjÀÿðM™ð·;é©ÞZ ü€ +ð“W5€€êZŸwÜ»£ –¸ +€ø¿ðè»ôÌßÿ²ë6{߈®ìæˆqÿã…@@|þß×ð/€¢DS¸oø¿ípàWÿÏý»Ð×.³TÊ€vûžÝQ8³ +@Ûpåª}{¾  Õœ0_À€¨–_C­€öxðHÞ ²ü?¨Î•y„(Ø… ÆwªóÐñ€îTµÏ84ÌdPg齺™®Ç–¶«¼™‘ƒæ?l‚’ Àá,€&Žž|,q€ØWñpŒU8"]œ\Ü];¼Öq!ÀþÚ!äagîÎ0GwÁõG³™k®7˜IZþ€‰h†‚eHÝ‘Üë$¹6“^¹,ªÚ‹/1Ê\kF!žÆSG.³?q`ƒQ‚@ÓRÖGá¤?LH3(N¦vµ+ð=qÈtDЊbl”ä5~ƒ©‹k²}íJ©)I¨ ×¥{żUuÝ9ÙzK÷1_H3´Ôƒ +€}.Ì.ò#Ñ£&(¿œîÄs_qƒ9\cã9 À± j=³Âµ~ 0¾Su¥G–ÂpT8—U[$½´Èi˜R£*ð¯E½„ÿi%Âɦðàö ÿmëù!d^½ÍŽžAÞ ©ßÃEzƒÛ¾&f½¸#èž¶HŸé*ðÕvÜ„áKûƒãþwiІ»º**Ü&¦ªqxÝúåbéÆòíB©̯bä –(Ýáp2pHï§Zëô|-.ñ$heI;E]UÕA=Ü௕ZŠqÓ–Ésþ§RMǶ|ãáÔÊŸ¬¬¼qÿ ø‚¿TʨøOõÜåæ +@TYu“s­Àä’#yÊÛ¢òˆÚþ¦„†°Õí;N솬Úá‚P3èweéLï'¬°LNÍ +À¨?b‹:\×Íïþ‹n¤•ÈŠ+y²{nA˜ÛÍl“gV?€ÑW‚òÌWÜC”£ÛÎŒVo#Zè¨ì—±@ËA5‘Îý,äç„côÏ*øÆ}ئ}gX›)Q‰£DQŠñ§}ÌêÕ3Ô4-w`Š éo¹v4ôt¼ øÉõít× +@ì±Ç~dT®QëŽþ]þ¾`$­zLìM;ÜÑô˜ÊtDAMœ0iàc€ý]O¹,×¢ÂÕN|äÜ º¿¹]Åè"&)ý`›³ËRÀk~œ×F<ÎÊí 6¶Ù[b#I/\GQk2ÇÞl4óÝ ÎÊŠ°Õ T ¢—}©erl¿…–$ØDJCþI‡ öS U:°£f8­Ë²4„´M +½Æe•,¯Ú7)YÅj6À™ê¹ +·#ÆAá¬'äô|X›´¨ºÛ«6i– U†ÙYbÄ«áj‹ÑÈL¯’«cAí'P‡å[¡Ø‘Ï}oa-÷‡ú¢`YÎ|¡\&>’L#N)Ø•AfÊz.á³ë“e!oF?&?[Þ7Vf÷mf§ôðпÁDZ=oвó*`TÁÿe .@W€ðh6û<øŸg.Ö½ìA§ÿûþ?Šït—ò§jc”Ó`ÔÀõ¨{âÐa²Di×µïaÄ£ø¸l ̺}\ƒšBk]zÖ–:¬¨2¡ÒàJgžVR!Ñ2d±žë;¼­Û‰2µó;(&Úƒ"`¿)Òr¿ÉåüY²€ý¬õzäø•ÇObý»QøÓÿëo}ÀØìEß¶X¿ ýœßºó–=/i¯ó¸*®öv¡e€Ówóƒ] +üÏw÷ÿPëÀð/ +À¶€ÿO?Ñáo÷~8ášß¢dã7‹1¾4 à÷®ÿó:ºÓvÌ=Xþ›v šÕ€ŒÐ•¯^ºvõý«—‹ `1 À1Y 0¸ `{À| øÿn†âïA«ï–#ÁîBo<¨àÍ7}'`ú½)A!n>6_P0.ÑÄH‚—UEö +"bBOÁ,›ŸEtÖ€â©ã6]éÎ[šÍ"©½é(ÀÒ +  q Rp•xšz¸¦ C®D'΀{lþÇO”én‡ÑÀàކŠÚjâÀ‚ŠÈ‘ˆÒ²Xø–÷+Nœ + &™†ÛrR®¾Ò]çCìßIÕ£¶Èý†]ýö*«5Lâ¸ÏÎ4†E[@|ÖLOŽ>ßâ6 •zÜ|1”Z¨â”‹ƒ€ÅY³¥Ó$“òùe‚X×qËu)q.yJî€,q-4Ž•’.èˆkC‡Ntìp@Öx„U«;Ã(Ñ7FÎ?'9—‚/ ;Àß.€’²§ +NÖ_Ìš™+ÿMòÕÑb³F‰£×ëç +űóT¹BŒ\¨esëßa„K€„âlFýBøëK&5²N‚>*oPR °¿>¨2¯¢4è;'CX‰ ®½éºZ˜ª)Dã,7t9rƒ-‹ ê“#—H›ÅjÔíT@C{vwÆBÏÐ!mµønô‡5õ1”Òá€ç ©CE©H9èÂ1sV áÜ—L×ÿ¾Ö“g4êúQíÓχ.ðøœÒà?Jn0 ŠÀÕ•ƒoX. üß ìzšŽ¦ÀÄ Ü*p’#Iëºõ8E‚zW¨ª ×ç£y$×@z¹ÖúWèWmÝ.ªû-kˆ:F¤èT—uÄQVwIŽg¢‡Z9&n{sÔz]ƒJ"A6ÖÈú`²é<"ó¡HA¥fŸ)Âr¿ ™‹T×íç¿äHÀ3yÀOW/ÝÒðâùó/ž}óõó.èz€ß|óÿðmëïß… +ØïA8÷¼´B´»ཹd~`W\÷ä«Ðÿ:àÁŸ¯ßwº_’PØéðzH‹óöýÏ¡?›|sPÈ;–ð?óÿ^Cw>¼÷ðãO>ûÛ%€ÎûÿãH@Žîܹ³zêÌ™ ¸tùZf\Yòì6 ô²àƒ[m Ø‹Î8P´¥ömº޼ùÓüÿWùÛÞT¤,¨U^q˜ËhYhOm«½Ö¥û¾™VÁ!ø°Ù´«±ÇάXÍãÑ&¸Sw& ©N=°gZ¯7„¨'S¨‘¦\Ç7†µú„»",ÐÂaׇODTByÕ8É"Y•(HÚ"A‘üd©Å7âÇ?Ùj¹¶Ã˜£íùÕD¨íw²³®½:ü‡Ùæ&9-cü7TK|Ñ0jÊ1¤‹¼©+‡- ç26}G¬›dÁ‘JÌB‚¢zS}ÀÍt +ÊfD~ÉKÄ+'3À)c±…‰ðLd7¦x Ú è+Óщ¤‡©>t¸ §¦%ð§Ћ¦@85A ”— V ª §}óêd:žÀµ~ Ž+—úEÙ*EHžËÈt Ä|ÞëÒFãl®Àt¡(†^(-Døý-JKðwË%k”}lIWû’Ô¨ô-¢`f“DÆ~4(™\†/‡ê#•AØd.}µÍµ`ìk—l 'm@Ý~Æîe5;R¡ÁÔ–Ÿen[¹}kàÐÙXºÞàÄÉŽ°Ê$UýHNÓ@˜~…%¾©6KÖáRUП`Ö¯8š8û5ôWÞñý,à €7T2òG@N½y®³Ü—×’’©”!˜Ýe •ѹ•1€©²”“I¹!€Ó À'É=T è6»kΰ—Û ß8:“â¤Ê|çñ ¡ö*WüDA ¨ÎžKûÚ\°FÝ1V5EZ´z +ê¯g ŽFÉ”*o·?ØÈs…‚Aü¥u2JcŸéÍ#ûÿY9†ýö˜ï»ÎŸ×Å€ËX¯Õ+ž>{öàw-àoÊÒ?ÎøúÛøæµcö¤ŸëÈ,€¹`‡ñïoo†6°ç_¡¹P€×€‚ÎËÄ_|ÛS;w¡ûwÑ3PHéÃ{¾¬” ÷ê⿎~wçj@ÊÑâàþÇó.€2 àõøÿ¡¯>È4À¼è^lþÀ¾€_²Ão @À_^ú·èàÿûöhÛ/¸ºX PàwÛÎ€æ—æÿj…Žt€7•¯¥7Û‰€’“vÃÿ( `‡ =ÇÃé6M ‡Ló/6p¤Än‡Põ1¢AK­mm6,.%ƒž€Ï1—€‡Aþ»ØÖØu­WIpF¼Ôð.@—u€N ŒÅlðlm-’Št3È*ÜèÅ×XC À8‡þ/Å{a?¦\kE÷zNĆë–4\¸Ø`ðê鯮?UÅ`"ל˜5›Íœ™ŽšßÍ0æ}Ï™ +Ó^O3xCÓ±,H< ÃÒhzz”eÕ—ÎD” +v s<Áš‚µ áq°$(&j¼EŽÍ=–“ãÿ C‡:„ÖâÚLì( ‚pÙé\Ù7Ô:÷U»êz‹1®õq;Åm£oXí…ë¼Z©åšpdc‹–_KäïeëßÉ ùÄüO¨ÿ“‰ùC¾Z|B“­Êrr::ÅGv5°v»Â³32ÐÂô,ÛeÂfO”îSä’¬ .8†€ ½Zª+öaÊk"Çîïqw rÔÓ~§î»ø¤@ŽºéH6b±[Іµ¦}ŒÃhz*Áõ\-íxDýæþ9Y=\[3\@ÿ@P;ž£xZ-@¯ž~~.s€*ðf;`q`G€€ƒ<ûo¼³Â_îÑS@DyÔyFN“·LH@¥Ò‘<çHò±’ÇÚžnê;g-ên×P¢y©RÜÔ´<@X]É/š%7£€ÛÄÀÏRIÙÉ¥xÔãÁ°?á£Bf¤»HÛ3T ÕlDvaJW&÷™R|ûM«ÇWÏø _?{3ïìꩼ heõâã'Ïž=}öüYF<ÿó. ¯ Ø¢ý.Ô‚ý.þ—Y?w% 2à æ2­»@°ôÎúú|È íˆ`7`ŽôK˜ÿì/¤£Aœ¿°‹à€rvõå?Ðjø[žð]ø_Þ耿Eع.ò.TÆ\ÎÛ[*ÀŽwô_¼ HEÀY‹uná_Gg^" ‚;³eåˆàÿú>€ƒ;]~ùV¡¥Ïe?¤ þº<‡’‡‚š&–¢z<£“ç\;Vܯ:k*ãͱýÞœmwÍþ)0ÀL@dÝ©ëöc?è!õM>';½51ÙÙÁhêúÆ»,ymˆ¢ pÝ^]È—°FŽ!<øö]åÆŒä…÷E€ upÍ.\Ão¦%?X¿s®Å¿Â5zÀtÜlÚ?nBíŒm !ŒiûÓ…˜É[NœŽ„ׯoõÆìö ÂZ5cÔ߀=KYpÒrèûŒ‘˜ŠÍ0¤ÈËÍ”ÓpT¶ºÜ:@ñ¨>Q^ó™’lý)] \x +–ɯà–ÿºè\°è ÄÏÃuOÏjáÚ8ÁßáîDaCà Y¬`¹FŽÛl”T ™Zø/f¿þjÿzW~-)õ(‹‚Bª‡U§[Mª…Êþñ_‡‰ý´jÚ!ÍtÐR€“ÑPü +|W-Vmå´ + +°R“{¬øedy‹@¿ç b€“a5tE\vŒ×^xKÈÃNa%›–¸‘ÙRÙÔYz°”Ú:F]ˆûV~÷­Ú—/œ ûñ|æ#0c"³GR€Èdîdq+•[j±ª‡Š']à£ê®Â*‹ó…[çRµ–ë^‡ ÖZÉ”¶Í‚ë¼!kN®Ñ$¸½iÖ•PÜŽD'99,Œ‚N€Ncg„!ˆ²7ÚäF°ß¤‹ÀòÑí½\9úYè0Gueh­ŒÄ(öyYI`®/[EÙ’%xr¹~…˜5mŠc ½ø§x(%”L7ÝÍ” +5äê{òU bÝ.ÊÚJë) +‚ñšØhó¶>‡*އ¨Lö_8n Œq‚¢«ÆD [ð»‹õ÷Áÿ—¬€Ú2ýAD*ÅC©¨éÓTJßžœ6)¸´#@¬Éú$Õïr¨Q +ʦ„uH#qNHû£Iô`ª—É"ÕRݹÁ«)íV礘ü§StÞIÇt:Õpˆ^±ÃPú }䪨Ð>Œo¼9Gç€øÊvé`õ€½àÍÆ§:^Âiæcôë&ˆ`ÿ?²ÀwNþIñeªoItŠhòSô‚³­­Å + J‹)‡àgœîvO{¢(3É—âö œÛBLŽ­ \wѧ26€ O'”µÕ£pð s¥ÂS3@Ìø|õÊÜMâìQ->L³ñhØGM"=[Ц¶'Ú54ð=ŒZÿ¾s¿)2r¿éXÙ­@ï¿¿³gV] Ù|dõ⣧Ͽ~Î÷ë߀þ_óâë?€ü_£¼n!€éw£²ÀŽ1 ë¿Àÿ®€Þ{÷ÄÑ÷ïü|É0WB"ó®¸^ÎzaqqÞ/°'Í€8À~12\ðÕ +ÄwÎ… @}ùÏ¥P{àa ÿ´ÿ:ÊJ€­ðwŸ=¸{·d•ÿ»P»_È“÷îœÖÁýWf¼2à\€t\Y¬€¾ƒŽÚíìøÒ*Ë®ùÎåߘ$pûüë?Xö”AÈ>¬E" R·½9ÃsqÄãÈ“ì0@ÏŠYêêšॖ„¢Ry‰"¯¤HDZ“˜XkåJìý“JK¨•Ξ” ÍÞŽtíuåN¿{S|ÑԭQ@®; Ùè9Ž;ž +-”êèÕ„É6\w:"nDJ®•m£È?…"l¨!oä`¤³².È 7üÿÙûß߸®3ߤ‚Ù×¢"Z¥7‘È\€9æ„) B0PjÒ,…'„Õ·d*®(ÄTQU,“íØŒ”}ªÕö½m˜vÝhî™3o¥-ôðÈç +p¿8s Ï wî?5ŸÏ³Ö.V‘¥_‰¥sô³«öï½ö³×Þ{}¿Ï³žµvƒdýG1‡6a¼{"û.C€¥võ–>6WeR”uìÄXo'‰GÖHíQv|0r “ +u<¨<=—¬e™*¬Ð0MÎ`{YniÀ†â” j€ÄÓåVs™®K9Í>–ü¡µê¨±gWÁ”ÌÙzkw Ú¢Ö­ +àZ›)lþCñÿýý ÿU|þ9ÓcŠzÙÿ»Ð`‚íÎ&ÏÈgµ¶!F°@õ¸Ã¬–H¬ +)ÏÏÎLφ +ó¦¸Y6ˆ¯¬é·¦5Ô­ˆ†•>})Ÿäì8ýÜô,gä£<*îyü½ˆ[#dŽë‹k W’`Þ‹€í¨£K÷b8oÞ‰Vñí'õh·k«‹øzDnì ÊëÀ®·€«âïB;I¿À¸çèânðo:‘¨Ip¦‰L"7øñ>…Æi1áÿÀ0ïštÉcŸ}7Á‰xÀbµïPÅÜ–˜JÊP4^ ?;ÍÛȫǑFn%ä—„Œüå>AÃMØÂtg ñ¿Œðv0ßÚ¬t¢jÍn˜9œÒÄZÒ­=q™²¦ô Ñ`T +^^H€¦à‹Ï¥µO>¿{ïvØþ÷DÆ_}õǯ¿ùæü“ƒíàþ­ü'à–aÀµÜÏ!À ðƒhzŸdéc.Ûÿ“k-x†Uý‘>ÓÀ‡rJ8@ðW=’àƒëÙ1þÁÂyGÀCäÚÛ©'@` +p°€ý­²ì·ˆ€Áçý_˜|p  ò‚O\’‰àùÈ!¤È¾ -nÃ# Lô ý-¿ƒÃFËÍø@ÎöÕ«,üèPý ZBn/,½Ò!±`Iœ×pv'VÅsÿá÷³4‡´æ§§±©<EÅ$Á-à#aK'}½ö‘sx ­¶Œ›±µfc¬æÄ•²Jj uAE[3´ö¬¡lˆxV‹Ç&LlF_À¾Ý†l]}k«‡-AÃ>v³YÈ^iý6Ø3{‘.xgn¡…~˜¥x²sîˆÿ3?•Dy,îcÒ'r)vÝÌœf³š±ü!‹IŠþ䘵«œˆ÷Ôè’”¶Cá­·ÞêB[°ò¼2´–¤G¢xBþ ü³Ü †!&.ú±õTW7‹¨° °E_¯ÙŒþŠee:vØÄ߯ô¢‹^éfo£¤2ø qýæ¦÷•,"sŒ\›yîy¤È1k¯9f~ÞÆx‚‘˜BÀ}H(4XvN굉Ä&¯–|u“€—N»žضž¾Â·<ÚóÖnatÂîì¾±¬·1ÃŽá8vRWÆQ6œ<ÁªT`¡³G¥A¢H9ÏBÜJ$·6@òĈLÞŒKc ¯ÏÌìïÓ¾zúê¤G¬Ÿ)ÏsG°Û{Ñ;ˆ®~Ù˜™m¶Ø.“)\É6>É­ÄáÖ.xKSC ~›ð>nŸ_Zêð“×à?G?ø/—S‰ødûMW®æ¦¿½v˜ƒ—joÞ¾s÷¶.?”(À½ÔàWèàÿ“¡þ°hþ‡`8`H‚dÀcÄÑä(À5Ís:8þ(ƒ½‹N“D½À0ì§yǶÏ;< ×^M ¥Ÿ ~$N§øS<ÉþĹ +±Àc€k×R @ôÈp¸€Â‚ @jŸ‡Ç“}C9ÎKý á¥Ï{zàñÔ~ðx˜Àh³ˆî–>ûwªcêú(kÛ[­« ºg% ±…HÀsŒº€ÒB”ò©ÈõåÎB)mñË&uc(ˆ)˜(@¬h”bÌ@8’dÙ¹CñO9VýÿÌV"I{QŸfsÉÊ¡ˆVkkÛ +öŠ~G‚L°µÙÖä–,xU”CΊ•úë™ëi<&‰’Ìó ~"N¹¹åiÍ‹ÔúÑS{b—0¥»®ìDËHr2A®_a3ë*}ví¶° A[£FžÅ€¡€HgI>ÌUŠQÊÚhÀ;’¤FBž™ù‰ê ÓÌlhª™g1kÞ Ù;”Íj‹­È.­cÙ9[¶§ú}¶è[Â\T¶þ‹à=žçü{£<éãˆ÷^T@ÛtŸÉ‹ù²f¿y-ö¼›ž·Ö;>`±JXݵ4>E‘ÞŠ€f;=a¨b7·ÑºÂØ4ŽÒ(?qF`ñtJì꺈zº*j¿}Je¨± ÃðhîO|Y?\^j†W&Ɇ¡ Í‹U÷„àCx„å ÑØÛ?™î +G éÙÀ²€‘‡”³#ÜzAáðDà¿ø`©'à1Œrïç€ÿC€¸©¬M#YÂã#€Œû +š>•äÜI@„x$ï‡÷4Â2|’G¥bACª¬Ò*‡·GžÀî~~(‚'££¥ô0§‹Ö×Ämx¢¿T">Y955ºQlh­@4ò:~jåÍßù1 »÷î~õÍW°€?Úà×Ö íÇI†ûñ­öcFŒÿ”£òjy!#é° zéA2¸‚Ìæc) + ‡ÞŠkî+ד&`ú®(€üà£ÂàòÄlZ?×–‹¥÷`î"¿€ܸñè@ +ýüõÅ¿þ뵋?ÿGc†=9 µ¨× ÿG\ø¶þ³ üI …Wùb¥`–}.p@2ÀkíË]È;© }›™ècïJ•,^@,ÝLÕß–Œ&ãñ¼Û¦À¾ªÆüµfæíWä,=—œ³¤h5­Ðz¥§Öü`§ùUæEÁiŠ A¨ÞŠÖÖÿs&»6 ¬í‹C„,Ñ.i-IèaÓŠ³|ÃZcû†ã¹µôǦÀ0„:ìJ9…Ô‚_¤ê2XØnÍG 4W°u+Ô·¶Õ¦­!ËØ3œ·c<¬0&ˆÉO(N{v‰jj”ž¬pÌOÝ®´1‡"ÀþçÍJax‘ZìjÄb‚¥ü£S\bŽT8¶‚I•ÄM¤ŠŽLÛ˜ÓM?£ +^njÀÀé·úA¶ºÝ@Kãíl+ÕH øÆÿñð¯N^Å㈙¿\3ä +wÝúåN+õPh#Ì”YÑV!îl K½•1™™žµkxdølÉBé·W³ôl ñåYÌWV{Œ¹·`“N bE@(âE·±ƒâÉÏ”7;›¶¯$¢=ô"ŠÒÂ,¸› _ë<ûç} ÝÈPZ32>0¶ê8Ö§© <ì•<ŒMaÂZ„H+˜ÍŠH86þ¡PZãtBE˜3ÿçô£ùô(§QËÏ §»HÖÌT6¹»¬wÑc¦ÌÀ.Ëø<ûmžqÞ›ˆÐáps:Õ´q×x‘ãqdC*x[nÓª8᮳;÷-å42“f, 8דý¥¢õÉP€S€=`±ÝEÀŠýLžZ±à]@4ü¿ÿÿøÇ¯¾úæëìî+êÇHŠ˜ýÁËCý  /GdÔ`«;dŸ„蛤óìæ§!‹Uc„-×_=àŽ°¹¡ç Ã?X@ý}$(@ÞQø‡Ë° xÈÃeåÇ?ùŸDþð­ÆÅä©­ôp«EŽL­GÆ[åGbCŸ+Q DògG¤ ‡(ÀV|&DÃÜríG¯<Ã;n‹Ý('Û¬MØÀÂŽ>ØÀ7‡¢™G ìö’_™õ]ß\зțÍûo1€‰*V—§ã䬰¢ÛB:ùtÞ +õÓlg·ˆÖ³vœ¡c¯„ÖªƒåqZ¿‚éÔ#*¸ãí9[Ïà°h‹3q½ÿZ›¤%‹\ ‚ÛœONŠÙ¾nvlìy ¨~’ /”šN÷û½€R+Dûh­Ò +åh¦=rÆ\6T¡Û~·]îl¶¬ åÔ¤"ˆÏDq)÷â–๳~–ÆðëD¢öÅ¢Ù˜@»øÍB8òð>Dòš øÅžþ[ ïH +çó8uq3…Ùo]@&’ì ÈðþP‰Ó>&¸öãµµ¿Fyâ[ûgŠVH~A¢8‚ñÏôØÑÉãβâSŽ}PÀ_êãÇŽ·Û€”\ÈØ'åCçk›K|q!Š\‹õ´ªg>ؼ~‡_ØKPj/-¼ùýV“²€CRD¼£ˆÚâ}g×f»×·‘¯)ò†ÃøË¾ûÚ¤ò¦ÅV + 0î9C¦gYçjѬàœ;µí$˜‡V*zˆ~óAtX¦(mÛÂqXƒÝïˆxTø4•ß-cÆ(°¾v­ö#f–Ìéºð·Yâ)…»^{+•˜ß ÐmiWó£dQŸí¯>q{ÚiCU¸h“‡ho»›½Ÿ!‰Ž $(F¥uÔ?K„¸éðR§ên„<Œr“$›˜Í=l©…ŽžÕÐ:²=´æêtˆ4»öµÆÅs^Û+dq²„Su¤UíþVè'ÌføÁS…óMòäñd^Àõ"¹çÑ +³ÃåyK}UžÇ£µ€ŠArBÐ|‹‡UÍ.‚(å¬H9„ˆ ÆûÏL?÷ìY?4™ Åçž=ôÈf8…h3ñÔq©»ÞHá½: ˆªVÒaP#A‚ª¬®#¬ Î0ðLÙÔÞ ýÙ;¼ü‡b<+¿01¤›6HB|£%‘’4-€ÐMm’R$åBèÉf@ œÁ>ÔÌüŽ÷4 +³ëGÞávÂ=3³ó?bõY3» 1†„WлÇ1"ãØ%ñ^5­aˆðØ63ëÛÌL<70ɶ7ÊZ/˜ËðÔÌò\<ѱ¹÷ä%¾ÎŠÙŸò+±”Bž9UûäöÛüîܶ  à÷¾þ*šþñvxÉPX1ã¾þ/Gd¤À;c<’€õ@j·N+ÿü˜83X3VH)ÇÈ”0^¿þ^ º˜ÎqÓC…½2¾?L¢'Àè (À£2€Ÿ\üëÛp\ @’Ô€ã" ? »þç%åÝô£é?˜ÎèØ‘‰ãGöE@^bÒ8r4>"t4ùrªC2DS!,@K˜`®Óéö0yçÃaí.lEĈN˜ÒmÊë(9¶RÛrÂ"öÀ»ÞáýO!Taéæ"š2šâƒÒv^—r%zÐô+m €@]iî +² ­˜›ÀÞï•ÒTËoË6~è¡áhìXâëõã뮼¡³ÕovÐZuà#†81V=@8à°ÑŸÇå„ãc@:ýý ¶>L2¾?T¢Àðs@!q±c×~ò“è ðQúH.øˆç{à;ÅëÊsÿÈñðø3“~€|¼Õãäȃý“cË„”ì°@|o2†ÄT¨”t{@©‹¼Ó­Áli»dáÄ„bÁ!¡^p§8Ü(>fõèYdlk/JCìÈ;Œ‚=噳Ó¬ ß‹nc´ÙLâ~úÓ'Àù@Š]ÌùrKÜEYŠ)ÖaØ'Ì®AZ,u°%Žò]å×iÏ“ +fwƒ_f!Ê„ +šwíwÈãBë°Î!&ÝÚ +vàiÁ§éÎz605!˜IÅ0?ãíz»68ЫNu&»[}Ρy]ÙŒ|„Îtô˜w$d‹ cduˆ%áôÙ¨е +/¨ü(ŠÓ(p•˜k¢Å©'j.ˆëÅôwäÉPæÐY§@/*Õ­ÔÆÑºËÁÁ°P©EBEã*ÿ3ú³#2 +ÿQêsî˜xŸ¹Ç#P¿y;ú©È@ìJÒ‡°Ë (—'òIHLƒqÜ­ŠMþ]ùà$}t’U´IŒmûyc( Œ®||`áÚ˜Ú¢¦Éã Þhˆ# ûµ»#ÂN¸w5ãµÃÝ*´kagL:EÎLÒoqáðØýŽIÓô=ÖÓÊË-ØnJã±ÍM&D¢Ñ uÉ“o¸Î‰Áô˜dj0Š9rNuU$bÜ5]Z¤ÂÉCi €—ÇY‚‰x&î +¹6›,çè »ðŽs£¬ä9eÙÝå,yœß›øÊï‘w;úlˆûÄmw2)ü±.žxÖs‹á ¾ýO\r‘ød%:²íð¿È/Wœ‚LM;µöëÏ¿ü£+à$˜÷ß|ßÌñ~ceçÕ øcdl+€Á?ãØ¨¼Z^x´Û“@¬Í›ø éi'‘V¼V"€-éçbžòƒSŒ€ûk­…wð,¦•dBòÏp•û²FüX@W>XvÞI=÷åI–wbÈâlòU™ é‚(ú.úÀH €’[ð øâqâ>¹Âÿ( Ïÿ™ aÿ³!x#ï+zÿù“ÐHÀHod’~ߺq1aêGmRU;ˆ0Ñ*ŽTÖŠºÚk)Æ®£3Ü/Î5@F~ìb”XñXs–âR€_[Õ›BEš•MK9?CÛnhÃâ0ÅÁ¦5èÈÆûY•õ8)K¤¬ãšY3€O”&Z7{>i ­ ‰÷ç, "°X bçe¬‡x9`ZS[tv±Ñ!“è…™æ§òr‹ËóØÌÄFÒX÷lÒã/èöº½ö§í­^¯ ПÐ%Ú}.ÀŠíð”y­ÖBefÓ¸CkC-S)Á¶™0a+Óš¨áà¶¥”!nz«u ˜ç»›ÒÅuF¼êz¿TÞ† °–Ön\ZCtØÄ×ö{»4ðËp¾¨¸ð£‚ý~þðßXë€ýÁb‡ÜQΣJ§9?VêßnÁ4ôè5ÙdK÷ªœIŸˆÀÂ9Â9èø˜v Iž”̈€hÃWŽç*ÄeŸmT¦–›~“’¬ÁúÌÛœWx1ÅR1V´Nð™^Øc»ÛsE )¬:x¼o±g:$`Ûµ&ãîšøü"ñA ¸€Bv¸EhOÞ`‰Dœ1Ñ ÐíÀ³kÙ>䈔ÝP€ýŸGá8É$ô(<f«H;y¼<5äˆ<µšè3˜ôå´OJðÿGW¥|Ü0î7*ºZfðVW½Y­™žLŽ›A^Ç­ôéöáõ6ø¼ã:_ +æ6?3ÛlíúD@ÓfŸô/Åé?Ùá”A€ÕE?¸Œíf±º¸œÚć^¦VüÀ=Ì[ú9€þ ÀƒšîÄ·j2â æÿÂp+À(È06*­YÀ{ î; å°aõa³ã=Îį˜EÒÁ`÷[þÚ« o »÷="þP×€kbßì0PGÀÃ8À/~q=†<)—Gr Àg€þg¿ùO ý ½ï/½Vôxà[™Ø@ЏxühªpæþCÔ`ôæyÛ´ô}oëHCþÝGüdp” +Ïp€QãÚd¯c(€ˆQPýÀÀ†¾cÀÁr}F J‹þ0ÔD^PÍü²A÷-4_d³Œ@Þ° +¥6×·‹™Àò˜Do­ÔÅ*ãË-h3=Ý1S¡í/´ÓÝìtÀQ‘>ü­nÔàƒä~ ÛyÃþVý20ÉPH%À¸,?ú'mI,F[Å="’Ä8Ñ +é TB[¿dó»¿4©\; fG†p¹6‡®èouËæçhÅgø8(mþA™º° JKNe¦°Š9Ý öƒg>êÕAÞÐD4,T +ÈÞq-%o!™iY ÍN§<£*Yk/¸ÖqÑ6Nd½aœž¹õ®Z«ºWÏ.]´ö™¶üô!`+>*ØÍøï€ÿ°Éýç5<é€G¸[™ùM@?ˆg‡;øwû2È€eÜínõ߯/àGxç¤óùüÎ]=wïfß~ôôÕÿxï¿tþý~­ß¯;,c[<Р@¤bß$‹Å’Bk¸¡áÂ[ËcáKÆýšºÀÞ,w "Ï –7½mÖÈm ÊóMÊò(ž¬PJ{Â[.–æ  /@þ&`éTIü‡¬¼ùù_ÜýBó@¾¹wÏ~¾zÀ×­ðSµñ±zIÀìóEL@pè[ù/‚½hhÍ.ìª72HPš%9ó@ú a¬I‡‘ë~x‡½Š”ãÜ.§©Ì€U¶ `æ€`_Üû ^ yR ./üMô”Àg¿ù|êï‰$QÝCò¨1¾`¼41~°¸K2õö~Æü”Ã[ã•ç¬çĘ÷f®×o„ðÎmòÃÁqˆñ‹€ð¾“Ÿà¿|þ ìgk,ÉÍêG5èp¯½o$€:Ýnç*Tr›G !»»ýöŒ—ñi·ëWšûh×ãÖ¢~·ÇÝ'G¡M3g?fX²XÁa–r­ðE=#>V­þßöI÷ Ùry9lÁ]|#™æ…ÂpÌz|Vh_‹ÈΊ´IDMÖˆiL +€à:Ò + ½ìÖÙ³‰Q$ÖDÒ) RˆäÜ{†@üÕKÏX²É›¿¸+'‚x|$Cìž´õŠN¸Fí<x7Àc$7‰H/ÌNZ䇿ɓž`b²tòD©ämçF }=‰(ðKn‘Ï_·½ËãÏûÂs„•»2³Û†úËY7µö­äó©ã°Î&4ŽR@à“3ý‰Ë)Á?‰1€‹ÖÀ "ðèñ©Ú›¿»sûöm›þßø ¯î}}ïÞýÿá(¾^︵3óüóÓß?þüw¾ã×C&ž}ö;aõ¾€öc$b‰ÅðÁ/®_O¼V’ Íù+f‘tø8¹~m§,°¡) æ:p4Ó°ýÓoŒ`XÜy ¿¸þ71 üýCCÚâ¶¿ñ+Ä\B&…ퟆa¼yÀõì´h|rñâ|0À ¼x“,ñ.‚×ÉüOps)ì/1€…Æ>¦â ë»m’)þ0N%: ü ɯB0½[°!Ë•.Å~³ LðRRHS¾GP[€@àhÈ%oP l|î +èG&ý%%ªÊûS €µ3Zróv ØÓ`Ó>¶‡¬Û@³Ê¦<%Œ€iaÒ$ÑnÐg•‘xMtRk¶¢Ï–Žn|kºÕ”Ck®Jê`E¼û{Q/ÑÖáLaæÀÊ>PË˜Ïæ:»¶ÚïbY +åe’騡`¸¼´N_#YTÂdÝkL¤Û郳XÒR“Ø“Œ¤°,«ApŒSMnÙE'à—«î,ÌÀ[Ìñ +€­/0k˜pm8wm¾ÒÂ@Ž=›W»–š"¢`š´F83Öv¯OÞlÙ{SRƒXïw­Ôuve dkw«ãÝf¿±ðŸ°ÿ üÛ+⣊,ª3]Þ„BÙί½ þËM¶Ññ*6b» þou§µèw·Úý·Ú»ÿçno~'mu¸«+¬øHôoïÎìò0¨²Õ*°#Òïô¤‚d¨ Ó¬Vã„WµrHâ/PŸ·s @ êÀPàk -Ë€ ²®g-o GšÇ舣AÐx×¼I5.¨3ìǰ:Κ <êal‰wœô#-„ã‚—ÕP¤ˆº¸«â0a¿–Ô#;sB’ç0ÜÛ”ÓÎ$©àäÉ`ñTlu··Áî ð×õÿ±ßñ6íö(&l‡"·ëqK|¬º»åÝ.|´ÒÞäÑݬT:ö_©'Ͼ7f*0Y˜ï_L`I´Ÿ³ûÿ\`€ >ÛRZiüî¶ýÝ»ýï}íÇî~õõƒ¾øÇÂö—8~ugö¹ç¦1øŸÿÐïðìDÆû þLœs’rTvŠ Àƒ邳ï2'`vò‹Àô•jYXØ!!çã´¤ë1¦‡:ƒ¸>!ÿ8À¾ø‰tD®îèŸs¢ QPXÿÃØ¿?(JðÁý$&ÀãH´0ò??Ñ!?ýËéý> ϰÅwÚêÿŽÃ%ŽæØä‘ãV/ää• êûR h€Í>)Œý¾“2¶2ÓìíF=¿&/ïrEG|OÏ6E·€¢ŸhgÜÝýGˆgç-?csáw4DEh‹ pÒ¾ê* •Ù™Ž½üýf‹˜'´ å–½â @@k¢Ù{àÐeNq² ÑÔÀÀèwv¥˜ëJž>£Nk¦Ýû••dì_´î­e%`Ÿ@ˆMB õ)Zs6; +r»8DõÞ3îxÉmP“kÃÀѸO;´:ïê\`£¦Ðv¿RîJOz=óK¾^‘B«ÙC{²fW›ÔºÛª6[å\Å6ú½Š#õõY§ßüüt8¢rd:ªÃÅ^ò ’DŽx ›R -çˆ@|q[­;íwYô¤d˜€¯{]ñ6èKáÖè¾íomïVfzî`‚=%³\bð„ñðŸ=±fþGâyàjIV¡CÅ~çm#iÏÏÜuXÙÖÖL¯£ñØÞâÁü?w¹…=®ˆ ÝÕ©ÓiÙ¤®£V¯‰aÙöþèˆÚ4Q¼QPnþ- @ø?sæôÉŒr ƒH›,\Þ¢„×¾G øAÓg4%Õ¢ºëiˆ¯Ç3ác«bµ|´Ž·ã}”D¬ÍWÏKR.ós ëp™E!ÙaÈ&á™´I þêbR)Y6ñk HRš"c‘f˜5l!!Tâ€Ð9+©@÷Ĥð_’x×’`3{|µ{ÿÈóàÖí’ýñÐ5)(ktoµwË¿ê¶6¹K˜ rƒ‚$±ð[º <ê¬|Â?o×Sss6XüžÍC–—a%°µöæçö|çÞÝ»_åüC?þÑæ€cå«oÂö €p@fŸ~zöûÏðÿ‡<ÏÃÿwÆöt=ºÿko\{€À*p¶€é$Þøû‚$À9çÓáã­mçHòˆÖ†ò‘?Ô€¸sÈ·IúaF\gÓ#ೡ!aþð¼û$ùì³?ûøŸÿyÌ·jCfÿ*=!– )Þ?}žÉs‰Üþ·úÚFôÀ¤M Žñöúqσmz,S€Š>€æ.ø)ÚaCAܱæ-¦eZàp°[¡L1›­!§ÀÆ ºXôënéü&qv-!ù«¢ÊfT_û®S‚D »ÝˆreûàCP‘bÃ/ãa‚ø –âý@–øßëRÖw*¨" écïbl¸(Ó°…ʶf:=Í •Fën­{»}J¦~­;a$Üðˆ—R1XOËÚâ1üß‘[°ó  ×ÑáØNT—ÀF[…ßÞÕ$www·Ëz¢ÉÆ[}Ý&à"¹B}À?ü*Ú°ü#¯;‰O¦O·šÀ~äBRgA~»J„€s®N¦sÇv”¦ßïnÚÑÛâ-‰Ö yÖ?YÖ[Í-1ÓÕ^q«³Eæuw·wûö¤4oö¬â!#¬/àÈñð€XSÀ¿æ¿“X~4i7§½ +Ê}4ÚÒ³ÏÜÖU2–üñ·ßÚîBúR€î[[rKi #ò«ÿ)LÛQ~.€~ó-K§iªéhò±Ôøp—Áp 9qRè=1YhÐÏÅÉ\_ÙáD&±ƒ}ðž<‘A4€T¬ÌÍæXÖ¿Ç +«'’ÓÀZDëYlM)œpÓ‰ðÙC1NfE^ôŒŽ4•é|.²ŽôKšà)iÉf¤»àjç¤#Š ð‘Jº]UØÕÒ€Ã$žÙ”Xë~Îî+Â"™Æ•H;¼ðÿg^Ø÷Àc“€çpUÀ íU¶ZO­‘áOA~j«“V§ húùAáÆWì4 0}âºñ<ÁŸ—ù¤%>X@¿!€+€e{Öp¼´rùóÛ·ïÜ‹@À»ßýßø9€{÷´óïG¾ó[XÐýinö¹ééïÿûÿxüïOÆ2€Ê¾àe=ànà´³n—ù õ$áÙ$éð±rî;kʦë9á…þ˜çŸ=ÖÜWô„\ßyûÕGvÞþEø0‚|®g{Øêžß÷°æŸÙÿŸíãçßÈOÀc v»ˆ?à…°Jà>baƒ0%¡‰IÀ3VØ)€¿†‹¼(@’•d +GÐÝÿwûóØó¯hª×ßîI¡Ûe?íBƒ8ÚvѸ&C¸½èÁGЪ`ÿP’ +—ÖÓ¡°5¸ì2þÑ5Öø4_Hù…ÄšG“Ngš‹¯+m—8˜‰JnsÊ-F[Ó*j +ý­ø‡¨¡á.ˆÇÉH‘³¤2Ztw­OæG‚z¬ °² ¹þ¶Ÿß““oM’`»¿mëïdåG•>Ó6ÏZ'º•î~Úíú–×ÇΖþ®/(Š‹>ç<ÏÜ4èAŽÑ°Yà–Tæ>aIøèWWV–#_I›×¿»ýeôp÷Njðñ_ßûæ„ Œ•otükþcýg@ŠØ÷ Çd +'ü´ŽJ+{nܰ`‚øjeß;Q!À>ô'6pÿ*€·ß~û:ب»Ê'‹Ÿ£®ÿ”ý”€µiƒž‰÷àp×4s#ÇB>TÞN—¤ïü +ëßêžòüæãh:øñˆÀ~†¾È 77èù@$ü÷Š]¢žŸ!s€´à ‹÷cG$çGŽ ýD’>ydR/d Ÿåèq€{Ž¥©pw$eZÖÉÛIœ†7å½M§xß0 +`¦Õޱ+Ã¤ŽÆ±åù.fõL$±$Þ`¤÷ñ–·Ê33°‡¦í´ƒýðñúWšÛ˜Ÿ[€(Ë5dû.%zÀ¥~§I‚ž©üà€¬98 aÏöü~0@ ŠÝBk0—ùù’OA8¸ƒ… :ƒê–OírY­Í!±²ÕâØ·‚YÝkajFlҬׂI-ÑÇþÿ‡Ý]›zP§§¥)¹òn®ìÂ-TTuÒ_8ÇàÚã—Vg¦+›¶,NÙCâÌÌsàÿ³Ï>{–ë‹)dÖf‹\ÑlCʳ½ðx/B7˜Iû]/êSŽÙíïZÿÏõÈ;|è£uµ»©€‡RnGð‚ÄŒ5E¬`ádøà¿=ºL§xžG´ã`ÒÞjw ؾŠ]ÙïnÍÀ°¶úÛ½þVÿú)ÒCéÃÐÛjó•§§Ïj/n¶Ûo¡Y&kÂSÒõÙî1_¼eé%ÒSt™uÅHŒgl%2¥¸3ìâK41΂awúÎeà§I?»<€MÛÏL“‚Ç߸ÿÁ›lLæ}°Æƒ“8=iýƒúNž<9UI‘Ø÷h ݽ<+Ü‘tHuJ‘Æ$­H%С¨…×¢JRÄl2±,Î=aaÞ®ÄÑ=ÒûæUN)—nV÷Sndxl€qÀgÈ'9 +^QŠ€.åƒAO^òE¼Ãž$\€‰Uúë2 k[Ôëó¥'”2hsꉌÄDë?z^2å\G3úWü·³B€ê´w1K1¡#bÂJ hDR:lø¤tÙžUU1+¹>‘ýü“‹!›Ór—HGÓ¿ÙÕ@ÔÐïn_½º hÏ—Ý]àk÷z]£?¹iÉñ²ËÉ äá©”Õf‹¿Ày=ÁtNÄØŠlð‹—DÙ­`×KnMYÔù³Åp=ßE&.º?°èœ{9‰Ð€Áñpí3 <_N”&Ž–¬`Åɉ#ºÕ?3y☭ +³£ŽU$D‹Ú‘z>…Þø£Ï”b-„ 4}“2iÖ&yŒy³Ý)ôÏ3òµSA+.ÐOÅb‰óÊ1Nùì +¦ú~W¥DŠ´¢€Ó”¢¶€ƒ¬•`µý"þë°]_ÜÈù`#ÝÚâ â Š·C¢½Åêp£:É `´2m?¼ªQ¸š¢)¤~³/öŸ·éyg×’ËQíõ+ú·íZP/Ì·AIëñ#ز¹½YyãÌ(=Û~§Oëÿ7AcàQ ©¿¼—]tl÷7ûØÙýþßv{Ÿö?eŒGÓQI­IB—z%ñ÷¬µ½“ÌÌ<Ÿ†›æAýDqY€Zc]FãxAe³5Óѯςî‡j÷ƒXÒý¿í•;Ý_íFýf%¢±ú–kØ5Û€ÖKØïôØÜÝmïö{=ãúÿ¸»«¯¡·¯u‘Á!^´š™Ãh¢gà‰àÙ³åJÏ+ wìDes³ÜiÐ2!( 3á¤xW&¦Fˆç:»°¦ +(ºËuvû¶•ïaöð+¬h´Þ–‡±o7VÖúÓή1 »³þ‘ðÞ$¶>¢L[˜¨û–7¢YñÉ$Ùí­«íþöv·m~úÿ!d N‰_Skµ»é«Ef™"àë…nfª@ + »âµààÿ‚_ÕñÅ(¬eÃ; )4²ë¤éQ3.„º ±n=ð1¿uaP§{ÅKç$`¸f`ç"xУ@Oãíd $j À„ö;›Ù_]Ð"N5P„I)d˜G’bîÿZÚµ³ž)ŸÏ'mAGf +ÑzΙ,…i·“¡I¾ fNdFà?I³7;œÌ9²/€-IVòívl ƒcß5}2Þs)Ÿ•S:ßôxÇ ”mx€eM™»Åz~²C¾„'+¥©’=ýö3Z„ +øYàS“SÇ_˜J1·ïÞ½cSÀ»~èk£ÿ€CÆ +¿[䀿ye+ˉQÀÐ<þã\à"‚ó¦xÂ`ß÷|dÏ}Å"Ä i9sãýHpˆÀbE–ð$ü‡\ç Ø÷|ÿ‘döûßÿÁËo¿÷gy>ûçûö ØÚ<€¿ý0}°·{Wþ§‰¿ôê‚ïòõ‰E\z¥|gcðÕµŒâ}çU¶„MÀ—Q€BD~^a^âlM¶k\& >#"=¾ÒÇž¾·•ù>ï¾FZÛÆNG½µÈ}ÞùÍ&(ßë,PS `ÇA­ry³ÕYì{M“› ç·ß›îŽ8vú·v-mꤰ¯j¡+Z Ÿ¤Zsš"}¡µS’ZX9³ÍŽjMb=5ÕÞOáˆgV`¥ZЭ¶uþºÉ=oÇúû^ï]¸Ë§½ö¯ÚŸ~ú+î\Ná§9?S°”^«oȺµ¶¶_ìfœ­d¡¥Ö.²Úþ¡jòVðãÆú/ÈÀ³Ïr âð¸Mؼ-»67"û[Íc$PšûB"[ïvz¡5¨ßÛíwþ±Ûÿt·…ñïM3¾Ãš…lÇÞ‡ÜÉ@±nÆæµ€®rÅß܇ëþGàßì{dñ‹î—y𼷳ݾj0Æv[‚lõw·ºíÝÈÇΖýEФœÌ(Òùé²@–™<ë]Vº¶ùæ%+€íäñ ,°ºxÿ’$tƒ2;ÆÞ=iˆ^,°GAb„ݶï–o›ÐJZGt`4Ÿœ|ˆ=qô1=ÙÌǰ yÎ@Ú8ÈÕ¥cǪ.Š»)í}Œ˜œ<1PDÕOž”ˆÄ¾:28<.D‰Ó)º°Ná¬\_‰dLN÷À°øùéàœ ·±GJËS噸8w8ÉP(’¤»Í;*þs_Ìóx”¹¡ƒ×µ+?¤¨á½“´ú²¸Ÿ.Žˆ­óÿeJYðS©§ §¦¦¢ÀœŸ°3@á?>pŠ|<6U»ÿïÞ¾›¾øÍ×F‚ý_ÃÆKòÿG¼Úš=ûüôì¬HŸñ¿ˆ`Uaþp2ÜPl”W€Vx€äÔˆõõ«Ÿ:èušìôo|<‚ÿ& +€¤£ï'âzá8@2þ‡]ïT@Âÿ‚D}@‚ü÷ ¹ z”ßóÏ?ÿò«û€?Q Àn€WŽÆgü-W%9ò@@ìÍLûûC~uí—ûKÚjå1ø-a^õ(ŽSÈ@æA¢„ÿã(€Ðž€™¼nwF'¹³¢ikfš·6Üܔܼ÷›BÑŒÕÛïí6›X‘ K×÷{s¦¥1l%9q¥½˜í7yÍ[ö^w6}¯íù³ü…:0°¢S(,GYß²¿àì:O&¼iÌGA/\øGSöœwƹ8‹LCã0¸@s†¢Å"G°Vk€EÀxµïXˆpÀª!:ïÙ±•ªžûCÀ$jµÜÙCÚˆµ×ä`¹Ò7Uv-ÃD,“ÖQ6àî;£9 H¾ ^`O|% $àÙ³ò?–ôì³ð#O§¹‹¹Ôju+6·hvŒ¸âŒäuÒúoSØQ½Ý +d lÍ…ÙŒ±=0“N¹Ç)¥f'äM´~Får^ˤ¢X/þæúüÁÿØøHeá䜱bXËÐÃ[Í­«Ö²lõ»[óí¨ÙöU€!eq'ÐË[Ò³eª@^¤–i”Tù ÿŽøŸ+ä$¸ûÂéacVt•ÅÆÉc“Ç„»hðžvxµ€“ØÖŽ×Í*…0¤¥¾eÝ ¥ b€•GŸy¡t,ðÿ™¨ ÌÚ°Ãé@ð„°ÂpÀ»3 Ý!0„hxŸƒ™MŠpü±RÉ"’ðþëÙ·ÕÞ…n¨-”&ØÈı3ì2P„Ã'&GrĶ™ ú 6OLžáÌæŠ< ¥Rw{kü·O³=¾Èý$×Àl¥Þ!¸#Œ%ì–8šëã}µŽ`fÚ¦Ÿã©ÏfúâÚž°PZ\´7àÜ 2·Xš3`âärý×_ÈîܹŽ | Þ|õµß#ÿé4ÀÊ€ÙìÄî{ù X@BàaygÇrƒ¼º0Îb•Æ {þNì÷÷wÌåÃï'&âDÛùà ‹ðuûƒàýa/À¾dùÎÄó³¯Â^4ê3š?¾Hæ¼ÁÑ×£í=ç¾·¸ø½ï}¯t\ + Aï(cü„^û iï#Ñ `ú¥0ÀdÕƒÿáxPú'ð/–޼ÀË‹Á¢ñ1a=Ì¢HM Ên_DH8#@W@uCbÿö¨Ê«âq€µ®ÁCÞymb+›µ‚1$w[ómŒÑV” (¨â›øý,‹3Vs+pm]`š]@ÁBÊv¿ ÆB*Û ö¶ÜŠÊFú[̇.èè§è²Öh +z©q¡5…‹ZǾqµó±[Ôì[åÜî|ÚëmõºhÝíívÊÐÖËZà1¡w`¦b¼}¹¼à'åCØX±K#ö +Ú±¿gTL£B¹`Kl6¤!2Yh²­âº)lód‹ÖŸ´“&Ípìa(T‚‹5±Ôå.h7~m1I¹ÐFÚ"7):Xu}¥2cV¦ÂW½/j µJ£6ÛBsv ­Ýœáÿ ú“¿ ÏM*ÓM{ÿ JšRŠ'Ž•Æ÷u1.ÛöѲۅ­¨wánméE1ÔP y¢n… TDç‚$@MÂì €kX-ð\pHõT£œÂùØÄùhïž±VdFN„\tR®_-ÁhÆïpyâLéıdÁ§µ¬:ö"»½ÅHvºGþ±É3Q±’IËS/~'¦AB‡DB‘“'N—&θsÚä(èƒuÈQ‰JµŇ#×eEtóG€Pf$iûþH çGL\ššŠ+ª”J§O{þ!Ñ þw¼‹ÀtÈ_<²MÖÅ#â*ßž5ï àÿ\„¾ÎD\ç“–¡oö>ÁÁ¯Û€èÑ; Ù©•7üßN🾠òkçßû0NâûD¤Vƒdà(€d&ðˆ¼ãäh €ý€!ÀøðÆÇøŸÀÿÆßéøè!S$áð&{?°ïHÈŸÐ_¿Á¾Bš¹ùð é€Õüš¬Ïáú¿çˆ¹ïÙé¤ü¸ö<4@Ó>Áyß¹±CXÿG1Ö‹F»!…ë^ñ\S$’1ªàˆüÁCB("Pñ4ÞSFvÒÇ[ +ÈhLÇëi™JÉÌÆ~9likbÝ_\ÑqM1ŒÉÛï Aúý-à´SÙÝe'Ò]*ömkG·FâÅ‹>}6Ð_üO¬ @ JÈ•Âãü©zÙÕ  +óêDü^Ìñ?î` •ã‚öµ€Ù«%Öf­›m¿Ü^ú~€­»¡õ‚¢.üæ­¼0EW9&_8]¹ “`ÆKÅò·HbÙˆn¥¨Á©muš›µ! åYlxOå ¯Sê¦+Š\  w„Ù烔+½¦>áÑÏ#ïÚ‰Cäukó3Ár"±,1c¶¨õ¬m$°À»Ò 3+vŒK +­Í-¯@åü‡Âfp†ÿѺÄGÉŸùð¿& +F3IÝO&°æ*g½mo·ç; ìÒ[)À)ØÆî6qèv¯&¡¡VH¡¥ëèt°Ý÷儸~zrr©äj1NÜ>3üA(›'NàN@ +‚5ÄO€“¥3¾JêTó_˜ÑücöÄ@›I§JêœGJ CâYÑdòEöÌ=\ÜI2öK/ ÈÔñÉZét^÷Ó쎟-Ìàöà9J „³ÓwMKMŽN>3QzfÒÂ@ªr”‹Q¯.WL°—„ᄜ挗7YŠlÈê”à,ȉc(?ul&r:ÎZˆÌ¤»e'@ + d‘ñ‡€ç»Éíö1dÂ÷sëx@ãácMÓÚ:ïø4Øô´OâþÅ¥=i‰Ž¢@ð¿VËøu§¸ÃµÆw¬¸p|ï«{wïFŸ€Ñ7ð8± ýEÀ«;³ÏŸÝo`#À¡~øÅ&#ðazw^Þqš"ôßìO£Q€0ä£?bÇï#Fóp† + €´Òä@#€ØžQ˜$Èx4îåGý¹;à ôÏÍfà÷JU"PJ5ñÚÜþ‹ÉC5Ä},I°ûÃò¦YÐÅõHìQ ìé1ù8}Å–(º 3_KÞÑ¢ø®ˆ‡¹pg…]ÔûÒ‚®é”§í€÷ר9AMÀ»«ujÕ={wÿ^Ûžnxë¥ +”ÚÈ`º&¾{úmpälsËø?3mRü‹æ1íâeµì ôÈ„2š jDÚ(" ªu%7ßOëm#ÚH­­­åÕN$ ¸ê…/:M½Ú·¶Xëi¹dfôÒ«Z€¨¥Vr?0™1Ì™DcÄÚ(íWµ9"©MJ¡9(††m?ųYÙ,—-(9ñ‘f%"Er8k©H¹IÒ/_LTœŸ™žÎô±¡Ûý^M ¯Ú ­)R­¶ñœ¦H²h­ÎlUtÀ§šµb—Ð:-¡ã°Ö3ÖþSV ›ãºØýQ3‘š!*‚²v@F#¶âö¶q œI`·žÛ2²PÇÇ;É@2¤–e_Ïä‰x÷%YÓµ©k±pZ£9Y×6ٲ̞šúNiJAìèHÀõ¸ÓgΤ¥êÄIcëüÁУ æÀŒ7½Écç=îø1]ÀAŽ1ëÖL„ØÐ¤6Y"Í $8Æ"=;•¦¾3%X:]:s¦*ôª;Ÿ98LÂÕc®ˆµ º6˜/4!…c%]a°ˆLÔ_˜LÝ„#jb +KÇkN¤ãS±‚}Â'R‚Õ3£ Tê Õ 1ÓíÄÝBâf"nªt¸cÞ6_[f677½y~+ŒGn†‚ÀÒàì|¸ÿžì/]ÿ–©’ŸZ ÿÿÊÊZMÐ5À?TºøæçwîJnkýß½sïŽq€€?£ð–lüGììÌ<7ÔÀˆ@)ŸÿqljàkŸ@A’ €‘ Ì8<!A†¾ðñG~œ9Øÿw€…HóþòÁ¦ºß/ ð¨Ÿý ñ“ <ù¸Öýôü >ð:ü§†×¬,íµüÓ7¬`¯H” Gb<£ñƒÕ‚zޱ†ÜB6„øÁ"ÍgÇ|ˆ‰í$b¹ýËx1G(†˜{´}ã˾·Q³˜cÆ¿ËÚÒõêàµ"&Oã<½þ Uôd•A%_v“Ò„N¾„P]ÝViÏ<­ÜÎFC@CˆòBßöû¸z‚¼@@ êÀ€Œó|œ9@2ÿaДèÉõ ña¾°ðS¤•'# {’å_D2$ÄO²0*©ÂŒ<;ñü~‘<Éžÿù'Ù_þ{/õ“äŸ;=wÚU¾Ñ*ŸrÂ?CLù ¬öå˜þþÈ,9`ŸŽ²_ ÏïB¢ÿz|%Ó(3ÞEJÌ(¾ ÒgÊ]·±å½ok×h1Û]uz¶Õå=la_ñÃ}»A•]@œ%1#õXx²H¾ƒáý\9{¨£¿[¬[Ð?Ut'ÀQl™ý‘LH€›¾e_‘€d)íhpzÍÀ8BkQ‚3²§ƒ¿n_ ¤=R¸B¢ØëZÍžŽ‹ÖhæŽYë(Í“ÝÙš;Æ "½VsÖèÉŠÐ)Eæ› Y >ÐÖ6¾°)zEޛפ¿‰öÒf2 ¿ùšÍëDÉ-þçž=;Y c#È\cbÞ§R[Ì.}èˆZGp"¬£;ÚE :¹j¦©Ge,~͈´!‘TÏ#mÉ‚²‘ßjë£áI +a³ê³¶§Óçeþ¬§UA&»Ì¨V·µu5¥µ½ÝoÎhðwûA8®¡öLÀ‰¸JÿWê)e9ÃaüÔ´§kÀêÞÒ“¬É›®›§îcÕzõ˜€˜!.tæÌù¥¥%(Ùz>üêÿaä7{ïƒ{ H(M~g²ZúŽÇ”ô+$÷;v½‡èù©)žF‘*k„^UD^”9T¯W'Ï£ªºœmNŸTQ$v;v*é—$t#ô°RáÄ™I¿fl!C9ð™jx ‘´Ä%¶UϨ³,žˆK +9ur’¢mòüú©«hàïŒ* ~gŒˆoj)û9t<nÓðÀã³ÅÙ`Ä +¼ßV/z§§íªï K܈',€wÆz‚Zñu €i PZ¼¿ÂÉ=,ÕjiñBõøyÍý€[G¼ë¥3KÉJ®VymáèÑì`7'h¥ÕZéØ\6Ó_Œ‘¡_‰1”.M•jV,œæ4©žYŸª®V§–’"gü˜“ógJÕ%æÜcàPÒÙcì>Rœ(%ü—¯L±·G…"'QãÞ9þ§a"Uá¡-"×¾œ9½t¼^?u +&bNèúUO<…€û4äàn%ü‡„{s5˜XåQ>¼&å²ß´ ѳõÄ%ݹ',§N•æxœÈ¥e¤–<v +(Q½øIôpûvtäGoßûêν¯ï}ýÑô÷…=€û¢@°Ó*¾(ô; µx^žÿøÇBðají……w0ö ä]-õ°ü‘äÔèø0y>¾ñ‘ó‰|l±’ À×n¼Mº$÷@ÀFvÉ–ÿp=@‚üûy†evX¦¿ÿ²€Â ~ü04ûŸÒ~¿ùOÒ8ð9ÝÆìXL1Q  |`0è«ao=¾ŽCÖ±E*` >daÒö{ÉvÈN£‡ +{¥ƒèÅ"óŒƒNĆx% ¡—®§ò6ÞN_×l¼»m‘ °µ¼Í[)tËÓVгp)nÕxCº`¥º˜Ô”€l¢.o¸P ¤ÍlFéfÛæ'*·yç+³`í·…z«Ül.D“·Êf™ã$~7O|hæ +-ßÐZOqªÍ;Ÿ+k¶·lÓÞZt cß»<ž·š$§Ö¢_Ö:j8bû1.G+9$|"ù¤lµ­™zI²?\Äå‡)+¦º›|BAkèT¤h~¥<†g"ZŠC, ç99Ì)šçSíJþ]w´7CÖ0o^…ŽÛ†=ùeÜ—ÑÕW¦’)XÎ/¯?^?ü¼ÀKQ-ò2þp ñjõ„Þ*óç Iõ•c©ª tºZ[>v¬áINèØ÷ºnýÓµKK2…Q‰5µóh0U/MÖP$i¢ZKv‘ ÔXá œÊ¦‡Ðt¥Œ™ªï ™R‘8Ù™ÚdEB¼ýi‹ŠTëÕêj©´ +'R‚‹ ~üõDާÀfW¦ž‘xnã;nç©ñíäf…€#õÌÏ?û¬•X£Ÿ¨ä¦úOVâc@%»ÿ‰Ï ÿËÕ•ÚÊbààw€ÿí;_ø1 ÿE-À×Ñ%Ð=¶=á°àýûÈ£þ]– Éšî¿Ô»¦ç +XN {üðï@Sçûû?Œ4ÇÉ€8Óêà—,ÿÂúwšmþ{öååBfË;°Â0ò†ÿ˜ªüd€»“Ë€¾ßwÐPâ—KÞüOÚÇ1§;+5ñýµá¿+Åë© ¢öÝ̆ÃÀx͸±°õƒ=0u.'4`b"ÖHø”–=É!:m?³JÝn‡bëTî·`ɺÁPîI¬(`™> !Lø¢PYy.53s«&®`ú¬¯¼Þìr4Ä–M€ã†M¿¸@úewfÐ +(E¡,PeƒÂÚj] ­¥&îåÐݲu\¡uqù^'@+>Ð:>:•Z'à ¯‡ŒhÚX»$qàþ,üˆ/ÌÑX—ÂN}.Z£¦š¨5k\k¥ÒéÌD/¼”°kɲ¦YÖ½€&3ÏÙ)ª4Éöó¶^46€ÜÁºmA -Ofgd•)³ÌõF´ŽrXÖZ·ÕÚjÉ‚G´Ês¬W ÖM´ò•ñ(òÔG ƒB8ÂCX›á¿ÝNðþ2ýœ¬6üN‚(.IdÒ*€v{3n©çFlK28bbÝ È‘`'‹ù© ¿ŠÑ€²jÀZ5à­@_ÆÕZmé h{¾¶^ª½¼ìž_Âþw±¿%°uà+ûhØþIÖ%Ç5ï]Ãù–§"€O‘ºa‚ œÕ3 «R]CfÎÔjµj•³ÿÕúêTmnªî©“"çу¥êùïé‹8³T=†}é\Böâ¬IN–Œf89½ÿM=1çe§í1†¨øé3ê²:U¸†¤¶Êº \w£6ɱÈq2xµyÕØË¸9ŠÝ$s_S ^™xÕ¢ǸïQ­tüÅxJ¹À2ÏÖòJmMÛem èˆ0€êÅËŸßúüó_ÿúw_|þD@ŒæÃøÿâwcE@2ý‹€=Žïàù¡ÔŒ‰’ù½áØï`¨áÈó£ý{ñÿïÿþïoüýw^’#‰¼m ±íßÏ.ÒrbC§C’<û¶â òCÅPH€òË׬ºöìýðPð‡Â࿲2ˆÈ€¹Ò+áˆê$øvÄ/‹ÿ©À‰#ÇÀeþ¬”¼Àdâèq1+ ÿ/ü€<ÿ“xœ¸¯ í~ô™TpdÂW/¿˜¹ Á”ï¦ØL:›Q›¾µ½µkì5›8F *»€å<¸¢;™?E3óÂ…te:º§TšåBi…µ `ºýúÚƒf þÙTçgÕv]lpÐ; ÔÙZMÜZ(W6AUYŠíßq®n3J¡´ jìúÙxNg×»ì„@­¶­3qIäÆQ"‚%•¶´>p;ÄcÕVô?3]éšæyMÐëܧD£hKVmI{Z•ž;QÄ‹( ‚ã蘠4ÎçñïÚŸß™™×Cغ zQšC‹•™g£c„ËéiÁ2­/W®BˆÊhÍ¥“<”¨ggy~αߟi7N¾âIÉD¿„ +ª†Ö¨ívÝj@âÔºË9P®ß#³Ö¡6ÿðÏ^LÖ¿;Gþ(Bq??_ý»€Æ®ñ +02n šM[ýþUó11€Àƒÿ’À[fCÀÀÀÀº +`@xwù×J§êá +¸FÀAA~p~i½^/ÍM]¸°tôDÜ¥%Ñ– œ?aư½ þkˆ:…óÕÉZvTkÕ+ÇkÕÓºø«¯ø:™ñ¿ZÝ›‚‰0ïqò*ÂÉ.yò¥zíü\iï‚Àïi––ä%$G¨.-?]ê‰àÈÄlRçäÒ‰ãKVXÄœœ¬Nq*öçè! —ñ¯MU/¨‡Ër¿@VÔê\89²Z]ž›“‘#¡ÇèP€¢`ßà½ãIh/ŽÀ#žžšØ³ðˆÿåçÂð—D¦4 +£ Aã+²€ÀÅåeÖ•—kkŸ¼Ÿ“i¼ùÉ'¿þõ›{¿¾ÌÌ'{¿ûõï>ÿݯÇITù‡écfï0 +ÿÅÿþÀ|! ƒÁ猙c=Ñá¿ûý ùèÃòÐúÑÃ<׮ˬ +|7¦#8ÁùûÖ¿ !~’Gõ$YXX(/\»ñÑà?¦@€ƒ ?²Àø7ÿñ}Gx]ïä8='&0ƒûÃÒ?~$l±ÙWN KÕ¥ú…ó«{¥R3ûüymí¥zíB­º¾T«­n4Öë«Fcujyª^¯_â¿Z_Å®_Z‡T—ªµzýB£jk¾@5x .³=Ð\ñµêÔku`ñ5R_ª½6Å +Ûj¯ˆÜ —ΓRmiµQšÛ«ÕÚ0ú/,õ(¶º¾ÞX]]o46jÇ_CIýª8=ŠþÕ µZ£zü޼paýRäVëz(!¨žÏ''-¢àTÕ U®ƒÑ+§_‘Q¬¢§º­Ö§ª(Â,ü‚ü¸ ~µÕÆúÆ*É®ïq¦Rƒ\ˆ1S†‡Õº¹ÍýûQd{sÄàsâ½MÀ;ãc“(ÁÀ þG`ÊSÁÿ§ã]ÆËµ••ÚŠkš~° +X[“,ó_«]dÉÚe8ÂExÁ àϦÿ«Å `zòkÿÅ€÷ñž;!ð¾`Ä!zYH‹‡<C2¼Ó>,AÞOÃ5l÷÷óYHkdZˆŸ Œ!!~’Çñ(¯–ÞIÀv€!Àûÿ=~xìj'üƒ èÎÈßw¶"'ê÷_)A¯YHüZGŸ þ +ÂÙ²70 ÏÆ–ÃèÏ[Ó÷“‡†È™þ‰¾ÀôF¦ry‡€døøÓ˜…´·vßÚÞÞJ]´Ë,ý5,#¸uQˆ‹·8Ú@0Ú>™Î¼õzÐí]/Pêv[›Ï p¼ó ú‚ é×ë?3­ß;¬`~ÝpüSì‡EnéN ætqêæüßÜê:ïñ+ïT«µºº +¼ÇÕ¹ãsËxmT„#€×ç«Ë¯-Ïޔߙ´YÝäI›ÔMU±ó£Î¼Ž„¥Õª‘ €Í•êÕ¹5qÙRbŽÂ#&6Ue»ËU8ƒ¨ð +CuéðyàüsSËà„°“Ú2ç¬Î‘Àq ± ’b„¥’žçj­4uÌç&'Ž›<6¹<·|‰ƒ5PæôdDst—Øu½zœ„­ÁD)!UÔàL«R(ÃksY‘×`fÑðÀŒ@´ÐIâ½ónxxfs@$Źßã=Õæ§t &…|ŸB~†„ö‡%òPÙy¹ ‚|âÂ{2ô³åÏL1ucß +ïƒí9âõ €ïŽR´HV?°ž~y"ÎÇl¬“ +òàìŸ&‡À?õ"H¯¥ÅwÌu([BX‰:ÅkôÞË»½«U +Ì‹ºÁ·XŠûœy«}µ ÞZ´&óDY–ÙÍ$L%Ä«‹}Ö¿žä¹G ¾³Àw@· Ç«GÚ[¿”\½øŸEôò¤S=æqÂðÒ©—Nz‰òtèOi[*-þ/ÍÅ—ZøG+m!˜·€6:KaÛœ%·[ÁS³þ?8Ã!üÅ uüر©ïL²g ,S7²;þߙ㰹)Ž2 J{ΩÍyêS/MšƒfL½tjêÅ—Ð˳2QGgí@)ý»©ã¯¡ˆÇ™ô©Ru z¡îÊñ<‚ +ˆúÅzõyѾh™›š˜þàÚÂìÂÎõ¿³#€!©pÓ€(ñH‚ùÃ’Èèà˜¼ë”eë²@2¾#£–ÿŸ*;å—w>|4Ú0v?PÖ¿‹…; æþ“ô_jÌ݌ƾIñ²œftR&úR^L>€0òÆÿÀ«ÒTÐw{¬I#eœ%ÿ§Já;È/%’ {‹pF­"“˽ÔzvÅDìWÀ%ûÅp×S,ƒÅv˜#”šJOPê[×Þlw›À”©{mm¥Ýöf&Í~³IÁoÓß@ÿlÄÍ`ýoVº€?Àa½‡­Œ­ç·ù9KSX ôRáN|Æ]m¼ØÞzkk—q@´¥»¥ Ör'a°ž µÖHD `‡Ö\§öÓ@r0yw—9 ”Lâ¨ìõìƒtÓR3@SÙ( û¡8Oygøa+:ëÛ³r™h¸ŸŸäãPr @ÂHŒ"¢/XˆÅ)ÙóÜ4Y4½ÿªnJÏ«–²/FGI«Ü®`úoseÝö[Ö¨5ó\ɯ8™'v1å•UPy Æš¤Ù1–£S™/sh ­PÏ”¥‘}Šì'’Xÿùâ’¼?‚<+û‹Ï!ÚðßWXOìèŒÓœ®·4(€zyRŸ¶½ºˆ’ @Ûu¼Ô÷N]©½f¯lµZ£~©ÑÀÜ®íí}Ò¨¯ÖêõK{ÕÕz]cµ¾×¸téB£V¿°·7µÒØ«#{¯¿FÑ}Ò¶Èñ©óåµ:vóyÇ)‘Õõ½×OUëµ×9[½~¥Ñ¸tkýŠU +ë$Íét.Ôj—Ë æÏgE®ÔYwáŸ>A‘ ØyOçz}ù¥PŠdÖH¾ÞhG+縆åúëµð¼V=W%)ÏVkèâwn)ÜýµÒñ£Hj„õ›õõ ${‰?ç&bßµúrmë¾özƒK¼°ÆºOöþi]½d'kUiì­^ºôÓúð‹—.7ï€@®Xž/ÄgÎG_Éñ?y|Ô3B?a=ñAnïÓ\¬úµµ‹k†ˆ+ܸ€h§ìÛÌþàcq2u |X2âòÌ÷Ëáú‡=À?£!ìwx><£’«>¾qãZk¶\Ô`y;âÈvz ’ úÃ"À“ ï_»öA„`ÏGz‘ZžÆ¤ñ?#£÷· ;åJ"#ðŸá^;_ȇ <©û?uëœb +Ð1ЀWJÕQ@©î‡D?#$FHZÂÞgÆùÄUx¨·ÿO“x-SQN n!®±ñÚVZ5Âyu·±%Ã\f ¬{µ©ž.öäL§¤ÓÔ‘xt²gM f-À^­ðF5‰0ƒÎ.ðÛ1T >‚,É .¿,xûØ/—…À: +KÙAój·ó©ZGå‚H 9âŠZ¿ÅÅLW@H’þÕVK~cûº¨.A1Vs‚l§¡u¿©×öƒÚÞ½¦Z÷¸štoãN'a/5cá¿Ý¶z$9]@¦>¡dö€¸ ðÿrë—€ƒ"öëPQN xÇ®€òQY‚´"œ]bbÕvþ[ñ}¡6¥_?‹¨€…l¿°^_½P[Àçªà¯žx{Ý©5æ¦öØÉ€7CõlµÅô Q5çƒ +.ÔkVAÎÆKÅiãdi¤µì!KõÚ\íµ¼€°³1vîbõ{ýªÕúSµuŽ‹4н>5Âçê€,¯pÌÜÚèº3$ŸC'" A1‘¥¬…žýóÕ%ÏÏžsCzd ²\ðìP†z©fÞ¨ýÒÈFÕÜðªÝ/¤'›æ½üÀžúyŠ5€øÏó€™§å¿û“¬‰ÑÅ$°ÀÚÅ‹SKk€Ež;Vì9>Éc¥D]óAI€Pôü@П8@à?’ D¾ó<|@™Þo\[(û¡\ðMNuF€¡.{‹±{åX@$ãþ@"Í1’OwC0Ä1L-Od?à߾ɀ€$Éןð?(ÁÿꊌÿY–s+€@û}@öž…$À©S öðöýd^f&æànqslÈ€o] ¾„!ñnú*&Ó4ÌÚnëS× +cévÂPÌ +ê®¶©ø8Ý4ÞMpì°Ò‚ š²uPêt{»`BPo·½kµôî.f2 Ôô[`™aÿÑÍ]êX0Ðð0èRð§Ý\Є[YnõHù—¤¬A6»p ¦sÄh£Š›£;Cý)úPŸZ;QkqÅ_·¯ßàƒ³¶ ·ÝßíuQºßï´EZˆ\&Zz:J2Mc³§‚bP×’z/ÒCÂà‘¤Œx€›8ŒP­Òšazº‘õ€´}„„ÄgÂK"ðS~2B‰N7}à(âü¶àn[nÙ2«û»}i gíõvm9'Ž?C¯ý®@ðNëíðÇþ [››hÙ鸱K&pÛ%/âö&4dýØabBF÷pûÃó“@Lö yß +e§ ýY*úqû‡ƒLeÈ€†HÓ×\ +àÜÿ'ëxª€r·Ù ¬79 ï+sµK,bBoµÚ©ãØÑ)¥îu,ª•lNx:LìÓ%ξ®®¯¯cìÏ- ¸$p4è)öFƒ +—.Tç +(mù¼0úZuÙØ{AJ(²ñ’¦º-"•©©Ú. ôªz +¤AJgªFç—–¸Nv&ÚN¯èÖ¸$Ng™âú£UA9‰­!ëÑê¥úKë¶’ä†<òæyÇôäûÅ­ãN ðŒ™€.¡gµžÂé'6DhÈ\iÑ ÃüÀÿ‹kµ•H§Qö'[NC ‡øù€9ÉFÿˆdÄ? z^.< L3@dÇó?èK sòìÌ–£€ÍþF=ÂqLáØÍâ~ÆÔ,ü•œô8ád¼CðÞ• p‰\0\ðÁuðßóÄ™ŠéŸ'7vRà}@H¸ÒÑÿ=~Q'¸èg @ôk"€ÿÜÜgöÅ +6 Ý!‚ÿÅzŒý´&ùÿ]Ÿ\nw'××ßàá’_L„B•Ÿè/Œ—ö—€ÒØÊdPr[T*ý:{«ÓaF(µÉœŽnA¾ÛìwßÚëÙ㻨#Ü‘zY‹Ûy㥭Ns:|Ð-­Xí=½ÛAº\`¡ ½ öW:&x̴߫z­Þ?ptG¶hǃ«á ”±ñâ6—‚jìàŒ&±˜±¥ÖñÝ™ŒãܶhËL¯‹ÖâÉV»­»\§UòIë·ú½Î´D†í$øîÅéwW=à?V¾JpÝQ1’ÑïP¯U^èv D¬˜xDTºûÁakÐÚÝY³Íá\O“¡/˜Qd–Ÿöý†¢Ù4_&× +Qm›üsamr Y@ÏþîöÖn¯7]ñ&Ú ¢ÁÙÔ &ÔI­õApý–ǪþKf3× @¿ê¬ÂÜ5Æ^‹2ÆúOWUÐËc¦ƒÿabíÿ`|úb¹Ú¼ZxFƒÂÀ¨€tê2Ñ~Î A2|…¦¸–s¬€€WXÜ…l¬_ +ཹX=ãˆzíÔTÛ—â-j='^|EþEG}ßÿAîKë %£Rý<à-æŠêÕúª %yÁR­¾|ª~ÐÏ[ÕVÙmd~Œ&{%Ò°õ?ÊÔkÇç "^ÇÒrABjs¹@4G=Î/]¸À\XºpúøùÒääIÛ+‡Ô.\HM½"ÎW70r ûà¯d&²Zo”ÌÙGbLƒ!Îg¦“&nLzhxd„Ikð‰sè/q‹{?ð<%üJ=CaOÀ‹Œ# +ä·Wà3=7N2l#ÄÐð2 Ȉ@ÊÓû€˜Áôç<þü;þv†á! ¼~l€AÞ +ÿr2ÕÃ@/Æò÷H˜:"BÞ· I ö Ö@4âÄùöKþ<Øùà£Ï>ú¨hp_É ÖØ,f'ÀJrŽz¤¯*…àÔ©#ÇÂò?ÊL{á/ðƒûñOî€?"²|ûõQxgñõ”ÞÀPÚs¹Ü4(ý­îU€àhëUs3…ÓXÄb²ïÛWÁ™m¦2ݬt{ÛXˆ˜Ë¬Åø“0¦a•éV³ÕiU°8yéçµk­ù4`“%âRk´ 'hÃfâ|’T+q¤ñ»°…ÖâŠr¬l_@¶°†\ôO §žíÝÝf¿]¹ŠšÛÛjÍ5iàøiL[!oÁ˜–é@¸ÖήàÇlgÁ©a“˜Áf™|aJª“Ýï‘k”rB<Öë¾%Ek‡´îøm&å²Î²Þ~ +ïjûªm$´â[?x >H€‰eÞpd6vÐQ¶“è:o¼…Z÷úm=^|_¾F’ũպcG@~§å÷L­g…¤¥Ë¿Z”C=Ú«b:lý'çB‘7ž³dã?P¦S¿Ïˆ€Xæê–?D »KTð—$ õië )D-„©$ÌŠ¿»¾6õzí|à.€h5ù¾,Ý Wýêê—‹ÕQ¯O-†ÒcsX˜Ôv¤_=6wÃp-‰¼XÝ«—V×îõú©Õ=lgSDSÝ‹÷u`ÛY$êßÓŽY~öFr¬¿d*!{µãÕKÑN¸Íd$ )qAÉM€šÒì)Ìê™ãKgNûÅ_ÏÀ.:"¸?Ò„‡,ÕnVçêùØåˆH¨ÅÅYq=€—êâ"üÅȦˆ”;nJ´8à3{êðyÿ“@{ áó—©¡ºú'6€‹Ñ €Q€5)@´\»x1¨ròÔÔ©’ñšÐ€øz`X˜c%5ý?8ÌNÏê(¬&øOÀÀÿxÀàúNy¦üêµìÚ7PÑzbòœ*9å±âÙ>¸ÁyœÆ8K€ùjSL‹¹?‘<‚`TþWx€ÙïÍ4ª3Å0#Ò~¯ÀÚz¦¦¦4é5ô?ÃϹíùï߱Ó‘AYŽŽR¦ +Š,muý8 èÚÒã1±–;„ûµ×nÎTZýV{ V“ä’*€ô»šš‚R +z!”ö¬–ÆvvÔO›+J¿•Á7?XBf¦-+ÀFÆBÍ»›ÂàfEo{§&ñœÉÀ=ÏAá؇ÿ \÷“zí¥zmëÈLÀ‹kõ¶€·pW_Ý[¬ÕÁs·Ôm‡Un°†wµÊ+þÌ30€­8¾uƒ<ü—¬¯_Z=U'%R$6ûBÍõ× œÿük¯/!«Ü/¬n\J–wãTíB—ÚúêÔ2WWÝs¥Vý+Î[Èù0áuß;Öôg¿KØùKJ“Kg ,¥3¡ˆÉsYêssäË(’<\ Ê“HmµqɆÿüæöiÃ}„Ì¿:â€ð8‡¸Â_ìñ«õ/Ï€i?W¸5˵5ñßÚoÖ?ãeEƒÑ&€“z‹Ö­`aʯŽ^¨ò˳ÏñÃ?°?&‡C‘µÁ?–|ûøÃÄD|~Úê×R¢Ñ Ïá!§û9„Êøg`d‹T´ûÙW³‡:-À.§r›»à•ZG§ Ížmøí’Ÿ¼Ú†00 óˆ‘p¨Ì?=$“/H¹Ò† h:ù}å äh9Ò©ì†Ç‚?« 3ЫŒ–T§ž}^@¶†“Äþ SßHÜõ^³g¨c|A«c`hÍö](†»Y”3±þ‡ñ?à?;ÐùArvzzŸ€ÂÀþe‹ €Â%Ð_€ñèq<Œ¬Ö_²£›åZí5)€«.ÔìÐû|xë—æªõ@éÕõêKõ›Ðƒu!v9Ìä3–îñɼãsUûàÓó&÷@Þ¨’ ì#­ÈiÐ Zöð¼fgXÝ9‘C£ñ}EVÌ¢À Ö!"õ ׬Vÿ*9B;+¬V_Z¾À¬a„°¹ ÷ŸaiéÌñÚé“z+L$1,œÇ6þ(RµܰeÔȽ÷Qs¤Q;åiÃ}$B|UB|Ö}$Ò-.Bâ)ò^Yì{žÓ þÿeU€ÀÆâbXük~0Z +v„¤^Óׄ’ŹÅè6h¬¬-´Z¯Æ?ÓÜLò1p€úóϸRŒÂC"þ‘€—§gv®ÿ/g(› €rþï+9é±büߤÀ"¶ð!cÀð9ÜeæÓ÷ó\A²d|˜píÆÇŸ}ôÑ£€Ïj%Pöc\Š»VxJ§çì8­K«{qêÅÒdBúô‹†ùø‰¤iÌì/24ûmˆ¨o`æ]î@»}ìôìd7P kÝýn3<”º–À6Üõ›‰ÄÑVñCÞ²|ÞÚÛå™V ˜:šá Ì.€Äã»­ÊYûß)x÷ç§!Ñl^ ÌLW@ú¾e†°•ò‚’½oPÚkÿ2 ^JN©^»öÍ·w›à´—¨õNyvé4gšì8ümõ¯‚‘[WÉŒþÚW¦QU€[up õö.lckw6ÓšŽÊ¨g1õ«›Uzå™n¿·»k>(.”šÁÂ*è$&™rÔ© f"p«¿Ûë´èv¯ö›]²†ãìëîÀæÏFt›ÀÞQZån4’¯\5]"jÝ·rÎÐoþ2€î[zК­Ü?ë:v»Ô{B¾÷䈑 ½]»Ûç×iöÑõlÑxAØÈ¬}Ú\²xj†­ÿ1ð?Àÿ‡û¦Ïú5ÀÀ9$;ü¸ÂaÀH;€°þý£§:Ĺ»rq9^.ˆ»ayv¯Üî^°¡VF;ð³?láFmªÞ€¬¯‚¹µXж[ßå?V=_8ÎCÌn0sýBò„ˆáz­H\_ƒdx–×j¯-°œŽ©gE.Ôë§’I~a"‚°ž%»ôã¼Ë ò™1®B`r*Пä̱¨²(ID¢vÊs0"Í~^†Ts•Hæ.*ò†.‘´ÉhÀ ˆ¹=‹ÛbÑ2ì(BxNŒÒpÐðôÚ@¦žü þ/‚èÖ/Ûú¥VÅú¿¸jy±ÊV»V˜ + + {K~rhX©-,¼ºþÃsߟ™y9úüwàrè7€s…‡$€ìX€Mì\Oû¾Z 0 ã(ÀÀèrÒã…Ó}`@X÷9Í V D¢Y +€‘€à¼“þinŸÄðˆrm§¼ã· ðîVøÛ‡b‚¾x^™+½bO¬àÅìàYÈüOV~‚v-ýü¤gˆ=žŒ”Sß®¼‚J?:íSÀ +à<Â÷)Å›à¢ð@iØêPØL¦Ö¥­]¼ýUßÈ;£Å¶1ñ§[˜¶ ˜ÑÆ5I·€Ò.u¯§¯hÆZ°ÖÄøµm“ó ó³4}ýþzý·6I ÓÜ„°º3³`œ›Z‡ß;´ŠZà¯u÷haÜoÿ +”R5Š{–Y»A[ØIʲe”ÜÕ_õߊnß]ÐZÚbRí~«Üô@Pë4@Tmimzã$²k !ÅP}ýõ:ŸZͯQÚ²€ì¢–«fšd!Æ4Z'¼²=¾AMÀ»Ò +J‰É•˜0žQ«éç‘)£€­åæãKyÈÕöUpÏ– h-J÷;eØçéïÊQ¬ƒiMÃé¸hn¢Úç*5ßòf—˽~çW¨]ZÑCë +<ɾ…%[j­ë?´ò4jýáÿCøÿÀl´ÿd(„‡ ž¯¿¸?päó ·`ß>p( ë>6×ëV½×ìšÐ,wUû\œ·àzP7r¯QŠ €õ›«˜Ëv È1AN”&K¯…ň¯ÜÌ^Lëõ—ÀÌ@Q]éuèC>‰¶^À¨^V‘*jŠë’°¹^ß°Ëå¥åÕ*;_™;•ÙˆŠa:S”e”ªgÕy®Eׂ +D{=?a°T=~þôI´µ • (â…%ªa.Ô—Qd%*!ª¯¥$êDêë?¿$©_Y{iE@£Q¿ßpéòeñ?=çÿ‘¸»®ðÞ¤²GŠ«l2 üOŠÏO^NM=…áàÀ³áw ü«-Û#°þÁ%¾˜¢ÆôÿKl`í²uã$ðþ<Ðp @ìÿ˜Ï <$‰Ø’O03 øXà:dˆ|;€w² à½HÓ…Q+ÂPÈ0ܲO „ï•;/Kݰ²”<€?Œ-n¨>D¨òs?~x´€0…±á?ûúÓBÆý´a`øÿI5ùØÃòÌÄ3Ï â &€’-(@¶ç,Ì5nYw-S6P@ÿxÏNdá  †äV¯ (Ŷzø·4ÞÚ½ÚÇLfïè‚Ç(?èPD‘hI·Ë6îoN×Ü[•yÀsÏiÚé¦gÊ››méô[½Jœ´s ¾ÊŒÕÜ["5ž(ZwwEW´*¡5*éë·/_Í_~œØŽr$3aš‘À®X¶hí'ô¸›¦n{+ Ôà¿]㸒N{ºÔ`ä÷±mÈ­?6D6ôºTïõ%b,)c—³ÝJ N”¢5@Lúꥣ‡à¼m*•«€p³{’"‰2ž’ݬŒi“!ŒÀ¿½22QŠMváZÝÉBÌ DcV˜×œdº 3b%'G +\.‡›i`}¹¼Ùïÿʯ°¾×êÛz#i-™š©DÞÅâ´†·˜NÿìXw«øç‡.ɹø7c' +ð-ü'†\Áò©’ ~‰Œ H¦kà¨ÿ<ÉLêF}nÍdPó´ Ë÷ú—D¼õ¹5öfu +ðN ,f€úµLl¯=9W3úÏ¿5ëìþþØ8€úœð×§ó‰»Ó1¼7ÖÌ‘×$!¬x¿P_­‡ëë{§¢=âÞÜÜE©¯oøU€ݲ†¿Z²A€ ’ý_­-y!"ÿ@­:¹t}€¤“+’„PéB½!@¬ˆ¨V_ =3euu#éѨŸrŸÕ©—¦ìcqdp f¡ÛCá>ÝT—[ñèÆºa@áˆÁ§çx +b­>h!bhý¯Õ.ŠG($@¬,.Úk4d!µÿÎÝ}¬dÄ? ÏÎÌ{&†;ó…ý3„‡$€ðܼüêõ?ûøïÂGg_ýx +°oùC¤9Nò c°îó'nÜøÈ/÷d”Iè”ç2È4 áûC’³síCNö|ö!ß³IØ[áøo ÀÁž!/Ê&§°xò43<ÏäO–8þ™£È‘#iê?pÀ,eålxlŸ«‘ú¤"â´õn½t3µÂbÖríbQƒOXñm?}Ãzqi¿¹µ»û–}ðîB:åiŒtP ¹ +fD@pÔßú@ÆNiÁÚV·c+÷gŸ; øÏcè†ï óÓú ‹hÒ¯ô7›ðBB™Ò”!°¨ß:U ´î5ÁÓZ·°§¹®­Þö6€s_mw·9õ|Ôâƒ$H£eÔqoo¿…] ´6b®¢Öƒ¥$ægu€×Þ¯8¤=²‡€-”ê¨ôú»Ÿ¢3€¹ÛêƒLÌvS{¨Ö4vÒÚV„j4çZÐz[bÐÜÖË¡jä²|Àš̤ò¥‰å¯ëèì XL´Â…¼†ò@‡ú½Ý.9Ÿ{-@G)g‚Ø+ð?îîrÃô¡$'ù…’¶ô{ÿø)jx5jÅ6‹ämkÚ3‰Ê‹(ÏõHâY°Ý9$A¿“øÿ  `¼àG^qqß‹uÜEI௠ü-p“ÃA`¨ŒúÏ“ü¯½ŽM[ŸKáx+ òjëõ€\ñ{=ÁÿúÞâZü[ÿkµ‹ÖÀy˜Õ@d|bo’qýøyp65ȼð.N¯ÏÝJ 6°bW߀«é†Ý÷Dæ÷òrm ëÚ]t¸»~óœìU±ÿ¹hÁF´Ì© ÝûÔ_²#À¥‚Dèß·¶â¼Ÿ3œlD Àé¼±Vµ‹@ñrbE½Q• £`u›ü£éjcµþÛPãJ£ñ’”èÖÖσ„{“n·ÌRæP˜€¨xtè|zUfOZìCÀ W°ê »ö«k+k:‘] ;Ð`ÕÑ“48²¸¸,GgÊâBeÜ0âPˆ@²ü p&0DÄåð|tãú; ³Óå…ë7>þøÆµä(ÔÇiŽ“8áÀ°_ã†äå!@æûÅ\šì³€GÀáx¤*€ê_€ˆ,b¸©z4ü‹~`zLÃAO– +Û>0>ý¥•A b”¦)üÂþ‘øû™rÿÎd9Âr"ÚÞ‡€·SÌ ¯.%»E©Ô‹Lv'”ú}` ØÇ ÞlÃjÖ`¨€ˆL6·€~d·u{«WxÂ;ÛÛlYÓ œr&¬n0†ÍœˆR S‰NíÇuÞ^4áü:0#˜ô*½ÍJÛþ€ì ¸×iÍë3¼E_U†«°ˆÖoÖš5 žv»Z ‡-”GÁøÄZë#ècïîþ´†Ÿ¼µÕ-£–¬tATr ÕÐß}‹$;ïºY& ³$˜p¾ÝEWNÝ·%К¬Rî·Ú{nФíÖ ¨‘ßHZ“C\GÔfÓtãb’` ø+…0°bg€á˜~nT¼ +4z¡©Ï…pfp¡r) WïwUÚ’µöÞö;Vêïö»MS»-kJ˜—&4{-ÏìAÉNkÆ{Lpßx4‚@H÷„Üqð¯0É㾌ýÿˆØ÷˜¦ Í"C€¢@PΟE 2äà¤i÷“¨ž¯½T=–,šWQ7y`w?_¿²h=Á­©ËnÔ°¾±်zlðÝRcêµ – (@ +”H`¨Ïíe¤.€S°ÝW_¨_ZžËÌE˜ÜJ¸Îuý£ÆÏ?ß[\†}4þݯ“"õ7Öÿo?Ë®˜—”4Ø)ÃyL¬¯8fr~uiª1%Û4ÄéRÂjª‰ˆ¹Å䊈r óÓN¡=¬ãÖþ³Ÿÿlãç·Ü¸ÐX›Û{ˆD]"ióÁˆ{:à«ÊíÖpÀ0óñÿ©Ä@t„©ãßn€×.2¬¥T…ù qbòEF.p„ác¤_³?$ÓÓå}€£Àÿ,Éø?^T>ñAi?üè¾ñÎÂÌô¬_˽q}g'¾ ˆ l&ô0(ìÿGð„¹ ÁHþÁ*´¸~ýÝ_ UÞ0‰ùL² S‚ýÏ>P$×o|6 ?PR}xlÏ‘š¸ŽWåP?®É à àÔ©")(@Zb[Â#ð' +i‰ñ¹‡²“¥ï~÷»§¾ûÝÉïº4‰ðvFü„fÐs·Ýÿx×ljO¦ @@‚]ºì°»û+ow·­g|«]n¾&š†¼µ»½û ² UZ¢ºÊ@Q YJ +låÍïLG›¿J»Üª”§Ÿ{îìs`›‡P8LÏôÎG#ÀJ¯Ré@4’±BA8 L#EN€ГOQ©ÙŠkÀn­USoýîî?ª>‹¿òs8•fGËÐ.·š’™þ[[oí¶·³Öh Âs X&gÙ­¹ˆv¸"ãšÚüÑÍgâüä€Ô)WÞý uC§Õ³$—Ý„íVâr8÷IqËÚ Pí< ·«[Äì“G¾ÂyÀNo[³ Y®ÌDCÀr‹¬hÚ.£IÙ:ÿ|¹b'þ†@qÙ†¥©”a—}X…)Y ´‡Ó¡ƒÖÞ/6йÐ3à’œnõ -ìc?AÐÖÏ·vmÚ'ƒyNÈ^ëÊÞ©þ'ÜŒó£8,Bý8™µÀ~ 8øÏõ”‚œË ‰è½?ÒL„‡(Ÿ.$Pø>rb¸¾öR­` ß^#âîRë«olw"ïòKÕúÞTÔp–÷Ï×o^ù½¶s­zÆ× +£ÚÏèCl:—;ÏcWRº |/H˜Î‰ÚbÃÛÜ€,4¢€¹ðûb!‘ ôX¿òûe,ï½ãvD`ê—Ö×7Ó~ +§_­ï-_ru0@IMÐorýLéäÉìÈ!ˆjuC~š«eTüí`C-º4øÙ•ÆÏ6össµÆåSr“ÊÀ—¢ <Îâ¿Ïs‰®…@üO€§Y0Šòñ áÓÇž.ÂÿÝÇ·¬ð'`§©;Û @ô=¬dÌ•!³h˜ñðËØè@†‹¦öG~pÖf,¤/¼ +Ñ©àÑVÉ©Žñÿþ€‘*–¯'C¿`é_Ì¥Q&ÁTöÈý‡ë; ï|ðágV<´' ìÿaæ óf(À¯–Né ø— Ú"$Чâ˼Y||ã?âpdâHBùžœåÔ˜°˜M LéŽa'„ÅÛ +0Qâc÷±€1®)óÛŽŒ`Ä0R¯ö·¶"ò¬Ý¸X‹…ØÚÚÛl%ßÝîW¦[M÷äÍ7RÀ¨=Ìl›n¯ÕžåÕKðüs<©€„ÿ"]ƒÿζعÓÛÔÙ+†b™¿kO>¶gëƒä[þœ$p­£îݽžG 5Zˆµ°N½ÝÆJ—•·€vl߀ð[T p E¶ëå÷“Öš¿­®ýúÑ9ÈËLó•Ò¬ol†ÓÙ¥Ž(ØP!âºÈÞï|Úk•­ž§Ðä¶¿_2X£ D=rÒ0²7¼®£eo‡–Œìs.T©Ì”ýÀÌÙ³Ïõÿ«íö67Ê3s{Bëv:'HZë¨`µZ#fwÊq’ôFqz´†`ßW!Ka#leÞ¬ÓA1/u1"­+F²Zsw(ºUMñ’Ó?ýò³8*£†ÿà—<Ã.€`Ç– ÿôIDATÖH‚è(êD“­ÿ𤾀òYF%GÏð¯~ñ¥×Å;à¹~©qÓp{mr Ö/ïcèÿìgÿÛòOæêË+ÚÂBå:vðÆÍõÅš¯=oSµzæ‚UïÑÍ_!óºês·¢G`8€Ž«XÏY8Ý»ù •—¬¨Å·6öêöAÈ’[ÖÁÝŸ_ény®a³Á{uõu”ûýzâ+È—ÂL¿Uk)µŠö?úñ?æxýtédéÌy+âJC̤4gù†š=tæ2.èfh ïMçÜ[~iyïÔåøæÐeßàc‘î­+R«lçš<2?ŸÒp<ÕÀ§:X`è?Ö¿áÿ­Ý_[hÙÐŵåêâÜO“ƒ±€êšJ6ùÈôtya?`ÿ[€J}Gá `fG|X.k‚ô÷€›“Ñ%àG¹3'1óh’+žðýë˜ûŒÂ– ø£5™Í|ÄiAò\ÿ™À+ø=|دMý±BžsŸ²‰N" ø@Ô䀹W÷ø€Ò‰\@è§_åÿŸˆþ!Øÿù©K±$ùî@‚µV/ó^fó›wq¶Ãf0uºƒ¤”Ä¢’X;{Øbžå^wK°Á°ÜÝÝŽ(¿­^ÔKÿCß`9Ìõž_‰»ÝÝÐ$ïov²Á?o÷RÕçΞ=‹¥Š:ž_Ð✔½N¥õng6;€´·ÛVáre~¡,&ÆU(ízlðœ=“h©µ˜‘µÆh•ÀºòÊ ;úAg=V\tÿ±²"œô @PYiöÄaÒȽ¢¥K‘®ÅZt©#úƒÿ½Šf5ü©Óo¢õn?94$YëP6i]ÆBŸi +g‘שóƒ¨ÌÀ­òpöc¬·+·€Œé ðÅðÄ=™K¨B‚ ÉŸ^ $ + Ðç³’‰(aýç o í®óÛ±®Un-X 3/D¥½yu¡ïÑH]Ÿ~„œƒÿ¿bµxcó»~o·Õ²Aï=¸ViõzÛV­c—b­a´ J¤ (O?ç¯Áå*n¤ìGiÀŽ× û:ì¥ào[º„Ö,¡µ­î¤ìCˆÃ#¡¤6Z_m_µwÝ&ÚFu†ÚÊ!Ögl'}Ýà¶NÄä†Ûhm§º†Dýy¯Ë™9£d©¥Õ §µ“zs(tÂ’We´ezZþúXÑo'PCϲ¶Oh lº²Ìuh ÙÖ!{’Þ~0©ÍÕuâìóóåç¦gÊä%$AÚÕªLW6Û~;Y + Ö\¡^vÛ*š!­Aû¬u;´f5§AÝfhMóÛmÚe +í‚è‡àÏn­õËå©p÷øFù!#ÉêŸßÇÚO¿z±…˜·¡XœMÀ8“|ˆäÚèqòÅooýËÚ\mïVã·n6ÿyïæïoþÜÏä‚Ù·þðû/ûû›7oÝÜ«/_^^¾üI|x·ÞØØør½¾±q+AfÝ÷ëúü…½¹×jõ¥ð\º…圠Þ6|ß/yóæ­ÿüûßù_66ön6°æ9ý— (GãÖ—{·níÝúdyq­q«ñ_ †¹Á6zôOÿå­ßï%E6êçsË·~úÓP$þ}}ýVýK,ó××êÚç Ò¾ùåÚÚ¥K¯×{ú¥//Y ¡¢Õ –jëS«Ð€ZcïŠ\¹µ¾‡œ¼Á¾W~«¡" @ãÖÞ½¹ÑØ@µ/Q„¤¹nô¸yó÷ðyéò܇¹á!Hx!2îp8{2:?y SéI‹æ¡íúì8ºfZû ö¤_^Y»ˆY³Âoa&j)¦²ZâpX^.g£DÂ]õû…õïLÂüqòPÐÀ]ó#Bñk7†|Àr²÷“÷?¸À¾‘Ü÷’`?í¿  ŸX@†ÿ}?@ÂýbMNúáUV|8ûc$ò|Ä0þz`÷é ûzB.pˆ|{räˆõÿAŠ'è°ä*€(dÐðd,Ý)Ú'Ô/v‰ÝÒnaZ†G58ˆÓî~ºû«_õ»ŸÂ€Áé°;ƒ<nå$o¼ÎÀ°óY¶ðÜsØÿÀ?`>Î:ï©ÄýöfÅæè­n³¹©µªB eP SÚdËtÑÚ6µŽrd_mµ«šÖk:Ïù»6ÔƒŠË[Àÿmµ–„bXڦœi7[hÍåšV.ºÞØþ#@É"Ž dö¬2霕N³µé‡þüD@há/¬ ôJÅ~SçBë¤všÆÎ‘e–‹‘2«#…ðäc0ƒô»-x WQ©„ÖåfÊvæŽjMfA·c2$x5Л™H_­õ‹ôº mòôÝ^o³o¤Væƒß˜×eÒ0iú r‚ÕâþÐ8?†ãEr3ÑŸÑÙ鑆€ŠÙÏ•û„8“zTÑ‚+?ttî|synyey™ÿâ"ÓÅEW¯±jœ[^¾øÒååË+®–Õ³‹3/Íñ3²_ü|kéXP{vI›óÈ/Àþûã5“Z>wÎÃcÎÍ£ÂIRTýÊò9L +õ`¯ŸäB.¾ôÉòeVFâ‹: JÊ +ÿº$«+/¥ÔcS.t +ùNÉoÍ–J‹çÏ-W‹kÉû†,¾4wyy±æu“#ƒÎ9?µ—>ùÉ@‘ÊK>#¹ ðø–ðß'©ô½ï•ö‡ ß;_?ÑNèç%¥x·\OX!*±•b˜ÅÀ©À¶¹?«ya±Gã-n5u \õS6†šµüz}”áe½ÎÌDr‘4–$›8 ?OpVü,ðu4IÞÀ¾uæ‚zð…8“¸° ½ÐºµÕ𷢑SgÍH=£¬>tV¡Zh-uÑZÔºhh¼_'ˆ£A~™ ­…l©[ØÏzf»ëR¥*…AÊ™¯²h|´€£§‚”‚K¤tô©h=à9e&á M[9Y)-àд2­ùYF¡hÁ&I—ø:×Q·ÕŠÔLوǵËséCŠ\¾µ¶¢o¡qko A|LxÒx0âæàaºê+Å“Ä#<ððÐý¥†¤/ûú% üyû£ûŸà@¿ +f¤á$Êq†cNÂ>"tHÆ{xý£@¸ÿâ?6ÿqìÿbüüñŒÁ$yþ.<3Ó³³åòììË ×>¸ñQ`ô{Á¾=À¶x?{w¡‡-ÿMZõ‹w‘Ô4ˆi, yŠíäÿiÈx?*;ü‚|lÀƒ=Ü $¬ý¢À~ €Œ ™û¾fzææ^×`jà·NúîwŸˆ>„×ðÝÉSQ ð½ï}oqñ{CÃDMBFÀÒVKtse¥¥Éó뛊9ŽýÚÝb K¼ÑÖÅ6(6+Î’0„”çgf™ [Q,š1’$­¾hí®  + X‰­ð;;=sÖ°Ê|7–Ëm? •ŠY¡Íƒœ4ËX©•Ê‚Ž +Làf@©Ú¢³>‰¸˜J +@nªu3´f ë_2{e¨…(Š%„â'ÐS­YÝ +­ãÚ>UŸÒ«Ù¶­c¥Û‹Km²º½ÕmçÎÀ¨N ‹²0Êõ»«5‡ÖfBh=¯R^ Ë˜_e!ðõj¥Ù­Ì7;q/®šŒ~äÇîÌùyñò9ØI ‹+ó%q‹"ÄÏ;VvêusVµFÏf„îW~Ý¢µî‹Ö~v€=´æ2#³9ЫGi® =ûÒ–@yÒMÚ§Åøçq~$^FÈ|â=œ’+‹ @òA²Ø/í8ytº\o|Òø§z}o¯ÑøíÚÚ•/õ†7önÞâœÛ¸µü‡/­ ¯¯7ö68HøºCª¤ßØ»´T5¨nêxɈzS‡{T汦¾lßÚkllì-_ü/¤p…A”ÍõëRÝBãëLo¥¾nùÆz©È•+{·–ÿ÷[¬ +Eö66 ¤çÞ¬aÝÍ ŽÙ»¹·¼X¿äN¬OÕúç«Ñ;@Õ6ÿÕÕÕ¥ZéLíRc®qsã{EÇz ¼Ú„"—Q.²áò"Xol˜<Š˜œdíÿ»§"êqóQ„'ml/i¼¤þ€¨ÔOü€ Vç¦&ýÆb‘x¤ñÜ'àûáó_ÀŽ€küßß``xffg§ù øö{€ÿ×ÞË€GÀ~%§z?‘D {~®þë×vÀÿ\ÿ¯¸GáØP}çG<òïH|0yT 6~6¨¸Ÿ`ûÆèkÛH¿4w†à´à° ˆˆ8'èÐðL0éFÖà{üe$ÁJôˆþˆä„€(ÖFž%10ßÕHj‰x@‰Pº•wá=N;5ð£%ÃHùؽÝã$ñ;P8ñÏ>'`ÛÎÿÈ^æ-ùËíN ó󘈀6ô|JÝP8Î…–bNßOöE‘AóBit€vy˜¤IxBkôI´…¿bí;gPe±z&h‹À ˆŽyãRÛ6®ovdìÛ–TtÛ½ \­!¿Ê³ó¦]4ÌzSÜê7„ÖÎË‹ -æ{`¶ ߟ& +,Óo蓪§‰µžÁö €>„¤RÒºõ)WÞì¨4¯^å~wí)öíw;b>i™ùƒdrÓ&†d+Ìãînò[˜¨™ú+1IóX3?ä`rÀ€ s¹œ÷ý³eíõ±ƒ#/„¹;b`àzÀ³BÎÝbÝ%ñ~u}ýgVð‹”«Ñ‚ß0¾Õ¥ÒÉR©Z:~¾fãz¿ÕW¯ê@(ƒµ©£mAc„OI'IQzµ°° Ù;w9ïôó¤È%¨Àåå/ û»t‰snÛô¶Õƒ6C–9F mf€QVùÂÇ{_;SBÝj­þRÝN„B8ïjýu]h’säu3äÒÞâ-¬üÕ‹«u)‡F&\Îý‘Y*òpñYñÑH·vÀËå«˜ÚØ0ç óÓÉÑj’'$Ü0cqÃ1L Ü^~™VW°%õÚT§&Oä¿8 ^”&KoÒ†ô”,ýòáav&Å„ûœ À?ì€ì”¿Ï *›yyaçúG}(F¿‡ý8€œêýÄ$˜ð|p ô¿ñ‹ëo§u¿d@ò$ +P@¢iMöÄ7 ð÷÷~€4Ào}ô±UòTÁ~…7.npÈ` €k”­^” èÈ­¿u1€ÐÎþ¢#€“ƒ¦€€L$X)"€èCá/Î¥Íᪧto‡ #”Rü‡`ë ðN`ßïzòp buÊ^'ä¶ïþò·²@»7{D<M’²T)<ÉâRáê\›=1‡Ê#µ&Ð7„âG Æ$P¾¿€k×à1…ÀOéxmé­HjŒ€ã‡<î¼(Ós%y +à:=Ž}…Ê4ð-H—4ìh…@õ8+§I€h½WÉ;dˆ}£ ¥wÍ›æÞ†Uˆûê2»+ììUQñ öÞÁØzEú 8\y‡oMö1dx}àØNp»±–ÝâwÏŒm4lÂÏ ¤Š€«Ñ-o̧åÚy ÀùÓ“ ô¸‡„ÕÍòy;öó—âò¹‹æÇXàõIÿ¢9`îÖ¾"®âŒëË 6 +­·/ÿåK)N?è»ï­-7üz° ËGªçíšÀxäˆH† +œœ< Á>éŠ8ój4E”‰$wD¡Ú*â}š66.zÖÁŠG‚F<<>ˆ«xj³¤—¦ð<Å€§ã°{û@üÐàžT—1&WÖ.^^ƒÄ BŸ=UÔ/_¼øæ8y¹<„ûƒ!5,<P€ ÿJ˜þþ þä¸1ðÌÎZ>—wvô€ÑÚÿBõ·çm À*€·¯ßxïÝwP& {D À>Øç¿“Ñ¿Âù`œx@p€4s­µ“‡ Àg€ûwøÏaûzx¥öcôcNî`Ð + µô8yòt.£¾m‘x&€Àý‡yRÀˆ`&"þ +Ж¨½Z{ȆL@ÞªÒí1“ù“õ‡=jj É KÓ¡€T }·3máÖ<n${Ñ!p?Šn™€y|È ú ø‹Izú]„ÿÂW=YÕ =Y:]«NÕ.,ØPõµÀ˯-ûKŽ€zýæ¹µ À–¤Âû¯ÛÑú÷ñ@Õ/1ö]f“Xö5Ýîî§Öü^¿’ôäç.áØ[«a¤ƒíåé1*_«E‡ÅYlbn§E€u›)zRýáy=êúùÉ3<ñ]4Cäëëo$}·ê—or^æÔñ…ǨpøPò`ñøñÀ°nÈàÜ"N`óSkÚŸü`)lˆ¦$ Bª`2‘¤vñ“O.¿¹V³^¿Xo¼ùfãן|òëOÞüõç¿þÝç¿ûõ8¹Ÿàå…—úø³<€ë;åðþó†B+v>¸ñчvˆ™èÿˆøÿp€ýŒê¸vý½œWIR €6Bù¼Ó¬ñè—¬Ž‘e˜û1M»¦ `+À!À|%<Ú½àx®àIì=uî0ê@ÝÀ¬C1¤¡¾IH}ßÀyà1… U$@Af™>À1æsQÀæä¨<Ô00êhUÉ`êfÕ=­~Öz•ѱ +|."!™€€!`ƨ=—’ ?þaÿ?U1:îððc!9?áìÖ~‹ˆ€·Ñ˜Û»â¼ž÷d¹Ç?NøŠ.é8½$¨%ü·Ç=»äE^KUI0µ÷ÎÕI-8"ð‚ÿßž‚”cõÿ{9¸… +Ä™m’¿wùÜ­†çf•š¨œ€ïéÐFã +ÿúÊÞºý!Õ¥ÚR|ã¥RQ4é0yÒïÔK¸àÑhã\x²&ùõúÆ—sÿ¯ú…:§Quá47×–¿ôÄIÕG”x8|´ûôÀSéK“O™<™Š¾ýaà¿¶¿¸‘œ"I©ºö&Hÿëß}Øþùïnßþâöí»·¿¸sûîÝÛãEÛü°€×ãc‚dÛ?ù’a03;KIÝDG¢uö|Kà  $7ü›}ÀÛ̽Ý÷³·³i\ÔþËÒ\Bþ þýyi°R°°³órë¡Ñ_ûÿ@+€‘fâ Ë=ª¥1ýì·À©ÒÉÓO€<“{° º|17(sf  ÁOö BìÇfL„1Ì—•Ÿ€ÎX€ ›=‰„`„D‚…<‡šØÕàoxÎê8;ì˜OÛÌf@ ‰¦*€y@¯Ñ/ ­ïð@Àp È7ðD{»ÂÐÇXötáЖ6À³à>1ìLn€Èì¨@yZöH[àYzÞ‰òtÉ0TÀ_&“¸ñôý÷(²Í?:$¸C.²êX¹x¥–«Æà¹0¬Óºd1#Ïâ&;¬ÖΟ„T«SÌE°ò‹ÿK©ßz­dŸäÖ¹µäT7ÁÕÚZª·î=ÖŠõ¬Ú;çN*â9â”û¹=ÌòÀâ´a}ýgWœ‡ +¬ªÓºõ½úŠýD€>H@èÄÛoèøâD©Z?ÅQ\ްn>¬† ‚»RÀ÷Zã–U$Ê2ª± +Eöj+_ÆÙd&,>ñäÝ·_æä˜™ö9ZýÄÅfXÿ ¢…¦dÍ8ÀEÛr.–/6~÷ù_üŽá fnß½wçîÝ»÷îݾs÷«¯îÞ'çþQ¼úòÆÅÈÝðáG'@$jh¡àÃÿá€G‘œêý$ï²OÞ!å v< ×Þ¾~ý½w±ß±³i«‚ +¤EûH>€4¾fjNùå5™d€­Ò³Ñ?,ÿ=šÿƒ«F=¥WæªgRX2ð¤VE @ÔÍ?ÉÖ€ö xĶ$œqþ!¾…!á 3XÈ+«(̎ؤEì«*ã£%€cdfôdU€°2Îð#£ÿ¢€ MËt£ +€´£ +@À ÐÀ‰îˆ‹½¿à` €=óf@Šˆc´ñe)À}bÌç‚pžäذ½^Œx9@S_Zw¢ +-Æôs @ºy(Sxâ+î21ýºìƒq~èþ;” C$;ÞÜܽåµè{g_‚ÔEcw²k½@^ð•¹õÕKë7ë«Kv®_:S›ZÍ]îcvÛ'ÿùø>Ïùb{:`—t +úRðÝ:°ÿzcon@Cέ"Ë ñ_mƒÀbs ñ†‹,¯ï]¬ýžÔL’˜*üÏW_K‘ É™ôã…«.ŒW2¤H]§j„óa£þRxö…3]Y[±A@Vä‘…G$ž-I©z<¡Î¦× ‰wfßÁù)HÂç'.ÁÑQƒ–cÄÿEí±1°³Ssko~qû Ÿ3|qûÎ{ü`÷¾ú +0Nç1?Lõ±ÍÿÇóH^Ö£ð2éÎdæÿ“öäG€ø? oG8` |þÉöOãX؟ߘú1*ÁŸÈ^ @€ûuñÿP+€á—}½€þÜ ¿E¦CèF Àˆy¢ `bâ}œÍ³ž˜ÚF[Ô<P!EÈÍîºÇˆI´0Ýýöa}Ñ Pü?àøQjPI=ßf@†ÒÍïãxâ1÷÷¨g"iº$zŸ€”ÛE+€d`3»ß °Gñ ;!ˆÄBknħÞ/«A €wš}€ØâsêÀýÐQ&`o`9ÉÏÛŸ"b”ñ=@mƒ™Á®Ööoìkü6c=ç'ï{Úª¬®.UK'O”JµÉðFü7øO¿»¸®Ä±I¾{o:Á«nŽ€òx$9`~Þ:(Ó½j3@ãw¾µ«/+ ŽJ€í@Ñ +`ÖÜ+Àc +@ +Ä  +¶?ëy0Ú +@­å?V Åa@ö[Ä5íǨá¾`L+€¸üÿ;¶þCRöÑ૯߸²÷6–ë~´oXÀÝÅÆMWòoâ €ˆ‹¬ T:Xõ{;çÏÛ0¹Þ±gþ‚Ž­ü•ÚZcn [=DÔ”Œ½¯ÝÚÈ}­¾ÑøaýfÚ4 ÀƘë^A)<8bìW6"jQ/Á%]{4!ø_«SN©R(¡+åO©zùÔêºøoÄ 1DÌü¾0ú×ê{Öpšt½±²¾þŸëkò$Ϲñ(R¼g#½ð€Çƒ¯Ä;3p<ÕFOcÐÜ›ÓÛ/rˆ@ `˜PZùäs¡ÿöÝ;wïÞ¹mÕ?øæÿW÷îÀË!ï¿?Mõ…W‡<Èæ?"ø'øPO€7þ.<†,À+fg+;oG À ñÿ±$§z?Ö<˜¸§Ûn±_;??Æ ûóbÀ;â(fKÚ%{>ÿodø? þjÀ],b¬ÔáÝðs €Q€ãú8Ð + ÕÌŸ<ùçõûÿ@IM¦NYùpâääþbBR @ŠO‡b¢ ¿¿ ð¥ð À|˜ò ¥C€PãïöcK‡PF(Õà4Ðç¾­žn ÀØ~˜Î¬5-Ö¯îaÃçúøzã·sz¾O‚ñ½×XÞk4~nD*bĈ΃„õŸÀúú­‹këoøóû«8«Þ£ÎT¼Rÿwµ=Ò·A‚û¹ OäÖFÖ¯V»ÔØ›»åB€Õ {u¹b#„´þQ%ž-Ã\£Hð9÷ýËmF=OÕð”<ñuðAäÇ^û5ÿçA†ÉÉc§Vá÷¿Ëøøûîm €àÞ½ñ.²ëþó€!À `œd0< …དྷ|Ù¦ðŠWß¹ñáÞ¯ÇþÐò±õ¼cÌ_ÞýºÞ7øE¬}›eOÍŸÃÄúø1vHØŸMü‘¤ðXp¨' p ð_ñìÇò,–^™;=¶€C1¥ïúå‡\N=yÆÞ€ÿŒ†ð¿h€³`Ï< ÃcÄ€J¥ã=‘rœ8‰žŸ?Ô + ÷0p•=M>5Tcñç‘úëPë!@ öàñb†ûÈà1bŠVÙ0àúC€‡ÇŒ´ð4áxH @\Òp @À»Lྭü¤ýw-âØacïÿýͽ›W¢?ÆÝ[® Ø;¿ws»z¯±w§q®¾··÷¯ÿzÓ®õ0µÿËjÝžøæn€æ ëiÛÙMýHºzÁï…ˆyÉþìY±.þ.û][칪q¥¡Ïacï¿þë­èÖσöþÐXn|yÅNÿ[7íuáKVnìíýþæMô‚lüoõÆÆÍ=›þìÊÆooq4 ¹Ñ€É° n;ÿà Öë×j,«ÎGEe©T]™Zù’KÌ\ĆW˜ÝØûß¾$MûD—[_ÖÏݺå7×7ìù—Sp’[Ÿ¬1wóK? œv|T‰gˇñÑaÈ%Ox +üo0?Eaüä€Âr$ –ã\àÂdiíÍÏïÞ¾ìþá¿ü¿ú&HÀ8yùEÛ¿<ÉP½°óêô c=Ã’að€„à£SÀlåeiÅì˯¾ûÞÇ®ÖÍKâ¹8¦ø;À}A‚0†¤b-{ä#ˆƒÔA +0Ηñ(òj9<¿Ü×`êÀáP+€¡€¸›¾XÉpš!>¬@b'Oœ˜|B>?189a §ÁÿäÔö…`(€7ÕŸ€ñ­Æö0 (퀰u x&°@Tœ¾`G[ý ·`m€‡z@¯?'à–’rðßä/CnÆ=‘/ÿ5 ãmíòÚÊåËsˆ·êõ‹/F„àZýòÜ'î冈¸¬Mÿz­n×¾õ¿^㵟<>y¢4u¬d;Vü³·%Äë” ,EûkN—k+ËsÌ­è}°«F—á·¾¼U½Ñ¸ JÛßÚåúKklEØ5aí2Jä. +Qär£¶ö†Ûoݺé:Ïúÿp‘¥Õ‹?BMrg€Èœ&ITAÎÍ_£Øª½¾¢")2>ý×Z×—ë—Š"žŽÕ…"^ÌOm—xÉn”! !¾b¼…¼ 0â¿”8;xÓ‘äø‹ô¤=Þ°D÷uqQ€7?»_ÓÿÎíû÷ÕW_ßãà°hñ;ü OÃðòÌly'<À?øÿìØ‘ ƒ$<‚ö; ³óå—Ê/Û`gçÆßY`ðß{–ÿ\Iø/æï y +ç?'Û'o³Ç¼K×¢k€` ûóbtò÷N ÎØë,¥/¤õ±i¡üêµ?ú]ýðÿztß™‹nèV€Åûµ‰8€'æ8züW üÂ=Y†ëHF12âà×u¬  ÔÃF<B)öúàY†`8ð)b{ýŒñÄP>à 5Aþ1ZPiŠ„¾!”@ á_nýîÖÍœÿ&O?,6ßY^^üáâ¹ÿñܹsË?ü!£ååŸ,³Pˆ_ÅûÉK±ŠM,ÎÍ[œû¡½³ƒ¨/*šœxaâø±ï ^ï§L÷ z~‰ïÿ1:wnqù‡/{‰CcÃ9§?d=)«rîÜKçþ¯/Íq¦—’"®*ÄÝþýr(Âz?玜myå'+~²=HlùÜK/y G§³èqê%ty #tªdés|râØ±ÿan*oAþü`€þŒ°àˆÀ€WÆö(Ûà3’ +ªoYŽNõ‹S“ß8€ýáÑ[øª€?ù[£‰® xƒ>‘ªzÆ÷0€Z£€?;ò"îS.þ›à/PÖ‰˜*š3Y>—?àWp³K¼ž;»öÎýS̾n,4Ø}¼Ü3Ø~éLéÄÉÓÕÕ©¨X²ù]úHP"Çáë?—¬¹¶üëðÕ‡¤¯øêò$åë”5»ö‹<—H"Ö4—pk>ÆÏEÁ.47oýd¨åžr©a@àkçkKµ¥óKKgΔNV!h€Iž>Z„I¥×Š\ü¡=]4CÖjé[—ŒI)\‚¬íœäQ%B*P˜Ó  üÿo¥ï“—# +°4h°\]ŒN€˜n¸O Àh?B À#y’JÀ¿„ñï(ÿæøËí[¿<ô/pwíÖÊ }s1P>^¶¶u¶†Ä¦Fýʕƺ-è`çK'y™Jçë8_­EûûÕ p4´”Ƭm:Ö¬ +ÐÊš˜›f÷¨­í-/7.²¼†õŸ·yÞB‘5x]ìÇ$¯Õ°È766Ø©'°ÞðkÀ!,$/Ä¥ÀÿZméüùógª§Ož<35u‘Çp¿;ç7éCB‘úÞÜO®x\ + b¬ßZ^K &×.>Ö°vñb¼¨6"áÕ75 oö›€§FN ‹ü#öÏ:c@ö³ùÔÚ›ŸÛí¿=ÛகÿW_ýñÌNÿQ±öã<°Ÿ1K†d€!Zÿ:2(ðø€yHøðc@Ž(;õ{À¬¯à$}ïß þwÞ)ºTƒ" F±Îµ€òã‡$1÷þã€äðcÿ¼þcZpý”k†ú€ ‰¨è[!a‘Ê¥“O 5Àщ£~0<ôgÈ­ümÀD”‰YxƵÐg&yxH?C­‚5Žùÿœ~þ„€°úÃäóœÿ&¢PÄX¿·6§á üeøgÛB—ç4wÓ&Ê7~»¾þ†f¾Ýœæõ=Yº0YŠ~ÃpAÀ%» 27nÄ?_¿â—ûÖö¤‘Nš.Û;Ó€Wæö–ÏÝJÛó˜Iè \Ú[;wYó<6Õ7ê~#0µÆß€¤¾ ¿üS×$„\D€û_XZ…¢œ9ºtâôdª¯ò$*²–4«bœ«E²Käk? –ÛS,®ZœðöŽïàÙ¿DÀä$˜Pª–0£ #æR°0yäTí“Ïoß¹‹ñoë?+¾º øêkä(Àðg#ò/E2)ÿ ~5{xè‡Br;€ ü… ÃæÉ€n\5{"¸p罈¤Î€e¦XÁŸZì|=ºúo| )ñ 9DûÃÿà·Ózṵ³&Å C&ì×àÿo> ¿ƒ²ïð&bd#€¢€ƒ=¦VbDc ‚ßœ<:"Ï8:2qÔö|‡ädÕö7Þˆ×ò †uçø‚™¢üÜúÇŸ7~ÍÐxsÿ½@"ëlëàa#€¢AÝX€­<ÉUßz?l|Ì€}ðwúo€¿8©¿ŽY Žÿ4NÒøÉ¹/ÅÚ5­oa÷õ‹áiOòOõ¹Ÿvâ #FöÞ†Ý +®«K§Oò/-þW#ŽãËÁ {ðÿ`ýR}Åä~¬õžë&žÎAkš3¬,7DÉØÈ߇ûÒ° +Àþ‹PÄÎÿ®ÜL¦?ï;s¾õ…àB|¸€m*°zÁØ„êùóÕ3g04&ç˜-üœéb5+r±8]ãÜZx’ùri½þ‡å ÀÅÆŸ ¾ö¼yÎ"þÿ%‡`ã—€†ì8Æ€Œâ?ª kŸ|qû‹»·aúýõ|môŸøŸ(À@ý€ÿè®_øÐx Cõ ÿÅþÀÿXrŽ‘D>úøC¿Ò÷cAý¿%@[¼Íþ‘·ßAƒûx2 +ý韅Ù÷¯-¼º0NkóÌ«­Ù€Ï†‡!ôw8Ð +`8 yÿ1¯Œé Püò$0ð¼¨/è€ÝgÏØ³ï¾/-^¼øæ@Þxó kP_´Ÿ7~ž¤Ñø$ã}x˜…øû´Ä$²Îûú1¶x@?£ßø“úHUòñ'õPn—)<¾Í€„ûy”\¿Í¹üoò—! J÷ÿ X“|²r®±yFÙ» °l áçy ÈN÷!áwÇÂ6 zZ~òôd©v:Š»àwuÈþ?‹>ÿœ_¯_\¾Ìaµè€wÍ`À@׋¬Ô×°_«ÿtùÜ^Z[špŠì­¥ª÷K—ìØÔëáýÛøÙúúÏô¬7çPÎüÕ8©èšèré\eIü/<:¥¯E@Aˆgˆè¹Ñå._޵lÜÏ‚|ò“‹_:õŒ-0€T¤Ä‹BY Š%ÀSö{J‚á:Ø3ƒ½6æW€ ý㥵O>¿sûîí;_ø @ëþ¼§ñÿÍW÷¾'ú?(Ï& ü =âÿ¶¿Œ*À?A¾~ÿ<ㄤ%ëvHò  ÷ø-zÀùwÞ¹–=V0Ç8ÚÆV Œ LØŸƒÿµ°ï&²„äøè³Ï ‡>8„þZ ÅŒëÀ¾€Ö +`$à»ö'6ÀüfŽNNLN<3‰ý_x àÈ©êÅÿéâ›?pÈðëÆÏ¾ñsHÀà!ð°VLDI€6½®òºÙPÐ|„D‚=)à ôÀöLjäôÿÍð,«£ ÁáúÅ‹·Ö~Ø0üO¼Oæn!ÑOþïÎE7ï• ¨óšÅçÖ/…`âÄÉÒ±Ò*ðZ=þ|ÛVÈÿl}ãæÆ0ùVcµ¾Ê»Y[Ž®„Õp@ò&P}]E­ÖX>W¸†àIð¼¶’bï a_¦"ò’42L@’ü„ä¿t ]V—XU=]:Iqs¼T«.%ÀI6Q²Ã3†"kskŸ¨H„3@aùÊÊå´Â‚æñ…W1 +•}@Ь§8|òé È)ñ `%Z–NYpj +`+€;·oß»}çÞ»wî~e/Àýÿß|kýGTùm¨¯+ DuÀNòxÀ Å X–Âðñ¬ÿì0àÃðܸV4ø=ï€èõÿƒ÷B…¼=ÿ÷e„¼Ÿþdàÿu8Ú +PñìÇHF<Æä‘~Ø0. Ìþ“ÿD6 0˜?(ÀÄ‘(Ì”£GJÕµT0ì D@£ð0[xÞH x@jøíòßß^ØÇˆ8Ü +€cdሔƒä*€?¡€C­þô~¾¸õE þ¿Þºõû˜IrÓž”Gƒ2.ÇšžñÌ8‘=­Áa³Ç?sôèɨÏÉ›ÈÁŒ‘¨È¡tžqÍaÍcõìk~pÓÈ‘¡°Ùô˜Û×Üä§iIùXMë‘4ÏsRâaZº¹—†ßÞŒéÍßþK Ö! §÷ÞÚ¹ðñ'P áÑ©›ü‹ayŸ¡GwCǾu€< ¾ziÉv¥ª³úüÒëu¬Ê“×è¯ï­,ߌY¬nŽJ ü÷Ô k•åËF%`¦{Šòsgk*ÒîëW+?o\ s?‚­˜@íú¹èÀï²ë ÈÒ’.óŒhìGœ¦3Þ¹3þ˜ÉûÉäI’÷ ȸ³éö7™Òù‡][HÔIaA÷ÇD%ž™8ÉN'¿ë¶bç¬q¤™dXó|–¤¹2˜ñ2N¢öÉGLZÝ|sjªg†ù+´|ÄQJN_­âBM1t7!óx_òAà +)¡2{¦ÓÆuý.÷¥”Îé­ÛÙv(Ϭ̊sX¼k±É·Ž1Íl`}üGÿkúÙý¿ëœ9}lÎ~â;€Ýiv[ †‡@®7V÷<«[3[&À‚ +žýâåeÃü¬$`[ø"ìQ°ÔwQ$Uø_±^S ÉQ DSÃ$€€~ôùñÒÒyûPÎÔ§æ$I¤ Êà«ÀªVÿéÜOþ)Œó#1 €„l¬èX¿tI/ÄãÊ•+W’IÁ+8ðˆÿÉþÊýbœ} +†©IÃ`…ðQ³ûfîÅ©„ ““§ª «îÜ»mÀWP€»÷"þÏñ7Æúãþý2P +õŒtPAîçø@;ÿÆÇŸÝ¸ö*Ø x9<×ýð ;ˆî3þÿÙ$àƒhä¿“ ÀŽHÿÁ8êxû¡Â.þ®-¼ kÞøÙqyáÚ kÂq òÉ1ˆ$s?{æJ§Çõ8î[#1Ê~@²ÿ'&_ 0 +0\¬êÈA€Ã€"`àŠxÀ®þS @HÂðûµøÂ>ÖPêa#€Ã=’Há°»¸áÏè@ŸÅ}cØø¨1¸¿ˆMbJÊu€2 .1ëN ¼eµðÀêž'ÜG‡dòèI#;Y¶J$ì±i>Î$¨Ezn,¶ —'IŒ§ÝDÆÁVG GQfTõHÃÃB]F±þ™£Òó‰Cƒðw"KÓ™üDÉ‘ÿ´œÓ÷ÐbRLGÅäâܪí¤Ð<Ô7i«†²EmKŒ¼üx+N²ÒŸGø/_þç;™ÆÙù.£ÿ•Ö£Âk’f.KÖÖ.Ö_×À^s1½Ó&äÒÿŸ¼¿ûãJÓ|QjCP™åq&Í4“7æv¹²™íd鄤3Å ²•0A'­(:»Úƒs–­–ާu¡’«ÊP7FÁ@ý)ºœ»J»=bÛ°g—ዚ6Ü35s×wý'ôÌåì¹™®¹8ÏïyWä?$ùKæ¼±bEÄŠ¹žç}×»Öz¯!Ü-zÅàÕbU,t=;Õ ak³²¶Ôȶ„ÿ](ø?Á"òÞ°Í8=º‚ UÀ/dí tuÁ’‰t_´ÛîøÔð "Ú©_Ê =Â…®J³Bç³ì"È +ü~‚q<^výs©¹¸X_øtB9˜×è”éXb»‘Ñò!*EJ“HoëeÚˆu»ž^Œñó%å¶~.TF.* ¥à¡VPÔ~Û¿XT…öà…4Iq€ö +ê ;³Ëïp7,‰Ð tþÿÃòÆôôÙg¨ÿšËIâ…«ÒXû¥ûå:…÷‡¤´üâæÕב`åÙ3?pŸyá¿Ù-¿6ø[\  ¤!×^çú·–×ww_ßM8_²‡Ä“IÏizý<¼æLXÞ~ûmní `ýcZŸ´Hýoœ·€X¶AsŒÿÆñуúy"Ä&¼Mо ËÜÂQ¦ê©“Q¸²ÉÂzÂÿí|;ך`ä0(Šä ` %R”J÷kÐ!¾KÿVÍÇù ‹+€ TÜ£€é±¾R?÷oð`> ë”߃т—E^†B¼ øc4m³Ö!ØÂ'°ÈoL˜Å©C˜àÎ[‡@Â>Nœ~'ôú½› ßÁ©¥òÚøX]ÆTÕas†ZïI»ÍAÈGZÈ9 à”Ԋ㹚ïbÞ7ìë?63³HÀçûÊé,®égF„ŸBÜÛ±ùÄçú2å•å3ÉÝbÍ“×2Ó¤xêT]UòA–üðu`µN€S•û3¿KopR¤’O ð)á¿ Õúÿ)BýZÕ-9ÀŽ€úýr` ±bÒÀE¤¯¯5g3ÖK¢à– '¼-c?°¹•ïµW”ŽpV°*ý3ëö½“ ®eφX€âк%¾TÈV‘ƒîÆúQ¥¿EDäU·úU‡H9Ï©ƒ KMW66’`q‰îŠ{¦ˆ„¯Ò-ÈfТDÏuîXD$bô¤xb/뢅@?/·ø«IXJÀ~6?©VÓ‡ýíþ´ÔLW€+tÿ}Ç&q0@˜P©®oð‘ÀÇ© ðÙ§ŸÿáGw5úÙ ÀÝë'E=Yx˜ó#A¿ž÷‡$ð_xxóÚ®RGÏž>ý|i0øúÇ‹¯%nªó ûw„àõ]í|0Ið?žëÄÎ]½ñ¶›i8(ëí„þRÿÏ7Dè`ëŠk§÷) hœ§"`ÂÀbÔG͇`J2¯(|Xé[0` *ݪUJ½WýJÓRš›Ûø0Yô²îü‘Ñö¡a¸¼ÍFydHÙ + Iy´À´àÇhg0o€ˆODÀ—íà¨V_Íàóß+_üþßÿ=î—‚cuµŠÞ‰wŽ=Å+KìÍrjNŠ4ƒ;G ŽÓBÞ¡¹y½pö“F)~³~¼q¿kMÖ|¹ü‰“œë$Aaíì ¥’‘¤Còsº!çl–ÑÂЪ8O,ZÎÍ+ɹS'ÈdÊ÷é½Ú¯tçtw>Mûæêaè ½ƒ3“rëõxšþtgâ8Oñ4Ù`è•??9ÞiëâÚÉèÙñÔ#ï +’s…â:§fx}Ÿê÷™–Ÿ|æÕ§¿Äœš{·l®ÁÍ‘àU„ÇÖ°!ðÛ)Âû/„èN&é;Ífµ¾AÏ:bhÿa0¤v6܆þót²B +|…~ø±-»y±n~A´t‡¾¥9¢·½>Ø*vú;c&âŒd™˜„Â4,Úã>‡ÃD6pì(_ôT_heý†X#ˆj„òOµAÂÎÌòaªl(…G…} özî²>HXþÕÄåÁHÀÿÿÕ]¬ï5c @L8ŠÓ°àA˜P_¿üÞÝ»wéØ ü?ÿâsÌÿ_ÿÃíÿ€¿˜ý+Ãá8²LölÈ÷Tâÿ=EÞº¶©Ë?8»{ýÆMꮽé^{Áë¯þ]qlؽ²ûºë œ/,ððÿ8@‚ýƒâGω™ði€ðÿm8²”›/š¼ ÿ…ýf£a|ý&á?íÿÅêQåf‰*êþõ%Ø +€÷g]ÿHv2`)*ÈRi¨²÷?$Ä©,¼HÄ‹/¾•ú'«Òí±x‡“r¿V¥€µ¦c-@é!ö”À)´„ÀW뀜kÐþòøûû¯Ãz眰Ȉ5)ÚªóêìÂáåÜ|u椷ÌÜ@>¿H‰ —WËq8hÿc¼×$ñz”š@Q!#<×JÚäÄÌIÐw­¾˜LÞ´pY (ãÔʹc"V@š­;×bÈ”nQ[Î6LCÀl{9öÉŸì-’UèTõ䩳œÛ2ç)¤w6¹L²´´FÇ—‚îQŠ,ôsºœË%”mƾòȺ(€ö)­yæ"#°gí3ÿ8¥÷ûßÿÀ¿×òïÿ½W÷ûRiI1ƒ½¡ í×ïµ?ùDÅ`8Ø.3Ü †{Ÿ}âÃöo¶ÿƒ½ÁPKý„~:®øX{ÎÚl¶•mlj» þÓûõ{CM·~3PP¬,gÅ;´ágä?)ýã÷ùŽö#[Åp»ûÉ~Q¼£=©Ø¬Êâ~ddøn¾O7Dƒ½þ¢¿7à㔠씋bïöþ^Ñþ¦(”l¯ß{y›€æNŽƒ€p½ÙRáÐÏ–ù€Ûe?Tû"ßèŽò” {)ÿwÊÈ ¸µ¯Ýƒ¢¿¯ç1Üß/;Ãb¸¿=Pèö޳_eB¦,˜ÕÉCv˜e>õ­®Yœ¬Yãs?4ÀµÈh‰Ú·m¿þÓGG@vÿÿâÓ?DÃÿb´—ú.+íÂÇY„ø^2y&¸?,Æÿë7Þ +pÖu8\c„@íA?‹¯Ã|.WÜÝݽò:Í Ã@äâ° 6×ÜŸ$À?ZôœŒýÁÎ]½ù6 à­#[L +ï ?@´ÿæ“Òò”†€/ò6ÿ6飸—l`Bl€” ìÿIŒ™ QQÅç$Ëãõ••'ŸŒ„êõ'=[––šõ'Ë ¯Ÿ¤Ê''¦²@ÂpAå1€„ÿ_Ê€Ž€¤¯O3²(þJ¾b?GµPj€ü—±üåþÿù?3±G/c¦º43S‘×lÎ-ÍKª^H=žŸ[¬>&mÔ;5¡lÓˆS:¬âŒµŠ™ö¢ÉJÒ{´õÆO‚ô¼üÀE(µ|¦:{bV[(º$­Wî+ÊVkÇ:Ž}áª4ÒM– +ðɲàÓ¢mÎPÅïÄtu´p›2 ·œ,™Ÿ÷J‹ÇºJ[!5{mfàŠ}˜t_X&…,ÌaûrÎy,S¬ Òö Yp¡ Ž8°èœ#ºã³ÿêöþæ2ø÷†IÐué ¾{i»»ºÓ]w½»©8‘e7„2·ÛëÝ|y Qɳv¦µè³èt×¾?"ÿYöâÒʬÔJ Ju*)^\waÈæº4í|µÑf¾×^ÇÍzt]çCEm¯¶•, kŸÔiÎG ݧ¨A×¶«ŒD>”R“VÙº—·ñ.èæ:ù‘~ Ui}j®gË:½Ì…DIäù-¡¿îΉÛínþ×ï^RJ››Y÷’‚h‚{SÖÑÛ¾ÍÀ^Š_UþõóQ6X ¥àaVüÀ_Í·+å—íÑWVLð ÓºÝèµTêë—ß¿û£ü™Ç²à³Ï¿ø\èdG@Ÿ-û¤.Àáèx÷ê¤`r4@IºO?oýêmaäÙçµ<}FÀ€ëà³~% øšÂ¯ÚwIíê•+¯Y f`äŸ\+ êð?XÀ.É[7oÜžêe+ÍG¶Ð +” €Ç·t§|wìh Öð•ú`ý5}þ„¿—üÇø‡àY +‹ê3ÕVR„%åZV_4 ŽhÆ!=zvVaTCØøX£,+×¼ö=@§×˜5_нHs`6ú¾¾'V&€”Æ/$ y È-h&ç3©ŽI‡i»}‰¹°GÁ¹™YÌ@¸®`‚Âø‡'@p¤l+2ÑÑÎQ\²¼¬uÿ€óY½ñë†t¯“·‡—§—÷‰ž˜l¦^7IWIGéãåöCça*S3É ¡ÜzÌïnLíRð?ãª3-Àžµ»íKíÕöêêjû_­þùº?c£ +èU!d>†KB˜ý¢++«*TŠCáU¾S`×U™¾Œ “)7Â‘Þæð•¥‘7V77¹Ð +¸ª5²ÒXJ´óåK +¯ +¹âºN2l;#ZH“Çð¨ånDQV8¹aˆvf•…Æ‚¯¶^G,¨¨-,ëòºÝÈ +[{sYB§¬6`=\‚´V˜/m/_RNô@DM²õM’Èem]3øJ“yÄ_–€ƒý&p~(â/ꡈ]¾ôe@ÊŒþ¼>‡ +ú›fÅûw£àÓÏ>úŒŽ>“þÿùŸýáóÿä*ÿƒòŸxhà²Ä ¡ës»×Æ=SP²cª®ÿ!o¾þBXžWÚ/˜Hÿ§W€¯ÿ>_4þêm ¸ªaÐNb%`>õW5Qø%Áü½CÀY€d8b<`}Jlÿ?/õyeIÿ^ üZóB0Ã:bŒñ¤çÇÊÉ܈¨ø )¨ŠLxìDyL@ +Ì£å¤dä ¢@»“âÈ”t’n ¸{XÀè£}Ží€Vœ(IU_²OØ,ŽõÐÎû[ï÷–üÇü§Чµ43Ó'QJÁy×á‘¢ùù¥ùÊ,NGx)Âó|Óˆ`æ—Tb#³^º+û­UÏZë=Q¶™ñ("]ØÞcؼg*éJå/%;ZX«Ì,…zÌ!#M[zs™ç±Ð™9€ÄæHíJ\Tt±¥rOÝÙA| b꩜ó¥ùžM$tºCÍÓTÖà22_n”®/:ýÉÃDU–MaM`xú‹úç,‰¢ø¢Õû/GÁÁû¦ÁÛ½;Þì ƒ}jŠËù`ØÍßîûÃá`8(†ù6uØÉ÷P[±Øþv°Óß_§ª@2nåͬ•odA/ïô:ý<ëÐ]¿NÐy{yu»¸íNöløÏµ¾UäÛy1¼Do?º‚‚wn÷I}Ÿ38q¸šö÷2¢«`‡W p|kP¼¢LïúƒOÚʦûÁížN÷ûý=öEo@7?TôgÙF–5kú4›]LÊ×–2ÐÍ eD4p;P*Y¡§AGýÈÈv1Ø¿”?ùh@[Êá`ç½bøkòÔìë±l_i²xT$\ÿ—ïõ¯ÑÔ¼Ž ¹ ³ŒXn½÷ƒ0F #`¼ÿ>s'GÉiË™Ñ"ÖgÎ]ˆ~hx´À-Œ÷‡$Yè èõ×  åA ÀµqMÀW•8™+ +Ó_ øî 8c èk»×~ü†–?¾Æò+šÂpˆàï/gŸ/ €ä @€û„„ý©ñ䓼>Éys9v¼þ“@2„ÂÏë"âá‰Ô#ÀPs'ØMž…P@úüÁró€„Å€‚·(û¤+è4ää 3‹Ç¼š¦Ç  æwd+€¯å@+€{ô0=ÀWêàëðOÂ÷cåŸþ្œ²õ~qv¶9‚ÑÀ#­>KB#&ph¯j…j›ŒX>˜s4Á€Ü°øè•èúýz¦ÒŸÚo«ÿÞ-ü| e™DéŸl`XðµÈkas˜Õœ™B’yD +Ôɹ>¾`äi¾ +u)ï®Ûÿ} IÎÉ[½2Sm8 K=aE÷€‰량N)ÊþDÉyÒ£‰ÖS 6«ä<$vp€2±´ødgž2¾¸Dß¶Ê™úω½ýÇøÿÈrü¡ÛïML—yBÐA¯ÿªÐ.ánûÖ`›~-E7ÛØ Ã?[Éuú¸ýåý¦èÑíNÖj¶ô8×ðÌâ§R!uµ¯Ý FÚ!ÈFÞ}IZöcåE=ê½” ú;¯ +w郊¢AŽÊŒäÊ~~iKlCiy{ÿÒ€NŒÊ}JB9z•^~.¥²lMËVVŸ­UŸ )šsuQŒÅyÒaÃÆ€ÌA\ì*ñªRK ŠÕÁ-‡^)^‘;;Ü6ÏìkIi0ýÿ!»Ôžàñ… áVèôÐ0&`È. þé˜Q’à¾øü‹c +? æï…×ç®Ø í_OÓhb`ä/Ñ_ø–Àÿ?ýÕÛ7®¾@£yÌå%pG@áhÿ:@4ÂC& €6©æôÀq¤8Âë»oìî^yCÈÐZÓX¦ü¥$€¿¿`/¹ù {>@o.ì7ÞR(Õè4<ÊS}#37•®ÁÇ @²€5HâNxû|.º0Õ?æ”BVl@¸· @X>ŠPK¤`™†”  úxÙ + Äð#|”núë‡àKŒpl?ð[Ä'¾R?ßÄXg¾ßGþëù'ÃN}veßa?gs¢¥E¦À#\/–ªÕ TBAEâ¥Ì‰Ó,M’„Ðz… ~€$d&wꤠÝÊt‚ý™ÙÇNÀ u +ɶKA~¤ºdäÆ8ÏCüè3 ¬Õ"0:_WÈ}0ºØ$ïvTužëÕÙ5Òã¨X“i'>烨o/³#],89»EuV7Py챓ú|A¸¬î68€–zšJ±Ì¸¯a®!ñå´o­‚I‚Ý££"k~ä=óùÅúÂl³iî2wJxÿÿðOÿ +§I +ýã?ücB‘àhÕO½{R—iÛ¿%]¸½=Ÿ{P´_|§#ÆS>­™ïà7¯ó·D–š¢!t„žöÛÂYÈÀV.€Úe8Ú+IzîsígJcA‡aýb'HFQ<ç–I|ÕÔ;¡D u6t†‚ƒöP+PÛ{|­Ý!DD< Õ˜­WkõóP“ _%ò"4„PÁ(#<hpë¹Täýœ¡^áÑD8êëÈeƒv_¾ÿP«ü½= "ê=¬Ó°q„®Ì ›ï¾ÿéSýÏÀŸ~úê>ÿì‹ÿô‡?|Nø°”:ÿ´`x#,ÀÿD%@˜þ'÷ñ¸ñ €×Î>/U ÀÙׂä_¿~ +À¹\qd¸¢õîë¢7®™L!ÿ¯ýXz?€òÿ8xÀ$ ó’$t9»{ýæÛôð Ð{[ +@ ÎùæyªÑÎשÝêþ#.£&¼—øƒ0+Ô\¯>ñÄ=RÛ;s2)õhQÒÜYP|ŒTj RæéShT”*Ž‘´£ÁþÂãu]ŽIQ+€ç'}„ªšF>Âka¬ 3ª¾D?óI@Ê-áðÕúàªÇZ´ÿ>>%Àócñ_ÿ+ó?ýÐX4¡m[½ç‰7—×`E¥ÿ¢ài±¹V­j[x«s8Â/ØBÛ5ˆøÂPZÐùCíÿì'vVª¥ +w_= ®o~é‘´ÈW3P†p½¹¹úìŒvÿçcäi`t^Y÷Øpõ€RÈ‹õh%Ðg&‹¬u³JÜwzNû >$ƒ²®ª{šìÇRc–îJ÷—ð𿚜´…ïN[÷YßârúFY8ÕÈñÊyœ‹rAlX5çgë-׆ÌUywIþ1­Sè‡? à ­ïs[ÆÿMõ…mÃõî`x“¥/ -»Vš;ECÑô¶ËªÕTöŨZ­ÈÞr§èß-@YŠ]ï^$ C¹Q7ïîµt ¦ƒ@zîÙòEtNQ4ºV·-P‚­­Ô1qƒö@Y'#=Ÿ«}𵳪?®ÿzdZÌVkstG«¬q:T‡ ºKr!I·ÅUò¼_¬nß.ò-ž˜HÀvQìô‹žžžß×”#,ÕðP«Œ Bý6îáXoTTþ *õî»4Äñ¶ÿZöÿðÅgöÙG;~~úšÆ‹˜NŸy*|¾7Õ `¾~¢ã ñþþ_ûéÛ¿JÜåH9Y@j3ðûk +ôæ”`W€ž/×>‹I ÀuœðÿÊ®XÀ5q€ï^¡@“¨Àµ¿zCièˆ+» Ü@Μ۽þÖ/è/@W¼=¦FüñoZ‡ãüJã|cIÌÎ á"|Çgaì×D5€4oX¼}²‚ËÓIï2УPŠÆt@N9Í•ëOH…S™*0ðb>:Ö%™¯³å²õñz´àg €ðùˆVø÷…@ó—ò8è8i e€ðøòýÕ +àKõð—ÿå¿"‚ù#§É (­5EtQ©¥ –ÐW0´XwW°!ðqýŠ7Zj@ŽýäÅ; Äz‡À¿&Þnøý”о…Ù’¸ÓH©™òÜ +¼“‹¥ÉI:„ š‚Ìø¢É€"¼aM„¥•¥lÛ†±Xœ›¿÷v¥ìúÂx+åsÕš€îŽC¹Eˆƒ]KÑÀdDÌÄâMNéd±&%j’ÂÚiÃAzmŠ’à”À•¹ž3­KÔ[ÊîR½KGÀö1}}L3À/:8J΀÷šõ;súô¿´5@ÁÒ€ ÀÌ´ÔŸ–üƒRZ¨Ø=PF@L×}Î_Ûà+ +º¯bPð†’‡LX}…Úá?v€Ò ÓœvE,àÇšß0¶? ˆ„à­7ÓxÀ#Z~ù;J@=ª¤åñIÀñRÌûDT°©Lu wÂý½UfÂPú“ÄVþ#ìUº*/£â'S $ÜCÊV’#[Ø Àˆß +àȱîÑÀôX_©ÖÇ[îç \ÿ/F÷£eb$à”P¦‚€™wH‡Ý”&ºÔé¨H5")B{©:2λh +žüJ…²lûÁ¼»ß.Òpþdéî¿)™-›‡(ñä9RoÖL £Ï’PƒÁ~‡ã¥Ør.LB9„®¼Î/fùZ`é¼~XÒ'$©ª\ÒB3í ‰Ó]Ô›ÕÙ +k6!7æAj4Yfggª…K`õDõ1l†øŽ€H‰='ühH À†i…¯¢ )?š•B²™pÃÊj½žmµ”sÂlê@øïbzi~ƒ‰Ç•kÀ´ôÆÆ´¥Pì­{°}wÌ“K‚Šš$‰ ù2vÿp–gÄ3Æ$°&À)^dÙ2õ]pÿ¢mîô߯Ԇ¶¼ëNÛ*7À›o䃆”íb+8Mžq„ì:Âî}b$E¾Ì^ÿÅÄT:뛌èÇç(ƈñQ/¯¹6 (n)oÄè@*ÒZ +(±èÃ"20æÅ+ù`g‡AÈ“ûRÜùšþÛ#€ÿUkTÔÛE7œÿÄD„5#ÁL={÷.5ÿ}úN‚}<>ÿÃgÇø‡ý†ÿ šÿ¥ôô7Gý +è€}'äuã1Ö}ÉMx.óÏž{þìÈî_û)ë‘ÀW”7oˆjÐy¿-W„õ6åi  ú=xo;Àî_íJå¿ ×€k?Ö~zº’°ýäÌY[Ä~1¶`@û 9àþ“úo„O›ñÒK@”» +ø—Ôj*iÃZ_íOžÀµÿ”‡ÿSñ)`8i+ÈÉ_>„ ¹0”¸øu + ¡O€'µ˜˜¨ÀÈÀt¤(?lpWÀ`ôˆèœÒ@+ÃŽ¯Ö€'lÇúhç½, %î#a@TzV+ÖÝãù†HèÌQ´¶zY²4kÕdZG3åEÔPl­¼JÀ@“õñ޳»‡•f0Ô’VS¢Ï'’A 6IZ"0W}œŽ‹¥¢.Käc"ç"ÌðKÊyF-ÆÒZ³^Y„ÆØ ƒuŽ3.Ô)uýt„û´½€:¯9Ìè?ò6¬ŠÎz…QËÞŒ¸èŽOÍÌrN¼P>øxYVq¦uò¨M“Ü,5›…Ö9oÕ+uBcü÷››üI­)UQe_îíô÷è€OÅ`Ý.õq «€0ͤÔ"ôú¼.øµE@ðºÀÏHC)Þkm¬¢Y«ºÒ` Õ¯£'ªw·hƒÿ6ˆHó~¹×O{ó¢Qì$½^švÏ@»tœ.Êu9'Áå|pqChÍ@Ä‘«Ö‹ÎèÚš+üÙ6=… *†«E* ~^k¶Ú¾A( €º˜®½"üg’ì ú4=zÅ](2>À×™¶ì0axÈ€¦çáLõ€ÁJøŒã ÐÄ Ð}÷îÇŸÞýàãÜ @êØ>ÇX¾ø”þ0Œà_ó¹°@¦¤ÿ?ÂlÁìØp值þWŒ—žø$øØžþ<€³¯]½Î˜y~D¨LØðüUåº!~÷up_ãš×»WßH`Ú  +v€×ùW~|m7,v©ø1&cûŠ-où7oÚ0þ9Ç >Í•æÒÊ“fú­,<Т¸ríæ q¨‡#^H}áq{ ðã ™’Óu¨Uiÿ0ª¢þtR*ðÈæŠVùùjzÌï –Qü´`ˆÙAõ´0aÐêøV€î”€{ô0=ÀWêà대ðe¤Þ´€žë"Ï×2_3Þ•ºÓiz<˜'jMáO=j×з­¥jr®t—DæÜGŽ¿ ø™R®±¨t(Ù"CG“@°)tu±Û‹V¦(ö¡¸û4gªöµOÊ:ÇFGzâR«S¯‚s‹À‹‘ŒKÁfkIZå¬}¸7‹²=W¯ÕžuÝ’Ì6ðë3¨¦ÇC¾ îÎÖ©…e_;Ó£Ô¥ü„êºñ¦(K+âZÅê’`li)½­£EpvPzE‡êí½½½~¿w¼®§æ}Ú­¢Vœ~ÓNk]Pè™/d®d§‹]eŒûpý?]ÿ[kŒº_,œð*‘žž°·Xõ +E»‡öÞ¡c¿—óR–õ¯àÃóüÉLBì‘àPP,`¥àlï¥b­ækÊ,“æ%e ÀL *ËÈŒf‚YM l¤©ÛëàH:0€vê PB'ˆ³#==¡üõdë  aóÃø2š ëIÎc.nÚ µ°Vã^9QË +:”úïÁí  ßT|ñYÂüiÞcuÝÿx>³[Zì06”³€xô¯Þ˜ž®^ƒÂß`<`zÂp.|B¼ÿÚ{|eycÂÕÝk¯£· ÷•˜×# Àµk?fI|x²×$`÷Êëöx#Y®Ù h’JØþröù‘àí7îGÏŸWùoA‰ô‡À² 67)VùGÒPŸ§ |ÔPÇÇçÿˆ›õK÷÷Êe¥Ô&½I³Épj¾¹þ¢2 œ¥l…pÀ}ÑÑ2öƒÂÀìÑ­ØWÖè‡àÇ8Ø +@ç”óWD3À/ÝÀ× à¿ýט˜‘Ø3Þ߬W+6SÿL¥¹ {¸eMÑ­µ^k©ŒR¦®OÂæ×t®Îœˆà ™P @ ¿€’N‚pFOPQ¿*Hâ#úDhíä‰[¬5fkÒM16àÌÅa"u®ÄÖâ$Œr‘cȆ…´Z½ŽÔèü|­Õ Ñ9´FËt*Òj.µD"UÓ› Vk5ª æêO”VIê1@„v®zJè?SŸbë9–)êr<‡R å¼EK¿²ÃóŸÈ9q¶:[͵V/«4E¿Zÿí¿ùµ#GTô +†ÐéíÝ1èƒ|ëÓKÛ»‡6 ¨Jç³Öë’XÕךNOø«W /Ô› +‰î‚¿ÜšpD5ìï4º†a-k–Q«x»Ñp8qÝÑŒâ˜/å{œgð¿Cë?r$Pš–ób‹mn¤¸¬y!øŠfä€úb>³h/7¬Íóuå:ÌY†!(ÏoðçÅm{þI^¥‡s{|ÍVÈÖwçðƒÊɇ8U1Û€Ãø¿¾âþc‚ÙÙÚú-º¤àÇŸ~þ#öù§80'ÈŸá=*?ø_ªÿšÏžƒ$ À”¤þJG^¿:=íº + YÞòh@à¤-gÎ]½þÖØ (&üµÀ M¯¿‘ª^×uµÂ à ‘ƒ × Méè +ø_.~üÆ•#,_Þ y>¸@/éI‚O “6a¾bmÁ¿êãe—€Õœó-§*¶þÛàO ‚•]ÿ‡ 3•ú‹åØD’Ö‹ØüÛ—¸¼J¢2KïÉé~­øÜÓðåû i]Ôà«õ õñí?Ö@0ñÀ"<Ѥ¹^©Ö¶šôˆ…ð‹aГ¥9B­æ†ô&áõFþ'=„ +QÈu*Œ˜Uï ¹ä!t¼gõZ:;–té +Rj‰°0²´¿!N¢Ð(uê•'ÖriÀÜ~×Î`¨åÊ•.æ¸êl=ü4ÅU^µÄjT×muZ~§ÓoÖòæ¢ÜÂ1HÑyÔ*È 0­ÍózY^ÑÝùZ¨5 +Äèãæ.RΟ€¿Ÿ Mæ{È3²­[Áâ`R¤¡œóýŠcTgkä@ÕN±’¸7g‰œo,mµ²~ÞÙ˪y¯µV¾°˜M¯¼²==tñS î ïìÝùÛ½;ƒÁþÞþ èÞÚ¹íÎÀ8ìòÒ‚iÒO€Wn.4ëYaÿxàk-VÊe–IųY]Çeù —÷²ÆKù`®v:½N‘oÑOWØÎöPaq·ì?¢3 zþÏ9KÀò.B²…•À?¸­üh_HšY“A :×EoØw¬ÍôÊE…õz¸ÜÄZŽ€–ôÄØôL9W?ÝfÖ¬èv”i7_³ÑÔ+püW.»NwŃáðöpOm½ÃŽ¡£¿¾ð×þÎ\°²>œI¢/¤ÁÿXÿd©Ž.–¿-|õõí»›¸€>ÿ‚–îà‹/>õà?ExOÑþ—ê¿‚gv©¸‡@ ÿ£ßs¸Ÿlî#,דÀ>W<P0íØeë¾>o+v" ½¿põͰàðfòx#höˆ)Ì +% °+ð÷m'l±ð@Š}¯ÏÅèŠ_©;þeýúKˆÑ2#™÷öã£z­ÄÊúkÿ€>'̪)§êÔ#XøóÏÏ@Ä[„™±DjPlð%|ì8eP"# €B:„_±€£Z(5@þ¾û—¡ RS¹x^xzž'še‹üŠñ³nIŸìgZe­F½¹…¾– .ŒTçþ…X*…³–'Je}J¬®·X¯žìW+Vú…¡.åUs „öC¾ +K'µ«Y¯,(& 3•ö|¢~éJœ-´;åÜÛoÉZæD…³ñ)+O;ý9·Ú‡Ù›½‹JRÙ×-.f¹ðÏ9w¡¥l4«µ¡ —R”Ò˜ls_¢V‹?Š)€ôxV&²Rx8Üêšž¨0 }•k\ØKשÍÖkõE=Fªü×ò&·}ž1¸‘,_¼ŠŽéa-4ó^¼'Izc¥ñÜÊô´ºJ‡·ëxàeë«Ñ;þŸ¯þÙê¥K««ôÜÛПØu+š+zC´Å¬h«¢ÈÆ,š›¶fýWÔ-…Tfc¿Åm}kº(NÔÒ¨Ô–µR‚5€Y®¤€‚Ë^.,èà…eM5Í5fÙÖq$«â‡•â"mòÍ@4ZTÈYEfñ+}Œ›ªÔ®?ÂᮩÆTMjúÑ—±}·ý¬ô´Öé‡x•^“µðêkË„à¡Z¤pù >œIo ìçïã&c´ôßÃcÀÏV×/¿ÿÁÇw!b}öÅgþöê?DàQ‹Êþ—ê¿æ³¯¹ +@è?3Ý PbÀ÷ô‹Y¿@ß±\™´ÜxûW7®]D+iËøxßOµc×MîÇ®+¸úãÀuMÿ…é¥À8iè¯i´(ã´Ö‚6÷“I @ê°”(g&Ä/5ï­Þx #ìxS—°ð7´û…hÃ*QõWåßæú®Ù,å$,À6Vÿöœ©Ö ðÅõ6zÊ„Gb"Vààõ¹_+­€k£¿šk€.®À´À! ¶…#Z˜5öò;cü·ÿžð D[ž,¼Ç«‘Ì +Т`­SöºtOïU%g³Y©ñO¥°JÓ‘¨´Ñ©œD­>ûª%òÌ mý=„˜Š JŒ'|¬6}¬W¾`™æ‚0¨ñDYà÷jYž]¦«1Â)R€ª•¢ì*cfe–œ§ÈÑe8KaîˆTFѱç ݦJ¾ +*æ1Ýä$ô s3³m=E%éËq‚ZÁs§ §ò»˜†o¤8‰þ¦”ûy˜À}0CdèÜj^—´6Z³u´ÃüŽÈí½~¿+Ф msšüMÈÈðPk¶Ð@/­ÑÐæs†8ÏÔ»—à ðã>ûœ6€¢°€Ïp8Z„÷à©þk–^^Z¦jhx` €ð6`þí·ßºžªÎ©Æà-âß¼ñó·nìž=çVØòï#n2xø'ø¿î>ÿ%ྮü† Ê]Ä!q­Rc€2¬_‚ý±´?ˆŒ-¿|ûXyrJÿ+Kôö›þ­¨h<™@J€æé=×êk~\l ÀÈж> -¥4Uô³)À茜ZYð¯_ı8µqryºÂH°€ÿ I>ž¨À! À qŠèœÒo°@|bÊ×ÕÒp¯~¾òX +¾”ŒÁÄ`%ñ +bµFE).:P4xìÉ%-6t,8»hÕq‰2\²vAüLÊfe÷ã«ò§@¥´„¿«¼‘– ³É;U)'zñzßÂ~ZŒ«„ŽöZÔüWêÂÀ.‘Y¤«"œ­ÔòE´”lЬ‘sœò8~Ip«ý¡I††(qæ¤|¶²­ÌDD9 O|_°ÎÈ`z:º™Úìym‚rK”{>ï9ã©êÈ–÷<ÈLµY­½¢CÂ1’Öhé!Òo}JQÏ'¸›µV4k ç$ÞÄ”­|c#@€^û'¥×+èà·ÿç÷»ßçë8·o½’÷ +÷uÓïmÍj³.dglƒèÓX¸IgFþŸ‚òŠçïšþŒšì³ë½º]î|½…-Ãýù´ÚôëÅAÓ¾ùhç¾s=Ùòîháˆäz¯ÅÓ>ÿ¥ðdy-á¡2+’EC’'l³Ð¼]™›k*k'æ•GÝ }2!dTë>B¸?^Ñ<µ³ÒWõf!&D’aw{ ®KAƒÀoD’þÿP]NU%Ýc¥û“m[z=°küš·EMMô SÏÞýà#¦Ž€ôc4@˜€æ¤óO‹ŠXT~ð¿Tÿ5Ÿ }Nt€ˆÏK ï„\»úúhŸ´œÃ°UoÞ¸qÓàÊŸ?€ 9ú§¥ÈC\H¿¢«³ÞÝÅ Á§:„CÆðÏ€GBˆ3ü@òü¹+¶üLxSw5)?yCÍ„¸ÉÿŠþtI\Ð\yr‰Î #´á¾#`û¨~¸|jòÎqo@¡)-´P¹¢ß±UÕ'×»ÝMKü资bÙ…q +XKìM÷k pý@@wÊàp+'xÐð¯ÿßÿÚ_æ÷¾÷}}°ßóoBHú› Àà«‹Šßóõæù6ž€*|×üv… c³¹×¨KqV£ž€V¨²éÀņ lkÍf'«…K¶÷?éo*ÇSAÎѬÍÄô.§•‘] -Z¾µ6:7ÜœK0ZÉ^ÒµtAŸÊeø¹ëó*Ðu¸Ø“5--kk½¶¨KÚ,aÀXÂf‡è³n> üDr|Y fžnSç·”é²Í}ˆè¦µ©mé ô-LÇ@=² ï¢N\[“â_inàÚéó„|±QµËæåD9gÉn“¿TÓ™’ÿþßÿ‡¦@úìOKüE&D  ßÿí½ßþÍßôòKB[zvEOä"KÿJ‹iŽ%\øÝŠè 8EçO os¦>C»Hú XZÃlà´‘škHàF Õ¹ÈgÃmëøîý`뵸{= ç­»³®Ï“Ž7èoJ`Tp®LÂê3µ™ÊœûbTfùñ¡lè@ezqi^9×ë[Me€„x"’õíÁKQÔÐL’å›’ô˜.³³'›©Î>ö0¦ðQ9O@¼¬ý›Hù[¨Ì,¬ß`4À>úìS¬Ÿ}öÅŸêÇpÀGŠð•üwÀói\ó8Œ«Ì ¾òW¸àòö¸"”œ=sF€O¥¿%œv ÞÏ`¨'ÅCk|&-"î¶Aè K²öY%¨?ZŒí$gu"7~þö/©{KПä€àÉ•'aoe>T Ku·ž€ë“Qeõ¨x9øŸâ¦hq‡õÕßóäI:ö)^ŒþGR€êJðFv±ÔJ&jJñÿlBfP°p`öØV-èpï~œòó9MO-Q LɃ¶¸?ƈ/1±‹Â.“ë+Í%ýq›çbâBR>„µæ@À¹ö$àêPí©£ô³X&’f÷“­‰0*…£%¼ÐÙšÞRÃ'*4(ºjWq[ooDtkÃUÀ­V?«4i5'1„­ëõóW¤ÛKËt¾ÌÍ‚ºf¦ Ó¹jž<Ÿ² ÜÔŸÔs³¶‘-Ôô‰)ÄnÈIà”>^ @jN(„¢¥<½þ2O¼”ã‹[6”s=Š ¦¹-ÄØ¢‚Òšïy=ª¶!Ñ 'çZóvâuƒþ’ôÝ¥'ÝvoïÿüíÞo?ÜÉ»Å+EO ·7°ƒ˜mÄk²õèÇÐ?ÆbÝ=œ˜»ñè쾚[›ò¢ˆC„Ò‚[xɤÐËÅô–5gµtQ}ðKÕCQ;Zú=Épž­Æ7Ò<ÆÒ0²¡ŒÌ×7f³ÅÇ” +=1œ:5•€còñrOæl|xÊUVVÓûľԣµ_<’¢½®Ç¤@… &;)|S²$p~"XžÅíöaÈcÕpä1èKm¬7>6l"*ú+öø8Üø3«þŸ~úÅXàð$¼GåÿKõ_³-§u#€©J€GÌÀXûXà ó‡-o5¸ùÖ×J×À}òù£5 [ŒÙÀ»€„¿˜´¼©ßÕ«tT¸ëŸO¸—8Ã(XÞxû—7nü$!¿ž©É醬<‰ÿ¿ÊI”‘:QÌ9¥Ò/©ÿü)­Ùƒÿ5ÆÚ?R«Îy”©ý3§*ø¤¶à¶”fÆRm&þ¿ì?eÉ[†Kq‘7)÷kp´ÀQ­Žð8b4@ÒµHcU’ôY™™¯Ò +à €¿q(¶J9b_â^ÿÿ&œ‹B”ªôó(¤¨àùÂB;ôèRZ­ Èt¸JWýç\ÐÜVYßÏ…zÖ0=ÖÞ<Ö`>,/0 ƒó5½ã°â æÜ®¡ï·6¤ùø¥9Šd­€µa]Ð ¬œëÊ*uV„œRëÑMK3ÜE€Q6õEkµ‚™@g‘y/% +õV¶S4¤µ+uç¨lwÊeíWàÍL÷m.fV6õUK!õØùeÖs=Š0èJWV¶ë žKã|£‰Ý%<$½f¥ÙYÿG¯ +!|hJßý„Ðôÿ½½;ƒ¼»¿µ… ¿Ã¼ÓßéÙò–)ùU˜ÔôäݨSH}sBÿ¹™ùõ‘Ž»¤eÛÌ^§¥®n7jtó ¦Åz·»5ΪµEWÉ»Ï> tuÆ]øŠ&† ‹R´A‚z]R‡€ åK’½ÿÄ©ù¼¢Û­‰äÕm¨/ò"¡–æ•kÔ5pWºÃN§÷Ãöz¼*~Q õDp—ÐâÒú@‘*lzÑ1Á$‚Í)þéÿ+»è±›è‡@£A»OmÑ °r‚f€wñdDÀ¨ø{À/4Ñ7ð! íßjRÿ™£ +@ào'Àð”Œ{š’û#yýÚµÝkP#X®î& N€×o$€³º”ÁƒXîçáð0ø›`ˆà*­’àÞš)Föª1°På¯Ûê¿ý“Ñ$•_óhrU¿^`é°D@LÚu”`´íñžÇòqQç)01`„ Â'bÌ´*6€pH’¬ÓòøØ ü—P1§ÿmH‰ÿäp@¾¡V:æ À1£òe2PՑ¾C’îö>­tÀ1­^û×çÆ‰Q(¶Êéྠñ-(ò›B#aú*.v®˜_Z^hJsòuD0¨P•½k[Š«Õ7mˆ snÀÂGY­RÏ 4P  Ö…µÊí¬ã˜$B¨¬³V9_”×–L 3jž‹€_,–l²‹è"¤ÑìˆPÇJ¸7*+‚XUí°ÕÊužçöUƒAŒ¯ã‡¢ 7…dô?¤3]ÏmUÍÕpujN 9/²ZCÇNKJÓ9ÞóTÎû‰jÇ“¸'(ÎWšykCoÍèràE¶z½þÞÞ¿ûí½ávw°c[±oïÀWÅyc(žÜ™.sºÌó <ŠŽVÖ°âÌ  kp+}óãÿiuæDõÄÜÌÌ\RÆÆŒûäµctGc- â}iižU(ƒ.Š3ÍÏ-¡ÖëpÂyž §ëlqJŒÀù´8¢¤hV{ùÆ–¾$q1,‹K*Z$  ¹Vº»Þû?úíözŸ¬FaÒóP€â¢EwÖ»"<•5ìôÅßÌdÀÃì()çMôê¤ûá*T¬`Ó•V ÁÌÂzñþÝ»Rý?úôã»+à:€Ï?ÿô_üá?ÀòOÀÿišR R3œFr¤µzR^ÿ«°åo¼ý €×Tb¸vóç±Ç>§Ï½®à}-SZÿdX[:ùu¿Ñ½´¸à$`É1W þ¿¤pó§öø‰`ÿgo1ý„IðO±SÊ“èÿ ¿€ ƒ@lI¡à6Ü—ÂAŽÒk÷?7ÉDý¸†„i@‚‘þÑðøYÆ  «ÿüòäyªpÉÅßRâ?u0sHî× +ð`>èâ +LúØ pÚ€wÁ£O? øómÍÒg9-én-# À— à50á«J`Š— óÂ9飆'ZQ£ÛÛÉ¿†+U)Ë¢¾ ãWSPÔ±‚R0öåµFgI¥=úœ@h|!èÁkKkï8ÙðÏjªà¶:ž„ëv. É ;×ÚÂô›¥ò+G@zÄF†.¬e½†Î4(V¼Ñõ\##Þ±‘Ó~£8¸Õ1áì¦òÕlæµÙleâ¦3°íĉj=q”NZ3Pò3Õ‰(ÿD $º _ ÇŽ[Ë›•F¶ïGoHpŸÂS«X¦ï~JzEïÎÞööòl <£ù#ð îŠb°½ºŸâ$¤›¢Ñ™ñO´`#k2@QV¹ÐœmÐÊâ<&±py~f~¾ªeµ:¿p;ï }^'Ñø¿!ÐJÊ‚¡__…žØÅ,lÀÑç¥/I9Ù0PÕo¿EâNÌ,Í(«|9ÛГÔËÀLôxöL–P¢¿Ùû‹ÁoV‰ +•d)ö»Ý¢GÏìÐC`ý͉þéÿk\‰Cõ?ƒ¯ûißb„¨œš©¯op× àÓO?øøã»¸2 þ 1àaƒþþ''À @HjèuB&Ç`ºþOY®í¦Ž€Îœ=·ûf´`À„žt0}9lð:|lý`{À!'ÀëÂÿû›þK h)-øÿÿôæ›S•z]˜ùÇM ,Ì@ž e ûHˆ‰Šþ‰Ú~‰€·*RòÃGÔш”á?NDüs',#KÀ”̯tÿ¨ÐòrÂWð—×êhõ_ò­l˜¶j` Ó€Ã£¾¦ü>*ð4à ðgyPÒg9-q³cQ6¿ôX À7!À`Ȫ(Va°’êè5!Ù‚-™ËÖztè‘ÀÔjáu_§5jõÞ’Ëojü!IX.†sx^«£ÆÛög·ÿÞÈ:JÅWÜ®m´¬ËUšaðÕ××,FídVŒÿ‘óÐ×aXlHÜ!U +eÎ%PAse¥Y«‹˜ép|J\¶’®ãšÍ­Ú#(9#ø»Ò[Ø7sª¾ÈeƒÀˆIàé*ˆQJÊɨ)…¿‰3ŒÒ­-¢×š99›Ì¡ñ)é»KOØÿ‹Ýù‹~1Üìú¿#¨“n+ÈÃè·»0È_®ôOS^ªÕfµ‘‰‹4iH9W?uJ¾Qe¬¦¥5±5^kùfe·}IÄhuïõJ›ÝoŸÛã%ð(³z­µØ|Œ/ê¥ÃÈìRS$`3Âü)=nшì1½ÝüåNCe©Ïë} 0ôPÜG)ØDú{ö½A{(v Ýœq<îoQ ×õ€zÇ)_Sª ÿ»‡-¡ +ÿm‰[Á’Hµqu^JàBóòû"w…ÿ¢}úñÇŸ~ìî€?Ç🎒1èñ?Uœ~5 ÀØ ÐS*RK™™€é ÿ¤À£T† €·~vãõ3§íx? @hûÆüÑ:â´…àJŒ(¹=‡ÉzÁ±Ñ +àA%rü`°À/t/o'è#3±Õy¢Qt¨Ôç©4ësõ%h×VO8o@9ä`¿£òÛ=ñŸdx%Æý· º¸úè|-=˜ñ7'³€ÿxWt°-Lr¸ÖjÍ<ÞÎßýà.Í>F<&À§ŸS ðÙŽkPbþþG€h0ÿÁм¦&êý§äÚ5FâIN€@ãõ’œY~öö›# €ôî!šÀ~gªFwø˜¶ˆ€ÿìz ‰?ˆœ™°è^Þ:hxra4Q >ɼoQœ]9ŒöÂ}A»ÁÄæ´™¢G$À/*'+À¾(€{^“Ò_ëÃä_-Á€àßÕ{Sò¸«ì°ù2Ë$IõŽ:KK]±þÆIh,€‘öÏô%}Ü + }|úò +&}vž·8’øÄIùÞ#Jäé +‹c}¦-¯ýÿñÏ ¾¤üóøÄ2HO9Íót +¤¢Veo”¼Âê¬Ñèô6T:Sp'è‹P!x·ÓÃ?_hæ‹ÕU|»ôùŒI@ü@ü¥¢Vm®%õ¿ù" ¥°(vçÂ]žÕ +B€ + 5ÂuN<€Ó²„' ÆB^t6¤Z›¾pøè¶‹Qz:©cÓE3¯¯ Ä-9Qy)}RGÖ—èúH²˜-Ì6° ÝÚ¡mÎÝÒT©÷fDzeÞÌu Î 7-Z `TÍH´‡+Oò$Æù–@î¥õO +&ï"5¯ `ó’ñNÒFéÕÎî~¿ßt'vÚúÝRÒ]¢Ü,á³7KÖÚ 1€|ßè òšR2{íüŽƒùùÊDİ/TÌû?¼ÓË W³ÛÕ€#t©\ì¤{§èI癯—ƒrÚ»! +³ÜͳnwùÙ,ßUéÐO`Mø¯¤: q<¼Xa¨ñhûŒ7¨KD2dìÕ~ÿG{ºÜ`õ–;û‘¼ 3@†Ý[¢:‰â `|ü§‡gàS|È HôwKK@úpûqCA½}ù½>2`DÀÏDè€/þÓ ò§% Ú|þôQÃ»ŠØQ!€Žž˜ìEPK?7ÞÄÙ_àfIÄðúOàæOoì>€ÀèãeŒ÷e(&Ít9|MêÿëÉ ”g9A¼Ä põê±­þ˹çÓto9û|Y€À/uk ù“L¢¿Ð\Ê¿DAÐQ$¯±‰†£píñ@õ…*Cýñ?ƒ¸Í_½úÄþ%nøQ­ÐçŸÀžå‰S§p¡?¦Ö ùIuå6€Tt˜zZI¨Ç+.OL÷kÀ )-oèNù¸€§Ÿ–ÊïÏN<Ô~ô)›‚vI}@€à)ðßòÿ½¿€Á[Ó?¹ˆ¯°#Å9œlh|-¦±íÎzt ¸tX Ì}F®`u§ Y,7{u½øpú>(‚QX4*²fÃZµ€Ù:`,t=Í®ˆZ™©¤O­ÂhŸuÚm׌Ȉýþ—¢"›v+Ðysa£ŸpbPçS­½ ›c4qÎÍÁ† Ái˜-Ú·’r¾VŸÕ=ô<@í\ª´L|1â¬Õ‡èœEù_ä¦(&ç‹‹ä\1­Q¿ƒ:²Æ+™¿©4—?Íñ?˜ý!hÜöwòb·÷··_ñ÷à?jþðÖúï¤ ý¢·™ wüc#pó7@S,›Zß< +x; Šþpg9—~ýâØß,>p—Cûöèfˆt­W;Fkâön+#]w<ÊHo°iœPìÐõÓDï;NAØœð[òJÞØÎ»Ýí¢½,&!u}o/¯‘VÞéÍŽ£K¢bKkÜŽS•ô&ì?a_ @ á~Ypê(ýŸVÝí`¢Ïc¡[@(€‚þ“Zèÿ¶$1† *…à¨òHX¼M@p€#-:õ( €ðm÷˜pÜ&}—ÌÖ©‘¤sBâ¼8Á2a°<úè÷¾§ìÝc,Šã@ðe~:'$6ÿÿ—Ï$~Ê® ÙúBãÇjp2+±Zt«•w¬ŠçR¥ o®Jå8R*ÿ*RW}ÃFí†5÷”PB>†ä¶S¾‘uЬEE +|òèI:ιÉß…p?ËVkY~‘””àHÖ&ÌÁt§&>Tø<ÑÌÚ¥Õ@›ïsQ(ÓÌ›³úq/ÿ¸.ý?üÕ°Ô—âJ<)¥3ˆÊ–2L²‘qgÓBs1ñ žCk£ƒ_¾î²É+±ðrxm~×å*~1¥ï~,ÂÏþ`¸ß+Þé¶·±toõð´Ç[1(Ú{ µ›¼ xýã-¤,»õâ×óõ¹æ,\ç|s;k/´¥çE#óúÅ~·ø4! Œ×«¸áž.`ôtcw§·Ýþ;Zï¯w•:GGFعŸw?TF¤‚Ãî7”º3âôc.ë%òbû9ŽÉºƒíK«>°X΋­N¯#Ðèäx“òyÙ°œƒý[Nڀ߈ÃUe„” U¹ž¶.ùøf%Áó·.?ð§øP¥† @`ðíQ‹Ð Eîz@àÏÜ À§ŸÙðšëx”@jºûÔSôNYðHŨåH €‡ß¹.øO€rpÝ3g o¸ùóW¡XþújÌÁüÖ ‡ÀýŒ, ü•i €ýtØý->P’r|HÆ&³ônà®BÜ +à­·0€„üzU¶¬À¼ *Zù#ôSB± è?þxÕ!ðK–€5ôþ C€«'ÑõÑøgÑú­ø;í?Пù¨6´èÒv  ?%*´< Ûÿû-ÒX¶Ôk4ݯ@é€@ÈÀYƒìµ(qÞÑ6”4ô||Ú¤Ø0‰ÿÎp­Ó§ZJà ¡ø—þ!%ifBÏ­°˜kµÑÉ6ð¤ÎxðêXCà,1)ЊJì,[ndKR‰…ÿñ!%Ñ·D´õÖ°)hVؽ`ðCPý“!Ø}Ã;:;ùˆÐ•¾ ”Üe¦!eÎÉKèô¤ÐÁžr´"‘ Œp—´¹‘ã¦&às‹XE‰,(S\m,9µÑQÕ¤&}õU:­ùLÝ9ïåµÃ„ØÂú»† âp6þk×âtß¹Q¿|Oéý”›ç87–­-ClÑßû Vöö;ÞBPѵº]´ýÙÏ{/çcKZþrıð뺺=„Qm7–³õÍl}{uÏHÙ{µ/µ>ÔìI=U ("‘:%Ê·öÛÝ2#ÔÇGFòîÀø¯ï4ó‡QYANY$#¾•on$€IIýmKúªè?=jýư¡ˆ0¡B+,¹€´ÿϵÈñùçÇ h ÀéÓÿr´ˆ%vz,¸*?' öHeo) öÇ’ Ô½ýØÙ? xîl´HÍip.,÷õêË)0=ýÄ1„îº(@ÈŸ–ÇZŽ•tÈH@úPúË$ ìBn†€ẍ́ؠé_D€àÿä˜𠰗¦Ÿ©"àq× „`ŒÿÉûŸ>ÿ¼©à‰êI›þ=•Ê¿)€û@¦‰ÀãÍÍËþ8››Ý W&cšiÀ”Û6Z–¿Þƒ¶ˆ‰ùÈV:}lHùBôéÙ`C?L4¢Ã 6üYNKú,Çâ'å(€Ài˜€ä°@ƒo@ $Zü3ˆy¬Ú/ׄ¥Â³h[].„r‹%^z;E1õÆBæv­ža˜½_²H%m£l3˜í5—9Ý^ÒÈÃô½Ön ‹7tS,úÝV¾÷Ò³ é|)ÇLkÍÁç’ƒ(!çÜYÇÌ’¯,g=e•¬‰Ìp)ÿœ'¼¥O+”n. -·.Ýw-.!qæ’d·é¢'ð?dþ Œ˜;ªs4C£ÁD«gòTä5ß¡„4p Œ-‹"‘u‰®ëìeùÿ‘Iø/W£9 nB@clÞÃ<n®ìèŽì`;ßÙæëZüõt±±©È¥T×çêçg›Y7o/TVÚy1èßÙËWn‹€¨ƒn±g«9°¦hÛÆ[d"#íë‚R•¼‡ýµ$£èÿ® ‚À& DÑ\`˜Â–- šYûbF”Zžuz³Ž.°¦œç[>a $#¡Ç“Ç¡;éݘôúµÑ‡OG4KýJÁR`y%¨‹ò$²²N"/mF¹O\ Ñ<_wöõÈÉŒDÞÈ2E $Âöí ~³3èïow?ì ûCá]¿¿wç7{ƒÁ~wµød004°(Áï÷‡‚Véî¨ÝƒÁVOqÀãV¦×•UòæBåB7Ý|ƒèÉ÷;ýßmîì nkSWŽß¾½·¿? uµb°×ó½Áþ`Gí21'ïô{wî ”“õK}Eö«Œì}rÇI“òÐ×!E1¾£ ì¯~p«½z«Ø¾UŽÚÛòïýØÓKë‚GeíQbû"ŒïKÖ”:wFž~£à‡ëú÷6w‘2²_´»{ûzdDËßíñ¸¾aIýíJÁW\Ðp @ÄÿBú·Ò¦pa¦Þ¾üÁÝÿw?fHà?øøczŽq#>J¿±¿\† šH’,*AGø¬àM*$Å뻯YU¶àÚMZËK~þö«j`wü8’޽eÄsU÷ÁÄOM€[– `B®ˆLHŠ=RÈoˆ ~,#V0â–ÐýÃ0ixë¦_Ô„ìP€'VžÄ4P2€±(Âøï5DÆx¿}èì7€´à x¤?Å8@UãþØdÒ ÚÞ¼¬ÿ 6€ÍM•ˆî¨l$ÅöÖv‘¿â˜)y ±Ríð€ã|þÕ°z¯Ç&€  i_i`rü”$ØKœ¤c“Ø0ÖÿŸ~„N¯}ô™Ó†ÿ XJ @*ü¿¢üÑó„$PáÏ+bÄ==ö¨GÏóFªܤL £ ôƆ +]”mŸ$ÜÝ(hÓµN³ÁVK87jhÓ?z.mïÀÀA{YiÄ +¯[kmQl£´g{?Ô’V݃‚c ÿÊŽ‰FH7’*m§¾öl"*€x^pÜ"çâÎ9ïƒ tŠNa>±ÐÈûº­$NÞ,»àÚ‡µµlp¡Òl7ü‹ Ó°¾qÝëüâZ‹Ž+Ò¡|@J’2IÓ­½mrÖWȺw(2ž¹ßȃJ÷ äÅðÎ1Ûúuÿl©×À…:—q€„. §*µìòÁÜÐg_ø?úôÓÏ©ý?–蛌—“ÛF€0¨(Ò—é #õ# ’{ãõ±@Üâçnh–>†ó{KIÊåhkd˜ððPIù·¤sœ½ˆ8^œ_»øM Z€¿CÔˆü +èÿN€’Ÿ{ÆpóÆÈØïºšø ñÞb=_qÆ…Üì£ÎP¿hþZÚ z$•êŒ~;h­íÇàà½? i¶í_ÐÀ°€Â&W +³žtŠœb²‘`’ûµ˜ðH6€#[üo%xgÈ” €0vEC€øþ›üÑNˆO‘ŒxŒ€.a€§ŸþÀ%uEúè£ÿ¯¯‡ÿÓØ?%¨¦XÉ1¦lI×VæÚh}=¡'åvØH·†~Áå°ž Ì„£:µ³±3h47ZM¢‹óŒm€›ÉÎ×{ƒ®Êo³ +Jž¹ÌÖ‹^ýgï·ŸüV +µÍý½OŠå¼ì©UGmÐŽL稨Þ0dúÂ\ÃÂÇ‘ïDgùJ¤êtz{Îù«Ôxÿº÷˜¯¬Þ ÙÚpµ!MÛq/ß/ØE£µ œénf$2Èk\·…ì€ÇÃüZ§÷ô¿×WÎóÞ^o§‘ H&²N^éÃÂ7®ì*Û +)‘õ ¢ëˆ  6òNzÈ'ßÖÑ/nõ´%~éϺíÕÕç–‰è¶Û—ºÝõõKëìÒ‚øME_ÒÖ¥KëŠô¯Ä‰ìkëÀf£Ö˜­TêO5ºéý;¢]|¨CŒóó K?¡ô·'.s¾# cõ,|qbýVê µÙj•*€»ßýô“OéPjÿgŸÝ¥À§Ÿ‰$Z’Êo‰5 @:-¹„5þk%As#€Iø?Ú€‰¤büW?¿!`ÀW·øöØ'‚\õÊÕ+@¿–Z˜D+KJÿõ”½³{˹3üÆ Oã?ˆ€&qNóîµÃàÆ oÝí| =q€a ¯…ç±5Þ¡È…4F§Vµê<û´ˆOu€™ÙêÌì© +Á *UwþS `í?êJ™6Ð +àòå[®¼ÄßÚÆ¼Rô/~EÿÓ­0;b?O÷kpÕɦ|_àÚJwÈÓ•G+O¥œ!S&$`¼ì €#„Øi_{B|‚dú'=uWùÓÀ_PÙà…EŒHÁ—‘ñ%šŒ65KuZ^~vyy¡± Å²¶•?A¡²J%Y&zA› ËõEÖ¥€¿ )b˕ʳ ÝÓììlE‹ +}AiÇXtÖʳ§¤dkË)Ú‚¦éÅþù‚Íåʲ áô·&Áßx8`úÖ—ãóçÅ'€Á€²í÷éè#f ú9í>M^$š˜NK§uO€@=ý•u.‡ãï7*Nut#À°@Îi€À±€¿Šùp+Áp@R+,Q  Y`9Núä𠂦o€úké"l&H€7ßzË5“rÓeµ$0_2"ðQ#¿Ç«(ùøü‡”è• èçÑ}€šŒ,ìÞSóêd…q½¤çŸœ©èg&G–þOp€ù•Ímáÿ-€Íü¥—J ÀØzH*ʲ™€~Ð + YÊ©l û™gP´AßI hžø¸àaÐ×ß`Ä'/¼£'$¢K‰ã'ñ?<fdäp:lÉäàsm¨Œl1™)VãÐhòv¸»©ø‡%lh¡ènûYôT¦ÅŠUW +ÜÕvØÿPcpB¤†‹èl­-jÀ§%14b]ˆ$”BC°'\ °V +ë*ºÛëÒ›ã_n”-iøÚ^igËÏnëªëù¦•é ùJì¼ö*•qÎ%džœw+Ï9¡¸öŠÒ +¬`cUÇoá +,.T–»Ü™L˜ŽƒœÝTµ"P›y¤*®+Ú»PçT§ˆ´9^<¦ÍƒÓsr”æZέÌ:GšôÛMÞÄèuL¼-Y˜x&R«ü¥nwêÇ$µ·¸ S¶Óÿ ßÜôi!éHwî»^BO¯•¹¢µ¦žN’­¥Å%ý‹ñäÀÙa‰q ›Y祀¸ß€.cwˆ‡;ew, "|%[E —Æ>‘‘Û{{8óñGÞ\ÜÙ»ÝOæÔô_‡úO.Üìïݹ³JÇW¢H OC³%­*MwÅFÒ[!ƒÍÆTOKÖhУ4&–| ÿļ•‘ <âGí½;ø²ùíHêoIüºXIÄýŸ?†>eæ†Þ‚þ14XX¿ü®‡FÄR·p›€Ã2‰û£‰ž“FW,.Y)…à ÐiZA€Üp´ã†à0˜éRúGàë ÑqšG*°ÀJ€ôG€¤3ÈÜÊÙ3Ï‹¯@YΠô»À +Ð_KöŽ-?™´„¸ >(vþCw;?iDFs£>ۼ豿 €Ñü“¤áÀâ€S'EÜéº= JÇè Dÿ óÿIµÙ½\·F&¤È·T„(€ª‚îOñà=ä~­ð°`dÀÀe¿ÿè÷ÿôOüN2ÀwºÀ‘Zô|Ž–{™€î±øpÉ8`À¨@Rö5žÑâûɰDWa(@…ÒÿëNåj2øÇw\ê÷’×Ö"épÛRIJ•íÁ>ŽÝ<þb€wçÇŒ¶X“ö¨/ +*(£ Xå)zq/ï ÷Ýîï—œåívm{}ðÒFÎåéÃE@áŸváýáÌd9¾ãR:¿Î‡ë+ùïþnï²×ß§g›Áà¤È.4³B +7ŠÁN»‘û¿¹‡¹’íßÁ?üÃOöïÜ~°?,~=¼3îï+!:ÃëI[γÕFÏW#ß°RúuQÜ* í¬½¶Ø¬UgëÕæ\u~éÉ¥fFÎ{ñ¸,[;ƒ=Îê(ç·©ÓØ惗žëîÿÞ9¿Ó¿s§¯ì ´“ßç¶—áˆK±ñÊj•mæ›ÝñÏ´f›A-üQúˆ—ÒÁõ.Zkô×Ôé´ZŒß#± +( ˆÅ¥Åùêã Í{ÂÖ=ì|2üáî˜u—Ó£Ž:¸Ré¥ÑåS^ :°Ým›÷Ç3ßsQ »{³·×O=E£Þ0[`ã+”í;ƒU=!^ øë›hÆ`Ss*~fÖáY$QQwAýSý ¯=Fµ–ñMò’”¾;. Ñ•u­Ûíßܤ[û$!õ·$<ˆï@j8÷¸þ5›ënìG5*õõ èc€@šÿÝÏ>ÿìSš) ñKäOë3»×®a ,ã?¢‚1J],5ƒ¾S~–>€a¸¶{î…‘ä—ü<€«‡[L"È$äÇ\ò‘ *ÿ¯Jÿ§#7î‹q€&ÌQ5ð@"„âñ¨ü°j0ûG0–Ú;®8d8š„<*?¼îqÍz½¶hŠÿÔñ; ¿žþS4d#ɨI@Eðï>gª¸ÿ óOž _´~ý&Íÿ–)à~n‰—U Œ ÛÒk’ùÿ <ÈXc ¡tUÀÕ&>¨É:3€1ZM°O$íJÝâÓžRYJM:eà€ yœ~†Kèúß«ù\ÿ+ _uJRn$8ñ:Á®ð¶Slld8ÝÑÚ:Íq°¾œíç a%5­õXÒ”>£íû†`ºÓ’‚Ƹ þÛZdèÿV–£d: ·’ËwP¼|šTNÁé­J;ÔÛ¯×ÛŒbìµÆ§¥J嬳Å6½Üïô†Û QTl {·ï8)¬× +óî–Ûþ+¸I_¶ÈjÙPŒœZ–tò—èp0îdËÚ`®íåý~·Ñtü,h>ÈÑʰ’n¥AÑ2³æÌl•Þ~«óôD‡ªš÷t¬3E3;Js=•èn!¦ Öò¡òLNtTºN^¾†rÅ:ÀDÊUì<ÿ›9¦…ÍâV©¤À¨ÁW7†®¯ÿ®4ç ¡¿}ŽÑxATÑu·Ú¡£î†h9×Ì–ß  æ•HxÒ±Vˆ.d€œäƒp´û·4•2ê°òØ­u•OºèS@N¿9‡ øŠÂ—ò³êûÙáÔ!7ðÝAkƒžÖÄo  Y›­6ç¢ó‹RªMoâayÙÉà’^O(Ǹ6Íå¶rÞ*:{ygo°…k¥o¶‡§£a>½‹xú•ËQ|DÄœùqNüü.ŠWžB”õ&ñu Õ›U!ú"ð¯.U«RÿQ¢Cø;ò‡|©ÕªXš@/<[‡¬4!µJ½¹ùÞ]zÄÖTÜ¥àŸ× +àO ôŸü½ˆí³çÂ0YÿBɘdT¤&Ä‹±6:H !€ À„àš À„`B÷äO“óˆ”ýD€€€ À„\½â >HÁ:fDhï)"ïitKoýäp€8›'pcü„þOX“mÿ,ô+ã&DÄÌ×'bQBDªhû'E ÷ú;²‰U@[0„ þ­¸Í‹[ï„ `$©EͽäK´xTÀžä£þéŸá*Û/‰@•{‰€rêët (â|Óº2&f†‘ëåŇycEQ[< f$îD§E_BM:8ªÏTРçL|4=•4 Óp2]Ô+« 4ù_ïäýžžã§l±Ð¾,`>ÞÑÔ[¯½c¼ø£‡É›ømÒ6"+¶Rª%Xú;°£LH…®7«õÎÚR}^âÿ-yº•Ss§Œ­ú[ê¿)Jp ›G§Ö/[«dôp¡%$m< F¸ð\âÙà/Qo¾Ô^À$ùÑ6BrQ?À\ÏZϳhtÿÜ}œÖn­+MzsÈÜ¥C¦c´Håùðýp!åðÄ©'æ#ƒþ! +Kýàt'¾-O¨pš9i €øŽî<êð@ÄI†í½ÿÓ#Oéß°$´þæÅ7ûÈîÀ»[o¯óöð|¡'=ïõËï?øˆÑÌ>Æð.f€Ï>ÿCòú; Öù…ûO8ýƒ§b;YTªô…Œ%ùDyÊòè±Ì€GXõSí½ùö/FÍAò{˱ W¶8:,“UWœÁ{Jêðõ¤êÇŒ”€Ž÷f²¼ùæ[7°„€ðiøÉ!0EÞü{cÜÓŸý’] Dÿýâ¯6%@¿Œ’Zad ™*½Ä@€ÚÇ@¬” ¶ŒLåŸ2síb)¼üòÄt¿V¥ÀS×§ÜË_ùé|_°{´ÀTC€‘ `4"@Ч;@Á4`Ú`äOÇ–•$€± y` +P2Nøé¸Ó /·.·&C[€ŠPskG%­Êl¬!*€ÌvàÕH¢Ó[‹ósóÆÿ¥f!àÁé+ ªÃ@Gó W3dE¶ü’TIP_phã@ž )lQ ²×g…Í™3ó.Mü.\ÈšÃÁž²s›£È& -ÚŠ¬“FWhû6€¾$™ÊLGk?Úf¯7(m¬Î:€#…ç ,ÔñøA-zŸÅ °8K[XþõØFz:ŽçpNôÛ‚ÁHŠ'¶[Ía_÷9ä ®œuúYù¼: )öàž~)Ë_‰_Js¬7»byñÜP™ÿ‹WmÚ½ºƒÞÍý´6Zõ%½hH'F1¨±°“ê~\êB½A7ü#ÕSób*Ó—%P·Žg E\l. ¾yáTþÔñ ^—–ЬW6šŠàýU´^ô'ÑjmtŠZ¶#>õ"ŒQS'H–Z‡»çHÑ€ª¿ 5Åè©+Ô\œ#;sóÊ! ‘€x-VÅhx +"!ºÁ5¥¼¨ô¨.ÂaÀíÁ`O4àÎp¸þáßü{ýøïã[’„×߸¤»|è‚`½N@¡ÿú:fŸÀœ=0]}t÷}ëÿݽ øì‹/þðÅç ò§äóÐú-f1•>¡ÿS¸–@E£ÊÒþ4 j¸yS8o ÀkpW˜' €}ZŽ“)È÷zUä«ÐÖ{Ra±“É:[ùJ×/4$}½æ¤Bk¿tyëŠßÑA:1o4Ú¶=K×ßË7Tj¼³ÂYÑIäqKê;kŸùR­½Vä8ÀÔB×u€”øX¡ÃV?k4{;æ"º-×èX¥žÓ«¿”TáÑ®è€9ýææ›v˜ˆ§aáhã4÷:ØèsQ¨QÎû½öfg ÛÉZñ¼• ‰“6€?þÑ&ýº\Ø5ïÈ+Û÷ú[0Ã?B@wf7×ú¼“Õü6Cæt? á-Âà_­Î ýççEìæ´ª×g柨.Ð">øÕdzˆyàv¹§N¨X+š[àe `ö¬Šçfu~‰@:“•ð< s ²Ó\šmyèEű„fèZuÍ*M°˜§@Ttn«F95‰jk®^«m,ºW*^–úþï߯,â¿oß¹³§`OŸÍ·&Å·ÅRiþ°§jÝãcþo4Eº4ß¡%€žäõuº¾ûÁ/äÿõŸŽ>ÿì³/Ü6à ïì;àd0ÂÐÿq   âÔ¿˜HÂYdÚpå…v±L8ju³tœÀècäýtiÚî^¹âlì&_¿hÈ`ÃÉ€QÂB¦)ȉ8,Bù@}KZI·Äi®ßxûçºÊÏn¶ ½˜p$Uß-;´N ?Õ׿e„þ•“U)ìœLæDØÉýÁÆÃÊI!hÿ+àIþ²zSGâê °¸õnQ¼Œ el—C¡Ëó‹ùæÅD¦ä~­þòtର_,"®ŠpöPÔDC€‘ öÉǘÀ<¼€ö&€?Ié¯8ŽñxZ×' PdYtœˆŠÑà›c  ‚²´EŸüz´B³N! …¬àˆ°¼„;ƒ˜ N±R⤇…ÀZ}¶ú3kA§N”TVõ¹ÔFÞ]6 â„þ:Z±¢}@§p”Šò³æFÖ`8!í_ouòBHº…Y"Î ‰<ØMT…€·‡‹?LŒŽ‰‹s¨àŒÀk˜Âz£M½³oãÈZ-îÂ&)”ÒXgkF,œžŽµ;¤¯/ØY91[ošJ pt’+ZÿOÏ«’Ïûnæ™Nn©?Ïrý3ƒ¢ï€ý-Mx²zʳտ¨û@#G›·,–pÓÀèoàü¼h÷K¶ûÄwohÇò—Vþ¶Eý) ǯ<Ñþˆð5‹L, +ÎRlì8Â2W_ªÏ‚épF\ÐwµF&ëó‹a€pQ"’ÂGçüÏÕuÐ"·êÍZÍÃO¬Eù˜ð³@ú?RÎ ß–(鄨߬ijú.DØAÏú3¬¼¸ÞÍÖ©  ë ÃîRû/ +ð>Ï> øøcú%%8)=_Kºý¥›~ +¡å[ÓFªRû¯ÿü¥åÿ˜z|ÙøÿnqY؃`[Åv0ÿ}U^^Ô´‰PØMȽÇ|‚§ÌèÿÔ`ÛÇlo9Æ €>zL>CPÇÃÀH;\9¦0ø«µ¤ž®|¯´$€ÓîÐ5Š, ©Ài™ßœ€-ü€/€ èÒmjÒQÞAˆ;äMÇ: x[”î†ò†Õ·6»(Ô\ê8X ¾pW2Fí|½–mùdah¤Ü®zsQ¯7ïI¿Æu—í¾ØÜ(ò½`$£Œûp2ø’óN?_Îrôí—A@öDZZâæ—yÉ[Q‚­¼h.Ó +@GBҞֆ؈èŒrO€€e±>ËP€`W}Méºf„Þ‚u{š-\¿Ó£n^YÇ{A!Í/6ÝŒ!=Kð?žÿÄ—$`ÿ‡¤»É?!»ÈJ œt;ýBàE˜£·çÖ ´~«‰©4³>·& + úY#—óº!Ã<=Ä´¡Cìö zÁ-ìÑÌ Ðݪ + -D¤ªGØ’lþ@õµŠ°\`GI¬Ã#Œ³ˆ¿Ôœu¥BIN–Z/FV«³‘®ô‰S*itLj׈Œo†/1[¨ëÅéÄŽ…l‰Ñ +À¾E¿ø}{ïý=Z”bø%aö7*~r߉P`@wg ͺî[£ÑZÙØ¼üþû|p÷ƒ>Ðòý»ôÁÝ?þècÆúüS: >$Æ{æ2àà™]äb“:€²€E •¥£…Є= ¶xŒÜ_ýâÆµ+çv±œ³àîà'oÿêæµ¾1 €àŸF€–Ô BsD a`Ä@£ÿ듨ŸÎJRFº_äûÏZаá'oÞ¸ö³TLKzqRwï¾!z¡µ½Œaþ^rꤴzá;n6'NUª3 èŽ<à)ZþÑΰ TðÐ5¶Ž6D@ñ*=v¾üòËùåmzþœrÍÙÌ)õ.šLËñ­àQpH~€|9Çz¤np àѧ„ÍÆvöiª±ßÇûeà{(øOc@tZxP@àÑﳿ4”D ÷_çôc)„øay4l3ŒYçvöl6D²ˆÄ/>1ív€‘dõiàÐ\kÖ+ ÒaÌìÖr£7[(ÛfyVËEÂ#2°§+¦úËëù‹má¿H@³ÓÛØ—×× +c{GZ¯“×¼ òåîŽÈ Õ¤ăã8$ëDûùR09­7V +îS‡`é@oVÞ;ͨŠ^[j +mšõÙz7\o¶FAäåB9˜ ³ÞÉ=àZh‚Bd´j`oÖñƒŸ‰÷âõÄKš˜1S¹x9 Ã;Å¥Á‡îkwŸ °·ÿ!ýí2Šo¿—ÍÞi×ë¬éé(£z,Î.C6P‘}}I¼@ Ú¬³¿ÕÁ×O²X›­ _…«Míæ¦àB@t³ù„°V»Â– '´V¯­eÍ–ÖšD/Õ[-í[¬ëþq ©jK„>lz&ڱ摒H¨¹ÖiV[­µ º/X[Ó;1Ó ÕYÐ=J¢óMÑ3òâÑ)u(\À¸y§Ñ„u +ÆEÖsà‰|HƒÁý;ûÇíÁïüíp±¿UI ý +fÚïdòа +°¾¾É Ù:-Ü%fsóÖ{ï½ú¿/øÿƒ>úàÓà.m’ià×ÏÁQ‚ ,])SY:–Ç$ù”€^ #€ÒpS{pœUÜÏ$ ßóQ€+áWSG€©æ,}Üu ßè)`$ ò“”‘zãYr`D·ò¿ÉÛÆ¤àMÿ]\`ÅÕ|Ù@ðïåãGŽôw”œ‚ØP9qR<¼ +°ãò/˜w3m¤#@­`êÔÄ[:Î`P¼;° €öÿvf +“.¢Ò¹ƒÎ#'~“rL+€üüÓBPÍĘL û=¼&L›r‘þH§LDXÒa •§Gt}¥‚€ÈÈ÷]àH{$ € ð”2<Àz<ëÇZ¿’P4¸($h‚ÈTaK×^.†¸éÃjÿGxJ l<Ä:¨r¡6Û”ÎlÄLû6±Bïaµ]É ++ý\×€8BRDùÀ'°ŒË£PJôMt˜g˜tzdZKP^ú¾RŠÈN¿XÎ?‘þßĨ§¦bb!‚ ÚËmzõ'Gä‹£…;äTI>¨GªR`¹ã%7>(ó( f„ vÆÖv»ÖÎÃ^¢œ÷Å]t^>½ÉwTn-Xþ§…›+¶W·5Ñ?¾½ÙÝÎU6³Ç¾Ùî.¬(H£IÝJFŸ…zŒ2˜«÷Q ~¾) P‡ÒÕë³OÔjÏ;(¨×Å 0 hƒ.bµ·Viç7KˆÔ¹O ÙÇiõŠRXÒÃ¥rþ¼2@KrÒWø|c–¾åàÖ긥P&ª•ÙY=ûÇ”[oâ æy†§¡[úÆù¦#:¯7¨rÙ‰g¤‡±íéc<:Ùü³Bd€ˆ§toClsâ¿Ûw# Æ÷êa/6»9-QôYùl¿ûžô‰HÀGÔ|à…þô x”” ?M&,hj*_G6ŠÌbœ=$Ó>»çvÓp»×~þ 3w,@+£ø=åx ñWEð4t_S0ܸ~ãúU:%HÛ4ˆi,>k$)òuk÷iú—‡–1)¬•žÖ[TÐý¿@J„ë {ùC´6W‰kÆ®~øŒÃ#IQaÀØ»·Ã±ÒdàD¸ÿC +Õ‚w,n ô ÀeÍBÿ°ÿD¥XiõTy?)G¶xêé§Ð­%¦É ômëšå'tŒÀ#héÇ6`ŽϘóµ¡ýé•ü$yPÍSSgÀÓO $@úý×ã9P…°ð£üMËÿꂾ^ê’G&t+ÅÐup€-ÆÏ "âàˆ_ªÏZcnñÓ‘Æ{Ìä&l¡÷Y#}ÀV?@”ÜâC6²Íœþ³õ¦´óeº´ËZmZ¡Z«©Åç îl+Vø-”/|¨{áó¡r@GÙ$Àpq@RØédÙ²(ж´P|m3G?mâä(Xšút»s´0çøÈ¸TTo DçY[ +)¶ =Y1€ /šHdbXd9^K¼¿ñ›‰÷5Ž™úE÷Å“²ºÚf=£W0´í¿ò½W»WVqØ®<ÇÅé·µÑp?ÍZ/kIǵÝ‹Ð3”N@cY€s„Ÿ]ˆQ’Tj:V³‚t §a•)p]×Ñ5!i'Òðnâ”®ŠŒ‘œ¶ÀAõJC'âj¦È vép-ëµGª³³3 ÈÀõØÃitP‡eÚ†h%FQk7Ûë›9*ªž„ÀßÃþêYµ=à*#C“ñ[–„Ûß”øßö݈óJ³úëkÂ1›ŠY}yøÀ6/¿{÷½÷ß÷ý÷Þ{ïý÷´zÿ½!áðâKýüå|æ…4ªËT—¬ÇXWP'PZÞþE"# À[oÿâæ›oýÌàt€c-©7€Ô”¯„|£þhÁñ/Õ(<¶(×v…Ð0€ë7®ýøÚ_%üc- ñ“¤È«ÉÅï~rúôÙD~òæ›Wrãp%€ßØ?-5/LÔ`xœæ à“ˆkãõ'Aãw” úJÕýQõŠN±ùãüÀ ­Sî \MÈñUÅ»¯öß}µ(^~ùòËGà¿TÿÍ‹©Þ3AÈÁVÖý™ž¯‹°;:ø_Qì¤ àø¾*GšÌ—{|¤>Qkì±Kö#é }Á)xŒÀ3áÀå™ a°›=Ø€÷ZÇj "‰8¦ÜIA·Ï;])MC©ÍÂK £3ÈW©ØÚ¤vh0 +nIøiP£úV‚N—5fk. +¨7$º\Ž&Ðq«+½X—ŒTˆ¢Í!9€Ÿ%évc5cqS H'ý[ +uöR>tŸ|Jç>ªúTÁr#xù%Þ¢Cužfñ3¥ªÔÄ(ЋSŽ’§g€ÿkM) Pš¥z½…ÍôwÀàãRÚZÆÚ’;ÜnÔ„ÿYóB[×YW±YÐÅÁXÿ÷kˆw[žK?•'…÷ƒ{©¸óûOþö“O~ýÎ`øÉßÿþïÿþ÷¿RÐûEÑm¿´¿¿¿×îß)ÖŠüwçûR^ÜÎ_òèziÔRú±üwZ[¼>‘•pd”†Üí5k[‰$H˜~xú †¢ì¼>¢—¤xÓ¢‚â:ƒB9ìwHK›;¢Cµá ß£ƒ§¬™_ÈÛá! ’ÿÔ)-8hNÑÇPÿ¨ü§‚ öÃŒøÉ Š:º €‹/¯¾:x÷]}6ýum¸ÕŸ¸4ÎIÿ*ÿMá +…L·ñ…ð‚ʧzpÚø¯X"±pY[è&+V)˜JF;i¢ÀÉ%K5úKâôþQÿéà@}òH€¸îÈ`ü‡Ø@.ŸFÃ<0·&èU¹iÜp$¡˜¦ÄQ…œ¨ý¥ aSp#œ´3âT¼‚’ ø¤‹·’`®úD½¾˜Q>[cÆ@ÃoeÌG6H‡*è¡«³Q#`…<©Ó\vt¼ˆGóòò6ô¨ Á”>(íé<oÑ`.›å¬Ø¡9w_CÔ¹È9b:#„/¥èâ¯/áæ´×ÉšÄH÷é$KÜà#µ%nø>J*Žò™I²È“r¾Þx¶›¯ÛÚ¶6ä±N<ôñûˆiô2Ò4>jü£t’­B/¨(Vè?0òr·zsÀÑwt®§Ç ‡!.Ò.iœ2ª¯»m6gæ—q¸ç.E×:ú +R_=¸rækµó™T?GXlh?Ï‚ÆzNMŒ%:ñÓKŽ<¡µµ¼^`^a³å“%Pºà^×xx-ú“¦®'ëèFxë!kb˜õdr‚èFtѶnI§ã4ùh·‡þ˜'}ü_¥eäÎŽžÎpØþ°ÿý¾ö¦‘/¾]IÐýH-êã¿‹ ×þƒÿm: z¥ÝÍD·ž­w··77סbgø(J¡Í®¢!š–#-e€ +B•†.S]²Ú ðþÏüµ‘uB®€¸É ðËTþŸõÐy¿z‹¡s!g ˆ›OTü ¼?FJÈóÇ×HgüàÚµ‰VÎIEwÀD—@÷÷þw”œKë$§Ï(ù·IŸ>l€к?~¥,<Ž@o"ðøBí @"Åÿ®ÿ¸ý+™ÔuÐIÅ û Õ½°¦ÞoœOj?SÉÒ[:N\P¼ú®þ–´˜ á¿àáb.°ÏY‰±Ð§’Þ/m…¿´HÆ ÅDw@IŽö¡'û›ô òA–{ÜF/Àþ rÀp¤@8~ÏW\£¿ 0®·f‡<[t"SZ¥`”XøI{t?vð¿C×î"æc¬(Ò€ˆ5uðm1écÒ‡ŸÐ×T¯¯Õgë…Kjf•ùFñT(+`neï´kz«®z§ÄNp¬€”H]Ö[: R*` £€.×¾Ðò¾^ARœK×þ!ŽÊœð_ø.êÒUiY—У9·¤ëMŠ0´ÑØq<øoã–ÝÓ––ÖZ­%zÃòØ“† +rŽü`ê ÝElt³Õe]OÇ* DNÂpü.ÒÄb´åÒ<ñ3M‰îG$àÏP÷S}¯Ýùï_Ò(^Õ†SGâ’Ä}"¢dg3¨ÕKkKM=„5€Š;ÏÜ•9Y­™»·žI1 X㙃è:T_„X„(a>+‹ÂzYÖÐõ[Aϯ?'°–5ÛA¨Ü©Ùý2/ZY¿³¥|ô{v$#ZgÍš€À¼//èW¤®Nƒ?º”¾· L[= ‚ èy ¶×é`ž4úܾMIàýMÈú„ ã]ŠPÐìî]å !æ¯36ÀŠ=:ìã^Í•v“*˜Cr Å2šZ*ZŠÇ©é°@Xh(yKøÿS¬ð»»4ÄpóWXìxåy,á§wœ„%` +ñ}Iºqýú.UñW¯»S`Ñ€) €.àKáÿµBÈó=å téíŸ)ñ‡ ?5þ—“ | ózŸ±Â€½˜&X€@µ¾"À?Éy4Ä€ 7[ðñ ´O@S GIý?Î Ð)ðÐT¼ìV€T6kI–¥¶/—ÓfúÆxú©§þðfR÷ú# ? ¡ó±^â ã¾FuõZÄ·˜PZ©3 NN4ô—Ä "Œ eª¸¶|Ÿ‹k÷¤@?âšÌ…£×žÇ!f#Â^§‰Ù¿øŸ‚Íb]a57jæ·»«·RŸõ2ЭTÒkc—úæu.ŽŸˆŽW³ŠÀÚZ Çn ;ృ£^©ã òõ +Ýãè*ÂJ|ˆ)].âK"íÆ2Fb‚eSÁVç !:/šØ+ºCåÅB>Ø¡ø÷­èãñÑÂe­ùg´ä•)‰²éÅ:4o”Øó½ þOU—–oPIó+3#¡5É4—1dþÓ‘8ðĘâ5E¨\hbö’Mˆÿy4õCýï~§AD<àf‹'ègÉ«Ô^oθO?z7¦ÂÆ]6Ø©}r^¡I.4s…±éHNÂg?ë4~véAŒî˜j ¶: ˆZË»#ØÅÚ‹é@V $&ÅËõ9½W•k&ÖÌÎÏÂ8ùäÜ„ }!kçM[1è8’—„:ù:%ÂC +Jôô`Äôƒ¢½Óßëc"(PP¿õ)÷7 ”ÃßÕd -çT á»+J<)Õ[‘ø”†ªÈ¨ñö*qãÁ•^Ì!I«þübY¨ˆR5‰U5ãþhú^̱HÝ· ùúKÓ @rúé!Pñ»gE¨¦O``žþO󥿩ӻWIÈU%þc†Ð¾sWo¼}_ 辑€%ü–±à€ÿŸ…ªûÿ5±8(µÇ_ &@A†ý úµÂÀÚ=c¢»‡íßö…p‰Ä” ±×r4x¼I÷%4ÍþOˆJî² +ÀÅT~ÁË¢/¿¼ý²ùe·xæ™§ì®ã/kþ…ÿÖøÙÔŠ:ô‘  ¢˜tmÉÑ^ÖÕ'y‚}ì@ÃÔ$†è8Îß'ø?‚ý)Àq}øÊŠœ0¸`ì`)áàà:mx» ¥¹Ü7^8º°á@'9´P‰N'Œy?_ù)ŽÍÈ´RQ®â61•ô.çï·8ÉÕÆKøZY³Þf÷?w«HõCWËjÑ?^‰$êÚy¡æ´n7(üV$%±êy9]ð‚Œcçïùrf&“¨¤0.âzÍÁ#Tl1œ‰Ré«+ +$É­[þsÅЃ¥ý.Q÷l {¥ö'àLŒr’Ä9_il»&;„Ü^ôóŽßhŠ—ã¨ØšÞNøãÿ 0›n.¿U4nQ`ägˆb¦èùæóÛ¼ßë+ GÐnû1êíjiŒž{k À ¥Íû9v¶tp9tüZ¯€ØôáõBé°*Hx9zÕy`,¶§ø¤hÏa„ÿfx2‰V.èõ+-Îéô~Ñ‹ÖÕ´1&kÚL½J =jÓcÿÀQ§1@&úÐŽT0ò “ßû^Š0Fk‡#b¼s9Å<Ž*C1ÿÏ?ªÜd4à±daîûà_€MÇ0 +”Ñ© w€„þW:õJÝÚ¥H€‘sMh¿žr^ÖJª^Þ~68$q .:r¹aU•â<__^ ·DÁzá*uÙÑ_•lÞÁAøØ)¶—×9ü&5s>ã ’†Î±íØe–.“烼±ß™¶|€~‚")¶ÿÅú"-ÑàtžO3i ÂH.îƒÇuåùJ£ÄÞ„¶ñ#OþÀ+sü82&oJ°sLOz"j†ãÛVŒl'­¿ÒNÑÃìo +00xY&êß•?e$Iöb6KŸ»Kÿ‹&1pñ¢…»¼Lºf@É?!D‡³Â·G€wî¾G¢È¼Ã%â`2‘˜¤ј.³ß~£WÝÅËœ)î `­^Y£“`¾7å whÖ†G :…Èò¢ÝÞ×g2JúFòºl¯"<$ÓÄo{B€M µú»šj '£)Æþ®ñ¿»™‰Ð)%Níuú¦íˆ(€^“ƒPàæ°ÿ˜K UÓ£bˆv,µ ÀÏ“à5ðSIÓ.àm°{F°­CK(¿Ÿ”nÀŽb €©Ä_‡ö?Ypà YC×|hJ""áéÆ =þQÈŸäÌÙÞÐ)o^{ü?ÈÓ1÷'“ÿa €£¦£OÑ线fúõ¡ÀrÏMÔ ˆ$ô?0Ç û€å¸:€ùf¾ÿË"/2øÇ<þBöÔ"†Š)a$`l@I$ãÞ ..9Þ `¢/ÓƒdˆÏ1í(½µ½'¾Ï´û ài}Î^[×·€Bô0m@ûw À„ÎFÉÁµ$¡DŠÑŠ·=Nj؈=Z$QÁÙ²ª”=éÑjlç(›ŒÎ£b:GOÿàT€þ¸(ð¯ÔU"æUZ#(ïuqÒáŒXœ®Ê•%ZY5*%«?Ç;•ìÂFÙ·®@Ë«X&á2iä äËí0½kS( à”œ‘æ´n¶×Ú#ôŒ*^ŒÖÙ)Z§êPêhü¾è¦ëÍÆlµÉÿcæ„Àœ txœ2¹QÎaBÄè^@[–,žw¼‚4•ïgâÅpˆ_Îx'‹Hã ì+ïq [eû›@ðM›Ë¹È¦gD¢|豦ÚþŒûÕîn´¨€õqó>XÊÿ…еÿt_z|4è¬E‚kï*²F_«ÒBäé¥èÈ^ÖÈ^ û¹FjÉŽÃsçˆ<_¦&‡‹Z­^Ca"AB,U1Nº~‚mM4nœ‘­ÄYt{;ëíiï¾¢×ÇÅ Î-"xFNY¿]IþõÄ¥ðw'À9€ÞnÓŒ?éÿxømÚåo}]{<63%>šž××W’Î?-§Ÿb@Ï +DøO—>Àÿ#*BmÐÅëéÄ!7o¾ý«_¾õ¦-n8²ü Àëvÿ~€Æˆ?ÆýRÐòÏ>ýԹݿVèêU©ú€›WwÏœ{öù×° ¼)pO)›¬Ê'ysª +à^rVüâMÿ†Só´”Àn--Tµ±T*•É^ýK¡{?šûšÅÍŸ¾þ„ã>îä,àÄWfNà~£üÄl…?_ÁcºLRm¾ÔË·^1°lå¦(N—Mâi)8!%H6¡h²àÜÇ$làøtuéðGz<òˆÄÄ €cûø*®“^Eð®I(î/ÔeìÕŽ2€Šœ)ê“&U' ¶è¸IRÁA¹Ž•ƒþ¥=) G°‘1•»ÊmJN +k~a;.òåõ‘“e1–•µ…í¬x}Kë.ÒÑ òÅf³r^{ðò²òÌQ*e'Rê$t‹Q·&µ›ZD4;[ã þRšLÓ"Th4LØ)ÑB¯´×‡ƒÄ+ï|9r.h½è#¸nF‡âX¢“×\Ò£eØâ<*ÇÅÖ–5Õµ%wsL¶k‹³UZ=Μ° +Šz L‡Ž8€n[Qz^E{YOKÛb ‰çyLå*­§·X[¼R¢6‰&6óA±ê¦o¯ø +1öäUÞ¢þ\½¼‘ïÀ€Â€£\ò 0¤ V³Ùzsi.øèû ƒ d ¼åf^=ï·h+Áø¡»ô ×Cè 2×ÕŒD¯Ä)Žë2 ý«Åóh$É>\»4ëèaÞØ’ZÞ¹¸4ßÚ°þÏx‘t@ øŸo67*ç!bî‡Á ¤–„ÜL™žÈúúÐ%¼ÿ^N @\ìÕ>Œ Žy(’0üë…ðw(5}ÏÑÿÿ´¤3€.,4±4ìè6u¼›í±ƒ£mÂÿÓOi¡ùiÏœ¾‡ Ù`'$aíXp»O÷”š†€’þ• ?zü€Ia¬§žm¹I¼~% VþM€]ZBcÀ E_’°~WÍOQ÷²”rî…s»çΞyAÉ‹u`8DÒ›;R¤ÂŸÂ¡¿ä zHjÊG?® +è»ÉŸ£„ðlžÔ¶£&låª\ +þ#p¼Ì¡þ©Xx¥0 €£3VþJª½KQˆ¼¬‚|<À vüŸ°=ŸrÛÿ´•ÜÌØ `Ü`l(¿¿´#™ ôiÏþ0|¯4$:Ô5éP‘c€°L{î£ JT˜ÀŠÀŒQ ýbÓæ´Unk•þˆÊKI­Ç/øÐódË]Á—Ú-êõÂTlƒñ +·šõùê<…²¤y¾V§lû¯ãN_‰QŽsºΠ»Œ¡ü‚Ü]ÿà4’ êŠ-Š•†`T€]Š™ˆ×Bm¾JcGW(„È{pQ©¨y/¼õ¹’KMØ¿¼R*q.Óïô¶¸¹$ð[k6[ÍÙŠÐçÄì ©ÌÔAÃjœ)é[ S•ßÁz£Mªñ-ëùñÀ­Þ—S¼å»ð¦—Èè/IeJÈy1ȃþ=$–<‘Fíõô8õÌôßáLþcä¬Óœ™C‹§ó#QM¼ ½!÷°+ +°UåèACz$tÊ ÉéyÐäfk]Ï h7H½äA$§]–UéLQâR´²8$ lÇ’ÞÓà¦À/‚ì2À¹×ÂðÖÛ7$ ÀUáîýð¿Ôè9N}îôSJÊÀLÁò¦öüäM±Œ°¼ þ@ëGúkå;ßd·Ž €¿¯œÓ-ì¾€*€C’^ÜQ‚ÂO“~êõm÷×–¿ª/-}MDbÇЇ¥?¢í˜À^s…|Pˆöß_NÈ·^y¥ØÙyç䨢øØÖÊCvcpÖí¦-&¿ÇX•ÐÖÀ=ú7›‚0ÒÇžIü?h˜‰µuý0ÐWM‘|ñߣúÿÑ}Ø Ì'$xpIðRBL—´J¡´õÇáþþþ'{4$§—ô­—ÚË+m!sW¯Aïv#f¹vzyCûGðÏÜz¢Ro1øÌÀôQ‹¥oíõû;Ú.zû„·‹4AÙà ö÷¢ÕVtâ–gÅ@|Pþ²æò‚à…áî{ƒÁåUÈ«ŸJtá‡ÜìßÙÿpØßÙÁ¾[äÊy£u_R®9 +t ½½,ß{;{}Òæìíë|aÙN»±’‡ý;ŒSܹƒ£a§÷ª€Û}vú·Ý¡]+KÃS@6:œüÈ:9/ò.=Ës’Ï»mQ—n^ìm ŠáÞßE<èò‘Ç4½rX.yP^ÊEâ¹I´ ýݦӰ÷\¸ö >;Á¡õä½¶ÐÓ’+:Ö ¬-ÛfZ0ûÂeðŸñ‚2œÚÝ—"|BÒR¡>+Åfƒh+åìRê†þX)ŸÒÓõµAÏŠ…°†ÛoeÍœF´è‰!¾D³–áŒÓ‰?IɈq”/Ú+|JµˆÍZX4 7W?á1ä¬ÿ*_ÙC}X οœ¨0ÆV{â„ÇU¯ï»ëôÂúŽÆš»Â~=zѽœDt& Â÷âúá©í²öœ>cX¯*-—¯‡$¡íXvϽ&Tw+,‰¼.ðÚq€tæa¡g$m-×E~ðè°±?„\Û={BúÔM@‚\-ßF~x` À gé XàÿÆo¼éfÓ’ÞÜa± ÿìì¬q+¿=þ*Rù…à⎌T(’ûø]ࣽ™ð¾„ÿ{ÕûOJu)UFÚ0¼sk"< ʪãeLžyÁ6à1À+ÀŒÀ‹§“ :~/?:ŠˆdHF¨æ•Èn²*Ÿ&ŠL0¤N”Z2(Pð}(À€(€Ž›ð Yq‚¯ÀŒ$ M¸^Ô¤O¢Ýœò]š%uzÏO‡ñãû+”l7…¬.{¥ûÆ=}QOTÉeÁ=¼5Îó¯ÇH¹ìEB+@&Ú{‘ÿIw;:±(ùõ¶tå¶Êçøvqy‰–+«Ï.+ÀÈ£Ú§"fE“%Å9knÜÒæq6qmkµR¦£Ü,È¡”Ytg£6»ò\º4Mš¥Îu·t 4cˆ·hJõ¯V銞vh¾Ié;ÎMvAOOI­Ó3]ÈÊjãY%çGªk®û‘À¦4§Å(ê°Ãƒè/»ïÿn7Ov”ôÇ£k§b5<â¨Aã§ŠÍ7 Á¢p÷‘¹æâ"žk-ºþêb¿á… w[ÝózD’— ŸõYÙr>ÙÑ ˜@'+$Ÿ 2"t×.['„ÿa9ÁÓÛêôÚË65ÁÈAà]]Œ¤’1.МcŠ,x9â °qÏöê­ØNý[²ÕR®ôóö¾âòq·ÎðaJÂô¤ŒÓ$Ýÿ©hqêñjí»š€ôFÃÿl}Ýá÷§¿Ž d@+¸c;ÕêOÄx +7Vpˆ¿Ä´¬ïûšÊ÷¥nèâ°ÔûÅŠâwB&TîÒýüêW¥€f/$ð6Ì@àlxèO˜íKIÈŸ$E-TœþßOŸ¹b0ÎMû°àÓhð¼MÈò ¾Ûxœ={ö™ãç‘ÐsÒ¹×ÿoü8ÝſєàÿXP±B¯õ‰YÔÿŠ‚aà?%–Yõ€þL•‘‚áõ +ÄLð?ÓR #Åÿ,ÕEý_Å\ðÎ@È¿ ðÎ})ÀŒtèR^pK€dô7êšc›piˆî€&ÀQ^Õã†VÏàonFl í˜làïqÿÊN’ÀégX)O¨þô€ÿ‹ï ÿ+_‰& P¸¤ÅhGÚX^^nXPpùÙg——kÏ.hõ'¢ˆÚò³µgŸ]XÐAZÄX,úxœE\Ò‹Q«0VŒeaY³t¥÷l…![j¤NÊJ¶¡É× 5ÉŸT\Ê{Ÿ¥¨©érËœõl­âImy¡R«ü‰._Xæ4Dù!1˳5%õ'Ê)açÜÉ’žŠ/rnp«ëb\C;•rÆõmÁ¬Ìê~*Ufî‘¡h,³ÀÔ¨T–¹c_MwYS +µ…gkÂŒ”——ã!—SzòŽ9mx}¤ }ONoýí傺€¼.ˆ*XôØ:ô*ÚÑ'"¼çUAaø:X%—âÝÛÚhe3ö℈´PÿƒdÙ1€L@AtpûZPÒ“ 'Dɹ€D¹ˆHi¾¶åùvC¸ÛÙði=÷Æß[ÛZF¦–{ºŒv¤ +$;¿Dyke5eP'#‰Pe£¥7$›y>l¯ÞV(ŒZ’|¯»ßç‰ôzEÞøÁ(Çùàöí½‡"·u¥/3:0_™tþy&®öÝšh‰¾€Sk4þ®ðßmC´«!üg(Hs‚1¬ˆ&¬O(þizq½é¿Ò!9À…ž‹SJÕƒ}ÐtGS´YD¬W?Úì^ÃÿŸV€áøZØÞ§%¡þ„¤G N€?xôgÝÀA Àõݳgè +MðŸ(Ïõ–qÄX^xæ…³ú¹œÓB¹g^þ¿°û†.ñÿñuúKÒ‹; ôàwª"íX'LÀÉ +$@Ú¿bÅó¯ ýĤ),Ú?í1ÚO¡ÿƒÊ”ÀÎÎ@¨¿ÃyÇnI¢`Zfžš`¨ü 0¶P ¤ôÒ†‚Ét¬ÀdC€±Ò®E2I¥=Ô5DJÚ%Ðâ"€T@ +NKø¯5W’”`;š¯Øð0š|þWmxnðK,"gÏЯà6ù +ð/ À¾röư×ÉÃHHûJ´`ËÛ(`ü±“¹À3šÏ>2)ô;Äkÿ`Ÿ˜@˯êcª–Kßwä© +ß]ÿ ðCáÇ&€£FͼŸwö¿yþò ÀJ2ð@!ðë_~}û×@‘þÙ9!QROÈŒ°<Á¿ä©û†÷dÐü4fx:YÔѤ‰JY¸—À¸!€bJÕP¶J¥=ðŒ +ßSŽCÊý#Àÿuj™’…+‘¦NÐ<µsÂÀÿ¢Ÿ~Tœ$Á×?^ÅéÉJ¤²ÓbÍNËnΦ¢Ýåµ c<´„Kósóú«K¢Y0B52goЯn'Ë7ŠÆJ¾‡Ím‘Xöú{w´úw:tÄCM½ ‰.€Õ éZ]ÐGbW 6StÛÏb¤ÐB[²ÎÆK褙N !ç¹. MQÎ=: vk‚ÒŒáÈy±(„¹96R½s§•7žh2º\¬/-J„=ósô|°Ä¡" ÙÊå«K¢|9Ïî† ¬ŠiÇóŽ‰Ù¿/)6ŒMÊÁp§¸Õ^îŠplç·†Ãß²?ŠÚÜùð7{{¿ƒ¬ ƒî¾8—Òþ@t OÏß}ò{vû;t¬Ð,ݵÖp 'Ãâg€²/dßéeÙŠ«xžü»Z +D‹;wöŠþѦbпÿ5o?g*¿S ?ùd0؇‡Ü¿ÛßãøÍ Xòýèº}X~d„|ô‡}Ü&o‡A¦œˆÎõ²ùj½Y w†d:õ‘‹:öX]ôB)ìƒþ‡¢v{ŸÄXˆw uùÊ*¼U„bðÑ'¿êÆûÃï Ÿü­r\ì¿sëäµì|‚²ñ%!ýaqaaµ_ ‡ ¸ +`Âq)þH­VþëSǦZF[Àî&Ú?^{,Ô0ük®F«·qÀ9$:Ø·|HžJ>¡UQøY7;ºàQ)àŒç?ž“à­äðöÛ¥`÷ÜkáðK:üÕ/ñÀ p ýKÉ_ó»çN?e €Ò‘ Ü`ÌáÒ`ÕþAÅú=hxùÌ ÿ…,BÓ6 ¼ðóÔ4ÝÍ Þÿôòj£ÕK‰O¬ ÂWdžC º=c„@À=;Í*Šœ¯`˜£+`t™Wè Ý-éþTˆÿÅ6Ææÿ `†Úüÿz àñ™1ã¨lœ~:õí&À±^㆘ë¡ xúòbǨ!€Ð{ úÚ(ÂØ É€>¬ÿO hƒ€ØÂ!݈-_±`B%8òÊéÑRóPù,&PIñ-ØÛèØFŒ—vk­>/0ÿÆrÿAP¥‘]Cj NÍ‘WéHµ÷?¡á]²l4B{ã§—€ü‹¹1èi¼C*¶Š¢½ÜvC2å2Ei#­ó­|¥‘÷”ci|‚nÌ—¦­Y®‹‹ÖðM±€± Yò…/µNî c‡îv®ZÍêK-Ò¡猊 +gPš² Ÿ|*)%Af›†*_R¨Ÿ™ Ýîr÷Òêêj{~ÙºÒäùR•bÓl–o/oëÿTHMÃ2=<Ô6 %Ñm7QPK-·’™W©T_i,4º•uºÆJŠÆJré¢x£Ôíîêòz{Uˆ•mrÓm8ƒrá +›n¾ýìö»ƒwrÎVDÔè¨1Y×[“B¿ý'íF€Œ”ÈJ­¾âätV—nÿ‹¦ôÐje¶ZÓÆªn½³Q‚™Œàû¹½úÜ¥¶Hû’Ø +1 AKI®¶¾™oþÙ»z"úÀ¹òC—„÷c¡lVá)¼ÇÑÝ_¬0P0ò ÖM\b?|ñ`Æìý¼U}O|s|)ŒЦ@}A9ˆ„¢)`ÆpHôÆ\@’§ÎíÚ`ì§…ŒÕ•¿“sn ¯ç+ ¿wsdøÕMºJáT`€?X¦%}ÌtUW¼áVOŸa\¡ €¥ +@Àñe7uø¬° :ðÂÙÓO¡¾FTÒûÇò#÷•‚@ }kÑœå¡ý©ï§òÿ„'8 ímÙ"ÑZ§cˆí¯*Õf>îÿ¿w·RþaaÈ_ +ü?þÈŒtï§Æ6€¤"ãû?a(mHòDØÐ"¾¬c¼ô¥Á&½Ê†Þ)|OhOb"b„½>`ì` ³Ã€ËÅ8€ ®˜ðà_ð(ëdRHhðµ$aÐiÃ1éÙ†D;[ý‚öì n%.Œ1…ÌKóóîH^"Õ  À®äɃk#4›½¡À’-Á&MÀ¨æýöz?ì÷z¿X7„ª_[×@Q ç0ü\¦2„ `)%o×Ö ðÚÙ„W¾¿‘:Ø*Šv#+hŽFÞ9’5`këe7 뉸×Ù -á‘oîbЬw +÷v`Žƒñ¹>?7_Ÿ‡€ÿYc¡é1Ý @ ‹=o¼å°¬gÍ„÷é¡û¹O<ü vjÊ»—@ÀKBÔKë—„‡ÆÀ¼»=X~wÛhwiNÛÃÛÅf¾,6=P™-0̺·¶»ù«E/«£±QWÛl¬HÚÕ® 7“.Ø+ð忤ìéˆF{óOn©ôF¢PA?X²©h²—mo?Gm¼az“½h€pxy•¶Ê9ºoQc í\Ir9,Æ`M{¹»ÞÔàI‚Kú¥¥6þ¯·»›Ë¿2©L@l”-B.@3"u]¶ènÞ2ÉÖ/eºÿ<ß¾µ¹}IOäáKÂ}¼8õÝ{ÛYÑò“ý_là䜴$GiÁ/Ä=í>t1˜cÒ§  ß ( šÞ]‘ÞlÕBðJ%”‡å©sW®Ñ ÀNšÇ[`U—Ëëv¬Ÿ˜ÃàFã?€›¿üÕ¯ÞzûgápÖÆƒµ$ý—vC—Ý`†£ßNÑÛÁp¯”²â•Fþ$ ’ÒWŠzÚÛ¯(R¬svãw©°#D¾E v¸ØÞÏŸË +½7Î +Ñ;î ï ïüfOÿzÞÛ;ÿ¼ÑÖv')ò úg—Ó{i¶tÜÿsƒ¿ìñz·¨•رWˆ[Ê]0 ûƒýa8üäòe=]j[7Ρê†];­ÿôIDATb¿»Šqäa ú=—då `ÝßÑ[`šÆv& Àwe€ˆ#bZ_§÷¿n÷’9€Ö"ÍJí¯úc€f­?Žþ¿p¯ƒ“KÈC2¶Dõ¿ñ_eoÂÿxŽ÷sXl +à_Ý€¼>¶H÷ Àõs®ž¿YZ®^9VÚ!º"€3ßêô ™¹ñ3€×uÌ=ðàO¸†‹?y`@?Z¹ +àHs/§Êù´Â@<­Ø£æˆB©îs–7ÌN½ûcfúz£bü§ ý9n‡ ?®X. XrmÁ; 3 ü”tåR^BNZ0º +pº´h x¤€>®É†§c€®cL ñR蟖‚@F;GÉP¦ÂŒ(ú€@ø?öH }Z|1ÚO"áX©´ÅYÊO¸Ž +ª±Pö%±þ [­€¾d Àš¦–8€kšÔ¢:*Ðé ÛÍÛ`¬Ïµé$îtÜimO[ÙrC‡¯ ñ…›‚Ìu\ÎŒ©`=ZtËuŒŠ%ÉÁ©u,Ý!$t}ÓËw:ùÀgdÚóVo¸Ò†ÈÅÌ]´T´]ж4ýð‡?ô y¶N8×f.º1å…&ñƒf#ïÿMDu\áAq €´ššNrVµVÈÖÎØ²ÉCÒþãiÇcæIÑû80á¨|µqY÷/p®ÚEÓ’VE>Xé¾ë¿[¿!&ëÎÅ»{\ÜÒº•µv+øUp®§n§Å–+ZtD¾ üê#) pÞ‚®­ÝÜì‹Þ ½?y€¤×«¹h‰BÉÏÞ¢Ú´—ÄûDD4Ë–•Ñ7íõ×£wă^ªÓ`«AØÎUL(ø1¶Äinw3•EÎ ÁºÐ ïî•O„%±ù ¿xè‚Oš¼3õ™êœ(@Bw4~*ØcôךVîxEþµIcÓ‡,˜¡Ïëß×mw×7³M×ÅôÝÛ¼á~3$a2 *ÇÖ»››ÿêмEäAyêìØàR‘õ @I}äúö{60¤–c”€] +¼ñ 3À À½ À_ýKU§}*õ¬¹%À}Z®]½*lOXo!<ÚzK;SàA €ØÅk»oDXˆÆãIøì>üâG½=€/ÝÞ1¥?A~1qÛZ1±ëx9)6É×Åÿr4ÀÁ-_rû7¿ùͯwv^qg;ÚCɰQrDZ¹=Á¿ä,# Ÿ}X\ >0n  `Üà^£†“&¾>}±C@žÂ¥˜¾²N€Ò<NÓ UÓFz +cb©ÿ‡&¤¨ß„J ›4ÅŠRÀ3wÑ«2¶ÑFýŠúÿÅŒƒà<€F͵ €#ÀTPUåw“}Cµ–€ÂFä—mŒv õ Ï'èëFçT'þëÿö>R`]I(®™¯/_p{2Í;µ¡¬‹ix"ã½ÞívC`¾2»è†Fº¿ä‡ý: C|òG:ÖÝGÑ\èÙÐöÿTP=%溨ƒE²¬Qkç µ᫘Ñ1P £ÖO7žz +|I´¦§„v]šü¸ö î¶þÝêïvŽç Ýâ ޾5 +F²ø =;p7n×¶¾}¡âÄ">´–‰­é=é6ײl{¹ÈvÌy†JNWåkÙ /¢ôoEßtíù¯gê(I/ßËWi¢?w:P+¿}w$ª7O˳b¡)@’JA/e ’Ó“†ÊÜj¼“Kë×}kƒŒèÎðVÍ_¢~bA{çòÝíŸ ;ƒ½—‹ýnwðÊÃÐokcyUÐ.€ ´þ~([Š,-Þ­)Yêa @¾²ÒÆ|O+ lÿvˆÒ¹Ií€HÁæfƒäÛ—o]>bvyHF +Ù ˆË\IÂsÍ×…ÀSóA €›NY~1a¸~ã¦R0^߃üþÙ`3?_°\þŠüp–öˆ2qíæ[ >uæ5ºü/ €’Äírðƒ3¥ Œ“ 0þ°ÝÂâfü÷—ko\»¡Å?ÞeD€3}Ú¿1x þË9MX˜GŠ~€ÿè@åEL‰>èã3ôcè/9µ¤27@Ðÿ¶À¿ý·¿¹ýÎÎ+ôXÚÿ%*J õ©Ä+3R£Ÿ¢y\‚É O°€ö‰JqCª˜AÊÇQ^úÞ8¶lðÌ3¦¥ Àn©%ìÿÚc¾a2KaœlÂJ‘ap@1íà‰¸À žIxð5ä þB¢´@3¸¨Ü…0\>Î •{M ÓêtÖè·e£µÕZzQ0‚„9™£(±µÚ(:+xbJÈÕˆJâ¾òB£Ž˜ö †p¤Çßë|C)½ˆ7]K +µÂèØ¨Ùe]Dž-g}éðýAO¹Ã>±!hWÉ®„ÀÑ`¥‘ Cüµ¶ëbv±7¼óÛ;þþï~wçΞL Ú»$Èê1P¦^ëÿ›4pÀ¹9´5}¸óЃÖN€K s· T"Tÿ_œè(_]ŠSÏ*ÈÖv`Ÿ–E¾ß û…RtƒÅŽ^ãsîÔ!Pál²A‡ñ_ì‡W´±²âýz:JG°Ö©­:c>‹ô,wõp{¹ÐšE©[÷>$z®ïÑënž_ô6<„$¶W¯`¯ +|`d[o‹ ïÂGRÓ‘„÷¹áa'ô€Eêõæ†r¯ï’›¤ÛÃbê "Cç§G‚ã +Šlwµ/¶$:t#”»¤˜?Ùòà*ÀwXýçE%1ÀLÂ}ŸÒVáQ?Tèœdà줘?4Aÿ€u4|Ìú´ÂMø¿²¾]¼ûÁûï¿ÿÁ»|Àú=­îÞõ¬I‡ä½TH ÆHÀÓ&T3”´À·~j6¸) €;zýõ`¾ñ?WümHh?%¯ï2áêwœ@^?óƒï?uú…¿6t;-/´ñÓ×Φ ä­ë»ç¢ÎýM?”þ„ù#🰠<˜¼yíÚëoˆ ›7„Üæ%ÁËÉê¿'‹ú•{åz¯R8DI|y_¿cÅ]«,ü¿÷ëÁíÛÃ},"ï¼ €°™3˜@fž>-€Šè/9ƒ„Öà)ýÓî?¦QgB]bK+þ±^ÂÝI/€©¾7©÷Os€ñ–޶€ €RDž6ô ;©ºªät„oH&°IKÑ +Ȥ.>[},à"°nMQK¡ÝÚR +ñêÒ-1#cG–š&tÜ0`!lå‘à¤D¯"Þº^–·—61? ¡Ífýüy†èŽÀøZv3F{ø˜lúÑžNÁ½Kt`4ÖAC²NâÇoô¨f´¹^ïö‚B*BÁ–.¨K¶šõZŽÆI#Àú\Uê¿æ°S‹8ä­¬Y_`D\~h @-E\M,e¤þû)qù¤àSWBï6F2=AèVï×xñ! N‹þ«y¾³âðŒVÉ1ë莨ïlm-nld +Þu ¬ó„¯€%š9˜Dºíù«Žò¡\Øî®z÷jã¥É ‘èj:T:»o=ÿ 8/h­çO}}ÿÕ*C:7ÒXnû³ ˆ!‹›kõµ-]·ûÍtpáŒ83:+åä•’)rÐÍÞuØûÄWöYl·K7ć$³Öàê ͹ Nœã=Û@ÿT?é$ä„Jö™T7ÿÐd¡F@›Žý4Al +Èpÿ×'Ÿ¿ûÁGÂ|æ»ݽ{÷£?þôÓïÞýôã>fû°DyPµ€Šæ@ÿ± ÀŨQbÒMS€«ç^xü[‚œƒürdxáÌ9÷JýŠÁ~zºr•i7q”´»g&îVX›)þšÔsö];ÍêuÂÍ߬ˆ\ýÿ±÷7¿q]iš/J¶%u‘*1:¸]º²JE¥Â¤”Mj„Ša†’f´™š!î¤y +žª‚trP(¥ªäÄ(Èÿ`‹LÅuó€IÚ,2O29P–Z¶)Í<óŸà®aÝšT÷Üç÷¼kG?$K²uÎ…ß±?×^{Åææ~ž÷YïZëƒË?Ûfhð¶ïšýX HgW:ÄsÅi"ü}c–(À_ìøö쥕ƒúϰþ¿¸øÑêo‰˜¡`f†*£ÿ¥Kz×챞Áƒ§@ê®þ€ÎR `ÝÌä!Œ­ÁÁvol¶ã÷‰  ÝàÔ®(­{¿ÌZ•ŸÕ˜ÚzÌ&^¡KK²Jô }uÈy‘¸àß»Úì|ÙÞáÿŸ[k›ë[› òwš_‘{,)z)ú%oT™ñ_fäç ìÏ.ø§¢}‡p›~’à À®€¼í¢`ŸéêeOéûW¼~ùÌ«E·ÂšØí†tèö Ñ Úè2t=øªJÐ'XÄ<Íã(øý´¦Ó>¸Ì`»)@ +àë–Ú+UË!h…O7ØÇ‚¹o}{ÖW²0'ð›ÖVë£WQf>Ì?$`é$^ø¯·‰Y=Óv¦}*üE¿þÓ€à€¤ë`«¬]gÀ €'l¿(ž¸®† èQï²ôˆvY:àÐU}…béÔˆÐe´ÆUº¶wD„@!}Í0XÏɄߒüÇšà_³xS‚&‹zíæåŠÛÛÛ­· œpQ x¸¯4vìXmD@p™úˆ^¤?‘Ú[©N9U´2ú +•£ŽÈ N þ‘° ÏÃF*ò°½¦|/hÃf1k”Ÿ.,¼«q2u-h…ýMs½…JYp@rã×5Ǧf[ì ”cMåS "i;s]s ·F/@‰ÐPŸI@é˜à’ØøêÀ;Í]GAý¥F죆;SºÑÏoiX™nkµZ8±´€£M4šö´9"½×!z@LúèaâyjÞmûîü6¬Kh-ê_÷·ÿ¶•_ºÄˆÀY®oÂÿK“n,Í1\`ûKÀ ±yÈÿI°œÎÜ íiK½´[y±ñŽ:^~T-€¢…U錞=ú2ÊPCÔAÄCf§”«¶'M)ú'I¢×V+åÆ×3¸ð@ñïZ$pñÂ~Ü ㇩ø.ðã*¥>yœò}éñXॾ>~+$̼@3À(©,Ö„ÿ•¿v_c©  X‰<§ñ/°ÇôOð5e›®¶šõæéñÑiíâPÓCø7æêÓ?×Îç²h4P¯7ë£À3…F¹ñÏ—5²árMthÞ8ŠN?!VB1jY9oÖtô‡[½£ º(Ùk+_m5êã§Çé¨4ºb¨ð¬^­IA” ýÉôH™ô0ÕϦ•\?çtµÊ’=YmVO&ú;8±ò8½¨E½Z›vhƒ“qb–5±rÐi-Qáq†1pôÕ£J5ñvu"»ô'›pè…á†o­29 Mxx³žº‹;KêüŸÄè0ÌÝHò©Š Tèÿo 441wwm…iYÞÿÊòÆÊ¦p_`së>`ã·×íTLxAÿüøóéÆ~>7®žG¸õw`# +½S àW¿¾M½Ë×o‚àÀ¥üý÷]SZ„«¾ß¤ë]¡'àã‡Úê¾ÁWsJ£«¿?H_À·©ë¿röÕÁó×®íêdà~gêFùÇO2(ÇÕógåûžÿÙµÿ½3ýìç?‹hÿ˜±|)mÇÿýDÅSµAI¿ë#Pÿ“î@öñÇ¿ýÍz@ 5UÙ¥Iú$Éæä-ìRNœ:¡{/'½W7 ìüyDÿþ€0@7°y»`ûEðȉ \ßÀJ7‚;žËö*ÛÿÞxùFó×c¬,ÐtÕXíÿÛ”$ZP‰‘ì”~ó©“ß² h*ðÿâM}ä{ái£U®4?E.”_¾®7Ÿše[¯ä#Œ%#ü–'™ •fRΚ^Êò¬t,#ÇMp{‘@,Y<ñ@qΧ>j5ªôøÒ¨76GH“¨ö–«ý] á礑M +"p6g§ä©Î•åÙ*C\»pwñff…ï´ 3˜zON—´TÌxróÙYm«*’½LÝdŒÀË.Ž\)÷š}x˜ƒ£Äè·-U7P6–-Ôhg¨Õ‘ZcÆ;™w‘Kº¡ÜÚàÏÿÿ×ÿå†Ö;l¼J—·Ã¯Õ‡‡†±Ø«•ׇËÚz{¼YÕááaÁ°v¿^&^Ú$}™lôíÞ²õ]YÙžÃ%{ŒæÓô +X­ýe•€:FzVÎ\ôí៟µBǾ.ÈøëÃãÝÑz¹¬‹ª ÓuNVI;ñI´Ÿ+TOOЬL;ÙŽkžŽÁ›Y­”{ËŒµÜÛ×ûg}e]‡ 4†(¸ 鎌Ÿ~Û¿Q—Ñ%⎼>G¯ÉÃÕ×^¯ëÐðkNó§1Äÿ€o;s}8à°cúìäý™1`¡è%½SÐNþt"ûcèŽÒ!7$€þ«†í+Õ¦—×pý…þ° }kk}óþý­­ûö3^p{ì`O€¤h_,½]üaZîhA€· +àï~yû W.S½þ3௃üú&]ô\¾~ãV(W öß3¥…Pý1“«μúꡃ¯ž¹b +hÞQÎ šè’4 <'ü—¯^|¼pÂhОºYÆã']…‡?;/Ì`XàÿÒ5ýìgzbìö3 ¼o<>=Fÿ4ÙŸÔ^:Z›Ì(ÿMë£VW?ÞX¥#ÀìÃìÙ9^èYãR6)ÎÎêÌœ&æéÛžÄïøüqÿ]É +óvq€…àQ’¿Oœ0·h ¬9ªÇNøßñ{žL(k²b-¤Eô ëÿ])vôÀÎ-NªD(I‚„oÑ VÂMåùÆ'««Ÿ¬¶ÊÕÆÅ™€KA>€ýAǾ1>®¬äðY4ÙÇo7 +¾Ukäå2=㽃_(6:2ˆG–{gì]mž.W3:€Õ~ügjѵAFnP×¶ Ì•K£vzH™„¸O^¶jmêǵ©liµµ´ºú=ÎfS®&ö…uÍÊ„ÞZ÷ïPVT 2³çBå-SÉk“•ÞÊÑÒQ~#æê§êMLßfp¹JítÿP£Bl´~!ÝíWéשæÜɸ«,ø¤ÙsYùõ4§ÿ“¬1×®[ ›a¬ñ#×vË÷“«ÝœhÊ寮ÎËó×g>ßÈY»£ä®/Èç§+™~  }äBÄô‡ZÌÞi´V—WW[óCJöaS?çBå‚þNÊ;kÌçMÁnîÿU‡œÕÇÇC©cHÏÜ™  ¯¹ê°æ*Èx繸»*´@”Õ‡Ÿ"„?cRÉkääymÈý%(jãÃ5ó¾¹¹fýôhkUH™ÎêÃãM$_¸ÓÚÐ|.·<’5ß®*]6×üI³•-NGõÀŸÆú@opÞðÍŠÐþH(|àcÞÅX{¢O€’ý‰,µ"¦ÆÿhuH?øß?TŸ[Y¡ò“?"™6µúïOì¢í¶C"4Þ€ú‰~‡ø_€¿–^e( võ}€Ûwóæ[(tP4슸Mã½sW¨œ¿~»òàúÕûO øÌàñWQ®ŽS_ðs!3¸1017 <÷ÁÕ®¶?qÆ/ømäO“˜Á㤂fÊñÁ99§8¿;MOT»þ?-b21°ÛÏŒG)íùSÛáÊEôþüÎo>úè·¼±±±Ú’óÿá‡9ÿÉ…5¦`3s¹@Î2¾(€¥€8ÿ¦=œ~'+ÌØo3sÀ×ôØ(Áop„—¿öüý(zW˜°›=œ€®¿ƒÏpZ¼r×ÞÀ+‡îPT ;[PV™Š­ßçß"(P)!ÌÿçÿÄë’ˆïU.÷öž8í +Çxü¹a}øƒZ8àÚs@Ö{€½:b_1f½ýÿá€v¤}ýÊ#å¢eZÓbÅébÞ™œjà4'ª§µ-ÏðôéþÓ½ý§ã<¤Ð’ƒ”¹äyo¯H½¸äG¦ÒŸø¡çJš.ZX¸¸Þ³¾þ¯ð³d=LÉô;uÈ%íø‡RaãT—·ÿ‡šúøÃÓé^& nrqËŸÝb(Ý_·Ðl4rWÙcDü5²wõÍÄ›WçØß,S×®Dþg"J@6-³ú@evcJC=ÍÚñ]ZZ­f-%Ô±²Ç ð€Çìê`××Ek'óFk¸(W7Tù†«ï^ÿÏbñJ:Ε•)É«]4êQ†Œr‹22ÓM!Äl¬^žœbX¼ÍJ%ºúQ&¾þzÍ<¤1Q›Hu¯Ó©1¦Ÿ‹ìS ë§›bFfµÎûåiÿ4&g^@Î(‡ÖåßpZi¿?û±¦÷¡ˆ) +@À¿ÌÀàˆù÷ŸÀ<²˜ø¥;4Tbx½úûJµ¹»\Ó‡~$j¶¶¶îo%Èßiü=ÖsæƒkçOéËk™ga¼dyÏ&ègÆX»ìŠ$€[ŒC|`àŽ€"àö¯E^={åÆMbŒÿOR®_¿ñ·ûN&¯¾:xüøà®vûæÆv+×èxp°ÀÑ~VŒú]Óµÿ¢ àëˆ]þ|pV Ò{‚^»íÃ}| ñLñÔØÿ/¿ËýÿöZø=•½taRøçÎG¿ýío?þÝþx ^.Eßn3¡'ºÇûý%pPþ4j +ø—?ûOo@2»ÿn JÖ–t@û’°OÏÈ ^9áæû²€tÖ0ð?€¿`]Çh+ØÞR½‚qg¢ì•3iã)…&*SÀ¾--Qœp À·Ü`›ÿ¦ÿãŠá3¢ V@õÏBÈ +ÌUŽòOXÝ}÷üoZ !VŽF,ü@o¹Fúò]‚úå!Êb^ó–÷â1gå~9Ñe]ÌŽëÉ·ªZŒf¹ð:ôî©Õšý›ÔÔtœql«ÆÙÉg!礪V•Ûéþº2ñÈ2*$B3‡0çY©¼¡ÕjY%DZ ~ÒÛ7à_‰éßÄ-¢•­2(¿Q~ƒö´‚:ƒ1 SÖו7²Ë¸Ãév?—é¯1Ñõ¥NÐ¬Ž æÙÀhåg #òî/Q-?^Îï!ïuBòdQ)Ò˜lTŒªDY¤Ð‹nÖȇ‡šJ‰ëm˜Û¤\N7r@øÇµÚ¡ Ê<®/ +…},Õ÷h-«ŸÖ¢Þ¬V[3³³3q˜c.LùE`V×IGµïǵèIIäc¤ÖxëtQHE=ÜWÕχ5L4Nf™Ÿ„?¦ :RžÖÏîd$›4%jdãÃóèÃõ–.Vä»7ܬpû…á¸òvâ_r+;õÀ}1YЊ>Vpþ¡ œ·Cpò?][€ýÇ?‹þ£´æ@ÿGßÿ¥ñ,*ÖEÿ£þßßûû!Ü{§. Þ´|yCÖÿ¯J0رËî@à–P÷W·o] àJGë€å‰`üïÄþw¦´ZwûýíIŽ>àø«¯?„ŸOµt€ðs+—Ï0Ðí_üýíœÔºúmðßOHø_ÐLH¿û£œ®kqùì ðé/OýÕ)}˜N½)$ì(ü^‰ðõyàx¾´ÃûÒÊŸÚ_˜üðÎoäþüñ?þîw÷þ`‘0â +@#~˜ÏÍú‹¯û àÄ Ûôã‡}“0@t€¤è£íÿŽH@P‚`ûDø¡S>Ñà  yþ:ÐÆu­'ø/¬›8¥³ ê;B ºÞip¢ÐÔ†Ú%àw%€€oKhcRà~‚ÙÿÐK3I5²É¬V½@÷¶•·jï\¨ˆô—,€ƒ}@»Þš_¨)¹_ùÂòw*ýåsÜMÐCxç|êŽöh]îšìÎB«åpp!ÂŒ’ÕÞªÑÿß;AjjYžs^m¶Õº39V{GøÆ{>oœ.¿¥w«Ê·*:øŽSruÎÚo|ÓF10_F)D“³“*|C.fQ©ÐÈf~ƒÊü›lªVËÇHæ°I€¿~™8~£Þwô|È/%vAWªÒ³ž<Õ¬^.ú)hÍÒ¨ÕëÜŸ™¦VÅm.nú3[ãÇ;¬öc߇F^­v#™›ÑéOF×¼ÍñªG,ï Æïì -òÝ€p²Ñ_iȧ>&p¶5â4ãO¥ß26›.žöÀ€ÜþØúCfõ×êËT +€¼ºÇQÅáQ\q­‡/&ÂãN‹ò7^ÞÏQ©ÜŸ‘[pèfKþû%€–"câ¡DT¦ôLôV.Ž€ÿ”¡þŽ€¼Yýa“{M¼eqå¬1÷º{ Ö&¹5eÑÍ\ÃAÆzc¨¶¹Ãpcz€¾ë‰NW@ñPó£ž' zŽóË™]€¶À[›ó±‚`GúJ}ÞÇð»ßí(AÙ+£¹þ²²œ=ó§Ö¼»¼¾îfÿÂþµ5ðŸè?¹ÿû×<°·Ë^¸ê^²bÉ»T–¿˜j»?€›·oßú¥k~ÝîP àÜåË×oüïÿ ÀÕ·ì 7òíÂýöD×?T ¾zü¸›îR~ŽpÆA€ûï~ùÜ«Zסð÷û½öx [Èÿ¿û“쿜Õíê9$XCÜ1`½üüëY öC þìÈ[ÙoZáþÿîøãÿ pGo~^þ;ÌÀ.ëüS ‹^}þ]â ò ð;Â@ÔC°Kt&¬Q˜'Dœ`è?¸@Jª± +@üwÕ¤gVoÚñŠœ| Æÿn …ì‹úÿ$œÔOUñ˜¾e8J¨p%ûÿóü¿w .8:ÿ Aô;ýú¸ÚEg@öB(OO­`ÉH£!¢ZÈ]¯pŒ´#*ÊHîrzäLƒ½±1úœ©ô§šÿ° ÌÞòRIÉïúy¬=Å'Sº‘·ÞJÎdA;>eŸP­¼u©Ú_Η²1|VÊàt])ÑÈÈ…ÚÈXVSÉó8P*û$£À¾#}}=/õ# ÄgfŽMVJ.ù[1²ªþAâÎr›¿ÑjBxV|ıÕqDtC§•ò>"äo5O7šµFµìvüÓpN6Ũ;0€,Ó-×OòOñÓMþkæccY}øN^.Oˆ*•ø S߬ÿe½õNJY”%›Ê‡ë"ºDXaàáÓ qµº +ÒsÀÉUˆI=ÍFyÆ®|ǨpI¸ÇzžZµÞ~2Ýk]üÿË:ã c.‡ïÁT£ Œ=âgÐ]Bék»õ×›µ‰áwÄU!“S÷î9à-4àˆ6'<7 •æÀ»>A +À‰Ú +€ÒÉÌ þD@?u–Òü·üo÷__í[v ò?mÿ#`ksëþöƒíù;lÛïî=Ösöò(i(àb–Þ¥m`ø×¬ û…×óÀúí[7oº€[ׄü;€›à´'ðdpízê(/,¿’ªÎ¾¯ šXpy"à”cDI®]¦W@Ãéø§­Î´ÿwÑ_!là2| yy‡ýU}|ñi +à'ç¶R8ÀŸXü+]Èò„þrÿ…þ¸·±j`Nøßf;«º,b¢%ÀÞ5(À›øûú´ÀJ§ùn ÿ‘€ôý¢üÔ‘ÌN;Ï›‹­çQû¨ã¨cÝ |jlà¹÷°áð§Ðiþj mï:)rþŸþõ*|33êSÇÀÿÿ)˜ +'q ÆÇŽÒL¥|à@éØ=ÈÑ@^ Ø×-ä…LÚݨ\¨õ÷šDøÒ:\‚½dG[:ðŸûÞmˆ)gp‚ñ?¬pã­MS#cµþ¡Ð@ã¾€ü¿ŽRê"žƒç¾€·é×§úN¿àNá\º²øó%¯•(9@Sˆü:™GÓ)~¦Ïp ÆD]Ü N»ÞriGýI°ùnóñÍ~wšnrj¦>J'ÿ…¹ñFfÃo ÷ª¯o@ÐüIÈ?ÏÔ{‚à)Ä€ +¿(n77F­(•öN9ÏÕr‹QŽêþÕ8Þ쎢Ïí)ˆð¾:áêüd‚Ôækud¼Šò®‚èʤP9`" + ¹íÌÁn¿‰ð˜\èï£&B€ã—êUÏw¤1ö® +òzÃI×ï*ÈÄd0‘áúRP¢8ðÝ^–¦¾€rÜÿ¤f,€ÃøúšBxÑïf3‚¸­0þeþ‡¥Çó;6 žÚ´Ê•jZj”†İ¿¥Zvwe `j€MaàÿÖýÛûKgö³ÁžAÜÙº_µ€¿Œðëý,`0ìÆ5P>À/oÐà¯o]¿rù<à/àVÄ +ÀûWoÞºù@I:‘÷]Óõ뀳¯¾úêñèðWÛ.ˆNpu€ÿ.vä­Kyë·üÿøðÿ«ËÄÈ>ì~Öö‘Ü€E€SÔñë§'øw¢Hü|„ÿEoÌ!€UwiöFðܽB»ðüám6Z€¼÷.ÓVB{SƒàªÐXLótüçÞ¯DÚÚàmRw + Ÿ†x…O°ðM 82@źd~ï2“Ÿòâ©,–8PÑ‹xRNðQ‡€ŒÚC–å%º¬òU‡'àB>wøÒV@ÐÁs&'Ëýr eG½Á˦Ëì¢S£¿NoÔúË œV×0`UZ©¿åN|eî°‚ÜAEa¿HII§ŒÑ¥©Ð+’'ïl½5Sî+Ëá ÓoJ=ö•h°¥Ÿª½þ‘¤¶Ü16ÖéI×ÖŪÜA˜”ïhû§›þ\–ðd—Måòô§èâW0lÜ £å~}nâ5*#Ê-WWÄ@€xæúý¨'Èûkþ=bcLí?¹cc¹py¬‘UXmèOrT”Fí/Ç›h/ôƒ,“.:•6Tù¬ÍI(•ïõщñÑ ËþĿ鄸?v À˜ðyÅ@â„*€þtúãŒÔ.V1€Þ’þ2"—yý‡uˆHÍñ#‰4ȲŒ>ã†`\˦´æðÛu€ÃÐqàwn‚ïEçŒþcðÆ£ï(úÿ±"¾3 ¿[àHRÒ+œ|þ$mˆñ‘×O¯2Ä6­—ÊåRŸö”Æ'‰ øO­ÿ!¶·¶&Èßizïµ3ÀTÅ›ó1ø/œÐÿyúE`¡ü‰Dè´€œ=s^àé£ýÓEoÐ ÐqMçDŒû 2‚¤VW8ƒNCwO¿ðgçôXü÷ªYŸ°ËÄL¢/ï2p=Á¿×Òi4>¡Ë¦Œ®ŒÜénr†'êõFót³ÑÎAüUþkìuk9 wNWù-”þ¢¿†;oâóã‹BîšûÛmT{ÝÜKéj½Õþc\‹îu7êy.ðnFÆÝ(È™x­ÙhŽŽ» Ä–P(‚ÀÌ”ò»˜—=˜¦ëÒÄþ¡nØ…™²€¬ï@¿€¬)ü¿DED*G 9$àÏV««Œ*¨Ük?þ±ñ?FDAê§õæpƒ‚ì®hüN,€œÏ?õ¨§H¤€ýiSÙ´ +îhP(/¼¨=ñÖŽ´ÁP¿S+õèÒ⿃oõ˜‹‹UÐt´·otn~ Û\Aû_»_`ó>€´ºŸ%Ÿ—…@§)È£~ßÊ´ž—Q;/ ¼8¯Yà¡Ü À9öËÎAè0@(øì':‚Áö1€«çν:øêqǶG¼~íç¡0äÐ qƒÛ·ÿ1àñÝ8S|vLôcšØ ]ðƒóƒF°=w(Á€~B~Ëþñè`zŽ|@öïP pt$Cþ@ÀGIèjð¸:¼hsF3jú{ÛMΞ?+ØŒÞø¦Z‰Þøú,S€ˆpqöFèÉ3¯JX¦;ËÑ„å¢ +蘯qHÀ~0¥g]f À:ëCð†Ð¡ð0@)À ©ÿŽâ +‘ˆ‹)€æ ¾™”L0þ' +@XÛȤkË †ÿ”€”Ž\d³À"¤e£e@ç±J©@,UþBï ð™a„Í& +üÝgHÝô7¦J)à/œ…à¸l@r`DùˆMÔDÜq`:^0[{CGí¾~@ôÖhË<¥=¸û: Ÿc°~!Nn¥÷1—€ÞÅqøYî˜÷xT€ê%5µ¡hÙ;£âþéF¶Í €ÛüÜ ¶Ãä`f«úxÚAþÂêïÔ³úpó·sóhý ®Ãá•X°» xÍK®V‘‰‚ûna¦Ba¦<éwòÆÈþ;~¿~¯ ÛÝN~OVxU¿ÐÓ s”ERx e¤HÆ?àwkÂ1 f"n¯#ëëïëÍî2Ð +îÿÚñëÂÿ-ÁÿööþÍÏœ=³ë£Ù!€A|/ºXÕë1^¼¼B÷3¡­Ü~O¶¤ˆܺý«_ÿêÆ5áÿNÀøëzG #€8¹Ëù“ þ“Ó¿Ó¬œ#À½ýýÈÂå +€xÆ™Ë×nÿÃíWÏŸ¡+à.”OS|º§›?䟀ÿÚøÙÏ~ö%€Ÿ‰/%TI÷¤°€vÊûyIþzzÄÚGþÔVª\ºóÑoÿðÇ{‰°íxðåƒöÿ |Œ¦þ¦çßÄõON¿¹; @[m Õè)Û' +€§bÅÕ-M¢ðš‡Óðëž4€ã‚q9í‰Ñ°)gç¹ú'K%Ò…»"(ŒÅ6(¿ÿÔ ŽRü›¿$\øVÀ~ýwàÿ¿ýÛ¿!ôQÑŽ— Ì +Û…ˆ¥ž¥¾{.­CУ£×Sßaaâ‘øèp´tA`„æ‚oTˆ Ô«[/õ)FtK°8­œå×1lÀÍQTÞ7Ê‚â²NwJ;§”ÃŽ¼2¸p¡Ú‡l:‹žJ Pzã7*GÁ4d䯵ûBm ×~¬¶À~r÷u)¢¥:v”©Få…’…Ÿ¯¬õc4ðKY¿9@À‚ÇÑ£h .í_æØ…ÿÜßþÏMIv˜æw§¦Zz‹Av„¬m§›¨ËïÍV‡ó $q1€)“€$ÿgùÂG«œÔ8ÍÏÓ3¸†¢ÐhÐÕ!ù],¿ÒWkô÷¾e-}ÂãÁ*´w9Þ uºåWÜÁ@oÞ1}µzc"[-ç÷.1üžŠ¥0ü3ÀÂ'(õÓuŸHndyQ 쯙ˆô£è¡(õ½RÉ[Ãå&cÕEê!FD1ɵ:G—*Ç,y‘i´VpÃÉÅj¾Zw?ÁоSës…?Î?8D€ãir €þ¿"Àh“ÑÛ/m/ÂßõD#ß!þÏÜvÖ5þèïëí+6 ¤æe=5ÜÚ¢ -Mû€jçGœàø™óŽÐë¶íÿë¹×¿ KxݱPhhà*Íÿ1¨AG¸ 2+å­›û(ú]fG{?ƒüˆF ÔÝWoüœf¿¸MÅÿÙË?w À¹ÁÁ³û)7ýiOïvÔóÓŸ_Ûvl±qí$€kWÅ—¡Nï²ÿÈoôoÍGÛNÚò÷ßÁŽ ¬Z¸÷Ç?ÜûÃïö‹  àý¬çåƒ/ƒŒ‚BðP*ÄLøêl§7àäïð°€øÑâvªèŽ0z·ãù±t[- ÈâÐËqÝ­0P­E‚ À#m‡È|^Ûx¸;üƒç=Zý÷8ÿˆÆÿ¶ð%AQñép€¶û/û7þÇå.ãx Üù;"@ìëé¡áϾ>½p‹õjÒ¶°RoðßÁ€("øÔG1„×èíýÚ ÀF¸8rñâűL0jÓþÒ€ëQe¾©ëô­CxKpÛ?Àš¹…Ø…Ù Á†%š*¼gr¬¡‹qUYªÃøA¯\HY¥áþ£##“,´ƒ~ÿ+•±¨¼H¿åÏôaăÃGLôOü'ƒèú#*¹ã“¥û'‹›š8–osÌžÃÀ°]&˜X•«9)äÆÖ_‡É¯Î7§Wç†sùæÚAfå&Ó`²‘]êwÙzûˆ¾ÿ1F3šš(ÓhÓ _:PCsƒKÚ\êZ^šohsj¡ž·ÿvA +ËyöI=û¤9Ê`DàQ•*Bñ”út¤n\¬ƒü´ˆrÀãj#Ye€ˆÆe¨”þCãõqVÄå *þ'³|ô΂˜‘ +2-ö1Zô +¤"2zÁRuuu¢~îñ›ó`E ~°B8Ò5€>&VÒÇ 0ß%€422öKOäwgt€Ï?„ïþéyèç WB¥¹(àßÚ\Ù\Ùrø¿µiýÿÁöÃ=ÓöC;ü;?gÏÊK>wÙ +€^Œú$ ½<÷XÂìŽ1@X‡Žàꮀ¦¯£|„½à/»lX×lÏG^¿pýUMIpã€ë^XøyR~Í_=Ãøƒ;§Û$ÓÖÒ±ÿø…ò;ðçÿEàç× +0𖇥û"ü—i[Øn +ð¿òIðï<5ÚL‚À¿‡•.\Ê àbûÆ<ÎP^ø7 ê;ƒœÓmAüPX)Â0C© Ç=@' + Àñ®û +žä>Ùõüñd¾‚›î¾¯hF· >Ág&! ›TøñÖ¾ŽÐ5[ØI9é6øú’€áù (ÒT,0ª®ºþ 0á‚Gäj Š}=Âþ¾5>r´O/(»&ÚH¡¾Ü®3`{Qø¦n±¼$&úÎYñ!¿c‚`Z¨3‚ ä‡èt` à¨QôÓ"«ô*c!¾2F +@9à¼þmÜuäNê +’°Ëýhçøß,Ì xi§%p~‡“[ü3 ]`…ÿÏ_ƒšþ>v^füß5Ú:üo“aîãÿomÓp×´ýàì^;wö,ñt®ÔN-¤xÇÆg_Kݱ¢ +àV¡œ;w°à~n\{ÿÌà¹ë¡\£ÏßÇ¿Ìp¯Y„tÏ!¯õ¸Èà:ø!7n_¶·èX€‘»Ñß“ +ºÛo,Ðþqf@ø¶›È|cR|}4óÀ—ù™ñcfüÿw²#µv @RèŽÅ¶+`¿V€a + Äj&pêÍóç‰@(x@„ÈN¶% øÑ!`Š\óèíÂj¡´QÜ2¯ã4ºOôéiy€àcq¨7Eprb;2ÅhH <"ÀÔ×W _ÙÉÁÿ“§è Úât€„ Ïim×?ˆÕ–„ÿfrÛõî¿ ü—CÎK tàÀŠ–q¥Ã‡ýÑŸ‰ œtù‘’ÀV¯ìÞ—ðÔC +¼vs€h€Æè{zƒ£Eµ\2A8j·œTöÿÊ^¬ôö¿§“¹Lé}(Žz -‚˜F.D½Ã…þÞ7èMžÅPþ”.JÄn‘«{QN¿+ÄhýPD\þoø•„P ã4+Î%*jÿfð·ù®béVÓóX±.›š”Ï»0QkµcïmÆ©¼µ$´›™]ú¤±Ø¬®v€lðËclšêwû® +ÿÿF\¿ßkdsVju*YJµ~ÇÄeèÌ2lçÔ½QZßuD [XXˆ‚´ê­æè'mb?#&0CA6áÀÅL@¸•g w*Œ-…ðÒŸ¨–5i3˜,FÁ{²2 #gb£ Œ!µ Îñû¼Úš¨ßû(~Vì¸ÓůIrªжœx÷¨¡èÈïJþ©´úµ +€¦¶½Ôû]NVJDþÿÍèØ1€b£óËkkëË›ëîPßMA¿(Àƒ¶"ì±sg´ÏÇ@¯A·ûÃ? +À›s?KÝ1Æ„ÿ“@À®VôË+`FˮӞÿ"†{ÍŒúXZ/ò²p VÀBÿ=à?@^U²ë·~Ñ5Q”ý,¡·-¡ý>öÁ×® +ÿÏŸJãÕuY:WöÿKB~fFû€üôàD“€¯~*—òVCøã½ÇÄ<¦à?Z zÜÀøßfgÏ¿ +{ãÓ € [oë5)— `6Šci%9 À^~ØÁ ®aPÆÞ /]èõí3u®VŠlc!#œ²øÐKžn@N{‘ÿ“ÿߥ|p•V +ü7üÿÛ¿þ« €!ò‚Ðö¨ØÞšém ü—èH“^nFÄ#‡ôùs(@Eì æ”¯·7¢<ÀŸšÐ Ù]{øÈµm•ïï—½0I8µÒ€â ®+cG{@ƒ=b:³ÂHd¾¡¬}Tiú{+8Ö'& §”Ê3˜ƒrë?ÐOÖ‡;Ñ}}G!ü×¼dzÓ6(fRë?ðÆÑòQ®V©´ñß7´cq»ŸÛ˜u ©}JŽw}ujòÝpy }ãÈÌìÂÒÂÂl6»º´Qo 3HþŒkÜYÌF_|uý“Mfùi½ÓK¨0*9øßÒwLOú Ñ©Ž¬z¡Vj¥JøÏX¾ì×&Êþitb)zɽö"+ +²´ÔšhŽßÓª`?ŒÙ Éܙߓ¹m6K̘å•r6âg¢t¬Vi Óë²±‚‰¤‚, 7E‰Ò +>™.æ‚ÌäKK D %jä»±zÂï¼ÇØ‘¼y@?Æ€#îì†&8¦è@»÷W´ÏÆÂ«<§ß ë‡\ÏE=‘€tD?ýý}½/”ês‹ ÿ¿²Lð¿åÀmHÀfTúï²³?:»Ïçøñ³m€—(F‹Àø»-AtÇÎG«»ÛpÎUÄ\AðÁxæ] +À“üCzZäc] ùÜ«ƒÇíÚ÷5ö_/_‡®Û +ÀÍÂ(Çã,wÇäï´®^ûàê9öÔ. §çÿ•N ô[@ûðµêç%36½ñ§·®V÷îýáüÇÕß>¦€¿*€ƒÆÂø‚›Ý-àS(ia7p¯¯5ûÙ½Q@œ; +  œ üwwýá:ëСƒñp†`aA -.9p3ð Ð8Ûsr#¿Xb¢†øÄ+”Máÿ[ÿ׆H“)@€ ÏcD€’'>¡ÿ­ÿƒÿ€©‹ÁdäÇ.TúûµGJ?(õõöõ¼@”/«D€KùÌGŽö FATá+è +8:6b0kÝCy†ƒŠÖú{ß‚ðõ›ž¯ Ž D>]È}¬Vêí¯¡Hø#ž ³"yaGE],^´+0ŽÖŠ™Ð=­êWE.ÉD€~¾`=¿è%~}0ya®Hó€—ô‰ñƒä!sãŒÿp)n(–îqçŽ?» »wN4dÛÈ7꣫³ùêÆÆêLžµVï­2’Þ…ÖÿùÉ'ÿôû¥¥{ùðÜp¾DÿÄ«Ÿ|¼”ßYmµ>!J~™N7³Ú(—ÕÆF.ºoó–„Ú ¦>úGl5ªÕ™æ%d€ÒÅJå¢`‚¾ÂQýo¶VáêyþI¾:>±1»°ºñɪ<í…{-v·–>¡ «KŸfÃsoSŒVëãO>nå « ʨ±ª|”´^®g*ùRþI–ßÑO¹× Ÿe:õiÉEYÍ­D+odÓY¾º”-¨ «Tyø‚ùÖêj^mü^åÚød)»“·6î‰îäù‚ʱqï“OV?m¾Ö_UÁZÚõ™ý/ÜéÞ神¾ÛÞ¼v¦€èÀ¨Ï¿νæ~Ò¢€tÁþ=¦Uÿß™1Ö À$€á4<:Hi G g 6wwm}®€¨þ§àþöƒû[¶··4ígçΞÛçsâøÎŸm+x €ÌàýnàzRÉ{iþ–[ï-H˜ßý±®³¯œþïTøÒDð†‰†»† œ±PðµàÄí²ûûàêÏ®^µÐW²tÂ.û‹´dåÕìMë] öýÉ>ßÐzÍ@rÚãÝ-Þ´Ú|ÐðÔ±ÁÁ¿ (ÅtÌ8¯ÃbÝ2}Q@~:³[ ú’¿·\ƒàCT +@:f}@Ö è@q€„ÿÊÈùèÜ@ûÇ(ßX‡ +€J– «À1âóq×RnO»ßMÇú~Ðدà× €þ€˜8ÏýŒàÈø€«vùäÇ.àú¸È $›qkb5°\Þ? Ìja¡ò iu’éA£ÒûƒF:ˆ-À2uÝ+;vld¬6åŠo¬îï=:±’^[NeãLJ¤… ÿØ^ñ±Ã‡èwôþsý®úŽ +€~_q +º…ªÐ&eü×ýð_V¿gÏc£o3ð~×wtt´Vo6«ogõúøh½^Ïuu$o`µ1=Õțï)73/&2Íkõj]§Õ›½åxx#„€!¹Ñµ¡j¥:TÖ Ÿº^=ÍþCÕry@2{ëŒÈp2Ä#ÃÓÔ¸>͵Çõnvd–n͹é·_c0>ô –¡tÕº.1ÚøË:ç(÷ú°¶š:=1Ê“;ú©–û«Œ=ånçÊsÕ¹lºÑgTZ—£>:N&ʪÎ0Ès\[ÑOåˆVÅ$f¹#ºètsø?QŠiä;2=(òÒûÀmqFáµ€œ9PŽKߎ0¦'À÷1€Þ€® š:yGi³éÿë:ó0€ú;2·d †¼Š€ + +@‰¡€zúF³Eêÿ—õ ü'p{ó1ƒÈß?sîL8þ•ãÇÏž?Gß¶…Àxgx{·%ˆîØyà6:ûùõ¯n^¿,€´ÿïþ¬Üºý+€³ŽÈ{& M +€“ïf€V®+ÝSÕ€^ÚTBhï×Z¸½– ?ìʶ°Óÿjk„ÿgXÏ 3€ƒ¯€Œn ¿kP€óh»Da2UÁ  ²úhŸ5»÷]÷ÓÜ3€ëùeœrܱz:˜07ÿ„«òO FGdEB$LÖ«,Ì4­s ‡È•UòÁ„üôÿG€ÿ»€ç— —¼j€’X@—ãÿ¿ü ^û”(€|bBÞŽëëúñRh¿|ôžÂ=ñ›Œ,€„¬vç™J6…–€˜ûé‰}»œyº€ÎUVÎSú)_à´úù$12aeLØœMQÀõ¸Œpš*q—`Œogkç„ è«9¢Ã‡ðg ¯"À;X?V»,è4Š-é;àë=ZûW@' ‘ßÝâ¶ÇüYm|tœO×·>>>‘Ÿo +ß r͹&˜.ûÉÄ„a¨ÑœhÖëÿiX Èm‚ùÍ|õtJ8>^+Óˆ‹ŽÞ˽§S"ê «Bzêù…ε¦À¹âˆïrEP*ì&Î<¡L£¹êø„ÀvœÍ&”Äö“ P–¤‚â* À;||®5wÚ£érŒüÈeE<ª§‡!Ô0°Cè_oÈå¬Êá¬(«Ó¿ÉDhôûø]ü®<^­7ÂÍõ¦ +¢ßË¥(Hqéfým„R}W#ÖÓ"æÈšÖíµ¿ð¢Á[ì‰=ZÚ©ÄÁ|TŸ8¿;€cIà|Äô XOFÇ_²_7p€ð?@Äx<àŸ_>{Æ ~‘ +÷DK÷Kø`O @Jôÿ÷Ö3x +@ÑCâÿ£%€#°?ÂiñˆÆyîz7€«î‰óë@³1ž~ ‘H¦ô»ŒK +€ÚŽÏä3Aö ;Wé5#öÿ¢·ýïøÿ†~«$lx^’›Ò¼[ü8VðWjÇ#„Ë/õþ™°±Ïï 0^\z'%@5ÀªÞiÐû¡¨\—UÀ¿rÐ2vF^¥¨[h£1 AfæÀJ¨¥ÞÒ%ïï6y#rT5W¥=¦ìŽL5¶p¬Ÿè!ÿŸÓŽKç…!ø›åôhÔ‚*—úz´Î‹V¯Z~¬ÏõÉhú5}œ"«pÓ: @·3ÝWƒ~ÌžýeÔ~í±ÕjË•d—²åüîÌoW[ù• +«­Õ¹!äøJéÂÈÅɱFkéÞ½;­ÕÖB+_m}åÐÚOZ¹3·4×ú°µº¨Ó[ùa½­Öïuñ…Vkn¸¹°ª‚Ìf­]~£uZ¹çÙœ.F ½FãRž[PÏõ{œÙLFAfò†r™ÉktNU©éÚ«Ù¥ÿé÷ Ÿ´~£,é^ÓŸnM{+_Ëua +0Ÿ1Òxkuƒ‚(ñÛúa KKíê”oyâ÷3b‡ +àf,Ù“bÀtíqBA<0ÏSfJðÂáîÍ8‘ôž óƒ)‹'ó»1"lÊU:Pêw @_ïáѹŕåååu(€°Ÿ8Àûòþ‘öÚVBü]6xüìù³Ž ñ¿^¤¼JŸAp+€¤ôçß?ÿ/PÄܺý+wpöò +ןKý©ë÷xÀví¯+¡àÿç‰`®ú?sîšœÑK¡ÀEûK÷k€] +À7—ÖÿŸb=CG¼,p  Ü=(ÀùSH¡|ð®M°ã@j[:ðë˜ï¬~ôFpz%Ž£IÏÐQçäƒ:[Ð*•2±•Ì!#( ß©Û`bº»üÿð¤ãÛø¿Cxn ÀhÔY&Â_ý;5ÿò/ÿòÏBa×S¾DÃ8ùÑÞ Ë ®ËðJÒ‹B¯Š¾Þö±îx9ÖŽâ.‡ÒãFƒ¢rÐé©7ùKMuð¤rú8;úFDêçküà°6à"¦ºøf»1ºB¡PSæ§üãñk›T´ú# ÝÇku½rµïwC%!:â@»H*ýË¿p×:€Û™n®¹VÜmÏŸÕ.]šÔ§ë+'|rfîõŒ•°ef–rÚæ ¿§‹žèú7˦òüõQºFƒo4êE=K¥Ö_sà=mïê÷îÔÂÌìÂB>µPm4<:Ê‹H‚òÕ1tBm%Ì›Õ i@¦y» Ê{VQIî|´ZÍ(È”RhwÞ:ÝR«T€º=¢  ]­þΘ¶T‹ÎrjvŠðÀÉZ¿ ý=ÇRhßeL(!ÉòFÝǰI.Ó±™|!îÈj«J‹@"¿‹iJχž=.zppÝCx©/­óÏ’b¬(‰“9!i½E(‹E+˜OÂnãiý.LÔšÑHM €çf`1ðÀ@­¹¸âÀu$‡ù£lßððAªôße—¦gÏgðø™sçh %è€×,ïá}ÍÈÝm‚ù„±©#Àn€€_ë0 +À™s—oüê9€þÌ#npÀë×S`Äþ¡0ö€ì[#{ì[©Wÿ’õ8hÎ $¤1€¾B]}"g‹Þ@|$€ÓNÒÉ® m>ýÁ:üÿ}$ÂýeZž<Ub!ûc¾ô:êÌ X£iŸx šþu_/ûIL‘tž{òØï©[x^  û •:jE@Àÿ¿üó?ÿ³þÁýÆéI½âöü™þç]ÞÂüò '/ý™R£ŒÕª{ +¬?rä¨#¸7À¦U¥€$4Ò¶ö!RºCøm•Ò¾²°žVz¥#–'åù—ôám儱}´4† ÚrÀ |!ì0é•‹Ì”àÏub¥ÔC†#„` +zýÆ mm ­ƒ(AŸZÒ‹zôϺaˆ;Ù ÿFþ˜žÃ¨í°,û°œÜÀ+¼mf—š†Ý,[Þx«õ|!›¥Á½Àv&®~¤ƒ®_¯ê®À³DªèÀD0ûÞìß`É7Œ$]M˜­}yŒëvi¦YK-(‰.péR»õnQ«*ˆÎV1è—èt}Cs¥§ÿG¤~¬R«7Šæÿ© c³S?˜œ¢¢Ê0BádúM¹ø…󮁤&gê£EAjtßÛÂÂý´‘*!ƒ"ß”oyâùà°Ý~ƒ¾QÛèÊo&Ðg´@7àsˆà4íèê °=³¥ž» ¿ëÑô“ùØ@‰Á¨¬C^“û?T&(ÃA}¥ÑyÁ¿(ÀúúÊJô¸¶~sûþ–¦ý¢Rþý=ŸWŸ=w–®í +ÿ·¨€·£ÞaF÷nÛ¡@¸Là¡ü‚Ø@áò•Pn<“®èÏÊ•÷ϼz"U\öÛÿ ÁMÀÙ3—¯üǰðئÝ–0î{{‚õ;€¡ÑƒÜxS Àÿ + x€Üqà_æaöµÖíÃ&Œg¹_»Ïíñáz´L¨o · *éÍ’‰Rë~³[á|׋5.s(1ƒ¿ÑŸöŠÆ~O¦…ðM´! s…5 ÕðÕ‹©¶ßþ•Žôö5wúÿíw–߀/qqqX”Á*À¬t¬ä1„i ó¬ã½ãz÷tÓäxñc|J`u¤¿OYÔà]#/—~ÌÔ W‚#%Çþ…Êôµ…ûoûA¿¶uuJ­ 9\éï9ì–þE?z㺵–ÞÈñcù¥©ºƒ±íãgÿsÁ +XTøæbíÛý<ön‚µŽeÀèk†Ð:Û†».ûÜàý-þpwåF·²×F[´tv‚|ó«w» =ï\Œ®ÆÆ¦»ÙO²·<›_Œ6(XF[BÌn7Ž÷ð‡>à’ìÒ">^È)I¾Z¥C‚)ú%ÎòæéÆ'ïNÛºÚ£;`Z4†3OƒÐÁ¤Ê¡bÈjStìðß6úMÑ€Ð7kÕÇ£ Ñ\¨ÝåïÌBº#Ñ)1CØcÿ6§©w…ÿzLxBx&×f/ø2‚ëXì àp¡““kEŸB€@h“ä‘ÿ}q/Ó,Ìæw`Ðî!ÇèK%Dÿ€&€åu1€Íõõ-·¸¯Ùýí[Œ°o Àã5nÿŽ9]žž…ü¼…õv|¼àóº- ¿/KÎ9ïð‹_ÿúW7oýšŽù¥ïW·Àj3€@û}, ~újæÅÕ˃¯Rp +@' +0z1ŽùdÍÚ +;´¶àü,:M{Ñe~&¿mCp+3Hw¹4äïȺhÁ@?u剹»kÑ`Œ¸¹µ¶%°}{ûá“€ÝvæÕ3çè ÞÚ›Ø[ðÊû—wN‚ù.àú•óï§ ™à—‚`å9÷ÁMÇ@>øà²¦Âõ»,0ß^¿™8 ]»|æø«n@¸Ñé Èu‚ýÿpãJ´¸¾Ÿ@Ò7ÜCÀÍ›·nüò{à) ÇØ8œzpUA.»ÐÞT í`uq#xÁðÍàœ ¿ýûêVôÖCÜáå—êâÿ_uˆ=øýÉŸgÎÇõ:˜.áÿÞ™h(æ§" +ИߞL‚` žÝ DÝ +@ÂYàøÿÂÿ/?ÿ,•­çÈøßs¸¤wWÚÕ¶^ˆ~%ýºÐ{­çŠð\o °¾D@PÞ%õì¸ö‡åGÿÀ=Ü[_·Ûé6w ýÊN™õô®$6ÐmVŒi®Ð+ÊÛ}¥±cK}~ Óá +;Îá(Vœ71Êàða~î–ßÉ…íD<8ó…’ö½ôé#3€®(ÝSîm |¼ö¬&Üi—„¿3‹;È,2Þ5wt¼—e­qa"`—çÕñ<Ÿ%þÍ©imÇ߇û_©ô¾eÕJ€ÆãÐ6u±¿!@°äQ³ƒë®A·M²²w9ÞKæ"©¯=ÊîŠxà`íÉ_oä³3 ³Æjã¿û!d܉·ª§k”à¢6'UQ¿àÿâØˆ€  T @#\ÓD¬e ­Š\š$"‚ ¥IQau×¢$ß¶ÅóÁ³¢'¦‡¸!7àm/þEx$œ èàˆUý„÷}Gशà{'ŸuÌñä¸þÉhŽpá-Q‚ ±wC†øS–‘þ‹n`'?YÔDø’y}¢P&4M6‹€©FžS'’ÍBtâT6Gú6íÿÒû?Âøm@×ÓÃcä5¼÷ØG?ˆeÆ}?^ž€wÿO½À`@Ñ +€ÑÌCÃÈÛi˜užÊŽñÜ»&Þ\vèo¦"ôŸD ÀÄü2ú?CÄ@€[ë[÷7·é `Ÿ‰Öy{¦’ ÷¢-U<–¼î29ú±¼|¶C~uóúá¡øË_™»SøÕ­›A®^½¢é±–€ô‰)7„ì¯Ò°c®þáÿ +Ày:€œ„ +t)$0ðãó'äOS¸ïí  +€PßuÔÄ ‚_û÷ÂO:|Èþvÿ¡Ú0ÀœË+Oÿ9éI;$Lü­XÒ7ž€2˜È´PH:ÈÑà) ÛBP®®ú'!W“  =8ø® =™ °%|xv+8€IVøÿ]!Æÿ/>ÿì“Öl”­§çÏbH?ÁŸ?àŠ,ôÄŒ*ÐögŒ(\ØÁ¹üèä¯k«°8«+eØeÍ'²ÖØø³8¥m?ÐëÜ4Ó +)}*EbÖ××K³ççt=½/@v6rxœé%¯|RÚ¥?~þEÔÀžÄR@·Ð==£¨u™a-ÎÅÍFýˆ´æ-·\8G}·ì7£õÀz©:LäþìÂïß3ÀjU$± 7*½"î®V£íøÿãL@øÛï¾.\¹(ÿ?zÙ§òÞWúê’yÖ©z§@ÈÈ+W<ŸmE9ò|&2¥å¨`x†A T‚FMÜM,±æp@ÙC8v´¢‚pýÆX¢ŒÕDމ«¸Ž‚kÛé‘·¯yÞ( +"&‰¼¤BëzQ– @#[âÈ·i„ÿÇ ¾ËqêÁq·¦ÅÝÁµži]Ò,Á?üÁA€IÐ.”¬Ý + àþÆ,™êoÓú=[ÚªÑ @}zKõ¹•á?Ú?1[k÷ÀÒ @Ôùï6ùÜ{§+gž%€^Ú +€Þ‰¡çééïœæiyîL ,ûõm+"²®€Ò‰Ü¼Ý&Oްë^¿>1yvãÆµ+gNˆ³\Ñ–RùÍiwyþ"×v*´ß¿ ùÓ”0î{{‚õ] Z#µ-Ô´Ø_T¼ùæÙóhïôÿ_Œà=$4·?Ÿþo’`ä7 ‡QŠ^ƒN +­b—¬@zÄ +€¡¿»UXAB !-}Õ¢¯¼Ò«ŸÆ‡À„ùíÉ›AÂ@<“Ùe€›ì$÷VóF*Û·b µÃ€bÃq@rìé²[½N”¼m;·vgP˜ö&š·ÿñofykõŸþÕ·$€®:›¥–âæ?« ÇÐÕ›þNMy…»Ã—eŽxŸ(ðÎò» +qi|—·Æ‹©ÕjU°;55;»Ä0|a(¡®pÁ3ãå¿;6¦õ3Øÿl6Ö[)#NŸ˜<+í²€]ohÙʡߩ7Þa'å 2¢‚ÜÑ'ÏW‡Å/[®QlöoÈ@`ˆ±ýºxã´¸ÅEÚûUF.:alì¢ñ¿Qh D €ÿúÍ¢ Z§> kÑÿoº#q?t;œBöÑßp?òÑ&dƒüô·kɇÄ1 $ã!á±ú@.sNa Hë!Ai’ #zâÀûâ[Ì;–pûÛ3*J©àªà¿R®”ú霹¯ï…Þú<-×¼O€çÛ÷ï»#@:þÙc­»íŒÜé³1(ºà_ÿ±¬ÆëÑó]öþ¹÷íüËŽ _߭ϧ8À÷QnA nßò(½ç¯ÝjÇ|-P2¾…ã_¬ß`ÄÿWMÜZ0¥€ç/Ø¿vNø_(öüÃïïBý®)aÜ÷öë‰1ò€mVÊ_Þ52ðÙóçOQùè൤JŸ:õWE8žÑß¿ÛíIHø/ŽÑ&VØ ÚPª8s? —G[ÙA+ôŒ™œ}ÕWç+¥œþ^­÷àñãásµž—”å…Èå?^à¶´ºûõÊ¡ö¿D +Ú>Lå«÷>M +À¿üëÿwG€Õn3Àðÿì À¬Ûš,o7…wõ¶»»Ä:‚:¾ùÂìÂß,,,´FÁÝV}(§%à{r„f…ÊΣVù ý|,ë¯]ø_ÿ +øÇ) _@Ýè¿ sîs’9þGÚXÚ¬ +‹U’‰‰ JÓøH#Ÿ‚,ÜÑ%e«ãŒí³Q­2n° 2;£LLúJʽ6Q¯ÕæÊ¹IÁa‘Ž‹ (ȼàÇP€ÒHT*b@.‡è¬O«0y½>—¹uX@ÖRA\ÐÜÃ$¹$³§›s*ÈiÝÂoqê~ZðÛS+9õzD´– ÁíæÃP¢ 6Á| oŸ-}Q"ƒ˜ÿ•°÷©Üa<Êߦy8`Qý« Æh@´èïƒ(έ¬¬G ‡ÞîomÞp_kûK \wÙ¹ã'ÎXÀÓ{Ô¸¯ïcüy ¥—å¹ð÷¿r#ºHUç!(1ÐwË{ë‚ñçVðó¯^>s‚3A¿tµøà¶€~–ûþÅ~O ã¾·'XÏ`QKžÀ+€£œrŸÀE[@:@p@`>_‡²"ëÖã“ç/d–ÅT Ïa²¿Ü¥$,.^Ø +nr°Ãt*çÊÉ?N´ kÓíþõ øÆüöäÍ ÉB<‹µQÈ Ipµ'à«GŸÞ[må´o:LC{½çô";,HÒî2½•öG€H},wõ—Ž™Ó;¤ïÈÑ£´pÏ{Øs€¦‡y^6@>VŠ“´Ã0û8K0®Ãóøè‘DDRýìÔ†Þ˜V ð ’I"%ÆÛ™W/oìÇ£ ^ºü<Îç(jk×ëö%e£üɳçí +zZÂÿϾp@RR€ïªÁ?hwÞwÿY)€±n‡Éãi˜àþOÔxòüµÎ8úNvç£ñ×Á¾Ó‹ZšD ðÖî·,ˆ~wlr¹kµ‘‘ 59ÛS3ScFØS«\HMevÂiˆGÈ_>a)B©Õëõ‰K«Þ 0€ï‚‰ÈÂÒø¸hÉôPK‡ëQyûÝs“0.ÑÈÇcµ; +2¦ ŒMŽŒü¸6YÈ9bÁ¤G0dIAøÍHyµžÁ„ÿNCÊ\\È]ŽüõzžmÔëk«ßÞ´d' ÁõøðPáí'@kZz»€‘¨˜x9_  H›ùZîP|-§l_t‡ù9þöŒVCåòƒEÅÐ  (5¶-Õç—×bêÿaÛt¸­õû˜Àu—´àn£þ?±€}M~ý9"ñOó~a¼céàý" ­Ü20ÿº» + ®¿¯ÙÝçëOLþ˜ @.+¤D `¡œ»vãÚùÁ³gÎüÀ¾Úï3%ŒûÞž`=À#ÕþE+©€B]¢ü„¢Ãÿ¤à™‹$àmã¿|ozûí6$üPxÞS§þÒ‘|º¨òE@Ph# Šh®° ÿtžGz¸¥ñÛ +€v!ÈžJøÝEmK`å*€nüÿê«Ï?»·! + w°ÝÓ÷í—Ïnó.f¼¡l¬è…¦qs4|–ÅLo·¢5}OO‚d»^¶s•§Æ`– 4WM§Ój@¯D.ç÷)ó4饩|8oP¼(½¤zzKÚk¼·ÛîâÅéžÈBv™Óí²â"‡;P𥠹ÿ>ôeÑP Åýä¶š_aq˹õÏŠÿÿW&¼£çšøN þÀµæë‚¨3ùïÝ×¼$ô’|üÿÀ»TÍòÓÔù&Øý›…¥… Ÿ…Ò..s¤2r±”ÀEâï/ŠŒ02Ã…±©Ù¬œ ˆËnªçó Ipí»¢"Ù|I¥R)à*Ȱ»°p¯>¬Bžæ¤Tüñ%»ûât|o¦Uo]P9€'Ð>p4u\YÉhëàêm‰d¤6DDD·D;š(yd)½Ñš~='Âñ[š&=ÔºŸ9ž#?òz:yLx”yxCÍçH»€åH”)Žû¹eËU$g‹o2€âÉ,žÏ=Ï)ÿ%ߢ@'€•ÑÊhu¨J¯À´$ ·¯\›[^[1@Î?ó­íMñ€Ôðo§Ñ¯Þ^;7øj(øF¼­<^8þ}yþrôÏËÅ(Zÿéð·(¦ +€ ÀÙ3´Éï1Cýþ-ÿôõ'¦ô¹zyÐ1€×¯›DÀ Ú +ÀM7¸võÜ™³)^ÐöûL ã¾·'XÀ¹»%F€GÖ'PT àìy€NC€‚ ¥wvÉ/¼ßÉÀo·°Ö ”O¤bÙ¡C'iIˆ ÂU¯¸ fVÚF‘_y³pÆÆ]W›‚—ƒZÐH˜ßžø}ʈ_YX‚ˆg¶À!#(U0,€ÿ. + ðèу{«Kriˆ×ÓsDo¤ÇXqÀÀf†V¡¸^xz{ÙãÁq´Qå©ã>È©~úÇq@Þ+Þ¡ŒÈTïT¢¢pÄ;}&)|2§ÄïC^§‘“g±è$N{t’Í‹ö›6í,Œ‹ñRìïé“ ýèÓ?~öèó¯¾Ðä¾€þµ0ü3ë÷ÛðÿŒ @­Û„y"‚{-ie·pgö=­LNÙñÞÚ-ÝÿÉð\Õqö»Ы¹€“F*Ô²\¨T%w»ç±€€cº»GkÂùòÒ¬Ûlv€»ºèŒÛÞ¼Y}8ð¼_ÈÝ*y$*þëÒRõ?ç§óvAþfvaéc%!â'`—›¾Zo\è{áHÿA=R'Å™Xɱ cÊ9 R™h8þ« àüGãU÷Š˜·r7œlêø;ùLb"ÿõ÷­ñáêbùŽ.ýmÙd<zJŠ'†ÇPOˆ)³SOv°ïˆ6Ý·›q¬Z&7,bxÎÛÀžÇ3ŒÊ¯oiêíï  "`HÏ5è}©·4:½²²²¶¶F `Ht ïÿþöv´ +Øm…–¾s^ +À“¼~ܾ¬ŸïRn\êk'ݸ +àò5BM~Dã¼[Ñ +€|žLìîóõ'&n\¿zþÌqúØ­`‡@€â çΞƒt ÜìÆú}§„qßÛ¬GðH@@¾@’Ø'€ƒŠº/€7ÏËw­?ðOWm @8ß/ ¶Ó ¿… k#à¸ÀÛPïØ¼€ïƒ¯hÓ;»}Ú†  vÀNè…ØÚšâ"2pÍhŠ S_!ÀQø =;bŠ™/ZX‚ˆg3PÈhT@% øï(b_|ñùç¼·ºñB-0ʽ*prk”/OHÛ¼ýbH4¯k/¼È[²ç%aM +†â —NHIœO{3½_¤&¾šW}Q‰H޵_§”:kZ•Å:›Þ•ök¡óù‘Ý{Û¦•åá#‡{ú+¥¯¾øüÓG¾úêË/ROí(À°¸½Ì|Ç æõl–¦cÆÝæpsAè–µ·åRçôt#kÞY’{½´´°ôü~atîõá¹ß"ñ»^ϺyH• #•‘©r» ÛÅ1׫MÝÉ«ršg³IÒ^ # ã÷ÔÔ¬àU)­Lл®ÜìÖ< B”J²°t‡‚ü×?ùýìxóõáEÆþkd)k¼;Å•hpyl’1‹>®OÖ¨k +÷¿!ü—Õ.ŠšL]hŒUމƒ¸)€ûä4㣱QwAî,ä«wfïérd­V®‚ˆ†üŸ¿Ï†" öò­™ž=–˜::tÜ` éÅG ëÇ•ÝÀÐCÁ0?àp ¸ˆ÷ƒÿTDprü@~?°=Å б„ÏfF¡ ]þÀ5ÿüÕ—}º¹±ñ)5O²½o#ð¼ýZóûÎëþêÕfWŸÈoQöÄ"¦Î‚O\<íUz/ÚÆ{²]:âiËË´íõî‹­ûönwŒ¼‰è;vô«G>ÿü €Ï Àì0€n )LÏd«»m!k6QÞ[ùÆ=†ú]ÍW?ÉóìC¡_3[ÐÞO>YÐb!ŸŸkþ„X8‘†l¦µ°$ôm¹B@ ¢Jÿ €êL¹VmÔåÈó";Ò¼<þ,_ªÞ[È[­…ÉÆØEa÷êêï7–Z äˈ¿êÚÍ,ç?© ÷î}”Ïä «¿3ú« yÞZØØXMy{q¸¹ê*z±´Ðt¿—ÍèBD`ö•*c‚ô¼%³T::’¡ 0(`MÓT^Î/ÖFÄ–Zrï76îm|ÔŠ¡[y¾:§‚ÌÕG³Oµsfá£|õ^>;Ñiª­ßY¸£»ÖŸÞˆXoÅxNxòôxÅãçGY Ü Øµ)c§À› ÖBQLRsä/žU’ìRzvÄhÛßÇ?¢ß.  ýÿþ'P)—‰Dèí;PªOߕ￲¹¾¶¶¶µ¹µB4À}ùÿ÷·DÂåße’îœÎC…÷¼ý:ô‹2áýè[ûçh+i,Àóî"€a† ×ipf€pý)€¨—°»Ïן˜ü¹qã2 +ÀºcDŠ@sÁÁ3úèòí¼u£ë÷™n\K÷½=ÁPO8õ­,zÔ^x0â{ÅáôÄ·l¤ü¬ó‚Víå›Ì;Pq=@Üáyy.xðPÔ tÅx0 —•ž=»€“‰„à +'à1‘Ð +@@=hoØ÷įåÛm #žÅ€ƒQ².øü0`&tûãïE9L§wÏb~=Å;Šw\ZIë†c;:æÞç=Fn¯ëÛ>Óê‹ÌÒÎH&ó®ÂvœaÛqxKŸ˜f·é*€‹ÿüÕŸþè‹/¿ú\Æ £ H7¸[xf{— —«¯~}¸Y¯×B¼ÛOªÃ£Õ¡aÙë¯kÏÄOêÃã£ÿ4÷ú{O—‡Çµ»>>:>þöëåÓå×_/Т¿4Ð[éíè?}út¹¬Z ÓÉk¿^úÕê_ÊÝ.—ûû‡«ããuMZ„½=þzyø5]R™ ð®.ïºJ1tI})È„Ž Ž6ÿÓÜÛõááòk§‡U%ÖéÕêë§Oœèïíë/—«Õr¹þÃ~6\ŠÓJZ>=ØÐù\/Ïô•ÊÊÙ—RÕ·‹rŒ—_>ýúko« ÜÝÝ(F*;ß®Rÿ\ÕÎh½÷ÍÍOCAZ½0H¿$÷]«8ìTå÷ôy@ïéRˆˆÉÐï,R&‡§$à”ígv¿‡×Ðý­5(u(ÓJi` z¬O/ +ùéPÉûßzpÿ2À~fŒÜcm€~ÒËðñøÿŠPŸÐ?ë^ž91´d( ºt'&7ƒ\}¿Kp>{ @@˜Ý}¾áõ{ŠÏµ«ïžxõÌå«×n( ˆxÂ<è€;8{V×GÐÕou£}×Tœyíû*€§°¤%Û-ôq}@À$ßÀ½ŽéI€ d äø;¡1HL5€“°¼ÊÛ· |Üpð¯N¹;?=˜:ŒPHŸ€—ƒt+ƒD |9Æ1æ ·R TD ¸zä™[àòc87M±Á±ŽxÞ¾2…€%‹Ú|zÝÞ?³éÕo§öJ—½ÐSÒ>sbßx½Å>ͽ[{-íß}8ö¸³öµgJ,—¬§O÷G@Ð àË„DÁ’ù>Ë|×ãΧ?ÃÓZ6·kZœ¦Ó½ºÜÖâ\³ÙDHj·1êz÷F½F…¿|ø<«6ïP©®ëéô¦,—_'·,wè[d¢®¹#t˜0÷vS©\ºÖ‡ùj£‰fÐÚ¸·g3º%ßü;«‡FM›ÈÒãÛ'—=›Há8à-cgêÀ]lj1wLäðd€+u¾qÝæ]ïoÁèh¨ú•ÊŒÌh@¸ §tî.uëëk+›k›["[[´  @ýí6Cä8{fñÑìý‡G”Ð>Kï0Á<€,åw‚…¾ð¾ðÿýsgÏ_¹þ÷î xýö ‹$Üo[ŠOˆO÷ú ²:~âÌyú¸l+ЄùJBM‚+×öUî·§„qßÛ,€SÂÛI1 •uvhðÝ +ÀŽ:ÀžHÀq·÷ó³–ð£_ŸC_äÒFÏá¡ÁS'ÿ' ÐÓ>+ÇCè ³ €|ÿA²«Ó!Ô­ëDNî(Ê +€žjŠâ8€„ý,Ò”6º²” >‡ Ô±= +€c¿Â£µð™À=:ìúÿolíוWôfôÛ¯½ƒ¹W˜u^nÅò)í“?½Ô×óèK±¤Ï?Sþ‹:€6þ›¤Ì‚Ûþ\ +@B¹®éRsZXþa–5'³|æÃÖžÈ<üO–/±˜¡Ë›Æ?]𙡲~&÷`¸®ŸW’TC?›U*F.–ú׋®ú¯ÕùRÐX¤@K¥¤'óáÆ*˜2 ÚˆAè'RA†ùªH‰/"~áA€ò;yk±þèά +¢ -BüÉ&g蛈J‡YB ²¬\öÓø_¬‰ß ý¿5ª‚ÐAAEûb, ál#WVº„¾p’掂4/ šé'ùCÁ<—¤Ý#…%j|šë~p.õß‚¹[LÁuÇyMÇØ÷Ì7 ð>}ú@ç—ôh7‰Š:-ý;h›Îô9{€¸Ú“Í¡ªßŠ•¨(—ÀÿR¹,@ÀPyˆ~‰È—Ý h ÇŸ‘Äî¸×Œ‘{ìòÙWÏÈ¿êᵜh@ªØþ­á£ÀßBøµ»ûyÿýóvÿ­¼U>?26ïYz致€Dæï°äõÇgÇú«ïÓàe€@RR€\}:ÿþw€®€6æ3¹#aÖÆ}oO°BÏ-N ¤þ€ÐN™´ÃÞ<^8¸®©—5¡°ž!ÑLùòv»…ºÅŽ´±qP‡è()rú­ã[€„Ø2» +À£«]Ô€‘‡U\qŽƒ/¿râ*!lCF—mʵMeÌbÒOö58Ì› %žÅº(€ýÿ`;ÀW_} +ÀçV~ÿÇO?=ì÷Ê3[÷»ŠuoÇ +ï¶xkÆÞöî´+Évl<‹=÷‰O´—^øì³Ï¿?’¹Ód1€ý€. @OÏfv”w››à5'/MNfÙ½&H¨í)¡|6å@ù<^Õॠ@PPØøâ ˆ7Y;vôh¥Rî¯ùÇl/Äw£ÿÚ¨\îʨxÀ¤7E†wˆºWfS“t8èB`*­ð)G–„pA·œ¹“~¬%;\•V)••3ˆe^jdcâ!Fp‡]tÿ#ìõ쎳ÖÄØQîÍ g–‡7"{ó÷\4³ÐÌîaþÍ êÊÓKÁ¶Ÿe?Õ‚wvƒõ@»æß@þ /)€D|2A±ùRW?È{zLéâ»×âHðoh ¨‚àH@kî €†=¥Ñ¹åõå7tSÀõ­ûèhkÛ#îc@ä^sƒû…ë÷¥ý‹>ü±pëïÜàÚ1ƒËÄ„ Ÿÿ€Ç"V`g € €ñ~íðú»×C8®Ì®Ý@P†`8v‹hý÷#ãÿ΀_ìðû9G'Å÷{à),)A¨œ´[]ô@­€à[@žq€J•`=‚L/¿{ƒè€ùé;P÷Ï]óø§ÞŒûr‡’Р +}t„´Ÿ ÚFbÇ2Ž_¦t'…þ:»Êp-'Ço2èÇËÂ|$¡ÄS[B •Ú +À®^¾´€‡ûù?‰`ñny‹·ÔÞwUzuÐj¼¼º6víÝaûìú“Ø /Ý»wO o€Š€Ï>{”bR€ojÀ!pÛŸÃÀí27wÃx|NŒ ËÞ3¾ÒO|쪜ð÷ð•cä\žýïEŠ©1ÚÕ«Uúµz±Ó寬mïÒ†¾c±w³jÝCp¢`·èsd¿mr£º*´UA„Ži_¶Õ…Øøÿ:1„Ê=ÉY½ªyލÀÙ+R0ÔhˆcÀÌSŽÿOæŽùý“b" ³­æœ6\8Ç77? Ï2DÍñù…ïî»ÂÇ òŽÐá %WèË.í,>ÎD +í~œ$Ù æ1Šf6߆¹€º€ß=‰”J„ôô Ô¦W–¡€Ö7éÐËÿwƒÀ½fŒÜc—Ͻª—Û¡ 0^„é ½¯ úÃýwú Ðß~(Ž +@Iäó_»åV¡\Eà’ à~¯Ùço{ýÝëî p0zþ‹€çI¸ÍÏ¡@[ø@ÐßñüÛ^,¡ß+Oc…@-‚Vä“'AI¼øvoçß<Ï“Eà?†§-ó“„àˆüdNUÇf­"ý¼ðŽã†ñPŒ pR$ã <;8ÛΗ&´ Ô™²ƒ2+ÚfF…Ióñåùþɼ!K0ñT%üìý ÿMP‚@dŸ[pÀêJ«µ°e{&Ó;jÇ˪ýΊ•¶?Ó ÖºöýßÑDˆ~÷»?B¾à3†èV:@²tߟÙÞvXÝ0+xÓl²qonz––~S–·ÿò|«­€‚Ü Ð À\¥˜¬+«4. ŒŒŒýGòéðÅ[ò¿k p±Ñh ÕÝTŸ¶À;øÏ…Å îÕ7ÜÙGAffZó*ˆ®L„F} +x‡Í¼G‹ý©©¼1šÍÂ=lÅ21Æ¢alè ¬Üà%Ný(l’ñ(HóRãQ5!>à‚Ìf«ÓÍUdF<ã]ð ¿E÷?Bg˜l°žY@º/öåQÐú¾íÄ»'@(xîÓqÿ½Á:»ºc8˜Ö} ’ù›VwYq4üÚ€‡¢€deF*y<àÞ¾jsqyeyyy…nÜ €>Û[ÛÔìDçÔë8FY¡}œYù·÷ÏŠ>gßø¥€@/AÔüŸ?Bó¨*Ø­öûÙ¯¿{=€WϹ G dÏhDòûþ'€#ÄïšÂûg-aÜ÷ök+0¾¹€Ð˜|P H"À+ÞΞ:ÞÒ}˜ƒgyŽÂùn£qo¥іʣ?å|e¬ÌP8Ḷ8#Á?õþ¡ÿu‘ã1Œpµåe‡úy…€^*¸Ž²Tq~‘¡îóšP:¼ ‹#ÏZ ò'’¡?ð¿[¤}iüÿüK+«­|.ÏÛ>¯¥7V2^•Úho³ÃóXï>Âj×ÖSY'ý³žùöÉÇÿ¸ö±{¤€nÒgÿ”K[xÿ¶¨xÞì¶:Þ-ææø«èî ì w„ Cض¿k:Âe³ÙØÈ1€Ú€`V @øŸÆ–ÿ ðÇêZ^¥• !>þ¿[Ò1 +³“iíQU€ünQ$»“U[Ðí¥ “í‚Xû.´9“gµÙ©ìÇ ù“PQ¡°7ÊG{–¦‰åì—'{׃PAm´M6ò¥òªÊÚFlv¡1ú;&ø&|cã±*à:­Ùíæ©îé± Š #(˜­b,íò^§ñª>¬àýÕ,àÿ¥b4ÀŽ=öÙŽ+% ÿfFÇ¿Ñ@¥:ªA€Úánèhqeem™ærù=÷@@òþ‰ØÇŒ‘{Lج·Û!¡¿^ɼ•‘BŸ¨8ÌïüyÆÖú™ó×nÜ´ ç@*}^¾Nl`T@n#Ç?úçþìXË # Ë:õêåËT蘾0€[nH@[¸Š`üï`?k±¥¹fZK÷½=ÁÚ1‚û¨Ðõê/¿LD„@Û`xŠ8uê¼Õ“p°M]m8ô^&ìN‰ÃÜ­Ž;úÃè`¯ -QÖ\‡`„¦@ƒ…À§­8S™Yˆ +ã¥K¶KpÞÐ7¬÷³1€@ÿ˜’TíV¾ü³xôù§÷6Eò<Ëg|ÛžÅv¿Ÿvm‡àŸÍk±éoì/ŽþßÇRƒü{Ö¬|þù—;(@¢Wé>§ÛþÌf„Ûa5f Ø„Ç÷êÍ;࿽j;à`ê0UÞÆ@í¥ÿ~ïÉÐÎgff¨_7R`ô? ?Áß*x^«×ßi´†ò©u²®’÷Ñá Öë.H^Íéž7¹÷ì›% ¯`"ì„põðá•@éÈ3kMÔÑöøÇWMêÈÐÿ÷—*ÕËs–1œEpoDÚ„Vœ!Ôb¶UV^Z¥öC¥žÉòúøGé†'úFfÈÈñ^@φWPì»[@0~ƒÉšuÆð‰ž"½óÐVGm!)‘À—Õ…ÿÁ}•ø¥Þo:Åh€¥òG¬V +Hk¥2ÍÝàÝÌÐÏÌUÛÛZ@ö1FÃÝk„ÍŸqO€z1ÛÉ’ë÷÷õ_þ¿pþüÙ÷¯Ýø% +€Mu(ꇀPì—§*€¤Á÷Xp㪧ëþt¯›œx•è~+Z’aR<±®ä6çΉ \¹qó@o¼)@ßè_l}¯<…íTÜ!@„D  €™9  71€7Ï3Ž¿@°€Cþ/ñÓU(½†Ó^¢÷°ž9ý k—P’ãnïï“5wzS1-)ÓI¸ +٥ᆠ\B9À<܃ öª<Á"$³}:¿‰m­èÖ^yÖ0@ (AR;@fÌ*€ÿ.HsWÀÔröß~ÿq‹¶[ϧø]+Ó:ûõêÜs´“,á?ÖYÛiÛÿÝÚÒR"¿c €¯¬|ö(Z´ €ïjºÍÏþ2Ãܛ𸻱—ÙêýæÕûµÐîÙ|8s³;™0ò]a " +ÑàÇ.;rähåbÿdmÄ– W€+ÕÅ~,°:\ŸqìDøÁ€uïR\P‡tÍæÌ¥UìÑi {g³ñhwÀÉ„ FA(ýL63»`4W±ï4ê«Ú Ð5m#EàÑRé}¥£•K§M$ðóe1:°K$›´¼ í…¬Ì؈„*D¤ »ï4j9ðïs݉ßóøÈÌ#¨e¬xÛİ“z|xã¡ì3'é ”±„ úÜt³°`é¹÷ìq¦Ì xéßÌè +˜~ÊåJɰ±r™Ž¬¸ÀÚrT܇¸ÿ¿‡÷Åè `¯#÷ØÕËgä½…ðrôÑâö1áÿûúž/ºüy bÜ +F ðWB 8 ¨à’(òÿŸ¨êǧ{=ª +@“@Ĥ6ï»â:¢ƒž\ùë^¦µ„qßÛ¬£˜áF+ÈT @íDPuH +.·07bBµz`>ÞŽ8õWç‹î|º€y]UǬPèGì=¡âò-:×µðŠ7;€ýœI¼¢H‚ƒ®  1‡uÍÁ¶y´Ïä¹4IÙð +‡béEЧ5s€ÂvÀ[ø…gòl?ÿì¿ÿÝFë7~Ñbܹ‡²G>út{ûÓ­­õõÖ|£öã|uûÑFÞk¼;ÍçùÝÖÊÊݼ1rläbmr¶µñ{9Ë÷ɾ`†}úèáêJ€BkãSíPžBRŽõèKþôÞÆÝYùp þé6§|ÉçK}œÍ§ŸÞ[ͧkÖ'JŽ}Æì+fŸ®Î\8rld¬V¹ptdúî§‘ì+%¢qc+«¹ØÈאַ +Ì5»+OuþÝw€wW6®¶¦³üîÊÊê:êg>¸‡ûÒÓó¿åùâß,þf±ÕZ‹ÁiÐÝp‡¤»lð÷3ætp·´€#ëŠxa}³%@åV +Q (Ú°ËœÝîf³òûiXw´^š +ïÿbÒÞɧڠ*«Õ\wxÂ:~â2¬ÃDV…Þ\¨Ñ¸£k.°¡F€õ´ÏsJ5CAÞµø¯Ýúº 33Z£nB9,¸¨:Q‰¬\lÔjÕ f4:]™?íÆ|ÊÅIÉGgRÖßk%t~<í!SRA6šõt©<—­Ì_Vdæ³&©€ôÇX¤0¦·Çp +ï·P¬wÅØÚ@(Æv_ò F>/ö0ÜVÀø70a=a€0úf,@@DP°FÀÚ¦Ì +€ _0¿ý?Öûí Z/7+p#€Ç× Ð uxþý3¨ð¡\ÁñF ðÜÝõ€¯qör˜€'Çêëó󂤀³—¯_¿ÆXTÅÛ1ôH9¬Bœ»zÝUñ +à©{]Ó÷ àëm‡Ø[HýÙsöæà!4¯Ì1DßÙ½‡[b¸ÜT» pqÇ#$?tÜ’€«ÔÎDP{òÄù³ƒE €1½Ë`VŽs}eb@¹žL +À‰ã¯¨€â)0}t±¸þðáæâôÄÄôôt¾xè¼+b@sòæü²Þ Û¶€“m?z¸²<ÝhNLgw×àŒòÊ|{kSbºÑ˜k­osЇ¾PÊãËG_lßßZ[œ¦¿º»kÛÂ÷/¿øbû‹/é#~°½<_)UF=àÜèôòÃíOB¾x¨K|±ýðáÖò\­R­MÏ/®¬Ý]f4“»ó²élbb¢µ²µ½²’Í/Þ]¥³­•­û[›z­}úéƒO?5²åy«µô»ß}&£# =1²ý€gäéÎï°ÜýòEk¼|µÞ\ƽ+ Šåk»€lnÀgðoØpx…å“GÜ@e`l¬« F౬…5‡jéŠHû6Ã.¶²º×ó¥á,ÚºqþTŠ7låUz!*Úr"»©¢F‹p ­·ÙYAcllŒ*1h ’\¨”ŽŠ”*Õ¬ÜhQzx!WqA "d6ù.{³|uø#]&±T¼Y[˜a| zFøFøÚ/g¥pÝÛ€Ì~$~ûû¡ÐÝuÀwˆG¬P¯¯Ô>ß+‘ŸÑ½­p\ûwÄÆ©Xi_·ÛØÇtâ7dýý¥:eþ#Ð'à¿¿¿¯w`tÚUÔøsŸ^é §ÙIÞcA¬h3ØßP ü^ ¸£Ü‚\¿B`âmà×Ñ€îûo¸ ¤Èÿ@À,¯ÿo»ÖiP(ĸ +@v+gϸ( +€³ùùZñcGÛÈ}o· +€fE+}àÕc"a†Yœzó,Îy‚ÿ6þd!PÍ6íÞ#ú&àe€°WžÊëÄ ?šŽ0t¢¶⩇¸; +€… N 1€X–‘í`IðïIL ÀßkÌ#óg"`?Ÿ0ãT¡ÿ·€¯¾À¯ýãïîбۥ†0›šXüèá¶@0X{øhc¾ 9——WV–監•j}4ÀC€‡†ñG¿PÛkËÓÓÍéå ÎBé/ååj0?1ÝüÉÜÝuÞà ‘}æ_>¸¿µ:?Ýœ¨OÜ]¨ã_øRA`e®Z¨UªA”;û¡_@.D†FGëÍù»+«ËËkk+Ëwççææ3Q˜‰åÕ­‡*ÛÜâòš ÀšÜWnno)m€ÍÖÒÇ¿÷˜€Ýøÿ¯Ñ°Àÿ¸éA¿žÕ\ÝÐmK«¿ÿx5ÿ^& Ï>ÍG›‚ú;YþÑÂR>“·òÖ'KY5kÝiÝûdÁpòÕ;*jë“Ù\Û)Á’üàc¥ÊH­Ô_›Ê³±1eÍ@žµaÚÄ/keóYc¸¾¤KÒíÐüùøw­òUúÜÓ ­ ]“‚,(á*Ýý-å­V6žÝYhÝûX…PÉ–îÜkdwZ«Ê ÿ装YFj©dy>^ÏZ­O„Õ*𮫛K×Ä*7ºR9Z¹p´Ö¨Ÿ®oˆÁÐÉ'ª Ü‘6îéG.݉‚¬~ÒÎWEsrA9ÏhC™«ó·º·šç>éy—‡;A0 q½&È}ép 7ÈŽûï >áÔï €)EŠü´H­Ò'YA¸^Ûvl¦4œG$AO_ï7˜ú@{£~…Þbƒá­ü 6M@þOäý#Øû·öµ„u;ú^EÐËÕoA^½¬>†Ð +À ô_(o€ @:áü/ûð9jý­X8sÆ +Có&@ðÿ5 +@ЀPÚ” €s—¡W\ÐQnÞ¾ñsS’³DPšDëw þûÅ÷àëm‡6²"§‚] €X;À ý‡õ{½~ÒðòK• Cô¢ì{pŸžž.àÄàÙSI̧}ìæ,cЭ€kz"8ŽÀQÍB༗@t\?3€Rx8Bn3ÇÊ“µÌb#.Ù±gê Èdû‹+V&ê&w…ÛAÄ1¶¿L +€€€•B˜†Üµ p×/¶¶`·æA¢Bº+•а)û°õñ£ `Ý1m‹›®émz· ›ñyëuñ—zµÞ¨¿^mLÔëY½>ßh«ùZ’mêµ:5Mw«šŸé̉Úèþ¦ý}¥Þúanù_­º~}¹‚rÔŽ·_cQS^"\õF³9‘» ´$ 2qzœF³®„ìÚË®©Ð>WYt +¢?A†º,Å. ò½YoÔFÝquHs?#Sîfÿ@¹zº®CÊ|B—j4ò&£þÇ%¢ ÍÓ\Ã{F©Â)ñxN?ÊN&¢ð¼fÀö,pXóXM8ìØ@ôÐóbx󚛡R¿k,'ÕG3'‹BxéEÎ޳^(qÕøîoq”yŸ³Nÿ»Ïg¨ Uåÿ—Ý ˆè(cðϳ¾îŽˆØtW÷…ÿä!ìÚí²ë Ÿ·SÐ;ú± +€åÿú3]¾vKÐû«_ߺ~%á.Ü€ù"P„ÊÂl€¨xœ@«ÿ€{ãR˜%àÌ«Vn \¾Ú‰¸ñw¡D€k +à±ö Oß+Oa{±ž¶Fjß!wØêÔY+t$Kþ¿ø/Ÿ¦‰7®Œ„¥ Ís\ð@Èìk‘­ò:I(ŸÎ°,°‡“€´¿K Àåyà‡XðYX(h˜hà_Å×aC_¯¤]ÉT<µ%€0|TpŠ ðß ‚>ÿìwåøþ„_µm·à*€BØ\lNüD@Ì›ã•jm|º« +àá—Bhe`€МhÎíQäã+oª~"¾e@Ðo”· lÜßZ³ð“P‚p\ëm`h§àK„0ZI +ÀúÝŽà*€å€l@xÓƒm^€XßS$ç{¾ìÂà_@@Ÿ¸åšžGïc£ÕQatõµzõõòëåáêh}´YÖ>¡éhu|tvðÚOªÃJªUí×Bç‰/¡BV¸þþ½ýrèôZ¯6Ànµ:¬7ý°¨€€:P¼ùöë£Ú3Ìgt\ HÕ62­Ö_¯¿^Ž‚LT‡)€Î–imb\!)%ÖbœÒLˆ9P"¥¯)éøé×ùM:<ÑlÒq•þfiy†Q Ý×_î/SOd´³ õªÊVím¤|ZéTÝ‘q]l\?F—oèæð;8ù9- ZÎugÅ홳†·ŽdïìGp;>ïÁ^hÀñHH €VÒà0©½ÎÌ A1órqž™¬â›DéE¢€æŒ +400ÐÏŸ¤¯¯TÏûV<0A÷×èþÖ¶¾þ—Ùcy{ }þ8ýºƒdPÙãa»ƒèpדc~ÙQ,È„ù¡8x†æ‚¿ê"Œå»‹¸ÃŸX À÷»×™‹œ›P6V®¢ˆ1@’ÀÅ)äûš?‰øÁ~¯%ûÞo;ÍN +í¡'£¸ +^ðë²7»oü‡V&À¢ØŸø¶†–C~[HXÏhPĘ[¢!ƒöäY•õ&I")z˜: +Ð$€Âʼn…p¢—(A=Ý©|=yèWbú®ÂR–°âi,!‘fÉ쨶CR€À#bì&µ‘ʱÒáxÈ ÿ²] +ÀÄÄ¢¼t+͹l±ˆhÖä„wbä™?ž»ù’ÓÓ» ~¯ÀÙð(Bû°Wꈤ<,_b·°ÜQ¨øIkíq +q ÿ1ãÖú$Å[_ß÷ô—xJ³sÛmÍK­|.›ûp.Ÿ«OÌႸ˜}8'_ù?'6.‚óV½ÕÊ´¯µˆ2Ž-æ««µZ³:6Õ¸PºP«ô—*Y­6–ecšåÙ‚ÎÔ/šÊZ-*òï´êÃÓ«ºbsŽZ*dæ¤û­ÖòLwí?×u´!·¾•Íe¹¦’-fù¼Ë=Ïç&VU•#¿47ÇÙ:LlÉotïTâÖŒÊés?¨Ñ˜Ôi*£~êTc’؎Ί.”Ë ÷×Ð%¦õ£ Ø.HÞ¬Ž^š“÷ßÔEUÂ\·*ÏgçI¬Tysqc®™-kçâs}ô Ì8íü£ˆ l½áCV´«PÜ0ðMª4€k š<§ m˜ú°l°{,_Ãßý#äɉ.À7ÑxΘN€+š—ËîX“dï@Œ "7ï¯m¢0à~`·Çp5 +@T„b÷{LÎÿe¹ØÚþÿè2™X€\–ïm€ùäóÿú׿úeR˜¯K  ÐkC¿×Rìÿ5f^ózjpæUgv#}ìVκ9"4àŠ€®¹Çì÷·áÿ{à)l·<@θð²3€€îBØÿv¹ññõœálŠÿü½–ðÌQ çބÈzg:Ç }âÔÉPØýh+¦#d ëýmÝ€a‚Nœ¤Ì +¥|’¾KXñ5V Oüe¸©®ø·Mu²ÿþÕ—„l´r±*•Rßá4=F¨E @Gˆ€Æè<¯PD8/^@Š€l§ ”Â+ï01ßöð!ÂÿP‚„Ð!$ °ûˆðß@×ßÖU¬1;ª–W6Q'æw)BŒ€´øT.€ÿùòï>u@QßN„`ks¯g4•g§ â¯Qì†iw +Üzña6üahã©é L¥m, à'ôt¬26P«] Ø;Œ†ri%s}³Ùj£J7€5®[Zçx‡†‚Ê^ð«l«Õ¹v»×ß7£·b¶tÉñTQØpÍøBŽå›š]XR.¬ë;xo’xCÚ%\3ü£D5JCd£‚PQPO©ëǽƒ´ïK ×…ÿ¬(]jÊxI¿š¬ÅZêî1áùGÂ^ÖxÓï^è«O¡èk0÷†1¿ÔÕ ' ¿àZ¼ðB_Og4@'HfP˜“§ùãj:³³U¨oÐ!‘»$ P‰!$€š®,¯èÿÄÀñßrÿáýý€‘rŸéʹ3'húæøÿXà—“ý#Á?Avš„Åî €óÄX~÷ï.‚Ï20_ +@§`þ†þX+ÊŸb]ó×pEÛK`(qèÖm*4Ú +¥¸ríV7ë Õ?,­'ûÞo{ÍNê &¢¼Bí½RN¿ 1ÂÖãàôß!KøO ÀËQŠŽùŸ /Vi0Ø­ ž*Z¼þ{×5Hëk)_× ”rÐ +`ð¤JH U†>(mD4 !©b=ÝzúŸ¨°l›%°ø}…4šø`†,;¯Á¾úJ ûéVõ°»k3üËöQöÄ,[¨w+"‚è.€€¯Qš©ÀN À|R:Uû*Ë…ð¥9FR*ûÄÌQp× +@¶GÐçÓ0€c|Œÿl±µúûÏ>ÿ²PŠJ€ÀY0€P|ß5{‹þøºL˜—°6¦FßëÂf7á“¥Öp6‡…Àiz¾ p!Ÿ£é݈é¯Éµ®]¼ø®@wL'N½Z +„‰÷‚­ Î…ÂÔ'ü©Õ¨„›«VåÂx]ÿŸ 8Bõ…»ÕìRDĹ +Ò.›mˆ(Ìfã­­º!vz``Z&ŽÁFF.TŽ•jCÕv¾(ˆ‹ÑuCšÙpýÃô“ÙK²I®¢ëÌŒ×óTç2}‚Ô@f̘ïC˜÷F Lðe²/ŸVÛ= +êcŸ3ã””×h€Ú' +ú·§&!ŸýŒÝ"š£Äœ?³õ÷—Ê%†¥@™yÀPÉUJ£ó‚ÿ5¢è +`î€äýïßíooì7 …Ï®‘M +@Aöµ@×n»€ +# xµv6ZþÿŠQßÿàúÍ] +À€ø‡ÅÚul÷<ðê¼qM$‚ €v U—¯ßº•ê껡¿½õ}ÀSØ^ø·7.pBëJxœþÆÇ +ÀñCÄt{Ø ðæim­@Ùj%€ßqN:ð®ï:„låí @ý0qbÜà ÄÃç1,€Ž¡pÙ(Ÿ³ŽŒœ+ßöÌ;´HhñDKÀc0j›€"P–Ü[GgmÔ.t@¡hÚ~øàÁC‘ýõåù‰J}^ ½~W/æiª tm%Ÿ- e§ï®­,ü˜„‘Öï6õŸ˜[^»¯=þñp¥RÞëËÓ?‘Ë9½,öÀëûå—_’æKeôÅöVkºY¯þDÇa$‚9øT2ˆ^¬Ì•ûJµÆÄøP©2¿²ý¥PßÜÁB‚ÈÅÊÜèPu´®‹¯¬¯¬­ë ¶¼xwqq¾©+Þôç§›‹‹vläÓln>èôkÊ[Ðþç­ÕÿvUè(ÅÄçL¾öΩ®Ëbõ‰Öh9›Ð šþ»À¶p¼ù¥aÁ¦ƒúÌdæÁquX¨Þ¨+9z¬Ö_qK»Úؘw’¹ìÓ{ÞÔOI9;“7FÜî>“óÍÕ‚’@|=]µUÎ}•FýÔéªP'Ä峉ñ`øäu];Ëggu¹ z!’ ª1›‡›.æ1æ5A¿ì"]6މ­”j‘O6ú×Ý@œ×éE-òáÑŒÚ +jà‚4#ëÆj½ø¤g¶xs€®áàëË<ùéÈx롼d §ö¿ÏîCX'Àçi7þ?ÇÉ€éEW(¹òMf°Ó¸ð>¦3uÄUAWž›Ð§_È?Jd&s†¦'ÀÞúF›‹‚k›+ùÓ@ÿ1Ô˜=f8ànÜoOBÏkç­ ·ò“\kÖsAìûçÁ] +» +€¾ÿnÿêW7®š ¸ +@h›€¼w€Á>?Ë´À¼Ÿ]{ÿ, +kŽ#°6éoEO€\ ÄQAàVÆy÷0ˆ6 R¡²HGôÔ›–°Ë— ‹Üüåz…ű„_g“"H ±‚„àaÊÓn ¯{ðpûѶf"kwç›C•¦Pse±9Z§êü®ã‚D ä5ŒŽÖçWôBà¾Ba@!`{ån“øôòº ØŒsÌó‡D¦õ¯5ï.ßçˆ^…ÿp€GÊëÑrÚ룣"›Vð·> ×ç‡úÊÕ‰Fuh`hzE9“»Ž¹ÂÃ÷׿èh~´9‡û/ +°²²¸rwy~nZ05·¸¶¶8/f¢w››Íuޝ»~ ô¯¸ oývãwx² ëºùÏb>Ý–p~bâÃúð‚8»XÙ´?ÜÝ©©ÙæpÒ»uŒJõ™¼]˜š©˜ '@ê»ScïNÅh{S³J3C§3Y³ l +JÚ‰F­ÉHAºbáè×ÙxuÑ„ Nqäw‚}u]-¯W£ 2[­Ð—=Sb( ³SÙj5'D€VÆ´6IWHµ²]Ä}]Ê åƒý>” ×3Ê »Ä~„2:cŽjËê'<…'3ãtZK ØËJ(ZÕÌn¾œyÏ5{)b3BPáÍ{ò‘IW |¢œ§sœx‹l‚‰$àùãè¨L à¨[f˜¤ŽúúzûkMþ××Q6H]í«àGï5íÏÏÒ›¹­Øàï²—/ø>=ý0“»/”—¡\£# Ë$èRh(§½PÀÿ§Qî—>B÷Î,e&à¿q½ˆ(èB—àHŠ£ºhÀ|ømØïìI ÷½=Þö‰þŒÁEÀñ“†IA, RG@0€npˆ:Äwþ| ©€ÛQ€v¿tkú¾ P{ê,(…ÆuOâÍÛ“ß« 2šE莈lO¸¨>œzÝ5ñ_ÿ½ðZäÌ·0ó– -¾Æ€CPÛŒP;ñßU‚ãÏ?ÿ'1€Šü¯°ôOL_Ÿ ö®ß›¨M4ççš z `íîÚò\s”¾Ãš"ä¤ËèÇž?Ü^CMßµ‡/ç6þˆøî&èáÃõåéú(’üæƒûJJKø’5åµ½¾(‚Pªß]Ó«\¿øò+•]¿’•ûJ•‰ñJi 2·¼m@%€~ÁµQ&¦ç+äÀÐÙòÝ»‹ùtS;çïN ;šwï®Ü…Ê˜Ñ Ø;ŸO¬nÜ÷@]ÀwSwuøçólX·czg¢¨åÎÆ‡ÿQ{@;0/v¶-w€ Ÿ[Ð?+`y}jjᛪ](•þ`,<†ÀÁÙ©Ÿû•ö§î6(u6\ †œ@j™=ú0€ìQ woA2W°’7”[–›ˆ¨$b"\…²ÍŽFYeĈŠÀýAP #%ûó¸û5Ý®%&âË¥ȹˆH爎56ÇM´ú&µÿmÞS¬¯]pÌnA»÷=E?À701á{Â|†¾ìëêÀ{ƒ ȸPÛæ‹Ù.‹3]Œr< D/€ú?úýÿ\a@ ™{t?úY×ä@@ZÜ×ÿ»˜Àþ€¿Û@ÜŽàW L+ü=æ.€õ‘ƒÍìÜå÷ÅVn_¿ìæÚ‰pöÌ)€_Þþ•ûJA€TÇïTc¤+>Ý3€sTÀ:Ì"º€Û1 Àua¼a¾ËÚÐoûE¹ïíñ¶ÀÇ8´‚•Q°ƒt+€k[ÀÕ¿m¡à*®uâäÉó§‚DÞ$w´µÄöENŽEµ5ã|xðåÔð üüÈ€,íîcî @?¦DÎ#,åæ»,Kpñ5Và&ðd/µÃHA›«­$–þ‰ï‹XïÛ’ß/Ç¿RòðqMB£+Ë«këËsÓÕ¡ÊÐèD.ðHñϽþÅýÍÅ:ÁôâÐüÅ®éC‚› ¬ß gsqýþ£¨Þç4’:ñÁúÝ鉡J¹¾¸ö€àBúøA! ƒëó¥¾rµ>*oehzS©¡õ³¾"ó‡[kóõJEþá¼¼}90ë4[Xœ›þ εàntyÀ `ñî¼ÃÂÒ÷<@QÝѸ³m  Û‚g±÷;SÛ²úðÝzý@°Ë!/,o ã¹gÉž¶À–ù»ÂøÙ©Ù÷ ¨t¬ÒW& +°6"ü“ûã èÏÎÌÎÞaõÎììäÜ(>4دÛB  ÏjÛDZìÔ‡YÚ[˜ ™‚L6¦–LDf‰B€kxd(ÇlV%rІ)†.RaCxoJD º*¹p´Všpxƒ<²EPàŠÝiærD²ŽmèQÔ‚Ïláú k™¥ <6Îâ`³ðNppw€8ýDÈHª¹cèÈ>'NLðÎú.Àã"‘‹Î|§9Bü¬jþ¼}š”+‚ÿšþ[y ¸ þR_o_Iÿ½ú@¯¯¬m®kò{:€ûÒËb§àï±kׯžïŠ€0O€¿Ûèç_ÓùË—µÐúåó€õM€œs¹Ü(ö¾ñÓ=à+I¸¹Sx,(àkÿ¿WÎ 20¸u—`b‡ÐV„õž~á¯AÚ¾áum%ûÞoû*¨ìŠôè €îŒŒ=ÿæ©“®uO°jÌZH­úÛ˜ÚVÀõ.À¾úIh@½‰³t¾R@Âk'!v³îRÀ6Pˆ8È¢P\u€¤ ë¥o‚Ô;‘ +²@Q4–ü0/½Çà+O_`Ž JR†ÿ +€»üìwm  0Ã~˜þÕ×7­ÏOT0|T¨0=?'wДMOUL‹+÷×Ñéÿ8ã¶åáßÕ[zúsÍI` ã›øš€Ø]‹#•_lË…ðèþæÝl¢6ZiÌono?²ü/ûòˇ_lo?\™® ”+0€ÊâÚö—¨ rþÓEDæò¶9=w}s“^L„ì*öÝ»4ÐEGG«µŸÌ»5Ãʲæ«m`-Á­6•-~´zïÓÏE`;Àw3î¬@²¸ùíÏS[`×¾öáh9þßAœ/Ìw¶¹áES F6¬S½>Ù¼OMMŽ9zôX¥¿Ô¨ŒT` ôv.pì´ÔÐó_Ö¯Ûä/U‡s„±‚NAÀx›@‹%BD„îxµƒAރ̅sNôuIÞû©fcb(•‘ • ¥ú + +ü‡ëD9¢ `4ƒˆtJ±ˆ²l¼±Ê’¼ŸÑôß{QÀ«7ñ­‹6ÖÒÍ?pëµýÒ‹±Á\(N À‘¾hÀO¢à\böà…µÇ—I³Ç›Î|Q纀³¡4ÏÅúûiòWv SµB v•°\Ÿ£À:ÙuiÑà>R€+öZàýnÚ^M + 5Zy ê#ÐÜÿò9ºý_àýè…û‚ï«®èˆöË+O +€ ˜K&àI}÷ÅTÌ0úxÕ}(Á¿²äÐ-:~¿ÀŒ`A€+˜’ׯYÂÿ´ãv¹ïíñ¶¿À’yR„­8ý½¡¼ ʦÿAk`k€¹ct6{„Üâÿôíïæx¾ {òü›îÐ/)œ‘†ýU ÷×눌؃ώ´Ô‹Èÿ/,„¹ÿ‰8´$+`Ø+‰OØ”—²"÷â¶tìi$œÏö„µ%CÖ.ðè³Л¹CøÇ¶­[ñë׿ýüDy „ ÞlNÏÍß%$Q]üDm¢.?z}‹v~Â}Ký_~±ýˆ(¾í5%˜˜ž›y^À/„¦–@x½ý†ÓTÅ˃Wz‘×ÈÙð·®é¸rhÞ]»/Jð‡] <\˪ý¥Q^«LÌoÞùPæÚû`¹¹Ü¬OL ÿUPš/¹ž_øwqžÈÂZuh¨:1W‡a9ŽL̃@ w~»±ùß>·Ð-è^¶c; +@qëŸÍ4ýë6 o¿^_¬_jLØ× +‡qU£ê nU/y}rv6ŸýÜúYˆÀØHR&Ó@à.Ð(4^Xú›Yyÿ ¤VŽõ*øî¦kqy¯½õúÜhµIA +DŽ‚Ø¸Mã¿¡uþù eÉ¢ TþO½ÕȲ*£Ù2F-CÑwvajì¢xÉHåh©r´Rª8†¯]ó n©2ø3'°žÃBDØ«šB (H>ú“(þLÆ?cá­ó)(AÚoçœC i®ˆrÃ{»ŸG"ƒÇ*Î;Rxß½G4'xÀkº’æÏÅ %€ŠÛº€@ªè-Õ§þën ™þUlk› ¸Ÿï÷ÚU€®h@üÝvþòûô÷/Ï_3„àÑÁ³/ÿ"¿¾}›v†(QåH +€ ï÷X‚{›Wcû¦À^Ü@SMÁöÃõùê@¥>M?ÍåM]L):@ª‡¶7uêôœãü òW‘1W–i  “FG+¥¡z¶xw}}{K®Ìöƒûí¡MŒ!X–·–Wï}úèQŠlW˜$3ËÂÂñVü‚PÏëE˜_xÞ ù+¼ó AïÈónPõ>5)ÈEÓ·çMbV§FhËXé«4*LƦÞu:3û^ ^ ~Ö +0V+¼jªÿmFuY€´náÝ#ðjÎŽ b.±:iiÁ1=˜¢ ÿÛì{ +*œÒe3bŒº/‹€Ê1G¡Ž”ÜQ—O©§ÖEA&ês"±®dJq¾¶l4RŠo<›wRY®FXöÄzŒÅÍOcÈ­QkÂ]Л(ÄhG¡DJàĆÐYp§å\@ ^ÜMº—;L;ÉÏ +@äÂÕˆ˜ˆc ¢ µÆì‚…‰,¿ƒÓÏ0ºtÿÔÿ_ ²âhéb92ü±;hÐ `wAÜ€¢Fh›‹êR©#FBˆ:ާ7§þÐw 59ð±bhN‡ +€^@oÇ ó“‘c H»"šc)‹®~È§Ó +€«D¢øÆl·ù¨óÖ‰ÎßÌ^êï{¶iàp”Êå!ú + ÅP¥4@`Sÿ#Ë+k«z¬‹`Tl ¸¯…ÿÛþVhœbD¼ôKÐp¿×B`ÀM޼vãE ÀûļO,`R®ßüÕí›t5H3Àë¯Àü€›ésó&Ã_¿|îÕAz´påjW À­Û7o0@AB·¸"¤¿õ‹ÿA%Dù1‹é{àëm (€ÑQO õ +ó“ àzÝ&ÏÄ  ŒçäÿïMƒ„î ©Áñ“§Î§fnXtþ*·óÃaO!ì;5x2JqìÇ’pÒ_+ºŠc\HŽº +LWñ솰ßËo¦ Xþþ{”û{ÿè:êwÃ@Èd@½góÍ*ƒ×§…ö"bËèæëëË‹óÚ³,Ýn··møÿµÜÞÚÐù¢ë[ÛBxƒ·çÂømÁîÃûë+Êýîòúý­û÷=à¹ÿZhÚ~ððáý­чyÆîá¤ÈˆþâуÍʼnÚÄôt>/4_YWê/8í¾Ê@.·E\X‹•2«˜–îÎÍÏM7k4}ªgËëÛœéȃ &2úÜ]ÝH +ðߨE‚gö3=£¥‹uì]|R¯5ëÃs†»Tõî঑wªE î…Ù¨{×d ¬ÕîXUúÀÿ‘ÚÅ‹€¶mV“ÌÎ8È9ÙBß7°ë/ØMp[tõGeCu&¢£šÉç—’sÁÙÆ(ãúÍæ ¸ÿ""Yôú' F  ˪Y3N™š‰ë‹ˆ$`䂇ŽûËrZ*ˆ+"lxô±vi˜8ö×~Ì6ä7|G¦òzý7*ÎÌz4~zz¢²ô—)¡±ýôØËœÆ¹×š\ø€uà>ÎP^ÄÆ7.GÂb,gö ‡í»Ç9NLeÀHÖYÛe: ³Û +@šÑôP˜þL33× 1"ÂP›”<0Àšã >MÀƒ®®3º-aë.„&@oѧWb4À¤ª"ò¿iŸ†â¥ÚÿúÛ¿þå5ÖÝc ’:èàkêø  €sâ×¼°£@Š”n¸G¸q+ðÿÖN¿ßÈö½ðõö@(«)¹á€ëŽºéOÿaJR(Z};­ÕáÁ@s¦ +àkYýO"@â¦ù‚NÀL~]dØIX\‡e\VÆJ:ö”]¥‰:Ù€¬‚ËÜ€ƒè>Á­Vbî÷kùîâüüüÜO&hk7Zc\Ÿ À—áK¯,/Ê{¿»¸¬—U‚ú0DèýûÛ4!ؾ¿µ¾¾B”ÝÚŠŽ2Ξö>Ð +:!ë÷ïs‰åÅ•eºµ¤¸¹Edñ%•—±½¥óïÞŒoê,媣©‚@DfØÖB1¹оñ_Œ6®@…˜þ_$P àØÑR­¿Lo\F¢KÅE•RÄŽÂé ÙÁ$yêŽcÐíÉó¿1çxZ3ôê?Ñ( +´¶'íÑ"ük>ÁÀ]¾÷ê«•h ø&#ÇÐ €À8€Ù)íéßu~w —Ù­ø"ú<ÆR +-(GJ¬‰ tÙÞ¾Ÿáëп=l$Õ´,•úôóïs×ÌßÿüÇné|s û=“@˜½ó@ˆ¶÷{̾„ˆ„€¨^€óÄ`n­5Ðná?114ÿSňØç—ݺQ|€ðë—Ý«`(WCýe·nÓQ»ÿ2º"¢+@š >€ÿïü¿WžÞ§¸!€œèã‡@tÖ˜Ûè +po€×Þ<‹ ¢ôšÈü8 +ªÉ$°÷ÔÙè +ð ò>+ìÆŒÌº”só¥ €–wOW¿.FRŠ3…ŽpÎ +°Cp -ÐÞËâ ,õI€ñ}ºñ?àŸo7þ›|E?ŸzoóSwÀÉð¯1FØZɧ A­Ê[­×›ÓÓ„Õø/¥E¡ó ¾¶‚ÔŽLÈ{b}“XÁ Þä ¸âkèñ¼BäPP1¯Iï NÐ>Ÿ¿±IäÞÚ¦ø(â#)ô%®¥sï¢`‹Ë‹Ê†}È QAåК¨…V9o •åóÙ\³Ù¨WGåãˆ,»“!G™€gç)o-¼ùÇÏÑù7­Àî%A€qw üøfví¶„wsÍj˸—ŒÝÂ\ã¨|ÞÕá<£÷?ììÌÌìŒ z'²Éɱ +ÀH_u²&ÿ ï»“S?ù©ðY J†òÿEêÕÜH+ÏžE]?ÜZ} ;ûˆóßSæN—Ͷ²™Ta¾ ¡Æ,4a@ÎÆsñ´&oÚþXøÏ8Ž=ZÊr3‡°‰FÎ úCØ`­j³»QJ©Ÿ35Õš`¢ŸÁpÞ `fîxЇÍZ@=új'ˆÏ _àÍXÑχ„È¥ž>ªB&ˆœ°ÄXÙÑ +@3ÿ, +¢¹¬½ÒeΩhÀ"g˜Ä³Ž H#$á~¹R¸/L´`b"Í?9 f̨õ_Ê?±hx¿Ç®^Eîßým+Â|ZØx ï÷O€ÝyùÿšÎŸ @€>ÿ…¼|Þ¤üJ¨l ÅPð4 +ÀÍ›¤¶ß±  +€Œ£1€dâ48ènà!ˆuÖ­_´ÁŸOØ÷ +À3Ùãb´xÜÒ7¸¶cÞ$ðx›èxÀºŒ¸}@Þ@Šëß+ïÝUø:LJ|y ’w€6újÒ–­Ê‘… +”Ààࡃ²€[ÒtHEæ‹@]ü»È]1iÆ'+ű§©Ò”¬-˜€ÿmÐ%t€äSþðÁÚ~2Z9„ëµ ½‚§çæçç¦çèè® eiý.ÝîÓHè—oÏKC‡yoˆ(hÿŠÞ%‹ò#ˆ13Ðë5Qïø„ ÑE)D-x×°Ïø/²Í&tC¯#éöë+ŽQ"/ª\¥Êø¾Ž‹.h‘k·Ê=ŸãýÏM7'ˆ¤ÁS-_{(ÿŸ¶‰ˆ6PÅ5€TЩ0ú·€9Ÿg²¤Cw¬µ! »“ÏÉÅŸg´;`¾•e¿É³|õ“٥߱'ןm±ú{Òf ÷äd/,è' "pq¤¦O­,N¶äã¿+èÍ–”·Ž: 'Ï6²á¡zÖÒÔ˜û°©­V¦Ë(2Ï?œQš¹Öt“‚pKòK>ñ“|uõŽòšùd¡5×Üh}"àoý~a&_à° "̦(ÙÂêB«Uo-)ÏÖRKÅô¿·0;ewŸPÄ‹c4Ci”úËuÎâ´&ÃæÙïWgîÌ.ÜYÍsŒ,û°5®‚ÜÉupÑ…ÉóÕ|c©%ØO%j궬æ3³«Oo¼oÛà&\MK\kM˜–J$ØôÁ¾t¸ðæÉÈ1/¹+Àt^Ìu´È¢k4À¸È.€‰e¬ïµâhÄ8O"®Àþ´æf€CC£¢ÄbUØÊC¥¡ zä?nMÿL"PwZomn™øïµ}àÿo™ +@4ô"8À>ö2Ê?ø/ì?Ow{©€À?üÒ=u+W¯Ý¸ /H + Žê`põòûþ˜U€Ž]gháP®ëü‚Ü pír; p›….øo»ý]« ä¾·Ç[˜¾×  4 MTki »€}íd;9gÚÜ¢€¾ìžCþÍ#€Û“ƒtx0ö™´‰/Ø'ü× +eгu-¿;ŠëÛ¬Dq + €d~ú)ªŽ„Ú{ɪ ì÷RŸ7£Oþ.ª ÈjAŒðèŸ`H6OÉ &ïáýå¹!ÚÓ1Ý© UßüôüÝünT±ßÅ#—ÞÚøÚ…—qý·6×gö,Îiîœ,Þ°¥·Èæ–Î×±ÖòÝ\0­Pö„óAnˆkžãúËËG@> BÙYÎùûp݃L.‹²[\œ37˜“MgÓ"µú¨\œêÝ@la˜Q s À§Ü @€„ÿT´)@Âÿâö?«Ù“í¶z}t¼:>^¥[Ö×êÕáQŒÿ¶¶ßÖ‹÷ëõÓÓõcáŽj‹1ö«££ãuά—õ‡y;PfØ}zwbÀ†Ø¯i£:\© û¼úøðkœÁ$#ì†X9s©jýõו«V‡«*›ŠR#*‘r°[eœÖó¡½t®PWþDsªN©7&êÍ×´]ã¦WÁ˜Ôâ¼\.«Œýt;#$ê-û\…9™è†p¥¸TµþZuÜãýëàÛUíÑݘЅ”-wdxœž¥¸úÓB½ íÀ®½r!søãÚˆöè€R¶OO à_ô(ÜGp?VÚ'è Ç#SÍÚ +@{fðTÜ ï­¤ËøB‘ɧ7À€}zW«e×ÿS€B†01½¸Üâÿén‹*¿ùEýÃéßQ3ýoáì1¡å.ü·ýíkç @s ¨ÄßmrïƒÐ#0øïV¿D¸uíj(fvúQn\Óú«&‚iBB¸0Øïg ï÷˜;8wåÆÍB0þ;N€nÎýˆŠmè¡èˆQ¾ý K$û^øz{ Àÿ×[ÏðûdGà PÆs¬:q2Æï5èèïTx$ô 'AµÝlVØK½÷9™€\ ¸ÅPNìÅ=ÇÓç4ôÿŽPW B¨n (üGp›˜4&×¢þú²2V¸‚÷%Àø:ëæþ¶‚t)_¶{äÁÂÿGnçõ’; +£·ü3 <·ƒŽoqÿ\ˆ/´å€PºÅ–³C¦ß]ÑqËËÔl¹¾ž*u@”gøq½aä·“·LHo +ÀYöö©UPæ:ì:ƒM]}mÕÁåb¦«€üt]I cÚ¡÷Q Óͦ¨Œ bth¨Ú\\!ªiÓÚ¾Hð/·û·kÑ`g0ÀÄdº§vþÛî¿ìy@zmvLH)"PoÐcQ½.TÎÖµÚœ'8H¬Ë[Îç'HV§æžµ‰FsàY*•úûûߨTjT³ËFk®Êußé·«t¤ 8†Í ¿ÏeÓºHS¾¸Ûÿ«¤>1÷ºÊ§ÍišÔ›ÚÙ˜˜“w.˜V±"@/ +2'Ö„Ð5ý é,›æ Aèáj•O÷–Kð•¾ò¯Õˆ‚4_¯/6çšõÚ¸ÊÑ #¸€ Ò˜;]WA&”³RÎqBc>Ï)îž®káz'Ü5˜ +MÔÆÓUæ€y‰#ÀS9ÄAg‚ÿ­ÅXÆvOäiÊ %«…àlu'n+q÷Z:BA Å©ú>K-@ô0TFæ³ Š ‰£T*õæÜ\szzZ-ôo“Í‹ÇK@|{ŸÉx¹×ä’Ÿ?qH¯<½tQ€½œï÷54ö?wYþ?r@[¸}ëû°…Óû×ë‚éëíwã÷ì Á>A€”Þ—70h+ç‰ ð÷ÈO¶rßÛãíI +*W?Üø8vö¯N1õ@ªŸ±ð«å•ó¤Á¼-Üþ …c‹*€žnÀ×@òJ»}€q‚Ö‰¸ƒ kœÌiTøOOœ:Ô@9B”›>P‚,˜¸~€ë@\ ?…5úû˜> 0žd—þþ' +þGÀ—D|&°ÜšÜÔⓜà‡¬1ÀÀ¹‘CynMZäÏÍÏÉ—ˆ…àTR¨u#¶a×õòÍ×î÷·¶¬oE5öŠ2àœ ±P¼õÀMŠÈGùAHÅùZŠ:ˆ"PKŒslƒ*ýu%ßTî÷ïC/دœ-¸2@ٯхG4² Bà.JÀœ8}ÞVÊ£Qǹxw“®‡Â²|îCMÑÀÚøï€ðÏ,!ÿ³+‰mt |é“O–Z*AžÍ üZ«õ¹Öݛڙ¯ÂNòL7‹íæ*rkuuuia£®y~g)«U*.ô?É@A³„W4t‚NʳÑáºò†ü]Ê”¯÷1Ÿk®Šëe—¼¹úÉÇ­¥…üΪ’4)Huz5§óˆlYWâ¼–2oª ³MI>³¤‚´Z÷\…;*ÍÂB¶ºôÉÂìÒR‹qî螸IÚ4&k¥ÞJõΕwüã!±Ùj5oðçÊô“%]V¿]IDTæ† â¬‹„¦Äo>ÿVxuņßXmƒpì×ìa—öàù‹:‚ ¡°ŒÓ€GŒL‚BdÀ' h%ÎñIaQ¸lÌgαçê Xg"'„~ ÜŸÎh0¤ÿrd˜™(ä Ó²&ž$î8Z«Â"«5‘@àQo4Í¡v[¼ÜÇn„`à7ô›sEºz65µ5ÞrAâ7Ðã°LyE‡€”#ÙÅF¥×ýΉ¸¢3 [nùçê*ÁýäâRæÙpî"iC×!µ®+J‘‹Oe©Ç~Lÿ…Fh/ÚÊ&lõzúô¼xÛPê¼ðï€Ô ³$#ò0‘ð…Ü +@Gƒh*†²JÀ¼ ÁÓ®ôI +çh“ /iRø¿Ö¨á“ •Ø•E‹ê–gªzÚ® •ûé/±€¯O( A öx¹×®¹ +@Ÿ§ˆ ö_æ‘Y +ce·nÿø 5 À1€¡Ð°^”Ú üv¡».K#€'€äðï1Æ8KµC¡\‡|põúM÷¬ëvàùÎ',qÛ­„rßÛcíqÀUíBBÐ÷–~²·¨0ö«t¼ƒ» þ“¼Íäûk+€’p Ÿt€wF½v;×>®k;ÀY×Ö2MÛàß"€]~öË(†Ëú—:Oôø?.¾Àsnü×òuLbÁ6fô·=Ýp@¡„Hؾ +1€B¶Ïîm¬9 °äoo­ÌÕË¥¾{úõ^•ÿŸÍÍ-ÎÍ·å/ËÁv°0t–“ï˜`¾Bd@×Ü@;Üwó½û¤AñÇ›§?QÁ¿z°-f@ÂûâÀøææÍÉ[÷·0ôØç ÊÓÚæƒ¤Ð\YÓÉ©h°NàZMq +³¹;𡵵U(„E}ææ§çh H5pm‚ºðÅuú° }çòƒÜûôS÷ØVÀ3ßÖt›ã¶sÿŸþ÷#îÊ—09/áúSSùh¼k +cv: ƒStýoß~ÔöFUN9HÛ¨` ÚÝýÝ1¿¡µtCŒ¸Çnr3ÌúbÆâ8ºÀÌT£Å‰*FNŸ¾ìMÍfÃÂÞFó’Û#F§À©”b¬DPþÔQ +B˜½[ AˆÐ)eQAÜ?õ·zé@V©‘'éü ÷t@;‘ +"6™œÊóaà^Îþ%wˆ¬‚ÐbJë“$~ +sóýPÓÀÔôÉ;íÈÇ~vÒøÙ±ýÈD3á?1Ú>ì‘úÒ×ÂyÑV"¶`—)Vc>­­˜KÖúÀQPú—+0C¾ü{Qð_ÿCCåò@_OoÏ‹=ÄvúzõA6p‚Tãì1ªý÷Nׯ‹œØ©°öD€º~"¨ï‡Ü²@W€ïŸO +ÀÙü¦y(Wˆ(BBxÒh@ôú³wBü‘«Ú +±FúŽ@ÉÞ§ +àš¼ÿ[*Ýã¬ÈøfB¹ïí±öX`£ÞxIL~€ô‰ÞÞ®3^¿€8‘ÿåËÿ?žÆÀÙw €ñ==Uö…`46`CÙÈóÙí«ÛÕ?n~tÕÇÿŠ8CÇOªÈ(¡÷§J€Ä: +€—¾¨,ÊÈÅÙýT Á: +!k‰ €¾7Ý _·˜°Ö#õéŸ½Ä @rÿçæsGð㽃°B}áïvt +ðÔ&‚y`Ü~ë!:?R¿¼ùÀj±­!мðp_4€½‚oçGFV¶YÑ}xî”%ð¿-† 2hN× +ü‚늑8RÙ:„Z"€9±LóÓY³) ŸÆÐiF ´­ác¿Y À/?‡€ÿ îæÖžÉv»,ý)fï,ñϳ¬U­;¼ß ØÍÌÿ´AK>›`Oó¼ +ÒÊSnŒ;Z¢à‘‘š„Œx µHüô)°}_D`skE_Zß§»ÄÊlߺÿO6òëµ xÀi}»òš”žÀý÷ ¨,´|·¸ÌsU,× œB\…•zs}Uå' p~~®É˜2ÍééFc¢97çØ,ážäV€î° »ñ?ÝçfÏŠÿ{[Äc¬1õ^6%‡—Í)AáõÜaB8crÒŽH,æÃò–å +3uö³åe¿‹Ó?F‡ÿ±"pö˜ûœhHeEYkÞª;,”URÊíŸÊã"ÃYQ5ÁŒ®ÿX'¹LèÂg1ÑÁ?ü€½®4ˆccþ¨‘¨eµþÊ`UdcªâlV«®ñ`£Ã¥®‚Üá’`¾¨€YJ§ _oBb㤾» ©¬À`¦bÅë^Á¶0<9÷€_¬|¬xg‰ž# }+)­ö‰Ch¯rJa.ÈS™3DH%‰«tbøY «Ÿhxóý„ù†áó2XfmÔë5†è¸0Z¹Ù¯¡ýìÚ5ø®/Mò®ßH­ô¾ã½WÇ)ÂZÌcH +À?¤ž€âÓnúÏœ¿ríVt”jdôä÷ëFý® àÕsïÓM€€ë×ñ¢ïÿœ@Ć@~«"×! ò Ÿ_ /ä/2þ^øZ{²˜Žp’စ©½íú Ô€ˆž€½AòðÙm´à¸¬–|½À‰ã/ÓÙ``¾q`½ÀýÀ>Àföˆ0G„÷éüóäšÑÀÃÀFtºÓ˜«àûÆD1ãêúžz: AQ" Í@1@4üt7ˆ@tã\sz´&æ¯wCm¢Ië·ë#öO¾´ | pÝÞµ+Ž9¹p×ýùmm?d±û‡íÝ+¼ríÐ)ð’ Ó77µË¯véÉ@ìúƒmíå,z „p@n?Ô‡\¶èxÊݽ h…2 0ÚAE„ËECئ( FL@u´ ȦçóEO…µ–W7þði!ìT|OÍ‚Ä ÷­FK7¾cYÑ/è/ÈcUuóN4ñ¾­Î +„g,ÿ <deÔ=‚³©‹•£à DM{aï¦eÖnÒt½¡ó&œs’­Ö?ÄÏèXh<õž +’ oÙ%¢ ÅìI¥ –#\¦áTïoÓÉÁ E èX`¬Ö[ÅË,•FD”®"S‚f^ML¤æ‚(Ÿl… Ñ˜¦ ú“šîÌ´ ¢ù$êÈ×L!Þ˜6ý‚Ý€ªÖ §±™„CµŒ(œNxöà¾qW«lµcÈ@SäDzƒ¶¦¢€Ò;T _›•Ä×áËb—y%éµbrÁ(>e[Z”Àÿ 5}j/GAùÒ@¿9À@ ½ ‚tÒþfù}—ýÿØûŸß¸®<Ë¥Cåk†J4C“d¥.eFº Z6[ *†J–£ÍD(I3Jf74åsë»Ï‰2‚¤dgu5 ï9q~î³Ï>‡ŒXë»öwï­c¡ðƒ·à¥@ÿNK +Uà¥ÐV>š<ùÚ_lU>úè£umO s}”€yë䯗.]…Ћ¡kNZX¾¸D]¸î€Ø„„ü2Ôþpúݹàòµ+1=Wvµ>´•%È– +À±ãmù«`ÍÞ +€ð5cG È¡ø6¥¦ÿ­ïrØS¾of‡F…Ž€g§< +ïL’r·Éˆi”¬Ô¯GÀ.°pÈw ns2ÀV‡æž½€\ö¢2Q"íÂecpa$ÓUl8{í UÊ…­0€déž}ÌWYŠˆL<›N‰–*½¦—Ê¥£è»n£ñ©Vr¹ÌØÀJDÚúÔxK¨RþsWXHižN5~!*od±Q£hÍéæZz®±‘ZiÙqš<LdÊ ¤ å5i ð&æòÓúEüoðÖ +€Ñ—Íl,€6¾³ÄÈŠ©CpQ mR¸Æ·êc:£$dF]„Skáë"£Äj +C;Û UÃtUd ãµV‹6+ÓzÔg¤PúÛ÷ 5ÐÃz+—“þ‡ïO‡À4èiî.3øE^À`Ø›£'cüŸ¥S'_Ëbâ¦@}P€Ž:€ü™Y¦ß>]ÁÉWVWà2½$@ Jà™~LBçÿËkxýW´ÒD쀞+»Úà·Ý2 :†ð·O<^(ücñOe @)€r»óÆlÌeË„ÂÚ"ëà€zÔ èŽŽ1ÈñÍÁiAj’êøÑ—÷{Ü@« ÆtL^€7ËPYÿWn0*þ1¤Ì" Ê ì1n™ÊÇ.”€›%ÀØÑþ3ü—þ±,tº€ß}ååzšO迲º²¾ºR+ëÇQ€VÖ××ÿDÑÑ~?aª_ŽN=¼¶b°˜3‚`Fô}ðà‰Ph:ßAÎøPTÐü† á‹7èzP€»žò£ + ¼?ÑíDðò:ÞÀz„J¥cTè{f)”VÜ@k*h‹@,àõõÕ…Ú,ÒÑ 6cÎV¿s+Þè@ÔØÒkæú?µà·m‚K†øk +vsósA­Û7ßm4[‹‹FÜEw»ŸŸL¾?{BÎ÷›ïþêfsí†À¸Z&ÐÚ? °U™k)Z轉¾®Ã‘f~¶VÛ¬Tóó8òºOä7Qñï*€–½i€ãØð2 wQN7U:þµ“.ˆÖyžŽr°ž3þÏÞ[ÃïÑ @±\É +“ +Òxu‚ºÜ¹¹¶øÁd¤Ñ|÷ÓVS/Ê‚¾^ˆk>ln*°ã$L±“úîH·):'ô ÆTb瀰¯`Å=®ÜuO€– Œþa‘™u*dª«l.Hܵ{¹ÍÒ•î P[Ù*)*saà -w˜lrïË %$ pV‹i÷Q€##ÃE×”Àº îíþËvPˆðµ{4ø?`/›áø©}7}séÒe?–n°UXZú°øcdÚË.r‹r€C—ûºÇq +´F´1°àÿŠð^Žÿ/YÉégPî¹õµànûdŒÎ¥wúQ*^þ§t°“Øëmc;k`PõzÌûÊL7ÐS u>¨ 6€ûîX>’r\öòK(qQÒ’¥+q®¨ÊšËdn4ž€j€¸+Ì$%öm 0v³-  Cèd„µýñ»o¿y@Àz^Ö «^ÛõÕÖB}úàÀüOWš« ˃ç,0EMw”Ýí; 0p+‡\Ðl÷<ßh6Wí%ðÝl +¯µæÚZó„…­E€#Õ)á­üa~3âýjï •e«uccþÝz«I“>ú››n¶V+ÂÖw熰Ñ×[7é’h­yãÆ&]ü•Îkֿ̯tù§ ÍÿBÍÖ§*ˆ +£Ef–áÝuns¡2R(•넺ñd½#à¶w 1r¿ ^P ¤Ò÷ø‰ëåužJ~pþî· X ã½£Òߨ ÕÜz'Ÿ}rÓ€;bh +¡†}¢ +ˆûc¦RV¡|•9AT‘úp^¾é-: TžwÜ-Pke•!…© ð -lnÞ½ÿ»¯¿@+™h ²äþ?5+•ƺ¦7J§O3,{m¶þîi÷§û¿ûïé©ßæ>ûù!{ãÒéÓoðÓ}Zו´óc§8=Q¢×–±‘±áá±±×Ç2Ó•ºúô§ÇÞ{C¿1¡KßÐ!•„<´ûñé±Ò£ §)ȼ{ݧàÊkÝá" +]¢DJ¬+ÙÉ +öîé¿R9I˜ +±í#C¯éŽ~2•H©U@å5æü¥`vvþ4ýSÓ?þ÷5ç­Œã¼ñ†2#­>;™ÀÌÖ¡>°Òˆš€56 °ì€ÐÞ`Ë /|MÄÀq÷Âr€8ŽÈ„»á`;ç”+º^»(:¨ôN‘`[y@"]¾êmd¨«“àÉ·‰L´¤\…C*õ›UÒBa„f˜hútÿk÷_ÿtÑu´cKe¹ýYèŸÜÿ7Xü€Áí¶'À?Ìûaø[͸Ýe!\n+§&'Íä÷ŸºpñÒ•—ÆG_Ód #©`iéÄ÷ÛŒÁ~zLË'£ƒ_+ÝLôÂàãL 5¢5€\PÿÆ^eÍÖUfŽ xe9¡Üsëk}@ÒÓ3@˜xT¾7~´Tÿ0Fý ¶©+¯ÚF ¾6gGÁýÔY°›k àÇ̸ýฉˆÒq<ø…2§\:i³´ÏšÞ"´€SPu )Y0l@é0#`Oyì©@Ÿ„Ha  + +Ð1tÐE’ÿ/T¤»œêHa¢2»0/hÜxê`ªž +YC°âÁÔâ ðëayæDø°CÍG©ç’‡wtîŽ+é…ôºT`­T·-ú£$¾½Ýü+ïûÊöhª~äqO§óls@3×’% rJ~G¡â0Ä\_õØA J”F1 Kð/øöݯ¾îŽHèu…`ÁžÖÒ‹ï°ÖæææÚÍ/åýÏŸžoÐÓ~£¹Þ²¿»ÖÜœW«ÍVë^³V·=_ë^©/¬|*Wø<Ãýép½\ž*MÔ«u:p•Õõ›þÞzHêóó§ktÝ»y`±Õú’~{ìܯ7‰<$QëËÍÖÚÚæf³Õü÷ïÎ7>m®«0ºÌ>vë§³öÆ[wê³ÍO›+M“•ú:×ê¼>ä¡.ñÝÕLœÖÔ 4® 8W¯W^WéÎÖ‰ôŸ©+ù] +¢kÎ7ZŸS¤ :^¼ùåÍf«QA +Q†+tCìQˆ[ÍÚBKd­ÕÚœ¯ÏÓccvvö§}>³uúî˼e£Ž»Liå‰ÃZÅžÓhÍFA˜¸m$v^)G¡°ÇH À×rÊwÔ®sDÈКsQŒ,)âVi±Õâ K3OiÅsY8hG¿¯éQ@öC~–þ ` +äÿ2Uývým%: öðR¢Œá¸Ý}»M$ ­dA€ÿgQ>¡£~9ßÑ€!5íöBȪý鈎>ê'ÐJ±—}tÊ9]û¥Ø„Hàäèk¯™@Nüg U‡À¨‚ËW®:À.¿ ô§@‹_>'»ÚÀÑž–üi®þsŽ\ < òó£ÿ+àXþ>‡°¿)aÀ?ˆ +®ÊýNÃ%C8n¨?ñvÔ0æËg7ûÖEÚ2+ > __HÏÉèH†2é © €+þuà†´;²¡€Ñð@åó­(‚ÊcG ç¿‹ÿa`Wüãy0€ßÞÝè ˆäþþõÆ4£„Í2ðú:‚ÊW¦   çß àmü§…¼áÀáÖ!9ô°.»ds¹ôøæw¾r^:í¬êþƒ;xýäï‹´mTGC€Lð!Û‡Ü)ùüÎ\‹$ à”/¸£ÂXÁ =ÉÆêõë« U‘DÈ ðÇÖ7ÿá«Ô ”)Á?øß¥xôýŸš¤ßa‹ ÿ—_þÓoÿþ÷ó5hs±Ñl‰4×Ç¿ÙlÖ~Û\kÌ‚ÑóÑy/€¼ÂþùæÚ ‘¥Ÿ›©N™i”êj-ó0פuáÚùÅÅEq›w\»{“¨‚µÅ5zØ[l0š°öM4ŸÏ +òO*ÈÝzí¶ +r^ù²ÙZT9Ön~ÝhüCsÿ4UìëºhRª+[º²¥‚,:—ÍMBö 0³hQ ðùÜÜÜ¢ ¼4T][Tqg¦ªTîS: +ÂSGAçÏSùÿÛ¿ÿ§úòË»ïÖy#çÏ7[›5ݦuãÆ?Ì7¾\4Wàæã'ôù¬ÀÃwלÔGØ,< ‚©ñ‰ÉAh%H[Fsá®3éêÃ÷&€Á€”Èørß„¬µ™û(¤ÐÌ›íÅãVš³–62éˆ8D®ƒC/ ¶-‡öird¿ÝCã×»gLˆþ}Œ@C€hùï:"Ä*⓽ìbÛñoO¹Ž?zfÏð·€½Ì +ÀI·¸¸ìv{Âh7 h‡D £$ÀßjNÙÖNžúèrR`K'_; +€û×ýiHA2€½íjZ/?'»Úmä¶Íò§mxçŽÀÿ~ò]ˆ¡ô¢¿@ˆ$Wƒq'ª*»—‰ˆ=/Cã— ÌçUŽƒuÚþGd€ã•¡³O1`~X’"¥ ÔwEðmŽ¥€v€ÌqfŠÀ¯›» 0úØúôb˜á+S¾{ôí×b@àÌ„¡¶;·nÝÞX©•†'ªÊ3 ¯\dw÷ñƒ«ÜÆ'üOº‘_›rð»Jb‘¦í]D Rq V@ë7Ò•J# —ŽqPPeÏÅœÑD§Cd þ§Š |”nDuæ<)̓;ÜÀ ¸€žåþ» +€ƒbˆàÕÕÆ +U:å~“@XôlÀo,€_%f`ôÇxóZ>½é¥—Öžˆb[ûÍonþÝßÿÓo›ýiν_?'\l?oÞ¬Oß\lÐ“ÕØø¸Øåi5W¯N)–ë#òÿù)÷/ó{øØt,07w~eìßÏ*k×õ µ.#¨nîã +€ÔÄ"ª ÿ÷ÿts¾¦Ôï£Pazsñ«úüWk*] Ú\¢÷x¢9gêæÿ´Olž†$ÌÊñ×4³(—Ÿ2*q³úúDu®:ó“©©™™:-‰j5ÐåJ ëíÀoDåøûß~Yîè(Ý¢f +óÝÅÖç3n/`sAúˆh06X‚Ü6}û  ¨ TÍ ºrÊ»à3®3yàÅkê bÌ tÌ×{#sÖ5÷Q¸˜{8•?½-Î’S[H‡"Ÿ<ÿ_{XDt.ÃÚ'ÿßÝ óÝþ.7þÓL¦€¶‰"1ðƒw ¶M»*Éa{Và³kòϾQ`aþ"1ãIÐÚ +@0†ìmí¾Š»§¥“'/|tYž< +U(¤‘C4 `gÿiúÏË¿H›1«<#$$”{n}màeùûs6ÊÊB°£lôäë ÿ!W€ûû_z™ÿªðn`4ð\¥Í/öô¬åŸ'"0¤ë@l÷ “ έ­˜(;ÂÑOL2@À?‡]kAׂ¾PWqCR®¢ !@”Ib<÷k[Ü=– 0úš±?¦ “dÀTHy Àÿñ߉üãwV~×:û½u}¥:121]›G'`|?4ºë7Ø‚ØFaÐXH.j ž‰4”ƒz;è0ƒÀ„Û·u)qœ.üoq Ž?‡Å+HN‚Û-‘ó-Èœ´"‘û'R.p­ãÞ*Я璻ϖÀõëë4wp÷F·…A +mòýƒl@}ûm§Ð_ø ~ëùàiìÜVè-.þG€/ÿéËÚ»þ«Ôëç€vÛf½Òl:¢OP{ξ½ñŸ†€Ú2ìjËQuÕá>#»@ÇèK”½[›­Òé<`ñ? +CérÐg¸œÌt†¾…¼7ów¿û§› ¬rœÓqBï±V½z}C‹È BC;äÊ¡¹Äº¸FσÕê¬ +¢#$œ›»YªUÎWËÕ©©*C¨ç» b:B)õFþñ·­Óóºmÿy+­Ú|ógUÆ"v¶µœ’ô0ºÎ3T³Ìa¥¾}6ˆÊŒ¥±®>[bsÿ[6°Ïýæœ& ï 0.aŽœ} —ð‹:â{bi•¯»,]ÙÑ î Œ\ +¡ Z8[×ô +ƒ[—¯hr@áŠì¯˜TÊZ¢îGàÄÈH1F–ÁÊ¡l7Ãý–)SÜ0¿Øþ•ŽžfÜî²KY €°›èh=¹åtØ¡€ÿy @_ ó»&9ùŒH*û2q€«y#HDÆE:PT:8@Þ—@¬(‹íâåKŸ€]m€ð8aæ–9ùÓ£G‘úq”q¦3ðòÐþÀúýøîüc½ttHðiÝ`ltÒ{¥ 10 aç\e0€\ôÊàx®Ð's÷ "ø€’[¾I-`|A0]¦ÓæäHŸ„ܲ§Q\,’ëit'Æ+ÖDÕþ¾f‚V××7®¯_wÀÛJc½ÕüÕú¯Ö?·À`€] +@j`@ï6½äôîŸÁ2µMèwþ?üææ¯×þþKf£þ~c¿L ®YÀ£îõ:}ûRz5÷9ø_¯ÏT§Êå3å‘Jø×Çø_Ÿk§ÅViåÝz“†~s,®-~ÀÞ:7òõLdí7¿ö›¿[kÖf?e¼ÍyAkµÍºñŸn]¤¸Ò, ¨†÷ud¾Äø‚”Âá¸D½U?ý^©zŽ£SS³£,2·WÄ´«‚üÝÚo¾\kžÖqË$í‚4¦çgÍ?ò+úŽw‚jã¤ÑÈ”µ!:ÇWoÓlÙ´m@'9ÿ"ûÞ±'ï±è€*€¸9y­»Æ”c>Çt.ŠŠû¾(ÝÍë-–RPÈ4åËVää Qà!û¨éïgŒéƒ@ `‰Ø~p]kMQ F #ŠPgu=­¯ðñä‰ÀÎø§'ÀÉîyéãLøÄ +@ÖÀø¨€«—&Ç_û‹Œ€º€Tða߀‹—/^þù¶I/Œ;WŠ~ù£IjÆ?ºt úqò$Ðï@­ßŒ~” `ÿbñèÝ–Pî¹õµ9ü9ìçsW ÀÜimà(9ÒüO¥:®„¬ZHÞ¾kß­+䇶*òÓcØ?ã?·=ºßáVåU¥‹`èHvm%l‘+U|‡;ì'¸@7Ò‹¡t0Sw œð? ß?áÿ^c¼h›á?‚ÿS@p÷Ë^€˜¿[ µ’¼ÈŸ +%å 9QtbC€jä&á­ †æ‡âÕ`´|l€oÛ»(ú¸òý–°Xg¡œPVhqðŠÛÊÓ¸.¶ ¾€H¯C¸öÆx²G·¿¥M}Èœ¹!b¾V> }åã³ìQÍgƒÌÉí–ðŸV×Wé +xv65Ûý)qek͵õ4à·ðPí€ ñbS@zóÏb šÚ&t[l®ýýo~½&0à 0»í?Ö¬•’»M¯·öÉ…{¾À>ünðP®ŽUò®ÿR[`éââÝÒææ»Í5] ÖŠÈëÖÌ­¹<¡è9”ˆ_ÿÝoÖ~Ýú’xÃÀݼ Úé[YAÎÕ«ºZ×e/_<ßT¶õÓz®þdö'\c¤ÿ`mìn£Düß”&ªd‚´±ÜJ„˜ÈÚÍÿج4> y_ Ú©Tÿ- ÐAò\ˆ)[íœeÝSt×#€ÓAQ+0Ÿ…÷â‚Øòñl¥'™×†[h…ç­â6NG2òcÿrYž ŒÖ‰‘¦½ìc¾Ê=FÉâ§ô5»€KÚŸ ¿N=úòWž.O þ3PÀ?“(ÂÈ0} 3@q¤D Ýn·Ç /€¾  óH@K&Qö;€è ðäøIÇ\½ta о—]\Öôñ–I®º@>€\ÓxW?P h8>¾1NN-€¶(A/K(÷ÜúÚ®ï¶9yÞÄÐ_Á¾ûÐÚ„Æ‚ÿ—ð¥á®}ÍVM8ß(:.¿@PÞfm$üýqG°÷Hþø˜ÀQw4èÑpòÁÿÜLè ÐùÁLà Ü&ðýe3!Œ2€èXFIÙ†~Ä*F_ËÀŸ‰9³@ªœ àÏ2À·_ÆÎ Æ„—·EŠÃåêl}eU@‡n]g4@m1ãSƒìq’ ²Z¼rö É€1 -ä%Ó;T¸»¾Þøäã•“\iu^9¦O~ÊÙF 0%Ì@'Í>t”¤Ü‰¬uç£βÂ(Â*€'¥ÐIßX)àFÿZuz¢21a·GÓ¯ZÍÖ:­å!îàÿ,üß™ÄKOЧ1C\§ÉŸîÞüÍoDækŒv‹}þ¹¯)pZî6þ¶À\•Àº*åâƒãuÆÚ¨VŠåFU¿æÿ3ÕúÏØó&µf‹u`qí|èîαM`"k¿¾ùëµß¬Ý­Í6Il&’Êј¸1cÇßL„+ž0SŸ!C2‰ú€ù‰OÏ'౉”êÜœ¸ÊõÀ CV§¦(ƒÍYa¡|ù›µ› ¬'¶R¡"˜Îú¢¸óvèf +€½æä)c|ý8Ðê…Ó°¸¯m'ÒqÁ)h+¼Íå@2–1€€oÂäûqž\4›ø¾>“)$ðyß‹…7¶™B5@zrxQ‡( %ÀÚ1®‰àñ<ö_+ PÖÿ¿ƒûåØÿe¥RùË@Wÿ;¶jÜ ‚¶X þÓ=Qž+´àgÚË>À˜¯©-d +|ö/Y€st\ìâäknø8 Y àŽ +ÀÅK?ïž–Å–Æ ø»JC>…å%eï>‰±—"püMQ€pÿËÂÿ„õ=-¡Üsëk½›Úõ–Ù©G@€v†0$€—i råygÛ`ª!õè±—- Ã>ÆG€® ÀAvãµs4`Ý5eîí&@²~(„DðEõ•ÇŽé +åȨ£pÚ\¾€¨Ôɨ `.º¯H€±“‚Š2 ˜Ê$(@¦x4ÀßoQ¨Ç®ÓñÏBµTœ˜­¯®__¿¾±n°Ž ,N¯Ç ¶²tœH/ä ÈFbƒ´1ø–°Z—(?W¿é: “W´àYíK‰Ø3˜;S²Ü¸~]iTŒ”Äå x'¹+õuv7nµœƒŠÅ>7”‘›(V"ë«Y!ä›úÿJàA + )¥÷šµx6ðÇ8µMèf`míËóõwõ§yŸÞõÛ +À, +€•ñ²–ØsN +ÀT`ñ¯ÿq  ¥]!~£i s¼Ûài€‚üæ +ÀûIXKiÔNo¤‚ˆZÓ\bÿôIDAT$ 1€¤¤¼º€ÙÙª‡Äþz-SÐÎÎÁ ò‚˜:جüZ¹ù¹€s®ÈXü<+H¥¢¿a$Ô%?ƒÔç~¶ÍöýY8Þ1iÃøX ¢ÚzÓ€¬À;ÞôF’ìÓ–œm¨™°fÎÆ@^H R³E~ºŽ.K'lkß÷IérëØÌìt{ +B–1E4!År‰ÜÈ/Ð)þêZzeü·ª/ÿ?—ö«Ó‚rú* þ•¤¤”²aÁ¿.k(EwÛMp߉ýž’p"†6ä»7@~ùØÙf!ûgà϶c®¸èºwëã'Ë"á¢ÇÀy @¦ øá¶ÉqYñ:>4cXzSà +@;Êð#‚ Np広»"T (ƒ›!~&ü§€p¿,¡Üsëk»td€ºqÀ]ÿ>ÐIÁf’",O¥A`KÉ„¾†ÐŒ¼üòÐÑcÐažƒØcçzŠJ›n-"Á™ñ‰»9smf@T(åÛ©ë‚  œÈˆïWðOU…Å Êàœ‡~àýóÙK @¢À¿)€Ñ)ªÿÁò~î¸âVR̹5VjÓe:YY]ßX§<øï! Ý𘠪S °ñUx+ô¨uD—ÕBdØûÞñ9c6vý6ƒ p$B§¼'Þ¼I¥rÐÕb ôÜgø÷ –⺅ˆÒ×YR ë·[ºoœÕ!òPA8O‰nS °²P§áÌQµú¹ýÿ_¹ +à÷D“"0ÀF`œ‹w€§0C\§áïæ +@u‘ªwÙçîv)Z]”Û€wº/¨+·ùnéæf­¹–+ÊbW%ˆÜBø;€µ/kµ¦@wNeɘH³1[¹Yí­Ôgêmàg[€+X£•€3(UÃ\ŒJ¶K8çPºÿ% P©L§J_Dh£KÒ=Í ¼p¼N@ 'ôO¸ œ§mHõ~¬âÉX‚«ZËùÎY*¶¨ˆgM&ßOŸ”KTšô:Å ‘owâ“-»-ΪÐ/б6ÓÄœaI·üø Fðr¢\œx ü/’º­Ñ tA¢Ì]“04P¿cÊ<¶¨€ü÷dÐa—¬ü2/µï¸ß££ Ƴü!QzU&Dÿûj1‘­“ €ŠÇœ}(î¥Ëôö¿tYðç³D ªÀ5´†“ºýd¦¸Ã€Ohø‹Ž¿>–Pî¹õµ¾ƒáœÛëæ +"º;i× 1¸5 ¨ X›ÈûrË•¦`“ë/ôÙõ +¹ë1äEØ¡ïš+/èV,ðh€Q‘Ûk@]9Šs6³ˆÂä +€NòO-ÀK™à1 þ³f'Æøxb£€€¨0þ‹üá‘웯þ±«]¥Øjîtº:»°J œ{˧›ÜÕõ&Ýå G™76ÖY7½£×! +BYÀw,'!æô××[:Ài%²–TBL:0›`C§$8# :‡”ÖK`^y€ç:À…:¶±~ËøïÔ¾® gp‘t—æ*G›©€«×[:‚L  ôP zÜz}>‚ìÿ¯[øêëo:: Ào2o¸sZìÕã:,S~½öåbýÝU½»yÀàpG @ e—PîT^œìÅÅt @+ ær¡¬­ýݯ·(v¼QÞ{)\ê‚Ø…Oÿv)3màƒ¿¾žÇœí_o ‹Ð І"  •ŠãIè"@жMò‚ñº=imœÔGÈ)0$stÉ p™mŸæ3€^œÑ /·NÊFÄÜ)cÅd@ûi'WòE˜6¹‰&¯âÓÓ”†ìE=4Q + +©ëÉd[ @OŽw—ШŸÝ1 L@[ø °Këþ»¥[Äqù›k‹ +Àö€ÿø››(Ä ¸."JҪ߈àÿ>1d¡:„ði—"þ3€v)º\ôÄň7Ò¡¼­À~·HDˆVI68gÄïžÀ@om ¢Ð2íê@à®`2Vž‚ñ´=Y'`GhA×+‘2 ·û­T¹ ¾ ô‡:8–™ ÙÁˆXJ‹l½Ý8Hè­˜\$l{ €“G­·% ¯;`ïï¾ÜxŠ@Šÿÿ_x± r³¤ÿ áB€Ã/횬,/H¿q6pß v·Xªþ¿€ DþøòÇËâ¿ì !œ’c~á’úMÿRÚïP²f€ û3¿¿m?¿xÑsç¤y ¹¿­ˆŒ¾&®á‘Pùø?õÑ¥«Ÿ]»ª¢íŠÿÏ À®Ö‡t(èéÇÒ €è&/» ¯Û’&Ì@(Wé €ˆ +ø£®†O8K €9݈í;&€¾‡S·¿2l²¤úúIqѰ¯‹“¾RÔ"ð]·Í€Ð÷@l†RÒ£:I±(Žû’;X`Pš0kÔÆøÿµñŸÑ¿õp€®ó€ž2T¿‘‰iw,ßytlÌ¯Š @V¢S2'X]mB}DðÛPbCÀp»>³Ò\MX_o²Ð Öøæ¾Ê—ëq6Ak]Ƭ…°|eEHNšDtDwò®Š“ #ýs=eˆÒR,ßAÙ,¨œ B—@ —…í3³ð¹(€[<ú6ðŸ÷–€m +€Þ8³_½7ölq–)k´x·Ùx?b²ïN@pçV}€3Õ‘í1ýÁy+Ó +ÀyVä +@2+®خȬœÝA0ÀúÅ|ÐŽ @"YAòGÒž[ˆü‡¤ÐüYAPÀ%ôEÛ}±ä1t“,ð™ÿ•$#Ûèê]v콇麶åEf ='ÍòÒûš€OžQt˜œ9ÁEX»@vC[×N2£Ð„4ÄM4‘¹¨P.QÞ@ÜVÉ +ú†3OC€‘þ剈ýO†À ÅšŠt\(þa„ŠaºÑà– ‡?óü³)ÀähüÄá¬m +ГdU“â—–?‰ ‡¤È!JøSt|jé?-¼4þZ/ @†ÿ=l+ø§‰f€Û€hði2K.ÃG'^¥àeßvK(÷ÜúZ?ÀñtÉÕ>zLé¥LpÀ~á¬X<àÕ¤uÀÑc©•?ðSÃîE:ÒV´Zh7ÔZG­ÀEpÉ +¨Ó7è`28ʸûÐ9¤ƒà„¼ wЮ-Rë Tø¤P 0$A©t{`o +€ÇØÏ”0…Z[€ï¾¥€®*€ôÕ÷ð¬¥JuVPiþÊMžŸ_Xh¬¬xä| XËpHÖhл>ƒ ¯Ú¥z›ë+ ä N¾"¬ DVJ8itF7ò±X"s˜MYsa¥™.¬Ìs+m5ÍÀsQÝ_; Ž4•†›‘«ŠÃVQ Ê7«fÝ´1bÖ›«ó ó €ø?ƒÆPè¨È@D¦—ló{¿ÂÓ˜!®Ó€ä¶pÞ=ð€»Y@g À¹ÚN +À™òXG ÀLRþ ;@Ž4л¸é@+€z¥µM€èÈL=rJûÛchŽ ëjð“8&sA¶(¿îP‘µ%Š„çê³) =Éý7`fŽ÷‹v¼…š ýL™AT+>š8ï=Ã+é#{IèŽp†0‚C`€レ9ûò¼€„Ëá°ã§§‚Ø8×Û8%Ò…N·ÑÅs© º$T±|f\ùíV‘›ÿ +þeøþ™ +X¨[±íz~w\ËZÎvL?¯ í{˜ôãÿ +@|VP€žö¸Ë|YÞ½0øcÁº˜„;øìŠ @tÃC Zî¤lóýmöÿ»>±œÄÛ@?Ý +€Š-Èg°ƒ%”{n}­_ €q°yÀ˜™Ð±?Wà”Z¡Ð©®abmÀx/|Ò1CqÂøPâ&QÖg +€`½KpÀGéìo+þ»w[¤Ë€—HîR¸’ÿåv€9pÿ'JíeŒþ–ð_Ë R€-Ç¢-|óu")Ð]yÈôgtpÁ8ξ±wÞq³õÙyA°€u¾ÁŒ]˜oPw>?»òSké &ó+ó\¬Ð™6t-‰•ÊDB®÷ÊB]É@hÎ7” 1Ož:F>¾èR`‹[8Sîî…’^(>?™ÄåJ8¯»yC—êì|¡Îô bÔ\߸®'kø2$ [ËÍdŒÄ`€&†ÿ @¯Ù {ïÙài, «Ã2 bš÷S ¸ ônm€ÃÛ[xg‹p–k>hœo·ÀOo43i<¡ˆ€¿ÿõ¯ÓºÛ»Àf½fo¾­D‰dÊ©£¿_ À +Àù:ÇCøÀ{lU°¶ +1‹}€­ø/øû„ˆ‡¢@@ÚØlœÔǸk ¤úÄ䀨´àC#Àm|ï€xÇx“Â@á²µàk}<åÇÁ}Ãwwž“e ¦l»—q\%P.š¼Ð*žH™hÉœÆà|¤Q^ƒ[¦¡ ¨¯$èЗJ–öµSÒá ÷õ¨/ßAüììül}G@ßÙùŸn›æçñÔ{[RR€~ðPÒÎV3øƒý1±)Щœº0‰ÿM+€M^{í$ +xÝ@SÀ¾þ?  ûeÞøù…ÑqªÔ÷|Ò£þÐÞ`|<º"΀Ë(šž+ßßú(x¬¦‚ÚLÿ—{ßVè‹Oàïü—Û +€vº0ßCe +KW€¶&G£ÚÀ‡â¾&1B‰Èœn +À3€£žD<‚*`° ñ‘ ÚÒZ7ˆ»êÚ¨0ùû5ð­d&¾‹;Y ¿7À%Y¨•Ktøí×QÀ/»-῾H@ ¬"^—Ÿ>?+GW ú.‚áyýÌ/ÔåRk³^uä`][ ZÌ +QIñSÎÍÏ +‚!8Ú 0Xìi…m(¡RêG†4\£îîk|œvÓOî¨Ç,[N¾ÀïŽÎ.Ô)ÁBC?PñKEAœg•£îR­Ff³ M‡ @8½à:›ýÙY @ô kÇ&`«ð,ruþîö€6Ø{ ÀÔ––) +ým +@Ê/ªnnöŠ˜=½]H¨ÝnàE¿€ŽVg§º€=ÄPŽZÄ”¼}„¼î@€ø"{2°)Iz#eLæ´¯æ›É’Œ¸Nxú" eb'ì")˜Ù‚.ÏÍ{í€}/ê8îÔdeÍnÕÇ"VèÙŽ'çÚ ÿ¾SØ7ðŠŽt|ö‰ 'ü·“O·¿Ñ)ÐD¥¿Rƒb¯®ê‹Ç +Y­‰¨/ÏF|]¶Zrù·Øòò•åÿt"Êo 6{€Oçù1y΀ ÆÞSãrúO]t7h;(½T,¼Åü_¾š+/œRÞ:véÚ†ðí/Doĺåå+Ÿy4à_ô»ËGŸŠ)ÁÜsëg½pPjPZæH©ÿ”—_vU>¨«sô 0_Aÿ¨°ÛnãðªƒšÓ ãcË&Àšõùt¤!UµŒŸªÿÃ"K™qB8ª²¤j}Ç!ŽÉùŸ×ód•)‰·ìUˆ)?«ÿYø +À½»¹ÑŽ08Ê„öåéZÕ_z*à…­³Œþé†ÂÕª~•'=˯BþééÚ¬®aSëÅ댾ª³eÑBÌþl­Êe‚cRë3íƒJ2«l•i‘ ªìc$ÐY9…Ë:ã{èŒü”تù.³5^“øÆ oZc “ô ³<™~Åš+‘µž4³„ÿ¹ð7HøßUÀköâ±ß ×6¡[ð[¤€¬ + G À¹=ÅÌÈóܧV1À¿¶¸OÀ¶-oðëµ>­6k[[d Àñ.a߀v+NqÌ{[*‹€í1*D»DD ¹cþ þ_äö 怴ï Ó•J‚GR}b ú¸·µám­êH– [äñ@k;däå2–lDölE €Ž¤¦6n—¥aö§§‘æàu\@I(Œ"Sò'×Yš. âùk¥Ï+ƒ…ÂAúö‹†å‰é‰¢<ÿ‰]ü?RžZ8jàÖ×7nk¦¡ ­i{Yxû½,«H°¯_Ù€„úÂò`²n b¬ˆÐ À¨%l+vRú˜Gø ³ËË—/NŽç +€ÎÑ Þ¿ŠA5ć— X@ÛnãØ©7Ç•¥¦sÏ­Ÿ 8Â~ËüøRïƒòŸÄŠðßU8ÿŒÈsø‡D)E§ hêâÿd±@kËØ"Ìp–„E÷áøà$bËœ‚¼ÈN["tJçcr2.ˆÊn§Ä!&äTq&¾³7J”®mþE¡Â³Ì‡® < k˜Ð”ºªVþg +1€y@R2øoã?ïý-P.·\øM´Èúëd=cÚîrw?Å®€. Ý@sm‘U[0rk¥”QЯ'Àí +@”H¦œÒÖ`[ À ¿Ê¶}ò×Á@¬øŒwF»4säà ¬sÚ‹n ÜÓYA«@øà+ úê}T‘ëz#½AÒפ É5ÖÙ)ï+±®I'ˆÐ22}ù„ðõ‘0@8rxAEÍ'ën}zÙh1zøŸ¢€ +UíV¡ÈkÎc€}€Ô€ws` k°%€Vß7à¯Áå@T¼Wp‰Ñô|¸\ÔqDhîgé:p.Ìž9àÇl¼Ë22ö9b^¤æžkñ½Óåxá¾éò… ‘‰Yûv«Ùp4A(®ÚK1ÊZ‡Hå{…Y´¥8‚eé•&ݪÅI +Í…ÚNØòñ£, Yû½™Ä´oˆï²¿uþúëêQùÚðU/LÌÒù×êz‹Y€Û×éóöÆ=€÷²Ìçïž‚lWú´| Àè -•Ë5!í–:‚ÐU¯@º[ø(¹äOÿ€F'ß=éaÿ–—„ê„ÿèx“[&ðáŽT +¾ÌþRN>Wv·ž1@..õ@ÿ:Ú¡À +€0˜ +ýW¹Î=W,ä +>÷GÈ9@¦J+_@;'€îq<~åã#³ee®þ±ý(I¸ÿ2÷ ® plˆîˆ ˜$cgá›ZP!:£ö3Z¦òø ¶G@¨%@²%”J@·@ À#€Ífså|cEŸfò— ¶ò£+*ØkµŠœfJ#…!ýì¸#0Ì£‰ ïé*„~Â!ô +¥«¶2È ì+1 ¶>®DÙ(ã°døÕ8Ezƒ<Aû‰ÒŸ+ƒpêe¸÷‰”œóóY~É(•õÐ /ªÄ³³þO— ¨ŠL ”ËQs0=ðß +ÀƒoºÇÀûŒ›^³_û³ÁÇ;)»÷Ð' Ø- Ëég=cðõ“sˆ§mÈ–í²niÉQ`6Îd ÃjåÜâºHvAy᮳ðž^—ê¸×§ÄNåt^F†2®½9!€@E<™­:ë±PB&à +<;]D %"A£íû— ÏáJ*àª+Ç ]Þ¾±Š‘3€ü`zFDÝ%Ì .v³@!¡&€ +  + gÄæ +Àæ +ÀùóçW„‹ÉÜðG®#ƒÌ: P ).0"/ýÅý0„ÀÊðªß +€Ëaý–ØïOÒ;?+&Úcü×ÀPî~l'@” §Ê}¾v“qd' +ou)A0Nèƒ\¬ßîá¢c~å§"5ôtX­ÍÏÏãLË[‚€L1à¿@Þ 7ª^®_3ö=8@àdfVäx‡ð½bÞ¡ +`k €€Ô€²Ø9 ªZÿÐ{,€~ +@Ö f¨ÉöQòõ…Ž€—PI&ô4Nz'ë4îf¹–æ÷ à@exL±H;€ª÷ÒXT‰s¹Î¤Ëe>ïtùõQ(ßÎ%õb òЬ­p¼ÉPGÄ3öt€€ÈJŸHÍ”÷%¡ÝeP +R1zX$PnÁA\ˆ8IÏ•ÇD¥`wÉóÝ7à®ýùûë…Æ÷׿ÂD9„ÿ«ëî¶sãúád¨Ž>†§¾}2_n~·þƒô2_%Ð÷`<xr¸´üK€OR€c›éÒµK§þbôäItR ÿý€tZ–d¦ ÃgïR>þp2‹/@0þ§J€7s°¼´äH?† ÄÝ'³Èï¹°WëÛ -4¥|-ïàû€Rá§àø?pÀð©C&iÚÞç +€ÀWi™£p ?X>ûÑ£é˜Ïe1é +@ª° m‚·*t|<¤ ñ„qÇdF)„ÿ"@b"É䬇vº=+ÖÚfü× f™PøÀh(7PVVÄšã{ý:ñ=«óÕâ0!sÓÓ0€yïåV8p(€Vr¼8ÀvÀðͪ¬™¡¼ÅR‰J(ÞÄpÿ™G:r`•¸„ðŸÐróSWì¨øA+¼Jë€Ùú,ÁÓzªŸºG€õ[·òŸ´Vkƒù ‚¿ú&ë¨+ j ™þ?›ns  ‹Øu,€cºÇ°õ¸·€Ô +`[?*KÏ.uA:e»%¤ôdÿxà)Û@ÑâŒÌØ޹aÌ„v:°Žcò©}<&Y$ó³`Zþ²ïªý@çÔ +(MŸìR糧rTÛq+Ï7ÎÄRé´æ_7®Ó 9ò:C¥ç;ä2°CÑ’Q†HâÕ¦4dÝ©pÄ/£3 åSz&Ê•˘2_(wý+z¡P®Î»›Îu}K6Ö¯·Ü…¶m³ŸVo·+(¾A~®ôàу0 úLd ;Àµ ±øâ)ǾvòÔGw€\h[:•Y:š<ÐÚ°±ÝœŽ_c4à«Y À© @Ú +€ýÿ›^Ùÿ๰WëGÂ?–ðѦ¡&2@$@X âó€?&2Ð5À±—Ý´f”×]`DŠ[d +@0ý^n\ö>y²s/»þiaÖ€ì¯#ûÍAN÷X@&š]”þ¡½Anà,Ü*Šõ +@š2§,Zc X€Lxp× +À§(«{ÉÞÿÖêôÈ›¾‰‰r¸þj0T8€•áµK —ä¾ã¦~ ôÑìµûàw@¶>Büì—‡_e’):R: ¶CÒE:0aàßM`­ã¯’û@v´@(—åßè'íÎ{÷ïÜO~ï ¿æÖ·Ý +àÑwî üßÂL°xÅ~Ùàÿ3²€„”a[ ½€Ýú¨”¶·ˆž;ÇØ) Æhm‹p+€bà14¯¬;À 2ú´Xh<Å´ôá„„€4`«)Ò³ øÇâ2ç’_éÒÖ¡Õ“:e‘.§q2H™hŠÍ6cvAäVÇSð…}t¤l¼¿oßÁ¤Ð?@‚œ|.eÑÀ±ì)x’t}¶›3!7]¯$&ßkÇРo¹iËT$nEÌeA_f÷ì¨ç/Ž7˜ î¯ ü3¾Æê­¤ý{(îžö4 +€×±Úb¾Ê F€ À>I +@"r¶ÀK´ÓEøˆKºh@€|:ÜivFmpÛË7•k^ Y ouá² ­õÈý*Ä8 +Àßš@ÆOêâñˆ8‰’ yS\@ŸsÏ­ŸõWÀcA¨ÿ…ÂÍPŽÓœŽžù­ì×ZkôæJÛ n ÷:b|8aü vY¹!HÁ‰Ñ<`§ ë "º@…É)€öðø±H§2œxfá,¸gft >•P€—²êý”+•Ú«;ša<êÀ€‹E›tÄÜü•~Õ±óÍÉ?xpïÎú¬S®»øÀwý‘é + ­ÿûŰblq¶½HÇ•¼Žß™ò@èÀ,¢l2ðÔ +À0™ñ(n VS®Tª ë·úO?x|?Yëæ æMZD è¿Mü—÷ŸUè&Ý +ÀžÆè×À™Î~ÎF €{Œ~ö°ãX;+ikK+€YêÄ Ð\òpÒ2¶Y€U†Ë0°tÜ'}^@ºpNà™Î{?íy[¸ëŒb/á¿>@)×:i|² µ 'ÀtTûÂ]2úF†.ƒÐ×AŒ(Ê—Ó$p™ÀÝýèp‚íŽVÖ½—Œ|ô4]1dM..Kzt¸@i¼%ú1´oh_áų`x·n%SÔ&õƒƒºAqz¾¹ºÒôx]ëÍ šÈËüß¹uûÖ^f´ïa}V=8€/:GÛ‚§mȶ°¼¼äÀÑר¦ï Iò÷Â~›tD{@ÛÈŸäú‹WBÐã0ñ&î@пt!µCèTt½†|6 ý:ˆ0þf‚¹çÖÏè@0¼ýc”>ÚKü#¼t`®@ \Gø +èu¾máv§[0ð–­Q‡íu*øýÊ6"ûÆ @²#$`€¤o›8pŠÜÒ¦Òë Ù= áË*¯ó~VðŒ +€ñ?y¤É?©BÈøïÿýŸÍ¾ýúëßÝ»»Ñ¢ €>Í•„ÿÞ¿÷P 8XºüB^ON< ÂVÀ@ïoáûǬó¥XPãîÇvÀgÏ® +Y©0^ÂâÄÞcô›æs>-§ç×oݾwçáýÇš’m¶64ÑÚ¸+` 3Pf2eøïòÿíþ{õÔPfÖ­|Ÿ±Þ©ôí €¾=·Áõ(ˆGì1@¯à^Gz´ˆ€ºÀ zQXöŬɘ–Žðÿ¯…g³Žw*$mÇä8”R¦…3I»ÞL16rÑ*»àÍoœOq$/•w9a€ ªš¢pîCŽ€Ä5ZÒߟ³ÈnÐG ÷‹›¤Ä=,’¸­° ƒ0gH €þç)£3Œ„¾‹ßÖ‹¤)ß ȯï¿Ê²!±„RÍÒg–»pC@€¬w;ÀÞ +À+ñãæß¹gS®ˆ|@.xt``FwÆâßg +@:°ÍN½iÙŸÙÝõ„Û~rôBž&S–>Ћ \85)»`&¢{~bðñÒäÉñ“2z'ˆ­X³'Ì=·~6 ´¢nùqiÛ9 N„ ä†Z;m`¸mC~8ÿwöÜ$)ú´Çˆ@Vð—'ªÜ`œ~’QšËÞ΀ÑãÇ»€(¬ˆKé??{@=°ï´^&¬ØÁy­) øGØ*„ðM èSùÿ -Þ,8¼·^ Ñ¿\ *Ï\“œt¹úàè^Ã4Îz¹øV[ðQÉeçWˆ–¥€¶°/öÇV©t¸Dw¥ÏpȧeéÃójCàþƒODx÷yb[››÷ÿÛ×ß~ÝY°ñ3 “²W®é™ ”Ìl›ðÌýl 0ZˆÄXk{Šøûßüš*€gè +ÔÝ +Àˆh¨ÔGçÀ‰>H%|âdnqÄ–&»»ºÀ:%Qç³/ÉÒzÑ #Aô1îr(Æ2¶HžàÓå¨ê﫳©ê=h.0 Õ _ÉMIç' Q  +Bº´Ìï»Õ ê[,2Ñ­™Û1Náb8¥Ÿ‰v€íùþúfkâ;‡|¶\_]YYw¿Ùnx}ý @€¾{ˆÙËr wø{yþ™Ùù÷¢+à—"ñ“ÿ¿EHSOЩÀäÿ÷%vþ ÏP³?~r²C`(€Ñ×NÒ ë ðÔÒ’K0™Wüg+º4S¼k6óó€ÝŒ*¯ã#üó&ÈyÀÿþ©±œÀqa·Pû=â€ãq£„“>”B⃺4ÌöerµìJ¦»ëqí9ñБL]2âûéøè±ã“ÞØDBÀÆO;ª2ABœo¬Õ1×D¸°fb4úVÄ>[+((3úNP0\ÙŒD?›-ùþçWš+Í'{øð9;fúUÈ<,î ¨‡Qüiao^Û`w@6WïÜs©!ûIàÇŸ& mE7þ›þéêí;·Þ{x/î'üo}q÷·¿ôˆž€·+zaÆ3€ÿïϺ€ïÐÝ ŽÁ¢'À=Çüúï~ýô1½Z|ª´U»¨É õü˜Â75 +æPåÃéhjKÎ'øæéPOí«<Ù”ÇÛ鹫>Ùå2_ÂíÒ=?·p¾QXfi+ˆÊ3 _Û,t›}Þ7ó‡‚h¿Cðñv©\Ïþô¶8ó‚€ý®Ú<ß|’ìñƒÇ﯊übÿD¹¼…x ñ- +€>[ƒwjºèV4—·³€B±­c`•º +ôѧV’cƒ ê©ù¬<½°rçÞý{>Ö's+}6ï|õõ·Ýú[ˆ· +¿‚øÕÇô¬fȵu+ßg,€{ì €Uï€í­vŒH  KP¶I°ûl÷S‚ó´e@Óµ‘*_dÊÅÉlrñ²Á:'ž³³Ч1F$£X¹V•Ã×;›”^Sà}¤ÏNø;ª2^Ø÷"™`€5P"'dÖI];&bOþ@®(ejxŒ.~-äào} )ÿ^Úï @ª¼Öƒ$s‰R¹|¹ð¿­Èx~œEBŠ-Á?³á)°*áÿÿùä Ø$ ¦„ÁÄ{×3@ d÷<·Ø+:B£j ô“ûÏqv¼ âghOÎ[fð?S&Þââgè0ª&&¦®oÈé@Gzt3€VëîÝÔ À?Èërÿ?)~Ù¼û´zK`)ÛªD?Ÿ»ê]ö1S]=ÊpÓ»ú°Ë¿S @ à˽Æ$üO­~–òJ1ºÀO¬Ii¥IqÜ;†·´ÅÌ üm‘„ë:cŒj:“-Û Tå@r¼é Ð8ì„ô²;å—Æ‘¦™ã<ÄÃP&/x©\t‚¥[(ãƒà9Ɉt|¸X‹€£™@žé.én¾`›¥šP"œ”)•s†Û'¡Yat0_ݨy5#ʯè˳ Tý¯6WÀÿfóúõæõ[ °qG$ —fn5+)0 ~'`ÿþt™,WPã;úâ—½‰~é”ðG ío7 ˜Î–±urüÂå¤èÆÂü¿ÿh™6ˆéz`àTСp½3`‰ÓϤ=¼-ŸÇìfÄ yl ñ„exæþÿÁÿ÷ dÿxO;‹‡/(u€p;G\,á­—¹‡-°B+!àÚ}vXŒ¿}bô¨èFâ Æp“ <ýqºûM1BqPÆÅP`º´ +`s» :J ÀÐ: žÁ;À¼LH±ƒ„þ1@Jð? HøÏX¾ùê«»_´äûÚ¤ OîßòðÞzmdü§!à„Ô¡md¸‡ Ží +€aš*€rép‡p˜¥…ËÎ&¶‡€h@¾O«Ä¯Z2±˜¨Î¯ß¾wÿæûéÉŸ<1øË¢ºÊ€_¤±¿3ÀïþÙ ?@iëV¾ÏXgÎtõ˜F¤'Àè üôcv  gO€Q"™rb%Ë[~ Ô^i Å!™áȇØõhKæNªÉ39x €À:¥q?œO™e+Α^ÈüJvSÓÂ×ê#8L×r+­bâ¨WÄç\pí£x“2F°?1YˆLôaf3 +B%AG €º +Û>@_ó€F,žHùú‰T@-™Q÷É–D1¹ÀZy" =öÿ£"Ž/ ͰÁ€;j¬z<À憣¡òÿû×l3{X^°3ò'³óoËͽ€S“—.}dÀÍ€·);XøèíelñÐìnFÿ‚ñEùAý “š!!o.]/‘ýçKK¡ `€8ýÄ'† e‚¹çÖÏìtÉæÀ¿‰€vg½¼äÞ€¬¸ýØqºÆÏ†0ë¨€ææ +€Î±éݰ ÙÓ–«¬ +˜{Ëqß“[ߥò® ,ñÁä¼ÇX„þ#((¡²u-‚oÙ6wKürRd!XÄH/wð +€Ñ(1€­ +€ ,cDøöë¯î~y‹1M ŸÐðÎjµ80X‘«\Èbƒ’½Ý1v#PÚ1ÂfÀ[Ëðå™u$œy]é_œ­ +@W+€m1©>á©c:è 6¨†(ë·oÝ{pïáÃO&ûbã‹úˆÜýoß<ú.À[Ë@(~±¼dY"1=›%¼Fw· g+€]bÞ©ôí 0µØm,€»Ûc÷0@Ú³Ð|…ð¸A/í¿¿Px…z„ê9x– +>:¤z÷àAæ¡CE¥:ø‚¼ç"ýí2”-V<¸O«/“âïî;¼“ÓA£#©„‚¾Bá°®:´¹¨ + ­/øÚÔt.>®Ÿ?tèàÁ80PPŠâ¯õʽÿŒ¥£í÷í+ê Še!2™ë†Å¢ÊáR’š‘]gTäÞìp¼Þ'VÀShN´ÀxíƒmÓq½å)½xDE;DeŠîÍêð ÜìPAeÔ3ëäAU/ä i=ðBQwÂx/d'üç“bqõ= Jà?Ð@¡T]Y]q8à:ÝèMÞo³¶$€ÜzTôŠàÓ¡¤Vˆñ鵯Ò$¯—ðÑÅ‹?ï9]4Zf³Œ­“'ßÌ7æÿÅèkã“b< î?¾´ü‹Ï W/1ö/yëcD€LGÝNá9ØÍˆÀíÌg²„Dz1Àÿ¤ :Ûî è%9ÿÿÂjí +v3 «# 6Èðßkß.@ªðîeîÇÿ@t8z\ŸP”htüÄÛ Q +@²à +î +0º#à÷HFÊÁ7•¥B¹>‚'±%€ZJã^&œØÁ >Z¤Ù0Õ®Èñß1ßY¸ÙþG@Âÿ'O?|xoõ]¹#¥R©<=â¶¶ €m+rÞ{(áµÛY×§­À dJÔÕ +äߢc`y¥VBÿ§Sü›×6eä®* €{<|’*?nÝlm´èà¿|õÕ×ßfcÿ3 ~õgoÝSú;<‹”Ø6àÙûèê 0õàžc,€=Ålk +ÒÜs @´ðõl Üå&ÜÅy}%ív$ìwÅKÉ´ +W|‹)ÿÌvÎnüL`¶Y~ÎÓÛ_øó},•£#Qº|ç»Ë²Üo>·l“÷‰i°%Ç|äðjû!ïúÞP³‡àÐ@еùU:†(„¿¾qû:òàý63fö°œl…ûžŠ€[[P&Ý­&'O] #@wÔV: @Rú†ôV4/-oQFOÑÀ1"Vÿ-Aˆ XøÏ×®Y0Ò‡üo" ,CðÁsÏ­Ÿ9À>o‚þàö·ø÷á?È``ÿËt¢ë€¨pgÀ&r¨Á]WìßZá/g»‹(g`Ï^· uq;@«¨æw¯N˜H +J?7¼“ ˆ¾L*™ÿ“2-è0nðO`0]!K/ÁË„;[` ((€*À*1€$„ð‡Gß~ý51xÿÔ¬$ |üíã÷o·ˆ`¼ßéêt¥\2 w[ïV:n å;[Øýý®€[ÛS&\Tö¥V¸B‹½Ål5]Ê Á(‚ÿvöƒâEBô^™m~ãñòŸ ý±„—Ý +À÷ àLÿž\þûH­¶Å,>ÝXƒ¶W4±’ÏùŠ·0AR€^'Ÿ£În†eàÿF§W¸lÀmŽÆJ—è"g¢µwhƒr‚#]$8»<|±æ½iñ€£è¤õ¬t¯(‡0m©8äÌEÀ2^½ì¹æ¯¼Bé\›¶¨«(x^òˆ»8{¹ôYÂ,yKo‹Û (Iá•öáöcû`<¬^°NÇkÒ¾óg¥£/¼‚b°OÏÈãËûžøâéû\y`( Ì\𭝬6VVVÖåÿ ÿ ýöÓ@ŠúÛb÷ÛíÊòdw+€XÉz1€t‘l«ðÙ'(¨ðôÆþþ'Al€~€BèeÝ +–mÊ À•e9ö ù…¤L†àáÄ` :~íÚß:0à_P¯%è?š|ÿÑqžÇìfŽéàËkØk·idÝqªCÿüj-ÁW“¯1 áŸOî` ¬…ì\#uàŽä:–4 ©í˜ Õ]  +{;)@èî–Øàþg½*_?"y@{°=*6ƒ“­þCÈð?S~çVYÀ·É?yððÖjM?¶E¹?í:€nˆ>M+€®$ê=@G+€¤!õ“P|‹Ñ€§Q¶GÊz&ªnݹ÷ðáãÇš“ݺ±ñÅÆM:üÇßD3€Dx}¼Èx§¡„þ?;øÛ »[€ï3À;]=¦VYO€ßo,€~ +—º  +­\EÔÇD2 ‡ +‡>X8(X.jUûÃÅAåK–\TB®:G¦© S*‰—}Ÿ¸ÛŸq#@wÀû^t%Õd”tмDöâ¾òôüÊʼ8À*Ão¬o4©p-@t°ÍÀëÞÖGèivþm[€ÏR8ø?5Ü~ +€Ð?~ú¤ +€‹?­õÓF¬Ú SNN~Œ£O ØØ`â1 +d— X³¡ÞÑ¢6€ æž[?s  oè÷&°ì½€87@@¥€£Y `ÈøüÒ~¼ô—:œý£2Qú K ØÀ€‘ÿ†è3 ‹ìs:'QÞÑ ÐuÉT„c£ãos&Wtí1š +@ |ÏÌT"=ERd"Ä~>åí‚a^'”؃ ‡L€'»©²œ¸­Ü€[|u ?~òøá=÷0‚ €ë½Íví P[¿F8î1{ßëj!>Ø­í^ +À¶¢Éð©b¶Z„N—+Õ…Õ;÷îßüðÉÃT÷ñäÉÖÍÖÍ/ø{†x£%ÐŽô»mÃ?øÿC0€­ +¨ÛGØ1@¿ý]=êœA¨ÞŽ°Ë¿c?}ÇØ%>Ñ €?l_ÉL[[ P~Ÿú N±Œ%\ß‚Õ" Y™™‘–®Ò…Ö‡ŒÿÉC‰CI:Pòƒå @XÇå6ݘ{ù>‡DX´ÿH‡](ÿĦ…çéj,|z9øû +‡‡ +gt)ÜḞ‚œQA,䩊ƒƒºrß¾W^q½E\BØÇÍx% ¯ª Ú¡äÂkÑCꌋÃÝ…ý*ÅIÂ<$­Ä˜0Ê<€ÃA×å@œ +0T¬®Èÿ—­¬¬¬{< :ºuýúí[wúõØÛ¶+èÁvˆ ¿›ÉbÛ°*ŒÊ|L°èp΋„}€¸)ÔÇ@:Á7ØiÐû î’ZØN^d§Ï+BpyòdF +±#å©ÃG¦ŽDAâ ôs ƒeöÐFB½OÀ%å…è(O½¸Ãñ*X¦8œÓBoD;ƒÅ#‡EPT8Ý1LoU RV±oè…_ FaopFZ^xÑÁ ÅéÙ••qš€ý&â·zãÿxÝÛR?Y àø¿7€(üDö¨Èìøç +ÀÏ/¦*]ÎFìh^¢ D./½IŒÁÒϯ +棠œÒŒ}´Ì ™cpû…ùà=¸OÖâThs4ÁÜsëg(B>+ÿ|0x€€T ^2 +èyÜõêv¼qÿƒv·)6ùÿî (톟 ŽÃ4`(û»bÆ ÒçH¦Ð¼‡žs' (Ñ›J@6I`|bB +²È‚N6‚%B’˜Ã¾V" Ìë„;›Aˆ…¦ÌŒUÛ +ÀBØhE+ÀŽVODn­W‹CùÊ•Š|årúùí¶Nç=à6èj€ïxÞ€»ÛþñÙÛXÚå'žE™p`C­±~ëÞí àAšäÿ·nÞ´ðµR6pW@À æUû…û½/?·´°Ðø<<ïîV»Ät+2Üôè 0õ ,v‹è7@ïà^GR+2ѧøê@…ÑQ£ðéÕ:<+;|Xø¨-ÎèXµß^mn „eTÀ» ^úâ§žüX#‹–‰O>rfêLùÈVÚ=(ppþÅa„6–Ž<(œN;Ù ÿ£óÙ1¶´Íæ‘â°rœ”G» +Œ$؀н|æð‘#SSA«3g¦ü¦ÊlðtlŸðßM%„Õ´ žÃ7:H…ð$׬÷…é°jáÕ΂psrçB쿤ýšÝ +à-,Px1jŠÓõ•¿¦&€×[Z´ÖÍâo±ûívey2Uä A/.ê´Lø„ ÀñSîŸJø%9è'’°­”bèðÇîÅ‹†ðí&ðÉ'] +Àø’…þ¤àþç +±*1Â|8¥ñ"6¼íU‚¹çÖψHˆç.² -sÀàN-¹ ˜¤¢'Üu °— ë€þ´¶ãߥè*¥ŒLàƒ;OHŸÃ)™î +@h:!ü{’Þÿ°/»„¡ðxy!2 €`[¦mûi€€£0 •Ť*€þãýAðæŽ€p^ËÇObbtœÛ«³…b¡4Q™žž®–c½­£¸`Ï­:ûèh°‡~`ÊJ´`¯ +@O›˜˜®ÔDkèèö½{÷<È;|Œó¿ñE øí·À¿ðøß©d@zçV_¾Ÿ§[€gî z¦«'ÀÔ +€ÇØ[ @¿±š»öþïb&†VÑ€ƒÃÄŽÐÞ†® ˆU vÌÆINÊîÉ…‚_2Qƒ^`cùUY†»\*œÝ·6†:øÕLb6"K{º‰Óæá¡Wª©,:p$Šb¼xf¤@ :xè°ò¦C"T¨ØQåBQ(§‚LÉÿ?ƒ`¯]78T, Ö+ð³È^$ªOÅägaß>°^I¨ÊŒ/SL+Š Î” +R- O9£²‰oAzÇJI:åA„- ûïã+ŒþïEãÿ¾‘òüÂB°ŽÝÒ P !þ ´îeÝ +@ÿ½ÂÛ=oU&—.‡é”?¬p¢—@/@m “°$§¶D?@&W—/NžTÎrô @·^" "NÈ.2úg˜/KÙ€$œ{n}ŒV ù“ø/ì‡h™b,8Üþ[pS¼ðþítƒýV„¤]FÐ}¿†VßdgC[ް g59>*T?vlüíÄìÎSù'ÐV”à¸Ï(Köç¡܇ê4—åht`ü‡ìç +??…b‘bGkãPB&ÌXµÐ +à»o¿ùÝoïlþ*bVš+™üøþÃ;·Wk(ÅrY€(À„ùÝ&ºõÓ¡OnG €=}¶ŒÜž½ïuõSŽ ß¼¤p‚ã;*"½l¢,Ǹ"×xÑïÝü°Mn¶nµnܲðÍ#‘¤¶+P¡?Ü*½d¿ù¤¾|/Fÿ€1Û[tô\þcúްS @G+€¹]ñ¿4‘tÉôo¤Ð*/5á.ÑwåááºËœ ••Y üÀHªÀÿáþS¿¦Z5Еåb8<3uvJÀörRÀn77Ê €ìÕáW F{Q’lKø­tx +Â1J!+«JS-Ÿ!ô®LP^„f¦DdR.V)Êq¦,0u¤|¦œø BàÚ„Ädö 9z^ôPP"r;<ø–Þ" %¡d~# ’ÝÙ¡ƒÊ®c¾"«ÆŠ¸AMñcjð¤ C6*à>m d +ÀìÂÂÊŠ~V\Yô¯o¬¯ß"0A~·Ø÷²ÿW"™°ƒðR7ökÞ¢‚Qà—ÜÀ¸+ÞÒ½€¬ÀÓ(]ºúIŠ8Æ M¬,ƒ=º‡Àk×þvùÒªHþ†}/Fþiçy3€],¨Ç¶ÁÏG„ þÿI +À€Ð’‘ôB Ëý—…© +pá|wºÒÉä&üÇ€y ™»E €±:[ð½þûh.`ù¨5pî;ÌÒ€ÈBRôŸ~àe·ªŸ Sž&³Ô/ñP—@Òvo$€ØÍŒDLaR +(áV {ôèÑ7¿»÷7²€Os€Îñn­ÖF†ö˜Tk• Ÿ·Ý ³úá@<Ü€…jßÙ +F 3fw´@ûßÒ + «¤Èž& ¤³®~èœE¦+U}jÕëwèð ÃZ›7nnܸ™)ßå +€_Ÿá?Ià_þÜíjðÌct+©€¬'À=Æ|ï±ÒÉ6¤ÿ¡pZƆ¿ZâÏ¥™Ï‡©¼°Þ±ôB¨Ü&tcAöp¥-–gŠÃJxfjfÊЫcÎ'¿ÛVxKň"„EAäÊD}æpyj¸T¥¼$ЙªÂpp·\.Ÿ9#·¾Mkb# + yµ8¥”B¦Äå3Zµï[öŽ#ì•Btú÷¾`+²ìÅ‘'ïã°nyæˆòÓ]ôćËÃEå¬YŸÞÙ:íòÆoi(/"Ÿ„ ì{‘8ŠA‚}Ų(!PÃ!;s–7“\oQðúB m9\, ’’ @÷œŠàèƒÿŽúÀV Å)Á¹]ébdN5¾P\à[>S- Ï)•õÐ5¢º‚ž9rXNý@¡®‚PŠ#š4£èüÇ*y}x8Óxœç•ù @©DU¿¸Td9üZrß›•ž¾JÀãÔ A78R>ýDYâ·”F€Bú}TèMˆp8Årmvaaaea^@ Épòÿ[QÐà Ö=m2(ß¿§×ßiJžƒ¿çh œýì³k— ûFàÔŸv4Z>½Љüi àªèÚ‚ðh€\ˆPÀLˆa ÷ñ Ĺþqè¹°‹ Ãý&o ;€02ô‡ðR + ÔÝï@@!ùñJÃ,yã8÷íaÚ¢‚ÿ@P>>âcÇ0>ð_7×MÿaŸ%V@i)k\¡äùMm!±0”)æ-*õÊ¿×~r(¨ Q`>­c¾þo¿ý/›ŸG €Àƒd÷ïß¹}ku¾\’÷8=ûÓùúlE޶vÛ,pì‚þ8ï[b„Í€7i´„,.k­Ïέ¶ÆLè@R8Áñþ +€Š^V,¹@uv~åúÆí;¢÷ï?¸—l³Õú¢CHýt„& @–@˜€Ä:€g @¿ó½úˆž÷Ð,€æ^ÆÔàì`g†*öYÁ¦X–ÉeåêȈèXg3àsvxò3GóÉ¡'R@ý—$÷_.ù™3¥á)$€Ì„ÆòŠ‘ÖEˆºŒÄॗoQé¥ÿ5kèü;±].œ O@.0«ø®ÌŸ:Sª–¢# ª>G¬ÃÈðÿ—‹ô;¿Pµ…œâ3¸þÔ­X8QW+‹ ÌÓ*òânÁXÚvPúÙD±R™®M×jõ€ìÞ=j=l-Ú¸áf€_û-ÃZø?¡‰$ü·¥—ÎìÏ`] +À³÷ÐÝ + £'À`,€½Ä”+X,ûZy¸n°4æfö–=ý#ÉýÇ󮢀{9èøñzÖja°L@»ÓIÀY>;kÁ«Òèe ‹ ü¾Öt P8p[LåðÇJ›”„ÓV(t¦:¬5%L\P½ræzy„gfÈ䜱ª +CÓ¡ƒ/ ì+ƒ)‰Ì+HL¢²ÆHñœ¿%2LÀŒsî + ^ý}©‹À´ô» °`Jêȶ>R: ¬ò:t ääq¯,@ØO“ÆÀ†T¼tÐ'ÿ¬\Õ×Á3C¯¬¬Ó@jÐà ö=-W˜v1%ÌÏfs€. 0Ø›ÀìÉqÙÏ`€;)]@ ®’o/2PFÆQhíϹù( ,EOD—’@  Ñß “€þŽýçìbvÃ5 þY¶·{)@—:ÊðD Ïýxæt'ëî@Æ í•€~ù¥ý&Ç?†yõhöçº@·NMùYèâqðß•H+À¦¡»uR€ÜBxyÿ~šè¡<>K}6ìjFa}€Œ|ûÍW¿ÝÌb>mž ÃV×WfõãÍ÷v¾>=] Üí=[èà+ØÒ:Q¶c@ý´c°VQvg¿é'pzšŸ6‚šôSÖѯ雡lܽ÷»|4@ †”Åk¶Å‹ÿ쇊èÑ +@yäýØåß¹€~cìµØ› Wëmô³®åÁÿr½4R÷Ë"QñdeZLÕ¼rqðííÀêC_L”B)€ÿê™úÄoE‰ ‘`#ã1¾Ç«C™Ãž[Âx2:RœP^€Rñ°ø€ÝðäÚkž©CfÊ¥:²„/åNà-¥¥¼‚hÁùÐð wHÃôw¬iŸÊ ¡ì‡L I +@ª(á-œ©—*ÁR’éáÌuêܶZ/‰jFÏy¤p<@'âÇT€?0H€,1× ý-úkáÖ›ëë­pø·PßÓ>NA€f6ùFýìÒåK—;çKAÚ +€Ð÷ ÀNø)á+ +ÀøäS*4\ò Ýó)€ÏL®PðÚk£nÀ‘P–.€ÿn°téê߆p*b‚xeï_Ûó„sÏ­ …†½˜Ó6–À1ÓT_˜M€@Ðýw!”ж úYs[½)‡V®O`#·€< €Åß\éAþ, +ö ´“)ð€JkƒŒXè,P«ØC¡ø)ƒ˜+è“ a³'ª)·„ÿÀV;°S¸{÷‹¬€•fbñ×õ%ŸŸŸ¯U§ñ’ggk5¡È61rï½@G?O;@ 0t[`B4£Ÿ'¨ÿ¯Û°@h3 ùa³µðþ­Üýúë$ä +€Œ7™ è•7£ê=µxæ±ú÷c¤V;÷Ðo,€Åžýp© â€Y&Ylôžfg‡XB,#d2ퟩ&@ ›j”¨ êMxý8ÑLý\VÝQPºÒü¡ðGÃm@"ÙW…ÌTÓOUϘ˜€™DÓ…#ÕR£àcܘÃ[Ê%›ª‡ãQÊo)_e7£§VA`•RC·Ñ¦®¦lÁ5Œ¹ÜñHqªX<_E°÷O‚ªþ@z¤]T/•á£^-¢=ÀâcdgT (z¦Eþ+ëOpŽ‚ÀDXNMñÖüÀ±Ëãi9Õ&À?1ƒ"†ö£'À}…òôlmv^ÿr€Í¢GÀõÿJl·@ûm&øîP¨ØþØ]À”€+¡ ÃÓübGG_s@§à^€vˆ] G¾k¾¸ìVÄ,˱?:z!SÜêí ¶( |ÖêAíýóÑ¬Ó çž[0ÔÄ1§mCuFø2H +@`0­Ë" +ÌÝ2vt(cÁ¸K`9w +¿Ý +€MÆq!›OÝ €ôÜ9á¿’Ò +ðm]é3U_‰ÈÝ÷䙺m(Õ„€e > v³6Hø´•˜øÃ·<@Š  ¾[˜Ÿ­ÿÓ³Ó³?•ÿ? Êïd +@; O+Ždë#ÄÏÐd‹°­gQfï©è´®í7ésºZ«é§MüF äÊ€ÌnÜØˆ€È‚ÿy…f¶xØ_ºßþd[úøÜŽ·ì™cd¡Ð` kðÔc¨»PNwÝ͆EM´¢Ýú²º0ÀBÊæˆ¶¥R +)¬Vßҟװ;#Ø1Ø)ýè¿Íù®‚QÑ天\¯Œ4áØÌÙåN«¿5'Áã8{¦Z×]D”t¶”ÐiÄÿI*j$À;e0Gçf¦Î‚ðÈ7Äé/Wõ$Sb¾“Mk¢Òf½Tä Ä­D‡ŠÖÐgÑÀ …¢Ü|½¥h ë^¶wª¥ ùû3ºZ÷Lå¨N@¬Ø,ÏÔg¦¦fªggf`:À£Äo &¤7ØCh»ÿ²‘ß ýÿE“E—›¢Êëë«×W›Éçï¶Àû­&ô¾”)y à³)ŸüÍ% [àK€ðÀ××FOnU 0qã½1?€?3zóé¡Ð-©èR&ÇO"> ?8aéÒÕÏPþfù?žýë•l˜ +°—pî¹õ±~ +*~R'@f +ÌýïÈÞëR:Õn`Ëð_¦# u´@²Žf!Âu•Å£Ù\ÿàï…HUã©#@ú#j€G  ¿;Æ?„å=~Ÿ€ŽVY?IØc @Ÿ±Dv  i/6&âÈ„UÖ™ÖœAóOªg1ñzq,òdW^÷9¡øÌ\Àø^,Ëÿ8<5o˜š‚Dè “vªgß+- + ƒq/p ¤òÞJüDÉ·Ì \­Ö› Ee.ˆŽOÔõíx§Â!ùá ¿ +rnægÜp¦Z£„ÊnªÊÁ*Ы;N Ññ¾U˜¹©Š²RN T®Vu§¶ÕKdm + ‹(ˆƒGÊE1€^8tdªzΧ«•áé:º\EOPWÑKÔ™ùY‚ùºî‚Ö1U>[×Û¤”úóø¶²Ž ÀpöA} Ì C¨ÖÞ  ¾¼üõUùÿâ½Ìx¿Ý.Sð +À6»œ)×–“€ 'Ü]¸ëý Û€BH ð_˘/ЦŸ&ýóR‡pÀ1W¯Xxó¤.èæK—hèš !~D$¢Hú3 +7´f™pî¹õ±> + +€þ{äs#›ËÄÚý_Œ$¯‘¼kÿBZ}:ª¸A†ålå +@øü‚ò®ÁwÖ +Àç=!zDŽÿºxòít(¦ +ø¯< + ¿ˆ‡Ë‹ÖV2°Ÿ8íOÂ…],ÜP@ÉfŒü' —°ð-@˜Ã²dôüW†Ôæ-ÓNOWhRßÏ`å¼€ÐÜÊ÷i€­î~l'`ç±È%®ÐB·¦oS|Þiz,‹|¡ÿ¼é ä¦T®TÅl7Z·¬Üº{ïkb¶0€¬!€ð¿£Ü7üÿp–ZXè¨øÁúXK.ÿÎ1½Çp+€1€úDeâô§’Ê-£|’§iTo¶677ÉI{ÍFó|el¤æóõÍæç-»¾¸¶6wn±\0×(¨¨—#ïlf:>×ÏëMÁ³ÊÞªO4 d¸ÈëÑF³Õœ«Súz}ªR.5åñÏ€‘²Š^­lfsíæÍ›s‚V’/6šõÊpÉ…­66kM¿-‘¢¹¹æ"7›µªî,ö¤Ä‹sõóÍ&ºIDÏ©×ݪ©ðâ5gU9ݨª²¶n¶DÄ<ÿŒuñ†Œ”´‚6ψ¬ˆàPìskú3T'†Kz +rc.^ˆÞÈ_ŸãÉÅõ6µýßèØdÁËjèß§®;Cçæâ7&™þ‚d$`¤D¨LÔ 5V×WÖW¨  Y` ¸Þj + Àà¿` .s¡Xb dùëãr½©§# @À¯DQ €ö·×} ) ·+È—IÈ‚_{mô‚Žˆ\óȓĸ%€«B¸vù-ÿíçó ÔmÄN" + ­\½4ié߸φWý"(¢Ïcv·¾1úä +€þA¨ò¹Ý ðØ(cu*|è 0)Ý5vþ£aåmã.–[8z s8àIvn=”yÔl?Ï{lט*´Em]#ÐÔ¹÷ôleÆõ! +p¦8üÖ;BO]G={uÕ_…“5‹s†fÝ¥1ß(¼£=cña‹â;dÚlžo4ôçk¥Æ&¯ƒ +tß\F޵9F˜«+¡DFkbV‰4¼hÙÙêf¹Tc·þ)g|R Ìmí|ƒ¿X}Ž6š•±ZãýH£œÕß1wN÷ÖýÊÕb¡^?BgDâLJýgŒ‚¨{¥×û¢ü§k¨üyAΞ=[¯·Jzâ³JÀ=õg%`f&ýÈdf×ß6P(‰)OãИހþæE\°Ýð· +Àh¦Øù÷¢Ÿ¥«23Ð")‚Ý Æ»â§N½¹Eø0{‡—ß9þ‹d–ˆ€WÛ€¥‹W´ë€S''¡(ÜœŽ€þÖ +€‡°ëÏG;xþÐT@ó‰„sÏ­íQQ]e.ؤ¢>€ßdHîà. øàG3€ÄdºG@ù oŒŠ@„àÃ!åØÇÇ.è¥è*€òóuë¡Î€Ññ·ß¶rÐV@F|ãÉ:;)¦Uƒ.Vêô˜<_ë„ »X@ýѰ6ÀP±Û àÁ]†^ÿ|ÝŸô%^ÕW|^¿¶ò_¨˜¥A@ꥷÅ9Aqw À?€¼¢t9²'ÀóN@§ß*•&R´Ÿ¶äÛo]K„7ÎâÕÞ¼@#§UœØfëÆæÆæÆÆæÝßÑÀcXèVB]Ñ$3åâÝÿèýðcDO€©e±s @¿±úÅÿŸÞx¶±­6R¯ +Xçfô2K†rLnwvÒ³¹r°¶3G<äÑøpž‰ý#ø”Nl +àXý³Ú9;U=Sªn7Ê÷Fv¨òH}¦1÷³8ïd¥—-ü‡–ÈTÎFYPOQÙÕG©gª"Ós)ž Ìy/H9\]•ʰžŠ|8FJe¥lø –ÏÈs.Té‡àÐÁ¾ÊF܈á¿>Æz®zos¢‘Å0¨°šDªçKÕÆYÓ^±ìœãÜV€í£÷¿¶"€ŠÍÕÙùŸ.4ÄÀ~Œˆ½Õ:‡C= ƒ@€ÿnp''Üuõ0wÉÛ¡\b,€í2¡p€S@‡ÁÄò;ÁŸeRTò«—–ÜÅÐåe÷ +@ À8½„ ¤€O>»víÊ%·FˆÊŒË õ¨&Óƒ„sÏ­í]ÀßÇ—§³€ÔAXnôÇ@Ñ6Î +ôþ\׆Y†ÿa[cÆO¤m€Œi@ +•,î7OíÝ +@)à¿ D÷CZ%zbýß +@ äéh• ag3%ô·ð?ÒŠ­ÿ ð+Úâ_jn~žzº}}cýúê|E>µÛËÕÞ­í\gEöÖ + £ŒMlO1»)¥âŸkÖÉ VºµÎm[–+ª6DVV¡=××7ò®€Z›_t*˜¿ÆLà-çö§Àÿù—p,Ð-õýì!àYÆZ>•¹\¸é?ÑBîùX½J9 Æua¢ +îÈýʤnâôŒ:Ҩʳÿ§¦HÆõ=R.ŽTË´ÜÃÎTËS3?*ÞWŒÅxÓC´Á0ÒA‰8yÎÇêÕ±V•Gó”‹Œ®4Ð LC'f•&—›‰PZÊ7S¯¨|º8¢îc9Å-‚ø^~À¹ê˜1œÓ®Ÿ™yqÃÃry¸P>DŸE¢Ç—uެlåwªï¹A\RmTVòrP†x’þEôçÌ®ãadé7&3ùÿ[%1Žér…ñ@Þ¥*P~AÃU€…ÆJ)« Ã?žŒáÜ^²—À¾—%àÏí’2  ²=€€WFgDÿ£¯Ñc¿îÕ®È€Ž€­– ßÖÞ΀+"'¾6¾ôsv~iàMî£zœ`Z¸ + \ÿ¨0÷ ðü\ØÅú*¤¼ÿBû©uÝY/È70úÛö'Øt¹ºÃº:dS÷×3=¦Ì:@Ó1+û9EØ®8íä8UV\eáK‚$ ÃÒØÀò‡ +  (`Éàoû¿0AøŸ+_ýÕíTÒ€xé øÖjµXVÖªµYyU®cÝÕi¡°pXH+lnÁ\²]w0ØkÿÓŽð–·Øçën cgUÑ3Q±9¿¾q‹¾€;ºÞlÉÿÏb´@ @.üßm Œ·ý'€Y z&Ôín°{ @¯~~ˆ±vˆÐÝŸÒâb.dÑ(Õi €Z­#Àb‡pZÒžo~:S 2z(/Ò‚_ò™w´økû'ºŽ!èu§}Ãe@ $¶`*"¢mmž{OQ(e#tÊðÝXŽ,–³B‚¼?Ñõç” ,Z MÚú »äÊ9 +BIÎi¡ë‰ ‚@·P’±uVìàÌ€^Ž û +‡iÔϽôqKÄÌD:̈\Ù +C©Fó‡TBËÜ=~cºZ€n€ä@£ ™¾0´ÿ†–«+hgÛ-«YHUnʳêÃîç¦ .-/ÿgùÚ(µàWÕðã㣴m±îÞ€³€0ªî©òÏ€V:ZX8§8vT…9J«Äè È=¸ L!‰ZX0þ{t‚Q•=—&†ŽÒÐI°D ìjQ‚¤<0Çÿ.à=úÚ +Àz¦¤±€<`ˆüÕéáâþôluzz§€¼ +@ C9è½C+x Ì~ê±Ðñåà÷Q\™£¼ê5'¦åÏÔÄlÖ7Œý÷ï§ð µ)ÿ¿u“~€¾~ôí»€®€ôŠmñÞÓßà‡´j,!׸€ `O1}ÇèÙ`›Œ<•‰çp…ÿÕ1{ׂɟ£4š²€/Dì`Fß²À:öPÿï°æ†Ýâ¿Þ€ž\À:w1þ“£NOƒægíÛë´ïBÅ;/J©*%ñR!ôh€)¾vÜï=BeÑîÌ{gëLÔ”*á¼®Ön +DƒÿºÓœ&ž6¬62Ïd¢SÖ 00€êp¡üêAŽBáà‘©³º>½›e6Ä$šÊηäY¸E£Z?'àw›]§gÓ©øi⤶}rÊÆ:Π7×™!<­pi2\8~ !AúØ¥·L—>†d +À¸œuú8…/¼>‰@w=K—CøhéÃ.`©¯€¿Õ2@†@?@€PÆ¡ôLgÝ +À8 +~D8î5àÏ›ìl{RÌ ó€xŠü·my,@Ò u+Á²­0Ès;š€ È ÀèË€g¶øÄÝ DŒaB‰'óž“‘€.ÈÍøŸJ§‡éÜo€ZìMBH ƒÿ [¢ÿðí·_í€Ì’ððáýo­ÏVúëO¬7÷!‹‡òÚÆ¡qö<—Î”Ë‡Š‡õÌGªÅ€Óäšòz"3¿¼ð¶TKž4Ы£¦/ç£ JV)6uŽí()tX{Á6KeÑØ A¸ #jT¦ÏShJ‘L§”•^ûŒH€Å›¸ÙXKéô¸ÿ8ø"èÒŸŽÏœax`Ù!€‚D‹Rð¾<·¹ÆéŠV*^øKvÃüËP °—•ŒURc½8CD¦}L÷È“äïVvâãÀø‰ãG# ;N +ÍcV±N¼=Ž@ÂÊl‹ 2›Ðä0á?F€ ž”*?;‹„»(´•d@ @?¸·¹Ñ&O’=~òàá½õÚˆ<­Š+öå³»Ì^uô(­ß¯ðeßkþiǘР”…^1櫼ê9»/`˜Mãú{HŸ<üöIL›-Üÿ\ˆv€Ý͈HæwlÁåOGú)O~‚cí~„$¸ü;öÐg,}zÅDŸÒ6{sí󵻿ÐhÕJÍOÍzkm­¹¸¹Ø¸ÑúòË»¢(þ÷l4Öæê-‘Æy§qºT¥½œ^Ï\t›W=S—¿\nÖçÎÎÕi˜çùÕz£õ%¼Eåk-6´u¾¡,§«ïg®wýùR‹µ›Üª¥Eµ´"æUßl¶Äƒçš­›_nr™ŠÑœk´ææôµ‰ÆwRIÞ~½¾¢MQ©óÌéD­RiÜuËF½ºú"=ðUg­Mý!çÎ}ÐXkÌÝÐKÔºÕ(ÕæLzfêga ÍM­Z*ú9$üj‰v GUþWÏ5onº ‹Íæû͆Ò5ô¦êʪ٨‹èÖtYÈ~sqNR+U››PGÚ}Ô•¨~n^9ÇoÌn6TÕ®¸6Á°ÙÚ|¡ûPÁôvƒPþÿ½ÿ ò™ÓBÓòß,_ûä“î€wû5Z,…ða§àv€Zõ6¿Ëâp¦\¹úq(rþa ®8mC @®€ÿÄúå€o6ÆnºçÖÛžA†i€øÏ¢CÆ’SXæúo‰ —¶á¸ë²ÑQªd£Beã}2WÆöæcü÷pÀ!˜,LF €ð?St<®‰J úäÎQÐü§@zP+.»> v¶@¡üO0eðÀ ­|÷ðíw¿½»ù«•OÓ”œà‡Oß|ïz}dpXXI% ÝåÈóî3—é MË2]õj2 ïÔ +€…ÙógÛS ±,¶+*InÆÅ*½•‘´Ôå6éÁÖoE À“'ß&ÛØüâÆæPåct$ÐÞýŸÆ: ÀSÅt¶H +=~ï±z+¾Ë³þTë³ÕZuºÞ›¯Ò;c….kôŸ÷`lŠê46b¤¦»›riLìTøT&T^ÆÿÌðpoBýŠ\WýÿÒm.ekÕYÝ®j¯OT¦ç5­¿W[å(è¨ Î½^†WôßBáDÃèuˆã²(µ’VÆJ§'t+DEÑ)6~|ÚýhÑ(‘Ôå²þ S6º(ŒÝÙÚ뺠јÕä|½¦¿X˜x[™ž¯«Åá·ŠÃ…ÁÂÀ ú>r OO(È\­Õ¼«2vš[Ep ï:-þ7öW‚íz­®×§)9‡+ñ³«ôåÓ;@À”ƒBÀ,JÀO·Ï}€Ë—/£ðShngKN—‰H\£# Ë@~»mŽ¿‰ßøšõ +@âëÛ-P?³t0W–—¯\t  SN2Ð…¬ Â…àd[p@ &ÍþsèúfTR £ÀÙ—‡^N8{‡c´?4z+Adm ÃÿÄ÷… wy§¾3voì÷U èè€6Ã9Æß>1"0€L Äî +J€(›Œ€!Ç$ü§Æ€Ó±HX°»m¡Y€ Ë*¬|ó»{›7~e÷ +Ú¾}ððñ½Ù¢¾ÿúêS(˜} +·u/ò– ìæ8;^øwi`l÷E¡DO€P—G'@{+Î4›:æÒál#_ªÂ—éérUàöý{î‹òdv³ÕºÅlúH @ðߘW$ôÿ“q€Ž*€ïÙ@ÇX힟a,€1É|ZÅÂN˄زZåÝ÷ îÂLŸ™˜~<ž8Í¿#ð*F½ÛžW¨T†‡‡åþcüSø+ÓÁʬ.vµ=qZÿϬ9 G$¿ºþ!ÒeÝ€‚è,÷Õæ´ŠÉ)‰nWÒÑØ…3À|§‰Êj5ºæ;ýzE¬â´î«“©,‹·”Nw9][(W§µO9ütd®L(Gµþz¥ªB t1ñ™‘aú-~u¨ÈoÂаð˜o$}WÿHÙÇÓ“©$ÎdBE«ÕNëÍœþQ]·SYOC¸SÛ:FÜÑ +"ËÆHBdƒ.´fgk b¢Ûçž +Àòešú§ +Ð7þ?,a~· ¯}öÉ•KÕôÆ'Æ?ujœ€ð¡ ß½€þî¨ä í&C àŠ[üEª@¸0~j‚„ þg³A?Ñ€´ù?³ h䥞á¿Í°u,¥ùþ¶'Àÿ;ܼ­ýÛ +ö˜‹ ëícg­ÿ™b0 ¨°¡úÛèèÇ +@:û£þw(&¡´Ûº¡Iú²p€n P`@Q Ê_Kô€ÜÜÐ 8ÐÓ(,3¥0£–á¿ÿýñÑ7×ÎöÝwá?ùöáý;«³#ƒrÙ­ýM swµvÐ{‡Vý<íX‡õƒ¤Ím1:ƒo¯Ó$Dhm_gÒ†5§b<@aHyzaõ?þ6áÿãÍÍž‰xô]Â̯™ ÉâµÇ»ÿY{8àgŽ Z8õc ïÐo,€í +@¿JáÝŒ&…*J“¾pµš·N=z¬¢KO›ô`×X©–*óÍMNRp¾ÞØlÔªïɱmœ.Õj´?e||Ô+õS,*u}ÎBý|¥2·©; ¢ +ëçPÂðß×ꪪêµ÷xȵºV"Tïé)ÇJU•¯Zmœ§˜Â8U•ƒ:ªZ­Õß{¿>QɨÏ×Në̯HË ¸M˃­Ÿ?«?ÖéJófÓ%Ó‡§& •ãYe6Qá„þ^î½OOT-—ß:\-ôe,W]NLYñ;kQ3ÑhlÞŽãZéÝy=ÖJ­ÔZYlÕçß?Gµ.nêÓð¿R3~bô¿/ëù¿‡ü+Ñw¦Þ,Ò gÌÄC{ØòòÏåñoýÐAÏä1ÿA!· Hò?s¾þ^»ö·¿Lƒ +€/€ÂìÈ»}mT`Ù€ð¡8¸O€ÖQ'ÐÓ¶a¿M·J ZÐàååkÑ + ‹Ðý!W>1¸˜)¡$èìO›ú$ ûŸÇn/¬´<=4D%u[ð™R¤K¾‡íA0P!0ßÙ1™`œSÿ&¾Ú˜–KÙ†îa`g°Þ¤„·¾{?€Ìº€ãºßÿîÌàÄäÛ“Jg à_—pœgBp-€À¿+ +`~ÕÀãËx v5p(à(·œÈÀ¾ûö›¯ïþ—Íæ§+ú]ÑÏVž<&Þ[¯ +BOù%"ʼn?ßešhoéÇBV±•™Oà гîƒà @Ÿ†ÿ/{ø@à¤zúéªüËeˆ¦V;oð¢cè§là[Þ»~ߢ¦ Í2ƒ? ¼vÒðD®Á|©šqñý=!´'/œÚóZ+BÄ'¦ÖïܹÿñƒûO¾Má76¿hmnÞ¼‘bR3À„ÿ5müϰÿOJ²*€ïÙÀ|,€½Äô  ¹¥ ?ÏdvÔ©x=ÐZµò#××çuå‚Óju¬æ½Üh»gx¯WÆjåbáÕÁá©©3SU³=½ƒò1‹èá¼Eô¼¬#:jªÜ¬¼;ÁàÿÙQÃqµRª½ïý)ºÐkÒ™!Œ–˜6ë§O‹p½S«¯ñª|Zét~†?‹ùB³RÖëòQírÄýø†´ü¼Tš¨Öu¯°·.þÊý/ ¼p°(ÖÕ.–JQ6? KÁ_˜YcºÁ›k,.ž?Ï0Ä*}clhŸŒJ·ÂHa¸°¥õ_‡ôw‘/޾„åòtÄ8ì §ðó´h¯…Þ# ÍûvQ¶›˜¡®Y¸ª"à”cGON*‘€a_®!x3X¾"È¿´äº^½rù£PN1ñ)‹WÀÿ+*–?#Ìirý?Ÿû@ˆú2@‹Êš (ð 1€¡¤´e?éÚ)ç±=*A6ಞ +Ž´MEwaBøßn:vT÷ `Oëãî€v€ì[°Ã/à#Üï->Üýhê SÞ¡PÌ<ª²ž dAu|t4š'¤~ŠlØ¥ø 芄»Úÿ“@Hk™1*#[Àÿèá7%ï?€ÁerŠï]Ÿ)R@üx»W3.Û9O íí´!ìo{ïo¹æ tÿ‰t(üö ýSã6fyh&Q„â)¬DpØôDyz~õö{?||?'7é °åž àQ„‚ÿ™ —™"Úæ÷þ§ƒYÞï í¼0èªDÉIí •ÿ•âuÁnyz¬JoûõE`wêLùÿ.Js¢r~N¯CˆàYX;¿F©Q~§^§ wxŽÃÅbõÕÁ‚ð…}/Žèø9Ý[ì§2‡ã¹øSè£wXŸ›ªU†ë0ûƧÀþ¾QMP?7ðÂÐÀ‹Âÿ¢&Yüæl7±ƒáaËþÞèë†@µ`o +à>{óE¶¾tùÒE:Ê€è þ÷"Ô\‘¯½l0)ü•uoŽÓp:1{þV>„ }o&€°|íêåS'_]º +À//_¼0>î».¹" P±ôo&§ŸE'þ»7`ú7,€@ÂTÜX#%¢5&L’ÑGMZ†ûMßõCÔZ[HªNùî-vÜnîèÓ{ê P¼Ñ÷¢þ!S„Øá† t-º«ðÎ&óöÃñw©½•[·@TŸý󨇏k@ýû(çÐóµ?êrÛm +=ª(Q˜®€4èfTÿƒÿǃ+…™{½¼Eð;Øãh€@s‡ÙY àüÿç?þ b¨i¥"à[ÇÂã ßO +ý ùá²ïÕÎÇ +ïŸHlÍZ  P%o/–ß"$Àø/KèËLÀçù_dh€)€¡¤¸©-K‚Da9sžŽ<|üäÁ“ÔЃÍ­››šïÞ}ðõ·D“ô¶"ã5f!™ПéOh ïSÆôh ðP¹5“)_}õûß=«5÷qÏz]îëéáë‹¡QèŸdE‡¨ìÎÍÐ=Ïèßát‚”œ‘ñ?'&8ÎÔ•^3窥Àÿ G\(e¥åÔÔT½4}£66d˃æp>Ì?¾ÍXê¶òÐS9`Ê‘|‰è¯ÍŸ.ÍV*•RuQoO¯Ñiç(­Õ›•Êm¤ôPìbjᾂô«Þ.Q¾hÚ¨¯Iipˆçã'áP‘^ŽIZ¯—‘"0(jˆõú¢/ÓÓz±óâq¦Î_wn.uì®ÿ +C‚þႾç#VÐôgŽîë¬xQI§«/ãßY¾‡A&ÜfÑ + [dk€Sy?Z +ûÛ +€]Ê®9~—-/ÿÍ/¯}rM.ù©“4ÿépé”ð•€Ñ“§’ò_Dø7ö§Z€~A=MÈO€V—&GGO.]¼J ÀÕ«ËK“ãtAÀ¡¹àbmQÿý» Òý[3ŒÐz¡]p ¼áßÚ˾éäC¡Øå×)ÛoLÆqæzš» 䞆ôSdG;Z€«*t§š®zÿ¹`Dþe™ Ì÷JÖÆýŒ¤f€ÜÜë£!×›àö‡@@(ìÇØþ±{à@ [81™5Èú@£€3h6øój:À?™Þi—Àós|ï­ +™°€ð?:øï0*¾ýÖ UÆ6?MøàÉãî¬ÖŠÃHŽ´;¢"ÜÞ“ù73 ñ?ö|€#(à¶ÞŽãó/ –8@®L¼ °@F_ì ÈMyD €¶ˆL‹˜:6ó­¨ÍÔUyz~Ý>hǸ`csóîo¿yô àŸ!!„Ö ûSã?  »À3õàžS €]Âbv `"Wî~;ߨ½®\P®É¬~úu¶rÆÿxôãþsêtifæ¨k¥Ò M Ã|PóLùÌÔ:ê³ ÷êÕÒº.(ïg*ëºO¯¦TiÌÕODî8äõêØëÕ÷ì„'ü? ðÎÌè7„ÚxÛcz:D‚ð%2g¬µ*å5'*Ñê¬ÖÑ@°Z©~Ш–Ìhx¸<õÖà[Ȁ˅¢y ¹ê‘êblˆ&ÿ.¶¯Q«)ñæœ@êÛ¨þ3þ¼þÿ ñ Àð¡ûÈpƸ½Ø¢°O¢0êïüuvMÀvë£||éÃIŠñ_?† éÚ®x‰fÖ]sÂü.“¸š)B_WPŸÅ Ô§€Pþ}mš°Hؾ' €pé‚2^ûM..½‰`íáBRþ6#ÅéÓp@iòŸ„tÿ¶ÌØcꇎX@3€Úl+l‚ñZmµà·\0ï‘ôS m@$Ñ÷pOÀC‚Œ¾>¥r[£žLi“Ѐi- Ê“;&DwE†w¢ÊßøÀËìqP§¹­Áß<€kÇ'ßV:º'7éVˆ-à©üžxI6tLü7žÓ +Ïïw@`W J d'k ™ ü§#€ß™Pð©¦û™=¹ÿÞjmd¨X*W§ggk™óoážÌUý\ák´ª0w+¥?g“ÆDçÙ¿HàßWò• 9³“x€8²ŸLÉ"-bêØÌw ÓnÃ5½rýÎ}3(vß +À-¸ÛÕ@§­,´%ÌBzŸ5ÈÈ€b,ZÔk óÜyýë<»ÕëÍÚëµÌMmT~„.Úqq”ÛêmLãn .›ú‡ªTÇ@ÈÁÂÔ‘#Så¨?w*âïÀÞ!b©¥ûýœ!M®”©*Ÿ«¾¯ÔŸ×KÃfÊKDÍ=ƒz¥ ì¨FHE‘Á^WúêH•?‚Þdwùg‘ zöìb¥‚ÁøD¾2ê(”Ry‘_•XÇzu¸T}Ï€lPàûªO¿û FpíƒÀæŒ(Ž(‘ +¡Ü• è/ןÀH€Ù1š| _mÿ‰ç0Sn/î‚v»÷ñ…â=Ò#‡l…báU%¦Ëî`åþúöý1è£\¾|qœVÁžE;à—–Þt€ Å)ð›®ø¸­8 £–zZ>0p—]‘Çï;^¹tjÔc™ë?®›s[†n·  +@ß­ÄΨ©@Šø7¨ÀsçØ½Ù€•˜0K+ã)fd5èPXj±EÏû [» +¨'ÙO÷ÛÉvPzõèãŽ@ÀTH`XføÇS›ïs6Ð6ÆtúÃÍ Ñä’)à¸à{›à*tþ¥m +ÀÛã“ã„&ìp?Î"@0¥‡ó;*ÕѰOòžFèÅ‚@P`à›ßþ¿,Á?ãÝ¿·^=4T(2n.}ŒPq¿³‡ÀÏC¬è %~l>á€ô“ÓVÌ t¬»bÚ +€.€‰Ù7ÉA§ô"¦ŽÍ|ü×oõÂõÛ÷î3ôÑã)úá1-o~±¹¹y÷>ÍþuЦ ¼F^i®Ä»Ž×þ'¶§è1@g?Y+€g  c4ÀÖ÷3å0_;Mð½1_y`À‚Î…ÖÃèÅ&¨Ê†ÅpPŸÀøwxÐjyÀ?‹ðÑ@°ƒ™^‡P²^/5uî?׃ e¸!$¬—&¨ØŸkhB«êY!¨ñ?¬r&¸8.Šr—7,j‘Þközõªë•±J¥2ær6äg ÝÏê–ð4¯þ >ªMCÿÙF4TiØ‘ÕGÊ)À}HÔ›ˆðÿ-»åV¦¦±°Y-·t ýU¹.›Y?žät…Vn¨xƒþ€õç„,ê(î¦iÑ9ÊŒìÅÒŸë;a.: ¯Þ¡ø(ŒØÓ/—‹îii8íŠBû›×Ëbô¾­&ÿ°c,€ØÁó»Mp|åÚ'ŸiÇO¹#>Œ(ÀSøÝ£¯¹# j2ÀÿZkÛd !þKˆ, ›¬@h÷Ç C ` úáÁ€D=Ь|öÿùìÚòG(oR¡ í_˜}š + ðù7'PƒßI•Vhæm¤|Ý|þ0^gdæXœÙ¸\À?ÝÿÆ0Á_ºgë«=Ú©DH,LÝèˆÃãv´Éþ—ÍFòfÿ8ÿ퀌„:þƒPP¿£pBÀã¡ôËBÐ&ep é(ý¨8¡Wi¹AÇͺªL¥¶*~ v3à(ð߸d'UjmS}÷è›ßÿ×;›­ôIøŸ`¸;×g‡ä óK¢Ÿä>ß÷­&4æ·älĦ~B·µ Í ¿9Ä€ùÙ‹™\àç†þ)+}¸‘ïöçÜ!‹ 2À¯ Öwnæ;Z–ËÓÄ5L/\¿u[ÏûX àñ¦'onnÜØ¼ÕøÇ¯¿îÚðO…J0€Ì€þ´øÓÚ÷î ë po1ýÇhÇ4+|,¸g˜¸W³^ù_+ZÍ¿AË5CXU -Ö€­ŠZ^õ:: Ä6šþ¥Ÿ‹ÿ‰êðp¹\(”3 -à_¸î•¹ØŒðŸÚt‚AÔ™’¸’¬Q+ ì›5¹àu±ÑMþßååÁ3O‰A~„âgsÔžJ%-WëÃzZ©ÌºYÀüYhÈÌÏæèÝ¿Ú(•] Ìpß±x@Åmåá!ݸ^,½%ô=(ø§Å¾@Ÿ™™óõÒ ± +„|ÂR·­ÿÄuõúØB«ùn]¨N/ág*¶þÀúó/ê/h3úãîó=㛦ïX à¯^Ö2ðP¹VŸŸ_¨M‘ ‹(…{Èi[§„ø[ìÒ¥À¦Ÿ¹\Àçï^N˜ßiÆÿkŸ‚…ùƒG=< +@ +¨Ý Ÿ¨ÿPКpÀíp¿Õÿ¿øs€e1€+W¯\<5jpuùR€qÔÝ2ØÇÒ%b>[¾têÔI*#bòœj ûšÓ'AÝ¿ BÙ2æN¿«úó × ™þ\@}€}ª`“¿Ù~ííÇÉ’}uøÿB0ÁG;ÓûØî +ÿ@ãe¹ÜA[„Êò÷ƒtP€ø?£D)ƒ¡ ð½Èø@:hdç^Z ÒpÙq³•9oöo¯=CþjË‹£ÄèÕu(Ä P(b˜6àë…ÿ"À¿^\ƒ†éb½æ`:/í?ê‚+ +“`/—„PÿÈ¢Áê¾ýæÁÝ»_l àÉc‚뇆FŠtšOÈx»s[!WhÍB¿Ÿic +@)»#€_­‚„§‘á: £€£ +L€s„@ƾz7›˜@ÿŸ.×Öoß¡#À‡|Âäû‡E+3½°ŒÄ{䕚]a~Ùÿ* +À¿üË3Ç€ +øùV¾ÿX¹ Cæùg¶è]§>ÿ~m쯚ͱ¿¢_ž° @z®qš.|fäœ/*äÇ*—õ¿Z< 8âé̻ɺPлæÐþúôHòÓêŒ(²UÏ–&ˆ¬Vß«W†*÷a•Š+ ÐæY`½Q/A“»P¸AΔw£^i4J58˜EÂÎ +}gêçÖL^Ý‹´© Ai|ot‰úAþV&Fþñ–AÝÛ5Ʌ‒ÏÌUËMw. ?•¹<€6YlUk7ÓP6 _%æoÛÐßyqíK›2Ú7D|ß°;ûÑ÷‘/2¿¾z¾ß¾ÂÄìÂêjcuevbd``h``…Á³·%ÄßbðO…à9èÑQÿ¯y?AÿL üñ_2Ð¥ ãôÿ'L· žáÿÑ×N.}œpŸ@­bàâöÉh¿Õÿ@÷#öÿâäk'ÓhÀ&“oºBÿ€KËŸýU¬% ¹ÿáîH‚@|Ôý° Àqús À(Î5 J´þ+ õhô÷‚Ël>+Ó¦`q(µm“¥à¨}<ݽ§õÀ \äŸ'nMbek  +£{Ýð§åÃÝg_h¦0Ý,7ÜËPt$SÜ "SC@Ðn¦¤9÷„`ÿŸJ +åá·áîá±mÓûw€žŽïˆŒB‚òO°›Fi!3DµñÛ¢üî·››×3 ™ÜàÇOÜpkuvDÀ´÷L3Ðî¦ßpÂùXEå¿~C½èˆ ¢X™â»¿•á~ºÇV„gË—Í¥‰hÑ©ð#–raµ}Óî pº\©­¬ß¹wû¾Üÿáiãè ð[ÔQ —¨É+ͪüúóîÿ¤6–ÌNŸž û\Yé /uhl¬R+9ÅXidlX“æ‘1Í#ÌÃCÚ™øí—†éH—:f>Oi¢hB‰gšhç8×l¼Q{£Ö¨¿Àˆû—Ó@+Õç íD±ç½:£ÿ"mép–uhn¸\(9B/÷ÈÐÇÂõê×&ÓUügŠ8P_@%B½X®k›ìÎÕ^¯ýˆB”£¿RòßËUÊi®^‚È(Îhås3Õ)•pu¤ÙôEôÏãG™:;#˜®Ï€Û‚鉈ðÇPi¼ŽÈ~O(:~æÌ™J½<$2R¥ïLZêQeÿ‹zFRËÕ‰&4#+H•׃Ì#JTSjýjZÔŒJ€Æœ¨‚ðÿ¼@b\u#¹Ìõû|-tŸðá=>§þ9 +C¯ʳ+×76ÖWë•àÐ!Q… +æ Û,!þˆ¨ÿÿ&Ëô3×Áô«×5Ë‘¿¬ƒg @Ç`€V–¨ p A€GGÇs€á€BÀû kê²PX¦ +šÿòµ+/Œšt(B:€OÜEà@v²#Ù'aÝÿ`K®é¨;øË🭄™C¡ðKí|ÿþà¤ÿ†ân:Í…‚L²ÊQûŸ<\g‚º8À +@Ö +€q7Ý*nrFˆ( ëþ‡Z¼tÜU¡8þ¿Ð>4€£!ÝønØ?OPÇ‚hB¹ÀÿìÇ1¥q.®x¹]À˜`¯êúõ¼‡V‰m`$VÆ*ôË´V̠ˀ”*3(€™@‡ÀÂXotÇB üÞ#Ð +r†OÛ›ÏcìõÇ":R°`i€2ýQ"=‹ŠìܵÙî Ðþ?=B”1¥÷ƒû$ØÍ£˜eÿb@øŸª€ÿN +À½ÛTð‡î<¸³±Z- KÓµÚ|mv–švAô޳!YεÚ\ àٸݻ +1oen{€??@,3À$á-yøäOV0€˜³U‡Wd’Yʰc“ åÀ‡ÓÕÙùÕë·î€ÿ÷'îsó†':²ЖŒÿ¹àWkã}ÿ«Àÿ¿ü(áúø_Êá?S8ô¿þ¸Rû±’ ø'üü‹ i +0!ü_LøUëôü6”È㳚ð¿6[¯ÏŸk´æaÀ&®óô´Q—*}š¥zƒær9fŸ36úØ™i8 Pà. +ÀúV”8«§¯WGß? ¼TÊÙ)mÚ:WÈmºµ +apö½ÒazÂÎ6£·€©„Ã.GufŽZ”™™¹/ë%]»¤ø§:bFׯ£\§›Œ(SDþ%§C2j+gU,¾7:Zž§# ÀGæDΜq•A]žåSŸ[lç×¾lÌÎÿûÆŸj{ž[äéd†™ü}7ñ=æk&ÆÍ·o$‚þF¦çW6®_¿Þ\¡ëßý•æWæª:©/ýö)!þ“?qò?àü&‡—›¡(>ÙlÌÇo/dW®}Ò +fóV€©à$A¯& BùÞ +@/ ôÏàŸÏÏ-ù_¾,ܧ‹ÿÉ‹Ë"1ôˆq*5Œb™Šìì{éC9üÿ[PxÙ æþý¸ÿà¥À'`6À˜/ÀU:c©ÿtà¿ Ù@¦¼"¦S›løœiÀq!>ØE•èÚ‰ÿ²T–nÛk €oã£ï _jíƒsƦ2“X¨« "ôÏW˜tÓîbü +@?÷Úà;V(ó`º½[ÿAt •å@0¤ì4´ÀÓikôxþ^†DÄHŸš¼d€wHÚ»šp(Á¿¬C°`üOAðÕý»·¶+äo¬T +C#òþi˜ý€íd;¾xü~Óšƒ +dæÀtØ¡ðÓaˆŽ™_ “÷aèß©€ó ž ü¯Š,¬ÞºwëÖ­û÷¦'¿¿µ¡é š~•º°@(6¿^ïû_ƒŒýèu£úÇJÂÿÒ¿ëTþË7~üÆÇÚ +ÀˆÙ0ËaÑP,È…óFª€ ø_ïilpðfëÆ3O­ÖÿÔßk´ê+o"v²iÃÂv“1÷a2*÷AÞºðnqN§gêg‹C÷à¾e0¥Ôš$€ÚxŸÖº²àH‘JƒÃåêHñ<ËÎ6j‰zDÈÎTó¾|ó™ù‘ú\¢‘æ/)$áus3sÂßj¥Tm©L†d|ý©©qý7‹t™V^SQcLàØC›sk”‰—ˆ •Þ)‰³¨•ß7àñ€Ï8˜q¦Y-!4øFÙ;«7‹7ׄú‹k áHSÝBÎ/~®­zôÙ¾còõÉžï5cT¶É»—{_ÐÆpev}}õú†Øu­Öׯk¯^N×m³„ø[l‹ ÈÈ 1ð§y¨þº®c±¼ü7&K§èŠ')bÀî‰PÆE>¾tñC~[ôO +@KàìÇ‚Ùÿ˜<9~!S®ýâÒ…S´HQð‹ËŸüïÿ›[` ì û1{/‡6Øý²ôÂyÍgŸÆÉ{ƒ8+ã ž£˜ª+áY`œ”i›±ÆÂ„Ž@q+þƒß©D¶‡VÝ +xzü˜0Óîÿ­aÉEv¼£¿™@L +Àÿ`ägHwÿÀÆ÷Ç†Ú +€âÙ+[6HÓ­¸%#æ­è X"Wx#H¡ÿ?J†Ð!èù‚ñìb9ü{‘ã¦DW@†ðÿ‘G¼ÙÊBVîdvëέõ…òˆü ZÖë³à$ì8ɉ'díôkàýþ¤m=€Òaƒ3Ó7”£"øÖm€"è’R‰áWcѱ酜0üÿÊt}e}ãöÆ­[·ï¥'¿“ü+tðß-lÃÞ,ï8ƒÿ üëV,û‡éÀiM¥‰Óc?®¼±@“ýʧ*á¿àÿ©Ààÿ2ôþüüü3~ïÇX”ÍùùV£Ôh~é±î/V«ÙªSeÍé¯ê§k›Ú˜k0àfƒÎçê4j[[\lm.Ö ÃCS3sͦ»F¨Öϯ5£^6êåREù Â溠z¶p¿_ì`¦>R,Ÿ-¿#”×MFÑ¡yb½Ú¨¯×ç›ùf•Ø}ݱ¹)*a¡¢Þh*ÕœÓöÜÚâÚç‹_þöf³2R©4Ön¶ZççÑþÏÕ3Så³ï”ÏœCx.Ï€Ø šmðdîÙd ÞškÔÇÊÈïDäBy˜…UZ9 +‡©@þ¯·6«u½ÑlµŸo +橌Y\üòæ—7[_}·5ýî»õÍ/¿¢ŽïËµÅæÚo¿üjÑç*pÞèÏð›A¶õ¥(Š•KNÌŒ:€¡CÓ³‚ÿ aþ†ìº¾)­[·6n¯¯Ôøæö2à~»]º,0šAHøpm3ŦíåýqMç"€Ï>£Ç½7OÉó~Ý€÷MºÔÔVòð?×$ Ÿµõÿ ÿžª®Ä “Àn®8o‚>Z¾ö¿AŒÿi £¾?†~¦œü­°3ßÑÿ‚ ¼ðDC9ïÖý÷ÐŸŠ¿•¶ã¯æeà¿,Ŭë$ ¶:³£¼ÜìÚ¦ÿcá§Rå¶» ã&Ê!$ 8†òìðÿ¡.´R)€Ì¢+ ´ ÝEÑA¿!:€`By×mÞ¤c%ÀÜGóY €¼|ôøÛ““ãÞÄö'Àb0€hH'¹©L¤Î€hÀ;Øs+€`™С؀ÿ$D+bÚ=6ùš‡]_oÌO )§gg©¨íªØ ÒµÊCgã5ðíV„Úm@·~sÂýg«SP’bù°`{‡V +ÀŸ“™oå{ù¶íM>Ðsͯȥ‘[£ß¶ÌÂÿo¥Ñ¿ëÕÐo´Íüºÿô @hž€’€^1oü»®€Òž€ý)€:Ëþ÷ۣ顡ڻÏ6½[û«w+§ÿêÊéJ¥rzþ¯j³5zhÔ£Lœ®œ†ã”ˆlÔÿÊtåGÓoj§rZ¤Ï[þ[ê/>ìŽr³Ý[MöŸ42éJ¥×‡JHÖàܰê‚W† +¼b!uÅÐP¼ NŽU‡K‰ï†” ÔÕz率Š2ÒE:0eÓ¿^DÉh~chÌ4×÷Š:Î.n¤Åà ·•™r®8 w³C>å!ˆšLûòö‡Š%ÁôÐà+Céuëj•…¤•ÊjÙkài[ï­2]óˆ +ŒÙwúǧßuï»x©TjµÊtåÝJå¯4ÑÇ?Sú¦ öùÞD=_AW§ðÿ¯_¿®oÈuÍâÊ"ÌÌê6µ€½Ý. –3LéêêZí7Àïo/PR+@ £'àî€/ Æ;,)½Œ44H ’ÿº-1§Nèg`ùÚòÇNÑ +à‚;#Ž:€åkÿ;¡ *‡Îèg¨ïU¶Õþ$´ûW7½YP1!v|¨Ë×D$ «ýmñWÈ€Ø30 ‰k¬ƒØ´m}'mf¡^ËzàŽSÙÂvPò€„ÿÁ!hW¯åagu,ÿkÊÉÔYèάÀý !¶P’àVìÈ…DÏ¿(:}àcu(0Ð!@[¡P0ŠŠ +€ñcT`ˆ@nÄbò¶ãk +€éÏ[$ôÏðŸã(2ðß àþÆÈ[Xè“­¯.Ìë·¸[­.&Ä‘ Àƒ[Ý®RýtÌo†Em¾Ù0Ыµy½S}V¯°önå]öh»©:ߨ¼ûㆋ"Ôf@“¾k0}wõM¸­¾¢”Po¨º°~‹9àÿuáÿíÛ·îhw}µ1?ÿÓmÓ<€½Ýº¿á@E›úÄÌçòå5u. ¿×ðÃ/Œ¿™Üo`Ø­»0yiùrGzZBü-æŽD®Ê³?9¾t骀eº!:uR¹%þþ´|íÿýÙµK4 „‹œÊPÞS@lµ? íþ•7­ÏÛ7LëM‡;?”Æõ°8*‹ó!û{C;Gî7Šg +Æ~–Ø;Ê-‹odööÿmG;)@_@ŸLÈÃƾ¸ßÖö»ñ +Œ¦„˜îÌ͇²ÄZw™uC¯„Û`uR,&Ä•E+1‚L ‚ARÄ1`:ÇPQ"¢a(ʹÛ,À0D:\‚°x¥‰é<}+€À N +`°’\) E„Ð5@s!™~Ëh†<ûSQ}Üÿîô3Á·áXØË¢ Ñücü¾¤8êñkºðVü›#‹uø%IÞQȈßËÈ(å?X +ž™,xÆ–ÍX@#ªòÿçæë?®ÖfÅÂV¢ºVks“~¾{䆀(Óë4³Ê8@zÛÙëÿÓ¸Ÿ)B÷î€7²€7h`Ö_ÐjL ‹Ø?8„ûÏì¾=›®N/íìæÝæ_­ð/ØØ\[ky7[_¶7[kû\€qk¾€,«¿—à#*pFÀY,*‹ð_"dlÌM 7Αï2ëè;õê{åaí–‹/ÿ…ý`P¯º;åb¡\¥_¹s\W_[\x.ºû!á°;<_ +lGçµåbÐ¥b]—ϵY7•‘ª.š¡}añP±:3\n6ÎV…‡KUVB ëåÒûʹQŸsE1ºX÷8×h–J3õê;gÊ3SJ}˜Æ +Å⑃bbï(©.k–p¤šÞ… Ó_ªè¡¡Ñ\k5‹ÍÖz­z~­©ío6¿ÞüñêæÍæ«:¹øOA}¹øÒzz¡oáD‘¦ë ¿¡ÿÖ-ÁþƺVúh¹‘œ…-€¿Õ©žÊÄ@fЉÍlÌú³…,€Ø>xb¼Ýî®Ví€íõWzZ 0>úf€è€f€" “YÀ€ÿý3Fúñ3Ô÷*ÛjÚý«Z¼^!¹?ÆPöÃ7˜[à$¬ Ì-ô¾à”¿ŽjnN…) ÿu½­=§IÐÖÿ9탌%Ø¡ôWteüó˜dD.:ˆþk!È…µ¨À‚]Ý)b¡%Z¹@6ýY† ÜŒÎÊ|ÀN +@€@üŒÀÚ1žt=@Yd )ÜÊèO%ÈÞ©˜^»Ÿ”{ðä:©ÇO8°›"%ü÷"ƒÿ\ˆV~ߥȟð4ûîÿŸ¹ÿû뺳}Q ÉîjÑ*¾4¡8j9b H–ÍM(6+,…qÓX4Ë\ͰÓ:î¾Gt$èÖm¨í}[àF^‚ î»ûV"7«0dÌ#õ¶œh˱ä7¿åOH÷ãÁ}º÷åŽÏøÎµê‹);û[Uëç\sÎZd­1¾c~çœ5¡ëŒ02{»)w>ó< ö2ùê¯ É\Aw¥fUOúÙÙ¼^aW DKäF ͧëeúOE¨ÈëgD€ú”eÔeVõPEZã_=Š28Ý= ã/e‰‰`zö&x‹;&»C̾´üˬÑZ.¹RÞš¬}uš×ÿz&Ü÷ß_?3ýÜ”©²úÑ»‰f•Jed¼¾¸.¯c üú¯¯G#ÀæÖÎÖ}‚v¿\÷Ùõ®^6p¢´€–Ňkú4bE®\>î‚`?\ð —/v)/Ç|À8þ]1ft Hˆßg ñûì¦ChèUÞgÂËA0Ñöµ›?þÇn^ƒ¨.ûRþ‡3Ary×ãþ{;n· +ÇS˜þ눌³¿pÒø¢C_}yHf`€—Iu i½ç¼ª±õtÿ?YTt +^½ëÜ»HøÊá°ñßfÝ]V(ønûg3ZŠâ• 9À®ç_*9Uxó ¨eÑ +€6•Ö +€i Ê¡;À#ãý»•!ê`#°èp4nîA‚§[‚ #’-Ð_r•m@Ú¿ÿûï~ûùgv)eLÿ_Fν-ŒÌææ¬zîm‚U|€O¯„ø¥€ñl±£^6à»v‰t)€¿[Y¹<^¼]Èî‚õ£à},; hE­Ö˜iз‰Ö e °½èßnoÿŸòi °À]Œ;ÚQ + nþïÅ&Í{z Šÿƒc@–½ +€Ì1î ¸;*úàÿemmí /î,Õõ“ ‚ÍâUì—™0”ž?«UÒG¨ÉnØtõÛÑ_*P©Œ«Ž 4G+c£cSõñcµKüËéø¨°ÔÿV"ÕêÀ`…á +ô·§g+#Óc‚×­•±üòK¢1\€lŠiz´~]/lzÊ/¥Ô¯¶~Il¥²SÁ*ÇŽ©ªcÕQ•ÝèZ©ŸÌÁrÛÕåÈFÇÅQŠäÃÃTvøÈðá¿Ò©**1; Bê°]Ò¯öRA¶—uÿòåüì±¶à¢eKùä$—Þ™Ïm2ä=ÆÆÔÇZíl°å™ÅÕ-"7¶Ú;;[â"·LÖ7¼€îÝ&H-{ 0jØ„ñîZuZ„`€N…ÑPÆx>àëƒbŒÿQxÝ1ça˜¹nÜüûA°îkM àòæ +Ä/ð°OÛÝàp€]xäþâ®sÿÙv€?w]p +T± Ö‘>Œ?WÆÛƒ.°ßf5²àoëtì¤ÓJ\nbäþ¿-üÿÂTÕ}Ätr>»î:4Ñ=LPíœ,úC¨T:‚‰;1G_<…koÀ?DAÇqçc€è&PÉC© à”.¾ø‘®3ÿÌhS¶„ê%ìètÜ$}½ø™è v(PB‚gšÁH+[‰ÿ½ +@„0ào"°PðxÍLð\€4³Å9»—á²ÓF­úòiöÃäUìÑ bx<Ÿ] +$at|4åe9 ì€@Ѻ–˜—¾<åÁÚLÆ73ÙQíDÞö; íí{~ý)#MÜ<ã¿@ÿ‹[þ{”ÎŽ÷*gûb&ÏF €l_ +@´Œœ4(Çø +€òÍÿeí§k¼÷¹öâ£å™ÖÖZ}c“m¡•£É‡§?{i¶U«î„~1>òÊýJ `…óÕCþ¿àÖë#CµŒ?õØXõ88öº@Xëzu$|óaa3‰• + [®çuÚ¸N%ñªç€{A ¦ª—F*¼îÿ$&ëquÿSS‚Ó•…úIÕH׌MW ‰„¹ÀdÊâ¤~o1ê2³`üŸÎ+ÕÖt}Êõ• ÿ:rbøø kŒs ¶1RÏ?H”¨¡ ãÖÉZKLï°¯5ê!¤,d ÛùÙ™6·8öÓ8Î_?:×¢ó™ÌÔøÑÎ-®Ë«ßõåûËõß¹/ìß¹{wçîV„Ìô[Bü>ëÐÂ8ÑeìÄoòý) |ënD @B_Åmž àÜÅk? + ; öªD €ƒQ´ý¦cÜ ÀsÈäó_ !âòÅ})JÈü? ÐB½ôæƒþ‰øv°Å¼/#0 Øái‡÷Ó˜:½ýóøÃj/ŒÿiGÖµöì^ñߣb…´ÔÂð[4ýÉ^((À‹ŽE(KÒ5l«å¡S°^¨lÈg _cu€¾3Šª ‡KoÞ—E/J7Pጘšà"4˜3øŒ¾ dÕiHF× +ÝCÓèÀ-Ð=HPðl…@¥°‚€\(@1€4@¯û÷k|bf¦9×”›ÜÀ=HعÛâbÔwASÒê÷có +Bm€¸PÂ3O#YGð8Äq™@Äs‰ üöJEwÑÊ8€¤ ÍÒ²³ ܙǜ¾]j#31S%ÞŒ·Ý½·ºÆ(Û|; (@b¿?à[gÿ{{ `|ù”`VYOWþ§d>^ àuÈ%ƴЕeü¦Võ¬ +0ROW Û“÷P>6Óñ•PlªÙÔ/Í^Z˜žþά*Òš‚ÓØŽ£ÿ9txøÄè(dE(íüÙF6íÄs€¬.À+ËféìG#Àr#z, +ÿÛ?9Ûh-/‡ÿEeˆGô/qfFLX €y?´æw¡ïYËh É_èOôß/ÿÖý»[©¿PŸ×,)áÃñ<5¢$3¾” >?º.Ðg@6  ¯€Ë(IÇþ£|ýås®ub„ûûQ2€eÀ{WQn àò…óÒ“ðO(/_db#~ú^[b.,ð5q˜„οwþ€Î8È0€tßKà›®¥PݸFê´ÉŸ ‹?ŒÍðP±Ž– +€|æS ÎÊHÒø_îöúÿ¶½Þ]½("å +SǪGˆœˆ0ê; ¬äöÇí™Ïg˜ ß`  +À)R_(cL+P ©‰¹ÀœÂºô´2r@XâºY¾Õþ¡1þòûVdF£0ƒ?Ë€@à?- °7 Ôgô˜œ2  {ÿÎAÆ3ê¤ûé[#0ºÇ+>N;Om]1©@Ä$Üg¡Ï@ù+#2|V/€8(s«ã (ÇXZiЂljõ™¹úÛ >ój•šæÂÿoÿ¼ °[èÂ3€dÆþßþ ý_ HïíЉø)@K÷(ÆسïN @4„øpà¨c(!|z/Ÿ½æ%üÿéíµü»Û £C—tÀš:m³õyÁ¯PøO¾M#½Ûî-T³ÙïÈ[«Œ8tBh)Tê£}ZÐË 3ÔëóúëCuq…1áëqíŽ)õ‰p€©±K•—rýÇЂúŒËg,·Ÿ^­Ž0¦Oõõ×Ç_+õ©É_ç3€  ¢!ÓSÃ#´ã•ð/{Éø?Z­Œˆ‰àû«:}ÍéKÓâ2²J%çpª³®9|èðaëÿªâ‚ÊbÒˆh’é’ƒÛ1¿óÂZcÄŸ'o}o¼A»Šg^0Õ:‰uÁ×OÞà¯/üÇÎÌÜÊÊÆÆæú¦#ÄvDÀÿ-:®2Ãý.ëSBÅ,’Å6Ëøýú0 8€ üø‡WÎ G ý]8>xRN¡ì`F0Øæ÷Z' £¨2·þþZR +páòµ›üs¡\¹pþ5†è7pß=„ýç¼Nýû5àD€\ +~hècüaN†4f²9®÷¶ÞCFí†û´“EXz9vÒYÆÇã‚Øç„@­´®Íd/>[Á€ç +°ð?®!×&('ƒæÀU§Ü ±°”¢½Ì<pR’B€@c°Pò(]_¶T.ža“ˆ“/:*ÀÞ€8'òêóÿ¹¡þ“ð5ÒxQR Ï4£—0PÿéØ× `e%õh..ÎÍÕgÆÅ‰rŒkàí@SAma¯€ ˆ.Ô@Ù€­—’DÝ À93¬;ðºü‘žUäGF)7Ã~_ @R"Ñ.û#d +¹9™¬ÑXÌýuWõõWVòÔÆøôóßýtIøß‘`vÿM|³Áÿß`dß^@èÞðjŠï`ß +ÀQ3€4À4€£Ç¾FvÊY3ÐÖòÚvk9Ÿ—Ë*°J@@v‰ ¼KoY^ó8µªGæ“™ +Àκ<_mŒÑÐh˜éj*•éÊQþf…øÞmÇ­H^©œðŽÅº:[‘ç>=Îëcà÷¦Ÿ Áu¦ô1ùˆ&A—ÁD´O¹¤ q†qFû㺺 + aè?¢OE5 h?9?Qæ"kÕ{¤2oÙbIƒöÿÃÌ|\ ¨U=ghCZ¦¹+Ú®ÓÍ@d¶®{ú½…w²ù…{35ÝÒúÔjLû¼¼öaº»å\àÿxÕ^?Ú¿(¿Hñœ|b 粦~+­Õ½Zë+Œ™!Üo­·76WctÀ~ ÀßeîPôo0º‚ïøýúˆú£@¶·Póñ¤€vbüû`°Ñ àÆ \þkôøQjÐî†!rðíâ•D®0GëòÚùs8ùç^;ÿšÞxý¯‰ðÖB/­t,aôïÏž°÷W ¤~¿¬ÔÒ}'•OŽ °âoUäàãÚ€H(8‡|­Az‰( „¶pNvúy½þ¿AþÔS]_*®ï©(DyéKuZ\}úã|Â|U«ü2mZÙ·âïµ2(¶ñãɦ£ˆOâý`øye â\:@(/þ1ߨðOó? 7„ àÅs%¤*$ëQÒ8Ü}û„ϰpE•l€¡Ä\Œ¤¥¹z€$ã‰ìo®¯ÌÕ‘Æé4l¡œ@¿Ý-7BîP×8…ì¯+9ÿ{õp @7ükѧÄHÀzÚ’?Y±o¯zÀß'9BI»Mßk"xs $“?c¡S&ìw@¡XH +Jà?·µ”Šûþ{1ìß§D/€®€4@_ˆ+€ÿ§*ļ +è` ÅŒŒ|C¯‘Ä$bËkK“íå~üD¥^9Ä¿HøþGz):ÞF¨`Â`ðW àDå„6¦ê•q €ýQ¹áh”£,aD`.C´RÕÄdñ€ $Sy²›®¸_BuJãx¥‚ pÜUAÝg»ø°ÔЦÚcÓÓ/Uô…h£8q‚@†8,¨ˆŠ@ ÆQè¯;‘Â"èÂ8[¯‹Iáÿg íF ¬_Xh×'sÁÿ²x–Ñ_ÆŸ^¦ßš~+ÿŒ\}æø½‹üCÄýí +ÐHË,£EN V Þ<Ðà÷™€4`€i'mœ½ú{Í@€ô  d—/2"O( páš’&?ÿð` ¡Èã¸òÚ¹ WþÖ +1×.Ÿ?O¸Ÿó”]¸|í½þùÇ HeóçÎËÇ—«¯žÿkç;o-ôBøý7%]&ø±ðÕ£/øFw1ã©7JÓÂgý¡y˜ Œ£7( »,–:´¾Ì_Øñù ¡NàzsI»ýÿÝ&žðÔ^AÌT¿Ä ¢ çt,°®+d/ã*¡­ŠêP `ŸÂþ^é"â)RV$p/'púPäëÓ`·?bðþCþU…N6þcÑ °» ”€Šáïw‹ºé$8x†á‰‚G] +À. 03øü³þqÒh¸wܽ»³µRg(`ž oÒ$À³ÇðÿµÂqt7îÃzï«€s±`OfX¿0j@— è ǨGPeþˆ m®Ôn«Êç©ÍÔÍÕ Bšïë§©„ÿ_Ž˜$€°%À†àÏïÅäÏõ¨ß× `€³€=zýû€h08ÿ/;öDü‰)<NýA¬ÕúIíà Ԛ§ ° Öi³Yµ6_ Äß'ª.@C†‡OL 28ËïðFèÝñw‡GŽÑUÀF"Ha¨¼4 þsư “ÖÞ¿NP œ{Ž&‚ÀQÎ •§+0UB"¨ÔGŽ*[ÕÃ1ŠP€d®@udØ©0§òL6Ʀ¦NV2UãÄñ'ŽÃ,D@•W©Öë#uߺBÊ:ýtç˜úÛ®£d wjt´Ìóï¯}¯$ð‡ùùÉwÛ4†ÍÌi•-f`¦<£'€~z4 ¢¡¡Ýe ñû­g- '6«Ð±m(ñ§ ÿÝþÏ À K‡ÿ(gN ª àj@€¿VT¢ €is¸â‘“@wÿNs \å ‚?*€ª%ÌÇç7Þóìç ËÔ¿3vÌ÷54€õ; @Øí#Xg„bü¡„´§† ð&К(ÝÖÁ~^¸ùBå!Ð’ ¥<8¥“Ñq™Œp¹>£›þž +€V 5Ìë,Ä:Iå]û€A86dÔFu½á>8€ +gíc¥Ê%èŸ:j‡ßÛ1èixùÔÑÐç^ÊÇ @¥Ûý竽8ŠóÏPºCº&ð_;©ÃJÀ_ôšڗà_¿ÿÝøÿ MøèñㇶV#z’ +*õ{Ÿow›[ÙeòÕG…äà­ÛE±€è´]‹hÀg̰‡I°`3ˆR/Y *p>€ÄQüN ÊŸáYVñl€Bý‡÷¤¯þHÞ?sÔXøô³XÀаqs¹ÃÜè¸ñ¿ÌQÑ{{tæ ÷? +€–wx~à›#ßP)ÏÁÖ–jÛËË!ýG€#ÚÔvé;󂸄ÿpÆ×åXãZŽáaOš ç!9Ëã•C/ nOé€ùðñáÌl#”?®íÊð1#x ¯®RÞªÊa§é]ÛPsý÷û” —äúŒM Ä••ʈŠÁà:OEþVí'*õ "*Ã!ŠªÉêSˆ µ;›¶]Ì©•[¥bîBï?ã¿ü¸"0€jýÒHAˆÂbædLwnyáO–—Û¦4øEm‚Ž•ž7Á.`.–š~-À{RÄú@Öl,6ßÖÖ q²©áÎ%)•ÒÓof€%Àï³P@É»€P~ûs3`¿À~4€€L‘w¥à‘€tħÀ›Þ8¨`ÿý÷n\á¸*€$/ÚQhòú!(–#€öÂáOkU8Ñ/^‹ƒ¿×F`¤Ï„ÄöÑ}º€Œ›Þ1†ù„ëïåÿ +X‚0bpPðÊn½ÿpZ†£¯?.ãâB¶t•¨2ziÝØ8µ—À§ˆ° 4 +qÚ= +€á6À—[kìfÍ +×_ ‘/(GÀ,@÷êô)Fú S1E6:oàŒî`"At[ƒ|¸NÚÔI÷H”Ä•Q¡ } à4u§ÓŽ×=1®·@L€ðt+`È „ ¡ÜP0€NàïP>ýäã M‰ÿP€øðîJ}øØpe"„jøûÌž{Bíñ1KûVÜ Ç ÷ÅÓƒe(òè; +@éü{u÷€üŸÕ  ?€ì‘XÆ‚ìÆS¸óâêÖ]Oa›~ØþùÏ7?ÜL +@L À  +@þõþ=1€WÇ'…äßJM½½ŒPÄ$¾þï_° tÒþ’ö½ð¯eôþšòûà +s3À½Šq”OÈ Ú¤8äš õèQÆ8(³§Ïʹy›Z«:ŒvÒX\ݼ»óàÁÇÊù€?´ðáæö½û¿úä³4PàÙ` €»Æíþ½àÿ丠ÿ[»€½æ `_sðî‰` çŒøƒPœñYÀÒA^KùZ«öIo/@ðö€6¦„üõº Àë…f>;`)° +:mÇ’‡/œ”çLg­Ðˆ.c)0ZH¨ë¥2®uÁTexŠ=eàN÷EŠT¨L{âÄ/UŽÎù´qÝ&2" Ÿ£û¾êP©Ëÿ§"º(@UWÓá°>‘—† PÅD8 6oT‡+â.àÈ¡àÿƈT´; ½NÀÁèëúÙ¼^­¶èxè ÕìÒìŸÊ݇œ­çyë¬GÿYXøÞŸ.ÍÊÈÜãèGbŽ ÏÜ4õ7›‹ùâÛo/fÌ-ä6ùÄâç3§pšW¸Ïà÷YŸÐ× @[Þ)/Mެô²½¿+ÓnR^N +€ãþ¯Ú÷—=§àß‹NAd"—Í?ÊtzX0²ʃøáóþrû½ÃY×'ö—l Ñ³“.äÚÕ€u‘Zx-œ„°ÅŽ,zàMš€âÑ%LÀg``Èz©¡£]Á½Ø‹ =•fO€Dt…K ½ˆÐ'|î‚êè F²ú!x×]‘€Jb`Öéæ÷‚ñKJ€Cxüf …PÄœ’…ðÆEƒ4;°ê €œ?ÿ—¡ÿ+?‘}T|G нÖí žLK +” á)–à?64•@p1ßûÅfGxœ )|guî¤d„Ëã À=;XbÚÅ  ÔˆF°= Eˆ‰@t—àüŒÐ‘c_ ³F^{ô*JÛ­¤fŠnSBÏÂ2“­nÞ¿ûàÁ㇟¶ÉL@ø¯ž À1‰$øO!øVsÇ¿| +à–~ù·Ò@@½½Ìãˆ3¤dR¢ÀÁü+Ä@- 'OŠ,à•/¯å3"0€h¿ß1€Úp׿jÝ}æäùê§½Ý'pˆVF§„óBúªÎ0$PŽê*eøÿ(:®«Žžp@³ ´Kðàèðð˜öŽŸ¾#"ÈŽG*§;! +q¼rìXå%åG–tåã°A›ŠÈýw_eäÐKÕc#Õã"œ¦ÓĪXòàZ}•áQ ? cWõ³ÐFÔûÈð¡¤)˜Ëêm(¯W*™ßFXVŸ•÷âÿËFóÕf~¶ø¿°´üýÖÚOïlÛpÿeèzúQñ÷ì˜ Ž)ègÐ&³d-Bd8÷"Z¢ˆ&h“ã»LþúèQ 9F[`H÷G×tð¿0Óówð?¾vþœìÌ׿~¾TÊÆ‡˜\MàÞgW™cDÞSy°ŠPþžò_»°[¸u󪻄P€¿`Þl m—œçDBì/Õü!€À¢^ ó£@ŽnE†¤€±Vþk´6k%0”špNDhí;IpZ ]k%|Hãn®×aFgüòÜš"wÆÔÅG÷°¿ €v©èz£=ˆÚ[:8[À9ka¸7Äèc1€Žä臘 xúÀ=ë @—š è +-ºÊோ¡8î Èw…(µîg|ÑçUxÅ"€N@/þÇH€;ÛÿµŒxüø‰_?x@žÌ¸À®põuºãKœÿ‚¸€g }?žÝ°w/€ˆÀJðïWÒl€ûdÅV¼ýDt)»cv›;>U‰ؼ{_àñÃG ÿŸ´ÛÛí;~øáöÿ‰&À-ÿ­pw“ù–óþrÍ(/w~·°×\0^*0l¿ãPþ·19ó:+üéÂ÷g¾ônÕî´–¼¶µöÒì%wÿŸ5úËÏÍFFÐꨀŽñ}PÂÎãÃÕÊè `»r¢*ð^Ã¥Ö‰1Ái“;~Ì@l €v¸½oíé°ñx'A‘D¯Ò8‚àÿðKÃPÕIŽ>A³Ç’‹ïK”‘ˆ‹*¼; ·›º?ÆÀ¼) +$„äÔqøD5ñ‚#GŽ +Àá#A\neêlH÷fº: QŠŽt~œŸ½”å(k÷ÙÙF-kyˆà…%Ýìåµµ$µ ŸTöÃ/‰$ëG)ð¯{0ìÆÛt‰}ÿ_+++‹M9úìg|Ž͹ŒÁAŠ¡3{ßôžßmOWd±£eÀIGèÀ4Ä´û½aìŸ;§Gi'¿T´í©$È﵎pÙ™&à}÷Pne ._¹zóƒÿç­QŠc\C7øS˜·µè:–@ûK4à `4È œ½}LÅ ª…9¥Ìa9?Ÿtx€¡Ú(¯ÒÁ!8^ÿ8³±òÛY¥ëúÍþ?¾ó¾büE (® +£ìû¡.†\•ž;È ººÎtÓàórxϦRôD ,gÂWGï/² Ï]ËS|ÎZ1  ¯ûŽ@0P‰DR¡ÀU*EÕ&;A¡„qÓ’ð1C Q‚&,àß —0ÀÇÿ­7à_¢îZ®^i}ïw¤Ý™¿ÝøŠL¬ãpóHу)Vá¶³oó s„ØÝ +@ u,{àÝ +€. €—ÁŸmå·; è@ìÙu›r†T'fšë[[÷ź‚~¾Ù–ÿðË_Å@&€ P¬Å]ÿr)@À?¢~ ÀžsÀ\þì à9bPè¨"”§xÆÆ¸½½6sçeKË·‰Èfë̽·lô@ÍOŽ0^%›ž­gÓ´ +¸]^8,[@6Š `,ÕñÑ1ñùÒRìDµ*›:TUz.6¶Ë„«ÃˆcrãÅD"ÌŸír;_ù:fM¡ªÔô (4ù—F«òþPP<¬›øµº#ø)I\¥2ø€²€Ñ+@ïPAØ…ÊØñÿUð‰QÕZtZÀÈŒè¯vèpâ b•Ú±â¦Ä–fg ›,l6oáý/ÿεZãìÙ9ž_øs./·¶™JQ6ì@ýÚøIʱ7þËÙgT >"£ù¶ð^ïEÎjWœ`N!'Å ¿ßÄpØ´©‡zaCfü7ævÙ{·~|óš£ò K +€cÎ .„Õ2a}€?DÀËçVÞGq€¼ç‚‹LùÓ¥\øGfæ˜ê"€/ ¾õcXg;Áö—eOÿ0|xk)úÏÐ&ÓßÅ·=¼cü¹ì\sÜ +aýB¿äEûWù:ºŽ‚µtà+z¸ q @x Hþ¿ŽïS(‡L(*rA€¥ü/Ó·ò„ÀÒc€„öH¼cÏËÎ_‰¹ Þðp¾äT*ï4øªŽÀ(Öý_>sñ¢’Á¸GèÿVb ]E4!yÅDIþ,ÑM¸¡þ¢ÏÕ À dHâ]Æt€ðoðëïÞiÀJÂÀ‡ÂÃûwWÔó>½ *œ'´.±‚N/¡±­€ho;po^Ýã$ðߥì)Ü @9FÑ À$¢Kˆ€r€ÈÛOïÂ>}j¦ÙÚº{ÿxÏã²  }gûçn¸ýó{÷ÿû'ÅdPÿ„ÿÜtß÷/ÿeP€ñ +À³æ  `? +Ëb£?m4‚¿ûOO@•r’í<_Ù÷»uïÍOÖZííí;·Û­¥á«Û ?šêßœ·Ày¸®ƒ(ëÚLž6Ùà™W^åBý$h¡]‰8>VÏáG"ˆ¯ë—àùÂ;8úy³±Ò\oeòÞ›óÝVÏ,;yr¤B ~¯4096/ƒc çWsx€HŒ`ά _YÕImùènÖ'Ͻç}³g$Àp8ê½6T€/Å~‚ü^»%»NT~·½ÎDOÀ WôñP’û/{.@ÿšÞ»åÝPèPpùb"¶‹iÄ£ò‡umz£› \¸œû˱@>Û`"n‚çe_ÿ-ºþ$º÷NhD¡®—@ßà? þãq¡ü~Ô_øÏ›+´æ¿9>]ÚmÉÿQØ»ÉÈ‚\È”¯™õ*8âaÀ? @XÎÕЋäöÛ´*¶c€¢'€-âã@€ŠxOfY ÅèE”ê•WD”±ŒÿÐeê\c ²S"“ÿ¯•.æFó=ŸGýÿ DMa&= +€|ÚÿÝï~K @O/÷ƒ“ Ü_mèYÉ8!ਞÀ@FaW€ ÷à1H#í£Xô™uazó `Z¨­íBP«×[ä×£h©Ôûï äìŠH:…Ÿ­¥œôÕ3ÍÕ­ûwèÛ>~’¾úãmæÐkûÞÇi(ÀPº@(%Hl+nÿ—e¸ñÀÿpßðŒ¹¸4Ù†>à\€2]=äaœµ­'Ç'÷ùuyÕmÐ5ñ˜É F1PõUSL5RíRÔGUÕkDkÔþÿùLìIJ{¿gã/ö5þvÃ#CÇôWä•öGÄÐ'†ôƒŸ¬MNè_eòUý(eñÏb ¯_†~Ršö› }øWr=ã‚®¬äÍlQïýæJ¾º²ºªSÍ|qUìm÷+ùû}o-®tÍà&¬XDÊ…Þ·}ÆH@ Ø!—Ýõà<1ç.\Si×°W¸rõ9J$æV1Z\»øÚù+:ÀÅËWˆHÀíû°Ëñ¾ø¥J D{·¶Ó@4 þ64`ÜèšìNë°Ç_‡H:üx°Éi8 ÿ­àˇÿySÙSŽ©A¿PúÿÊz +%ŠXþŸ¶Âê«û›{Ó +€sQæÀ©K¨£% ä&Ç\… G ðÃã?à'ÂÀBûæVt÷¹€M-\2u —‰¸ a2H—nœ¿) +_Ý‹ƒ(àQ—V]ðŸZþíw¿º¥É€:1É„ÿ÷Wë&ò•=öÉÈÈKå Ç!dûÀkÏu"á|¬ÂDöèà‘‰ÿ¶>’0êqÈð™½"…‚$á.UÆÇý„L/Fh'ùÌâ: +Àýà¡\QùÿZÞ»÷‰czñ_ØßßÀíNwÿK³Iƒü«ôxu¯^ÂÏdýsp°¹žO8ö¢f€Ž02ÔÊW~²¯wžg¶ïlßû¤ÝnO¶ÚùÂB>Ÿ_ª7ŽkŸšJãùjç-Ž0íeJþ6ÃØÈsfŒ£å>aÕ\Þ>òýð‰aÃøð4ñËŸþÊ1Á/¯q9Nú1–‡µqXþ|elTÒƒ€¼ðÌmú§'3Òá´c‡ŽÓª¯ãòÿu)ÞùÐñêôñÕc¤Q]RÒÂÿ§mŸ (Ò5>^%‘êøð׆­ ;|hì•Õèf€CP#¬ªõ +ÀøÈT}š¦äÿ{<€·²|"ÛÞΗïµîm·òÖòòZ{¹ÕZjåí–À]/ßS4ÆlÔ ÿ³ó_Úêb.¨Ï›+æ+ •°ÊxÀZ­ì1pà}¯¡ +üðüû“@Mr7 3Tt˜á·ßþáÖAÚÊb:ज9s!fìÄ€û‘ò@ +¾¾ì=~ŠpP® ÄT€àý• ×n~ðO&*èrW À +Ÿµ‹Þ_ÜŒ3=à?ˆVG_ ú‹ÄßÄPÛ)lIH»üqXª99j‹k˜@Ùà˜ûLy2 [g”&Üí.#7ûÿZí9 ŸBpކZ_ ÃøÓ—Ö7dð}D€B Ê‰°€o”r S" V‡P„Bp.4'h€ÝQºfT>ûé üzmYÉ-M_xÍDefqƒ@¾î“D}o3^[Vè €{W€ÿ!ýãõ%Ú¤ð] @KZÿûc„îœÙk.»ÐaûVº‚ ìȵ£Øˆ4Û­43dé…|9ÏÏæí¥y:ÿHÇ6Zß{ aáßà*ÈõSM +;|¤4* ^ô§;rä8*àå­Åðá¯_Äš@Üõÿ‰’(q”äÓrðÀÿyÓiì8¹\Õ¬¬Û$ïmÚ‹ŠÄõT¡hæ×‡ƒ¾ˆo×ÿ‘Vy0XAÄ*LU‡«FpÿY}º>›m3àü¼#ts—X0I -*¢Ÿ›ûùÒÏ(¿vòþ_ž¾/` ‚üE9ÿ«ë­þuv˜á¾ÿÅûJ×\e Önô¨Ð²xÞöÙ{"1pÀ¯Í1žlïëgÒl€}1²ƨ¬àú{ð÷7o^½xî|ÿÑî_(&óƒÌØ¯ÊÆ;ÓVÂï/jÁn¸þa©/÷ÞT,þ"˜G·¾Û†ìŠú/“ ^D¤tÒp\ܾ+q‚ñ6—øÂ¨k\f +š‰ÎÓêŽ,ê•d¸a½ÁSœtÿxÛþe¡›©3˜œ¶‹Zø¸ŠQFê2*¶P/ºbP ‘ÀWq’€ÿ¯ü^<å€(Æ•aqàüÅ?àôiòJ5(û“îã1˜ýx±/+ñ¿´þ…ÿP€Bø-Ý+î¿>7|è‡Oê±23Qé#'Ám¯E^בÀtÐGßd»@ï^ {.ùøRPŒûÊ…œí¦d¥T{Ç)íxYa_94LÃøøÌÊúøÿðÑ“)àÉæöööæöÏ··ïÝÿä“OKÀøï&€ÂÒíõÝæ¶§å—a“Âòñoáå?¥@W @ß\¸ÿA€ÿ§*]søŸGˆ‘U€u+0Œ!Ç?û-k9ú_¨4ž/ÏgõK³³ü®ÿK/½DK»ÀîquÇGÕåNˆÁ~>¥ÎuTü~…|ÀYiÓyô2%éZr´LZ&fÛ›,8Ði¥Ò‹aÖ1ÕŒƒND&±)¶†Êå¦U¤K'úŒóé—å û¢ïÔ‰ŠÇGd Àj}öd›‘•ˆô==°@aÑpR¿bþçšo§(?€™±äê#ù{î·˜7ccc}CKÏ¡±ÛÀú] (æsz!q] 1Øþê3€NQ€.¼vŽ9wÏ@nÄ\ÆãûûV¢¬R@p¸Ñ¥\>//€(Æ€|/)øô½v¹x%?Yg÷JBð/fŒÛ›eÝà?€>å!ŽñÅ–¶ý'ˆEaþ‹qˆítåoZÆÑ®+ à3úþ[…"]æ•íE\ñÐäY=e€SI°PÁ· 1Á€ @Ëp·Ë¯  `·}áâ  ¼:uÆ +€‡ˆÛzËe‡¸é‚” +€Jæ›hÿÔéWBàkü¿@³ÁËß _ËÿÊwi¡Xˆ¿ £&p;°Wª¶[HA€ô àW÷»€„ÿŸ0,ÎFF¼¾þL­ròØ¡¯ Åkx÷€Óíg´u(ü ì×Âþ:Ïò06í¨€ +@8ÿ‘W,; +€’è³ê’}ôPezz8Ë×+'þpøÐWpâôxÅõ£¨/nnÝøðþÃGq„ýñêŠþw@¢˜XkùÁ_æ–p€qÁ¿à¼?àsˆ8Ù{X8ÿð(b&@  ‘íã-ƒÈòül– û=ž ¯ö%óa!>=ö¬£ó_),F‹1òúL ºZÆ+ÞZÐS ƒ®ÚÒ{`éâ”E‘SJœ® v"|üîÄ||ŽOÊÆi¨rÊ'’6g”¶wYºV·Â„HÿËÃî¶X9ÁØG½ªÓӗζ˜L)õ¬df€¥å¥¯´% _›y3º¼íNÄù-.®®ë‡òþ+«ë›«+²õÍÍvü~Kpßûâ](ñNÈ`3‚X`3voûM F +ô ˆ2ã.œ»@Àa'ÀfÏü)1= ÔK®]à^ Ý1´ ùoÞú/7×peŒëarõù‹^j]jœaƒUÂð/`< ï6mÿ0ë/Ñ.ó?•xƒô~“æ§}œq^ø ú +¬|Ð1.ˆe˜dì.sAÀ`\$~`°“…ô¯£lh½¯‘£´Ô qú•?Vž{¾m¼õa& _°ó®²ˆ³í¹DŸö“Å®¿Ð”(6^):Èçë÷ª‰®ÑI9@R´Ðñ3§”öb*’ªª:J@c„GöUÐÂÃÊ6‚’RÚa ”°áYV +%XÉ"v Køïn€Ÿ~ú› aà“G>|°Þ` ¡¨|÷ÊÈ1⤓ÉEÇyu¯å«{$@0ŽzÂzàYk;þ{öp @þ,ôéS<ÀÞs˜DìŠ(ÇíÇLJO‰—ž'Ç«*&_Ý"àÑã‰ú<~lý?bþ»§|º·ÛwÞ;_‚ ÆQåõÞ«@' .¼ÿý(ZvÅð~^€LµL +€v†”oL*ûŒ7=ÐD¬ˆdß©_bûE¢åü§G½6®:!(Ým:Û¡eâãút®L©š§mø7Μ¢¼¤L AeåËŸn¾x©¸á#€?¦»¤ €ÔsaT `ád=»ôƒÿ& ÜÕ@/ÀýĪž °!üÏòW[4ô‹ ¬ÊÙ÷«µ±¾¹¾¾ ØÚbÎÐù½.ÿ.#À¸Q|d`í.Cèkp/@š< ñz*Løï‘€âÀ•>ƒ¤B’EÀMG`ì ²ˆ=D„¸¦ãW®Ü¸ÅHÀæ&€äõƒðxûÅ2¹þq"ÀÁãÏmƘÂÓÀ@¬ŸXU° ÎxÙù“pVK'Ó‹ép¹ +ô—E"†)é½Ñm8ÐÉÿçZmÅõÊÁ/àßÚ¼þCpwAýôNÛ°€"¦â̬|f°>Žù‹&Pö„€Bn®&{ƒ}òþ»cœB  4ί +€¶È³à³—€ÓZ#öEW?] à›QDTGvêå3o0K å0€r+@i½ +@è¶Ï´’øÓ¥ôH‰ì¥&KøïÉ€˜ €®€P,`q»õú²lüì«ÄŒ øŸî6€)CØAbäû‡p @ÌüÜ ëV†÷Õ +à™g´•ewÏæËÙ¥Ùúì,mÙt–3´u›ß + 0tÿfÜ} +¢îeqÁ`šÐuL›ñŽíAVP‰²Þ{¤ÛŸ™DÐö0|xxÌ£q„ÌÄê#ÕüÒl6ï6€y@¾¼¼”`K€~;µ™™¹€¦ûù£üËë__Ý ÙucC$ µ"J ×c³%@CÀ†gï·Àû~ëUìn^ýxÛo(1@…N7ðZð@@åH€†þ´¥Wü~ëÇ~€v@G`` ó.zÔ?‘€ëïpóÊ– ”ž¾¡]/­’Çï·?6ö½q…Í„ãÏk ^:&-¨•kì&È}|×An}Hâ–:WŠ4xê È€ "¥w@Ê¡”²0þÈ¥þϰÀÚf3ð_n³±Ÿ³§ž¦ÈweO1a# +@w€UUÄ-(¯5m›ôêÞÐÏœ¶sNü~ ïù.€ÆuŠ‹‘C ùW)Ø_åe9ù&¯Á .ð-˜ Øý]iØF¯€™ð=õMU[çoKèðl3ÅÛ…ÿ€Y´|¾KHH €@ã$`oŸÌõkø+_¡ À1ÑÙîà‘í„§´±={.åS`¿Ö} +$!²ÛÝ €ÜvŽh ÷ññá?*F€³‰x¸Àƒû÷ïwððÙgŸPBˆßh¿ŠÕ5¡» ½ˆê÷êЉøâs¸ ô?¸pthä© @«N Àˆx…ÝÏgY£ 4jýlÐ_·ßçà9Ï|´ÎäÿIì)UãTœÞ‡ûÿ S>–Ç*P$@·Î€Aˆ˜Ï²|~©æ³ù¤ø' Ÿˆ~\ž@\ìíæÜbF @+ë­UÚû‘ýWíû¯o÷A«»,!~¿9 PÿŸjá~C _ c JðÚk¡\¿ù£PÊÀ’$¼ße)÷^ @\BäâêÍ‚¼óÚE à²^×o}ðÞµËL R®u€pð½…þ_°Ÿüÿr-ûba€Ë.”€= ­—hó߃ÿ¦²µ6Ò;›àP+N¹ÀVà?Æ@—×>–þØáÿ+•>)ˆÀ诗vŒÉBå§öpMS…øŠdræôi˜NvÿÁ}ðþ»½ç«üCjñ)‘E˜JeåqØÁ÷Býe¥€à`V8Ï*58@¾á)#Àõ¡ztˆÙ-5œVn‘*æä³ú{¢t€ˆw˜}U¬d¥à^Ý +@ê +'{øøÁf£rŒq«D +Ó¸6>rdÈ +@xíàxx— &ës® ðº0ß~¿ÍøÏ½€”y¯u€k7:àú•sBqg|ñÊÍ[Äÿ_»~Sà­‹„go7§_Gý¾(À¿hÆ¢3^“¦°ü9L÷ +l``ü\`ÑÔmý˜YOHF¤³Yˆ ×uDÀ[ +>‰Ù(9±dþè†òFà@^ëÿ2Ž%°P ggé-7HPëô#a£NY૾HÞþ¾¢4{ÇåFû(ƒ|$+ó1¼³ÖWó~¡`>b¸Gð¨ÚŽä§\#+Cg¬P g«çl§èÀŒ6`ü‡A`^ ÿOw €àÄa žm"iiøï–À°’8à×ÿk—30΃'¡ÀDƘ¬ZaÔ³ˆ `×òÕS/€„î4õòlííÝ  ˆHoÛ €Ù|åBÎÆvöU0h.vŒ~.׈aÏf”¡ØEmfq}g‡ Z’µ7Û?ç +@÷dÀƒð?Ýn^¾÷_Ô„úI`­åSztÅô̰ÿ‘õéĤ€j*wSÏŰðûÑ„ùÂ!Pk¼)OÀX¿þ'ð`x2ýçÉŽ >NK{4¥ïÛ¾(ÜîãzWÈôdç>ôú28Œø0ÿ0ÚÈ¡'¾vhÔRÉ -Ž3¿Pet¬>R]˜Ífg³yGê¶.à¾XÜ]ý>jµz}¦1ƒÐÌÞžó€ùo"ùol®ãî'ƒ€û¢››;[ƒÌ¼ÛPb?Á»l00üöÛ?˜„ðzãdÇè{I .OpÿCC¿Ñc;~¿¥Ü{-‚o\»òÚ¹‹rñ»À…s€7âÕŒÈÀÀ!/h>}ríø(­â A\Àç9b{î ¤MÓgBBЀ樘ÿð€ù +òs–ÚÓyb×KÎÓPPÊù”4;z-–ÖõçÕ§†ü Å€Þ¬¹‹¼€×_oíiåÍÔÈ#˜3KOëTÿîŽÏ6 +cÄp:! û‹èô "¢…€²ÑÍ/\ï¾3€S*,a³€3¥@Ö1 µ!oß}¥~ªìEÇœFþוtp";ÿZœNÝ'üEEµ¢[ˆ§[Â!¯'[·0þ» ÀC€Ùqî¯Ï 1ÇkÖÜs‹ÍFC[ÃG¢€@×MíBp$€´Ý,À¸Lð»Í'€é°  É: +X]̨KöèU\±¢€jå,_¯œ´Àón®QŸÑñjuneckç.“±$+öˆ5I0p9]‹æÖù”æÃ'8 #Š- "OÖ'õ…ú8W½Ê:vxôЫž’ ‘ƒô£}–Ê«Œ8qœn‘Ç‹Š/Œ óuk<1·m:;Y_â¾.Ш’ ú-èî.uýüP÷˜ç/zêwžÑ`}eÝ¡€Âÿ6z¿P}KÀ¿aØßÙÚÙ¹»sw€í$Àï3bΣáò*(€žuSÞ»õãþ£ cÂO+Hƒ€gƤÜ{­K¸ÒC.Ÿ?oÈG„¸a@øy‹d$`@ÀÁ×êŠ=~âÖ½|^ @÷0z ÐÙe‚%‘¯&.Ɔ/<°ìeZ$~ÌÇéfG*Ÿp®:g²@/»T(¾‡<4‚ÃQ´môL +ˆ­—PÙÆç¢€ÿy(ÎB¾/úÅ ØÐ¯{Þù­Ô(ÑÆ^xå,)5ö’²Ê,)i€n€ù{¾ø ¡ ÑÓ™ÿÔQJ·@ ÿy’· *æ:Ñ® +€ÁŸwþ¿âÝ#6˜Îs[ RÙÐß @øÿoôÆ$üg$à÷×›•á“Õâ½™/6çfª•“¡œÖòøHx-Bà‘à ѱF°0 @1€Þ­'ëSÜ €ql=MÏž  Kp @µ&Ws±YW6õš|»[÷ïßø(}q+Û|B°`À=Œ»i@ ÝmÞ_‚á·ƒü]ã°Þ£@' .’ïG`Ù ^ÕD„þÿ.F€ðµ?P¾í§›üÎdsù«Y[N*Ût¤;à4#ÜÕ—g§§§=æÝhµ>;œ ë`¼†нÛèz‡˜_wøÄè‘Q'‘2免:‚·<:êÁúE)D*N>r‘A9û<Ž5y¸Ã݉Ñ)­I"ì>1&WñºŒì€c¹ÞSÃÃSJÍþW SN*Lþ¹MéFƒS‰UöäkaàØ¿(S_Éü ’X>Æ™ Ãådá>tCÛÞ-*WÞMóøøCÝ7”w¯ S&/-]©äP*-ˆ8ƒ¡lý%\/Bˆ S/€—O7ûOŸö¨ÆÜ1S¦HkK± < +ø·WÑ0(-¸ö»ß~ö›‡Ý +ñ˜çؘ« ¡˜×ë3µ¹¹ÕÕE+{ÇéZ¸Ö±Pþý–± @}·àFyò1^÷)À; +ù+?r3¶³OVpŠ.@iwˆ@ï?‘™E}—F}†ÑOò &äM(  ïÿçÛV~Å(} +@ÙP(&_± À!㯞^ÚÍ{züžæ8 1ù‘µ>'ûbÐè]¶·å­V.Xjmç³Y»•/·Ø}7ÓѵíÛËËkÝYn-/ÏgÙ[õùúÚrmäÛ­ùÙùz=›òpAc—.MUh?!L¼Ò‡pº^ºTo›šÎæ/UÇÆ¦ä+]¥ž‹KŒMeU]<-B8]ªWGÇÄP*£Óõ±êð±J](]Õ1H4=Ÿ]š®Ï. b§¦TˆÒ˜e:¿youêÒÔ%Ñ“©iUJîxU0œM‰©dÓSÓÓÊqzzVÓ³ùŸfÓâcÓÕK£Ãc—T‘êØÔ%•«’™û‡®ôi™­Ê—¯^ÒrøøjGÒ8ŽÀ‡.Í·g³Ùù IY½Õªù6·Qoœ|­ÛkY#[néŸx­ÕÚnß»ÝúHÈ¿ýá‡Û­×lü¼dú½Öæš‹‹Ìö³Â`À û³"°áð?dá=­þZj½ƒû °'ø‘€³èÀã4ÁÂnÀHføí·÷nÝúàB  …<_8ÏŒ€ç÷V´2Üï¶”{¯¸Æôÿ"·xº!ªì‹—Mnº5¢[¸ˆ«ñÊe”~ã´÷ï28Agóà @· _žU×0 +Zî6pà +©¿ þè2€Ú•Èž‚8ÊÚíŒ| ¥Ôf +&ˆã˜þ¾éO­cZÐt`€|´… ÅU  ~^x÷T' JÔA€(‰”oí¿à€èM0/ð?åRu…°Ú6òÈêcÌU]à÷ŠH +®Ó’Ö »a€‹dïÌ)ØU±yŠ hC”åâCðœÀq¿üc^@fLâm3b ÿõ.†LA€Ÿú›_u+ ïß¿{ÿþÖÊœ ¹Ö\œ£A‹õÚDÅsˆ +je<=ðÎ…¸xêÀ»–Ä + +wkµ^ò/8€ãî•öiS`«4tU"<3 y©ïp÷I^§!BªzÕù͹³Ó~‘Ê=03HEˆX ë•R­7æÖ×›ssFÖÌW7xœévWß8 ïÿNÛ +À¯?  ÀÿnÀþ¿,îõ—ŠÿE/mXêß«@' .]Ë{?½ÊýÓ"À `ì÷\'ûcè`¨?×Þöæ›3ß­Õ¾Ë\@ß=û¦–éï[«½©³îPŸÑ»&¶3>)¼ª MÂñ€/}Ïí8<¬J{h³Ü½¤ÿS[J%Ó mò>ÐçS'õ.N¦{sT÷ÅG8 )¥!ŠI+IîR޼4rô%’ëPdA¿ºñ‘ °ÌAb¥ö9ˆ«}bü¤J pDlIÙj¥ì8xìhgüJÛ°rÑÌÿíº Xmfü,÷¬f­nfÒwûÍÆ·è^É oj9£ûç›êp?Œ*bübuPîÿâbÆô¿¢Ç«LùãÄÿõutÿMt(€mDZ³ƒÌ¼ÛPÊ‘yĕֻW˜áw—Ýú )Œº6À“¨€ )P@ýCa=®‡X0Ú°”y¯AÞ¿yíªˆEÐâŠØ††øàŸ?¸i""ð·e@‰ü´õ‡(PZ ~üX¹p}¿èoä÷°kœe½Ë±8¨`#±zÄÇû¯g¹¦°ÈÌ/Ÿ)Ú´Œ "ú!Þö~Ê⥈ŽéoËŸWÇüVW m +$ñýíú«V¬PðòÇNBÒP”£/mN#|Ô0›Àô÷*zørYn¹H€–E €>ÞP)vÈc%7èÊz €,à^ ÝKÀšjæ²uS ?[C§(U¹S›ra¸‚X¤æ ÖÖ7,µ<§àH¯Ò±v) ð›ž^éç­_º~÷+ÍêÄ ó€1@ØÊÊjsNX+§@öE[«ƒò ²œ6gô¬Ö9íÍxœ—Ø×H¢ØÓ¶U:­‡:.Œ¢‚k妬ÉÔæ §$5®'ƒ€=©È¨VŸCµô‡ræLX7DT!žtàYh&í€(?9úRYÓÜ8Üicç[2€ÍP>éÌè€ýõÆâ^§›ÿE dw @Ñ ÞòΠS)ÙA>!ÿܧy:ëþ^/Š:ÚÌžò¢‘Z«ædâÚ ÿôIDAT­ñæ ÿú»éŸÄó™†p­ñ¦ÿid:nˆØ\­š½U= š += ÇXUÔ×Ú oõª~©Ý“Ç8^U¯¿³ q^*ã¯C ÆG«ãC/)CÝ›“L„ÁYŸ&&x>yöÌÉeUÆëuuc:Ëññ׿=4n¤wÖÉTà”˪~»:¥tº_ä #Uð8×ðÿ¯\ ÅG‹ù+Á2Œ‘9•%úÔ†|GÆ'u·š++µš~$Ùœ#*ÿxuNð¯ŸEnémdé§N‰2~gü¨d.À••|5÷ð?4ˆl­o¶×iØÙr;€ ,w”Œ¹×à÷Ûë?쌠ÇiH”¶ú ¬Ým·nýøÖÍ«€è‰o Á'ÝPn0Àµè•¸ï +iÈŸ»r%eÞk"ŒxU3PWÀùsQúÅ‚`W¯]·@E´0(¯À~ÿù„ìû3·äƒZ'À{±ö²ßìü +z h6:íÙÒ%éR-J”–Ytgϧô›p¤H¤íˆÏë³ ÄVd¨·øFÊãÅ£?€áØ +vHX\¾>6Y_ ”Fæõéå`Aåë8UÝãWÎ_|C­ àTÈOF`à?ÙÁ„ýñ=àÜU¾éÑËZÈJ<ˉŒI¼1·V£\wK‚µûÝï>ÿô7¿îî€Ü‡å‹«‹Í&ÈJƒà +S‚äz>§X X:7fèИÏ yØŠõ¢¶ôD²eM¥¥±Áà/aG~)'Ц=ÿeõžTZéq5—¥«u9K®VÍÈ¿9÷vöö\3Ó1 +lÔßÖ¶jÁó •¢|ø@œ!”¤®JÍ1ËYŽ“³ºº¸Ê|g1Ì9 +€(À½¿N1]@R +ôÿ€³÷pü;#ž<ø\ä + Û×8ú—{Àã="€²ï‰H +À¡£Û{Û;" kb\™Õ¶6s±l5Ï™º.o20ÀbžÏgyks;¯iWÿo,@®z®im¾4Ì,ú‚âÊÔ*ºÏÖë—f•àÒÔ”6µ‘eÕ€šëuÙ%FËgØaÙ|–1Ál¶Pw‚E­KßÖ9%©}ûÛÚû¶J­gyV¯×@iÀ[Ç—–2&âÏ8_¿t2kiƒÑ M>••ê¡ü¢_^=[Z¨V”NUð‡ÓTNzÌAEªCOˆ ðàÐáC'”šoó–òÉZíVc|&ÏÞm4ò¦î‡ZÛw·¼›ÿ¤UÛÞÎß]m·tu'9Ün¯@®Á$fü»iÿ+nÑs÷¿Í-‚ý¿uws ý_P?˜$Àï·›(i€ÀOº=,P¸ßný˜.ÊãÇ€Ï}Þ~v4ܼ! oTv‚0í'Ä/-N ¨Tho`*€RБs„x™€ÿWR®\S±ä–«6øþ¶·u¶°žó Û÷a*TÆô¼Àí4vø®fY÷š1ª›$XŽ«Ò#Ml²›îP*Nãâ/Ëa[’ÿãH\®S†8™ïË™üÀþx{!lŒ'Ndö¢*` + pÔ¹ Ql—`À×¢ˆ(˜€—J`Ü70w[  ÐQÈ»TÐ <0_?}1eK©¤ô®”Ò– +€á_מìë­ÌÝ”!ü×íÕâ{>—`H2u3 @’…ð;b>ùïÝ1~È„¡Âá7­¶EÄ„𠬡[XÜ\ÌÝ^h_\ô@â͘PLÜaÑó$EíèroÈD&€_%Öþª2¡íQl IîBo%œ›Ë¹BŸ.#ÏE99LV"ÄO¹ÉeѶ‚~™¿­‹T ]®iôLt­ªdĤò RãçۊΙ'pÄ1wÚÛ÷þ•q~çaDž ºôs€/j8ëèz„Ÿ/ì?ð\t”p.ÿ‹q@­ú3Q§i QïÍz ã?@ÏÐ5QÁz/ .¸Ó?&0I gØ”^Œ4<|üØpê:ˆUÌÕ…êX +ŒMMOÏÖO.d¾¨…0î ç§§µ3M›ýôì8¯¬š‚< FѤpËm¯.¿^Q ±”M9Z1ò/UGGIâšdU‡4‚èÚ˜¯‹dP®èŠÊÔE”¯}hI}š”SS—†^¯¦i„‹žƒÃÇ]ƒà +²ÚYÝ$Ø­ïUÜ5U&R÷tRŠqX¬áÝ<[óvVܦš(=? ý`õ{\És¼L¿ŽÕUºýáïk}w‡v¶îÞÝÙºßi1ë·øýf@ÏQ}?PJq—µ»í#uõÄ·J ½ z¾k™m%àÇ|$¶®Þüû/€÷äÝ_xMà½N €°p!)?t €¾c¡ë¯U´'KÛ^õŸgàý™œ$+Úì:š±‘özÍøÃÒ1YJ,#3¯ +¤.§-€— ÿR²HÃfñW +ðßéâb•Ks‚Ó 0­I”ØoCHA`@Ø(Zù£úþƒ¶ÿ(¯^öJ™Vðm±ÊI€\š7¡Ü/a¾¾rEW"ˆr¯#/ŸÒýÖ1èA€ŽpÆKE8«7#¾¡<ÝŸ¬´„Að%ȯ¡Ò”øù›)¡S˜9è…zÄ@Ÿ|¼Ó!‚FÛ q|3€âºø?8)Dz +M3—ñB‰Ê ÊÚð¾M 'Jã\¯j +˜_“Ë­%팜90O\kɆó&‰#§MRÂ&ˆNRz;‘óâ¡Å‰Å·ã¤sŠËÀ»21˘a²bš7Z«ônœ©ÎXt°¡l¶7?t€c»¨”,ÝV™o6·;Ýûç4|t0»»€ÇíÕ  k€/a.þçðÿÔ ‹q¾=’ ì»bP 9ô|°-鵜¯Í5~2É“(Ò +à²l¼Ö”;­]a~i‚^ãdåkà Մɯ tåéÏ‚·uЭÈIŸf®†ž&²ovVX !@PÒéöHÍø-|l¯ŽãBwDöõ¡×ëòÿ_7/ FiNÕGj™HiU3W$ÏĘ㊡å|u|¯òí9™ÖW#Ñ q@G†hËæ‹DOÇÃÃn#×NeëõwkgAIdÆ4ÀÚˆ,ºþ‹¼ÚÌßõ&ÇuÿÖòíP +²,€Š~ænk1{÷|ÿèÿ þ+ÐÒBžÿÎÎÎÖæÝ­»[[Ú"Ò±3:a³=x¿Ë: +€žß½@1Ððû-Àe{ü@¸ÌáuV^ë(?ìR¼èQØxÝìÂýòõþÍ¿ï½ëW­tšPˆ8ó  +€¾c€ÿŸ¬ä{ö:‹®õþ@ JÇÀŸÿûPì]þ [:†—Ä:®¶ãoŽåÕ3EÒHÞs(¬ôÿ9¯…–àÙè +°±Ë ï üåªXªD_ï?6r& Àÿäu30ÉœÉhÜ*Àßk•!0–E?ÀÒÎà“»ÔûsYÊ»P904B€œQÙ*ÊÜ%š¼èUd\K"1ÚÎ AÎ|¯x +?§Pâ‘Ö6{«aIˆ6€ß‰|öÙÿ¸KHøO“z¥æ ¹du½eO\Íl!¹!®° Ö"àݥŋ곺ÚâÁ²¨-²`vQ[Ù·!Ma¹³Yù~‡#ß•Öʺ^qíJŽ€¿¢|SFZÑy)Î*Û¨ &ô7ÛX\°2€²±±ÞÖƒØÍÀ#0l{›¹€·7E~à€)@·û/+ïøó›Ú¨]*ãE/€Þ€¤ ì5€VN&;˜!p~p‹ÝãÀ‚T$´ßeùÒr~{)_j×›-a?à Îh2¬Õg³†üõF~¶–é˜ãMŒƒ6íU+bSC#´âF@]hšÙážœ¶Ù@xzJYbðeL Þžòæ'Ó" f6ZóY;0EV«ÊÇE7“W~©>5?9‰„ “ƒM6Ó³ ¨ &¬¡µŠ½|*¥Úaf$TÄm³Ú̆ùb²`ÇF'q¥ëyý›Á“’ÀýÒýó€Êy–¯¿ê-ÝPQª¬•åËkËÑË2ËâoŸ¨é"Ñ-Óo¸;?Võk2þoîøÝ`ç.ñÿPÁ?D`€Þ÷Ûë7Jh06€˜Q¢ÏÀÚÝvKFG¼×M…À8] +@¡ðïRb•°_¯«×öƒ^7ß撚üê.à2Ý¢“¾$¤ÃÂ?WõCû.¨OÖsœEù§X2À‚ë(ƒˆúiB—bÆêºkƒ‹ëµI;<“°V:À›\HåÈš˜äUKÊx•1Êü„Zo‘Ú…kc£¥’˜¼¤¥}•¢“T©¥BŠTEQ ¢6®ØÊ¢žµ_ ûù‡?ßþðçnoßû䓞¹ øÇJйá_ÄÂS±ÍR/  ß«@' .š š ˜~Î^xÿH +ŒàkÑ 4Ê<ºŸí²\ ОY­ä«êý–€œýûe¡ +@­Vÿv>!aS`LŽr}8š„Ë•ª°4Œõ–óÉðP–y‡„ûr»½2øÖ³“M²Lf¦QIî|²ú·‡ˆÓz2þeœ›‚–(g<ü9è"SÕ×+Fjá?ÈÏÀ®½¼>žØ ééÁO87;?[¿ô ­“ߦcâð‰—Ä<Àáa‚ÙɲúÙ]~ñE)kÞc_žÎbÿ?Î*QÂÿC‡„…]$ ×<h x–ÓRÖ¥)PŽEý€5­ò¬@nqxú~[ +;6À¸· ;õâ úŸ%›tBhÓÿÙ;1æ(ç‹WÛՉřWÊqlºÖ³8½øŠ¾‹|Õ£Án’%¨Ø—%@Je`Ø +€m +p7Ð3Æñò+¹;yíXÛÃ)Гa£-ðÖc<’3fØæ–Üê8iœÖÖÞ‚ë1âÉĈ,²­oyËc‹+ãš:°µ £ÐižBÝÒ¡­Í-€\Fd@a[ÎQ¯8Ê5Z«Vž¸\Â'ô‚·@/ÄXd.ue±É‡U=“92M¶óñ¯>ûÔs‰”! KÐþB ð?¼û¢@m»c„îœÙk._v à+B釤qÈ–~€ƒb„þf´vøw™pÉ  UÏ-]¿å N Û5€0Í|@ÛxMx7-üsÇR­å_ëÀ”üðÃõa+cèªàš)…t„…\ºªŠèh æ{!È•)5êûì%9ð*µ våÇ' +ßjŠõÚH6…juÂãSMéx Š„«ª'g2 UÜ%0ù +ä31ìRV=)&2UWv\¥ë.Q ‘ùééKT¬þ““ÊÛ8MÀa€aíùÚaÙÌ7}£ +÷ßÐÞ±ö«îb‘1àò‚ýÆÄŠ&€qú``z8€G?ó|çŸßÈzÛ¿îß¿k `k'ð +xßo…`ÿ­Pd†¡´Ýc`ín“'~ ·ü5á¤aKðyîÂyÇÜ@Ý}RË~ Ä~§Ðêý† ´—1P«¹P®º*ú†…À)®“Å:v‹ci£ÜMF&a è÷0dOg‚ PØÆS»nãgœÒÉŠ…·q¦<q÷Þ3g +ëàq^¥êÿ×ûLøéqÀÃÎ"- àZ;y}å´\i£¬AXü"‘ŽØ ´è¨í ó¡è} +ø/±?H€ äÒÇ´@1¬©lpÖ(Ú†2¸tØ¥*Õùˆpõ¨¹ÓGÍÄ< kOǘÇÌ +Æti_ €pÈ`(…u€XJô`(ÀˆçÏW˯ÙÜ"n:0ŒSÏùÙÀ³¨M‚–›z>è(‡˜.$¸ëÐ0¯·Noî¤Ô¾fx=ZdÚàÚ-ŠØÜUÐé-Æ!羈’*2Z'-åí¸:ºCê6ynm1^©Y‡6uVBF·¹Õ^ÝP +üå¯/•¯ÌÍéèg -áÿö/þõ“Ï>M!øÿ= +@‰þq«}ߟÛ̆i»£h-”Z/€®€¾¹H$€|ŸªtÅ$À?³ý[(öþÍ +€þ›•Ô€¿ËOK­åüöLžgó´T£bgE@ã-6³lî­zÖ¯5ýŸ)üþvÍ`ëíi†Ì9^®Ô£•1=$u€ä穳õ“õooßGf .ছÌž¤…|ŒâDÿÛ¸nÆâA_G +]€ž®MÄñÍ»a¾z‰ï1;}‰¬UÞ½JËXŠœõM%¨–â&‚~fêu +q†KªÈtëd­:†pâä𰛎ˆ$©Á–5¾Y*º_}àÝö¤[üç牱ÈóÛZòUm&n˜qž9nÒߎ/¶îÙÿÖùýñý{÷XÀýÿ»Œþ§Vÿ^Kˆßo@ÿg!¿×ÀÚÝF€çLqx ºEwûÜI°opOÐ_˜1ßoŸ-Á•÷™ðÿ–Àù çE¢ àÆ @€ ,ÀµRHÀ +@–kÆfËkoÄnT»Ì̆,ŸÊ% P÷4pHw8à¿K ÀX @,8qiJR¬½L'Óv¹J‡¸º¸´´.üçdäžž+ȃLˆ)ü=þôé,Yt÷s€Ð]`:DN¿¾}bÚSñ}1dã& +L€ŠIœ@W+o¾Œð¢–ù:pб…J@—¼|& øý4ó3`w €™ ã$Ý ³à øG@…é® }!À€¤o,9¬60,€~ëÉüwõh6š‹¹™¹leµ½*Àhmü·¿¿º³¹%(ç˜[õŒ¸»ÉèàÆxc>d€ÕÖÎŽ¬3꾑9M#"`ÞR6¦ô-âç€s”Ëà)FL"r&ïˆM†vóठ‚á4e² -®7Ý0gHË`5¨ø>4oØþoßûåoÊ@n·Î}B0ˆ›wü¹­Äi­ÿE/€o¹@`~À¹ ¶öN›˜~î×R @jèS"@i<ÄÀ¡C9CÓö¾–ûòO[yë͹h0þÃü‚4¡ÿœ0‘Vn€\€,´óH¥¡D7@aÚXuJ´}h¼nQm}Çn~}¡~€¯®ÝdÁæé0(]ÊΪ¢ó öÓ1Ž„¶ªý)(Õzÿ53‚º¸=^Ïí¤Ïξù«pN²È‹ddµ“møBÚ™ŽPAWD›hJôîÉ)÷F F12*,«ŸmÐøïwÿeô`ýŽnð’»[0ÓBXR&¸‘î`°¸âŸÕ¿uÿNüsÓ¯’À€h-ì/¦ ëÞ÷[W @`(J›=€ßc7ô1øßÝÀXüœÚ ò­¢ã÷v˜Ð^xϾ¡?N\½Öû×ýºõÞµ‹âý +#^¼"¯þêõ÷EÞ»&À¿Âøjr…é<ð?ÃA ÒJÄ í)kÏ—(^þB:¬wBûÝV -‹½ os `3ô‡yß@žÌ’q-oãhœrR{y(m•áta½øçU^ľÏÛ@ÇpÈ;# +;½N/öR|_ˆŽN3|Ì€o°õv(Ÿå2†DîV0e +€>ÊSà î┿pêŒ\úh³çekû¢;ù; +€²¹x‘î|!*­"¨ 'Oé¢@¥ùœ¶ˆ |Ð1hÉà¯ã«oúÜ1±âT VF”àÓOե觟l}#oê‘'°B `€(.\g”uðßAÁ¨ƒ¶»Þ2^Óeˆ5ˆ,Vpï®ÝÕ- bì=º ‹\Êîææ]1 c¶V"åEÀü¦SÞ_ÐQ%ƒ}й¹:ã=.ÆT3–™ò "£'dÀƒÚ£ cÕ1‡¶í_øuïãO>KÃøŸî¢,nmýÜò禀u·ÐÕ /_¶W/€N @ÿ\¸ÿûQXöÏpàqB ËÝ1Ǻìò÷ÙZ._YT`¦±2þ²úŽ¿7ZÉÃÍ'h(ÍÝø¬Õªƒåé¹7V«¢õíÁê›±¨ŸÌ}Ày^GŒ¸ ºü}á.Ø[%qkœ{ñ’ +å¿]ªîõ©z­Þøftø¶ÐŸ1(.Î*Ýt{¼–ÕQf™Œ_ùΫ,Î |UÌ€~@÷ùõØ @¦u±Ùc_•¿¿û•@`0@ ’íí{*]võªCüJ<`ðPÀ”õþõA +€ §Ø«7¸ Lõ  Lâ3@âžôߘ9|‘8{}|„$ h‘¿×âÞNô1&üh†À' ¬¹ñ û±ÈÏy±bÇï´åc:㣱­uL[‡)½d»ý¯º€tZæj‚ÍŽÈÇ8¶* ¢õ¦Èˆ#ý8ró÷Öî kð‡ÐWO›HÝ +€²Ç/cü6ü¢Ð@` ?ÐÆ)+Ú:üûT¨Üï. åÛ @ €•ÿdTÌ‘”öËTø”Ü’•a€%øô7}˜à¿3°tgsuNÂLs…¾@üúõ0=fc1 á Êy* jP×ö&qC>,^ðàþÎ=mìÜדÄí‰ 7.…)Ê›nE~Äèø]=gØQà±ÃåÀú£»žDD"h‡Tff<›tFÕ!cr¥h• +05¦À&ÄmîŠã´7×[++ë:À}+?ðäöÜ+ìaÌP +þ¶Àÿ/þ…ÿý +€^©€Ç«¿W/€N @ÿ\äÉç€s¸Àäó6tlˆ+ß8èÿÕ"_0±×ZÛ“5$l3ð7¡³¥²Wky + À‚9ö ¦{blø%úåMU/…WýŽ^àxuJ»œÊ9Ù¢y©_%s©‚R‘Ð"ËÏV×Âÿ?±.D´§4oȾ©Ê;ð®N¥«±mÚñÉ|^…€ëœ¨ÊWEdËõñVR%fß%PHIB`å¡~v¢îÑèä8<üµC_9\™Hø¯}£D²ºõ†éÈòyAüÂ<ƒ)È~Bà³ûiˆ» k¡•Êøx­Zg®wÐ;÷àøÿ+–Éàü; ÀÏ)~RVúï?|œ¿Ïâ÷Û—£¼'$¾uëGn0˜b†-_;wî|¯Vøû(,8À‚<`ðPÀ²[7¯]>sžû÷Âþé À„óÝ +@w@´ô‹ Øë7¦c ½±ð½ ÀO‡HÀa– ó»,ÝR, Z¢I @÷;–rÔOä{= Ÿ*öÀr½Ý €ãœJWÙvùÿÎSB‡ñA'àºdpC=N>z£¼zqêÁ×Ù»ÛÂy(»ºŽ¤¬,8¨t²*‹r¶¢qîí "|‡ÍuÆ\ÝØº¯Ç¢9žàŸqˉ"0n` 0ßàòŽ?‡ %H˜µ‹^f ¼€üÀsРЦLÉy? +€VI88v씉HÅÀ^h ¥{,C¶ÎòÉ™ F2!h¶è]æ±÷Z~îd}` Б„óc•JuddjT˜í~}¡8]½ž7`ŸÝf4^®1 wY²ùDvüŽ+õ&æ0Œ³œ™©g€Ž¥ë27ü?Ïrš– 4@>¨KUe~oyá{ tôU²%*RyDŽ|m€ÁˆÔÃtøÚW†+cŒ&dF÷#oœ]A ÈÞr+I&¬Ï¸a°Žù¼E\¥`MÈ¿´”Ã*Gd ÖöDsÙâ¢Àzt­mÁ÷‰í…öë×Ã/I?F>|üø +€üã^HsFh]löZ·ã/;à&7®2ý0ils/ïRJØï6S‹×•=fB¸vAY^¸2@@¸‚ð5ÑW,›´B—`'ÊÅßצ÷ÜÈ(oÀ×FqÈ;$âl‚ýÒzàòüN‹Àï¯*™î<0\à¿…NïÞë,9ÎËk›v"€C¶8.ëÃÿ2Jâ×ïu#…–á7 $Çä’ÆˆÝmE€.$©ÐÞ ”L@ÍA·½^|áhÄxÂ=h¯]½¬¤(›Ÿ`£2lÀ0}F¥¾@ø¾ŽFë@å°I]Ö× àâÅ‹LÌuÓ׈êD+ÂEǸ0›*Fø?½`V|{ôE•Éd 1ži ¼( ªƒÿÀX‡ |ú›_Ò°~{]äL¿³µZ« ×çõ0.îlÈ+ðÃK7lñëŽ ÙhLg!ñ6Üß ?þ?$rHOÄÂëgÓ0ý@Ppòóq:—ßøH ½î>tZ%!=‘Hʉ\©“«d@¾€¶J2"/•A2“…»ÛÁbVWçW6ô• 5mžr¶ûÿÍ/B¢ 7«l°%øçæÆ}ömûÆPxꃀqðÞ^oýWq€ÛÀ?ý•=!f2†ýáØÎ&ˆ&ÒëqÔâÞûé`àub‹…Ãh…:«…uz€›vD.j;¨ˆ„à l>âEë9£\-G‘ï?ÐûÁ#¡}uD)›AØëW<✎@-”H/¾Ý!€ŒuÜÖ·ÝÚÑ7N!ë‡Ýÿø7Ÿþ 3 @0€@ÿD‚aAž‡œJ.}À4 À~¾°ÿ€sX5ÀÐ 8(ü;Ðaƒ{¤NÉ%#LNè´°=YË“ ”·?»,×ܧhMF¿ö<çô[`§ö5†Ì«W*ÓUFÿaD?+ïKžç'›ò*£ñ–ñV—˳³ ß“§;‰ëùxMÐmhO(¿ìãP€y–"ã+>D—=-ê5€¼î¦…ùä6ó”˜ë [ie-RhW)è, z¢Š@"(‘n yX‚pÂ1ÕÑ)*©{RP¢Éõwó/íüuS–XÎçO®äóÈÿKËÑ€ÉÈT6C`Ѐž€¨ÿŒð…@¼ïæD_ù.!>ü’ü+ÒOòÑÃ*ç_Æÿüj À`+q¿|ñ¾ùÞ-zäyŠžä\ 9AÛ½€bƒu' gn`à~·‰\¹ðõ3*(u, +Ç»¿~ëƒþ'ªsårOÀEÁxTÏÈn×_+˜6|Ä›/Ó!KGÉ£›®“¥;TšE­Là)Ò» ¤—¡Åðçà¯QdjÈf™ÌaU.€u€ØÂbg0þzç8ä—¯N­ä6ÇXóUñb¿£8sË: +ÿÇàì Gõqëa–Ýåÿ‡ 0à!€S/·$ Ä7Û±O +Îý)d~> Ê[›ç™Àß$AÇT!0ž±~Š eNÅùZI8GÚN äÍø(mð\ã$ô/á?q€² @É~÷ÛOõ‹µv«Ýþ¯ëíÿšÙÆÖæJ£r²Zof+ë´Òàvq€{ö÷çzã8PÈë¹0˜'чôDÐsâñ#AöÃG|Ì:餠·–Nª$z¨xKÏÀýá]á»L ¯^ϧ³Vkm4Þ ŠKÙ»³Èþ :±¼]Sr•¶¶´œ Ý*.f+W¦Ú\n»èL¹'l—½rO^ôZk»%¯ZÇ ñëyö®NS×çC¥1žçÛ-×r{û£Ö²Àmh€ÒÌ£U§|MYm¬©Ê ®ˆðVùä4ãç—ê³y^=;Áðž„ +p¢2JýZkwH¦¯ÿn«UÓí3ú·õ­t‹Ú­>^Ó6Sÿýk«vïvëν{·ÛKËúú…ðJø?Q­Ub16³E˜¹ª_<ƒoˆ ßº²H€Óü¶DÊõ“>pãúÏŸ1 Ôóíù€¸ù…ÅöÂí@ƒê`®Üìþ€Fø?îÂýÒ:…t½n¾ÿ¾À™S"¡ÜøQ¡ÐþÈ߸ùÁ?ÿó7¯_\ë;– +€~¼}§2®—¾}ÂxŽkWÛqЇ¼ÙÅú÷â¿-Ý¥ÒÀ˜báõƒŒ/ü…¾0™uåWäàÍbáÃl‡Ê‡ØJiúñŸwÀ>X³K å}¶Ÿ&²ˆÁ~pä1{ê® ?gl"1€`;LÛ°†¤„ûŸp_T¢PçƒïW¿êS,tìô©TóRP%êQÎèO³@©@F\ÝÓ¯¼Ñ¯²`DaeäæÈÝ"ïÒhìÓŒJOÉÀ­dF³‚üÛï>¹×.ŒŸ?B®/ÎUF&fæ6_ûtázfdž^FU+O­^nL@í³ì=~øä±N=¶ïSîƒñøÂvdûG÷åªû=YH¾ßü@W>|\ä$×#Òܧ¤Çâ ;G¢ìQdã~ +$B‰!(z{³»z®!¬,ê¡“¤¯mûÍg¿ùìS^iÿ#@w1ÝѰt—ã~ÈFN~s—à€¢ãüœ ì?° +  = `²þ÷p @w®æ5…}krBŒg²FWFhŒ¾›¾߈ñ¨jµš¿á¤Ž×¾ÉrÜ%‘éèÅôúÇŽ +ª¡ïEˆûÙ“N“ni'Ç¿Yã®MLèš$²$ƒ0ÅVíìj']§­É U#®á)/Ž •c™eí(8ýF…#ÉZU—S‘²&¶ gEUÊÿÁ¸ÿBúnñlj‘uCtÃt{ÆuÓþ¸Á–Í­@:T›äŽAß<[Þ<¾<÷ª´ •J…=&³}0xö½cœnºÎ˜wè§s7zððËÔO ` Þ÷Ûë7Ý~'0ä§x±Ͱn(Ž×Íëú¼wëf™Ð2 ’íŽpcÏt À.óßm·Þ¿ùÃsg¾Êd@} +€ +„w\¹þÞÿôO¼ãÚ•ËW¯uŨf®ð®ê±Ó…ûöïµÇ¦ß„Ä!³¶‚"ºËÒê˜Èù¼dºÝú/ÒÕà/ÿPaüUºŒt|ÂØáÍ+ŽM¯S¶¶~üO(_–äJ“ØgLR¥`— Q ù"•+÷WÙÉb¿‘ßZ<æŒ2P.Ê ç ”à‘ˆ,ÃêÍ”Ïõ2ìA+ŽP]¡£Îî¡[/wv€Ï¬/6ç‹«(ú¾­òõÙgŸ®÷®1€Àÿ ¥ÀMŽeÜï™À’?ñÅ%Âç˜ €ää{¹ÜþPø—‰ )[üÿ!JÙ+ Û<ær²ÚÙÆ\£éMkÿõ™F½1·ò“•v>ÙÈÛë«yÖhËÍÅ–K®È™¹å¯*y£ÙâD#˘ª^ÏSl>qz̓糭ì-*ØhdMüd¹Ðòƒ¹ˆ¡æ”'ë™É³5­bˆ¨_«Uëµ™FþnÞÊÆ}¥*Ù’—O']4SŸ«ÕT‘I꛵Z-GåÕê ¹Ù]õµ@ÐüI¾RSEh>(*‚ú±DE‹qTyºò5‘VòÍáòþO¾42R©¼TªëÊÕl®ÙZsÃ…ŒÒëõæŠj—Íe«í­ÿW”­ +ØQMšè‹M¾ô"‹¦­¢;† üg:@ðqqŽé3ZÑ `kݽq‰¹ ÛíÝ-ý(ýׯm°ðL€ç›þÇxÆu#F¿u!zù-¿\@ˆ+œM é/º€6þ*{€+Î|À@9' b(Pe}ðÏÿøm¯\+›€tæøÿ€¿Û÷y³àHÚ‰¤2ü§ÔÅJ{ÁXºY÷ŠE?¶bð­„þå/2”ªLa$NÈ^®âwcÁ [/þSYw=}º$Q­Žy$@;αQ¼´?¡º”ì…¨C…xú ð‹w{ÿú8V’ÉèV‚ Ä9¼+ P(4ù¿ ð·Rër}1{úìqX ÞÀ1Ï›tÅxYö(ìÌéÄ5ŠVGið­wi 6öi SñJÖ¡VS€Ï>Icßmo3Óç@s¦2RÑc._dPâüâ‡# ¨Žzü{îã'†küoÑ3ß]8 òë =zx¦ÞŠ¿¤Òµ‚h- ´<òs‰œcp C ‡^Àxè¡Üw)fp€ÞœW–Ê×ÌÙ¹ì]O[/tBÛ~g1IlïÕÖŸKùJ¶}§}çÃöÚòr{Y)šï +o'™ÙVh¦ n·šõzÌÊ7æøùú[^¢à²l{¼…ò½´Äry¹¥Lòµ;€¯vŒÎù¢ˆÂÒrsrü'Á +áVÕ“ Ý= Î;:¹ÝZ»³¶ÖRF)E+o´Öb3Ï×ZY¦šûT,"~¡µ´°ÔžQ}—É[RÉmgr‡Š,/,,+eæ.ûèÿo3}.e„4V«•jÅ“W†ÍM”r{m­Ý¾#2ÓvûÈb~¯9×I¡ý@ñn“xzý©¼w0õÉï¬8¾"V'&fL¸fÞÌš‹M‘}Êý÷ þý¢}Ü%¬G?#ýjõ»;`€4à$¨ðjŒÉºÁ8^7¯‹‡ÿ @^ÿŤ•‡pY°|®`¬ï7ÄÿÁ` …pêÌù+7Ü‚¯]D|Cþó?ÀÅW/_I +µÑ2¹óÀ{„ø öA|ȸ®4>ž ß©ýaÛ¶ËWž†ÿX¾ÒèchÝ…¯NøßÍ,|¶Ët½—ÅÇû]›,‹LûðŸûŠÅIÕÚÉÂ\¯Ò’˜ßgÑÀµ‘VÐ]àÿéÓZ+áÙÇy1€¯º €ìê­IèU„Ãâb ª³ ¶“½’§>äHÆhž'!"~pþ⯼t@îú©.ìŸ&°WPÕœ•ÀiB‹›£oúü +@˜q©´þ§0€„ÿÿ׿þëíÍŸû•3ã& +°¾:W¯Í12Ší€¨4ŠÁ„ÛÂa p€èŒ@\'uú¾‘ùñg]°bB Èïù\ Gigž#䊣& Ð8pŸ'Ž®DƒÔ¥bòõ=‘A=(.b_ÿ¾R>Re ¾Ž@@£˜Êlnn¬.ÎÕiðÈç««y8FÍæï~÷Ûß}®O‡&K÷/ÝPYÜâÎÝÞ¿ ÿg¿14  PX?½@¡ýʺÆø–

Ø?¿<:ÜßÛ@Kˆ¿ÛDô³ôxK ÌèÆ‚.cèÉGHmçËn‚Üè pþY +€lWû?†kß÷¦sþÌ×ϼvEÄÀA} +Àb7o\ëSìøw[òçÓÒ4 YÚˆ“å¦énØ3Lncºk¥9Å¢ bÓYXWúvÙ 2N¸ŸÖ={e®Ýø?Àù·‘ÂUŽ„2òè¶=š ]½H ~§n§fÎs¡?€ð€·^Љ¤š£€{ ¤s?.¹Þ¨ Û‘ÿ!f§øfûu)46¨<Û¥hÛźmB%qŽq#c›GÄØë ¸=(å YBŽ}šá(à) !X' +@ àßÿýóO>L€‡Áš‹ùÊâ\µ2•XÒ‹X~âóa®a‹à{­Ö¨Ñ`P‚T¬® E©ÔEwäû„0r²|¡=÷&ªÄ»*}ž¾Z3Ñ"œŠâÓ]Xh¥Éÿ™ËpfF‡¢ ¸°§Ë¢+Ц'‚è§ó@?žù%YÚKpßgÂïB°gè‡`Æ` +Ðíû§—%xñ-&éð —2"`¡£¯ÑÚŸNv! ó{L™÷¿E5ÞØŸ;sêÔ¹+7R Äàúµ ç_åUæµ›?þðþõkVP`"*‰ À®WX ðl”§Ò*,6ù$v³ ú¤×1Ž%øO ¸l>'K º/)2µ½èʳ ÿù§¬ú –ÒÊŠÊ…¥^ä®—w“€T^r*ûõv;^rdüÂX\¬WårÔä%¯h=PÒqŸ:«Cî…ñqÁµË·7´#8Ž~üøÉùü„¡Ê‹)àû›ˆ¸QQŒ@0\¼A¸Ï#FïÏ(⾨¼'OD؇-ÐÆ/|¢²õ,R†Ð„=„TŠòÖ e É€®ðèòp€| ¢V›ÙÜLÍ3oŠí4ÿ³ àÓ {(¥`à/P¿³õLC`žu @¿Pöð8Ø^½ºBºúæ Ïý(,;ã¸m¶ßU¦‰>'%Œ|@~•½Ž9ì·×– +ËÎ2Û_¸ÐB«V¤SÛ“x´ôÁ3 Úî9'L@rò• +'Å`Ê^ À°/ÎðH àÉgZ@/tÕdÍîžMHJHN¢%ÊB. 30À‘š67ÅV›M¹=zê-Òö™±m»þÿ€€@[Jrÿ¹Ë•oû>lÄÊøðÐÐÉ¡1…à€ñçš à9Fd¾¾ð øŸzàý3@ À‹{)¾€g>¨¸´d÷P´­sBÇwðßÛˆøÔ­IÇ ðŸ­ùÙKc£kLöŸææaŽ¡D`¥_N1Ò¦]n£iÖÊÆ3ã?G +€Õ³ö«ŒÚSL#ÄÀ ôâ'Q+«©"Œ½g¤OÙ†%€å­Æ$ +@˜éÃyoìWÅ¿“µj“RFÝÐßÓ0j@LD/ÑWÄwd^i¤;Òësðß4ƒ!)sÞDc¹ÕC´€ôgüaÝ7Fð\FàŽû˜Íû׫>¿¬–à¾ß쎰=]øÏõ›?úz2žP®öLlþ¹3¯•Mƒè0¨€ëVŠ%/ÀÅsgμx¦W¸â\}• +A‰‰è0î @œeYQÎÕÓªûUœä¶|„»µ_3¥Ø1Žùh+Uà£÷Š„É"_-)Á;‘cïàºv 1D²”Ú¦LdCz=µ ¬KI.|-šð_yù4óêè¦ÇÆ‹LHÀ|" ¾;€¤©AÚ÷; +€`×MQN±ïÁ ‰8|+-ý÷¹õFz+çßÐ)+ÂÿP\Ü™Wb6`¦cÖ/0K +&}Ó/®è…±´t6 àçñ²ü¿Ë•ÅúÄððÈÄL#ubTpO f‡ ø?θð™erðÜÞú +“åõƒÎøÿÈBc!;ÉPçE +t©ñZÏxÂýÇtÀS;ˆ(#3³¥B@~íu%8ÿøáŠ„|˜¹Y€P°_J§…úl1„ª¿¹µµ±®oÙl0ªðŸ¨Çæ\(ÍæïÜðé¿‹ü_ÿþ—A€aÆÿ0ÝcÂþ§Ã`»ŒF÷P¾ùô^Ú°Ô¿W/€N À—1@ÿOý 0Ç„÷¿G Àî^¨„5Ç›„ã—AvàYn¬vòZïpsÏe–œÒ¹ååŸàØv Œ4ê(yͳߦ=°¯8h˜åJÀ6ÐWØYÀpX«ñjË@¢.[¦lZ“Û±'ÉjЕåyM•øõP:¾OW¶]ˆ(謪àzP¸ORÇwº+"’‘×&²z­ÊDÌlàæ €‘²ÕR¦Ì¾×5!o7çÚ1í¿¬ÄaaBî¦.áø»Y¾ÜCÆ'b,`ýÈéhm$S¦ÓÌþ?~¼´©ñ»CnïwYüÝVÆèá~ã;?ôzM>ÿôѵt”Ã5¿õ7¯…§mó&}ÏŸ;w±TŠ{)xö=o- â_?uæÂõ¤À +@Å:@F°w€€ñ"H½„ò,t4­Ê—Nà±GÒýد!yP +¬Nw›#égØgýê=)“%Ô÷"€ßÌ‚%þ§«›òŽ?µ¯è56J +e÷nÀÍŽl¸`(&õ üNÃñ+0ö¦c¢ä@ö°œqÑ è€‰Fàn㎇@ާÁ_rJª)¥TN÷)J«ëÞ¸xÞüÄ1¬TRÌØÿ*QÆÛo('B$Mr´ ãCߎt&ÙÂ÷–×Ð&°í¹&‘…ÁnëÞ,Sš•³1‡!í$u¨TªÕúŒ'#n®¬¬®¬¶õë×Ob]è¿éY?Àu–Htþ>°¶Æïj·“ìÆõ^°`Hoõ›<ÿݸñ£äƒê° Àÿãâ<‘ÿFÉ+/_`æbÎ_(ÿh¯ À¤ümßKÈãßó†$àëg.F`R®F €‡GüàÇ"7®\è#úÅËYᩚ²Î–M»>›q¤°â:î×Á,”ps—þwYüØ®3)‡@ÿ”qâ½øŸÒ´(ÔÉŽªŠ,Ó!Õø´Ü³€öCµÐ¥|½˜?Èè-T‹êäjCHa€›qªÈ‹€·”Že:¥0º¢‘íñë8:A‘À +€êL?@09b”½©JeÚ€‹(b½ +gC0³è0 !\t÷„±ûvYÂ’ýÐPeë(gÿ°¹½µýóíô¶=x¸³:wòX¥2Q“o,Ð2€"ÜepÐÀw§þ‡D +à àáŽ#ýäœ €=4 vèýµè/ Ç—p=SðÔµdÇ×áß?áp_Ÿ_IIPG´§¼,*À9ŒŠ@C€V<¯d"¼Ü€¦Máÿb³Ñ˜©Öfæš«[nâ$ÍðÿiŠìjH·/î¥Í÷Ø·ù©øŸ°ØËñ³BKA¢€¡oˆ(­…òÏ7L#Hù>U àBHÀ P¹‹(ã¤@ J þ›Sê.s ¼0k|›®ìÍ„ƒÂ¨Ä­I÷ÀoÞÉë¾óýï//{ðû¼ý&-Þºš – e/€˜Ä?|ä¥Ö¸ûÉÉå£A]‡ï‡ ümÍ/Æu³`{q–°À|2ñ‡pVkkßo _9ÒÊ]™x…NÒþß) ´ùV^[[Z“õ&ÕÅg¼Œ)âºÙV­Ö¬Õªžpzjzº:- +1Œ€ér¸F~G5‰ˆDåÓ4%2(”€Ô+Ñϳ‘çÛ¾§åd@Ì<0‹ÍýÐiÐ}sc‹3øÕoƒß<¿ ~kú©ï,}—Þ°¤ðïV¼Úmøý²´ +óP@ „ož.ñð½"ó‚èºÃ Þª3/†P«G;ƒŠ‹ŠÜY[f”ßvkûífë#Ý +Ѻ­ĦùUª#øÊ4C%ž<9Î@@úÜÜâãÐ `}}³½¡ú¶~æîõ‹èG'ýêvÜà&~³ƒ,j¿…€¤‡ÿS€ëvþµÐiþ5€úîPRζr€+Ñ0ýéÐK¢À ¯åܸvñܹ3/œ¹pÍ@›D € +¼zãÖÿôÁ­n½Çt"WÝ À  ¨\Ìc;Y¨ÅÂÖÙ’uèƒqó9ì¨_Yº¡˜a?NÇOðiÆß*m&‹L‚„ÿïôçL‰vY”eꃳ¬ jV8ÿ¶§4øßGùE6!ÿbHC|´Ä›$eŸ&Ò'€!°Ù®}`4fWd¦ @+• +>wŠg¿l@ë×i„-tbTýéwjHgûœ"àÅSJL×ÒmÅæ¢ §‡t£T·3•ѱ„'û6ÃSÇŒ]Ø®€_¹`ó³Ž}®×“ÅÊЉ +ˆ,ÊS|𦞠€èÁ ìvÛ:ø|wk“‘‚¡ÆepPãµò‚Ó:!¯]gï[ ŸñÖÎŽròYÀ[W@î?º{ÿ¡N3ÿ$?•ÈÆ¬Â?ä%¶t©*ÆÃŠ(%~DÀÝ»n¾ OÓæÆ:#,8S`$€­‡ ü' +ì3ùÿb{ááÿøÏ+ÝíºƒÆßŒ€.àäÀ‘;½Û­ËHÞ1ƒ¾Q?Ölþ§}FA6Ò¹BH/ê•þöJ£|`m{6ØQ]`Oß@øZщü£@Ç,¸ÛTš’ìRŒÇÚubg¡Dz€sp/¡à8 `ªE!²cN+‘¾Vb§˜ïïüùÔ+UˆÎ9úÐ +@Ï@ªµ¶UyG¼q^5× 2ÕÚ­„ŽuR·•;ÉýÓ½×·ák×jõºêQ£Ð¨Áw½Ô‰Æ·¸aü;|KOˆF*ëˆ*ÕwÐMÅÿ'&˜XôƒŽ¿+y ÀT@úë7# Ÿ*Mdw-¬ùwGÛsÖÛv™z·•½@”¢ `ÀHÐoé²@V +jjɶ>Ì|í¦’]û¡Oì¶BY»¬OP bÂú^8sŽ&€^€¹„þ¡|ðÁo}pëý‚\¼pÞ¡ Q³. ÐY‡õ&£&ñÑýRE¨×uãçsÈ$°6€š…Ä‚¤kÒŸäO~<¯8×k©ñ×Õš(7‡ ÿÍœ«2?*o¾´=z€¾E/7R»® +—ÝH‹£ › x€4  +èö°PÀøýµö™”A¡¼ z„wî¾K8ñ¼|yùù6€·p +ÖÁ5nptaaóÿ˜‘€h¶íVª—Jë„ö´1›Ê îØo?ÿüÉݼ:4<" áí €.–6[Œ €7.÷ÈvxžƒØÁ–;ÛëYøn/鞣4ÃãéÓS)ì¼[>¸Kl¾ÎlÊCßÔs¯]g<€Xìl$¯d}ƒžÉ[n$¡;1¢2s2ÞÚd.â»â2-ô0ÓÁÕÕ–o¹|œÅEæ>mÔ&*µÅõ‡¦/üÛ„þ¶D¸=&aq÷Jü¬ïĹv™½»ŽÕß]iTÇ_—·Z=ûÍñ ![£^kÝff¹A=‹ÒZß¾·½½%S~d\ù¦žøß=ûv+kdsr[WäKþ¤µñq›‰œ[‹xy«r:×›“ßmdù°ïæÍ¥ì­·<ÊŽõº<`0o¿òÛµz>¿ÚjÕå; 3TF¢¡yˆÅð¡!~mÏ¶Š°ªZ«½ÕÕê8§8¹rÉ«Õo+Gò&»£ÃU­±#‡Žåvö[69®kíO?j}øa»Ýþõ=y³­ºþíå×6å±ßn|ç£_Üù裵{赮 +#í·Û­{ù +B÷Ú‡­Fó£{Ûˆæ*R>pS¾³@Ðþï‚RxÜV{MûFs2k-¶tsD³¦}üÐÅ[«oNzÿOÚJº¶Öþø—ò¥¼µvÑõÉdû^û£;?»wgí_óïÎQ‘mU䤀ÖZëN^Ë?VýÛÛʶ¹so;ÜrUcé'K+ªÅmô­mU­Õ|SÇWšŒdlלdDë·òÅÉqÕ½ÕþØ-|Y}Ÿi·Tõ§ª©"­Ö½îèõË;k¿lÖô¯p›Š´?F +Pí·óÆêÇÌðµ­ˆ•{®È»ªRkE/ªq3S!Szdþqë÷±’3î§gú=10¿p¯øÕ=$¼ö¡;‰Ï`ØAÖÕ ‰Æiexè7¿Á?–À5<ߺu+pœ]ÀAœ|olíÿˆìR"àP@¯°þÌ™÷P.\¾V(?. Õ¸ØE?úÉ@×v±õÀà! ?õ š^¦ûñüN /´Æõòû€f´fÞ¿,à?þ†ï±Ttáù«ý2ðÛ/’91¨YÚÞsI^y’Ž;ŸLè(çœù€}ÆEa"?§t=¸åß n&À@‰ïBsn¡˜ @ ‚'ÀºŠDÐ0•®ËQh@àR·LX ñ(áïæŒNë¤A75nÛ à  À%­;–8€€Ìx&üïŠHÐ&€0>< €žÂoÏeÃ…å+L™#œÞ —ó-€ò +üÛëŒ#Êl{€± üþÝMë@¼G…ùn*pãAø€´rØXß"þv®Ol‡ûÖ–'*ߨ ÑîˆLü&x-åçÉ…j‰*Ac¥’ñú +"†t¹ð¿Ñ˜™˜¨T·?Ñ×}"Γ¾:öé§åPÀÝ`—øîË~£lºe‹–À'g’¥×™ 6›Pù1¿ý®° Õj +;WŒKaz`o².8×òfã¬ðP(ŸµÖ½µ¶ï¬m ŽÖ”q¾µn¯ÖjÍõ@$™rÊ[èÊ„ÛÑÔ,Œ‘}ó)ÓÓUÑ×+dž«ÕQÆœ­y¸R9qdX í_èSl¸*RQ+Ïë1Sÿ·ëŒaWS¦Y=ke¯W§É^ÄâØaì'ŽŸ>R1þ+šDò_Üalý5fëÍ———–Ü>ÞZ*ZáiÅ^ûéŸ}$ÀûÅw³vë{´œ·>Ì—óÛkÂÒí,¿·œSHeÌÍ.[µº”ÍgÊÈ‘ù t†¿Ó®qK" nA|H7†B…òÙ«ßÍ·Ô£¡zQöaK®5ù¨]k~èvWd¹u{íûËÛorß=¦a¦ÂUÝG"(·µe’+'绽Òh§¿ò[ú4U‘Àûü^ý섲! +aéOf/yPCáÿÔô˜þ,'ªu¾‡jè;òÿþè­ÉÖíÛ\¸t{Mõ»-òòázc ŒÝÀ„D2mŒ¸ ìõñq½! úu7ôãþ¯ +ÿWWõƒÜÚà‡©~§îéÖ‹0»ÿ 5ÀÊ^<ö à—?™¶v™/ñ½‘à_9Æ0€›W ûQÀŸ€óç=` É;ÐÐ6°?Ù:g€7ßøýê…3g¾~êÑ~"HH +À ¾£¼w#b()À–?Å«³]?°oã;šŸ°áïÌÂøùMèd €ýb}`ó…üy’þ÷g–ÊŒ?¬×áùþÿQ+/2^`¼i¥/ À6ìèŸÚ€ É $×"Jˆ$6H8x `‚© § ˆHíß]öpke¦2>Q©LÀh(ô€¡Dæñ Ø„ݹ+ä|WíA0¸à¡¡ç‡ýîÆ†€Màì™FAéÍu=a ú² &å“­®oˆ_lè±c}agGðWâS*¶3 Â鶸¹Þ^åj¥£_d“YLy~¡-´u¡* ö7Eaô-`¦V­NÔó»Dëë&ìO–æì lðÝ4øÇ-ö«à½ÆÐ¬Íw±è{–5ä‘W_?.€Nµ³IFº `κ·Ø¯î‘éd—#óùBƒÃŒ–ÿöÙ€YAÑR¾NÊhYf<!ûyë'8²ÅŸ«Do‡²K¬kŒ/K\Yø”¶éVå˜q?Œg‡é}Xîºì0‹=ìĹ¡G“3y‰S¤¬§ŒÊ²‘—F9W8Åa3 Ù›aƒû,Ò¾/ð§âà1Æm4ÍÓsO'ÿåÎÏ~ö³O?ÂfèÇß%3æ/,´'³ÉlžÎƒìÎ^ºDW4vbøÈñ±iŸ*ò³Ÿ}ôëö¤¿²luÈxÉkù›íÛ­(®£R(‘ õ=ÒÍrüe<‡læ¢öúåòÙÐÏI` ß ü÷Ç ÿùã±[èè5Ðzðá© +€ñ‹DÜ?¯ ÑÓ§;†´`  o|€]í€ýeÂ~°½pþÿÿ¬'àü•P¢]àʈEBþËoAb €«W._ ‡@²hòçÓ-ü_»áW üþz6¾cñò.–îÇ4C®€0Ž•;6ÃÂÿt(ÌeaÅ5¼uY—à+õrmT‹Þ€m¡lúÃB×:=X›zŠoçè—+ç©"MR@$@ðŠûÆô + U†DT"ÂôuïÈUŽS­ŽWü ˜©0ìQCÄ`ÈõàM°yeU‡›´%"&®´<Š(:âæz Ý}‘I†Â+zÒäX`g«½)ß<_\lé8Sà¦C!8{—fÈM=”ÐlU@Ó“–®,¶6”¯%JÑû-‹ZäteòDF­u·2P¾˜C¾Ò”×ì_o¨özÜÍÔÀÿ™™·W·ˆNÔ3®×¡ùä7¿úÝ¿• +Àÿ'ݰDö¯øaoàO&i+£ræjã:–€À (u½î~h©¹|l?Ãõ(?ÛïU=c½ä@/#X.¿OÖÞͳem½Ê û2ÂãB™§õÁæžsc•±êÂȱ“Ó¸è_Ó œ><|DàxúË* TSë"‚}öÆÆ˜žŒyÉM ‡þéV‡ÿÃää«úÌÉ2ý™€´ço™úÓ]›àÝOú¯ÛËBi™È”€:Yk&kœ‰0 ¾é´¾ðì¥ÙYA^ç7'—tçY½1ë;PŸoûìʸn¥)ƒLÇ¢;_‡@Ã!&ö/w~ú³¶sWä]”±ÐŸ¾ µl›{œÌƒ–ÄÌyjíÚ0~ *uýUÞYð=XXhågù‚®RÍfë—€ÿ©)}«Qþ>•él^L„þå§?ýègw¢"óMU$!»ÀL«EÏJ™òu5Êÿ’la òÜ7,êßk®éŸ-¿\÷ÇÐ/(& !O¦ß +#nÐç1Ãt0£Ö K½ô/­%v[ ðM3€ë|¹ý êe:BÌOí1Âû.ß?6 üÅ»³y噯C®^ïV.¾¦²JàÇ?¾õÁup­[ D¡€ˆUdëròùo\»©W ;V|ÏÎwLcÉ ú2 Ö­A ¼¶ø Èâšÿ½9¦¿fZ}xþá›ÛŠ€€s_Ы„Ë_À~ñÁ¢Ù È Î?!}a èy(‚æv¯C8È*‘Jþµ{Ð¥@çûð’…ÿ§uÌÁˆtÂ_Ṫ|è«V¢r´¸ €R•ˆ@ú†r„K¥ & +è˜(FÀÿëC7@áˆ+G +€2Kïó¯œOز”Pa]€á,ð?bì» Ù|K~3mþÍF­R9) +01>1A²ˆ€Î]\oËOØ1¯Ñ,nPÀ2²»z¥E‘Þt»—ë­kÞ†?°1×Ìš"cå@ÄAÇhÇEÏÄ0$~Xo‘ÍÞn6 V"]‹b ü…ÿº<Óõ‹ÍEí@¥®– £'Ú +›~gæèó7S«Õ&ªúLTÆgÍTñ´†.Û¾»« ݼÿãëÕy÷Zþ]Kf„¯U„²zôÖë߬£ 4ì ê‚öÚ¹¤—®#‰¾×vãÕü¿ê(X¤§½á?z»Ùòù|©½29Ck¾si‚rÐâ’ÐñÛÕº ¨åùfŽf•c•ú AôÐW€ê#ÃÇÒ_‰_öS9Àè”<>dØm–ãåüŒÈ÷¯W¹ ùþa)x®Ù²`‘ߦ À((D–¥ÊËiî®ýôgkw~¶ÖÜÍG;FB;mÕ²w¢ì§‰aX†Ïè:¶<›\ávŠrƒ`ú‚°ûã‰V扄ö0®á#ѯŸž·ïùéGËß›pçôxÀòÒÒÒ²\÷¼ñV j\ü“Õggɨ´¼!Ѐ^ËæHëŠ,,ÿëÙV£Ö2k€ÌÎN‹ÐÃQ„Š¿Ïè”ΈP‘ŸþËŸ-C HT¤`ÙwÓ°ªqüðU´ò=µbP€ "f˜S¿š\¿äÖºÀú¦œ‘{t6#¿D<$·Œ.8Dì6`l uÍЯ °tÑ.˜oÞú€aú}ÀV˜kü¿À@€øè ñ@c Rú‹ ˆZÄ;­ƒœù:³¥€`—E4èvpùÊuÆ@xÿ†ràÂE‹@ÿE½”Jï(+<~Ð_øßy•æ‚Kcä—`/ +‡u_ÓÏ6tfާÃϲHÇÒ@‰ÿÎK™z ºiú›— + ݤot KÝAVíu G©-%—Øß¹ô•7Æ@BóäýÀœ*âªÖ+§Oy$àCG= .€àå£hf#9ÊPçà¡È¥÷\áÙ³x%Æ0Hörj%9ê?–{¼Òá ºà -º<Ý:¸`h]²] +ÀgŸ Î÷˜üóÅõUùÑz +¬f3#CÃ'OŠ0v8Ó‡ˆÔôÜr@ œÿÕEa¶#ò­ Ö#¯b G|S>'Ÿ›\¨·vôÐÉWI°±ØÔµ`suf¢&ï\×ËšÙŠEø"Ç—Ï.ðf“ù 6E„ð‹‹M☙?ÅeÌ¡hªj[ŒhÖZ]£ðqÕZ°1ª¾O]4‚pÆõ\4'‚ º¬u»«@Ø €Íkài»Û—¦¬à§ŽT›Æ€À{ÿ,„ø)u2¿Õ€ÜÖÏ{Á?àG¯xÆãŸæD¢ÕZóèÉ>f$ôèø0€o{x9°rœf«££ÕJ6"`„–úŠeQÞé'¾—U”i­^û2´üž,|ñQÜV}Ýúð±áQg®C.´&`]vgÉ£ôÈÍ_[þSFÊaÿ¿JŸµù™ðn¹U[YÊçÞE‡Éÿ¨å¢4æV‘SÓõiS¾¯pW¾tá„¿›ÏM¶V„û–Z|(ðÿ£læ“õ ÷«B6E>|;(?û—µ;y{Ò#ìQ* ȳ‰Fž½• ì5ý9[ ï¤ÙR£Fiü­çêßáùe-û8¯Ý³è=+0«¯356:6VñŸg´ªÄªÈÒŸ­Ýù?ÖÖ>€?A¡ ÿTä{ÙYäÕC7•Òô%|/Uaä»Éb€‰q~x ÑoQnÚÉÄæ×õ£'Fd‹H8¡¼Üâíþ?yô„†³ÝfÔdî€÷Y*î(óNŸ¥‹úM(,¾u+F"Ÿ9õµÅ§TËÿ2€Âù/Ð3¸§·»òÖŸÿú×+ç®\ï}+?ÒÒ\C0Q…½÷Á±ðÞuÂE; +À•ºÌ„A‘ûÅ0ž+£Ç +àc,âS,¹A_†Å?Æw¶ “`Ú‹ØŽŸóÌz‚ÌWËüg+×*gøË‚óiCŸ¸Œ£ò”‹7 +€1WhË2}|H@fõ@i öKøoà|:ÜNh{*´€PävGJLS¼›þþnôÇ”Êíþ)t )Û )ã•зf:@¥rÙÊ»P PàO´Ð¨‡½F Ö/™6(È|Àœ€&zèŠ!ŽX¼¸ä}kàR*lOàóÖj¿­ÈÀ‹–_¼µ±R7b8ap€gl€–àß­ëáþËÓÀË÷ðBð á´guNž†h‚¶PVhÏwaM«P‡4›òèE Ö×7·ÖéµÓÉt1é +rK•"*rÿ£Ä¹7u=b€Îд±±{XÔyUÑbbÜà/ø?yr¼±¢ºm¬·V›ò}!賄ÿ¥ðß÷ÒÈoþo¶o{a€P¯׫•#ò²ñ¾O!Æë`CÞ9h /'쟛˾ø$ÓÓÛNb£žµg›+vöÂåó: Šx¯……ùüN«ÖhËlìøúÉ ø·Ž McuP4sÕC®såXe6ðßZ=1‚þg¡¿ìDµ.ÂU´ú'›Jøoa^™¯©œ8>|äÈða‡hy¤1÷ú†|Ç6Eä6L®/&à½sgmmy{²•7=¸Ýò'PoÕQ3’úóùŽ¡8œi6d(BKnDøÝÞÝ´_*ë{Z.gïä°v1ç<Ú RÄò¿ÜùéÚ…öDëÝe/ê¥ï-/å5Q  çÉ=xƒlV™…¬53¹š¿k"‚´ƒ©ßû¨‘m¯5÷øÛ飓ß°ÿ_© ëÛ‘V_J¤Š´&ÛÑ"’*Â-É^me‰VèÖÖSøIhó¢V|çþ42úøðÓœËÄ‚‰Ïñ_Bm!ð1Ä'îÿ]&êüÓ\Ö#ì2`l õ*† =Kc½ÛÒE»LNø›·~|óڕ׺€pñŽúµ«{Æ0\Ÿ}~#Áb,`eβ\[øú×OAnЍtbTò9ä}~ýæÿè€÷o˜\½r™9Š´@pñíý+—_@ŽæŸ`hOÛÞ/­<c æ}ö"NeÒEÄÓŽu\ú§˜a_ Òw£ך¦y ºÏ8ߥÄßžšuÁ01ÂÛx÷|” +€.qfÀkyÝé—OŸ÷\º>%¤tm(ã ýQß ÿô•9ìórÀü´±ßK09QŒMºüó=Ód0ÆHÔˆ×a¤“dž¿¹†ÖT³+éH[2çã? +¬ çý +#`aFJ U0á˜-À¿ÿ»pr—­¯¯¬nº«ÿæzs¦2<¢gŃՀ-ÝíiÏ×CcS@NìZ”åúgâ—f…PÊc]1€êȱJÀ ?! +p„Þÿ3C¬Öôš'´E¶b5€1ßµRyI¹Žh+òÔ'ðÿÍV‹êúK½“/, ³ +äå+ЏŽò¼-ðqm]¨;?Oë D@Þ›iü$3Õðl€*½h)‹²@·b¥‘ŸÕ}åŒÈ¨ŽëßYnÕ)"!$%°1–±á{HEüwqE~¹¶¶°æÁEº»òÇ™å7oOè'ò•åRG¨Gi:Ñj.6ŠŠ|‡+²üláNÖúEÞÎêÛ©Ö³ñMøŸß@Ð*:BTäg­µóö¤èBSdÑ>Ý¢C-OäN稃,ƒÆV½l22¯TÇgª5Þnæè·Ì¨ßúUlnmë'à&â¬Ë!Ó,ƒáÿ©À +€0£PÀ‹Ý–.d7oÞúÏ€³MX+"pÑ#î; ÛL}ßøŸÖ€s_§=™ÉD`ZÊËåiä¿qóÇŽøÀÚ!Téo£­ÿƵ.TgµöãåâS,›/ÁCà]??üL;›€M¼‹}æ_y‘€˜Ít×GC–ggÞÛzù„MÅø‘Ø{ÿõ=ª_zyÁ*hëw¼l… #-e$ À:`øÄ}Òh +޽°Ø +€Þ"B~ôyó”…ª ÐàÆ _QFÄzÁ +ÀiÎê`×l€ÑÕÿ¼ Š"‹Ã”¯å÷H¬»DÌ1búzþŠÀèOžî(È'A̳,À©c@×_þàòå×^{íÜåüù_üÍ~ðç÷ƒ¿þë@»cD¡£üÿ­õÕ9+ç*\_0¬7à«}áõÖ]ÍCSáuDïks•¦üÅÕMúÓˆèE¤Ã£@³¯ ¶îÓ·?ž3,H%ïc}E£Ñ\!î—ê½³±Ø¨ÍÀAT¥Åu”J•G"4Ëû[+s3Mnm鑿ú"5Ì1þ_UT¦ZÕym2U`€õ4t)¶ø û‰”V9þÒKÃåëøq}¸‰29ÙØaAâ¡CÇ@G4L¤<±>ÌÁætz©y¶é™gŒþþ ð¢âõ`_Ì—noÏ4îÉ–O—‹AÁlC€"—XT ZýSƒåXu|t¬2:* brB/ÛááCG}ÅHý À +ýÔjÌ['z¡| ráuå¤XEµrh¸¢›pfàòÂpð= Æv©Q'äk×~ä®üåÛxž6Ó¶÷K+ÏÆÁt +ÐûÂD§ÉtdB0AL!ÅÇ2Þ½–.¦ÕâŒmý…R^10@¼"ƒÌMâåãøØðÈþÎM› 3yêåCÀ0¸YP€ò#èíR”¶KÁ×5oà‡»àÅh  rTz|qc¿û°OqZÏÇ +@8æ`¼O™:A¥ Ö肹FÄèpÙ €«~²ƒ–Br$€nàtÄúÛNSsßÏŽðMZŸg¨à ûhXúO÷ç)ûë¿ü°þòÿú——/_ÖÖk¯ýù9­~ð7?ø«üoõ×ý× íºLpJû}éÓ3•qú +žìñoˆìlm¬Îá=4Á_†ýÕÿÉ“'Ÿiùφ‡ï®ÎÕ™edcëÁcš ëœ>JÂÓãÉ£ûíÅl®ÑÈV·|-cû?ñû3}öèîöV+Ìøða1V/O™G[+µqÚff&f7•?‡žDѶWˆCh.2nñý-ÈÌÆV{}Ý€n ôi˜[YÝä ·#²’8Ên{j wÙ ßì +@÷¹¯DãuØÛZÅNŸ ó ÖS¸TýûaÇŽ¢`â^ã[™Ð} œ"üÌÔ»kö¼%x»%èJ€£5"x2{)›]ž®¢„ €‡>jç9€@ÅÞ +€x +õ}*úËË$ á®x9»  *j!#Ãêð±áê Ø9úV” +@~G€*µ~ayùmàj2&±[¾½vgyy!€°Œ/+΀ݞÑ×¥$ÙhÅÌFØï€wSP\ž¿Úl5|êrüŸØ¦ù\Y·t3‹R‘û×ÌDŠ[ ìêàŸ©"ù»8Þ²w¡ ü-Tá®`8Ù³dÛVVÄe‚óì›5%àd¾ðÑ\ƒ >\¬1Z„þbÔÑ`¶>e @·¯B S1Ud¡•Å,oHž¿¹­Ü; $,ýW‰XT2ü ÿ ×y@€ÅõõUúßÐÀo\ýzbä͇9ð¾GØ~H$¿ÓþW Öë 0poø–ð@~¸ Íð< +±ûWÕ?¢…?–,´¸ræÔ¹3§y2€«p ¡¼>×ß¿E7@1ҿϰ¾|åF’ý{Q=öÒ¶­ >V$ôno¾˜*€P¸ÿ: ?4¥±écñ&(Oâx…y[ íŸJ‡ éâ"ÇûãÝÅìÞ:Qd©RJ^¯PŒþಶŒ¼l ù6.Â8sL^øéWÎGºð? ˜"€\„÷¢ ~Rh¢“À_¬àø8å¥u†Rx1â]6 +@>¾J´ rD€ø(JfÀw„w)i—ЊÅ@ð——åÝcþÚŸÿÅ’ýÝÿýÿöŸþü¯ÿ¢?øÁ_ÇI¥Ñùs+€¿tøn·E›ìg³%ÆO@ú§¯ñ_O†Íõ¹™ñjµÑ\ßbj†fÁÏŸüöÉo™LàáÝuyéõúÊÆw²×Æüü·Ÿ}ö[6Ÿ<Ü\$von}KW3ü0ò Ê•ÉoµýäÁÖ¢üÞZcýÁc²eA Úûx+—?37W›¨Ì¬n=&9!}•÷㇛+µŠ¨ÁÊÆÖý󱟀BúH°¸¸¾ÕÑW•«3 +í6ÚIöÀÿù_;]øÏö.èÔ’úñJÕýè“ù1Í:<8\YBµÚ®Ÿm¬É7J¶€ Ï.üz&û8_Òeqõ¬-zÈ2muwÚÓM3i8)88à`}wÕÛþ:N6ò¹ÌÖecrYM,"®àø¨Àù¦«lÆ›¼Zw Zà«*íúLªgQC†/¾¼|ûûwH¯æ!ù­zÞ-äkÖÚÂì4)3ÿ@'ã)AO÷ÓŽpÞo¾›g“gk[ÚçóµÖÙv+ÿž›úW\âî}0‚‚DE–ÄÖtl<1™jb۞ɩ9‡¸Õ^ÜeÊ8ú#ÆŸåÝÆ¤–ɳ3Yƒz(ÁGÙ8ÁËí¬Ñ¶ÂÃÕõúb†î«þLDTô—¦<”ˆïôá;ËÙ䉩ˆ«ŽùíÆ½–¾‹u*¢”N ”° RÏŽ333 ðÅOÛÑÀ„íl€»³±µ)bŒè¦Ÿ‡ Ìàqÿá}Æ|, +`.ÞoÀØ@³à'x—«–.ÚeÖè…¹&o02_¯ `Ðe×™ÅïªQ7zçýˆM(çÎ\¸pæÇ.€Y¸Èüƒ¥óR$ä@[q…ç7}Ã[P ·ì ˜°¥ß,Ä 0O:¼¸cqÄѿʞJíÄX,Y§¿Î¾xÊ™ñ¦9€ÜȶThÃz¼|TWF!©.Z +Áf%étì,@_#pŸÐÂo/ºPBus/€„ãnïOê?î?^¹}tŸÆ“ ˆ t¦ñ€³”ª‡ðU\ýÓV”Ü.´P„ÚºŽË‚‹h¥ zÐ °[Ы³ Yðý  <á¶ÿ7 …HÀßüÝßý^¼ì//ãåË^Kàòkñöç?Ð Q€.ð—VÄþ毒ðƒËéÇÛ1¦Õ `lýÅFµ:·¸½í˜2\Oÿ[i +9jõfk ÷ø5Æ?ùÝç¿ýíç¿}òäÁF£*G{qã®Nú:ó;ŠdŸ=¸¿Ù¬ÏÌTçVw>ô®çÁr½l.ÎÍÔªsºþ·‚v½ ÿbŸ?ÙZž˜˜« +«÷?Óy‘}œN¦ÍʼnÊD­¡ÂÝ8€Ñ]‡æJkuqq±¹ºN£½›˜zȳí¶ûÝ +@² ï?€¿‹7u¡ HÁR¢ßA*ñëØñù‚Òé:=õ8 (“#=./]õt«>ÂÃ\€ ”óòLðdžñº• ³ñÓ£Á›ÜÂôµx€Ã‡‰ýë0£FXËñ|ó‚|A“Á`x†! +0@–·&=’ü]-A»ù…ù»üÎB¦a + {#Eð@‰ç쉼ª ›+µ³µ–'æþOäky'¯mCœ1å¾  T‹Š(eK®·Š¶ã­Ää/²Â²]k//o¹u;ûN}Ƹ›"E)hhÈùÏšÍÉo5¿Q|”ŸÍxxi;ol#ñÐ\¼í’þdSD“B€ø¨Êkÿº<Ÿ—Ñ›[¦ÊçÛ ‰Xnµ@þ’)¾S¨Fú2ÿ‰ˆD©Ëÿ^\YÉWÖ[ÓIŒøgbûÌÄä<ÀÇhÕÿ +œ`×ο|”?»žži.€/¨œØzLþ"à•g)×®\ãl—]½BŸ0¿;­“7~óÚE´þs_…¼W*×® =P  €€Þ¿e^Žq€˜“àýƒ[ >öcàŸÅ¿zŽRøh3º^Ñ3&c€? RÉb6.ë… ¬t"Ly¼{)KØ_Pò/ r=ôÒå†óS7@£n±b +€,2 Î c,Ða/$ÿŸeR䨓·½ñäø‡Àõ%‡H]Ðõ~RÑEtðå—©1¤ €ÖþˆÐ+ň˜ÔP §(_+"èX@ @¡ð; +À„ÿ÷(ç_ù›¿þ›¿ûOxó¼ÿâ +€Ë.tüÿßþâ/’ðWèÿ²üàµà¯.ÿÀâzÇÄòC?û»Ûù\m¦¹¾³C»ú\3úþéù°¾Ø¨ñü˜[g:€ažq„æOî¯ÎÕª3|óþãl¡?ÿü±ÜýÏî¯/ÎÔkõFkç!òn¼¨‚ÜüÇw7›s3õ‰¹Ö}]§pˆ(•ÝlT+µÕ]ªP-ŸöOMõéÙY”Àðñ±*B„‡„ˆäKÍÉü]Æ#PET´L«Ö›ž$Љ˜†üïcÉøËG€s¤€ö†¾›v6®›F2xL€¹€ÿ@d ïL´ž?Qã_T¸!ÿøýDý!”1Âî=cè%ׯ_‘û%eÞkŒ+ׯœÿê×ÏC‚@qgÿª'\#D‘… z„?ëÕ±žc_L†Ž¿7¸× Ͻâ|aÆT’ÉÜ9\&U‚ö¸Ä—XâîsB8|êe§qb[dg&4 8€!{ŒÓ.ŒË€»ÀW’tw,VZ²ÐUQ ]ˆšÀ›“§ÏÓ‡.¾•üú ²N Wˈm„ýùV´yÚl€S2¥#—N/Ñ +8‚ê§kÌ5\¦’œ/çUI +ÀËLØP0ÌÆ·­î‡´ñ7ó7šÿàåv~Ùk?øóùׄîAö«üà í’!î‰ç?¼¿uk]ž~}eëÁ£»+ z ›ˆ¬3­MUúêŽËl@a c@ð.êáPo?4þ |ˆM z¼÷WŒ`qÊÇWZÆ`?„ ¼ø«ß„r@ÿßj ú»­9À(šÄ`­ÖüíÞïtFçæ?òÄøfÀŸ€-$²4ÎGAþ¤¤Áp²ŠÌ¿„‡œú•¨äEÚf),ºÚ™é-@»°¨>Ð oŒŒ°>ìK#×Oåi­ëÍœ‡5¬þ¡–3K˜¯âSù:8â ½4 +àˆÀÀ B$qX¥°|Îs%I€¯›ðûåî¦Ñ#q’êÏ×Á¿¤»÷FbÛÂÀöv ð§Xv +€NœÃ°pÄ€LÆ€þ¿-À\<&UÀO…ø¡ú  ÷‡/¾üå¯ÜýÿÛÝø¿úÙGk¼^2´~Ü0̃üL ²²²öñßý2þñ×ÿH@4 ºR*›àC ƒä£S_¸Y©×î¬Ì”wÿîW¿þ˜Æ À…ùr©ú-ü˜'Høÿ1@„ãG€A˜qP ú2Ó ì¸é(ðߘ¾ j EXÅnBVûÖ%‘ œú׎‘ã4ˆp;€5¥{F¼ÀúuX uB§ü%Idú k%—ÊÍ2]çg&oEç‚?ð\87‚™ŠV%žÚ äŸÊrž,   €‰  ”TÛ¦ ­tÔ#[‚³ÞRÈNç +(ÛÌ«õ^&pÉãD–¿iÜö<ŽÎïÐÅóúÜ®–‡Yu~©úqÿ û¨žÙðϨº¥žTpe¬tôGP‘( +”gá¥Êë‘Ó|L«Þ{0‚ÒçKÅ„?F^w¾‡èW*:9¤#ÙJy·ZËûõê•r­ßïg­hÉîäÀß]>Ë—è]3,U„÷©AòP=²˜ ¯UP9пA• +3}$ŠR66f +;³tS„©V_[ûV(Ý·a4ê~ÏØõó¿ûùOÙÐGÿ*6ÿŸ,ž'ˆ €ñ Ñö(¦Œˆñ¿€ü¡Ä}!$À^€À1 +à¹FÄ8HÝèQަiwL0¼óðýwn<7{ÝÖD$Ê p\Ë¡ÀËï$ðd1Â#À;Ÿ¡G~ Èöý“tœ¦NËà +ëýÔçß“”ì˜ýãR¥Q¾&g€8a©Óüç œi©Õ—¿dÐÖU´IB¹Qª€øòDøHXy‹à¨ê¨|.Pâd7( ›â½¥‚ + ¹G?ƒ #>){X„ÐÜd&l Nq…kCÑ0Bzµ Å= +³ø2hÀg= +à˜ÀPL¸Ã¡Àz¿-A +üïvÛîØim''€Â°s‚ µÃ@N·tØiu¡õÃÏÀðS€ò逕Òàˆàœl°ÿ@©‡€ €®ü?G-7WòŸ†@ù:0þ§÷æ§o®ÔëUa÷ïDŽYÊ…à§O¶xPs‚ûcòË_$ø8Œ ð'þMNMG‡£;+æÀã}¸ ëç@\KaAc–$83s~ò¬3a_¢ëÏž=+¸·ºïÎv&Ûyæì”£íJtÔ„x7S)Åp9É…Ôå?9óÂä&í5 Ñ'–O)J¬bÐýu_h€)Áiø_Í{û@þÆ]pmƒ¹€ª¤¬z)à]ßÜê Eû€Ä¶¶þÈwY_ºá.ÝôÐ7=)èF¿èaÈêó‡y^½ò +³,+»ÞAí^S ÛØê/åÌ@¨ô¶¦×T÷ Þ)ßÉ%Œ=ìëü‡sä ë°w©óîÒú¡/qú!òÒO€¥€áz‚låÕò¡púÊzí#èE¯·Æ}oÔ UoÕVWoß®­Þ®ÔV¹©KT±TQ™d¿!¸Ç)b7fG .ÙÖþ>5éß-g››@½Ž›L¸µõ`2!AüÔdeœ{ëu1€ú½Ý +€…ÿžÒ ¢ìùAbÊ †ðŽ à˜'O’4 !%€$áɉrº€.€¿ú³‡oÝXX4ßòïa×c2 º ÆÇ…A£à-yçüNS‡ßçÆÂWÞ±¼àÅ“,B~‰0`‚ûQ1 5þB +Ø¡>©À›§”€<}Àþ1ð—ЪZÏÁv£¨[ZÂ1öûñðEØK ,£K—ò/|í]Hì1}–q RН TBe *;—”ã—ÝM>ZcmoyƒþqªåŒ’ àÝöÀ@«ÑQ$ˆ£÷߃±¤Bu1:˜À§¼·œè ßc}3 + |H„iÔÀào €¾†ÀžÔzéóÒûwš'Zöþ€€&ú¾Ïä`е<Þ0JôþÀ‰O—ü:,€üÀÀéS-?ÿÛoÙðQAþñ×hÿ§[þG¼ À €êÊLiWùë”H‡ÉÁÐPzj @AxNúH‚€BŒú^ÅøÿŸô½Ÿ"3¥e¿t üÂÌ‹ôŒ£vŸ×‹øâÌ¥‹øÍሒ)ù”ŽŸ?_F+‰ýê&ÏL2í8…GïÁ(Ο¿¸Lláó=Å ~öéôìëÒ©KN5uqêüÙó"—ðØ/ÕlQ&]IåÍ{ž~åžøˆÁûi |Dß³ÎíG<¦`aݵ" c"­9ì÷ò|ÿQÿÑáa¿/|Þg¾ü|_pœçýÏ?{ôè“|_‹¾ô«ÿ0ÏóO>éõûŸ}Ö×…uý‰}²•-ß^¾…÷¿»¢‹…³(˵*ÓäèyþÃGÿ/©ÜKÕ<¯×s=<Ìò+â,ûüѣòŠUªÃüÓCÖߢ"L©l9P=éXÿp+S²¬üC–ª®jÒûüp?ß?¨‰ô>íö¶^Sþýþ'Ù#ÝS3x†ç¼oäÍwû>ÿ¸_ž¯ê?k7»{HE²úî§ÂðüÓƒÏúkVäûL.¬ä äR3çg–÷UG:qøHÙ©Þq%µ×?<8øûƒž*T}¥¶ß?쪊ˆV¨"ýüQÿË?TE¢-©ÿXÊú‡ ®×Ú®¾ pÈ-{Hþîg„àø™ÇÈ8 €–„€œ$Ò'Èw™ 7ø˜` bFÄø’Å\ à[¤v' À'Œxëíw¾—ð!Gû¤ýqØ¿‡³Áuœ‡€·Ðó,áÀt@a 6Z6|fDH$þØîøX:á&{²9Œý ýǰ‰f ¨—Í?a3´@_c¿Ä$€ÿOÃü@OJ©€ó ˜ Dp6þ¾Äu´híÌ´I5 +E>[ÞˆŸÀqÜ``¾çlø„@Èî52àÄXÉÞ£ÖXFGý €V¢pç¢sÅ(€ ŒQJ¬ò³Ø¾uÑÊgÿ€‰ŽXFö¨±šæË#£¬÷€ëíÐÿà àÈߨ~Œ÷ØþÓdè`Wx’à~«ŸàpÄ ²rçh@²˜è2!0€¿ûh9N²¤.€{… º~ýë´à¨@²$a¨Ô¿U)Í—m  ðèP~jÄêþ ¢¿J (Àø8À@~ÀŸiGX¿Á†ÇÅà/ˆŽ8@âÅ3gÎ#Æòˆ<;©„†aqo=k –LÏLŸ›.ÍèܳÓb„hLç-ÏŠp4À6}ì +d)è“g•¿ žߟ(6FðÃ[A÷F!¶ +1(htÛr%¤ºV½S]©ºC^ iÓãLÝÄêΕ;åòòÊ+ßà\ù%#¶tµR¹S½såêJy~fòœZH2Çð6b>k¹4O?¿³RÖd1÷ï«K¯¼âL˜ÔjåÞeh³rg®æR´Oze~‡Š0]QªÈR9*é:}M N8xseå%å_ž[RNœ÷b°º©+]…¨H…øGKWªUí°O5ôåÔ.ç +gH|7µdJ¥És_™ÐŸË´îHU};ªmµ<ç»qƒ :~çΜšªÈ.Ét'Ú"úR¹ì¿¶1tzb˜ +€)3éÈQÿô£¿%>ÆONH¿#×Ï=0ðK<õ¿žÿˆ'O’i€p!,~ùŸ& þGõÓ÷HWxnázê,o½ ïRiü£Ÿp'@:0.†û÷ÿøÁ¯.<(FÇn¼uÔÐ`„€Î¼8J ^@ýQ}ÿèyÉó0Äœ¦ù#©QmžmÆ×—ÓñTt,-‡è>‘¶.K›!Içÿ@,014X +ø¼þªW*"S6×?$,üüº ßHaPzJÔ~ +ûõ¡€ ØX¤Œ Á¿Bäà :g{;…àøš¿Õr¡»h€Ïàä £žÚ €#ú‡°¡,ÿÃàH€¾Ã{þ'õÿ¿Äö„êf#€`X¶ÿ÷ߨI€ÖЀ8Œ[îï´·»…·8rïé>aÎc(ŸbFcX+|F,ÊáÿµÜ,ç'û¢tÖc™$².®VË¥ùs3•ôçXæW©ÄöÄË8H0h¡ÛÒaœMâÊñ^žëïGÚoµ¾«‚ô‡áxJu)ÃŽ:öµD ]YѹÚîüGu!´±ÞiëÔA’¨V­Õës÷T†Žp/µŒ¨ƒöÄsE2*’c´Ð}ºƒ,Ï™þ=|w©¾˜›V¬KDXžŸ¿0-n£'ýÌäL©¬&SM×êù•~F¢ÄwT‘*}ªµ¹CMëßb¢EÝSeÔjÒð+Ž»UËóõ pS€p]\æ!¾6ä ˜š„ÑüÓý/ÀëåÀâ??åÆ0y’$^á(rB€ØIë#bü7ä GìððÀÂu¢†¼€ÓGŒçh +Œ‹ À{ï>¸~9ùÄ‘·Ðó@à°0xÀÌÿ… ÎHþ1¤[Æ?ö†ûÃ#_À X1öŸ¦ù ?¨îÆ— »ëcŽ#¿Á߇XŒHôØKâû{¿÷" àT%ýÝ/ý®ncàà€aX\\€n÷þÐÄÛ``€ _Èp¿ÑÝÙ ýÄó¨õ  à”Qµüéõ:ÆX$FòÍÌ—ØŸ6càÀôô³Ï:¡v}dþ³ZMOŸŸœ~vúÙÎMêÀ Ó¾"˜˜|vr’…K¥sÓaøÊääDx œ6,ÿôÑÿóˆ³}vzò¼j3é@‚Ó_93yæ_Q¡|Ò—l׬ó6gƒ‡¶Ík-8ÂlŸíæ»Lüa–ß©÷sFª“\H‡Ý»×§KÛ–òìÖÄíU&;è¯ÖªŒ ¸{7Ë÷×ßïõ{?É«JÚë˜oéš>ÎÙ–²Ùʳ*3(áW·«¼¡k™Š¦"Jüp7»nK*mšÂX)¸JUÖvNïDþ(«>:èÓ? ÙäÝ¡2Éû=Uä'YU•ØßßÜbü_ŸH‘g½¬ìvPž:‚¡ôsÝPéþ"Ô´3¥Š3¬)¯Ý+§–ØÝÜü02èE'ƒ».z‡õÊ?özŸ(‰.ÑBçv3%9ä²<.€™ókhí»3ûãå ÔÎψ•C-C¨ÿË_iñkôýÏœ FÕ¡ ”÷w¥I'g±¤þé=:X“ÿÅåñ±8°Àâ‚uþ ` ûn¾ýàí‘Q$zŒ@bfªT€ŽxüP^E¾õðÏ ßZ>|ûE1€®_ÇáYþ óøtÒå ¨?ªï°?B|:¥pN eˆýÆt|(©5->¸ "  /¥óSœ,J—¶,Êg ðkðU&ýï°¸°ôãÒ¢<ç“$é¼" +9ý·cà |$@tæÇwaéˆÀëd@·‡ÎÁ2J9:zÊš |W6ƒ5›E=,”qÂ(÷ÔpÜ @ ð2>/z$’,CŸ@æ3¢5¸ÅQ €äúïÝþ,­`££|a8âà€'û´l%ÐÑí…Vcgo§ÓîšIØÓ@¡Ñi(ƒm•F&:¼=n(|݉<Éàg[{ºQt ü‡‹Â@*P L>œÿM|Ó,PÛ +øO’±0øŸÿôRù¥Jå¥ôl >Õ»•[àùÌ”ñ©KÞ,Õ–‰£w[/ûReµtkY¶N0 Zifš!m8¶Õt™6nW^bqü¸†k¹ø‚’]"0€D¬‡¤âú'¥XiU’1â‘LMNÍLMáéïžùgðI`ã‹Ëyg¼|qæ¢*ADþKË3“çΩÆ«™ÉgTÌyœÏx1"-R_H¥1KO¶ãÜšîQàWH•ð÷Yy¤dN_û·×²Í¼×ÛÊÖ…—ÒjW+• Gÿ¥!ˆÀØ9e±ñ.ýëÂðÞÁÿ³'üqúKΖLÀ¾y1dÐF}Š ¢“Hf®ÿúAŒÿÃË“Ððq¾ÿ΃ëÂÛá-ÐÏâÆâsƒ@@':HÆâD–§û ð~vá»LøãDöx‹Î¤èÀ€Àƒwß)âG~éIbïøùt,øóÔ"Gˆ{JÍ?„ †x0X(‹8–ÒHÃÿyvH0 Ë—ðî·;Vù(Ø? ƒgíl×Êu³8_ƒn¢þ zX +qŠ? ¾`X_á{Pɘ ùàÿ§ ` +K>¨÷î K(€OùZrÉ(",ºÎ\ÃeŽYŽû|0〯ÌûÐs$¥yG|˜YðºPü!½ûð‹Z °tDf€C=ÆÐÞîjÝi,´M:]}€ÆŽ¸†2ÂáÐñaÛ’Fwqa ;‹Û-’døõ“FŒYž8 +`<‹°Ü©¯UÊŒøUô:œlx€S_gNÑ pÌÀzbÿtâüãâøëÓŽ‹SššòìuáðW*9Šî­[·ˆÕGÒÛ• Ó¥ùôþA×ãöqäK¿L]ºD̦¬ÇQÈ_²r–Ñ„Ï0NÁãÿ£ @ îÏ·^Áà«k ûŒ»ÞbÒ,邨rõCB[qq½—ž{`Xž¬¬Þ¾mo9]}J Ã[5¡.®úÙÖOò;¹UkPàM—ÖÖw++ABŠÒ]‘¨Ý æ¯Öæ_͵^ß…ýà8Ð»Õ Ø¸ÓsÔb_”B+Ç@GB çÿ{V=Ü`ô¡ŽŽU¤–-¹ByI÷¢/`j&fiˆÎþ51‘tY”¿•åö{=…Žõ!ŒKŒTðg@‚¾<*|ô¸VýV}XÀ»Ìœô£þG?ò@û€ÿø3†¢øÓ  ²SÀ¸ ‰Àƒ˜ è 0`` F$Áqy|,ƒPÀo¿û`hØÀ@}Ò¨bÇÞMe<`ø„ ¹÷™èØ‹ë×7°¼ï3áèöXOû| +)@” +¤Ø€’¹9gL )O­ù#¾l†y<µ½I؉¡Hrì¬;2âIöûs2  ¨±úQû¨œ7m ¾|cc0 +@é(Kê»UlN +?¯ œUaÐjdVYWa:½H9G@~ÂÁú×mà”—ã€}ô9êð´£,_×-ü®nSI €Á¾Ýz³e0d8J_GßÞi,`|XÁ|8f8Õ`§‹  m€Öt`i(,¡Ðh‹H´·E&t\TAg¨êÂbÅ“}ž8 + °è ~èàH€#>î%8ÉþŸj@—ÇIŸ$¿<†ÿ ü“àŸ˜óÂFC™ÑA½tõ?ó̲Þé—ˆY·¼|KI Ú úk/%.MOk!0=·ã¨Ä93êýÑGóµì"c´15sQW&¦=Ø’ASð€@åBž9ƒçžPyæ™bæ¿/,gü/zìCÔSìcb¯è+âÏL ÆŒÂÁõMús…qk‰ ÐWï–+¶Ô¥ÿ8"`ËÖ÷Ó·7VWk·˜ï¤v_@¡„£moõ²;t•6‰Í—¢ö[–?Ü£S¼ØZó¤Á’p9\Ñ™y*ècÂná?ê´*Å ŒàkžWþk¯W¯sA1„^pÿÄpÅX)KŸÎn&S„èÊ/‰Ìˆºe'ÏëÑaX³i¢V›÷¼uGF`@ds*’­}zð_÷)n¯ˆ"†ÞÄÝBÍ­v†|DÀGúoÑ÷oõï!ù“‚1ð/ˆdû?Sy ÿ½<&#xͧq @(¼Ö +@Ïw\L "@ãÁ»,`XLˆ8°X#7Ȱx+ä{ï¼£oq⸘¼û®ð^à±\úµM"/ª&/Ú@`‡õq˜½“a ssߣ ÛÒüèЇOhX8œ&†þqüOÄMÂq¨¤Xc'Žy$ Αž¶s±¤zÅïK€ÐËÂ|Ô üF1‘j-Fÿa’±Q…›¦RÌÉÂÙ£É ÷ƒþ €Sᔎ`2 “ç8@âbu–PÀ'øƒ´£¤4î—¿ z·Z 3=ø­ãÀ]ã€m0Œ· †l Ðà½ÓôÉÇøµìì' @óD €ǶrpÊ–Ž ý[ºÒÑÍØ‹\vÚÆ° à)GŒû°(F„àg)@âG,øüíc-¿Ãæ) ~bIŽ™ø¢Ç ‡l E `f^õÂY¾4së¶Òü­åŠÕ½Š×Ø{aÚ/ðö¿ ¿O„hkÀ/D¼}‹€s»xQÙ^Z¾u{yâY‡¶áŸA_—aÄÚþ+úßd˜ýÚ<¢¥?QΊƨ\fH `æâä™s‰L~åœX†²WþÃ2’7Aâ»À’AðÕ¶¨¿²k/Ó- ¼[ëß©Š8­µøïˆ°É•Éå ñ€åÔ€ªúŸg+ŸÃØÏ¤ÑÀŸ N€:LeªYþ +\ÁF›5Ü,6•«[©öéßü5S-GÁ…V‚5j^ tsE4g­^ üÇP:„üëyA0Ð ƒþѽÇ%Au!C"ðàús¼Àž@¯ó14 +Sóp}ÐÃ"À1Î{ðð=AñÂâëhä]µDÀ÷þŸw¼% .$þ¨„@éUȲ=n(â@Þ‘ú¯¯jc€°<$¨?Y®|íÊ€%CìLÄáI­7"¾&dB×$Ü.ÐøD¼rŠãÖ²X’ ÀÝh悼t戨̸^Ï<ý ϸ Gð3ú²m),s8@ àw9Yà¿–#£t¹¾Æ{¼’ `Ä`ó²ë[1ge5p?~.ýNò0ÜuüO2f°µ_ê6н½h¾P +À‘>w¹…ÅûÁ°ØÔ¥ î¨à iþ";­æNÛà‰>c€†Ž6´<Ù°3j€$ `‡&ÐÕ½èT£Ùi6š†o¦;ð±DÀÐ02 +à$€oF<Öà©,§I¢¿Ÿ €?>øÿݼ9_ŠŸe°1yTu±€g¬_:ï—ú·°üK‰Åàîßpœ¯lè\Ìã;d‚ýù‹—^¸È!± eæiù «Ë·oMÎTbJÞ$ • 9;ñŒ%Š„/€Áÿ‹õœ¢ãœÃøOøsɀÿI1L ÿ(¹. µd‰]Ô­³›Õjuu ,ÌVªÑ‘-¾ vÿ½†ïƒÿtå;«ëËøØ„LÄ&0½oe+ÿN¸×7j½G:žƒ?©¹  è^¯¬áu Š¬¾ ð´ºÎ¬\@ã’Ú4àkxó•ƒOÿºŠx‚ÞÁi)Ðߪ­‰8ê­½Ok«ù–¶ìÜ~¥¶ÊèIb +0¥gu~æ–»D¸1ÏŒHU²lX·H¾¯ŠäYõoþ¦×Ã1;ÁP‚·è¯Qß›¥r©\Å GÀ]†|@øÿw+Ð׃ð`À´ÿ_è_&Tþ#2 +Ù|“H“ö(€QÜѶ÷X_ä˃ $>0°¼ûàïŸéúPþ£# YÞ± £dLû»H:0ïû¤>€wÞ~pýú|¢K Yˆ@4fÐaesãúuüpx2HÿX™»ò¯‰ÌÍ >Œý_@ó?¯èÐ<$)ѸýÿÖ¶Gõÿáœ& .œÃ².´Ó‚uœ:*¢0ªWèÈxµÃ(€ág°‚u^—Qºà6¾J8ùõëɃî4] ïym ‘ëzL>Âûá(Ï (tF·(%5{ü\Zä9H€¯ðõ¯†þþ:°X·ƒ$ a˘9 Ýû#ûù5¥Ÿ¿á>[=%ð6¦‡~²àd8 °~’@“@y]É ),;… ³Ól’˜êIîw%ƒîˆ@tŒYÆããÓ(€Z¥L€ßÒ †ò'}†bõÔPàÿ?ýÏ›ÿV û¤O’™)ý/œŸb˜a¾Ç@Ä÷R`•ùi#À f/”AÀ¼˜‚X€ò +.d°)Ø Ð„k•iœcp‹ó€ÈPèœ?#ì ³ý0ŽÒO’³ºƒ[ËjìKÿ6•r‘ÉÿQW¹(pÓud?žuÂ#„!q€Úžà˜5h·"\¼SÁÔÕ¾n+¤Û4èå[½-ÜVm¹2¹Z[_­¬./§V6“!Ü^Vý]ŠÊmÜÊ?ÝÚ§+>ï{r¾Øìÿí0+X3X©” •ÂJ/Ä–(UÅÊ·ÀW`íÓƒ¿ÞßRÆî +²É6 cøöÂ,´ß;ÀWc£×Ã@jWŸ© Y.—ˆÛäg6Sª¼Œ{ Zd÷Ž +¿k @À¿vñŠø£ý|ŸŠäYíÿ8øk§obÄB+óG!^9›N•XÀõ{÷>Ú½÷qŠò˜H ø×üÿå¯þë_ÿêýó_&Èá4!ôK¯˜I§°@ ;GÅôÐg’^­$C €ÀÃwÞýþ÷ßq¿ÿÂuâ,^¿þÜ «ê€€}¯G€-c” ÉÛoð1â¿ýöƒ]øîXÄðb ÀðE;$™Á‰’°ýidð¿ò  +ìÊ¥†Jjµ1 L2Á”{¨î yG/2${±çOô  +…ÀÏÒ / +€b~NK*#f„@„QcD°Ïϫؓ•N‚n›$'ŽÐjt|ã¿ôX°EÒÈ@"0Gó8þ` ,-”ñEçõˆQ¡úÿÞïI³o(ÀÆæ"€*Uz”@0 û …ÀˆÀN¶òa  }°!¾mN~!€ÅןjP^ñn,Û¶p\‹S-Ê«Ùi¾þzãÕaqü€¨vª~êó(,áÀoÔ ˆh€ðô£oHú?€ÿèOü¿ÀO–ffžÕ_¾^æØD Þ 6^ëŽd+ ·þª€”y½ ç/â XÚZÅ]À†‚ ¶A qeßË·*ëË¥é /éXà²Ó3ç ù;”¯LΜ935Ű@#´ú‹,Ð ˜ŸKAÎ¥‡-ü ) hÁú,c"”5¨‚œä^«¬­†õêÊ¡îpygþ­×¹ûyOKÌúÓ«ë«·—W£ M¤“2 bÑ«¯|žoeyÂÿ æðÚÆVÖ{­WY ÚâËPÎY HVV*K0öÛŸ€)Œ,ŒÄ{t糃Þmm¢ž¯"¯…‚jk NÜèüºTÙT&[ûåj&üYÅÙ í_wc/&…|frF¸úª-µ•:QŠï‚ÿÎ'ÙEr¸H/ï~¸ö÷ÝÛ·_ºO$뉕D}%œêõú½zÆLÿ?e2z*àŸýœÿáÿÏñ+ñeA¿þ=ý'‰‘{ä;ØXX„,ůõ£Â…茒¼ûÎÃ?ûþŸ=|÷á&LïsŒXx΢C ÀåGá^þ½cÊ¿åícŸïš`ÀßPµ0ñ ‚@ÞyO‡NëO-àñ¹ò4¡ì˜úc1ÖØEº@åá×’ÓPÿO6{I$IXØ ÝZx'PH:="äå"ø;0‰zÙ ´‹¹ ½l|½86 +`X”Rü=ñàÿXv#£ùuÂÔ!ê;ê€zäÛ ŸŒ÷)¹Jt3Ðt'Í@Áã_暨ŸÅ§½X€´¯-òaGè°Ÿˆ€-t¼Y€fAºøŒu>¸ØƇÀÑ€= +@…y*ûc,Ç|ž`ÐÁ×ÃÐÚ}iµßTÂûa€Ö·¨&íUø÷Ò½Œ‰E+4 À`.€ã>+õo… ùœlxr€èÌ Œ?I’q@Ê-Ç}b>þ'‰µô›8êëAÀ8m´ôq]»½Z(|Øn› dyÈ&1Öû³\ºE  Gm;7n›$ƒ $Äõpæ"z1€)ÏǤ‚ÿ¯žÏ#4€4u+éaxz9{‘¸…·¨LÛ0KQžž#@â¥qèˆl`_Ú®†ÉÜ’ZV®ÒÇ^Gu–à|'Àë¥Î€Õ|ruõöª)8­óÕ”…po=ëß]¡ëX×o}ãµ^¹¶²ïTÊ(Þì‘ö_¥Ï@˜nüOÂ$ÄR+º„䮣¸UQήI~¸òiïqM°ã}²½+Ql|[·øyµòò mûˆl½7ò›+ÙíÊ«a`ÞF=F CúcóÍLIÜÀMR«½RÏ7˜c(ñ!ìE׈$ÏûkŸŠÁ¨Hb"JÆÿyý=â†`·¾»û±ä£™6ëË(iþž €€?[¶ À/ý'÷üjLý¶p¦+|¬€HÄ +9*CÈw>±XÞÄ*O[ž[¸¾x}l€aÿ-`DOÛc2Šüéƒ Äס=Sþ>^XˆÀ ûŽJBô/(sß2€oÌÍ=æ9éþZ þKÆÙd–ðKØŒœêÿNäÔ‚Vÿ'K8f,ž˜˜ª<Ût(%HeÙ@Ù\H Aãgø$@žÞ‰½#s _[Çæ¤÷ë_ SÂý0Þ{(@ØF} üÏ}ݨô‹ØÀ)/Ç-¿‰À^»)¼uO9"d_ü}>Þ ø{Ë +´Ä@°ÿ&hßôƳ´ÛÛ…à An²ˆÜ·€@²Îgw¶u…ôÆŽ˜A¡ujÒÔ‰ív×Ûx }kØz¿ØÔ¢C +øÆ˜à÷Ñÿ @s`hÛ ,Š#Ð`3Ç(€\ØRHóñs`ø­}R$ÀÂè?þ›ÀTÿô?UÐÊ7K+G>•‘íøTJ ä.€gÃŒÂ>úw[/z÷ûJ°T²ù å*ç-Žʃë–Ò2™ôÃâ¯sÚÞ¸-qB¢\§U³4(hgá¿`dZ ÁréܹkÇð ýé8 €©Áø?#0ýY¦L¤þÙ™¯â|Fºpù7Ô +×=kþËÕÈÔ}¾ì1oµìÎJw6`ðÄOˆ ö ä6¾]É&V7^f €?²V3ð9çõrSÿI€x)ÞY&ŒÌòrÙå3ÖÏ>eT¤RÉNò«¬°ú ”{Õä5ò p¸rîªRÀ{JÂXDeb_€¬_­ÒAÀMÐaSfŒÍ­¥rò7””ý´oóXé8;y'À—Ý-‘‚ÓaMjÚâµDDT‘ê§½Þ”€„v…ðD†á\ró¦ð¿²¶ö-(€îš+ÿ-SÚðç?ÿyDú%.€ÌXüÃèÑGåWÂèw¥…Çü/öG-g´ðÎ kã. pˆþL˜ +X|ŽþÀu½‰l ³ÞÀoÿ‡ 0ÂFdùÓç»Át +äó·4^ àH€tI<¸Alwx* ¶$4ÿâr%ðŸå7®Ì]ùÚø€ÀÔRGè+Äàïµ%ÄÅÎ °<»—i'2Ñÿc£HG*¬ÿ! ÄܱL°|l@€]¢D 5ˆz ²•Üž Ä{ý#'/ŽY +ðælt†õÄ“Ä2@z‚ÿ…À¶»èeŒY´&p1 +€tðˆá(€ãs„ŽÔàÿò—ÁR ]À-¼ d³@øŸ,À_«@ I … ½ƒ1`@„ÔÉ`¸·B“ ¡L à°1XÇ^@1÷!mh‡Jî[âÚj¶È&àŸ®5ºÊGéEvÚMeßj,B,|¼P%èÚXš… >¯7šîèþi2D_€oÛð?Šÿ;;>©ãÍ〺-D|ü\OÀ»ìT €õÿBÆ ÿ/.ë;öãU=~,iôa>7Ãè9<ÿQó¤¾H,`s~î%§wFÂC›6É+ôÇèp)c€ÇP²€ÖEïúy0À䂱Y²zfb9éëÉ€àS3€ó¥e; ,SŒ€ˆFmúÜ̼†ròÄ"S ZÕkwë| +?y{æ1$îæ½—$·¼õ¬W]cL{£é[ß³Úílry5$L%ɇA·<dK‡FFå ‡Øïý‘w³ÍõòMÌä¨ÖJÎØÙwE,é™hk=›¿—'Çý„îµ×6˜{ñ‰ÒÁ«½¿¢ç /§×U•Õfµö*pýÉZ•.€ôRE^Ëj7Ë$ŒÒ,v$È‚½€Lkyö +#ÿS&Ff ÌMÌM1ñUäö±pI¤$-±‘ø[° ÀÚZ%âÙ É~ôã þÿöo­ûà¿p$ ŸýRÿ1ÂýÃü# þuÆ? ÷ÅID Yôü  + :.äôx™,ßþC°ûcÐê¨ÀQ @¸Œã<`ùÓÇã`&äàÝ·^¼¾(°·¥?á¼»° ¼x=º Aùo$ôÿÚ7®<åkZ@j¥cbÐ ‚¿ (Bž }XDGþGõŸf©õÐ}€$Ñ¡î¡÷#®áXÔ­ €VÉ0òÓ"Á·röß åG ú$€À³†". ¶Ú­Ýá(¡=¸J°`l‡Ä(€ÂàëüRÑE8ùEçX”B.CUG§Ç¡¿`8,ÿÃà|60¡Xì°#üÓ -Ð8jhJŸ?nhn·qDÿ° +Ðq8ØÖ™Å7Ü aC¹¢”ÎòlkEŸ?œî +VÀ1tx*# W¦mìt•è7¤ô+!Z“,â É€·-Ýè$XÞâuÕÔž;‚$ðàþ}›àB˜,šG|"àÑ.€/n8ML ¿úÅ/û”V*/éM­=Ä£?î— àQì.3æO°  F?àöj6?íäÕ þ¶’XÂGÜý”¡K“Ñ»"l”ʽ•éysëç˜ì `¹@¼`äÙÒÄd¥¶ L_Äpfê’;$$A4Äi*3çægžuÌbnrJ™ÛÞp–N€‘üˆkúÔú+yôÿðù£GŸj«ÿèÑa}«s»”ÕZž÷ûýjí¿~öùá#ÂØþðGÙa?Ïú½¾À.?øüóÃ,+MÜZÝxí;öõÚ¦Tcå#š@²Y îgÕì wðYþI¾‘÷òÃ"öí÷>ïÕjå%tW¤~÷³øûÏ}FTÝÃGúµ¬GEj»õZ¾‰·^ùÕÃþ£Ui3Ëù„øÝÇçk«ÿù#ª­äŸ|zpÐË7?ÉóU_¼üT‰ºn(Ïëwò^ïàQO÷pÐßÒÍõ¶ò^ÿ³ýZu©LÀè7¨*»~¿¦ç©º0ØrROµÖ¿K‹|¶Ÿ×ëŸú‡øW?Ö}ݤêqHE>­U{sHEòC*¢µ'o~(¹yÓ 1ÑÚZõž§ÚýÈC‰øcbÿÝOÆð¿Ÿ2!ð/qüë 7úŸ$ßKûÿÃwÞŽà#Ôàmn(; ÎÆ<ÿÁ€÷þS ®€”-00"àñ\@à>¸íi¡­H7ú±êà­该·ãȨ@eRd*Qqa_ DŽàðï…®ƒ;ú",#Ø]ÌH@ ‡ŒGÔ‡ÒÂ'?ö9áÓ¨þƒQúa ÆsŠK] 1ƒäpâ\’@p +€Ñ'„JðÊ̇ è˜Œ}l0g'À–Ôì #ttFHç.,ʇy¼¹×@_Ü^XV/κZ·÷uÝ5¦?_"¼WR%Ž3vå‘¡˜ D$pîk*‰Î^[ܾÑhtÒë;;Ý6ìCõÁð&€dÀG ,Ýd!ø€[±Àßöÿ–NÕí6šâ à¿O`BE˜7PW:Ý"’¬¿¡µÊÚ·îIò{‹|ô1q€~ü#3€¿ûéOþ3ÇþÅ/¤þÿâç¿" à_XŸÜþÆÝ­?–ˆ–úÈÞßÖ @ÑIb°7ò€ÿÐðŽ÷@4À2ë­ËC¦ÞýQþ¼¯­õ‹¸oüa?ÛQöÛ®/ê2)úïþÙ_ýã¿ÐžP€¢É`pü7€_Ë´Ðjé^jŸ£b¸CÆ4ÿdæ€×Ø®ç`,÷ÅE +-ã ð ‘›—º °&a¸_åÇP¶Y ­@çw TTÕœ=•öØ(€X'÷ k"°Ç-^' €G ñÓ` +Às@8¤<Àþ„êaˆH€*>•/ÿÄQC}žû= ä€Ù"0ý é#}B±&ªòH˜÷… @È/´o*«7‡  ý==,Bkõ«ôè¹—~¿¸³×º;1Œ‚ångO˜,•¾»£|ºæŽto]ŠÆ´„<ÛÛVñ!(î\ØQ%:;]Ûnv„ìn‹ Bu×-‰4¸†:‡ Ýfú¢fçõF³û—JÜÄ Zà ÿSI8wŸ0ÆÁtDçtÿ´+֑樀ýøç0”_±ÿK'{jù& \.y€Ãæ ›±è‡í:Y­æÒåWkÞ|¾ìÉà2áýz®ã‚}k†Z:M2+ÄE ÿÉM®W.ÌkK‡!0è™d4ÀùgŸÁ 0õÒ3o¢O-o9sxÌ­RŒu¬]PŽÓ3“x&xj +v,ø…%«[æªk»u!Ùp%«¬¬Ôk+wªµZ&%·.m¸²VÏòÝ;hñ‡}]u/ßÅÇmý^¶«$ÕÊüÄŒZ²VSÃÜ®”ë‚h"æ®áF¨G^«Õwë¯èJTüüã¾»Äëµúš6ò]ÆéeõªèÁ½5¢âP‘;!rµVe¶ÜZ='#Èc½öÑÊ]*Å_¥ºü|Ky)Ÿ,#jÁZ¹ìÁxØ­×v•¶®üTXÅ©×w¿Å¾’×óüã»Ì%¨µ¬ž*R¯cލs¯ƒyñFëa›!Tz•“gý¥ªî¦ø±Z$ÛÝDýÇÆ ѵZ}©º‹i ÿš*¢tE(—™%üE å’vpŨ߻Wßýh÷G»9 .øþ­'v, _üòáð«_ÿüÝp‚0m¿X"ZŠŒø-—ÀãÀ b“ ÿ˜1À€‡ÿ /€dX¼®w6Ž€ÂÒxž÷΋Æ~iþ‚Œ7¾«“)mñ±ÄÖ€ æGÀÀðW&71 + Yÿ†2gÅ¿àϧ­«õ~j Q1àIŽkþ^·†Â ßX¬3‘L—â ŒèÿiCÙ¦ § 2gñQñ +)³ ž¿®Ö‹¸$€‹4NÌôÊcHxïeÀ¯÷$G|Œè^Ø<ê@2> +@Kiþøú?Ç"{Ô{wúkÉ7N¹ rŽPòdPbsË_œ ! @Õ +¨ÞÒ‘F2´éÙ'‰€à €Çr L¡%4F ôH‡—‚͆Á´½ØÁk`p¿töæìâë\€!R5@Þ#üþ„ÿÒý;Êh§»'ÀmÝWUv¨M{§¹gí]5Õ˜§ ±×s˜ #˜²°0»0;{M§¥ø«Ý檋ˆÅNÇ 2Y\œ½¶°à^mvà{m­°ˆ¾4E…/[·CÑZàJÆ‘}h7Ì]Á³A<ƒæÎŸBÔIÍ +ƒR +²ïvÿâœ"CS€ÓŒùð–~j¹…_ ôpÆÞ«zM@ûÔ6´0¶×p\ÁËÿf&õ ½u}uÝ$ ÒHÉ·Üâ œ ++nË•¬6WºM'2,”¶‹ÞŰïüô䳓D<7â³ÿŒ0:ØJ0…Ç¢G«ag¸XšÑMA$Ó“¥[L Mq’²Öt—0i­'ܳÜez@ÌäÈO>ËñóÃÚ^¯~ð“¼wpÐïõ>=ì|røiŸTØÉwË¥ìÛnÂl«VÙ°÷ßF¶^Ï>̳»úO>®f’ÃÞ¾òïgY¯Ÿm>êg»µuféëR]ªg¯Ö˜0Œõ‚RW +@µ "\•<ü‰ë?¨^à?ÈÎu®†eÔ0î€:*4Þ¹#Û&€PcÁaAžÞƒú  D·ÀbË ‹âÿ°§kÞ ÀÂ6*àfŸzÔòí&@:2Z¼³ëø­7·U˜UòFGçU ]"}ÿÀöý.ôí½¥mñ‚®ÎúfFÛfë×e‰ÚÝÙÙn5»RîµÁ˜LòžeH¹,,b Pªû­mú®éæf•[§ÝÞ¤Ûª ~§ûAc{ À7¦‚9ˆÀÀ@Ùd€.x¯ÆJ=oA\(ïÈV«Ó‰Ì©ßøâ‘ ¤ÿ $Q€þ¥þ1ü'¨‘ôãÒÌä”4gañ¥[Ëxÿ'³@y£øêíli®\]±`eµ–m¬†ãÙ·ÍŒõY¥üÒ +àêT\5pôEæ=%>ð…~æÒ ኄÇ`ò…gÑÒMÂ`yfÄà©8ÀEwb €ˆusP»0asBã8sѽ’³‘ñ3Ïà x•ÀýÑë-[_‚Ý{wÏxPXÛYuå‘QVxŠÃœÛÁÝ[ë/MbëXeØœªf™WÕJºÔóã PWty~€ÿ_®Lzÿƒ<Ú´öíZ}£_]B·ÐÙ@8žjÌ + R×þzø$Þ$Z/{$‚ÇàU§-»¬UUŒ‡ä·_U.–jD9^ç6ûÕz_5ïõñVØÚÜÊ…Ûº2UE$c¥,F䨬x˜ç Ñw£ö›ZŽ8뺩úÒÝÜãþìéVH-›U8P‘ eGhÃBâ¼á__œÕäß + Àqp’à—_Ø è|‘É€‚/ú<Ž‹-–q +Pà¿-oÙ°pý¹çÌ®ßx»°àÿ'OhζÖ\Ͷ_bÀ&ö€H7úµ$@NÇÖþã€Æ w8>À_ýFøÿÞ@®`(ôÿ„þú]ÕÏnžÚHPwºæ`XûÚÑÿ-ˆü;g|‘QØIXÁÿ¼ÇYÖ±V_P€Hfy!¬'éIÛ±œ(èOÜõ©&l"`²8€þBæu ˆý£€!ü#á€!~„H£¸€Oå>>>ììÁ{¡~¯Ãø¦Â•Ì£]‰#Ú4¸Jeûé0H‰õàŠ; Fh™ñ“÷(8€ë§ú ¨K’ à_?ø€»’Ä(ÛõmjÔ06 +`vv`—F [˜lÀo(&srç-° Ho7ÝŸè‚°8Ÿ°þ€t…Ôo +ðÁìö›€íöâ¬Ôq]«Sîßn,¼ÞX|]êv£‰ëŸ²à+ü‡ @(Wàxá„;; + ‹>àFÀÎ6=D$I»ÝÂG`§ “a¿«CÑñ Ð×X$ªj…@·Ói6¶ÿ²PÂN³ÕÕµèë s«ý\wºZBéfG„FJÿÎâlûþ^"ÛØ¸ibï¹ÙÜ€8FÀ숀Ãa€bh·ÛAÿÿÊã>øÿÁ,,,¨É¿°àš‚ ü2ÁÿÔÿ“åád= +`æ"ÝåÂ,ÆÿüÓÇŸ‚À½çpC¤V¤/Ú°îÄCk¿“Ô²Û€¯Ôß$\Í*ó圞¾vŒ‰”@±œŸ©Lb˜bXbnñypqyùö2Ê·H‡Ê°Àô¹yæ0F”ßréâEOExžP€#¹Ò ¯Ï’ > ômG·½ñ…ó©¬Z `„C@<)ò>R[¯NŠƒ¬Þ¡[ ìð©áÈ ¯Š ø÷þØíôþˆ‚œb\}SaÇâ©‘o£€JpJ»½Z[ªF +ñ Õ‡7k†ô²ëdÁÍHnë“RìßEØØÜêü×Þk[[½ýÿºX¬‹¨P]«â°ÿ̇àÒÌäùóSËë›QMÌúÙ t‘Öj–¬–}Z(*R]{•ºÿZù€%©  ð`àc,Ã.€døåof5’ ÔAcÇ ÒŸ"Îõáû ¾Ç I€…q Àü…à€¿ÃQ GA'ÿè ×pJR\¯rÀ A}ˆ @Þ#PB÷ÇHû“Dúáü¾>PXò< €ÿiš¿±ÚKï#Ò£mKŽS\cDÿ<§ðFäÝ9I|b`06ÀðÕ‰¯1.Nõ>*X€} ý±ÍWð~Ä €n'üƒ4 +à‰>€>šDtœVªÑQÁôã”Dé¨KÌ ðЊà/‡¤¢àZbZ;&AìÀ€€qá` €Õé!x ½ñØå·gñ¨[ȶ›”¡‹ úùÅ&'àúøàÂì#ö¤²ÎgU]%.ÐZ¤ëcÚnï5ÍV´©£Âénë"÷Û”ÜØk‚ÎdiïØòÉI@y59¢»(7>h¶ 6¤Ê¢Ð‹èîé°*ØSÆ¢ÝÎÎÂl zØ ëèìúÉÖ´ÓÂ`Ö‹¯Ïn¤FÕŠ¶@YªeE>ø`7‚€­#Cð$€“?CÑvì&/èß@JL—w&Åd Ðé(øi¬@ûíJVŸ/gqµC½³W×¥Ûü¤IVk¥™)¦R~É +°ª×½r@m•Ü®à¢ç1`¯@è‹¥é  ãô¤b¦±­ïï)ÀÔ² <gCç}[9z£]¥µnhc*¼p1ˆl•qàíªï'Ä5§Àµ!|¨A6²êÊa„ÎÕýoq7·À:ë½ë­‰K¦"ž é›ÎG-K3XáŲ¬Ì¶6tŒF»@²êR +ñ+üWE¤K}WFÕPžR¼éàY”?ç¾í’¼R&w©âµlíÕ¸ÞàN.<»õ~°±ù_]‘ˆ¤›ˆ4’¬¬§¦zûÊ~Pz@Õ†8®eÙR=w‹À@ˆöR‹À´~T^ëoý!üH ÃQêâH*u<¥À?—@¯ð„ú þsDëS$xÅ{]a?aÀÿYfL¡€à†u^€' @HœdY þÈ#€Äù 3PÁaÀsàí‡þWÒÿ J@]ý/ÚðÐs<ߟ$Rø‹(€ñMŸÂg?Yó×g +ÄÈŠ#Îë1úapn‰ ò9bÜKÓ.Æ€þc?È娌Œ8²ZT¼²ô'q,8ŽY´:i@ên€?¨åà)Ðü#€/¸ø‚¨ c¶~Bh€YCj"(ô Ž»²±„ÀH€Ñq(µº¤°àŠ·7ˆ¸¸0°è\·õ€ír¸l¯ã‘O™‚ºöìBŸ=;ìáôwÍÊ¿ wOŠ~k§9‹·^£­¤ouß@͆tT ×ÁÓûÛA «Da\{¸á¢tzщnWúuG`/äoˆ«÷i…äÖÍb—×¹ÎÂv{O…J?ïÞï6í–€[7°0‹B%¶îwƒ8Ða1jÀ-T^XÚÒøØüÿ„ ‰-ˆ^†:{{6ˆÑ27ËH‹,<Ù`l?.GŽÃ ÂpƒŸ,~ë_·R:sfr9££U~µ¶•æ›[9vèx9×6*•¹¹òn¶~ˆC}„·™º­^žôE‘ÓVP2WK—.)?½í×Q ýš¯Ì•²C&‡nƒB•Ûð€ˆI@88`å"öèÀÌÔùè®?3õLÁGΊ“l¬nÜXB5t—¢ÓÓ3•:8y>;³J3Çý1ô¡F’«»ø ùõ|¤µG _)»»Ô=¯Üù‰Viª Iw,ÄÊ—n-ÃD•H,E%‰F ½ùqÕ|RüýºÖüIòêRÚBÔâT$íIeV5`V*÷fUMîøcTPÿ…¿”Á±|e…Žy1Ôæ  )™(—õ~µªŠÐOUÄs^‹«€ôÇ%6sÓîË”1À¬BBþ¸Œ¾µ üKt´¿â¾‘†Wu…“¥¿0 G}N ùçñ(,,\à$1ÔŸ,Î'À‡o߸Žâ¯Ï¬àváÅp@À{Âo1€Ñ Ø}o>̘´~N½¨…w(üýwÞ + À4éßûcw¼ÿWÿå?ÿý?;. ߟ(sCÔoô|cn`ø¸zY˜ ŒF{ìèl”ô×[c‚ à@ÒI‘k‘ý?©öBÚJ9úI¦\â‚ÊþÄW˜;Ó›R»@€ Uç¼;‘¹¼‘ ø=æP@7òõß{QY } +À±8\è@ÀJBä§ÿÂþ €6 + ©@¤ímìÎúÑ"oØÜÐOp  €€?Ƈ‚=` ¶)üGuFŸÇàX€ô·ööÞ|ó~‹X}à#>ø`ºÕÅ5„ú Þ¤ö7ºÊçûÙk ì‡ì0ûÔ&)õþžqÂn7½-ºB?õVå€ã¶ÐºMÂZÌÈvGù´¥ÙÏn‹~àe¸³V˜n7™`¨Ñ„çHÈ\É»J¼Øù L;ZìuÄ „ÿ@úÿöºÁ} *S×5Ô*é(QüeÜ™kÛøo @·3ê°%R»ÃÜ@ØØh<>À)2° ’„þïë/ð)—Ë6Wº5yæÜôÌ<öµMFo ™ÑUõRzªÕJýü€m² @Ÿ€vëþÞNû¾ô^e·à {Û m¼íÍЊàJ a¸vM{ð©ê]-é6§z‚Wìý;ôóÖΛ&ª¦B™WY ¼ôkªƒ¼Ûîë×NÇ +¹È‚”|¡·ðXéDBv¶U3L`³x \EGÄ$è · Óœmt÷õín÷þ^wgư'n¡¶ÛSE I >PöƬ-*SÒtHtw†§Ã†÷•”ð¿Ó± À6,¨=Œÿ4È«–<$É1 ÀSÏPìýÓ?ÍýÆ2=AD—s“„w¹à /ZZˆû27Û7¯>ÿüÜ•ØÖ1}|v°ŠãlÏ?ÿ|‹!ß çy37çç'ž/“d~îÂ…O&É¿ž˜˜8wî_Ÿ›˜˜<÷¥s!ñßù……ŒçTjd¬|•û¿ž˜VÆ#’ÒŽKÎÄ3ŒÀˆþ°†ù¿R{¹¶Ñ«¬ô9–Ò¦†¹õZiâÖ¥[Ë·–Åq<¢r»–±4‹H(ù#œ·¶þ+j±VJ õ@Œ¿Œ¥@Öcçe¥[ÂcSÝn‹qÜZÑ.¨5ó…ºt]„Á@¢ºô«UTÿd‡`B?û†TÖjÙ +¼/ʳïFð5Õ<Ï(%QØÊ5Q˜æf +O@`ÔœÁFc@`[Àø\þÆ>~Ä@à }ˆ4ž Ä·I,ƒQ‘B÷g™úôõi``ð(mêuQ¼ÔáDωkúÞö€ç#}P,Y쇟Æ úÜkÐXÚ‚Í ÂÂæ¶Ðü¾°Ó†ûèÝí·›„ô! Ÿ_¸FRü@Åã®/`bWNÝÉÊT°L¹‚a)ÞÚÄÔKáo,,Ò­ ¸…ì´îóë¶! ;ÇT?UmQ5jwÄEtcUÓ(³fÃŽwn-æ6V›¨àN»¹ …_È/oÛkQ  bav{OXÔµÝ7u-Ñ•vã2&‰öÀ ÷ïßß™å>lø]® ZT+ãg¯ûU«û1 0àà€À¯ðÞ½Q Àë ¶Úo"_c@8/ಇz›N¥ÍšVÕ+Õz™0qR_* ËÇ­[©¾T®¼D šJµ\ªÌOToΗ+¥¦öŸð£Ù9®¬e*´L»ýJðæÿõÌ ˆ=33==99-.29Ad ‘К±€æx¢L’a!ý7?sáBib¦Tεl‹ã»ïÛTĵØÐ”WýŸ#ÒÐ}J[aÊA-ûåòÝšç5”0 Ôî“«ÑãF|cy¶TÏú‡¨-T@P-«Õ\;ëÙ–×è4ZßʼIy!üáýKûXq-üŸÂ Ö§HðŠ÷þ“gàÁø?ôX@v#}l €:èéþõAb ÀêW—ÐùŸø9qB’%¿ÝÊc€ŒY^|àžßÆþÒ‡…á_¿ç‡]kåß0À¸xoldqþ['ç£í!n åÁÿèÇpâù²P{ØÕ2æñ¥L&käZøk€7øz8¸`åD1ÊÀ‰Àª?ÂãÁ(Ãö õˆ(BÛX|a ûÛà•9£Š¹°ô¡ “ãï¼eë<˜­:&&€A€D‡“ €cBl¡Õx@˜D<@À€ßo„@µ@¤€Íîtï·:RÂÉ= µ_øÞÁ ¢fgÁþÅN³Ûl¾NØým‘ŠË‹ö"ѬO^J‰kZ +Ù»{÷U²6ßÞë°túÅÙÅ=ÔvÕ U¼£›ÅpÓC§Ñ¶ëB)öº]B,v!JÚ‘’ÏP¼NcFÀ=J„ÿ¾{Tý]b @W‰Y¸Ý `+DK÷¨-.‚ëÌ.2üP9ûÈΟØ%Qy„ r×€¢@u üO.<ÈøS’˜ˆI¼Ž—ã€Sä˜)࿨×îyÛ’~·ß¯W*7¥ËÝŽ9~x!Wp뮼ZË£ó^P­å?îcÝ/片Ÿ÷û[›Yƒ ÷ë›ý~ï‘Þî[‡öó­ÊKsâÙçýÕҔ狗­l¶\¾Zëîð2(Ö+¥Û(›µZyzÖ¡“Þú Ȅ̔fÎ3Páü™³&“³¥—D1úª¢Ê…¸¼$`.—æ&¦K:ãK%å8e›šÒ÷¼§~æ™õh–ùºñ¯0½ÇÐ{†U`³l À@@SÁ©QO·[š¨áWé"V! è–Ôgë囸ò¿¶åùøE±*i­Šo|õfb"Øá%j1ÊWŠ L¨ çËuŽ‹|ÝæêTSÕ‡åzV)«kë›5¬BbÕ.lôßÖJefµòÊkx hû5í¾–xRÅk°_. âØ  t€ ÀÙó<+ÉËU~‰8†#·DÎp¼¼Ö'c‘žJs3á¿À¸Ài€>ôþ°ˆ °}²Ö§Idûð=Àuá¿>6ÌÚ Ð£¾Uû!ÀÈŸŽJ ’ ‚]G6ŒÿÉááûïZ×g6@~ÌиñœÀÛï¾ÿÛY†ú˜ÿð K÷ú»…àà'ù–š +Ð+¸“@~» è3Bx€»ñÖ?Òÿÿ¥3œLÛQ ><Ì"ŸT†R/Ñ—'PîSÛ p‰ÏXÀäøŒÍ ñ®‰€®9âPÀ?2â ÉØ(U +ÅßLãËÄbKâ¢Pý£žkvÿö<'øoÄ õ¤Ð{“€'¼@àÿ ‰qE@XtIX”£El?áã¶ÀW`(𓾨Ì@â_lÌ2a¿²ÔŽp°C÷;Bü:«,gÃ9_°OÙÂÊÖ]õâ„RÚ;̱çâhô “pax fÀÿ^òý·,¶ï¿ÙÞ›]Üi쩆m¸Bdßnm îR 'ZD•ïî<×èîíýE{ÏEv¢Ãö9J¦}ŽèòNãò¢}péßiJÝǰ³ƒˆïÔ|XÿÃþÛz”Š>,´˜;´E$¤H€dÛ `(Å>´bѯá/(+W)ÏÌœyfRhå>3¿¢«•ÛUtÆLºþ#4Ô*ÓßÙ !‰`§—à*Û”º]š)¯×è?ó BT*(—[·Wmb”,ëëyiº„ ›èÀ–XóMž}frJêúŒ6Òÿ÷éâ8Ê¿*J㡆’[•™é ëö*ÔïSçÀ“Ù¹Pߺç¬/õGq ,Öí½ °ºI,ÂÒòR€Abµ„Úb3[ϱ~¿0qûâ%µ)å{àƒ.w Hªæ[Y24 +ÝŒ’tVBi@‚LÒÈnég´B»20 ["ºÒš¨€.rÿ„GqÐ@Õò*.|ZS6c7ü†Ç›µ••MWd(q:I¿¼"ò‡x0C©ô‚ƒ7Ål +3„î—ûëżÄÃñBZÔ_©â#X³ Ì œW5C¨Míæÿ|ôGc¸<ÆÀÓ ö|½ð®%€?³€Áüç¿ Àá ÀÃwAÞq‡À1 à;xT€Ÿ@aH&ñìý Uߣý€ ßÿ­,#“CôñâKɰk ÀþkY胉,þ'ˆ1äƒÿ‚»„õÒ=‚/9p)ôådjÿ!yÁ F2Ç’3È'ú”HHšàÀ¤ °áøêV’Ê ÜϪÃÈ(-cU¤*,òV¾@q'àïr²À-GFP†•~]£q‘±e <À~þCÁoÃK®fÒ3 omo‡`Ø€ºŸ EÇA‡“ûüñqÚWVíö‚ €Òë2c¨ºfË ÿÊ>?ðl{Á¾ðÊr±Ù¡&mA½ñ“”œU†l`hQYS ýü tU@Ç6Ðj/>·¸¢õ‹°¨™'LGéÞŽ“…¾Óhã(â¡“ŽÔµ"÷ÑXp'Aºâí´¶[·²b`›… Ý“ ¾ÛY˜í*ÓEr·ÀCT„@§±iBÇñNPõZøà}á¼ÿ$ðØ€€ÚŽôëj.ã?MàkÅeãøï” \(N³Œ“eŠèY¬|q)›TK—&ÏœšºD@½Ê‹Q{^ÚU/D/öÊRõ§zg+‰ô6^ïÒ%C›Ôùž7WW·fÎIi¿UóH¿‹ž`P ,XP¦ùje•±ÂO×ãýÒôüº6=PïY°_Ø<ÐH÷²þ/‘Jª»P5c k*€}˜…LMг ˆR(_±€gÎ|1iç?ñÅ_{µêÉLZûÖfÿÎRn·Çj8M}j)CP¡Òä-ÇV¦x”^4ÀØŒ’­- ¥ˆÛth˜Š±äµ%ÏüŸ„¢°(5ðMº*ÙÍ€à¸-˜œ_ÅÔÊ=®Ït¤’ýA¶»ž à©È€ĹûJy3e-Ñí0cðŒtÖÕÙÕªÃú«E`-1ÊŸÜbªáüŽê =±€—U7ÕC_¥¹GIéˆÀ©sü³ùøîQÞ<ÿ“€ëŒû£øÿNÊýá÷ÿÓ»®Ï^¾<ûÜåËɈXÀ‚ýQ €.+,'€@ÿ$‰èhXˆ + ÂÝñ` @AÞ‹ 2=ÿå7'sßÀpüó ¬Wë¯þ$çQ@¿X%† Ä@Áþ–Ü4?èÍ!’ú@¯3ñ)û¾6v%ðð ™¾,•_bpb Ô±c +Wß(ÀÝ©…Å£sÄàDÇ|rûlDÔ©Óâ(±ûÿà @÷ŠúŸòpöô<‡HEÉ׋>šj‹˜¸õ,î°¾l` `d€@" ³Øó èüÚPâE!¦àÍÙaÙwW½2tï¿qì¹…Å×_sm}7tµ®Óm3j¥,T®Ê0÷GEZ÷[Ýûoþ£äZÌÍC-(;Fö³lIñ/XÐ}ru$ÜÙnlwT¡Æ¬šA•ÆXÑ ³¼š‡HƒJæ†PR݃þööµ†€¯µÇ`D5¥Ð™ä; Âl’*C: T€¨Áâå…Ž=[ô'4:]χÔ"â’ß-eR´›®Hø¿×² zý›¢…Fðÿ4€Òyµ½Pþ˜@zÖdˆð0K¿Ð—Ny^Þ¥™³Ï8`•I~Y¥ þV™ENë—+ëW˵ÀF°IÖb†ŸÕVÃslu5›9÷C\T\HdÆeÑ‹ 6oaIŽ`@ìëW¦í³Ïؼ$çÐÈ¿:Ër欀Úß ô9,W{wK9‚Á’|~zFU‘æjÛ”ÔWòW΂~LÈ$0%¹Šb>ÁÑP§µpï?¬–sàNMèP¶™mí÷ûŒtÛ¨Ý.M–.^¼HC—V#XÒºƒ²ÙZ™È¿ÄìYwÜ=!áþm¸;V¬üZÁ!¢L‰.èߌð žúŠˆ‹llnõsýzV[éǺ¶JäAéâÎÕ¸ë^‹~µò©+B焎 V$+¯ÔÖãA¥ðÌÔªP5l"JEZï/U°H_þ`¸r3Ûï} +(¨Ø«¼¾Á’|ÓõÐþÀ²Qû—î@6FfD÷§Zb6 Â`ö2þÿ"×Ò(•]˜ýßzðÎø^\l @lŽ €/Ô·ï?d ý o=hpÒ;Êþ}&¾nzÞû3[Ä + @Lý ‰nìʰ @þbëÊ× + >~ÖbÊñ-¤°÷;¾ÞQ ܦýp+ø—ÓHIzI„ÿf±ã“9ç#IR쥉è‹Y¡`ñ‡ @¨B 0`0 +À¨Ï7;a.} +íý÷N˜ P«ÑQÊ=,\eägð£‡"Xx³']µº9b*t"<ùÛœÔOˆá>wø¶`ÒW6£ãR#sB8]ãË|ë·q1 †ß ©‰û£“ t¢mC{§Ó\£81l€„à&(Àq®ÓìÎ5Ö­î›a-›0€;ÒÀÅ'./v0Í»>ú‰'y í#ÀÕ‡Ò™ímámcÑ#¢Á[åЖxz=Û]œ +vf¡(xŠè.韧«aa¡Ùîmk›:¸Û@ä‡.ívïÃ:ÈXUQETN‚Ñó8¡ \ŠМF @ŠQÍëÅÅy#~ú¤s N…ðD¾¹²¼òÍÊZŠèU]š‘*Lµð?õV'¼Šw~ˆö+8œ'!^@Xh±/ÄÑÑÊô¹‰)k†b6»—¾¹úR…™ÉG ªF”I@ºt+/M—Ù‹P=!瓯^ÈÙɯœñ”½O”Kæ&ä‚,ž¹ˆÀ˜û€g‚¤¹æÝm ú®ðÈ77Á.ï[66ú+å>€ç©ùT >€™‡ÑÓ¿/ˆž¾¥¿¤BWk­ ‡v×ky½üˆ1ó¤ÿBBCÏ«7•§ ЬUk•b4?ˆˆÍÚÌñ™ðøSSòìþu8Œãðéøæà”ë”U«[¨æÚþv$ éß¿SÖ2æ{’D‹Vô¬x,o‘DldùR]Y½ªjÚ£â¡E6…ÿüêG¸åÖ>£%77Ì Šªò/íàwø}•ùÆýüZÞïÝ —Ÿ» ˜Åðö» ˜Þ{³¶lxÇÀ€ÎÆ ôO2¤„ +± ÀûßÅ °€÷Þ/,b7nü_!_ÈàvJ‚žïpß?´U€Q?>jØÌ’^>„ÿ„ýþ°—…]5~±ú¯b“·XÕéÿgÌ€Ýû)!ä  tt/Xã0`ÑõÏuaì .ð¾bƒý^{yÔ ^ˆ‡í‡ ÀH†£œ<,ú’(ñ1„x­KÆÐM:ßÊIXóŠX‚…èÆ@-‚ŒôR£}XºÒÛ…ËH‡8ÿ>ylwßhcñ–Ì.q0©° ×<Ðq[Ø¿·óA÷/;Ìÿ¾7º,·_mVÇ.ëbàRå4ÁOpMw!æ!QÕ8ÊrOL$ ]^¢ƒ-:àÑ»Ûà$Gõƒ¯hµÝ¾ßÔ3±$¦áBš áÊhW@H‘WYß›Å@y‘pTØ©ViâÈ Ój&GpRm«æ ]¼¿ÝKÀ2ÐjCf=ÂſՅ|Ñû1Úpd €rT)7ê €Âã ¸TΚm ¤ àÿÙâKz)¿¤ÏÓ.Ë·ºh¥™)©ÂSĬŒh~áK¬Ð­V²ú@8¼)hЦ­ l·fÎͼÀ\¸¾uðrIŒ£Rú¦&«±ÁKÄòÆÊ´%y ¢OZ¿œ:?ðD +pvÆ~ Dx®nMÌÐ1˜t@Øu~Jø¥‡Ñ¬ÐW«K9‰„¤ rã°G7v’Ð^—’À])ºyÖï'˜Éî€^üì§+ø¨º|ÕÚ­. 0g$àF¶[DÍã¢ëèyV»Sv&²Ë³ˆ6°±q°ÅµÂkeÐY/ç0m’M_?gÚfÄýQy*6Ë{[›[™~ûžª‡ütn½_c.Q X‹ó çf)+ï‚è¹y>€Š3¡JÂùÜm£ŠT?$‰.Ïúµ<ßÄM´OMÜœy5W¡•67©H7‘y€ ÏohfñÞbÀƒ·n¤>€ŽC0Ø`ðÖ;ïü‡¸˜ãÀY=4ÐõüÓ À) ™¾óÇÐŽ·„ò¼ç°ÄXb6`& |: @”=&ï}MP}`@9: +à_ãQKÜIôýéÈQá8O!ôÿø$?Ÿƒ¢MÒrx°ŸD—ùJ‹Öœ¦o?°=4t¾àAœÿ ð™3kÕ;|ÊWëz…Õs‰`$éz˜÷×ÍŒ1ÒuËK \«e‡ýÿí¿ ªE„v}” Z¿V§‘d·70zHGÒ9Oö—å‡ùá§?ùü°G(oŒÏsL ZõóüÑçûL¥/]ºZþq-»›ÝS1˜Øu:cÞÿG½-¥ç²LÉjõÊüÿWªºêPåêø'gì;˜O/«×úû½¼ÿH—«fž¢—‰Š<:üôóO²únNÀÆT‘µ,ÿá~Þ{ôy®Šè@¹\õp=,7eè[­¦¶½µZcbe€êq˜©E®–ûn‘?ùoŸüÐõ;<ÔØ)R)ú¹èÀ'‡}*²ÕgbmªöûÃOÞß§geàpšàŸÏÀÀc [§X +°gåM-Ò! ¹“õŸI_˜½þà _½Œ2¶p}`çmþ7°úŸ,"ƒ¬Rýô ôO2¤#>ÎT—µ‰Œ„€€¼°ÜЉÅß}ïI—;*ï>êÇFz €Gðw3 Ç¾ÅHCvÿø@#ôÄ@Å@î„âéL’ô¾ü¥ ‚èÀ1@=KI\‹ÄƒT”ôí® € ?‰P[þ¨ïQCøOèÏò ò\€×Ç Îf<Í@bë?½ÿX´Ç{”+˜”iùlc¬ã À:4&€–@N8Aê/@›D0`0èT>¥L„;­?ÇÍ: °²ºP…ÏÛÛÍ?ÝÆHÞP6Ê=𠵟KvÚ{*Aʯ¯#àëªÂÂA÷.`¥o4^7Ú6Ýß»‚ËÕ¥ô8lo é,QVœÞ^d¨ý‘àåRµÝì¥õO²Õ­dÏ azå¯T²Ú·…Õ9ß–Ltc4øÏ‰­õÕÊíÒÌt%£ƒ?hFaÁ°÷´ogrzé}ØSOà Y·—Y}Í ÚU×O‘³+«·í\@þó¥Rí–ö°”n],1çqäŸò~æ¬>îЧ\~…ÏÜ‘®Fh£+åò\yéæÒÒªÎI´¸S^*/ݹ2w•¸HWµg¥|ui~¥ºôŠ Ä’Nßœ>§ìŠhÚ! æ.(Û„?˜'dI/-]³ssK¯(+‰ÊÒw~~iiîª*18­ôK\ŽÑFG&$¥š’y_NârõêR)w%š›#ÝÒͲJpŠ«7¯êª%eN@ÉUÝñÒ¼*âWò¹WÈ\iT Uwîyå7ý¼ngn^·4=9qnzòÜ™s“óÑ"JýŠÄ5]zeåÎÊüÕ¥%µHµªÖ¹Cvwh*ª­û ÔòÕù›Ê_ûèÐÕé8à‡6NdÀý©méq ÀwÚ7p‚a!wA¾å`àLœµøBüq€°ãÈó?~øÞ{ï`ÀàÁ»¶¿ÿ³€øþ_jˆÒ2€ýí1úè?:`n|@òÀ®ÕË}+µüN+óVßÕö ÿ wHiüŒ÷z`ƒ'„gˆÿÉ00øîÓ"!?|À0Î@N…Qÿ#‘}°Hðë´WXT‡¸fÀ!àT€ †èÓç/ö ÷x’xÛ#aŠÛ0jH^” èˆ‘€ ^‚ ûPSÛÊŸsBÔ½F»û{ ãÑÿ„˜:ÍÈx:Õ¥ù£·ô¸³—A/¼;{Îâ^s§yc»Ýi7[ÚmwB20Ñýð =i·¥•Ï +®©€ÑYpÚØ^\¸¦YmÖÚ˜ تl©ØÞ$‹ÖÝÖ5mê¬óPæÛv¿Ç’ mªªüÃÆÀaãR Ø¼Š›°‹£O©ÀAKÏ΋€_1NpYsû² HoJC7‚ZþÐ|Úîv»+r…þ@M(üöø¡ÿƒA=ÇÕ{œ`ñÚ€,"ºlÔ@gtê7 +Hä^†Nm®²±E\aºq~à¼óÚ\•1åHÑOPQؘm–^ß\]šÏOW7…ó·J1n¬Œê}3Ùý üð¢åŠàpq>ÁóùÉ™ÉóÏj1°ÿONé: |l< g¦0[,{x¡ó¯1ܰRšžW3…ñÿ+gŸa:`8…?Ïè5†H£¹Kx3î¹Z»woéÇRÌ¥}ß«ÕêОüCúã«ôÛàc‘¡{µìãþww¹Š`8ÕZ]eWjÙíõ›ÓóåÊK ¨°Ôwû²Þáá§Ò•Ú/Ìz.º_½*]_ÅþU?4þ,û8Ë#Ãìã²êáj­Ù$PÓ \‰TÀ¼Îø×KˆÑ°R¯“ŒÚéòìµüð0ÿøÎRu­®Ñ¿q7Ë1ôóÔ½q¯FEò;ªH=Ïÿû£}*å°¾u¬z˜eb=i‡ =¢l} +[«ª:–ݼFH ¬ß?¼³›å#–”¼¯ŠäWËÒ𫃹ƒ?Lkd3£ ³¡Àÿ÷ç@õê‹€¿‘@ LX o''€·°Ø0b@s· ëëwý“$ L@è`/ò³¼ûý¿ú>°>j08Á Ðerøÿ×ôšý‡é#6pÂ(þÀ6{ù®Cê%‚ðüüñ3H—*—Ôãìs–ƒƒ‘Hÿ¾\OR'Ä",K€uUËø/j€}À6싊|‚r-Ïúü÷ãÃÙq Àþ‘Ál€œr€q €ê!Ý?½Ä$éýÎËßúÿˆ À˜ Mž>nmé‚Âà>[€8¡” `07@N§›M€öv+&ÐoØX6J¡ßit¥<+5.ÿ-A]ÿÂI¤¥<¡#â`hoï1þçZ£<5vŽ¿m4ÖÝ Hƒ˜@¦pžâ¾ÊnqGW˜àIˆÀS¡ø¬Ã³I®™DE;³ +“BC¥!]Ÿ„k¨lPžëDÌAT–ˆ†ò-QÙRª…Ș﹥nW”¨ÓâÖ˜»`•[yÿ~"—gñˆJäøb¡ÊCݼÀ_-·÷fΞ×ø—„hü÷Šf’°·à‡¿Àÿm:Žz„èÒ9š¹,nûM;*¡®‡ß®¼ T±ïŒ”ìe_]Íûsæù_ »y½¶UK¡^̰gëÜ*“» €^dÜœ«sG̵+ÚœÇ0iþ,XŸ+Ëd r+¹èdŽ8³ÿFè_ØÎŠ +Ü…ÕOê8{I€¾‡Òò-êà²J«„&X¾D ™)>‘3ó 0 >Р1(Ç,6¹>W³ƒ-:ø8qmCtÏõÌãÝxýísA¿V=4ªéÜíÒÅOE¼QšFVngëÉxRSf™ˆV̾Cv›vËjóU%T– +I¨¬$»Ò±²Ö–²¾©­¡[4:ù­UL í›9Ά‡åìÂJö¿WË"w‰Âä$d„Šì÷˜˜Ø J™Wçë©Áïr¬;üÈïÕõÚíõù™ÊyI ’ƒÔ=€`Ô"¢+á“P¯Ý‹Ú(ŸìpiE(?RЉ…Õ¿¤¸Vxëd H}º¾ÿ8)ðÊtAà­Ï}ùòs³—“ û¶î Ñ‚FÀß2°Œú؆à3Þ$Ÿ?~øð½wß¾±hðà!?Ðn€W€-„'Q†å4à·¼ÿРÏÏ?¶áX€'àöö_[J˜÷81Æ«éõ¯KÛK§ ©ÀYP_'|€ç2„íÛ›/]ìËIÁ8ëç+é^^ž@qW6왌ãK,‰X@~ñ ôV‚ÂPä4äXNŸ Ð\"z ŒPˆA1 @¾ñ` À &D,€a€ñ$ðåè8[Ìœon ;;oîÝ×›íõëtˆJ(Í׺>¸Iíìû7{MJ»àj‘!vʧÕÕ9¡ã¢àÎ\"n3"ØSé¾3%Ôssd>ªHSìFø/® %`·ÀUª—~³¨ïZÓ4{¼¿% w€X +;·F]18¸F:¿ÐT)®6ŒðÛµ0ƒññ±+vS™ÓR³:i¼ã.ª¤¢”¯òwã>·øzõ·ÍÙζš²-RÖ± ;Ö@ó… KǃÂö j‰¸¬q Çÿt2dÇ À„¾~!tŒ±Ÿô¢0÷VÏgµ¶ú²Y€9C¾6§—u¸†ë”‡†Û@²¼öÕÕõõÒœƒî1úY‰‘¥rie…à?p&É•–. Þ¨ˆ2”Ó(€px–€½3ç'§…ÒÀ 1{’Çr€³—–m)¼—ÅÄ0fÌ8È^ü¢€Q eçn€gΞe`º„˜9@°>ŸÕ Uð˜Ð†‡>H^Uë‘„m_W¯ +îâ\ey†‘•·DæÕÆa0¡½oÛƒ/ÀÖ~zò¨ÏUÝ´”³N+ëÅ2‚:Uofµz¥!Š_îÕø?<”—Ítª˜ÿGy0éŸÔ~nŒ“«b HTL08•U‹¼trCIð!ôÈ\>ôÀ³ù µÒíe1œó“S%JàJ.À$B‹°í»:¼óqÑ ÔÈ“×zKkö E}F'}6™?Õkÿÿå`œŒ<Ì›¼€wðX óC â«’à{ßeÊ@׫¨Ÿ>òã"èO}ˆó + À[xh Àûa)ðTï~?ÀÃqð…þ#À¯LùHì`€“ùúÿôIDAT À¼¡ß×çF#& €I@/ß\q|Œ€û·¼ÚßÛÚã§Áa§ Ìg ǽ=ʸ˜Ëœ’ÆÀ¾d\g!˜ê•01€/‡ ˜6À&$úl0î{5ØôÆã㳆I,#£Y^!ð¾ä÷u0LašÞ*Lm›Fú7ŒáØÝusÄ +ôímï9ߎãøpŒC ¾€›DÊ/×Y‘hî:¨-î(”§ý”-˜©ŸqPäš Š°½Ì딿ÐèîxS¤@´DEÒs¿‡Å¢Ííæ^CDD,Fl7­ðë60Epƒ< ]¬Ú«&Êûõ¡ÊL‹áƒí†ZE¢fl† ;Ú a  ÑšŠ\†1÷ä †P¨…ë¹MŸ9Á€´ðûô I¥V)Ýü7ÂÔIáâÌü<ÃÈV·ôfO@S<… ýÚ\-×[[Xêp6SßÅÀέ>£Ô¶6Ëóµ 4`ôo]ºâÙcnj¯ôÍ—ìE U ˆé5˜.­âp‰8óç±Ð£þ ¦“@P}ñÌ™™g°—þ½O±Ž—É–OâpŽ—&æ+Ë·.¹ `R80CÎZ÷a€žDê.¯°\˜¥uÿj^Ó N·&½&ÀYh&ÃÀ.#Ó9ׯå íV+·.9´B©Vº™«­Ö™½WMzÛìà?[¨×¦ F®×îÖæª¶–ëËd²•:އ^mép•‰}˜è < wÄHâÈæ +½4pb o~G°MU´¬’ÛæVÞómë^”ñfÕ¾žf€6é¢N*çöíJ­4#ö&05u~æR…ëT£¾DüˆÄªr­WÅËO¿-Ö±{ŸC†p:îFlfÿr>T$ø?®Oå%%ßà-€àí "…@AF,BÿÁ(€ï¾}’ @þˆ( ¼-ô˜¨ß¤WiÿkXރأùƒþBøS*%)‚úãE¸ÄÑç¯\µ |²Í¬·¿»”öì=FÜ©oÈw[óOœH€txã?:¼áÔ'±ŽÃ8$ž*“‘Ù¢Œ\b˜ç“¯ C>m¹§.0Á(àÞÏ/>Î(‡>ú$€ÑÙ¡ Àï}õ«ñÂI¯r°9áú¿$™ ÿúe=L’#Ãp¤À ™8&`«„sÂïfgYw·p'@s–H»a£ÿBôCëËÌ>„õ—€Œ…N»A˜#pC0ªZH—^\@ùÇéŽTÚb` I••ë²Óý*³ÀW ­e£Ólˆx b7ù÷Aÿµ¬oÿìsØðÁdXÖuǵàí{O¸«äªg”óÿ6¥áï4ÿRlC';b8ª-¾zšm´‰ý×`¡nÌHm±£vV*ò²G;„Ð X¶Å%¨Ž +¡‹ +Vh2Ý€6!ÆÆPjí{qVþ'éÏâø€S ’”ŒsB€§ÿ Ýén €ñÿæüÅ›µ +à‘ë4_/¿Ì«_©³Z¹V¨¸Æÿ@0eã;L8¿ú‰^ç¯õ*Ò™…¾&ˆ‡÷ûŽ€¸æÕ¤ý¯®Þ^®¬–&ÊÌ/Àd +€ ¶<{a€ p–`€"@µþ³é±?U–Ópuz°SK–—kåéjŒH¸¿ˆ!†!Â}‘ +ò=ûL¼»åïPOw–]Í*¬CB> àdAé®ðÎÛŒ…  @R)Í÷Uü)VÃ_"]²ñZhÞQ +Í;WUNwÃõØ–*I^_RE€W òÆk‘'žDUŠ>ÑõLq` Ó.¬Â8ü…â«YµÚÇÜ^T_ø«”פ|+KÝ0¼"Ï«­‘¡w c„6L)*µù™Õ™åK—J"j3¥U½²äo)Á?r@«œCÑrKµýúHEÜGe=ûgŠ j×ÈŽZ û¶¤íãPýQv", Ñ"ĸ~Ä|÷Ç,:ã ðg}¢@‚à€8#;\Çðç€÷™™ðíÆu)Ђ°¼üG¡ ø%éÌûs£îÿi% +b_ûw"… Øä¥—(ÐÛOC;P?À?ïk¡Ç"è \¶šæŒãëFj°7„Mž×&‰Å¾ô;_Æ£?4ùð nwý{<8iØwqúµð7Àã ’‘ë,ƒÙ9gøÁ`-Òß^Þ DotS€dH€¼Þ +@Áœ‚Å#@ ` ÀŽ»¬Á9Áœ2l, +µQÀmJ×–m)?ëï"Fn¥@3Ü YD`; D[ÆpOġٰ·6qPÍa¹‰ÅYŠ¢5öÚ÷÷ö¶[ÄâUA*½µsŸÿ%t:žBXP{'‘.¹vM¨I›H Ñ +CFwO"°mw~ –ÚSžÂÓÖ}UG%€ÂªµHÀöžôsm-2²o!BøÏ¾Þt|c±‡¦Î(Û=¨P³éÞ÷mUD⪫"úâW öOQ-T#e¦'¡+"jy0Yq[åîìí} +hžç +€el Àþ§¿Š0JŠ3jRJ‡œ)'ÒÙôN}JÑ[}m­R™ù7Ò‚=à 7K• ÁD¥²5ˆ[_ËV+J„i·þJm_/nцšgÈ1¾¬£•`fcµòòòíÕÍÃêÍlƒ^ø‚”™ßg^»/y×ÀœFÖtÑêòêKÓ¥’ … bꥫ^HŸÑpÉà ^SôLHO5T¥^€Jå›Óó·!dyžŸ¡ìXÀ`€³gö@€fµîus :ƒÂn&¿úºe$JUèÈëٚɓÖSº¥â+åù üW[Q¥¤’ }•“ý +\ oN¹ˆJRUˆè㊬gU‘³Š.Tj½aÉýÚm ïzÑ)®Ý*v_¥Æy%ÝRM«Õ}-u±ˆCÕ'9ÇÙÍÍDD¨ˆÎÏ)I!D(vÕ=Ôæ§_™¹„ÃÆÔÔrˈ«Â¥f80”GeåÈN4¦VÛ\ªë  ŒÃI8*YíÛÿ<>IïScËË 4† +¡ ˆFÄhýXyBzº®?ÉðöÀ`0$'±>Ù`µ?mjý±€ õï<üþ÷äa¸~Ý])П½ðÁ?ä8ðàϸÿôq7+:Â`'Àc£²ìµ^/[Ê>9HÀw‚þ­Òë ÀÂadgÎDôã¶¶x^€u¸Žà²ð}19Ú À'=Ì/‰_¹ô~gË…¶LH(K¿èˆH€a³®YJ¢D‘¸EQŒGŒÍèµø>æ~]óõ;[žöát$Âp (Àù1 ¸·ö î'ˆ °³ý†`V"üPB€7vºÊÇú` ¢Oî‡Á•}»¹°ØaDÝ6³êB¤| }¥8·ö´%—}»$ +£!Q¾Ü +*ušÕE©û@öö›ZÜWÕ[mæÞo·ÚDÚ{½½#ÐGM.N9¨ö—a! ;U'}qêSC4[Ììƒvö?ì:ÖÿöþB-¶óè¯zwu‡ô74w>`?âþ©²?éì,Î.‚Üø?vÔÑ,tH4gEE¢"~MB!,\Æ ‚zˆ’pv1uÞ/6¢mY@'ZzN¢4WHKªûñ1c “ÖO9€¬"YœWêÓI¼«€`>böêW+y*J¸^æå:Ð:0`F—œDš| •+°¸'ÿÏ¢õ±})c>Àßi.,4é§”£ë®‰XAîtÀKæÓ½ÿýî‚n:àï ÿ[§»otÑ¥±L,¶éŠŸhKéwBS ”³n™*‹íaU•N„jІ/ììý€ØFí†4qþvƒÊµ;F*ÐÁš±Ýi~Ÿ‡6} Û-êÞQÍtûÌ&€g¤n®ÙQÞP'µ`›Žƒ…mµ† +nhOY’éˆ<©Fb2Ä·‹E€»Ÿµ-Fk‰V<‰ñ߭ΣƒkxC²›±´ŒŒþ-þ˜x?½xPŸÀSOpYˬÊ2¼?´|F›‰ìÎ×SŸ®$Þé€ÙÖÖOtPH.¬]¾½±%ÈDÅëNJý7W Ãó7éW&/™hSa¹R«l¬.o•§…ÑVÿƒL¥pç±ÎSEÔÿ'0€É)]{Y­,¯‡H5x¡T©M” $Ú‰Œ%ä9… «‚‡€í  ½¹ÀEAVí*ð©™ÚkK/8RpÎwOß<{^ç+K»´ŽªtHPíµ†Ú2Ìñ†]"î»D×y©Ëv•†PS« +ÿÿ(¼é1d•«à² VM^Ó/ê ñ5iGÊõ£%‚÷ê`ô²ó„t´Z틪1E?']¥Àc;ªÁ‹D–-ý˜œ#S~ßÑsw«ŠÌÏëIó¤Ô€Ë«f)¾œôw¹Þ™ -UÍ”ƒIÏ–*п»Tëãe¹No×dw}Ö±tÔþE,†ÐFD¦/)B€xÅÛ7fŸ{Q<à-_]X| „Z +'@¥æ‡Ä®AwL òÇdÿ’@à­¡ëcàê°,^g@X¾ à>€ú‹cŇ¯‚øpýKpïM¿7l Љ£Âà}ƒßQày°ÔØ~ @¸õ?›pÏSz}Üa/ÀMCoøO4!þKœD}éwC¯ôçcσ°ØÉ€g BD2»£ŠE¬C¨ ÕQ5œëp ` pd6Àk’Ù…çÒ{šwúð­í-@€ÿ0`h`À Ý À ` H@&è\lÜ]`â{´Cü:4bA,FühžÛ ·._D¤ý6v)È1°]§Œ· ‚· ¦Ï!ûá·ÁAÕÌÈX^£ã½)b€‡ hì^ÿ=]¹GL]¦ ülo›p¾P ÝAûÍl”ŸXŠx±Ýi1pÓ~»«$ÜxP ú„ém`w'ÖÿÞ›„âUµÄ$šMÑ]Ôîl/~Àÿ‘Ûîì1“O—‰Ú0n B€÷@»Ë-6¡ín[·™ALãÊÓùîšì©’T‘æ 6F†D\BUÔj–xÆz®ã>øt €³I``ð€‚Hç%ºhÄ I©âì3è=­e¥¸NÍ\ÐK]:º)Àª@K€Å‹›•ÊÊJE X®oÅl÷ ÙÈzèĸåKË•ÕZVž—þFèx儦O¸áyÏ ì…å催êq’ú>‡ ÀÞz±Õ1Ðÿñr©’YS¥:î¸8/Pq€’(ÀÌ¥K&`]¿·Õÿ¼¿µÕÔëõ?ýüóþƒëñ=Ìû¶ú½<¿³TÍò»zöûžàVMw^Éó¯LÔH™ RKíæŸô•ÍÖ'ûy¾¿uø¨§ÚßÕ«S×+‡Þÿü ×ï÷óÃGûÊ¿ðÃêRÞ6*ŸÃG½ìð ïõ~òÙïçýÃ]]¥oëð0,9f³êÖ-Ék¯¬d‡Ÿ?z´¯ü `c}¾ÕûìóžJûü`?û4ÏÅp>}”ݬ’g„Dö?Ó}ÐwKªž +ÏuKLµxK§tku5û¼¯z>úü³~ïÑ£7IÀ?ÝñÁÖa½\®é¶‰Dø9™‘Au©š¢Šè¦¨´ªò¡–G~æîæþö>Yèý0€ØòrÄ`ôÑÄñûü¨PŸ,VâCÄ,Þy÷{7ž[hü±à›ÎC[¾ë€ù1 €~7Àw¸Zã’Pþ¨ÿˆœ t`h¼óð¯ˆüðýï¿ÿð­ C` @÷19é˜å½‡Y€ÿ¨ÛŸ>8ßø¡€Xô7Ì([Ø”£I¢_#øïgaÿÒéó:£ƒà0Îúq ‡X#¡ü§…>º\¯€‚8S‘… =^ûþ#Fx}„ù€€n4þËÅÙÔ›O¹Å(P?ôcùø8ƒÙ9gÕýšþf¯]{ƒ¨|ÈÁ;[âW8Jöøµ € MÂд `¬T Œ.A:­ívSHEx< 0·³½`"!´”j) U¥¢ï_× ^•Ð#°£ã¸Ý¹û¾ _—R¼“•’.pt‘+»ÅÅk JÂŒéA¡³wE…‘÷zfä!Ì?دŠ, råå(r" +²§CÛôC4Û‹„-LCØ&ì€*¦èìÕu dˆq‚1‚‚ìíö6ýj‰®„îÊ.¾ºÛX\!¡bºчmæ½è(òÓ‘EåJqôs` Yù`›©~šž4“*Ÿ Î^ÁM´Ù^\èbŒÐ#[D·ÿMhVÚ=zMFñ_âG älj!þ/ÎO+ÒÓjU,Òñ’^.•×RÔIðmûjmmÓu¥VÏéÒÝØÇà‹ªˆZ‡b§DVå¹à^ž«eÌ*€ ˜§×¿tsæbì$å_?éÄÚÀ0M×¢¿¿¹ ÈäŒ4ôĦDþ•À“8ÀL¥gUàÎ‡Ò º­ÚôÌ-†ÚÑ€¶S3ÒþÏŸUƘl8ãøtIî¬T«wVï|kîˆ^Gx=1¡*”FB`=×ÓñêJµ\¾z•@wÚ¯”ç§'&'&§§g柟¸y“F%Ÿáù·R½S][«1wnõN…Óåê +Z*¯ºR‹ˆ++J²R¥àê\Y«¥ù%ž9Š•‘Ä25T²òÊRyî*!öTÊJùæ’#ÞTöKeÇéq)œ%è`Y÷X%bÊÐC¦„ê+Wÿ¹U*ވ囥ùùùÒüÄ ω7ž›ž¡ELò,Kj9jm)—¯ûOŸ¿IE”óÜ+TDú"]qä³òÊŠ›UùüvýiŠžf™µþS-à Pá-­Ø‘@é'H²üñƒ³×Øð\òxûd ÀÛßÕb( sG%¡ü¸ -oZâpýÆõ°Ð ðvr8ÑP¬ èí`c}c!úî,€ŸÀ +øÄQ#- „#‚þþÿÁÀBXÐ + ÷ß±þo@X´åäô“ ža!Úrƒ}a0ø³ž€è¤ãïS]j@J# t_ö\Æý@ýXÿu–òÆ| +0: °ºtï`˜µ7À€?xoÇë|Ü0è(¤N€¡ yH:É €ë¡œ¢- +Ú {c¯%ðÚó¶ˆrµò*ÄU*!v¥ +é+“îÚí0ø`{Vû ©á_WñC‰÷à UV™(ᢒ+#ý@&Bæ`ˆ·«œàRÊV;¿GóƈÐÚnmwá!ç^[+êBéä̽×îìa@ÅÇÐw…JÒh1gw¯ƒÝ~_@.apåÀRÞß{¢R;‹ßÓ)j$騦Q z@yÚšn‹/tU2q5¸ÿîÎÂ"cvZ<&f+´Ùƒ± ¥"†"—tT¼n§1ÛR$?ØÃ)Ü_X´új@ÿ' H*ºèþüøT²Åÿ­ôxºÎOž¿0cž€èÌjŸâ×Çèìdô¯gýÚú#)xû¨ƒ\¬³(Z÷¶Ö×éÖÝzmÿ V™_ñ(‚°ïêråg'@"ÈU*¯Ú¶¬ró •§Ã•üÂ.þz¨Ìâ È=qK3ÌÜ;9ùì¹3““ç£ §ÈTmõ0¬áëž6—lUÈ…RV»UY%D Š¸t Óž%ÀY¨@LHTA"°oe­®{¯~«.Å•)w+uüôª‚°« èY«×ïéáL¼aei÷ß—çç•õt…8¾ó7_ªPsðeÈT]Ù}t ÕiM9€aÇZm¥VW†ý;Õº¦3Bõ;+ߪÕ×êÕj}I¥T¡Zñ™juîßJ•3·­ZZ°s»Fò¥«Õ¬º¦$Õ5=²ŒIŒ×´¼·v§,²—åØx¨I­¨ˆÀ]·©âõå#”qI+=3“ÏLΗˆK¸V§"Kõ;´Hu­^Ït‡UèDŽsE!]©ß#·2cüò¨â»ùyµæ'pšàI>ü}oÄL¬×7N· f‚:'û@Ÿ&I‰Gp|÷miâèó1 Gœ`Pj–É|ð½ÿð=WëˆÎ•§±èb,oKé8b@†à2üigj7‘',#p?üÌá螀+ÇGèµÀ(€€mÀäI­?hsž‚:Àÿ²Oè÷;èÿ€´Àš“ìøç’h@0.+ÄÙ*-nþÉàÀ»ÆjûþëÂ@îøÒW}$ ]ûúÅú› $œŒÙyµÜþêï@zSi‡V “žî1šŠNHàd/[pú·bNŽRë›{{o´ºÆb¦Ûq”%z`IÆÙ~q›Žy¢ü n»J‹Ÿ¸ßئo_x\aXXl‰8{\­üœ)xÄá¦Ôìö_îQ{–꩟pXgÚ;í®8†ôÿûÄd‰Ì'¾°-V  wÖdô/ŠDd`Ûº6î0?ìtRÐcÚÁ¶(„ˆÆĤ»°Ø¹oÈV%Uaáy—…öâ íF¶Òø£V ìïèñ*Mßý]±€6wè&#«Æ5ú"TYÌ +ÚX«vŒ¤;-Œþô«Ä½*ï…îý½½VK J¨¡†Hºƒ(Ú*9‚ÿÛ‰¤YÂÕQG½´ŒŒþü‘{f3ìS|1€jiæü™¯Ì”æ_°š3KH€ Sªµj-«W×îh%ÁÆGÄÜ¢«·H)ÕîV—æJÄŸÖëõÐ×i¶É˜ÜM3(gó“ž:ûñt¿¿¿îѵJ©23óìÌ4vú“:ž™ —B°¯U0€SåÙRµ²$Fb“†–óÓ& ŒKb††(¼U„8ÀÖ‡»Èá£þ1y¹+é6Ù‡‚ãëW—ª‡Ü2^ú~œÕ—V²zöQXì÷³Ýýü0»Ë)BéV_U¡Ó%;#ÒvYòmþ캲yÈä?y¶ÕßÏÅ ôD˜ä‡I}ô=X«æzj7’DEòZýp·>w3ë+]VËkÙ‡5é_ÕùFÕÕv³|“Nþ\LMŽ)f©VÕ©{å¼§Ëw³ìCìBõ^ÞtEöëå•}Ud— •jëc½¿óMPuɵGåj¯˜k—>ƒêm-™·a£4ó%FŽ–*õÝ|ƒ¬þ6%ªß¥7½ºÍ³{ù®Zléß«©êyýê¾NÔw‰Ó§"?TAÅQ!ò±~c ËtêNvŠ%ˆ†DfëáU±¹1½€ð'ºÎ ­O±Ä[Ü[  ÛC ~*y¨<… ü{àH@³Ï ’±ÕC €@®²$ø•„òã¢, +ø³¼e€d°àŅ넳 ¡þ(ôŠÚ¶û6X?€­ýÄðÁÂ0> +``ðËü_ÿö0˜«ÁQÓÝèxذý9ÅJ‚X®ÀG?`[{$±…Ý„À&ŒYlÙïçK¿û;z²ð†rÐyå$ý˜ À "ÀSPâ_‚à`°“€ý¦;àÿs×ÄR'€^á~k#lëË5éˆzüK†}›ÞÚi‹ ûŒí"ëEÄòiµÞxƒ€wÚÃÐOÞª£õH„» ž×O +«PMÉZ(Ø`¥½ðœ øÜ‘íâpgó¹‡ëƒl*³Ûhvºü€ê‚Žb+AP@[¡£@Ê"5¾Ým©PÂaÿ§™€ÎiÔ*6<õ¦mUNpI^ !²V;&¡ Û ¯µumµ[{]8tgíÖ ðÔÄ ¿XÂb³qmqÐöef"ª‹=t?‹înØY¤i¹a5_g»¥bµÕöø~Ýv—'…¢SµMtÔÐÅ£pÔ$¾ ÑœÝîî‰ß´vš{¢/ØSÔTXD—@ÿ“ &i@¨ö–Ày‰.z¬¬:±xiþÂ9ý»œ;711===g±Þ†bË<“´”_¹så ¼Khv+¶êJõD³“Ü\ÂÂK~+sÌIßÌß\òÖ…i âLˆã£sós3œt"áóÄüÍù æ§/0}ŽÒMNLê{9Cíïù?*ç.¤¢µž~núÂóº©ùù‰iU F9¤"4C“ò¤#wkµ¹•|”‘µìc<ä¤W;`̓øí¡W8©3•ù™é æ-=,á6éŒG6ŒHcÖËÒ°ŠÃ)AôµHúkß«p%¤`W«”#"Q+Ï•wë«ä@ErU¤:G¾ÊËv2Ÿ‘^Ñ*‡¨ª'1,Raí–Ë1o êpwC*ÿú]úttŸÜ­vx³þaΠ N¢¢6’é/M–ðÍ _‡Lk·ÅDîùnDE)£o­öqu.cž@­¢g5ŽR‰ˆHppS«bù#ÏPÈ~/¿S?Å\¹»~—ðE*Ãä(áÊ @ܰ’pÔ „Aý?Ñ ðùTõ`ñ¶ðömeoð€ïþñ€€Hj)¶ðŽJ‚ù#2´£N²¼8Ñ à‡þâtÿlŸ¿@~-‹áçWþÓfˆœâDGî2–T([ˆÞÿtÃç){Ö­Ù R ¦—yBÚtL ð?H€3 )B +õ—iìJ€Àfþ„÷Ê4 [[>RøXb@úõÀ1€ à«_õû7»ÅÜ€Ø× !¼µ¯n¿ÆôÄÁßì$@ʹŽ ™š;÷þ°H}¼Ñ¤“ÁЂf+E{›©~MÎ×ÖeÑjì4š÷…½6:ëžrVºf ¯Ÿ˜ð¤J/þçÏM–^ BƒÀ*"³Z~¯¼¤"hBtCq¿ÙÒ5Xµ6öŸ¬DE6yðô‚«evØ/¦·Àøž,Œo:j¤DÈШ£¯óœ$ ŸO“‘<-ßÛ#€ë öŽXÞ%éá_Ä0賌û€|øŒË‘c6¨$¹â ècÀp ÿ<àÑQ,F}ô,0’¯W¿aü¿¢½ÿi$7|Kÿ×R»ºýBéÉ€|”ðÁ¾$Eø£¾ô;¿û;‚eÁ¾T~¼®$ à-œ?Ñ€ b6@£~±æ˜òHjä+ø~õ«v®·èÕŽ$üoï\[ÐßD0Œz…³bó󰀌†à˜€0yQº§ˆ@Dþ3€áá'¤ið”`AL¡Óltº-ôfƒòýîý…N³Ûø ]çQyF¶Æâµ¸"ýp_^Àà,–A€Àæs ôÜìA%vu%žüííËÂìÔMÆÙ)'X‹ãÀ>I(!‰Tñ[Ó]ß0ïQyÒâ[Xð ЦÔã)kɨk¼Ù™•âîN}?ÕÃÎ{ÝÙEÁ/Ä$ª£ó‚|&VxIêÞhœ; +‹n]:Á#ÍHqÎ[FÇÁ"5Æp2å^pjàqˆˆð„œ–‚wÄF:ÊŽ– X'ª»0Ä€!8Åþ‚\,~útòˆÿM©WRggfn1†õîÕÚÊÕÌöØ„ó¼ÿI®$ýÏv…>ˆë»6úŸ²±žI?üéRw9Ýx­“‡ ðÚU+ ×¢RË÷uÉ® @z, Á|x‚®5Ò Ê^­ N`2P ÚŸ´¥ÞãÎLM²çqá€K *óùoåÔ'û8S^¢ëä}«t;«)¦šºx錳N>‡üYº‰ =ÉÚZ5«Ï]Í3e@%u™ðY€—Ím'IÃn Œ O8W_ªV^˜™™xvuùöªæ¾˜W*úøfÕržW„Æℸb\¯Ε‡©ö«se©üù6iUâójŸ†«„ À$Á‘j6·Æ‰ù*ÈG¯ Y9hS¶Õ®ååò~‰œwd#ÕMOLç—²üùr–¹ÄÊKaxáÜtmFívfò"OÛ ­[ZòŸ@ä[ð 她7ç©çj†ÞT!Ñ ¨ëcD™à‰²þ(Xî¥.ý¸@’½føæœn H8öœèðùiÄÊü÷^³<·øà»Ã.€Ó,¢ }G%ÁüZ´&¯,‚óÇøäëÑcúð':éíÏ)ý#›…5à„¹„÷tì Fð,ôŒÖãA—·û1ü/v sÈ¢  VÛÙŠƒ$S²+®8Áêÿ®–I ÓZ¼|ûÈ€$?ú‰ËŒñý +Žœ8osÄ/xDX l ³°Ì^‹.€d(^Þ†ÿcn€Á”“MX–¦‰ ½î‡Àëʦ)\Èâyë€$Tcû~÷ g®Üf…“Mj÷þýÖ›m§p±Û¼Ýja„;Šn¯ÜHÖG5¥‹Ë0“XüCš8ÓìwÛÝ3 6¶;adWÚX¨¥CÛQ&ÄEÛˆpvAÜ6¸­M‘‹…FçvV×àèÔ&7lú¤ŠÐ6fñú‹Cjqˆ9èÀc¢K鹿ƒÁXÔBº9:™µ·<¤Væ&h¹f[Š»šC›q3­Ž¸“˜†´²Þ'Z„Rq³•ÞêÏßBãunêiu›BmþBŒÿ¾Q?l¦Tò†‡Œ{Ä_ɸÀèÏÑâO;†)ÿuO#y¶µ™omT.?;¥yÞ;Ī\™/ ›õšfìW¾µ¯ ­yûulj’çæ›Rd àwu¾QYž9?s+"ÞÅ`x{™0xª1À»<_Ñh•{€Å¨Ï&ÇDFعTºtKø>õÕŸw´‚ä°º”¨ê_¼ÃÖW×¥µ–ɰ&Mÿ?&ÄÅðüÌ̳ Å }ÿ!$NùvBêõ«sÒ½++övçˆðX’2žvPžÁv“×ç)?1ð""X t[ –­• îÂÿ‘²ÔXIÏÊkvN1´0dµ¹%5å +£4Hµz[y«Ü*k««ªÉ«ÚBìäJ³V_¹ºV)¯ÌãÏaó8'è PmN÷ËåGÜêðÕ’ +2»¹ö¨vsþ.ùY–ÕœçæJÂÿg&Ï<3£¿•¥zlf•¥\×±Ceá;Ú [£ZÏ–Êõjuen´5èçíS%˾óÚ†>™º°—ç¯dÓ“ž¯ɘ@¯hÿœ²àñ€BôÎ7Pðò×ë¼@$Ä ý8Óãÿ8u¼+ô ÀÂé€1Àoà0> + |Š8BòÓ|8‰…~dT÷ɲöéæûÇÈ@›¾qò\Ç,ú§¿»Nï’ˆ¢àRÍ?«Ü’ð?í%pÇdÀ ¯° þ/'ü×8fB/}Iú¿`¾Å½þ íI¤ìNñðö(>ÃmKa0…ø¶ÿ’´þóÝÁ  ‰÷wl§=à1ÆDèÆ8É  =åíîei˜Ráj®ióÍ=8Ybh7XJE}£ý&Þë~©Û,[`ƽØÒ.$j“qHÕÄõ¸+g°¹@'~«Ûô·QÐÏöÞâBý]»H´ˆ@OuZiû ‘JP׸+å”fçAÎ1âN(NKÈÇ1vºZû}ï:·=Û“H$âfè½g„a³Ó¸L7n€¶<Ÿ¦î„Ü›ª‹/ÓÞN‡K)ÑuÖB:}³ÓÕQ²äöÛ®8IèeÈP#ìØD ¸˜ʶ’¨¦mñ+[”Ö€ìÒ³NøCÆ ñG¢bç ‹à OOüÝ~}iYªê†´Fá_™)kÝ«/Áo67ýj—ÔÑ0Eäývè ׯd6¤"`˜¹%4¾Ø_zý3NμPbbüÊFVž¯ïÓ1në¸õA|Éò2ás/]d¸ž É ÐòŒôuæí{,¸µªª¡nD…‘EÞ0 +ç±”áyQŠ)å¦L™ø³Ï!Y^›»ç‹Á¦ üGÿ]aL\R÷A·ì&y#‘ĺ¶&Ü­Ï•}õe@š{Ô¥ÀóþXD‚}ià¿„Uçu´nŠÈËÕ|sWTÄRçˆðz! [|‘PRNUX½mýÛ4º €½*+Õ«‚Q!]akþ›vøòÕ•03Ä x<§Wd¥ÙR­Ÿ×Ëó‘¡¥ü¯/”fžÅ‰‚.€àzäZ[²ÂŸ$Å‹¨Yý +D`¾_T$n]Âëóßa® Qäð8 €íñ—{‚€ E'Ø£¯M`F’„Η¢ÀÑ€Þ:b¸ñàíÓ||]a 0KàüQy¬àúÓÄÊø~bÌ#¢öº; úË’‘ÿÞq8@$paŒxí;Ç| •ÃUÀÿÉø¢Žèô: õ9t¦°Š+9ɾEŒÁ¯¤è@¤ÓTkI.ÔÀpLmq$ùØe€Q­ßߨãì¨À/â!gÆ3€k @okwÒ§ñòfXréˆ$²¶$€(ÀˆiHà ãÎÛU¥Ýî0™.:mƒò•Õo(#ƒœÐIÚ©@¿+su«Ûºgañþ6!ô(ok½/ À*Tå­¤œj³Ít7mÕ¨û—XºÛÛ³‹Í†òTu ÔÂñ¶Jê,ÎÂÌàH`NÊÐf’B¿@Ï€ÎÑrÊÊ>J‡‰‹ˆè¾å'䦶ڭvcOw¡ >À›@0¨C‘„@fÕ§Õ¸¦FÒ¶uoµµòf³¹0«R]'‘¼\ +FåƒèÚU…¸†–PéjkeãDp:"@jk=2Xƒ¯ƒc´è‰pQX’áÀ ÖÙYìv€Ä›O:€‡,.üþ˜ @$y¢ê? ÿ×=QâŸ3ÛXÆpéVeÕ¶êL g +‡ŠSÚ踵¤C:g´ÈëwVQçõÒ—Š-PZ[žVè'Ò mÿRm{ —ÍÉ P?Õ à¥ÕÌ´Õ¸¬¯gY=>Ÿâûµ¯ ,Gæ8: +@OQõé§Ãúƒdø_˜Ø€§ð$•óGdhxâ(€}Ž¿DGU:"~BµÃý +ÀÐà!sW®ŒY>z¯±Ø(ç¥ÿ$ˆM=ŽÿÖìtKb#9Ì!`‘¶¿Œ%ž³ ÇÓå >$”}/`ˆSÆ møˆýH÷ÄQ¨|#¸.XŒÿ~ó#†àca–hÉ`„ge‰ Àà]€-'x°eh¬škÌÊ+)òÀU_ ×nííÝ—vÜœÅÎÞhí‚Wß7EZ÷A£û­pbÃ^­Û‚?4fÉ'pH”`V@O_¹×ÞkuéYçÁô6Õ'ðî'ÎãV¶¦¸ ªá3–0¯Cǃy}óŽ#H÷7yêVÈfq–ÜT™èÔHý Ò²·‰ë'6`÷Ý )õº£=p_‚òÎÁuO7”@S0é¶aÎ¥PÖäîúù»ÀC¸vùzÆOn_›UVÊCê¿ê¹v‰Y´£ú/à‚¹à¾-~ Öï©ù÷Ì¥tF5m}pG¤ ‡ eFyÌåå@ ©Íü Ç FŽÆCþø{µè»'ŠÿS±Lž…Tz•ÕR%ËæïôýÏ/ÅI¸¢-̹¤%´#ÅÀØÏOúV«™ ÝÒuKÿPø¦@ÉoÆWÊ¥™éi" ÛzÝ/OWL–‰Ö ú“l €`!çÔg#n$àd™œ¹*}¹òr22H/Ì·D.<} çíùñÕk A­Ïs!o=ëׯ”ë™ +bT„nå+zóÙ…/H~A”¸–ß¼YËæ!BqZ ÓÉÖ¾Þ}J^½ +$_O¸K+ +o?,ë!èš~Vž{Em̈>ÄÞJ¨ºl¬oe7¿vÜKˆ«%5©VT‘úÕÝO­`µ5‡Õn‰^ÎJ••˼”}!¢÷>«43qm}7ù:fµ«ÌUÖR ©gc'À©9ŸõÖËŸ“½vLDw·V]«Ôv¯äÝ:+…yP‘¼wº|gcS¨¿… @ »}ŽÄpvɰ)¯ý¢‹Þü ’ªŽ$Œ>Qþ—´Șàq>¿é(€§ˆ ˆO>7Nð’€°™O‚ý‡ß½›ewkÈÿÚúëg‹Àóc>ƒ¹ôw~Ä@X,:ì¦>‚ÿÆu =€8` }wÞâ/@„¼ô™]%%6ž;gF:سÀ¬Äj×>~wC¨\§ýË6ÍÅÿehi™pÔ’ç\Ò€ÿ!ár/G ’x¼À-ü/.èŸë‰þ-õϹµQ¹xöìÔÅåÊêF¶ºRÉîê•B ªØ¢+àõ©w<ïÃõ°Å˜±ž=Ê^©b  ²2ÿ¬€ÔBƒp­F5 ï.ñù[aG¯Ýœ«Ú­ÕíœMm„¢þ_a„Ñ™ÐæzàFðnUý1&€©‹`ʱÔne놂`¸À<ÄT&ñýSfÑ °•o~¸K îYº9û‘`W»R¥×Ö"ŒCÞtZ/²¼œõ{`øfÎÝ+YØ›ÕòéJef>Üÿè†lÌ„x½Pcðí[HjÏ$ÙŠqWÈ%*Rݽ7WWE”WUô¢Ö\dkcɬE×leâÚx™¨ØªÒÍÊýŸŽ¡€ºXtREVì»uB¸¦ˆÍ«•<Ù/Ê_SáüŸ™šœÐ¹¤Šà9¸±‘ßSQ½oÛØÀÑQÙí×ê^S}T~ЉDcP‘Þ'ýƒS>‘ðµ×¾ À  À݃ÛôwxÜ@+Îh8Å`Tz¹ÊHµ.$ÁôcÅʼ‡>|øî[€§ˆ *`@>" çÇehК¼N°ÞOõö‘‚œýý=ÛµÚä§Úr8Éàpdï’qSCÆñÜO zæí£Hî'‘ÀFÎIÜë‚3fpäÌиë«$60ÞØ8Ä÷/(G´ +¼ÖTøe<Âô¾FÒžÐ:€´Êð±¤w8—Ã'tM@8øûŽj&å148ë?¶Þ¨ˆ®é¢>Î +G‰Ï£é°Æ^ÞÆ +-àî,Ð….Þ°—¦¯}–ëZÂó Û Ý€Õ¨°ƒòÚlv>h¢ÜâùO¢˜f‡-á$ñz„Šiâ +Táû»8Kµ¤ÜãD/ÆÑºÏ8­]zÚª‡çR ºo +ÊfÕH(ä`ÞÎŽ¶“ùMÝ7‰R&­<اƒBUÔQ]"¤Ai§ã^p9D;4:{{Í= ´÷Ú.éZ¸G4h^!2 +•m·%Æ‚.®2í °ØÀµÂE©@?%~jÝDûÚŽ2s¸å.If!UJÑŽ‰‚H$BµË]%Íæ÷Ä0,˜ ±#ÐN.€1`ÜÀ…À÷ +/÷øéà•ÿxO!¼.7–/Nžš¹µ¼ººq ů>_íY_œô:w§µõGþcCü‚H²ÏGÐ@tÂ,S“¬p`þþ©É3g¥¯?þÏœ¹4#àÁþ_ñ¼t/ –DVö/*cs +,SfÎ1Ï<ì{‚í|\¾3çqxÕWu÷êrïy9’„ ï?9)JП¯ÔffðŒÀT¯‹PÁ·6j›¯Âæõ›)=²Ù·±VçËUOÕ¨Šä/U¯~$L"²b?Bö³éÔYvÓH®Miüª¤9ˆá·²•g½•þA¹Ö,Ó³ü³ UÞù¨Zæ-ŸÄa|•@voÂî| «=_žÏ^5M ufrrÞç¨ýÖÆ +‘ µ™)ÕU’<ßì/ý$¿“%›p’­\¼a¤ŽÊktUl`öke À[–ӟ☀QF ‹/jä[û½ý^/•?"Æë£2¦ÆK­ÿM|,ã#’`~L†>™ t?Í `? ÿÔ§ +:€š®Vwô¿ Å‡ol~í¤Q,ŽZFF¤¦.áþÕà?k‚ñï­SìzøAgí~ùËú§åXÐ! °3‡•ù`ÊœþÞïpY|à”QýCċٯ{‹ñCþA ½ßGƒð>g…ŒäÞàИ€2q@˜œ4ð?7pXÅ.nÏ + +þ&¼äH%o(µj"l•š‹ í¶`Åßjù~Ë]ó +Ð|£¡i£5ñù;Bþnã2ññ­d -…r"$hÅ=Ý 4ÂØ( øÕqtR¡ÒeÁ~³ÕÚ»¿×z£Ûê`¯m{«û§Ýv·sïÅv³)Þbú¡ò¤‡öTÝuµâ/n3À@@í„êÕš(ÄJÝÚ~£…G¤Rè~T³E0·Í˜G1EL«ÝÒm‰aÝ'o!7¡÷î·„úÍY&pŽÇ¼Áõ¥r¶îMåôAcA*½n¾ùñ‰ño­ ˆ6·ß. +ž‘ã<•ŽHU +“RR1`Ì ÌŽÀŸò9I ?ÂÙ…E½ŸðÑ+"žÕDÂ`ucóÑÆú«óÕCóus£¼­^Å­ß}ùî++xá ’*¥ù󶄸Q©|Ó;"t ”„OåJ¹~óù•ð˜,K÷ÇXú½ð_œ¥Kë)Lg'/Ú äTpv‹4î6IHÂËðö²»Ò$itÁÌyw(ÇgÎøÎÂÌ!•^sg÷‡ÚŽ |ô0p48(gÖ»-œ¯‹ô"dA³NWægúx!Ø A²±i‡÷@˼¶T¢2p{D|Uˆ3XT¤¼k6@g:1˜lGm픫ŒÔwç ûâ`UÇâÉó—k==®ƒ¼¾[®³²!‚9­T0Ò¯–³»qºC¯GE<ÇQ©¯Öêµç³W PºxS0#Â…+‚n*ÏÊ"q™Zð×Ï]*}½ïê»y5;4"$8@„SÅÀoÀïU¶"@r<æ@~?:õE}BˆCÜëµ;& ­O+óC€`ÌÀ ’>iÀomxû¸  à‚tŠèvÕ\ú»ZÇq<Àߘ +àÊñQzE âøAñ,è…P¶Øy\ÿ×JÌ@<Ã8Ñ{¾ ÛÑ×÷¶ÞKœ„¯Sœq&öÕá8ÂúGä±~dqâ(ÀÀˆ>oó^öÐ_’öhï0`Ð/ðâ-™*«‚HÈRh00ÉÀ $‰ü3ˆ‡­ ùÚ7}Öi̺ÿ94ç¦èõm´…NÂ~æÔÎïwñåk½2‚¢bÇ$‚;­¦ðY`%EìV"ç@€îREâ`2ÂÇR÷‚g·fwçò"}\ÓÝn1-°µ;; Ûvahc¯{ÿ/ÿ‹ànÂ>Õ¦!ÚCçn„Xì‡j"]EkÑnÂzfVµÝHÂæŽX7ÔÚStLUët÷:]ØŒÒIï6»Í& æ¾øÒܧ3D§ïv[Xì/˜Ë-ÙÙPTƒ¶Ôên}µÊlËxcì5w>¹ Gã - :,h‘æë ‘€…ÈEC<@ûâ2M¥]T©º­b€°øá³æï`Ì`ô÷_ç$ýþ3 “õñ„Äõʥɳ3—–—WWõúY¿¶TÆ8­W8Î;È:º¨ß܉Äa "{eå0@µR™`¸Ÿ±$³Ö\Âi /À™y;°—ËYùùè°qþ®rË"`¿Ø€H=m§g Àž9ëa€7LÎ,×n¯Þ¾Íð;àÃï°–Ú«}0)Ø€`ÊÐcÞ£3öë#¶àÂ@›J!͵œõh¦«·z‡[=)®ýÚÌò¼”üA¢–3ÜU +ó 8©¦f% ^—ÖNÙì©Õ?® €¤ì„«z.ýù‘³ÈËÄrô†¬÷hk)[©%Ü•hck«—mlÖ^5m€Pñ‚åÕÆ±oã‘{\dV«Wsò„.A¢Î=#RG2å´±U+ïãÝ?· ²•míæÕú·v{pB`"¹X‚ç:öYÅëoË^¤öêI>,¿à·ÿ½ˆÑx’$À.ä‹ú¸ ÀÐvpÚ(€S,¿¥@²Ð,nS¥v×>zœu«úþ ¾ðŽÏ +`œFþkú÷Þ´{%Á Ý=»ÅbÏ‰Ì +$±k7eõuP? Ù>Á@àØ("ÓñÞ-|À}ýj~Ðûžx€v°€º×ˆ³Ž Ò‘`‹¿ÊÚ , +€p®Óè˜/×%¨â]ÆßX|½)ºyY¼°ƒ:&¸·wf…ÀÒPß”ú+Ȥ#@ à>°ÖzSÇ]ú"áu…•RüEðÀYO:ìsÄëu>ºðO…©ÄÏ_ÄI^Gqµ‡;µ‡ïF¥ãòÖm\^bÍàþ^‹)zU*ª°§ ðÂEZR¼E¥°¶Ã$$Í®hÇžýüÙT¯¨¨O‹é·' n)ï¶4{*Âάà¸{_à.U¾»ç‰ü”W›œÑÁ»ÖßuˆôØ T3°ZGt_{o¶<¬öc– ¥R&­DT ¼¹Ñî¶ôú¶‰T‰°Å ÷£ë"¢>dM8"åEѺüH 6³ÌwÔn¿‘fxŒ þ$VõãøÏ¾$vð4›þ/t€©K Y_—vøÙþQü6ÖyCÊ/ ”T­M½pÆâ_—ÿe^÷¢ÿwª‡ÂÁ|­²B_ÿMÀšGÏ#¨à%FÅÙP)U²¥é²0źN +û­¦ÿ—’£žÿ‚`ú3÷NNÅ ýgÎÿ‘Ó8@é6ÎðRW¥Àº°|ûÖ2A£`ç .ȸ à'‡–¤Åf‡Y¾DØZ@Ú‡ˆ‹\ (QË.Õ•4θ™Xåû?ùC^oyyz~>ሻÈu™ôpP"uˆ€v{çµ/ÕŽàäÊi#_©® IÞ¿›—™‰@…ª½¹%DODHnóÙ~ÄþÓu*…K”ß§½U£×û¼V.W³­Íxíêñmmíoº"ÒÛ2ÉûoOêƒ?è8°õh©vÈ­“+!ƒ_ +èQ +€Qtéó‡qX+÷±q¸&:¦|èåï}zp°¿µuÐû¼ºVÍû©*ÂÝ“üdQóÒñ ÐÇΈÀãF<>à}ò­°œÊŽq€ÉmØ/â }ÆãŒX,¿…`Är²µßcL©žåüZ:4ZÅP›õ6ËÕ;ÚÈÿ¼›Çò³ÀÝÚ=Âþ$Ýߟoøa®xb€ã£ÂÀBÒ¸âoüyÆŒÃO"í>€-¤Ó¾pÛǸŠ+Šn%Á®ƒcyäó{± +Ü"lÎô`Ⱦúå±QÂ]üÖA^Ä,¼ÈéåîòH íDj¢^ñbñæ¶è¢Á†ò;n L¶˜Ä—È{9D°­åëÛ¯ v‹Ž€¿Ó¤j¸ÈµÅŒö ;-©â­ÚûSe!?Ãè@BÙ¹\æá×y€2ncï/ÿr§smVž·uÕ³ßÒYÐX˜åØŸøbÒ žwZb#âÒÿ»àþŸªúÛ}PmP•g®Ž…­û{oˆ“l‹cPªÔiÝ,f‚EÝËÂB§!ÞøCÇfzpßâÂ_îx¦f?Üív:³JØ–ÎßÞÛn +ø‹ÝIžÓð‰p›Àü.iŠì½¹'ÒØ§Ñz£»Pûçm vÖuz³ M5€n _]½w~ýnÌK Œ‚‡hw;ªNê€âìµ YÀþO‘@.šÛ‹ ¯ï4öôLw°—€ðWð€b õSÿç=^xnnm¬–Ο׋\@/ü?:xT®~ÿ·é­iŽne@¯d.IŽVÆ« ý÷Wk LZD ÑÖF¿€U[ƒDg€ôÂú͹R®-÷Õ²Z»j‰ŽN?ÀEáô”:{jjò"æÿÉɳ‚êǘ&‚ VK~k"ÊãÂò­Û"åŽy·‚)€K`Œ`^}òzm׋û»KõG~˜Z8Ïÿ[?ûÈT¾G®—ëŸj-É}®åG4Tž|zøèÓÃÞ~i¢|ÁH,ÁßÏ{‡ZåýzžIµª–ëuæåË7÷•*ßìZYY«€<ÿüó~ÙñýÉÅyUä“ÃÝ]Å;QWêÕO8öÍ2‹Ñ£GýþõŠ­½–oˆŠ|ú7‡‡ýµ¥/àETàA¿ÏDÄý•—2PAº^Çáºå㊨è¼ÿùçÙÒ:åÒ2µkóÙ¡°Q"÷Ò³3ª%‰ïŠÊ|Z_ʘã ý÷¾òçvóü³ƒO?ýÉOûÕ§F-T¾tø¼ MÝ_?ÿèÄO¾ñÚVö†àÖ€ž€?Uÿ¹ò³ŽËúé-P¦ý^ïq@’`û‹Åx» O7 +à À T·œ};îM²™ï÷áçýÚ•"‚G!AûÜ*Yowi%ï £AxZå1ÂÿNøˆ~mndJ@}æøÆü Àø(€Àû*}ãÄQ%påL†øÿUéáŒÜ ÀÀ¬Æ tç“@ÇÅè'Ї`„H¢:MVãØ?Á`dVè$ð =„ô»ùtð `aÖÓñâ~Ã@« ÌÚ’ÈÀWÄ7”»E>yŠÍ¶°ðÇ‹ +£xf¹CíW>³ ª.–sM‰Àx¦èvñÇ3Û°ùàÍ7ï«dšŠ°ª²Nîu§­¦ +Cïtg;í7-H€0V¸¥ t[‚3ãÚ¨²E¯8êv³ƒê-Íy§}ÿþ}]t¿½s_maÑÙ¾¼`ŸB7СöëYFÆ?Dc¡E³Ì7Ð…í©´…´ñ½ncñƒZØýé‰P lØ™ÅÏOG»{"ª½˜ƒŽJ7yQFº€¹ûvÇ•ÕYøßmuõPf·1R4Õj +%hŠË´Ÿ›Uvn³œ¢µsþ‘?!‚r‹ÒÅBÚ]5c28‚PKO…4z>>(º„µ +ÔÔÓáU»Œ  §(Ÿ@ýÃã½ÈûÙïå½þOú·¦&/ݺ]ë÷>ûûµ¬ÿè3½õzÎõ2ìÑ-úI~Ø'Üï³ÿãPú\®L›§üÍO>¯çýŸÔ*ÕìÃC¦þÓ#.8©ðï½ +¾õ+åÒ %ìgîçµ¥¹¥J=‹~í£Ñ²u‘õåܾû«5©—Bé‹Z]ª, ±—+¥KŒ839uVÐ 8%"àÙõ^_o¹º_-zÕáî°iKÀV“~€ +áŠÜÃ0u±tæüÔ%òúWgŸyæì;w^ÑçêüÕ¹¥«W—––¾õÿáìÿžÛÊ®s]X]•’ÝíQŸè¦n¢ŽÓǤĠ *T¥¨M¨)"MÔ„z…M7@Dë&¾Ú¨oãžìJ*ºðß°9°š¶³aí]ôÖ9çBöEï]•¿ê{ž1@¢Ôò õsþ\k¾ïsÌ9+››õzZqÅ|U«ø{°YY¿Éõ›lV7ëÿX¯?XÀQ°ÿ»^Eˆbñ#$îò»bÀwpWÅÛDlÕ‘;ïjL\¾^ß¼Y©Þ¢•½ i.{ ˜®¦XI«3­?¨l®ÔIRl×ë›$g“”Ô­‚ÆÖÏ\^s¹RIWTÙ©?p§´Ò# á¤9ˆ„¬l²UßäÄ-#!ÁÜÍÍËËË7t¹Z_6”?\žŸw±ÆK—®ÌWÈš¡oV6oŒeù1D2%ÒtE“ÿþ‹Lq¹ù©š‹äâÏ­pp m4ÊÂ¿Øæi<] @\9ïà'Î]høN0ñø ñ³/v§!‡„õ#ÉÃQ³r§™m5>m促°Ý\®þ{¬ù|p0*p?Y  òÏJùg„ȈÙ(ay)Jö -ÇD˜ê·¶ÐÚ-˜(¯ ›eÁ‘áÓêæ®>Û}°÷ÆðÉå›ÝTÙ÷3áP€´ñ7ß1€ Œ}b;kªI‡#¡éOàüÐ5ا?…©ä«Þ{×M Þ¤"ħýäà$÷¢ÿÛ :FÞî£î@ï‚$°?mʇ èÊ|T²`5u ÞTlŶ(zÖðweû’ €t Ö‚F%C@4<#ÐÊ­Þ!:æŽcåny)¼ØÛªåÀ,¥ÓÕžÀäB‚¤þð%»ä0 RNÃ)’À´Ûµ¡7€„p|pøµƒÑÒ)6ýþû:< Ä}ÂÍOô_Ð"á˜y6 ÒQ +ð¢“c81-Þ'®¶Z½¥Rô=ý¡ƒyt1fEú¥Ÿ®F 2½E0wM §ìÐ×¹a¿Ý‡¼„G»'‡$¶×+íB>ä^û(ê BkoÑQƒ¤R×¼ß/wÌÁZ¤XùêµzIº¤vìO„²è-ä­¥B zÄ¿0…Îáä.åP*÷4çtö ©@¯ø L q0P>ž ŸI@üñ5¡¡Î¾å“þ\QvaîòÜW„FZÈãq¥Þ ôÊl\ÔLW×Ã|MÓ,<Ø<—|^Tªõê…+s . +Ûa]…ðug~~aÅal A½ò“••j-®™½ºº¶¶²¶ö±??M>æó óac½K‰ò&€„óo”÷ªDWô“§nûêÇÕÚÚÊ×@V®º!ÏÍ][»ô¾SbΔÍý7kžŒòñ·¡6G¶ý¦ ,‹ìÙ³He‚<{6ú÷,ûÜC¢‰Ïõﮬ|¨ä™kß?B£¿Òñ/Êž’t©áf6nÕCÑ—MqVŒqôªñÀõõ³¦zó·£ã#m}’¶>Ï#Iü‡ò á +AzPϲ ä5ôñ脤°qòÿÜ4ø”SÀÍöoTëOî ×ÀÐÌ3‚#6êuªœ(IÜèÄy¡)×µŸRš}Œ¾y0~p0rƒÝÏGcãÎ>79&ä)ßÙÁ#èG$äßOògŸÔ3!š}šàš ¤I>§€€íÃ/x'³q›cž ++Àÿ ÀQá@`©€/4ȆÓD"ô©c ’åM˜[¬ø¼óltpð³›7×õŒÜçO³Ñï4ÈŒ¦<à €qiqÑaCn;Í“]hì#¢>'Q* @u}×~!!> ùMâ³9õ`óó÷gûâëoÏXN}^›`v-€(艉ãoÿåè³O]À¿(.' ×ÙÓ/ÜÇ šø  B/'àHºÛez‹ðκÄßÛü.EO÷» üØ óI-ï)–‘b/B /=½¦ó¦fütǼ%@R ýÁé@€¯Å¿®Ñ*ÈãåbP†s­P‡p2ìê·¦Üs"Áv©ÔÞ¢â+t‚ÚøS*EAˆF ¼úÍÍëö¢YÞ¼yk¥Z¿y³r‡ó* SY¹…jxgeåÖ[ª…j†ËjË˨¦(ˆüÏÖûól&-rUÑ=~¯\™Ÿÿ‰[^ø7ó?™ÿɇ?¹reáÃåXª—Ós^á–Ÿ´ðûç—ìY©.ÿ‡¸A )Ü9"!LWþþE'ŽªÃ#kL{F#˜¿8æÇÀvÛ,$g[ÚáÅâœ6yÇvÝ“OÙŽŸïÒrnìÖV›"à ‘]w#ÄGö*È@‰¼Y5Ø:ÁÝh'Â>²j¤vÄñüÀ::бn’Óv¼ÞÌd H !‚û;O#Uùn>ÛÉ04ëÙh˜;ûï#B:­4Ç2€À`Û¸…„üw~Ó†Ô:s¯óôä¨×sÛéÆAùÙ0ÛØØ¸·¶pã®æe8ª{ ê§& PHQXjñ£ë‡Çãfôç;º.ËŸFËÏŠ„\, N4$ÙW¾c@² üy>_¿ ÀÛM™Ð¯S\.ÆÌˆÊ …†ê$ À³#‹ãààw£ß%ýî ¡‡'Ég‰{Ù΢ €zH>ÅC”Rµ³c^ + ÀNu3' @øž¾>æŒ7vŠýů?üW.Z 9ï@šÏV}Æâ?X[Á„ó„þÉD¿qTôN ÙÂ=’² ,Á!¦ª¿ár €û„ûàÆšbô`_}Ó¾ü‡‹·­ñéǦœ6½hzmÜCa¤Ø+rRÙpœñ&›üÇ ±ïq:úÂ`§8ª­x"&Ñ-ТÅ.*6Aµ5×*w»‹åî^œ7†à@õ½H2ÜEèS«>„çèU€86M§õCÍð-]z‡ƒn»üQ7tZÕlY€àæ€EØCdÄÁC¤wxø¤˜¸—d·KK”¦‘ô-Ç:{_¼Cß'CìD7@§•8ëìšZYB§Û=,}ÔŽÌlF¼ð”îàPÍ¿/]#2î$¬%mý ('Ðß>}”þÌ¡ÛuRD¢;$( Cÿ°|ûˆc¼GÇÀ¢Ó°”T| +ÜÍ<[`1ío‹ô „àŽDôúûKZG\Èѯøw~A½ã4•¦-oN³·ÝØØÈ¶—÷ÞñB^[n~$-æÐÿ={DYiT˜œ¢q&¿>æ+ÓAObÂhû‹!˜ŸRšÕ­ÉVB$À†ÛoAŸ„磧p Ú\S#T+/8Äd‹ZóEõQ½º£6Í>"j’Ò‘ŸÛB¹µLïë^yﮃ5Öj÷‹Z=ˆá1 &!ÉI¨ÔyþªY€€#Â#µ\?æåõ¢Oôü;€!$ @Z °3+É™9neý¿µ„@xe¾QÒÄŠÛÛ;¼‹' ëj¸)kH`NÙrY2ÄãaMOOéHç&2ý··~Æc=Ö^Œvj Wî7v†Ç'/¾ýÓñËWÇy3[¯jˆÎžÑLGãßwwPÞÐ@ÑB´5ç¡—þnt4:z*K@•{˜ ´kÕJµ‘_ñ’«¨pÓNã^m[nAìÒ°°ùñü§Ù1ùmLí~-Û O@@FϽµµ{ºïÝ»\_zÎÁWçæÞ{ÏÕûà  Àí3rín­Q]iêj¹°³Û¨=¸îCC$ 8@Ì x/]6๹o’À‚œ§ŸÚøy¿G•Ê8ò0Ëë©<ì¦ @ú¡³ÿd ?i‚þ,»³¬s]À.¨°¹åÈþfEg¼Ò¹v{{÷çòáð÷Íú˜[¦+æÆö¶kèÓ<'qœþ,R‘Œ¦”!,£íßÝ}ž×Ô™ÅÁ‡Û»• +írä¤þ©&|xħ —¬þ÷G½Ê™ÜZŸê1(1ˆšr¿¶vMç *‰]OeyúWHP"aªHÈËám~ž7DMá|ìdËõ“à å½ýOŽp ¨¿ZŠÕ/P8¨¦Ê’˜Õô«¾M¦>_¾½@œô±è'øAP§”£©@€dX‡Oó<ž±H.$–jþ:þE<‰üIgˆ>b4iÀ£í‰@!ÞBõ“™Ÿ™°¼‹€•ïäÁ³ðHe? Í?~úޝ3€©ççxã(€ô[üiÿ¿”'Í= < :áò•ýøû‚rhü?bëû ´ ¸$]§ à3€©Hþ ?€ Ú +0c˜A>ò¯3›x¤Ø+ÂÐ `iÕùg,… 톤}$9 + Sq†<‰tŽ+4ûí’.íÀš=JèžèRva ôXpt°H ·rzé®Cç2˜è@z u‚?Ø”l–SôöuˆµmøŽ³ç¹„ßcÂ$[1…ÉPïFC&\mâ–.Ú<À'B.ÚµoO¿$ {ˤ»(tKM\—ˆ¯vgÉuú)sª¥×\û¿–—ô]4ɺðß¶»£Nß邲 ¨ý&˜ÿ¾ º²Þ£h$l¤É‰ +à üï‚€=n€è#¸/‘ ¨7OPý[2Ž˜'ˆ ³a_„ë$ @ÜIÑä-, 9ŠpÐYuÃ.‹(ù^]ât‚ýÛüQúíÛ)¹Òä£Õr^€öÞe\^ñÙÛÛ<$]E@:WH¿ Ñ›…·ÑWqû~Z `£±½ûå7*?6dÍõuÁ‡ ±­ +Šp½­Ï©4Å uÇÜxÕjׯ-¬5U«Û¨¼ÒNÌo£b<ç½¼¦þhï|VŸ¯Žœ&§ +öÖª–NÚ«ÿ8ë%pUe}úo4\^¸×¨Í®]›&.´ÿ4¼‰µ”p%¼ìŒÀ|Ú¡Meë€ÂI‘v+Ê q?(®µòã4 “Y«½€F¶ìrßÖ´x¸ýùw0ºS<äö„»‡ ‡ß˜ß?BCn<übRæ4͹•€ò—®æÐN€KÝ31‘BŽÄ]êx”W‡ÞfÛy¶â:†ì 1ŸÖë¶õD  ÆµDt€HÈpøåðçC ÀýF6³qo­ó5ÄÀ/˜íTœ5!eªÙx4d’’—C-»HsKåu @ÂË×d¢úƒú1 ã/ fó­kˆ,B ÿž uäd¹ðÈ/˜p"a °¤´E +~6/YÎû„€Ïë`b˜ùl;àÿ3Ÿ<4Ÿ¸¨"‚iž†#}²‰€yŸHtX\ïîè錀ñÜü›Âíú~Þq-ÊÅ£f,þ¡y/‚Ç7?‘„ÊÈ÷? ÞÇÎ÷@ja›“Øà½Ì@3óÄþl0±©þÿgø$°/l$  É `æ”øI¯„Ö^I;F2DÀ)Æ#v¤#Ú¹N€¿ãHŠ™ T“ÃGT–‡—÷Zv1€;(ÇŠ]ÿí®æj£àýÛÔÔŽý÷ŽÐï†ò p jÌvJß²ƒß¼=r ‡`¯ª¦vï>%P2¡‚¯ ‰tKhäƒÁ¾pÕíÛâ;@Ÿ ê +ü… ŠÎÒ’sµ)ç'aàˆPOJ fB¿½ö¿•KÔ2IÂ|¿ÝrR=²HÙ÷õ‹ÔZ`Bùë ÚKÐ +g$vœ Ì€»ˆ¡Sj;Ä¿G„…ßÐÛïtaDp« fn…Ý¥—P²ˆ·À,Gi’ÖŒ&¸Œ3!y„©˜“0Yå:>Á9•0U{›Ú‰ ©@çN`¤Ùíip¾Ã½=ÇRDáúdÌ+±Ô£ á¿ÜàTˆð»ŠúávíÆå ˆ.B€Öd½:£ñæFÛvÚÂÉç'(äˆ{§ßolá WÖªkÕüçÑ ¦…aA°Âmèk$Tn¬ÍW§sè ŸPºjè“öA(®]wʹ¹¹¿öߨúòÞB­Q]ž„šÄQ€†,ò«õ+þ û€Xè2Ú¿Ÿ×,(™¡XjÙì<ÜÎë›3Å“wñ ¹Àxfw–ŸA)R™£$ùÙ*,Ò‰Dvƒ|) ÆY €PÃgÎŒ †-픉¡ÊÚð<ÿ8Y:¶{p«Â^ªIJ‡ûˆ´Vÿ4¯WOŒ#Uñ'aÐñåp÷¸S"]`¸›,4ì¹h§$2BôÎ$‘òrèÜùîñ£ÆˆV>M‹°“-oJŠœœnsΉ‰`‡²O"ßlj5BéM3rîB €¥ñV™Î°»û¥3"¼I(I#i A™¼\à°~€øÿ»ÿ_û…X†ÎëH4p¾ƒxG,‹} àÔÀÂá* @”Š&”©€i‹€'Ï’GðsWŒ8ýð÷·ËYfçHI ž5ÕÄáô- ˆ=þ@ß4ü¯æØ üghŸ€£³KbX@€´ÿ×ø¼Áp±@AhàýùôWîO?¢c4ã!"E·Rìþ ¥édaˆ{ +@ûŠGb`9·¿/h jëŽ*¢Ø±C@vx95?ð" XL½û|§ð °°»?¦Æsœ]ùPÜÞz  cDö –à‰Ë¬9Jž;¼½ÏÝ]@ˆ¬¢£¶‹·ÝÃÃnµºlga£«z]ËÆƒôêºà›)JÒ¦PµRt´ìö¿jQØ€.éaö@ohþÿæ’†²SÁ§Ûn’œ_‡¡=QÈÚê-î¾aô[d&º4ZµúNç#8 +7Ûg°¯ï=×¶ÈiÉÅþc]ãF@ˆíÅèÿØ×5€P£h õ:­ÕÕ@çŽKð€ˆì¶âíྔÂ_jiÐ":§)šˆÿÀÿ= b6›Ôr+l, ñ=åce O ñ ¨åǦµ)þ þé{– úýA¼Ço‘Ïx!%sï]]¸[s ¡Ígò¬Rq’Ú¤"“ñ©œo·S‹Õ¸17·P«Uª1A… ì£ÖßôbrÿI>¿–‡Ryï>(}÷® àÇ °¶à´ý0€…k—æ®_ž ÓÿwÉÂýFm¡Þàv6lg”X\uÃpu!&‚Äò‚aàKÅä=ÎÖ‡4åY)˜ZàÍ›VW$?"çÉàŒ@Å{£ñ)›ZÙ° kå™@Àîë]TŒ½.ë© ;µ() 6Dg6ííÔÀ]Zà7QˤàÓz]â&€›XƒœZLJa(fW¶†îÇÊ +S Àvöô¬€–þ¼`ÒúxGxÁÎù©½ÿ ôŸ±Ä<ãÑb…rÆP(»qʯ?ËÄ™'>o!€Ý_Fv!ã»8¼føÿ¾Á€O³Y@¿àRs>gÅ—QÍ:65P¿2 @Œ¸h€¢TØ(,ß°÷V€ˆ•DÏø¤ü@þô]L pñ(€×-oÀ7¿ñ àò„½þJù¡ñ_ùñ•'”+½Œ@¸²Àå·³xG:b¨NtÞîzƒÀ”þÇ_ÿá0û) £hÝ ±1GнiˆÕo§¢ŽŽ÷{Gì#Ë­'8ìw[—öÎîHåÕ·ûý^Ÿ$L§ +" ±<„ôBžC²™lbÐ{Òý4 „äÓ½òŠøÕKU[ÏôÂNÐfÐXáƒ6:mxu‚]^g(DÑ%%_;ÿRƒÙzûýª~êŒω”- ýÈ™sèw…zËÐr#nÇÍw˨ãŽGH³€Ì©Èû%¹ô¨,Ž +Õİ¿ï¢Eò€cÈÅk\íä}0µó_ä:‡v¸KSÇ]¿§œì‰`§í<š(ŠðH´/ä_JKMý^Ë9¹Á\• ±…б»ÁšáŸ2‚ôÛ 5Õ@mO@·üé¤H¨­vO/@xMwoÏÎ+Kø«@¢3ð_Ö+²ÛIÍõÄw›†@pé`ccûËaÑdyµêï‰ÖÀNÍBK,d2—½  ¦{ÝZu¥ú‡ÿ=Ìw¶·76>¹6jwo¬ÝeñÁ–2W¯¬©«ßó@èÿ¢þÚ݇ªì7œµïú -×IŸ€¹Àéèß$×7õåš3æ+„f¨„{caÖ û_L*4Qþ 8Y …`Ò¥=c(`zêPð£°vÛ bsøPÚ³=µ|Ê©ä²Uø|ªàÑ뀟€¬þœ’>ã@ʧHÏøN€§LäHšÚ©@ €°å-Qd3,-(,š"´ÌúPY¯ù€ES€Â`„oò’„ àBT1;ÙÍè˜dåœD½ÿ _ìj˜t¯[ÒL€¡P^`xÐü_t €ï¶lĹô}ÀE£ÂÃ'“¤›£›ˆßˆ…ƒ²2¿Œ(6­¿ˆ‘È'>gæðW£f|ryùööoš Ðøâ7|êæÑö£”»›ëŠúóI?ŒH?ïÉ?cª‰Ëâ{Âüûb +Øà#"ÉBGíïÿŽþ 0Û;à/8€6€×d¢ÿ¿£À„šb7è}Ú 0‹þ¶Í3¯™ +Pì$!€}¤`©3ë0aE`AÊ…“ ‹æ«D†½Yì/”V +M{ìKPSA;ÕDƒŒÞ~6cÿqyðd°o¯tÇõøä aGpû ŸœîEݤÆöCS7õB¸kê”ѶAÞ_ ~¡Þí—ÊݾFksdñ‡ÂÜÿEwJòäPã·“õ´â(·Öb˜Boçˆ1ñ×k-–ÐÉÉØoQKz¦’®ë‰ª‡dü7*Ç ¨ ß&köñC +‡îísÔ”Ég`>.[äØó÷ÿ¹ã¼ƒÄ@=yÐnнÎ×¥?ï×ò@2¢<÷ŽàÒÉÎÜgáÈŠ`"$‚Êèþk¯‡/eØ[ÂTΑ¥äÉ[úû0 ³;°c¤ß/u»ð(o£hÃ@j¨æ°Mìm».Ú]`Ÿšã’œýc“¯S_Ź$vX3[o_u›˜{7æÞ»vð•ï³Ôgõ S1§Ì©¤]ªÂ…¼ph”&‹þ¬TP8¶†ÛÂ;çœ{°Øð=ݱþaÃ]áß‚„ÿlh H @7€k €ëaˆN€·Éå…Z¶¶BûIÄQ¬\„¬þï4à W‹å/_žCó× + \¾¤à›·ù$œ>gyý'¸ë’ÿú ÅàÂÚXE€s€D†¿oÔ<€ã\ÈvÞ¨¬4s£ÍòñÁAàJ(aÙïnf£©ÉUPÜ«ùË£ìÔ÷g+•cvØ£Þ>­ÛQXÖÇšo°A†ˆêÊ W2B_ßÕÔ |€|‘™© ++]­ô°?n6žs¿žÉðfíÿüÇGc@!1 + èPÎX_I_ïj8stÆ@:t±$iÐEð3×_àðÚ<§€„ÿ§…Q ž1&¿¶“ÀGŒ0;@”yJ¥¢À.€`–ÊEbtç}Š  +ÈOøH.‘ýù£ø3¡¼|NeÈ?J€ïÖöü VüÓØ7ÅŽ%¸²XØâH!nMôÿwô˜€4€¾ pÞ&$‡Ðô'@‘b/ð_|]ÿ?Z› pÎ7܆ à<þûè«$Æs*¨¨ô¼:±'UÌ1[ÚüíkÖ™ „X-óW:^ÿ°¥3ú)z)IŽþí”|ÃU£5TW‹S|‰1Ð tËr¬o¿Øo9¯—ì`8—’»î’ë’`;Pè]Š×àtŠi‹ÄÃü•?Òþq@>â|Üèwÿ°SÚ#ÍÁ|ú½¸?éÛ ˜Ø í@75íýÎR©‡µÍß.tóòjùI!·˜ü¶©K“€Q£#:A´í +á"Y¸}û6boÐ)Q•ýÃÞª£ˆÕI3ŒRîi’ÑûŸ ö9:€§éìЇc(Lï'>ˆ£u Ó~#y¾»€ó>hú ŸRÀÿ›|Žð¦à8•¤ ®ÜBצȳg‰Tœ^\9ÝÊF'¹M)éöîhK(É Ü^h˜ø´ÄS €SÕ'䆰ÁÔ÷P,ãÀsÝE&3Ìׄ¬Óg<!ª×?ÓQBöNá˜2~N¼:WVôü׳éj€MçY fÐâõQEO°ò®>³GÏú¼Öï5³J"w~™b•ýÉË;ÎPXÒ=HŠP €ï“±øöX¤…ÍŸ¯•Ñ' €7Ïhkòθرûp!‘|Rîvò4 ðy2Ð3FœŸà­£Ò_\ÇßTæ?,qˆßDÜüÞߦyo¿w)/Ë8)þSçä-6€×ýN @ +p–È_|hÿS,n$«Ä…†¨¢àÔ0îI 6#° åò>š´€m·4¡‘–@%ck¡¸:ݪ©sè•£;ü%`aiq)z£$¢õäð àÜ.kÐJ¯±;TòÂE%DÓ7’4Ëv¯=Ðf¾×éüB§½~ÐqŽÜ®nx‘Ï~gšjpaeŸ` _¼W^*»rˆªü¬.—´æ ¡à°ÑòA:Z„Òï,A$8èÉ|Û›`>¡&ž r%è]¦}©UðÕkè:FÔãšòí¤Ÿ(÷¾&ÅF×èb\Ä.ܗܹ!gè©Ñ;ßBÙA„Ñ…Ò±þƒ(™ ïî–W¹<P +Ó5= :±Øω£4ú–EìHÙ„úvwB^¢òV…u’ž µüxF|R¨à„þçà?u(}üâO *ƽë—/]½qOb{èAþšY%€–ȸìT\ê?$Í·‡®Rׯ/øAXÖÖ+š)ÀnCŸÀõ…µ»qÃTÕùÚ‘½ÿ u‚èð+¿q÷¾P[7@Àµdx7ÀBmkmY’áBÃáh0 :a¿è?÷Þû—ÓÈ‚dp ø­¿YP¾s€‰@áñö&€ªetƒÕ0AÈ |¾”ˆ¡!k1Á6`¥ùT3La¸©àia†@Ejb˜†cëþY²>`ÿ ÀE>ÿõ×,ÓÑe;S @¡XŒ<$Ðéc£uDYµ9ùùÛ|ŒbûŸœ û§°«“ƒ+v¼Ù0ͽÿïfàèiÀì<< V‘¤³B=o ’&7¼ó<aH…ðxOR;µX9¦ßÒ3V7Ï[ÎøDåO¤èðhX¾Éÿé‹7û¤8ƒ¼æ°“çi$@ÁÎZfGøuÎàkÌ JåNÀ;Ûâôïÿƒ€çï£ÿ_â]0€}ð¿@ëâÆÔgùŸ‘´s‘  ¸ñ¼À~p) )Iñ;Á?b³|úI ýk£ð“$Ñ·‚ˆÕSá* +QÁ¥Á_]µóøßöa1^ P0. NŽöQ,ùlØWKå’"†æ-…!¼íäù‡‡û÷¡W³8é§Â­2«¦€PzÙjÄd€ëúÝ=ÔûÞ fÆ·\µ‡ËH9ßÑSßÿJ+CÙa håP F ys!…DÒä@& Ìívi±´›‚.Šw?­bÌ!!±HÌ!ØmÆÀU~œ&€]®é;ÞþÔ  çG öý}­úðâNç£VO‹K(þì’ …›—wž@ @øo„¤ºÞâAðÙ2øó'ŸlÈa¢/ÀóRŒ8ÀÂáª4 +`÷爸‘‹|v uá9áÿÍ0\¼çFøœ5Õ¤Ãñ7Lÿ`LXžqˆ1apB´¶ @q‡*Wb5ÁÉ¡SAñ‹ à¼À,Ð 8ÀŒ#à)ú‹¸´ø‚Lj…AC¢‰ôqgbØwI ½’Ä-uÏî' î: ð3ØÈG3|iµu,ëí'g;—Ù‰‘r +à_v~'¨SãGãäÂ}{Ê%ýž,ÂUy¸s2ŸÀ¨@2½÷…¶R MÔ1wòƒnçáO°^ ^ÂfBi•êß×m/é€lÌþíÛ@±ð Λ;²µJú8ÐŒŠ»¸(´ó'èôõØÁ[-ç "jиßX=E-J¶üA«W†_X„1½wÙå±J9r¥àlTzëuV 5¨·y¢ «1iäÜ%ÖHê詽pòwgP†> Z«fܱ/…ò´ÖTŠ­¥2É·–) ¯kIú$K¥vʵt².3Òj‰±î)˼½j—J·Õ^ú¥³(¸ÿñ„UþÅÿ)þO;x.¾‹[w! ¶åªî*öõFs¹’T\õÂØ@Ħ_Iÿ_¯Öœ|_ÑT¹ž|j·î4r¹….È':öGÀúÄ9ŸÚ•è¢ÃJ/öÛõo@Z¹÷úµë×®i¸tõÆå¹÷ Õoã ke縱X«}¼¦ ÉÊ_ó +$óÿ•9Á¿0þ¦[¡@áÐ|çQç}ò7ùeÏB£;o8ïðå¬þoÏ™ó€­æÄàAþ«S€Ç ¤¶t4šZBÝ¢:Ð\_@”þ]hHèÿS ¡˜6’b Œïh° àMJ&>Ÿñ¥ÀdFÞÐ` ^• _²¹›úÿ 3€€oðgÏ\¢ØFÎÌ@2·³£TÏgej8;À,Uûsæ˜ÌìçŠßÆÖy á½mÀ›çH¥ÂÆÄ@Ö¬¢€äs’bô¹ ѯùP"õB?i`mï8 +€÷ã;G¸{û$#,þ¨\à?¬à ~ñ(ë&ýé>(ƒ6|ŽÆŒAq,I±u‘ €Sþ÷¸¤V:‘þ|͸Ì2pƒÖßÖÛ½~gè% ƒŽóñÍ¡ÎrÀ^ýèô{O%²’à<Xáõ[©§a¿ß%—D—pœôüsÌUØEµ…Pb„èfgYÒ$•HØïÐüTP(¹Ñ”`@lÅ»o€=§2"ßjï@ÿ¢N€±Üq\¡Üêq³‹èÿ°Œ%Ø 'gGJCvvï·¨½’/8)ä“*ÀŨ‰%ѸÓ*µã";(J ÛG·g5Ë®¡a̤•ëŒE%¾ùâꜯ‰MùW?&m4…©ø¸ÛØ#Sݽ˜æ±Ý‚Õ,--}/úq¤a‰@äŸ|ÅÑ$ÓŸÔx¥ß ¡d4î-̽wíºëèªgd´=õûæÊt ²%3ˆwlñ©ÓDÄR;±ŽÓí&YO>U”ðGšÁô^Ñà¿ þ˲ê|•Æ =]rã:4 M +pC±¯_»±péõä³ÿvôG®Õê+®5ÿ W‹C„‹ žâÿ_F‚›üÕð€¦¾>ÀY€dxÝ 5ôjw¡x¿Ñ`‚'…L›æw±D»Šþ»;<:õ@8¤ú>lG˜Ô ±æ“@Stʶjy"EÖÒVt-GLg-_씜µ<Ê>½dÞ+ª¤™o^`HXjYþ2ÆÿéÈ1ÍlÈ7] Å뀨(¾Íîë€×|H}a(Fœ€[.$…ÀN‰”Üø™­§?k€‚Ü)“ÒOÅg,TÎ'Ÿlðn¡Ü‰d%ú‘dêpfÄ‹Ó(€Y €§¥ûº µJú%ˆ³>š½–ojþ CÀ…kœÎeuæ³ÅAŸ¿…ýØ‹?¾N1™ÿåJÂÿïýèÊâ¿@óÆ'e=ð;áA\ ÐýthF„ý·ØÎú@Î1€‚àœ @óuí;ˆ“vÄÿ°á;Ðê’ Ä[ +üÊlò;íUšqÍÑ1íÛи•_;4á?ýý `¿¼¤Ó:ؼT€ù)NÒÔ2Ê~çP4üÚ©7KHö£ëÁŽH‚ fÄ~ˆ79ã€!9`§ßîv÷»ýÛ½Û%pÐHLugŸ¨MÎ~­Ü™Û| +Ø +ÄêÈЊÐnWìÒ¾‹ñÈ4„ƒŸüðåá¯ypp ¿FÇ ‹U\_lù°¹j‚¾W)Ú´“ˆÿFUŽƒTV +¹GŸB{R`½Þ¡Å "ï/…";ÑVÐqž}"ˆLÎ2ÝýFDý” !©¾SDKq÷zŽd ˆve%G/:!hŠWB°Ì?™[õ~o5µ0'ÍP€Uv­$^ñL2ÓÐëµ÷âe¾P’b±±¶pùÒÜ -`•å_…ÀRÿ€" ‰¸¤qœ%ª‡ù£ÊJ–oe£qžU——onÖ£““W¯Æ££¼Ò''@oW À‹áŽÞr"ãŽ}ÚR @uŠ™›$0Õ? jn9>-M—Pœ°£×Ÿ2Ù!«ëYì¢qWPSHÌîÄ6ª+™ Ày€”ðøÚξ|‰nJE²8líæ›ÙñV“bâj#DJ"°xkœhÈ)€øMN­Ù;ø+gç0è_寇-äaãóLD™~›Å[Sk¬Ür¥¨ñïž~^Y¾IE5Ç“Š:+»>bÊÔðš@lžòç?‰…—æÍæ3ö‹Jˆ“T¨Ì°ë*—µTm…5ë¬D…ðd¼æ `søâëÿ¸Å?Ÿø©çäé/G£üóÊè÷?ÿ‚€£œwóLÀÓ©‘ù’ìTQæºiZg7§HŽLzN]p;~teM}Æpúàý‚“x`"W +È¿ÈÀIï>ãpEp–|¿‰¶ö©%ö^åŸ 0Ñ]# 6öP*4Q@†®ò› Ð‹K] `ò¾Awà`@D”q +^‡èÃÏAÃÍ÷¿z²og¶ºúçEb´Ú ñs¼¯×€š?Wþû\Ëñ4„+ÓÐsµ_ÒRäÀU}¸ Íš ;{ý‹þ@åVˆpÙ¦Ž C"ÑêG0?Ýð à|h¼ ¿ÃêZ S·ÜíëÀ]Çâ÷;:3 ä ZHI)¡3ŸØ\þˆÐ߈Ç€M äËLü;ÇÝ•} +=;öƒLX"Ój­†‹†yÃíçƒþׇ=»– 5 ×ÑüˆÑý˜PØ7|9BÎzN÷Wn-•׳ÔVXâ´ ¡ÿ¢äõÀ„¹–¥k•ß6p·Üå *Éz¸±]Þët÷ˆ_°´Z°®#³ š0ÀD&ÄÐëíµã¾Xê[\l~ïÒÂ{Õ'µI”Õ+Õér7ň®Ù–Úƒuñÿ +ýݯ­ZmáÚÕ…Zm¥ÒØ¥Q³깺vïú‚àÂøÏ¿]ëó 5r2ÒÑ×ï¬ÝùQÜ·íÐ ðš6€KsWÅÝ€í·È{׉|A ¿Ôâ.4`"… òþû.,Ðúåþ_\z«ÀÔT[ørÞ+ØÔkó¤û7h`ßæ`jÞ~„ÈÏÁíPÙŒWþã£ü ~k¹R?8ØÊc>bçêÇ6ðÜbjóa}ýh”FBf^ Wbê8`XkÈ'§Ú¿K&Ô0e¡*ÛŠC+^6ªÕl¼ûEJr¤Þþû%J1Î9;JBô6½ÀÀ”B|ñ“¿y›ü¥@ 0:ÁJ``*õ†½ŠÆDŸJ#á³Â5S @ñxÖÀ.€ê©~´ Pô7')xc}HõnSO^sÈnUÆ'Ïò,*êólKlæjÐ:`*°„ó>zÍøK |‡€ƒéþ™|YÒMþpdŒ£æJà +Ì ­¨Ÿ[0äòêf¦…ȤÛBžã+ä>ë¹ËHñÀ¹f,‡ù, ùîs ÀÀyú<Ó¨P’ÃÐèõˆ_oóˆÞxà;| + @`Š’ïf'˜¯«[׿=ö à:Óþzê5']åà G¹‹3æ£êÖ¨ ¨Ü:xvÐ|4=EËllÓàŽ¶ê£ñÐÈh‘wóãÿÌÖÇÇâ»9Iâr@ßr0O1y Aë¬×õ +PðOd<ÎÆÇ±X@¿Ç(xÃÑ‹®ØÈ_=>"sÏ=Iòñ«—ãñˆl€"dVß¿§F’ˆ.m‚+[ÕüDÆB~"ŽùµýEþr´…q*G£—¯6GÇÇù0‡Úx˜¼µ<›–ñË'£ÑñˆÔäGðØÏÑ̈ð¿(†$¦aê0±ÌúÀôÂdaŒóO­FêÇÀc#?ÈwøI5U>Ï£¢r*ê`4Ú9hFEQbçÓ(ƒ¬NʦÄrò„k†2µ|šÕdç…GÃS5Ö'ൢá㨨I=Eúà†.ò8+Ƥy³À¦£LžåÏøósô RóÙÇ™ËNç•]AržÿÝáñ«“*5qtD¹œ¯¨urò|t<$5GSÉ‹_$?EmQX]þGWb€ä ;€.ì†`bì/þÓ±E§ý¸çTfõÿY@º|Ö  ³  0Ì8Î࿸)*&€ àPH`#;ûUT:¶@Õ>µ5·ÊKí0¡» ÐÆ"`Sî=<±O_ Ù½Ó{â‘ý^ÙÅjÅ Ô`÷E‘zº ª‹òžÙ‰Ä"¤TU·k€zß¡cÜ“ÑÞïwYÒRÙí&wöPÝKƒÐõÝC)O™è´o/ÞN&màÌ,(ÛîîK &g4ÄXB +²Ós=œð¥;$ÂÁàëvëðð_¿þzàŒ…èïNæ+" –‰¤¤bü='üÐ=$­ê1Ý^¹üu¹ßê¶d–n9ºEÚ·—PÞ]A ¨‚ôÆ!‹‡ƒÕþ¡³ðöÍ /?pYåÃûz`û‚*i9üúÂa‡L¹T\T¹döÑ#êX˜’ÔX°o‚ˆGaw–:ƒ'asyrø„*1> OP"®³èCäø,Óèÿ°jn«´è¬ ðò˜µL;¬¼˜Q8^ê %×ÞÓ VûDeÜâ}ç•u0<€)š¢PÔ¶ÑX' @¼˜ˆ. ;‡k7®-Üm®T²}Ä÷p.Hãü¼¶¡A¼`ók ½ôkµ Ú+Òt}ˆka¸vã YÄè7s€Ëk;;wVjð{?úøÓP[»q'­ÿ·0_ÌX¸L?._ºüÍ›}( ËááwÌ ÆUH+ùðÈL[4Úbâ:àÅ7übHÛò£*G|þùç™Æe~\(ü%äx>g?{V_®ŒêÍO¶Õ¤Bòq¸þq¶BóÏocwüíxøj·Y?8«mjq \‰ñœv×`³¥»¦ƒ;ätÂøŸ${¤§z3ËŸŸüñä埾ýöå ¨ÒlÂã¡q}È`3Ré|>z>Êõ…ƒYlñÏgË󪄡Š+·vì·`ü½’ÊW³2|9Ê7ÁR"9€9ŒNÆ¿Rƒ~(\H%¼ùÈ„ˆÊ€ˆ3~u2å@ö©øt¿f8çð0;Ê4†/å¶G"O[”Š®[Ùç͆¾³EØVT³>z@E=£¢¸Æ+*‘ P¢ý˪õ,Ÿ11¤‡NJ_´¤˜O,µZ*ñ$£çã“WäɲŒeÍÍ,ê©™­¨o¿ý]ü¹EEQ…p®çQQrÚâ3‰8IzÇ ò5€£lÄYĹÄ>ÍF'©ìÇËãàyÙÎèÕÉðÕ¯òJª(8e5¸´¨sM…Šâ¿HNñ8°úÅ~gÏ%÷¼NÔk÷Û{ƒîªº<Ànþ fV-4Ä5‚âÐïí³íʇðø¥ÑÓ¼B1ÿîÉ“¤XJl[!áÿý[ Àn¾Cø_H¸VV&ÿ• +¿•ê>ë~Ý\®Ôë•[•›ª›^¹¾^߬oÖê̓嬾îͨ˜­›7á3¢ë†áo;@#,ç,µú§T§ÒÈnÍÈ?Álm¥P¹ªºÎïòòƒúúúzÿjµf¦b" 3¢..UN-”ðY €]^G,ñˆEªjõêÍÍ:ù]'ëõ"ŠØV6×S‘ù©px¿”ˆZm“ršM[@Þy€³óè£à×/[Üt*Efbc我=ˆmVoþÍ*ªRyP§Ú¼ŠŠòS/PNUÖUãÏ[ÈnÚ8c¨7RÖâÕl}x([!ªKc ˆŽb!4üãß,{õ䔯TR\ @0€‡<%¯[Žœgb7ršònž¬úÖ³åf<|<5÷«[oÖ77#}“Š¢ÎWÔi†Î|&¨](ón|/,ß÷Œ?øÑ© @ H$ 6 À•^s(äM6€"€S?€‚Ìš¢i P€³6Úz›û¢9Nw#ÿ˜5hëïrƒøoÀ]^®;ǹ$¬÷‚€@À¤çÀ¾u+ã»×kÅø‡–#± +€÷…†¨¡\¥ ûîˆ>êçÄ ŒpÌ ‚pØÖ¶ض£¶¿T"Mý=C"J2jºåUS'ö›~^ÌEȨä5pж[„Å™è@4”û=uzyLô¢kLg5¾#Ê‚ÂQR1–áðß:‡n »Ýö ‘·áADh)(AƒéeR×ve™Ä‚Ëå=Õè”(Òÿ[í»W. „m„ÜÔ'ÒþÀÉþD¢%bÇözp£è"ÐÓ/ªäTZÄÕsi nt¬ …Gú@#›.èH JáÉàI1 +“R'w–¤ÎÂCÃMKTÜ~à¿¥&¹Ú)Ôriqu5æu\¢ÎüÏ ÿ¹Ò¸Çfz_—ôj;ÿeÇèÍIvv³aŽf’“ÐDP!PŠcY}vŸX•Äã:[7ìëo4i^iYÕ_@]à€0`cƒFLq@¾6_ Î6ì…3àOo,ütázj4öû ÷î߸±qïÒÂ=ánîjõ›åòÚöNu¥öhÿ¡ú±~€®DãÏN~]ùvŒ¡rI;Ã}Bÿ·¡.|Š&sÖ y}Vò]ñ?pe¨àÑÔðkwÀ;ƒ),F4¯ñ‰†žV,£œ›õ› „f5áŽÄÿYáÄß.o¦ÍøNBUNfqJßC«4¡ÍVÌêD]† kÞZñr+…P½uçŽ)RÒ¿n-Çv¥Z¯üM¥~c@a5ÒÊmwÊðÿ‘%Þ¦‚½¸ò °ƧÔ}Rù0ÿ›SIññ…cnUni#’JeùÖ2²ÂiöÜŠGN/Ù|0iÛ¬`bªym€¼Ú¾üí¯Su‰¡¡¹4=|%Lð¬¨Í›ÿ (H‘bŠ2›•¾g5uк ¡pRõdùE S w¡¥ËšØà(\èŸ>éè@W Ô_í‘«®%«@OzM ’(;âˆÿí¥ùŽÃû]§GÒ¹NûÜBühà°“'Ü÷M‰àwøaÿp`!‚Ć"gá •)Í2 N>À½†ï¬?ÜqJEb™$uÁ0-po©¬ñF»HÏ2 ?K×… ,Uþ iKå=!_«ÑbÌèÞ +p¶`o¤Àt]²¸`ó §ï§³|8ÖhÇÆ ^öúÿhäZõšÍl<äõGìë;xþ;~4Zºq}“í§üd4βÚ]p¶Q«ÜipqÑžÛ”4jw×jD6Áñˆæ†ÃÕåLÂýÚF–é)0•»k7înl×Ö66î-¼?w÷†]׿®]+ôõ‹enM‹²s™:j$ªV#aY­`×ç ðçi€\åsmÁ­ÀÅ󜀈Ø3>¯ÁÂËýCN-[_þñ €h| 9 ˜­&„"}VݬZc)~Ž_Œ¨§,:ѯƷšu´¿­Æç§Öf‚=o€}®/H½¶µ1µ4³æŠª£ü†gOÉjlÕ€ ÏwiQgÍæAsVÙú\,f¥r¦Ù$>"ÍÆVÓ¤zå#¢ŸZŽÞàå/‡^—ç…90Sf‘%žÍHwšI·™9G•ÆkbÅŠ9jZ÷â@¼ƒü¿Mäs*‘+N}’œ ñp{bøfø¨9ù4š4v[ù)Ÿïþ?ÔÄ™ŠÊ¡Ùèà|EÇ©¢ +žŒ*›àìy€ æÐ`EE/J|¶> ~9úÝÍ_Ž)ïúz­Z.#R$ŠGE=u$OFT•—*ª^ᥞHzG¼còËÖÅ>ÉLm"¿Êí\ùܧ?dôïÿ­^ÉÒCC5QQÙ¿GEÅãàoÓsÁ5ã÷B©PèZü´À£vüè{¨èÉÀÔ'¸/ìÃLo¶D8§6€)xáþŸµHIŠ»hü±c»œLû=çpSR·±zž3Ìqq-:nÒä[í¥ÎŒV·U÷^8<ê?â¨{·)Œ^é뾄„i¿Êš§ŽÖcnÑÁ¼Áá!Ê-Á9±?ñ€¾.©±«­¿Mûù«j}eùŽ6ÇšÁ‰a¯¬ÜYAùÿðÎÂO wîŠáÍ]úË÷ {Â4ØÉÆŽ8ek…ÌX& õÄ h2£I”5C.’<×0À—€Í-K-¯ù(4ÝIv²ÑñxüòÕxøüøø8¯×ŸóÝñItÀï £ß¤p0”×Bài4ðÿhä,-!^ÄûSàJXÂDØùäÔðèVUW¹“ç''/ß3îÑðUÖÈG'' ˆåÍìÕËãÑ«çÑçÎaYöE +#„ÂÝM·NËð€:9ÙÏ ÀgZ†y2Bð9ø!~ží<% Î.h + ˜5ýF©Ç_áHö«_qÀ"°<¢D•N"Á€LÀwøhÐà·¿Öiî¨øäù£ÌÌ@Èòìi>:~õœ{v¨¨/_SQ¿å?«Æ»»b#²k'ø ‰±˜Ù‡døÉŽ^üªZ»Ààý ó±BÉÂÔ¡ù£å&ôÛxŒääääw¦1åûh4zɃIFŠŠ¢ÜF'O›Õƒo_’¾q’ôXs Oä>Î){Iˆ¸6†ùz%|O>ÏžrîZ§µkEYPÈê"IPH˜œVLc¾ÏÎ~.æ?µÈ”xƒ é;@`›(Js¿ÚINkS»:wê÷Ha$ZÖÅ"ôèÀ{ð‰§.A{Ù\X×C¹ ÷öü%×Ú³œìz@Eþy%pÝY°ë'¨ÙÝä›+§âûºvßç.R×?4·¤¶¼D2(‚#Qör”K{ÝriUD7ø ¦¨µZ–Y…8ß)Þ‹‡=Àm¶8&Ô[@òsn7LÐŽro uãcˆ%×É€¸LÛIp µß•u!<΂`2(¬’ë“ðžÞÚ(8‡¥²¾’ WeÔ©Â…fW¢æâÀj©ìŒ VïjL¨$ +0‘sáÐëjn»@nÆ÷<0xéÊü‡±³|«r«rs¹rkY».J— ¯[¶À›Úínݺ™nNò“ùùùŸ¸1å}‚â +®«z釜Y¾ó“+ËWæ®°u*?ùÉòüO®Ì_¹ÂÿóÀ©²éùïïy @Á [µ©ÀAse]GùÓV„ƒêNŠòá‰ó +Ä‘$`åø`süJø<.Ž(IVâMIÔ+‰~b DN-N#ıÂðjÄ}ö>íªýûü=µÐ)~%Õ…©ÖÝ¡æš~¤Iç¦RðžTgŠåäÏÔàÔT3ë0c8NPdùá¤Tvvó”—dJþú7z‘×úTQ3_“ŠRoRxÃð$MûÔ@M98c(ÆãNêdY}¹ž¨O"Iú<"cÃA‰T˜ÊÚK¢7«¿ÿV¼FôÊ+ÎL…€ßæ ©&Tânðaà?ßͪ+3•®ø4Uêƒ{ÑiâÞE²Õ‡Ýg 1 Ú9ȾxÎ0åþEÇò€ó©Lfx³ €K £°Ð*O¤€$À?Ù‚œ (ô`bøç7šº½¥HÉvKh.wú®§¸'ˆ7qšŒ]yˆá$ˆ¼J¬pÃÍUðUu¹ØÉ½%¶#{„5tàG¼ïDzçôFرOöŸô£—\»‚^qÜúêétöV]£ˆáí2ðÂ?êvèØ:§¤?ƒ(Ö¨æÚñ9× è㮚g¸'›Î~¾•ÈPe¤*÷vˆ»üqw¶ì¶ZƒÀ\öú(êðØ@sÖñ^eAÛg@´íöj)eÙT¶`Ç ,h;µ@ç±ÐÌ p€VwÐZÕ[C°3³F|í°¤h ¤²7ØoÙíž…\²`-îT¾^‹²Mz—à1Vp¸d€ð‡­v°O~-Só6§û®]Ìa'*Ã4JpJšÑh,)©ã[gþ[}åÅR«'àIRï× ÀT^ëp»{ø¯‡ÿÆÜ³ͺÍÏÍzLßË‘ÚÆúšÊ_£ÙDGP6r­Ê\¾ù ÛëçM`e”WÂñ«ÇÏ\;°ŠÎHSµæ(@íïYþÅÎ.g ±¾¼²öp…ãõF= p&ú×îܹ£w–J±nŸ6‚QÑ'&€Zmaþý¤¬Ï½é/®$?ý·Êå÷ ¬V­ídÍßkÇ÷ f­ºö~ +’æR€ÌÇ®…âçÒe¯hˆhÿ^pÑ<çÿI® «ƒ,aW>œø„`÷" ÀÖ¤ñT"]Ž{\ÝÞD?šââž$ËUª/‹}àwŠÀö"‡¼Ñ°5kX¦Å[!T£@M9Q¿£¨« OBcsçØÙÇ39é|.H˜‚ET,ßäà(-_d°¹›Ë7oŽž¡x_l‘Ôºu‡ùMRLoÄH¹•F¯hý67ð5÷HÀwÌ0õ`!èdþ§"ØÝõJÓ=©¨ßƒt¡­Õî­-\]¸vmîòåkssW§ŸÉÏÜ;Œ •² €‹ñ¿Ë“ |P‚ðå Àë>–хˆš†¿þßãM=)œ‚ÞcISvKÝÖûmi)Ó§ÍÊú‰.‹IK íï|(¦ @¦ @9à!b$ý|Çô²Ýðøy^\áÙšjÈ¿¯ù ww†fÒ´'µe4Æ+)G»GÃ_ÿq´Y7ÙyRü'%k)î‹;Ž + Ày€7X¦ q*z|<7oõH¹r+î ›Œ«+vÍðüe’i*ÅqÆ!³uñ‡Z…º ÇiÀÓY`ß‹•€Cåéùò›cÉ»ž8'R€7Ù"˜d˜%³EÀ… @ÍVô(0H| Ðê9ÌÆß^6öA=Ê%Â?ÐÇIh! Ž·:ƒC?­ýœŸpŽËôæS„W,è:ë^¯§ß¾”À±zÈ!ˆd¤Ð´Ù~ƒD@RÊtÀX˜æCçÖ¿§Š·ÈÈZ.ïù%¸ê—¦E5¹µt›«Ëð‰ +µhb¿@«›"ˆ„Ú9{Ä/~‘0“Öê¹ÉÛa0¿àþPfa;ô…c*á6 j•{à4„¢\Ú+ï•–4B˜H’éª +måÁ„Lr®é*Ò-Ý]¥ÊÂPο}$†A=èöµâïÃÈN©|û1±Zæ +›^MP«+b§|},Å®f SæÐ>SË#!Çâ[lS"½C9;{Ý'ûû\î + L¥Ýj-–Ì'Eß– 9Šå +ü?×þ+‡€Þ~ñâ] µ˜(†øBnð +׫M[]Þ^_çpªCâ½ØØ¡ÕÓ +¨Œ@sÙØX[¸¶vß«hJ¾›éŽÏéÊ‘sý¤w> 'BЉúôë§²v÷ýùŸ&}½˜ }½YÞ–aÀÎÁ»±A¦œì/fXX[xþ>aëö7'¡ ä0°6¿üŸ4™3€„i§>…dÍ·ã¿­ðÏi†ÝÐàá9Š×–’F¼À­àEÛŠÜ*Ø=~™WëmWs´…Ÿát÷Œ€H+ÕQ˜ÿ]P(N¼Éðó" @œPŒ +ä4/ÂJä‰ mTYWÌ(iž¦‰ç#[(¬¼…0O}¶/ð(,‚™ýO+MÑ*tÊPÿÐHW–°ÿ‡ÄÕÉ4žÄèËa$¨þ7GZÁ8Ú€¿èÏ6|€…ƒœ~üH·}â§µ +àG¹ùqkoO€.èð¨¾åÕX¤¬ì¹n­>a€¤Z$)IKO¸=€msa”À!(Ø’“°—Är/¶Êúȸ7 52ñµÈU0"ø}"úS„քΑ¯M¦³ôÚÅ À{W“PÊšœ{WÇ;Ü .c„bÎ,l~¸ÜJÎì´Orâ0¥ðUo_Rº›¬(4¨Ö"ÜÆ!”Qüco‡%'µ1‹ƒs{>½9üW—(ÿf%½iNtùÒÜ5À É›—åõJ–«Lª(o9/yÚpŠß}@šT4ˆÂýûÜÊåµ×®Ý¨íªæÑNpfCÿþÆÊZ¾¶p#P?^}Æ*÷jkÕÀe¾„æ µ4]ïDjïÿpMuÜ©{§øü6y¿ž×$Ɔ%4F²v·vW°vㆋο?M‘Ì]u^àžp V~ý* +ˆ¼O- ù~3þOpåË×-[Ã7ØŠFØž…̹ó£ä3ÈC^©)W[ö™6øì„úÈNãVõYtµ7“Æœ^TÆ‹,ó­×}>KgœÕAÀý£ÿþ€ GL}Ò/eG]ƒWñÿŠaßðÍKÏ#ìÊŸ$³•š›Ã—¿ùÍ1eVœ@Þyßl2l¦ä®“D’7ª05^¶zÒ†…©Ô>Ùâ œ=r$Œ'.WÀîp…½s€ôWhü© ÀýfÐ*}¢ûOþ§’»rÖp†€GÀ@ÿôI{É($Ðj÷ÂÝ+€êmÏ!÷` +×9…\$æ†Ú¤.fîiNM×Û?Ü?ì·b…}ZxÕNiÑsÃÔ1c +á>ëâixä©q/é’¶ßôŸ€nªûêªÝ%.¨ÌGˆú°÷dàøAö¼!âÇÁ^ ·„Š/|Šž)k©äÐöÀ%yH˜¾ÝänØ`å¥U{ÙJà>"0Í«®…¸š Íq{¨×s"ÿÞ [rØ`˜ç¤’` ªù{i¾»AЊ ¸TÕ75ü·:û|à ,Ž%çÒc]éØéîµ[Éi¯óÏÐôÑíÿ¢ÛüÂZ°eM‡åC’Kˆ0YÄ)R¦ùDÚ´{¤Š%ƒ:1h»8“ØÈ±%ê¿Ì¢G$íEx“ +z §„ýT{×lB£ãÜ"Ål&Ý#6m Üoµ8¸1ìÿgGPmÝÞáׇ‡ÿbͯÔëR[»úÞ¥¹ôD¿·ÇjžÓÐÚ0DÓ¯xÑJD[·Óê<×Í)µp÷tå{k€ûû¶îÛ4¡…g£•• ð½›x?¸ó©Ó‹ÏàòÇUôòµµ•Ÿ®À~zjp.€µRƒö¶ç;”eîýƮԘҔñ.`p m7nØ0_»q#L{)A!a ð÷½¿xïòå”ã ÀÔT[øLæx#þr:€Šå¬€/òÝè!Q¦ÝÔÔòj}Í{š4/p1Y„`sjsëDŽÕ˜Þmr{ú9EÆs€$Bÿ9 Íx3sì[$A°ŒößM„‡!Ö¨A´¼øŸz¶s¸@æ"rqÃp½7ñð©ñ 9;oØ=®T*€*)ŠÜL²F®'é!éîEi÷ + ÉáðÖ(Vi¢-?Ê>ç¬ 8çðÆy4Õd^R{Æ3Âu‘œp„£¦Ð¹+ÉÐÆ *ª1Êg-A"“¤\¹ •É|_dØÚú”};8ãÏ+ë'&]Q_ñ¬h1Š Å·…µ;l®çÿóÅxøÞ`ø.[IžŠzŽÄÁ¶ÿ0Ú\iþ‡í‡gŒÒ3Èi=IjRv6jöàp*¾Ïüó$NÑýGÅ:v\ À"oû©@”OÚ~l  +0õ,d²ñŽ~çÀ ðÆ6áÿÙÙDšà@·C^3¨a¦“€|ZÜè;KmDLðœ ú¡Â£"Šá¢¿×.9cLÄ’^c‹0 ýÊÂf¯n)†ê.Ø;üê«ýÃ'‡ávN½}øƒË ¤€V]m''ŽAiº¦‘ÊNøÀ“F`G£¿<#$¦ãÕ¼O.¡«ü´÷"—}<ÌÝ.D =à¨c¼"Ôç$ì.ý¿«KK«fB»vIë³>áÐìK`z>ì û¸kOoš ð ÿ"SYÖ¬Ô%BÛnlïž©¨/áŠf'*Ê~ò´“77óßþA¦6ë0±¼ƒ€l‡ӿ¡~ ä€׬á"·"ÔlQdŸ ò±Uë‡ú2/[Å÷Ùªn+À] žqÔàûqàÒÄpê0ùL†pæœ €½´Ð;ùœ'g@Á +0kHíj¤iŸ 9o.8"Q@ýwz›„ p¿³ˆ> Z¨×£"¦‰þÑÔ÷ù©ý€”‹%`“¨ƒGè©|RA ÄZ,õžapØëØïìƒô¥’à QýrÀ>”\¸@x&1#(™ä$rS࿚i×¹è8}0ÏQ8 ¢²ÏEBR諜ãFi)‡Ý£|Ø.¬®ÏûèÔ(±¢qû6ì«Äw¨ƒØ§Q œ&ýó"rF”]4./éåd”¼.È#aW Ãj—ö Sr)©"¥½==.å)nðAÊL·ÓýÿÂèl] ûÔwßrÔ¨™K,% |(ÔÙšF‰‡7wº}'¯þýÚ=ûô¸±p§@ü°\‹m0º€…kà(çø¿…\Ù°;4ðÑð/@ˆÞ‡Š.€7®I+æ&>ÿ|Í2€ôÏ7aÍZÈEñðÌZ¶‡o”WÎÎpÞàB VZôIýF§ZwÞÂa7ÕMñöîñŸ¬ ÇÝ{(G±„DH4¹ÊŸmàht{ð0¼æ/—2•¶NŽšõüÅ q%Œuòä(YÎÎà13ežÎŒ âããÆlž&ø¯uߟ‡ñ´QóñäMóÄhb¦ÜhfÕÂÅEÞu™ZXˆå «‰š2ÉþÀzÙäaÉŸBN+*þ£¢Æ¯&OF̘rõ¦™ã [šþ#KVàß=l¦ñ°FEÍdj÷ËÉÃGEEÁëybŸÃlfÀDâáó:ž¼7ûTÔŸ‚Ö §L­¾B §R]O¤Æ¾²#™ñç;DWN B;À—=-اæÇ_lyƒ€ïÇ<@éïœ`ÿ]~o!0Û3 €Æ¹øvÿÄlèC%¶§&qÀL8lüùÓõ ”vZy ¾:–-}Ôî ž<¡!W˜èε½^ Å b\ZdÊK´újÒ¡Ç"å>©ksîÉ“Cîþª7h¹ wö{\Ý[á’î;”ôQe! Tù6_â%91½@9aJLFØÞ‰>`ÊŽéòGò’…Ûq=[{Zåe)Q6IB/Gƒ=|ò¤ÕÚƒ©HZ4¦{9à,Àm7výTŽË“ˆ +…¿‹òÎ9’Nú<Ʀ¼Âñs%ØÅ;âªP [ +_Ë”Vk"‰CƲ·G† ;@ÈGåHôä=êzDÝuöába[…½Íjd³T*]@\žÁ>Ä;é‚p-6Çø›"O©êC4:ÝÇa¶C"~xI©Û ¶" XÕ¶“‹P.E!".÷Âäàˆ F°ù/.©Mû¢jª7œhÇ.€{wwyS+1)µÝSð@ +o1‘0__N뤭’ëÞ«W¯ßuÊß _¨bÛ•kú=h½b}£°üC€´Rïõà™ý…Q_‰.€dªŸ‹u¾sàû!í #u0ÄÒÂw]hØÐ¯k +€\I½ +  ÿÔ0Áþ„þ~´ÌX7ÎYlXß"ÞÄÏpøå—´Â!Ë(_oüúzÌ…Š8ÛüžJ“+E6Z¾vP,«4³ð +‚Ql›·õ +| >%cy¶;:É*UÒ}ÚƒŸÂ¯Ûû¬ÐOÏb% À©› 0€Æ³Æ­jh‡üÅ µì‹É"j˜d)õ—‡<D¶³çY=ÿß¿ùæ›áÏ¥4©°&ÃÓ&‚–»--˜x•îƒP +î4Ofêøy¦:NéSþ¯òF…ÑN"‘8µj`É¡)Ûë…Lm–iKYJ>ì“;zdÓU}4X¸8Ÿ˜¨Jà »(ùösw;°gRÏ×îab5 ”–bÑA +›Ë£°ýGõWý_BHŠ;/ôbäQLR‘²Ò’Ýe`”#þ½Ä€¸%œ¢4Êô-.¶zÐ(n´Ž=Ë¥5¤Ã +D¤WáÅ'.sE‰` ¤ßÙïwQiüœ,ïSŽK·¥‘¦(öèˆ!ÈÒ¢> £!£œ ‘xM-$¹,´=+É0"ú€@¹~í€8Ù¾¨ ¬¸—._[páü‡c•ƒõ*/³/)/ñi­’ÄöÎv–×–ë*.ÀK,þo¸Ðz}Mû]»`€ÙQùtô•µ; 1Iß7Öî&ð×p}þÒBY×V/" Ïo‘¹j#¡ò C˜nØ¿pãºá_½teá‡Á’ w%üOŸ (öhÕO-E«6õ 4RKû‰ûŠm¤/ùÐPÓþgùfã…Š¥jY ¢p¯$‡)šXáÔ³ŒìŽòÊÖIàJ4ÀâJ:Úõ|¨Û¹Û£á¯!Epg„@E€(ªW9ÓRûd+ð½Vϲ•õ0( /7>×8IÚ_ú%墢CEÈ#3ú¼>üÏ߯LÃÂ1qšGâ' €(ªªœœIwF‰nG:Lò¤o½ëؾÈr‹p4:m„uFÈ“yˆv& àLžÂâT€eÖ¬ßjèo «®­Ts’ +6!6»ÓŠ’ŒÍìåokžvó4ž!­ôé·¢Ìá„gᤢòaf8\Œ˜*ý·¢@ab"ƒ»Ç§Êú™šàÜ•^Á4F!Ÿ„•<²T£z*›ÁÔˆ4¤Š"µgá(ø2?ÒÅ‘<ífyssô¿û›_I¹á|?U”_QQf**e÷y^[E†ÎTÔïþ9·“ó ÔV.¬¨OO+*š–su±¸O Z~¬ À•+¾ì§€Y?ÈôDìÇ¡´uÚ€¼Åð:˜e…à”8^|Ð0Sã ;°&ŠÀâU«U¸; à§œ-nñ鵿ºÝÁ W^l?ÙÂ-pŽ€ISDóŧ·ïÙËæDh0‹ÛA|ÅVG‚Ç©€ûÛi"„ëÈ žH3–‚‹¤$éÇo€ÀƒVÛrm[þ`Ýѹ]Ö’®n¦æÜäûÈAzB(j¬NjG&]…?ÈJ”D…XNQy5E›~p¥^žEàæ4O`Ão†ÇC•Ùlwl<µ @!Û» œ‚Íyz*á(yªg[õ;ód/€ÑD\~YQÂ%1YK»_òKžNFë0µo†_Qìv÷gM²c‘÷‰èùœ–¦ŠjDE™ú™Lå§µCÞ¼î" ùBŸšíèlCg+ª.ß +ÀcS©²m2W @¡_ñ'U$LQÈÖÓèø?µoþ³xø| ¶I +áh½$ÍÈÕCgÕÖî8ߤ¢¨Û×+ +^af‰ëx¸sœWWÒ8Ë %*j;,PµOf—7It$@̳„`: °¤¿ÉWôĩńùgå£Ðö“+à[l€à8í YǦ ´Ò€’$ŽGi“Ø…»JÓ“ûíöi콬½¼¦‹W—tïï:KKÝÁ“C®ÓÀsöÚ+€Ë -Öƒ¥r7V ²Ùîä8ºT–>hà”ªÐñ/0ªïðÀmïMx6YC{‡®Å‚‘ÒV¯üÁâ½´ +|éü¦O}GÞÑ%K1óNÜ0%¢Ë€…ã!Ð{_?ÎþåøÉü+ï¡}·Ú¥½@¬I¿Õî•IhhºÝ=Âo »y{@:M´1$3?Âð•´T.eòÁíI] UK¤EæHYÉ‘\N²¨ +$òê–ÿfÍÒa‡»¢>-‘¨%=î„q¾\"™â°ÎYø¦¸²ÓáÙju¨9=.dt}rº* \bh_ÂùºÜ B±%ÏcÔj;Æ"fý3‰‘6Â+zHlzà>FQ#ŽøW)#µâÉâšƪï-ܽ·±ÑȆh̵@LðmÏì;ú OMü§\Þrž?… î¼·6wiîÚÚ½ûªßÿwïÞãŠåx·"wx§×#ŽÐý„¾qCî:PoaáÒÕëá­7'Vû’ß&sÛÀ#'IZ wµDƒ?ï_)Fh ¸øŠïÉ'Iœºti÷Ô0qÖšÎP4‚ß!ÑûE+™ÿ<Ú +¿\ß:þŸÃ!mrhãu\'3÷H½TŸS„UÙNþ*§­w.<)ˆÔ†!GPFE¸R|/’Éml[FÓH@ÊO£·\´t&•õüˆKn {r,ÛÎ ‘òƒXš©W;õá °òçd6’g¨ðYMˆ-¿Z¥Zàî±.':Ì.htš)òDpŽÈÓpg}¥¡SÂY Àºœ”»S¦>™äˆÓäÅlú[o4mU/ˆ@Ë69LJ²1‡$w9ÿãK£M><©6_¼HX©GFxe«i ²œÄd'?8^“‚³¤I\Œp$лĔ›©Q¶²ùÖŠâ.g;03U»ï‹8©¨ƒêº}? y1™„ôŒ ârª(è',À• Ž¾Íª£—ßüZA @<|È4OäÂl¥lPQëÕ\'@Ä;<8[Qr È'yZ_¾€}[údRQmÕ¼ƒˆæ3.`záp: ÐóOÑ?®KàÌA%¶ç mÿm~€³ àœÀÔ µ:Z~›ìØTÀÙ&‡ÒÙí:{®=ËëbGüú_FUý_~©ÔÛÿ*®üãj[UÄ¥ÅC³ ¼éµJΣ¯ˆ`Á>PUrzGÛ× @˜Jh™ÝÈ7~ÉP›Ón M`¢¦k€ŸÜÌBb¹ôÁ_ÿõK^ú‹4WŽé!§ÝÒê«¡‰+lXlaß¶ª-*¯©Ý‡v£êìí((ášT‡v,Ñ4m8Ç@+ ²Õê¥aûPÔgc¡°ÅDn7Ê%×ÊsfÂÅ¿þàƒ¥réqœåú0+X{_í?vÌDŒðk)™ ø´¯B ¼ž÷ôh4Ošìé/ø@äÓIwúNšÄÕ%è\$Êô kÏ'üÝŽéÛ-K™¼´c#öÊeïr"ù „Ç_jÂÚqz±Ÿ÷4Ù!VáU”¥‰H8I¹;)TÃY˜xš$FzúTÆû1®/Ô¬ðÆ(€k×Ê Às½¶Þ£’éÖ“^ótaˆ.d¿UBË&Xp™øòj½q ®ÐÛ,v¡~ — +$ÀõcúÖ$á^¶ûmV©Çäír +>¼ºv u.`e7{‘-W·Š[‹¶—ÊâòU4Üéõç¦í1…VL/£»VV¿U=È•í4d®SjÄ);3CèͱÃI‡ðÉ•"K‚KE;Ê«+¯UT8Ÿ˜¯TQæÄ6À°¿KS€³\ €DN-ÊÐ'°× äG~âÐDŠåüšèû³úÿäXÈ… 3 *÷y †Û±B 4P$È> >ºß^§ß^l©¸ Âàž®â‹Ó²†>*ã¡Êf[7€XPÏ`“$“q» Ü‚§×î]7õ1­Î¬é•–üŸ>p–øV U}UsE€ŠG‰u6%ý¶Xo%{Ñ#ε`xû¶š>G½˜ ™®]aqÑÉB–>ZýHHþ¨ páô¢ãA·$ÉÄcbuV W&*wË{Ý’óþ’ø¸ì’‡£%–®©u !¥h!GßwZ"°Ÿ$,.’À¥͵BöÕúðWÖ×.9öÀ…l–@~Ý#$Ê΃fTp…nr ”tGÁtíèú}‡–Á D'“¼ÝQ7±Mó !#Ò¯Šž2)(S5}“øvÃÝNy¯½XÚ‹@"P”Ô™CH“¥ÃÙž…ØÿSP9rŒäpøõá¿+ŒË=бç›xF6][±7¶7jéóõÊNò8£þ þšSÃõ}”m6þC]Ä—˜Pf%ö pÿÞšÊ?è~ãÆÝÚü<{U¼`*1=·-ÜYXò×þJ=ýúÂc?ÜèêåËs rõY¬>'WôþþK@‚8Á€Ú?qÔÞŸÉ…Þ›»ü— 蓤 ÏE[S Åa«8õ8mæÞ$¶Â1ÓL¸í¥¾óøzµY?~ùå—båîNºjZ`ºŠ%G& øÉ$@ØJM„ +^Á-~ ™+ß?´Á;£ÆJÅ6Ø[ý·Ú\Æ1B2¦T¯€ Õ7ú,¡tÒ(õ.«;=o.¯;”Ð, /!~©ñ'yÊ”YˆáÇÙæè¥Æòd׈LED>;³ìÔë>Dpîæµ +ê½yšüq_+‚¥æåP,WÖ)ñIó³åW1 —scáØHž||d + äž°‘5!“Á|&]!7”¥I^fòr"ø2ÿ¹Û;IN¥§k‰ž@oª(šôq¶R»ÈP”W”¤ï½õ¥…4l¬lR-QÅ1nTTñ\ySÊSQQÉÍñ“¨&I€<à~ãi£R‹ŠÒŒoG·e´D¼QQ>¾3™7PQ?I6*8MQQß-‚~ùÇ®ø£x7ßl¸ç°}“ýY +€L þ;渘œ2îÉ +Й€Â€fN “¸w¢½Ùå:‡úï`¼Zø!Wî8a.ü«ú¹<=­>*ܾ Ä--µžÜ¢· J‚v»¥3žø/ˆ»ð@lA¥…x‚ꮡñ‡ˆ2ñ ûˆîˆ}Áƒ@#Å€¥@³Û6 bêH9ˆëÌSiñ{AbÊÝè8¼ÇÍÝòâ‰,•ü\ÛÝÁ1z´Úμ‰3«½Ö¾Âz­ö1O„aFÛí¦íû>Æ>Õ¼,ù­ô¼¸øg©Ã´^«º:Ýò + B«oyÔê–<Àå#ÿziµ£®U¢ÅÞ™‡;í&P  +­¿#äg~GÙvþ5²vsîÒEQ…QâíÖíÐâAòn¿ßm­ºN†Â×bbIøx9õ¼¤ ›1Ý¢‡ú½rçöÞ×U§îù…Ó$~Ôœ 4+`{K˜×a·qÂQâñ’˜$8‘W[ö]øYxd :”Â@JÜ€›{ÑJz%—¯­i©O^{ Ô¤,§½R¯™LR–¤«t 4Ç›Ú$£) +Äe×Ö®_]¸ºpcíèïî½{7Zm^¿û¢Ý;ê/î ¤Qúkw¦Ãÿݸ~Ý®ú¨„k¸L¿ú? \‡ àýÚ.‰J€ðTô1@,tmM«‚c Œ/œÀ~v§ùšXžM,”sõ½ù3iü“B™L³n°•¿r" ð¢÷†3¸Â}½Y¼e7J\MÓ6¸RßNôÖ_œW€•ÿZžÕWªŒèùϦuõIâs‘&7|ͤoÔ0ûNRÚ*‡¡œfvèyÌéQˆÛ‰ÚˆRo³[¤i=¾žÛPä)©¾XàÀò¤{G´§³Ñȉ'="¬ q‚¹ fPä Ų±yK  Ö×ïדbY4ä œŒÁ¨zd1Ê·È™{|§ê,µ$ºèÜŽ‚±pMj‘§ÓŠÊ4Õ¿ª6†0O&"Ô×I'F€ÔS´T“WÙg·ê_8âT¬¨‚©R +­¨¨´L¾Þ4õ-Öné7I‘ M5²ÎŽ¥ MÌmì92Õ„ìÙ°hù¥°5"ÅíE¦f>{:NšÕ¡ÝÓŠ"ûE×SLÕ\ð=vÏTÔº“KDHˆ·9ï_xƒhÏ’ÔTW6‹Š2S2ê¨(ˆâ™”©w’Ù€4=pìž&£Nø+ºdqðTŠ~ÒößâpÉô)ð0é$À,(´Rhæ `D?‘¨Û4Tù–¬o»·ÓŠ4h‡j•-Ð :áñUdki)xáDl€4|»ì ʧ²Ê iõCyÒ ÐýÒK’ñ 845’^y)ÀÒÒG\„–zƒvßnûv¯W~Ì…Nßóøq•Ú÷½à1‰ª–·ÎÊCÍ0@ñR ó•|øè‘·Ô`äçþøúÔªÕõµ;++óËŽ60ÙK%ôÿV»¤w•äX%@5‰Üjûö,.ÂL#Ê1­=xJð‹=%À¸šßøAÕý;G´»ÿ… QÐü‘·>Øï Ô½¸Õcyð÷‘ïä¡‘ÑÙ‰á8„õ»PÈј2= «ÏST„} §ørYñb&‘úXº1©)*ÚÑPr`êé),D-©|ÆøIm 4t&àZFëIEÔ´’»ñ–¦V4¤°rN!õ§*¶DÞu#Æð„£ÿ£y³{#Üï×î5æu»{×þáÔð‰ HtÒó^ÀÂ_ùsíêÜÚ\2×SkšŸ ôä +*aê`Pª(zœhX7ƒ{€4B›ÿøq°aD1=èWa(Zþ‡áà³÷nSÂÒü&"vóãq½><>>þµCé8F³*DXÎg¤à+YþûƒJã¤pöKm:©p {R– éËÜ)à³­J¥îjëVV@Í8µî&_"%Â{—)&ÛÍV¶\å½`>g¥€•‚Ú(ê™ß67wGÏíŽ OæYÎÀ_ºi*E4Áv!ÿ¡oY„•íð²G”Ñ«J9LV +¿ZÙÌš¼òÞ[<‡Mæ‰H>ƒ¤L¥<‘+ÕþB Y6Î×WžÛÃéxML‚5{óGëM+Š´DEqÕvÃN‘Hý©¤XÌê#î‚d¥„O*jÇàŠŠr A”P½Ridy3Xl&L¡pË)R½¤L‰ EE‘õt]TTžg•fª¨$çž HÂiž| ó?5«.ÄÃ7¡Äoàé–$ÛÚ5Bbw÷ÅQ½2~Qä)U”UUXjb²Ë#ÏRQ·jq ·Öˆ9$U”/ÐÙŠz‡O#ð>ù:à5QX/À¿€ûâŒ=îŸR€ÉVRô§`VÿO§7XÎÛ´tÏÛLq1‰ jZnðõŸs‡B²:ð’Ü:ÄÅõ +:¥Kÿ¸¤ç{j1Sa+¸ÕíZöïGW3?= +‚5pøÚÕ1u Ä5c@?œBD­HgÀÍG¡ëO¹¬@h RH©J ÝÒÒ÷¾'²êû¦ŒvLÕC6CñWõ_D) ºàØú¾öüVýÎòrµÑ¬Ö³ÉÊžŠµ-OˆµDăÃÓ´“g˼FgzFÓ ÁI^/ž{6mõ×î,ÌÏ_)«â—;½ÐI²ÌÎ’ è:ƒ‡J«QE‹«{Òßí.í•û=ýû{ƒN)Ö@VíwçòÀÿÛA,WvRyߢŸ 0€þ¿Ü.÷Í-‡l©”ãÓC¥õÛmÚ­¯»&ªí’ð@ëÊH +WnY/Ô!…Âí&ÇùöZ¸‚p÷$?{ÜÌV¢ý½Rýÿ‰Ïgº„|!ñZžJ_ín¬pc­¶±½1͵¼àœå<Óè×d$ Ê^|ýÆóçà}õûµ»÷îÆð¿{gá»{ï^í~¾à(­úwÏôÀÀgÿä=„³ÝŸ¬¯ºD_1J{€ò›äýZîãTôÿßûX‚‘¢ Ⱦ6!—çæœï·€y‰€6ÂN09–>—(ÍŽx~?y~´;þÓ‹ññøÕ¿ýÏæz=ÿýñoNŽ{üòOãÑ(Û}~ò*Ïw¼c˜vvòÞž?ÍvžÅ(ï<2^œ“ñðø'G/~üsù‹W/õSˇcBqÂKR¯$Ųù,;°ý`|2Î_ŒÇǣшÖÚs®Æ„;>yy2³GÍQÖhçèøäå(¼<^ýæ?_¾åÏON@˜|t4úÃØßñ0'Þ‘(ÏÞÉK¢=yõí·£ŸÕ3ÀòÅ þþôòxÔœ/QŒÆ££ü(ãZnÈŸd@$J¡ŒÆ9ˆïå«c’DDÙh|œ?I°@K>âçÅKR\_'O`R3e±þä¯N^-j”Œ†ÇÖ©$OÆqòŠSÄýÈ6£Á¡ÑÉÉ‹<¯×›”÷·/Æ\÷*.<žŒáù ¢H´yÊSEýéOß~K[EEýöÇ/ŽIáóI·¢ÈÔï­¨àÜð4ÏFa0ñîTQÇÃ1UK̤Ê7¾øcÊÓð¡ÿᬬW6'•ÿ.Ëžüþ¿ó”§Ñðhä:Q„NESX'Èóñq3k>§¢8~<æÀ¨YofúÍž¼GEq'q’çã£#ë\Vx´;zIÿðêOÿ ͆¿¡–~{üâO„°»sÄ#àR ÷í¼VQùÑè8on>z~2´¢Ø=îfÇ<Ç/Oþ§ÖjŒ‡ï•U­'–*jôû +;UÔpx¼“mA,©¢¨¹ïþ ÿ¿/V‡Z»o·ð_œ + ŽÌJL˜P¢ïOtÿɈ @˳’Ð_¡ÑVãâsÞð°&d¥%w/–¤)u[-5Ɔý´øo+ø—¡¡(½'P€j ` ë‹ÂCx»ƒ_Ú À3¾û‡á¼àb¤g‰Ñû± ü¡×/-‘ÐÐJ]é¦vLÛ縈Oì‘ÜpÙw®½ž>ˆ1Ç=!ÚûJK‹ßûÞà)°¥ÒJàþj.\¯/Þ⢣ï€ÌR¯LûÒhT«wVBïÊOQµSà&@/ /€Ý¦Vèá55g+Ù¨“5'vEΟ‹¾ÁéY­ýûï_š›ÿiµ^m•Àô4iNààa·Üo­ZŒmÉ•zOÚCØë ¸´Û±$Ü׿îA2 +èO‡c÷²ªÎt@–ŸªËoTx[wû«5²/WO@´Ž¨~UÔ¶£¡Í¢Þæ9ZŠ`ósvK»Ù|tW’H³y ÓìæÏ½êiZЉçÝápLÅm5š·*õ­úúzµº^Dߨ³¼0ª1*WëB³;à÷Àd6Œ%.˳“qå*w'N§K›¹½Í&‡äe;OC‚ôÀƒMÇ™½Š#Ãì ñ¾Æº„dÎ<=z$6„æ£æ£zÅ ì c‡Ì¸0x[–ºðgrs³R¯×7«H¸3˜þzêݦÐ<LÒ1Í\”óm€ò†Íͧ:²àHCä‰{¢ =n–3 àÆ ®dE_V…Þ qÂVÊT!Äþˆxoʦ,õªà5I<”ë¤¢È Ô†Š’˜‰@Ìu‡yœˆŠj6ÈMdÇÜzÙ/³“úƒúATŒ&îñVòFnѾ@"M:ç9ö¨Y­øðÃJ¬¨gÕI^"ˆì)ßæ#Ä""Ÿ›Îú íŒ²Ï úèåYÌ‘hE‘§z£ùàf‘'òf:\˜®,*ŠxžZÖ[‘Éï–ƒ„øN|j˜µœEÿï=(vO)ÀéVôoñxSRà¿VùèЛ.€N²¨¨¥VŸæZ¿--û¨ØÒÞàið¹¤Uþ¨3àJ€\•±Ôÿ¹wC(£ž¢aÃ¥àÀºº­ÝÌÁ¾gÎwÂÇH‡µ8l¯?èv––ØïõZ‹þ>ç°¸,!:. P¤`Að\ï·{{.³CÆjÞÖo‘sž'Íáeÿ½K‹¨Ñ„GÜâ›\Òu[ýð'kÄt15…;++ë¡;†ÌŒèuÖØÔNƒöH#¢4¥#âÿö¸QI½o? ãÔD9M.nñ•:ï®Ýw¹.<ÌxÂi‚GÔÈÉ GáþËÒ€Z°s£¼¸ÚZDy$ZÕy¢;Eûðpµs8躤r{y8,³Õ§D© p™g"³ûå¥Îàð«ÃýÃWý«óSš² Š•òAqm˜hiázÐ+©¬‹Û7’žÎÛu@6´ô36oÛ‡tQ#„Í)þ@uÉáÁQŒ.¢$š.i•>FW§½9bètò_M?hc¸<#ä6jÙg®Qb3Ѭ¢­ ‚ ˆÒ¤øÂzt<~Êûj»3ÿþèàmAmÍ28€Æÿë@zí>ûGÇÃíû׿®9ýþ½ÆöÑ‹ÆúzcW@Õ€ÍÁ¸G®*‡PÑ>uI”µ»¯¹OÝ…=¡vw~n~Î^ÂrBÀ«i"ÀPÉ/&ï]ÙqnÍ­h³> +ÆEØÜu:²ŸÎ§®Šä^xé½¹« ã ¿ÃÓÀ ¿có²6Æô˜e;•w’êƒjµÂ‡ï×ä&­äzuñ’;•Ê-þ8y‹ÍØu|¾â á-ߌ CŠƒ…Ä>8ÂOõAeùææãX¾µÌÝ$ ¯XY1\Bä—­p ™†Ÿb$r6«Üý ¾¾¹¹¹^ß|@`©V7ÏdÊÓ&·Tdæ)ŠÈ8»EÆÑTª›7oVÖÉ™Gˆ!) OùCz*&ƒ<‘ê›{Óóæb…ÿ;QZì.ß$Ï+Ë霒é"›7—+õÍõÍuòD|éÄȉ!Å”dºyó&T*UÇîL2‘ò䯕qÇÁ8þàÁÍ›‘'Ä™‘I¦Öù&;TTõVVV¨¤¨)/¹C<"GVÙÊ +¹JÙSŒ(£â,jÉŠÚŒŠªþýOÿ¾Rùéß¹1Mâô[¹Y­¨;\¤ß°qœ¯¨e¯6ØælÈ~“UKñÁòòßE£¢"£He¾Œ€‡/Î~—¬¬þ#WÀô €ÀùéOºtr2uLåŠÀÏ(ÿë¼± `†ÐèÚ‚«:ž2á$1[_‘“/UFGH:©üÀÆ»¬QÀ.„}—/—ÁíÞ“CÎòߨÑkËÍ¥Åò|ÁÍÖ½r;Vù£ÝoÑ¼Ûø €Ç’‹ö¡½Î’ì ßZ,K„/.ኌv‚¾'úŽû¢=éô²u¹ÜAMTüiuu¬[üàÒ_C¸r ›ŸÇòã²-ïZ6_kT–›Õ«¼®wÖ›ctÉd½#ªU5ˉL,1b*IKkGÖÄöŸE'U6DS€À=Îì{£}þgi˜®å7~øþÚÜÜ‚Î=Ö—ÇÏ_ŒGvlšÕªk¥^¹  3Ô¢év’&çð˜ï ž€êìu{.BØC=§N1D€Š,w…T3N¬–­¨ý¯ž´ÿµÿ/= +­OQ’e2Üá£â8ŸÊ•- +°\rµa>ð€~ßêKó!ÆŒ@í*Ó¢xýå>J~ÀÐKN§g+ÚëìÙ;ƒè—Ø%B¨é÷iòá´öºúز×>I­®’X«.Ì_º4÷áµµj•¿jýóʲżµ^[oÚÍ/‘OÝý@–_U°n¢”mÜÊÂü•K—æWÜvj’û-¼ûO­XôÑj½º‚Ž¿rgÍ8îܹ##Lkwªkkü¬Ì8ÿá‡ó!Ü{åÊÜ•¹÷/½ÿþÀþ/ß/þ»ä}’W“pV©fB]qš•;?ek¿ù.|¸ðþüÂÜûýg +,”çÇGnf$ÛÛE]‡ÒD¹SÞJÔÀ&H‰öëð«­-¢RÔ뛞¶eÞ´°7ë4ìBV}«ùËÿÈuh¡+ò1$„Ñ–§{Øå øæMõæÏª³YoÖìh›9.x?°Õ·á÷áìfûj5Cà¤-9!€Ë¡òÖÁâºYß"zò”âÖ }FÜÜT£WCUç3O& œIy"úÈ“;¤Ï£ƒ[7›dÈq£Îý\jžÒÇë}ÂÕÞÄC·\ÙôÉ3ÙÍÅ¢7¡óˆM.A Îúú¦ÿq@?ß¼YhÚyöy3ʽÈSIŒ«¨¨"g©¢¢¸-¯¨«³>É7O‘BÄZJIÌþñæÏ8°ÕøY½i8™b—£¢È8/–ñ²ÁõVT³²¼YÿÙæ´F&µ)'r3É륨¨—¤ŠÚ¢¢P³&e\Ÿ~ÚüôgIe6#;ëéá«WnR±ä—[&Ÿ•1SQl¤l™<·šŸß¬bËŸ,YÞÅIòdnR΢¢$^¸ù7TYY'#$Þ<±i¾¬¨"O)ƒß)ªA®üø?¸ÈðV @¬xFâl€¿Ô'´¿ÈFÌ]$ðtt8iý”ØL«3ÐÒzÛ\-míQ]ÞÆ]C}„èX²6ø?èöì€poJ@¯Ziºìõi×;Z ¢e\ø¶õOfÚüÐü»äZµôˆD‰GÄ£ô–Á}·HÈ52­ßïU]'ç ¼ñˆìF ÀÒ__ú^©ŒÂÏ™°dtëÒR»[Ë]§Zð¯€Ù8»?™ßÉê•4*$ à—µÊ£ÇÿŸ²4WÔÎîó š%tT_?çmQ‹¹I¼w#œ™ÃY ±]d÷×Þ_ 5²Áýz¨eá–”çÛDöè§+Ñ °Dþ[u¤ SºP­AoÖã:ÃmÀ^·ßá¼Óÿߦ ÑÄÿkJ@µåúäÉWûƒÃ~7,8N²@©ÚµB‰”cIg…zŽ2‡o¡’× .pÕ}(ør^îp¹á˜×ÑÂö¹iµˆ”×~Ü£æƒCè˜ÐÕ@à‘Â6Š^wmé––º‡\ØÙÿ/ºgúþÿ3éHT<$x;¨8÷——ÞŸ{?\^@”¤cO´ž­7ÿVB/¹]@5%0!|yyþ +p:÷üµ}«¼/„ÏÍÍ ÊŒƒ5÷Aanà:þ¯ Ö,{A#OÐ?eìÿ}¡_¹Dâøðóé½»üB)’¨ÚþÄ8>äA“¢+WHëûü‘Þâ–wY¨ÏÚÃÆ‹/ìýN¿8~urrœ,Ç–ÿ]û¶ÐC“}ü§ÿõê„ÿ—ãñø9¯ÃÁèü* °ˆ6Òñ¯ŒŽö¹¾®ÏÆÏ4•TÎãWã“W¯&v4Æ£_ü«“q2äŒòƒú­z}ô»ñø—`ÁçšxùµÉ'4ÑÇÃØ|ô»c¹K¬ÏF®8ôm4 eüâÛo_½ÈM™Ý¶ãã—äì8úϳÒ3âø¿ =›Õfvòíÿ:yõ¿þôí1ÁŸgöé#Üþ9_£ÑÓƒ”'Ž=²0>ÿÑÖ˜À_¾ OcåÚŠIXó€”äiÃΟ=mB&H‡î@f¨ÈYÊÀºì qe;/^d£|ø”ç¬ó;£ü›¿ÔëáÕ·ßžŒÂÞ­#ÄÉñ õb˜Kɹ0%}›«n[’®¨<8<üª}6=—S„;PäV¼…\ˆOåèÑÚÓû²Óߣ¬ÓPP‡ñË7º"“â-%×r‡Ž5(/}䡜«ÃO“ÔÊÌbhqÊåîRù° …Ä€ J.ìpˆ’U|—ÃsøÑ§wÖ(Cb4$jpw7zívŸó¦V+¾½¾Ãq•n+ÉuC±¬QunÝùåõ[  ,l:öħ¾/ϲZíÎO×\IˆügO—uDÓå‹ÊÝ婱W >kk :qüqFDáðÚ{£\«E£îË.k´¶lŸÂšÖ¤ºv}áú]g=¾áŒå2HŽL|láŠRü‰Yqtò´‡ (­äøÕ¨Y?8ù“ݶá3ÝÇñì¡C2 Á»é’6Êщü”¦tTùåSåøÅ1”â¨ðú¶_—F~'¾…¿yjR b4ÎÀ•<ÖšËòÝÔâ4ĖŤ+÷#»£áñ‹W•¸wLJ ¯4GüýÈ™þ‡C}þFããá×ë'ç¤ò\îšx õÅA¶ùÿ™— µÚ õR°=@Š<™¸ÈSrãÖÿ׉ãß¿=?ÊRž†ÙÎN~|ÌøÇqz #‹ðŨYyP<‰ä)   +¹Ýýì¥Înäˆ<…/œ¡RÎÉÓzåÙ_Œ]õwx4zñ\F3©"©¢¢Ì×sô…TQù«¨¨ŸÇ¤ÄG¤nòXË}ôÑÒ ÙRQ TÔ(pôÿžŠznXDÏõVÔØŠ½Êcô䙊ªÔŸé_AE=ÍwŠLñlI*ÌTÄÇ+wüâ%•þ†©¢žZQ¯ /QQägô<*j×yùÈÍLEífGã“qÖÜÿço¼˜Vчô˜°ÐéžeÚÔyÁTQG¿ÿj=ùáuäï´¢\ÙhDýiLR8#¶ ãÅQ³²N8䉊ÚÕG²¨(ŸCÈD*À§ïüÉ'³¼³ yÆŠ€. +x*i§ýPôý¹Ðà-]a(„Ö7L¶¿S>D{ƒþh«…M—µ»iÄuó.hæŸÂ`ÿ>Z½^ûƒ˜( ƒ?Q[/pôL™Kã‹°í;„.„«œúÞ$ØÞ;i­PÑ*-™(Ÿ%í’’Û¥˜´§Ý*ï•oÇB< H!¹èªÿ&RD ³Ø[À|ïÒÒª +k§CŒ|Û}5ëw–?|ÿÃÚ‡ñi6M-gaØ~‘W£;¿àz„}²aï6- ŸääÍëóä0éÆöIµ1*’ë±cÜíPA¡ýáCÑÞ)èœþeíÃùmûâb^q BãáÎî¶ýÕ×8ßX[‹né–yˆ~ûÖ>¥R.wz«}'Þ‰ª±×m›Âá¥=ú) +æÖêíïCìktÿšÚÝC— Öã‚3<û½„Ñö"¤.@(E³Ž¢¢ô”k•ØÚæÑ  P꺉ªÑh`U•ÖŸ0I]J†¾_étnïüšrt‘„Ð'¡åãUÎw7Öææ®%ÿ<«) +VHzNks|<5ëU}¤9Ä 4+4“¶›ãÖËn༠½¶R©=Ïhùõ´ºØöauêqxB;<ÊêóñІïÈ õBlÜ þ¶v=-@=Åà€4à5Ôö«—ÒþËå aB° NüVËÓlö29ÓAmcãÞFƒ¯-8àêe‚±þ¹‘|Έúsi;F˜»w“hubkm‘8rô»jmt¨sÄ“Kc»]¼!“áWv†Å ³£ì@kÃþ<|®œn?;¤=>>Qõóñ¾,û}€Qzõf¤*˜úå§êʲZ9pé!oX<•*q¦¢$i¤[¶ý¶ðË1š"IÆFÍêî‹br3Eúf2•ÞU$òã Áòjõ(¡ÕqÄm@9:™*çGÊ:¸˜N%4 '¨ÇêqleBl0Ì×#Z§Z%KK+Ö†›ÔOd!òdu¸mEíüjT©SÚVÔ0Úž£iž,ÖiÑzƒ’*ªYÉóc˜Äî±Ó +êÒ¤DÇV”Q¥»’sFŠ6+õüH°œŠy †Ì‹›EEñ¾}iiy—“êé.=ºU㑟ɓq"ñ¨¯()C£’¿ˆ!û1ÿ|#•_’׾Ȕ QçãáîÏQËœˆÂ‡¯qDœ©¢¤#“§/îÉŽò­[›¯WT˜jê[Ÿò{_ÀŸ!î€}1-à¬àõQ± 0'4¸@q¢¶÷ÿO~ÌWì]äF؈§Öóœø/OÀ¬ Ze‘9t}ë•CЀ;dû*ùqå^¼º‚®ü†> I¶ôà?”Öètbå>ˆˆ¤­ ‚ë€BÚ‡îvfîŽ~DŠ£‹Kå½öžJh«×o}´HOàò‰žÓþ(¨›Â"¹tV£ÛÀ©ö¿w鯗ÊQ9i2©üDÏë +0ÎÏ••L—ð8øx8ê¼Ö€%æÇµ*šÓÕ]$*f$×ÞeÏ–Ž6ÕŠsÒÍ”â. ã46¦6R‹‰BÆCì„YŸÄd¦µ»NBs·v}þ¡q!Þ~Ï].ñz€ÅÎé»ó µ´œ–üëþ5Fž—ÂÑŸüZ) 6…S÷[€ w̼ץ0`kû1ªØÌ{'Ô\jåâr+ç+gú-xK°×ßãI`]ÛQ˜ 4H:åÕÕU®*\,r»´ù,.íYŸ:ú#¦–Û; +@ˆPZ)!Å‘J=ÀŽ&XH­Q¯Ù½:+¾Tq½;ÙóæJ3†–g»Ã#ò¨a pwøÍ‹¿¦‚¼#®¼u¨bé ˆ͹4¹IÒ2NÑgFjKþ%o–)1IS³ ¾qE䱑$Òv*õJLDŒ˜%âÿÄ>áYf£GjJM¸û×ñîögÛ.ûGD»ÃßþAøŒ !ºE| k½qìÝâ%GêÖF¢·j[“I¸eœi8v®W1ípä#2Eä>çÊi-JuRQQO΂msœŠ¥¸çNÀf#˜GT,ôaFžbïøÅ ¸ÛäñTk‰8¢¢Fq3B†(¶"[©¢N#T¥O&…ަտJõ@°ŸæÉ·ö43l¤h¦R¯yšdÊ9ñ0œ‘âjŸªGyVYŠ"è“c]°ò¢¢~ügð®ÝQãV½ùÜÃT‚Bü‘'×®ùd|>-‹w³¤W}Ö  `‚ñ3P_œûAø¾& ôéýŠß×ü. îÿ3€ `ËnÖSÄáÀa¥…ª:sò:ú¡âÛ0Ûxëààt²ôâ’Ï POÁzÿô]¶Þ‰UÎmû‰Ì{gççBå]'tÕ¸Áa,ü÷º}§Â»¤ÄDwööú]ûnF“èDÚå.(›°À#Q-–>Xüà{´úéÑD5áÁåõºU©úäììÔ8EÓÓËñYÑAld¶ciO^ßÚÖ'r‚­Oj<}hn.ý©÷…<öf£n7ôòr¥R]_¯7F•_åãW¯þtf%==>Þªv ÿ›ú» s+¹±évc(Õ–€øòzî‡ÀÕ¬f¹Â<ØY`-»ÎãUÊoo¯ý1%ogOì/—>’$À–_u÷§˜ŸXÒQàûO:ûTe·<Ø/÷cya +Îõ›¨ n`OŠ!oÿ ›Ãöüñù)Û `D\ðï¿d¬Õ9„ÁÙ3N}þ]'¢­áÂg+>Àýžý KTpÒîþBNR¸‰è`<ñÒbKoaî=+ÙØ°A±)³Uä›ÏPeÀÃÉ‚Xô€8‡|ÃAv{U®Ìײ°¿™É ؉Bî×¶s¶%Ü´QÛ©^Yû6vŸ8©¼íš—¦Uúuü/(€øîìý@|€ñ›äò À´QÙm¬}( å¹ùš¹Q,:êï]b+ýrº…œÙ™#Û.„óNb{Åq4Â& æ::¨¬‡Zù¸a™:}á)t%á•€ÌxW0š‡¯š·šÎEcå AËaØcá‹o¾ kLºÒU¹¦]ÿe}ekVØ$„Xÿ´V‹%ïv6GÞªW\!!Ó%u‰¸Rmæ‘ê+åN3˜HÝöÓl«Ö2cž¶·Õ6|³OÅ󋣺 kà…V—|ÅWÌû‹üöxøÍð‹ÓJ«G¾We.BLõY?>” æc!¨o ç{K¥V·ó$à»ß¥<V,(.Osz§Lj=þŠ£û²)ôy;|º.} ðßAtMHVÎ'9€gˆüÐiv–JБ=;eäpÜÐïÅþ‰D2[½ÛÐ §‘öA”¶å¥&Ñg‰¶ D´w ÿ÷.]»^Œâ§¨Â0éWXFipÆõjnw"…¤ªcCiM=l¸¨¹í»v£v凼ãÿ¯ßcÂÒê>ÂïÆví>޽-"o<ªÎ߉žƒ¬1„Ad€¿Àû5ýSE §c°žòÞœjx¸¼‘@HNt;Ée†õå º â‘Yø+»ÒàõkÎ- ˆà$ +îÝ$ÊÊ֗Š[/ÏúNuÓ’ý9¥ÚP`˸E£íb<·þFÎ!@uœ4VÂû€stÉáÛ^•o†Ã㣣’}ÆÜ@K³ù«GÅá+I±d³ÖhU²–¤ÂÏ4RY©fC~á/$2ã6/©ù‰ž j42…â+Ê9PÍA5¾­z,2XÄ4Í“,ÅÃÕ\nüòø7Nçx Á1S?IÏgÜ`,y£²~OíÔäk‹àÉ—æD›¢2äí|ÇÕ—µïOó´“­Wšã”§ü ¹a;õÒìPQd‘ôÛ8{P›­( fTÕ”*ʘ”¼Ë|Ž•¦M$ÿõo_@d"SÃáoÍåV¤G ´î©¨MîðMšÊ”àåpV[1…bwmÍ&™"Ñ·6)–HÀYÔVP<|¶”äð„žâŽŠBZuú¹µ5[QE¦RExò#Ú[k؇/UTzøt"˜¤ç3.wÚ¼ySóÓL¦Ì¢%ÊI:À~B.TÄwøG~ôýïO g-1Ùïüý‰ÿä Àœ€}õüôåÏy?€CÞÒ€Ì0šq€º (.¦–œN^Ý9ZiAJ¬`H?Mø¸ÓB_*µm6ôA‰&¸ï\*—’‡V_êÐ’±m +ŽÝÐZ–B©W%õy‡Bð½Cð¿?è€O€=P£gúa,6Çaà¿Ý+ƒ1@G|¼Ž«ƒ   K‚šRIˆ]ø¡KªÏÝpŠz­º²RY¯óºÐ ðÆå»;Û»kó¨äQñéÛI£ž8[šl¥*û2Ѳñ8àėÇ’殩Aq8ªf$yÆ–óüUîê ;¿Ð?iÄk‚ +cp¢Êõµëïƒ,iuƒãqõ9F8/°4TWÕP"y÷}NƒDŠöWÉ>UWl{å=»Pú;.t Ñ +¦e•Rä|´¤ÊZ€¬U¡¾3Ø/·!] +Ô6S‚è6åÇ«¥¶ ë±À”Ó,Ór¨êॊôÞX^*i*ЗÐ.ˆ0ôú{ݳþôH áxå^yñvÈóØ¿Æ…¨Ê©Dù"<¼ý÷._ž»QØk´àÛpÐYj´4»ÇÙz•ª°1 µñ>)?þ9ÿôIDATM1öwBAˆµ÷?ž›§\¯†fm§9àêP@ç¾æú>÷jÎлÁ[–š¬v%bÞÞ¸×Ø¸fzÈÂý€þ«®œ@„ÈÇ÷>ÍÝó&¹|#4~šòAR×>lìÚE±Pÿ¿ë*CÑpÕiLfô¤¹~b€âïT<>=uùRÝ»K<Ò´¾4Á¶Á äÑï*Õ„ jhÔƒb¬ÖÏ`4¦öh{b44o5 @~süÛdÆ*i¿Ô›€EêÆÆ#´Å¬¾RO=S+@ñÊéXi§»5I»nw9É+.ä  y»Ç>¦ÝÄò¥m#²EdŠ3¯T|AÜc^äÀæ•ÓD€[•eð5ì¬ê³.9ªä±ö»CÔÅÉý®šÏÏ5E7+ÕGö< +í€y&C¯$öTtÞj) äi£ViZRó/òã_^U”2ežHߨZKev Öh¬©¨(ó”–Lj{¨)}Æ[•GTTÄO&ÈËÙŠŠú±¢¼ž0²ü‘>l;¼®ÉSä)UÔÃIEEžf+j›‰U›"OÚ~8‹Š²O‡ŒEμ€ó'‹™Š"O©¢ÈÒ§AiR¦Ì’p›ûVTe}RQ»Çß©Ó<ý|¦¢&yR+¼µ;§2É¡ózí´fÞI>Ñ]âå¼àu €?S'€4p:VH±" §~€>ß³±=ý]L¼".B’ @å,€-½æÛh÷uéo;¾«Sñƪ||ÅÌ1*…h…@õ!G]Mð‰Ýì BzÌ œ€d¨MÒ²Gÿ‚« è Xv¦¸}'…ÒÅ [~•¿~¯Œ¶ŸF¦;)|Ò8c¡˜D>ìûeôþ%x7«wr7D`¨CÍUé5Öº"­)õõ*³zkùVÕ'Fo`Ÿ³Æ#t¼ííµ+4¼@0í1B»ÄÛ Q7Œ§²RÖ ÏHÝAfñlI<¹HÞ¨G|J¶·Gà¿Ý1"Šc’d¸€Ã½nÝ©ÆàòŒçËNK[¹µ…÷«Yb¾ ¤  ñÙ.êàutÓ슽ü`é©WÒ–c‡kùÊZ´ˆrŒü‡²îô]€8ê“Ð@ ¶Òà±Úº¦Ðû­ž³8SðƒCç‚8ÄMÒ†:¸·'\‹üÁÿ›8ÀuFú¬FíÎrC{ø‰ÿב5;\bH{‚‰4‰DšS,—Sla&ˆKØ~oVOûŠÃˆâ3‹ðrØ0ÓŒ«OeÎé•â{À¿RhFIx'RÓm»ÝXÙÊÃQow÷×Cçq7€oÒ²r»£Ó6˜¬ÀCp%ÌS…Yå«–Gö8˜"k‘tÆ šÂFœ¤QŸŽ¢wÛz7d@)Q‘ß.Ž ãz%ùïñ~‡í~gÚ©ÒÇýi{z»¯åQV­äá'¿³û¥F3£ pä‰â© QYÖ\Þ¨T›N#î$ +!1ã@䉨øK¸®¶n_¸ ´4l @%TíÑ#ó`šÉL,6¯{ƒeÊø™\!î¡Ó”ÀJÂlÔ'™âg:+¹yJ™bsnâí!Oß$Rsü¥ìÈLqaqÏ‚äÍõ[S›H˜MRž2;N+JNN<³Ë6Ê'¬);J¬(²EþMÔÄüd›©qýN3žb*êa6Í“mòô O%‘¢j OVÕ„ÚO¦¨¨X§i÷ù$Eä†gLq]ã&ÉâÈ”Õx‘'·¸ÆÄXWïøÏpþýô¢ŸuxÍ a}œ’¼6@q?p^ac²=ÁÿC\=65œÚçÅ#‰°•l"' °Ž>âðÒvÿíÝÞ. ·ÿ$îã¤<~Ürq@|-þàüR»èDö®ËÏsÜk :ù”ƒ=iVß–3îrjq{QM ÜÐßë/ú}Ÿã{*Žì: ÑCYTm –Ê}m©@1t~ƒˆq­Ϙvû{÷œýýê•¿¼2¿¦6qîò¸û0F­>DëZ›¿GÛûVŸwì3@gEe£ë•:oDÅ ®êÍÆ?7Ô±ðÃW^[·íä1=Ч¸‡@ëZ><ŸŸèp²^­Wï8Ú{ùÕ;N*þÜ|Ã;ˆ·ÛÀË{0„½pz­1"'i™¼µÚz­¡ÂFƒÒSù#$͉wEóU*ÕNù waâ _M'i„RÅ<b°c)gô÷¥¥ÕäiUƒXPc–| ?ÿÆÐsÌaÄ4èô¬”4À$…}Ô{"þÅv/å¦^w©íÌíö Ï³Pr@ÉþWÅóŦÃé !Ý¢A ÁJ…]»qõÒ}/¦Tä >ýNåG“«†a;ÀåA¢+ §Zi9i04ÔjóókIgW®PwþQæÕôy6¨ÙTìkWªU€9äîÃ{GÚÿ‘I=ÿׯ±IPWÑÕ ðžÞoÀé…{÷k~‚l×îè _‚.©{Â5Ö®^ûÿÌ% KAhÿ~Š´lxÀïtM*—w•`É;U€± –PáhÙ[“…ó‹‘$ ×›\kܼÕУˆ,Ö“5”8bk@d/àÊr}ê‡z[e>à6®ŸŒdT§Z}Ô°ï~ -HëÕeÅOB6¦„w)KÞH¦Ž!¦E„KhI”é¥:nñ#ÉÖ¯’@¤Ú=rQÙ¦aJ)Oh¿‰ÄdYýVuš§$”œYª¢°Utõýôêþë!D:¢ À!o€ä†u6OÚÇcµëÀoNSQö¤ž¬¨SIw dkô³ŠÎÜQ,”9B<Á;eO7«p»™äƒ¤UÂFâ¹:Š¢¢|ŠN+jË9›’'R‘P8ÕVQQ¦ÌGPl’¾õ[EEAL´!½þ𙧸Ëô´¢œo‰BI• Š‹ÎñÆyŽÄ¤A…¨ÊíÕ–‚ƒ{Ĥù)´¿Î/¸Çx¹m?TU•{çÒh ¾q’tc0úꪓâ0-ÑÇû;úÀQøYu§Kó*ú½Vt§R›[¨…Óçmë|¤´¸ókù†í°÷ø¨ +ý®ÅëðÅîÃÚÊ:¸í„0NÍ=MØÕÚø¿}R]ÏSoA^ñèúJÑʈ‰èÏ=ÝêÂÍ‚ò†”ÔÎuP] R±]‚:Y Ðj”ú<´©ùNyU°º$o°G'tû(ë¨.I[É=0¦¨—t + \ج.:…'¿Tõ— @M½Ry÷Û7*GˆÂ@`)TŸ±xf¼£8(DeÞ·áò¥k ölØìŸÛŽ:HÀ«Í›üÎÒbûØ÷—FG"»_›_¹/€‡ÿ¹_€¿ü¢vÿþÆýÆFV ƒO«Wbõ ø[» H¸„ £ôCïG®‘ªëSm €êß ×ïÒ¶„hl¨­Ä(} +vAÐ×oÔby> <ª¿à.þ'0ÙšìMw.§byWñe°Ó¿Bi¡ƒ=²HmKòœšàBfª€ËK¹ ¸:iÜòIŽ'ÿX[2/R².sMÀn¡}ÂÑú­XªþŒ,â?Oþiœ¤à :ŠË(x(oJR¨`âž}=RžH†à`…ó|åX j¯ ÍȈä¤-ï6S)Ovi¼à6ÕÉÓÕQm¸wbæ§™,$@dj*¨ö_p»Ý\¶>)O€óD‚gá'mdˆ¯TU¾Ûc™šª¤ØNÿäŽfŸ“s~]}±Ôþç0㢡w´êƒC×å-¡’+À±Ãµ´l½mîÒØì÷Û¨q=´8Átt@ßw8—ت«;ò­†Þ ¾ö´0ĹHW4ü’“Hz ¾¡q‚=G¸÷À}û("iîi¡`š*PS>¾0µ; µ »+×>¼27O+º@;^T Ϧ>%Ö¿ÏgíÆÝ•…|cã³í yÄÔý•áø¸ÑøÙÍpñ¯¢¢¤úSñ>ž?ÿ†Õu)÷®¬aw·xb‚]øø"1eF%n'…ÛiÝÆÝ˜‡n~aeʼnë–W*Õuž;žÉÝGY3Û®¹âìÚ|no žÿ¼d©IHË¢×–>8y-¼9fè/ï•;¥>[ ¿.½æ€À}¾cŒ^¬÷ì¬±çæ°Û>€)X8€Ž+Š—ª€Ä©ý§Úê[#Ú_zT„ BÛ}˜\«`Iþ3qÎêâ”TCK¨Âá!¬¡×öÈÙrçq<>›V·æ%M VkÙB:•ƽës09ûÌ®ep?ÔOͶ}1[¼û6ÅAøb;ñ²{u˜ i‹jËwÔ¶„)Ö +·Å/’ʺöI +ëÿè°–æ@jkÉRÚà6“ÀeTÿ¹ë—.Ù¡´¿I‰ø¨·•;LHð¯À¯-Îý᪠øƒóé/È@±©îŸþØå€Ûdù]? VOhj‹F8€dÔ¨ÄÀŠÌYìš +ÛK!émˆ‰ˆãWͤ¸‰•ÚÊQþS#4£GMœ‰Ú2Ժ؛(®-^†d3÷âø\ñ÷ùO²}d¯/dDSûÃX®6="ƒ† ïHPiÛ¿ý0onB"œö!™…LY X’„ŒsôèŠe2b”Gf(²DÈà–z7-ŠFŠ"ôF›éZžä)ôåÈSŠÔ H·ûs,Чq„Zš8<: &uR“‹Rîõ£‹` é€  –{òn ýw(:A–\×ãas +—»‰÷(n"bgà€7O;•s¹Ð#Ì€<{]^S{Dî­%‡þøÜ­Õ>ö`È}ÎòZíÖÕ+ÕOÓ“´¶vgáú_ÝÓ ðU·P, ,$¬~oîòŸ”ö7Êõ{1t(ü]±£'üU°ƒÁQdšÞG_±=>ñP?Ù)þø—\zO•RŒ}‡ZP–t2Ü&áÀN3Ìë4 œ/£ Ùž"wªÿÛ¸ngÇ¿ÏVùHskžð$I„Éë`'Mº-¾‘l\w#IÑâ*15|j‚k58·ïÛ6/™6“„—Ü ÒÖvB+øLˆ€éš|)ÙÕÞàwâŠféRü¢Éi¢&×[2»';€có´ûó¤$‡|Áy,ÓsWLø¡ŒfÀÔàož–8°åÛÏ*D„ š ôHoóz%;a ™)ôPö#MÓ<¥\5´ß ÎUÔ)dsuä­s£†fê˰”bp±‘gg+jT¯Ð{§õ4©(Ó^sëÈS®þ¦¢Vê“ar›B&Yðg¦¢8Ö¬/7'õÿL’ÓŠJL- +Å85…ä㨨âá :à5þÊÔ¸g¦Pܪ}~AE¥jšTÔ´ ÞYÒ{þš ˆ>ùK¿!ÉÀ?ºÈ À9Â]D¤ÿðÃy¶ÝšŸŸÿÉôÿR ¿bKò:ðÈô*šý(í1Z]gà³1ï÷ÛƒÃïQМ÷¿ßûmÖÕCµï…â†×ÛOÓÊ•Wi¿i´Ùì9ƬüQ«ïüîZRKîUbH¹sØ}rxøDƒ~{oɵ†@ÑBç}¶£õæÑFµTM@G§µj¯3Ûø]5~ Â9dŸtïñ^ðÄÑ´XË#¸sÅ\ªµå*ÕjGúÜÜÕëµû6 õBƒáy¡©àÿþ½÷Öæk»÷þû–Œ8Y¯ê˜»NÐ’}êdG†ú|XÌÕËu_ºí‚dòþ¥ÃA´0f;±´*O]ÞXñÍÐ5Á®_€'¨ÉÜÜÂOkYöôÀuÀ›Õ´ž( ­¯¯¯|8?weþʼKßp¯1›Gèï›hmý'õ<½¥Âñ^´Q­ÒÚë Í ®0©Ö*žóI’ íÖÒÞ °8è–{å´V’c=Û%-ØàJéõXX€sô!\;?µls²ßåÂÎÒêžG­*ëÓúÓbÃê›ûúšõgåC yh¨ñ°Aí:ÝÛzv”[1F÷ß&â„®×’ZY¦l„xImIkͬZI5éÕ¶­fÁ­;Q<…·QlÖVîÔZ ºóûãV8„ø D÷|c;Q@± ðÚÂO%“kÔÝuµôÂ0 Xk¸X¿}À¥4ŸA-r³V{¸2¿6 )I €`ªÛ§Ïtc²SŠK`Ékì]>â +Zel³Ka[àѤ¢fU*Uw¹†ÜòCR!{:*bzyÜ=Ê›7ù±«É'ìdTŽà%üzÓ¬ŒÏXfdË&XÇ/j8 ƒäú†xdë¶³!Øç$qÈ©‘§~‹H]$PÙiÖWP±ÝJOVzíS¢¶·óèÅSCŽ{L~þÀ³•Q òáóRãÓ‰þIö(Å`"Ff-³âó*©á 56RH"Œ7Œ[b%Ø7~­W„D=ü,*ÊÔ¥”ůP‰&¸óåi·Å+$¢<Þ8¡ù¤¢¬”o«ì|E5Ç›·¸»Ø›Çå9»Ho e"ÈÎ}0ÔŠÚ6nÖi ã¬_Q·×ÅÄÌð_äɧ ¦¶RÏí|QÜT„¿g˜¯zJp\•E_ßÑÏù*ò¤ÄÓGûœ¬O³rrÆ0+æ)fHìóÏ”d8gØŸ|ÒàÊd àtŒs?úÀ"ø‹ñ ½_ñ3»¿EÀW©Óžÿý¢çþ¬aÒ§ÍÞO(íÀR{¯Mkì‡ÚùíR‰#ûûå²M;Ú½À'  Á¦ý& Ûñ¥PÑ[®HoW}{µÕî?æZñr òwÃñCÈCçð‰ƒÐ9¸X"]ÈøBbðyâ®íÏhàÀ  ›Õö:]øÃ^ÂàËã ?ÑÅ´ºò7®ðÌeµÚX¿*fZí‰ñ2ºŠN(Pƒ¦|c~­‘~ûdñ +5b­Ò­Æ/]-€+£Ûðˆû|”k5›Ì‡¼ª2†Ì‰tÔHåW<ô<¯»_°Ï^$¯Á+ýŒs1ÂLeO-ü§}Ÿ¤-5o9œéàWyžÿ2Ž£©#b˜åŸ¸hÌšŽhæx.óGŸgU‡°D]@ilø€C#ª•Vš¡TÞÓ+@Ì/•–>rg¹\Z]åð*%+–÷ÈaÐ;Ô­¯õ˜Âî:Å_öÐÞs¾¿UyÄ‹* 6Øéìé“áÔCT¸«1wylZ=*Úá#Ô„Í'«ã MŒ– ÿRûÄäy6¼Ê‡¨{$1(€ì÷Ú·[ß|$^Ýlwg;ù,ÜEgŽÆòS·}I}U©ÖüYuÅ cî° J8ilB}¢Î2Gv +?±’Ž#g½Z«Þ™¯: ²âRý€»àóÚuÝôþ¯^s3Í4wyî½kAèßÄ"’jbÙÊ|ò3˜˜bš +yY`Pþ%ùN䵆îM’´ÖÀ~%JÛ«dÚ²Š+»¡ƒñÚ¤;ŽŠÂV‰K÷xwžk–úÓT±æEà[õ‹s¡á¦¬˜Q0m®@^O°õ«™‹/´‘7xÕÄHNPSîçã-ÒKÿÏJ„±%q#íæÙÖ2¸â.¹¶3τؗIEEžŠžoWŠŒìUce“ãÿÞþ®·‘,KÓD=€‚w*'Br8]ÔMª\HT"H—J`8TÊ‚¦PÈÊ•0én©`é!ŠéçbòjŒæZ*t~‘¿ÁĈfyjªz^s”=sá•sNžÆä]ÞÕOèùç}Þm¤>\þÙ…³(‘ö±mÛþ\ïZk¯½·O®ŸµP ?Œèç×,³Â§ø»˜ ‹ÕF#Sû °øáðâTÿÌFÌïo–D*$TD1nip…óž>G‡ÿሙ«ûݯkâÚ íã)†Ö&V†ç¥§ó‚~o ‘)~BƒÁ~oÅ“ÅÏ{?f¸éyÙ`½ý׬pÀ¿§ÛÙO¿Ä‹Â?¬À•ÞÓO˜ ˆɲCÁ„ R¬ŠÓ“ »ÝsöløýË8ühnnް؈ÕrùÞà§pN/ýÝ›¥[‚ô &*”}³ €5ùæŠå£ ƒòO™‚åm\˜Þ?ìÕ~¶Ú]íyi¾®ø7Ê"¦zø·õJAûvç^•Ú/8R§ÇV€îL\x1_,‰fìÄû=°Ðí¯.õ~ƒ»‚Ø™`pÔKÍdÔAÈáHÀ–öçlB«÷³ Ý[M?ÏǯÆÇI´f‹=½Gu¦V˜Tw[[›ëL(/®ë‚ÅXÕ+ðPPÜXXØj”$#w¤í³üš"@$ÓH 4š487‡-Ûfbôɸª»´,K^tޓևܪ–ë6'qöyñ¼4NAû:+ɲq³æf›nm8ë~ˆlØË¤ø&ÉÇIÚŒ–«Õzå§Þ˜ˆLÑæIZrk7ÏÛÍúZüÍSŒéxì?]]zúTuåÁ}©W$K©˜ûj Hlª&ÖzRM1i`UÏõž>}Ú­­º++ˆ_ÝÕš´zÁ¸Ïl¦¡Aì÷k½5‚ß°qœ«ô?8¬­ eùv5ùv·É ³´“²d> ›¡ØÂ†‡‡æ„èy¼\oÁù‘0ÒæF@3pžöò¤’ŽC:X1×^õFw ¦¥ÇHnx|Ý©×S{³ùAÕÖ‘3¥è¦îô3"j§ +ïE¦ÔÓìäÉÖ…óA?*rZ*O;Ñr2*n𨾠+EcžVÉQE5Õö]QÊ3å¡G“y‚îð¨ÏC}‘¥,Mò¤s!%cnA¡¹ÈЄK¨¦£‰ó²LATT²ãŠÒ™»ÑŽ·N/ÈYUTT4™‚&o€åܸô•©¤Ú>³½AE]T ´*°çfÂÐT?̓ª¨„ŠR– ú"ÅŒCžZÅ’kH«ý΃(˧n¾ˆf§«^ùb*ÕüºÉp÷ÃGh?Ï–³Hø·æÃà°P}‚îáG`/ÀŸ^»ÎøÑÁ­ýgö,¬3J—x«NDÏ<í +Â.Ž{èµüñðÖÙ#L«««ŒíZO\•ŒৈP¸-€W0=Â_ÿàðàPèaQK¾èÕöü:ãŒÍRòž²·0bÁû‡®Ï¦~ ë’i…»˜®uD€Ú(I³Q=9Ç +™$ÛQ]çlñJK§ÅéG Ýêìnm¬Ã¥ì# Q¿µÚ(`qëÓcìÑZ5Rx®H^œ½ðÞd¡Í‰§ÑZÎJm¢&vvi’ÐVÜŠ+ê xò€~XL@ÍÑ'ˆ±º’úøª¿iõÑÇv +ò¼€L1¨ï*HYÚf¼[¸0ÝFwó,*Í|´'Iº­\à7X©Ô+•ÊZ½ùm +§Ç£vT©&Iô´ûThÎ× ßë2%§@Öù•НUÅ<üÂà‹h°T{ÊÒAGHaµ§Oy®ÆZþϨ–p„9þÈöþ¡ü5QU…ê£-õ÷û'+Ý£ÞÁàD"&WômGÍl€eàä™$BÚm°ðÈ'=w_È"€Êckq޽\‚êûÅ‚`Â~Ìt›(1=Kú+ˆ’ä‡c|’â<­ÖU>Ø&]¬P¸Žl^¤ÐÔrÔø8ÎØ·Áºi¡Û+½ðG˜cÆÞí9áp‡=A6ÿ7ÓeÕ)‚› iÍÇé†$€ÆÆºÔÿ`Y°uµ¤ÿÿCûö°zïÀŽ-L.êÌYù!D1ÑŒ]Ö¡># žIºŽTmûχÇ0ÿ;¡ºßûäþªoø_¸Ï$v©ˆ¬F@h„8X£ &àr!ÔjªÙ<ÍöΟ$í¯yV÷e™.‰ñ*w+tªƒ4kÄ_¶6ï–]—Úló©ßD(Çb´ÕÙRµÚHÒÜ.xbZŒŠ1EPЦiSºZ4j¡ñÖîî~ͦ^Ô¬æªk¯ƒEà´=¼•ÎNg¨ÊE€ƤôŠÁ£0Jpïi·Ù£  ,ë‹\@ˆ èiþ$ù42%ö<û§‘²®À¤4K¹¯Ó MÍj½’<õkO{½Ét½þŠ”q¦ª@ÀW!3ˆ/ù@2»ª žøôií©·] l,8 ™U~T]O±,PÇ]æ°ßs¿ï$0"H´èªuQ‹ƒîªäƒÕöáþo$H\àM +^«±ñÑÉàäÀ/˜JOYüÌÃ…Ùm-âÐXžCIbu ƒt1À>ÊúUåš½@¹Ô  ¬Be¢ +ÃÐF(â0”~Ô|À‹{|­±ð¯?ª-^l,°O/€:ˆÀíÛlŒ>þ6º ð7ÕÕõ»µ•G•O^ +"\D/B…!~âáñËYqèËbÓ‹ºLV~|ƒTùåÖˆU¢í&öºŒHàâÙaó6hL\«+Òöi‹øœ*,=… +½Òá ΗI¯Ù®J-NEî"PžLõý_E´C9Ä¥Q²,S;þ¹Ó‡ECq´·›Ž°mÛ`¹À•Ý4·Õg3ÀŸ“Zä)èŠ:× f¨í\!B²Q¦ŒxfBÓ£Œ%›Ùå½ +òz€hÎvæK™âfGüÆy*$ K7)0•ý‰r½M€š¹TÙ0T³õ‚Ä‘<¶ …T_Z«V÷Uççó0ø‰`î#zòí…†4?[Œí}]ÈþÕÿôRñwKhÏfnÅT@sQ}½&x^)®hØ;ÿë ÎÍíF +`ÿŸPÕ¤Ö±H¡üo¨'|œÂx²ÇÖ~7«Ð¢ ’~sr¨×Þë"€°{°ÇUa×?]˜&Ñ=6þ5ÞXÝ\’ÞÙ­Ý_aIûš*p·cßÐvôSæÎ'l1©†y稜Á"K[YSÀ.s¶XOG5¶æòP˜ž Š4.ÏÍÌ”¤ú§ÙÙ)j‹–òÃ_ 9F€¥¢,©êWÜz}=n0g÷BÑf+Zó<ØÈÍR­­ƒšá}cO5¤,ŠF’ 1Àb/w €xÀ#õ‘euú¢[HNW˜ 4>z©Ñw³hys_!sE²@Μ)ÕŸI¤x”&I»¬U¶Ó¡$›þÏTÒRÜ»TÏýÕ¿]•š/@å«•/>ü_KØïp`œ7j½Úàåpïk1ÃÿÁ "êö$°û¯ýà .tñèw¦Š± $óÜHhªð¥îÃO‚¥g"ì;g&ª«³×Ú\—Š­MÌÀÜ5«¡6¡t­ÒT(Ü”˜…Îà¸\B5›TD ä'ªI!¶6‘û.h3nG¥8ߊ‘Êzô©“¢£KK/ß¹Ëz}XD|pG\Xãß$„!€O%Ú‰gneù`åÁ.ä)†‹‹’î–ç˜ `õÞèÊÛ»N™ÁwtbS@øÿÀþŽî}iÊÍW[,™–œ½ÔÒ(ËV‡â‰ƒ_6ì´l*¾MÑSØÙqZÝÉ<ßJ×ÌÁ‹Gxà +©¹³æ«€×x°ñ/ÞÁ¯Ó-R *±t—"ÙzÁ¨]­'O¬'$ª³1Ö§Žä øýÖüÌy‚Ú(– Ó¡þUÝXŒ>}ø ¥ÄÓô*»­Q*Ýw2a]Õ°Bt:á‰k¸")ý¸Þ̯XñMSHøS`jÌSÓý÷8k>ØÎÈ fh¤\6¦÷ƒE¦BE‹Šêœ¦õä;’¦«6Õ¨p†Ež ðºr¬@ˆ4z syfeâþé")䔊WRQͺj¶8’RùÁ%»V¶ÒÏ>»VQRXHõ¢¢TdV7‹·…·†Ý"ôwGÆÖC¼¤`ª(ÖH¤”ËzÂÉý“'V®ˆ2Iª:"T8óÅc„„&’+”³JòzEí<ûÿ¥$<—p¯\*7ª3sAÀ‡ø¡ðÞ‡B}‰GS €ø…z¿d‚ê½ ”$â ùÅ¡&Æ_¿;E° 0Áû®ùH ~O¾æò3Ø¡Ùî ðË:Átoæ{i}tô}ii‡ Ö¢×ûƒ—7/€Xe~žp\ÒAÿÿÉ]i›Kµþ}ˆµ•¾÷ žÃIºX* ×ë/­b)ö¤/Á@ LT¢ôÕ_oØÿúàk)”½Þ}ZC&©·EUvß•;Îè4ÎŽÜUÑ”þVÌî­ÕÎ/[[ë⣋Ò]- +(Êsæí&Ñ²Š®\ª®ã$ÁykK î— 7ÖEd,µÆ™UšógAg‹6Ò¼Qµ< ¢éýjwé3z>?g,̃Ýû²Óöƒd¤Ð;®@m-í—5g •vn#ÄU²VòèòuD~URì⯣qº,¹\1¬¸Tù!T†(«(cn"¤C@”@CÝÕü³x·Ö!BŽÓZ‚µ\RÉ£ì<ô7RîàþÑ|Bí G,³·"\(H ¦¯{{cSÞ¶FxMú|j/Û®£§.ò$M7Ibg8Ì÷ö¼¯‚þ¨¨¨ùÊ…­Æe¤Šâ–’ÀÀ‹ß4ŠL}›¡†èj‘+¢¿ZQéæqöŸšËÙñôü‚”8Zѵë®±¡ÂY`ÌØYáïJEIJ².ñ(ÿ’ìtïÔóŽÓ¬JTt +ém=Š”†zú¢Pä ·U6{Sœä¢ »‘Nè‹Ic˲óöró˜ áÂ”Š©“ @4|vò üt"°{ v~‚ê6°bÆEqd83Þàbò::T`søÃÃýÉ €d #Á?V‚Zßþ¿é‡9}ÿýþ¾¤‚Ÿ +/º÷‰^ûµÐ¤g7³`à· `¡¦W‡Åý…3裊˜$w„þàäH •¾›ççã,ø?2Ÿ²çéÔ¼*Ï„ÞúR·m¹¹T[_±0ÛªzÆ·ê1“ª¬Öø?`Ÿ>)`ÑZ,¥r«Õ9Æßi1{ }R-bK˜àÞgÕªµvÕ̪y€õÆnµÑŠ…þ +¢žËÚÖ®Ä<$‰?bÊO0ð§Õ晾 3Ðk Ò"Ÿ-jkY"Q”A2ÆA±j·sÝD“¤[­Õsqã/h³f ê jäøõ˜A]î3Jªh§É/*õØÃé`_ Ûë?}êi›6±ˆVWWX Û=ZZí³¥RÛŽê¼ÿkƒT{ÕÉÑJ­?xŠ0†ø§ÆóTUÄd•§¿A ÀLÐÓ÷ ÃJˆÔd×MÇ­ƒ'i8aÏï&¥Gh‡l$¡£‰ >ΡJncQªvyÁþûAš0ä` é<ŽÖ¼ &¡ÿ³_ýnhÄr03‚½¬Î@I(QˆCž¿ ª2ˆjh¼íÙ†«mÓAý§^.$ºù]Ã?p "¿n/*>EN;å-Õ’Ú ^âå! Emxa[¼ _ïMEVÞIЗ…KÞt¶“Ÿzó~æ‚‹te;ú½x¥˜­YæVºÇ6±ö·`å&ÈÚrÞ®cn0R\vPêv·ÐCw‹1à½ÑörÛ“ ¨çФywv£C8ŸÜ$Ã7ú@½~ÜF±MDÍb WU*oVWdH+?IhíŽÚÕ\Éã]»øìnfÃüb>_á¦@òu ËNõ7,1Ï :)w4„$6(ç‰ +°™}“Ö›¼ŸË—rDž”+2Åk +wiôØ8a 3å}¿øÁ*J€ý÷C* ÷¶Ï]Ü¡:â´sÖÉ~©{Å:ú˜qH*Aœx½et©¢.òȉ)qT”ó×ò|Mò]x—®Ä…ŠÒ1—q…‚üí¯Ýl|ü Ê•'eÿzEñfFM=y/4¬ì1ž*r½Mi—¤ö¦)e‡ÀAF°¼£WÂý VÚFx½¢ìkEEQF…à“‹íîªIOòãoª™òs?”Œçss÷^³,ÀÄ ü¿l׸ oQ {Å4¸÷÷ø'>ÃVp à¶0qýEGÓQ€B8y¶¿t"][Ê×!“ôu²ðeE´¯21³ÿ~ÿD\¾·Ìaá9ëÊÿ/ùbïxüS±~̵¯„«µÃ· Ò-ËLP²ºý³ùjÝ•þ!SÎ-ô.Ó‡ Rfå¡£ÁA–¾Ë%ç³›¿”êhäYò´NÕ®:‚ZD`ý¡'´îí©5­m ·67ÖAí2‹È§êê¹À¿.ÚV3d’ÿf—Ìß¿°ª`UšÐù¥êÞÌPmc=/—!"&4ô%âw^¬›V\˜:éî2¼3–§Éã,ÌQÿÌ1"K<î!ÌÍ7@ö$9fìÔ¡ýÔŽé +ÉyñÖ>-‰Ä_”Ü/;¿TŠ;êk‚ÿ¢Ï¡ÙÁj”_ýµ¿3N¶2UËSÔw†WµVØ:)àgÌd¨þª¤·î×\}úŸµaºÂ<]yŠe_5)ñ€Ú²OhO·XÜGGµŽA¡àèÄë2°Ô«áôQS“À œÂÿÞRWb§NNÈ Ì4-$Ô»ÉÚ×é#årº©ÞØ DGY¾]gis˜ƒˆßuNϘ¼%Nukç­|ˆ§ÄŽêÇ‹²ñž‡.âu›ØÚÜÊ°à ¼!ô±€´sþhŒ0À¾Bž·÷vÐýß&,†¥) ‹PWÂvÀ’xÁâ⢙ xWF˜x»02?ÓCÃÄNÕlßë5c• `‡b©¾¬„­4ßnž»}Y¯”•cÛþeÑávUÊq*ŒVœ·«;LßW¨þu¨^¡ Å°¸ø/÷Ò¶~pËcKBr/D()Ós›¥_çŤrœTëYfüO`ÿí±á¥)¨$ÂìËÎcƒÎ ‘DWýFiáØMGý^ C’¿>¿tÞ•ó" +Âzx»o›õ쌧ýÏLBBºa¸äÈÒCÂèIϦÕñC¦|çzž(™N-'cu@Há³c¶÷Užé©]ý‡Š +™ÀÓ,ŠÇ¤íREẠÉk +Æ´'Õ€“½Jñ½$OFP²ãðéP¢BЉ_Oﺢ²íef#9µ4MzèB¡¢tÀí+DÌ窨ߺšLíã|RQD¨6UT”êBçj|/vplÜŌ㊢“aÚž1ôÐZœ)Äè9›ñ~2Bý)2*•pˆ…|r4ÞYvE)˜ èb’"ðÏ43n†+ïM€9P€Ò>zX•΀àáÄ`¿‰à–ÄüÅÆÄà¿â¬÷…©0ý-}l`Ù~ñÞˆ]èž<g·#<8<:ÖÆùÜýÞšß#¿‚_"îKg5δÆ#\u)È ÿ=€µCI ‚‘^M|ýH‘ˆÍ Žö8zNÁÀ.«Ëô¼OÍ>‘?XQ†Åh˜`·„Z—Ø{ù±ê ë•JµÉáq»"¦AA³˜HíBaoO* MHDmæñÏÅUYqgA¬¹,æÞÆkPpئZëOQ´Ò†Ø­- ÿ—_Š |I[`aaÚ§x>J_üp¶ÛÓ›IYšáN ½•žŽÄômGÿ¶ú3_Ì5EŽlW“NʶÏl.°WžûHq•ÖPt¥íT§Ñ zÒYDÐDi^UW³Ò‹9#ÏJ¯•´ÿe A’L] j.+ + ±çg¿â²?è×ÐÏiÖ +«k«RÃï¯Ö>)æZ˜ª7IŠ‚ó}=±Š·@—‘LA½–t¯ Ù±¯€¡Ÿm ð÷¯±/´D¸.¦ F½ÚSÅæ¢Örˆí_B¤¿Bü§æáj Tì­œÅ;w Õܨ“Ÿàl£g÷;”º=ÖšÙ¹îF£óüÔ+0ކgø/çÿ8<½È½áyþâ|E4"Q¯iO4"¦“A²¦¾;cñÐ<©ÙÍV?Ó¶o˜»Ü¥ªsÇ’lÄ5uî;sw‘ã ÿo6ÌÅ{Ã,gUõ`̨VãÓÌ‹U¶Bëðlǽ­ ‰‹ˆs·oÏ%á= Nö¾ŸtÄ&ôJ:Y°’’gß$ÑK¸§Ò sÔ½SPGÃÂ1†#˜°š ,Î:Êêí‘˦¾ôÁ÷†8ȲØ3· œµY 00a TGN•Çò¡³ï;‚ ¢o¿ŒëŽ„ÙeÏ-(a;Ë~«J*87XYìÙ§c?’·«#Á@éXl°ƒw6âÜ+) +«_ç@4Þf•NŽÈ —É/©y¬ŽGEä yŒGjÔ..èeÞ©°fÊþ ^o!ž‰ +ÎuaŒ³ÚF[N…<©Ã“'W”^lŒdIO§_èo¢æ ƒõ¥<…zbµ‚‹Š¢-ëéÉ—íeÉ)Nã$SÔ@ˆfRQÎ3wîyš°¡I¯¼+äT 3}wç ¹¹VQâ‹ñƒfá*Vñì(SGÆ"OÔåB‡®“<â´8S¿t-%dò 7>¾½RQd–¶iÆ©aËè±åº,¥#ãûª$i²YN'ÇV}wÓÂX.rŹòit`÷ »¾¶«­/‘Ö‹wçæåeűÓn«%ƒþ"håÕ†Ô»M {ñÝ~¹ô³f£ñ©øüìà |ïH %ºPÇ3?š .žk(ŠÓ­lx~þr<1OaÚ†”Êüq…)0q"vÿ™1D‘QãvD Ý9fO´"<#…6„A`_ÿê.ø¶«Êu†@2ÝßÔ/Z‚˜PD!÷Ð>ùh˜FQ6:ËϾ;ûr*¨«kž_±ê-1Ü×ëw}S"¢ñ~ÿèë•Á FR=¹vö%Hàó±Ú÷²€]|AG]›úz¨¿z"1’…¤ˆKÏö>Á»“ᆀ–$Tè¾ÍAW%€"¦Dh •¡Qž›iÌUãÍTÀœf⺧jÊ’¸ÉPÇ1fœB\³Â †‰N X¡XŸ3U$½ªÿbœ·³6€&Ošj[p¡xä¦)Ý$£µµÙˆª¥dwݪ^ + 1ƒDD¯6©Q@·Šßf¸U¦–2–ˆâ8‹ª¥ˆ!Ô0 š_(/lü)1NÖø³„A# ?Gáà-”Çã³÷þŒÃâé³—/†R-)&»±äé8iŽ‹…*­êuҕφRÃL’»l~­Èl ¸¶°ò›ª +?g߯’KïÌŸ’hÀQ +¤“Ï™¿iÄÆ)-£¢5XsþCø&Ò†Œf…*SáÕÓñã°D½¸º¢–,.!ÐÙètÎÏ^Œ$×(¥Âx^š·—Ç` òÃ#9™"O{†•Ó¡dG"¼CXö^5ë#½sDCOËI¥¬üZeß°jò(ãv”Hä{–»s«1¤Rð¢kÙÙYGÑ㲂èIq‡BNµãúr4.ä ñ q«½Wù(*jü¥ÙS¥T©dÓQ”ü“™– Lç‰õýuŸ‹bº#P)`€7Úø®3;€¯p>~`'P»ÿL!èè×GbÁ:í°;*¼ZOw1âŠ5¯Jgaè¨0מˆ=÷<PK;da€ÚàHjýþo¤ÊöÿAаŸ…Ü?YVÿÐþþÒj÷™^ j`?¢:üVjƒnŸ-õj&#ÁÀR_‡¤†ØdŠ{~)äi õÈ[e ©©âZª&p›LûCÿ×­NyKG[[ÂñÜ™jÜÎŽQïxÔ}8ªÚ%¯™_ÚPȰÒ@&šwoîUÊ8h-6Â&pxiÅéz£TªŠ‹W«kkUQ¥Õ£¦CÜ\I— ¦7ÊÕG9JúãV¼µ oxÀ9/ +ÇœlgÁ>¨`€ÀšÂ]Í„·a=ÇÑnaOßBqs’ â(Œ]T¬Ì:TŽòD"@–ýÏg^ì«ÕÁÆÓ]•¢¾øÛ öôþŠð=L½Ô…ÕU<2%Ö ŽþV*¾º'é GV4©YôV@~Õ¦å¸n#j ªØ“nùðð‹6+ðcA?óh’B°ÖÔ…0èV\¢ÊråÚÀ¬í-¦ñ  TY^[«#VõYþiûÎ%ªV…ÝM¦ŠR=kkº¤5§ååež^®ê`™xAˆ…­Ÿõcúøc}ýtöãyú›7â˜ÕßÌÜì‡3"vsdPÿ!4Sª°ÂsèÝ%ÅÉë|Xš›S̳úQüEðNpÙ÷ý¤çâ|‚¡Š¸ÿK}K@ÞÍFÿ2n·“WêO ßH"Å(ÇJ«Ã—/_êôì%nh¢üÅK±ñÑ‹g£—< +a¥°çߊõŽÇ´üd¶q~>þý«WçãñïÇÃ|4H¸kn àÎ;n¶³ÇJ”°¤9‘ã½úãþøê÷ߟ砜±|ôýËóóóñqÒ\®~ž·Å +@wΫ1‚ç/É:ÈïF.žŸgõÿ¤ì‚ +#åb”ŸŽ…z§ceJ¢J!äIbÄùH½f4ÿåãd;³P·`BiÌGç, .[ÙþO£ñw¯^}ÿòì÷ç/NOõ¢i²]ÿ;AŽŸ@Ùd³BåÏ%2õ[•êËÿ¢\½:õ" ¯Pøt|N¦FbzËì?ªWðÈHeª¬Š[Ðá+ÏÏ_("ŬÒyÑNÒsŒ$­¨(À´¢&T®<åJâèìÅù_Ž–UQ\Õÿ±Jt|ÆÅ»ô *êÜu>>•ö [ª¨ííˆ5—E%QSÏ¿ µ—½øÃTQ篾ËÍŒ]È¡¢²$ªÔ·ÿ©¨¨tDE©(As¶7,*j4/#òüÕyv©(ÇP Iªé|™‹Šzq©¢ÆTÔ UÔþ8ÞþEŽ üb8TEüRò\õ4~©ŠŸ}> +¥––lGé7—*JEà ²"SÇj3ÿå_þøêïý)ß ê¼$€bÀ% ä€ë>·nߺe À½ª×po=2@ÃeßÑ©Eƒ[VÁÑÁ§€N'ÀÅ(ÿÏžíÿ­0«ü /E\ÙHO;mMüøç~‘]ûxìD"AW§â㫟÷ON +ËB¸Jë£ÿ¤öT\~UÌüˆ7H¼°T{æ… íôïq…îêMýþÂà@†Lžž¬ÖÏí4†7¯I;KÑçíØ¨ÂEÕ‘Ci¬é–´.©D^K·ZYU:ùÖFYœT…Û 2Õ ¤°|ôy£¬naãÅŽ.Bnð(p1F+ñ`Ô¨NÄL +úûùú[Æ* yºµ+´Íh1_â`øˆÁKP"…émœSÔ˜‚íK±'@à €;y$U†u2 +  C’¢„…O§Ó0¤©2hO•PËÄ%ü—掴ÈÂhÖiUkŽ¢Î—êFÎï:ÙÎç‘Ä(=ŠÄ -á°hK^c×`6` +€%€K¤UîR×sEaw€®~Z †›§O©mö +h5’ú}öq`%©ÞÑ‘ž¦méeø˜¨‹ è>+3Ë䊀~AÙöƒv;^+±À^¹‡(3ˆ,NÆãdÛ’ S0¿°-vSÈX°®Ã~ô•4Cù¨¤IôÓ(ITÊ,¸,Š%Ô­­é,^«ZÜ@¾[UÕiçç±ß•æ«¥ò쌺·êI¢\ ý¬ª³àwžŸX¢F¤X›j&ÞÁªÃ®ûò{¥[’ˆÔÃNŒ*ËÂô(œøàòçÖ*÷þ¨pâµ :;µQˆ¸œeù7ËËŒ¨Œ¾y.u' ¾h—Ý&ªSnþ„²ïÌÛ•íäÔÍ%j6·›‘^¤r§Î$‰[Tµ·+ǹ«ˆôÝŒIѪ†¤½ÓÆ N7¼$›žä˜o½ZQ‘–ä•åvûsÂGŸS§æ ©ŽE¦°ºµÄÍæCÏ•ö7d +Ÿ¢6‰Eù*:ŽS… h'Úa0Ô_^ÐÆÅ`B¼y›î+š#þºœ¾äW1þ¢^ù»'ÉçÑçÊÔ6©L2‹u A*äÉ[ê9᪨üAÝ5bÅ­’â4¹¢ü¢ÑêX=#O$ç—riêI>iщr,qŒÒsšÛŸWŽÛ“ŠjRQ®'q¹iE%êq8ØøŒatºyJ’¿«ÔÛmÊ@µÍ ¨–î( ™R2•/«7ï<>þæóÒר(½\ýU U™u×DÑ9Ñ*’iE-/·Ýø|#ülKpqE9Oäþ‰+*IûÁç¹²@7˜æIáÍFB®¨÷¦¹ò]OÞ½°H˜Z˜ˆ`: àŠ€úîíÆºȇ1£|øÖÕâB¸ÎK·‚ùX}öl²€Ïg"¯€Á¾nw¥  NŠiy\¯y´]lð>bÞV|BÝïÛ›‘|)‡ƒ“£Á‘n®² ¯ýDájŸ1„!G'GL³ÐÕ–ž*BÞ#É 3€.c:V)ý©€I Hï¨VËâH*’zPR€bØDV/nЮ ×ÙßÅŠ¼X—‰ßÝÏÔn’J%FcçÝòÜÂEËpïAjH³¸´!hLpÚu „(¦íozö}– Mð¢´É¨ÁZ:â4{ä3 £ããü·y?Q›ª×·¥r~^¯Hžá’™lº—±–̹Ûa%@ÚbUÛÅTZ’ÀˆõzE‘v§^òTWÑû! +Šê/"\®‡"UúBp‘­euÕS‘§¢Â +rE¹ + (âà"™WªI7]Œ!SkEE] +íXxóY]¾TQ¾§Uà‡!eHÒˆ²Ië¢ú”x¿!E¡‘)î¿ÇgM ýÂàY/Ï(–˜X®ùHt¿ð0ØO¾<' |erÉwK·‚o>*üÔÀ¼•¯_? ~¬Ãé¦4´£Ciæú#ˆXî~îR.ø–V¦ +ÔÑí-Z0¬ë½à…+Þà°w"ruÿð¿'…a%«ïÀ„Šù™˜úêRÀ¦>Âyæ’tŠþ¯hõnÁ…}…}Oó—nÂ_˜°- ™ï ìÅùc6çþ?VÓnj³=ž$@¨4šq+϶ŒÏ´¦ Î…ç/ËJk©tþ€ÿVÿÍ—§ËöXë–¥[z4‰t&Mœµã·ÎY(M‘nmĘ „*Ha€ðxœçù9¨¢'v¶½?¥B$6î!èIDÆÜMD@ÛõòKľ´žAðÙV–­!Øâa‰GôË–‹Q×+QZ,@jjeQS¸*×ááxô…÷59e°p|Úa4 #ÜEó¯ý­ên¥¶Š‰_•ÐßÕÿÒר}h(øª¢¼®·¿ªûBvF0m  òY5H!~£:èÚaÿpÀÌä ¤À¥.­–'X?ð’@ö.hïyRÏFi¼0w»ìµ”Yã¡Å˜‡‡m BØ/ÍØÞÁ1"^ž'õô,/BÍ´l;AXvöö$:ÿçïqJc©>®oq~\ýÍ` *7ª‹®uÛj£\š¹ÇLÓݰ0ëöéOĬý7ÑíEµBU›JH’ÜTúDî&S ñ¢ZýW˜øÆi€„¯‹§Eý¿/Iýs=ɳ'Ùô2 ¢ˆ’·ÎŽŸçùýv¹þ9ºjÓ·:„¸ñ¼:;¿u¤Ÿbm ͺ½³ÓþEýÁôOµñ¹5¤Š=±±¶Ý–¦ùØJœÞŽj'íãíÊø¹5P¢@8vßu|˜iI‰õc)‘Ò—Q\ƒ‘Ïbp[²âyûÁ7Ù“'67èyGAº$(J»”4x\ Ûª ‚ë–½ƒôžvjAÓ&õ—g˜ïv.y4û†ÈõŽ–ÚªüâøXʬdÇÑùË‘²òD™"M–+g¢DRaÒv^9þ'§Çla"°sÒ>ÖÕ I‡¬¥¶š„ëí PQãe)æ!OTW/WTžýâA=ÒszÝÎc*Îy"5ö‘aðÇU”}ÞBE!â¶IÔñåzvìwÅÛ”)**m?N9wE‰Ä–Ûy}y<ñ¸¹¢ÐÞœ©ñŸmç$ÿRE%Ëù±šÂõŠò þY}YϹ®Óüy¸GEéPQ#UÔØE§¥L…ŠÚi··+*5ûûågßíDâ<YUEéû¢¢²ãÊ7ÑqpBßïÛ¾°€úåF™YÞéf>¸_üù'\œHœáX8èéo2 +h‡/Ièñ¾„þõ!{û¿Þ‘W„~.È_]é Xîm_€Ì\~æm‰¼\€4»ŸIw_ÅF —õÿž‚Uìû½Áo<Ìküûñ,8 +ÛËýû(ÔII¸Žú5%ÆÑ +‚¤2êHÇÇQ® +@£u™h&¡E‹'3çñ•²®ê+ÔvÕTGJ ŽÕq"©Î•†0NмàiÚhƒ¡ijÑÝNZ*Å…ö¿»ûÅ=…RƶðÜÓì±`!«VK¥ùj‘&Ñf¾–§‚qq¡Ò.#ÌPÜ4ª0-†©‡/ÎÏÕ†·«m¥>jTí™™ùÃ16musq’úvvnw½»°,bðŽšŸó6©š,’§ÑKA~ëK#œpèGÍ>®/'£1‰í*p=©deìÊ*`8ü.Ë…tÇ/q:ÓCYg/­öjKOŸªæðX• :,ä€%&jö_¯HÓG}— ÀàÐ!Ö.Æ ´ÿ§ªRióªõÞสZaX1ˆy~’K™,ÀJlú(‘‚–† ¦¡vxrUp¹]"VŠc! ;å…†@Rx©Â–@f¿ uç2…#á?=× Àw +ì2Q¡ñ ¿' + +¥“Å•9–†ìt 1PÃoÓ>ÿ"áùá¢ú¬.4ʳ%vVg¾~ÐÅ?`ξD€‰ÍþfºÛ@Ì”°Y“¬ôƒý¬8´±¾¾¶l”f抙(cXïïê_øL¦'Ø@Þ›Æç¯¾ÿ—ó³æ/ÒüÜãç°Ä,û'ø¨ØïЗÎÏw>gGôÙ;+W‚ÉŽÎ?¯ÎÏ¿ÿþ÷çŠìl8ÌÏFùó½¼£ÈÀÖÕQ²]ßÉŸ+>-ðét΂ Ðyqþý«ï¿;^|ÿÊaýBñüQ¾SÏþø§sÆ´’áÜ¥øÿOcžÅ(M¿apþx¥ùÙÿ®„9Szã«W£v”eãWßZ2$O§ ~žë‡hFÿï,ZŽÒöh$ÜÉœ'²¬ÿ<ÎG{{óWßÿòûï‰ë»Ñ(?=Ï‘9‡Î”’úûWíí‰`w|>øtö†ãïsûõñr>¿ú~üÝ+åXüŒØG£jrö§ïÓ·ß*5Œ©ìuÞjþ¿F*Úo G¸Ç[.TÔÏÿ)’Ä¥Š2’)òDE¯¸óqÕ“ÇÙ?_T”¡{x¦Š**fU™úþl4<«¸U•K˜jçÏT¥ˆŠzAù 7íðb4â—Š"½BèÊ·ëÏÿô_\s®¨Ö.ïä_Qè‡Y„*eWTîŠÒÛò=Wo|õê?¶#5­WN«Ò ž«õ`´t¦FÿÒVEµÛžýMEnï8©QQcåI™"®ñPI ¢Ôø^ŒCžþóyºý`»¨(ò4ÄQD5T†ŠRiŒ_¾:›TÔ7ßäËéwEEB“z7Ýbi× €g\± úCFý›|.[Dà{!èËÏøž\c€ZK½ga_W«Ï¯Ÿ=;°ÙEí냣“Á@2@±úš¿Ã¤-¼wxÆú¢w>,¬ŒúöWÅðWYÐ.vßgOl÷ßeM9€œõàºl- Lˆ© aö¿V,¨]½ªp´¿Ò;´¬0Ø*}w¨îÛÍv€|¸¯Hð*þ,JЛÒÏ„–¬ö -VÁaì8!«UHùMØÏw ¬O›;#¡÷†ø3˩؀d‰¨€Ü .Ò´<»n>œîn}!–ÌmIøLWõ~anUfKs¥F”îæuÂÆÆÖV%“º¾¾±a%θã81»’M€h}pQÐQ©¨Õé d¾¤ÖQ*a­[®V·“ŒœÒŸE2ãG +$4â©€4Ž$:çî)[»[ÁíA9Ë•Öz¢÷9»£(:ÃYFº2¢„uiçlô¼¹c›ÀSGzÀZ”§µý§ýÚ +ë-Ûp€_]YYº/‰à“PÇVßÔ X¿ A·wèzG­W[Àª¤ûžÒuÀ¤CVBòì­0M$õ¸Z éäèïÕ¨ + ÀE0¥Îp§Þî¤ë IÖ^ÓÑuåüÿ’é°(y?¡ÜÚ-”+YöJBKÁذ£Êpqtp)Rÿÿ÷:ÍJSFCàïQqÃ~~DÔ–¿k’È«ÅÆ¢D*ª,¤Æ1´˜y¥>iáô7ÓíEìE&·7Z™ˆÕ LÄÛ¸{K2 ¢$Fëû¬÷;ù 4=€|ârøAt:Š’ŒsEö¯¥í†V¤RÓßÛQ”äÏÓÇR(;øÊSâ +¼«.!yK%ØÈgÈ‹°‚Ûé·;õz"4qF‘ÒÌ_ü„ÿ "f§£å4ïàÒE¥MâBì§Ûë¯eý²ÒrŠxuÉyZ?¶½¬Ü÷M–š[ù¨Yo¶óÇ4 ƒ[‡"Wž²©=y²ô<ÉSAz]~Üd'~Ïk ñä‰9•u¤?&œÊÛì•„§[!£ÂÙEHùã Ø ó'3+P°Èþ(¯§Ç…û%å&øCnPYöÇ´¾½£4á ˜£…¾ Xw™pp¹¢˜ hBdêøˆ-õF…ü _Ï„´Rç“<]TԈŵ„Ö¼’)½Ñ©fFÁ¤¢ŠLé*Þ[“X¾KêÙ†EX$OûçÍÏUnLˆÀ{äÒ£´M.y¦¨0åáô"ÉÔ”Èíí±4;/ +4‡w|ÔOo¿æШ~ôan²¼æpɸë?€z<Ì(Wïáüâà*ò'áÈ©a€2P*P½lÀóÿ×HÖÚB «Æà.·z¦€Vâ'hç,/µ ÄG@¤×>1H íÑÿáäŠöPjÝop ì ÃnÿDÈÎò/GGƒgƒ#æò‘AA<˜ÁÆðF„~o€4 ¸ž +4z=°3ËŽÓJ”ƒùéÖgÞ#ØI%ê—~.>ý8‘ÄI³êòxYQ®ô´"PÿŒüPÎ +A‰iÒâ[i£<öf £ýE»ÚŒ%EœFq£„¥|l›¼¸¿b\,/,.¬7æó­ÆÂBcs‹a·û¢£ÑüCÓãKê&J—x=âIÞåõM1ÏWí$ŸÛ;W¹À‰6ª–æfnÍ–Ù¥0R~’¹s•çkͰw…^,È"EÏKLÒÚÒµ„þÉ(¢ÑëÛâtΤà=n4;ÞÙíŒFgyXˆ>MÑñ¥ó[XYù[á¿äû+«'¸oô»Ù!ÕÔ$¬2}°ösÐÅ>š¿Û MÝÚ'4Ý•”GC¢éæà„1"µ¡ÚÊ*¢BÑNŽNŽþ§#K¡ '´×ÝX`ëÄE¶Är.Èó6;B›°ÔK(èP«á|7e4ú4c¤Õ)`ÁŒ™ån #}¡£jj~,¦¤p±íB¬ênàyÇBÿõ`´Ø(o¬ŸçJq! êTÝž†fଷ€â›)X~ù«¯~Éz­­][60ÿ#~xí*[Ê·Êwï(> ž(Qð=ÊésÃşܾÍbv„÷ùˆÔJ¾g=ùK°Rã¡lGi”ä'E¤z§ˆC(­ZùU®„P®ý0vU¯&VÄ==ÌZ#fÎX£Ù5:Mx,*é(ÝÃiÎ×ãA e‘ï*ë <‡Jó7§]#N•ô;€+–L$wÂtæ(^åLpœÔ§ûL°PÚ[bÙcùkEéÅ¡K[`ä +¡Zò·]QÅUäSsÊm9õqRGv/*ê¤~ýÁ­¹¹…ë³ìpÍð¶½&³ì?€ýôT_A$˜ÂRÀÌØ6”÷Š5a¬HG¿>/^«û‡GÝbv¿À¿»ð nÙhaûGÏØ÷…k¶ +@ Üàű¤Ïs‘=}‰hÀúöÿDÑK÷þ ññ;d(X*õº®$€®Bö¨…8‹!c°ŒN÷{ø£ ­šU”ûø¶xsVŸ2xÄfkIÏFLL˜p÷„²sVó¥1\ž­5ÅY·ÄXh¸]ÑÅ/x—Ž*=˳%Ç +R'çyÚŒªÕH±‰)ë µLXÀ–p6Õê^º) ØØtÏ…h•nOt+5oNÜ7÷¤ÐtvÃêBzØË 4b)D£$=Ç—ðñãÌËØ2¾•nÄÔµªàùjuM¢«Õ|“íÔã<YûU¿Ršrylœ ªË>²]mŠ]W°‰†<¥­À.yZ¬[og‰¤õÿJ–©”B¯Ãü¿ô×’VVÐÿü×?þ1öI0DÂã.váO:ûRÿ© Bl(LÓèIÀ¬þ÷÷kKÕPpö§-r¦öÑ]ÂÉK’÷¸É–€4¿n×…w‰:gÁ°ÀÎIª ªik‹©tu BqسêR™õ3ÅÊ&ÔŠØFsô2ôtŠŒ›á§Oÿ.#ì; ·Üú"ýuçý>¡`þÏíä•J‰f@‘ðå3±q~¥úÿ?P–Õ Íû ÍÝ™p4 wÆì ËtJ[ÁwG&üߤþæÑ/¥•ÓØoôíqTÍN‘]±˜Vqùú8ê{çÑ£É &È‘$º†ÇшÕóÃÝø3n¦T<[Hæ/lÁ7tùVÈ©*ò¤LIÆJæt¦ˆâ(K*Û*A“.9¯Üöcz.d^˜œ~Á0e¦R¨&Êbˆ <£‡ôBd*Ô}2Œi„hI‰þÍcv[¯¢ä•˜ +("OJ&_úQ +îµu_TÄ !‰¦¨¨3k„×ëEIjb‡åð×Âe¾\Qa µ«\¨˜Ék6ª¯ç¸` íÌ}×a(Ò %ª©)Ý&½¤›â¢qD,ü?©(öžæ‰‹y[5b˜äRE9‰zOˆ‰·) _QQ¼ŸøüëƒíŠÁé픹ø1òÄ#D@±;Nìœ_TÔ»IýZ€xÔµY^àÂ@xïC ×|5dà×>Âò‹¾/-`‰À_·`®Lá³ã ž€à4 Vc¸áíƒú^ÐÇ߯~FßÅŒ÷Ã-ëî/õ~Óß?K7ᒀ (gÈ÷ðÖ1ÿ ý÷ö?©Ùó t1ï üòžþðx!áH ]Œÿ¬FOŠ-•]jêþâôÙ#ÉžTSÄà7ª‡ º-\Ê›Ûùùyuþýq²Õ“vž÷½]Š÷ÔìÁwU·¶66aÖ…‚L®2aá^k«ÏÍ…í}Ã[±RÅQT]®T›éhXˆ!›Ê‹ëëâÏÆ€ ®?¬vÒxCNijˆ0š´Ú6K¿Ä M÷¤ÏDâFì°AÁÝòºÚdgÜÜ‘°ÜÉA'?Ë·eÉ+ÃtSç>Ôë^ð¦R©nÿT2ÉgÞ| ÿ›s*>NH§y_Öy‘=¨Gíäs³èÌ«£“ w•’„êÍ6#k©}ÔŸâH¿ õÿ¯ÿ?þïVÐá·ÑjX1H-fµ78|úT'Ý`Pý«®%íuUéýîÊjÏ&€ý-‡F¡ošÌêêaïõØýG¡' Õ&€££n(¶)eùÙN]iÜ(#,,ªÈ{Ì´"¡ÿï~§¯Só:òÇ3p7Îq}Ùþ|È¡\ß5 ü«ÎïTØ® ø ] °WÔ ÏÚ«_öÌ¢u2’ð­:ËÃ9hàÛ’¨/¾ ±xh+‰ÚÉwÎ!½ó8úF­>¤Ó‡Œóë~ÁvžÊ¾mW¦ÁЍüˆÓnˆ&O…¤”(k·ËYõj{ @¸gJ%‚T`I^ hC-ñ¥·`r4ì’ð«¯Õ4!H¯®]ª¨"SþæÑŽjŠÃ1ÉõcÙ(¢‡ªæVRæD!åEbqÿS¤üs‹D;*ªÍÒ‡“Š*šŸóä€ÒÎãz”§O$¸„g'"ͯô‰lå+äJw;mªñNrH?V&ÕAY£¢D«é?å°ï uk àX)¯Í¨zŒïô@¤‡ÇèNìSø/΋Cßñy ‚À?pZÛà«ÒÔñ Këê׼¿¯{€ß‡(æX”•Yõ7è-y5ü¸Ìý÷¿îî+¦ €à–öÙXÆã ‡‡L Ðë­ÞNª„BÀ¾»´ÊT€'è)üÔښð_5ÐéŒF»Q…Iv®þ‚é@r{8)¸±Ž˜Ûâ ˜ÌÓ'Rr_2§eZ«j¸ï?Êây¡âúÆ¢hÒØ +ÐO+(šÀùñê%-Ƙ@X­W>OIyTT›[8ž+"t=£‹Xd(W¥<‹_ëY^ëÆ„Ššòäž6!¢§  €2µ‡¬+FÏ Ãu¾Kוః¡7$¤èQt‚JTG4©ÌWKóF$¥B߆­­­MDg¥C]±gõÕ%§@Ö, ÍãÞÃÁéËöƒ(ª´ÃN2æ‰F­¶ôc‰÷ÿ÷ï~¼²ß•hÈ M··ÚÅ3¦ UIÞïNz H4Äjäá5Œý£Õ%|Œú…§ŸÚŽ‚Ý¥-¤Žþþï-Z†– +üŸô‚FI5ë¤ Œ¯© +È(Æšìlx6ü‡üþûÿò‡ß ¿‚‘©ôœ1•)œ@ǺÒgõá‹¢ePC +g ±”Ð9U¡‹‹[|iÓFQ¨Q£Æ6¤ëü|XnÌÍ©ò…ÿ±Å9w{É·1„)o´lˆùÏ”ö!@1‚€€›Azo¦¼,¸L5}"÷—ÏÃ%}l œNn}a8xŸOaØý??¿b ;,X·áŠm—«}»hC@묦É/…Ú¿Påï!cî€ÞgK¸5òNÝÇÑ ¦K_GË—-ŠÐ/6ñnA¢¢)‹ÛU·’ +t@Ð'=}n €Óª ³_z˜Ý³q™ÍÏÄõÕN€®p‡þ‰ðÈ+ƒ©¥œª¥¼f -mü6 €Mú¥u¹å=¾làkõO‚ón˜yJ>»°jPè¤Ûüd7+,!Þ@‘' ‚`x¬Ò˜Zø×pÊÃÖzƒ Tå«„¨9 ™Â¤fR'²¨(NØGØå0X¾ô@‘ƒ¯£Q(ý&;¸6@ºÍe%صے`_ W“úŠGƒà13× €Iï!dx¦š|xÝ`•~»bÕÒ"€¢Tƒ  <ûç´’¾Ä¿õý,î×Rá¯X¦{„!€×g¼î0Ý 0à=_A׿ ùºÁ +þ¤‡!ÀlŸ Âj«b­b²Æ÷þaoU ß/F÷aB …ÙÖåðÎÛ?`ƒ oýã¸+'bÐ ÚCàû'’ 絆j‡‡Gµ•ÞÁ!CÂG}½Z¯’À|€•Õ§ÌÐU ÜÒ÷>5ÞbJZ²¥ibînvöù G:̲á(Ï¥à +³ñùï¿;ÅýCV°Š–šÅñï ±R©g ;i/"Ï÷£K¶ÄÒãÙ†”0.§1«h¬é5uì¡ï·àÊøûo…ÖÆ+å5Ü uÙ€È]ÔøãN y 03®ךnà‚i¬ XÞ +s9UÛW¾Ôe¥îœŽÓ8j”ï•Áv0ó=fh¿sW¢§å¸Ek ÖÊ(Í–fçJ¥ù0EÞbŒ +îEå/óq;¢DáÚ훿@J•z];­/Œ†­é•2¡Ûqÿ%,Õþ¶öõàéSFlúhùèÿ¨ýlÅžj1½¥¥•``¸±®Ëtv… ‚]Ï´NÉ‚ûýÕÕýßèÔ¢`?HÝK6€i ‡~—ç>¸s—AZÚHëì«üåËßýªó¿uþåq;û’7À¸Qiä­4^oè* ¦÷Â»Ô +«ÕŽh¢8ТF‘·0B4‘0! @À"m5•¢Acµüÿh£Á”wrHO1È›ÕàA©  (ij@%晥”ªŒFq”ëçYR­37Šä’ +ÒÁŸ×ÅêÍ£Ñã„ÕƒB±ÊmméÇÿõÿǽòµ¤;¼8˜ÈÏ0Öþ—°õýûÿ±ßëªÒñ¤¾{_#ñ¹ÙÑ]϶%á ¸ÏÂÑKÝÃ+SÚÜtpEð\uò+ÔÊ^±Àn¼x‡e%mgdÆ®IgðRâöEñ¦ (yä1_²Tv©º|#¡ÔظX‚‘…€\4›ib(•%îba‚èõø²¾.Žðf @«¥šŠãaÖy)pSõÚ2$ø÷æU¼Ê~€·î0 pîö_)&âDå#ÿÅÙkúâà–¹ü{ ŽßÝÝÿs»y£€–£_,^ª°P,í€+Ðä—Zx‹ Lq+ʾh’Æë‰àŒHC>,Úä7bŠçïÕcn·¬Â/‰ iÖ7¯N‡W-ú„p¢S€• ¤¤ ‰xEH‰Äàf @‚ <¦»dË·ýÜe üFÇW,f j«!0y}B¡?Juûà‰GúÈ—ëôý-é!OEuÂ)ãt!ºdÐ{œVUTõÂpQQ”^Xx/yÅðÜC§žØâGôŒÈE¯Ç¾ ºËÜI°+ª°84udýobÊqwl¸pÖ‚ôrÞfSÍðý-ŽŠ'uÙp1@°·RѯÃÚî€×÷˜Xôƒp} ’ ¼@€x¾~§ß`þäbq0ñà›Úà·:ÄOì—׺¸îÐñk]¾…û&poX*ˆ'ÙHâ€0]gì/_í-}2øÆËz˜zíüµ¿ÿ¬¿ÚíId6€^wÀˆãU8Áó½IW¿'¡BÁ’)H/VGÅ–±•›*Øl¼‹·T?’ga¿¡Ö¤È¶Ûì ´ý6ËŽÛãѵi§–;[­/Ô8Àë8}T-§ÆÚ…òí»¡bÑb‚c*Çjl›i£TŤñdçx'kVš~ùÿùEÿW²ÖêBQ¢¾¬6±!‰$r¬aܺBÓÊëéP¡àôvó¾{waC­]½'—`à_¤Xâˆ6‚­›ÜëgsÓ~«5Š«mìA/eâ“K^´ß(¶#Kiú"«“"˜œÀ­¾c¤_Asé´žŸJEÞMÖ*{ß=’¢?j¨åû÷¥×¯¸EÙr£JW•ªMõj+K~ÿ^í¥ß{ú€¶àæÔ¯ö˜!J€Hm ¿ºŠ)ª%1UHÈ¢¶ˆªv.(Û=OêÏóÖÆâíÛwî–oQ‰+“ÎKÁÕ˜Ç/ÿñû3Vb NíCu]øa¦ª'ó0B…úþÓ¤oP „bþ{øÃ2˜+²…Ô§7HÇ¥ò^«ƒ“iy#@˜€½^ýØ€7Ñ­–rÁ_«ã-ÎZ:´@!^4-¶Þ›)á¨8Qê ýí_§ü×®üù¢›ãûPÀ1Ñi&ÿ»Ú/½G—ù‡ýê 6O¹aPi"nÓ‡Š7pWTüp3ÿUçå;|¤q«vÂm}ñì…@q†Ç., ÷#ÅSNZ,1G¤üs8$ï¼f(r•î +~‚P¯ç/ô-BOpT"&Ÿs½ÜÄÛ|xÊW $|ë·X–£0§_÷@èqcàŠíŠ 0~ˆ ø¼Ë0¼l ¤gï°L|œXgjÕqÄYÃQÑ—bs}8O×,\@ +½ÑÀ¿}‚@\vÖ¥âBóSã“ 60(…EªI÷nº×¶€5œ¥:ßTyÆqÙÐú.­¤çizú>€Ð«Ýù®¬h @ð¸fxÓ^ L}„ðú€ðÞû/üÙ`øŸ ègb–m°ç‘øΗja|àtYÔE¬W€/E¡{{î1j„º<ìǯî‰Ð}eÿ™ð_Ź?Ñ»ƒà¨ïÆáOñëuøváæè­ü¯ +GÐ#F=%µQGÞ|… ¡Sï›cüÇ«ÅÝ4´q_ýXnÖëkQ3MÚ¬]Õ–r@íRm«G«f©Ž‚{IŒŒKéú:Î{¸h7Bƒ ¶yý·NÇãT¥?[n¤éžÎõÍŠá‰Sptô‚“&q´V­ÏÎG³ËIçðFœ Ýn²!Ëjº(s¢IÙ H½d-c•^ð_,ž¹ 8ªÛ$¿×Ã^áBÄë·<l4pGd-ã‘mû üŸ»åeâïòˆôc‰N#Ûèzô—v•I“nù.ki™'JÏ >’T%ÿ@9š­ +åÇ?þïî¯ümW²ÑñZÙ{''’ìì‚íŸÕý-ì÷V%@È ˜Š06©¨Q±¬@hD¢þ… À@ÿ(0¡K´+U#ÊÆ­ÍÆÜí;åÅb)@UÓÞ8tLåG‚N&eú»gB9„7wó\pÔ¨$ä}«=!ÄqÖ¬¶Ù_yJQX8òî7ª0fªhU#iÀÉë[år¶ÅSöÊè¬þ#05üM"@y¶íU&Óø³lK íB´±Î2ë¨x‰Üš[˜˜¤Þ3ÕÏÑZÙgºŸ¾™ˆP oÄ]ââ-åö}>*’ ¼Å`Ppøˆ_²Xî¨>õJTÚòÙ»} Pº§û7ú<˜ømYqù%"ޫLjnGÚòÔ ¤Yß¼ú’€Y‚U î+O>¶ì]S,yEH˜óôF[Â#¾¨ËÜös×,àWfpGqOñ…œ+yŠU @­ ýE>8ᔇo°°˜½Ã t­Öîÿê÷’W,Êâ—¶µË'„„é@¿W-f¶¡¢ + €®†Š² ÈSx4ø\X¸Hï!dxÛtºP0©&¥U?Û_¶8¯|(=8©¨ C“Š2¬¼™Š^­.ª¾yÙP̸² ðÞ‡nð°¼]ŒôÅy€ü‰%À‚&>| + €Å{ö-–][YH±:<:ðA¢?ÛWÏ=~³§!XšKqwlÀ·žÇ&ptrp ™ÂL]P@<âÜ_׺_±lKô—–<âoÑbuei¥ÆšA€ ›Èèp Æ£j<EíS*ÒUDÍëL;T5ÄQµŽŒ€£¿mwjä>©ÚBWõíI†+)P3.é%ž¥Í4@ê»#R˜ òáh4J¢5tmžv$¼Þ­K‰B%úq¥ÿaG¹Ðô¹’ÔëÅ툅JlÁ’¾iÊøžÇB–¶µ‡¶ö}ÕvÁ‰<É$zñ^ý ·¼Ð(EJöÏaþ Ï ‹pêZ»Q4–°Ž{ {’~e)ˆÀyÁ^Š›[£­ê£—¡K¨»Ž’Q».¥¤Djït¢¬ó*•LM—‹™Ó¬VÉ0¶ùY/¿c)–VT“Ô²›€ý8V—tØ;ø÷¶1õŸúº¤<Ôþp@Òƒh%ãjCj2œŽ—m\ßw/® +õì|¸µq÷ÎÝÉ:®ëNžŸŠÅ¡RÂfLlÚî[–ÁZ£œõÑ òí@º¹×åºÁ +i +ÍŽ¡íÊ79ú‰ªI‰*7ÒþÂHHÝÚôuUâV«Qíä[s ¶×3¨ƒ#€CðÀ RÀí É`}hâ[â ?D>‰ëµ‘ÅFõV£áèæ¤]ذÀˆ>œN~Ç3èöí–´«÷úÐÑDø$ÿf:ÿtB§‘®ø& wEAƒ“ªà¿ +{¨»Á¹n¸Õ 0\à[4±œ•᱋YÆ•¢ƒøŠàÊ,] Ä;¯ÍÐw¥0NfE;U,šú5úåÇÃoó(K`ÄáÃ÷…bI§.Àôº÷DÇX¤šÜì N°nê"Ð[î]ó 0ð¦YÐë|&Ó õ嗖ךҦÝu ·!ÇkWÿTT˜pÝ +ØÀ³5Þàpi€/†Ôù¦ÊcRQ—}ÚU,®(‡}#Z]ýïõ½–?ú0 ¼—À% Øþ±ñž/ þ è6 §^ ô7˵'àDËBxVžþOX!(Ì0IO[²êÞeW dâÖ€ÚšâÃÝ ÷–ýï˜ àwè÷¯÷÷¿–DÁð¿ÓÀK+ºÈä¤QMð¯3A†žÒ#±×ôÏÒï¤ÞI×>wêçE½Ra”=<‡]`ê•Jµ·óñÙKµV·Ÿ4mדQèRœ»ùsÍö~?^Ó«Ô²7íD¶Èz‹1šç»ÖÿÁ#–ßL«Š4镵2’ÔÊ¢(‹?e|ºØ¸Fø¿>Ì•7˜(ýÌJת[w;5éѨªÎ™Ô£öpl~ f/ÆþSôdÈÂ@ÞõH±ÇÕù5p/LP˜+©ÈñQ_˜mÍ^À®:ªö+À’ÔþÞþÉQ·û´_;²{`_aYŒ‚v¡†eš Ò­‘z_âXD[3]¶ xIíËôâìOùv®Î/UÛk¨¤ðV”¤­\C€®2d¯s·¬dþb¼—}›dù·Ãñ÷¯^ßÙË1º†t V2ç‰<Û®'Çô{}3é2Éø +Ç»iœlµ¨<šBš®#¸nÄK@2%p)“cïï(QLÂØ2@}÷ &€¹ æa¤ZÚêx|f+&1ª ~_csfŽU§ÔܹË:|$eHòYø ¤3óH‚ðû}ÔŸh'Xâ-vT:ø¼fP_á>§þQªZnðh_ñXú2™Ö³ºÿºàÒ:ª)‡õ‹MŠÄMÙ#;…b©xCšõÍ«/ù Ð\(–¼ãBP$ê šo™8ᯘð^>|[¡8Q,§€×}T>¼"U$È®ûðçšø!>®¨8ˆNyØ EEy½Hn´¸|ôoy;k=þÎï%Á`+XÈÌ/[_†¨\ôŠæuuÀâ–žW_|Ý È“âÐïu ÷€LqÞöž>†{n¥:­¨Ë€JúÏïžðEÑ¥M]³³Þ/ Á`!ü=ËüûôÊŸ( \µ³÷{56ïAAG3?<ò¾ÿGú Ä˹%üïöÙ’Ÿ@\¼Ø1„SÅC¸ÚþQÿäˆÕûŽj’ÍÓ»x…ÿh‡«¬0ÀpZa­¿z¿†v‡ ‚`iué~­w(¥±†˜`|©-ŒÇIµyªJG)b+ÔjFqu4Çì˜×T{Ü£uQ—!L×-Ú»y@ªGÉ£ÓÖÀ|­š¢ •æÊ ”.!ÆÙ÷^ã§^¯7Óñ«ÑY¶ÁJ>’hy"“~v€ÿÓüË’ÍWªÞQˆûYeÙ–zïp—¥bB*ÐQ!õ—DËõŠd¦š(Û˜ #öµC`Á¼í…=ÝèÜëx©°DíÀóÕ#ÔÎô§ÁZ³žé@œÏ$ݤ»[ÌUÄB6Jò-)ê/gÃt‡m7ò´±l6­\ é˽ߧۜ˜I»iR-)ƒ ™Ú£š'ÓwÓ#:–"üüêýžô} v,Ҥvp *}Êú“l0Ñ=::úš¡Z¢á´§12-`•5‚8+ë6€Bë¹BYýA’4å[·éI@cß|ÉAa;rS3i&Û »~{ÇqöÿÆS¢©ßúß$ ÛнÎõÕŒšÑö6û‡2Úß®ÿ„7{زGë„ØáSïò1¯Ôºî<]·<_-ÍΨï©ßÎê33s룙[| 7Ùþ'TRêkÞèTYk¬éGý¾Z.IÂTÜú!ÌÞš™+žø¡ô~ۛͪípã,~éïgšå»f„¯p[_<ûV€·Z +@¢6þ‡â¯[È“€®¬ h-[8ŠB)2GžÞÃ\qøð­ß €v1 à5€LøOÓaÉ»bû7ö b'ÀÑGÉÕ% yâ@õ>³®ùHÆÉ:_ÚŽ¢g"„õá<]±„t]TÔÛ}ŠYö¸TQPˆ 4?›ŸÞààYS¯ú6Ï*O¯YÔßk@ÑÝ ,qR^÷¸a%À7¬pÙP¨úá'Lô±ÏÂ/—øûxj° `äv£·±(/xÎŽÀhéúHŠn]Mš½4uÛb1øW1îŒ÷žðÿ°w‚Ѷw( @<¿û 7= à믥$zo ¸~Mz^—A€ÁÁþ'BÇ¥••^mõ°·´Äx@­;q®Nósñ„Øcÿjäÿq2ñ®õå‹v´ÜŒ›BPæ±µÕdP­Î¯.DÈ–ÖÃŽ7ê…¾¢ÆH_ œËrÁÖfÚ¬ŽPÑð¸ÛØžýžý«RÖ÷KÚ’ñÈ{­­…»‹ë›lÏf!@¯ f’Ôéw‚h=!FU’d3Ý+¤SéU½ª“é‰0”A +¹þrØ¥ó蝹%IÒ>þæód9aûmÝö°=c + /n¤Ùi·_¨Å±_i£#Åh“âuÉj³:Yµ™ëZØ›¶!>(nöXå@7õXin}ë3å¥Å‚æÉ©ÏCqSöÓJ¿¤ÿd|o”«Ï<âEÊHGóÖõrÅYm°@°Š¢sÂ6¾èü ¨yõk««8t„‘wVÅ÷%°’sEO2©{Œ>jG +å/ zJ'ƒÃÁ…pÙ8_%¡¶±¹Î TJ³Q£.à¦×ëÕ5AöðnX×·$=×Þ®Ôÿ趬g{wl>È‚þÏ9rôP#Š?•lýTÇ ½·mÖD¾)1í²Z®Ì—Jóèùªá¿4Wú þ¡€þïhŽ-éC´ÐDæPì’.ªÕgT¯³!οÄéßýÁœ¦ +†‘½Ù ÀŽºÁë>:Ñ?÷9õôWï±ÀËÃ7¾n˜ø0€þ©+~±‰÷ê1G·3±¨ …4ë›W_ó¸dPº/¯ àÓYü;3úŸæé߀§^ó`P2&Oz·MœÉk>äË5ñC|,±„ü@œpÊÃ’¸¾ +N€ @X@ºúf„Go¶„!€à Û¿ü’àÄëht ß«rÄ—žß}§ÀûÍg›ú„z¿zêíëÜ``À¤¢xãMtEýýàY×}¦v4â[ÃØ åâó}s€@pÍÀ(€ýûkâÅŒÞcÒ?Ÿ€¼1ãÞ‘D–럮 ˆs»ëÁ°÷¥ö17àp©vÈ‘y·öþ׃ÁÉ ö´§8a÷zP÷kzÕ~·|—ø[]ê­,-=­ÕâJœ²,X¯FÌ,’ž©*UúS¡»ÚE¿(1àdpr„ ; Ð`h]Ïì÷=v£¾.lç¯ÓH¥ƒ 3®Þ„^Rã):s¼C½"8eÿ‹ +[ç,!n’Ô)Ù\'A˰ø·UÒ£c6Qm§ùÙhx6:S˜!»©æ§gãj[/2áˆeÄ ®mbÞÙuýÇDåÙjµ± ¾ºÎ.®è.¶UÉÝ;¬ìy3Ý.{W •»gP'J\~ÚR›Mÿ«¶óñNqz!i×?—Ãgz@Wx¯Ï°Pµ|nœàV ÿ,4@@Tüˆ?‹¾’`ë+>¸jP/S ·ù½Ù@ýÉJØŒtÒpà‡Y‚Ô¢>\ò°lÂñã×(wüxÀ{­pÍpáÐVªðº@»cPÊnöМ˜³uþb À;} §E!PÚÔ†£»ê kõº`R•—fØÀF†ΙvaçéŠ@(Ü×|T/Üu¦Þä–~ë,€¢;¤.zÓ,€× €+>Lö½°\üñewÀâxúgWAý_š oP¼öW¿feµ£Á‰¸òÔÿƒòø÷ÿ⼃ƒÃ¯Y@{ú«ÁµáïÂøUV{ú™$88ê÷˜ýíX̯»_wŽžIDè‚ Öøxº»ºÔe+%D.±÷ÛêÊ’XgÚøx'£!$ÕÊšø®ë’6ŸeÕä¹€5®×+íö“Dª–\ŒÄ²Ü=­¾Å? ¨# ]#"C?¥)‰›f60l¨P¥¶Uª’)à÷R}@–¾n×ò-vÕUËSm«tÎÆÛõDà?_­²-Ð^:²;žW†gÍ Q\Í…Ð; Ÿ‡CÔ·ËÆùrTOšÙÙùËq®ÂÂÒÒÑïnÝ*ÍGIZÿ;oõóíè;Á{ô¶Ã=.a‡3Å"R¦ÒÎn%ò€þ˜ JwÔâÊ[ã‘å$[(37±%™ ñqSQæÞHcôOÙ¨l#ü^Ý$‹¾ŸªH)'Þ1Yth+nÌÎÌÙAwQç8ídݨ»Ô?ì÷ûÞ0ì +IÒ´îß}Úï±À€©þ5¨gGûxIÚ”­l)%RÓ¸*Lm°“ëD—ןjÐßfQe^™b\Ø.~Ùd¤t×ÎÌÄÇç’á“BzàÞ¬§Øc\?UKðÉ|ÄCgy%É‘9EIÂÔKÕª51UÜYu§[[ÜÊ¥FŒÏÅFpš0MÖÀ ðKÀ\C {’Éæ&ÓK¯GÿÙ²ZšG,Uf•eâSŒÜž›øø_ú„¯âdz0ò݆f•)xÙ{Y”j¿Ë øÍ³¦>»ïÔý×-¯ïPÚÄ{õmtgj Þ4u×`Äf­±Öx“ÀS€ça€kŠ%¯ sžÞî@*ôrÐF—¹íç®YÐ-nXàKû@.NdÑ¿­@È'œòð_îànôš`o2 @™ÑíPP: »ÉÀé×-=_XújEñF½î2é=„ o»äðöYn8*œTÔU À[×H‹Î|‰Þ0 àŠ@xïC ×|XÇc: Í^ðn[ÿ¥ãÉgbðáÅ:HøÙñUÛ<Ÿ<;ÂqåßB@ ©öpߣ£ƒgGâÙè`<ïŽ +‡/1w±i ‡Gû=¤€ÞÒR×… Ô°÷úö„Gå›8ô¥ï{¶€¯­Ü— ê)kqšW«ÇÇ{Iô1ºø´"upÎâ;IRY‹¢ê}bPjFvÅgT[Ø`J•˜KC/ž…\·nSð UN€âcIº™åqivnöG¥y0mOí¨h¡¡5{n™ð_Ò ÅXBÔ+вm'9#úx¶ª(3Zçfú"žÏÖ$·þ,¢åž!R3¯;´eQþ¤ò ƒç/Ù°&?ÍZì÷#&…‘§ÜˆÓã‹ôv½.)!Ùɤ©ª‹ï˜#1oÒÕ0_]´Ùº±¦vS–˜ÙØÊ[­M&l¬·Òùt( ÿ<[›ò³!0™·mûÎvޱ$¹ÄäìlX”€ð',ûÐÊ3·æî4Ô1Ô¶Zý½NZy”÷i"µýÚÊÒÒíì¯6æŸè/ù‰’ñZ€ÚM¯‹´`‰Õ6$èV1ât£  è[—Ii o»2ÕQåã—–ËCÉ3eçìj¾óª¸ê\O á`á†{¿;¿Ø •ä[¯„NäΩìiB:¤ÒZ¤œKë/=ô“…ÅFùžû¯‰‘@/ð€ÝC=Nˆ3 ³xSâ —3 +¤T86Ŧ^9™¼ëÊEÀßýƒÊ.>7ÎàW?ê7Xh><®Çü£ÂD[~×,€ÇËð€¾xöÍ>ÓYttÕ !ÜŠ¥iÊ‚}º†gçJ !*Od‹„¡Ž®Cûœ‘9u.ÅK(½]_~~ùy_pÏá÷~ ‘ámë¨~I#c’wÅöº€²ë¦ýC|œ`×QQQ—-ÔÓe 9ã@õgLÖ¸äPÄ¥ØB# ©½ê0>iïX ̸æàÐ!¿ãKI‘ïå0i|ÎÔ|Šu\Q{Š®|‰^·€ú‚üÖx€Üý7±þ‡s$g:¹b›Ån»µg'݃¿g Tw1^8¯8müï߀ƒÁÑ Çý¨ø"X2Š»¢’övtÂrbîèóbÔýþø²Ï@·/UPÛ÷»Ë>?ð{OåÚï÷0 ûÂÿ¿¾¿tuµLŸ”“­UÖÒ¤R‰"Of/H‰ ãJ¥™æysùš¿Yc¢‡ç…G2Ä ±‰^–„H«µ3UÝ—“®¬†™%Õ¬1OéÇBµRüi¨ÜÐÐ|¤_‹ØküÑ^†…ë¡tó4ó¬ûðÆ<­þ6ž)ãe¯¿l­ê´ÑVÜô€ÜŠ&Ã<­ŒòäA’þñ+†t‡¨(ƒŸœýñÕÙøü¹ z4~ÒlWèÕõhMÅ#Ól¨&ï^Ú§U‰¨~Õæ–~ÑÓïah”7ÒÖ:󕢯vöÇqÞ¨ÆÙ(wד„~–)¿¨?¨ÔñäøQ²“lw^ªó;™¶hPÂÂ5¥Kÿåò­[åôe®r’‡¹ ú†ü<=èuWØ"Ðõ{]<„ýO™ï¯C5Úa¯×?¢ émŠÙûÙjac‚n²P!×IU¥1¤¼ ¡9ªÎ6âÖÖÙ¤CÍC4.èkœÖ“s݇å„,š$à!ß…»:?W:;ÃÔOU§þ'“-¤§cZr¨%i•çñbcQ_ªÊ;åB÷·>ÌÖ‡o¦¹Eñ·ðšâ¿ˆ˜*Øl”J[ªƒ; LÿgzÿûÓ_ïú`YDïœкÑ~É}‡€T7û³ +`™0a}ñNݳ½µåNko¢,óv#:øÊ<ε…ªdZqc ¿J‘˜-\XL³TâA—Ö¸4   ¯à*OïéàLq[¡8Q,ß²VêZ £4‰îßz€/N8åa[<PT”ë´âð>{\³Ø °ðPD0,ÈmRQï²è™€üï¶p?ÞCÈð¶÷ö˜T”¢T§uaë¼aÀ Ú?tã,€‡o™pÍaÞV”†?ø ýs0Aü©IÀð¸DÂÿÕ••ýg‚~¡÷ÑààÙƒúž‰×˜÷þþï¥ÿë’$¡µÉ?{ðGý“`5à ýO–j‡¿>P|Gý¥îàp0`˜ƒîª^¹TëIŃ©÷?ù™'‚õökì*¿´D®ÿ†×zEøJ wˤÎÕÔ%Äi[5ÕN*Ë…ÖÀìË݈·>kx?>ñN\Ù9{W‹’ÒŒŽ'‘ÁU*¼l ;÷Ó¸‚_{*}º±å•݉ì,Bø“ÛjIÿ•ðB +ÎNðƒ›òî¦ Øï·²tþÓq¼VúpˆÓÝê|Cpâ!™¨!´8K4,]·+ù7iÕÛçô6‘Þ´Õ*æÚÏÝml;/‡£³³óqž¿I£¿k·í* Z­VJvBW‘85ó´z|šµ„Bá¥>€.×y¬Þ˜>mT’oÒJ4:”Ù‡O©Ú˳d¹}|>>>>ÞÙŽž<¨×·ó³³_)®-Ì jxv+-¬Ï•Kó©zÂŒºSU•íö»+÷ŒI‡1d¼H-Gm‡M!&øß«2{”ÝEºÝI…o’l`àýú_Ai¼èÅ”Êõj)i6²/Î\Æ6½˜¨Jú19BÑ_NÆ…=_$°@•…Ô÷}ŸzØ€‡\9C ýnI¢fÔ¤Z'«¢þ1y½¥ùYÕãÂâb¬n­þ+¬f výß ,,²Ð"n¯D'™+Ñ>Êw¼¶ HñÜfµ§É?Sø¹tñâ@9~÷Ìðè©}¶_©\TPæÁY«.PЪ‚f¸¬!«`fÁ¢ºôvîè’D„ð”“VFÝÇÒ/B`6EyMLU¢3Wøo ˆ|º pelœ›ôY— +œ$œòc Àûø„辿/KдÓ××ÀfÁ –ôÿ?€›WüÁ³&>öÖÔ­ðL¯„¹i8ºë>J­Ñ8Þêð†½ Á;÷ø7] èÆ×ˆNª®wÝ Qf‡7Y®ø(†Ûåu¯ë€=€üèƒ@§Å!ß¾yE_^Á ÿDªÿ3ÁøÉàˆyü­Éëþn¡þïž=fÍ?¸0_¸ÿÿ»lÙ.ÎÜãŸðõýAw‰5ÛXùÿpuô&è á<ýXÛeó_ ý7VæïàUn9ÎâúO«‚yñV×` qævTYŽvTIÔþÓêlj©ðxoHÕb•›8¥hâ]u½(ÇXËÎىƹjqﻳ¯ò_¦Íju¾ÒØU¥ëéÆs·Êu±×qA¨Šêûb­ü4×Ö +ÍßÞˆ±êuf‡k‘’UJ–JU%M´EÞï‹4žÎ™Z!ÍD Y8“JÆ5úÍ¢Yh°rl#–ÔŒ¼ºÇš,zPOþ9˕挑ÅÛŒ˜+U«kMåsyÄLwf³«m¦»6•×”ŒÆü\yq=ÞZ磤Ò”.÷e&'·3e-o¿xu|ÜÞ®‹‹¡qÛÝ­˜[ RVŒ‚ 7èËñïm¸ˆ·sÊ ¾œvÙ)˜ºÆæcxïî?}*é‚jûl0„êvDPÀ™„Kôº €Îxõ/KGJ'Ü$fUüòÂBcýÓj)mDÞÜÔ­HnKÝØç㌕".H÷Ä<ȳWƒÈ`n(½µÍ‹"¤>qW¡öE€5èÿâ+ +»õOË%ð_ÚÿBy‘¹˜ÁÀÖ=…@rÀh®±IÂ'´ÉðËgDlÌF\*m°¶0±G§/¬ “)ü\ºxq@ |; Em‡5ý ×€¸Ï©T–j2ÿ {\X^Û  Ó +¾åb™ÖÅAçú²°Ö¨®-T-ˆ±ÿ bBµM?ч ú"€K½Ð³œ8'!aÎÓÛ}‚œ©KdË·ýÜ…bùfåÊyƒ\ ¡Ð_óà²kâ‡ø8ê nÇ §<Ì{E7û¼Ï^o÷@¬©äÅGÔº%’QÜâ2‘ÎÅgîpk½Ô°õ®ÁÀ[}nœàÐ{8àmzñ[Ö¸ä`¸ç†£âÁ›,¬0­¨ *úðMtã,€-Axmñ ŠI­›YVúÎ’ÿ… ÀÍ©dpYèvÅ…½'Òý™‘½ðìÙ>ùH y·'Ì?Ñ¿. $ ¼êoœ5z+¼Y"&-íŒýÛ‘ÄÞYäŸo‰+µ#]ÿ÷Ù@î>[Åó(BÈ„НÛ] ÝÐkÛªyF•j"ˆƒ +Þ-jå*pÀ×5+èËÒdù§* +ÇÓ‰Cè$ Â!O}7`¤hž-y^µ6Ê…Òžê?ú­X+K¸ +ÖbvßÛ-¸¿—U»~1:Ë7½8BÒdÙዦÍ-lJ¶(;ÒYúi¤×¦q©ª„ –Ä• ´ ŽD”4ô@z§â­Xšž'&¨Ââì|ÄžþeI]|’ü+Åñ–ši'Ëql?Ïž§X¢zµU± (L;¥3¥ÑzèbåY¡vÑ1é.ƒÖ[ 5oIœP‚ÛQ}¤n¦Ë«DÉn>ef‹îé¢ô€:›Ù(‹›­ñ÷ÿ8Î«é· +ewk#H+žÀ®qµ.IH’ý>[O°ÝÓß#Oª û¯õˆÒÚÊ„®H +GR^£Ào²Öæ¢$kµƒF#i|ÜVz÷Òq`vb,¸š¨¨Þa@žRžáéO„gL>@9C¯ÒŠd†€û…êOɪÖú2f ÿ14ʳ 6šô€ªÍ «ÏÝšû`.(Öÿo–n·Ø=ŠÈ l©¡1-uq£1[^W“—f¾pûÎm$cýûS‘¿·QÆ:€fÔ0Ñwøˆßhòƒóš½è³+Ãm}ñìÛ×À¿—U©þµµ)üÛ  ºŠà["éÿ ÂûIPqÑ{œÿ!@ÁQÁ(l¼DJaØ©sΜ8§ä=ö êjQøÖo!2°@1 à†u¼ö#oõМ˜³u¾ìüê¦Ýø,€™™gggK3.hñÑŸÀ…fÃɽò¢xÙ¦þ×Õ™˜ó")Wg‹xô.4JÝwÝ ’XUÂ:$&_›t‘Y_ev¦43[z|ÉYÃä4¦*êŠ@¨’ÿ†u®Ì€Á¾yauú›f4ª}€›f¼¶À…àbŒú÷qE1qèÓ€þ|]Àtÿ°w$hŠ9ÛMÝÚþàäd0x&T?tì(P/|0àÃõèþ!+ûâû¦çûì·Ú=<éwŸöŸv—ºlïƒVïÿøÇR õ, +ŸÈ^ãz4ó´2Õ-†û’@ •G•<¥<¼&î€?®jਾ“ÆUµŠ5Vïܹ3ww½›UïçÍ*³»_êl”N½Ä[T—®¬xˆ‹ÕUYvoN}kN!©[u%^ª ê'ÉÎNs­4ÛËãé«d×8A1IÍâJœá›/@ÒÉ1€ÁbŽÅ¯Ôbl8*Ù9æíj&àqê0ôÛ€ÓSç‹›g¶9]½ï<°™Š"cÍ[ƒ×YšŸç’ô1>;þ›åz½:?[š-ÍW×g{³3s33¥Æ0ÞX\d^CÚÂ2 d§Û“`1IÓz4zŒ@T·›ª«êšzé.0c˜zøÝYÖlJvIÛA`SŸÊZ[‚>f Ø@›ë¨ë}{†Ä¥‰Ž‡¬9-I±x!€^H//$< ¯‘jR|WìÊ–n4>J±dq'd'#¼-“¾ÀUÒy¶¯Ÿ’yCàºæ†\ßÐ9ZEG¼C(EA:B°›¾Ú€~Ôž‚çÿ:>ªÅ¢yZžCñö@pxüã –Æ Äáp>íð<ÖÙg8n”Êȼ÷J €„ EíE~ß›\Yoû„~@~i˜ïex¿½¾zÛ,€P#º…$ÌÎWg?Ä•[)ŸU÷qSÊùœõŸc\½ðøàZçcv³˜7N"†E=T+°¬—ðˆÖ¥Ye…–@q†È]T³Žã® +éŽn¦gØð†Y*ªk€ÛÔ—Â`˜ÎóPÏ—~<€Sq~!ÿŸ +~ÍR»ƒƒ¶úþ³-/—j_Žø³ Ï¯Ÿu™Þg"Žšþ¼C@_am9° +0¾}pówt—Þÿ´‹º§âvþÎ<±ZÀý¾à_|Ó3ñ7Ò­Gkó8y÷`„š ŒÄ®ØÝ#Å´µ©äÄm2Q‰ ôh–V$€#¤ÖžŸ?o{–»þ$ýfL\¡ Å´ŽuÔ´[s›±x\K DPšµ³íz½RO’zµ1,^ìˆh™ú7\Š÷v*QFÞ"ñq)Z—¸*|Þ1PMžêþa¶\þ#»çlg+¾Ñ‘¤Ÿ¡Lb` ,Ó#<žÍ“e *´^]B83È]IKÃÑyt>ÚKs¨èåz MK33?ªF‹.²)€žóL3(I—£¶Þ…7€eˆ”ø¢îŠ™ñ°ï3÷ô¥DXàÃPOXzÊ1 ++„G· «¡HÊUC àUªEêÕÔ»­ +›–$HRËbúpXeò ŸBûÔ€>Ë÷”¶OÛÔW̳ܢ­WK$¹W èÿá‡Î +£ÝUÉV'g¥ò‚€àSÆoñæ*,R /[èZzò²@Ü:Š€…·øãMVS å²Z¿”nèHÄ2­Š_¾ïZJˆ¥ƒëOã¿ðX@Õò¡ŠZYšý@À}ÿgfÀù®Šõ‡X(jaýÛVtÓ˜ZÅe€é<Ž•"Ÿø2‡w.,þÕQ×™øwPóöëÝîꪾ$œìžo‘€£gϵ%³aüõ¯Pì{ÿaÒ¢¿±€@ÿP{’ïÁgxƒ_„ß`¹lFÜÝ|'‘ ôÄ2; eÇi£Ôfû×·¬øÓdE[[Y»ÑÈ8±ÆœTãG +~…ïåvOóaVò3…®$as^“²·APgB—üÀ$ææ?â-°,ž¬È”Ébb"Å¡_Ñ®M€µ²á¨ž³ø}úé§–\XX†Fž +L6˜×@h=›DÚö¦·»ÇuI¾.nÎH‰¸giI1,ÐÇÕõ…´ìW3<Ÿ¦ê¤†+°”kÖË&4Ö™ïQ»¿‚uŸ¶æÝ€$ â vÖç6kþÐ~ú½ÚŠÄHƤ%\µ¨uM$'êu’.ß’ü±Ù¸Ë„!oºNº„Bª×]Òh2Þ¤¯2ªv'b@ÅTÅh! \p£›çiE­IMP"jº3™@}0`€HŠÚ“ºäZ„ + @$¦ +ï Ÿ7›Ô’Ó]ó+¸V!W¸¥a`Gâ¼c8a  ,0ÞûöšƒJâ ƒÜ_ä ‹!ßH7ûüð½\´åR ]ÐâuàS‘á߀¡ÝNB5áàïœ þ²Ö÷ןc%.A€¸ÿhBC䈿bÀU€ ô/Rlë”{ªª9O 0|±üF(D‘]XæuÅ©##¢mt‡_`§„‚?]×3:!ö9 a¡HèñΞ"˜Åà@!sjdnTÁ wÙ û~ÇG… ¢- J:*ûO+©z˜ô)n¥œ¨Cnõ¥ 4àÿ̇]XLOMA&;Ùg*.,´î†Ø®A á '>l°+¶˜Ñ ‘W&caðzj@´’J Ž:Ÿ…m2¯v¾æø>—šª4Ê)XîQúU†0»(ZêC’³{ÝÝòÆ[-oØ @¥ãöð €SNùñÞë>¨/•o±€q? ÿü‡_÷½ ÀþëD¼õëDJÿÑ>ÿ1ðìDàoþ‹  ÂH8x& ? àþ„×ö»ô{^¸Ï‹Šü÷„1vaÀèÏ3+KÌÓÙJï¨ßûYíhÐÿ ^ÒT$Ý•Jq¦Š¥¢tGš®˜†Tõ¦4ë°xçz§T>,þ¦ô)¨,ZO +ì©^ýÛ4CãËõæN;c¥ß<¯æâY˜Ú¡-,Jå…¹™XÚsgx~ž%Íú²'ÙZic¶¬({ÀZA`=/õõ¼Y b…¾Ò¨a"¥*/X"”¬Úd†Óª¹…øE‡ÍuZê“䇞|gÁMD±ÅDàr+YY¯$!týŠÓŠ(¦­´u6ªuÄ¤ÛØKDiu^¹‰«•ªQŠ­ëXuHB +E¡Ô-o‹­¦ÒçŠ$$ö1S2bôºPæº  Ýjµ¾êtþ1ßN”ª(ÉÇùžb³í‰1•ÏX€HZ}_ gi¿‡€äZ÷¨†+£dÆ•ÞÉѯO޼0õÉUÀ…à½N-FTp,ßa h½±Å@(öf|á°A©„à ®,x`Y¡I¤­Ñ°£úáH1ò!?–u²ÎCÁU¨û‚ÐÏ¦ç—æ¤bPrfQd&>lX4#5ÀsóEot, ²ÒVÑDÿ‡¦€†: +1Ã$mŽAðb€?äs¡éßø êÿÒÆi£jœÑ:ᮨ°„aØ‹½\ª\*ˆ1Z€uûŽîq>™ØXû‰´Ù,ö$à<üý€ý—k_fÄbóÖÖ.é*2‡à’€âˆòyI¹Ã`P{ç%›Iö©Ðÿ°Ô8ìg¥}ê2G°ò€7€k„£Ý¿7µ€yóD"!s~¾ôáu ÆW‘t÷ÂP©Ñ€ |P~Ì&Á€¨òq—é:vúf‰ƒ–Ž`’å`°àu €Ç¿­€O›Áƒ*G´xÉðY¼Å“¶À]t-À„H‘O,.[œñ9,ê-Bõ¦Í¢\í|w¢‚XǰüpY%/r^ @!€yfaQ!þbEîÛ*’·[nÞ €u8¤Õ]·¼¶À €ÞÚœü7Ñü‘î•>žXþà:±IßV|¶ZJïÿý‘dÁѳýAWðŽõ_¤“aá?è.=u ˜óW¤ì÷™³UÌ´9ŸhõÕ—\ ®Ž±ÀêýÕ})üìø÷ãû÷—ÖÃýÚÒÓ§ÆF3“ÍõM®Ç¤ *Jö\%Y®&…ú/¢ÊÕ@ÔlUsŒÛß¡I@ºewi5pS¶¶µY©·µ³ æW9ÿ|›á0†³•ÜÜL9Ow")þ¶€ÑÄô(‘ÎÕa—7%Ð7ûƒ£¾zå(­Šiê–R‘Eó‰nNßRd0aÀ°]©çàkŠe ˆÕŠ‘ì}Ù’îªæ*U[­Äòo ÈÏÛQžnˆ÷[Vv"‚~È'ü³pò(«+§¨ã-–¤›§¥(ß’ˆ#A@ b+-´dÊÔ#%í¤’åíåf˜ ãž'(‹×*dN±¸¸`³,µFþ«áï÷¶Ç¯Î%(â|kcñîâ"~ cÄKýÚJmEBÍF¢ã'p‘<€ý_š¾‰ÇÊáÁ³“_Ø€#ÀM6'êujeøT(³ë 4?³¦d–·˜½–°Ì;dWòzò<+\¯Ü0t±óÒÊ«X;UÜAUT’´»<õBKºÁDfxåNÂx íÏ#õÒbªR_ +y^2™ùèÆ3û¨/O̯Óe±¬fLýœØMaÜ\JóR ±ò¬ +aVA™õýÞû#èBÓ¿é# W¶±‚¼§àæu +ñ)„eÒäÿ öp©N‰ÆXþ&ÿ+€à¨cX°0 à«H Ô²>€Š 3‹ýÎÃå lW©ê„‘ÈË>ý¦þô¯Hu Qmæ²@ª‚Œ›hÏÂ[X=º\Ò£ÿ…÷°þÏ ‚l(@§°X•öTRÌß››°×Iã% €}ˆ\HÆm‘´ tƒ [ëNRþ•-¥€{Õµë€{¬e©¤nò›ÃK‘ž +9Õ7Jÿ…À>A˜X(V¬ê>Òþ×%bD[: >wÔ™£RÃÍn,øøä²@òG©ŒàÜlé#•ŽJÛ‘7)¬E[ÔIí®»zÀµ®g«Id € +ƒ<“—C¶ºPÒ ¦‘ƒŽ„.õÁ[wÞápã,,Š_é}xarEu³ |ÿäà߀oÈŸÒÀÄ0ÿ¯õ>yúT<µÇ>?ƒC©b]©ô'‡‡ýž×ý•ê/Ðì‹ 39Pÿûa‡WIâà +)ä¯a.€0iÝÝïþ¦MXˆµõÐjmui‰–$hô=WÀµ(BøÏ2ÉŠó(ñïBE‰I³×oÓ.«Tœ¾‘Q2UÃýï`Ráø¯" ‡q,TÈÒíè§Ë•úv”$©X|D/ËÒQs‡Ikðí-w ÅFYIðÆ2ñNÚö؆{¶Çé|‰ÙyNXº‰Õ]WÍ«¶âŸÓ<ÑyY«8CåOm¥QµöÐáKš¨® +Ãa»£|§åìðóhey’œn·'剔Cûx/ÈÔqÊc;ÛjHÔfË’ ×ÛP"BU5)y­³,ÊØ—UTá,<©Î õHžÇÕùj,a@\f;;’¥íʱ€ÀƒCå@-¯{$YDqH0Ř€Ãðì,aYýÑø?¦{5áö.%œZ¤{O÷k¬ „Ðï®ôûÈ‚^BB¦Z Ô­õVÙ!ðßý @-é² ç’·/Ñ' `q}c#¦CÁõR_“”"Zåi}×n†Œ3 ýg,AKµã_¦_x!‚ìí%*A®Ø‰˜1€lÈ’$ö^D•‘¢~Gisž»õWÆ}ϸ}ÝiBwÅ‹ÖÎ.ë @å© + ʸ1[®®›OX˜»gXüa€Û·C.ßö‘úŸ²m0ô­ [”84± 7þ·îÀtþ+C0Ïæ L0ò_Ââ'€Ã™x«Ç÷ ˆ€€’< PŒƒ°9-0‡‚]„½ Vtá\Þ €Ë ÿêsap;€óÛ –1' H±ÀyóS…`jÁ”YÐжöÏ¿Û03WŽ< +ÙÀf‘]XÌMy—-¦€Ò @0ˆà}Jº,Èl½Ç€H2‹î +xM-ŠS_ÿƒ@ðû›X\ 2E,:¸f¸ä@oSŒÁ ò|Û €_²ø5³³ …à|¨¤ ‹Ê솄­Xº«twQ}k##˶zP¶(CôÔPQ1ÿƒ063ã~ün ÀM³~Ð^\XDSˆ/d~ÂÉô(ܲpYÿÊÈ+K³± ï W{ÆFþLÅFÀ›OLwÿÀžÿ’„ÿƒƒDý_Æ3eaÖ$$ÿhrµ^\5<Ó !£v¥Æ:ÿ–þúþŠ”»~Oê¿IÜ¢Óúò|·Z*™¹1¥NµíUϱÒF•( +©˜+Ť= ¾¶ïÞ•Dõ”#GxN=% vlßü ³ÛÅÉàSbBb-©×ÖkD!» 5¶¹Í”"é¼lú+m{~.w«³ÌmÏéˆS5$R%>è(H5‹Gž,{®N­Çø7CŽ`wã|í 13óÄ,Ë›ÉØl®Óꌶ°b0ŽÒb˜@—èy¶“䬧ÌÓ€Þ¢?Rɱ ÀYl*¥¬ƒ©{•ÖZH/’ƒ³4Vk¦“„ý‚ì¨Ô–¿I¤‡¨„qˆ ~ú°Øx(»-™ 6>üÝÙ:ÍW:Ê:ù¹g l ÿ«C–E»5~Ðô½Y$µþþ3I )!Q®öž={ÆnÔ àš À€Sõ:ížåž®œnÜÅ/ ‰'šGyf«@D€f̣֜(JÉÔÉê;ÔB€™–ÕÛ  }bÈZÓiêM•z%@— ¾'„4©Æ öÁ,ãjIŒLuþß»džÊÜÜíY© +…À7ŠªùF5$sŽ*PIÇî"^ PÜ +ƒ«ô$f¿H’¸åM†ÞŸ>øàuŠ7&Û쾯àýöP)âðß²E`^".¹¨¥¡"0¶? Á)o'•1ñ{ 6‹ p+ L,DYµ¾ûN(„o8S®rëÒ‡?]½ð1‚@ì^íäQo À¥Y%ÄÍãøãú2ܨ£v2£xðPøØ>Æ bNBQ"‹YöPt ¹©ó3µ<ªþè÷K—,öP‰`PzÀ(,̰€÷_¶[}é[‰/,ö¸bp(µÁ€¶7ô``œÑ®Wj„Øšú(ˆú^Å>ÀÌœ%ŒL-é9fΊ-‰³zœŽ•8_ó¸u‘o=N–…þÊðZ(ü©@UpaPÚÉ3ÕÄ1ñÝy‡À³~À^ð ê‹•Uéþˆ/§¿ÓëáàŠþï1z+l—u(õ‡Gû+µ°-îø(ˆþñì…ñ\DlüÜéì{¥_lpx¦uIë÷Lÿ¾ä <W¥.À_ë[hÐï¬S=}<|5NÖª¸~ +<¬;úFš¾È›Õ(ÖU[øq{uÓn,Ä­õòDª²%ä‚8–þ¼¯•ç+Ì…“ãÜcÁâIæè"1“웪„$Á-¶ÈÏ[b³ó%6W«ÆíçzÄÌG$žÃ©P³1» @iS#ÿòæ +¦£Ï‚,*ÚLÇ*–©6+.WiÏûûfmçG3å•úoI#æÉ[¢ÔË\Št^’Ç efAH{§°Lý÷¶Û,IÀl·u½›³’`A|È¢Š˜¶ö^¥I.ûFÖnFÕͶéJ’QØÈHòÊ8l`·o*’,KÚõQÿ"¢·Ø•悳Ùy Fmx3mIÿÿ‡—ÿ˜d/Á¥|ôeWæË‹)ÒØ†¤ ¿=~t FA»©-ÙDmˆÖ!bèIòÁѳF À"S4è1I‚ÔûÏÎG[X %ó|Ö¨XÐÛõ!Hº …` b€ðß3•Åñô¨®‡¹ð@u£ú dí ¡Ð'ÿM#tÓÙK [êar*.k2ôíV-²Pœvò "€x_¼ñi$!`=Þhþž¾ ‰`ð.°Tóqü?„Àï7PÙƒ(`ú ×€üüÔ€%•þò½ +}þšàbá Àÿ+‡gƬœá}Ÿá±›Û‡^·l jñ~[€3ø0ž^W^(*f°|°„“à`è³ þ}AR^/[ðUÑ~³8‚í ¹˜ ¯x +Òãû¢+³ÀµÂÀ`ÄUÉèäE7ñ¸lXúð uêð¨<#žæªözy€Ò2ñ°@ù¸ê€\€èrÕ <n°ÌxÔ[4õ|Ë,À¾°,F¥*üÍÌéãê,€ÀÉDŠ{êPšûh*8ú+,>ÛÚR/”üB×»Lwø4Ž…ÿå @¨K>Î3b_X˜À,€õ> øpxÉ B¦á]÷îp±@0ÿ[Ãç+Ⱦà%ø™ˆ.ëÿ,Ëðß›°ôöOŽ„áVä»KbÎbÏœ‰–( Pgñ¾ÞþÑ!¨®À ÀÐØ>©íK8è úúCc¨WÔ¯--­ø—îÿXß?þëû«=êßte6J“µ(³ˆ×Õ*7ØüL”Žò¤úÓD !øÑëŠþU0A·ŽFÜʶñ3*š;jÌ"À¸4ÏB8&¯, ++eˆ€Œª+ZEµ•fCœâªÕÙÙH]‚8AõtǸ,~ƒð!‡Æ6W–ÀŒ‘¹ÐnLB]_ÏXÕb“$ªW>öj½"RÓÎóSï);/cþ× `ŸÂü,Õ³‘x&ã±—P&‚ÀÔPi“Òê `;J?e+Ãu ØUŠ;ã$íEŸ’ÀÈB=„‰ÅK.³ÞŽ2”î쨤¾i/'^š`²‰!U”¤C|4ËñzyN2Wyƒ¹†¿{ù2ÛÎÏ‚·Á$OãªÚwÚ¢gò`€‰“5$YˆT»ý%"ÖV»µUµ›ƒ“ƒ© ø@hZ©ìn¤ÎhÌ€¼’¸¸(ž$¬”†l'@#S€ZÚÍÜOiä…€Pr©Œ0°›žz–f‡=.ê—ÌHy»"¹ +Y³„#ReP!:e§`¢Š?½7랊–£¿»…»ýÞð/n -ä TXDMô¡F$üW¼nüºUš·—ˆHÑzaq†h¸ýç?‡ÿoþ`P{ÑO€î¿t"÷9å[¥øß°@±„Ï$H÷•@ñOôBy…Uþ“œ`ø—¦¨p“Æ~*dváëœ{‘;ƵKT­†Ítù'†}t‘Óïð Á >~ëKj0ü½GÍFeyá ·O,Àc`Ýw=`3€ÀÀ¿Š"X£\Ñ?ˆ¡¿àþ»DÞéÀ^/ÉCw’ª + @Pfï!ˆèYAi#U̘»[Xnôà úðËuf½Pa0Z¾,^€N”Ò—¦>âYp]T÷&•…€zÚ%„ €0 @Ÿ‰0±,J->öÒñ|/Æy™î(†;á¿þlPn¶8fÀ_ÑüûÃL‚¿`À{œ¢»jüýK#þô<Ü ‡Jú­«ú¿ÿ"VdYÝ?Ñ‘ø-jü^{K]œú{ûÒ“ÒãÑéŬWºý#´:7ð÷¼Iê?#½þáà ?æ3ÌÏ$/KÝUAÿÒÒÒÿÝ—B›Èè_ý=ZKŒ­tscQŠ-“ÓÅ3FR9ëÛõ:|²jT¢½6Ê ’];_ ;é]ð_-¥¬–|‡r¬"H¬{Kêw‚®~îUGQÝžd"Õh…†š¦ëŒ*(I +Æz€0)—œ2·=-•‚mB¤6 dšhŸ–,Á»ŒÁY)ÖlÞ_¤´U—£ŸV–#)¢È;Y¶]5ƒ\â®èüa= BÅñö$а½.2¶3‰± v;;fU0t3QÜ…5WR6¥Qºs–ÁÙÜØÜWšícãZEI&鋊"®W¢xnâÚ°cÊh‰‘„Œ)IÌ€´ï®Ðì– þ·!k3±{²È%–"%H®2ú‡ÒQd=V‰D÷gŠÕ•¥ÕOz½OðA è¯Öƒ_ ý%üÚ€·§ÒßU €DßDM>þ,^¼[¾½ÿÁFl„„€ Ë—S3©9[ K¤œÄF_¾bÎ + ØŽÜnZÓ!€Âí‚8͇ÔpŠRå0HùÙÀ‚Mw¨O±þæÂH½uÿ7S¹ÑŒ?Wë‰9q­«y‡%`c£$nL¬Aʧ(½à ?ÿëŸÿü¯n670O}A)<¸ÿ­Ö(|þ’½”yö¿ºQàB(ì5+晄ÓÜe¼ßwGSð6~ß»]S_ÕIaà‘Iaså Mõo/X]+¯Yý¿þQ@ÿHŸú€€²®>Ä ÎlZŒ~XL|„A +<¼Ç^³Ü«ñº +® ÀG×fLž¿É™R•Ö«àÕ´ú#[vb¸íY Ï;켩 oö@]Vð00cžqÖ +½dS €¸Þz¤¾„­ë51XLá@WÓ5Ü­ ¢.ÍãÈŸ + äŒ_òø Fìp×ûŸ-ŠMa@Y yÅ x,èÔa³c†¨O,¢Û8þ>}¨èuäb6òSó«>’®î8Ez'¥X(à¾×Ô ÖúøÖý_àìÃóÑɉ0}Õ×ÏaýüØä¿;]ŸQ² °_—0ï²´‹~l+ÐýÚáÑ‘®ôŠÅßÞÞ|×–þÚ€+ˆ?V³I±7ÓÏÙk#ÎOÍ/¶6t ‡iT©Ç Kë…ÚG›åÇl6»o‰‘¤*5£åÌìœô"i¼ + Æ#C Ø‘™@5Š$xHf†`œdfé0ˆã:¤ÒÌñ@{]·/ÚpHR Ã.YIh‰Xw/ÎÍÕ ®§IRÉvô-yf¹¾½üà›v[°þ$ÿöÕ«W<OÓfvÎJ€<1BžP™pÀT açY%Ë¥„«a0 p ý”Ï*kÅ‘TÕ<’ªJ?Q°ˆ…;3jU8$‡½ë$Õ×¢6‰äÁã¬Xã[Áìêú‹ˆFiÒwyfF_ÒÀï^fM”=Ö6 +SñÒÍt]͸‘æ#q´™buÚï +þW˜Â*AnŠº\[]í ˜g‚0üëÿëKix5ñÈgJ¨' H˜³ 96‘|„`Rg¦ã¼ž¾T©¡û»²T€»oÔ  íêz¶ Öi—@3äÎÔI ÷%SþõO™HÓ´š^¾æ¸ãà + +¦ðR'‘¶û©ÕPÿënøXÉJåx¡<5(ÒÛÌý@ Àüÿù_ÿõÏ`ëëä¡/ü_$ü Àu ·LŸò­rþËöh4šM$€›mœ›é‹mƒË`÷ô¶n­aN¸;µ ¾%HÀ ü6ä7æÁ,?Yû‰µ/8)°vAz‹ß#õ_iÑ#>æ†ÃM¾'‰Ð¹Ó‹ÀGAe4Ã×Ë`$vp×[P“á™ÂÙ  Ñ—-¤Æ¨£v‚€Á@:ªmÕpBµ0`¸@.YÊ7ø„Y žõ Ð1"±€1ª[·¤S]·Ûw + €´a%ý²@ñåÔÿo´ý<‰[Ýfbƒ€O'ëHÀ·Â>îg—,Šº4ë!€¹Ù¹K³Qg=àfi®¼8õ,|†àƒ¿ºÑ@Úö$ÃýͳBžUú³ÀÌGž€*úC,Å,€²À­Â ‘œ/þƒáy€_ÿ„KŠ˜ÿ[WôÿÿþK8HçÇ×}}ûµû5cúAw +ízŽ/Dz¬ôÓ«ÞgEAñöÃăîÉaÿð {¨°pná?o­²?\Íø/üu*:ΛÒì¬Ã´øVkkÝ€¸ÕI¥˜³éoRÐÁà5…à* ¾heªæÆÆM\•ƒý¦a|-p¼ cûá¸<ø\zz5ŠÚ4.DÑ|•ìÖYÜ& —8ÜI§L$×{Ë3Ålƒ`î'IÄ&šìÐW?JŸO—†à¢zéörû|t<Òãcm?IÄz¶%Dvv´{ÛÅóÑÛ3ƒ½Á@QI\˜Ði»ž1€qÌ€®í«U­˜µö:/nùÖÆÆæû–¤©µ¨2ÇÅcC× Yñ R28ÎÓºÒãËÈ!B8 ñg’4Œk qÍIýL÷FÎðì,>e*ÛápøSñ:©8‚d4±±THÚÚD <«v{½£^ ÀÊ}¯þR{ú”})‚±IBÀ¯/{õ.üTM7%‹oÍÝÁ!Nj@l>ÜSi‡ƒ F% v´Ò\xž +¨Ÿ ªƒáiÇ“1>4ˆáÑyj‰”ÚåÜqb$‰£ÐäôÍFNÈo*‡ùÒºz/»•ç< }`k=ÚÀ[-wÙéYúb‹]“u›8QÜ’¾¥yµýb…;wçî`pôwnëïÝŸ¹¹?ýß¶ðGÎ^£É6Ȧ¿h¨ˆ`O°¼kÀµ½È9Øí0ûF À0íµ5ÃQq[Ð&¬—ô`ô×1ž!’u‰F’Ð>¸)BrhFyD§@€@ö¦¹xÝDÿ/Kÿ«k?ÑÍ€Öþ„·û¿ø~ã,|ŒËBQ,pwb(|¤#‹½AŒ`ðçè ð"á glõþh®üé{ûгuuÁ€GåK³&>È!—,²+>ö#àuJ%@@Ž‚€-s:=…À§Üûa€‹€ êûÂáÛ–×`(¦¢ÏÎI‚ +YwÊæJ‚L[ÿY¼©h[úµh €zpê…T ÎÆåu”ö‰ JeP …,öQ°”%i¼Õpó:7¬èZR³¾¾À·UJä.; ï#°>èÿÅ…p1È÷>¾uEÿG­ŸêÿGìÝ϶ýLÿ´÷{µ¥š½û™Ú/. ³Ö³«zäh °ô1ü3üß“”Е4`_®ý•ÁÿÔ—tpÔ¯±è[xдº´Tï_ºO6ÂÔÎ4݉ªõJþŠýWP¹¶6$©­³’¾Ê^µ®ª• O6l óºTGþ•†ž6Jsê=³ª‘äpÄW†zÔ4_“gÅ”Dy~þûóQÕql +tÓèc8©ZÕy±ïEá­‚ù‘À—:¶ogg=–w;iD;N[§ùã”ÝyÃþXÏrá”UBh‡1&õ\ÀŸ›¦{¿Íòñ¾gÍ~QÖnï$ÛQ½þ ¢ôØXÁÛ%PH6cöûšJèãÌ€´x]BIçº ›cµìT%A)$Qe¶Ò4@Ù)iÊÆ´lF£¤^‰ÒoðPð@`ܺÝEË^…Pžk$ªž$ óáYºŸª”¼s V€,EPˆãL‚¬oŒ›û$¥jvj0…K(®j ÝZ_M’¤°4ñd³Ê“£© @Åó"O"‰&·Ê[ñÆn2¯Ö"ftHG;úqÎ +’P’äžãÖ` ¡¹D'$P'X¡‹ÀÁÎ3jW"U^ *¤-”`“2•ÄÅ ³€¹¹éNÌÿƒòÛ$±E s”(‰÷J° @WÖ³¥l1¬1$m‚É·ç>öxÏŸ$üÿ×?ÿé¿þ¾ü¾ƒð£ráë=,ï¹@ðøA{4%ʹHm¹¿ÙÀ)¿Õ°@#2PqÁA%è97“f²#R»úïèXÒc³¡G$x =DtŒˆý‡UëŸR5èÿ5à?~Ρøædrìï©€ÕF— À§+êÍÀèt€cym€£°0W®Ì#"0J­8¦ë …º@.Í¸É ´Wáœ-Ìà¡k³.,zÚ…2:§®Î;‚…äb/¾ù*,8L,˜ + €ˆp…ÀV°l4R\ø\¬ B©|m/d‰ÙÒÇøÌ° ¨í¬+Ÿé‰‰A,Nxƒÿ-âªX(yÄ%õF€ê… øHV¢O3 釬ðÎY¡9L-b,ÀHƒSŠ&º¾R2Eü ûs¤OB÷n]Ñÿ/ãÿ³g[ÅwOXÚÏî~‡Ý¥U!<º—txôÿÕÚêÊj_LÚ¸°èÍÝDŒøëPaúÿᨶ:è÷%$ô»û,új¹AOã<ˆåw ¿65IÕžúyR©ìdQ$pf­½-|@áyì>Œï¨æ×l™ ¼båŸíˆ{§k4ãõlKjÙ¸“¢¤J|[òãØY[Co2~ŒS°^%*ôüÓö“'êpXvÔµ$†' o‘¨!p’þ¯NèØíÀ*Q]èÿfÆzóäF°|†.Yô¯V¯Ýè (T*§€Ðëü…lQ*UÊÅ,€Ù½uR]ÊÇ\<±˜“}¶¥ÂC¿Þÿ&³R|¯Í5 ƒ×}xÃÜÌGŠï/ð ¨…õ7¬ â 7˳”t'{ø[M$þt¦/ÒÀ­7éÿ‚ÿg¿>øõ¾‹)@È}•eD°hélK«ÝýÁ +­Øúˆ¬LÜûBþŒ'Ц[c¦Aw6¿²²*]OQØ'êB‹ÏW+Qò{9Êó½\Ò—®åã1+¼èàü<©nëWâÿÙPU6V¶ó—ž-ÂI˜òN,½]å­b–0«vOumnÐÝE‹ xî3'øMBÀœú€âTæôÜ”¸ðçP½Ð 6‰Q ¾lÿa¯™·ýëë_%üß`¿½þô_ÿä/8ù¨ÝÒ®Ô»h¢¿pÊœû“h˜êr³ÀM{(»Ÿ •'&€·ØtÂ@ÈnyøøëOWëa¨hç©´}¡ýΓ'ÔOžì´ýÑùŽDLDb/Dë¸ÕŸ ÿ¡ìÝaHÞ¯U ý¿ZýÉšÐ_ ̆Q;5„œ|.]qZ;¿˜»wG¼Ùð]®¼6 @…€ €Að4€–+½JOˆnZ ,-èMa@ùGFžË€{—|X PE>æîEz(hÃXBfýÏ©/Wf< X>œ™Z£$ÏîŠ*x[ØàíŠÀÅ:<„àò^p¦O?E²PäÞ `nÖE„& Y*Å—|¤ÔPús,p­óMf´[Þ{U!²W!k üu.ö¸°8唟Þ{ƒÀm”?Ýe€Á¯€òÝÜ¿á\_·.ÿ_Áÿgàÿ›ÿ°¬ŸçHÁ¯Ý/º«Òßkµ¥°ÆŸT}]à þ÷ žƒµ^­ÔÛ?êí¯àü?8tYè}ߦ=_BD-Žç£ÙÀDê4ðŸ +òÈ‹òˆ„:­½­2‹XÑvÍçDQ4‚o˜›Ä^Xw‹Õð«Qœ‰±¢uZÕê(F… M(–ixqŸÝltž{3鸂F–÷ã,Ž¥zÓ´‚5*Õ= ‰ëBnn‹1eöìä0BÉ\‡3JÔÆ&óߥPcL”Öœfc x?ÜMjð? ¿’P°í`OH3I:à?H‰§3Í õÒßÑ8JÚíóÎp¯5ÌÇùXX)naN'‚Úm6ùšRYŽÛc½ñ=H"¤rmUIÔ¹¯Q +§Y³ó_Š“·v™/ N¥âSGel…aj¥Na[žý Õ$Í,·ÇgŠŠÄªßIТÇÔ'öÿBˆ‘SÒèóŠ„)‡Uy ñã$pÈ{ú¼ÝŽ¢v~6ÎñSâè¯OÙ+º{´¢f¸ÌK¸—ìï½?8 6‰’þ‡Á Xô§k;;˜Hnül«.’d;ŠJNu#é‡Õ{8áF©êYÕyt|œ3:n'âö*-´¾Ñ¸rü¸îL)„ŽŸ«J Ù“¸õ<+–¤G +ð~ÇYþ@ë*£2z99m·7‘¢(O$ж÷ijª¥Y&‚J…¨Š0›[åúýÌŒ¹÷[H¢)â'*é,;vfX8Ž£õ4-œ€'èëÖGúš?ÌqzóÿíÛ‚{€ ÀŸÃpÀÔÔÆEXtVåþ%ëÜ`ÐÍ÷˜ +¾oljÄs4sýÐ +'6€×ü86Ûg J˜Fs-ÌÁH„©(5ØKù‡ÚO2íüBÇÇÁŽ` + ¨ € LUJyªÿ« +ü—¬á”4àÞþž\áìÆY“u +[àî~rb&v=¢û¸M|ÐKA$þõ®É,•±BOZ‚¸Ñf‹ì¢¤èµiaPØÉJ€·¯Z|î²àÔ€¤¾nÐGza˜ûpæCݘ̸WEX™a‹ãj5VÍ3I*]­4mFf.‰a”õÄc+–à¿X ×8“êRÊ.,âfB À·…£¯ ß“Yi,1ãõu,贰е©F‘˜bX€uÞápã,€÷_@Äm¦;gÂõ `úA +°$À ôñ-ã?ú¿Õÿ üÿ¥lIøµ~ÂÀ}}zK?“ªÏ"«KKûoÞ×ï‚ú–àÔúShޤý‹SÿFÂÑjmÿ°?À*`§AÌÿRýW–jª‚´1Ç8+¢ÏÌHinªÿÇjÒÁ;]<6Ïš­jAFõnm‰©d/`»Ø®Ñý·†qµÄþ44Ó¨±–Å[Rw…ý[¨,Xx +œ“fýÁr½™<ÉFبš¶Å³Iš|ŒUçS‰8VG1¥N®x°ÈåÅÆl©gÏ­Ò¯}¼,È&Í_³,ñ¿/‡Ãß ‡§§Ãáè³0tÎuaE=ÉwÓÇðHÌäR€ˆÿ‚:/²z{Ôìœ{DZRDŠ1CÉ8=ÿ^ +ê7¸ +¤bLOêêËuÉ jCÕ‡*³Ön>:òÑK±S'† ÌISZëW¿üò—,¨„Óg$x=Rn?·‡æç”ãáhÜþüó4gXÃä‘ý*%fjujê8ºR@½<©¾£`§B¤šÖ& Y,¢#žDˆ];kŽP˜îJœ¬ VŽjO»½îÊÊÊýŸÑHV‘<U$€ÖþÕ¶ö÷+漣·äž™›]c ÈHWê•ÒÇW>®DQ¥Ê5h¹R]^öѶž$ù¼ž†>ÿ|Ib;ª¯ÕJá–ðS_þ#9¿jíª½0¶±Áœ«HŽ..ñc½9Üÿö·ÇÇ¿Í~{üÛ':ЕoŽõk@vRZK˜€b¿&N<ú[¸¤ÿƒÿ^4˜wÓƒ „"ØÅÇOU%\ö€óëâCXÝtÏðtBGQX&ø=õÐÁÔ€Àk|(^ýNtÞeñé†Y¯Y”(ûÜ]¸ìÀ­›,º©té Œm¼©)µ!QH÷‘|¨g/|Z. +Šl)‚ÊÇ3õXÚ°bT°8úT…†9ÌÆ[·Š(mH0¶êÕP^¿âð™K´¾î8 8) 'Z@Œ@ñ¨ É{°3Àï>h €*C‘Þ}—ÀM³efpxÉàZÒ½«>Y.ÖðTÁ;ê{Ì?À¿/\H¶\ÿgóŸKøÿë_ÿš‰ØBxõ~­W[wî±u{¿·Ä&ÿ½þà€(Iiƒ8 +ÿO½°@ïPâÁJŸ5¸Á$ï·ÏÔ%zuNU_šQÛ nkêûbžÂ\²“eq¼<öä(›’y+ŠÇ<ÚÊΆF TœX£Bu:¬ùøx¢î¶†‚T–÷]«àë¿]Í:§Ë GòKãŠTÄFTb~‰¶åxAfÖë'¬Nb5þÉÕµøSiµIô­#ÁÂi´‰€¾ Ýβã5ï ƒ’msk<þíê|˜FÙy3‹æéÆÆV§…½]é¸ EÔEÉ¿d£QšJ\g–˜Y¤tU!º(i+¶|ŒËƒ$6½~ÅDDbˆ²C•Óikk'Ì€üŠÒoÈ^ŽsiÏãã½pY ¯ÕüˆðKéuW˜° +ËQ!…@±&àÑÉ{ÏG9sÖÅ2ÐK?U‰4ÛwÛ˜'€cÑ?N†= ÔäŽGãóñ«<=ÎG†óÇyÖΆïNǯÎ_~?>ûv”çÇ*ÑóÑøù·Y´Ýíý§|œç{ÇÚiömš ”Gc¢U‰wF£ÿ4åÿ‹”_ +ZÒßfúH²H•A¥†Zà#•¡7)QOö(06û»opœ“¨&Q«˜Rñ8Ëž¸úÄö²ÑóaÚˆ}šÂ sæ'’̯>þzãg ¿d°|¸   þô§?ÿ‰²’ÜŒà=-ï±@ðxÇ^°ö¸ùsa8»ñÏÑ9ý›lxÏN‰9þ%¿\ýþÆÿo„÷ß|ÃI8YøíoêØƒà2舘 ? U´ÿ ý_WƒþoüŸ¨-¯w>MÕ wU[w=G&£‚RVõçXí¶Zj°˜¸ánê…%2ã8j»¾ÅÜÅÚ¤)m”ËÒžçŠ ÐÜ¢O…Š%, +IÙZg¶J«ñQv[-%^t_´%þ 'Ê[ö&‰?¢n&ë›UW¡þ¾x·ó2ÓŸ7U±Jo¼É­¢â%Š­‘~ªrÐ3âŪJ¥\Ÿ97§ò’ªiÂð¥‚ì¦Ñ¼eÃq<ŒâÇïæªzÝRh=ÿcáqE‘(ŠFu°“ÍÍÍT)¥WŒÔ~¼Zší¥YœEŠÑJ×F¼¡_ +Ìr@°L|¼™éí0 à € +X)hDŸn^¤œí*MëÈıž* tLª…Ê8îü8Fn,–¯Ëă۷ÕW±%{8ÓÉzêH†—à€Ûû†þ“râl(W¡3„)rwïðŽuÕs¼)Rb”Š„ÆË78Ôÿ­+þÿ—ñÿàà×Òߟ¡uùϤP]–ï¿¿ÛÓcûèý«]IXý‹|÷óû'‡,ðûìÁ×1  þ‹±w{=ÊÏ\0nÌ—bÉJsª ²´»« +”ÚP=„;ÍãJ”¢eÒªÜÒAâ­ÊFi´·]%aÀõtCºk4Ò%ÌÙ[RüÕˆÖª¥y½#I³çíJD½¹ M`oŠæŒ$€(…ìj%LKÙ(3®. g˜¾— ÄRŲ'È+Åžy¾“3õF JÊC¢¸’‹bR² )l0|ÁEv=e‘nº±Q÷jjb«‹ gyÄžA¬W ¶rÀ Äq†6*–ÕÞŽ*Ñò‹&6ΆgŒË+¸š й´0òWKkqK…ê$í!ãiDÑrDÁ­õ2šÝ:ðuäŽS%É#X<öT6ÜT%i¶Ë¸M6ß/rŸåÿ?æþ®7®,;ó)ÀP[h›”ÅdðÆ„Ó9ÿtÆ *YT#˜<ŠCEñ#q˜äI*º2meeWÙ…FÁƒÄtÂ`ƒÈÁ\肟ᑌNÍf”8bMºÈ¶ RÞÕ]~„ò·˜ç÷ìAR¢^Òp»g¯çe¿®çYk¯½÷qS¶îr @óø+5ÿ‚9š¼{ãÝ”>7ÄŸÝ >€à°!þÑMÚmÆ5€V%p¹ˆ£ *¢_1Öy7,VI–n·Ú½¯×ó-!×°W½»z§ ?£³|§ð,OÊ”z×—!VM²¦\ek¶FÖå þÂ(eÒ&Ó·)„ ôzi“y†1C^"—+J>þ¦a§aé·F(–e¼*`]ÿ—¯•Sýô²‡,ÿ10ú÷ûó€@~§~÷ìé“Çöö{‡G‡ôiïpopxòè±·O‡»@GÿÎOß> Oß={ªwß=å]åé·OŸ>ytt¸©†ý¾Š©'¥™lö‹Álðãǜ¨óÄ«÷ê™öèݪp£dæc€]ýHÌ¿ÎátDàïnÊÈþmýËôßÞ>(”Á`o»Ø+Ä{z»§Ÿô›hÁ¶ÄHeÂMq4<èÖþ'°Âû1þ.:¡ÑN´kWY-' £køÎ²^>W¹mBÂßÿÂ3Á`À†ÌC@Çø¡k\™:-ÂaHäez¥DioÜ£NÝÒC¿Í²²‘n8Ãä`?•»WH¯4f"HÇ‚T`RÀuÙà nÕY8ŽUJf.©É)úJŠºëJ‰˜å£¤›CfÊLŽE¸Ú‹…xdƒþ +èH}ëÊõ$€õ™«¡ãøËxZd+IG*&¸×¼—‹À®£’ôŸîÊ;Hp¿»ë=ßû "ù-• D©Ûê1)P´hŸ\²ïï dñ{9¯×’;­ÓYÜ$÷&ã(³àÐÕÙ2Û~L|%œ‡ºª1õL˜yñå¿ß\Œ¿œ#@Á¨y°I4+Lœøì(@Xð åÿåÉšÌD€K(¾¥¬6§¯(‰Q”0^OËS‚¥Nd˜Ž©Ž=ÏyÎB€¦ºn™ };Èë«Ý<ë­cuè«qþ¸$„Ç?EZR„ÖNcÚû'Ù›‡a)¬ßûpÉ3aÆ‚ D°ïsqªg¾òÖÎ80S +HÖE90 ý…™gFûÒ€ÿ_çc< 7t?2JpÀÞá£ç Àw½ÓCàÛSðí³g€§¢"qcµÝl·?®¦›2¶ûÅáCŸË˜™¯ø‚ûT£òf–‹|“ÿDÚŒ´ ÿma¿lú~Ž™/›¿å¯Çô?<ˆÖl( 0€½!¯‰Ë@gãH}Ñ ×Þ8þûŸ×1þ;Ub +ž³¤§¥3šÑÊïÓ‰TêH³(~K‰¨RxËÉ1ºzKh€ê<ÀÂHÁuó¸"®VTóS3mo{Ũ Æ n"Á¦U›©Ü0ë]T™Õ'5 5&éNÙØ’%\3HÛX^‰§#á¯>{/` Ÿ(É·Ü騀dÀªïÐH6¤:%Né£TWŒq7`F^«Y%ì”IÛå ¯yIåâ,Á€Äør†ÞÈKµ*­¤•cË(ý!Eô +bÂ4mè,™tž1ø_øú#æ@ì³4“¸t~žŠ¸Nc6.Iš—øz«òVXáÃË&–—PÍ\ —§®Qj"N2¥à6¨ÈÁÙbD´UºÚŒ¾·«€,«œ<Áò ?ÔDzr€1¨`yêëf³íͯ=Ù³Ûï +þ Aþ`Plëv’~!Ëï€\ìˆèýÁÞðB€«CiÚÛîoæø >€HÒ4N„ûŒ ÛìÇònbÿǧ 5't–eË ·Š1jl¸{À3Kª•¬¦Ü Ò5ñí\¶ððÖêA"4éÀ%/t(«u]•—†ÐŸÑĸt{%ªŽ©j«‡jÿa]ÂဂÅw{¸äyÛcá:ÊÉB ÛïXYT4ª$˜Ö Áž×…oÇlñ§¼‘ +[ù¼×s²yG—¨(â¥xYuMÕ²ÞvØå©«tf WÌ¢Yº"£ç ÊÁ¬ /“ٺ”ÀŠŠ’¬è$¼–]–Q©BW¡¸óA¼_Äÿ°ÄÎyQbTüKêÒº Šy9Éjöu@É`T–Y]o w_Pò_K*1æéêY© eúŸW²»· +"ð·?ƒä‡Ô(ºîuô«Á`c aºÃùGø;÷™§©OþêùøÿŸÌÿ/<þ?vþß„è@ܸ÷Ù§øõ?c|ÿsii{ùu ¢?–‘ÿÉgÿ/æl¢;|z™xdÒ}úE+ …ª‡¹{¬¤³Þð +f (5¬{l×îõ¶to7½žgj¿.•£ryÇ;¬g£f-?γx1•=ÒfǹKŠ÷÷ÓzT«×ºÓ5m7TÕ–tó0®•p”c«áM··0˜ #=‰úYÔè­ IÖ+ö7ÞLãz|}ƒ4·@äý¡"-§/æµâ§‚ÒNö¡’eˆ3Vp›oºîQ¥C€—!>Tßì¦5)­Ôë×JÔèá,r¨ƒ„çï¦Õó]¨þ1ÖHåy¿£,ÿÕc¶µOuµ,éÛ,uÇ +-{Þu]è#®òa7©GI¾»¿k¿¶cyƒt†£ž(@ÒË¥&”¦G(A¢Ð»a%Ýì.§õzÃ"n£aÞŽ¢fKTƒJü¸íbÉz¶ÓdóålXˆ%Ä{í°°B+[ÿ˜¡¨O€DÀk޼– ÉRåê´ÔÉ­¤?’‚Q:Ñw¦Œ¼´…åÑ* +=ñËZ:J»CÏ;£)á_-×ÿÕ©B¬ƒ¿]¢&Œþ­–žOU$Jò}Ð_ï¶ìUÑ‘± àÒŒ‘™=ü¢\®$c§B“PÌþõÀ¼TÍûZYåæÄ¯lÛâu"ü?ë0è^€ÀCÁ d|-(Ÿ8ãøÝÄ0Ä †Ž€yJÀvðØô7þë_ŸøN¹ÀK|zÒKbnÑn7ÛÉf» „Ëè—#½¬|}°wt@>öõÊ{†9,:4 ä›}溻D*ÀÄþ/ãÿ…ÿ)ZRz±hÕ2œöp¾UYAT‘Ô¥4?¿¶’¹H +þhØn/…5Œƒ)8Y‡ ÙÌÔ>Éþ§qè>EnhÑS ÝU÷M’lN +;aX F¥_%à1-‹·­,™¾%|Ó•0ž½¾ý×àg¤q{év²põ*Šš«'YT1() +.½ßˆ›J4«X‚hN¥tx£2]q¸·:M·™ŒÀ1KËÂZFÍÔ Iåt^%UD³É–ÎÇ$T÷®ÈÔà.‘U¥×àBE(¦P‚O]'/ÁÀŸéËú]ç”熔qÕ¬ 3©Ù!ÑãÁ=.73¯ªT½( @Œ¿tøé„P~Ò¯³s* LÔOø[Ò%| ü;¢W$Ë·òMt§¨ø^ÏÝGNñ¿Ü€ígŒÿKx–*FÀø›oòÉM÷Aõ°âÿ͛ɀ€¾ÇûñÇaË Ûÿ÷>ùÌôÿ) àão‹%”€^çY­Z* ¼ˆµ;•]*à”e¸( }+CQ­À*QžC¯háCO‹t‘µeþ«šQÂ’ªQS¸÷Ál¤`ÖáÊbažÔ»Ži“¨}£¼ù`üÇp”áÜÙªíD]²]Êv‡û¢#ÍzœþÓõá7‚.ëj÷Ý%JO—¯}]ÆŠ‰mƼ—™/ Ü Û³fN 9»@0‹íDÀô(Ž¥áÒwd·ÒиMß¹l{ÕyÐy7oæ:]Ç„n&'íH§HWÊ-‹ëC2Œ¾Ñ½d.c1^¢}Ø®t·Õñ" æ$²׳⿳¡r€ðBzEñ }'J|;JÀ/ýÁ}ü§¬ÿ7Ìâþ®Nêd¬”è¹Qç$ífâm~[dI½ÞÌŠ½Žú.n 6zÎ +ðÖœàX ½NÚKRˆ—=|ÍÆ™g:` –ð¯tÑvʃ)Q&LŠ;%Ù º¢3.“S;^ÔHq?­Æ_éËð]¶îðµ§TêhEêˆb*EªLÖ”­*éHÏ¡€Ø»7¨€?¶ûÿ;$ÈsðOO¨„–ÈղʕY&ÖšœŽýOÞ<÷xòìÔð»ñ:ƼÎð€†üó€oÏÄ€Úð°‹<à>‰€å_â~òRàEÞáÏQ››™P{SÖ¿ |»î…ùvPìçO°ÿP_*SüéãÑC^,GÊ!CŒÀ6Ûý.Ѻ[M­ë¼ý1ÿ¿T´¤ÎÕó‚0.¦ZSG2°‰NÛ'%èuT–Te¾$Êšsø~P6êÈX…: P BÉÌó’|”Žˆ9ªt¨­#ÁÁWºï“$zOFƒÿjø+A€Q°n+™môðU@ùuáâ5ýä#ºJ]ˆP|ÝÛËi$c¢„NIØC$˜A€¥&ëpy¢øÀr«1;íY‡ºƒ’Š®VêE–T­Úp¬„-A¿g¬Ôª»ýí^K¼( b“°5Ìp¡J–)gŠ•â–ÚÂíÓY*çß]&[Ï{ß®ý‰3³9Ô‰oÓ‰•èðWvÃV¢\ OÓÐuEèÎÁ:' •«ç¯ ®OU÷Ç?CÊô*o%³sÒ+ÌÔr´â«Sã àLqQ¸¸%9øMe +  >ÿ' +ðŸø±ýÏ&~ÒÈØö7n0òÿÉçŸAÀÒÿ3vdnà§ÒÔŸ|úé—Ÿ}ú…(€.̲@úÍ΃Ï>y›_îAÔh/*µžÚ6³0ÁQªB5’¬†i½žì•¥Õ¾Ø¯êŸZûSz%A,W¯ß¬²/³¯|=F‚PPKéýa÷½ˆš €{,– ”c‚ýzGÉð™ XZ†äýÝõ(mDRïXúÞª'íæÅƒQOÔþ8FÅ«Êg\Õ_s5”æÂ]Ðwýv‡!õ$.—¢#ª`> åiù±r‡Ã>Vº­èuµrÁù–HWÛ*òX$€¨¾es{ŒuÌZe4ûyÕó (¦ _ý¬ÌWX‰oÀˆÊ„ æ[…Œÿ8ΆÌ[È{‚ñ’¡¢-Q5A#Éâ@ข”ŧÄ+wÍlG§¨Wn‰T² ˆOKxØTÍQ”K'„ˆ 3Ãè¼Ü© +pã³/X`ŠMógŸ}NÀçË¥´â ”Ôwç¦{^哨ðá^Ô:²a\e…d}ݾý¨Ü…ƒyO-â´P~]©¹‡“”ê_jOzÏ +YÚ¢ç®kmÇ›9$é!é„‹}ÊF°€¥ÃU‘åÀŒhždö +‹k©;áP` ôZxyñÿÒÑÓç<Ý‹bs</ø—xÎÆœñ”1e  Fþa¯õ„O"{i꘿.¡Û2ãûø …ø$ùÐVþ`oäö ñ +÷ô8‚ <„ˆ,à)èooDô»}Ù¢Ü,«þ +ÿo1ì Û?ŒA¥­Ù}ìQ ¡C ªìñyóß62ÞVCA yFÅë­=Îyø“éìch:ѹ~~ŸÛCÐJ –Tƒ Z÷¶RšesêÏÑ€ä–ÉËH`SÔxy™]¦Ô%¢ zFÏ(Q¾kŒ I4—Ùà”‡¤ß¾,B#¬97K 4ÌFf1GEÉ¿*°˜((pv4–ºÑt™r"G(9~S–,Þ¹(.È–PSÜ›<<éøý…´fl— qNäråOI>ÈnJ¶ÔHÞg3®³‚ó7Ë"ÂzT7.ëÚ¼Ã Ž—¸f”¶–®•—Â/Áÿ½êÀy +p)K梖ÊG)&:ƒ(Jt€‹Q’¤žœL]š)ƒŒÖÿ¦2ðÿ|ü?Ÿyþߨþ—å~ãã{÷˜™u¸>ÐÜ>4à“Ïn¾}Co¼.À»7>ùü‹Ï?eˆÀ£"!ÊPÿEæÿÛÔUYUù¨Õ:EÎ*qK ÍruAßË$ôë꺋‹ ï»+§F.­·•íïg«Q·[ˆ%èj¸)H•« i„…¦yV’L5M5…ކîl5³c!T@†ñÉ’\p0vv{ÇÉl—Ù[s³sö`t|\ùþ°ÚŽñ¿í~Ȭ.Ñ®­–Ž|Äðq×X[ç $×:QлÇŽæÞÄòC—û,#iةDz0Ò8Œ4¥åUó^’¯û°¼Ñ°X-z묶ë–*ãqîRtd7­~P]pqgS<ÿõÝÎñ|€;ŒÑCN>RZ{¬³_t›¢Ç£Â[„¾Ã6T$¬ÞǼš˜”in+•-?’,Y yïAß—ñìD-sŽX9Ò‚Õ/ÖÅ«Y +œÄõ¦½å·0‚FÆ£¦Ÿ— @MK´½âQJc~fjæ-ÊmnÚå"ž„[M‹Í}Õj’æÝ*‹ýIT¡]U! HK•æ¯TgÃýfú 8Ê*§˵—,g<ˆZnÐÙÖ·D ÆÎBl… P@˜!h¡)@å 쟼ƒÖ¦¾bÖ¸âMqL¡Õ|e¿¼ø_õŒcžŸ ¯ø_Є°2sÆÐa†óñÜ÷_îð‡8lðØÞh ÿ÷öú{ÛJ9–>°.öÂ8€þøðPˆÿðèÑ££Gúƒè @Ä@§05€hÁmÖ +ê{¥à°4€°ÿ£3ãÿÖ±Æÿ—5‘\MÃ0ZX¶µ*´zDµì,-Øã¤o x¨tkže›Ç=Uë 3SÓ%=¼Í¯ÍÛºÕ§lg#3e”h¾LÒ¨ŠM!QïåŸý+b@ÀÕ\£ƒÇÞa&\ž_ÆæÆêÖáA¯êjÄ:@´b‰@…SÁù‘-Ï”ÄäÄcWás¸ i’iâuáMf#¡íXBbQº¦Lx–œ¸Kc6so)]‰‚*í9®še_åµd¤÷hOC) À½„m…ÔÃýà(€s@•ÔªÒÚ—büålÊ'’3“‚“½ ›ƒu®s¼’×(/mñÍ.‹¥ëæàŸB–Wò¨R$ìbVöm`Œ zäì/a4cLȤ·ÜêÞPðÅQ¶gÇÿe^¡c ÿÿo +Á?¿! œ‹x9@“.ð)‹¶ˆ|þù§Ÿ¼ýö_~ÊžÀŸ…¸ÿc6æùÆÇŸºb¨æîÕ¢|¨ê£rU^ aQ™%u›zÚÝ–Yž¾3<¥ž®C°nÌÂZ2ÉŒõþ}C~À7]„·ê×dM0eÀµÑ8ué¨ü8KÿIªÛ¦ÜŽ‚ñ8v‹ÞÝNoø`?‹ß™}íEõëzÞ¯ÑùAӻ߻eÖ¬ ,lÚà¨|·b¸?ÚõVW‰ËJlyë§äúÄlØó^ÈQS@”§Õ´¯þƒ‰g¨d9’¢7êÆC™Î¢…tmµ‚ÛÒGäF¢Üt³zµÛï¾3N–a<‡7Ô["-=ù‹ÞŽÙŠ +¤ØŒãl÷+ ÑíŸÐïEfg‚R2;C™à²¡¿+ç.IJ¾×+F«ÝcƒdX0º”ÛsV:jÖYi¢Ì²b›½ ¼PªqUüõYàA=JàhÀŸÝ¹s'}ÅùÕÍ‚u¥ê_«ªêV¾aʤ31ˆç%¨šS6J«ÙˆÌ‡ºƒ4Òç‚äS^¯¦£Âñ“—`ˆª°¬ï»<+°e0Iú§ßrHµéŒ\“ +@6»ã‘_„GúžJ˜¯…2àAXR©Î2ö¨¦;É2Àó/˜çqö'ÿÙö £þÅë¼&àÅ!¼ytËWz6ËpŸÄÀ¾ûØâ^ë`,Œ_ÛLeã‡.Kûô=Þ//í}YöCeQaüÀùG‡OÄNøÈ—‡'øÄŽŽ "…‡ÈÚb‚xÿì–¹ã¿SâðŸÌVõá•dImôZcIf-@y;ty5Õ$ŠRéÎ}΋CÀOΜwÀýÌ•+‘Ï]:~ššò‘j5nŠHŽ£žö«£ì9³†R"¯t‡tjˆ¡Ç°¬¤ë»Óke‚* û·û1Wö$gC!•M'jÿôIDATf(ÀDª%ûdÚ®¶©¤†/1×H†š;ûÉUP·TÌëñ¬WÆ@kD)-‘’áT™I£Z²KÀ“; ñô„ÔÙpm¦²™ x­ ºÃsÝŽø¿PFãr¶ŒSvF²HÖ…¿öá\9¾ÉeBí¸, åµÇü^ÏÄB˜@îÂT¤ˆ"|¦IkE§Ó„û\§%Xä¨~<cݰß~îþÎ}Ö“=çð¿ÿÿÏŸIÉýKü¿ñÉ_ Ý?½ù «°Á0Wß$¶þsÀZ—Äÿψ?aý‡‡ƒàØc C–¿€þäáÉɉì½{ôP àáÑÉ£“C}u¢g¬Áƶ™ø«òÁ’:øJü' üi/Ã, ×XÖ¹§fC$9Å…©.r:¼m¡òUïè³åÒ"6¼å!€RN/&Ì+=˜ÿ¥»Pr;éÕ"Á¨LŽSr êÖ¥’ÐÄ:ÃF^„ÙÕ&–—/]žoø8_ï™<( jÀj²K­ŠDªá:öR‹od9}‡4²9bè}£d¤¡?ÓÜ™70ÍJFq•”³@¤Ž<•– B·$íù7q6ê¬{¤Bb¤k06UÊ‘ÉwKtºSÀø?–$#>9\ÂϺÞÙÄwk³qJ–ñð¹ý•E5öà´æÜóKs/ÝÎ?síÚŸ¨ðlQ¹ž–w +„¶²/ÙB„&$ V:¨¸®’ðJ%x}¾§à<þ‡ñÿ³ñÿ¥ý/üg)a;Ü œˆ|¬wŸõï}Ævÿ7?ÿôÆÛ7þŠ@ˆNÿÉ_aþfm#½áFRR¶ô§jm&2†µÒ¸zej6f‹œ5Qwa_þã°šB'3ÈWbu±4f‘á"KYÿfŠºt’FgG¯ÓµœÂYêrYu"#Yš™ÑìKûÉ‘€¼(vìïïæi\‹›|™°Â>}tF§®ýëmö*g H IÂ$5Šn{Qé +b.ˆ ww‡y›_ImÆ«éõ:úN™\Ï»ùÖ°Ø)¾Ö¯™yi™Ýn=–J\ËÇóhpKKô3…€r¢ÙìÈ„À%N¯CÉmb&D¸U2u±FI²Õ÷¢lG¯º¶¬•lë.dÒM鈄¯!ù0Ðu¶F£zÑd*¿CH‚j€H ¡7N_™Q_W¾™þç±)êã!zM++’z¬KN^ÏrÆuJ8vçjÖ“nßK¥© À„Ø °à³°ÒËþ1eHÁÖP§šòhö6wk¦_JqY"¸SÖ!”eŠF¬ÃÄ@üHµäÿÜQ¦Þ.©Óû6mÿš6T–™I€H¿PêíTP~‘'f>¹ûJc{m¤ˆtHS’Ïè¢ —*(tÒÃL=ÑA¾ZØ%Ó?”PÔ‡9Fžæì‡npîÿªZß+=%þ‚ÀxlÑc¶ÿWÆlNbpAØüçý)XUU¾Ò ï½§/‹ø!aa'T(.[^/ :Ãû2ûüBzqÞŸ<Æp#åÿè‘ø€ €x‚€ÎìK@P .ßNR%Iö?–)ó#ÿ+­ü¿‰î{þ¡VâÙk-á¶ÝÑ´ p•ˆ8<{fèMù®½Ò<ªä×ÒTFV®ˆ_ž‘ÐJXFÜøÀÌCÚH’ìÇ Û«íѶP-ãõ€¤¼äÃÅl·ÅZä%ÁÚµ«S3•eOyÉl8``• ‹¸‰Ui¨V•Ÿ¤\z€Ëi¶åm‚4³êlðó¾UÆ)Ûãh2ܘW˜þ•õQm†lÏà?ZQ`ëù­VþÛZ2ROÔ'R"œáßLIe¾ rðz±xgºœlêñÀiq2‚аuÊÇt£aüž¬‹ÒDZ¼t;xdTä×®¡¿@¥‰èÎ^^>·S?§Û+×–¸vép dE¬mà +xå § ° *DJ¿XÆ¥™ùáôýb áÏÿ ÿõµµìûß3ÿdçõ÷v}pÿ{z ›þ2è/eýÅç,üÙ=l‹Î"Âàæ›T޹ɲ˜eø¨eC µ²Ô©ˆ-ÍU 4”tw±^nÏíÌ9·yR±LemÔu™5Õýš NG¹üwÉ0$sQ2­ÓX™šZä|µÝ¬K³}~h2¤ øÝÏï¤ãfšmÈ<ïõv‹ZÔJæ¯^¦Ñçø.Pè0Å[½Õ‘?dˆ‘Ñö.˜œnìï€q:uG™Ú$Þ(ÕÙíÊ[SW*É:•æIŒ¬Ã$f¿$½k%„¬„e€z] ‚´O<âT'$Ä+†<éži\_Ìûyÿ”ˆ”qÈ»7>ù$x”ý–®ò²ÿpA$Î9-Ñìx¹¦óª+4€4[sô¤Êõ8g!FgdÝÀáD)‚@‡Ò’wÛLÕBˆì`ÎD æ°T£Ò2‘eñ2ããÖôm¢ŠPǨ"é‰à +Ç4˜‘…%Rn8Ò²@âi +Ê Þ,ìœ^ÊÒR~›¨W†tA_²$,<~ËCmñyÀËbìà€µYoî;=€ªˆ*¼ÜÀ‹H»í¶Ú’'ü¶™ÌðÄ>Fø PŽŽ…ô'²õùÓ¿><~tò_ÀÉ£G‚~}懇JëÑá NèÏ`{;gÀœ b“%ÿ¶ÿ•† þ“j ‡«›ÈŠ«Ì3ÎzÆžÈàª]ÍI-ð7K„J^Zˆó™×6¥æUÚþ:xMWXS;TsÀ-퀲ßó_†å0©™´–ÞL«•ÍÉ3-8+vÙf4MjV03¿¬¤+ñLpêq²ª0xÛ¸‹Š#¹½v;ŠÚYÊÅ‚OëU7˜4[~9óÚØ­Ì6n»'xj1wI +ÂP Cð…œ­ ³šÊL§ ïB1”YoTO˜ÁÄ—­ÒÔÄ‚qUøÐ%—@™eDYQñ†Ô{N¸UQÄR.Íɘ&å¬Ü pŠ@f|´py‹nÅʦütMå‚…Z¨èúdÉGUÎ…:Õ¿+ýàR%’¥rÙßPDÎÆÿ•Áþ‡œ±ÿ…ÿúF àS&@>„ÉŸ90€(ÀO¿¸÷îÛŸxà'ŸÃˆÐ72‘ÏÐo½.@¨!› •²žÉ¢¤vU·^èFÒï†ÅØ€óü†è×G@êZøÛi%+àà€—$i¤–° sêOn8.Ь3Ìâb‹qt‹4üð·Ã¼Û]WYæ_#¯ùŸw†IÔQÅIyÎËxÍuOaAoX6»ËCOzmzœ¦ÌЧ5"ô’¼(vXó@7KWÙ[.½^7`ï`¡ônéà´‰@—'ëïx àœêéÛJîÐe‹¬¾Z¨C C0éB·åiUøÏb¶L K Øã,jI¶ÛÁ—Ô"öOý_Bš)Ur½N¼ÿp¸;Êëâ!t]d½ˆRÜmÜÙ^nLOÍÆa‹ý ÔJµY›˜o›§È;[E÷½j­Iì|ˆj* óiŽT¼EwC*[à¬ ÄØ€À€ò”—KY±ê Pù…[ÝÆ,ë†3¨rF¤=:ùº8z¯¬RÄ«ü¹Fÿ-0)Š(Dd½ÝoVÓ­ÞÖ×̦0îüo“Þ¬ØQóëWb²o'k5¦ +Ph¡ZƒxìX!—ؤW +â˜a)`#Ê…±’†DæÀØDmâ°•#;_V……7z^ü Šý€A÷ÂûU1ÿŠ€É:$Æ.8@­d5Á>Kñ]ì ùC­»mÇýõû{…ìÿ’H ßÑžL~bðûë_à~òðÑDzóeëþ²ÿEeùpÇbú^_Ÿ”ó”eæîmlï ¶û,;ÝV +”‹5ZÚÿ ¥¨Ä¶ˆ„°Ï?L%¬4víšOç¹™¸a2kGQÖÁ¬úþДz·âƒ“nÎ|_™i\™¸s$íDð3]çœG4­Lˆ¯Nõ :„Þ +b¸!=çõnO +~Ó[ZP«’yœ ªÜÐ;ÄÉœzTÒ“2àtÞÑ}t1’Î5ËN16ÿ×0¦ Ãhk­Ryëê íØä +r,¡„ß +׊´^lÑx¼˜¼Ú«bÇÁJÖé¤é:ë»è¯‰­)µ¤ÒðˆË û?ÐîÓ·ÏÊD}©$ZëF]%Ó#(!å-éS€¤™'Õ4»=® ˜™×mP¼zÙ¡;J•%çVbØûßh˜*¢HWǽ!~Õºc"` >`^•ó;Å"Þš7ûÈ‚Áü†©çüÿÀÿöÿÿ'ö¿¿¹ÉèÿÏô j˜÷»÷¹‡ý?ÅpïËß~Wü€>EøØ;þÀÉVò‡YºXm¶ãj²ArCK¤V²¥Ùé«ò¨%¾Ôù{ì©–°ÆLºfõݘÛÖ‰LºˆuvÙ¯c%ïÅ«²ÔYâÏ穦ºË„·gEW毕¨dt6Æ€]]nw¸1ñÔWW¯‹¬–€ {Dð(¯ö7Ê —íJ䃊Êi©ÆQ"¸»e$"ìÞ]ŠÞŸöÓwª^Ÿ’Ôeòv[Ü¥“ Å¡M‘pÝYÈ·ðû{)€’Bûí¨Þdì˜5M”¬Ý¬®n€ Ç5½g¶¶9d›‰Œ;Y×»,CûTÉ`qà°ÒϲïÓnµž"±.CR™ñ£þô‘‹t»ý­~/€ ÀY$ ¬Ä¡¯û øRÀ"zOX©&¤²ÀۊʆÆóÙ@=M¸Œj$¯;ò蜮fÖîª(‹¼÷@ø/¢ ÝX'êSp³HWä´Пã–ZbÀ‚ÐbAÍ'Dﱪ"~@kâ÷¤¤ `)`U˜²À_¶‰V¹Ñ‹£0¼´´¬ÊMØí 7'W}‰äýì-~>€¿‹fè›W{þWÄÀ@‚ù¯A, @¸jŒ×ÿ…>€fSæ˜aÛƒ®¢´*±¤×q~zæ׿Œ~Fú=z*à‡ èé ¿¡_YÒ·O= +€7@ðÏ ÙÝ&š°?`6€®¤ùËøXH‰ÿ‘5ô;ù®2±æ®Vâ¿©öZ9Ce:³¶ÒSÆ€YÂÕ%ê‰Â³DÊ<šíz`V˜¹¬ׂJ°ÃüZÀ’%ÜÖyY/Ð<ú³õðñ¥ÑÝ^=Ýê´ò¡Ž€g†o& tŽyÚLÁ1€gýÿ’¯ê‡p†Ãi‘ÓéœrßFâa}®¯ + ´Kƺ‰(è0Ö$*+AëCFd¨ñÊüi|0`øæ2…z=µÿ¸gëÿÇö ÷nÜôÀ¾ì~ée½Ãºg‘ŸaØÿüÿ}óÞ€¹vÜüø¦«Dúp˜Çl±S¤‘g“9ÉÈzÖø#pß+¢Шú–YÖ­×»¨ÒË=ùè¿*Ëÿx8½SZÝ]´Ó)ædbK‘V­Ý¢š…‹»L½GRÚ…”O ÊN\( ä–«€ÿzW;»²§'€æêjúÞœxDˆ`m!N{tù5:À;æ™"Êj¹æº:B"jPýTÁËÎEüN,pÆÞívc–¶)P'J†p=«ØJ¤†@ 0Fl¶ÄlÅ^‘§1l¡WQHÙº^ë«×â4j©—?jCr‹nÔ [ ³ÝÝ$$:Ï¢t”ç«õê"»Ã…ޣʵ!ÐÍïçg)ÀØpãÆôôÉà¿5 =åÊÊáYTõPJ©RD °!¥äŠ +þX:Êw}$T÷ DoàsœÉGUo±?Zíj ůñ¨¹„£E¨8@¥É6vè³›íû¥øv~{6hk£¿JI*ÍaI¥u„„å&&A(®xdC¯à½`ö¯¢f–Óò + £†¤å‚Mq‘ìõ7ƒàÉó1n_ŒÐk€î—­ð¯8 à‚½x.@Œyý2@­Ñ±i÷óM¶ù8òO)ú;­žß‡õ5o¸¬?”©ÿøéSúO°ö…ýOôîÑS=ÏÀÿPà_§*¿C<ÛÛÛŒ¨+—Óƒœ÷ÿGQ­zØyaäH$±E]XX–.„X7ÑX$i²VtëĨ¢ÕrCàKò¯ ©úWõK°¤ä•™O˜Ýêá´üŪó "Nü’çiýXtVÄ­œQý,Nœvkùzky‹QÈ……k3—¯.,3ØEs×RÜE `! <›(“Âá*Ù¯î¥xX[¯wü+,–7Í\]t²ÀØbJÐDt#õèå†P±‹V”¶E®Øµn¡>ŽFœð¬7Öôk'뉢Hí“uûÃ.si(|3WuÝk—`܈ðx*¬ÊŒ›]%«Ä +5 _äFOή¿÷›¾LÚûj„u?2c€rrU¼¢Ò€Ndk¼tÆ Ã'ÀÕÐWu_†Zy¤2ga™7n¬£Í-•h—²P¹4u­‚¡œÈÊú8gÿÿ…ÝÈsãÿ2ûùîßûⳟ1¦ý¯#? ëég½ÿôË/ß~÷æ§:%D +~üñM¬Gê°È“Å8eõ"®²¾ÝXŠdV¬¯‘©:CD£`°ê(¿5…gÅàöÜ›7–^å•,ßhzzÞ:A¬S:²¶·S‘f±R”?Í Î`½Á›r"½0.NG2¼ón×ë«]ÿ¾>æ¹G|;C)u•·:E¡Ó,²Ô®ÆtÚâ§ÇØyŒ|«-ÈÑuÍþ„xÜ8@˜Á›Þ®à}÷4 i€ƒñlàð@žõ„Íe €RYÆ î[xJüwpSè&ÕU&(&Dè„eAî$IÞϪï‰[¤²±Ç@Æj^¯vÿ©W†üäi9ó.Dþ‰Œ\¼¨7ýÿÓ]0-ku™Å#÷4¸$ÒZE¾Zºž=Ÿï|ÆÝ]2[^`aG„@=`=]d¾C‘¥×›¢<:ÚwÊ›·{5CŸênäݱàã™8öxà]1Ï+åþ.-#ß +eëÒ¢1ôM5¤b˜ïn‡:p(fæð Õ}6ü׫¤[Ï{âªéÝᾎèmÑxÜVq¼›ïŽ~ûënœêØÞÖñ?ýv´_à/ùzwwwßÿ=X”ºþŽ(¡*‰æÒÍ×â[ï±:[˜XTk-¨€0ÛeªgSž•ËgÖ¼º¤ö¥æ¥”;së¾<õem©²\Q9‹ 6;ž6_g@2^x›ùíôƒç<¯Ü àÇ:Nðoi*ÀK|ØßIbÿ…ý4öÿ!Kü¼°á™×ÿðDïeæî=öŸðá±þÇOž>Ö?cð€“'„0àáá ×9:9<8R–Y`¯ßg¡ÁTä£)üÇø—Lðßö¿þ+Œ5ªÝšJ§µ,²&²¼%ó~‹mF©UX#-4©Çk†¹%JÒÞ°VZ×OT6aªjD-&ÜɨRº2©'r†ô ¬[ˆ& 6 Xú©¼·7ÙHcÚ´>d[êÌüUS—ÊR›íDows)W¢Zû»y¶"Zy­²ÜêûÒiû;:X=†ž2Ì–+þÛîǺC/Å}EI†$)ò-á3€ ³MåL¹ÀZ¯Fê jÿ •„Ô+2ÔE‹b·XO–+¬x ú[ƒåI­+“Bv]Ýp—åÄUHêÌ…~©ð†£Ý3Gy=øzGZ©%et´àêrË ,BÃ&„Ì @|ùòå+W*ÌïrwÊ ýÞÌÒDIêÕù +)Ç€#PÃÊEIпÝtâË•yuâ…%òç“ -ÉÂÙa€Ëb†øKA`ËkTÄã%»öw¹+ÁFTKOE¡ðde%ï´ :¿BrTÙê÷€çíÆÿ/²ÿ†½Ïw?øø“›7~ M,p¿wïó/d÷Ê–?f÷>ýòÞÞþ˜ {ͺî7Y«žF’Õêi¡rrgRÆ4[¤Hçæ’a&«.à À¼3ž­VýŠˆ„¦õzº¦‚]j„Á}+HóT@ñ’VGeüÛb³Æ3²m×±³Ôùh1ê‡wI§7Jãþ0]­/ÖW³âx4íL¬=×”ç0®4ŠÕ¡0¨”Êjξ9ªƒœ¾4nÜhãW9p²(Á}ÛŒÂVµÎÀ©àÇÍÕôú9€ôÜ,'3x0[p}'ŸväŸó´º3¹½¢þ¤Ï¡ Iã&y" kB¾¤Zôñ j“M/êg¨bC~óý!}ó8]ĽKƒÛ’m|Öß+D$Â-b·ž_Ÿj®Öãûî¤ìàõ[ Ó]*ƹl+©zâGþP$I­`p‡jS¢9@oBÍ0¼ÝèJ) +pêýoà_)]1ºü«4&D:%I¯ë;tRÁ*ÿÝ6]X·7Aÿ6Þ‡.ôÃ)PzGßÿZü Û×ÑD&ô¥œu<;AПóxU|1ߪí Õ0 +õN¾–ÃãÿùÍo†Ç#—­)£n}qŽ•ͺAÅ·ø +|ž£BÞÒ¿ºÁÔ= XjŠ)$™$PÕš*•žê7g›ø`¨Å ÿp°åì"År8{>ï0æ^ ÞÐýo@‚ùÏ‹ŠðÕ>˜AÌÒ,ù;ÀK¯D +þý‡ÇÌéè¯aº€žÁ}þóO„õxüõ$nBêÿŸè Bô5G1.@áóöýA±¹Ùm‹Ì +òY}˜zã¿Çÿøâ€ÚJÀzð¿•ïìôòP:æ@ }â8ÙÌñ+,Ö“aWX-M}ZY¥öÕ +áöÁ¡%ÒM©~*üÊL$»¨ÿÊß9Í9IcGBcT¢³¤ ¸†=ŒÍ(~ý˜íWê>A‰Û¹ðÓK½é1lFÀY’_z«ÌÄîè›üæxÿ]Ý}>òB@IE1{è|™¬jÆ¥º¥§Í_KW±ˆºŸDœ‹%]ƒïHzšõ”´›'·+3³ºxP+lØQMÔÏ”òa_ýÕÃyôL—ˆ¬w3{‘õ­þd‹H¡½æç–×…JúbÞ ¨ÃÊ•?dcBn„rR³r¡IHµ½0yAè#äl¸ZQ.ªÏ [«2IUñ·‰ù»4UIRi;δÈ. >ú@ï™ûKøDPâ88PÕ9{¾-Hó¡íJ.ÐÉwFdž½]Vd]¨Ì*å3•XH𯫔û›ÊÔ öÿØüøÖþŸ|÷±Þ‹¼}ã¦þõ?]0üñå_¿}ãÆ’Œ‡ÔLV—ÒÿZD“,äÙ{‰`K".0'¶˜ä+ÓÓS855=3Q®ÝápшÁájËõz{]Ìgâ¿"8¥S´ÐñüË,ûZd,ÍYb@(,®×Z µ¨Ú´ˆžvò}L¹Õë«â˜þ4ydƒ½ß‚ß7cd—Ôvv’¨!­!WMÁE#œã¾q2·tm1O”…ÖT#æCÎÄìì윉ÀP=õ¨ß•CgcÈxˆÀ™—Ü9çP]Ýd0Øn½“«Á0(¿§R2„ =Rƒu›qéV½ rQödQÊâkåI¬Å¹åk™¸õ$d”€ú~G©L«õ¤(ÕPa°lùö y7^L‹o†ÃÌã°wî:%.ZD¨§$%6À]s$>4ÌE1ÿBßòu$vqé½àMø¼fjyã¹¢ÊøkÒ€Äæ‹tQ*ê£ý¯Ä䄨ïîF»[ô»Y;Ï6ûê¼Y›› +`uy15¿ÑñoG£aG‹e6tq+ÈB„ ¾Ú×ÕÞ–.Tº¤÷õñ7ßý é +!¿àÀ›£•€Åù(p‹ÎÏè'èÿÖ¬AÈ£¬-¦Øs!]É”%0Mûmž +n­»®üÙŒ2]JnG&„~{8°à¹€ñ^Îx­à{Íx£pßé à;Àõ•>}T¡@t¡½B©Tº÷}OôÃØ×_0ûÙÈ?éAýÇ' ÿú˜oŸ +ôÅžªúŽR’‚ðÝ©øZuºZªsÕ¹Šnq…æ83Ç6kO.òq労¸’ñÞÜ{\þwâp'.ä7¼¯.’Rø>$DOÓÓQÕy +ÌEõh‘uSÞè€i!ó]~vNI©’r¥¶Lú¢Ž–¨ŒTP©×Uz“,qšD˜™þcÒê.¦Û9Kçefzöf§URs!¡/ˆ³¤îUß9sk}¯›¼7jCižßúêpvö‚J”$åÆ0;wå¢ÊÜœ¯èj`Ói¶¢Fý¤ é8å„S§ßãõèú÷©€ÿûK€¡ü¬ýÿ™ãÿ0ïÿ2ûeÙ|óæ§Ÿ¾ýgú Ôÿ‚  ü;8ðãÏ.zð)ႌþ7½+o,…ŸFYÕhúròé0ž6á¯Ësb›[h;e¦Z7úU/`‹AœÆõv^ì “²Ì¯ò°’e[y±·vF™ø¿Ìi}€A“ucŒtaM8näC]³5ãÕëiS(ü'2ëDƒò¶tFl’KØÊVÆzüB³¡­‹ +ÒEöÊÑ…™ªëZý +~7ƒ€ƒ$ë9Ó ;ƒ—y ¿Ä\è1¶‘W¤âqL<¤9ÍÓJ‰á»L¶P’Õâôé#ˆ©©€!qŽ„bþÉÅ oÖ£µ‚• ”N€<ë Sæ:v:w•Ñ‚Ñm±Ý$®FIo¿# `ª +‰É¡0#¶HN‹»iÿ +§Ói±êVÒQÊ]0kýH8›eL)TY‹f5rR¨ÒÈ~n©'ßèBÅJ +`€àノ`Å[‘õíÒ@I):_ÿŒ`#xÀ}n«¯òîâOðãÖÛÀ‘~{úç<úrgBd™|sÞPÇ?œ³†…@z.ÚX €[ ¨ˆXÄD¤–.™œ. 4ƒw0ýÀ\:ãXSÍ«‘S‚·Ç€µ,ïe]¹Hö /t_ðo´€ü›ÿ_å⺷ovE!¶=ïßi$ž_†;¸ò,'¼ÿÑ“‡O=1Åè ïñþë;?žèýüŒ÷"'‰À #EàGG*ȱ†›jKí6À/0ÆÒ)e}Kÿ•¨ÆrgEu( ¦Nì³Ôä rQÊjúÎ*Ø\WчøSMÿB¨<²¤Ö¨ý˜ÕèØ€¦¢ž²Ð’¥ÞP-ŠãéÈgú᪖fS:A˜@b”þ22®ôܨ;„Ê„µqEf-^6ZSq“oõ Ý%V>Äb„Mñ§£:XU×ëâæê™ÛŠÚn·ßÓ«ïÔ¸å(À™·tyÚ‚íÒVKí..ÆNn ëÇ5ò®’Ö¥Ûb_dREÏ]0ƒ¹U3ÉV'% +¤™ +(fÛ&ý‰̼5[™+7íÝ.{™ÖO!ý,õÊÜÕJÉgm½¦ÕEÊÁuî×4½íeö¤!u']ù§gU—J¦ŸR‡D³åNeæŠú¼ _9d°Í©ID5ÚõZV˜e(Q“׳ººžt Ô‡2 MÕÓzU-ÍåMSBÙÿiÿ ê¡çíÿsø/ðñ_ Ù?ýD àæŸ{ÉŸ€ü7ï}ú1áŸ|þÙ·½[àMiªÎ¯Õ#ÓZœ;¬>ˆ,Ò¯ìïE±ÌP"-òÆl£³¬¬¼ÜREë€5æ¿°EuwË^w ˜•ž‘Ö±” w¤jãj&û’øÞ%ëYN\F(,«{µ•R÷¨½w€öö¹Aq%+v‹rt<—ÙæÙoÅì;]C;‡`K­7ð_zÖPzÎÄìÈÂ?ð¢à| €“b¤æÑõLÚ+=N!RzÖñ4oËTM§ûb½‹nqn“yÑ/ +žÐi4 ¾(žœOÙ‰i=΄¬ªj”à^n@¾Õéõ~ÚÛí±Î—ÎÑñ\÷ +Ï|´‡_èã:*Ú´.R{þëvÝûìÓ›÷n¼}Sô +ðWú]ˆà¸÷ÙÇo߸yïcÀO™UãÌûʆ„2ªFмÞd­èÂèɘG̦*«•¥%•Àh”wãa>üz˜ÇÍû»’'€Õð,+‹N¯Ë€¿ò²ž}ÓIêwÈç‰øèe4g"º¼XSµ’á(»ñ”¢6IùJsC3t]!7”ì'u©Å;³ä¡ðn¹†æV3x 3Ȥ¤(ŠA±³óê€çg„dQ£º…îN ÀÄÀa‘惲NX«ãˆcÑðn}1Õ±“lUXA·Ë71ͱ6œݽ]Wª•ÐÍ‹¬ÎƒÊ|O€ˆ~ÝãØŸ›ãÑꊜïaB† vŠîêõÕâÁ®(ƒN‘Ns0®ë¸Q”ª›ä£ÝÝj ÷E" + v*Hr§dš"8€Ay¬oS€‰@¿Z‡¼B‚€<KÏÅÈjW’7º ÈÀÈÛp¤Ô·›Ä@ýöxx0ö I_ã8€ ¨KK O<R<¯òüñbÄîÏxÔÄR^ð¬‹JH¯±èí³S_ÖÀ 1FýÑ:Ï瀎¿Ð [¾Q ¸Oblþ“a¿4ãË|²›„]ÿö†`?"œ3yäFù1ô…ûŒòëk^à¯gôù‰¸‰>ñ¯ßŸè£þ8G‡=%$ÐnÃGf/ +(;˜HƒJÝÙñÕy¥R$Ÿwñ Ñì¤ñ–CÀp©ÑWÆ“<˜3Å–Ô¨Ft8ÕÃI& ñϰ4ŸÍ +6ͯH}Úù©þ«FÉ^½¢“,ÌËÊZ›­õAdŒV½“7Ž'r³•„Þ Œk’©%ÁÈÕ™üž%¶šbÚY8CÏ>d¾9;4«Ñ³é*LõåV ¼²lûšÇÈÝõIf»Ò?ŒºŽªÖwúDgXXæêÒ±Åή{Ô¨¿‹Þb’8sºJ«;œ¦œ¤¯ǃb¦ÐtI}Ë!Dÿ¹÷Uô¬fæÇ\cñúËnLy!pX¢ÃrɃd °T3aß+GõtÄœqÝFzMPinyeéËË/êâ³³>Ï !¤œ&óãní°CqÂØZE¨{£>­C“„˜³Fr¬¢Áè%1€NeŸ×ehl´#ÙÉßK¦~^ŽÿÌýWØÿ7>þùå—àü'ŸÜx÷“ψÿÿ/„~üñ½OYX"vðöÍ›j5¿ã"Dw)¡P!¼é<¤Ý´U‡Áä–èH· c‚ÿÛ7ø Ï¿´ó'7udAOo¼Ušíü:³ýãÿ¶kÚ¶è’ÂmU•Ufø—4–“ÆJ£2ë&d>VYQQöë©,úoFø”9«pl™hDˆ|#®·‡Å¯r©÷û÷óQ U@,b­²ƒ)¨Œ*Ñìl$ì ¦µ[ÇúVQïž ˆ“è'îbqEò=Ar¯˜xÞ3À.ÖoʉsÜ^!E‰ûájº¢z'X`à€÷p’ ¨Æt'Y3O9ÊG¤ùW_í è!Y‡¡!ëât@7íÖ¯G]‹_ÃõͺuM(€IÏ颸ù0­EÉ&—-Žó8æ»Âq€üC÷C³KéÖtàÈ„E:›PK£"_­K­¨ùŠàÁ™Ÿß²a¶ÕS;@)• +…=ÓX5ú"ƨFX“`âÐ-& àÝîæcgÿK§€q %]ÆèŠ¥ m\À,€ß<8`À¼} Rbð}bdñÛp& ~ „>àœ¡H””€îx€ÀÿœàE`³xoøŠcîE1ú ûeë¼Hʧ@þE1‚}ã?ýU¢—ù0¼Eh˜ûß0ôïéz8éñ” ±í°Á8mã£& XÔ{QöëÝÝýܦži†¤GÊ=ç¿Z”zß@šÖwJ–-(mÒÀšŠR¯ì + +ÊzY$ÿÕݘýµr-H˜O'«TªQc™u‚}Ÿ±b÷Æe<V ú²%£Åä›ÝýÑn{qÁ©ÔUj¬}F ”­ó™é¸\$@Ïiæ(¨¤1Ï6A˜éSîÛÅ}üË*€õÄ碈]q=_Z÷µœ: ÆÂ¥©J”eõº,zs™úùØøçIX?Áÿ—ÙÿÌøòËÿúåÏ¿ü³ÿÿË?»ÉÎÿŸÜûøc±€¿6 @Oü1e‘uFY=}S`LïÞ¥9 + ·dçiT0•M¤V~³Û˜ªÈÂò‰Eq4r9L¶Å¿ ~^ÖG¸‘]“¤Ìè±óç;©jŠ(>Vo÷¢ÌÙÿU¥½TÎWìÓ³ :c4TAC–Æq‡—twAžû»™‡¤!c…WÁWOí„e¬N1‰¨A7²ÂÌy鈙 ¼>ôÆ2eàú’söùíYüÿ™ÀÿË/™;ð³{2÷o¼ýÉñ,ú[® ôqÐÑë»ÃA=.Ž™öÓŸövJ/ ðŸÕYŸ‰ÄŠ`‚œb@zeºÂ¾6X?5}¡z±öÖ¹!„jTKx–=æ®ÂHVÒ¯âø ­gÃûÜ3Ëîj¹ª¹Ü7YõÒyÙ…x¹] ª§aZ† Œ…O`¿¾%È?´-zð¹$ygö3Àƒ‚+Ý£\ñæcžbgç+AÃËgŒ÷à${Ê4ÑåOÉE€¯Š¯¾([ö4›õZ\‹«Q´×»í¬^ì ó(z_‹¶P â;Ñ ¼¨ÍÂSTàŒÜ5‡¬©A ž©G8 +è– E¢FG¯ÖY*†¾·ˆéA†Yƒ‡˜ ¡_¨gEg··ûÛ]› @õ®z\_‹…ˆ "Œ8^HÆx‡ïÇÃM^z’X(€—„¼ò1öxÀ8@ÉÇŒgô³v0¸ `ì9c@?¾Âð²u†þž³JÀs1Ì ›¿Q Àó³ØÏ€WÆkí0æ"öüoY@nO +xr8ý >àPç¶…ÀÛƒma±Çÿþç`}Ùôm¢÷?²ðD¸ŽgPׯxþ üÐ?f{åó©ŽYÐWÏ|ưgž=Ö…O˜_p¤üã +V¡*Ha9þ_«û_€rŠþzlxèHï{»±KI‹¸‹xÓ +O=K’ÍÜC”¾¿,íÒ¼Ymä-0r~I½T”ò6žj0"ó K­x6Ê}f¬;I/²ê‡d ‚7'¡Þòž:r›µ+ʕمË"îÙH;¤B 4ÿÖUáóü­FÍŠ ´Hy³´¡ƒÀœEéåE&´8Ÿò™gÕæ(ßâL6w‰¥V¾ÅÝÇ©ê‰$dNÐl×-=ºòPy²R–†.}1xÿÕEVTJ°ª¬ØïeÍz½žu‚Zñ‡v˜`'ëP®رUÏØ“ÈšÀ>´bGA•ÐG’ +[Þövu"+YR/²ýÞO÷÷ + óò ªz/Æ¥Kõ’8šŽ"Nv!’ÛRéÀ0Rá¹jÅN€›Fø×Èi À­31/z è§€ó1£ãߌcµ}õ:x&1,H Ú93 @à%Ý¢>Œ@ÿÆœñH;Ií©¾Ä8^ˆBxm €Ìâ’œ™ð½öøW] ð10 Ÿ‡þ¢yÆÔ-g|¶†½^þÿ@ÜD¹dåŸ6ùaŸVö#þÏÓûù`›ÿÙ“o•Š'•pN |‡ Œ]° ¯ÅX˜‰ƒžIØ"H€‚·E6?H•œqñøÿÿ+5®S)9YÏ–Ê€Ûcüç%N†qµýµº^øn,좭_•ùñÑ ls¹ˆÙŠ–3gÔ¾S¶úµ Kªå”Ò.gM9S…R1:,˜yÃØRà(±gÈš^)c¼¼m·¥Qèk•™?¡5+ïA]t‡ K‘šŽ*cïEÛÏùZ5vp¾ñ_}bþÚ|£¥Ä“6¤›uúy¬4ãi€ö”èòNÔ9ñ€‰RRÎ1º‹LH¡+êw"Þî ³þþÄ}¬Œ˜¹6w+eM¿eÇx3­Ò¥†aŠN ÓöÚlJy¶XGasW§FéUqÀسn3uufú¶ ‚9*«lØH–t¡cKÄ”q~<ö΃þÃΊõ^V¥çšVŒ¼*ELÝB×¹¬¤/$E½ }Á` + — Æÿñ‚ÿ3øƒñ"¾ø¹)»Ýd&À'z£Yàæ{ŸYfq5} ¥–ç;[Eº¸*W%UÖŸ!…G£±Mž¡:Q×YLóû„áû €4Ô$‚ylîµ-/h+%`Q/Ã,J j°fM–œf ˜$/!¸ëÖ¥ØCå fýÊA ²èl ¸Ô…ÿ³|]2 j±ýäVb9? À\"x€†WÅx ÌÄ0‡ý¯[èÅ€Rã(²¶S|µ<Œ‚6jõZ­ÉŠ1+“ Šâ«¼ë+÷z_ïnÉTßÒ'o°4áï®5Y¶î Oò¸ZMóà/aŽ}´Â°¼²´.À¦š …ùkª©ÙxÈÄgVMÏ©¢Æ”ØF<Ւ€^oç§ÿðð “èÙ’gõ4–—VÖY¨× P¬Š@Ì ?Âd`[@ŸÑ ¯ø›ÆèàWÄx€àøÄŒg(0€Á,€çb„öJZ÷ŒàÌ:/™ {}/ÂâL¾w `nè~Ù:ÿг^²ÀïØp÷yÀûfà®ð\„ÿ<Ú3ûïÑ á2õæçög2éI‚Ÿèý(¨Ç@@ßs +Ö¿ÿH²ÎðÒÀ:üñÉÉc0p¤Ûj£›D´ÅK”Nÿ ÷ÇøÏÒø§2VÖÞFŽàÐosð›çiÔ©r,a@ Øð®÷æ’Þäͨózæê‚PÃÚM¥v@¬.4–²d®‘®M”•p1„Þ±!ø©ä)Ðéþ¬Î'Å#õ€Š‘á…›þÊ[×XßþŒÁ‘¨ËqóYåÔD#¤:'Jøû%f’"eºcx¿´„YP©,'ÒØ(ºúzžm‰4ð¨o(Ÿ²ìø ÇE8(ïeÒõNi—¬$bi%‚]ÐÙÊ·Ê ê\ãb5Ò‹µÜ± xì‚Ħéû ÄÉm%ŸòDtáz˜„¦oÐVe°¯AֹʄÈËkR7”º¾²Ô¨Lb$bú—§D¸³G(D=¾^^n´ZQú0òæ ¢ÖâF^NMÍV’~=–® ñfrÆ`ó¿Äú3öÿä;˽{_‚þ_þüçâP†/ý7ßýäsÀM"Ÿ~!]ßSkde~£( ,¿Ë qo´Û¦ÄŒ×,r%‰s¢dcWlµÌ\™2Æ^# &¹ßS¾Þ×Ñ…Ðˤ֛:Š QcHó"nä=7‹õ¯S6¤Òízù¿ëtá±ƹ칱¸á€ý¸Á$$ý.Cà2š{³–ñÌ +'K üßìX hLuÏy ´÷Ø `ç«—ÅèÖpš€ý'c? ‹¾õÅïcÀí¸É@]ðà'ÙÂp @ÑcÆVGUô û¯|þù°óažïÓúë*Ñž;Yu?Ò¿Þ²+®š¥¥‚h²d3j¿öš…Šß sÇÔÙ« 䩓ŵN¾ÿ?ÝÝÿo?Ýšl§$¨‹°·è“Nç;KtXÙ«”u(½“­­býq¼ü¿ðâ,€û€ÍÒðÁó1¬8^ ßß:; @dˆûpáw2+·ÛªM`ÈrF5··d->6ŠüN/˜–žP¬‹ú;™×úøí·¿¿}öôÑÑA¿­ +bÙô··7î{Åöf>8|èóuºícÞ|gg½^1µ¹ùLå7|ÊÄ=: +þÏz^pñJ€ðo½€Sü›|W¹ÅB.ç}Æõ#Õ¢wþñ²¿aõŸGO„ÒT†¿þŸÈøì?Ãöÿ¯JÇS¥XÏ*wÞ[q‚°˜á-Ê?S!Þ0ÀŠ€{Ûƒþ¦çdi³YêG §ãÿ¼©ˆCžþžÐ¡¾›Èˆj6âÛÍ÷…á@EÀ}) ¦DÆ3"´ç˜Ò“®ß›:+Iãj´ÂÈòµFÃ`„_OâQt1rvј“”é'œËá燬Ҽƒiiq6]Ÿž­7$KzúÊ[x˜0N² Ê$[oåÕ„Xl‹ïÆSÒ”’tš]ž5™$}VZ;Í&¸¹°ÌÖwAS#ëÒêcPiÜNO(<+i .Ê; Î:=ÁÔå}¬˜Y•K˜ëXlëIÖ·QQG"dXâ´1Á¸á©Ñd§'ž’c›1IžÖâ6 +Ë÷¶ìHµ¾#xffcÖ –ùϡГ÷°ÜÇÿ¸L`Àý-ÉÐäèþËw–ÎGHÊñ`eÈóÔ´Þ‚<\k$£˜ÍZ¾Lëÿ"ûÿùõÿŒÿŽÿãÿ>EOŸ~òÉÛ7DðÿðɧÇ»&F…øe¨ÁÒ0vë2DZt]}âQ ÊØœ_n,å ö<þOUnë¼5±ä<š‰ê_L§!©â÷rrí@Áð=»½æCœÇ¼) +ÁPZW€6ųRµ®&•¦Ä x¼«=4yÔ;¢ƒuøËá +5Cc>?€ ·Àë [^0Ø¿ÂðÂ^$LB¢tâoÔ‚KÀA>.+. Fë,X%ø¢ºÙO²¯tߣ”Äà>Ûì•CƶEi.F«mö{Û5üwD¸g¹a°Ç–CÇX^ÊudÜ-Âl +RO©z¤oØ:0£UUC{1ðûÿ°ûÓýÝÿ¤~©+Èúµ˜äꂸ»p˜ž¥´Ž³á€ú€ Øç|ñJ™xÎÅ”H—nc€(™gÛŸÛ `¼àAX¥­Ò{º™|@œ¶ñ@ÄòÚÒð»íCã€GP™È*VÇà± Àv°ÀÁÞPÿÅö`[èxxòì©qþ;^`‚V}þö;Áµ®o ¯ž>ñ\µ±`83 àÍ×€¤Ýÿ÷ønn.b×s>dÝ~¿_ ö”É£OþÇUÿðÑÃÃGaΈñ{ä*PUxV¿ßcùSò,Pìá%϶¿*öÙ“Ç$”ˆ¼úRuÉÕ¸ú ˜ Ê¡*:ôûÛ„tÕ|›±pÿÌø?Qd¶ÏpÍŨç;Ñ`7/5Þ¿ Æ6èf6ˆŠý3cì|í\»™d%’òEdʼn†õ4SYÐûõíöF×ÙÙÙ\¤§«ê(àŸƒu¸»ÎØ:ð&bÂ,‰þ!üªqeö*kí©Ã ˆ a‘Zø»ˆÚ#neø—4¥|3¼×eðUº5ñèÉÒ’×éoü‘(AÀ0ŽÒȆ†Š¨…/Ò[ÿëGž,»†¼„ T’]މŒ¨YŒzñ bø[˜øV”Úì(nŠÀ3Ädb±2«ôë5î–ô%¬÷à{8Í®†¥x.€PI1G¿ruª23K €×RÒÂjø+¬Dp•èà zu"®^5€ÉÌõž+d=QÕ"äÄ™I¸úø‘•E$„›£f<|™„ ýóS[lÿ¿€ÿ7~æøá?ØïŽù«Oþì¦hÀ=öý¹yOø¿_dõ,ª 攊4vd‰Ä•Æ“XÏ‚$gqÆ+W*ÓaçŠpc©Í{7F„‰¨šx¿`ß³/,ª‘Ö‹a^tÿ£É È]š‚¯¤~-º1K]Hu0ˆ5`øY»ÛéÝíÜýˆY ÌÂ83` ;†1‚]N=aW8 pX¼:Ks@Z$!@M—N6ƧÎÙÈdþbïxD²k,ÏÍ"Õ׳ô'Ëá@zÅÐüHoû÷ï§éšÚ"çL›Ic(¡:ÍÁý¢Ÿ­Öã|8º«œº¹–ø·ÕºÃc÷Ë++ÉV^ï«"{Y÷8'C‰R«\^nµf“^’ ‹¬YK“X¦ôƒØÿ‡ŸþÃO{[PDˆ®õtYVÏO`g½äù  ÿˆð¶´ó_þxu À†I^X PÍêåë„•7úù†cÆp­ðbìh ƒS@ó¬à[@ä"€aû[YßþüTf1`ó”ór[@Àˆ™ +(Ú`x4TëU—F^ä8çxY €÷'›päÍ<ßkÀÅ8<ðÝ龜<ëÀA+[²Ûí‹3 Äþyî?KõØ>xÂb~Äö=#׃§Õƒ'Ç? æ'¼®&¦ +Úóïiž&šOÿù?òªÀ"‡‡l<È·7»D¦ÍF|6þOÿ<©uMÄt_½*zóÙ2d.à?œŠoNãÇ 8ðõÏ+/þYÀÚ‰9àš€ÕŠâÏÊV}lÞ ¶Æøt¨º<šú½{9*+ô²Ô+¬¾ÚÊ{+¹Fc¥]™¹:uu^Ö5?iÛ,mDÌÓ§jd²fÇ0ýRîHÏønm Uï)GŠ”ÍaÇ¥  Þ{é§[åÃz”€Ú Þò +¨Ž2”}RïdPÊ…Z~“wÆ)_nõ’Y†tùæÎ;æNBÐ+fAÁõd”· f@+i²¬SùžzðKšÈTï­&Q9ÛS"cEÊqë}þêÌÔüÌ´Iœ¡B80a·ÔÊüµ«%x)ð°,¯ ÕÖ\Ä4L)KiÏq±Êjj4nÕp2L±ò0nŸ®ªö&Rzóìÿ çðÿ¿þÜ#ûŸÿÏî}ì?¹ùÉÍŸ|òi¾;Êã(7Ù¥í)Ó[½á±à¿;, +ꇺ ƒ7(ø˜0´±Ò˜žU=U¦Ø¢ÙlA¥J/©Ò£dT„Qµ±Öo ÌøÖ­5LK-vwcaê¦[îE…¸-»™ÓªxöÙIÈ kGò}@‡ÐŠ:!Æ]3”‰`2è‹åÅu”t|ñBø—Ïx~€fbtyæ;Â3‚ŒóÊ12ÿwv(’0PkqMðU"pK!þkóöpPÜï÷×tÛq¹¸1ó¢÷z£¸Ø_fmQóêA²ÅCŽéuÂöåeæé’ªÆ'Œÿ÷ ÿßcÃÿC=ÏaüÿäÂ=üïº0Ð;ÐEþô)ó©O£¾¹ƾ R¨:Q=±p×b,àÑÃ'X àèp¤2Ýôûy_ @]»©ÄI—Ÿ±ÿQí%ø# ¢•pÏKç8—åÁbΊ¬š2\ +f‚Ëwô’¨œšÍ$0ŒÑ¦­œà;vTÏËF¡Be#$êaI'cÃ]}ªzºº5ÚU‚š +ÐTÎ"iüŒ°îžÔtwe/€?¸\™Kz'±IÜð*:Xè™lzÝ\_q2&R®æ!§äL:3©6úÛ@*KV:A®ëöxâÊÌC–õÅØ0pÊÍqt %^9)*çÍ·î‹ xÎy.Ï\ÆÏø¿J]&@½–´˜‹þ/ÅöU¶ eâÛQÊÇÙÙÌd(q'¥Ä‡0ô ”ö=—t§kS•ÙiŽO•XaÓŽŽè¬¯·–“Y^:]PryæÚ̵°Báü¼ÇFIƒ¸PJì& gÏ0ôøó¶~vN¦.Í4’"®Ëè ©y3 ÓÏâÿ+ìÖÿûòç§ãÿ¼è•ß¾ñ £ÿ÷îuŠáz³ +ü»TZ´ÈÿŃ}¾öÐŽðŸjUYŽ9 ¥Vä·¦g+ÉÂÒÌԵʒUi¹mÒ:Ck´—cyɡԮ‡t…k–÷T+È{Ãv”ÆQ:ÌeTˆj³¥{+&¢ Dy]¶¶– GI$0 9ŒŠ’ÑûQ¢»¹i2ýÞ;³Óþ>€|k‹Ä“ŒSÀE1ªø¯vv^½ÀÙ'V=DiÒÕy¨1—øïÔ…Ü€Ë$–"­ ÿUƲöOÚx èí‹­@ú÷íàìRÌÎõ*0ÊVG°^1r/Æâ"[Yò¡Š`KLZö¿ª‰ý@Õ;tƨ[*¯Jms±©.J”FÒ¸vµ±Ô˜eGlŠCd&ãîÖîÿ÷Á?ì‚ÿºŠi¸'¹½>/-x7|¢ ^ð´’;ôcåÛ @Aç`ã¿Z.ŽxaÓû¥€ï¥™Ïx~süâ:€Ú©Ê!€fÚv À`ð*o6Xƒ€wú*€oñl¾èCâa@ ËX]zìïHžóè«ç<x«¿ €1=¤÷ß6 ä$ù…ÍÜÎùÔè…‡ív·¯ºeýÿ£CÙü‚áÿ㇬ÛÃî~À8Ào7€+ß$€=ÿª_©ý?ýVìÔ¾äýñ…ÇpxĆB +: ZO±Úì:3°O‚šôû©"ëb,V’ª0iöˆómµ¬€#åd«±§t|ìa펱@&¦vÆgX@°â} ¬py«ÆNæ>¶œ'sÄæÌD×Å÷9¬TVæ›!:ŸÂ·tä›  °{+ KúàH‹ê6 Æ`¦Â#J"šElâbæRŠÏèß'I«HfkV=aò|X|àû©?˜ºÌø?®µ®ãØxQ‘©…‹ Oü˘ÄñБ +º©ÔS‰ÿž¯2rmæref]@™K£1%­Ä^Ôå…™ràÒÔåËWÀ@erËTÀ%iQâG à Dx³Ki’Q‡Ê‚ÒRÓA¡ÞLhGþ9û?àÿø»R~Æê?ìpÖþ÷Q÷îݸùéŸïîÊ,¯eCVì=#¢=ëýo÷óõ¶jJ5¾§ÖŒŸn\wdµ'‘q‡!õʕ˪3*s,´e…ç —5¼¶EÝÀ—³#Üïþé~¿Z­·eþókÒdPbóIÖ¯èlåq|¿›3åEÝ5ìó@ÃÄy޼óÑ]fCÃÍØuÓhPe%×IëÔ=ôÂ^ú“.$8öÒ¸õžñíT@.¤±€œ úyâÈrÍZ£^«ÉüñdcÒ+À˜Ìý~ßYÄè½!V(¿[Äzμo“8 {8©RˆT~Ü¡Xž·ÇRéŽÓí+eµ¾šëuù]'¢½Ò÷ZêŸ_÷ò$Îöÿ»@E…ôƒ®˜uˆýP?ÑÇ…à¸À ÀH¡Ù¾@gÒƒ«ÿ¥7‹0ð,€ bD¾ù탯ÏÄè Ö&"yÁpA 0sÆ x[ÇlëSÀáÁöù< ôóç=†G¢Ër¥<çbìxU €Ïº(@ߺÿwî8ëám6ší®€Xƒ +Œôaùóç5߬y±%õ“w¡gd|…ßÈ©ç_Yv’¿}FqOXBP´B,à)<À3Âüн=% |#@¡&U~jÿWήXá!é|©{Ù˜R$Lñ·âʲªÔÃ"ÎÔAÃ@óŠ€×ZSÿ±¨FÒ¸ÏÆAíݰhAWq–ŒÑÆ2Óu,2X0bÃòPÝ è©R}QêqX¥ŽFÓ•k—/W˜àô}’£Ù°Tïí4aU‹‰KÐФ<ÈÅ;@I,N˜š`LYëç[%˜­¬+»-é< ‘aÍ@Ô‡¯¤30dJÓäÉ,f‡´ !ÌØþŽ=I7«‹%8ßõqp#‰¹L¾( /HJŽ(¹‡Í6¯ë_™Ã…5PÞl‡*i­4QÁr°‘ÒsÍk9 @M†Q¾Rm°Ó§CµSáL˜l,xÿG{²¸žmðã‹=gðÿöÿÿÿÅ™ñÿ þ³îï›_~Qô’zÔd©Ã€ÃAT2ìûAœ«©ôÊ*µ1PîT‘>‰=4ȤŒÌ奙©©{_K—0µ‚ ÚNíÖªÐØ Qž¬ ûY/y-²]„ô/ž){ø…nZ  oþø>Gë@ Ít“IËѹ˖x¢·3x﹕¨|n’‰@-âl P}ÿb€ÌQ<û/‹{”Ò&ÑÏlPÆ$ñûq£Þ¨Å2ÿ«UõãŸ0î0ðȃZˆ¬|ä€þýûê”"6à>ªTîíæ± Ƴ¥ä÷ö‡yZoæÇ4qz2Ã÷b÷NÆóöuïF¥§+SÉÃãö¼Ü˜xë,•+¨>z~ûÓì°,Áã_ð¿ÐàB/€àü@þurq Àx€ì/áùx€¶÷S^ˆ8:>>:ÀV~ÿü?CNc6_ Ú@bôÅ‹1{ç<aà| @€ÇÒPè9@ÿ)°`û4ðõ{èäó€^Iß¿í:Nðoð]¥d¥ ª dÕ‰Øÿ§¿=Éaá_†þYöï?®zGð;“ZÀº×'R!t'-º²¾ Ò'jÊ€¢fNä_à'29‚âubžÀ¾@0«Ã½ƒ=uºM¶˜´…«¼è/ñÿ,°cIª¯Ù xs:™8h“¬}GÿxÂ}€f k{Ðu€ínû~#oÄë">çŠçÐ[Œ|ȯ š%³‚]ÌÔ©õá–~ôïtxõ,ý *:غG8õz°¥MÙ Ù^ìà0})R%‚ ,ÝÀ:ôêd­Š5êojÄ)WÒù~ìHš›Í$Í«ÍaØ>ÇötÁBƒ!!ºêz½ˆ«‘=²üZ²+„ +ppz‘¤+©Q ÌwÙ™Õs’d `cƒzþ 6„§ÿËÐ&$ëFõäveÎÙ_VxXx§—´XŒ7­¬­ñ-|bÍ̈ëèXrŸâu鱺|'s|¿®:àÒÔe€«W¯]»Êk„rP³Xʘ°âk:5ž0§d^YÑ©1²z­-0»óæ@€ðsöÿÙïÆRÆÿ{þ?øÆ$Í®ÿ7nÜû4&õE™XTŒJ@UéI~L:¯CdãæVÏ{܃ç.3 V%ŒIM´1k¬ÕZg®yÖ˜šé¬›r9‰ƒRuêñf ÀZàG¨ž…†>NŠ:^ŒÄ¸pí‹sªžA;®f#Qô^,BÍØÁÕè e}ö>êݵàÂ(@¼ð"/Æl[¾*D¾RŸ‰  4¸Ÿñ„(§žõ°ÀÝCÅ{[øO@]®g?é² +@épR9#à?çÙ¢\Ó…•ä^‘ÇÓÙ;½»Á˜ïކmé +Æ$´7õ?ügWÕÞT¥âíð2]ŒFj:4S­Ì±íe¢îü¡·>ÞQag½ov;ëa|Llн²Ä´¯]›‡À ´{tZ· RÚù/\PzˆÐ¥Ÿ[`À.‘ÏÅ|ó›_ˆ(÷èL;+@Ãs€—Í8ëÈŠú²Yg§Š„!{Œóß=åI— x —}q€ ëãN<¯Œàä×Ç\°ÀÿŠ€Ã&ýUÆ À>¼ÍMIWti{À €#ÙáG‡'x˜ÅÏäñÕÃNÙ{öŸ>(MO‰òs%¨CýÑÑÍ9FŽ] áY‡‚IÃÓŠ©4loooŠ´¡4ÍE>±ÿ•|7j‹¢¥#¤À°Ü z},ižVWƒ&˜ìXŒ Ñ° õ&Õ:+Nšy­©óé2uÙ-k ]ž€u< ¬Éš›–Fœ´ö{w½â7½½D.Ý +[õ(ÈõKwÆJ:8_íÐIþ¥„xýÆü:3&À)•öÊ5ê»J/‰]#å2ËÐÍcéêèRãã–Ê ì"–Âö/ýzõVän±Õ³ÂLI(€â47cð&é¹2ŸW¿°0_¹:SþOB¦®†0û¤Û %º„ìŒÀŒÌö¤®Êû ýˆ…€PKJG¸¯çT§Ú `rz:Vê >Í$»ûkÂÑÅL˜•ákœ‰ EWgˆð\@=ÁTŸsQGW´þÇçã%=G +Ÿ™™úã™Fš×$xca€çí}u‘ýÏú÷Çÿ%þ|óæ§_‹ø=UzÎB¥.üõÊzžÕeë²qr=+Fª$ ¥Ä«%4Ÿµ$V# ;=J¼‚ `:á#Q#¦„‡£$Òm„H Bu¨b†Ù‡`z7½þãUFu¹«Þ¶n¨ûºCøš‰æjSè+L^KÕ]ל:éyY€º“RÒ¹Ë_¯s—¥t¥å£·rU ËžzÊYJûÙfî¾"àü:¤V¢4µÊYaÀ <df½)ˆ# V¯^¯V£v7ý c"¸ÿù/c |Þ NÂwvÖãQo‹È}bþ#Ñ›£Q*N¬•5\en‰ÚFcØ­‡tÒøÉn1ÜKW·Y›MpÓ©`TêEï§Å0ïìªÔâlÿ×9ßcQ,ã,Pƒ§SÃÔÔ—<ð:/€jîõò¦1¬pf%Àó1£ß?ž‰Ïžã¹€ï5 @xÍ[¦ÏÅœàŸ!€2 Èê"!¼r±—z$cpfÀ÷Ù Àü«Ímz} €sÀsàßý øQ£Æ€Y¿/óŠ£ôØ ”àÿgÇ?VþıöÁuÝ\LD·'U€:ÐOõ½¾RMé ;à|M}ñ +ÀX“ )|ö˜õT¹úP¹‰ mï1oŠ0âôã¿R êVia€v_NŽK^Di¹\`€°Ó@ŠÖÔm`™)ö·¥ óx¶–«êRËxÁuå-ôS¨g幯RÆ^RU_1òo¶¬Ë¬¬Æ––:]c"ÀV[ |?v¨#F³•…©™ +ûõ¢TÑH`¼göáØŒ,ÒKu\~WúÓ´¥Zîs)}äI5éú&¬Šë¼œ¨£dås¾€…••¯†YêÑœ2`w‚¦¬Ž™åE‰0º"7`B½îÙ˜nžÁ$†5ú/Ï\b¦÷Ì57B\Ôk©òaà=ÏÇt½(/á3‚¿@fžU`I$¤Ç÷µàòÌÌl<‰ßˆ³ø”m¿2@€wãZ‰ÿ—§._»*‹d¾²0/…ÚJª áŒ^^y™ñSeÊþŒyü"ªù¤H¿ÿ^ñçíÿç×ÿ»ñÖÿ¯ÿ÷"þúéŸ %’T +–Ø’­Ó*)ºqµžf*¢n×ó}ùDÒ<:¹à?J†ü@ù­¬¬´TKSo}o¡x…`ì[ ª*ˆ˜Ôu.ÊÒúbu•Õ3ÔˆèþM-B'ëb³\¯µ>w”$‰€ë-aÑèg@¨ÍdÛwðì;ç‚”(š…ª;°9Àóë„¶t ù…³ž[€„Xàún$%ý“ø$˾Ú)¾Âñ±žÅq3f Öˆ˜ØMK€ÿ•PFõàI€Êè8,B¹N…¬ºœÌG#T¾¬@ì6ètFÞ´£.¡V9Gç©dy¼ŠvR•zh…>°ã]*(c¬D¿‡R̲žr'ŽÂWTªX¹ÜýÙ>z& àµ^“·òÝËdâxõ^^ Ü à äáÿð}b$@ 3x>àL lž‹y‚ u_pxÎð=b@îWÅü+z^¶Å8jøÿ9Qä¬/2¬$2)ß'ŒýëOõª2‡æ€ã¥)•qÚŒì®ý«Hõ–¯¿sè azuŒ Ãþ"@^PPÕôøÑ“'†ÿ'^€A€#¸–DµÇÆ€¨ÂJü‡¹Ì9þÏò@„î$ø¤Σ?VxÑ]ì•íùTÔ´ÊwHy¸Z[.|˜Ènl$Ò:º.k°«ûYA´ôCc9o¼dÁ“¡0Þº +¿_ µ¥¨Ãè·’Dcº1[Yž¹<Ÿt6¿•£ÇrÆ!u.­åËð omø‡Ï¤($4í§Õµ,‘Æ_‘bX°#ĉ£¹³õ"[T}c,pÑ]¥—5ÙÆúÅîR‹J.+д²°åX,™½eÏûÒ‚clp u±A€̱a3î‘åy+ý‰l…ËKøÖ?Ë N…u`x«Ô˜0¡àXpè +;#!öQtŽ…(ëÄR3«³4?/"Â`kú^ý“J9@Yun—Zi%b}µ`¢Zƒz Q"—§*µ£”•¿Laì_`ÿO¾Kÿ.þ_Râÿþh׳ÑARê'Ná_R]LËõ‰‡Y=;æM g|)ZØÑk‘§Q”f=j?,7s‡‰aK•é _ÚŠùlïxwƒeg†÷ó™×*  vÅ+U°»Ñ^Ö”]ýûüçª4u@UªÎWP+RÝP=ÞÂjc£“m6›?¦‘ÉЖý¡îJút§ðLm€ÁÞEÎÀsA´0€R.ˆXw €ðç•€3ëÄø®{IHšD?ƒ¯_ÙÃ×L^ q½U¯W»Y{` ¤Tš&à­ôuXD|Ø9Q×+vwG£Q$ùÖpKï”Saw* + æÎ¨ ~©™K3 IÆ,Kwl*Ô#Ê~£2{åâõŽ©PïB'»SäEUo+X%t…ydoט4^çKéêÉã_²@öÁó1£ãc–æ`a ˆð‚ÏÅ|ïYú ¯ž‹˜L‘æ+Ž;þÀzáSWZA] ?›¾‘ŠÃ¾"~!-ª¤ÙÒ/XYU[-æ8ï9Ù;x7}å)<ôNp`ÌÐ`@hî•\–³TË iÚ(VÙ|gÒȳÄ3zÇyZ‹TÓj­ßeLj~$f3ÝXX^±ÕžoÝÝQÃ[ΩÓR%1| çÑ.0§jMõzØ~Û6`:îS€:¹ \©ÂóõDZÐWõ QHÍ!»ª¿€»˜w;3{>`‹° UÊx ™Ì Žð%läÌÆ³!àKc.öŒÑÿÔpÖ0žñ`þ×kÕè:€2ÁépâE-€ ü—_r·(D _Ì}ùÙÚ2›Ûfºòí4Y1#R;5ÓH""Ú0{|TÀ Ógo7¢Ù¹(¬šÁO”•tCh¼Js,¤ª!³Ò­+ À+½wõ?zà«eâx] €(ÙéJ€àþi +þv´Pz /¶²Pöp»Ykv7··÷¶û2LTj6»ý‡Þh†™d‚ÏR kÏ‚‰· óS¢cžžìuÛ›ºÔž Ÿam„ùe2+Å'!Γ‘ +ö ÖÇ`÷ÜÕ‡ß …ýÓ³'û}¡†?“õ´'0ègi­9 €ôjƒ-Éã­~ø½Á—4ò­lè§'è8<õŽ$¢E¡¬2r„ò°Ná tî#ÞBxJDv¸ðódo³ÕTXv˜«Ô”C%m³p¢#¸1E55šŠÀØ8Ìf>Ø ¶q”=<9zŸœlIöð«`ª®4e À ÊÐÃÿKǫ́ÒAºRõ–^Âé¡€¯ÛÊÐÛM5fÑÇJ¦­ãï#S†ûsöÿø/ûø?µÿŸÃÿ}á`{E¢7` ÉV£Ú²j(Õšø¬ @œŒPÜÍ3šÔ[ÐïÀ„C¨¤Ê @¶®ò[]íêEè×r2¹7•Õ‰ûû‚–(eí¹n³š–«Ý3K¶„;¡nÇåCêzÝŒ›«° <’»A®âwíøã9ŒL¿÷@rÆPÆlô</ÀËgœ‹ ˆ/×& + „ÿ³ø¯†&ë”Ò]o.³@½ÁBÀ„¬}À°ƒ=D0P®`ÀÄ <¯‰Àèr;²FDèQB,:Š"Lj¢ÄóŒDž¯&qUà."a€Ž¬u*ÕJcŽ`c¾ÖùjëÊDg=p qZ=ÎöUƒªåÆòÒ’1Ÿ_”à%^.+ vþËǼ¸ÀkÖ߸½@ Œ탴Á\4ìáö¦ ¿©Òí!q瀇°¼ ¥žÔò«¯õíÉ Ýd4aO`Èx=;ÎË,–Q™eB5‡ €‹Ä~÷n{á½>yÐ\ÖºDïùö÷ ÖÉÁvÞ`÷±°8À‘ E[œepæ[~ÿ;#¼.¡PwáEÿáVºžS«—LJLHÜp÷ðèaUôG5×õtŠX)Œ:K>äW–Á`B”²§6£¹ZCÍP ÊGGb:‡'@4èïR.…áô ¨ÔjM±†Må­`”ä`oŸ<Å%/þ@ë ø†‘þÛßÙ'@–uy2NÚï@¾êÀXï/yøc8Âi~üøÙ·DxÂ{{<PàääHàð>1-’~¾¹ÉøR»Ù¨ÍÍ–ð?7­ŽE=ŠÙåÍ8š »Ü!5?G‹õº~­¿S—V×k)±¿ÔǸΚŸHT×)ÂÆ(ŠëÓ‹Qunfzf6ŠÃÎõ>BçÔëµhvVß7êïT£z]êº[âVŠ4ÃÑüÊxöí|¶îCÒj5%oöÊ•™©©?‰b¹Ð GÕÙiÝ|®ªKÔÞ©®Žï$\‰KsI7‹.7Óë‹:Ú7ªÕÄ0fg¦g•¡p†EÊòzµª[Oë§¹H:N žHMÉæÁåU þÊ¢ R©ÍE³ÿ~Vši†ys3WÜ"33³$Ù·YW«Õxn6äƒ,“Àð›nÊÜYˆõCœV¯“ò J‘ŒøY2;;;­ë_ùÃé*å£ït©Å¨©B£ÊlYãAfÏ$hêòÉôŒþft”Ønuz–ðn—Fx««„3g*JùõU +ýÍxÎÛÿA^°ÿ=þÿüÇþ·b‡5ÖšCíâK÷Wk¬KD„iÀ{Ùîì¿+à +ÄLÿ]Yõêl lí.|ûˆçðÒ€ צ–—[ŒOmí3v©%¾Î3ë-q¦%GQ€;[ÿ«ä,ë§õz?kãÖ¥k¢ÜË#à‘„»ói}Sµæ¤Øÿbãq°Ú» €„Y'1y¯ôŒƒÆžzÆ1z9€È&™à¹u” ‹gý!cád£[|5(¾b +À:­EðD‹ÕîO²îØ ðS%”ÁFà@S¤ËÉþãpÆXÙÙÅ9r%ÛÅû×À­U©$·£ôX)uÍS˜º‚)`¾!k»UkÉ +[ SNÌÆ…á/KŠQ;}'JE[ÕÜX‚ð/00¦¯ô” à52ñ¼v€2@¥ó\ @TzB €r‘0‰Lñäp¯¿-Ák¿ÝN¼@=cÔ›{"O„>ØœzÆþSlØea\BÀ® çhO-#ë÷s¶Ø;ØÞVJÓ¶,c\P€ßý3F¿øžê[}RêÙo€9Ìlñ 0R@½'ì×Ó`¯ßOQsð0¤Á 0âr–¯RÊ•@}ï/~÷í“£>sî•×PÀ<…~³ m2Û1¡3ZNÖu€P诈)-ÐþŸ{Ye&ªA—€ÂZ³;8|8èwóƒGºIRÖ@ßð ò¿RêMA…NÀöÙHyìz ô1œæ6}¹Ü”ÙW§†÷8Jô/r¢¢‚’‰¸À ž†0në} e‚Å€”ò'l*ÄMØ1ðÑ#ï:øèäñ‘èËž’" úÊ6Y Ùô€ÄéVÃXÕ¿DV°Ðñê{â©õEeN¦_¬OAJð‰Ûõúÿ!Âï'ˆƒÔÄÐ+s3,ð¬×9‡íÁ¸DU`$äðÇï¬&5ÑÎ.%¼e‡’EìJÒ½~=4sÁÎ)–Væt¡™©+• +W•¨!‚èÅé¹·¦H!›ºsH3§s`ÆWNo¤­€K_‚¤6ê(HC|ÄX”á(úC~˜2+Aº9³7°JWÏp¥M `Ž&?'S_¿ÞÂ"UÄ5Ôb#ú#%”S•‹³‰y3x3û¿\ÿÏà…ñÿšP#T†jžÕ "+öw»õzš›€À²1Œcýhý +(†YK'³”ã%wÀç»ëcü—ú¯\©ä™ðwxœÇ««2ÈzÌÑ7ˆëøÆí2n6í§QÜfn~…aŠ ™ì/òë“F¤F¢ãø“á·Ž Ï» ŠÃG4øY0Î4€ô ê‚"³ïœÝr¸17£¡¼S(p [|‡=_V|>`M×&ðBÀp°óUð$jŽŒ«ÕëžàQRíUÅ+çíX^]‡pÉbw4Ÿ ù"cÊdy¾ª¬“o$2Vfø,®f[®E‹'`d-‚gÛýÁ ²u•:°®»f(p1’ ³ô¤â qOI#d€Â4ÌNí¹+bbK8¢Fwpp´·½Ùß;Áz” KÍ(Š Æ$€f³ÝÝQž„¹bGGÊב޼ v°üÁ~½rK›÷¾2I#C¦Sß…o\!0Wyâd(€~ÓEgßÈ4X › >’pœ1Ñ]ôôpsé½¹5=›¯_Ö‹b«³ƒ.—€žՌJ§—Fiîs+.݃]sÞ×i–ÖJÌ—\ò&@ºQvÜ^”5*ëŒãá¡áßÊ2ÏÓ¨;ÚÕú°^¦ÜQìú =ËJJálžø…§z÷=±®æ±+±ÈzÃán¾ËêO ˬ•$'Ô2O¼45ÅÄA¶#‚äZ-š®Cß<T­ÜÛ2€|äÅ}ÖÞSÙȦ^oÿ‡O×ÿ{ÿ÷ÿ*hAk!&¬Ñ#¶Ä¸)"¡HÂs&b ÓŸ¸ZѯÇÒ¿*ï „ŽÿÐS½A¬rÖEÚŽ»ÃÃb•)öTªš+WS9‹êFQ5öG¢ÛU,éaY›ø†»im$¡¢%f!^²`³ùã¦[p`n™\ ƒ-½ÞŽÇ–g§ÏÎ UGVîpq ÀîNñ•°x‡óK=”Yˆ Ç”ÿ¥8aˆ=;ö¬{' T@®ÿ¬÷J©V“ŒPݲ¾Zëô‹<©‰fg·çfçèE§%ÉrÈWß_€µ/ôà_'ÇŒ=g×XÏ&+^pPä^êíba°ˆú쑣㺠û)ŒîàèñcV¤r€&  XÄå_¸#Yè(`nŸmãA eôlp¿Ç"ý~wµÙhNgQ0ÚXÿÏ\€«/ Ú¾´®eL{z2Љ¢ýÁ@¦)øöDºiSd-?R²„µß=³Û߉3âëZºÒ3.‚Ñî“X½;ÙÃÄÀßÝßîËÐÍ>Ñ©Ïa§K8$+‘U]‰Ómk@¿•‘.°V¦™ÜEHMOw{ïèpOàÑ#°õ)kø¬A¢ªNI'ø©™,Ùß$"‘¤x àãæð ÐKžL¿¯€ý8“‚„þö÷ëW^L ÂJ€úê;(Dâ»À_žˆ¥€˜…n3±£®Q¹v-OãwÒ˜®$ ó[Å$ÛoWÄdZÁï7ªn)+›eï{ªœ“%‹r™µŠ@V¼,¨½ZYÊòo²(“ÍÞ%ù¥“¼8°S1ì²/e>¯1£dIÏ«ÄÐöNJX1ÍêlÿψdÌ'2ˆ÷Ã2Ï[Ë,ͼ‚R…´–*ðS<A®^} "õ¸Üꈢ[—±ÌÑVOe.,Êpòr¾‡Lµÿ°?oÿÿwºþß ø¯‹íõõi5*§´^O«õn± tЖ(¡ð*éI©rØ–8n¶úAüã¾ð«t¨q9àŽu€”9vЇÏ³(.þ€ìFê¾lh–jí°´jUORfVÖ]­š-û }ïh8#)`#ç¦1ƒùÆÿÇcë¡¢~d€êÀì{g=[Ž]$ÈÙYe @΀ÿ^ôœÆœzNEWnÞÑõ` ‡ ëö@¿ÖY°îYUü`íƒìŒ€Ä+™B8æØ0–ààjJ@ÀÿÒ›‹…£ôŽ .ˆÚWë’ë×»ìlÄÊ’ÈÊš›8Ϙù™Æ‘ ì¼ÓSn:|=¨§ + Ÿ^¹þ, + kK-¼fF÷*íü—?Þ,€YºØkbd[¾TXyV¦§,ÏG™³÷ððp»] £Žssq6xÈ|´ÇX¤B ö¤Qp„–-çgÿúp»Q©ÉfÆÊX?2¾M€LÉtïȘT½#þø íŸyµ Ï1B¿£½¤Ñ*½Z#ìZÛn —}]\òaæ“®¢ JØ’ë#? 9OöÆ#ïÛý¨ëon¦Ílx°Tw£à> ·.l—Ö5ùi’ÙüèH`jfvN–1¶}¥–m«0½hŠ•)ýaÝRæAQŽa¨ÅMB%¡5oØ; €õd‹?ÁZ«|ƒÉ®'½'ŸÎ!òJð¢7fNÔõd¯´‡Ò¥ôƵ¥t›„I²ÿu3ï +Àl@%˜!€£ƒ=UxQ...8ð+Ù †ÃkèK±Ž»Y ¤`;,i0“2íMãN…¨—ÊRþÉ<¥‘”f’ÆÍÛ1Uö7©–—Qÿ‘1X*\Ùk‚‚¦æ™lY|çüÈa:ƒEJÄXÚmIomåÅ0®I&>.˜›ÜÖ·tƒk—./,ô°?Dc=g)øzV.TËñVËe’ä™ÀZÞ!ÚS¼Å£>RÂj–|Ç<ãZ+eq/äå…Â%túN<[!\ȉûè3>Ha +^²W)Ì& æ‘ïˆÀúy]Y²be_̆²ú¦»ˆZQ^Д™X&@ãû¯&R m¢ jÃñ²ÀJ¹o‹P¢]¾3ÄC—¹:#²”'õL¨Ìó-Õ¼ôš€\ØÑwYg_Àñ€ ˜›½ÆEÌÝZ޳‚×[W·;ÒeÀ”2`îûÈÔYûÿÞ‹ëÿ…άÿgpÿ ?ªºYzÊȺúNµé‘Š QMéûžA;¿ŸÖÕºdïvãzÒí¢¥kK7£—¹‰m¿´,°2se.aͬNÞÛÑɪe øJÓPƒœ›Ž94R¢KNš·ë±‹;ŵP"ž=e]©1Ò~„·ÍÕf,•¯#½`h©J¢pÙ0.-±Ÿçt À1“1šBÒ2G;²¬TŽcrì|µSôÙwè³B €Ó‹”#²§KôÁà*`÷G 5¢ëÕj5ë®y@¹ +ÿùé]}|é•55Y] ³„À±ýÆà2£e«g‚ÏóIÉ2©-åŒ<úZ’¤q«Òsv1‰ÜWë£ít±Öî<ØbôsŒŠ7áR÷¸•0s…®´ŒÛ/ós )À˜@N½¾Ùkäâ€÷8·àùu&1¯Œô+íÿ}t(˜-@­»-Àú±vCûßT¤ZŒ‡ vlOéáf³Rˆ^ñàMNÓF2`!¨2Dã\çb€½ v¼® `­Ëz•ág÷ÒFœ¶»BlR*ƒÙÓÔÒf¤ô=T"”°Ñ×ô{À^§~ë`@}‹•üàçÓ‡{ÝDÜi›)ûÖ½+Ø·Ùœˆ0:¡+>m'ûB¿#8ó¦\ˆ°ž…®ÏÔBYPo¨dn«Jª%±@à¯CÕ&šít³+à5€ ÂýýO€>%.°.aÒ_ _Jœ˜H(3%†$‡/é; +G ¥Giºl|–þ W ¸É¢îÀ†fž<>!ðá#ˆ +³-)ä~óƒÍö*;b)¨d×&H;XœÊôKÖ‹=À¯ŽrV¡’á“ôR‘V9Åûñ’(]¨ÑLZаÍü’WSkUã3¨ÊDÙQánBT_GM[EníK£u:»Öêî¬H°®”¸ vË>tû¥OE÷%ùùÆrØmHßùâÊF™|Ô­›(å8.œpšï¢4K5c/BÙΔqg*”ãéJƒ€RZ:dB”þ¯ë¼Ó¨K5¤<#¬Êd‰©„ö\º4S±-½~œ‰ùB౞u<2·M5ø¾S¬±1£lNX‹Òm¯ ?æû!ä+üs¬$0&»´„ÍW+½„ÓòGK‹‰º;yPCèuØã¾$¬M(z `Q@¯ ¤Ô$Ë9åOþͰ%/D–Wg.…µÙ¿¯L½rý¿×Úÿ”:ìC†úì[ ê*‰´Eø¸íȪÜá†9 'tïÿ2} éi](„ +g…c³[-µ\Tß2 Ë5Ü’õ`Õ…ñд.1?'k±ŒNU½„~¢ÇÚRzÏk“®ÄyP £g|Y7þ1”›€àÙ¡›õ'.¤·u÷£Þ–p”ZM’Ù¶P}Ÿ dcNÄPÆäÅWʹ xÑÀ ºQ ÿ§€3€L-Rö?cÕj´ý„€ÿ8.œÊÉÏ,Ås$ìøfÀ®@ŽéPv˨Jhâþ¹×dh†t8½Œ·¸» ÿËΡ|U½­QZÿ ¹Ò×é°Þ†c ¼*x/õÓ%bØ­ëU±ÁƵL<¯_ =] Ü>àkð÷å²É|æv»Ëpýž À‡ µ•¹Ù¹Fw ÃP€Ä\@#‘ÍGáJP4ž“ò>‚ÄÍl“éíÌqesæ6Ò=:ÜBÈ,ñ‰| ÆùB“« ­žy ™¶777Aq +ŸHsí#㞘Ç‹0² —ßÿ^ Ã,…¸¢~~vTdÍf—E˜ªˆ¡Ûïw³f{ï! '-Œˆ@ü³¾ÀÝ.´TžI”ƒÈþ“§ONºxLô2[É{¸Ñ››ÞNGæ"ÁA¤Pñà’ˆ“„åt +kñxÀ{ô`üë&0/ЀÿÊcYTz-S©Ï¦6T‰òKõ¨?š9p†Ž6á:º oBeBæð5œ<öÆ€ªý“V#!#Tµm‹Ø`—¥l ’¼Ð桳…Æòû£<®Ûy /àƒB[±ZÚÕ)R쬗$Elcu$"€Ô‰2zé’À‹et¥‚lNÍ™¤)T5Ü ›zïŒÀx5†e½]&îîdõZnêø‚ ï»Ó +’¥žÌ`¡XÇ–!;¡Tˆö§“E]_¹Ú¦Âõã3K +JƒPY\N7ËóM‘9áSbã1€-¾s•ÞíÜýhë®rày€*÷é÷Îä[[Jnˆ| r: `°Bå—Çœ]ÀÉEJ€`¿…dY2ÁÿØÐ`¶ŒXÀëÀNX€T–sÆ|áù9F¨Ìt_ê„Õ—…ÍK­b'ï_—Eí¸ûZÔušjñÔÆR€ô¼.¨ö¨W»^o'yèëiü'jQýx ŽBoRg^^)c„ø Ò/ñüýßýí_’®ÒÕÿ’ǛƼ~€|^&›™q3Í6ómV¢•%z°×–’a¶ÎÌLÔÉ"}†»X^ð'È`Â8`Óyž>ÜnJc5¶—é?f,,“4jͽ#¬OC<€¥ŸŸç€Sz +\ðíwÏNöڲʗý…@»è3…!€ÍÃ'KL€ÛòÿYŸt,{ç@Ç6“ö››Ì,L'6»iÜÞ;yÊéÊŠ’ušŒj^Â7!Cè“'l¤7ìV¦/‹.Íé_ú®’nIw4(XH­Êë+–ºÀ ²§éö·íyyè±Á?t‹Eµ·ß%¬Ü¯»‚癩"&7øö8rõQ¥P¡ô‚ýÂÌü:BW‹ÁþוÉÈÓo‹ÞuÀ’€'”ñ0{sPlgݤÝdN‚.GÓè¡^.ʉ€(x™:œ!¾³HŸ£Ú)1Rª+ÎÓ! aiÌ`u|î$ó 2¢ F‚E”´~ÐOš»P2jV»Ì¥²0ðæqK)-ï ÐÛêH dêܺ —,%fŒÂy˜™ª\øZÞK!ä#XÎRÿÜXB ý´Þ)wü€˜eòõ݇}ai^ÒedûÀŒ…^Ã%Šà€Åø¢~µgÿ³^H½>ÇU£8û#”²P¹¥Fœ `uæÒ¥KS×p30 Rl.–“ÓtAXç-˜Üæ3äF÷6éâë*’¯rwʳÎhè©â§*EgoÉŸâ˜QWÛ÷}:¢´Þ!mR§ÄdèŒ3e|+L¸dð—/_þc§ô-Â*boº  +7 ŒÃp´f 4®qb2ÔT¾xÕú8ÎÎÿ¯àÿ‡À¿ Í(’Õ]@ŒØ›[†M×U’¡ ÿ&«/ÖY¯¬Úç(lÓ¢PË" :ae%[aAQ·«jknl“Q]½‡<Û­1•¬¬eȤ® À”%ªN³!».°ës.£¶y0ÿ©“x5v ø?ž «Þ&¢»‘Z¥ª7Ç“®"—¼7ý‚@íÈ?Y^\ xxÑ5ö2|/°`,aÙ ¨ ô¨5Ö˜bÛ?9ë á jØà :¼J¯®µ³óÜ‚B€Ú'½r%¬ÛÃ(@ƒµ†ù7³ÕÅf¶å¸ eÿ¶ÌÿÊ­Hý_ê(MÖ¤§âBµBßÏÛ5F†t³le¼.-/…žìDÚ°8Uõ/ÀûÿþýßþèÆ»NÛ+dâxõ^YÁ²h¯ˆ8–}ùJ9qÞ—­¾m?´1`;‹fæfp¨ïŽØ/îé“oÉv|öD–tÀ£5ƒí \ƒ;ß:·›ûìÙãÆ&ûMl<}Öî7žêaë”Qá|8Ý_w³€<;¤ 5µMlöm¼öÂÒºØÊ\¼©ëùXÛ¸îÿà 0f‚}¾›a™óOîµàs@¿ °¥> «êOc¹HB8_)&÷öÿ3QOP½Ý­Èc€Ï™Zº} 2†9,W溑C!Qऌü0GQ)EœYÍûÀ‹¾…èl +Rï7º˜s<Øà1ƒ!xâH©RЉŽèžÎ´€êkÛp÷#Q€ŒS–÷fßó÷Ô™„Å€õ8•c6ì‘/Œ(=ž9±¥â´Þqeuƒ;°¢ ºr{ÀÿõuA.Ë×êÌ\lwÅÃÄ7ôoü'‘ã9„LJZôCåÊuàùrîoƤÛÚù!pùmíÃ,–-ŵtCÕOƒfeŠŠ{(:I®G*M*ŽÔnðQ¦¿¾‰-…’-¬,PÇàx~FÀß ÿÿîoÿòÝwoüJøòǯài€/]à·‡2/_/¬²¢? Úh†¯±Ò–Eë@Œ{#6*&‚Ô‚ŒJ0y|´ÝðÚ8‚7¦loï‚XÙØq-Ù;þ€Ö^ +ˆ?#¯ÆëÒ†5rÃ/„UO޶EÚíØ„KBìF­ÒÜÄm/ÑÍ |åVBøî!N§Ó¨«a1ëý““AWØ›mç}‘¥p›Y€jʃ£­sEºÂU±µ}2Þs؄ʉß>ðݮLYÏÎ1Pi™NB4= 0îU·Ø….QŸg“63%ÉÂÆÿ³L/f?åM,÷ )gŸB&3úH)ñ[X6‘1}Ô"an"gðÉ*f ‹áMxDÄÂïðø‰S.‚'ˆ’TÔ}´:ºÚûx5 Šz³î}’°nc’/”s ÀXŸü!ØÞ{aÓgÃ’Ü#Ôøbº6xeUòKÝEƈ•ÁÙo¼2Š ôªÄ˜¦[ðŽnª³¤/˜X¯mrNHÓÜ îpyêR¥á@ÿ†!,žsú?RêÝ6‡’ðÀY|x +@Æ&󸄳»Eg]vÆü‚g2¨D¼ÄʇŒg¨h¦ñ/”zC?“/§E—½¼>—¬'ØÇ¶VH¯ÅøOK“xª]eAª”+éQn§ø/Âb²Æq ;²_‹(åÜÕãzm§Áó+Îp8ܸ@e-A@ ö̥˕,%~= ¿*`g‰¯Ž +æÏÙgÉ+]bƒÂËJ&Bº±…<1!˜`D +Xu€áÿ%ƒ$ SÞø1UÚÿA^´ÿÏÌÿ¿ÿ•ïõ/Ø…6€õT nÁªPcyy…)}*¦·¤±lÆQYº¼]ï†}üÇ‚`%_iTg£lÍ•Ç:!¢À“Ô1²„”w“j¼Yx9l‚5òN%noÝn;Xóç\<µtªÃ5²ŠÓ-ÏÎ(ô4µ©Bt\™}'€‰  ôD^Ü gÀAü+b^> À+üްØàzP;lÿE"UCµ›fþE;DÆ~* Ã/Ü€¢áZ¢'ÿÇsȇ„Ã%Ó’QãÓŸZ¾ŸÇ]Áöð ³Ûãˆ-q æ|ŽÓ,¨¸uœDïûq$T–~ScP…=­-¦Á¹&YÑO¥p:#üÿ{<ùÃwx㇯tL<Åà ËYe À 눰Îý«Å6[вþõÿð@V-‹ŽÍÎMU>(Od +ùÁ?У‹R˜BÐ_°µÊðFðyX4çj‚lÑ•m¦² ðö欴/+[0õŒ]Ê{º¢[tèžçóù#G€Q'©äf´dý>|ö›Ä +“Û‡P .'ÆàË|÷Ï\¨ÔÆÈI-)|r²×NÚlÛcÛ\öÿövŸÀà@h *!|§1þ ^õoÇü£'éÌLMMKÏ©ÄðìœÎ÷HE{xxtˆ=o³i¼_Ò©ÇÇ,Øíçâ ¢^G'‡! +0ìÿÇ tWðšÄP¬,Ä[°›L’WRJM(udÔ'ßÐ(çÞo©0H›®ANôÞ×Sü YðÉÉÉãÇJÂÃGG'LÄyDðf`Ž +E¤gü6½ÄjNf]s6®¡–ˆ+1ºz]k?w%Éú€…Îtz.¸>$±‹F]‡mæó%ÐOøb³–îAd @˜#Ëì2`Ð]ºÿnØ\^ ÐíIG£(†·ö›…³un èh,{÷Z‰»²’,m*P-ó™·M˜¤\?ëÒRaè>éšÝÛ¼±íGNÒ!.‹N±4-s@àǵ ÌVºÆp Žh©ëOx{&@V¿Úý$àW¿ú»ÒpãÝ?üá»ïÞøÑ/¸ðErq À‹{œ›ð| Xô:‘y6<ö௠àä!C¬ã53se®½'Pxò;‘1.…5Ž9€?ÆÀÑX#FðíI¿Y©5b¢ß +ÏÜdËhgq–î‡Ád Õ-<ÃÔX±‰ŸQÍ$ÀoÝå¨`«âî&;íyL¡ß*ɨ«ÍÅXíøÄý/Dsjôøçßýsðà†`ÄëÍ“§'5bÑ ý‹ÈÐm¶÷ŽØs? L€³œ¬:y–ïž’w}EŸ°€ÞÃA»bsŒEÏg*s•æ€Åüð¨?R‰>z¬+š@X„j8Qä)€M ìy£‡à=òü7Q±K(s>(UºHXÉ»H¹üî÷“5ô tŠ´‡][Þæˆ¤»Põ†bˆiàßy¬Z~"öBÉ?Á+DÉtÛÈX¬ÍÍ"iú´BBÄFÌ|ÃË÷°åÀË÷tOõ;p†aô·)€4“^˜HÚ$¨7-O¸¶;(—Óx¢pn]®5jVeÞ³&”ÒKe·u0C·¼Éß0cõ%É7¡_ryÝ8ejv)2caˆÜÆÀ±õeŒ° fU{1jÆ¢<6EOa0M~º›í&¬ Lo3€ÖsçÖ‹xc¬5€§¼)õñG¨«F•c®ØoQûSÀSMk®r•µy‘Ë3,´CvHyVÂ!åÝhɆLøºèF«T ‰èWG_*õY’g£ü؋ڵØâ—TR^•k`@ûþÖúx@ÚPÉÓ-V”=m§Çî…[½¤ž%^˰_ñ$pžYŒˆ²¦ëç A¸,’Q–»ÙÚ›ÊÔÿ%Ùÿ/‰ÿüqÿË®ëõju±^|B™N¾%fŽ#ÄTGÚ‹ßàð?µAÍ «]U )@•R£ÅvîSoé“ßí)ÛŽëÝ4Š’á¦z¦ZK„I9çtÝ)½CËîµá›sQŽUq‡(ÕצاLoqlCbèâ1؈åJbŽ Ð$ï[ +H}æþ_ð aׯ$ÿWž,¿üÕßþÍ/ñ‹¿ù›¿ù%ò£ýˆÿýù äÝ?ÿóÿïÿžïµm!U–s¡¿8@u‘(Àn;#Þ0Px@Ïõ#{‘ÉNÀÏ;£ç2 ÀéØ)ò¸ËBÊ¥ú~Z±ËèQÔSl`Þ„2«Ô]œ^e¤•åEV¯^°t20–@‚KÂ@Àù*´¿ûû¿³àG¸ñîÿò—úâïκþ'W­ ªŸx<pa Àb + ¿Ndú=~VŸó.tB†¤n¤m¦çÒâPv© ·§xމFÃ*58‰q½"@ßÉb+•¸™2Å èßô… Vvd2x†t´°¬·Êì=ÁèÅ¥6±àìÛo?ÚnQ€? º :^—…£Fñkç@ît†™ÙYÂÿÃC62òê&]bøË `?ÿú‚T)s²ÊÜ|æž~ïÕ¡.—`ÿëóô•+ dã™—ÄF!ôÿ0Lfd‚ä&óǃ‡ #½V¶p›k€¨z=gÙd;ó +|A8FjM  ìF`4+ÒÃÖIDz°$¢²8Gìx§Ü… i‰ºÎêƒIÕÓªý5*3èͼ ÜY&ÀîowÊ€và$¥ô,Zܪฬ&x®Ï¤œ#‰Àû¬ô§ÂŒl¸Ïl¼@å-‘J‹ȪâªMâ˜ë¸,u®*ÿwѺEZÏ:ùË—Y¦ÀN…“ô’¦À¬;—QËÉ€‘ ~ø2õrûÿöÿdìÿœýø¯g¥Y¯¨-Veý_¯JÞÿ¾N–ã0þS‘­N Õi³*Š!ðÙ”µ¯‡2‘)ÙuÂVw„ÊTNjmeÖô1±Õëõ¨™ê4] Rš[¨ÅhÙšTy`¨|9q¸“!jŽªN!A¾Þ\mn +ˆ¶!| Œ%JÀÝØèý'¯ 8{nC@‘ƒó€_þò‚ò_üâW¿üÅßþ³þB8ÿË¿ƒürŒýÆ|‹ @èoüÿÑôü_þâϧÿìßÿ¡$x„&¢D9ãXN`+Àèz5û Œ=;Æb/Ú@¢Ö(Ù•Áð²€0-C Î#°Vê7‹KgAIÌ ¬Æ9¿& †½âPЬëû¡å`„j+á0‰ÄîÔyúb\÷Ÿ%]|c«ÀvH!Åö@×í +°ãZ­oŸ°}¿ÎwªüÂßïY XÉ|6åï„wx˜÷ȃ{ƒ½Ãíb;ï¶€îË9LgøpÆÍm. (ý"}öŒµúE·S”œJ‹^>7Sc·#J”°:½ä¾ò¾à_m ÐLRñ\Ö6‚Œ˜~I ¬ð§XbÈ«ˆn}û»¤àÁWbÀsg”ôéacŠÃ ¿¨:ž)ö$ v¨øBøX`ð[uC7v!zôðð÷\Fv†`JR×üŸ!iv€T’…e¦É¨;Õj!HŸîçÓ;ÒgÖb%œ“EÛ¨ÎYtF”! ©` s,ïéû¡Qž¾§‡5†Û>Okù>ê=‰6h±ÚtÀõýÝ}©‹Ý"ŽÃØ,w°hæI#;²}A_¡_¿‘&%x à%@ݸEÚ¹”óê´¢L¹”pÚfÀ‹Ä1 @IͼÌ@ )¨u]Gð™L7Z_ úž”“UŒ:Ñ€ükÙ’½^#ò„#©«eÀ¼W˜¨ÌŒ€¬j{øç!w¥½ó^Zí†qi¥S‰1ÄúK¤¸_oÊ ©W¤÷¨ i׿Œà_e¾O¢…ë”úReuµ’eõlŸíU9™EŒt%åR€*ÇÀü-³ßÆ=º,†%ø¿L@ðH<`^ àO畯Ž.Ò’^NÖU-š1}o™zÉúvüüç÷Çÿ’ÿ)'¼.öz‹Ñõëxj–š½R2ˆµ8ÏÒð-‰½,‹"ªÒfT¬žÞ¢FL[ˆ°%c‚µ¼nTc~ÉB§€Ô²8RµÞu½6DÛQ4K|ÎX¦®0P7ÝnÆ.ˆP­Óêý×Å€æMð"ÙÐF"¹è™P° òÎ9@/ÿÕßÊ”ÿÅ/ÿæG?üów…÷’_üè?ú›_þê?|÷Ï~¨O"üßìà ÿÁð£ýò?šü…Àø‹ÿ`À4àßý»WBÿDþðÏÿ‚«ë´_ý*xXX€€jw­kø÷J€<¿ÀZJ2þŸŸ@æ8„Ò‚¬¬¬, Ý¥p<æ]Á¥Ý~Zfd†QT‘D‚)¾‹ºxx%^IU”‹†DQSŸ“S2?R| 0öHsUœ×_öÿ'‚xCào!'€ü?/òœ‹¢{~;®l\¸€Œº7Å`ž|!x|rÐ…·ÎU®ýÉÔL»Ï4@±!ÒF¡=& šD€¡&À #g€'¹°2Ù÷†^ ÛnÔ’í‡Âw™?lY]K8†ù"x„Z`(…¯úÛ“½Mð6q@8(ë4›µ¹€ôè<ÜÿeR<–Þý~–ÀOd?ÚS×Ò嶼þw*ì0EÑ·æR:Kï`8¤”œ‰i0~®’ ¼XA/¬ø¸­£ +»æ×²lx6Û嘒4”â¥cÐí ÿY3ðà8Aœ/ |nV;Q~Gñ!SòÃ@N^eÿàw¡ªøBïœ øåh….kÀéõj@'YðáÃ#¶lo2•Aª¥…•PWAR[¿RVRù ܳщ˜u݆¢E訃ÔaéCôHk±"­–à„ž6S>ÛPÉs¶£éu„ÌÔa/ôb³žï@Üeœƒp-»ãe„2(m‘ËíÄIáÀ=¥©´m|Çɵ™©K3X]üJÄÓ×Ì…Ê“j’`¢†£‘²ë“X}ʲQÊ@)Bm~0É‘4oƒÿl}¿åøæç‘7cprž7g‰·©Åü9P^¿ËnÑ•xb‚Ýz¯°À>K2=eµ%ùÿã?𒥳Ũ»R. š$Ë6%xƒ‡T’ +ø«ì dÝ ×ˆ?Eå&ÇmoU“˜õLB.¤²šO²z—  ?êW©5@Г¾ím) l—«CV®Éü÷tÀKÓa.àŒ,a™A ×µu;fKÀdà{ÉÔ§Âö‹íæÿñÿ9ûßPM»ëEÂÿH˜S/ú[¸ÿÿhW;8ðÿc¹-µ:ò¾DáÜ|[Áø£PšÓŒ€H†½,ŽÒñÂ~´giorͺ I>Ìâë«é±Y˜ncO¿n%æXV…/ÉX¾naÀ‹Êá"‰.Ñ%Ôc³Ù\Í7=€x¶2@ÇÝUóòDuß…í¸Àßýêod…þP–>/8ÿÑß~÷/! ùßèûýåÛöC<ýö²= [ÿ§Àö?ÿÿAæ¿þÿâ‡/õHþÝŸÿPG[t?ü‘^~!W«‹ ³æ(!€æ-ʈç0pvtüvÁ€õë€ð_ +£m­ðˆ€šÕ…Uš*#5ˆ¼6fç¬`(¢T„pŸÔjF_®Ó("ÉІ8@𧜓’”ŸLt×_þòoÿ_ýŠ!€ç<Àø?þšuÎÎí/Z ÈkEÚ6O^ôÿéÓ£ƒn-;ç¤o¢„imx +Xö ÁðÔÐé½ Hz'Àc<_vRk$mÖíñ’x^R†µûâF:x„Ý/ Á ß¸À+½È‚Qºœ~þÕŸ<l&Ý~ngË +°KY€ÝB ! \‹åä9m%BDB({{Åöf·Ù>|¨; +qŽ:^gèTŸÿ;åËÞx˜é”±oÿa?½\œµZ¥2ÛØ<b +Ÿòfï:Y*Eø/®NÈoœ´Û›Ù¦òÑ÷$(@°ÿ™ûÕ"à4ß>áõYÈs²ô§"û½~öù Ô·ÛCÏüÿÿhû¿æ¶®kÛUªnÅQ|–èkEÐKTŽ“-…oY%‡…R + +a€¦9#¸&ˆÓ4Vê<^ÿ¹µdûáÆfk½>ÆàzTKûC{(„C@€táPy.XŒÆ}@¸@ãQ€Ù²¾Sm*ÿ¹BdÆÄ×\ϸ ×zz:åYZ0rЇBHS[?©¼é @ ðÞ±)Äo†'æYÐȸ©”bH!ÄÝà©×ÝE„’ "o'4øï©Vîš‹9s€‘"”4>¿_Ç8;õ“S1îkPWoö>í¬­5c@$¶pqà?¦¾Øvûèƒ6âL¸·¦2¨Wæ®·èfî8dœé€ô j©ú PÛñ(gY ~ºšÕèw¯EøÏ2×ÔX*U»žgsó7‡ªpoó`Ò¤ÀY’Ü"G/4ÇÁ먾¤ú”ÜEâ'VšõÒÓã[r•qÁcôÓt&eAVó)] €çéÏWž <…³Þ=€5é3ûx>À©Ÿž>øEÌðK²R¨ô`þPETëKâ ·ËIÿN ßÿÇúÿÿÏ—ö}1ÿ33—k—/×fîd+w²;BÿMá?]þszp3&Ûm®³ÙiVWÏfÙ<±ì¾oÐØBÚ­îozh_x’›#}i]‰¾púºA£*lTkµ~yÂEbÝèf oš±F7ÜwÓíÚ­$.cηÞL?²€>bô=Š ä‘4ŒhÝÒÖÜg_‚ñ¤Ï@ük·oqmì¸j\þìÚ5% + ô˜¼À€ ÷¿À¥+pæe8„2º&¼ýå¿ "yÝþöÛÛi×ðo1©·à˜uðPÇg×P#|€@?¦9#ñõú|‹ok—¥Œ?á{ç†pµ³õ»5вB â{šÛpHHÊ ¥çÀ3±píó/¾ˆÆpåê:2öLÊØðòOäQúþ‰0F@9ÃS­‡¿@þPHw£ù>[OV· gpdÁv¤Íu¡ª€DÙRå0 ôðþ*S÷º{ƒåö‡^r‡@»z{udÆ”¦kÐU, ¤,8<€dï¯gíîòzUPíÕjÅ&d™&­Yñ“=áÀhôç÷ß?%cT!çÇOc­"í¹ÏáûGû0&Q‰m&¼a¼û꺔[Þ(È„jçä$5uÅ`ŽÚ ”Wˬ·˜ °R‘y,;í\}yÛ€˜ðú/ŒöBÂ`Ðê&©lk6ª¶ܾ/ö‹òèŽÈDWý}y©Q|dC¥x3Ñ&íÅ!vØâ,-ò„.~7#WÓL®T0n<̤ø˜ÿíïÑuq Û½·³wG­ã€º‘ÝåQ:†€J9#É,s¤OoöR^«•à.±S²Ø–°½D´ @Pt=Ëô᜚×EéLÍVG`4ÀX_øñ¹hT»š¯éXülý4'S»þõ{æ±(s4Ïõ(öï_RÐ5ûlý}Y¢oWX Ì£x% f€Õ]H$ÖÓ8~þÎü¸“N·@Zã¬vÚⱫì?àGO õJÇSä„Ï\B†éJ+<zÌó 1ùP"™ÏÕËÞ +iÓÉÕ\,½0X‡ þ{À[ç!›:|ÍVh¾›L˸,„á±ïÛãL&Q²ì›¬Ú ÅìM)4ç~È`Ä+ƹ-ÄÝ ƒg®~Þd©•… ž•b)"I’ý÷tfì¿yކ'é†@ ³ )Kw±5;2ù½ÑÏ`Pœéñ'‹™kËgÜ0Ä“‘î|Yµfîß¿.-Éà¿…QSui.Šç„rÙmU»:I=oº¤ˆó*%¹‘޲Ë1ŸrSùá¡§øßˆP.¬¾¹Š +Ê·HÅËB;Ë9€Ù³Ê«t½\xËfÚC•ÙˆÂÁôµ +ûÿmq€þ?À°hµ––:ŸÊôL‹yBt¡ @Ìg¬Âùa>ãa€!TWŒ¢&fÀq€&JMGŽR¨ui1ÝŽS?­,ܪu‰“pup·dK ŽïŠ^âôøMðDèR]ø6ýô'ÌÄ ú3ÎÊÃê¸+‚ºX @w…[]ï'ü;%ð?¾ÿÿøñÿþºéïf§Z½<]½,©Mç‚ÿlôgÁUÛ_?Ï’”B‡ÞR2;ÝZéÕÏ¥1_ \Ò²„¡4ÍóQ»;’á_k,zepûn`ýƒzE$@-QÏîå͆ã5 ˜F”ŠaÎáà{ »_Îã _-îáR—9¦<àVÌãvº¾]BS6(£á<ÀŽ+þë¯íuï"ï]¼xŸ,€‰>鸯נ“6¾ø +üÇ`PŒ°  Àý± €Kï]½ýùíÏ¿¸-3Z"M¿¼òÞµÛßþ™Mö¿.Çx`!Øÿúé«ül€š‡ø§Ô\ECjõ{Z˜¿ÙIoÝÊóðŸG‡3‹1© Y.”­V[i2ÝèúË(á¶øQ ;ÀÌåU"¸[øÛ±‰^èè^ZE܆º–€›Œø–ƒÏ{ +ù¯¯œ ?Ž˜œä8™@tm1³ pc¹.Àór¶±¼Áµž›†éé”/¨$<^6 +”ÙÊ8½-Û·Ì-ˆ£] ·A¨½è„Qøñ“ï=%-¨d‘Q€—2Ôÿã'¦äýøñÞNßñ[tKË0•eê |S‚ +E(dÓ +ϸ’Lôo°Ãîê¾Åt†ý‹¬{ÞcÏ|„ëIïú÷÷iX6€ë%ØÌt˜[LnLzUÿ`_¶ò¡õý>ÃÏU¼Æo¥Zit·÷ˆE¬°°)Ùø-™°ùO, IÖ¸ºŽûKÖ¿,n:Z˜“Ï7ãí‰zCzW¤€¬zmÂ]m}*¬§îÒ\ËÑE[*>y'?ZXBN¼pe¨,^EhD<»¡û˜ÊÉêºØ£.‹) ftð{hó¤ÓO‡ya/ˆ3¥^:j6þVü¦$<¥Izˆ=Ë¢›<æñ04âD€©™È(+žuz*Ó®_ž®özlí(o?_Œ®$<«GМZŒefl8ëlØää¡w&3HgÏq ³à‚>Dß² à…†<ÌZ…ry>3Ï`Ÿ¶nPǘ?ií‡À2Ùæ1êI @Yje«¢ÃÀƒv úâkq­nƒÐÉ$„wŒf#’A0ž[X¹E°ÜÖÎ}öh‹ÅöúݤÙZÝAR+?ÚY’©¬™¾/úÔÉøÁ÷Äî Ö¶¶÷{§7nk]‡vöt%•â"SÿR–}]©7åÕ¬´w °³³±šTõð +ãr¶Riô·Äp\¥ŠÇÀŠ'¢§5`¡D‘Á?d„(Ì8¸*5j 0–kô¦Ç¾¥°žè? +¿1è4б¸PAgt 6 ]¨Šà°²¡_G§²HûPµ½}æ2¢`cku•©º,PÐEt¬¤ ãXF¢ÏóÌí:l5íö¯KŸø(ñË@ÔV-m-Wóañóʰ£ËŸš€qggë`aéGFluí©dº5ì6ò]ÏjB‡Ÿó2†*Ì’|:–¯ŒòÁnÚhúGî¢eS?#²Ô.D$C/±ôIO?ÿAÖØÂ¬:û”„ŽT‰òAón–·«ÙXsêt˜=Óê ¿€Süssy&•¤Zq^ Ûg?H[ó:D‰û‹M=­?)ÓZ%9-0HU/_Îtbbo™( €Ì:¹@%Öv]" ’:ï#¼é•§3mˆÁcÜè*ìÁéìx†›œ¼Š ›Ý·‰%`ª>?S n³ô8Sñèl`i°Ã6NíJ‘½ý]í0e¯*¸-N³³±±ž/·é+¦3“~âËÛûâ +Ôž¢F¸ñÿ±TD4“n{9_]ÏEÔ¢u·wÿAô+{0] b‚ërbì çq‹µÂì²ÿqðÆqA=z™þ}%›¸´Í‡™Šn<7ðP-ÇÌjK.Õ‘mÅÐ]X!!Ü~~á–©ØÊFµw¯›ü=ßdVp}S‡£Ü©ø©Œº­š'µ.}|±Sò#F_›ãÞe êI¦¯¹¯ˆì}~xS6ׄÄœ\øª‚”`0d­Ó×7~¿˜wwõ#ä`þ)£­!éÂåœp†»÷(c4lìêÑ€ºj˜Ûwò—š·Ón2³šš/­¯©è<†b“ŠZÆC3hDT>W&iŸU~ªu, žÝƒMÎc3Jwª™ÀR§§'Jc–ƤÐ@}¨}ëÂÔ·¢¯\mj7»’í*ƒlmwöÃá®kªzZÄ:–×ò¤TEkݤ?Ìác]OÚ.Ío1VHªÓUøŽ•T§`&úTïC;Ôî%ËÑY>¸—;æŸáTÔA•á”i/Ö’|w—Iáté[?z{JÔ¥^™#(AB<œÔº^Ÿ›K{CÒQ=ï´ÒóSSôÀ­ÅÉ….€cñ¿Äþ ûŸ‡5Èy³Zü_®^ž!øÿöà?h!ü7÷Aò´~¶Â4—2ñfÏ. I¢ãÂ.-}Qy×M€?²i6q7A)óùVýìÙºäü…¹…NoeSß_§òóÅ`¦¼†}¾†l[úu-”.€Á~Žªqü?8@w¹Ùü(»• 4ÿÝ€Òo°-×>ø¬@GAü"@xèÀl}~€ €>ð„˜Êíý·Ð øÿÝ%b< ðÔó.€2À€ÉÙÉ(zûó+W®Ýþö›oÿ7è†}ó­=ïž)2èö«±ðÓà@3¥‰Ø´»ô5öô|wiÎt~þéJZMô•–½8S£‹;?êC1Ô·qÓÜà8Þ P´‰šüY€ðrÀ b&åEóXÇÒódñÐÇý+…p,@üûÀþÆ2ãøõ¨o´¼^M5[¬ˆ•“åí¹xØîc¿I/8ÞŠ'èQut©ë¼@VØêxr6î{¶n™RkérÇðA˜¿s†`¡ƒŽn(' +ºù÷¾:×_§P~© Ìݺâj] ]¢‡ÛÊdœ¥Œ )¤ÔRçþÎý=st¤VC°½•‹¾¬oo •7³äÊFYËfB^:´œ÷eëk(š¤ïˆ€‘y  $}L£ +jE¯ŠvþþûÀýa*¦^)iµDÀ Þñ@üD–87!¬{˜ÅG@m‹]HÏÂI ýã'2þÝýÿT0¯cO´gx7ÀÚW²Gûx¢÷džM~ÀßwÞ±Üz c>"H¸+®fˬ¤Š¿Èc–o½YjÕê¹sÕºÎë)¸Z­ö½¾d3Iš‹ü7‹ÍÅÅÆGNÊ+ùh:ÑF£V«‰ A‡ôç³³5™J§OŸ®ê¢ó-¥h.6k”Á ŠÝ.wÿ¨Ë”7Âôj!PÊD¥úO¦k}t¾cÁS­œ›:}êÔTeV…¢FS?fñÜÕ¼ö[=íÝÏ ò”示•«ù/I~ý±” +Í[‹¢r‹E œ™©VeYV§«Ì¢Ñ°æª»“S“nã SW©ýZM© º„ô®T¼¹IûÛ¤9Ë|‘FÍÊ9å6ufêÌO¥µô>‡Î³jòJe¶‘¤ÍDš'Ó2þˆ,‰¨Íž;«¦²Ö¨«OµÇ¢>˜ÉÔmÞTûé„n꩹gYŠe†ä³Ò„£u™¿Óº§NŸ«<½(æ¥V-E|WpNE¤µÈ!E«àén·¹È*‰ æ(åô™‘þSg%žNRªW!“‚µæYÕ”yÎ2^R|N*§^Ãþ6ovRݡ˂HÁÿ²ÿþ1ÿ d0dÃ^ëœ`ÛcÏ×ÏÒ¢¾eð2Ý\(R/mæYíòºž¾ŽäŽàq:o§ói˜ÏÍ]¸À\Y+B•š=÷"F?“0‚WD¢‡êA¯fušC@©fçù;ÂÈÛ×®¼wíë¼ÿ7íI€¨ÀÑ% À‰ ]#;}Ïz 1 †»¥$Žˆ8@ºÂ ƒ=†¾Ä .1 ;Ù೫Ä|û¿}óõío8‚àâÅKïþ¬È e,|~ D+éï0@ø?ÇD""½e@éühUer¨™u·=Ap05S=ƒ¡YbpQB·tê3Çy®^» +öÛçò¼àpÀ«<ÿþï⯊(ç0ÚœXl,º[ƒŸûÁöjKF­ž ªr“‘¥Œçæ¯M© +m«,ÚùÐw¹« Ù‰Ýn?ë¯æëÛJÁ¯ÀzK†¼@[h"0ŠÊnÏ–Ä×Í–—cpÕ2}ü1â\µiksK9vÛ«y_ÉùqÛÜxÈ,V«EÉô®K¸4% 3ب$Ûn}:˧eØ,·è‰ÀÇä`Ëóí÷ÞnSe¨Gk¢mi…R®¿¤¥V1ìcÓI¤]Ö&h®n{)6í)Ì%ü>¤˜HêͼF¢+BÜö<@ØÝègÑMPr¬~pÝ +î ðÍÜ¿÷ˆ 6ðÿbÚŠÿpôI—Ó5òƒIΈ¾††xì?f £šˆH§=ûZD´˜Æ”2ú3_‡þªÂÅÅééÆ4€Ç¾ñK¨#,’€{–íZufvF0“LO7µ×X² z´9 P)ÿªÀ™³ÕFí× á—…“E0Ïårhv± ì„4jÓÚSNNPˆªþP¦ªV×õú8ŸIÏT—ÿËG³:mýÀ_Q™>7­ŠÔfgª(5Y€ršÍ…¤ *h<¡Æ,&jƒ_G¤Òj54OD~šÍÚÌåÚ xêãHT[¹6f~]Ó¹BP€éPŒ”…Lù—ÓÂa€Ój›Åé_×HàÆ°æz'³Pظ-¶Ä-r½Õ +¡9©ÐvRóÆGº¯R]I;ÍZ÷>cÑÅgetþmõ÷:f¶P6ºÊP¿žvUgÜŒ…ˆÅÍÔ¦EŽÊéÓSg„ÿ?‹*SSs¥ê{î,\A÷Aû“Ë)¢ ),À_òbû߯ÞìehÚÌe‘-»£çé]1Îò’ k‚”´q®^Ÿÿß~»>w¦• 'p»`ÑëÙ_ôWdÃAÖj®7nØ $vT° Ü÷Ki²¬Qüç`ü\ý:0¬d£FIºS¤zv˜Q€‹ÙÁ =‚ìràèØ E€ÿ oö•«6ËÍ÷è7{j¬Mãµ– Ý àž @btP€]Ämý€óãrdL@ÿˆˆÀK—~÷npœ ŒPfGbŒ‘ª.ß)NŠ€I€~ˆŒÇp=P­äá´u} À\Vˆ¿Â:Vî´Xò†º›bÈìÆ%þÝy¢;!ø¿«F7¡›3"Àt(äXÀ•÷.E €ðÿå1‡2à€çÖÜݺյ·ùä‚!h_°Íz=Üß^nÊN‘aËtõbû~ò7ùÀï9Æ ÜŸ"›4Ѓ´Kï?x* s}õñp¤ceo¯‹°|ìÑ*mÖ–å€ dÃE´‚ÜÆ¦ a>I—¥ŠØçöíøA/Û|‹~2ãé¢6IErÂÈR6¢0ª‡•ÐWY€Çø5±¯Å–¬~ú»ÅfdÝÑ gSI÷Ýj Óˆo†Š=â: –£€Î×ë³ÍåÏäGÔ mJÓ ýØ3ºé±…Ç Ë, "0ííuUMÿmþ?Ðx¿Þ —éxDØŸ‘ÜP¸€’ö9äÃtñ?ùá‰8ÇcØI¤ qƒXÿd¢IÌp ÛÿèÌrL‘:„&àË¢TåÙÙ_ÎæwÄ7ûüŠºmÙÅúèQ8¼£Vž¯òá®hi–ã&Iï1¿H„ûž­wßhã)Ž ³8¡ùMæky:_?{¶ÒHºÉåö­¾’dŸ:Wý[é¶W—Yo·ôíwCùS·Ú}àeIáf%­î=OY=CUÒh´¡­úTåÂP|)“¯ïî”ÓºûÖ¸JFƒpµ±ŒC°¾¡YÞ_¬%LQ6m:ÊÚÚ|še„(ÝtC&¡9õÛ%殫‡Fòž.gƒ²ëCí4šщÓô“C +ꛦ´u}WôÇ ¾JEÏ(¾>uº«xœT›Ý¡û¯‡Ã\›Ê—òn¥VD¶!N}ÁÄ}y5_ü}²Šæ»L‚Žäy¿—o®éý\Я¶ØÍþ¶Qö©*žÌ·:õ©©J+½u§«¶V›gºe¨Ž’Kÿ½ª–RõÜ{# Ÿ©OÎVÄ~ÂB™o_ù•jåŒ~ªCùåpzÝVg¦GB»Â¼“ +Àc + +9bÿ8Äÿ›bÿ™ûç2”¥wçNŽ÷_ð¿9aþ þ…ÿy­&H˜c.  ç/¤õ³-Ÿµe/ ø_RC$xeµ”qåã3f|áZu±®ÖRKFèÜÜõ¹¹…NÖÑ7£æDü=üB& Wîú²òÒ»,:u‹eJɵpN1@hýÎ;ï¾wíKÁ#€_x  üG À·ß”™ð„=j@Ä|®ƒW¯¼3Ž O`Òð5ž£ƒ€ÏÅ"À=W~(c^æP6ÏÄ|ý­ˆÉçÄ0 +—)ðÎÅKp(dL o¾ùæ™3ï¾[šT­„»ÿ™€~ 8@ wV’V»(YÒOiž“¾ÄïòþÍu;ôó2`)\»^€Ï®]•ý_„¼À põU£ž‘ÿwxºkhçH €A¼xìÛ?Ö|ÊàÜÊš³ŽX·[UD“A¦Çö.oÚÄ ÿŒ‚ˬn³Ú_ÝÚÁáБ¾#(ÖnïÜÇÌ^ÍúË"X÷\Ƴ,ë6;y!XàäÖN•@R&2®yºà¹‡sz{cc{ <O³€$ù˜Kõ©|¯¥¥l}çÀ² +诺Û]™ÉâÞS^&ÊTøVWóåî20•t—É“?ý…ð€¼áü0SÁ÷©ï€DZ_›«Û€êGŒ%تUþÂZžß•Êùê¬xC‚„ÈFæ!`-`½öd{‡^wE9À|l²¹ ôaò{ð„Á~öAm÷¹Ö‡t„z{L Lâñ¥•‹ ¾Ñáb~~àù ¥ŒèÖýûôÂl¬¯gÝqàCÿ¥þã;N_ùzZ[”Q£G“~<Òô¤â™F÷öp¯äÂÇÁÝA/æõÌÅô½ÍGÃF +õz>èÈ½Þ ×k…í­te¥8´ŸçƒÍÍ¿Ž†ô´ö h– ¤†Ã5&@èû€»5ø³¬©<² ïÍ;¹~ÒùÚ,OÓú-;°í-aZ–6šÙð/îó/ÃÀ(—vl €ô—@Þ}W/É%µð8€:í¹‹Âÿë:âß]DŒ7p´ráÂ1KÖÚ§²oÀß±jBï]Ã]¹!®¦;H(æ„@-ÿ + ð"]1 +à1…ü×&ÀkæÁKü?¡`¤b‚<´ÿp{µ þ úic+èšbHwé@É q´{ÆXúäWsð_Ð!LÝÆŠdxȽ-“{›¾Âʱ´@Vøj®‡8›¾ÞIãÅr}r ZOÀ> -0d-?®“@!úí­óÇÞã%+•ó +=‰Þ!®t À‡ pXþî fçSzgˆfÝ„Mz’¤ SYnQo“ wäC¤¨Ñ¨´Vï3""šµÀ]éWóΊ@Þǵ"M— t? Ë0ËôFDXAPPÍË¢¼×Ýý ðG—¿¶8.! ˜ÀoOù,Ömì盟 (†€€»þ¥³èÀÁC[ÿtHà³ÙÆ/²Þ'Ý‹‘€¿,WЯl6Ú#ý,ô\´ÿShjŒÔˆX% X‰~n¼ò;D£4 ü {·Ä|ùénsºÁŠfÙŠS9yª¼‰'P3x.¦”<™NÅøõG²%% 4Ïü$Ư˜(^Û.¤icñ/=RZ¸F§ Rc¤`ÂéƒKC¤\–7›Cé%µðæJèzU³ÞZ¯§&1‰¸\);%ùÔå.?rBE*@ÞY:}ÃqátC’× +x>–ËW*è×ËkÙÐ3—Xd~â•79VêX2áû¶–„Þ´÷JOè³wý†é¬,YrÆRŸ@ó´57õVåãŽgV.ۜŤyK[Kž­‰VÖ‡ªv,¦sß>Ë{¹Ì_Hûë•3õuš›ûàÕ±îarp›ú‚²-qî¤ò¬+›Ñ‰ÇàÿÍ–ÿLÕø/óeÅÁÿ›b:¨«%üÖ?h40°ÅäBM9]ï¥7;úŠ,, ÜðjƒæLCö˜ZlØndkk=2’è­fUÖº¤†’JG´äC™¥^ýÎ)IåŸ ãZõ?4?,ûæ™^Ê.¬"Žp6¿æ‹¿ôX^äx +X-< b¾Ǽ÷²<Ä|…1ëT%øÊs˜ØP Œµ^: +ÀÑ£¾XƒUÚ+bŒÿbü‹ ¾¡ú+z"@/:M#²IÀBžÑÀ-ä{®Ç†~ ›z‚‰m3çwO’p‡,L[%kç†~×2:ac/ ðÿ +À3kœPôCé–£ðLÎ`èy-1ü ×ðc©»¿Ú¬Îbí +‹£ ²¾£@°ÐYu†qýØü´«²ž™^ŸAzC"õ>Ï"·{80¸í·g?¯ÁH+:#>à½2×Ç‹ ¼à }ú„Ó /0\‹U(Kå]÷ëë[«ýœ´múùEÈ´m´'w©§C}QŠþj¶¼º±¾eÿ?lÕL&ö[¸½±3"Bq{]IYy–¢úZIóåňhbX>°ý±íx( ©nÀ=øXì6¶À-€gµ¢?È•TáØÞ ¥x>¡°Hÿt©.áø×z õeïàéßçMž:ê_¢#¤‰$N©ËÄ p謶=ùžå“Q`Và˜@n>ØÏ@NÏcÈ“RjÞ&p èSUl2¾ ý+M î¼+ã'†Hë—c`CBàq ˆ~[K²ó²ZÂ`3±qÿ%BKƒüBGO¹tÔúmƒg²QR¢_ì’PžìýX bÁ[' g˜Ì¤>m¼5tš§ÀMÔÂ?Ód‰vüп–.d /îV¥5w=æušû¨9î%T£!`Íÿã¿@¦§´PQÝCõxÖèA  ©*b¼±Þh>ݺËD$þÿaŽeü$vZ^—ylðgÉÜŠŒæ¶Œûd¶›3²”Ŭ§nt«âYü<¡¿1:ªTR&©Ý¢¹á½‘Þ‡:›fÝ™¦Ø…,kš¶×´5wÁ¬#‚ÓÀ¥ÇË*Ó´ÚXs 4ú¸ÍU;߃Öù)VdM@&„¿´*Su/ºÆpD¨8WÿåÔÔ[Z´Ê¡OãDò¼€}GdOà¿´%ø/bÿ‰ÿËeþß¹ãàÿáð¦NJõþ×ÖèÝüàƒFº´dËtOÓsMݽNöi§×Y¸ÙðU_"JL¬*§5ÃÅvNç³Nè¶êãá 0Í;¶…y;ÄûËæí¯ûºeráC\nÒÍÔÚ- ”˜ —ÛíV³UŸm¬ßhôÿÁ˜«f»Cl>ÏÎ-r¿,Æfu¶70ÿ÷XŽ—iBÀBn ++z‡F<Oq|ÿ„Eu#ö ÄÊ×TÄtà{¦W’r(ÝS!í €0!ô#Æ,€ K"&7¼öÂÇIÓÆhe¶2Ûüƒÿ¨y»Öè{é¸`€M! º9¶»«âÀ YZKXï¯ÓÈü4®rD¡„Š £(ÈeQêN60Ê|(ZÇ• rî|×®ç‡b}|™À×ú9j‘Eýv½•Ñs‹{¨T.Æ€«á!ú¨¶î¡¨"]hƒ4[Ñ“?Ðñd«½ *vžKËBˆ Ðj‰vq]n6ñLQåyXɬØ@ßñ<€Ð:K•êŠF5•É.ËE—/Ó‘“à̓ȇ + ºÕ”™ªæ`h¥Î èe›KCªg]Ÿ³ò´¾²²|¡°TEÞ¸I襬Ÿ6!PBÐéÜÌ{é‡ÍúÛ^Hà§ÿ7ô«’ž=ýþ’'Ò7.—ëuÖÊaZÚßpyByÞÀ>@ï×Kü—J±ÿ—/‹º­üüoü?„ÿà\àsôkµ:Kg>”-ÙùDõÖ=Í/è»’ÌΤ£¿² Ý¬‘ {+d·uØš…Žñ]—¢D£õ>¤Oá—¢y|†U4¢c @që°.Ç.€€#­`S¦¸@ò€Âo\ odCúõÑQöÈÂ?êÐîxÌóçFèí¸ðZÌ0^ Ðk¼ÔÀ(€É׬œÀ3>?À¡À¤࿸"7Naþ_¯ëÞÜÂPün'éÊÙ1ñmö·|)lâËóÿ1J³1" ü‘2ŸÀMø³@mõ…šÓ1ânñŽxÉZ/—ëŒÐ=Ï$“õ_L®èGäðûµ¨ìØ$dÿñÃí~RoªB8Ù̂վìrLVá@†Ã]²Þø×»–q ¼Ûb|ûéÁ¦•×å÷ö³°áÎ =á<£á´A_³‘?ürÖAÏ“/ ~ð@Y2Ùnä`ŸØù=Lv.‡ð.¸6±`¤^¾º‘{Ô¢²á¤„@€}c¿±NÖ÷œ`§ã íôFå%Ú°žñF熲Võq6d«]:ñ3“ qµN›¡Q³­þýýc¢=¦Ý±*@ÿ³³àÿÇë¬:Rrk'Ä>Ñ÷¸ŠÏx æfÀ?¯pûƒåÊ‹±|€þÌñÃúÉ »„O3IÀþÆY“\p©GèþfÐ Ga–0ÿ™Z„`go{{ĬIÌ †#謲êañý×£ +¸ |5úágé`-ë7ÃïŒ}LàD–ÕÍÙšlÿÒ" hµê^¼&÷oŽCvéÁ¨Lýä§ævT*iåt5-æ @5©g,%¶ ó¯!/ñ10þw:ÕÃØÿªjŸÍÎòwþ?(›ÏðÂ|¯qÖßîŽ(«êµVdÞ7²A¹þ”þFÍ6ý+Üj1Nµ$ajH½h<.^ÒFkž%­Ü`Š¡Û^¸„ÿ2 ø¢º@·¹Q©1[P&€so 4Ãà€ @Ä€õ º´¡ŸñàÜ7þÇ<ÇyT Œ€lµQHI ÀÅô¦À«:à˜€Ãy”Õ‘€Ò@ Èèjœ, <],¥øAñGW•',~´þU#îÐË-):ºâ‰pƒPö]žÌÖÚÝL?ì _ß[„x0n—~Ùáøì‹Ï@ûyGœ< zëÂyQ› gψ¤ªß×?ðõ[ð‘ÎЬ;ÿpoµ­§ÌÿŒ|ÌgL`qÐÏv:ÇØ a™~A¬}(|ÝvozØ‘B‘xŽe½ÄâfÇQÀÜ; ¼Þ˜æOà-à5à(ãò ×SŽFjM èWž¦Dñ AÉLi‡ä4DGÆ®›@ ô'¥ô†w€wè—`N_|Þ÷ÅP¨ñ‹áe‚¨²ý¾trmÙôCD6VEˆÚív“Õ û÷Þg§öä 76è_¥ ëލ‰€ +§†¢ NÈ>h„H€nŽ2ôãºg„` ;°®Oð¾ëhjnút؉é`€ËGêrãUh¬E¨vª=`IÀm\%j +#Òn»)³¦B @,jÀ÷%Ñ“,~ ~üÇÓߢ‘~e·èw“ئ³Á¨¬‘ÜbÙ6…F£àްuØiµn dÃD$øs~äA2¶¢ž–LŒ¡Ö½;~ŸJ•Í/9´+|1›§àKé¾½YðïØŸPŽ,»‰Wy¥+TíP]v4DC[RZÏü0WVz½Mò‚ÑÙn®ëUQ#êâT×XjXˆç .ïÝt:hl@ÓÒ~éƒEdξEÃþ=C¢Lñ¼qY€-ÕAaG¤Í€Œým%0%²Ò iÜÒ¾6lþ›pœ¸!Ý8¢eÍ”tÒ›Ñæô¡ú¾ZH^¬`À±<;â í(RÈ•©Ly>€Ÿþô a•ÖÙÓ"ÅŒÀˆ2­×G~]y©€Öœ'þ=Œý¯ÞÉîÈ´õïà)zÿÆÿ +ï¼n±ª¯;“«*3™ñ }‡¶jL‹Ñz"R½óF>p ‹ŽÉ`ìŽb™¤O|ûýåYè,,Í·*õ_ÖuïK )\u4SÅ«,4¸¸YâWøÚ‘Ø’ß|‰unÀío š“1j\Ú-,O޼Äð%>0ŽBOzŠQòWx,%Àkx8ÀÉf”GbnG €ç(<QÅDÀØøÝ%! Ë—×¾¸öÅgŸCžø²ñœ`@ýjý%×y"`¥üžÓ¢›;vÂ, †ýd¦–¤ëîÐÝ£’ð°ÑÏÁ>µ¬Ú8<' Â¯ë¨_k¾>W¿ðÖÔ™Jká:«ÎÕõDç±þ"À<”å/È?~°·Þm&²ÿR…g¸ó‡ z©q´»!D”yŽz/Òâv²¯QYþ^^žx2檉êf3ßL€X~½p¤)BùÈN߈°ü-áµÌc!£_$@Èýp9eë@õí½J¯¤zØ`ª"e¯ÚÅ@ Œt‚1ýí— è^È¿¿¯ª£ÙíÑà¬<±þøƒ2Ä'!ø—bPÈ ‚ô‰‘ëö»mÆM7™ N7*cøð{«ï3PÒh¶ÝE¡l”×a÷YmqOð ;h0.Œw€œw&þ‰meª;ð‚pÂf>NÏ +Ę@ñ»Îá yBø<÷¥<ú^·ÈßOÇøà€–Vsˆ®Ñ¼ë[žv1tÂa°Ýf+í&Õëí§À­~~úóî;âÈhÿ1Ïͼßhê9©‡( +`Äþ'›ki«ŸN÷s?7 lÊ>àKŸTyÃrA{U­žè»á0‚ââ˼?’>Я'-*c†ùǯ„ \I|÷PóÞE¯yËšHk÷˜ N½àÚæ¨Óʳ™îšŠ…¶”«çé¹#MÅ´ùøÄ‚õy:}#/àŽÙ7ý-(аŒl¬p.–÷i£a¿QMØFáp^ïˆó'g4R´k¯Íb½jt·!΋ñ-´f vqÖˆ(±©ŠŸÊ¢‰\¦‹ 9°¶éf6³hŠÁC2žˆ¨¤Ê+ƒ¢Á+Ų€ôT*UÀ…Š—8@î Y½–︮ÿÂÀÐ_ÄþWûwXùÇsÿ”cÿÿƒ#ðÀìú+@~æƒyiÊêüÉj1T±Äd”´¾Ã0ìeº;Cm9Í4@àfga¾5ÿËÙÊ…ˆ  î šO7µYg:@ k'‘µÎè|¿‚À€onGÀ¤ b̾ŽÛÐîFžçc¾Àã8\ àpÀ fÔ»W P€Ï…ÿamÇ<¿ó</ðŠÏ@o†kñÊy=î°àJt|¡Õ˜ð‰Ï?¿™NDèW¢›<ÀÃpËw—o€;iàzJÝmNÏ$yn¼—ð…çLxxˆ|®[öÙ‡1á É_1 +à5côth]¸Px~qæôyËÜuðŸ'ù‰…ž`‡‚Ûätgó#=gÚ @fxñΠÁtç¨6™Ì@ÜR{=v_ï2'Ãô–س|hs dÜŒ¼øzÃèګׇ[[Œˆû£ˆgˆÚÃ=™Ê±ï·=rñˆ÷âƒú9(­Lléè3;Á8bj_@NŠAà)¬ì+NÁ.ýÞ;Ì °M­ÐFY‚Æ~¼ CeérÍØ§ )\äÍì¾Lya,¦;íùtÆ4ÿ¡Z­²ž žµ3ºhÀUeIO†hIÀ¿0¦¯žq„ŒwüGì› Ïxªg4ÇÎç¿èlÐÙ§x0þYHràn¢ õñÃ8)`ëb¼ ÐÈ“8olä}‘–‰/¾$K¦g>`(? †ß‡ŸžüpzR»•åâÜ<;ÙZÞðøZR ‹üå¸0‰Ðô{#ýô¦Á]#¦ÓÒIé¤.)¼d•¨ÐFÄÃPPuåïßjîÝB’” .’Hmÿ¤êRÈÞhž² +N—Ý]lôcå=kq±ê,Y¾Ò»+MgÚ£®Í ÌòáQ"5Ñš©ó%>di¥½îtkhDmÎé+4z.+ý÷‹_ÿo ÈVÞ˜N²dž~y–(eñ‚‰F +Í%<©˜fÁÞÉ6Û q*„–.Û¼£-ú±Ë–ÒÂ@r'4þé]GP=.ð9Sƒ^Vkx‚¤d]áE%µöEMn´ê•3²ÿâg§ê"Lg€#ÜuÄñaÀÉn=ŒO,Ç{бìðÖjÑÿOìÿ ±ÿŒýwï?mÖIÿµðLÀÿXZ.¤Ù™¤¥'§ûÛ ÈSÌÐmbÑíìd£Ú0 F+­Z#ËÝJv¼¨-q±x~7ßš½0_>µžšÍ€?( ˜Ä!’ Ba!pÙ0ò¨ àZ`óçq €Ž„àp@xÆk™€Ž‚cbÈ['´I²’|I c0þ¾D^<1Ï3€Ïp{r€o¾e&@•é€ãç0þÆ\‚üŽ ÀßÑdÒê “§ÏDŒÉ×®êwª;'Ñ]8à;ÎãJ÷ªøòuæk¿´¤ÇW–T™ŠO_tý ø—Ì'óbxVÔh =wî¤ó ¯éг!ºês×/¼E@A®ÏÍùQÿ:"4f‚“‡{ëi3¡Óß. jã¾P;Ýè'Y_•uÌ– uµ§ê!¸N¨Oö£ÀÿƒXO±€%ø´aƒœü¸äµéMFDhüÙßÇ:سZ-Є“w¹\¯_€¯š¬`Î¥d¾ƒÝ*OY²Š€’à;|Ó‡ò|°ÿà‘X¼B'ÌOT%ôü"3\zçxäj +`'@=ÇÐNš³ŒØp úÁmLùhaÉy\,©ÛL£ÀdÃèH¯ÈŽÊÝÛW31 +.Æ œ22ÓÉOØÀ]ÎôÏl€²ëà¤Gdèÿðø)XÿC,  C*`2½֟5T9*‹B#G <„Λ(¡[±ã›ÑÀC»¡¿Ö-fGjé6]c4ó„Ⱥ½©g«p_™~;Œ¤n¥ Ÿó‘Œa€eo¾ @8xNê× Ž®¤Óé]”œJ4"S_áýIÊß©˜}¬1Ìôê1O£~—úùõh¦ì2Èn<™W£•Õª¸í$ú9{Y£öìÿGOi§]%¡×܇²,ODÛŽ57i±È6Ž~·&;zÏÒ€$—ꨬÊû­8Èx¯^:ÝðbófZ*„µr••ÊëÈ0ƒ0 T‹f³ß˜ngÅã +÷…ôW~ESð`SæìéAUا;JwÆš«­õ¦&Gyj×[ûÇ k4r|™¬ åW¶­ç6É‘RsºfYù Ð÷0·qbC! +I«~¾Â†ŸžúÉ™©©©ÖÙŸý‚e‹>€ë,•#î£w4¾®ïˆ÷±@Ù3ýÖå™þÊ;wþþí‘ PÑW"ï™NgdDkòVµ¡zÓÀj)ßvÚEû÷º­á@MXtþ#Pzúô¥óDÄÕ³^ùå/]ˆ>7ÜЉ-€oÆ/¿Mz ø/ޏý ³ècp° 0é0˜—1ÏÍh=ïÐEäg@Ș|.¬õ(ÛÞÅ(Àð;à+b<À7Á€ò/‰àÂð<Ä*IÁ„Ì¢Ÿ—g:À÷Ø¿‘Éß ¾õþuòí÷!?Æü$Hªµ˜­3~¨Äs%iI{3€I@)pWäE£^/àÂ3€©Ì—@ÂÓüu䡨Ñþƒ‡÷ón£é^êÕ|•…w…„ë`ÎzàÚ(«m!F =ðZ¦5Îu£ÙC#öóÚzx›lKmë €V°²ïõ„„É#ýÓm 7{<+.ÐoK] ½0éÑA¿'ª{¤7 !·ý;÷ (`Á¤•²„E(;½‚JÀtÖèÿ˜×+_Æ=« [`*!ågêG[â&¢à?*ztœÈN‘­G€xRWr£ÒìoíѲýYµOˆ«Ãò~šW˜-7¡‰bT½T›Œpß834I0Ïu‡ÀzB +r}еÀ{Ÿ.þxý!(ðDŒA ±ôuíSúÈÛ¬#¦zÁÜÑ>m‰µ•ŽæPu7TÇ~ß“Ä\þÒ#Y2]»å§dHô63¯“ÞÔÏfIÒ2dåÄÊ>:Ý¥"f:€Ñ¯¦’•˜´ù÷\R°LP䨻ÄÎQ.r^+Šå·YK׌$á JtD‡”ˆ…Ò–$«Í?ñ±@óõáØà;ò¾‘v…ÕÐ2}ÃUO Ÿ£¥æŸêý?<(¬GùIs´TròóøÁðð*ë=Ϧ[ôÕüƒ°}`ñæ-ýa/£²½­$oÌ´í»8á škä輇ᤚ%µ.® ]ŠëpA] `úü}Øl¢®²P®çcQÁ&ÜœkÍ‘ð+Fм²ƒè4õúGJ”ÜU³Sg~"ùé©©ÖÔ鳪–kw=zê[-&Ø›Oç¡-¯)/òð>á˜S—gý§÷ÿ®ƒÿý ò‡÷¿üwþS±}o²ÌKÏÍüßX” ˆ¯BøÏ7€vŠoAž5Ä'«Ü{Ž3v¤R}BðÀ@*Q  R—.€¿Á?Q€iZ7ð#€4ø¯­ü‘‚ >Œ2šGFðÿ%psèxñ(Ÿxv€gg”)nÒÀ`€ñT@á`Eà2ð5×°þ1€éË æ€”1€á(bÿ%À¿Þ€‘ÚW¥:àÛÎW +·Pßyнm3¶QÞ}èPŽñ7öˆˆ¸Å_8 +à5Ö8”Ê…ëŽ0¸~á,£&Vçë& °ÆðÃc†¡ìô»ÌÑOm'ÿÆ“û‚V¡ö|@ kƒ¼5ð áÏBXŠLvVÆý/l{ðÀ‡XöE„}Ê à[™Ù†Htáµ[øÌuÐ{„Û²ü‰Ys¯Qëq¤ÈÈüA€ÙÄ.ùÚà$²·¥•Un|<Ôi(Å}¢t•ÛÞ‚¥`÷ß߉ˆv+"4‚qr˲e¦åÛû‚n-,àû +ý p®rNÏóª‡rwuÍjO¶ +cØ*$¢Ã|L8þáÖÀ?+ “ ž}oÙ˜w¸_ì Þñ˜0°hÄžðŽCBŸ°“¸ïX0Ø¢%Ñ}£Eè¡Eu‡Uy©J`;¦inUƒ@²Vm6éËèƒ'Ú árû70hñ\±Y1h*ûtÖom +`}RGùg +DÛƒ?=ÔºÑYÇÏQ¥ãN?DÏÜ“±};=€¾'„Œ_!$óF[ZDu’Ü“¡±Z¹Ïji®¤^¢˜_=§¸NÔÅÚe½Ít±Ñ½;¡ù¤ÈÐ þ6’‰"èAâT¡¦5]AsÃ)V#¢4Õ4ŠZ>ˆE‰ŒäJ… À)ýÐc}Xã¬4Ï3ÍÑPAšŸ³|æðÀÂÙ qâRó•Þ¨»Ø G@†«Ä‡$E£kmpow11IëÄÇ!—¤s“k#¨ëCõ,Ï7ö´mG +¯‰FçÒØjµ.¼Å\\8ó³©*Â~÷ÓcúÏ3¨N:3ÜþµåÄ€ õ:#ÿïLöþß”ù›ÿÏà?óIR‡¼ÙÈ­8W¯Wg—óµÓ6#…ïm̦ô×a÷£é{¸¹já¸à¿››n›K)Q*.ÁëN +2>Ç@:Ê7<øóHëQB’çGLÌ ]ïÀ¹éÈD €ðœÀ9?à?À˜ £ß(øgÀ c^¹€çˆ @9y €ðŸ„+ðø/8þâËk_à@Ãe2ˆ<ÿòI×,ž-‰¶˜&š‰¢%qóà½jTågð€×_ À¢o3]X^› À3ÿr„\çÁÿ"xùža~`r¢Áîo¯37¿ƒûËEÌ[ؼÂAÜü½¼¹- ÇT¶ËŒÅ‡ ìãô7¤Ù²þ1oÅ @6æšøïïìx`ÀÛà aÐÆ}‡ÿË0ÆP×µøBX2‡O÷òuîmÐåxp0íÅ0ý9n¯„ŽíßNW¿y‰ñNÎö‘»´«’ƒ¨¨z®—3¢ÆD²!V±µC¯ÇÎ6Á è÷Wc`k}{ŸYÕØþFU€WR9‡°àb{¹ëpÇ` pM©“®á_6þ•ƒ31âãxî çú{úô û>p‚'Ÿ~/æþ‹È[œ$[}’yLÿ Qª—„YÑ à&$/Çr»+üo5¸úéUý²|=©Ö’;Ã`cEèùÝZ>ø.Ï7™\?æYäÈ8ÊòQžç»÷FÃáèÿ9Ê=û†ƒMVñÔSx÷o£Ý{ÃÁ`S‡îmJîýíïkä»ß1›p®ÿáàîPÏi2ݵH‡ÝÝ\Ë×›²æÄÖò•|s¨ †<¯GCÑ ÙiÌ“á†ù@šzû¾u!h˜§µé¤Ë<×XÄVÚo6¥j(¯:…æ+½¿íJóÍüƒ.àZšßš¾I©§ÿÕïýÿþþ?“ÕÝ¿ÉÈÌ{Ò|Mš4£!³ÿK»¿Ž6×TÞ¦”ü³Áp&ßf"Á3EÂc­ú¼Lg/W.̵JÛ¿“oh#_ÏjµfWõ”æªÊHM+í7£|D5y…曂÷{»£ÍÍ»ÿøÇwyÚl$wFƒÑhx…þÇhôtnjÍG÷þñ÷´?úÝ$‹µ¿Hñá`MÙ{Ù©0ÝÓÝXSM7É\­2ü®Ù÷ºÅÙˆɽJ³½¯äjÑáŠòÉúÔº.ðËþŒ9ÅÊžbg!íÈÀΙ—0ï ;wT3'âxò¿yôf—Ck%àÿnÿàüÿå(üßþé,¸#¶˜¥yÕC.êõ³g[© >Åd„- +çƒ.‰íöÒöåéF¶Î!(Ý&’O¡,m/Ýt‘4¥ À âË/Å ü÷&ˆmPz¾ +WüD r4€Áõ±1¶S'<ãµ< +àÅ1¶ü±>ƒŒ €$b<«¸ à•ó(›g×8œ€Y cŽŸ ‚Žx¼aÄHÄmŒÀ4!]Xåì£2 ¬º: î½ø8·ø‘e#Ø¿U[1}Åa5Ûþ>˜´œãíg<'àŽ½Ž€A4t”€_LÆHæêàÏÉÅÿ@™Lsp½Í:À]æåþo¯ãýÞ fÊ\@O»çùrTdž Ì>z‘fÐ4 wztd~ FvŒùÂkP›“œdçã\?س§Ÿì€%®~D•‰ ±NfE@yè€ò`KoäixÈÞ?Ø¡`òÒ•8D-”Óc1é(ü5a!ó:ˆPT[ÜBՖƸž@ÌÁÎÆº× +p6YÝ1™a]ïYIàe¶.e ¢·  P;Fëí?ÂÙÁí €@WÑàLÿ¿ò  ì{Àý1ðN‘lƒ8ö½Ç’Nÿþ¦ø‘â+ú„ê»` +Bß +€{p)w÷¬n¬F”Cs¶ÎL@þâw»ëúö_±rÿ-àëËËÒîfÝa쀺>¦³, o µ›Õ>J°ðY¾š$LàöV–˜›ÕúÊ@¸ÂúÖ‘Èâe†Fʹ³F©Jχëµz²¨æMÚ¬˜ÓN,RN)»]–ÄID<šÍ®rv» kÞéÏ9>ohW…j§ïwÖè‘Rœ%¶ºÙGµ¤»n¸&‹µ5þíÞGœ4JyÒHÄDXI'¿ËqÄ´dÙÖå|Ø¿!4ðbŠ Uœ­Vë•sgÏVÎ] }eX¼WÏe·žuÿظ,ÍUkÚUy¡¸žPj®;LXi­õO£¢\Î-U8I¥³… += ޲yo7éê¤5är :óÑí®šÊõ P+¨úùnMôH¬…Õ“eÿ³bTÑæ¬K¤<|•·NÙP™:;õ³©3g #n¡¤¦>Õ°èÈ­¤'”×ðè™ÙªW¼ðOLOÿ±÷Âü—°š=:œMçR¬^9S©ãˆ¢kß2îWøs:™HP[w¤¶Ƀ]¸+¬O:=f‰rÀÒ àBå—• A(U a)=È1áð‰´1 +@Öù±1fÚå Û`\ ÏIb&æ8v&@ +b`!cÊýþs½ÿŒpÀ‹f|åZž@ðOa:ñ<p1ŒtU–þu <_Ò¢_Þö]ÇðL@«)Kìô‘8°çXˆ›¤üÌ~Ô(€×ˆ‹.</ˆ¸>7äžXÜI F¦1÷ïoµYÀ#Õ×™«Æ"ÓWæ¯ñ§½¬aëà>³è„Ï7:Ø´ÐVÊ™œØþ7!,ð-°c\ÈŒ¥¯·ÀnÐ<¨oË/(ƒr!+,uá3hMÞŽ +„ètlw”hf: ’);zØ#~#®:3ß–å@ +J=¢([úðu¹•u‡¹…Ú_Àˆ°Eaøú:QòzøÕg“õÓ)C«Fl1ni—û¸Tv¶wh8W› +=ÜÇ CTÿ˜þÃ<Ð-|g¿ˆìûá)ÐÍ1ðN(@Øû×ù'?³¨l–1+¥l‘‰žÌl¨,ÙlÒ\YN¬7é§r¨“Îy_⌼¿,m Žt“æÊGM Ìeu“R}ìi¼£ËÚéNMY«Ê”«Ô¸G¤×9¹ +@qâúÊÕÆ0ýõ&K²•TÏ +%X=š˜ºþCóÈ&]µÎ.ÿ‘&Él’[uš|¬¹ÓªõTT&°ìVl‹’(¼…æ¼»¶’šò°æb|.2GC–<Ë3}ÍU¾@Ö¾îܲÎÛìÇÍÐíçýgúY®Ë9ŽFúd @=­2Ua¦3gΪVÿKõý:k»Þ4dk§¶á‚ÿ½žàºg°Lo–Ö¿=4øQó_ø_À¿Tƒ•4òdºzcA·XÎ×ãq›ÓW²Œ  Y/f¸96ÛŒ‰l„úÿŸt>ñDÑf 7:ó­Ê/ @ш±Lx€>Á-@ä³² à˯d€};‚_ata¸K&=q¬ˆ8œ ðp€’ã ¿¯èðëø€Kü_ù/²×íx>àÕkx€oÐÞu;ùZÆÿßÙ€ðXëŸ5‚ €Aoj]½«yTI{Ž:ô¥¼ÅO(!ÿ`èõ‘˜$Êž[ô£b~ÌZ<.ã# ôƒõµé +Ýg@ÀAò¬JÜNêíõ=™Ó˜ØjX襀ÿßc±ˆøë©'„ú£*=Hqï>徎‡ÁÊh1Ø“GhËÓúµpÂÿ 6~ +øT‰‹t¼¾nà^§‚:˜  á#Ðð‡ïnø@TàûàZP*îðÞ¾Ìÿ-Áÿ:]Ýöb«^ÕsüÜ90Žò¿äùúp½»˜ wéK^Ëÿšgw†k¬?vïŽ6{ý|¸û÷Ýït$'-c…Ü|”1/7½íƒÑ?îvÿ677ïîþýoÿóïÿsó»Q~'_O’uwÛÿÇ(Ïÿ2üntW%æƒáè»ÿ¾¾©«µ·*úÿG9ëÚ‡_{8Ü~w·›4’tmW©„ʽüî½ÝÍšÜÉÍ•*|=&u‡:‡æ»À Î óµÍÍ]”Ìòá_ÿ±ûÝ=úÕ“Z¢ÝÑh8¢wBÅKóÍŒîÝûŽà…Íá=i®×æÞËûÙ_‹,µ+Ù¥ i>Ú­Å–"JЮE„Â?lGq áJ«z–¹ñYþz+í)]™©}iÀa¾5RƒKóÿž.vóÑß67GƒÜÝòwUžܽ7é¨õ¿ûî;b¬y6¼;"âAp®CJúÝî½Q¡ù_ÿþŸÿ‡4ÿßwwïæý¼Û@MáÙ½]m¬íýU×é’\š¯K‘ápý.|m}è¼ÉÐÕÙþí;aa£ÛÛ½7 Íu\·u/µæ®¿ýö[o½ývåzý}¼ÿiõly!Xb)Kçð1$vt“¯ÀÉåõbð»ëöû‡€Þÿ#æ¿þôµ øO ÿü¸ßžm¥+øîð°n€¬—壴1Ó̆+y@TÕH6¤G[ +óƒè/\Þ×éyiÃH€gð¿ø4Dó_z !ú/€Çá Ç1@¦÷Ÿ +p’Q¥`b¼ùJ3éøÆ—(_‹SñŒçüãÔZ‡ó] àÅóÀ&c<ÁxwưǾŠW5Ä5¾¤aµÉ(>o}Ä@D¬{|÷ÁÆâÜZ 3Ÿ&¥„cb +²9Îð#Öp\pá`&@{ž#¯X€A¤ŽÀ«Õ„•г[0àˆý@@œév“»?ÿ@X!v4ÐU8¬Í‡ Ñ f†@ƒ-;»^vÀܯM!­Í_hv9‹½¿ŸÃ–àö‘ã-J ÞÙZ)²'-uˆ1í:Ì6¹ øÌDv¸LÛÒàà‘Ò=z„ +Úñx<`v :x ”~ppßÔÙcvBB ·eÀÓG`@³µºx/ëðÆOAWªçMd.·SV\ÕU[[Ì™Hÿ‚{F\ ZÌ"€V }‡L) ìÑÀ˜>íYìàdøð§:¡$O"FPH-`S™i'÷ÆD@ brFc?Ü߃‰ˆæà¹¿Í0€ø±Œ¢ððë(ÆÆ°Æ-†Çì´"äáסó¬”J¼ã¤%:ßj6ºÄa”[”Ô'{ ¢Cþ4ø{ÿ+ò§«ï;YW ã÷§gpad1OŸtP2È9]w6;ù±Þr±P!Ëõ£…øjwŠ£Ý-²TÚÿÞ­æ›…æ+"ëtÖ<_¨‡ùY'"³vá…i€©Pj^|ôzÿmðÿùçV¤R£9b.+°cZóBù#‚i*i̵„\ˆŠÀÜuæ´›OÇš£’=KŒ$“¼;“íºpµñ¡æútÜÙ¡æy{&éç1«¡EIŠðÿRƒÍÿý¿©±Üæ¸ANè'ð_j¿DøAÔÌM!Ñé,_ë' n;¹ë¤5^‘É[gIßÈþŸz«òv¥rýýÓïgL˜2ݰ6M¢Nü÷š1ÜÈu@x°Á%Ö¿”ÒúOàúI­‘‡aÿ‚Çþ¥¬í«úúîßËÓ™FrPF5¸~ý\_4I€Î¤ àæÍ…›V«â‘‚‰I™Œ°10GF8àY@Ä€õ›ÎÇ{ï 0~-€—Ì茜ß8` ¨-çðŸ{Üpì(€“ÌðçÐå_/àšGx»%Té€e¶…Ë4„àsb€ç/¿V»½… xºH|ïù‚,@ʦèQpó½¶àG¬xûk…8€QÏÅX 'Ð)@ÇÎÁÂý”¥€¸½Íœ¼éGŸ¸@A°·G;+w€ÒsØ€¶ûBð} TœD/€âÊš]›îœÀ’ä¯ÊB° ä3eÀG/eàë•ÞGn6ÿµ¡B{¶Vµ³ÏH¾@m4Qž:Ê¥ƒ +@Àp—‚¥”‰s„½¨tåHÁB?èŒÁÓqœð‹Û! æð¸Æl³r@ l¯ïA¦z„<ðjÁwS©ÎÖYãky9cv¥íuFUlïˆY¸(Akáè^Pc¡5 ЙáÇ| „sþ©û´‡‘¯—Oó‡÷?®ƒ%—IPÌ%ÁS¸÷ÅX@µœXdÿ¿^Û;&x…“V½z®Z©šL +kääü(Æ¢'%½£~LÆM ²EB¥¹ääۗã<c€™RëɼÉ.ñ·ÙGɈ´!üúø1Æãñï³Ø¶J)Sýx=¹×œq¦Ç¯5*¼`h!ÃdºûŒæú ¤Ž®#úè­åI-ùaÐbŠ!‰CÁlœÈš3ÔÑZ5'4'ÿCæ.á_ÐÅð8¬Õ³ç„`桤œõÜ)Æü1EϸþY2Í…⑇á Ì…!jnó^Þ­vG.Ÿ!\šÛ=®^oð§Ð\z³f€-Ø[h®Í +É̼ÆRÜ€%]ÝMu{|@sûM’ +2ç.¼ýÓS?a=€·¦Þ®Ô+§«¬v pf©àŸ‰€t›¤'ý{ý˜Á…·ßà?1öûÿÎþ[À¿ð'«I”‘ÿöèF +zù¨Û¨¶R‡€fÙ(×W.¦OpsÃÿO&\t2Ï×é ”K ÿÆ'^¶#õAà…€À5Ç”€8>àX€(€pbhÂÀá(‹“ñ`€c/],Öxž¼8 X 戙_`09 +À  ˆ°€¦ScÒˆ[åì«x•ƒà³Ï¯‰T©E¥ UdeC9 /ìŸ[8ü˜()€K(ðŸæŠ¿ Ü6;âþ½,€ +ŸÔ†8`b€cb$#'Ç€§…‰ ÎÞV7Hÿóï^<àvùã 'H?:Ú·Üô€¾ñYP¦O-Ö6ÛÆÿÂÞô%% €p~ W€Û@ .K\ß…úÚà*a©óôK;CïpuñWÀ· wi÷à‘ [»œƒš:@Aë¨jªb¤ÖÞÁ>à ÈIäÈ@ü¬AtO€)AÀq€ÿÖòF&„¶¯ßÇ/!,¥!™g·dºu„w×›M5írcuË ìlP¹‡ûô.’äÛ^{*ÓÃöc>žˆ€æñýðXØÎ, Äâç¸ €]œöé÷þC (J?m¢–à "gÂÛ# ‚¤Ê"8ý¶NÃÓÓ4™—gÍô Ä€ãEßgªi&$÷“O0$¬‹òV#Þꤞûaò{²ýÏ…ú޲æó~5aòm'Ct]¹ú=KÜŽÁ§à<ˆÙó5ÙZ¢òA@bº?Âùí’È¿k¥Œê¡­_:‰ü‹×ÑΰÐ¥õOßBZÃãÍ5¥æÀ2 ÜÝKâÿFX8iò~ -ÒIŒÜÏIÔ¬\ +Ð`U—ñ_={v~îB}N˜“vVhë#š[”sk:‘æ´_ÑßL³.Ą̊8ÚἘÁÉÁUô^#dæ +r¡Rÿëà?Ð\gè0èO´ù‘Ûl)ÀмçªeY»ÕÊ»ÍFÏtδÁéçÎOúÉ)|oOUΟ;]Éæd¿ÀáKªáçŸïù¬d»v”þÇà7Ç­fÚðcFœ0€iÁÂðò¬ +ZŽ(i˜”°Äë¡xR±Ö©ù`îmv‰ex[‰1p Õ?©°ÈÓô–Ìèññ$yVó¸PÇL ydžüÏÚø¿˜:;waî:þbZGs‡9,y•^k?ŸdIcU I8šJGs(ŒØ­5’ßíz`k¦¢ +l°VìQÕ­9Í”fÝÅZ©yгCi©h·yÁ¨ŽòŽ¡I£6\ö†ÊMº˜sóõ Œxkjêlýteîü¯(°,‹‰Kâ„0džP~¬@ÏQú!ŽôþßPÓ…ãÿ]\þó°*¯Ì•±€›¤Öܺ7,}/Ü}f’LàZ4É-)Æ|Q½ÎÍ¥%ñºÖ³Ö¾äÈL€Èx€Á«ðÈÜ¿"àG¯Px(ò…«ªxë!) À—ÂsÏpÅSþŽ^€&ÀóØ9®âtèõÖ8Œ(æ @Dà‹0ÊiÒIÞm©Ié\¡mí([Ëé¯Ù0öø§mã³Mužó”'pE^4 +àd1Bÿ·K@Äà8{¼ຠêDÞ2²ƒA,m?ØÛZÍ ð’<úw8 dPÕ¶µƒïVŒGç%Ô´[½ÜĺÚ*söÐñ1¶?H/älc |JK ¨1å Þ&'`#É€.‰/ o‚v(œ)R'¤ +  ½02GI gõçXB]`0ä*3ŽÃ&øÝ–¹5& à€yV²¿³-ˆdY€Õ~–t7ö .*H×(Æ>V=˜•i7+S¤Ñê¶`™oÑy°ÍDÅÄ-˜K©!¤‚=Bhé}Šƒû1ïèúÔŸ‡* @üãâŸr.àñwjýN6]yÚ‘B .Ÿ 6U?ÑXAŽ««y¹ ^?Wm4š…-hîâ|±)HñðCèètæCr™zº f£kJ$dz” @—‰8ð³¥TöAçÉ4çùWâCû³xÛi»XÒQ:)ÜòF¸Žõîæ2Ø H¼ô6)YRuœ!¿ðÃSÐRsa©ˆ@žÛP˜àíQÅÍ£Qû¥¬U³—ÄŠð*èÒÓǦÁøˆÌ}P¯¼ÿ~½Z­œ>ͽ¾ ®dÍMžÑ¼›6?23Ur1òD¬¤ädcÑM/¶T‡¤­ÿ¨™}+^§8MòFrtÍ˦BdEW¦~z +@¥rúýËÈ’›çæbM–%тʿþ)€¤z„¢šj îÿpÿÿóÒÔª‚>ýMdMàažwh=}Gÿ+|ƒ{½4]%Æ_5¾xT1î +.€…Ž1äYyÑL€A'ë%ì¥ -èñ±Â¦ï€#™ˆÐÁ££Ž PùÁÈ€q 1ÅZÏË+×ð<þçcЉ‚ä/®g¤n€øÕ7t„w7—o›&‚|öÇ!P~f?jÀIbŒþ… æ``.€ódžï@öGïcòö·Wé¢&¾mo‡™õ{'®N%H€ƒÌ¢‹»€5ƒ¾ào‚WýItBcXóY ÌÛBW — aaŸö›ÙÎ+úÈÆ—y°• 4ƒÌtµ¯Ñósš8cµtX¬Ã…¢”ðÐÍ1ÉCOÞKÙú·JÆA6÷Å,”Gáç ÷CU–0o@ÁŒîï±f¾8ÀÆêòêÖMÂäòà4 ˆà`VØ?[­Ôõ¤-ü_ ‰™]q/úܹì1S‚Àè@í<P[9–¾µõcx·kŸ#С½Ú"&Ö§|‘®pˆ#i7Jäœo šF{QM°Ÿ8€=Ö|ØbÝc&ÞIZM¨õ H‰ËÃFÍX$)ž|Ú¨Ó+nÁÄ×Gž'Í~¾"„T¥D‘\&U6üÜÂßJ§Yã´; §C’ñ®pHjðo<6þ‹´³4kךB¸±1@eÁÞ,6ÓQR͇ÅvˆR-É– "€Aú¸G=ד}­ôoJ©¹pVÏý\&>fs–Í´úœ…x¡ø”ÎÍV³Ád¸ØÀ œÇ1^¯œž ¸p] ÊsrØâiº’Šx«¤SJŒ&DQ"'Ú¼7¼U»uL*2)À²xiÅž²`¹!IòT9G4—¾ÅVèî6÷!"0ÝþjFƒq©²²çƒ¼Äo°ÿ§Þzû|åte¥ÂºÀØ0ו¢D½Þ'Ÿ—'|ý¨€ëE Àù·ë*õ)“c¿álþ3ùÄPè/üÇî¿Ns´ˆè­µjÓ¬ Ÿ¥›j(pð'··X`–© YS‘%¥¨z¸&Âa Ës2†±i1G`¡ +$ÿO0^ `bŠSš#1 ?4ÀŸA‚|Å(€¯Š€XŒ_ à7Ïü¨µ^o€xÎ01Ÿ¸hIŒòq €`Ò€ÿße‹Iõ.›ÿ³«±yUžkÓgŠŽ~çøñZþ1ž øÀuOßójÙÁvö˜ïÿþ6ëåìßßœ¶ìÿ¿!(àAêô„3П€;ƒ¤ðTÀ…‰ +rÃÌ9/p ÓR ckt­„9À€cd3Ú€uÆ; z,Ôô@\P«#\%ä6ü‘@ý˜wÙöQ;¬o·:%ä‚€;s ºæQKé|1•ðOå€üGD:r Ô× qa㣵6´cv´·ÅX¹íu„5‰i6–6¼¿-û™½û÷yäÌVª³³Ì°ì € ÖVVb&=¦;Ä¢.ÜuÐÚE(öKÉ?–!o&(OUžó¨^Ò¹+l#0i\€2˯ ™zú£k6G³^Ç`4ØÄg^$*$£›XW`”Jz™ÌfI7™Nv9¯§oŒ_ iÃLÀ!ÈŸNÉM²~ZkæB=œeq%"êÇF8ÚŽšÓY>N`ÑQÃ(Š©Ë`6s† A$BxÊ\ˆ%-®ÁÔú¨’¦Ó1˜nBk_œ¢xÖ=ú­ÙjýÿPoý|’mz¾Ze°Håô™JëBh³¢{%ô!u½Ù&µîpbT„„FìôîšKu“®AV[Ùt›—¹!À4Á¡¹RšLIßj­ðÀh; ++%*côFoÝ@©@ûÓ)ÑmÔº9üé°ÍµáMBô{K Rù™êwN€²š×w©·ÒË>éuNøúÑ£Þ®èu¡‚ 55u +åÁ~>þ óßðϬ=õëssóºâh ¬U­ò5K:hhp–ü_ù”/9lSmFsF[û†ý?…„ @LK°pŒ P¯Â`ˆÑÿØ ~q €€v9H€`tÈœ$` H{Þ@AäXH¶€9„âð$…àù€W¯àyÊ™uèÇÎÀ(L!3€waÀ›¨>`½ÈˆJ)<_~ã&+=¤-ÿ>ÿ¯ˆr•}sÜjüý¨Q¯Ž¨Ëò782€c^¨sÄ™¿R¼œ-‹þ÷û««¹€gg[€…þYªwO ”{@pÞC‡û  T\9Áp×Çw™áT€c§õ6¿! 4“Ï…ù¯,âJå F`X6b;@àû<·Vª Ðô"€ß ª0òÔê²%Vb¢vtsNù „ô‘&">i=ˆ…ƒ$ï%²ûa±hÊõÂë¡]ÙÉ¢ ˆÜ‡*©Õ6è,gÌüúPè¾ÎÐm3á߯@6;µ¶Û”‹)ðÐÅ@\̶¤M·$Ù©õTÏ 8tì¸fLžt³Á /‰§9H’f}¶Roâ Êöß<¸’Õj·Š1r‡"hÙÜå™'šˆ3ÁèZ²8죩`Å*èCˆÌ£Z§ +-±‡‡ª±ü'‚" 7)“0³ø¯3­ÉJRÌó¼.(;:iÖ¬ve–û¥dMÛѶÚ:èŸÒr‡„—ZÇÖpv,œþó ½‘v§ÑŒaP:ÒëŸrq®£5øºÔyN øëÂ$äô¦Éä”zM@ ± “[ž™¨LRHÖÉ›2I”`Ë^žÕú›tÍ8©Ý´ Û›ðf4‡ y[šWÕŠµ#1~ë ï’ý›úcSÇ—´ñ!´ª›Öª1¡ÏX­Bs5ú‡®b…É€¦NMQq\BW•¸ÝŽ_D>9Á»äõc`‡€_ž¯O=5U1öó*áŸÞÿ1þ_7AY " ½´U%.…ÐT†øúŠ­x,%ûñð§Û`)|Žô—I_§–gåx€¡'@¦ðÈLÕÿ‘y@Íc='0±À{1Bè£åÈ,9Í@$R€Ïà îb€ÿν:@jóxóŸY „Ft.ü#*åJDÔTj¬c2 ˆ !(®+½yèˆ]‰ù€‹ü?ôþ½ñbÀ‰×¨_8ê(çøÅé©ã ÀÜÔ¾RÒe=×ýƒÖF·Ï 5=ú÷w¶™òÇSèÛ¥m|fA mtöª‡pÁ‰Å]Ì3ÁŒt )@oÎé]èLVÐ +`@-höiÀš@ho’Ne@$d k[GõNjß>wS%Ò;:Z(Jj½[?«3= <ˆéJ€ø@:ÖÁ Á}¡¢€ZDÄJĬš+šLîlmo0iþr›iÔݯØnwÛ]¡}_w®Z©ÎVgY8my5[í¯oÍÚ#¦ñº¨tDŸè/(Hî6øá‡Gv™ùÂøÇõ†xºú‰´ùØs8Î œåÏÉi,Ú‚BôÉLCª1·TÕ†îØ³30 C–ÓÛÍv«!UxÛþƒÙŽÝÖC.˳zãÙ7!Î==ï<ÃL®§c8Ò“F6PÂÒk˜ˆýoX„«Þò&±!!¦Nýþh!ü—!Mc·ZËÿ²eÓ~{_,ßâ‚òS—[Ò!oN§²ä”«.$ëÀ[6éLÇá© ó´Ñ•]f£ œ‹öP˜:½Õ{FsƒšÈ  z7>(Vÿ2‚Ž}O¦*S§O×ÿÑE+E‘ʩԜȀ•d:]9ìlétPÚš[qd-›M¥yx?œ™³Ñ'š›tÁÊû7SõÌþH;Q*’ûA^¢ÍÕè 7:ó5š’AÀ"ÊjÜæ…¿Dµ ‰n€ •SSçec‚KÒ×ÿ ¾ÓÑ•áL?¡üS1*_Щ©SgÕæüV'ƒÿKø·ýÑ.j¡až5¦›¬Á¨ª²’¢ëÑ=4'”Uߣ6 `¾Ð¡ %?Ž“£Éx 2±ÀÉc&='Z àp€Á1ç'|,¤$‡3 \(,0Ž€ç]¯\ ÀóÄ0@ëùc×øÒ£þàf4,ñh_ÇA€ÿ¢µÊ{ w;®rkâHÑÑïmå÷œ 8kò¢Q¯ŠQ>ꘈx±àúõåH;i6šõF•ujô•yêIê°M½¡nغÂ`ùÁ£ÇÄþ ±õÊóJ)à‹p ¤*põñ£'âz3x µ°06¶ã)à0ô€+:XÐ8å<´iÈÖ&,ï:¬<D0]9G 'Â0ð•.Ö¾'ÖËà“¢_ð5E©Îs5úÁXwÀ õNX AÚ—•,¸  µˆêÇV–¥¬g»ž­f]ÏɈ˜¯ +8ù«Ï6Zz>ˆÐÍBW±4.ø+ÆRºÝÂꇰ•è¶Pûº‰êÄõ ëY ¨V‚€éB|æe`XÀ“ï¡ ºNµVCiKõøÁ·+šÀõݧ‚ây r”6̨oË@oôãØm/'I³Z™U€žŠÜÈY—à/zŠH;ä‘¶{//âÒÀ#€¼;%ÐÄƽ„c ìXô¸mA…àK|N&Ù!<ÛÓöü8⮕¥"æ¼ÏaŸ Gˆ©Öšö0ªp¯'¡yÞ»÷·A Å$Åi£ÃX9D5&¡’TGÓ›qalA£äE›”}¡ §ÙÂö÷êðvX çñ 8 ­W‰$‡-¥¤B»fS“a‰ÅQ}³pü÷z£¿m2@ N›gµî¸ÍË€ÁäÞ© •M‹‚Ò¼¦¶+¤¸Å“ý úvâ¿p¯@qŠ;V)Áï"Uá²Ò%¹j]?OÀÔ©s¿4ö ‚-sЈRÆ+XXùUï’01 +€€³â"Úã¿°Üû?†Ñ\¯œÜ¨6VúirÕÉùrùÆä:X3p„OîÿˆµF`€#G=€€¢ÿÒ&ý¡Èôþs£ŽÄ¼z-Ç(Ѥ ¢ÿœqœ’’ •D @9 +À1Ï3€££&cŽÌðí·Ì¨"U©—͘ðLÎP¾=tËf¹ €XTxD@T3X€k¨ )ÉÅ÷€m_¯7ÎØ?gÿ/\ @ö@ðÂQ’ã_*Àb/j ïôêúö–GîìxÂÆ»É@=ÀH•‘Æ'@ÃPi }œîôþ¡B–G2VA@hÃfg(€H¸õ4cè=Èl,ÂøWb÷øËÁo¤W)&úãˆáLpéluPÒIF6¼(Õ°]#ªÊƒàûÑœ¸Øæ0IšH%÷¡: ÚëC&»6 •V2/ €|Îò­õu†Ì'ͦ‘)ÑG›Úººsxf"mOà K²$€7)ML}ô¢Žn)J#èOzÁzlÀÿ=ÿ íî?¥ëßÃÿt{?t»p‚|Tqµב7mé6pÁ®Ø/vÃ<ÒÕ¶7Ö7rVùkÇ(€‚Hž‡,¥ŽþÆw¯‡¼ñ ÝÎr=Hy®ÜÛõì¾b–˜¿Ö¸ãgeòá8¨%;èäØÑCÐ3á`'²µüÍ¥©E‰dͺÈ!kWEÊ ÁјWèPšU÷Z3Ë?Ý.ŽÅpÀòlôݱkƒ´qkh'/Bª +$ºJÍÙÊÓ P¦Òyœìò›köKà¿ÎÁfôE‘•|VlJ¡¬5wdþ¡$"´¹ÊáøXs:4²áw›…æùÚråvÜâ1PÍFbKP$Ë-ß•Úl¬f#)SéšÃFƒtE‹ÓæiÒvxFd‘5ª+9öøZåÃíÓÖ겪õU¥i‹ë¬Ã”¥ .,øÿUï’Ö?ë õ–TQ“ëÔÿÇðþÛm!Ý×òµ´53{ƒÎ)Õ·•1ç²@QϬ·ò¯½üOŽt[ÑÒe£˜z6ðq¬¼h€_z €úåW2ç_ÖKì[¯}¬°ivãÿ1k¼j&À"?®GJPÌøûkô½_ùà7ft Àq€ÍPxtèÇÆH+‚¤¿*^Œˆ°ý£ø¨‹cÔ¤¢ôhìÀ­åæâÃHøÏn‰_s€^ÊÏ àGxE ]eÏxcŽ_  œÏ¯ý4Û^ßTOOVUÍV7Ö×&ÿ»/`П‡ÒG-”¦¬$ñŒ‡Å,¬K@OÃ/†¼0]`ðX¬Ml(™Gžãõò¾èDàÁÿ@™„˜@Øà …’4ÀÉÀoeÃEs@›€w±£´ä*g×GdZsHÛʲ ŒCèyW-ERô)PY%@2³²†(Áòýmmol¬näýe5%íÙ¢m»,ÓÚíVX™­³ §YÞ(çYð䂼¡›¯ +ªÏlHIZ0þuVºÒ€?„ùo÷¾1_<à©é•«?ðyêi"`îàæR6£h^Ó¦î.ƒÑQo–Vùc) ­õ~±`»Yg$CØ~‡R=êXà-€+e6=.‡„Æmîº'@ötÒÔ““Ç#æH6¶k1woŽ+|U[怾Ÿ8/¼üKÐW vhÂÂÝÌJ'ɺ32åUH‘#@Z<ÏU,¹ÕœNi® +ÄA=àuëÏ݈›…æw»‹Ùf/†}8¢¹½é>DÝY­)µÃ©Š’uó¥¡Z­ÆÂ Ÿöèw^yûüg«*¤lŸç„ÎNjí¿H)¡y1<zk››Àlf5¦¤ÑKÍ ç`2ØTÜ/ «æµC/Š„Jc€q››¾Â¦È)†ö= +@ÂNØÿeÞ!sôÿ@&̤Ç{«©Ÿ†-O*?*`b1¨‚`¡rþ¹ÞÿþçÓ|mm0;ËÐ?ÝMµCK,§Ç׸ðp´VVV ð¯ e¥y­^µDÐíOŽáMÁ 9à¿|~c¾l}sûÚÕð|æQ·o_{ïh €PMp3ð5†>9Nz„D²=JNpO €Œq¦óï¾s…¾¸ýõ·*²} D"%Ð+ .º®OôÆqá¿òÐ¥öü¯Žˆ @{0<@ ,cÀÌK'0¹¬Ä£Ô˜4aá }# <vvЪP+µ3©‘Šß‚ˆ0ˆ(Ââ¾`ÇèOË‚öNAQÞÐG§ûðíd À¯®ˆ¾Qá—wˆŸ>ãÏ07÷RÀÉ\Ë"³JxW{«}b¶¶˜ ŽP0Ïý§MÁƒÔ80>¬b¢A„ÎsA + ¶ +˜µkóÿ¡H°lã¿^ G¸#<eÁðö” ++Ýy +ýÀ;þ$ô`3Ñ £0 ŸréÎX'L Ÿ$ÑŸs]¶Ý>š*yÃO ¨]hˆ·8£ä‘DDÒûL@0ñòj£û¬’´}_ö²d£ßgi`µj;¬7s%–wg*@Ëò(/H,ñßìDT +P¶Ò’tEUaöß…ZZV½¤`Þ*B¥¦Tú¡Œ ?;ŠÃn‰hE•¢bM•|ð Å£?¨ÒÖpuu5ûXõi6g+çfggÃáŽØ‘5fé5bë)(œ4²Á½a¯³¹{ü¥Í5¯Ø[y&ò,*'½‘ÈÌýé&+­„ø™ªO&#†$º„×Ñ;°åÊD¦l²æõí¢'ì˜ Pšqt)c1 Ža 3áçRzC8í^í,¿·™gƒÑßdFîeM¡cϱ “CêÞJ^¼»"k¶Z®c(¡QØa¾œP.g£-q)Ûþ…'à: RϪ ³$©ã«Ê·fÞå3KñH†×;ãt’õX˸·ùÈË¿~—×ò]¨@&íQtB¢Œ i:ZÉÖò†p®(@ÿ¡yfQöí¢Í‰›ÓmžŽš5/QÐ!·ùaKYz½òÖ©Ÿ€ºü°lXóX°¬Ê7"®Ä{²¿ïˆQjjÇè™:Ïôüõ£æ¿§º˜o-äƒÁÚZµj†YÜ:þó-^)îq˳FæƒKÿú˜®hµAž @𙜠ЀR +€! +àˆ¼ùÎ;¯~nc_õÞ¥k·¿-<Â0Yð“€o•D“¾4á¸òί®xÀ5°²T~vPÆñ•_½ù—Ù€Å`±"’’ÿ±  €—þÛp\ ÀE݇۟_= ÝUˆá(/p¾&ļô¬àÔàá°¨l‡ ˆƒ }ÿ´"Á¸Ž€Øz‰n¨|tøfåÀÕKïžP8îÛ¡´ÿ«/pÏÿðÇ‹ühSHƒÎ}Üã 8 E +T˜ªVx®\|ï½"@wæå¼UÏxŽÌð‚™CŒ=¯’¬/”úX¨”õÿ¾CøþVüai=º†1 …ƒô0ðØ¿¡kÄÂÆÇ}£( +diGµ–Ë,ç„ñÑ1Á®»‡ø3 +† š0 +#p¨-ýˆô;‘ðMzÁ|Q”A‚›+›‚¿èp~VÛÓ tB +•ÊǺé zjOª¾ZŸÀƒ½‡Á’„–¬ ´=dZàþªxUw9¹Zî;äßQ€H½É8À~•u˜XÌŸ nFZzùcZD +QštÀA=¿Ç3 … ;ÖÇ?`î±ðqèÆ–î6û¿gíQI}ÿµy“¡Û˜Ù¾gŽ:¸Ïª–^;;;,Y´±º¾ÚElêéÉl†uO³0oŒüFY­¶0*Û3l{=/‡BôpÌÿ> þÞm2JÍOK€ Фø§—ÚùYô|æ ÏPÌHÃP{ι—¡ôS×p aG›»]ßQ¿ÖÌGzHKÐQ…å*®È]ݳ=¼³8-»N‚æ=½ióH/A.DûÇæŸÿ™-ÅaV¤ÅP°i/·>˜DXšƒÀñ¼÷Œ¶ÃAmI'! c¨‹T¿CÃ`„å l™«_×ý“Ó4Y©¹ÚGÍ29P1&ÚIó|±ƒ$™ +ÐUFÆm¾”®e]ùÛh0øŸÃÚàžI—'üµæª®Ú\›nsAJ”Í`­Y†/’•pN ';×p¤´´c4˜¨¦BQk› k™˜=%´¹Îè8ƒðÙº ûÿü¿œ:Óò¯¡Î¢Ç@Î5>T$ã¤ò£c(›€óõ³Œ(<ç/\˜;4ÿ ÿˆ¾¹ùÚlµ{Kü-nœç—ˆ9¢¨ýW-x!.Z¡˜ +BwÄ߉¥ô¦ì¡ç“N= ãù¿#2>`)X¤xx_¹øÎÏE®\3dF ÀmæÎ+¿½ÐÆÀ>Ûà“2 +ûø»vñw<€Ž ‹¯]y÷½«Âsa™R uàÍ+VF™Ð1nûß—úøG¯ß›4üüôÇ0À‹…à8äð¹ò¼vIz+A2tF ðb5B`XŸ„u/×ûØÁ€³`\èæ“ÞÒ5þ—¸(½œ3{ì%¹:]t~’ƒ¬hJü!ùp•ÙŠþ7¥97')aãÑ÷ª¸¶öe#³’¬äƒýÄñíííìËøÇ^føŸí*Q«füE `• €¤›Ñ0Úa±ÊDÙxiÇýŸ ÕìP©BmÄs°ïij‡’: t@¿)€’1ÀÇŨ ÁÍÈÕnz·†“RiÝjÈýe€XÈBîïQ*ÄXQú5’F]濤ÎÓ-æ#/~Ÿ WºZº{gess(¨Ë‡#ì÷´Ël)’|È2)ÿøÛßTÔf7îŽ6‡ÃÑЗ˶Vjz¨Wr>Ùp¸›gÝ,_Û.¦ýa6Tói8ÂAm(m Qw¿£Œ´›õó|Ø×yŠÛ 72}•l˜4³Í»¬N¿–6)`r#Ðg¾2Ì»j2Ò†µè þZh~Ëš+µXÃwûîïßË’üïÒü®”ÏGÊfEš«¬Rst·æÙ­|ð×Q#éŽDúÙ²r9Ô~ü]ÖÈÿA›ë¥vGsê@BÀÇ’ôÛ]ckmsÔmKó!lI·ntGMmÍ¥­šÂó=ª µ ÷¨+œî*[¾’ »¸î² pžoÞSP)-sÙš÷R<ë•Ó§NW®Ÿ¯/Ì [ =!(H Ë›ðt¼ZþOˆ(=-ž¨"õëÿJhü_i̓ÙnWšéVIÓ&7«Ô„H‡Å Eà¶1&ñ"*^0s¸O?éÌ©Ì10ºÛlÅ>¨°Øa±ß¾€§¯¾þæ a³(øZF¸ìÉ/¿ùÖHOºÏ9¡m€Vµ9öÈÚ·7|€Œw þ«W~õÞµk¶ÿU²\{ï7¯` + -• + ËB„¤²Ÿ‹K$Žÿ· Î !³º@ê ùÙ»2É• Î<á8—Â…Êhr­èÙøê˯¾üò)x¬àÐPÀ?=¢Jk1Ñ ¼…/@ €£‚y&A"&Ðíæƒî=ˆ»`;ÞW\»zÅ  ¼G>áwí(ß2ŸÂ ±€ƒøEÌà¸ß÷ ëßÃ?ƒ¤½Ì oêÛÌv4€y&V|a Àuðçå}=ÜYÉ®/»u½OÏô}º¦…ûöMË6% +Ô{ +D×8d܈ÿA”‡¥µª +J€Ñ VíÀ Ü>€–-u¥Tö$$W°)ŽøÀ§‡†<Ž>~BHŸT#¥3P^¼+;vµ ¾«@°T°²–6èø°Ì8ØŠÄ•QŠÀÄÀ\o)3j BêbÕmÁšÃt’˜#éM@6=xÉðÿŒns€ßc-%ÆÉl³ÕîöÝÍ"ÙŽN® —0 Jt™ñ¢d´B%×Ñ*òzJÓ~ÿä)Èïpcÿ §EL ð(ŸÑ‹†Ò{d¬ÂDŒT÷˜Qð‡%ìíïàÀ°A`ƒž`20±Á€®ÌïZmñ3ÁHâÉ—Þè&ýpKÿÙh“geç¿õ’E…,§TØ@|ºR@"0ÇÀÄÐïfµZ:'˜ì±æÂMIºd:Ôí'­E\ d£}ú^»ËÚnY¿–ôuœ1~èƒQ&äâEY‚®[ÝL¤fqzcÝåûÚðyH€Rö×îYóÁZÍÑÚ‰¨™`¤ÊZH)ÍóBóD¨?SÓ‡’to„¿Â³ìåùj·ÝôU¡Fƒi*Ik¶ú¾Ú´~¾ +«o&y#Q#Üa¥íLaz£0I¦6U1‹—IG\G'°fÝ[*mסÿúß²Z_M¾ ê`¹Þ»4Š8‹4×f›6WÕt+“¾ª¤"šÑbÍuE¢kÄ^»-MP1™.ió€Ú(‡uÖÆk"¹Å±tùV–ëæÜ +ݘ¦¡^™˜ªG/@½.öÓPCXãŸ\^?àèZjmÏ0Ḡë'à¿Å—m  +,-Ýò÷=me=1R}ÿ1kÂ’?éª3 Æÿ›úëÄSM€•À ÿ{zãå·âTq$1~€Oß`œÒíÒ›?ãçoþêÊ5Ë`}1•“I*°!^ëÖVôçΛœE”˵KïüüÍ‹×nßÖQ¨·?#.è¬o¾‡‰l„ô5F½ùSº40S"Ü-å7Æÿ7ŽsØ@^›öŸ‰ + ‘>`"íÍІR ½¸Ê•÷®CJÀÏÞj,.~T¤ÕZ•ÔæúéšòÕ™Ëúã,Û!3U©:ååZ£×L×jJÀš‹d>£œ.7j–™")º R˜;zûµIf¹Ü¢<ÒWgªµFÒ¸š s +W~k>3£äÊFeDÞº¾zùrM­$Â6e¢DµǦU,ùœ={öŒþΞ=ræ¬u*5¯¡9¥©Räb¹¬œµ;¡yUšs•ÿ$®Fm¦aŽ|¼ˆþ‹5idŧ}´¸¨¬Ú+Ú'ê®&úõŒ + Ÿ²ÎSg]öjÕŠzT¯ åàŒfftÇ&5w‘PÛQàôÙ3§‹g7>{®hßòW~©N&ÿ¬€a€S§Î2 ažqUö¦Ï—ø/Û@'[‚úÔÍz;þt©H ÿ-á=¦ÞŸrwßôF']ª¤îà©Ïñð¾P1€€ þï1úŒ ÿó!ê\–ÁB¡ÈŸ!o¼ñóŸ¿Cº¡ô*Cú•À<ÁÖþç·¿…ŒAÔá.DÐîà¸wß|ãÍ‹ŸÝ¾ÍáÛ_! zÃ!¤z]!:€EÅéŠäÊï.]¼øîEX@ @7ùyüÇ`£»ð\<éžÐ E¿úæ <&3ÌÎ÷åWÌ1ÄèÂc.ýhùMøð„NbøÆ · -À²ˆ ƹÀ7ôè`œþÓZ…Ë)<jŽØ—Ä-Š[»Î:šZ ¢CŸ}våÊ»ï^Dð_Õ"öò=ƒ8EþüÂQ€õº¾©ÇxNP7ø¼L<_&ÞÖº'°ÛŒí{àáN æïcÄÜ?ld"^LG…Ž  ¸ @áG×'(S@©‘•Ó?ß&;fªÒ€»z×)"xÆ~‘Ð⋅𮨰È>R˜#ËÌÀ4X€KŽ—¬ß^`uŸø¤k„>h?Æ>”uh'Õ”‘] +ÖŒbTý!„Œµ—cA?ó&šÛÞ`*e–fnÅu–Ò‘èî!2ð˜h}ˆù¿Ã0ÀÀqeKœ¨OQÒÆ\%øŠŽˆ!I9 H1`,Ä‹Oí=柺(-õxò$nøÜonWn)Õ2ök1x&ˆd^H}CÖó>†uSà/ûÖORÝÀM.[Ë["+XFa7×q™ŠMÖ‰M72è¢Ð¨‰ÑÝ&Í"3á:½é%“?g¨›,cƒí~í£6Va:”/»vy¹ð`Ä.ëH;í»—›‹M])KY&uC–µmm›ÁQZ‰r岤=-ë5TD#R¦é¢5gv&4á0f»TÔ¡èäÎóîâ´5gÍ¥–ÊòYÔ–`Q·ZiKšKãåÅZ·¥Úµ1¬õg—뀸ÿ\6òoÙÙ:ÙÄgÏ€êë¡ÜRÓ…æØÎº,ùxú£tÕ² SFzwá¸Í9ŽæŒÔ´ªR3vÿ8ÝÍ­j7YÔeEE|„I©¬š§Ýie­;Ëb~*úPst¨€|}ZÖ\lÛÆ§Íu#¸xt«›¹æjó™ZwC:v}“Ñ]WÏž9uúÌ™©)ñžJEõ®ÐRs6êâr¯%?*`bÀù#ÁÜ… -ý›*ÈüàH—ºž%!-–JSÏ ]8 +°@èG¯—@·‡ÝBÈReꔀžÙ"8xê1áƒ!ïñ–Ñ¢•òCVgØ­²#²Ž?‡¼ñ&“÷ãc×.þÊñ¶ÿo KÁté%ÂQü!ˆ»"ðó‹öõ“û¿]}ïW“°Ižo¾)B;Yçë†Öû¡ç¿{ÞýÍ»pLx¼€‰€>'‚@Š^yïÊg·ñ¨e,}¥ÿ5º3@ÿB¾QÞï]=. t¼yæÍpÈØþõ*” +Lff¤%½ƒH_µ…ËÅB´Sùd´?Í/‡ bWÜ@¦ÊÖ\‚€?»BH7ؼA›WÔïB+ˆ;ÀÉ ²fq`h`÷ÏJ…¨à—x´qá/™èúõ¹ëοP„þC™xX¬˜zŽMßÛ‘e*P&. @¨´} +lòaŒ’° ÖƒÇ@. ‹à’1ä@Hªd`ÕÀªtôUct“Fÿ\ 9_Ž_˜ñÎR¡mC6°¨sNQ\D†B’À7NH‰ó6â³"ž²StXv +;àEdæ´ÊZèè«ípÀ|HŒ–c&€ýýûL™°sŸ^€-Í«ùFø +7-"û_y<³¾‚)£-•ƒrT†^cAùëÆ! g+˜ €ú<±ºŒÀ»ÿüçþ~^T[¢‹•ˆ0í¨vœÑ!whWYšAéMÕ:í¯ûI熧 NÌÉÐF:5ú«ýå¤Õ¬6f™ºÆ6ž{Ñ'Ýÿt´; ‡8ijí ç.ÏËî²R°;LI–ï×uŠ„ÝL€Ÿú$Þþ¢£i¶>Ìéœî䃡øÐü®Šöµ±Fï·> Ó§p¦Ÿ+Ï4ÛªtI.°þëp8Ü%“ÁÚà»Ýáæîè¯wt9dÝöåÆÝ‘ÙΘû¼'Íw=]ƒ ȵԼ«B¥y¸Û®%Y_ Í¥0õ¥G£{:œ¥·´ÝêÃAº˜¸zðïahî±xÚ'Î1O¦…»î9ri½ÙJçÒ•N‡ÅôÑ|xï¯÷˜ÐO—-§µFŠæ1‡"šýLµ¾?Š6Ïw•Š‚¦†‚*k¨VØMk‹Ýlt?Ïÿ²Šæ"OY}´N G;Dh뚢ðÝõ~C$‰‹{Ãmþšç+½mèä(­}Ü^·ߩÅÕ‚„Œ†ƒÝ‘ª¢6ÿÇîppïž4ät¨¤ZòÝŽÚU¤:÷’ÊT&z圞gõ´uýz£¥L x=ùñ€ÉQSï1‡(æ?€Nvk ügÍÀFeî?ÝIá<Ÿ^C²fº@§8”e0 ðÿºc.¨lUÁÛø3p¹@¿â ÌÑ€hÁ£ò«Û_}ûí—"§~þs¢ ‘ô™@¾­©þë"¦´I˜ä>îk×ÞýÙîÁJîWF¹!Õ;o^ùL ï^Ä–»Ìæ"])¿»æà{áwñ7ø³¦ˆ€S \¹ŠÁŒù¯rTÁ¯n‹\¢g#J À@3ß`/Àá@€ßD Àéc)_8.ðÆ€·‹S—€e­Ú>I‘×.ý®àÁo| °í³Ø(€ZR›¼¼=éYÜM‹6!o^t¦ªLŒI ¸uˆ +øóŸÿýÏÇöâ…ã=‡1g_ê¸~=z _,îXe²×\(ÅØtÙ|á˜fx“± +°°ˆ1ñ‚ÿX cú!  ž@¦û3¸,zPÙÚ€»€xÆQÐ( w¶„dcÜÕ®‰25S³ Ï\B"r %»:KáÊ}Œäz‡7°ÙrЗŇIjmD¬+Y©4¥ˆ¾t ¢(®œáz3ÀÂt€æð²9,À°>&Ú`켄QáÀ@÷ùl=iìÑtì0ÚrÈ `ô׋ñ‘z‡vh&  =àÚQ‹ÒµwE©´§cÞDt‘Óñ§ §}¨«\{*¤¬Užî-!|Ä$ܧWc›Ù ×WW3¦7j°¤!!ˆ{HY_Š~úÕ[’,ûG·Aà¾ÐäØ@/fá#ËòâN.uz2ÖÁNg|Ó +ztB!š7Ï¥›) ¿&é‡^?Ïê?+}Dó••´ÑÜMo´’bÚ%Ë3¸Z ”˜Ð\{£¼Ö]_òЈâÐq›Kûâ¤ÊJkR<ÆZHhL×P +[KP—»L‡°Òû´HgüzùZÖc-ÓšžèR³9b\e)þÒPaÖèGÁÈèàEq¢“½^?fpdÀ±¦)nÕU‰¾°pUënû?ªBUméû“{!}zLý§^t´S +¡$ð¯§vx`†|ðÞ[FŒÀ ½ MJ„Ò§ñ߯"ƒÔ˜¬Nùí¿Ópê á7'¬ß}ïÚ×±.&½22…9èH‰KÞ‡É×·¿¸v‘Å™DC.¾Iƒ6è°§³žNˆÀßWc*à7ˆxVì¸F6ÊO%‘k´ C€ÿ¹Ì}tRÍôúêÚW*Ìó@2`gÞ9Ó“Lô°ù.²ãÔ•K¿,«lá?¡_ß&àÒE¦F¸ åUŽðÝÐÑÏŒüÊ6zøwzÕ ˜‚ÈËðÉݽrñÍ7ЭÐÀÿ#<ȱàÂÛ‚x›ýÏzÆó¼2àú«=«²üó­~ØÿıÃövMÛÛ“iÊÈ4w …l /dú²mÒà–2œÕÀÍI ð‡Æ ƒ¹þu €âBüÔB"C/WÇ%‚?2rè þ¹:è…iéôïâ@kŸ±Ï”ÜÇ>¥FÑAà] ¬‚yŠÊ +-µR ׃˜Nf"}l²@¤â÷ðiàÀ}Ëv˜—a"CHU&à쯳’ž%¢çê–c¼°ƒ¡Zaw¨”‚"›s¸`ü)ð,w·]˜ûî¶ž°€öh[þ$Ñ@kžÿ (šÁUS^Ü^½sH¼ÆÅAIç½\ Ǥõ^¿Ñì¯0ÐNG +Þ”päñk¼UM=5OÖ[VCà]ŲÝôte]Ân5ÆlcO#5¥òX󬔚Ka_°È¶TA&¢Ët š“— ¿×kÖúyL3`:‚@,Ì?n6Ïzµ ù………9Á?ýÑs-Ò H7­ùŸþšg½îl2QP{ÓÜÑH¥H™$In]‡^ÑÇ'L9†³Ù@Û·ÆÃ'Úü†.iãéþÐ<ˆõ òd&.ub !×K¼eåEhàbíéäŽÏ˜uù¬O3^šîðÿÄæÊÅ3oªMtB#6@®²}dz‚Êò?Îày`“¢³¿˜:}þŸñô ýÇHÅ&Ý`@îï`þãØ{àÈô2>5  Ò ,v0åÐ +Vídgzã*Ç•öñ#•!™E”–sN¤ì~xH¸‰ÈTÙ¸ã¿5½‘=%ÇU¦¾\ïÂ7åÂU.ªxýØ‘Bª U¥†€®JB² $}dÊK…i* a?„@‚þ œÇü^î³\¢Ìø¦d€0“N•þêr®vd…Äæÿl£Þh6ÛÝe€{û~ô±Àö•#íªÂ¨#¸ * }]_´}*^%(WSôÒô‰ˆÀ“'´†@¥~Ð5WbšâûX!@µp/³pŠnJÃé ¾Ç}:¦™1÷§K»I#fÜê-¡/|¾|¢†ðX_0¶§aÞlæ8 ´Ÿ2Ò] ¤rOƒ› `§ñ«ÛS +ÐÁt{+Į̈#lÊî I>¡©ebßÝéÐR=MÑ\e.¥÷ÒZšcªX½SAÏ“wAqÉʰ][ÉÓeèyFÁ5ìH—D]’¡*ÃŒ¶X¥çë,ÿKèéÏ4@/]«º µ&þÖ£Îã-Ú?@X¤yÒÆ €Ò‡Ý™t:J-½·¥v1cÒ¡K=C'ÛLkw˜r€kÝŒ¾Îèå6ïäétúW·¹X–«ˆ—#Z]`èeñzLˆ£“ù°Ñˆ-ÅâѪ¿ÐØ.€·<à}|Ôß«“¾~T À F´¼:Ѥ@Ïß–îzÑý/)¹SÇ«²þ¯S0€%(áBJ\àŸzù[•óç™ÑéÐp$€þ‡:Ð` ¿@€¡ˆ? +ÔŠÀ:[Ç6Ö…Tß~-ã\øÿ†€XA®xaN 2}Ä© ³ö¸”pY‡@~þ®0é6“ðß&8˜r0õqñ‹²Ôµeý”£2‹âJ€¿óÿwÚ0U1 + Cµá€c‚½²üLù RÅT>ázŸyF‰J—Ò¶ü)è÷ô€àß^€˜À»€KÒˆŠÍ8)EÃ^’¢hò¹ÚM\‰~³‚Â{`ä/Eͦû3ÞrÆú :@ÇÈPŸ‘«/vCû_Å€ €ãQ;Ãÿ¯.¾w•Á Öø¯ßfÿXlõ¿(`ì ðå€W1€uzpT›l¬ ¾îoÇ5tïs¥€ x`l"³¬7NLÀ`{ÑAÀq„-R +tÈÈ0ià þ Áà•vÈÚØPv‘(P];>à‹Ü8¨”.Ô¸ž¤ö†KЖ£$D¼ZÎ÷f BKìâ²lŸöq]¡Q5ƒîøø|šŠÀOÉ:+=o ³b`ï¥”Ø (-K}\\Ȫ¹s„ä2!¿b Œk†ˆH„*û͉œó1È:3IÄÓfR>» À!"ï†í|‰eýIc}xôQŒþCÀ=# áOW†.ûŸ€Wxüz/bŒ•1ÜÙHù{Öæïƒs\‘!]\T€ÿ`…à7ï^¤@טˌE•»¨æD¤ö¥kÐiRôP2Î]­k­¡kU·'<2´_Ù£@€@l•)/‰Cùb§§ZW/‰ +‰ ‰êB»ê¦¾ãYðèxç#¢/ +€ëú½h€W¯h)€þÅB¼ºcÁª Ö¨Ù,È@@üÜ^W¶/Hrˆ€à´PD6¸/”´€Ýgå€RÀ–6HahÂÕÆ*½P cT@Àj9­NãÌvró%ÅvJÒhOùèÚïoî ݸœŸDeô +ÎÔç¼´®òr¦¤õ¶UVí~ð%!¼m ð€ñòÂo™Ê¬œ»wß‹nåxÿWYô—ñ~ÑÌeËÙ²Ž+Ì* ýˆÓ_mkü—2´´B]tr¥yùu‘"à©ëD«Rª¯wÈIDY RÅ…œ3ÏP5\@G†r©ž0éÓ¬†Q¾ËÝånWÏ¢~à‰€ à³÷ÙÍm?fA#N̪'P,¦¹`C{ºPoˆ +È €PzáG6\H³F2ÂÖApzbE:®gda6¦Ó‘±^J`gcÉê¸h¥st2ÚÒ•½2È>J<å_)Kâ-ÂId=yñâDˆN–æÉLÊ$<ªg8 ZmôõVrÃPjLsOÇ(MóVÃñ€: #ê+)4—¢Ãútk”ë* ¯®øœpØ +g= ªZy‰Î°W5YP1(8Rš¬-†%u¬z8-`&(ÊfÔžnÓæ%Ñi+4×U¦‰(—¶Ua +Sãä활˜ +ÝÐbþäòÖr‘ ؇­éÖîÊZ²›î.àjîZOÍjkû8ï5D)†-*‘ù.Úã8€_€’"x:$ɇ'ý¨€Œ(<çߨpÏâ{¢jŠ zŸø!:&n¦…Tø.ðg­cžÔÇÅ\/<êàƒöñd6Í +ÿF@î²æ¿þêÚÅŸÓðÆ› W÷µ+v„„ÁîÉî8>„`RUÂ¥S?÷ªN}ù…,àÀ%ðßÅ’Æm (b‚7"7€Ô1Ð &,=2Ã=ð8@rå½+âÚøÌAwRô°8ò¥'¼ò›ãéÄ€2н¬JxˆÌjÈKï]ð²)n€b¥ü)ñÚ:Ç„¾ +”G¸-W¥.€Cñâ„ß q÷ƒÛNÄ€Z‘ s6½û•è\EzÄ´~uñWÁé8À¯ÿüç¯ÿüí7ã:‰x œ@Dà§§þ)@èŸÞµ%È"@F,ÔÆì6{,‡¥ ô1ÑX/àÀW-aWàÂr\ø"$]€¸àÜ’˜©:j86ýð=k=òú:¢+É&¯À:½Û„‰ЦÀÍ "w§u:$Žû#è@Šžp+/QT.{ltº?=j¨Ú‰ËLƒ–äðøáÁ»èþþãPÛÑ@ƒ2py5ï/{0@¿pÿ³õf‹.€ÕÕ­uÆu –Þ± @­¬ŒQ”…£Bmæ«ÆL÷«]œ(j™'Ož2€T§¶O<9íàL{!`jÅÒAôaŽÑ©¡¢ô§2j›¾ÿGûºÝÒÄþŒOk´žçËý6 5f‰cœÕ£NÀ!¸1 &€pˆ¥ùèø˧¾Àº–ôÀ,Àh>¡óÄxK\’= +„`ú'Õæ¦ÃÑÃ\®+³³Û˜ŽgsQ©#fÊ: ô/ )Ï[1ç/o%9dB”`b#‚r4/žûCÃh¶Rh®Ó0o"eáÒ€aœÖwó•¢Û½ôŽPƒH<¦yãl‹ùR€Æ»5¤ogi Í ª€¾½,JKûŒ/ÚŽ-©cᤊS Í;Ãn-É{äXÖºÔ–Êêèzî$š:̲nc6ߌž}Iñ— Õ;ykº˜+Ø÷T€~hΦ÷ô¯´ƒ•ÅY·pqÿƽFhqS¿`=~Ze´øêœ\~¼ Ößá(€ãb*•ùy¥:OÝK +7„Ù~<4ãNU£B_NeŠ.€—ÆÐãs¡"Xîã¥DpÁ»‘%à…€wß)Xmðåµw…†oüüwÆ`*°V0ÔfºDI?'Þ¯@T‘§ÑWõoI(a\¦c +@A8¤SñVæ¿»â¥÷y÷À;;„uö×#¬X¨írÊXÏ=€º_‰èÄù±z/Û Ba + @ %FÈʧ¥€Í¼â ÎÃUÜ€s%:`ƒX7]Ä»ô—èŒÚq¢s&\‹c€Û*¹zQLKÄOzçâ;žÈY¬ã+1¯{p(~(è x],à…óˆœÄðŠõVW7¡d®.÷óuf³e!@Ùÿ÷qàd—ô}߆ <FE(;À¯}½Élù<°oÐu1E0H°Ц Í>}þ€krÑy“À:p­«tDÙ>~òÇ8—Ô™ÚÃͶ äZ!ˆd׿°ÔPöä\¨Kv¤Ê(¦3ª‡è¥6 Â"‹·Èf`îï¹€sþ¶7†›w›êy5šG}HócºðºxÎåýþéØÈâÈ*…)“4GwÁ»TÃŒg=¤hCÕ@ˆN‚ñúˆw׌B•bCYŸ¶Tï:Ô?#f£‘>gÜ®¯/˜.7›³ÕÙJµ2[•ù%¸¤àYÑ?e9¯‡"3Þ`«¾ÑHs¬õ°¢#H[¶3R€™ýà›­F+«%E¥¥BláòA@6jLû˜û,2G½¡!¨€#m}ªÇtöÑx@ÈÀf²‰Ñ:b•æÚÚ’Z·'x#;'n%Âb]Sø ¬9œHçï¥V·Ñö<Öa)½9ÖÛšÜE¯Æ•„cX¿c;¤ºLïCÍÚ¢9 )á£(S4»›*xÀ‡ðu)–‚ªA:·–rV îe²PË6/ÜÅ]ŠíèwùéZÃf-ß4þKíΡÏEé ¬vËFŒz7BQ;)®GÛ<Ë>íeZ¢ +ï_œ…yAqåç*ç~Q©¼¯_Xjø„¯.ËìŸpL À{êE;I2¨YÁ>ù”HˆˆÐsÙyÚP™"ÀGž‰Àk+[NqÝóJ+_˜ŠÚ‡hûpWˆ%,|„¡*L×ÿ7"|ãÍwKkUè}észËC„@NXÇnÀÕë’ÝõdñÎ' ¸úÞ;ïüê¢ÌPn|çM€õàªg…ƒN§ô1 0° +!€Ç:Ðyœ×O`}Œ/?¥…ÆâÞüK/ðœR-LTòxI€ß„ À^¢=È üF/p»F¬ ícôHt­—Jóa¿Âé(qšúÛrIÁ÷¬µué]iG¦ŽàÔyZW°º¯b,€H<@ÿŽ +>‘ þÊQ¯"€ËËY°±Áj@¬n}öðÿÛ? ÒJÌš +—Œ1à ){S"” +÷3@nœŒ=z4À”ÏðĄDz÷ZÁ©€c]«ä޳ ˜ ç¹\zú3>žÔ¤w?°,6C&HÈae[`¬iA*Pê«užÃúD@’—@Sà‡žâåôOä`ÉzÀLêƒÅ¼åQó4«þYkQÐÂSH2Ûh&:Ô§w€˜ûÌ&XÀYZ©ùBwtb$ ô.ÜøÐÌ"ÿ bÉ2ÿýIËè庖†?!ÊöÿÑYC>¹£¼>xDÜ'3 ”*äp†uN˜¨2ûËÙÊ/ %|•â”Nú4æ_De·š•]w— ôjµ?LJû5v>5Š&y-ñÄóÏ±Š§‰á_F’ Ü…‚Df³{=/œ„Dp·¸$,óFz³•7GÑ-a |2¤sɉßêúô¿ P£_8FsÔ21³ð FPè'—”ðïFwë>™ô¬*đȼˆÇo}XܨØMofÙ é%µá0ôÎ}ÎB˜†r”Jj €³—Ýã6ÅitÍŽƒ¬Ù¸å“¾Iyû“8»©s¥ Z¦ºWå$òÏÆËQ­ù˜ +xÒகõNT?wwHÂðé'öЙQþØ §3Ok +šˆ€!P¼ +¦÷m@"ÀdÂã?–0WYö :°í T"ÂÖ ”^|³ˆD¶Jj@qð°Ðß`­ÞQŽ2¾Á>ÖFb Õ7q0”W•B ‡ÃùüÚø?&o Ø?;\PŠq¦Ö¸C÷¿Ã y»rñŠô=VXrX @ÒP@]U ·¸€›’>­…Àx+@ë‚!¹¡ \KŸÒ€K18ü'½7õTpéŠjÃ0þsGô ëW.BÎk19à]<ïðº‡NÁ—Å\S…0ÐK×@ +üy‘0¿š~ßI¢7\Óà ¼ÀñéÌtGç4“Åì?ÄWT€JÀ ðDS ª-xá>þhÙæØØÀ•pÇmm\„Òiô)€‚)À!€1až/´eK—¾>ÂÊ%f `rüÉA&Â!íéj”bÒ_‰¯‡68üÀ—ÙzGq×Â¥q™ÑÕ¥KaÇß + ã(ÄÇïÂ~Z¸;ümÿßßgÚañüån¿Û]21ñ[;mG'h×èOz3ÑÙe‡]˜j©­0ìò‘'ØW9°€ ¡SAfhá P(ìVA{úÿ9®Cn’ØSÅHF:j¢Vb]£™h šBŸTHæÿÁÿCs€=†öû}=ñ›"<Ѫ³U?H%Tk¢[ÝŠS²û67ÃÅ^Àh#ØR”pt,NÐtS§³AÞª·Òa#¹ÇÕK²¥õÜõée'|Ë:KíQ" Ž&dÉÓxÒõàY#ɸˆƒ¸:‹±g,¶ïÍ9nX«[iÙpj…aÇ"$/@Í{C¡¨ìèd³2â(c-mư1¿Ô:›¤£Ùj` +8‰Ä¸šÓ‚Ñj#ëR锬£·ÆÔQ¾.,©KQ1t Rt+«±®°3œlA +Sú˚Ȧýk*+xGà. I}DóÕꔜ‰TL‹HC +ëÞÈ[4g{¥—7A)ý¯¢&™Gó ¯ÐYq ~Ú˜„ËëǼx-€"pÒP1À 0GJü@ÀÊÛ•ú1Æÿð¨ëxbÆð§„z¶—1çuÞHRp€£"¼°€£jÌ%¦_€‹—Œ*Wß& ˆHŸÀú!þ\†+ÐJ@wægÊÂýqÛÁŒ€²Ò/½ós€PH2va&¹Ñàäˆí~0Ø]?2?'R8 Øb-µY{…”¥8o é"ç„>Ã?::p]T2¥–t{Ât⢒ +ªDð¡›J¥ E¯ÖÇEἩ7Lx Ëš”O]*¤ºP2°´S˺Þq¯Žx˜pÂÀ·õd†¾Ú `™|,œj˾‹©N—W½LÍöÖým„ÿÉ |ôøK“Ð $áßÐ/ì`P@y¢ìr@¢CáyÄæ[ú78 †Á©Gö@²r©²}"(wþq‰§ó/9‡Ý€œ»Ã‹-rT*iªkÅžù'¢!Jb@ +Z1¯–«ƒ¡ HË1@[™-%ÕÅzÁw\q MBðAó{Œ›ÜÆüwÿ?k' Ø©2³úXÿõb5 ÙF³.¯æ«X×jëû;û&Œ4¯ ïà¡Ú…¦Õ§ -ÐÒÍ£°éüýc¸ö^ø€*ISu¡vRœúšQ¨…‚ÁI€~íp+>öñÀƒ?${Û[;ÑàE –Ûmº¨€ž‹¬ÜR<Ñ%Å‹ òTw7n‰tÂi‡“µºY³–­¹›XÐý ®!zÄö6Se!ІðÌ-Ì×Bw/|ÃìÜMªŒÐ·*%ÂýßìY–ÝËXô'LÌçƒ4oj§eΚS +>ýÈmB ½2ë%ô&šk_Z%#z…Uèa‚ÚR5ËZ7ú²£ÓV£Îp1º¿‘¤ *×%ÕH †"ºi– í8Ä……?äÆq½ è T0Ŷë.Ô9ªŠ³‹äÔK$Cûé°ÛnêÚk"9ZßHHL›çYOJèÌ”Ì02塀”N‚Nv“&éj6Ä¥èô²û½¥í -õ깩ʹJåý A¯ÿÿüj€‡£®ÏA€G=sÄ\¨Ïv]q+–ôô[yv}ì8_xèx&àˆ btmÁ + Ì) gÿß1L”¢ …ÿoÈì·Á)P9ô8¡Ðd „cÆD𨢠àÍ` ÊôÒ0Vù€Ž³m!P9rºR¸Èôú/]eí*÷3/˜Èuê¸Ö…y¸7‡¨À"¾P†t‘Ç3Â|ÃôðøO +šCC!°Å‡£þ?û™P™RKüWa¾X‰ +/°Ý9îÿ½§c:AZW ŠÁÕ¢dAꮪZWA{{¬’«¨Òeÿ;ÀÜë«/¿ùú+HÀ×ú˜ÿ_刀W¯€èñRì3ƒx“9Ø“´ÏÀõõõímÁš8@99,=öú Ë,zÄ|;¶NTüBÀ‚Y¶ÞÝíml· VÓ )œ£ÇFwŸ lÖ5qDz՛þŸ„= Úñ™ªTwPž’BÌâZG„ (%è#^ÂLJ) àTE© Øðëß°Ìœy²˜ñÛ1±½Ï €²˜WWeð«9ei +2Õ¢tVZ?7;ëõ€ºËËHwËa€â; Ÿvv¼4s;â› Vzßmêã-Akç0:κ´Ž+b¡^ª©)‰žHy×DÄ‚Vc*@âÿT%1¯pD\#PšF†Š0ƒ}Ãöâ©LÝâ9<›•ª:2F½Þš¬Ð clˆ'( @Óé°É8¾N¯ƒ}˜æµÖGº@Ehä„–$)á¥Ù.3שÜÂô•Õn°<› +‰ò(¶·+ÐÅ/ô:"u•$Äø ,úÞš2Ê’énœkV]êªë*2ȧr¼àš7žÁP¢„þ´x´#ÿz­¥ÓIð…ë.NåR³|»àSï=ðtÕáæ§i±ûù÷».³1mNû“•Z¦ÇB¿bÓ)q—P +Ì¡æ¸àí%Ð}P£‡æÉ(©åC4wÚ ±?úZò¼–¨ÍUsñ$'’ja0ݯMd·91š½A¯YK»ÒNeöhmãßz«Îy €mt ùX~T À Fãˆ.<ø\…îT®”Á|JVz$ëq-ðPÆhÀÑQöÆèb 81@Ñÿر”3ïŠ8´¬¤ˆø¹p%ñ/¾óÎot<|̃Ëá%>Ʋú%xãCÖðžŠÁ0UŽ…ììd‡V¼‘‹þIŽü' $?‰³tG<™¼ PkÄä:ò"«‚Rxßú‡¸4QFì¿ ÀRF¼I€=¡“ +r} ýfA?Ì VÅ´?n*ÊôF]\°²Ð€À5 •Åü/)§ýT€ +à~ ©Ž^:¡d¿ƒo©©%b¥àömáÿW_õÕW_Ÿ>Ë·õåÏH@‰¾‚o½’0ø‹ÿô`8yzI#!>mucc$@1€¬Pçqï`‘€Éîâð ,¯À‰Èð@Å$uÅa@‹Í'2ö\Þ !"|]_ñÃSsB|*ð‹í]îñÓÀrБ+¤†´6>züäÑSmè4DDt@'”&/Gb µ^º”\|µ2ÑŰA#àh—ÑB‹蟈¹¢ÿE–¶v¶×YïUð_g¡›³þк!þWª³Íd¹Ë€ O´çp ºYp²|fœqJ2?>r2KZ£šö:OÁµp¥b% •œ„Û»Œ%“Ëø¹pIØeÛ’…Úèߥµnfì. +K„5‹Mæ¨ .÷˜*à^¾˜`d’…C 4*…â ëFa1Bé<œ Ô;ךƒi$²Cs!]ÖhäkAk¨>!R@ÐÉ+O§[tW+ï× ï'Š +Í­:‘ôŸfC@¨]èa>G@¹B¿ bN=i2r›Ìh.ajâ8”1f¢ÅbÊ­j6 v´w0…RÊ^ökx +›^é’‚RÝ͓څæk ‘¬‹ˆ²Í“ jj+Z¼#ô +ü=À÷`…Ñ1 +@OØÎ`]2î·J7@ý¼nÚÜua¾Ì³9{Ò ¬ŸPáàQNà§²›§»ÁBRB Ë ¸R*ÀÇDÀïy¹ÿ7~öNt9›<ë˜èK—ø€þE/ýÏÞ˜ô¼†Á’‚4wC”‰ ŽzóñˆþŽþFHýð€y~†!Næ‘… §n€bav¡ Jü;öñ1t€3?+—Š@†¨­S5zÎð1r*àwÛª/‚¸Þ óuOÊhÜÿP½ÏÑ­ÀÕ¾Nâȧ¯á9€^¬¾üå5Ùÿx„ÿ_]Ÿ:=%®xèxùL€…àå1õ´ýñ‹ÿôTgŠºŠã»gë ñzaãÓ0÷pÿË,dj8þ¿‚ Üö8ü ˆÆMý TA fÿ  9,0G©ô' œ¨5èÚãЄ`[ë86{¤Î@µ§Oã +¼ñ,b6xp +ÑÛŠ(J¥tôòñ@§Êñ)ØçƒúZЖ8-¡ ô¦zª§*¨âqZoX W½@Ó3b/ëí>€nÓ‹æëUýe½:Ëg“€gÂl³Õ^î÷Y}Éc.¼S.î?f"S µ--U¤¬J—†fZRê‚–Ú´ŸŸÊ«Ò>¤6/ªÊ¿Q^jè'oiȇþÐÖÐ +{4hñ‚xRB*tŸÕ‚¬!š.2‚1¤âç7è _@ƒóy,Â:Î39•ÝjT»¹ìʈBŒIJ•èxîž^®CFøÙfîð5P¦Äÿ¢_º û®]ËÖ…E‰£ŒXV&ëåDh÷zB¶,Ó¶d˜‰~H±ßúðF¡¶DéæÓeÖG±y2J« ͵ÁŽ.£ÐüfÚùtÐYÊ\|­¶A€“ êL2d,ÝH?¨c›Hu6`t m3¦6^BóÉ ¯6£]is°(ߌćâi $6ö•ëtû¨æ’±æ4:cØ;ÙP,éÃÓv·9“¾‹ @q€Ù…´#:â.: µÍóÞšÚœ òT^´yoÔ,† †æ“býE„ÿçìÐSÍMqryý˜Áñ£ŽŸ`¾ôÌ ¼•ëû•Sg”Mýz%ÀÛz>˨—ÅO_Î8€=?±‰ð<x8ÏC½‹@šødÓ1káxG @èÀx-â3ÿ8ÀV%]˜ÏîdF@u¥-­88ö(_w¬A©.Êà.¯¨Gb•«c×®†öOn…l&`áÒðÂ{ëø€ŸEîFêE€ÞØ‹YA€h ^Y<'Á‚{¼cÄ„€P¸p”T„„àókß„&”¤s\Aàjc<1„e€2â¬Î°®O¨÷+.e¬@ápŽ„’¹?W.©ßxÖ Fzú-¾­c€¿#Ïzg|õZúY®þã¥!L:wŽ~8½Wª®FÒ_ߨ¸[ ËT€Y(xÐÆLÁM€“a90ÇÈØŠÃ]GŸ5>æúpFd>GJá0‘Ê’œ\™ ßXõ>÷â"QVO˜6#ß4ÄXè“\ë(KÙ]ä^Š}ìí‡N÷Y xuuu¹ßNÝ€x Eò¬«§yaKû¹.)wú¯wšq,½ÇMÌ»C½G‘®t¼w†vtFW3„¹­ó]Ö—Ín¶)…÷»¾ñÅÜ#ñf ƒÍÿüÇ`óÿOÛßìÆueéÚ¨ „mन-ª“ê$ +H†Ù3ˆ6‚É0Cf2>3±h†¸ŠŽÊ«aÓ ]Ãb0¥ä.n…%ˆ¹%°¡JAþJRϽ¼û.Îó¼sI9S¶jœAFÄú™?cÎ5çxÇógœL&G'gú©2;.Û»—l~1'P ÿç§Å–óÎA¦ÒÉ÷~Ý4pþõCÝó%˜>øpÞÔc¹ù=ª œ°»Ÿ y‘n8ߊÖÿÙ,Wä³Öìå«ü“@:™ü/øÿc‹¨/¹iì{ó8NZð†œGçÊ œ¤Âvë³a'“+_H¸¿ß4ßÎÆ5ÿœ·jœOÄ“®xæsÊN€ke@ðŸ,~×Cd¨v¬z«‹/ ¶ ² Î{4ÍM=&äþï–¯}²Ô[ê 6U]ÐYz¿‹ê›pÒ‹ï¢wï Sº»¾~ïîÝk¿ZPuYâ™Ö Γý¯ùpã3žE¶dh/õ®- ~­6¤Û‚òÝ\øç(O>²ë×?º~ýÚG×øûèZùû;r€…è<„'d|/s·ÒCÓÚ9pÀ¢Zö ¼eÛeÇX² LÎP„üñÄæ¸ÀT[ÔT’aÞþPf$t.©xÕ¥ dxŰRËäÍ+ÊãÛÜ + ezBx€N³··lõæ€^Ó4¾4r¦;tÔÌêaÕÌÏšðkQsvv† ?jöÏö›£a¿_ŸÌêzü§“‡“ÙäPX¨Ç'ãf:{1õíõ%ÉÆÙk³³³'[ÕÉt6óõþ¾›¾¼|¿©¿M€”Q=={ü]sÐýßdF¨‡rÑü)/± ëIsøø=~âyÜZ¸IÙ;0ïÈw-°Žpí*„"Å áMÐ_]è˼‹…ÞÍ% Y%™Ô¾t‡:¿»´V¡­ßUXwº;Ú×ÂÇ7*XÕÛ¥4êT§s(T býæMÊÃÃûu8çñŠpB±Ð«Ö@Œe‘…Ñ5£Æ¼^øøã%Ÿ1O¢”ráú?¡Øü]¿~ýŸ…4J¸®>BÂ)2µ¯^±ßw)OÏ\1ßU¾\8º€2 –yS½P]E`¡§JÄœ¯ýã·R-Ü-€Å_öœþeÉÿù“lcWöÿyúèÈ¥eGÀWÏ}!ð9†n°2œ4®Ë=ɇëbk†Þ½‚*Ð"0Ðäa¾x«…m~Ð4òB¦èH0s%_›óåü÷PóŸÄJ袘™Ž¯…‡ÖþýK"ª_pMeEÏ~¦’ YäÍ„IÔ!)ä'8 ßj>™¡àMlvìÿ—ºðŸ<ÁXF8¢ùwu?(Z,é'-aûCŸuzƒá¶Ëø: ÐÓçOMRßÒÁÀGÄ6ÛT)¼öùµêKU{«¸:Âk +=?.G1÷ ^žžŸÿ\ö½ÆP|hç/_GÈ´wÆþÏ"@ç:¯±ß[-Ææ¦¬ãÀYCÒïÊ ðÈ5Üès²Ñß Ôžw?5DH;¸ß_íðµ Qèü‚3C’"Ψ»urŒ¶·«æ€ûýáàiBGäCfÕpeÊÄÕ­~·?Øò¤ȸ^ùŸ0¿÷ëÑÿü|X{rÄ‚Ÿm¸Ø +çÄU#’$2g[î{Óa¥/ç†r¸@λp.™÷ û⑜WÔœ÷»‚Þh.([8?¨F{fi.Þ¨†Ÿî :ȋť…Å…¿º¡¬”—–îmÖ_Mã¯ÁCïÑ2Ê“•Üw‰µêsP“ìqLš&·½7ì[x€g9÷ …sÉ¡ ŸHÿ‚óy¥ó-çÛ[ƒÑðSêü€m£)QÖ-½; ÿà”acŒVFGœ}Rt-BG§Åxƒ"D\@@&WÀ1GTtüŒ@oÂñ%`;?†¼ˆË-½ÚU¡³D·ö2‰Ž x^×oðã~kSÎòú[þD|.'aÛñeKC^ß··eƒd|®Á9n93¥@£p‰º’û‚¥» +–•ò£SUÔKÌe·Í=ª÷FÇ¢¼}å0¾jÝãGòÁÚlW{YÀ£§°²3ÙÂ1rò©˜q?W­a4 k ü•‚êÁðaÉ;œ‘b +ȇr•ÙÂ-ù£ñéöqà“ã'ÎjFÛy; °·Üé,ó×鬬vW:Ë+++ÝO—»Ý•îj·P¿ÛY]î¬äoùïȈ.|:]u"i¥D%<©“|wåÓOË%R&|·ËyçSÓ\iÓY&#¢y÷JF¿)?åUÙá³jdó„ÏrÀO·¿BÜÂùJ'Œ÷ýJJ”‰`IDú4ß!x[ålšÞ§«ržhñü—ó¶42Çy”ü[ÎW–WúVÀÂÇ­y—>^줢MF ÔS¸ÉÙòââòíååË|Þ¡þ*¬È×~/ VÉÓ:÷±„óRÖ‰‰rceå +ç>’Ôü©ìdye«”éj¯ü¦TºyXá%’]µmX§ðµ|ûöòíE8‡~“²Pª°±´¸xcñ·ÜÈEB}èßÿ½€á X£Ÿ½g€«sæ€;?™pçr€ÿÚÑWöh~ê0{Ò«[I\õÜE€OÍv`›[›W=wH\H]_ä’Ö;ZÀ]G„Du!òÂ(f-œß-€P´sÕ ›|ˆôéPã½À¨às?@# N0pï£4ýç€ø~B× ±àpõƒj«va•ôn΀MÁÚºˆàNt¯x¢ðì0u×ïõÅâXƒsRޤX%½‹¦uÔ䙹µf<›<5kÝz¸â€?€*÷ÐÈ¢ ´€5/<×n¶åx?}¤¤õ@뷮߼Iq)SYÂ÷«k ‚yñˆõÅp‡r.ÝÔpç*Cñø4PÞ™ð^@t=U‡îü¼°¶¼ŸŠ Ì1áooÏŸ=hŽOOOŸc™MY&2€µ © ÒF0VH Bë?çÀWÕº6p!/ K„.N¿ò`+áæaEèV¯ œÞƒù-øJ›á<¦_!;¯ÿPö÷1ƒ,ˆ)£h ¤÷6+äž™ŠQâm/A ºr­&•\õˆì™2Gj,c*l·OÏWbid«‘¢&]¬µÄúÙÞ«òfwÈD·]|þÊ·/©B¼D@Ñx%+ÎJ(¬føñªº‰…ÈSЩa!¬#þTnÜàÀ÷ü•™>0Xç_º`¶¸ôêUô¿sçþ»¬ƒ'nlì¾F{ÛÀ ﯶc««Ú˜™ÕÁ¸™:U}ÔmmŸÎšf6}1k&Ítz¦KXïºÛL–¡ô¤ÆÂXÕ–}:ªjÐ|¸999™Îœ izü ÷õÉ›&·¯iJÔ9m'ñfŸ §S¬X· ØøÃr=Òí^ê=Sšè o˜Ç6§‰GnSß7Ôì4£ßOg’å3‚M2Ø0Òi€áEKn$»µ-çÂnîXu÷ªQóñÝ ¡nê_Ÿš]|âµ¾ñ–ó½ý†¿ïê)œ—©Ö»;Ê?Dc+M.ñï4…¦. 3x^ ¿Äîï R†A¯úœ‡°8º_Wúî›C9Ÿ6ÎnHߝޭ1”¶­Ôy8¯F£þÖœóƺl¦³‡r9~°W8§®¬„|õ»þ…_8ÉýŸM]ÿÉ„T:¶ß=â™…g‰Š$jÀhœoWƒÏõÊTÕzèpÇûu³C° V¨lËð騶>”þ¯ç˜ý õ‡í””9wïüd"qÍc d"©5ÍI±œÿƒ} +æ‚Í"ÿ(d±æ<êÞú ÷™ÃÀ¨ïñ¡©ô?¹˜p˜`A…ÖÎ{,€»ñ¬¿ãdàáÂŒ.€[¢*G·tGr„šKXÆí€v¯ðkÅ€q€Ÿjøfýܺ>÷h' f,•MŽ9š{‚Û‡¸àŸã¨âpéÕ)"Þ’cŠ/ç©’Iã¸G}Ìgd]SÈâ°Ò-30Júüîaã˜ù_fßÎOž=ž »ÕÉœÿuòö/Ãù %øzÒ¿ªM}¿ÄΧÛýƒ39?™pN`·¼%Üaá¼&âá”bqsrBÀi5ÜjäΧàæÉÙÙC8?{ðÙ©6±£ [×>r`Y»Œß¹î;Q&Híê^0rwÝitƒ%D– zÒ|w6›¸\ œïS\¸˜Èzáœ"„õiýûíéÙìdöZ—óÃ1•Îí?Qß–ÖŠœžPTØÃog'“½a·~ü³³³EœÍPð^¼xöì/§Îy ôþŒZnõ¿D' ”UÞœPÃ'<ÔfJÕ×õa{9ÜÛ][‡áÏ{7–Ö(ÈæÎîtRïl‚Ê›õ\õ³DJ×T~‰–nݼuóf¬¾MÜ[àlhiéãk‹ T+Z|‘³žû­FZË‚¦s”õ€ÕxĽ@2_$Az±ÅÉèÒ-\û$h”H;ÚtKÜÜ×äPXü7GÂÓ@°v‡øá¼»³çí @¢'\âXd½ Q.–Ð$H6>–ñiiSƒR”“›¸¯8ÓüÐ!€^Žvy›b}ôѵ…þ‰oÿ?ç(Ïm«á¦8)TBÀâÇ Ô°)¿0Y +‘/©(Op +D{Œê´RÇ éº,t3UnÚ Z·>bϵÛÎüq¿ÔZ4«ÇéæHRK»f­¡Iü°ü³¥º R¼kFHVR% ¡ÙÓ\Tnݽ… +yëÖ?—2R”´Û%M4Ò.®-ð”KyZî8ây.Çü¡AXiü©ÕüêãÒjßOÚ’?C±u5X…Ð÷ÍóÓѶ«Ô´MŸœg@‡µ$ñÉyh?ˆ"-Ñ„&¢çG/@úöÇ’¢ðU€Hpuð¿@j;¯Pn” °‰\àJD÷º;¿‚1ѹE^ES0"Ì$“)*&’Lq`>dп}—…A’ qüæË¨í1yYJ–âGw À—ço´þAñèøtz|°7Ü=zšivD*#õØöÉÞn €©ºíû€œpzêNzZ¨è×oP¶È&Y¸æØJñ_6aËz¶–ͤT'Y–òZ1†¡L^·?j‹rX«r¤_¡”ÉŒ„ÿìhøò¥/%´LOŸ>š>y‚jòàÁÁö¶··‡À¿îZ׉–e»Õîîx4»Ä¾Û­êíÔÔÏÊÔ}ß“&¤DR+ÿwvwÜŸ¿]_æ5gîOWˆäøÆZÌýrM-ÀÕpYÏØŒº>§ä3nu¹µ°ûÔUªdŸôÁd)YíæîÐÅå1ð´¿±âÁ¾ûØ7þä%6È„¹¸–Õµu¡f´2ÒZÎ]ÇeÞ=Ê%bCp›f´Ñ5É ™h|’âîæú:r;6ÄGÅàäãë±N°"-"] +«Á1OLj»G»ÓÇÖE8¡àMX%‹Tüå¦~uÓíc©ï”pœÝÉ ¹`;Œ¯V3Ùv÷¢äÙxŸê$#U»+û4ÝÎ Ãè©ò¶Î÷ËÔÜæºò^ôqkS€å†è-mÞ]ÛÅL»»¶îjÒ4§¨ðß5ͤ_"ª,Ð ‘)´=DRß\è!¢­b5÷–¢2€¸ÛSLçàãUÒí|ëîzQ-JœV‚'»9ä\Ç&ŸÁË›wÈëÉ&(X`ï@A%ût ã%¦hiY¢]˜Hà™¡è)3œ-nÞɘ³d1Pˆ“qà…&u÷ž¨mBp‘£–kë"‡ ×{|í®QÌî:ÿþ}Ä-]ûŽÿËÀ?ÂË\s~ÀÂuk¾ ¿é +T@Šž’´j¼ô^sÍü›­°p÷–­ç^ÔkÂ#O°k1ŠcGΖS7y€)R +Çú68©“iQU½›7®™q¼íú†_¶ÿ%• â ÑßÏMˆ9òìÕº®/åIõd.LñD C6Ÿ†ÿÔúÝZödÕtWŽå¼”ÈèJ…o¹¡åç(Âþ}$šˆ¤ÂBÐâíÛóã½áh¯Ö;·Õ +L"ˆÀÁð“€î€¿å{"ߢáˆû`¢Æ+"º‡â’èŒl½Fœ/èŸÎ=9d``ž’„bÀß÷oÀx Í¸fŒ/è¨P6£@ŽÂ6ü‘–. yà\(²P.$FPµ(J™+á€7/_=õMþΖ;=:}°7ª£sJ­Jm)%²L¡vêRà Q:“ÑŽ<:6 wj§¸ób¼ *f-HصðhÕÃX¾ü¶`~§Q¸šŠáÐÎaFçÑ£Éð(óÀTM2ç€ò@qør +šb¿AÒT=S]óª)YŠbسÊ55°()¡”Ûm¥Þk T“ Ýí+5ïA☫6è{I j ¤òrTéÖÍx/œ"—¹~QäKúøW|ÎBΧ¢f”á$¶Zô•:Zë-Þ¸»îÜ…÷“fþ{©Å§·ÚÞÁô¿½~ùdo¸9j§OŸ>}ùú¹ø¯Ó;à/ëVP!Êk>Âf E4úT’‚Ñ ðª-`_ü\]ïg( lüÕk÷ÝÒÀ IGðŽI&ƒÞüàf: *>yM0ÝãÑ(ªƒ_%!‹âa-ð §?„™TŒ*…åŠ÷æœ7ÏÉy¦j,»àé©ûå†ýíÓ'1³R³2´ µÖ?¤?ŽF{{.t/€ç¾0>€ì¹ø×3ÿÊŒI'sÔò +¡” \åß‘þYê2ÐR>P +aÅê H TQøÑ¡á@¾^ç%À/ÏŸÆûÿÄ}ŠQê‘›Íõþ¥ÕNgiuI£²ìÍ·;vãz`„ ¨WX¸ +Ôƒ±ÌµÕ<@"åùÔC0Æk-<åÍù%Ý,À%€¿ñãiw8 8i¼ENõ¾I·cô¦ò]uf½f(À#@oâVƒu^O`Výå 9¯Ü0hwça‚-\º3­QeÈø^«Í!IlÕæh”­’1œc'ËùtºÕo8Þ×OZFÝqQÜàÞ½u»³ÒQ­•hÊE«pyE +éoý;ºµ´¹ øoÎÜ©H­K\¯ª{(-穃p>ZéW‡y0òÎK áuU—¹¾‹ñdZuë‡.¥0@Òr!â¾ISm*TúŠÛ1Xé!uëÜÚþ©ÜÞ º:£úâpá£%d§¥ <þýVG?C׊|ûyBÐßù5 5B³Ç!‹è¿ƒø,BunC ¦åáùø~œ –@ÑP¯·IhÇs¾t§*—®MV—”?¹Hižò"_3Iœ^–­­¯×ŸÝè ÖŒ‚JRRs¬˜ûQæÉö–>.…ó¾AÚëóŸÞ]ç(r×eg ^Tg¬Ý½3›Ä´H½ðb%$aÔ›m€ xt©h€ë@)Õ!ð›9¾ëêY4pð½E|X¹‘_žçVrà׫ªýñz¯G z°éK;©¯¬µK-å<Ú‰yƒÂ:—X,"4Û:ML + ëaAŸ2Ø÷æüÑÞv=Â:u/ '.È´·—˜£ÇÁy@8ÑþT…V`&è- «âs1½uü «„óã´@ão<öÐ÷?è\ekþ%`½u +sÇàá“L’¸¦ñ šééO,÷%xû#É¡EÆ9ê—“µÊ +~‰ÜŽL€ŸÉaÀZÏT”àÐñs§Cdiä9˜ýüù£GÇ åƒ,åíÓsëÁ&@Zü¥âˆXÒP»eÀуSêYª„›PÛçÈ[ߢ´`OÑ_›}ªW(Wð0Y¹å>†™%=Dzú ²’aùñX(zL«×¼vgׯ\Šøôüù#÷~tzzŠ +øàÁho{{cØË6†âÿ…À7㔽z›Q·+ÌoGØ­f!`:æö¶ð"¾Ñ àÀspgç+p‘?ÑÔŠømœœ€£ãæì> +À$¼$ dyŠàÞû;Míî÷¢0œÐaQxé°k½Yד _]÷Wà|»‚ó餮NˆªÆ‡‰f ¨µæÃyµ"ç¦ì àîÀ…Œ¨i„= çãYÝßh&–U­f~3踾~o CÂ.ÅZÐÏÊ$‰†+^ ]ˆœ«´p³·¹»_©P©Bßç绕:'Snܯºý*u®Íçz[œk ¨TlÎÂyT´..µãÜUØÝç<9úèêoºý‹g·o›|K›ƒ{ƒ{½»ÿ`IWŒ·t¬Ð6«if»ð߇(kŠËÈÌ;1ŒüÖ¼(Äô–œsU„ª3=†ÐŒÐÆsÙ˜¡ÜnÍù;½õ»»P^ó Ë·³ÈÖØf2XºÑq>[ÉÙÍ-øv•ÖPhK#äraÀélaÎI€Ø½õ¥Þ ­™g9Lêó¤Q#DXﳋHÖvwëD$ÑPÈÀHÜ»wÖ>ûØ™urš¢ ?Pkª« ´Ô¶ÓŸ´L]Uׯ û·œr(îŠkwî¬u\l`“²ÙQ-÷Ìë²ZÖÝ…á÷)) §½jлgEX -˹¡­š–õAÏ)}ëV»§Öˆ•èºÌ£ºÒ,¿o+HŸÈÍ[¿´ +@µg>ø¯w*ñWo¶¾®‹ÎâÇÏJŠ®(áQÈŒeÔá_FÒ2ZÎ{ëýKŸyL­´MÄoñ¾å:¥Lh‹G],.¢5g¾ëû>¢ÃûIÇ6€¾©€†o_>:Øv [¸1€ ÔÏÒ1h‰ÅáE%PF%lõ4©=Ü@:¡=á 㜋op¡+çÞçR°6@VRM@þ⣼ù!LúÜäßø?˜–`ÉI ßÐI)'ý%!8ûQîÂRf¡§d®N“j áIŨðÌm#Y,ËïÀ¹³"_éµÏ +Àƒ£½Ñö`tô\-)…!Eª…SS münã׿v(½·º1ÜÞ•]ƒÜØ7/Æà”‹×Ù’çüz4Gj¡:¼ÇR¸)%)·¬ø·JrÅ‹ g±8P›dÉ%~ÝÓ<ã~xùü%ö?è|ê…ëÑpàÀâíÅO–:¥}n5¸%·1¹»¾ó;zðÅîI³;Õ:4Ì%‰™h„x½®Q‚EÀh[g´”1õŽã ‡úxØ6yÝL07¤^Oä#£R}¿3,–6ÄÝ+XÄQBexa_·_V÷û×Èû2àj:ÙiŠ*Q"’Âyqy7í*˜§Ù ?)«9æOÄtä|Ÿ:ꪣe +xŽ›÷›‚Qœ‚èþ±®ò׺L‹Xƒç?R®q}w¼Y]ì*YþýÖYëü¢”)™‚¦°²äåp^0®6ºQ]¸:gÝw îRyj]Ôˆ™š®!.’I]»_a»ÿ/BìVË®”âDŸ¹~ÝÕrÎ÷vÊ;DxßRôaƒke–óÏѺ`–ú¯ÄìšÙ:ªW‘¡ƒÛ‹‘¦†‰€ËB(l½ca0èóÞÛî•Å’Þ'¹d.D*–¤€ƒê³ÅÞ=4ÉÀLªÊ's2 ÁõÐYìÁŸœ›Hx€µÁ®…X‡C0óÞâ`àKY(‰*œËƽR"ìèL/‡È|€Pô¿%÷f„OAC¾Ö7{ÿWSz@já¬MÕÿ(«èï +@Ðzî’‘h6èÝH®©óÔS¡¶RüYK¶T:´ñùç܃Ɋ: b{I"ÒE¬U½ æ”p©ó!ç%¶\íÍ5·¢0dñ=À²h~ó\”™‚§Ÿ:o€:ˆ\þ3³Ï-{³D3d@ÊÈD¿‚`ÄMd>o|K@ðÿ‡¹ï]±í-¯Ñÿö‡l\Q#Þ4J(>Áo!0WÈÊ@a"~Œ|ƒêHÎ¥ˆF"h˜£Ô ±šæò+ fpÄvÁüLåæÁh8>}“ÛbYÂâqoÉthçÒç•ÀÎ8:>u®…ãè®ðí ¾eHŒŽ¿žL9vÕ>”Jæß2Ánž™Lòå‘EiË®úáÓJ)æ +CX.ïè×1ôúµo!zþò•zòè);>z@±ªá°ß[ºýÉâ'‹‹Ÿ|²¤ˆ—zÏ¡îjÞ O{¬@¢  DxcNàE€DЀêé¸uÄ@Uʈ²@%¤–بÌm<@ëöÃùr M±R1 +}~&î•$e2©n†K‰xb`™ou}/?=Ȉw÷w'²P,·UH7-Kì^øŸV&S·dSÂqœ ÉRäÀP¨.¾Ø ‚޹¹[gx\(Rué`;Ù¿ÿÄ|M©Š•³Ÿx-ÈÔÝM8P»9?9¨vÎw*Nºýû:Q¬¬¯Âya=œ;IS<·öøÕuÐTý~}Xœý…s£ìïFéjëªï¯ªpÍê"U…SHQuçÎß SÆë7oõîÔJ¿Á=Œÿ‹2|}À*Äkûéy¯ª<_"G„Þ^ Àso®Eà*€Ìuô´\»|½W¡¥uô%µhé‚Ãr˜e tPÔÔiJç¾›àœCîù›Ë|Y Û=‘«\5އ÷6w +VÐ` +kE›m›dÑŸL$)óÇåý ‚óÛóuȽ_÷ª±+íSZR+Ámñá½P=¸Ñãܧc(~´Jc$k¬û{³è¬Ñœ •€niú—]õ°Èx€¡Ì”[.t‘„ ãáœÚAI+…6«É&ú‘¥Ku¸/•îU&0Ú·ÁF¡ñb¡aSSQoJÕxÙÃ¥·©;=&p ;ÂÂ}€ÐÒ\#*ªÑ¨×»½Ø‘s7X׫ ìÓÛÒ +ðj)¶»B››ÄØ-l—êÉ#&°n§š‡ôҚͥ·ÜÙä)Yü÷|6•ðï%Á ö¿˜ëìºï¿?t°w0rÀñSw<ùÆéi:1J‰ƒeKŒ7S#xÀ$Xöu~è·¨„Ђ¸x¨a\I@oAX¸âª‰FÅ@#•¤ÀvÃÈ(V‚ûí˜}"”¾ú–œ¢üèëþL2™¶Þæ@nr÷ÇçK’½5F=£%B&¥à~4‘˜bk¦ƒÒç@öÓçg®—wÀöÆèô¹ÁJ–Ä*p=§Õ_¯þüOÛØØØþƒ;?8>:Bt}ùòósUՋׯ@h3+*À÷¯³3|‘¼OÌjé@¾Èß2leµ¤–µÅ‡›g§cEüçøíÛWdÀMÞjäV/ŸóÌŸgéø Ïñ²óCa†Ý«ÁS8¸k6÷ÔÐíá8™ü­åPÍÔIäW´"\óûÓ‘Öë758zƒýÇÇ7%µ‚SçüUõA£žzIÓ=Ôät‚FT8++1ÂyÕïªÐð™PèoC<⪔RvT’?ÞÔA¯øbfݽ: *N`/:= º3¨¢Uîñ˜¾Øü°¿lü t!0#O›5W¼Œzi€¹-Œ&ÔŠB€’в »Eb9(½Ðg° ÏlV‚Ea ÉoÞ›—i0ÝXL¢ FðÅ ¢Š¸m€Áàs7ƒ†¼@Íu–ãŠp_9€ç]¡˜CëÀ\¿×[¼×Nšä²r¾=YôúISäÂëàËÛËyGI!*`† +k°/ë›<¸>R3XL‹Þ’sUÕ^'s(„¸Ê@<íôzêõÊ#¾|ÎG4€¥5‡IÈ3jmöQ‰HÔTóÕ’µRàÊMí †Ë¿å§ÅÌ^¯¢*âó¶xFQœlo0N,#îV‹ƒÉÎ.ïÑÅ¢{q®Î%ƒÏÉÉ‘®ÂÑZo±S¡ä Ífä`€›þ,©–«£§ÚývbéŽÓ/ø¾3èÜh› ]t©·ïëm]4›¨|¥§ä2w¹W[®¡¥æ–Qn¶O&EOì.ýåŽC€?Gq$¿’ qA ðñõ«GNôNKÏ_žc +üA|ñDì n÷­HE€kÑ"¼(ð€SÂuÄw4ß!ÿ #æZ‚§ÚÊüÀ‡[J1ËÍM•›Áû¢LHù5§·oS†‹›°õƒ¯vP€ÜuÌŠï ¼L$rŠæ@yìÐ1‚=¤¥¸@¦cçØÊÔjÑk÷î9úôôÑ©Îr_ùs”­-¾©Â²X;'=¥‰  ‡Ûõ4€¬t;ÀçOž?„Ýàµ3œœ—™—q½µëÝJNm…UÏÕ{d\EÌó< ¥ –›?RR‹‰#òpæ|†|» °eq‚7~Òø"Àƒ7®Ýô:…qT€OòJû4íq8¬æ“QÚ+Hè4@Ã\’°.ò vvšºS¿ÐA|Ê*Í0â~ “P.ÖãÑ`e˜%€Z«†{Àñ²Z‹F”£åjJbŽT_™ê%I©ÜŲ“­“‡÷_Ü çȼjòuë¸Ð\°÷uø›)' ew{& “£—/8ɾ¾|'QáÕ¥»q¨î"“Р¦«üÍR§.‰úñbë +ˆ `Q ¸P–F,fÝïÚY ‹:ï"Z.C^QºÆ.i°ÄðWO»Cg#†k‰«y«"ï¿JùB¾ QÀ¨ï€Rß~J ÔÓ¢ãì´u¾;êö›Ôy”¾6t›ÖœG¤Þ¹*L=ÔZl—Ôõî"æîµ€¸m?”>h!SghwJê‘¶^º7èÜòÌž uÿžî!h#Çwz7:U_$É)öhÜ8­ô.?™Î8‡£Á½Ùðö´Ù‰Lw­£Áçý'äE¢U½ŽŠ´‘B½È(ñ*•Œ¤ ¨©É^Q%ÿ1÷›½µ~o½êÿ¶ãŽÄ1å|PÏ5Ès)œ“¦)V㪳?Ù!û6ÿr(ÃïþÝ^ÊÊ‚…ÀÂòp/ÈfKóV ¹ñ©7ÚÁ¡¢”Oˉ4?¬z½Ïå %mÐ`ëCƒ]”¡«œs¸¹#ã0šË5æÅYÚ¦õΗ×Z-ë*™šFx,:ÄõµÀ5€ŸWìŒhvÓþeJ‚ö¿sü2PôùÒ+¾ ¨ÚUl3/n—ÍŠ*.ŽÓªé ¦»^‘(@iG%9;K¯ãÛÙÚËÿ˜ZøùÇL †Æ1çoŸ'ßV{úèð&9éT¼Ð–IPDR€”¸¯ßf¾›¶È +e-¨mÊß9È­7?Y.rðãyˉ²$ž5 ‰­¹•äÚÍ~~ûÈU0KfC…/ÚQ„eÏÊ@ªÄ=Êeº†.éÄÁ½¸à¹ÒÐù4_»q?túüôÉéññÑÞ^5ÜØ~ðüu”³”GIH«·o»*´´ÚßpCû=0öøÔEwO|ö·Exåj@aš ˳Š'>_˵”"$ØãŽi¯RÃÿuÎä­è…0m”™çnkàhèÏÿ4šÓ£̓½ƒ½ím·Ø›¿ ð'ïܸGÞýj¥3ŠÿXÒƒÁÍàáv‹‚ 0*ÜHþjwÚt€Dê`Q†.0´"y-u. ;N¾ç×б[ï$,ðôUP®öÝý“Y I‘ï3 ¸Ølr0†0úRMھƇAô ;À(<š’ªA3í«ºÆ @йsAFÚ6Ép>èn.Ç ¦*)9@bè]- +Xrë–+À[PÆÔÀhÖðލuG>Fp˜³0S*=œïS ¯d½ž †g…sTu/C_P»¨OraBß ømá‚ýq 赨JuµÚ/o¶bçä" °1.Ý©ñc\»Õ®ÒxZ—‘€ÈéÀÂàËüû@´Fu“Ø!§@+'›ƒîí”c‹•;%Ð%y“õó¾¨»Ú ’ןÊΘ÷Æ&jˆÈp3¡–¨ˆ6•Íò2iêCyNo^HôDÈ`„„ôG SgMïFžØ¼.ÃTâ‰gáDçö<—.|ü”Hr}z.w€ÒBü»ÁÉn?ª/,ÉìaÝ­'rŽr¡zç…4ç‹—àó)~¤à'š)Mø_¸ 0ÞuÓZÊG¡,W5X¼à¼ÃBmMHQ8àœÆ3ìunô°¬e„…ÿÓ‚Zá™v"mî6H¶Eïî´•×fqï^išB8vãÝøZ|ó’».Iz]Ô´¨ø ¿[ø‘ Iò°òL”B$äñ]”'Y»Ù¿x/ßQH$Pà/Cÿ‚yéÿ‰ùÿäyf›Á¶E¶Òõý¾°‹/)s£Aw™2 Äð·áºËO8×Õí_‘³0ÚMõ]!è8Þo9Õü—Ê®¹òkȵºêöó ȉ-ûvm{=’.£™ëK/ÞAh¥ˆÎÕ¬¹º ¬ ç; •@êìhh .«R›Ú‰Òå\$ u¾?Ûú‚a«¼v‡¥yåY,7ž:Z¥h\ÝQªRoŠë +¬ie­kÇVãzþ^àB¢F‘sÚUwÊ@8÷·€Œ¶\`±èÂE{ˆø!¦ÌkD~çµ.‹àzY8V}©3”cÿKôÈÖ<ª4ìÕýÆU¼s¹^¼æ„PÇH^$b½Ä"5­Ù SÏ3Ö×W&S8 ¢mª.Á¯šõ•èæŸHQ²æü ¥@¬×ƒÅáN ùæ3Wˆ“{p„ê²Ü©‹°Á|á"8ì«Ò™Ž_èÈU×¢¤J’HYÆÒƒÿ¥¡ÞZ´‰þ +% ¸v.èºþ«›·–2—=$ªfÔT7È<¾Äs7çr,`§Dúåªßïm¨¼D{ùj°Áu¡M•M0RWdQh±>v"è]ò™W莴͠,/öý2¢¾‡NîÂÜŸ£ÌÍq _m•¨•öÑYº¡ŠqIõ`\ÚIëéâ‡:Ÿû‡lû«Ñä­ÿÍÒ½ÒªòHŒ1§¾º´3^í”æc…þã†ä{ px vŠp@n,ݧG{ƒ +ÀÑñ“§:¦Ë,@`¢™`]P]äã³âôÀáñÏc_—Sƒ“†ø«@R^çóÚ§ œ›\æ¡DÔPN ©Þ`,ÿ¢|©ù¡™ûÏ=‹¥Á¨ß“> €’e[€Ä‚òEoH +Ö7’ŒG~¼å +È2òÕ+€sêã€ùàøh*Tn †GÏßX€p—͈,¿…´ÿ?YüÄ6Óé †CjùÁžŠ–Û.?yòèéËç/ãЕ‰yo^ê [¸µêå‰ïÂ`)u&U„U¯¶þ~£=ðŸb¿V?°Ö|t$9¥ãÍÇ,˹»¢ìù€§h~GÓ{£½ÑpcH¯[Uø5«›Õ½ü)‘·Ø7:«D–…ê]ž; +9å/xOt*]'éûq£Sm(@«=*”wÎy0«–ûí½’Š»Þè8ªˆ€ªšVËÜ¿Ìø*ïRƒB¬vjøFËhEJSMçêCK;íüE1jê~Õ8Ñì5±#3!zm¯h*Cg@ÍA¿Ór®Ó\àtLž^¯@*‰ºÖ»‘µËzVÝËëêV—YVR<WPTÒÇÚùÌ™i;ƒ‰4A>ŸÂ9¹¡ð=ío\r®6VBÂùEeÝùœI†îª`±Š¾Uê|-•ÎOVpõâºDös,Bœ¶ªàîý^ø¨}ÿ¡³¿`Paõ‰Éÿ—ÿªk­Øü9Bä—–ê ,"kå‹kbæöò—uõ'!M9Ð]8_•Ë)I0üüF:èeô6z|4%¥Rñ1(A€–/a¢/$U˜ÿ-}ôsìÀ©(érN(K'*™uø› +ÀWã¹u·¹ãÈ{Þm§s{·vR—”(]Ž¥/:–œªƒ/—3C….ÉUZ&¬{W2b›GÈT¹ÙéD¿‰Nâ¿Ó~~€¢æHjê”-§Á+Ë¡µžƒ9D„®õÌËÇ/…ø¸ãuNyj' yn]¨·{=õâoâ–Z݉ÁŸ%±â½,Ñ/,@ĸ~s~º7Üv #“Ð L¼yéߤã#‚cA4P÷o󠢚XÙ†šs*¥=—¶˜‡0ìwV~[ÜÑ©æœÓÉ<¼`\î&UwÇÖíj†œK´µ Åß]úÌFú (ßîÃã¼víN븎FËS¿¾ÔìÀdt.+ª?ÏàEÉ8)^Ô±”@¥r¬s=QµT Dë‚‚ÂxãÂÂõ®¶óT:…P…ÉÍRÏ—ËMÙÜ­;iT‰P& ¿\égÿ€+óX¨¾(âq”ô{·;¬8pÖ‡ü[ùÑ]°¢xhV(,ÁãEç‘lmÚ^ã÷²WÌùkEUºüîtµsÙZþ1Xx¸‡Zþ~~:Œj`Ñ`<ó0¢»XõÙF§øãù(ó2£¢ +Öh[Ÿuµ²*>]©]«Ñ¦ƒìÒ +×(/ D™:VìÙïm:¡ýî?€>\0ñ@]€ƒEƒê˾Ë@U>†óáD˜sâéüš7±Îg— +@›ˆ·Ój.Ál•BãTÕÙpù›}k§(}QTÛÔ/’EßRªÛ­Îeló9q)0a\Y‡’靈W0ŒAþ/HÈ %9B•_‰ËžÉe¹[·ãPÁ¿M—ñ-©šKûhÃbSuyÔ›­&œZ£•]¤…Ú@?áqÞR]í][¸K uÁª«Ù}ê·÷&5b·œ£üvƒ¤õ ÎÀuà-Xø3à8q ó\rP0O÷ûßÜÌ?N;£ð?‚Hb}œÿÜ0\¿õ¶V}ŒxM× —WÁdÑ9°fØ`½;÷A^ÐZ×ÏwÀ–´ï±ðK¢·ÙÈ ?¹ hF-1A?Vp_” ‡3\6  +¸•'ÌnËÜJðòyVÌù2àúÀ7æ O3@Š:0L%‰ÏiévK´@U `”wS×ÓG³'.Œàü©S„æç/ +ˆÞQ¦Ħç赉7¯‹!º›~¸—R‡p«`]Z&å¾è/þ©Ïùyùûß}ˆÜ‘Ð=š¡>ØÛÛ{ ¶0ðûËáü϶¥à¡»Zç6f:S.Ccá 3Z0²;¶°:­WêÆ¥ñ\är™vo‚´4p4ÒMwg<ífv AÔL%Rç™(\Ö÷.‘Kac.#ZªÑÝî7YªfSˆ²÷<“ê«9ç‰ÞÔÝ +üo9¯õ²s³ƒ•_8·fdο¨vdz­þ4>‹ØÐs"5%ýØ=P>¿äþÝ´LAB¬ÞÒº2ÀÇV໼u.^TÃîÉE+3¡œ£ºTõ´‹uqÉù~Á)´\•'jà|H=φÝoÚú¾äü:WüÖÕj÷²¶¬»2Ÿ3b\i'Xü +L×þ/äiÐ’»¥9D¼¾¾ž”éCÿþ +@ž®Ò2èFdÄ2° U«Ë_f+OBß՜Ȁ°Ê4 M¶AÕ¿=x’ÄrÍ6¤ÚÅ×PùÍUãQ¡ÞIçlØåЋÜÙ× 8çcIe§š —©ÒÒÚvÄÂ!@Í ÿDÍRU}ô[X‰iÜwÈ aQ¢}÷ãA#\› +ð~Fι/B²-Nªe»R*"̸†=3Ëî¢ÔIy’KŸ,~Âqï¦öúM²nžúÂ{aÞtÈ@%k³,o4²!ä‡u Àun‘`ÐÚä\ˆk¢ªò‹/ö½À“L­‡I£†ÏÍͦvUWl«ê»Î* ’U¸%ç$.M8·içD Ðüî/̰ÿ9'àæ-ZqpÏèÑ:("äò»¨ç–˜Ÿ&JGXÏLGNþ;Mg£ØXh.tQ86”*æ•É ðnkÝm6VGôi;ô{>u°ç½6vÅ<Þœ?ª«½ƒ½æøôôé“GOž:àV@èK2áŶ2dïeÎ},hÝ?76ኂÀÝâ t´Žœ ¨-ž`I›œ˜\žOéàŽjBáÖ?rýø÷£ ù¶`œ ¸1çL8ô€‹üs(gFäNJÈ•Ì)D‰€­€¨+É@öã'àúßtžƒÿ¦ëoœ¢ÿÆÝMgïžb-c,6¶Ý :OñFXŸfÕR ÿÁÿ;««ýáöv¥ðàøAã<€G.xâZ<ßÈ›a2‹ÎAì~Œ¿…GZ8.ëÙ^É›%×T¾wz‡:ŒDl‚ÉÿkO³ÕpÑ^ùZã¼øéù¹ëNOÿƒ{”‰Bõ:«Û‹0 6yþÒk«zXÕËýü\‰E~}Œ¦G§_J‹bß;Óû‘йýS<—÷^ÀdâîË·Ú˜AÒËP_‹]q¨'oþ÷‡ý­V!VìµB±ˆ V½C(™­0/´‰êâÙœq"BrîèEÓt†‚&]+¬£ÉÓ¿B[ºpŽÜo6ú…ó½Â¹iStÂ#yçùzÕ_¼=*‘$’KÀ—Øba,´>¤ÍõËÅ€]÷}ôÿÍðäÚ2GÜ!w]‘Ú9é[…"¸ûûÏ9ß)&_Ä…®p>tGÅ_pÿ¢îŠâ‹@à±AR2E±ÐZô©€g¤¾þÏxÐà|á£k/ܹéGJ§Ã´¢dŠX$–"ñƒþ67¯ÉÊ/Aa)jiãèK²Hc÷‹ˆ.$˜à’tìd±A£³‚_¤†E ñ¸ýµÅ¤^Ém7ƒ]­û!û2´ª”{RÓÀMÜ:ËÚX½;‹ÎBz ëÌÔÔùf4ÝUµÀ‘Ú1HõY~Ú©õ—Ëýf§¥àÔGŠ_² ÕH$/Í•öìh5Êœìîz“@ëëƒz=ëÚ eà"ŠÜ¥Á?ü±­ÔMÜ÷Æ×_&7Ïj³¢€ÓdXJµBÛVz®vªª³Š9_ž—ÚêKrÑʆº_Ú°y¾Õ¾‚WN€ B¡lLf˜Ã¡¥öÐÑ•†<s~_gûÊ÷ýÐÙ¬·Òÿ¥ÞÒgjk¤Runu,@TG*ІäùÉžÚ׳H'õ4®sÜá¶+~ïž3¤”Ñ@ý9mpÙÎ0 +ο— ï#¢Žòò?:Ø• @nOóòåùy |ƒ)„ dj΋ÎQÿ¹t‡=P08üWE)€¶¸œ4 Äþ âê1Ô•/,tS#¯p£šÚÿšý?Æ÷ÍAÐ|Å[~³j0¿žÍÀ+?DYH˜¼¢ÀK|̃ÕR‚è0Üz+,4Çj8”8ª9þ:‹}qž*À1€9úÃ`cxô”7yò¸TcZ í8«^ëk<8:¢²ãzâ†@¯ž›z|.7½~ñJèv?˜ßrÂw9Êkëçé|ï&? ¼¾îG¶¿79‚rì댸‚ŠñòmÀéŒäՆǾàà ÞÛÛn¬ºuÑí%×  Xɽׯ ÕŽÏÛEmÛ9/WB© «þ¬èµ¶ôiݨmº Ñx?±v¦ù‰dp0Ú#4ŒºžVÝ£Wfø¹30iiÝ’CäL=ê’‘s0üR+&‰^™¦^ÜD«»Ý‰îÙ»œçA)lKÄhê7öÚ~ýµœkÒq¡pžnªçß9€÷ nê ðQº…à¯IÄ嘉M®ˆ^쀄w°¬2Ô2'Q²…ÿh¿Ê<À8Òµ@nªÄÀ0çGŠHONº&¬uò®¿éS…^K¥ûŽ¥ÂrÞØÐrîA8wÂ_³…p‘æK(µ>ÕøG|Y"w‚®“srßæcɸß‹’Ñy þ__¸¾tããwJ )+K¨–âÑþÏz(}{P¹+BTùÊÕ€Ri-9éñ +‘MêÑ¿In`iÁH"÷=$–•gÕyX ÈÖb½í6ÃÎPÍeEú>]ûʆdÙ¦D|Z‹*íò¶¯e"vá…¸¬6*€–q)ÏîàŠêÏ~«Y´$Ov  +YïTu§ïeŽã¤+诎FLNùæŠ!y¶ö*Zzµ<ÿƒ ~É…©µTô‚ëq,ÖËO&©+à«” È2‰p;³þGT”…Bø±ì'œÝƒÑ ¼Ax Iˆ’ɑƵ|¡úæ–¸óôßèœwÌ<“›ÃíÞöƒs!ê|E+™ÓúK(.ˆ®å«±¼ŸÎž<øK»+ NÅ»e_Y„€Ï1B/ +ŠåB)P' 6¬qË!¿F‘H¶[õMæÝ^ˆÄœúÇ_løòü‰›?y:s ,ÀƆïZhU—ÅŽO·i‘|£@¯ôí¢¥YÚÇætÑX âÚž!dòtôûá´lCS´ôý]—”f¦£éWBÈww›º³e0Ãå>f +)dÉ‘þ•ìºúýpt¯`Dlsø>sj9ï¯Veçéÿ!ø*ù[AßrÎ +ÀÁ¼da§ÉnDu2®¶/X'°œ‹»…ss@JíD s,þg3PÅ%«àŸi€±%B·2¾šQ€¨e½ P.duã'‰| ü†²+9ï4u×ÇÄe*#üŒË>Jg=¤Î[Îùá6ñ6º„ +çNpª÷Çn‹4·GS·X-Q|Ù-E.{àDo­©õâPqÁ\ºµpÍ~ͦËL¿aâÂà}Õµ0öË$“<¹ñd2A{õ °@|.A\h{»¨@P)bK¢¼¿gÍò†c[W9¢ÜŸ«VÈj§ÆÆÃ•/ÕÁÒ Ú³ßa+TŽ´þMد/Zz’Ù—sø-¹*÷wvuF\Q]†›jÿˆJ žN¸†‚¨ýÅhÚÛ>ô(º H޾æ‹_ÄÓ•í +ÊœšYyl=[èÍ[ <ÆvÖʵK7oêXXZ§;Áð$o o+ÓþCÓrAOR~Y +àœÓBWû(•îO3íwʤˆ’H¨ÌSIˆ‹¸>ÕRIàùÆÔÊ1”±vhÏ„œ¾e·ºó¥t~€o +wü¥×v×曆ý¡%PÞ[÷}iO¼xnUýi°Ü=Ÿé‰èné¡–Ö$?|û¸ uwë0•“ËÍ‚’ã!>µrÙváϸꮖ—¿Ÿ„€Ÿ¡‚œñ[‹y®8îܤöôÑó§X¢z¤µüuƒÜ0@o€–9üš?ද=^pvzžÈЇ:ø)Ø`%”Xm%Çq.`¬ÅâJÊ˧¸ mô¬d¢yn’¿Ö{a2sÇ¿E• *$Ÿe7$a¼ Áá'n¬nqÓ1€s,æ'§§e'`‡ÎÍé ˜1‰´œ*^ô˜x¥ÕÞÆ`8Ú®÷j7tGàct€'OÎ}øàD€7ª^¯\²'lƒêÔHžLXý¿zJJøF9m½\Ì=`ßà®û{•ÔÜiàœ (þ—ÿ?Ï(Ä£ããƒ:k)’˜´xû6ÿQÒøZ¢-¦N§ý.ÂÅFÉgnhÛù.±¢{ÑÅÒÐëñ¨;lî—Y»[7¦ ¦ÞR9*ÏÒQG+‡ú + +©4ì>ücÞ>\º-‰r4m MOqC$¤q!UlÃý„šépûÌløšK™žGÌ„z±Í7 +À`VgzD’B<±óU¨=¢7çùímãªN|k¢ì(V8üì³Í|æ-݉àÊ@€o¡wyàÂÂõ_e–•þÉâjmÁ³X + !Aî)¸yîîîôûÍý Q”²rÉ%Ç2ÔRksR"ìì×ýN=©çœ§Î'‡'±FS—¤ÌÁÜ šœ‹8wÜFO/ây³ ¸®õ.Þ¬‚Óë\[ð%t¾ãVqéAö„ƒsa?ðS >H ðñìŠE'tðÃ]Œ ë»Óåáý4Ý@jÁ.]éWhwg:F©.ý*"M©óÍlx…жLÜzO‡«#‘Ô>Ó¾Ç6‹Ò*UFrÀo§>³Ò÷y仇°ŽîÎÝSRÖ±r]È‚šKe„Ì¢ÐUmi:ìv³>Æ'·¿*d'ßú8d\BI’C›vˆjßüN‡@™X¶Ì§i–Í+n-Ýùx¡çŠ€ë×nÝqIØÍÖ䌢Lòl„ê…“o~ŠÂØúÀ¯2_øšVÝNËy|}¬è-qÙÿÂyµëZ ”®xâZòi¡\NÀÍEÂ}tã)ü¦XvÈõ»¿ø>@þœxÝA:k¤µþ%ê«ôãXhËÔÚþê\E¾l¶V†.ºh|»õɨÛwVò°<Éæ2hvçÍ%£ó)Ç(éå%iï'±èý¬Ô¹Ä7/ÕÛ£½úè8#Ò`‘ÞË`46èË×FXD¥œin{)Djºæ>¿¸‡x2Òä×:æ+œðƒ£æþxMø•âÜu.kïEž/€9Ð/Zñ¦æYIA^JdZyWPBd¼ÁÔÔû~Ëór"nË_håíCÜŠí¯ÎcaQ€´ŸÏß™oò.€GO]pt`W·ŸR“±4þ˜ó%ÑMZü÷¨¿¡0¢®ë¾záÑì‘3ð¨sT®¨]ÏÝ襈]æ_XAß·ê¿ àóçEñ^Î-@øÕu¶‹n}TTá´úϳ¡#;Î8ô…ÃÌÝÖØ€:¶GCðÿö’{-´*@ius*=wæV7Åeÿ“Úîã9Ùj¡4ôYE \ìÿÇ=¾]˜®uú.ÉzºS7¡o¦-Ñí0ô$º.‡‡ãònÀ“ƒ-ÒU¢ ¿l)*›“j»M/ñ󋌫°.ê}3'‘¢º$Æ;Ý·ä"@8«VeP&A†7nñÝì7e}\™•`ðövÓï_pÖwwa[ >6÷ݲ Úu7ÒÈŽ;½Ï²©È%«²Õ·b0k3ëÀ’þ§vaý­¥¼|.0+bÅÒÜ,D@V¼õIÝß²Î[ÉiÔZ³S@>œ#a o!sÊѰ۔회Χã?ž ѵ¤›@Ün£¤@° ¢R²P(|­õ{w\ðÑG:K]è»`SVDFœ_”#N~ÀgóÃ<ãfÚ4ÖAÝL'ÿëí³Ç“ñÉICP'O9]Dóy%„â ]®)‹TÑJ9uÊ•iã„´aUOgÓ²­…w#ã5\j MÎГÆÍd:®'M=\ÙHÀ¡P¢¨¼Ùô>aÏø$Ý*$”ÔêÙp¹z™$W¾6ÆÉÉÉ=ûµñÛ ©¢“5Ó“z%œ×µ:êˆNxû͸¤•ÔçðrÐYݨvà¼}wGÖ7‡dfØÂ9Ê‘(2œ/÷GE±åé[=;œé3Fï ÖPì|)¯Ø7°Á>^X»›WZë ÞÆõLNþú×dzñÉ,œÇ“f6Î8ŠLbá|Oç§™Ð\)Êd:‹‡õ`µ³ÁC™>œÈz©*Ú°ú¨œ¥pÞb«'Mêá*Ú7ÍÄà|Q |¦SŒ‰“¤®»[UÝ5ŠÛŸ~:îxsýîϬøØ÷tJ_bìÌH+¤ŒÆ9cÍÐYîQ_$BÊÒí)3ùìçqs‚£9ÒZ`}ê|š¡,§zø¾?®9=™4ßò`KØÔa¿ú¦ÞØhžÑXßOû`ÂÏóÄÀe æ·ÏOGÛ£zODÊ+jžŸkìúŽ:ð€j€p†!;Ó™{A¸àžß9ñkŽn D²`lœMQJïA¦·b) +[rµO÷'aÄÁCÃ’ïár2U¦·Ø÷àœŸ)1ÂyXœ4‡“éáþ> à”7$äœskŽN¦Ó¸’èà‘OôîÑÖ°yÜì #3:¹7NNžý×ãÁiܬ›XtûËá=w>+›µ"L°î#W°µ|ûJÙ{åÎÝ; 7ŠKýÚµ¥ž‰nŠhge ½àzETÕ ç +—ð<çüp:­©ñ³C +HñSçˆ' +ŸûÃ~ý‚ërNÉäýÏ““Ç¢èää„'9>DäΦŽTâY’©rŒ¾ÐjZ»Uïέkn™²póîÌO–zHY”GJ‹#d€þTk‚~àçÚô(ú†£fòoí´‘ªšZ¾æñ¨;=HãèÉ÷´l «Ñý}Ôr’víL|ÆÆÆrŸÖñ WvhÄü`eªµX pÚ´Üìg—%+dÝÚˆÚÖÕ€":¨è&4:j¶©ïË +]B½•:‚“­œË( +°±ÇÓ™Œ¿.ÕKHáùä¸;ýfÔ2šÑa¹Ð”'1¬¼k~¾îjk¹;ÜÞNiÕp–ÈU™#Ò”s4¯šœ;J9D—.Ž€>V-ˆ¦ãY=yPfÜ¡Aº¹©šÝ›¸v“†9U5ypøG`‹Çe¬_ŽÙLfËÇÍeü‚÷fZQçTÞÈËd6åÜw‘÷WV¨~äkµ·?Ý/E +ç>}/-ç<Ú\5ê§Ý¾Š, ‹`Ê£T÷¢iúè€ÐÆeIjk¥_ÕtáÆðõ´˜ë³3ëöúGºÝÐ ²ôÏrßé|^9N×±–;»®û¦QUŸ÷V;Ë}Ò[¾m+º±\2($çt;5z«J*Aº]w‰· ü£¬ó3é|§ªeSÇ,l.p(ç FÍìg©`Ï{|Âfþ@Mà¿}ÿütoT¶~ôô‰cÒÏ1C_éBv  qÑD› ‘Nu—Þýq{0Zä3ൂ‡Ö²Ú>þ7‚yK¢² qŸ ÀWÌu"¶¶­W9Çô+p±õ8däX¾.rL +IŽ/pÝK»ѸHöeâ.üè©k \.•š1±U¬m]í~¡¯Þœ¿~•½sÝ +àÈ!€½ÑÆ`ûøÜÅäJ¹R>ÁìB6‘è·}-°ï&ζ}ýrÞ¿ìb€§Üc²æÁkñ_ï} 4)îcå¿ûîäeú>¹ò’ûjÆáÔ³^»³à¹p†f÷Ü ËÀGOÑ@Ž} Àƒð¿m¸ù¶¯/ð-€ ·8z×`#¾?B¸tí¢ +Ù]ÄSZ¯ Ad«÷àO¢‘kðì"ýìø}wÃNO‡Ë&9L‡È¦æ±B\2 xK§ñ¨v¶îÛЋŠËû ûÐ7IèëÇÁšéÙÖQs‰Îm{?âp¦N‘è‘¶ð;Øè.ÓËqCïG\Ç@à|¨w"Iá¾ytQRÝ^Q,ZH…´]Nä\áÎÕ;øUìÈÀ°ÛOU¨ëYôMPÄ¢®ØêPŽvëY¹§”í­÷?ï}Ž +°3)w"\²ŽHŽ D¡Û|~{{ùöm®a n,ÜøÕµ?¾qãÆ¯n|,]ûøW¥aÞ¸Ú3»Ôùªÿa ,`˜k‰9¿( +DåÂK9þÍo¼`Ì~OÖW:˫֤á)ñ:DRþ¦ƒLêš$ß°›gJ…ЦG¦B¨þo–oì9î\Ëþ;úøW7Š=´´ÜYÊ!òñÆÇ TÇB9»M5Q[¿¹Áóîðк¶–T¢ßr;ç|%Ôš’ó~yYÎái•r¦îW¬–¶ê.š¡M¶ÛÝ"׎D„÷‘ÈQðèóó·ï_Ÿ?:îù6ÀãÓ'eàKB €?±¥  _¢xÈQtà´j(à§RÁ5—èAoÞ¨!ä¦_b+â%¡ÚUûE§@x“™ûè‘Ccþ€²a.-’_d-cŸ_GâS …¾“UrÕÖñßXÞ\¡8äÍ1l’y‚ñ1‘R7þ»ê.H.ò¦/_¹OØùô¹CæGMsp0ÜÞØ>~IrÎ0eÒ0ýïåïÍÜýü·‰éØñ·}`…£œb„?qO@+>¯èºß¼Êø}FñåB>äNÕÈÇXÎó¯Šb CûŒ£ Á£ èP£8éP€=5³çOŸ»!áQs䀽ш¾’ €hÓŸ|"þó·hŸkÿìW„‹4­sÕNE¸ XVÒièå~:‡+ÿÒÝâw…pvQ¿¼Ž\$ƒµ?Rªÿ›O·~_ÚÈÛJEä\<@H×"JKr†ê"Q•‹íIQ~«p)9qEá/<™yh®¦ûñka$]T–W|Éùœ½’×rgë7vÑ+W9Úrù[ÅT€nü‹ɺ|»ÃG)²xã‚EÉ‘°#~Z1ZP~yQ£|Q¢E4PÉsá Ïá÷ÿ#á\Þ û…¡œ—zã T)´µ x™·òk)E¦™´¥­ù4÷R=…(I°QväïQú?®}ìFÀŠÉ"-–rç¶›þ»¦)øaä+­|źàò-ŒB ÝgÎ+Jÿ9W†¾²=ì/ºm±,Æj¯‹–Pª¢(ÁÁŒ²rlnû¿Ù*~B^¶ÔRs|¶þð/ýö® +ù™y¾¶´R‰CfÐÖ­ýX’s”RÂmcÃ÷ûŸ{yPîåI\á0&gŸiò çjX¶0{‰-ÍÍA9þ¦ÖF&&f¬–Z@æhøÛåQÓL{$Ñëq€hXT¡“™â¡¶Mô£k ‹ŸaËãö¼/:‰<µà9RaÕÂu´mÎyÙu­33dj§½¡F(và<§ÃÑoºê±á|pÉûÈd¨ÉѧËÃô>NyèV•$7ž¨„‘…_^" Ø‚/¯~©ü“›ohøK·n£¾vÐ[±îyË7Ð,;ôUÊü×N¢vøªD­Yéè(Rç*|-/ËyÚƒÙÎy/õ mýÛdk~Ù¦Z(ü¹ý­-ÚÏÏü‹ÞGBF±‹ÅWòÍù£=ôÿƒÆIOTâ#Ök,~„ýÄô(‰8¥OÀouñ»8j@PZ£˜3uòNVC’­*Ä?¼qÊwR¦Äð7À2× ¨3‰òÉŠ£m°v"šBÖ8ßßÔ ä PS¦BDó0„Ì&ÅéG·‚³và"E.,é—:°Ðù<}rŠ7çnoTÇÏKâj*$eÉZ®B—øO[à€ÑãºОƒŽ§ºœYë<»0ë¯÷õCe%@ÑI|ÖWùôãñ®*êZ.@Å÷Ÿ¤¸ˆNñêü9‡àµK<ž?ñ ŠrÔŒF(%à n/Þþç"¦o£Ì$Ô³ æüB¸Øë‰ˆtQÚ²]CY@8…ÚEC¿ÚE·ÛŽØ”F(”¦¾…\k…\™[î!•‰ý„;\”„øF@npN«õÁ.„+ÂRwžsÎ!Wa¿U”íKΗ—©†"\ìe-çØOm2tQ„n¹¡˜+Daèuuœo]rÎu˜ õ¶\¾æ¬HÄ+m¢ÐjgñãÅÎ"B±d¶:Àk —:E¹r;pu¢»çCê¼. ‰\@”0ŧžûÿòÿXkÏù’H-A¾r¤pn†$9€sÏ—‡rMaôDúŒDQþ8Ãòß »7:Cê¹Õ-¿ ü]Ó^l›”ÒRèÄìW~óß kâüúÓÉ´i¦üA³YÝŒº{{Îl¬Ç3_O¥ÇC—x½óõx2}÷⤼¼iäj}]L‰Vñ_lX5cÓáRüÁœþjÍl­ ëgD*ƒ!#LŸ¨lª“³¿Èùt2ýšjš}×dZtÑnÞK-ø¼‡‚´¢.‡ñ÷ß?T ¶÷öŽÁ…€ç¨eÜàþ…DáEG½ñ@M£šBàÎ1öùyK'p*tGGh/ºà^tðcću +~¼Pô‡‚Ó* nüƒê`úœ µÁm'V™¢ö¼q¢X@?ÊÌß;m `¯>RîdÔÜ ´…,;,®{ïr_Ðç²ZQø÷Kåludþ•ûôh8;à$€Ñ ?::mLS·TÄ6¹üIßÛGZû?‡ èØ«OO xzêK˜¨w¯^¾qûÞvìþ-J€°þÖ +àÈCQÝ +Ι‡pójâ”â¾=íÛÔå\aè+ž^þñÿ»˜ñøÈ-Ž2„òj±·—?á³€n[:uˆF]!KlaÛÛˆÊÙìŒö[À”òº(bñ`–.J[eÞÒ”.ÚéPÖ1´5::²Õ#gN¦ÓvÑñÔ±±¯'/^d,]zÐ6t$Æ„^:Q.NOè/íV¸LNëE,ö>Ý|:ûëÛÇ„ËÑy!\‹B²pÐ +î<9›6ª<ˆÅa=¢ÏhvѺ¨ýŒYVõQá¼í¢ÍþÐü 9¦K6ž½ðÝùSWl}Ý<þîrjîç0p(wBª®Ö¾³„ŽìÈÞ.éïfÕ=N.HÙ¥%_‰^éF¿sWaë*Ád‘k?ZèUÍqSõ«¾¢ÇõƒÑÆÌ—£ÙDႉpy|ö¿-ý^áü à‰p™N‡óÉ¡ß +Í9?”ó‚E‡ÔÀ7#ê|<Ý›³é×Λà†C +ö“o¿;›ÔÄ":8Ü'Ø_[ZøèúÒÍww÷B'GÕµ›®¡îô{*„6öÓ‡-„ÉCg¦8ƒÆQu‡Ó3gS9iÔ$§I8GÂ&Dzö¸ZVsä9̉f‘Ù’Èö@b®•o-o.!í‡Âh(£¹…¸+ùªã®8·Ä™€ÎTPÈ™¼áƒ'MxÙálkÓY(ÜÈŒ¡?ðÚûc§ÛÃu×N‰úGÀíEµŠàâv5¹ðG[¢#ŠF-çh*e‡}8×öæt{cyKe7ÓZZÊ<ËPö™[é—Ù¸›T›ÓÙù¿·é–¹¾7ßÍœ rÇÝ€Àl国MXJí¾Nƒ­¿³z©s®Í9§±ŽÿH<ûk!û0uRÊžÜp~à°wn¡;ûsYé~tÎÊßòl•§Î³ò%#X»ÍI°Zs›ƒ=¯ÌŽuv«MÝ™ +©cîîTëK×Õîjõ»§»¹ÍŸË O×ýÚïqîüVHý Ê^‚0(»PŸ>›+œ«eÊùîWarz„ Éi3ìfü¤¹¤s9æ™ÖÒ¾ŸD^ÛNú~ +ôü m?´YÏ·‡{ÛnO“iXˆ.d^ ƒ ü÷´µ¬8góÇø–r¡@·°ýcæ:ÔÎa¸LpÐAµâuß €¸ØýãßÞ”1ýKkôÀüÁ‘!8’'¯'d)ˆZ†„L=!óP~Êð>SöŠ÷ƒ%6i‘¬nŠR>ÞçLüwŽ=ë$@]žœ +›š~§/UI(¬ª‚!9ódN¶íg@ÕULÜAp-àƒc‡•ý€2ðê9€í›´âQ9ñºkà)V¾§\Ïô}¶ø/»$°ÈÁ ñß 8ÅÐ׺øÿéù“'zÿŽù;Ú;1â0GÕR0Ò–þyqÑM?Òœ/¨b‹sá2|±Í×pÕ\£µo,oÌ…Ké¢E†B÷Ûv¾ßݘÏmÕjà +ºr1Sv`IHYí4@{Á~}´Ñ¿ÿ]¤hºqè)]Äbƒp)\ÊOX¾‹r{š´ÂÅyAf·ÓrŠNžÉñ ‹TS_tÑÆ™ñÚû¥‹B2˜>J&ðiäW<ûºž ;Õw“¬öÊ^抟],¤ˆi&›K7–ò $½ÒÒ-÷ZãÀùHÙÈ1v_V¯œ§h—îð~Òýj.ÒËû ªQæbrZ­”ý}„‹9ç\¼ä|?7=,øX‚ÖÓê÷ÕÙ,‚h^¨}ŒÔ‰†“æäÙt°¼FÆ©¡aoªL__¸5ßßÀi°e*¬œ+%«~ÇAŒü»¶‹ÖôKa>5î$oJÞœ‰úYªÇ5+ž't2µîÇÿ6O¶³OÍÆFj4>íM÷Hý–vmèC†\Ãn÷ug¾Æ©$æ˜Ê&s§CJþ …¾ögYÀºSªï_¿êx%LyìVLÞ ë¨þð!HöAI¬{šÜáã` êÒL«”® ÎÄ% +Rv 2?í »Û^º‘g™•O-³õ¹½WÊþ-×›õŽèçî¡»wÝ¥ÂYðy‹%dã¤e.ÜÝt‰ˆ³@wк@á`XõÅr-7Æãÿõ_)á¿ýûxŠêB»óÕwf‚e»0 ñë"ºþZß Ã/2‡±:@u‘sþ +ß…ìPiêý®Uç‹1Åy)½ÌÓ¬Ê%( ½WÅÎnu/X_»~«t·¼Ûçno}s<½·¹i»«UšË½ta+‰øŒ]¨]Ÿ+aLé®ç¨ÔùƒÒ…?9àoU<¬‡sž•7\ñ{G©¢ÈÉ´eZËî¿îîóg H%·mæ=`{?‰ÚÄü{’  ª½½Ž£œ;@àµP«p"DJÅ{@*œ ˜:õM« l&p]ÃÛ׳¯²P0Ú¹wÚà U0¼Øè?üð#)‡³ RÕøá>þød¦j!‘„™f`r×›ÐOïæ°Í Œ’J‰ׂeð‡ó8\ ƪl쮊™ÏŸ¿ÒðàÁ͵·}üœŒŒ +6ë«hëè’ZûŽÿ¨e`´]¸ùÒ‘Cº|-¯ïDÇö­~7 (¿»oÌåØÕ3ò å4”â·Q-à†Á2# Úþñ_<Áø÷à:p0ãÀ€Ú{ÐtðÿÏ¥5_Ò;Â%¾àV{×4ò3.m¯*ÒËáÊü”vÛí—.*úG,Ú†®PTV· ¼|!W¾ÎMˆÎ¢¼1>‰p±÷*Ù}xòÂ¥ÁΘìö»W„ ßÀ»€… =¹ä\¡Þlt¶î#D*ú™Fj@D¡»Âe'œ6[¡-ëþ]tQ¿”ˆÜŠÍ±ÃÉ +ÀŒË¢ý kÛ„ýj<ñwgs—«K7x +¾rí“¥ÛÊ –Gebòµ…[­°Â> V}9XÔrÞγ¼.аcåîV +—–óˆ³Â¹µk5ÎÙ·´áܸa¿z™D$U=æÀ4°°xîº% u~P_20:ÀÍì E¸SF<®¬eþPú0À¾ðèn°y)ò´êTXÍ_Ó9ói…÷£ Éø mf¸¼QÛ°7z¶BÕ&ÂïU¶§s½ãy Ú¬êßkßÓIޤsu® `’ÙaíJü¸R½ù¶¾`ÒŸ`”ëþÊM(÷ WÐ6ßô‡Sø¨l>>(«{òï'ã¯Q\þüoãIå†\r¥î"ëÙ2É ¢üä;d{ðC‡è±¥aE‘ãö@\¤—•õìYêû‡ÑÖÀÿ5·¸&ª +ä¾½’æyýfo@ ‡O7ØŸöûÖ¬f—õaìòX&3‹ýG7 +Øí®V¾¬Pì/¶2ŒZ”í,gÍy«½[ÿ!$æ°ì ë$«|§8ûp“q[ç6sˆ\©º¶«¶W]››¶ù}¶;/8ç?;ü·”½µõÍÝ=5ÚúnµÚÙ¨ª¸Ù¹xÊrÞßÁëïÒ/7ïœh`á~gØéËy䈊‡lsä×vêýÃaWŒj5ß2¼OÕ¥½|ý¯vâëg©Hþ÷'FíwoÏ1„ö4EÁ=ÑQ OŠ_Üeø\pj¿xJäxÛ¹hr1¬Þ@¾¸Ÿ·n·cø¶b/_™“WÜþñ C¹~A毧$ö¼Ål~‹wÁ…~€7òJB°Ç=YuÀVuqW@· &dœâ¶_TA‰RT†7^¡àP_•}€ž¿|ª }züàCRÛGÏ š#™˜õQèoß·ö Uð÷'¯ÚîííÕG¦Çœ +xê«ùu¼|òü9™ùÿæµyÚó~Ôüõ˧Ӿ܇#^žóíƒóì­{ÌGÉyw• +À¹k= #78:8‚zûQRܳ͑ÚÛ´îÅŶr©9ò‹´h΋;ZÚV¸4õýÒwgSH3/‡.Úßj»è¾o*p”†™ ‰ª·ó\äLi;ž¶þô°ãéóöÉ3ºÉ¡ÒÆ7f»˜@áRs®æ‚R˜Æº‹Wà?4¼áRŒd ,».AÁî>zaC'|4 òÎçŒs™cq3b…(Qå1=á|ÿÙvÇÅ$)î︩ïŽ.n؆°¾tci§ Æ‘H>Ê£¼Š<6uä ôù† -Æf•Ýjd”Ý“†É}Î9´­8c~ \ÔGŠ„‘á (‚mj]Ö •k„¢ˆ èV¼Ø¥Î÷Ç`–kòm¢cE»OÝFPt€~ëÀ’R'@~Êu·Ós÷£þZÙ`8úÿƒ`ÅÛ*`•ÚÕÝ걬ÝÅR0ýûûlþ¨*éöm_ÉNKºƒ.4Ýü†hãÛÛÛ\ÜV)Lûhæg=E”Ç­•‡ÍE§ zYA^BÜø£Y§Ö=ʉµl¢ìúpx†»ãéÆö iF·àžéì—šî@C½NK.-]ôÏ–¸œÃo8vŒ (³_Ò–‡'æ•Æi;™%ËXÕ»N5µúÀ^ øÿ÷ëë÷„}÷ÿ9D¸³t+}´pwöE|_*5 #&MNS?(-´}׌ÿ]ÎW»Ûe ÈÜ9±]Í9ÏP°Ô4çþð_?«Éù€iìºÃí­Ö­Ù4Ó-ç-{éxmÕ€â³/­ÃíÕ|.PUÝëÝúhIûfñWGo­‡zNŸ% ÊØnÕéô÷šûDÀÅ@öŒ"@yærGÊî…H™•¾¼Ê¹ÌÑ1óœí¨VÜ‚mó¢’äŇâȹÐUÿXF(,'Ôû¨ŸLÂ^ ŽÂ9'(£ Ò¾¢.¯¨/k +ô€TT2ß ¼çÿG´à±Ö³‡œ´hB ¥b/'‚ì-þK®ÞcÁAqYã +Òì'\á&6/°œ7¼Íb¢*HÞ‹¤—«¥”ù-©Ïâ+€ÿè0~cšàåÇ<²TgÄZêáÕ«ó×ÐçOO=¨¸}zîG¼FvØÃ .©Œÿü×Ê7øO+ ©s7_8m|+À£¼†ÁÝùÁç Ê…ñÜW3U ~à?WÞž{áÚï×o^º3Ðù› ÿsÌ] $ÿÄWý§šÿŽ}­ÑžÃø}§¯¢£´@&l·m¸¥/æÂÅmÅ$AV±èªî‹.ºl²mÓÞ©â3O‹MÝŸ4¾¢¦Š!jC÷V¶]ÓlòÇsŒ3²é'í(J¥þè Ç¥›î˜víº;ÞZÌhéÝÎg®‚i©h#„|ð߇*òÄ/*'XÖtëïÆõ¿Æ^Lá(—Ø@‡“‡œú2ž‹‰Y>·æmê·mÚ|A>¸Ì]ˆ9vGeªAÛ^¨ÐòKíÔOj7òˆ|Í›£ÍßRk*«í%ó%çÑ–g[ÕcÏÈ7mÝg›áthòÇÇRé5zyK²Ù¤Ú ÏÕ–ÆÎIY8Eߥ¹Œ–+4A263QÞÉ"°gc´ÎêýfµÿeôT}UƒÁ½uð³Z__ÓpGgÀúº +À-µSçµ[½{¶ +õOšÙÉpcFÒûúо‚ó¢ð„ññ'(Û]Vò&YÁ_ örh5Û9Ã?“sç_¨  wF‘.&e;¯Ü"¤Ô,¶³Ècáø+Ï­¸€|=%øî¿ÂuN£ç@äW;¡À‰kê×Qn¶wûËdо¹Má„tnS»ñ蠷ΰË×çJ¥tMšMÃfe8sŠf"ç£ÙåÌ› 5g¾®Ë£ß»û³¹ž8™ü¹È8nGËüj¡çXp_ ËñÛ'§{ÎHCp,Ú%b/Ï_gÀ¿ª â„ﺀí39w¢€· + ÊñhÃGXBN×w‚Ñ‚œ\j‘8÷¥ãü¾1Ñ„AÃâߪcby@ßÕ‚0KE—à'3ò<&†»Ëá˜+)1’¤#þü¨²Ñγ#ú†ÞÍäuÿ|÷8÷}€ÓãÆ!€í#·öŸ²;Ið÷iÿG ‹®KK®Yí8?t4ÚÄ +?>~2uFT€ÓìõäúêÍëóLÈ(QHÄøœd~ Ššß¾ñíMí=ž:€j\ñ[«V›""Nî!ZµÔ“½E`wó‹ÍÞÒ ‰_§¹H'ºXõ¦kSg@ÄL)A¾›b]D̆ó8Oþè-‡rþ].þµÄÂeÎ9r1•nq‹Dg"Ð}Óz«A¢ÇòÜÄ-hùL&bÃí^³€ÐÀMg-B(2’ŠÍgKN Œípi㌦S¬ë!žša¿~Q¹Ÿƒ ÔI +~"â-ç¬òc‹ðõ´M¾Êk¤ ¨’†~é<’ÁpXotG ÔLÜÖºqB„UlêÐxº¿ºí±§Þ¬õjÞÔi.Ehy“Òb„#5€é°Bu €ŸŠÿ|;FwëQ–e9ZÉr×2 §êæ¥pö¥çØÆh Í0}4Lý\¦¾ + jx_Åðåæ=}ÿ›Úþ¤à¯Uëkh˜Åë÷îÅ *¯ûÂ'=©s Š’>|¬“¬Ê>“´}pî¥UÉä-ýß²¤l—šÎ©aøCñæyÔÃÎpVTÕ¦™ì­ô¶þ¬%Ål£ß:¯Ë¨Lîe'ÎЭs¨­co[­°JØ{kK ·>º†îZ`W$•RsrB©ÚKºÿw@ðß…µ˜£Qµwp÷új ¼™5@ü€Àà¸3°¤Ëß`ë-'/½Ïszõ:Ó9ö½~žM°úu[¨¼<núàÿSt˜#Ñ¿98¨²€¬×ëÜiY¼ôüd +౨ œûrFÝW,*\,ãñ¿¹;=—>Zzé¢ÍtcÃ6¯«(}p÷q‰DCÿ÷‰»“*‘hçªòRQ«gÂ%½ +X)ZŠ]4ŽX¬º+b1?ŽèÒ/8Ü)œ•ðn#>p`î_m&ˆJŒGu˜œï¿Õºà°dm•óË. +ç²®8)6LÖ/@?èN¦‰ iTäB¸ììŽõtcM”=ס› yû*v´J€s\c#G‡CE*ÂùTá ]u˜ñ³ÂÅÁ˜’}Ëy¦“C“?·X¤ÌÖ3jD¡@™]=­‡Íã¯Sl©ç•îŒyÌèR­½ÍÞ`M)¥1™ÉÒwÊ.r°ŽLý¼×ZªU7ÝáéƒÙƒ)*=Í£©»õ‹òÈò]EC…þ8á1ò>~7S¶¥ÀWÚ9ÔÎ\iÕÅ qß +´íluk-5­IK%Ù¶Í·Ï{¿«ª¶A„‰j?U­4·Ú9¤’Ó ü„ó¯j'sŽ÷·ª³9ºÅ”Mˆ˜‘$1Ù­šQ§ß6ô¼ð’óbô ¢åŠœÀÀƒíÑ`¹>+(Ê£#a3óYëÞqH ž”!ýT‰.Úcñ¯ßÓp÷îÚú¦ +ÀÚÝ;.˜[¸~ý£k·îÞÓÕoZb2Î*YV (UÂ}²ü·ñc3Œ !r^Žd7Œ£‘— žò)ÊÂéÒv·É„D¬vŽSÇØÑ<îñÔ9^ˆp¾ÒÿV+QRéÔ¹­^ÙÂ¿Š•úlº¢ôÖ85®;ú€*@^ŽH9Æúû˃ݨ¸úµâh)¯ù”6~·¡“ÎB•æâ"ÝÎ0ÝÍíK)9Αo¸†‰ñ‰Cœ—a ìÛŠó&þlkqgË4kï½—D´÷’>j½òÀ8§'ü͋ӽ! +À±‹=}ä®´ÏcõÆÉŒ’ðúµ ÈŸ¦¸W “¸[¾´é=CÅ@ÌlÇá š¶£ûþâË©q4³3ï±Þ‰BJ1ð=ñßf7ç¡ðŸ ÙáWO0^\î4 û_îI-¢¬ +”yÿà Ì$U~£È¨5èå ”1·EÝXØe2½oÐq#_žëÖ¹ƒíÓçha¸ÔL*÷]ºÿç{5â»ÓYío ··«ìp`Å7ǨNŸ>Qý³µïÒw ~{_]$¨ï™jIkì‡Áø ¼ò…ÆtÉŸSÿùu!ÀùÓ§°þÝvà4ûÿ•€ÛÃÌÿïô–ÞÕÒšÿ޲ÜÚ¾.N¢kåâpydC'V06˜íÞ†Ng¥ÓN&ý Un±îG_EF¬±ž±Ÿí¢ÿÞŠÅ4t{„|_.NF¸¤D¸”„5œŠpQòö;yƒ›ü‰ýÃ{­0™ÏU€Ýr¡pn÷׺XNÕñº(§­% ,îŶ‹Æ¼)á|*ãü·"Ðç]4‚O­Á’”°³ªØþ*Ò¬ÿ×¶Œ¬Ý\½ÑÛÿËž ‘µÿCa•¨íKÈ"^`RÌtúãØtjÜïVÿôIDAT*•bq^çr(çUç’sEŸ‡( +­p ç,£¶²ÍÝ"Yký,»õÃÑðÕ*7,™)@+Z43PšM0´HAÄ£ó©Èægµõè!0LÌ=7Býoеpð d[(¼Ãk=~€É™íýBã¯À ÏuZ-gV¤3è¶áê ¾µàèÞ­P¬Ñö¸ Ëp4ìNNšæß&'™PWj¬iÜq8'ªMí’gPÖ§ì=@kîÏÿñžý¯§ÒÃi˜K•z%lVoUßá¼$ÛNŠ¥N} .)Šý2žöžÍÔÈ Éøü˜çdSGa¬'ÿæ„™“qLH=7¯]sV­Ö9€Î\£ØQ…þGµöÕÎf½y¯§óƒݳM;ºKŸ¼ÐË!½&QºB”ce€DD*ž¤’%zÒœó}Kòp¸ª&`#‰iTDÃîø$­åäñÿyÌo×÷^,ÞKb¿¸ –¿yþhÏEiǾÎ%⎟kXb¤ƒ5.=Sg/¡Äô8“òŠƒ}î½çg|ý]ƒ¾^¹ áÿM1ê³P{Óôæáœ‹æ“–î]ø’GÞðÍÀ¼ãqà?L%¼™‚ä*ðä@6L¾¨ 3Ek“+e*_¦ðçNŠo@>AU÷GJ±¢OÝ<·Î€§Þ' ¸¶’`Á³«TðUÿz§Ó‹•­ ÏžÀÛ{{Àpst|\€Ó'O瀳œÁW€êÄs=À/Ú;Bðê5OêuÞõÏÓÍ‚'+p#» +¾tmJËùN}ý¿€¸šr~°7ÚUC§n‰üú'ÔUZ  4åKÚh¶¤[*u¤4pº(Xæï¨SO… ½@ÅxR^fQºèøO¾-׆®X,Š®m==Ô.úìñŸÿ8iÇS‹Ð£³+“^3}p)ÒåÄyAýUÝÐP¨¿.e†±¤¬¼à¼ý­ºÛtQàð!Þ +—Ë.J>û³AWÕE>Jå‡ÿ"\&þË•.šH…§ÖsNôªÛ´Ëó Ì,‚ô-êÀª¸Wun÷Ü+W»B% Œ|¼píWüri> Pæçü£‡af„#h]‘=ffS$[øx\­ÔxHŽK¥Ëy„ËäÏsá¢T%´Ÿ åd|V ›‡F15¿[ÚÿÚpÍîff–»„uÝûÝZoéVìÿkQ––~í ä{»¶|(SËÕo ™ÿQxOÙi.ãéC=Óô#ä/XŸ·ªk¸¼=ãžHd­~á®bÀÍaÔ©"EwtÔÉòïÔÕFw2£ò€¢Ò̃¢dœ6kû™þieÛJWÁ4s‚ñÈwwO&''}vvr2~öŒlÙ¢ÐUΉ4žÖýíikQ®¯p®ª7žì•¾ª‹\§™«¸¸‰œš‹z9·ô7d²Yœ;ü´žØCÕ–É +žÈÙÛó¬šNßùíJ‚ÀÙ:ËÿÞ.j&ñ¿fJ óG]»Ù»GzLJõÖ}4#%nù†Ây]5U¿Ÿ·~ê°æ«ÒC¡öáÖ=’ߺú +Öv`%½¢õ)èžBh§4û³­~-žª¡›L¨÷ä="ÏÎO'þk©ópE*ô}íGmõu€·âÿ¿yëV™PÆ«67¿úÊçGƒXíÔÕ=ÃÕVÁ™¹-¿»ªP–"l|ð6ˆª;œ<¤Îu—%c¾0dòÒIÕ­¿1¬\Ɖ»;~69ùîÙ³Ç'g“ÿ:qxÔð6’÷S <ÿ˜\Õ؉rB:ˆõæù)’ÒEé(.xŠÍ)Ø”€×¯ƒ˜ÚÄ‚dAPÇÜO_Þ÷ƒ«þ=FÐ Î5Ñ8nâx,‚¹©`0—u 5M@Ñ<ŠèþÆTÕU‚íí$ÿ„ôÛë¡ä/‚g!¾IäÜOÔÑÊ*AOrK¶aI€#¹aÄòm2–Õ4¨Ncým_¿i7Ñq úªÑѹ·*‰låê;x÷/ø/¼jÿwÜ–“Öâná>€½½#ä«“tyîÅ ߥà9g--Ò¿uXz•½áþÛ7/Q°ö‰è¿ z +LËöóó'èwYÂÀðŸõh¾† +—îÔÎhÛòœÔüu´MûªpQ,ÒEGJS-¡ÈF­-c7Ø4t€Œ­Û¼‰k'l»è={vròç“¿ŠF OϤ(581 ÊÄpcFÏh…K‘½…ŠpA,öW³+Ѧ}P†µŠ"]äÞ@43Ö¸ÞIöû°¹ÝE¸Îížf<.…s‡,*)Ȳ!ZÎ.'ÿ1ù¯à¨Q¤ˆDË€,ÚÙ7ÃÕxË~MPiç+ á"@NÖ«Áêâ ¢šAK7йãLã–®e€ë·–Z!3Ç& þagCþϾ‰LeëR¸èu©Ïö:uçA ?„úЧ†pù«Âåñ.m¥[ö8šE% ý¾9±Züo ^ƒ€p1XngqgTÞ»0^F2Xª8ô_ˆ,÷Ãì=û¡ôaC2TDd¸eíeaâÚœy(K6Ë`ô ¸qŽœÍ%¥ð¬ EËòíVŒb™6MKïNÿ×äßO&Q¹l´¥ñ•ˆ$õÇ`R]HsšªjןMþmbw©¨rŒÍv^ñÔùü°Þu‡ßΣ['ÓeËvLÇøÛGŸÕ®®ÊヂåùÏøÛ‰j=õ€ÂøÅKâü‰`?Câ~ëØíº×¿??þÃ`{4r €çO\Æœ;ðoº +@ì[u R@”Ôñt.–|œõ?¢4¸Í¼ÿÙÊptp°wPýy]|âÿê•Q€¶ÏIåÿáòNM˦‹"\Njå%ÝÞ–.ŠÊ^×3W@¥…·Dó&¿UÕœL¾ûwz$Ë\¼T[ýŸtÈ›ùìO@r½€ZðçœÅ²Òè*çÕ:w眛µr½Øä 9‘$…öbk¥‹Ú_] K¥{*Í!¤þIóïsáòŸ˜ÒmœM)‚Á8vÐOÌ~³º·‰`Ð7YŠ¡±µ‹TXïÝÿ3`±Ý ‘䢺k \/îÒ)&ÉWÝÁÉäÿ!D›œáÒ‚ W_TZ_Fá:œ;1ÕEu‡’žŒÿϳŸbQ{`šÕïë«•Nåž² ­ Vܯ1ÆB]MÎënõדgŽ\´Ñ"E¾ðwbž9 å¼Td8×$áŒÚÝ9ùó³Ç}L/5þÏP‹;ï!@ìëÞ8Ç súÍËãÑÆÐÑèãS_K÷Dóñ%øÿêÍ+Šˆšñ€ÛkÔ!8ð)tÒÀç•0´%¯Ü×,æø &9:Ùf3`± Æ//†òÿ#*æÉÿ8Ï%ÄsO]éDÏý€o2°!r1!DwTDZúø×`ªò—XyX0Šk-ATÒ댷¿ÕÐ>}‚!}üèô¨ñu€ÃícwØ—]qÿo²ý÷€:"É×j´öÿª*Àˆê›FŽ4÷å==:Eˆ à9ÈïLþs-}çþÉ„Ö~œ«œ¡ hòŸŸ»Þÿåà•ª€¦?êÃ+Ô‡-ÿ'O2·óéÓG§§j/®þ{p0:ØË®üºýmÂ6ç^ç×s  »sj…KAѫ¥tÑ4½z:êNÞþÇ_‘%m-ÛÚÎé¡ûâÕ´¿¥”¤—.JH•‡Ùä±DEÑãÉ=þ¯“Ã4ô¶›”NÚèO¹l #ÒåM‚SuW±{±èŠ6þeÛa6øä}§CO¢¤+ÒEûõ<+Vpéb^‡sOÔÑwÏ2 ¹].SÇR{»»³É_ÿò]”Ž\bÛŸ=à»v݈p‡?¥‰# $`)bÜ(\–;> µ1 ‹¥…On_¼%»\xȸ\ô«º?üÏ“ÇeiwÉOÖZoÂyµR#’¹ Ü+\¾‚DãÉÃgÏž=žÎk:ûPˆJ˜ÑýÑl«à¿`E0¾r^rAhóNÔÉA÷ì¿&³¢.æñꩃ—d–'<íö%MèÍ{ƒ{™ôïìŽÍÚU>Ñ¥[znÞÉrÏkh7ï®RœôÙjß'?S+ÙÎÏÁtÔï7µ°Ârm¥üzò¸, $~¹A¨õ%7Û@ݾI?ÿïd « tønt€ÁÂr៣Ù^höÌ‹AÔÍ‹ÞO³Qÿuîÿ·¦µ¸¬xAÊÆYÕ?@²•bÑ­ÃSU7gå2œŸPãÉÙ4MÞO"×{I‹”ʨ>ˆ ê½y®0Ú;8ÒýœÏŸ‹9UCøÔó,¾Bç[7Ú/0 p ÛO¿@i6[÷Å$ÎO–ïŒfÜÕà]•ÓT(NRûá´ˆK À,ÊZ?íýàøÛ,ðDnÔÔ> «¢¡Û¡õ02èì„…ø*¢Ž84 ’¼N÷œêåP °²Ô•^»Ÿ¤1 ²ºÞôÁÞh£:}š©¦"è7y—®Œÿû?.€Þªö´ +@­ +𠃧§O²P_ƒ®|Œ_Œ༾WY‰€b†}Ÿ±€,õs±ÀN@ ×/_>ù’§èΪrìÎ?&û„¬ÿLô €{úÿËÀ>€N;`É!­+y%Õvv瀮vQ}4Q;öþ´éÎþëÏØ¢6ðñ~‘Š¥¡G¹EÒ̶ì¢vÙô 9žlÃ]Ë“þ¥?È‚R 8Š>rûÅÙ[ûû¾+@€$ÆÍdÖÔú¯ý3—óm“SGñÿÓçÔLô¢P«ÎIÓñ×Vë²Òý6_ïAf6ë›Ç“`ç¹—`Á+èÂÝßÔ¾¨"܃G¬Á~<pZâÊyYjH)]ˆÎºíú89·Å;ç6eÛ—Z¢œ$ðµkÐ7¦ÝÇ/Ÿµù• +ƒ­RŒ]©ªi¿ÚHA´{ëü;pà\@ ïŽ[gqªYºyKk™ÿM_m±º:µÚÒML¿`tá|ß»Qãá¼ØûÑaæuº¬ó½:;û[g$2ö§/Gjëœp4>$ùý@<}´F‹Ï$XN4%7ÿ¶"Ch^nûá…Tf«øö³w¥%¢Ì*¬íBøØv¨Øu7ZR§Upêó˜šI`ÿH¾ãét«~öØÝ4¡9çNæÌ~܇0¶3­ºõÙ¤4ŽbŠ&šŒ–ÈŒËnHï£Wï!ÁW° î‚{è/í ¶÷2ð´,^ÜKNÔºEÚˆ£@Uá¸@rߌ/S4ýÍBÈv @7B!ŠÒN#ÌÀ¾Ü¨D)0Æß»@—€Y¨´Z†þð6³ ‹é_Bó[˜Q)¹d„|H-ãY´è¥â€ªÃ^*çb¹‘%õ%¾­ *ä%Ø«;];}°zŸž›.‘ÔYþ•)ÿïüÙ˜ÄçÿÓ\V{¾iÓWRö¨FÕÁAíœ|‡`xê»QÄžœ£ø +½üo^f8Àß²Iôæ¥ ü^=Ïp?çª +/}ÝŸOÑXýäøÉ“ç¨-§þ¹üïÈE õž›žlôÊÌ¿KÀgœë±°=¿KtWK:í±¸ßØ‘h¤ @yò°;{6{œ6^š-M8]ÔfL­Ñ~}æìâr4 _YCMúºqŸH9eó}ÇõÐ!#–ÈHtÅ¢ÛàF O§õ°{àÛýDsáQ^èŠX¬Çh0±8=Ùhè¢m~~Ë…‹œïîè€sÉ.š  fWÎἋ6vÑÒÙýÞÝÍ{ ª®úÀ—nËýœÎå˰ëƒèõîåqG%ç"”÷.Ôµ9ÏÏ’]k!ʹo9£âôÝé¨{_áóE¸„J_pžË‡ûӼēÞm.*½Ü5­Zð ŠVŠÅÒLüÕøÏniÈÉ_[&7¬š½ÿ$ÿ–à‡Óµ@³É ôðÛïž|{|œÑÎÎf'ÚåäpJ€`I3µm5ãéìOî;ãúêÔ…Ê×èhçófÒhÛùE„îÃÙT׳éhû-žNHæ/ßNŠâ“Ç_<ªåÜ6ï{f¸U5‡'g/‚õÓp>§g£¡ ^ΧÍ7Íãoá„°ãdzg£âÔÓ³>:Ôf?ñÍv'Ëeª›»›ƒµ5©T2ʹâã¦ï®rÀ 7ð¥OÃÙ·³9|KmÍ^ÌDñÊ—ØD›³ÓÑÖðŽ¥ƒëœÛ©szª/ã‚s"·œ›a4<«¶òZDÊ@7ofgT"uÒPçg'¾d<ýn4œ6'““dz/þòâl2y8Ó÷…ÝÜ4‡‡ÓÃÇVºûù ¬J?™ž=£öwò6 ¥¢ÈT¨;Ôá.-zÍ%úîêéá6º5L/JÛé}> i7ܨ5Žä αÞÝígLc¨_ÔÛ¨t<7œŸÀ¿qöøÙ³ª_Î6¦ãÇèur~öâ­aÆÓØ?¤í6“ÃÙDÎm½4—1µûþ¿@Üûàu=ÿ5^ßuÒžþóÑéÃPfµ=ù)¹Ã^Æÿçþ 6û¥9ó-"K§\qб¡ i=xlÖr¾1\ÙòR›ÄOÔ{þi7"ór'>²Ò}K(ö‹’gé´”_à—ÐO?ŽÃguøÛe™pº +)Ë8¿)F²£#Ž>ýt´-Ûá¼ÔõE1¨ðOÍ·p}Ú—ó­ÁœóüæµzÖøÑ7ÓîÊA5Ú+ú›÷Ú +OÐLa2eœå>n8XFó+‡(ˆ%¹«äŽW”ÂäÃáÊo‡ÃîjÇjX\\Z¼}›jé”-­ £6_<ó[r4ýîJ˜Ýh›O<×%:XsTO·>õµ¤Vr—ÌB¾1=­J[¡5üÜ_ ;ÿ˜°W)HtÆþëçÇ#ú¡.hÌÎúŽ_½9ü¿ÿ^7€ˆHÐƉÓÜ5„àyþ +”@ý"ýÖ\ç5°ÖÜÎd~pÞyƒ|‘_#v¾WDfñškf*àóG`þ•ôýÂì/Ƽ·L*Ž€6ˆhžk¤@í.=\M`?â¼—¼nM$´9SJÊë×ß²äâ,jCôÍ´:Œê'y~=î?µš$Jm%e5 êÀ•¿·ÚÿŽÿ+‹ýï*~{=š¡[î<Ø{Pf8 ßGÒ_óUfüGˆà×ùGCp” z‚ ÿòNástU€,ù'1 ¾thêìÅÜ…p{Ë7Äcücð÷÷¿Ð²€o“¿ú×¾¿|åuñ¥GÛu.º»tÑá…pù2ßi葊MÓ]ñµ´è }Û¨‰nm}ZrZz+ +"ÆH¸:è~ªX,b"b³Í¨t,ÅâÊòh4.ó×úá²Ñß2ƒ"þå}¸-çål¥;qôºhƒ¥„péºGw-Ý{¾<NˆÓBÜ“w__^È æ4þ˨uvîì9ö®Rj —o´/ÈEÎÞ^òú‹ÎøXB,]»¶Øq™W.Á4˜¨¶ºÌÅ¢’ËlÄtÔL‡ŸºP.ܺ.NåÜjB"Àº;C…š²ŒFË@êÂ%/¡(ˆHˆaÿ7[xúÝ^·x, ðñ_)(—Ü55í+ë_Šê;ب6úŸþ7èZÉàÈõý­ß/ºÅÁÊÊÊò2ÿË^]]]I3nɦœŸr؇—~w•°R§Ã×§Ë®ÝÀ‡ç¹jB÷_­Pge¥CÒ݃¢»E}­,'b‰ÕíÿÏß|êaYù°Òéðßž„J¨­O—·úä¹Òý4œ‡…$?ÏN2¡òˆÒ‡ƒ0ç²^âY^Ù•¥‹“ÔEKá–,[5Ñ ¦A&yãFǽÁmŽ7hŠ7ÊÓý ÑD?¾ññ„º±|û·¿%® ¤Œ«¥¨$îo¿Û!—nΩŠ0̃¢Ô¹f +ç²îÏ–œÏ+AÎSç~Yé&GÍ™°I{út™«- –ÒÔ%¬&iweéþfe£³p¥Xö¸…@|K·-ˆ´ÚY&¹ÎÒíÿÇÇ7(ì ¨ ô[B­.—g5ÏŸ£­þpùSÊxXöÉtSnηÚv6Úÿô7Î!ŸoN.S~µPÿ©{Ùô6Àöýëóc=ǧÀ€CçoßjmG –Ÿ8CÀ¼ž|Gè]s?·Ò9TÏø¬ø hæºkƒÏ1Ó5ùsö6Cz÷‹º@$òÍŠcSç‚‹ÊQR,G$ãŸF=Z†± ´”2†ð£Û{FȲ\€@Ñ ë‹CÍxOÄqúÂzêé•*€ê€èM§ç¾3¹Ý] µÆïŒû¿CêÏÿG—Öþ/R!4ÜÞÛCíÔN¨º]ìðh<è5h)j?{#4 Ì[Lôº=œN§3·Â­ëÝú³]_Š¥bFh‘PmâHU{µ£ôM=Úㄳƒú 3üƒ^´Ö ³ÃQü¼ÐAIBÓT_A×/JXµ=ØÕèR„®ãžžé!–»~w{z@^èfQµd櫃9ç$ýÎe]ïpú]ïBi«Ž®rÎImD +œÔ šªLE7¼àÜZ‚­&¾‹)Ò¡¯K@Å ßëÜþmg0X[W8ðA›C«sÂ\; ]G€,|¼èBOÅZv$ :ô‡øÊ{ˆýíp®÷Çì'Ó£-9•ðn[15õâSÓ‡óÓî–#5Ù¦¡h„VY個GORç͈ÇGÕ¦€–‚Ë Ú:¯ùHY'ٟʆü åÿ””«%ç3\o­ˆ’Xç÷Wõ7¶¬’иޯú ŸÙÙã6:|…Ü»~ÕÇÉ´pN¿ï¢E|Õ… çC¾Ò\t^p®1h«Qíÿ³Sïí´œ§”F$­éôÈG÷~ÒUü^Í€37.ïû}óæüto{tà"@½ÆÏ_'˜œ:¾¹ ¾iÿ: Š,9n7ÐÌAZÑŸ[î«÷½V~¹!B‹ÅŽñçQÿVÞéÏÔbòçöè¤IC”'$_E•ð +ÚˆnêÞ7¦l8xÏXm*eÄ¡è¦Ã5NÚ˜F2[>äg„©©êÀ–µó6^€èB¯œà–ú¾M +Žnï?'c™´„ïÿ–Jý)ýÝøÿÿ½‚-ä0=ôÀ‘÷¯Ý´Wžÿó—çOw½û/]òçX¿£ý<'R)Pp÷_®Á ÿÁ}ç>âÿÿû£=ñÛéÿóÐMæ@»mþ'›ö»¨mÚ.6Ús²]ôÀ~N^í¢\R¸` §I×Ó'¶]Åbä± ½tѾ\4t;… Ý>ñµƒtãš\F[Ÿ^ô(Š äu†!ô…pA~ÁÚŽÂervð{ÄŠø±×Ée+‹pá·\›öû²Y+Ý:«YÀ~µ'çÂåOó.ªè±Ãù +1ÿ-çó.Jàãz/Üå3üýÖ¶ìð€ËçÈ’¤ Ó-¥ÛîîVzÿ8©; ½|†6pÛ—èëX¼…Ô½¹Ôû’àU}¿ªîƒ7>‰ƒ~7V9i¦ÎÃùO„Ë‘KV" †ýßwFÙr²Z$ªÁ:ä+¸x@u·ª£æ •n²¢çìø%käYR; Äùx<žÎ–ïýÎ' btaqañöR/Û¥÷i@o0ørŽÈÃýpº–Ü~N¦§³Ç«­­Æá)*Vàä8ZÁÙìdb“òÁ€CãfòpêÓ¿ONÎú-ÖÖ÷¬:›¨&'³ÉìÄ)4Êfœ:~OàÉøëññìÌQIÛæœÚ­`ÏO–'ŸªP¦Êù +Í‚GG9 ÆÃ±’Œç<û÷þSÿ}”em:¬Q^°o_»àÞÑñL XòÚ}€PP «;ªy+X +圓€pê@¶ vrÛ‹ØÝúúµÈ3ÿ>è[Ðüu¿)Ô†(ézOXæ>¹‘‡¸ßB¹$\—Ÿ|£!DÑ1OÅ KNá"©äKç|ž«-aIWHR2')j±ãK‰¿ÇÚÖoâüÔ‰»ôx’.zˆÙiuÙ!.cì´‡“€®\Â0ÚPíDš‘ììãVØ…y«`¼;nªNïËÏ.>Žv&ÀÍ¥÷ëa¤OH`ÜN ÂeCœr6ÉÃ9ÀDF–óŠXôŠ~Áy¥A+áa^'õÁ×&xb•žLÏ7T S´ ñÀžæþÃ$˜ø˜ž(*<ñ›½iŸß¹åík€ÖR4°©ÚÜÙßO2ÓÙ°_) +?𿹰üâŸóÕNfn5÷¿…¡ªþòvl*¸Úqî÷þ~;ƒµngræ…HîŒÛÂ:ÚP«qxÎÚL0ËÚÒ¸¼—Î9‘û,á®P–KR¦ +5[+ý‡/Îl_.#¹$R—'çX:rØ×J”Г¦`2úŠ0{½n'c:5vL“ŸôO#’ó9#N‘¶“iZâ¬ùfkÛê'þûò§œ·%a× +n½^Õ_¼]M›ÝõõÞº‹Sn•€]çq1ðÖfïîâÏÙïÁMònIȹª¥À0ÐΞu9Æx2 ß­ôyû|x,F•(qÓtÃ9Ç\ÛFþ))¤2ÍVÕÝný—ïÊ Ù«uÎÃáZi.ÏTœjVõnéÓ X×ËöUwz=g>®òù¥8N…µú7—nØ1í¡ÒZ¿ÿy†ö –‹Bd±Ó4ý½TºeW›þ)Éyî]p^5ýNuöÝ,ï'œ·uò>jqç}¤[ß7ü‹[N`ûþüÑA½×œú.:ñ+ó¹‹Ì lúO¨Íœ:^îRw“éåÒß5e mø6^?ÛE„.Ñp·p^O)‰(:è»(wô­Èù¼Ó)Q·ø¯[bk”™»X³1Wß¡<:–,Ï÷u¬õ‹‹½^=¨ÑzÙÀ‹ + \ ࣅ[w×?þlPV{ÊËñ ˜åáÙ¦C­ÊåW”®aôM¹ƒžœßÌw„q4û¶«ˆ(7 4µË5_[Û¼N å uÆbI ½u—1Ìw}ùQ{­­Rù(jµ>|Z54Úë×h¶ ×nñG)ï +ÿ냵5ËÒÂßR Í;7:hµ4ìâÞZ›¿ (Á +Ï~¬Ê¦þ}Þ×ic)\Ì+~ä>TŠÏSÚÝÍK6ê/÷áüY{½à<çý”¥áï£8µö·ÎXeßž?zà&@àŒXòêiæ”9Õ\çuY3 “hUxcâöøm¡Ø‹¯^|ær{>ý˜úÄ!©ù~BýI#Kú’:—ÛÉæl&M!8ϯ¦{÷vü­Óž˜^ÅÝ÷§•°e”àooMÛÛo¢=pÏ2˜nt“@¿K 8Šßßå üRê#o^¾|É'÷瞀ªG{SzÔ?2ТþOh>þïúÿKûÿ×`. +Aoucu8tj§[4ªâwÆíÃw _ÝûQÏ^¾ë5öc÷«!Ý¿ÒEïwQ7묑-ÿ¢¡Ûô#Á¹AgTÇO[Á q±˜žYÄbð2\ÓBqX$éð^+Ó‹p!h8wnÝßÐ4Sø‰p)4_öWL°B—A5Þ}¦@‚Gè’sŒ5 78ÿv¸µ}BF2°)$ŒÄ¥‚‰°ÁѦ2rp»_+\„Î…[syëN€½{…(.ç Œö»àQ©Ù¤sYç&E¸Ü/õ6.»¥ÎK‰æœgS~L jx6//ì—CØ›”'Óž–8 +f ¦^æÉ¢Ü\¸v£¼ ÈÕÉõÁNVSÏ©®êH׿ý‡|л @ƒÈ¥~Í»>shÎÒR­›Ëø°4—LÏ´Ùä‘QÄâº*­Ea ªŽ:£CŸ‚r½tki>Jó1 Ï©´Žíå~3WáBÎ/ê\>¸¦òRížl\*$Üîºvñ]ÎOš~y-°»bJ\ržöÎeöE?[ó+îm¥{†b³†Ë¶6hn½ÅÅziÐÛ½Àÿòʼ ø‡®/-UK7êêù>ø!áp—.êcIó)eÝßµ÷5“É!Ú«œ·¯eFK„”ï[Χu—>Jó‹Ê`á<_©¥2&!v;£ŸçÍõÏÒ_¬oÏΪΨ¹×síªï°¾yóÖM_ÜÛÌÞ0¶ÆQÓºR‚ÝÍ¥©×CFjú’ËlÒYžjaÁ`‚ž¾ |šõË‹V)ë᪠<'/ùÚA$]=Æ4 +œ~æO/ñ{é¥ö¨È_<@ÞÛWާk€ *€c;kÊh¸ª‚àøöµ¶0 ÙB¼›þ ´nÝÇ%!Ý`¢.ä€Z~#°®µìO®#ý¸É†½ µþy‚ц&*‘]Vð#0,7„ב iÉÈɆ…%õ‡5 N‰VþHIøÕ Ò ðç¿åƒÔE™JeU'ä¬ ‚·Åý.ø>±¢ºàÑÓs]%z ()Ü?¾“ŸRëÿÿ{û_`uiµßlomtàDR>=â™D @3sƒ†óGŽíùµÿQž<Ê·ýäÚ“ó'ú&žDq8ÿåMåè˜äœý—½ÿéd¾ÿ^²ÓÌ?ðdÈõ§”.ªÐÚ%Řo»h+\@ û–]tç¢'K¥U§yKé¥ño¯vj»¨"ÓÍ9¸§‹Š£_‘Ñ΋j¹žrµí;‹Òî_q O'p@aˆiÌUÅ!œ;.ÞŠ\'ã*œËæÖdè]á"•y8%¤„Ù^r³‹î ¶ëf§9¿è¢ûΕÕ´ÚÁyÉ:ßA|_Ô_dâ¦ç›X;˜Ç”uww€ÒØ~Bè }šávÙWgw'CõtÑÈárЭíS4í+Â¥´çÈ@»¨!>}÷>:úÔ.ê«OºsMIÛM÷ÐÑË!œ˜|R)~ü«b1Ûª(\šé°3.tL;PÙHS«–D&q¿;Œp!;9oY/Ñ#\ÐnJð –TÒE“Â;]4ŒÌÃͶª~IòK¾DŒˆÄb€Ak¸R›;›ˆºáb?CÊ!ÅQöö}@z GJ#>ûZQI™ã‹w©J½Ô nÂ|+u²ãP]ìÿN¸„ó¯@Q*¥Ü +qÏÛ˜ù‘n墠bŒúkßÖ¾À!¬©¢Ä$ôÀ­¨öYAõVÇÜ>˜>T€Æßô7œAwAãÚWTZœC¦ªÞ"Ô]Z¡”ñëDMWëD¤òì¡TBåË*ßRkżžW}ÙEHO?è—Í Ó@¿©:ýf0Ø«c‹®e› õh\XÚèÖ:/æäpn¨öZáüë–u=Q[;Úû*/²é „{9§4[\K#òfazÎ9±†_n–½çK_Ðôo/Ö¨£k¾¨"ï¤UÞt` ÿ<ëëwî–2kÞtʨyQÈ-bû²PÈÚ›Wz3®%ýK«\¦ã¥#áhS† ¥•¡¡•g,½Ây­:Eïôkê>Žú”®öW8x‘!ÉC¯ìV+£é—½% âÀ•è×M€…ÿuËâd?gʇb·FX#š‚íÛ‚ëö(y8Û Ê#𠨜„.#ιՌѢeÝGÎë­åžgSÏ´‚LUN÷ªÜÏüãï§×ç/ß8ÅO @L°^>3À¬Iב»0vmì~wŸÿ¹à>Ťçbkn£˜þþî‘f ¬ÁÑ|»÷¿c\üîv‚ŸÁ¢"Ì3ù!ºiû–¯'Ÿ~$ c¡ˆ”¡•Ø‹á>~ü>Ó¼jü +û^ T†oõ(ˆõz¼B–(r‘ëTNûÀ·ï:åN?»^vLë'å-}/½Oµúò>·çù{šãÿßÛÿâ¿Öxïw.OßÞÞÕzìùŸê8>}4ÖŸæMÍè.ÖDY{¢ ðg¢€ZÖfýÿ3ˆàЧþ ÿÎÕÏÒ÷á`óiuI†®jñÀ ­ùý4×Ôi”éÊ…h”0ÚE¹G{Õ +.Fμµg^z…õ#ô–NTnt;G$Y;ÐN¹˜vWíN|£}”åB˜6ãÉD·(¡Ú„fŠp?b`rq»8/ä#ÀÎ/ÒÂ-œo\—bóÏ9µ¶ZŒÇd HóJÝ_iЊêú$œÒ?K×—óÚ±ÂÄ›Ž4¹„…’s± "g ï l¯Ç¢¯Ð&ƒE‡‚ÿKK·ÿ÷«¼¥ôÎÝH!?„'R믦fCíÁÜ~¤Ô@j–ô¶Âë‚Ùì~;‹œó ù2ÏjuxµÎÃ9Xä¾È—užÊŒÞµ¿;~QåµÀñ,|ôO¿'(ÆQOIê þÈÌxU¿£pü`ú à«HIjeƒöt)jiÑ„)5Hmǵ_ÔÅfFã…õ=,Ëì?±­2Eü‘¡H1í…x~£\(—ÐXì-;$P]n@=¬¶‹·A®ÖaÄÑrÿ”¦ØŒO :IÚä¤Gáyî6*»ІWBøÌËÅKÎÇ +À7¨ D 2mçÅ®ž —.8ßš;: ú¾Ø;ÜŽÂÑ:ùÖŠ— §u|¾¼8¤9VkÕ=[å­¥›·|²NüH«Üô-K‹E@~h Æ*hºÉê +ç²Ö'³Á|¼Ù+TxQ¾ ×¥ÆÏé²q1BNa 9¾Ô=jÛvå¦`ØÒ_ÛÒKEIGÿ?OOÒÒ%Šf¥§„9­¦Õêhz¯w+êÌÇmíîÝ5Ðm«~þš?Ôׄ®ë¥HõâÇ™ØòYoIy®‡«ÈÍÒ¸iaüYd»{¿éɹ ™ÚSN´4tñÒ‹ø»ä¾âk8påÉ%çÔ„þ£0ÿ^rÝ×{©ì +`Dpm™¾dILÁÞ¼~ ˆ½}ûö•ðïý©"©^ú9†øç.·ãÊÖª1ˆ©Áâ€:)~ƒÝ¾½¯À­þxÈœå"êÇo. z窯ÚC0cRÕSà»’kÒ7°³!¿4ð*MNÛžß—! +õ>}.ªçx@–&ÁU•8'*Ò÷*BhJàûKל?•j;ôÈ… mÎ\ˆsüÉs«ñÒOñ¿µÿóæŽz¾ïpÓ_$Úêðù˜~™H&E#xþ(þÿ§~ž­·œ?õ¡á£û¿¼¸àÍÂN²QTóü‡>ï¸ Îß‘f4¢º‡t°ì”}¶[z¥'|ºÍ: ÝqK0Ò²ª&ŠCí"Ø›G(50:­§“ ±H+vŒÒ†î)r±Ù^©çsBˆÄ¹Xô´t‘"[×èlØÍd…9YÕ¥`p.…"ét7öûs ½+\”ŒÄê¼ ]¥zºèh#ïiö'ïvQìtÑœ:ÀPÄœâO“Ö…¢–éͪ]e$þoruwÖ_DÜôzwo]ZZÈÎëμ¾´¦€¨á•Lvêw„ º‹VÜ\º|é‹‹"\Ìt4\b!\ÎÅs8×ÝÈ?—AÝ‹ÆPa¥k7o*<TÁôwÇõYÕÀÌànö‰]p 5Z<ð¯tüïmo*Á:WšË/Óµö÷—è+JÒô‡“CÔ¸¯S:NæÊ²ÛX°£ûW± ¥¹¤”6cÓñ¿jFËÅ1j}S(Sp{)ÍÑŒt§ÒÅ‚QµÒWí²)M¢êèA|†øn9a,g…Â\8§Ê.´³+œOf[y)P!+ßeZB˜Y ËP5ßl /a”gì·*‹Û5³ü†v|`Þ_Z¤9*©î­ç}€ÿo:/¥¼ àúÒÝÞ`õÆ`s}­·Ö/VóÀ¡ðF«4•XÄ9 ±HMs6¼¼hë¼´ˆðœVÎóû +ÀuÔ;¾3ØÆ^¾T]|߀nAújø÷Ý=xƒª¹˜Y#¨X²•}ÇÁ.¤KÀõëñÌëî|l´”Gd ˜,¡PŽdØ#%&@Q|Nè¢p t9è÷¯øtä¼ÚÎÞéª:nœÍ›Z‰¾Þ6>6_òT6ÇWš„{ò¦>àýôx¹ 6¡¾aw†Ó„ŒQ ¬€c/}ï¬p÷}–¾½}õZˆuEImã‚éo¢8Ð^º™_|íwqÍ»Úk±ïñ=f4h][<^··Cœ« ˜Hî -ä¥@o1Ò$µ‹+劀3.êˆhÑœø¤à™ZˆùAap×Bs"€®‚ „8ñ87Ë´ +©ÊPtkÀrø‹½yý2ó_Rcå½:§VÝ‘Žz°öHs;ÊÔß“`û÷öb xµã¶€h47äQeϾæc(`;讹ObîíÇsÓÝ_v ôâé“ýGî'íAÏÿуÚ-÷F{Ú(ƒ w ŽÊý½ÐúljG*­4Gú\tÚënõ•R…“ôU»èàjCÏw„ ¼ýCð´ó#‹ô¾¼^Ë[¹Ä€H/Gdˆ0'Õÿ—²¿ë‰#Ûò½Q,-ù´uvÊÉMs³ÔReš;‹“Ò£¤ gR˜Øf)¨LˆMå³? —¾à3PäSB‡&—Ù¦Oùpaµåõ´ñݺ[:Ÿ ü-Îÿ÷3’Ä…]Õ#2ãe¾Ž9cÆü1_Wô‰Ø.Ñpß;iècPí"ý SG+lÕ.¿l·'•4ê….Q»à þw䬋ЃâM•‹üºrA]¹P;Öle[²‹Ès¿ƒp|¢~PU¹UŽy0špRÚEÁÄt+UúÉ×;›ýq¯ªTƒµF$ÄZÀfëxè×U©ÜKti^¹À®ÞPdΙ% tF »o¯™Tí¸á_xr~לë©OÎ(qIDË(ê0ä"“£nëþñçR@.á…̴݀§ª:eWÕu°¢#L¾ú¯Ð$Ë”ewkàVÙ&¤Ö ½jh›RŒýZ«W4_±EÝÅÖW.4´ré¦(G¦Û£"“”Õl4©¢NI‹ü¦,ºÄ”ûEK€lxØä8=õéQyìͲ¸« ÅÝÏâw–S¹#s~V±Ãö„>7g0mι“pîyž€‚ó=•܉ž -8ôÊDÍÇ=F¼QYæy!à_Tw<œït6[‹’õ‚’ʬú}þÛ‚4i¾8f÷Þd(éî6ÏE*ï4Œín²„"whfT9—?^_›Gà[âµÿl¥Ø§I‡¯ÀþDÊ e$©Keq´Ý’¾Æ,O]™_h°Ã€IbXAÎU)äƒ[<ïAuzr•‚¬Ë™2½<.¦…ôÄ:êB€RÍć[Î9#d\ moWuòý"¿Be¹÷µcOå=“ۃÉÀËååõëËwo<¤M$äÏè7ý¢E܈(´B{Øžºí¥ ›…¹hû2– õ'inâ$X¾VäϾ€ø¶–Ž­,­¬ƒùVôèsE"ó9I>à:Fó§¿ßzÿÞáÁžÔþƒI,_6 —°>7Ö1ÒõðÛ6*)ã>ûóqª|ó¤ÂÆwJ9§Â(„sí­dgŠO”šÅ•’<ëY’ný‰*€rÐ^‘Cãèäå##xšÐâ$_œY'ê¨?–Ienâ ÐOZS>Õ6®j¶£’NÈç2çmêšêOT• 'W.;I‚sǪ2Fšóí;º(DhTlm_ÝòA’!¥ ÚÄÓ\µMé¯tD[ª*]6¦ªeíµ¹Æºü3§Ö1ªA¯®\œUpþBœ£ù#­9BDsÎY¬•Ý&Ú®ÊZÑ»•º ÙOOÅþn»æœ•‡|U¦ûÍÝÅ"Þ©Þ¿*˜˜[HÃ¥N-» €|Š©eÑàAwûNþýa€°³-T*X#Á† ö~Ò“Í”ƒº!) z¥Ã·øŒ[p +’'B¡­Kâ„ ýþ 9Õ+¾A*eÛ½4Ô,õ@ºÊ×`%u3) ê¢nY 7åäìw -áuÖ]92ÄBEƒÔ0¼Í"˜ì‘/Æe–éý(!Âm@q§WBòÄ9COô ¹zûùTCÇ-ñ^ •—Í¾Ê q‰<°è=nfhºKo­÷‚ÿBÿð°±d …ƒ¯Mðu¤°œûNDJ4läX¯[Ε%pÓr«LÚe÷ã­;S2ôu"B[Z+”"Óñ«x²zì’ACCútô“1§*_ÙK GC©Š½7{Bÿuú®¢Cƒd¹èR|úÅÜ£èý÷WýÝ@ñŽùŽ\î”ëUñ|ª¡C”^¶ð¿f\œ£¸ø#5Oƒ ¢0«äÅÅ%ÞÌiGhôeÚfFV§™wP0þŸ>ä××oÐnßøÀÔwaÿmå@¡#ÓŽ>ñ à‚ž *Ðjè¬us&zÝÈogÿˆn}7²Ë•»üE¡½Ë±Ô}¹pÿ ¯˜åŽP0!0ŸK–Ëž9ˆž9 tžîåÃnåX€NŸ°«Ÿ-b`&¾hìÇÈŽ°úøñWÅ*Ž$Õï[ÌDúx}û×±O?#îÆ(ÜBؽò/þò»[ŽloO‹[SÇýúÿÊ2é †Çz%íö¨ðzCzGl|)Q€†´´¿ÛXéGÖ‚~=\œ²ŽÐI%ýb8= +ŒüWÅÄØ?–ùyL·lðþ·m.j÷ +?Õb]1ªHª”S­PÒU‡õ«båÞÊÅŠ´Š1÷}Fãø5dè+ŒzÔó¶@‹5wì ++š¸¬ñ90~k>l:ò%p ÈMª¬ìï“ð¥ÚªrÑT3¤è'pƒ }mH¤b§?*ÚžI•Ä Q¹ˆ/ÏMf|¢©r)Ê­UþB(ÚÍëÊEîø7Ç:c3.SÎ2–^D½ˆ½-Òô8ÎýÕ¿™€u´‹%Õ·ª“TÛ +OçkÊĨ (ÌÒlÇD)»jÎ g¶˜6çr\æÍZT.uh¡Û|,~b%%»¥å¸/¡‹ìpÒ à§þýáY!LQ¨.›A©T1¢Ê{¦š61¤TœKôûã4ó_ÝŒvß÷Ë–áðùàB¥J gãl¹¿,àDj´š¦¤»A ¥¨ë±*š8q&è?eºh[•º„E‹J)Ó•=ò½%7ô‰ÉMy+2ršddYny1 ß_š ûÿÊ 8ˆC}oÑc7â¼Ê˜óN£ýr¸~u&¼éàçòÄçß"Ë=ýc$^©Ê$zo¥AUsûu潊x¿iÀÃFcmCÀC=„/xÅ›øT\‚‘Ä:Ã$Ä=±ŽU·­ø·y>!•NÆ]¸DúŠ•nZ3`BöGžÓ:‰cá(]Îy}ß¹©7éF‡‡óF˜u4ÌWóaë<œŸ[°°±ÉÂGu-!Ê +ô{2f³÷øQÃ{›Rû¿%€\\.à;b)^ªŽ»M!†‘çÎtT$˜Ï$Î'¥Eœo«Æ3·¼“Û¢F_¢õ÷“ @PÅÊÌá¡tJ¯:f=±`0èOÃ= ú”x7#ü@ÑС½p¿,dH‹€nQä™gk ]H:ùíÏ>‡ü ‡´¿?ö6Pß(¼DŒëK¢…¸‰>8’Êoÿ +ϺpcoâÅn 0¦#¡öD€ô ˆmÜ:fŠ) v,ñB! ôÿð^óñÆëí¾»¾¾ôZ»Ò·•Ú¿±ô5K{{K÷éÿ4Æ'üç,îtV»ÝB2À¶tö½ÆÒk¾Ÿ ë/ÎGŒòÓ¯by¿s¯ñ'»“ÓóÃSZNo÷_"GÄ“gþ¡ÿ3Ì_‘ÍEtÆ?ÿ¦ Õêðíü–TuEóz¢£ eá*Ñ$í¥•q'4ùDëÊeÄâuO—JúK |¢â±U˜tœ:àbg?o±ÄÀ0lsvÌfô|Æ®šKX•¨Ëµªk’ñ-ᙪ4“J€ÜÕ²i¹8óóÑÝOtpäy†›ÑpŸ¨9¯?Qå“ê‹2—Êå°"ÁØlÿ8©'D,®’úÅÞ†Ô +)è[óDò:dÚmz“õ©24S®\¬] ûª‰kãMÕre,2Ú™s+FëÈýBœY (©øŒ{ä?Ñ0 \[IJ—1ð0i¯¦²Aj’›µêÅwŸ@™ˆêPUf[: gÄ”NR¬eúIì$J•LtãÂ"ȨÊv÷Jøï¦^Æ­H'¹Q*÷Ÿ÷eÕ¥…>6Hâ.ÅnxvFW™î¼yH…BW½ŠkxþA"lÜú]vht€3â,ŠW +C‘ó à8} +]’EvÛI €ñ%\™s[ê]gù•­jΡĒˆÓb gSïk³÷C¯Õò¸*çç:Ñü/zð0|Øè¬÷Z‹™‹]Œ—CYîõ\ÒëÄÅ\€ çÊó¬]ÿÍ\îüI”8GèR&È@µK7ÞÉTž›sþñå ¯Î¤HvžSrRéÁI¤i,©ÜÓTm·óý6±f€ñ¡±Ö—0#ôŸH®">Oõ¢·øÈôÕ­=묣˹}‹RgþHðËÁVûÎhZ³Žˆ.¢NîËWlïéâbÎûÒ_à¼~3¤Á.EúB]†¿pHxúâ1Øû‹4Q±'x(÷ONiÿg‚93ÝÙpÞúî SÛj =}ÌF¯×ª/ÂÕºu=_wßžŽt¶Ö…qÚsþ1§I^Q J“žE`½Ÿ>Ñ,€W9|É 3k2üC7ŸŒíb6ÒJCÑúor¤1‹Àözà™ÆœpE€ñ Û}üÈúI7™ùáÆ ò“_;)ûPš¶ vOBU!¡Ê úÞG÷èÿ¢ÿ ÃY§›{W<·„¹’‘'x&œŽ„ò§#r(^Z .xp~.1e~O*9vïD=)ÿÛþ¢ziÐÍÙžƒˆçæØÖk"Ü3 +ÙoˆÒ¬rHµ7ù„ä‘Ñ)ï’<…Ý»•Ký‰ÙäÕÙPZK]Ç'*éÂØo`êu½Rz•?q… Î5º«ÅŠ2`êPêëu['.÷Kó5pVíìÊ%4b}o"àP÷xCp….>¸„),‰{†ê©d5øÛOt‡Ot@/Œg½ÞÞÔ':EûÊz±$÷z 5³”ÌÐ%MÓ¦Í>6‹&Êu¾ë¨Â¥a‘}×… np5«êE±;I&:"Š&$Kx +²+-Óäª+Ú”Ük(m߇Ý`ˆ&\±p í*Fgº ûÿo.¨¾¡ÛŽŠ¦¦.€sèŒ$€šr]Xò½Y“Z)5‰^NÞÃ!aÌQF]VÀx©~Jà€Ü‡ï‹`‘Ê"BÑ(´d£^~]’]`T÷ë-*É»€‘¾-Îv’£…’:•˜žœŽ‡CE8ü_Œ™ šŸ$aHQwyFuQÝ–·Œ—˜—¯ÉT²<ÖGÃÛS‚TÐÍ8W}êjgpžÞ…2V¼LÚ»ð…§ÐðW R €9O$çìÎHÃ0<ÝuÏX–bS"Ûf¿h5iXF}hxWŠš¦Yseɬ;Ì”4ÕCo¹F‘‹S·éƒ%ÏÒ³U·nÓµ-‰Ùœ×ß› Èôx¬ÊVÔ.4(Öt›éöφÃÑñm/–`ôR·øF Õ4PñK>§‰¦ËªX_zèI€sóþè:C!?à¿îF ÔKHf;|ž”ëºà_S3o€Ø°’¶Ã*äYÔ.n¦H”£ŠO<ô«á±Š ÚÌy¹¿­r ú*¹é•Sœ§ù…ªÿ¢E˜ƒ’žk¯xþš•d¯ß¿¿~ëÕnPu¥³0«œq„ f·˜c WÁgwöéÀ¿J··/Áƒ;úôÈ-èî[FØÖ= 2 “ÿc/?TuŸ¸—½‡"bý+â +ëË'!Tè1€žå +g²µY(ür#&õäÉ 8cØŸ/¤\LÁ}"YBé›î±[â›7¯…ïwOO$Hy‹â/ÜíÝì}¹ÿüçìöRÔ§Ø•@;€‡jx^ÝŒ <<¬Ü2:=?9”âz*Ø?=Üc7¡½JèBcÏv1ØÂÿÿ¬ø%°‰õ­ð›q©ÝC*©|B·=uÔ‹·¥±¤O4êÅ øD£rQþ9ªEè¾þil5Œê ~‹¢E¹Ý¢B·2@”T ›ÒF?tϧ–*Q8¢^ܯº+ ±§ZD•[• +w&ÕþþD‰\LƧ–*qîïVœ«¦÷^ñKeû±´ã&| ÁC`ùfSÑnIÏ¥ÝÓˆ¿ã÷þ[ÆãG%1 öºYô³Å^,ìFWQT¶±°r=柛$¨‰YEv¹Ҳ£ +ñ(2ÝQZQ/Ær;U¹Ôol¢ÿ“)«ÞÿGÜg\XÉØu‰.IâÁît•µ*­I À†¯©*ýß‹ªZ°"•ZRÉâ²Û xú]b6¡LŠíPY>ߪ”ÓðDqúE¥<ø‘¨ô.LŽ@hTí·ë¶qÁPÜD®§ôr’7*9– DSËF“é*1dzîQÝ?–ã·¿(ãÉ–Þ“€«”ër‡C‡@Än»€¢€ìC<'䛩‹­]¨¤ÓÜqµFÎ)²!íâÊfJâóüDiסs\lç 6‡<ÍÝk?¡û^ER@êxê&KÆZ¾³Ò°‘5{}¤;<ñ˜09Êù]ç9/EÉQ¶wÛiͱ¬»(ÆG +çÖåe%¿’ãȲäÚ|ó‘**yP¦GWÿùJò‹ßØ~Ù³€«š’0MuÕÎzê·’°½°ÐXZ.Œüw‰¯Úì}+ V¸b¥¨ãW +)H¹‰°E¥j—‘_rÝ&¢Ï8?çÕ« çªU»MqŽûx_dã_9„ñ_&CƒðÈãÌu¦ïX@&ýd{þ[Û€ ÿu'ä/LÔ…1ùº3R +¼ÅC`Pjû ãõÁtæàùò‘Î|ÙÞäÞèh´ÇX§­ÞH¨L›ý ªÓ6`]‚‡Ôû†,ÌŠ•ørHØ(°ˆ 70CDH5º—…‡ô“ ¹Óù†6™ öë]¼ЇÌ‹¤€µ€™ùǼ¿×o..v¯œ<ø•»‘«÷ÑáÁçúÿü (Ïévµá¦‚n/ëfNÖ` ÁÁ^)ا9@ðšÒ/ì÷<=þ̤˜ÇHÏm6ÃC˜`ì¿P^1y{ùEvšÿïµðù8JØ}¤¢ç¢JIT)Ö'ª³ë)l©ûå 3à=FÏsN¥—íëq#¡atõ·¿2=HE]½ÛìO +º¹õ#¡Ì9£+ƲÛuþâ‡òÊC~$ìË •‹¿ ”8¡;­ÖãÇñíZøÒ8€TŠî!ÏßÞŒ®b询š¬)èM *âL^ <¹ÅŠº>ÉrDµªOt|fÌ@ƒÝu»¿HNB áãpT!¢~µÝ’¾ »P¨%JœUŒ'Ø¿åÀ`äïGÿ­º ‘¾7*Kèâ£Ð/$, 0Œ5ò­9•åJÆGn="ÃÉxÒAcú$Ó•­ß÷¾/ªŠ6=éô0F[:®Ò¤c(]гAûàX€Ê™ç6hX[ßQauÓÿTC€ÝïîˆQ.Õ¸Aø1ÙMä7LÒMç’Dë"Œ—z/¼Ó5眢꫸˜ó¢ín:Õä5ç½Ê.~Œ_&á…OîW‚y™ëìøþsÝ þÒ}}@ã£ôbkò‚j0S(Šj^#ìdH¾îûÂΦpËÜÿ|ô–=vžËJ÷¨è +HbƯ¬ÔøO$ÙÇ• ™AH¤ÑW pÄŠ¸#7Û–Ÿ,6$w˜Ò`7pP7À! ršlŒDcy@.Ds™ÂªÞ³,Ð;¶ãc9@åŸiä§(ß•09²ùúrÿÿDÿ׃$›½ú;쀬(ÜÙ÷˜ˆ0 q‚)ŠN¢þòÇTAήõRG­ùgĨ8uXà ›At· àÎ8€Tˆ~KuÁëQ©P]ùQ qòm1hm¥Yñ¬âµ‹HÅ[R,yàÇbx¤šj@‡‚°!.°óSà³eto’ªêÐýÍÔ;CZFY™;E„+eÕmÕ€ªÀÚIþâûZUöjá"U…;E+3#¢[—pNåâ¯Ï)mºã¯psTžÑê =ú¶‘NNlëÊŬëªM€àC,DTƒeùMªEW—T3/T×zÐU¿³˜àiF4,,xåõÆjd Õ‰£P Y+ñ€>ª”¥w­õ˜¢XTõ_©fëÅŠrT.cñX'‹Sï*Fûe»ð´ŒÔô–,ö0 +pE¢ h§ o¡Ê=€ª”¹b©I§Jêiâž¿F‚ðŸÃÃPçTÝì4ºúƒu€jˆ-â%x0FMJKÿ§2ŽÑN¢t'SVúª¤ûŠnÊ4 +2ÐÕ8†tº ôRZ"y¾ZgÛï¿¢õž.á4ËÝÅJÓwTS•gå¾àCl›sXþ8](ùð›HiØ©Úõðx;Ÿp.@Š›~=zd <ÁÒ0†.+ð$àg²0¼eþ&‹XKh5Ü%µ£\‡ÌÍ}Ã:Oi ¢iÙ{,5øØ+×ÅõþF‘Ô/n§v1 Î_$Î-ý@zU±ÂVÓ‘çf]<ª~¡ [šq¡y W’ç°är#²<¹Å[K²D1*Û»£Íµ³Ýþ/‰µÑYßd/€0¡n”³s¾Õ—Y7l ÿuï0…ª/„HŰÜkuîSÍè ¿[\¸Qçcq>ìï 1Ʋù6Bø +%¸ù±8Œˆ¦]¼0?¼c«YÖfó;/}ë&«ýÿðŽ8"ëÆV£ ž@é'iæPÕë‚è‚ÜOÀ(à« d@@n¹÷~ÂVZîõ‹GA¹.¬ŒpŠ=D@·è-c„K¶Õý?'âšò–¤;–?±)ÔÇ<²@÷ +ðïJ0äĈ<Ðö“™uÀŸÅ“éø !à=ò1ðÍõë×§#òÔó‡òé‹ýÿÿ‹à¿ˆ^y®à²>Eê𮊹GZÓ?Ø+¶õ•zÆLÿí-áW¿\V;BÿŽ¢I- w€ÏÚ¦ÇXÞ¸—¢tÅ×í/L&Ÿ(›,¤Ó_¡ -¼ ÝÞ3jÚÉô-»¿OŸ§¿;ª?®DÆ4|h4h•Ò‹€vãÕI9¤S—±mªlR}3!é{Ì2‹׊–,ª+* ßéYˆØÖ]T9Ã㹑… Ȉ×à«41 `‰e̬J?²%îå[Uʪž´œÂ ‰CyŠ!MR8Á¡´ Ÿœ1wÈ^ ¢³Øq…»mt¤³øª*§Xmœ°`·,¤”¸åéÅ„ó\5ypNÖ#ØÈzÄV¾‚>ƒ]d: 'w¸P`y¼â²r¯xÊs2}G_"tE @çöe©Œ” +ZDâ™òå†c+Kk ¤ÆT* yëóKðÓʨ4üîñ½Jè’mqEd™Àhõ)×U\œ%*øwáØ¬<õ>— ¹œK"P¶¿ÛÅ8o^2ßQà³i±C%^–ŠI$‘¾›Þ ôÆË4¨\ÕynJ¹bKNñGúF1m÷âe§`õà„ÿð^îçXQЫv £Ÿ‰eÁ9oÏœ# Šö¶4âmÊG´\Ýb¤×“eÏ\š;ú0†;* ­–Ê#o‘w¹sfæf>|È{¡`y­·‘±Ã„²(@âms3Š "—3P§`üÔë9›¬c-¾&ruƒ ÃmR”ƒ˜d¬—¬OC2Wy‡4,ržÃ¶;òªÇzÑòצ¯ë6×ë’î u§z÷E¬(I“½Ì5ÆôèÀ9z"Ò&‹3‹7l1MPCrà;¸21@/H,×zŶÞœÓ+Qó'ãnÕ¿çûÕv»<ˆ”E5TçÆWH@ôe¢ãXÖ—£ù|q-ý_úì»wר)ÕßïÙ7ˆ6šP¼‰†MðÓO>c|êfq‹?&ßlDQ—>ÿ)úïiMÀuj!°¤ ÿð˜ækä2rPÒåuÅȱ#:è`˜ Í•בéÄœ~w*è©ÖøÑï½K1.S¢!RF²õWN®þnþGúÀI†|øpsM‰¤&†¼f2à99Š€:ëøÞK¿ÓÿOéãVËkK[Òn5Ò¸AVn²o»?€¹†Ûƒ¿0–Ó­ƒí7Aê#PýC+­þ5ü#WÜ$ÌÝ?Àeí^òg½ù½¿™ÚÒ÷çŒ;Ö—‘†Dñv룩ÈÖßf&Öl¤YE?}ؘÕTKT¨ùÑ©"¨ò&}yT +TTàEU¾¢b:2HÞÒ]QŽº-¯K(F\·ˆ¾]¾B_0†9*`!b6¸åB§‹+ó#¶¢í¢×û±?fn“*—´P|5ÜŠòÂÃëÉ3©\–äE@ÿgÕæ¦±@"•Éq¶¸Ê.äª`¨v%xàõÙ¹oÝUIaµW•Jî=éäZ–ªSk‹»_¨ »Ã_Xþ@ŠúÀ³Ð&„Kyôƒ®DQV£ÓUy® +Úã¸$¹ U›pQ|‹&+*Ö³æçæ%¾„þÓ›ª«£ì•ÆïP¨ÿÑ 0“0þ«G½®#iÊô">ð^í¿:ŠUVļOwffU#–‚P·²‘ÞK W;²p{4eYÿÑ [<*S~Ó¡Ëe»ouQÕŽlØ«Jvugo%Æ™PÝãÈt½õ5•»úÏt`èR ÷Çÿ'¢.´Ã~•E(ô‰½ò*릙¦ ‡I,'¿c @°_TO^\Š‹ôè*>Ĥ8žB ,w²ŽgèlµŽT£<õ¬ÔÉ d¼Ï˜™™[b À"MYLˆ¸ùt¹œ²R6érµÕÎcÓ¦‰@Yç¼”íCs.>˪…<ªüv›‰Lô)£eæ4³‘¥\ *‡ýò8— ×ñ=ï$À­ÛŠRÁÕç¿=Úì,±€E' ± -›^ÚHDÚÜ)P->šC@÷—ÂÅçË'DÝQœ·3¸„EÅëQx½lÝé½n§¿éIŸ]2a›8'm©"@Vb€,í2WÓæfIÃhÔŠÁˆXõŒª’Q¶Ø'Y?gÉ›¯5,¼v; *ƨèB Ab7Gè •#›S,|í ¿U Wƒ¦HVÓB/×´_¬tÇæ/¦4“ÃÖèëÔÐÎõ½@ËJU"ôzËBªÒ¨þY Ð˪m0¼‘Þ”âß$Ô¾HÉúï&âú$žvʬ=BS¿2-?Ktù_^o}Ɔ+n`=-Á™ê«Å;a ŒæÍî‰d]¥U%N]¨¤Š[ÕòÖ¯ñ|›ˆºÕ¨¾*™Õ Þ‘íEo"ë²Û:Ù¥é;؃ó³ÃXáCÅ_‰ ÎKD±¦{qîôF;ä1„Œ_Qhª+Ì9¢´ +yâ|ÂXdJ ¯ÊJYVÉá¿%€¨BLøàÁÂòz/G ‹&ryöM€>Òà[äQºÂa9î¶s Â2Ry +žÍ?TÂy¿ÿc乄ôƒ½ Ý‹Oe"7ªgrÂs…ü‡¥nFCáèñHß(‹u)Ó±L œ¨òнNŠuK­Þ `¡±¼è~¿¡ +ÁF>“Ÿ^o¸8“ö>ìHV§d'J.”¿ÈsÖvlcdºle*nH ^@ÆCxx#pxR$ŒËvYÉ +f±²ú”~—Œó_¦êäTŠª¤gu¹K¶–e_ w‚7Aó˜ 2‚OæÂ’¨Ãਵãtxà›„âÀ¬[äÝ.ïuƒi,Í+3ð—áÑ" lT{_ðܸÃ?aél¥ó_o~4w;ÀÌAˆ$¬Œ$ Ц ?ý©HRùÝ>àpþÁXBóæ˜XJÈJ>áÊXnH& ÌdE«þ4ŠÜ|¸¾y祢 àòòüõ¹›TŒ'Êûz?Õú¿è·ø¯ëãÇ‚i}fÑÜ&'ºø[àVåH59cÙÒL¹Ï£ËßCþ2âXí°ª¯>YÇñÝJ÷ˆbv/\tQ«øoN@‚*K(®1SJÿ+\ˆi Ž(¸²ô·i +$òMUŽøõÚåÄúö†ÏÚ!8š]3éD#e€îûRÑ&5wò6ö:3æšp¤Ú†–bìÅïnÙÊ<|ýåî-…#s5iÈ*pôdzmC¯ ;ýR?€å#‘€±·S21îlöX!Eìì /·ªŠÎüÈ-mÀò”õF ›Ô.¬-°ûŠª¦‰àV]¨¨VW%`ø>2[Wq¡JÕÏ~&ß(÷õœén)$²<¼Áe©L¡@Ùë(Ic«„¡®šÝ-+êb×ÛùF•/v”inPEšF0‘ò«ºRÕ)­ª4‘sšYÚêÿ $…lZ`ˆßýKÉGÛζG£ÑÛ³êh¬BVV{ªÿ<Ÿ§cý÷«òìXÑÈ®ªþ6FGû/+¤ÕÁWÇö5ºR åp(?>‹ÒWU·¹Åö2ü$5T%kÏÅ: <ü ôؼm0(ú£ÑVŠà`d¾,š¦ +d£à+òìh4úål$«}q¾¿_þçÙ+s~lÎÅòð°<«ªcì«òªl··%b(H¢çŠeŸùpû˜óq´Ÿ•ÅAÞ~.6ñwçbå@å2`ýà%€j€eé}Äýj\öÚ ËuzoÏT,Ÿ²pÐ7zÍÓüÔ~þ¸¨öʼnV"ù6¯Ž_UÿKñ‹óý¡¤ †2Š;Þ‰rl,é5Ÿæ|¬TéNœëUšóÑ_÷ç»EKÒÂx ·r€üHƒsgž”¾=ú¹åž²ôìíˆU`‡‘œP}!4N*Ï1 +Uµ")«*–g”0Úåå¥%ê}¿”kIñ’®TÖUÝØ½ +þ`îÑb§·±¾‰âß+„mú>¶„Ìýjtö£”ƒm½ |0*_ŽJq~0¤p$ÎÅ—ªÍJå„'Öt¯Ê¼‹óÊ…š„Öíp„Ñ)Íý´Wº¯ZtÈ +rìeÃ΀`Úõ{á¿·tŸ?MÞ ÀjÚÃâ¦nD?a#Å:-€žÔpÑÅí×-ýFîÐݱDeß´ºs 5@.ÃmIàã'A¼Å„x–Y:";Š‹g +˜]pŸ`iü«˜F¬v)i„d“F6Â@j €OüÒ>!±G<é/ô‡úÿ^ÿ›ë÷﮽ÿ]\\z ÃƒÃƒ½SÆå…¾ÖþÏÈNð/)À:;-6ðé´ „ÑnÞÍ=&@g €*ßW¥óƒ´;_uc‚cK@úrïŠÐ}„@[ª>=Ö‡]ÇefšÔñѸ5=ËËÑŽJù>AYS¥P¹¨ªU=(é_…œ:Íš9R?¿­ +º¥ ¨Þ‰xô9!(›ëúèѾtÖŸ_Gª\ªýXgýÕ1ƒºŽÜ°«ªÑw9ô¤«ýrtÜm¢{©æ£-±ªÎäs¨ùŸª\ «c\1Z§ÕîFr¦ï•T‰sš&ý‰`´{‡sÕèã³RêË®êø$Õª`(â…MË*ŒªŸÅ9uQ÷‹Ñ8Z‰qªŠ#TXòöâÕÍŽk½µ;ßY^^˜C“^C#Tçª+-×€šB™nÚS&Ja¢B×K ßÍcCØUÍ–4ŽŒ ;]ƒé¨a‚™é~Uk0®Fç"Ry] ™”qG@ r ‰*­’qÕkfr¸!eê)RËÞòò­Ã› ?F7ôŠnÙRqù +wà_lü.‰Ý²oåà/_J~ +å‰ú…)Õ‘®/å쀊—:ù'¿áÑJ®¬*+IÎ3¤!Ÿÿ’USDÊ‹·ªšßTùV3{žu¹„ð(¬ Ë9 x б¿ÕÛ²ÝV7/åBzèŠ` ’¤2’wx2Ÿã~¢L ªUýîËñ`‹¶ƒsÅ ÀUN~ä%°œ“[0çå‰3~ÔÞÃ/%}ì–»*À°œ«\ØíËÑØœUÛ[mº®ÔÎ. çI­?ÀÁîvž¹@uK.Ý£T»Ûë´W;¹×m=UeÁ»\JkÀÜ7š™{óSGÒ£¥àöä- -@:A¬9•û/_:Óõç%ùE•£<+»FsqOI,€s#»ýü7qþvt0È›íçYòI7l+Ç‹ë‹u¥?e:"ï ïö$l—ežµ¶Hš¸±TsPG £Š%Kch<~R b7@¦R9>n0—r*¡]9%Þ†ªõHz½Æ£F«Ócó¯qéfK½HÕUr&–”¸cå¹òÕˆ”éÊl8g”¶rñC%Æ×‚·¡×-*Å9s¸ÅùV›Ž¥†mâ1ôášs$…¯‘Ç›}‰?΀u<ðâ’A€¢·i¡?;êø Õ˜ã†¥|@E¯ŽƒùŒº2X¹§ngw€Q>`g6²óõ Á§‰y} +É øçª8d¸6KÚàŽ@$ˆžXH’Exâ6g>¢ãýÈHC§@>%¼xr ^Ð÷£ÁqÛJMwß¿›DÞÝ0ð;¿A^b.àåÅëóÓmÿÊÚ _'_ïø"þG€Ì[¬ÆŠ_‹åSô9¡ÔÛ€¾úÎ*üÝJ›nøTÝ6àøT«Þ×Gç%ã¾=Ë|Z¸o@|÷S”.ª/Õ=*“‚~n5¿›•²°¸8»8ûhöQ¢™G ÿ«iv±ÙúîÏ­Uù[|\ûUúÚzÅf@7\ïÒó'OòLl'Îùa(·@ÿk6⿸®œ² +m+Ѽò%úbÿÂÿÇX³âÀñhûñÌ Á¬#¨a…D†2|oÕcyH0ñöƒ%E‚ª‰(Àþ ÏÇÌÌDὟ\ +ãÎׄVÓ§­Û?GQ½%ûôÏr諨µòÝ¿Lì§m ˜»t^mþ¹qWÆúÈ7—D5Sú +Z­ì»?«n‘K¹æûuXT +µ{…Ê÷¼*³q®zN®¾ &&4¥ÈQ¿a1+Çß}÷ÕÄâw:’ÓlrÍ¡YŽËas±ùÝãïT¥ÞGfÏ[‹ÿÏ–^ͬ*˜TÕêÓâb8¥n!Ë•8þŒiÓgŒGؾ®šs T[˯ø6ÎÀt‹eŠò|*K’­ªô©LŸäº¨Ýšm ×…‰_X47;·8; âê4r@¸’½>‡ Œzý=²5ȳ­|+G2Ëž.ÿød1…_‚²€àåƒäþ]2Àßßß¼¿A¸¾fÊ$€ðÿòüôòÔí)4®¦U¿L†Úûðh– ì³€PºŒë|øÀŠg£?íq« 7ù‹,Ðõ¯‹Ò§ßé¨dJ°ˆ"¼¥;ã(ý3.i_¦ø¶(ƒI±¤Ð£ «ØÙ -pÉÓ'(¥OçøîÄ]fd’`x€¸ré‚_­ºèË»L“Ÿ®tTéÜžjqìÛ­?"H}eþPuù,ÂHpù—?Ë©?D¤z;M=Æ +u±Ý’EלW¥#GLל®zÐEb\¾eÇ'®Ü% ݵ¤ˆ+ àW‹ aöfåJÜvZ¸­¶fó\îâÄ îe¬ßC4ÏÄy'/þ,KÆoˆiIq”çN¶âØ"uΘä{¹ã¢´µþv +¸ç6X¹RÖùª(]ºyÙ\‘mg ×¥³ß_«ƒªKºSååèÍøêíÛ«7W¢jtT]½¹‰vûBÐ =:˜ÐYˆ"´Éw·ÕèêßNFcÚóËñ¸uWÚ]¹x—×Ay2OF—ãªúIÞìè­ø« +Æó©Hþy¹K‹’è¸::ûÛÕ߯£ÑqpŽã—ã­•\)¦õ­ªÎ®hü:(OIìÕxüöíƯFGÊ·çæ\§Q5–/"£‘RbÎ_º8Ô7G¾Ða­„¼Èé™è4U@ž±Ôݳ§§ŒþñNo]/t•ææŒt,<éÆÅ¡M#’­öaæøíÕÛñ1£-©8‹ó\œ+w®ªCeÔú\ªÁ˜\¸ºúùíԜĹ’\î(Ïç’èa¯”åc²iW¯Êíÿ’-ŠÁ®rᯗ'ÕÐ>8¹Uy{%£QÇz]]ëÓEžï®ÆÕñ¸ÜF´ŠR;×`ä +3V:›½MqͨY¶Ü}©l)«|%ÛVNlÖÕê+WfÐÇSŽÎ*¥g +­?]NÊIŒ£SqÞÞ³JìɸRáÚ›pnGò[]ÉPòŽ8H¼§ H<Ÿ @•—z§Õ¹8÷;ûÉÓWHðÏ…éc ¼¸|à À7ï%û=Ñõ1@àþ£¡ë'$”‘»ìŸP@ôõh~PÎ33ýxNmòŸÐñ…ÁŒË A0'ß"5 vމ2×ݰ 7Œ´7!>} +áw°À¼Aœàä𓤉ZÙi€ßBAÄ…”ÔÓà°äD"ÐÉ8¹‘Ñ?ØÁ7Ê$ôÿwׯ¯i9¹x}qrá>?›+ ¾.íÂ÷áŒA?f.5ôÙ|Ñ@o¾ (ñÇA`ºÃ2úÛ"„‡UZTÙ¦>€DŸõ$ €zæ¿«Æýêzën{VY,õŒôqê+ºÐ—\•§*¸úÜû¥>S°´“Ó*|À`(*ù*„ˆaU+UE/ÿMEÞ£>’¾(ÜÓÇ©¯€úG”LUí”/½±`9ôW§ÊE©réf-›G¯l_.¯Æ¯\+RÕr¼[õèT(¹}¬˜‹]Ã+S‰_ò‰ÊϰºÔwŠyYè*ԣݞDäÓq;F õÏòmj‘8a–CÞÃEÖ|¼Jw‡·“õžå/ø¼éVdÌRQù“/USæ½=¶™O!Ø”+1‹~Uùo£âE™5ÛÏt¿ïnò +¢×èñæ:½åµ^££ìQ +UÂ?¾çPÞTlz£r4¤!Ndfï™ý…œ™s/ŒLk!E^8N¦³¶X^Èß¹òüˆ,…;á$)EÊPJÿ¹Þ¢÷Ö-‹ÑÎp¤×OÝÎØ¨]Õ\ª_‹öjo—ÊþN±SõsRUÊx¡ +ÄÚ‘ÕË”;2*ò§YvïÏê¬P7ÌÌìü‚ýýk. šà tï¿À¶bÚç¨F!?±¢£rr_/F÷ËÁµsá©øuŀƢ8 Ë}Ðý´Ý«Ž¢ lã «]!ÛÌHÏ·„T”oËLÈ¿;¨vR úÆ>„â§b¯Èrq®<ßg0œ8¯Ì9åfä¬LçÜÃ9y\•;ƒ]ůCï\hÎEܳf@5úÿ޲n]ÄI9éâ7îĵ¨˜#ûÌëázÜ»«’ù4€µsTu,,oî -¾ÈÛ-FP^êâ2¾ï€*3Y«rú$?-FÁÐ6¤ÿNõ†¼‘ ¾v½4ç¹2Uæd¿·ÚƒŸƒs‹xÜîÚ×$;7_x^¥Ò>ŒÆ´5DáÛ%™/<9>} *"éEŽ07³À8@Ûµõ5…›ž†\S¯Ø´ºÌÏwe+¢_Ë}["øôCÕ";EšfºS¾¬Ž¯.÷ØãÉïø…Çñ%ßÉæ4Yø-¨ÀTWÅ–„¨ÝrWYp[\^Ü&ôKd˜ÿ +ÛÛúK`ÇXv›¿¼xíQï ûžï. @À÷‰p´i 76J*`†½`˜}`¨œ€ÊÂX¡%æ~2T'ÖÁàWokü +- \è+è—#ïÇ+}ùrA÷¾D 7õË»;ó€lp„¨A—,)$… +/ÄbíF'Yðl+¯Y$ A·°¯?«2OÐ"ÞÜ ÒŽ|#ÁàƒÌßÿ#²æÃFKꇼtýæ’Í€ªCfU Xy5>æé…Tùûù\ÿO=kë?8™´ˆìGÆ ôûWŒ’Ñ®JS€FZX×U9æM5I|¹A1à¡Ê=3®ù¥bt1ˆK_8·eìâë*º©ø/mööIëfà’«DéÔÇÿ9UYvÊš^$ú¼ì:M¾ím”V©E€‘Â$^}D^KÏ Œ; gú›ÃàD›“@}Ž>ø¯l¤"KøæÍ."£¡D GÑéy×ÌïK^,»¬¹&S•Ræa\)ic Ɔ‰D[Mf‰FM[QEÇ4¼|;$Ó™ oä°p›{~÷ ÓoÔ±AûB'¦ŽIofž'fν œ+àà\÷ûÒF‹b™D ?1;0(„5S2"ÝõË£ƒv·Þ~´Ó?(8ér‡ÊâqG‚¢ß[ ÿ±ÀÃofÄv€*˜ýº°åÙj 0Sö+ÿ*†åk‚³jÐÌ%=¥dP?±Àíz™×t K;»¢¿?Ø0zÿà‘?Å€±J×?]¾![¤þó—À @FžŸzå_–ãlïýEŸ¼²÷kô5ûOˆ÷áÿ¤@ßX«ñ´Ñ €ƒgÄ¡‰çLÁpO⣀?æÿÌ3-«Ooû¦#¦ÇEæ¾>À‡¬ŸËèï±°$”3e³EU`&™Y&óØ%KÏv!(²PóÌEÑZ-õ‰EPÑ~\SÚ‚ƒ9¶BÅg17¹ÓZÌ,ð]xö>º©oT¼íäÞ—<-Þ‘BÅ' »KEÕjõ˜íl’Á;iÒë4õŠÖâ‹ÎÚrKðæ={œÍŒ‘-3czÙ ùéuØ…ÞŬ=z\?5Á†—÷Lc2©ÇÍ¢®ªPÖ×–¤` àB¼)Ii,L“R¾YŒ²ÅÞÑÈ 'nê„Ú"RA&Vì6(ÓÈРµZ‚©µ‘“Íþ)Ï•é›ûd¹(Éf˜(s½w âFÆ<›ƈjVcK£É\@¥Œóšg*øßü:.‹µæ_ÿ¥Ý7TËÓãÌŠ=&Æœt€1a‚tLÆSn%@XëæÔ¸£‹pRaKªÜYŒU}%ÉÄ9p§J²©«þ²›ì¾Y\NYŠ9êsñiA¥&†}[xag­À.I$£Ðžo± åQœ{S'snðvÞ⬸´ˆH*l +æ¼lwi?b îç,œž¦ =/KAƒbT.ªEæ’Púð_ÔÃùeJ”ÂÓOß´×ßõû£ûÌM +í +˜÷%°’’G Dx¹e½ß™ú„¸ úÌ®Úmpæ“ĀͺPF†k€kÍxD£«>p³FDe«ÙcÃ&OBklŽ–’l]|B†óõÎãź>œ¦Ç¹˜Õ«à˜:G{ûPo(nò³=ÑZñlVU­ëAfí3^”ŠÌûÀävgu±7ú,÷”¨t£ä‹Y½5Êo©(⥆]¶>'UgÊ7²2½ÄNAçEŠKÔ†t^®B|Ù(6­Þ&óÈ×ÎÒœ +øC/¤ú”l°Ði 4‘0‡ÛY¯žÞG*„ÅÏÿ‚ ,¡ªÍ·Yñ`D;² 6èÀJPÈÎvvËa5ÌW•{ÞiGŠxmmEž¾Ñ-ôB;åN5håU?ÕèŠ)Ù(⺅©ŸFy+ß—†`ªô‰×„&÷aÈ,Ï«½öóª‚áe-¹LD’$`°28J(ÊKÒP‹FÝ/Y¹&/~·[ ú;U! ,„'&»Aý”– ¾(þú« +*™•/LB-%òÛÆ·Q&%äÑO#Q¯£2°Ép¹¬[”­É¶ +ìÌ-hÿáV0ñ.GÕhw¥ïÐrA@dzpNR]ük%H“.Yõê8eÜg˜ë#nHí¨hgäµ tƒd•¼*ÁÉ4¤#™.->R-8×aæ +µØ®*$j`½¬võ%ý*'–Tœ] \¬³J`¯ØÁÝ‹IØŠZoB髺mwBw8q«öë¦~ae™µò—µ…d³x_$á÷$€Á_¾rl£eyã’o|¯<<±#«Ú¾Žå€Yõ–ðÑìiÿ*2 pX²°?ˆ)ìuu¢¹Ðމxº»aÝ}ˆöuÝËÙ'ÌQ®1¦ 2*ÛBF„ITBß¡§ ±%CÈ£ÎøÌñD°8_qc<ÁÍà?þe„LÄ+D¬ä@žnè P ¸Qæ„V\asÞø»”I¢÷ïn$|þ¿~ýæòâôäâôð¤deþíG£æ‚ÕWHÂr|1Öot +üO#˜U®J ›oK¢Žv ‹Ôúÿ-î¸`q. "ÆÈèŸWWÿ™wFBDãrÇ¿¾c óúŠ“0ã(>§„Â*ð­Þ²¸ñÝðêõ¾kÄa‡ýߦ ¥Xnj` +*:‹‹É`Êüiç)3 AÂÝ£©X\ìí'èC WpÎëëúÊXJ}#¡·üêû ö€|Iúv|KkB¢EßY«JŽ×p鄞֠¼¬`=îíU]|+ž¬ÄÚý";Öûþõæ5 +?/Ym0s¨ÆèRøÅ™r£!^$,¥ˆtqÈç\n$¬×í.IE!ÑÅK?p Ækî'bFºôzO‘3¼?ŸþÖÓTF–¢ðá!KI«‹FÔÊj7[Ld—:` r2.dã~‹•¤ÔÀF¬CàG¤,< +*èÙºûó÷aÈ¿{üa@hÂEµå‹1 ¶“íõ±”i—þãý­LN„°F_Z A%‘Nú¥~þD“¥ØFƒ•mv¶Ld3ÕͲ¶Ô ÉÕøN™‹”}é(Wž õ·ð`Ú¿Ì«b%+Ä9ìÔTkÒI ‚ÑãB¨âVô¤çǤØàT•ìûÏ©°Ís? ]¾Xd@3¶Xø>­f-î:‹sŠ %Æ/O:o–a©nxø á€^‘uzÝ2oµPï |ú÷SÆb¢ËnYîGe6ð +K^J*Ÿp[/¡ñÑcéUM2=ŒUå*ã§{[DѪRåívZž‘n6PKknIOäÈz]!ÿœ*©ÑN¥œÏ@e_¥ß^ú£¢Õã½+'$È Ã뀊$Ðb„².·“R@§~Þöp¤ z8çr+/@6dˆQ^Öû–Ñš¥’"JW"_!6ÿí¹‹”’´1ž Æ../ÙÜþÚm‚;æ « öZuBà2þã×Ô×®/ô9ytƒ>þ ó 0@m7v†‘Ìüh$Ž h–×]QåuÇ€(wqXÖ°”ÁÜA‚ˆ1+²$‡pO3î=]ØÖQÊ܇Û/Üòÿ1šÿY(²Vy À›ëˋג›NO½ºÒÁÀ#+%UÒ£ýî%×cTäl¢ÁwC]×0Õ†è¦ñÔšNé¹ÕùW·¸@”Züg €¤´E  ;= Pw·Õ¬°?(Z\ñ>|8}~ð«Ip%-oYƒÓŠð©>ß ¥¡/!½@«ÿìz£1Á3;‚žÆî0½Æì"üÚ OS⑬.ëg,ì#¡ƒ€Fk˜ƒ)_׋ÎìÓrM²{MwÔw»ì¦ÇšzÒè‹Ä§èV~ È +ÍuBJüì#¡ÚåYª2Íϳˆ_èK¹½Ž å™Òó¡^g¶!Õ˜ôX$ïLª…gTpæÈè«ô­é}£Ÿ´³ŠìsðvñuzM»YÅêÑp.°ÂÔê%ˆÏ³@W %q/Q™-º-²ÓjüszwùoCâ‘hª:ìa£#TÚHJ(‹V«(þSj¿3ׄLP–+Ù¦Î%ª˜_qN"”wD>pš¢rÐnTdq±‡>±qòŠFÇKU¬®æ{²P*åœäqª7/!¸!÷^Ycñ€—¯F¹wQvSغ»(7XÇsçªlåãbsïVU‚¾Y¹5nc³÷½±yS‘p ÙÛQ™ËÚƒ‘³ S8WQØþ¬láb ”"/êàû_PbîîñŠ%g¾@,Z+òí©èâ2¶µ÷ŠÀ—oÞI@Àóýt+0w—€ÀR +tÇž[?gÔ=+L¦)óz†€Ý£­cŠê}K`eõÞþì†0qÆþ}˜Ñ + ¹A^Å Š +è&x~² ¥P×YŽñïuÌ*¢ª>‚ƒ5B‰â•…ð9Z'ˆKúþn>¾ݼÿðþk+«ÎÏÏYõçTR‹ÿœ*;Oª¯®\úTlqq gmgÒ /O Ä70œ!&žƒ¢@4ià,³UÖ÷§]‰G"_M`¿H<<|8¿ “[‚#n¡ÏC±ƒQѧòžâ¢&Œèa“ìiÿ¢;0ºÔXoìjrN‘½½ÆnÐ_'¬O ã1¾ÆEÁ$P l† @E#wÓº~½ae`á<Ýê`°UrTõöøUÈ‹“õ|‘;ô~…ÿ+úzò<ýŠ0Â,>´x1úÇ=<("nB(€Õ[ Ð÷(–0&š¸ +ù%•(¤’íÑÿ¸ù 4ÐÂ"ÀØ2™%”gÞððôòõ›K=½~$)®_&¾•ÔfVÿ¨Øt£Ó€–ŠWjÿwM Œ[`&=eTT·Hu@túrÏÚ¾Þäïn @Š)Hñ'z €ç8?˜‰ÚýsZVÕnH_`XWÔäñ\ã°E€>7GUž:¯§Éµ>dhÌ5¤?¢9±ñmjT ’ÚK«1¡ -‘Gp ã>Vœ 9† +J­gö’p$nS4œs‘΄ ’;ù αât +¬Ú£ÖZxÜ€S;Õ×p姈<â[š›Û®7ô—âŽþÛ!~òÔX˜™[ŸwÆê™eÖ±Šòârò0«R,Ëè·øH‰ŽÌ}<Éã¹…o…ºóè3±%fâV°«jNtËo"¡³³1¹†OË.„ï6LDŽAÌÎK´IYÚéÍÍ1_qAïÀûÁ­Kº‹“Ó‘è6ZåùkÊLÿpNRuúü˜*~ï¸%Pm4•ž~¦Z5º@y9¥#ÀÏÿYdo=‘tG$Ez8”%ÐЕ´Q ?ݘùJ—‘¦*® ©ÍU©Fe) fŸ >¡»]å Õ}é9 2b%@Ó‚¦Ó•ÿ^fcsNÒkÎñáÛÑDt©‡ r»ÉMB“¸(NùÜ ý£…B´Yd³S«¹Š(Vz‡ŒgÒ;V`£a§W”+Y!WìB0:øu8ÖËòªjWGžvZç¹$0É!ÅT!ˆÒeBívQîO2Ýäüþ<ÓQ‹ùº=¿ŸÌt %Ò»–Fø9,Õhµ8+7×C–:”toH£Ãí¿yÁƒl¥8J Ö:¿ijù ç»E% ÄEEý›Ð¾J‚ö/ÃýižùðþíZÀöþõùéùùÈSÞ¿sÀûë÷^X?@8Ì!Èüä¾tA§~-€k] º~Rà pf´½`]$l´#]Pع‹P¸×ÕNõ°gþì@ÜÀ63ù·é¨íq‚1Cú |Ã*?¨öÑ›€´Q·à“-Ö°Óð'E ›HÊ]=$@"€´ýÞ]K뿼iØ‘x"én*2n…àe»5ð+ Ó»äa}wd QÍ|7ZŒ¦ÈóüÚ|ÿ÷ôñ¿¿¹~£ËÍÍõ%mÙ± Ð¥à‹~n©»P*ki d£…ÝT:WÝ„6M?¿!÷“,{1f eí·FY8Ð&@=†€Ã`¶µuœˆéÿâçÆX//øÀK‰—<Ž$D?ááÏrA´?ÄèÅy±¥¿±!î+92éýVÿÝBúß½W~y €k¡?KŸœœìž_²6'þ\”}IÔº‡¨‚UûUâ†C4©0­iÖ•ß„TÝ•ï!€"Ï h`T.hÿ¯HÜÈ(ù%GI©fħXT•OÆXoÓߌ©ªkÒO]È™0B7 dü¨ƒŠàáÜ7º1¸ávX¡J3ÝËÔUT‚o(Šøù“±ø–ðeXŠøáÿð¡´Q‚Ügvr͙ݼÍBGb|ÔNAÁŒ~øÒÍ|hÃáKÌè03âŸHaˆ*µ%,};\ÜðhîÛÅÔW!º_d˜[T[Úôé7´èÉ€E‰)ò­ä)P‚iÌë—à;6¦çæëÑ1ëÛ¹o$#rgÜÏœX†â @nç”Ê3ÒsþD¬ú“‹dQd¦œ¦{ûTŒ²GÂÎe)§°çg3—£ ²"»âI"#yI‘ Q…ûÍìÃâlcÛ;µ¿9èûþýCÕl]m–å¨Êª+ë–©=E€­õTVÿYdÀ(ËŠPA K `z””ð ž”Ek dÓƒW’î RËòoªsQïÅI3ÝÓ€F¼[Ê?áLˆõ‰ºƒ·pèv ¡Ôû©¬~)³J¢ËQpxÂ9͹—èž&¯ ig±ó®b$æj"„æ„£HrjÜË:åbËËFLÈ…~5 +Þj´0ÒNŽºùˆ±u`\ß‹óÅqðT”ÃW•D—JÌã"‰^’aR¦OK]È)žè§ë Ý.¢m@”4éìxDÄý”÷®$0ˆ§Ï2·¯ŸãP~¦×ÅJ€óÒ—ä0Hè¢gL r6 ¥ åûÕ8Ë÷ËÍÍ5á?«xy| Ë +OˆÎÁ¼ð´¾ÁnÖª›.T\TJ+F矗 ½¡^ÕmƒÞgÅe Ì(ˆ±¡_"áú—éZ°ïq~HRZõøæâ}lÎÏ/..ÙçVºnh¾n`àÀhhdÆ¿°š!~ü?ºÕƒW ×ü˜ÃoÞ`.dÿõ×OŸh¾´Á´x¦>÷áiÖ€±¿2¶ô Òµ^:˜1œ¤ŸNà•=7 ÷¢ö–€J F©q @rŒºVÈ q ’…] +D¢››yôHÖi¬€È¾3ÐÌŸŒkßÌÌ[y0GÈAF,”XRòà¶@º>N'¿ù‡b]?Éøàï Ê(œÈoư›"D¤—x'Æ1cW݆øß!‡K–IC÷?7Q¿LZÓå8ZˆïOŽ,„~ú‹ÞƼÇËã—¡ßÂ¥$‰I´uó $ÃZ¹W¢(Ò§HãåàѯˆÔâ"L8[”W¾!ZæXt1;‚˜ïÍÍ,·Þ›cNf_)â}F¹wÊt§‘]6S2}²×éƒ<šaòûï®_S}©û㪽76¦È.Hõ(-²bªÂ>~Ud‚ÊáøÈËÖšÆ$€}ÉCiØ5ÂÔ]êT˃Á“ÞD§#8z½í1ôB̰£Ú/éÄnæU.€ ÀÑœÏÎf¹6„ÊããçÛo…ç +tŠóÔtÁƒ8ÿ¥l3pl·2æHõs5‘]¦”ƒvçµ £_ÍyÀB~0LHÖé [U¬`RÑsù¼Ç¶,ðræ„’rîqpeÕÍÆÊn©×Ìç£-‚0Í9â•Nïà¼@ä9Û¤&Œa½ËBQ' tV²6=é1ÎIrÊtH·nìϽü°Ý>¡tÚ9»…˜Ø@yú“ÒÉ7m¬é{’š•ðŸÑÐó¦ÌrPû£ª=¨vÈ«ÿ ØÜT¼ä[¿Øì÷‡8cPåd5£ím ùJTsîw8ʬú½°ŸÖÚ¯ß\°ƒÝáééÅÅëKÖ¹§ñ@'É%x°]- +@Æx ñMQ²â‚ÚÀ/Ò¡q€–C-Èï%ûp­{ Ú`löb¼7:G@`^(άDÝÿøÀOüÙj@Ï6Æ·å,"`Â4Ä +Æ(p%(7mÔ‹"ŸÄÀZÿAõ¿+#È•kIo^³àùÅù)[S Nc +}dådÞ—ˆ:¬†VWj<¸fsí?©Ó£øÞn~—äú!£ÈhؤÅ1û”Œã"3ÕãPÌWöâ:ZhiHI¿‡w[ŒÏa »ðAÄF€Nà30ú_rˆ±ðE9@W°€{‡GPÄ€#Âkpo?i Ú™·57F ðfà~HÀ¼[Ä3¶vÀ_Ïø ì0À\^ J‡9W(J†lÂîª2Ö2¬sN¦ZRKÃä Ù/‚jW•<±€•ËS-†¿wAº”áÓÿàŶü0"dv°EÔýýÓç-qCÉ«² % ~fN¢^ÙŸôRÜ ¿¸Œœ"#ë«â”BŸÂæF–õp²GOB1ò¾HÑ-‘Þv¤'~2£PÎÍÏ̱_°D©Gµþo{|á`ú˜™‰ +ûwŽº®„Xj.c“¹)•©¿ë¡}VÁ¦áÑ«½­òlXVWÑP‚û¾"íÿ(Þ~?£‘ªoF¨?Úm殬£ŸV¸Bãî¶|s7ó±ªxLÅî­ŠË~?AÉÀÔ?.»y]¥€Á'8¯^dåYUîÿÂîF†|H0Êe_.FV—å¼Ñ.}rÐÎ<‚;sP$,6Ý û ÷Ú¿kÕkdK!f™*•½yª +¶Þþ +Ò“m0–yöVœÂ¬ðH±cÊø~³B;E5·K6Ÿº:öG“<Ö•ì‘ÇúÉsuÅ °™o—/³vì0¹8Ï7!'JQ +óªÝ®ÊmëàBç©f˜šFKPPÞYRZ$Æú›e¬C¬†å~ˆ7ùý³³Õrøãfgƒ¥8XΓ~IÊ5%–%ˆ¥~ìpç»'y;Zïqçw˜w§Aâü [‹!£í&6Q¦U^ŠrïˇqýKt-”ò¶?1v z3Ú”.N//__¿Ñ‘ôöø…­ ‡3är…ëß'MúÆî÷È¡¡Þš5&Ë“Ïþ ›cÐ}óˆ Ç>¦Ü +©ij`;›"I (Dœ×º»ÝÀMÿ„%àÇ•„†²\ŒÌ„ò¤Fóÿ`èãÇ”P°' ÒÐ ã'¯ßÑCòæ‚€ÓC¶U8UfÕÍ)™[Á(/Ðß@[ÿëÃu"u$§¨õ\Ó©²ä)8c†ñ„®êç …O+òh¬˜&ÿS7:â.‘°ìv€Mƒ«¨°S߯ǪQÙó3ÄDÝÊ"¨ À,¸‘™ì´` PT‘uÌ„/’¬wÃÜËU'9E0Ðü¹ @Û™„˜­Lt‚s8yD ú餋mŰŽxkÊž:ç&-“¶Õ!äPãávÀ|#À€Ëm €Ã5-Lp¤RÑ/!åV ¬GÎ/² “çhP¼X*.·DÚ̾nì×¹œZ¾Q4XÒq`Wµk¸òËy0ûP,¹ÀÖ‘å¼FÝðÇù…žÄÜ`b~#]ðÏ¡T‘,~‘@Ø¡ØI +!q2³;~·¾êCôø=ªFªçÓ-[ß•Yñ7ëÑÉ@ª¾èˆí«ãcÍøoÂ+¬†£_ÎF?Ó.}6:>>ÎÎŽCµŽÊb8’!êvy€¶®;o4< <¸x 7qK}=x© +{_5ûø`%S-~ÞVÞàåüÍÝÀù˸Ê­Á[6)¬ ¼]¡¸ƒó£cI#¯þVÑy!Î~9ûÙœÄòhšó3q~<:–Bòî2ûU•gùù¾xQÀü«àœ¶åDB©MÉ*^¯4Y¨Hmá’ byñ%[/]ï|¹×gPhŸ5ëq +öü}¼¸“Qu,Qkü˨-¾=û™Œ5çf‰Î%(Tæüe5{dÛA¾õ¼b§áúeU±oh-%‘ +çytøäJW– ByaXŽê‹åÄ'I‹™XiÌÌÍ>xþ“ý6µ-÷¸¾{P»ý>l¯Ês÷ WWWo¯ÆW±ë>tP +ŠÜ,ÍYÕkÞÞxûUu„*-ØaïzÑñøÕßþó—_äÿg¶ŸßH%ëI;ŸèfkåùhQ¥\íIY{A„i¯ÿ ¨ñ¥Ã•¥7ãÏWÚ[£ÑxDPú Žà[䟰wvp¾›8Wmÿ<+¯^ýíj…ˆ»è«/(ˆ¸z½®,ØÒûÛG£›*©Ãn h4¼”ˆr3óM£“¼š²v1þùoJ)é®ìÛsQ9` f‹w±||$@ŒWÕÙ«Wߊóÿû•½K.é)ÏÊ„<*æcs~ HX˜*áÓ¯¿z`½¬Ca×¶G'è+pi™²ëÞ@#Ç#¸‰Àgbô‚nTè×!@`üÜ!ˆhæ'b)ðGšàøø )@àÇÆ‰Àô‡`ü×Íßâwóî=Û¾‘ ðæÍ% ‡‡ì«´}øúúæFRÕ{Öð² +rv?}Œ-êôúÏ!Š +³®õÂ,êCß»æ¼kd„¾%›rAæU¿ÏÛ6…®KXÖ¾ú^AO¨­¶‡•Njÿyƒ§ÀÔ*¦‘Z?¯*Nú‡cH}—™ñǰ1÷Lä!Åòpç°"Lû—c'f`Ç-9ϰ­½àpQ ÷Œ0*ùQ^ÅBlCþ´=À nÈZ˜³Ê ¹è,I‡¹à­¦Èh;ôÓ=ô[ÃÛPµ 0TϨþ¢Hvra±d~nþ[÷SÒ€ðíâÜÌ¢$‰oœ-¤QHì¤Ð½”ÈBÖdˆ§”T“qøuHÛÇdžæ™Y¥Y¹œf˜¨°ìu<˜[ØP°¸Á¤n0ÅùÇwz"EÜ*ÆI}µ%Žë¤þ昙iÿʲt¶²|ëI{ÀhyÞÝÊžËì¹N[[ú í(ÏWžÈzkË{¤uõ|‡@$—ÿ,k¯(øDnçíöŠ"KäÐ|‡#ñ`@Ïÿf]LáÀ¦8â‡wK´%^ž¬ˆs¶ëŠq³ž=ß’ïçâÕ¬ ÿ¼õ;ÐI …¸3ç…°k^SöÝáÑísеÝnAíöj«½*{Ý7m²2»ØzÜdÒÇlc®B7›zn˜·iz´(I¿¼ù]NzŽC¸Wþ‰Ã­.±uóçÿ"ž·rÝÉ/cBº÷ÀŠ8×tzòd+qž²Ïä[òœèÃK¤n«Ù|^;RžË*üÙ‹þ2X·[*ŒJɬJ1óªMN?»ªÉÎ- ÙŸWòn«¡<ð,Y³`+»XŠ”ñ~ÉDtKOþåyÞn}žéfÎyžæ<{ògqÞvε•kÏ'œ“ÃÜ}‘’®? þ£_è/å^h÷þòd»78¤àâµ$–²aF¿3Ä€¹ð¡(ƒ·¡øÿã+þòÈ)zÓé¢ô‚¹=[_?ß°Ç.ÒÀ Z8>@óXÀs€hÀ™x‹B#H?ÙK „†boÙ îw=Ù²‡e =‡(°3í „Ï ¨'Æ2BIÑŸ5‚`ŸY€ +…‰ B÷¯ðäÏë×燒.·ón~ðúMä#k0Pùúþo(VÐAe·h;®Ù@\õMW~~+_ââÆZÒ„ôàP'-ÖN"ŠxJÎøÅ_OÀ 5vŒëÄ—/÷^ï¡)ã{¼ð- a¢ŸsãÖoIJŒž\¯erÞOwXúÜÕ½¾äƒ~§I<Ê8~¾Mæ&±æRç†d »œýe›»éCöÿ#ÿýƒJô9õïs)BŸ3ÆÁ-Ð?ÈUnw+w+l ähÐ~2è +ª$ €µBÖ$®«hÕ°ƒöŸ£ +ŽšØ6wëd?­ +€tÊÚM)|=Å  õ«Qn˨yþ/‰sNâ9j~Ñ–àd Ü4`B¬˜'=Ý[s|Þl²’zºYW\óW]K"±´ý¼Ysž‰½Fl vWZ+H.-ËÀ×þŽàÙR ðê8Ǻ#L@ñ$^ÖŒD„àÌ &4A¥Žx& Xò# Êò'ÛÁ¹xV.u{5ç‘éö—ç&X‡Ä¹æœPÜ­"•é…~—Êtga„,×ëî*×CÚØ šBV˜VN*wW%G=² a§ùXg§Ü¤;’à¡åMØ[«ÿ-lXvUx’ÉéFŽÍó&ƒ8CÔdcå{×[ÍŠ‹’®\ØÊzfV Pé%!œ| õeJP?ÑüïÙ(ø‚.].NUò«ÓÑù¥ˆ&Ú±‘Ü´ÍÜ¡¿ŽP¬ÿqÃR¼‚J™©ÑÙоrCï?J¹!ÙnË7˜ : œƒµ~²Ú]£¿Ž„Ò2¥×@~DCÎ<É5{ú(ƒ½(à<]lf¥ß¡ÜÃŒ“‚Q¶‰A6…t#¹‡Ø…è¨ÿ +ýƒ’-xg íÿl|yqÁN +{¥ŠîÉ%2’Ô{rìÝu,t?½Wu¨š7U縋º8Îu¥ç›8Åcr÷É"9¼¥ðK]L o¸·+\ljßí’Åçcl-¬IœÞÂFònb<Ú6|Mž’¥)Lq ðG¸SÁcCÝOŒ˜‡±`‹{Á62Ö=7v¼ÕOÉïÒ%ÝLL&>nÉŽd,åU¸³[¦¼‡a<†5(†€§Ú]bò“)Ù‰¸³ƒú)€äMMÉT)ÌõŠBL›ÐÇÓ„sƒ + 3å²B‰·š<ú\?$JïJ7ÓÉš¸&Ù"’¸Ù)½W9pÊõßÚ)÷6ðïU¾EaŸîkGwYS÷ýÞ1:<¤±÷¤¢¹÷ :¥µyoô¿Ç£+ÝÉp08ØÐCU'ãq4×ÓÎzu5:»*óñÕè'œŽ«j4úiüv<éTªÑŨ*v¬­æööv±WÒŠ›§ÛRY+w²Ç=Íë´ìW—'í«ÑQµƒ{x0'´„ïïÿ¤(ÆU¹7ªíüVÍù@•‹âÓÍ ºÞ˜ó=q^vż9W0Á¹PŽG[ãñ¹›ˆÅùiõÓèí•8uòS5:hÅ,ñœ}àåáëö€Ù­˃Þ˜X'Žó²ÈÆÕ>ùÖÛØ©ŠÍ^§óŒð È`Ô9ðr¾ñìÅ@l…xƒ±¢T¾ýo¹Ñ]Ü—{щñò`4–y.‡Êì³³×í«ñ¸: ÎG§âüÍhûdœ³oÎV3æÓ*‹·o3½:88H· +ò :WŒ«ÁŠ’Lo # Ê—?Éβüé¥{Ì[Ï£C1«rPªA¯EÓæÜ\5~cMÚ¼À\‚/<$BùâA†UÙsÿÀfÕaË%Hq‘gJGu|¥7Lቱ}ô " À¦ÑŸ‹, Î,h:@føËF?¦*b‹•4}ü*@‹)I,ÀD„Þß8H..@k‡W°À‹È:iù¯ß\ž_œžœ ÙîN/ÝXÂŒŠë÷×ÞIvúbL]‘Õ5ZTµ®ýT¹Õud¨ÿ·Æw¸N>L,›%ãÉ5™sžÕ$yÿ¹‡Òêœudénú6‘LBXÙ)Ù%?ÿã,ºÀsT]ì.në3ÝNîÀÙ9e]“+µÿälrã,ƒ;y“+6¸•¹\è4ñ`6K¸‹#+¸ 'XÜR8Óë£ìÌOr.Œí:nëS"¸vÎ9ËíJÖ°‘›ÍpöÙ!à÷ Rý¸+§Â,+z÷MÕŸGT¹‰F/Ë—ån± ÐVÕOC†©Ÿ][oq¾ÿ²;{[æo \é=bú_bn‡aø,|3àWfíüÀœcW¼ ±ÐÏŸH&b¼ë­¦å¼:s·w±ÃBÿtz³·ïÖ7:Lì|Km#дçA1› +ž~m13,ÅJMÝ“§Eùo•²B‚õÙèo•$$(!JwCóPuæV8¾ÕÌÈ9£¨íÁÇr@ž“ãžL‘ò¼—Æ­êíP/\°ÉîLUÃW‡©°ßO oî'´TJ¾u|!ô›ó½ÁÞ^å­_¿¾d& ¸'¥Wøýñƒ\x–{ éG9¾ŽMtzðÒ¥Y7BYù–’Τ}w·Çz ¹€8ûïÆò0òêF¸¬pèá­=vv{¡tŠÈnå’ht§-28ˆˆŸàaAÌe€Ý"*À¯øY$ÈëytƒþôNðLÓ©$¡¤[k#½WÎyÀ‹ó‹ÃÓƒƒ½í¼W¼~'k)þròî†-¾6 ¬‹º,peÉuc]íG¬Ÿ«è¸óÉÆõŸ µÿ] +WÔÅ©¿v7É$¼Ç‰ëçë$gޱv[³›âÆçÚM}S[Å5(Yès·-©Š¯óDŠÆF‘zß"=OøI>’/ÿÃqÜᢾ‰smÂÉ?M“ ûüœBubÃIб&ßÖϺÖ|'‡áCìÅcP} £;æq›n"«kC®¶€+ËNá3þõa_q“ÈæâMU³¬ÄK8¼=ˆ&¹ç1ÝÄ) ŸOì‚¢YcB„ꄊ±¦ƒÛyø²y­/žË*kå±¶Mσm*](€Ç˜µÖÓ–Õn{<&R£ƒ€L ïd6•,ÐÌ+£Hئ¦Û½[îJªçL__k΀¬>[p.gNÝRÑsží@Š„U¾3ïú±‚¢n»ÛúUÙ°ê›ÅNÁp÷M¢°_º?³½0ãMõQ³°cc^¥f’kæƒi{ÌÜ[»¤i wØ$ÿu¿}0²ë8%„Ÿ¦Åy¯™ <©ν€ÜåÛ‘çù g¹^:oA™>n•¯ŽYÈÁ‹ 2_  L´#oçb&Ŧ¬ØXšS…C/Ú[u&"ž’4Y©Wƒ‹^+c\¤h½`5à T DÜ…à't„-ùl§"œ±Ix}›Á¹¢0çL£€Ä¶^¶„™ýèµøÂ/õ9˜Ð.H÷œuwðxs^þeoïðäüœq€Lt¿~÷æÃÍõG +ü%‡ÒÞi„G,`ˆ?=îi^ +— –ü3 Ó¢ŽB- +mßÖ2 ³ +ϯ1+ÏCóhЃœüõ ·õx´·:™£þ6ŽGEÆL;Vº£7Àn« €ö}©øi‚iÝëСG’BË¿¤ŸYãïúF‡$€wt\° à‰€˜€õñÆ‹‚ÿ_&UaªñÒO§¨Õ\¦j?Õs¾»[N(Y„‰yxT`Ó-Éq]§óä&.bªŒ-Øü–Çä.(¬øÇ‘}®Ÿøqïçi"¬‡ >ûB €“¿tÜŠ±ØX¶6ÀÌnÉ@žýçW.aêç‰q˜Övw G:‰Ç¤%k]ü«¯üÒ Â te'K.)¸;ÎÓ5˜¿} <ûÊÉIPä”~èËó¼[‡CG3yŽ«ïlaÞÜ ÙÎaÔ±û6Èæ·?ýk»[3…qXÕ&¼ûM €½Ô>Õ&æÎüLŒ& +ãÉÃôAmù{5­±·°öÉxúÝXJG´#üΨÖ÷ørêÞ¾\Q¯ö¥óWr£JÞÐ r¡›q‰)Û‚˜BÚh.Ä ……oÁѶâïFò)¸zu|ü×êeÜ‹xÉ‘ùcº|•7ós‡bl/nå–i‰â»æapÁUŸ…‚އÿçÛ"{‰tA(IB€'.AÁy;rÈ\ÖP•E + ¢Ìªñp¿ê—7–Ä]ï±6®p‘m¡¼AÀƒF§kŸ/h WNy@’«xÙa;9 +‡ù®9 †«¿•íÙ…v + aIYÇ%ˆ%ñÇù“ž­‚µºÈà`˜ä·îesÞªÞžIÕ?SxRØ•é·y¾¯g²v°’EïÃcya†Ïó¬²bwÖ;kÏÖŸ â%õï`myy}­Xouªz¥àÞF>U$¶T"óö–—/LkI%þTZz’ù, +àoÜ.>Ž™i^wXJ)±Ž@©0gŒ‹èêÏ9KºþýÄv¿nÒ¾~'|»‘ðîÍù^±wÀ<@¶ +öž€^ÓžepD`?0©³À…¤,'èQÓȾZçÖ“1µ€Ð`"©ì†rl&‡Ü~úDc}N¤‡»³ü™–ÿÔëD?E<YzˆG{ô=éjÂÎVÑ Ÿ¶M}Å‘´°¯Ýú6|¢)ÂÞ­Õ]\LðìëÄĔܦ{ßÞa.‘ŒcÌP¢[¯¦)sÿ“GµKßÄ<'ªí¹øuøÙ—[ ¨. É žäîj¦# Â&Èæ07Ç{uaà i‘}SÌñ˜nâ>|kªÍnÉ.œ]~¯)Ù[}LßLù‹±<Õvõ/µ³tÓ3Ý?@ {§Rï~ddDœ|“>‘Á‰+Õ«Á꬞åm!íÂ8À±´KpÊ_¸¶Îw³¦U:žDUÆ š™b'¸qÞ¢á6V b‹a¢bÇ$HÈ*6~³ïí¼¸ªÄ®ŽU«©5k#u­únK`Öùð¬x^V‚I +À¨¬Lâym +ºÈ…hjÙ?iýìä3Me¾Zö7ûRþ…ùnö§åŸÕñ„Ž B¥ó_¯jþÁ7sw•+£Fû¤é‡Aìì+´Úu.‹,»ÄÙ¡Ÿò :¾-[eµ³ËEr}Ë9­ +Âÿ^Õ¥à úžW2å5š²ëïvY6‹‘Tç¢$6FF‡ÎzçÍÎÎNU´X1y£á¦ÇÔ–9éÿ´,u¼ ?ZC”S†w•™þPÒ€² ×Ùì´:;= m¼°ˆàΘç:ÈW2Ç™ž-¤» XÐM”«ùÏ}½ÉhGqÁçQxýÞ¹¦¡„B|0ÿî9K +çýôΚ*óÕ$xU€çƒíboïäää‚oÞ]¿¥—@²»@}·Ÿ€¦!üRši¡(;üÒOC©îcà–§k/äűÜÒIdßnÇ,ÖÍ ÝDQƒ¶ìÐÁZcÄ],(z¬ùÁx´øO4}y×^™•€\0‰˜«ßüýƒ˜±s¹!å7ïß3€îopq~^Û½íà åfLý{§ +~©€z,~u<¹q}µ`úé”Lâ)='Qø¨)œ¨ +½Ó@Ml âá2õÓÉgc˜èv%À0Ö Nãê»Ú§]¦ŸIŽÓ“#6Õ7 +*1 ÙÀÆ©ÛdgîXô?êÿtà38‰!ê‹¯ÉÆT»¬ÿS”œ>PxÖ˜øÖ7õC}ĈsÎc>sG<×g‘ _Õ|%_nóF䇅@ã ï5msÜzH¶1oJ”<êŽ#Ëâ~ŠlV¹7áœã”î¨ßë¼rÎ….9œD2ñ3åEž`Îïµ6C°Œ`€€Ãm}Į̀–ü#ïU tÌHßÞùA2€ñŸºs7!PÔ£´ñï^þ_´v4ªº­ôØÓp­;Ķ4AÅ knW;¬õîê~“êW 5Œæ¾¤»v›ÕÙYßB‹îKpL“X9ʛݗSœÞÇ厣5¢_Ë. Ÿn ´ãêhœ·ËX?·o¨e‰B…œ'ÄÙ.³vlxŸß ìö²Ì§€ñ$ ŒzÍâ¸b=°î­ å7\˜g-j¿øÅFGþå©8Vë×GWõ*}’oêvöÅRÿ>œWGGgÅÊ`8ÒÉynîõ¬‹nª¬I €×(̺Þt@ùËh(å¹^¾zÏšÅ/£ŠõŒ`@Œ€£ÕÐW"QŽV…€™÷øÓ¥(ip€Ò&¢€½W$¬+6‘œnX°)zëåõN¿óxµ¨— + Ž»Y…¢xlÖÊ(RÊlg«wʇs“76{W£Qñ=# +úl\E^!ç2Ø©ô}ÜOô_"SóŒ5Vbë¿×§ƒíÁà b"à¥ðÿtØ÷ï>|”öËZ€7ÿþ•½ùS*vôû+Ä4ºÄ w »÷þc”Ý Ú¿î±GÏàNÐ]~%¤~õã |Fsççú[õwÿýKpÐI¨ÍèÁÄŠOnÐ-ñÚ£BAì ]À±ùåI‰cu|ÄÆAÈ J$éñŒ`¬„^¹öî͛ׯ/.OÏOªÔpÁ²ŠŒ«|O¾ÑF ì½þæJÌ•'«Õq#º­jý·ù•ý„Âbb4±qè£`v™ŽÛß䯓€âó•mª‡8&.'g6¡Üfal/¿uÁ$“É™aì|˜rãÇú^×-aNØáÄŽÂe²‹ÇÚÒýÄ<Ñæ p£H< lÓ9B‡úù¶ä3ÅtøÕÞú¨­Sǣϟý"on©~bª|àGÿë£~öÅdsðßoð¶ Àÿ¸¯¥_zªŸ1©Ý¦“ÿ~ +²#…¯8ÄØí…&<Ç­àÂsîä)åeÎî&yþÙ!ÇL¢ûúÑÝ¢FW¥*ÙnŠvý>:Q¤ AÜHõ}9z{|vÔm³t[ð• %U[ó(‘ê›ýî[ƒ‘`Å7*gÔýHLa󞸪æmú}QuWÙL;ý⇢OoŸ ER“û¬®·Ï¥.1õƒØ‡‰*}ñ[‡²ãž‘ôèÄù/ÇÇ£íÌ«A0æy  j´Ã¾ì¶‹±lýÞÔœ ü»ô^P5ê~×=°‚»Æ8FÅYè,-/ þ½DXôý<œo„ì³Ñ (Uü`& Ç˜àÜæû ª^ÊΔ¶¸Ôœ£Í'é$9®ó\o7eŒŠÓ®cwÏ^PÞ;)ZÊÏ Ñï øöÙÁBÉ@‚a%=º~‡Xìt¼F‰[DKÞ h­³& ×Ã!iP‰Úô2ÁE§ÙêÑ)¡ÐÐMõ¾Î´£¬H¨3]ñÀ dÎÓÊîøÁð hOïÕ,>-/ÂyÚ ˜çŒ…!î?²çÆù/’'ªùÇw&ü]nçÛ{ƒƒÓÖ¸}ƒåû÷¬ÄnlðAÚ´@Ü€ñø–F.0¥ùÄB=ôß(«? €4žÜúÿIáC.Qæéí]ôúE>Î~õv‚ÍáÇÐïvx~€p‰:‹µO@9AJ›? ŸÝʘHtÙB" 0ÈøF2‹¹ûH ŒrBoàòüü4Zºùáé´eYÊwo®ß^ßó»¦ÎsµÇ‘ˆšš-êõ¨éTZËõÁONÂ’Ÿ§+qQò£P.ÍȹÖÞ9ãÅWY"<œÃŠoÖx¶ÙÄi툄eãtÕ—`î3²58F“¹3ËΉ!îâÀeºãG>Í/ÌÏÍKèJ«ùEvÕ¤¸ðd›tˆtÃÚÐWÿ° ó8É]\JRƜ䧓÷Šcr.9¬}À¸˜C°Ã“^­ã|0‡{³‡ÁÃÂÎþ1ð)ŽÈºð2áÐ?†vÐvB<:ˆ]þ¹ 'É1?l0¾}¯ú¶ãÃ61G똎?ÖP‚{Ô°ª*z' Q…)ŠÚ³(Xû ŠžUÝô¶ŽË‚-h¶Ò’íE±— ªscºèÅe·YþŒ¡tBŠÄ€4À`¥Üj#šjŠN€ý©jÞÀÀaŠ +Æé»s_\Mv€¯%“³Î.ûð^”G^p"º$r39¹ƒåz/ªüyqf­ñÈçϘ¶h>iE¯ÙÛÑ­ÀŽioÏÀ<ö¿[ïXCf?·èÕ̵ð€è²X{Nò<¸y$›Lwtq¦÷ûÇêlÞϹxÏ{îvéå‡Þšó;y.¹E:¯Te²±õŨx’+N·}ˆ›:ÏË´­Ó.ÜíKÈ÷äÚ„ñ²êôÿi  ‡  Üp(Šy²_l®/7Ö•1ÂqÞGÎÌÝA»‹|ƒ0ÆA¼‡D—°“¬[5R +gb¹Ê$»ý¥YPo¸¿½­ÿÑâü%b¶šàè»þ²,à‡ëË“¢›Øøâòõ…¥„wŒD ¸yo4 +ü½7>xîævD¿ÿ¹v‚Q,tS…·2¹X’SÆÕáèÛI@;ä Ä0¸öê:É]¶ö9 Ü‘ʾî&÷9hÈG€$žDK¾0_èŽð€\ð+[‹ahØw/L™¿H²¢ßƒtëDg ðþæâð_@58ôºùÉ…§ý ÿß±à_>`ôÙùýdËûè¡êÏyÁ• ªAµ!€·Òêm÷œóþìTW&C.ÐòLcyn~ùáÌf +¤2Ùmxr…êc~aa‰…óÔÅáÎñ¥3Š|⃿|»6N·º“3;áoAp(÷Dçjœ[3Ñx8³.ic M¬Ý^MÉGDåè¤ö.³°ýÃX O&óî=Ž‘n±i"Ž”Âú¯CFØMžå IvÄ’-ÞÙ†OœÏ-„{‡‹EbÈaø’<)”……5¶Xž%’¥ËTÖ¥ðÂ{DçÐíÖ&ñk’pè7j×:ô .î$t`'‚‹ÁY¸î°šÓ{¥‰v Á¬ƒXûRIQlŠˆˆñ?b¦tØ“-ôÊÙ5O°˜ÂZžy°<7·Æ{µÊI¢ÑL¦tÊdn~­ƒæÎ,'·äiaá!½1¿¡?4YY`uå¨nèO¶^µŠlKð@öº±‹Žqi8¬òvI?´ªÙ½hK¬X³4¼ä½ú®Ñyœªs׿&EbÛí¢ì>ÉGrìÀà#°HdÕð;;¯ŠVîÕ‚ôLjÉýâîÁÿš•[Î…ºaZ U‰–Ã":/¢ãÂ$¨Lœ×Œä[¥„’rKºçb=q¿-EhêÙwY Ü:1ÀBDïhá•§ToˆÎ/áJq…­V²§Ù†`΋à\Œÿ¨<'û7¨äVæaGº°˜ò\Èh1êãµèÄ:-¤4/^J\(ÙÈ´óÛ?õ@>=?==9 ò<Û>9Æ¿ÖÏ´uQß©BæÇ äëš¾"êf“ + 'ý}Þ bÂZu$–sóGó ¡W^WIU>ÿPÊhOøßh¨j[Z`°ù-x©ê–È¢–­ýRcM®ç;Òä\Íš?v±ÍÏKÒqò”|q 8ñ.MÄ$sÄê¨òÁÀ°_ž›Y—Xí=ñØ8–…òI¤Ò'.8áŸDáGP`é.:6§Îñ_^æõ¡Î,ÈUÀ†}§«‚2˜Ü&:ËüüLc¡>à`™Ì„½8?óßoßÅ„Ha8 y€”uK=UóÈ9ÅirrTÌÌ5’W»‡`n¼í Åh p^bÃÜ< (¨LÖÅ´Âl<šó–û~×£\¸ ¤¦xÀ?uÔÜÒ#ódrÎÅ{ÕÛX“ï[&Ò‹âm>PÐrŸ°ec¶2P™ð{%=Ê9ìôÒÖcç¥å¹G˱¡B§,Ô1EÁ˜¢Äƒ¥Ns&’O‡'/…[ãšÎÀ=QŸ‘vtúưÛÊ_µ}tB«Vt<=Ï«|t=` ûpÌf© š*;¯í+Y»ÂæÄ%n¢\Ä”/;ðˆ¼š4¸Fï[ù•®LµÎï£A³[á8*~zàÎatŽÄ·™pÃæÅGl7‡/‡!†Lsþ¢¬¶FÌ_€± ”TLå*LÖ•’¢ÛìÐÛÍ®wkÿ + Í·³´´ä‚U·<*à~RåÉx%5å¢8ŸdºØ?®9ß–ƒÖçy.V^0Ç/.`ª¯xw==Þrït)ÏÃYï…d5Œ¾ïUÅJw°“r“'dº/D#¹ªü‰ív$6äI¬ê1 Ðßð¿ì©€1@aÆ>É››½Â¥†i€ ˜¥`‚þäñ¿Ö7\ÌùUV¼Ýa@È9“ÅyÊ~Þ““U­¶²¢ÞÀ0á¿ÙæÎû;c©ú_¦8÷Ó»K^Ê=ãÖ­Ÿ^_”y–ï•ìì…ù½ctàGövó?[• ü(”ä@ï6>3ÖÄû,K ÐØÝº÷Ì¿h×—Ð=ø‚|аVrØ2:dBw˾µõýÜ1|;‚·‡x¼ñìİY—™n™àÁ|z6nh;wtpŠ&€,ô# Wö½‰­O¶,|Á¤ +‰~Žë÷¬£t½¥Qé^ZWå*qšJ6*ït¸ú¤Þ§º±êõ)ûÊÍ6‹0Q9.ÉV®„ÿ½ÓW`Gf þ¼¤~RVe’‚aCm»°¼¼¶¼¦¹ñH8K`ˆ+2þÂBgîQ‡ŠÚ~ä) )Y謙Q\:ðØö¾!æ¨ÐíG ½ÿ>sKkGÎ2Ò*̒ꆙ'(Âlþ—×KsË™‰7_rC€ +biyVgÐw!å]¤Ï6œ—µ]r¨†°´xÙš¸›È„† VA. c;4l:ësaÞu‚Ójò!²TY½¾¼$ jv mÈ)‰l1)Ctñ¦‡8Ùl~þ¿“˜\Xx´¨LwÖý‰¸àD¡ê½JtRjõ^_ŠCL(CŹÂQ +ް`@§K’”hgLoæNo‹–N²Å %¯”gŠå×DS2›Þ+îñî÷°1÷HoˆÍf—ÌœùSpòº¤÷ +C°‹0i_Kb2ß™d=ŸìV¯avâ7ýÍx³ß#U©®ÐûeEÿé¤nTJFÀÖªÊ †Wƒ·˜Õˬ½'CPt‚£ªšé[[\±ã|u4e3(uU£Ò¡¸R«× ›÷ªî +ÍÑA¡Œ‚DºèYOŠHZ¹4ÖðçGÀ¿ÛšÍg½åí-ç°.Û?®ö=JY o1QâB¯d$àDoΫí­ÑU? 2c2”®V®n›.{´˜€þ8Ö×Ö˜€ª¡Â­÷&ôŸ™YhmÙ1‚¥Èx7IÐÂ]ç9 ;eÅÂH‘ÅÕ¨XóɘHÙ'6 ™ž—åJõõ0 H!ÚR¶]ŒQåk”ÍGy“E~L;ýÈJ‘óSŒ!›üP–U»}ÀÛ²«rX¬7$Úº¬/±S—hy©óT…¸Akc6Ë>úæËÙ§žË#}N! 'íäEß›È ]̹¬0ŠÜÏ=b í)Ö£üRZ˜Qá–,äÅõ÷“ÔÔ/Õ$|xG/ÿ{ 7Œp €’Šûæò>{á¢â3>H°-¤ mÝú?Ø*Ü–f 4.>rú ¤H:°DG×5 ]gøëåwɱkß'F bbì—3N¸D¦@pp(`_Ø»e +ORtTxEÇW0 ;ƒ±!¶ ¶Ðþõ¬‡Pù-ðè†4)ÊIA’ƒ®?\¿{ÿZèÿúü✀ƒƒ½AÞÙ>¸”êŸôÿë7ï%X¾ºT#ßO½ÇõΚkN#-u +ä-Eý‡u˜.ÍÎaöèŸæù¹WM¿17·)‰u­Ók,nðyBö@ªOEŸúÕÿ‰¹$úMá RfudBdÝ©^èÈ/`%õT»«c‚ê·8Ï +dY*\Ü)¾¥MAø:!­5fM¦O¬bXQ:µ ˜X^[_[ntza–â0 _æÖ”âxJ97aÎî&‘ˆuc`cŒ]Œ-?À~™7Ö–g…¾úÎòœ±–ðEm &äE¢Â`è1__ßX_ot–% g›¯ë‹ÿLEé€þ;Û†圌7‰/cBæZKKÙHDzÄM± *é1ï5^LÄR37MÊ5ê¯5újÍÅE•­)Âû’ĆÅÞZͶâòEÇ-7ŸÛY´£ÙG[º%Éu~­’ÓæÖÖµCÒ ô^Åïg…p’Þk‘ -os; +UáNý:˨@õ¨ÀBxÂr¶à(5ЉtC99PZ±^@—Ý6±²‰HU³N· +\^Œò•b\E•î6v!¬íU¥g˜xÛnÃÎ{E)À+Øy¬»BkpW”?;£A“ò¼Òóð3Î-§€¢„a¡Õz_Ë‚Ñ*oï:@ù´‰ˆ¶mO27‰—ñvVŒªuVžùÙügøDZ0êöÔ_u›ÙŽL¬áF €ð¿£·ª7¢_è`þþ±bוt’<ñiÎÑÿ“ùì’\$òÜ +]Gƒ–’E¦oA’J +1˜r]œWƒV¯:çÊc¥ëûÞ†2,–u{‡r¸Ý+^Ôy~¯ÄJ HXŸ¢HÇÙc®$ ²]\Åâðx¸Ó[ž›¡ +‰&Á?»+½BþmˆUqéa ­È{ÈMü¼ÿA;Sa´Ê÷´T)ÏKYX<âYÜ”y; _ŒÂâA¼WqîÞü×[Ô„P‚wšÀ_ç›woÎO”у½C‰çL@@`ÄMß¼!¾àS¥püL°  Ë´¶0"§[ õ“”뛿þÿ6†î…šäÝæ ;Àî^‡íõñà@±‹ÉFx\ÀËÐ'‘ã–7\³¿.?¦ÕäB±àQaàð×|°ì"+GÿÔýÅ-Ҁ̘'Éþ¯ß½“ö~qzqzzpxÈ€­êüš%Ü÷OξÖÍëû‰’t/•ÎN|VÔÁÓx j3QÕ¢®GMKOŸÎ6ž.=mµÿi±ÑÛäËÅr¯ñh­×a ®êÔÍu}£®vßìqÃ}©*¦IogS•îâœëâ„'xÃ% %|€Åc¼'ªgÊ*r&SÅcZDÿôh±StPûLçQ§'0_ï”9$Ò$ÇBƒŽøöÒb /'jÖGEëQsÇÃO‘„½E‚sËBx¸³ç `FI°‰25  K'’þi®Ñ#1ÂØÎ²ô~VÑÍ56§3rÖ¥ûDÔËbM²Óšªˆ9ä7¸R¤ä\0W,66• +%¬Áö=A“­üÂvER¢Ë­F«5sl»*VäûM®ÊÉ@C2…ð9™5Âwt2€K‹1k×Þ°ÐØ$pG%‡xä…4ýƒºUêîðBâxECß‘øÁµ±øOz¯ ö—y¯r¾¶Ùilü^qÈ{YƒsgV¼,×Xœ’ðg·½Î⦠+²D˜ÉÇ?$¸n£ã£cvgª/o–`Ôäý……nÑV ¨Ù£j+“ 0ªº7àˆ1ˆª»­‹ÊÏVS&(uº|òàª& ß¿Hcº º\࿪ô`MÑó-`Q¯*Y±Ö+ÀÊ8ñ­»äöûôž³rgÙaF'‚~Õ(obV@Í9ƒCM®UüâeÞÎ=$Ÿ4}tÀ}Mqç,ìdÏNL½cä»à ݆×4ùÛÑW'`fæa£±×/†y^“Ó`¦óŽ%—”ç6#ñJ}´Üá\|ÑßCèÉ $k%ÚJ*ÎýNܲ‘R&qƒDEÞÚ92]Ùc^WÝ0óbXµÛ–!•Ä‘êhg}‰ö=$r +)5J½>C–KØ4ü÷¾ßÈ•e3ºŠÎ¬l×zÎ¤Ïˆé ’r†õ‰‘˜#Mæ3Ƈ@Ûtm+Uõ;’€D¢‹‹‹žæ¼MM|ùí‘þ~zýæRú?­ÿìls}`nwó½½êð\è&àÍDú>|H“ŒŠhÑ`£€…™±sVÞ¦´Úƒ¨ÂLVÓº2ä|é} ÷¼¥ýH(<|Š!ü8°«‰Új•?À[@íY'äˆ#~ˆ†pl˜/@‡ÀnGø¥WßÍ7Hr +7ÀÎ4{ €õ:œó¢Û^%(ßpBÈô½^³`¢fÊs>ÃK0Ùf¿l¯’ãz·#E~Öï-³ÍµI£bZZjñ±KòÙ 2 /T™1@ÕŽÄŸNM•nlðy€ä.)ãdú®€Þ¦˜þ¾ØÌ7]\¢ÅÈDjoåżhv`2ü·œ;{vö +Uÿ d ÿ2ÑHÍ‚uRþÑkß_ŸÒ ýtrÎR@¯¯ß¼‘RûáÍßîww¸~Ñ!Ž¢L?P+m“n/è\ƒò˜ ­Ô’gÝ¢ncæ3¤~ÂxÒ;$‘ø¢h¸'¼b:Ù-ÂÄ‘ çî`˜¡YÆ€)xøÄ(?H®Í¬3 ’_,È€î¯ñÇ_ù¤üR¦]0àâôüäôðp°ç¥€=™ù@Ö ¼¾¤åJ]h¿9zEku¸ßVÙÛª°³ÖUÁÞÖ£"#ÎÓN«è¶f[ª/é ’™CYïI¨ì-!ƒHu®¿bâp•,Œ5²á¾_êR¨~Odkº]+³ÆÚ˜~æNµ5úo8ξP2õkR‘å­ÙǪŽÍbq6ÕëÃõF@›JL=ÃFŒ-ô«‘;²‘t²&•PLà¦}Óë-®‰9‚ŠŽ™=í’bWl~¯jQ»¾®§õäU¥ÞŽÊõ?“ygýÅãÖ3–¨êåà»Ùæb³Ñ|üÝjéÁ=rÚïeÃh“2rÓ2"ÐR%Xœ`•®r¾¹y&(­Z]‚rм +¶,‹^+AŒþ²™µ:@áxDu ?Å™ïŠlö»ÅÇÞ<æì¶ß{¼Ù÷­Cp­ß ÖR`B_MB1Å, ¸5Õ>6ð¥ÓX‡Mp‡oaÌ"“¤õžJµnd;bîgå…“§<ê5zÂtðÔò‘ë:[L +Œ°1#›ý͵N¯`$9à [8ÜØluœs +[þzU<ãß'Å"ªÃ¤ÉA)|ÜR•#R}1;ëÉg³‚Ȩ4yUÇŽo=0ŸrnCÑ‹àE¤¬ÓkÚÜÊ‚9Ü×+ªÍÕ>ÔF¼ºZ¦ÓìC¾R*eH1}œÙQ¯Ì[ÿÍ/UìõkU]IF#ysQŒ "Ab‰7wŽu[¬.F)rù‚9lUpšntýŒf¦Û9¿txÀØ[”ãáþþ¨ÙT¢4‚./¨v©Rc½ÍelDR%;ÎUýÚX$èú>êm©mý„òþ<–Nx$R”›¶’h”jtFÖçã¬é­ƒTy;T©è&VËKÆo¶ºaíb{+Š+ñ6ˆŠÌ¹Q>!±¿”¡Báì”oóvé=„ º©YPßÓÉú&¢Q™·o$‰uSü¹ÀIO¡¼víï²Â5 ]þEi¦Ÿ‡&$€9Ï ô¢ï¾û·Ý) +c]ä9cÅmÿ¤I2—8$+%E1âK'±¦‹óm•‰é¥}D´Ã²_„s·tôÊ^³­.¡I»Y„d°CŸ€¨,Z-É ÊvngÃÞ2ËmаÄP¿êŠÎÓ§ +u“¢2‰¿Br‰êb了þäõµ±”…©±¡¦¼´ÛiXŸ°õ_o$8§5ƒ«ÏAyéŠ'œ‹gñ­Ì +΋ªý5J€ó%b Úû7Â,¯lóþû˓½<÷4ÀSïŒY °Ð†ºÀêAZH‰Þ]ã§vgèFí¶êúJ·–™½aB»°±Ï€yÂ%2—ààÖÙð#jü"{ø&Œ-S¸‡báã'9±6o¡Á›mþŠ@±<­aã(nøÍßýzRâ…þ…X9ñÝõåëׯ/..˜Xt\^¿WvÊòýk&X¾~sñ¥.€T‹ý–$ô%`GÝ'ÌŸ©Îtu9!C÷3!Îb«Ìz*­ïf[ÙN9<íK¢ºUå¼õG´æòŸ²`, 6ÆÑ!£¾J¡ªa>q M2?Òîcú¾ D¶?AfwØø`^¶èKP%ÞjÎ6;úîõ!–û}Ç®:_•{† rû&òÁUŒY²H‰*ಷ(ÝÈØ…\s³Ù[¼ä“¥$€á²Ä€‹5Ñ—ð쩘ë<žmIÇ[/fÙåÜ(ØÛ|̼'‘%€ýlD`"ÅÌBèßon–BºEaDbÔ#çTK ÜfÝZ-<9xØ +sçZHVÅbC ¯¼¹¨÷ÊŽáE‘‰E§n}cSÀNøRb'9±±é»ÉËÅH¯c Y' |¦+“»¢#ÁNR—œñ˜@õ;ñuœKd’õ^…@­ï›bRïu¯h)ÿ"“7{ WcuÉòûqVÔÄ;pý76%9¬­•Ç·UŸÜ«¨)ë6Ëâq¡ò÷9ÍLáüëšà]·÷Jo%Ô”ÐH0j…´=IÐd—p Dù7ÜÅÌÊr¼ÍP³:sn¦o9—ß\Zñó|ì–‹dãæ³+ˆ®÷º¬’,_Æøze.'úÿÒ~à¿áv”¿n·|U–?úC1¿€óŠŽ ÛÑ~b½*Úå˜÷Psžþ"0>g‘ܼMeW€·€ GéÞË[‰­2_Y±ÐÅ®z,äÉGѰ´ þGi¦í¦$ѵ¸ÜÙb2äK¦!.EÌ˽sY¹ÿ3¡KïR¹Nâ`>Êk¢"ofå.ð?á\¼«¸ˆóË‚bä õZ¡ú‹Äf?`?ž¾~óîò´ØÞz3@AœÐÿÝ›ë÷Rmcœ`Ÿý:h0à +%RÔlƒ½õõ¤]»ýÞo'vF +˜±ã?Vü?Ñä¯`⌛zË=$½\¸}±»!ŠŠ@pAìòedÈøýPö ççÞ4X®|ƯdEåPÌþh.°!“ •ö,…¨å9vý†‰§§ÌÜÛ+zÝüàò ë&¾{óîÍ%ƒõ ¸ÿ-ùÅßGýVg¸UUJ…,ø6¼ŠâB™ÓÇw[“öÊf6*Ys±M¹§â,Ë^VöY([áìpï<å6ªsW  +éÖD€9*Pl§Õˆ +ÀÖ’xõ™ªN«7ÜÜP—_Ô×Ä9à.ã¶^•E·)µ8¾‚â‡aÑsÁ€pQa«6©?ùóWOC,„ç UŽêßåbGHà½!;”Þ”8áGg(PÄD˜ÐD#Bâ1â{ÙbQ¾èÑq¢ÜO»·¨|ÕP¬Nc!2(¤µ5ØQH†ÆғΪQSÛlHT'·ûö#Yr(QŠ0í‚°þµÎE‘Øj.wÖr·¸¶$šd9·!% {&ŒÝ@äØ,²L¯5‘zI(L¼‡xÊ6ñA>)KKÅW¶Z;2ªÞ+B@¹ÚØ(]²ÈQex]è‹X¥7D {FQ«Ú-²æì*ª$æýá Å{¬Øl)F§†œ&eà¹lœmNm°àK!ÁNïõYÓ1]x¯d]±)Èì)~=Lÿf¢…óëU­UÞâí0öIjçÝZx8JƒTµ–}Œcþ¼ËôÒ­ïªI¢Â] V,(5É8ïM u€S:i•µòÊ›ã¨Å ,…àaC²vðç]qË1n^®Cï«©ü96Ùï— û—rÉVÕHz´eìTÜ%ñRVƒç,ô9mÓ ý}ñ=#çÀy™-fÕ&Õ€ßÙ\EUê/Äš?1 T{Ö{5üŸ W ¹@k² +0¤üu¯†äž´(óŽ8Y´w±d ùál­ó–,LWåJÁ:w_¢˜u‡ÉU&™o<œô$ty ¨”ç¦ 9tE”·Ú܈Äy¯wÜ_fí̘D‡ûå µž•oÄÁÈYZ–Tƒ,v¨ŸøXÒw@™Wy†,d°;ÊÒŒ„©â2á<Z€ ÕÏUò$!Y^tÉeýD=MD—ã2éú÷ÒªTÔ¯Ðå…©­Ðz&Àû×§{ƒ½éÿ§çÞ ø £Ùd) |ÿwË€>u)ÁR¡&ë'+ÓB`ýôlð`·r'l•¶Ž‰(éí¼èöøºàŸÀè´\‡<€,q#8w£?ò‡É®h‡5_‚‚¢×ý'låc¯óo[ÿôO]ŽV©ƒCLl]n÷øøîæýÇÞIBpº~}ùú’A€{ƒm¯À’ ,¬Œ“lõæÍ%M÷Ð¥Ëà=ôsÖZíU£qxVIÈÛanÏhŸn ýTJ*æÕÈ/_¶£a9êVY³)=–æ¼ýb¿dÓËîÈ[]TUyUæGå°(‡ŒÊQ•¥ëœ¾Âz³Žb?Vµ%†}Ðå§^ÆÄœÍª(77$«Ž÷ûåY¯¥x¼©æ%SÁ†ÌUB±—\<Òª³?K™ŽªÑ ÏZ‹Ý¤öÁK}m•ÊóãêˆqÌJÚ«Që˜n×r¨o_ NWŸþXbßñžÝÇœY”E‘'òW´èßÜ¡u¶Øì«á™*E™6;ß‹›b¤ïvúUµKÕ<äëÛõ…>d`|fƒ¤[EgVP%dDWš6zˆ8rN 1 +DÛPz6%5$×Ò½7ˆP!÷w”§´%—¥bU˜9ÌÁ¡ªr8;Ç™”øêø¬Ø?ºvVû#vA#EW•ª0˜̓ް"ªZekqñYÑ{¦ˆuÿXúWG©èm +‘Ê+½yßA¯Ux;•’Î^¶¥ò¨dÌS¿dÑÔt8:†Ýb¤÷ +–T"6Å£Þ«¼{­V¯<:Sy‘Á.tñ^•R1sD¡+¾}¯å¸tZ³lŸR”¶Sê‹V¥PIs\eì2㚆t¥@ ŠÓMö2é³ °zM#‹¹|ÕïZA)OûÃc¡r¿?*V«ÐWwGH¨è.§ÅUår\ Y*G vc[ÚBØYKÍ–úÔDJ»*ÛѨÚÚ*_U•~^ÓVn¡B²|AÛ£¼­üôÓ¹íA™¯lÛ¶1еü)o®‰’¾Oœ££JcIÇ.u™µÛå‰sßG@âÜsçœ&öÔñîÆpN‚&œëv<ʳò•>£êˆ]dæâÌš8?È·òóxš¦ÔŒAì n4æê=ª–ÉÇzQH–!]–ˆÇ1$VSæ<  1·äÊDË«}q¬DF†+ŸÍ9++ï–;H]æ¦#ç÷GGy{o¬ÂQéoœ ÖÍyÈ’ºÊA;¿r‰†kRA3çJ†~ܳsÀh¸Ïw=ÜW±W¼èÐúRõùôU­®´ó1Q†ŠËÈëyI®IÓVûýu*?T0ùŠ 6Ö——$ö?]ìHfU¡CÊ}¨váÍLžoʬ£@!'ÏD¦‹ÕÄ8§¸ìÁùöJ^É<>crK²©‚(-|åt^|™VâÜO¯/.__ ç_3Àë¼{}²W”lÈJ€oØè:Öd +Z°Çü=M äNPM¯wŒGÐïݺf4ÇþX®ÿßYŸ‡ëð\½»/ø-Ðæb§nËçÂý¯žß‡`;\§ ๽CFX(-] +ö/;·)Ãüpy#>þá® ùu#€‚ôøò€øà‘“’Ž./ö< @€$%6ð@N_è¸ðK¿‡ra9£?<ð†…­ŸEM–=ëtZ«««Y'=붦V;“:ØŽí ,jæU“ÏÏb~ÑZ‘¾ôåuðÅm—p:Uº¢¹¶Zu§t§%“¬õÜê®Û+bÚ²<åÕEyw§~Oj+>õïvÅ©C†äYÁꆵÐP³•gm…`LNÙ¤Ú‹^3©G9AH'÷ƒâ€¼ê&ÜÐ7çžÅÞvö]n{PIߟVÂrFL´t¤FCJ•òJ‚nV•¢Uî[NlZß-f?È8™‘ó"¹H¨&éc¤FîX›(Ïf•ÒUÂÙPŒè@û^·ý]+#›”ñT‰3o=qaw«Žf•‘\¾k=Ím%ãUÅ,†V󮨠gQKuð${¿d…Kà&)“Å‘Ýü›-’'Ã<˜óð£ÞjkQî»™Â&)²¥óªD;½}ÉY¶²Ê{Õ“nFÊïJ^ñö²f¡2=m)5~‘±dÞÈ ò‚å#7íú½ +Uõ^¿·&¤Xf'‰˜¢™¤â|•òvίª««qqü· +"dzµ?à/‰GÒÌ` |ù÷ññ1¨üåÉøêêß«A¶uP$n`õóh4˜l_*Ïå{®«K1¸M0²–Üä?ÕøjDÏ Ír3{ºƒ©ÎÞ¾}õ¯þê·Ñ_Çcy}YFoǃvÖFŠdS¶Ë«qY}üe ` Çã+Õ÷q>¼„YÖ:*¯®ùÏ’"NÊò¥øç£ÃGGÁù™XûYÈqT¼€óªbÞWWÅÖVN0£ŸF?%Ϋ—«‘dõ¼×Ý6ç`¯”‹éÑÃÑøX9Qºñ†f(½Y²×qÀÌ|#S$ã«ñAùËÕ™}<þë~Êó’y>(•EÕèLˆ&7eõ“8¿,ólw’çp>z%GúÎo9_ òöV)Ÿâø–sÄÖ«±‚¿ƒóÑy>fYDò|tõö—·oÇg£ñ+e:obT]OTnI²_äàH‚ù²×Zf»#ÕrÓäÿôIDAT%O¥ÿ÷$ËEé•¶0”#€~ùLš’ºº„5E8ßeé‘eÅ«]lµ»ƒÑøDÃöOÕO£ñv0º¼:RHôì˜ø$ZçÙ |iÎÇoEc d­Š ïúh|u¾ÕZùÊ‘ þ „à±€ï„ôo>ç½àA¬ðú’mxýþÝ Mï=€žp`ñƒ1–¾eÀ°öïŸ> +Q§Æi£¬˜©É@`/E\Ïú!Ø úlË/aº‰ÛÛGÛpR ˜èòïET´@pËߣ]Obú†§ˆôãG¸ÒU¶îïw÷:¿ÜÊÀÂÍßió`h¿®TëÏ$ôg™¤óó“ÓÃh(/ ,£åäµ; ¾Ðpaº‡V[ÍÇ\³î¬QɈE•ÙÕµ©»öªªÝUPWueStžI:ÈVÛò×®AŽkÖü3ð¢šPÁ5±5[ͦGnA Ì›õ V³R;M¸ÍÄiè45˧¢j~gæ 3¬¶%ŠLíJ)ˆo¶Äï3XgE\9˜à×٬ăf›4­¶Á¾ànUÅ#®àR÷ÍæwDÚ–?¯´ã"i2õ=¤=~¼¨ë¬²ÿ qn·ZIÚŠîmHìåäB@»HŸxã1í+jœÏ.*#‚#üËNû!åù%§b5ÌW%ºµ0Š''•DûO20Ͳ? Qk +õÒ ÿÍÐ_\JšÑ+_p†ñ­6g•zżåÛPáѱøÝw‹bIñéÌè%¬üKFÆ~¼:ëBŒ1ƒáNïµoÒ¬#tð¤Œ_µx"Ðx[)mY°²; .•hvµÅ{×ú5‘WÆb3Õü9ëä\Üý¹­lÐ{½Ëœ‚çÏè Ï·Ä®X— ÔîªrU]ì v–MM8ȶºúz©|{Ý­^®§LŽõü|åÉ€$gw6Õúxöv3=‹Ûì·¾½oµ›Éów1|îèD +Æcj÷0R¶›ùVoKâ–tk¢Lþjÿº+òçOŒ9‹r¡òšM¡.º[âörÝÁEWÜ›©'ƒ=iù¥œ;†-³Â‘K6yÞÜú‹’îàŃ13­üçݨ0ÙŸe"¦ÞAãñc}4‹¬ñ5ûÍ#–¬²0;×pÑ‹…g©Ì›Šæ9·]ç9¬3T#Ïz[ÁùóçOöÆmpÎ`ÜOq.Wÿ’I:»Í4QÜoùBì“Sw?ù?¶p­—ëLGÓ””çí­œtœK«ïkðàísJ!¥–¯„¿*Dd¾‡¤â®ÊæñãÿfñzŠdGM½ºBżšm ¶‹­æÊ Rt—ÄxŽ”ÂþöàÉÊó­-ñMé•`²|OÈËìIó+Gœû‰Nìkº«éx-¬¿¹~}²Ç,@vf ]Ù2¿¾¾»¹ñz@àfqá$z²L Ü`¬ ¾@'kîÝœŒ³FiÀ3kþ‰@YßÈ™»ÐØ1ñÕÃöh…³€{‰L& í@W AÄÁAÂz~îJó?"À&ýp›ÿI4þð(F$üÃiö,€÷ìŠè‰þʘËó7磓ƒ’…€¶..ú×ïÞ¿»–dõ†!i°Åo(ļ{q™^¼œ–d‰„!^ºÙµè!r[»Òª~¸_®v%dÊ„iK;å¾n)ò!-A^¨Éh|”09>Eñ&-T•å'LZO¥|t;–å"Í~Ráä+W D(1¶â±G³n覥yŸ…ºéÇ2óhU·bKÜ=>.ûRZ2R‘Én±³¿»C"$ ãLn†UÓí +~¨Æ¬}ú‚E¿Ýû© +Ãv +W'Z²ÕRÒÞ¤  öÊJÊòöB©yÑk½eþÌ;w¾@õRNÉ‘R¡`*7õZÊÐ’fΕ¾œÄ9Q±Ó¤®•BL3ÞH¹õÌ=â8DËŽœ“ÄŽt_)ÿ/{ù¡²@ÙîÆà˜Û—ÑN‘¿€M¥³Ð{Å{Å#éÚer°¢Ü©v1Ú/wéf¯ù¬ªS/þv\XоÇêcª•WdÔn«Ð¡ Ñ”í{ŸäÜ÷RŸ`¤5:P©¢Â|˜9å& +Gä"±ey5äm`s4mã^I<ÆàxTíÐÏÀ{uAûSïuC©mv¨•a(2*KLz ë”…Âð@.©Ü1TM)Í»*lf=ˆöM%gzaÁÂ]šyþ¨ÙÌWVV[+Q£R³ +™„hÞ* ênmé]þ †X®HHÔ¯Õ^‘;UÈr©ªWÊaÈ!Í–ÌWåôù¿<Éä.“‚oã¿Òº0ÈT-ÛIKœ!ó4e Šc³s—»=iæº_Wœ&ç¢à¤dl=iÊ."j{0çŠC›Iî–x‡\ˆ…D¼\2ž¼˜s˜ ŸPó‰Òp?B~@Ê9iÎE635ÍEP/Ñì#ÈàozdÉYª +ÉCÀ‡© ç]ñœK¤OœÃ®dÝ^‘}Þ ÁÎ#ÏÛ¹´²Gö‘^— 0!áÏ%æ:¥wD +jÆÉt‚žÊÇ)r(*Ï‘pœéY¶²ÂŒèÑ£¹Yð±))VèÿÝl’« žÈ¤lÈsBö«ku÷ܧËZ¸~ "—³§+Šd·ÿ…ìÎÍyâbÆïå\¡Â×(AýýdýôÒ-ýRh…iïß]žJpdàéù9ÆÒþ™À~@"á¿ ôÃ?˜(éCMŽvr¡iRü­‚iñ—` ]ð*87–ì!L Õ{½Å¯žÐ9@0n-Ð-ÖýñSØ›¸•™RDÉ8°ýFÒC0ö+ +â ka»e:(Ø@’™ 0Î’ÇúÙ˜ŽŽïhêþ{'à÷4‹Ðpñúòüôôðpoo{[À¹„¥÷ô°Ð†P^2òJµØ}Ô{±Y ŽªÕÑxŸ*õX¢Íœ±Q‚)ÕôöûeuöªüÿSöwËmeWš.¬Œpä×Ñ-f%-æIëı#’Î2ˆ¨€L ˜D ŽEâ2ûjp¨]Ã"h¡eîR –¶X;µu .…¼[™g>«KpÝÅ÷<ï\ ˜N¥{Öšk®9Çóçcþî̇šd–ˆmœþj³=©gÓA§±Ã«ÌgK_kiŠC·ÜãºÞÛùÚÆy2Øleïí;›auî$p´_½1À3¡‡öFêsS䤶£pX‰ØŽY9\Þ'=íØÕvíÌ—ýŒ„%dõ}w…J—· +ŠovË$Žåq8Ⱦ3Ø8)Ëù‚íaµ¨úçÀnm"t7É1è0:qms¶¨zuµ˜É Yw˜tóÃõ~5ÚU¨b±ÊÅpˆ:ÑGZb˜þÖ³דÄÎúCOõ)ñพӂ~îV‡K€øÌ¡ðÖÏݪ„ˆ8ms¸?9žU¥†£så.¼…Y0·ßo†{vt:Ú8Ú'Hn؆1æ$Í}5œ·ï»Üõ„Û3oÏ„u(ž@ëÁ¼äk›gEèÓéGæ&f‹³YÖ&z6]õýòüôÝl¨L(•F°þÃÚ¡äòèZÕÈ*Ì€E•:0©-áõoé +ø©{0]¡žOQuÐÛÂ5ÍiâÊh3Þh°zVOÔ-=®^õÍ.iïë7oæó¦¨7cwlæèºÝÑxJÉäÉ}ÕÐŒPÛ5_ö¹oVËùèà€—”Sºìë¹Øˆú4Š“]Ù-£va:Åä&òæéÉ)Ê-ϦG¼ƒO^)jè‹$¿p2ÍaIôºä.´ùËM·17()!ìØ÷m\P³ppΗÿ‘öÓTÓ¤%2.ýá›wVß/dlÎyr4êÿF× CIÎç÷ùÓð´\.«ƒ›%Œ aú§õi<š=¥œó¢>‘•J/òˆ«R›ÿët48¸ñ›å)±bïä­O³_øÖ…´r2kuÔì oï쨩gÚÇð.mM@¤ùèbÉø€Jè['æL5êŽäüÈRů ã^“§«gÓ¹žq7×ç0N–4ËDÍ«T5e%ç௄F„ZÀù8ÙÏŸ©þd¢ß«) +ÕüÑ£GOŸºàÕË·.|¥ü½]áü¸¼ÏéÎ*{´Û)wÜŠ²x>â®f5·`|ž¨ Dš·(ñξ?zŒѾ[ž–ÌÌÕÚñï+Ñ*ò¶ÏâÙko‹f¿îOðWû1ðjOEBFCH€I”ªMBÄî7¡&ñýwN†ðÀ¿w¯²ÝÏË—Ïž>]>>uE• aA¯²‰bQ°>Jɽ’uK$íÔgÎK]s6©ð(MnLÌf¿?[t´ÁZ× ª>œªûlaëP!Àë–Ví0+½ZºÅgëk[hgk ¯ööâŒG( j¢Ñ>‰C·îÜž¬Ñ¡ +Ue +*ÁÜïËþˆ÷ÿi×ÑAxÅö.Q<ò rj±ê‰ÃÄF›Êó˜ÆÃêîµAÌÝRø¡Ì¸qEw|À5¡×£ÞÌ©yíʽ[eÅ{=&*}Ÿ}Nÿ+³uìAØuÅ£‹$,p¾]×’!|ï’ä‚´Tí8Ã>W¦Õä’H;iœi¯;êR=íÌÜ•¶hc‰·~ËEï–3¬fµÛËÅŸkaƒD´Ì ;)mP½ôVHN)W—©¸_m´/³ÇRƒŠÞ¦±ì+™Sœ*.qº‹ŠÃ£ä«ÈìĵŢ;Dw2SU ý/éPÚ¯z›×òqBôÐé+­ÐÀô†»‘œ›ÌC•ǵ&„°—ÒâÊIÔÇégíØíŸ6Î4\6ËçgK畹³.€’Ÿ/2ŸªYžmƒõ²>q"eZìû£´Í¿ÛÒ»pŸû9ˆ(õi#B“£ñuþ0ÚÃô~Ašúƒþòìa=¥öÙgh°!£{.@ÂYuWÍðUet„À-^a"¾/çr¤zqÜœLÍÉaÕüÛò„˜«žŒˆ÷“rÞœáã[§ì 7÷)d+šƒƒ)aF·ð–×à\ÎŒ×!s"¿ 0W÷K-KùfgµÓ8'ûf\а«m­Qì,ÿ `˜…¡Msç³å±ÜrGKðœˆÁÄÙbU£›•î‘€,†ÎMsþܾE8Gœ&{áp¶õQ¿È}˺¯G¦`i‘ù³ÑÍf… +#9j(#>y7íà*2Ÿ’¾G†Áã¼=íwFo&÷ö“³Én7ØúâË-WR²ww÷hCzÛÔêo¥¤"[–o+ù Áò]Ä–È«úé° ç·DU7™«aŠIà•@þFùŠB÷û¨:-çwi?Âù¢>žEoleU¨'uô‚„ùÓôøïÑÓb”øŸÿœñ÷ôt\ýf<ŸÛðÌþô‚²E@Ïr@ ß¾0²à©&¼¨*Hë\ ªÆf”ƒÉ<tý>tôߢ¾’.ÚîÁâ`sîZ”Ž~à³t1ïèöˆA`ý{ÇýExïðÿ×ø®† NßþÚøô¥×M™,P‚w?v}$ýïÞ}÷Î^~e“—8`üèÙ‹lˆ4_8Aàå+äûqrBçÇ(m/­_]w=#“æB©¬$áI¦ê“ÙöصݪiOÝ¢áÔŽ„cߨ‡ˬ©B²]»¨½i™o©²:ñí6W·ú·b]M1Í>ÕvÝLêÁhñûY±m‡#A¢Âò(l„°àýÑ +å!L…gðb@`æªíôö  B®Lä%6[pZÓh{XcTûÅ$,ka +ÕzK–ÇW}ZùÉáî.©ÂÅmy^˜ð$‰Xvjôjè}—zÃ~ûÆèÚ°º@hˆþ JÁ‰a:gx³Ð¨Ó;m/Ê59ã•\¥ªšjœgµ +@Ñ€¼ +áùÂle³†‚õû“% +`3"d¿kMÁ—PìºMu·¬•4²ö™wJÉH®n ¦ž¬ŠË—Œ…9K™>ö¸_ÿñ÷¸¶y‘…I!'²—B‡À,fýñ¬²) àClU³r‡„VzÕX @Ц¹c.©‘Ù•~G_¹;ÞȲA,p59Dmr„kv"sDþ#úy +ÀÁª°]ì’˜PI”ëìÌ(Ä›ûÛ£¹šj’h)¦ùå iRO\¢ˆÎYðPŠ ùÂøîðƒ†-蔲ù°9è:”¢¸¦ˆy?ý(*_¥S¬„ËkÓ“’oBîwÿ%/Õ}{ÓZÎe'Mƒð¾l¾éOy¡>LÚ€b2MÇ®çŒ#Úf0ÿ\é8n÷Їø½à¼>u´F¿ëWû+ñ4ÕÅrjŽªa»?T…ÜØøüê•+_ħ¥¦8Ì–Ä®²ƒ­Y·+Ãah´'Ÿ3P¤.œ§7eMõ“AwºBhÊI¥ô‚ÖŒWõùÎyõ’Ìí­ à+=b^Ë<ä;Yš˜êzt#k !2À­€IŽÇ~Ù ð%š¸WíÞ™uœ ­åpÑ8)/µÔJûÐ>ö'g£v'B˜ýÀù˜›6sêÕÔ•Š€È%“Öå¼dµkâUâaû›÷ÓÔZœ'ì×®|õÚÑê/µg³.|ôøéãv}Àë·¯…½·ö«`ýùމ«—ªéeçZ@K¿i­|„Ú¨¸d@@V*×í%jåß7 ÓK0~Ï"wFNÀ<Ï­“ýøõ½õø±ü î£!´üì×ç¹”!Œ’f³@‡´úqç†d:ëÁ4›t÷EŽTÒÑÿìôé£9äd›GÁ~ðÿ¢´kzöôãÔæÎˆL&S'ÕlÖý Hq’l¦å¦,Ð<ް!“çÍØlP”Ö@'KŠ¿¾aá¨ûè!ši‹ Àë @GW¿·&í-§´ØzÏã˲ÌÕnÞ– -þbX©¨EÐú—Šfí*“q‚E…E9yÜÉü® _Âݯš»ÛYÒœB¼fµåC½ºt\Å +5‰wÛDkÖ‹@À +á,ªþâ QÙ Mú@ô HU€ÔØög³áNSíß3Â+w£ñÎ~»ïéÚìΆI^¸JßÍz¢%HÖX$‡è:Ç'Äh·uKr•š ÷Z±£®v1£;-yš7 6ý­ïM%ÿ¸ãY'ùÚ£¥"ɉN¥ãò5…a^à•BŠ®¿ý°t°S€ä*Í!EçÌ™±<êÕâw@DfkÂðB%Qh1UÃe–—©t¢E]$Ä­ª-pa"ê-ýöU”dòÝëß@éé—-+©Ï²DMÎ¥ü]Ñó?¢~ÎÈ¥aÙ§À«–ihqÂÍ1 +@½Á‡²È B++Ó_Âd=»ø<„“9™¥ŸµëëÙ0»÷H˜î}Oä§l¡äŠ€»ï‰k«Tá#”G6úÉŠfÚïGÃY³YìcÔÓòä䛾ù”%i^ðú˜ÌB´¼çŽ:¬wÊëM38ÿ :[ÿ‡ +çÑzŒÍã #39(ØA3‹¹õÍ®Èè©=a`ßÖÖ/ƒþÙ9ïÊ•Ï3:LL.é5ź¸FÙŒX¬:]eÞ,âæ•Ìqâw²À;œßG) N¾ÚmµØ‡{-¯7œçu}Toª›H~8ò¬åŽäõ"kTh£„™i¸Š"Dº;õJ¥Mš¸P€„š3É{ÃÆ]°{»²º¦ÞVOÿ²×Û§Ž*”Ì’¨¹®BHž›ÅN‚ÖÌ*-è¨ZÕ*Ã1œSRœ±éC´óõ‡œCeKJÃwাÿwþ +ýýÝ à…SÚ_½xñêÝ‹g§Žh§§OŸiÈ– ooß~÷ÎY€"`,aáÐ-rDÍŒ øû—ïsô^As5ƒr +Œ•u³;>¤Ñ-Þç¯tÄ«X®» ÿ/ôï2‚Iïuâø¾Ì)àƒôØüƒ7ÂÕêçM¯ÊE-Œþ5S|ÝÅ¤3£¤Æ­„P ¾ûþýk§<´]ß}çº÷ûs€gO7MÇ”¸,T’Xþö­ô­¦õ#Šåõ¢B”ŠR÷gÏÿ'J(Ì•‚½ï6Þqû@©ÌugDõÖK‰Æ¾Y“Q!(4(èN>'•ì·†éÜÀ{ –¦kRû+›_m lA YpS×ÛížyÒî¯ok°®7±¡ŽÇÕÿì`WŽAÛÂÕÉy{™¥Q!±²ßHý pk¾vgÿ÷Bî€öt´db÷öÜ`Ý­¡“FÉE½1Ç ž‘ÆÉr˜-nö¢~Ùªäa+Ú5©’…l»—U‡æÇÜ‚‡4Çbëì·3rG5#4i†õó?¦Ð¡°$O>à ›õ¾:;ÞAÍJ8:˜±‰HÎi +eâ•ËôñL4£¸5“D ýAïvï¶{'LB"‰…¹ã€µûµ%¯ÿ–~–Ð=pÿ2™Xþóp²Tu®'9~EQdÕ³e9ÒšŒ–Bö« ”Ò¿.Ž’æÜº§ ž÷»ä"Øj“néȼ¦IÛO<¯‰ç‰…À »·?ÝF…óIåÛã õ»?jFàf(üÇἄҌÈ9•cæ‡6 .ü@¹. +A½<èL‰:tY¨º-†|ßNŸ”DçÞ ]c@”! 2ôùÆ•+v‡_"ç2ñ—L9§<ö?숟Ã{î çÙ†PÔ¶ù墾ž Ó¥]îÓü×·è¥IIs¡Ð[™»ÓãZæ|ßHNé骛ñö´,y†õrðçî^»‡ð=€ëšM€Ä»¹èõHy´„ÞánÕ6!|`ê¸ ±„Z’W¶×JØä|LäâÇœ;ÎýŠç¬â¹V?üIjç'èÅ 1ê…þñûx>í8]>~öìUŽ xåIÁe7`ð]&ŠþþÄ^v²<¨é¼@ÕÀI§Â¶ÀžßBÜý@Ö© ?ðì”=ŸÅ\ç-]ý÷¶ôˆæeÓ€â±ü”‰ý^¢ø}¡DEÈ"º3‰Ëx2M LgAð/¬z—!ïù +þÞs¡.`GÉN€®ò{úâi3tZ–9 Ð>€gÏ|òâÅãåOõ8ôõ1"›Ý–G ¨ÿï³ß“ù‹=máM$éIJ–,³ºï©Û)ÖüÓ:4ÏSÖt9¶Ù×-å$eÕ)´¢™¨† ?6SüTÕW¥¨êµ¦ºÍa«ÀL žÌÕÙ¿,—´ø¿§ùÑïL „§Ù¬j‹‘Õ2wKç ¤o°~rœžÆK•âòUž[¬Ú+ôðP4šŠAxÛqÕ¡{±Bieøšú3lŒTƒ º}Q! BN†ýsbqAD²‡pvRû¤îÿŸ\ü6ƽ:Ýß’Ý $ä¸î.£Øµ îÊŒ t8[Œ£”¦+˜o‘ªxI³I–;åW.õi’Ñ4«˜;@ÞÚ¡ØLþOD7Ñ» Ô‹rÒMÈL„¹ Š]lî)XNFd lFù (T… ¯o•1§$sxû7ÀK5+ Üh(UiÑŽ)oE'æç;kºâ4ªDÝAkEË$$þ¦š`›ÖÕä„Ðg³ñvßU.²_õw¼Dú.ñ¢U'02…Â3r¹©ô¢˜õQæYÐèðq·¿¶E ¹dÍ9eÞ},'ƒðT$[ÂØËÔÏpîÃDåp å¼àÇ•ÿ"ÔRÎ'÷O7JxÿÛŽÓXÚIN¶ð”ì@[Õ|pŸ\5€–¶T.ÇË5V;åØê€ð;•ΓªÓÍ"w¹õ $¾–y]æ>¯Éfh‰ÎwÌ'[HªWˆŠ]5Ó›#jªKdµk€Hu½Š*rËXŠ WòÍ0ªóÑÍÌ%HaÙïm}úé•OÝáøs7¾Þ»¾»ïžV“agsx[u¶´œ2Ü+G!º°#—¦Ý¡*î/‡7K¸ÄT:+ +ç^šÉ°„êBÙĺq¡)dFŠ‹œ§˜Ô4£á*xFX:ÔOR1õ‚ÒÌ»p{Ö©kÏÇGÓ£#G< àå¹P÷Ú™oÎxïÔ¿÷ïíÇú×ÈI-BoËu±¢EÕùÀv&÷ÇâN'=ä£ ›B‰ðW‡XðÅ¢ç./êŠZ€X=¡íOÐÙ§.âoüãV75‚„œxõœ`Ô$dÑà ôW ÿh ebÞ¿WIPÓq<@ À.€ïÞ;#âõk7HFdnôøôÑühªðøO^dw€§Î®xúøqÁû¿¥ŸèøýŒêálŠ{öoXŠZcÑp …PJM_‡”о§nÿÖ¢!QˆKZ†÷ÙjÔnoéK”™4 X9¤Âó,¬´NÅ$«†›å íK¿ïÙOyob¢.ÓRŒªo±Õì6!¤&KiÍÒW\ÏŽUêÙŠmøEuhN&³“”èóÚyiÖçüÊÆ.‘õ2jD]HÀÚÚÜÓWûþXC`/\÷žpÓ¹ò²u4õüw‚3ÓÐ;?Ü/ãecS [9'á-;½2Á¨²§ÚlE㺨ã„ÜÓR² s“†’~—aöqÖ;³ç‹ßiÜÊÝ¥žó rïÞúêœÐØ*³„Çe³¬w4q>Öá]Z€R4ÌXZ„¢ð…‹¯µÙ}›Öd^mÀørºÇÎè£Ðý~vÒ8MaÒ ê?›¯0wh®Ø¼dFy6†„®ÉŠ”‘ó•¶tâì* ¹.3Rj»-hÒ¼ö.}(kÑiå”q§z§(v!q”„ÂE®9i(V? Iu¥U™ÿ.©¤yðÛãê&E¸tJ‘ê–s¾ÆwÊn¹!Ë5Þjûp>í‘>/ªÑæ[¡OÈhs2éÈ,ñ?… ”¥ˆ.fž¬lႉCK.2§ˆ1¶/)]»_n\ùäP]dω,[Ú†]€Âm̃´.-þÛ¿åê¹²ñ…£ûׯ;Üá(üw®)¯¾V…ÛÜÛúÂCTl J‹ñëò3ÙG¦¥ïÂ[¸å §½Ñ>:X´ú°ö”èËœgÀзdhñírv2sNLÑÛâBh©›ëròQj‘þ'èñ3lÔgeÄ: +À«§ŽÆÓéüèÑcðõìå˨¯Þ½÷Z왢fÔ1Vü/r +Ù9¶Ï+‘Õév ¶.ñœnq6öwTïדï}7—ú+ÝÆ‚¯ï :ÿ%’¨¹ßíý‡1{þ +ˆãâ¼{äR뿼fŸÁ_œÃO¸"ÞóÅŸß—;A<áõ[—O–mN=z4­FƒÑü±t÷_´ª§(§§­ ÿ–R ~’šY³ê:MÑæ£t÷r·¹îröº_cPc1Q$jm±S»\ï4,#¿-Yn]OOùESL‘eçÖáí«ý‰… Jxžzeã­ú.;áïÛQ­{|Q[ …Ñ7°ÀÏh®¬U lòÛh% µÛš/«mǤ5‹Ä* µN­‘¬&_u†«¶÷.(VüÞv” ++pý뎻Ìó(àH ¼mR3—BÌN¤‡³Ao‘Y ÖjT.ìvæ’W'ÕµÛ‡ÔἺ;t}ó 0âÊ<Àÿn&Ò~lš„îØBáXu;tEW?ÝYü rÌÃ’pgæ¯Iv¤É²ÚÄ‹Á¬6A8*_ÂCZiëÁØ2V®üÁYþÔÃìà†Î0”ÿÂÙäAgWÀlöïÃÿkÖy¹Ðýˆ4€;9pÂøÒÅX‡/rÏ¢Û@ +<$Evû‹'_.¨™02QF³¶à˜«…¹"·–Z@¿D?¯`T?J¼RÛÀzAØ™:k Œ¶G+ +Š,c†1†«¼Mˆ&¼Ý¹| Û¹ø¥fS +˜ 5Ó® tË <<øp4Ò¨ AÓI}öíbáÉæ–Ÿ52yÌG]-¸È†–sÄ‹¸Ëdr6;þ-xØ,2ˆ}]B±ëB~ áÆWI÷Á`þ§5çê<WwbU[NûoXŠ‘^Ôî h[ŒjvæIÉIç|ùÐ_椠T1¨ÌòÏê¥RÜŠÌëÅýtzcàÖï w²!Èhü©hp>©×sÆê2‡¹G¸p~Œ*+\³°ÅX]2Ëó!ZfÕ4ß6™÷¡ã`{c% _ÕùÈ3FÚlÀã€?þ¿HÀ­[âÿîd¸µY„Gú•G¿7°äóࡨFÎ,ŠPÛº +‹²eå¼(q.>xlÀÔê[5³ç-éšsñ?R»ãp”G£p>N1T»²ùy x=˦ÓéÑ£GX°OÍþÒcmÞ½}ýèÏ8{ÃAg;Öµ‘c=«³éÄEËŒ ¨p¯³W!a_Àš…sõÁX/ÚÿÚèÅ«ì!)OÀv; Š»>í¯7·!ç¤Ç‰gâÀÄdÿ_§ ü“=¨3ðbn´ÿç]’þ÷99ùõë—¯±ð_¾DO:=m¦Gîøè±ç*¸üÿr}zÊÿO)ÖâSÛâ÷›çüˆì«á}¸Es¬»µÌ,¶h€QÀÿcôÊ Œ™ËÌþ=×¾YʬÏBš—ܤèî\ÅSPˆúšF[¥Øi­8/}öÛeXi(â/…Yà îÐE–ýjæ@°ÂÜñïOÂ\3{Ðz‚ïaˆÈYûd{OÅAF[ªÒR§5l'#ð°iATâ6"’¶U¦r­×½õºÂý»EIÓá¢ßÃÒùi(ñ­ïüçÝí‘ †¦VÓÏ›ŸvÏP¤~ï–ä·=Î>=i8¹‚`TÃÇŒ ‡Ë5 SéÓ2ðëEË£D‡3Ï6&è[»{NSP. ÐÌkí¢¿ƒ“m¤ƒB|‘¬+^D(¡I˜‰#‡!3®4€EaÌÑb .¤)|~P?·à‡cîvæø.4iŽ;ÕYÂðŽ( È—2Wdáa%ÞÒ­”ÎS|á)ºV§[SE1mJ9"$QÎ`Ó«SDW””ÒÜçÿèÿ¦[Ú\0Ÿ^6yUÊJRÏÆÛÃ¥µÂ$ KÚëÚÄ“ã!'ËïQÆMmé°ÆeÁL¸SÝ/ÏunxÑ¢OY-PÕwºF)µ¡®Ï<›^ÖsÔÊGÎý¬&Qñf¥¨_ÝjGé7ðÕº™~ã±øÉî=G[Îí½Hÿádû@²ŠDü/@ +çâcˆ––ƒÙQÊTy“|ïìtvð$øLf"§0ç99Ú¾@`O- Ì¸Y_„h2^—;뚺ƒÛú@Æøh9GÜí0@!S½O™¯ëuÿ += TûÏ +uiq[œ0²?ä…«ž­š2¾äCª|d~fã$Oi¾ÊÔËá­/7Ю˜¢­/¯_¿u½·›Īô¨ÇîÆ@À<è8â©Á÷^»^¨Ÿ3> øðp\FƒÆ‘·Ky§Ì´é<|QÙâ‡ò’sŒäÜ]”)-} +²¬?_Îi ëˆÉ‚„¬“šS 8?EØÿ*€¯^¾zú¨rà£ÓG§_x€“Ú<)èu6(ƒ¨IlcPUˆÌܹ¿¦g½ØÎö˜kvâ…UA]DUw½óõLôŠy›Gy>ÿ'fyéž/^ýFó« /Å…K=ñ-Æ ÞÄPú#TTBŒÒmyÃrœ¡°e×€Ú @cÉ3u¹çËt¼/f €3!Þ½Ï?ÎtœYe#€ñ… %êå á>~„ +ðQ2#?NìÐP¿é.¾µÿÓ¼ÿAþ¦´ù;iPJǤ,°±YüÓÂÅæT³Agä\[+þ­ãAó‚büy`Ù*ª†Wo,ZG½G›ç|v5h9ª +P`j'ÖQi÷€³ŒLÛU|Ütu ÿŽÚR¾í—@=±¿xv¼°¦¥ŠÁ2 +Oè “{6.peC•¤JöõÕS÷G_`D!¦D(”iª­œ`¡"%'\ ¹›ìã~‡¨2Ÿ‰0tx3áL†›ÀJë¾×ûõ°ÝÖßErhõž¡õ\Ǧidg +6 +Ùº˜f±&Ýí†|¶3[þ–¬±÷Äèû®^×¼‘v¸®Ý!*&</'äÀì·±×Qldë¾ ”µÄTâÜ”\ž–•Ç˪s¿)ÊÂÊO®(nrEӬРêç «ÚÙz«ÐRœ÷ð0¿é I€Ú „Åì÷vðà±nãÏhûv’¢p©äŠ”K +ùñ©r8ÝÉøvÏOUˆèdèÁìÁªÅ‡¿ŸÕ@ñÏax¥²ð‘U ÑŸ"}f_Ù¢ÚvQ<û…`?8Z-#Yª$3»R:Ë.•dIZ¼Z: 0ë]j‘™á”@{xU}›ú|Aò|$©NÐþs?i{]¬×vû9° ‡óãúøìw é¢nÏ–Ý/ѦC JÍ>uXe§>Tö@²ƒ9EÃd„„ì—v¤gƱlïÃyyÑFTþj¿™‘‡žö|i€Ÿ–I€Øì2žd— +ãN:Uæã'N²-Ë÷Ýј|˜ç?„ÙL51ƒôˆ£ŽÿÛËq±ÎQêRÝÉHJÁQeNYôMZ̳•ƒ>‚”9 {h—a攢C½­O¯xpLûë=·£Ž¢ïw¶SŒ +üG2_£ü““" ]çѺRî÷‡B6ª‹5Rv|Á Á_F×}ºöBY$ÚI k¡¸ã¿§Œj^^.óú1¯ÅÁ¹ls]uCÕ¢„†O=E90±3@Ä— %}%"oÕ]ìè0€‚þ$Ýÿv‘+'ž¢€ò§*ƒÁ¨~Œº$þ¿@™ÿOø8­ ý¿%-±4{³çýúlád64ía[%Ü`†ÛÒ¢ÕT¤n½¨`•ÓTZ îÍÎ~ßœ>˜MúÝx´š§ít;ÁÆr(‰Šüü:׆z2¼º—âÁç‹Âvh{ Ù‘ÍÏù°ò´®¹k}Ø6Ùж‹ÜNN}ôØì/<ªyçwüIõh{ ¶MEˆõáGÔŽŸš8M›Ñ{$·îLï œ+¤²]ÕÖ¦1œO†ñ œÃO$ ´cùNhiîOë‰ñjöø­&¿Í[L²á6 +@àK“õ$*÷ªàÿ.UôV÷÷ëþºõ•Æ/ ÂÄ÷r§^˜?drÛÒ´Ã °¾¿/œcûûMµ™¾‹è„äú)ÞÂL‡Éºêï$_>ECËÀP"Iˆg"SäÚT7›œ²„&à¡Ì"¦`c£x¾9¨—ä«û½­,ó4¼sKHF5X§ÉW_%É€¾Ì­g¢¶ûF.b”)ÿÑcÚñŒ$Ól +(Zlä‘ÞÌ–9cëà‘æ“üW´ðÿu‡9eÖÆ7ƒå‘ŒÈ/†ÎšßŸYQÆ" ‚³=.œE9A¼ânZn?–í¥€€×}ï|«÷ÞIVØåP¯Ê0ë)Ú’`=¤¼dv—_m›‹®áP‘ªºé÷©×¥ë`dV¿8•úÇWó' Ñ8w§£` ?„ï²2â*ç Ê8»6…ñzpP¶p‚Â:eHñJ^ÖÕô|Ô©š¢l€æ’°³³³ß«‡û[ã¸Ðõ/·¶¾ˆõ¿±ñɆûìóvø–”<±ë·´‹sûÏênߣ§×œ‡•5甊 xö籎RêúhÐͪ!)ñçÛ €ø&Õ0:n²ÒÒcYWç,̺z2QíR¤üÇMˆ›'®Æ §ÆàsT™O66¾¸þåuçÜÚ°¿‡Ö±³å¼Žv%‹m€]’ö_~ÐRàëýá}ëD5ÄpI\…k-X_ê­e]C.ÃP£ èDxÅ«Œ+–Ak29§LäY¼™³ìÜKÕÿ j‘þãä8?øÿÒµO] ðêÅÓGøq=ôøñ©»áæNïÜ 0 3  a,Œr*j%‹ß€³,Ô{Óª¶þgÉ~`Ö.6[„àòF® 5jÈýy_‚ðÿ‰E-@O™ø×ÿü+šÈwÆM¸°¥?ßÝJ§Ã{œ|ã{ܾf:ìÄêûÁ¨ØýÜýM£ZÀûw¢?ØïI÷#¹§§?š×GãÁÐU¯^9–bÀãÇKGZÀÿ[¢ö~”šÙó³³Åù¿ý¹F8ãúù·‹…ç?ÒŽ-–n]ZöÂt°Š– YλÕj±8_.NVMÝœ5‹oÏQš9[¬žÔÕK…úcóZ/WKZwí"Qg/Wg9¯…ÒL¹kÐs¸tJxí–\î•N󻤭í›ÙÙóÕâìüÛÕ`´»Õ›Õ“Ùlå†ÞDM[Û¬ìSåµ)-v³lPHÍ™§‘âcyòüßΞ4³å¿ðr=u¬«ßxxæ–ËùãÎHIïêœ4Ù,—ÏW„7ýÓêÏgOHÜC<5«fâæ¬Î(&ˆœÐ«~çÞÉì÷¿ýí™ínêÖm´¥~ßýÔEZÑQB$NIÀeÖLg‹øÖµ¨öû¿Äb óg ò¤Ø==8÷j¹‚×áÞ±Z|ÝÀø`X¯ÞŸ+¯šCg{/‘·S'ž“q«óó +…mñ’þç'Íd¶\߯˞rÍq2eiÞðÍsÇýfÕp¶œ-¾}n¯ïr1;;™Œºn.ŽÄ›ÉW„ç\yZ;©›óç+ϵmæ°†HV‹ª?}ó­ŽQÚ4«Õ¬A4ÈY“¯gg0÷¦T‹32çìß–‹z–BG¾¢9€Sëú>E…„5ˇýju¶ø–’º:©gøxN¡£m2[<™Tƒ™£s%¥"Øns¦\GÍbù$«Iûcržâ3¨ž?sF8ç›åsK|#ËcŠË¿­–ðôälyùïJ]v½ý»Ô--áÆÞØÄIYÿAÑÙìO  åìÈ.ïuÃZ8]S0&›´‚) +ucWT\ øB׺;ÊP÷WVƒî)M'¤N ·‚r|#£é_8nÛ|QÓbP÷ûª†Î¸@^ɹÓáü¹åö¼>DM ~ȹL«2-Ñj—~Kªû}¬ +$â?}vkÎ'oÆ7%b‹î’àz4€N¶ÁÙ½wè."ׯg+  !0 +ÀÐe,¼ÀÄù]FÊ»ÎWMw@aòé‡(¤(£}ØÂÍ'çX!Þ¹´0¢œÈ'úòZz‡«£Î´í»£1èµ=XJŧ²#øøÈ7Ñð_¢>ÔçÖò8¦€}±u=sÑ_ïìîN&Žs‰þ("1ñ_\ÛÚúºHBX’6x@“”Ï’½-*‹c»[7h9ï ºˆæ­ÐÞJCöÑëêä°šý©xÈ÷çš-šQ;ëüãtÊ'óÔ] à€W/N›ñÁx<ôè©ÊÁ³—ewû÷oß¿µཧዋšÃ™ç¥Wÿá!Áâ®Çêé ž†üÅØ˜á@´Ý,é©(â³xíL; @wßâßí{…è 6poì†ôŸj#v'üB5Du€P„mþ]Gà­z¾EyÝÿ*Ê;m1CÚû¦-BÏê¹/ª:!™˜•“nõ÷øÑÑ|Zûãùc±ßa]8?m>þW2ð#„m[SJÆNg¡-¤èãp×óTÑ=ÞÓÁ¡Á€/nÆ£év ìÒk)RCð,õQŽ’¢øR©9mm³{ÉM³F±Õ:¢ß§ÐmbŸ¤öCÈÞCfKãts0FN¨-Óz\Mõ¤Â>ò¤ÎÐx„ë¸êÀ ~x:—é¸aŽJ†§íËFð0t–ŽC°>0$ý–ø= Ò‡>#(‘ؤ(Í„dDÇ›´R¯wúku/ÉtWnýáÓYLƒþm~¼òk´•—ª©•ZÝ¡¾möûìQøX?>ê÷oœ å¡«.+HH†ÓOCÛtobeÕˆÀì!ÎÂe™%)üoÈWš3$§CþâÅc> Q>sâk¯•µ4àH’¼Q:(íQuÄ„æY¤¦Å•%š:¾¤ã^$cG©ðéXž¦î"{‰pvƒ;4§ö´›Ñx:^Î×òê””¦¤ZèZæh±L$̶G#2áZÇÙ‘;¤#MâV§w;)õdØà]œ£Ï¨1ZòÂx哘 Õ-ü~Þ>Ù±×.3$Ç·Mî!)4ȃÉ1€:ûS½æ›©¥P¬yJJ1¥kLùà}» j§ Lf÷ ¸x—x¡te´Âˆï¦¿sáÅöÙ_Á(!köXû²Y±`Õ™|XßGpµ¬œ{úS¡ÉlQ–nÚ/ç糃iã­(ßP±çwœ ÈEÔ¥ðNš*'ý¬‰ç-øLáβrÑ5ÆGw¥•hU€¯;Õîlx«Wí‚þP>ÏìæÝ¡a')m(·â!‡ºœ/©Ê³ÌÔ•Äà ƇY gþVèøõÙì·|_ê(2·ÜK¦Ç¦À9—¼™–jÀKÀ +WWäò|ça´®Q|–®‰Ã­­O®¸0ðÿåõ[àÿîõýÝÝýÉáNgb7a¶=YEØØØê]_vaƒ± ŽÕô‰âC‚ß½õ£ðVàõ+·ü}Š=_ÑLÆÓÓÕKDYª^©ü}Ó÷DÒÿÓ®{(õA÷¦{Ú‰Aßó4Ë1’7oz¬çÅÉxóäO»=Ú—÷%‘½àAâà œHš—.Þ,Ç}J¸y|ûµÍ¯<3¿Ó¿Ú~øÈ‹5&(WNÓ”ö›þ6 8¥yä)ž‡\Å:ŽþÁ x’à®pS/9‘;~º¿Šß|ù¤¤Á[æä Üp1ºñÏtpq¤·}’<ÛáåNgks»³¹W ñ7Q9†Ó£;·×GŸ’Î_y@·ßǧÿÜøgð¾Ó¹Úž¨ßžëùâ¹ÔÞÁjg»ï­m¢#3¯aTCæ…¿á“Ä6èz³ÓÍI­;››²´Óé¾'Œò’ÿÝ®§‹+®î ùÚŠ]7Ÿ´¢‚³âûÄ~€¶M‘yQJŒGß{§Ìù9è’[Êè†$Í ¸ etýþ¶¹‰Ÿi•<øµD?W=ýÿ’ä®]#!<ò¸ÕmX"ôö Xb¾‚”ÏlOéC¤T‡ƒöxßKtå~=½ÿ¨;r¯Ÿ¶™Ä9\ä4Ì¢¸ÒìÛi—Yª}·ýÑÕ‹äjÜÒ|Ûæúî¤~Þt²n1„ò‰(Û‰4Áº{³¢PZèjäBÙ!å>ž°úÇvNÏ7>ðàç±á|¶l9·«ž=o€ŽpîrC§„ì2®Z…¬ñyÞ­Ž-d.¨£ÙB¨_Aì&«.¨L¨WaÓDÜv›h—!€Þõ/÷Ó þÉC¸rå‹[{‡e¾IK¤~¶€ß"sç,-û^t87Õí¯Œä7¬ã›×šÅ #é…2qኒiãqVÓ¯½™·û¬…>ìëʵ?úÊVÕ +íÉU2 ¶âÔÛú¤Ìغ…š£p«‡€jÓë¸U˜àßJ¸UTƒ¢Aõº³ç¶V÷&Ëa§jÖÛ—FB…s­¥³j{¸>¶%æ¼¾ »pž,u ;C/÷H^öJÙË¢¡ÿ“tô÷h~Hž>åÈzöôÕ³—§óé0sÒ+ðìÙË×/_¿}õîÝk°ß p޼x-Z@úÀðŒˆ´ÚÝ¢, ªuï—këDiA1®1å >—þÅg d ္X^B->gUÍÿ„ €GCÀ-öº¿¾å$Áð'œ£œxåh€¯Sz,â“§IÇ÷žvœ™EY°×#ËÐHýÛ÷¯=7ù• þ^=[bêÏ=ÂܦPС¢N-?ztÚÊùÇtÜ<üè³l ûUztþfõíŸß,ŸxHTóº_Û5o£3¥ùkV§Xaø_®Î¾=;£µMëúESÿá|µ|Ô,M}@ÅY­¦Õý“e5¶‘Ñv¾;ª&‹ÅÍ…>n˜QS1]j¼\e¬ÓÎe»æí÷¬ë‡M3'ŽjtP­Þ<þç7gD\O›?µ£±S{ýå®Â¡Y-a²™yèùrõÆ‘ ûêê9WççËyóx±|ˆ‘ö‡ÕêÖ¤08hÜAON;oNl i–VÍÒáìÍŸtsž•%£’ºqïv}½zî€A]{€XkðìiQc©HÐÃf +DÐ,šüƵí¡Q=irªZ5üªs·n¦ÖÃÔu‘‰ÿ©FºþM--þÃ?è¿‚Ùçç¼]UNÚóÕ“åî!Œo¢÷‡Õó{rþæÛfy†´›¥gÈ!~˜|$Ôè +€°hþ?‡´ØÏi¯ˆÕB2ý¦ï¹³í¡b +Ž<y4ªq[9DAF(:r[qy¶zóÆñ ²wµzî?^‡ÍÝŸž¿y~þço‹3c¢É8tê,k®šoÈ׿!q¾ü…nzßCÛ¦(ÓêŒÉ“e}°Ý«êGd }J˜ÝRCx9‘mz-ñËþt¾\ž‘¯)t0÷äŒ<\4Íb2D™ø!]‘µù?øëŽÌ¢²g?òÀ§È&Œ E]¡væîiù×-.Nh9D€¢‚£3OÞ뎞è¹…Ã~Œ¶AWN–µ~{N§dß¿$AZŒ–úÃYCˆXtH6±SyŒ«®¿é{b`ûpªÍ0ÌVEY…óÉÊÉ\æÝ˜ûÊ]á¼æeá¼±&¡YpӒچϭ +|‡sMíQ]zæå\@LÀÃÛf wÈËÝžg䎙ø… ˆÉüÅ•+[»vbÎe;æ.…óÉìx²8éŽ1ÅÅhÛ‹¾BGAx8ê@ë”E&9ÙhÑow )óô«E£p~Œ ,F”k™=ÊÁЋrA \TCs>ÈÜÈÆ(c73ìW—ª|þÅ[½]qýŸ½án5éxìw&²˜‹Úßi{¶Ð‰Z tìÛQS5ÜõÛŠÔ| +»pÞÖÚê°™öôrÁy’%ç).á|8¨šÉ¾R[—ÕxIÿ4Ù>üä_ív?ûãèÅ˧ÜìB%ÈAAìv Ì°à†q Ò~öïßÿ%€ª“8¨V%¢ T‹²xaY¼.ÈŒZ€_î MðÅÝ‚À7¸ì—ûjydØ{¬ŸÿÅsºˆÄÛ8ãQϸFEñý¨ +µ‹@¤tà¤/ü†-5†tF.¬~5LSTB)*€„F„ùïŠN÷sœßã€Çõã§/=_é1ÊÔã§4šæG(¦£™«®>òßÔîã·\Í«7Η§õ +úI6¹¬Í劚úÉt|üÄ!ÿÙ 7)™-ΚYŽÝ¶Õs×bî:JšuÜ\—ŠîšK4rZ!gúà¼ç!ý©BBãÌÑkªè!µÅèh9©Ëóæ›ó'<£c‡$ˆçÊœtÐøÃéC+nÊxdZ–$éŒWhø=¥•”ºM¶Ì™4pŠŽSx4'j-V¼Ïešìnýfv\•ÖŒľ<YÕ†·ª‡U¯F|°¿¿w«—EÀ™g—‡]±új‡èÓ@ñ¨FZLª²ß®¤ÂÐßì¡&õ†®Sl©´ÜVZã Ò„ìtØ_ãfÒp¾¶h“¬ŠL–§ãé¿k9# +,4‘»(—ì@µó‹*Zi'6 \ç5î oq6{€äÖã†ÂVוÔTœ.ì:@ ¬pÖÀauœÑòmU³4Ó@,1EŒÊóa˜;ŸRè"é&ä5­Ñ}½4Ñ@ë~½¤Ðá 9#¥ãzöÇ²Ò ™‘1›~çö“x±\I6Š„§² ÌuGç‰|%Ï,&f+|yMè°È¯@ÑD@WæóúáñüïÿõGEú°‰¼cY!y4 +¤YRÕL·K<ÙèÞ)}ÆÏxHþÈýxè*ù’ÓYšp²3*›H…¨ûù½™ú‡¦¿ÓnJC܉Y¤Gé"ˆ—Àƒ¡ Wq|8èÅ6œ»††L ¼QÒüûÈ1“íêÜÐ}—’á»Ìôu%$™_sn£±ì÷_\”Ñ(Æè·ãæÔá"™-ˆÅËÅŒ¦ðƒl;à¶zÀÿLP¼åÏèª9W“&˜6(“H-«p® ”`Sï¸ã)Qèp¡T"ó"tپؔªDI;tm™Ö4*#EjÒhäÖ":Ò[™›µSAuu¦\#T)î¨Ñ7ç”òöµ[í€Ï¿^ß½ž±Ž[(®è¸xêb&«+…¶6®:Ðþÿñd €0÷+JÚj˜]¸ÚâÄïe™“SŸe-µ¥!ƒ‡ážUä¼!?"Åø,±ü=JÇÚOÑtŠ1úhn/€=Öv[ÏçG¿9Bp^€9 À5oX¾e;`GÃ÷ ?˜ù]¦’g¦ï‰®Ú ªx+Ûaï¼ÁZÒ¼Ç Gbçó,&n¼V;¼ß ÙÜù (E 0¢ü+_ Ë×2ý hOp龇“tí>Ú*Kt‡þã¯úóÆ7[øw)#š‹¨ÿ~ùxm*í øîméxûþÝkü½zéi +Ho~”Ó¹ã&]B™ÎZIÿ-YÿF6ÄÁ‰zf5n³3^,G,œÙƒ'ÿ¸99>®gÏ= þü¦Ö÷×Û¡QÙ‰š¢”±HL2ËOECët4Ö]`otm”µÑÚK9Ë-¿¶3Á’©Ý““¥1µd–yì…T=䎶µ»<á»9w_ózòûÌ­ý8 ; +@[e©v¦òi7øÄgtý¥¼ß›vGÊ]ª)_Y1@ìr§Öîr½Žo“‰{öî[#SGZ"=u½Êíìu]Ô¤fª,e› „’ª‡*·°|<³n=zË÷oEtëVÛJ=¬ú™ªRqâW‹3óÙùÒÈs3=l>™“ßɤÄòÒà: ¡êõÄþj¶4gÜê|=;)›TxÂJÀö#ùªªc *ŠÎô@­À·Mì#=Ô’V„-YÎꪫF¤¶†Vø±B—°Ž§äëñƒÉÉs—žÒ”k—þ‹ËøÚ" +€}Jv„B¤·Óû:bUãQrD#¬ô´êŒÕ\þ¡ÈÐ{^š’ûüCrµžåòÅü ™â¦Òl€–K™ ÇòšvÚ˜iÖønŠe½êŽÚydi^¯¸û@óË=‡÷ =³ÚKð¶èBòhÎá‡Øý.øOÉ«=³GÒN½H½QnM„ê›sÇ}7“`QÝ%há}Æ2 +_÷xƒô’„7ýó‚z’¹Q˜ºDõ8 +@Éüª °a;¯ÃŠÐQ8l¨pÖ5—\áïS€ëÃrÐçI L=¡õX4õžG‰²$\ÎK™³‰*|ù²2ŸLh*Î/Z8ÿ¹ + Œ“]EæÖŽÒ½`ˇ%½´òÓP%þ$mTÝw·LäÊ[Hkwëó+Ÿ ¸Ãß—s8Ö¦ª®]ãKÀ°÷µÊÏæÖõ/·þû—_–•8ï1Bh ª¦Ru±I•9ÆÆz¦7ÑÅ‹œÁÀ7õÂùœÃùߣpóSd¸%ÐÆGGsû²ŽÒ1’Ù-pîq@þ9è ô¿{÷° –Nu!VÜÄbŽR ”Ûþªˆ³|¢ +Ôâr4ƒ¸éÑú ðŽŽº{hŠÀv"ˆÓPÛá£ãQ: t%”' ¥K QÜÉfÜ Êž AÞ{Ÿq ’G&ƇÑdÄÿ¿DåAûÿ_¿Uhvø?}zúT´ŸŽÇ#$Ø<ª`åÄ©ƒø&þYÒ>NäëaÝŒ´ƒRy0lÍåu6SS™¼> b°Í߯ô‡þÛ¬Õk¡´rßK2 5¥ŒR¤m -ÊeRk•#÷ÅN_ÖðOɵð^L6j¦ýÙìÁñoqàåá]tu‚^¯h•·ñXŠXsøX8¡Û±X·›=[Wyx:¨ë=õÝh'V‘¶!¨Ý Þ6ƒë réV­M!¾Õ HWL\»þænÇ©·nèOr2)‡ßPÿ6©¢>z]54Ϩ¾h0Ù?|€(y§—ý;B +À„@‘L©/kÑ­Ú‘ËÚùéwŠ˜K“Nø,¼·ê¸ß÷6*›ª•˜“NÏ +ŽìVU­K5¹Ë^¥)ÝþàøGtä„«ºB˓נHå<$ïCk= t$ùV‹i_<¤ù³6¦õAë6Y0QkªäëƒÅ™êAÍþ¸X,RˆHCiçj€]·ýú6É£aÔ3Ù{&žþë›n2‚ÿÎq3Ña­eîGt¥í ø»t0=wV£]Wza’ä˜ñŠÁ‘Õ;Úx.SàÔ’©y­—BXµW¾éµU6óÈü05÷±®íÒ¢`ºó`dRÚÊwéGjGy›v}^<ØÓ€ºQ/Ç£èD'Ôípž#"!e“ \ÌNÎáÜ=™cF‡ä¼ ¾«ãÛ¢s÷Ýâs5*;(~ÆVÃÄœq®êf:ç‚,‡.¡Uo»¨â~‡Š°¿K&sóeé¶6®|¹7p?—iß²y¾6ŠeZV§»í”-ô>ð¯Mk[F PÌl¬·06ô”kž +aˆO~·š=;û£þÿßgôÕ©CÚ$͸[§Ë?e_ ÀM@ˆ?•—6$0VÒƒ‰ŠÁÙkVÛ9A"Db}{Nù°îd§7Ýww]˜kjTÇ}˜D©3ì¹G ïìcðfªA¿ŸMâÍú‹ˆöû›é$A7B^1v¸øµktÎAÉÈ'áã„PЯHL‚K[(åOU­(D˜¬i‡Âá® ‡² ìÞjz;¦h2ù½&9¿ 7^\–žš„TÕÓþA‘¤q©9¥`°¦y"”y²ª+·9ùøqC©‹'´Îû;å¶Ð¹cùúôrËdÐèl¿rûãâfË'Q£H2jÙ«{tÇ´„ÍøuïKï}È·;K‚ô~Xí .R¼pHö†Ê/¹Ÿ}Ú9Íè +Mß?¤ƒ7,ÈÄš“o]ñè|'µ8Ö{|¬¢œV£Î/ËÕ‰<[Ÿ¯œˆ°rvLÈqˆt6 ÕèðÏýÓ¥+ ûüùr_\ûúúѨŸ ¨z$ O¸rصž¯–ó£ÚY.É·ºjç‰ðö¼žÖ¸ÎëñÁ;;âä œ7g…ó ¥»¥ýêM=êŽj—v6²NÒþçgOa…¦ðQÉ9íÊâùÙ™ +Hô¼F%'óóåŸ~Ày¬ÇÓþ}ÃÌÍÒQ"~ó¨Z",4~ÙâqØ«*ªŠxÇ]«|â€/žêse>ƒ1å¾€cBs4Î*d¿rý¬œ#óVè±V,v[f¢ºÅxªÁÒ0îMx}$ò"z¤©tµ¤€÷¾¸òù_ºÐîî•ß6a2Ù«zÝÞÐA)‹¦ïÃtCÑšï´ +ÌR|iÂä–F§^öáœD£Ñ¹&:ÜÎ2bŸNGóšâÎeÊ·÷‰tùÔkDbåO)ªGËœ$çïï³+çïWò{õ³ÏȹÍkèƒáxú¨vàôé³SÜLàãÔ÷wo¿‡à¤ø23îûœ ,â +“ &ßéø/ fk\SU[ðø×ZÏ ÈÜÕUךÛc÷tà¦æÓ_O ±ÿÿú—qñeøà»úa¤Á¨ø]wúk=“(‚ĉ`yËÞSÁ—I"¼î>ïÞ¾UÎ|ý6þ=÷ïñÓÓGsŠÙp4 l^Û¸Ê߯•+W¯HéûÑŸ…çïÐb¤prL+I iW‘Q6ÚŸìßJ#>êŸP¡f³ÿ¹ø#°ÛìÙ@ñ(¹ùg»õ—ÙÓÇqgÔŽj t³FDÂ^(f/OPÏ]õ@DÓi·;‡?®DŸCĦ}Æ­M¢;Ø6ÔnK*Ñè§|Ã5‰Hœ÷[?BZ®º}8/Cÿj @OyÉuùM¿¹1-Ì%͘4• 7á»Ûk—t¬ikÇÁmÉÏ$š6š¼­žš£¬Ë6_d© =Þ”èn5—V—B¹'òMÔÈ\«Ì—«ÁͧÍ}|,ÏUõ›"ôP‘ùhú›íßÎy;æqäJú®Oi¥®ÌH¶dËÐU1Üßýí¹Ü&o» +@Æý}$ê~§Óëíô¿Úv5†^¬).Ô}ôC!§˜wzY]¤Im +ˆ¿}ªæTءĸª»¥ƒÂût™Ëоä¼Mñ¬9ô¿P¢tlhãäŠ)ù{ú9tõ“Ï6­£Ó£Góyãæ§îu/þ»CàÛ·ïìp ƒÿ|i2‹ïÞÇ”ç?Ø) +Ä‚ot ¬ö6N-È ïBq âÀ¯„ý<4¬ ° i  3¿Qðâ[\À‰ Í»|bÝÈ®‹¯ié‰ÐOÐež€—zS9ø þ‡J—F‰öû÷¦†‡vcÀýî„,ø~ýÒU€žús*þ;Þ?ô:„VžŸÒ²}”hí'/GÙž£ëN­kÛ?µIŠ7=ž.ÆGÇò·M1í~Û÷eÛ¥¸VÆö +:Kk7·ÁAlç[½[nh?¼6®A#ÌQw ÔªÞ‡ÌyÈwÓmO,šæ°‡áRbm¿6Ó.ºÈdvìÞÄxçãžîÎmÒ_éo­GOU¹ ôPP)G%°„FÜ\ÑJÚëŽ †<=>aÍðLO½=ìµD°ÖâÆƒ2z®`²ö÷s²0@„ï@Äá)§éǰ0kœåtõ–öö³û@kÌ64ÏÔˆ×òíyòRbðîÆT­übAõûˆñA4}A{¿V݀܋©¼\÷иEcúíäÞäþå“ǤE_£ºèÙ¡Õt[`[#ÇOBdš›   v9êy–繤®Ë!2ÙQ‡È%ËJ¾Æ/T¼Áp­4{à9ÂøwÆn¤È.Hò°³}÷BLp¦¸ÕÞ^'Qµ3ª€¨µsø†‰5ÂY¸ãKŸzÿ!]¡Yü‡tóæz¡äh{»{ÓE—7ovnìlß¼±Ýíîl»Pt;«³$ÓU£…:òlw}T^§-îÞ¤Yæöfו¥YÜHdñ¼~íÆÍî¯nø¤¼ݼ¹ãPëçÆvÁ^f± ¦{óÆÇ8ïód§³íRÊðyƒH¼éäåšmüu»p޳aeÉ%q—¥šºDxê„ó|ËÔßüÛöaº~8 9KØÐööææÕ«›ü]Ýô²ôgn\ņý×ôÙfíã5ɹ²âÓݾ©Ìå+^p~q&!ˆÌ;|vH0·0™„e†µt£ÄSV%ë‘zÉý…Ÿ_Ý Àâ\ȼ»±Ã ¤ÞÒÎf±ß®®ÿòéêKºM3R¸¶}íÚµ6Àk¤^Ÿý×Ï>ÛàqçêU|”Ä×𨱄­RRäß|¼Äù7rNjðæ’ôd9ºù«íoH”ùØ’å»CŽñÚOüí”Tü]úäÊ•O¯|úÙÆÆµNu¢ÏN³°¿zñÒ€—¯ÁÿWïß¾Õèöù€®Â´–²ˆ\àSÌÄÖö^^ã=Ø®5¬ª¨å/|9oA¼6’A÷òðÇ0TXþ×T€_û=Ý:BHç :Ñë–·¸H0rƒ¹Ìó¨ Aˆ±ú½6…Nxàóþõ{w´ûÿµ›½8wíä³ÓÇHìèèh<èÓÊ©4"Ï âò?ú¿Ò¶b?"ÛXZ»&=åèʶI¼h‹×-øùø‹lmMÿ¼âny©mN›‹ù¥û E`Ç<Û¡*¬N·¯´kÛèj»À’L/i­ ,üiÓª€â6û˜[s—F[q¶xÓüÖ“~wÁo-°//– ;p18¦Ó’– #õÁ”(Ù + +A9LßEqµG)«Ñµ¾g€íö«c…j†:ÓO³W@Û„9€„‰ü“{è8*„9ïD»CQß]‘ÜÏmà¶Ûžµä® ŠN…Ag‡ïLú œ{¸@ù µZÎÒå¶îïDŽê°tÇ +ç\ Yq¨Ëþb§G +3<ñ ;K3žŠæ °² ’Èw"ü º½’+w i* +­äƒèbl46Ã_Mof怹·öTÕóHY…ïÅ®ñ,{JÝlñ[ü£¦òö1ÌÙq${û¨0¾Ý¦kê÷:n“wxrÚ°7ƒ7Žëœ?K»( +2¥nâ'eýGt¥õù©yDG¥ïøá´žÖÏ¿9zZO]!‰YŠˆ…û´£{bYi¦UGK×[ÖÓûS¾¦ÛÚ§U½\žŸ—ÁÕùyóhêzHžÚÍlGó»:¶[ñ<úçQÕð ! <•ŲÎ;8ª’Æ®ydWîÜN_sÏ0R2V—Úõ´|Û—]7ç¿9x‘`07ì{¨NËb%F8éèJÑ9œ“iÓéÍoÂLç…ïÕËóÓæÈQ ã!p‘¾bubqnŒåOrƒ \­Jî«ævÜ0,Uƒ¼öÌ;òýË­­_n mûØÂ/lbûʹ+{šÕ£îySb‚Æc7)FÛ‡s„>œVÝ^3îõÑÔ-Â.s+Éû4-®†1«‘‚£†¤Cº™öÿù.~Ì*“=äãÀC]aªª9¶vr¤tµËд^ÕS{ri·yýhù8˳´¯ÿYÕûòkJs¨ßOMTZþÄÑšnm¹oè0g&û;nE‚¥>_®ž.—OV«]Y˜”§Lµ2¯Í085_ÍçýÉM}¶æ¼ðx‰sj<EÉBÇJ ^ΧdÛOÿý¼€lx°¹aÎŽ]è"W>{ùêu¦d€û¿ ¿ûž+p‘O RûÚùz@©°-âÆö°S¿°ÐÛ'â¯ë>\á(t{/ü·B¹˜£Eð²A¨‹Ÿ¿À¹Úƒï'¨_üGÛ;!Î—Ç Z\7’§CF,ÓQ|]õ%þ–{ßÀ A¼}÷úí+¡ä%º€»'<Φÿ5 +À¨?Øé ºBÕŠðøýé•¶Mÿ™ï~ºöÐⶸdûÅO £æ|ÿ|ck8q‹ñãp~rV¨KþpùC¸¸¬±šRsË +’É3‘¤žèNªîÁ}dÕörI-çÍòIËù‰ó6–ç½{8'ÝÇ«åÁ„\>ÉdZD3™Ÿ,ÿäÎ +O›Áö}$ÎOÎVJ¦¸¼@­ h}¶hNfTÊ-÷غ޻þ™cY|äA9¦î¢+ø³g-\×·¾¶8דa§3tnÖž¦@ÚÜsðÜÝ?=\ý©99=çæAó4Më³?û(+ÎO!Õ³æ!)ƒïR*–˪~ºÝìßoÎÉ/JôÙÙó\œŸ šýª7ÿ/`äÏ/®\ÝØD×qÀüÑéüqsúØMbügh§ +à"xÈ5ñ‚&Hd]C§æºOì®Ëýˆÿ6zƒœñÜkg*(- »Ÿ€^ Zy˜ 3Ì8óBÞðÞéí9PŸH"º ­eC|wòâ:”lôÕ¡'8uÿ×À/Û‰L®ËÂÇwî†ìZ%QÈ!’—î¢x:/놃ÁN;æÓO#äO#å§Uû•†Œí«þq{\&–YÍ&Mc9jÛbZÈÙrt;¬mŠ…XÞœ ÚZ¹t™Ó×6^4»Âb¯WûÕ!Å€ëß­‡_i‘æœ Me¤E°Ö +ègUg’ƒJK³’J1i(êÔß :Ÿvë'0÷ÇÙoUJd›,æ¥Bͨ½nI › lÝŽ’!Þí'áMÝ?‰!‰þ1¶aðÞä^ÒŒ¿áv¿gµÜÓ‡oºL1´‡ñ‰~<Ú΂<»ÿ¡½;wâÍi„Á÷ÐÐ}‘Á•ghí¤5<äq8A¨ª{;¶ ëÁ»ì +ÊÇ=ߎd«0d>@q°ãำƒUÔ&ÑMÒ_ÝbCc¬ú&sŠN×ÒàWSJ‰:óŸàKÛC#Õɶ; +†ÝW×¥®™Þtf^°7^Œ«PÍW<—üÓtÇsª(t™\ïIÌR¦/š Òç. +Àíݳўœ6ž{‡ +P¶W¨väëÍ»)J­¢*sd|¸k5ÓÏì˜Rà +Ýk™î€ÀØ"ôC +…Œ;¹xCëô%iê)ßãfÔ™þÙS#—"CÑ)í©uÕ}WÇB%‡éðq¿ûé‹÷ &Ò±çîƒý𯃛£c7ººL*nZ©HÀûáˆnêf|î•âÄ·{æS™§üòêNW¦îGÔrží8 ’,„ÁU}箋Ð=ù¬€ð>«ÑëšÞÕNé‚#×Ý$¯w¢Ý£}»ò)Â+o¯3¡"BÚlõ6åÀ‰Ô5Œ“ì'RtÇ–óÅ´?zz¬Ÿ°›czKûç´q$:Aû"¤ jñ¹². Duç\–žbZ½©DÒÉŒq„Ê;üT»_’®¶5ü²,°âÖ²kÃdd€«œ(p‹*·³SS±G‘Á®—þ'²²941M:ý+¢¿qk xm9Own8or`ÄrÜéOQ`ÞŠçhª_ â§ °ùôÉ•O±ñÅÆÖµÁh<>zô¨yôè‘«^o¯ÜÜÞ _ºøí­û¾Cxûž ±2_þ\ ¦YW´ûƒïAV0Ø'\Ùó.ªû.Nª@éôféÊ_‹Ë8¬•„2§­$ÐDdzùÁPõœÎü¿|ï&ÀÑZðlÏtâ"jMQäìW™yÿ½ÿïø¼§^¿ý‚äÆÿŸžžÖÓ£é‘S±œxM ÉŠõåóÃoþJ”’ý£®‡gÐ*™óD|O’×¥el=Žº43™\w<{ð[ŠJ);m}Ï<®ûMÿ`Ýáî}ßd" ³¨G• ŠÙ³W÷£.74…Vˆ`] Ðh)Ê\5›¨WæJM&äAGÝêy³ð¼µãj2mSÜj'€<´$mn)Û‚Ys2O‚¿qÁ±ÆUqƒ¨~ºFÐ#LÀð^5¼–Cއ»‡{©³&bg õRu}8¬ú×úHøøçÎîm{¾¥ao§@¿g|ß*KÛGmhi¥ÃÞ¸LÆ•ž…5õwÐNÒ+àC½,²]QÒj'$«Ó©f¿Y÷ïí¡¸Ú@'G l²ÌAO—HÀÊl@eMÈ;{(õ‰gÇWKdYd K‘ñëØÍ‘ìËG-rØ '—¢¿í_=ºY?ouÎLNHoÖ=Oy²¤Zíd@‘!õú·§˜ì]'n)×—vÖ•,!²ræˆô#ô³‡Òª·Ë“˜Ú-”to‹µd“lšTMYuCƒå2^Õ«ª3u ùB÷l°[ +ª‹ÅRëêr­4às‰4ñ`%°E?ž­UæQ“F®ç/mûõ|I:¡ÎÏæâbû¨}6©@ù¥beݘÊË}«Ì…F¡ßòKêxÍèªð~a1”Ô´I/âw4Ï_ˉßÔùaMq?¶ÀŒýÝ0»~¹ñéÆ'´n[½Ây!ß:lFæ¹D÷ôƒêN|²%ç©ÐmCã—õìeØ5ΑFá\±|ȉ0_§×Å'ê$’:YU˜_¶GSTEØò샌 žØvÿûç¥g¼·ñ_¶vI[¶ø+½¥ IÅFæ´¥9 é—NDØ«v:Õ£’UŸ›"t9¾gÔ¶RbÜú¡ñh|ÀRKÑÔ]ôQÝègöu+Ú”–ãKœ”‚ñÚœû&… ÑÕO¯n¸S÷Î`0žÖžà2À% +À³¯4r_bó¾ô0€×Xÿ¢¸Š ËXü½Ðwîpš~xщ¢oÖ èOĵC_¸ ¶QDw\[ €§Atq™!¹‹OëÀ?OÔZ}" +‚cøê <ú'ð9ÃO €¨Ð Z°‡ƒi‚‘Cõ YÉ”#å-$Ðku ¸‘ׯ_¿tf$êÑ3§>~tä¾ÊÓLñuûö¨¿h»YŠÑùû§w1)^3꯬nG&æX¬’ÂÉêˆà¡©GýÚö–X8Í/ífrŠÚÙØÜé4!âŠ@q¤8· ´%;„Ûÿjp_‡~`Æf:}P™(`L;MaÅÕ9jãÄÅ;C:Õõ°[aNÞ(¬>KX!˜¹¿Â0h«BK™Ôœ«RwÂaüuV<ÏÃö™* + ¦ìUÛƒc~ÁSwê ÀlJz­½Uo»—uºûûb?~|Jõv 5UîX¦ôz,wÊ(¾ôîm!ª7¨mð?$‡ù#Á0Üôûh0DZÛz´³ø÷«=g@9ÿæ†-Ú Iù#ˆ’§éh q3%_Õ÷ö«?~¤õþmÜ×Íp;Èq™JIjóÏBWÝ\&ê{A ú¡ÐÒ묠ÌDÌä¿øHf\à?Ðví×á‘E­ÂDÜQJr“ŒòapjŒJ±=˜_ôì* _yÛäчÿáßX%I¦EÑæ(6Ë~¿t“·4‘9Ä‘xJö€Þj#ÔÔK»ã»/_{™·|‡ÐbJ·®þ"—êŒ^R1[\h¿…L‡ Ñ nŽNŠ +ÑR™&Sj.<ò®®m.`кóµ±2£ÈA"Ãw¸¥â¶¬;¸~2Ú•Cô!KÑëp®TêjªùÙ:Ç'yŠn‡õIÉÝQA-2õ~EÑ_ö®RÚ)¶©âÿõ/±±šQö¥“<³|£­ð“s5sYh<Ží€¤åk9Ï´ÿ:+jZæ­J†²æ±pžþ,8]Ëü‚óþà8›%.<>Záò%EDÞl¸¿ô(×e_§1‚ñ¹µàóáµ+[éá/›†lg¨ÁHSŽ{[¿tÝ׿f9– ›©ØôØKp™ ÚNM8¼¡¼µfÝ [8wÌåüÍf‹I=D¡ìL?èPø4ÍÍàÎG¾FŸº}ãºKÏcwš—³€œæ&9 ýÞÿ÷v€Š¢¥h¬Ù 0?Åt¿…SÜQAV´¢!±[4†\Fè­®¢µ_@ÿ’B—t6€x*Cº´¯6‘ Çá®â]UC [ÂTEÉ­Ñø‚âs¹Í{&ë»ïÜýèzøï‘n†àJ€WêFžü«ðÈuõtjÝë¡”N€«Ÿº*F£_aGÔßënžQZ¾z1j÷ëšE…Lo¤ ¤ާãYuàAê\šºzBXûj «a°´Ñ5Ó\¤‚Q„×=Z)Ñ¡Å~ýU¿áv‡÷‹oü§ g ÍÁYµ}šBg}¢­× tPéÓÏçR߀ä,MY’p‰Áz5êþ -–„X »a¶®Óî`iãH5ÖH°Ži‚¨g;U€Ü­†×úµŽ»Ã/{׿t^@{Ôyvüa©ªlöE"^¹S¬ÿüE$kàVÕ»ÚowÒÂÉq‘‚þ¡ô™H‘Ü­j·ê\«nçÔŽ².¤^áv! :R<¬û;Káo–§d ¬ë :!$Ê+ž;}ÔÞð!íJ­À&YBâ—ÝaY€~AeÅÈ=`öUó.ˆt°]Ímv͵MfÉŒ6{Üj­ã~~Õ½1m¾¶¹…?ÛW·Ÿ=À–‹¢ú(«Ds-öÔè=w_B<·{½/[ü)2û$C¿9ˆ­ç±ì…ø%LŠ0"s)Ù? +xøÇ *ɳÇ?÷“zÕï_ª%exÀWnAûÈ>À¨ûm\>«ÍŽÛtø#+”ýÃû¼Œ*“çB©«ƒÊ‘É¢¡Ý×–Ó/Õ”K[t‹¢tµ†ò7‘ùÂ)ù'uAï©.;—â»õ¿HÈ[…™Þ=¹‘ïÕõZ‘ *Rçr—Y—9‡€¸4žÅ—ôEé9Üw˜dŸÒZG7N­¢–yb>ðÿÅŸ¹¡M¹…_WHEÐ÷þ<íZ[²£?…_|Ëk‘ùšõqÕ¡|àÊ«0ÎQŠò¸l#u‘¼!°,†ne.+îI‰VKwOŒ÷ ¡—fÈ)spu«Ý p£·õ +€\UµÔÛ¡›éÝÎVÀŸ;àÆ#uçÚE_FÊÏ‘óüøå®$/©Òeà¼/ñDÈÿA/@½¢Á£¤l£.êgÍxËù…ÏÐLŒÿ$Hÿão>¿øócãŒïÀ¬›«8ðôåÓ—Üë¬tÀÛwåÀì|Ô¦!cí ýàfÐX¼õ¹žjsÅý>ªœ4äj½îy·üVð\”Ö¡ÜòS¬|% +Ã~ïZ€¼¨I¯ŽÀo8Ë }Ñ@ø– £4àôVànåÍT9–AÂ\öÿx{T€·oÝéý;5·P&/ž>Fxzzz:ôh~”YýA¿·³s­= [1Y«8Þ’ëŸ^`¹ÕÓR¤Ò9`èœ{³û;YÚ¦PèÌWrV^÷÷ÛB÷!_ÑëJ¾vÜX./ú´¬À,Í¡)¦ŒíW§ýΰ²íÛ=þûV6RJáó:->IQpæÇº +2„;)ç³üˆ~ÖVÀ @Ó¼¶äz‡(šú›ËТ”ìS"yø hI2GUö‰ò镸–Äüð’Á&üûàÐÝò Ó6u:ð¾D¯IWjÁÈm}H9U$=ÕmÕÈæMn ½ÔòT4èpU-.O™‘Iñå^é °Ž´;Ýe²% 4:ëí¢Öˆ{Q÷b¢òù8ªJÜâØ©~D&8ðñFæ&“ń̫ú›·­z© ×Ý×ã€Üxpq@µ(%W‡îù]K)SðCزã5ºŒåáç;Ù"ÄÇ)±kCm„Â(—XI’ùÎûöd‡ZW„N +ÀÔÙŸìOE ìBÄž¤]„I†&û»ö|²±õùð—m@¦´“ÔÔu'ÛNÚúMá¿C)¯;Û©ª©\¬ú¿D6¯c’s/TNu#oÕÕRÌx%9Þ6C0W–>KzÌ_ÎíOÓà)P/þüí7Ÿ«*9×®uzv 飩[¹ ðÙSÍÿ—vv¿ÌÊ7¬` ÀM5ÿß¿ÿþ¸/zkëÛ›¿ü‡ÃçÜFO[dÍ €_@:È®Í]ô Õôí 3¢¹o;ÆÀ‹q³?§÷&ÄÀ{ñ“‹¨ 4>ˆ ˜wc®.†üÇKv5nMÿ¼¢“ýëþŽÒÿï…*€KÉËWÏ^<}ñtõ,ËÑ›<ØP\ó´µµqmã³HÙ¿ ráS?¹þôÙtìc”L¯›i¿Ý^Œâ¿O똲 +Yü“ï9  m*ò˜OêD)É~qýÊÀʛÒ>Õ«:íƒOA¨K›Ü¸–qÙñ¢Ø²!^C' œ¤š9 :ŸëðÃ40ƒO¡”aËk½Ô÷’Ìé¥þö{9vyÚî jÿåÁm#ÇÅAéæÓ_–UPË긳åR†kx-Jˆì¨$°.¦:»/€Œç2w©º6\R}ÅÝDÿ A´Æý­ÝáUÜÚQÝÞ¯ý‘|îÚÀÖŸDˆõÎæ¨Ü¬]eoß} ©Ô™ÌçÀ l¾³ïn‹»`|4€Œ¤òV6B¤»U§s\vvwó®bˆ6À+”¥“ 9°jØÎ+ +© ‡wl>k!ìBtÚ¸qœÔ'Íì8›3‘gU÷<Ùg¡Cël3|5óÀË¡í“dÐ=þÚR–é¢} ¯éuä•ÌEe!BôzInÒ›GK:9÷©ô¿5š&‡MƒÙ¦†kÌC?K ]móØÖɳv/ŒQ"3Ò\ÛÕNIÃ!;fZÀ”¢¾èàFŠúU%bH‡)þâV DvÊLÅ&9þ±êœ.áÃãYó­¢lÙ#Ähdûвo­eLàƒ=á<¹ Îòª¹_Nn9—ÙéèF{úŸILIȆ³-šƒÐIh•J]À Œj’ÕðÔ’UwëßÓm«a¯lšßjׯç0 /¾ØÚøâóÏ?ݸ²ñ宨Æ[‰DÒ¸à\é ÜÀÁ¡Ç`އ™›T*u§ãn×…nh |"ì¼_iµ*/GÊÜ*fŒÈ<Ê×<.R—=ÏfÏ›j¸¨;MÃëIºk„6 À/·Þ·àÓ+Ÿllô6íà?CŠnóÓPxcX~!„²ð°s ÃÁ'¡@Ѭ W#,3 +ˆ·‡“c'tÉy:]`bfJÚË +¡Ó zžGÜ q U˜¼ùiª Ì|¾ùjÚk¯|öÉÕØÿ[KÏx|tôȳ€Ý èÙ³g/Ÿÿ»î}÷Úó€^c§P:ÿÅ`á2;é¼Ï¿è)æú8  ÉúÔÒöŒ=Ü4Î}G«û½{óØÀ#Çpñe1;ýïU +4ì ·ýÁ Q´nó>ü‡)Bv1"®ï]€'\îj)NP߀q.Ô ø÷Þ®C“«|½~KrÑ}ò‡âS6.sžžzŠ‚Gÿ¹•—çžØ°I™àGäþúúWœAõq2÷ëz:hŠ6N9™yyTY]tZk‘ç£>Õ–"wŸÛ2µ„´ïÃÚÍgx´nªPW°sÝX–nJéô+T˜¯ÝýºOÁî€3Šîd2;±§É¢GÈÝU4g¢–:{ÊYE‹°’vÖ£¿a6¾K8…‰5£÷›q™ð¡©È¿-š _4}ÒÄ3XšqÛf»ÒV{ªµ—ÝuQLÈpÛó{Ò›¿uÝ&*@+š+ÞL¿?Zº#jºû8]ÿåß— êÖUR§ö¯tލ4ñj‰$> aÙß®5ÿ3H …s:OPOl=µõi:›}àCA ÙáîÚF®0;šNg}RÐÞ®êJZø–ÿVvv:ï번ÝØlàò’CÑz¸=wþg¨´²i2gÍb1{)r4ÄÝóu¾ZètLÆ![RPŠØ¡ +€(G fl88·H98:5Ýkå¶%åiËUzÕ£ÆÖ½ZÝ7ÿvÄ.b?Îú–ÂÂèg)ãÀ¾±ÉÒY1¦Qq•Ò¤™Ÿ†xÑ +ò0‚#{%Pe¼«%ƒä§€‡ÁÛŒs)Wáw5?˜¶³Øð"#.£Äþ皊þ¿xA©êÛº£ÅZàúçÆC¦4ƒ2bæ¬r¸„s8´:{9[ º#çæ° +Õ]¿þ9×k.ü>M’W.8÷Ì"k€i¶NåM'ü¯÷'g.~ٌƗÜ]÷¤óæsW2aµÑ=¿§Ù7¸EµŠ¬°;3–!ãÔèò¤®:];¾/HfËÂð†u2 J@|Ï–ƒƒÖ|Gèyæ,iDz¾œTÓm·‡ÖJyÔDyÑüâ˜Ó°µueó–à.¶¯ÇoНä$®—|®}u›šž‡R,,) Ù"J‡Œ l*!ªW£õœnʼI‚ÌŸ=§^vGY›¡w + L¦X”~‚±õÓ÷l7@Áž‹‹@RáülSjлœÍ–U§O?}ù;÷¥ïõ+-èXý\ ð 8£]èrñ=.ÁRLh•a]“\ä²–.öŒ¸ûffþ%Ó}_m€;ÿÁó µÊ‚‡óoPyÈSíóh¿Õò„oƒˆž Áßk¢ +åÝé„]Þ‰âÁ•ýöoè‡8 +ú£ù€ÿo¡rð«gnü,g(æ 2àÀV;ð +*€zf?Ÿ¢‚yý‹`ýG(eïÐ!€¥ÝãrúXŒ-Ét3ßb¤·\ùñ_”‡”KJ›¯¿égÍj +‹”By{x\6‰=œFHÛ¯œø¾ÓëlQ| gèÊiÒÌÊ ¾å­éœã’®bWùÓZqa.‘ÈÕ³y¸nÝò‘?ël(Z0m^½Ý,œÂx)ÉYض$X†P+⮯.mñÝà·2wèÎ={V£9Ò;¼6¾%œ¯yýV}éH*i°€¤¬ðÈAX—üéEP;¸ßÛKÏwÛ NáSm±½Èï~ݹV& ¸‹’ëô`šØË¦G‘u5 v€€æùcé'DÚÝ­;[#»~¡Gìñ–¶íNhÞ˜¯ÂC+×bR­ÏI1i[_³ÃU@Y„ÛÔí¦”Ùüb5ﮦbo¡¤ÐµeÒ|–ÌÉÃeÝuÈ ½»(U¥X‰ÿα¨{ÛjH¥d9K„¸N™²Ã + Œ0%-“ÚÍøïµ&€`HÓ +6)û²dÙþ!]i»Ìþ.%‰-RŒ +³Ër&þXÜ œ¢¨ zÆcXÌn¯I4m¸G?T¾-’Â6È‘Ýd…}UÜçÉ8¥½,EóWð‡'4€Fß}l:þRI¨%̃žómò‹k]²Ÿ“}âѕԙtçõ–3Z¾Õ¦(mŸP[pôÊ7ü–À«Ãû†N‘-³çå…,N™"Hm•÷(±8O–³½áUŠ#E¿Tš2°ñùÆÆ'Ÿo|²qå6S®2Pº¹(:L¡j*°²Q%5kƇýÑôfYñ­Y‡§"Œ„ÞnjAž~’èP]îy`û Ì#CðSl·}þ|6íVmªlvL¡ð)ä Eb3ø¯Âu‹ÿõ/”½û>B9丙ÖAvkaÝ<Éš+ +±§®”6Bb«²œçzyzh{w¬é¸c)FÚçÓƒÑÃ4%åUKÍ¥2kà‰ÀuO{Ã]à’6»³éì-í¼Õ´×ÜјÁƒG¿96€–ßzË'eEØâÉÒÆDØÏo.áhÖP)à2ÇÇèÄzI†ºË©ƒuÅÅ2ÖëºY.ËÊ-Þ™¹ +u¶oöW¥[ÐùQ+6àͯã•VÛnþª ÇRßîî§÷œ:H]±>ú%ïí/;69E-ˆ›Ÿbи\•‡0pJOIÁf§´ßÒŒÍ΂¼âOÿwo÷¯Ù+*ñ³Ÿü‘Sê°Ê[ê*ƒ ?Nì_Ï`ËyUÇë]q̾'_{â(n:ßÚÛÛCÖé@¯‰B4iêû£oÀKË7’›GrŠn¶jç‘d Ñg_RúÛU;sÓGOš†’=_,32tšq€_„•T—þZ7”‚%ž¢$’ã乑…ó•‹)6ú[÷¼Q^÷'‹åp3û…”þèw[Q668ß„qËL‘J½¨ºÕcyVŒe’ÖÒøç%9᜸-`§{™óº³TëûÊœJPÊ*YV”Y9_T4+b.)ÁEæŠÿ·\Ÿýïæ@ØUæÉRl¹p-Ddnÿ ®Õ­-g3žÞÖg›*éÝ÷4dU|t€4&¼ÉwokscÓ9€_o}ùõV¯º†…°g¥ïpŸrŸ–OF¥ÃR\`bVcÐÐá‰:]2¾åœÖ/8ï𔏖sjžšOjíû«Á›‚ûüS¬ÐbóÔ€®y¤ƒc¾£££Ì<}ôø©†­G¿z&ܽ~éNïÃw¯3 ÀiïÞ ÆVFÛ\bMgh^Äg…õ ¯:Á{çì‰Ð~Klþñý‚²¯Æ[œ×ͧêÞ;<ÀA%j'ñéß8忟 õQbëûØ_•Àg²~ÞI:ììKüz~ç–‡ï¤$ BõÉ–Héyõ!!£§§nžøè¨ž:ÉÊi€;;t«í@¾ƒþ~JÀ§îL³Æ½GW³zôf g;R +HΜšÅ¤¡¸7ç«ó7ÿëÍùóùhž²/¡_SëiÝWîõ†75tûÍ*ûV¥… ø¤º©D£ZŽ9ükXõ:W¯Qž=¢^‚6' ‚FÙ-*—Íüæ¹Ì­Î +l~Áí è“U˜{³ZݬO›zîšWwé²›Õtüërùí›07—¹þæøó U°§°_Ž »¾OHM5Øn‡{«ù¿Qx t,À{\=•¯ÒÏÚ@ˆ°-m§T«{¢<¹.†BŽŽ)J”AŽÁwrŸÈC¸Æº¶´5ƒn¿qÌ„¶¹ ¿ Î)ï¾1¹_OŽPâÛMfh¿ ôñÁHÑ +E¶à±ý[ò~±ø÷)m~a-ÒXSB3 +ŠJ÷ñu'°®ëÕÔ>X„o™üçÎppÃ4ÌÂh <ÜûAoÖ¯|‘£ +µœãêîÁÚ¢dä"¨®“ÉójsèbéáA¸þåz@dÙÚS1,Ca2kª~}ç‘x8ç &À9NEæhõ¨ÛÍy6e;œ§Ï\Wážëè®…V¸Tªõ¡ÙpIæÊ±øß Çi.û™«ÒÈÓÊ〯|òÉÆ_ºú³¤þ0›¦Ziœš}«·õ¹›%A½º·çd–(x³È³äD]SbÂù$›ù˜Ï«jÔ­P×=ðoŠ †ߋ竻F(‰dÇšáOý]þ“«Âýgô¹ùôJ€$·;Þ¼¶å±NöL§ó£ùQýèÑãSðߥO_¼zë†7ö¼sýÿkþ¾s:à[Á²¸ÐÌèTÌŠ«.ñ âæ6ÀÐÕÉvà×G†Á­7_0Õ¯gCô¾b—G1ЬHÇÕè5ÿ¹àÒ> ^ÿî/oñj¸:†Cÿ²@T¾ïw^ù £~ ù{ þwoß¾Óú‡ß÷ÎÌ€—nôò¥g£)žž>š{ÀÔ‰8Qw2PÀ>ß"¿½0åò +-ÊOüu;;Ýn†èww:nNäðü>9âf{&‰ƒà7·s,†çKð»­ß›9ƒúž¡qsûæÇƒ´çyx¤ÄW9X"‡xèÔé\+§zl”³=þkÎõøìêfyášÞÐg-'{yç«îÎü´ÌIÞÀ`N¹ðBæº7<†Š+LÀYÛ  0×¹ÙùÆ“A §Hø$…P°ãù)åÏìˆ(çdìÀÝöæµkk2VQg7aÄl„Ï>CÛÜüʤJ>À?oæÜähüxˆG{]ãB„á! sŠŸøÛDkV2—iûêÍcž^ƒ±H Y2õê¯rcDÊI ×®mÅg9eäüqóÙgÜ%âDø™¡ÿ’“¦ô‹¼.òÕ"sÃEgÉIdÚÍ_•£^oë„ã Ï²"yVrs‡Ü⪼ͷåQ§”ºäë6ùL¶¥ä·åÀsML×5yÙ¼vþMC9%&´x®}umk¡„mƒæ­›Ý_ÞZæú>²ˆäÄ5Jÿ!ýÌ€&'ö#4 ËZ¸m3;YÆËåCZGôRÔN º¹?õ@€ûõÙÙ +¥»D=AK¢mVßô§ÿÚ¬l’Ý‚Öíc|ea½6.¬=ñõä9Ñ=yþ|µªG£ƒúùÉɯgOܸl|vv¶ Ý +hk‡v|C£?pÿƒß\ÕžøÒÞ°O딦§YžR[F7¾ÑFV§êÖê)ö8'uH²µªif8ãJ¹ñ 1ç‚x…vãÐN¶úW ŠJßÕv"Þ¾ÝÛù-¶ƒåßÁîÅòÝìPÒ-ÐveQi·Ûð=nÄCJæ§07?­»_‰¬ô£°1ÍöØõ“Õóç'è 9ZÃa‰ØXÓƒíiÖß,ÏsN,ñ¸² »ïùè1æÛKOBu”Ö8C¶v>Žé( r«i!î‡ÛNÆZ¶¬¥v£cy~ä˜XùÖË~¯·®±ó­鞆nQÛ;½¯;½Îg>¾o[·­êêò·ý±àë­¯ ªs»Ó«\³—Ç…v\ñ‡ÜPþ;‚§Þè¶=D76]hÜ‘¤Ùg“QWýmžàmXrÅû2GË_Çè¿X Ù±Sa´Ýwp÷®MiòB[bzˆÌW¥è:OA´”…bPCÜøt„]8ò|Ú‘Ý+¥l9ïÏ SØÜ9µÉ ûæÍôÍ×¶p‘;eÛsðáyšñ8›GºïßDdd)Ó0âêî…ˆ:EÁéô?#ÏîŽh- ~aŽë6_!Œ-Á/nÎIžÌqÿ£¿+ûåÿƒÿúáêilî]®šê°<ÍÝןˆaÔSÊ82du:â‘ !p¨Ç£î7}O]%„h\Öó‡v|»$O_¡V‚®öóRº<žÆÃh +5ÛÓ¸q'÷çÿ~:¢žçœ¨(@ì6Oí­}pƒ*2?Y¨ÖÊÌÛdYú½2?pîôÅšPÎçÓÑnŸDþ€sŠN9G²N¡7-çÔZÒN^S¥Yì>:Ðı£fÕtˆ³šµ…²_úÔ~ñEu¨¾Á'’1nÚ²ƒÕòæ(§ +=Å2)QaQžS®ˆŸËçÍt„&ˆÉÛrè”s _Ðoþ Oå¼í)µ ýM½i¹O‡“òŒŸ¨goÎcÛºZ’/á¬nú™sy®þg—ïíØØØê ?Ûë¥ Ài¬å´Z uSåHüvþA€(f]Ýîoc3õ×CúH¡F¿!â‡ÅE§}¼÷§]DѲ YXàÞjÔ'go¾=8Zs.¡t&eO›?PÚ?öiNÀMýöGôÏd€bžBÑ:nÓ1:² $Cxüxþ´yüøé3ÏȦÀN|GxÿP|ýŽŸ5ÚCÎ „pA¿sõ<(+"ëÝßwvÙ÷ç ÆÕßÒ++·¥Ð~­EîMÁs€ÛÐqP¡ ŒôÖ‹×Átâ#„Làÿ󌛠»ä‰A~÷VÂPä–;‚áV†U,à˜˜œÐ Îà¯=¯ßúý£û(‚2Bèųgö‘ §æÑÑo<p:r]l´ˆôü+m®ö‚?Ü̺õ ;Ľ»&U:¾þTu‡d´ÊüõÛ{RÓžyHÅù9VîÇ3Íò{9ÿ¦?_ζ=FGàOO(J³3kü’æ{º=ü7§ ƒ5nG7ÜßÝŽvK]vÆÛ×”uaŸØìh¦ÝÊÆh*eÞ)Ë0·júèê4/hÒ鯴×¾wÏÏžkS0$ThFÝé’òj¨O½8y¢}÷D²h¬„Ëy§zsNdX¦6ÿ4…´´šdž‚Vç —åÄfiÒ-õ°råõ´´D½áÆÕ-7ﹿœê®ãd3q»SGå´]¬œÃá~µuu˱~'à¶ë|»Iµ·7Ü«ö†ûÃê6¿®ÐŸ¬ìÎ/+ùíÞ³E@,€Û4†´ö%*«æ¸7¼ï €«ß&ÑíWÕjØðüîÝzRŽÑ!êÝý=Þ¬öw÷ìªÞß7C\ndCá :MsºeIí™(Ršb‹%ÆáœŒè`l"7šíˆ™ž[÷ªrÊ4€ƒ%ÅÏê¼M5)ðQò•Bgÿê‹úfÀßrµ´ñož|È×åó³síRœ›lxÔï °Õ™É0‘GAÎGYn!R²wëjÏÆŽæ¬©î×LñPHº£c  ¶± ®V«“n}~&s¤Û"ÿƒ¿úgܵ#œ«¶IêßȰÝ7ìİ÷¬{cÛCZ=jÖSX;^Ûéás_¸ù«Òëd'ÖºÃäÒq½qjÆÊ=¿7ºߺ&0ãÛ;ÐipuoÄ¥<÷=¯Ë­=`y’àZÎ9¯V¦å®í÷3ž +Œ£LxÜî xÙïþj›ßIP!^-kJà‰yÖïoo÷q5¼W’´ÓÝÙÙéÚ¾õzÛW·;×J/W:Èìo»8øêÖN¢’ÿDìUËyçF'ÜAÈ´p_^›†p^x i¸®èÅyǤ\¢øÔo8ÏÕ Dª'ý3®õ•y¶ºÜèâð¾CEè’¯¬Ãé^['fã³ÿR:KïÞæW›_móÙù»ülšzëa»sõêWÛ×¾Êc³®“N;®-5k*¬Ë1Fæ7¶¿Qèk +Û-É9:ߛ̚:ùôS¾?þÑÂÿIRðåe§§pF®p ½ÚO3@ g€}Àà[ððÝët†¿sW!– ×ùÿÂ1„­ ލº32æ?º‚æ· ìí³;¯fºh­…¼öÒ)··o£D´wŃz÷Лo5œ[ý\ç6Z* Ü¥‹À¿PÞ%6¨ÚdÏb9ËÔFÞ¾Rãqûñ_E û$>CBO» Z4úx¶~®¹2Dü/#¿¸ò‹tÿçŠkÇÑ>J4‡¶ñíw]-ùŽNÑêM +¬2 ä0ÑÉl±(Eâ7ÐtÎw¶ÜkŠ©§ÑxÊ ² ÑRï¶ÛßñõåÖ×Nyéyâ^kÒtšiËÚæ¹æ72lãrf 7…¹Ålñ»“2йfî żÍÀW(·|ãß¦ÚæGdˆ#¤6Ô™AØ Ú!1foØì8'°$ÂqH²·5ÜÜ4A»™âÀ#Sè$»½;$úÞ¾‹ œË{Ò¾ëlßž[~ßrêùq¹_û‡[ýÍkÃ^å{·|ñoCH+¼s¾~4½^;cð‚²¯ÒjÔÉŒ öLÄnÙ8<À¡ Û;(jÑ2·ÇÙ[ÊG!*:oÑêêäøƒèœqQ¦ { *À>Ë1ðÐÔßhŽ´²ÕŸ”&‡‹ºC¾fe´”G…®ùÝâ$Ó ?O«¦ß!`yW‘ +9#ó–b*SÄÝDåêmµ^:$³Š¯u¦b¸jÿY8L ÅW³§]$_|8ŸüÒßäÊøgÐh€e¹9¶Sa48 †Žt¦;{Ó)söœN·5&u½Lé‚c¿eÑéÁhz³ï0©]3ÛikTyn!ƒÔ¿Ñ~³ÝõGƒoúX¼°ðÜ´z1P!<‘*{ÆLÛh4Ÿß€GMùQõ›­Ý%8¿0+ä¼$FoZÊIÓ|ýÛqÿ’±çÎ’Ñ´{ƒÆ¸íP)>Zœ“’ñø`tó&±€âwšF{‰Ö5ïnº ;~õ_í2ÜÚrHÌq7IÌì?buabP÷ààçéyUÍé ¿-ÜèÒR8GÊ#à°0®n˜C…óƒøÃÇΓh4êÞçöIòë“»ñÅ«k™+ôù”TN—7~3­Ì˜±ý?%…$kT¥Ëi´³)ú»LtÜÜú%©´t§×§˜nSÞ=Œ4 .GNšÒW'kúÞpR~E–)<“'Ka4<¥¨'·p~°}P8‡3E[—£–óÒQùÚøi·û’î¢^Š<߸dÊÇéŸþ‰¯Ï>ÛØÜ¸fÊL7@–5í@5—>}ê^Ù ÐŽoÁï-ŠÀ»÷¯ÞÚ=.ºb%¿·£¼€h ¨ŠPµ¸S.5Þí˜ß‰þ*ß½} æÆ®W Ð[ðÚ÷Ds>h¾í¾Xà[ÿ¢ô€(ºrÿþ/¹áç<"ˆŒ(´k õe É ÿ™Ó¨ÙÏ·ú³7àýÛÌw|õîýË×¯Ý Ø£€ ½”ž=SBO•Ó§GdÆ`ÐCÝ£°l|£ 8êüOTòBBK,‹c~šlãµÅªå¸ßÎóû xé1™%¢~,åÝ쟕û¼Ï +¾ËÛõpËL³¤*<`Ö¦ø=©&>²ðO*þenÒÜ«ë~ÖÔ†¹–»\—X!åF/‡Õò`{œö<©¤x=.Ëhãuj´&Ñk܈&^ܬƒ( ”…låÆwAš•‹º´°ƒËkþ{ׇ›½[IÚÅ/€ÙÝÌÃcÁvÜù¾Þûòöz¶oT€‚î|ñ¦w¸¢ܪ6¯Õ=• û ¢¸J€º'Ê•åÿ­RAd»U¯o_ +ˆP.B*Ú¡’„v `ñîÕ^æÒ+ö¨-°â‚ØimM0*@™ÝlÏ ~ŠD›Q§©<].rUt™ëŒ_^¸[D‡?õCs?§ý7T+ÁŸÿɬjꛥÅ1ó݇|µÐý®l€ßò6 +@Œn[@H€‰Q'ØWŒŠ}'¢”"Ó¨W¿È×òSfg‡Íê¼ÿTÏ?AWÞü jì#9_ÕÍ«ÕjyN’hÞÙµêÕ£ú´y¼\ž¿Y·Ýi½<_4.T±¤¬|X½Y­^œŸ¿ysÞÌk‡ Æu³²×­iì›8Í,_ßÚeUÏ–Ož¿Á¥žWÝ´ŠåÉòUSOí·µƒëìÍŸÿü­=cOÎÎVo¾ÿßÏÿýÍÙùêQýhÙ6˧ËÕ›7Oñy*Gç„KT/Âýª1zêFs +뎵ه}úPßrÕ “X㯗pî¤Í7çËGK?çš•g7Î +åýÂùâü[É=^,W>[žÔ+»ÐíSBZ6'ŽI4‹?ËBHÆÉ“7ß.Îþ„ h6êMTjrú~í¾›ëV»­­Þž¯ÃùòÅrnG{Ó½âyk´+n «=.7õ°ïi³x@ôjªKÇìÜPZ.žü+íÑ]$Gë'3ãºt•Öiáü ÎM2œ“]Çu$KªƒN…óÕŸÿL–´œÿïïŸ?ÿþì9Ù72:häüÕÿ¢xÏ›?”¬þIRqù)ÊÂEÊi€½>*-Z‡ÛÎEÿ§§?{üìif¾xùÚ < +ô{ýúíûׯùϰ¿ ýÎ)þz`7é_¢´¨ +àj£sgw{ÞÞFMÐ³Ïø M”Û÷bpGHpÎ*ä‰aþE”.H.ZûgHêÆBå±ê„¡¿{í½!¢±ôÚ pt-C™P’ҵƾÅéÕ«wo_»'RéÀöwjij¬•8=}ôÈ£€ÐqÑæÙ`sã*º£Ãé­{€:_ûåŸ-±|ŒlÚ„^[Ý{6ìuÕ¥|ba_4Ô6ïå}@ö÷‹ÙÅ)Põ°ßÅ Ja¬~ܬû¡ðÍ[ùº¾6eŒ‡|ˆ¢ÏÐ]З¾K®4æR²h©³8†K™k¦ƒùhn.1—E—‰Ì9S*pä.²£(¢ÒD!PøŠ;i**Ô¿Þœ6eóƒà[Þ5F Òjå–kÈ”êdšš“ùÈIo³² Õ5ú3§[—Nª{Õý V§Í7ã7 §`é!SÉë“EÙl©‹¼Cû€f¼>ÝØúkŸ–O‹çë¿[œýß(:ö`W†ðYc…¼ÊºE{&‰n…9.á’Aˇ£›°":C°LÕ\ü5ÞÂyýp48?“G=e™(µÖäru çaJè™öá܆"Ddz u\ĘêJ«³È.‘Crüj';n—Q7OØ6¿*ÜRxŒë‚s>É`ä±BHã2)"LµœÃŒÒ´²óƒà—Óîòy¤ë¿Ï0=œè%?%᳓röÈiá[Îi3ÝH"”ßßýîþñù¿,''2Ô5Ž´Nb¿L¦ù>÷¶6ìÿÜS~¿ü2]XVÓÛÃýºvzŽr)¼äÔ>zMÕݲ.Q«GØYõ +_Dz!·„-Ÿ­Ìל[úº£ã%ñB¨.0¼~hª¡ß-ÿò/ÿÖ ã ÿÎïëõg´%}ø¹ôçlõÍ õœÎ4•³ÍÖÐ<àÇâ} êa÷¾~¥à?Æ0f1 Ù~ìî™÷Ù«€6¿~}çÎ"¯`ß®§ÃÝžïEÜ<±ñ¦½ÎOôaYOHà2€­Í|—‡Aíhy9Ð^‚À³wÜÆü;T–¬åÏ=þPAûOÐDtéÛÐ[¨Lp²ÃÛ·¨:v”¤£=}áF‰.xzzÚ¸ à‘öÿxÜ JÔª ÄúO²aÝG(öw)ûY»ÎOµ5oØøûalKÙÌO²žÂÜï–v'åšÚÊ——ør·oš=Jüh[¨¤±¦"×í} MÙ:ö¢ã²á5²¦Ã»Þ´-±8!sõ7Õò>Qý9ï{Ôß æh;à×ãõ™t2—FÎÈmleN>'Qƺ§¢¤’…ÁBý]î8w'xó§~õ Nòbw‡ÍOpZqøå ÈìA{ÔXÑZ·öË(hk«¾Tk» ¾ô¶×m]~ÉÛ¨¸jÖë×B×±\¬S!ì^4‡y!RîŒV†àŠF¤Qiq’/fG0¢›Æ&QE^í9NC(Y ¸'_iYPÎcå¡ÿøT JŽ/ FkÁ_® w'ûeòóšÌ×Ì]èÔÍòU…ƒ§(÷Ú|•d¡è„bg2H¨+üåÆP“ˆ‹ÍÜ(tuv?âÕR„?N…Ø:ÚßÏ[pùõ‹„— µlS±£ë'ÁC„¦Há{MÑzv‘×eÊ’ì(¹¾¤ôrq,²DWΔ“x-R++¹X,hÏyYWuÇ=r +9>“8/s–‹Ö±ýáÕûÓª3ýVH¸á\Þ¹(œ·D³ð°(mkâaÔ„ÂyyᔞÓÙžW# [‰”2òï9˜ÊÖ¿}õËÊ}€C_¸À§W>ý| ¹P:¥¶”µ?÷Ýýª[e3Š5çmD2²~ òè ç¼À@žèÍi0¾$ëÇu¶‰8^Ô*qyÑ= U4½Ìê¿ÅJÂÂTRt©OöSSñÚÖ*­Ks'Àìsþ·ÊFÀ´i`:½ÈÙbî‹Q‚ì#Ô¾ˆ©^sOsêL‚‡IŠ\ކT‡Î~á¼™M»ÕyZí"ñêÎÃ:Å)êhÓrnQ­Gƒ“ø’¢¢pÿ4 ì?I½A¯sÍ:Nèô޵¸¥öèôéãӧϰt3åíÅËg¯ž¡ ¤<¨èéøAGÏÇ…Å~ÐüF·˜*B«” œuW[5 Ö<ž€aÞpŸ£ð1ðµ½}òGïÆo_‹™N<ñ…¸QcÆK´ªðñ:!èMÍ ,ãƒìn(“Þ»§‘!ëA¼òöÕ{Ò¤Wß祷°^öþu¤×­ðêå‹ÇŸe ç +;¨0ÃQσ677>»òÉ•­Þhmþý²À̪ŠÂ‘`1£I\×" +Þá=¾K°pÅG_ý¾Ë„B¶³Å5f[ªoV ÛÐ^þý¸uøº.ö—óB¢<䣷ªÓ™•镪Ä1‡‡CÀZU%,ç¹[ç©Â™'3Ö¯TÑf–ø‡Š9c±å­pm+• +þqUPðEpk© ×E’LÎuY}‰Y6ó›4+ÞÈC!"¬&º6R5ΉÍ0^î÷;õ¨ÝSî,wò.“ „±?ºóÂÐpTKܱåä‚îóRëÂOý‡õa0¥+*$ÿèïTÚ%UC¬ìƒze ‰L‹é _Qh§¿õCšŽ¨DTQ'áŠÁ8&ˆc·Òm{/Hé²"4 ÜJQØîê¥È›í±3ûõ"Î{ù^ÓúòðyåÑ6õt´]}Knh8WØÉ£’ˆ5¡`zê ɹÙyÝ®6‡‘Âþ¬Ñ2–ó1œSuàêž¹%ÑFä—$¨Ã +†W·ª2åvëóÏ7øÇjþôŠ3çK´aGÊô£\ø›£êþh§zƒØäܾøEïÍEðÑq:ºliê3´pÎï4¬Ð¤D†­ +€o«Óý~ñ?M&Oêyç ©²Ùq(åuÍl¨Ÿ£Ä•®ch*Ønö«þv‚-ñŠºP;thç"5¹( ž˜8´ã4É2yŠsE8‡‘´Ü”iw^Š oµ=œ-猿苿/œ7Gîcéüк:ÿ$µçÇÉ2ìJŽ2F¦Gõ|šI€¨ãޱ‹Å›^€|^½V ]ˆ¹ PkôÛcîQ9ØôZÚévaAåt¦ Â.æóÄ÷q|ñ1€@µjö9>„k\ Bdö‹ë¸ +Þê +DŠþò²Â’7šâ_ÛÞE +ä~Þ‚î™Æñ–}~ÀyXÐGVý½…£Wöz ÷ðyá(@¦ÿƒþøßÚÜFw럨WëÎÀ5NP¦ŠøË·*À~„Èдƒ“f!ÆÖ´9”} }ëÁ¢Ô6O)IëâßûýîÚšp>(ÚšMChq!Èm—ïht‚9”ý@ è9ôìVV)cÕv%Ç]˜3Ú¤9ˆ]‡2© +Eq/(î¸.ýznHkâ %ØR.w0†’à&>)ÙI–~ˆ„ÇmõlYXd¿jÜÖÿ‚„õýzÿέžÃæ­C ÿü¤ë>®C;€x@ûËë[ŸÙ‹âæK{÷óXe!ЮI¿y­¢9( oçÀ®*‚ê‚][ÿÝf€Gþoõê­Ní{vÿ'æ]’ôºO<Ë¿LðÓÞF ¸§2P +J ŸDÚaÀcS^Mb>Dr‹VVŠÎaÁ£”ˆVtd”Á@´ûéW6Ky£©Ö=%_ïi $_í}§½¡­ÍcJtß±½M°)uú¢ :9åØDdÚqä:,NêwuX÷vKbÔn +µy*żIA""Jü²“ÓÑZæþöïgì¢ÁЇú“ÖäP½2™kÔïžü¿r™Q÷a/¡Ëv«ÔNÛnÃÓï0*d)ççx¶húãåÃ;Xmu',Ŧ)‹¯ÅÙïˆ-îËíêá¨(³’E½½ŒÜËåÉb᜼ŒÛÍ¿»ª]¾ÍjþÖœ¯ ¤LUÌÂpNðf[5Yü.y)Óð„2°<988Q» Ad¤B +%K¹¶dRö‡õg_g*Ûnl|‚ݼÕÛ»èpºDEæ‡Eòhp³>Gtr"çˆ5R—ñuú åààŽ‘@’Ò/uxrÑGN +,‘‹“QÕ%2Wh»/¤Öa4š%f¹íú[›´¿%9'¾Ý-4™OIÕç_l}™Ž½[·‚ï_÷z×ú‹%jСmÐaug@«A!z0 ƒW›Ã ¦˜ªdiJd;Щ¹ð×,ªîqvׯË"/Á:9bÏ‹)øÀùI×ÝÐ~Àø¥É±?úÃÈô€úK?þܵ~ãÊ•O¯nüS8L8=:z4wwÛúôñãÇ/?uÇû9ùæ™ +À 5€r: V²œ(X±i+¤×hÖ +>߯,¶_¿Ž€îU ð Ó/ÏÇ^ƒØÿy_lÖò»í> ï¯ù[kø²£ÁA;û³Ã„aÐ{7õ)s\¨±ï£¼«r Î Z£Jó]–<šº¬|xù–”¿xæ..PÈ$ɧÚ]€ªéh4èï`ÿo`ÿCŸn9¨òqjsî#d%° yF¡­–kZú´Ï]J¶ ±íŽUç¸?|ضY‡Ô7}Ùd7³ßÏŽ [ ,w@om;¹<`#>z€×º+;»N&Ëá6,ߡХ(C„Hu|R9Ôi R¬+mma/\Á¡ÆåŰn’ ‚X1g¿wØZΨ±ãír*&d<_Iq…šM¹’çde]}æý÷PË;ÚÕ1]ýþ&e¨6»ž²ƒÆû ßÛºjCöÅ–{zªêZú¯Šì·z››Uïk'eЀ'××ó4. @vì7M”-¯¢w îýÉ=Ú¿º¿£ žFž'CŠ`†ìîï—Ó€FÛ½ºè (òÖž+"ŽhÈ„º hÀŠä"רwÞ¬æ3ïÓ¾ÔËQ÷¨ édëlI©«UU6ûã¥ÌÀ”=×9ÅÉ€K¯~ÍÞêx´“µ‘m'@ØOÀŒÜÛ¢T}Mèm6ù“ö|ÈL @ÚA~(4ó›#÷Œi ÝßþýÌ€$âl ]T'C$1–Eª(-î7¥{Æ ÉŒ)¬\ôlÝåÕÚ˜b€ý¢%à³4é%3ò›¥;Чäu‹3–vÄÇ;|f³3£ÇC=¯×c…½RZý â9±ÎÓåˆ5Úœ5gKô6•!<8„Þò-ªe¿ïø1’%ßT”“ã²!ôšu8oF'ú²š‹êfšÉ ?3r7¥¹êlRô3àó¢|úɧÎ ›]ÊÐre@Î×2Ϧ¿”Öêlæã“™ªà‰§ÕÜ$dîI< çÑtMèZë’óÂý¢õ=¦º•ùÚx™?Hf¥uÁSILl_ˆúšnÉÅ(UÕC¸òÙ†©úefÚçWh¸³Ýk&gîíG§@sR”~ªl™ê³‹Ê»m/z°'a-çöù›-–Ó®ó2’eÆÂYŠË3›Ïì÷4œ)Šõ¸ß4¡¿‡#krcZWb\úùðW¦@dÝf{ àÑtZÏ3€ðô©ÝνKÿw™˜^qàXõ3Y ]ÅNáäç>0ïÖÁ¯Ó`:Ë;AYÛû`~\ëb'<˜ìÊ;ñÝÎ…øʹ +F‹Ùü~/š'çú;PÿÝ[û¿w¦¢ðwLŸ/àCxºñžÙE ©„U®Õðn"‘з$÷íKŸ›g/Ÿ¡­2 L@˜#5w W£Ê€e‡…-oBYâ³þÍàþQ²”“ß^.–îŠ~ߥó«'´¸õòäÄf™Ò›Åù‹³3«ïïš'nàåúìEsÒ¼Øô´¹×ø[=îf½¦Æ ~GôÖšg°â° ³J ÷Ë-÷¬Y«˜8b‘ogÓ É0ÜBk±ªOêÑÁhùüÌ¡Äædé–bó¤ѨŠ<%|;œ`zÍ!DíuW‡Ú=î÷íŸL(xaºt»ÓÔDhG>.l{²G™“¤¨Ë‹âꬕA;žRÊÄ…p×-_o드èi@Z¾e»ÔñÍkTIänG ~oõ¶¾øƒÁiA·lìûTYµÝˆnM‡è‹¥¸¨>G}YTý©•8ÞŒ¿ˆt£Ì}ÀŸ[@C‡È£Ì +|þxZCôGö(€•€_´ë@'€Ìý€ê¹ûp/^<Î @Ù8“à^¾c5çy7ÆöôÏŒ×jŸÜòç(A™?ýôæ +ȉ_ùƒ3€}Zâ<'•ü8 í0&0¿œÆçKb?éZù¨(j)â9?ïŒDÅ"ý¯ßáj8¤Ï‡Zû™õgçêTÆ>HuÙ é…'#ýÁÿg§O«+=šOÕP'§]ý$ +@/Ë4?Fmüˆ†£´‚[{¹±ÿ´uÇYG³Ò,žN§÷ùà‘2LCén.§ì¾#ñæAt¿Y/ëSˆUã2 ê •?_-©D®>Þ½ Q¤)Ô®ú±h½)Ü·½ßÚúºÝÚ²>iŸÜv3ºáÐú½§º ëi=ýóÝ0·Ì°Ãô~öshÿò>=iŽ—\§Ç[%à,ÏÝ´Öa“V ŽÒ¤®V99¥9½ÙÌÝUaàffºLÜóÇÓˆ+â™»Ö’ïr¨ô¨†ýÍm'¸nnÁ?ÿÖV>ü^ÝT-¿µ[¹E_¡¯ùzKLµïN•^ضï«Ô‚/‘Â2 ÚǸém¹ÄçPÜïô†[¥´…Uwy|ÝY6ƒjŠÎÑ4‹D†½k_u:}âW@û•R¥žÑv·m#¹§˜Ý]Œð;p¢Có=£Ì)H‡Ìµm̪åYã^©®jÒ^¤m™'_§õê›O4Ná r¦ŒH8òʼ´î „š¶:[’UnG¡ËÞjM– Ýntã7Pò•<¥ÐÝ/ùJ«EÎ7ËÌg3¦‡*<²ˆÖ´w{õ 毗å·ðc7ñðögN ÅéÝ%Ãáû>Ðä’çÎs s®#$˜«¦7FSæþ–~Þ€âiç´@”`ÛN±¸Ñx¸u[1öND«¡ÏßiÞ½É@š² é}½4éY€‰Å9›uÇ^ë+ŠuÛ¤Û¦ç‹æÞut-ÍÓpOe¡FÎ=­¨.ÚnJþ䜄 ŸŽ¶Çâ§Î>©&÷> ÿjúý7^tø7œ·`Ä·CJnh<¤|à×àÇÒ± ,hüî9lÙD×»=ÜìÜ +þ_ |òIæÜ)£ðD¦€cõx_N¯IépŽ.ç¸È1â7?¢Õ ݆‚¶Nþä\Æó]&VzЖìxºgdE@ Uæ“r\éZ˜ÎëíÁ¡Mÿ`@ÚùéÈ$[…tP½ù!åï:w\µÁKÃáõŒfà¯xШ†×:OJT…äü÷rîW:МP-åœFFe/ÅÎñî}|Ö¦~ZÙð†Qªþµ€óS4è]s@::}·U¿™ÎaÕæ¤›ÇOÛán€W/@B€ð†±›â¨~sƒeíøºÖ3?và&¢£¸‹÷ØÜ8|÷= þµÎqp”à;ìrmv€å °`nŸ>”i¸¥»^Ìnñ]/ÏÎ6hƒ šñ¨(í„BcÅþG7ÐÜ—SÃV[x§þ¨×¼²/îëpÒcz>аþ¹pFä³§e ÀSñ¿vÓ +9x¯£6œ-¶úã£ùÇɤ>J7Z·S‡nt;ÛíîÿÞ-»w•=²BÛ7»ýÝÑèàà Ï³ì`ænìÝ7ºnQµ½ÝÍW¸¸üp›Çî²åovß÷ík«îauÕ=ó¯ndãvþ7ød‡/>eWûíí¯ÊNòÝ›-s7ÝçÿF'ûø»t™9·ø‚9¹3¢DfÜ7n¸oT˜ëÞ€»ì¦ÅžnšÚ›8Bßt¿ñ•¼ ‘>7ç¿<6bÓ»ýU¶Ñw²«Ÿmå·lJ&ý>—öð/IÊ¥½ý×®mêéê•‹ÌÚ‹Ïþ›[›ý€.i>ÇûeºòÙ¹¢·ì•ˆóýÙÅ?\í¸ÿƒQåj_mþê«M%K*¶77ËÙ û}¶éæ\»YBòýðÎ{$ÞlM¾Fl +ÎPÈ”æÄ7xP4¸Drñˆôú|":…YÞÆÁÜà¶Í×dÈ þâèžx¼îK!óÕBçö6@Žó¾L”c `@ÃybZÌœVÿõ* &šþÕœ…`Ú;;%ÚÎ Ë‚ȭߺ;޳X¼A!úÛ¿ÎÏí&ï´—¢¨j¬ˆÄ­XA3­VSn€~¶À­y1ô1ÎÁ™-5;ƒ7åŒú¬ôK }RštÌ9mµÙñ¢îÖ}º—ÉöœQkVÌN4ŸíœïYþ¤QØ^EwÞi9PÂyÝŒ¶« +€£<kñqA(«É$œ¯5€ L³æ€Œ…\à-Á| ²ÿ”øÖv¯ÚŸ`߇Ã^³7êýwêÒé+O³—9¨Y…_Ë|8‡Ç{dè\×㛨ø™ÛÜrÞŠÜpñ­Ðÿ5ØYªtAíc=ƒè.¢Eæ³æÄóôÿ–óx-”9—«-¦hüÀÓ…C”Ü{¿üDüEwµY’¬F޲~­Ï ¼îö¶>ÿ"32Uûß.<§Z-ck\&lz7Ò +ÿþ,ª>êt[ð>ª'éíÔþ“j·zóbÿªËOR 8§#¬Ö­«ÿ±eú$U·=~äVÀè/ìõvC@çÀñó.ýB™°l'»³çí¦–s× ¸nP,ŸAv1O±}õ]Qˆö7îcÛ Î8ªp§F‘xô&Àg¤¯óÝÛWÀ„ç—àQ+Ô4ä p¦T%DvCïí•à v>¯³°Á®y2Mjâ¾ßùØð +ðGzñl‰õÿ8çA"7'ùS¶< ð³_\Ùè §Êñcd#ú1šŽúÿã7îP6Ø›f:'ØEKçös5VKW£Æ­N–èºNk7™ª¹oIóØ&êîÔQ^Þq[©i5”¸õ§_uúÙ÷·Céîkûw¶:Wù¸¡ý효ǙSà=¢ºÙ6½õ»GO³uÚX›-*ºÌ!¹žŽêW˜nÔ8זƲã÷Èѹ¶üéru¾ìÂŒoš6ßñ¶;§p=>ݤ*Úr»ÈF£›|hSxé¾ jmåz9;Fãù3¾<{rÝ>.[¯{»{\kÔ SÖëlb†öo‘v þ}öYùÅßîp˜J¡pâ$~seØù›+¿,ýžñ„Fð9:ÔXê!Äcèë¯ûkýþNÇ5"ÝŽ³ý>Í Mx; €{;à³³Ù6:‘ ámþû½¡Ãüìü¨¨ªÊͲeØhtd`n:Ïo~ƒØˆ.’«íp:øÆ|s5'ÛS?ºƒ~òuL׿+m€/.±Ã 0-^ë|§Ð™¯æ6þdaè6(f%xØTÛ¦$|÷zˆùË-îû·oM㨻M+˹H°£Û|õPd¿[Ï̩ǣm"þÍßÁÿ‡9Åú µ”¦´6 ×£nµ*sÐô*P2Ü$$€j~sPÎt»ðe§õdrò»v1»ÝͶèµ+Òìæø~µwyƒ6o@غtiÞ‰¨+<Åe<ºø/œŸ2<€çÕŽ'4ÀùArt øo*!nšnÿCƒ¤C³5YLø9iF£ªÐeÆKŠS:(äoâP¡ùÛÛüº¶àsÏ}ú *À½vØå®ÐÁyœÖœO›ñÍ!<ýPæ%œCËþM·F_p”_9o{Ò[Î͸O;dÈe2tG z-ÅÚÉB“½ð¸×ÛìašîíÃön&jÊ¼ÆÆp€ÉU˺_òõ°ôèÛºóûðþ´YÍG_õï.›Ù‘a§}ô¹Û’©©™q ¬=γz¾mÿÅ?m¦Ý¥ç.ðbý°ø-…dàµff¾/žïf%_d:—÷_Ⱦéôœ¹íŠK$ˆÊ‹t{ØÜ]Ýê-UÝ º>t¯—&§Ö—¢²×‹Ì^k’î7Qs.ÿMæ>-zEkL§¹Kqá$vžkG*Œµ)2FX5 kÚ¶8^B÷ªãª3P ­CK4Ы€‘óº´í£þô¹fz dݬۘƒÕ™ +ç§;Áv–‹Am\……4î*m‚¨œ‡uU† ¨iÝUÀz´$ ®k_pŒÔ;Ýs~ob‰øLÒ{±PÐ(¿`z8ôC-þG°& z_ݪ¬[¿¤â¤ À>€OQx%ÀIe$q͹2_s^9pÎ×½-ë1€2'j€¿á×z ŒZ0݆IÉ hßú +E©Sê*²ªQé§è¨m˜£uò‚Ö°èÈËhØÛ@ø$[åÿò—¶´&í@âp€…á’ˆHviò¿° îûÜ)¿PÝÛv~OK$)ñDuÉø?òç''Ó~óÄw‰s2¹0®¾˜âÒÔw, UÕÉôá·–Óß¡æôïü=~úx¼c/G1Z,=7˜ͳЭîŸ=}±zù²,p"°ÿê-pó_àÔv>ÅX ¨.ý<Ñ'° +\·s…wÁ¾Àý+p7Èþ“î}†j  kú ì—È UHN§Jƒv<þÕ-¢dÀÁË·(Þ¹€€¸ Lø†ìðà•ª½å‰>ÓC`|väõ·ÄkBs‚^~éšÐ‹—èD/ìÿ÷Ðd¬íy-þc$—¢¾³Ó¡Ô T Ƨn¨ô1jsçG4ª«nÿ‘U¿S7äûŒ,O¡%8TF±ÉúC×”Rd)(T‘#tÆô2RÆ…—xZn/ˆrG°i?RÎG«ýQ- Rf-ßÌÛ[E¯Û*ýå¸ó&ꉥ¤ëÀTú¥R9 gje6r=õUV¸ÔЀ'q΢|ˆQ·.·çý¹G•ôYmÀÐýjô«þ(ýuAnÂcZ;7ÿA±‹a}Øù¯Ð½“é°/B;=?;ºþ/Þ®[O¯âã:°-è‘ L +¡ð—ã166†¨F<Ï6àîw^¦9Ãà¿|¶Ñ³Í£ÅË÷ÖÆãâÊ+}øk'òÉØ!Ìõ6;wµ‹û×¶÷€ûÂ85:¾üd@OÎѧ»¬A™SÌw@º˜MØw›‡‹((QÌ\ÁñæöàQåÎ( ž«y¿‹äZù¦q·P˜!hЇóþÍÌ˜Ž¶mm“¯#7OCm<­.¶Êõ!ÎäiÃälYû5 +×é&N(X¥lµ„ÑÈ㫽þCò´í÷¨&Î0©nþË+ í?„¯‹½ÜÅ`¹LWĵø·&uÛ}ÚêA¿O=µ©$)»ª>èÔYJ?YOúKªœ´ˆÄJys˜Úi‰mq]Uïl6[¦?Z-Àß3g ¦\LÙgvåcDiØ yl@±é }¼9¿Ž?S +çž?'ŒÆ~Erw©GcMYrÒ×Ém¬çUO»;?â^à|qæaúkÎQÙè"~§ZFÿ=¿<#dXvƼõõÕkž½!©5[øU²À`"œäü¢yƒ}ØbOðÉzè"N„Þ6´ýδ>þð,T»š¾ù#B?¶ïEÖ›EY°–/Dùã6½EFn8šbæ Ä–ŒÊ¦s-9ÿ»=v¸Snêq; ×ÃÔÈ€€*ÀÞnÛà'EžDïk‘ s£Õ_Þ@ű +HÛ{ÑÔÝé*œËÒ(œË%AÎÕ(#²>Ýv¯×-s: +~šŽ5ç|÷¶Ê€¡ŒãÑx*¦¹% ZÂiÖºað¾t"äj ‹eOçú8¿…ƒŸ‚ªfµ> +îƒÚ>Ѭ£ Dmˆùíž⸪C{'kŽ7™âÇ3^!L»ŒÎþ< #„W˜ÿ¨j „gßL&ÈÒ1Àûh\e: ƒâ¿j +ìý\«! …¸Ìų̄ÿ_¸ÐÓg`ûc7 1r^Þ ï‰Ê–õ¬ØÚÚLÕ¡>N%?FóéWõÜF©ßÍŒèÖX¥±†,5Žã:% •#œÖí¶ø^žJ³W-i]†õØå6j¡mÈpôÕöݘùÐD;Õ Ý,µû–õ~êS‚­§Û#jÐxŒà¹Ù³¶árHOrQ©ÎpD®Éx)å÷Þš«ÔãR¹ïT‡Ën__“R'ypW‡nÒæ§™£2:cˆ ÍÒávµ²mS[°-²9Š]Ÿ>ÉáµM€Þ×W;´[4S_Rg¯[oMI´|QO{Ô×[»½ÚØøÂÝKݾÄU¿Ÿ¸ˆé“_Ømì^Ýül«·‹eÿÅ/·õÏ?çÊý³7AúÍ­O66P0üý·®ü·+Ÿúœ€i¾LoJÇ×ö³¾¨~{s«ª©Ï-`ÆV2 hÛ±ÙÃÅôpC6´€©”â¿©¶Gõ RmûÇÙÔD4ÛvùþÑßsàý¼ù‡ãvrÀxÔ o” nˆ´œåQÛ• i=NoŠÏpiÝk­¹ãÙóL Š‚Fý1¡ âTøŽPm•#tÓVÄlͤ¢]f·œ©çJÌ*Œ +ž'ã!Ú‘#éA|iÅò£|©—÷»n7ì#§JS=ç"(“ çá‚È(AeYg^‹îF[a¦¢jó}±ž˜ê°•)¯Pz.úÖõ;jøm‡ËêæAÙßϘœ¸æ¼°èô:³Ä}2@~a8Œ)h³x³ZËÜϨ[e`˜/AEÂßFc)+¢VX ½”»”—ñ°—åq±6?/6€5YÚnwÜG}­”¸ÐçY<Ôz0›†ûuûn¼ ï¤:Bp~¼PÒß>?™!ö–óª–^ + Ÿ-Ÿ¦Ö †Û¸Ô£›Øm^A±æþ.>þ{ôèñш„’Äk[;½¾Ç[Uô6Ϭ¹' ›ÿQ^–c^¿p3—Å©DuÓ ¹XÑk$~#¶–Ñøô¼ÇØVƒPQð_ß÷|S·lº“‡ðAc_Ó›¨ ªè<÷y'U ý'ü„ Âðö•±Â‹¾ù‡E‚ëy¬F` NjŒ.``¯Këß¹~®~0»:^=}åòÿgnüXó? ÿ££é¦–ø_”ÝÎÖÆæN8F…úÿÜ€N¯­†E§QbûX›È“,¦§ —‚W?ìš³< ÍZyKPæ6ZÖݧƒí©ç r¤‚§ÓÁÕ>ðìÑUâ>hÔ¸Z®êP3¢€V)Çy­dÔ’é¶ÌF7§ YŒo’S´¥ç¾uësgaÿ_pæà.>4M»Ë9År]ž­ä£Ñ]µ›XüÆ^¢L,ÿuus”‘;·+ôSûTh“à¸?¼Ê·“¶DL¨¨7.èËb4÷°{¾·uµ·ýó*TqçûØt©ó{å ½«_ö®\ݲÀþ/®m‚ÿ8o}öÿÛLÿ`yçÓ+ŸçO®|~åÊm­áç™;d„,t0Š6¯q±ÓÛv Œ×1® H—Dp‰žã×úõÄE„kJgLZàܪò­ªƒ§Îtù!_ÑÝ1¥§ƒÿã›å\_mK[f×Õé dŒMkyBF7¶óºéè†ù +Ý·+»^8¦_ÉVê€r5mýÙŸ \­ÉÖ¶,š½aNšTÛóÛ›4°…-ÿíþíÛèUÿ*檓%çÐCK¾Ž»£õö¦kæ²ÑqÚýÑa½Šý7tåž-ö?ø+u"$öPAA#ñYi†¹¤™Ù”Â)™Ø\}Àëj‡œñˆ3K70iy © +½9£M`£þû¦?ÊÈ)à3¾¤K)Z]#0‰Ë¦¿=°‰Å’®[A@Ô 8–íôà8)œ—I€â^nù.!}ÀyÔ• +€'Š˜MÅ}HNçàdñïg3 T:± 6J˜©f-Ù ÜQÒ8ìîoY¦KÀµ=WÒ!bÏ".(^¨2ðWX…ór|Ž9»eÍù‡¤Ëy¿ƒiYLvIÓȽݰjÒ|»ò\ŠÂù¸ïdä£?¢Œˆ´QÈROä—€öw}/ {_8Ÿ‘ší¡n&pÇ¡}‡KI˵N›Ëp5ܽþE¼\wñMMÙ `Ø¿æöNXkÞè›|›5Õìüy³,0›fÚ]/ã*`™sêX›œ–óªóa‡ÌK‚ú)*HÿQzº|zúhÜ»Ö&qg§OecêÆQ=?òXÀWeÙ€oÿÿËÿ. ˆÊ`€æò«·ï_ +¢ÝÜ»o°Ø@ÛŸGâ-Žñ+jGƒÄxž¨*ÏøÄHW×øÿ·ö½m$Yš?® +ÆØ–¼VY¾ißhѺ+t;›´eåšFª˜R‹]¯†—¾ðkHQU9b=ÅRM³¿îß^¨k°µ³èWõ{>ω¤(Yr¹wçP"óOdÄÉø÷œsâDÈŽK~Äg=¬ – @ô©PA  À_ø@OÅ0…ÎÑûÿ×O<æµ ÿ—ç4Flb„øÍ„$=òŽ_ò'vE@ógöÿŠX,©¶0<éç}uòûHº½¾äâíl8FæÝDß»‚Ü@*Ò³R½¤šyÖQ¢úA½pÓ°ëµ¾XÅcÚR\s¨ãQ)ýªëc^0ÂZ_ve¶j~Ù-l‘†j¸Òcû#µm¦³ŠÖ«˜úžü¬zœ•ªÇY÷¸i™³Ê¿5Gÿ³ È„‡éî`Y_¼ÿÏ“<,ì :ÿ…e¢³FmçJcCø'Ù W_Ñ™ˆx"~”uƒ¬^kå*ª^üî…Ôë6ôùêËÑ8“òªœ‹õQôXô+€:…<-wUéJÆÚru/c4!¸vUõa¿©ltºìQ!ƒ…Ò„ŠÁvñÿ˶;ªHÙ¥#0Ýd;§*8¤=ªZZ pQQ¡ÇFòüÔÊéÚ6é-}’À‘!Ç$•|ˆÔÑ‘X¨û"©Uè½:¡~ê’\"3‰–ƒ½86šOEqÑVO‹÷®Ù|Æ‚º×y ?!jkøQZÛd` ÑyÇ>«Ü1©(N“HÑ8›Rkor‰÷¤Ã \êªo@«c û¢FÊu_uÖ ÍùdéåÄúLR$þò”nâGÉIÀFZS‹skc 6±(zµ£†oÝ¿·ƒÔ{‡¦p/ ªX—yN·£3]My^°çtÛ/ˆôÓÀp“2‹¢¿W2 @ò ¯ã«’åÈ“œŸŸ{•|q^dÞ–Áœë‰ raÕ;’ÏŒhu,0 +†ÈõD›çƒÞnàÑ–m…Hè^ v{ñì—ª,a5r \IîXvxᔑz¢Â"¢Èç?þ˜8[eå[ËÙÃÞÊùxÆ® 2Ö9ÿ56àßHß¿{óý´ì«ÛÞÚz ÷c‡kÉkùÀ´Ô'¶Ú+y¬€ ð÷Ê@’0Ÿ #AZHÖJMבï `QÂZi íÿþ“.ûa| „Ô€·PüOí€.¶~C²nœ+…³ü@ ¢ÕÉÿ!-)íÜ!”Œ˜¨(4W "QðC‚–"|Ë!DžÞˆ˜Às¾fôǾ¡wÕ¹Ncæß?ýàOî}_³Ðô¤:‘ÄÄ.À;,µ(Ï#YÉŽ +Þ+ð&b¶ÅMD£<îvË—ƒáa÷_½vE['\q…±*oz4‡üÂ70éGêRüªr†âwTLòÛï={Iù—‰ãlüg;s¢§ÏŠ£Œå«â”/E£&çú¨³\Uø±{¤nH'â.j õ5ž˜P#­fyŠ=íÑ,s +‡gµŽŠqÕ)Íq†_¶„ªØÝNÕP$NÁ.—ñè^Q'¥óÀ+r 0a¼|™ Ô·{’ažêB»ÛÚ»GôHZüÎ@èïÖêÿgŸóƒ"¯‘ZýÝ­âÑÎÖÆ6@l ‚À]]À:¨ÀIEˆ=±ñ™wûÌë‡lÝK.ê9â»·ù ÷U§÷`·‰žS*ä·;`i"–_/wû‹tK€Šò¯^&[ç”+‚]§©ñ¶œ :.ó/Y%¬Íº +©dÕÛ¦S(UšèõW¹J°Û“Õ–+ä:G¥“æªb=ªûý˜J…\§g) â¡è‘90SàªÑHXÛ—HT „ÿE¥‡ôʈ3U•w…bº°€úX¨J&(^ý|’P¡tE7IÏnër,‰«¥Å$q/»¬‹OMuírmzæ +Yu|ÜÉBáNŽI€xã°¨Nߪ@FçêÓO%Ä>7ÊJ[1.IJñ… dVìæK³a1€CžªÈøÆQ¼|¾b ‰ä±¼5çIxÑOŠ[|ø ÂÀ­zZ‡ö‰T\õ¼©OGË¿Ú! ÉóØ%PÁøsa?*Ñ +=´&êéHïî½p¢Fb ÃðÙV‚Y‡·É…¡jJp®ÆkÓ šžªüË>ò”dÝ¥{³2½Îûû’KRº Uë$v±æN¿ó]ªt©7¦ºé_Ó_Ԫɳs?´ªt£¾$˜çÉ€ym*]–[ûÜ“Tð»Ý˜CHö¤€KîŽ&'ÙxâJ^ÅEuy‰9¼÷ò²x¼Žýþ|ª -Jñ:*€ñ'ô}í ++*y· +Œ¦;?ïXTÏ@<žVL(ÿI“5o"ÕÿÓRª°elƒ K??|ª¥€êÌ#¹ &Xe,ýD8'V¬p\7‘–˼)²$P˜zX©cîu(Ò¨¤8ý)ïXòQüPëœë‰ÈôêTC7_6õx¦@ãz~Z¿¦Û<ÿAâb>ÿ÷?/«|ñ~ÖÌ$9ñŒ`À3Î…UÕ?r¬ÇJd±è–µÃÐKUUCõŽçŠY±‹Æb†ßZœ ñÅÂNêRÒ‹§D“ãLéÓúB Çµ:Å z7ð±p©–0Õu‡…=Üæ2 q°ù`gÀÈ7³d¿¸G+¡ ŽYë‹ô”çl2oNè›’'ŽŽÉ¯t*Œñ <ëX|ñ«×æ/Tqt…YȺôk€â[½ÛÙâ|FÎOËC¼Fdçz\!HŒd«z¹X¡zPÕª<}=ív¹©è<8QM%8ϧE#΋ÁŽZ±ÚðvšüdðÌEª¾y¾ï¡7ó|„ÍM€úïTí—äM–ífƒ*4þ‘¤;—˜žk9oê÷ +ލ"/̹$qNN‰½¢}Yÿ¸ø%«%)èðº(¿£Ùz]¯ +¬¾ÒßLµç©¿Á€aá—„õQ}æ™”S¶ô @óîì‡Zá±~Ûþ|âôÁàr Ôþ?ÿ"ÐÄ‚ŽÊúouTÕMÝ2 ÜqŒê?)Âƶ{ + Álä.J=äKÑu…#*%ÄÕ?±Q¸mñî"$ê?ìaB€ü0ð/Qýÿ‡ô¨‚#¥Ä»ýé'éû’ tâwÖ¿°Ÿ h”gXXâî„ÿX·Íø¿y/ËObžàÍäZq [BÁz±<ËlPîü”³~0ÌèT¨{Tᶆb~ d€AõnŠ]a¥Ž²{¿;¤ëó£þ„VŒ­8ÙÿC/ÍŠ}VDñÖŸ\øYc¯ó‹†uEpÔFæ(ø‚9éUOêC «A]]«ÖÏq"sU‰@X¢¾6{¼§®¦îJ2o­ –†íJ®J`V±› R#žÄ›Ã P?Á–ß\Ôûèù<\Ò¤ö㼋àé3ÿ‘°--Eèž|þ6¶î{SXŽ[–{~qê‡z÷ÙÚykç÷Ûàÿöƒ £?îÎv¿T|0Æ?Oè"Œê€ÇöŸàÜ‹9›^dŽÓ”½R6*1’®>ÿíKÝë<Ç·”Á‚(8?;ù´ܵQÖéjQx´ÿçÊš$çøÛù´Î;³ú”uŒ ¨\÷¤u+ëûÆY².×ë?î.Œ=-úlר|AÍRL¡]›<0)åc¯^V^vm½\GßP®õìÏu#‘áxÚïR¨a¦ÂQ®úÖ HŽ æ$ f! T’7»Ó:gúÿe¥ë³2œË5,D³ã.#æ.W1'î½É›àaøºú™l¸ŠüyagIñf—W]B¶ ¢ÏÎ'®h4¼j(u“5«•š.©•”ý,ËÕ;Ûš2„ëL]¾¢8<”Vëç¥ÞÛщ>çÓ2ÜÕA?;ìç‡zR!‡bêÇF·âD‡LÂézº›#zØHdÅÎL‰¿Cq8¬»»¤ [¼SNmQöX•WqèÒáî°R¥jÆÅ¹3Údâü°Ÿ Xz0<ኈÂÈ¥kK‚ó<Ëy½@º¯¦A©ŽŽy¶ væ›úÅpœ}µó°Ge÷.h[zb„¬­³ÇH'ð+ÎõòÞm¢§“¢ ãì¤nο̧C%yîÜ Î»z08?duèANÑ@¼b^˜ó ÎõŒÑë‘ézF¡WÖgJª×€PäyÕíãbÙrÓf¾j?J"s f€í]…ì;¼·^Ÿ8TCcS…”+Úÿ²Ýaê—(eNo?s>eNº¼»ÞÞ<øŒÁ†áá.¯–R2-ç:Kå?Læ•î¬8?ÜåÝuÑ9µ¿·Q ý-ôý;$€³aöà.cX(`1{`ŠsíÎ&!€}„ˆ¨ÅÆQˆAaðÒ€ÉÜ!?€kÐ5~KÕÆü¢¿ûp6…úZÑ‘ô†A»°GŸÿ ¿@ ÂaZ)[À9‚#$„€áq +ÿ‹K`àØW8, +ŠÈ ÞùGÑ÷OïtÅâïÞÕÊ­wßÿà,#Cp´@…5ØßQcP©ï{F¬ÔF „J€\{n :>†Ýº‹eÙÇœuÙë€<ÖÚsGž½¨ +,c—ºÜšVg½î9N}UÕ›üqy¸7Ä— ©»ªaá’ÕúdÍŠŒ½7è—AV +àù0d©kÌ7ýzQwmìÇöoBOcãSfSëéŠu"å[iT{±ÚŸä˜ª.÷^T%urÁr}.œÙ™M a˜)RÐ$µA€…%Ôô3.ƒlRï£B eŸÙgÙk={Š@ZõW0­"Â/ZùgÂhÁøÖýÿÊp?#þáÆÆýϼ8ÒñÝÍðÿû‚Û­ _/ù£HŸlwˆ +‰ôìg[~<xÚ;lU¯#´D8ôë-Ŧä®¶(Ö]/ŠC4–Ðÿ™3逩„L§ƒ¶\™oòÝiÖ¥?Y¯Vìd]‘·ŒšâpQa@窱Õ8¦ ï"k–UGå:Žr¥ñ$ÓU¬^U¢«\í±y•Útü+ ¤NQY—»yù»\õ4g6<ÅD&ÒÝT_U® OÃ×ëP®êñ.“À`1c@ûʵq¤;Ç¿òA„&4ROñBÝaÕ,Y4‹šA“Åòbéñçº^ΛÙâ|>Ǻ†?JÖ,êk-KèAdr¨ºYNmÑÃØæ‹7º|`'Ÿ6‹æí¢aKfk–Â9¯Âíÿl±\ÔgzfÉð³¹ú®ûЇ–·€}°×Õký;LyœÿõG8×%ñç³ZíM©šóØVù¤ÈwÙ´Qi—ÅIUÏÌ9ÛGN‘nØþ¹daÚXÝÀ}¶œ5çj±ùI…\©*¤þt€!Ÿ·U2p7Õáb«)§M‘}£6Ýâ?¥<™°v¶à9êè4ë«Vø}_®üÑÂ7Ýk]²Ï©.P ‹F ËÚ1¬}1½ñpÄw…ÞûmÕAüPS)Ðq²ÖsBÿÅ4+Ýž‰»É¤‹9ê©Â!Ä‘i ɺ=YùŽ“i'®"^Tg5 ²ci•Ô#Ú‰8I¯4‘Ü»± k* k¹Â @9Œ&0ÐiªK«´îÊÌ[ÆàÑ“3–…ô¬~é)ˉ>³-'€ÆÿïáÌtO×YëO¤^­·¹ñÅÐÜäÕ‚îmÝcè@?ØÚyú0ÙZºƒ¤!âþý‡æ¢3ío{xýßöÆøGÏŸ!XÃGà¥}.©€3^zíwQôVZ‹R’k} r.²N©Åh.y2 ;‰0\Ö|Ögo›j¯z{½\OU®ÊuÆ¢(×,©ÿÐz¥%îêj7 Ýj’Êõ1Ÿ˜AñŒ¢BysÉé¡U”¶\Ùå„:`òBû“«ÿ“Äâ'’úUœÉl¥bŒŠk# Õìrp:òžÒ¥ë&™ã ab$ü}*–âN¤º_/…¢ŒãÒ4ÕCþ‰cÖÇÕ»¥ d_àn9ÅÕ‹‡£]ÒѤʲw …ÞÎÝ%Àù ÖÏÍù|öGÝTÿ€å ¡Z\‰ñhk­gðUÕ« )ë‹ü°Dúaüœ+qÃo÷’" ÂnàáAõŒ=C„þêúö‰$ãÒªîlÜ4Hù[ç{õÒyŽ}§*èÅà\|;Ï'õÌ»TõL™ÖÉÁ(¹Ñµ”ø1]Yü¢ª.Ênrï¬Ê+ozù µ=âSÓþaõºV_j—<œïÅOû+¨îÜÝÚ¹£fnÙÿ',ïÞºhHÊ~ÃdU ¶· By¢@RÝh‘‰•± Z‰±ªúsçά«œ·¬«ÿÕ·9Wã›Ôþªçl‚ð+àœ,ýYß¼•„kÒfóÞÖç›÷¤À +ûñacW€|x"‰QZ£9@?gÈ&Ï„ûá§… ·xÀR¨ûÓÂRðßXË ¡²  ~ú‹Ç@ôŒE¡Ç™P!yCˆ­°1¢À·#1Zÿ çôÀ;Ä„”ÄŸþôN‡ºÌmE-zGŠºžäWq©ž6öâE2‚ø^æ_GïôZü³çÐÿÃ÷5Ò¿äÿl¸çÒ¤ôYÿs˜$(LF÷:yy† öÍn! ~*Ôú—z¿)%'G!R1ÝXê{î!pu6Ò5¨<® –´jJê°¨#êÑ}QÚ›ÅUg‡1‹[]õ°80Pô²ÞSºr“4Å,\ Ã,¾i>ÒQF#ºâÉÅ,“¢S,RÝKÌ©vª=ÔEø!5y÷ØmÕíéZàF0'FÕÜ+ÀRÍó¢>ªÎKmI¤FZ˜Ä†^F/]µ€ØJ ûXì ’–:š5º‘e磂IzXº?“Ÿy/ZƼpy¥ÿ‹PÑÑûwî ÿcJÀÆ}+ñøóÛ pÿ®½ŒøõD:eþ“>ž<Ü3¢6îlá²Ó{úèQo0~²=è=`aU¬óú <;ÀãâY2•,x™Nýöüú[”0¶QŸG #¥dÁ“MÍ ”§¬#<9wt´(²º²GÆ**Q^T3—«ŠuòsÝU´ÕùUr¥[•kõ]Î|2WºÊrÕŠŽŽê:œÁ{ʵޭ=’¡?%nÆú©T+VfÕ¾¸Z½^Kõ\Ýãjß×+dÿØ'…Ñß‘ð%û.®Fð¯®Ü§Ì¾ ]¿%!˜Tùþ[‰½W¸¹{È_¯j?|–KëÓkÆUâûkß 0**úªHL’¨/«.ž9§U§°jM6wZÁzp.F™ÃgºÊù7°ûçêÆÀWÊX´Î9»‹Â1L·œ+½£ê—aLÜUì¾(αú8 +mÐë'tò½€¡ÿCÁ¿šV4 Õø§ê}‚sé¦É˜NK\§âX2ÏQ€“ïA=&¿cÀvñ…tEH)ÝÀ4ǨÙFoüÛxo f9Ý>#¿¤0„GjÐ>–+ '¶ËƒðèñÚKPŠÉ`/¼§»¸'20b*¿Tbâ„e|‘ 6ü bo0øë𥠏ûés¿Âï9I¯ŽK“û$…“1O¼¢‹ðàAgÀ­­N~â̽…æ·‘ÚC5™ÏO‡oÊ ¤±5ˆ63UGÃ\:ášýݨö"ê€_«êƸ;§ÅhQtYk?ú!õ4ì 仦!ÕK„ÿ¼éh4fÓ¤)^ÚœuWÕ}v®Ö*ÁwÖÔåð°:·¦Ø²'æ°PwCbŽYkÌQa%{PY}FÿX½ë”~‘/$WMw¹Ö=ÖM€}=pm© ˜Sk”>¡H+)qûùþ@ÑŠ}+ÙÖXÔ&)#Õð/ØwïÞƒîlÝ¿ßc*€Á]"€™­{Ìõü£Æëƽ°è¯ã?Ë„ 1 <ÙÜ´“‚>»ÿþ£§OÔKöžŒÌ¢O‚?¼ŠoÄ­ŠÁ¯3:îØ®ŒŠœ¹Oæ?•rš­ŠC$%•ëbódK—kÞé-pT-Ùœ‰®Íš¡bŠLfs—ë|9{S—]0W´V®CU®X¿±\-WŠEçJbߣ ;iŶÜ{·bîùZ¥Ó)Ť~P•evÙÙÇ/庪t¨ŒWiãH¤ºþÑâܨuuÑé3M\àÃûP×… Æ£q5S§–¿ùx>ì†Ñ¶%5¦{z+2Vèi|\IެÉrb)q…×õ´NÒ¢Ÿ‹PU@Ê?c6¼b€H׺jÄpnë€b€sä›ñXr“‘È»‹²£h-‰ódp/`ÃÛòäÏóÎa‚-½VdœÂ:Ãí/[Ó!¢´H­H‡6­UÅN‡D‘vØûRR0-C2ïÖCO}‡õÃû %Îy1^‡•)­VÄŒS% 9ý–”mž+ •fø BWœ{–ñ’™„ +hHpyiKû% IŸ(,™^OúÑxœÕJ™¼äŒ<oæ±î¸Ñß»w_Jƒþ„íΚ¬*-³v08Bê×6ï=I»~ôž²OýÝ’§ÚB¬ <)UæJ•ØûfÒ·ØF¤÷mÈïðÙ%êp%µÊÓ ÄdpîƒU.ÝD pn&O8{;nû…`;} ÀÓÜÉšÕ hã +Ø|ä +#q6*u¾yå‚TA©¨e·h䌨°^Vø/@¾"~yœàÜuß Æ-Kp‘PzÐÂ:¼n£ß+œ‚ðªºÃê†Âê;?2€#ãPñ ó¹3ü L ›æA^Ig–c0û=®|ÉWB2€"<,‚XÃA?cù¿vö÷looÝ¢ôò‡Œþ€–¾ù3?—p:›ýRfÓ¬a^²û>µo¯ÐªÆ"]L½j]¿nšìP+šwg­õ¿˜Q•DîKDt­?ÚÉÙ¢ª÷¦ÇÒø|OµƒÖ©–¥jv¡Q­DjêwèÅëzv.æÄÝ|öçi·ì–L&VãöwMß#hJ‰ »j”ÅÓÞ|6c¬J|6 5²uš}Ç.Xê|Ì\3þW)'th&ƒ›HÍÎM=ˆ»Ëò‚›ÁžC*=–Á|2š‰,ëf—¦5X:®ÖFÿ¢žj€ˆ¶æpG­÷ɶ|ü½ä¿HÀVëÌÏ%ÚˆHq$UÇ +6€Áæë>  ZÜÛyôˆ½GD&ÍÞvØß2È‹ì):EF0ÈeØl2RþVõdÆêµ ©'`DR%K,ŠzOÁÚÜ%V/*ÉȾµÂQõsžÍP5#ë9®Š#=t:{¯rõ˜æEÕ™Æ&O«j—Êu‚UxÌ”í‹Ã¬T¤—åZ×ó(WD0«ªN_w‹TUy´¨šÃê˜n‹J龘ÞPKÙ¨h‹ÑR•îœGÍ\b…r¥›ÏÿBñì_®>q;`‘kÔx‘ïItQCRŠHŠhN:➘ðŒ¾‘:m–”½‘-æØOV„>þ¨á +è?pT¥ˆTÎÆ J–¯nM„ 0%.É ˆ¬æïOöKOÏD4ƒ•xª%Ø7ž¸¡@3KÃ$Ή@œGSŸÐP%$`е²µ2ŸGñPéÁurßœ 'õC ‘ÚM,ǘPÿ°äæÊôÔ6«ƒjV°Úókmˆmµ0zíôÌ•XÎöÔz©ÃÎb&4™snz(Ó5 8_V/W¸ƒ0®¦)‹[5˼A›çÿª¾f]^»”¸È|Šæ¹>60Z/ë,k”fH$üFàDp¨š½sWÂÿʿǺ½U{Ú­¿]"ÌcÛ[…²k`Ûƒ×b5‰mÉ‹ôiÎób‰·Ì:ç‘çAQsØ7ä9û^HàX.3•…q~#YÓ¿• hS6ŠM}ï㑘‡#`ņo‚&“ö;pg@PR8)±@R€!8°UPýß¾ÇÛO„>­sÆØAÚ¼¦ØûŽuй¥Ç Á»Žùס.!>„Ì cìô"E@ÝÕͿľ"ÊIS'?–|x#ôŸ,ÀXH‰Dõ}í¯¤a¿$ °Üû'zùÿéÉÔ³%¼’ºÅòVStî (>ߨÜ~d/À³³÷ç7}þü^ÝÝùùûå²)÷ê,›4Ÿÿˆ ’Ž–ó×êU¾£cŸf‡Å1ò¬®NU!tÔ,ëÚ +@-9`ÖüòË»a7/§…´·òX²\Ãvß‚n\N„‹¦¡›M^]Õ×õ¢Z¨Ïê¦y½\.¼Ú‰žœÖæíÇåò|Y½(ÿ1sóõï :9_zò°âó¤äÃÅñ_Ÿ#×|‹¹×N¸bÎí_Y–bN˜òÊ”ÜfšéÕÅ.Zö¤ªñ™òx˜xšÿ(y>©^×gâ»ùó9.2 —I<~Í›f®Ìªú{ÉÕ,y„¶ôó·LÖãûâ‹­ßX;_ ÜQã}‚qÀˆ.Áÿa¯÷0nIŸùU¹þæa XHö„/, ÜÛÚéÜÛÜê]úxQaï-¬þƒ¡A4‡bðp“Íþ”?‚™p "÷&ÅK"‡/‹—,©BfDÜTŽÎ(2®J•ëÏ?7ù~~L¹’qUùnú¢h˵œª®0­¸9SÆêÉͲ’æ>W|Ìu®ß_Ìó.&¥.ÁîPéÎÕ‹×K2‘Z·@ \¬«©ËÕæa†™Êõ4˜k+˵T¹^ü²(:xµ‹9ñvRœ5e^/© +_½žF¹Rƒu®põ[¡VyÎà;Ì-/Îçv¯‚¹ÓùùâÇóÿ±.#§Ï' +ÑÕ*³ë¼“5Õkò± ¸Wú’€D wüHšz¹œÉ3ëh¤ûéTýrBÁgê¯S‘„è²+=šWU¾&¼‚ŽÀ- |BA‘$%½ýnyëþЧKÓ[%ª§ÔÇcá/lH½ý%ç°+Yƒ˜¸‚4PgÅ^ñš˜ù>…ôÒð/2ç¼JpNt‹{¹J&Î Òíx ( Pø¯ßYõlðô÷ ž$ký¹iаvzÏÐ]6¬ +Οí(æ\™žÞìÃy]yY°5`t,›”ûí~9Ë8™óQlá¤÷j‘t¿ö#kK´0’°\Tý,–ñè˜XZe‡Uç®×“ì/àaïaø€ì£ºzøŸ›Û€z °å´ò?<Ø•9Ö5‹TZ‹Ñq“+Ì9‘©n8»¹©—uÙÀº~á¼Ñ#ù¾±WMø{>IDAT”½$%’q—}¹o#éôµÙaïÁftk:ìwÊ΀v`ŽÆT@&(“>«oAJÀ 3ýŸ<àThŠ °µ]X0l¬æª(ݬª¯Ôw†àã¶ñ_ÑÊÎíÄ©õ¿øáûÅ no™CwIFAÐå±Ið·¹Æ#ŠÑ ø‡pJ¡ò¿{sÆÉOp€ˆCDzëéÙVþù^¿Ói-à¯J?faðä¿­Ž—‰Ûülã~oÈÐ ®“7’¤«>صÜ@™òøñ‹ùaÿ°ÿ";LÓ^ &~v¥ãv³ü¿í1E4®Æ$ä4›4æ½2{¦Ï ®øB7{uø"ω³NwßóH;q»ÓÑ…ìÅ.3˜¹±ß%aîˆ< EÔχ:z¼›½8<wvèb"u +ÛÍ^ìí—Pwïþ!ìz«¹ÖûݺÇ9TJ €9k9nôNÙ‹<ÞÆÄìštÈì,|Ë¡n¿Ûùr7ÛÏö÷=K·£¢yð`{g{{ks+&,'ˆ^§[.¯Ó‡÷u…‹qƒînÝ Ë´½óÅöÝØV3c¶o'1ØUÎ=_˜YÆi´Þ¦³¯ìhß”™ÁúáM;3m.•”+ooJW™5,Ú×3Yö»¹¯A—E¥—媟]•ˆg1‰*å(³ÁRØî‹·¥ÊU¾U®³¨=M.;ì>þGqž©Ä\¿ÊW*׈cŸšÅGÔ»Þïð¿]2×UºéHojæ˜wwýóI@Ò£q¹×5\$²ÁÂ0ÌÀ:©h21,0™äÒ\Êa¥‡2®vÙÙ¶Æ\ݨ¤›‚FGÅëj/&ȦpØûƒ‡Ô£ÇÉà]ú +7Ø-.¤þr‘1»½Œ€#Áh^”ºé©gÂ+‡þO&#†€Q cêdR†cíŠW½[+T(Ê¡ø @×™%gv„7]Á(¸h(ÒmqÌš }I¿ÒÞ‹ÞƒÞ„u6qôxŒ`UÛé1¸$–šl·Ÿ8‰};ÏÇâܲ ‹.s®·¬vcNPâVa/KK$Æçøµˆå$0,µ[`~LpÈhZÚ'„’n¸*eVå+»Ù|B©C‰7SHHRG‹ŽÚ­Gülò³}ß›üÌ-²ýNoÀ Œ&ÅöÕÿ0 $™YÊß„OnZú?~ІíÕ'†¸àÜ&f~%}å~ FJ¥’®Ç`C&ºª*é€é ,ËÜðù¸ šÖg'e†[=$¯ú@‡¬˜y 8)Á¹júæþ.¤€˜ ð&Ä!èÀx¬Àµ~ÈÒ·c ]÷Œ¶]é_‡gtÈ-«°«È~ +ÔÖ‚„Ÿˆ A&]Š'JÏÿðn`Räý¿¡ÿ ÿ-[쎎hÞIT1ë +Å]ýy=(‘œyK$à_Bª,½Ä€ú}<"ûöUa>×Ao€@ú¢]ßLÒ¥p¾(‡‡‡Ý\áèMtbæ´ü/©Ìí ÐC:|õÞe.YMÐù +}‹`üé˜ËG”¬¯O¤E™7ĸ8“n%m(n)Â\jÛÙã|Š$bR‚~L‘à:d¦OôK–¾`¥bé†Õ™=…(Ï.¦e<Ü—ÁÌåa~˜åå^öJw¢9ܹcU.L՛ǰΉb«z‡Vª”,-2"„ŲÙ{õJïÁG½‡le«û'E‰™š]ñ% +t÷Äbœ±ö,“•Š`øŸ½ùÙfàò%­ ìßý\_ØþÓÿ3\ÀÍû÷Y×ï>V(ý˜v6·ÙT+žZÑg±™H2uvzLE?Ä€¢š¹ý/^/vÕ;€P.@W™2,IKï=´…Æe¥÷ \9ÕYýjœ+U®ºX/¤Q®ä›óÖY¥ì)¦õ •kIɇyUñq0K]®ªe*×ìµÊF•+kÅ5¯º.4 +ÂåªJ§ + J÷ø…ÊÕ•nU®'¶ °$Auò˜¹Dº¡È¦S*]U•'âŽk¬N'‚¡êD?ØôyY½SÂ9ý*§j|}š€ýXÕQ ª“Ý.“ÉVîc\ñ•€þ¥=êÇÝ9Êè ¼ÖiÍO;U œ.ªªBŒNY«0 à#¸îˆ†Åó„^Þ5Jèt0(;Õ¾ý¦50 +31Àè¸î¨:‹Vœ<è„ µžRƒs ëIt¹Bm†Qóá­uƒsÇzRUݾôhLõ‰ s+Øl!,½3àV÷ö{½Y=HûkÅŽÀ4€­‡=1E¶6Ý݈j•ç ù çGŒÀ¸ עˇ€äÏ$0‰ÿä —ÈM‰@U¿[àS@ä{ð<Òs»’ç£s]Ò›.Ú­ŽœJ"OFq¾ó6á‰p–€Oz=âðî'XÿtT ¶·Ô¹°pkÙqBbÙ‡ Àv8¯ÿËìwMuìá áyUÖåá_bBe½K¬¿ „oÙáãýrñK•Uouþºú·ÑÕóóŸyÛ4˦™Õ‹æ{%@'­¨šL"ÓiIRh‚-ùµ¢&ÿtJ¼K1$u™UJms6¶_,¦»‹ …¬¾_|÷®>žê踚.ê“iy˜/êšuY#&Ìšæ|1s^,ënÙø-õÝ4Õøíùû‹sÝW4‹·XÅÚëªþq‘5uyÆ;v_U¯I²b´Ø›3É HÖ⸠rÉ›lì;íÜùÍý+Hí6î±|°•vùŸÝ¹wçÞ½{÷îïÜÛºƒAP—v±˜ žù§ƒÀôÙëmyÍÐ#ÛÑ;ôž¦ÞhÐÛî°îrU©;¡ -šNGï3V‡pŠOM^Õ’¾Ý{}âôûï›ô0Œ>`A2ßc4PÄ) Úç·ôÁ©[û×õˆ‘pŠž$=ï®òÇ ì$AòŠŒDyæìÝû$¢÷/qg:=cÍd¤N”R—¬ÿ[ÝU6y@iÂåâæV§Ç:'8 +Þ&o!µƒ9³{éJ—±3g´u ¥u“ï®éƉ|VŸzì@U o 65;¯g³…̳3éUDµ9Æq‡(ÅNÔ#Ç<Í<ð+Ñ«šéOÄÚܯÙF3üÃfeß3¼:æÑÝ¡šÕêñÔÓê·šfåô8͸a°h0>^³ºÉÊ^†ü®!ÜÅÕ#›k‹£Z’Ú¦µ!¨IÍÕ-& ³áf=wáøVÇV"¹ZåÁËíÍ‚]v˜Áÿ yåŪ½[lþõ™:1}˜ÀÆô™ °ñY:Á Àz€×fníܽ«+’®žã¦Du 1•¨(0ƒšAÂЊª÷»”m>EŸ9ÖåãiZy^=žTPgˆ²n2›¥•ÔMe’3”r­˜¡¼s¹JŠS¾èé£ê´zA +6"ðÏÝ5ò&+×W¹Jê$çS¥£\ñÔTô‘ïmoÎê,CŸêˆñŽ®sRÿ¨J§rmjœÊFG +Ì©\OÅYbNu¦8"ÊQ]*š“é(ªiKjDâ¹uú4 =¨þ]ïgÛlÇ+¤*ãžœ†@‡>a­&iË‘ÜÓéô鯇QLBýÕ +Qd•„"Æë‘ +üÎ~ÄdEºM]iÍ+–®V˼ ì™5w« 6$L»{ÇÕˤE_ ×A€óñ„MvðC¬;ÄšRmaÈl‹ra“ʘèØ^Î3Ä築s•ÈÁÚXµí¾:±\ìуބ=6¡Gî± +¦2|Ìù¨X0 0 a×9§H,èå%uY=¢>–|Òr¾6%Àã‰ÁóXÞjÅyqœwëÙ7Šos(ŠiUDê Þ*χvÔtž“û-Y7÷5|ÔziئØìOòΓ§*3ÀþÌa©ÆÅæ’ñw¾R>üW¬º•sÖº:’ŽÒ¬˜þÂ`Īº@Š;C\¤*y.qq°Ì³Æ.žHWßõ6:‘ŠûgZ¾Ñt´"ë¹v¶<`@ÖgíBd¢!v;€ïÍɉ°+éÃHôdÔÿ.!@¸1úþð-¡@·}gŒƒß^SÏØlø¼6ˆKïn„ÉÄ¢Pq °H Êí3+óŶ{>h~Ðe‚ž‰ D â^ª#|§øލôŒ¥&‘E§Œc(8;>¬¨òHJ5–{² ðO5¤~?FPTW¶Ã Öà"@ö’_7RêÝn S÷vê‹OyÁP–2WÊ*ß-¢+6åêrÔ°T‘r!0#»éÅM= ¾s¦žø_ôu®næÒæUã3s¤2?V¢óѸTWÇÑÝ”!¶SãÜ//âî´¾¨›Ø§ÐuQ·v³5æÀJGùQÕ•þ©Ã€wÄ +æþy6¯‹ú*sx>±CƒkÏp®Y7I®*„‘'bb‘Fs•øÑ³Üž7ÎnÞoLÏ(wûK…XUºV´ÓÁq·P¹ÈWDÔÊæšIæý.¹S¿š˜[/×bÌb8éX<–^žE £iiaõÚçÓ|ru¤¹²OÇï:L`ÌÝóñ<D¥ñŸµ¿ª®û{Œ @t÷2Õsó˜ ºjü€—QÞg,µÑx —½ÚC;.ºtÆú¾™4…zôªîV?‹%®¯µdh@'yÛx/ß»ˆ(Ãwr…Îõ#ymhÈEÍù ¤®«Áùày¼»ËY4˜îµÇ‰Ç6]À¸ÁÀ†m&¬r:šyÏ–Ûâà‰Ôÿæ3fÊDÑÀlà¢Xz/²ç¤iΕkN&8·nД{Ã6Ï/ßÔ4< Å:Œ«Yp›B5ë¢rÁhò*\LÄ×Ο†hŠE?_R¨ƒkYkb÷Ýëýƒ:Šß ¾ßHÏþ‹PïñpœÒ\¼LC|Þ†6hÕš½Ô¯Åâ²^ª‹€ÖS"(dOË.p>™U*¸á2ï¿e)FÓ%ë/ÕmÿÕmÄ^vRg…d'y¶³uwk{ Àƒí6ÈðI“Ž+°c$YhVIÀ8´AÍou +ƒ·:1Ê +ªuP¿{78{%]Égg p äêìå—a=D@×íjð=X0K9Ç;_2…q•ëHb +Ý™ƒD|Ãø/¤ÎÞqˆ[ ê>oÂqsö}#±A‰6JmêEô'>–ü×gš¬ù’Ê“âd¨Î´,ñFþ³þ/¼X6º×wŽyx%rú¢›¹…p¶pž³‘›ZµŒNi·Xº½¤Rw3€†Ãª|!%fcCº8üÿ‹ ŽR¡–7¹þ cѰª:&jvÅÂÑ»{ÐK&¦Zb Õ`®êŸÖ0‡±S*S±Û_HàZá¿Yéæs䇶ƾ(sB‹º_Ÿ¤¥†mKD8 ±f.uÖbn\¡Ü˜¹â¨¼"=’A4u”$n.x°þKAÉžªÅö673o~JÞ³?At"6äcÈ—p‡9|@¾‚²bÀ€öÀtV + ·c¡@iùw¶îÝé±\!…ÿïm=|ô @Äh›µBè*Š¢³98ÙŠA ê„uš^Þõ·Í–öU!(ÓþÙ¹÷ãqþö”Á‚U$7qfqI½‹:ávZ[‹rŒQ+ç¦9«Ê©Xë‹"gÞT:)çùî!ÛÄ­:§U­Ë_Ve·8e§¼ö¦=¿¢\Åß¼ê× ¥}ºÚ¨Võ(×vtWÌI¸*Ø]Nªê=+ô]ÿ|’0´Éßu¹Zd}ª6~ቤ“S;$`½"IIVâ˜P±Vvê±×Ir*$QÒäܼ´\Õí«êØôºÎ™”y o8¤‹&Gz|XUûå<î§æ‘Ixfª¹=Þæ½î¢T2á (: š¼-ö¤³»Ó*ðŠ<ëZç‹JÄSñª¬{¤¢Á”F#º„F‡{Ðè$|âi€È×¢XZÈ–-ÐEL§Ô³qÞr^HOœ3“³æxŽû"wC­¿Fèæýà<—Üåkt"î!ökDžP”©´³O;rlº¦›uE#ÖY_oÌUÜø¸„_Dk£9íÝÅøÙo<<ˆÀþ'O˜Vd‘™UÍ“ðÕ>bB,Ôæ]_˜Ç¤äØ%c²ÊkQ wKZ[5ú À<§êçì,¬kº31çE“g5+fQ_ê× ðºíc€ +Lö +/›¼*ÿ,zØ5e\4\$šê­à‘asA+ì5øæ —úÃÂUnVçèë5N[ÙÃÉŠ•«ºÂJz­aÁX¯PZ'ÖýKI¯­ÃÜà@ +®DÓ¹¯({óý»å#=2Fûˆ¸æ•ìïÇ )sñeÓ›iiaIÒ’ª¨G$áÈäI/»ùÖæ½þ€¼"`¥QØë¡Ekð\æÒŒé‹i&ͤ»;mjêuê9שž¢ÝÐiF»Å.HWœ0ö?êlöË‚áñê¸õ V,#š„ÉK¨ ™Í`¸«Vã~2î_ʘi~’­˜óàİ©©ÀyP´¥\̰–҉װ׃ÿ‰¹÷³¬úÛ/^–v öÑU“¥˜IÕMà,Àm"v³Æø,ÎéHèl“ê¥N¼Ø§×¾JxzÔ»»ýä ÕQDÆñ+tGÎEÀlP~%Ü[òE4‰ ‚|køH;lx-Z"ì`#ÁÞÒžô¶{OÕoz}âA}°½]Ä«‰PX.NTT'{¯õžIc°Œå*€ý\÷çïç.WåªÅ8 +RêPP(I®–XZ”¬hUé~.rÖ„¿F£æ´¿[6:›Ôá¸HùâŸA~•+ îø.>]©\¿s§Ýú繪˜zÙ#F"DT]J ò:=¼Z=N•.Ñj·÷–Øí>‹]Ò§ $˼¨j²¾òÅJ¼SÍXGZG W72Ñ©d§ñd‘ï•…”pý}@Š u‹ ™¹% +0+êr_-‘6Adþ‚œžBGPF.]P»Ø-$€èqÇáû‰V^5}`ÔÚo\IÓÙ´—„"1½ÆXí²çŠøü7+ÑE1´œ‰ºšîþ1>‘ÄÕJ´¼$6Hë ée$QUšp>x°?:`X\ê¿pô ˜ZL+T^¢sÄÎ%ôQ œ˜þqOþZ=J&SbtÌpKÏ’KžëOu¹/ ²Í·DbŽ™v¦Ÿê¥_u3VG‹š•] úD¦±¢:€˜FXXrD,©uTÀWÑ èÝíô‚Þÿ®¸o”—B¯_$€•2¯s€<&BrUAQú}r#ÄkDÄJòÞÖ=©–zƒmö gƒÂÁ`T<ØeÝ¿è(L¿O¿Ê:ÝéØ “$€(W²î|ÎÚ8óòñqKH.E]õ$Ùø©â¼è^]Ž[kTx‰'E=¹"ÿXÂóÝRÑ[[ +¢ÿFÑ‹rÏ+·Žn¹r=ÿÖ•.«ÏU®¡)‰!ý3ïîRnä©£êø;è:w×ZÇQƒàõÕϧ +þ#&CHVÆ&™@¯áîx6:QÛ%*!‰æýÏ]Žð›:Ø<»"®è_O4)»JÅ-ËmÃÄ1öçž´l•¦=’¯ +IÎ+»\KÎ¥ŒV JÕú#éx¼Fuçn‡Ì=]‰.<­‚Ð*׌3ˆí{U‘í—¬mGu"–Zø=80[•€AïÙ`·£íbÓ³{Z—$šÄJXæ,u«‡[ÎUu8hª²¨¶é£Óè¢L“.©}–µZÅâ̺€ýBœ_’2Ö#`…|0á‹3•‘ŠœGE«Šçª6TK,BD‰ú¼Z94ÙèàRq3Ô6ÏŠ˜æC%.E—ͺµ^ÀÓCÛg£šÕ…vÕep`YI-c4úf–8/¼V‰“MyÇɤwýWðu+I«?a©¿“é°ìw¶6¼zl‡!€^¦Ó1(•ÃWC&VCpPrƒP±Dç2‚¨>Ô‘þ ãq[hϹoìúÃ¥Z{¥<ÞØNÉxRð5Àìî1x]CP°Î®‡8DûG1÷¹§;°ÜW¾€D H*݆=a„?!AbÕrv +Û8$6@PÄ:|£\bÒŸÞ—WV–á9Èûl$*ÙH2@o¿·ÓyÀ@H[›ª4;šNÊüäDߎçC¢c»‘Šf†vÈæPm±Ó«ä?M…îj*)„C6ó̰¢&{¹ªúédRÏ&RÄNÕ!Oþ¥êÖ ­MêtÄ|ÔÝѤÝëšâDÀº2¦Îî=ìɪ˜“غC´,Ñt “ºÚ…3Dá–ÜŒýE5îæÒó2jî³É·T¿®èfu·JZX2 ¢ñs¤ê¸Ïu嘦pi*ö{K;ò𡘠=xr/íb’w$lƒþjƒO·Yˆ_ª7NJê¡€k€yÐúùÙ°éýnÕuˆ0`‰€[[~3€Î+¸FŒÜù «¥ú@½&þ€ê :Ûúzv0·î!è[ù‰²Ô•Êur:ù#Y÷-*¶Êµè3xÏKÓo@.Wý®rÎjv]^+×`o˵`]?Š š,‡¬d—ʵT¹êê¥À¨yê£)WïæL è\ÁU®ªtߊ;ÕºÉ|̾®t+^(RuüRkÒ½˜ +zïj¹rY”˜«*I'd]§+ŸOP¤ùŒŒóU’^°¥$)ò ™ÌÂ7QÙÛ¸nN&¿äøÜ@G­ úó¤ªGðºØÏX“4(j§³H -Ø÷D¯Ë6Нªì 1GSkD)es®“ Y§ G ÍÇ„á%Ž$êÝ̹™,Úù‹pþ2L JÆUÖùsÙEú¿…§çŠƒŠ*šm÷¤–2 @BíoAÉd° ‡ŠXQ‘¢AHHÿ†±AME1­8Ï«´5ØUb$³K2`p)iÂE“K92çÎk8þõé© ØN£ºX› ,A®çW Úôˆ±"’«–Ù]d”â{;õ†xøIn?œA¦ tIŠñpÛ¤2þÿÖc½3Z!@ ¡I›ub…Q¨îØ‚kâ5çúŠê©_8WÇ‹"û.Zø¥ìL_Gëq¨§)“ JÉÖ„¨æá’²²Œ…úUV~q-Ùv®cµ4“²A ¨ÞJÐëß6âK"”?ÎO†¶\Ÿ[&a¥Õ:éŠ$æ§± sîLZžíOÓ‚ºvÇWzPÙà¸LÁ9MÔ„Á Fjk—â$8gò…N5Á’Ëê±üpTQ%þíãgÉà¶ÓºfJ@t©&¶ó©I‹º™ÒTÄÈœW8_,ö¼À…(å•I­8O2@Цõ5b6=#éö߀ùº™ã‘áf@± ,ª‰â*«,{£þB8>b–Gê¸T +Îà®ú +õ÷¼`¢§#¸¥)þ Y³½íí"ðV@½:"~É7ç×B€}cÖÆ‹á. k‹ ø&Ï¥§1€œ³iÈÐrcS±ÉY¡7 Äb>Aô­à }ð›çfžÔ îêíll|®7`§ÇÆ€¬´/ÿí(íWÆ·DÁ˜Ž r X89aiA±”`Hfï¬\x­Ã0pæ5ulÅeŒ&` /”(&È>>á€|K⇃韧áEOG¼’R— py‚"¯V÷uAŠSâ†NO ‚3žåå| ÷dÌþSFAèý†}©þü?Èú꬙hR®m’yw…;½¾Q$w%6Ýð‘Ày3¨vQ«&M–«Œ)ÈÅT]±®Ð±Rê’‹äk-|· +C¢jÉU“J5–bö킾X§Ôw*…¾Ô¬SŸDßœ~¼ÙDNÈGÌ,:V»m™«Cí¹7?íf’Phi¡$$Ê‹²“Ç\6}H=˜ÄÝäŸëîØš",zè-=ClÅÜ1!¬, «ŽØb® ÎÜ[ŒŠNïY2±wîöž>zúôIlV¾õ››P:=HG7†XÑúÝ8扒-> 0*Üùìþ¾Äì+ÒëmîôôýôÉ`4Øüƒº :÷OYÖ£§JH³d+ÑÝcœLÊL¥¼&c¦“Éé¼È??_ÎNëæü—E• ¹IŸ¥¶ Îßq5ÿA>µwýå`:a=Ц–,&•7²4rU/ÎßÎæJ^/<óг%KUˆxsé¢Mõº®ÿRwëæí|¹XŠ8&ÊÅÛÓ_XÜAy[Ï.~ùßuÙgªš*¾ª:cɇ±P^M{öþ?þÖrκ}ÿ:«ZÎ=gXÿ*ÅjѨ›ºjÎu½>o9¯ó¼_³_ò¸YÎÍ9¯Ú¼•"R3 Ä‚œZ—ªBD6ìY¥š¥éè`4ðjÀBÀÁÎ}ãuºüù?šiö2E\/ìÉ?nªMÆœÿ8?ç³ÅÅ/U·TˆX‚Ðúÿ®*Þ5oTqVœÕ›z +¿ÎNs^ö3q®›ÍûÅì-{T¨3hç9+L§åk=½hòüm³Xž³Ð¹b¡)°$Æòϋ׵ò\™rñ¿›+ïÜ»·Ó{Âä>µ,õ&j£ª±ÍûŸ/þ,Áåü¨ÕÔo—?3±×ð/õCYd¥*TÝj½ª ðTMÉòñŠs]Ì;Ó»oÍ.ª%øAë-ÎÇus:Oœ£qñžb²Ìo0¾hôÆæ|¶øî´ÑŸ¿®ÿ658+Ió®¿R«ÎzÛô^wQbÔK +þ“ÀàEŽª«¶º¯‘-t[ëÄ'ºÀJ”àF¬’§_©ç¶H}·6] uñ!Îû_¹ß&ƒ·Ú•x )(ž œòcü×ÃâCHÌ¡,ˆ¤S‰ð–+t‹ÐoÎÞ”o°TÀ¹" ™T´úšN ³Ã#R@®×b©:^,Èz?}/1—IRbñÄmš•e5òA™I”%vÙ™à†Ï{¯$jú}ºE–¯Þº¨XI]BlQ¼ÎwWiÐ{;ú^É–”L™¡†èÄ5ÚÀê`!ÕÎc]NùB)àäe¬V&ˆ'LóÂSíN:^üTÂÁü›$£K  )ìå1 ´@J7R„™ùÛš!¶ E!T:h³‰¡);u™cu–-ŠI¤_YÒ«€0˜›Š£Án¯`I΢x°™ û{z¼€=ö®`øÿ=Ë*&êÓÉE ‰^TüÑ£Þ6E¨öïö¼®øh2:°Ï"„Áû Ô*×Ë™"rT¾™Hÿ«2¤uGʺ”’% N¹B,ÛD¦ªTôGÎI¾ +'®¯•ë,·`7ª–'»™'cª\‘«‚¤ +¤#ÅÌz¹©OD.W±A¹â¶×­æŠ@: +è¿^®—•ŽB«§—ãR‘"™[§O² ù*a_Q•/^-$ ¨QêšWYtïëþbVŸž2®0;ѧªßîæ +;dÝM4M¾/öˆ’†"¹Âט*Åx zžŽò½CEÚú°*¥w=Ô›¼Ñ„a=V²ÈÓTòü¸|< +”¥:kÊF (U²ZˆQÀùá!ÓÖÊòØ ³M‹Š‘‚ªÞŠó?Öè#·$'xà\‰™sA{jC<Ñi¤Í1§N/ÀHfiλ]r¤å<dݾ~\…£7ŠËÊ›¢`dxw2Jm°ß냯˜•fA£±n¨_µ» óÅȰT^°†¤’è‹Ù©*°3]ò*kSïå9 ’ ù®gÌ8W‘Ùwš’pn÷Y*O/yž8çA‘8Ï̹Ñ{ñëÉâÌy΋”‡/,c ‹òì”NZudJÔÊ §£Š @íö ûÄë_ïÙëuz9k8UÕ7HàäÅQU6Y +9€¶òC™˜È<Š#¶!;cä/©&y¡\è{ЉÀd7¹–ç,¾­*F‡«G(DT]ªŠAça™wáCÉhד^îÕ9Ìׇ¿¥ÀëÖPD~æÃþþ¶:ª;zcðŸWÖûìã ÈŠ@Êp}Sñúù+øRÖñ¬*ié ÿ}AØ©Tþ› ¦ªÈBbX@˜µèþ!/ðoq!´ïsƒtœ¿â¶ÎO—C»!@h÷ÊÉD¨ƒ÷¤IâDEË¿}CO‘G1t"þç®jíÐÈ4j’"LÿÌûg•tQ¦%÷mûb€Méì \|Ðë+‹ø#“n¤(ð‰eX'ß2«®ç¾sêŠÁU^õ°³þ\¸»æ\’dY¯–*Mš"xH_¬.¼ê6³Ø‘›fEXá%'Hõ>x+`¥q®|b=)[}±LêoamR³k ª¿Ô‡À˜ûÇ¤Š«ÿÖ뇳“nþVJ'zBHsh½>œÕY}Îâ©"`L̵z-ãsáàYŽß¦mó¢âóè\qôuU<¨—zú´z°Ù{òç»§Ï©{’Ðê¯bµe‚Ï!w7MÛ›ÛŽ@Úñub³Eû ÞÞ÷··wünûwʦ5"Ôœ+¢ÿ(Îÿ±/ÞÍy7ºzW§B™&ê(7Tàœ,ò›ìuãÙÛÿÖ¨&4CBÜߢcgc“õ„“¥ì"„! !°Ì%= | ú4$”rĈ¶ð樂àñ1½,$"è@b à+= [(×%”q‡ä/ŽyZíáýrŠƒ=¾–•Nª¯ +]ãâ E‹'˜µO (Ä!ÉG ’„JÂ~¥Èuª#]'nW¼Ù+²ˆ·ø¡Y¹Ñ³ ý_@U`Gy‚¯²ÏFà­ uAùDÎÞHLuúðSVã °Î&”2òV±zOVÈš‚—t°³@N#ßÊ;Ó½3õÛîa­ º73xÎASõ™`GwÆÖšÚa}*¥qR—èõ¼².H×&Ú¯Œ¹¶Hìâbvú¾ g£Ë«€»Jæ-Ý¿.º oUôX€›$DN/Dï ŠÐ¯mžà6Š«]\ÌœßD',#È|ñ=ËÒŠØšŠRH„  ˆ„£ºØÍЧOz5ãÿÌR¶û=ƒ”øhßWèÎ{÷îß¹G÷ƒ2õºÿ³{Þyg¸CÐû÷Ø)ÜtOŸûŠùó¿È)±ÎЭGﳯè“Þ3iHwzE￈9<F̪߰„$iW:>@[8.÷±‰VK±wídVþYÅì»¶´_–«ÃJ pt4>-0ì+ß(ר6T!õõ¨šÍTµÐ€.ì8vus$À[&æT[f§õ¯Ò·Ÿº€(¶P +zckNÒ"Qµúù‹Ý)jXž×'b,ʸ&Å+ôá©ôjkSÓúñÉÙwÊ·3ÖX– Ò("RAÊ­U³k— ¿¯ÎÕ‚L™ïJ5¢WA•Ó‹U5kz«¡SaMêï‰Ý3H9|Œâ\ÑÍŠ$ôž`øûeIõȲüðKqN ˜’˜qM!y ÓǤV_«7›vó3 ñ¶<Œ/9‡u1¡–ŽzŽ_S<©L'T :¯ˆóŒATÇNÕº¼.Úð‘=yÒûCï«Nçî&€»[¿ÙîÙB—³÷‚k“÷.éç_–Ê[^‘bQÿ'ô}æÜïç±¶zåîôß²>{Kïƒå<æ'‹sšװ-ö0™¨)¶²Ü}EÌÎs)ÎEõÆZ³³štÙ¥’”u›aEÕ힀‡Îm¿ 4ªÞŽ]<½AÞƒN¶ý•õz)é^ˆ ž“ƒÌ:¯: ~0šgÝ·>SÞ+ÓUßk©JIÄÕSÃ| +çäˆØ'¬8Fu#Z8WÁTÕ¿Šs8Çyþ“JâR¸dºêЬÑ_û%gnÿÒzâ€I¢;Ÿolê½·™ ¨wö’€lü Ì¢Ô]M°_X~`©*€Q°o)À^‚¶“¿Rf¹¼Ô+ëÕÒu_áOHP×ð•®Ûi(ÀÎÂû¡öŠ¢¥²+‰ëÔ‘²(CÐ3 +Avq´‘BèH2f +"N±óB‚9‘<¤áõ(¤aŸ¯!MøWvõ1ýï÷ÿöÿ ÀÏW¾ã[’íš<£ˆo"*ÂM¤ÒžÌ¾UO¬¾xqØ-¦EµìäïÔu~}1CùTÖ-† +W4™ÚgRÓÔ©ªvØoϦáñä¼>|¯çZ5NX{œ`Ebý|ô˪¬…×@F` `™~ÜŽé‹…0wqòXÌËlÏbO`ÎKlŠžÄÂÁ Xd¬`¨"59Iqã{:jæVcÓ[¡î' €™“DtZ­ÚP'×-Z‹š/Ÿ/ÚW8éЈhÛÙàI¯ü—Þ3ïMO ®%æÆ0Í:ݹ/Å\áz +ã¥zl4àÁ'OŽvz£'\×ùC¡÷#†¥Èsµ|° B;7 "Ë= ÿ¤ñt  Wmö*=øÄ‹‹Oþ)$S Ug%áDÛœ‹rL.¦ù/^¶Ï÷%P­ü!Ò³ÒnRǘ¾]®TaÀª\]éR¹. +•«*]7£\#Wº¶\[g2õ·gYÙîL"u½-W‚*ݼÉm9òjqH@*%=W:ìíîEÔ:lõfN5Sï‡;ÚU:­7ððýµ{Ìšå…~/.–[.æ•cÛuÈ9®³uU_œ×“I}:kfÜRä +^×?þÒ(“êÅû_æËzÖ\,ê³î`ü·_–§³óÿX¾?g¨®™_ðhחʳ’áh®°GÃYÞý×_Þ6Ë¿²IF}z1×Col¦áífÍ\ .Î ËÌ/.êjØÍÙ #q¾¸X4‹÷Ë÷»XÌ'ã·zÆ›8 _íåwÕ7Ë÷N~öV1ÁÕ§o™×óq½Xþ²`-ð‹eý¯Ùaù¿ÿv1›üù¯Ëó¹jš ? ñ T]üI9^-y]¿Ó›¿Êš_ÄÝÅMõN‚ÿS±ïûÆbýIÈ«¨·E]žîloÿm2vîí€zËÙ|¹¼¸øå‚}%È žn$M ŵøÙ'å¹7~ÐÛ³•DóËoåæüg±r:[^Ô‹¼[üõoÍä—÷çp^Î.šz<†sÕŒÉb)M¯0ç¯qŸ¨Ã­¹¸8§Þœ“q³³ÈsöHiæ‹ÅR7•js¡R.ûÎVÝþQ9 çó›Ñ€‰»;=5Kz±£Ag;ëÕÏ&˜µh1Ô"å>SG¤lTÏŠ)$‹/¾Ùr¢67˜ÿí/uµœÿ2?gµŽz¶œ‹ófÌFÜÊâ¥0üèÝRï-¡Pø]y8]*§/~~?S¤ ^·f×s>«›¨‰óÙR¥|”gÞ³å#êÂ-4Ãõx'vG¹‹!û.€¶‹ ïw¤é29¡¿ ‡5ȇÂõÃ!Ë4a 6’[u®ê,ȸNѹuÈÀšôo>èÝê©ãæÖðõy…dÑ>÷JPìâpÖC\æ‡üáyЀv‚+’6Šüä~Á )%ÙÂA$nKŒt:vhpÖXâ‰^9Ic7`äÙþ>µ=€ò™¸³oQ¡Üt3ÑÞDÂ;uÄÌñšÍùn^W‹,;S'‹bK_Lgœ¦ÛYœ„ž«æj‘8‚BN÷±ÔSzÛñ¢Ê—@Al#n ¦Â aÕs©¯Ë½üuà-(+t X“4PT‰·ÙE¹û¢RG½ëá[E3wߢò­ïè%‡Šµ_Ε¢¢p˜˜ûFÏ+iŠBÇ i†Á«‘(/EU8‹¹4æ"@qÞ>ƒ˜!}#Fþ `÷AOBÖÝÞÁÃGjÅ­ °s_ªüuýccç‘Ñz6x+žJ†4?;8ê &ÏÊ1·çÀ¦y‘:>2åà™Îõ÷èÊîBWé3«Ý$9ÃE[ÿ°ý°Wlï'0°©ØdôuZ\t †5ø=&Ø$û¢\© !;U}ö’]åB8‹0ˆŽ)çc×ÃØAär¢êJ,ÇïrM4/wûªtÃŽ× hËõíéd|­\óg“y·š“Œ.\2w†øÙ¤»@àžé²Ò™9Ó²8ª%s¼Nïsùè\…nva’¨DÌ|¼üLfÍÛ_ÿð0)IϤ¦ãLÐòƒwáánþ:æÜ¨ éh<&CýX;IR²Ì|~.CU'?«.& µÂEÉm¬â}uÃI岨-ߺOˆÍñò í±òW4V|‚e$p Ë*Ù–h¶UõÏ +0n(IåÅnŽXÄÃ!QPéÉÊAÁùdQu³ããÁ`R-&õ_mÐñZ +2Ô™¾"¢\ÝâGs©gQþ¹˜ÓBøÁh)H¬O/ˆÿ‘ªúCÖ„Lä•Cy6¨™îæ¥ “oVœ+ÓrÌ»®8/UÌUFͰéäg•Ÿ8R +2ò\½W«ÄgÊs%¿B©LxŸ$F)éÙ¬P«käK¢±’|´u¡}Ï]úû£b³ó‡ªá•ï’g& uEzÀ£§±²×3†Efyf*#døz6ZbâT´NAÝ7¬ŠiF¹`9q>=î¾K•bEœéI*ÒKŒO¾ŸÖÊ)Ó>BƬÛh°Ï4ö ÷[Ðba*ÂMI, ê?ëïKPÈzƒ üן`ѹðלL>Ô·eƒWùààjǸv-,ú¶­Lá$ +¸‰AWÌìA`@×|†*nO’—¢‹À<–Ý0î3"a)@,IUÒÕa@4±õG8®»ŒV(˜Ò³ $b7ì7~ûŒ|ð ”ëçÊŠBQog?‰ð{Ùº¢VJÁSæ*³”a·ºÐ?4Œ˜3›ýœ—Ý“ºL:àˆmÊ™Ù?Ÿ»º˜Xðv0VÇŒ¦®]T\âh04£=HW,Mð4öráÄ6[P¾L’ã[Û¼c…9¼l¡ÿ(_íõÙnõî*'ò>ïWm]ˆ¹‘úŸÃRš{}ƒ‰Šøà©º[ϼ:1ò&um÷ÅaGó9­Ë»Š¾”PLÆv:)…æ°SÌ A¤Q’Wƒö™æË)‹„à ÈÞ(ñ¹oâ‘QÞ˜sý'piçñ¼£Îõ?šÙF·yŠNWìIS¯$ŽÌŠ @!\»Ø1Yåç8\,"iÞùΩW‰Š _HÈ´ ’~Á½§Õèáæ6Sîßÿlkç)-®à|ƺÎ}-»ª×°Ø¾9õBg-ç’ĸ)àT—˪+©Kñl¤*;?×¥”éÞã¥A8áBT.ú°]–P'³ýž‚©šQ¨~Ö)§IÇßÔe–1­¦>Eî„ÔOwîo0Ê÷ÐK‹žýasgÀúͼ·#õKñÅfº½óf, œ‘ d0¨‹Å?ês5¸õꢎƒ¯îsHË«*j}Ee!/9‡Äyt–ãq½(ûÝ¢f<õv +æo!´Ù}ÃY§Ãi±ùº‹àA8° R@$ °F úÒ·Ýã@Ñõ¡ã*mHö/·8ä¯t Ð + ð<Òç;À˜y +Ð' ¢ÁâpE 5RÐ µK9DGŠ(!!±8]à *‘PŽÇ!ÉŸ¤°Ÿ…žÏ˜6Ä%ý7þ ú%ý·½ õÿ•°µõ‰‰À«l»N©È? ™zèà$ºçÓÝ~óØ£aÔ•=Óg­L¥ $%G³hÓX:’æGÍÒ!õÆbu&i:º“«ULý«î¯4Ç:O[rrUý‘*—£©JõÏÌDL}ñ¿Ìß—ùî‹z·B/LÌ}«î†•¨éÄÁ>o“¨ÎóÊbªÇ*Žvbe\_ÉLª¬Á+®¸ï&©«rdâ©zœÛY,¸q·B? È£É?}3ú§Ñx^ìv·{©ØlâeÜõ7>ä5z¸µæƒ)Rý±ãy”y:¾öföTx­‚¿ÅP%Ü»ïшÞÁÓ­ÎÝíÞÝÁ ÷ðË=}vĆßߤ!~”ØÑr¢‘p4¡§![ؘ)rGìÐWuyxîrm{nR®ä.›5¾ÿuÃìÇøqŒká™îR®ô.…NÇßZìT¹¾ÊgÍîoKÊUR§Rxûv¢3%O„ªt5Þà“EŸ^‰T¦âÒåªZ•nÁ˜PÜ1nÒ´•®Í»ºì2BOë:Ëò¸*ë=$ä:‘ +sWiƒ0¿FÎ(x’¼AÖèËȨLÒ§ÎØi!@Â!tD‡¤L.ü8N:e¿ é/5³V +ðIQS®¡ªE: +ˆ¡z@Ó>+ý’¶®}Í ¯bNŽd…J‚Ù°•&ãÓE½W,Ôm×£×M8‚-pÅIË>›DÈ)] 4ißáHíRÇcû )c˽}l³ƒ±9W£&N/f£èÕñ[çQ,ÑFt5R4IRÆoà‡[˪ÃOGO7wžf +å¨áÞ¨xÚ»³qÿþÖC u½'E¶ÙC£á•¥-”§Ž$°œ—Ôn©#£ÏHhTH^„OJ“ç‚óH׿’$áÊå +ãí 2Çï  U‡¨SlŠW8—Ôκ˜µ>B7·PgŸí ˜ï‡&»i ¥ÖΞ–:Â:XlC·ÝcV +G­2§oðÙ?béé2æF]±¦ÛÔÇ%Õ# +Áh‡á£g ¦»ö<‰râEºH_÷˜–¢çôCOžåŒyPÌ ’б&¡@xÚ‘SXŠ_'HF ½_Óe›d—²Š¡þ㻵ùyøÿݹó_·RfY\@r¸(÷›hÆÀÚü_ÔŸ¿?Í˽ÿ¾÷µ"&e=³õ·µZu›T³Eþ—¦ím]¯8¥® —_g «½sI_ü;íÈÏ(.k`ªPtXŠwVŸÖ Ö¤ w´Òg”Ôä_ÔÏçïÅ‹ü°[ÿE—-5'æ¾6F\0=ga‹É2o.Ô$Iuhý<7ŸI€9õºfæ Ô™ZÒ7sUµÇ>Þ029Åœ›ì…Ü+Rfô6R;™ÌšÁn¾ÝéÕO±?E÷è‰Dù!ô­«À§:3MÂ1‰Ôè8VÜÔ}ᣥwuî§¢±r{•¸{¢íAïII['[ðT¡ÞäÙÁÎæWÿ°½-üw¿â.ƒ^ãgã?6õꛦ»”¾Ff˜¿L.×z^ås;Ú)çRÖÁad…¦|sÖ1’šÊõ”áVÑZ¹2ϾfeaUºyžÿc¾÷Ú#?Üu¹Jbp¹:.¥à!Çß,û?](Ékå +aŽ>o¨tq³-W^ Fvt¦¸œ}Ì4/Ž›ÓY=W¥£*µÌÕzA17¿þù$Àð#"K@½ºPõP±’AŠó²Ï"·@÷¼*i¿g5çÞ7.Õºr¯Î&u3WG>#èˆ& +‘G. ]Ó¿Þ¯ß),DF"}!Lúv0ÒåG¯¬ŒþkÉÜI¸‘lïæœE² ñ²]±B8ysN|NAïE-ÅT­´iñU•Ý®ª¨D”z¶œŒ¾nž˜Úyµ‘MŽ +é\ $•9uWw‘õÙ3¬õ)Ƚ‡ïß¿³õè©ñJHm¼c!;v»q‚8Gò¤È¥€8lb½ªN}گĪª»gÎóY½Pɉn‹K8Š^rîüBHÝÍ©^ +¤ˆÉiÅël‰Ù²]$̱3}1éæôlé–#ïݹsÏn;¬Úù¤§îI:¼~äöA›+ƒžD…†ÚðÄùrPecÊ žÌU3ú¨¥Á4J^à\Ìœcw! g… ²«­-ÈŽæ|~z˜Õì¢òB ½•¤ÈZ£ÕŸ=Ù>÷6£›Ÿ{E Ì€ë„xüIÒñ+xÃ%^ ˜|„¸ú““¯¼P%:A½YYÜu iÚÆrÚõϳûq¨VD ÆCÜàGÿ:@='-ôsf`r –tG,*Yg°là§ðv䮿+XŠ3‘†9#ÿ¾à 9Ô»¢ñ#%µßÊì#,uü·šgJ(™œM7ÓÅ-´x¾x?ŸÍçó¦Ê_•»ùBº– ¡ÂÝó«d,›1fzÁŸþkÜEšåŸ_a/®Æà|½ܺ·«N£¦³Ì—óùü—ùŸ—ï/æÍ[iܳF? Ö,Q÷ß,—ú_,–ï†Ý|¡ËûQÉ.–Íùù÷$V.®Oߟ/ßÏßÿ8›-~&Ý¥§ ý,Je ÊC©ÍÏÅΩfÉŽ·óFÜ“I ütš·Uw0>-Žž¦ˆ‘Òg÷Ý$ A߀þÎæÎƒ»;Åà ˱júèÛƒçÏgBhz:)O6„Oêñx¶\ôK‹9ø)-òÑØýFåzzºX”Ëùbñób¹\^c ü…ôC¹ºÜ—õÛŸT®MŽoÙbþ·çõìü|¾\ZP¹N•ÿ ÊuñÏøF5¯óÓÇùw§ºçJ§‹sU-Ý¢\‹ÒÅ-Kâü"ŸV^… ,Ir sc©ì*×Óæ"s¹š¹)×Z™˜*ÊU•®ùnùã»{ÇRѺø îPÍûæ|q®zrêJ§Â‡¹såùµÏßa ÷DëåBÀ©:W:à~eÔATèôÍî™M!ƒz4±(šb÷_Å!e$ ɪjtщH!ݵºt6{q '†~ý‚§3,ÜLeó"Y=`ƒx*`˸®óÍ`#àŽáHñ2ÔœKâ¸Â¹âºÑ,– ²tûóÑù86uD«Çক½ÍyiÎaÍ÷“tãcþyÖº¬<³ àÙÎæÃvµ­ÞÀ5B›Ð-„$1ŽõCç¨ÆëœsU¹ÐÍžWEÖaüVIŒ–,¤­2ŽÅ99e«R}¼›GŽZWx]å’äÖ*? <×Ew@g©‹f€`uñô!“†ï{øŸ~žƒí˜žƒ 0‘ºIŠ;° nN"WÊlwrHKá6œW8Wm%ÍT+½kTnÈ^€g·*®ôÁù¤ÈX lü1Š©„·P,cüC[›ôX¶eoÝùÍopØÚŽé€&û¼Ûú-Lô@¸°_:Ó¯²ÉßûFqd‚þþÀ@­€É¦ÖÔýŒ.ë1‡Lú¶$ +âà ýæhG§éÏø¯G£í$‘¬E¤È'°åØu ˆ’°ˆ 6øµ‚"Îø½:zT_úÄn?¯ÒèÖæÿÝÝÀt¢“4JéÿÎ22·³ã̹òÛÈž}ÌùÓÃWÓwÓa–u»âÎ^ï’ˆ0ld]¦þꛕ5†Ãá ,ç‡YŸÍŒh(H¿ï }®äUùøê”âäÌ#øCøñ4aùðàÙ‹ÇÍ4¾®TÝ=OŒ.¢.#,f®ÀQBÄ‹^U‰94w‘(s{s$ST3æG1'•1Âs®‹\)¦»6O'æÌ$Éòøáà0‡7³îNëü°š*rH/Jjû]¼Q0íH¨£vÛ'»Õ€áþ(•S”?¤ÞîïÈO‘©òqoÅT»%ƒMÊ,‘ýCliÒ-?œÁî‹:WeºÁÐâÆß0­ÓZïîWAª³™öa2i/µIh¿ë×dEþe”‹jN1¯¼Ê×1å…3m)ë¨Ç.×e v7'*×’r-‡žÃårívÉu«J@w«ÿ~ØLë’[úèÊ×§Ð\¦äŒbWP•ën3‡”³øw.Wσäåô±:2ñåJDê…V±êM¢j©ÒMU¦ÕTÕ‹‰Z8sÙaq¨ço¤ úÇ_'zÐ8R¿9w¯:SWì(ª¬ë…u´G“Np¸šèN‹F¸aŠá”É¥Ê pôèhvt.TKjTÑ/öîª&ïxZèÐ1i„.*ü·O (hín2ɳ‚å“ųYhÐC3±ÈDX.³‚ðåÑÜoc=4)ò *´Ò…sÁh'£lVËœì–5’xa]tŹt»Û)”aË@öñ®Ï’öÿ_ú•\;èáh»…@|‹+=.ôËt¯y´bÓ_GH€çÊÕ…Ü!ŸÊZt;ì̪Xz'ÉŘ'Ìb›é1”é²J̾šJO±ðŠJÆ™©#g¿ˆ“¯y‚äݾð?¤+.BG ïïH¨©Oùý`°ÍŒA»ðŸáA‘XPžëµc½`\„ì—%v÷wã ¯| ‚ˆÆXŠˆäë PHÜí÷‘èˆøI8rŒD£óc?ªŠ&Ñ%›œªÖ|„v:_ÝþN¡Ó2åOoÛº²áðYš + [a9Á†€_!júÚ1s#®Z.8«nS_èûFáLhj,À‚µ– @jŽÉvu ‚gâ¦Bô,  °«GRlmd„çM¹ƒ>ƒÔ|ÕÑÁ!èN¸ãsbסãS, + <é…ZÕ¿£—Åâßjþ--ABÿþYK1¹NðŒž‚ÇÈ}âmT ë®4¿ê¿«þÛc’ûÒ¯çê7éþÕ@‚ªæqYê5t¨®‹À¼Ç%õ_džËŒÞiÖ=A¾ÑÿêK}všÿ ¶z¦…Žõ=ÅsÈAã¾éÕpšw˓ʽ¤Y9]×6æÔê÷,{Qšûò¢ßpM„Ð2W–»¬Ýé2lé[‡ŽȈô$êè­»êÕ©ÅÔÜÕ¿Ó?eØc‘ÆD¾PiÝýÍÝËrZ‘¼“6x‰$ê®$7}«ð“`ØÞ Ê/IdvrýúÒ¿ÀQ╟Û|IY2õÆÝ{;_€ú0Å5¨#y“ÆÄð/Ì-§»U¡ˆASeiëv"ñ¼ÑÊ]®ÝÌs…Eʳ¾¾ÄM*‹yÊ9ݧ\ËÇÌ‹ô2þ•Ã7‡”kL¯M)WÁ1uîЕ.òBÿåY÷°dÄŒŠH¹–}Ë+RµZ•«Ö¶\i{”$’Œ™;”Hà;TU…éc=ÅÌh^2Î5ú$€¾e/N&cª¡ÁÎìÙ>º–Ð$Ù§ÝÝ™©‡6H)|L¸êfúUÙøŸmôLøâ´^¤‚Q@S¦.º8ª‡{Òþèä€~R8ÅÄù4)× qÖï§îÿIZÌŽªñŒ>?¬†~çx"ÆCe].QT`AruÌX/‹½®~^à|rŠGaàúŠsiéæÓœ0w`c4çŠ ðêžv«bðR™žðc}:xÖÙüjÀ4Àû[;p‡0磱}ÙÐØ?(ŽÙ`’<7ëщBÒSZ0QUi¾iw—žn0>'ÏÇKÆÿuæÝµœóŒ`ò¨˜U‹ŠyÅ‘‹Îž Ö*?œÒÕ“j  ¶6U©(œêwéåz2²'ˆ„ÿ&F(öwîí<ŠmX™ õÕ8ÓCAâ €_òÍþaÅ„(.‘}kœphõqˆOT I•w3jóG¨B/¿õÏ€ÿ¬Ï¦©lôV1r7v4áNߪÒ`%›¨èº€]CôZ`¶´vA«€¼‰õáÀú@7ËqO×ýðÍÞ×óÈ "ÀÜñGhó«a˜tà‹Dc\â†ãTŒzL'‘Lûç\ )@ó&ôÉÀ¸0‚,YTœ‘Ê`ârÕåúš5¥×/ëŸõëº)»å’êÄ:÷‹÷ä3tº˜–盫\ó¶ÒQ Q® ¨,.§Š§žVë7Qéþâ™Þ,—£ô¦åTÌ©RN›…Êu¹ \û@WÕ‹rUÎU…*ƒÊÇfúÚ#)¯ëzšÿ킱•É䛿¼ÁÕ!êÕ5ú´!€@!(;À< C +ö¿cœ@܉£w hùš«’ j´èb0-í;> ¤Ó©ïÕÃlßÒ(ü0HWÂFu^t*Ï…¤nêKá#ê#½}Ì»$oUv ÖÓ† QÑûÏ’ÒÌ4WŽÀY^˜ S½f° ãÞ˜~·ƒ¢ììK¼E†s˜œ + +' ž#U§¸ðË`AžŠgбIÄ”×^Qï‰m߃íÎÁÓ^ï¡÷ð(œO¼v'æm.ˆ×b·œGÎó•ø“Ðœ0æüH‰©)–]5‚Á3ûÀù˜íðª•\§3̜뤞vJü(AV®Þ²eBž¯r$©Œy·ß¤ÉtTýúàY¯g €'ê>}òäé3 5³~ÁSú>g‘1 +þŸILŠ%ºôË´}‘¨Í(~ߊl0j³fT×Ýüûχœ©™\­/î!º 8ìm$ ºýÏX€†5[ +Šz/ÌÙ[icÀd? eEàÏ€”ÿPŠQ÷‰Ç&}¼¡Ós,DȽü +sÄ­Sœ€©ÁßÂ{°C£Cè"wbH bã–±#z° "R£»nè6 ’C¶Ð5Ñ¿“çÐð€@¿OAÌk à¡ß‡¹^{ŸQgƒIóÿMž<‘,½Ÿmn“eXM~‹p ¥Òù€`cº¼¼þQ0šŠ',|ùÂ9ˆºAÓ +ËϘuþð×i&êô%ÂRKREAwbvW‚êêôE>w•‰K®hZz«†ç—¿«Anª¬X°IQ$Ù¡Êÿ ++f'1ÇTé>bßÕY¢-¤ïºég‚z/ÛA¯—¼Ò‚9µk®èTW‚&ëUq$¶‚ØÂX$npŠ5ù Nƒ³êÕ Gs¬ÊÎb½ÓSÖÕÓ—gàHQÅB€í⾒ܶÔ[y§sâ’¦7xþÃ$Ä»šš”·»ÒæÔ„9£Gòn¤hƒ',vé_ĬC¥zÇ‹môž¨ò$Çb{ ©×À‹JÉ©ïyJ ³àm±+ÅA™ƒº–’1¹\õË:ñêæTòN媬_Q„v¹¦rFÅñÚû”«"¥\¹£4TŽeÁªv0^«tt¥‘óDî ¢¦fã{É>âOè°^®ƒœ\ÓMª:Ïf®P[¬í:v¼Œèu¡ys3Wv‰L¨¿FŸ¸0]®ò¼±;©¯ŸÅaÖ)q–s¨«]ó%Qûm)ê|7“^ª*"$¤½Õ»G@ˆòQ« €]”Ý)‡É]>pÔNëHUˆ_Ê9 MûlxåHFpNL*:x—Ú¬ºá fáñ®šô<®Â˜Ýð` K˜ú|H%+˜ šŽ´c ‡æ®O5«º‹¹ßÄ©æjV[CZƒ¾’=p{ƒÎæ[D=³8‡ßÈs²ßy.V¼¾³›¯ÄÁJÿ•²Søo ¹ã‘¥¯JND„Ûä9•Òœ;/ŽšÓnýKÔa‘ê3¡VÃI›åÈrúƒƒn®¸âüuž<}z_j=mõ)&ŽÞà ÛÎ0ƒXHñùG—xm‰A1rô{}õÅ¥vJwWp½Nâ\<êò×bý¨ZdårsK}+ÎÍj"ï¦S‰.ªUéâÍd|¼íÂþëoûÁƒmV²Ùlúf=@Sú–2¬€BBðÐr˜ T**@tòÔ öïã4°œ p¬ +H +kÝÑ%_ã–>щžvðø³¼ò{RÓ}G*‘ c¦ûI8/B`ÚÞÙþ"Yœi¡÷±1üýdáµ€·º‰R!@ô´x]¾9§¸7©¤„ÄÆ@”/]Ò +t×4¬5€o­NÝBÓ¸>쳜Vªè-0±>1Gê|t¹™ö£ÓrZª—-sÕ!@!fˆtrйÍÌ}ƒ­`!ÀÀ ÅÛ7‰; Êà;€žÓ› (V:ÅCz—Ì•J_˜K£Ð-€7¬Ò©UºYŽŽÔHW ïϤ” °W9{ ú/W` ¿ûÏèžHƒÕ /Ýl±Â«•åž®KâDî˜^M—øV)è™´_ùñQyôLÁÖ>J½hK;;w{½4PR*ž>A…õ†l]ýåS5EgÀLå²®]f]”«zñL‰5©òÝa”+z$µ`-ëŒÿʹظš%¬—«#uZ¨ÆªrôARòÛr57f∔™j‡÷ÊÓMºëK€a{&ö¥ý@)Fý`שKæJ¤NTœÂÒgÕH^T…HÌM\é\÷¯Ñ' ÒᕳDÿqÍU`•ýNìÆ—ÉOWƒ¨.ž# v_4¨¾Ã§5I£¶f¾Þ­cdvÞª‚(Ù…+tä ?hä&ÕmeØ*$i +ªAÑô…w\vÙ&ÎGž~/j9Ç€Žü} ~|@\ªw.ºÓ=Ó3¦}d<uûòu•ýjxnzÔø£·ÓÃñ'~'iÎa1[®°n"zE˜¾Ú¤¡±tîC¡%Y!î')Å¡²×A5çÔ=_åëÖɾ±¥ñjÐíT/9‚ðñ)N½mÈúC朂„óѤñ.”!SŸS¨Ñè˜Vë1š¬Å|âahg˜†rõ¼裭û `@‘(2V8VU+µõÁE‚ñL]ÌŽ»us©s}çƒÎ.wMÙÓLÏNPTÖ83êÕÞtY¯<ªÎ3Ifp®ìR÷ªÊÕEÕÆibU¤q£êf95íV`ЭƲh8%Ù­KtÝà!=ÛaÐò÷àäJ~Ä Gét£?hmÈ6îv·û ôÇ3†i¾#´ˆÛ\\9«€ß+ˆ£ôe&(k’6ññ¤#˜U\ 8Xˆk¶àp@ʶè;¢äEÉ#Ïüÿmçšà‹•ô@´õEk@N"ª›ÈíêRwç¾8¯Ïõ«.Cµa<ù#Cêôl’£O +pç¼ÆÌ·k16u,hŠÔu®ˆô`]}×o5EÚGjÛAhŠt·8&qù4YTû<šGJf'ùËÏС16…xbîð]rÌõÍÜi“I¥Pð¼}’WÌ©C +æDIPŠþ$æVš¢ºÎÕ„ÔsUÉ@+l->>îÌGÏÕ?¡^?a~ÒÊþo¡ü_Ê÷l8`ê®&—ð‹®FD+sCsÄ£ò-©KÓ/d/“ Ä¢#ع£@iÚðpãá¥@‹Øcø4–t×â½Mã†ùLXèÛ¾¶óW€H³ ÷P¦(ÐÊ G#ÿ.Ë5d7e¥7v´@Å¡ZdÀÙ<þf²nàåê:¦žˆâˆr…,Ø@-PzäI†tNQ®!tª{n-~/"¥r¥Ò™’ ÆÀ{å8•Î(¢8’Þ¿" tç¿òAĆMÊä‰I[gx¶g Êž/ÿ^%î׋އ»Ù¿ªÖªzÿœµM!ø;Y:¿íüÖ›bï㌳†\ã¦=V 6ž +puÌmãµpàå:•GOsÙð&€s4~Þ>xd¬ÿ +·¯«ñ¼Y°à¢óˆÔyÌtGñ{Pà0FÅàdÚ?Böï !(m¸,"ïüš`å ®_Ýü€Ûˆ¾‰è¨?°Xé2ĶHcW€šÆº€„{»@mRÍUÍ¡EèØþ eÌšiÕjR0‡© €+¨™»f°ó%PÔÍ¡-J:1—È=©ÐS?€©¿YYlªæMa&H0v$åÑ]Fu||Ôäyíd¯YFaPC´@:öʰuÏKõÄÇØ¬Ê~ï‘{+·µgî㢓¤Ý +j鼜†²iePx}W’°C6Žv)ðÞ‡v´@ýÉU €€dx6xjÇêçk†&Ê7å2}@¸]Šð¿²`—5²nRgW,üAEùˆÄÕ°\–«Â%©³Ú@Ñêöm[®æFàåúmTºqÖW¥Sª’.×Ôed›®85âXYˆÈÒD”+B@‰Ô‰ybe` YÄß[ÀUúÄ!ºU`Ù•).éÄ̲.û¨mm»JÉÐßí7/s)þvížÙ°&à`=šþZ©,Šný–v«cè%=*ÕV)ºÒ©¶Uy²àá¯üP,æ¼µ¬\éÂÓ6DÝÀ8/&•¸h Ó+¨Ô7[òUøˆKD8ÂðcxÆ+I†OŒ9É{Uš’ ÷ä«ÍÞŽ€ Y(ÂHAŒÓ-£,’®+ $­äÕ »[Ïô‘šDVùS5ÖáÜS$Íùu €2Ï¢³%'å*Ç¡G+;Bª|/ËUVÃ9éEo°(õ-’…ÔŰ^ ‹tîß5 7°ÀëI˜“˜IÕ…üPYÿxˆ€V¬œÓ',¼-_®-Á¹âå×€Ñ×·Ñ¢¢ßJƲ4†b;{÷ì`nZY„€8 îã ÕXhŸþ,ôq æ(³±  ò‹ŽÍ!µ.‚ä\—ÑZ³ŒŽÐˆ¨å~(vÜV¯,ˆŒˆ"µ  #ÝÔ§Ùð¬¯òãÔÍÃÊ YÒwRÙð@køÍÝËe€D—>XMn"šÕM¤î޾ø»Ö Þx4®¿½Ù@¯(@ †>°¬ ÇêÁºúîRSä_ëʘú`ôZ÷ºö 6Ò9¬,öPð¡êzÙÔÆk€ î,™}\­¯2Çt/–Ûˆn¶Dh‘0ƒsµ5,ý-Âà @O°zͯ$€ä,îØ$Ð?o-´274'‚` ­ÀX¬·R?õTÀ Ïp¼ÿpãÑSUžÖ ~å‰8ŒÁÌÿÈ*ÚbEcØ}-õš ì”çäÒç]„V¹z`‡ Ê9^·—E—>ô@º6©Ou ÎÛre XÕàÒ@W•+ À©“qgÖ4æ @„v¥3­,/>´˜©k´¡Îí×>è˜â[Q8Ý(Èu @§õËD’épFŠ @n À» ª‚`¸.(%VAPšÔ›,CzðcnJô½D1ZÃjÌg|ÚÄE] v_*Ψ†Áö*ªKÒe,/óc,ÍÌ}ÿ÷­À9HMVÙìŒ^·(ÕUk0xÝYkˆ!€-Á9lJŒn-\N/pôfº”+­à®—ÉàýÆÌf"÷E)R[̺ÞHRâÚI;M +a[Š¢#¡“_±­‹×-z% 7Yh½zo½<¼ˆ¬ô‹u /írð¼ÍÝË7V³K€££2,Ñú¨-«ñ“èn.w;P´nÿaàîmå‡1è¶? + €ž1°©¾ês:¬;w6n´è•ØÅÃÀñ[ÐŸŽ ç (l8´ùŽOA^®³¾Œ®î{™‡â„_Ÿð€CùUtfDoÓÖ ]ƒ1_jãdùB „'xzèÒ "÷›|¢À]g™;û;ŸßÙº»(!ÜŠÿŸì@̓¥±×,êé‹ípÀjË©…Z €êœúU4WµÔmüW‡æaÚ›-c6¡½ð<[GÊÒ­ð¬ÔñQ^YB:™ÔoûáÒ‰Û›)W” >•z²$@±ªEø-u}å(“|ÒúØp£@ÕZhµ¶XÝN>¶ý·€,ÑÇE'I»µàZ¥—± j-7úÜÑŸªÊ½«qÇÌJ«@ð̸ó² ¤:å2½ÖÊ`Ëœ•Æs²î @d]"C,9g ê6€@Ä£ÒU5‹ýE¹Â®(<‚]ªt¯í Û*uWº$`Ù!KtÅ©Q®¾³¤áˆŽƒ¹¶\?ðX³(qó¬(®Ñ'ù¸l-áæEyB:¹´è/¾(Ûë¤K+ À y j¸zèïèú€RS¦!(³•Ȣ̰8×-z†üáȵxÕË$pƒ²Mœh°8EÒ¶ð¸d€—X¾CÆ RÔ ú çaXxÍ`ÑØXH€•à ÀþÃ_³\rn~õ¥û>¼BØZìPÕ>¯.RåçXœ£ºé¿|’±ò\™2ò¯r•ãK €ªò½>"½ÕлÅðŒîbÍ |)¿w÷±îðûA¯@O˜“˜YYàÝuÎêΔsú´Þ,½ñ%ç€c2óöOoÿ‘`hÿæolú Ð<°ReuÀ©èŠ€‚‚ˆú„ˆ +‚‡ð¶€ž õ`)ˆkÌ È¤æ¸ëOÈH ±CéAGÄð0dû®°ú÷ŒÙë +qšGNBHiÀ"†ˆ±"„GÇ“ +lè_ù %ð¨~aULaЯÞùW|~sÅ `ó ‚ýÚ,·«HÝzÝK }‡~¯X¤ðª»â²/YÓ_³ '¶Ã±ô¢jŸâ 9âf€qœÑ¡©sºÅ O`À@¬ŽÆ—Ì¡ó´@ JCJÑŸ«Ìñ +æJíT½ç­>UÑ™=o- ¬ +³µ  ¯D€|.}henhNdÍ€ŽDaˆ>œ|?¸Ñôßø ,/-Lb À3äIÏÅË?±£á¥àMûr?Ñ@½âÂ¥€ËUua[ão®[$vºX9oË•ËiÜ飩ËJ +"’ð÷÷XÖ}ÄI1<\¥Ož ¾…Ó‚\·ì]³Ü@º*mToU|Ì@ˆ”9Ø‚+N€7YT]%þˆ…6Ö¹bÐ ³iÎõµÎ9‚>W9O¬“ +XœKŠ­ú»5°‘,½Á‘ì#)$'Îý2×-"ÛºS`5 ^:àk>7Xâ]ˆ{rià+¸¾d#‘.À¹-»Ó—Æ繚dk¸|aqŽ*¢á|ü P3’±,ÔÌmÀ 0nò8½œŽ¯[˜L|£›aòHÓŒú×|”A|³;D—X¿ÝàÇ<2ä~]wÃ@VÞúêo£fØýÏ>íŸdpä"`@Ô ,gARªÁ^ß‚l>`-XÍõÖ «~Ò8l´wt¶8‚fsj®ù&Ub1ús“/®ëK’@hãôó:„!O]ZHK!-èÅ>Éàé6ö~~gKyéá7%|ÑQ«w»jÀÃ?€Ö}qò³³Cü5€Ú—ÀéïòPO³Ï¯Îh-¿2  µˆÂ@½.Í,(|†k>W,\2smkY÷8¶ÀàF[˜i€¯§+ €Hð€ ÀÖš€iNj¿î$i·ê”šn}`°.aÕ À€ë@ø¨9Ý»æpÍ>ÁŒÞýv ì…€.FÖ}‚àh$¹ÎGX¾¦X?ô`hÇå +7âBá™åj >×-aØq¥#1b +@):"CºäL…Áð¡À‡³ÌÆ5ú”!ܧQüÈýÃå édTf×}Ö•ù5ZÍècXù nð°ÏFÒ£G£U¡oòÐ3äÏêAô/}Ü~•9sÞZ¨æ<|¸Ot5ô;\%. FÕÎÊA';S +úßTm,°Ne + â^µ ‚:á=GÓú,€[}(M凮[náœY¸ãÚ ¥é,[Ès*Ž ÑEDÆéålx¢)y^aijשZ«·€xȃûHÏü5 €º¶Û}ÜÝøwôP>û €!(`èƒïu€mO“6Ž!ܺ€Wj,`ìy3a@ø©ÐÓ&wƒ,pÌ/Ø®ñe$çúš€¿ÁhKz‹ Ìëxmñ]õàQÞ†XAwÒ&R€1ÂrÃÀ~Ë,€•,è;¢ü4€«.|ˆê&r»ºÔÝ Z¯ZÔÝþßϸ"ÒƒŸæ·ë¨9®[&øÄ,„×Û}̳ðדëÌyÀð×|s°d,ˆfú1€¹¤æÖÛ€À“d@øˆ õmó¸É`@½Uø|¸€’Z³¬ù0dèQŠuxYYvžgÍÐ+9ù©c+<xÝà[¸—†\ϾìtÞ–+•N¨L¥kg°„š ¥µ Ù]±Ü< B»Ò™>6 €&q>i@ÕBy±²¨’è⚀­zHI‡í×´ò`àÅ5 À³È[ŽõB‹ã°¸>sK’„n‡èã´ˆ~Õyc6͹¾®r¾òH”’»NºÌHº}ö¯ZÒÀ*ñ”8×%á|̃Èí À§ûĻڇ>·pþZ Ã@©åÏø¬È}QŠ´õXŸ‚ùfµ0ºn`_j¿8½œ.¶€ÉéÉp³£ï:š|žY6ºæð´×ÿ¸À¨H>Hän z©ðHU‡Ú6£hs ÙŸbœñù¿é{Ýà!€è¬D7YNQ‰1ðÕm³ÀYaìGfè_œ‰2ž½iÿ?BþßÎø €$ÜùüÎæ½+ëÜB”ðMÆ©½b°v{Í 0våpÍà±bW“¿Ó@Ð+ßâ°fàá_ó¸bXë+ªÅ—€+³ü–ÄŸ‚c­ÀÑqøÜhHëX÷ïñ}¹€èÊ$[îÿ¿øè0yÞî€ÑáÎÏ”øM³èYÖfˆs˜¡„Ço‹Î úæÃY°×ŽCdÝ'ú8ü³˜’ºêpÝìÒ,€ð@G×Mj\j&Ct…ÄDø;|Ö,â.,Ô¦+ToH&úµá“,d†X«Ÿ+Ò%[†å‡>ÉpùT; @—h`É€½nÐM5Ô#ƒŽ)Y.}3:8_ù´œ‡M%†Û-ž>ÙC[YüøŠ…°Üè qG‹zžŠbZŸð@"¢—Š0â'/è¾¾6 @et™y+âækU¥dÀVh €}¼ XlŸSåsE£æ<|Ès*Ž^ vET}œ0M)vuÕËÖ@÷CÎß?Õ³îÒð¡0óQ sö“€…¿”sú´* ó"D!ºÀ9ô € àfúíºC[[¼¨Í‡ë¬Ïؑ쀀Ÿ? ö¹þ £†dðôsD¿`mÒ¾äƒY`»C# + –û¡Øq=H“†Ý£ÈNHñ’‚.;€‡$?Àq žÌß××HßI —ôοº@ÀÆg›WÖ@6¹‰hW7Ñ€úª`åëYcö»&ÄŠê—}±ħù¨ºqÙ>–Z¯XÖ|¨º·û¤!€5€uæÔ¨mb×)€è“-Éà €Žc€-6²¯fx! ;ë³þn€›fЕðVáðá,j‡ÒûЀ~1Å>J €þÖ-7ùP¬Æ%ÿ©€È:-×-’Þ"Ÿ¯øHãSÑáéiZ•ë§Ì°iÇ̉èÿÙ@“ø€>É€W¼´$å=,ý¿Ç À>cWÇT‡×g$ ﬗh}Ò#knÝW,¦¯Axñ_6Á9€p¹_ü_2±"]^­pÅ àƒF”}âüC ÀX™2Q±Üæ°0£­€þJ¤ƒµuü%b#¼k¤VF‚¶ìNÅóËg‘çj’7Y’S¤7øXÆ3î‚®Z +,)>=CmAøT€˜ð+>R.?n]ñ ,.}âkU[ŽùT€ +ºþ}ÅàYê­Ü}¾õÙý£ƒ‹FûíYÿè ¹9H '8Ö‰e€øã`µ¯³¾¬àq/†âÁá ‡W³!‘:Ïð(dmßÉéšÍ ×`Ì—¸ÊEÅÈóŠA‚§‡.}"r¿É'úl¤‘@åó­/þ³g}¿U=Q§§Z¡Ê#?îé‹ípÀjÞË4«G¡OõøõYæHm€µYêu¥ä$Â@ËÀ#ˆ‘$(Vµ.™¹¶µ¬ùHWüõuh´xå^Îü_ƒ në³þ^x¹6 àÞ €p¸Áð E o~q€½û§ø('"ë>ÕµòC¦v]õ`À7#J‘’Xù€ÿ®tá Sʉ*–`ñDWHV¤0·ø@]@‰[tQ×h²A|ü£‚ÓK¶z´^Àdµ°²PøþZÃòuJ€Á5€´àúCbZ2² Jé+Vlg8WU¹D’•?V:-A~èð5ì+sþ¡ ]ÀÊ¿¿ø¿F\Z­pƒ€î¯qÄ%"¼îç4Ž„zÏo¶ì¬  zé#qN·@*W-Wyh‰›¯©JÉ µ´>Ò>§Œç×}®ÌpË!ãTé\ ¸=Ä6ü¿: àɯûè;͸aÁÌÇ-4‹˜@+¦¶¬Yü¶+ÎÝCñûilýüqû_?Ö‘±,-f Æ˜µ›]ñPPñ·ö ,U4ŒÇ9zê#˜ýÈ,Ýë:ãéøþ»fx/€Z”¸#'¡@w¢køLOØ7&€þ•RB<Êk \›p«@ÌH€Ï6ì?s€”|)]:SÇKàöCiûâÖ@}ñUÀe_¬?ÕÀ½î->këÁ¯ø´ëè•ÛzL¿„€Ôž•À'ÏH+ÞêÀ,€ÖÀ@òX·èúÏñ@ ßo^1㎾nXÀCaP£¾……€®ÌøÏö€®ÌXYҀ뙢ÑO; Pç«rÕɵYô¼–ÒVU;õSJ +"úX@磻ŇjúUú´Y¼âÇ,«uøòÁ´ò|Ì€ ³4_ºbPƒi}t÷w[ ºbˆö(,‚ÏøºÊù'ûx£›|F­`õØÇ}”yŸæp³ÀŒ;§¯ùðu#çÅXu(ù(sÔ—­ù¨Hüd¢¶/BLn}‚u½€$:ó¶—븉§ü˜@kÐ+Ýìà…ÿÖ}œÅƒëëô~ÿ+눽¯p<šÔÄ,8~‚àë„87Ñ ³èªô%…åƒu.g\Ù ]™¸@k~Q¢ÁYKªÁ÷uPðÕ]% €.ʤëáĈo æ¡´€AÜ1E(Çbôç¦¾Ì 2wtÉÄ-®Á"É´kÒRH ŸhH“ȽÏ7Z™IáœÇ7%|qêÝ®­0û–Æ©Ž÷ªÀú,€´Àº€‘œ CÑ£Ð'ûü³nõHCWf¬ÒºÁàŠÀo©ë7­ ñv @; dUË]³Ä,Àu Àk€@üè$i·¿æÀC×VÜÚº& ÿ+!|®­` ¶E©ýJÌ>Ò.`† ÀÇ|þ®Y×|.ËÕPR×}Ú…€( âSx»(ו’„Ë5 vˆDºBb"=q‹Eû‰ë|@ÜÁ}ä#ÒOkhó#ÀH'Ÿ8 @—nñ¸i%@51e PCKj4€X°@é’ÐÛó [è>„XqÞZ¨æ<|À)ª «¡ßá*qéW}V€}Tn×}nœÀ:7[(M凮͸ÊCKdßk)èÉðR¬Sé•åk>-©ò¹¢ú}ãue^Ìp×A½¼nH>0r«à¶•_Ò]¤uþp»À¯ZÖf|èÀ›é€§Ctsè“,¢uº<¾²ÀöëG-’}¶ñ‘Y:ûû_±àí³„±Yà˜_ÐöXÎu¾õð7mÉ@r‘y|oÂÂÅGħ'ÅX„U‚£y"uópÝ’àÚ,€[}~»† àÎFLüÏœ ó[,¾dÀ먋ýu À'ù8ü-ë¬í€ðú+ë´{¤…€Ôå§äOôÅ)€( +èÏUæ`ÉX­øVÖð,Úì“Wæ¯Iÿëî”îG|Öf\ñX³(1,úútAî§Z"ëJq©À7ú\›ðÎIÚ´V®Èu®tXÆÌàyº§u ÀÖ:ФiW©žüÿò/Öve¢IEND®B`‚ \ No newline at end of file diff --git a/examples/web/models/models_obj_loading.html b/examples/web/models/models_obj_loading.html new file mode 100644 index 0000000..34d134f --- /dev/null +++ b/examples/web/models/models_obj_loading.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/models/models_obj_loading.js b/examples/web/models/models_obj_loading.js new file mode 100644 index 0000000..81c7e2d --- /dev/null +++ b/examples/web/models/models_obj_loading.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_obj_loading.data";var REMOTE_PACKAGE_BASE="models_obj_loading.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","models",true,true);Module["FS_createPath"]("/resources","model",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5279296,DYNAMICTOP_PTR=36384;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_obj_loading.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"oc":___lock,"F":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"E":___syscall146,"q":___syscall221,"ra":___syscall5,"D":___syscall54,"Y":___syscall6,"C":___unlock,"B":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"td":_emscripten_get_gamepad_status,"id":_emscripten_get_heap_size,"Zc":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Ec":_emscripten_glActiveTexture,"uc":_emscripten_glAttachShader,"nc":_emscripten_glBeginQueryEXT,"gc":_emscripten_glBindAttribLocation,"dc":_emscripten_glBindBuffer,"_b":_emscripten_glBindFramebuffer,"Tb":_emscripten_glBindRenderbuffer,"Ob":_emscripten_glBindTexture,"Eb":_emscripten_glBindVertexArrayOES,"vb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"fe":_emscripten_glGetShaderInfoLog,"ee":_emscripten_glGetShaderPrecisionFormat,"de":_emscripten_glGetShaderSource,"ce":_emscripten_glGetShaderiv,"be":_emscripten_glGetString,"ae":_emscripten_glGetTexParameterfv,"$d":_emscripten_glGetTexParameteriv,"_d":_emscripten_glGetUniformLocation,"Zd":_emscripten_glGetUniformfv,"Yd":_emscripten_glGetUniformiv,"Xd":_emscripten_glGetVertexAttribPointerv,"Wd":_emscripten_glGetVertexAttribfv,"Vd":_emscripten_glGetVertexAttribiv,"Ud":_emscripten_glHint,"Td":_emscripten_glIsBuffer,"Sd":_emscripten_glIsEnabled,"Rd":_emscripten_glIsFramebuffer,"Qd":_emscripten_glIsProgram,"Pd":_emscripten_glIsQueryEXT,"Od":_emscripten_glIsRenderbuffer,"Nd":_emscripten_glIsShader,"Md":_emscripten_glIsTexture,"Ld":_emscripten_glIsVertexArrayOES,"Kd":_emscripten_glLineWidth,"Jd":_emscripten_glLinkProgram,"Id":_emscripten_glPixelStorei,"Hd":_emscripten_glPolygonOffset,"Gd":_emscripten_glQueryCounterEXT,"Fd":_emscripten_glReadPixels,"Ed":_emscripten_glReleaseShaderCompiler,"Dd":_emscripten_glRenderbufferStorage,"Cd":_emscripten_glSampleCoverage,"Bd":_emscripten_glScissor,"Ad":_emscripten_glShaderBinary,"zd":_emscripten_glShaderSource,"yd":_emscripten_glStencilFunc,"xd":_emscripten_glStencilFuncSeparate,"wd":_emscripten_glStencilMask,"vd":_emscripten_glStencilMaskSeparate,"ud":_emscripten_glStencilOp,"sd":_emscripten_glStencilOpSeparate,"rd":_emscripten_glTexImage2D,"qd":_emscripten_glTexParameterf,"pd":_emscripten_glTexParameterfv,"od":_emscripten_glTexParameteri,"nd":_emscripten_glTexParameteriv,"md":_emscripten_glTexSubImage2D,"ld":_emscripten_glUniform1f,"kd":_emscripten_glUniform1fv,"jd":_emscripten_glUniform1i,"hd":_emscripten_glUniform1iv,"gd":_emscripten_glUniform2f,"fd":_emscripten_glUniform2fv,"ed":_emscripten_glUniform2i,"dd":_emscripten_glUniform2iv,"cd":_emscripten_glUniform3f,"bd":_emscripten_glUniform3fv,"ad":_emscripten_glUniform3i,"$c":_emscripten_glUniform3iv,"_c":_emscripten_glUniform4f,"Yc":_emscripten_glUniform4fv,"Xc":_emscripten_glUniform4i,"Wc":_emscripten_glUniform4iv,"Vc":_emscripten_glUniformMatrix2fv,"Uc":_emscripten_glUniformMatrix3fv,"Tc":_emscripten_glUniformMatrix4fv,"Sc":_emscripten_glUseProgram,"Rc":_emscripten_glValidateProgram,"Qc":_emscripten_glVertexAttrib1f,"Pc":_emscripten_glVertexAttrib1fv,"Oc":_emscripten_glVertexAttrib2f,"Nc":_emscripten_glVertexAttrib2fv,"Mc":_emscripten_glVertexAttrib3f,"Lc":_emscripten_glVertexAttrib3fv,"Kc":_emscripten_glVertexAttrib4f,"Jc":_emscripten_glVertexAttrib4fv,"Ic":_emscripten_glVertexAttribDivisorANGLE,"Hc":_emscripten_glVertexAttribPointer,"Gc":_emscripten_glViewport,"Fc":_emscripten_memcpy_big,"Dc":_emscripten_request_pointerlock,"Cc":_emscripten_resize_heap,"V":_emscripten_run_script,"Bc":_emscripten_sample_gamepad_data,"Ac":_emscripten_set_click_callback_on_thread,"zc":_emscripten_set_fullscreenchange_callback_on_thread,"yc":_emscripten_set_gamepadconnected_callback_on_thread,"xc":_emscripten_set_gamepaddisconnected_callback_on_thread,"wc":_emscripten_set_keypress_callback_on_thread,"vc":_emscripten_set_main_loop,"tc":_emscripten_set_touchcancel_callback_on_thread,"sc":_emscripten_set_touchend_callback_on_thread,"rc":_emscripten_set_touchmove_callback_on_thread,"qc":_emscripten_set_touchstart_callback_on_thread,"pc":_exit,"A":_glActiveTexture,"U":_glAttachShader,"n":_glBindAttribLocation,"c":_glBindBuffer,"j":_glBindTexture,"mc":_glBlendFunc,"h":_glBufferData,"z":_glBufferSubData,"T":_glClear,"S":_glClearColor,"lc":_glClearDepthf,"kc":_glCompileShader,"jc":_glCompressedTexImage2D,"ic":_glCreateProgram,"hc":_glCreateShader,"fc":_glCullFace,"p":_glDeleteBuffers,"y":_glDeleteProgram,"R":_glDeleteShader,"Q":_glDeleteTextures,"ec":_glDepthFunc,"P":_glDetachShader,"O":_glDisable,"i":_glDisableVertexAttribArray,"N":_glDrawArrays,"M":_glDrawElements,"x":_glEnable,"f":_glEnableVertexAttribArray,"cc":_glFrontFace,"g":_glGenBuffers,"bc":_glGenTextures,"w":_glGetAttribLocation,"ac":_glGetFloatv,"$b":_glGetProgramInfoLog,"L":_glGetProgramiv,"Zb":_glGetShaderInfoLog,"K":_glGetShaderiv,"o":_glGetString,"v":_glGetUniformLocation,"Yb":_glLinkProgram,"Xb":_glPixelStorei,"Wb":_glReadPixels,"Vb":_glShaderSource,"Ub":_glTexImage2D,"m":_glTexParameteri,"J":_glUniform1i,"u":_glUniform4f,"t":_glUniformMatrix4fv,"l":_glUseProgram,"Sb":_glVertexAttrib2f,"Rb":_glVertexAttrib3f,"s":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Qb":_glViewport,"Pb":_glfwCreateWindow,"Nb":_glfwDefaultWindowHints,"Mb":_glfwDestroyWindow,"Lb":_glfwGetCursorPos,"r":_glfwGetTime,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Gb":_glfwSetCursorPosCallback,"Fb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"I":_glfwTerminate,"k":_glfwWindowHint,"H":_llvm_stackrestore,"G":_llvm_stacksave,"ub":_nanosleep,"tb":_time,"sb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["me"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["we"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_obj_loading.wasm b/examples/web/models/models_obj_loading.wasm new file mode 100644 index 0000000..159c93e Binary files /dev/null and b/examples/web/models/models_obj_loading.wasm differ diff --git a/examples/web/models/models_obj_viewer.c b/examples/web/models/models_obj_viewer.c index 44c9947..8254294 100644 --- a/examples/web/models/models_obj_viewer.c +++ b/examples/web/models/models_obj_viewer.c @@ -44,7 +44,7 @@ void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- // Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -66,7 +66,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { diff --git a/examples/web/models/models_obj_viewer.data b/examples/web/models/models_obj_viewer.data new file mode 100644 index 0000000..b7eb703 --- /dev/null +++ b/examples/web/models/models_obj_viewer.data @@ -0,0 +1,3938 @@ +# (c) 2018 Medieval Assets Pack by Alberto Cano +# Licensed as Creative Commons Attribution-NonCommercial 4.0 + +# +# object turret +# + +v 0.0000 13.3010 3.5973 +v 0.0000 12.1596 2.3386 +v 2.5639 12.1596 2.3386 +v 3.4913 13.3010 3.5973 +v 3.5203 14.0462 3.0738 +v 3.9444 14.0450 3.1421 +v 3.9444 14.0369 -0.0000 +v 3.4351 14.0369 -0.0000 +v 3.4352 14.0462 2.9719 +v 3.3643 13.3303 2.9127 +v 0.0000 13.3303 2.9127 +v 0.0000 13.3010 2.9740 +v 3.4352 13.3010 2.9740 +v 0.0000 14.0462 2.9719 +v 3.9444 13.2918 -0.0000 +v 3.9444 13.2998 3.1441 +v 3.4913 14.0462 3.5952 +v 3.3643 13.3303 -0.0000 +v 0.0000 13.3303 -0.0000 +v 0.0000 14.0462 3.5952 +v 2.5639 12.1504 -0.0000 +v 3.4352 13.2918 -0.0000 +v 3.5237 14.9316 3.0740 +v 3.9478 14.9305 3.1422 +v 3.4947 14.9316 3.5953 +v 3.5271 16.4764 1.4274 +v 3.9512 16.4752 1.4274 +v 3.9512 15.9080 2.0774 +v 3.5271 15.9092 2.0092 +v 1.8327 16.4815 3.5953 +v 1.8617 16.4815 3.0742 +v 2.5117 15.9086 3.0742 +v 2.4725 15.9086 3.5953 +v 3.9512 16.4757 3.1424 +v 3.4981 16.4769 3.5955 +v 3.5271 16.4769 3.0742 +v 2.5639 12.1596 -2.3386 +v 0.0000 12.1596 -2.3386 +v 0.0000 13.3010 -3.5973 +v 3.4913 13.3010 -3.5973 +v 3.5203 14.0462 -3.0738 +v 3.4351 14.0462 -2.9720 +v 3.9444 14.0450 -3.1421 +v 0.0000 13.3010 -2.9740 +v 0.0000 13.3303 -2.9127 +v 3.3643 13.3303 -2.9127 +v 3.4352 13.3010 -2.9740 +v 0.0000 14.0462 -2.9719 +v 3.9444 13.2998 -3.1441 +v 3.4913 14.0462 -3.5952 +v 0.0000 14.0462 -3.5952 +v 3.9478 14.9305 -3.1422 +v 3.5237 14.9316 -3.0740 +v 3.4947 14.9316 -3.5953 +v 3.9512 15.9080 -2.0774 +v 3.9512 16.4752 -1.4274 +v 3.5271 16.4764 -1.4274 +v 3.5271 15.9092 -2.0092 +v 2.5117 15.9086 -3.0742 +v 1.8617 16.4815 -3.0742 +v 1.8327 16.4815 -3.5954 +v 2.4725 15.9086 -3.5953 +v 3.4981 16.4769 -3.5955 +v 3.9512 16.4757 -3.1424 +v 3.5271 16.4769 -3.0742 +v -2.5639 12.1596 2.3386 +v -3.4913 13.3010 3.5973 +v -3.5203 14.0462 3.0738 +v -3.4351 14.0462 2.9720 +v -3.4351 14.0369 0.0000 +v -3.9444 14.0369 0.0000 +v -3.9444 14.0450 3.1421 +v -3.3643 13.3303 2.9127 +v -3.4351 13.3010 2.9740 +v -3.9444 13.2918 0.0000 +v -3.9444 13.2998 3.1441 +v -3.4913 14.0462 3.5952 +v -3.3643 13.3303 0.0000 +v -2.5639 12.1504 0.0000 +v -3.4351 13.2918 0.0000 +v -3.9478 14.9305 3.1422 +v -3.5237 14.9316 3.0740 +v -3.4947 14.9316 3.5954 +v -3.9512 15.9080 2.0774 +v -3.9512 16.4752 1.4274 +v -3.5271 16.4764 1.4274 +v -3.5271 15.9092 2.0092 +v -2.5117 15.9086 3.0742 +v -1.8617 16.4815 3.0742 +v -1.8327 16.4815 3.5954 +v -2.4725 15.9086 3.5953 +v -3.4981 16.4769 3.5955 +v -3.9512 16.4757 3.1424 +v -3.5271 16.4769 3.0742 +v -2.5639 12.1596 -2.3386 +v -3.4913 13.3010 -3.5972 +v -3.5203 14.0462 -3.0738 +v -3.9444 14.0450 -3.1421 +v -3.4351 14.0462 -2.9719 +v -3.3643 13.3303 -2.9127 +v -3.4351 13.3010 -2.9740 +v -3.9444 13.2998 -3.1441 +v -3.4913 14.0462 -3.5952 +v -3.5237 14.9316 -3.0740 +v -3.9478 14.9305 -3.1422 +v -3.4947 14.9316 -3.5953 +v -3.5271 16.4764 -1.4274 +v -3.9512 16.4752 -1.4274 +v -3.9512 15.9080 -2.0774 +v -3.5271 15.9092 -2.0092 +v -1.8327 16.4815 -3.5953 +v -1.8617 16.4815 -3.0742 +v -2.5117 15.9086 -3.0742 +v -2.4725 15.9086 -3.5953 +v -3.9512 16.4757 -3.1424 +v -3.4981 16.4769 -3.5955 +v -3.5271 16.4769 -3.0742 +v 0.1550 14.0277 -3.1544 +v 0.1550 14.0277 -3.5335 +v 0.1550 16.9018 -3.5335 +v 0.1550 16.9018 -3.1544 +v -0.5341 14.0277 -3.5335 +v -0.5341 16.9018 -3.5335 +v -0.5341 14.0277 -3.1544 +v -0.5341 16.9018 -3.1544 +v -3.5170 14.0277 -0.3456 +v -3.8961 14.0277 -0.3456 +v -3.8961 16.9018 -0.3456 +v -3.5170 16.9018 -0.3456 +v -3.8961 14.0277 0.3435 +v -3.8961 16.9018 0.3435 +v -3.5170 14.0277 0.3435 +v -3.5170 16.9018 0.3435 +v -0.3446 14.0277 3.1662 +v -0.3446 14.0277 3.5453 +v -0.3446 16.9018 3.5453 +v -0.3446 16.9018 3.1662 +v 0.3445 14.0277 3.5453 +v 0.3445 16.9018 3.5453 +v 0.3445 14.0277 3.1662 +v 0.3445 16.9018 3.1662 +v 3.5160 14.0277 0.3435 +v 3.8951 14.0277 0.3435 +v 3.8951 16.9018 0.3435 +v 3.5160 16.9018 0.3435 +v 3.8951 14.0277 -0.3456 +v 3.8951 16.9018 -0.3456 +v 3.5160 14.0277 -0.3456 +v 3.5160 16.9018 -0.3456 +v 0.0000 8.6187 2.3766 +v 0.4715 8.6467 2.3766 +v 0.4598 9.7167 2.3896 +v -0.0117 10.0591 2.3896 +v 0.8403 8.5183 2.4160 +v 0.8403 8.5183 2.3077 +v 0.8403 8.6724 2.3077 +v 0.8403 8.6724 2.4160 +v 0.7068 9.8138 2.4290 +v 0.7068 9.8138 2.3207 +v -0.0117 10.3117 2.3207 +v -0.0117 10.3117 2.4290 +v -0.8403 8.6724 2.4160 +v -0.8403 8.6724 2.3077 +v -0.8403 8.5183 2.3077 +v -0.8403 8.5183 2.4160 +v -0.7186 8.5183 2.4160 +v -0.7186 8.5183 2.3077 +v -0.0000 8.4646 2.3077 +v -0.0000 8.4646 2.4160 +v 0.7185 8.5183 2.5347 +v 0.7185 8.6724 2.5347 +v 0.4715 8.6467 2.5347 +v 0.4598 9.7167 2.4290 +v -0.0117 10.0591 2.4290 +v -0.7186 8.6724 2.5347 +v -0.7186 8.5183 2.5347 +v -0.4715 8.6567 2.5347 +v -0.0000 8.4646 2.5347 +v -0.0000 8.6187 2.5347 +v -0.4833 9.7167 2.3896 +v -0.4715 8.6567 2.3766 +v -0.7303 9.8138 2.3207 +v -0.7302 9.8138 2.4290 +v 0.7185 8.5183 2.3077 +v 0.7185 8.5183 2.4160 +v -0.4832 9.7167 2.4290 +v 0.4715 8.6467 2.4160 +v -0.4716 8.6567 2.4160 +v -0.0000 8.6187 2.4160 +v -0.7186 8.6724 2.4160 +v -0.7186 8.6724 2.3077 +v 0.7185 8.6724 2.4160 +v 0.7185 8.6724 2.3077 +v 0.8403 8.5183 2.5347 +v 0.8403 8.6724 2.5347 +v -0.8403 8.6724 2.5347 +v -0.8403 8.5183 2.5347 +v 2.6080 8.6187 -0.0010 +v 2.6080 8.6467 -0.4725 +v 2.6210 9.7167 -0.4608 +v 2.6210 10.0591 0.0107 +v 2.6474 8.5183 -0.8413 +v 2.5392 8.5183 -0.8413 +v 2.5392 8.6724 -0.8413 +v 2.6474 8.6724 -0.8413 +v 2.6604 9.8138 -0.7079 +v 2.5522 9.8138 -0.7078 +v 2.5522 10.3117 0.0107 +v 2.6604 10.3117 0.0107 +v 2.6474 8.6724 0.8393 +v 2.5392 8.6724 0.8393 +v 2.5392 8.5183 0.8393 +v 2.6474 8.5183 0.8393 +v 2.6474 8.5183 0.7175 +v 2.5392 8.5183 0.7175 +v 2.5392 8.4646 -0.0010 +v 2.6474 8.4646 -0.0010 +v 2.7661 8.5183 -0.7195 +v 2.7661 8.6724 -0.7195 +v 2.7661 8.6467 -0.4725 +v 2.6604 9.7167 -0.4609 +v 2.6604 10.0591 0.0107 +v 2.7661 8.6724 0.7175 +v 2.7661 8.5183 0.7175 +v 2.7661 8.6567 0.4705 +v 2.7661 8.4646 -0.0010 +v 2.7661 8.6187 -0.0010 +v 2.6210 9.7167 0.4822 +v 2.6080 8.6567 0.4705 +v 2.5522 9.8138 0.7292 +v 2.6604 9.8138 0.7292 +v 2.5392 8.5183 -0.7196 +v 2.6474 8.5183 -0.7195 +v 2.6604 9.7167 0.4822 +v 2.6474 8.6467 -0.4725 +v 2.6474 8.6567 0.4705 +v 2.6474 8.6187 -0.0010 +v 2.6474 8.6724 0.7175 +v 2.5392 8.6724 0.7175 +v 2.6474 8.6724 -0.7195 +v 2.5392 8.6724 -0.7196 +v 2.7661 8.5183 -0.8413 +v 2.7661 8.6724 -0.8413 +v 2.7661 8.6724 0.8393 +v 2.7661 8.5183 0.8393 +v -2.6159 8.6187 -0.0010 +v -2.6159 8.6467 0.4705 +v -2.6289 9.7167 0.4588 +v -2.6289 10.0591 -0.0127 +v -2.6553 8.5183 0.8393 +v -2.5470 8.5183 0.8393 +v -2.5470 8.6724 0.8393 +v -2.6553 8.6724 0.8393 +v -2.6683 9.8138 0.7058 +v -2.5600 9.8138 0.7058 +v -2.5600 10.3117 -0.0127 +v -2.6683 10.3117 -0.0127 +v -2.6553 8.6724 -0.8413 +v -2.5470 8.6724 -0.8413 +v -2.5470 8.5183 -0.8413 +v -2.6553 8.5183 -0.8413 +v -2.6553 8.5183 -0.7195 +v -2.5470 8.5183 -0.7195 +v -2.5470 8.4646 -0.0010 +v -2.6553 8.4646 -0.0010 +v -2.7740 8.5183 0.7175 +v -2.7740 8.6724 0.7175 +v -2.7740 8.6467 0.4705 +v -2.6683 9.7167 0.4589 +v -2.6683 10.0591 -0.0127 +v -2.7740 8.6724 -0.7195 +v -2.7740 8.5183 -0.7195 +v -2.7740 8.6567 -0.4725 +v -2.7740 8.4646 -0.0010 +v -2.7740 8.6187 -0.0010 +v -2.6289 9.7167 -0.4843 +v -2.6159 8.6567 -0.4725 +v -2.5600 9.8138 -0.7312 +v -2.6683 9.8138 -0.7312 +v -2.5470 8.5183 0.7175 +v -2.6553 8.5183 0.7175 +v -2.6683 9.7167 -0.4842 +v -2.6553 8.6467 0.4705 +v -2.6553 8.6567 -0.4725 +v -2.6553 8.6187 -0.0010 +v -2.6553 8.6724 -0.7195 +v -2.5470 8.6724 -0.7195 +v -2.6553 8.6724 0.7175 +v -2.5470 8.6724 0.7175 +v -2.7740 8.5183 0.8393 +v -2.7740 8.6724 0.8393 +v -2.7740 8.6724 -0.8413 +v -2.7740 8.5183 -0.8413 +v -2.5639 0.0000 -2.3386 +v -2.5639 0.0000 2.3365 +v -2.5639 12.1411 2.3365 +v 2.5639 -0.0000 2.3365 +v 2.5639 12.1411 2.3365 +v 2.5639 -0.0000 -2.3386 +v -3.3222 12.8680 -0.0010 +v -3.3222 12.8680 -2.9994 +v -3.3222 11.9932 -2.9994 +v -3.3222 11.8321 -0.0010 +v -0.0000 12.8680 2.9974 +v -3.3222 12.8680 2.9974 +v -3.3222 11.9932 2.9974 +v -0.0000 11.8320 2.9974 +v 3.3221 12.8680 -0.0010 +v 3.3221 12.8680 2.9974 +v 3.3221 11.9932 2.9974 +v 3.3221 11.8320 -0.0010 +v -0.0000 12.8680 -2.9994 +v 3.3221 12.8680 -2.9994 +v 3.3221 11.9932 -2.9994 +v -0.0000 11.8320 -2.9994 +v -2.5639 11.9932 -2.3386 +v -0.0000 11.8320 -2.3386 +v 2.5639 11.9932 -2.3386 +v 2.5639 11.8321 -0.0010 +v 2.5639 11.9932 2.3365 +v -0.0000 11.8321 2.3365 +v -2.5639 11.9932 2.3365 +v -2.5639 11.8321 -0.0010 +v -2.5639 12.8680 -2.3386 +v -2.5639 12.8680 -0.0010 +v -2.5639 12.8680 2.3365 +v -0.0000 12.8680 2.3365 +v 2.5639 12.8680 2.3365 +v 2.5639 12.8680 -0.0010 +v 2.5639 12.8680 -2.3386 +v -0.0000 12.8680 -2.3386 +v -3.3222 6.6605 -0.0010 +v -3.3222 6.6605 -2.9994 +v -3.3222 5.7858 -2.9994 +v -3.3222 5.6246 -0.0010 +v -0.0000 6.6605 2.9974 +v -3.3222 6.6605 2.9974 +v -3.3222 5.7858 2.9974 +v -0.0000 5.6246 2.9974 +v 3.3221 6.6605 -0.0010 +v 3.3221 6.6605 2.9974 +v 3.3221 5.7858 2.9974 +v 3.3221 5.6246 -0.0010 +v -0.0000 6.6605 -2.9994 +v 3.3221 6.6605 -2.9994 +v 3.3221 5.7858 -2.9994 +v -0.0000 5.6246 -2.9994 +v -2.5639 5.7858 -2.3386 +v -0.0000 5.6246 -2.3386 +v 2.5639 5.7858 -2.3386 +v 2.5639 5.6246 -0.0010 +v 2.5639 5.7858 2.3365 +v -0.0000 5.6246 2.3365 +v -2.5639 5.7858 2.3365 +v -2.5639 5.6246 -0.0010 +v -2.5639 6.6605 -2.3386 +v -2.5639 6.6605 -0.0010 +v -2.5639 6.6605 2.3365 +v -0.0000 6.6605 2.3365 +v 2.5639 6.6605 2.3365 +v 2.5639 6.6605 -0.0010 +v 2.5639 6.6605 -2.3386 +v -0.0000 6.6605 -2.3386 +v -2.6103 9.3882 2.4561 +v -2.6767 9.3882 1.9558 +v -2.9138 6.4859 1.8341 +v -2.9138 6.4859 2.7406 +v -2.9138 12.2904 1.8341 +v -2.9138 12.2904 2.7406 +v -1.9967 6.4859 2.7406 +v -2.0923 9.3882 2.4561 +v -1.9967 11.6821 2.7406 +v -1.9967 6.4859 1.8341 +v -2.1587 9.3882 1.9558 +v -1.9967 11.6821 1.8341 +v -2.6103 9.4353 -2.4582 +v -2.9138 6.5331 -2.7426 +v -2.9138 6.5331 -1.8362 +v -2.6767 9.4353 -1.9578 +v -2.9138 12.3375 -1.8362 +v -2.9138 12.3375 -2.7426 +v -2.0923 9.4353 -2.4581 +v -1.9967 6.5331 -2.7426 +v -1.9967 11.7293 -2.7426 +v -2.1587 9.4353 -1.9578 +v -1.9967 6.5331 -1.8362 +v -1.9967 11.7293 -1.8362 +v -2.6103 2.9022 -2.4582 +v -2.9138 0.0000 -2.7426 +v -2.9138 0.0000 -1.8362 +v -2.6767 2.9022 -1.9578 +v -2.9138 5.8044 -1.8362 +v -2.9138 5.8044 -2.7426 +v -2.0923 2.9022 -2.4581 +v -1.9967 0.0000 -2.7426 +v -1.9967 6.4231 -2.7426 +v -2.1587 2.9022 -1.9578 +v -1.9967 0.0000 -1.8362 +v -1.9967 6.4231 -1.8362 +v 2.6103 9.4517 2.4561 +v 2.9138 6.5495 2.7406 +v 2.9138 6.5495 1.8341 +v 2.6767 9.4517 1.9558 +v 2.9138 12.3539 1.8341 +v 2.9138 12.3539 2.7406 +v 2.0923 9.4517 2.4561 +v 1.9967 6.5495 2.7406 +v 1.9967 11.7456 2.7406 +v 2.1587 9.4517 1.9558 +v 1.9967 6.5495 1.8341 +v 1.9967 11.7456 1.8341 +v 2.6103 2.9022 -2.4581 +v 2.6767 2.9022 -1.9578 +v 2.9138 -0.0000 -1.8362 +v 2.9138 -0.0000 -2.7426 +v 2.9138 5.8044 -1.8362 +v 2.9138 5.8044 -2.7426 +v 1.9967 -0.0000 -2.7426 +v 2.0923 2.9022 -2.4581 +v 1.9967 6.4231 -2.7426 +v 1.9967 -0.0000 -1.8362 +v 2.1587 2.9022 -1.9578 +v 1.9967 6.4231 -1.8362 +v 2.6103 9.4353 -2.4582 +v 2.6767 9.4353 -1.9578 +v 2.9138 6.5331 -1.8362 +v 2.9138 6.5331 -2.7427 +v 2.9138 12.3375 -1.8362 +v 2.9138 12.3375 -2.7427 +v 1.9967 6.5331 -2.7427 +v 2.0923 9.4353 -2.4581 +v 1.9967 11.7293 -2.7427 +v 1.9967 6.5331 -1.8362 +v 2.1587 9.4353 -1.9578 +v 1.9967 11.7293 -1.8362 +v 2.6103 2.9022 2.4561 +v 2.9138 -0.0000 2.7406 +v 2.9138 -0.0000 1.8341 +v 2.6767 2.9022 1.9558 +v 2.9138 5.8044 1.8341 +v 2.9138 5.8044 2.7406 +v 2.0923 2.9022 2.4561 +v 1.9967 -0.0000 2.7406 +v 1.9967 6.4231 2.7406 +v 2.1587 2.9022 1.9558 +v 1.9967 -0.0000 1.8341 +v 1.9967 6.4231 1.8341 +v -2.6103 2.9022 2.4561 +v -2.6767 2.9022 1.9558 +v -2.9138 0.0000 1.8341 +v -2.9138 0.0000 2.7406 +v -2.9138 5.8044 1.8341 +v -2.9138 5.8044 2.7406 +v -1.9967 0.0000 2.7406 +v -2.0923 2.9022 2.4561 +v -1.9967 6.4231 2.7406 +v -1.9967 0.0000 1.8341 +v -2.1587 2.9022 1.9558 +v -1.9967 6.4231 1.8341 +v -1.5453 5.6703 -3.5469 +v -1.5453 7.5835 -3.4309 +v -0.7727 7.5835 -3.4309 +v -0.7727 4.7854 -3.5469 +v -1.5453 9.4968 -3.2987 +v -0.7727 9.4968 -3.2987 +v -1.5453 11.4101 -3.3804 +v -0.7727 11.4101 -3.3804 +v -1.5453 13.3234 -3.5469 +v -0.7727 13.3234 -3.5469 +v -0.0000 7.5835 -3.4309 +v -0.0000 4.2830 -3.5469 +v -0.0000 9.4968 -3.2987 +v -0.0000 11.4101 -3.3804 +v -0.0000 13.3234 -3.5469 +v 0.7726 7.5835 -3.4309 +v 0.7726 4.7854 -3.5469 +v 0.7726 9.4968 -3.2987 +v 0.7726 11.4101 -3.3804 +v 0.7726 13.3234 -3.5469 +v 1.5453 7.5835 -3.4309 +v 1.5453 5.6702 -3.5469 +v 1.5453 9.4968 -3.2987 +v 1.5453 11.4101 -3.3804 +v 1.5453 13.3234 -3.5469 +v 0.0000 23.5750 -0.0000 +v -4.1897 16.4768 -3.9339 +v -4.1897 16.4768 3.9339 +v 4.1897 16.4768 3.9339 +v 4.1897 16.4768 -3.9339 +v -1.2971 3.7738 -2.1572 +v -1.2971 3.7738 -2.6666 +v -1.7173 3.6544 -2.6666 +v -1.7173 3.6544 -2.1572 +v -1.2971 -0.0000 -2.6666 +v -1.2971 3.3171 -2.6666 +v -1.2971 3.3171 -2.4156 +v -1.2971 -0.0000 -2.4156 +v -1.7173 -0.0000 -2.6666 +v -1.7173 3.3171 -2.6666 +v -1.7173 -0.0000 -2.1572 +v -1.7173 3.3171 -2.1572 +v 1.2970 3.7738 -2.6666 +v 1.2970 3.7738 -2.1572 +v 1.7173 3.6544 -2.1572 +v 1.7173 3.6544 -2.6666 +v 1.2970 -0.0000 -2.4156 +v 1.2970 3.3171 -2.4156 +v 1.2970 3.3171 -2.6666 +v 1.2970 -0.0000 -2.6666 +v 1.7173 -0.0000 -2.6666 +v 1.7173 3.3171 -2.6666 +v 1.7173 3.3171 -2.1572 +v 1.7173 -0.0000 -2.1572 +v -0.0000 4.3176 -2.6666 +v -0.0000 4.3176 -2.1572 +v -0.0000 3.7437 -2.6666 +v -0.0000 3.7437 -2.4156 +v -0.0000 -0.0000 -2.4156 +# 518 vertices + +vn 0.0000 -0.7408 0.6718 +vn 0.0016 1.0000 -0.0028 +vn -0.0000 0.9024 0.4309 +vn 0.0000 -0.0028 -1.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.4189 -0.8046 0.4210 +vn 0.7071 0.0020 0.7071 +vn -0.0000 1.0000 -0.0000 +vn 0.0000 0.0028 1.0000 +vn 0.6366 -0.7712 0.0024 +vn 0.4322 0.9018 -0.0014 +vn -1.0000 -0.0000 0.0000 +vn 0.1589 -0.0004 -0.9873 +vn -0.9985 0.0039 -0.0555 +vn 0.7071 -0.0029 0.7071 +vn 0.0524 -0.7346 -0.6765 +vn -0.6635 -0.7469 -0.0434 +vn 0.7071 -0.0016 0.7071 +vn -1.0000 0.0014 -0.0007 +vn 1.0000 -0.0014 0.0007 +vn 0.1062 -0.7327 -0.6723 +vn -0.0001 -0.0001 1.0000 +vn -0.0000 0.0001 -1.0000 +vn -0.6920 -0.7204 -0.0452 +vn 0.0000 -0.7408 -0.6718 +vn 0.0016 1.0000 0.0028 +vn -0.0000 0.9024 -0.4309 +vn 0.0000 -0.0028 1.0000 +vn 0.4189 -0.8046 -0.4210 +vn 0.7071 0.0020 -0.7071 +vn -0.0000 1.0000 0.0000 +vn -0.0000 0.0028 -1.0000 +vn 0.6366 -0.7712 -0.0024 +vn 0.4322 0.9018 0.0014 +vn 0.1589 -0.0004 0.9873 +vn -0.9985 0.0039 0.0555 +vn 0.7071 -0.0029 -0.7071 +vn 0.0524 -0.7346 0.6765 +vn -0.6635 -0.7469 0.0434 +vn 0.7071 -0.0016 -0.7071 +vn -1.0000 0.0014 0.0007 +vn 1.0000 -0.0014 -0.0007 +vn 0.1062 -0.7327 0.6723 +vn -0.0001 -0.0001 -1.0000 +vn -0.0000 0.0001 1.0000 +vn -0.6920 -0.7204 0.0452 +vn -0.0000 -0.7408 0.6718 +vn -0.0016 1.0000 -0.0028 +vn 0.0000 0.9024 0.4309 +vn -0.0000 -0.0028 -1.0000 +vn -1.0000 0.0000 0.0000 +vn -0.4189 -0.8046 0.4210 +vn -0.7071 0.0020 0.7071 +vn 0.0000 1.0000 -0.0000 +vn -0.6366 -0.7712 0.0024 +vn -0.4322 0.9018 -0.0014 +vn -0.4321 0.9018 -0.0014 +vn 1.0000 -0.0000 -0.0000 +vn -0.1589 -0.0004 -0.9873 +vn 0.9985 0.0039 -0.0555 +vn -0.7071 -0.0029 0.7071 +vn -0.0524 -0.7346 -0.6765 +vn 0.6635 -0.7469 -0.0434 +vn -0.7071 -0.0016 0.7071 +vn 1.0000 0.0014 -0.0007 +vn -1.0000 -0.0014 0.0007 +vn -0.1062 -0.7327 -0.6723 +vn 0.0001 -0.0001 1.0000 +vn 0.0000 0.0001 -1.0000 +vn 0.6920 -0.7204 -0.0452 +vn -0.0000 -0.7408 -0.6718 +vn -0.0016 1.0000 0.0028 +vn 0.0000 0.9024 -0.4309 +vn -0.0000 -0.0028 1.0000 +vn -0.4189 -0.8046 -0.4210 +vn -0.7071 0.0020 -0.7071 +vn 0.0000 1.0000 0.0000 +vn -0.6366 -0.7712 -0.0024 +vn -0.4321 0.9018 0.0014 +vn -0.4322 0.9018 0.0014 +vn -0.1589 -0.0004 0.9873 +vn 0.9985 0.0039 0.0555 +vn -0.7071 -0.0029 -0.7071 +vn -0.0524 -0.7346 0.6765 +vn 0.6635 -0.7469 0.0434 +vn -0.7071 -0.0016 -0.7071 +vn 1.0000 0.0014 0.0007 +vn -1.0000 -0.0014 -0.0007 +vn -0.1062 -0.7327 0.6723 +vn 0.0001 -0.0001 -1.0000 +vn 0.0000 0.0001 1.0000 +vn 0.6920 -0.7204 0.0452 +vn -0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -0.0035 -0.0104 0.9999 +vn 1.0000 -0.0000 -0.0002 +vn 0.5696 0.8219 -0.0001 +vn -0.0745 -0.9972 0.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 0.0000 1.0000 +vn 0.0033 -0.0104 0.9999 +vn -0.5696 0.8219 0.0001 +vn 0.0745 -0.9972 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -0.9999 -0.0109 0.0008 +vn -0.5875 -0.8092 0.0009 +vn 0.5875 -0.8092 -0.0008 +vn 0.9999 0.0111 -0.0004 +vn 0.0803 0.9968 0.0001 +vn -0.0593 0.9982 -0.0000 +vn -0.0027 -0.0118 0.9999 +vn -0.9999 -0.0102 0.0001 +vn 0.9999 0.0103 -0.0002 +vn 0.0029 -0.0117 0.9999 +vn 1.0000 -0.0000 0.0001 +vn -0.1034 0.9946 0.0000 +vn -0.0593 0.9982 0.0000 +vn 0.0803 0.9968 -0.0000 +vn 0.0634 0.9980 -0.0000 +vn -1.0000 0.0000 0.0001 +vn -0.0000 -1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.0001 0.0000 1.0000 +vn 0.9999 -0.0104 0.0035 +vn -0.0001 0.0000 -1.0000 +vn -0.0001 0.8219 -0.5696 +vn -0.0000 -0.9972 0.0745 +vn 1.0000 -0.0000 0.0000 +vn 0.9999 -0.0104 -0.0034 +vn 0.0001 0.8219 0.5696 +vn 0.0000 -0.9972 -0.0745 +vn 0.0008 -0.0109 0.9999 +vn 0.0008 -0.8092 0.5875 +vn -0.0008 -0.8092 -0.5875 +vn -0.0004 0.0111 -0.9999 +vn 0.0000 0.9968 -0.0803 +vn -0.0000 0.9982 0.0593 +vn 0.9999 -0.0118 0.0027 +vn 0.0001 -0.0102 0.9999 +vn -0.0002 0.0103 -0.9999 +vn 0.9999 -0.0117 -0.0029 +vn 0.0001 -0.0000 -1.0000 +vn 0.0000 0.9946 0.1034 +vn 0.0000 0.9982 0.0593 +vn 0.0000 0.9968 -0.0804 +vn 0.0000 0.9980 -0.0634 +vn 0.0001 -0.0000 1.0000 +vn -0.0000 -0.9972 -0.0745 +vn -0.0000 -1.0000 -0.0000 +vn -0.9999 -0.0104 -0.0035 +vn 0.0002 -0.0000 1.0000 +vn -1.0000 0.0000 -0.0000 +vn -0.9999 -0.0104 0.0033 +vn -0.0008 -0.0109 -0.9999 +vn -0.0009 -0.8092 -0.5875 +vn 0.0007 -0.8092 0.5875 +vn 0.0004 0.0111 0.9999 +vn -0.0001 0.9968 0.0803 +vn 0.0000 0.9982 -0.0593 +vn -0.9999 -0.0118 -0.0027 +vn -0.0001 -0.0102 -0.9999 +vn 0.0002 0.0103 0.9999 +vn -0.9999 -0.0117 0.0029 +vn -0.0001 -0.0000 1.0000 +vn 0.0000 0.9946 -0.1034 +vn 0.0000 0.9968 0.0803 +vn 0.0000 0.9980 0.0634 +vn -1.0000 0.0000 -0.0001 +vn 0.0000 -0.0000 -1.0000 +vn -0.0547 -0.9980 0.0314 +vn -0.0263 -0.9978 -0.0603 +vn 0.0547 -0.9980 -0.0314 +vn 0.0263 -0.9978 0.0603 +vn 0.0547 -0.9980 0.0314 +vn -0.0263 -0.9978 0.0603 +vn -0.0547 -0.9980 -0.0314 +vn 0.0263 -0.9978 -0.0603 +vn -0.9945 0.0939 0.0469 +vn -0.9945 -0.0939 0.0469 +vn 0.0000 0.0976 0.9952 +vn -0.0469 -0.1106 0.9928 +vn 0.9980 0.0430 -0.0471 +vn 0.9974 -0.0543 -0.0471 +vn -0.0000 0.0419 -0.9991 +vn -0.0199 -0.0471 -0.9987 +vn -0.9945 0.0939 -0.0469 +vn -0.9945 -0.0939 -0.0469 +vn 0.0000 0.0976 -0.9952 +vn -0.0469 -0.1106 -0.9928 +vn 0.9980 0.0430 0.0471 +vn 0.9974 -0.0543 0.0471 +vn 0.0000 0.0419 0.9991 +vn -0.0199 -0.0471 0.9987 +vn 0.0375 -0.0870 -0.9955 +vn 0.9983 -0.0354 0.0471 +vn 0.0162 -0.0377 0.9992 +vn 0.9945 0.0939 0.0469 +vn 0.9945 -0.0939 0.0469 +vn -0.0000 0.0976 0.9952 +vn 0.0469 -0.1106 0.9928 +vn -0.9980 0.0430 -0.0471 +vn -0.9974 -0.0543 -0.0471 +vn 0.0199 -0.0471 -0.9987 +vn 0.9945 0.0939 -0.0469 +vn 0.9945 -0.0939 -0.0469 +vn -0.0000 0.0976 -0.9952 +vn -0.0375 -0.0870 -0.9955 +vn -0.9980 0.0430 0.0471 +vn -0.9983 -0.0354 0.0471 +vn -0.0162 -0.0377 0.9992 +vn 0.0469 -0.1106 -0.9928 +vn -0.9974 -0.0543 0.0471 +vn 0.0199 -0.0471 0.9987 +vn -0.0375 -0.0870 0.9955 +vn -0.9983 -0.0354 -0.0471 +vn -0.0162 -0.0377 -0.9992 +vn 0.0375 -0.0870 0.9955 +vn 0.9983 -0.0354 -0.0471 +vn 0.0162 -0.0377 -0.9992 +vn 0.0281 0.0492 -0.9984 +vn 0.0141 0.0591 -0.9982 +vn 0.0101 0.0563 -0.9984 +vn 0.0163 0.0408 -0.9990 +vn -0.0000 0.0132 -0.9999 +vn -0.0000 -0.0647 -0.9979 +vn -0.0000 -0.0867 -0.9962 +vn -0.0000 0.0535 -0.9986 +vn -0.0000 0.0380 -0.9993 +vn -0.0101 0.0563 -0.9984 +vn -0.0163 0.0408 -0.9990 +vn -0.0141 0.0591 -0.9982 +vn -0.0281 0.0492 -0.9984 +vn -0.8612 0.5083 0.0000 +vn 0.0000 0.4847 0.8747 +vn 0.8612 0.5083 -0.0000 +vn -0.0000 0.4847 -0.8747 +vn -0.2731 0.9620 0.0000 +vn 0.2731 0.9620 0.0000 +vn 0.3867 0.9222 0.0000 +vn -0.0000 -0.0000 -1.0000 +vn 0.3124 -0.9499 -0.0000 +vn -0.3867 0.9222 0.0000 +vn -0.3124 -0.9499 0.0000 +# 244 vertex normals + +vt 0.4672 0.7287 0.0000 +vt 0.4672 0.6812 0.0000 +vt 0.5381 0.6812 0.0000 +vt 0.5637 0.7287 0.0000 +vt 0.4511 0.6743 0.0000 +vt 0.4498 0.6669 0.0000 +vt 0.5101 0.6669 0.0000 +vt 0.5101 0.6758 0.0000 +vt 0.4531 0.6758 0.0000 +vt 0.6996 0.8663 0.0000 +vt 0.6083 0.8663 0.0000 +vt 0.6083 0.8881 0.0000 +vt 0.6996 0.8881 0.0000 +vt 0.6083 0.9203 0.0000 +vt 0.6996 0.9203 0.0000 +vt 0.6348 0.6259 0.0000 +vt 0.6348 0.6557 0.0000 +vt 0.5033 0.6557 0.0000 +vt 0.5033 0.6259 0.0000 +vt 0.4860 0.7374 0.0000 +vt 0.4587 0.8045 0.0000 +vt 0.4433 0.8046 0.0000 +vt 0.7663 0.6259 0.0000 +vt 0.7905 0.6258 0.0000 +vt 0.7905 0.6557 0.0000 +vt 0.7664 0.6557 0.0000 +vt 0.5578 0.5104 0.0000 +vt 0.6319 0.5104 0.0000 +vt 0.6319 0.6024 0.0000 +vt 0.5578 0.6024 0.0000 +vt 0.4411 0.6748 0.0000 +vt 0.4531 0.7357 0.0000 +vt 0.4411 0.7357 0.0000 +vt 0.5654 0.8042 0.0000 +vt 0.5654 0.7371 0.0000 +vt 0.5169 0.8663 0.0000 +vt 0.5169 0.8881 0.0000 +vt 0.5169 0.9203 0.0000 +vt 0.7344 0.2540 0.0000 +vt 0.7344 0.2807 0.0000 +vt 0.7215 0.2807 0.0000 +vt 0.7215 0.2540 0.0000 +vt 0.7532 0.2524 0.0000 +vt 0.7532 0.2800 0.0000 +vt 0.7370 0.2800 0.0000 +vt 0.7370 0.2524 0.0000 +vt 0.8440 0.5063 0.0000 +vt 0.8440 0.5248 0.0000 +vt 0.8307 0.5248 0.0000 +vt 0.8307 0.5063 0.0000 +vt 0.7344 0.3486 0.0000 +vt 0.7215 0.3486 0.0000 +vt 0.7215 0.3237 0.0000 +vt 0.7344 0.3237 0.0000 +vt 0.7532 0.3506 0.0000 +vt 0.7370 0.3506 0.0000 +vt 0.7370 0.3238 0.0000 +vt 0.7532 0.3238 0.0000 +vt 0.8440 0.5570 0.0000 +vt 0.8307 0.5570 0.0000 +vt 0.8364 0.5997 0.0000 +vt 0.7950 0.5997 0.0000 +vt 0.8096 0.5854 0.0000 +vt 0.8364 0.5608 0.0000 +vt 0.8663 0.5452 0.0000 +vt 0.8798 0.5570 0.0000 +vt 0.8093 0.5451 0.0000 +vt 0.7959 0.5570 0.0000 +vt 0.8620 0.5854 0.0000 +vt 0.8784 0.5997 0.0000 +vt 0.6756 0.2660 0.0000 +vt 0.6505 0.2660 0.0000 +vt 0.6505 0.4622 0.0000 +vt 0.6756 0.4622 0.0000 +vt 0.6058 0.3002 0.0000 +vt 0.6440 0.3002 0.0000 +vt 0.6440 0.4741 0.0000 +vt 0.6058 0.4741 0.0000 +vt 0.6280 0.0055 0.0000 +vt 0.6545 0.0069 0.0000 +vt 0.6548 0.0671 0.0000 +vt 0.6284 0.0865 0.0000 +vt 0.6000 0.2239 0.0000 +vt 0.6163 0.2239 0.0000 +vt 0.6163 0.2472 0.0000 +vt 0.6000 0.2472 0.0000 +vt 0.6822 0.1033 0.0000 +vt 0.6903 0.1033 0.0000 +vt 0.6903 0.1767 0.0000 +vt 0.6822 0.1767 0.0000 +vt 0.5852 0.2472 0.0000 +vt 0.5852 0.2239 0.0000 +vt 0.6098 0.1405 0.0000 +vt 0.6145 0.1405 0.0000 +vt 0.6140 0.1724 0.0000 +vt 0.6093 0.1724 0.0000 +vt 0.6552 0.1246 0.0000 +vt 0.6681 0.1246 0.0000 +vt 0.6659 0.1454 0.0000 +vt 0.6571 0.0825 0.0000 +vt 0.6723 0.0885 0.0000 +vt 0.6279 0.1193 0.0000 +vt 0.6279 0.1037 0.0000 +vt 0.6681 0.2453 0.0000 +vt 0.6552 0.2453 0.0000 +vt 0.6668 0.2246 0.0000 +vt 0.6507 0.1850 0.0000 +vt 0.6636 0.1850 0.0000 +vt 0.6018 0.0674 0.0000 +vt 0.6015 0.0077 0.0000 +vt 0.6903 0.2501 0.0000 +vt 0.6822 0.2501 0.0000 +vt 0.6135 0.2044 0.0000 +vt 0.6089 0.2043 0.0000 +vt 0.5834 0.0885 0.0000 +vt 0.5987 0.0825 0.0000 +vt 0.6955 0.1208 0.0000 +vt 0.6955 0.0105 0.0000 +vt 0.7028 0.0105 0.0000 +vt 0.7028 0.1208 0.0000 +vt 0.7028 0.1808 0.0000 +vt 0.6955 0.1808 0.0000 +vt 0.7028 0.2409 0.0000 +vt 0.6955 0.2409 0.0000 +vt 0.7028 0.3501 0.0000 +vt 0.6955 0.3501 0.0000 +vt 0.6375 0.2580 0.0000 +vt 0.6331 0.2581 0.0000 +vt 0.6322 0.2120 0.0000 +vt 0.6366 0.2119 0.0000 +vt 0.6312 0.1659 0.0000 +vt 0.6356 0.1658 0.0000 +vt 0.5834 0.0179 0.0000 +vt 0.5987 0.0169 0.0000 +vt 0.6903 0.3459 0.0000 +vt 0.6822 0.3459 0.0000 +vt 0.6822 0.0075 0.0000 +vt 0.6903 0.0075 0.0000 +vt 0.6571 0.0163 0.0000 +vt 0.6723 0.0179 0.0000 +vt 0.6242 0.1418 0.0000 +vt 0.6307 0.1417 0.0000 +vt 0.6247 0.1661 0.0000 +vt 0.6256 0.2121 0.0000 +vt 0.6265 0.2583 0.0000 +vt 0.6335 0.2823 0.0000 +vt 0.6270 0.2824 0.0000 +vt 0.6047 0.1405 0.0000 +vt 0.6042 0.1724 0.0000 +vt 0.6038 0.2043 0.0000 +vt 0.6365 0.1297 0.0000 +vt 0.6367 0.1416 0.0000 +vt 0.6305 0.1298 0.0000 +vt 0.6240 0.1300 0.0000 +vt 0.6681 0.1144 0.0000 +vt 0.6552 0.1144 0.0000 +vt 0.6037 0.2097 0.0000 +vt 0.6088 0.2097 0.0000 +vt 0.6135 0.2098 0.0000 +vt 0.6145 0.1351 0.0000 +vt 0.6099 0.1351 0.0000 +vt 0.6048 0.1351 0.0000 +vt 0.6552 0.2555 0.0000 +vt 0.6681 0.2555 0.0000 +vt 0.6272 0.2943 0.0000 +vt 0.6337 0.2942 0.0000 +vt 0.6395 0.2822 0.0000 +vt 0.6397 0.2940 0.0000 +vt 0.1601 0.2593 0.0000 +vt 0.1601 0.0045 0.0000 +vt 0.2454 0.0045 0.0000 +vt 0.2454 0.2590 0.0000 +vt 0.2838 0.5470 0.0000 +vt 0.2838 0.2690 0.0000 +vt 0.1765 0.2690 0.0000 +vt 0.1765 0.5470 0.0000 +vt 0.1150 0.3564 0.0000 +vt 0.1150 0.0538 0.0000 +vt 0.0116 0.0538 0.0000 +vt 0.0116 0.3569 0.0000 +vt 0.0100 0.6667 0.0000 +vt 0.0100 0.3673 0.0000 +vt 0.1291 0.3673 0.0000 +vt 0.1291 0.6667 0.0000 +vt 0.9942 0.1083 0.0000 +vt 0.9942 0.2099 0.0000 +vt 0.9659 0.2099 0.0000 +vt 0.9607 0.1083 0.0000 +vt 0.9942 0.0068 0.0000 +vt 0.9659 0.0068 0.0000 +vt 0.3004 0.5798 0.0000 +vt 0.2911 0.5701 0.0000 +vt 0.2911 0.6124 0.0000 +vt 0.3004 0.6124 0.0000 +vt 0.3004 0.6450 0.0000 +vt 0.2911 0.6547 0.0000 +vt 0.3334 0.6547 0.0000 +vt 0.3334 0.6450 0.0000 +vt 0.3663 0.6450 0.0000 +vt 0.3757 0.6547 0.0000 +vt 0.3757 0.6124 0.0000 +vt 0.3663 0.6124 0.0000 +vt 0.3663 0.5798 0.0000 +vt 0.3757 0.5701 0.0000 +vt 0.3334 0.5701 0.0000 +vt 0.3334 0.5798 0.0000 +vt 0.2876 0.5671 0.0000 +vt 0.2747 0.5537 0.0000 +vt 0.3334 0.5537 0.0000 +vt 0.3334 0.5671 0.0000 +vt 0.3793 0.5671 0.0000 +vt 0.3922 0.5537 0.0000 +vt 0.3922 0.6125 0.0000 +vt 0.3793 0.6125 0.0000 +vt 0.3793 0.6578 0.0000 +vt 0.3922 0.6712 0.0000 +vt 0.3334 0.6712 0.0000 +vt 0.3334 0.6578 0.0000 +vt 0.2876 0.6578 0.0000 +vt 0.2747 0.6712 0.0000 +vt 0.2747 0.6125 0.0000 +vt 0.2876 0.6125 0.0000 +vt 0.9513 0.1060 0.0000 +vt 0.9513 0.0044 0.0000 +vt 0.9230 0.0044 0.0000 +vt 0.9178 0.1060 0.0000 +vt 0.9097 0.1060 0.0000 +vt 0.9097 0.0044 0.0000 +vt 0.8814 0.0044 0.0000 +vt 0.8762 0.1060 0.0000 +vt 0.8814 0.2076 0.0000 +vt 0.9097 0.2076 0.0000 +vt 0.9230 0.2075 0.0000 +vt 0.9513 0.2075 0.0000 +vt 0.8658 0.1132 0.0000 +vt 0.8487 0.1132 0.0000 +vt 0.8445 0.0044 0.0000 +vt 0.8755 0.0044 0.0000 +vt 0.8445 0.2221 0.0000 +vt 0.8755 0.2221 0.0000 +vt 0.7801 0.1104 0.0000 +vt 0.7912 0.0058 0.0000 +vt 0.7576 0.0058 0.0000 +vt 0.7611 0.1104 0.0000 +vt 0.7912 0.2151 0.0000 +vt 0.7576 0.2374 0.0000 +vt 0.7362 0.1124 0.0000 +vt 0.7464 0.0064 0.0000 +vt 0.7139 0.0064 0.0000 +vt 0.7182 0.1124 0.0000 +vt 0.7139 0.2409 0.0000 +vt 0.7464 0.2409 0.0000 +vt 0.8231 0.1080 0.0000 +vt 0.8044 0.1080 0.0000 +vt 0.7986 0.0056 0.0000 +vt 0.8316 0.0056 0.0000 +vt 0.8316 0.2103 0.0000 +vt 0.7986 0.2321 0.0000 +vt 0.3996 0.1076 0.0000 +vt 0.3999 0.1680 0.0000 +vt 0.3755 0.1681 0.0000 +vt 0.3751 0.0799 0.0000 +vt 0.4002 0.2285 0.0000 +vt 0.3758 0.2286 0.0000 +vt 0.4005 0.2888 0.0000 +vt 0.3761 0.2890 0.0000 +vt 0.4008 0.3494 0.0000 +vt 0.3764 0.3495 0.0000 +vt 0.3512 0.1683 0.0000 +vt 0.3507 0.0641 0.0000 +vt 0.3515 0.2287 0.0000 +vt 0.3518 0.2891 0.0000 +vt 0.3521 0.3496 0.0000 +vt 0.3268 0.1684 0.0000 +vt 0.3264 0.0801 0.0000 +vt 0.3271 0.2288 0.0000 +vt 0.3274 0.2892 0.0000 +vt 0.3277 0.3497 0.0000 +vt 0.3025 0.1685 0.0000 +vt 0.3022 0.1081 0.0000 +vt 0.3028 0.2289 0.0000 +vt 0.3031 0.2893 0.0000 +vt 0.3033 0.3498 0.0000 +vt 0.1505 0.9738 0.0000 +vt 0.0042 0.6813 0.0000 +vt 0.2968 0.6813 0.0000 +vt 0.9446 0.3902 0.0000 +vt 0.9268 0.3902 0.0000 +vt 0.9268 0.3744 0.0000 +vt 0.9446 0.3744 0.0000 +vt 0.8974 0.3747 0.0000 +vt 0.8974 0.4922 0.0000 +vt 0.9065 0.4922 0.0000 +vt 0.9065 0.3747 0.0000 +vt 0.9924 0.3882 0.0000 +vt 0.9924 0.5080 0.0000 +vt 0.9766 0.5080 0.0000 +vt 0.9766 0.3882 0.0000 +vt 0.9160 0.3747 0.0000 +vt 0.9160 0.4922 0.0000 +vt 0.9924 0.5202 0.0000 +vt 0.9766 0.5245 0.0000 +vt 0.9160 0.5041 0.0000 +vt 0.8974 0.5041 0.0000 +vt 0.9268 0.4879 0.0000 +vt 0.9446 0.4879 0.0000 +vt 0.9446 0.5038 0.0000 +vt 0.9268 0.5038 0.0000 +vt 0.8789 0.3882 0.0000 +vt 0.8789 0.5080 0.0000 +vt 0.8630 0.5080 0.0000 +vt 0.8630 0.3882 0.0000 +vt 0.8789 0.5245 0.0000 +vt 0.8630 0.5202 0.0000 +vt 0.9268 0.4391 0.0000 +vt 0.9446 0.4391 0.0000 +vt 0.9277 0.5235 0.0000 +vt 0.9277 0.5442 0.0000 +vt 0.9356 0.4391 0.0000 +vt 0.9356 0.3902 0.0000 +vt 0.9356 0.4879 0.0000 +vt 0.4150 0.4926 0.0000 +vt 0.3619 0.5102 0.0000 +vt 0.3617 0.3568 0.0000 +vt 0.4148 0.3567 0.0000 +vt 0.3087 0.4928 0.0000 +vt 0.3085 0.3569 0.0000 +# 327 texture coords + +o turret +g turret +f 1/1/1 2/2/1 3/3/1 +f 3/3/1 4/4/1 1/1/1 +f 5/5/2 6/6/2 7/7/2 +f 5/5/2 7/7/2 8/8/2 +f 5/5/2 8/8/2 9/9/2 +f 10/10/3 11/11/3 12/12/3 +f 12/12/3 13/13/3 10/10/3 +f 12/12/4 14/14/4 9/15/4 +f 9/15/4 13/13/4 12/12/4 +f 15/16/5 7/17/5 6/18/5 +f 6/18/5 16/19/5 15/16/5 +f 3/20/6 16/21/6 4/22/6 +f 4/23/7 16/24/7 6/25/7 +f 6/25/7 17/26/7 4/23/7 +f 10/27/8 18/28/8 19/29/8 +f 19/29/8 11/30/8 10/27/8 +f 17/31/8 5/5/8 9/9/8 +f 17/31/8 9/9/8 14/32/8 +f 17/31/8 14/32/8 20/33/8 +f 4/23/9 17/26/9 20/17/9 +f 20/17/9 1/16/9 4/23/9 +f 15/34/10 16/21/10 3/20/10 +f 3/20/10 21/35/10 15/34/10 +f 10/36/11 13/37/11 22/12/11 +f 22/12/11 18/11/11 10/36/11 +f 13/37/12 9/38/12 8/14/12 +f 8/14/12 22/12/12 13/37/12 +f 5/39/13 23/40/13 24/41/13 +f 24/41/13 6/42/13 5/39/13 +f 17/43/14 25/44/14 23/45/14 +f 23/45/14 5/46/14 17/43/14 +f 6/47/15 24/48/15 25/49/15 +f 25/49/15 17/50/15 6/47/15 +f 26/51/16 27/52/16 28/53/16 +f 28/53/16 29/54/16 26/51/16 +f 30/55/17 31/56/17 32/57/17 +f 32/57/17 33/58/17 30/55/17 +f 34/59/18 35/60/18 25/49/18 +f 25/49/18 24/48/18 34/59/18 +f 36/61/19 26/62/19 29/63/19 +f 29/63/19 23/64/19 36/61/19 +f 28/65/20 27/66/20 34/59/20 +f 34/59/20 24/48/20 28/65/20 +f 24/41/21 23/40/21 29/54/21 +f 29/54/21 28/53/21 24/41/21 +f 33/67/22 25/49/22 35/60/22 +f 35/60/22 30/68/22 33/67/22 +f 32/69/23 31/70/23 36/61/23 +f 36/61/23 23/64/23 32/69/23 +f 23/45/24 25/44/24 33/58/24 +f 33/58/24 32/57/24 23/45/24 +f 37/3/25 38/2/25 39/1/25 +f 39/1/25 40/4/25 37/3/25 +f 41/5/26 42/9/26 8/8/26 +f 41/5/26 8/8/26 7/7/26 +f 41/5/26 7/7/26 43/6/26 +f 44/12/27 45/11/27 46/10/27 +f 46/10/27 47/13/27 44/12/27 +f 42/15/28 48/14/28 44/12/28 +f 44/12/28 47/13/28 42/15/28 +f 43/18/5 7/17/5 15/16/5 +f 15/16/5 49/19/5 43/18/5 +f 37/20/29 40/22/29 49/21/29 +f 40/23/30 50/26/30 43/25/30 +f 43/25/30 49/24/30 40/23/30 +f 19/29/31 18/28/31 46/27/31 +f 46/27/31 45/30/31 19/29/31 +f 50/31/31 51/33/31 48/32/31 +f 50/31/31 48/32/31 42/9/31 +f 50/31/31 42/9/31 41/5/31 +f 51/17/32 50/26/32 40/23/32 +f 40/23/32 39/16/32 51/17/32 +f 15/34/33 21/35/33 37/20/33 +f 37/20/33 49/21/33 15/34/33 +f 22/12/34 47/37/34 46/36/34 +f 46/36/34 18/11/34 22/12/34 +f 8/14/12 42/38/12 47/37/12 +f 47/37/12 22/12/12 8/14/12 +f 52/41/35 53/40/35 41/39/35 +f 41/39/35 43/42/35 52/41/35 +f 53/45/36 54/44/36 50/43/36 +f 50/43/36 41/46/36 53/45/36 +f 54/49/37 52/48/37 43/47/37 +f 43/47/37 50/50/37 54/49/37 +f 55/53/38 56/52/38 57/51/38 +f 57/51/38 58/54/38 55/53/38 +f 59/57/39 60/56/39 61/55/39 +f 61/55/39 62/58/39 59/57/39 +f 54/49/40 63/60/40 64/59/40 +f 64/59/40 52/48/40 54/49/40 +f 58/63/41 57/62/41 65/61/41 +f 65/61/41 53/64/41 58/63/41 +f 55/65/42 52/48/42 64/59/42 +f 64/59/42 56/66/42 55/65/42 +f 52/41/43 55/53/43 58/54/43 +f 58/54/43 53/40/43 52/41/43 +f 63/60/44 54/49/44 62/67/44 +f 62/67/44 61/68/44 63/60/44 +f 59/69/45 53/64/45 65/61/45 +f 65/61/45 60/70/45 59/69/45 +f 53/45/46 59/57/46 62/58/46 +f 62/58/46 54/44/46 53/45/46 +f 66/3/47 2/2/47 1/1/47 +f 1/1/47 67/4/47 66/3/47 +f 68/5/48 69/9/48 70/8/48 +f 68/5/48 70/8/48 71/7/48 +f 68/5/48 71/7/48 72/6/48 +f 12/12/49 11/11/49 73/10/49 +f 73/10/49 74/13/49 12/12/49 +f 69/15/50 14/14/50 12/12/50 +f 12/12/50 74/13/50 69/15/50 +f 72/18/51 71/17/51 75/16/51 +f 75/16/51 76/19/51 72/18/51 +f 66/20/52 67/22/52 76/21/52 +f 67/23/53 77/26/53 72/25/53 +f 72/25/53 76/24/53 67/23/53 +f 19/29/54 78/28/54 73/27/54 +f 73/27/54 11/30/54 19/29/54 +f 77/31/54 20/33/54 14/32/54 +f 77/31/54 14/32/54 69/9/54 +f 77/31/54 69/9/54 68/5/54 +f 20/17/9 77/26/9 67/23/9 +f 67/23/9 1/16/9 20/17/9 +f 75/34/55 79/35/55 66/20/55 +f 66/20/55 76/21/55 75/34/55 +f 80/12/56 74/37/57 73/36/57 +f 73/36/57 78/11/56 80/12/56 +f 70/14/58 69/38/58 74/37/58 +f 74/37/58 80/12/58 70/14/58 +f 81/41/59 82/40/59 68/39/59 +f 68/39/59 72/42/59 81/41/59 +f 82/45/60 83/44/60 77/43/60 +f 77/43/60 68/46/60 82/45/60 +f 83/49/61 81/48/61 72/47/61 +f 72/47/61 77/50/61 83/49/61 +f 84/53/62 85/52/62 86/51/62 +f 86/51/62 87/54/62 84/53/62 +f 88/57/63 89/56/63 90/55/63 +f 90/55/63 91/58/63 88/57/63 +f 83/49/64 92/60/64 93/59/64 +f 93/59/64 81/48/64 83/49/64 +f 87/63/65 86/62/65 94/61/65 +f 94/61/65 82/64/65 87/63/65 +f 84/65/66 81/48/66 93/59/66 +f 93/59/66 85/66/66 84/65/66 +f 81/41/67 84/53/67 87/54/67 +f 87/54/67 82/40/67 81/41/67 +f 92/60/68 83/49/68 91/67/68 +f 91/67/68 90/68/68 92/60/68 +f 88/69/69 82/64/69 94/61/69 +f 94/61/69 89/70/69 88/69/69 +f 82/45/70 88/57/70 91/58/70 +f 91/58/70 83/44/70 82/45/70 +f 39/1/71 38/2/71 95/3/71 +f 95/3/71 96/4/71 39/1/71 +f 97/5/72 98/6/72 71/7/72 +f 97/5/72 71/7/72 70/8/72 +f 97/5/72 70/8/72 99/9/72 +f 100/10/73 45/11/73 44/12/73 +f 44/12/73 101/13/73 100/10/73 +f 44/12/74 48/14/74 99/15/74 +f 99/15/74 101/13/74 44/12/74 +f 75/16/51 71/17/51 98/18/51 +f 98/18/51 102/19/51 75/16/51 +f 95/20/75 102/21/75 96/22/75 +f 96/23/76 102/24/76 98/25/76 +f 98/25/76 103/26/76 96/23/76 +f 100/27/77 78/28/77 19/29/77 +f 19/29/77 45/30/77 100/27/77 +f 103/31/77 97/5/77 99/9/77 +f 103/31/77 99/9/77 48/32/77 +f 103/31/77 48/32/77 51/33/77 +f 96/23/32 103/26/32 51/17/32 +f 51/17/32 39/16/32 96/23/32 +f 75/34/78 102/21/78 95/20/78 +f 95/20/78 79/35/78 75/34/78 +f 100/36/79 101/37/79 80/12/80 +f 80/12/80 78/11/80 100/36/79 +f 101/37/58 99/38/58 70/14/58 +f 70/14/58 80/12/58 101/37/58 +f 97/39/81 104/40/81 105/41/81 +f 105/41/81 98/42/81 97/39/81 +f 103/43/82 106/44/82 104/45/82 +f 104/45/82 97/46/82 103/43/82 +f 98/47/83 105/48/83 106/49/83 +f 106/49/83 103/50/83 98/47/83 +f 107/51/84 108/52/84 109/53/84 +f 109/53/84 110/54/84 107/51/84 +f 111/55/85 112/56/85 113/57/85 +f 113/57/85 114/58/85 111/55/85 +f 115/59/86 116/60/86 106/49/86 +f 106/49/86 105/48/86 115/59/86 +f 117/61/87 107/62/87 110/63/87 +f 110/63/87 104/64/87 117/61/87 +f 109/65/88 108/66/88 115/59/88 +f 115/59/88 105/48/88 109/65/88 +f 105/41/89 104/40/89 110/54/89 +f 110/54/89 109/53/89 105/41/89 +f 114/67/90 106/49/90 116/60/90 +f 116/60/90 111/68/90 114/67/90 +f 113/69/91 112/70/91 117/61/91 +f 117/61/91 104/64/91 113/69/91 +f 104/45/92 106/44/92 114/58/92 +f 114/58/92 113/57/92 104/45/92 +f 118/71/58 119/72/58 120/73/58 +f 120/73/58 121/74/58 118/71/58 +f 119/75/93 122/76/93 123/77/93 +f 123/77/93 120/78/93 119/75/93 +f 122/72/51 124/71/51 125/74/51 +f 125/74/51 123/73/51 122/72/51 +f 126/71/93 127/72/93 128/73/93 +f 128/73/93 129/74/93 126/71/93 +f 127/75/51 130/76/51 131/77/51 +f 131/77/51 128/78/51 127/75/51 +f 130/72/94 132/71/94 133/74/94 +f 133/74/94 131/73/94 130/72/94 +f 134/71/51 135/72/51 136/73/51 +f 136/73/51 137/74/51 134/71/51 +f 135/75/94 138/76/94 139/77/94 +f 139/77/94 136/78/94 135/75/94 +f 138/72/58 140/71/58 141/74/58 +f 141/74/58 139/73/58 138/72/58 +f 142/71/94 143/72/94 144/73/94 +f 144/73/94 145/74/94 142/71/94 +f 143/75/58 146/76/58 147/77/58 +f 147/77/58 144/78/58 143/75/58 +f 146/72/93 148/71/93 149/74/93 +f 149/74/93 147/73/93 146/72/93 +f 150/79/95 151/80/95 152/81/95 +f 152/81/95 153/82/95 150/79/95 +f 154/83/96 155/84/96 156/85/96 +f 156/85/96 157/86/96 154/83/96 +f 158/87/97 159/88/97 160/89/97 +f 160/89/97 161/90/97 158/87/97 +f 162/86/51 163/91/51 164/92/51 +f 164/92/51 165/83/51 162/86/51 +f 166/93/98 167/94/98 168/95/98 +f 168/95/98 169/96/98 166/93/98 +f 170/97/99 171/98/99 172/99/99 +f 173/100/99 158/101/99 161/102/99 +f 161/102/99 174/103/99 173/100/99 +f 175/104/100 176/105/100 177/106/100 +f 177/106/99 176/105/99 178/107/99 +f 178/107/99 179/108/99 177/106/99 +f 150/79/101 153/82/101 180/109/101 +f 180/109/101 181/110/101 150/79/101 +f 161/90/102 160/89/102 182/111/102 +f 182/111/102 183/112/102 161/90/102 +f 169/96/103 168/95/103 184/113/103 +f 184/113/103 185/114/103 169/96/103 +f 174/103/100 161/102/100 183/115/100 +f 183/115/100 186/116/100 174/103/100 +f 172/99/104 179/108/104 178/107/104 +f 178/107/104 170/97/104 172/99/104 +f 152/117/105 151/118/105 187/119/105 +f 187/119/105 173/120/105 152/117/105 +f 152/117/106 173/120/106 174/121/106 +f 174/121/106 153/122/106 152/117/106 +f 153/122/107 174/121/107 186/123/107 +f 186/123/107 180/124/107 153/122/107 +f 180/124/108 186/123/108 188/125/108 +f 188/125/108 181/126/108 180/124/108 +f 181/127/109 188/128/109 189/129/109 +f 189/129/109 150/130/109 181/127/109 +f 150/130/110 189/129/110 187/131/110 +f 187/131/110 151/132/110 150/130/110 +f 190/133/111 188/134/111 186/116/111 +f 186/116/111 183/115/111 190/133/111 +f 182/111/112 191/135/112 190/136/112 +f 190/136/112 183/112/112 182/111/112 +f 192/137/113 193/138/113 159/88/113 +f 159/88/113 158/87/113 192/137/113 +f 173/100/114 187/139/114 192/140/114 +f 192/140/114 158/101/114 173/100/114 +f 194/92/115 154/83/115 157/86/115 +f 157/86/115 195/91/115 194/92/115 +f 171/141/116 192/142/116 187/131/116 +f 187/131/116 172/143/116 171/141/116 +f 172/143/117 187/131/117 189/129/117 +f 189/129/117 179/144/117 172/143/117 +f 179/144/118 189/129/118 188/128/118 +f 188/128/118 177/145/118 179/144/118 +f 177/145/119 188/128/119 190/146/119 +f 190/146/119 175/147/119 177/145/119 +f 196/85/120 162/86/120 165/83/120 +f 165/83/120 197/84/120 196/85/120 +f 176/148/98 166/93/98 169/96/98 +f 169/96/98 178/149/98 176/148/98 +f 178/149/103 169/96/103 185/114/103 +f 185/114/103 170/150/103 178/149/103 +f 156/151/54 193/152/54 192/142/54 +f 192/142/54 157/153/54 156/151/54 +f 157/153/8 192/142/8 171/141/8 +f 171/141/8 195/154/8 157/153/8 +f 195/155/104 171/98/104 170/97/104 +f 170/97/104 194/156/104 195/155/104 +f 194/157/121 170/150/121 185/114/121 +f 185/114/121 154/158/121 194/157/121 +f 154/158/121 185/114/121 184/113/121 +f 184/113/121 155/159/121 154/158/121 +f 164/160/122 167/94/122 166/93/122 +f 166/93/122 165/161/122 164/160/122 +f 165/161/123 166/93/123 176/148/123 +f 176/148/123 197/162/123 165/161/123 +f 197/163/124 176/105/124 175/104/124 +f 175/104/124 196/164/124 197/163/124 +f 196/165/54 175/147/54 190/146/54 +f 190/146/54 162/166/54 196/165/54 +f 162/166/54 190/146/54 191/167/54 +f 191/167/54 163/168/54 162/166/54 +f 198/79/125 199/80/125 200/81/125 +f 200/81/125 201/82/125 198/79/125 +f 202/83/126 203/84/126 204/85/126 +f 204/85/126 205/86/126 202/83/126 +f 206/87/127 207/88/127 208/89/127 +f 208/89/127 209/90/127 206/87/127 +f 210/86/104 211/91/104 212/92/104 +f 212/92/104 213/83/104 210/86/104 +f 214/93/128 215/94/128 216/95/128 +f 216/95/128 217/96/128 214/93/128 +f 218/97/58 219/98/58 220/99/58 +f 221/100/129 206/101/129 209/102/129 +f 209/102/129 222/103/129 221/100/129 +f 223/104/129 224/105/129 225/106/129 +f 225/106/58 224/105/58 226/107/58 +f 226/107/58 227/108/58 225/106/58 +f 198/79/130 201/82/130 228/109/130 +f 228/109/130 229/110/130 198/79/130 +f 209/90/131 208/89/131 230/111/131 +f 230/111/131 231/112/131 209/90/131 +f 217/96/132 216/95/132 232/113/132 +f 232/113/132 233/114/132 217/96/132 +f 222/103/58 209/102/58 231/115/58 +f 231/115/58 234/116/58 222/103/58 +f 220/99/5 227/108/5 226/107/5 +f 226/107/5 218/97/5 220/99/5 +f 200/117/133 199/118/133 235/119/133 +f 235/119/133 221/120/133 200/117/133 +f 200/117/134 221/120/134 222/121/134 +f 222/121/134 201/122/134 200/117/134 +f 201/122/135 222/121/135 234/123/135 +f 234/123/135 228/124/135 201/122/135 +f 228/124/136 234/123/136 236/125/136 +f 236/125/136 229/126/136 228/124/136 +f 229/127/137 236/128/137 237/129/137 +f 237/129/137 198/130/137 229/127/137 +f 198/130/138 237/129/138 235/131/138 +f 235/131/138 199/132/138 198/130/138 +f 238/133/139 236/134/139 234/116/139 +f 234/116/139 231/115/139 238/133/139 +f 230/111/140 239/135/140 238/136/140 +f 238/136/140 231/112/140 230/111/140 +f 240/137/141 241/138/141 207/88/141 +f 207/88/141 206/87/141 240/137/141 +f 221/100/142 235/139/142 240/140/142 +f 240/140/142 206/101/142 221/100/142 +f 242/92/143 202/83/143 205/86/143 +f 205/86/143 243/91/143 242/92/143 +f 219/141/144 240/142/144 235/131/144 +f 235/131/144 220/143/144 219/141/144 +f 220/143/145 235/131/145 237/129/145 +f 237/129/145 227/144/145 220/143/145 +f 227/144/146 237/129/146 236/128/146 +f 236/128/146 225/145/146 227/144/146 +f 225/145/147 236/128/147 238/146/147 +f 238/146/147 223/147/147 225/145/147 +f 244/85/148 210/86/148 213/83/148 +f 213/83/148 245/84/148 244/85/148 +f 224/148/128 214/93/128 217/96/128 +f 217/96/128 226/149/128 224/148/128 +f 226/149/149 217/96/149 233/114/149 +f 233/114/149 218/150/149 226/149/149 +f 204/151/8 241/152/8 240/142/8 +f 240/142/8 205/153/8 204/151/8 +f 205/153/8 240/142/8 219/141/8 +f 219/141/8 243/154/8 205/153/8 +f 243/155/58 219/98/58 218/97/58 +f 218/97/58 242/156/58 243/155/58 +f 242/157/121 218/150/121 233/114/121 +f 233/114/121 202/158/121 242/157/121 +f 202/158/122 233/114/122 232/113/122 +f 232/113/122 203/159/122 202/158/122 +f 212/160/121 215/94/121 214/93/121 +f 214/93/121 213/161/121 212/160/121 +f 213/161/150 214/93/150 224/148/150 +f 224/148/150 245/162/150 213/161/150 +f 245/163/115 224/105/115 223/104/115 +f 223/104/115 244/164/115 245/163/115 +f 244/165/54 223/147/54 238/146/54 +f 238/146/54 210/166/54 244/165/54 +f 210/166/54 238/146/54 239/167/54 +f 239/167/54 211/168/54 210/166/54 +f 246/79/151 247/80/151 248/81/151 +f 248/81/151 249/82/151 246/79/151 +f 250/83/152 251/84/152 252/85/152 +f 252/85/152 253/86/152 250/83/152 +f 254/87/131 255/88/131 256/89/131 +f 256/89/131 257/90/131 254/87/131 +f 258/86/93 259/91/93 260/92/93 +f 260/92/93 261/83/93 258/86/93 +f 262/93/149 263/94/149 264/95/149 +f 264/95/149 265/96/149 262/93/149 +f 266/97/51 267/98/51 268/99/51 +f 269/100/12 254/101/12 257/102/12 +f 257/102/12 270/103/12 269/100/12 +f 271/104/153 272/105/153 273/106/153 +f 273/106/12 272/105/12 274/107/12 +f 274/107/12 275/108/12 273/106/12 +f 246/79/154 249/82/154 276/109/154 +f 276/109/154 277/110/154 246/79/154 +f 257/90/127 256/89/127 278/111/127 +f 278/111/127 279/112/127 257/90/127 +f 265/96/128 264/95/128 280/113/128 +f 280/113/128 281/114/128 265/96/128 +f 270/103/12 257/102/12 279/115/12 +f 279/115/12 282/116/12 270/103/12 +f 268/99/51 275/108/51 274/107/51 +f 274/107/51 266/97/51 268/99/51 +f 248/117/155 247/118/155 283/119/155 +f 283/119/155 269/120/155 248/117/155 +f 248/117/156 269/120/156 270/121/156 +f 270/121/156 249/122/156 248/117/156 +f 249/122/157 270/121/157 282/123/157 +f 282/123/157 276/124/157 249/122/157 +f 276/124/158 282/123/158 284/125/158 +f 284/125/158 277/126/158 276/124/158 +f 277/127/159 284/128/159 285/129/159 +f 285/129/159 246/130/159 277/127/159 +f 246/130/160 285/129/160 283/131/160 +f 283/131/160 247/132/160 246/130/160 +f 286/133/161 284/134/161 282/116/161 +f 282/116/161 279/115/161 286/133/161 +f 278/111/162 287/135/162 286/136/162 +f 286/136/162 279/112/162 278/111/162 +f 288/137/163 289/138/163 255/88/163 +f 255/88/163 254/87/163 288/137/163 +f 269/100/164 283/139/164 288/140/164 +f 288/140/164 254/101/164 269/100/164 +f 290/92/165 250/83/165 253/86/165 +f 253/86/165 291/91/165 290/92/165 +f 267/141/166 288/142/166 283/131/166 +f 283/131/166 268/143/166 267/141/166 +f 268/143/160 283/131/160 285/129/160 +f 285/129/160 275/144/160 268/143/160 +f 275/144/167 285/129/167 284/128/167 +f 284/128/167 273/145/167 275/144/167 +f 273/145/168 284/128/168 286/146/168 +f 286/146/168 271/147/168 273/145/168 +f 292/85/126 258/86/126 261/83/126 +f 261/83/126 293/84/126 292/85/126 +f 272/148/149 262/93/149 265/96/149 +f 265/96/149 274/149/149 272/148/149 +f 274/149/128 265/96/128 281/114/128 +f 281/114/128 266/150/128 274/149/128 +f 252/151/54 289/152/54 288/142/54 +f 288/142/54 253/153/54 252/151/54 +f 253/153/54 288/142/54 267/141/54 +f 267/141/54 291/154/54 253/153/54 +f 291/155/51 267/98/51 266/97/51 +f 266/97/51 290/156/51 291/155/51 +f 290/157/123 266/150/123 281/114/123 +f 281/114/123 250/158/123 290/157/123 +f 250/158/121 281/114/121 280/113/121 +f 280/113/121 251/159/121 250/158/121 +f 260/160/121 263/94/121 262/93/121 +f 262/93/121 261/161/121 260/160/121 +f 261/161/121 262/93/121 272/148/121 +f 272/148/121 293/162/121 261/161/121 +f 293/163/169 272/105/169 271/104/169 +f 271/104/169 292/164/169 293/163/169 +f 292/165/54 271/147/54 286/146/54 +f 286/146/54 258/166/54 292/165/54 +f 258/166/54 286/146/54 287/167/54 +f 287/167/54 259/168/54 258/166/54 +f 95/169/51 294/170/51 295/171/51 +f 295/171/51 296/172/51 95/169/51 +f 296/173/94 295/174/94 297/175/94 +f 297/175/94 298/176/94 296/173/94 +f 298/177/58 297/178/58 299/179/58 +f 299/179/58 37/180/58 298/177/58 +f 37/181/170 299/182/170 294/183/170 +f 294/183/170 95/184/170 37/181/170 +f 300/185/51 301/186/51 302/187/51 +f 302/187/51 303/188/51 300/185/51 +f 304/185/100 305/189/100 306/190/100 +f 306/190/100 307/188/100 304/185/100 +f 308/185/58 309/189/58 310/190/58 +f 310/190/58 311/188/58 308/185/58 +f 312/185/93 313/186/93 314/187/93 +f 314/187/93 315/188/93 312/185/93 +f 316/191/171 302/192/171 315/193/171 +f 315/193/171 317/194/171 316/191/171 +f 318/195/172 314/196/172 311/197/172 +f 311/197/172 319/198/172 318/195/172 +f 320/199/173 310/200/173 307/201/173 +f 307/201/173 321/202/173 320/199/173 +f 322/203/174 306/204/174 303/205/174 +f 303/205/174 323/206/174 322/203/174 +f 324/207/54 301/208/54 300/209/54 +f 300/209/54 325/210/54 324/207/54 +f 326/211/8 305/212/8 304/213/8 +f 304/213/8 327/214/8 326/211/8 +f 328/215/77 309/216/77 308/217/77 +f 308/217/77 329/218/77 328/215/77 +f 330/219/77 313/220/77 312/221/77 +f 312/221/77 331/222/77 330/219/77 +f 308/185/58 311/188/58 314/187/58 +f 314/187/58 313/186/58 308/185/58 +f 312/185/93 315/188/93 302/190/93 +f 302/190/93 301/189/93 312/185/93 +f 318/195/175 317/194/175 315/193/175 +f 315/193/175 314/196/175 318/195/175 +f 320/199/176 319/198/176 311/197/176 +f 311/197/176 310/200/176 320/199/176 +f 322/203/177 321/202/177 307/201/177 +f 307/201/177 306/204/177 322/203/177 +f 330/219/54 329/218/54 308/217/54 +f 308/217/54 313/220/54 330/219/54 +f 324/207/31 331/222/31 312/221/31 +f 312/221/31 301/208/31 324/207/31 +f 300/185/51 303/188/51 306/190/51 +f 306/190/51 305/189/51 300/185/51 +f 304/185/94 307/188/94 310/187/94 +f 310/187/94 309/186/94 304/185/94 +f 316/191/178 323/206/178 303/205/178 +f 303/205/178 302/192/178 316/191/178 +f 326/211/77 325/210/77 300/209/77 +f 300/209/77 305/212/77 326/211/77 +f 328/215/77 327/214/77 304/213/77 +f 304/213/77 309/216/77 328/215/77 +f 332/185/51 333/186/51 334/187/51 +f 334/187/51 335/188/51 332/185/51 +f 336/223/94 337/224/94 338/225/94 +f 338/225/94 339/226/94 336/223/94 +f 340/227/58 341/228/58 342/229/58 +f 342/229/58 343/230/58 340/227/58 +f 344/185/93 345/186/93 346/187/93 +f 346/187/93 347/188/93 344/185/93 +f 348/191/171 334/192/171 347/193/171 +f 347/193/171 349/194/171 348/191/171 +f 350/195/172 346/196/172 343/197/172 +f 343/197/172 351/198/172 350/195/172 +f 352/199/173 342/200/173 339/201/173 +f 339/201/173 353/202/173 352/199/173 +f 354/203/174 338/204/174 335/205/174 +f 335/205/174 355/206/174 354/203/174 +f 356/207/54 333/208/54 332/209/54 +f 332/209/54 357/210/54 356/207/54 +f 358/211/8 337/212/8 336/213/8 +f 336/213/8 359/214/8 358/211/8 +f 360/215/54 341/216/54 340/217/54 +f 340/217/54 361/218/54 360/215/54 +f 362/219/77 345/220/77 344/221/77 +f 344/221/77 363/222/77 362/219/77 +f 340/227/58 343/230/58 346/231/58 +f 346/231/58 345/232/58 340/227/58 +f 344/185/93 347/188/93 334/190/93 +f 334/190/93 333/189/93 344/185/93 +f 350/195/175 349/194/175 347/193/175 +f 347/193/175 346/196/175 350/195/175 +f 352/199/176 351/198/176 343/197/176 +f 343/197/176 342/200/176 352/199/176 +f 354/203/177 353/202/177 339/201/177 +f 339/201/177 338/204/177 354/203/177 +f 362/219/54 361/218/54 340/217/54 +f 340/217/54 345/220/54 362/219/54 +f 356/207/31 363/222/31 344/221/31 +f 344/221/31 333/208/31 356/207/31 +f 332/185/51 335/188/51 338/190/51 +f 338/190/51 337/189/51 332/185/51 +f 336/223/94 339/226/94 342/233/94 +f 342/233/94 341/234/94 336/223/94 +f 348/191/178 355/206/178 335/205/178 +f 335/205/178 334/192/178 348/191/178 +f 358/211/77 357/210/77 332/209/77 +f 332/209/77 337/212/77 358/211/77 +f 360/215/54 359/214/54 336/213/54 +f 336/213/54 341/216/54 360/215/54 +f 364/235/179 365/236/179 366/237/179 +f 366/237/179 367/238/179 364/235/179 +f 368/239/180 365/236/180 364/235/180 +f 364/235/180 369/240/180 368/239/180 +f 364/241/181 367/242/181 370/243/181 +f 370/243/181 371/244/181 364/241/181 +f 369/245/182 364/241/182 371/244/182 +f 371/244/182 372/246/182 369/245/182 +f 371/247/183 370/248/183 373/249/183 +f 373/249/183 374/250/183 371/247/183 +f 375/251/184 372/252/184 371/247/184 +f 371/247/184 374/250/184 375/251/184 +f 365/253/185 374/254/185 373/255/185 +f 373/255/185 366/256/185 365/253/185 +f 368/257/186 375/258/186 374/254/186 +f 374/254/186 365/253/186 368/257/186 +f 376/235/187 377/238/187 378/237/187 +f 378/237/187 379/236/187 376/235/187 +f 380/239/188 381/240/188 376/235/188 +f 376/235/188 379/236/188 380/239/188 +f 376/241/189 382/244/189 383/243/189 +f 383/243/189 377/242/189 376/241/189 +f 381/245/190 384/246/190 382/244/190 +f 382/244/190 376/241/190 381/245/190 +f 382/247/191 385/250/191 386/249/191 +f 386/249/191 383/248/191 382/247/191 +f 387/251/192 385/250/192 382/247/192 +f 382/247/192 384/252/192 387/251/192 +f 379/253/193 378/256/193 386/255/193 +f 386/255/193 385/254/193 379/253/193 +f 380/257/194 379/253/194 385/254/194 +f 385/254/194 387/258/194 380/257/194 +f 388/235/187 389/238/187 390/237/187 +f 390/237/187 391/236/187 388/235/187 +f 392/239/188 393/240/188 388/235/188 +f 388/235/188 391/236/188 392/239/188 +f 388/241/189 394/244/189 395/243/189 +f 395/243/189 389/242/189 388/241/189 +f 393/245/195 396/246/195 394/244/195 +f 394/244/195 388/241/195 393/245/195 +f 394/247/191 397/250/191 398/249/191 +f 398/249/191 395/248/191 394/247/191 +f 399/251/196 397/250/196 394/247/196 +f 394/247/196 396/252/196 399/251/196 +f 391/253/193 390/256/193 398/255/193 +f 398/255/193 397/254/193 391/253/193 +f 392/257/197 391/253/197 397/254/197 +f 397/254/197 399/258/197 392/257/197 +f 400/235/198 401/238/198 402/237/198 +f 402/237/198 403/236/198 400/235/198 +f 404/239/199 405/240/199 400/235/199 +f 400/235/199 403/236/199 404/239/199 +f 400/241/200 406/244/200 407/243/200 +f 407/243/200 401/242/200 400/241/200 +f 405/245/201 408/246/201 406/244/201 +f 406/244/201 400/241/201 405/245/201 +f 406/247/202 409/250/202 410/249/202 +f 410/249/202 407/248/202 406/247/202 +f 411/251/203 409/250/203 406/247/203 +f 406/247/203 408/252/203 411/251/203 +f 403/253/185 402/256/185 410/255/185 +f 410/255/185 409/254/185 403/253/185 +f 404/257/204 403/253/204 409/254/204 +f 409/254/204 411/258/204 404/257/204 +f 412/235/205 413/236/205 414/237/205 +f 414/237/205 415/238/205 412/235/205 +f 416/239/206 413/236/206 412/235/206 +f 412/235/206 417/240/206 416/239/206 +f 412/241/207 415/242/207 418/243/207 +f 418/243/207 419/244/207 412/241/207 +f 417/245/208 412/241/208 419/244/208 +f 419/244/208 420/246/208 417/245/208 +f 419/247/209 418/248/209 421/249/209 +f 421/249/209 422/250/209 419/247/209 +f 423/251/210 420/252/210 419/247/210 +f 419/247/210 422/250/210 423/251/210 +f 413/253/193 422/254/193 421/255/193 +f 421/255/193 414/256/193 413/253/193 +f 416/257/211 423/258/211 422/254/211 +f 422/254/211 413/253/211 416/257/211 +f 424/235/205 425/236/205 426/237/205 +f 426/237/205 427/238/205 424/235/205 +f 428/239/206 425/236/206 424/235/206 +f 424/235/206 429/240/206 428/239/206 +f 424/241/207 427/242/207 430/243/207 +f 430/243/207 431/244/207 424/241/207 +f 429/245/212 424/241/212 431/244/212 +f 431/244/212 432/246/212 429/245/212 +f 431/247/209 430/248/209 433/249/209 +f 433/249/209 434/250/209 431/247/209 +f 435/251/213 432/252/213 431/247/213 +f 431/247/213 434/250/213 435/251/213 +f 425/253/193 434/254/193 433/255/193 +f 433/255/193 426/256/193 425/253/193 +f 428/257/214 435/258/214 434/254/214 +f 434/254/214 425/253/214 428/257/214 +f 436/235/198 437/238/198 438/237/198 +f 438/237/198 439/236/198 436/235/198 +f 440/239/199 441/240/199 436/235/199 +f 436/235/199 439/236/199 440/239/199 +f 436/241/200 442/244/200 443/243/200 +f 443/243/200 437/242/200 436/241/200 +f 441/245/215 444/246/215 442/244/215 +f 442/244/215 436/241/215 441/245/215 +f 442/247/202 445/250/202 446/249/202 +f 446/249/202 443/248/202 442/247/202 +f 447/251/216 445/250/216 442/247/216 +f 442/247/216 444/252/216 447/251/216 +f 439/253/185 438/256/185 446/255/185 +f 446/255/185 445/254/185 439/253/185 +f 440/257/217 439/253/217 445/254/217 +f 445/254/217 447/258/217 440/257/217 +f 448/235/179 449/236/179 450/237/179 +f 450/237/179 451/238/179 448/235/179 +f 452/239/180 449/236/180 448/235/180 +f 448/235/180 453/240/180 452/239/180 +f 448/241/181 451/242/181 454/243/181 +f 454/243/181 455/244/181 448/241/181 +f 453/245/218 448/241/218 455/244/218 +f 455/244/218 456/246/218 453/245/218 +f 455/247/183 454/248/183 457/249/183 +f 457/249/183 458/250/183 455/247/183 +f 459/251/219 456/252/219 455/247/219 +f 455/247/219 458/250/219 459/251/219 +f 449/253/185 458/254/185 457/255/185 +f 457/255/185 450/256/185 449/253/185 +f 452/257/220 459/258/220 458/254/220 +f 458/254/220 449/253/220 452/257/220 +f 460/259/221 461/260/222 462/261/223 +f 462/261/223 463/262/224 460/259/221 +f 461/260/222 464/263/225 465/264/225 +f 465/264/225 462/261/223 461/260/222 +f 464/263/225 466/265/226 467/266/226 +f 467/266/226 465/264/225 464/263/225 +f 466/265/226 468/267/227 469/268/227 +f 469/268/227 467/266/226 466/265/226 +f 463/262/224 462/261/223 470/269/228 +f 470/269/228 471/270/229 463/262/224 +f 462/261/223 465/264/225 472/271/225 +f 472/271/225 470/269/228 462/261/223 +f 465/264/225 467/266/226 473/272/226 +f 473/272/226 472/271/225 465/264/225 +f 467/266/226 469/268/227 474/273/227 +f 474/273/227 473/272/226 467/266/226 +f 471/270/229 470/269/228 475/274/230 +f 475/274/230 476/275/231 471/270/229 +f 470/269/228 472/271/225 477/276/225 +f 477/276/225 475/274/230 470/269/228 +f 472/271/225 473/272/226 478/277/226 +f 478/277/226 477/276/225 472/271/225 +f 473/272/226 474/273/227 479/278/227 +f 479/278/227 478/277/226 473/272/226 +f 476/275/231 475/274/230 480/279/232 +f 480/279/232 481/280/233 476/275/231 +f 475/274/230 477/276/225 482/281/225 +f 482/281/225 480/279/232 475/274/230 +f 477/276/225 478/277/226 483/282/226 +f 483/282/226 482/281/225 477/276/225 +f 478/277/226 479/278/227 484/283/227 +f 484/283/227 483/282/226 478/277/226 +f 485/284/234 486/285/234 487/286/234 +f 485/284/235 487/285/235 488/286/235 +f 485/284/236 488/285/236 489/286/236 +f 485/284/237 489/285/237 486/286/237 +f 490/287/238 491/288/238 492/289/238 +f 492/289/238 493/290/238 490/287/238 +f 494/291/58 495/292/58 496/293/58 +f 496/293/58 497/294/58 494/291/58 +f 498/295/93 499/296/93 495/297/93 +f 495/297/93 494/298/93 498/295/93 +f 500/299/153 501/300/153 499/292/153 +f 499/292/153 498/291/153 500/299/153 +f 492/301/93 491/302/93 495/297/93 +f 495/297/93 499/296/93 492/301/93 +f 493/303/153 492/304/153 499/292/153 +f 499/292/153 501/300/153 493/303/153 +f 502/305/239 503/306/239 504/307/239 +f 504/307/239 505/308/239 502/305/239 +f 506/294/153 507/293/153 508/292/153 +f 508/292/153 509/291/153 506/294/153 +f 510/291/129 511/292/129 512/300/129 +f 512/300/129 513/299/129 510/291/129 +f 509/309/93 508/310/93 511/311/93 +f 511/311/93 510/312/93 509/309/93 +f 505/304/129 504/303/129 512/300/129 +f 512/300/129 511/292/129 505/304/129 +f 502/313/93 505/314/93 511/311/93 +f 511/311/93 508/310/93 502/313/93 +f 502/305/240 514/315/77 515/316/77 +f 515/316/77 503/306/240 502/305/240 +f 508/310/93 516/317/241 514/318/241 +f 514/318/241 502/313/93 508/310/93 +f 516/315/242 517/319/242 496/320/242 +f 496/320/242 495/288/242 516/315/242 +f 491/288/243 490/287/243 515/316/77 +f 515/316/77 514/315/77 491/288/243 +f 495/297/170 491/302/170 514/318/241 +f 514/318/241 516/317/241 495/297/170 +f 508/305/244 507/321/244 517/319/244 +f 517/319/244 516/315/244 508/305/244 +f 496/322/170 517/323/170 518/324/170 +f 518/324/170 497/325/170 496/322/170 +f 517/323/93 507/326/93 506/327/93 +f 506/327/93 518/324/93 517/323/93 +# 782 faces + +‰PNG + + IHDRHÃÛ±sRGB®ÎégAMA± üaPLTE   +  " & ( ""((133;:  '# &$ %+,'(!(/;"8)=7###%&('('&(()%#(&(+(&+++-/0.0..010'%0)&1-,0/030.333568686689955868;86:;;=[<"`"b$ e( h& k)l,d< `>`?h?s+ r-y0`?!@?@G@^@MF!C@>UK$^D2\S(n@bAeEfHiCkHiIsA sLxRfF'kL2e[-nS>yV%uU9i`/lb1uj5}q9CCCDGHEIIHFEHGHLIEJKKFOPMNPGPQMQQNWXNYYQNKPNPUQMRSSUVXVXYYVRXWX]YTZ[[]_`^``a]X{[A`_`gb]bcceghfhike`nicjkkmopmpprlgxrlzvr„HM‡U”Z‚[ •c|ˆd$„x=¡_¨i¥q´gµqª{*³{!€_C‡fJkQ‰}@‘nR˜uY‚|už{` |_¡}aÄw¼€¬ˆ)£7¾‡"´‘$²’6A–‰FžJ‡{£•MªœP®ˆj¯ S½£M·¨WÉ#ɨ2ʬ@ò]˹aпdÙÆhàÍlãÐnë×qòÞvóàv‡„‰…/hþtRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿS÷% pHYs  ÒÝ~ütEXtSoftwarepaint.net 4.0.19ÔÖ²dûhIDATx^ìýÿoWž& +Ë'”eQ#F¥QºÅM<ŠB¥!­R8¦U +i—8#&’ØÉ¦óem^9Ž‘à¾=h`ï"hä—™ö/(ËéÚ¬ð¦/Û³«éÁ»Þ¾7¸û½Ïó|N‹)É’“î;é§HÖ÷SŪó|>ÏùœS§Æ¶‰-¢Chj¸FhJЊ6±™A›Zû¿{ÄBSZñ¢ñˆBC=ð‹¯àùÓQös7Áɤ*)jµÚê*SjaÏÇ5ŒZ\a)¯Áj-¬áÖâ 6jÚ+*$‡#M‹…BÑÃd)J´Ëñùw„ïÞýä8îž÷\Ÿ0í_~þËt¤>ô-ºàÒDªnqïž[8Øâã»÷R¸…§á [ÚÁO„û³€»Ÿ ÝO>Æ&îåÿDn—×:¸•9à–¼á#á|†` ¤/5w:;[;;;¤7l¬€ã? MÚ¯ö™mòÊ+¯œ`dWÎ¥x +¶Á맀㠀Ÿßs|·Ÿå*ÇU 0ËZ€ßÕÌ`"ŒæŒj_’áXâ 6¨Åõ€Z@P¡˜›£(Ç®VÃà ÖÃ5ÎùánøùñÙ§ü¹ÿùgð‹Y÷>ùì3—[søü® ŸÜuÙëC ý°e¹¥÷°GÞ Çö8aÀÒÌ*ôãó_7Ÿ¹„eì|qÆ÷xf¢wzš6|vÿ3àÓO?ýä¾Önÿ|†­ïÝÿ,ÝÑ6åÔPØ?äeãÀ38Æ?ü¥ñ§ðoG\aœÎÉmëþ‡Àýþ17ü +;ÿêW¿úå/ñC¸Å†ƒàYdC +NÝ… 0Ll.ÀÅš€ííÀõ´'˜€ww¶ÎóQz§A¼>#à§eàå‹E*Ï,€ƒ˜O@öc €E % °[f jPa^Ô†)ðX€9ß›Ë+€ý?fpþ ¹h`>„¾gu¡†{=þÃü +ÙÛe]w0“"MßRNø¹_¹qOä'Hų‚—×`§i_,6ùø.¬„K¸ñÇX Ú»ðK1¸)ÂRvûf°Ã÷áW:kúcüOw z +ÉåÿD +ãÜÿwsƒp‡K/@ŸÝ2¦KcðùÀ6e€E`*€`C†­6¶xcÀ¼²ðÊÂÉ&`gçݧþ(±ÓÐÞhœu oœ¨Éÿ²³äŇ»·)€rP½!0DìÏP„_pí‰ +`5§Æ —ŠÕðö7(ðdþH€¹1(€û扨z¬Í€\¦|œÒ`˜p ûHèp +`0#c)²¯›éä&zÈ+s›ŸÒàÌ•uš:U,„€«…þ8uê£Nônl»â¤‰~&ÃGºpçT¦3ܶÀ‰ +às*üS˜°½2ŒVwiÀ€3YA€³ïl¡À‚àøh‹c*€2àD‹ò”"§à©Šy €Àœ”÷ýø, p¢ê߀X„AðQpT`}M +`ËjëC@¥VéW•?úÀ +€9kƒFĈ¸œ«Crn"M~éçÈáä¿›ëÁ%ÛÇ*œñ?=M~?¹{ßmÙSÜ è 8M¬Èí* `Kú€Ù8;üz +€3Ü5è)€ÏïæŠ)û ä| +Lc®Rvåà—Ú“bÃ!ðe€ÑÊ©€­ˆ²þTP¼xºÏÐ>o `ªHËTV2; "ÀH @t’ XNcãÏ¡°ðǦà¸@œ Ž+€cÛö€ôñ±ò5³¯›KÝ7ì)€^  ? Ó•gÝÀÓä<øg÷ îÂ;÷€Û½ØéÂ\À/ÌÝ3@cH ÝmˆÀ?L™øKžýhp‡Ä´Û˜P¸¿‚°Ë€áWÿ¨ÀçT œIàÄϪH÷Ô`Ô§ ÃQ  8](XpZ,àÝ­ÎY?§c[€òþ,ßc +À…@µX¬U|Èñ1€S°<çϺZ€«U(€ê‘ès=ĽcyþŸ9 Ô‡Ä€A xºpçN€³’xw§I/Jc79¦sêZ‚c²Ë^hê$èèƒÈ³ ^ +w.££<%·¥ YýA,p³°=rx* åM@^Pl™ x&* OãŸü9[ A€álü +Ž7')YãeS7üàÜ1€ +–öbÅÂ%§þ(cŸ)"ƒQà‚Ì1F8nNV"9¿9лç€Á¶É÷tèWFêJã¿B÷4*ÂÎøþ`t4!¶[É\iiÛ| ³„ýÅ1øj8c€pWÉBÜûŒÆ©O¸ãqð«ÏGÇz‡#žRìŠG}& SXÂP€3ÏD DúF~`”Æi8k€6`x À÷]C)€ + +ý˜XA0€2€)`P€õ¦T 0T¼¦@(Œÿ¿ 0\˜o„BÎXÐÏtÃñ%ý +ଵ¶C¯ à’M€XG@Æ»SŽÞ(fƒÿ4sC€+ÿsÏœÐKœ8© 0D° ÿBî* ]*€û8Ò È4@>h‘»rýÚ@³Ú%‡§R{»CL€SœÛ…?~¦* ³³uê‡e…³€­c®~Ø7…ãSV 0,€iS,˜HÝûÐÀh°ZáSÔ1€ûÊ„Cý"M@¿‚³0D 8{rþËÍ9çÆíÌØDƒ +'LRÁk§üOO•qõ1œ¤ÜHl¿ÿÙgJ?Ú6¯¸É±>TàtS—|.€ýu4¤ +`t-@îpÄÓ*X€T—ô©€>À-¾ €²ÇëÏÔÀÙ€Q +À!«ý­ Ê¦ öÓÆ*Ö Uã.ðǤ2·“â ’@Ê‚Aµ/[ÐS–úÙb¶‡A¸dSÀIE§ÀN§Ë:2€ðœ4“ð)vá®™ÈÐÇ~ýÏîë” BøI ˜`W!U2M˜Ö.@ÎÿÃÝ÷K§€²K—ƒ¬eÊ}Cçè`L¥:Û{´"SŸ ÈTM@O ˜€sÖФŒþÐ`â,X8îî¿Ù„ã͉1J™)€(UÁj° +ÿ><pB-@ûõjþècÈ…t§Cb'1ú™ÐÑb”À¡ã·iæœpyZSN¨H*R>Ü©Ò ÒÍ~ÞW àö4‰m ˜S;€OÈLLjcŒ\ `øŸ¾wL° µZ´£ “À0 @à†_ÑÉK˜p‹¤òH€Ó)05¼~² +Ь¨I0¤uàùj:£?âÿYêqB›àußùKŒ¨HŸp1MÐHD~p#‹ *°þŒµHZµô1úÓ¡ +ù _PDbæ†ÅŽ/üNÏIRñ¬új¸áçÐôøéSÚÀ´içÿ{ +€¼Ä¤¶å’mßGC«tÎ0iäúg» H7¯RÅ´[®b€Ì·Ç ít8®7àîcú( ¿á*" 4ÎQ\\X°ÿø?ø¾{þëH»§€ãÍI +@ÏTÓZ(Zp¿vS§= @ ÐXþcŽÈ¡#b¢ †X€ô+eáþ€òíi +À$°WŽ2$•"÷ÆwªÓ*Üc È1ºŸßš» B¦2ƒ£-2¤ü˜À?Ä_I¹ø«¾?k—É~ŒÓ9»À®l€Ã@v8á)@{«Mg?\Ph™f¥P Àg  À½Î£\‘?ÿÁa0¼{ºÐQ:3€§Œ8P nœ] PÁÚ!1€?ÞvŸ~Œ:\ÿó +à8ŽÇúÀykzpÉ‚;6Ÿ*±6UvªœT TTöœ6ÿßøÌ*´-–äÊéÎ=ˆü}pµøCÍËÁ.Ò¥2°)P\Â+ןœSp wz‚1}¤€ÿ~¶0çŒì¼›ÿÐóo¡Àz€Sø¯#ð w©ð%óG5"oNªг2i ÀÀ‰1€Û¬þ¿(€Y€ã +à\–£UO -  §ìˆÌ®Ì³äÜOU=Œˆ(roƒ;Õaµî±ðþP êÌ”Üæ,0RÇ,À=]:žHŸÀÈ™´Ó€»0€À¥ÀùÊéÀ€Ú Éá +@{§à)ÈÔ>Y`JË4«(Ý3Œä´??,œÖP©ë|vž¢1ð0"`µFŠué£p#ߣrT[ k – ÕuX®$`aPÆ*©@Ò³žþŠÕ0ê.u»b0L‡óÂÝògŠá +@ôÐÔPÖŽã6!S.ýóÅÒ"À¯2BÊu‚2À'Ç÷àhïÉ®9`;8“ùÿ>@ ¢¹$C~gýÍîð8w|ù²ÿ”®)9ŸWîÂ8óa ÍS(à®@ÞœdRî;èvõ`L©H´§Sža,†%ýШ€CœÐP)ëÔh%ÎlÈju \(Y `–ä¿+êW–>ˆÉ¿"ë“êR³ª¦Á++¢6d@®*è•c>„ð£Ú:½>,dBÀòA†ó,Me¹‚ +>¼Þþ¶šüqbðepœÈ“Ç]!> D¦F¸ÿc%€œP-@_.–EÀ÷œ +°v:7vžø°à˜ âO¿‘# +&ÓvÆŸ´Íi }¤rÀePªp'̳ïû³ºLv˜HË*ë3 +˜Š°<®°¦gz +@ Å(°) pv@À]ži, ¸ê;­!Pª:-ÒgoÏ‘Nxè8źL€PXÜLÃ$¬\¶‘=âz¡€WWƒõõF£•Ħ#â29ŒÂ¾ßˆA~'ðÿ‘R<Ÿ¬B;ðQÀeƒ=ÿE(€ ŒŽnÆqtìŸîŽ_}®çîp gÈ¥ IÀq£*wòÝÍg¿¹¥¶‡A¸dS€³¨ÈNUy)l9´3æÿbJIÛö)€þ¿|ÄJ†cÀ9ã2xNT} ßÝNÊ]£>ÎE¿I¾Š“8~˜ø…¨ÉÀðôQ”<º(>À7:ÀVX´Tþ&¹Ý “èá“ÿÙíbÙá·‡GGQÜ…†ï!¬DÜ=üúq7~xðøèq܈¾†kZG3݇a­o 9ÅÈovºE7“(Iºq÷BøÉ…ðöÛï!‹€P¬*SÝw?#RˆýXEN‘T#6…~0¬€9/yºi`?ä¦òÚL¸, (—a5ê-íñßÍ÷Ê.Ù‘ +@SñƒÆ= wëv6˜æ9p»:p>ºÝxR}À9»ÿ¡.AzÀš¡ +@À±_—{³ {É]Z:\I·¡]Ò!òAG`²óÒðLû®@ÆŒßb×Sª€ï Àb€ìʱ–€JA§ÐïýÛ0S’ÿùF£lÜífñÒ#wºí¸æ½9ð2`í}Æ­8^Ú?Úh„­–JåöƒÂAÔ¤^ãâ¸[e1A0ÚSU«_‘ó]%5Z!Rk5q7ŽL© ËQ-­…7@ÿiöFºqxØMœSr!H¸^`>DùcfY ÀǼóÐZ€¼=Û-W=É@d;8ã§^=úþ!þ +?:ßÀKÊd–ò"¥"oïûãý‘=€ך>àn} º+ Z¶¿Å°3©€´u –pg èl¹§ú€öÖá½ÿî{ݰ6šä‡t6¢u®È†(.7Q>'{g‹ãÅbÑóæh€ +<~9 +bÆð‚`uÕB5d3á½ZÐ-w1C|µFµ`5d£,` °V«5KN­–oLà8 ,L­ÊTàT×/87ÜÝ=?>dŽ@^þðî½,ïõ]Q».ܶGéÍæ€Œx@L¼½tãˆ`|á0—¸ãÜ— 7U pŠÈNÄæ61ÿŸWJ‹[kIƒÿµÇ£8gÜ958þoÎ žΉ]–Èà B7%½švv=×eÔ#PŸ x*`&àYÆ0=–´ =uèãÞŸ0‚ó£oo*å¾V‡æ›äˆÉÚxÖ¨zMãRì7(îA^€Ì%°r%$ÿ‰U€Ç6 Ð$„Áz¸µ¤K¹ïkJFÆ &ÿ¡¦Ù^€m†W׃å‹ÀÝÃsù1øìãuQl‰’Eš‰ü‡âH?)`¸­JŸ}™[Éïï¾ýö;o¿ýöO^}õ'qòíwÞ—/—Yެwø_)è툓)€Qµ2[*dµøSð­RZŸ!g ±ÝÅÈ4š ìpŒL}Póˆ>`N?ã½.×?þÓ&þñ?§Ä®Úq+:Ä®ž3ȺújMáRè·['aÌ|uŸ àü2Ða9 «Ð^:ì0ï/8‡z +¾‚`8¾x¢? +Ëþ2›ÿÀKG¥ÐƒÊºè›ý€ €r‚ +@¤VSlµ¸‡ª9¸1×:þc`Ù'ß+ϪA0Ž=-@xÓÜ=†™A¢¤èÓäÙUtc@Äì+$á ú»nÇtYI +C¬\Ck׺K3X‹}rEýkþȦQBô€!&€äûCÆX0 =tÈáÞ¸víï Û©ÝñíMqq:¬®†%”Ûù¸Ï2ø'ý?WaË__­JM5æƒ<$¶£³ˆ.ØT2s3œGÙžÍþApCbµ$`"œtÒ`’µ€Åâ•B¡0^à/Ççýºû{^ |¯¨Ÿø³z#–ùÔ²9)íÀBÇ¥Ú!@_ïúËßÞyûÝ÷ßã=|ø¡J¥’ïÃHüämVN¾ýöûo¿k€<«ó"~ a·šV†e0Sá€ø/3™ƒÁ—;˜îï-д‹8þŸª>õyÿgbÝñ–Í€œ1ÀºÕx¦©¶¨¯ÁÃÅ/Ì\ˆø´ØŽVÄÅjXt'6üYoÖã‡ÅÕ+ü9÷÷>ß.uΟ{ø|n$C~¹w÷ƒŸ½÷ïÿý»½\œ‚l€µ$`þýI~íÛð礷S¤&³Ÿ«çePfôO Þ_ÇK#˜ÚL-g úL€¡Gùljˆàò¼™#ø{, Úgv¯gí´3~´‹M÷>È®¯…>üÒúµù_8Çe ò½­Š5ÚÿU^9Ø%ûC,P°3›3|òñ0+_fšM¤ÇÅä^ÎŽhr° ½ 2¢ö™Ú€?`,`ωu‚÷G›p†p‰©gÌûÈÞP(øc` Ò°ä–6`@ÿÕ$˜„¯…Q#¬E­¨D·ŒùÃ$€ÉX?£†Còïa£uÐ “ =ŒÃpµÆn…Áz´E|ú°ÖX_k ’DJÉ öJ%¾sjx˜A?7ää >f«dwË–9F÷2ìû '||œ¹²w[gÃ¸Ê ªiD•C’†ÇlF]­· ýj9Ƥd ܹ¼ a¶¿ŠXûVN˜e€ß†“ƒ9c}€´>Ÿ³A3™bI~$þ÷½øO¯iìÁþC´«d= ÿÛ;ïó‘[²XšËÌ„³yÇ´ßÇg[d…mr ü%ûSÀG¸tJ`¬‚^wé¾",*Üû„E5êv³ŸŠÎ:u +V/8}ÝY¬²_g FÀZQ ñ[ËΤ0¥ef¸ ÒÂg  À½žVt¶Ú gðþ08›› óéð^˜(Z»_FBHrPr9Œãˆíùæã/ ã$z ËâV÷Åñ×a°„M6$ó3ó‹ÕruÒ_œ)Ï” óK?®–Ë3XåxåòäËå™j©^ÅÆKØc~¾üc¬]\ÄÖfæKÜËWVü*’*ÏÌÌðÞ¤¥Cz¥âøÄΤ0qõÜCqb‚EÜóµWžY€T³¾ý.Ü-а\ÜÇ4 +™Gw@U²ƒÀÒlÅP¯DÊ;ú\eJ0TÑmHœ d3t ÈJÁ`ÑbA €„ôˆ°IäËû”ñ ýûüLÜסYÃO麧çÄÀW™í3ùsìMóäuìÀm>ý˜Óà+-"ñÉ'&ß!<ôs"rÐΜ\' +ϯ¿@ŸBpÛ4 ƒƒ­Çù§ (³S_ép¢ àü&°Õ!ÿO÷þ8˶üúiðø"p¯Ìö¼aì-C„Á µ ¿Pþ$nΗã¯êažœÊ?(ûMnÁãw#h‚úR9Œ÷ëåfT÷›õø(J‡\¬C<ÜÆR›‹á“$ù-ÓˆÂ×™:§êX{~,þ,ãV‘±/Šœbeƒ@çñè#3Nrûq“ðqêO¹Û‹8­œhKäM2¨ß+‘YÀðÿð+l‚Åho%iCÛÙ*êðÿ'Ð*÷¸»£&¨’Àç0ï@ÄÃÐÑ~vJ3v„¿ýé“O!¼eÜ cà1€»ŸÑ(ŒNqô¡´FI—ªC+Ö܃»çßÁiàÇŽ3°aJ† º¹t†#^^NÁ¶pwÞa ô>Ù<• +0ð,b{[…ÝÝ3xÿöÖæÖŸ{g(º‹ÅY +½zÒ&ðµ ì  zÇE˜,Çé«`ü šgïzP¿îJ€CðUu>náb‡湊a?FÕEX–ƒVZ'þrTøŽAX 2—‚È÷¼)N_bÁEðnªñI…ýÍU +½7<ï!Ÿ!w)¿©Uñ𭎃{¹I@ðgíU¡Mkð+Z•ÝÙzÈ›¦õhÀUÒ»‹/Ðû©gT»ÿÏ@·ü'€ÿ´ÿ®œ©Åñ?KÑþñ'ø~Š CÃÃÁÂ|JNž·ã”vèAá @ÿ ø°ß ? (ì8v¾qŽ™yúÁ>O3œÿ¾c?ßÛÜÛÄqN÷þ[›on¾éq"Ф\ɦ£’·: àp+˜/E±›!Pú¯—ÂHÓ¶ ">ÄÐ~T¢jµ^®E Zø0c ŒùG‹õl 'UÓh(ûsì} *–Ê! ¸(Ü=0º8¸ìs*q"Aƒ0„ª=™òÁ„ž_;Þyçgï¼ó†wp!¸»~ÜkžÛCš$Žrÿ»ø> ˜@i*¼Î}`Z¡vü½-F˜&éŽè ƒph(™Ü­ï}: BeD=¿ +x±`vwO÷þ›o¾ùæ¦cÄép•€Q î?%¦¿¥Å8˜[daÒ¸éhž3l,ý^Š£U½D?Æò ¼Â’Cƒ¢Àg"{¤5‚¸ªJ°V±¶ˬoôT +™&CR"Àóʳåëç|ïÝ·/2¼/mL ;)[9p›Êçò;]KæV>OƒYF åÔ‘ &8©"ìø”\ŠO>þŒ¥ÞÏq •éq¤c¶+%ü1迲ÄÀƒÃ;ªè3zw07—XúH RàzKÐÿ´H.ý4]õ1-]vÞ>¤ñ!®¾=Ó’_cl§G¯3&.I\LLÚ +ࣾzÕ4Æ“ËïÂô,ÀUÀ³Œìýï{[»[àÿîÞ©ÞÿMLŠÕg…ïÏ…¥àa8éC8„ád9âƒ9MG>Sàým¦ÖòC6âLTÆŠæÕ"=~ôùÀÆ|¸Oþ˰´(êLý†Ô>5gÏÜ}<Ï þg ÙÑç‘ÝâsA€ÑlÀ~•© 7¸9FÒXì~ +dñ6¶ã¡ã§ïCI]ô8>åÏýUjpÿÚp÷ü¼ûÎÏ4#õ*J1PÓïð>ë0Y{Ú¦—çv?ÒrŽq_²žS†j¸ÿü3Ö'äê,;Y¦O‘f»ÔƒZžCÖ(eµxF}º|Âòô‰{k`o¿'ö³i+£«,pVP/|vÿ3׿æ> +òŸÃ$ÀàŒ?¾ûkòàš>ü¤-&]»¦†Íù—×T}ý“6k*¸†W1p¾ ž9¤´ãLÔNmªsÊÖ°ØÝ?d<€¥2G2ÝÈ®KŽutïÉùɵ]Ùh ^½öê‚ÎŽÐèqŽz#§Ÿ +À”–™ à.H Ÿ‚÷:Itv±×&ýw·¶¡Nðþ¢?à(qæŒÿz8š ~X/ùÍ ŽÙj¢Xî—¯ó‘ý ¦$Þ93¨¡Z™€Ào#XæÌ*À†b‡ìÖÁü¿ã;äǪV'ýº/Î dRñœ_dôd!ûþg÷>ƒ À÷ÞçŸÞwŠ€ÜNéOjÑÁ>†cºJ•`Ý¢¹Ç.A²‚ú™ãC# }&+™ ¨5‘]BRÛôö(Àÿäm˜lüKXâG +Vciûíw>pgÛ;{Š}\d]kÞ•îµÐÕfä)Q#Ðý“샀;Æ/ë.AMÜlþ¾ö×å412sÀ¥¡·Ú)^Žt×ÕFC¡ à³Ut:{?ïlÂõëæþOðþ@[´;$ßuuP²ò°eŽÃÀ¢_¦H…ù) +À¯—ùVм@À)€r^ð $ † +®’G€ƒ—Ù€àܰÌvnü &ÀrådW«¹P7å_£öìÊÇË!'B’~ˆ½PjÅîF}‡kؾï²Ç ÙW\Œ·i"|÷'lÊoŒG’¹œ.oë\úas­~ã ADê[n–©ïû1d•NF•|÷bëCjÅî~øNÊ5N=þ€0Âßc«ÿ,D™UXöŸ.«4¿Ê¸áBðº3”)jS¨‹©+ ‡€\ Là>÷> ¢lÏô¨¥åâ·–}籈€…ÝŸÿœˆ-HXš”þ#½ÿ’0r ×ýÑ,‰a3 CLxÇcâ¿@k ̇ý +`E€j¥Àù”ý•¨t#ÄÄ ¿–/20?\È÷éD*ÍÞ¡’Ì$dýÑ€Þqr÷=¶Äý ßQqqN°mœèaÕvö A ‘zcp¢‚›fÆÆÐ_Â,#ƒÍ%Å1ü8k`&¡Ÿx) 04 Å/õË{æ·U¨‡¬JaÇA 5f|Éò“’(¹?)» K*j§s†Ÿý샟¹ ¤À™¬mv5L„¹ë“îéÿ.NÅÅ/€wÕÆSÏ dŸ,ølU¦´ÌLwAZø ¸×  +xeaaouPÿ[»mèGçwÌûÛŽ`gDs-÷“ƒŽæˆ*pÏzÝô@×óù¯î¾í*×põDýwÈwRžHKY£0äu ' ‚Å}29Ð_ex5i6Á€Ý ûòÖh9€c;¥ñjä¯ÊÂÛŒPR™h" šêـŴ\üÖ²ï8°°ùFc¯½³Ù&»·¶2úðþ:sñï¤!sÂDRfžSðÿ@3‹”³€‹ôÀ}1(€r}£O°`ˆË!_*ÆÃb•„5Y’[2Ù0øâØ`޹\vA5Ë2¯¾º€/ºav™˜‹<ï£ẕ›gU¼ÊÅÌÇÒiú +{©cL¹eOir$c³ŸÓ3û¬Lç*[L…ë6Æœ¦R€íÆ®û#„™QÈ&îÝÿÙDQ&¼àt'Þ³ž–‘÷ÚMs:‡-&yÞ¸B9:yvÌžÁjÿQúbl° –BwD¦ÿ‰ü·EÂ۸Č+âj/¼ªžX^íÕâäÞÍ„Š&ú‚€6•Y€ ª€óÆàô‘4&h-ˆÓ¼¿ŽâŠÅ£qàZãø•åJ%ñPÓÙF¿Ùh4¥®£à©i0qZ à˜¨åkœXÆžä¿:YÖÚÖ©T}ö/z~ìË?žp¹&Ž-ß¼cy—xGùY9[N‡yl¬7áîËå!U±>«!³ +)X—¿üË—^šxéG?êçÿ« æ«Ô}k¬ÞV9‰`•‚™ÕGŸ‡ƒ6ÜìPÐR°©ïç³W–¾ó qp%•">ì/ +ñ + ïãŠå ží—²ýM²Õ`¯ØÀhp¿ïAc3Ë2ÀÊð‹îŒ?ÒÌáÎõ‚‘<+;5ªî8x óAÀŒL=Уš–‹ßZöÝÅÚðû(à+åÿJæþG{–1¬çß“°G|‘G$ Ì'tØI¨]jkT×Ë0 +#cP1€A¯P €åá@Dà1_2_ÙM¹u ~Xhê¼CåƒÅã}”¹Fp+{Ðz"ç0¥ü?âØE5Ð ™ûI•§ÐsJ9h!}V›Q2$Å4èƒ<ŸV:Ê«w‚^¯C;Û{lëÃjûûüèUGFOš–3îÎFŸóñ{^Š?xWŠH”êÙõÎû,Ó¸(çÿÄZ +áßpÒZ aÑOÒ²•ÎÌøN @ðp= ä_[©_» +j([¨5C!ë0ôvL‹'ƒµÌߦ2 pA€)-3À]>'ÄÜ! ·š“Øb´÷gËOÀ|y~¦TšŸ™)—Ë¥òR©=P>>-HQ–¢ä§ëwíÏH äýá©ä4Û?±¸8¶ÑúcxgÅ'áÌd@žv,èá}POÜçO›Æÿ2̲AôýŸY/A쀟ϹÃ}X.¾O€K†wVºliãÍs?µ bÅê;i`ÔÁˆ¯"õÍBj +a>Ði $ €'¨©Œ´Î1œ@xà7n0˜‘ªgz”Órñ[˾“X玩I +ß‘Þ_–hË +ó'¡y{¿ÀóÇÉ­P½}ÀM³Ó~Öp5˜Í@ŸP;€A0P À€®³±õ°mDõpc#NVyð_Çz±ÐíæE`®ëœƒ2Í}”×Í)àË'aÕÅÐn²Rñ _ æ‘ÏYoZ˜ü4ûðD)\¦Ø2XO.^ˆqÀ;ÜÉ| ÁrÀG}Џ/.>æìÙÚçŒRðÓ€èì`ƒ•”c"ÒÔXÈŸÛÂŽèQB'> ð%ð‡ÀþÀD°V€úƒÕ„0<8oùï2HÑw½Yü!Žù~:ñþýR¤Ê‰»åU”ÒéÁ €q½7™N˜8ÉhClw‚ +xÚX€Ž×&ÿÛ(öãkÄþ‘ô×§q 3uÃZÔˆºpÓ}oè壋žÏmˆS€_Ÿ­æ©\²Â*«ˆ( ÃV´Ñ-«Ë Aœº vÕþçS–B™ ehàD‡ç«áà£÷ŽF_¸1yj¦fß¡0:‚¬ýŒ5éGßã7=¦Ð&::‹ÇÆ™!&Ü¡‰ ãgÿˆ¸°}\Žì·Kp[0¨M›–yð Ø  +v pÊÿ˜DÚ¬ãøü3Z”Ohe²xÜ@ô&ÃÍ"Kºða*ÕõçêLÒàg +“‡Õ›/„«zÄÏÈÕ³=êi¹ø­eO©Ìœ À¡ØX¯ãbô&è¢÷·Ï‰w"àÅÁ]úò¨Á—ü6’rX½|¥÷+ËP×}×VÈÀ‰1€cµ=À8_?ª8:LCâàñ|ä¬ÅùánÿEÁ07å1rò~Ïœ*–º|†­Å£p5j±ósCüÜp9€¢ó!™ ­'€áä9¯5ç9A#L[Œ•97ªÿRª>µö¸ <ûöö "p±ÙH’ÿ}gzC‡H*€”öyâg$ëÙ€µ\üÖ²§T'Åp(pßÈÏsÑÙ¥AÛ‚PJ}ôǤ£ÚI ;AÁÆúFm½ÑŠç[­´â>ÅÙcCkr17•‡ÆúÕ¦Gê#^ì>d/¤îì³€2K "²*9A9Ž„ï“»¬{ÛÚ©džz=Ò¥­(x”Á?ÿÀ»s€Í(ôÁ—… ¦¯Æ°æÙ€ “€MtRfÌ<Ýñ +´@ +ƒÇ¢._֩fŸοÛ§B^'•I‰å$¸Bö´36ç_ÔEïÃûø¿©Îÿ­üï¾,åÈß×è0’ݸޛL'¸ÝEC­¿µìL*à,±w ôt¶èÿ1›··rþ;;®`<Ôùéµ}ümÍD5¾·'ÀbgQ(œP ÀQ–ùþ0ŸFã R@¼˜4ÖµçùÁÜp€ ,úòñc ÉHfÂäQÞ±®2úˆ?€^ã¾ã}Z©«^Mé¥î«âïëi?çlµ‰34Š*0–·訶åb¹? 6QîN5À‡jE‹ÁR‰ì¯é Ø™;’´ 9?b¸c>gáÏéáÕQ &ù±U o óF ¯ÃõLjvý0ì&4Eþs­×ÑÀÂ4:óÈ"J#šfìôV)ØÆ'¶@!>—I©çzÄÏÈÖ³¢»¨¨åâ·–=¥ +0p, Î?mÅ_‹0 h«ÓuýÍ€þ;§*X¨ÿ”~Ýú×ÑL|Œ•à)b'(³990ò¿^ƒöZ­r·Á×^ïýû‹ p•(gÍÔ²FéX•+i³’ëmŠÞQ" ãê00‹*`þ™;¥ÀŠì¸< &*sò\ܨþº Äg?™@î±Í ÈgýRg„ðábîô^¾âá˜Øùøî§ìÉüøIŠÚö“N`8êüž÷ÇÝxW•¸,‰è¢#Q»‡È¥»¶™ê_ F®ÛWçz“é—¢;Ùx.€)-3À]>® @±/` ®ì°õÙæÝ +à¸÷çǽѠGì_­ÔPò§`—]yÀ¨Ã-²þ´@}t €?î7Ã*ƒ0<@c½—ÖmÏóƒ½z{`žÈJ¬l"s<ï’M. 1¯‰ÿC-ÔAÏìRì.›ã€&F.U5Z¤½ÃŽÈÓhº2¶²7cìl2“Â=<ï¶SÕ‚hž7ï!Õ¬.…öf Aï%äÀvˆ 1²™aÉòïØ¶8ØOØã8ã{@ê[5‰jFá‰,BÑkºÇ¯× +0jw*Ň­ÏL É'w?ƒÁ Ø_âuÇ•ÃÿWÉLw·.ò¥‡žÈø®dݣܒªË¾z7àF ‰ðZ»ÅÞ€h8Û;M óþZêh1 +ŠÈ‘~¯‘õpÄQ¹U|=¯ú 0œO¨àcqÈ ëS ×k¯aÇn•¡.h>xû¼ÃÏÞý÷o¿f23|w¼¡âЄ–Éùf>´~’ú§Wêñ_Rœ%u‡´‚ðíŸ ´ÿ5X¯9n «5wkr`€êAN˜}S`ÕK`:ýèÚ~Ä7’ê­¤öjRÖ’7ôÏ5ÂÓ‘îªd¬¿#˜!À iwœ—í4?iÿä–a>‡•ì‡"ÛÌhÁFŒýsé}6 ä=slg,•[úaq2TçSC¬Hߣ?ûØr\&½2ú‰ë½ÉtB,¼¨ +  “çqzà4»µ£U@FCþ›gé€ü'ë*˜z=ò’ýy°Ë¾ºÜ×M§³½Åéf|8+·¶ßw“íôúŽí¬BqH-¸–§ÀY“Ün"½1€xŸÏ€eŽË}&@\ïM¦\ +ˆîn7@üÖ2ã&¶êX€ö8®1jߌþ†ýu:ÛŽ'Dí0±Í$«îaýtàÆ|Rð´ÀèZ€Q ñ¡¨…q¼xtÑJ€@µCç”×?¿Ïæ.ÿÀnµóV@B4ƒkx÷Þ":‚‰ùBÊ}‚ÞÑùGXŽž1ØÐ¨¯NÛqðþûïø}0ž¯³þ(hHu:~™‚”ô¬‰œº±sHkúq9Øíþ9ùÜã4®/‡ÞÌi–À¤³i_¤æf*ò¤s ›sË9ÅEòöL¡½%ê +~¾§õïóhÛi:ìU誻i¿JŸ 8ø~)×+ 8’bŒ„"»—9™Òž¬K‰OhªgDw· ~k™ˆ*ÆžI¤±€…k mAîßÒÑþ¶´GzÿM&üØ ’øªã-ŒJ5Lå†ô§B pžv#ý:|ÿkØh5×£¸ú¤á*Î wsÏ –Ô]6 þ7¿¡5iÖ1ý/êïäúºÉ…ü¨¦³;b§à‹i2X&ìË\üáÛzzÀp ô&ÃÁlµÌÂÜ>7c|Кã9 b­‚)Ÿsd3|~®$ýì3°‚ÏðÉ­ù˜OŠ-öüƒšC}‚u">í×Ü»…{µÊuÐ[éæ¹·ÐvÉ俱_$'Ø"ÀM=ú›÷WºØ'Ž™ì» l ã™8¬p€ 8UÀ QRùv¼tlîV‡áz­õõb·uQ `ùâ@ö÷û\Ej¬Ï•yE¥Aþ¿Ï>¬ÙJ—Å(€œ·)Uý3Ë)[’¨€åj2ÇIu±?f l­"l°}…Ñ!7jF0Ü,|  öuz’Yo!øü³#ùL„õŽhÅqÖ=ÒýwÖ5Öÿ1ŽÂç‰ ]#;B óZGAƒ‘¦È^Š_öÜý'wÍØòêœd”q˜@€ÉòöC—ê?ü#þà÷ø0Ü.Ùí¸ÌÉ”öâ»#>¡©ž ÝÝn€x¨eÆ_n~&3±Û^Øl¿K’§äÏ^R¿nEFÿÌû3͇¿z8úÛãäë >o”$­.»ä|˜âþh!¦¥žöY€Ã$I¾±§õ³±Ç]|1n!ínrx´Òív~{tÜ¿X½m®°:|Ò\ Ç)7C˜H¸û¾ ~d5È;m—† åMG|{gM`ÝÜ»þ?y›íkßfã&üAÚãVÂuÓo§©õƒ”ÃÀø³Ù€ìÍŸÌ7mãL Xÿ”ÀÔ<À·–ÀÀ±ßg]žÌ ÕÀ½{ŸÒks÷’숯Rìö 8z&† ±¿áÞ}}”5>á þàƒ·Ó"Î@¡Hëí·Ý#Q¸ÂðñŽ×ÿøŸÿáŸÈûtøÏÀ?ýçú'7Û IGn2âzo2àÒ“M€6Äv çé±€Ž @‡´ÆüÎŽêÌìè˜ié€ Súç¼?áì½Â{~~f†ïñöœ¬zÞLn°Ÿ²çÍsjæ´Àv‹À’¾Ò1žúÀ§ZêánU«~5·ÅSK.Ç\ Ÿ²m¶ZsLí Ÿ¹óbòH@Ÿú'dØ7²«Œ+hr‘lÅbDæï²ûü|¾SiÌWg•y/OöÊÏ:{[ŠæîD f–t›÷#ûPí|îîS+ÕË&||Æ„³XÂ?M!{³£õŽ(áÀÓHGš„T ¨0BS<Ø÷ïá€H¢à>«W(«RMϳ -ɲ^'ƒë`Á€ëújïÕ^)T:ñ£—„ý—*‰]GR‹º¿¿2ÃÀ%P óÄnÇeN¦´ßñ Mõl€èîvÄG-3úró3¨€Ý=$´µµ'÷/~“è¥pS=ú÷yâ×ÉIC÷(I¢ z# ƒ[ÐÏÍ0ˆâ/à“GãÄÀ°þ¬ë¡áÐÁƒý0ï„Íýˆ}u'?/¿.Ü}ø²Ô÷±ˆ¬ÜßË…ä—ü¨FF®wßç{ò0oKåO @ÒqŒíÙ8×ñväÞ'ï¿ú£´†Þ>˜‘̧¿‡HÕ=i 2ô±aŽð„¤‡L>æüu|Úªòž\Ý€`šõœ6îßýüãOèí©ÉÙI/©M3Áx€‰û4C÷ôä.FØ]éRüt|‚ýí¸„’Ö âÇÍôg¢Ýî~ð>¯Ò1 €â{^2Cj—2…ÚJ¼Jc­ÈAzÓ´[ÖÀ»`<ì2°ÛÙÂÞŒhx.Žð²<šÐ£ÿ€÷,Ê>Öåp>˜Ë×W£¡Oã€ìøà§rJ  îSHuÄ ƒc¢T‘V3¬?LâFC}ûÊç5ð}Ê}$¯ñ,ýÅØ¹Ö6+æ;   €¾Y]@*¨ú]ö@úwáì¹q-*;ž˜nÈÙ ·¥z¸GKfYûaq”Æ€<ŽHË€I5P€À¶âNtÙ°\rsSÆþO§p¬?ØipQÓº…aàsÿ u àøìH0ÁÖ#@îæüŠ÷u'Âæ”¬Cp!ñùIÍЦq`¤€ëJÿÒC¹J×l0Àr€Ùd·ã2'SÚ“)ñ Mõl€èîvÄK-3úrsòt´ +hw:(lµ÷:mî Î“èŽø˜”FíýS[7A¿• t°WŸ„§j`Ú¶E`g œa°7{ :ïàBÚç gøÓTœf %§À㜫%ss€ÍéŒÏ´­Lé .!e&팤3>—“q=Ðp<¾Òpf'ýјuŽHEÉqí˜Á<':øJŠÓƒ³²Ç€+ _N’ó„ðC⃔ðô⿱>“LÀ <0é 0ZH+bvÄ­8iaÌýK·Îøç¼D9¼“U™äR :à XØÝZ¸&±^ûåÆíý‡ynB®Ž¨?] ª¤túÌïi8±@ @›7"ªÕå•*t€ÍY8ÿœøà½ ð –;ˆ´Nþmä"ÅѰ# à2á–¤„­¶lIK{CÆYöDÆ}‹*Á]çHkµjƒæDçÇ­z[ÒïÛˇé³Á\ÖÓ‹üø05܃,ÀØ 9Aé µ½©ã€A dÂ!%£'#Œ“þŸêt†J®<½Wá=_~þn¡*ñT•§Ù ¬áËÞº$¤+Ò†ÜC§§¹2àˆöŠtv;Øw«½k +@t&tRœåa87Òû'¿ä8æ˜Zf7À'þIíòµŸ{ißñð+Tý0²ŽÉçÃÂ2@ ºá}’-G|ƒ£>á–«öÀæ˜! Eó`4`8@µ™Ac2xÜ¡`qC´g2°(w +y9ssëη³™m؇ =¤Qn«ÜUIr€ôg"˜h*+|¬6 ø¥-V|ÂpcP2 'Äpþºù<`Ò࿃êýXåêæSôj3ôºÀ/W7ʈë½Ét‚KO6ÚÛPb>vÛ„ ‡Waî”ÌOðþL«#‚@¦ú‹Rø™ó¯üë×ýrùŒí`$N–iC2þÓÿgŠàÈh{®Á‘pñùP  ?Æ_frÂqkÔ"ø]Í8ÐWÛ ·w•ÈÛ6!8zƒÔÇȤ5ƒjÀr'(Ü‘‡ãýR+„¶xBàÙ™eèÍO™ñ‰t ­ˆÊÎÜ‘ô\Úƒ,ñùýÏÔ[1¥ûÇìGì A¯¯ªsîÂ6DšØ¶ˆáØAi™„!/E>/Ôàà˜é½DQÅ'.v\ædo«ñ Mõl€èîvÄS-;YlÃlo¡°¹»Ûæ–8g0aü¶><ŠþÛÛ»ŽCÁȸ %aÑóáå¯ ®{³sz}ðYb'Ô©ì7çïfNžçÛ{¶÷<ƒò:s¼és£FŽ3\ŸÊ\?{èkþKJcGNêQÕA™”•æsàÁœ«ç„’ÏÀõ|ýû÷W¶ÑXÍ ˜#¹ŽÛÄ%¡×ÞZ`_üÚzNj[‘]ÿ›}–/Ä M¬Æÿ Â§ËLJ/"&uS߯{¦ˆ«r¶ÏMi¤]V<ðCp_XL@Kä ›p¿#0Lœê‚dzäÀ³ï?€ÃQl‚ù{[]Š”Ø„ p‚¤¯$ú„¶Ð2$Vœz]Ѐ¤Öçÿ¾C‡9ßóü²7k/?®òïPÏ¢ðô#¿ªW0Ú#ÁÊŠRªV9f¡àiÇÊôç,?ö#‘q½ø”ãé$ZiŽÔïÁ–ÐpÇt§˜Y(þ¥À2²ý}¤µŠî¤4œLV©éw¹Wuò6¡nØ’þ]>"èŽlçòáû´²ÇNÿKŸÐãýùàÊ)ÜM|’k 9 G +˜Ûö +³3lä¦z` @¼ "ê÷  ½ö_Øñ‚ŽúµEqÔÖfÇøoÔ'´X‡ýww]ßp˜BEâ1YiÿØiPö8ò†ÆòíÌÅc4ê›ChFÀ* AÌ&<ݸG™s ¹L®˜WõV²_“ C‘.â†iEջРnp ù¨UoÿäU=ÀÖ?ص8¶ dzŸíy€>d@ÝõA!ª. É #¶|ÜYXŦÎÅ6ík*5fHú´´nÈÞäú,\Á Ù‚l&]äÖ2Æ1왚åÇlEj$ÞŠJ,ú~cß Àî^›Œï´;;;=ë |6; HÊqÐz%/úcÆØ1 ¬¥3îUnà—Oü@å«À!Ãl™#®·ÎŽ·Èú@1_ÏŒøê¨:xÈönT'ÿod_7ñ4ã Y3rÒƒyR´í}sð—ÈÎ}Ô1‹ ôø‘ÜYƒÑÑög#o«[‹E°ëoÒΚ¡ÿø, H8K<>à:/Äx—7›øàîp¤´×…cW† vø3¸,«`¹¶ÊH@ÞŽ“$Jâ8ˆÅQˆ)¦ÞÔ·é&žf|[™ôœùï(¦ü—÷Ø×›ÊÎ0·¹`3é"nn:ÂÑI‹o€ö7ð6ûÿÐ[‚©H»üA5}üØï7=ëü}€Ñ +€Ûkäÿž”,öÛÁÜYÜ}Ÿ×Lësôà²ûû`ÿq €Ým¥~{O6ΧSRÀN»Åòs¬OÅ`=jø˜Oñ9E,qü×*%‡ImÔT (NœqÀ²ï+ÐÙÚÝÚÙÝí\ƒØ“€СñÅÖê$|W +w63þ3•úoííÖG#×üjµ\åsà0 +Òþ"_¨fú§aX ÀÕ°„Ï€×ç7{ëQÇáÊÕEÝýªÎg%¨¯`ê¦ÒÑSŒëÌ çŒ]t×ÀmÓCß܇ÿ™=¥»À„ì8¦ø#:Úþ¦Øæàûçk³©*i—žšÐü J¦¦ž3NQ&˜žøÎ`þ_bP¼O€åÚê$˜€ýbRpŽéõ˜i@‹@óO¸@Ž^»Ää:m¡Ár©5À¸·Ðk v·â­f "êw “iöØ3&wA}”pxn´Ë©Íí­6¦0™¦xœþ»»tÙ#°5¡ºQü_d{À* +ã ¢¿¶¶Ž¸&]k €ØNŸ~+wp<÷M?Ôþ8xõF½¾Æ—c´¶ñù óC™ôœ3ª£˜2a\L`ÂC1õY(>Ïòl@†³+€¾ÿ S6£-3'³Ké$pŠ pl62kŠîÓlÍħ5´¡­ÒFÙ¤æ´äØÝ¿÷Ú0æÈ#º‹·6+`Ùw ئØÙ}°×Yéw÷:mØ*Z%Hƒ­Ý ²‘ ¦FÒŸüo·]ÀoØ-w ýß` Úˆ¢'â׸Õ_%Év¬ÛÉxøºƒŽÉ¿ŽÈF|ðÙàîѾcò9Á JouޝåIÙcyÒh7@¾ü,)‚ìÜǦd¿À°À1‹whLc+Ð~s …ƒ½ÝÍNG{óþ »­Ë8da"êv¯Â£óþÔµ&Ç¿øÕAñaí"¬ÐZ_$? «Âpý–B€áú:2ÉúzìJç„d{ªïG‡/¬@ʵ\`ìù±K—Ç +À•‰Ù‰|N'ŠBÉFBµ0ë‹ÓàÄœ}§§ñ™Ã¿`J©XñŠ3^,j–˜›óùѤï{Õ"§èF%¤]Â0£_ÈŸ,úv¨¦ÝØŸ°UŽYœâÒ+YIbò30íùO%²½áÀkØX#ÿIôTÔ©¾¬ƒõ2 Aˆ‰U)€ +£×!6Öó1RMö\;c6á–¤k5NÚÀ@¯Bþ `€ÛÛ`-+D}–g›j ¶B)Z€“ýô电··§Ë8 #!~Ù3pH Upvo°ªN†Ïœ‡  1Z×ËH‰såç(œ#ó™¿øQÃ\[ (8pé¹ÂøÏ ´Wg'ž÷ÇÇÇ W¯^q Òdö¦gIòa +\.ÎÍ‘ÿÞ,V,SÓà7(š¿(öc¡e²§¦dŽ)gh`¯L®²³˜g +€/e°"@ª` ‚µæ +ÙŠƒ°TMÌ9 p‹6€2\ +À´Z + ÚH‹ƒ +E(Z€ |• @Zp +~>¸¥N*p$§@|§pB>L.2MøzÞæøÏn 5©9Ç@:Íñ1@œAð终ð¸;»¸~õð`÷œ|›KîHj[¡Ðé`å6 çý{ÞŸ׆÷ƒ¤ç«ä¸58qÈMb¦?PŸa_épduëøYoDÐ!ȯ‡4¤ðß‘ÈøB œõk;`OÑŸA`ìò¥±>Ï©P¸Zð¨ +ÐWE7R0…çO Ïí¬À0€MR€åTÙÚe+x/b@JTø²(@;’—ÝÁˆiH°ÝЧÄÿœ ~!ÿáú7¨ZàÞFø øšW$?£NuRpP€’¦ pL2=)Ç wÇAã~½Ë7½ÒÃ?æ’\ãu¦³Þháf¿†…0âÿ@‚H€ŒPþPÁH–bÿ€õAƳ"ý?¿à&mNKœÈ–¤öãÞfÆ^zÉhô‡Št ì;»»Æ`tö ÑY;ˆX€Î&Ï [ìB @p‡”þœÒ!DÀè6òØpÀø‰ùr´ŸÐ³¢?R÷†ÓᎠGÑúºÖ¨¡ä&‹ì8ìÜ ‘Ia•ìÖgùâÇíÐS—/=7îÁ˜(zW/û…ñ+Pgz€˜e € +@FàD0ËM¬€Â €SSTø´$>|ÿ‹( 8@0y•,çz~…Ô¢T -3´`wY8ŒAY€x2þ_üÆ}¥³5þ­Ý +ƒ¥zlüËh‰­ îã«—©¢õ¸ËprBéO½¿´ /¢èp ’ m ¬!Ž÷VX[KàÇÕ-ÌšÙzDhFÕýV!ÄB +€ + ˜;vÝãÿ +Àäþåø¼?‡±—^yéQé …!òw÷:Ïú~€UøwXí·£Ö?h¯ €ª †{¥Ÿ÷ÊýCoæסX Ñ+ð(°×ÿ,`­ ÓßSA‘Ð`Fd†Dîã;ŠÇäs‚<æ‡d¦øþýô¯EÿÜ +¼óeD#)€ë…‰ñ¡ + PR!@`¤Og*¶}Ÿàoªf†*€Ò6À×áTP(€æZðÿ¼á  Š­xdŠtpÚXG¢þ˜a©t+OTcñ/µ +À: ŠÉRWóë’þöƒ€‘ÿ¿å±¢¤™Àýeãqþ–_gbÈ從ïèÑR“‡àz-Z4¡‘Þ,@:ÙsíÇLÛ6] càÿKO£Ì8<+€u{pþ{vÿ÷Î.–ï> ògl—ógøV`—MÚ»»lòÿ¸÷gÒôýÐÒ_x½•„µ |å§Z쬑s¢(IXÉo>=ý=!ø6þöYÒZ" +#§åÏ ò×>øªXÏŸ“¾¥%î‚+>¸ Ö?á2¾…1š`|nâ…Çâ„S©‚B™|·gáÛéâ=ðqº¶sz +²•FÃbÔsµÊÜìœ_ó½)ìr}2ó‹ ½eœâ]þ ðœË€–N1Ö§ÿ7EÕ @\1þ?àŠS°»‡äÿÃ#po#úb­  J9V‘ì6µF§ìÏM ¤:á;Šã2U– 6à×cZzzøh 6’¥ÔPwTd÷»'¿Ã×lJ]‡ Â×pDdªzjˆh¾YŠöa´¥scüéôd0߯¡(‚l à üË §#žFLÌöYºa=VpLìÙ)€WžBðçÙÅ¶Ú {ÎÞÞÚûÅv‡!ÿ´«"ÀÒž~²Ÿ¬_€60 ÀÀ0ïÏT¨C@KMÊ2¸>ŠVO€¸ËkWÆ¥Å`¿§ Îÿ4ë5Ÿç_L,¥ôÿ;µ¢¡å×OþrD!À9>åû»ÿ)H¹Q(€)ŽÇ¯\gÁúÁ ÌCHð$(‰ ÂÏN{¯z‚ø˜åhnަ_¸þi/ðŠ«â½—*|VbÉ´È]Z.–üÙZºzÚÃÜÏÆÁø«•)€çPôOÑBɼQ«è¥ìa…k d8ùáJÞàºÆj·Ép_!àzB$ë*ˆµd‰YôN!`êÇ‚ˆQÐà2=gRˆÔ9ÀĨÎÖê]MÞ’4X§ZT·fj0lÔBSij„`û3ÈrÐ<Ùõ†€òu¤ÂírxZÀ.v\ædo«ñ{ûf6`ÀÐ’ìn£\¿Ëà?¦·þ~wwĆàÀð °L;4lÔé´a¸Ñqï/Ø5Fàj««¸0¤źðàä™AcJ#š$|JÀGY ËšŠ¢`? ·Î€q]çÊωÔã+B“Üœ9ñK§¯Í0£Eà=+@~gðAS{ã_-@¬‹s^ çáÿAhò{γ•žÏ*AÏ f T˜†> !€¡ð¦ö÷f‹øŸO³â?¾þd1°E8@j‚‚3 nÉ4 ˜ÏóÆÀqIÎØ °J¥ö:os{µN¿f~:J€(Zç<è†"¨HKDh>;ÔÀOX€õôþÆ­…Ðù"ÞãjBSƒc½5jË•|t©T—4ÐêF!>:tp¦Ä/G1Nƒ«,` +ÀM +¬TŒ`Bd2ê'ã‘<Mƒ @s-‚¹a +`aÁ™|ÄŸï7ÐÖûÕüw‹‘ÿÿ´çÏWƒïnímc îs “$l„À6KJNôϼ¿ù‡ †ÖW+(œ©ëîçŒàÅÄuEAï\ºý2TÞÙQ[_¯Á áGj@74ª»&}ç„ñXîœÔfû>É‘_mo£¿£à$OýFœ 5À:L\°¦)¦ƒ+ùQԷ¿ÆAÇ€^ðU§`#þZÑÀaklŽ¢AÉ9Òó‡ú€“Á¤[gÐPàÂ?wE.!€€téAp!hx½qéy+º7WŽ8KŠÀKÄ+˜‡zPž¥S¾Ð†Ëk[5`kƒÑ?ãµÌ +–›ˆ—º:k3ÇL;dü_ªbeSAýŽ ¤dÒâÑ˘RX€àµPú 0óE𘘑x>žv §6\`}PT}/0ã‘ @f¾÷XpíÚ+/±:MïíÁ<ÀÑ÷€úÐø8í½ + o` Ÿ‚q€DØcR¢¿Ò±c`×PX ¬½Æ6~ËŒé±ß™¡Â_Tà xø5 +˜Ï € +€¿oŽÉçD™åz)µMøjkEµ!Æ¢>¿© ÅÜ¥KÏ?ÏÙ»2>~õ*JÅ¢‰µ»ã…``ÿd?ü6[ü°®Z` +ï\kvAv‚d†D(Nðý´Ü»Ê@@”^,Îa‰­0Ðÿc{ÉœöFêGÁEš1ËÜ‚b•¹@€|Š¢'õ•„E·f“ükp¹€ªñ¸5sþ„qp‰€œXUñWÃ~ùQȺD¤‹Å,¼ŽÍêà\|pÀ°@µñF…µ9–¨ê,A5‚X T«ûÂÆBœê.¥Åx-Ù,x+5¶3aÒø WsEû`mc^¼¦t¨`‚2 Ø1°-þÐÿÿ!b`ýK¯à_,€—ÿùÏÿþïN泦OÑ><#VÿqF‹;ä¿èßïýwµƒ%ð‹„53¦«¼ š:âð6îBXs + ZlÆÑù|–ù«Öjý-ï¾uXèõ¤>s18F‹Þ¤5m4úµÕn›¦b–è¬](éæ{eoO•ñ„µÄpyΟ¥ì7,ógnÙŸ[EŽe|`š"VÛ,£ `¥. +Š…Y­2ÈvÐ<àW^Ùç"|í˜n ó0å¿Û Cdƒb%ž9Í—þÇÞïf˜Ùªù”â¸ô-òåh¥št“(þ‚„“v]19Ä,Võ¿H¾B +|r$Eœ|ÁF á¿,v£~6Žõ@G ìuð¸ÿî yRí>ÆÂhIBlÒ6ÄñÕ›7W8ÄG`=ÕxxÙª S½Ž#l$ñÆ~tTýç‡8¯ù¬8nÅ ¨Åð@gîЋd¥þÁó7G¦êUvˆhoƒM|¯±¢ p $ÆT{¡³ÛÑy`ñ¿³¯è¿Õa¤‰ìòé!Œ±åæ0ï¯#Y‡ ~·ZPTkµàV3ŒÀgòñŒ¨ÓO¬K|õõú¾)€ƒÌ\Ÿ†èõða+_ è1¬WÜcW˜?/Èb‹îóû!¾œ=öUŒPüç,~>Õ`µ0WQ +`õ:…y±8‡BXXô®ÏN°ϯ€ "êœoc2’U+e¯ÆžPQ$P‘?À†Fr¾wÝ«å'0]òJ&V™5€¯cg¬Ü +J‚b±,‘À€-Füx^Gæ¶àJ¡ÈVT.H¶ä°ñ¸ãìèÄc½£ñèÑZs?úõæ#‚ñ£î?ïÿîèèÛ'Oº`ü£°¥æ#ço'ýK—ô üf’ß~ý¯G|ÍTtØ=ÄÒÃÆ„:|-Œ~÷äèÉÚ7GIòu—o…~pK£û(ªP¯ïGÍ_¯~½Dûq·=º8¹$ÚÔ­'û|s + FÑáãîO½‰,#“7†£…·ÌÀ õø»ÌÉ.Àʉa1€á + =`ð•Π. hom^{é¥쮾¾;pó8(!ÐÒ§·ç*•­NV†`%„!ÞŸ?mGŽã˜‡Ïäw¦„QyßRiòŒ.9ìGŸ¨B~$‡‹å³ 88‡ +÷ùryr‰¯ +äÜ…@[€llTõåÇ 8¾ Caì2‡çÇ. +—_¸|ùù˘ ^xM…'8y3š~¡0Q¼Œg'®rÝÄDVi)ÖcWÚ"Ì©½±¦ôSza²Xœ¸ZxA xnƒß+8>¶‹ì˜—9àœt’cúæ±ør¹7,-•''J3å——^ž‡Ç…çâÅÅ¥¥——«/—Ë‹õùzóæJu©ÌÞ™Q–RH³W«}“¿¥I¯\~yeiqa,Âw¥úr)!µ*Ò°%--â°eŒ–ÒSqX²N+Êåj}e}¼ªN"yÔE&ˆá‘y0“ž sl@ ÈŠ0°Îðâ±wÏc¬óÞ1ð½Å°hsGÃ4wüÌB +$ÈÍ”2탊 ×h2¸@‡´4t.[[î¯ "†¿³Ï+ ­WY„§J: °W=†bŒ$]¨µÓ‡äkžBH{C|Ö—‚_Ø»O QÙ¹~rÛ•îG~ïêAÀlöÒ%kúc_5Â 7¼¬õêÔìuîº|s‰NªŸNë¼´"¥ˆ’ªWö|*¿®Vj«J~€¥òרcvåŠe_EvÊŽ !à÷«³ܼïMù(„CøËÁ:O€XfïŒ88¾èÍÍê̦ÔScWX~±R °}}¹o…Štž+/?êÂ#ïw»O ÖýïÝîÑ~5n&¿9ŠÃ£ÿÕ7ân™þpoa:ê~ñ¯“ä7p—»Ý'¿ÿöwGøt) Öç‚/â/—R0p2XANø¦Ûíþ÷æÍýiñàqh¦¾ÏMžÜlòõ‘ÔØ'vçÂÂ,î|_ @”‡8%p +`0˱ƒ ˜Çàï3@°Õ¾†ÃQÔcÒ±_ 6ÅigŒþfThÀ´ÒspF +SŒ³ )LÕ¿b²–õŽÀì-'¼T¸Ø4ü¦µT_Ç-k xò÷µUÖüØÁÃ8XªßÐä!ãGZ‚L |-ìIZ U YŽƒMi,`ðPÀˆ”sHMƒ +¬·ãäÔÔt0ŸiozŠq kM¸\Ñ Ó/º !(ÌbW|HpF §\Ó?Ÿá†ì4 +W1bÉßpé +,—…hžcˆ/Ã-èm¶áitë/ó9›µ:iÅù€£›ßDá> +ˆ ˜c*¹ekšnïÀj#È?,uy(èGIókð䎿¥+nà—-øPøÓµm{@‘þ;`¨€æo2½äk÷€ž<æãî¬,#ÇhSž O.x$5êÕpÏ@yˆØêlóå|Rüáb%`“½­zÄïík6»T׸I©ë/n¶¹µ`æSüåõ‚F×pŠðÿœ±Ä <“4y]¬!X üZ^üÕxF­zÏ\¨ýèoB X”8ŒcõOùâ^TØ%9oÊêz\­_¬»Rú›Kw–¿4¹/—ñWÀ€íDö!Pi:o¼ËÅi³ÇõX` @–—Ù@—U´Á§àº+“…ôBß/xãÈ}Xƒ’By,—AÑž²~¡ä 8Ïúbœ¡‰Â¸3,¯ôÇì~PÖ¦ú¯|ÁpnY•Ÿ#&hxTMÂða#“‡%ìÏTn4b( 0Ò(Ø8àæø`Í/zUcyF¢ºTõ€œÍà®Sž7Q¼ŠYgE\û!Àêö8ÅîÈ·Ê/˜Qp{pâ +NKÁƒš0ç |ŸF—ÅVãT×p´üÀ-tJ῱}¯y[\Ó˜, +Žÿë0øª»¯±AÀ ¥gº£èàN CÁ@|ë×IñƒƒŠ—TÚ¼ëÈDtB<³0zTê(Ëðè ®LL#Œ³Fc)Î '§ùI2íõ£:+.ØðQÖªäà€œ +Š’z=\qg£í2ØãÀÛWüåb%`“½­zÄïíËQ§CðÊö¶ÈŒÔõúOCîØš%ØLÒ.À¼‚"·Ï;…sÇ@Êàºó•Ue…ùât@XQ¨ جpH¯®Ö‚“¾:¶à/C—%`?›‚ñÁVÕ@„Vù|ç²uPúµõn`€V +/?7ögÏt¡97zé¹LL].Çǯ’ptÃ"ã×2 å¥Wdå\Æg·bZòÚûB@ºglμÀÁ“/h­Ü>f½\IÃyÿ+˜0î;þ³Ò‚ŠÅ· Æ—nojÌîÆ¬{ê(ó6Ú: :ªÆ,Ø]ª€äÝÔQRéñ[o°û×”Ï|”ÓýkXïÒ'K` —…Øš x¦§‡²Zb0„‰º+Rl±Ñh 5&%0Öˆáf0¼Gˆü'?ˆºõÐêþl1M²#üv~@#šç¦·k¡g®¯ÚÁÕòÏá¹Â¥K—Æ®ðtó { €B•qs)¡ Ãj9ÜOðœ7µ‹"Ëê0͵Ê2l²îy +¬¡Ø•÷ñPâëÝfø„Ò[ʼeæz#ÜrëÈcb&ø«óÀQã›:8 „Aî¢8¢\Ö]úŠ)†Ár%DÉÂ\<…ø6j^gzPõ\Šâä??vN-@çCtë7#ÍýaØÏþ»¤Í÷ ý)€k¬ä7ï/ÿ/;Ïm P™€ l/l2¹wEcÙ àëzöË‘ï{öÞ¯“˜Ø>åÕ߀ +@Eä%—ô™&ÕGz³Çê­<›Ÿ~XAlÇo§î©8Ö¬­,À¯ÖŽÿhàXÇÉ*°Ì»\œ"ëøÛ¯H ÀÀ@Ë”Ü3z®1 ÈW¹{aÚó +³X®@¬™ð°;\?ÒšÖ¯çÉnŒ¼Ãü˜er|øß9ÖY<_€X¹<`Rîs¯PkEðô™'Ç5‚Š^Òó7,:üm¥Ñ=d‹@¼õÜfÅŽú Ö'Íð·$ [®[#@†›˜!LtT‘ÜÁ¡Ö*ãÁ~¼Ä܃ŭ ÀúÆá!F À‘å_ìó76’@’Á”·†Gõ;‰ü¿ÌÀ#D,fDÔœÃfͰ¹€ô5ßÃØ.xÏwóßo,@“4¯¼²Ëirß¾0˜7åÏ”h°DF[ › îqlQï„bÛF³ã€6\ ‚¤ÜŠ D¿½Õv̧°„¸!Kúj#ȶÓÎΫ›×^ºÖÞã†ZèV +¢?Ƭt=†0l&aœl<ŒÃ¸›T¡µ‚Óh«=yYàã¢}í, "@Ø´{3¬£‰poãVÜ=êVcÌâóîÞE¾¤³q»æø¨°Ÿ:~™ƒ´øšÿG¹”Wè_(\¥ gµ<«þÙ‚Ÿ¿Z ÆØÖ›*ø¬Ó×"H«ŠÇfÂ\m›Ó¤!kõ¦°ýrSm”.3â×Â6Îùþ4“ñg! ¸‚[r¶âÁoà 2€Ï¥|ÀªÌ Irø¸GGOºõ£øËÿƒUñqrøä°ûÏÝ/¢¨ß~9N ¤“£ƒäqÒ=üýÿ}üË¿áÚ~Uöûû£‡€m8º1’<ê%ñãnÌùø÷É =yÒý]ò0év“ÿ†¬Õ€ïîvw +<°CöLi˜„eVýóàñãoŸ|ûøÉïŸüÏ££î£5œ [DŽyD +à0ôróþ£oˆƒÿËìõøÉ!›ÅÑGݘ§ù[ø¨'ß&_Ek8äf³l)hd¾ßX€´}{§£jÀuý½œ0n»] þÕLˆi´‘\§Ýf `¯ÃžÃ;éVBJÿ­-÷¼ü ªþÒb•µÿUúöùzµº¢‚£á'9àZ’Ë®@V @ÀFä£Q­.–ËÕ•ÿ*Ž;߬×ë|A‰DÀù¿uZ¬¦«ÏÅüd4Í%¬öO—ŸØþ¯‡?c8ÀyZ?¯ÚïÔ&pbœ­÷¦.¿8¡~ŠZZÔJ¶4L¸’ûäe¶×Jn{EéÀÂp9·ã—©°dßÉq¬Ða&xØtl5,<Y _áŒÇ—@ù³Q R›c„Çãê¬46YA•/Œ9Þ +IÔ|¿‘tÿz>úöI79ìv“äÕÂíÆë¼(Bl>~|‹øm½)½ åmxüÿÄ¿>ŠX^ ¿ Y‘ºT–Hâ£î·G‡Ê'PßOšûݯP†gë 8©zÝ-$+¸Äqð¨V cN’xÃ~pØ=úÝñ¤Þüç#¬pGB‡|Ê0Ø?:xB¡DA Ðù^ %Ùîï‘“¹ ûä÷Í_w¿I¾A¢¿>ì>É`ú?éþõR÷ÿüÿ„Á*ŽÒuçà0¶Ã@¦¾ŸX§U²ßV-À‚=égÜ'l#nmÆlag§MÐé7yﯓ ä>ÕìÊ?ˆƒÚk«« Ô=¦¾'dÔã°â£<7"Àv¹"€À­JÈ<|—h-¨uQøš1Z6غ(6>`ÿpì ¹£ºEÿðÕ¼Æâ¿~CN[£t]¸Ä·ˆe”øÊû…1ˆt #tðñ.>§‚9ÛÌT°g±+³—¡Æä›f蟷؞A3jNP˜¶h?+¸3Ò à)±r’å•´0€œôªqc•³èÇ/à ´`ÿA*»xŒÙ³àÐÚÞ°ËÐÖÆzã_þWûµªoG¿aÔxzR|Áz˜}¶l4ÂÆmü¨aNH½'x…"«S´ZÃÕæ¼ +2Ÿkp ¬cíÁÁý¯‡ß~[‡¦àë¤ÄÏjä÷apëÖ­´‹¢0jÅ¢Ôb¶hÐ"­G_J‚¤¬ód5då!„//%8¹Ê¬ßz¨öŠ9Œ¯»9ð½Ä$ëéôw·Ùp²žs2=YnŠí±© [ÃÑí½´¹õ€`ÇÎuÀûs‘®A°²ÚbÜZ-™©ÏÇÁrP©ä{öî`Þû/n.àŠY-n–ªsGÁÇJöÆåúR·Æ6®n÷"hXÀ‡©·‡öÇ´³Zæ¦åÿÿÎä4( ]-j]b‹ µ * ÂY"¸Äyð0òT€WS/m3òÕpàPï˜euí…v`t?ÝÕV]a7(,¸¨¶`ð6¿¬Ú Ð'Åî¿Ü)š€×rx7‚颟Ôo•y ÙT´!!q+UÏûÊi˜€ÖF­õøñ’uÓÁÇÅí¡â£fx–^ôTN×íT¯.øAfÊRÃîZ‰ÿÕß½qu—B/›Œh}j ˆ²¶‰¨Ò[µþæà¿ü×ßÿßÝrħΰš›¡·–ØA]#æÂJ±8ƒÓ]ÁP¬w«0·d êa‚OhEßÞÜ_Â5üâ\ƒ—æ4n´1¶ÁÞ¯¾óX7¤ à167_z‰,_h“þþlýÔÈÎd5l±£p£?ÖnãTL@epé ÷'åûÎÞüªQu1^ôÎ?õ÷}P^} + ¯@Oäkn±9¸ß ¾0|¼ø¨ZMx'kì¯ò¢éòÜÊû9êóç#=¨£ÇÀnm,3 ú“ô(<§7ˆ`î2]1;ãÑš‰ ”ÓÁs¤à¤Â8¸ gï_À +PB€´§‹ÇÛ“ÛM_¹25Ý3 ¶ ¬ÈócS…?C¢|†‘X4@plìvØ`$k0Jûóô¨¯‡aK$1õà-‰õÆÆß6^ƒÈ Ö ‡õz—•ð"5Vå’¹4á¼Ýlõ‹ÇñÊþ­øÁ ?(O³â {£´æÀîÁÙ“xàMûìƒý‚`Uû6Zû_[ÿ߃¸ìZñšék(4ÕxLô”d°ÚêŸF\wï©3ºEîóÁ€î£µˆM jþ´0àsØ<Ê«€ï%à{›%zÜ€¾ówÆÔNG›ÃØ.£€ø;roÿ I0$괯 €³|Á¯Þ4+ÝÈ:ŒAµ /|ƒ­<}ßó +Ó`lô„|.-øúH +€ Ry\þ°»úÖß>F®ë¾ìžÐDá +áLù‹4®`«€JÀ Üöv¼ÏŒ­Ès"ÖúýⓃ'Õß…Á²Wœ6Ö[zß}:<kÓÍWße, Efv·¡^Y@úTd4ÿË 6À&›gMÞlãd®Q3ÐXó"w`&Œ°¤Ï> ÉhD!»µ(¨Æ0 ©à'ÿ] ¾8®ÜÓ€øZ;€¾gœÀêÕUyüA@U„«A­†Ý:»g`£Rkx18¡Ï¾,êÛλ1'5Î +=$ f±À9{êF%¸y>/¨¢8¤Àóc—Á}€K,•s3àòxáÒepZ`ü¿¿ÞOz‚;"->Ò'Kö«Â‘…}mA`=ñÃÞÿT.‘a22pK*A×:)' i}¨fvÐŒu¸ä>]+!®Vâ£Å·qkÅXl7ýh• ׬Ô6mÕvæL÷æ~¹7«7ë`®x•ZãhÉ)`²PsÌ9¬ÖZ­ÇKÝ ÙL˜'ÎÞ+k•eÏoE²Ƚ0 +*!Ðx!üþ†Ã“›^ÞOTW¡7į‡ÑÑâÿ·˜¾à¯æŠ»¤¶Üœb ”‘ øþb¹õ6‹¬t +€F`ç§læÇ=;( 4Ú§¸…S€ý‘îÎËÿÙAûǺ~è.mD~¼^;ª_I¬/Íñ@_Ÿ€¦j`ÎÑÑ€ +Q7ÂnP?ˆÁ}e¾‹bU4w‚ê* ¸ªã?;b<À2¥6iÇÂ÷¸µ‚E€ ?vü·F0± +”°'ØkA½âØxª2½ ޳h¯IαpÀZ—2ll„æïHAמ„éànWãrÜ¢ß ÀšuxbŽáBe†ÙLû5j€J¥öM5¹¥ +§¸e¾ <6'â¶Uym3L€V€pÕƒîJòM½EÁ>{> +OÊG_ÄRìŃz°%|Ñ\«lÜh­'åß0%l„”ô+žžb\ òUe5…•®èV»]Ab9)‚ø(±mñRÕ*T|V¹c¤ÎðÝÄl±m²ÛnÓŸÃËÃ8 "À©¥A~.a@ +`WE€Rä&\ÍDÿQxq´Ë#€'¨Åqé”ÅB”é|¾ëa‚¨~–€Ï^óµë 4—+µ$*w£p= ùgÁ~ÁˆO0þOökƦ´êüïKnVžZ€¼ÄZú~5¾+éº1ɸ—s©uè€KÏcâ¹Â” ŠÏsÁ2·ƒ ¶`YBb‚¶‚0—2ìÎ%J *\Ƕ—Ø‹ †Àq_AAÏ›«ÔbVÑU¸|@»Ñx  ²¼U4¤s%aLrg½y´Âz#ô¯À(ƒ+ŸîI·ÂúaT¿Žêå:ßÛQö=¨‰ô‰æ @;ÌùP™Dr¬ D.šO8]Aã‚õ|ÆÀ$€N¾¾ +€?ÅB2%O4z´uU—š´ìa jý®Üýºµ‘,uaAf‹ÅÀÔCTàË(ðìcöH +óÐïðâl€ÅðãýßÙ¥!0À8lD °óÖNggÏbl +ŒÕ°+ê(€GÈØ9ü¨cpëƒ >(ŬCÿk^Z¶V‚·ïx @µÇÛäk,€{¬zÄþ‹$.% x¤$¬ Çd÷þb ÑAwèÅÜKÿÜ +ÇŠ§CÊûôW´[Së@ºÓâ`/Ë0µŒÿc¿àösÐ">H}…\žŸ)q!-h å \¹Bú3AgR0Eb¥3€TN±þ8,(/×6ê1Ì·Jü¸p…ë|X–’-&÷×!^«ÑÔäÐ3‡Eõ.½¶ã¿^î C©S¨cI‚Õ ªîGÍæ­U¹ØŸ*ÖBuãG¸´d¼i6a5œ@RÜäÞÄ €€óT& “†3R[$©(hü§Aà¢x‰MÞÂ…ê}0\V¾<ŠZ^©Ä  +`ˆÀÕ”R ¾ÀÅÜÓ€ýµÜF`%ˆÛÙñ¹®;ÕC¶Cz-h1`ÙŽåÀ‹ìX¯´ÀGw—c!þXpFŸ•ç#!æ;DÉQ­X˜ž 6‚ˆêe/`$n)e½¶Œ«¼ž•©å¸\weeÚ r, ƒ¸Æ¦ÀËØ‚ô§àË;Y@`–HÊõ° +ð¨úã€ìã'8JƒT 3À‚½75ËÓ¥Hþ0 +p€$Jp$˜ãI2“øsþŒ`GáÙSð©`=$Nqí5h‡2Àí$ùM}i?‰Ã¤þ?þE†ço»KITæ¨Øï@l + ô›€ï0àèÁ/Æ;Ûm¶àa! ðÝ{Ób#Æ™ ƒ€| ô§ôW›H¤Î_ÞŸo Üíïp$åÀÇ=ˆª-Xäce€W— +àÆ°v}1€Täk²Çeîg`›ó$ž‡_­ ËDA…(kf¾ÐP1ÞóÇ}¤08:üðàÔ¿7“…ñ¹JÄÌ"/µ€ýú’¸üÐñÓË%ý¤ŒÛh|#ðÛ­¯$Átqv»²7òß@Nö~ÄÕJ #zE˜i{Â6p0ª‰ôÝ”™ù@Þòƒ¯fÀîô,:òœ‘;•ü"þ“n·Üýçî¯ëKõæ7|Òï¢îAÔ`÷`Ýů£`Ù£@îíÃØƒdæ©*KÉÆ‹Å« kwÚ;»*\Û†!Àv þíìaü–ínhƒãê˜ tÞÚcÅA†`Çb@&@ôÇáØt°‡ð6¬ÀJŒÒw#>8JØl²ÁV[yˆÀRzt°À \ Àžì¯àj³0],²Ø“r’Àóàq÷ Ü`ºÜüâ×­»}d  ~ˆÐmsˆ¡§Š~Ðê®%q³›-hvž{$¼Ï ýƒîFÎúa·ú¨k;³`«µqø°ZØå{ÕH¾Àæ1 ûA‚[?Äî|2p£[«ó|(4FA…wÏ?ÂF<ÆWl¥gÀ¶ ß«(cDQ »±÷.æ+f‰¤'q# +VQ+^¯­{×cˆy¦’½c$‰½«>OÜíê5&GÝäIýQ½}óÍoޏ‹ó~¬Û}òmõèÒuÊÛ€ê ÀƒŸÝŒCøŽPð0 RîÆÚNÇ:ùFj|`o c +€ÛàGc +€…77Iÿ·öö¶Þ€èðõÁª0”Pz9ᅦ=\' =0tVC¶ dØ¥¬Öš¾[i YÏõ,¦RðøuØFxVVðÁ¡Ã•*Ÿ&ÃÁ$_Cõ,àZt—ï¡1À¼£Â +á»!*åÂØT¹̯(Ÿ¯TÙ,.þ¢_®ú¸|+Õ±\Æ:üzE?œ¯»[ã:“¨c¾êOŠE슩E±Z¯.zóÞ¢W^T·2¸Ÿ‹‹åê| ‰Ü¨VyˆR¡0SV|õⱆJGÀÁ L ÓNˆç£DÕh5˜ ´2"3(¶™š˜Á +ë¾Îuqм鯸¾3õ/ÃþBVVnÖ_^ªß¼‰ÂæJu-ª×£GÐõµfíÏGk~¹T(–q4K ÅXàŒ*àÄÞSúïò—`w« Ë!€•"þ‰nc„ X@aðÖ^go6c³³GþoÁNq7îóþ/zÀPUî®QˆD&‚‹ºª4ÉØP +@æö”vù"@.ÞJ@£ÖlÞIk!q4Ÿw¦ºÀ–ÔÏÔà€rÝÝì}@fG„*Ü•1Ô¿pÕ›ðË׫Ìa,«ó~d—h§ưf¯Ô'æ<ÆÀ²„£ ¸¸@t{,4·/òÁ2y¿ºƒ«˜ VãjõòvÐ}¯P`YyeŸFmÂIAÆ„o¤Ùñil|ìÒ¼SŠ¿ä•«\ºH/¡× ‹ ƒzbþB^ŽãúDO²_9Ì!wÁ,ÄÖEpï'_~Ù ï4Ãf’¼Ü¬Ö‘ý|¯„"@3R¯DÆ@OZ€3ª€ ÆÈlµê×pV/}e»½mOâÛÖg1€[S ðd6e Þê0À°ÁÂÞž6ä`¹0使إ衆kˆÿOÝ~ã–ÕÀvÝ(¬‘0pz;€^p0ÐSZÍò}ù$Ö—A¯¯¢$ wè ‘ÐzÊ|9ÿnÙ?/m†( +ŠÅÙ‚î¬Þæ¿z#ðo`œã3ZÕ:;…VYka¯Ðd¥à.rð´Õ›-}Á+Î(ÊÕh#]؇7xX­ëU=áú:÷ŠW Œ»‡ñ—_Fû_~¹oI1€âŒØ×‰¿\e ÂÖ£¨„| 7¬|óWÈöêûÓ¹X…üõhªà¡ ÜŽ££$9LžEpFÝCv)'-š$NÅÝoªGQ|Ê÷`9ØQ4f¾X‰Vûí´;¬`KÀk ? ¾‡ù·Þb ÐLÇ^{ï§2”ïì¼%p3H‹{ñÖn÷yЮk +ðTx WÌó÷‡i΢ðÍ·8ö,@.ÀºVà!‚•ZÃî#ÿUô¢BWö87DvFOú‹ý¢?À‹°Òþ¢?á®O +¯piª°ìy³`:_^Ì÷ ;Ú²BÉóiÈo«bq¨U¸_R€Ûˆ2‚6Ö;ޝƒªÞ,²Œ"aÙ—nnvk‹ÅÂØ%ï:#Wúö"HÆKì8)53úõ+“·5Ás„!™C™-¸d•%”ax£8KEB4ÖŽPÔhÈÁ +еõýò7¬SÈ €¶Ï3ßm,€Ì‡ØÁRzôÎRr +`F` Œ¦£;(þïíüÔÄ€ë„ßÛÚSC ½=BIËÀ ÒwWÿ?³ËDì—ÃÞœλOŒ~0‹XàØ³a¸Ï @ªí2ºG‹>凼ÊÅÀÛŒáõÔP8üÐ!åp9Oy‡Ü¢âŸƒ†¥âÔÜe¯@‹@KÁÁaŽÛð¥ZeyHBÀÜÜbÓ9mLPI‘–ËZl˜bËFð¿ÄÁó'jZËÔ˜Ž’b:H…ݺ>~a¬ø"òsTÀz/&×Ù¶¡Æ Öø0#vˆ6æÙôÿéÈXÛ7ŒY-»Xó*à±Æñ¶7Û»›{à·1–Àc(âï<ØÛzKÁT+Àó±ÄÞÜé@ùï±±…c0X ÕÆyB,ôÑpž?C,Ý‹Ò cîÙœ Æ%%ƒ³Àvïìµ|`@ÁÇÖ¨ëÖƒZ7ô#x‰ ÷ÜÚ8Ûà®ÙÏF‡ æŠÅÙ G-áEçzù†~βëa­\*8ùY±àWÀI|Šz¹¹ös›’£¥`Ž+ÕÑ)V>–ûÞ\ZY_*Ú€=ìaIK$ƒ_™ ‘`‚fC 1سjá + Ýv‘š`;,³X€ @Øh¬ãhø$16 _>îª÷Kd‚×rCÀ@¿ øcö{ '-ÛñÂŽP,¼±¹½–w:o²*ð-è~¤®³átäC,#`¡µÜíÀè¬v¶Øl`ûŒDýwß»áˆï°DZI^9 <Ù«X!öÁû~0¤€~ó-? ©Ð§*|¸;l…á­A7XÌU=À k@‚Ž÷Q4Â×]îÿò +ž“ìñÆÙ qÑ^H±›ÐŒGV¼±>&bø ØxÐçÆ¦ Á¬{ã1í¤®ÎùÞ“"™jë§ØòXýƒ}œËÚÒí¤ÇÁm7«žÔ§æ + :ôô4eb…+ž?=ej„ 6€Ñ°öHñjPk˜`Hž½Ñê6¾kì(^bmdKñ k¥s€ úMÀw €þGÑ¡½×ÞÞ5ã± ¾û~ $~kùðßÞÆê½ÿÏÖ.œ< Û4[{Ûmõ „”õŒì ƒ ³ë¼‡ïž#~ +¾®:‚ÉÕ28ˆò qv€m4Ä` #c}Ž~ õ+¶èªE­ q«Ãy§¶¼Çé§HúÿÓ)—ûÿ„1wË…9ov޵G5ÖMبXgEÿØÕ‚ú2g¿åÓðÁÌ\PTÜëŽ ãWì톩å _.[`¯—Æ®§gófË`G¹ÂÇ[0>quœÓ*Ÿ¼[ys~P¾ŽÅùU…ƒ~©„<, @Î'‹Ý¹“ÔöÖÃdŒÖA³?1d4%òÄ0víšxÓo¾‹X6éìî½±Çmp €z²j>Ð~Ë Y½YÏ¢ÀÖ¦5 +f`gowáGlÀ¢&àb—Ý=žªóþïuòÞ®»ì)*|f v`µU½H‹ýEÜ×¹ø¡Àm§(Nipì½Y `P¯½öšn ÎàÀç[IqCùÀpk3Þ»—ûÿ„\¥h°çsˆÀ;$÷ékJµ’>y¬pI¬„ ÀÀ»€±"í•1š»íÇÒ%Š>˜ª®Î.å|¡‚KÅ-®Œó7“¡X´¬b‚‰ð] =7öœNZ7ßñ¨úSE–bo h vËq‹ìÇ$¿Öï)S9b£•:¼`Å™Åc¯¼2Ô<ëX 4ÿÞÂ._ +®ùX ¸»»ðÒKo¼aO wvÞÚÜ{°õ€½ý€Ö½$ø[[›,à$X ¸û`waá¥öÞYˆœç[;í- Rþ#ÕÝ=ôïuÅz¨ÔØ¿V©Ä~‰…ðEØö9Ø€D­4ûcCÚœþ^€,ÀšÀœ`¶†é Q[ ¢²XSŸ²ÈÓ|SwÉo#ûhÊeÿ?N?… +ãðÕ—ø>!GMõLLÍyO=¥€S|Þ”ÇçôŽÔš´À”^_ô"¤ÂÔ4ßZB`Éê$ ;d»Þ}CñÜs|©aJÔ»“\—HÖÚž{ÎÄÂØ»EÉ>EØÉ§*, f°ÃrÕ^cŽS~kEµÆF9²,àM! kú0Â<ãX¹µÛî,tTÿ¿ [ý‘,Š[Ûí7`¸bó­½YiîмÅiøÿÍ7iXÐY¸öÒöÞð¼ÝOm îÁàüyJðþ<Úîî/~ñ‘KÁ‡½‰ZP.M>eEx_'qBÞÓˆÀ£€{ß|KÀ!Ïìc“~P[^§u®Á-–`cx/qS|‹öžý›£{÷.ð§2@\« z <î¼éóσfˆßsÜy°pîú*cïåW@&=9Xk„ëÁt1ðP’c7"zz¦]¢Ó,Z‡áQ' á@@ü§ Ó|(mñié‚ÒÙ‹L c|à Çàø$†€çÆØé¢›$ÔMŠÌŒŠøçáÔü+¿ºŒ¹Zw~LçÃð_­Õ€ƒÀlT ¢Í¥«àtƒÀÅTÀ™béä+¼ùÂ&(ÊÙÏèÏd9°çÖæÞÞ[0l¼µû€a@ø0@gýˆ¶÷~ŽD:[»oñ 3èl-PÐûÓÿÿâïÿã/þžÁøØ3»…/ÏTÙ3ªƒøñ7É#\¹ÌŒŒ ¾°ÿqàþ@“Í3ý(Ž[ÉA´%aÒjm`MÜZÆÑ«`>k#nñ4ËãÏñ?›Rfùúc>L~…Ä*^-–àÉaôi¥ú<òüUº† À¦Yï°$ µ¢††øðèñÑCܰr|pøøñïºÝ‡O1ºÝ˜ïõJ¾z”$_ðÝbû_v»GGO’nt”´âFà/'Ÿtùz@‚‡å‘àÑ}0Øó¯{j,Àz©IIü9º| ”jhP"˜£ˆ™E!¶BbÌt8cƤ¢N/ŠW»È¼­VÆ­l0_eQÿ¯È7 É¥õàÀ…TÀÙbÛØr«Í$>€©k(°G m( +ö¶@úÿ#zÛPõ8<ˆÎ–@oª™ÀMik÷82k +àûwö~JÃÄSÖ íþpÿ¿µåj]Üðz–½ÒÌ̤73Q*M–&'KPÕ‹‹l”íM–&Š““(NbfJóþÌŒ7S.ÏÏÌc‹E¯<3?Sâ0 |ìƒéÍèÆ`sb¾Tú1FØ|¾úc{ ds3löÍ›Xž)sÓ‰ÒäPôl¯³!ÇøüD/ðúŸ,€/uŠª^°[žðJåÉ2îÐüÌ’5Íxó°€÷W÷®T*O'¼ª¿¤,[¾¸¸Ä/ßÈYÁ[ñ¹ßâRù奲ëí{éå—_^zyi©ú×7—ª7±v…» C•¼jÞiÞ¼éÞÊ=ÊEdä?‘§€/3Iu2DÉ”$éØÌ?X3Yò|qžà9 +“3“…^`.VÖ›)-"_—fñ‹\ËüV]ñË^uYn¢4Q¸<1ÿçŸrÈÀÅTÀ)±’ž´Ç‡YØ”ØÞ^Ø~cw{©>x °bÁîñ p„€ìÀæÞÏUªxÀZÃÎöÔÙÜÔÙ ¨ñ º>0äõ uj %£²Ùb>·7ÊAxÃ¿Ž™$h„( ðéù`5Ôó•é£ùA½À€ÊaÜ ù¼Å8ºƒÌSÇêO2V{l“€0ÒØÓ8nÉ[]]žc©þÌðøç`dÇp<ð'à:[¶é?êòQYÜ‹d±™$ûÍýýC3ŒÃf7ù¾àî“îKAµuãnÙ¯%Ýoÿ»Õæ&yŸ“oÂÞb”tþN>aç%qüÍÑ7}H)þ’l|ÿõÑï°>¬#…ÿƒÏévõ^ßGôD¤# pc#¬×1óÏGÝ#ä‘(ù×îQs +âÛÿ©ýË¿>9úöˆ0’h_*´§)4oQ³ ï.z~9ïÿFÖº?´gÜW‚ê#©Qfv¿tŠÂª rÈ)€&àÄ8ðýI}õóµ@óðÅA»³¹°ÕyëÁÜÃã‡@à‹ú›Hèü·vv!¶¯Aì±@gÏí0”-8Açÿ œIg`¤wX +*zS^ù•hÆ«û×yÜ* cÔ¢ˆ%wlòÙŽU¤pk0¸z¢ ûñ£r7Dy.&Á§ +- +€‘¬Ä݇ê4XÆ’ø%AmwÝŸóƒÉoxÅÙôô¬ÈóÜF¹ù4ð§z¾A7 +d¸)µÕ°Û|9J0MJ5ÁC”ÓÂæ>ltÿ¶·ø¢¬,EAÄWfñÝ»AZ(ÆQ5H`†Õ„°ŽeøÁ}F11~²ß}rÔ=ä9iú¹7õv2uÇßÚ-¾bCHõÃ#öFoDq·ÊøQnäS<8lÔh=d$nEÉ“XFDÕ’Àu”X]àùËʺQYdTv©!ã‹)æu®,(Jhº×øE{)Gÿ&àÄpJ‘>³€cªO@ài¶ö~ñà­_ì0Å{ÞRЯc½ŠÃ(Ú¹p­MG;·:Üxws»ýóŸÿœež§ +¢N +”UÉ‚Ip0,y‘®Îuè äyiª0ê'^}1U?ëÅ…‘U– ÛKû•JÐpWW?m¬íIõF#<¨U"¶>ˆZaGÅ¡Y +](ºJቫWNù\™À}FfËø>:€ G€:\ºêŠÉ¸ +GK±^»¹V_Ó3¾uŒ9ßhü xÝ€±÷K0ß|ƒ®{uV†õ„›[«¿ÞâM殂ÖCj¬Å‡Øã·×£Ç1îF²ê™ëÕîNý—(À“4¢‡ :_¶%K°öò>ÑŸàûAùãdí ¶¼¬ŠÅ …ÂÕ´Š1*!×Íáüf+a07WiÔ|³DàMÅtÛ‹ùE€3˜€‹Åd6øPóûH™õz6¯á˜° ×®-°óï…7wX gÁQúßwG¢JòŸÙ‹ßB“ðà¬3„UèlíÂln¡ðúËû¤ežoU¿¸³sáL5ÐÓ`eü'ƒ!¨p k5Öâ+B§\€M`høN§/fèÞI5ÏNòû½w=ÄU†dk­d#l°úZ IÂò¨}§_À=,ŠãWÆOý`Hðr,·Q:Ñ‹ Ï9üÐ!9àêàúá®Fû|7˜a ·Â=¨¯Ó[·Z1Ý?¨¿ÍÇà䯱×6#¶¦cu.vg¶‰ÝÓù\†·»uvé³Ñ::èn´V­2Ç—ƒfà‰ ÿZ+À3€Y¢ÂÐKC€u-EcüçŽQWa„¦r°ƒU ¨^Ò àß‘¹æ`tææfù!ë.yð‹³Ú¶”k¼h€ N5‰ QPžo²T]Ê̶ÙÜùé[{ðøí]¾û³ÓÞú9>Û ±mƒ·vùf+K(©7QrÀ ±‹ñÎÞ6¶N½?õ†seÃôþðoÅð€´$ «ØáÃÉsUÝ‘ÒaÕ €XŽ/ÉÏþ…x + Ù_ Ù§ƒíŒvûŒÍi°52´¿NÈ*ÏN°µy¸aÔGCJï^™p^cqäð‡ãÜ"‡âæâ?sšPŸ!„¸˜¾BÙãÆóáYŠ@k3«~±ÕZ4'ÈV$çã·|kŽÒè®EÉFc£õ_‘Z«µ^áËAAr¤lC +õBs­ÓË+y.-1ʤŠŸga¿ø¢ðB g —¬n~muRÏð±o&`nι;ÞfZ훎73d -¢Ÿl. ¸vM€ý÷¥pé@H"м²¹Ã~¿°ög*8úÊúHiívÐß³ÀP8±Í7ß|“û_£~@*ËÆü ¯BQ´‹SSøÓ6|í¤,äèHIN @! €øVwDDå¦èÙ+lHÄWJðF .ñ“\‹AùÛ~°ìߨÒB°¸Uãul»±¾Nш)*x@Öëx/¤MÏzá‡þø¸FõÜ(7ŸÆŽâý?zÕp ¤éê­(,[§ì@\ êì®×M¬czÅ0TãÚΜ»Ã:Ÿ)ªºâëä¿Å{´”#:Z‹Àß¾}G àŠ S9 Ènèà´Dƒ¯ ×<(£|ƒSµgz¹†ÉÐЄt­d æ æeöœnSDåò¸˜Fn×Ci«G¯p¹ÈV‰Å«–«RÀ\ƒG¥ 8Õœ3°À^®ñ`ˆzÑŸ)P€Ë8EÈ Jon2Z(Ó°I¢—€2ì·Í>ÿÉðMÓÉŽÂëhhd ¸ˆï XÀ%p>ãWôfJ\î_ß2ëXËT)ÿ¤wî lr½Lò³Õ5ù¿ZkÂPÝ‹ÿ [Á"וV²HRÛ¨±$,€oωâîø|’CÀMKíÓñ_ü@2‹*ÛÙht ¡ø“Ò"üKÔæ}In÷âmGB8bN@ò³?~uðÍÑ`t¸®`AÀün¬¯V&ŠlhƒÅŽ»–œÌ¬H·¹·6Zðÿ4;µ`Y + ³%yPÀ0×-Ú§Š_Ä,£X¯€QŸ‡&ºŒÔëb­H €ªy6*@¾ßÕ`†ïQZ¡·mÆÚ¬’'çÏbÎ Pk?µ€ PRu;IŒC@ðx `?-f1¼¶ðŠ˜ÌvÂØØB8ÀL +´¾oR%¨m;  Ùpxô‡DXh‰lÈ®‡zb K® ˜9ù~”>§G¦0•d±ºÎw +ƒáÝ—i¨òka w­ÁòÙÏ@H! Áøn™mÆØ8Š@¢¢bÇÃy{~fäà ¾½xð÷†r÷Þ?J'z1€(lÖïˆ?hˆ“¸:ïOwÉEï ¬×ÈÏt=ßò„q\vZÛ 9îªùãÅó@#bk?¬]ß`Ü«°Éz£FOâÖÁTÇ:Tß ÈŽ‚†€1 –ãÇqeW’Ø^Kn'·ÿ: +‘ä €Ú*ŠÓÏñeŠDñraŠ­ûÀ·.aϵ±LÀåçóŸL-€h˜ÿŠ©ý&à©cÛÛê÷ïø&l¯]&ʶA::6ñæ›°.V(6ëôHî6(TŸ"Øé¨ŸnD%chóÍ6½?èÏR‚(‡ò?QœJÔz3õâu+¨4€ç/–S߯?8(WCPŸÊ •ìYþWu Lw)B¿R Q>Ð{\` °ò»bˆ‚ùÆÊÿØÔ§°N%t|/*ÇÈrÄ­0¸„áÖ±_ø ñÚÑû´@ø¥)€ú?…6]gúûhß)xaX9è(¼Eÿ„‡M½†[üwžxÕ/£e•OÙ¦†±¸ ‚6¢¤þþàðoZ”ôl‘ëÏM+€#1ú›ÚCÀ^HƒzÄÕë°<8z>—ŽòÖ)s„ŸuÆ-êue =Ý€ò;¸O·OPlð©Åi>˜Œ[êÓ´…q1Ö~\ÅT_wº xÚXÀ{êöK½ƒÁ8˜%Eþƒ½HƒÎ^Þ{óM÷aP–§ H­@ϵL¯–áÙaŠ= Álp7.rX^†zç×=8MW½\…&_ ¬Ûãüâ"ŠðÖAˆçýtÁ¢¿—Ëìš÷Êö… ïG5¬Eêh…u€~E€_@6¢pòµ×^ãR§)p°©â‹,’ùñ»lîÞ¤7îýó"~ÿ(7oÄ™øÁ[±7ìvTNÈX»¯ËûZÏ›F€Ñó}FÂ$ÀïõFÍ/–¬f/¨­vqÁ×%ïid»¿¨®%-Ù X˜~v!bà8Y‹¤Ï^+RGñ£¾Ô³>ü?~Ø9T§Àk³ÕjÅ+ZgdØ»”•9)QQN±4™Ù¹Aè{ÑÜ4r:õìòr%þjyŒâ.2tÄyú0O è°&à•—®muX‰ÏýÔ"}.&à,ñæ›[¤‹ùÅ4‹ $¾3 œÆ‡6„ l½×¾†c°ÔŸ.Ñnój8èj¸ê0«‹Ö,HeÐS¿›ç¡x€ëš@ø0Té)øP1„ÛjÍ(@Èn[qáÅ~·ŠÑzµŒ»@ß/ýÔ“Ln¡0Uï.}#­Ç\H`?ôø*Ê[¿sD×0*PßO À£? >ïò¯^ +¹x0bµ¿Üµb-½Þ€Ý7”ÊÃæRȸÝ^)6 ŠAq²†{¬íIs>¬ƒŸÑÆÃx¥Ù…¡ÀÌ: ˜Æ–:à @=ð¦Ì­ -iŸÊ0ɳƒãβŒ±Œ?Á^¿ kŸD#ìhÙ Û±‘Rˆ¥<“+ÜÕåÑ +ê rß°sA€x¦*Àböþ¿WXWMé¾e²WI›g—ÿßêlJÐÇ£lõ[PF{ržF¢+0ÏÃsƒí½6O{a›ƒŒÿ˜|ÕýM‡Uweƒâ¸?9kE€YkÅSÎô¿ "ûtýÃûUgáj²»µ°“õ|º‡–Wh ‚ö¿ªRXVë,Œš ª-xRM¬WðS` w¥.ÕYP þê‡^d°K ëÌWgÙŒâÕm%ôzJÂ0*Á—ÖYbÌwÔâCPŽéjP!ë~bzj\})…°»ÖcN2 +˜n²½·)ÀFj0ñjû ÷7 ³YÇO³tþ‹×ÁcÊu|Èw]Ùh%°ŽCÜkYÂÚz௮®†q9a00 +|…úîD€;Ï „þƒý| ùœ¯òù?V\=ªî·,ØÛ›–ƒDb—›l¬Û©ÁNŒ€øY +`íÝ ÀQ߀«ƒÜÑY§® 0g#âœ["éÕ <¾hǤø$€Ïµ R,–Aà’aKD3‚Õ4 +„¿Y‹¾Æ°j[d¶Õ-ÌZžXËTõ+Up¶Z,x ¾+î9DGK]}œ›cÒ[ëU'U¬aÂFƒµ0´G<ÉðheŸ/?çÁýSƒHGð|Â[qÇô|uM7€±-”Ÿ7Ú¯¾¡vyÏZ`Ž/…ÀæÛÒÿ®@úŸ†€-‘0R{kgg«£Œ(ÎcÑVl¾É1I‘¯0ŸÎÆŒÛí¾Êclnó¿P!pñ«,ݼÁ+bÀmæ%a³J¾YuâEÑ + E|Pƒfϰ%KAÄþ|y‘A¾Û›—v]aþx1Ó‡ ÀE‡ÅëÙÜÌvÅúx†½±ÃœX\à:ø?m +à‹•/™5ùž¹QÀ­Ë†³Ä¢;½"@ó‡ltåSàžãrV`êóÑ:.:®)O¾7¾Áðy1q'[! wqPñ¬Ÿ¯Âs…Iÿ["} /Ö=<ìvw";ÝG_ð1½£‡ÿëÉã£ßÿ.yˆEO’(Œôj@{ºpŠxÅ+…•±BÉZ÷'­¯Üóß"ºâ£$>ˆZñoq×yï[qÂÇð#ÜpöýëÚžòÎ +…Ò zï(è´ºÈ0Èp‡q+æk½»1NY­7’Ç|rÉŸ…Ü/\™¼2Y´7?yòí·ÿó(†»Šº­Vü0é~ýóû®`اû/G¿×³ÿ˜=B @o¦ã,¾z¨( Â<{ Ð~é%¬¥HC÷¤{Z°œÜù©žë]x‰E­¥Øz“µšÇ¡$ýYyàv£`ð FÄçU˜Ð«íÙª|!ÔUs­îO\*\¾Z˜(N°y4±XæsÒ‹~u±ÊgÀý•År¹>_æsÿø]¬V«(°5£X„?fsnÏõbG=Žm¸ˆöSàbͨ>oløáAýüñßIvñPbÉërar"p—X’¤®W#Hî`¥ªRøâ¶Öä çÂeõÜ3ÆD lM7_=¨5Q(.Ö£ª‡{< uÃ8.^¸Ì=ÜþÄeU½ÆðÅa^x¡ð2 K誷X­¯ý»:N¬<‰%Wy艩I—w~~,ÐãÀjÅXÅ!ùjÒæJ½ÙÜ_ª¯Ý¬ß¼¹‚¡º´T¯bº^¿!·¯TWþº¼Xš,ÚŸ_êR¾Š¡U|‘ë­ðV}_E.g‚EMëê᤻Èn›îÀ’š&ñ£Å*ŠtÕf¬×ÃÑzG-˜]Æ›÷)ôa2VüàÆ$_(éSNù¼t'MeÂAHœæ7:!Ow‡àŽêbÍz9øCŠ€?`-€q7…U”cñ¥ç(ƒ+ÕêâJ´árÁO«'Çf½¹.Ÿçþ`j¡ð¢ƒ¹nóÝ á8ìÂ[Ö’‘Èyö'èÕ“GðèÞì•ñq)ü«l­;>Qà5`¯]4¦zMóÈêçØ¢ï¹Â¸k¼Sdäù!ôËévã®ûѱK8¬;ë[h­u»›aôMòë#‚d‹ câ&…OrÅ‘¸{ô? wbv€@=ÚçúÐ3’ÏÏXlïmóñÝ…W^btŸ„'çE|þjİwØ(ö•ÐÚ > àxÜ“jÀø¥˜ +œùÞ8ÆæŽ¥óÂ0úcÚÑXŠ»n£œÔJ"6œdõŸŠtD³~ÍçþUFB!Ž/"½Õ7 µÔˆºKì LÅ+ìI„Ýê +i—<„ÃÜ1Ã-vå@n*ÐS-2(„ŒtÅ q¶ƒ?ÃN§Å~ §Çøtû1ðïnþ0CÖî+HD’‰pd##2øõªÅ"o kg3€m—Œ™Žpi@6€6d||üŠW|ÅùqlâŠôþÜœœ³Í–LÉ`xc(4\*ò%!s¾Kx+ÇøêP6PåžããŽáe¯L¹Âý ïyš±Žcƒaâð⋈åF+êëÑJ­ƒßþöàðn%iÅânµ‰ fоØxÈaµ2,Ãå cÏN°Òo{mëuž[zzíCp{îDÓ±kS2¬8`-€Ûlg`„ÛQ5 ºv Åm´½µýs­—6¯™y¡Hxƒ§¢=p þÑÛ‚€¼ÈÞì,îË,›ÿ†3‘ר¡*Ûñõàós‹-?VƒÕÚ*+’ëW%c€QW÷™,—pT«Õô·Õ +ðÙ‚ ˜@¦³{ʨ!NG­KÌÌCŽäÆðühH º3¨˜çûf)~H0ªdÉU,>—öõ™¡%žk/Ösû_º21nÌv¬¯5Ã=¹9WL»s ¾(¤Ûº×x8ŒÏA'Œ±/ßô¹|,¥yà€)ÑjØ/s¥íÁ +Œ®B\\ñ +°Iì”)jWeeC æÆ¯À¿0³14È,E O-ÕãÛÌêŒ +2F,Ïú!ëµEy?\ÁàMOñ=\äƒÉ`®7 1Ëấc€-Áž².Çuƒ79ÓÀ— `[6fŸVa-Aƒ]KÏùjùÇÕjüͳ+&Ö¡Ô¨ ˜MjÈ„ž_kÀ1ôw80hž +€ PzøÝ„ û-DO»¹ž]~Bì`%üjøªP®¦X¶ÇÁ0µ pí•Ö²€”;»lðÆÂ{ܺÍGtœ­íõÊÖ±7¨I@Ñ5;KiðWÑ$ @(òRÁoÈyƒ’˜QŸ`ÝE3äµü}ЈªÎXc °¶Ê¾ÙÙtÃÄ„)õÏ{:½Ê3`k-ŽŒÃRZ+šts6¸Ñ¨@¸ç˜` àßQ4ÃX»`§¸ð(H)ßæèr1vŽÙ÷²ž1@ýÛÛþ¬#Íg§¡å\çr »0…¦EuͪÈ0;ðõ +­3T.?Ï£iKYd 2ù Ó™š›Ý¹¤9Íq“ÙâpÇ`5 Úа²°ÆUy;¹;ÖOÁòܲÛ:kÁó4À³Q`r§ÍW \þ*c|®_°£lêÑ î£z>NS@1˜à¸xlÉ¥8L€H_¶÷Iµ€Ø ìt:°/-,ls?@Û¹m…·54©Ví’PèP³^…÷'ðM4LÈu ~õF5S·¤äù+€ u$¸š*ª²œ¨T)k5Λ”G°Bðt1ÜÆ¡ + ,Ðü=`<é}7¸>5mÝçð6ð™lã>¨EÎGh0K›óûÆ\õµ35NÊÎy_b‡œn“ ³|—·^ßÀ_ovr\ +À½‚.¬ô±¦P„ýàˬˆà„§´Ì‡“b°wF·o›§·òŠ×}uP!—bÍØ •MU]ž«´TÀ¶9 1ÏF€üÛ[›¶Pùœ³\šút‚B/ÿ†è´Ù¾Û^x…ï l[j6þÑÎ*0ÀÆB|RÅ‹íM= HÏ@n¸€mZLš¾Góá.Èëø×TTU™R@çMÓu¯‚ç\áLÔêNð¹_š S20 ÒdR´@%SWdkìì! +_w:µG'±·mè Æ@ÿ;Ía1€T0ÔóýãT àxÒ–ÞÇE~Êqð “³Þ$ x¦ÅøŠ†ÒùÌ®ÜnŒ5 ™+ðçz³,>½¨ ÀŽä¿re3ø`9Ćª··gÀV\˜Á=ö¨ÜŒoá’ Q*€eZöús²к!1X€œ@Z(yñY`SùÛ WA5X©òÆhÜ(ÿOV¬®tôø7öÞ60°Ã'†Ñ@"Üõ¹àÑ®³H²ËÃ[lcjŽOðùA=Äz}ÞW€9À^ŵÁ}¼R‡ßǃ{†D°5…8Ÿû ÃZ" Å~qJÔ•aÈ£FAa‚çÔZHÃò·e®bå”<Óm©À/²K*ù—3™™h× +ãmØ’äëÖF«•<ìþËãß$¿mF Ý›à3:‰ü¹Ókù*Œ0Wd.&øPúëö&æàñS àøI§w+àó‚Ü©ýŠuÄ> *úþm½DÈ +] õØl»«a +`ç]œ! õMï¿~;¢` €´30•*€åã +_öò…©T„Y7Žtƒ×ØpÀ)zùLðy€^ @ +€¥5Žd›8¼®ØŸÀ +`h Œ8¦ò1€Hg¼Þƒˆ¢º?Y˜âKºA9>ç–"ëóñÌa .Õ“Ø4g›/6¶Y ìAþ[U¾&"œC¡Vvº 3HA¾˜,Ýn*nï³Drƒ%V+SÕ#šÜ¦ÁóË%íf}3»a޽SùULs‘?Y*ù/Jt0âkVû€´ñŸ{gТ܎¿‚îcÿä88©Þ¬7ù¶.I‚i»< 0šÃ(\Läò.<¿"ô›» ¿-$ýI\NðàXÞiï <˳µuMéîÐàGE€±i¸¨£Ç‡PÎØ]Øæ1°5ÒbÂÜVì'^g+i  §p7ó +@1€ã +÷÷æ5§G+€ €¼X­Ôh) @Äž û<×SgްüÏZÀÀW2?  ¶;ƒ({¥’ +ö>_Àƒ{ÓŒ§èx YÑšṵ̈Ñàe÷)¬öf–| Õ¥2›é• pÛ“U{õN¹¼Xöø&žùry¦ÌwHUKa=Xñùš!ì¼èÍ'žG ¼¸¢x€µ -{óóåÒ2`É+ãìpF8”Ë¥*ßýƒ±ŒgRš¸:Q­/Δ_.ãSx^ê/_f£ÄÉ©ÒÄœWb#E6o-¨!§&ðŠ8‘˜kÉÈ‘}Øqu(.¤PàÏèùÆ,ðm?H”uì¨ tÚ»4Û»íö+Úˆ¥¶ô‘€î©™fggaK@áC61äS‡ /]k/ðé#‰Ìºi-E©9 è°³¯ŠSœ[å+˜cyÀúbÚ¨?ЫÈÇàCpJljüt1€×Cèÿa + 0ߤ,ðo°òCvR¼ê-‡}X½ÅW7†4üš¿¾–'!¢«~ˆ‹HÝ£ôB>¼cNû‹} ¸¹I½¼zT1×F·)¬qQã¸nàr‡fµ%Ý(V±×ù„æÞÊ# +“pº8U¿Ì”‚/£ ŠƒãÆáøþÌ-žcÈâ| §T'ùêÂb™~]û*8Á1ûÈNã¬9˜ÅwªP€v™+N³&AY§@ÞŒ „²ÕnP£-ÀÅT;öÞÜ#¡XÝY9ÇC~LœGàK=Y_€El DÀsâ¦Pù;z@1€7èÜ·7÷À{vøÇR龫ÂJ0[8­;ìv:áí0|p+ _üXE€Ñ1,1ðßµn˜à-ïS뫯UV8±€ â.—Ÿ>€£ÞQ-àé + Þ¬¯8¦üÛòpxˆß°„;¤ÙE{º›/‚ 'p?´Œ*·!(¾`ki¹M›A”ëÍäv‰Uj!ïÿ2ŠþjôÅwÎV—Ãj9i„Ôî… +“Þ +¶TR•ô¥\LÝ)g«å°Î™ëÞ"óýf¹ì”>‡pK¡w‹Yßi6UØ\õ#üú‹STóW\Õáĸ?=Ug›½ùœužj×põJa Ìbc\"FûÁ"€¢ï#p^ ˆÞ.«vAéW^jon³¶žÔDª”òä>)¿µÀ +i€Îî66ºÆº}©¾dLd°ÕÖ&’E2|ˆ›lmímíñ8€] ì(*è•ÁÍðv ÿ¬X® *\j¨~ÅT ÀÀcN3sùH½Ñj¬Çu6Ñht«­Özƒ}ÍëëцœÆñ¿”´ä¼P””»LG +³OˆöÙàL1€(€¾¿‚À÷^ ÀÈÙ°‰¯Ç—ÂG|]V†*lù¬§ýña8¯XàØgXŽù¡Æ§¼£èÇá‹W½ò \1Ü1ùÏ—HÕØÊNÒ/ª–[Œ +È3X'PpÑôÈGz'X½AgàMàà=ÐÚ”«_¹9%ÃÉ0¬Ì‚¿á|ܸqîÈ œ ;«6éè§ü© ßÞ{%¿ŸÂ\Î\±4uÀ7Ýc ½€4yö*€a½=á÷ÚÛTj¯ÍNF#Q’eò~.îÔÆ\g{/-(¸ÙÙÚÖg7Q{AL/@õÓ`ØÙCAâûêt:T8Û­­÷hØ)£›ëa\ÝÀµìSq|@Í>ÖjGÁ>ûTbd¦uÐ…î‹?‰¾i†¿SÍ Qÿz ÎAet«_> 1/À°ƒ‰õ`#\Ö‹dIà˜8c ºsðM¦pvŽ.ÿæÀ«8¸¿sˆß`&ž)‡±‰¢U'×AY>Éé–‚¤¥‰`NN:ø+ Ê ;TW¼‰)¿ÑåCŽó¡O6Á©Aø1¿ð­·0æk!0ûÞtar6U9¬U¿ôbi¢ø‹e˜ îP "¿š¸3a Ÿh±¹øåb±„©Ú‡´µÎ@qM!û¬ƒílJ0ÍFEXdÍ’ÿ¿P ¶ôXÐÖy¤AÀg¬öøBÎÏQŒg¯ o0@G]NnÓ¿ƒ¥\²Õ“‡X >`ûaȆöÖK à¹ÊÿdºŒðƒÑ;{Øp‡e °„Vbk¯«Á‚ïÒ¸`1Û0MÒaw÷x;€\ k H{Oæ?$ý]ï½G7£„=°ù4‡ñß6ý€Š?S`ûã¥/Q ‡X¯óˆ2ë +©@³Oà–┞2 gF(€!1gP>u”ù7W­=ô¾W +Eß/%Q—Zåef7/a0ÙŒ|¯Ì.áé±çèóW§'«6öã¦qT­Fñ$ŠôårÖ«Ë? Æ>`ØzŒ°¹xÄElwm¨{ê_!ÿ±„C`çC+Üð +ì ÀƒøÇ&ÖZ´’w¹ÖfÔ,³S™¹_¢ù(PGÑ +(Jòȹޕ+EW¤_öJ‘M ÁrÉ‹–' ÅÂØsÞõëÞuHžÞà À3Wò»Ðó›íÎv¦µwÄL‚Þ™ÏþnínnR£skÌïîÒD¼´ÉBýÖÂ6õÛ"ÉÍ-¸|쳇ó¤—ûQ*û;?ÝÂn:F{“‰(u¬ÀÙ#° `1¸c§`GÔ€øòþ|Û3ö€XP0¿‘»ù5Æ·Höè4€Tƒµzð0J^®N²ndM€Î°"À> ÀÁ¿=Àk8s0(<‚›ž¼©~‰ÿì ?UVÕâÔü"ã6|9´æÙe'(‹’| €ÏvN`¼ÏÖN³©Nð^÷<üeƒÔ,©cä‹Ã³S{{»»àíöööÖÈɧÈg$Æ6A|ú‡’ ÝÝã+D¸˜£½öÖ+ z¯ + ØdfñŸs»;°$[ÁºÐš<ÀIcc(ì2ö˜=_lüýÙ;ÁYÛÄñW ¿^ö>T´ò +€"@ +€qý>à €½žªO¼vLÌ=] @ÏŒPCb=ÀçDqþ€¬ 0 b9ðÙIÛõÉð6¯xØlNÞºm$–¡ +Ôh+ôKµÞNX¡Õ•¨Z*•aXëÎûŠò?‹°Ãœ ØÁ h€¥€YŠp,6Ý£•0€ÛQõ…"ßH­p£ïú›]­%AøÅ“•¦jHt?ª®àŒm©ÿÄ<€€ÍSvÓ¥Ùì‡uˆËåö`âr¡xÊDžØ{hx–*  "Ò§³Çh}zgÉv*w¤ÄÔ¶`øphuÖáS} în¿Ä*l +ŠëÈHvœ¥wàÎ÷4ý ÀÎÎìÖ^gëUõ"°µ·ó€ïÅê6ŠH<£?­K‡*LÇÎlÊîuÁÖæÎÎO)@ðÍ……k»›ðÿX ãAË yñÿ§îo›Û¸Ît_œ©xB‰´ jBDb!®b«v5ÃBÔbÓ€ÔDLHa¾¿BUðPCÇy3³K/ü1š ÜG›ç¯¤-g#NíÙ]Þ9•/v~×½$H‘%;Sÿ}ƒÄC?w¯u]ëºïõ4¬?Õà¤`JÔTm›šPùŸ^¤²³ +@f +à +ÀÅ4õœ“S +`3ªý€Þ%  W3&N㵿ç$bÿ‰µW`™ßËÈëZmGÿ´™—ý8¾OákPˆ6‚È»¥tª×­íP¤@7Q>ŠƒRk¸HœÊ.¥_¡(¢2:OÑñ…ÈD•ØúÅ©ó—F¥ÂGVb[ãõh,QÈñ¥1â2‚BÁÏ+ƒ”=–¹8÷áÍÎ7(f8Qä£-‘˜ÉñÄ +'„øåÄSGåÙÙ¹8Ko±¼ô) +ø±T€Zå[¨¯RÙŒ•;O»ÝÏ»(€§ü±Šsæú~‘®pÿDPº¾}¯bm‚\-—ƒ`µÚ©rÑ?Õþ½]1Ö.¼þï@*þõgGìu„ÿ)øcý‹ÚLÅ\ùT>§ŽÎÄdNx€¦zrI @9ç4 âèÄtâë)€ÓZÈÀpí W‘ƒèÿ`˃k—™ž®@P– ’¤Ü\ †RÓ0®âð_ä½oÄ^!¨i`߆€%›YÔ£¹8YÖ„ªLÂxo5¢ƒ­~D‰[;¾Àœx猢ï:®…σ¢ú&hVy{ºÊ +ÀØ‚ÔõWñ-ÜqJ¥ÑVæÛp F%ŠSy³³ó¥%®Xñ‚FXŽðóU‹¡#æ< · o#ñ½@+ÅÇ?ßÔ˜w'¯éõYhž!4úÎnù;ÚæŸî´;B7å¶‚ùÎ*•ÊÓÊ +hG§Ã;;]÷ر}™O9^1è‹–)$ÚÙ„#)0 öÏövwQèˆäÞªñnE{´{}Hã ü{oÄxþy;…ÿ{ÁßÙ[€`¸DL\ñÃ1€oÖ¼S @MÞ7 ð+á9Wù@¼~’AIêq ± û‚Ôê ‚´ª©Ì{lKÿÅKZ G@NF¥º~ã§xøÖRU¡C@µÖ®"p ïpZàK +3…hXàÞ¾8yÍH¥ÿÈ*À–š‰à ÆèRpà  ¾Ò­TÚO5¬/$¡Y½¡ã‹m{\.hGÍúVš Ï*ñ;Ý^Emˆtžáeàö«ÐJåÎ=Uª±óÏ‚? +yþ}®ë|-ÀIK@zQÀAî¼5 ;‰D®À[k,pU-À[c”ü*Æùx»˜vNÀP.6‡â \u˜ˆš9¬þ1žV݂엽`MФܚlÿÔ™…ùä ¯ÐV–cº4·Òmw£„£¯’KðëÃù­À€(€dKß¶8 +û[ƒÕ¸É,s%I6L4οyœ™?í!K‚0êÀxR%çéâðŠFë¯6=°ª±Ìêëjâ‡óïk³ÿÃDÄ„·ìÝ‘C°j~›’F2ôHýa2ý?,Þ ì¨7dgnZ~O–ëÏö@ÝÚõi1ÉiC€–Cín·‚g¯þÄrxYã^]-Ò^\@Ñ¿³û¬ÓÙßQ7¹ðIޠȢÝíü²ÝWSg9üEPçÀ¤%`žBÓöÒÚð7ÇRQ¤f«•¥G­FëèèÛjsó? €íÖ¶ ÆÖ«†.6áŽÇß? AYš½l‘êq+Ébd€ÒMÓHû‡Yjê²Vè:òæç,bLâYn71½{M¾L}lƒdëp‰¸²À› +úe~Â?™˜îvX]]ÅYæ±*hÙ ãMŽðG?ÖäÅÉCYp:·”ÿ‰¦‡jÜué?$(Ü,E‘[aü)N×⤦ܬ3ó}´Sj±_°.cQf–´Z­ß´¾;AçÂÕrŠ®Ë/£¸¡¡·”؉5ØqL÷ÞåáaðÊwûöa’¨qŽlý>Åÿ}RÑÔžiè§s׳ò+S’ªµjíÑè{«D„t>1 +‚Ô––ÔQ `»´¹¦[i£¦E™ä „`ô÷R­ ¼2EL!ÑbgLpü`=õw¬P̵RÞ¦øÀmc³9÷®œ6¤´ .€õðë¨A€Â 0èSÌ÷]-!¾Fìô v½ÃM°±ÈÁ௖F•î„&ð×rš‹Zæ˜?cÇ)Ù`ÜÌŽ_Mt^:úówý÷×ãïŽÓêða–Ž¿ÿ.Ëþü2ÍÆ/³eEò—äy–ùq¢1š¿É …qzü=GrÙ‹lüïÍü&ͲC`9FÙ¿gGä¬8J¿gš$Oš«bßÜÿw«8hæ +€½ -`8nñ¡Àæf¨¡ã›Ã髨Ã̈́히^ùC šž&m¢$#!²ô%Z|’ÞGÁHj|;þÓø[7ßè¯ÇýîhÜhøþ2Jü’üu–ŒÆYö}š¼ÈIÜ Iê4ãñFIš«µ`¡Ä£ÏŽ¿wfúþáUºvx|$dR§š¦òˆ£!gÍ¢M›Ý#ÍÂñ1ï1—š´ŽÈ8GÇdÂM’Äh);JFI©À!%Í4iÆ/BïI’QÐ$)©Â5:=¼€†å>q$d½BÉO×tüS›Q¡Š½AØû©@[m~õaÒ¾" +ÊõfŸNLL¿gÀóÎÎàó><43PÝ ð—3¯óöúHÐÌ·žÚôÕ™@ + ­1Áð34( 6þŸÃjbtþb"1À™¬% M¿|Þüµµ»«k¿ +…¹âry-7Éä<ÎjÔü¯kþðaèW}6R¯Q Ç—UMBò‹Ps‘Tn®­Q’FZ^^.—Ëšaä×ZùëeíîÝ»Õp­jÝDoËÚ‘³ù>˵îÄÎüp&ýo…ÿ% +à’¾S +`ø Up€SМR=®H +@0QÃøy¶&!\@2 ùŸR À3½»\þý³Š?Þfgo-”—.ß-/¯Ýåio®…¾¿Z.¯éÑß]½Ëfk¶iyùþ-·ØcÍXш1j¥à×!»’â¤)æûeŸÍù^öïþšc“æáÏ­¬./oÍÎËl9™†ÃY³úer“¦œ1ãäö鯅ká]Ë(!ÔË’»å‡j7¼4qíÉ®iÚšUÞ>øÉ\¡¸¼09ˆ¦°)ÃÒËÐ|èNNÖ°|yùÖ­¹™ŠåÍe.íáé¿u¾˜ÞSÜ£ì7ìÛtÿ|¨ï˜¾ÇîÜ«°Í½JŽ}Ç šÒC{ÙÆl¤Z‚.Â_õ\O›ÃY­¢ ‹`Y¯WéõÔÜ`ÐQ`Å@•Št5¾î³õ)ü1S\ÑsµÕoÚ¡'Ùÿ'¾ºvR ¦P5‡É‹Ç͇ÐôëãcJn¤À߆M! Ú‡ñaœ6aãM +z^š’êðŒ³±›“*ûõá+MÚð§ìø/”1zôyúB£½f'>®0‹^[L÷8«&1)Ñšå±3 +`mU +àÕË7Àæ#\€Wáíó¦åý»šŠ0é›KŒUZ¿H¯ ÏÒqÜL²¯bRà}÷—ãìÊÌø IÆÏ>°åp&HgÏÐŽþñÕõgiޝẩ¤Çÿ#³oÿv|7yuˆ+­É7tˆdFˆ#6æ G5œôWlëŽ5‘væÇcK†ä¹:gùòôØ·‰Átò?޳$ªÒíp‹|—d_»”·ª€qöuœ,•‚92¤6çÏ­™4ýHÓ„£qžs Ö¥‹‰Ég£l5潨ù]û”ÍñK){€§/üO)÷¦²Ü7}ÇÖÑÏUˆ;*+(kqGS‹HÐ÷]b«(ìä XûÎ`°»ó9h¯¨Ã‚ŸÍ?g#Ü„¸ï:ÜΙҟ“ÃAvÞ;Óíšóœ{Ö¢ø1¥¨¢ÜP=À_ž rϵ\‹ñöhÜJŽŽFãµ/Ù– 74jÕkI†»iPª^i9î¯Pï˜VO¤(€š‰‡ŠL+€a¶¦9f6/t&öäïÎ<ÑkYÌ—¢F£•޲at$­ÿ\•µÑÒº…ü' 侓†Lmfx±ãÂèqÜ`i˜Ž“xc#JŽ7£1©d‡mdÿ^޳»êg„¥Çýáî·JYÒõãBI“ÍÈËéácš_:(-E£ž½.D'y|[>TÆfÄ©-ga^&­mGn‰îÉ+}4,Ĩ^.ÖgÉšNÓàû# elµø¤­ñª_/îD OÿQãSÀ{¨€p«¿œN9@Ðöõ®pÅ=0¼§*¾œ¾Wã! Šu± —ãø÷p Ú;¼Š«Ð8al­æ†ªlìÔ¹ßþ¼Ý·Fêx¶ôÏåvªô°®4µÜv Ðh( h öqxÜÊkøHÖeòˆž<¦IžÕuhNÏIßhÄx”Gü§k“äUçÈâ‹T‡z» þl¬ +€ë(G§}L ÞÏÆ6§ÝI `íIüâÕ›1IÈK]€‰åHýûXþ0Þf$YPšßh´’V+‹‚¯ ©,U´±ÝPPaTÓäV! Md—?ˆ;k5<¯Þƒp°(:Hüðÿ±Ôgwt÷¦’‰³ærš &µ5Á£ìQ¨(qžI”~3}:úô›QõûV’TP 5€×8Ò°B9ƒ\iÍ©ÂßÞÞ¯@|a àŒxèἩ,ÐŒP¯®&€¿'Dn¸¾·¼ OõÒÒƒÆv«uð}óÉ÷äHÜë’(Hͦ¡¯¶ ]Ö$z‚¡3 2+Îã׭ƆWÆa¬yøeY¶Ö[Ê*P×£GრJW)NÐÿ"€’}à-ý»2œ•¹â$niøxA+~µ<ä'Åù$+pA–á„ÿHãfqÕYk&ËßL¨ƒŸÆ>#íüÚ‹¢‚§j*[uòŸ+‡ñ‹)àÝTÀ<W”;IŸ×È\ÍK¡ ç¡mGÏ_"@±~­ÔÜ_‚ª±†¶².ÖU`°¯ØÀH|$å?0ètr +*÷pÚÝþçª7ø\ãŒ"*¿Ô‘.,ýÿ/`OåË€$SšÙ"ÒÃ9«~ ü®%x[yš©«/[¶YS­»‰íãÑÁè8JýñKµV+rŠWZ$³¹hnë+L>À¤ð¿¾80p€jÓ?¼ÈÀe1€Ëñúc[þ,Þn<ÕúÒ" + Ñú×û¯£³$ëÍÄ€ÀsašE¯)€­4&ÀŠtgËO‚n;6DÔ£ÍPm;Ä&$ki±.ÎO~´FnK³`±´Nq{OR(¿ »i!ùÍjk 1xd +B¶º¦×fÒ +æ ŸpHÀ› +'q´lŠSô¥"‡ÛäGc{{„ÇQ¸mKÏØL^ xнÞWtÚ•;+¶ÑîÎÔ–àlç­¶[ÈÇnwGõÈC Œ´\$ŒO @¦½ùµc–¨T Ê;¼ï´w;ynµDtGÑÁt˜IñÿFéow +È/{)Ÿ“aä— +ÆÚQ”DÜJjdk<í8[NÕ5Dy$öyúm Ñ%¦Ú$Ë Š¤þ÷"% IèÙ Ê•.'^eBý[ÀoǬ +¹$pMÀ,Gï7—u¯k]Žª­DR˜ÌÒÊì” +â¼@:ÎLÏK  ×Ô^˜ c<»ÄýÈZ(¹ó4×âãü›WZªSRœžéÄ4:±y|Ÿ$y A[éω)Ó9¯[±aŒ’'f©º´ß\ÚÒP:1„QG›ò‘®»Òûðåe5^¿80Áé¡À?åyÏæùžÚÌÅöøÔád-êã3h´ µÝý¥# +­4ìêOøbeÏØûÙήš©µann¹ÀŸí|sE¼;Ûäø¿ ôïqùøÐÿ˜ÞMDA8ж EÒ_ Óh\þÚ0ÎÓ&“Xb«Ç‰>H¸9©5#K©wHã`ìÿ•mÿ2묩= µºÒT` ‡ÞI¼g ÀÕ¼g;€s–øš2ö;Yü‰Ow<fNda®4¶t™,CA‡ª ýœ¹ÅQ4Š·G¸õ]¦Q@—‘æ¶…!WñŸ`¼–q8 %¸Q*±‹¥ºÌ¶“wD5oÑ"xüÌñ/wC݉Tœ[~çÊ@?ñ6?µN £ñ_ôÒöó7ñ/(08†6!gò¹9^ÕÉM†’ÍtjE ãjº!ÈÃØ'6£9ywwìû“×û¨€nç +ÀFûg· P ˜F3ýÓoì—Rj³ÛÞ­ˆ ÁnN r9¿Ã¹Šu¬'Ípg…µ"­SxOÆFì9 A(âàh§ƒ+aÀ•þoÂÿjÀ$²¢Ì:pêI÷QÒâ…ŽÇÕf†J#}ãÖ§££ÑkRxS „q7]q`&RÖ'€YX7pÍ!1q´úJ3¸ÛßéÛµboÔœÆD @Ã.pI-À{ÄœåþA–?‡ë[£Q_*­×›=yœ»2=ÁsÒk+Y"ß9qfn±* ·Z"€ãp-N²e5õ¦·ÓÊFyc!‘Wò§ð•; +PšçŽÄ©¹€;<ËËGñð®^‘¡*%mÀ17¶(n(¥ ¶ê…›^½qÔ³‚†k†}š ìcÇ0Ó¹ó wä'Á¼‹3± £XÃôVªqëä +@C€*°/0òEÿ‚dŽ|L'QѼ‚f°n¼ +¸í\ìШC(W8ÀbݾSŽ!Œ0P:¸A{ èÚ]5N¨ô?/þäGþ4.2n3j½Î"#J‡`)*Û}šýåpŽo£Vö×IK‹@J1³äɱ•4JýÉ?9±•@–Eë€ü3K/kÁy¹IX¡ýÀ…}®ˆàeœ¯¸,py_€K,GñûyÇW#®/æ +`ůå¨Ð‡l]b¨ ´oXº òk”ÿZ}ü;=W¹r¡ý¿ã,Iÿ6ÊÆÀ³NÆ/_¿þìèuz”Æw‡¿NÇ*PŸ'¯Ç<ù£4Ó¯H0²lœým¬îÏÙ(ÍÔõû%™êE’fþ>e¯¿{ýzÌb)ˆÒ×þ†ÝÙnü*½ôÅÑ­ø œÈ~]¥N]€kÄâæ“i×ü81³Éïg60æ»™zF^ƒtH³ï¿}9~=>þ÷ñ¿?gãññ±~’ÊzêY:ÌR?Jÿò·qúÒuáÿÏ¿ðÿïìûïŽG-õô “µæ±†ëH¶¾ûî8n}Ÿd‚E’w”~÷·æPüA¹ÁCÕã_ñ»ƒƒ$¿ Κ½Œ[œöhüç%_y–I³ã¿eé÷Yvœ¥#%[’½N/hér1ΤÔ#^£‹*4 'ÿówiú uò4#'Žõ™&Yò‡,ûþI¶½dÇãϯ"·™/ÎÛ×Tž?0Ðî¶ŸÞYq.ëv;ûùÖæ*e^?  º¾SÚL€×çé1.´—Â{®"QS +àÏf+8»|€©°Ÿ‘ÀS "`ßaNãð!ü{½‡—™…d«at×/Ï~ Nå²UߪaÙ÷7ï>Üt]¹ËkÕjXõ«kwÕ{Í_f£ Ü,þšïûU`TV?o{ÝeA.û`U¿K Å9ë9~·ÌKýÕ/7÷·Ö¼;€\LbÖ¼C_€‹,ó{˜õ§GÓ›+.¯úÕ‡¡Ïǹ|ÿ®&í½ÝÅËá.Ùê.I±¶Üô=%Oè.•ýÙFi¨Ù½Výp-ôCu½g[éaõ¡ëzï“Ö É°Ü\¶V×–Kss®Wþ/–—¡t7[]+ûå…"‹Y©Ô¾Ë6|]¾»ü„ƒ«›~´æ“s8à¯m°ˆâìÜj¸öÝØ«««ÞÜìBÙ#£¹“ßåÒ¨º¦“?|È­rØ_°’³pãÕp™£¸|ÝΔʹ!§~„X@»}gåPÞÝÝãÅ~ùz €^Å“ݪ®Âsš  -ºjË79­^û¨,·àžF 0!8Á ­6ý8[˜è]õ‹0 ƒ\ÿ^O­«.¶Wß¾H†É›‡ÉýÛúìHdLJYZ¥È?úB‡á +_P–~KÑ _Ç4íНÏÇI3l¦Ã!»¦‡MHüýñxñƒ`q=bûfôtþ?@ì%¦‚?W×°ß œU—µx£àô¸Àr8¿³}û§÷x¥ÜU°®;'EâïQjûóñ8<>Fh«·üaÊÓ:䩌ÓÍf3LGuU0;tS4÷­†~hJx€oLç·?™v4ðËÛ× ®=4¥xO—ª¢²Ò}ÊÊJ~õîíò?Ðx!¾ˆVÚ6 é…ðÇ!ù.~)ñ·¢ãµ$¸]P÷KC?9'Iý¢U6P>¢0·meö[Ù&ST–* \z¨ë†ØÛ7å0ö–4ß{ÞH£Fañ¿À¤þ ö“Âÿðn1À9ðc÷xÃrT_ßôpÞÓPXž1ÃÒ ŠR5»çSÉ´En s +¨yV%›ÄÃí¡X\FN +7#’œ$v|!Øi(µuoÖW/V“–f –y%Rõ'u/í†eõ4ZW½$(åM—iTˆš¸É®1»õÉõi&bSM’h©(Ë€ÿÿ\fÚ £:uèr¦ZÂQŠAtü¤zÆ Q&ø¡±€®é ýÞõ&QaØ5φ½ +GÓg°ñ €¶5èõÛr´•¦ùw¦’Ÿ¢Þýè Ú(€ ósBAì¹s‡üƒ¾¼îcw°®!u†&4i€®þBøs=./49óÒ p Ÿp@£‘dÕ±ZZ繤³|À§RQƒ…³.óc6²§Ÿ¥2b5ð-?FAZŽ’uÍ#;¯#+½jŽ.6ÿм“pð.}Þ¨øúœ·××5=æ÷6„…¨…6³Ú{(Œbk€éŠL¤²šÌŽ¿7V¢b±)·GÚò[y@ ®Æöìaå¿ëv7Š«£‘æ4Ó¸?¬×iyidýý×xZcý‡Ý¶Æ:ßÇCý² ?ÕïõqU†„ß¼Èvõùùš2ŒÈG•†0À(FsØÁìm¢?ªÕ2Ê&N úi30 +øa± ½«.Îø õ?`E€†€¬0Ì/Mø!Ó\o@ AÍG¡oî—•ÿ2Í8ʨ¬×&Öüï©:!wvûHÝ `»ûƒþ„îìT`·‹á/³çzÁ˵Ó—Ç…Â|i‰|d½±h~Ÿ<½ öùWÞµTeC<^y.•OÓÙaÿ¾s¼a¹¹%P¦«oª +ÙÐV]d¡Šü[Àû·P‰.àÇï pÞrd_Ïì)¿—éyjößµðå…‡¡Ô<Ž»s¨Á+'µÖ óÊÅL‰5Ÿ˜ð ÷[®tÝ2GßQ¿¥7IÏ£ÍqÝÌBÞ* +€O׿Ø‘+®fõü+¿h½‘ÜAµp 5L¬+ÅëÑÆü|=óõ]p×~\Bižâ¨æNý´`Ÿ4n¾vƒŒÙü…î€:­þ}S¤öË Wï pÛ¶{y  ·»Ç»t¸ÛKZÝh…¿IPîyW½ô*;jº ÷œOGuÛš`_L» ;À=>®‘†ÔE¥}Ocƒ³#§¶Q‚4TX °ïÁ%ÛQì&Ìt|ûËŸì/‘@=IË(€ÙÛFšÄ…Hüt›´W’X:YSOiÔÚ`È-ËMp‰<1§æ{ɪʧÒíÙÂFT-ÅÎlqÖTø“eüÝúœi øcö8g9¶¯cÑæ{¿À §Ç³Ý|ÄÃ妳0Ý&‘€ìÖË·p͵¡i€u<î(¶Û1Àñ~‘þu_³÷Y¾@­)é1å—æ|ò= Ç&Ûa/X´Øãɸ}¹¥åƒ-° IhM­VSŸ9†:;à;6'mÔTÔ+¹Ì‘[c+˜×D2uÓ!#½QAÐ:¹Y~3YÎhàãB 9Ì+¸s;!€ hWg`‹öþ $÷ö€yî航þë=s¨Öx½ÖHWƒùŠvÙS‡ìvú +èH¶mÐמš‹”³âÈ¢Ý^ù¥†³oX_òÿw¨)€J[^ƒhFf7`vÿξ{Xîòr€Ñ’çi*gá=ÉüI£k·À™Â(AËl´6†ªeävÚ6WKÞÛDsÒ¥$üú’fm±Þav­¾Ø,pðn}¦€¶øûô8g9ºßn¢Ö÷}éXÑo€¢WÜ ¦D’黌&ÛUǬÔ)€|=\! »ÐGtInAŽ@Lù ù•†ìTËÀΫmÌ”ò²¤œÔk”#|…ì´¶œ³»SrF# +[ãbÁñCç8kDÁümEurœÅœ¹ÖÃ8SPÃ69É”È8boG(~žGÿr›QMÜĬ¤}ïX¦¾Ô²Ÿ’xOÐþî€"€ø©íUžKt4$˜Ä9[qH>Úv<6ÜßùL-lw«?4.@¨`§£K´QP@¥ÂÀ1»ƒ 7€h:ƒÝ/ÍØÇM`—6œ¡Óž˜Žç®nÿËèAž_ν,ù2@­p£PrÝäz¹ É«w—QÁ–*lYJË ¯ýã†Ã¿’`ó©JQožïWÓò#üA€†Íñ¹M+€ëÇÞ©/À¹–€?v_€³–ãûmf凘ž½5¡'Q‚°^ò0ÛÆk§d·¥Â?b!ˆÕH×ÀøÛ?ýi¬p›Ò3j7fAt$X*És4¶”³8³4g;‹=rÚ j'‰h“”Yᯟq €(U«p-KÓÀ¨&Çp+ª«ºJËhœ6Þ +ò  *œYÞP±'‡ªš2s¢ +xsƒZz·Q‰ÒmÊfvž£€wŒØ¼9h†®¼3ðÙ@€Þs`@Ä š¹!—¿. +@Õ€å·*À*v!õ СvwUà.…kºcÕ€RÚN +Ú¨¬pŽž  àúã‚ ~û¥ù(v2` +ÿ§ðÿÝþ—ûû»zF¥v”ŽË%€@Þ‰³•ùàh[>‚ÒIÜü=zt!¾@ÜHÆ~6bµL m;>Ò×ÉÄÏ÷ý¤ìmoxK°‹´…;£û¸È®­þÿ·/ÀYË~µå7ÿ 5•[¼ÄÿðašPh’JZb¾Ö8֢޾ÿy<Op´7gÉ Gm; +éKrKsLÁø-tUDÁàRÜ€ö¦˜×+·fXN¶êÁ†á_…ûrdÝû5ºH:‡¿Œ…%Ï@ÜPמz-?·l;N²f2’/"³=ñ0X€«QDªýãÉK +àÙy +x×X@Ϧê3“ @ fÕ +ôZÓ"öl@› ­`§‚ŒØáˆ);Ž¢}¸& ©æìá Ô=/•/ÞQH‘ÏÊJ·Ãau°š?!|ðÙïû9tpÇjOð? ÿýßí÷û}XxIÿûéQPZòàXÒ@süJüä gjoVÇÉëqvŒFü%/“P³–¦ãq–¨Ìå@ ,¦ñaô"ÁàÈ ª¼Àíô +¥d;e£×G]½>.´i`ïï¸f_à‚Z€¿K @–cü*Ó3KQ1ïùÏCçîõ¬‡jù§Y“´¦Ç£cÒ«5¶éƒŽÓìèõßþvDÆq©”Ä{mö8‚l”dIiL¥¯Ið£,Kÿ#ŠGão^’â£#kxÏßA†$ù8‘|^ Ì’½:ÒKƃršFÉÈÚ#ð›c'Éèø;rN¿ØŽ_EÇiÿ¤N™%]ämŒR’Ž´Äë»ì¯ÁÇžÎ8âðãïŽØõ0ƒ7âì?ŽÓd ÀEš““ãÍkyêäæÎn3 ¸s^¼c,ô”êìX÷z;Hr8@¥½ÿ84SfÛ<üîN‚€h\ôžˆ@õ€»B¯€—¹¦´‡¦…2VÔª‡‹ÓEh©€mDÈ@®?~À÷ý^EC•µ9Ë®‚‡çàÿå~¯¿×ëå>Ñy[ó«k~3þyÓŸ›+-”Ë«n‚?¿¹¬ +˪dÑ\n2Êy7U Øµúðç~ñ»Zh¿ZÖŸ™6R£ðµÕŸû …[…¹˜óªlV5»DŽ7íTð•¼s©ø‘Úü}úœ±å—›•š?Àò°‹ÅUÿa5|¸ùðaõaX]{¸ù‹!éº «©ÕÕf3ÔÜZ¦ Øx¶à¯ò¤7ã¸Z}ð"ÁVg?(—ÕI@‰nézJF’œ%.UÕ‰àn¯ú¡ïqÞªÏ#t¦fýØZ¸–‹ >Y¡ê¯úÕÀoJ* +è­)s-‡Ñ²òKt‚ÕòÂì\9^sÏ+Ò‹ - +e“ÃÒl©+©†ÑÚé¯Ò6,U§~мýµ2W³ökeÎ)Ó  ”Ψ€wˆX ß]u»£(Hìî¡ÅA¤AÍšøË/7 C±wÐÏ] +sä•þ.DÀj¶¨Ïè¦Ô·³Úªã×`÷Ú€]Ñmâ@ÅÚœ*€=. 7øRAÀ;íN×f= äÿ®– –DoZ³y7 +Ëke?üèöb”ðÛ£§H +ÆÐú°™=r?:Ì’¦¼:Š{R!\&…žÈÇ|‘PzF¾²@ÓjŠÛ(i#ßóVK¨Î$‚¯F1|…M)€é¡¯¥®00ÕðïÑàŒå8¿Ì¤Â¾²¿÷úO¾¢m–K8e/%î0I¹‹'!¬9Ôœ?iÂmzšÃ8¬– sn:W°¢»Ä¢Ãa0;[ +£ø°Üþ9Œ’œ4D°Ãkˆ¿â).¯mŠM":ò<uÔõm¯‡aTEÈÓS•0ô¡½kÕxÿôIDAT!2xå2eó«¯ÓÃMU_6ƒB!"“ÉÔCã:ËÊ1ñrI6›œœä#±¢$~ò\âçë˜\±7•ædùA1ùù¬A;‹TÀõchùàßÇïVþi§³×ã…è=ÓjíÅj¡xÀÿ.ÞûŽUÆÉÃÐ0Â÷LìhTOÃ2šC +€-DŸ ®ª"ÔHƒž@ÑG6f…S6° GÀ]ÚRíØïh A\S â;Ü.èßßïïRü«UÁàåö‡—Yä'ß’ØiTšý°Pò¥Ú’h¨~ÿñQôõqLöðO“Âk5|„žù—8$°X1aùÆÚá¶¶‹Õ"|”ÅËÃ8ð5 ؇%§­Ÿ8^h¹`KÁþT([[ÇÓƒt;9ÀÑ¿ÿJS•n¨!„_Á uuœøeš¾L‡k¢‚hS'æPù¥rñ°•¼Ê³ê+ó$}®1j¢XÝ™%&ÉŠI¶†c£ïz ?Ôr¤_lÖòõ‡˜$¸¥–:ø½ä)}ßô_q³ 4N†_Áb<(›ašV–f!þ­÷µUHE'jLä±vMbZpâ9¶ZhužZt„KU9ža=ª×7¼ •’Öù‚e^U_lì•5ý€{~FFý"çåˆÝÔñTgü„·‚B)" Êl6F%RõOþ†‹Cðã×gÃô€%©Ú$ls,Ö$dˆô`$o!‚Ì·¶éS& »X\/€b€íU· ` h<;ˆ¬´v;à*hgŽ+¸ÓÞ :} +vµ-§€eS.€ÐéP¶ç-¡ P‹ÒPÔèîh„´?ÄÅGðÙ¾®¿óK€fýŽ40¡ÿK ;&´@Ìù?×àëaàÍÎΊž§¡\\/J4ïº}Ím38 +‚– EQ}êéW㫳­F̪Z]ÁcU Gâælÿ¼l‡¨úèºK-WŽ üöƒBDÞ#2*©…øV¦Q ôÕ™µòJëm-¶•”-6tjyûåF,ý”(Å«¥äÒGìí¤IÊCÌZ¯lúƒ^68žŸ! ‚dÙéagªáVû}ÿÂA¬ `´Õhm·ÔI#Âÿ©;Ô½q~îHŸj«ƒm^a6˜˵$7Ò‹—“Çù•™ Á$Nü`«ÑHá–ºêøU¿^Zª©±šŽ``_/›5°TZu÷{jºi?—qC\+±‰ùÞÍ‚èâ±Dš3DD©àÉ) ŽÔآέ´ù'q²bšØÖVœØ¥ú7¶¸¬:TÃ)›1è^¢® X  ØYY‘ 0PG5Ë88à¾õUˆC ”SFw@æô<ЇT<·ÙÂèC‡¶'љԶ€uxt¥MyÎ…©ì·Xa§ý´ÒíêÌZú%;âì[K@ðÿ…S¬W A—šûþx{=6±ùD/!€Ø_N ^af¡n)•3@êk2iȲ«²B=¨G®ó 7ÉuµñWÛQŒÏšrp$?nÕëéò ’¥T*Íþt®ÄQp0<Ü÷/~ù¹ Üä +@ +Düª‘R8Z•ß<‰òV+wµzq| Æo–%2Ÿ (ÚÙÝ2çwLðžùþ ûiÆšŽäá¤åd¨6î?Šyޏy=Û¨ž,oÚÅä䤋ÿA·¶¼%M“§–ý-ÀÐÕçñ—nèÀðàªÿÌŸ´—ãíe7Îå‰qÈ$¶£ ¡¸¿’<Ò“‘:Pš×¹†›ä'dQ(HNàûéÍ™î}]ŸñBØ$°Ý}Êûâ•f ^^ó˜_V*¦¿¥Y ¬ò)Ú´†g$µ5KPÃd%¼ûK^êCÜgL½$Þ;CJýùú••-ÊØý Ça"·>i“øžfûç¸ë¨2ÞV*b5@Ý:-ýâaPW ðÖTø –3øx.UDàWmM=Y@ÿ³³7Tp¤*'3©xÁë¾SæôKˆ”6Á>"±Ò\0oŒ’PÃÓÛél¹€¬¡‘ËÈÖuäá—c·¢ Õ^Ö1ù,^k©ýâ»ÖóŪÒU žÝŠŒäT¼¿ ÿ2ñÞºñ_®îÛb™eå`ܸçñ¶‘Þ-î J6CûæŠ|Ë7Ôì/ZþWvfÝ»½\ËZÕ'ËàÓÂq·FJsR6Vƒ¯¨¾5ö‡;ðkóQø´Ü^y–B5j*¸^P.•õybÉ²æŠæðÄ †ÅÙº®M‘[´½8bš<åñ¸‰ú×Vj޲}‚èÛR×T5fË%¯uÒzmb3”Š9¼o,Àêôl!E¬¢ñJ¸UgaW;t…~!™vÐæ ¯ÓYQ«árÐh±œþL•Šþõí3ù\g ͬv¾»]© Îω¹}7]¨ ¿ë:@ÊÓ;w!Lá`Î÷ç–8†³üûýüÉž³8\ÎH?(Ïþdv®(âV&5ËVCt®@äÁÄuuçÑuä[};òSáSú×ÔnS›P8Ô·êŸð5)ÆP.ÀOç (_‡¿Oî¿èåþ®èç _ReÑf áë”Æ¤|jä¿ÝEÕ×*ˆLõoÅÊ* ¬4p-×Òj³®îÓé•éœÒÐÚòÿ¡‘«8dV~î¼à(qÔó/+vì_6½æÜËÆ¼v3܉0ž”€J¾If¯oc­÷ýçF[%¹|…ྡk›Ãn†Â?4¦BUËà4/¸5óÂ?·Pn\PZô‚çŽ4†ÇhhÌw’¸©õ?Òòc¹y²­¥Riƒ§¯ãÊr°B£dJ¼Õ½³ ÄåÈ䀙³.¡ V>µ Nj¥’Óè¾#KóF#k"?ÌÔ/ Ó-›ò!-êµ%/®N6˜ØŒÀóVpU,À€Eÿ lûÝö +n‹Áï Í*õßek>mÏvG Ã¡4ЍÕÐKtÀ{”þ;Š ˆF:\‘…ï¼Âî*¿uL±nE¥²3h¾Ti®@vØWPr@ƒ‚®p^ñgþÜŒj rñ¿ÿ9øïwô´ß°(,SP˜_„¶ÕbÇ’FÈé3Hi§óù…¨Ül®âE+#ÛOsC±z½/h£ ÑTt¥ÒBaö'7½_©$çOÊá Ì8 þ›¼%I+'yP®o ì“'²š&±JãWhìÒTD+ŽÒ̘O²WPØä=¥Xd2T›l’ßø”(§p‡Vñ“7^ÑÉ¿lz͹—O9ïèTêÇØo“‡yHìf€M 2j´_A—Üʤ‰œDT¸©ï¡ì•åÚ°¤=`ÓbÝæô_¶ùø6m©Gˆ*(ÖŠ{ÒU\ÀÅoÕkÂx}C +`ƒ$ÏáÙ8CV–8à¾Ùý{Þ£åШPYÁ…ƒäpJg&›’4i¥¥ i ÍV29C}o1Á®¤y$k4lbâúÒRŒü8k.øpe, §^~æàŸw+”çªkÀrèÍo0"`ÇÝön{°£N< + ôåÜkï~.ø£D'Â(»ö;Ïöñ,Ð×ÖžƒÏöEVqØÉÇÔ…s¸ÊJY`pÖ…B»û=À6£ð{šDŸÁ‘ø7øÁ§ÄMçbh¤8)xs3j +¸èm`*®‚àùjÓb.Ê'ü?ÐO+ „ðVTά4ØPˆHK(‡·(ÔÏh#.F `~nV}Ü|ý{âöŸ}OòÚ?ÿys3x@†h}š7³ò½E ßH#ßõe«K(*{lÇ­ß(û£UFiõUŽU†O*Qη÷ô!Ôç°/Ó¡0+—!€a\“W*Yñ†‘ýòY¾ð"ã†0k\yß÷ñôT- {ÐfT}Ïÿ8Þnllî|+jµFˆMQŸóTª'`_uJÜ9?œhŸ‰ûŽÉ7ð`' Œpïˆ~î΂Á6%É +´ÊrñªQÒZw”PŒÕÿkâL úJ®ÜÿxuñŒ -WÍè@:OÅ%ʉ?ÔÒ\€LÚO“6âƒMWÀ?ˆâÆ'¶ø§¯¡IM8kì£μfv  ¸  ö¼VsÇB³sOê}w¹ >í_k8‹@Þ=ïnà?ÖÈiîYîªy•Ö}¾‹Ü©"ƒ‰ëÀ·Ãá5X €«ìM‰mN·¯ž}ÂJ_êDc•îé^ÿÿN''è³5bÄ7ÔìOo¸™ðà”(¨5ä¿¥ +%»ò¦”?ˆêꟀñ8ZÅ}9Bh°T>8ßFñ¯¼zðh!‘7X(ܘ™€>®0)²*üƒM•þæHFßè‹ +„QÓwS’  +„c†—8Û­ Úâz“Õq~Ô x†÷]± \nËB•U*£ÝRgö+€ô­®yNuÂ÷31;žÎcø÷½ÈbÓ +@Š×ó¾ÆãilÔ (@ƒ°hÓÍ×vBj››ÜŸ€N‡î7S‰^nWQZ(yI¹©S?*öuyuUý8Ò_ÎGÙˆjÞÒ|IœÿéËÿžþ÷4=2\{^sÅd«|qÑOñ¥U/.ê@¿#Šiê"„Ì6C°I}q~C'w¤o]PâQ¨–`2ë`üw4þÙ—d5N°Ø¨Z$xÊ4/€åþ·©€Kb|ÊИž]JãvÛj$Ý)pww¾| í©€ÞÙtÀ)ø]µåUÛa€¯¯(„€Yž|gçK|ü}«ÿ{{P€@m¡.Åp«‹ÞíuŸ®ì÷Áô¾øDÛr½Ÿí#CTs . ªGDÀ/Vú;ß?‡ÿÊÊtQ{òŠšËM˦V @Z­o8Ñ*X%Ÿê‡ WQœ­“Hç¯Ç¡#ROò@Ž?V3™ÀnžWb#€@ìùø§¥î›¦Z€þø® þŸ¢”+$G£h„ê*“èá¤/Û£ZÌO\(ªá7¬jjk3ù÷æv»Š/+pÒpÍʲܴ£õ=[F4HøNý>Æ:`Å%âGÆÓr1€û§ +ÀÊØ÷5°$ÿ‹ÐõãÙœíÜ­Õž*²®ûTEaŠÐkRPŠ[7J·=oXv×Åõ“¤*ôõ+Óó#Šó ¡*{pæ@vhÖù®ý}Un + TZ-•å”—ìÞËåÅòã¢Â±YAî OE]Ç} ]®\\/Ý6 ¨?°YçÕ%0ÙL•Â?çü74L€¨@ŒE^¡”Z7c¥åä_SÀûÄþ™ò\Õ÷6¦Ÿ €lçû˜Þí|©ª=p§RÝ@þ}¯½³«:yˆìôEr$ØY2ØÁP§bÕP¤ç.€ªþ$áY/  *m5%R™¬‘ƒ^Çøjw'eçΊðoxW¤pùŸ‚ÿ½{+îqŸµ(,ºHuyø€—7‚`Ý‹Q‹Aí¤žŸ|BZaÝ`ýA#òØWÙ·æŠlKu„5͆øEáß‚€7´gð+”°;ñÅf1E¯À¿Klã²¢ WÙhŒ£ µÎj*óܘýV%%Y$XS Ï—ŠÉXÎÝÔ‚G¨‹Ø÷\„ÃÁÔö$»©?s4.ÛOÍ;Ýøä%ïöÒåØy¤w_nï› +À]"÷ô¾¯Vc}‰ä1ã­•VCÕ~àeÆÓz´)`­9ÌëÛòkÝiŠ –¡…Ú$=µœ´$5á[¼zZ:J6êKó*¥Ußk¶à¬¬\bæ!RiÉÀ|·|ç`­oàypuVQwÀ-=¸]ðœË‰‡Dš+‘Óð•XN—l¸—0ÐôÜOx©à%kU©?v™üϨF}BoSoÆT¾ƒqMítž¶°8àÝëìàɃYiü½»[5Ðë<Ó'å<'ܹ‚Õƒ·×îI·«8W3 `G¤1ølÏΤaFñ-ú¹P£`\€Œl³´+TÜþ/ÅÒùûV °¯ÇÚ@¯«ÁB»“Ú³ð¿£ÙsÕƢȢ>ÕÀ‚€òœÏ*‹ý(Vý’õùÀ?ËÈ ÿˆÈßj|R¯ÅVE2UÎ;àÔœxa}£îÍ)Ä+˜™-¡ÿ]^w1ËL£Oàþ)þóðfyužg‘`¥Á–…X £˜g‡Öˆ]|á¿(¬G®pn¯îÎ×çf‹!öçmŒ P‹­Ú÷Ôäüœÿv‘é ÷`Ïó¾#Onþ| À=B Ú÷µ††àt§Ѹúм£ú¦9|§êaGCµxoµÔA»ÄYÕtXRš“I+ßÑFò€)€õ³µÓ1{oD#7¬þ»¾Ò£V· •Ì#S;ý±¿–diBªê^{ª^jˆ¯fûA”5_½ÒÄ]˜8S»ªQ²¾´¤ )ŒjÉ˃â¡hHa‹²Â±/ãVZN9 + ¢PËúü?FV»J¢³…(©ãä J6Pç‹<„u»Ñí; úY¨¡¬ þ“‘f§Üæ%¤Ãðü*•êJKkÞГף£qõu–¾äFå$Û­ÑÑ(5‘È6-ï¶—¬ú±»±‰iH0JúwT20¸Elî$€#‘ˆì(|qÂYE‘®à\P© Š-@§%H†N[j@Cûä¼X€ ŸítTþ[«`yûûpÁDìR„«ŽŸk»ÁÉw*]É("†ýÁ_°n)Ò5 Û“ €Ðïèí\éof9í¬ÅÃ5ÊÁ8ô)¥çæ Eµûañ£È¿O + É0$jœô&÷â6•­½Uï“~˜kw¡n Âõ'QôÀóBkHÄO–‡ÅGø~ÅÂììÌÜýG‘º€¤BÜ¥6ÿ*ýHþçÁLøWfO4¦'¥gúú K‡c×·å1'Š¢çqë“Ðf'£Xý“¦?$§q-UÅÀâø« ´Œ' bµsLÀ¢j–5%&<æ‚0ùÊ×LH-ygÓ“•8­˜VǸŠÇñ»¿šqzð¼\ðH$=ßfü*MšM5n†ÍH½ªÓÃl”¿Ià„8òƒÃ‡øY< Øë¥N8q\.zÍf9S*Åñ'вêR¤à!p†“ãÔãzœêï‡oWkÄ +옹ÞÀeŸÜP*Þ25©Ù¦£ Îcô¬hÙ Ð~P.¯ª‘6Ž6ñIìÉ9BŠ£¯¶4’˜µÙ$ÍÙ/± 72ÈìììÜœ}/Í‘0ù—öY¼…J(Ëò’r™F3àjËå»ä3¿ZõgV$¿qY\+i^µnÿ–æáCwk¤<©ÈµÿÚ¦ œ[°ñ¦m&ŸZçÝU€ ­b✠_P°rp²œBvØ"¹¿d3þ¿Ô§@çYWNå´¤»z +˜”)ËùߣÇàSµ”ã”ý{ûV ( V=_ˆqÄ?í:X»Âþ|ገó 444¨.¸c%½æîèn1•þÓåÿÊŠè¬Áþâû&4|Ê­Ë‘‡êªqäS¼a³IÇ©ŸPê¨|¥ô¨«ƒ®Äf•$*ñ7Y…Ìzeÿ … I)š—GX(©À9,ÇÒÿÉá%¯$q +ìSà;øË¥Pá¿—ÇÔ±ê\ ûz&-îyµ(Û¼«n¾\9 O^ë¬`ü2{ÎZ-¹Uêk¹Ý¤BMJÜû¨ ¤Z=mÝ¢—nT¿Ø÷²™Ìz)šªv€·go¨Ú(Oz¯´h/}+ÝP•’Y Øÿ⼯/-m,--zëúÅŸ†Ü`kO®›ª`¬Í‚Ý‚F.$ë=Æ¿ci~¹G\¸B'iîRXcØã`¨O¡Kº)›Q¿{ +C¡úU€M÷ÙÖÐÛшê ⺪¤ôØÀÂW—ŹŽh]žÕÂ-{˘«ÀDpé$ðf-æÀ{ûJbmÔ¢ÑPÝ›l¡øÍýÉÆj"ÏŸ"䤷¦øæõªÁÞQ-zÄw…ꕨ¤Y°®v jpÁAÄgÝÚ+¹‹å'ÉÏYgg]’;c½––”æ³…y$¡X +d« K¥%õ” @³˜·+Q®Ì‰v½J7¯0»èm ù-ÆjÎ + ©¶~ºDµçX…h¶Ý§mˆ æï¡N-Ÿ S躷¢øtÛ;ÝöSŽa-zÖhÀŽÆÁ*LÐíºÓA'¨N¯=й%ëUˆ+ ¦}ò»ûa 1PýÁ—”ÿ\œÓyÚ¦Œï·Q*ýÙØÜŒûbðeOµ}_ Úƒp·‹¬ðqO\o9ØŸ˜–Z uúÕÊá/ŸýYiþ¶UÙ^¨œ€Y +YÑ…ÞzãV¼Îbò‚[E6¨ã6HLð/¦@>Ä_&;x¥yµø YeÝ{UN|X:ßîB3ñ?‰þ‘´hPýMðoðÇÈ$/’¹eí.Ü[/œÄ²†2o¾X8¸Yßf‰¾†ÌDI’CÂÌÑ¢¾èë»XzJ“€}wð?QÇêI7Aº¾mrKó…%Eo›>Ç´ö½*2õ¨Ü&Fj¥Sn¨•Ÿ¿OÞ¡#æIPŠ]‰86S +“Ø‘_nðçQ3ÊW©°Á㹈rãÛÍÙ›À¾  'çHÿłټÀ¿èÕã"—«Ìeà’UñàOÂ@( I±åšýë"± ÚjYš»Tµ‡Xoá[¹¹'ØùŒ‰("Á¨ñŽ*@&;0@©]ßç½nO¢žÂYòh ïngÿÏž=Ûy¦Söÿ[ÿ‹ý~·³Oñoîƒ. Îéµ:°ú»$•ù]Í&Véîùåþï9Iêè?â}Ȇ}Uø+ŽÐëýÞ\„Åþ »¯Y‹u­'W»¡þÄt÷í¶=³³¶QWI¨>™36JÍm(ý-Q§L¬"eŠuAC©g-.òÍ0 +¹ÕÕ’Ú*SÌk@ õðQá ¹ª‘ov±M×ýóìƒù¢®ä7««UŸU@žÐ4NŠÖÖ”_'3ˤl™­«×ZÎùA„#kPºÆ@†IAµ ïdþTÕÃY'ãª|JÔû¹¸"D«9hßÅpJëAm”Xg-Ùà)Oãè1nÀ±u’s36lõFfx‹'ŽG¨£\8еÙ%‰¬Á‡1x«±¼ÒXKIyÛ=J¶Û PÀ³ÆA(nD ¨‚R°(·Ù_ ¶,Ÿ±¨åÉ*ü“šïÇŽb_-{l•q–Úx8™oM„r÷)HÃU®Þ)€gl¦ß·"˜ Œ‚ÆõT€ìp¬9º ZZ*!asöëÃ÷–Ó}ÇÊWÖÛ6ȇD(;•Ηj0 Íð…®å … +¿ø}O\Téñc +àZð|ïóŽ ÝíªÊ¡]éVº¿ä…—ÏÑq1à6–»!7@ã}BmV®ø:}[œÃM!]ªœWHMÒÎ5‡Á…Â(-*-7H˜Ðüf ªÎ>‚Ú­HÀ:Øg2ƒS­ÛFTŽ>VV moóAvø©—Loú¦Öýƒ~¤ÿ‰÷oðWÆä!õœïp,OÖ>†¸)žõ:ÒbðèVÃJ)hŒª°ù¦A)£u¬Hó.$5Ž”FêõnÛƒK}ËÔµ,LN+爈nœÀ& +à²@°ªZ­w´ZA + Hâ5uÏÞöª¼³R_7g> +Gí74ôø£|§Ñ +rÅ-ØEQ+@ÿ)¡I×u¹{|‘ž—ˆòÅù,]—o€mx‹ŽN‰_)n&Å?a€RIž¥Ê[€T¯C¶ÅÔà˜—é—DÔ €Û:¹¸yÊê5©6Ê,8Zã·¸‡—V½°Tœ<ÕÜ a3Œ ¤×TyáŸõ'Žþ ‰žÜsÔ³ +á-V[¸£Á&ÏÔÍ_U®yß»xë~r9"Eþõß¾ü7AaAñ—³#@ð»ÿJå)_øª í¨5&ì ÜàøÝn‡K¹·£Óëjõ®óòÍ&ðg%)yÖÔDDÁRB†ö>&)Mæ©%·ª´´È79oÞRTxÄNd—ì|·Ïó—« øª d/üdföc ãþº‚år›Ôý[á¶øßƵµ¾h€×i=¾»wà—Õ“…¯Mkç«ê‘~ðJƒŸ­ãÏjP39Ž-à U™¯‚5§ãÃöx‹Ï(€©¶À.pU_€€ðx'³6| +ßiî~€E6!¸<#¶8Y³Ou¢«ã…7ŽÒ¼f åÅM‹ëÔÐÌq•Ùº¡ ôFø˜¸Á¸](_¤$° 1¿³ü;à—ä%?É`hBv‡8.9 2ÝŠùSøz³³·—äh0ÒûÄ”ÒlV—ÏÆ‡Ú)´Ì)|%9ý›yê@`,® Ð|ýB½æí¬hgyØú<á6h"ml@UÍ!ø—Ø9õ)ì$ª% °§ßÕE©E´Ð|ñÅà ÕÞkx/'+ÁÀ7fF8'fT£ Ü +öé*,h©{Q÷¡ö œÂŸUE­õO_-!mD©£T’@3ÀŠxKT üåÐÛ+¾+ä+-gŸÚD¬¯'åÈòå ’ú7±˜,k¥ïå¶q +ÿçSÞ?Ù¹ÕØŽ­ %CXãSË.ù›e £ÔF"Í+rÓ‚ÉhW`_ujJ*àk,Yå22é¹¶{‹/Uçj.€6~\ß4Ÿw ¥ Ó¥>NŽšøXìŸ'fÊ&ŒUI&„áMs9£ß¤£Ô5”Óv À¥RŸët i¼‡_U*pq|WZÊ·›Õ&“ÜCð çJq}Üœ+ø;14†bA4@²àO®+‚i¤eŠDaDA@nÊæËûbú¢•öf +Îð_‹Cß\ö$S|'ê +8U׫ÐjPÏ·\Û™AJÒÀVÁ 0ð±}eúHf¨ìžjêlOµ,ê´ïítwmÊ`í©–üÝþ®ùV£gçY©˜Ö`Ï;.ÆgWaDÄùDQyIÏ’ü¬ªyèhxÐ\¦LÁŸK9:o££oŽÈ ã,R €Tm‚:2LbÓ8ar¥¥?ö‚û%ò›¥å1Øä¹,QÝ^‚W¦ÊcA6)K€j_e&E©gK*‰âÏÚ^e þþ©âŸòÆzŒF,áãø™˜ƼiV¢,;zùZ­U‡‡±ÆICÙœãÃ4.û|ªj«•Çék­³ªMY¬še-â½¥aïôHl]×È|/üt2ֆŬ6íTðwa-À™€8Ú¦í¹žÅ/FGÇE³Íñø0K’öÔÆÇÇÇãñ«ôOãáÝá˜[O_ë“TUéã?›}㬕dÙë$@Š“†Q\kŒz¬6"\¦\ +VJl©ŸT¬~ÞÞmÊ\K3°mõ"ý&Ö ?+á,Pôß.,ñ TyÌ‘Iè`µ¦Àd¼áE£×ß¼L²o¿Q£3Înªæq3'ã$KŽHÝ×ÜÅvœ¾ÊŽØ=åªÍ DއQ«U‚e™i›!ß·M8 + ®¡lV~“ÔZàÞø™#Pô‘›}ëOváw­7`/wZŠîcPV娖ÐPla‡ÂÞ~Š\xc£{È~HcØ".ÃoæH!'*gÝ~N¿C?kŸq¢¼½Ý©ùW¦œòýÒìÌ7æ +·H¸r‘ÿ²šo +®í–û/-”ü9µ,­Z»@M$´\²å¶¹Z…i?o­²»,pˆÂ­ÙÙ™™Ù";ùEÍZæ]eþæýoOÿü?¨?¨Œ^¨Z±¤6Œe×6ÝV˼{|ñ®Iit¤UUCjÉê;„·ª¶Ï"vñª^ÙÓ¤3žÿsÞW×<5”N÷ÔˆØÎµ…»ž ˇիb晼5 2m2¾Þµ,ô ³E.x­ù‹Mk ††áfÕ×üfáÃps¹¹é6T´¼¬£ÛV¡8[cÍÜlAô¬GO‰„$a¹-žYÀÇ*ÇnS­>‹Å²Zy’eH×2”ìp«0{‹ tëCÊ|VIöÍñ÷s³üƒýÂn9E üTºÅÙ­X¸¥ôp×âNÁéÈ.µ\ÔÜ2TªOR{j1¨ «JIí°¦¶¬~yµXüÙ¬­9c3jÛž¦˜2Ãê)L«@/mê0-î>)ÛPoBx¯rÇFÜ9Ä)¨c°!TXvïúÍ'òÛŽçðïd‚•õ¶À.¼ó]ã„ÞCZˆšro„¨¬×•Û&Fgµ>`i—›Öæâ‡~Ý[Ý«˜jœ¶(Ù,‡ +•yà7p ½¨‰2~åñªe«Ï.äÙÚF%ÒÈüeeL›]]–öc€¸O‚_™ðå]Ìà}56óšrή2 ý»èŸƒ¿ððP¨ÿàà@ø÷9Æjs(¬EÙNõ~*±¢&åkj¶æŽõ5…Œ:ÄÄña|š_yµÄ½x粿JµòÂ0k)Ѝl0e3‡*Aó´ +À9!ñ h;a)ç­Õ½k‘ýÈËÐíÖa•;)3U+ °»ÏD‚òÉBµ)Tï"N¥c=“Ô0  ˜Ÿ ô»¢^è…¤ÜPãº>Öˆt~c)Ì®Ð:ít;ÝÅ mk~sPé +Ž˜$ub-_‚c­‰k©%ñ—ê·â€ôR;³ÒG8p¤ßb)° ­Z{©À/¸PŸ™â:5ÏÛøÕz‚=6$‘×Ùnþ6 +`fV5Këj/`1ž«L¹z:ø) ýü¿Ðà[õÈÿ“²¨knŒm8¥›^¼œÜ43+Åù‘ô;÷'¯a¬}«¾^k%kÉc·Le¨þK|?Q=š%z©ô&óìOí÷¥÷Ì–è@_ŠEòŽÝ¬Ž©œ–9ü“enB 3?…¦àXÉ‘~¦B…c,š¦àØ…‚O~qcEæT#ø °¯ëcTe¼3õ1+ëI¬]…AHã-foj¼Ú3VS-€l¢®S#£ SY¬oÖî8úÁ‹O¡ Â40€ÏËb|™F ³‘½ÍôSEšsüÄÄA+Øí˜ŸOû•{wVàýÒÐÄä@¯½«mu-º}å_ãƒpA;½~Gû¬X„“Ò{úËüÉLl…åX2˜òù6*ZZœCÍ-HóÆÕFjÐÏå)D¡@Á‚Ë4K^IÍ:6’r5#S[±´T×x?™™]Ìño¼ÚÎÿ)þ)ø_˜ÐppX>‚Æ‘)«ºc +ÆõzVгªÆ†°B£UÏÇf‚Úm(iÐøt+Jk¸áëè®¶Žgqäi¼*å?ƒ¬*¿×7p]ÞöòÔÆ)€ëÖ\à +ÀK¹NÀ{ÕkKíxZh¾ßÊÆþñ–ƒy’ÁÀ?R#¼µŸ:ÍaÛõÑx-‘FõO4–;º¡ZJ(soº´äÈͳïFúê+{E/â—ÊÕõ«‡JÏ+RÁnßÄ~2cÀÙ?Ìþ‡@ +… °³"„Ö1È[ZœŸ+ÂÙŽ+u&[3O™A~“jÄ,h¦*I>]¢ùHõzœ,Œ“Ò+AKx8gÍÆN.V¬º°FÀYŽ0þrìÔÐ>nѽŠ&ó³mr¦È€L…±-SÿŽF€žíª0%¸­0ŸøZb;äö†¹sGà ÚÙÄ2â%H„tCÎÅ`ÝÕÆJ¯›+k¤x¹ùƒ™X+ˆÐ_jÐj­M-zsÖ~„à}Ò¢KÆ8aÂ륹“S  ^6b¯ªÁb4©Èò¥%s\#ƒÜ(– ½ÌÖü…œ”ÀìËÿwòŸÒ_ø¯jæ=g€¾1’t¤#ŠPÝ›¦Ëáp« –¹(•¢RX\üRñ#rÃììO)£—¶n‘L2åŒÂ~vF 03;óófl`‘,µñgù‰ƒª´Y,ÝžŸ+™¶çI°M(k]ˆ—òþ(%/Yˆ A¹ìý£µð¨£Îâ… °ÐòJóä2Ñ‚»±‰iv`!Ä¡éB€9„t¢€.Ø6Àºí_>C¶;õÏF_YÉ @?z;umõÝ(!Wìn~ ðaÀÚJÏ)áÙ.Ó®@KN| ­yÚkOÇíÛ:z ë•oÞßým®lŽÑ +pþíöFíÁFͽø{:Ê‘ïz€¥(à|)˜ƒ•UqCH2ܼyC_mL¥„2JPŒÖo‘¸ À’·ÞòTvµ<‹Ö|l +Àh„Oð-sø' òâŸ?Šr´+þÿ'O’åá0VYê|$£íí£ Ö¨B9ÛpmßòÒ\c°Psgá0Ò´˜l +â88T°š¨.ßÒ}Ôà‘«^< +Ô±ƒùåíÞ©/€–¡ ›\ÞÕ/î0ûÙ?®oÔVÓŸ@¾A¤ðßT0·z£¾µ´­ýAi0ëyƒÚ‰ÃrTBªç©ëLÉ'f?Å)Zˆ¢‹$9 +`–B žsºuàî^€«åûñ÷Sc€7•\ @_LJ ó…ëëâGàëVé‘ÚGžkTïà•¢b•Õ~XW-Éë‹‹I|-4(¾nÌÜð „I$ɽŒ $–£€«kD Nl Ú—ì2‰ÚcöuÇÀŽºSÑ|AÎ'èA6‰ˆ ºÇ€~Hô;{H¡²£á„Û€ZíO®Ð]#Gw rk[•^¥ÝDZw¶[i·5k°®Cû¸»ý¶!ržF_# Iä6ÿÓ§¿´’si¿«Ò_<: +Å9›Ÿ +Á’K ñö‰˜uµ‚ªÂ±¿%\…`}Žì°P˜—Ç﵂’Æ üH5ç¸Ä¾ySúàŒž»Ò&Þ¿ðŸÃÊûm¸Çô0.W›ˆj›¬Ü8ŽšcJÃ,ŠÕ@ÙEˆA’*‘a9•ô(m+Èl·ÆõÔ·ù¿þÍ?iY…T=ð«lNOÖ]bdj]òÛÀ;õ¨ç1L×w¥5¶Ë‹¥ÅznÃ’¹shp±å¦€5tsšOŒ~j[š;i^ÃÿÁÎy€®8vÉèÈ t¿Èe—çX¥œpã'³¥øÃ(íx9þBù/øŸüäŒbd¾0{ûO=†®¥2•n’GCAtsî/\§ÐzÙÈ +>'/–}.Ld±ÑHnÅ Tì¶pSt¤êˆé׌$½Ì@%»LLjÚ*›Ï(p&ÎÉŽO¹»³roG#þQÄãˆkwÞõþÏDj毑¿ö:ê¤v»ƒ>Âyj:U}ç.Ò½»OÎ-°ƒ4QOiH>¸-¦n âÚWeÎI7o=hè?¿™üêíX¼’T±Å°½Ò‡J"’&š«é“ú³³ònë0$=yÞRdÎ[üØ+Ω/‡bgq4ƒÿÄuù'Ï(áØåbnÝ*㔚×à7‹ÿ­Sï_ÅSõ¥qâ/7>)äÇñòXAo¼ÛÌ Œ7ÑŸöS]åÜ¢í£4Ð(†,xÄ¿EY“øß)R{ªlŽiÇ+LíOP§1€¥/€@&áRjÖKær‹_GÕ`¶„ˆäŽð¾¥Æ2-Ì=7dÅ'õ- p˜Ÿ{bÑ#?ÁT íÒÖ$¦JÁSPò {Ô·XÑ=;s#PT07ô>Š¢ôK°ÿ©œÙ7Õ*èöLéÆM×0HafpN#qüÍÞ¼ÁË]ƒÞu\;3æInrò’¦;!…¢¸¨„ÞP6èŒj³Î˜M fù0MQ€}aÀÎÎu/`ºy×Üß@Ú3 f8Ú‚··S¹'%ìj2}Ñ‹"¾kcÃ4œMÐVeÀ.G¦ÐvU~ ßªú˜Ï%½¹ùP•)GZ<0ÀÜ%²5_t}ƒßŠ_ô¥ßWPãƒ:ôŸÀ¿ýÔÛXZ_ÒÿúÒ¯(öƒh!šëA´H"íÛóµ9Åbä¼»”Sm޵å2ƒ¸Ñ$ÞââÜz©¸,Í•>ŽãZœÄ·4D»g\•€V‚H6àB,©‡1¹Z:Ï)Æ+òþSÞ¿ÿ¸/ä% 7—›ññ8§Ë©MäsÜL\„Ëü[¹ÈÖ™Ì@ÀUŸÕÆõè ]³1믂¶ÒÕ±´1íÔ;äp•½¡~„¾úEy8QAp|µ%ËIéfi£vÔÌ ð9ÜEÆ£üÛˆo w¿V‚¢­Ü%ÊM ¦½›ªy/øæ-®cØ_šÂ?^ŸR5n)2@ð-´^n*ø'°—ø- àòÐY„ ð3—Èòf*x-%•¬pC6!óNο>ç{ ¥ v«ìEÉVœ$å¢yQ}!Áe0pÞfÌë©VµaáÛÊq3‡2`·#èå1-èkœÀ\tPà* ìåƒRxRæO@‚†ÖØ€Nh(«^ä*Ô¶ƒ&˜Î À>µ‰S:´.A~~W~E~KFÿÜm·5Hp°ÀÞÉYøs‡îÁÈ·B¤« +§hYl~zó¶dY0¬»J¹Õ—{b&Ûn“0ÅRéãÒ¬§>a YFÖŽŠÞ–U¸£µ›P7û•Ö…þ°ó]mqœÃßð®øÏ‡é)a”úa3Ž“ÃrBÁ}%GV +:Í#C’ þÍã‡MŽþ\Òªïq¢òãd5³Ñ¦@ÇÿW›ë‹À;ô4U 9àçá•v7npYó(Qó»Aáþ`œX]@^¨SÔ·TËVæ Ø©±Fà¿Ü¸ùS5ÝsôcyñëÞWˤtñ#Ý®ºô({hZ~µ ƒ þyÀìOâ¾N ~™Ÿ/Üôr˜WãR¨†ÜTðF¦v0·é)äÍ’l¦±€§PZàÎY~ ŠºUD %õMœWÀä”ÊœÆNkjp#˜ik3¤z»‡ËßÎE€ ¿) +hZ ÛïÜS;ò  ;î=gíì>ì‚¿^o•€Bl…5(—ÐØ‚Rvpß¾è +4,È=ÀÜ׋rú(Õõk•Ÿ­ùÁZ D‹15Æ;9ƒ~×I <µ@~»™JãÜõ¹ S:‰»O€E·Qêø-›ón#ÿ¤™…žÔ¶@@'u—oäøiž~Îí¹4ºÈrçßà®øw¥šVƒ°dióÃìŒù+ïy^q+iYs`lË5j|Âñ6@¹©{äeGÇ’À!€›–þ~{õî•°Rxq©É{%¯àøq3dŽ ¡q›-QæÏüƒEÿäð20Ÿ +  ‘{fn?Êð¶Zðãö­¹wšºñá‡äWér£@[n¯Ï©üV,O¸Ër[‘4Š‘Ç³75œ4Á©¹–€‰÷š±€Jßâh’øZ€ª²s{ÌÚJ»ò¿‹X1@@> tk\ùß·jú¤ ¿à„& 9£sx·òÞHEߤ>œÎ·×Å=h'ÍVØ>‰ð¯ŸnƘfj$àÀ¹ü;+úMHDÑ2YVyô´'¾äÍ.n(Ý•LªÃ;qÿY¦Ü¡(`äíZ°0'!‡,."ü½%5ÐðâHž¾€´}n( ôPdVo³5þ(à\ñòm4~•¡àÿÛp8L’í,Ký×VÐ7ëðOþ¶‘1ll} +Òöé2~”Qš»Z£2FÒ\Ée¨ƒ—-äˆ\`VÁþF `Jü ¾S +àJ/ fq´±äI˜Ž$ú¹%>±’¿å A'©)°=[§O}?Y—Pò/rKΔ|Ê 2Ñ‹ðº#XV»Tâ¬*|m Ì‚~®ÆO.ÀOUý¯`ý›ààå*áŸcKaægË"?n¿Ù¦*o8|žãÄ|/’߸fÅJÁ}À6y¨{ð+eLÀù¼5#° '`€²e¢€S`5BŒ5¹ˆ}œw~v{ý ê•cŽoTkÉ?ƒe`/H`wß‚Œ³ ßßiÿÁü#€¹Ïö]+Ð*ÝvÅ`ÏÕÁ09טiå½;;;ûªaÂw9¢@ŠÂTË Kiï ¾ØMq\Ði˜°»Ærø·ÛêGpVck¤Ûq­TðÔdf«da=íf6|‹9ô¿Ñ lúg6hD—náµ1‡*ªn”h榤Q³éZØsIëUiâ}¾Å4kÁÿlñ?¿‚Øa5Ìø>Ö(€òq·Òñø¯‡Ùë4IµÊ'£4Í\Ûâñ8;bi’¾Lãƒxâ2Õ6É´ßÅæêÛÞ³à꾪‹œVWi€WÍï4=^z¿É¸èoxGã,;ÊÆ,ƒ‡“}£¡A4ßIš4Jþö8´çƒå{û^—>tZ"pu¤¼Ž§ïnÏ‚-½°XôE\ :”®ÐD‰(, ¾7ùse2>1ÆÛº´ƒŒâG1”ÒÒÜl)&]H•—©6‚x8¥Žò›e=A{«„ãá.F—ÃJ»’|I)&“y[ñ6R'¿˜Ülj0ÃÑõT0’eÚD7~v;-ž†¥Ê]àÛ…ØiE ´ùg”k¸¿Ï4Î7b ÒÅAð»šHP1µÒÁB¬û)øä¨máú¤£±Î(`ûª9 ct¥X­«·€¾jxa¾v;»]S@œÀ¿ÓÖè6ƒ—þJ^¹èÏðÊF½8õÅ9kè5§×lþþáìœ>oÙOÖfwš+?¤0à¥"Þ‚g‚4=i¦oH„×Üì,G-.pºòÂÛ,¿å%üËÎÿdØ ü«ÁC4¼Œ•-¢ywÓ_]«Výpõa>ÌÅZyÍ_ݬj&2 ðQ¶ù¸O ²Êê°¬m|Osz±9ÅsüÓ}Í4ÆB¶\³íÜŒUü!2¦€ƒù¹Z€Ò଀ï.³ønäWýri5Xn†¾FÐØÝ4hUôñÐç_¸µr™„]Û\}wnTDy¹¼ð³e€[üñO +Š·ìoz']Š ·”$±‚…³?›™›û˜Õf¥âÌ”û3®ÖϾ}ð?›áÿƒà›•ìØÜí>´OÑv‹ïÿPÐH.žÆù€ƒ|0ó3­×`"ʇ·ÜwÞ?PÞ³S-,ðØW”©Èy«sžò(ÙpAÐMÛŒk#|ÉËU€£€ßÿ ô§šý ¢hr5Æþsjp&@ë:À` +²qÁåÐ.°CÐí^ß`â ò ÇP`¯ò´k]wt)öš\K(Î¥ søçO.€ù*Ú_ ô‘ M!/Bc‹r»OþNáßn5<Å0_Å‘|ÁAxø*çõôòæ—>4 Zí6T¼¨°ííR ]¿tŸÔ +¢bÉùz£€•Iùb£ºᦢë aúmU?‚PÞ¯¯á7®zåð_‚§Åÿ üñþ«œÌàþ¿Òä]IÜä®Ó0fNdwø„‹Ð9𵩙ÎÂÍ8ù*IýTãƒø×ùAS½Îݤ—ѰٌËqúä+ˆ…ÍsLœØ¤ÅÍ{Ö\à@gc²¯.±¡®0oA*QòõašeÉðP5$±êK†1É}kÎÌ¡ÄOr‹D šJ‹“²›„óJâÂH´þ>” ê÷wx¨|~x~-þ¸L‡5íɲÒíÙ›K|Óc“Í޼ŠA ÌÀ7Ä#³…›8‘øðù3Ï»}ÃPÍS+ê X %*}šq|sö&®ÂœF -ÜžÕdµš¬BѨÅ ‹KëòZírt<^¿ÑÄ% ôY¼]zLÜw*”ò;\ýO Îr`Ûê²­®P + »Óå”î9`'M¤uüÖЂ]+¿{ª œÀ¿Ýî“cÈ5Ê8q¢ñtÈdf’}žÇ­1A4ÀN—¤àíq«Oþn›-eUŠ©`ƒ +¨Ÿˆ=piCM3À7’ JAóig¹¿¤—6ª¹ƒ^a9ü¹âßA_ÿ:KXàŸÿD¹Çòqšú_'òlðmÁ=åñ¦ð=Ù”¢€âd9}a.Ð0ÑT¸3韅¤éÚqz«ãËÛ5ÔçÚ1€wè 8[ `vÙ¼‰ø.Ûº…»Ää` f@“&7N ±¦îIü²Å­šÂ5‡1ÄñÕð+;®w‹]ì1ÐÌŸ»¸°†¹\‡k1g˜ÇŽk`§´‹c]ë€SQì£þw9ÙŽª5/™¶5@ü Àíä¥ìb9U4æðï÷É Ïý‘/P› 9™¢ý¶W×ä0Áºyqi‹´þX!žÅN@õ½êÑ$Q9RC«T§!•e‡!«o—GICC‡‡Bæ…†üÿ„gö1ÿvA×h@¢ðìÎ)=ÛË,Žj·äóUt¦g Åö, ÝܤŒ·_Ñ-¯t_ã(™¯¬ø ÌSºY˜¿U[ZH•nrÝ—TgÑbžÒˆ‚Á۰豂w ú&ë–x¼fVïo1ÀrŒ Ô–+̪õ_égjÞçz’(8`Ç]â065PS×n[Ϫ%Ðm…Ÿçu ·-¦ š(·;¦Ñ`‚ ë;lÃћ撞¼\W DÒ׊á>úêõì Ù»ÂoÚIpÝ>%/HoïhÎà^ô›ÐW›~ïéL|«ô*]Ž3è@R†u5V”šÑEPÈWðì‚\5Cn¶N.@›Õ +'ä]­€Ò]»ì¨÷‚® vÙÓ>Š*øLnúCÕ ¶¥!Y%• NlIz5ê7[„+Të¹¢Ð‰Ê´Š +»PŽ#§êe›×…ÒàM@‘wª<#¯j +`SÙ[½ÂrÜŸÚªUü9øOÿfÊ¿Æõ`³–®ìÌÜ÷mTc/ð7\ÛQÞªñB^õ)˜4¬ú`k«Ñ$¡„ÔW‡ú¼è5Øœ78ÇuŽv;€÷è p^ˆ«/°¼Uÿ­é EPDöÉå ÿú¢ññn­«æ6ÐüªÜrn1 ¾A‰ëê®­éæÞÁ¿&†XT¤¿q„€o¢>¼ä ª„eC;Å”(|¨út˜ýP_nÜ,•fƒ‚ÕaHIe&¬ ^|uWeÉ^†w ¨™=Ô’‹¥œT{8e^0·¥ë”—¡+ÖÀR“ÿ \G ãûçÄ€ô¥¯þΠ׶–»ˆGà T²®]¹Ã¾rêUˆ¯ Éƒ)ì÷$Œä(,@’¨Tvw÷{r¤tªê¯è+—ÊвüÊÜ@тގ +}]…@"Ä\Sùô"GÁ®1W + +®˜ÈÐýü¹‡ý‹@PZò`e縬|cS…Ô X›^Àå +@£q¨?­÷1”l£‹ñÝ€åD¥úå–£þŒá³ö¯Õ›ðG‹[0b+R/tø3ø•]9ÖîG¦Ák¤ÃU}ʬ.Œ7ÕýG[®Ç¾Î§½Ø4‹À»*€÷î 01}ÓÕž·M®%ÚŠ‹mµ¸ s°ß +psuüâKn…%ßq†L«yi¶€8¯¦5õ`‰+Õ°ÂÿÖ«“¤ß¶Ê¤šzÉ\õ 6š\–°/ìÕ@±poAc \ð~äð7S/?Œ2^ã…ÇCÙÎÞ¸¡]ÀôàöMc€Âülx[SlgÇKœ¼'¥t1FS6cƒí9{› +p п•ù£@ ¾ô¦~½«} ЫA „{_Sùò‡jÞ‡p.€s¬±Áð……Ô<ÀšV*+€;'×ÀA_íö/ïܽjý“¯ãR1ù"ˆ<Øéíÿ–KÔ…ZBS¦¢;ä(9üùoS˜@NÊ ¼¡ÈSzˆ“ó%¹mF€äŸ*`©r²S²ó +ÌáX÷C~ÚV}ÞRµ_?‹ƒ?EÙ8ÃCXì8lJºçæUïontrbJœBx«§¤TtÔÐ ”à(ÔÒÕä›VCºš „ëó–K†ið÷è à`¢p'hç,‘”GÖªq²ÁdK>áû"àûQRŒ¤rÙ€|RÓ@A)r3ð¾uK?²„° +D«dMd˜O>9kŽ!ß  àË ˜»yó¶7Ga` `î…âIŽ”w4`áóm·ƒ¹ ©PW¢šoM1v‚iU•*^Éi L +§À5Kš¼Ô0Ç?v¥ +@àãï52–PôˉßS=›È’| W>­Î``"vP´P Ï_¥_uRúÛïï>ƒÀ¿¦öfµªóÁ+.@®ý¡}èÚŒ¸{w*ò?P,Òõt´¸€ncèÂzûŸiG®Õލ¸nÆ'ðÇ®P%ùÿʵ“  È:§„û¤¾ê€|Ö²é©ÐA¼òR©x^è W˜ÃüYóÅ‚ÿ$ø/sðoh²Ø,Ôvg\Õ5Ÿ˜Í-p'6?|Õóš¦ndýŸ  ÔEP3†Ç øGŸjò`ÛÀ»Oi}ö_¡~¬yx^ç$ÔŠ"ë³v”BßYâsGB¡i9ùÜ‘¾æb@G¨z÷ø{êá8 n:€xº?Q5§O€•¯$ýFÐ@¬o(€-ɉ×ké<€Å›6Páæ-@Ì ·½Ùà# )ƒ:¦À:@ù~3éú°îB®á¢`Þµ\òbµ8õ¼¤V >øEáß[,³fúåº;øË®T"€ +HCÀ n• +vi ÍßW Ü Y| yÛ ½MIß³@€f×}¼~Üvíj^ßÞ>À¾b”û(›\ +ÏÂN½²’Çôd"×9P'À?°8µωvÛ½®Z,ÚPeܶÿãð…ëË€4VŒä¦à?œSPÀI À<|eÔ\ä@¡dUý–bÚâÁE +»†`ë+Ì!þ¬™ð×Êaµšƒÿþ õyk¥G+ke~3Þ´³Ŏ‰ÌA(§P \õ"ࢾÁʺ˜@¶ŒÆþX]éO±wÖbõ²=¯r²¹4ð}ì×› +@D 5ÌyÊ €FãèÀP8¢ªF e_í¡ ‚¨EŠbæfCC6œ(y"€\Àü–zN€%^ß:.À©°,19«ƒ?¦°ÝP70е$SŸŬùY@¾ã±"’‰ηød3ÞoXL`¢ÿ”í^LÖãäQ‘l¶Xd…Â\’#ÿ"G×Q,p +÷qâY Œû +úõ€.â+àVAVÖ«ÜÐvGC|iîUBèÕT¤úý½Žÿþ`oO#ƒ}ÉÞ‚)€{•É@Á8ð|áŠÜOYûÞŽŽÜWc®‘“ÂHݶºYùnT´ÿ/Š?Z3îŽ5æsG¡ì'ð‡|.WJhs›] øç1€Ó  bµó1ϳœŠ§b¤È1ôrs?ob€Õ»åµýgáßJÿ»FÀÅ#?Ì£{ûTé„ö#?…WW%E]¬ÖÈ‚ŠÄHá辌½×Û[ð†ÿ÷‰ˆy´ÙuÚ(Ç`!åÌë(Ý>Q”öVîoê†Î*(§ê¹x4­?ºS昘èÿ3 +`•Í6òºx#!îM@©o +@e?  €ÞŠÞ¬?Ñ’ s¢(ØÏ+k7¨/òô9„|€ÒÏ–DÚ)€_‘ÃÖ½$€P· %iUŠ)ø)ÿçš&p ŒÀžÊuC‰ ޥؤí÷~ßå ŒQä=H5P®K'ôÝö>ÔX¨¬Á­ŽË~R»ûP»™èï ðý?{†?ñ%T ß=ð}ºâÀý9èRÎëëç§wîuð~?è|¡º‰U?p`1—Ž#Â9~û™‹pYV À€~€´Æ)ü÷÷Ï*ì$0] ÀSýø$Õœ‹¸Z€I8¼Ÿ³‰¸»æ$@ŽþüZ£Ö6?ønRO…lÍá›ãr^ o;Kl†à)3*p½^Ë”‹ŠŒ¿'&ü_˜R?^_L_£b‘/v '/SÙµÏHSŸ ¶òEv)€ç"€©.ü©Ô>.”̸P¸€8JO¶ÑñÌü1UZS`%EñoínÜ,X Àì’@rÒà6•‰ ¯¹P%€)sNœá€©7W7qJoS’Àj§ò%à63Äìÿ›&ñÕûÙÅh‚•ªÜ‚vû^§?xŠ@´UÁ}P¾³–7ÀþçP‰6æH_vŸI€ÿ}À¸û†.î´+ûÚï¥ÑëªGŸªáA·»r§óÅ ÷Åï;ÿmÝ´!4ž˜–’w &\‚ý°¾b(«+èuóòßàÏç5Ài à¼îObÊš—Æ>Æ9{'àÞ, ð°Z­æàŸÀ¿•|Ú‰4Ë_¥Qvç_é°É&v?ö&j6y©œ_Ûg o«Š¢jù~4½5³l”dj—Bpqú8Žƒf„i’&£Õ85c®™ ’×£Æh¤Ö²ñoG£o’Q#o8mÝ› +ÀÁü\-Àûõ¸¤@›¢¢Æ…„&¯i0 î›zÇàB ê'1€‚&¦i4<ˆÅ6Î*ä18:ðVP¸eIy»aµ³A!ß–{Emjò(Ý$¿qݲ†ºqj|7ïð/0U  ¬h +@.ÀÒzâÀG'1—C'×4Ó~zœQ"€Ë/¹ÓÎä ¢ûª¾Û³â¼Ãf,Pu~oŸcÀ”½;+•¦ÿ@“Xkýý~¥ý”ókÿß~¯ À³£5ÖùÚw*++*¤ÂØ(Þ”û¼}ލhš/®€.À¼Âûü ¾ì!AbN +Æ@„@P¡ø‡<¬‚á_Ÿq·s‰P-Àù€Õœ­Ài àZ€é@™lò +Àáý›(@®ü[ÉèÓÖ§­D]ZÖÊåµåòÚZqmmyyùçü;[(oÉ\Ÿ³ò­eOóÿ†þ¯ýàa +šïvaYs/—««êߤ pËì6õç†Rûj®npQ @Û…ñ”f'øŸÄ& +àê€#à?Å`oÇÕœä…ü90àÞPªò߀†þBX;58é5 ñUßXœ_"q"aµš5~§ ÇŽ.¦„‰?Ncgj¤jN|TP›%)©<$³™ +𻎠+°bÿ ÊWÐŒÕÆ¶©fñÓÜwøÜyÖáO@ÓokJ_`_ÚÀ¼ WôvÁ>Ãmù÷Ýþ®pÏêÝN +`±¦MVø«HöwžòþÅR \POE5ë¹sçŽæúÌ/H˜GŽ¿:$Ù¦ÝÞþ@µ€¸x!6/€F)‘@§)Màÿ9{rñÇÎ+€< Qœ•Ú`>8UØSíoØ”@˜ÈáŸh®ËOAÿÝrš³aò*KîF¯Ò¤S¢Bl\dý(ØÊâÃ(ƒÇÉ0®ª×r6N(yÒô•‰\ÅB?ÿ4ÎÒ,y‚zN¿4õ¯7ÀB_€i¾sü;p4:£NbŸØí‹É±I àl-€4@^ àªÏÇP;xdŽ @5‹s +êþ1×Àþzj²‰0àwRu +6ÊΣœ!­–6ó…~HóíÆÈo80=ÃGià'ÚxÝû¸@>ôu;‰ÀU H_ãESŽvlæàoïØ³gŽî=ë<Ûé<ã] òù|ïT(¬Û¨Ü¬ªv%0U.|NnÁþKìŽilÿ•ʽÊS5ET¥žü£àwa€®Õ>h¢¿{Úž¶Í9J# YиÚÃßéÀb_|h°ÖƒjƒäJÿß#>$(ýÙ® ´ß- Ë€pÿf Àrê¹9èbîØI Ààåø§ø%廼òô&#Ååfªk€LÙBƒÈ.–¹&å:²Ü†×\P“ae,Ó/äzaJ³¨y9k€ +îKŶš¿_÷¿Uüýúè[ÍÅ&¹ÛÀb§ +à²vªNk4 ’^Ö˜ öDµU¨YÅéÃà-n%ÕæXU¥±U˜²½;¾³$~øúdsˆ( 5Ú*†zÔxPÊÖÿrP?U÷IÄdÔ®Qô­ßÒJõÆolâ³;}-zFi¸–XcGß+–üê9 {« +°Ž¶òúN[îÌÓ£âž"[ZÿÞŽ<‚Ýg»,s»Û4üàÏÐ'-a¦Ót@óÈÂÝQyç?ÿ¡“S½NÌ}µ8âaǼsÇMð•$7¶Ò–Hý·U!€[2è¢wîè»bƒÁ¿•þö °‰€Nbçk\ ŸÏŀΤÚß´é€ üÁ?îÿêjyÍÒÚ¥yœ”]s`a——HÈÆ¸ó6juÊ/Õ¬KËâÆh3U€ªIIK9'(ò¸ÜsÞ to*óËÛüð¾&µ¹Ð%HÑuc& œâ2?¸‚iì·¸I#ŠÛ p—‚Þsെ4þ9øÓ[±À‰…ÀHrí^©x£ Çý€<¥€k(€I>Òp­Ñ7S +àÀ ߤD8«¼u§l7g9¼E¨ ¹†¡L@b¯°àøóFá¼R|¦Eàh²¿ðêPn¿xü\1X뮃0¨×ŽÎ(ÏW4“?4 3üŸ0Š^œ²R1 ïÃXgBÚßF1„•üz¸;˜èé½;m´¿Ô„"F _¥¿6Ó±8Ò;´0\Ò@£‰\ÔàM\åæÐ~¡M€Êÿ\þ­¤Œïï’šü"ˆ“å¯ ƒ”Èb/ÌÛ1ªƒ5dÅ¢…0²>Nòi-ÿ¾±¾Å š˜M߸ÎÅÿT pe;ÄÉ›1m~TÈcä}©˜hªà²vA-ÀÿBWœ5« WXÓÆ(@6A+_ãíëÀá ÜîœÀüDX¬Õ(àbp”Ç‚§ðÏNßúà l»©O@hœWrNÀ•oSB•>ù×2…û(PU–«ìW¡¿ rÚ\€Þîgb€g¢ L;;ÓvµØ…VÍÒ-”Ý¿œƒ @9×Ì„~/6°ï¼ñݯkRw¥ü"¥ìÈ•;,Öqyw}àUÿvWŸ¿„z“ҟŸ—®°rÍÀüü¹–€? /À¥ +Àaý;W €ñ>j}šŒpþó”v)εÄË.ëúe”4˜¹.š$\lT ðfA<ËXÊ…s†y–Å ±owUû›°—ŠÿKÀØ€ʲKZžQ$÷vV\0àÚäµÉ þ¥(À%Ñ5fó o%ç/®TO±T(|HÒ‡5#€ ¥\¥þÅa«7U¹ŸÊ¸"@^;§Ó \FùêÜ€E¨:Ðö…~ý)šŽ¤_ÙÙÝCÀ¬y¦žø†AaO;Š4Œ:+p‡3¸wXýn³‹ñ‚L±„sçÆ ô†aÊþ‰˜09Át9:‘ÓqE\S¯½ËðîEëØ‡ƒ(ˆðôiNˆ­r'6êÁt„s +à´à\_€ËÚ¼Q „+·òþN}Ø/´©€ÀïH`”¬–O}™°=V_Èq««^¹èª1óàµê´¢¢uI´2csv5 !&ŠQ˜¯¦&ÛÈ&ªüµïÞ@TpPÎwE©•¦õèbÎHp£&/üˆ8‹«-oQ|~F@"|}7…á#hóJ(€a¾w¨ç]* 6É=ÜFPÄj~mÌ gÉfÚÝðÏ­~ë?¿PÔÏ*€ßP*@¯CVz +U‚-H3¬iœn!ßDÿgÆ÷v:ƒ½ÏöŒžY7[Ûßá@{í>CèRî¸úe‡³Í4HŸ}×JSíZÌV••øH ~[-øŸ\‡Ô_n6q“;}΢c8ß^Ç3à@¼}üSÎ)$/ýuÅl¯‡Ð¾F;€Ü¸0pª,ÁÞW8¨_hgkNlõ üëQM“üér¢ð“à¦w±¦°ê,¬ 4¦íJ~éî¼î•C7jÎ[˜2«¸D8˜_øá}ŒË€[p½@^ ìOð `1S")`ø[ ‰¾0nÓãŸÐ7Qà8KižåºG.§žøA"ØÒÙejˆÉËêõø›j ì·S”AQºk„â?viN +ÛnÚјqR¢¾…øÈ¿ÙW@&7ÚŠrÍÝcà߃(mïíìÿÝ6{hfA'Ìr´î€fÀÆaYit’ŸG€”å]¨ç³rWvžæ—ËFÆf:†Æú‘ qÀD7Z?舤/¤´ f€wŽ…|ˆ;|½³bk§JgkÅNÀ¹vÊšgj¦c‚Ü5€Ãú%vªŒœ°Ìafàü”Qª¿·~_á{•¹Ž(§ñA£ˆ‡ÀÝ8[×-Kÿ„~1æÛz­®¯i³âÿ}cv)§ +àÊEü›1µ<8ÀëÆ-ŸÛß5cy-€€?Á«õR +@1€i¦‡áë[@õ| ÀU㑦@î¹iç¥,ˆÌ+ñý‘znE Ù6zòûŒR?ÎZÛÿ—þ˜ÍÎÎAäîÄ͇® ˆW.”´DÕÎf”ÿßJ®(Õ'æ@-8 ®|ùŸ}öì3õ³3`°ç@nøpYç_'Æ`ô½ÌÀÖÐo4–q°ïØX`ŽHì„m…5§—ŠhwP} ä—ÄYlã(X bÍþ¸/ýd»˜üfer%Iä5)ýÙß.Jf'Vß·ëöÌlóc×8 _lgkràáÈì¤P@òóf-úÏ­¬ÎD®1£,n±þãrr³.$àÝxí³^ Љæ0²Ë„O_W)€±/€øàâ–€çj¾äoús?Ôç1€ÿg€by-À™€áÿí1€³ +€§ÊðïÂÇ$Œb0À#L÷W ¼Û+L¸rn.Æànë-v³JÔ: Ó½ò÷x-x½ÍƒÏ­®N[¬å‡AV97„K.zæ è°²øÊ[T€¤Æú*i‰€j%:xÆç׈¿= 6|Ô^ÚnW;îXS½ýuu»;¼l\q™hÁþµ":¼x€?®^l¹c +@Ä Ì›åßì—ï¡“á¸]v:=GªÈ0\;ö¨ì¬Øž˜¾t*ÒÏÔMèüíôoo0ÕP¸ÿ±û8¨_bgú˜ñµè€ è°JøZ˜!¡)+—!‰€Üìb(´ù\T; ¨¬TG¨Ð`QBx£ÎÝžL|köƒÀõûhÑ1Ùt;€É­ëîHê*í …WƬÀþüç + F¼à0|½Xز7c¢!윰§ÕBH€€7q.h"¦àWøb»uÕ(‘[ÍrxÀíZêŸ(. Åî¾Ð +~&(µ'†6Hµlfgç^åždõå@‰jþ´Ir•¯BDŽPµÅ7äÊ4‡\€½Ïœ€m|>\¶0¿ûð[õÊéžÜ}ê§îrÌ•èŸäcmàKñÖ“»€"À\°^¯5Ä-älJ¯Uófy„ªŒ´tV¯“2¥[Ï08LÞòO»¸·Å4õ∗½Ù @ÇÉ0”´„tw½«³ä8jŽ8ÒùS8…|’V³Âpü"¬/¹v(Æ5èŸî\Ò¨êp ¾Ä…kˆfÝ8OêôÎý8búÍQ=xð@[ê>Y‹˜àÕjA”lj’7¶$£=  mêõ—ÿWä_B;A@ÈO‚ópEjûsïYg°7JÚDë¤õ…%l÷_ÿu÷³=±‹l±€~²@0Œ½à ŠØ„/Z¥¡|t)\¢ô€Œír>`ÓJg¥  Õ!xiàJ¥k­|ì²á Ök/»{»3m½ Eœà_—ÌöÎ?Ÿ|»Hä1€©¾¶ÅÜÀÁü2»¨ࡵaWY8ÉÚØq:•îy·R“þŽÆ …¨èÛWD@àÚ6`2Ý·Šþ‚] oÎX7À¿ +;ûË…¯iì 0Ë!¶Ýsâ +÷]Æ3qUŠ'0 é*Å ï&7$*ÈÓQ=Fè–‚ 1~Ã…'u8\€ ­즿 íê@M‘ôs¦¦ ñ0’vBÕ4ŽÜœLÀ^J‡òžR:Ý|’:`åÿ'<0¾ÇŠ$M?v“­;ÃPS=îÛðkhįþðêðÞ}X‘ó||¨sî lS«êF>Up^È»o™‹TSuÿò‘š3™¾I"»JëÏÀª§§RVŒ†•KU€å}@ +\M–hâÁþïBõÚûÙõ4 ¶Ÿv  §r`Çgç\ñ ÇÑÖö ðÏbVT4È×X©ü’ D ×´€î`âXt@‡ÔQÙ «ž?•5ûuŠÄN!ç@Ÿì©kÓ]ƒÅ+ôÓöÖ"í`ßÔꊀ,WÂýÚÀáür;ÓÀ½õc5tDÍéA¾£ÇE]À‰tçÜŽ¬™ÝD©ô¤ å²5·TNІ‚}AQ³!²liK Ì8ÜúI_62¾FÔÖg­f5‰AVš¿V… + Su66éJÞ­«‰»ØJ=V’ÄQ QÝ*À° º€``÷W‡Üq0®©°®»Ô\L™²;O^¦q+I²ãˆã)f1Ê’­0Œ³TÓr ×ßpذÉãåAÝQÌ3ÐÉÍfT^^¥‚¨ìÃáD`BÝ í¿³‡ÐÐ ëŽÅöÔñ^À¨Û»¿å¥-?~·¯ &c íî¶»Û×¶¶agÅ!ÐÊòg¦Øµj°n¼ ù)Ì` +€¥F.jhÛuuñs[m È1ð¬—1¬ s Ø"Š 7is.Ë!ßùléß·‘º' +à]Û„ ð=ú8˜_e0 >¬ªÎ‘l + ˜HR+£c‹”´†Y3Îí@©p[ýWÅ¥æ”à-'€‰0`â$šô}w榛4[]+¯–mÊÑâ쳨ˆòªf-ßÿ'_#ðW^^.®jtò‚çÙºÜV}«¼\üùr‘uìÄ»·êùŽ=Êž_ôíHËeíä„ l¼ªxEaîƒ[Emg£\fWÇSØÚêÚZøpÍ_ИårÕ¯B» +RøkwË~èûÕjø_Ë“ƒ÷‡¬®†!ký‡—–Y¦ÿµ»Ë!gY][ l”…²NPõ9>/¢ç·Ê“ûÉ­‚»Y—ÏÓÐCП>jm˳ñ<ÙçYñËÝ·=|[µÊã¢|à‰`š†v®¸\儚ØU6#•• +pŠß•‚G€0°1¿±°ü¬÷l@sútîÉ؇|ÝÈ $bívû»ý¼Ð@ÓôsPÛZ +@¼b +€œYﮋŸx‡îݹWérAî’í‹Bjùc×§ß+|ãBu¶°vyÐæÀÏ׉íž`…§’ Î4E¹N¢ScçKû¦grF¸Àôˆ@àå’€Ðø> +À²è¦i¼Ó£ä…FñÉÒ^ÃÙž*!~Jœ´pø7à&8cÑÒ©(´0¥¬§€€>r`Tb ùzòJ_qA”òÃaêÏÝ.áŸj~RM5hkܧ¿9ŒŸd¨&¬$ Ùü£VG%ÌD_k ³¤Ùtú6ú*êØ‡i¼ì‡8 +Ÿ(¦hŒøLÿ˜&Áâ"_“ä9%i>¼Ø®Š°óW¼†¼(£3.=7×Â'”Ö¤”÷\Í_²ìûÿý·¿}“R>g¯¸%Êø4ÛäæÒoÿ×qöõ¡æ$¥ä×râôÉ3îƒ[æÜÜŽÙÃø”½aÀ‡¦^tf#UofƒB×¹µÓ;çI¬±Q“Z+„ …írÚFluÜ[z×=²­×αˆA=Xn{Qò‡5Ü‘Ø š®îÀޤ¶Ψ…É>¤Îõ§M‚©häv§·ÿÿl°g‚~¥s§³»7ØûŒ_’Û»Ÿ‰ÔG?ÁøÞ¿ªPð7ÐS#]aEj;`¨30Æ0¯˜B×UT:+6”× À:‘–mÂ=¨O{rI¿äë7çÖX;€î +ØÀ#ª°è›Ó )á(Só%5Wp¿ìhØ9ø«ò½Š#€©Àßq^¥îÕ¦ÚgY^ý$ƒt(ÿ·N€Ž$eâ j°‹‚òBêiJRi¿XHf5ÛJ"dyÓŽ9®|8VÞÒË(Àå(³†A¼Áé“òÏTÁ ú«é¬:5çÖ#ˆêqÕO>‚ØŸ\Wêßø;YP‹U¥%ãveï8,'r£½LO™gG2_â¸Î‚ ÕŒú¼|Ïnî‚€¾_j‚ÖR)FaøA+÷!"¡ hwÔÒÓP¥@«ª{Ów‘‡bˆ®™O/ŽÇ~3°Š`z +r›·Ôò†¸ŒçP˜-É.jÁÍñÒšT#»C}’“2Kashqž$„Á—Iµ«ËMà x>ØJW‡1 `æÆài¿¡´ +ÔÛ\û†~þX d)(ó¸ &õtövUó÷TÐéíiHo½Z™ñ½¿»÷o¿Ëñ/—¡3pA@Ç»j䤂 ‚”U  3ñ^é®À\—‹ìç`!¾È€@µa˜æL°ŸS°3èjR8¡gÐç¥M»â˜. j@Ý¥Îgïo”þ÷Vläü€wÀRì\ @íÛ€+Ò¯²<#Ú ½Î¬ü?«Èi!xÔíW¬.‹È7šX¹ÔLWzj¤éR‘‹ÜïQ¥C€áßeïübdV¸ÚÅ$þì,ÒBªHÀ›X ¦ ªqe~q5Ô®+ÏÓÜ3\ˆÙb±†0ÑÓBˆha=8½?èPæÚh¶u €‹-Jêܨ&ª%øßY²«ð/›Vöõ{Äm"€$ÚLãüis÷6(÷}L,«Z †_Oh«aMuI¥ÆVâ +°ü³îÕ•8‚%%Œ¹á›³¥Š e ò¶;÷âê£í hèIò{ÝmÊ“Uõ£ž¡ñ_”®zÄJ/VÙÓ€½ÀªÇ«IdÉ„ÍϘ…ûßT•ÊS!aç´ZO“$oSˆ +@Á>Nÿ3#€^geç^çÙÞþ~oÏU +ê@ ~÷;Ó + +æ (‚L +@D £jÒ.H`R¼›Q)óïb]!Û®Û8B4!›ÀÒ_ê +:PdÀ\€ÊŽ DÜëip¹œÍ€«hÐÐÁª¾ìiÝTvþ<=ÎÇaÎÄ€ð¥íxø?DXxûjs9QE™*žìEšË 8£€ü‰øD9H¶ZJÔüNW©zííœM-‡ìlë ò_XÕ©RFŽôwÆ„.m_ß +Ô̸´(ïÃ@'W>•ÅA9ñ¹Ä¼a‹ejÜ+]ª«u ¿ƒ é©û‘ÀG‰¼8*§Ö¯Ý« +즽–Jó·ç zÓ“¼Ø``ÿf @ßÞb‹¥€“ûèk÷œ&¦Ö†(žH#‘$Só;­øÍ4^Ú6%fÛqèZ´Lh y-áBàAQ¡@ÁoŒ»í z±ïçm)ÍeS{D6…»îÞãÎó™]ÈVûjËùVº}H‘“¬b--s?}SH"xûN|8 áþ ¾&õz¶‡®îôP +î‰vwz9˜ñSïö;pï¨=ŠØ-q ÓiX¥òϦ„ã|E“þ( äº X¯­,^Ñmw+•îS.S´Áæ°€)@ +@#j,pwC¢ îUñ®®Qk»”sðw¥?ÏGðïvû}¥Ö;´P2‘ïØ`‹üò˳"Ç6P¯\œÖØQï“UXæ@¸î +岎w®xÊu¥§¶…HâpJLÀöÐÇ$›çÆ>¦%bÿgj +È“qçV]<ÔÀ‰‘ýq°ª!vøá$€üÍT®áÉø\±åm°™âQX­GqY½b+ùåƒðäKó7çí$œ™ÃEV!z‰½°/W[Ý[ÚðâØÊvpœ›¤'`ø×‡Þ“°©­lµÀo+Ò‘©ý­Ä"äU4ë°îv.¼Ü…8ónÌ.έRN¸;ç”óâGò‡0Ç”öUP·«[oXq—ói µRM &µÒG³·TY|2WúL×Á]vNT`Éj¸jìMÌ€ŠÈ®)ŠÍýÎþà™F4z  Þ€Hƒ þpÜg¼¯Àrèu1¦ô58Ë›ähqÇ' +ˆ¹T;Q_!k3èÚüè+.€Æ×uö;_â@€ì¾]˜BÜ;÷z{€$;8üëjÞ(ýybþZN^…Îö8×À§T´9xk_Az«©š‡â6ËÆy4~tpÔŠÓ´œX´ ‘Z­äõ7ÙH Óã´•« @ÞNñh<ÊFIr¤Ú¡8ITÃeßq’6Ë +zok݈-³qš†ÓÏ2cý©ü›X’޶_§£,ieñ·w»T&†íÖA–½æäZ¾¥~•B²ÇY¸Ñ´- 9³nµLÚÑnÕZ©Bÿ«Ëq¶-®±Pu#ŠÃPq½•´â£V’ÅÛ™×_j6j橺øå%ƳLÒ¤u¤ G…gÇz6éq’>·Ó4ÎÆGG–ù˲ãQú¿›Yºmo$­ÑÑÑñ_¿ÿžGº¤¯ÇÙéq<²Ž£ô%«ULJÙÓ#1ãx½pci®LJëz4’hu5=RÝGœ¢òÃ(n¤HÜÒ3l¥ñz·ŽÃGiËq@-Þj¼~©PÁKŽ?sµ…˜`šΨS†È¶ÊNÅ۴̘5 b [iß‘ì åë(LkCëýÛÛýÝ¿œÀÞNïç@ÿù¶²Þ3äÆ +#ŽT#Yàœ{.Ä\€‹€[w".‚í>1ž°ZS( £Ñ;{h¾²R÷)Òkïö_r’œù üÏ–þŸOà¿RYY¹H]_€Ì ÿ"€½£P­0Šømÿ%ëÅç«—©3Ë2ÎâáWå0P5³ê‡“¤Iq·É‚X%Ci¿¹ê+G°PÆNÍø‰f3fyš4Ãpy-â]GQ;öp“-ÖšIóqóDؾ΢Oômr¼pöfU¢ëšÈËV¿§|ሣ+"?ðËWÜwU÷ÚcýUµ±QÇøø‰ïùÅ凡çæ [”Ù<Ô謁wÏ/\^ô>Bl°O3VÍæ0RÛºó¯‰mFÓ1€Íhó*SCƒ!WW,–¸•p3inãÍͦ³°ÙŒ“fÃ\pÂc>²Ípsøê'~˜>O_ÄÍfô$~Âj/Û<Œ£¦_ö­mÞŽMÙÓW5%·°Ä›…>œ…àNåb¹Ê3ðÕ‚+v*‰ç©/ÜœÅö\£¦*@› §#Í#¸“ÇÁ–ÕûšÞìqæÕÄ73›Ñ8øg(`¢Ä”›@„ò©¯9ú0Sã]͸Ϻ~ç·ƒùl0x¶¿;€r؇v»û{{Ÿul|p ÍqÀø^ïK€€ÿ^§¿»sO ÕoÁ_\ £ Ì8ú*޹¤œÀ¼à©úÉ>ž>€é+Ïq»/) «æMûÁU(€AÚhL“ö5+n†NÀVíönðÅn¿§“õÚõgº²ô笢tee8q.@²Ž$z—¾"™ª¯ø¿=§ù&n•¬I™™Ð+ ªAXN,ðZ ÜTªVèêûk,6Ãæf³…~UûE›U¿ùd¹©¶8Õ¬ÝÜ Ãµ_‡¿«›Íµ¸Yýµ.õD«uH è ðSF1eç¨ÍÙ™Ù¹BaµZåÞo= ;[C½+MØwdÉ]êV.5Øþ ý9O'+ó `™@Mrª<àða8úi6ŒŸèòÀ´1*Œ|úðpøðP¼©zì sS§ŒÊþÇ·¸b;÷ÃðÉ“'Í5ËVwÉOîÃ[ENVCntmu!Rs?ÝjUí#ÕJ’/QXæ¡o²ÖîÙž# Æ€ê5ˆ£Ç3*ÌΑIÄÿœ\/à +p*@?4X0X»ïú"˜IŠ×^¿·¿¿·{¢ŒµP4MrÛIz¼lwwÐû—ßîi6>Bþ•;6ëï¤ìçDmÖ™+(u…õ¸"iS(5ÚÑÌ>º¡²]ù¥Þ¥äö·{”Óª&ЕçÍú¸¬J{tu)íÁ¾|9úV7-' ÂÍ f`6G¿=«JxAŸ'€#€ó1¼°÷U¶á5¬¾~_üÑ’†4;ÊíG_£5ÓC52³Ç~|œ“­8CÁ¦M5 o¾8NûÕ1ÊÓZ› ‡¯Òèn¨I„ðØÇæZ QÕjóuš<´Öû*Ý(÷0yD™Î©Vo¬Ê7ÔX6Jñ#Òt‹b]jàÑ¢)f±÷s/mZùgB6Š>ïQü•´H,Á_ô£w‹MЪˆVoÏñ8´Š¿z”–« ÓVo5ŽÀuEÑøÛ?ñwÅ«ù_ÓÃä0k–ä±pä$Kqf²ñøkµþSƒÀføêßÇß§Ù!O˦MJY÷5OȾmŽÇ ·HØe˜4ÇãdÜzž•¦^Ê^¼x‘"š‡vålVœ[‚Øÿ¹h* =R+Š« U¼-LÏ ŽŸsê¡N©©š¸qmeÒa¶Ó8äq·Èr…B„yÞüËŸ¬qãpæŸl6¬s  O«–*QwÔªW-ýÛÝÝÁ¿óýýgû½ÝgšBðÎ3¤ôPB¨É¯€.tsœþ Q:hW8ïtîݱI¾Uþ›gà>EÀºc~¾`Ç¢­Z*Ö¦ðk°UûþN¥_Q0_”Ú‘(åèö%>úí>ô¤¼Òµ@¢ØÌ[?q ;r»zo)ý…ýœVþh}Ä)×1iÂ1‹L™zÚP¦—Ó · TdAø8&w}²—D †bDDßµ‘·ð^ ­o—AfOü4z6—-0  +º7éŒCp’þúM7T„éOt]õ +lò˜ hê•fK7Å6 +]ϸÂ7žÕ…öÍÃæ+>ÂbI÷€A—<Ÿ‘@Š’MÿÏ®ñ#‹Ä'²¥ Œ­?=]<€ßÖB'Œ›ÿÉ¥y| +ж¬VÓÌÓ(-äÏ{\ÖsÁâ!×õ„Xè¶ÑØú¡§qôpÌ,é,é3BVªHÌòŒá”hóçf3ÀIsò_ xŸÄOsŧ +Y°¦`9^v¯³ÿ¯.¸Û=@·³··‡?°‡S`ªßêüuDjAA@ŽƒíêSÓsX˜QuŽWøPìȉ(£W€§)¡pOŠ}… m³F@0,i"ùÀ†Ðeuñ)Ò0Â~¯¯»šS°‚ÜgmÎíÎþ¾f¶šÄNOjæ¥?¿ìg.NÀÑ€…ü•=MC»xÕ?[Éì°Î,¯aŠºaËç¶âÈÒ,µås¼"òÿ?âþv9ŽëJÓ†AbEE\”Q¦(š~ðDÂH!!E$TE&J")‚´ž§5Ž™y1<€Š¦ÛýÇ3Á:ŒDANShÃN‚ž2OÃêÝ­³è#˜ÃxîkíUi¿?ÞU_Y™;sçǾ׺×Ú_ï&ûn«œÆpw¸†Qç»T4ãôZÚm6Óù,#V¥ -Ç©ŸØ‹²¶ 4"¹V À5¦¢¨™ŽÈ‰ŠïTœP•Úð²’„7«º7Ü—„1̸%+ñT4n†ÕÛ ¡m¶1›Éò²MÈ[×Õ2Î÷Aà-Õ€wÞ$I6ŸÝnÆMñõx³Ób'ª„óΖ5c¦ž¤Ÿh½ìkhFaT%ÞI»‹éaÏå%Í+Äëóéó%a²FðV”íJ¸b.Mß•ÊXm)˜kM®\ +`6Õu£ jEÖÖ˜ª%Za#éi½»$FIœB/ŒïÌ'yK›•ÙX™DÝö"3Lxïç¸$rQÚܸ÷ ¦ò€vÀ"Êþî#éÀ¯—R?ö +@Ë:£'°ÿo´þö_ZâþÝ{ø§Æ† @ò×ÅÞV––Jõ)^¶RgÇ š­BÖz6/W±ÐŽ7ºwã©ä™õ ½ÍPÂV¼˜ÁH÷æs9ç¦Òù/»Q³‘3ñ¦Ä(­SnW/´Fa¶>1X7®®°Æp¢æ”ÑY¢tAÐ Ë«ÿÜÿnS0[°ý[S;,ÖjAyUw¬šr…'Áï²öž ô.¥’ Â:ð»$çÊ)÷ì4‰»¿žßmÇQ%ªëâL`’Ž~„÷´²–ÚKZûÂt6HÜzÞ^ù.ïλÐ’¦aCœ!X€ð`à4¦ðiÀ4í$+² h69 S·‚°QÍP¾í“.’”*l”¨†4ã¶Ù…Ó^‚„®ÈuÃ0O£Y+„•ÒdÐL¶áî-k µ2FAVI÷„ +P§Ù+ü|?ÏY§/áW«~õ?žˆX-3ˆ?¸SðPïÏ…iöc:Švt,B(”=÷ŠÖnÐü‰x¸Á˜ƒP&ƒbk nq nüˆf4ûU²»h¦»÷ ûuLÓ3|£tú´¤°ã+: ÜDªäÞÏž>½ç×ö˜úÆó­¿}™õ÷$‚B þψµoÙ€Ç÷voŸ +ƒ³ò' +°&W×o£ mœ¥×6ɨ g]ÙÂÒB¤šUKÞ s™šMU­æaW%O" µ»±Þ^QQ†ýÒ ¦{` ²*¥Ç…Ë9/¡f¸Ä°šI\ 1Þ”â$*GM +xÕÝ:/õɰÃPÚ\£$ bŒvhÔæâ†eî«Wö³ÊІÜÊKµ1‹°–$oîå%Ùõ7¾¤.³Å;RwÕ ¾¼&¼[ó!‹¤Büds7 ûFô]sªMÝa¤ß“ W¬~b,eÿÜ -Ë/&@ÇÚ'ODžüÿùËé¿Uáè¯` Ì?]…¤€öãùf®¥°çÊ `ÝtHK !ö½§c^ þݽÿ@8WJæõ¿qÿ1Mú¥Ä¿Á°g 42ª }‰ðk£•ÿœá¸–í§´Úÿ@ÿëe€cðøuwuˆÇž¢Ëεþ,yìKÈή÷¼À[×”;¿ùm þ%­½ACËÁDp¶Œ%$NçeÕW™…æZ#Ý·µUù†ÅE‰”*iìÉÌ­®mödÛ©¤A¦ÙLú‹Y?üŠñpÅp·Œ X}רÚBiꘓv©6)¤¡ . XmDQC…[¯YÙ9Æ!/+Í*Õ,}pK2g¿ç¥³IZ- »© “Õ­\§kèšÀ6¾ÈÀ#žÿ‘ÝÎÛG;^›‹ÇÑï$­NöêUŠ2\L·n±E4Н,¡ÿনw¾÷çÛ)ãžÒ‚±V™ªD6BÙÇ­ +@×fǪ üsåqþ.Ö*î_YúåU½[zÖA¸Vm¼RÞ”T¤Õ’ÊEY´éGGµ±¦â®=,2£ë¯•n} bañß»W±ÄQ(€Ç¿x"F,ÑHð_~úô郧?3ðË'OO±ç_>ùGœu¡òᣟYû‡R­R@ˆÇœÃÄø+ü£zž<|úøáëY0³®!ù=sG´Š®tø´ áݸÿ#\ÿ (»–®ßÖ]­%Šá‘ÔÙõ»Û¿Ð9?yr€T˜@.¾¢#ˆ°ÿ]ªY̓ö{üàÛ÷޳ƃgX^ûÔ“‡ï¾ûîûïþä'?y×^?yÿ]¾ôm¢-~Éäj¹ì—Þ÷}É´ßßÿýßñ±7{½Í[_‘ÜÒ(¶þq'…I!=¬YHæ­=.%TF¿ù¥•4‰ +q÷äY#P²Õ4™Rb‡o}§­~3; ­‘p« +×ÇS(sb“•”œÀªËæV[ gðë9‘û9"a³´ ¨ÏÕׂê¦Çv´T¦D7æhÌÅQR“(ÎÖdy¹^Çþ›ŒWƆ + 0–o;}wgq?ì?/רkáºeâ[IÚjõ2œ8͇1¾ãòqœ¶©§—’èfÙµ;?ìfñ†«… jÓ¥J@]b´¡¸ußÂq @`®V—“j*ö†¹wÀ´×ˆØ%8€çgB*ei…@”âض(¸T¿•ƾ£ݸ¬I F®Þ»/É: +^n<”ù‡VË püŸ\xÅu'*°-»j.€tÑw7áþ#ÀÇŸi”‹! +@¶VJ‡Ázå» ÷L)öT„Bä1y¨°ôTÒÁoûñ½ûÛæP3!¥@àîýû÷­€sD›ŽUhoÀ ŸyOŽ?Þ‡t›Ü©¸ž20Q„í¡H±Â+‘”'ÒeÌ%òVÖßî"íœò>Ø·ÏÝ?/?þ‰ þ®Ô¬“¡àÿ'_|¡÷Æ£ß^dªEôé\ÆøÚ««¾ è‘{ºQHœÍš±þ Œã_ÇM‹í…0C€Úh-k¤¦/¢¤=eC»Š¬å­Vš7óPþ,Bñ6à’Ê?.<ƒ¸bá†}êWÂDˆ¹5äÖ|¸.ìJDñlâ|ú8(ËyÂ7X‚,%¢ëIà #NI0 ~jŒi,ø_ô + æš xÓËûé|ŸýéäN?O¿*×mP­“^°!>…+κ^t¨`ñâùÀf–®@ˆ•t³õ,'‰Ý#y€åŠk&)aP?;í ­5dÑkÒº´HÎ$½(Gîõëêí^$¡×ŠÎ×´‡Éá¥ô£×R®–Ž5V+ +„Õn6ýÄ L ä”±!…ػߔy +>ËÆ©UÜ mN„Ox¸ÐˆÜxïáCx WRAËþ[á'÷Z`Q„á±)‘ jÄ=žŠFHI@0hŽ#Û°‚5}÷p2îmÓtH›É{ûîû÷Œ˜!ðð.÷¤ˆW  ÷áŸþéŸÿâ¿Ðñ0öR^Â; àtbûU¥äx´ýäÑ=kéðþëïnÁNÿ0/¤ËîÿØ1ýñr&¸Žø @èG¬@¼­ˆ0il›df0„ôŒ±‡Z{QÚ¤Æj 0’–ëP +½#fîbŒ6XoWzÙ|òQi6 ê/¤Îx„ÚXA½_‘@ ø)}`UìÓ¸êÄ4€È0"bµ1©€º¾‹ äÜõ_|“ìu’ôÛ½æf™1غÒ{d37wšÒašºQ®¿Õå/[q–nôãÛ(€$yF{^‡t 3“•iDâA;]6l¿vY.Àr"X/G½¸6p`ÿØx™ÿ¥ &x¤+ kò‹ˆêTÂI*ßÑ—QSÏE2W©U­õ°|¸!ÁTŒØ[*@ðež¯ªä‹ð¶b_è÷åð@{Y³¦?®Èÿ%*@߸Úôx +©ÿÌúðÍòÿµíW¯e“i~òË_ +þzAÐÅΘ™·Ž¿àÐPúó'?ßÞ¾~•$:DZ`[À]½ Ã8R:)© › +¢€¹ñJƒÈåkô‹'Oþé‰|è€ÃÁ kÈ…ð¥mÿâñ¶.ÇÐþöÖÿáÃG Cît€ch,?‹ïjÅY à}vô +à ÌÛŠ‹Fã( _mµ¶–îÐ5ØäY*3ÿŒv%0|𯷸®Š­¬}CæL#etÝ͸Å›Iç ˶Z2„I¸bUÖ@à¸0°?ñ4Ԉȉ]¥„2¨žE]EÓÀ/±Á@‚úZTqíâ긲MbªQ*…÷ÕZȲsuÑæNŒK×,ËGËŒ„%kêŒåùŸ‘ÑÿÏ~='Ø÷]Ò>Õ O¤ Æÿ|žÄí,MÒÅg;º-ý½íñw^Ù]±ÆIÒOšß¦xÝn¿›‡»º;­gЦ`îK1Í÷;Rù‹\'$P5?ÉÁêÜ+¸~†5S؆ê5wƒ±\Ý•hVëãVÚâqŠq؈JÚN’,ü GŠoD"U¦~”¡«àD`ãU”­d[™Ç‚Úzù¬r…¹{ﺳ}¶Õäöe›h6§ è=Çê·ï ÍýÓSÚü<|ô?PÔš3Am‚°΂¬@‹ÙÆÕWúGÄí ÿœ§p÷#]}ðsC²˜Â“Ÿßؾ·´É}í¦#cîuˆ'ÊC‡6°}ïú]L>ÌÖ‚Nõmýûp ¹¿øu‰¦Œrn‹jˆ ]};ëïáoøÓéör1Ó&Bùÿ'ÀFÀ_øpÞÛÈÞ^FG“4½µŸ¹E‰³^¾«7¹4Ëód¾ÉLUØ¢vÖŒó¾ ÚTyHÓgéî—¸‡Úöo7Ò¯è=”ý€#§Ò:üáÁáÓ^$‹ë"ÇT€·“…Ðw6Z‘UÌ’HF¹ºUþ£©àVØ4ÔËHEk§M:ýªèë”Ó¬µ¿ÖNµ­=¢M¨«ëÄI+ gå[ƒ»D%_y§LÝ+Õ¢V²Êa]Ž¡6Ïÿ´Ü o¿¼ê&”EJsºûd‡ýGZÌ¿Ló´›~ùQ7ýÃóüE¶Ç;ùá‘‹ûwÝLËßt×»YWwë«gIš¯dGº‘m=£Ü}mhßN¾ÒA%n4„0K¥Šƒš<ú\Ê$ ¨5±áƒñ5Ò¤£ëkÇaÔÖ­ +aD¢5©Nªš¨qÝ&I£°™DwDû‚+Aº˜ö_0c‹œ4¤€ºÙ .yO²²îLŸü¯Täµ7€ÂOý™-ÙL3¤„tðLå¾<ëG0ü‚Fðio+@æÝµ­¸–×uaýúõwA‰aQ@4å:Ⱦ/üÞ¿÷˜Ñ@h'lµu|dÖu¶Úøè7o­m b΃¿”9Z%#£HmHO0^ÈÏ(7‚.Xßœýžgý ücÊGÀ€÷ÿx 0‘(´AÁþ/ S9¼­4š?h6˜¿¼,0U„¤ú÷K?ÚùÆÊTÈFëØ*q?úž­þ Z­ÎWççµ}VË$’xÖ§‘„˜ÿ8¢HqL”å|cV™UÇÇÆÆÆKåreªRªN]i”ÕêÔÔå4”ÙêT¥ì¤R®•Ë—•Üí¡/^ÕªÞúÒš2ñÂYý±-åJµ\Ó¾¥ÒøxIY••Ël™Äo)®IÜÄõ±ýhþR©FÜâž­„óM& YX¸¶8^k,.^[\ù!ƒzñÚ5[`ê¶pq}ñ?­3+Ⱥ­bÝ"·¼Tž½vM·¸±¸¢ûöCÝ".€ C¦Ê¥±Kº!v–úÖ•ÓtpvÖÝ‹©oýò¶/É<ß³ó³J¤?LbÂ,ù…©ÙY¯L¯âEº +/è¤õòc†YRmÐ^ýŠ kƒá[O³-¢î=øL_T~\µMÀÒ¢öÇ!`(¡ТE®õ"Ðoá; )¸êÇ·ð¾Üõ«¶h+¤Ot0o„]*X‰´Mîô[Ò"J`› ƒ€ý£_*“m?±HŽçZü ŠcÊݹ'ü>¾ûž®ÑZ?CBlÙo½¸KNð7ôÿG¼¥ä…æA `$ðã!œxý’í†IöûÝ®aR¢"f’ÒV‡N©éí”i)â/µ˜'aÚIEAEXéÈš¥;²EY’uïȤ0\E[$U̶$;¾iÖ…È´ƒø]8Ä1pû¸Èp'Qø[¢9›æ~P׳P\æI›ŒZÈJ­RQšÐ­…ÛV#^]þ.Ф] <–†Ìb15šr8ÍF<¢Íxg«¼,G·6CS÷I9aÔX`³®†v7ç}ôeñ&q}|³´Vn(k&3ËÝÏ¿;üaöM_$€ÙÐöwéMtw›I¾¿o»hu¿x˜wû/óþwí.#)¥ßöÿwÿðè ÏØ I¬u¹iúòßšbVs㺨¨Q›«sÉzoØ•Gœ/7M÷oO^”‹;ro,®4£F¨;·¹µ_š£–j=ó…f²)ÿjO4#ïæ/Ò|—öÜ` [IW¿ËÈ{fsYc0±2/ A³°Í·ßWû±ÕaÊxö›£±(¤Ì`›vÍ.ç úïãS¾äo1þè`~J$ÈgåNÀÿžoý%ÍXrŒýO´øñô®Bðõ€áÿx @bÏömd5Ç“bô‹ÎÖãgMNbÜʶ’T…„5·V£àƒh-m1Yôpg9ÚÆÁ£ñ†$þ*‚°jרõ¸ +°C >ˆwº–y ³\š¬L×êrýWiZT]ÃóFˆKË™]Ÿ§G3qª¹¸bQ:8KêsÁƒ®!ÌN.‘µDK¶µ¶œ”çÖH+-S*]R^ZŽâŠ‹ütÙZ,G?=ëW®1jê"Kêo+)Õâh …$ïaïpÞ¢]³¼˜8¹Cskyºi> +k$ƒÞÞ«çGwÜmà÷Vœô p-ªWjœ’v^4®5¬¾ÓËRͪµ/Sõ¿š6‚ŽNÛ¨Áí¤ìC$ô(r fÁÒ}-X°ïÐi»•5ÂãV()€Ž½Æd,)Ï^hÉ~ð¨”õ•ð…Åu ÀÚéSò0¿¢Ñl³C±ƒš±m÷LJp-«ƒP pÏàz¾¡J+\}楿dïDÿ 'žè -PIÁ¨oCÐé1¶É}±ùmtš;Õ‡¶Q¹¾¡1àÌ=ï1yï]VÚ*Ó¨w¤¸øQëÿù#ÁØáùÇB:Ö¿`#fÿ¼Z€ã1‰Ué½…Ñóù°Á/Bo½ˆ3é]F9–á'åEº)v%a S+ûÑZÛdv^·R¾ãBt›¡Æ ýES“çÖÆ½ˆùT€/~QLæ©I\ %Ó*«L®³‘õûÀ`~9¨ëìü_I4¥?Wj¼‡2G[À=±´$Ÿ*2“ šªÄ,þKäe-ª·‚Q(+€òÒ9èt’Ng3®(s]–îUœfvßµøÕ½°ùFõ›ì.æI|[f؉ßÛÛÛëõŽânz[ÿm4a:\mÅ«kn¾^—0ŸoüÐ< bV háSªÿQ}¯)O©EšHl²XT¤Z“ª Y-:R!:Ñcµ¶âô¦…€ë‘¢sF•KP^x;+‘'L°MöÐðo¼UìQVòhm´/) JrÚúÙ²?{ï†ÐÌñ¥A¤Wtˆû´&nWÛì`Ô>”º_¬œwÁ>îÍ1ÝQ ™qýZƒÏá¶h›X)Ke>¼m²¶M:ð—zàÔšKä<}é^|q/þ¨vNðµþŸ€Å~,[/àÚèËD +ÅQpN @3|Y`œ×Q1hJPÒãz5ÞtºÎÞÖÊqº$¶ÑgU˜Å9­8¸ª¿8c:ykª¦Ï-Û²*˯ŸC°n 4@¡¢ðø+VhÊNP_ +àb©4a +ŠŸþ´Ö3‚áË­t­þæ¼Å¯ÕV¥*x¹îoý¦J8=ýjµÄ‚ÿuähÎ1„µ¨\;†ÿ‹c´:®ÅST¾¥xˆ¿Al¸Î8*Õ¸,šîäé|·èà9 ÏFœëaÄ[‰Ý/Áz«Óëý†Zÿ§ßÙäa¶ž[ »,+?#GF"lñZãš.l®Ñ`¾9)1.gÎs&)©Ö:”(ŽÊQ+˜£ÚÔ4@ã¦Ð¯{Om ÷hTDäM +`msss/ˆS©s(ÖôY\Yp +À©Ì+Öü†Ç+Paµ +ÑF+ó÷PÄñ1°`¦UøÒžè³²N90ðu¶|æòð°ÒñD\À: +˜0¸þ +W?s +À¾ì×gš@ ° V¿ú¾Ê¡Q|qt;¬ò!€è¢ ¸NƼ}ïr¾ÎÅŠF\ï]Žcз³+„•$9þ†þ!ü xKïb40ûû+bº‡½Åk¾©н]* hCtHTbU¶V›QëãØæ®Ùëtz{ÉJ_ôÓPí…ºDûµï¼©]ÿŸ&ÌÖ +(ß±ì`‡´C`*@¦yøRaV‚t^\T€‡P8S¯/}¸DuviuØ>^¢"Í—ˆ¶/WÜ4…&ÔïIêu@]Nq­A jõ8ºDÁ_î¿4ÀE¢€Æ¦¤<Þ(ào’þŽt_'¬³-£_dóÉqw& 2À‘€ ÷÷•;=1iWqòGh¿%" ±FSžZezu­Í$“ pí&PÖýàÌæP\ϪÕW‰}&µ´ZdêµiÁ1€ïÛ>àV•¦DÐUBzJnßæZG@.@”,ëF-¯ÚSw $…p* `¦„*+þ®ü[Áf <tvæË0ïè +4(–äoÓàÁgw?sA=¸6ÁE,h*Ößp÷g…0´;ø<Ó'Zæ¬$œŽÆõ÷èÜïÄVJ5f`Êí Ònœ&m’=0ÕcŒ":…ªCxa‹ý¹¯Å»ÖåÀÿ„õÿüÑçCücé‰ÿC @‹|¿2€ã +à Ë{ƒ¬Ä8Þ2²ïÅ`)ÈÐË ÜÚ²aë{¼Ò•Cæ¥ÕÊÛ,ÑÕ4£bN±P¥M{ؤï°þ×û+ÕVÍ\£Á‚À¿ÖÚ\í4–‰Ì®“µE† +À«óÛ<ZÞ+b|õº÷ž´Ã£ôØõ0@1ÐàÎ1;ŠaäÑCóh ÃýÀúµõ³‡úá#ÝÞÅ4ÝÁˆêRô'öØG+¡œL©àÜKØn&¶u¦ÒUbv¶ˆ±ö³ 9ñ¬@9q²dòàÆ]j8îóôZvtÁÿñ*@?Ü“ü ý£ð—0´í‚²õ(bƒ¾rÎa¯Å$ʽs^i–ÐO%“¡ xñ‘Ì–"„­N ÛMÿ•4 súïŒLn‘Ч` y3%NÕp¥S†vÈ,r…(öˆ¥¼[ôãG`•™™ÑU‘€`-¨uˆø¹žÓfú}öUUükµé+µÊ˜s Aް5^³n€Ú4ŽmáHŒÀq¥±x“8„¿AìÊ·’µèREW¸µò°ÍD;Ì`ëk!Iƒ†>RzÿB6Ò\·q³¥[©;g3©ºÀàQ$ùÂââbýfý&ç~³&â3)ßÉ…uéAÐÒ•ëÎÕ£¤´ÖD¯t3­Bëç›AÈpjÖÀ ú/„¯~¸ººöáZ§¦Ç¡û¤Ód°¦™…U^§ Ú*ùJ&iD×:ú1õŸ öVp¶_ úÂÌ +ó`Yk¬Åî#AaâðìŽiÇ5`ºmŒôä~fCŠƒsm'¡v¶4–•q;Ž…óAéÕ»Û:c[7rÖº„7÷«Ô 1ï(Ã{?"u!RJ.¹û§ÿ,Ý}—ÜüOXSÿ|¿/›±Gè{ùû±P®Ÿ×cÃZ€ã1€/¾ðåï|‘ýne®;Ž÷|%€w(oÌûk3Ä$[Ÿ¤avŒ¨TlÀj…qKž5wiJ·¶kGDăm Y°A~ˆ~½T°£dÖVKµ cK“ÓÒ33*»2㳉áÜ«PkÈšha¦ÉzW1é"ƒ-H]ô—=ãZU{ÍÉW(s ¥d¢-á¿÷òÇ*˜i =±º–ÌFq½6YYÂø£}œïÖ³¦ô¯Óg?ÑSðlŒü¶c€¶¼&˜¾Ñ¦ £Ö¦ïÆ6h}øh›*·û†a±oŒ4éùïõXØTÆ>}ô¹¼ Klá†|û¶-Zï4 Þ“€¼ØéÚ)#±³çüáPÚ¢‹|°½ýh[›®^¿w~_h€BØv×ÇÀ}ãÿøúOÀÿѰ?°îï»V@SÅÖÈXoÀ×c_Ï=ÔÖ‹5bÈ¿ÜÓ• t”ñòmÒðVk+MWú*pÖ +a0Š‚ln¦a’2L¦Í‚¬Õk‹*,{± I1¡L‹i€á‰¥ø­ ”a²3Ób³uzõ$ÆýÑEè>oŽÿÒš€™NÌ (¤BÄËD?–fˆ§*b:äò `bB.À÷.¸²T6Íòvâìó$Ùá[úôÒ,C‚dfWTHfÝ ýÃÒ—nF3N»¦ôWwKÂäÁ[4o§@»é¹ÈQ™™¬YP1ƒ¸s²ëjrk&Ñ‚k†ÿ`³*¶S«o–oã\^ŽÜ}tQù8 km9ZµÞCzìµ(ž›®L‹½pf«´-@ƶ·O¨cRàK6Sk +lÚ¾÷ ˜o3U Ùk}i‹áh +…wï‰úÓJÿÁvWÖV +àºyyX@ž>¸ÀЏm‘0(€ÐýÙ1s«Up¼ßRX°@ë]!£®”xB|Â¥öðÑTdðÑ•èJuŒŸ?¢©3½ +-Èù˜˜gb»ê-HwÂÿ4ëÿèÁ½!ø ñµCÔ¿ÎüÒ»ï_w à5ðVu„z˜íO_޲>iú¥½R£¦4@|È$q4<”2 & a? k tÂó•˜J©9ͨku*º6«ôíÛ ‡i,@Åmÿ|R:õkÉÕLBh Pký@»ûUQ—’ʵ9Lºì?â‚Ü&8 B4[j3«l±¨ÍX _ О«åÖ±,ÎÓ¡o’Ö^*üÚ"P ²k‚£[¹'›žoòw3ŽòÅÃVL{k‘} QøWçE;Íé8H÷Býè¶ë>骧ýŽiº¸ðÿ¹fµy&R•¥ òt{"q€¥Ÿ.'Õ(ÔùN-EuiÃ@€¯¤!€óâJêâÒÒ² +´ ˆ˜Ì>¨Ï”*Ð3ùöÈ‘±Ç·Ý-T€áÍ33¨¦~$ Xé¿·}ãŤl̾3Í÷뇞÷:íþÉî?UÖ&Fàk„ F:(*ܲ=²ìÇôᆥè>ä€cú‡[áÒúê!TZÄÚ,\½ûØFæ2…à`k¿bî×f×£“¦‘c~ú:(v2ÀNÚäöÕ^ÅIžt›€=ÂdûåíÚ>€R IÞ"ðÅîA/LÜa*PÈ7W¤¬¶WÿéCqÕ­²,<Ð2;âº$®PjQÿÓ0ìý– íõVq/NRLô,àc㮼¬áê¬k2Êò`¿Ö0\E”¿2}¥bf¦§…ãi)Oÿí *~í2  ÷ò\™2^Ž•Â‹ +þMLÖþ®–¸ÆDo'¾*õ|ÛOÓ^O +@äbs#È×tëtzr ìÞ¸ ô{ë_C¹ú¶¬íƘäùK%YÏ€ 5°òìk3Ì׋l&Éüµkü€$¦‹ŽTºìe¹KqµSí™h3€’º—\jC|J H¦h$%±úf +— 5èY0i +@bÕ¿ÈØë%'À;÷îÝ· 8þwûCÙ¿ïj¬ôßûϲ®B£‚0" «lÔ¡Ó5Ò¿»´ìDœ ñDZá*Cõo{¯A 1ÿ8 {.Écæ •yÿì—OEÐhûP¸46Ä8ú W^ Þ» + o¿!4ëÃɾKS]R¡t”­è‰´žÅîm£Üdö‹øG¿?„Î7çèÏðtøk3à6áCû­% (‹¯Ç´¢ýNÆ$þQ#bö«„¥=ß¾'ŠÚí;öJ°éL`~S×Oº% e‘fp{I€ŠË¦a3kj™±0ã4S¡µÆÃ_ôzRVª¬}¼ö±¸²™7œfp ˜ã¼R£5+_^EÖ©°‹¯‰ ¨¨ëOPš6pEoA^ë#ÈÞ×–¬])_ ¢KtA»ÿ®ŽHÙ|OGYŠe>ƒ·å°ô7Šl}¯·ÓkÅïˆÄSbVº_®bµw4@5ãýgýfNcŸM¦h1IS.@6œ+,ÉEÐ.G’téDáÎ)’åz­"& K¤©Äòr«:%zU¦åø´[kÏt¨Zm%JF úËT ,EQ«/€)z'c*Õ?ß–á%š†YbB“Á_È¿{×ͼ%À. ¢Î‹8`¸ÆÐöl×`ûàñõêõ(Ç”:!ìY0j/¿‚AE´ßÓ'Ÿs2×uÃXZ€±”Óö}¥xïê'ú·mü…è¿üÝëZÒ2kMè[G°~÷˜aèGÛ÷µQ€ü‡ +@»RõgÇ¡]"bè þè¯ü Ó/«?l 8ôüáä85ð6 +àC\ûVçùà±›·bÕMÜÏj,Êž$áŸDü­ZC0 ¡=ùäŒ#Ë›Jz: '‰öZ­ßP¥µ%?@\ñc&œ:)kI”‰Àr07qñ"#È—áµ !Ài“i©Ó¼Ùü%c{Â~ÅW´f¹V#V6kµrP) †j®n @áK²’Thƒüâ7½êÞÆŸ/­-)€^¯—.—›•ô¶iÌVòigo/÷·'NöÒXFþ°Ù7«/‘¯O=\€­­,ÎriNhTC¡ˆØÞQœ5~ؘ˜%%`:ëè`"p—áþ±ÿ^]àÆÏÕC²-¶`•‚°qÄ`I£ |€íGiDç|ôà¥/Sr+H¬”‡V  Ô0€÷î=vl3£‘Nš?fÈu÷i¬äÇ(cÙ $âÑÇì¿ÐÏœCÆLœ +Î^i0îÊ’÷ü˜¶Æ†µ€Z¯¯Ç†µ§(€7÷ Ìeœsà‹v×3Îö]·à|3ö•NpuwBí‹ß­Ȭ‹x¿€"Å[0€(ºÕ¼•/6ûrbÓÀõ§ PñUᦳ0;Ìà€ü¥Rå陪 ª×””â}S¦Kì?«mµ*µreiÉ„D@ n[!H¼„´˜QÁ—úx‹Wÿo!½Nïà7{¯>¯”§Ãoéò³N¯¯%¬óþ1ϳÎwñQ¾µµcþ99åöí¤™\€W=VIˆ Ðõ‹p4¢‡aøQ¨'@;ÃÀ\¹Ò˜.L·°¯®uâJPZxœL¤ã$xýt^]Îgðe-ˆV—h¤CâY‹wjI«^™°¼xæ^ûÓÈ ñèçÛ6Q–)€í'ÿHlÏNÕ=fÙAQ<@0·®°û˜V@PiÃ3ohóá6Ãë¢2è]¸.`›=PJ.´ÛÐ;NPF}ôð=ì)½ú”ù})è»Üõ +€o h¥Ô“` ßÞ¶tÚëï`t>Ä{?²~ÿV{Ãy˜dÅ Þã…¦@DgHåI» Úà m~†õ—8ã?¬Àšhê âü0í{V àm*²½žÚ +&Òí2øD·KÁô9SY&ÏzV …ä~?>Ìò½ƒüà —g›õó,Íò”Bšý.ï&én³gùQÆ,–é^?Ë2F³Îû½íßÙr*@ºÀÅ=èI'í«ˬm& +Dë³é"Zû¬’HÈÖÖ)Âúmèwªª5sX[T¼9wUG‹‰*Âu«DÈð”iÚ*ï Òæ±^–¢Äµ¤o:3¼Qú‡¯òƒl/ Jµ©ÐÆö~–ì¼ê¦Éaš§ºÝ»iòÕÞááA~ø];M²Ýôº…‡t +üJ·8Íöt?_þ1ï÷™&”„Ö­¯60½hÞíîî3ú8F;’+'ç-Zª@h¸gr֤آjXÕ¶ A.‹(HQvÕŠ­ÖE$)Ú'ŽÑ\vÄf‡‘þžNFO>ûJ¯lLvß«¹fS ò?Tµh¾,X/¬o?xòÞ݇SûPè—Í·Ïcâ€ïàPU°ý`û‰ þUQ T†|af;Ñ;¤q'À„|•âÁϘoô‰Ñy@ë€1w²€ÿágÄtX›Ã `C„ºa îÞ½NLãG÷¥ îÿè>C 8U©pݪïÞ  M%ÚYr—ÆïÑ´À6ø¹ÙCÿü9ÛËCx ò÷=,@µ¾À@Fc¾à”À?;;î‹$ô§¸ëS‚„ᢾç?PºyëØoÝÃé¢6æÃ?&€.@›hŒÖ˜§Fz¡A§õù›É[;è[«;‰€ßû Ž€g5e}BÁTX¥SºN«Z¦z~l¼téÒ%a´¬7©J™Jôä×J÷m?—.—ØTÑw©2U¾Ì–ËŒPšbC¥Ê»¢Ã^W– SeDŸÅ[|B×3þü÷k=\g¢³òt¥Êbå¢nRãš-:i6¯Å‹ë­¯¯Óß_Û‹×´`bó­7›Œ!ÀˆzPS¥ñ²žßµk¡>ƒp‰Uý–ÆÆÇÆÇíòmãzW$Aç-gÉFL˜šb#k«ÕÚìÔM‚ZÍ  .@)u'˵Å„ÊYokC6?&;W¨˜È•f`.J·þh­áÿ ä•ãÈcÀd Iú°€ý¾Gàî=¹úeå“Ú,[nµBº´Œ`®Í6ßÉ4ÈCR‹¿°Á„nÈÛúôî= ³×fßZ–6@! «Ìe±  ¼B'm<ž +BxÿýÉÌãö‹îëhú¶k—‘ @§ÄûTò_õÕ€Ä` "1RQ´ˆÐ_åÅpå'á_X1 pñ6¡ÿ˜¿­5úòÝdçÿ†À›ûe[b™iö¬=ðý‰ÚÝâ‹a€úYò»-Ù"uÓ%\v(SÆûÉv~M÷ñ¸™Üîfâ +Í„yj_¾Ìd×’æþË\¾D¶GwxAaai‡, Ù¹8ñJâÓnƒçÄKŒÖ}¹Vó½Üj¢Ÿw’dsµm¨†ä/ÍM«Ø¨2 +ÎR¼Ð®* +ûA(¶»ºÊ â¼7kÍ¥Íxu“Oeåµ×÷ôcÞC¥tq¬¤\Ôjô„‹7ß(ñóìm^º1‡Ýì0‹–åÖmÛÛÛÉòßgùógÏ0ö‡Ï]A\i7ÓÝ<88:Òßm'é~þ{Yø,ÛMþýðÛï¾;:Ü_?ìë1ˆsÅͨ6YIº¿ÎûûÉígq»}Û¼UÄV&P±»×–eAF^¼ÞÍPŒßÖ –ô/µ™Ûn1v"JÈdÍÂGûÜfåŒ*K›ý¼Cæi÷Yw+%`*@ÀÚ–ý×É“ÿþK*=È@„ïÇÛžÊ`~-Ð/ϨΕexŒ¡®bù²ú °+ãü„Ê·p 1B1q¥r =Öf“]øàŸ +ÚÌ|§8¢Á¿Î/pŸæ¼€ùú}( k~] +pƒªˆûŒ¬/;žã]½~ï‘©7ë  }ˆ¼'ÞÆ¡}‘´…Öh1gþO±þW ülî÷­ÐB.0pÜÒë1mA”þTð¦8à*^|´,´Xñ‘8Þªâ˜nƒIÎþ¤fµ¢áé|œmjWÒÕ¶ƒAËU˜xK$‹ÉíT6ñZ¥HF,ÀT€±€N7óÄ«ÕlürI92¢€¥Ò¤Ì²L˜Š4B‹?¢ÿZ¤¹«XÂo­2==" [Õ~—ÚܲÐÀ/Õòð©VPRö³Æ.Œ]œ‰n–ëâaGÙó¥õ6"¥ÚÉÛý„‘ú©§gá=",Z¤š¯#͘þ?ñºüy[­­X ´1G\kª®n¦vhI·.ÐHšk¢ö”3ºÚØ)mVˆ_R 09i-jµå©M›¥^¯/12}üÑeÎÍ.Ö—^©5i•@E / + R¼ö¬*¥™¨ÐUIO܉ Þµv†Iœ€{ÿûÓ‡Û€O«\ ð0 ¨ŒY)Ço‚€ÛKÁç‘’»ˆ½°÷h›™E®êú0ÓBР(Þÿ_%&Ê€ƒðࡼŒÏEA€žŽh1mw3 ›wýϤp6He @jGçn{3ã÷oH=áÆnxhmÈ“œl´»Ì/`g,p= Lid€3#ÇÌm6“'ONµþW™KA"d þ…x (€[Ï@~Éä8+ðLÿƒ(Ä?^+e µ©ÒK—‘?U4\uáZÚpãyS]< CIØ{5î®d:vl…]+h­ + ð*à“—X +@»•f×P2á*Á[_K¥hŽÖ¾ð˜XÓÁ~6b›<²ä@=§ÓÚÏ* ÿ“ô¼86va:˜› +¤(/¾•Ŀŋ°·ñ/I0=CØM4ÀnJ'±ùA,Ü/ß(餺a{¾sµo#h-*P¬•_ž& ‡4ÖÓ +æfäæMæW´v«Ö¹¹UíމѸÚ-/MÅTýթݤnDü£ èXÁبÁr£Ñ²8 ‹ª¸é‡å¼-X‡‰R%‰úŠ5“˜Î@`B¶Rh$6o*€ —!”/"êÖ¶_ +àÞ±!Z Ö~”P°å˜[TÉ] ß@ +sëjžÜ§¶Á2SN [ÌÎvè…'™]HôûÑÓ'/Ý>ì¤Íú€wpHÉéítHœ§ÝáRë”!”DnŒHS=|bÀÕ1DY?~ à. ݽ{].€®- ì’•­¿Nœjýßóø?&‚± ¯/ÏFÚenyX pZ @âqu–P‘GÛo"H&îùê ›!…ÿ¢%Ø´WFâ¼'è J‚?’Ä4E•šªÃ&l+G‡bQÃÿ( °}NJº­--»:<Ù± À¿t¹l¥ÙI•Ìê“bf0['Ã/4\±?&L‘ëG” €KT´ï¤i˜‹h€Ê\P¦šÑŽô6’l¾ÅKןôã<ݤ÷kÒ­ƒc·ZJ  +°—6{=¹`kƒB$…´öž¹©—=(UL×.ìâ0Ù\#ítϨ&‰*TƒH,í$tô˜/«ÌÀì@¸µKŽÀ’*i3°j—™ï º„&™Jƒ?øzòPÆQ]å_Ž1 0„‚®L£±Åÿp °üÄÕÌAçHÆ™ñÇøÊƒ–“}] @Ú€Áîn?Àв̶ŸÉãGÛO|f1€ÇoˆÒ ä‚°¥±—”ƒ¾h)¤-âÅû¢üÒÛ²üâD¤©X&p!ë­³‡#˶‘”ÁÕ«TLX5ƒëôƒ +p2:0dÃ¥ÀdÇŸ?9Õú_½ +¸1óú*p®D‡  ¨P’3ZZ-À™1€7)ÚzFËVí¸—÷o7×Dö%cÿNX©Ð¯pþ;1ÛWP—û1 +ƒ„9üã¤ý•yB¾ +HK¦, Çä'_QÒXk ºªXhNÀåÉér¥4e¨Á¿)…üÏå!`§§eí±ëò©ì×@€i‚¸V]v=úõFuLNLJÁ¸–•ZP©Û¡ßR oœ€~Ü}6"îšÔ»ÁvÄÿ%²þN²%;Ïh9±jM~æåtIØ^U—™B­‰¿Ë§ú·V]ÒX×_™v]ýçfĬU×¾Z®-×€¼4€#œ˜Ö£ÓKàB.A÷,®šˆšÌû¬'Îy+»1@n¤d‹Žxxãáó¿…ý¾g0º·‚ à‹WÛ/ /É·aŸüã?>}Lá½§÷ïIÜ}삨Z +@L¬2²F+ nâ#ÔÝ ž²åðŒŽ ¢ï~¦½Þ»øì›¯» ‘¸/ƒ²’RØ–ígÆa¢ RäÏ`„î]}ï3¹\.C~  ¤öê™1@GÂE‘øÙ£Ï +ÿúÌúëUxä×Oì_¿0€!ïPŠScgö0¡´œ-Bœc ?LÜA47eÈ=‘ÂCü¡¾Ý´9A:û ÀMªò£/üGW½FMÒ…o~(h©SÔt<æ¿ä\Ð)Áì•ì˜Ê1£•¨¯/$(Ë¿z [m¿¥Êe[¶þ=A0…ïDÓ@M°\u#€á8€|C¥2! àb¥¶\^Õz6¿àÌ¿ÅKîyÞlö“¸†À§)°ùEà÷@/»Ó‡ˆ p4€ ŒX#,hEº¸‡o¶//ÍqÉfû#½˜N%®.n€ùºô¥JmM +€‹w·B€Ecž§ž!­/õGÅ h¸¤¬^.½SZj‡=køÅ‰Kˆx @x^Han<7Bo1Щ$Dî8Áœ)€G÷ +yÄøÑ²½"â0„'¿úÚó jOéBd €\PB6cƒr¤ð—¿„i¹Þúù°*‘N2ÏÉØyñG§©%\€‡8ër„CSæ\HPd÷EE”‡¾Äß͇×õ¹|Ä3˜Äì='®#:€¶ùÌâîé¬õýX®Ì£ÏŸ>üügÄ4K}$ô3Cÿ°/@¡à~Ñä­c_|á}º|?î„M–E U.–ƒÏXFP»³I,´ +÷8ŽP† „ûÊÆE½xAt•—9&¦¼H¼Ï“¯¥( R†ïAÀ ¸¬Âî„–þQIESE›)½$5˜¼^(˜®E3S‘ʺl½¥¨åÙWc"Ú5¬”ýg§É‰Šì¿TÀäÌRI<ݶVfßø¢Kƒlá›^@<7ú­5åÌM¤u «\—ŸÎž)ͤ³¿qÔ¡¥ŸdÃ:Y²`¦ß¤öÓ–60¯ßM³ÊJ®-ÒZËͩŢ1ºÚisžœ•¯8÷` F„Dæh)¨ëáÑ~”A­î½Ðo³/MO•Jå ·ûÊ¿“‘X[uA@W~(Hɘ‹Ð|‡›Ph +PÐL_|ð豀Ǡ_ˆ2Í`ª@ÌÜ ìÀ£_þêWOi.ôèÁ/nÀîÙàÿÿÙ” *Bö– Ÿv  ?ÇøÏ4Fxüðá÷Ä·Å´V/ý(ÎÃ`oÜÞ–D”¯ {ÿÆ{ï]ߦjQÙš ‘Žÿ v?ÿüÑ]›Nç¡<í'ÊÓ)¥3ûoµŸ€?Ó—>å8LgüàáÏž>|òðóGŸ[vþfý•ïôH¡ `rýß÷1€!8#ÀÇΈœ¯#Ë4ðô/g£¾\YvãX{“t–‚ÀTóöüëGÉš¡HZY»‘IP`T€‡*À»ú¶=OÊR>W®„§¬E»1€ +uóC Êtæ5þTUBÝz¨N@-X­VVUnµl…Y7j-ý¸u$vUÂ? €¦À+ÓKå5œ6¾QáL×3ŠõÓ_Â÷Û»y²¦Œ…°ˆ0‹»ÆýåÑ?*––ðã„yë½'Ñ@O©H°žk.UÖn“ªi•I¥6=DU7ÔÙEëI)P«­U‚5­*„6Œ|ÕѲØüú’Ï,€õ +–jðÏ"˜k0¬¢\€‰Ò…RÔ^°Á_Š˜Ï±t+êúC4ôH.€ ¢à' <¥?¦r Ø:êÿê|`e\y[IÁóÝÇ´Úò«_ýãC™½ŸÜ°á·PN]HÐȵúÑDlú.Àç OÐÖ‘µUÐ'1È¿!§Ÿ^Aw?»A; ‡ä’lã¼GdS„+uNÚñÆcö€~Nä;ãN££ë7®Ê³yDÕCé £óÿ¹ÀNª‚ñhÏ'&ðäÉçŸ?tæø›ñ×7Èuaú±¾C0¬4` 'À91€/Š÷NÉê"‚{AÂè—7°Æ¾Ç±ó¼3$Õ˜ >m° ¹9¨’8M‚ôK™È^85 X\X:M‚T ÀL‘Jæ  Tšžœ¼<é& ÀaÐ Œn}dê@/Fú‰ñþesÁÿÌ41€sŠR€g¿ŸÀÅ ´²\Y&8`‚7ˆÀ+3.Ê>ŠõÓ^$êÇ> +€ëþåæk­«Ü²(!U¥ýîÍý!î^Å­Ìõ¥B$í…œÐça GÉžîk‹kYŽ* S%zR¢D‡¦ +uš®^˜IY_Üb4€@ˆs˜€8 `+„—ÕX) +Ã眈ŒƒÉ¡4Ê;°À²âk?|, kW¨Ã7Û­ÇšÓ(P¾¿5è3ý Ïc%v À€ütµr|럇Å1nÈ©ìh\A¼Âj×i§­ÄãQ0ý‘aç//N\¤*ÿ½Ä'¬æÁtiÁ³ÎÆêð•“|xÎ= “ݾq÷êÏ|;ì?{j×'òø9ÆZ6ÊoøÅžJ<ÿëþ[ÚöK†ØGŒüØš[;—†Z€¿©/€‰œÎ3_¢ðÂ0ýÅœ¬.{óGþ +€®µZæo4«a*_V”$KNQDQfÇä_œ¥aw×ùR¼œxàÿ—$Ó„cRF˜°…•—Ü,Ï dÝÌ×—)‚‚çŠÇÁ¬sø§x#´Ž© c Ò°£mrÂÀÅJEå¾RnùÒÚr à-¼ºŸÜéwZ4NÐ]Z[K#7†J+aÈŸÖVÒê$YÖmïe ý¤P¹·õëûTK´7Y²¹Éc³È\…ÙJ&­ }Âi-3ç'wĺQÙ}›Y­Ô–¬U·a®¾&€Jó²L,«tÐS³uÎp†çO{IH4RÛZÑkD à3%¡Ž^&ððŽßíÚ¢=õÜŠ<ƒ9­µ½ÅÒ±érÕð†ôôþêüšü‰8ˆcߣ °½Ã#(—¶*ÀËG`t8$ Ç+Ù?$ú§}¥Gœ ðÙgÿ‡ŸÝ¸w]~ï=Y{À“‰Pæ9p¢>gbr€éXÊ6#ÝrÀ¨KÜG01uþ"?JŬBÔfH!|þbž¢¾? +¸Uü£1€÷l}ÌкQ ”ñ?¬à¼À¾eÏ©’DŒ*¥·È¨Dæ¨ç$ë¤-k"žˆÜ¦,6UÖh+·E7Ãj3ÓJf—¤pÞΘJ†Inz=¹³J–çqæéNÖËóÜTÀˆˆq ¯¿’°‘ôÄŠU®¥H*´Ï5Ž/¬[Q¤D^aDoPz#~0ÜÓ¿›Qǵª ˜é2☶%”XK¤\–¨÷”~ð“ +t*U‚ZT¹ì½ëxŽ$Xoc­–»“gKŸÝ<ÛëDÑj’î¥Ùaœdy–¿ØË_½:|ÅèÌI–æí8?RÚüEª­mzTe³~–¦4(Ìš‹ÙAœ3˜X+¸)¥–燇‡Gý=~9¯˜ˆ_¬ÑÉÙnœ<Ž›³ºYkɦ.¬¥ûšÚÿT6ÈíhaÐuO¥7’1­ç!1“Ä‹*:N¥‡a–ÅÙ}Bc… lR1|×b…Àt›þÁÑC°¿Mahƒ>ïØ‡ø‡Ïˆ»=ßؤdõ ’úªÑ)GåÁGE ]¿ûPFñ{3ù´ôw €Ý?ƒþc§e“eÌaòöÝyшAI Ú¬¸L¿Ö Êð1 ཻ¶ïÑyˆÎƒ¢ÚOì_ÊÕ!Þ¢“‚ïð3bæ 2®—8:Ãí<3öÂñû‚Ñ/'#ád4pN_k×}ŽXcðAgšïK\£ð×&_2Û`29—Jß³S4GwËöݨ<6™×ºÜ SüY¿'ð!$ÀAÜD  ¡CŸòª–õq­”qè àû[ûÿËãZª¸ÿ—§XE»|9¼§hú¯54v·õ•òTÉ–i½?;k©ôG» +ò®O3"ÄÊï”§µ?êà\‘ê2€Ø·×?K•p}Qžúò¹¿ Aca‘î6s dÎ|ÍkóëMýY Ãf¸Òd‹R4×µ£,†×®…óac¾¡§R­ê4k ‹tXa·0äb¸4.ð2WT¿Ä]ª”«5=d»v„›Qá™Qµ‡¯{]žR"ëP›µI%Æ,ktÿt“Ƨ¬§Ïü† SxùàY"~¬bO«;pìÌ.7´ +`÷lêmƒ’°=Ø"­qïѽ|º}ß8„líÓ_ýêégðÌúë×ï ‘gô B‰“ É< sÛO~öÞ au[n‚,žpõ@€N …SíLü*@ÀÝë¢R™ÖÛB~ZËé JøÇ´ßB/}yRÛè€v|O +€ ê:" g_PòÕó讼c?c®sB>ŽÐpÆß©Ñ}¬¸T‚ûK¼$àõÜ’“¿"ð¦š@YAÌ­ÙRįJ-´¤_3¢ÔBñ¯ÇwšU•gÒ„úLb"ƒ¡¿A³~@ …˜þÙWùþ), á÷9)ª;‘çd¹b1@•k™ÿ%õÑ®•!³Œcã®ècÌžáp§§§YU­L–+sÔ_êO­FÈlZjW®h¿¢¡òªM[´|«”u0׎úϳ^¸ê ¾ã,ý’&ôøÛÍ^6nVªÜê4í&Ý4¹“ì÷ÝÜhI_v>é.~„qí2‹ržïgÉn¼!óŸý¡ßÝv³Û½ÓM’¶–. Ðí¥ÓE;i[oM0[™(_®Öõ0™Y™ž”ŒŽLíŒøÍl5£ m“טú‰»Ä!Ïž[¡²`]O' £F…¤+àM8R w¤­¼ôHí5æÚÓ¨¨ƒ6Y`§ô_v[/SB* +Á€gBÄÜ`OÙÌG÷ž2Œ +@pö +GZ +€ù†- Ã¡:8)‹Â£h®§t© càa)€Gn(=cz`"u^<(¼ |nÃÏ´ç?üÃ?|N €ÖƒþúùÒþQ` ÆÖ +À`ã™1T†cg+ÔöBQW—o!9ýL^ðì“„–çQª‰FµMD›‘iš°Õ*ÿù‡ØÂ…&S2¹lœt¿‰ÝÍ~‡°PÀPf_—ÌjµPKœXI€k \µ¢ÄWÊKB*rE>x?õÂN™H+ã†Û~4t«ÏiWmŒ¦âe8¿mcDÇÆ&¦ùÂku‹Zé/ùì£  µéIñb½ûÅê±N_—Ò<"÷Dëmsœ¥Ïû‡Y*Ç«è÷ŸÊe`c*M#,}ž6åvéÞH±…zfWDGÂ#,Ûb÷««ºN©»j­26~‘»báÚ\UMeðÇϰÆ}ƒåºn—<£›îúL« [X‹£U­á /©þšs?°Ç#ñ À)_cZÄPŸd÷† @ gÿ@9ðà©;ß*€»†Êã À¹bÛ# +à à!8Gœ`bò Ó;•8ó- ] ¹@á8ðîqàÀ#:/øü<x`á?½õ*ÙQ pl‘nÀàÞ3¾ £È pn à +g‰hàLmyƇyüîÕ¯ +Ü‚Ì:+ä9J4åaÓ>Í3m·] @ÿ­'°c¼^gnפҡߊh½î†•ƒ®s$¦Oqæ¦"üšëi¾\ Y¢Á"œ³›¼$PlAjõJ ü_¤Pm™.D†|« <ãEän„HØ]:Slc+Ý”æ&NÜH²ÎZÆþº:Zö.”@8j‹á@6é-`]´2ßÖŽp]PEȵF‚ü| jÆ.¼V™._¤€¿HøSùDT£ ùÜbâ‚DüÅ¥&‰ûÒ2p™@£ÄâÀõÚÌD­ÄPÊ\ÖÉ1`è,Ü6ÏaY +L +°]0€_üê—ÿ€ (y` +@À5p£`àÿ¸qãáç# Àµþõ.€aß¾^cÄÎg^Ép.À1 p&ð.€¿t€ëð?¨0Œ; 3 æ¼`CÇßu enyX pf à !à¬VbŽ8˜k¶èÝ +fõ¤)¹²C*’.Žf¥˜úÅ 4Ü¢ëîé à1€…8ÉœÂyMÒ0d*_êËF§¬E›ÎvÆÌ}PŠ„èi‹ƒ­¨VâJ%b‰ö|ÕYÒ}§–ÊKsúëRG±\dYù(A4åŒ$wæLa,!´3d-!”Ûs–Xãžä«y—)€h%Jâ´ÓÛjÅ ùCØ_·:3ˆCªEhç˜Êü[U¡Þ™jáª.ÞÒçtc76Ì®\_“¨?å2§+W*r€¦VýéËÁ·s€Hp½ú›m¿$7 ¸, - ‰T$ŒK•ì‘Çi´$ÿŽ×ù1€×ÀH À€^¶E +@»ždæ €sþ6pV à¯dp À¹ÇbÞxüäl êþßt05€€q¿(!î?(|©‰! €¶¼)@98C‚åJEŒ×x¡p³æÇ‡•Y¡Ý*•Y”ETÁ¿GÉ‚¬4þCt˼81€`:à  t"*ÝkÊ™Á«å¨—Æ.\”fdà€Ú<Ú°UAWeü5üÛ”@Õ¨ZµÙAl³®©:mdß„¶ÑÒL C?A5£4 +`M9ÀUž.[[-½Ìc Àð{ªpßâÛI>ˆk™ÓeÉf+³;ÚJ{[ô N’£›A e #£øÑw¯Õêl¥­^3w¼IGhp}_ìî¯5›«ÍUÝpwÕ¢ ¥BÀ8K­vÓ5ÖݨÎbøÅü©î«S‰+U[Rñ>{æÖüciiyUµÌØàz3R’[.óAÀç쀀p$hœÎH¡URö4à8ð.Àq Ã½‘ü1€»>?A@€þê< /À€ÜxXp4ðôñ¼.Ð ¹Ç!/Úy~~ذHæG:5p~_„r}úkƒaV¥c®`Õô• ÔÕUjò×þG@C +ÇZ˜¿E‡“×b£ À4À( ð€?)©k”ΠËÁ Zi¬/ ÀHþ¢s5,·À‹eCœ(¾¥ÊW‚Ú•jU[«Õª “m<‡Ïj¹>ǯ4š`Ùµž,ÕDw Y¶þÚhƒþ½þb~#ìóIžÞ·Qüu×63¹:>7)7;áиßÑÝÝJ¶ö®ï Ü"7Xz|øÙJÒæ®¶êˆâcõZ¥<•ÀôsÿõcZœ«Ö}wr7Eëƒ`JÜöƒå¨^Ö¨ñ—2­ÛøëKÁRܰmÀåúHyÕë„I,gøžŸúý¬€1ì? + €ùh àž1`/@½øÿS àÉÓÏŸžÊ†µ -îÀH `ûu à:q~Yq1~°Ü ·@¡Dð} €ü(€·ˆœC&UþÍÄ +RzÜK ¾iMqP0æ‰Ý”ÝcgãL"µzAœàäá^®¨Ü³Z'U©†‚¿TÀlEÖTæVËÑMê"ÀB…õ œ,é=Y2@ûÒè‘3¤×Ùê´lbƒ à“Þž¡÷T!æÑÎä(‹åV*êßJÁ¸V›*A¡´²Eì¿Eì? +€é{Ä &iJA¬r§uo8wé_Ýys5Þˆ6¢š®Mw͸` j0€ù´æØY.ÿ’¾Äudüiî?8(àÁëñÇ1)ƒ™ÉÒ%{Â>BŒœŽLœÃ§Þxr<žÏ68c ºXK¸óyÃOÃîô°T-÷×–åÝÚˆXv»Mœ«¦ÿÝí¤Ó m˦©|¸Ö~lOmÓrÉ™o¤…8ð_/þË_€]!S⊼/³кÁjQÀ÷A<Ø×/ `¸7»ŽÈ  -ˆÒŸø‚z®3ÅÕ´1ˆÆ PMU*î­9Т{Kß4¹)]Æ„y@Ó|é6Ÿ(^Æb"оíï ‘pÓ…Ô¤¨¸(€z’è{©^ ÒÁ>”V8Ç˯šÏ¯õ2³‘–Tò‡è·Ø$*û(þDÀ Úš˜ªt¢ép%9öÚ³ °XæÐé}}¦p…/k輤Ö⤵ÉÞ¬\ëˆïkyKÅ)`fu„"©µTBЏ³•‰ˆ"ÜôtÛEr*³¡@ܼµáÔo“»†õ—¨U. b€ Œ®›ö±]8.žuñÀ®3mP Ÿ¹¾5œ€F0?`uÕF†PR1=z–"ú ‘‘—ób€AÜ+€“µZ,À©µ ØøWÜÌhšÝÚ4 À˜Jù5¯>”³ª;+-äÒ S*8N;™=F§¬qfSw›Ñju׳ðP[ô°pÉDÒ”Õíºw1ûŠcòä1àÿoÀßiÁ·Pâ# `8¦"\_k ¨Õ¨ƒBD Fä8?ðÅE•ï3^‚ÿE¾&*zÒVÏH)#K¢«âê6K´ØV«—h¥´Àl +…ŸUÑóW9-Àé1€âõnƒ†3ù'd3hlº’¨¢:7a}mŸÚœL#ìVhOÏ€zBü²ØÆïÛ·ÀÌìt­2Ë`2óŠ-’M?ñ×Y—ÌÞÓbý’Zø …“4|‰ÿ£dNÆøó›¯÷üxM¤$1F:¬lîZ¬#€qÓË÷p_’-vij+I¥ÌÞt”a’¦}ln¥Q;õàã’*WBS¹’(’ñkÆMø~µ:}…îÀxvÊ’o +âÂkuº‚qënEÐþ-Ç ï kÖCtUî§CGލeõ"(Ÿ¹ǺÝDçŠÝÔy˜iMLCi!`”È4m1h$%#Ëh ž$[vV8^ d†•À&)¢ËÚÒ}Å´‘lí¥Â£ .M…Ïh¶¢ä<š‘³þ’¦è>Ý ¡ll5wŸL_û#m¦É†€n²=O©TÅ¡ƒd‹b&ÆLØcÃüóгÆþþÿ ðÅùoç3‹Z~ôÇ%c/p1€õ´•Öœ£ÌÆŸ%ލ¸Ô‰ -×—Vƒw–hs‚JtGùYÅÄTT»’J–þÊyÑM2€æ `7ãNY⦕ÅÂáÍ+…^È@9IP HDk²²D·^ý¹â†üÑ—¡Áä£5^¦°ÿžÄSTóõÅR¿…°þ@%­—wQè +m~M¶LœÅö~ûÛßZ18MTþöÐZÃJ®hþ§Ÿbcz‹¾ 1ìtQ4þ?…–✯l¤„.+æsqØuÎsÒ{v;*hCm‘“¦›9½&µ®;»$å*…Ô¢UA/ â®K–¥ßí9¬BØd»U*Ó% nP㋸—| X¨*¢%“J’hEnU¿RÂêÇ^ÄYš°– )ç® £aÔ@hc&iW´¼óL>ÏZ–ï%­\ˆÿ’áb%àXù¥QU + µ¢' `æ_¯ÿ…pS*nÐ=g£ÙúôŽc¾V×Ýg±[À«{Cà5þ ðÕµÌJó@þëÿí¿ûÒ!ôgúG-€õìs[\ +—HbÍGF¢a ò¾¨Vœ4–ñ†ÀˆÅ?ù2 €÷§gž†Dè§ÈšëÍ À|(ÀÊ£3ŠÜýÓj¢³€œaúµèAÊå²¢v\Ò0sQS­—TŽu‚LrEY–H‰g d@õ403«%L7e])ê­)OÀÍØLbŒ50y±$üD´ DfNSäÀÖ–ø¹•‡°€ÀoÿâKÂi’ÏÃF¢È´†•,ÖF‘x~JÅB?ÜG1°Aå@bLÁŠ\œõWRg†Wt´èAýë‘TJtUÝÄÕè&a[³ýÂùÚO·lYN·=Y·Ã÷‡ý³bùCz{K´—Ýå’¬‚Ë\ˆã5FsÆ4Ñ#–©vx3Ì™`4ÀÖD^Ö1ùܞܰ[4‚J?09;+¶ë°-)@ì:ÄD8—ÝÅè×¥D¤äˆ{A´Q€91€ ¬sµÐ-nà¼c"è;@-ài1€þíoÿrä/pD6™íO?Ì%ÒÍtFJD’\ʃ¢•…¹ ^9ÓobÆIYH‹-uÓÂóän!¦H$ZÕ0Z$íWÅ©ó7Èi¬Ìí–¢ˆõJƒèk-†M_[fþ/mÑ}·L-Ì?~ © 4@iK=òÄÆtΩŒ#ß±5E¼el»`B|ž=*¡Ù¹`L6\Iuæ2þ×®{„t:Ï„ó‚i2À3€[T€FMG,8d£1€5Ǥ +°Y0«Ôu.€V¯º à×ob'c±ÜÿÿjA@Ä)€¡7”»€cì-…_–nÀe~ƒU VÿoˆLœòñ ÀŒ×íùÇa`ãý1E4¢ÌâŒFÃÐ(JÂj²d +@¤‹A« +¸Z€æ) söJ²`q +:úr™K––T RMgÓ\J„V¡»J¿~‰™vု9\t[Õ¬C¼BØs„ø3—T"ðO±6LkÝŒX]@} @Saé<„ãbA¹3€Öô¤ÄŽšVN‡¢‹d``©Ðl6®ÍI|ŒÖ@ÌàD½Œ³“ôs+¸ ÿmè—p Zq¶ØÌ¸qºÑ ÚMg +|ˆà WrÌHª²/0Û¯|+©B i8˜žòªMˆù§ ·Ÿ•üZBº\åH@TMÏ#b`ÿt¼O0€¦gm]Žc:qÏVl2Â:úJÅž[ @ˆa8Ñ4šâd°@Ï^Ú%a¶ +éŒ<ÏÒiÚ?\ø†y–ôJ­ë§ý´—÷󽼓æé—{ºÓRy¯÷ǃ½ü@Ë{{´Àìõ¾Íÿ¸òmŸmiÖÓŠþÞ][ó½ƒ,ÝÓùõ“Å8ï§:k€>0‡ìaícÇd€p*þõÁ¤ÿøªÔs$~¡8Ô@…(ùc'.œø  +‘÷+AM;½8ÚßjõTðôœZ[ñÖ^§×êu2šµÇ=™³¬Q Ú*oWjéWtg•3@x˜'¦…‘‚$*;£¯Ìh\"=”¬ÅK •S •¸e¶QQ®¬X‹XN:e¨-‘„ÕI©tAŽå°&R5¦²d´9‚4Êã¥>“ñµsYš ¯u«¦âK”C`9!™€sNcÒž4‰ä¾ˆIK Hx€’`L¸b=S£  Ð'ÀŠgÁqð1j愘æÔ/@€¤äç;<‹ð €Ô‰õÕ6KœÞ·_·ƒ”—Ÿq¿,0×ô À¾u‚ÇbF·ô‹è b·F€´FS'-Õ8Œ€øØê<Óq@ˆÙÀ—ÒÍ+ŽD·ì\äWêÕnßéª@Úé·ot³Å¬½‘´7šÝ®ŠD;IvÙ77ÚénÞí&ñ—Ëñ·)Û’øÎ³¶Šf³%™4Äz®Ò¹¶åÐ47x2í8Ùh6ïèbãv7Û½Öm§í¦^^œû_„¼— !¯RTŸ&Ú‹í?þÉ»å©ã?í{uJß|Ê’«W½>€ü߯½ŠuÞÆŸ3þÅz˜0Ü‘'Ü ›Ä„ O©‡+Ül}Ñ@dº\iê'ÅÀH `k«·“fÝ•ÃüuÔ£ÑW”èæ“­a[ €ÓªÌÖ®èÔ¾nF +ÿxù’Æ}“µFS›U^iëCƒ9««¤ÆR+>ˆ* |€9ÜDe*ÓeÜ™ n„‘Œ¿%8. +àlt>-€c®r(Ä–G.•¶F[rœ(€Å œ €4ÁÇÇ€®T¿¸ÚrÒø>ƒþ£ @ÖŸËר)€5; Àð¾ì,Á”N2W›Y*G6ƒ1€õúk€®tÈЗžȳ‰Œ2€ôKDzÜÕcÏ:¸£€á•` I·¹ñe¶»‚yÜl‡+a¸²ØŒ»‹ÍæG+ªRmÄáâÊJ;Qš&©6ÄcWV´q±ËATˆWšÍ•äŽRÜa;ÿl•6)Yó‡múkë­œ\_lC¾ðÿ÷"#ä½l`Êë!y—” ÍN†K¢þ~Ey}Ë}`g©))iê%ž¸¼þïb ˆ{Î?òâ=n“ÈUi8OCÑ… !7©\Ã…`Ax }/,„áTSeoAƽ* +Z™ºÌÔsÇ…PØŸ¾KÛ¹±q½N"zÜéuÎ`zqÏ ¹ÕŽ"½u—…Ú›ÕÒ¥))÷‚ÿ›µªŠ½²§²4€¾ u›€\§¨5‘mÕB-µÇˆb¦’ +i3/í t¸ˆYµrYx¹¬-Ì ®´µ@ûÊ×M8`í€Nc{bnºÂ=˜ı]ªÅÌ ¦b°.€)€VoÀÀ1  `Çc\?v-… À€œ7è"4üœ`øF’3Àê\ÊòG>Û‚më$õ}Z à¶1€ÓbV À¹;PÄ”Ö3ý @tZ€ã1€/]5 ôGMëŸ,ÙyÙîÆiòkñÒ££?½ì÷{6‹ä°ßξÉ÷éŸý2ëwwe“Òg±È»Êh&ç@~A–nôÿà–óý~úêè(ßûKŸ#d9ݱEö³—/^öï,nìʤ‰°þ¥;*b +@"2nÀ ÆZè¿jÖÛþê[ËBñ@°<åx (ëCÂÁzðêeú9êÕò”ý‘¼.˜0;?þ£@ÿ;|Õ¤¤¤¤")Š™ÞÂÕ¢~ôoª¹Âœ  µÙ…F­z¹R¾Ì¤]#bvðÕw»(€$ÞLRLÂÜg3€Vbãˆ/€kn®’W+] ¡mÓbu‘1^Lyü!:C •Uoˆ„¡`/%7ÈæßÔ +1€fåŽôlëµ³V¨”'Êð}r•Ô+Ç„ÊS@ç7_ÿÖ1€V¢%€^0\1/$ ¾ P0†eÆü bþd¼ÎZ>° °(¨‹0F©‹ KžH‹0^²w1ÿk"NRADåD‰ÚY­µ¨LäžI2ÿ¥=Vëq®_›wÊÜ-6RÑÝ—–Ìo ädôg‰¡ë¤·íQ¢'e;9±¬ôÎnjE,—ß.WŠfji¿ÛÌMO¢-ÞÊ“ýØJ1ŒVœ7sÝK q³å¦ÄÖƒé`ʬ–K˜f¡|þ¶?ÖÎî &ÿ×Oþ^/½‰KáÞ‰ð*›m/K@ôÇÀlËmVÙ^NU`­í8…Õ—ÉŸ’¦Ðâ¸;2"à(À™äÅÿ&.Àý'Æ„þï]¿à€2€ž‡,¸ð `avV:@ð/_¾ì‡šqog_ýÅÀ¦T½€1€ß<ƒP|MF@+ë¨Èxм}œŒÁ*žÌ0ªï€Vêtuªz£©¤•` @0¡³" @û¿Æ:Д§K¥IÌ à¦i‹‘Wf +€ÖøgÆZ´·0@W¦d/D/bŒÄ>u +àµá ÀÅÜåx9—€Ô^ø +Þ3€ÂPþ4<>®KHMÉ1œÒèCY­K¥É,ç®Mz-¡sUÞöp‡`ZåŽàW'AÈÆNÆNÙNè@kÊÛ[qÊsÙÚÓmõ·ùU²²ï¡ŽpK)€ºÿŽBéÇI1— +¦ó%jX_JÆc`£.ûµª=²Å •QFÈѳgãÅ£ÍÉÐ0±Œ9È—”M°+n À¾‘Ó(vÀÐÛvsâÊQÐ 'à„Xe$‚µ/]òùx™¸xqü€ìÿØø•J¥`5€œ+À¢pŠû3Šç@4D'Ë—}ƒSˆð×,Àm€n§gßžÉÒNSeÁ½’õc à" +@zéÊ€DÁ¼cf½õ¦ÄÝQr¯F€³ôlc±öÁª€™í§/©À™—q@?À¿jIï @^Á'=ÏŒså\+%Mø0€¹e1:ù›°ÀŽ)€A-À àx-€c–…×3à~ §Ä–Fbæ ûh @æöTP[*gÇ€ŽKq™iZÛÕ| Ë/j%Ì'§Tú|Ðy±}¼êЯÍD™¢Ïé0/Áþ/kQ˺Ûñì¨ÑjKOÙþ;±€˜o`î…œ…ÿ­~âŠø—¼,Ü0¶¨ ºÙù|Q‡ÁYˆ¿­gÇ[‰ˆ„Ž‚æåK§¤‹f?ÔïèoÂ#5ñh£2ßD¸ÈN`Ý@Æè#ïo[Òâ1 ` +À¸÷i¾Gj$ƒ\O?s`š¸€þŒ½#è_ÿÞXI +ÀÅ0©¯1yÀ2.€ +™À$Óñ@˜ð `Ç)n´cÙÙ1€ÖsÝa·ø‹È¨¨W®W„H p‚|¨³ „Üsbxg2€Ë•ÒÄ @‚8¶}T +à 1jþ,°%Ç•w¶À¿à ¶8+0dø¼NŽ3€ók¸˜¼‘,KŒ0€5 `–Õ3·ƒ”—·1€µ±É ^ŠE·¾n·FúÂX/u@½J´¼iç80{¥EØ¢d)NkŒU¶¯ZÊŸo1‚b7":ìZm¥ˆKì> ™)^Á6ùPO&ne.z˜vW1X@™{‡i[e’f‹.FÉãѧXåà âZpu®Z‘‡Í¶3Rº +\ÿÍM:ñQ“Oó=ÃÌ2±@à+Ë?îXûwwâ캸¡_`—Ð +í¥·­/¸ý]¹n퀌X–§ËûÐþú…àþëï ŽÆ¤çaÄBA_ðw @\`ÈÊbƒ€ÁàÓ¯ÿ`.€îÚ€ô΋ b7U4ŒŒÆª¥‹:¼@çĀʾ4’J14@cX @dß1jFc(…Q`ëýNÆ´…m¨†Ð¸%†ò1€A-€.ù¶~Hõ¥¾Ž1Y¢µ!}ÿ®òwµ™ú÷Ui¡ xÕékSÓŠ¸n†@°ä‘}¿Õ*Stàl1‚ì¢õ_Ȧ!“ÞÖ˜iF(ðÍ%$gÕø¸.~ àìZ€Ë£ tRA3Ù’›eQKxT6ŽS ~×ÖR¬|Åݰh`wSË8.F¼¥R"t·¦4¡oûÔtƒXá…re’·»ÊÃ0Ïo«ÕéÛ’ÀÝ$,…wŸdÆñ-½“ÚR™¶¨à: À’dËë['ÉÃ]¿PJTŽ{žëI„D¨8¼÷ vø·TÛ<ÐF?Ø€7~¾¹ý&nAHE´õG± ʃ,ËÂèÂ’÷âñ/Þoâcý1ûrAÀã1W p‚ÜÒec•Ë—a2þº5á‚ô\ `Ⱦþò¼€)-ÇIóv´2ÊTÊftj*éB$1YøÆMÔRÁê :UF­eÚx,p*pJÄÅ&T-à@"oO¥AeÅ1€sc÷Änûðç'éÁív[€öœWéjŒE¥Ý¾3Ã6 éÜ\\ êêwJ~(ÀœÀTÚ^—+¼üSyÝtÀf™ãÐ’i¦2=93S×*ÚÌ:%ÊËËI#J6½5Ö‡Ž34¬F¬”Ì¡f¤†­§"ÎýT߬U§ÌôÒ\Êc e+‘ àWŒÊØýÓ¬!L´P—3¨`T‹V™öQ—!€&‰éY};If£Mø‰k²¤sgh;¬ÊîØÅ ¥ +åvìŸíPô×­ J‚?nõz™Æ.MÚ‡*a¼éŒ¥hÉ$«kXÉfœ/ˆ%ö¼œˆû»ù2”+&+¥›ÊŽE1Ž¡ü?¶š|ÇÈ¿ÔaWèÃÔŽ*€SÜóeð¸/ÄÁlÌÿ¥!€²¢Ù£8Ç>¦Øþ¾À¯§^ºxAž¿‹\÷ ÿñ ã—ÄNÄx-ð(3U‰Ô­dAj· ÂE `„dÉÙ1 ÕHQé}Ù>Œ76n©plĉ4sOæ2a0ƒç`\J|æÆ5\æßµÛ4N"IƒiŸüvüo¹=!ßX¿†­LG³Ì[›Ê ›Å·âUe/o5ŽŸ[6o­ˆ-úa `Ç€ø¸gÓ'Þ +¤€1V °fÌ# @ +À3€Ú\47U2€:ª@jA¨@uWÆD +ÀQd éÓÚRähJ@ +O*€žOt~Dæ˜(ÐBR§&6'¡êA, F4*F")9?,`lb(¦R´©4NïÍñÒ•²‹"2:±ºÈåטÖÝÍÆ$™ÁÕúÎÙ„ñŠÜ–©¹9K3HWajXn ýBÈ©”Ê–ŸÏXÏÔ¤™5iŠ©«Ç£Â±÷›ç)ÔðÜÚ¬éÑXéñ!‡iŠƒäÅ~ÿôIDAT­½0GçëòŸÔ5Á¢ú¶ø§¡kwÚ¶B| êÌæK°»Èÿet¢ƒ°DÿÇ!ó,º¼]ÂB,•ýºkƒØÛ޶βò €ÆÂÎæTÑû,iÇ7RxQúó’·¾¸2hÀ£© õ1€c QÉw °&c_1€Q¥gÇÄÜ!ô²/ÛôÞ 5–€ªÒуȯ­·óM,ý LQæ>s=¯}d„¿ý +`3ÞüXÚGp ß»ÿ倃ºgu+ºcZ[ˆ@…Çý;‰œl*$n¹”ƶÞ*ð‰«pí¤<è|rÐnß.>#˜ Çh‘l À@½2¥'ôθ#‰”¦>uÓi #0Ái¦¾¶VñÍ›€¿¼yc-c^þ„@W¿SºWZúþ¦2 +ê-)€%ô ÀS8c.µ“iˆHó6Zw±Ê“wibœ•¶ž_FFÒ­J"bÅIôA­Ä&Ú‡«wÅÁ­«1ƒt£NÛ5YåˆÊõŠŽÍáû^^ö7Öi˜¾è§iÿO‡‡¯óWyÿÆíÝ ‡@ +@¸¿ÎÛ–Ž[ûPé–ì:ÎKvŸ“¹ Û_0€1W àb£µ0~‰a·>ùôë~UÄN0€3c_sŒã @ö?úP `-f– >»& ºþ8¦F2×—a*ˆoÿ|çös0¨ÌMû|šæ·ÛG§3€ÖêD™ëí€tЦÊåZÌq’·‹Hûxráè9 ieúŠhÖ àþÀ;LêLŒÔ`·3‹Îx àû¬­˜ž‘ @ ºÌq ô À´LW˜  vó|àÔÌÜä€x0vi ïÒø¥Kã%•Q±•Q>¢ã´q\›µÞ>`Oý°SI[™†…ÉXdÆÆq€dšdœHÍ›?”yZ«è ¬bÇñ’²µùZ\¼f²Ð\ ›6犬ó®4›¡Šòz¸²¾¸Ø\qó«èK²Øh\S„¶Á‚ÖÅóM¿Õö×>‹×He;-^Ó7V0 ¯­kíNòýš,i!úôF=N_bP6D;xÛ~þùºäöpÿl«}sß8ë-­k h `Ê~äc +ºbþéy¹`•ÿN#Ùwh,rN0€ÑZ€Å`È!ò…h!pz à7ÆÎˆ¤0‚Csƒ!.N2Œ0.@‡ î0íc™ËÿøöÏ0”×>;¸ÿ>šA^gRl2ê„ß*ºZÀ–«ÿð  ß¾}[7¼ˆÈ‚™åÄÌ/b2ƒôäu + n1)À‡ËK2ýìQ0\‡c @°®Àÿl``Ðÿ|ßÇÎbȱZ€ Št.ú%°Y’k®32Í$SLÛ?}¤ál±VfœViœJ™ Œp\*]Æ‘Ñjvä„gjÓÚóû¶ RS¦•‰IÎ0¨r¢eß'ï÷Ûm™ù¼õöŽúéán˜¤éÁï»Ý¬ß•/ÐËóý•LÛÿK3Ëü§û tSe…ôëakžf»ÝÅdŸ)\ž¥ÝnºÛn&Æv»y{´G}kü×賈‰ac!T¸%1ˆ¾`Ùø²_°o¿,H ýV°³K`G0-bÀ¶!>ýš©ùàc¦Ÿ´V%°+éÓãèaŽ&ÛOàÂñÀh-€‹ŒÔˆæ¬ÿä #,PÈ¢þª@0žu{§0€N€ñ²Nf^tÉÿöèN[–Û27í³ƒ ðç!0?`> û °¡³s 6°õv1€ÑZê÷Ž1£±’éÊßUFÕr‚¾3ÏŽLˆ›2†A¢ ¾l]µÝ8`Î9 +P7À( ò0 mW¤eÀò8`Àê«úz-à€>ŽGJ޹:F$UVgœe(þäã¸rÞâ.%ŽþQ2h¿¥ +k&Ê“\ð„>ŒåÆ+Ü—Zíïø3­ôL}­É&îJib&XŽj¥ò*Ëô'"mlB£¡ThÞÙ{uðêÕ·¯òA:í$Bušîd½ÞÞáFžõxºI׊‚Ô¼v L¨‚‡æx!,¿­B©Ÿ,NÛ‡)½ÿÔýáú¿¤z¶=™'ù^ h&TãÛoY/7\‡Už"Wy»ö¼N¤lÉ­_ÐPŠT®¿ÿ¾é ›iÜëò³—õ+ä‡=8=7× ð‚ ý½ãôý +08µ Ãÿ) €Àws @ +à›MP¼ítê¦þÅ”ß ýø³ÅŽ3€dã¨?d´à0kæ¡…ÍøÎ¦c°f1€¡ ð†v.@-À(8h·Û¥Ë¥ËE-€Þ8pÊûÀ°±¨ð.@Ý«€1«°€­#z~@Fbµàæ™1€©Š€eâýHù‘°qbñH›˜˜$(® G%ð ¢µÊæwK®­“”&ËT%Ù5Cˆú`P +¨`¼,¢ Í:håC7ÆÕÊ”usŒÚ`…Ê„8jÙ4²Hù”µa‹ç #Ò—RÓõŒTMÊÖHðH½´O”Ú>â}* QÜã±'‡áF³o¥OÅZøge!BCÿ”ëÈg&ºü#Ø€U œ¦¨"¤m¿ûg´ýÇ(  ì„Ò(ôÄûïÿ%à(‚ÀO}¢Û2·ãH–¦µÝ×xÑð[Ò±Àh-Àë1.סÿ#L;€Wb'cŸž­ pþ£3À–Õ0fÞë™»Æx¯1€OÒ¼ÝþËH `”t +@¤«eoY €ÿQÔ$;Ém*›OcÔ¨ˆ)€Åædò@O8Îê¾€Ô«–Þû<7R 09]0mzS à @vznÈÊâöd3ˆP‡¤btñ˜u NxN +ÆF$ŸœdX¥¥¥(ª••ñôŒw~ AeÖyC{!6ïR]—c¢ÿÁ%¢}ãR0ÆÀMI9(¯šÆ¡‰!ÃÇQLܦLH#÷¾>8H”1¨$áÓÇè¨`Hp[^®¹1OhBÈfc!Ñì¿‹ˆø àd [Ì*I}•!ž + ä]+Ÿ žN}@ €„ÓbNØKïc +Àq~kÔØ‹aT¦gæÄCêkõ¨$­`G¶„:Á`Ê&2—_÷„1_EôГPøçGä€D‡¬(ëJ­S]»Y‰uÔ¡Õ‹ +À +"5ýÍÁ§¿y•d‹©ŠÄëO¢d±Kᦹ!¿«4„¢å1k’‚PR¤lY"eÑRIì$£Å¼Ý<Œ‰B‰ßQFÄáÍÄ4€oè#¤‚Í×D €ŽýDñœÚFp<@sÜjÄÐŽÀ)¤< AÃ/Ú¥ØÝ‰×öØ¥ ü´Äö;û/M0þZ àô¾þJb¥Ýßwýûé?Û ß¼}[ÛŠV­;í0öÔ¶Zbƒ;?1í2XDZ¦6n‰x‰§Ë °š:i~-—¶~Z=SÆ>síËAôOüçOûêE3M72ßñ™çñ:Á=%Ú,2w:KÑçÞŠS9ðRºx=ð ®/c/û( 9¤ô”2—a?–¹íªsìý³¼ŸÎ˜ß .ÃYûÌãØî¼+ÆV® ±‰½•öRé?¥P ¸¬5A5bi€UÇÈ#Íã_Œ™€4€´BI(×! ÿh€¥ÈãÞA[[•ú$(3˜éHQÕbDb)H´™“0S)]8.c¦b¼@c€"“§H…qÓnâÕúqQvñ ]Í¿pü^Ø¿B#!¢(sSè%wã$%Z0”êFžÔRŸ¡Ùl^&"p8* ¿ù4oe‹îÑoÊ(ðÔô^Ø0`k¥ ¼} ô¶JjbðãÕh5‰w»* –”ÄhþηÝïòö‘ž;Ì/Ǥ,’R`ue'(€.ÏV÷b™H>LEÀÖÁAC» .­’¢Ìþ|m8Ñ—¸‘ƒH »-è§£z!»äûœÞpUµÒ/±}ë÷fxÚ´ àÁ×½¿¤q7½´BF·:i<¿+…«Tzº¹`G;Ù­ËtÀ'kßé‹!HýÈ Ðf”n'=Z<ú®}¸cÀjmíÑ Ýg”]æ`ðëƒÞo^J`ÿeƒÍÐþ‹fÙ•hs3’ýæÀ#™Ûþ:³l£«Ì¹rÏȼw¸øÝwÍ#‹hˆ?>—Sc€‡;g +ƒüœ¯ÛûMÿ0Ì´!iKøÌŸ0€ežiÍLÕ¢+ÂæØ˜ÕÊ€ +¶ËQ9M¦R’Õçæˆ: Ð/°©SfæêÄÌ$Lò‰°$6_µ< +ÿžt.xéF¾â q” /è„SI“rb£‚C¿=î…oû£7Ÿ{E«rNÐì+pÜ:Ÿe¹!kõx +/D‚S3‡ß¾6«tE“šc¢ƒø%$ˆ¦œVõïfuªU¹2`'®¤kq#C%’©‰=…BPÊd­?íýó'-id[¹ Í4Ií£ýUŒ¿„ÆÍìÏЗbñ­¤½ø}­]:G€‹JlåÝäϱbœPaÁ‹@æpíÅ·ãRåx `›=ܵ¬_ëëã4€Ûèð.áÿ”5¶ãr,¿Åk¯ àÞÝ?·Ê¾/2˜Õ§– þ˜Ïô…83@-€$䚉C~!†ƒß~ÝûcÖN3»GÃZ [Y²ðRw“DRŒÇÅ¢}1„––6ùw'ÛXL3¿nÊ]`$/ÝßÎQx”ýyý1ß±»`ÝåÎþ…(óOzüº·—7sa&ã³ÌeÃ3ù žœ±Ï0óÄß%µÆ¿~sqw÷Y³¹ÑüP +P¹¡óŽz‡áÑ–i}Ÿ9éwVÞ^õö²ÃP*ä¶.ò€0¥ÒRµP-î5Œ½°sŽ\Û»R[ªL5,@7æfCRÚZ-®´‚?bþÚÅ[~óàg¼qœœœ ]%¸Ùú9¦ó1iÕ +n/½¡ãè•“!s>L%ŒD•YkÚN+°W’`•aTÉbÂvB9éÅ÷Å1ï^P—¡ÄÚó0›c­þÓåÎêòr\ÞÄ+!|Ysçµ`š$ËjH‚$£ÿ‚›[Õ[UT@•)uÓòÆJqÔŠ©µÆÿgx“Q@G¢'òm§—$0Š¢S‰K`Ö²ˆåç›’É*•cÒ2RaúÌÖ²1þБÈå‰b&t, +… +ñà7Øò 8.ƒ+µã˜}¯ bfœõî@Ã.À àŽ˜.!¤à À6H€w È`ñ?Y{‹úÜÑ•ÎSz¾V z:*Üj'¦%åí½ú4ÏîÐ%CfPG\®R¾˜oš.‘rÞ ,þf¿Îî0Ú:<œ¡üôÔ’W‹‡Yçp%gFM|}eƒ/pJæŸþö·½~Ÿ(‚þAú6Ó-ežÊ ´¤”4ƒy"…tœ"p’uóö¢2‡PŠôȓÅíuþæ +AšÌuÄ×2Wáè½úºwp¾d•2vWž$YÒíŽ_d¢§dUôù¥c\%ÕZ%ª•R­2.e‡žgf–Kq}.*¯_âjÿ +èó»Pú‰Éi‚æ–ˆ:BC¤lnÈX +HÝíSš`n†ÖÈ¿VKl:…`vZ +„C`]£J¬ïòªË ·râšøð9Ö€îC^ Àt©Ò6b­åU)‘Õ›ÖÇZÚ‹> +N¸“²+£%1 ­C›X\´F§¬x*‰³Dµ+¢ u)€ÉéÒØt rQ“‘ ;×m`‰{^ˆÁŸòɼtQ0ûï]É1 ‡Þë_0f®;ÆìŸj×ηý~?iŠ ( ;®Vê)›´Wÿâ hb\Ç^‰ú‰>Øb°õK#âì¼Ôƒëh]‚Üm¢ªÀ,?¹®!Ù%ª€èŸ¸z{[(XÀ¹íˆ,,èfžqðôÚ]—›œö™ÅŽ;¤{. ÿ`Ðë#â@$jK¦¬ÏÆî|7}†–N¹½Éøïô×3†hD#ˆô›açàƒÌ© ìôzÏ;?63†§´¤ú๠+>™¹}“Và2ÏÛûߤ×vÓ„«—Q.‡Ãž®'Ìré2»;&:`à}øÌ?Ýëõ’<ì3>¥´…ÈèŠ\®…<$™¶Ú8•q©§Ã`J÷8æYb¯™àR,S¼TŠ¢ÈTz‘œhŒÿÌ´ÓT¥”/I}\ZÒcäÀÆ%) E¡ll2UúÒ]ÙÃÈGå(º9ÂË«Vý0­–•ùòRiÉêë”ÿÿðc˜ö²­µ"i€¥å€y–JVÐÓpuÙú`B,!Ÿ¤¡Çk«¸*¾m›§-‰¢JG):fÖ¾?§ë­UÆ*“ÁZ' m.Vs<m,‰ÃåÞŽP)SDõ.:}4ྋ@k“Qð\ €H!xp@àõCeù¨ Á0½8ìþ…H¬¬ ±z@ƒîTùÒµ¯Ë”kâ£#ô=þu4ûv‡¢é¯E9¾e¼†}¿Âÿ€~Pÿ=¼~Þ¬"PÔÌžÖÐjvN‘„A®"î<ƒª00ÆÑ^k¯i£¬‚CÜvd%ÛÉÍXºÈ ·{ +R¡sÉf–¬gYzm=IšÑü¼ó§0;ßßHs)K…ºèô)V»¹‡¾‰z–xuçëVåÇIÁÂ%én3ßqsØ·oéí&ð±aÄ·Óv3˺óÊKÇ.~ÏjÏ$Ð #˜úO›vzÊýïèÊ`˜æñ(¦–Á¾3ÍÓò˜ßÐLµ‰ƬޭR§r L!T,×B£ö3x܈:f”’å9²¬WþC\¢R¼Dì±Ì„lnu‰pozÀÞo™a7¬]ü¢ºÎˆcX^ëËq•™$,ÿÔÆA Ì­™{BÙ*D{ø%“H:)X Ê0¹EmDP“jDÄa®(³ÀÆ1ú©ž• %JÏV.Ý©ƒ¸ƒõ±'âiB§”NHÇø›hÅšž›ÅŒÄák1€äI7¾ÅØc¦Êm!Ž¡ßYbpÌCô·ìv¶O•Y 5p ÁÑ„¡N8©ÜVë€ÀòC®–¯^µÃK´µÈˆ +°E} W¸€É÷<ÀÎpÊx'ûx›BtS)åÜ î-8øc¾™mX¯= `¢ÇÒJòæ‘dî=·Óx¸v³½øMÒöF·ÝÝ]ÿa7ÏûÜò~²qHFñ³–V» U\æ¦^ØOyð z‡Â`SšÛi +‚ÓÊ9FO™Ë²+gG•¿Ðëri¬t£*óŰÛÏú(üþF×2Ï»™ÅK‰•'ñ}wå¶/Yt¤ú^ÁLXͳ¶kKÚMS»Rib8€"ˆ&@Õ É´¶)E›Mñó¹R- N_ŸZª“P©a æhg‰ÛÑz÷^”O_š¾dµë–ÊÉR-XI®Õv°*@å Bcžº[]›+ß„+”« Yf¡Rö_´£>·\Ÿ +dx™@Z¬Á[þâd ñ»l=÷Œ¤.Ͱ܊~ÅÕ gÙ~aV4! >KŽpø‡>DR$ËËòé35«·‚àfW5F‰×¤YÆ&¥U’¨o»¢ûlâêdkk¯õ1O˜Z˜ ”§!ý8ਘ[¥‹€Àë àŽú½øˆ²àŠÇÄák+y×ï3G^ž;°6ÇÆUáÓbFðÝj°÷ºxà´À@9p”Àý·Åò”Öš*ÁW0„›ÈÍöÎó°5ö0ÃïØÉWX `ü‘¾§Ö€ƒSD÷׃j ,{¯¸ö†?a3[ hòð°£Í"ÅÜP (dO ŽU’ÌõèÜo_k'‡ýüÕ·éüˇý¶NSNVhí Ø•˜ó¬›tÇ.Ð<ÖL»k,±Ú€ÚÇš”j¥Ëe鈉²¬sÉ:Ôš‰Ÿa4>gñ! ¦–Œ(% ü¡ôeX[‹]‡(.'Õ<û2l„ ƒ‹ÅÕ¨6YšŒÖ’,êu,_ßÁÝp=L ÅŠ0@ë¹õãqr~-2W 0¬¼¦½tg§§ï,fب¨Jâ¦ÍäêˆyšÕýB®áUëøAPÜcÖ…ðKÚ òhvpø—\µ%c@XËR +NN’€“kt(k`jÀÅ´$ pí§ˆîƒÇA¡Ó“~³m;¤ó‰àÒÙë†{=k7-¡B_ÚSKá!DÜ0ùª~ntÓ}=±ƒ~Þîw Q/šù^F~hÝ$Ù¡#†É±Ì·\æ{ÃÌ;éÖÖA»ùbG™[Z:~wd®2qÛ†’Üm¦‡ßt7Ò./ó®Ë¼sÐÍ÷v”Ÿ’ +ñ›½BùŒˆ2?ˆ·úá³ÌÖëo‡–ˆ‰56È åÂ’CÖÓ[™Ñ:1€ZmÚYªÑ„W´€ð,#ÌÜeÅà™võ~ S':P—&Ä”~mA£;™þ¸Z[3A¸¡&K.m!(ȳÆ@ÿW¢² P+ÏÒf¸6·×"Ç2jôÇóõ õø¹¸^’4•qL·b¹2µ%AF÷À\²“„v³}ú½­$Íd/”ÒSÃÉK¢G`—&Í(MM­r¸|%RÊ.E#I[£½éFeýC‹T”+?è»—Yf‰NDNºVsJúŸšÓnâ `ñµZý·Uп×j¾û‹½ô:v®³Ð³†­ °7˜I0Ó`KV ÞŽœÉÀ»!ä£ +<þÑcR †û¸äþ¯Ïð‹Eý~Ï*þ9žü ›„Šýsí¬/ÀkµþòN“þž.ÿ ñJûá«ü›ù‹4ϳÝü«,;ÐÖþ·ù–'Ò^Lûìö÷žïi·C=EÝ».})o'ù>Eàyÿ›þ¿îï‡ë»ûûû/¹¹zޝ^¤½ƒï¾ý.}©~ #äìšíq”¬§TùŽz@þy~@æÝý|W;x¾§Ì”BlN{õª¿··×/2ßM’ß)sí±›f_‘ÛŸ~½¿ÞÌös퟾ÐÕÝ9ÌÓþwßíöÿ¸GæßøÌ¹r¼®Ìÿ £õµH©Øx©ñ¼ÿ"Ûëýù0~˜5›MCÙ¤7 bÌé•Ôì !^©Ø€92´XêJ¥¼$„c+ ‘øºI_W62´±ŽðJÖÞš™·¥XeÌTÙZvÓ§"%#uÁç¢$ðóUÂé¢ïêèTÚõ¬êÐ:H4…ö‘¶±ŽÉUÃ^e%ùÆü|•Òz©TžÂžÌW«óóp*Ô†y†j–u1ùýs£8²ß¬võil…–tÐÆ»×U`~Ö¨*SÒt—jfs~eAóG‘k‹‹‹ný· 6P‡§êõ^¯€–ŒÄÖQc×ÎxcÑÍÆAm!äT8C™SeãûOǬ‚ßA¼,ܾ®ÀºK` À  ±=Øu(4ÒAt- Àq(¡B`—wÌðëãbcld^€ÑZbþ*OÝ‚†€eQ·Þ­Ò{cñ£¦û»­¬ðÛ ®¬‡ÍÆ7[§íŒáâ–Ü+\ù(\œo^»6ýîÍöü†¶7æôö:kØWßJÉÒµÑÌí½¸¸qm}]?$j®Xîd®¯¬_ÛXWNBÆsñâ2þS¸xm]gÔ\·½•ù5Æbsq£ûŸ6È,ùæD´áše˰µ¶¼1ÏÞüo®ü£Ç' +=Î@L6~Ž RŒ¤ã…áoùƉx‰AÛ0ÇØ9¤+WÊ,ig6^’·ŠC¢Œ¶‹RM1h;‰/—§.—mŒ.íâJÒPÜð:œ¯rÅvÑÞdRš(_’RRæ'÷òÒJœtÅßšQ[~ú;R+Zë$i·)¶…ͮՔ7/ë.ºÞl· ¬Ý õÑ9\l¡ßNšq;×–ô«TNž…tËb/¶¤…AíJ¥(U·»²Ln"–å$É“ èÂïÓ4ßí¢äGä4`µ0V àC‹,bQÂÁï´ïèÍɧ¿Nó~*jÒM¾üu7Ñ:Û>tÄM€O€^¥ù_hÝ<¿é¤xÀ“ (¹>~Û¨(ðïZ¼•|Ïh‘«pàRÑð”¾þŸ*wâ6ƒ¦¤YÒNît³ßgù¿¬ó‡]Ý®”IšÚÝ]ÙÓL›õ¸ÒÝÝ4 wóô÷™ž )›»òŽtÙOÖ4wµ°“É,‹ü¯Ü&|“õ^W.Œ»²ß™vÓßk÷/»*r–ù.ó½ÞI÷÷³—ß„‡ØU)س趻²ÈXwËž¦¹ÎQ|¾¡Â±¯B‘3OÛ_‰»|%örY’%¥Ù_­V­4´¬Ø §=®¨í´\ÁÍÕϹ„‚à˜>.õ2-b­áü -z¬)½@nÃp‹¢éG¹¸-s P¹I½¹€žºÙó+pyzÔš\„”iMp¥¶|¥ÜŒæe`nÙâò¢À{D*ýn£âÀáD@QQpŒt™H› Y´ÆaQø59hJ%†O3Q=ûWiŠæÐVí­oT„ø4é¤{G{ͬÓÂcÓí‡þˆ%Õ¹OÍu|Hiê¤p`æ– ’5ã>1ßÁËOÊš,ŒÆNm õÇj¢ß«hÿ>Û×Kßè9,qrÛꎹ:/ÀPÐ7-à,>0wÆ{ˆÝ>¿<måM¢K®àd ` þpðGœ7Οµñwo™ãpWu™gHWꛞ/±Šy7Þ"³…<ÓÂL–¤Óóœûõ•>;ù7áwùÞ4'ýuX ²rºíeâÕþîe·Ÿîe;Ô ·nÀÍsgQòžÜÃg4/¢®leKTìhz ;YãñB qSÞÏ)î5·€þ{ú/I q²%J)¦žü|ÖÁêV^ìIÇ“À•%LLƒ¶Ò¬÷ççRü±5>8/%±È@Âñ]fdf5OÙò¶ñ…é3ÞÏLYq b„;ªhí‰ÅæÁÞŽÏÜMÅ¡­ú€Ìÿ’µS_§1Ì|w«Å(Ã)AÒ¸‰ãE¦žŸ (;Ç"8GÐ}‰¶}l¥Â@øš­õ¿8CP«0dŸå>T¾ñÀŒ|} ‘B9ûÓƒ† •ÚeN&9|]|©Gø€2­KÄtÚA¸éÜVoƒ\|+aït¬m†…òzäÇ ÒçÙBFužSÖ0Àbµh'JÉt_R`\‹ âc’4W”Ž#Y³3kzf¹c®@_Zq¼`Ø ÝÙùŠ—ì¿ȉ0o¨‰‡˜‰5@ÊãïZÅ»iyMXj¨?1~˜>Fý.ö’z‰Ä–\ÄÏïåøÿaÀ¢bŒ æž1& ]ŸÝìÓ¥Àƒ©4b,è/´NHºÔÞéÐtÖÖô›¯þ¹É31,R?c²µ•%ñAÒ]hßI’ýÅŒv=±ë´'ÑV£ìí±ê1 „ÊÝLå†[Bþû Åÿ6´ ýc”€Ìã¾Ç`Œ ¶Ìùf²õâNÿ_÷ì ˜j„cnñ«Ì÷ˆ Ye镈̤7þfè [%q +OçàtÇ2o¿l|ãÖpå42ýc™„&i ÈpQ£2¤©ÐØ ˜­Niºv ·Á%®ü^Ô(èH— và…Øv«ô3Õú™^3@Û]*D™è¨s¥`fZÆò`Ž‚“ Fë$c:ºi¦c‚ô/ºÕˆn*­ö½Âäl$†0ÍŠÝL«¥—tèƒ!c'þs¯c +Ù4€´¨Aßýl&ò&­íµ1€åd‡Î„¢1AJ¥ñVa¥l?²^) +@‡“yw_ö’z—Y³Ä@ŸUN´âÔZ€èe>|å/ôaw2%–Ø´}ìp0‰¹ä¨™ÖÁ ÕÎ^ãcâƒj`¯€ÿ€Ø[/ÞztÊPÚO¼Oüs½‘ýalB˜;pZ_»·ç +7BwïM‰ÆŒÀâúÃÑÀ([ü\ß=A£¿þÛW_ïlÉ1·Ý½€-³»Yz§¯}<;‡¢p©Òv¾ÛØumLÈ. ;b}|™·3Ó>:ømYò"ó=Î@ªß~uðµõÝbŸBn£g”ÛÖó$= s‰þ§‡Z¿“%­çÿvgt7ªV‹Ì)âÐÎä9Úçv[ª‚ÙŒF2ïtÀòؤuÛÄ@—Vùô ¾*“3%7ckq¯íÀ¨49Œ×Ê•‰2xWÚ kÏkËZY:‚[;\()túâ ú®W­i€Š€Ö›†9&:±Êô\yIÄ_¦ŸÏtYÐaº—‰×ä$øм“Õ5›ì 4#ßZ#h& hd7F‰î]‡aô`¯hÑ­=!R^ –H' sö·Âe÷âÕ`¦2Åa¢#š"Öcw//Zã$Ô¹ãÇ9.§Õð4Y¥B5¬ð @lnkðJ»úØù"2;ü8À¼œÐ4Ï€>"Æ uþå|\”d$`æßÔÂkÚÂ0/0Xö¹¾\äKØ}ˆE”gÑp´/À킟/Þ$¢2¤8²ì 0Þ…´‡ÐŸ&oþéŸm P#ên?%µ~Ú!ï&}ÛuÐJz‡½¼·µ•äý¦ ,ø{Ím—áàô¼ ÀcY‘öYV•9_oË»GÏÐ~r´÷õrËl»Ë=o§>sýQæG;–yÿ í3WB ±Zz»+Ö|æ‹€hœ’yÏ D«}ˆE×{Ø/HšÁzÐåÆ%û/Œ+õäÜÌ#lOLé—5.ZïÛ±8šö·VzŽ0)0L? ^§5J ¨Äu)¥T:a—J¥pm’ÄfjQ]@«ÌDœ”Ž(!Î`‚(>øíÒ†ë) wà8•YÊQÄ]†b21[îÔ€s²:½¼|K+:aPb(4ìÚ¡•…t#ÿ˜éNk3¨×ê• Syß·t×1Õî5" Y`%íZÇ,¦ÿ‘´Ó€pê# @ë}-@3{Nì¿xñ/ÃÙåÑë0zøn< '_NFÀUÇì_!¯Ãß'&]”Þ;¯‹mõ:Å4€TÌ[%c®-«àKÿ_ï À³z£èª=ž"CaÜÝ`j@€àGXè¥;2†½½ü¨y´×Û±ÞANˆC“0·u(›`C„RB„Ÿ½,ÄA§±W/-Æhõˈ9ô¯»!p;iß¶ ‡Pî=†…H•ùaòÝ×ZÔ~JQ( ¸Jü±2ïüÉÀ ó^ï@{Ë‚€Ë|D9ºèG;±XA«­Í€ó'sÇÆ„%âYà²\Ä„™Lë Ô ^hˆÒ$€Ÿ&lHàб­â‹ÿÖ®OÂß³¶ý†Sræ¥D¨cXj×µ›¥Vâ!'Fߦæ@‡&H+b-Ð’X.€eñ½Âí?&=Âìú±§ñ¡ +ÎrÅbû“& N=xXb­ÖÖmBå2¾«ß"…º +Dñøm,ffÿÁ§@)s¼Ôg&ëR¢èÊ—ò¦¯[>åİ$ + ¯µƒ}ûîÀüõßü²J§2¬°¾DýOŠ¡ˆÕùÌ¥Š) +:ƒ8mîA ì2w¡@ýµÿÒû”̇#™‘È”ùQœ{m’ùo´—N ßìv-—5ŠðÇ n˜Ðl¶Ó†c™æó™;½.²/<ɘOÈšSÃ$¾¿0X™Ñ²tã‚t…¬½¶Ó¿G¼Þ‘ÒÅg7~ö1m +@ø7%!©ÍÐÈIPY£ù°v;Í7¯™;Ø…£A_ t*.O;¥1l¡4*îv D7Dˆ9SÓA‰n[ŒO PÖ}áÖØWš|»%š¨' òàƒˆæ­hm³•7ÒÔ­wZkËËÁÌdÔ ÛWŽ‹®sÇ—ÔUÞçw¤tÐÕxNá~ôZ•º°Dœ2;;ÑŠãµ0×Àç„ØÎÚÝ¢À[B±èåñ…€Hg¡…ÓSÀëâ+yñ˼^Û†ÿ”Õ_ÃÞÅìû‘- %02& Å¸ío%Í®Avê3ź~0BÏٺ퀃­­£õo÷„j‹ ’ê¶uÉqdZ°=è¶÷´o3éýFi³¹íënˆ¡ eé)\þÇ)™~{ý*åÍ¡ sz Xæ°eÞþsï—¹u—ûOÂAæm9 vb:£V²§ÌS±•ô«f*O£o(síGéeï8N92'™¼lˆ~¸êen]R•­}¢±IÀÆËà ¬%æhÉØ¶ðéíI#ûðýq% ÿÄÌÐg 4ïô{èҲߵí‡b¸4ðÔ¢ÐVƒîˆhÕd0n[}àLÝÿNOÏY.’ñ‹¯í†èþa=n ÃoÄyÕ˜“=¾õÓ(ïñ¨¶œVŒ©¢%@z’ƒ¤ûâ·9K:ܵ‚9™AÐè/|ó‚¨û)Z˜õä,,ãÉ„!»âv[·[µë9‘U±VFiëUÒ&s‹è ~Üó5 L°ãN gúgµÞ䟔„‹:Œ´G’X2òðrb£þ®±ÿ‚è›4€K[Ä úõAÀcⵃŽjÿL\ž?vñ~÷,¼þ`¸7ìÛŸ}¸Mo!º|±${Hºtï8lfý½t‹Ö0´©ÑFšÕèÝKÓ^神¿zµ÷¼·—QáÖÀ, ¥ƒNvßeéQOiULò½tïÕÁ^o¯—îeÉz;³!råKå¡ÏœGJæY'ï7sí§¿ÃÌ÷v:‡L{Ù7ÝüÕ÷tHeH# —„šްó]wŸÌw¶ÒÎÞ^š÷lê§½^Ò¾“'©å­Â%êaƒK¹ +1«õo7KúýÅ<§»’™qì8Wže(›0gßË´ò¡Ð—N·¦.2"ÙÑJiœv=.ßy¸'qSr/\;±}n<Ü•`Ù:½¦˜Ã›±—Ðx A¤J¬C”­O’×§F=¹·Ä:ƒ¢«ä³›Þ¬4j¡nAž%Í4Ë_¼ÊRZgÆIúÌæ•H™­Kw©™ôèKqçýt—Óg´îå>KÒ¯ÂÝ4ÛÉh–y@ãÀuùò•öGífÞá6c¢ù¼Èÿ@€þ…Òvu‰N¨Ÿ3¾“;¹×´ û°’ÓbŽ„öÈ_—0“´›¥±òp}Bèl„8ÅT.€Áÿ +À'Vª¢@‹¼líÈ«À¼Äï!üÿ5@ÀaßÕ8]p¼€»MoÝnÞßÍ÷­i4÷à›&ýnŽÅÅ3á·˜6Ù¡žN¶¿ +ÔG‡G‡‡Ù!E&Ïò] +Žž~Æm»m¡†Ò”æ=šçfù! tÖ7¿$ÛÝOÓÃ~ÿE_·}_™'–ùnÞï’ë 7oówýýDÅàNÚO¥-tØü‡Ì»íï[TœŸu)Ä ™2 „P4€wÎ’ `x}?z;¼ûS´ĸóq?~IâÌþèVkþ70ÿzµð×ó³·çÏi\[ ›×Ö›MÁ C-39³=ææJ¸þC­¯@/ºÎxY?ZüHOµ¹Ø ×Wš+ì©Õ”•p£MâÖ›óv³9Ôºïã>|Q‚Âæ•e®B§‚×l®¸Dì^ÓöAæ|È\Ç]\Ô.:¨ÏÜUÿ7bý~¤óJ~¤"«Õ:];„Kf¡ø6¹¸¶eμԺLËü£ð#ú`ê¿ÃÄÖz]ÂÞ¹Ä"³|'ôìÑÚwè(DÇ!×ÈÞú¯•ïXc.ŸÚD+С‡¯ ë;D7­Ôs>MìðnÛ×~´'¹(WF9]d§Òîî'éïÝMÒZ%ZÅÃÚ@cæíìý\êþ:òðÕ¿Ñ4ÝÛÛ×w·™Ð¹öèðÛÃd7‰¶ßÍö_f]Yn1à ÖHÛîe/ÍŒÈåJV£¥¹HƦ¿ÑÜGûÜÓýßñúÝ~Ú;Ú“eI’iæÝ;RÎgÉq eZ¿*Jw†äÍ ú˜|%ð,íÒe×ɯ¸ +™r `|üÝ«nîב<*4ûZ_è×™Œºø õý~R`¦roþЀÕZa)ý«ñÃ÷h;×ÑçmDw¹›îgùw‡G¹È=rÛÙ¡žôw¯2ý}÷Ý¿Ño:ÿ—ì_~Ÿ%íþw­îÙÿ&Ïž¿ÄÊÊ–¶“ýÝìÛovÓ~~ptøê ¨£‰áíüëÁ>¯óþ¿î/&ýÝßCve¬ÛûiWOA'õ¿ûWåîê@ý.™~'í2ÿ7zçÚòÍï²öÃ"ó´ÿ/¬¶Ì÷åTìïþîèå¾|)Ý…Ó­Ý/“ì+_¥üCÿ_w»/³ß‹*yÒÞï~Iæ*ƒ‡>:Üíì¾ÌˆÌ1û\à2û^ÛË$¾5òЉ„TA¥4áZ\²vØ'fRøÞòÄq›‰Í´“<ÞÞiuäîw"™]ó¢©T¤«$_ÌäÂõZI¼*?O„,¡—Re¢Å­Íêø¥l°¶<Þì0îq€µ4¶4gÉy1i€[œï钇͌+nF4‡çÊo9Y5d9q6„‚×)ßð ¢#µ|;ðŸSÅݧ†6ÿ4nýñûï~ψÿ˜ÝÇJE-@c¡hÿûVÒ¼·¹ëÌ“ÌÓ™K\žú77tÞ#óKzr^®~ò)³5¯XËN6“¯¾ê>—˯}ãd¯³ÓÿöPé6c ¸<ï.¦»>½¤MPÎ<™²µ“Éîzža}[Kò&ƒ|ãè“O:ŸŒô"³š@Ÿ¹ŒÉá^/͵GœäÞÁŸ^¹n›·µo²ØýŠ?&mös™'*¡º¼Í4Ùìd×þ@Œ«³¥œmÈ ?f‘îŒÐrì]¤‰Ï@¬YUÛÕÊÓŒ»£mÎÁ†•ã X¹âR •J¹R™š¸¬-²LØ?¿cïXPKEŒÁZÙˆ‚µéé Z“Ú‘¦˜¬8ä“ÒtI›…zÂ(™¥Èu² CPºÄT_>íq!üé_z QQ”HLL×xi9Zë´À Õ¹ùÃ!’6ÓL`Õ¿}À§;ª•.úLéè/ì¥ÉÇò#[2õq«×ë­âÿL—¦£ÖÇY³i :å«—˜G@Ò Rð}–8àjŽÇ¨8GöQ‚¿ŠyÂõœlÆ f´¤ÐÌ«€sÎÕ4Û¯‹ô(c/'tb+øİðvœ‡ Àü_Æö£ü{$à¯óm„iSQá½cä †I*`AwC!ø³ž1[ô ú]¾r˜îtz­]WháßÛòða°#nJô¤v¬¾9Æž?[L‡Ý0|%>MÌÈÜ"ý22éznjg«Ã9?ÆjÕ&¯vMi·³3™ÇIïK´OoO§‹ö1àNR›Q#}@¸nË[™£¶1¶›5úÂzqåd¬/Ãbx¡™ÿ×x·ºÂ·¶TšCß‹¥ÊÅ J*MàûêLÐ…¸V™,ORí/-R¢aàä$í„´ƒÖ]¼è«\= Ó3Tûù†ýâ´˜dw;“Q¹8&OŸdõeˆÀÌŒ,?øŸ`˜â‰‰šèÇéöŸ–€£€Æº#‘ÔF +@_À,Ç]Bl¶¨2+JúM=ªC‘‘*Ù¼&õvZ[n~ +ñ„e@E –øÇê¬ý ˈ؃Š\Kø¢´f¿?M`ÿžœŒœ‹ÿ8¥RZI\Ëe>èäå!6ʄտ‚¸Ò/[3ø80`ˆe‹xt#P}SîXc.€yßÿ¨Mß¾þ2ßNèè``SöÃö>*{ ›a°øô“3@¼µ#°'Ñ@žš€Xô¿`úÉ€8h%¿^Ï»Ô2a„QpðÏix°ÓJv¬üIŽ3€/¥Ò=wÜ|  ÆQ—å-œm7Z¢nØØ¢^û´ÒD÷ `îÊ®“0¼P—&P¿Cë]D6Ö,¶´ÀL©$Ó6I/à¯7£v"BüŒ0X¹,¬—EÊ“—K—¥ +ÐÚ`¤ÁØ…¥×6æå¢%J@¯ZZo½zìDŽ çÁÖ™ ."@åŸBÈZN—ƤèTàÌž 5ï6‡v+Òáj¦ôÊÚnjÎâ†ã º­›q=ÞKöhT¹1Æñ{WÍ*j±÷)ÝôÙl1x \*újÅ1Ä +ó.´7h¤!PÄ”g + àÔ€;ðY’†R.x·ÈgeE`ò!°ò"HJÐqzêàÔ·[@[X-À  û¸„þ—C!ޏe€ù÷çX}þxÌ~Øf@ð·6þþ*ßNh ©Û¿õ)Ýܼ-°ãŒ°ƒ!ƒqSÑŸ‹ìHëoÆä! @§`©cRìÆ<új`¨€ykË™ºÌuÌQ}²C+€S@öå—ʼ—0iK¦}»‹É1úaí$­ŽNø$Pθž †`0Óf¥%0³ù`x¢‹\„(–¾aÄ€u!’`kð€>(µšCwhwpט¶À4ëe$qÆ›ž¸ÞÆÇäâm´Ë u4Bsp|¤4]›¾('ñ4):áÓ*w…¸:í÷–uªuZ:`}¼Ð +h«@j¿ ã^ËõÍâU=~³Ö´òŽQÅÅEïÖÚf + “Ršl}Ã=SÅŸ²êR*1 ;Jݸç‰POäóoû(cǼSºôBòÞО»r'r†â&ö¡Ö{í}Žï!°_–FÞî‡cÙ]’`"pƒ}Iw÷߯/Ú¼{Ñ56O`0;07ô¯k‹Uä[ÉÖfÁ +;(ty z 7\=Ý2íe”ôvp ƒR=×â_›=(T€‹€B2w1€–‹˜vº ÌÑ>[ù~Ó1kzæ"ñ  7ÊPžljÛ‰@̘T^õ½‘ ñ=ý1àÒ2ì“r­45‡:¡tÆê(bbá%úäXbÚ”D3êcҙ悰Rû`¹üéÓ#0em ´¥>.+ã“3L.Lã·g¨óÿ¯œ¢6LÜÍpâ€+-`óöÒ70m¯ä£ZwÓÐo ¥Òf›@Zö(Fè–ZŠ8틈÷ÿ†8jC·=Z’R®EÍ8 c'ëE ÷"ãÆ6J›Í7)ÎØ”'>dÖölÉCF(þ2¬(TÀŠÃ2u•J(㈜ã¸õö œ=°5g¼µYr’“Á©x9ù‘åÇ °Š@ð7òm…þPzž[Ïl%››»0™@›p tY `À„\Áí‚à À\aP(-b=ÛqFxƒBÚp0$[,ñ|rf À3ðA@w’Úl1€Âð™ŸÍôÑ·rö ÀãÅÄu¡Jh” iÐ2ÑuD¾†dc•9”ÙøXÁq¹Pùç!/Á‡æ;@t(ùÎé@×ÏMÐG  ú¤Xµ 㽺/öR÷ ž·5ÊîE£e +"@¸Õ­Ìž§‰|²Åä Ó{NgÉÚÚǛΨT–ˆăP.âZ•UNðì%ñ^ó @¢OÆ´ýÓ$Û¾*ÊM»­ø—‹8¤MÙ  ¡¿o8Äðð=þ €¯A’coÿ³ÀÛ A@ê¤\ €«ú«ÄÇ„AÏR€·ƒ|ƒApÀˆœÅÌ(bÐC¡¥ç‰Z&ùÝÐ0èÀK”O‘ù(‰¸è¾d”¸ÀŽÕŒ2€˜žM§Öp§2ïø¼­` ¥Î‡w1@ªdgÅÓ§KmÀn½õ5³¤—µµŠƒ ï p¹d€˜„{ÒÇçÄ*†Çö½ ü´¾ƒ²À´t”Ë)d¾4FMàœR:! `G@“(›w˜«èT±›áðKâx‰õ‡+A´–®àÈJ“ÂÒµh6‹  MCîV'Z[5]«uJdÍÇiͽè1ú¨A #½L-@¥Š¬{p (3T#c›è? +嘧áB}žÿÒ©™ï0š‘\}ŸùÊC®-áôžh¿V’)Fè0È<¯ÒäìR¬³_àì€ýgÿ×ÞúèX’ðö#‚slz‹Ø=ýkdH„­@@úµc`ÐL¡pÞ.€ pµ¯Š€’1€cF˜&ø‡ @øsµž°É\€¿0R¿ÎÄì΀ôŒ¤£µgÅTPß‚(W-jg/âé7ëª%çŒËÈkͨ¥-¸æ¿Fw Ë—õÅô‚ÖúWп 0¾ àM@jBÀl¸l9ßuoAXâ¢32aº2Í”ìhryª¡#d8MìfÒl6ÆF *´a¬-A$iØÈWOoã‚ xé¢}1iýþ㘸,,_‹z$h€üvØN[­üU €¨«è¯[°8b,Óo/7®Ø +ñ‡8 ýxdçÉ:Äñ€NÇ¿©^<퓇æ[Pÿ@1к“hïlÀ4ĺ +ûwºHþf0€¿Ж‰9Jéüõ‚ðŽT€cî:þ*Ùˆ›z^[n¸1€Sj ƒo(jä1m}½€1=À À}+_*—+Õjuª*6¯2c‹ÕÙ)FÒeæ­J¥:ÅG+‘ÙjC¥u¾Ú˜Å ššªèÙM”ÆË¥²ÛZ­6S–ZßÄvjÜúÒ¥r…´ädr4.Ýluª\á~<\ +‘QÅy—Ÿ°Ñ@`•K¥iAzÎ5qúÖêwrò²›âÓ¶[+=ÐÒ˜Õ/€'¡:(•çl<`ñ‹×±,'Ð\/ûײS,OŸ¢4Lü£0iÊ2 +¤²7ü2ŒIûZ* €¬É³ä­=êÿ³u£b[Ú²*¨Ó|Ç‹Ó$]lï±’`Ó}é(4¨T•MÖlË·°ÄÇÄ̱̺èGœ­,¤ŒRz®(æx ÉÃ$—¦YS  4WîÅ£Jb1GúÁçU¯øûÚñ?úU"1ìïiïQà—ÿ&ô#t´·€¿Š¿FÜC7#ìÀm‹˜6.Œ%t®°goеrŒ˜Í/Úxû_0€a掼#ð_Ôm+ML9¸J4fç…G½júgXÝòTUøµ RÌX1+ ½*•©É©Ryübùrî)‡Sj!C{ +ã¥IšæèŸÏ+¾(KCè߬Ž"&®„ ÒãÅÉÅ1Hÿ¤µ0¸šL”¥N¤ô1=qxÚP¹VÈ”aÀI¬/OÏî(4€MB ¤Ý¸ AeR€ó“õÚ]ÚÃs'C +@.Ú©rm@¸ý÷Îä€l0#|62ýb-ÍbÆIkóy–åâõ›òøSð–Š´£$øQ˜/ú` Nœs@-º%pÇv~M ó(‰ M±Ïæ¾r½ûÙÅ5 xƒÈ`phk,àš°dâA…Îë×Çáß©ƒ³Å£{P pæ»À¼>–”?蛿M|[ wj˜òkmõz;žœV p¿U 0R à€¬Úáµvb.sSbܸ±K"4GÀl üF«bÕ)çÂeýžÆæ¥dá+€Ò;å‰ËÌÒCÀ|5=Ë —`Ò°85ïRU«óP.]:Ñ™žà~¿èû„¹Âj@Ëßš ¯:‘JU  kd;[Kç*‰ø¾Â² 9(c6?ÀÀ¥ê‡ë ®y¢ÛɉÏX:à `¢ÙÁÕ,IZLc„AM“E:Þ úí¦L³4D’èiÑ@p=ƒîw¤2ì?*€z¤þbfã-hëMÅpEº0†~j&ƒa[sãq Öä ùjœ6ÃgpΑ¥pIÞöµ~+Ù›‰ÆiÚ€Ô&SZJ8À²ä=!×nÔnŸsÞ¶YrÕbZ Àh¹þM2.£)Pý›@ !ÐÙµ¦<xS `P pz ÀËë  E÷&ë=3þN¹äpÈôTó 5GìGÀe +À½˜˜×NVòËåwÞ)‰Øaè›SW ÜÂ?f^)à%€™|¶ @‹æk@è‘sÜ®_”±u|Û¦õÄROVæÊ%fìMéjõ•…`I—`· _ekÓ‡Æ b®õ~Ç´ËDÖ0-Ò¸Æ,ä\ &+åZ˜ð£Þ½.—KÓ—Ñ)n—“b͉ ²ÚNŽÒVT›¬É3nƒÖ‡‹ûr’QÔIÓ5Ô=-žwš63Ƚ6õDQ…¢CAÐÓ=HZ‡+}ë| øÉ¢ó¬ØP-Λ#CHÌO@U6†è8…lXG® ¹ý6’†]qË‹Ë8LJ# +0˜'ü{œ¾‰ -ÄÏyøçKÿ%¼ýyýmZÂþÚ^| @OõœZcž¼)0¨8=P¨‹Œ¶À÷÷`¼äú£ê# `W `¬rYH.¬µÒ bÒB°ÜƒÒåÒ8]騬tr~@röñ Šþ‡ àÚ”TŒ;¦Àå©ò´t°>ŽýxÜí®MV¦Q>‰£ó²ÁU©‰cöz¡Á``õNJïøeç3è`´èþë|Khoí¦ÃÓÒP鎩€‹KïÿþŒ¨´-\áÇÏk φҥï\–u¿;ˆdþ¥Ò³œ~M›,¹ÝÍ_ei¶—ý)ï½èg[éW‡yª=èKÿª—g{{ìôûiº¥³üE~t´‘õéî§ÿ==ç$%q–Å Tm4»tô¤Ò?Ì’,ÝÉú/², ¨“s…t [b Àµç{ y†þJÓÝ$é&í~ž?wò;ÓéH¿ð))ûOJ±Êÿ¸íûì·¾œ k +@›?ÚÚÛw <ëíºò±1ýù+epµ·ßX ® Q3¾óe÷׿Þßù¿¾ùæ›ù—ùßÿö/ÿöÝ¿ÿû¿÷ïßýÇwÿñ¾ûî»û·ÿ#ùû÷ÿþ¼µôþãÿeîï–Û¸²la”,Q Ü„•lŠ&J-šr0‚Á/’M˜I£#iÀJ¢+tK[Þb«ã(‚–*ª[ß9:tSï"K¹½y-”ÔBYâW’vKz ?ßÁuqÆs%àŸ$›U½gù»òÈ5æs®?ì|µŸ°{$Í5UhÐ@ç`lþ +Œpàz†`…þýþÀ´1€Q1€S)@º4€Éc§a¡*,Ž É0€sHd1Žâ—ÅÏ)Véc¥»IÖ¸÷<ŸÃ….ï£} ‰[|GF þ{áRxÌ6«–Žˆ'¹—fÎã‚F ÃEøáK8ǧçLñ'BèU†@¥àñ +¼ÛjEc„jèÑÂYü¨&§3ú¥Ä±M¦/T§çK¥ såR>—-œã0ŸÓÓóóïsXPúÉÛÓ¥¹ò…py~Ž«Óåéùòryn~n*_˜›››ŸŸ›»À6å>[rÿºª¦Ö6T(Rkå\1?80t®:Ïöø=±Á9!n[7/½O­ýv€;ó‚GÑÂÏâW¿Ü„ì‰cCùQÚÿî@!D‰li3‚ü˜ÓlbÌÄZ76ùM?îú©3CýþÜ;ˆsÃ/ ø%µTªbc~¾p`0›ae w´'äf HI—¿Žwe¨Ó?(ƒìa€ÉXa˜7?ƒóÙÜŸ}Aã/: ¸c@lü¯[äOŸÁCóL»ïQµºt ­µ[eŸ(íf¸8æûÈÖ[Oƒ£@VÃF’´’$þSÒ~KÞæØŠQ ŠÐé<étö.—»°Õn›‘oï=î¼ø¯×/@ ò$ÞŽ·ï·[¢ø›vã7Ø”ûþ6¨‚rDJÞ½_ ࣱ²`£ñÙ±?’•*Nçhoþð™ŒDQ5j%µ=þ |²=e\pîûì&#Äþ`fr°À8½C7tA +óc>˜Øk|wÉTˆ=¦ðpÐ7É(2*€§ÏÉ^ç°í¯~p ÀøÀ>€Õÿöú‡Ÿ ü–YS`Eaý£\#_&‘Fò‘G?ã3¬æa'½Kª1F_"ÙŽ’vç²–Õ;^YYòƒÅ\¶4„*ƒ7[e[c–E¬FUº¡ÁâbrbYÝ/>›³ñŸ!Žbk·ù$\ƒ  Ÿ(‘i§ÄÛ,5œs6Õõ½k3¸=^q)LH`’ßcL=ü^bH›Ší{©Q¦ïn5ˆ‰u‘ØòÅJÑóË—<ï=,ùÌóçO¥|ÁÌ=/jKÊĤw¶è{¥òŠÆåࡼþ¡ZxàÔ§Ùžvî5ãµpblr ÿ,Û@‚°ÁjŸE÷ðÿÖ£h¯JØàßtä¼^^T«VS³Š`˜ÀñGƹÇ;0LÌ´­RÓWÇ?•+È)mÉ7 ë ð—0ˆ<³ºšÌ³É³Äà$ A& ÎØd½ªƒƒ’A¶­;kð£có)´ÊÈpYsΠÒö€ÙOfmŸ¸ðÎ’ÆŽ/Àë,;à§ÒeÈ2Ù|0€Ôx ØgiþöSŸ ðƒYœÔÚVÖö™šF6Ó÷'a7ÙÎ-7ÀNù&8j;¿€— Á +ò ÁÌaò€4V2 °h_\‚vü \'»89ú†kûæû—ˆ~zÏN×øŒßQ€U@ÈJë€A6® Ä †øúB”A¡i Æj™jÒÕ*HCŒbEˆÆyÕ±±ÉQ,ƒI»*ÀwAI=Hî”±%ÈðÅÒ°p»‘;K +àð‚@–Û9‰ê)Ç!;s &¼É%uª£R9ÀP%•d¹-e ƒZür²eumWxÍf3AžÒÅìøBUÌ Ç «³3à=žVoþøwáTx™ fÇ„é$1 +¹‹œ½…4ïA€ô ü{ŒàY5®5Øj3,%l$ÀIð§×¯AðåÂTxíûjnŸtˤ»ûÀS*òÒµîðÀ?KÜ/{w±À±¥òýR«ìRÀ•ü<úámÆqâŸÄÀvÅOú@ãC‘ˆIsGõêj€Ú[ÖÕÜj“Î0h²K Í~@Õj0eÒC¹á³ì2D2îù£—äÿøÚÃÕaü|ÂÙ54äŒK£ +L U~œF–Ö_1€´—’LÓ‰ƒ>¥Þ ËäökQÅ÷E‘ž tF°î”mŒ'ÚiL@pØ.s¨ /`¯> !ÿðÚœÕW“Γwò´"öÿ¯qóSƒ}ª; ¶‰¶êÂ!üx‰¡¶È’äõ5 •ŽÂtHj "ËOaU@3ùŽPÃÝo:—ì?FmqèÇ’@Îóp«ÔvÛŸ+î¼³¼¹-Àáøw1€»Ç•PD–?` S +É¥}mÉ*Êxû¡Wd0›†h²y‹3©ÚåáO 3@ž|¸ËLÒöë¸Ã6‘ ¸ãÓX„w©D@'BâóQ¨“ð\Ä2P +é1i¬™½¥®º2ˆ³ÈLH’b§† ÿ0ä8&€;œ…6ÑO”ýBImmK„.`m@,b¬7Øc‡¶#þ¾'ípî“v§µ×'ãµzûÏßï}oÕtØ·wÜn·“æ½{°²ÕËñ‹Ð¶¶°¿ý°ý§NT®íý¿Ø“ü'´Û1G“Ø{ñpçÛ8Ùi?ÜÚk?Üét’½åFœˆàk&þë_;¿ïظ2ÝŠ@ß#9€üð/8¡IÍá/[)ØBÖÕ`®ÇKŒçi·¿ÈS¿Oþ«ug›849%à‚€dÒ€ï[ˆ ÐûP H€ùón‹Œã—1€_  Ç•8Àï—^ eÏY /–°VÀþÀë à—c%„#{¦…ð¡£üÇÉïsCcùÄä"쉊Š˜ Õ +ÇpÉ_Y˜­¬Œ'‚ÊJN£ƒÄK+Á’_(Ò•ð`÷‘!+!¬Q¨ú;X0«Á®àþx€ÜYy* ”ýüe€ãÙà€å„”áHè3M†@Ë€Ø Éòø©c…ÿŸ`{¸’2÷œq922F5’2VJ‚ÐþS¹d€-܆+A§„ö|ëJ-,Ï—Kp…ÊAxåJÔ€k\mTËËÕ2–aØŠÂjõÂ…rX.×X“·ŠôÕå°5À&« 7ªaí2“#ýÝèJ#jÄW°ÚhlÏãø•FP&=¹ÂѪ5|jà ˜ÔÇ2GhÕ0m œÃAHªeW?èiÃ{¥ à¨RÖßýq‚LS¦Ç¶TÛ`wºÖ$}¥Ô@,…Û ¸Í£Ä ž +¡}ØÇaž À(†6°Ê»ü|!ކ¼±-€ÃûIK¼‰hKÅ‚ý à@ à¡F2”>G[^,æGýbf¾Tò +Eµp×X{ÈÚ£„÷9¯„ÃçXÆ>·èÿ“WRÁ7;Ýa+Ù÷xÌ¿Tö‘އô-ƒ9V:8ÍŠÀ¼‘ï³ÅW*ÏyìX™ö÷ІNÿÆçùpc] ã=‘_Ï–?Òý1°6šÁìbŒL°ÈCðßÏx#,³ €À„1{6iÇt»}r9#ÕÁ +>Ó~ñ½R™x9˜Vj—/Qt7j·µ ØÕ¸·€qàülH¹Üh´¢¸…üSÔâ¸q¥ýsêd3\®V.‡ èŽÀõ—ïÆ0=p9Lý4V1oz*nšVA W¯¾yˆ›NÛKàD߬¹GK«à&RRU<ŸÆ&3q`J½€ ð@Q’<+€qõ°Oªùwëdÿ= +ÀÅŽ,pp?(Šì/84ÀRí¡fH€‹ôiBí´¾ÈÓ¤î°EªæwÉ/© ˜\a4—ƒ•Ã&ÐÊ7Ür¹DåÅà=dù"`$:N0²EV©ñþRé=( š;Ä!ÂkÏù^wƒ(ü0ÿ¬E‹§u(]XXÇ4»¾þù矯¯sÝÉçצΟŸá*»¡èÝNÍ`ß Þðµk×þ}affæÚ70müûÍ ®]Û¸k½‡3à†›uÏ—û\ëUˆ:À1œa:'#F{M’Ý$Žžuâéì#\ã8ºƒÊo×Ê1벆½½íË夽ݩ^ÞŽ`rãèû$‰¶‘äÇ j'ß&l °Ý~”T9Ž['iÇp’„ÃÄ=¸…A# üÜD-zñ¢ÓnEHPâ YîàjÐ% þa+‰ÊeX¤cå3\Ý1€­{»bßá´ö$Ú{ÒN"<¿ ~AëîÝoîÞ#{ƒ&%áìÀ›5@ßQnÐàïûØdb íÿ7)€7´pÿØ!Ò­ðV¥¯2€ýõ~øa„âÃ#°ï#,„Y^©‡eº ¿¨_—D‹9ä^Á÷Ùqõ¿°Æ rìJ‰µÁ£Åp§õfQ=+Ó*DÙÆŒ!¥EP‰‰ $І† +—È Ø÷…_«><`Å9Ä9žxÚW"Ì_¥ ÿRX‡ÈO™P‘Œò‰Öf°çüÔç×ôu(€Ï7ÿýاÀç‹ ]m]äáÔ)($ÂÖ•˜x ü¤ À<€”8ÿ„: ýï•(3ÄkÕ aòÁêwð„à ÅóÕV­×aFÔ®¶ö8Èk2ß‚ ‡“Ðfž;h¢Ñ„Ùñ?ÐͽÝߪ¨7}8¯ÚØí¨:A*ÉL ðìÈG±?l—–9²Ûq’@¸‹“-0€(ScýPi$mVpÀ{†ð·qàÊ7†%Êh>-÷ÃÅmøÚÌ Ü­f÷ÞœÐVÿG B¶é1Þñ¿©ÀbG”¸?ìqb1àÝÝÝ'POŸ>}f-^¿zý&Z€ÆžgÐl?}~(Î ÀúO]ažD6¥±JÃw~P*“žÇXà9Øjö¾OóŽ<­ãLc¹W–4B®\¤pr^§aZ•€ àqö3Ô ½GW, „·ˆ£|¨c‚¿Öͯe€Sáî}J%ä©þíÀÅ”èÃïP &bƒ¿b)€~8„ €C‚ñé1‡<Ãø3F òbsR€tõT¶[pðôjܘ¯µczK®úä*¼þ2»îr•êõöŽ…Õ8¾W«pûiíjÛ|Æà0 þ³\}ø-–uUÔa|qQß/äürr!îP=¤-ñƒp¨¯ÔY3ž ÞÐ'¸…c½ÚbßDÉ3§Žx:éDU ˜?Ö¨þ©]Á'º¢èoQˆ‡h›1mwáœ.RÉ®ÛáÝÿéîí:¯DÌ1T0ºÍÏ÷O¾£ÛÀý0 – Mw·w°&àc(€ç/_¾zúê%°ÿ’ZJ@ÈÎÍÒC €õƒ8ðÿDå@uÐøÙFTés3ïz~=*hû cCÀ,çTWÈÙCŒu«F +ÙIMþÐí½Ä€5ëyažŽ[w8«5\,†L#ôãêþL3'c³˜Sˆü 0À +dFæ°Eà<]€T@€y—¬¯óAä¤@ àR·€BEð61€±^ @ e†§L, ˜|´£_7: AEò 0`‡@I9ìH4åq»Ö_kÕÆv¹×¢ZµÃÚ<ñ= Zá²ÐÞ®5öˆn(ë;Áu98Ø„ßzQ®&¸›Û²V?Äg'Ÿvó`µÒ.¿AйÈ2‹DÉ^G#¾%q§Tw¨cXÓ9¨~ßÿ}~0ëÊhZÖ\Û)þA_à·ÿ#%À5Ö-îªÖáO1À1m¤-!ýÕ1mk¹Ú¨Ý½ÛÚÞ~ àñã§OX ðÕK:¢\R P}2zÒ?aòÓ ø©;!K"2‹Ò¸Ñ +.°Üèœ+ g‚<"?ç8ø6ŽK°½,”€ïV¸ A¦g–g€Lá`!šË•KEk3 +° °‘_.ÇuÀ çù6 Eèo’‹— ðœA0sð§ˆ8 /àÀE0€k¦døeëëüMCÇ•@, 2p\ €%OcFèyn¯Ë&Éöt# ƒeèJëˆ]fEI;S©·«w¡ÈÎø5Ã;¨q À^¯³ÒØ?Z¸Ç}:¤:´4ª¬=žóç{íÆi :jܘè‡|Fóa¼Â¦VGL±)€1(€nPá0‰:Iu> +­’c læ}©.ˆ^`*0ÊÀ'„.ä(@¸ëHßanèk Ï@ß&ú£t°Ê,ã²ÍÏýï,Ç´P± >‡ÉrP«]iì>xðèɣǟ½|NØ¿¤ + ò¥ÌçÛ§:`$PAÁÿö“ + ³ÂlzjpÐÆÔ#.ýÅ|$ø‹Þ¢(Àš¡s²úxøYoGµ›Šô ZYbB¶Ç‡¼W8=0 dñNDÊø8ç{ŽŒÑ÷ö½œÃIZ’þ¯v €SX~qmÎÛ Ð>ƒßߦÈ@¯ àŸÏ\œ¹¶ù»#b -â>¿ÊÆX +@&j"ì¿©¿YçA2 €çuKÒ‚·€X4’dº¶ÍrçpK@fáÊGªú»ÊZ´xÞU™©QüëmX‹šêˆ=rÔH¶äÈ6¨˜S ¬Ø†@œ}Ï5’¨]¸Òì i«>ä-ÖduÝ —c(–î:½ØÊ2–¤1€½ÎVÛý0‰âè»ê|£m¤ ü+¸oó½¥"« ØkÓÅŽAß”íÄŒp'ê¹æJþ[€‹R +@”“ê*ØÝØÞÝ}°ûèéÓ'Ÿ<{öì%œrÙи"ø@úOÚkó59*èʯ7YaG¦.€÷³iHa¼~^õÀ†s¬ÄËã-` @äW¶Y!ÑK Œûçò/XõÊP"¸šç±ÀÕÕ%L¬V!Ø©)€"®1é±Ä@ã$¸‹ê=°x/œ'Ñg@/¯Sk ‚ä/ÿd ¿ßÌxXèj€õuÇìyðDž_©Íœ`õJLätc}®‡,J’üšf²;Þb}³íú‹ZÂ_ý sô¨´ëŒvµZ«ÕF\«}/Ãú“4ר=4G­ñ'iˆX ׇšÏy¥+ ›zO_ò ._-Û8]+`+•ð/ÕO© +•°ý_ý ­ð¢e0_>jŠ šâ Ôb× á7ñT¿T3m$Âod=\÷¤·—æ>ýئö2È0Å4–c,×üÑÿü®rd[@¼º\ .[”dÿ´\®Öj­ÖýûÛ÷?`Àõ¢^³–ŒänÞuøüá'Æÿ~À¢+?üŠÔ§›§ÝðPð&òÆèÏ2ï3ƒ³š/&Ï›Gåã[Þ'4Á ¦òÇó¼–Ÿgˆðoƒì0Ø€$4®¸€ÜRB/z$æL'à"ä=üÃvÏ0|;³€EªøF±>€Óݸ63³~ãwR×®‰lnl^¿5`è§Pec“£.À?~p.€€~~1q¯J§'ÛÓ­„°Bq™bæ‹ú^• tà×#ŸtQZg* ÑšÞ~Ñ®&¬öôJ²Ïúý´%V»Zm7?÷gƒ G‚ P€ p…Ãÿܾüëi›{ +l ÅøB»¯:¸”jûµS½š€½ÀV{ëh  ÊÌVyú +~Q4·5>…oЄ!:‹ ( z@Ú>DhïMºd¶Ç™E€z z2 àgGm àôñ1ü_¹û€?~òôñËçÏŸ1@ +ÀÒ@~­ú—tñû ÔŽ?4Àk(„W :•9%µÂpÏ?zݕócÏö \fzdT8ê“~@à{ùE,Ìb2¿ÛŽ!ä—àJ,^ž&?ÀáŸ5ot‰Ê¥b€kH‰ø¹%kßKpJöŸ”ßQmsöù:x>€z©€€WŠðï`Ÿßؼ±¹yƒ…‚"P×ád4~S_  PR @J€{¸z|)@†Й01Àf +önI¶»ÓôݸQS§ze(Û}B0Ü©†íoaÃ#ØhÚ…û«È5QÜnE¯·/³#aŽý*-ÀÊ»[í=–ðÅ—«*¤í·¹•»Ð¨uØ`0O“Ä×eª€&"Ú¢2ztUàNõÏ/² `+Nz1€¿’ÄmWUð€Tcj·h»:}?iü:Šºøï*’nœƒ°1jÛÞ'ùt– +6LhiŸîÄÀÿy0æf~™è~W9¢-=²n_+‡ \€‹î?xüàñ#Öxú.œ€WÏáäþ,Èü—@÷«Ÿ€yb_ˆ7Fôs–а&ÈÊØüm1‰,é/Vò€.i¹bÈðê“gr)ª',ÒÅ·:°Ãl«ë(–À°ú”`"?êCDï2pŠ]m1@£^!\šä*¸@®Ä‘>Œ;ã ûo’¢Ÿ_|®1ÔOº¨Z|¥Š0Ù¸¶pq†ž‘/ 8Àæ/¸ê® Ùȃ,ü ×X¾c)ÔG/`¸ï¢Ÿ+£¸K‡î û Z +Ør6ì1ްqo_çOÑÆI³}ùE\î ßt…Ç·›lÑ% )Ž`ñ?ûYb=€ÁɹpÛQÔb£]|Üt€Å+áÇ•J{9вA¿Ì”tÀîígÙÀ½ä»xnþЉþoŸÜ¯Õ’A@" ¥â*:@”bcßdr88£=‡I~@ @QFe—¼®o·ýù¢?ù]¥È–áùgÄjW îïÞúŸ±àÉóg/_Á `! y¼ÚyÒ}èÁ÷_kâot¨ ~úÛ?ñû·Ÿ ÿ´ÝÄ7 >Aï^æ¹t†…¥@#lж[V§é7hƒß/ú®¼@AxcÍñqЃ%vŽåMøÜ\N#òàB¿bR¦á5–¼"ݬüÑ«r„0»÷‘1ѽÛ,úî òé,•®©ÏŠíÀ|@ Ÿ2€QÖ +b²‘¿ß}âçg)€CÛûϱàþîîã§ÐÏž>úòù3Zþ—€7E•€2`P6߬?\U`¹äo, üñ'zÿƒÈªÒù\‰µzá ¬õçë— @ €y[`µ8ÁÒbKÀ+ä #ª&SÍz±0Á@¯x Фô‘TP0È.öœP1@±‚+Â箜=ë:à5møéˆdTGd @¨g×ÑöN{ +àÚÌÔÂ5˜ûÍ߸¶± Ðÿ›ÓT +½²€}õ¬5 àï–ïZ +@Ð_bKη{’œX —qVƒ´b€vÐ0¿? [.Ù( þ+;àÛzÑŽ¢ê‹˜eÿ?M8q-Œ£Õp¯QM!ò”ÅÄ6W¥€^á”ïßo‡« P\¶bÎ+û F¾ì”ÃÃël÷û@¯-@ø6^nô8NfŠcÖ7¬m¸ ÿI-•R”Lc 1¨ÿÕÞ”Êá àxanRÑ)ľf²ÏŸ=¹ñnrH[€Ë²ñœ_>rªÖjÖÖ|ðäñó§OŸ?cÏàÏžQÀ ãOן4ŸÅ‚$¦dù¡Ø »R1³Í1õ`»'rþG’e_ ¡f>úÐÞØ°Ž3ÌNŒ¨Ô~÷'IÆ #ê­ —6”Le„8{ Yj„CtQ?XeAŽØGüã˜%"U‘Î’EHäÿóÛÏÖàû³Ð€üD¾QÿŠþí†SŒýù®,PkY pD=nêó¥ûcV _ í•|“˜1†½ÆŸì€.úfýE5|ÑäÎücQÜLvv~ÿ0Äž]n•_àX)Pð&Œ.[]Æ;Iò + ÙJvXC·oíAq¬€bä&ËÑ ØêVÏÅwÈ–àI G¢µp¯¶Y²¸O¢dk +`?ÈÔø÷/7¾qF¿OZ¢-aÜúϤÑjEðnRá[sbF_XຩvûãLt bOg©(¸õ‚“I» ù… @åÈ¿@¦ßEz1×à³7U¤6a=€Fm—UŸ<{ÿß`À«×àåë—û+¨ ]jÀÜ üÓøñ$ôM\v† x9Ü›´ÙŽ¿Ë1éO†…BÞã|°~Œ5Ì Iûbà‡Kùc¡øPеÿH¿û¥'ü2ƒl*TP“È“``!â5&Cð* +&˜ˆú6ëê†`ègðþ¨¨ì•ò… Ÿ` €.À5z¦´Æ™à鋨5 BØÿ9­©=²õ˜i1Kµ@_kÀöÞ^§Õüj„ ù°Oj­Î6v¶[Ûüí$fÌÿõbïa»óp¯ÑøM 6þ¬ÓyÑn·¿ï|¿—´[1{þÔh´âïÚI›½Š'N‡í{Ø¯Ž·áÍ7ZHÔŠî« Äd;ÙM¢8ü$làæq߃BŲóˆ àa6@M“l}6º`#jµÂ¼êîƒF{¯óÈ"¾´®ˆp=#=3ÿF€´ý‚44Ì,Ž/bþ «þ<Àb™R§†ß Õjí + Àýƒý?{€µ_;ëØÓè+ð’D@Øõ£"Ò*û׉µ¤äÇ ÜÂWØÜ +›þx0ÖbµŠ ªìõ½üJ0€EëÎËUǺjí—“5 ‚Rž‡JlÀò¾‚zÕ#\¨Ø"VÏ?We§al€€0 Q×  ôÓYW ¹É˜A,—(àbÓµZPðÚÆ¿ê®À©è•ª„.°žéHJàm€ñ…n À¹i  ûX=5à”¹Díbkàå±ü¹bQ£x”æ«¿¾|™£{\˜Ÿ¯^._ÆZù7U¤k„ø2ñ…ùòÐå*<÷y8×­__®^Æ +ΙV­ÛrùruºŠ5"coœcï +%xç_×´³O‚åjy^ãŽàæÀ×û†‘P|{€ôµèÆß|–ØÈ'YÁÓ…Sz¢ùjyÙÊ´M(b®•ÀãùtÖ•~ +z šxò>0 + "Úhîü»Š#D¿›h Bø6b +àÁîãÇOxöôåK(âÿ‡×/æ§ãoöŸî€Œ¼€Î=p ´¥½Nh‘OcÆAXÍŸÍç9ˆ‡þ‚0Cs8Ÿ<ÿ¾Ógΰýⵇ¿îl>‡ä9L…¡a¦ÁTPc8¯À4* ’âƒx#ƒxT8¸O-æ=&Âe8›ÆËt“ µHuÀż*1àH#^º^©^‰£X^Û`€kŸo¨"À¿+ e@%z‡Ä¸ð¿P+šôJLdê8qd``ÀuÃCyÑiw^ÿ¢ý´K«QÔÉ‹;Ϫ–šìgÉ^»ý'ØòÇGIÒþsgxk·~f°·÷´ é¼x‡½½ö£Gï’äQ;þ¦½ÝÚá $ íöw¸Ì»_8—töž¿¸¼Í±8œü§MLu/nñ–NNúþ=¬iòNû@)ƒ€}1cIü—ýò°³×¹xÔN"q—Î ÷/ìÙ;ƒàíõÅX Àþ´®ð˜“Þzôiz7i]6B‰˜[pË,°¨Þ;}43P¿“ìk `öýÍ¢þîÿTžT2(Ÿ +à; äÓ8€é‚4RµT €–Ÿ{¸|·C7`”(E¿-- tÐ"CÏË£äB‚<áqÀå3¡5ŠêÄ?Œ¿(ïáœ:a'Ñ4ûÙ0üÛ)(*?rm¡Ãá³ã‚qníU“o, Ä]²Z‡ÊQI¢h^ºž¤'é¤1€,ØßÀÅ>Cú‡†ûžü6~¨.PMÙ@Ñáù0­Ö홤 +`Å ¤Ü%ü÷Ü*åm@Vˆz0ìt™¥›e~è÷¼›tëà…®:p¿•„»÷Ù%Ø£ÇOŸB<öüé˧,¤Ø0¡„5ÛþÐø3øÏ•¿É°FA<ÊM›†Ô +€ßAÜÍŒüo¢*z0×Ìß6ðvÎóΜ <Ÿ èÃSB +°|^~‚!>^ +‰F`K'—Ù½(q¤ ‰Æ)‡Hê$ç_òЏZŠ¦Òˆüšr2ý)ùï:,ä$“¿Ÿ,˜°°03 ?à〦¨¤ˆ}naaÀ ›–t¡¯Ï;Æl³ØWˆ™ƒE¹ßè/o LŠŒ [Iiû²D ÕS!@×\‹šñ^¹Í¢>Ö|Øøõî+I4ð3fµx{ž-yqx @5íìï¸Û ´Q Vð +F¼J“ n÷Q'i)ÂV\ÕÍSI¾KþôscP '©DÍ{;óxT *åº%fzgTü¤1@cSªÃ7{ÁÚ›ÂÞàžÎLìXßìrùB æÑ)\ÄöËåÐ}~™è¯{é¶ ­YÖÈ `?Qs`u úR-Øàå39rþÕ.ò“è? -ûoTÀÄþTŠÕÑgvø÷&—`¼áî/ÂzPCŒ©Ëo YÝc›aöâeÖÝS‹A1X€7°ÎðdP‚`Ua V1ò |b…ãqsË€z°g€½‘X]ÙÌ>§mg+`ÓTß2xíé f®¡ÀðÏ,8 à8ÀçÔŽˆÿ* ÐÍ{1|S5ð3jê·"kf o$Àá" €x¾¿ÈáAÃ8¾,úFïlº  +G` +€…õó•;þëu(€tÄï´ ˆ¢y¶ü#„¡‚¥I¼µ`gï” ”b‰!«¦†@Œ¸è_µÚ!8&ÀR€ÃcÆ’s2 ·¸ €wâ(úáúñ)ø! +ûÛ¿5` {ý<ëk§C6¥·nvß©ƒþ3 €Wç«îJ¦~1 ðg¼‹¸z°éon”•*»kÝ}ð`÷Ñ£GOž?…xõRŠîß/éP €þ+,ø#TþlÈ=¯úÚÐÙf¶4nžg††e–øÞ$ûòŸ¤í8U @°G@¢è/P 0g\Œ—!þ-¡7ÀËWëvˆ‘1&ð–ò‹¸B‘b‹†“I5wÃÐöÓøüóÏØày:»Þ+Þ·–ÜNƒ7 *ÈèøÔ\Š( -p< Ç\ À6õ9>ÀÓ€ØÂmdƒ€0¼.€Œ«Z)@•9PðIµÆ1|XÒ‡„QcÿþíVÜ)Gqu¦ï'oó_wÏúyÂíêž›³Kñ‰•Uöòçå¿6»Ýþ[b˜"v,d²ÕâÍ-·ÁÞ_Àî8ª-@ˆ¿Ýuä7‰âò‹”¬X‹e¾DugéÔãë ß¡{ÅØgȦð•ëKÄ»™­`¯¶)Ð8s” +@!c3¼º8€l‡výBq¿ämÅŬý{|»érPcM »Ût÷)ø?+?{òò©ëäÐ~ü¯€øØAúÏà?fì¬üÙ’Àøö0[Æ¥…üP6ªK¼Sƒ£À?Á=¦.AiøZ1€QÿŒ¯b@6%Ä·Õ1µ1óihN&Ô£”‰ó¬Á㤠+Y@ÿŸø°4 Ÿ/V/Þiú©£TÈ>×þ=è¨~ñm˜èPGaí­b™Rèƒ^ ÀŒ~×ÿ§X0!…ˆ†)€ \ ç¢+/aL«9 (þ·âmvÊ­Î*hˆÜnn9' èÀwâör×®®¬$‹c!®Gß—÷T‚(±‚xL=‡ó ¬„)ò{ à°zG´p¥`í¨á´ ž³C€;‘çtCXÐýM4ý¦ÊÙÉÄ៫îJWöíQb†”MThDq7@úR£©ïõ¶"¦Ößïï[N58(c, |Âz€ªüÜš½€ €ÀúkŽ#PRüZ`ÀÄJ(4ͧAΑ‰jÈ"{þ"Ÿ= Ã<0HëLpÓ5 ºÚ÷„•Ba%?Á£f$D$ Á< ) áFJ`â&üüÄ%x,€€ ã0SACS)±îð)UÐØ@Äÿµ)…ðÞÌpæÁ½|æ¡”@®Í@,|Î +ÁDú> °±ñùú—ëë_\ÛøŸ_~‰Û÷bÆkôCÞX + _×}è2€ ò!Ü™O'Â߀°2>Ë`D bRcËý½.Rb°è-ànë¿.ÿ&zTm<ÂÎO9äîÖ¿>LÔ0ÑÅñ1àÊ` Uôp¤¾Þ+dRVâOØï0OüDñƒoÄŽ‰Õ@1*€vÒJ¡Ìï­Qà£b@QÕ À»$hMðú°gAµîÌÍmïÊpÈîbWãº4ÄT.OU¢øÿ² ¢ŸøÖ¢€Cõ»Èòò•Ö•ÖÝÝ»»€?{Æ6ÁÏŸ?}'ô†_…düØbQ W€y}XøÃ«Ÿè+8üÿø#À†| +à ¨ ™4Ǭ•Ã`i’a@?wzè,Œ±r=Í6 JG(³#÷ûK¶Ê©cçHGÀü«Ç?ÂbxDUüÜÀ8—2F L˜xâmAJøDâ&†vD/¬›ýÇœžE¯Öå nººÀL¼°0ËáÂúâN`uãÚ—_þÏ/¿\ÿ²ñe=ëïX +`* [ +ÐÕ]à°'_U1 1€ ŒJ,ü N?|ló• "8üÍ{Í­­ïËåêö²¨]€ß6w&©G%[aÝk×v¤`ؘ + €0¶Ê™ÎD@š( EBbj‹$´«ßô1€wh  €‚€í¨Yëbö\ú±Æ_­›óÎ`a=ePÞ£xD:…o;Ù"€Ò‡~HfÓ€¬£ünu[üyÚƒ™Ríîy¿HðìúÇÞ^jpØ~†”ƒÚ•+w·‰v +Èz€øhx02€×lHà ð¾,?é€âÿðþI~øéoŒJØ>(;5ø+dé»ðï%ta2&'A&½ÅÑÜÀYáŸIÆ=PÞh5Æää8Ûû3ËËHÊÅ' ¡*<Ÿc ±ÃÇ€ +ó$ï9z°~Hå«sáa¹ ˜~eU 2€}â_àszs°ÿ €À<è5¦¯”ùÇ:PÌÌÌöŸøòËÿ ê}| ¸\ßè‹à7bõM¥pH ¿˜Èwà畊I’$Žbj`¼ š€2ŽôÓáèàɷɽ{q¼Í1Àavþw¾ø¯{ÿÏÝùÆ‹{1|úhkë! £x Ènâzßw¾mþùE«ÍV@êœ-7£µøÛ¸³·Üé´áIHXøÇI}ZÎLªn¢p»íÀÏt:°«ñ·pórçá·ìÇ$jn%P¶êªSù2aí¯ñå‘ÑõïkÒúD;9GüÅ!îršD_Ùþ®*`AÆþ¡¸‰t¨›þç!ú÷ÞVª +ÏZåžw‘jµÖ¨µ¬?xÏŸ~¢ðãKE¹’8ÈÀÖ[ès«LŒžÊà¾_ÂÇ/•D[ý ,óð DÁº + ÀG×QiŸX:È[•9„XÄ.A Þgæ¬PF´øŸÆƒåþ¥(z‹È3Z`Ó” +rQ6pûNŸèc¦ +ãS÷]YïS”.€O˜ÈHëÿ¦0׊µ—L7ªåòe¶ã/åOç Åb©TfSüyD6ü¯5Jä}]Y¾\­F8©±\½¼Œ-îC*¤YfwØ@œ•«ù¹9îñKåÒ¹b!ŸËŸ›Ç1¤Ä7C™ÿõ,0_º0?;³ûAxoŒ˜ pT  ÇZ ~g€vo\㣠+å21ŠWÉw'Ð:@¾f@"Ø›XÈ"@îw'v“HR áAË +34º—Ë2'"Úo%µŸaýMÂ+WØ-(+qxP|ž¿$x +ãOÓ +€‚]¶_%À?]ºÐæ€ü“¼~ w+70t†E¦ æù\at˜Íû1j«£9ŽÙÉ å†óÈÞjÀÏæþ\-Ïy¬<8”;ƒ4pÝÕ!®ÂcJÄd§ó9‡èx.‡K°£h›"û@.åΤ1 ¬8ü#?üB>Ë­¨˜&}™˜ôÿÎpiæŒlnîSÀ—§.î×ý rc“ýotcý  p ïúÿ\ÜïIc6²³÷Ÿío#_U£$ãch·Aøãä»jkoFˆ{öÝðö·Ojí×ɸ ÀéÃlvr¶¾ýB‰ÛIµAhÆ‘Œ}AKOx¸d{iöž¿xý_˜ðÁ)ñ6&:"­ÎŒ’V+NþÔÑÍ÷3€wm a-vLvódoïÅëÿób¯¿jÇ;ŽtøÆ©c€¯Ô^_ µ¼MÕ}*xénGæÇ‚¹#5 Ê+Ü'n¡£¿\¶ßJœ|w©Ukwml°]õ ®z@˜^½fØ `-bŸ.>æ8“Ϙ`† ç +#Ö“aÃiÅ÷+k•%VLóÁÏW½Kã°iJAþü´èOúþbKlÎ.Wd«`š@ø$+MK܃?y?ÙÏ/.8<̥畂%v=8.+A ×,sŒq\dì@=8wÂV>OñÔ_¯ÌÔ€rß"Þi—×ŸÉø<íÚ Ü€k €ìæí73àÿ¢~*ëSø©lÞ¸äÿrl ÀÄ逨ÕÊ_V޽T.i>HÔ®²ò?רüÿ3Füvæ_°'Ð(ª³^»“¬²áKóØZ0ŠÚËU€YEƒ"_%o,O£Š+?À‰]©×X½¢þ>áÇÍܸ"ŸEíò6[`'®Ta° ™ÌýÛŠ7F¬Ñ³ZwUˆ9¤Hå‹l¨PMb<–ö‘FA‚ªª4Ýãc­©F•˜ÑÇzÆ{ã«“À ¦:_ÃÛh¹/‹s“C«]3i } +6>üÃE)—àZ +2£ˆlhE O@ôƒßJøYzwÅzP! ú¦`ƒ–²A°hÿ¯_±s@¨Ø~2|Y)Á€þþ8¸§:|*ÿ£øjóC¯œ jBÞ¼Êøy”É&|/§¾ÁTúîÀ,iç^b`iÎøcH@@ æñžÀEÀ­wÜÌb6q…%€4×\ @„åúwÔêÊ$ô)²" Ð0Ø›·ÞÌ.¸bî Éaõø¯¥¸ï +ë¤Ü!|X@3R,.QX@l—Û*¬ê!Ð5“ò_Ö¨¤Q_‹ÖV‰#‚Yñõè/UPøúK!¾?Á–ôÕ`Czà e„ãMíÆ¸îgØÓ™çX#i)À|;’Ö¨ì«`é046êõå0²+Pëø)ø@µÿlÛX³}»Üp—–à +ß²é3 ’à*áî‰Á[©µ–íúPVÁµÔa‡¿22_Ìèz Ì-îd࿟Xüq¿æÂ:=?[ªPÄ¿úÀlˆÏsÁ]øñ§S@…àb€føÅz2;åD¸ô™‡Y‹ŸU€€uŽ–‰=#Àá €Â€<ª '½<²˜ðO“‡åHA: Xþqˆ/f]§vó9Q(áæ‚xøÔàà`_ VØØ–Íþã• ÿx‰Æñ»¬  %²àßpâàsóÖÀÀ> °_þ`î äü‘çˆ ¦€SZ±þ8%ËemSìH©¬ö܇c+Ö°JXýÀ=ꔓ¦+FcªÕúÚ[óð8ì2¶¾¯†q³žFVƨ¬‚›;Ië±.€DpåÅÙöàÅr›u‡$ÜÇhÏ'k¼Q¸R©Tê„<µŽáKÅ@…´WmlEuS>¸—.icÛI `+úk¹ÑÆ%„¬®ÊÓ"êëYr1€™TØÛq€¯Ù´F”,…KG:ðá̇T¸ b³º6ï¹0C ‘ê~0{[ @üÛÿñîS™ @½J@à àÙ+(Á¦žL@•þ^³Q0cy Á_<€ÍƒSEµr€Á\Ž óº ¤åV>ÈÏÃ9d^![=ÿ\LNL(ø>ˆ ð~!|Øô©z¾ã^ˆ6‘…Xê0ÅsÀ@Få¦:-¦0pVÖ)ÕsS¸þ ý3øï)xÔ|«*ìã ›¿#þ¡nTûÀõ 0€ +` ðßϾøâú›7ob'UÀR€^eÀ+îTÝ#²ÜÐÀûOvøWá×A­Øø¿õO‰±(êÔà±j<Ì–2Ð,P‡2­¾× ÅÂ2;p… €G2`9ɉ Á¥"9€'N‡ðНËd døÿM(€&oºÊÑ @û z¤‘ðÙÊàûjÔ‰#á¿Æ‘pˆ~nŠ9´nõh¹õ°{ž*éÍi÷EpKˆOÆ„†TqW {ñ±w=¤J¾g8Ο6m¿„çâ2n‹Â›-Ì|ȉ¾¿ìÙûAÇ‹þÄìgM>CìàÁÓ'O?aS òÀŸ£ˆð3€ï+Â^Q¿—ª@ÜSdÐa¹<¬¿ sλ”Ë(Õ`‡õpê ¹æ8ôãK€`q©yås,cd¹n_6Ìù´‰vxGå%¨1e¼Pø„d¶“%îÐ%HiÓÆ5 À#ó7'Àþv +^cÿÔx«yÅý ÿ~ëÎWÀ½À! +àØÜèì‹àbxwLøC6nÞ$Ë ì«`¢¶çvRÝ ViÝS ËhSÃð/Ë !Èú:„;!ÞnDÖÄÃçS*¥×Nj†z}«íà]€o§€ Ó'þ?¶2ÎY!ÆÁ¨TÀU°Ô1·¼î`@€dÀ„˜%*ñÿ žB>™ þ ᄸçå—z €íx5j®óÔT‰@ˆ\æxÞ§&À©€ÂbÞ€\ 2 '°ýv)8ÅIì ÐYm Áõëb×7ŒÃon’ÿà üSˆ÷È—›n!q‰¼´ysãÖíÍM| PoŽll +ÿý`Ÿ pC À“þ×o’pÂGÏœ2?•L°j¶ùb ÿ„ãu)¯¬†°¸l´Ïªó€,ê4;XâÃ=˜¹H“ñ=lÖ“j”DÿêÃ/vŒÐGBB‘mJ(¸…&îgPM Ô2׌Û%¶Bê ®Ýžc ûÁÀœ¡A9ÿP:‡â ÞR$X¡SÁŸó $YhW÷ðË›QS]œé¥‡üRió}¦bÈ5ᦛvZtmð€Žq-e )ú9ã^†[Þo†š†7:±ÀÛ(çÉÿ|asàmö üàÉãÇž¨6ð+6œ\€vŸø§2À*ÑÏM +{åX¡´D‚Ì Øràyg‰dáßP9ÎÐ\0T²Ûùrí°Å Ááý\ ê.o ÀD6]N€ßm,À>ˆµRõO^À˜‡K0í¡S÷PZ0`à¶ù]€Œ£à¶€†ø=0/ àb_˨faý +×I‹LŒÜ$üSü¯[jÁ>Õ}1€Ë¬He2€ÿ‰ëªc%Iæ£-ŽñÏ-BU + ÎÆñèèÀZ“8´Í+ Tœ€ð¿.‡5ÆùÚ̱$l¸‰ÄUÅa;E}_ˆ×XÂ{àºËl‡LYù°Æ1î^8¾Uzó¸ +ën‰à8¥²Y#…~@˜,7Ø©©œ ,Ý[ƒàR°¦ ÉrA¼X¹N_Šƒ}*n5Ýe ]@xj×°Hr +•U™ì¤Ä~ãÑâPüó¥Ú¨ÙÐ`P(ðü9Ë_¿ÖÏ­&À€9 +¢øgV€ÒóTU…ÀÀÁÓ94PÏ €¼Â’Œ;ŒëðÏ +l+ÌÉ+ŒÔ´îÂ-«ñ(™¾àlç%ŠÈhZ½ÂH@aÑY‚ðk ÿ׺ pA¾º1k濲7ë6 Ì?0Ò ?# Mè£ý1 w‡$FÄÿÍT\]¸:û;ÞûÚµkŽ ˆ„Û´Ü!n1v»X` ÀÿÈw@“d.rmzœ¬FpvxN“›J)´~j`°ö`‹Í€!+TdÖßD¹D6YB’„Áž††|²óížÄAYRo~;o‘æG\J£ýŠÔ£5Þ죹&µŽ1ðjˆ+”€Ô:åFwTâ^š ‹md˜ù>ó££êébï¸'™=Ý5®¨l¿ˆhÍ«²€´4%ÜÑ7{çmHøW""þ?›ú§ÂZ^ÀÿýmVÚ}Ì €ÊŸ°9 u +ÌQ‚`úŸ‘ôŠï°ü9;~d4€jABà3Hƒ tÓ”ƒH¨MoP,EË­/£Ö’ЧÀª³>Óô¸;Ó™éçuÜŠº èàç"Ðn6ƒ"(âæ¢ ¼¯tjpã‹ë=Ðe ÉßÒ]ÕCñîÝ&åü\È! àØt„c} ?@ÕÒÇ„(ÅzÓ^]@bÈ×6~ÿû¯~ÿûßgÇ\ÞiF2@f +ê0ˆ€H¸ƒØ[ÞÐ!†õz ¶ò¦©':ĽŒpÜü6®ÆkM @.À8.OÈâ"Ä¡5ö•Á7aå"¯\mï•;rO ÐIgn+ZõÅPê« õNXÁ w§7Ó¼·“°Íâ~ Í>/‰Ø¾ÁI»ZÝûw[!ߤM@ nYdçÜ8ëÃ;ö.¾±/‹uGK­hf [Å%†˜OtQXj¸„¿îLž&¼àÓI8.@ßÖ+äÇ‘ÇGp+‚œ¡)â|‘‚âŠ_Ècbn€ä;ËO*€Ù™Ù(¬ã?ÇK¶²?¾xÊŒ±ø® €iðÁk¼ØGúùP  @ÀM=±<àŸrý‹/®}%Ðè}&ÓåÒôtiznn¾ÈúØçJ¾jó—JØ¥FcºVŸ/Í—ºƒõ͇ïW9Ä_£Vá½7؇ƒså¹9Ç|~þÂû—£°Z.Íá¥iÍ–ÊãÑù¹ Ó¥ p +§y7lŸ¥QST¢jƒNÏWѯ¯àæ8O ûÏ—ÓluÀ{óÖê´ö»›_Àå9®àt5j„—çË¥ù9ü²¹ °›—ÐâÂ|©|á¯ËeÜ?ŒÛóræÔLÏðe À”{WÔ¡/ÿámsHvõÁ=J*Ý TD?¾Ò61‹ðlž#Ñ­Äÿ/½iÏ…cm¾Í +SóZ§Éà6Weòûĵ¸øå±Á¤îB°2àãçOž>þLý¼~FðúÕk`¸g ,w@ž€á?ªjz¥©h?ÌrÈ1óŸ³ùÜ(Gü<#ËÍuWÑŸM˜– qZá,Gþ3²=SòþOG9¢à R:­zB¤lÀ!‹ÞÙQ(¾d€€1³êp>þ¥nܲOþÔæÆìq àøÀu­Á›e}11w@"ü³ 0e†˜Pì€øâ‹/@¤zv¡E»È!ù’VP„Ö¼T >âP@ÀWVç«ê2âÊ7q¼›S0®u¯%»8/jÀo'w£»1.[_‰ÂVcÓËÊxªÀrïMŒåŠŸ´°dàâÉwš(ån«!áö7f¼1ßhÐ3­í$yØ®¶áö7Û8ñ~Ôjoó†vs÷+ÚO“äJ þ³¾EóUü&p +6WØJÚa+ +£oâ`,lœ´·ç£x{›-L¶…z})øç…dHÚ’×Þðyk/@Ðs&k/°C@ùÛyæÑwÏã\“@.ÑÊ Ë’!y[-¹¦Ù[¬@gpÍ혲ÿgú†õt—mú¥b}‚Y!à#UxöôÙ3U  ùùòésUþeG +ª‹ 9þT?²+€øa`àWl¤3$€çrÅIÙíKãÇü»“ìŸ2qÖˆ+x%%XdwaHx^>7V,ª€ 7<Ê<zr‰ÉÉ Æ}ŒÝ~æm'ðٰǃ½±1µÂA°‰÷l(r<\qël ÀD €.€ÛÞÄ{%þóSXߘ=qýæ1 à˜R&‚mß¼ =~1[˜þºXO„€_E¼­˜!€«dÀ?4Ù†ÿ¯vÁ¾í“|Âx‹ý«€¿ [`FP át¼MèX¹†ïGn‚{…V“ÖÊípâv G±ÕŒ›íö2ü +&¨+¼©`r¬0„«u+ÔŒã{n"ö%1îDBÁþ‡¡6î7Jô&Z1T+ïE’ZÁ%q°=1g7oðæ¸w”4£5xûñÖÖ^»Ú‰ÖX#@åõhÇõ@§‡·àºÌï2²éâ Õj@£ü«¡žªvåó"þ‚ºæD.+ès1¥ÊB\çîÖa·K;{Æž"@UÁ…M¤ vÖ¢»}Ì +çTÙÚ²ß›Šƒî‰Ç’fM€û÷wwŸ{þ _:nÆ€Ÿ(€¼dO!´ÿªÄ@€YŠ,­D°´Š¬âù{âÇ ãCð XhØÅ>xЛÎ{“~PÐtñ)(`%€k‚Ïú8¬(¸4IaŒÀj ãVðÀjÌ8Ÿª³@^Ó`tLT +JA­tÕ1°õäU(¼7ßÀ5Ž@[…Ÿß³ÓPøø: p*—£"± +>êWØg1 `Ïc’á^Û¹RžàÏã"àê U€ Y}1‰\€  ô(2¶pŽgGÇxÂWòÌ2 +*Àí—X%1\·Õ󒘀›f¬¸û4AãÂû#?78œ/Œ¥À÷«÷ÃЊÊåÊZc‘|°R­DåïUÒš1.U‰Xi%\ðr=XYZ2°äŠ +»‚×» +@H¶´Ó`,dÝ=ìV4ßF+Jj!ñ+òRC¡ý_ ë1‹&©b⤬rL– ˜h6Á="ÖSX[‹›QsÏGae~Êì f®`ÂZXåÌ63ÒeÑ.W;œb-‚TO_vŸûºW¤ji¸‰ZPx¾t Ø6Þb_¬èt­ºcÙ’Ñÿ“ÎÊÀìLM°r@8"„ÐÐY( +ÀgÿÖ_ˆ) û†ßYKw$?¢VüÅ”L »®„†z’U÷'½‰qöŸ9>>¾8:îÈl³NQãO +&ÆÇ'ßÀyq»ÑiÖÉw 9 ÑÈÈ0[á"Ð6Pæ[Øì1à È3 ` `ö8p@dÀ:ì¿Ô„U€ß”L €ýB$à9Ð-È€;›–í%„e9(ÌÅòJs¬³”Ãð\ЇÛuPþ(X&1Àá'• + <ðé/мËöc¹FÈQRÌ(-¤R!þ''¨V‰Ò>ù¸f“ÀLQm¶øuœQ +Ôz^JR«~£²D<н$¬sdÂîõho9‘.À¾5ìSEÈÚV¤q ›ÍÎ|Ú©*CT1<¾cSV o­¾pÛ­¦âÝ“­P/S=Dl×ûÐzsWpÀ‚€3Æz¢Oy›•®ôö`­WpnVüeà¿ÕjíÞ}ü`÷ñÖ`1à3ŽüêåS¸ÿìä‡×ð^¿úsÕÿ‘+Àz@¤ÖO@O„Hv + ÉÛ¸=®?0Pp ``Ðg]ÜgA\€q1ö€3¨úÂ8 '`Ò”À¸W|Ï­økøœaTɺÀÈ›ùÏåNŸQ™S¬` +€’ÏÞ8’ÀZ› +`J*ôèÅ6ØÀ ëÿ P¼^Öؼ“U©Œ{Éb,EïŸ|R(p:†å÷Ù4c)&àõ´»Õrü Ìs\¯¬n5ÉôüúV t  ¦c¥\dIõì<\*¬®'º +8« ›p]5Õã¬Õ(µÍôWùxÔ;:DI\£Þ(@<¢ä_q=lÖ›ÿ›`à\n›·ð)7!À<ø< X_ë°‚{ç5«àÿ T³RæªË~;ɲZK-<@¼»Tܤ`"¨‚®’Sì' àaÿù™™YÕ+UóÌ%¶qüÊE¶K£`a+\ukçýgàï$eY=À°±Á=fÏÀÀý“§Ï`÷Ù;(‹üYä^þ?ëúæ, þ¹¡s^½2ìÿŠ3£øÃìýËS2<21p²ºóŸ¶±ô¼€kãc ÷æ› ¦—`Mj +ñŸz÷6$õº·™ÈÇF xØ1ùiÖ2 +Ðe” ÉîÅhu» +€ÛV +§\û2 Z+G2€…Ô¸pS*Ýé¹ðö•ò¿€¦þù z\zÓJ} €ÈtâZë@þiÿ[žµªþƒÆ¹FÙ_,/À°T’0ˆƒj•Õf¼u~ˆ9Z\8Ž/ù8K‹ßmx¼R¯om!|ªö=t'€óiß1Uk)ü«aÔ˜ÞÕ½tÄU⥀$ÕFG+;aˆU’pÓ +¡Þ„ÁoÖã¸Ì Ä +LôÑ(Ù¡¸×Œ:b†P¯`²?Œ£>¤@ø¦7É[NpÁºçeëmç›þÓÆó,cEQõ˜S ìS 5`?ÒÍÂeìNøœŸúg·qþØ=ç{{°Ûnƒê༢xoÔß':±[Ð+WÔ'àî2¨€—* +d‡yÆú€Ô€=ðM»ÿò5ëý÷ ÿÔ R&p†€~âŸð2{®9E8u €€µ3`þ €qºð²ð.R8¢£4ÿcÞ8ì‡aÕ;ÎÒ(dg{jÆËŸõFGÄÿ)@¿(€ ¯Üñ…ðÏ

5UCÀ^„RÁ%øY /^ÃícXwmíéüVTnÓ»·&Bðýûkþ¶‰ä[«à[QgîœÃg Áç&=€p…|åÀCÀˆib×0O’@kÏ]b>e:{¨ðuQKHÁ!Sçg`02"Å/!–¹yøÛ«=nÍv9…0óO]~ÒÓr­ÆúwÜgA ‚ìŒ5ž?ÆZõ×X<ƒÁ—.óÿ‘%€R +ª”;•á3„»piF›5vH¸ì¡Ÿ`D†‡À—}ãÐaLGBŠÏî2]ÇALGÉÙž€…ü ð)ÚÀhbnDa€‰\a¼ ˆá_ øï*€} `¦Ë ÿ&7¬À1œtû6QÈD¸tÄ×} eÈ|ªµËrª‹ân €€®ÚS†ÝFO ЫÔÃÿ!1€e•ú”å ó  Mãx9ø(€#Ü®LN e–T 8±§r‰pmë•J=žN°c ²ŽVad2Z«¯‚ ãÒ¡Ô(ªÖ`ƒùÒ퉨ÈJÛ¼›éS ¤¡h}Ç=lËÇ6€˜Î)8õ­Ø€R±è‘Cƒÿ+@5¥èCÔ>fã#࿌Ÿg€\« ¤Nðå + …š6iî•À61£ëÏ=b¶CÈÿ@‡æ8’05ßµ,ø?÷6ÜK|öíÁ×íùgFIOM‘·¼,—AÚjìȪ<~$ô?yþŒÅpž¿|þ”*@Í‚X@6·¦žÄßêRü~Š‹XKýTœ…Jð`°y\Þ=ëXâ0nƒbHT2úd´¼†çZ‚_þH¤ÿ Hš¾ +1Ê2&‚ èâ?ؼó…И2ÂŽPs À•Æ©`’›ØÇ+ܾuçëŒHÀ,s n~¥€EqHÀ}=]4üwC€ÝZ€È­lÀ! @ž OÞdU0¡¢b•q62– ÐÍÀŒU(ËÏ­4뫟V>—/Ⴢ3ìV £sŠ€ý¯T–'©rcK,!ÐÙÁÊÊŠ¾´ý57F…i@èf%„­¿\0¡ÿ‘2€æš\Þ·Ü!ÿg! )p @øßϵ„ÃÖUûuG1ˆž2l)W?CН42ø)°¹è† +p  ß˜Yø `vö"p¬¯ ¼û˜Éõùá³ì`q +á_ðw€ÍäÍ» +àÎ&€³¾€¹ß Ð߃?`ñ#˜üòbX ¡ ÀÊå¨#ذÏIØ(%Áj¥ÂÂ?8õ«Œ%2{Àÿ§p¢ä\~°Ä‰ +`Âÿ*,QOØ5€Hp÷fü1üþÚÇøþå쳸bT} ›)côoôçÓ?=ð©1€¦1€{À~ÊZ8  Zý¤47‡ßXmDÐhi ÀšîgCfï!÷>ÀbEíçŽ1‡1|…f‡èô 6Àæ¸&cD·}îãA¥0Ñšvk'U€ðÚ£î'4á«* {µÑé<Ö ¡ÒôØCˆü•pKP©mY(ÐXiÓ,ôÑ6 +få…loÐÄñaÙö®ä'&&HôÇ|¤§ï€DÖ#‰BA#K<>0²§v¾£8K.¸A·™ŒWìÚÇ ‘žus +Àäöm ›+b@f¿°Ui$Ìpc0Ðë®øg‰a†8°!Àí“8#ƒ“íiU Ðj²!SÀÿXûÕ Áüüýà_¨`{`Òör4Ëþ"&v ¡•§äåvÀ¸Ì,ͺìÿÒ²s¨|¨¨ÁÒÒ£€t¨)qŠ1J x7Ð06ß +åÈþ3€”ìü¹ì—JsPYØöç°=ýUòæÈa°¡V¼ÆtÃ.ŽÄþÜ‹1çTå›~‰æ~4 æü’®„“±»XýY9|åܹâûÀkp2€³ UÚÃ>_ÛÀŒ¼ eJÈ^ì1»D€ +€ ÛB7±ëðK‘AçÁ[Û¸„ë<žþô[@æþR^f)@‹QÀGO°& †xúŒƒ„©à«WlÈ( )|þ—û—`Ñ€UkNÔ b~yOh»ï©Ž#49 ÀcGbÃâ¬dZ"E?× |u €Ò+(äü3à gY52èú  þÓŠ¾ÂD9ƒ]r‡ +€Pg= 8ra 'Õ<éz@ @è†Õ&P:à¦(€.ÔàÀ¡€UÈ0¥6 þ7ûm{èË%`©&i8(Q1þˆMø‹E. s!‹¨‡MÆû!W>fxp —ªã4@e.’1Xq¥€…S#r5$+uèÃ/¼X| >eŸ02Ÿe¬ñSû8¨•Ír©ä//8ðë—<<Ý?•.-CA•Ë%¿4]òqr£ÈZ‚ËÁ2_¾©JÛ ásR*wN#SSˆ”}\ ú ,§ß/¾ž>…w†ÈÀÒd=‘2Àš ÌM ü¹Béʇ=ÀÞ4Ãú²ßîË—ï zw­o#³Sº*@Z€qfrùìÎpŸØ„?¿Zkxü$€íŸ>{ò àÉ3VzÊдü¯_=g?  æþ7ìc—„ @X#¾ ™g Àé#° s<0HÛÝG|õ 0 WäU§r,OddÍÜ×Ï[”ð´î…ûŒeØ2¾Ã°¦Cx¤ÃtêÔFÿ°¾R@ûæÂÅ,Öjsö¯Ïœ¿xÕÐ鬾VõÁº4@ÊÈ„VäP¦ýŠÉx#P§,pþ]2Þ¥Khÿguçl`ó·þuצ«-€}FpáÐø8IX?Ž‚8®«®?[òlÅõ(®µ+ FØ“z=æjÌA÷›÷š›;ÉtÂT•J³€øÁÄxn wK¶âøüï]k ô]RþñÍÆ¸Â‰Àü1˜@ÊJA™%T—JËÁG—°> ÔÁœçye\¢A€³Ø÷CÀrÊÊ]€«ƒ|Â,N-S›ž.ß¿‹m¶œBÀ-n*4›Øõg) °¡>$ú±ãÔ°r€D Àb ³dìéÇ} ÐÚÀ[ݵt£w’º +:JôC¤Å»È=¡‰øo]iÝ¿»ËR€4BàSL à)Lÿ³'nˆ WàXƒ ýÇ6Ø?<~ÑÀŸ:Á$÷«3@$fƒ†Go‚9qb‰CÞ¤çÃÒŸC%¹çaØÉ"KúðñîýBÉç€z€ï)¥Œû‹A°ˆH?9™ÂN!¾‘JI,W< mÇpœé$þ†(€u)€Û,˜é1`l$€ëxÆLï4ê¬â¯R] å8íWÝ ÿ*à)© p¤ À»µ€XÀ|¢žøÃ6ogë”—K0ª0«s´"˜FÐLt °YžCptà6,<(GpÕa[ËXÿ¨Tº„+Á€r¨6a(ƒ"á”?:wnqùs8“æ–݃‹ó‹ã×>®5ÝÓ, `.ÑU¡Àæ{  *PÂ-€aÖVL@ àœcÖNØ€~È~ –Ð] ›`ïOß?7Mœ_œ©€‰ö)L U M…ú²1îž¡éW ÀŠJHqøï2»4ñÌ/¶¸pv¾gú9O70“½g€¥Ã.,ú)®òÞÉJ°¼Üh]¹{›ÍÒŸ?}Æ!BŸ±o`6 +zÎXà«çÖ?(+°Vh¿€ÿÚÜ'îi)póÕ`_óF­ýë³±®À‰C^Qó#ÔØ1*Šo×é"˜WaÛ‚"Öz-}udŒuXý4—Ï{9¹¡ÓHbÝBÖèþo,,l£ß¹±>H²õž„]yBÓÆz +˜à©Pu`iã¼ú¦jí^$ÀÕ@ +Àà®}ø€ùçG`Vk€àÇͲµà©74Y.ÓQ&*=ïÜ9âvqÙF^,ÁàNS+,×X5¸ÒûDYDÈÏru™Z#(?¬4ÀKÂs°ˆ#0½ïá5æÎ œö`BÊï—}:Ô$ªb@P`r¢¿è–h/7ƒòÀ£B¿„/Ç©RýT†nÂÕJ%8sLÌÍH¢€Ÿ€_†•" Î= lò—ãa¹BiAíø—XA%uù§݇t¾v™¹·Ã–¦Ë,%Nf €ÕŽÍ„=~B7¤óÚiÇ è.E:Àöj•9¶+²'-Õ+- twûÁîãÇæh˜ð'løò +óϸø_¿d7¬ +úÏh€tY€÷´À{(—÷Î çÏæ +EZìÂØ0ôò¹3¿,94àÙ³Ãì¹ë©Á¾@¹:õb T»â³€|~x$—ÈçßcQœšJ@g°á.Á.|šz×Àçô©¡Á!Š`#˜n\ý‚(äg¡º )€6B +àƒ©‹ ‚'Ì2ϳÂÁ.à•Lˆðò·€V ^µ(ÕoÈw«Sþû<€çüð«b¸q¶à-1cýÈÅo`m¥H†}öøÃÉùgà=Žç1 UQŽcVËÁN?`Nåæ3ñép<ðÕ(Zá2Lê•OIÖÅŽä +.K°óWhúÅ€|R ø$ø¤Pe]'¸w‚¸Ë +†ûVÙ(Üñ·£èS¬ÂY[¿MÖ"öýÃGáS]‰ðˆq7§‡Àë²ïÈÆz¥`úûä’ê(øòUÔZÜg`2.mñÖ8}e%ˆê,m¨¬ºÂ ¦ôk|´0*|P\4S×Á5¯ZÖùôÜ?‘Ê䤃†Ðxc{†]Ã3H Ãn–2Ó ØI¿8O@WÄÒznŸ¤ó§'® ï”´ Ýë +4w ïpµ“ž@ؽ¿Íª?yü”ãø´øÏŸc ˜WzrzÅäô€{X²nù`…=v – +2%´Â°sV‡è†ÍžÌO` åÀDìÊO}‚Šã«$°ã(b~!ç ça} xœ‡™"7Îá„quÜ( 6’äFÆàm¸«HpX @­‹ÿÙëwnSlÌ^ È67¯*4pç\¿~ñâÔ~ @ìsGFüǘ0 +Y¸ª@"R3 + kÑÀ¾}À”)øÿ¼=u€)€lW@pûÎænß>Ü2@OâçC%Àñ9`Ÿ‚¨„¢Ð&gñ¹û‰ %ì€ñ'•Nõ4ÀaþbX$äxBWÀª. ½H@Õ½¾Gz·ó夳D²ÂRF쪄¬Ÿ  {`N0M‚žŠ3Ù²$s¯Î:!V½,"ŒðÎ0EøÄ@÷31Z~A«,@ꌠÑ̦vÝY÷®qç\{øµN¨ÒCX0¿"YäžÔäktÀ+Û»wï³&Àã@ž<}òœ-‚ |þ Àñ¡TÀ’è€ßšà  ‹·j +Ïó} !ž¥Ç Q»`¼l:ä©//i¤ð^nrLøwøåHXÃH@=¢«àu²|bßU`é[€ä†aê‘—8¾þ8Ë °“†ÎÒ2@>Ô©Vvø_€g}½s +`f¦[ˆ¡Í[„n¸0Õ-Ø…ÿTh¿„ˆÝ”¸8³~uaá6ÃLEPƒ(ž°~qF×ëâÿ¾=`ÀÍ›] &çÙè*2—~ tÈ +•„‰ ;NŒ‚@ñìy¶¾‹Z‚_øö úþ䮉|Ó!]ÒŸ `%@ál`1Æ•b‰yçcK Ý®5y@ €W™¡8À ‹À9O7xˆŠ' ù¿[( sê¡Âÿᤥ”Ù!øÿýíû»`Ož<}ôŒQ€§Ï¡Ø7àK'HfŸ-lŽ=„>°¯ê.á;Ðo5egiÒ)#Ãc8_9c{@+ý1úïçYG8ƒ—IƒOŠŸchïÔêøp´L$À!zfLîÕ%À3˜Èân{i€žý§Ü¾½õƒ¤Å€7ׯ­·ïü‘HÏ2ÎÈx‚ÓÆ6€ÿÍÿ ¤> ;sqa«Dîïx"5€»Öô°}„pó&n%àÀ‚c'ë]ð‡?àÉû`ÁB•‰K—0Ó¢¿TÃ.LxÁ„€¼X#¸ Î0€óƒ/6° +`Á¤Ü2¼`F!GÃOFžóüsïáf™Éê»5~ƒZZ +î _Ù _³³¹Üiä>ïzy.7PØûëȈ·´DžGon¡BÁ2õ<‹¯Y/\5P Ö@⊇S10gcØ÷Ïgc´ø Èï§. ²€3€ꋌ +ÐeØrÌeÖ‰÷îzzÄa«ªHÕ€MfÐ#EuwNXÊ5*€í»­]ö +ÄæOå˜ýþò)½€gp  +4l8Uƒÿ/Ÿ±jðˤ +°‡!ANzRÙ[÷VÏúdNðRÇ‹:μ@nÏ>üù½§X+¾AVj‘§à½Ç*Àììϼ /4HÀ áå9H°á àúüN dí?ñOp +@õðÈnÿñÙ~†˜  0ô§ŠVûÎôSÆgoIð\ÞvVÕŠY¶È{tño`ªŸlκ2jíÀŤ¾Úü<€ÛÂe*Ý~Ñá æ\IÒ ÙòƒâÌ<4Mÿ$;å€weÒ +Ð v„}5RørìEµƒÜák°ç±¬°Ø®X£¿jÈzA`Ûš\ oIãÐÍxÝ|†tÓ,È8rj?{ôaë¯S¹±‘ÓŒñšèå3yn\‹Ü’™Á±'q×°â|š^Ú¯] +Ø¥p @@  [ɨTùż} ˜vërø±‹Ø7—€z ã@˜•¶œ¨”}èiÀä<Ø%xüôÑÓGì Zà% ¯ÂÀgPR bÏåõüŠ ¨F  `´rõ"Àz +@+¦õ‰EÆ«¢sŸ÷]“ ÷·ƒƒ§‰ZÅÀYÆ ë¼•<áa !Æ + x£Žu§î ïúÊ#žBºX3‚À.Ñ­{â±c)ˆ;Þ=êÁ^ÁÂÅl?Þ/[6@ R rfÝöâÃò¿Å 8”eiEÀ.0€SR°k¡ð¿qþÔä§ô`ê¢ü8)Ÿ¸øËA­Ñ¨±WÀííí](€Ç¬ +ôø Ç +|úôé³g€ýógP ¨L€}ê*tÈÇâµM¿r@#Ô, ‚Ð¥.€ ö1>jV†½ +Ĝذ@J$oŽn?“ÉÒçàÖóãú\e0ÇÖLGÓ­s… ˜ªuLu”~1Šœýwø¿ÿýú ¼s2¬Þºýõר¼½.¿=Ë6UG¨Ën;³ ü; +0'`ö* ÀW· a¤@—š=þâ—ÝžŽ%*pèßüC_€ZJkê +þBϺeæÐ;N¦Ïr@ŸÖÝ¥ëVÃ’nc¯L$ôž_ À¤ØF›ûôb ø“‡éÁQ³T`ü±‹ ²Â@Êl…,¼9L ôõ¢Mì¬ +®ÇÚ°9 +ÔðëôòiØ­E˜Ž;Q.ðx9<Ÿ?g‰$§OþxËÄy–ð;ü30˜2|¥³p}€ýõ˜z† +€¥Ò,„¹*¸õÞXwt ¥H¥œüFq°=9ñ—ËÕj㊆¼ËàÁ“GžÐ€'ÀVA¯€~¡ +X5ø%”ÂK @hÿY€å6 û6±ÀÞÏEMÄÊð‚ôƒÀû é±Ùh‘– +éº4@,΄Ð×;ýœÇwÌËJB2<„=liL%Â>,»ç&† ; Hp%vA @SÏþ+oõ}6fa›ؼJpç_ß¾u»Û"[¿!ü[@ø¿É:ÃD-,¼œ‚ÖQ–Þ0Ц˜YèÙÀ€ÝŒHƒþ76n0‘*>€ó`ÿÝx`¸s_øïc0étê}/Àþ8yÊø+èï³? ý¢Ç‰­Ç +Ng$çBŠ>+ëêj‹~°Ä£üðuÙ?Ÿ²XÚE¡{÷I6%¹æ<±H†Hà N´üš¨ ˆý)°R¾ëç‹`&e Bîfìß2ä[‹ ÝŸ˜”ÙÉ0»¹k ë?zòäÑ“gì!Tý„?UÃÀ—O?×€!l(ÌуÔ\Xð§.pBƒ­{ñ¸ôϨ‘¿HXY$Nš~ÐÐ)Tq/¾xÁ\NóÃ8K­”È("X}q_ix=vNnT$ìýâ½î5Øš€9s9ûDð§™wø€o¬Ï̲þ¯¸:û`ðöÆìÅ©«ÎYOy€q€ÛœÁèRW€$¸k©/±[ÔTSëºÊòïÏþU3a}ê<¶Y¿X€Ï0«zÅ|Pú¼î–*€¯ðÜÆøç8»3/ +ÎÃåt±\cJþ[CøWåMáoá¾qŽÃ(:¦™–ò­°ãâG8.Ó˜?¤¡ŒWWì,çÂÌš‡H†8æÝ'+Q) ?Å«{cNa%¾8W,+ôW&ðÐ~ÂÑ‹…ð‰Cxñ¾zù"ü ’u&ÁYcªAÁJþFÖp¨TêõHc‰”ó@:ob5‰dmÙÌ1…MYú +ˆ¤ +ÀJ°m@Pw¦Þ–CÿÛ:þY‘î:QaŸ@ÕÆºNAèìªNðã§O€°—P +²‚ð«gÏÙY0û …Õg¡5²Z@e$É€"óx¬ãǘ C¤#NXhØžÑvç¸-!ÿ1£9„(È^† +¾ÏX!Ë kUf¤kÊšeT4“‹ÞbŽã #ÁˆâDH¡h¿œTYü…ëT@™úæÕ¬˜aaÖ€t91ÙU * ÀàÌÎ,€à¿Äÿ曌4÷ƒñ3耽 ‚°Â&lþáf]€e€R58Ð à¹o90ÒþÖTøS%Xgœu²0Àã ÌèøÈpn|ê‚Ç%§O»÷!±DØ]*cq­©RFuêƒmz Œâ4v÷±TVœ°Ò?AäÁxSí“$ê8ë‹ON@4Ü@… 'ƒü*WŠ / Ç&&£¢WŒ&¨ –VÒÂÌIlOŒSùA;ùK$ìÔpÇ=É>q0¶ÉÌè1ùû0ô›ð¡pÎCobD¸¡¿« °Ëq¬ÙßøŽâ*[œ0 +^¹'àŠú$ðÁšÄL€ þaÿÙ+ ¸!•«pRpqÁ¨zF`gäì§] °¹y1€õë_ð²ºî œ²>uîöÞØØ¸z +i¿æ# ÀÅtC ¿þoÈÞšŒX›’kþRà˜ªÂü/úã¬(mÂ걌ªŒzì|éP™p]µRØA ´4;va0v„õm ÑƒC2,Ï#þˆG”U+5v=ºú+šX­—Ÿ•ú9èÒ5²8¾Uá›29Éz +ô@&`×—FWX±Y‚]´ò ,–Š«‹Ô¬1ˆ} 8H¦@Å?ìáÌ¥••ÕJ½Yç ‡Ðêœxà[6h7üS2 v_ûqÜEöŨ\ @õ âýÎþ;}`%~?ý÷è'%ðèÔ¨x@ÿÿÑ®† +~D ìÃô3`Ý?ƒà àgCA•˜¸¥œ–n‡‰ W>Ê©~ªê‚ñ&–I\%Ø ÑF2ß§0 ¯²£V†'@˃,®Ã¤”aÖü@Þ†`©@ψÑì3­ÒóîT=üà ¯Óγ5 ÀÆzVÌìJ`ݸ™QŠH|±qgcvöƒ™uvB—ø§Ñg1ÀúEï·q“ +àÆÍ/0á­;`]`­$¸]êÿ·§6±Ž~8Ã_ÿž<|éµÕÕf¥Yd{"‘Ýn®Â_ qþî[„Ó,aû1àX€n#•¨ˆ9;¥$ô¿] `äíÞD†Ö­ðœŠèâߟ˜,ùù}¬ù‹"ÕEô¼9ULÂYKþR<ù¾9÷¸;« C€ ~5.(PÁÏ®ÿ–="A@¿^¶^s2nÒaê{1&dÖÙx‚0q—,Ìó‚»Eþý7§€ò®~Ÿ˜ë~bâ—ýå*ëpxÀ»»¨ ä=òÉú³‡0@ØJÞ€VEèÐ%° K'Yn¾ À’°à«ÉÚvg»‡e×Yk‹t¡À‚~w\ƒ32Å®®Â(ãã¬ç«{Õ§Xç@ב;ÊQDp¨îêê ¥Ö9§¨2öã yÚ´Ú†Ôٮߴ  ÀÌ,è:ä›ÌÎ| Ð¥<³€F¹ñÀz†0ÔÇÓYã€èº77¿¤jpÉnßþ¯:€'Åc˜ Ð ÿ¸=­u§f…>¯¾ +Tâ¿¢Á *«k¿ýms+jÏ}®bŠî!!G׈֖«19z¨fÄ!õD£ðÔ×p CpEóqUÙßP øõ¿†ñë'Õ×QÝ}@tªƒû Â’ +}oØF0`IŒcΚÊ®—Ùt‰ D?éW—‚Jâ…í¨œ0ÍÒâbÈáJÀ&ÈàJRùÀfXe¿¢zšCEX‡p©z*èí5`¹çxÁYÔŽà,…üœØ6çïPäw¸ðŸ ”|6¨ÕVÈžÀX%˜U‚?~ŠƒýÓÇOŸø@>û +xÂOAžÁ+`É@*t9 mªíÏ É9 É6{û-N´'7ÆúÝ$ïOÄkxCAp&02A5“R`C1ÛUÄwÙ¯¸Fì’½}ì³ÿ¹á_ \Ÿ]¿yûkUXgëÿŒÜ¹ÃÄR C¾¸ËB6¯±Õa +@žåö¦ ¬v!.ÏÊÁŒPܺssa–cÛ)ÖȆØáÿöÀVOb Öe8®XlEÂþõÿ×Ü©·ç::°šDu ­uØ{.›ÝBe„Uƒ¬`»/p–ÌW¡Ø+i«,%wïþåÛ$ü?8óSרþ9ÒþW‚¨Ä>>YEŒÐÙ÷ýJŠhrýrú^©DŸÉaþƒ-Ÿˆ Ïg‹%¥"¥!Š‚‚\Ä_ °Ö\mîa`’>Ì÷1šræsó‚Ó,`1?Ø~Àž¾€ü—è—ˆsÝOJæJ¬ ÈÁìäþýû»îï&»°“Ð'Ôt0{ü˜p +\‘  °÷àçB>5ƒ‰{PŠUôƒÕî¶Çšà`]î°D)`X¾¤60Û^n(ßGNÁOðNû?Ç T ‚ÏÐ6ƒ¬ hLb|^ðĶ …@8¢`Ü_Þfûì?^›áßLðúÌ—dÝR€Y ´Çf€p2€º  KhìŮÇ€¸8óåìÃ2€ +€56áØ¸~Ý)‰býЛ 3ÏÏpÕ)€¦f®3ˆp‹á0€Ùuˆ{ð6tR@}™ Àh§‡ÎÞ$sZMi€Å€ƒøÕ›õ>» ’‚DPì`G ++]àx@2ßNóqKýo„@›ùNïÄÕηP8ÇŒp7úŸŠð¿’ÌáÎD¬Æ0 €!êÀj +B¢b•Kaä_Âq*€  û_©$U¿Í ,% Àe¥@h rê«ÿ ÞŒýŠÃÆ^¡Zª>nÿ³©Àz—óÛD×=N€ìUå +°§˜<¸^ÿíVE¥v˜ÌÇQÔÿÔÞÒi¦öÞe!ÑÏJ—¢ø›Úûðè‰?\3ö‹¸Ù|˜Ôþß&/ä"]Ø÷ðUL•$ˆ›| +_™³~²¬9X€°Ëx¬ÏŠ(,—Ù±!Wv`úáZl…~ü‚»È +Øgˆqj¼÷œÏ^ßj†|øHÅpù¢_ÞLåÇÿ „Zý…]ÄV—W®pt¶Âìþö6HÀc€_ÁHØ_ì?…EƒÀ¿ú CŠ{N +m½(@nĺÿWo$ ¦€¬I¾Ïí¬šÀ†ÂãykT`ðWt¿+´#P ¸Ï˜7ž(꺮FÒaÒóÿgØhÏPƪ82€[wþx¦÷öÆdsW`¦¡@ß1€´À(Ön’Ä“@¯PÌ€l¸KSn²fÍþÆ›¬ °Ž3MܲL àÀÂúì³ØÒ=Xíˆ +àðß­pèÇDT79¸…“dg:õf§ÆPN`šáÔÛöV3ÞJèOS¸n|¤ R Ј~5ÂVã×åpX_ZŠÃœn´7^B± ígfï³~ÆÉaþ TÚåølÆKtTÈOôÑ&P œ ^4ª£—Ãd­^_ vâ"ñ_IÂòŸCr 'صb¤.sÌ"CkÍ j+So‡ïcSýãT„`{‚Rò«Lý‚ü­ûw·1<  Ûÿ„¥ƒŒ °™ÀÓŽØÀSG A5À#€£Š{N'À)PX* +èåülôC*‚‚Ü“Àuwt\À¡@’³ÒcyÆÈÈÔ‰k)ŠË«ó±C$cÿgúí¿ÀÆ­¯ï°½Ï-p~:tP Ð â@ü6ˆ@WÁ·Xÿ:Ô[âÂ7Ø`ÃN6.^\'“X‡§ˆÛB`žeöbÊTe˜¤ @µ…(7à̦ +€Q‚.`g˜6³£‹þ}²Àgȼò)\€•Õ¤ÔB +z +R°ì{a¼C Þ Ãå Jê/Áž:X„¸{öŽZìЫÚJÊår”°ƒÐ|©B´w®¼¨;Ðgä3Ðè‡ÎƒBð‰+cÄ?t !§Á>ŠZ%ܼ½µÓNFãX + +:\RyQp1œªâ@VYT- 6`ÔÂ3â{ðYsùáp1 +p¼üãÐO1Üžp¨…r5 üÙ&°ÖjqŒ€»­m†¤( À%£ð +ž÷¬(`C Ð%à¸â&î1%ŒÍAº1@s:ïî¨ ¹»ˆ^@~øì0Œ÷HöO‚yÚÈlš4„4€;.±R4c¹áqx Lqø%©ÿÀþ¸}‡ÃþØg>H5ƒ3JhYv$@‰ˆ½[æ@]l^·‹òH‡=ðÄù¿¤àé\@¬ŸŸýâ&¯a €nÉÂU,67¯ €@\»àú2égÍ5Ã4ÎZÿ“ „•úÀÜ.Ì´þHEI-ns<~zü+ïnuF$@N`E~ªŽj$Û­÷çKçÎÍýE + j·ÿGI ó‡‰ÎaS¸5'õÊÇ•%¼(6RðÉðÉWhËY‘Á$ŒŠ `“Äé¹¹Ò\µ'«,ŸlGÕï±à“³ÊV¢h%XZ\¤(äN,…á§«k;• +ŽŒïÁÄå†>éƒ46þ±?^¼s':ÍÍ˵ªu + Új|—£¨u  0 ààa, °rBÖ~ðXñPTÜc:!áⳂ+óÂHëïu… „$~8ç>]°È^*$Hä|¼[œµÏ´‹j¨:0Ü×ÈQô_<nÿiM2yàÒårx +) ªžÀ ôÛa0,¿u * ˜]ßür=½êæÍ/ᬳ#Ð û«9T‰ÆìÔ_@˜¸îÏŽ@TYH·€Í_'ø#@&@ÛDJMûY‹èJªzW¡¦b2òw¬&µ¤EÁÇ‚„i¸Ç|ûjØH¦“0zÔ®–§«Ñ7ÛaX '½ +'ípo‹é¨zö †ÒSOû¦¤7ë4àrÿ@E¯ ¬Ð¬WVhÏ!!èGµwËó¥j·¿IæÛÍʧHÒŒËj(RŽMe£3ü,  û +®p¸t WâvŒGš(Œ—ðœÐA¸õ'0ùP2póÚ“´“Vù7Q+n%­ž’6|ÿý_ÛWnáùðK¡÷¾KX ò›è3è xK^΋;;1´awâmÜ߃Ÿøpðf÷õÖ€ù?ý˜í NÔ®[xWj¬¤p À¯Å}pmvÌæÛD{`úïb ª€µRq)¡OÌzO›˜ÈŸÒÑ.©|ˆlÝKú“yuìl `ˆýÙ14<=>’ü³ê/4Vx/Ǧ¯wôP9,þo¾º•ô)¨€.à"wîl(@' s¹ÆhžStë/Î|qký~àÀ—ðê××YðÏSSpðÝ}oz¸Rß$¸È6ô!¡X·2FL0¿OJJ¥ééésìƒ!_@~™ž.MÏOO—ß/_€”Jóì j~n~¾v¡<Ïù*–óót:R\À±¹ùòoÊ—/_®V[óÕéjµ\®þ¦\.sÌç†r£¥ùjõ×8¹\¾¬•’«qrPªÓó%£Ý•!õB£Ñü4è_]^àÌö6s¦¯cš}réxT³7È~ûO÷[Kc¬Q·Ù~¨¤–·7..lÈ6 *Àƒ¨‡aÈm(€;·ÖÙÑ𗼃ߺýåUv¾n `êü?s/±þðæì?ÓßgÉÄÆæn΂p\¥à^§È*T˜L6ØËí(jø…q¯7ÀÃvÜj`V4n|“$ß¶Ãí?ÝM’mØàí+X2l(yB;¹Ÿ$W¢d4¢ æ +P ÅZßÀjÞe­š>âàa:3 +²†5…xïáÝØãu\þ, n àòÁñ|;ˆÿƒ‘~„ŒNn‚©Jž_®V9XøúZ­Å5ÆZZë +„ 2à\Ad@Ÿž¸§tb9q\a®€ß“Úë0ƒýŒðØ_•Z„±«'ÆïúJÔyè€'XÇ`\q Û]H*j €{!]*îÈQÒÿï—ë Õ)ØÇ}Pw®³V/„ @,Š€=¦ +ˆù`À €€L¿È½T@7¼~¨ê“›7om^‚ý¿:{õêP؋˲vh ü‹¯p÷LPjÛê.° ü ÐŒ®‡µR»Jè„«uxÊ,H’o w`)‰Z·îYÈ 8g7:”z½¹õ¿^Tï)œÏ˜Z¥²dQv¸dµªª¯­Ð,&ÖZ "P3Œö%µp©0>=å[qÝêîVµæÿîÌ'öH¬”Áa¤ ãjUBút¥lÍèæó>~rTcèÃ#ÄeƒCp}`×±ØÿÇ*FËOh2@¯š-ƒY°Ü¨^Vû@F­hPÊ@"$òñmხkGäà¿O¸ðî::6Â> Ën]$85¨Ú‚cŒÝ1Ù82.²Rô(%WPõ~¤R×ϧ÷ìa‰ZØ”Án¿á§_©•×øßÜX ¸™U³0hÀ‰\ü;b!-ð LØ$J7ÜM0€ 1“[·o/¬_¥øÿL]̸ +È)€Û¨ö_ €MØD à6c¸NV2$BIðIµÖ¬x­¨ú5Qun›aõ*Í>l¹>Íf  å ùßomíȾÓú³è?ú†èWàCaê€ 88Ÿ–ó@+°0‡p… ¡>¤Ž”æ*ñ_ÿ¾Á Qñ?r0Æ]yI)£öÖ\;jJ¤¿.? ‚¸º,°ÂaG°¿gþ ®Bñà Ž,bw«lLáPQæ8R2¨þÇüM"OùD¾2îÆžA¨¨-~«H.€‰>W¯ø-j…+ R'pAŠ`âžÒ‰ + +#*èçp]0ß…á´{)Bø´> ;ÓÐȰŽuIVO°‘³`ÿ!áîÃ/|kpŠÐûŠŸ}ÓÆ:Ü{c0Û©Àú@ + 0ÅR$¹-`à&±IðÅMšìÙY0€Tð=p>%æh ð¦nÜÆ©g¡+®®K@à’ë×Å.ö+€Zw¢ð¥e[ ÜY2€’_ŽîÎY£¿kM˜x–~CwàîÚÿùß[qHc-¥—>@Ú8™o³8€t–0F`ƒør§Î\*šCgáóifO™JÀjdRÇÍ÷Xp 쯆Ÿâ§ñ×á¼½h9>bbÀœõ€Í°ñÅPò¼b;„‚q; .¼…ywñ¤CÓýõƒËÛ'$ EìTb÷@>´Àry¹Z-3$PwªUYašn`ÎçôHWpÌq0qO™ +­;pkàæˆ}؆¡vÆ&$A†{–]©¼‘¸xðßµñ@6‰Á0É·§8ûžr‹œ×sºDã(öoÃÆoîŸn¬ƒzÓõ¶ò=•é—®®l@œwA@bm^"Œá¦®³o_æ­»ª€(€u¬ß¼0•€¯pþÍÙõ/ש"X7ø6»›ü®Â•¸ÃGÂ%f®3p@°¯]›L˜ã‘ùYZ +d]šó£p>ÁN­ËÀ§¹oéq½þß[,ηÓMˆ9¤‡”;Qݬ0›ñÇ‹“þ’TÛþ¾óö‰¡ý‰ñÁ-Ú°>Ž ªæ*<‘JË·å=<ƒ£áN;¬Ä .õ1n²òb%¨éü|50 +€<2Âþ…ãêÑM\x7ù¿@¸Ì}RÈ©Y  4ˈ ËUÐ˘©’ +C8ËÕËPÕà‡û¬MhâžÒ ›ì°~.5‹ç^vNiÐæ,wjHλôƒ>9ñ Êà‡`/Lô™„úÁ)›k|ÔupU;ýÈiàÐ{›¡÷ýÓu|kßç0J1è›lܹ5{þª€¾¬Î+*ÐU×I fg/^‡wxÏ.¬“°ééy칑ÚcHUrw†`c õõ/¾ºÃš@Œ\a= ã\ÖX@–Æ@ï¨ÙK~Øò;„¿íÜûøÛmílEI+þëν81ÈSXýW\"ŠVëñNù!«þ¤õ¤LŽrKÑeÃV÷´ÃÄÁýpÙ‰£¸UÆ'&A+cI—àô¤üBþ´z}m‹EÿõzÜi\¦«RaZ;‰ +l0LCq ™8iX âq™æHÉ¢ëÿpC´Xö>1a @Mƒ!¦ü¹²O"5àƒ`s8A™‡I °Ìc õ°¬Õ´Û5÷©àªŸOïž=Q‚;rx/ÁØ$iLJž°MôƒðÁH d¨×Ë×ð(ô£ì®Vwè\«0äÓèGOû­îÓ)UªÔ‡} ìû¬cFXˆÅ~/ÀjÁdý>Àúl~HS><åtú×ÂUxýìž»-°Á Àï2 +À ë¬Ú$ðË? ï3Œæ­!àªêIpšqüÛfÀïÄñÿùí¿6׈yóž=²©/:åŽ]U*¾7îå&ÃË]l¹Û”c˜úÃ'ÉV'„ð&­0úl°ìHûjXßj—¿oâ!¸ÎÄ\•z}§Ù ƒv­Çô_±Ã +ž›$€z„ €ÕøHà2Œ“cá̓.ÁaéŽ=÷ï!.wŸ”ä5€*x5…*ПƒOÀnC¡Q©°FMP@ æ¨ð  c©p XþØ&÷&êTZ>ñ¯Û SžwÜœ&[覼ux ž++û÷´ß¸R°Ÿ ´– +ε«ÊD3Ôɲ…ž @ +aíÿbrð;( Ʋøgîê'@õË[3ç×{üÀÙÄÿHpÇ€*óZ9î 2ôcÂy‹©©)ކה`Óbâ_ñB¸·Ï€Jn¦ +à6•‚I¶›¸%aAÌøò¥BT˦ÀòS¢@èPî%ñA¬é˜‚«a´šÚõúZ§Ün:vÀ>Gë lp”"6× @µi'|¨›#&vbØl&Qˆ¨@ +}©ÌëÍv¹ÍæI\çsomA4›õF™QàE ²Â'ds`ý|Âaµ +̆äaŸ¼»ðÇù‘âr÷‰ÈÖÏvçŠ2 kP¤ð/ÏaC›€;‹ +–˜À:À¿¼|¹vDàr5p)·ÛH°7/Š—¦ÂAºìþñÊ”. É—·K@!ÖHs–Í}t‡ d0ŸÆ Éàب²†ýAvªµþi`àWð¾—W×CÀÀî +Ãò åªïêúõëÏØV 0eàPüý¤ +`sfvÆž Pçg Å¿1àtjôü({¤p@ € +€wY_ߨüJUÁ®› p› +à¶¡r fþ ªRêV¶³÷—ƒ(š£¿JLˆ”X%ñë&4@DTòø*cX#±Ú™OXûžB¦½V©üˤí»Œšù8JˆõµC'àwÙº‡ã“KlÌËë.ÖeÀÝ›íùÄ™¨Ÿ°¹…Çþ-t@;,7Ø@g@ðã?®´„ÇËŸ*ø8¥Ó¨µ Q¸—rœô!þÿøÿ_”ÚX÷ë~À|‚.¤Üà‚ë`{pðu)v3@â€aW¶_Àâà a²ŸD&¦ÖêXTN„37TîPÏÁâ h6>ÆŸÃñ€M¸SÅ}ß$ì"_m("Ï:9Y¿* ל-u§q+ `¯^æ @¥ÿpÝ /á’€îm²êŒCC¿>˜θ ñ-À>A®~qç+1*€‹Ý@V@ݙ؟ö+þ ø'ðïÐða¶ãF–¶bðZUyÍøÞV²¥&/¢µï_tîì°â>Žüé–pµ¡€­(ù®”ìD›àB“T¢zeirr|D? +ÿtï*¼ÉáS :›7"æGQZæÇkx¶5>žtëI§¼÷¥‰‡ÝÙù_ \l%Q0·ã¨‰¡À ,x¤~#8ëEíøÞ^ÔÚk'½n“Ó‰OŸ‘ãá­£G%9þÔ¿‹¸¿öDä ±i €lñœw®Ç ýœ“8Øcµ0ÐÇT €þ>¬¥Ïj>Z„Ç4¸ál=‚wÅ›ÆÆŽ­n‚…_j¯0œ?Ëó•ˆ3>¾é)ˈ…œç ÆX☪aœO@˜ 6àæ—€ºr²éÔÀìúúììb+h)ðû;w8p @î4g\ãÇáß`9:¥A©¨¦¨þÅÖlÌÞè)w7¸úKRQ% ð$‹H]è³ }±øÂyè…ü˜´Ú [þ4¶«­ÎÎÞ÷ÛI;î´¾Qâ(i…ì}­ÈlzçPðŸ·ú\¸øµ î•þÓ‡ +úm·wØ®h·Ü&Ù·0‡ùFMt±}ÖŠZ1Â| ›|Τ ˜×¡’v6—#d¾p;еí6ô›%ó¼FT 8®q¡ÀzÂF£Ýnïý;o½»®h«×¸¿ö¤$¯è{±@@_gôÁ¨lC À' Áïc—1£ý8C¿ß&f Ví÷ØÑ?ó¾Ð6gÙ1œ´ùõ©x…"ògá\ó +0cTã¸&V^Àî"Žð0h€´ ”åI¦)ÀЭ4¶ €©@ê3Nu:D¬RŽºëéÊú,°¿ËÌxÝúìÅ)¶ÞM›øJ  ýäø†—øîc8žeøllvcl +ðÌ?¹À¦‹@˜ù‡dóÙܙÓC6@nV êNsðÝÜé¡Á¡AFfðÛ‹%†yçJÁô<µ:Þ¥¿Œ×]š›g£›¹rñ ëhà‰sXã¶_8Ô+¯im=Ÿ\hø©U«lëST‘å“JjX¤ïek¤TnL7ÊðªËÕOZ*yø–Ël™„ô —Ùˆ kåeíàÑ˸ֹB~ _šŸ¯Õªå°Ê‚ªþÉý€žôÿ_ûŽ<·"âÆ-n¸å?Tì]ŸŒpħ.P'A= ¿ŸX ÀÁÞ@Ê„ÿÚåËYà:åB3Õ†óÚ}æWäî|€ž ç9Àµn‘“FÆÙì{HñºÄ± +<œBmP ŸÎP–÷Göý±!8¥Ü„]À/4@•‚üJ8„q\õÍ +`ðH  Jyfü)7à’ÓöÏ.¨M_Èh‚ÿŒSÌ2öÎl‡¦àþü¨i€”LM™Ó ¸íð¡þÁ °i)€þöñ6ô³„Õ ¨àZŒÜSãÿGÕÀATzø ñ>”*Ž[Ëq/“ l訋‡öÃÐ]mSŒ{K~ÐôU¦|²be«TÉ<ûÖ›IØ®ë[Í„#G“ ¬àà²Êøk* H…ªb•5 +ãX¯ÇjÌ2Ï~á yÑk< :` ¥úŠ{E'$i)@7@S›2€¾1X ÖÝE%,øq¹! €ÝÀ[rê zÜ”ÇñfÇúl…äŸ<Û÷‹8C°æ#3Ζφ‚Ü7ޤÃȬÞ1ö É”(€SÒIû§cÀÕƒ @á 21Ǭ6pÿ”þ%Xß_ +1ü‹H ŒN¥ €w"àe%¬¬:€} €ÿÅ>ÁßÀbþ#0î¿ëê^ÝÚbÉqh ^![ÒèÄâ«Áÿ ^†¥Ø ¯_(²ñ&Þ ™Ùi|l<y>ë” +§ +㟥÷ÁT«,†¬„I™%,ø+÷¾ßjî°³sd¤ãr#fýÆOHx&çé̋콌ýrŠStó59qoVÚÛéWò˜\'$Ç•ˆîo`Y0¨üCh/á…uÀD—ØqŽÉÎ+^`c|ë ~Äðoð2} àp¨ͬàf Àà/a À)€®`( uˆsGó)È+ÌJÊ,Nð0Žä |º˜"üÁ@3àèq(¸Ù­®O )ÛO4<9üjþîñŠ ØãÄÔMoB868¾6$» ;> >VðúËôÇ©À9Û’s¸oü©V› ÝÀà©^J±àfÔãºé¾/ÄaîP¯ïMãý%1|xá.€B2Ÿ4稲uÀžˆÊAÌ´¬4ÀfyEê#äÈCTKØJªµÄú'ÈLz#o'|Cz‹‚>_ÛNÐðz£NìýþãÄrïIIZ +0­wÔ» ·Ÿ`)€c}1=æ3çlAIÀbÊt?ètÿbÑÏ@ `²v’3(g1"ëX-"ÞÉé±ÒAŽúå Àb0ºÛ7o^ÿ²' ћৠèû©0‹èuóÈ!¥ôYp!@÷<”;·¨ÈþÁRüßêë(Å{là˜@ àå`¨ù÷â8ÇNµ˜æøWòcþ8-hCÜŸËî„(‹ynrirrbœ/…Õ¹ùJ1E¾Ñã„0?t’ +¿;WÈ,.ZGpâaøéððjFp"ö¼´´þßdcèi?¶ø¸F@ÿX¨‚øÕ Éån‚ë¢<½’·¼!¾%¾ª!€ÞÔ¶÷öœ(©;ëï/z±'#ûK²5‰y®½C È€Ë1€IÆ2   0—ò‡1æÄ.ðÆp¿|èÅ R@cå.HaºÃä1€~Ð“ë³ dŠôÀÆæ†ËÌ)ý À23ŠŽØ—ÇÎ8Ð÷ À‚b€Y¹e +ÀŠRüƒ”ºSW| €C2Á¨óÏ¡†îþ#üÏÂáÜ/Ú¶Þ_ ÿP'þJ~ / +@ƒïSÌÀí…¼EJg¿qË éÏN{&À'À«úa¿+a`°AœÌÅka°äOVÖXoc0ð¾ŸÌ[ ùg!† ˜(À¤—+ðX»Ú:ÐP/ä9`ý ïψ´WlòS.ûž¨ @Î9£x)Àñ1€š»¦É²2ñßϰµŸ`ý @ + >‚°Êir¬c×8ãV<|2 Àb}U{²I†ž2€TIpMYCD +@À‡d2ˆàG›j +ðáÔ‡Sö>3S FÜärÛ@Öþƒ°lÅ}»* `1]"þT/O¦žŽÃ ™œð&ÏyKظÝÿÅJ4¶†£~÷#¸Ü?ÄN£î…ëÐ^É.ì®×/T´ôGJ=Šñn +““f·YW±®Ž Vu =ާà `r’U‡Õ% k4ƒ#ðYãR5bó!j€  +4U@ïFU—ÉØÏAo†ÞBôÒ(z_i\gÔͱ_¯bɰÅ]ÿºNF–ÐèšÝ#êÂú@· ?àÍ2gE5²\wx `ì`¥qÊX’uR1€cîˆÉ:(ú”@OEаü 9¥O(‡¸cÊTÊ/pf ¬£“©…™…xOvb)@ªz7³|±|}O.€ûýÂèªýNÌ”s>éçpŒÿlœêל€½M&B–âàⓆs`k$748MSó[(¿téÀÄŽðïŸ8c“$Žx>œö ˆiÛ]“¬®®†Qp.¨/Áÿ%ˆêH¶R ?†½gõ¡ +@øóƒ•j°L'@øÇ/bc ¶&>ØPzƒðµé•e^¦ø¥¸wk¯±ŸüÄåß“‘L[€ihº?·ÀewI'ä”*ìgùÅ}1áý Žc¹áÌ?þ ÞÉp à  ðËcî€ ìóÌÔE1ùþ¦"6¨ÒCŒ+“P,gpÝðƒ=˜Äff>䇓–d¸O¿Úé)Ú~'} +ÀŸ(yp€ùO)Ÿð‚Â}od¢·À?’l3,&¢:m_â‘¥I€ž[L¤‚×Ð/rß_djÓ¸$Ge@’¨4ù·[Ý/ØÙµ¤oZk²Ï¡(j— +ƒ…qp wqõz¸âºäãj1¨,-XýôS‚2¼yô# + ¬È!l?Ô)¹Ã ¸s±€ç¢ÝùêÛº¹\ðÍèÝÙkâÛæ‰-G§ òx›—Ðöéü¿¯¾NBc½zï‚,¸ÒRå#0€± §² €~¨†û8Ȱ™aï1Cd +té6}1€_̉°>^W2 €.€M—!(̽akøØ͹càÌÔG¨ÿpaŸ…lq9³p•½…Ht?ÐŒªp&Àæ€x9ù{ޢπD^¡9÷²Ê”h °{%9çëÁ Ðk«,£HFúOÐÓp½p™Ð/ÇvÊQâ@wP¢¶\z~ý#@·^ï¶ACìÙ¬ãæð *aø©8±M㘷Y +@ì‡á'ì¨ZUq›!›åÇ8ÌPçòrËU=îŠaè0Á«âÇÞ•è½½* +€OèOaÍOɰ·i"5aût»àßK,ûžôµ`1`¯V² €˜?ª-€@_@.7æ±®ˆ2_ ‘Í73”aÈPÌ’Dö;ÅÔ„ >„üb ¾÷D +àü>€Ä–L%ºYÁrï¼I´¼¢:@d½Ùc7ü³øïS©ìS Þ"wšS5$ø/¥bCž9,vóɲuBPÒ’¼á_ƒìKØÿ_X¤EÕ[¤ˆ¯ñ¿„¢’Ç{´¸Š¿eG£’¶çUqW îYOl×Ë*¬ÇÄEö7.…@Û¯¿H¬=a§ 5àš8÷ÚŸvˆ€g\Äv»ZrˆèuàMéeaÑUÔ†~€žöŸk‡1{¥øèîeÿ½Dð:Ù_ +€ïÏ®P ÇÞ$O8gc¬ —aĨs ¯oªÙXÐÙƒ^8|¥ë¨~W®_ý€ À”¡o)•L˜)ò|aÊ-NÒCœGF§`ôÁ@°B€&÷ý"°I@ à2|W ¨AÌ54ÔK “Apd½ä—ü°\š(Ño_ª³º x¦À€2î@®$ç"*€ÅE·“š\þðÄb•Ùþ^}q +™?®òíAá¦`tÖ=šõf¼jwÐ-—ëâl¥¬¬T0GÊEÓQ§\e1t…X;Üb¤*ÀŸ,xØYï„ìA¼úIv„J +|¼¾D'Àý”(+mÑ`ªLšî;µëØíÊ'/.ÿžŒ¨ m pÎ+ê»1§ ޝÀu1fºŒX €–™‡9Q €AÀ¥<  ¿C €õ iM@eÊ“cûbwî|•ÙÙ™71 ¼2³„;€…ò +HÿŒí?W +pÏÑ'Œ0à\“>@Ý«þëêãÄŸœ›þ†–:ðƒf°+{ù\!BWª~ÿ,®6v­°¬(5A°””Ø?-ì¸8vëU 2Ê— Åúíø>++ñ½Ce‹]‚Eq3.ûTP%ØÁHÿÚ½f ÝÀ`0Ý.í±qÏ*TZ­­F»á?nÅmV^‹BJ‰â½5uT ÚÜ ý›ê£0d¯¶=„qÛ}O„wÜ£çEûIþÙp‹ê úÓHh©8i|þ.Â|2rh)€žÖŸß·‰”—Æ¥qÁ ¼Rs²¥ûc*@F5¼¾} ¨Îqaþž¿W øw¶ßd>Àù©›Ç1Šr^3K*.§°2mÄ(øÿ̇ @=-¿[̸é—p; ÙNAA’ÄQ#ŒÖñóñ¯+1e墆 +ãøÞ6ÌåZÔNâz´VÂÏ⨠+ìqpàf…ýøßÖâfÜ•l%í¹†Á ¨…àðK +±(³.NE@~vàÓhtŽ’?'ɳö²_X ›qÂ.?804mtöðÛãö‹$i7ù¬áN{;iÕ~“$êc '†¡â^…h&Œ˜é`m*l0 éhOøjq!›SþN*Àåß“‘¾¶VXF?[ +€|Æ,‡ïí[ë³_Þ¾³1Ë.ª7g¦f¯ÃHüÌ“w¤zâb°AYÀŠ@J¤Þ1 ž(È9°Î]#'Z +Ðøúë} àêìÅ·`ÌL|a–$¶ßÒìäaÿ§fäúC,@ù{>aoÀŽàÖÎÐhš&Ås¥Ñ¹ésçÎ•Š¼k.ŸË -³8ŠÉd´Èã%ÏmGÏ•pF±äŽc3[£ê/úl‰_šæ¤Í ¸*ï™âôtyºˆýìR‚ûîû@`MŽ’iŽSZÌÎã +å÷y6ê/ÍÏ•«Ð/ªÕËËó¥â4Ç;-•9Æ)Î,qG¹za~„CJ¦KóÓUž7?‡”犅\~z¾4}A Žw§_—øBHúvLUóít€l>5=øL7€ƒdYá;í*½ã“ÁëDäøzB?³Ú\fÝ„¸sçæì,ÀÍYŽŽð©zÚæÆF]R,­€•`)À! àM1–€ż UJ/ð‹À¾z°ùý ÿÂÌùóêIRUÊEÊÙŒG¦2øwB5pëwöMx,¹. %€ûgÀ•8.ow8[I„ª"WÃM/niºWËá6@ØkOÒîìu’µˆ]w®}£½Ÿƒˆx€ÿ¤üOɽ8¾ K{¤C¨1à­¬¨„ñt¸ +×Ù°EFñèÒ¹Á÷‚ ’”Ùª&À›ÀÌ÷—áí·K—èí3àÆC*Q§Ï½ª*xŒ +¨$®è¬wcUm-fŸépt¿Pk!8ºÊÎËYЩ²ÂÎê›î±!p¬š+•5`{u•ñ¤þ¬5mã™RTÊ8T_‹-Æ€Ÿ¦#²²Êö5øEi—õ&BP¿à=ð}ðÍØû!„9—ù7¯ŸÀ'ÿçÖ˜iÎË1PR'|§æð¥3ÑßA^'"‡•˜ç_ž+û)ðÝÓ0CŒp| Çd "n™ 4gbûvÊ8„`óØ€cÝ€ºª;©R€¾€½zûvª€S‡1ä²B—%\:£¥&ee3e pË…©.õwK,Ôè§Oùn €:W@¥;…áÎtl5ëáR!7¢?—ÿ¾øìy‡‘Q)@=†ýü¹ô)Ùä´Ìž7ûy ȹnà´Vb@?¯@ +àhÐí÷ëÜõ÷j àð×'·®3È_Œ_™Ò¬* ôoßb\KñOøSô&U + ­ù½S5=Î0€´C[=ü íR°€ +¿Ÿÿý¤1*Fò@9*mëx-Œõsß’M_©­cí#KðÈ¡&„[%»hÚJüÿsÿcîVѽ™ôÃD[=0AÀ30'XòƒXƒŒ4¹ŸB³_Ÿ¥µfsmmUu ÛÓa̶B<ÆûR5@-ð`}µ=Cõ5›8P¯‹>v“T«!;N§è€0øS#SØœ¯N¦“¡ÞqF ””12€ž ÊHðMÿð² à`)òE9cöc¦ÿn 0Háofq_[€ý1€£JÞªY Àï9©@¦€!~¿Ü\Ÿ¹xQýrð7ö@¿(gá}i™ +÷êˆ^%€Š2àçâNÖý×DK^p€d%V9à—pbýíS¬QÄ,Ü[ú©°¸JAèè¥Æ°5h "ÄÉ ‹A-€C¸Q¥Î©ó«¬âP üE\=½¢F*ׄA(Á“â^Y*Øáì¿cbþRÚP¸ÀþyBŸ:À\?œ9ê€rÄÝëäDÈ= 9¼€øï™ý?¼‘dbÂ} +3‹œU +@7õˆRl 8M§ àïÒ ¿ @W¾¾°Næ%a?T?ï¿'°Ì[x_– L)˜3˜5ø*ÿÿÜý_sWž%ŠÒ-YhBCZ`S,¡|È¢ÝìàðD² 3Y° & °“¨ +½B¤Š¼t˜4©ÙÁy¿9&êÅsïSOÄí—äÊV³GÕ(¹vÍvuøô‰ú Õq*ÎíOÐ_⮵~;  AI•@f"‘È?Ø{­½öÎýgtZm³ö)“ôÛıF!æ”üD—„A1üÊz°|#wÚº„Œ&È3%âþêjß© Ÿ¬OøÀaZJX2½¹xh+ + ''y[í†õ^æ·êçoð,QŪÿ¬Óg¹„2&æETqÕJ@ü÷×CŽX +ÊëÛõõ(¸Ó +*pØûÂÝàk»òž +ÿõ.(T:`kLÂÁýÛ`xBütâL¥=f(fèÉÏúîT¯ .¿œi 0˜F¶gþ%+Y-`‚tŽà‹7з-€æ—+°)ðWP'¿‡2ÌÒ Ö!s³:€½sÞñ KMŒœÙ7øl zðÞYðÿae¶Ô°ã¬bÐ:Jq«G/Bï&|WÀG|qÌQxã(z…ü&9 KóAÌ*½+ùUJ•Ö)®¤ÝÆu¶£'âÂÚØŸ´NO¼‹öiûnC„AøëÓï¾;ý¦^Ú-çÅwǥߨ?DÕ¸}óÝéé©¶~•NxƒR$ÀxŸâêÕiñ»§ÿ–þ§ü—P! waÂòs‰Ÿà@ÓÄ× Q÷5 ßSEùl²¡`â¾Àûð1¾Üæç¤s=²çc ¸¨  ·5 º]OX€CõãÖExÝ}¬6fð?Ȥíñr±'… ýkz +@0e°¸¡Ottÿg‘IûmÒPæ¤~¯`=Í᎑1_¼•»ÊÑÁ‹V‰Û›Wí¶èfù.¾ÿÁb‰å½%Uó¹U,zk¬é鯨ÚGÁ;—VÖô\YÃï•;ø™wk Y/¯RÃרÅ/ô…{ôv8ðZP©sWG E²Ô‚læmT8¼‡Wœ¯„Ø'XÁ8õGwjwq9¥RÑó×BŽ¢qB`*w+álXÀ娂jÁãÐ#+•»kÉ€÷¾7u@` tC9ùÛ˜@k1ÞÞ ÀOäùå(:Tâ\ àôZábð뀞dÚ ž)ég”O¦‹Êð¿9ÈÀ8okbÇ»À·Û[;ÛÛŽÿÄÏç<¸  §þ\! 6ej¾®z$»#¿Ý2}Îö€ÛÖÔ +ò‚é+U·F¤Q qCÞ ©Ð5tÿ0€@fÀ€J¥ö4Œž†ÇÇoã™("w_ æ½µ»•{ >!ÉG +Ž]'J~¥T *óžïͯ|ó^%klú +ùµ (­~¬%à·÷øD Ó|ѯ¼ÿÔ‹ÚÁñqů×p¾ApõïÏâ¸öÁÓc.Ÿ+²[ÒÊñ1N„³~T«}tÖ*•°6_iµžÇµ +öÖjáG0.>Ž©JÊíÊÓˆåkµãèxåîZ壧Qô‹_‡Åè’ŸF+µãÒq-[ ëÆ ‰HBÅaÄ9#¼‘¾3q‹€õèq á$à“S½¶—q÷Õq¦ ‰á™(në(ñ¿À~J°ÍW㡦 m€ç–ÈdZ¾Ö§,×Ü»E:6fŸ|.ÉÛßç@ Â'y +XQ¥/‹Â56àĈ| +ÐŽÞà\¢>È¥Û'6ÀÔÿ" Ú­ÚX‘%+S  +€§óü +ƒ2özKǰý¥bÍáéK ׸7ü8K‹’ϺùAëtÞƒiÞ‹×j´írã ÄÏãþ¯¸½Vi?ÞÍT8W­Ã:‡Š`룙– è·Ob˜yžWE¿l~„T]×Úªÿ_í׋ì ëàÛðéi«òŽÿ5$n5`û¢0n=ý Â‡²02v `é0ߟÉh2ÜOÒ'üçìC›@âkAÉGnA?3è>£€;Ûk‚‹Á¯]m²1ýeŒ“x“¢¼£¿­a¹g@H,@G~Þ×H@êAõTS°éõ>`@‡øn‘NÈÌ=Üaª¼·¿Ç[r TrÀ¸c$Ç4šf/Ø€u1K1‡Ô 0yøœ8¯rÿÈ€ðÏN0B žLHK×ÂÚÂBâžiê&½ ô¼‹%¶ù%Ç…h¾Öb!`xNjފ7òY ÿa· ø¾WŠJ¥h]ƒöXAaõ +î†->®KúãëƒòÐ÷DÏ߉~x…kpT¾Ypbó>>«ôNê¡Å‘‚Ïž¿àRZwƒH÷`'¯¨ÆÏñJ¨Æ‹L?üz\ ¢wjÇkÜMØÛQ(“gñÕæüÈ€î*p´'ñ¥˜i'ÊgLúåÄs;Ñëœ3ê¿ô8€ÿ/UpñS€O³€`äÏ:^pQc8’üìŸ)x-õÜZ?° `î!9%oÏÈO(1@øVNlO#€´ß&)€øÏ¯ø0 po>\œÍfÿmëû6<¨Cosà¨v'hÕæs#ùü¸(Í„½Èšøõ0`5 +ç#–÷{~m ôŠðj¹¼Ì¿?aåКÕ7¢b© þãóªÿc;>Ž«HЪÄŰÕäÆ Åº'GÛ>X‹"/5Ïbû&)/€°Üpò–zþǵR}VUÕ‰§Ã¥µJqñ8f ¾ç +¢Êô“V@}ðK¼Ž-Ôz;2`%d퉻šýÝÝBÀàåN|)À9—à!¸ Ø©^ßÜEá×€L[€ƒlJ—Y¢ à|ph:’¾Cýdí’eª<Ħ×\ îª/Ø'PcO°×åXl¤€i>!vAÏ™r¤} +·uzNŒgºooƒKö3Ði—»|?§kÏýÒ$òF¸ +Àr™=÷Äð|(b…Ñ³Ïø½ è!á/L„Öjÿza +üW]¼–¢•R + H˜<#Ä^üóý¨~·2«rÞe±V [ Q„ Í~¹T7Bº +ùOˆŠ•–eb8g (€%øž k—JAÄòr™ZW~pŒä’à/O±OP䈞/„Ïpˆä- +u`À…IPfX€„ó¢|fÐNc·)T |Ä€cM[ÀŽªpîåï+Î_«HŸ0¶ÏÅõdåâz•ìzÆRà—¯@SºË^ù)À^oÜÝ@ +ܘu€û3òoš¾#µ¨È š!ùÏòŸ_Ó0ÍÏ”8 Ȧý6û* ù³€8¢ò4úA-öW8¶o*~9œ¯¨–©á—£b-b]ü3¾?V*'Þö ““|C¨îÐÒ~·ޝÄ+0 ÐfX`Ã2€RÐz^ûìú À˜ßëûÆWqx÷¸óñ“¤ + é‡ëÆÕ¨à!õéi[Ê?f]DçpWq)lÅÁ„ô€?\‹Âé/Àÿ’”‹£-SNž,|QOŽíà”ÂÉ…æß–HÂYåGìN9oK7GøÉh q|à +–ÀœÔ}ót×W‡ž° 1 ñ9Íø_®:Èìï?>ã’TŸpk\\ºÓq¬sÓk­p ?B&wœ:€OðV ²ª¡© ´T€OÝ +@U Ìå¹ÀÛ}ê×€@¥ãJÑ%øO”pÏø[&ñ§‘¾ÑJ ¬±ï-ÃÖÅÿ%þቂ÷þ(K óÞMަ?rRB ¸^X*ÕôÃT­Ó9$±ñGwjì¡cÜu’ìã§?Œ¼›#oùKàµUÙ ÀÿõªQv5.²Îx/Õ±6ŠÊ¹ <ùÊD%®é‡ñÆ4³ÿ+äÿŠ•à¨a\j‡l4`Çèë”X3Ä-‘¸'•€Iø„úÎp†ß ô¸7kòGc|lÀC9ÀU¾ÜÉ^Ëœ3cï«"SÀt¾“Ö_¦ à‚§ØÚߤÀ¼õùRõ¾·2€îNÀÏâð`{¦Á§äÁüÀ'L(*PC`Öœ0^8HT@=.&eªÜ¿--É?@¢èNí•¡³€Dsi~{%¢O^­‚¼~8ª6et¢Dí}ËËÝÈ8°þ3ö °ì-þJˆì·3ÿÌ?,ƒüéõür\Zkyµ;{ä×îÂú€¦ýƒµJ~d"ðü² ôÍš{ëȰ r3óŒgÍd•WBúÓá{!l Ä¡4vûDÑñÂh•¡¼{\"r“u8€Ó»§a•u‚m⌠ê@üGÀJ¾ s²ôQ#|¢‰`7îÄDß*Z•!þ*àŽèÒ“òö5ͯ¾¾B÷ÀÒùNúŸIöé.( #ð˜ì§À9¶ö:€„ü™,€ EêÌ\PÀîÀ¢íkíˆO÷…Oܲ þ\C7Ž}ÍHsÌU¤¸…Ðrk„¾ÜgÇú^¸d?œÊ²Z8úC\Õ:"¼s+¡|¿øÖü/TRð¿|²Â +õ´ÒÈ<ë¹€þ–üMüEW åeüc(T/pDåÕ%8‹Euø­½Ä2üvÜGàäû*ª¨ß¾ ­`ͯ¿ú¬¾¬f½¢'G ¨FÍ0XõÉBHÒ#àq~ êJhO¦<Õ\ö½õ°4„¾UùAô+~½¢L®‚VÃzËo±k,À¡,À'„Ã…D6€ÅæÈoã»ÐÑ~00¦B•ÿkwþÞ= ,ìݹDà×0çÌâþ«Â9€‰<ÉÐݦt¥« € a%s;G_îÿhzfÙå#Ó`÷¬ ÑÓL@÷¸T=€¾e¯æp™”®óþ5Û{‡p +¸G—þCâJ øBTÅZöÔ_°h0Òá;€YÌ\K€e¸2s„ýOý!.­%î É% |A›ŸÀ?¡Ö±çGóïAúc¡ ÛÇ¿(Ÿ üù: ù²*ãÀÿÍ[µ^ +Å áø¥|¸Z +ò·ÈÄ¥JKùïØUîé~Ýì[0n}¹1fñy¤ÿLþ«ÕæI›²S+ÜR–ŸAÏtŸXþ3}(L…w¼*¿ò#ÿa\)…ÇüºbüWôaË °µò<~á˜ï@eÑ So³ôìëtÕõcïiÎ &Ü‘Àü??&el ”´…2@Ö’·¯c®™‹Ã¯=½³é?¦ÎG·À„”~æßàhgvfv{§±wz@ºô‰(ß DÙ³À¦ÿZáºÉCðÂ2빋²¯­ €D¥íÕYëzáØ~#€ÀMÚ<[˜Ñ! úQë„pßöY€~­: O€KÓ ¶V²OžGìý†4˜ý£ë£0ó€e¦Õáòò¬tpoLü˜À¿cÿÛêh"£ #]­úSã4^…üMÓˆB0_ôÕk¸JÖhàÇ—©7n¾ßâÀ{Çç8úÅœ–'Î7›­y?— pÔ²òçaP­×ñ¾›ƒ[c?.„ Lð­++”ì’`ÿß)ÕZá½\ + Hà•UÛ+`¼ äO Á‚EöÝ-áŒï€s­%+Ú ¡œ°Ÿo|%æ0ã 0Ú¾ž¹;˜ØûªpOŒÜžsê»zpx¸CêïÍÍ=<8Ú™™™{¸Ï²ÜÑ@7°õ¬èMÿ N¨–€Õ]­_W[&åâp{ï`[Ãö¹üHHè™(ìd¶FpÁb¢c¼3–!˜í[ÿ>ÿcþ×,¤øTÓÈó"å5¼½ë| hÃ2-yrþ¤KÁ Ç<ˆÿƉ9†në^–N!Ì€¯úe  þüWÃw‹8“_þÿ0Ö» ï·+OÚ©š^_4!Zõúwþ»¹Ñ*€ÌTúÖ«N¼0?x,ÇãU,IðC¡M¼‹+¡2@Z5¿¢' :€y|Ï,Tå´Ej¬i}}=è¼£®NŸÜf–€DáÚãÍæØSeÎûÛKꬰ½¦¹­ºHüÊEú/Š;Ž'Sfµ£Hx(ìο13;ÛØnìØsi%L=ü§—&ÿû:€Tl%‘}FÐ×€+d”|-À~v>!wö·qwÝm9Xèo T8…6( ` hÁ÷Ù.Ápqš1· #Žj„«ó‚ÔÓÅÿ2a ç’ýºVƒ‚òï`¤Ç§êß¶‚šÿߦû«6æ¯ß•E6„…LÿëtáX-ÜÌÞo•ÂOø®’m¸ ;‹ß6£0|qAÄÿ ÿõáûáªï•GÙö§câª+1D…ŠGJq­µh58@(.g…ׇxÀc†§+Q䨉'9ã”P€ˆÌʸôßt)€í¤”]n»Š@BÀDŒ¶¯gî&ö¾*T²w±Ü¦¾«t‹{rsG›³33 ²ÿ¥ŸØí÷@lOm€­ÙËáè{n€âµ–¿/ÄÞÞá[ BÎ:ÎnwÊVÌd©OXÌH€‘ß±` tWg€ý¯ÓWFVî¦Óq¸³mÍ»‘»‰,|䯲¢mkÞc€àê“VûSÆ‘p×£ÖÉiéxá\}ÒŒãf5ëaTÎçÁò¼© ?_…!”%$‘¤0Ø‚¿{œƒï#¯^ U~;ß~ûâääÅ‹ÁórX€¨ ÇÀ.C6à¯ç®á‡Í¨I£O2=cGó…àÉÂq+@ÃÛ´âÚq‡á³Ö ¶tÂýV V^Ø +›Q»µëñ7}…»ìm  0rab€|·û1w”·,A ¼ +>”¸#$‡ä‚'à‰ÄÛ×1w«‰_£."Å:ÀÀC:€6›‘œuÌô©r½#€$À}ùp¨zLÆ)Ø”)xé§F·sðù¡ ¤@p'À¥‚“Öô)j€}¦ˆõNì½}éÎÔqŒ|P*•Ü;>mÅáZ…#axÅ"Óm¶‹ ¼Jø>׋ÇÖØCpÒj>‰£¿?®,Daô¼‘|àaÜ +ý|ÿ"þÁ‰<ÇŠd€ÅQÄÆ·8N¡˜÷£§øp|Ôj‘+ƒì÷xâ,Úßâ|'qœ¿šƒ1‘Q0Žq ñqT‰XùÑ Ô¯0Q`©AÁJ"¼HÒñB ~bN¿ŵV[ƒl„G?ÎOT°S;^hµÃ΄ù“…áúönޏÜ=)OÖg˜ï–à;Ëøs?þ’s«Ðy +À<;×ë™ÛªèûŠ€pñHôÍ ç£ÃÁ!+hm; ÐÇü\sü¬o=GtÍÅüîSÖ è ÓðuÔ0vdÿ??2ø¤×¨! =ýg`1 ’©%@9€Y±ÞTÀ@ÿ‘ð/SX€+pÓHP[Ãd3‚oä„Gs£okt¢?V,±žÏqXÜ5¤^ůÕXnV©üï ?Œ?‘×ÖîVJ~¥ÿ€5 Š£oâÊ¯åÆøœ¨8ЬuQnMLŒ½u‹MñïúÇwxøhpº ²V)¾qu4(­€Ì+mªòQüƒZ¥Ä±?Fßʳ[‚•……RI½p´ªR©8?ïùkX©Ü­ÔÆüG *ø*ºqœûÆFóó¥ÖjØ©²r7ÖDžThrTaB«T¿¯ÀÜYÌXà›5Yå› + €§€Á–¯<]@K“[$Svµ³ÎAR°=3GðÀîj)ýÀ™2—ìs–ðÞ‘>ù(œïrê,¦`Ó«—¹‡vþüìëãd€d€ë€}I˜¤``K,>£¦vg2@qVm=ýƽÛpò§ß}×ú»ö³)$2ýH·¿BF^u§³È@êEWÈà6g…`²>a¿æ\Ac'ËëÉùÃ@¸ªB@®0˜)äm†Á¯2·UøÕp щ?™=>c©¿ೣ͙ٙÆöœ:΄˜H±åÀn_Ðaz& ÐÌÞ0 @¦&à+·À…õ>íø#¶{ËöôœÐq ÿ;Ñ,ã”þ;ök9pՅİ ÀÑ *·æÐÕ:>,sXï]þm~0¶Txé?³M¹¼õˆð٬oÔëQó»»Q«ÎÞ5á³ÃvxçT]ëÑøõG±²ÎÄz.¼ËB¶©fý¤uÒ<­„K×@—Õq3Ú¨7¯{KìwØgÕ€°U)þçV{¾|~ôdì^%Ž*Oq=®‡?Vl¶Ÿü¬«,Ä/ƒVX;[QÜù^€ v$U kõû„ÂæÕÀèÄ—â•­ØÔõ1óŸï`ÿ¨1û£ÙÆCØÀî*‘2e³[ËR=¡~ÂxÖ܆së@hú”¼Œµ³$?ïõÈÅOö·UÀn—‹Ä‹)f¢8ãCGý I€²³s˜8·7¡¿½áqèj ð; ªÈdÉýèû¤? ò“4Á‡Ü‰g +Pÿmé´)êÀ.ÄkwÚQð®³BÿjþÇ…QÂS¸ÏO•ëõf½þMIu‚#{?ÄOpæ Ÿóò!Ûú~'/Ýiãp¬óËßq^>{Œ*ó-©À vÚ +7n®âr|²Ÿ7®Ï‚jPü%o<Ï‘‹¢ãŠÕ1ÎÂÈó¿ù_ ¢¹A|ï ëcfíàh÷>`÷¾{ h€p„Š)“£è?° “æcÍÖô\wßÙâüz¸WˆXùje¸¬Kààs +ÀbäÆu›^ô„\3ó‡âLë?7îëÍ9@*ºnÂs”Œpñ:‹ðÄÇ¡‡gTLÿAžE‚:òƒj#Ýߨ‡íR¼"­Íve¡Õt‡¡¼Âç9ÔxnÉý¡R€ÂÍñ‚_­ÿìg/Vâoé¿À¸Þëpõ°œÏ&T|m¶J-ɉ˜.·3æuNnÀÛUo⨳ù`#Þ°ç{‚_Ù׸ÏÐ÷ƒõ¸FèiŠhäù_ŠÄ¯E| Ãï‹qx´ßØ¥XLê줠ˆ™ö’OT ~wÈž +ÉͰ@¬àXàÍLMÀLÀ¥ŸØÉÚù‡xIð¿±)`Ú+00ª"$03(ЧÜŒýBÆdà,€»°n$àðêþÍ,Àx3^˜œÈèýóoÞÇwëœ9{Þ©žÀ„áF«Ô‚¯ëQ«R ŸY^‚yøìðÏ +l/vµÀ?ú&þNÄda|ü ”âV"#{_À?D€|YÉzµÖ؈jà€!Ï + £P0‡›ãã“SSKËSSËËå ö`c u ŸBÖƒVã ôÀÈó¿‘_ˆIJV,­qëir“ý˜ù‚Í÷•˜ÛÙçè8EÖŒO@Ǥ`·OXähnk@º¢ÕÌ'ðx`=’Ø9€W©0·xž ¾/žÏí~.€shd²ŸŒ©€&€ Q€Œõ‰ÔÌu €ƒ®«;V§×Ò‡<ÚÍç ¹«ùÜHþÝ÷‘þWð=è þ1GýYŽÓ/ÓõWÃ“Š¿ˆ±ÐÁ¨€MXxHkGø/æ9’ÃÒòÒò2þîñ2²' ç%óç xÑlšõü¥åÕr5®”êQ F8­5ꣵ+xÅ|€Å{,ÀFök”—ËÕ[Ð-X“ÁBŽe_ÉPË: t…‹ƒ^€äaß5§­ëX×:ªÿ}–X4~I0BÏ…ì:Ðõ1³Ø6¸¿ûYcf†Oö3ŽŽ0CÄÜßkl3^"ùßÙilî‚ûû9¨Ý§ûø°IÝÍðÔ d¶æævFfý™zo¾–q f—L;躀O@|>M’`l`@18p«A +À,€£|7ta=€h‰…¸/ôðWiÔûʾU›ïU¬®uާÅÊø?ã@ZAØ*Þ^ÄwZñF=jª'.¥Ã,b *«>Á?šÇƒŸ¿q冿Q [ ñ LÄ ð4ýÑjJ¼›82@Ð +ï´ž„ +Dç]fæ +•gNr#ã¿¿º„Å&.WNÕƒ¸ñË|o2]Y€hÝ vCÔÉ ;TŒ¨ZÏ9ÐNÉâ”~ vÌ¡0ð 8Ï÷ðr\~thÍ¥[Oúî™5Åzçwæ¦gˆ‹&Ì0ij4vwvw<Øyì°9+Ó–€ØðÛ®qÅ6ñ5ÛLèëÁõÆK$—h °ÙÐÄ׿KÐn®ñ K=ùQtS‚^½CÊ0øô*†— Xa°Ï½Y»’Ø3À™mCÀ–ôìD/Ÿ£[çŸà ©¿ízé ?166„ƒ¥ÕøŽçƒÕ­ð,H¯Ÿ¸A¶Ù'ÿ±·BŸ=…å¯CW¦¦¦næF˜¨?[@–aðcÕ¿ï‡ b"Â÷®QÊ­àÎq}½Z?Á¹×p©4"³ç…¥â‡ ê[ûeò¿\®>)FHX-‰xçN³ü%ùMdâ=è–9³·Ñ>i3“o˜è‹ dà?>Û%V1“=ëñ+vý¦\·19€²;|Ÿü…öŠP—â<¹ì²û€m6Tï8dˆa Xq`ÿ§€]¶ MÀi÷íµâ>saKÎmùða_ zo¸B@l:·€¤W‚Kõ30J_,”Àím³ù $ìé0¬!B)e‚Å +‚ÑŽ@5Î@wXˆPe9e³UðË +Àuý)ùñÉÕˆëhèƒ5Î@ÿ'ÌTŸÕ7ÀÞj4á#%ü±0\¯V7©ÇAX,2ñx† 2Ó|*€?ÿîõ‘Ür5¬Ç¥Øúðë‹Áß@w8–o½^õ¯ä~\™ëøAÛ¹qâ•uðé—VKóªÉ¬vɲ\›ËÕj4ߪ®—ùü@šÂ–PjÖì!È󏿝k56¨œÙ;K … +ÃKUM»GŒýéSS€ ¨ôü¡öãïôK;e-eQ¸+¼v86_ŠG/äŽ>sp°‡<€u‹“q;s ¤ú;~N°‰Õ]8€Ç»ûr€O¶7·¼À>,1ii l³\sKäÕÐÞ­-‡Û¸‚YS¥î:I+ÐïÚŽY Kyà¶{8¥¥þR~Ä KMˆ$è1W4¸zUþ ó%€ø>Óûâ±{‘)ØÞý„òcÝ…€R`9Ÿ³–½H[£°Ä*ò°Ÿ傘cLƒ××[^oy9ôò”[­2ÆŒJQYa?\‹WNñ+’‹ +P(Ð,A,Z¥S>@ŽKÒ,iˆêõŸEÏgy«áDÂËã¼põëáo³žˆ½J°ÂlØÏG€Ø‹œÇ²Úœ?Å9°ÕT·¾ªj€`ýYMÒwïÞ½ +l‘{‹9)(¢©À¹I­Å€õû¸`Ý%ýX#Ñá®Â,Ðöë¿ÿy˜^ÈÍkž;>_Ÿ^HÍÁö¹Ù¹½ÃÃÙi䆳$Ÿ]óù¸2€Owööw`ì^œécò¹óæÜ-ñB”ëq›`½D"ƒí‡Lägf·¬Ã~*QìœhÇíÙ…û,Ú»Ô4÷pÿsËˤPØ+#¨¤@AÏÀ✔Ö8è£E×ËÒún¤àS>~ØÙÝÞ…øôy +pp#þçóïÃé á‡(É“q>?ç@ÚËžW-ø?ÇB·©%«ÞÜØÐ.`>†·Ùªð=+Ù¨ta<c$ïá÷/ÔéÞ þ&Búý³úO£ŸVý«þR<ögƒ«¯V›1À®•¾¿‡¥–¸M¨opx5(Wã…Sù$û0žTVbèØ½JåR÷f€d@r2T¤Ê$¿…_§CñšKÓ,Ü +vºÆì2|)Ììø™ ÉÏÚ"‚òõÌ9s„¾$‹^ úgGÛHwÌÎÍl3[8Òæ@·0t‡ŸnïšMH\{qÆ)ýÜysî–|e€Ûv Mr¯ ôqøÙeÁZ‰ØÎ:¿{+B¥Ï¥&}aß1b@@÷>à±{¡ªVæp;Jÿwº²’d pÙ$Vk 4ÂÔ…Zÿ:!¥,{Ëåeoji*¿êãu³ÀîÀ–ñûfóÛÉòq'ýë³x + ,Àzu#.µêƒÀ9°^e)àÏ¢j{Ë'j춘¹‚öÉ Ý<À‘?pòp%FºvÓà#í°o54ÐAÙJ—(7!}­à\uê $Î0P0²ó ¼l³%7Èð÷œ¶ÐTÚ… œaÁlÑÀ`«¯>^®À•½ $Èl³ª +8ߘ…çÆfç@ 8€9:€;v~n°ßØy|dÀÊ/Fâ6ÛŽ·gÑq¬¨O SiÁ@àh} t`ç!îÈÊ0!À“xĘ ég8¥üOã…}‰¸`@Wò}‰ÀiÓë*te~àÝÌÁ\G:èáño–ÉWŸ°Ü{ø~Ñ÷§¦–9‚¸_˜˜ð +@––ËÈ3€JJY£'As=j->bÔˆþ×óããùÜHÎ[G2^:e9â ¨uNøqÖŸýôI³û¹ÑB©/±X¯\ݨW_¶„û¨nÌ¿`ÿ¡º.nbÖJÁÁèuçQmå9€»†‡Å–¦î#-'‹GðÍÍt¥ýܬòùøˆŸrN!pý¤@i±pæ¿8N_ݶø’@ìƒÈ<äøÛ÷¹)Í0‚ݨ:×þîþ§ûM+xyØö¼÷'ú¦ûœï”ŽÖÃc¦±ÿ·w2 ¥¿¢“ºT0i!àv}I˜#å³E€ì–ÚðvX¸3²ÑA3ŠOT”ÆÂºÂ$ÒÁ·Áà8\x‡AtÚjµŸÅ'˜¢`õÞ’ÿ†…Õzìùc¥ˆîêCÔ_FB sZQó´ÝŠZß·Ûѳ'Q4ªûMP¬Úª·¿-µOO¬Ö__´Ü²'ñwHæ_œ~Ûþí·8Þèû´ìW yRONX«Ÿ-â(n·Oê/ZµVÆun›ë'ñzó¶ÀñÎÙPTg#,Þ\åÝÓ¦àο®TZ°Ï€8}+@Rˆr¤.‚ /úyŒñ´¸Á¶bIå`Fá‚ßÚ¡ºÀ÷ÆÿË ò +/çZ`){Ö€v{;3‹L˜6·1m)ŽÊl?~ŒØ +޼´ NøSœu¶Ê.<Ýž=p¼³÷Õ%Ðþ'û05j`o¸âE$Qܨ/öŠã…²s‹€Þ‰„?«z ÙÑ´3Ò5äfqÖBf•òù¼W«…áÓhò-öÛÁ¡ƒjHý'òd;ëಫ X+…Wä6‰/»ÜðØ@À…£8Üh·kµ + !±Ç+¬ZäásûîoZODê¾°x}A!ŠÁXïšç…‡6°<Ž>•+•Ðç¡° +íž!Ô8ð7tÌT½R‹Z§ mH5 +Ç[ðvŒëÓ‡µ¯£ø»èivR0dÀ`pAB:“ýŽÀ¢4Sz%ýœ‘ýü^Ò:î‡ßq3ÖùÃ.àBú{‚ãõ° u|…(D8€`G`4À=8Qv{¶÷„bÛ² Ûþ2p\=g.º +X¸¿xøwcfnÛeö·»*9æÛLA¯PÒB2Àí ø-ÀâôL–ûštìðïètc:ñˆu¿+,€¥þJ¥T,GßÌæs¬ýÿA©tw â8ù•‰’Wdž‡é/LܺU("õg/šž7?_,à‡y6š¸UðŠ· +óÅRínp|×H¸æå¯^»–Ë]à MK++wk i͵ò?=w8ßrkkÇwŽý‰Q +.—·Â­Ïÿ.ö¨±s‚•J¸ÖJX[Ãþvo¥Ì°#®©~­õX[ñWJ ¸Øù[·&pç£<`‰ã¯élé[’BäT€A&ú’ÊWGn+×,ë”òsU{ÉH0øQÙ»iƒá{æÿ%€$èÐù%^€ý£Ï%‘Òš¨I0ù7‡˜¹¯*ü ?ÞÜ>z¼¿ ú‰Ë/ÇÕóðÒ`s®ÑX\ú½8=÷ÐÀö':r¸$@3c¸ÁV0S¤,^ ÚÀ Ѓ¤êUgìÁ×tW;#O;¨œ¶ê¿lÕŽ£òTžU!& +ÇwIcëéW-ø÷‰¢Ï>ÂüRúêk¿Ï#Os]ÂBõý„¥o2عŠlBqå¸õË8nŸÆ­ pÇ-¾}ýjÞ§Ùhž~×þƵò?ó})spºvú Ì›òÂà?i#o²S‚0ú"l½8‘ù8‰>¸}ý"n½ˆŸ#Sì +ájÂöéé?¶Úq;¨ýC3dg¬–° ãÍBøáñ/ÃçÑS¯ +,PØ àc@‘Ï$»1žëØÄÝ´ž8åðsüH»è‡½Àù¿ïŽÙCLEŒÁì¥_ˆ}ŸA² #v`ggn‘… FÙÝý]Àce>ÝÝÕãÿ¡¨ürxÙ2HÇÜÜÜý¡ß÷§gê›wÕžÝá ‹æ#þ z1«]@ߎNÏÎÍMËt½íÏí†Yj0ÙÏ?óvså^¥SW)G™`Õ–öîñYüºÉ¿[ð'&‘ük¼Üó–Êá-ë.pÃð±ñ)φ +ôXÒŸ(>‹ëOê!Äz•×s9ÜLUõ’§Šý¡Zý€ïªÕz¼pêç9Šñry•zí› (¯ÚHÁëÕ0.U@u»1è‘®Tuá# Wel++²†@6ÊåÍœ…H‚r +0:yšÃôžÌWÚN€÷¢ú(+üá Î ØÂ…6JFRt +wºï;Fî!à +ò_þÅ”>´ã@}›\@Þtö>˦Hôíí]&U³¬_ª%`ùèKÂ1õ\œÿW;ÐÐÌ-6æ†{/Þžn¨H~2 +#‰ôƒoF„lÀk3‹€E «„È•µÿœ]ºß™§tîÆàŽÃÜë¸Ô^W1yy•{«½3ñÄz°ÿ+ëô= ØaìÁH +ŽÊàM6“ð 0mÀ%ø6s;(·›D†¶*8>Ä‘Ìþß,ì !ˆþ/ý"Ž>;Hc!4¡ãLéûÅô-¬ ÷ßh€“+Põ¿ËMަçãå€,ÀD`¨÷ýéÛsûÿ`GU;`´°‰Ñ áŸ|´Ù› ‹³*@²ŸÎg¦ØÉjv"œÈhñÏç"[Pj#¥çc²²9̼ +y€´4XBºèç9ú* ÿ—‘Úûå“"«Óø°ì¯êa\yÙã("€©©ÉÂxÞŸ˜GLŠv$µe䲿ÖÄ âßë; H„ ÕjØòþ¶œ¿qS= -'ü§‚qfü¯žV*Hþur˜¯:®û~Ø.1v‚8ðæèõBÔÝ Aá‘aà€Òn—šqé.â› !0‘àfj€ö‚Ù»-gç@‹@`nï¿ç2E»Žê}¿ª€ÛµBÀÔ€dúâ@ð¹`Ž`ÏhåÀãýÅÆ§]­5àKÀŽw^¾ hÌÝ_Äë>›üž¿lÌMß¾oõq;ûÛ<¸{#èÝĘÀÞÀ]8û±P¼-àæHú4åO¦,÷5™´¼«äÈO¬AÈßÀ_b Iˆ¼=4¡¿°s¦·TPjû||†dÒÕ³a’Zö— Gd`Y( WÌG„^þMË]ÀX]} CÏnˆé@(F囹<²lã‹ã`#$Œ +@ænàÓzÛ¯Æõ¤“º’¼í1 Á$PØNˆö…Ï(Þ¼áá3kT{,€D $ ±ÞlÌcU| ZËÄð{š!hOÅPýo§ ܽS(áÿ÷¤äÔ8ÆwqÕÅžW(”G+ˆ€ ²8Ïìâîž­¡Ç€»ûöçûŸîîl™ˆoß^ú)° g¿ôþÏ]ÞŸkÌLÏ1 °·ÀiøGèÏ`à&…~*Zr¦XA˜7”`=MnÁ)Ë}M„Þ•Õº§jD…9a’Ý•¤`¹<‹ü‘ÿ±5à.‡üsd²AkþÀw­n©^aüæT~…u ñ•xˆMæþˆeä “áJßé\@þ>*FÇ!š¢Ø0󓘫çm`ÂZ\zÊ ÔåvÀÎÁyö–Ôü ‰+/SÄtÉÌ`‡¾„!ÑèÉ”Z’˜y–ïËГôØàØbãûÛHëIö1fhØÔlÄQp,|N€bA'!x½@ d´ë #¾ƒóð¯<íX=€Ž`‹ŒÈï²Û3 ÆOrjk{wwgç‘9€Gìी8z!^Él‚ÞHÜÉðEñ}Ð;Ͱ €Ü_ÜÚ?âÎÿÆ  ç;€ÍÍE$ñd8Ÿõ·”¸¯2€ý†ºä™t6Uµ·Â>Q€Npñ‚`ÌsàhïœðOfØ)ƒôæ(>–4_‰~ÓKbШ,ÜC*ØzÆGcÈxKcKêËZÖ!€ ŒIù{JcWI{r­¬ñÄ!PäÀ"£&ÛP[FY¨R9ð|Î+ T[óqÉÎËÈ&„yÿueß?ª´X.€kÓé +QòJÑ@#ã‚'À§–FK—¿Iá `²-às÷tä<¹í`.aú62ý*ýS! ~g( Ê p= h;Á÷澌ý`Õð ä¿KÂ_q’8tp`'ç5È@ö?Ýßž…Ø·2€m>dÀncûèqšp©ú% £]ŒWy +4‹˜ÏgIßà%všÍ¡`÷G:¸½éè!ù2Áž®Ù7€E { +ÀB€Ð?yˆ‰I~–ÿý€îj„6x¥¢ùJ”!Õ%ŽÚ€/4>î*`ÉÏÃÃ/-Ãâ+E][kø«ÌÑöÁzp ©0½xy dد WlŒ]ž cäŠLý+÷@ôH²}@oé™ ¹ÂÔ$2&äª|ò°¥˨G$.¾#Ã)Ô³à¿Ïë >ÿï" p3Ï«óÛ´-]j¸€H p@x÷ÐóK§X5%˜F²ÏÝ ·ÇRÀŸr_«¤‘R Ì…Âù{P&ç:¶ÇsÍq^—Àqz@ÑP¾t€{’è¬dõ€Ø¨“p|{ýèrgÄñ"€›º©±xßòúƒ–÷çæ(¼Yõ–ÐoF#zHYÁŒè@ñÂbÌsÀRýNQà fØ)ƒnPéàn+b¯zˆò^^sù j5Ã}þƒÈ°¼„Ü=YdˆÚkaTߨÐ.¤$¿ Ù,Ùd^À÷—&‚y&ÈÖæb$Gz¦8p/y”wú¾Ù*FÁø W,éSkùœ{…õfüd%«T$\®?“àï¡0ŠB\b£dU༩qÜy9j³¯2î×ä¦ ©M²“ÇöÀ9Î Ìì[%òžý0 ™ú³àÖ€°Ãô*ýëSóÊvœº¯gÊÀ‘œ±0up7Ç`“eûŽŽv;0ØY›/GÑ‹Ðå²ÿ»Ò S÷E–ôã­*?–¹™ÙƲ€‡–ÛûL€ «Lä¿Fþ+Z`[W 3‘åYþŸq¬ìf E>ë×ã­žö–=¿Õþ*>i…AÞ +Ð…"[ÙÄÕp¿'axqÔ8Šš­Vü¬„ÏžDaüëV3zkª4áa—Ö¶oÇ…\n¬PxûfnŒeãf T4Ñ®"¼òž·à*žÄ~À'¿n=ÁÇ*] »6c6õáéÃÄÅW8‹jÎŽÅ»F~¸K.±}ÃMïYÆñ“@£—faáBထk£`m¬Ë8àœÔ†>€ð’â… zÀ\C—H-ÀëWËåV€lp1çUAÙ»€ñ0\TV¶ñ¥Õ\„à5ÙæËÂôBœqâH‚‹€à0úÒÅû˜ú.çæfgÔrÿ¾ú5úãm1H³L[@"Y£-àŠøþªu +ª@fÜ{ö€ÿ³Sü óq>rç‡ îÜ)Þ¹311qçέ±kW¯]»vuäÚD¸ƒ÷;c£¹ÑQŽóÇ]°§v/–øå}ÔF_·°#…‰Ñ1îÄÝ‹ìñöÍÛäoé·ïpß¾˜OØünþÅ \äU^/kâÏÉ£ÞÂEÜQ«€…±‰">ð‹[ÀÄÄ&~p «<À-¨4VĦ‰1Lxã9úáUþ ÚéÎX,R0hæHc,È_&ød~¦@i¼sø€_ÒÀ(åç*éÎ=¾o@®!œç€$ @ÐIÄ_m:úL0Ãîxl]AêpUséS€Íä)À>€²/§:ØxE°ÉÄ‘¥ýÔ(ÝËþ{–‹®1Ð'Ÿl76‘ Ä“ñÍ7ú=f8S`£9€Vf -ñfÝ¿,ÿÏ–à_W=€è)ŸO9Àîq|ÌÆ´÷T᯿<¿ +Ö¢{Eï]v¦†„2Š~ɺÑÆÓ/bì~·Â§_!)eÛÚ¨~¤µÕn…Ñ7¨q7ê…Ñ/5zp{ìyµp 9 ‚!@¦£§²}æºû€GŽ?Dú\¸žŸ,,•‘6[÷aµ0nÅÕ°K?eË¿bß±M"MÃ1’y6ä ŸÀÈTøV¬°ïß0¢«á°@S,Ìû0r×{ïdQ´Àè€áL2 ¼¼9€Ûú—Éý{Xd½øÎ'r˜Ó0×@/À­g@Ô¯–؞瀄ü¶tqçÕ:€Ù~àó£ƒ ²þ›Jk?ùØ9€Í-åv¿_xµ2g€`­¦øHîµ ÷¹€™Yk¼7@îScö¶÷-ÔƒLRã/öÛ²pÀþäÝ¿& ƒÿ¦«ÇÏâ_azƾþX1Xá@l§ñ5ºåÊD£ú•˜ÝöJ¥`=Ôø`@Ø ÝZ,Íã‚ô¬F+±,= +ðÙ|p¿¬ûùÜBaœÅlË,§W¿Â¡Ã½c¹IŠU‘9Ža‚×ÊÌó//—ƒjy°õ¬†* °‚‚u¾£‰c>Ú(¼yÏ+‹ìÝ•¼Ï¿wÏ„¸€pP(0¬È`%ä$3€ +ÀÄlÌ5 ÄP>ñw Èo–ûKŒÿ x8€Ñ±nàNöÚp® +0ò¹è}Æ{z€×ƒk 0ÃÊývl\Aê ö +ìjòëÝÇÀæ&»$§/;Ö8ë:—ÈùE€ÀJi”ç7 èú qPˆŸìm«ôç|oÛ…¹!ò¶‚95!ñÜ”º¼ú §Srâÿö~¶"9E (yEÕÁ ó)¨VA":V*°%¿ø¯§€| _Dµ’㘕çS?Ï\] å1ªÁ:’Ûju•²2Žb|,Àmƒ¡ã „ä%7¶Çô+¼¶¢ïWÃe—ƒsƒçAPŒýå%¶TX^U1  ª3ÀÑD¨ê?Þ»E5uÆáro°¥ïÓóÖ=æ-:PHt p!F.“ÅJÀÅeÿ­ 0`Î[ èÁ>šàhß· Õ” (@& ¸ØóŠÉå’,@ÆÑ0QŒP;»[8íã£ÇÐòwÇ \v¬!𪠫‹p2^p+ÙÏêgؾÏzá“Ä8ô wS€‹XM»bg@îòžÓ§lØs†WÁ…Ypæ-ùÀŠæµã ÿ]ä¢%€ŒËûƒ`u#€€SýkðÍp}•!ö–—§¦VÇÖõØž•sMnB®/‹ãáy +àÎÖ8ùYÎqÈñ¿PàóI%ý>gØi¹\­‚eìHæS‘ì+|ÂçUóx"Òñ<â–FA‘,QjžJ’×¹efÜ胿·“2Ç|¢MàªÒ¨~‰Ä^¢A{€‰2è8€ïƒÿlvÀX`ÉϹHD;ºøójP¿ÀÛðùý€eH5#¾ÝýY€Ç¬$ `¶—˜ìXCàU˺à<¨€USô<èîÆE +}ë@ç  ›¨´Ÿ¦ +€À¦X9 ð×Û«»SPÒÂ_ñKì>1÷V.÷&kÞÃv8€ ¿ðöM¶†S.½¯¬Çþ³£ tÌz€a©ä?‰×Ö'dÅàú:û Fžº: +ÿÏã¯Wë~þ + w°Q ª|€8H„ûOb'¦e8ÖZ,xù‰‚_ö–g;X­5’ËÑ­×p40\¸OYò«XY¥D€Â¼èÏaä¤}#×&p›:P É~ª=aÀp!&2ƒÊÌ£ü® qËà‡d¿³|áWT…ÄàÀ|¹°~M8  ã²yÖÊç=¯sÀù·{€é“脳Â0 ðéî.€=„]ÞèXÃàŸŽßõ€Ø`ç!gF`°èDS'¬Ðw` ið=iÌ©Ëà3Ôœ%€¸§.0@ÒZ€C'äèÂÚ¸ÝRç;V‘ DpÈúWÙìž#}Ðf—ƒ:ÎM-É(C_-[§ 7(Aȧõƒ_!Ïu>|Ž\øV!_ð§˜^WÉ{`É–—ì/þ­@ü§`ÓÒòªÚ)¬®¼8(H8Á"€Iøäh®çÞ4 øžßáŒ@P(´@_½Álò6éÈ€„¦ â;&˸O|ÝfM@nŒC‹ ¯Ÿÿ‡ßÊ.pàWqæux:€£í¹]€°8H€O»€*=ÖÈ€’!Õº ìPÃàßÎTÈÀþþæÌ"·“¹;›[l ( €­š]V7‡À+—l6~47Ìd]2éßÿ$« õýÃ=«ø^ÐǸ;Qße­¼Þ‘k dm­¯T}#—CRH Õ+µ`bÅ›``ž¹on#ÖX †w[² õ\&y ¿N ëö¼Ñu¸«ÇÝ囹ë7næoä®ä¼¾^guݦ‘½Œƒ}Pð&§þ˜œõr#ôȰ÷ +û (X@–òyjŠ[(º, +ŸV½plɲÿŸ}@àF’r¯ÀÊ£ù±·liÁ…„Áeo†>¬²5¦ +‰E²'~ê@¦6VpHøµãÈ ÀðeˆÀàÕà`ÿ³CÀ¶ì¾F—8L@cvº¤Š@[ ªZî3@%Â58®}xå§C[€ðÿð?Kÿ3à- E6N.ŽppÐaÇLÀgtvsû] fËK¹7®k¼tðºþûA4Q"MÄ>ìÁB=¦éÜ;ÐS€rP®×ë-°ºN€Ág1àòÔ’?–<Ï«‡þÍ;ºÉÑÙ —¿× }¡ÓõE¡`I6àM\g>vO-sfl_ÆÚ%ùüÂäTþ”Ƕ2Ý{5ÂŽSË>¼ p‹ö¿`5 ¯"D»Ã‚ÏÏ‚ü˜8‡9ÿŸ{‰ ãȾN€É?ׇ^H~L¨@ìæ_«›ZÝ([g}a½ÞƒxÄ_îêBvw.áé/‰W/Ø„™™»ø½…ù„…ÝÀqßàÒøn8þKøµ9€³ +À?ì,œ @ýÈ +€Ï&}>øí©Û¾Íé•àx¢Ä"@ vb=× ¨—¾ÂõjT—ÿ‡”Wý²¿² %€ÝžZ^Û(W׫죾:®À£CàAêîügáHxþh$ǰ6Y‡ LiLÃü8ý”biiT <Ç,"´ÀžÜ2Žù82(ЋŽà¾ßás…ÔBp_s>!üŸˆÂ—qYØS[STzi°*`ÖðAø!¶¥@­-ý—õ€L³p¸†ïO^ý)ÀææÂ_øn á˜)t—™OîÛÜü‡¨tMî€à4¸+1·ÉêV˜F\³‚yI€_ è…å? ˜fÎCÿST+mV®­³àžpyƒf”×Uò>úd•5~Ö«õPàFþú•‘뙈s` ì‹qLyPx„Âü<‹–Að©©Üª¾à¨ä“ÈH¸ÛMª5 Ǽ?%`‹Ñ üˆJn/€û×À|JÞ.ºá‚ÃåíY…sk´Ù |MsÇ}¨ðÚ Æ]nâFî♠οlïí õ¾ @&Ü­| +`,½˜ê;tûŸ"÷O·H~¾áæ$ä?’[š~ +À§à·°ðh <À…ï†qÿ¾é„Gl°ƒþ,0ôô§tƒÇ= çp.ê0¯Ö¶ÍÇ«45JšÞT•ÿÕ„’c:j¶€»²õAWâðrìIµ>måˆ~y¹¼<µT Y ¨À!°SÐùu¹A°ýûB´î‡|žD'èׯçn°`!–æ“߸âÜ’Acçob 6»ß7óÞµk>Xù CùóÞµÜ5e‚^. 0l*ü·Ú@£Óc£#ªÜóÅÿ¬ +Äâ~+øçc@þ@s®«O@Ƅסl^ÿ Ž__9<øC)9€«&À Ù¾µ¹Å^å>µ/AEûÃÃs¼†28€Y¤òç½Õ@Æ|Âû5XT")6¶LÀ0Yi€¿š•xþ½½‘ð8ž?iEáÓ',œº®Žq +8«ÍF<¿)†5å¢0ÀÆèE;jµãf‹-yž‡ß}}EÍv;Š[Ï^´âg[A~l4aýóÍÖÉÉ‹mìyl +P¸‘»r3|=kDÑ·A­é‹Â²Êú˜»±-òÌð +7Ùuiž ¼ªä||Ä’òU˜ä£šÏ6å Þ{åÁ,½wÖ_ëXÒþjÆÉ„C‚ ·c±žüaŽpáÀߎø)ðÍmìa½j7Ê€ÛîªóhIE àµñ€ܯ `˜LÈ—”P\Lº<ØOο³HÀÇ<»Ú ‡‡ûçÔøÁÖ΃-sä?`š°åˆ=,1‡Ákx +°¹9†Ïžûž¥ð&“Ê•‰`ÀE€ÔO-Üâ4K$]°÷‚|p¶D¶?¿²P*z ¥ù‰œŠÖGóì@¿R¹[ªÔÆJù±[lñ»À¡µJ+• Â/9~V¥t\YSÝ@v·ÏwKübÞcåš84jÝ~­­”J^{a[áR¥„Ó³Ý}_, ®Zžü ÎrWß¼–y3ò32£WhÝÈËãgW¯æ886w~ë*†4Ÿ¯&é;óûœ¸sþÿ þ”‹A@i?Ù<­a°´†€ïinrÀoÙfÀêðü «ù£^BðMÆ( _ ¢p_ЛÔ9é–ú»´×±Ÿ‹^í)ÎLrS`@°óà‡bMÀ#ˆóJ‚Œ×ÃÂÑr(¼°9Žÿè¼7æH)0ïµÇ}Cßp'éùg:€~ +à˜O%¦JØZ!²Ý‚‡…lBÏq¿Øðí|~Ò‡ÁÁZ­äqDÐ"6ÌW*+•ãøym-¨ý2ðkQëo5—ÿ.áøøî/`*+,0,?äPžlmVò”ÓÈ@¹B¥R¼[IšñöÅ„åíÏ"ÿÖèu¤ÇW$®Ú¢ž[ ›~ãš“€éùM3üü‚{òWoéO#8×fnÂà#uð­·FmñVO=…„,€ ýFÉg„‹èO¤­eÿù&ýµë­>8¨Y õ$u:4Cú•A. Øû–8b÷G"‰À§—öRžgQ 4IîtÆlBãßÚÚzð€°/ šÀN‡Äë¡áh9^GÀ&øŒþyïÙ¹mÃñþõ·|’Nê.دõu·” H²ÓnÇV¸)‚_"+ŒXÃ{ è?|Êú¨Áòð›àçi«Ý†á¯Û3?ŠKìŒ'Ö£èëvøáqˆœ çÀ¾êlò…­Šzó‰êêN4Ãfó”ƒùEѺ¾ šåƒ8(–˜õpúÓpáày«*"Ì_Á¿r<‡é&' «y^¿`5&ÙbHYÚyîùÔ»ø8‘Ë¿Oøá»ÉWXgÄù”ÂrÀŽÕzÀ_e bÁÂ!ƒB¦¾|˜¸3ûŸˆ3Z®ã[×øOû©*0C9Zº®ãdÜÉ^âÂ%@§¦;;v&ÃNˆôtˆ‡»÷9Ò`g{úv¯€€Ž[›TðèÑãÝG*à%è^††±r8¼Ž§›sP€‹&UT@caQ_ÀÞ…^Œ üÂ͑Ҩ0Ë}Mî€8€×ÑçYP±i.ŸËYU`(@.¿ìGa½ÕëayoB 檂?«q ®,4l®ÄÁ=–ð±å ›íjøSøy=·G2{Å ZÈZ­^ +’$^%G|6ù‹‹_a;N¾ºº„Õryµ°“bÖ:àNÆ•Õ *ò£š6ƒçöeÀ›|+ïaöbuSƒ†\@8($Z4Ìö,Ã#õ5ÿg8 ½¸ˆ/h x¼Ä0pze£” R€l;ŠÆ¼HÓËMû87ÀÁÑÞÜ&;Åå÷û €u ÎB@pŽUw¶öw· `[—.)‡ÄkqHäáÎCx“üïeçLHð³ ïù[ ¹À,û1õwÊô8טp ^õW஦ãKÚRýëzh©ªçm„E·ŸÀC8€õ øÀgý MÐ.E®|Ÿcíy&PFªëËyùõ7F®ä½ š¯,d ÿúBGï œ˜'¯H¶UŸ€ak{¡UÅ7ìª4 7Âz5\¯>iJ€p=•5]wu#^¨¨3ÞÕª …›x7_(‡ëk4†Ïž°Bc.  \b1{ý@jþ¦À’~ +‚/hè¬É¿—à…;vI²ÆÿWð`ïA`‰¤ÀøY–ÛMj‘ž8̉$€ƒ1áe=yìN*m5°_p>€<Òc@`S§v)‡Äk)èËøž÷žî>xyЀC·…üÀF"]ÊôñävLj(Â=Àø$€Q|°‡”µC:|2‡Þf‹¿p£ê³â, ‹ë +áÆ†žýkÜ_ðë'Üø$¨Æ°öAÙZ"U‚_ß ¨NØÚÎ6*6>ª ‡ `ÿ WËGÈÞŠ©K¬›ÀD?âˆå1¼FXÇÅé®@ûzê³AáÂýhÔ£RŒçóιë{…b¾à³¼›ð»á œ. 0b ³1•¨9¿Òq?¬`/¬pg ;Ò7pØTz°eðèñÑÖí FAÁ—Æky +0Ls1îþÖÆÁÿq˜Bü—äàG3¬ €ŒïEšð'!ù•À}:t·4X@`4Èä¿ + ðóÑ<­¼!ª‚cZcÿ`é0za´²qö +ÀœCÁ#ë°Ã:À«»[À‘£R%\ᓃA ûi=3'á:†oõŠpò©7LQ…'XÿÉzð}°«àl=ˆKk°Ü ÀêKž|\\ÈþM° úf͸€p S­Án°•Ïáø¬Ïñ>m È7h®åø™¡_'GK³.:¸³½@ý]½…/瘂Ú2ãRد‡Ÿø2p¸ßh(.òxvÎl1ö`C,9œÇƒFà À.ÞÖxs“=7]¯Å #ûœ3H +¦%ŠOƒ´ç7ÉÒÚô€Å9> Sœ•ý1|>PÖY©Ÿ©6KÉóoŽä98ûó¡"¦ä,(Á'HBVØp´÷ý¸6™þãPËÞä³Dµ,[‘ýª— 6 á Ñƒ“ŽPpv™ ê…)@¼À@¤jˆ€Œ€´Š…¼ävÉÆý1¨cpòß‹nÁS@ð»:öëVM2 ˆ ‘•É8xl}„‹øoä´À..Ëo)\S¾ÁÀ%—ô¤h¸“½,õ'ì™§C”‰`GKƒ;/Æ"kk2ÔÄ=(k5ìI8N 0 @`|ÜcwPÖ~°Å2+Üùt;›°õCO—k:ôZÊ6Ù%àÂÿÄ'¢%…/™úƆúÙ€·øÀÕ ÿ»0Ûßè/V5€ú€`E‘$Í]…4äÇúF³Z^ž*Lú¥ Z‰7Döj€ä3Þ[k‡Vé8Æ‘XÚæMIL%üòRž­÷roÐ[”_”ŽÉÛŒrô€ì…ÄôÜóÚ 0´*««í…XmÙ*Áù;ŽG媲wÒjXKÇ*Ã"ðzKžwüv±0¨Ö›Ð¶jýägÍ,\@$@(0ć5æ¨?ÂRþ”ûI! &&ó´ØWYS̹]¥'Ù.Á¨îd/Qÿ +_¾ Àpæ)€½Ò˜;ÌÄ—ÞH… ÑÇÛÛ™›Ù9„H(‰Øl<Øy̧| È*@8ãîÖ¥Š^± @˜`XÀK¿Ÿë/ÿ㡞ª> Èï^ýƒ´ç7ú;¤U;ɿĀGëþWš¬Ã£/÷îžvv²OHš*‹J̰’L~¹FQ«YÇ«ª÷üõ¨µÀ)Q 9kf¯I1ÑLž ZgåàÖŸûðÊ!û #UjOá!½nU˜ðjŽûNa}y¼{çQ´qôpCô7ò³5"ˆÛZyÖŠb\®€….Ê´D•p—ëüô]%+\¿Q&ŽáyÅ ¹1ŠNZñ“'­Ö‰ÃßàíÂA^LTU5`ëüeò¯Ü@"ËþñQTw€¤Ï8È€ôäv§ ÀôKƒüg €|É2’H àL?¹¨5,˜!’ßXîsp0\BƒceK–t­;¢ 㸆_Ô~Ý~R߈ë¤ô$\ !9®T<æ ¹Û†áq«DØú•ÕP8ƒ¨õ<~ŽCÆa!_X +–‚®΃û?];mÇQÜnµžá’ZíftüôiÜÂ×µèÃÚ1·µpà¨}ÍZÎDaoEð?ø"jEpÿ§íöw-H@. R˜°ô›”7@‚+Éw   &ÈPz—Ø€7‚Ë׿Rö¿L€Á×Ï\ª>ñ[V@eÌè€û öaö@ƒƒÊ°CGæhv¶v·œ ?½šè°`{ûáE“*>?´âOÚFÿÁNÚó}ï@?¸£wá3þÉÌ|¹Í`­$ÌFT÷ϰ°°P¼SäÚ-žû7ld ù•5ns=ãÝ*b/l,-ÔÖ*~Ã!Š?¼S|‡#íÜÁ1*wJ•»üQ±81Q-XânÀ‘u<2GZ`mâøàîÝL6랇 Õ*k•… *‡„§ÑÉqzÿ/ ¸ûAéní\ ®háƒJ”ðõÂÝJ‰²pw¡ôÎ +ö¹[Yá­Û/oM°Þ?ï+k+++îh  + Rß²öòùÌܧô·ŠÀfR áCL´YlçT~Èz§ @QÁíò°¸ee€ç•œ#â?f®€ã¾{M»¸5$íA{9ž"´CÀ2˨ÎÍÌñ$ÅÍÅÆÖƒ]à-0ü[œ¯ç)ÀËdß,ÄðóCå +d ÖöêØn1B1QîHî# Àç­‡®0iµ¾N^§§§­0j²*ßmz>_8n·_¼hÿö»ø4¸åù2Æñ)‡Ø‰ãÖß×âÓï~×úï¿ £§íö׬ \ÃWO‘LÂ;·~„Û`ò'Šaô<<æÀ”ØÅÀ¼¶v£qGœ ÷¾ ^O€#óy8ø\9 þ] ×kP˜ó+}iÑB`Ø2€C +€Õ¸bÇE@dfd£Ó 7 åõêºw}„Oë¯ä9²ÆO›'ó_ÿ©5ÁÎsY©|V‘´¿¨ Ÿœ£«ŽK} +Ù?xy•=Ï –øµ!?ÂBÀ+ù¥Ö|¥áH½ڇï+­<9 Ϻ€V¨ê‘ºÆÁüj¼ÀaËø¤µB.Ÿ8]ø¨ôßÁú*x.þÛƒˆry™üÏ—!õŸBþë·ÿä˜ïà"C,M8 BÈÛ[5§&jŒ´Ÿ}ƒc¢ëO³úµmC°v€Æ…‹‘ÀóK:TÇì—ÎП÷ +â;‘áŠöÙ-¸ë™j»±-ÐSñŒØÚÚ䘠И GÊ!!˜›i<¶3ÉK0lÀ… ß1 r‚_ñKgÌ€ÿ½/wø.P <=€)þ†{±Î»é)üÁ–vù%&©ý³æ·Í`ÌSŸàK¬Ää2ŒKa‹Ìq2Ïñ 8D¤J€â¿·4Æ5«ípÈJË ?.ÖŠ_0u~)ˆW¢6Ï ¸‘Ÿ`›;>5 ’ õãù¸¦~NÖüµ0ø+ö…ÏZ•ZéW|ŠY­³+#ü€·kfÁù÷W¯7ÿæ¯ÿæÛŸI1R¸€ppü',9IAfõa:˜DHh˜Qÿs\ë8óË)€E¶½T@·Am +@bù;Àq_/^?»ã7ü)ˆˆŒP GEÎdzd@ ` \ÀÎÇT•°“ ÝÝÍò,îíH9$¶q…ûsÓŸkøSxÑ ç†ÿ`eCœaøÞRF UÒ£¿î—;zäTp”>V«ê¥çc ìÝÀ¹®¼1r}© zžüìg/êфϊ@HËáñaàóKµ0¨¨ò¥üJ±@J\7 ÿ½©QŸôÔ€•bþ v7|%ßúÛZ©M@ÐààDQ)üˆ'•Pc ôÇõÕ;z†p*À.ïÇAë ßÿãÚ)N¬×›MÜý:»2‡àŠ'éüŸ0kòWß4ÿê·,ÈÀÂ!… ¶qZÔÈlòš¦_ +–0ÿ?ÊšÿÆx9|OêóE0€3e +ç—ç¿ØYç•(q? 1ß*ˆ YþËàâvq€¡ÞÊXld © fZ€…€³¤‚ÀÀ£=Ìêí’¬ 4ìÛ7,œ ÒØä3ŠnþãË×äøÀà°KÜæû¾²ŸìÐíÀùèà=@¸³àà Á1‹5b)Ûèñ:Ÿ¹W«åu²ÀŸBNýÊÕ+#7<ŽÜñWýÓfõ Y€’¶³f RÒ’±õãš3Ñ”2„I ˜´ÎÅÝçª xÅ»uÜ>)rï4¹> c{˜ú€Úæ–™ÍPïä®j¢ÖJOõ(€BµÞÄíÖÿ©Ôþ®UûŽÕ`þ›Ê2à‚ñâPfœUéš/XÝ  £j’ŠC“)Ì.ý'XC:/,ÅW›!s¬L¨“ñu8Ù:…€Hò8[p^&@l“ÕôÅë穌¼C¼ëõ!GG‰ØÞÁ9p˜aÂ$°õ`k÷2 uÃOŽ”CÂàöL£±úïwiþ2ÇÔóàþíóÀ§8ppt9`êÀ(!\ªº/8‚ÜÇNsx³€ÚûâæÐøþòdny€7rì¹àEóEO„Lg—ýy{éUýõÝà#V e"îòþYº ÀÆø£>+üØg6¾r}4W†_9å/x¬pt?‹°u7â@¦Çg^¸2;g¤‘H§ ¥( +×ÀL }ã·•vÜ +ÃS@ÿ‚àɆ²¼<€ý0ŸS­7ÿúÛ¿~ºÌ¿ƒ ˆ0uÌ*{ÇF¯Z @‡þ\íA|~¸Íº€n_¹ä_àñ^ƒP@§ à“ ž ³Ôdèo…€¼¸«ˆ^=Tïûf¢¯˜ë°Gÿ€=¥MÚã`qfš8€Áü!¤#.³­M>öí˜=$$÷§§ç9|'K(ö·3 +0\ÀåçÏnÞþ‡pÁMè= S‡Ä0 Ÿ5‹¸úî 'Lì×pås#LƒÀ +crÈ@òS¾¿^­ÿögˆ±ÀŠÚVW}ñ¿úb¥D%9H + üX :’NA>(ÍGŸ}µÈ +™t´>`=§+ÑzLH +ƒ—aÀò·¥¯×*QT©À,@ÖõÓÿã¤þ"¬² oî ]ÐK (¼›jý§ÍovÂúN¸€pP0©clé‹€aø0igQŸã?2ê„ÖÀ4“rrØ-€†}Çè/£Ž÷Nd— ȈéBŸš€V\öi b=⣃ €ÆÅ7€Ô< €s‰Ø¥íîn5¬pØ÷¥à²·gff;ŸòŠvyÒíC:ÇòsЩ8p¿,ð5‘Ý +ÈnèËT%;€G)󓉥‰8¤0ÐÝ(¬FÌ û@.7rÝ#ÙëÍ'AyŒýë§…íªr ÞƒøüheN4ÇQ¶®}·°:Z kï„¿XS)À7rW +##…e +@Ì6ƒçÀÈÞí»Q•€…Šy ZŒK%Éõ;èØ†IR¼ÐŠk¥ãyVûÓ[j=‹¢o£µßF ¿vêasã™,« €U ªáÆO›/êÑ×;‘ƒ ˆqL¶0úêUþ¬ D|¥÷ª @X2À™~((„ÀO çKƒ„뻞œçÎQ¢[\¹e®N÷õœg ˆH ûiüS€»÷§%4 ßÙôHÔßd¯ HÖY¿ðRèY›Y„àÿÉòŸ9ÇàW¤O £ðG|ž m+ +Ç^¸h1j…€ØO£ƒÈ{;GG‰é™”€ØS€EäÿUÐ%È÷ò˜à +ûÚ»á­"}®7›ÈG••Ò"«ÍÁ<@VŸ€À (f î­7 ÀôÔóF½{aíÎݵ°T +üë#¹Â#ùür‡•¶¥¿1Ø|´â&Sm +€*³ë‚4íOžKDÑ‘ǩݩÔŠ¯¡ ¿[;>E⛨òÚ0ªÌÑ´°mQ®à³Œ£5ÿëI5jÙÉ„ƒÂ@`ZîØ+€¨€°B@‚QŸù$öiù¯j@g@#Ü醇ã<4À^Ì É\€ýʹ™IDÂ}½xW–˜^$u.Ϊ2¥ÿ‰l³B<¾40›:x}ÖüàÀ6ÀÖNñõ{s#ûŸ.NÏ@æxCøcvñ·¥Ê46/œ@CþTÂ.Àؤi`˜+Z\s±» rŸÚ?œ € €ž ht À:£=yÀ§0oä¼òOi®ŸÂ;­v?nZ•VŽ´" +’{ÎÈ}N`&ØT¢¼Ñw½ÊÓpáî‡í¨îç¯ÜÌä98xVNC×ÍÆ‘}œVZõú““VÀz²&¸²ãTŽ‘ÊJøE1 +kO?z§¶b$ù߯ ß°á›hí;6eÄ +teö ¦ÂXëq£^ožüÚn¬ ‡ +…Šë>0Γ$NHwóœ9• fʲ EQ@_JûÁyå^Öˆþƒ@’RÒê/‚TAÐV ÀÌ, ø ÀâæÖš~V|ıå6·ØÈwh8j>ØÿôþÌôÌíÛNÜM;ìA~.œ¶/œ6U’8µ{08ê; PHö@ß¹XAÈàýHŸ¼éìÎÂ@ËÏqÊÅûd¶Û Ò«#,:ÒŸO˜C?¡¢1p™°¤NuðjWÂ= Ô%¸Ynv` + ö‚—pËK^%|^YðÃ8(äù` UNõ ;÷ÎØåöÝ–êût*d×~Ò09fxüÃ8ð+¿øºr·µ[íÓöV‹M +ÛqðÒI$`CÀ€‚Ê|\Ð<õ ãÅ.¸€p`aŒ1Õ€`zäSf4HçIwñK ßDêøJ@ÐîtCC„7¸\4àü2€A þcÖ§ €w•À.Òê‹a‘>ãLè :eü·à442È£ÔlR@1d†~9jX \ÆâÌÌÜôí¹M–;²h´K²Mz^~:õ_X7q}òË£ *ÀŸòÆ»0t½a©·;@/|Ä_·*?¼{ü›Ól¿(6Åûf¼ökSª|š~ýöFžµ”Xþ1’×HƒàÏ c +†©`úN(Lä2ä·€Šû! LçÇÔ1°ËˆþÌœ)Ðñwº!áb"`ÞŸ0ÀÐe8‰èпÛl±¸ŽÅfçNJéóS`7ßÜh8Ü¿?=3;=3³ úóySþÝGù4PüßÁºœ!á¨=T¸ß˜™C.€WÅ»Îâu5¢°¿âèË/wXæ!Üw¡-ô—}F‰ ÿÍñ0S°øXtÏ‚¡Ž`7!÷ïCuX² MU¸ò8bw;>ɸråü2³ûUdž£x"@BN@þC)ÂÖJpa­ŠoÙ„P„ƒDl(À~6ã7paX{§=Cz‹ÜUläÆr9jUZÏpZ³ }áHw7n¾‘+°Á"¹ +³2"ÒRð!ïûÌ×Ë‚<-µ¢ÊD壈ý”×ãR\Çq«åòqøB¬fí$º§q†Üœ)Qû2…‚ATí¤âÓH•Ê« Éÿã3E‚åð2 [p¿L¸©ÔîlC‚„wf 9µÂ9 .ó ‹ÿ¸~^Û5– ïø2àu;씪€,À!é‡LÀ ¸O€ø˜`Ÿ:€S" ð =ÿ0/wëÃM, Àš@úÿï=dÜž¯ˆŽøüË£mG€qI¯anQ‚qÃöé8€àfÄÝ8„ê“ÿ– Ó!ðœÿÊÞ0é!{Ía¿=#Hùr¹Bð·1¾ ±SXd†ÞØ”¶ý⯛Ívx·rÀŸ¸Õd· q+Æëô¢„ÇP +K‡}¸óŽyˆ0j…ùÜ•ë°ù¨lxKíŠ=0ö¿†”Þù†Fô¹ŽuëÆ´-ðÉ r,^aT†°0’$&T, i€0aÍ+¼­Ÿæn°£"õ…*€sà… ÏúAH`á ãÈW{AÈö¬€ °©0ëúñ3 Xš¨þ“þŠ!‹C   7ÃùR`£÷ßMŸZE€‹Ê-®÷ÀˆÄ´PRËÊ3eöw©(çÀ˜Î˜ï2D ’âð¨ÿ?;3KÈ{öÂ2œŸ7ÛÙk¸èe÷?$ìJÌÌö8*€Ú\w°ó€P0ptôåçû mKåX”Hv3ðÞ,YϙدÇú ðwù¹–Ð,Î5FŠ Å…wì ÌïÜùÁ‰1w:vÛ1?¿p‡{ŒæGÕ'ˆíU|§ˆï‹¥Òlz§8¿P*­à ïàPXç4?_òJc£…âüìàƒ‡q7võÖØü;8ö‚§ïëÚ €ê×8À_îìpôK ‰Vß¼Ê~)ø#IùÖN¤¬íé°§Û’,;À4ðU-3¹o0ÄÕ Ì¨¼¯“þËøØÊ‚Ø=˜ XŸ8~2ÐÇNP»³ ‡”÷Y`ÛK:Cê:ä²»âµé)À@‰½Š%,iç7ÜH°ÈÁ3§g襰CZfX«>üëR0 ྠ{wß»µóàv +â?îÿð°Á±„ôšµÀ6XXö‚‘Ñ‚ñ„PŸ€°ªÈÉ­ˆó]8ÿXå +X¼Ïb€l—`aôœ}v¥ü“Ã7óaü˨…”úo£ TZ]~?¨øL³ÿ6ÀÞÈZ·ž¶âÚG§° 4Çìˆã)œ~øüT=†ý +`²øÑ“¿z·žd×BX©…Áqÿªuúüy÷1î‹“n,ht¼ëù·'§Æ …[ùü6¼w ÿ‰øÕ…›…›6 z&é˜nŽs¯›Œû*¡/L° {ŽÂù°‡óåÞÎg¦›.  Žÿä.¯3@£ƒðÅԟŃ,/H€û­L”@¬w@Ÿwº¡ (–Zd\EÀ ˧]> ðÝÊ:ô·,T `xª¶û–Ö÷‡ ÷˪)9)Àá³Ó3³Nx¼ûØzÂ)é.W@7>, 0H”³s,  `ªGìA!÷w±á‚i›½û£?þ†ý½ƒÃm0ß^søš·ú€Ñß'P—`.ñÏB<ïÅ—;€ŽXlŒ¸vºÍñ9º¯÷.sÕ@®Pòýhm¡ÅŽBe©—YhãY&Ÿ½ða+Š~[¿ÂÚ‡®äyGëÜ£Z OšÅò’õ%Äî>[p4ß¼_Šü{öƒÁÀ9Ô¿Y@îâ†ê,º"Àë,׸þ…Âø¤ïå¸KY”—»îJô°Cá-­ Ì=`®€t¥<âÔXÁË#7ñvgêÉ ˜ +€• +pÚUH<¶Óâcã e`:뀰eðÛªM€;ÙPp±9›0\àvï÷€-’1›¯ ý- Ð[@ 8ÔçR øìï% ³*„ß\t@5>¦ÿ—mß{I )Úž›™›ža›`–JðžÌí|j?w:_å‚t»Ût6ôRÀ¢²Ì¨@ò ÀÀ îÅ—Gû&¬z€}ÌøÖZ_Õå‘°.{¥hze䘾–ÏC¼Â»…Io¹°!@9þ0X…`TãZøëú“ä±AY಼ê—׫1óÚ~¹º®gó¬að†²ØžÇÖiͽþàõôŤ©€ @ފ¸tq6!çA¸™.@ߨcÒ­f1šÏ¿u]xøÁ»ùÂû…‰B~¢3ø] +r•žŸà9€4ùO @õEwWІ®§‰àçËó_)¾&V`ïܱIÂíþ€ì'ÒÄ0•Ý’*ü ª``WÇíKA€ØŸ}6fJé‰H|HvIYè0! e¸ô +ÀÑûÊ4€ÿ§8€Æ0¿‡û=ÆÃT˜ByŒþVHè%^b|/¾Üß–ð)ØÏ½#ÁÚÚš{H‘E¯÷Ù€€x^­2CÞ-Àx/ûVÕ†Ï@èjXm‡¿m6[aX!XrÀæµ~½:ÀKãWªóÇfF8ìÈÈ» +Ö\ý¡ Ûï)ò*,LÝLJàôÇ1©äoÙe>.Ä&SɺÇã‰&L¸¥€ãA¢¸Ñ›p +g`L ·†”]}çH$Ìôqiƒ @Ž€«—UKöÍôÛÜŠ1¿Ð ,È<Hù¿%sÓS@ÑßÝê OO°â€@8:܆LÏv@>û8q—nà{)Pó±<×¥{v€¸µó ß]þ4<,‰OÁ NaÁÙF±,ÿ$ 5¢y7>‡؆êb…m@~œ øññ Æý,'MsæR—":f–ýÕ2ûÐg XÁzð×õºk€ @¥|O¤–” ‰ÏSSËÌå2ŽüÙMPì¤ÍáFä=‹% þ=b–»Nã/E ¤û˜<lcrjJbá¿…Ÿ„^^Â`¸•§\¤êÀgÌ éŠÅ%·S + ‡Dêì)™B5 ë©, Ä>Zn ᩤ|¦ Àø PDÎXh€¬Àùepç<ä.¶ž(olzúOJ@¦šèAp¸¸Ÿ:¾ù€`{çÀ¹€T=²*†+¸,©/‡dïÑþ" ÌX]@ÃþÎì¹Å¤ ö?I†û<9À8êÖ +Í3p €«ˆ'ê\ÏÿU Nâ^˜Àâèè1&¼G@TY¼éÇíÁ8hJŸ(r00/*ï{…qÕ T;¸Î¾ô"ˆ@…¿ûëfÝjôÜ«pf•‚V` +É9X­n¨9ðÈH!,EªfO0%8óbãâÁ(C›`¦¯WB®¢¼.Lz~>œšò Ò¿Š·‘‹ G…€ý ] $Þ+Ì«0 C +@ÔuZ0BúÓ¤b?æ :}t€Êþlnã0 AÁñøº´¸²¿¤2€s/éDÿ>@7ÖÏð=I®Â€Ä¹‘l`߀GÛ¬dõ$û8îljÿøÌª=º™ï €ÆŒNMm2ø9oV½•]ÞÑp8`Ë|„tž=` S°Ê@V"8+ÂwãË/¿<”øò?ÉXs ÑŸ]ë»Á†)€Œº•…Ï{ÁñB|dŠ»´ÌŠÀÖ@ˆ8ѳƒoášüµÀr‰ýX`R–ÓB¹på +|¥àÏã¼t0Ö™Ùèöß?Qö|é?SoqØ0 º#á‡_)S°Â×”·¼Š»Xö¼ÕõâDoÊNC!ü;*îœê” +gr! d*Xo¹y† ²ó™ W™#ÁÍèëŒh!‹÷K— ’:ÿ,¨–Ì ²¸àû™2»³´ iu‡þ–âŸËèH{>T# f`¾÷à°¿<Ü‘èÔxôøÑã}V°ºýìà2Xt·?¶ø_¨©<ˆž ª²Ã.Ç0¼ÿ!×Ãd8Ã:‚ó Ä~M¶“s.õ7À,ý§#¾ Ø€,uáËÏ:Æc4iËþZÙÿ1GøÆg°Š0 P +"¯Å­–ø±µ`ÍAuÙ÷â8ú®ùÓNÝ[³«~9bea,òW ,¹‘¼7ÏB@U݇ +ô{QHHô>H¶G%*' ò4X(±T&B®€ÿÀò²Æ*^–‘s +…bqòçï½e[—Ƚ],ƒRц6ËÀþ˜ª&I¶•p"å»T€ØÌ²>Þ@Ì7 _Yðº£R .§.*4ý°»©xI ¾§ ¡¿«Ðç)Àî9 ëY£øðY +ÀÑ qà;€ýkËÎÖ¥ +Á wóÃÀ²G›3s3àÖùJ31€Õ.‚nt@ø2N!Rú?D¼H'Û ) +S|ñ¾ƒé/?ÿҌԀí}æ>ßwç››)EL¾Yx‡dÛû3¿ã<=(µÌ€SËËÊ*TÙ +h£J xýÓOëêWÓòù“{2›ˆ&ü©‚Wæwìu¯|cä õ5äknìK:ûRa–ýåòjyÝ÷§®ó!?ý>€+Þ-âãÒòj8QÅ’ÄrP^– +„¥âšWœš,¼ëM ’ÿå%•+NT8h@9Œ*,ÃRv²pH0UUÏÀG Ù|HúU€/© ©ÐJ^ +\´”PP»³] gû{]€:E|Î8Fo9€lÀþ‘‹Åþv±É NRÖp€¸œ™è¯YÈï3€ussˆž`Ùt6 €Ã~ õظÃÔ¸Œ°Wp`Ó®/ßð=9€l)€8í à<Eˆ$Y LŒŽÎ..¾7;­¬¿fÏðÿs8ËÐÐeá573"Æ:€ÂÌ0YŹL|?<^@é*Í4<€=i¹Þ:â蟞<©k<ÞôIËû…e?ó—§–˜þÓ”Ëyø+#HUôþ‡ º² ½¯ ²\î;­R…àEðÃU/Ç‚Š“ã? +,ù«° ¼ZùñÊ•s(—ýÐS½æw‹Þûïë+z¥Â‘ä®ðXÑŠâØÂMK% ‡D\ÐȰP˨S€D§€H!œÀ¯¨z±$Al‡ÂÜ‚ÚNuñ¤xì¸&#ŸçöæfæöúÑy +ÐQÞî¨×Ø4æö?%ñu-ÜÊ2€Ä‰üŸýå +‘À‹m¶v†w##ªër `uÿOYhvÚªî?H-ÀpeÌâ\4{,€pä'Ô)Áz¡ä!€90žÆŸ“¬Àô´c}ÌnïIpÀ“ñá#€Uêõˆmì7Bß#Mù|ÍŸDí§A»‡lm¿ñ¼~=Ž_œ<‹â¨urò,þ݇ǧ§ßžž´N7ZÑF܌ڭ|s´Î°G·( ÍzóY•†…ãÂ]uÁþ˜ "*³ïÀØ4øu$À­1í·Ôžy×€?ÂY,LßÝ1 hžê·xº+ߟ•‚OøLà°sଈþg€ÝQÏS€Ä ²I€4À€-&Ü9–Áÿo·o›`€EÊHv¶¶8l(D ûm¯®­¸,8ÝÂ0ØÝ?BªL`Àþ#äK¨Ë´rxsŸœÿƼS`ÜÔ)xgÀèÂÂIHÀ{ÊX.€sÇú²à3œëGœà*°¹QšŸŸH`‚Nýù䕊Evì¡:À•ZÔø›Ú(_ 1«•ÖÖ*kµÊÝJe ³•ReůM¨:¯ÇR=pº¤:†:ò­R¥Vú FÊÞ*ý^w) &]ìJ ‰5Ž?? –B0ÿ®Wòæqàr0QóJ+˜T¿ðJ·JEìã‹¥J±ÌC‚Àz áÖ-äLæ½ühîj®0;¯,àLk]°ËO`a@»$/?¹j<,ÀDh®mY€80²c‡$À¢u +ãø¹oP½Ëøwç.(pÀb{@x+è("™*áÌi=€.tþt:8ÂöÃÃT ? þ!‡ —@öȸ,€àã}Õ’°ôÞj<è™ìÅíî;^U" L¸à‹'^.ˆís°‡T¿“®@_Îw½ô–±mR˜žûÖ±_@Žÿ ¾’we)•°Öcü2 ¢cådªëåñyŸwú-#ë ˆ³HÃË­ˆ¿Äæ‰*'Kš-~¯èòÿbúŸ.p| +(à, 8€Ž`˜ó`šï€óꎋ¥F F΄De>}¼¯§ö`kks‘\ï™ìÕ™ôoX€Uz[Üùù…±¿{ô™UÔS€£½Ù™Xòà…iŸ `âvÞÛàʲÀqŸÓÀÄ"³ÛÓ‹ï-Z`dÑï!@êö­ú1€¿ê¦{H¢i“ +Óé+4ê¬ú¥V5à°™tÚ¬¤jýȉ#»Uâ“z=‡“ÌS}kåƒßnÜ9–¼rÄ_Ä,¨º5pä ^Yû΄3a1ÆoÐa¬kÜBfhþÙÃfq±­Λ(õ“¦òùïs4‹¥˜+%8X¼ìçž—Œ ¤D÷–]þÿ  Ó-çoR • Êì)@$e‰¸ˆ¦,€Ê¬0—ìg¦Ä¸o¥ÇayyÊ+·Á>°ç¤^M²“ —_áÀ}Ø»Œ w¿÷@àË2d>*ò㸮2*€Â,©ß_]¥”£b3¬–«õ!Kòª­ú eAüˆ›ùþÊûËÞ¹Ï_Šÿ¾75~#wƒÝ †•8‚nØåÿ =S ¸C:€~ +i €u½\DK²tYÐ×°'W +hÂÆñ HxYFp°Ï4QlßÙüÀ"€M8€þSfUáè¯×På,§<ÚÃùÁ¨Õ§ûs3 êÀš€î/8ºÑ ÞDRÐqÊAÚ4Ȥ >»è†c}=@H!þ¯«ž§:û| ¸äÇAéYP¦€|§ª€Õªj÷µ×Âfý¤®s˜€]ƒjÀ`t‹& SÞzÔë³QýÉ —GöWÁÁ–ùµ5¿ÿÆ¡ÿÀ«] +ƒññ<‡-×@°Wé»*!âøÅ8 Ö«ÍfŒ«mžlT›Ú΄ÝÂRÅ®"@ þPƒ% €ÞDzÝP0¼2(Ý¦ß +f%ÁîEh?ý`(8¢§é>Íú€ÜQ€i´‹É)˜úq·n/D²÷2OT –ìg&sb΋³Sp8.Î*€%ûÈÛYðéãÇv?fæßðdîP=3uVõ_ŽþúÉP +°·»ÿˆÅss3êühwnúaú‡Ì U€ß|Ò—öÉ;…ž%í üg! }°=¨ÓÓ‹Öµ+jæúí³ +u™z•ˆñ°ÏL{}yê:Îö†*EÁ| ΰ¢Œ€9õþMÐ.HY«õ*Gê#ññ^åŒaÕ¯ßZgåûòF“Ïß»^æFY€JX*ÅÁêª+žï÷¦Îô…jÜkƒja||jjŠ5vKïß#k—èQTWaƒÍ•ê8q.ÅÆ Ë^òaXƒ¤€eý§t…ÿ•ƒÑ_ +€¿Ãßgâ?²ÿÙÑ®²s;Ÿ1 pYÞ8=Ðæpà8Î&?}ß=õRàBÜ! öJ DxD ×3·ÇnOßVåNìsò¶£}ЬHê°& ™äPñW4z°”:o9V|>NXBúj$TÍ¿ÖJ­6]7ÜLÎÁp— +”WƒY€)Ï«VºA‘(——\À•ò+k!5£ ¥ Zœy—×ú²ZŽ‹tã…I+ž€`èâÁSVB®Æpël·ñÙ(#3P­KXTÿ8*ÕøÁÀ'‡ª04åMݼq…¥«Í•J7“…]~ U3eü 6+ûuaŒüÇ\ô»Íöð“tâáh¨„²Â>åù —¨Þh@ºå“0¨ €‘ÓÅä@yWàøŸt׸°³³Í"sN@ÐÏ)$ÿcû.Çÿäßù˜ã‚T‡”ì‰þ4ñzññƒMõ€!€«øf¢ÿYÖp¤À†®âÐÖfÀõ³Ëº€ »­jbäÐË èÇ``â¢ÈÅgɘn9ÞwpÔq®À™š€H‹U„Ûî©gLsUZl1PS–Œ©t,ˆîÖâ Øûj•D1Åiså0¾Ël \ÝØ¨’˜K̰ŽaÑóãJ$ìÐð,t¤¾PDX «ãù›SòŸ + c1wÀSEOŠQDþWqUœMòÓrø­’ +)|'y*\òª”€¥›£#Ì­J-bE") .Õí£439a@ˆã®±æFUa™8þĪaJž +:YѪ€§J^¶~vnDï-pþ@‚.&' 7RÀOxéÆ9€~Ov-ŽwáÀõ"Ø–Àªø…åÌìϾG [˜Àq?ff`ìÇÛñ½g‚Њþ‹â¼Ó€-}XÔÅÛœ]ê2öKf瘒ºÛ€$ß=R”ĸ~g—n¥· @!ÞÆ-ÝW ŒœqÍmQRã¢ê˜rB„r¼OuVÀÊŒO¢ò¾žºîºbUãJ‘=©-ÚUl +‘ƒ 1Òömu|E,dùxxË«/ûåeú…õulñ˜µè°g¨<Ãå¡r@ÜÌç Þ$øO¢e@ +À+¹ƒì ó:÷Oà~Âr  Éè®K¥5„­½üõŸRømfz®Ï.¿GUyx‚2Âçþ¢G +ŒvQ%@Và6sü å›a§ŠÁ ypJ‡SX›úw¨nëgæ$¹À‡ä|¢.3€$?€sÊ9]TÎÂÊR¶ðίЪùkW×å°œ34þ쌽¥yˆC’ØwMšñb:0òP†dU÷2øO>=dc€Ž˜i˜€6†ª Èß%É|’Þw-õ Y ”Îѽø {ü½Œ\ç +©ï> Üù CÁª‘Ñ\2~éCïƒÀ£Ž°zx÷8ÑAɨǾöÌa©ø` +ÀAt,9Å;®„Q!hדáA d‚;^yI‚€ƒÌ$u ¯BZž—ÖTÆv¯2hÒa™|®Â‰ \õ*³ø'½CÿNHú¯ãÔl©¤<¼î6§UªDN láq3;aà£ï–ü0Z¨ØÀ‡Øå§@(gñÛ`[€¬pEá«¢@g¦o±Ÿì(0¦<•ÞZí?ÑAyÇvóþÉ­€eC:€3pö)€ØOýâÉÈ&ÿœÎ€ØÏTž}çò +°M˜¡` @Àd +€·øO €Soß»jý¹-Ýé¿ywê.T +€sŸêBØ.ؾÛ^2$ˆž2£|/,ì“8`åŒp°_ŒýúàxŸ ë¬Þ=Àz +¯žË›°K°"à]:äÍÁ$äúá¯Ãv‰ul‚ˆ¶€úªIš^† hú·J>ú2;„lüXÍŒ˜¹¸2éûÏJ¾žÑk÷¾8:p¢³Ä Ç¿ðÇKËÕUvV„«Ãœú÷Q¹£! +~‚tŸmq=l@äÐZøp.ÿ@µnAø˜Ç/…æ:PÌÊÀÖ9…”Ê8eÁÏØÁØ঎0ú;ÝçQºÙ­x`gtëgæb:A¶'o³Zɇ,ègú—X€€Ív.‚€€`À¹ŽË;7»:Rš9€Ý)*”`]`¤æät÷ólö_áùEZ@ènÂ@#u‹3‹îÏØuàÿuÑÌÆ™ÀR ¤ûÙ%_BÆ ¨7’) }’ÜâSF/7cÒðãmm…œ ½Å€ÖøÑlVÁ-¾KFFÞ,x%ð³ú%ð +P„*eC‚R‡'ö ¬Î„WEð. VE¡[ïW'‘@s6²«ÐÿÊÈ·^ Út 8À½F_pXÒ K_øã×ó„‰%ÿßÏVË?.³+‘×éJu5Ì”øëüI~%h•–nÕAífuò¹Üu(]ðõ + ŠY(&ì&²,ˆ…¸Æ€$ +à —Ùïu° T„§E͵Ê38šó͹­÷ÎIrPž¾_Ì'Œû˜sLÖœ€ {"äÒÖ€ÔŸÓ¨F÷‰À':€í´“@ * ŠÀ© ÀarÞ™ÕÞô?“ÀJꀟã¨Ü¿{‰[„8Úß)ápv;`woqÆ.ä|@X Ÿ¸Ì>]&q£À( ÖÛ»“8`TÀ[+œ% èÂXÔD€3G|‡ÀЬe&ÆpfËýeÕ´2é9%dy^iÕG´šlÿFwŸrl/þ(&ý™8;`ÅŠÊpû/çz ãLLÕxý<}§?€4õïïTèqÛ Ö +×”=àD®³)Àî£]ZA}€Èà'yíÞ\úº¡í–_X”sHc‹òš¥“Àþcx þ‰ƒ´ €ß.ÎüÜ®î‚ Ùu«¶r.;È–(R˜æ3ubânÄ"…±]óTÄÆ"Qƈ/`Õ1ßuÙz.S-0%£_7‘„zì#w“Ì Kó-6ä‚(|‡õ“g 4ŒêÑF×D®(~Sš'±† æ6P¨CM–Ë,)äø¡ëìÇÿ +Ó×jD%Ž)xšqÿ gÚ`‹ JËÏß„2ÕMêÍh·ð!O½|SüMÄî ê¸:]ä‡÷ ¸¸ \{婺4 C|¡k £vwAð +7 Â0.•Za­V 2“E­ +†NÒØO!…asà,X.¨e@ƒ„§Cƒ1 1é ;€‹ÊFsGu·Þ;7÷ŸØQß=P@€áËÎ*ËD~eÄí¦€N=W +x’¶Jôurð€å›æ6SÀFÿrb~RÀ²þàeô"–dÀÜ⃟ë9ÃÏ»—8áþ!ëØ9x¼ÿ)€Ëúì ²Õ›Ëé?%èf¼Câ€Ä œí)“†$ä öŠTö’`– +>f~ ¤2à¸oÈ8€´ÀfG¿×¾n·¢Zµã(òòcƒÍëŽk€$•¬~µN¿}Á¡@£èéiëøëoÛí¿kµ£_·Û'ñ‹(ŽžÆñ‹Ö‹v»]ªEìr›Øì¾Öyï*¡ÔÎo E8F߉'ÿe|ú·•vÀ«GR®:7·¢¯"“#˜žž.D­è©ÄòM\8Ð>Åã°R«= íä•J-¬µ¾Ž¾ŽsÊrÉå‚Ͻ¢ÚñÓð¸krqËAá`6BÁ­)  )I&öÆ< áÛxS$ü‘…=@rŒäPÎàhžPÝÖ»ç™2@‘>mpYpFð€¯]ÝÐÝÈÒ€ÈN‡™"ÆŒ€àS€Æt›0!wOˆ­ÝE¼Y,€—ôdJWôô\O$`³«`‘ +@ùå6øÍNKÍ+­-@æ).p˜2€ÝÝ»[[qÒR꜕4ô/ÂIf_q "yñ“"# +ãMò@óDõ…¬HêÐÌ/¤Ó;ókw*%o¡ä±G€«¹«#¹‰[wî‹w8»åF-–Š•;ÁZ©4ÏQB8$h©TZ+~Pº[â [Šó¥…ù’_YñŠÅ~6_*οƒŸþ ˜¹–ËåoÍë·<-4jÍßgZ)©ý>~\ÍåÇŠc%œ€ƒ‘â'8*Ç$…qÇuáÅ3”ŠïÌW~pw;qÛÂ|‘‰ šÇîX.à–p×óó¼Í±²¬À~â¼ÂÌm¤£'8è-žžcf,O4€p@ +€8| Ð%HaûáöÇÛÛº9Ý`t‘ eq]Æìî|Ö3YK`öÿñóŽ °ømÌ0€D˜ Þ›`}«A ç~Fìô…k8 }ç?Ú'àêL÷ ÇÕ=:ÚåƒF(Äá! Ýc@¸ž½Å™ä‚.ú$ÛŸ¢³jkI@alÁ¯8Ä·Ë º¤~÷䢞bcaìÏh@V²ÀÕ@6<™¾ŠÛ€o٣߆¿Ä‘6 ì3£…/}Ï—DÏÚ¿¡´i¤£_ÅñW‰|ñw_ 5Üü ›š€o%UýYëÙ³_CØnoj9d~¡õͯM¾01[ßáG*Ûü›¹ëù‚Ï—¾ò‘ ­|/`ãõXÌV|þÇ1Œ‚¨XCþ†÷Øqªß@•ŽY¯eË^áæõ‚{\€s ÷”br‘+BèrW;ôHÀR?«­5v›ƒƒK :€OT‘“Ÿt®1°-™×éΙ‹úxñb¾„ £ÃöÆSFûî³_ pêM»A×ÏÑô4 ¶¢>ò é´{Ð +ŽïŽ  ï‘€ô8¦Ø[i!@ê-.²l¶ºn9€ÿi€˜÷:‰]EÀÝϱÒåÐÿˆmà¶øŒY€¬À ž($I>wœ(›¤ùBÀ8Ï¿o¤´IdbôBèžå¿"ÑŒó;«ŽüÂQǸzj àR"nÁüӷΦú:€æ¯èB&Â_E_tÀJÖ#Ãq”\iÁ 9f"ybýE|YçÿñÅ%@—l“/, ßiì4¶¶¸ ‚w‡»ÿ§gÁW+'HÞ;Žö˜È +À'!®:€ù¿º>ØL¬¿¥ÿX¨ÉDÀ5ýK–øúAd§Npž-¤*ÎL^º»]\ÀTNàÓ#HÀpðj1§Èò|àdãg¦ß¬¿‰€æZIÊ)àöÖLgàšè³¶e±‰ñÆ!a¾–˜9ò=@P¯ÀìGË^qüwpßP: è8€ç­èW`¦9€¯ÂüâÀʱ9öF èrqÛ9€‚Æõ¨õ-Ào;±³?|õKâçÞ¸^(xw\öWÃÌs~à'UŽ\B²“ëØÝ ¢5ºP ?[4ã[ÖcÂ×q1ò›au +²Šk¼1ŽA4*•Þ!Ì]ärP0hºÿža^ XH}G„¸‚À• ×¥^@ ì‘)x&;ßàùt‡ýFz}r3-ä_¦  # Fc,ßÞÙb§{àÇ–»8M‰‹‡¼ÇÊ€ºË ãÍ7ä¦vpôçÚ~&ï3õ5uÉÊû@{{hyléiÝß¾ :Ó9€N`.YUy†{=Øù9%€MàÀçf¸Ü4vjÌlgX~Î p#Jó³iúÓˆí–êguÀàÂ^q±Ÿ3'TƒÌþŒƒ‰ŽýDÖ¸z=à+:€ß9°ÄÞq:•ôwÈ…« @Y€¬xp§dƒí…ñt/Îuß²O¿)…—¹E K¡1Ÿšàûd.^ 9$söŽq'ZgÆap ¾Ø¨³Ëx„ðN„âG8ƪÇ[çñúÀâV +†¡ +×ø|ûM°YEœóÎ8¤¤Üê>1 G=Q$¸ØŒÌNÏ’ä@‡ø=¸´°t´Øz¸8==ÛØAÈÿ­­†R)\îôÖn\bç´,·Ëâ3ž( "?‰Ÿ@—Àóƒöç(XHm¤Ëb?@)À­4tÆs$í,ÀÝ÷E’út·Ý:à`fçÁƒäµó`«?awÿh +gpd Áâ4,Â0Á[M™n‚Ú¦d£•ðOìz3S¥¿ÖqéÄ—E?ÆD—ó3:àØß§Àœõ ØqHºYà€ÖïWpÂ2€Ð9Wp’qI@ꪀ']€Y€/èøÍ7}ߎsý "d®Ü,LMm”žê#é·ÖŒàtÁº|@øÅU ØÈ€_7ëuí 1~[Öù0_à ,ƒ1ùu›lr‘ËÁ ˜|®‘ØäsJóÓ Ý>„¡ãT ¡Ÿ™,€4×ùÍÁOX&ýi®ë&˜kI~"ÔdÀæâôØÜ@ÙnÀ od0;ˆOgà賘H€'°“CÈûÆ6iÁ÷ QU 2?ë2Ÿs}ÐÐÆ~¨ €:%€þ¦³Óîv˜wô()Dúo€ ;h ûÀ$€H8Ÿ‘Â}„@øRëñw¦ïî G'üϨ@"TƒìS€.Pý£ŽÈŽ `‰?F_y“Ű4æ‡^¡ÈÊprÏ+úÁD!ôÞ-Ü[ï!µÄŠŒÝ#Ÿ‹Áò2ëÓa»[ö–UkhªÜ*„‡û&‡ÚPÒòs†,€9€À7 {¿÷¹erõ~~Wå%Õ t€ˆð„JTÝ2ÆÂô5ˆLW€íÍ ä%xÜiá¨HxÖ(Òq:p‘+Ã`©¾þsâê5—°Ä_Иô³«®: g b0<‰±N@ÁMš3ÐûαdWð³]À`õú9LÊ@—¤qU@܇8LƒF0ÊÆ”†Ý`u‚sE©. Ïß1ÁVÀHx!û!ÎÀd8Þ3@îS”çÇÙ%bvŸ)ÜU| +ÐqI`v¦¡z@|â¯NAq†û¬ +|t´‹]p™¤¿ ›Îžúwnµ\]Üçá!د¿÷mI‚~{“Õ¤‡m§¾·w°nàî´•r^’ ©È:€ì¸Jþ‹`<ŸØ{ó€{¡WœbƒðŸ +ð¾ÜÖÐ`žWõKuU™w0OXfG‚ÔÚ`\S…êD¡êÿ»ÂøøÍüu€ìP›Ñ¯¿9? ÐÖ㻾ˆâoOOOŒã°à©ýš?xÑB>b0%È€Ä/~ûâÛè;œå×íÓÖµ6Ì qÒ:9ýíI«Ý~vrúâ®à»¨Ônų.í¸êÞ2 ÎpzÊOY¸Èå`0u7\eþ]äÿÐÐ$€ÿ[öÞtÜGGn'½Š f’Tç9{çWGļÀrc¿ ä`Å€Ÿd+}éÊàÿÓ2äÁ)øÂ%YŠôŸ½±¤ŸÑQ'h©ØŠÛħ­î gë†Äbcp@99l"- œÝÝý¹*«°.€Y0°ÀÀ®×ÀíÛŽøî)²¸hRJ/ܨ»›>ÜÚ?z|´?;›q³ª)4>áÄ¥%øxÛ‚sWpxÀ´C|GÐÓÊØ£b@G<ä£W\Ä`ó!’ØÛaÄ`tÑFä?Çÿ>õÌ‘Ü{ïb*Náí…þX PȲùñÂ8؉"6±¯,)@às`_ìë¯U(:¶ J,ûËKæ<:€ªÏ‘;ý—Ù·IIZðmŸ7fÌ£?æÁùÊJ©˜ÉŽJc¬ìSZa% b±øŽj#•5ÿîÊ ++w×îp1ÏêCبmk Ý]¹[›f-!Ö.Â…ÑÜÎ|€÷B\ärÐÿàBv,É.ަÒi XáÍÒ2mçž ¯Ì<ùÞgNòw !|g™D  8‡’_2&Ü€yã?² ˜ìÏ.6v@;PƒS‚­Ý}Xk^ãôô{à<5 ó>ãLÜQÇ|:£¾[€òÌQ¸B*?Êùƒ÷¸‚M\ \@ôƒÑß.j2;=Š—˜Á©ï .«3‚E:€Ç‰0°ð’pÔ×»,@\Hg\âm[ÀupÛtHøXÊ€üN_ô ‡úúˆY§c ¬°zæ¦@ÿ'™|fî…%¨‚²ãt^â°Jâf@€ß) à†à\f€ë…©àíbèÀ^9Á §]Ô·7æá1Ç뇨¶¯­UFßÈûËë¥ 8f«¶d?:ŽŽƒZÕŽOÛ_·Â¾;ŽžÆáñq¥ö4:ŽZH׿«<ý%¾x?£5Ø|Xƒ'OããÚü/Bµ{òêqT©/|ô‘«'íðï™à¦¯$ýcÝ~[%]Þ-ÙjŽü§°s‰¿r,WÓ_†UÊùÛÓY ,^( +¦ ­¿§(°>€Œ`±1‡É*ê»P—Èû!¥º4à3=ûË‚LpGe,¦î€ñ|hÌ7=ÀZdì;úïÒkP(Ò¡« Àÿ…ĸéS +”-µfU`ðÿ>ÀãÄl±²ÅÙ!ËúCwo†ÀéÁ!þ9c»’.ñQÂ.ÌàÈû%¡ãô2ý`$I Ö»Á @Ÿz‰`Ê/#Їï;p='Öʈþì{¯» €F ¨2€ŒÀ'îçj…àŒÌ`žf¾ùM÷’xEOû":nW>ˆÃÈ/¼™gG@>îýЀ&ÛôÈçWjß6›\iÂ÷‡a¼Á– ®ËòöJô»VÖB>„\PT¾j?/×ÔE ²>8^?GÞ¢ÿþß'`3)“ô±ŽPÀQ?vb'ÚG»ókÕäô[n’`Pmâ¦ýaÌOTÀâK€ç€ýƒ£Ï@ `ýpsfNÖÀñLµGäÛ r ¦@–¤2ÜaÊBÀ³…ŽõY Ö[ôuã9ç¥èrL”… í§ì2õ'”þ'¼ÖS€sH4€eà@`ÖØH`û¹nàñîÌ,Ÿm²& ë°¢Â0¥1@Ø –|é n”¥AtT-ñWòßì¡¿²ü$ãløï’„#¥~7ÿ{€= @²Ov“ßÅ´ @àz_I\8€/ú8€rêp ÐÇ800å™pöÍ7Jûm‰µß•ö@öç ÇqàMŒä|Ñ:{õù1T Z ªlý´JAK×Ú3Áõ@=`Çí•J¤̈5Öö©„Aíµ§ì–(—/…qP‰Þ©±ÑÒ=–Ú  5K,€Øn«ä0ØßE|V± ¾Ôã>)„² uîE¢\ÍŠÿ€DçÌ4ÚaÿE +pÖ(åÝÿóÿðñþß?~03mÀn¢Å›‘@lÛÞvf ãvvèÚûÐqñÈHß"?é$˜îèÈDeº€EŽðþ«P`K&ý 4©/f~8òK±œ˜ÕÒß`fº*€z;²Š@¹M>ØSG [[wà¦qi»¿¹è‰~BzCú‰Ñ1€exX$åc.¼2H zçnê§€+N²Àê¨& RðwAn,àà’29€BaÜ9"¡„Û9•È .èë:e67Ïoè¬A?û +ð4ðòoæü%?ˆÂªšõW>Ú'žžÖAÙjú„Ûí«Õ ]j-„­¸¬QÌøS?8®ü ~îsˆ\yþæRÖÃh¡ÖytHü©@&@UiûÜâö££GÈPXü¹³Ëá“q5ÖäáÜ7»¸ÛnÞf lû x/?ˆ‰ì— p¡ÕçdÁ²€K*'ÃÀÅ¿®fZÿ³ ÛÀا&?…È=ºªgùÑë¹,@ºíOxÔ±Õ÷‚pâXj1_ +Š~±=Œö,€Þ!¾Â‘|î:;î¡ð=Õ^Ô‡ý×Ò²ŽtýP©„ñaäåGF—a¾½gq(¦ûpŽ@L9HÀÑŸÿÅ_þþ÷ÿüÏÿ÷þð/ÿò¯ÿú/ÿò‡?üþ¿üÖHËî7Ûšhvâ+[é +ŽA[‹ºdÜ$?áúqß¼u[î?2%IÁ¨ßÅKòPŒN€mÖ(ý1S>€gq@8ª÷‡öp.€››î8€$ ``Î*‹ÿxßdnnZðxgvn{—p1;s·)C‚6@•ÿu?ZéÑþq¢)c-–}Râ\J@ÊúÌ +a +qÙqŒ ~0ºþ“¹€©÷”ÜòVA KÀýèÖG¡·–½`m"_æ7`Ê"=¾‡€hg@¨ãŽó1àb™â mÈñËDÿ.ñAäe¶Ã²dâf?ˆKÇ^þJÎóÊôøê[PÏÿ)ÕàÃÖÝšø­nŠCÖþ£>ÐÆq)úºu|G-ý˜%¢Z¾ yVá"êIŽþXh1xØÉ³Ã8öw@RÛÒ[»È8¡vÀiÖLÀ™¤9ÉË– >€ˆ +j~Ž °cnD‚ÿüŸÿËïÿùÿ˜ŸÁÿóÏÿí/  ©tøÏúˆh[ˆT€4eE$ÒCáfß³›ËÂEôn¤ÑVP’ïÒ}‹É>i­ÐIÆ~–rÏ"!¿–Ý ñ‰°½ô”ïÑ#äõ±û"À§Gt‹AàænÏ‚ÖNÉŠ9ÿ õ­(Àà²ýÆüÁ©?‘”ôwZö^µÅ=È:€ì¸¬î“¢0º€Ù…B©ÓSðÒ[/V8ô–!b@,)KÁXPªT¼P=…Óx`?Ì@Yß ä`Ú@ ½ØÛPJð» ìlöaŽ•òW¯³ @ŸvŸPg]ÿ0hß=FÚMj#ˆmP Bucdñïï„m–ÔÂøx:„YñØ10®XT[¥6?H'Çý,\¦ ÁŸþ©Û,³H¿4ð7ôÙøS…¢€Ä^|w´O_ÓHÂÌ÷¹8çI¹pxÀÄÿp´Ï +qîg®™`¬u9$Xº>œzñ=\J/z“?I2 ;.€£ a¤à …‰[ÆQHò…°@â.—©A41Õ§àSi¾„ls Ê×ÕŽé;Þe ¿åMâ`>ùãàhã²þ“äÿ=È!ùG¢Ï€Ê(@¢ÄM{e%?’/# ðDÉ4d`Ýê÷RÚu +îhT›Zרoß:þa…íýã§áã§­dã„ò¿¾^ Û•ïh*R8n¾>ôç~Æ0Çÿì‹oÑ=u‰Èä>ɼÖö¡øsÐÿÿç(߃ßÿ‘B8þ² >BÑŸ’ò@ñŸàòàefg­6@7,¶g¡€‹¶oIxÇzÅb®›xð@üwÀ„@ÔqUçÕÈðŽè)€€Ät€•Îm=RM`ªÜbcà1Ç+Û•líì#  »8»n™A¶ü3“«@ `éßÙ’ÿ,ºS}ûÝš[å.ö'å z€ë@ãdqut2wÌøùŠÖ®¨Ì€Ýu/ ý÷=ÉD)Ñé/½ž¾³áªÕ²ŸÏ®æà$t,ö0Š£ÜÈåsoårWz0B€DŸÌçBZ ÂF¥ p}/s,üßë|øS_Z‰í!ºò?–¨?áZ¼q¼öÃZÔjUÞùE¤ÑQ‘ ÿ)|œÐZù[Õ"Nàhùo‰ƒÂOLK¹¯kÿíDú.ßmÊŸEèŽþò÷èÿ¯ÿú‡¿üÏG_:þ÷À€™aƒ.Iö_9’ ±ÙгÒIñ¼i„us#<€C…Q ´û´,€eüM²à"þ÷ + ƒþ,€€8€GûüŸ›Û|ttø©²‰˜S!àEP   ;aÒï~}Hø¿Ï¿ËW\0 @·°¿O¤ô?ò¥Ø’@*`zÐë²ãŒ^ïL×so^¹ +¾Šý ®ŒäGFnŒó)àràGñE¼Â<Ÿÿ~©ÏrX d åÀ/Øqr¤¾ô†ädÈz« ¾ƇAÌ®Jsc¤-#c†'­‰ß­°fÖø^Ø{y + ‚†­~x°†ÌÃL€òl h­´NZŽü„ˆùo„?µƒÂò ÿ™ü“îr ½£¾-,V?\,ÁÊþÇæÿ‹ß;¶÷Á¿üþ/>ÿÜñ¿[ø Àê +º,‚ô·@™•.XDÏÂ9»$—䧤ç:jHÎì,€)€9)À…üö)À"d” +€in÷Ñþã£üŠgkÿèhk&qX8+b‹> p õ3öÀzWò‡ôßñ| ..°ÿ’& ;ñ·Og€•ô–82Zú\¹‚ĉvî‹oä ù«7µë ²Œ0ï]ó&ržýÚaœmìXHÚ! Óà3º_7®“ô* t&ÀQµ?>‡ãfkÞÏ®¯²gÒ5d ÕjK%È!¾¿ ÈÜ« +ªÞ]xÚÆŽk~å$`¥äÍ+ ÀÝÚwá%2Âá¸ùo—=@ð)¹íRÑn‰WêHãÿlGº8úË~¹ÿ¿ÿ‹/¿t‘õÀE>gü Þ¥ÕRHÒå®uMWûžqÆ~{wÀm>À]+9°Ôo‹ çWå$ ó‡˜cì·Í³¸tgôd`çÑ# +Ëà80ycfqg'‘ÀÙiU +»lTа>÷•°bQ“%½Ó¸2¾ H’þ½ÀõÀ>s×Sä®çÉFÀý… /1~•C +ž‡×&ðo,‘=È]uÛpˆd'[ŒŸÙÀ§éG¾1{qÂðòú¿ó½ë¹:]=HÊZ@të' 5$¢]©µX Š J’2¬Wƒõ\©I Q«D±Á>tÌÀßÈÕÓ{ êLH“ÿíqÖtB·p +pްàÏÏ1ÿú¯ÿ7ÀñßE¾m>@¸½ÕQ€E;¿ÑŸéªÒ UŠè]p‰=Àò@ŠRBzZ¦þæ@r0©¿ËX é/¸(:)ùµì8ðœi¾¾¢˜ÿsrw¹7àÓ£G»rý2A6/ëXwŸŒ "Û®à¯S(H ï‘û,Ý7?¦Ç9 L½´–¾ H`*ÀùàzŽ|\ ¼Õ_ˆÄ_˜Ï% …kùqm¸Q€+ÈÝ, “u’«4äÆ ü{ßÑñÊ€‘+°Sîƒ@æ3ñç»y.N›rèßÄp"!‡+VúOp‚•J‡Áz À|¼*2Û™Rs0¹ú+,ä࣭(®ý}ò°Ÿ€,@±0Îþªái  Ãÿª£dâ–n­ó1ÁŸ¸)ùÔ ~vÛþË?lÛŸüñ¿÷ÇüHô8QOÈ:€ ÿ§΂ ;88/à€ƒ‹|ªþ£ªÀ2€N¯Àd/ƒYY]gî8€º’dÎö}ÀÓlPÿc—ò»EŠ¡ç;™ÐT9|J‹qÝâ¾$ÓýÝÇï,ÎY¹Áþ£ý­YŽnh{gö2õþóg›8Ncv;qÿº;ª«‘³·Îÿ ˜@6Ø´  è°àCk8rÇÆ\ÎÕøÑì‹îÓIùx¿PÈ[‚ '?5™/x×Gý)Œy¹€äñ&‚ý@ÿÂäÕ·®±ºÀøM>4œÄ›¥þع0é-æXͨàM’Þ{Ûš,0…í’O 0#ðjŒ;ÿô»ñ‹o¿yr-7V딄¹õ8fþ?l†­Vëôôn­Eñ»Óøô´}úÝiÄìI˜¯öÝø»1GÀúGpOžá7í(dhµåÐ÷ÂÓv·KÑ?µ¢f:WSü 8úÇZ{/åëŸþ)·Ø*6â&û˜ìŽ5kÜî~&`æßK>Øä˜ò;ú[kb¿ãÞ#÷M\L8 ļ¿øgÇõ¾ PLÔ³'~Ô`ÖŸ±ŽsSp½l0%;ûÀ§Ä|%YJ»vö·1ó¤>çJüÝ +»þã‰ØØÀ€)h}~@!Iÿ5Û\ll5:’,Òw­,.Þ§˜Û9üôñþæÀâÜæ£Gût»Á¤Ü`€¶ö#å €°É“Ý)û2 F•ýïÍ!õ'Ü @&@¼O%à*seè¯v4À0⯭ùïÞóÅÂD~dÅ/roâëQ¬#‘W¦>Ÿå3¼ü[pñùüMoªÎç=f ønb"ÿvám®N¼Ÿ°_p °ž7V(ÜÂW8ä $E€®õý ´ZÏØ4çéÄÕÜû>›ò³ïñ(Œž†ÑñÓZÖŽŸVjµð˜½{+8ÿ|­rlŒŸ±ðÑqí£5ìÕâçµÖßá·5vŠÜÃr¿V«=ºðü—Ö +Ð ²_—¢¿"þø=)‰{‰ý]‰¿4 oOz!pxnàYÀÈD£Î¨Ìþ­1:q`kñKÆŸÕAMç厓Á°í¸oq±I nÁqä­Y8;0ÿGÈbJç\ÙÚ¶ø€e³î0æ´FOÌ^À>}üÜÇ î³ÔeG¥®`sîö ¯{8X-j9€E:§rN°>”÷w`Ú¿³“€iè9SW>€Fnä >Óƒí;q‰¯C! GàÚ5Xù±ë£ùÉQÈÀ˜^N üp o,Gs× + =¨Ÿ¿‰= þU|ñÖh~ôúhn”2š»>:r ¢AM˜¸51Q¸Õ¬€ `E`ǸA僠VY}ct‚«H¸Ð9Œ¾¾ÖÖ*@é.Ç©¬­Ü­|´P«­­ñgø ;*•µÀï;OkkµJĶÄ5UªÕŽƒŠï'&TÕhmm-¨`–À±óߢü€ìÝeÉÊ€º@Lw>;:Wþòÿq,ÇÆ«ñÑx›VÀ:ó€XCˆ—Ð!¶~r1.…;NŸ‘늡Ôñ€sò‚߸’+`î®#ã2 ŽŸ Kû5WÙAcqft`Žß0 uksÈõÏBøY€9–²ÊlNH°¹9{[ãƒÓ ΜH¸¯5.]° >ØÛž›Ó‡a\È^âøþŠÞ̆¿a + rw¾è²ð|Žâ„~î +i®á€Wƒüê$Ì;Äõ^ØSø¹9 A60‰ä‹Ü Èì¦À)M +Çòs@ŸÀƒXúÏË9(×,-€iÀ¬²Ü8€ýG÷`ŠÐà8€™™M8•}n^ÊP4ùwm'e)÷À'.Cà!ŸnϘPqݶfß'+ɾÉö3½È-•·wà +ƒS ös…ólÀô…h¹wppð—Žì}ð‡¿Dà?Y î@í „´€Ø0U&ñqÎNcê4Kr÷€mþèQII–óI +[b!~Ú è’‹Ù½PFÉMnGÁ„`†˜ ÿø³(Lð…«$;@5Ø›žÙÐmo7``J†zéOâo€Äça`À À0Aíþ>€»¢I©’HÀdäæz*…¨{³0åç˜þßb_7Xµ—| Ç1û&6ùùœ}àÞ`~’g¸Ê2DV &Le΃‘ü<Ä͈p#ôND —Ч¡ ^®øÔ³ø£»§|èP Ãfó䯚Ý|Qâóÿä @}=hUC| À…®²w¡JÚ\Ð`Üì k¬5ê’¸Z'yí;Íù‘®èí§]ÝGûÚ­»íà{ÿ²ÀÑŸ+˜+¢ô”c^ûœzÿü_޾üòÈÅ 8~Ãó,…î8€d 0ðŸ¬wUE¯ÙÅ>€|âFð‹d…Ì`®]ÜçÛ9€ ¼O«¹Ý 0‹ÿ*søÍ€°³ÿøÑÖùq‘ýÿ-ÎÌZ!öÚÞ¢ Ë4‘þËð);lÓùÈ8>|^0¹¿!å?Ÿé]¹’ÔÆùåã2(xe +€—œ£¤`9”‚µú!D5ƈõ«ÁØD°œ$ô x”Üä[ù¤v‡,]€eÇòs7¡p÷Š µ[­wjíLã=ßõýb%aø ö ëQó¯þªÙl¾8-}óÝ·1ŽÅî¾…°Yåˆ!«~Á«¬¯? +Ç­ìÄÞb§ÁQÕ!óÉV¾¶AóÞ_Ü`{§Ëìø‡Iý¯ +é}_mzÀ˜yp°ÿ_ +ÀþÛQ?@ÌçÏá8ˆÞÏ4Ì9¨ +0/gôêmVnãSv^.§Ÿ`äÜ °Ì¨xŸ >|AÙþgp ËØ3Ñnð³KÿñÂN¤­½ðޔد¶Ø+(G!”ëYx‡J°87;×@`n`g{“ +¢§øX0qÑK}Œç•àÃЀ@€@QØ\ûKÀþDÞ`Á~öI sâdü‚jýn²¸Þ/æ}y›TÏ@†2ûÿ[^& “,&ØëGªü91Q(\+â€ü dC ÏÅÿåñë~Q6}½·jȦ'rÀn~*ªÞ…w‘ʯ#q'ûël+Ð|ÑüÙIó¤Ônjàæ|m2Á¦Í«áz»VyžÎà¨i ÅÏ"Ù(î +öY$ÏþBú¢´ûpfú“ç¶Ì¶pô'óH>qº@î!úýÅ ø—ßÿÅ#Àç. +¥°I°¥ˆ‡è¬¸­AtùS(-hüùhpüê+ðüHÁ˜Ð@£<è †¸æ,Ñïd¶>v ѽŸ˜à%^'ôÇ%/nBæt¨¤°±€¬…•i‚õ;(ühnkn€€Uq„ÍÆâí™ÍÍÍn¯ß÷…Ó1ÛtQÖ@ìa À¾ 4Žâ“ûC€4 àÊÈ}3#ÞRÏ,ËŒËóOúøÍ5 8)¢¦ª ?èîyÖž‚â\Ár잀ՅxH¶*ôÊåòº•ùcäyxÑyË7o”&˜¬#‹²RùâI5éãÃW›a¬TÖ¢Ú]$äø ˆþ„UêõŸÕŸ4·Jí'€uøþðÃpÝõF ˜…ÑñÚ9YR7¥o"cSvcWâ~ €áâWŸLÀ9 ¯ a>;(øË?ß§P…3`›CŠíêÙß&xÏŸÃûã…â¹°8vÍ@%¤¿€óéÅÙ$ª'@ãÏâ?ðÿn‘ØÛSo¶‡Š v +—è.`•G÷´!Y¸“‚9üW‰†¸B8€-Z€‹÷øÿS÷GÍm\i–(Jw©D‰EhH j’M”Ù´ClÖMˆI˜4`%Ñ¿‚„L˜ŠQDòHôe?ú¼‡Âw"4çÄ}pʼnzIv¶›Ýª‚唺fØÕ¡®þ ãŽöé_Ð?a^îZëÛ™H€ ¥š9GöY $‰ÌD"±×Úk{çÞÛÎ ÌÎnÒ Ðl7è66·àÜ¥9.çžxáB€@ãOͼ@ À®G Ñ ?÷ç|héÍôÄ;þ t4î@Þ»és¹Üë¯çò¯¿K&xÛ`1_Å;lQõF˾·þæ¯j_(¶ÖÂy ÷bïaÆò3 ŽŸ¿M"¯3o\V¿||0ßn!wG¹¼çx¾qo•JIåü€ÀjÈ1ƒ×9kÍ·C +€Òb‚·˜ÍûÁZû ‚²+ãÉ‘2Æ)ŒÌôçÑÿ}˜tÀÀ.  \è¨ g8€ægÿì߇ï~ûQ³Wb oŠÿÌÛà $%¡&@<;5¦ý'ý`°4»'B÷Bµ‘±ØèX݉|*~ò @6îã¿€‰@¢ä½½•ô6Ѩiñä¤Å’ Nšuþà7ãþ œö,ø?3·ÙÜ«ÏÅ1]€»"gƒü¡æn—ç Ç¸&ÔgLvA .ûǤ@J¤½Õ€‹pßäö +€ˆ›Ÿ€ÃW'!ù‰+˜Å@^Îûþ4ï¡xæG©ÅÇ0—ËM°ÄϸÁHö‚*ÄÊó€Üøì)ä¨^U?›Y¥”;~®–׫GUãñZ·7‘öj)R]ÀzõJl"¶Ú Âü‹Q,dQެO¡.)ÿoÂP  9lƒ)+ïÀà^A2ͽÓàÛ¿÷þ'@ÉÙúÛªóu«NF ŒLY €'àÖ +x#>÷`Wåÿž +@|ë­-öV [êCüF«‰„û áþnªú¹%ΰ^½U@fX1˜|Î{é3û‡Ô÷š[xÀÏ•ÌNθKr&D{ƒ^Ïr/H€ Às`Ì'°RÝšüÎÀ¤Á.½ó^ÁË]”€¿žŸ»â"ó£™ýÓ$x‹drà­¬‹Þúøvÿ3x_¶¾€‰ìëù×q +À"¾ûr —ÍŸµtÀ&vóÝ +Ãòí”ØyW¹ ‘Qöw€û¥ƒÊõcW @àx¾ú A º®Ð =€^þÊd¡ØCÒ=-ÿïÁ@`ìObñ‹>;voýÿYxŒ¼îþéßm mö9Ž.äê´6°¤ö@HÖ[®Á aý62¥°-B÷$`ü_bdØÝ½Sk¤€Ÿq︮ñ¶K|1ˆì‰ +Xñm¥9k„¼çf>¨-Ôq­ð²‰€E€Æ»É@ÎO;À®óœà!f'gjŸþ_0ð‚Q€®¿¥žgLº ˜÷kþ÷Ä4¿pB +ÌܳÙ!  _ôr¬¿ +ö*çóp +y¼4ókÅð2ÇÒªŒâ“¥¥o…ýƒXbaCE/ãAS²Z†"òì³§Jz0à““ëGÕG^ÎfüÑJ°R ¦Ûÿ»†BÑ•7‚´^ÄEù5v̪agù›pÝ”Aª‹` hí‚veõó€-ýU÷t¬|yè:ËdÕwxÖ€„w2`¯˜hÒM¬RÏNóþÀ»þå»ÿóCvz¿ÿðßµd\«ÙØbuöX»µÁ–@|³©è CœÏ .Àh•†øÜƒµ¸5€FMý•ÇÀ1Ƶ»ñ_ä 俉€I—9Ó ÅRåðl¼ŒkS¯#·C³Î(ò·0רN9€Æ=6d'`P@Y€Ù‘£÷ÙËÄsc/X Ü¹3gð`¼Oôw +ªìˆ2ð‹Ãºµ‡$ö +ãŠñårBÌÓ˜ ËpÈç™W—Ë~˜ÅÚht}…Ýy+^që¹+͂ʞ—ámìHˆmÕ…à™OÊæA«¶(ã× Mþ³O2òõj•ùvlÞ*uWÍàWØC @¿xRxƆ?Vè*yµ¸ás`€Çn¥ƒ£åKÊwÛœâ4i{ãCå¤;9üîÛ_6‘Rå’¾c°À +è[(lÔõTß3¢?¿Ü‘* ñ¹rŒ8ØÙßÝr°cÀóÕîâü‡šSâ›#?`t´œöfà@EÀu‘† ¨ºS“ŒðC*`Oµ€¼Q®F#M`p¤žé"r$/x14f^ÄðZ¤AêÛt¢g½1,fÓ]]?ƒ€¾wMtkÀÿEÆ ½‚¿ä«k€r'7í…—ý€=‚’Ûåb†‹ÖIçÁ:ø+Þx~øÞø‚p„;€£ ÈM¿Ûž>$çÉÿj«uܱ¶=¼³Gú²®~0ïgœ_ÿò^ª­# àv–0¾@@ÉÇoW®'ƒ‡+_Ø '€7’§&˜kâWq"‰Néið£_ö—¾û§_~¶ßdÅ·À’1Òn kÿGÀsƒ£äÔûU¼ò5XT¯o`"ó6ð¬³LÑswÇrkØöŽ BÁS+÷ |{»Ëÿ~Ì»¨£±ÀáDëìÊT$­76f‘ÅËðcEmjò€j\ ×ï`¡±×\˜áX@Ö#`fdJ^àÌGÐëÙ ™T·ž–îlÍÌ>ß8Ú;X ÀzÛýxYŽÙ7²ðXŒÂ¥ñ‰ g\ ØÙ§!ÂòZ•œû²•ËyêO£¥ŽúØ +ªëQT>аÀ˜ŽFÈ­×C(Ép¯ø‚ ´±ûÎÂñïŽÿáøÙ©ó¿ÿæÙ“ß|ƒ¯^ÉgÇKR9ÛëaõË££§OãD#öÙŠ¢Îñ³ö“gÇ!oûoGí/[Ñ£¨uttô¤=ë<}¶|üûö¶>ŠŽ¾: +«e~s«óõóyüÆãJ‰· ¹.GË—Ð{dRçÈb,n[È-†È}Ñ^ô×[’èÀ>v +øÑg¿ýö»ÿJ ø—ïþéÛß"÷GJÜi.ÔMíÂ8Âw€{‹”ê¨+;J’ A”éÓ\8áðVQjµu»M +N6")q>r!“罸ïº{tÎÎã€ç£Ù 9˜= +Cœg~ü ˆ*j÷\æèÀþM6¼Yò±]†h•7‡øq•àà[ó†âÿ›?þljC¼`á~? à/¼B®Pò+7o~}ó3GËÓð¹`·à“#£Ÿup&Æ;8qœÿ­ã +K)–i(ã·wö?ûå/¿%~ù‹Ïþâ£=eEpL¥»ÿ}w×9ò.¦â[¬ìÞ j«ÿ[`#ÐɨŸ†º'ÀNmÞüO ;u@×Àž¯‚c¹CÌ}Š@ ö+ !1¥²þ³vC P-C„˜3€cИ›a—€É-/P þ°€DÕ]ñ³pçNmf†59rƒáØÞËüõLµH,@¯¸Y*•VÁ]úõñ Ÿ¿Zð¡dwe .y¥R¡Àô–=oõÓiŠ@ œbô+ð1¥ PÀB…ì¼¼š¹8D?¤)çQ´|Ž ·Sh3‹,Âv+ÀŠ* 8‹aðÞš9l˜Í—¼×ó—òðØ^p½Ë#œösFOÚ_õ¬à±ÅŽDíN>iÃÊÃécßyôÕÓ§_uŽÛ×+x=ùOØË¿ÀžÑ!V„aõÿá›gO;öq%øæF!jÿ +§ËRŸ÷Âð }Øù¼íº 28Z¾<¨C'gµÁ -L@-€€êq® É€‰¥ÎíIÞÑ€ÿìÖØ0a6›s·ÈÁ‡áïAtM(1³SPÌVŤ}·ë¬¾àì ï㉀si6¶ï€lÂîn­a‚ìš@5·px;¢`ÍÁÚÛ\tùE% ^ˆ\Ýò”¨®À¦Š +à Àm„Ú~Xs{$—ÔÙ# €ZããÚ&.9Û žþ˜ÓX À.ésQffn1fhëIÙû!ð#äý}1熌P Ÿ± +n)s!£`!¯Þòßo‚ ø–ç­”±áŠzãs{­°>`ÍzèØ@ˆ«ðI1Ìå/Ÿ½ÈZ€€CñÒ%œ ý3ÀÖ{ëa;ç góŒ;úëlߣ:¾€ãà XáÕöuŠÐRŒ?tíðýªñWâåð¨TùŠQ@ +x× T¿µÊ»0)8Z¾<ßÔ€^@…‰4@äëç;%:Òp—ôßßwA·«” €ìÆ`k£ñLÿ UÒЭíºûeÿ–¯RúÐe¾MöM 95@_.PÃŒòS}ؾ0ã§ô:ëwÌ!å∠ØÄLÔ7þ#ã'ÿÝ [Ö7ÞÇgt(Ìšllóþ_85@`rÁåô§Ìëm¿¶”e-€)­Ü¸ßb;ày£$&?Ú¹ TÍ ¼©:—×Õâ?8.UŽØÜG¿Á +„²Ž 0 OHý5 Ê GŽ ÔnÀ}•ƒ£å˃uìHÚK +lN€^èq ù« ñúãI@": Î\ `°¹ÿp@i®Ö‡? ‘•˜77[舄û¢$ÿ·üš9njjÞwÌ'4ï:€}|݈i€NpGÄ1,ß'õÓõ€=ôw¤ï’Ÿí­Ó°½6åûM°h÷̰£` +ÌAÛðâÿìä\m»>€ÞÕÁoŽ0;2E8ý¡ëd"ð¢1]L +À¾®ù©àÿ7{V Àqýþƒàø<}íäz@ÌÛ%ö*þ³.`…ÜÀúOý¶Fá&Ôy—¿Ö¾²ïuON‘긣à‰ÖŠ+Q¡P¤ ãX`fúV1 žù>tÕã\þâØÄ’W\Á>Ìø±äX#È»~ž­Q•ü+î!(­z«:¶ Ž—ƒöÃa)^^þ +ÀjÜpоPp´|yý‘ó£@ àôÿ(XƒçºäwKHfdZ<·'iè“£A +pÂÔ6>øà>oI6·Ò™Ï»!føOÙ©Èv]æÛÔlnã+)zûM À.—¥&l kv•øšT5@Ÿ0þã%®B¶n…‰³pE},ðœ¥,llàææPÜØnÔfœ¨mƒqS³(Ý’`p’‡ÙÎÉù?0 ‹)8[è™fÏpŽî}P €@ Ü?v®Ð+_u×|ïÒO$À5pËøêyϰÌ1¸ß–­Í~tÁ>ÎØ †Y2·)sŒÀb1ðJe/REìpæô§¢ô|ÖÃ'Ó* +5§ ÖÃųA ´@ù°þ¬Âà„˳–¬®Â`¹ÄGà?^:ÌúËël €³‹Gr_Ô…£åËC×Xù_oXuA@†ÜR˜&ŒJœÛi.vN ÿVd¼“rÌýùTZFjîFáÞ`­ãÂq‰Ú߇„ùñd™“}7ЬÝùXàY* &>y1·Y*0ÈP8ý9ÇyK0×à°XÊöRI)€ã…²Ê’ýBÈ2:€™Y– ¶kt4(àcßÚì$Š:Ê)s»NH À]M À™ +À+6pJPtÙMýí0»0<äÂ[‚Ð%3×,à€°Öf- 3ø·Äoª]ò±í Þ™ws0m–þ±B¾/(øAþÊØpÆš;pf@>tAØžÎ^ÈL,â%7̰Ed€%€™w»Ô> +Ö±Öøïd‡ügmÁê –*aÒÿ†ç-æ2Ù¶P³Á4-_˜ó;ÈP *8â÷Ä(‰YRã<~’d;Lk“£¥I*À9 bµÿp'îΦV»uk O½K[€mæ§o8òŸBÿA€gA=âwòëš;»[swP1þ Lï8¦µ*ý |S:¢â?^8'­•¹']O9Sa`š@Ðv”…Ùúö^ƒå›SŒ²@@9`kï4¯Í‰óÊôcðÜ€ýb'ûl ¨wî¸"€Û% Gö°*€8Ð!³Ê†¹w°Æ¶€ì €·ôvCÈûƒ(W Øs¯‘‰"PnWüÈV('æ0Õj±ˆ¢ƒ'`àR^¾ŸP³S&±ül ‹ïäØ^!o= ¸o¥q‡õ? +‘û¯kA´E¼ýOg• tCVàF©ôI©¢ü`÷QžòùLößÀ¨ q GË—‘ž¬w…W @!@TìÍ*7us{Ê ¬-úw€q1ån!ár²ô'æÍž2ØÏ)†c|ªW>öÒìçÄTS‘0hînÍ6âsÁq™ÅQhºÓ`Z“r`{Z”éëSâbp\%»áþrMŽÌàc| ×ÎÖX Pc; ÅPÌ™ša fî +0Ë`!0pî €]²‹ص(÷ï:¾Ÿ áÀÓC3ÿn;ËþéTëƒÄB²_ÉCòùE/ÿ&Èú„ýìà^^-‡â½þ·•àˆ Ø`ÅÚKDÑwxÛm™¾ (æ³—†3Tê §•z<­8°“Ë^¤ð›=˜Z†¡eÁ:œŽ*OY?ÀSÒ9÷ +à•¾.À@Qðž_ÉšÈð\ƒã(ðßµßbp´|‰$`yÀ$ ëXgmfo•Ä,©q?ɲ¼ëqÎXmàæ¦9€M6ã2£ò˜b`»?kÀ¯y#Í}N±X¨ß =Úšƒ p`ýmÎôþ  Ó0¸}ÀaÔ'ý©sQ¾¾0Cð^€mv`µs¸º50§?ÌðÿЀýâØÜÝq„ï I`)ÉíÒ…£úXî¯ qqèm€4.Z,ªßE9€'v¿ˆFWÙÞ·«xü bì<`9¼ìJ&k¬À‹¡”—&ÆP®–¼ÖžôQÈe‡/]Ƀµ(¿,þ£(¯À6` ]A€§Wò­qä@ Â!†Q¸áU¨tTx`  „'Ç?*øþ1”â1+_"Äxƒù²Ÿ:@ï¢ z3e½`b¡†Ý:ËÜW%€)€%#Ý Ðl>¼k)7=(I€=ÿQG4ò^Y?éϹØHû:ÚŽm¬Ù­ÑH`0xƉlp ŸÿÙøÏÜŸzà@Ðp¯˜ìa'$`{3¤=éÇØ’š'ïÀŠ6ͺñj¦¶03953·¡fÌä±Ý>äÀf\Žg˜»:€?(`—ˆ`ßÑ +€sœzA‚Ÿs€n výµQÐuÀöl†·ö¼õ¨£&òÊ;íåö#cB•7~9jW‚°ZZj>T;~ÙúÛX°]Pµ€‚ÃÒD&û–âE"|fHξ `8»è[_ ;ÈûáúY:ÖÃGaøèËÎ@ØB™ÀÂønž8çŠþ„ï·¯—žE!9t ??v°.ŠÂõà€Í ìáXùaÜOÀ( u@2à,^ð`hP`r)?®Å .~’ƒ;ÍûLl¼• ¶s "äƒf’5Ü ì À¶Àà6@ +d™ox¹‰~]8#ò‰+v››3N®R<Q?ÉÀSKýA@ÀI@Âÿ> ‡1w’;€YX)äô°/æêÛÛÛõ¹Ù¹(¸ÎëŠrKªCäeÐtrÆ×”\Æšùœ@W $ƒ<€ë¨9Ç6Ó¼r=pD?.àúì‰@†ÂFí룃 ùl$Þø¿ + •¨Û¤ÐAðIú•ð“ ­–ظÝñ¢ð,v¢è(ô=Þ*Pªä5û«˜ÍÏÏ縆ïç§ \š×œÇÀæË¾»z]Ïe3#ç‡q¼ùy>—{í9ÓÛ…³§Âüò|a¾pùÜÐðÈø8Ï© ÓÑ“_~õê|¡P¸^XžŸ~ ³«óX=pÖØ/xso±Miúíצç_ãisŒ_ÆÏÏá;¸Caþ§Z)8V¾Dˆ÷  +AÙÏü_· Ø"}îZRSNãž$ì¿,À3|²P)j@Þâ3~‡âp7` A7–Ñûا€s1=á!h6þ-6 3wL¶]Œ‘a;ºÑ_ßõs¼Æ_ +ÿ½`èÈþÈ} +x 0Ë_`µ¼`{Ca™É:€ÉØÀð(šép}3¾’ñÆúøÚë :€`¿Yc¦oÂѸÀ?Ö+Žæ§@åÓÎ@øÀ™‡èW‡Á!rOvßï¯~p|òEøé•B)¨T¼à×8î|ýù{øÝ(xÙ‰àë¿Eà0lÞž‡æèéXùatO™?C€¬ÀSYÿ¤ +ÿ|Šÿ²“àÒÛ @úãén" -)ÕjäóÁ>³2™ÙJË$"ÖTOˆ€™þm|B'`ÏzÂüx’àyP&ø¨±@g2È$´Çñõê0˜þr ?çvN‚íâx–õ‹ÿp“Ss²VÈ—Ì¢0ûð) އêÿ8Èü5Kã¿7ð0€4óm¢ÈðnA?Ìý] §€óC¥4XCGä/Ù0>¬´V¥iø}¾ÚZ°¿Ð_Ž#Ôg «û(fÛˆ[Eï­ Üêäñ9×ý5ÆXçö°Aÿ +ô*Óë¶å5««ÔÌ' «A»¼Æ°@9 ŸüÝêÄ÷©‰ ùA«Êê~k'¬WÛól̬ZIC!Ÿ½ôÕXL%ú„ŸË=+_~æhß–Ü=Bê(@€¯x'hl'IM9MüN9 ÷Á¹Ñ¿›¢Ø8g paÓee&–¬77·6›XD&ñÓ·ícõ‡Ìÿ·Û|ÝÞ¦þ¤'–6ðu¬äƒß·Ã"À®äèN³¦CSrÜÑùøŸÀ?·òãŸÿôIDATZ@·ßˆòni` @äåI~µfïÀ¤¸¾eƒ˜Ôéf؈/Œ€:„€,t€®&^,]2Ò8Íà$—¾ÇÌ¥¹oÀp$˜ùKŒý="O¬2 äÇ3Ù;+\ûÏ ¦QŠØŽ>m\-ͯsIüÇ3Ú <»çVcAð.wıvƲ¬`K=ãÞYpçsÓƒ gpè<¿™úU +ÂvËwaA|uõQtý˜¡=,Z3ájj$ŠðtÞuŠS_Æ“]™ò¾k2´•r¯ýeŒ×P2ù©£åKÄÈÈ9£|€ ÿíÆUÿñ•!A|PG’Bz#ëz€Êÿ÷ïïÝßkîí0áÅ ŠEB´”‹ÉB€|l@  €IN‘ŒñpÞø¸YïÄï"ó™×ã\À 6P!2|Pç͈vx'©flpçÿ5ÓYâÌ`ÏE ¸žà3rûîg 5ü„ííþk‡É©Ý +$y0ªã¦ $/À_‹$˜(À ⢠hŠ€#ø™ õc Ðmàòÿ V}w'¼”ÿ7™ñ,迸¼¼ 0SŸ®!æÈ€mu9ä‹è²•MCÙ0¨M‡Eo1{éJ‘¼$ •Ÿ‘ïLXµýÅ‘ŸpÔ ¿<¨"‡Ç—W«åò;ئ܊–À~ʾ•&€qÎVظzœ;æ‘ø,`"ÿ/gF2y6ôo”+Ó?ͽ6 úãÕ±ò%ôGN7ÂáwR°V, ˜áÇ“þ€EpÜRB‹s%¼û÷wbÜGæÛ— ˜9?ŒRqSKäÿ¦jü7Vj¸.nþßÌ2‘Ýßûä-@ü: +7 þàë :äÿö6Sy=åsè‚8úÈ윣ü $ü?Yå§xï` S ðâ§â52È ¶Û˜S `õ²jÀšLŸî¥»Æqþ…c[}ÀÕHúÛ:˜eSîÿå(~â³ÿþþ¤ýÀ÷VI&V„³KP™kÒ<¦Irb9qÜ2ß¼ŸÏI Ð'Å9À¦_,ûa•7 €ñì»Ä"À +ûßw¡ëgOî|ž/sÁF,8WÚfñ_z$žƒß¿)`6eû 2Ö!Û§UY뇫ÕßÌwüø‘lHm3pÉ3PzTI"“¯}@@èU°¾ŸÎ_ ço÷ À0u[wk} éÈ/ÜoÎÍa#nüA|›s"æf2³Ž?u$c$ïM{ªÓNVn7nÓöƒCà¶f.¹wŸÆ|d~2;µå¸Úh)Ô•m/üÜ”@žE^–°â¿^»’iç žKdœÄ`&Îß°ÍAy/ÀL À»AoðNA@âëÙ]´^xÁ®C—Ë} ¿U0`‹íx•â½Dîç±_üH£þSò8ÇN€Ì[û~%wHz8à¢`5|‚—3@Ѿ¿­“€Ìù[îÆœ`šƒñ{¼Õä¾g¡ú½2’YÌñ.ÃÈg;Æ£Äü·`ø!%­p¹½¶æ£LÁáwÓø“ùð)r« W°-!Q(pX³ÌOØHWUg`p¬|yøYRèó‚‚jH5ÀSV`d’©CIov!ÎýñDÑ¿ $µDºh~¼Ÿ4iq«Ø’°eþŸCn€¡ì«‹Іì7ÞºŒßñ?ŽC$O~©ßMø8ÍÚÜ»8mA¶xvA ‚à½åݱ0î‚ìiþç¹Ðu<9wŠòù:ŠÀa ˜ä?"Áé-ÌÀÌ ëŸe `Áê\7‚’€Á0Ód¬·pz €ñ¬p—Á @â>~¸ë¨opÀ6uÇðçÃÅäúã½"¬Â ¯ÆUÕ‡+ðKþÁôAÉœ?ç7Ä–ü…<²öñ€¥p™*Ë÷lï¯øÊhÉ÷ ¼¬,*hô/Ó~Ÿ w6ÏCÑó3¯ú¼a)„Á/k¨?@õ‰¾^^ª ++Pðss!ìA«£BtrŸàSXŽ',O£@ç *Žü„£åKyNÐçâ@R +à+Éχ%òÿn}v†7å#åÑìì[ Ã}'ÊŒcp§¹ÿ°Ñ/`5ù¯<š…~æ­·y×-¥vd=1ëñxj5NM¯R ,׿¶›;‚>fKÃp28Vu±6ÎÆÁX²Wà P;‰”íjTŸM;½è-ÀÑ66à 3S¬¨ÁLN©?!kpû]#A"ð¼À~e—ÿ€¤€`·§E€Yþ«nå?©ŸŠ8Þ[è¯tƒwÍ«)\´B^¢ãYA.Äeÿèmî›å—²ÙË€¼·b,YVô‹EÝX 7†¸Æm“›üº^ÿ”ɵø=Öµo潜õèBVXÂÇW¯[ƒ¿#Q«……¶nò÷y^”¾u„Âÿ:,@9xTþzž÷:¨¤c²[36(©·€puš ØÞ!÷ò‹?;É|‚•€:r@™?[9þƒQ€[(.C¤;ä¿Ëý‰ý}¤ÌR¥íà—™c-S´êÉ[òŸEþÛÊ^ëP²Ÿžn‚wôš s8=XoÊ‚¾b:VY¾¯"@åá û þŸÇ3ø9eC­‡Œüd¼ €ñ„N@€A€Û0Ú‰@A@}ŠžÒþˆ4žçvšŽü„€¹c{8~ŸT  ¯G W8á|ï-ÎÈlW Xòn@!, ˜÷Y<ðDÿsч\,zàÓºxÈ;‚}Ÿ±îõp:Z¡]Èz´ÖSÏs@{~&X¡HãCzw€ÆFmOÖƒ;V?—p‹ÎΞýŽü|Uå$v“Ð Ú½+.(oÏ®Añpì` +ôŸš£˜‚à'±8Cì’/PË} '˜í8€/LôZÔ~ˆýœÉtc€Ba|Ïf_'ÿ¹Ä(•ÂéJ {åcä'8†>˜¾…j0±„ÌX/XË;úZÕø¸ÓŸ+^0á±­¾¶9ÏðY@pªŸbÕJø˜sµWmñòÃÂß±àá4ÿ´'|ѦkìwÄ÷£·9WXCºVx=›½°‚¤äû Âòx2Ç3îV @ÊëAÀS…—>Ì|€Þu(ö÷ 9‡ŽÝ.9&ÞMV 5Þ‰é€ñ]ÌO ›€Ha  +mÏËfyS>4@&\\zŒñ¢\Šð™GÓ›¯£x~Æ?Œ3¾£/ÏŽaŠ(ôS öå>Ô‡Vƒ€GcÍ_ó!þ›Xp°²_ çQž`øù»J^ÁÇOƒ°zF|AÅåþ„£åKh®üŸ Ò`ýYNŲ{‰™{·×ÜOî64ߟš˹µ+ÚS88$×MÒ—·]jÈ^·´úCŸId>ôØíø]ÀI˜‘¨×7¡(› L%Û mÜpMŽŒf]Àhüâ æØœßûaô—ðì`-ÀIN˜àPF<’›K4H(cdv’wÖ¬% ûaS@BN€“[ÔÛ|^'OHÎŒÅ/ànu{ +Ŧ]p“ãöóáÀ+Ö#Pº?¡Ïp\]äë^ÖÌýŠîí%9§!V( ÄeüWf믔:Ø+—Xí÷ŽÖ‚ñ²`æÂå0×YYñ¡¤¾jàY<Œæ§ƒœ^‹ƒõlf1Ë?Š0ꌋøò°…/¯V Ç’FüXýOÿÕ<0@¯ZGøûucá®?` ïËü™åû溘ä°\¦Öö`T 9€&@*pç~Ü›0ø´“Ù@%â…´¯d:7Ñ +ÓÕ€('ùåïñÜÞ¾“º}×G¦–S€…ÚæìlÍôÄq?Îi»˜é:‘`ýÿm¦ÜßFsÜwÀ4Ç“oubæ H³´ê\QŸÅ„·—ø Ý"_ò¹|þ…cø;8þ!} ÛW06ùïq0Hõ—èÈÖ4VÅ÷l–" ØÃÕí\·½èŸÉâC²Y,zå¨Ô¢õ•ìØÄÒ[EZs3ç,§3à ¸o‘e†¢yocaõÏOy¢æ G`óžµ ;š§!À‘±!dò +ðd¾c{¨!eà=6E°‘$ˆæ#v°êù©W«åáL‘;ù¿Òv5„cåK„ø®oÔe~ðߑԋÜ;éÒ +ЄÜê:Ã[Ù¤¢9&Y5^LøpÚÀ0 šþ[ éÚü^¤³yœ"ÊÙ")¸§[qÈʦâŽÇa(ˆFú¤€TÓ5Â.:”ºõT_¦6 "¥!rÛuÀcrJ€8êcâCp‹x2"N f»ìPI3h_QȹÃÉ}ù7æõçÖÐÄ +À<¿ñ?àlJW&€w»vqD‡a}Sr|½ã£VÔ~íãBÔŽxpÈÎõ³žßyúôË'a+ °þàYûøK°È˯µ°S«†a¯ŠC={Òé:_~~¹…G­°Ý>jÿ5ï<:Ïžƒãã6N'jwÚù¬¿Æ“xQçˆ#†ðËÛ8ÏjøÕ7ãcÿV·;í¨õ'Gí*öãμ÷§}ì|‚s>å "~>?–Çñ¸A§ÃÁ’ÜäXùáØÞ W`“¿nÖopéÉ9€1€ûxãØ4bÀþÿAd¢ùp7Îñ™wá9Øuçœ8ŽCH~~Ò]—@¦'À8§¬ç‹7¤·&}†w˜\IÝ@Юڀôï*Àâ<;o·we&¬`Gf<Bßê Pg-Û²`1ŸL7Hvp‹s ?;ÐËËÈ87 WÞg °Ü_9ø‹;§¶‘ ÀâºFˆAú_Ð4t5 ÝÿZ¸úZn<3}µ°ìÙ-±œ­N—°À[|/ çòËã+w™· ¿¶Š ¯æÆ‡ÏdùGÂ>¼õ)`ßUÞbœçZݦû\,?¥ÒòòuœØraäÂøøøå,obæ‘ñä)˜-{ËË«?­hž×âØünÁŸV(•¦J×yÃÏkü ü}øM™áÑ«ÜêíÂ|©ôÓ.+_"ï³J?6úguÿÇ<JO_-@ºÐ|e\s¬°ÂüÞƒýMã? °÷tú¸¾±¢}cÃQ\€!@ÞØmwR)X¤² dœ9κ1fÚÌ¿Οæ˜§`;"w·?SC‰ø|o/b1±Q£X€Ó˜œb?Ø‚!ñeMx£—,É/ÐȘ€ÿÇ97 vÈøÉâŠ`Ã;[ÿV!lK`¥ÍäGÿ$ +çþDoŸ€ai¹´ºúi;ô+…|¶Ãà îþ#(•‚›¬ÏeÇsþcvíÁ’s~ûWȳÃ/¢ eIÞÿà€=q(OT‚°òðq–=˜ìÏCx‹ë^çt®‹²Ss:nVC/ïùkH„73'ÃUÞ±ü)O$Œ‚ÿ„­ÿr{8’_~|Z üƒÊk•ƒO¾À6†¥{*áøGfóÁÁã¿ã/?8´s+_"Œ=Hø‚t Ȫj†.9ÛLkt}1€½æ}Ž»{‰,å> ½)Íû[ s#±ÇEX€ºkÌÒ:ÌB· @;¹§… Ú“ô$%cûw3ƒ†Ç ÞºîÎìm¿ˆßƒ®ÀÀIÀú›`¶ðs“‚¤Õg'GA{º‘_À.3ƒB=€.*Bö›°õŸzKIÁk–àD€¹¾²~ç8ßœEÙ=qdò@0 €ÛCT ¨!ûñè•¡á@ OÀ«›(—ÀªU/݃èéÑW0ÛUŽˆB±»1˜ü +Y- q9‚PÁ‚ÀÏS¢ÕÇ-ÌYýò(ª–[¾ÇJöÅ…ÙÏ%ç9ø¼ý)"7®dØ{N« Ü_ÅitJ|ë#}yëÑQû(zô¤ÕŠ¢uš|ì­ã5êó|XñßEAFCV|Vsy/Ÿó!BOPPàðá +_"ö-Øçx¿ +LÁä}Œˆ°À€Zj€)ÒÛû³q @Íêu¦ÊýÈj€÷ÕNàG(É:–#çÚø€: föâ??`¨e…ðtyײ{’övþ¬´Ô¶\ãµFsýHþzv!)L½a™¶b2çÜ.Û‰y>Äc +·îÅøÏÀÀmÐŒ-xa_±Ð¿Ý-,%é9ñaoÄÿŒúõc×1濪^Ü4èÀ¿ãs¯ÿ¯Àÿˤs¢/¨€Ã`yö޹)ˆÊ¼Ã.\gÌœ±ý x͵­-ùyÞ,ìù×lF•E¯ø¨Ð.cž‘9¶ ô‹EHÞb¿îÖÿ {y¾Ù G0àià„Tw×)°sSý©QìÐÅËþ*¿œ§˜‚U76Žðç9OMƒvk…ì? cåËÃÏRñ}{TÔ`êåLBà.9r¬è‰°€û‹ØÛ¿»0£L-lÎj +ˆ¤ÍÄnù?}¾êLåÿT†A~XšŒÙñDà@Ǻ_Ñ-ŠÿjÀœ(€5ƒ]‚zcÁÝÀ~çÂ>@RpÞí!æïÿw×ê§}6ƒçŒ4x/W›L‰ÿ¤»®‰{eI@óì„zÐg÷‚z샥b2/ù‹ÆXu@Àž®@;9v¿ ˜q€P0ž½ØëRjb£¹€íu[°ÖkQu•{ ¶× + ÈKY +¤2«ýÙòGÍíü56èÔ϶HÇß«ˆMâ6χèö`«õu¯¿ E‚SÀ÷uæÛp#`¼j?hµ$l$h(WÍÃôÛ2?PÍÓaÎÏ g½?§™Ž88Z¾DÀ#38)Eªñ¿)8I‚“‰çd-À}ŽÖ·— ÀÔ‹øÎ4P`mlï?ÜÖP™(ˆýôò°â¿=¸¼ý¡>¹íJ·Áw¹€$gÎIT§ÀIk ˆ•bü(~'×è†F.ñǸ|ö þRJÁ´|`JÓŸM€ ®:?Oâm æò²þ8ò ð¼z”Âmà͇ +HláhÿUäÇFâ¾T€gÆÅ?¾Òëòyí–ž¦fîÐÎ j 8 `Gô'ÿï¸{äÄ샊lda@ þÙãÂðP…U]šÈ(ÖŽ±›Ë~‰µâÝóŠ Bù²‡d»ðö9äúTfékú ¸V~‡ísÙ28,0Û·Š7 k×¼% +€½{.áNΖ’E޸̠¶‘;ˆ®Fl' ââÄYß–CYŸä}VaFhÖøËm=4-ʱ¢bM™»QÃ Ž•/d5€àÒS<*˜²1fS. .9r'bû¼óv¿Iþ[ `¦v—ðµÞBN"Àæ‡ï/ÔæHj˪c·Ï§ØÎŽ¿ôi‰BÆëgfOçÏҀ̿„ +àçà­ Á:@¢ÚR¬Sƒt€€«ùt{º6ÐsÓP¾‰ÖG±Ôê·á$ª3T€ØH•”,^ÿÓ1Gísn+ÐÑ7š; Þ÷„71úŠ=ÀíÙ¼3÷§ú#±ù‹óìçŒäG!ü¿8|áÂÅá‹ö¸p±ëÒCš‡s‡Œ‘#^I­ÿB,—×Pˆ/^Þ ¢åÏCdäàüÊJˆ]ÈpŠM8±Æþ9Ík¨ AͰõ"‹Ú‡{Dò3€ Þesÿ`åÒp†Lã A8aˆsLg€åuS#q}Í +ìã Ÿ»à¯ˆòpÃÙ|IC ÃòƒƒcåK„€ã¾ +èR°’oKMÀÀ{èÒšû:€ÚÌL½y—)Šæ4G!¸±ÿ`ÜÈrð¹Zå÷ò , lp› -ãß¾­þÒp¼'å9ÕÉq +@Lÿ„ËCçð«P@˜”°q8ü ~eàV¶G†Îœgï)4ü1tmxDáÉ&Z6Øvº±qÁøÏ˜}/lòæâò?'>XþzØO8ãß…Å–èõºu–Ä€ý$ ó7é’ü¡•œºM/\¼˜¹˜ÑãbfˆY¾=™†xV Y¯´ :€SÁ;Ud­årt ƒÜÕËpôÈEÁ/ËÔAœ%×{ {ÿ|—@î‘êXÃ\¸˜ÏO`I[ÿ Ðf«Â`…ããú“ºR ßoχØŽMð´#ñêþ!ž‘»‹ÅØŠãüåÊd\KÀr¹zÔ…cåK„R¡#?_h$H J¹XÔ«Á%'@`wI;q¼³¸`ÿAsav¦!@ök‚`=r6^ÿq,¶tù?Êü‚€ÜO«ÍH-ÒÝ».@tWèùýuÝôÆ.œÛ?L7a «eü™ÿ3÷O€ñ?/ èÆ8ÁlÚÄ + àE3˜ìÈŸÉ쨿&È€ÛpµØÙQû…@ [ìV`Ðÿb&vc  e +€ïAØ)¬´ÊÂï…U€|ÐöÛ¼–†›[®Jæ Öb>_lÂ#ÐD^3²sÌ+vó¾I«ÎÏã9àÍ}ëÁÊØð¥lVô—^!·ïÌSØT8†~™Žu8kžÓZ¹SxÌ0Œ}Hib+ÇðòU€jk›…G­.+_"~¶(Tî²~§„+(ýÊ¥ÄVNLRHT‰€°~€ÕÐI `Àbp[݇MPõ€5q¿ëøˆAÚ³î_‹„{éEÂý„ÿîvlˆèë~™,?&R‹pø½³S LM±ÜRRàdÀ™‰X£¹}Y®( Z2@‰U-€ögEþ32°êO8þ÷Áåü1’à.þþ ½PP@‹À C;(ÌØßÚlµ_Fÿ½ò +ò9€ ÊüiôRYYåeÀêß$ùœÖTÃVØ9j±1]µ†k¥GKGý|ð=>­>ÂFÈ_Ë>»ý®Fþ+*µ;_~ù(d< ijî…pŸGϯås„; Ø`/zµW2Ù+Ìû‹k0,°yQ'j·Âõj­G¢ð ×ùÓXý…ì•8ýKQè—ø «Áú«'qæ^!Žg³™ Y?ŒZGOÛGOÿúIŽ•/?cZë-rF „,òc‰’¯LÀæQg]ÎKÎ"™ìÑã#5)ÙÙ»Wsü§ §§ì‚ÿTñœ‡XíUún €^¯`C†ûÙ vS}€“žôÔ貟OüúçârŒsCx’ÍÎðb"?‰ÏŸŠ9cúÉ„¾4æ Ü7†®¯’í,Ø;®UX\ǯ™K…PP@õ€,àÅa–ü'x_ÜÉRï't>°-ãêuûöI ™Ävvùº»ïÆSæðw™ˆÛ½Paxæâ?k/d2âCÑã/£¶fGGQ§ƒÅ(Ìg½`µPa/ùQøn°Þn?íDëQø¤ÍtJaØ®MŸ’ªÿ@¼Âb|¼û8,äKa©}|FOy¼(ˆÀ:Xl/¨”V+ÈqBkÍs¬Úý ´#|ÝÁA%`¥¤‡†½U*•Ç¥ãc|íoðå‡QÈ6H°q»RbÕ!¾ü«ìS*|Ýé„Ñ_D‡í踭q‚ØV(—=?r%hóu:O莕/d¿`ô7ÿoi×è/ 6)˜”:&”mŽ»°§"ÀžzÙã´»Ëj€ýý»5ä)Ø.ɼáj»D%€”llZà`{7³g‘?qØ*4ľ+€ílÏH-0î Žµpðö 'À=–Ôã"{pÔMÅÄúÖwžé@?ÿÍDú“mÈz@Ч&øOúÛE愇ÂKÀ›3SìT„s`¡k㙟7aʘù§CÍ{€Ý®ØmÎÍmqÄ45 ÚÜÁI˜µ_lÀœß•ÿÍ@°¼|}¹`³ëËËl[È ŸË\ÎMç +W_SƒØ’ïJ«Ó¥R)ϱ}J…Â<›û®¾vŸq97}u>7}9w5Ç‘wÆÇ±‘k–Ëö¸¥Ÿ––±É80mÃòXCܳpý9X¾9_¹¾\ZžÇ¹žÿÉèø8Ï׺íáwò¬ 8»B©4]º^˜í5P„™®À?Ÿ~[[ŸŠ_ÄŸry||d¦Ü²wwF/ßÄïŽáHùAàjX Ð`š•ð•ü'0W#,›˜ª5÷÷Ù°0Æþ=M€Y–*™?°»h>@€±oÆ *ˆûÌñ9~Âά'åùxtŸÛ,ð‹û*¸’?Þ% ÿIhám~ é®ç*ˆýZÄ /€ÓŒ~0ëç &c®Á®fÆëPbêu²VÕ€0RŸ&Àò}7ÍÍ"Ó7ú›ôàMT00 àŸéÁÐÓ4ŽÛá¯ÅмÀ¯ ›<~öìwÇÏ~÷ÍÑ߇óÊÉÃö7ß|òø(¬¶Ú?:>þ¦Óùð§ýø¨R98£¼ttÔyÒ9ÆY1^K•LJ‡ïVؾð ƒ|–ùïs ;‚ÎÀqã¾<ÊfàØž×¯„¿ÂŽøJ tüìøëÎ?^?À¹Á¡<ÆQÿ_~Ì£w:_¿]Â&<|úäe +WzóKyüο?~öûgíoÂO8V¾L¸dêˆOÄÕä¼5<Š + ´B(M9Øsiˆ1 ÀÞþùÿ ‰ÄÞhÞ%WInÖlܲû Žÿ˜ $?žŽäÛu5ž!ý¹é's{åý$=e ‡þ€±™7ñÙ{ðÙ,oÀÛðÇ.¼Á¸}lÞßP ÀrXŒc©"ˤ¸`¨ nÛ…úíºÅf5€I}w•mšec9P3M',@~9)ÌÌÖTDc @‚¬•ô8€ÚLÍÀvà’)€‘»?:YPößþã¬.¡Ѓ!WÁeX_o­U"C_m¡±j믎þ毡 ó°ÇEHƒýbýúÓ +oÁS=Z©t¥g‘á6oÉoµØawlùl¾0º–ghuŠÇîÛ΀³Ü§"<®tŽÚø6ï=˜³V‚m?°~‡¬òËy‚„Ù»h8›xõ8³íÔÈ@7Àâ¿Ô5a?&6y%ÿ b|Þ\^J<ƒ€,Ì;»;é"À'ئ×PÔˆÒïX)À]¦åWÿò#óÏpÀp~̨o +Ò}q’7`{ôÔ°o«Õ¿ü›¿~òÍÓ«ÈeyçÍ:Ûó‘1G^fû>ë +Šì$ˆš¦a}âuÇ]ý›ÿ²rm8‚†Ï²íùh—ÚOøå¸Š +À(#YîWY;©˜?¿|¾Ã³òÔÕYPôÙæ8ž?(ü»Y[ï©Á²vÅïÀŸ—ÍP(À_ÿæožþþèñ¯b8V¾L¸„ó_Z ¨ìÏÔ›†KQ õ»¨©'iç÷#!Þ… ýrs³õæ2xÅÕ€E€]Ëÿkµøn Œ¡ Ô'qÿ€2xapšVöŸ4@¶c™Ã—¥áÈëÒ,&Òýc¦ ~ìqë=·€l?6ª`îåó0â´)Åò4tùφ®˜£/R=XHø/)üåÄÿO8¤x§p[»F~Fõ ¼ðò™`ŽUøCPÐß•Ü@¦ Îpî+p—)aÒ¼ß0÷7þS.fóËêð¿WHùÈmŒÀþ€¨ë­£Ö_=m…9Ö”ÃpØöÿ_Ž +Ÿ¶Yù†Õk|Û°UNȪCp‹ä²—Ù˜UÏ¯å“ 8 Ñõ°Ãoö2ð4øôýp¬ +|ÏøO¬\e?T€•RP +CæöAõ«Ç«•å/ñ=Ô·€= ¡yªlv€Oþê¯Þûë§ÕO>á-„‚#åK„ÅÒH,€¸ï^bР I`»Q³Š~8€](ÀÝ»ðw›ØßkȸŒHD–H î`»^ÛàM€l`í?´–€XãËÄ›'¬3þóþ ;cFüà+Ÿ.ÙÂ(ãV»5àÃT&N _¯v'-ÀZc5^ÎÓEÈa·@;’¾¦º„¦sêG”Á;–Ýc f@X”ÈæD}{ž`?ÀbÁ+à0z€ÈútÖeiîÜ—$À* +°vÈö¥ ¿ÔcnÎ]¥4ä{"3ºÔö7“ñ–·e.aê‚°ž<”u®³ŒR+êÓ罿~ソ®A@–·…åb±\ ¥À/­®²öÔc;!¢ˆŸ_DηÌ[ r‡þ 9&+ªÏç÷’{=aX@LàߨÿB¦35S@öùvEÀÞ—[úòãÜñaå8ðÖK±òz…ó-Ò°KÀáÌ[ëÕÖ_>•ôuáXù2a©4•`“€ãqkÌ<¤–¸Ì¨à.'æÿû÷ìÂlP%Õ²»®Fs?%Hz~9ö¤K À +nØ7ÅmHzË÷©b} +–ƒ»„ ˆ¹ ?y îã§Òû§Y<°KNKø„¸ƒÛYRdW³®˜b+«ä(ȳ]3€‘©9“‘XHð?@‚~®¸FXØrY¿{‘ŸopØ&^z9ö׺ƒv÷w03×H9W +hÝ×s!“R™² ¸èO\Ê^‹1„‚¿=Ø!Ô”g;ËSÙ°ú^ëè½Hýz©À +?ÝP-”BªÜVüå±)AŒ pÜáz…Ö»¥ŽSþÍçH@]@läøYF5'òK”€bq û–œ+×£G8]AXðý£2~ë7óÏž=žêÌÙlôWþ/aÏ ¿Â†@ÕÖßüÕ_>qÜ)_"Ô€°ŒKÉ×’-KÿH§J– jlÂÇir)ÌÒS{H~{ðÿÄ=bÿÁÝÆ\ÒPÐÔ ƒ€´êÕ“@öÓ˜1  pÛöƒÔçÙ³ìínØ©¡M@Ÿ"‘mãG"û}Iÿ7ˆ}>w" à‚£¿»€àÊ/¡ó#ºšvI‰9ð + €·âÿÇ[J|„` x—£Ý‹ÿ†×é»XγÕÜ›ž9€÷Ùö +ŸÛüG@e]tCÀZ@óVâL †7ïî*¥@.fØï· ü'濟þ—Æ2c—ºèí˜aPˆO¤Y+W[OßûªÜ¹ÚËó‹~ öŸ·üùmv«­\àÖF|H#³Ræ§x¡hÏÏ—‚®×²ïÝ„ Õ¨ž5áÒåóê üTƒöòûñŒcùØ=kÓKþ#W¢ùùƒÃ +°ZºÁž¾iú Ç­vpó˜íõ‹«æŒÿÙ±Ì𹌇 [GOÿêIà€„cåËD:•ôÑ1 ûøïúµ`‚É…¾Ö“æ8Ü÷\c@$6)ÀƒÝ$oÕ¶ŸÒ|kÛÆ&‡Án¾Û@1€ƒe H·ÚE¾`›O&åTæï&Þ¨¸„€lïià [R˜ý3×ÇO´°Ÿ{cb É{áøïÀ¢ê¬ Qt´€™kUMH.€ú6¶F®- €˜„*0÷ ràIʰà¤X^ö0å=s –ïq¥{À-™€ÓÀ´ ÿw„Ãs?²É]. +HNv¿òŠØŸªø#ÿÙôOìCêÆÔE_-€$@`Qt‡ËÕ?ÿ{|Ô~-B>š¿Æ†ýå€o/~x ðÖÙ[’@$&Ìþcµœwgþq ØÙ.À `Ÿ%fèù¼é_×"'—t? €}”2úD Žßþúf!Œlàs Ïw¾¬v‚ÊqÈŠ…ÿÖØ9Î>vþ袇mßûË'­ï¹CHD }3°M= 5‘€Yvm(¯¹K@ö®Ôs÷þ}µ`ùxpφ›d +hèHh\‡ªh `(€uð î3öWš²_BquW @Î0ÿÐO—˜–ö™mð•9ü´N¤©.ý ’lfÞO ðâ4&qN€DOÅ~ö!X§ñ û­`Rõ½è®ÉHN:€71Ñ,Ńiõ‚ +€«îzúû+ç8¶c¶»\C?¦¸@’_fäÙ¢T5ý3¸ti,›Å#F¯«GëÁÚÃj]-Þyìä +=´ô ¯„ÄJF„ç !À“·#ÄÊêÆ#ǯùäNìxyÖªÒÿŸX~Ó»F` + ¤Õ…9€­ç;€ž@éΛ-ÚAkûÝ墸pO²Ô~ÅEþ¹þ9`áYf<õÖ¬[«ýÌŽ·iÀ6ÿ­V„Ý£°róîZ~ùaËFñô8Ž0~´v€ýo¶ñƒO¦+ÁAe:wÙ+àhe¿ú÷þÍ3ÁCÑ,åÝiDÐaÇæVPøc^q};NXy:À÷8m\®ƒŸ^§(|T½°Có4,=ãn[üJø£¡ì¬ôx1Þ{Ò~åjGÊ—ˆ$@ QÆ@&U“z'““ [`¾%¦0,Þ…ØßÛÙÛoº!Âì7x/@bäý}Ù|¬kÅÿÚÆf N€ýQhÀrÛ+°zØÀÙ€Á`Äu‰ÀÏbÖMÑ#û’Œ ê0°]úáŽ$£Ð«‚”à@ì‹Ä`/l°ÐÊj H° ›‚@7€×µrHMLR½X-¼Ä¸Ÿlˆ«ìlùˆÑðxÞ›3pp°j·×¹¡áŸdHsE¤ñ­€¸ €BÀØ¥„ÿ}Õ€Œ+xE'ÎNþu;|‡Lj³2?ï³²€yíÒã{D! Ë'ó` +À‡¤ 0J¯~é ry¼ð¤}Ô +«ÇÑUkð +ÞûaðÀ‹;±8.ý-ΫÕ^Ë@þ^…+  ‹¦ÁÁOà‚ùÒ!ïÃß„óÆOÈv€<@â~4 Š_¤È0óWàÇ: +·ºòóc)Jý`ý%;w¢/¨õV2T Õßaµyœúu.PeIެrÉ+¶KÁ¨º‘ýËüÑäHä ½L‡>,ÂÁëã…O¢v»Ó™v!µS@êƒüörŠ ž\"6øóã"øÏ/d„"¥Áôa¥T +¾®JaçI»ÓžîD¬„xùßèÛ0&kU¸örí™`ei^ÍZǸܮüO8R¾L(y:¤–Odÿ³³sŽþ““3ôåä¿bpwïÞE ì¿§ûN€‡t +rà9äG‰p™:I8Lóo +°¡¸ŸJÜV_Q‡g`{ÁôƒÏMËqaŒrÝwä+èì’3ÛÐHÞH•û JޤjÀ3ùŸJ@J ¥.¹7n;ßév+À)69ÿºøC`QÀ4`ý oŠî +¥!k²­Òðˆóþ?J^È]²ÿ<™ëÀ0ØÏ2Îð%0B r„A¸àH¶'ÀL»\4€uË*\8ÃØpÛLóë ² O¶UO¶sàÉŠõú±¶ÆøFè-vöÉ:AH~´ €ÍmèðŠü—à +^óÞõ½©Biy¾”û»ãnÀÿäD3¡Šy€SBíëQ›µ–Eˆ›Z©PÄ?ú®p„¯±ýoÐéü”w1•æŸjÿ§ŸWè !ØRý ”%t8ÞR‘áÂjëi¹œê¬øÐ‘òeBÉ“I^@©T¯LÎ.9qˆù‰):fÿæ¶évövû³$€ ¼2poŸm8!o‡€ÿL4ÿi@ê« mð”ßã¿ÈÞ#¤3^Œ±] ßG¿ßãeà|}ý»Àn½u­p¬ˆÁ•³¶í›L²!>Q €·Wf™~˜çI(Æú=Š ê4—°‘' pÏ%ÌÜo%äþˆ32ÖÌ{ìΟûñ ð ˆD¿¬ý±µzùa_ ¾Šv†xû_âÀþn €yo€­â -c€%e¨²Ô Âàk¶„''©Ëþ@X +¢2›ûs3þbüÂ5áj"š~ìGae|$ëwþáY§]:>ÏOD|Îðù²Ømš:×£/!Wëå1\ª¤) ¾Íø[€J4ß :íß¿¶vž}ówÂ1ä£Õß=b¥5î5ŸE,þÐLÖ#ÿé}|ÿ‘óÿ„#åËÒaÌ~ [heR>aR0Soªa^lšÍÝ»wéþ›ÉÈ öµÙ6áÌÀåê»Y<À~:~ž8ðßcp67G4Òç{tt5G¯äÌ€X «n¾?‰!HDtAÈÿ³ËHCƒîê´‚Wήc²` ëT `@™ÿ˜°ºp"ûGRÌ/‚éò?@Jû­„ÕÜ+ èq¤?~ À¢9€ 8p @Òé.€’õ iìãÏÝeG\Þa ql¤¸£p§Ñ[€C‡Ñ]Ëg²‹ÆkbmC}EGûbýq­ŒY9ó^;  H¬äøzÔ6Þ—ç©3ž0Â# ƒwÛ¹¿=,Á?ðÜ!_ƒv'|tê´Ä*ÆpUðæR+:1}‚ßEÕ0È_šÐ?‚’ûýÀ*öA…$:«û¸ôöáçN _¾ÚÁÎ==¾ùKDôõ2}>Û e‹È”×£¯ªŸw\É„p¤|™ˆ£€¦]`¢ì¥¿H£ÛωYü7ª²!ø¯Ix¸¿Í^ÿíV äìeëÝ#ÿ±¤ñq\¨$¿Š +bÛzÒPø$Œé§ÀK(9ã×Y•ŸëÿШo {y®0F› Á» ~Ÿ—ÊUØ:Û–P+|Âj@:B%Ét²?v¶y¿ÆÏf´¼Ðì£ZœüÑÐyݸgî=sÅÀ¹ó*ô8FÖø…L0Øz˜ gA/ÿwöw¶»;;;ì r‡°³Ã~H l†ˆ—!—´ `LøITx>¾„÷ù‚(t„í°–¼kywêµàª½ùT!©`8_áØÁ¸´(Ø:px½pãf¥âås^»Ó +¢/~}ÖýÀ‹¼˜x’ü ¿ù˜š·ßýùAq¬v\h\–è (•J ;„~©Ä@É'áãðàúÍÃÏÂJåëNTýÕ;‰~w|Ü>xÊÓÐCÑc¨Ã»”µ.ÆW¾Ëa9@I;ê¸ÜŸp¤|©°”ï è1q²L’'Нœd•€æ=”ÿï¥ù¿ÿ€]Ía 1½ÞØRÖNÐ\ËœO0~a™mô߬m: |¿±u›3«?[Žêƒqn¨Ëfð?)ö[gˆÆ:>aXnàH”.†Ÿ‰¾r< ül$®»ëfB.( +Xë.7僗¹{©ÉóEÞ5šÏ_ÍrX`>{ø³=ަ¡B˜Œúø/ ×ξ»3ûzvdà•sçÎãàJêê‹'ôóù¤ñöÛaóú²~®Ý•4»7!˸ºw‡ùÂükì¼c43~™ýk¼†U×—§KóW_cg†ïêÕ«¹ì8?¿Ìn8®æ¦= ¨‡Ïrìsù2^ ËìãúõRéð§…ùÒ2Ç͸qùì{N™ï3þGú›àË"‡öKMË× óy­t=7ýåÉJ¹py_[*áTÂéëó¥Ráúòõ·—KØÉ°|ýúüêu®ÅC݇ð1Ÿ›žžçÏÉÍÏãkJó×ùyŽ“/ñÝ@|²À­,›r)Ò–”FyëªÄÝÆ?ݼ#XhÜ»»·ëø;€‡¼[`‹aÀúNÚ7Y `HJ÷4tì)H ?0£@õÐ=A*A ÆÙÀ¨ë2uûÝF}{Q;B–¸±ë|0Äç`¸](€mƒØ9 ×ÄüïwRÐǺכ¤3¾_¹’ÍMôÆ—òËVzv|?Æ}âÈÿ?ëÁfè„5sa¿å•s?Îä=”áUB6µÛúèØmU¾ý ¹¿»uÇ À¾ @¿PWöˆ¢¯™?D̾x« |ô×Q'ª´¿b\Èoáj>‰¢V˜ƒÌ!ÿe·àž÷k¹ïM»¬sÉŽÃ :>>怼• Òsuòk΋ýä<«´¬Ú€Eï‹0=…á×ÇÎãN»RY¡*²xíÇ8ß”õ?¿ú‡gÇÑÑ“ö2ΞݒµÚ(ú¢ý˜=žýú8‚8xÌÞCž~3½耹rÿÝ»û69ø÷€ÙD› ÷èÜLb®pÛ€)@ ç¤HÇ&› FMàjÿâj@›Dæܯ@xÌD÷´ +<îezç© +àNÓÀK£¹.“• îÕ¶b_l!Z:ÛHòjÛ’s±ãO °ŸÜ`I`ÓÝpäJd>¶ä‚#û@ˆ·§ÁQÖÐÍôñkµäœBBBÙ? +` §1ña°+ÆöÁöp—Ðm  €Y @›ØÅvÛ"何<ÒÅ â¾Ò ¤€•€ •µ +ŽaÜgÙßf|þѹ¡aÆþykßEdk8pvä<RËj`í +GïóÀ6›ÔXX37pˆ‘ÀŸÝhð,ïîîÜP  “LçæóøøMV¬"€oUä,£{‹ü¼üÕ€`,“yD½–}Û€l•·Vö¢yŽä³}Í„F9úW @‹T~#fÕX¤§Ÿ±ó+ù hÛ-®@ü`­ ‹!ÆžB4°)eÀ}X]Š ž å:Þ Ä¨ /y&#Ñ.}²ŒBAŽ“/´Â$(¿pºˆák¬¨x[ŸC¶¿·÷.Û%QÀæcñÆl¼½Þ¼çÊ÷Œ"ê`‰À ܧlÆüÇS øüS¡¾zc›ñO={òndô™ŸÊó[d‡_|¡8ÿpsºÅß‹.ùÏ:©@| m+x…Ù!˜9VØ¥N®6ùŽä9R§²b€¬Ñ‹A#çÅn” +ïÙ•ŸîÞA1`è•?2þ_€ | pþüèÞääuñ`€¸n¸s¿×ìPœ°jÀ3(B§ïp|þªååBÁ‹ÂB„ò~ñtaÔF–¯_¾ˆð««zÏ] ƒjGÃvy<ÎZ9ˆ®²!.Ε±l±,>¡Pànë=Eæýf¯,þO-À =A0R:7Ëå1|¯.UV¿º#ƒ¿Þúª‰(܃?0 +ÂoKm•4[Õ^îüfªŸ|P§rû•drœ|™ø›¯#MŽªMÌ-)É EbÖþšræßH$8à®Åt7ð½}:Å`î>·P«o6¶ïQLŒúV €¿A¹?Ÿõv= ê§;Åä4ûÐ5qZá0ðÞÛ"qn7‚Ë:?=¨¢rñ¥s/ÚOÀÇ“®À ìbÇÛ2_Ý™ÊUáO7.†X"JI‹ èI3Ëþ¥ÃÃù+Œ sØ.›Ï²aÀ¹óç†G²™‹ë0dîë¡ÔΩä׉~м¿¿··ËˆP °Ÿ˜Ô ¤'ÇùÄ 8@&,// +…ð À¾@Èm‰üœª$•ǶwÏ.Â(y+jñÄ;ÿ=Þ3ÀFDÑ< ¸²”Ï^)úÕãu†IÇ ñÙãø¿{¡Xô¬CPáQ«U…—_õ‚‰ h‘»ôøveçÌÙq´°]xV ªløƒg¹õ4ðÛ-¨Ï7Vñ‹bxžëÔûëߤ”ñh¥hµ‚¢B…e›)_*T&F’ÇÜ9k¨ÞMi8ú«ÜOb +õ :€½=0Ÿ=ïö÷U @@j8@ÀÇI@×ðQ3þó3nÉ6¿Ží'þCÀWðy¥G,mñL`N¡v €[Qðà¤q @¾>ÎþÝY ^sÙžzÇMédb †ºÔXgU¬LÌï=¤IÒ„ÙÞ›J|×z+þVÀ‚XðŠ5.ÄF8ÎlF`8“ç½ýº‰ï2y¤E8Îã# ”…Z*gÕ”ÛwñÙ/~ù‹8"4 ¹¥1Š’ìŸ:ÐÓðÀîîC€ ÀM…å TÇšÊ÷(ÅëÇÓ¢6ïü]«Z}d;7<øœ×üµjTx‚#½ü@P=zz†éñ6{¡\Ÿõ€ÌõI}¾äÁ},-.-ýe˦VBÖÊÑby‘ + ÇA ( ,´ÚËpìè oÊ€ò“Vu}ý›ÃUõÌ=ø_|Kÿ*O“æQXTÐ%_*~ÆØö¢°–)HŸKµ}0ö1ÿ¹TÛÑYàm€TÛäÞƒfm€t@à!YίoßSý>g½€]ST]`B‚°Á[…N±•ÝuHëøiHx òÚ¯s`$Àâ + +( UçåÎ +’Ïø=–±»«ÃkG÷Ï!†ÜÕ‹/¢¶¡`9¨n\à:§)X`‘ì®!µxo.ªä¨$Ð5ƒü7|ï“$ÀT ÔÆ%=åãæ˜~ä"€ááK]>wnx4ˬ9¨‚ÎZ#[cQ]èwŸ}ûÝwÿüËû ÐÔLºCÁˆù1\TÜÅø“–¯åƒ?yi"_t›¡`í(ÛÃß±ý°ûq­Bü»ƒv¡ƒÁå¬Äío³úg†Nþ+ó§\3°”wùë/({€uþ'À% +!U +–åÊï´£°Lðµÿ.OàïÅ @±Ç,'€C§_àÏHF½‘ò@Å”‘I1q˜<9C‰ßàrfås@ÿ=3ÿŠÞ×o³Ú€ N  #Øq8ÕÙ!Šf Œ@$Túg¿@pî“>€øÌ­»yw¢ç©xôPW?F¿‡ì¢(µ`Y\öÄÛœGµË6;ÅaƸ„µéK¨m?¬Óü˰  `¼'w&˜h8Òéï!›Ì/«Ý’ѵD”¨ÈtÌWV`¹SÄzÀiñ¿ÂØ_†­÷yÏ…‹ºî )ÂyhÀÇìsÁµ,Øþc¦šÆúÁîû»¼ïÓðÑ·ßýë¿þë·Ÿ}¶¿ÇœPE`âìh1'ó¼€}†@ +ü¢wY HÅ7¼¢‡Œ’ +X\)¾£PÿM¿ÃÎtÀøÐv>-·¯¶~˜ÏãÔQ"hýù:;9d¿eüd?v’$`"ë ®‘ß㨹p +5šxûo0i£X£¨~s蛀»ï:œ¤Š]¹½ýÞBögH„à +{Æ  %Ý9;§WÍŒµÊÿY=`¶½½…"ìÿ€•"ÅBÐÎ5\SÁMäŠsÌÙQ°ƒð0âÿvì§çT†ÕP>_…2Ö[PõšÈOþë!Æcƈ&䫺K\'@}!¬Õ1Vn"“âÈÿXRZ€O@gY½ìÒa¦¦À\Œ¯ m‹­ã  +Ä@ŠÀ'Àê½°Ý™ä1<9€kÈí•A + +Lˆ¢Œf^ %²a)Í1-Hì¿4xóÞÂÇ(`‘íÿÇ3øF?ÆŠ¼çgÇìö8/ŸËrâL1~=ï@ Røùÿ¯ÿòíoñ¿}F4 €;4}B³Ñ{7 òAJ[pæa8262s4°;1Îygqñuoô¥KYÖ^J9ô³©åN.ÒÞùlfÌ[ƒ«­÷ÝOàMìɨ_7þÏ^UçÆ2cÈþ[­/ÿÜ9€¾€9Žøk `€å^Pêu.0Ø$ü¯8J¾\ˆý–©€¨4ÊtÉ™€U–¦éì¿%;]ïý`ðl­y/îdŸn³%à–s›l#HцÉ*ð‘eéäÿFÍqŸN£þ!©­¬· ôT3Š[€Ì£®=ÂAˆMG|Š—ÈP vâûòB‡fu»8¯m>¯"^0KAÛÊ 0€ÅYÇm¥´ÆVòl0GÒ³åoéßÀɦ{`ÓÃAÄU€üEÙ¿néEþOÀŠ@$Æ ªÂ0ÀÈE%›¯  œÊîž ¹O`“÷÷5÷¾%ÿ¡ß}÷í·ßþó·ÿù/æl”Bdþ†Æ!Æ´Õv„_–÷Xw#¶¤ ýÎ1ˆû cw(„°‰€ºÄ<›}}8se$Ìç3j€¼xÉ×Á¾ˆÏN»À±zC?Xó£Î³ß}µ;ÑW§àMËôùëhè¬8¨L–6ÀÅzdW€>ÆÀu@ÀÿR è:Í è˜÷ÇJÎÀþ›ÿÇä(ùr¡l“$ÈÂ4kH @‚û×Çœkš¹v²woŸࣅŸ/,ÀPì5ës³ì9áp8¤-ŽRÈ $P¿°Á[øìØÝ;…{&Ò‘äGöOzóÝI8Þ ΄’€zʸW°›ŸiôTðÀi; +áò~{\ã»Áư5&(o`âÏwÀm'§xÙyUmk<¨SL$H2ªSÀ•»ÐGœ½%þ›Ïd‚3óÊ +4^¯Ê`?d€e$÷<<ÀƒÃ#äWôÍî»ùCÆ_gîŒo ÝP{'`ŽŸÑ¿žj€´¸4–»‚kÂ^˜Â˼p‰Í¢²WáXè=ìÌ—µñÙºW.–W–¼r¹ÈöŠ8嬚pøjÅE¯€i°øŒ¾g0…¤i!`Fü ¥üSI>áï €2ó½&ùßu÷îm׿Ô¨^Ã1AÖÖ¡LRHP(<íTöw1h:0€O¹?Èž°¾;1Ÿ6àx>HRÁ|ñÁé¯3`Æ¿ £á@Ýv䞃m€;È,ŸFtè]GëRA{ÄÀê­%­qW]‰ é%×ÅsUj] +úDY?X¼×¢•õSfÿ?–ýgòäÀ=¬$ÀFãÔ΀–i©c°õß.ctn;÷÷Ñoû]|÷Û ç’(Àxš`õzÉ/­V +Ùqþž~W!K«øÊð™+Ö”ü•HŽ¥ û±N9ç8WvÂMò—*‡ó‡7H{üú|fÜßn–*§VÒOñE{…¨Ý€z3…_‡„ã^qi Û±‚"uW†•òþå X\Zz§X†Œ€% +€JØŠRµ)l÷Ûu'bÎ|?ü‡`¿5vcKqrDzUâíËþŽ™sxG°½Gp»¾½woO‘€úÏë?ÿ°^¿÷àÞæl›66§Fq¨9”ô7t ÷x@ö"îoÔ7è¸hÂÛŒbƒÁÀò|úÿØ·'³ÖøðG¢!@þ'ÿ6o>Ðýý,p PѼÏćìr(cçð )$oRk•ÿ›X= øŸvÚ`fŠÉ‡Á1¤;òQ­Á#Þ&´z܉ÂŒ|„<¾¼‚Y> + 8›œ©a~¹Ê»â³»ùÿwÛ(ƒ—ð„çG™ÙªaÝ1ŠÁ§®—Í>8ÂSP¤ÌÿÉɤ€]š£àUW to­-²6–«²ù«üoäXAk`e­ÈÌ?X‡ ˜ ºv€ ¯ÊÃA ®€`àû)Ä€IÐBTYQGþ^ °¿•™2+ö@Sþ×lÆâü;n#“¿»}^ !ØÚ¢Pv ß`¿ÁšD~Î, +À8?x­‡ +œñ»;Ý9ÍÅËA +@î’Ì1Xp1þ6ó|Ìø*+’*¦ÐËÿ~ˆû õË£qî~vñÈÖ¶b®°I@Lð1ÃTó&Ò e ¶òÍ/,€ýÖÄ”|IùÀýVvàõ£©ÿáaûÙµR)Ùgý%¤íÌÈ…óçéPð'¨qŸdˆŸrÿ Ø?‘ÿ¿½Ããì½Å<™Ç{(à!X~”U àZñ2X¾ãM“òx^Î/½"Hàm>¿ UÔoÖ¢«í0(‡m¶ÌŽ[O;lÅ*pT–ù½S¾÷S`¢ßä—ÁYL®y¶skæŠkeµŒr€€*8)»“Z®À1 R¾ù3ÇÈ— Æ\ÏuHó‰`zµdÛ#SFYÎHÊ5²”w‰Í!mÜÞsñ}”\¿€Í9n²µ¹‰#r܆íÙ^ø^ó® œc€ÌÖCáÌlÞXß,“&÷Ï‹þ”ÎMR0Æ:>t-@ÝN'ÛÜÝðñþƒ€ýÛÔt†0¤¡+¦ºzà¿ëttY%ê8íì‚ …)9eJ€;òÿ>î“ôqþ$-­K‹€ýVEUûB?À02k +”›È_Êü„·œþ 2ÝlÖ B¿Giœ%ò,JkÆvw¬ÖßÕôãŸ>b íÔV!yø^Å+­ùy°LWó¾bX™ç-1ª!TF 9Ã,h/yáU|P\Â{ @Ü*´ðü¯æ£°ŠbOÛ/â˜þ“Ö_»Ã !ú \t¯=@!Ç8ðÖÚÄ +‹¼3˨-À?åVX¹Â+›ïqœÎޏ(@ÙòecdÔØO8 äªÜÈÒ¸ƒÞÇ”eN93ãþå½xP¿}gÇ5²Hg÷L¶ <˜nø©³Â@¢Ã5X ävl¬ÁbÆ  òc&¾[!àÊ>Ðú”X þàO’hîíîüñÃÙ‹ÙCü.`ÿ{ÅÀ®‰?ä§â¨)50« 80þ3 wâ¾J3¼gÌS ¤”’.ÅvÏ{ /˜²øŠDÆU<‘üŠþ)ÿýÅ.b®r€¿„$;†4ÉzÀHÞΑGRÏîèv? +Œq @¾ûŒÃÿ@¯8ÙOü•ìØÄ€l÷Ú~!¾'¼^Á6@ƒQÁ¯–CÅ8H(§ˆxg‚ѾUáªåòRöRþÑ{ÕˆwêXƒ°H$7Xp‘›eé—@`À•®x«¸ôNÞ¯\ÀÜIþ]så"@pÂ$üW$àŒËyßS+ BL×dñõŽéÚR·µà'x°šÎÀº/£(ŠHºõÆžsM¸{‚äbVÎûyÌÙ¹Y±ým¤’ÛMåîަ²?ûu°C›×ä@O=pÒΰ‹µš÷I€kÔ7üÑBB~â~s÷ãý‡ûû?äüöÖ4о ìP‚®¿ì·†º|£¼ÕP¼ƒm‡‡À©D\P¾oà±ò×Xñ Ö3½/à +Ë=Ii©'“ÿÌcþ{Êû%ÌòÿT0Ÿ0@i÷Ò%ÝtiŸ²k0…i–^}5;Χ£¯øß€ý×_PÀü}=-óÜø ÉøOC­^ \XËŸä1ŒÉßqX‡W½Ðo±Ä{$ÔhÅnú/F”ÊkÅ7ÇÆ&üõÀ:ß< ¢æ,ñZ“æä/Œ¾)Ãb8ž/¾U^BÄÏOÄÙ?€€b,ã, ÿ‡ àt±jb,µÕ6Aʘœp.Àfx8:¾|tS^×J¯Jµ|µe¼X.F !»ZvZ¸Ýˆ³vG,zäþ[[V+fyàf­‰0ˆè|°‰ õMòÝ&øÿY +ì²Ó(ÿwäsµÊtÁñ¿G†˜×wAððㇰP€÷%!:Nÿ{Þé"ÅÐ÷¬a1Ø$É‚«¼¨¼„¼MÈÅHÿ”p€73Srêõ;ï@nç¿ €ƒ(b +Îå < +­ø 5‰¾˜aþÎ>ØþW&ëd2c(³ý÷êðøÎn`úT{}ÁÑßÀ¾sŸ9Â÷ã·5”Ò€Y]<©$£ ý¥LFÜ2ôÈŸoãÅ‚úl0è~I8£ª¡ù†µñ +Šrd¶*òèŠïT‹+0lHÜJ7î‡ûE)Øð "%qüEÖ/o°†{Å¥²·b>ÏV/j°¸è—×Éürq Óù?ÁÁìHþe§y§Åpº•ÇÆï–ô¦Z%U6VOHoi7~+î ØA7û3PÇ êí{ì* ¹m1> @“ +°  ƒíŠc#s +Êê s‡\‹¬Øìá?y­‡ËîMŒ·š úŒë‡zÀˆ#vûÿ~ÿáGûûñ)Ží1°Î><×-7ú.«Tqoº“^€¹€Ü.äøE ¦pMMÿ{ £µ;ÇÏž=ãó÷ÆÎ]ÆG_͉#w[ÿ :æ( +pá 11 \ò'Æ&˜ïf3©,úLì9‡ÝV0ðKGø~| èæÿŠô@?&ð(=â¾§ÚøAÎó³`€¥€bP(…Å2ʱ´É((€­ª_^ #vÔ‚üÄÅ, ;xÿüä†3š›8ý(ÃHß›pù 6ŽCiËlzÒÛÉbÆ÷øl©\ M48×%ì1‘å`*:ÐOòq½kŒ“ÀÅØŠð{,@â$¨Z°TÉU/ ûO©@°_äïõÛÛöâ¿Zïß3@FÏþ“âØAS\€ Àpp@·€%E@z0V[FÝuÆO­ÒºXc¾ƒ?F×@>~Èl¿^èUwÍc;Öéµn]T9€tSÀÑjX¤®©›e“ù\ ¢6ÉÿìÙ7Äïž=i·˜ôE ‰ìŒÿZ¼0ÇÿáÆ&&.eé¹yÀ|†,87÷:¾éTpW à]ÿ6 ñ_ü³#|?(º!8v7J¥Rü,ñ'àäƒ|æâ%*²°×örí•lÏlPaàÂ[þ²We G™ŸTFâ_„9¿³Þb<Ü÷Ø +@ðç¬Ü ]„Áúñ+¯Ð1]à覬9`餠¯‡¿B+Þh>ð||5ydÿW²ëwéǯ e†~œÆð‡Ç*Š~Ào_“ ß-µ’ä³ì¬Þ–´µµPÏ ª`°q{Û @]!€{j`@pw:7¢&1p VÛŒoúcÃù|ÊgÑÃÿ»À˜—Ä~§¦?èñ.AÇh2ø±ÊîxÜí„è"ãs_`ߟäýñYh]Q<Þ P¤P­€Xˆ/i, SËo./Çô/ °…g–"ƒÈ6ªaøeûéï¿ù=$àÙÓNTm@ÊÿH¼g–$ŽýVñ8(à"YfF†Ïó†OÀ‚—¿ìà.  Øûì?³åß |û@9Ñë ê ƒ…íl6§{ ý ‹’ЛEkxæbÑ Ìe‹jr"£Å/ã&äû€y¿Šå·–&&Æ.ŽyŠ Kžãû ðœð——Icà2eÏe/^¸8|‰ñ/a£A\þü%^ÃásVŸÂÇÅKºÌL\¯@G_Îr§^ äÒã\ €à{ªÈoKyH­,“òqÝÏåÚP8o PŸšaýÞö’rì ³ûM<ÍMçØÐb¢6±aBtûC î¸IŸrŽ]àgäj_ @8ö;@úS4¹í€bí> @ Ó Lgñ_@·›à×ãì»Ý7Ý2é¯ÖÐo°€ÓHªå%/#™©”Ù‹nAyv‰Y`¹ ïÈÁµóÍ?~ÕªáïßâiX~â•aWþx@\p IšitŸ˜XäÍ4 ŒŒ¬ I"²eÚh€Ü‡ØÙÿÅ·'Û9üö ÎÿY pƒ™¿7Ø€ý8è6@á2?Xž>ÔCvÊŽ7iqŠ^æÛ÷W¢«7ÉxdûÒžÁm€Åµ¨”ó«ŒÄç'²c×VLÿbpî2 m’c°:븀'ŠR¯ _„J2NÈsÎ^Ô5‚¥2a5°÷%WΞ£Æö ‚w¾Oþÿ™²%L‰P¦”äúÝ%ÁÒ(€doA@ö Z¿iíïíí©=¿€¦ÀæP%À€£ª@öÓ@6m¢ý© €ö( tùŸ0Ž„sùu¼B4´Oln|<ÝìÞkî;òÜÞ˜z O †(jf؉°}3ç¶ì /£-ðVaòÏ‘^ˆ‘2ÿi˜@*Æ\Iœ4׫­'OZëÕ xöÍ?FìÌJ°dH ‰"‘âÁbîÅ ƒL¬ðƒ ÿ9Zw…€óÃF² {ÅË»@Î]—‡÷ï³À_œæÿÿõ_ÿåúc2%O`àm.È3Òá4ŽôFq€wâøþ£å@w9²Ømm| Xÿi¦K!Þ³ø¹p‰WÇ/ÃBœ†‘‹?ø¸0<Âàè…a6š"¬Þgi/.Ú%±˜@fÏ‹9ädã‚g!ðëòÃvKC +—ÿÍÀ@å{,ÿL”LwI@F–FòšÇPeóG§À¡Èð3}”Aüj«ÍÀE”B Æ@ľøÖøÛWVXNXÕs!?ÂO€a £‰ºHaDˆ‹£?A!ˆù=û×Y!0Ì‘¼Åò¬]¸˜éðüÉ£$swVá'~¢jW ? +ž÷ãòÉ€#â÷fϽ`†ÀQ¾_b Ï%%€‘Q8€{{}À|éšÕ€³€ÍA@EØ|6ÅÇ´É. æ`ÿyó¿ã?8o åÜ @p² ÏùÐÆúÄeþ‚c¾#¤ÀC;.ŸØ’{¦î+£?!üjÀwk“˜ç¸š‰ å9·%‚,‰áÚÅ·‚AkC“)}M€Ò¬‡GÈù'ÿí›ÿöÄA©H<ªeSJÆ ÿ¥Ì˜:ò+Çú+0‘©ÁÁ½ìøxîšÕ_Üe ´ð‹Sý?J{ÏuÂÀ_D:ém;\ÎEV×ùIF ñÓB–e˜Ûûøüäõ*V”‹k’Š Kí\ÈîPԈ׀ +wMáUHHLnãâ\bá—ƒ·Jcö^`ö/•?Ÿ×Џ¾¼í‚÷]d½Lf¼Ú„m üáI ÀñûBœ89.îNç[£¿=z@J&'gjrÍæ6€Š{{j#T‹€15b€mçÉsÝæ#8ú3(ˆáx »¿Ñ`Ù_39Nθï»À6ÜäÓg¶Ö•eþš ˆ¸4NØÖÄY¿Ü$ åtzó_àEå… ù•ýc²O LIÑ…’ +&…wú¼IXE–ª-އ‹—§ÿ¿ÿCŽVt·Hâq ”»”-Þ›(LЈÿìåñ|áÚµ'wY(÷Ù*pàM†ú‹F¿Py$,G¶Ûël„Ÿ£âUr9ÒŸùáñ—_? «ÕöÑQµ naP:d%dâ¨mýò^@·ø\[ÇÕ¨ûÙ5vJß`#üž˜Öéu!‹<9»ƒž¹Àv‘W&ÄÒ|Æ1‹ì©[^=`{!\A8©)A®Ž CÃcWð§ÆAõ˜œr Û¦bއßb¾³<6Ú‹÷ÝY.a#iSTh4·gG&){÷zÀ~`»6Ë„]̀Ўþ‘¼®Ènb€üÆ +ˆÏA$ä›hγÅú€VºObðfýÎ`ÿôÀùw;·š½Æ¿‹Çm6|ñÛìvx"Ïj<ø™Š?_ñýR‰Ã…F G%•+Aù-4â(ɾÎbóAˆu_¶uÕT²ÐG¹’wÈþF:n°pQ“@–\ðó™¡á‘±<%¼¼zN'c9Dø«Tðr@]^ñGÈ{árf5;þ*‡/ÉañÜeîÛøœ®°€£á÷¦HŽ—iƒ‘û¢+^4'R"à6’öää¬ëô†ê·)4ó Í»š¨ÛÌñpxÒŸ°`7ú +Æo@½€èVÁT;‰û¦ô8›ì2žƒbñ'¢¿"zŽÎý€¥—Æ û} —÷ ì0‰C§Øë9_7êöaWúFKÀyWðvT> _–Ä|Ö â•-~éHsEsœÐ¸Z€*â?éŸa à­ ;6– –ü¢+°c‘á‘E| +Íê"›³º:€?Þ¿/HuÒ‡ï~¾Ñ  Y$ =0ç¼?]ÑðÙásqó²£ßk¹\aÏBáêU~\™®”¼eŽÊÆÃä÷Uë± CM—c¹5àærÕ#È{/W¦Køl™ ¼ø ¼:Êyf„UxÃÙóP¿ÌðHœÆZð}$;2žÇÚx9ylÁÌ«XÂWfF²ç,$‰à~ÙË&viÒp,üaœHÊå¬7˜YŸ€†$aÓlR`øP2€³ß݉{w15÷X ˜8“»ÀÁ(Ž©¶±°0ÇÞR€ŸáŒŸER_ù¿+ˆè¢< '£h?cÀHgS~>-ŠTcS“wEs´ãÆV½íp™Ì%¤@€õöä +"¬ÀW1ߡϠ€K@pü¯2˜8€oþÛÃpìW¸OÀÿ›0çG: ‚|¶èMäב+M䋲ÀÌ…‘áñk‚q8XL$ïà„ ¸¿Ê]Àù‹[-^Õ”`` Ú…è²ó0Ì^ÈNà·p, dë\ƒß¶Ã¯8ˆøQ&ÃjãsdùÜñ‹Naþ í{ +p¿ªÆ?j?Z—«ð®d r7a¢ˆÅ‚Aà· Bž·?øÅ± ™ì¢ŸÉñ¦\“pœ7þyålæ·Y ³Ý4`Ç*{Kþ"»oÂc-7rå½Â<•·¢AÖO`=ü?Þ9Æ ¿O SÍùd†JâKHØ÷¦~‘J Ô‘†Qvؾ½½}{K#/è–vIØœ£ðv8(8^oÜŽÀõü*°GP·Fô'8œ(ç ¾øïêÈjͨ\tz@ˆ'òOž2`üç|èœK@|Wˆï +Üö€sšõðß‘°^dVl  ä '€ ¶ðÁW002JK@05Â#q +°ö«× ÐÄxÅÑõYàð©{ÞØÿo>;Á  ?²£(ÀäÆéd_gîüzÎñÿá9€û.ÿúnàZ¨!Pâx¦ Â\àGå²ï]²6÷îæþkääP–ëy§/të#C±Ø)”"µÒ-+àb™—€Õ€ìDp8S¦K›œeÀƒð:oLȲ ãXˆ+qI Ÿ ²9?w%›·ÐÊ Œ,òNâE†OÀÏá]×™ ™ |‚Ÿf·÷A+ÙÔÚÅ¿W(—Ç”8,ÚÍZ¶—ÑèÞ·ë ¸bàuãeÍÍÉÀ¨ ÝË“$Fq ¦þòçT -€€nXPoA Æj"iè¢?™¯emâ„ñ5áÁ;” M–l{*úŠä½½¤ÀN_l'á·8zyãRÞÖ@ǸŠ@yì‡èo +€w <‹T^H,Zª pÒ@NÆ`ùIÿý¬Àb_ ÖP=îN0•N\áÝï!²1×[óÙp8_€È^ϽäÀë´³ßØr!oû[‹ßK)(atO>œ.­y^éTÀ÷ òu¶ñaÅþ˜— &p<Ò_±ºƒ[ð,AÀv§VcÅÒ’-®d¯d¯d2×°ž·ðãj,-Å1GÁï §Ú¨Å€¤'vh7Çf<1ÏŸ•€Ì,ãL΂°B»)P`*ÇÔÙü€jÀúÆÂ ¾;íX2p.Û©òpü'袤uâeôO>ÀdòÐÏ¡1C25ÜB v1Ü·'ñmJÁ?À‡¸°ûœ6>¨;O°±Ñ€è +`ƒŽ`âƒ2À{ +A¼ÊD å°Ä—“1€j™#hœt*ù;°öÌwá¶g!ÿ‘êÙ|4œðÂ"x‰4ŽÂÿÈOÎçr£ãy¯„TÍ‘èØFšívvvÎtÿô!,àò?q+i´sþ \ Ù  Ã’WXThù]dí>Åù%ßñgcoP‹``%î.€ +Àq'è.æÃܲTDÚ0ÆÕÓ`àÒ0«Ÿ G¡5€`×ûc@™êþ½=9ú\€òFŒ=ٿͦÈûg!¤¸È4ph>\pà ލhWeób)èEòßI ›¦?ž<,Ž_Ñdlëî™@»Ú,†;—ß§b…”pO;)Ÿ¡;ÅP:zkNƪe¢uÂíÜÝ*û_b r·¬î^E&˜˜X‰"¼5_ÿ’e~Ç8¶Ø9Ëüv£63·Åûãû†8€_2ù¹L*ò^€±+Ð :k(‘kç$ÀÜÿjܺBØÝž¿æ64€l‚eë+º? °äOw÷ˆÓ© š ¸´6Ê!Åq`i .ÿÓ<iÉ2z|ÎóÎ@dò8%œ?n;~L&“ÂöÄW7t€ìß»û€]l_‡˜þ$;ù€ƒpnîØ™tá”V€¾·–RR€¯@:Ðú›üï‚á`iâÊÇÿüRE ûá~õÕ‘ øúñoÞÑäøOÀB΀ùwÈfX@ú ½µ~.CË~þâ. ÛdæêÅ6ùVVPà§“Ç:¾÷Š-”þƒœ²·/¾çX~¸Êþ‹, ˆ—™±@¦&†â…!sáåá—2W¼ñœÖ'V ×aY +¸ÞøZ«ybê®Àºù Û—ƒq”p‘µ{08Ž~ß?Ø…ä‡Ä--ïOñ¿×Pjµ¹©ÙM²“a.”]IÝí°··C`Á‡÷ù‚·'HÎæ¿É ¹N€Cš«i 9Ì\-©MºÇ3P“¯öVä·6<ÏOÉà„þ]ˆÀƒ ÄDëÕ$„oðL*ŒìTCêÍ ½66¶¶6¤ÌÿEž¶@Gµ“M^¹Ä¹›˜Š€ÞZ€1€õ2{Áêsßœ"ó‚ä®0ùü„Er1(@f43:2Ûâ§…lõS)¼æ…ìóoØ=T¯”ó‚0 +­!®Œ„_ £jp ¿%RïB6ˆrlônè¾îT8þký,É{-s¹€oÔölˆ+]]öñ]m~¯V3ÂÛ`‡~¬­á—\†Kñ²›(= +£6>>m +…¡£ß`?«ŸÍIMR + î `£9è¹YWKh?i(¸0' (Àm5R™ÂÊvÛ@?j³41°-Ž-°ÞжA¹ƒ +àh'zˆš|u·ÞY™ÄuôªÕnÅG¿CâßEêf +>&% Ú/ÞS_bˆÀöö‡Fù­ÍF½±µukÆA‚جá¬Éÿºè§Î%†;ÏÕ Ö»·š×ë&±8é˜|{Û/¥î\˰!ûXæÌ¿¸Ïo`h›ý^ ißÂ&,‹ç'€B"ŽÿF8€³b¿¬Ý‚ܱz@aH-}b,æ.OOŸÒXdÙñËl4ó'ã9¾Œ«ÿl7>Ó9¯¿š»š½<~¹0žËM_ÎNk{µÛð_gÃóø‡29ÿòôéәȟ:?’ÁIá8%|ùÕÂ4Þä +£¯åƹ¿û^ârn§†“ÊåñØj:7ŠÏG†‡±%×OŸq&YÌû~0òÓ0;Í sip1ÀÍ͹™Ù Û=72…¬:®@柕MFYàmð¦r¼·7 8€'(Hc>«¦ ([ V `…r3ýÁMÑGëD ÷‚Ç¢rül¨–žÓ\ãc¤ì]Å,ÿà(zİ´-pYþÖæž5`666Uø&À‘Aç“v€²NUïì ÌŽöð¼7™óST p2À @¿€¿´-øTØdXdñª¿Z\b– >‹¯+~Yy£².Ôa<3úÀò¸'Çÿ‡Ëœøw“µ­~àWºðßÅ;f£#l3—É.y8¿B~™cý” +%¹kT|¯T¿Ê5~©€Ì8_мg‚m±¯çsƒŠ_Yö¿à…Ê!”ëjöÒÈð¥‚_ñJPÄw]‰ãtA@7)D{+Ï]ÍçK¾7_)¼ŠW¸Ù¦À—âÔðŠçjPá%•‚³ÂqušvÙ˜-0.ï]®8 Ž}ß?~†램.T׫\Ejôß5ÖÛ×êÈáØ:7űÿ ëgðî½mö‘©ƒ¹ãÀ-`Cy» γͦÀ5 +€Â|s³4X°j?§¤¿@ ÍÅN.Š=˜¹õfLHçX˜Aæ þþ.»Á‚Á˜Ih?·gZhýÉ|{ÖÛlQ€"@- G¾µEsÈ…&®Kbt;];S¾³U ?­cˆ ¸˜ñŸV °^¨½íôé Ð*ÕukZgh!ë7¿ Ÿ½˜Ïe_e³V9€œªøtü‡4j\°Ní à¿þ¿¦jZŸPy:ˆ…óÏg³ä6ûj–ë ÇÛdñë(Qxmûã0=,\ó¡ +ÁYù›ån(â +ÖP=òW#¬Ì{¯g³—†_f›<6^>ø5!«›’‰Ð¿¼|àûÑrî┼Ð_a?¬pHkå5±½µ1‚,Gn4p[ø+yQp¦+íÂÁ±®ëépôû€1Ý‹ UÿÅZæÿ`.‰iPñ™ÚìiÄ–í€s®Ö.³Í&›5÷în“ð&+’[ã Fm€õ@ŒÿœA ¬Ì·¶À*ÈièÈPòÇ­$´ŒÍäGg>Ý¡Y¶<ÕسKÿÄÈ ˜±³˜» î× ÿ’#%sYFÀàùr²uX˜›Ã.¢?ï‘b¨¶@pÚ½'ÀJoü‰=èˆ^ù¥b988ñQ%l¬^*@ÈÍ䯙ÿsHN¯tãÆ >ÿåvš÷O¿ໟOÖtfÌóº(x#… ¶òտVꎼ A÷Ø(Á +…7ÑåÕÐ>dÌõï” +v½í{K8køù÷"ìÄ +@9€üÚ¨Bfü0W +¼ÂAr„Km{jÌv;Æhe”óZë4pR‹ù쫺ÍÑkæZ¸Ìƒ'àÑ(0 +ûÙ>-vièmD Ì©±I’.lÄ`¼FÖe»°7 :€æm9×HAôJû¶ñKbsøÂˆMf4? a;qܸvbÁ”Zo ‘ÁöBc®Ö¤÷gþ™L4P2Ünœ'ˆfl„ëÁ"ùn‚°…#ó–fò_1ráV<”*à€ì·3Õ霛à ¡t½;Gùßçìƒ&rf–¶€{÷·ïÝKûdMH÷j­:Á!qˆ%¹P=i`çaHþçóÙ˯‚•Q +-”ÿ!;»p§ß HØ‚pm…¡<ÊÈÉôzÞϬùËÃC¯°ß 0e<L\¡P<Ÿ¼Ç©æ®½;Š<¾PPh_…B-¸˜¿’.gã¿n×g§‚¿õt@²^ÎYûPðƃBeÈ/¯Y÷á‹ïHRqÍPðù§à=üçÕÌâ,°]»uƒ(ƒáØ÷+&yŠ‹ˆ¢di—©ŽšDi™r£Î´ +(Èg€Y:ì;‹{Š6]CàYöƒÃȧ (k· _†CQœ ” PÞÏzÕ˜³'}ðp~)æ—ñL€òr'˜tâ@I3Þë"9Ò_ÌO±°´Í ‚ú&@ý–¶éþk\²€ÆÁ$´¸²Ú‘tÊ:[,ðçã LÐø¡ÆêD9¢y:Àµï/àñ~JØmçîþž«>s`KVh1·°+ò°Ò`è‡w‹€_¼Æñ/#û’–@ŽÿrøŽ½_žÖ!èwN¾¿U›Õý€ü•œ†²ŒïŸWýüHÉG~ýcÀEPvŒ5îþx>˜Èáì°¼˜_ñGœ¶Îûùœ¥Ë­/-YG¼WÈïÅEV`P,‚\–wÖl€Cõ’… 6šÜ¥Ê çó—C,Àv”‚ùRP@±>p*k¾óÍ…J%3¸¼¡% xÚ”é0wp¼êŸ2q°àÕR €}Q)رp‘P†Ç j“i¼¥€ 0*/,hø«`ˆPÌØ"ȺÐ#H}Lt&d¼Š 0݃I r—ÀIC ñ†ù&æâ§Þè­ûP›QDÑÙ„€2ÌÕðÿj°¯;z7§Ø£ pŸ9ª hðîHB€Pû¨¦;[üoÞp(wª<ñ÷)©ðVèÉÿ7%¸:æÞ¯aš«-¼Ïh¿+Øá¸];€†¬J›ùððL`è…íYÔ e‰Á7À/y…k(Æf¨Ñ×Ô°/mäsgwç~sç³Ó‚ß}È45íÀcdÎç¯F<ðÿrW•@Õy/{Õc‹Dâ’?ZdC~ây#^6ŸËútþb°kˆ»ÄŠ øÿlÖÆú`g<i&ô1ö–Ò„»&'ÀFto$P´¡°x-¨L…J¡¢è²¿ÀË )XA¦ïGùµ‚ P£àdÓ +AËŠú§ÂÑïW@¨³étöO/Fjrü¯7,M’ÿ؃´a[ ËÀMö jDÐðä[¶ÙÓdìW8?3«4®¯ÁÃ2üMxi5;p”²ZBŒ×aèø¾«n&@yHÓO£Ê5]¯ 4åÿ|í}óY0ÀVî +Í–Œ ä% ÛúT8öýj›®nêISòÕÖ=]óŸR¿Q¡­S,ÐDÀŠìVO¾­N³(T;&‹FPLŽýÎ7ÐàZpôMµ9RöÏz’Aµ¦&"9ª£òÅVi+€ˆ¬=Å$NTxøð|n¯ ˆþ½ÀäÂŒøø€mÀ8cPàÍ1˜ÝrДØ"ÿ‰©¨ï9Ñßè>çŽIÍŒþzòÓõ‘ù3ûÇDpe@óV­æÀÌÙ–ÊÊÈ‹Uès^|‚©ì—®<ÖfFFG ¥kœÌˆÿ î5ïï}ôËoÿ‹ã|þåÙ­æHª~°øßW 0²äe_Ídþ ïR‚ä!JAÖãÝwª†ôüÙ»€Ì4;Î>4|œ5ï\`Ö¡ŠI²ãì\Œ U­¨•7`JµJîüjÏÛ]?졸.<¿à?^Á§–õÓNA ÖÙ"ÑG!Ÿ5}$? ¸†™ô(ðÿ S$DÝ Š‚©] ˜ƒtÁD+ÿ[göÃn„HqPÀ;}Ƕ¤°­…`â²Ý4À72Q' ÷mbùŸ­€ Þ,®ãadg7¼ä¿=l%À7&Fci€dàÜ9ñJÁ +ðª æÓhd@j÷vsàî¶k ŽYÀ‰YµÄPOø‹·ÈM ƒØ €{wëÖ, 2353s«v 粺‰”p=¢?Ï–+Pö§@¸‹8 4`ÇÀ}Às)çXƒÕãñÓ¬$€íÚT0‘°(ÖuP_ + [4?úl` ð_nÏ5v›“t ’GafæÎ F V>ÜÅÄ‚R-µcÌü”(Љ”$«fxšØÞnÔê[56¢ˆï²vÉ÷hT)þOM±4ÀLvãp==ð-á€c®üoÌXpΜx¿±ïÒc´¬æ &àFÚP*tײã(×¼·åJEïnÞç84àýð~ì„!ZöÅä™Ë€×ñzuw‚—É®€ÎcYä½™0›Ã’—˜¥†Þ¸—tÎÈäõsPh§XH8:"í8 ¬€ö7\mû£Ã…ÅîIaäÏJéÁ×Ê z‹ ŠP̬÷ü’º,fP»àzò¦¤|1º +áX9srìû€aþïsi‘U × ‹ä1˜:atñ³}LÚhqj +Œ"PNW”ÿü¨+PR,Àg·`Ób¶! ñHøOÐ ¶pÆÞMœY €®ÐÉpYô[Á’ç€Ä0ë·\n÷ã]lƒ»%{uáø/úש†XÚ²ðvŽ ù±€Ð˜›s-äøùÿ Àø?Cþ3lh$gÓgïí þóºÈØ*FÿÍ8s%hÀ˜ PbîPúÀ»léæb?q1&àºMèøMàŸ!ûMœQ +Cä]0•õŒ2”€ |“a<ùø±BVù¸Ö^ÊdØF`ÔŸñâBU";16ÆÂ6Y¾4bCK††¸€c@¬Éó8ŸËô~Û׃ÂÖK‘ÿeD¹N¥ð„ã­IÖür€Â@K[ûÑr‰W ÌW´ÔêX8œYôÛó–΂cß +º‰ÜÇd@ +@ÿÏAb0kSäúøIõX&¡ÈÁë ›ÊjÁã?TÅM$9«ÜàØà³ÍÍt5 3}N¬PK@¢^§ c¿HO~j™¯•DwKËÆ)|‚E ào"õ5§ÑÕ¾þ +îáÞÆpü—8Î7j5{ÕŠ¹Ú¦ÜÀFòc €-ä•nÍÒÌÍÌÌ(ÿ¿µ @nã±Àã²Ð÷–ýãáÄÁ8kMæ”3ã˜;‰À€û¬ß°´8€t à„ðHÇ<ô·kƒïA€ ù‹AU¿…ɱ"€ÙŒ–}а.0“¹äºß~óܸ-e‘ŃæcÙÚ0Z„ŒqØ‚ìØ¥12ÿWúÈÊå#Xýg~T)»×P(ÓD¬Æ[ñÛË«ê¸ +ø"ñüãB%d3¬3àØ÷€8Js&ò'f] ùÂÆ9µ…Íq"v"ÅñbŒLÎ[y,ðÆÔì·;½¡À¼ÁÈÔRu‚Ù)Ú ¶÷1Äüge82ÿ:Ç&Ü¡Å~'žç{9Jh3z08Íaq_Hó8—Ê{‹¶ŸöO¸Ϲ âÆ‹ôT€Ù…-Žˆ´¹µµIº°®£,”Ž›·þ´†üŽ]¯ˆÿ[°1Éy Ýülç¸É‹„'XÏU\›8näbÝZ9.+×ÞßÝgú|ÀAâR1€·S%ubUŽŸ ä»ÏLÔ-hŒ3€]ð²»ÒÌâ°ë??LW/(—›Xò2ãÃ+ ?²ú±1ðþÒX"0rTg€}ðp¤¾¡W.Bž1ùtr!Ê"¯};¬–Ëí£¯WýÒq•ÌGÙŸü/ €Ò¶o—|@Y÷(sÿÈc@ €€êpû~p·ª.Œ§M7·n`5߸ìZÿ] ,vÌg'g•MǽöX €•ÿ˜¤:2tp¦ææf¤5 Ü HãŒ,r¼`¶°ÝÐíÀ‚À&rÓqßæÄËÿ¥"°›ŒX-ô¶KÝ lo¹?wá# F òY2`yÿë3sšÖFž+Üš©¡LÞJ°åøÎ.Qà'Œÿêz… 8Ñ´à¬?ôÄÌþ°ÛŒŽ^»^r€X54ޱùŸ¬ üî—û€[Ö/pìð]Àbó‘É é0˾@Ó ÞÃäëóÍ3tøWàªUZÎŒ,j?œz–#šç!y(?ÅÈÁX5 —ÁÞüøyÁ>‡áiç«ãè „ ¨úQØj=yúûgí£'(wPè´ZQ+luZíV5lãBµÃNv:×K;èè¸ÓÁ¢ÿø,8ŠÀ ”ÛëÖŸ ǾH*tfðTί2Þ)‚BÄÈüux>Ò ü>ÁòÿÙYö:ÂŽGÌm§@ßPŒí#ài¯Óµ•4@¹¸ÎX`NÓûl0WÛþÖ–…Û¢¸ƒ~¦T G + )Èñ­[ ;RP~{»635Ç|œG„æÂÌ‚ ›ÿ ßh¼?õ?MÎvù¿uÇ*ÀÒ ä¸¬>ö/*8`·é’•±HÕ¤ñ¼À»=íx7›º`ü߿Ӹ¿ß¤à|ôÙ/ 0üó/ÿ×ûæØo¨í`‚Y¾–<ÕˆÔ°Ï%òŠp9ðØü6©€·5¿”×Ôð¦“/ƒ€ÖäÆ +¹#õÚ½ë7‡ÃŒ°;/µÇ%°AÑ:"ï¿}0Ùç-Ø™o×ü¨Z Ö«ëáÓRØ +Êúvö^ðØ\!Æ vœV–©Ö@}à8b‘îµ>Ž}?ˆ(4¦ ’ò ЭlÛǾçFÃcfýVÈw‹”@4¸Àï‰@¼? ð&-H/óï ‰ÎïLîˆ@$ÅËÿ|ˆÈ¦|öïó{È¥Úý!|8ØÞ‚í…§ÍhG ¸òú¶úÀõâ=*¸1wØUVâ$5`\ pÇøÍ=u Á5º*·’•Ž îZ € ëY£°å~P¿GM ˜©m7ï€É°+µž¼ÊÛò7­Â?…YàXJø¼Ýßû_>û¥Ãgí3ë¯Õ @¶qŒ!£F‚õ2ÒT×ÙÞ—ãx~ùóæ¥ú:´¶û\‚rÔb/'aø¬ð›GÐã£öüüq°Vf=œêßWñ\Îû^ÆËzë&-8¶ˆÒ)àФ±è4$UœÌúñjÇøÏ&þ#WÛW ¡X„Z•ôåÞJX)´¹‡iŒJ¶Üú«ÖsáÈ÷C€cKæH{.¢%Xîh™òŸ=Œƒø¢öè?Ëœô§ùo€çd»•,¸ftô Ö¤jì«„$ÿ_W쟬O @ÛO:’Ý6’0öâŒõÁûPV«Á€VÌA»ìDq)†i‡[#°v “·øãÃuÈ7ìâÜñß­cZ6omA&'gÙH̳Ü'¦ºÈÏ9“•=æ‘u¤ëþ.8 ’Â`f €ÏÜÌ\³yg—M“¶nÕ(4t›ïÔÞ·>ŽØcçu 3ùýÆ-|õGûîa5V™ìö;ñ) äêGrÊrþJQnƒd!H'¼»G +àiák®&´Û¯U:¡ïÌ~Õ¯àûã>û嘕wФÝê ÐÈËk~™_ þíR¹agEoôF‡] 4B ðõpAáçàçxù‰±‰r«õ^µõ×GsÖäÈ÷Àë+ˆ©²äqw€³ƒ`’õùt|‚%b2;þÈvV @Ø`K'€˜à$ÆàØ^ß´ ú@Ù½ø/~sf«l=Wù8j,€hXØï/¸% »ÿg”å ÉYÑׄLÎmö)ÀLÒW°ukKŠŠºA·†@„è¯6€¦  þ€‡ü°ùÅQ6 L€èÉãt[ì!õVªöžå:€2³÷DLPêhÜ‚Â|´ßø_îÔ¼2àdPlîÅʺé†ðÕW¸æ?Q=b.\ Û…vˆì;¢¯ Á-»Í„]µóAH@÷ßÅ¡qjÆ)àw@jN<¹¾´j€7à¿Â~ð$—"æí‹(`ŒT"œINH +ŸT–#ðê‚_SôòcKåÖÑ{Õ¿t9ýipìûÀêlbƒ]Ðß)€Å6fùA q_ ÇXþ“9£ŒÌ2Ì/ HÀ¤Ú±IКlæI à7jYß 8¶ƒú𥢀q=€˜®'¨ÙëHV³ÿi€'±%@@c àøïà¶"¨ü¡iò±P¦ÏHŒ¿‚\Þ®Ï kßtüwôÞšM;˜tÀ ŒBâTN ¡å6@|uÀuÑ¿ØèZÀÂÄ4`ýÃ;Øtg¦Ü…b‚)@–Çü¿UsCº7› ïã£;:bOv®Ã$Àà£ý>€ØÃ–‰p›N3o¶­#uØr”Ÿ—Ü ñh¬ž ƒàI«r¡=Ïe¹¼þ¤TâèÀGÊÉQ€X-y+ËȇÙkP¹úk;:t;}ƒÚõö=o`±¡)x»æ–$àO‚`Å[œÈz—KQµ\m¯<›ÍIø;‚Õåˆ%žöXÊfy»Ð£j«õ—gL?$èÂ45´d·"'aä'H-ò$çs”@é@‘_ìW% &à(G( +€ç³ÖDÐeùò¶`2ÐuÊÓµ€#»£?+´dt$N*3~ÛQ$P ½†;AG‹Á# €²ê eý(HXØæÐøMyûÍMvÞuSi@Ë 05ã Šë’Ù¢»¸/ê+¸&FXâQLÄ58ÎåšÇG”uH Žô8ÌtŒ&$À9²¼Gz€àEM@Úô {ײž4¦c´Î‡ƒÍ›Sÿ]*à“±0Aµ3ÿn¶>èó_£hÞ²Íu£‚ÀÃJN¶` Ì ª + ·9·=’øA˜+ù(ª°×6ÂZ|ê±³(N¢äUüë.H—ƲEÏó ´~@AÀŸ¥,€Ý²£‡8©Ñ×X ÁÑ‹­‡TàÑ ¢<Ðu³o0üoÀò}­¢¾¸CF‹) t ‚¾Úè?ˆälÐÜJæÓmJ˜2WÛß¿ë¸/¸bÚójpq€yÿ”„âh©w¢ ,t÷Þ‚˜œ«In™ °VEŽþtÿ ¾SÁø/ga-åàÉÁ6ç¶¡k€ÝÝûûñtÒ¤c·P0@(8Û€ýÀ2@ãÖþþÿJ€/ìp5{ ¬M˜ñ²k- ˆ + +á« Xž[¾»æ‡1“Ûó•Ð/Çþ|GÐúª[–÷VéØy3î¼ã`ûV9Ûf QÌ%A@è¾|…€ptÏ{Gù«!!h±I0¾‘­©úO…p\)„‡B= +u{·']WVJÞÍàêo´+™ ÏpÜ6¼œ1!dþ±úLù+ùÎõRµÊ“®òoxÞÕŒê àC‚Òõ÷ç=WEß[ÌfQŒÀy‚ågLù~`U©Ì@9o -ÁCxôYæòJ†„£¿ €š¸ˆŸ¢€r*écÇ7à(è.ä ³rŒࣻûJ)‚­¢¶iHòý¤4 žÆ"Àµ˜Ì¤ Lžâ‰b³X +«Ðc¸c¸x$§©#¸³ áw(,ÿóͳvë(ácvæ„`³8€[ȃQP5¢D{9 òãà[Y€„ÿõo" Hº]«›7°ß˜«½;»àŒÀ–b€ÝZ€Þ +ÊÜçn¡l‘®HÀ}Èøæ­;xGÝÕìsÿ€SÞDV +AEåyñ?ŠàðÁ ‚£ð½÷Pè¾ôÃÃé¿… °xýDT «,‘{ÞaáXUª? 8bú@°Ø0h*ùl ìåxJ¸r™õ€0üÑ8;ò¯¶v­P,>’À—Âät簳ĮÃéEŠp5KÙ ,â4¸{ nä½Ïª#ß. [;2жDö²³nMä„&•ƒ6€à ¾" '¼gY=3lÆ8 Ò³Bà?%ЉýRNâ>§.\ÆKÔEùxJ€¯Ö÷ãA‰pÐÀö1Ìnùl28[C–•W1l{`¦9Ü«@Ø|üi>ŽÎá÷ÎmmÚä¶ãív3Á=`Ê €zÜï´v@Ìûk¬±@–Íw|HÄåób € 6¥ô@~àÌ€OÄX3²ßœ“P¥$Iãi¶ÿ¨ [øÌ&‡!Ð"…5ý`åkì;ènùy‰ƒr‹w9 +Ð:øóp|ý v¦ÿŒ˜µG­*ã†$櫞׎JmDE‹²Šƒ-Nèï{eŽS*©ÿ«åh<ë‡Ñt‡A ï­bΠÌ`¢WÈf²9z€vPê8ac\ Èe@¢ŸG¾RÙ>¿5.òÁ²ÈIˆ`œØÚ—·8°j°Ïó–û¿Áúæú¬&ÐvØ_21ì9a™So n Ô<@—ùi ùù°*äþr8)ž´ I“Ï­…÷áæØ +À‘Ÿp‡ôsh ñ+=L¿šÿšJ±OˆV/€Ù³â3g†™Ù™÷•Ç Œ>¦À¨|Ë ¿Õ²<ÕðÖe*ª‡Ñß¿†‘À>`Y¿Ãóc1úb&BÅ=¿£{wÀI€Oq`»hJ2𔼰2¨EЮs|$›ÎÍàZÃ@`ë›Ò|¥3ó øßj=y×ç±^ +€;*K§@ÑþAv:ž‹ìÇåG ›öÛÓ¿ÒÈ) ?ÌÅQ¤V<Þx˜GæÓÒ—ØE1Êei_Þ …­ôˆ éɑ2C—þ¶ÈÅJ²wÆ>D$‘idÂÀöÃÂ(Š C8ëA}ò_Ý€±€ýY+Hê§ØèkD|6pÆ`)€•)êFrxoÐç<3~Ä’'Ò7À怳sÍOË^õˆá˜‚®)€,€s“©Q@ðjŽ!BŽ£%SÞ,G¯F€¤wÜ€8ÓÛZà 8pü—4jâj,ØÚ9€®±¨Û‹åµò:[é¹>púÝ ô3rq +¹.Ÿ1»³7€tL ¿Ú~ ï+æOF:€ÐoÄûÈ`C’^6ÀÁ@i޾‰_iK\pÜ'`‰ûê¥q¹¿ßèüp‚¶Z tÎ1•̉æ†*÷;ŠƒÛÉæÝ‰Ìh½¸ÈÝs¯¹Ýä ìèkŽõ.,8CÌΨSP  +þ>8g5õ> °V€Æÿ®`- 9p”)ÿU €ü›¿v68\ÈóÀàÀÉvÎ,pE££!úŸît˜XŽÓxvµÕ)~»süU yü'àÞÁ|x†OŸµü÷ßðæzâ¾ùæÙñï;OÿÍ?V ‡?­àÖžw~ß Ÿü.lGapÿ.:zöì :~tÔiÿ‡ï´;Îoì¦û>0¦8Çøòo~ó$*8 Nñ¾ùÇããßµ;¿ûǶ7~ð'Á³6ÃëÎq«Ú~DŒR´£ ›­vZígÇQ'Ä×¶¿Ô-BžÇxÜyz6û~0Âi9Å?"æ¿è›b-Ù/N¨/ÄÐh5Á"U"À],`Ô—ø9—(;˜ð +ªÓN‰ÀîÛ«íkÈù4õqß&¬'TQ`µ1™bÕ²ÍQ”Ô Éfv¸Ô»äå8êè§æ±h6¶ë³S´öâ¾&7t¨üüÖ­9W 4@A”lsl ¤EÞXs5€ãÿ)xk.€~‹Àóc†SbïÏ2` Ïc˜ÿwv³l•ˆ·”ÇÿÝ¡ƒ4*7+A€âöÍÊ*‹Ý¥ÕÒr¡ts¾TÚap†(7ýÊòuïÀ |¬øyý»¯?>hW¸9œÂ!ˆï”üÒõRÁ/`Õ§áÁÍðð:V *•›Áª¯©Ü€Š—88ÂOK^‰0 +…ÀcuâOµä‡‡Ñjáj¾°\º‰ïf‡ß®ò™Œ•((yGí¦¿ZYõ–óÙqlZâ­Ãg‘ï‡ò‰‘ù˜fÇ,ÌÎÉÌÅΑoâ>s•æÄ¸ó#Ìý{bäâ$ˆŽc¾Aúÿ\÷bœÐÅíûÄzàdæ/@ŒŒ„NGKâ>=€‹˜à3~àt¨š@)pᎪÑè0€È®Ãémw0Úk’@è@¦?ÃqN™ýócÿÌÌœõ +, @À–@¸¬±Pë ~¤î ª%€ QÇ @*–8€:{:|ˆüù,0¸€ªÆæ>Øÿ˜çÏ'ŽìB׿ËNNðÖ.mâÅ hup°º +)ð+à°(ü_pøðÃë_b“ðÀ¯„$àAØ.<Ž|ñ8ñ±ê›‚å`úM|ú8¬ðá‡QÉ[eîýøÓÇ•Ji5ðñž~yôö§7üÒêÍJÉÇ7³0*„WGa…My„ + ÂЇ +KÙL¾^ÿâ HN8Œ‚‚†"@rT +œêœG¾H7’=.ˆƒn‘ŒU.Ï%ƒ#ÉŽL½ë¤"âÈ9Çk6üŰìqÌjº•ÿ•0±0 /L ™oru5há¿b¸&|ãyö +Še1‰ý*ð\õÝm‚˜›EzVØŠé˜`[âÝR«•ý“)v,€òµ™©©¹M½äÿY(9n0ˆŒF¦ŸÄ˜õã3<Ô ˆ åø•ýÓ¨/+Ä_ëøßäÕw(ÃÌtªÐøpW¢27³ QˆÛ89Ì˜X-€èßL°»»5ÃKi•„]ð,'äÿ#ö¬÷OŽ#/Œ>[뼿³¶;Ñá£ö“§O¢ðs(ÆÑqéÙ?† Ç¡ÔÐŽ¾Ô=úG°é|´ž´¢è¨óU¡ðIø v= +CZ7ò€úÒaØ%v|Q*·££ÇÇ…gÛ*Q+ª®ãÜ[-hˆ¾Žü½Ý®f³þQT(áÌÃ',ŽøøQ7<Þáü)y6ù~ø©h\WÉßø‡UFÈ…9’\â —µ +ï‹üD¼þ܈˜o +0' ŠÀ °`à&6 ÿù½ýØóùä„Wã|t$·ÇñŽ}?nŽì@W´07Ëfi ­6ôêÔ`=jF/¡2…8o@í {À.ÿç—Å ýz2`ËŽù1Èneÿt,è“.耕„xýÐÐýæ¾M* Sv])¶·Pt×ÌænFÛïÌ¿$`£.``%v¤7ÛúG:f¸r`òæÀ$@ Ì¢}ç莇s”ãÒF§ª }`Ï^4ιê¿`f±ƒƒ¾ØÙÝy÷î<ÏóùV±(QJÏg£yªT,Öo–¾Ïó}¾¿ëÍh6ô§*ËØk…ƒ¶‹Õ™YÝñB®²ð¸Æ2CHD¡†ã8ÀÙ<«%ƒ+ŸG¾³R‘„ÿ”HO`«e^7(,—È)A‰•°ÒÀ(× Š>$?¶â2t°\r3`?¸1ÒõÆ|•‚ývÿñSn0+ª9góZdûø¡]Æà{Ý=Äo÷œØ`]`‚‡:ðx^);ÿ¹1¶þSÉU-!»`.-I +žÌÆõÊu6^4uÁÍôœ¾¿°Xo®,ær•Å> €ý^͆e‡°¢H~ùÎÄ7¦ÇAYsÚ`> Döf ÀÀXâŸJðsŒÐ<_‘Z +ä¼Ê›h#–ºÀÑè)p1Ì8Ä9耇$I›ñ9ð“ì×Â=‰c¿viûؘupF À¥ À(7p¿Aãl§ðI³®Á¥ì#x“4 ”@÷/ÈÀ[©”4&ÖÙ¨³å$¿—d׈tl@I(9YL #“:Ü‚yeöth‰`6]ênå¶wF9€ÒŒ }}â oAYÄ~)¯ÉcéðHÀ •dù߇÷_mA#뜴×T-Îú+ŽÃµÌJ÷¤Í_6ö{øõa³š/âg±ëø„5?˜ã¸¢¾*òŸb¾yÙQ€ _U#¶ïÃc ŠçÕ‘þ¸úLHµ‘ÚÀ*¿‹Ø¿xñ <°Ô‡èÏfƒÖ.f§NŽ|g*0Ën +0#Êž¸Š€ÈÎ;JE‘гeÿ+%P”Àö& ~‡œh+˜Ì¦r Ï,o ù¹ä™R¬ºÛI øw³ûXM'*‘=‡ÍX¢8ÿ’Bì;âÀuq¹ +Ë-󺓫é,}w+VùDzÿHX¶ îÜã (_¨k ÀÌqP‚0àR×V¼°.ÿÏ>ÑøÂñKÉ|øz,¸Ñ&²_È +˜×ín"Ž?êø @ôÿ"<~¬žÅÀßN´‹Å¶2C°PÆbw\‘Gð0s©îk€¯¬˜œ:€ƒ,ÈbÑ%Çàb2€ä¹åóªJØIpüoöƒ &ýq¸ÇØø¯½ØêÕCøö)Ô; :m$üf< €Ä¾v‹è¥ ¨Tàö—ÙO@×±< ô~áÙÉÈ€-ŠØºÀŽ<Ž|gd›¢{,™ Àš96àÀ½ê¸‡äš0p†óç'𧙉‰WŠlÄ3^¡†X€”ä×ìN¤çù‘L|5 YfáÜ¿›ýå°™Ò`{É^íC u +`yrN°¢«8ðø„þ\ê &Eûd¾D  h#öç v”XÃ?ÅL©ø2lþà¸\bM Ò†ã{à%yQ6:þ+ÀâþÛØ–€äÀíT@j$o tJ¢;`€úÑ·-OSC€mzÙÆ8€û€°™ À5%ð ÔSv¦À²ÙÀâ’ +¿`¦´e;žåºÆÕÝPUêHk`÷=ÖñÃ*ŽƒÀ +iO÷ãŽdÒãÍyߟÊ%èÀ(àð‘ÀÕÃÏfC渌„ +°ÒŸ —§*lÛ‡çäVöói9rÐbî…Š÷žÇÖKü=L`õS& ¸dÜ¿¹$Ü +Ó4£nÄþÆ~@ÔU=—@7@˜8Xž +–ÐP ÊÀ&ÅþÎp#lÖîkÆîÕWöǹ/(â?ê0›¸mœ ™ rzÐe—äeÆìtÜQ6ãWK 5.œÿY)«¬p·C°¹Yž)1w÷gÈÿ€ttõwJ-VÃk!€J^»z$$"{æPÌû»dAÇ0™ðVy‹°H¹îôÁÀ=C€À-Ýå0cgqyü–J€ÐÅëdE€äEÆ\¡—Aq­*Í{S㛋ˆäÅ?†Ð$¸¸–qðÊánøû)2ç¦ ÁJÈÆúü +{Ô¸˜_Ð7A‘ñˆ‰BÃň¹φ‹sÞB’“ˆ‹7?¿Ö§¦©ˆú‘`ñ ®!:c+¯¨£\À¶t&Át?E€{íÛ´RþÆ­1ÙãŸIˆÛéìuJ¸½ŠÌµ¤0ØC°.–nÓ°îª ¸vƒN2Þó›û{nÌøí†ôÊ\@‰ÿÒt û7\^øÛÌ(ß$§ÜfºÞ¤€`ã~ç¤(4¤:éOþ«Æ’šÂ1 ¼Ÿ8 +@ÆHÐIK(z‰%%€âp:vô‘8€÷Ùn‰pGBRœ`†Awoƒ-+Y¤Ê,‡a€ÁVŸßÕJ%—»È‘þ+•ˆ£nµ^\ {lЋ/”J@Üã&œGÕ›ÚèA“½sÔ‘ì^€G/x• ç. úÆÅÍVœÞW?2‹¾J0­/z¢zÍ˕닸+ü}OÀøæ,×½ €¸@t†Ý$ïîÃÚE'ã €êd! ˜ Ï¥#}€ÈOw•¹¯5µ  À€Eò\¨?&xy.µ/“`”OÁýÅÿiž¤WvO†JXùGš±0$ÀþÀ¶;>+ñJ¼`ß´Ñé¾cì'ÿ‡2ÝIÇ€'{[ì'@YnÞ»Çl€ÍviºÜÖР‚èf`í['rJ wàˆöÛÆ F°Ê¨Ÿ¢[æ@*å˜`uÆmsøZÚ ×w~9€;z–$ 3ÂpˆÏaH€ÁpÙx°ñ2tH` cF +‡ÊÔõ|>Ï1zrlüÂT…í鲎ÿU¿Æ +ÿ`x©âöû»ûÑgqÿ ŠV‚èáÓzð°× ØšF}ƒ±Ð=Ÿq|üÙq(ŠÆúnqÞ ß{/8:‡&ÿ«x¾Oæö`êñaޤ¾èGý^Ø„49lÖèêa¯·’¿„½ZÔŒz›-HÆuuqÑAËŸãSsűï,`X@z%ܹÊä …ŒŽ2y¦ø]  ¾ú8ϸœ)yçá ŽÅ,x…)WÔ0Ínˆ’Ÿ7ÿqO5ê»ÅHðÒ€™Qßþô„VH{H~í3^ËHÀp€®Ã‹ê‹®nßÄRÌÆÿ6{/‡ÿg& |‘ÃqHA·n[c€·(üHàÆÿ ^ª iqƒµÖÀyHÍ?Þ<6h«ƒc)ˆX}‹Ùü¬J@€“îtœHÀ@÷C—îyYŠqTÞ`zä$ÌìµWÛ«oqÌsÐ|[@ºE +€9€T&^ÈL`½Æ¶±©ãc9?ðªU$™+ï0È~êºh„á›Ñ­ŸíkDÎÀ'-÷=DÙžÆ Ä¸yŽ2š€æx£c¿§ ‚µH8Ž}6F˜eÝÿ÷b“‚F¾éGÕ ŠÁ-RÕap3ˆâè!nŽÌå*•ÚlÀJŒaþ,ŽWjóUrÒkø__Ñ‘ïLÀø”‚9pâ¾<@yÆU2úgêÞæ¬€Y€ÌÍé@mÄõd:g^†@î2æZôE°™* c Ò_Jt¤%èÌNŒ¶ÖPI·‡ô%ƒ @g®N¥wè†ÏË _ê'­õ»{°›ì € -®×-¤»• ˜¸ç/Àªøû†¯€ïàúª>ñÒKÄ€20ÒàÑ™ÿÎLJxG€#†çðG·Ò<€Ñ€9ûæ†ò˜þçÌÇm::ÿÔPZÌ@Rû½gÓ³|Ï?Oº¦xž£ŽOpÒâÅ ŽÊM“…ÙjõÆZíjUÃ~rxO4þ]Cêt¢`׆‘Þjh&ìäOí?ÀÍb´h!Hnß;JÍpì—¸0æ L@&) d-zÞB°œw'–¢ó .mÓ43¡C¶;Ñ¥°-ì+GY€A̯YUÉQ“Eÿ0Ø%Zt¬@eYvgÛJt¼NÑ¥´ÁAÛ-Àe°ñà]e´K0:HÜÃ-kݼÁ;€-¦ü£« Ž`À’œ- P^]w¦‹)míTOŠÓ€ˆèERÈÑ<€`Î'PÜqG ÀÉöÀû0¿Ñà¾NK€Ï·˜ +h𙤬ccÏ‚¹Ï¸Mc`~²ñ˜¨ÏOA3܆g¹0§MÂ9¤ýŸcšâà"þ’ñ€³S.ç/5Fx€›7¿1;‚V’Züo.û 6V*H(ÛÒ²Ydè­¨ï0Ï_^ ¢ùŸ«!@EÌ"œc=$YXRy÷ÎŽ:ðÏx>"²“kEAä`1“ (iŸD›ÃïÊäÉFôúŠT‡2¿¢¾H)ünÜׇNd²@Ÿ©ØG}÷Á5Ôèo€s²‡›µ_´6%-0äÑä*&”g(å‡&[ä}š Àb“IHÀzqz¦µ¹¾šDmjÝ.’dtwœH²ÔPPµ×!,€ /<½ñ?Ç0‚MuäÈJ9¦ >vLtßßc­^ìž¡lŸ ‰0¸o€  ¨Áþ3?jC[Á$Àvç~—‰ œ!倯DÉ!LŒ#ÂrhpÑZÑûsÎøÇ…ñçmÔp¤¼ëç§Ã-œCÄ>vÃçr/^$Í/^ÆÊHXüq\ ýÒô5Q°“B/(äí¶'®{Þ¢7ÇÒŒ…Eo1àÀ€,¸ È–rT./¨¢ÂJ6ÓïøäÈw& :  $€ Àôt ÚÕàcìÏÇ~€d'µAWf(îg1àľ‹Ï¸‚+ö¼ŽNª 8@Pv4I¸*¤/<¤H‰ŸÎFU“€°šÉgÑ‚Øë$€Ñ–&6Ëíøä·ê–ci€9vް pïÝNkfºhMv‡'éÊ/—Ô°½Å„¢S ,þˆü— ¸ºîâi€S“LŽa€9Vf’¨ µÑýð˜ÀÀÌÐ@8ú Q*£?€n_°“8€ûŒÜ·öºJ0À­p³íû–óHó²àÀX—lŸ_„µÏåŸ_Dz`à`ø_änHÆenæqã—s¹‹SvFô¸<À3ÏžË]ÌÏó'3+ÿšp±Pj~5?Yàx¥ 9ˆ^g}?@!`é`µ±'ðç*4ª40ç‡×¬%à2€ÝÏ©SP5\lž69î (”eD¿ÊÿgÇU‡,´­â” ¢uÚC†3xŨ>뾂mª!ÈŠ‚:…7þ“ñ‚ÓèLˆ2Ü3e)Ðl 5ú§À¶Ǚ蔭x$a!£-uÀƒµtç¸ïXðލ-;ó(ïB¦§_æ6‚ÜFÜo3€ÚBp/ \q¾©õ'p˨$À6ÀP|–té6 zRáè šsxšcàcypÛæ,¡bØÁÐPdRr؃cLóf‡ñgð/zžÑ?“õHïç¾Å´÷|…d§¡? +œ‚x¨òy,É|°}jÊÅøÏåYœˆ#˘§*£§ŠµÃi¸%gû¼ú¨vð­ÉïZ%UîÕ¼9òÇ1©+^åúœ?T¦¦¦ Z]ð +ŸâXæ ²“œq=_ñý7cÖX<Ž{g¢SG@]ôO(¾%®úÔQU2ùªÜ~°¦$Ô„¢ö¸ßÈ®eÉæäî™2HêY{@ø‹úøÃ +‚ôûÙLÐvñcŒ–$ðrñå’õ¨›@Ç&\wçd¡k8¢ +mf  8=£¡ÁH6Yx9D³lö›8€l˜Fö>¤€rk­T¤$p #:ì߃×6ÐFßê$@üœØ:ÝX>¡+ˆüAeòYé‚n{Í.Fm(´¸”àAâ”àp´`RËsTUÚ|lž¼ +ŸFŸ~Š¿t™,¾ÍÎ~}ŽõƒX^ôg²ÌÏW4($€Žßãõað(lPÇþ)oÒQ²ÈÖÉ>lÁÅJY€ê¹ä8î X€T÷6Fþlȧ¯ˆƒŒWyª.Ù'Ü.\CÕýŒót ¿øìÃ_†ñ82“ H(“Ð9Ìp•c¾Úü¸ü>ÑŸ¼=Ñ0Ü Ýî=DªV2pd0GuRÞÎ!lU»¥Óútà÷]ü8·`ähœùtt꬀·9dì›ûYfµ’o8”…~¬ÍL·Ö +àFt7䘽àNï|üÑÞ÷ö˜#/ÇC·. R€ÖÖQH¬BÆ0‡TæVl|:e`=Û¸™å¢fN¢Úc°êÙ©ö\ËçÇžƒ8_*­Læ²€¨TržV˜øF¥¾V<0’ñreâ:À3cŒ¿O£ÿÜœ«÷s WC¶ßõàD˜àJ`ëñÄל`‹¡Eô/0ëÉ|y|oÑ»¹„à?³¯ç§ƒz=xöžǽ3Ô^-ÿ–ëæ ©'¶ãG0ĦŽYm¿éÀ¿ +ˆ°Å^Dô8{À¾À±‡ ŸV'tÐAâ¿RødoC@²Ÿ@‘¿±îŒäîû’^U߆h·ïv6‘x÷^ °æ¶ŒlÙ”¯|» ÀˆÚ€%R €‰îw JP>H|ДÒûp)@Ûi +v·pu:€½>Üsñ¿Às3t$¶©ù!ÀM°C `:e`Áä?R,-Øéòu:ÀS c´ÑY€¹ß­\ xáb÷$¿0ñZžƒîÛöž,¿Ì,=°z21ç|D¿>y`ž‘2SöÞ¸—ƒŒçY@\5üc(ìƒî‰€™Ca*,_ó<°êÎà×Õ&Ü¿´¯Á„–ëÍ›<ïúÅ)Ž|7àû£qæà@y~SyEAhdP®»mÐG,€>À€}'p<&Fè–ªç)$ÿU¨ +nLæ?<¬‡)ý¯„gài)H{\Kcº"i×="!ÞŠÂØÍp/ x‚“pì™<€lc@¯s]YWÇ&Çnƒ’HP8,«8RµÖØ/#þãK%ñ4m 0ðä?&ÇzN¶PÕ°¶V„X `?ØÞ¾ßbC\«cÀlù-^àÃö>r´ÄÉtÐühæãÓl@z0¹ƒ2Àb’æq;©°¨®Žð;páí¤7çã8%”p’€O¬S§*/Òê3'½ Ÿ4XêØ^!¨Ì‘Ûʈ»N®SH@°ºr}b1—;÷,À›[˜[ô±5y‘à(¾³Ï2Ågº*@® —¿x‘ýQ¬á¯ç±²©ü?¹\ñ.Å ÖQX¯'º˜ç±Ö@ødœ©LÀõòÛi»»õò]±V`zbÆ @6 îh ´§€8þØõ—rX˜\W¾¿ªrŒÏGä KÛð$»1V˜ ¡Ë¥@Ú3ª8c¿&{B±_½b›vtXƒEµXÞï" 0ýò`&`2iáÓ“9a͘?ÀÛ+ôÞ»Ýÿ½]œž)®òÖÀ5ØÖå£0 °ÕÞJÚ ` +à~áD€\5þã â•bª,IŸ€@ç—ØâÀ}à˜@ +àã’½J¨ÿ``«XäÓØ–°›sǡ𱗱¡¬´±ðC$6”†n/‘쇽9]0Wò*µƒ¸m•ÊÊù@ëú°´±;—s~Á¯0Úe®…„@åñÌ‹ŸóǽüE¶˜óÒpyÄ´¸Øÿå¿9~IN•/Ë5z¥¼üDŽ­rsH,’Ը̂xÆÇÏ»p±\Št,Sع8%ø:8î útøCKÑ0€…‹‰ GêcÉ’½i—‰Ïøzâ<¾+äûÌàùÜ +ÃÕv[ØAªJ,Ðèx€â?s§±ø‰ j¾¤€e€Ñxê‘àŽd× €à "Nƒ;p¢ 'w¶ÙÝŸƒíqô¦^m8 +À»ï¶¡(ÅÕAcà5圤@Ô_@Õ{øÇ×ð3á?_¼Rë«-Øo à[è`TÌî:øáÇp)ÄIW +à€e’À-ï ’d5é ú߃§ètß‹wxJö@äp˜eªö@F¬i½›f±tt÷Ã:øÀQ‡•¥³Ê &¶ÁšuµÏB!æ8[Q3ð‚&½zà/âfØ/úŒyÎó˜±x!PŸ!AÈzx#¦fÓµÃ9†Zü³( +½¬Å‘FB:÷ÎÖáü’ (@šžæ˜¨—(2¶'…ASÖœž ½éØ5 +€m }éîy}æry ¨ OáíñLLðrI‘ óýH²ß9€„£XºgÄάÀŒÈ_ÍY;{ݵÒÌô´¸*€1\“}È$p«|IšÖ`.`R0=ƒŽþl |›½ÿ0[Þ€µuXQ§”á? àJÁX\Lÿ‹¸Ä@2*›ûјG×ag\¸ÉAö:EPà‡{øMüÓÀ^†Â9VLbu%x,€×Dô2‰—b ëj7¯ªTƒ5xÕ­DX_˜åìf€ó““™ùêïOòƒãÈOÒð3ãòüùÉÂùÂää%~¹Š Ç^ºä¾qsþ’훼¤l]Ÿ…j¥0ÉfÂÏã_ƒÓˆB'ÄÑxýê— +³³…‰ñóxŒ«…µk×f±œ-\ÅSå^<ÏfÈLµÖny7ER¥ðÝé*¾V(\½ZàƒM<7~õ%\cöêépÜ;°GÊóƒõlµr:`ß` ”È×DêSHPúÀµ&Á]¯ Y0?Àè_" «0ÑàÎæ©‰pà +ö° G›h8à hmÕ€Ô$˜L'ÑÉQrVô2â`3Czz»»×."Æ&—Rþs¶Ha{8P™+ã¡ìŒ=g@*ŒÕÙ¥¿sL6+ãýHСY°dYf–[kë%6ÊrS‹Uÿ ø!í`”½Éë±àÃÀž­Tì툼-&ï™JÀ.‡«8°M`U_~QÀžõhhcW"<I€ “nŒÑí¦hxìù#€ÎO\.°½M1<3ÞüJÕ¯U¼FP`F|î³'>D÷ ÜGü³k·l×°ócWÃ!•ÞÛ›º0ž¿¾¼xÕSú¶ŽÉŽƒ—Äí ÕªìF_Äûì„=ý”‘Àk° ckä}—¹€Hˆ,z^ËãÇý~G½[a¿„ y/o…K/ǽ3:€Íò«öÁ<€ÇvÐoÉwD@þäü/%ôéøÆŠþHŒ¯ÆXË p`‘•H_UЕlv‡$"0êC!ý5;æ;<¯J¶püG¹Ñ#©ÌYÑ!uwo³ PFrW‰i!a?&›1 ¼„]ê¹ç\ý*Ç,ëà6Ù%˜9€è/¬•å˜åæÀm +€2[·çãˆËA|úÁPpiw(øÍÌ=›˜ïòÚŒUœ[­-–ìíÝã/¥ß'ï›@š 7’q;iÅÀÜ}9lmu$UùDôælT +"¸‰êð^°ø7™°~Í«Œ¿‡…f2 Öƒ•€öŸI¯ìöYù„[X~©puµI)`Ý|¼ ªR‡7–5 Ï¢77•Ï#ÎN}v5®{@ï0yÒüüõjåaÝN˜Eƒª À¾áþYà‘òóðKpA=b±?Ïò*H‹\ðƒ•fÌžǽ³…8sJ8 æz !(ÈH(x)ÚJ(à?Hžð\Hêö» | ðtî¤`IÑ<¤ ˜&p³üNaÍí¦¬$PΟÍɇk¤ý$s@Û93psÞ~ÿýv‰…á=1Û:Ù&›±ÿ1ã‹ÍŽÿà®Uìܽ÷î½u8€ò pÑ:©Ï=Ûô²Õ®JÞðu8 @ðí¸Úbc@eðÝ·ZëÅ+¥AS€¬('^üG¢^l}, ý)y&;Ø’’tܘP=€#Àü’vÚ`M ,œÀ£ðPÀˉðV†á>IWÀšó~ë[€eI9kÚQ©6ƒ«‘W©^Ç„ Œq­Z®à ‹s^P@Úk< \dܹ̀gs•Å…¯2W©"¾&Wͬ€3 +uõ÷ïåžÐ…Õ7ð`4 ˜k“›cÏ"›ªÿR\€¥ùü‹ã¹9\¬þ…#úIpÔ;€íßT’VཋïA¶¤pÕ4 `¼ ò9ÌAS dh¨€Kl³„×N‡£ÞÙC£~‡#Àz½‡ˆv4‘¶¦ˆ€ÜL£hnä7æ0ºw + ¸/¦ ¯Ð]ðJXh/Ày\XWèú‡.’œwä·5"¥ïÑ<Y‹1†|’dà¸=Ðèt̸Óô1€ã¿Y^j±Is›×[Ö›gæl°Ö€‚p öÒZ­U¦þÉ~¦¿ð•¥Pæ,àÏ=0§n§ì€ @—k à€ú¤ æÑd@@@Λ Ñà_tƒvÛå–6°•ÐððVéï©oCü=˜Ó³*]eâuÞ;wퟰHoŽetJ€iá5ì6°H›L’¸Ø÷ê,3XÄ¿G@¼{!?΢:w ôGf1õ(øéìåóU¤ß)#d6?• À^>ÔË ®ªàº~Ö¼Å:Ò#35ZÆ®‡=ÓŸG½³Æü¯®[.Àú«e¦ú €+3äÿ `œÅ”$€!ÿ`˜en}’˜I$üÇÞóŽþi|æSÌþ;ð|IÌQ(ó³²Íqsrü—phL0òßÙ÷Þ§`?=ã ™Üٜ샳>l› &P?“ù€ŽÚ©O`Çÿöúmj&E`´L†9p<@o×ÀuJ†^; ÛZo¯L»‰Á#[ æT +À!:Zí?‚ˆü„Rætô‰g·Ù±‡ñoFy:Ap¿Ë¿Á¢ÿ pƒ"B؆<è! G€(4LýM¤”ÏË]m™¬®øˆ0D‡°‡ E®Œs0ÉØOfcm€H„<Çà;.ÂRÀgÏÍápîçYüû°;b/wáz~P€Ïê|vw,y/°ß‚KAÀA@·B©ú`"ž‡°ÏŽBO£Þ٢̊Çf Ð?Ù‚ §*:ú I€¬ +Ï˯X¤ŸòÙ䀱?V˜àfí$ûY$È!ǹÅ\¯ÊÚ?ÇÀF–ˆÙe[99ú'Þ@Ü×Z—Ñš9€,ÜÙœ2 } w/úSV9PP☠ȑƒmnƒÉ,“Àæ˜$³p¯8Á* KÀ~Îæ¦3ƒîtAQ7±”ŽÊ˜àbí ÷«ðsÉKÚãïÚ÷¬€>ÎÆË,Q ÀZ€ÏP ~!t'pŒíàªÐƒc€”IÁ"~ñ„y®·L§ï÷bîgÀ³.vÀ(æ«Y"œï9[À]áµ dü¿€‰Uƒ®“wãã2 ‰Ã+õæ¨é 6•\îÚµp‘þˆ4D¡Eþɽå Âk#ú©ÈpŸ-ºîMQæè!bGô“à¨w6Ú³*0f%À>…@¬Kà¹bsBRPŸ¥ôjßãÚ Üû `=?Ö ”n¸m„¾p'ªQòsÉ}à?ì¿d@–À¹¡5«”l¿j‹ûƒ™Tuw¶€Ûã@ï«?¤‡9tïõÀÅ¥w6'ûàLˆùHüƒýÌIJȱ€• ÀbÀ!°¾žµúŒ–A•ÄßÕøÎ<š6¤¸¢ÍXç¾ý±Ž9ˤ(o €è0NgŸ€eKl'ª  X¢ ö$7OÇŠ­u:/<ˆº"ïvnS‹(ÌxpÔ8êH úû +ø?Y)¨ñ­èã÷ÀÃÀ¯@¢yöÐ)À\"ûUÀYñ®†Ò.c¦"ÞßcÚÛÜ7 +ÿæà󱿃fìç¿ÐĽtW ð®”âæöô ÐÛGp ºsS$è¿>[=é“£ÞÙ£²ÿ®€€¼Ÿ‘`$„0Èø×ÓÆÃÄ$’_Ñ<ÎÁW«ÃåŠÌ!àŸèÖ[n¹O zAná²xô4\ÇyZÛ’Š)÷IrQÖâl:µ<’ÀØoí0ÃN6aÕÎÖ é‡ÎÌ€•• ²ãÝ‘ý››t33ÌtôÇŸ‘ÕP*߆0ßÝm8 +¾ßú‹X€e™àŠé,GvâϸwÄÜ>"äå Í‘Ê{§À`ü§(CQÐa>ðZîS/]2O +]»ÝÒx„tX8Ø;æ,›= Õƒ@nâÅ +9 ë]£ð ÷ø h†Ñà «a?Ä:£ðá +ÖBަS¢÷°ïáü~?zÌ H¦k4a/a<Ïaƃý@CŽD`þ·GþžÄaÅ![!¯ˆÛõ¢0j†!G%t7Çsâ^A8õ?{Ü$‚6%úlEg0×àMo1çÀ£÷žÖN‡£ÞÙÀú: V{›1Kÿ™ˆ·R«`T + ~‚ÒV “CÏ&œdñExWÀ䂃ÀÎãjü3ö3€]$7¯EÖ+PôÇ–äbÌÄ}q¶b:nDUÇ_Åÿ”Q–{ŒÈpn¢˜ž±¯ÀÜ¥·ÉÀ—#¯p·År?)€s÷øÊ”n—YÅæwŲ.@Ö[% €¬óAhÄÖÇ@ûÛ <I€“Àíw2€šÈù>¿ìa™÷—ü2V8–@j¤ƒ˜výÜ…K— +ËUvÁ ƒhçQ´»ë5ªA#làà°áûßcY¼ÏÊ@`×.ëæPQ-â˜ÁQ¨ñ0W¾‹˜7ïáÒµj çŸW ÷à>8üPa<_`tï7ªÓã/y¸~ã=Ü÷ÅÍ÷©EQ5¦Äü, +w±k8mÐÔä^Ìy|,ßjžG½³„3º†iü9@€ÀG²óËÀ´\öcgë³ýµAV%’°BÑ9/ÊÓÇ¥pœ%LDHpnàRªÀ;É®¤ƒM14‰Yú‹é)ÿÇû›àã±âÁ"1Ör û‡‹lâÌs3 µ©˜H +À¸<9€"÷&p\ð·äŽgÿø~3Xù‹Ì~¥h­­[€¢t9 +Éö=,áÀ2Ùj¸óáG€ûmˆ VCØ!À©K ùLöóPê¥qú˜Üé>ÀA¸ðÎ^—p8 çÔöÇGaâ÷ÆÇs“…B¡ÂAw|¯êß:ߨՖ¼ÙBuIIäZ-˜õkÞ¾]SÕÜjµp5l¯qôžª7Ïkñ¯zó÷ç¯MNNŒ?7^˜­ÖpHµ6Â¶ŽÆUvR?ÿ]=”7-^µæW«³¸cõÚµ*6³ŠpwÆOàGšo\mÌWg¯½4Ë*“““çùóÕFõ¥ó7æçOøÃÒQïl`}uïâCu“L@†5²OÀ¬ Ég$ØY(È‚:l¡F ¯ÃÃY±Ï6Pʯ@"”H¬@ÄnSóWλ4€`»´ÐÊ(þ§ +€‹RÆa"Ó!“ÓÓ·µÎ°o“;=8sEWÑ2ãT˜€´á˜ È>ASXâIK\m·iàG¯6™:U`½ i8þW8!Jß¡’ øc;qò?ÈḚ̂$À‰ ÄZÁa„¹úÁóñºöîiUú'€h´Y3ÀÞ•E~bìQQ «ý³(Šz—sˆ+‘ÈâÃþá㧇áµvÿ²ßï?ëG½ÞAßß㧈å°õL ú £§[S›0|Ç}|"Îg¼\ô£]Äå'áé xïu8€/b/ï… 8¬Ù<ˆ«Qôù!nþf¸ò’»AðAôwÅŸ#¹õã/úq?¬îòÉ8> ]BÍóóùJpÐfo¨’ñÉpÔ;`æÿzyíUkâ¤êM€ËÀzÖd-"t|С+YOm8 +:€ ¤ÞÕ!3q,³·q´Ñ™Šþ™ +ñÏcÒ(ÃWÎã<œåD@‡fàØ¨Æ>lïcñ¼ÑÖJRÀú\çt8Œ£7}פ. ºŒ-·Qx^ï‰ô·’:€ö(¿­.ñÇO:€N[ûIM@ïÜÀuü!ò7 ÿ×[Óp‰è¡Ý`ã"0p<ÀA‚Áä‚søÊ‚Îd ­.  Ô€ìOD°‡5Àõàö°'æ7ÚÀ˜æ:;Ï‚¦—S~Ìý_®7ÿlÜ¿¦b÷xjv¶ôõ/بŽ9„Ì´%`¯{M¤û•Õ‡EÿjèjàU“š£ô!þ[ ÚãSǸ’víGúc‡x,ˆÿéwr_`ìïÊ´Ë€0§q?'Á¨ª…Ѷ}„fQ¾óÀL˾h+'®¿äJ:‹›ÐÛ X ¨qAÚwÛw;tWJŽýZ[°`sýX€*ö`RÔÎÉAöŸôǧÀ  SvÁ†ÁVH­~@pÇ`;Óü`õýî3˜kù&d°K„dAâL 8³OÁ=ü¥yA p{ ›·Ù3H*â¾0ìT|^¯¿1wA½øW®ƒ^õæ¿i6£ 2@Àî6°R¥¡wü‡~p,>Äc[“À}˜kWßdÀ‹ã/V ¼~ÝUñ? +»î„…î ?u] ý–…yNÄÇíÔÉ,²v€I€JUñåú”ÇÁ‚ƒÂ/ƒZÿt8î $±Çñe¸s€üW,Ío‚iÔÄÆ:Y <Š€X>ÕùM’´p +–ë—§‹Æf‚Š"`ñ<—Ì€Ðà_ïR•“+dr׳àÎ^§5£Nz²p§»™ô×ɺz +¾Eô›¤{–€rÛG Õ¹‡÷H@Æ@€4'pO+@¬-#ëŒ$q¼ÁX¼ƒ˜z)Uã§+8êÖZímòß9›²‚ã­ƒýÝîûª zi`Xàˆ¼¡*6þ"ãZå€_õæ÷ÿ¼Ù«G² Fug‚jM–)i ÓÏꢗ•ûYKÛ ¾Yæ`Ç2Î_9©^Ñ(D×b\™€tÉÓ÷Á5ðú™Á]+ž«p¤oj@|µ¯[/3 $ÀÀ/®öã]¿ßÿå/@t.Žþqá¸w&ÀÀæÈ/˜8ž3G` ¥ `&`ê\ýÿ‘$@⬀äÇRÜW¥aVvL&À·æ4€à&Åü\d€àÈè`X4@­p`ñ¿ŽÅÂQÔbzFù#@€Å‘}‰ëw*Š(.ÖÊè@ÍÚ!¸ tÁ”6»ÁsßG~}péÎâÆÏÛû ›æîvînrm +?õ„üÏ{HÖäò᥸Y‡£ˆǘ±8ú÷øsÈÀcǽ3¹ äÄþ!`Á²U^SäÏ™éù„Îd´‘{¸8€1=£É|*€N42Ùõ0²\à7mÚ,®jÿ•`ˆÆ„B³€Ð«.ÓÎ)@uã¾.“ž¦k¤°×X… hÀ]vÚ¥i¼-Ù.†“Å—Ë÷ßél²5¯ÞáÎë–3+ÏI“жÀp¢0ä¶AB'LªŸâèñ;ìfä¥P$ ¼±ÕÞØ¢&Ð-Ál +Ä“q(É¿×Ý{p[áv¶ˆn)R~ÆÔ¦‘¸–Í•ÏUÃÞ»À1H $ٛ͠Xßüµχõ6[‰~ìÙ±K k‰Á,ù »WwCâ»—' KnR?T•cÓµ‚œÅÔ +»d4àÓ$ö5¡NV‹Ú¶ä!„9,‚Êõ*¶4&ƒðæùš_«`h(Þù¨éCªýøq?ÆË¡¿>Ø…ãÞ™€ o ˜@ÀR(Ë0€ÿúš4û Æê±Ì"ŃF5ñþ=Ö§ãÞ™€B[– °wÜ@Hh€::æ÷Ëò›ûg‡ Ø%AÀ•æÑP2¤r¢µaÀG×,À>í9É>#,¡« _JÛ-4 ½,HÛBÔ=@JuG{œb+Yèm*‰ÜÅsLÿÃt[ìO`Øp eò>kѰçÌËìüéo8€æç‹ËQᑨh…¤xé DÂ]m²^½ƒ¹²¸Lm‘©þ«ì"üµÜsùðàó(Œú\{¬|öã°ÿ1øì† Œ~á… UO¢‚:€\Ë#j7 @Úsì‚€›°~¾V©à +KHµ,âåÎL­|æWáó?1ÙüùYv`­3 sþ„‹ÎQœÖ_ÀØP’R F’ +x}i@jêE|Q“ØšÀJv¹i0§SصܑÜΰì„Á=9oŒ×‡®È,RÀº“’йÛÂïkýÄÝ# 8Óêv6• b=ª@Öø6qìè›´X3MÜÓf@ 2øÑ÷±cLÞv®?€Ä˜—À’ôî'Y¤Ûݽ÷Éÿ÷ÕËqÆ0 ð» @=è…M0e€Àóa bÄúqZ@ ,âZpÀ\2„{ïq€¹~ðû,È¿–›ðXî~t• üFÂu—jŒÒÇŸyáœÉÔåJe¹à×Ùó/XÎâ +â:Ý?ÙïF&! Ë4ÿwµ2ÏàWž«0Ûp1¬WÍŸǽ3 _ ÖÒäÞR( 8>k]K[; +&ö©– È%t‚ ”@öG®öÅ8M²fA≒é4 +v(g]Ž$°´9Ë6f!ÚG@r}­ðŠú6{ŠÿËViónûmümÒð«fx€Réåt’XSö4pΈøNhúI}¦÷•õ7-À=­ uËÊßÙa£öí2säÁJKÙc7(ÍšT€ \q‹ RA'æXê«dÀ}:‚d—x€çf EÃà +°}'eÿwÆà pä}IÅŸ µò|?.¼É>x@nð_•†£ZÀÁAè Þ´C%uø|ó‹>ÒÞž·Oð]DÈ—§k ¿Ö˜=xÏ—hž‹6 :wKøUÜ(  ax^.RØS°sâ>g€¥,Î7òó¿`ެ¨=yÒšYwˆ¥MÊ­¶jí:ömõû­uV0`á#€"æÄf9»/ì u{{t;w`+ˆ#À8ˆƒz³^gcüÄþ´N˜CN>ò£ 21>ùfüÙÓ~¿váô‘X8~éý©ñ1hÀáà’JçæAùÄxjGþJÂà_ +½7GzÆ÷ÃEo¼Â†Ó‚Jd]ŽŸǽ3†®,àØúg”  ˆÀ‚Ømd| ƒÕþRâ˸jXstßUbçÈo0êwàl;w‘ü‰H1ÁQÅqFH%6ÚS´íl#¿D Yɽ +JÀ«ôÿëoo®ßmßÝܤ8‚d?ñ¶¢p7ÍïЀñx»$¼ñ~”`¬o@K€™lÒË=€l ØVt,þ+åOuÀ„ÛQ4qv$^‹V ÉxÀ=”dv?Üë>H€A׆X3<‡èà±ZóÕ+yoÁ_^–ëo†q~öEá‹8Ž>dÜßìD½(ºá?‰¢fØ{Øë…ý~²S€‰üÇÅâHíþ‚øê§A FR<ðÃ(¾†G¡§n=Fâ’{vüÜÅ)Äß•ÉJ¨:G ÐÜ„=: bAÌ- áþ' ¸sÄ«xçó•ë¬Ô‹æñاÁqïLÀ"W‹3Ø‚ ±OÖÐȸ0puâ +#~uÜ?ØC+àüký±œÀé-ª+àè°‹ïaˆã§Â8 lWÔ/ò›†eD†¬ÿ×}7u?î´1"½Ï¥»ÓÑ›ÑÐðÃ9âî&óGìm)pµx^v3r«ë|‡P8€zóTèø?cÙ°ÓWff¦5ãOOžû÷4ÐíÞiµ¶¶:C€šçÖ:¥âËFÖ©Ž;€nRH +ey@Ð¥t±$À`‹õöÌ$íD¬â»ØA–lìïG'u tb)€wÕckþññ\éŽJR8¥ª*ð{¥Ê*ˆòóÊÀãç5ÊqÅ»V¸T­^«¼Jä/çr°5ðµ +îwÚì¸w&À°–@áÏøO¬Ë(pºpÚZ32Êç·ˆIü7Êg¡Â€ÄèH~—[(NÇ0Gâê p3/ÏŠCÇÙˆúŒ)wºïvU À O#° šˆí\¸'KW²ÀÛpU'•߇忦A`à— 3þc~ ðÖÐ>_,r/Ô&Н%ð退÷ÆL€+WÀ}öb8KéWdá¢m$ËÕ' I±>&:ð¿Ër¾­²s"êwÝû®€ ©À)Éh—ït?2°Eà€ëÿÆP›­VÙµGnbò’zؘ¯BfµêKØL\›_òÁçZÍ«ñÈjc©Ú¸Šß¨ÞÀFvÂQ«ÎÏ×Xç`G×pºïU+ùÜ%¯æÏ/yó¸Ïèi^CŽÀùÜädnòEü«ÇÇÏçr—.å¿•;-y<%ö\ÒP…yC*×òyöÿQñ'ò“*ýç°æØ›@*â<öáÌÉB+'Îyǽ³€j´7h΂_ ÑÒïÚc±'1Lá-?áô8ý sçÍØ&¨åèu„Ñøo| ÜCàf»¶âN’,L +ù#I‹MÅyÌ€ +l2 I€z2Òß=`z!À]Y€õöÛC@ÀeùW|Ì¥ᑼg§^â*«Úl +  Ë„±gÑ`ïW;æÀÚÄ ¾Ñ*SÐ6ÛLõ;þ‹Ä8|nͰͿ#ê éHÀÏÐÉμOåâˆÇæ6ootHÐ*m}€ûG ŽüÊÜì?{ï ÿ"þ©ÿ—ý/âGq¿ÿEq/ŒŸr @|Çæ¸±ûÿø3ÍÞ£ç˜Ë†ýÿ€ÕçO£¨-!ÑW¡½G瀣8ÖßhÐ<ÜñǨȋϰ†²ŸCÔnÆÀ/TqÎMC°¨‘Gbx•ïÁO°ó¢}œ}©„˹s¹<ŽeŠ„)„SàÈw&À Ê:ûü#ða:À Imfu`Tž¤G5°B~ƒ Šü’üÇF¶ìq2Á +¯Ç½É’Mâø©°ã‡ÍÐ+N ÿÝ_\À40\om‘øjNèO },$éÃ%p/°Ò>5^¿ÛÞä °,?FÄ?ÀL»Ûn¯·Hدe’ÀWÈ$À˦,àC>B]3ÿU°×½Sj±ZB{¿‘ì5¨Ö#À’ +Ì«¿ïÉ~¾‚ÔÀÜßq9$ƒ<+hÝÙ¶<€òÚût;t)ìïŒ!¦Nš bgýÝü8éêkU¯ê-†êc’L^ŸE|a3zÈAÂÁ7iÄ¿o6]KAVõêAÐëýù“ǵ-½ÊÔÅü‚•.×ÕöøØôF=—Ëç&GüåDäãcϪ•"6ärÌä€á•)˜ nÌ_Ì]œÄÇ”¾°)c}y¢ÂqÂrìšüÙñ‹J'¸m'Ãqï,àŸZPÎÌ‚|¨Ël­+k@WX¥ÇUîKb}×Äç(Ü&€ €"éqâ±RÙ’\3ö}-tôp3ùXÓ¥è²*àB¦ `‚=/–t)ãÝcpuöš²Ÿà[{Ój&°—ø2ßš’òÅÕîG¡Å|±ß N  ¸ÏóõÓ°1 €“±’@† 瘶aÇÝâ¿õó“ðŸf`+uN¶·,b‡ðY€w”¶`ü¯<aà ðÑÞƒ;¥öƒÐ!¢dKˆüj^ž±leÞ{ ߿ʆ€@½„MÎÍ^¯¯Ž5ëA=ðÝŽ0ÔÙÞ§¾\_VžÜˆêìÊû:@²q +H싎ÿå4NQ>aü…s¹‹ó‡Ã÷Êä”7EŠãˆ ˜ˆ|å"6à |~aabTÇêE‚ðÌMÄd®bšq +ùÎ,¸àèÏO9 +Àêz áNiЙi ­ÙÃ>Y{[Â+åWÊÖ¯âë,¸•™A4[³ékáÈ8l–x…MIþ„û©°%p†k:„y9fÌ›¸µƒ…K‡Ì í=o³+Å2l€ÚvÔ#ÈxYé[ÃÀêúª€qÞà„Àc ðJTöш$þ’þ‰“T/÷™8€R‹Lß2²üwÀ @u{«µqà1[P €s;Ûv‡íŒ0lP@‘(ot?†,ì( …î.¬&‡ä2ë0oÓ£°jØz29€ñ_wƒ/zøn‡$`5„æg³iï5Bøb½Ipó¤R€ÀqïdŒ?3~î$ÀÑ·’»¸8•Лa\Ÿö‘ŸŸÓWV%ðòãSƒsN€#ß™€…äòX-Õ‚@k}½äª Ðû+;Ï`™úüpkÂyvâÇ~|0G[sƒÊ1“]Yˆÿöù;À‘qØ<§~¥¬<€Œ ÓElf 0âgäiزþÞÁÔȾڇ B•°€ÉfÜݼ۞™¾"›n4%Pnßk¯·[kÌÈ–¸¾öN±RbU+e ¸·Ï¢rñÞ–L˜°ã_b›‘ÅûÒÌäW`Û €#&G´8z·Ô>î¶Jr¶Yøë“DÀ²só^øA’ð›¬ú7ö4=ô—†Á¯zH0Ê'˜gG0©ßŒª1›ys•‹S‹~óó°þ8¢€Œ„ãÞq îÖÇ3cÏʸ1ýã÷ܹññqŒ»^Àaçrùç*9:†søÊóÆÇÎÑx9ž©cO†ãÞ™ &ÉžB_™mÀ}æ.ü¹î}»Û¿*N;L0Òg_~ؤ!=,ùÝ¡â±à(OÒÙÚïGÆ!`óó0P°ß€Û“Â¥ˆ‰Î=Ö¢ `Ü(Òð1ß}n4¸!û´©¼Él@)À:R›™$`ÈL—Ú÷Û«­u>UPߨ¥ÎJà€ÿX-ê€9€|T‹ûÓ¥ Ð6ÀŠÁ„ñŸ :üR €8Úívà8ñÇo1µŸ:ñ¿»}?ÑÆ£àMÚr8PmLNrIRžXŠîU«óóAX=\fW!Lسª0ûîh†y§wÅÁþ—Ù\À% +Àòò2.†¿ð Ú_©//.ÌUòS‹A3~r6W׿÷FáLçÆÇÆžy_ÎÝH˃Ĺ©‹ º2 p>—Ëó3tbìÙ±ò©Øm:Ž{g ëò”ídÁNƒÒuÆþ ˜¹'1ÀËïKjÿ¶ž€0·ðÊt™ìÊb ¿‹86›á`^!õ¥”€!ïw\€sΦ‹ç¶T +`3îYìÛîM©àü0wYIýIÅÍÓ3­Í{ísÉÿ”ú€­Ø9 RÆ$€sXãëçç@Çœoos "î2šƒ7ðæ¤ €‰¹ÿœ$`òAj¢³$øJþ§½;й½öþ¿`€s@Œ±mo +P•ƒ}.+ Z©ª»@ù"u¶ÀÌTûð1ÄQø«>ý& oÚçòõz³_}Lsà]‡«€ôzl^|pÛ‘¸W€ò@ë‹,“/_ÉW” ˜»@`¦Þeæ/^¸xynÂcþ6¹mLC0ñ¼Çï§ÂqïLÀÂ2‚šMî K£ìèZ';‹ËIçt`ü ¸oj @ '€#`ÃAÖÿÁpd€ô/«¿ÁL@æp憻p½Í>úÜÁ È#; ú;Î'wœNØ;äh²€dwS +~)áë­U¨M ê§â}üh%˜[ ÀO¬Ê‚vÀ=±n«\ji¼€$ "Óë@€6@guÞg`#©8ÄT.“éì¥i)€ºb)@ê>”°K°Ô8 n“¸žß¼ln™èA5v½…úõ7|´vÙýð«?‡ËË0n½ôg£& +†È{õ@Ð ÿhôD½9ÌX¸~‘΄_Ù/ ôÆ  XùŸ™)ª,½ð—ÃB¸¸ÀªÁ’ s ‹^åb ‘Ø»æë§ǽ3Æ/YX$£ÀQ-)dˆþ€}cŽ€’L°€[Š]G`”û]àÈ8lž`7EG󲇻- Ñ«pŸ„òLF~©³³÷s/ +X/¿ŠT›¬ót5€åôw@ü,!3Ó·7;m¦”€¨²rE:)Eš Pt™€Ø†€ Œ ±Ž1[/ÉHPÏÁ¥"`Ç q<I°_R D^Ëg¥Î”[¥Û­ÛI)@k­»GÏ¿ñ²:9â|uniZ±Î¬Àó^ƒŸBËÁ +¢5²ã*@°Fá—½ê+ ô7)±*=õúÊa᳞,@ {Œ‘0r¸6 ˆ¿È¦<‹xRæEà6Ñ­Þ“?§ÿpÒ¥›s••ƒ ×¿ëIµÓ¯7ë‹•©©z3jTÃ÷\jçD8î ° +ZFöd:åü eHMPö6pø“öI?Àè¯_b¡5™ƒ ö‡#ã0°YÏÍš€ê O᨜Ài€q#Â;kº-ðÇ8‚Ǻã“; ÝnÌRÊ\ç€ÊÌ@*I€"cióZ^Ñ úgzº€·²š@ŠþY)=ìÝ1Û@¥€H…•ØÚ‚ÿHÉFzC¢íN÷]²®í.nÝ‚‘§) v8¼UºC`¥Á$€:è€ý¥€úÁ+ ê°p™€‚ÃR€²U»cE›Æ¢è³tŠúQ/Žú±WY@ê]µýâþa¿ñä˧ñAŸ•à ®G‡O>ýª±{øäË'_>‰â§aøYÿ€•YÛ¯†¸b\÷~ÔŒ‚©ààñÓÃ_<ý÷n¼ßq|ÈáÆûHaÜ £Þaÿñ—‡_ÕBÜøË_âOÃOãþgQ?aÆþnÈãoàÄ/~­FŸ÷ ~ÐÂZm7 xØ)pÜ;`èÊÂ!Òÿœ@øM™uìÚÇL€-f²•¿ƒñŸ‡Û > ¹…*á”âÿ&zýCáØ8lž(j4¶/t¦,60LÀðîV;b¬¿f•üi[’cQ`ð§ú€o·™ ‹îÂ\¹2£ù;L¹‡I€ÔÈp]7å‡è¯?~°À4Ò +¬`~LˆÊSØ:)Ýí®–JV½Ïø?0ð;8¬³Ó*¶L°³í€ ‹›ìÒÎ[IDAT``` ©€`݆`!!°aŸ€;%öA îgÀêàW«…ññ‰\¥PŸŸÇ†Fcö ¿Q[â_Ãêùs¸N®¼ÞƒÝŸ6jþ |¯iQ»1ÿúK7joïªW6Ôñ–pµ¥¥FpëÑÀ%ýÆ|•´7ŸŸoTAäp7À³ðžÀÚ <›5pCãÛAn@-”æçÙ^(_Á¡K¯ßz}ökà¸w&àÂÔÊ{ Aøby½ÕÎä«ñ—ÒßQú˜`įƒÔ±/?ù%ö‡#ã0ÆÆžÇc»<52v s¸ ÒÀýNg“-€c¢s6NÍœ°ªÞ”ÀúbYÀ¦’úÃ̬?ç ¸2]j;@°”´Ñ_K +ï0” @ fS›]¬/È·S:Ûï€|ïÞ)•­‚¿ À €ÔÆÝ‡%¤p۴€G0;„¥‚€ûƒ¡Á Dá*—’<†ïpÀ`·fUàAcð¤V w«/äYy^¼ªEÑ£F° .ß vãˆM8hþ4Øõ—‚AsТ¨ñÓpw7ÜmÁþ>ÙÇÃnD /ÝÄ®_¨4 ¡»Št\“€cˆû_ì"æG¼Gœ Àv‡»³»Ÿáæ¿àˆ¤G@ p"øZ°»E¯ÿ4vyzÝâ€æþ­Ê-ÏßðÑ~­);evÜ;p* FDª®Âxš)€!ŒüY 0` ýq[yœþÈœðÿÀV9€â+î¤:Ú}\ &Ô žÂ½˜Hd¸®ÛàTþ Iý¿k9±þª +ï23ðî&ê|Cœµš:€+Óß¡¨‰è¡æ€‘>œoNàÊ•$9Ó<0ê,ߎüe4ÝÝF=+@zS&̰Al1(Úœ€È@;P€dÏ8€L Õy_à€%ìÖ;c`Ì`ŠÂ}ðe%ÿbÅã±ÊQuã¨ÀÃGúÄÑAüøsPña¼1¸Õ‡ÅŽzáAŸî¾¬FO¿Ä³†u?\Á3A oá’ð§¡æ¸w& €œC6þX 0ÍŠ€C™€$wVÜ'ÀÌwr-9kè× –\1~ýCáÈ8 ê¹]ô/@óia`“ ÇB9‘]IÓ·e8 Ü)Â9¦úÎp’˜ýçk+µ7áëTo˜ÿC@î3YEF" wãVÖ 6ðRƒ©ÃT@*È‹ £bæö;€ÁÉYSpûv˜l ½‚}üŽý:À:„ƒ2“Ô0ÇÈnGß)Ê 4$pó¦ŸLµ›µ%,k¯åÆs•E楩^@T¿X˜éÇl?ö¤ 8CX‹>k6Ãz=ˆ9j@ +îÃÇçÕ~/z‡Áâ¢ïU–{_>nž–ù¦KŽ+­0ç‘첈•ßVª_D¡rqs% <ÅÞìWÿÝÃfpp¸RFõzï˸îyH>¨BsþkÀqïLÀÂñ,~&ÿúØÝÄt‹càfs¡ÕçË¥bÙ5èÀ(÷Ž_Ç‚üÊ@L’83Ùõ‡#crûl ;b\¸»o„ Ñ)æÓ$¶1_³»‘Û¹!ßáÕòÀàc½üjò’D½Òßá;WàÚ©Èü›ÿÇOM¾óƒ`š@ÎÓ–¹Î…ŠÅÎo¦®ÌL@æ<¸Ovš°2Ïý„Á„@€}eàŽÚ-#âg)à>@&A§Ó ˜”J¥ÛeÌ +À  ¸ü›nÂ*&聯¿èAX'tŠnUcŽ3©ÅO©"®…½æ +{ ŒÐW‚›Xæ¡øìÏÆQ‚ñeúSsõ'ÿæñŠåȯ:¦8ìŠeŽù~\þ¨¹Â&¡n®&‹µäæõŸUcêCïiC%šÿgï1îm"µ<ª5N‡ãÞ™€å uXj6P‚àðôn2ÊkÉÒ€™R’‘\sU‚!ý‡¹€$>³Ñëw€ãÝ‰WDQÙf¤EŒ 0Ä‹7á5ëî”~K¡$€&â˜`y {:s$½¥œ °Åš"}¶ªù±˜Á¢XžÁ»õ ŠÿAæØ°.?­‘ÿ;·K%'‚]HÀLÆèH«»´áŽãALlwù·Åí©  <]°uŠ`¿?j +a=¨!†ÌWæ<5ÚeÚqCµyëË>ûû\ëà#+ÿÁ›¿X +š¬ãz`?DdùM2Œ|OûÕ¸Ô›½ÞA}ñúb¯Ç1F( iÉãð$š† nÉ%à//×o@}êpø&à£gnÄÕ˜-þÍãf³yЃ˜`_#ˆn0có$ø3V 8 ü‹Ö$W$eåe©N!þs¡•$NW¼(Þÿ´ŽcÔˆ•͸Yôú€súy± DÅ£`+¤™€²t4 6Y(O°­öní¢6`×!ÈzÁ©Á¤)M¹½/³*`)51qY ÀR@rŸ2åÿ°Pï +üÕ,ÐÄ™"} +¬:ó¯€Ñ_€Üës‰ßFüïòÌð‡ëHÖU~€Å p*I² î5ÁàôŒt lj÷®‚Á«ÊO!î_\ö±EchVIExq9°q¹þËALÀøÏ9qrD‹gãâm¯¾0ÇaWB‡¿/XµÈåÿëþôA¯Q‹šŠÙ“úÈ–\Y†¤¸ÝÖpüã`¿Í'ˆ„ëõæg0ê‹ssÐ•Þ +œ“Ì–?òÇ’ÅÑÐÕaÀ|3P£zýÑ,@¤; ËRWh¹  U9ø~ü§`Á+`¿~I\ãPD§ÀqïLÁkJ#´a)0Ã.:3l•Êà).k-Aš0ž èžçŸEþZ8€?,í(‚<†¸€ˆPX_¨BY(». Ùx}FŸ,àðàÔ`L7))X ãìls\€ŒH‰ž8÷Í>4ÂeXJ@­)¯®¿]&Op€Ä¸…#âL”ù'%Pš€@¬Ï€tÏÂ$ u®"s ¯S„Dþhícév+#@€u…x®fœ`'8Z÷ë òÚH $i€DH†¦•üx~ÎKFÙõãpž$™Ä1,ÃÚ›ˆ‚ùÕíÖ +¿ËáU¤¿W¾X{ÀøûaÖ$« íc$´O´'øDŸ ¢•ÞÑ›»„D=Šf£ƒï7{ßWe|Švпa‡ǽ3qì(û[A™ÐRž¶„”¿ì ë¤3rß™Ö7ð‹[à €‡'yˆiÎÜX_GºcmýÝMV³GôŽP2XwlÆKÁœ„ýÎЂŒL l+ òóùí*FøH¶cª§ÿ +}@Úÿd€Å€';úv @ö;þóƒë„˜ï&À‰sÆûŽ÷ÎàÇ€[ü%ìåÇF8€¤`»5Sê ;ýú3ud"XòtmKZ”Š/s¸9P?u[È$¨žwa<_™£ýW’ _›Í +ÙMš„K~To.=îáÈáa“‰î„J„álãËÞøp}n™\=å'"ë 8y·fSÃYÄéA}å!7ƒûËÍ–å Üœs„݇=6>„Hrð«tÿðÆ­ÓîIŽzg ‚Y0æWªSI†å2½« +´8‰F˜L!‚øÏ…ñ߈ÂhW1¿€ºÁ|A›ÄO#è1öÝ[_g_Ú!Çüv“a0·/q€ËÄMÀ£žÜWS@ +€]D0 d£“v€È™ze¢ÿ”ïÒ8ºG4@P +câŒWðò` ­¨÷¢æ¸¿é‹å8*«²WðX"g  ˜Pê>+¸;”°s_`ßìทY±Á 3€Ýã89€Äœ$5©’¿È¦@ójv4½ÙXåb©ÌE\ 9:ÇÛôm 0ÑV W ¾°5М¶»«üÃÀÁ +5X P¯ÇÕrã¿ÀÂJÝrðxõ¨ñ  +©èߥ¾GÀOiôç]Zÿ8ê 0·/™Èy%ûK€éHز†í33¤¾Ø,¶+JO£€ß“¨]…8Â,Ï¡&¨qÿ,™Né³°€½Îöú¸w‹=i‘*Y‘ÇûãqÜuÁ Àذl*LŒUß½ÍØŸü—H/ ÿ±ÐÈÉ ¼¥¤,ZgŽÐ°ŽßÂß!àçÀà$gQj,Î`c@“€t²·“AÆl›K¥„Šiž:€—åTÂçò”Ȱè߸ûoçk‹ãôLi† ɤ°g–àNr$ù’ÇL@ëd¾ +¾„µÙH{§2ÜàZ"ϳðr¨òBP͹ñåeÆöÍö‹êþâ÷æ<ìþóß®ë]gÓ¾E\…ߣªõ±2%< ›÷ükA”¤ˆ7ýC×ìÃûªõtÒŸ£ÞÙƒàPTMAw5u¡Œü“lúSÂøäÿy³c'¢|ÕT. d>ŽÑŸñ§ŽÂ [Ø" °ºŠGqñþŽŽ)d%à@OöyÁ¬çÀÂê!hR®Ÿ&*€uzýéÄt.Äçì»~/~±rh4à\^Ž(? ÄÛ2)™"‹ø)eÎ8òëC \g†m1øÚó'“H? FîÊHK4- uR– ü=9mHÚ^cß–Ëô·$À} ¿a¢ª†Pd‹blr!„ä'p€$@ŽJŽ£g ú¯ü!ãË 1ª°lgG–ÑQL§ €á!âVvl·ÆÃtÞû³Á6°HÁ»>Ç¡B™N8î1FûÉ_<Ò¢×cïdAxcŸ€›{M«#À›s‡/d +á!¾p«öÐþ³¬ùË¿¬å§ÀQïlÀEþ6d¾þJåUå@Ö[`£ÍŒÊÇvZ ¸Mä˜ê‡GÛu¼NÄÎ@Œ¤À1p…\÷”Ú€7k¤É`1ÚŒáþ¯Xÿ²Àø?”ØÞ¾Ç¿ÓiYÄÁ?]… ë çÏ‹…êAÙ®J -Øï”‘:ÀµWŠ«í k + ÖsÅM\³R€aðã:,hv¤OÁ¨îüSᨈxÜ¢pÐÇá×Ò<ý±E`% Ø—ðß’ªY˜T$t20ÃL$Xm»Û·Ë‰h™ RÔ¼%¿Y§¨\§ý׸ÿán5®Á@8 864WzY;¬1’«=¿/€…€««ê¬Ø¥¼JþB^úá²éŽÃQýð V\YÉCD‚Þ<‡ú<âX…¸yðsP`[eöLÀJC,ƒt–À2þ™«QÉç-?±ÿ5¥ŽzgYþ[’vsEÅÆ¢ÉL®c³D;ævàÚ°ßB1ÕÀàèÏÃR$\÷RG›JÀ8“&«ëåõÁbt& 9\RÂò¼€¶ŠûzVv¤­øŸÝ³R<¢½M8åpÌà`RŸd½‘ß6¤°¨?&À²å^-¿ªøŸÐ'ë¦è§ø/ò¶’¨€{{YàÕáyÁø”þnáB„”à Åbâ’Ú|ˆî¡8#ú¶»ø_äÁ˜u0(}ß ¾è`V ØáÀb8ôå’z °Ý.—‘¸³Ã1Â, 0Rˆ(ö/æ.ωêDÕæ¿`ÜŒ]‘W­Å?,nŠÿ>€©À_fÇ€+ì-Œk»9˜a-DÙ¼FBu<‡‘ßæéÏ”ЛSïR¾5¼7°V3E°¾áˆï>l² åô½h"øÀøSÛ›ìãë€<€˜Èb¼Ô°VZÅÛd~§ÍîÀUåzl  £yp‡…G€,S«E@€mÝûà=ó˜õÀ +rPDæçço¤s05üš—›ÈWæ«óµy˜oŽö©‘?oT™G¨ŒÀèÆ~@±ÑÐ`ŠÙߟ½±ÔÀñ»Aƒýwø~Øð÷ÁÂ[ #7ÔªU@î÷wÙ£Èîþ pýqã|îʼn'øy~ÿåÜ„d|||²ZkÜbOnŽgÁÍE~fì7¨'øº»ÜZšd_¢ã¹ç&xþøä·xUz +ÎTŸ £€ÈF!°ÖlEÖÅc˜Åb•4DÅ6W# ÆþàË™õ¯ø‡Nð#He¼O±yÓÝ›,ÿo™ñ?£crº¤Ó€¶² +Æä8ái¤ßy§ûN—„“3´í~Äw@Ôïè2ÂþŽÒ?ãÁ 1¿Þ˜ÝÍÑ_ +`€L8¾h[âÆ9ÉRBJ\qÄçULF•d€ +ê ÿÓ4ü¬¸}§Tþã8€ Vý!ÿ!p ì*”,ßwXñ6;Mß!›wî´Öä¸áA·]8€ÎqÐï÷?×üøñ_öû7ö¿Š•ÊœRQ´~€e Æï~ú˸È>þCã½CvøEC¿‡ÁJøtþõ¨s>ÿwQôQ<Œÿ“ÇH aÇ=$¢¦ïU^»úûö +‘\ þ8.Œ¿ÀNÀó¹gž{æÜø3ãã9XQàï‹já½È÷𜈺Ù3€ßÄ£FÀM~EðÌ3ÏŽ?‹ð2žËƒž| õÎZlbÑ¿ ĪsEù •„ET\’‘Ñ—b^à¼qÉ}2Ï©(Â`,MÚ@ûÏø_™€r|*ñe°p|Ìbìü4Ï"”miH¨ùÎÎ;ïhpà.>¶!÷è­Y6 EÄÍ ÿí3£I4Í P†€ª-+Ï”?š3@¢€½AGN%þm(³v%»MÀ’êÈž×ðñÐÌdи´5÷³†ž²O@s€Qì·’~ÇqOjHø3ßðÇ,·ÃÚRŸÎ™WáQ+Ì”çèßW= qу¬4 +œ„ñ‰FÌà<>Æ-cã)„Èç¼\®ÀADóÖ1xîâ…Üÿ¦~ħ.ããb2ÎÁùÏpx€sç^ø8ê Ù Dº»­ƒÅÖzyÿwMd’褠H¶3Ò‚ã¿KqlOln@Ç€·—ÿྠ€O´Z† + -ŽdÐG(¤Êç7^¬cz÷Ýwï9 ˜-¦tñÑR$ÍÉ®à!’?-ÝfBOŸL<ñ +síY @Ù÷’Îk4ŠòÔV/Ú€«¸xŸ ¾#=.åuÀ|Š þì—øIÖBL΃à¬+ÈÛvmo”Ø=aÇ€ÙN3 tC:š‚IöÌ"éL°ñ;­i:€-¼<8ĪÀåî/`÷†€©6êÃÛ¢úÅs—ç’ +w€W» ¦×­/Ž}ÇJ‚êùÄUƵ »IkÞã@ÖÂïñP\k¡Rñ£Ù†¢í“`ü ð4û8‚ Ïqh áY÷)œÏñÁ1E€À9€Ü¹ö +G½³ ‘i€2%Ó’K •#*sü´L@NÜçR¤?þ\çVqFt)À©£°Î*@̤0’\-ãƒE€˜±S€¥ñ1B)€ó,\ô›ï¾Û}÷>Àxžá3Aç^—CàlwJFR`ÿ§€ÐzšA?×™Ÿ"Òlº“±G€Õ¶Î@÷iôÖñ:û›~pÞ»W踟…~ÙQ0~ÆoJ@Ñ‘v/ìÅ1t;8bËGbÑà±±“qˆU ™ÇϷʘ%]pìŒÀÌÿ€N«ÌF;p`ýn õå~•z1Ÿ›òTiÇØ|Sƒý¹î DÔýúŠ*åE¬Žgg°ƒÖÀY®³Ž+ñ@Ôd÷Äz.?ÙïYð8Õ‡ü~ßòã“ ø`³øÎ„Ïê\¾@  Œ=;öŒ»Ú×ÀQïl ”Éös…l +•Üê’0¯ä¾Ìª%Á°ot7ðÏ(ŽˆÔY·°B 2Üw`D@ + š°| W€ oµÆ¥èhPM`‚°¾ úsÌŒû]<ä ‰Ÿ´è²/mŽ–ãÀ]Î=¥´ž¨`¿œ™ +`u 8G~£òq(âç¦ðC ¾%Ö™„[²‹' +iþjXì‡~ö}$Úêt@ÚŸãÀ€ VÜÙæ¸!rjþƒ”Á;”@êø¶Ž9Îü–´ËwÀ~ Àm@§ó`ïX^Ž^‚…Žºþ/2f?ŽåeF!ÙÂS3üøõݼ¶z€+ê½ß`iˆ©Š" À½îvGQÏ]¼pñØÌÑÿ•owŽÿägócyðôÁ‰ /ä.Op8`R¼W îÛ©%‡ Êå¾õ$àÜÅ.k#†Ÿ G½³0Ý&fd+4: €"aÑ(@ 5 ³".YV[à¨päÏò„@ÜÏ™5X¸E×ÏøôÇ.ͰPßöm°ìƒNçmòb½³ÙEDß…  ÅŸNó„`a«ÌñEθހë‰pË’0NüÁä¿ô:æ6âO+¼nI°Q¥^"Þ«ŸzÍÊ +P…ý&Ù§é£4ô(ûþ(ôÓ5õU0°“@w§lñ·€òØ{@ tÕШ#€ÝKB âÀ¶š¶!ïãÌDTï5A05ßËËÏ‘ÂLˆÎV{V«¬ÅsxmWÍþÙ$ 6ý~pJ°]‘ºâ"ݯ$@8+þŸ$Ûü×8`ùðÏŽçŸppàJ.3Úwš7à˜Œ5’Ëç‘v` +À+v:õÎ5YH µ¦$€Œ+䀸Šá_ëX¸I¥ä‰ö +ÍöK¨¤CߊÅó•–RLXÿ¯\^cÛòú—pðÎ=«Ô—Ø ªÐºiüðd £„ÌMíîý{pœ  +¤ñ¼ƒÌwSÎÅðwIóìÇã}ñCü§ ¸2¡œ{΀»Ú«å¯œô犽{Wz5´&¿ko¿2q΀³æØx¤¥}“<b‹? ôÙO!ØàHåh9€äDKàAw°³±Õ݃ÐÙÀØã,Â×ûdh~<_Yì¸ÍfÀayDóï±€Ÿ~áÏ« ÆúÌïÃ×^ÿó0 +«8 +Ù9h¸‚è +ùjŽ‹ ù€~uçŒÊÔˆ©bK¢ïñ(ù‹ 78ñ”WÉOi(Sìç-óùË—ÇXËW¦¦°7ïçs/Œýwç/O} õÎRê+<2\º Z¢`¶ö•=8&Π ë$ÜŠŒÿÁ‰”' ÿñǺ\ôŒ# +@÷ÏY ¤@¤˜ÉzW*ˆå}ðß`ggÈÀ´±x»½^0¡ÿn÷^Û¢ãv«Xš)鯸éj§eÕ[0óÁÁv7gøŸ‘€ôÉeL˜ `= 8v—@êÉÆ"gèÚâ?»Ô³W,æ»÷o–(É©¼b·à{ùû8æ&yö&HYsLíÓ šWË_sÛìX¼£·Û;l"h»qp=8²^²à蟀4 Û¦Øèìz§ÄXüóÌ×â/âØÏç¼&ˆö£¸¯ñ€âh—¥k1pxx†µ×—ØÇ6{צo‚h÷õÆn<Ž£÷¢0~î²Û½øQtøïãÏãf¿,x~Ü¿‹öOÈ>ü±‘’b÷ç'.pµVʃمJa2_ðæ¸ ß¹ur,²$c_ç*Sø|m:¡êÈÖ':Ž{g +Š(hrÁPÙ*1Fc& ¶¸Ùâ&†T‘^Tpñ¡\rÝG‰äÚHÖHàÑÃÀÈ_ d?m¿füi­sû>é?ÐHä˜ °ù3úºï¶ÿOßiݱεXèÙ¶pº×)‹ÿC€ÏCÚc²•ÜSP~…F¯: 0IÑTœ¹r¥ÅfMx§â?_qB~~¸« öjØ­‚>Ãü݈²Ða1§¸o`'u»í-ØrŒÖù-ÖîÅa:Zïåþý9wTFJ·8€½½-%ÚXË8€— +™iöÛ/½T¨V&ž??99y› +XT_š­ÎÚþÙk×°~õÛø~uv¶v£zß®¾ôRŸãYø»Z˜­ÍV žÛ®^šœ8_˜ÅtMs|¾6‘1ñŸ‡Oüáßü{Ï=÷|n|büüÄdnãØÁc^˜ÀþqìÀô"þ&Îç'&ó—.áXìÆBóó )8ÇNN²fÑÉ“ãÞ™€b +å4WË%õH±†Ø÷˜ P@I·Ï˜šð!ÚøO¸¸?#vü¸¶@ë,`¢ß²îSÊ뫈ýïAîQX»/8 ýM^Ü¿ß}÷Ýv[ü_cV<â–••ŠN{¥<Õ“Ù9}ËÀ=v +) ¬|½ÅäˆýqÍi]™ äR¦ ¤¥Œ±ÀîÅ+›bÕ>@OæÚ!vÜë §µÊÖÀpŒäKì\€­HÌ3# ½Õ’‡ÿIts(6qÖX$[ô€íN©…#ø°ƒØ¿»qò¿;öY°Roÿ‹ ÷L~ÑójVe?KµÂý`?„ø%ÜÀ~°ôRƒµ‚wwwQØøà?„?÷£ý(>ìG8(z/Œ£G»a¼ï7ß…þOƒ[¾·¨ñ:úÇý¿ìœ]ì;ŒÌì— ð.Âüo¹oM䯳Np¥pÙ«^ ®/{Dð‹ø`ÆÊܯå+Hm„ظàÍys ׯ/ä/»Æ@aXyíkÀ?uä; pá0ÁЯ"J+¶ÖSÈæÈñ•-C€T8Õ8ò §¸•íö² +`™tæVWWAy¤ùAzã¾9€5²ÿ¾’¹÷:÷Þéì çlnnm" °ù.€ñ ÝZOL2B± ¨ˆ5o—9âMiP²(ú‹ÿxœa ÀÓ&“Á~¸« •V‹0Má„Õâ•+å¶’Rlee³ÁôÀ]i|gÏý½ËNA ¬qâF +ÞR+;Ûå¬ À‚DÌ8Ú*wñn‡óì^%¨n‚=Aö:tø¶··³HÀ˜óÃ$òÃGñÕóùêejÐ@…_Ôª–p¯×9ôwðôÑëAü^ð(øvÔØõ?Øõ!!›àl5 šXo¼÷h©öK7H}iu\?h@Y´eä÷Gá:ùñ1øÊäxï}wƒ¡¯ò¤=ÒùÐY©Ìá2—!—òþõëÿ„[‘Pª?Ÿ{q||<9?\r½—žǽ3 0m`Å—Ký‡ó˜ F€øNüGФ&ˆÿŽê¹NÞ˜ ˜o\Û¹?«.þ—X…ˆøëëkª ÀÞ!àÿ=Žñ™xç#‰kèÒ¹GÐffÜ4­Uˆ‚ãˆàA÷ýîæí"ÈÏr9Ž àèÎè_üçº/==ñüs‰à 0 0_% úKJð^çg@à®2»—»Zúa¼…‰ÀlûÔ€`3Xkä, PšQî›g@µ{-q&u°Ô‚ ìÄÌÞ RQ¶ïÐP  Ãàׂ7W‘§Øüßck Ù†šÛ‚0¾úÓ> ü5±¿4j‡ÍµX@úl–Ë⃘# ®(Í­–ø[æ.ŸÌ‰ý¾+fçÇŸÏUž¯,àR²â㊓•pnnÎCÜ’ã˜ë|›cf€?™÷¯ç¡fýåsããÌ0¬„ù«µú©pÜ;paР:·üT ÄgkQ×ÌšB/è' ÆóŒö˜®§'8ÏKjø ÒÛwcû0´Ý‘Ÿ°Ü?[²5€ÕÿH|óëe¤ÿm†p²°›‚Í]Dÿl´Âܸé™V{S8€âí2ãÿÒm>‡ Ð K€{nò?k ´Ï€âÁñR`:ü€0%L&Îz'¿ƒ ûßzKàèŠd'5¿%t ,Vv:æ¶8@Hö•©*‘KèµlãÝÁÐý¥÷”!*Rì¶mü瘸‡³™ ·ôüýÚÕGQ £oÙ«G­¯¢@R¹Dþþçˆà¿¸ºß¨5µ”‡»ßå¶`…}ñXña|céÝt&•«ÁNFN€Qõ$Ð\ž¨"ÊG„^ñ'n^ËW+õ^àúÈ Ã*¡\ÁÜu~gIB>ÿ-ËÂÂn…íO†ãÞ™€‚_ФÕXßDÈ-"ἦ~x í„ì>׹Ѕ¡Pl+ö¡ÀLa4»Þ:Ü‘Ü-êXú'ÿïÄ’FÿZ€J•`>“xçwÞÕŠ°u!žpÿþ=@k½ÕÁ¹,ÇN€Õ×7ZpŒÿ[ÄÑÝEÿZuî‰ÍîhJ>¨…Ù±‘w+ ÛÕë¢hoô×lïÁM¸‡>tÏ +`,L±êDpØx5&Ì$gS€—pÇi¦ÒõR!€óøA]À6u0î u‡'l!‰Ðn›P& -Úllà¨çðéÒÕý})‡x’Äb…À ª"¦÷ÕEH“½m÷ÙÔâa£¶_kÔj}Dùê h®°€_ï/-ÿq2"ã¦"ðíD°[¹ Œ?{1Ÿ[“!ÌÇ/°ÈÿE|òk÷BÛ†o𠲚~Ø\Pðc»ôIpÜ;@àËN °Æ`ÊQA'f”í`|&˜å‡hŸ´.ú§Xì#qÐn;€UÍ鞌(ÿ߉éϱA$)Ný#Ü# ØR°Asï݇F¸^?A1c0U€Äl–_F¬,éô,œ5%2"-˜Kìˆ^áx!6[ë€\[ÕäÛÕËv3Öù +’?{)v:ië`¦(ÛÎM‚92¶ecÈàå €kÅ2Û·‹-Ë4@p ²TµüLóä’<€;\âZÝN[ ~s{Ò Ü™ˆWC³wÍ À"‡«GµFö^u|ÂþÕXÝp/ÕüÝðÛamw €Àž lSÐTÇ|A¼äkL!°aÕŠF¸7`¶çM±‹þx­‚_›¼yͯ\ 9‚ p@SX¨ú•?LàúuX¥rL$„$eN…ãÞ™€Ïi€s­v©WöBÒ€ù +¦¬Äl„bbL´Ç ÓJÜž8¤M:BëŽý€Òÿš z¢!0™/pŸM^Åû¡Ê÷¶03”2ü¾Ó.±^ù¿îrÍ@ø}\¸ @®ëψO!H6 Ï»' ?:wÕni³lä4àML¸£  +(^,«þIn“ëö0e 7Á÷ ¨N6çéóW†;ÙRO@õÛypïˆØjs-9€MVþÍ8$¤"ºË0ÀmnŸƒS 8—Z÷Í@:-Ls-ñ ÁÕ]ò¿ÊÌr–³³n¹_‹Bö©õ™Û÷w‰¬B$|i·±ÔúLÈXí¿•*=©íºz?`&ˆëÉ#øßÓr¼…&´Úh®ï ÿ“-üp!žXQý¦ŒgÕPQ.k0tr€í#€KoXEj€ÝþÏð²ŒÿÁ—-*€9$Ø:دŸÃþÄI€mâÓòIñ†Ö5 è]•»°zÆDø4‘ãé4ˆ+´æfüc¿{¸#®Ë?7Cj¯ŒpJpY`¼@Ê>ãZråT»À°¸‡·ãjHä(Ý‘™Û;r¢½Ktn¯©"ðÎΘõ€çpuWcüz•I9Пµ{ŸB`ÝCöüE…/’Ú¾µ›û·ªK»¥x9‚øä] "eþG~-â'£hÒOáà/.œ0y˯0>.÷oª…ŠWõBÏû‡ý&ë¹X\€Ì]§ÿ_–àL#€ST[¢@ÀãO†ãÞ™€ tDYZ…u:€éÖêZÙy€Œ¸‚‰‘¾ª3) 5`1¸Í?23ÉîÂ6·Y¶þlaûñ§0ˆýâ¾³¬ùOþ°¦|~€²÷:™Lî9ô­ÍNÿŠkˆªÿ3Ê:‰`=8+Ó ¬àIlCº‘x~sý.øïq?3,ÖáXÈ÷¡H¸¯iP¿€œ—àl›5€î†O¼T¾k¾]-ÏóùSl¹Žð+aˆ$Ì$-™Œo·Årðžñ6Þi±Ð6Pc|óíPGR@®gòpˆ¶á5K¤¨&°¢ÿøx§µ!ÆT'Á~Èœ@¯Ve€Daƒ¿z¼ô£×½ ¬~¡ÀÜüøõø«,ëÓ&~H 4{ÑAÉ…7bV-f—¾ _År ”—p`8FNPœ—ƒþWªÁÕððV5X¤Ap€X,ø+´â_- µA0Qà{Á­Cnü‚ ó OƒãÞÙ€ |‚qPe¸5€¨K €¡$c9DwW\€›BàþrHAÚ}wá›°/þ3 ÀÀñŸÄxߥÿÁÿw;]rœàÞ}%óõïàôÀÅR ó\W§­ãòŸy^8ÝØv’ÒÝEþ °…ÁžIp·Í‰Ù6÷%ç%ð;p„î¸nª%Ö“Ù˜“À^¸ä{A„o ×c[!½_óìö3-­Ãük9–ŠúaàðÖ@€Ùv8ˆÀ½6J@<›öPAäHwŒ ¬åÏÜ\ÉकuÍ|H%…t[-÷hGÙß5:€€ìóûµ0æ~A3Ú÷fÃA{ž¥¸_=ªq NÇDÿðÿ½‡Ê4ˆU;z‘ùû¹ÿ´â¶øHwYÚ+ùÏúÊt óµ2”P‚(µ×(°|µÐ×ÛÊAF„¢Æe…°Æù^ŽôWCé >Šd],kË%V<áp `»Å†ìñ6u{í|õóéØ.€wÉŠ$?ùÏ}:àmy-Uàîlí=pPRã‚á$8è±ñ%Ÿ›Ì_CÔÉÈwñÐ\^^ì_Ô;§PÜ[‰oFÕæ†54{õåˆcðópï=“ ËVPÔ/À Ã"z°xÄDD•çs¹KPÙûC/D¢äê#¿/ƒû´Ô™e\Â1;¬V¨VªÌ ¨ÝÖãÙ¥¬Àˆ?ýP]oÁ°3«5fàAМW®¿Öe´´˜ › à(ï²³IîÖŠ£êÇn’h«V˜ BE€ Ê„@|Oº{X‘` †ßç0øÒR5€”8¶µþãWîí•‹ø$ÿì˜õ0\pÍý%°§Þ†x›Iæ”Ezc?–Xä­Òm^’°\@{ÉüÀ¾f¾éA¯¬î ;cíËE^V5Œ&…Ó4*Ú¹]æðÌ ‰YúŸ: ÞÛ¸¾Ý.ΔñÓ;Ü£ (¢ç1b57ðà ƒõ *Èð"NÐø«@» ˜aóBàH1 ¡æ±ÓL— àûµ€Õ桳»ûX[ÂZ7ã•fï«ðÓ vÈö@ŒýÉ6#ŠY§ñs£þ×q K€ÓœÆÿÓR^òã¹ |¬ä_ô›}?¬Uú|2<§$€ƒ†ÖopT­qÀ2e°O2 +ÀE¿_iü£u‚  D«ÝšfUàuŸ €¡R†s&IåŒý Ÿdº¸/þƒ0Æö1EúèL‚_ 飿@©lKhƒ\ÌH±^f5TÆ÷ î³$P1zêî!ˆ®¶ –p§ôéâ*íè¢m÷:«ˆ}[,±îvßÏÖv|O$À¾¥°gºË‡SxÜóÏó…d`Ì&àôÙ@mª˜ìç¤ò@ìÀAZ58À¼x`ºÅüA‚±¿ÀˆC²Jõ£p™€– G¦Ê°ÀŽÐY»Í„“܇½É|å %­™ê‡Á'ϱM5.’׫L¶ÿ!î´U€cóÇ C}&Q»_¹„$@½‚€\Hø}eü^cÿ\õû½•æÁãÿûÒî§½•`…V=X š+±ê/!=±|بA9  4á•‹SÔ€°˜É÷ËN€Bùï/Ö{!™Þ‹«5×9‘Þi*øqµáèæÀbÄò@:€9\°_ýÇ[زÙð¿ÓV Ó숛 ÙR@®×ò°¢˜/…èï/0y Ø$`l°WË”ÿ¬è `¯ÄxžT˜FHµT€‚&"~ÅSÊà +õ[oÝi1Ìo)C 4=ýrËõöùßÿÿèZ°ÚÓ ƒÜ?ÂÀÛz6•®ß… ð‹9 } xR‘œKçèùùÛi¸Wy)õ ¤Ì\IÀ0ø Rè÷àlec íòLVð‹Eß.Lò˜žoq|9W¸¯}r¼€7J‚cÀ¡©Ü‘ÿ'º{uÛö¶Z­½N©¨–­Ûìx€Ãøñ£~? +ØyGÀ†@=l®5žFOãFüôéaŸÍ„ã'¿úê«_á¯_Ý}½øôð˧O¿zþøŒGý0Šo܈úýƒƒCë›×ÂÆÅn„íŠG¡w~ÿ¼—á±­o„͸ÿäð Ç()4fcÜþY>9Œ!Ž{gä$ÄçÄLÀµöËÏÜW×ZP „tòÞ­Ó¥B2R‹0‚4žwôÇ'Ü¡ýÜK¶¥&ž6`ÝJÿ`ðG(ܾ'wY@HÛ „’ë­Ö*6Û-8€uV° ñÿ[ø…ÐÿCæd½ßÝÐd`E€þã ù.ƒ’ÙwÕqŸ´]žf;ûùXbñ5l °J`ªà4ÖÞ8þ2Þß­ªOö‰i•û†08æœX€߀ì@Š-&Ž9|P + €MTV¼ÜDRp_™€{€.àN—`PÎløµÚ 0yžeí× +“céÖZƒÃÔªì6xÀR­ÆNø9ˆ6f¿½{˺ã×8^Kö/ÙA¯ßàåª^õÚ¥K…\Á¯bÛê<¶†ÆùÂn-7>‘+° +€‡d£õÝZá*žA%óž†.œŸ¯V¯Í{Õy¿ðzu“WÅ5ϯñ÷\ÊM¼0ž«Öü« wÝáÈw€Ð‡)™Ñrf![ÚkÓ33å6Skkl…ã B¥™úØ|A W¯V€\&è’ø$Œ€6»}Z³=ÖžZ™ïÇžFr l*æC0d„ @" ‰÷é¸&V¬¾õVË;þ½Ã ®z@ÌÂZ} ß +þ3 wÛkÇÀiÀ@¼\MÀ!`TÔ`¿~Çø“®E ¿É÷Ô°¥5cÛ@’ØÖ ÄýðáÇ€÷:­ :€cˆØøåˆ¬SV.V|ŽbÚ¿±îþ#Œ¾Øÿ Üý`lç˜<»A¸î.Õf¿ˆ¢ø‹~ü( ҇W÷àÁ‘C¨'~pË›õHOä+7ƒà§á­FøÓàò"ᮇ¨=ÿ"‹ªž‡X>ÔÐEþ׫ \x˜ý ±õã«»ˆçm˜ahW#¨VkkµÝF@•ð=VÎãÜ]^âT8òÿ qû‘t¶ªÕ‚(g7@À…Á$?A-°d€EïæñIl.ð5á9¿ó›n3?ùÝÈ6²Þ­0 1 +ö*Þ»5‰ÿ©`À·Þjß¹ÓrôßÜlÍÌÓ$€Bû[Å2ôáCñŸÙ­m±ß +°§Ç]¿KÀ´ÛüJÐoÑ+°YÅ|˜µ `E :~|gâƒìçÛ×Ëù©N44(kažîðÜš±5­dÀ¼Í”fˆ_ V3 @P’ ©¯)͸·Ýî<èò3ÿi€§Pp 9€»íí!íî‡7 çÔƒèðWðÓÑëíûì(ŒûHf“»ûá›Ö‹¢÷v±xxpH‹þòõðßÇa}y9 +çO_Šaô!¢3Üx×Âïæ+쀃4ž€÷N-¯90K‚àŽOö0 {ý¸p¤2l ýàé/¯ÆŸõx_HÐ-œ…¤GïÖúËØÒôß\Fôƒ$8>?urì;Pd d3e€Ò™U:€âL1q©jÒv’^¹X"΢÷Ú>â 5I`"_ü·7¸?;rÀ8ÆùšÌpUƒ›o#*#’๮BCô[mur!0/£ôV*ì£ A @&ÿ9T~‡Ï1§CУa~»|—غˆÏ˜þÌGâ+vÙîãK¦C'1p¢¸*½òsCI%í¹b…÷{ï·ýÄÿì¢pZ ÛÄ|SàôŽÊìœ:©ÀI2/™9‰ðíKtàƒ{pÛ}ÜÙhw?L$À ¯ ˜‹ßlúlZ˼sXç zÉŠò þò3êáPðiõaÜ\áˆoÖø¶tˆ#DºœAÚFÁgþ»ÛžÖ: +EÜ£Ó^˱-ïJüžJša)l²…Ñ"¶QÍ–TñÈÃq† QåXô­Ž3.Rïõþ¼÷0†|ÿ¾iXØU)?``áÒb#¬Á÷#ò×vAÁÐ+°?0·jküÇEx‘‚ÇBðÅù„åä*¼6&;Åy#½V2ü«W×áXÀ *o«Cºúû ÑT¸Q†RøŸ¬HÀ9€Rë}Úÿ½î½­”|r›=Ï€þn;ž®ŸO¦€J`¥üAî—=Gæ'@°¾jÑ>&o×9¼fk ˆÿˆù•@À»¦îG¤`¿¹ÄNyÛÔ›—‹®_pìÙ;Ûl(Ë3Ó¶@™€¶Ÿ;%`[]üPÚØ°­ÒCêØX‰(:€-Ø©ÖÓ€Õ|/Ÿ“ Á,kÿ¥À1Öñ_#"Õçl¨ª€áãZ#>š=yÄüúÓ›¼©<€e»ÃŽÃî00K¬Ÿ Áýà!À‡èD³ÊqXîü¸W¯³°GëááY A­ÝônªùßââÜÔ¹‹‹RwÏáøMC¡7¨°jcïAhK)øcßü†£¥ ûñ‘²ß‚)þ°&Ú˜ÀÊ€ÿ7ê@J½Hw’\ršßÖ§»¿AÒ;q›[¬çRþè7q©Žë¤Gñq¦uÜt?|ëŒÿ1mÏ̪–ð<ˆ'²ÖíMJP.žçO°‰‹ sÂÀrÔgìOÀ›Î: Ìþ˜'®à“/ǽ&÷ºìG8 5´Ÿµ‰÷FïuW-‹¿?ÀþƒÑ¬ +lìì<è܆Pð¾$Ü $8À.ÿ$xs퇹\gª/pïý€¾Ö0À»¨¸$ZôÃpþ! H#ð¨zàG½X¸4û³o6Y߯ߨ2QÐ Wx$í7Ý;ÉXó/yùsy/h ÁîƒNœþ(@Ep5^¾„Oå{¸3“€¸Æ78dqÐ êÜ-@(xwf2#Áç‚àâ"NÄùtÊ„ÙðîHçƒ÷¤¹ý. `±?—Ü1h äB¤ãú逽Ɩ„ ÖKúm3àŽ³;!Ù©(ÕD€K,¼Ý~ë­·ZP€· )$Êù#fâŠ@)³ò'ò§Ø®ø¿ÁB. À”Ø)­­aCÛ=σ¿Á3 z[|BæÐð7æµ<ŸW¦KìÖääWg¬53ZŠ!d€®g2€¥ý†P³?Æì¥N÷ý;Eü—ø]À +ù/ÅÛ<»ã$HÔÁ9R¿~ãM1% 4@-±$€|ÇG{[HÀllŸ$`±hgÛ0ÛË+QÕ5ò™ßð—Y +û6#±¶ù9; ­ýÚü§p½ØuÌè—KR±v šò-~Å©vÖ(ððQ`.C€§bÒ¤^—éV"6úõëqU¥Í˜8ž•À_Xª…µy$J(‹žw} +€ç@Z,?ñïûøs ü†¡œÒ ŽH¬1©Š° Jæƒ;I:aqŽúçÓJ€Œåø9 æ¨ÙÈT;àëÿüpŸÂ3ëò·ÖàX%â¿zÝ"é@•Y%û©ÒÒxöµMZbœÙd ÍRÀ÷Àÿ‘ÿ°|h÷ܧГàm½j/--¨°óìgcRM@Fëœ, `ªê’z¹Lp/ØhŽ¡„àfÿ_™È8€Á…õ€Œ˜èÞQ'%Ðs„dÀ?ßÛÛQ››HJù¨FÿnwóöV*ìcL@ïÅë;°9E§ÃŒ€;pR-ü ý–1F£)Àkãg 4€P üÚMò4IJ¼©B@DùÃðáÃðI5‚Ö–84ØJó çdDÑ6sß«µÚdöâÀÉ +P»9z‚Á½ÕKž‰ÏسSâ—˜EyXm„·¬ÙkRdìÈE/Xšÿ‚O7²0w=qü‚§Κá…§þ9 +~£P¸Í"› €0‰аIþCØ(Û(Ã_?•ÌRã +¬æ¤ùŸ þ8ÛÂEÂ32Þ8Ï·)ýËe6½a¿¬€ÍúáßGð–Øf Ëtô@ÆÿˆåÉ–8°ÖÕX–›%—Þ Ñ$ÀseöòÔG~¬B9ùÃù^Ò‰Y`µø_¦Ð*X +@ M?å0  P& › ÏM¼e2æ€_ŽïL +µŠ­îÞFIöáØ1ÂüpoïŸßíPü/àü”½†ÎŽ3ÝÍ2;ýì$ ‹÷쀫¥àÁ¤:?B’®‚%Ç3˜JcodQg6=@˜ºNXðÃ`À(Uq*Lþ›ŒÆ™ wðð˜XîÏîÆ~ôû +Uÿãp…€ƒY‡¨û+Á%ŽýO`1‰‰ÜãàQj^ŽýýÒàêLq!ý¨V£K„5V c¼9+[%„]ì\`ß¡PÊå æNÍŒ48~£P ªZ¦Œ«„Q®ÿ‰¸P8ê;(ð¡3¸áÒ ÿÓ <ÁäpäçÙõª¾ +ùoµñŠ„hD×ß¿o‹™€Ì¤Ú¡ €øÁûõ!Ðrñ¿8“€viM!_!Û=Âz¨äÉFþe$ýËæìåûùšÀ{€ š@…+©8*G!À©¼®{«šŽ;ÇGð´µ³×.*9Ÿ0@UvñJà_~ôîÞÀ–,ý)ăx3ì5i‹i svQê +oÈöÇ.ðq·½±Öîr¤5üƙ☟"Qæ(¹]óƒÆlð&·Ý¤Ä=Åî8Šõí”YÖ;¼±G_Àòй|UGQ0¯ïâ pˆž%'€ÇÄMI€¯&ÊÞM–í×YÙ Ã'³µ8ÚŸý‚9ƒoÔ›+ÍÏzÍXL®ðÄ{5'ð €ÌÉe‘)¿Q(øzß.©Î ¨ÔqìÇd|aÂj`ûË^ÝgÂÿ “t¬ƒ‚ø`‘·´Ùö¾½Erá™" Ði߃sÝv¹;?Ä}LÿÇŸüèG2ƒˆ“)€6’Þ’6DãÿãIü~ïéÙ¥øª•ÿãÊßÿ~ïð± IÍ? aÖ˜3ÀÔ€çÍ]Î3 À4€£ù)p$üÁV¬ÇfY€¢Â¤èϪµ¦ +´ÖÒ¬®!þÆ}.-ø§Ÿöayà’ñ‰³NpÀ. €È”JhOzÌáà×é¶-âÚf— òr,ãFüïðüÉ~üãý¨•tò6HA~ ^ku>døÝ*­3ô[à¶'Æp"‰’2’åWÉü»Ö.ȑՎ Vh£ &`D}—ÀUä¯0·Ž;–NÀ7°"ß!_ ^ÕqÀb@– Y(ZzÆ~ ~³2ð)©Øù¾»º÷Ç­ÒËÛWž‰Eÿ¦b;œ§«TàÂ[‰ØÄä[ðH€™{r-œ ¶<²À²—{@ ¡‚ ƒægêü—1uà‡Ÿ5ÁÁÞŸ|ù˜ ÿq>©M{ßkbU ü &çÊá…‹Ê<ä þ¾ðã&{bDz^„‡‘ø< «ÕÝÙ¾ +*©?¬ìŒ0AÐÇ–(òûªäD 0WÉŸ»°°Ì'ùz8~ƒ‘ŽÌǬ Pž)!<›˜ ðR @h„Uš¸º£ ÐA\ºƒñ™å‘nàWœìÖrfÛÁÆûÜh¯­A Äx)€Ë½âªú¬øÉO~b +@ÀøÿG?úñ'Ÿ0š4°‡œ­sïý÷»[Å;¼‚1Æ=‚Àç9šÀ§c–©¸Î˜šìÄ~.µÆvÌ«««âó•+&hä¿2øÅ¸¯Y 0ý€4PW´ÅˆRМŽÐî®Éµ[v@"z_Â?ÿßmѤÀ¦¦¥‚ѺÓjw(ÈV9ë ¬z!¡ÈÀ|üá‡ïµ[Š;â±8öy‡O" …>ì:[ò„AØßÝíGÑÓ§ý¯Ÿ>}ü8ŽãO£øð«_}õÕ—Oÿý¯Ã?ývã«8 +Û>yúe¿÷øiÜW;"mé÷Â~ìU‚ã¨ÿùçˆËOÀÏF#~ú4þÅW‡ý¦Wo²©pxøåÓ_=yÜÿÅ—Ovg÷¿ñô3Þ®÷äéáAÆÃ•p7?ùò ÷ÕánأχáG)ÏW"<Æaßµ€<Ž…ß Äy6gK–ø³Œ@9ÖO1—ê²­D0¡ý0Uà„@$A„HóÓdþ‘óõÕ¶b&9DaS™¯àÏBü¤ eô'è,€oÀÿ,h~ð£ÿüÿÓ?µ³I xi¶j±=2õlG1¤z(€"``ŸerüvþS$ 4ø®€Kdù?” ™$€^Œ-íW`²OˆP¶ñ?kCÚtñùŸÛ销o|CÀ?ÿÿ´§áà‰Ñ3ª'äLKÉé½Né­Î4`¯{'ëtY—`™¸Ä‡, d)@¿Îh4jKK^µZÍO\˜¼T¸v ë7^ +µ°á7ß›o,Õ¼ó7æJßãŒZÍ^v?àY7ækµ†¿T›_ªÞ¨VggoÌV«^mi¾R«M^šÏUÙG@ §ócÜðÇÐ`Ë_¯Z`?E¸¦_e—þ’?_ó÷gw?ØÇÍç«ø¶äÍ{µÙyÜ›7ÇãàŽ¯ÎÏÏ×pÔla2÷üÄw«5VQÀO:}j8~c ÝÎL ,Ãý,£N¡OBÆæI€rJÆ[gøUò0&iig®1Ëí ÝØa‰í) +˹Y­‡LÞìtÞeþ?¹‡ÿ×€DþTñÿ>ü ‘'÷Û¥ÖæÞÞƒ÷»›–  =²`îaÐÐI +Å~£~µ›$œ W®˜­ûÁn,yJJÿQõ˜˜`@ã ²£yÌð§ªÑ”ïtà˜â€ÝÛöè¶AÊÓ?ìÜ.—6@Ý=Xüa°ÐiµØ\ÂÀ\3™Ø”åèlSöº´ÄGtlŒ3…áâpÿ§Ñú…ñÜ$óÏŸ=zì32èõ(Â!Xß9’x=ŠoÄýøÓŸ÷û_°Å0› +ïÞ‡ac7 +á&Á.»ó ÖÁ¯„¿ì?êïC3œÅ>÷ÇÀ›?ªíÒÿ‡þRðSÜš7{T‹ÿ2ÚÇÄánâÆHüÞO‰›GKñ£%pO‡Ñ›•üd.W[j,5x‰¯ƒãá7Ü„ùm¶k·å*6ðރk†ÿfZÎö»™"#äw-x¬V’b€l)Næåt0Œ½ÃzqìÐÁ|ë-öê!@Ø'‡Ý£ Àüƒý@ +ð#À‚´ÿ~ü¯ÿ5øúÿà“OþWå@Ì÷ï·[¥Îûvß—%)ó‡$à÷ÜÃ0mâ2]€Ïžü\üÉèòjiâŠ^§s\BüQ +P.§õìMÛþì5$Ødø§ öe§ßì\àsØbok{ïÿUœþ!` ¶Í,Ö·59€ìÙGIöògc€v»›ræh°i‡ý±_%:&+öº†1öá•"~Èμ˜Êå¯W<ÿµ› Â`LŠ¢~ J€Ï°÷8ß#Ý«_r  ‚E=̽è³]6ÕWz¬ô…ŸÅ×®±£á<{óòý÷Bvî1æ*Žƒ·ê/ízöñ°•?¨Î›Þäˆ$At€ãR°õ>çÆÏÙûRŸáGiœÒj%—¯ÞªùŒ¯‡ãá71ÞÀ-” À¨åŸ²©H×6È}&T hµú$ Ãà¼X2à`‹“¸&*I2pCi ºæ}L3ÀeØC¯Êȶ37Ÿu~¶ÙpgëÞøÿƒ_' +ð“_ÿÕ_ÿæ×?&ÿ‘ø}À'*hSüwq[ @¶yÿ!葳(»!I|>˜±¼,ãó»RØÇ‘Íi®0U”@u2‹þ%±nv¬O0M Psàäªn²n€ÄDÚFÙ·),J 9à:';?üÅéÁš@¤5À6S-;%q”ªm9€DÈ}þ¹<9€ÎŽŠö, MуµÛÃ=5ÙÂ6êÞÅ\.Ÿÿ.»ßwVŸß<¼õ˜»Ç4;2ŒªO•ñ‡“¸QÕü´k¹î3«Gv­ å=Îz§wÅéZ%k÷g#e.ââ<¶^£YÜ5—E8•­2òW& ëŸì$3ìPIwU›8.@fêÀHèxy–llp_:ì0HÀöοü3ÀÔbcgoo'qø ŠjUyj¤,B+ ÀÜ‚xkŒþùã,€‚¡4@›ƒv•Îp€Ìb6½wa<[end +ˆÄlôh©ªA0xfX‰_ï?Ä—æÊ2[õ•&&@]ÀÏW—çØÿºHu +‚•¦àÍå~•0ÇZÀ!–8†ÕÈ$À©Ø¸¬CõV© +‡µÆFq`— ø]µß މßÄ~Nÿk `yÓ*ü³,ö\·¶Ñ†ÿ§p,H‡j8šðSœàWR@ÿÉLí ŽÀ¡PÝÙ ¢ik«oaºÓ~k äUõÝMÄåÄ=ßû2ÿ>¡|òWÿùo~ûÛÿúÛßþ—ÿüןüèOÿÔŒ‡oÝ#ÿWY +ðáƒ÷߇4Æ'>åØC§`5=ˆÓ+,Ô¸ŒÿW‹|~üˆäçºêLÒ€õõé+WŠ. @~3¢vUÐ!á?lC’ HÚ§xÎ1ß&ÒZp_IoÜ =hÝÃß”€Ž$üÙ‡Åéx§T¾£B€$Ç€ý†HÒ<€rñ¶`É +æìuyK›q1—@ÁШÔÀaìI,»#.°îB¥òûß´23|~å?Zá~£?Vš+OoÄ= ¼s5|‹¤bâ +öÄžW÷(?q¨£&Ü}ù+/š‚àବÀʼ‡³Ÿ‡zÖ_Ò qsîà:ΣxZ CÈ}Ö%ªPªXã—ߎŠßŒöG°ÉLÀõV IüóU@ÅkkëŒþ1¹xN2*]ìOp4!ôg+ŒØËПALŸOÔ€cIæ8€kiMÀ"»íÚ@:wC™Ý.Ü +¬ðk1 +ð(À¯ÿú·¿ýÛ¿ýoû·”€¿ú× ÿÃÌAf2þÇ•k!¨ŸæŽ°`‰€þDµL ðf’ǧ›Á'Ø¥ýpE:³ÿLp@ÒQ€#ƒq†>@Ô+0À—Lೕ8 +…Å ¿)lïýÙ»Åé½±Ñ*µ`ù‘ô×fœ¿Í.ÀÐЊÑLo‰ÿ@kËRÞE@à@Šab±‚̲¯Î·¦*Þ<9 ¶ÁÐC¾â8lpGn áac¿g« "~E»<žX©ãX$j~]`Îg£ÂSÌ·]i–ýÆWÕ0Ÿ¿ÎqBÜ,Œg£™ üáÉáà|§€4—ö‘ü'Ô€€â•H|-¿8ʃH³–¦ñ¯§ùǿߒ£!3ƒä$-‚·ƒ \µ¢ !SÖ$`áü9e"Íd6€…îöe} O‰ ,HÛ¼–×ÿÉ'?Fà“Oþú¿üö¿þíûïÿý¿ÿ·ÿ ø/ýÉ¿¦=øä¯Èÿüàó‰­=Õr ¸Ç2ÄϬòiüþŒÿÓÎÀð§ºOmç^f*€îŸ,§SG@\ìÏa”×KÎhÊBÌw“âu¼°÷~À:úçf1+ýèüPðg{¥;ŒóÓ"ƒû¬ÜÏA)@«x»Õfš¾u{ÓÒº2 5ÁeïC "ÝT6 æ+vvÆ¢Ï2“QûºGÈW®¿öݬøËÀÊçÕO1¿ 7ŽÉúàsã(9ˆ}2ÚϤ€ê…ó~Þ1ì=-ñmWl+y¶è£H©V°é!ïÁ'Â"î§ÑUts®|¶h?¤ƒüǃä­Çãß Ž‹ßVG|‚ ¬•g@zJ€\ã'eÚdt\X‚%œð-®è‹m×Òƒ³ŠW½@AGH :gŠeFlx6èi•6EY »â¿ àÇý7ÿõoÁ~‡¿ýíÿ÷¯e~cðë_ó÷¬¿Þ}‰gF|âÿ¨$À0Æð(x ›iôlEeÖÙãsÉOîp à/°_–ù}f Ä}©6'€W³Ù&g¦?Ó7!ÛøA¬hÔ¶4¸ÑT¥`¨K'€éé÷ÿÓaÚwZ˜ló}ö& r[ 8ävKüO€Â’8€Žà` ð@ca¦#Le¨“,€JÅ«ÂxÞMn¸ô@0Dï¢8Žmî†ñ‰u ¹ > ©n‚ê‹‹ÒíN µ“&—çw ¸C]Û¥'ÿܱٟgWD¼§¶àÁ Uܱ0sÉ?ˆjq[À³”€™äs$|¿¤|šÄÿöZ™-Ê=Aœ [C†G–âY(À Àù%Ä +£uìý³Å€Åç`> ãm’€à¾"&eÐSc·v©d1ß½-–ÿu~ò“T~üã_3úñÿîïþÇÿ;)Àßþöo eüÿÉo~ó÷k:tïïµÙÈ@ÒGדé +aÌ/—ÙNѪâIKMï$t”A š‹þD¢r%g*€ñ®"[XÐ=³» Ïͨž©#æl1Nîì`'(ùHÀ@÷?}Œw¨$ƒë<@müM²àA§Uv¹€z÷ ÖÜW+²?°;q®žAü› òSsª ì'õúý8®†1ûªJÚáè_ì†}œ£h_©s9pð_e\õ½ zScêÉü[#' èžcý³ŸR€¼ûÕžú“@Õ©xÿ”úçcÀ94X¶a¿€‰ÓèËïÇÆoìöïØ´ªî××>%9ù#lb-“Pc Ñ@Áq±?u™ + ,`ü7…Hpß,¨Õ€°¬í•rñ•23*!«˜ÙçÕ&8‹ðO0ø à'¿þ›ß*úÿ»ÿëÿú;á %ð_ûŸÿê7¿ÿ 8̓@àC¤”`?Ï¿#ùK@úóÏzÿ1QÄNc+—|~ @†ýt8 ÿ%tÉd³ÄÏ9¾–!€­ €ºiÀÖQ@.°ƒåÞýWÃE´•‘?ÄB‰Ð?ãT À~Ñ_Àµœ؆bìíá°éAXå —ú7¬4I,ߟ7P™¯¾æÅ i=. ©fȵfÜcή¹Á8v Â<@¦‚&sæ@N$)ÝJ<öãƒú´®$€e‰<×ܰ#§Â±ñ@–÷éÄÒõÔÀù+‚Òø5JœWGTFW ?gòŸ\`¸Mˆ£Cm5¥’L# @ ly>eH0­zr«êdZÁÖ9€{?œü:±ÿÿ€.€&€üÿ1 @’èì}¼÷þÞÞ¦€w¥ö¬Ò©ã°gy•" s" $‚~¸¦¬LKì@0Ïb; S q¸%¯¦×cyL‚f€ri¦ÕÙaRiÃèÏš€lÞ§ÞÁ$Ì,O¿ûŸ>Þ‚ÜæÄ7 °¹€Fª#ÚW$`Ué½#^H€õƒ)®€šãÒL…±_ô“éßq€½'Q/ ÿ2øïÍy~Ð?Œzã(\ ß ¾Šçãø!v7CÖ¾ã0‡ýÝkO9DH¯=~Ê6:ò|=ˆXë¾^ƒ¨à’¢gâªÖÏß ÁWÑügìú8ˆ¢ƒ0ìÆóŸÄ_ðQ>‹Ÿ²}r6WÂ^ĽÏãø0Škq÷¢ƒC¢Àüïzªi +\âëñÕTà?å´™ø',Ya…ÑŽþ ì.0:ú¦dÍ@ÁHèÏ#gŸŸ|SÏ!G€šß.ø­i« ¬L€-6ÿ‘üú7¿IøÿwÿCÔÿ;L„LÀ_ÿø?ù Øÿë_ÿ&ëc&`d==oŠ$ @Xw%ˆÙ@¯‡ŸÇ’Fÿ-bfÒ DïFÿTìÍädß7Ù/2›Zn%`¦” +€è˜z‡y;-vü lÿð_½Ûšî к ™Ç¤+°éKÀî@LJ¬ Ìæ€-z«¤ãðú¶»ÌK•p$!;´ÛsÁŸoì.A´”Ï·‚85‚‡~/hܬ5|ùÝj°¿Ûh°²°ªÊƒSaí‘Õ½ v±Üj]ì ãhñ+’õU¯V]º +1¸èG¢]l½ goˆ……†¸{ÿ–¯ÞIƒûûÕxßn< +ƒh¿v‹7âÏðäX jKZc¶±ËšƒÌEo5jó^nÒÛůÀ–]LÁî­S—ßX“@ü8”°¾^b=  †PîPÖ› ðŽ‚±ƒð8@Ædà‚°Ö»Ü)p€1ùZò’8€WÀW!Ð(°xK¡që7¿ùÉO>ùÉ¿†üõù-3ÿ“Øÿ’ú\ÿLüíoÿú×?ù1ÿàGú9÷)ï[¬¥KIG~Œs¯È°Š4€™ûI€½ü àôCH|Eï·Ð@ù;dº¼Z6à¦ÏOÿ%X&d£K:¦ëÕ#«°$ÀÚôæú— 5Û|á?¬ípIüMkÿ€… +x¸;ˆã»ŠÎ=ÁÌ—Ä¢fâ0çT¥-¸ÄìŒU‡1_­--U Ïç&ó…BµP(Ìck­ñûÚlᥗªUù7[«Ý¸±Ä±bª¾îtè(ޜޭáÞW''+Uß+ܨá^7tóZ7äÍ!45=@u~)À/ÀCx[7]­UkóÕyè e¾péÅóžéCV -_³¼õM Ù=j¦Ø`; ±]Y€L°*  Z\æ’«€ý„âK +Ä"…+LaG€çÜÉ£À ¾%ý %:€ÍÎÖ&â¢Íö'¿ù+Y€Ÿ°ðØü3À–Jü—¿ÿóƒð'2 ðáÀžšÄŠ2îi‡À_äV±ò»2JbÍR‰Uçï²(EñŸa×?c¥%’èm6±?·ò2Žû: +{œàE3püw$¢(:üi|Ç»O…aŸ­ƒ…°½ÐçL!`S“CGÁ%Dï… ¹<’ç<é!®›Þ{/Ü÷?ñ7 ªGšý&XLÿŽ{÷¢~øA°ßßßí"¥ñÓ0Ô€„ñ~é‘~õ÷ãÃO‘D¹ñˆ‚§XzaÁw=ìŒcŽø;Á1ò1ÈöQ½Ö×ÚëJó“ÿ, + X]og(ª®Àx)YŒÚ‘å‘vk:‚¡æªJ‡Ë‹Y©‘8²Nô×¢4cYÚ +âŸ|‚d½êþYî¿™àþOZƒòY'` ½§$€ÚÊt6p±­¶ý6Âe ô&‰0,€ýLþ.eòèW¨o8=c<9ÎÈ?c¾Á²KëH8”ŠLUñº/?($ô°Š˜ñ/ ÀË­m +þ{ä?f8ÖÙ¥pI€éþ£@ÿæVç~±;`#㺸^«´¶³×ÝÁ«b&! Ø·ã;€ÛkÛIE`\çH—`ª"W«Urã/äòùk•טmÆKW#Äêv &€Yÿ´òAx«†”ÂHC„¡ovy‹õzå›^>—ËM±?æfÈ::ǧ•¸‰‘¸ú÷l0ÿŽÅv{Ý2‘"±›»r½Ý ZÁÍë,pÀ­¢~í ê̚ĶåºW™Z`n¡ +*~8Fþ¯……8†ÿa€ç€uŽL` ÔZ]åÐ  +€øc¢A|ôÿø@ø']D™n ­4ÙIÀ4À’æ/œPÌÈ<YF– ý!e¶ycS €O>ùõoþJöŸ©ÿÔÿT€T°ó¿AXð£0äo °wºŒ±D—“òôg &©PÂM÷]€ýÈä§'q<>f˜×YFBq;5@¸Ÿ™…K¬³ ¡ËȾkcØtïwXu·TÜ€ÈÚÛïØ–Ø‚ ìü‹ï¶¦×ÿÓŸuï”ʈÿ[åÛÝíû]&ÚÙ«?¯Ä Óö:wJ-gìÿæ?ä  P°kírë€Å˜€²ë?o>76Îæ@j ÄJ³ÁîÕ Á>‘úæ@}:VÅîHsߺaUí–| Ø ú½º¿ÒÄ^Õ" +‚K! ßæ° Epýy‡ãû1\ ÙÓ·W¹Va{\V÷#â¥ZÜ ùÙqný°ÎK) yÝxàꬔ €*M]f'e8D…§/µâ8ù¿vˆÙì –fèµ¾?á‚õ”P€ÁèÏ>$3p­f3àWª@Â~LܤI$ {61lúÿ×Üûƶqæi‚Þ» é6ì ÙU#âÚÉŠá¹ÑqF}Ö™µQ‘ì²v௩°ZÐTàÐÇû¥;“FViW‚AǦ¥îBN{îa'³l{ÚxÈnzæÚ·7wû!ßvïp7ôùîò·g>Ýó<¿_‹-Qv’›§Èú_Ūâû<ïóþ­¸& '¹¬½ø—]-¾J ýÍþwý? ëæÜùèöUðÿÊÜ$KVVš ŘºÜx©½À…Ѹ’&zu|ü¡`ð ë3)²Ç08#Ø•Ëà·%r&JlK˜€üÃÙì!;Y +±Ð@,È0WS[BLLýS€5¨¥?ym¡œÉ_þSþ[&”MÐh¾Pž—x¯à€³HQÀä×òó؇{ÅÀ_îq++«M¤–~èØ.4ÅÒØ7úÆÁÃl  š7X³ñDÀ^¾™ÿþ?Sd|«H8(µ–‹ÖÆZ•‚Ù6¸V +¦gY hacà!Ðl‚Ìv+ù÷g–ïß 4öO!Hêì¿fEŠ€f°—´Ögõ’’V0=ÅVëíqfªŠ3~zbj@k@ËÉcÍ8'¿N€ÒP~ˆ&’˜ÿU–²3 P±—ÅI€¹n!€—(PJ†SØXB•H$3t÷šïÒIáC*ÐÁ«"«À@5É`ü/¨0ëZ¥Qaø*à}þSôgäoüO©³>þèö•W߸z·E@Pgø.@\÷ÑÄu €+u{ºiÎñ›aTò3zgV‡¨NEàTîÀ”cã}¨ëÒ»¶wQÎæÊO2ÏŽ¹s]À<ö XcÙ×´öW«5X€|Ùòí› 9< +Ò_€°þòJ–b› ܰž‘9€ù|e1zQhÑ)’úæáGå¸A·ÉB<±AækOÇt¤þ‚J¥·K…™ö™ hÏÒo¥3+à=;QŠ¡`;>nïËwßùyâ:÷ÄQ\Ð *ý2M²}B)h— +»%x“4‡ú\c¿„àülûd[Fe +¿û,.h¢066 â[ͬQÓnã3Ðÿ?€´Wôn2`"PæË¿èðͳÏ-ñß|ó_- *] ܆­>%8ËlI\ÂGÇó›9t@õºà92ésW¬?IKxõÖm«ü“Žÿ‰®Hf>gFÀí[o\ùððÚ|MmX¸›Hó¼V€kχèÅ€Û_Eý¤6Ø|ÐjQðñ¢@£¿æŒ÷]`žý0¦l^µ‡‘Ì€ZgsHÏ”GžɈþ±0à΀°œÉ¾öëKHH•ËÔñ¿›°š€– Èf@P¸G,æ$t€ÕfùlØ|í®@/Õ)M~ûà:€¡1ÕáNÍmÑü+¢Mññú âØv«…H~SİlúYÙîGY¾ÜôG«Tœéû9±íN–ñ?~¾+?׋ìb € ñM%êš$x+Îü.>j`nD¿Ëæ +Çç\ëhÅ@pV~@0Ax=+âKh@.¤þÙD 3` þ‡)ÙA…D"aÐÔçZЉd + AIeƱ:,˜@„ëñ¿`ÁK`ç_}_üWµ?ç¹Áò4€Õ¯Ü‚„^{/0€s-„é—Úµ¦¨oÈf!6Ç €ø#|â÷»ÅGDVdÎþ=•"púÃÕ)HÀÍX;Ü7 ¯h^X < Âê]h##‰hàþXÌQ[dAàÒŸüI€ì…_¯-ÀàçÁÿœ @“yӓرœ­ƒÙpúª¤ ç4ݰÆ0¤@Ûˆ^(ø+€Æÿ—~|û¶ñ¿XZ>² ò3Nî?ÖÌä§ÓpßðÞL3Ê]sf§§¦'¦ƒGU·çPÈõÖïs÷<€ˆécCþ5¢˜áOM«»b\¦Tš¥¬#þZ­qõrM 1Qr¼€_Šx­ƒÂYùõAѕد9åôIò0Ô€r®² ·XA( qî  y¬ ÎpÙóÊ´ËŠ‚Ü»Æ30Ф²#–ô„`=ŠURÙHÕ@bSAŒbðÆo\¹}çcùÿ^Pü+@"T€;}ðÁG…á’;•Z-ÖÏ$ºúäÒ ~ű3£.p‘ÎÕD›Ç¸²™I`f„š ú‹âúbl´OA'ÍdrqOCiŸ¥{á-ý›/.ðƒXiZÿB‰`>€RÌ„dªz¹Ž?^´ €R4ðï³Á‚;>j?C ì,h,Éàø³ »8'wáð? à« ¥ï æ RDå–‡:|ó­ÀµÙÖļ`·XS ¦¦•†Ö‹Á+óåwÃ6ço ÌÄO# Ðå?€…Ö̲å@¶fÿH™‹¬mXb'@Ô™`ºµ1nI$¬ÙÐÄñ‰Ù·ÖgÏ´ÞN˯¤´µóãÀ(ž™+Te€­e€ˆ'ßùÀ©W 0ýø*ì[©¿Dªr—GiÓ}â7 +JcƒYDþLbÙcù¬‚ /ÀvN² 2àÿ{Àùo“®°0à“;¿¹ýÛ;ax>íX¹¥¶óõÀž ˜\9 Àk[×¥<€\Wt£?ˆMÜÊ‘òÈJ*ÀGZâñ6ÊJÑŸer<¯=ô.Œ_=h0â‡X”Y#IŒ<­´€Hð=ÂØPÉdÊ—ÿª.é?[>ëÐëêàÿˆÕ`ö>=ÑÕ‡`ÔOX’`“@ +|.âE¨ve/}V + wõu 9—×§ÁtĹ¥éGKÁLL¥äÿ]“³­ O,3“©÷1uP2­—˜XjMªVá4í‡ý¾Ô‡‹¼’`׊µö:ái¤pÊáÎ˯ Jõ!¤°(¸ÏHžkøþO:€|¶ ) ý¹ ' ÜÜœýÿ Š +ààï¶P™@°©C3¾"‘K=q~ïRo€TÀóÛªÕçªövPöáà H¶§»ÊcðÙß}ñù¬ôáà)‹<ß¹zÍ®² »ØŒŸ¯è/Ð8l÷—c7ŽpWT4¸Pä/¤€%”¬à2‹óÙƒ‘ÂÚ.òä`,Óm,X‚¬?™Ë‘ÿæ˜ÉG}“s·z™ü¥¿Zù)òe½>P›o°*pìÎŽdkuψ«aë]íÉ|$î.ˆÑŸ¡zˆÅ€nXðß:œ¢åV7$œ"Z=XoÓ`O·ÔˆÇh¢ÆrÏÒCÀ úçª]Þî™þ;@Ç?v”ð“Î b…>\“üñ3|9(vækC¸` 10…ć`bbì8&*_w“@‹Ø5à8‹e\q%€k¥ rA NÒ¾Ô,@ÌK8é±ïƒù’A; ²â`¸ +R ÜGLKÐ +„s!D d>‚=W€ÿW?¼cñ?èMާRþ¢¾ó?^Ï’5uêɹ€ô·!{Œ ¯;25ݽ’¿]À =Äô¦+–wöñ0ÌmTœ»×Ä.©ÎwÙ ëf`©yžÿi.l²êþ¶R(Ÿ»€X{žÐü5_äͺ€qÀ‹!ÀKärµFÈ^AõÊá4ø».+œ`Ì&!¥@ÛˆíP*>dÀØáX´&`Ã8XœT€±" õ³ì™cv£¸U«Õ70Ë×Zä ˆj)ræt8Š…tH™ßj÷ÓGbõ< À&†V ¡Í¯—ð£‹á.ìÇKü’LÀµh¼C¶ã‚‘@`äÄcÇY±?83¿&ˆëýVjp+Ÿ«¨âéo*€?<¶€I…Ä`µty@*P*D +Hx”:ÁŽÓ‰îÇ 2¿Im±¤úÜsêWIX) k|ôI\ý'¶>45)àJ8€Oï|D¨ÆÅ€LHãløìè„Üç×åHXŒÈ0€QJ’€Ïb§¸+ø_`ÑÉ_¢ 0â·¯YJ@f8›?Ägž<i€,†"þ*þ-¾Â£‰)8». Xx[€L&ü«‹LbǸ°"ºw°B8ÈÎEXÙ7LÀÊ~7vMw‹ùo[Õ6âbÏî@§Ì|€ñ¡!ÕR÷¢stÄûóµ<@çÔTÀÎ:6Š)°”|£20· (´À8æ–‚G[JXû\îv7D×ûG~¦3Â0KWÉŸÕõ^;]ºD³ëøu+¼ãt›€V @ðä2`l“©g¹Û pf~=`,þhœ|9!* +@À"`Ò@Ò+´BŸâ|£l:úO@Pbà²æ]bøîè…qêd +¿*C#EõcÊ1ß <ÇËq x# +Ào!b¼×ü'Dv @ +Úø˜€3¥k-ì¬ÐÃ~€®ÿ݉•Hxµº9Þ§&$cλ°…Ž˜ è:ÿƒàý°±ÈØ|x€êJPJXÒu- +@c);æÙÕ19KÝvJ/©ÙB½¾ +À‡µFþ³A°øïÀ=à|³ž./®`–o ŽKtDÙº@2¡ù2ˆOÐÄtálÈ%m#zß ÈFò“kÇiŽ“þjGÛ9ÊÞB¦Zß ‚Ää-øiØn¶Ã›>Ó.µƒk`{p¦5{ 3H +èlФͧg£Gƒo=ò ¥š@×Ôζ¼wòxbKIöø/÷ÑboÊ÷Z3­ÅçÌl‹M1¦D~i¶µ9ÛîŒwp™øUÖ ¢QÀ¾r§æ×ËËï¨;`!ïè lYÕ°’Í-H 0*D2H¦8lHz´›-iŽkÑAÊkPÛs2‹´g +À:áÌä«ìü9°nžÔW¯\½r‹y€âvãúßþíßýyocç?ÀgtãDM« + 0Œ¯6¾pƒ)@"¸"$ê!) €xÔ[¦'±cà® h=`!AÌïùWàé³Ãsy¾lÑ€‡+pèœ1ß¡hÀÖ€H…ã~˜¯Ø#¢ÀfßZ²C*àò’ª +’8Ès • °˜Ë+Mt@‰ ëŽ {©  ê9›¬’â(`œÞhEíÖÓ`}„)ص‚è“QÔú1’ËÚ­Õél±—¾F¤s}ãÝv»³Ùélê/ õS½IT-•Z¨Õ~*( :‘á³Q¼ùN§ÿPl_oEË¥±g@ûåÓ­v›?FG›ÿ:jßì´Öîàäí·p×Ú¼z–”‚Í›ouþbûFÜ~¦…tB4]+± ±7õÎͯlçSa[~â)?\² M^i —Ÿ«ðUVØãiòA3)(lÿdST°ymLxİRk»¬b„ÏDvöeÐdä˜ XSà^X|c:Õ»ˆí`>©ocB›¾øìåÀF¬¾ €•)zM@¿n]FÝ‹Ë3 H9›pðýÜ)Ÿ‚"ùáaEëÃÒû‚Wàž8i.s0îkÀÆ.8U½~üŸ•ÿèê|áyE0¢¿Ž‚& R@ˆ·tåL¦|é ñ߀gÄ,xœž¯¯2öc°%½¹/à4ÌËp“pàè‘£GžÀèq}5>‡:üè£GŽ9:^NÕ~£'17:ú¾Àø‘#=úÄSO=ŠæŸÂ÷ñѧžÀÁ8ü©£8×У:È-Ü‹«lçŸâ3“}†g&?úÄGÿñ¡CGÿ1Ž?ú„ÿøãGø³üy‹‘>¸¦q­À*îô„š9>õ¯äÈ?zôÐCÅmŒŽy|ƒ“óë€ÂÅÝÀ<&µZ¹þçÙM0Zˆ‚R( ‚¨wËHûˆÝ’)*aá+rÙÏ <€¹kãë+þ‡5^'ÀlÀ[W¯¾ç³O·ó_#Rßààà³;¿¹ÍLÀÐ Ö´Ø/ªéb¯TÀùoN ë$wüz‘ž€»’sHÀ8ï"‚c?h‚¶Òd†!|0þl°™:Ë!G¯,Äóà= n¹Ëì×9åØ:3Ì.^nBÑ3™Õµy‘¹›¨ç!Ð ¥û‘È„$7sa½|-¨<=@ :3‹Ø +8i|=˜Y^‰:íÎO‡ZëˆÄÛÁsG­ë¬õ¿Üê´‹3ÑõÎÖMDÂŒÐÿ¬³µmuë3nï°!ðVV@ ‡‚µ¥N)==Ðz;z%hm¼òÊrßϲŶ;ÑŠ‚™¨U‚(–ZûÁß~e£Õîlu®#vÇϼÿøÛ§;øñc‡¨Üܺy;µ;Ø9 +N/—Ž  jE3”‡áäü `qW„sˆâÁ16&·š€¬€ ÀHnnŽÝ†Y8ÍÍÂï„Q@}´­/L°‹Nˆã{Æø,ûÏ¿” + „&Š´Ù¿Ïö.n'Õ·óŸk´í‹OïÜV=€P Ù›ö‚v¢¿³˜oRöd¿ÀÓVîîûÅxØ<=R\@䎑Åz‘ßÇ·TÑí€"úãC&Ó8ø$Ìä%¾»é8€—é2ÖB¤ç‰Dº€…z#ÃÉk>Ê•X²ÜpÇ”@ŠÊÑuJâªÚ;¿33ÌN¬%P!b»Ô +à÷O•J?mŸì°Ø¦t*hµgJ¥)¤§§Øæ¯EË?­i4Ó0Ël7¬š-MÆCÊ›(• +|·€·µëý€Ç}Á}8ò[¥muŠôI‹U|™# —ý#_š±ÿY‘%ÿgxD¬3{pv9< +rthˆGGÁøè>†q§çW‹»Ñ~¥RS{ Z™ý‚ÿ1 ­§p(¢¨}W ÀàŠ+àDÀ—3Jî÷»µ]ø¡¦­Ã’&Œý‘ þ=«dÀf €¤A„7°‚@€«¹˜vÝ<€…tÀ‘¢twVÔ5ôq¼QÝ >ˆ÷ÿrž¸ïŠøÍÕ=ìºIsFÿØô'ÎiZc.@}i<«,€z9ÃWìpŒ–‹—_–X`Ÿ@9¦z@”®ç²ÃU’Xb_A®‰  8< ; A ‡K 6Lžô’ž§Ä”Ò8 P*[Ó`°ŠÔ¹±TjG£þ1. ] Ò1¥Ž¹ŽÅíSíñ¶g½C¦§ÉÄ»gÔ"—ú,PT¿^½Ÿ •$ôÏÄœI|¼0‚À¯:§^BÈŠ jj°¥ª?¬l€ ™¯’‡3öÛz/@²ÕIó{Ïák³ »±> ÖªøÐüƒôˆöËù98¶Ä«VØö ê(·Ãƒ«&62Û=”JÃö2ú?xP¥€Ì\“IVúŸù9²ß +ºˆ Ý Èß×%\6 Ð6î`5@f€,Ììƒt +€Æ>fµåN˜to4þ€ÿÃúb_<ÀŽA8\$<Ðqˆ»âÞY2’Ê †™ÑJ³Ö’AOIö’ c^ÎÐÅÕz€´ÀàO_®QÊ?l°½/\@,‹H0þfÄî€934ŒäFrÙ'ù&µ´XY‘À`A€i„%Õ’ã(Pw;ªàÃ÷h"ª›b©ûÄD‰4²îÀƒ7£ˆ[±ã)’2˜E¼­â@Æý ¶N° ® +x‚ÂqöèÏj:Œ¯ãúÆ} ¶÷ùŸ›.e™„]/®¿-‘±©åíwÆÛÆ/¤EhEæFØž@0}æÇnî„óó+‡ñü®Pf Ü?Ú5_å2(ƒÿ¡—0´îåD| Ö6蓆5³Ã@h7€õm•ONމjÌ0(@ç+øàŽZ’ÛXΓý€±jÀu¶ý³Ïî|øáox‚žRÁ¯® \[Šþ<ðßZ¸¼t7Ê{%û-__ö´Æ71¨ïñ¿)hî™IËXDˆôKH0V††j‰Ú">_ Îè©wuâÆÛ‘P=>-%Ö,0“o¾T†8›Ï;ÿ›‹ìRœ½y€Ò«õòH&vÍÐ^ ¶ÚÌe¡H{å8B!hÐtÀ h/ßö‹GŒÆ‹…Sãcÿt¬0Íwù¤ D×Ç×)3,d” ïLÃ6HTG0q†ïíëžž8Î×zJHB2¸?tpL+yQx¬PzjŠ–Du€Ô³~†óðØ «ƒÒ,_æêH¶f§XȤhìðìÝЊúwLx·ákJ Hì9$æÂZ…ÔT)‰ƒ¸7ò“á1 «; º³)€¦iŒ#Yq½"¾Àyî†SâôÌ ù'í‘ò>Èœ½‘;®Žjrvp›y_$™Ù“üòä¿Mmûï>ÿð!ÏÎØ!T(~ +HR^'‰šï¶à½9“cPÉþ0V‹×Ab 2ÿ±"b?ÈY0 ÀSiË$ÄXúÊg“s!@Çó€çêKçwk]ìHoì…´w_ZûÓ2¹úê|žÅ€r¢y.|‘jøbÊXç õº^Ü\Aòš-˜ÈÐ 4æÕyˆZ`‡ þ½d”ÓÀT{[¦‚ÍèÏŠ¶†¬ ؘ€±ÌNö´9ÕÀ—ˆ»ößèE_̾…”`¬4ÞÒ/àBàC\–ØÌGñ<ßj† £€à•1…@èΞFbÄ’¥hü;£ƒãßq†~ÅP Ø¤ªU¸Çªñ®l‰Éòˆg»3¤zhedt½ +úÒ’Á>ZÿSpö‡ÝpGŽÅeûÉÐÈiÓý3î¯æ*îYP1`·‘~‚^øâÓ?bcÀpnÅŠAŒ~y1RôÇõ‘‚áÂL¦xi=@wÂçCþC)t–qÄÁCÆn÷<‘Ãü ;Vho8;œr8TaÔW’ž%ºTa?Içç<·À~ªÐ o%+—_f= ¨W¸zNY¿„eöñ=’QŒÎú~ tR$q"9(Eì–àLH|ü4d3»Êž%gwqѸ’%$fJÓÊÍë:Œ# ÀÅ€gÙÍÈï÷Áf[VMÜdŠ¿QR4;…Ðìo€_moDqüïÐɉg +Ç)¸“é6buÆì¢_)˜ˆßuTª!S. >¬À\XÍ–F|- ö¾ +ù9M}lcLt Î~p_Ý+ìãÃMæ˜ ˜ÏbÚV +˜Qèʹ2誘(¬3€UÜ z v6}ñÙÇw$óÝ$€Ç¤ý@—œ„݈)Í?é¿=@ßDw$Úç'`˜ù ~*Vð‡Á„܈«PçTÑ +“ÝxÒ…}~Ô(à$œ€n¨ëp‡z^8¬qñrX¶âÈòJMògEm€fç€(ç(˜‡0º·]Lès#ûÑ[ñ©åµ€)¹Ï ä ¸#€€fà¤;|»Àó)€ƒÜ˜+ÇòÝÀæ¿Úüïû ëÑzt¦T‚` 0ŒÝ æ>Ò¸`„3K~¶Æ;ë–5‘ÀOÏ4@aìðÐÓHDLoõ§yÿ/Æ_‹¹wâ<€“ÚÆöY`!Ñ?“4ÛMÂ~<Õ¬9zÐøï_c‰…Í*àvò÷Ë‚_DJ@ €n`.WYÐ c?wÝ®@}Gû1õ•ÿÏ ’åJ™IXXDÿ 4/cü2º;€ù¸LæNð×àØ=bÅÙJ¶s-Ü?â| b ¥8† rp‰å0áØ¢`úãà!Ñ[ +ÐuæRy$¿Xo,5rg•I‡ÇÃ4Òåt €µKÕ|ù_ÐT.¾d³¨ „ÙPm‡)«ìU´¦P@â]8=uJÀ¬¨€ô”;`Ô/öó½|$Ë6Ð×À-LÏ”žÓèÀÃØ)€cܰXpÐy«ÿðn{3Š:Qüm½u­µy­ÝŽøÁÊÇë›ÜÎÞÀ[At½ØþÅÏn¶°¹µ777o°[ðàM¾=h}£ÔšÂMlvÞœÙÇ€Ï×Ð @ù»‚s‡TÀs‰¨ÎW«à Y"ÀðHÆÞüµ›È`c Z)€-ö;€;$ÿd¢ßÒ̰L@®ñÀçø.¾±ØV0î› hëÌ|¨ÂÚÀ¬®¬2¼29±=@´'ý“|ü’éäSÿÓh'ŸÁ¢,30âýâÕôµÂAÄþªèôÇOñä ¾@@OQÀÃàéÈ0‚U€ºШ²† Ìå Ÿç !ÖgŸ‘²9€ÆÒ{ÊÙ—þ—z \;'µÄ¢Ž7€$@. >SØžPµ––ôc‚9r^¼§`übÓ €åòM:]°³ `& ¢ù]ópºÁ€W ÞüPk£UÕ•Į̂r\P +–™#‰™Ö2ÚhŸìDÁiÖAZ‚É™w*Nž.bZ,ÇŽ>\Naç“û…³ô+„åóíæ†z?\€gbÌäå.0`Lˆ° NmŒÄs9#þ5ì“AêXŸ±É€«ùU¢_Õl蘠¦I š›÷øz1ü®;€®Å=µ¯è^ +ÀÕ‚Ön  +@—£¶8•טFšÖ‚™\3HJâ3)é$  ' ©Ó6qÃr±ý§ða+5ÀéoÀÍä?û IÚàú‰CÃî&\êr! òYq÷<O)9¤Ë- ±úÞB>ûÒ{K! ¿ä€„ vl÷;Š‚A?€ÿ¬r„]à¬ï9IÀYhLõu}òT +P:EPr-0 O;4p@ôãŸôZ£3Ë¥ øèᣥÑ'Š“Ap}t*°\:=y¢X¿‹E¾+¨x²ˆ•ÁÌòòÌr°|Ì_~|ùt «µGqôèQÀ?ŸœY>ùÉýÂYúÕ…|{ seºãmž5ü¯Tª•¹0Ìæì· ‹1x¡™,}jáSKh/í;­ÃçAÖ±‚÷rÚ°ãmF«$H‚˜ÖÁÀB×P蘵ÅyR>™w æ¿õðaÊFX]}A‘#% Ð%Î}ψa÷•v‚ €¶3`ÄÖ¤7Ÿ —Aa¦ÿ%ôùtÚ!í lËÀ1:›.Ôàü·R€‘\xñ5’òKT€~`iíR9S[ýáåæŒ4êç@ùms¨óÀ”(»`tï0›´ˆýX]¨Î†À&L ¸(ùïðŽŒ—0F @IEÿø˜˜²ü·>yÏ&`ïR€w︶> +J­N«¿mu&±â&lAëz á:?í0]ÐÞjÿüæÖü»}ãæ_òÝ ·‘N¸ÞŽ~ü¯£RT‹¶n^-vÞyçßìëÓqž~UPl¾'XGð¶ªR«Ì-0h +†Žý@œIå €~-'!k=¸X‰‘õ~+€THò«”†™ô?–=v,c \ßYÏ`Ÿ`ï³@âDs‹ó1eį€Vr+÷‘üæ7¸»põ-@Ügˆ•ðkˆêûm‹è¦åAFÓ]þç3‡\$t¼·iç <¥ˆp?þX€® J2T +àe`¡B¦ŽÄØ‚¥Éb!„h„pÍæùó ¹P’©¸3+rŸE6(g‘T_ýU=Ìgްƒ²vùÏ¡^îuåØ4ôxtN :{Œ±Úœ€{‡u9Ò’wï<¯`¥îbàè^ÀÔ/ï†Å6$¨44Äþ@¦ƒ?šm·¢ÍBÒ;p!¾hÌ&{üö n޲Æ0{) j…ã{&n¿3Ùyë­Ÿ©Ë¿AÆÀŸÿ}¸ü³®å|9dþ?ÓXë î‰ö$ìÆ@ÐÞÆ@ñ¾»²€+mÉC;¡*‚ÚjÌɪæS±¶–àbÎaü 7³„´¸ ,BLÕ@» ðÃr¹ß†ïýKy;1’tþ,þçžš1½µ’ùz:›'8” ÈR%–0G4 8Z5wTDè$ï>ê`Ï}äì] +à¥þ;ßÄy!çËá%ZãÑz¡ø42Å*!ðÚKì˜SÎ.F§ô2#€~ylè›OÜ8½1yâÏ;û†Sõ+ˆ3  䋿1ƒ5p a.Kg rÁgX1UÚ +‡`ÎuòÐŽð.ò§ ËÚ|ëcŽà1 +²&‹ ‹‹ž;lÕÍ .ÚꙀ´—_k.Ô›K0Ô]ØÒŸ_ƒ”‰Dáý³[­n)@÷>p“Jé¡p™)ÎL °BëL]ð1o%ú«¸ÞÀ}=ã˜ü8ɺQ úyKXE> 1V)-Ó¬¬](—ÁÚzX]úß~ë¹ñŸ?¹ H€’rŠÓëìtD@Šƒ»+òo¸ðõâõ«mWϘAÎj±°÷70—ì’°§@Ì~´G#üTqèá1¾ðc6/&%¼^ü0® 3S¥§áþãš”P‡æ°8blèð#³íÑw£™›7±ßÁ¹ú•Àÿ´þ`+_ s¤û\®BþÏAØhX« Îe-sÁCŒÂ¸Ïö"­ŽôžéYðèÕ€ N*ÈÿÓÐ :dïºL¨íjlÔ'x]UÙ%XÒ#0³Ý¾„ÍcÌBÖp*€4 Ó]רo @WÆjn²ù9€öêÞïÛý¿; û|hR€\'˜€µô¸ça¾ÐwÊxE¶¤(@€ +Ö†#Ê…CúâÈüg„Þu/-À¬­ ‰W{ïÿ¹è uDñ¬A(©pð€­{)Øäy‹fb€x™®û`0¨«O ÂJ¦EæR¿š€»Ô`´¿Ó÷–`ÇöC{| )ŽÂÐÃê¤oùÚÿ•# ²OOýyä?æ¤i­ÒøÆ[Ø“€›9NðXôÔ»om7ïNÖ¯þŸí :É|®âóüY:€0¬•«HäF,˜Y€ap¾›°!ñ®ÊæKö UÈyçßÀOÀl@°„V›sùŒ À"ÀÌ(C9 U˜œ·XŸ„'óõáH+¼À\X]x€DR@=õzð¼*¿2 J`‹ES€|Õ@ï‘ÝÛ‹¸ëÄð‘P¸™I{eù ØÛ`/˜í—õ¹>ÇZ ƒÌstÍ0C¸À>Zî €ìÓX{ àb3¬ Y^þÌ0û¡q×@à×€Ô¦/°j—^AÌ€[ 8€%Ö¢ÔX8`ð<ã?9h„,€isƒäìY +À#ûckœu C(ßïÑ_.µ(±Ä(Fb¾¾¸ÞÎøäx+¢V@J…‰‰Ç†½9ÛfþÍÏoìw¸álý +àÿÙ^PþZž‚Wéž,³ë=öf€)€$ ÀÐîs]0JãwÒ{j–úÒ:²Ÿ½ÑŒUü ¾;òŸeî#Ù³ úqÛ=ÌX ·Csþ¢;‰ï3q¥õ øa¹<__ý!ÜC,¸‚ÓAPtÛ`Wå¨V¿‹p°ë0é­dð4ªsQw-Bû6MX àö†ïâ±²OB‚•8|Ð"j}|prKKæ–X ‡ƒ­– ­×³ZZ»P©\Ks8y¾ñ×kzp®Šk°Ô{×¼°4½ó¿ž;Ëöƒ¹³ç)t+Ü +5X‚‹0è:0…q>kL÷s»ÔHçİKÀžÀü}! Pb[€þÓS­Rp‚§Â‹R£<® ×âó¥™Îw:O´Z3äÿø4t`ì[Cýl½u#˜ñŒ½ýÁéú¥Ãù½7èÔŽ¤òœ;€Ú\8_®H  €Eçnð60|¦h‚vµ°Ï©;&ÿ… ¾lˆS‡Ø®ò×™øGœÉ@†ýð«/Š<Â54À3ê€(2îPœ//à"ÀÂ@ö +Œ$@X­Ô_[…ÝA@îJŠ® ]RšÛ U yÜEÊø;’» Þ²Çùñ¢ÍÙ°ž ‹)&&ÊOÈ™ þgÞ‚íLös5€çà$PEŒ,óéHÕwpñ ¦V.‡j œÉ”—Þ{ïß¿H!8hD°"Àz¾±Phð-Û{$Øq¶¼ˆßãQØ…GÖ¶;Åþfl Ôàþæ©°W€÷þÓðí§'pS“Qà 2kÌ«ÙÔª`ãhÔn™„`g +ÀÓ…ãP¢QÑ]ýþà|ý²áìÞà¿åö…V@äÿ\™y ¹¬ÕRH$âP™9.ž÷ê@²§­qø9Æës@y\Ï8ašŸ•I{9À´ê—¹*>¢3ÑõùÅðƒ>¸Í$@’Õÿõ“ô¤¾!v·oß®T M€‡X0´è™áÕ€ìúÀ,( 2¡ÄPvБñ®º_·)ß;hÒ  ‰M÷¡Œs9ÿí•c~=6>¹ƒ#½²_5øÝ àVüf^@ô:€¥µ—Ëå‹+Õrþ¥Æby$_žÿ×^Z{©¡2@ìfh†¹2KÃèKÀJ_!Å7IBð‹Ø‘?‡´€c^Âüb3~AøÒ_Ô/ Ü ®ÀÈvy{•¬_kqXß1\k-¿$ÇuøÔÛÅ7qg¸V2À÷¹ Ñ!¸˜ 6o-·6FŸ(¶NcËÓ°‡Æà5:­{€¯HœÞ€±„rû*aõÉa:ú~®^8kÝL¦údðFXìÃç6ö +ÁX}ˆ9lJ¯½ûSøvðD؇C…í'óI4ö ¨?J\ ‚6Ò´ßeº¶^‡°0݉®øßx/ %[Ë÷C tçÙ‘]H;«Sv ]ð +9J``Áóâ4@ÕŠ]„„¹„V$sÝ<U ²ü öÐÅN:p×®ÖÈHû*«@ Æ¹a­†' âúóç¿,‚9)€ªþóK ùð"sò_z©²ßW¸Ää1õmjyx0¹æEœÀӨ㱰ΗÈñ…Â&n8–¸ Ÿ±º:òû3\%}ÈœAòHÀ©¸ÀàžÀ{eØ™‹ÿ;†ø®;øÆ‰6·D­ÀÀ`Ò*-/mÑ[Gƒ¨ýÖ:ÌÄÐáGl­—¼’Ñ>áŒýra1÷ ƒ‚S™€À•Ëä°A Á n~¤Æ>f…nNÀª9^‘Ý¡œ¿x–#@mù ¦(Y·{¢¼*ÂÙ<ßÈEäª[ŠìÞÿýÛ½oRÄ/Æ Z)À]>ÿì³sû6äméµ&îüœq‘wZ«Õýsˆ‘â¿]£B¼O2+é<Î%¼5pµÏñ4rä6ÇLŒãl +`ºP8•Ëzè «käÀ@©Y\ª;fã/Ö/®–Ë++õ +ˆÿ7¿º\¯ù~R0"§À‹î‚ ć°Ô€ø` ¾›ÌÀ<€¤C ó’zŽ}ÔØ#ÀÌ~D£<ùÄ#̘`†ÿô›'¢ˆq=.öD ƒ. +ÓÕ +(•¾·|d£T,N^å;ÅÖuœ¨ppì0 ³Qz÷—÷48g¿TxHÙì9pu.ä†s5r‚Ûuõ3;Ÿh6Îõ‘žï‚~¼'£;},j(n8„¨²Ó[‹íŒdj&R¾@0/  PÀ8ÛIOÆçtû­ÐÓá¹`kñ`ìyt%ÀÀóâqG¹™1¡+ a˜­²B¿ø#úÓ0oÛka¾Æw~á¸K««ïýõ²lf Éo€¬4Ã|ŽÕüÜðñè·ýçÏ"®‡o@@îÁ2qˆjr1ÉÐ0h@R€sƒäìQ +ÀãîV¯ }€«D"¿=­S^tñ&)¼œ%HW¢UЫ#ÅR°ÑiG‹§q_Gƒãß8<7"@š×ÿ•“öK„(¼;âˆéê€læIEÿçjµE +@f~~¾>9µZvëÑÒcŒMÌ­h²óóŸwîaø +Š-T†&ø7Ï?9œ}u_€p‰Ðè™Ü¤;û¾Á}œþwÄš@ˆ€I¿àÃ^°ÍpĤ¯9€cÊÈŒÌ1°1’cÐ]‘`M@*@·$”O¦’‚.ÿ!q&àD‡Ù2 ÎU×CàëÁ­¸Œÿ]v«8îa\­æ²ÊW)€mÆD•ùqè&µZ3¼U›×>xˆü¸ȱÖ|Ù ×àñR0â,V~Î 7×|ÉÕ”ê +h ^/Ö_Z-gÊ/]dYþ?_«U–þo¶î§’2oä·iìš«PÀ¾§¼ˆ1ËNáM¦/bàý!ŒAIjcôÁó” èàþÛxeÛþhŸø‹vûçÁ`bv/ÿ +Fƒ­ö››v{½ÓÙú‹­¨µ®ñ5dí·‚V;ê¼É×]¢­Ó?™¹u:pŽâަ×Û›7o.ßüÅ=Âiû¥Áõ`P@(ç¨ÊÙáüÓ2JÀ°ª°B"¡°Î@‰ÐÍ”s¨ÈonÒÚ¢‘T}2Ö!hH5§ƒ9¢?‹ôé Y¾Us$[®¿ Æ’ý‹¬ðÑÇR'¸@¾ï™õ¯™Ÿ}ƃܚM–o0~ƒžØSà¥aWÔå?’ê‡@fóz‡Rº žòAðð™øFñ_7ÊuþhX²Ÿ¼ÿËÌb”`‰ í̧ åƝóÑÇ€@B<ÌU¬Ò§uH¥Ü,.†/­U‡³Kï±(oíb¥ÜøOÄ0K¨ X¡ø¡€Õû¸E²>€Â°£o-u†è +€¢µ`ü9H€Õ ý÷•°k)€uüq7lŒ#%?sbhhŒ9û3ÁéÖäì +PßøœÆú"»(b3ÜŽu''OON²ƒ€Rp:(ž;1†+6¢ÖÌõŸ^oÿ´½ïïO¯;o¿4X  ø‘`µŸp±2`«ù·2݉@  HXxFè$© 4§¬¥1à+ìc¿aEø\bðÕ@ÎÇP`üØý³ý”àù,¤4â,pËÀÚá›(¨ÿ»¤!°­g&àߘ¸fs• / ¶d£Bw–‚.7á‡à»ø`BP]©=Àøÿ€?~µ‰àS 2N„¾Ögìq¶3žž›Á¥@/Hf"À@µ€x7p(a×à‰Á4ÖÂL¶ñ7ìùeíb­¶ô7¼þxæ%öÀ2ÙhHð¢*IX + © +H÷Ï.‚´¿)`I€Dý[[µ Àë€é˜˜¸ï¶ì³ã®89ª=4tô¿-N°sññÒ Ð}¦…yöØ5´ØéÖL¾²°“ `yùíÑâòò+ÒlÄm=õèÑÂä+§Ù‡H Ãä=|K_rÏ ö÷ˆXä Ê<‡± €ª‚+¬†=|CŠ“ðZÔN­,£.®³HŒ™€ â"AQ ?Æ$>ŒûŒÿŒþG²êkÕ€™€Hû÷6PŒÏr•ýÇ`VÁpJΟ/g³eœ.¬…uÜ–†ñUqV+àþ‘þ—À'[ž›c" l¯ð"°™m´åsÄ 6•Îù¶dŸ@=éITa"—žÍ#½KáÂùf˜3B’©Ì¤H +ÐXkf³çþ3 ¶¶Z+_þ_—$^€¨k.€€°æÂ”°C†)öf‡ àPi¶;ÅãÏ*úLJŒíuw­à½^`·<Äòñû wœý;íw¢ÖØá±Bi¶3/ßî¼”Açtô.;ÿˆZ;ìÐøßì´Ýìlµvsódn¿½¾þ³­Q«T€*JH&l,¿ÓiÉ[Üœ¹_œÚƒP/—UàoÙ H0z0¸]±XÒ”À6’ì˜W±•HÀpÞ0%À™ˆe1Ó¥ÿ»IOùºÉ/ ÔË…'}Rÿ÷&sþ)þ›XÇž¯Wà(ΟgàYZ)óÆÒðK’ yãbÀü‡èÅ øð5Þ)NÎÚ'6ÙŒN¥ù´§s:€À\@j»ðÉX—¯öõ<PÍUën Q©<æïsfíR>SûŸ!áÚj%üõÿù'öq°ÙñNg€üüÊk«+8ü>‹)hv€ÎNô +ØÇ˜Ÿüßw[€®¸ï¶E~î2<ƒí|ë_鑇?V(MŸ™Æ žÁ¥ÑLëÆì,_UXReLÈįþ¢Í7Æ74?­ª…Â366441»>sš5 q€³¿/àÔýR ^ ò@1=(o@IïH‘Tg8ïIikâBv' +þc„Õüb¿aNA{m’耞 € Î8ŸüÏã˜8àk#Y¬L(€4 Ÿ¿u•­™P‡û;¤!èá¾%>#$ /ÔóLRÔqªp¡¢·#zì­/á—Ä9÷üYÃÜ\•õöªe°Î>àÆ>‚nZyZä “yŸº5ü[¬Ì·¢ò ä’¶Æ~=:o8  '€|ì UÌ`ÄyÐS{Ö/^®fÊ¿z¯\~é?­…•ê{/™åÈçµ¥CPMÀ•07Ï>“•À™p6¥tuz ¡9wÿ±X*ךM+°Rp~?m¬vv–Ü5`϶»§+ :^(L³›­ò?h—ZÿŠýÿh©©Súiþzpã­ñv°ú3…%+|{lèá¡Âéèt1âŸÂgßßS§¦¦œ»_ +œÙýÀ ²ü†Ì Ó°.`>ãÀ¶k ÒѬ€@©¨#ÊB Qœ¼ç±Sò^ü÷`Lº–èÒÿÀ=ù³-ŽáôÄ,cŸ§ g$Lÿo}ô1_ü…,’øŸ[v@h5öüôãÛ|€ƒë e8úB•¯E¶ m—¤1‰š\–øÏqŸÈS²ê;1•0è‰ý Ûf3‰`Á¦o@Änס{gk€îNzv’³¬/˜ÏŸM%P›ËV-'ù•@bg±ÀÌÊå•lîßýª\ž_üë—k•š¿FÑ9Û±ŒÅ- WN€â¾;9\8›? ú³&;÷$«Išry)] +€hT–¸øJêìÙÀ.PÌ^úÆ#cÇÉt³)¥é­ õËõÍYÖ,znéÚ¦pUÁz4¾EG€‹£˜(ø«AÛ¥bd‚Æ÷ûåï8y¿8×·ÁÃËN€÷ $ðgÖ)ÿ„s±à@ +€D}ª€XÏU,²í±‚y‚ä/ƈͰñŸ ~õ€aÜèT€;€aHÒH–üϲђâÂÕ«W]@ð/˜ÃGðyâ>7!÷µÛ?ûTõpìBˆÄFy!dßDZWø%¹ö«ó,ÓŽ±¨Ž#§ã,~B="¶Q›u–x%'Iî õ4@EåLñ +| +\‰gÇNHβáÐ6Pàh¤fIƒ§Ô‚ÆÚZ>óÒ¿áu~}™9¼Lü§A¥àÞæÊÍ×^‹ þy l/Êú±,Aš± HƒMûj ЯÀ—Ð`L•f¦£`⑇†;>11sOMÃøOonýrs=hÅ&ÀÀW•òrδÚã7u=Ìãœ.µ DC‡'J³ïþ„o÷½ï ÎÞ/FøþÞu†æ`^I&:D!QU—ñ³hO‚K,åPš¬b9À¢ÈÏ0œÎÜÏôc#@–°S0õ¨mÉ[1gð¡ù¿Ð ?tŸ;ÿ•ùuàf  ‡8”³º½yÜ šÀ/©BfŠÿ=ÀîÚèïè‚Îâ»hÿ^dé&(j°‡ûNÕУrj1PfµÍØ,ž_zŽy¤!—B<%. BgŸøyé2"ý÷šT€¿ù^ÿ_Fþÿó +@3̲põE% 9 õ‘ÍeŸ¤À(¤Ðè© L€ý¶8ÕS .0ØŸ°cvOß*=òM8fÌή¯_k• +­_üwH°Fp—Ðü E8ÙaôLG¥§ƒ±±Rðî,’÷§ï}CŒ€ø1þ‡à$ÃÜH†y²8eLFßòvÍ(žç!”R`s”“ +Eû¤¯§‰V1º-ÁÍV + …Æ<4Î `îéÊÑÜœ€í Ÿ#ÀA.€‹à>eÁøo ¼/¨ÂSè< Ålº±”ø%Å +ðÀs^Cu.?BúS@TñšÇð®{¡Sù€fûí›ýiôÄR}Æì7V«!•ÙÏѰ@ yæBÛªì0ˆ`yÑ{åò ™üÊJ +°´¶öÞø—kkü(—€íå S^¹ôÚªzÿ·õ;€=¥m¡„.aÑ€ÎR¯+€@@Ö|eõîš@zïŽà~nvbè›|ëx~×Þê´K›¿XÇ,Nbþ_¦$ÐkŠ£ö‰wñ›üQHÀô4.|lè1ü½ÿÇbéÞs ý—`¾œù'þ±±¸ ¥ÖÄfM‹ìé+|"°z÷÷ÜŒý°£â/Í:¦œWB/ÿ=  )`Þ_¡ƒ„ Ç«„kI€XÈs›£Ð‰~:Â7}BxÇVó:€,»Òä'ü’bþ§@_F¾òx?Œ»ë4l“fxßEkÕsj’TÐù€J…ògÀ÷æCÄ@°MDf˜4LˆY¿Ps5V‘í•BˆSë Ï­_Z[ÍÔÙ#H¹\»øŸÿÃåð\¸ˆ(‚ÆÁöÀ×@y$l^Z•4Hn%Fþ2@‚µâ?À†îšÖùÏ„À y^€¬Àý´ˆÓ »`*8…¤üÄá‡X¸`G€÷­örtãþÙ,“üL'0#ϰ߰VgVŸÀ»šžžž€³ö|_pß'ðÄŸÁ†:ëx“õtÃÖä_ Àê´à`ÁR€Üç@à2iù\±¨Ý0‡pk¡Ø±óª/¸ÝrñüŒù9`ÀOü VP ÛWDo¹œù,@ÀégŸ|ü’:lOGêó÷2ݼI‹ªÓÒÄyö +ì`—ÉF9¶á×1 ]{aÛ4GúÓcR}â£Xµ˜ü/C\p5¸:[O4P$„Ù³y&õ àc¬dÅ & ˜C"ÈÅuêQÏ×ÞãkAVWÙ'Hýò’ž1 úÃÞМ˨Óô¥:Û©PƒóŸ=Hp ~R¦žKÀ’×$in Я@,íÏÐ2Lí^NWx˜pœ‚(©qf6:½¹E3ÄUÿõŽpÍá~˜hÓÿóæ`e(=v|zvkf\E‡÷gðýVòp(çñÅ u~„õêêy°XÎdM@i˱bˆe`Ä, MU±̓þ¢< ×ZÏÁ²§ i–^ñáÑtíl@†ï TC\Ž @XÈìk.†rLâMŸ~ü[8pž y:öìá¿(ªp]Ý+³%,Wò~ªdjµœ…—’ôË0H$q6-pJ€ì?g8qH±È]rB{‚R€‘ááj€;v ¶°Ô€\ ùÉ+#ÿݬ7ë +ÀÅËÕ\míÒêB­RÎ{Ç@[‰¶ä³9€•|°ºÒdë>’ÛÂÈ¢ÑØáQ4jjICÍcÀñàyüâcà>ÚpÿAP + +tߢ:yûttc“i»l%aK + pcô­V²urtü8 MŽ·þ^(ÿÿ 6°%à"´¯å2#™yÒŸ +À°;1¯¸U$†Ðˆ ÇŠá@¹‘þ_D7âr-P-lóÎ+b;ÿã$wÃñn –$HCààS¤íÅo0ü3›3¾‹üi|rçÃÛ·néh°SS—‹2:ŠþŒ«ý’<Öƒýðÿ̘cÁ= ž{\]šÿB惨ٟ­æ» šå¾Ã‡Ø7PÖùÏ2ÂëÀð v…’VÚ ð?“Éñÿq4U +pA–€Å£4)¹Ü“Ù1µÉþ<ÁìËõl¾vñ¯/Öa*y:*Z °^y…8€$röÚ”:ß L`ƒÚ àË*¿±0˜ ¼Ñ=”)V˜ R€¸!€‘qðzû|7`ßR€©_¾û.>{`k«ó³v›5Ÿ.•ZëAЊ:ì¡ï/‹­?¿qóæ­¨sóÚO7ÛöµÍN;ŠøBàèÍ­öÉh«ss«Ó‰Z[Ñ[Ñú™‰‰§ƒ·¢`æärðŠ·4¼W8‡ï ô"þ/û 4 öG„‚hg-72’a€Ø@$´÷à ‰`É0™Í®`8U`eôÅ°Ë öÕÀ0¼³P +ù±àáŒ{àÛ &R€O1â„S‰Áêöé§Êüð€øl¼VÉKBHð»ðêBÅ é\™„Hòpoéà”þ°¸Q«¼Àž Wê(‚£‰ø_*X# -{ÕN–4țȰ5`Ø|ÁÒÌßFF²OfåVê5vÚ¸üZ6[®-^¼| +PöF9rŸ‘¿²ã<€ò¢–^däî8‹ýÙ'X.\’àÅJ)ºÿ•ð¬¹e ’Ч5à=·˜œô™Ý0Y*Ož<ùÔÁ‡þÃtôèSO…ããÅÑâ ·žÇÂøèøIn FGù¦ÐñÉÇ‹­{ê裇Ÿ8yr´8zôñ#÷5uß;ìÏ"u»Ú½×à;·XƒûQ¥`sa~83Ï€‰(‹ÿ‰pÍ09äñ>vÂ"r&áw^\ü|1ÝæðTb¦ ¼@ŒDu.qwlûpÿ.ür†éØ9CXµ'€ý¸³= %‚,ŸåŸ‘ØŽ]ÃêbóB˜eV Ü—Ȳòt½¹>Ÿ¯eáÚë—/!Ù“-¿ô?­]¼x±fÙÌüeTÎ/KàVWê89ÓˆÑÉn %ìGåΖ;¬âHÙ R€î‡ŒÅô+©Ð/`3ú³è:†=Ðét–ë{h¬t×ÀzÿÛøŒŸþó·:ÿöæ;[ëAçúÆO¢åŸDí™™É`£õÓ·'7pT+Šþ †`yùÜØXáá±VÔ +6¢ë“l#t_pß3X,»OûU·\ƒšÿuþ¹ü_‡­ÒB$CaBl„OOL@}±ÜÀ¾Š³[a‘:º<ÞéÔl +È]ñÕñ>IcKbÖÁƒ€Û€?fFÀ'J7ÀÈ^€,h6Ö‡OîÜùðý«Wíø¾þ€EøÛaü§wæT!Oú¦ >#Ì’µ“¸–ö)vÀƒ©ßònи« @%\¨æ3Y¸Ÿø„ñäè¿ È~Ö‹––Âlùì/‹ÿÕ'³¹l.ä›ûVñŸæ!͵KYxþrxñ½ÿý×:žy…¬-¬‚ûB˜²*°€!Áq–Šéɕ뽀á©lJŒøL˜ œÀ’¹ÄÜk[€Öú5 {"jGíÙo}cè1HáL¬·;Å¿xkýRù­6¯å Èq‚F-·Zßû^ÚºÑi¯·f§!³ëÜilh¨€ÄFôNqò~á<¾Wø?@êÆÊ½÷à¸ÐZý±!’ +pÄFn…EY’H«˜ð×&Û»hïg°PŒ0œ~îøÎ:«Σ¹aÒAÔÇ^âõ×_½rûC(€$ôw% º‘þ'øjÛïüö7·®\Ñ ]]p ö÷Sçÿ[Õ—É}~R€ß.\¤|-î3t¶Ò6è øÁÞã1³bâB8‡“&/Lž0ìÿ/òóø¿æ0,PæêMµ“`!B•…$”¦:輺ª–àöêÅ:ÿ™l¥¾†Øüå /71X \Íû’z/ך—Ø'XÓ€!_Î1Àb€ØÈ'ÊÈtëxÜT›Ï“±\¨ÍÃÎR€ýÔà!ƒ`"öZ)@¤‹™ +ÆßŠfÏÌBuÚ«`à!wÆo´ÎÌF7f§qÕÓÓ³íÙÂc¬ +ÌîLƒÎI§ñ=‚ gò½Ñþ½8†FùpOÂ:–CÖ `g’õÅ< °ƒ( †ŸáP%õ6ƒUd=¾šñ©ïçÛ€Ea»;íhÀžPüF/µ³'¬U«¯¾úÆí?üˆ&@IÁ'Ÿh䎚@eàT»|D ˆ~=àCÐcæ¬øÔ'ÿÓà@lÜ«%0ô3˜Ñi» + îë“ɲÞ/\Kå$5uÚ;8Câ+Ôj @ 8Ä4çS_ØÞ;ÅMRb +G‚E®‡$ïC ¿ýˆ2pǤÀ„À§6IðÑmÀpáÆY#—ÕG<õëI៤ÿÉÔ˜dy^£_Ÿ@¤$k1gˆ×˜7`M “a‹à +ßÈ +//pþû3 R°C r– X«¸ °;€œ9ü_-eíÉW/ ï]~zBAÑ $V›¸?ö ج¿ØdEbË×kÔ‘üWH@àXY±$€9ºZn¤–ñß¾ýÀ]ëpßûk `ûœobèðÃæ”L™>µ5ÚŠf×§gqª=ø¯ :ñÔT¸væÌìæú&迹(@F€÷q¿I€ûì„rœ|ƒåŒÀåA˜»È—U +N#ðÍ1î:•ýiC2ÑjXL±§}m“Χ¾àFy6œ.NXjøÿêë·n*üÖ&]@(w>úðö•ýè9ÿRôWÝœøãWÓ ýÞØOÀêñ:¸ŠoÂU%ïpþëÙ’Àú:Ÿ\,¬YP©ÕÀÿ…0Ë?§qíäÛ< aotV!œzÈÞÒ HÕ—+UÕ“ÌfŸÌ.®¸€PÍWWCü‰Ã™‘|“9«««Icò?vÌ5 ˽€•2ˆQÇyã<€Ø”sÙù>Àjì+€¥澌÷ì‚©SvUHÁŽóp½ ôÏGƒõÙ7ƒYDè…?Db¥eɵè :›ëë³Óëg¦'w@4¾,ß‚e'ó=ÀIŸðà€"zî2ÃåEñŸú®ˆ& IlÒÛFÀ1oŸïó­¾Sn!ó®5y©rÎ9 +ª,®þñúÕ[ï``2@¦›lŸÓÒon_}Â!úŧ2xÄoõÀ &Œû!”\¢N¥3vϧN¸VK¸>¾‚KX†˜’àfs9€¬‚ݰš{»Йñc]_ûcŠoVspJÃU`QÈÿ<;P ›«HÓ7Ã\žÃÆÚ*kÌ.\\c—/1ûOÑ;È,P=€ªz–°5ñ)%aÓ/W@ PÎ>9¯U„€WØol‚³zÛòx¶a1{ibhè±ã…?ÄSÑSü’o«9²TÈôÔ,ë³­ÍÙu ¶´Ì´‹Nãû‚Óyßà!GŸ@+öþô8€Ì“##Ã9¤ÿ±H@C ÚG`heÜlK…XÍ3Ôr†î†ÉOo&à|ê qD}LëosÆ0ŒþXxõÊÕ«· Hî3à;À9NÉþÛܺòª”CtLÑ•Y1÷ïËtP‡nte´íL¥àµs“ +íCñkçÉgÕ¨"PÅݧ€ŸÿUp>k tžàõ‚¸ + °;@ñ¥€ußÿþóßþùïÿàõ+W®\e×@ïߺÅW…œ»å’ÀÕ·?xÿÖû L®^yýU“'mrz¿€]à¥Uf0ùÏèŸK.1~„¯2†#1`û˜øþ¼,?`òTY$*t.ãkŠI°Â_Û€ÿËz8Rfo@¬˜¯XC v¢ˆ˜š€Å€tµ°vq-ÌÊ/\\M¸+÷PMÀ•f%Wn¼ö‹äl‡F½<ï€Jš +v p#µ”0ògô¿ÿþ(;KˆëìS8€±±€’Õ ØH`}‚á;àä|¦£åÑà%‰›'X +p¸€Ô{©tƒI€S÷9Ü«òž©øÆ7¶ ëó$FF æj•ŠÕ9a¨¶Ô}Ì÷”Øí¡Í–ú'ÔÈUçS_àsê„ç™’”üÇó?xõõ×ß À-0c œ'®^µ-6ºòÆë¯þàûò/¡ÿ à€-‚å mÍðŒêuó⬴Ì8Ï»ÖvQ&›çAÌ Ðit2Ä®p¤²’ÜAÏ qÿ0Æø‚] ¤˜€ÿK½~~éšü ä¨b  Š@æü/kõµ–3ùÕµ.ýcz‹ÿõkÔòÇÂQÀòC&%Ofk*$¼-€D\%qȦAòÀ²ÄÜÿ{‚ÞÈæ@¼Öé©öxÄVÀ׸)Ò»@pñFwÌnG—#ü$.B4==1Q{lè!:€"ÀI¥|îs¸·‚qÞó`P˜ØÇ\f$Ǿ·hø×Öjø¿‰„ø>¥gð¤Wç:_›¶Ê`Gìç|ê ±†Ç˜`¶#Ïc0šaÅ¡ß?æøýç¿ÿÇ Gÿê«ýèGÔˆ¾¶¬õ¯¿Žôÿž¡Óŧ÷ßß UVÖàü×Ö=>‡¨Nɲk·•Z;j62{@ ª”Ƕ…8'_Á€$-€k`ˆ/€Dà9§ÿrЬ/dÕ_ª’UµU˜£‘cZg±54£¶rùB.¼ø’Nc0þ+€}®¬.ÍçÊõ‹p¬ ` +°Ýày×a…jÁzfú˜î³s ÷‘p=¼ªRá[‡¿5v¼P@ÚcÊ3µm:œ´ç"Õ¿Þj•FƒzFòÏz—`ë÷ƒбûî©I€QÞÿøÒÞRþE± èäjd?‡XX;ä%Ïù%›Š1Ž‘R›5*' ›5•صC 8¡œÀ$®O`ˆ€³Ÿø}¸p_Dýõ½ñ#ð]œç"×3íÿÇßÞÍÃÀÿOƒà’ZÜ‹eeâ9€l·­øïÀØ« Ñí³¯/TFÀíÖÃ7ßúÏ)v>õ…@l$Q[%xœéÜ'þëß'ÿÄèsöûü¹Aé}N´%!¿ç"“–ïŽXØÙX› ÇWyà,rì¼G×ixÀžæ0¥ÕjÂôÂÁsàtR¤èê¡ïb'cÃ=su0w±¾pŽÝ¶óoá¿w[’ÀÖ„ùj¾ªLÀØœ]ÀAäíÜ¡ó׋ù/ûÎ^W–põÕØ,¼¨gàyU!)íFr‹Û€FÏî·À=·ð’ôÁAþˆ±¡ã…‰ ZG\hÛP@aögP!*c|Ëœ.ýÙhc& $ p¬0$3qªSäN÷‰{ÊPDnò«~|iïa)„ H²pøS•è“°)h ‚ZÛ½ -:©K¸¡`Ö» +ß½å¼cE q& ÅÙÎ} €sŸ—½‡ +8çM0â>ÏoS€ØØu쎹¹çôaY»Fä?»ñÆ…*ºï +¢EÿÝ7¦v3Zð:¶Ìp°pAµvmgsØû{¡ü[ð/“vœ «5Hô i”¹ +{Q®©"P“àEKÔàèõsÎ~ ÉÿåL0€5°–Tz“ú] +€9€<@ä˜ èÍ4r® V +À‰9€ýµà/ì ˆýKQ(?^˜RŠ—'ÛSt¥`¶uZ$…á/`3®åƨõóÒ 06u¥ ý%Ô48¯þ … ƒñ?YùzsEÁÉòrÆ ëØ ¾»ðÀ°ú©—8Ô •«Èß] Øa0ú;ÿÍ(@[y2xèºE«/.œ£Ÿï +À € Íó”kz‚¹ê\™B 32ïIæ$¬\ÈûxèãØ8á? Ÿà3Ûã~ûpd±å@õÀtLÌì«-@ªÙ΀àtÏДÒà”$&h­'ËHôS¶FßáEQp¥‰§hOÃÃÜç Ñ¾²øÜÅwÿÔâ€` É0ÀH…!’0ò +œ0i¯Zð )Xçè’<îé„J#vžÈ玤ç(i8ñ¿G‹æTП¤&×û8ê€X߃ãÿĤóÄ[fÂÓ;»cxôx@ì¸cR1H–Ž`0þWùn/Ïðçê öŒ¸Àßíà<@…€ ‚q™Ì¨õu‹HÄgê²ß@ ßߨc 7@g1@'A¨?}Áÿó¬À¾ß è¥Ïðe_ûøÊߨt‚`b‚j4ý,@± ®ËÌÎNC‰¶9€ÑÄðÒÝ Q¼N) Ðeò½ül8·þê®F>Ã/í=Ð°Ø •ÐS (ÐÀŠ¢¤5Ò y€S#~’Зÿ‰%ì ;­é™ƒÄŽ€ûsØ}pØ™€¨Ì5ÀË%ÕíAèZ]´NSŒø±máˆ5éŒ\tÌÜ7`O›g’Àò&H0IüGæªtsÙ]ÿ]ãÿây㬠R{>ö.ÀÑϨ rp,Í97Ì-”~7`\ +` +pwÀÈüÀ3©<s8oÊÌ®ÏðÔ®¸1ú?ðr(<ÉÄ3æp¤îm½@ü>¡$À~JøGàk#ÂøŸ,€|} =ް<ïp +Î0ÇH¿»¯´±] €c™n='TŒþ‰ ôT;­JàÄwüžˆMšcŸwqØGœß]Ážù‰T£í|NÎ~›ˆ±-ÀªCÛ&ëâÜDcW•5w:è!Óp ,Øæ.ÐT•À>p±– Øßtù¼Ëþ=@œè›0¢ê†{3×0àë0@÷šPTÀÄO«xŸy6SB!ÚæúæÈ(0•ßÛ ÑÆ>,uW#ŸáÇ—öz€åX + •àÑT@lFè•è.±ðNþvsä>% Vì…ƒöídvq„q¾v{Àȿ݈·L¬ðYÄT'x¥ÿKpßXÂjÖÄRÜÑÝ%ÄŽè$Øjy< ?ñ¾;²­ëˆó”¸‡<Æíå»8€F7 °kÀbýÿíý—e,òIEND®B`‚ \ No newline at end of file diff --git a/examples/web/models/models_obj_viewer.html b/examples/web/models/models_obj_viewer.html new file mode 100644 index 0000000..00d7ab1 --- /dev/null +++ b/examples/web/models/models_obj_viewer.html @@ -0,0 +1 @@ +raylib HTML5 GAME

Downloading...
\ No newline at end of file diff --git a/examples/web/models/models_obj_viewer.js b/examples/web/models/models_obj_viewer.js new file mode 100644 index 0000000..6a3eb70 --- /dev/null +++ b/examples/web/models/models_obj_viewer.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_obj_viewer.data";var REMOTE_PACKAGE_BASE="models_obj_viewer.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","models",true,true);Module["FS_createPath"]("/resources","model",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5279632,DYNAMICTOP_PTR=36720;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_obj_viewer.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"qc":___lock,"F":___setErrNo,"fb":___syscall140,"Wa":___syscall145,"E":___syscall146,"q":___syscall221,"ra":___syscall5,"D":___syscall54,"Y":___syscall6,"C":___unlock,"B":_eglGetProcAddress,"X":_emscripten_exit_pointerlock,"vd":_emscripten_get_gamepad_status,"kd":_emscripten_get_heap_size,"$c":_emscripten_get_num_gamepads,"W":_emscripten_get_pointerlock_status,"Gc":_emscripten_glActiveTexture,"wc":_emscripten_glAttachShader,"pc":_emscripten_glBeginQueryEXT,"ic":_emscripten_glBindAttribLocation,"fc":_emscripten_glBindBuffer,"ac":_emscripten_glBindFramebuffer,"Vb":_emscripten_glBindRenderbuffer,"Qb":_emscripten_glBindTexture,"Gb":_emscripten_glBindVertexArrayOES,"vb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"pb":_emscripten_glBlendFunc,"ob":_emscripten_glBlendFuncSeparate,"nb":_emscripten_glBufferData,"mb":_emscripten_glBufferSubData,"lb":_emscripten_glCheckFramebufferStatus,"kb":_emscripten_glClear,"jb":_emscripten_glClearColor,"ib":_emscripten_glClearDepthf,"hb":_emscripten_glClearStencil,"gb":_emscripten_glColorMask,"eb":_emscripten_glCompileShader,"db":_emscripten_glCompressedTexImage2D,"cb":_emscripten_glCompressedTexSubImage2D,"bb":_emscripten_glCopyTexImage2D,"ab":_emscripten_glCopyTexSubImage2D,"$a":_emscripten_glCreateProgram,"_a":_emscripten_glCreateShader,"Za":_emscripten_glCullFace,"Ya":_emscripten_glDeleteBuffers,"Xa":_emscripten_glDeleteFramebuffers,"Va":_emscripten_glDeleteProgram,"Ua":_emscripten_glDeleteQueriesEXT,"Ta":_emscripten_glDeleteRenderbuffers,"Sa":_emscripten_glDeleteShader,"Ra":_emscripten_glDeleteTextures,"Qa":_emscripten_glDeleteVertexArraysOES,"Pa":_emscripten_glDepthFunc,"Oa":_emscripten_glDepthMask,"Na":_emscripten_glDepthRangef,"Ma":_emscripten_glDetachShader,"La":_emscripten_glDisable,"Ka":_emscripten_glDisableVertexAttribArray,"Ja":_emscripten_glDrawArrays,"Ia":_emscripten_glDrawArraysInstancedANGLE,"Ha":_emscripten_glDrawBuffersWEBGL,"Ga":_emscripten_glDrawElements,"Fa":_emscripten_glDrawElementsInstancedANGLE,"Ea":_emscripten_glEnable,"Da":_emscripten_glEnableVertexAttribArray,"Ca":_emscripten_glEndQueryEXT,"Ba":_emscripten_glFinish,"Aa":_emscripten_glFlush,"za":_emscripten_glFramebufferRenderbuffer,"ya":_emscripten_glFramebufferTexture2D,"xa":_emscripten_glFrontFace,"wa":_emscripten_glGenBuffers,"va":_emscripten_glGenFramebuffers,"ua":_emscripten_glGenQueriesEXT,"ta":_emscripten_glGenRenderbuffers,"sa":_emscripten_glGenTextures,"qa":_emscripten_glGenVertexArraysOES,"pa":_emscripten_glGenerateMipmap,"oa":_emscripten_glGetActiveAttrib,"na":_emscripten_glGetActiveUniform,"ma":_emscripten_glGetAttachedShaders,"la":_emscripten_glGetAttribLocation,"ka":_emscripten_glGetBooleanv,"ja":_emscripten_glGetBufferParameteriv,"ia":_emscripten_glGetError,"ha":_emscripten_glGetFloatv,"ga":_emscripten_glGetFramebufferAttachmentParameteriv,"fa":_emscripten_glGetIntegerv,"ea":_emscripten_glGetProgramInfoLog,"da":_emscripten_glGetProgramiv,"ca":_emscripten_glGetQueryObjecti64vEXT,"ba":_emscripten_glGetQueryObjectivEXT,"aa":_emscripten_glGetQueryObjectui64vEXT,"$":_emscripten_glGetQueryObjectuivEXT,"_":_emscripten_glGetQueryivEXT,"Z":_emscripten_glGetRenderbufferParameteriv,"he":_emscripten_glGetShaderInfoLog,"ge":_emscripten_glGetShaderPrecisionFormat,"fe":_emscripten_glGetShaderSource,"ee":_emscripten_glGetShaderiv,"de":_emscripten_glGetString,"ce":_emscripten_glGetTexParameterfv,"be":_emscripten_glGetTexParameteriv,"ae":_emscripten_glGetUniformLocation,"$d":_emscripten_glGetUniformfv,"_d":_emscripten_glGetUniformiv,"Zd":_emscripten_glGetVertexAttribPointerv,"Yd":_emscripten_glGetVertexAttribfv,"Xd":_emscripten_glGetVertexAttribiv,"Wd":_emscripten_glHint,"Vd":_emscripten_glIsBuffer,"Ud":_emscripten_glIsEnabled,"Td":_emscripten_glIsFramebuffer,"Sd":_emscripten_glIsProgram,"Rd":_emscripten_glIsQueryEXT,"Qd":_emscripten_glIsRenderbuffer,"Pd":_emscripten_glIsShader,"Od":_emscripten_glIsTexture,"Nd":_emscripten_glIsVertexArrayOES,"Md":_emscripten_glLineWidth,"Ld":_emscripten_glLinkProgram,"Kd":_emscripten_glPixelStorei,"Jd":_emscripten_glPolygonOffset,"Id":_emscripten_glQueryCounterEXT,"Hd":_emscripten_glReadPixels,"Gd":_emscripten_glReleaseShaderCompiler,"Fd":_emscripten_glRenderbufferStorage,"Ed":_emscripten_glSampleCoverage,"Dd":_emscripten_glScissor,"Cd":_emscripten_glShaderBinary,"Bd":_emscripten_glShaderSource,"Ad":_emscripten_glStencilFunc,"zd":_emscripten_glStencilFuncSeparate,"yd":_emscripten_glStencilMask,"xd":_emscripten_glStencilMaskSeparate,"wd":_emscripten_glStencilOp,"ud":_emscripten_glStencilOpSeparate,"td":_emscripten_glTexImage2D,"sd":_emscripten_glTexParameterf,"rd":_emscripten_glTexParameterfv,"qd":_emscripten_glTexParameteri,"pd":_emscripten_glTexParameteriv,"od":_emscripten_glTexSubImage2D,"nd":_emscripten_glUniform1f,"md":_emscripten_glUniform1fv,"ld":_emscripten_glUniform1i,"jd":_emscripten_glUniform1iv,"id":_emscripten_glUniform2f,"hd":_emscripten_glUniform2fv,"gd":_emscripten_glUniform2i,"fd":_emscripten_glUniform2iv,"ed":_emscripten_glUniform3f,"dd":_emscripten_glUniform3fv,"cd":_emscripten_glUniform3i,"bd":_emscripten_glUniform3iv,"ad":_emscripten_glUniform4f,"_c":_emscripten_glUniform4fv,"Zc":_emscripten_glUniform4i,"Yc":_emscripten_glUniform4iv,"Xc":_emscripten_glUniformMatrix2fv,"Wc":_emscripten_glUniformMatrix3fv,"Vc":_emscripten_glUniformMatrix4fv,"Uc":_emscripten_glUseProgram,"Tc":_emscripten_glValidateProgram,"Sc":_emscripten_glVertexAttrib1f,"Rc":_emscripten_glVertexAttrib1fv,"Qc":_emscripten_glVertexAttrib2f,"Pc":_emscripten_glVertexAttrib2fv,"Oc":_emscripten_glVertexAttrib3f,"Nc":_emscripten_glVertexAttrib3fv,"Mc":_emscripten_glVertexAttrib4f,"Lc":_emscripten_glVertexAttrib4fv,"Kc":_emscripten_glVertexAttribDivisorANGLE,"Jc":_emscripten_glVertexAttribPointer,"Ic":_emscripten_glViewport,"Hc":_emscripten_memcpy_big,"Fc":_emscripten_request_pointerlock,"Ec":_emscripten_resize_heap,"V":_emscripten_run_script,"Dc":_emscripten_sample_gamepad_data,"Cc":_emscripten_set_click_callback_on_thread,"Bc":_emscripten_set_fullscreenchange_callback_on_thread,"Ac":_emscripten_set_gamepadconnected_callback_on_thread,"zc":_emscripten_set_gamepaddisconnected_callback_on_thread,"yc":_emscripten_set_keypress_callback_on_thread,"xc":_emscripten_set_main_loop,"vc":_emscripten_set_touchcancel_callback_on_thread,"uc":_emscripten_set_touchend_callback_on_thread,"tc":_emscripten_set_touchmove_callback_on_thread,"sc":_emscripten_set_touchstart_callback_on_thread,"rc":_exit,"A":_glActiveTexture,"U":_glAttachShader,"n":_glBindAttribLocation,"c":_glBindBuffer,"j":_glBindTexture,"oc":_glBlendFunc,"h":_glBufferData,"z":_glBufferSubData,"T":_glClear,"S":_glClearColor,"nc":_glClearDepthf,"mc":_glCompileShader,"lc":_glCompressedTexImage2D,"kc":_glCreateProgram,"jc":_glCreateShader,"hc":_glCullFace,"p":_glDeleteBuffers,"y":_glDeleteProgram,"R":_glDeleteShader,"Q":_glDeleteTextures,"gc":_glDepthFunc,"P":_glDetachShader,"O":_glDisable,"i":_glDisableVertexAttribArray,"N":_glDrawArrays,"M":_glDrawElements,"x":_glEnable,"f":_glEnableVertexAttribArray,"ec":_glFrontFace,"g":_glGenBuffers,"dc":_glGenTextures,"w":_glGetAttribLocation,"cc":_glGetFloatv,"bc":_glGetProgramInfoLog,"L":_glGetProgramiv,"$b":_glGetShaderInfoLog,"K":_glGetShaderiv,"o":_glGetString,"v":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Xb":_glShaderSource,"Wb":_glTexImage2D,"m":_glTexParameteri,"J":_glUniform1i,"u":_glUniform4f,"t":_glUniformMatrix4fv,"l":_glUseProgram,"Ub":_glVertexAttrib2f,"Tb":_glVertexAttrib3f,"s":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Sb":_glViewport,"Rb":_glfwCreateWindow,"Pb":_glfwDefaultWindowHints,"Ob":_glfwDestroyWindow,"Nb":_glfwGetCursorPos,"Mb":_glfwGetKey,"Lb":_glfwGetMouseButton,"r":_glfwGetTime,"Kb":_glfwInit,"Jb":_glfwMakeContextCurrent,"Ib":_glfwSetCharCallback,"Hb":_glfwSetCursorEnterCallback,"Fb":_glfwSetCursorPosCallback,"Eb":_glfwSetDropCallback,"Db":_glfwSetErrorCallback,"Cb":_glfwSetKeyCallback,"Bb":_glfwSetMouseButtonCallback,"Ab":_glfwSetScrollCallback,"zb":_glfwSetWindowIconifyCallback,"yb":_glfwSetWindowShouldClose,"xb":_glfwSetWindowSizeCallback,"wb":_glfwSwapBuffers,"I":_glfwTerminate,"k":_glfwWindowHint,"H":_llvm_stackrestore,"G":_llvm_stacksave,"ub":_nanosleep,"tb":_time,"sb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_obj_viewer.wasm b/examples/web/models/models_obj_viewer.wasm new file mode 100644 index 0000000..b47cd53 Binary files /dev/null and b/examples/web/models/models_obj_viewer.wasm differ diff --git a/examples/web/models/models_orthographic_projection.c b/examples/web/models/models_orthographic_projection.c index b2c1c9e..1b1f0f6 100644 --- a/examples/web/models/models_orthographic_projection.c +++ b/examples/web/models/models_orthographic_projection.c @@ -1,6 +1,6 @@ /******************************************************************************************* * -* raylib [models] example - Show the difference between perspective and orthographic projection +* raylib [models] example - Show the difference between perspective and orthographic projection * * This program is heavily based on the geometric objects example * @@ -40,7 +40,7 @@ void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- // Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -54,7 +54,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -77,14 +77,14 @@ void UpdateDrawFrame(void) { // Update //---------------------------------------------------------------------------------- - if (IsKeyPressed(KEY_SPACE)) + if (IsKeyPressed(KEY_SPACE)) { - if (camera.type == CAMERA_PERSPECTIVE) + if (camera.type == CAMERA_PERSPECTIVE) { camera.fovy = WIDTH_ORTHOGRAPHIC; camera.type = CAMERA_ORTHOGRAPHIC; - } - else + } + else { camera.fovy = FOVY_PERSPECTIVE; camera.type = CAMERA_PERSPECTIVE; diff --git a/examples/web/models/models_orthographic_projection.html b/examples/web/models/models_orthographic_projection.html new file mode 100644 index 0000000..6cf3721 --- /dev/null +++ b/examples/web/models/models_orthographic_projection.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/models/models_orthographic_projection.js b/examples/web/models/models_orthographic_projection.js new file mode 100644 index 0000000..c790309 --- /dev/null +++ b/examples/web/models/models_orthographic_projection.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5270720,DYNAMICTOP_PTR=27808;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_orthographic_projection.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"O":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"ac":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"wb":_glfwSetKeyCallback,"vb":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"ob":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_orthographic_projection.wasm b/examples/web/models/models_orthographic_projection.wasm new file mode 100644 index 0000000..e6c357e Binary files /dev/null and b/examples/web/models/models_orthographic_projection.wasm differ diff --git a/examples/web/models/models_rlgl_solar_system.c b/examples/web/models/models_rlgl_solar_system.c index b3f646a..9883857 100644 --- a/examples/web/models/models_rlgl_solar_system.c +++ b/examples/web/models/models_rlgl_solar_system.c @@ -51,7 +51,7 @@ void DrawSphereBasic(Color color); // Draw sphere without any matrix transf //---------------------------------------------------------------------------------- // Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -63,7 +63,7 @@ int main() camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; camera.fovy = 45.0f; camera.type = CAMERA_PERSPECTIVE; - + SetCameraMode(camera, CAMERA_FREE); #if defined(PLATFORM_WEB) @@ -71,7 +71,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -95,7 +95,7 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); - + earthRotation += (5.0f*rotationSpeed); earthOrbitRotation += (365/360.0f*(5.0f*rotationSpeed)*rotationSpeed); moonRotation += (2.0f*rotationSpeed); @@ -109,12 +109,12 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); BeginMode3D(camera); - + rlPushMatrix(); rlScalef(sunRadius, sunRadius, sunRadius); // Scale Sun DrawSphereBasic(GOLD); // Draw the Sun rlPopMatrix(); - + rlPushMatrix(); rlRotatef(earthOrbitRotation, 0.0f, 1.0f, 0.0f); // Rotation for Earth orbit around Sun rlTranslatef(earthOrbitRadius, 0.0f, 0.0f); // Translation for Earth orbit @@ -123,19 +123,19 @@ void UpdateDrawFrame(void) rlPushMatrix(); rlRotatef(earthRotation, 0.25, 1.0, 0.0); // Rotation for Earth itself rlScalef(earthRadius, earthRadius, earthRadius);// Scale Earth - + DrawSphereBasic(BLUE); // Draw the Earth rlPopMatrix(); - + rlRotatef(moonOrbitRotation, 0.0f, 1.0f, 0.0f); // Rotation for Moon orbit around Earth rlTranslatef(moonOrbitRadius, 0.0f, 0.0f); // Translation for Moon orbit rlRotatef(-moonOrbitRotation, 0.0f, 1.0f, 0.0f); // Rotation for Moon orbit around Earth inverted rlRotatef(moonRotation, 0.0f, 1.0f, 0.0f); // Rotation for Moon itself rlScalef(moonRadius, moonRadius, moonRadius); // Scale Moon - + DrawSphereBasic(LIGHTGRAY); // Draw the Moon rlPopMatrix(); - + // Some reference elements (not affected by previous matrix transformations) DrawCircle3D((Vector3){ 0.0f, 0.0f, 0.0f }, earthOrbitRadius, (Vector3){ 1, 0, 0 }, 90.0f, Fade(RED, 0.5f)); DrawGrid(20, 1.0f); @@ -155,7 +155,7 @@ void DrawSphereBasic(Color color) { int rings = 16; int slices = 16; - + rlBegin(RL_TRIANGLES); rlColor4ub(color.r, color.g, color.b, color.a); diff --git a/examples/web/models/models_rlgl_solar_system.html b/examples/web/models/models_rlgl_solar_system.html new file mode 100644 index 0000000..951015a --- /dev/null +++ b/examples/web/models/models_rlgl_solar_system.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/models/models_rlgl_solar_system.js b/examples/web/models/models_rlgl_solar_system.js new file mode 100644 index 0000000..8f329d6 --- /dev/null +++ b/examples/web/models/models_rlgl_solar_system.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269760,DYNAMICTOP_PTR=26848;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_rlgl_solar_system.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"mc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"sd":_emscripten_get_gamepad_status,"hd":_emscripten_get_heap_size,"Yc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Dc":_emscripten_glActiveTexture,"tc":_emscripten_glAttachShader,"lc":_emscripten_glBeginQueryEXT,"ec":_emscripten_glBindAttribLocation,"ac":_emscripten_glBindBuffer,"Wb":_emscripten_glBindFramebuffer,"Pb":_emscripten_glBindRenderbuffer,"Gb":_emscripten_glBindTexture,"wb":_emscripten_glBindVertexArrayOES,"ob":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ee":_emscripten_glGetShaderInfoLog,"de":_emscripten_glGetShaderPrecisionFormat,"ce":_emscripten_glGetShaderSource,"be":_emscripten_glGetShaderiv,"ae":_emscripten_glGetString,"$d":_emscripten_glGetTexParameterfv,"_d":_emscripten_glGetTexParameteriv,"Zd":_emscripten_glGetUniformLocation,"Yd":_emscripten_glGetUniformfv,"Xd":_emscripten_glGetUniformiv,"Wd":_emscripten_glGetVertexAttribPointerv,"Vd":_emscripten_glGetVertexAttribfv,"Ud":_emscripten_glGetVertexAttribiv,"Td":_emscripten_glHint,"Sd":_emscripten_glIsBuffer,"Rd":_emscripten_glIsEnabled,"Qd":_emscripten_glIsFramebuffer,"Pd":_emscripten_glIsProgram,"Od":_emscripten_glIsQueryEXT,"Nd":_emscripten_glIsRenderbuffer,"Md":_emscripten_glIsShader,"Ld":_emscripten_glIsTexture,"Kd":_emscripten_glIsVertexArrayOES,"Jd":_emscripten_glLineWidth,"Id":_emscripten_glLinkProgram,"Hd":_emscripten_glPixelStorei,"Gd":_emscripten_glPolygonOffset,"Fd":_emscripten_glQueryCounterEXT,"Ed":_emscripten_glReadPixels,"Dd":_emscripten_glReleaseShaderCompiler,"Cd":_emscripten_glRenderbufferStorage,"Bd":_emscripten_glSampleCoverage,"Ad":_emscripten_glScissor,"zd":_emscripten_glShaderBinary,"yd":_emscripten_glShaderSource,"xd":_emscripten_glStencilFunc,"wd":_emscripten_glStencilFuncSeparate,"vd":_emscripten_glStencilMask,"ud":_emscripten_glStencilMaskSeparate,"td":_emscripten_glStencilOp,"rd":_emscripten_glStencilOpSeparate,"qd":_emscripten_glTexImage2D,"pd":_emscripten_glTexParameterf,"od":_emscripten_glTexParameterfv,"nd":_emscripten_glTexParameteri,"md":_emscripten_glTexParameteriv,"ld":_emscripten_glTexSubImage2D,"kd":_emscripten_glUniform1f,"jd":_emscripten_glUniform1fv,"id":_emscripten_glUniform1i,"gd":_emscripten_glUniform1iv,"fd":_emscripten_glUniform2f,"ed":_emscripten_glUniform2fv,"dd":_emscripten_glUniform2i,"cd":_emscripten_glUniform2iv,"bd":_emscripten_glUniform3f,"ad":_emscripten_glUniform3fv,"$c":_emscripten_glUniform3i,"_c":_emscripten_glUniform3iv,"Zc":_emscripten_glUniform4f,"Xc":_emscripten_glUniform4fv,"Wc":_emscripten_glUniform4i,"Vc":_emscripten_glUniform4iv,"Uc":_emscripten_glUniformMatrix2fv,"Tc":_emscripten_glUniformMatrix3fv,"Sc":_emscripten_glUniformMatrix4fv,"Rc":_emscripten_glUseProgram,"Qc":_emscripten_glValidateProgram,"Pc":_emscripten_glVertexAttrib1f,"Oc":_emscripten_glVertexAttrib1fv,"Nc":_emscripten_glVertexAttrib2f,"Mc":_emscripten_glVertexAttrib2fv,"Lc":_emscripten_glVertexAttrib3f,"Kc":_emscripten_glVertexAttrib3fv,"Jc":_emscripten_glVertexAttrib4f,"Ic":_emscripten_glVertexAttrib4fv,"Hc":_emscripten_glVertexAttribDivisorANGLE,"Gc":_emscripten_glVertexAttribPointer,"Fc":_emscripten_glViewport,"Ec":_emscripten_memcpy_big,"Cc":_emscripten_request_pointerlock,"Bc":_emscripten_resize_heap,"O":_emscripten_run_script,"Ac":_emscripten_sample_gamepad_data,"zc":_emscripten_set_click_callback_on_thread,"yc":_emscripten_set_fullscreenchange_callback_on_thread,"xc":_emscripten_set_gamepadconnected_callback_on_thread,"wc":_emscripten_set_gamepaddisconnected_callback_on_thread,"vc":_emscripten_set_keypress_callback_on_thread,"uc":_emscripten_set_main_loop,"sc":_emscripten_set_touchcancel_callback_on_thread,"rc":_emscripten_set_touchend_callback_on_thread,"qc":_emscripten_set_touchmove_callback_on_thread,"pc":_emscripten_set_touchstart_callback_on_thread,"oc":_exit,"nc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"kc":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"jc":_glClearDepthf,"ic":_glCompileShader,"hc":_glCompressedTexImage2D,"gc":_glCreateProgram,"fc":_glCreateShader,"dc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"cc":_glDepthFunc,"H":_glDetachShader,"G":_glDisable,"o":_glDisableVertexAttribArray,"bc":_glDrawArrays,"$b":_glDrawElements,"u":_glEnable,"h":_glEnableVertexAttribArray,"_b":_glFrontFace,"n":_glGenBuffers,"Zb":_glGenTextures,"t":_glGetAttribLocation,"Yb":_glGetFloatv,"Xb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Vb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Ub":_glLinkProgram,"Tb":_glPixelStorei,"Sb":_glReadPixels,"Rb":_glShaderSource,"Qb":_glTexImage2D,"g":_glTexParameteri,"Ob":_glUniform1i,"Nb":_glUniform4f,"Mb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Lb":_glViewport,"Kb":_glfwCreateWindow,"Jb":_glfwDefaultWindowHints,"Ib":_glfwDestroyWindow,"Hb":_glfwGetCursorPos,"Fb":_glfwGetKey,"Eb":_glfwGetMouseButton,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["le"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_rlgl_solar_system.wasm b/examples/web/models/models_rlgl_solar_system.wasm new file mode 100644 index 0000000..0f762f2 Binary files /dev/null and b/examples/web/models/models_rlgl_solar_system.wasm differ diff --git a/examples/web/models/models_skybox.c b/examples/web/models/models_skybox.c index 243844a..28a89d4 100644 --- a/examples/web/models/models_skybox.c +++ b/examples/web/models/models_skybox.c @@ -18,13 +18,13 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world Camera camera = {{ 1.0f, 1.0f, 1.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; -Model skybox; +Model skybox = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -32,7 +32,7 @@ Model skybox; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -40,10 +40,10 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [models] example - skybox loading and drawing"); - // Load skybox model + // Load skybox model Mesh cube = GenMeshCube(1.0f, 1.0f, 1.0f); skybox = LoadModelFromMesh(cube); - + // Load skybox shader and set required locations // NOTE: Some locations are automatically set at shader loading skybox.material.shader = LoadShader("resources/shaders/skybox.vs", "resources/shaders/skybox.fs"); @@ -52,12 +52,12 @@ int main(void) // Load cubemap shader and setup required shader locations Shader shdrCubemap = LoadShader("resources/shaders/cubemap.vs", "resources/shaders/cubemap.fs"); SetShaderValuei(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, 1); - + Texture2D texHDR = LoadTexture("resources/pinetree.hdr"); skybox.material.maps[MAP_CUBEMAP].texture = GenTextureCubemap(shdrCubemap, texHDR, 512); - + UnloadShader(shdrCubemap); // Cubemap generation shader not required any more - + SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode #if defined(PLATFORM_WEB) @@ -65,7 +65,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -102,7 +102,7 @@ void UpdateDrawFrame(void) BeginMode3D(camera); DrawModel(skybox, Vector3Zero(), 1.0f, WHITE); - + DrawGrid(10, 1.0f); EndMode3D(); diff --git a/examples/web/models/models_yaw_pitch_roll.c b/examples/web/models/models_yaw_pitch_roll.c index e1ec513..e57b357 100644 --- a/examples/web/models/models_yaw_pitch_roll.c +++ b/examples/web/models/models_yaw_pitch_roll.c @@ -5,9 +5,9 @@ * This example has been created using raylib 1.8 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * -* Example based on Berni work on Raspberry Pi +* Example contributed by Berni (@Berni8k) and reviewed by Ramon Santamaria (@raysan5) * -* Copyright (c) 2017 Ramon Santamaria (@raysan5) +* Copyright (c) 2017 Berni (@Berni8k) and Ramon Santamaria (@raysan5) * ********************************************************************************************/ @@ -21,19 +21,19 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define our custom camera to look into our 3d world Camera camera = { 0 }; -Texture2D texAngleGauge; -Texture2D texBackground; -Texture2D texPitch; -Texture2D texPlane; +Texture2D texAngleGauge = { 0 }; +Texture2D texBackground = { 0 }; +Texture2D texPitch = { 0 }; +Texture2D texPlane = { 0 }; -RenderTexture2D framebuffer; -Model model; +RenderTexture2D framebuffer = { 0 }; +Model model = { 0 }; float pitch = 0.0f; float roll = 0.0f; @@ -48,7 +48,7 @@ void UpdateDrawFrame(void); // Update and Draw one frame void DrawAngleGauge(Texture2D angleGauge, int x, int y, float angle, char title[], Color color); //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -56,30 +56,31 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [models] example - plane rotations (yaw, pitch, roll)"); - texAngleGauge = LoadTexture("resources/angle_gauge.png"); + texAngleGauge = LoadTexture("resources/angle_gauge.png"); texBackground = LoadTexture("resources/background.png"); - texPitch = LoadTexture("resources/pitch.png"); + texPitch = LoadTexture("resources/pitch.png"); texPlane = LoadTexture("resources/plane.png"); framebuffer = LoadRenderTexture(192, 192); - + // Model loading model = LoadModel("resources/plane.obj"); // Load OBJ model - model.material.maps[MAP_DIFFUSE].texture = LoadTexture("resources/plane_diffuse.png"); // Set map diffuse texture - - GenTextureMipmaps(&model.material.maps[MAP_DIFFUSE].texture); + model.materials[0].maps[MAP_DIFFUSE].texture = LoadTexture("resources/plane_diffuse.png"); // Set map diffuse texture + + GenTextureMipmaps(&model.materials[0].maps[MAP_DIFFUSE].texture); camera.position = (Vector3){ 0.0f, 60.0f, -120.0f };// Camera position perspective camera.target = (Vector3){ 0.0f, 12.0f, 0.0f }; // Camera looking at point camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) camera.fovy = 30.0f; // Camera field-of-view Y + camera.type = CAMERA_PERSPECTIVE; // Camera type #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -89,17 +90,17 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - + // Unload all loaded data UnloadModel(model); - + UnloadRenderTexture(framebuffer); - - UnloadTexture(texAngleGauge); + + UnloadTexture(texAngleGauge); UnloadTexture(texBackground); - UnloadTexture(texPitch); + UnloadTexture(texPitch); UnloadTexture(texPlane); - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -121,7 +122,7 @@ void UpdateDrawFrame(void) if (roll > 0.0f) roll -= 0.5f; else if (roll < 0.0f) roll += 0.5f; } - + // Plane yaw (y-axis) controls if (IsKeyDown(KEY_S)) yaw += 1.0f; else if (IsKeyDown(KEY_A)) yaw -= 1.0f; @@ -130,7 +131,7 @@ void UpdateDrawFrame(void) if (yaw > 0.0f) yaw -= 0.5f; else if (yaw < 0.0f) yaw += 0.5f; } - + // Plane pitch (z-axis) controls if (IsKeyDown(KEY_DOWN)) pitch += 0.6f; else if (IsKeyDown(KEY_UP)) pitch -= 0.6f; @@ -139,7 +140,7 @@ void UpdateDrawFrame(void) if (pitch > 0.3f) pitch -= 0.3f; else if (pitch < -0.3f) pitch += 0.3f; } - + // Wraps the phase of an angle to fit between -180 and +180 degrees int pitchOffset = pitch; while (pitchOffset > 180) pitchOffset -= 360; @@ -151,16 +152,16 @@ void UpdateDrawFrame(void) transform = MatrixMultiply(transform, MatrixRotateZ(DEG2RAD*roll)); transform = MatrixMultiply(transform, MatrixRotateX(DEG2RAD*pitch)); transform = MatrixMultiply(transform, MatrixRotateY(DEG2RAD*yaw)); - + model.transform = transform; //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + // Draw framebuffer texture (Ahrs Display) int centerX = framebuffer.texture.width/2; int centerY = framebuffer.texture.height/2; @@ -177,28 +178,28 @@ void UpdateDrawFrame(void) DrawTexturePro(texPitch, (Rectangle){ 0, 0, texPitch.width, texPitch.height }, (Rectangle){ centerX, centerY, texPitch.width*scaleFactor, texPitch.height*scaleFactor }, (Vector2){ texPitch.width/2*scaleFactor, texPitch.height/2*scaleFactor + pitchOffset*scaleFactor }, roll, WHITE); - + DrawTexturePro(texPlane, (Rectangle){0,0,texPlane.width, texPlane.height }, - (Rectangle){ centerX, centerY, texPlane.width*scaleFactor, texPlane.height*scaleFactor }, + (Rectangle){ centerX, centerY, texPlane.width*scaleFactor, texPlane.height*scaleFactor }, (Vector2){texPlane.width/2*scaleFactor, texPlane.height/2*scaleFactor }, 0, WHITE); - + EndBlendMode(); EndTextureMode(); // Draw 3D model (recomended to draw 3D always before 2D) - Begin3dMode(camera); + BeginMode3D(camera); DrawModel(model, (Vector3){ 0, 6.0f, 0 }, 1.0f, WHITE); // Draw 3d model with texture DrawGrid(10, 10.0f); - End3dMode(); + EndMode3D(); // Draw 2D GUI stuff - DrawAngleGauge(texAngleGauge, 80, 80, roll, "roll", RED); - DrawAngleGauge(texAngleGauge, 190, 80, pitch, "pitch", GREEN); - DrawAngleGauge(texAngleGauge, 300, 80, yaw, "yaw", SKYBLUE); - + DrawAngleGauge(texAngleGauge, 80, 70, roll, "roll", RED); + DrawAngleGauge(texAngleGauge, 190, 70, pitch, "pitch", GREEN); + DrawAngleGauge(texAngleGauge, 300, 70, yaw, "yaw", SKYBLUE); + DrawRectangle(30, 360, 260, 70, Fade(SKYBLUE, 0.5f)); DrawRectangleLines(30, 360, 260, 70, Fade(DARKBLUE, 0.5f)); DrawText("Pitch controlled with: KEY_UP / KEY_DOWN", 40, 370, 10, DARKGRAY); @@ -206,11 +207,11 @@ void UpdateDrawFrame(void) DrawText("Yaw controlled with: KEY_A / KEY_S", 40, 410, 10, DARKGRAY); // Draw framebuffer texture - DrawTextureRec(framebuffer.texture, (Rectangle){ 0, 0, framebuffer.texture.width, -framebuffer.texture.height }, + DrawTextureRec(framebuffer.texture, (Rectangle){ 0, 0, framebuffer.texture.width, -framebuffer.texture.height }, (Vector2){ screenWidth - framebuffer.texture.width - 20, 20 }, Fade(WHITE, 0.8f)); - + DrawRectangleLines(screenWidth - framebuffer.texture.width - 20, 20, framebuffer.texture.width, framebuffer.texture.height, DARKGRAY); - + EndDrawing(); //---------------------------------------------------------------------------------- } @@ -224,7 +225,7 @@ void DrawAngleGauge(Texture2D angleGauge, int x, int y, float angle, char title[ int textSize = 20; DrawTexturePro(angleGauge, srcRec, dstRec, origin, angle, color); - - DrawText(FormatText("%5.1f", angle), x - MeasureText(FormatText("%5.1f", angle), textSize) / 2, y + 10, textSize, DARKGRAY); - DrawText(title, x - MeasureText(title, textSize) / 2, y + 60, textSize, DARKGRAY); + + DrawText(FormatText("%5.1f", angle), x - MeasureText(FormatText("%5.1f", angle), textSize) / 2, y + 10, textSize, DARKGRAY); + DrawText(title, x - MeasureText(title, textSize) / 2, y + 60, textSize, DARKGRAY); } \ No newline at end of file diff --git a/examples/web/models/models_yaw_pitch_roll.data b/examples/web/models/models_yaw_pitch_roll.data new file mode 100644 index 0000000..03bc92f --- /dev/null +++ b/examples/web/models/models_yaw_pitch_roll.data @@ -0,0 +1,12539 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 23.07.2017 19:55:30 + +# +# object P_51_Mustang_Proppeler +# + +v 6.98 -5.85 40.44 +v 7.18 -5.71 40.16 +v 7.46 -5.54 40.90 +v 7.65 -5.40 40.61 +v -1.06 6.70 43.10 +v -0.66 7.22 43.05 +v -2.20 7.04 41.37 +v -1.32 8.19 41.26 +v -0.05 7.42 43.02 +v 0.03 8.62 41.20 +v 0.55 7.21 43.04 +v 1.34 8.17 41.23 +v 0.89 6.69 43.08 +v 2.11 7.01 41.33 +v 0.86 6.04 43.14 +v 2.04 5.59 41.46 +v 0.47 5.52 43.19 +v 1.16 4.45 41.57 +v -0.15 5.33 43.22 +v -0.19 4.02 41.63 +v -0.74 5.53 43.20 +v -1.50 4.47 41.60 +v -1.09 6.06 43.16 +v -2.27 5.62 41.50 +v -0.20 3.16 38.93 +v -1.94 3.76 38.90 +v -2.97 5.30 38.76 +v -2.88 7.20 38.59 +v -1.71 8.72 38.44 +v 0.10 9.29 38.37 +v 1.84 8.70 38.40 +v 2.87 7.15 38.54 +v 2.78 5.26 38.71 +v 1.61 3.73 38.86 +v -0.11 6.40 43.97 +v 2.25 5.68 40.33 +v 0.23 3.72 40.34 +v 7.55 -5.03 41.18 +v 6.53 -5.89 40.11 +v -2.39 6.87 40.27 +v -0.36 8.83 39.88 +v -7.68 17.58 39.26 +v -6.63 18.36 38.02 +v -7.10 18.35 38.37 +v -7.59 18.07 38.89 +v -11.88 -2.05 40.51 +v -12.14 -1.59 39.98 +v -11.39 -2.12 40.84 +v -12.14 -1.14 39.60 +v -2.58 5.85 39.82 +v -0.73 3.87 40.17 +v -0.75 3.90 40.52 +v -2.60 5.87 40.18 +v -11.53 -1.92 41.09 +v -12.28 -0.94 39.85 +v -12.28 -1.40 40.23 +v -12.02 -1.86 40.76 +v 7.74 -4.89 40.89 +v 2.27 5.69 39.97 +v 0.25 3.72 39.99 +v 6.72 -5.74 39.83 +v 12.03 14.07 38.30 +v 12.17 13.89 38.58 +v 12.04 13.60 38.00 +v 12.18 13.42 38.29 +v 11.76 14.57 38.74 +v 11.89 14.39 39.03 +v 11.40 14.47 39.35 +v 11.26 14.65 39.07 +v 0.60 8.66 39.71 +v 0.62 8.66 40.07 +v 2.45 6.68 39.69 +v 2.47 6.67 40.05 +v -7.29 18.19 38.11 +v -6.82 18.20 37.77 +v -7.77 17.91 38.63 +v -7.87 17.42 39.01 +v -2.40 6.84 39.91 +v -0.37 8.80 39.53 +# 79 vertices + +vn 0.56 -0.83 -0.03 +vn -0.69 0.31 0.65 +vn -0.42 0.65 0.63 +vn -0.85 0.35 0.40 +vn -0.51 0.77 0.38 +vn 0.01 0.77 0.63 +vn 0.01 0.92 0.38 +vn 0.44 0.62 0.65 +vn 0.55 0.74 0.40 +vn 0.70 0.25 0.66 +vn 0.87 0.27 0.42 +vn 0.70 -0.20 0.68 +vn 0.86 -0.28 0.43 +vn 0.44 -0.56 0.71 +vn 0.53 -0.72 0.45 +vn -0.00 -0.69 0.72 +vn -0.01 -0.88 0.47 +vn -0.45 -0.53 0.72 +vn -0.56 -0.69 0.46 +vn -0.71 -0.14 0.69 +vn -0.88 -0.21 0.43 +vn -0.01 -0.95 0.30 +vn -0.60 -0.75 0.29 +vn -0.94 -0.23 0.27 +vn -0.90 0.36 0.24 +vn -0.54 0.81 0.23 +vn 0.02 0.97 0.23 +vn 0.58 0.78 0.25 +vn 0.92 0.29 0.27 +vn 0.91 -0.30 0.28 +vn 0.57 -0.77 0.30 +vn 0.00 0.07 1.00 +vn -0.01 -0.09 -1.00 +vn -0.05 0.06 1.00 +vn -0.09 0.02 1.00 +vn -0.48 -0.32 0.82 +vn -0.52 -0.35 0.78 +vn -0.53 -0.33 0.78 +vn 0.07 0.13 0.99 +vn 0.11 0.16 0.98 +vn 0.47 0.44 0.76 +vn 0.51 0.47 0.72 +vn 0.52 0.45 0.73 +vn 0.40 -0.58 -0.71 +vn 0.39 -0.54 -0.75 +vn 0.42 -0.57 -0.71 +vn 0.06 -0.19 -0.98 +vn 0.02 -0.15 -0.99 +vn -0.03 0.15 0.99 +vn -0.06 0.19 0.98 +vn -0.39 0.54 0.75 +vn -0.42 0.57 0.71 +vn -0.40 0.58 0.71 +vn 0.84 -0.36 0.40 +vn 0.88 0.46 0.06 +vn 0.88 0.46 0.07 +vn 0.67 0.38 0.64 +vn 0.66 0.38 0.65 +vn -0.70 0.72 -0.02 +vn -0.63 -0.42 -0.65 +vn -0.64 -0.43 -0.64 +vn -0.83 -0.55 -0.07 +vn -0.84 -0.55 -0.06 +vn 0.53 0.33 -0.78 +vn 0.48 0.32 -0.82 +vn 0.52 0.35 -0.78 +vn 0.09 -0.03 -1.00 +vn 0.05 -0.06 -1.00 +vn 0.92 0.21 -0.32 +vn 0.84 0.53 -0.08 +vn 0.38 0.85 0.36 +vn -0.49 0.87 0.03 +vn -0.49 0.87 0.04 +vn -0.34 0.71 0.61 +vn -0.34 0.71 0.62 +vn -0.73 -0.68 0.03 +vn 0.38 -0.68 -0.62 +vn 0.39 -0.69 -0.61 +vn 0.57 -0.82 -0.04 +vn 0.57 -0.82 -0.03 +vn -0.43 0.46 -0.77 +vn -0.42 0.41 -0.81 +vn -0.45 0.45 -0.77 +vn -0.08 0.01 -1.00 +vn -0.04 -0.03 -1.00 +vn 0.05 0.03 1.00 +vn 0.08 -0.00 1.00 +vn 0.42 -0.41 0.81 +vn 0.45 -0.45 0.77 +vn 0.43 -0.46 0.77 +vn -0.29 0.89 -0.35 +vn -0.57 0.82 -0.10 +vn -0.83 0.43 0.35 +vn -0.89 -0.45 0.07 +vn -0.89 -0.45 0.08 +vn -0.69 -0.28 0.67 +vn -0.68 -0.27 0.68 +vn 0.70 -0.72 0.04 +vn 0.65 0.32 -0.69 +vn 0.66 0.32 -0.68 +vn 0.84 0.54 -0.08 +vn 0.84 0.54 -0.07 +vn -0.52 -0.45 -0.73 +vn -0.47 -0.44 -0.77 +vn -0.50 -0.47 -0.72 +vn -0.11 -0.15 -0.98 +vn -0.07 -0.12 -0.99 +vn -0.91 -0.27 -0.32 +vn -0.84 -0.54 -0.06 +vn -0.39 -0.82 0.42 +vn 0.49 -0.87 0.10 +vn 0.49 -0.86 0.11 +vn 0.37 -0.62 0.69 +vn 0.37 -0.62 0.70 +vn 0.73 0.68 -0.00 +vn -0.41 0.59 -0.70 +vn -0.42 0.59 -0.69 +vn -0.57 0.81 -0.11 +vn 0.27 -0.92 -0.28 +# 119 vertex normals + +vt 0.04 0.85 0.00 +vt 0.03 0.85 0.00 +vt 0.92 0.13 0.00 +vt 0.92 0.12 0.00 +vt 0.96 0.13 0.00 +vt 0.96 0.11 0.00 +vt 0.96 0.10 0.00 +vt 0.92 0.14 0.00 +vt 0.96 0.14 0.00 +vt 0.92 0.15 0.00 +vt 0.96 0.16 0.00 +vt 0.96 0.17 0.00 +vt 0.96 0.15 0.00 +vt 1.00 0.18 0.00 +vt 1.00 0.16 0.00 +vt 1.00 0.15 0.00 +vt 1.00 0.13 0.00 +vt 1.00 0.11 0.00 +vt 1.00 0.09 0.00 +vt 0.91 0.13 0.00 +vt 0.80 0.95 0.00 +vt 0.81 0.94 0.00 +vt 0.81 0.96 0.00 +vt 0.82 0.95 0.00 +vt 0.82 0.96 0.00 +vt 0.80 0.96 0.00 +vt 0.38 0.65 0.00 +vt 0.37 0.68 0.00 +vt 0.23 0.65 0.00 +vt 0.23 0.67 0.00 +vt 0.23 0.66 0.00 +vt 0.37 0.66 0.00 +vt 0.37 0.67 0.00 +vt 0.35 0.66 0.00 +vt 0.35 0.67 0.00 +vt 0.06 0.85 0.00 +vt 0.05 0.85 0.00 +# 37 texture coords + +g P_51_Mustang_Proppeler +f 1/1/1 2/1/1 3/2/1 +f 4/2/1 3/2/1 2/1/1 +f 5/3/2 6/4/3 7/5/4 +f 8/6/5 7/5/4 6/4/3 +f 6/4/3 9/4/6 8/6/5 +f 10/7/7 8/6/5 9/4/6 +f 9/4/6 11/4/8 10/7/7 +f 12/6/9 10/7/7 11/4/8 +f 11/4/8 13/3/10 12/6/9 +f 14/5/11 12/6/9 13/3/10 +f 13/3/10 15/8/12 14/5/11 +f 16/9/13 14/5/11 15/8/12 +f 15/8/12 17/10/14 16/9/13 +f 18/11/15 16/9/13 17/10/14 +f 17/10/14 19/10/16 18/11/15 +f 20/12/17 18/11/15 19/10/16 +f 19/10/16 21/10/18 20/12/17 +f 22/11/19 20/12/17 21/10/18 +f 21/10/18 23/8/20 22/11/19 +f 24/13/21 22/11/19 23/8/20 +f 20/12/17 22/11/19 25/14/22 +f 26/15/23 25/14/22 22/11/19 +f 22/11/19 24/13/21 26/15/23 +f 27/16/24 26/15/23 24/13/21 +f 23/8/20 5/3/2 24/13/21 +f 7/5/4 24/13/21 5/3/2 +f 24/13/21 7/5/4 27/16/24 +f 28/17/25 27/16/24 7/5/4 +f 7/5/4 8/6/5 28/17/25 +f 29/18/26 28/17/25 8/6/5 +f 8/6/5 10/7/7 29/18/26 +f 30/19/27 29/18/26 10/7/7 +f 10/7/7 12/6/9 30/19/27 +f 31/18/28 30/19/27 12/6/9 +f 12/6/9 14/5/11 31/18/28 +f 32/17/29 31/18/28 14/5/11 +f 14/5/11 16/9/13 32/17/29 +f 33/16/30 32/17/29 16/9/13 +f 16/9/13 18/11/15 33/16/30 +f 34/15/31 33/16/30 18/11/15 +f 18/11/15 20/12/17 34/15/31 +f 25/14/22 34/15/31 20/12/17 +f 35/20/32 21/10/18 19/10/16 +f 35/20/32 23/8/20 21/10/18 +f 35/20/32 5/3/2 23/8/20 +f 35/20/32 6/4/3 5/3/2 +f 35/20/32 9/4/6 6/4/3 +f 35/20/32 11/4/8 9/4/6 +f 35/20/32 13/3/10 11/4/8 +f 35/20/32 15/8/12 13/3/10 +f 35/20/32 17/10/14 15/8/12 +f 35/20/32 19/10/16 17/10/14 +f 31/21/33 32/22/33 30/21/33 +f 32/22/33 28/23/33 30/21/33 +f 34/24/33 28/23/33 32/22/33 +f 26/25/33 28/23/33 34/24/33 +f 25/24/33 26/25/33 34/24/33 +f 30/21/33 28/23/33 29/26/33 +f 27/23/33 28/23/33 26/25/33 +f 36/27/34 37/28/35 38/29/36 +f 37/28/35 39/30/37 38/29/36 +f 39/30/37 1/31/38 38/29/36 +f 1/31/38 3/31/38 38/29/36 +f 40/27/39 41/28/40 42/29/41 +f 41/28/40 43/30/42 42/29/41 +f 43/30/42 44/31/43 42/29/41 +f 44/31/43 45/31/43 42/29/41 +f 46/31/44 47/31/44 48/29/45 +f 47/31/44 49/30/46 48/29/45 +f 49/30/46 50/28/47 48/29/45 +f 50/28/47 51/27/48 48/29/45 +f 52/27/49 53/28/50 54/29/51 +f 53/28/50 55/30/52 54/29/51 +f 55/30/52 56/31/53 54/29/51 +f 56/31/53 57/31/53 54/29/51 +f 3/30/54 4/31/54 38/30/54 +f 58/31/54 38/30/54 4/31/54 +f 59/32/55 36/33/56 58/31/57 +f 38/30/58 58/31/57 36/33/56 +f 60/34/59 37/35/59 59/32/59 +f 36/33/59 59/32/59 37/35/59 +f 61/31/60 39/30/61 60/34/62 +f 39/30/61 37/35/63 60/34/62 +f 4/31/64 2/31/64 58/29/65 +f 2/31/64 61/30/66 58/29/65 +f 61/30/66 60/28/67 58/29/65 +f 60/28/67 59/27/68 58/29/65 +f 62/1/69 63/1/69 64/36/69 +f 65/37/69 64/36/69 63/1/69 +f 66/2/70 67/2/70 62/1/70 +f 63/1/70 62/1/70 67/2/70 +f 67/30/71 66/31/71 68/30/71 +f 69/31/71 68/30/71 66/31/71 +f 70/32/72 71/33/73 69/31/74 +f 68/30/75 69/31/74 71/33/73 +f 72/34/76 73/35/76 70/32/76 +f 71/33/76 70/32/76 73/35/76 +f 64/31/77 65/30/78 72/34/79 +f 65/30/78 73/35/80 72/34/79 +f 66/31/81 62/31/81 69/29/82 +f 62/31/81 64/30/83 69/29/82 +f 64/30/83 72/28/84 69/29/82 +f 72/28/84 70/27/85 69/29/82 +f 71/27/86 73/28/87 68/29/88 +f 73/28/87 65/30/89 68/29/88 +f 65/30/89 63/31/90 68/29/88 +f 63/31/90 67/31/90 68/29/88 +f 74/1/91 44/1/91 75/2/91 +f 43/2/91 75/2/91 44/1/91 +f 76/37/92 45/36/92 74/1/92 +f 44/1/92 74/1/92 45/36/92 +f 45/30/93 76/31/93 42/30/93 +f 77/31/93 42/30/93 76/31/93 +f 78/32/94 40/33/95 77/31/96 +f 42/30/97 77/31/96 40/33/95 +f 79/34/98 41/35/98 78/32/98 +f 40/33/98 78/32/98 41/35/98 +f 75/31/99 43/30/100 79/34/101 +f 43/30/100 41/35/102 79/34/101 +f 76/31/103 74/31/103 77/29/104 +f 74/31/103 75/30/105 77/29/104 +f 75/30/105 79/28/106 77/29/104 +f 79/28/106 78/27/107 77/29/104 +f 47/1/108 56/1/108 49/2/108 +f 55/2/108 49/2/108 56/1/108 +f 46/37/109 57/37/109 47/1/109 +f 56/1/109 47/1/109 57/37/109 +f 57/30/110 46/31/110 54/30/110 +f 48/31/110 54/30/110 46/31/110 +f 51/32/111 52/33/112 48/31/113 +f 54/30/114 48/31/113 52/33/112 +f 50/34/115 53/35/115 51/32/115 +f 52/33/115 51/32/115 53/35/115 +f 49/31/116 55/30/117 50/34/118 +f 55/30/117 53/35/92 50/34/118 +f 33/22/33 34/24/33 32/22/33 +f 2/1/119 1/1/119 61/36/119 +f 39/37/119 61/36/119 1/1/119 +# 138 faces + +# +# object P_51_Mustang_Right_Rockets +# + +v -34.05 -4.42 7.01 +v -33.98 -4.35 7.01 +v -34.09 -4.33 9.68 +v -34.02 -4.26 9.67 +v -35.60 -3.83 7.68 +v -35.21 -3.94 7.69 +v -35.84 -3.60 19.17 +v -36.18 -3.24 19.14 +v -35.88 -3.53 7.66 +v -36.29 -2.75 19.10 +v -36.09 -2.72 20.16 +v -36.01 -3.10 20.20 +v -35.35 -2.67 21.77 +v -35.74 -3.38 20.22 +v -35.37 -3.49 20.23 +v -35.37 -3.74 19.18 +v -34.88 -3.61 19.16 +v -34.81 -3.84 7.67 +v -34.50 -3.54 7.65 +v -34.50 -3.25 19.13 +v -34.37 -3.14 7.61 +v -34.35 -2.76 19.08 +v -34.46 -2.73 7.57 +v -34.46 -2.27 19.04 +v -34.74 -2.43 7.55 +v -34.79 -1.91 19.01 +v -35.13 -2.32 7.54 +v -35.27 -1.77 19.00 +v -35.54 -2.43 7.55 +v -35.76 -1.90 19.01 +v -35.84 -2.72 7.58 +v -36.13 -2.26 19.05 +v -35.97 -3.13 7.62 +v -35.97 -2.33 20.13 +v -35.68 -2.05 20.10 +v -35.30 -1.95 20.08 +v -34.92 -2.06 20.09 +v -34.66 -2.34 20.12 +v -34.58 -2.73 20.15 +v -34.70 -3.11 20.19 +v -34.99 -3.39 20.21 +v -36.27 -1.89 6.80 +v -35.13 -3.10 7.59 +v -36.34 -1.96 6.81 +v -35.20 -3.17 7.60 +v -36.30 -1.80 9.47 +v -36.38 -1.87 9.47 +v -35.16 -3.02 10.26 +v -35.24 -3.08 10.27 +v -33.90 -1.89 9.45 +v -33.97 -1.82 9.45 +v -35.18 -3.09 10.27 +v -35.25 -3.01 10.26 +v -36.43 -4.31 9.70 +v -36.49 -4.24 9.69 +v -33.87 -1.98 6.79 +v -35.15 -3.17 7.60 +v -36.39 -4.40 7.03 +v -36.46 -4.33 7.02 +v -35.21 -3.10 7.59 +v -33.93 -1.90 6.78 +v -31.30 -4.44 6.99 +v -31.23 -4.37 6.98 +v -31.34 -4.35 9.66 +v -31.26 -4.28 9.65 +v -32.85 -3.85 7.66 +v -32.46 -3.96 7.67 +v -33.09 -3.63 19.15 +v -33.43 -3.26 19.12 +v -33.13 -3.55 7.63 +v -33.53 -2.77 19.08 +v -33.34 -2.74 20.14 +v -33.25 -3.12 20.17 +v -32.60 -2.69 21.75 +v -32.99 -3.41 20.20 +v -32.62 -3.51 20.21 +v -32.61 -3.76 19.16 +v -32.12 -3.63 19.14 +v -32.05 -3.86 7.65 +v -31.75 -3.56 7.62 +v -31.75 -3.28 19.11 +v -31.62 -3.16 7.59 +v -31.60 -2.78 19.06 +v -31.71 -2.75 7.55 +v -31.71 -2.29 19.02 +v -31.99 -2.45 7.52 +v -32.04 -1.93 18.99 +v -32.38 -2.34 7.52 +v -32.52 -1.79 18.98 +v -32.78 -2.45 7.53 +v -33.01 -1.92 18.99 +v -33.09 -2.74 7.56 +v -33.38 -2.28 19.03 +v -33.22 -3.15 7.60 +v -33.22 -2.35 20.10 +v -32.93 -2.07 20.08 +v -32.54 -1.97 20.06 +v -32.17 -2.08 20.07 +v -31.91 -2.36 20.09 +v -31.82 -2.75 20.13 +v -31.94 -3.13 20.16 +v -32.23 -3.41 20.19 +v -33.52 -1.91 6.78 +v -32.38 -3.12 7.57 +v -33.59 -1.98 6.78 +v -32.45 -3.19 7.58 +v -33.55 -1.82 9.44 +v -33.63 -1.89 9.45 +v -32.41 -3.04 10.24 +v -32.48 -3.11 10.25 +v -31.15 -1.91 9.43 +v -31.22 -1.84 9.43 +v -32.43 -3.11 10.24 +v -32.49 -3.04 10.24 +v -33.67 -4.33 9.68 +v -33.74 -4.26 9.67 +v -31.12 -2.00 6.77 +v -32.39 -3.19 7.58 +v -33.64 -4.42 7.01 +v -33.70 -4.35 7.00 +v -32.46 -3.12 7.57 +v -31.18 -1.93 6.76 +v -28.67 -4.46 6.97 +v -28.59 -4.39 6.96 +v -28.70 -4.37 9.64 +v -28.63 -4.30 9.63 +v -30.21 -3.87 7.64 +v -29.82 -3.98 7.65 +v -30.45 -3.65 19.13 +v -30.79 -3.28 19.10 +v -30.49 -3.57 7.61 +v -30.90 -2.79 19.06 +v -30.70 -2.76 20.12 +v -30.62 -3.14 20.15 +v -29.96 -2.71 21.73 +v -30.35 -3.43 20.18 +v -29.98 -3.53 20.19 +v -29.98 -3.78 19.14 +v -29.49 -3.65 19.12 +v -29.42 -3.88 7.63 +v -29.11 -3.58 7.60 +v -29.12 -3.30 19.09 +v -28.98 -3.18 7.57 +v -28.96 -2.81 19.04 +v -29.07 -2.77 7.53 +v -29.07 -2.31 19.00 +v -29.35 -2.47 7.50 +v -29.41 -1.95 18.97 +v -29.74 -2.36 7.50 +v -29.88 -1.81 18.96 +v -30.15 -2.47 7.51 +v -30.37 -1.94 18.97 +v -30.45 -2.76 7.54 +v -30.74 -2.30 19.01 +v -30.58 -3.17 7.58 +v -30.58 -2.37 20.08 +v -30.29 -2.09 20.06 +v -29.91 -1.99 20.04 +v -29.53 -2.10 20.05 +v -29.27 -2.38 20.07 +v -29.19 -2.77 20.11 +v -29.31 -3.15 20.14 +v -29.60 -3.43 20.17 +v -30.88 -1.93 6.76 +v -29.74 -3.14 7.55 +v -30.95 -2.00 6.76 +v -29.81 -3.21 7.56 +v -30.92 -1.84 9.42 +v -30.99 -1.91 9.43 +v -29.77 -3.06 10.22 +v -29.85 -3.13 10.22 +v -28.51 -1.93 9.41 +v -28.58 -1.86 9.41 +v -29.79 -3.13 10.22 +v -29.86 -3.06 10.22 +v -31.04 -4.35 9.66 +v -31.10 -4.28 9.65 +v -28.48 -2.02 6.75 +v -29.76 -3.21 7.56 +v -31.00 -4.44 6.99 +v -31.07 -4.37 6.98 +v -29.82 -3.14 7.55 +v -28.54 -1.95 6.74 +# 183 vertices + +vn 0.69 -0.72 0.03 +vn -0.52 -0.85 0.01 +vn -0.01 -1.00 0.02 +vn -0.52 -0.85 0.11 +vn -0.89 -0.45 0.10 +vn -0.89 -0.46 -0.01 +vn -0.98 -0.20 0.08 +vn -0.94 -0.18 0.29 +vn -0.85 -0.42 0.32 +vn 0.32 -0.56 0.77 +vn -0.50 -0.79 0.34 +vn -0.01 -0.94 0.35 +vn -0.01 -0.99 0.12 +vn 0.49 -0.86 0.12 +vn 0.50 -0.87 0.02 +vn 0.86 -0.52 0.01 +vn 0.85 -0.51 0.12 +vn 1.00 -0.04 -0.00 +vn 0.99 -0.04 0.10 +vn 0.88 0.47 -0.02 +vn 0.88 0.47 0.08 +vn 0.52 0.85 -0.04 +vn 0.52 0.85 0.07 +vn 0.01 1.00 -0.05 +vn 0.01 1.00 0.06 +vn -0.48 0.87 -0.05 +vn -0.49 0.87 0.05 +vn -0.85 0.53 -0.04 +vn -0.85 0.53 0.06 +vn -0.95 0.29 -0.04 +vn -0.95 0.30 0.07 +vn -0.81 0.52 0.27 +vn -0.91 0.31 0.28 +vn -0.43 0.79 0.44 +vn -0.46 0.85 0.27 +vn 0.01 0.96 0.27 +vn 0.49 0.82 0.29 +vn 0.83 0.46 0.30 +vn 0.95 -0.02 0.32 +vn 0.82 -0.47 0.33 +vn 0.47 -0.81 0.34 +vn -0.01 -0.09 -1.00 +vn 0.25 -0.35 -0.90 +vn -0.02 -0.08 -1.00 +vn -0.27 0.19 -0.94 +vn -0.25 0.35 0.90 +vn 0.01 0.09 1.00 +vn 0.02 0.08 1.00 +vn 0.27 -0.19 0.94 +vn 0.73 0.68 -0.01 +vn 0.27 0.33 0.91 +vn -0.00 0.08 1.00 +vn -0.27 -0.17 0.95 +vn 0.27 0.17 -0.95 +vn 0.00 -0.08 -1.00 +vn -0.27 -0.33 -0.91 +vn -0.69 0.72 -0.03 +vn -0.73 -0.68 0.01 +vn -0.98 -0.21 -0.02 +vn -0.00 -0.09 -1.00 +vn 0.00 0.09 1.00 +# 61 vertex normals + +vt 0.71 0.65 0.00 +vt 0.81 0.65 0.00 +vt 0.64 0.57 0.00 +vt 0.64 0.58 0.00 +vt 0.83 0.57 0.00 +vt 0.85 0.57 0.00 +vt 0.89 0.58 0.00 +vt 0.85 0.58 0.00 +vt 0.83 0.58 0.00 +vt 0.64 0.59 0.00 +vt 0.83 0.59 0.00 +vt 0.64 0.60 0.00 +vt 0.83 0.60 0.00 +vt 0.64 0.61 0.00 +vt 0.83 0.61 0.00 +vt 0.85 0.60 0.00 +vt 0.85 0.61 0.00 +vt 0.89 0.60 0.00 +vt 0.85 0.59 0.00 +vt 0.39 0.73 0.00 +vt 0.39 0.74 0.00 +vt 0.39 0.72 0.00 +vt 0.37 0.73 0.00 +vt 0.37 0.72 0.00 +vt 0.38 0.71 0.00 +vt 0.75 0.65 0.00 +vt 0.69 0.65 0.00 +vt 0.98 0.63 0.00 +vt 0.91 0.63 0.00 +vt 0.98 0.66 0.00 +vt 0.91 0.66 0.00 +vt 0.98 0.70 0.00 +vt 0.91 0.70 0.00 +vt 0.37 0.74 0.00 +vt 0.38 0.74 0.00 +# 35 texture coords + +g P_51_Mustang_Right_Rockets +f 80/38/120 81/38/120 82/39/120 +f 83/39/120 82/39/120 81/38/120 +f 84/40/121 85/41/122 86/42/123 +f 86/42/123 87/42/124 84/40/121 +f 88/40/125 84/40/121 87/42/124 +f 87/42/124 89/42/126 88/40/125 +f 89/42/126 87/42/124 90/43/127 +f 91/43/128 90/43/127 87/42/124 +f 90/43/127 91/43/128 92/44/129 +f 91/43/128 93/43/130 92/44/129 +f 93/43/130 94/45/131 92/44/129 +f 94/45/131 93/43/130 95/46/132 +f 95/46/132 96/46/133 94/45/131 +f 96/46/133 95/46/132 97/41/134 +f 97/41/134 98/41/135 96/46/133 +f 99/46/136 96/46/133 98/41/135 +f 98/41/135 100/47/137 99/46/136 +f 101/48/138 99/46/136 100/47/137 +f 100/47/137 102/47/139 101/48/138 +f 103/48/140 101/48/138 102/47/139 +f 87/42/124 86/42/123 91/43/128 +f 93/43/130 91/43/128 86/42/123 +f 86/42/123 95/46/132 93/43/130 +f 95/46/132 86/42/123 85/41/122 +f 85/41/122 97/41/134 95/46/132 +f 102/47/139 104/47/141 103/48/140 +f 105/48/142 103/48/140 104/47/141 +f 104/47/141 106/49/143 105/48/142 +f 107/50/144 105/48/142 106/49/143 +f 106/49/143 108/49/145 107/50/144 +f 109/50/146 107/50/144 108/49/145 +f 108/49/145 110/49/147 109/50/146 +f 111/50/148 109/50/146 110/49/147 +f 110/49/147 112/51/149 111/50/148 +f 89/52/150 111/50/148 112/51/149 +f 111/50/148 89/52/150 113/53/151 +f 90/54/152 113/53/151 89/52/150 +f 113/53/151 90/54/152 92/55/153 +f 114/53/154 113/53/151 92/55/153 +f 115/53/155 114/53/154 92/55/153 +f 114/53/154 115/53/155 109/50/146 +f 107/50/144 109/50/146 115/53/155 +f 115/53/155 116/56/156 107/50/144 +f 116/56/156 115/53/155 92/55/153 +f 105/48/142 107/50/144 116/56/156 +f 116/56/156 117/56/157 105/48/142 +f 103/48/140 105/48/142 117/56/157 +f 117/56/157 118/56/158 103/48/140 +f 101/48/138 103/48/140 118/56/158 +f 118/56/158 119/45/159 101/48/138 +f 99/46/136 101/48/138 119/45/159 +f 119/45/159 120/45/160 99/46/136 +f 96/46/133 99/46/136 120/45/160 +f 120/45/160 94/45/131 96/46/133 +f 94/45/131 120/45/160 92/44/129 +f 120/45/160 119/45/159 92/44/129 +f 119/45/159 118/56/158 92/44/129 +f 118/56/158 117/56/157 92/44/129 +f 117/56/157 116/56/156 92/44/129 +f 102/57/161 100/57/161 104/58/161 +f 100/57/161 97/59/161 104/58/161 +f 97/59/161 112/60/161 104/58/161 +f 84/61/161 112/60/161 97/59/161 +f 88/61/161 112/60/161 84/61/161 +f 98/59/161 97/59/161 100/57/161 +f 85/62/161 84/61/161 97/59/161 +f 121/39/162 122/63/161 123/39/162 +f 124/63/163 123/39/162 122/63/161 +f 124/63/163 122/63/161 80/64/164 +f 81/64/164 80/64/164 122/63/161 +f 125/39/165 126/39/165 127/63/166 +f 128/63/167 127/63/166 126/39/165 +f 127/63/166 128/63/167 83/64/168 +f 82/64/168 83/64/168 128/63/167 +f 121/65/169 125/66/169 122/67/169 +f 127/68/169 122/67/169 125/66/169 +f 122/67/169 127/68/169 81/69/169 +f 83/70/169 81/69/169 127/68/169 +f 129/39/170 130/39/170 131/63/171 +f 132/63/166 131/63/171 130/39/170 +f 131/63/171 132/63/166 133/64/172 +f 134/64/172 133/64/172 132/63/166 +f 135/65/120 129/66/120 136/67/120 +f 131/68/120 136/67/120 129/66/120 +f 136/67/120 131/68/120 137/69/120 +f 133/70/120 137/69/120 131/68/120 +f 137/64/173 138/64/173 136/63/174 +f 139/63/161 136/63/174 138/64/173 +f 139/63/161 140/39/175 136/63/174 +f 135/39/175 136/63/174 140/39/175 +f 138/65/176 134/66/176 139/67/176 +f 132/68/176 139/67/176 134/66/176 +f 139/67/176 132/68/176 140/69/176 +f 130/70/176 140/69/176 132/68/176 +f 80/65/177 82/66/177 124/67/177 +f 128/68/177 124/67/177 82/66/177 +f 124/67/177 128/68/177 123/69/177 +f 126/70/177 123/69/177 128/68/177 +f 121/38/176 123/38/176 125/39/176 +f 126/39/176 125/39/176 123/38/176 +f 138/38/177 137/38/177 134/39/177 +f 133/39/177 134/39/177 137/38/177 +f 135/38/169 140/38/169 129/39/169 +f 130/39/169 129/39/169 140/38/169 +f 109/50/146 111/50/148 114/53/154 +f 113/53/151 114/53/154 111/50/148 +f 112/40/178 88/40/125 89/42/126 +f 110/60/161 108/71/161 112/60/161 +f 112/60/161 108/71/161 104/58/161 +f 104/58/161 108/71/161 106/72/161 +f 141/38/120 142/38/120 143/39/120 +f 144/39/120 143/39/120 142/38/120 +f 145/40/121 146/41/122 147/42/123 +f 147/42/123 148/42/124 145/40/121 +f 149/40/125 145/40/121 148/42/124 +f 148/42/124 150/42/126 149/40/125 +f 150/42/126 148/42/124 151/43/127 +f 152/43/128 151/43/127 148/42/124 +f 151/43/127 152/43/128 153/44/129 +f 152/43/128 154/43/130 153/44/129 +f 154/43/130 155/45/131 153/44/129 +f 155/45/131 154/43/130 156/46/132 +f 156/46/132 157/46/133 155/45/131 +f 157/46/133 156/46/132 158/41/134 +f 158/41/134 159/41/135 157/46/133 +f 160/46/136 157/46/133 159/41/135 +f 159/41/135 161/47/137 160/46/136 +f 162/48/138 160/46/136 161/47/137 +f 161/47/137 163/47/139 162/48/138 +f 164/48/140 162/48/138 163/47/139 +f 148/42/124 147/42/123 152/43/128 +f 154/43/130 152/43/128 147/42/123 +f 147/42/123 156/46/132 154/43/130 +f 156/46/132 147/42/123 146/41/122 +f 146/41/122 158/41/134 156/46/132 +f 163/47/139 165/47/141 164/48/140 +f 166/48/142 164/48/140 165/47/141 +f 165/47/141 167/49/143 166/48/142 +f 168/50/144 166/48/142 167/49/143 +f 167/49/143 169/49/145 168/50/144 +f 170/50/146 168/50/144 169/49/145 +f 169/49/145 171/49/147 170/50/146 +f 172/50/148 170/50/146 171/49/147 +f 171/49/147 173/51/149 172/50/148 +f 150/52/150 172/50/148 173/51/149 +f 172/50/148 150/52/150 174/53/151 +f 151/54/152 174/53/151 150/52/150 +f 174/53/151 151/54/152 153/55/153 +f 175/53/154 174/53/151 153/55/153 +f 176/53/155 175/53/154 153/55/153 +f 175/53/154 176/53/155 170/50/146 +f 168/50/144 170/50/146 176/53/155 +f 176/53/155 177/56/156 168/50/144 +f 177/56/156 176/53/155 153/55/153 +f 166/48/142 168/50/144 177/56/156 +f 177/56/156 178/56/157 166/48/142 +f 164/48/140 166/48/142 178/56/157 +f 178/56/157 179/56/158 164/48/140 +f 162/48/138 164/48/140 179/56/158 +f 179/56/158 180/45/159 162/48/138 +f 160/46/136 162/48/138 180/45/159 +f 180/45/159 181/45/160 160/46/136 +f 157/46/133 160/46/136 181/45/160 +f 181/45/160 155/45/131 157/46/133 +f 155/45/131 181/45/160 153/44/129 +f 181/45/160 180/45/159 153/44/129 +f 180/45/159 179/56/158 153/44/129 +f 179/56/158 178/56/157 153/44/129 +f 178/56/157 177/56/156 153/44/129 +f 163/57/161 161/57/161 165/58/161 +f 161/57/161 158/59/161 165/58/161 +f 158/59/161 173/60/161 165/58/161 +f 145/61/161 173/60/161 158/59/161 +f 149/61/161 173/60/161 145/61/161 +f 159/59/161 158/59/161 161/57/161 +f 146/62/161 145/61/161 158/59/161 +f 182/39/162 183/63/161 184/39/162 +f 185/63/163 184/39/162 183/63/161 +f 185/63/163 183/63/161 141/64/164 +f 142/64/164 141/64/164 183/63/161 +f 186/39/165 187/39/165 188/63/166 +f 189/63/167 188/63/166 187/39/165 +f 188/63/166 189/63/167 144/64/168 +f 143/64/168 144/64/168 189/63/167 +f 182/65/169 186/66/169 183/67/169 +f 188/68/169 183/67/169 186/66/169 +f 183/67/169 188/68/169 142/69/169 +f 144/70/169 142/69/169 188/68/169 +f 190/39/170 191/39/170 192/63/171 +f 193/63/166 192/63/171 191/39/170 +f 192/63/171 193/63/166 194/64/172 +f 195/64/172 194/64/172 193/63/166 +f 196/65/120 190/66/120 197/67/120 +f 192/68/120 197/67/120 190/66/120 +f 197/67/120 192/68/120 198/69/120 +f 194/70/120 198/69/120 192/68/120 +f 198/64/173 199/64/173 197/63/174 +f 200/63/179 197/63/174 199/64/173 +f 200/63/179 201/39/175 197/63/174 +f 196/39/175 197/63/174 201/39/175 +f 199/65/176 195/66/176 200/67/176 +f 193/68/176 200/67/176 195/66/176 +f 200/67/176 193/68/176 201/69/176 +f 191/70/176 201/69/176 193/68/176 +f 141/65/177 143/66/177 185/67/177 +f 189/68/177 185/67/177 143/66/177 +f 185/67/177 189/68/177 184/69/177 +f 187/70/177 184/69/177 189/68/177 +f 182/38/176 184/38/176 186/39/176 +f 187/39/176 186/39/176 184/38/176 +f 199/38/177 198/38/177 195/39/177 +f 194/39/177 195/39/177 198/38/177 +f 196/38/169 201/38/169 190/39/169 +f 191/39/169 190/39/169 201/38/169 +f 170/50/146 172/50/148 175/53/154 +f 174/53/151 175/53/154 172/50/148 +f 173/40/178 149/40/125 150/42/126 +f 171/60/161 169/71/161 173/60/161 +f 173/60/161 169/71/161 165/58/161 +f 165/58/161 169/71/161 167/72/161 +f 202/38/120 203/38/120 204/39/120 +f 205/39/120 204/39/120 203/38/120 +f 206/40/121 207/41/122 208/42/123 +f 208/42/123 209/42/124 206/40/121 +f 210/40/125 206/40/121 209/42/124 +f 209/42/124 211/42/126 210/40/125 +f 211/42/126 209/42/124 212/43/127 +f 213/43/128 212/43/127 209/42/124 +f 212/43/127 213/43/128 214/44/129 +f 213/43/128 215/43/130 214/44/129 +f 215/43/130 216/45/131 214/44/129 +f 216/45/131 215/43/130 217/46/132 +f 217/46/132 218/46/133 216/45/131 +f 218/46/133 217/46/132 219/41/134 +f 219/41/134 220/41/135 218/46/133 +f 221/46/136 218/46/133 220/41/135 +f 220/41/135 222/47/137 221/46/136 +f 223/48/138 221/46/136 222/47/137 +f 222/47/137 224/47/139 223/48/138 +f 225/48/140 223/48/138 224/47/139 +f 209/42/124 208/42/123 213/43/128 +f 215/43/130 213/43/128 208/42/123 +f 208/42/123 217/46/132 215/43/130 +f 217/46/132 208/42/123 207/41/122 +f 207/41/122 219/41/134 217/46/132 +f 224/47/139 226/47/141 225/48/140 +f 227/48/142 225/48/140 226/47/141 +f 226/47/141 228/49/143 227/48/142 +f 229/50/144 227/48/142 228/49/143 +f 228/49/143 230/49/145 229/50/144 +f 231/50/146 229/50/144 230/49/145 +f 230/49/145 232/49/147 231/50/146 +f 233/50/148 231/50/146 232/49/147 +f 232/49/147 234/51/149 233/50/148 +f 211/52/150 233/50/148 234/51/149 +f 233/50/148 211/52/150 235/53/151 +f 212/54/152 235/53/151 211/52/150 +f 235/53/151 212/54/152 214/55/153 +f 236/53/154 235/53/151 214/55/153 +f 237/53/155 236/53/154 214/55/153 +f 236/53/154 237/53/155 231/50/146 +f 229/50/144 231/50/146 237/53/155 +f 237/53/155 238/56/156 229/50/144 +f 238/56/156 237/53/155 214/55/153 +f 227/48/142 229/50/144 238/56/156 +f 238/56/156 239/56/157 227/48/142 +f 225/48/140 227/48/142 239/56/157 +f 239/56/157 240/56/158 225/48/140 +f 223/48/138 225/48/140 240/56/158 +f 240/56/158 241/45/159 223/48/138 +f 221/46/136 223/48/138 241/45/159 +f 241/45/159 242/45/160 221/46/136 +f 218/46/133 221/46/136 242/45/160 +f 242/45/160 216/45/131 218/46/133 +f 216/45/131 242/45/160 214/44/129 +f 242/45/160 241/45/159 214/44/129 +f 241/45/159 240/56/158 214/44/129 +f 240/56/158 239/56/157 214/44/129 +f 239/56/157 238/56/156 214/44/129 +f 224/57/161 222/57/161 226/58/161 +f 222/57/161 219/59/161 226/58/161 +f 219/59/161 234/60/161 226/58/161 +f 206/61/161 234/60/161 219/59/161 +f 210/61/161 234/60/161 206/61/161 +f 220/59/161 219/59/161 222/57/161 +f 207/62/161 206/61/161 219/59/161 +f 243/39/162 244/63/161 245/39/162 +f 246/63/163 245/39/162 244/63/161 +f 246/63/163 244/63/161 202/64/164 +f 203/64/164 202/64/164 244/63/161 +f 247/39/165 248/39/165 249/63/166 +f 250/63/167 249/63/166 248/39/165 +f 249/63/166 250/63/167 205/64/168 +f 204/64/168 205/64/168 250/63/167 +f 243/65/169 247/66/169 244/67/169 +f 249/68/169 244/67/169 247/66/169 +f 244/67/169 249/68/169 203/69/169 +f 205/70/169 203/69/169 249/68/169 +f 251/39/170 252/39/170 253/63/171 +f 254/63/180 253/63/171 252/39/170 +f 253/63/171 254/63/180 255/64/172 +f 256/64/172 255/64/172 254/63/180 +f 257/65/120 251/66/120 258/67/120 +f 253/68/120 258/67/120 251/66/120 +f 258/67/120 253/68/120 259/69/120 +f 255/70/120 259/69/120 253/68/120 +f 259/64/173 260/64/173 258/63/174 +f 261/63/161 258/63/174 260/64/173 +f 261/63/161 262/39/175 258/63/174 +f 257/39/175 258/63/174 262/39/175 +f 260/65/176 256/66/176 261/67/176 +f 254/68/176 261/67/176 256/66/176 +f 261/67/176 254/68/176 262/69/176 +f 252/70/176 262/69/176 254/68/176 +f 202/65/177 204/66/177 246/67/177 +f 250/68/177 246/67/177 204/66/177 +f 246/67/177 250/68/177 245/69/177 +f 248/70/177 245/69/177 250/68/177 +f 243/38/176 245/38/176 247/39/176 +f 248/39/176 247/39/176 245/38/176 +f 260/38/177 259/38/177 256/39/177 +f 255/39/177 256/39/177 259/38/177 +f 257/38/169 262/38/169 251/39/169 +f 252/39/169 251/39/169 262/38/169 +f 231/50/146 233/50/148 236/53/154 +f 235/53/151 236/53/154 233/50/148 +f 234/40/178 210/40/125 211/42/126 +f 232/60/161 230/71/161 234/60/161 +f 234/60/161 230/71/161 226/58/161 +f 226/58/161 230/71/161 228/72/161 +# 330 faces + +# +# object P_51_Mustang_Right_Wing +# + +v -48.14 -0.16 8.05 +v -48.99 -0.03 6.01 +v -48.12 0.14 8.01 +v -29.31 0.19 6.44 +v -37.50 0.25 7.12 +v -30.21 0.47 8.72 +v -37.42 0.46 8.93 +v -44.57 0.16 7.71 +v -44.63 0.35 8.79 +v -47.59 0.24 8.96 +v -44.79 0.51 12.04 +v -47.99 0.25 12.03 +v -45.36 0.48 14.13 +v -48.50 0.36 13.97 +v -48.43 0.22 15.21 +v -49.84 0.07 14.16 +v -49.74 -0.04 15.39 +v -50.25 -0.08 14.12 +v -50.04 -0.09 15.40 +v -49.58 -0.10 16.12 +v -48.28 -0.12 16.74 +v -45.18 0.20 15.46 +v -29.52 0.68 12.85 +v -45.01 -0.15 17.06 +v -37.84 0.31 16.08 +v -37.82 -0.24 17.66 +v -30.95 -0.31 18.28 +v -29.88 0.43 16.64 +v -30.50 0.73 14.92 +v -37.93 0.62 14.50 +v -37.87 0.66 12.48 +v -37.95 -1.08 12.58 +v -38.02 -1.05 14.59 +v -44.85 -0.90 12.10 +v -29.86 -1.33 15.03 +v -37.90 -0.94 16.16 +v -29.38 -1.15 16.73 +v -44.96 -0.79 15.49 +v -48.45 -0.33 15.36 +v -45.08 -0.88 14.18 +v -48.53 -0.34 14.14 +v -48.02 -0.34 12.18 +v -49.75 -0.18 12.22 +v -49.14 -0.12 8.71 +v -47.61 -0.23 9.09 +v -44.67 -0.62 8.83 +v -44.59 -0.38 7.72 +v -37.48 -0.85 9.01 +v -37.54 -0.59 7.18 +v -30.23 -1.03 8.80 +v -29.34 -0.65 6.49 +v -29.61 -1.28 12.96 +v -49.23 0.13 8.56 +v -49.74 0.14 12.03 +v -50.13 -0.08 12.02 +v -49.58 -0.07 8.63 +v -49.75 -0.17 15.42 +v -49.85 -0.23 14.35 +v -29.74 -1.25 16.26 +v -29.78 -2.23 16.37 +v -29.67 -1.06 11.16 +v -29.74 -2.36 12.28 +v -29.92 -2.36 12.29 +v -29.96 -2.23 16.38 +v -29.85 -1.06 11.16 +v -29.92 -1.24 16.26 +v -32.53 -1.18 16.28 +v -32.58 -2.21 16.40 +v -32.35 -1.18 16.27 +v -32.40 -2.21 16.39 +v -32.54 -2.34 12.31 +v -32.36 -2.34 12.30 +v -32.46 -0.98 11.17 +v -32.28 -0.98 11.17 +v -35.27 -1.05 16.29 +v -35.32 -2.19 16.42 +v -35.09 -1.06 16.29 +v -35.15 -2.19 16.42 +v -35.28 -2.32 12.33 +v -35.11 -2.32 12.33 +v -35.21 -0.94 11.19 +v -35.03 -0.95 11.19 +v -29.68 -0.25 3.04 +v -21.55 0.05 5.47 +v -22.30 -1.51 12.76 +v -22.41 -1.49 15.29 +v -22.62 -1.36 17.25 +v -23.33 -0.39 18.94 +v -19.50 -0.44 19.26 +v -19.00 -1.50 17.12 +v -14.13 -0.49 20.28 +v -13.50 -1.56 17.59 +v -14.82 -1.75 15.41 +v -18.80 -1.58 15.14 +v -18.58 -1.57 12.58 +v -22.41 -1.16 8.70 +v -21.59 -0.77 5.53 +v -18.71 -1.36 9.03 +v -18.35 -1.00 6.58 +v -14.07 -1.37 9.24 +v -12.73 -0.99 6.36 +v -18.23 -0.74 5.10 +v -12.47 -0.77 4.38 +v -12.44 -0.05 4.34 +v -18.19 -0.02 5.06 +v -12.67 0.19 6.29 +v -18.29 0.22 6.52 +v -14.04 0.46 9.14 +v -18.63 0.56 8.92 +v -13.44 0.66 12.23 +v -18.47 0.74 12.46 +v -22.34 0.49 8.60 +v -22.20 0.75 12.64 +v -22.31 0.72 15.17 +v -22.53 0.53 17.14 +v -18.91 0.57 17.52 +v -13.40 0.59 18.05 +v -14.35 0.80 15.32 +v -18.69 0.73 15.02 +v -18.32 -0.76 20.39 +v -18.70 -0.53 20.37 +v -18.30 -0.83 18.46 +v -18.68 -0.59 18.44 +v -18.68 -0.07 20.33 +v -18.66 -0.13 18.40 +v -18.28 0.16 20.30 +v -18.26 0.10 18.37 +v -17.89 -0.08 20.32 +v -17.87 -0.14 18.39 +v -17.92 -0.54 20.36 +v -17.90 -0.60 18.43 +v -13.54 -1.60 12.35 +v -19.63 -0.07 20.24 +v -20.01 0.17 20.22 +v -19.65 -0.53 20.28 +v -20.44 -0.52 20.29 +v -20.05 -0.75 20.31 +v -20.41 -0.06 20.25 +v -21.96 -0.75 20.15 +v -22.34 -0.51 20.13 +v -21.94 -0.81 18.22 +v -22.32 -0.57 18.21 +v -22.32 -0.05 20.09 +v -22.30 -0.11 18.16 +v -21.92 0.18 20.07 +v -21.90 0.11 18.14 +v -21.53 -0.06 20.08 +v -21.51 -0.12 18.16 +v -21.56 -0.52 20.13 +v -21.54 -0.58 18.20 +v -26.32 -1.30 15.42 +v -26.39 -2.57 15.66 +v -26.01 -1.30 15.43 +v -26.08 -2.57 15.66 +v -26.38 -2.72 15.16 +v -26.07 -2.72 15.16 +v -25.97 -2.76 11.48 +v -26.29 -2.76 11.48 +v -26.19 -1.32 10.34 +v -25.88 -1.32 10.34 +v -20.03 -0.82 18.38 +v -20.42 -0.58 18.36 +v -20.39 -0.12 18.32 +v -19.99 0.11 18.29 +v -19.61 -0.13 18.31 +v -19.63 -0.59 18.35 +v -24.91 -3.09 9.88 +v -26.21 -2.73 9.87 +v -24.99 -3.07 16.55 +v -26.29 -2.70 16.54 +v -27.54 -3.07 9.90 +v -27.63 -3.05 16.58 +v -28.55 -4.05 9.98 +v -28.64 -4.02 16.65 +v -28.97 -5.38 10.07 +v -29.05 -5.36 16.74 +v -28.68 -6.73 10.15 +v -28.76 -6.70 16.82 +v -27.76 -7.71 10.20 +v -27.85 -7.69 16.87 +v -26.46 -8.08 10.21 +v -26.54 -8.06 16.88 +v -25.13 -7.74 10.18 +v -25.21 -7.71 16.85 +v -24.11 -6.76 10.11 +v -24.20 -6.73 16.78 +v -23.70 -5.42 10.02 +v -23.78 -5.40 16.69 +v -23.99 -4.08 9.93 +v -24.07 -4.06 16.60 +v -28.86 -5.35 18.00 +v -28.59 -6.59 18.07 +v -27.75 -7.50 18.12 +v -26.55 -7.84 18.13 +v -25.32 -7.52 18.10 +v -24.39 -6.62 18.03 +v -24.00 -5.39 17.95 +v -24.27 -4.15 17.87 +v -25.12 -3.24 17.82 +v -26.32 -2.90 17.81 +v -28.10 -6.30 19.61 +v -27.46 -6.99 19.65 +v -27.36 -5.86 20.77 +v -27.47 -5.35 20.74 +v -28.31 -5.35 19.56 +v -27.55 -3.23 17.85 +v -28.48 -4.12 17.91 +v -28.01 -4.41 19.49 +v -27.31 -4.84 20.70 +v -26.47 -5.36 21.07 +v -27.01 -6.24 20.79 +v -26.54 -7.25 19.66 +v -25.60 -7.01 19.63 +v -24.89 -6.32 19.58 +v -24.60 -5.38 19.52 +v -24.80 -4.44 19.46 +v -25.45 -3.74 19.42 +v -26.36 -3.48 19.42 +v -27.30 -3.73 19.44 +v -26.93 -4.47 20.68 +v -26.42 -4.34 20.66 +v -25.92 -4.48 20.67 +v -25.57 -4.86 20.69 +v -25.46 -5.37 20.72 +v -25.62 -5.88 20.75 +v -26.01 -6.25 20.78 +v -26.52 -6.38 20.79 +v -27.02 -4.02 6.72 +v -26.22 -3.82 6.70 +v -25.44 -4.04 6.71 +v -24.89 -4.63 6.74 +v -24.72 -5.43 6.79 +v -24.97 -6.23 6.84 +v -25.57 -6.81 6.89 +v -26.37 -7.02 6.91 +v -27.15 -6.80 6.90 +v -27.70 -6.21 6.87 +v -26.53 -4.91 4.15 +v -26.23 -4.84 4.15 +v -27.87 -5.41 6.82 +v -27.62 -4.61 6.77 +v -26.75 -5.13 4.17 +v -26.26 -5.43 3.93 +v -25.95 -4.92 4.15 +v -25.74 -5.14 4.16 +v -25.68 -5.43 4.18 +v -25.77 -5.73 4.20 +v -25.99 -5.94 4.21 +v -26.29 -6.02 4.22 +v -26.58 -5.94 4.22 +v -26.78 -5.72 4.21 +v -26.85 -5.42 4.19 +# 252 vertices + +vn 0.92 -0.09 -0.39 +vn -0.00 0.99 -0.12 +vn -0.01 0.99 -0.11 +vn -0.00 1.00 -0.09 +vn -0.01 1.00 -0.09 +vn -0.03 0.99 -0.17 +vn -0.03 0.99 -0.12 +vn -0.04 1.00 -0.06 +vn -0.04 1.00 -0.02 +vn -0.06 1.00 -0.03 +vn -0.03 1.00 0.09 +vn -0.11 0.99 0.03 +vn -0.09 0.98 0.16 +vn -0.28 0.96 0.07 +vn -0.18 0.98 0.09 +vn -0.34 0.94 0.05 +vn -0.16 0.99 0.06 +vn -0.14 0.98 0.16 +vn -0.04 0.97 0.22 +vn -0.02 0.98 0.21 +vn -0.01 1.00 -0.04 +vn -0.02 0.97 0.22 +vn -0.02 0.96 0.26 +vn -0.02 0.94 0.34 +vn -0.04 0.92 0.38 +vn -0.03 0.96 0.28 +vn -0.02 1.00 0.08 +vn -0.02 0.99 0.10 +vn -0.01 1.00 -0.02 +vn -0.03 -1.00 -0.03 +vn -0.03 -1.00 0.04 +vn -0.09 -0.99 -0.04 +vn -0.03 -1.00 0.05 +vn -0.04 -0.97 0.25 +vn -0.05 -0.90 0.43 +vn -0.05 -0.91 0.42 +vn -0.05 -0.93 0.38 +vn -0.07 -0.97 0.21 +vn -0.11 -0.97 0.22 +vn -0.13 -0.99 0.07 +vn -0.09 -1.00 0.03 +vn -0.12 -0.99 -0.01 +vn -0.13 -0.99 -0.04 +vn -0.09 -1.00 -0.03 +vn -0.06 -1.00 -0.04 +vn -0.11 -0.99 -0.04 +vn -0.08 -1.00 -0.04 +vn -0.07 -0.99 -0.14 +vn -0.05 -0.98 -0.21 +vn -0.03 -0.99 -0.10 +vn -0.03 -0.99 -0.14 +vn -0.02 -0.99 -0.11 +vn -0.02 -0.99 -0.17 +vn -0.02 -1.00 -0.04 +vn -0.28 0.96 -0.07 +vn -0.29 0.96 -0.04 +vn -0.47 0.88 -0.05 +vn -0.51 0.86 -0.09 +vn -0.15 0.99 -0.08 +vn -0.04 1.00 -0.08 +vn -0.09 -0.98 0.16 +vn -0.13 -0.98 0.15 +vn -0.10 -0.98 0.15 +vn -0.24 -0.96 0.12 +vn -0.28 -0.96 0.08 +vn -0.33 -0.94 0.00 +vn -0.37 -0.93 0.04 +vn -0.26 -0.97 -0.03 +vn -0.11 -0.99 0.06 +vn -0.09 -1.00 0.01 +vn 1.00 -0.05 0.01 +vn -1.00 0.05 -0.01 +vn 0.02 0.12 0.99 +vn -0.01 -1.00 0.03 +vn -0.02 -0.64 -0.77 +vn 0.02 0.11 0.99 +vn -0.08 -0.05 -1.00 +vn -0.08 0.09 -0.99 +vn 1.00 0.02 -0.07 +vn -0.08 -0.06 -0.99 +vn -0.08 -0.08 -0.99 +vn -0.08 0.03 -1.00 +vn -0.10 -0.12 -0.99 +vn 0.93 0.01 0.36 +vn 0.93 -0.02 0.37 +vn 0.99 -0.05 -0.15 +vn 0.99 -0.02 -0.17 +vn 0.87 0.29 0.40 +vn 0.99 -0.04 0.12 +vn 0.92 0.27 -0.29 +vn 0.75 0.27 0.61 +vn -0.02 -0.66 -0.75 +vn 0.99 -0.05 -0.10 +vn -0.02 -1.00 -0.06 +vn -0.03 -0.99 -0.11 +vn -0.04 -0.99 -0.11 +vn -0.01 0.99 -0.13 +vn -0.01 1.00 -0.08 +vn -0.92 0.09 0.39 +vn 0.08 0.12 0.99 +vn 0.08 0.06 0.99 +vn -0.12 -0.06 -0.99 +vn -0.03 -1.00 -0.04 +vn -0.03 -1.00 0.03 +vn -0.02 -1.00 0.04 +vn -0.04 -0.96 0.29 +vn -0.04 -0.96 0.28 +vn -0.06 -0.88 0.47 +vn -0.06 -0.90 0.44 +vn -0.04 -0.97 0.23 +vn -0.05 -0.92 0.38 +vn -0.03 -0.96 0.26 +vn -0.02 -1.00 0.03 +vn -0.03 -1.00 0.01 +vn -0.02 -0.99 -0.16 +vn -0.02 -0.99 -0.10 +vn -0.01 -0.99 -0.16 +vn -0.00 -0.99 -0.11 +vn -0.01 -0.99 -0.13 +vn -0.01 -0.99 -0.17 +vn -0.01 0.99 -0.12 +vn -0.00 0.99 -0.16 +vn 0.00 0.99 -0.14 +vn 0.02 1.00 -0.09 +vn 0.01 1.00 -0.10 +vn 0.02 1.00 -0.05 +vn 0.00 1.00 -0.03 +vn -0.00 1.00 -0.10 +vn -0.01 1.00 -0.03 +vn -0.00 1.00 -0.03 +vn -0.01 1.00 0.05 +vn -0.00 1.00 0.08 +vn -0.02 0.96 0.29 +vn -0.03 0.96 0.27 +vn -0.03 0.90 0.44 +vn -0.07 0.88 0.47 +vn -0.04 0.96 0.28 +vn -0.05 0.90 0.43 +vn -0.01 1.00 0.03 +vn -0.88 -0.48 0.01 +vn -0.89 -0.46 0.01 +vn -0.86 0.51 -0.03 +vn -0.84 0.54 -0.03 +vn 0.01 1.00 -0.03 +vn 0.02 1.00 -0.03 +vn 0.89 0.46 -0.01 +vn 0.88 0.48 -0.01 +vn 0.84 -0.54 0.03 +vn 0.86 -0.51 0.03 +vn -0.00 0.99 -0.14 +vn -0.00 0.99 -0.13 +vn -0.00 1.00 -0.08 +vn -0.01 -1.00 -0.06 +vn 0.01 0.09 1.00 +vn -0.00 0.18 0.98 +vn -0.01 -0.96 0.29 +vn -0.01 -1.00 0.01 +vn -0.00 -0.62 -0.78 +vn -0.02 0.92 0.40 +vn -0.05 -0.90 0.44 +vn 1.00 -0.05 0.03 +vn -1.00 0.05 -0.03 +vn 0.99 -0.04 0.13 +vn 0.98 -0.05 -0.17 +vn 0.98 -0.02 -0.19 +vn 0.91 0.01 0.42 +vn 0.90 -0.02 0.43 +vn 0.91 -0.15 0.37 +vn 0.96 -0.03 0.29 +vn 0.94 0.03 -0.33 +vn 0.85 -0.17 -0.50 +vn 0.96 -0.10 0.27 +vn -0.75 -0.27 -0.61 +vn -0.93 0.02 -0.37 +vn -0.93 -0.01 -0.36 +vn -0.99 0.02 0.15 +vn -0.99 0.05 0.16 +vn -0.99 0.04 -0.12 +vn -0.87 -0.29 -0.40 +vn -0.92 -0.27 0.29 +vn 0.52 0.85 0.00 +vn 0.01 1.00 -0.00 +vn -0.48 0.88 -0.01 +vn -0.50 0.87 -0.01 +vn -0.85 0.53 -0.01 +vn -0.86 0.52 -0.01 +vn -1.00 0.03 -0.01 +vn -0.89 -0.46 -0.01 +vn -0.88 -0.47 -0.01 +vn -0.52 -0.85 -0.00 +vn -0.01 -1.00 0.00 +vn 0.50 -0.87 0.01 +vn 0.48 -0.88 0.01 +vn 0.86 -0.52 0.01 +vn 0.85 -0.53 0.01 +vn 1.00 -0.03 0.01 +vn 0.88 0.47 0.01 +vn 0.89 0.46 0.01 +vn -0.99 0.06 0.15 +vn -0.88 -0.44 0.16 +vn -0.97 0.06 0.24 +vn -0.86 -0.44 0.25 +vn -0.52 -0.84 0.17 +vn -0.51 -0.82 0.26 +vn -0.01 -0.99 0.17 +vn -0.01 -0.96 0.26 +vn 0.49 -0.85 0.17 +vn 0.48 -0.84 0.26 +vn 0.85 -0.50 0.17 +vn 0.83 -0.50 0.26 +vn 0.98 -0.02 0.17 +vn 0.96 -0.03 0.26 +vn 0.87 0.47 0.17 +vn 0.85 0.46 0.26 +vn 0.51 0.84 0.17 +vn 0.50 0.83 0.26 +vn 0.02 0.99 0.16 +vn 0.01 0.97 0.25 +vn -0.79 -0.39 0.47 +vn -0.47 -0.74 0.48 +vn -0.55 -0.24 0.80 +vn -0.62 0.08 0.78 +vn -0.89 0.07 0.45 +vn -0.47 0.87 0.15 +vn -0.47 0.85 0.24 +vn -0.83 0.54 0.15 +vn -0.82 0.52 0.23 +vn -0.75 0.49 0.44 +vn -0.53 0.37 0.76 +vn 0.01 0.06 1.00 +vn -0.32 -0.49 0.81 +vn -0.01 -0.88 0.48 +vn 0.45 -0.76 0.47 +vn 0.76 -0.44 0.47 +vn 0.89 -0.01 0.46 +vn 0.78 0.43 0.46 +vn 0.45 0.76 0.46 +vn 0.01 0.89 0.45 +vn -0.43 0.79 0.44 +vn -0.30 0.58 0.76 +vn 0.01 0.65 0.76 +vn 0.32 0.56 0.76 +vn 0.55 0.33 0.77 +vn 0.63 0.02 0.78 +vn 0.54 -0.29 0.79 +vn 0.32 -0.51 0.80 +vn 0.00 -0.59 0.81 +vn -0.48 0.82 -0.32 +vn 0.01 0.95 -0.33 +vn -0.47 0.81 -0.34 +vn 0.01 0.94 -0.35 +vn 0.50 0.80 -0.32 +vn 0.50 0.80 -0.34 +vn 0.85 0.42 -0.31 +vn 0.84 0.42 -0.33 +vn 0.95 -0.07 -0.30 +vn 0.94 -0.06 -0.32 +vn 0.80 -0.52 -0.29 +vn 0.80 -0.51 -0.31 +vn 0.45 -0.84 -0.30 +vn 0.45 -0.83 -0.32 +vn -0.02 -0.95 -0.31 +vn -0.01 -0.95 -0.33 +vn -0.49 -0.81 -0.32 +vn -0.48 -0.81 -0.34 +vn -0.83 -0.46 -0.32 +vn -0.83 -0.45 -0.34 +vn -0.38 0.63 -0.68 +vn 0.00 0.73 -0.69 +vn -0.95 0.01 -0.32 +vn -0.94 0.02 -0.34 +vn -0.82 0.47 -0.32 +vn -0.81 0.48 -0.34 +vn -0.65 0.36 -0.67 +vn -0.01 -0.05 -1.00 +vn 0.39 0.61 -0.68 +vn 0.67 0.31 -0.67 +vn 0.75 -0.07 -0.65 +vn 0.64 -0.43 -0.64 +vn 0.36 -0.68 -0.63 +vn -0.01 -0.77 -0.64 +vn -0.39 -0.66 -0.64 +vn -0.66 -0.38 -0.65 +vn -0.75 -0.00 -0.66 +# 284 vertex normals + +vt 0.50 0.03 0.00 +vt 0.49 0.03 0.00 +vt 0.71 0.21 0.00 +vt 0.82 0.22 0.00 +vt 0.73 0.24 0.00 +vt 0.82 0.24 0.00 +vt 0.92 0.23 0.00 +vt 0.92 0.25 0.00 +vt 0.96 0.24 0.00 +vt 0.92 0.29 0.00 +vt 0.96 0.29 0.00 +vt 0.93 0.32 0.00 +vt 0.97 0.32 0.00 +vt 0.97 0.34 0.00 +vt 0.99 0.32 0.00 +vt 0.99 0.34 0.00 +vt 0.98 0.35 0.00 +vt 0.97 0.37 0.00 +vt 0.92 0.35 0.00 +vt 0.72 0.31 0.00 +vt 0.92 0.37 0.00 +vt 0.83 0.36 0.00 +vt 0.83 0.38 0.00 +vt 0.73 0.40 0.00 +vt 0.72 0.37 0.00 +vt 0.73 0.34 0.00 +vt 0.83 0.33 0.00 +vt 0.83 0.30 0.00 +vt 0.12 0.42 0.00 +vt 0.14 0.43 0.00 +vt 0.10 0.50 0.00 +vt 0.16 0.34 0.00 +vt 0.16 0.43 0.00 +vt 0.19 0.34 0.00 +vt 0.20 0.36 0.00 +vt 0.18 0.43 0.00 +vt 0.16 0.51 0.00 +vt 0.14 0.50 0.00 +vt 0.15 0.54 0.00 +vt 0.13 0.54 0.00 +vt 0.12 0.50 0.00 +vt 0.12 0.54 0.00 +vt 0.09 0.53 0.00 +vt 0.09 0.55 0.00 +vt 0.05 0.54 0.00 +vt 0.05 0.52 0.00 +vt 0.04 0.52 0.00 +vt 0.06 0.49 0.00 +vt 0.01 0.53 0.00 +vt 0.04 0.49 0.00 +vt 0.07 0.41 0.00 +vt 0.05 0.41 0.00 +vt 0.08 0.33 0.00 +vt 0.05 0.32 0.00 +vt 0.14 0.33 0.00 +vt 0.98 0.23 0.00 +vt 0.99 0.29 0.00 +vt 0.98 0.19 0.00 +vt 0.96 0.23 0.00 +vt 0.14 0.56 0.00 +vt 0.13 0.56 0.00 +vt 0.11 0.56 0.00 +vt 0.12 0.55 0.00 +vt 0.04 0.54 0.00 +vt 0.77 0.13 0.00 +vt 0.77 0.11 0.00 +vt 0.87 0.13 0.00 +vt 0.85 0.11 0.00 +vt 0.01 0.74 0.00 +vt 0.52 0.02 0.00 +vt 0.65 0.02 0.00 +vt 0.52 0.01 0.00 +vt 0.65 0.01 0.00 +vt 0.03 0.73 0.00 +vt 0.04 0.73 0.00 +vt 0.56 0.01 0.00 +vt 0.49 0.01 0.00 +vt 0.47 0.01 0.00 +vt 0.56 0.02 0.00 +vt 0.19 0.51 0.00 +vt 0.20 0.49 0.00 +vt 0.22 0.51 0.00 +vt 0.21 0.49 0.00 +vt 0.20 0.55 0.00 +vt 0.23 0.54 0.00 +vt 0.24 0.56 0.00 +vt 0.20 0.56 0.00 +vt 0.20 0.58 0.00 +vt 0.23 0.57 0.00 +vt 0.22 0.59 0.00 +vt 0.51 0.02 0.00 +vt 0.51 0.03 0.00 +vt 0.48 0.02 0.00 +vt 0.01 0.32 0.00 +vt 0.72 0.15 0.00 +vt 0.96 0.22 0.00 +vt 0.48 0.03 0.00 +vt 0.48 0.01 0.00 +vt 0.59 0.01 0.00 +vt 0.15 0.26 0.00 +vt 0.18 0.26 0.00 +vt 0.21 0.27 0.00 +vt 0.23 0.28 0.00 +vt 0.24 0.24 0.00 +vt 0.21 0.23 0.00 +vt 0.26 0.18 0.00 +vt 0.23 0.17 0.00 +vt 0.20 0.18 0.00 +vt 0.19 0.22 0.00 +vt 0.15 0.22 0.00 +vt 0.09 0.25 0.00 +vt 0.06 0.24 0.00 +vt 0.11 0.21 0.00 +vt 0.07 0.20 0.00 +vt 0.12 0.16 0.00 +vt 0.08 0.14 0.00 +vt 0.06 0.20 0.00 +vt 0.06 0.14 0.00 +vt 0.49 0.18 0.00 +vt 0.56 0.19 0.00 +vt 0.49 0.21 0.00 +vt 0.57 0.21 0.00 +vt 0.51 0.26 0.00 +vt 0.57 0.25 0.00 +vt 0.50 0.31 0.00 +vt 0.57 0.31 0.00 +vt 0.62 0.24 0.00 +vt 0.62 0.31 0.00 +vt 0.62 0.35 0.00 +vt 0.62 0.38 0.00 +vt 0.63 0.41 0.00 +vt 0.58 0.42 0.00 +vt 0.57 0.39 0.00 +vt 0.51 0.43 0.00 +vt 0.50 0.40 0.00 +vt 0.51 0.36 0.00 +vt 0.57 0.35 0.00 +vt 0.25 0.71 0.00 +vt 0.25 0.70 0.00 +vt 0.39 0.71 0.00 +vt 0.39 0.70 0.00 +vt 0.25 0.69 0.00 +vt 0.39 0.69 0.00 +vt 0.25 0.68 0.00 +vt 0.39 0.68 0.00 +vt 0.61 0.19 0.00 +vt 0.16 0.16 0.00 +vt 0.39 0.72 0.00 +vt 0.38 0.71 0.00 +vt 0.39 0.73 0.00 +vt 0.37 0.73 0.00 +vt 0.37 0.72 0.00 +vt 0.38 0.74 0.00 +vt 0.60 0.01 0.00 +vt 0.59 0.02 0.00 +vt 0.02 0.73 0.00 +vt 0.63 0.02 0.00 +vt 0.60 0.02 0.00 +vt 0.63 0.01 0.00 +vt 0.78 0.11 0.00 +vt 0.21 0.50 0.00 +vt 0.20 0.50 0.00 +vt 0.24 0.54 0.00 +vt 0.23 0.52 0.00 +vt 0.19 0.54 0.00 +vt 0.19 0.52 0.00 +vt 0.19 0.56 0.00 +vt 0.24 0.57 0.00 +vt 0.22 0.49 0.00 +vt 0.20 0.51 0.00 +vt 0.23 0.51 0.00 +vt 0.88 0.10 0.00 +vt 0.88 0.11 0.00 +vt 0.75 0.09 0.00 +vt 0.75 0.10 0.00 +vt 0.88 0.08 0.00 +vt 0.75 0.08 0.00 +vt 0.88 0.06 0.00 +vt 0.75 0.05 0.00 +vt 0.88 0.03 0.00 +vt 0.75 0.03 0.00 +vt 0.88 0.02 0.00 +vt 0.75 0.01 0.00 +vt 0.88 0.01 0.00 +vt 0.75 0.00 0.00 +vt 0.73 0.05 0.00 +vt 0.73 0.03 0.00 +vt 0.73 0.02 0.00 +vt 0.73 0.01 0.00 +vt 0.73 0.08 0.00 +vt 0.73 0.09 0.00 +vt 0.73 0.10 0.00 +vt 0.70 0.03 0.00 +vt 0.70 0.02 0.00 +vt 0.68 0.04 0.00 +vt 0.68 0.05 0.00 +vt 0.70 0.05 0.00 +vt 0.70 0.07 0.00 +vt 0.67 0.06 0.00 +vt 0.67 0.05 0.00 +vt 0.70 0.08 0.00 +vt 0.70 0.09 0.00 +vt 0.67 0.07 0.00 +vt 0.68 0.03 0.00 +vt 0.94 0.08 0.00 +vt 0.94 0.09 0.00 +vt 0.94 0.07 0.00 +vt 0.94 0.06 0.00 +vt 0.94 0.04 0.00 +vt 0.94 0.03 0.00 +vt 0.99 0.07 0.00 +vt 0.99 0.06 0.00 +vt 0.99 0.05 0.00 +# 213 texture coords + +g P_51_Mustang_Right_Wing +f 263/73/181 264/74/181 265/73/181 +f 266/75/182 267/76/183 268/77/184 +f 269/78/185 268/77/184 267/76/183 +f 267/76/183 270/79/186 269/78/185 +f 271/80/187 269/78/185 270/79/186 +f 271/80/187 270/79/186 272/81/188 +f 271/80/187 272/81/188 273/82/189 +f 274/83/190 273/82/189 272/81/188 +f 273/82/189 274/83/190 275/84/191 +f 276/85/192 275/84/191 274/83/190 +f 276/85/192 277/86/193 275/84/191 +f 276/85/192 278/87/194 277/86/193 +f 279/88/195 277/86/193 278/87/194 +f 278/87/194 280/87/196 279/88/195 +f 281/88/197 279/88/195 280/87/196 +f 279/88/195 281/88/197 282/89/198 +f 279/88/195 282/89/198 277/86/193 +f 283/90/199 277/86/193 282/89/198 +f 277/86/193 283/90/199 284/91/200 +f 268/77/184 269/78/185 285/92/201 +f 286/93/202 284/91/200 283/90/199 +f 284/91/200 286/93/202 287/94/203 +f 288/95/204 287/94/203 286/93/202 +f 288/95/204 289/96/205 287/94/203 +f 290/97/206 287/94/203 289/96/205 +f 290/97/206 291/98/207 287/94/203 +f 292/99/208 287/94/203 291/98/207 +f 291/98/207 285/92/201 292/99/208 +f 293/100/209 292/99/208 285/92/201 +f 293/100/209 285/92/201 269/78/185 +f 269/78/185 271/80/187 293/100/209 +f 273/82/189 293/100/209 271/80/187 +f 293/100/209 273/82/189 292/99/208 +f 275/84/191 292/99/208 273/82/189 +f 275/84/191 284/91/200 292/99/208 +f 284/91/200 275/84/191 277/86/193 +f 287/94/203 292/99/208 284/91/200 +f 294/101/210 295/102/211 296/103/212 +f 295/102/211 294/101/210 297/104/213 +f 295/102/211 297/104/213 298/105/214 +f 299/106/214 298/105/214 297/104/213 +f 299/106/214 289/107/215 298/105/214 +f 288/108/216 298/105/214 289/107/215 +f 288/108/216 286/109/217 298/105/214 +f 300/110/218 298/105/214 286/109/217 +f 286/109/217 283/111/219 300/110/218 +f 301/112/220 300/110/218 283/111/219 +f 300/110/218 301/112/220 302/113/221 +f 303/114/222 302/113/221 301/112/220 +f 303/114/222 304/115/223 302/113/221 +f 304/115/223 303/114/222 305/116/224 +f 305/116/224 306/117/225 304/115/223 +f 307/118/226 304/115/223 306/117/225 +f 263/119/227 307/118/226 306/117/225 +f 307/118/226 263/119/227 308/120/228 +f 264/121/225 263/119/227 306/117/225 +f 309/122/229 308/120/228 263/119/227 +f 308/120/228 309/122/229 310/123/230 +f 311/124/231 310/123/230 309/122/229 +f 310/123/230 311/124/231 312/125/232 +f 313/126/233 312/125/232 311/124/231 +f 312/125/232 314/127/234 310/123/230 +f 294/101/210 310/123/230 314/127/234 +f 310/123/230 294/101/210 308/120/228 +f 296/103/212 308/120/228 294/101/210 +f 308/120/228 296/103/212 307/118/226 +f 304/115/223 307/118/226 296/103/212 +f 296/103/212 302/113/221 304/115/223 +f 302/113/221 296/103/212 295/102/211 +f 302/113/221 295/102/211 300/110/218 +f 298/105/214 300/110/218 295/102/211 +f 314/127/234 297/104/213 294/101/210 +f 272/81/188 315/128/235 274/83/190 +f 316/129/236 274/83/190 315/128/235 +f 274/83/190 316/129/236 276/85/192 +f 278/87/194 276/85/192 316/129/236 +f 278/87/194 316/129/236 280/87/196 +f 317/129/237 280/87/196 316/129/236 +f 317/129/237 316/129/236 318/128/238 +f 315/128/235 318/128/238 316/129/236 +f 264/130/239 318/128/238 315/128/235 +f 264/130/239 315/128/235 265/131/240 +f 272/81/188 265/131/240 315/128/235 +f 265/131/240 272/81/188 270/79/186 +f 283/111/241 282/132/242 301/112/243 +f 319/133/244 301/112/243 282/132/242 +f 281/133/245 319/133/244 282/132/242 +f 281/133/245 280/134/246 319/133/244 +f 320/135/247 319/133/244 280/134/246 +f 320/135/247 280/134/246 305/116/248 +f 317/116/248 305/116/248 280/134/246 +f 317/116/248 318/136/223 305/116/248 +f 306/117/223 305/116/248 318/136/223 +f 264/121/223 306/117/223 318/136/223 +f 319/133/249 320/135/250 301/112/220 +f 303/114/222 301/112/220 320/135/250 +f 320/135/250 305/116/224 303/114/222 +f 321/137/251 322/138/251 323/139/251 +f 324/140/251 323/139/251 322/138/251 +f 325/140/252 326/138/252 327/139/252 +f 328/137/252 327/139/252 326/138/252 +f 329/141/253 330/141/253 331/141/253 +f 332/141/253 331/141/253 330/141/253 +f 330/142/254 333/143/254 332/144/254 +f 334/145/254 332/144/254 333/143/254 +f 333/146/255 335/147/255 334/146/255 +f 336/147/255 334/146/255 335/147/255 +f 334/140/251 336/139/251 332/138/251 +f 331/137/251 332/138/251 336/139/251 +f 333/140/252 330/138/252 335/139/252 +f 329/137/252 335/139/252 330/138/252 +f 337/141/256 338/141/256 339/141/256 +f 340/141/256 339/141/256 338/141/256 +f 338/142/254 341/143/254 340/144/254 +f 342/145/254 340/144/254 341/143/254 +f 341/146/255 343/147/255 342/146/255 +f 344/147/255 342/146/255 343/147/255 +f 342/140/251 344/139/251 340/138/251 +f 339/137/251 340/138/251 344/139/251 +f 341/140/252 338/138/252 343/139/252 +f 337/137/252 343/139/252 338/138/252 +f 267/144/257 266/148/257 270/149/257 +f 270/149/258 266/148/259 265/150/258 +f 313/151/260 311/142/260 266/148/260 +f 266/148/261 311/142/261 265/150/261 +f 311/142/262 309/149/262 265/150/262 +f 309/149/263 263/150/263 265/150/263 +f 312/152/264 313/153/264 268/154/264 +f 266/155/265 268/154/265 313/153/265 +f 314/156/266 312/152/266 285/157/266 +f 268/154/267 285/157/267 312/152/267 +f 291/158/268 297/159/268 285/157/268 +f 314/156/269 285/157/269 297/159/269 +f 299/160/270 297/159/270 290/161/270 +f 291/158/270 290/161/270 297/159/270 +f 289/162/271 299/160/271 290/161/271 +f 328/141/253 326/141/253 321/141/253 +f 322/141/253 321/141/253 326/141/253 +f 326/142/254 325/143/254 322/144/254 +f 324/145/254 322/144/254 325/143/254 +f 325/146/272 327/147/272 324/146/272 +f 323/147/272 324/146/272 327/147/272 +f 266/163/273 313/164/273 345/165/273 +f 264/121/274 345/166/275 263/119/274 +f 313/126/276 263/119/274 345/166/275 +f 345/167/277 264/130/185 266/75/277 +f 265/168/278 266/75/277 264/130/185 +f 264/73/279 263/169/279 265/169/279 +f 263/143/280 313/165/280 265/145/280 +f 266/170/281 265/145/281 313/165/281 +f 266/148/282 346/171/282 313/151/282 +f 347/172/283 348/173/284 314/127/234 +f 297/104/285 314/127/234 348/173/284 +f 297/104/285 348/173/284 299/106/286 +f 349/174/287 299/106/286 348/173/284 +f 349/174/287 350/175/288 299/106/286 +f 350/175/288 349/174/287 351/176/289 +f 352/177/290 351/176/289 349/174/287 +f 351/176/289 352/177/290 353/178/291 +f 354/179/292 353/178/291 352/177/290 +f 354/179/292 352/177/290 355/180/293 +f 356/181/294 355/180/293 352/177/290 +f 356/181/294 357/182/234 355/180/293 +f 357/182/234 356/181/294 347/172/283 +f 347/172/283 358/183/230 357/182/234 +f 347/172/283 314/127/234 358/183/230 +f 312/125/232 358/183/230 314/127/234 +f 312/125/232 313/126/295 358/183/230 +f 359/184/231 358/183/230 313/126/295 +f 349/174/287 348/173/284 352/177/290 +f 356/181/294 352/177/290 348/173/284 +f 348/173/284 347/172/283 356/181/294 +f 358/183/230 359/184/231 360/185/296 +f 361/186/297 360/185/296 359/184/231 +f 360/185/296 361/186/297 362/187/298 +f 363/188/299 362/187/298 361/186/297 +f 361/186/297 364/189/300 363/188/299 +f 365/190/232 363/188/299 364/189/300 +f 364/189/300 361/186/297 359/184/231 +f 366/191/301 367/192/302 368/193/182 +f 369/194/303 368/193/182 367/192/302 +f 368/193/182 369/194/303 370/195/304 +f 371/196/305 370/195/304 369/194/303 +f 370/195/304 371/196/305 372/197/306 +f 373/198/307 372/197/306 371/196/305 +f 371/196/305 374/199/308 373/198/307 +f 375/200/309 373/198/307 374/199/308 +f 375/200/309 374/199/308 285/92/310 +f 375/200/309 285/92/310 376/201/311 +f 291/98/312 376/201/311 285/92/310 +f 291/98/312 290/97/313 376/201/311 +f 377/202/314 376/201/311 290/97/313 +f 377/202/314 290/97/313 350/203/315 +f 350/203/315 351/204/316 377/202/314 +f 378/205/317 377/202/314 351/204/316 +f 351/204/316 353/206/318 378/205/317 +f 379/207/314 378/205/317 353/206/318 +f 372/197/306 373/198/307 380/208/319 +f 379/207/314 380/208/319 378/205/317 +f 381/209/319 378/205/317 380/208/319 +f 381/209/319 380/208/319 373/198/307 +f 373/198/307 375/200/309 381/209/319 +f 376/201/311 381/209/319 375/200/309 +f 381/209/319 376/201/311 378/205/317 +f 377/202/314 378/205/317 376/201/311 +f 382/210/293 383/211/320 384/212/254 +f 385/213/321 384/212/254 383/211/320 +f 383/211/320 386/214/322 385/213/321 +f 387/215/323 385/213/321 386/214/322 +f 386/214/322 388/216/324 387/215/323 +f 389/217/325 387/215/323 388/216/324 +f 388/216/324 390/214/326 389/217/325 +f 391/215/327 389/217/325 390/214/326 +f 390/214/326 392/211/328 391/215/327 +f 393/213/329 391/215/327 392/211/328 +f 392/211/328 382/210/293 393/213/329 +f 384/212/254 393/213/329 382/210/293 +f 367/192/302 346/218/330 369/194/303 +f 369/194/303 346/218/330 371/196/305 +f 374/199/308 371/196/305 346/218/330 +f 346/218/330 266/75/331 374/199/308 +f 268/77/332 374/199/308 266/75/331 +f 268/77/332 285/92/310 374/199/308 +f 362/187/298 394/219/333 360/185/296 +f 357/182/234 360/185/296 394/219/333 +f 360/185/296 357/182/234 358/183/230 +f 394/219/333 355/180/293 357/182/234 +f 390/220/334 388/221/334 392/222/334 +f 388/221/334 383/223/334 392/222/334 +f 386/224/334 383/223/334 388/221/334 +f 392/222/334 383/223/334 382/225/334 +f 395/220/334 396/221/334 397/222/334 +f 396/221/334 398/223/334 397/222/334 +f 397/222/334 398/223/334 399/225/334 +f 400/224/334 398/223/334 396/221/334 +f 401/210/293 402/211/320 403/212/254 +f 404/213/321 403/212/254 402/211/320 +f 402/211/320 405/214/322 404/213/321 +f 406/215/323 404/213/321 405/214/322 +f 405/214/322 407/216/324 406/215/323 +f 408/217/325 406/215/323 407/216/324 +f 407/216/324 409/214/326 408/217/325 +f 410/215/327 408/217/325 409/214/326 +f 409/214/326 411/211/328 410/215/327 +f 412/213/329 410/215/327 411/211/328 +f 411/211/328 401/210/293 412/213/329 +f 403/212/254 412/213/329 401/210/293 +f 409/220/334 407/221/334 411/222/334 +f 407/221/334 402/223/334 411/222/334 +f 405/224/334 402/223/334 407/221/334 +f 411/222/334 402/223/334 401/225/334 +f 367/226/282 359/227/282 346/171/282 +f 346/171/282 359/227/282 313/151/282 +f 413/141/335 414/141/335 415/141/335 +f 416/141/335 415/141/335 414/141/335 +f 414/228/336 417/228/336 416/228/336 +f 418/228/336 416/228/336 417/228/336 +f 419/147/337 418/228/337 420/147/337 +f 417/228/337 420/147/337 418/228/337 +f 420/146/338 421/147/338 419/146/338 +f 422/147/338 419/146/338 421/147/338 +f 289/96/339 350/203/315 290/97/313 +f 289/107/340 299/106/286 350/175/288 +f 365/229/282 364/230/282 366/231/282 +f 367/226/282 366/231/282 364/230/282 +f 364/230/282 359/227/282 367/226/282 +f 415/137/341 416/138/341 422/139/341 +f 422/139/341 418/232/341 419/140/341 +f 416/138/341 418/232/341 422/139/341 +f 413/137/342 421/139/342 414/138/342 +f 421/139/342 420/140/342 414/138/342 +f 414/138/342 420/140/342 417/232/342 +f 399/210/293 398/211/320 423/212/254 +f 424/213/321 423/212/254 398/211/320 +f 398/211/320 400/214/322 424/213/321 +f 425/215/323 424/213/321 400/214/322 +f 400/214/322 396/216/324 425/215/323 +f 426/217/325 425/215/323 396/216/324 +f 396/216/324 395/214/326 426/217/325 +f 427/215/327 426/217/325 395/214/326 +f 395/214/326 397/211/328 427/215/327 +f 428/213/329 427/215/327 397/211/328 +f 397/211/328 399/210/293 428/213/329 +f 423/212/254 428/213/329 399/210/293 +f 363/154/343 365/233/343 368/152/343 +f 366/234/269 368/152/269 365/233/269 +f 394/235/344 362/236/344 372/237/344 +f 370/238/345 372/237/345 362/236/345 +f 362/236/346 363/154/346 370/238/346 +f 368/152/347 370/238/347 363/154/347 +f 355/158/348 394/235/348 380/239/348 +f 372/237/349 380/239/349 394/235/349 +f 379/160/350 354/240/350 380/239/350 +f 355/158/351 380/239/351 354/240/351 +f 353/162/352 354/240/352 379/160/352 +f 290/160/353 299/240/353 289/162/353 +f 266/153/354 313/241/354 268/242/354 +f 312/243/355 268/242/355 313/241/355 +f 312/243/356 314/235/356 268/242/356 +f 285/156/357 268/242/357 314/235/357 +f 314/235/358 297/158/358 285/156/358 +f 291/159/359 285/156/359 297/158/359 +f 291/159/360 297/158/360 290/160/360 +f 299/240/360 290/160/360 297/158/360 +f 429/244/361 430/245/362 431/246/361 +f 432/247/362 431/246/361 430/245/362 +f 430/245/362 433/244/363 432/247/362 +f 434/246/364 432/247/362 433/244/363 +f 433/244/363 435/248/365 434/246/364 +f 436/249/366 434/246/364 435/248/365 +f 435/248/365 437/250/252 436/249/366 +f 438/251/367 436/249/366 437/250/252 +f 437/250/252 439/252/368 438/251/367 +f 440/253/369 438/251/367 439/252/368 +f 439/252/368 441/254/370 440/253/369 +f 442/255/370 440/253/369 441/254/370 +f 441/254/370 443/256/371 442/255/370 +f 444/257/371 442/255/370 443/256/371 +f 443/256/371 445/254/372 444/257/371 +f 446/255/373 444/257/371 445/254/372 +f 445/254/372 447/252/374 446/255/373 +f 448/253/375 446/255/373 447/252/374 +f 447/252/374 449/250/376 448/253/375 +f 450/251/251 448/253/375 449/250/376 +f 449/250/376 451/248/377 450/251/251 +f 452/249/378 450/251/251 451/248/377 +f 451/248/377 429/244/361 452/249/378 +f 431/246/361 452/249/378 429/244/361 +f 438/251/379 440/253/380 453/258/381 +f 454/259/382 453/258/381 440/253/380 +f 440/253/380 442/255/383 454/259/382 +f 455/260/384 454/259/382 442/255/383 +f 442/255/383 444/257/385 455/260/384 +f 456/261/386 455/260/384 444/257/385 +f 444/257/385 446/255/387 456/261/386 +f 457/260/388 456/261/386 446/255/387 +f 446/255/387 448/253/389 457/260/388 +f 458/259/390 457/260/388 448/253/389 +f 448/253/389 450/251/391 458/259/390 +f 459/258/392 458/259/390 450/251/391 +f 450/251/391 452/249/393 459/258/392 +f 460/262/394 459/258/392 452/249/393 +f 452/249/393 431/246/395 460/262/394 +f 461/263/396 460/262/394 431/246/395 +f 431/246/395 432/247/397 461/263/396 +f 462/264/398 461/263/396 432/247/397 +f 454/259/382 455/260/384 463/265/399 +f 455/260/384 456/261/386 464/266/400 +f 464/266/400 463/265/399 455/260/384 +f 463/265/399 464/266/400 465/267/401 +f 465/267/401 466/268/402 463/265/399 +f 467/269/403 463/265/399 466/268/402 +f 463/265/399 467/269/403 454/259/382 +f 453/258/381 454/259/382 467/269/403 +f 432/247/397 434/246/404 462/264/398 +f 468/263/405 462/264/398 434/246/404 +f 434/246/404 436/249/406 468/263/405 +f 469/262/407 468/263/405 436/249/406 +f 436/249/406 438/251/379 469/262/407 +f 453/258/381 469/262/407 438/251/379 +f 469/262/407 453/258/381 470/270/408 +f 467/269/403 470/270/408 453/258/381 +f 470/270/408 467/269/403 471/271/409 +f 466/268/402 471/271/409 467/269/403 +f 472/272/410 471/271/409 466/268/402 +f 472/272/410 466/268/402 465/267/401 +f 472/272/410 465/267/401 473/267/411 +f 473/267/411 465/267/401 464/266/400 +f 464/266/400 474/266/412 473/267/411 +f 474/266/412 464/266/400 456/261/386 +f 456/261/386 457/260/388 474/266/412 +f 475/266/413 474/266/412 457/260/388 +f 457/260/388 458/259/390 475/266/413 +f 476/265/414 475/266/413 458/259/390 +f 458/259/390 459/258/392 476/265/414 +f 477/269/415 476/265/414 459/258/392 +f 459/258/392 460/262/394 477/269/415 +f 478/270/416 477/269/415 460/262/394 +f 460/262/394 461/263/396 478/270/416 +f 479/273/417 478/270/416 461/263/396 +f 461/263/396 462/264/398 479/273/417 +f 480/274/418 479/273/417 462/264/398 +f 462/264/398 468/263/405 480/274/418 +f 481/273/419 480/274/418 468/263/405 +f 468/263/405 469/262/407 481/273/419 +f 470/270/408 481/273/419 469/262/407 +f 481/273/419 470/270/408 482/275/420 +f 471/271/409 482/275/420 470/270/408 +f 472/272/410 482/275/420 471/271/409 +f 472/272/410 483/275/421 482/275/420 +f 480/274/418 481/273/419 483/275/421 +f 482/275/420 483/275/421 481/273/419 +f 472/272/410 484/275/422 483/275/421 +f 483/275/421 484/275/422 480/274/418 +f 479/273/417 480/274/418 484/275/422 +f 484/275/422 485/271/423 479/273/417 +f 478/270/416 479/273/417 485/271/423 +f 485/271/423 486/268/424 478/270/416 +f 477/269/415 478/270/416 486/268/424 +f 486/268/424 487/267/425 477/269/415 +f 476/265/414 477/269/415 487/267/425 +f 487/267/425 488/267/426 476/265/414 +f 475/266/413 476/265/414 488/267/426 +f 488/267/426 489/276/427 475/266/413 +f 474/266/412 475/266/413 489/276/427 +f 489/276/427 473/267/411 474/266/412 +f 472/272/410 473/267/411 489/276/427 +f 472/272/410 489/276/427 488/267/426 +f 472/272/410 488/267/426 487/267/425 +f 472/272/410 487/267/425 486/268/424 +f 472/272/410 486/268/424 485/271/423 +f 472/272/410 485/271/423 484/275/422 +f 433/244/428 430/245/429 490/277/430 +f 491/278/431 490/277/430 430/245/429 +f 430/245/429 429/244/432 491/278/431 +f 492/277/433 491/278/431 429/244/432 +f 429/244/432 451/248/434 492/277/433 +f 493/279/435 492/277/433 451/248/434 +f 451/248/434 449/250/436 493/279/435 +f 494/280/437 493/279/435 449/250/436 +f 449/250/436 447/252/438 494/280/437 +f 495/281/439 494/280/437 447/252/438 +f 447/252/438 445/254/440 495/281/439 +f 496/282/441 495/281/439 445/254/440 +f 445/254/440 443/256/442 496/282/441 +f 497/282/443 496/282/441 443/256/442 +f 443/256/442 441/254/444 497/282/443 +f 498/282/445 497/282/443 441/254/444 +f 441/254/444 439/252/446 498/282/445 +f 499/281/447 498/282/445 439/252/446 +f 490/277/430 491/278/431 500/283/448 +f 501/283/449 500/283/448 491/278/431 +f 491/278/431 492/277/433 501/283/449 +f 439/252/446 437/250/450 499/281/447 +f 502/280/451 499/281/447 437/250/450 +f 437/250/450 435/248/452 502/280/451 +f 503/279/453 502/280/451 435/248/452 +f 435/248/452 433/244/428 503/279/453 +f 490/277/430 503/279/453 433/244/428 +f 503/279/453 490/277/430 504/284/454 +f 500/283/448 504/284/454 490/277/430 +f 504/284/454 500/283/448 505/284/455 +f 500/283/448 501/283/449 505/284/455 +f 501/283/449 506/283/456 505/284/455 +f 506/283/456 501/283/449 492/277/433 +f 492/277/433 493/279/435 506/283/456 +f 507/284/457 506/283/456 493/279/435 +f 493/279/435 494/280/437 507/284/457 +f 508/284/458 507/284/457 494/280/437 +f 494/280/437 495/281/439 508/284/458 +f 509/285/459 508/284/458 495/281/439 +f 495/281/439 496/282/441 509/285/459 +f 510/285/460 509/285/459 496/282/441 +f 496/282/441 497/282/443 510/285/460 +f 511/285/461 510/285/460 497/282/443 +f 497/282/443 498/282/445 511/285/461 +f 512/285/462 511/285/461 498/282/445 +f 498/282/445 499/281/447 512/285/462 +f 513/285/463 512/285/462 499/281/447 +f 499/281/447 502/280/451 513/285/463 +f 514/284/464 513/285/463 502/280/451 +f 502/280/451 503/279/453 514/284/464 +f 504/284/454 514/284/464 503/279/453 +f 514/284/464 504/284/454 505/284/455 +f 513/285/463 514/284/464 505/284/455 +f 512/285/462 513/285/463 505/284/455 +f 511/285/461 512/285/462 505/284/455 +f 510/285/460 511/285/461 505/284/455 +f 509/285/459 510/285/460 505/284/455 +f 508/284/458 509/285/459 505/284/455 +f 507/284/457 508/284/458 505/284/455 +f 506/283/456 507/284/457 505/284/455 +# 472 faces + +# +# object P_51_Mustang_Right_Landing_Wheel +# + +v -21.65 -7.03 18.48 +v -20.12 -7.12 18.43 +v -21.65 -7.03 18.62 +v -20.12 -7.12 18.57 +v -20.72 -9.30 17.99 +v -20.96 -9.30 18.00 +v -20.29 -0.52 17.44 +v -20.54 -0.52 17.45 +v -21.12 -9.30 18.19 +v -20.70 -0.51 17.64 +v -21.11 -9.30 18.43 +v -20.69 -0.51 17.88 +v -20.93 -9.30 18.59 +v -20.51 -0.51 18.04 +v -20.69 -9.30 18.58 +v -20.27 -0.52 18.03 +v -20.53 -9.30 18.39 +v -20.10 -0.52 17.84 +v -20.54 -9.30 18.15 +v -20.11 -0.52 17.60 +v -20.33 -12.95 18.23 +v -20.20 -10.30 18.07 +v -20.11 -12.93 18.22 +v -19.87 -10.28 18.05 +v -20.30 -9.53 18.02 +v -20.07 -9.01 17.98 +v -20.64 -9.29 18.02 +v -20.61 -8.74 17.98 +v -20.32 -12.95 18.73 +v -20.01 -12.93 18.71 +v -20.20 -10.30 18.56 +v -19.86 -10.28 18.55 +v -20.30 -9.53 18.52 +v -20.07 -9.01 18.48 +v -20.63 -9.29 18.51 +v -20.60 -8.73 18.48 +v -21.23 -1.10 17.16 +v -22.09 -3.52 17.35 +v -21.15 -1.12 18.27 +v -24.19 -9.64 18.88 +v -24.42 -9.57 15.50 +v -24.22 -9.64 15.49 +v -21.89 -3.59 17.34 +v -23.98 -9.71 18.87 +v -20.95 -1.19 18.26 +v -21.02 -1.16 17.16 +v -21.65 -6.86 18.47 +v -21.64 -6.86 18.61 +v -20.11 -6.80 18.41 +v -20.11 -6.80 18.55 +v -20.12 -6.80 17.67 +v -20.13 -7.12 17.69 +v -21.65 -6.86 17.72 +v -21.66 -7.04 17.74 +v -21.66 -7.04 17.88 +v -20.13 -7.12 17.83 +v -21.65 -6.86 17.87 +v -20.11 -6.80 17.81 +v -20.14 -11.43 20.48 +v -20.18 -12.67 20.94 +v -20.12 -10.55 19.48 +v -20.30 -15.29 18.74 +v -20.31 -15.01 17.47 +v -20.27 -14.90 19.94 +v -20.15 -10.67 17.01 +v -20.12 -10.27 18.21 +v -20.23 -13.94 20.74 +v -20.89 -10.51 16.93 +v -20.86 -10.09 18.22 +v -20.86 -10.40 19.58 +v -20.88 -11.34 20.66 +v -20.92 -12.66 21.15 +v -20.97 -14.03 20.94 +v -21.02 -15.05 20.07 +v -21.05 -15.47 18.78 +v -21.06 -15.17 17.42 +v -20.29 -14.13 16.47 +v -21.04 -14.23 16.35 +v -20.25 -12.89 16.01 +v -20.99 -12.90 15.85 +v -20.20 -11.62 16.21 +v -20.94 -11.54 16.07 +v -21.69 -11.63 16.26 +v -21.64 -10.67 17.07 +v -21.61 -10.28 18.27 +v -21.61 -10.56 19.54 +v -21.63 -11.44 20.54 +v -21.67 -12.68 21.00 +v -21.72 -13.94 20.80 +v -21.76 -14.90 19.99 +v -21.79 -15.29 18.79 +v -21.80 -15.01 17.52 +v -21.78 -14.14 16.52 +v -21.74 -12.90 16.06 +# 94 vertices + +vn -0.05 -1.00 0.00 +vn 0.32 -0.07 -0.95 +vn -0.45 -0.03 -0.89 +vn 0.33 -0.07 -0.94 +vn -0.43 -0.04 -0.90 +vn -0.95 0.03 -0.32 +vn -0.94 0.02 -0.35 +vn -0.90 0.07 0.44 +vn -0.90 0.07 0.42 +vn -0.33 0.07 0.94 +vn -0.32 0.07 0.95 +vn 0.43 0.04 0.90 +vn 0.45 0.03 0.89 +vn 0.94 -0.02 0.35 +vn 0.95 -0.03 0.32 +vn 0.90 -0.07 -0.42 +vn 0.90 -0.07 -0.44 +vn -0.03 -0.06 -1.00 +vn 0.03 0.06 1.00 +vn -0.01 -1.00 0.00 +vn 0.01 1.00 -0.00 +vn -0.94 0.34 0.07 +vn 0.94 -0.34 -0.07 +vn -1.00 0.05 0.01 +vn -0.04 1.00 -0.00 +vn 1.00 -0.05 -0.01 +vn 0.46 0.89 -0.01 +vn 0.99 0.16 -0.01 +vn 0.97 -0.10 -0.20 +vn 1.00 -0.06 -0.04 +vn 0.98 -0.10 -0.18 +vn 1.00 -0.06 -0.01 +vn 0.07 -1.00 0.00 +vn 0.06 -1.00 -0.00 +vn 0.05 -1.00 -0.01 +vn -0.99 -0.13 0.01 +vn -0.59 -0.81 0.01 +vn 0.32 0.95 -0.00 +vn 0.06 0.05 1.00 +vn -0.32 -0.95 0.00 +vn 0.05 0.27 -0.96 +vn -0.06 -0.05 -1.00 +vn 1.00 -0.04 -0.01 +vn 0.22 0.81 -0.55 +vn -0.02 0.83 -0.56 +vn 0.24 0.97 -0.05 +vn -0.00 1.00 -0.05 +vn 0.25 0.87 0.44 +vn 0.01 0.89 0.45 +vn 0.26 0.55 0.79 +vn 0.03 0.57 0.82 +vn 0.27 0.10 0.96 +vn 0.03 0.10 0.99 +vn 0.27 -0.40 0.87 +vn 0.03 -0.42 0.91 +vn 0.26 -0.80 0.53 +vn 0.02 -0.83 0.56 +vn 0.24 -0.97 0.04 +vn 0.00 -1.00 0.05 +vn 0.22 -0.87 -0.45 +vn -0.01 -0.89 -0.45 +vn 0.20 -0.55 -0.81 +vn -0.03 -0.57 -0.82 +vn 0.20 -0.10 -0.97 +vn -0.03 -0.10 -0.99 +vn 0.21 0.40 -0.89 +vn -0.03 0.42 -0.91 +vn -0.27 0.40 -0.87 +vn -0.26 0.80 -0.53 +vn -0.24 0.97 -0.04 +vn -0.22 0.87 0.45 +vn -0.20 0.55 0.81 +vn -0.20 0.10 0.97 +vn -0.21 -0.40 0.89 +vn -0.22 -0.81 0.55 +vn -0.24 -0.97 0.05 +vn -0.25 -0.87 -0.44 +vn -0.26 -0.55 -0.79 +vn -0.27 -0.10 -0.96 +vn -1.00 0.04 0.01 +# 80 vertex normals + +vt 0.07 0.76 0.00 +vt 0.30 0.92 0.00 +vt 0.09 0.92 0.00 +vt 0.30 0.93 0.00 +vt 0.09 0.93 0.00 +vt 0.30 0.94 0.00 +vt 0.09 0.94 0.00 +vt 0.44 0.70 0.00 +vt 0.44 0.73 0.00 +vt 0.44 0.74 0.00 +vt 0.43 0.74 0.00 +vt 0.43 0.75 0.00 +vt 0.32 0.98 0.00 +vt 0.31 0.98 0.00 +vt 0.33 0.98 0.00 +vt 0.33 0.99 0.00 +vt 0.32 1.00 0.00 +vt 0.33 1.00 0.00 +vt 0.47 0.08 0.00 +vt 0.53 0.08 0.00 +vt 0.47 0.11 0.00 +vt 0.67 0.11 0.00 +vt 0.66 0.03 0.00 +vt 0.61 0.03 0.00 +vt 0.47 0.00 0.00 +vt 0.66 0.00 0.00 +vt 0.08 0.75 0.00 +vt 0.09 0.75 0.00 +vt 0.07 0.75 0.00 +vt 0.04 0.84 0.00 +vt 0.04 0.85 0.00 +vt 0.03 0.84 0.00 +vt 0.03 0.85 0.00 +vt 0.08 0.76 0.00 +vt 0.09 0.74 0.00 +vt 0.43 0.73 0.00 +vt 0.42 0.73 0.00 +vt 0.42 0.74 0.00 +vt 0.43 0.72 0.00 +vt 0.42 0.72 0.00 +vt 0.46 0.72 0.00 +vt 0.46 0.73 0.00 +vt 0.45 0.73 0.00 +vt 0.03 0.68 0.00 +vt 0.05 0.68 0.00 +vt 0.16 0.67 0.00 +vt 0.03 0.67 0.00 +vt 0.08 0.67 0.00 +vt 0.08 0.68 0.00 +vt 0.07 0.67 0.00 +vt 0.07 0.66 0.00 +vt 0.16 0.66 0.00 +vt 0.03 0.66 0.00 +vt 0.31 0.99 0.00 +vt 0.85 0.94 0.00 +vt 0.85 0.96 0.00 +vt 0.84 0.93 0.00 +vt 0.80 0.99 0.00 +vt 0.78 0.98 0.00 +vt 0.82 0.99 0.00 +vt 0.80 0.92 0.00 +vt 0.82 0.92 0.00 +vt 0.84 0.98 0.00 +vt 0.32 0.78 0.00 +vt 0.32 0.76 0.00 +vt 0.34 0.78 0.00 +vt 0.34 0.76 0.00 +vt 0.36 0.78 0.00 +vt 0.36 0.76 0.00 +vt 0.38 0.78 0.00 +vt 0.38 0.76 0.00 +vt 0.39 0.78 0.00 +vt 0.39 0.76 0.00 +vt 0.31 0.78 0.00 +vt 0.31 0.76 0.00 +vt 0.29 0.78 0.00 +vt 0.29 0.76 0.00 +vt 0.31 0.75 0.00 +vt 0.32 0.75 0.00 +vt 0.34 0.75 0.00 +vt 0.36 0.75 0.00 +vt 0.38 0.75 0.00 +vt 0.39 0.75 0.00 +vt 0.29 0.75 0.00 +vt 0.78 0.96 0.00 +vt 0.78 0.94 0.00 +vt 0.79 0.93 0.00 +# 87 texture coords + +g P_51_Mustang_Right_Landing_Wheel +f 515/286/465 516/286/465 517/286/465 +f 518/286/465 517/286/465 516/286/465 +f 519/287/466 520/287/467 521/288/468 +f 522/288/469 521/288/468 520/287/467 +f 520/287/467 523/289/470 522/288/469 +f 524/290/471 522/288/469 523/289/470 +f 523/289/470 525/291/472 524/290/471 +f 526/292/473 524/290/471 525/291/472 +f 525/291/472 527/291/474 526/292/473 +f 528/292/475 526/292/473 527/291/474 +f 527/291/474 529/291/476 528/292/475 +f 530/292/477 528/292/475 529/291/476 +f 529/291/476 531/291/478 530/292/477 +f 532/292/479 530/292/477 531/291/478 +f 531/291/478 533/289/480 532/292/479 +f 534/290/481 532/292/479 533/289/480 +f 533/289/480 519/287/466 534/290/481 +f 521/288/468 534/290/481 519/287/466 +f 535/293/482 536/294/482 537/293/482 +f 537/293/482 536/294/482 538/294/482 +f 536/294/482 539/295/482 538/294/482 +f 538/294/482 539/295/482 540/295/482 +f 540/295/482 539/295/482 541/296/482 +f 542/297/482 540/295/482 541/296/482 +f 543/293/483 544/293/483 545/294/483 +f 544/293/483 546/294/483 545/294/483 +f 545/294/483 546/294/483 547/295/483 +f 546/294/483 548/295/483 547/295/483 +f 547/295/483 548/295/483 549/296/483 +f 548/295/483 550/297/483 549/296/483 +f 533/298/484 531/299/484 519/300/484 +f 519/300/484 531/299/484 523/301/484 +f 531/299/484 527/302/484 523/301/484 +f 523/301/484 527/302/484 525/303/484 +f 520/300/484 519/300/484 523/301/484 +f 530/303/485 532/301/485 528/302/485 +f 532/301/485 521/300/485 528/302/485 +f 521/300/485 524/299/485 528/302/485 +f 522/298/485 524/299/485 521/300/485 +f 534/300/485 521/300/485 532/301/485 +f 551/304/486 552/305/486 553/306/486 +f 552/305/486 554/307/486 553/306/486 +f 555/308/486 554/307/486 552/305/486 +f 556/304/487 557/309/487 558/310/487 +f 558/310/487 557/309/487 559/311/487 +f 557/309/487 560/308/487 559/311/487 +f 561/312/488 515/312/488 562/312/488 +f 517/312/488 562/312/488 515/312/488 +f 563/313/489 561/312/489 564/313/489 +f 562/312/489 564/313/489 561/312/489 +f 516/314/490 563/314/490 518/314/490 +f 564/314/490 518/314/490 563/314/490 +f 565/315/482 566/316/482 567/317/482 +f 568/318/482 567/317/482 566/316/482 +f 569/316/483 570/318/483 571/315/483 +f 572/317/483 571/315/483 570/318/483 +f 568/319/465 566/286/465 569/312/465 +f 570/314/465 569/312/465 566/286/465 +f 567/313/488 568/313/488 571/313/488 +f 569/313/488 571/313/488 568/313/488 +f 565/312/489 567/312/489 572/312/489 +f 571/312/489 572/312/489 567/312/489 +f 566/320/490 565/320/490 570/320/490 +f 572/320/490 570/320/490 565/320/490 +f 540/321/491 542/322/491 548/296/491 +f 550/323/491 548/296/491 542/322/491 +f 538/324/492 540/325/492 546/321/492 +f 548/322/492 546/321/492 540/325/492 +f 537/326/493 538/324/494 544/327/495 +f 546/321/496 544/327/495 538/324/494 +f 535/296/497 537/321/498 543/296/499 +f 544/321/499 543/296/499 537/321/498 +f 536/328/488 535/322/488 545/328/488 +f 543/322/488 545/328/488 535/322/488 +f 539/327/500 536/328/500 547/327/500 +f 545/328/500 547/327/500 536/328/500 +f 541/296/501 539/296/501 549/323/501 +f 547/323/501 549/323/501 539/296/501 +f 559/329/502 560/330/502 553/329/502 +f 551/330/502 553/329/502 560/330/502 +f 553/331/503 554/332/503 559/331/503 +f 558/332/503 559/331/503 554/332/503 +f 554/333/504 555/332/504 558/334/504 +f 556/329/504 558/334/504 555/332/504 +f 557/335/505 556/331/505 552/336/505 +f 555/337/505 552/336/505 556/331/505 +f 552/336/506 551/338/506 557/335/506 +f 560/332/506 557/335/506 551/338/506 +f 528/302/485 524/299/485 526/339/485 +f 563/315/482 516/316/482 561/317/482 +f 515/318/482 561/317/482 516/316/482 +f 517/316/483 518/318/483 562/315/483 +f 564/317/483 562/315/483 518/318/483 +f 529/339/484 527/302/484 531/299/484 +f 573/340/507 574/341/507 575/342/507 +f 576/343/507 577/344/507 578/345/507 +f 577/344/507 574/341/507 578/345/507 +f 579/346/507 574/341/507 577/344/507 +f 575/342/507 574/341/507 579/346/507 +f 580/347/507 575/342/507 579/346/507 +f 578/345/507 574/341/507 581/348/507 +f 579/349/508 582/350/509 580/351/510 +f 583/352/511 580/351/510 582/350/509 +f 580/351/510 583/352/511 575/353/512 +f 584/354/513 575/353/512 583/352/511 +f 575/353/512 584/354/513 573/355/514 +f 585/356/515 573/355/514 584/354/513 +f 573/355/514 585/356/515 574/357/516 +f 586/358/517 574/357/516 585/356/515 +f 574/357/516 586/358/517 581/355/518 +f 587/356/519 581/355/518 586/358/517 +f 581/355/518 587/356/519 578/353/520 +f 588/354/521 578/353/520 587/356/519 +f 578/353/520 588/354/521 576/351/522 +f 589/352/523 576/351/522 588/354/521 +f 576/351/522 589/352/523 577/349/524 +f 590/350/525 577/349/524 589/352/523 +f 577/349/524 590/350/525 591/359/526 +f 592/360/527 591/359/526 590/350/525 +f 591/359/526 592/360/527 593/361/528 +f 594/362/529 593/361/528 592/360/527 +f 593/361/528 594/362/529 595/359/530 +f 596/360/531 595/359/530 594/362/529 +f 595/359/530 596/360/531 579/349/508 +f 582/350/509 579/349/508 596/360/531 +f 596/360/531 597/363/532 582/350/509 +f 598/364/533 582/350/509 597/363/532 +f 582/350/509 598/364/533 583/352/511 +f 599/365/534 583/352/511 598/364/533 +f 583/352/511 599/365/534 584/354/513 +f 600/366/535 584/354/513 599/365/534 +f 584/354/513 600/366/535 585/356/515 +f 601/367/536 585/356/515 600/366/535 +f 585/356/515 601/367/536 586/358/517 +f 602/368/537 586/358/517 601/367/536 +f 586/358/517 602/368/537 587/356/519 +f 603/367/538 587/356/519 602/368/537 +f 587/356/519 603/367/538 588/354/521 +f 604/366/539 588/354/521 603/367/538 +f 588/354/521 604/366/539 589/352/523 +f 605/365/540 589/352/523 604/366/539 +f 589/352/523 605/365/540 590/350/525 +f 606/364/541 590/350/525 605/365/540 +f 590/350/525 606/364/541 592/360/527 +f 607/363/542 592/360/527 606/364/541 +f 592/360/527 607/363/542 594/362/529 +f 608/369/543 594/362/529 607/363/542 +f 594/362/529 608/369/543 596/360/531 +f 597/363/532 596/360/531 608/369/543 +f 604/344/544 603/370/544 605/343/544 +f 605/343/544 603/370/544 607/348/544 +f 607/348/544 603/370/544 599/347/544 +f 597/340/544 607/348/544 599/347/544 +f 598/342/544 597/340/544 599/347/544 +f 608/341/544 607/348/544 597/340/544 +f 606/345/544 605/343/544 607/348/544 +f 591/370/507 593/371/507 577/344/507 +f 593/371/507 579/346/507 577/344/507 +f 595/372/507 579/346/507 593/371/507 +f 600/346/544 599/347/544 601/372/544 +f 599/347/544 603/370/544 601/372/544 +f 601/372/544 603/370/544 602/371/544 +# 162 faces + +# +# object P_51_Mustang_Hull +# + +v -2.18 8.58 9.73 +v -2.30 8.86 6.02 +v -2.39 8.59 9.73 +v -3.01 6.76 9.95 +v -3.00 7.11 6.05 +v -2.52 8.87 6.26 +v -3.01 7.30 3.85 +v -2.47 9.05 4.06 +v -2.46 9.23 1.97 +v -2.94 7.47 1.76 +v -2.64 7.71 -0.97 +v -2.18 9.48 -0.86 +v -1.61 9.68 -3.39 +v -2.16 7.97 -4.05 +v -1.03 9.75 -4.33 +v -1.12 8.59 -5.66 +v 0.11 9.80 -4.96 +v -0.16 8.78 -6.15 +v 0.64 8.86 -6.31 +v 0.67 9.81 -5.10 +v 1.22 9.79 -4.97 +v 1.42 8.77 -6.17 +v 2.36 8.56 -5.69 +v 2.34 9.73 -4.36 +v 3.35 7.92 -4.07 +v 2.94 9.65 -3.40 +v 3.68 7.66 -1.02 +v 3.37 9.43 -0.91 +v 3.56 9.19 1.92 +v 3.88 7.42 1.70 +v 3.89 7.24 3.80 +v 3.50 9.01 4.01 +v 3.48 8.82 6.21 +v 3.80 7.05 6.00 +v 3.24 8.55 9.69 +v 3.68 6.70 9.89 +v 3.42 6.70 9.89 +v 3.02 8.54 9.69 +v 3.54 7.05 5.77 +v 3.25 8.81 5.98 +v 3.62 7.24 3.66 +v 3.27 9.00 3.86 +v 3.32 9.19 1.84 +v 3.62 7.42 1.64 +v 3.43 7.66 -0.98 +v 3.15 9.44 -0.88 +v 2.76 9.66 -3.28 +v 3.14 7.93 -3.92 +v 2.21 9.73 -4.21 +v 2.21 8.57 -5.48 +v 1.17 9.80 -4.74 +v 1.35 8.78 -5.89 +v 0.63 8.87 -6.03 +v 0.66 9.82 -4.87 +v 0.14 9.81 -4.73 +v -0.11 8.79 -5.88 +v -1.00 8.60 -5.46 +v -0.91 9.76 -4.19 +v -1.97 7.97 -3.90 +v -1.45 9.69 -3.27 +v -2.41 7.71 -0.94 +v -1.97 9.47 -0.84 +v -2.23 9.23 1.89 +v -2.68 7.47 1.69 +v -2.76 7.29 3.71 +v -2.25 9.05 3.90 +v -2.75 7.10 5.82 +v -2.76 6.75 9.94 +v -2.84 6.73 10.23 +v -0.81 12.12 9.64 +v -3.12 6.71 10.24 +v -1.01 12.45 9.62 +v 2.05 12.10 9.61 +v 2.28 12.42 9.59 +v 3.57 6.66 10.17 +v 3.86 6.66 10.17 +v 3.58 6.71 9.84 +v 2.05 12.09 9.29 +v -0.81 12.12 9.32 +v -2.83 6.78 9.90 +v 3.86 6.71 9.84 +v 2.28 12.42 9.26 +v -1.00 12.44 9.30 +v -3.12 6.76 9.90 +v 4.66 -1.79 -1.03 +v 4.25 -0.21 1.79 +v 5.11 -0.16 2.78 +v -3.87 -3.05 -1.87 +v -4.48 -1.72 -0.95 +v -3.60 -2.34 -4.87 +v -3.65 -3.03 1.13 +v -3.68 -1.87 2.11 +v -2.89 -2.82 3.93 +v -2.58 -1.80 4.33 +v -1.34 -1.85 5.56 +v -1.63 -3.21 5.62 +v -0.01 -1.92 6.45 +v -0.09 -3.54 6.63 +v 1.51 -3.23 5.59 +v 1.35 -1.87 5.53 +v 2.85 -2.86 3.87 +v 2.62 -1.84 4.28 +v 3.78 -1.93 2.04 +v 3.66 -3.09 1.06 +v 3.95 -3.11 -1.94 +v 3.82 -2.40 -4.94 +v 3.26 -4.73 -4.88 +v 3.54 -4.03 -1.52 +v 3.30 -4.95 -1.65 +v 2.58 -5.40 -4.82 +v 3.39 -3.91 1.68 +v 2.74 -3.53 4.26 +v 2.35 -3.57 6.63 +v 3.21 -4.15 4.04 +v 3.01 -4.04 6.65 +v 3.11 -5.17 4.28 +v 2.84 -5.09 6.73 +v 2.20 -5.93 4.14 +v 1.97 -5.61 6.76 +v -0.20 -5.90 6.80 +v 3.21 -5.14 1.70 +v 2.63 -5.80 -1.55 +v 2.42 -5.98 1.71 +v -2.81 -5.76 -1.50 +v -3.47 -4.44 -1.52 +v -2.64 -5.36 -4.77 +v -3.41 -5.09 1.76 +v -2.70 -5.94 1.75 +v -3.37 -5.12 4.34 +v -2.53 -5.90 4.18 +v -3.16 -5.04 6.79 +v -2.34 -5.58 6.80 +v -0.18 -6.23 2.91 +v 1.26 -6.32 1.56 +v 1.15 -6.28 -1.34 +v 1.38 -5.76 -5.00 +v 2.45 -4.83 -8.13 +v -3.37 -4.10 4.10 +v -3.47 -3.86 1.74 +v -2.85 -3.49 4.32 +v -3.10 -2.40 -8.95 +v -2.97 -3.71 -8.45 +v -3.25 -4.68 -4.82 +v -2.52 -3.54 6.68 +v -3.23 -3.99 6.71 +v 2.64 7.92 -7.83 +v 0.66 8.54 -8.04 +v 1.70 8.81 -6.12 +v 0.68 8.16 -10.79 +v -1.38 7.95 -7.79 +v -1.27 7.48 -10.79 +v -1.94 6.54 -10.08 +v -1.76 6.04 -15.12 +v -2.35 4.01 -14.71 +v -2.68 4.18 -10.15 +v -2.65 0.18 -14.70 +v -3.13 0.11 -9.48 +v -2.51 -1.75 -14.35 +v -2.17 -2.56 -13.63 +v -2.37 -4.79 -8.08 +v 0.70 7.68 -15.64 +v -0.96 7.14 -15.33 +v 3.16 -3.76 -8.51 +v 2.57 -2.60 -13.68 +v 0.19 -2.88 -13.74 +v 0.33 -0.98 -18.94 +v -1.92 -1.05 -18.81 +v -2.26 -0.55 -18.26 +v -2.16 1.12 -18.78 +v -1.95 3.55 -18.87 +v -1.41 5.63 -19.24 +v -0.63 6.76 -19.48 +v -1.82 0.96 -23.00 +v -1.73 -0.34 -22.73 +v 0.33 -2.07 -22.55 +v 2.58 -1.08 -18.86 +v 3.00 -1.79 -14.41 +v 3.43 -2.45 -9.01 +v 3.70 0.06 -9.54 +v 3.90 0.33 -5.99 +v 3.73 5.02 -6.62 +v 3.92 4.94 -3.00 +v 3.27 7.20 -5.88 +v 3.38 7.92 -4.06 +v 2.45 8.56 -5.59 +v -1.49 3.34 -25.54 +v -1.66 1.28 -25.54 +v -1.68 3.36 -23.04 +v -1.44 -0.13 -25.65 +v 0.43 -0.87 -25.61 +v 2.56 -0.37 -22.78 +v 2.94 -0.59 -18.32 +v 3.33 0.13 -14.76 +v 3.65 4.13 -10.21 +v 3.13 6.50 -10.13 +v 2.56 7.45 -10.83 +v 3.39 3.96 -14.77 +v 3.02 1.08 -18.84 +v -1.36 0.20 -28.16 +v 0.48 -0.62 -27.84 +v 2.38 -0.16 -25.69 +v 2.79 0.93 -23.05 +v 3.03 3.51 -18.93 +v 3.01 6.01 -15.17 +v 2.31 7.11 -15.36 +v 2.69 5.60 -19.28 +v 2.87 3.33 -23.10 +v 2.72 1.24 -25.59 +v 2.39 0.17 -28.20 +v 0.56 -0.18 -32.31 +v -1.02 0.49 -32.48 +v -1.45 1.45 -28.24 +v -1.11 1.83 -32.23 +v -1.22 3.44 -28.23 +v -0.97 3.60 -32.20 +v -0.54 0.61 -36.78 +v -0.65 1.57 -37.11 +v -0.39 0.69 -37.86 +v -0.54 1.56 -37.94 +v -0.40 3.34 -38.12 +v -0.52 3.41 -37.33 +v -0.81 4.47 -34.00 +v -0.80 3.33 -33.98 +v -1.08 4.53 -32.20 +v -1.18 4.91 -28.36 +v -1.43 5.01 -25.55 +v -1.39 5.21 -23.17 +v -1.29 5.80 -25.86 +v -0.82 5.27 -34.30 +v -1.17 5.60 -32.19 +v -0.67 5.70 -35.24 +v -1.25 5.89 -30.06 +v -0.71 6.30 -31.82 +v -1.23 6.04 -28.10 +v -0.11 6.62 -25.95 +v -0.61 6.31 -23.30 +v -0.34 5.20 -38.31 +v 0.09 7.37 -36.51 +v 0.29 7.13 -38.50 +v 0.20 8.38 -37.33 +v 0.34 8.23 -38.61 +v 0.86 15.56 -39.24 +v 0.26 8.62 -35.31 +v 0.18 7.65 -34.16 +v 0.30 8.02 -31.06 +v 0.74 7.30 -20.27 +v 2.04 6.74 -19.51 +v 1.68 6.61 -25.97 +v 2.08 6.29 -23.33 +v 2.78 5.77 -25.91 +v 2.84 4.97 -25.60 +v 2.67 4.88 -28.41 +v 2.57 3.42 -28.27 +v 2.44 3.57 -32.24 +v 2.41 1.80 -32.27 +v 2.28 1.75 -33.92 +v 2.14 0.64 -33.77 +v 1.86 0.59 -36.81 +v 0.59 -0.02 -33.73 +v 0.65 0.31 -37.01 +v 2.30 3.31 -34.01 +v 2.63 4.50 -32.24 +v 2.42 4.44 -34.04 +v 2.83 5.57 -32.24 +v 1.89 16.66 -36.52 +v 1.85 15.87 -36.07 +v 1.97 16.49 -38.45 +v 1.95 15.68 -38.16 +v 1.92 15.55 -39.26 +v 1.73 8.61 -35.34 +v 1.85 8.37 -37.37 +v 1.68 7.64 -34.19 +v 1.83 7.36 -36.54 +v 2.41 6.27 -31.86 +v 2.42 5.67 -35.28 +v 2.88 5.86 -30.11 +v 2.51 5.25 -34.34 +v 2.12 3.39 -37.36 +v 2.07 1.55 -37.14 +v 2.81 6.01 -28.14 +v 1.48 8.01 -31.09 +v 0.89 8.76 -29.21 +v 1.54 8.93 -32.66 +v 0.96 9.49 -30.87 +v 1.34 15.98 -35.15 +v 0.84 15.88 -36.04 +v 0.90 16.67 -36.50 +v 0.87 16.50 -38.43 +v 0.81 15.69 -38.13 +v 0.92 16.38 -39.42 +v 0.38 8.94 -32.64 +v 0.96 17.20 -36.78 +v 1.38 16.76 -35.70 +v 1.06 16.91 -39.48 +v 1.94 16.37 -39.44 +v 1.94 16.37 -39.43 +v 1.94 16.28 -39.43 +v 1.85 16.90 -39.49 +v 1.89 17.19 -36.80 +v 1.41 17.28 -36.06 +v 1.45 17.57 -37.12 +v 1.48 17.32 -39.52 +v 1.44 17.63 -36.65 +v 1.99 1.54 -37.97 +v 1.75 0.67 -37.88 +v 2.02 3.32 -38.14 +v 2.14 5.18 -38.33 +v 1.69 7.13 -38.52 +v 1.75 8.22 -38.63 +v 0.67 0.46 -37.85 +v 3.86 7.51 0.69 +v 3.95 4.68 1.12 +v 3.90 7.06 5.85 +v 3.95 4.60 6.04 +v 3.79 6.68 10.01 +v 3.87 4.45 9.55 +v 3.70 6.44 11.84 +v 3.81 3.46 11.93 +v 3.68 6.42 15.10 +v 3.73 4.91 15.20 +v 3.73 5.37 19.12 +v 3.69 2.76 19.65 +v 3.60 2.71 23.29 +v 3.53 0.63 23.15 +v 3.34 0.90 26.42 +v 3.07 -0.41 26.45 +v 2.86 1.14 31.85 +v 1.48 -0.38 32.12 +v 3.83 2.01 9.53 +v 3.89 1.66 6.29 +v 4.03 1.15 1.42 +v 4.05 0.52 -2.36 +v 4.15 -0.95 -1.80 +v 4.21 0.67 6.43 +v 4.10 1.18 9.55 +v 4.11 1.23 12.19 +v 3.73 2.28 15.62 +v 0.99 0.57 36.00 +v -0.28 -0.63 32.46 +v -0.28 0.36 36.21 +v -1.53 0.59 36.02 +v -2.00 -0.36 32.15 +v -3.23 1.19 31.90 +v -3.45 -0.36 26.51 +v -3.60 0.95 26.49 +v -3.73 0.69 23.22 +v -3.61 2.76 23.36 +v -3.60 2.82 19.72 +v -3.38 5.42 19.19 +v -3.33 4.97 15.27 +v -3.14 6.47 15.16 +v -3.46 3.51 12.00 +v -3.08 6.49 11.90 +v -3.37 4.51 9.62 +v -3.10 6.74 10.07 +v -2.61 -1.47 26.73 +v -0.26 -1.79 26.94 +v -3.76 -0.41 24.24 +v -3.32 -1.40 24.00 +v -2.16 -1.98 24.36 +v -0.25 -2.12 24.38 +v 2.12 -1.51 26.69 +v 2.91 -1.45 23.95 +v 3.44 -0.47 24.18 +v 1.68 -2.00 24.32 +v -3.35 4.66 6.11 +v -3.06 7.12 5.92 +v -3.22 4.74 1.19 +v -2.85 7.57 0.76 +v -3.06 5.00 -2.93 +v -2.21 7.96 -4.00 +v -2.13 7.24 -5.83 +v -1.19 8.59 -5.55 +v -0.40 8.83 -6.10 +v 0.66 8.89 -6.31 +v -2.77 5.07 -6.56 +v -3.39 0.39 -5.92 +v -3.61 0.58 -2.29 +v -3.64 1.21 1.49 +v -3.57 1.72 6.36 +v -3.56 2.07 9.60 +v -3.87 -0.89 -1.73 +v -3.99 -0.15 1.87 +v -3.99 0.73 6.51 +v -3.91 1.24 9.63 +v -3.98 1.29 12.27 +v -3.58 2.34 15.69 +v 3.48 8.59 10.06 +v 3.42 7.85 11.79 +v 3.40 7.97 12.78 +v 3.48 7.69 15.11 +v 3.72 6.84 18.67 +v 3.66 5.67 23.35 +v 3.50 2.82 26.85 +v 3.33 3.01 31.94 +v 2.17 1.58 35.93 +v 2.97 3.24 35.96 +v 1.87 2.09 38.21 +v 2.20 3.58 38.12 +v 3.30 5.02 36.17 +v 0.83 1.30 38.26 +v 2.01 3.59 38.71 +v 2.70 5.55 38.59 +v 3.26 6.60 35.87 +v 2.69 6.79 38.51 +v 2.56 8.39 35.96 +v 2.08 8.17 38.43 +v 2.14 8.94 35.78 +v 1.33 8.81 38.39 +v 1.17 9.51 35.68 +v 0.66 9.21 38.36 +v 0.16 9.58 35.68 +v 0.11 9.29 38.36 +v -0.45 9.22 38.37 +v -0.86 9.52 35.70 +v -1.16 8.83 38.41 +v -1.88 8.97 35.82 +v -1.96 8.20 38.46 +v -2.36 8.43 36.01 +v -0.94 9.87 31.34 +v -0.99 10.19 26.34 +v 0.31 10.34 26.77 +v 0.24 10.10 31.35 +v 1.40 9.85 31.31 +v 2.43 9.42 31.16 +v 2.98 8.72 31.28 +v 3.55 6.98 31.31 +v 3.30 9.02 26.28 +v 2.49 9.75 26.24 +v 2.79 9.81 22.99 +v 1.60 10.17 26.31 +v 1.80 10.21 23.30 +v 2.05 10.21 20.89 +v 0.35 10.44 23.69 +v 0.39 10.50 21.00 +v 0.42 10.41 17.76 +v 0.46 10.45 15.10 +v -1.03 10.08 15.41 +v -3.29 7.11 21.42 +v -3.28 7.11 23.77 +v -2.82 8.99 21.40 +v -2.82 8.71 18.17 +v -2.21 9.52 17.94 +v -2.03 9.13 15.29 +v -2.22 8.81 13.72 +v -1.24 9.98 14.02 +v 0.48 10.47 13.79 +v 1.91 10.06 15.38 +v 2.10 10.07 18.02 +v 2.87 9.77 21.15 +v 3.35 9.04 23.40 +v 3.64 6.98 26.77 +v -3.23 6.90 18.74 +v -3.39 5.73 23.42 +v -2.82 7.74 15.17 +v -2.65 8.02 12.84 +v -3.59 2.87 26.92 +v -2.66 7.90 11.85 +v -2.61 8.64 10.12 +v -2.70 6.83 38.56 +v -3.20 6.62 35.03 +v -2.83 5.59 38.64 +v -3.42 5.07 36.23 +v -2.33 3.62 38.75 +v -2.50 3.62 38.16 +v -3.25 3.29 36.02 +v -2.32 2.13 38.25 +v -2.60 1.62 35.98 +v -1.35 1.32 38.28 +v -3.53 3.06 32.00 +v -3.56 5.54 26.97 +v -3.59 4.96 32.12 +v -3.34 7.04 26.84 +v -2.77 9.09 23.46 +v -2.17 9.81 21.20 +v -1.29 10.09 18.05 +v -1.30 10.23 20.93 +v -1.11 10.24 23.32 +v -2.80 9.06 26.34 +v -2.13 9.85 23.04 +v -1.92 9.78 26.28 +v -2.63 8.76 31.33 +v -3.37 7.03 31.38 +v -2.01 9.46 31.20 +v 3.57 4.91 32.06 +v 3.72 5.49 26.90 +v 3.66 7.05 23.70 +v 3.73 7.06 21.36 +v 3.44 8.94 21.34 +v 3.50 8.66 18.11 +v 2.97 9.48 17.90 +v 2.82 9.09 15.25 +v 3.02 8.77 13.67 +v 2.14 9.95 13.99 +v -8.03 6.05 -27.42 +v -4.52 6.07 -27.32 +v -8.03 5.97 -28.86 +v -11.48 5.96 -28.73 +v -11.12 5.68 -31.09 +v -13.81 5.66 -30.77 +v -14.13 5.91 -28.57 +v -15.24 5.49 -30.33 +v -15.27 5.57 -28.02 +v -14.18 5.73 -27.39 +v -11.49 6.01 -27.59 +v -11.64 5.76 -26.95 +v -8.48 5.76 -26.64 +v -5.05 5.77 -26.30 +v -2.22 5.77 -26.09 +v -1.90 6.05 -27.63 +v -1.72 5.88 -29.69 +v -4.26 5.97 -29.14 +v -4.42 5.63 -31.75 +v -7.79 5.68 -31.43 +v -1.74 5.55 -32.08 +v 4.34 6.11 32.28 +v 4.06 6.10 32.66 +v 4.63 6.10 32.53 +v 4.17 6.09 33.03 +v 4.75 5.76 32.68 +v 4.21 5.75 33.23 +v 4.60 5.42 32.56 +v 4.14 5.41 33.05 +v 4.31 5.43 32.30 +v 4.02 5.42 32.69 +v 4.19 5.77 32.16 +v 3.98 5.77 32.49 +v 3.79 5.77 32.46 +v 3.80 6.10 32.64 +v 3.78 6.10 33.03 +v 3.75 5.75 33.24 +v 3.74 5.42 33.06 +v 3.76 5.42 32.67 +v 13.07 5.77 -29.01 +v 12.75 5.49 -31.56 +v 9.62 5.83 -29.06 +v 9.43 5.54 -31.80 +v 5.87 5.90 -29.25 +v 6.06 5.54 -32.00 +v 3.33 5.84 -29.75 +v 3.46 6.01 -27.69 +v 3.72 5.73 -26.16 +v 6.08 5.99 -27.44 +v 6.55 5.68 -26.43 +v 9.59 5.91 -27.62 +v 9.99 5.62 -26.85 +v 13.05 5.81 -27.87 +v 13.16 5.56 -27.23 +v 15.71 5.50 -27.73 +v 15.71 5.68 -28.91 +v 3.39 5.51 -32.16 +v 16.80 5.32 -28.38 +v 16.83 5.24 -30.69 +v 15.57 5.42 -31.45 +v 16.72 5.01 -33.40 +v 15.72 4.99 -33.73 +v 2.75 5.18 -23.22 +v 2.74 3.31 -25.59 +v 2.61 1.41 -28.29 +v 2.21 0.46 -32.52 +v -0.90 0.66 -33.74 +v -0.94 1.77 -33.88 +v -3.75 5.44 34.55 +v -3.73 5.78 34.73 +v -4.14 5.45 34.56 +v -4.02 5.45 34.19 +v -4.29 5.46 33.81 +v -4.13 5.81 33.67 +v -3.94 5.80 33.99 +v -4.26 6.14 33.78 +v -3.98 6.13 34.16 +v -4.55 6.14 34.05 +v -4.11 6.13 34.53 +v -4.72 5.80 34.19 +v -4.19 5.78 34.73 +v -4.59 5.46 34.07 +v -3.71 6.12 34.53 +v -3.72 6.13 34.14 +v -3.74 5.80 33.96 +v -3.76 5.45 34.16 +v -4.87 -0.09 2.87 +v -4.96 0.33 6.76 +v -4.97 0.69 9.85 +v -4.97 0.81 12.34 +v -4.02 1.40 15.81 +v -5.09 0.90 16.22 +v -4.95 0.55 19.82 +v -3.90 1.32 19.99 +v -4.83 0.16 22.21 +v -4.59 -0.55 23.22 +v 5.14 0.25 6.67 +v 6.54 -0.19 3.45 +v 6.70 0.02 6.36 +v 5.11 0.61 9.76 +v 6.75 0.38 9.22 +v 5.06 0.73 12.25 +v 6.64 0.56 12.08 +v 5.08 0.82 16.12 +v 6.67 0.70 16.38 +v 6.69 0.53 18.92 +v 4.83 0.58 19.72 +v 5.76 -0.33 22.01 +v 4.60 0.08 22.12 +v 4.27 -0.62 23.14 +v 6.08 -0.69 22.43 +v 8.22 -0.70 21.64 +v -2.94 -4.05 6.84 +v -2.50 -4.14 5.16 +v -2.29 -3.64 6.81 +v -1.95 -3.79 5.13 +v -0.10 -3.68 6.76 +v 2.10 -3.67 6.76 +v 1.79 -3.82 5.09 +v 2.71 -4.09 6.78 +v 2.31 -4.18 5.11 +v -2.69 8.37 10.10 +v -1.01 12.37 9.64 +v -2.40 8.38 10.10 +v -0.82 12.04 9.66 +v 2.27 12.34 9.61 +v 2.05 12.02 9.63 +v 3.51 8.33 10.04 +v 3.22 8.33 10.04 +v 3.84 1.26 19.92 +v 4.07 1.34 15.73 +v -4.70 -0.90 3.35 +v -4.70 -1.20 6.48 +v -6.30 -0.85 3.61 +v -6.56 -1.14 6.50 +v -12.47 -0.77 4.38 +v -12.73 -0.99 6.36 +v -6.67 -1.53 9.41 +v -14.07 -1.37 9.24 +v -6.52 -1.75 12.40 +v -13.54 -1.60 12.35 +v -6.88 -1.99 14.90 +v -14.82 -1.75 15.41 +v -7.22 -1.67 18.64 +v -4.86 -2.15 14.61 +v -4.82 -1.75 19.27 +v -3.62 -2.25 14.45 +v -3.44 -1.80 19.64 +v -1.88 -2.40 14.58 +v -1.67 -2.00 20.13 +v -0.19 -2.16 20.12 +v -3.22 -1.95 12.03 +v -4.78 -1.81 12.13 +v -4.74 -1.59 9.42 +v -2.95 -1.72 9.49 +v -1.52 -2.01 12.24 +v -0.12 -2.14 14.54 +v 1.61 -2.42 14.55 +v 1.30 -2.02 20.10 +v 3.10 -1.85 19.57 +v 3.08 -1.79 21.12 +v 4.47 -1.76 20.56 +v 3.43 -1.11 22.63 +v -0.09 -2.11 12.44 +v -2.90 -1.39 6.33 +v -1.41 -1.87 9.61 +v -0.05 -1.96 9.46 +v 1.31 -1.89 9.58 +v 1.35 -2.03 12.21 +v -1.47 -1.58 6.59 +v 1.48 -1.60 6.57 +v 4.85 -0.98 3.26 +v 6.45 -0.95 3.49 +v 4.75 -1.28 6.39 +v 6.61 -1.24 6.37 +v 4.68 -1.66 9.33 +v 6.61 -1.63 9.28 +v 4.63 -1.88 12.04 +v 6.36 -1.85 12.28 +v 4.61 -2.22 14.52 +v 6.63 -2.09 14.77 +v 6.91 -1.78 18.50 +v 4.50 -1.82 19.18 +v 7.17 -1.73 19.64 +v 3.37 -2.30 14.39 +v 3.06 -1.99 11.97 +v 2.87 -1.77 9.44 +v 2.93 -1.44 6.28 +v -0.21 -2.18 21.60 +v 1.16 -2.18 21.93 +v -13.50 -1.56 17.59 +v -7.50 -1.61 19.78 +v -4.83 -1.69 20.65 +v -3.45 -1.74 21.19 +v -1.59 -2.16 21.95 +v -3.78 -1.05 22.70 +v -14.13 -0.49 20.28 +v -8.50 -0.57 21.80 +v -6.38 -0.59 22.55 +v -6.57 0.66 12.21 +v -6.69 0.77 16.50 +v -13.44 0.66 12.23 +v -14.35 0.80 15.32 +v -6.79 0.64 19.05 +v -13.40 0.59 18.05 +v -6.02 -0.24 22.12 +v -14.04 0.46 9.14 +v -6.62 0.48 9.35 +v -6.54 0.12 6.49 +v -6.32 -0.09 3.57 +v -12.44 -0.05 4.34 +v -12.67 0.19 6.29 +v -2.87 -5.00 6.90 +v -2.45 -4.96 5.21 +v 2.56 -5.05 6.85 +v 2.18 -4.99 5.17 +v 1.76 -5.52 6.88 +v 1.50 -5.39 5.19 +v -0.19 -5.70 6.91 +v -2.13 -5.49 6.92 +v -1.81 -5.37 5.22 +v -3.14 5.42 35.50 +v -3.77 5.43 35.52 +v -3.16 5.24 35.02 +v -3.79 5.24 35.05 +v -3.34 5.42 26.54 +v -3.97 5.42 26.57 +v -3.34 5.62 26.05 +v -3.97 5.63 26.08 +v -3.93 6.43 26.05 +v -3.91 6.61 26.52 +v -3.30 6.42 26.02 +v -3.28 6.61 26.49 +v -3.73 6.43 35.00 +v -3.10 6.43 34.97 +v -3.73 6.23 35.49 +v -3.10 6.22 35.46 +v -3.88 5.93 27.60 +v -3.87 6.28 27.39 +v -4.34 5.93 27.59 +v -4.29 5.60 27.42 +v -4.74 5.61 26.94 +v -4.44 5.61 26.67 +v -4.17 5.60 27.05 +v -4.28 5.96 26.53 +v -4.09 5.95 26.85 +v -4.41 6.30 26.65 +v -4.13 6.29 27.02 +v -4.70 6.29 26.91 +v -4.26 6.28 27.39 +v -4.87 5.95 27.05 +v -3.87 6.28 27.00 +v -3.89 5.95 26.82 +v -3.91 5.60 27.03 +v -3.90 5.59 27.42 +v -1.21 9.64 14.41 +v -0.71 12.35 9.95 +v -1.44 9.65 14.42 +v -1.02 12.35 9.90 +v -1.45 9.34 14.15 +v -1.00 12.00 9.77 +v -1.22 9.34 14.15 +v -0.69 12.00 9.83 +v 2.22 12.32 9.86 +v 1.90 12.33 9.92 +v 2.27 9.62 14.38 +v 2.04 9.62 14.38 +v 2.17 11.98 9.74 +v 2.26 9.31 14.12 +v 1.85 11.98 9.80 +v 2.03 9.31 14.12 +v 0.81 -4.99 -22.81 +v -0.46 -4.98 -22.79 +v 0.82 -4.71 -23.17 +v -0.44 -4.70 -23.15 +v 0.89 -3.01 -22.29 +v -0.38 -3.00 -22.28 +v 0.96 -1.67 -22.95 +v -0.30 -1.66 -22.94 +v 0.96 -1.54 -22.03 +v -0.31 -1.53 -22.02 +v 0.89 -2.88 -21.51 +v -0.38 -2.87 -21.49 +v -1.47 -5.74 -4.97 +v -1.38 -6.26 -1.31 +v -1.57 -6.30 1.58 +v -0.12 -6.30 -1.26 +v -0.03 -5.59 -5.78 +v 0.03 -5.10 -8.16 +v 3.48 5.22 -27.47 +v 3.30 5.03 -29.46 +v 3.33 4.89 -32.33 +v 5.82 5.02 -29.12 +v 6.03 4.88 -32.03 +v 9.40 4.92 -31.81 +v 9.58 5.05 -28.94 +v 12.73 4.96 -31.49 +v 13.03 5.07 -28.91 +v 15.50 5.01 -31.28 +v 15.68 5.13 -28.83 +v 13.02 5.21 -27.78 +v 6.03 5.22 -27.32 +v 9.54 5.21 -27.51 +v -0.26 1.32 38.26 +v -15.08 5.26 -33.04 +v -14.07 5.22 -33.39 +v -14.09 5.21 -32.45 +v -13.95 5.24 -30.69 +v -14.16 5.36 -28.49 +v -11.51 5.26 -28.63 +v -11.52 5.40 -27.50 +v -8.05 5.35 -27.31 +v -4.55 5.31 -27.20 +v -1.99 5.26 -27.41 +v -1.77 5.07 -29.40 +v -1.73 4.93 -32.15 +v -4.31 5.09 -29.00 +v -8.06 5.19 -28.74 +v -4.44 4.96 -31.91 +v -7.82 5.05 -31.65 +v -11.33 5.14 -31.30 +v -1.04 1.63 37.01 +v 0.59 1.62 36.99 +v -1.77 2.24 36.99 +v -1.91 3.36 36.92 +v 1.37 2.21 36.96 +v 1.61 3.33 36.89 +v 2.64 -0.09 1.94 +v 2.34 6.46 -0.67 +v -2.37 -0.05 1.99 +v -1.39 6.49 -0.64 +v 2.56 -0.95 10.54 +v -2.59 -0.91 10.59 +v 2.52 4.84 11.25 +v -2.03 4.88 11.29 +v 2.59 6.63 11.43 +v -1.94 6.67 11.48 +v 0.49 10.12 11.77 +v 2.05 9.05 11.64 +v -1.17 9.07 11.67 +v 1.94 3.49 38.22 +v -2.26 3.52 38.26 +v -2.09 2.18 38.33 +v -1.23 1.46 38.36 +v 0.72 1.45 38.34 +v 1.65 2.15 38.30 +v -3.85 5.90 29.03 +v -3.83 6.25 28.83 +v -4.31 5.90 29.03 +v -4.26 5.57 28.86 +v -4.71 5.58 28.37 +v -4.41 5.58 28.11 +v -4.14 5.57 28.49 +v -4.25 5.93 27.97 +v -4.06 5.92 28.29 +v -4.38 6.27 28.08 +v -4.10 6.26 28.46 +v -4.67 6.26 28.35 +v -4.23 6.25 28.83 +v -4.84 5.92 28.49 +v -3.84 6.25 28.44 +v -3.86 5.92 28.26 +v -3.88 5.57 28.46 +v -3.87 5.56 28.85 +v -3.82 5.87 30.47 +v -3.80 6.22 30.26 +v -4.28 5.87 30.46 +v -4.23 5.54 30.29 +v -4.68 5.55 29.81 +v -4.38 5.55 29.54 +v -4.10 5.54 29.92 +v -4.22 5.90 29.40 +v -4.03 5.89 29.72 +v -4.35 6.24 29.52 +v -4.07 6.23 29.89 +v -4.64 6.23 29.78 +v -4.20 6.22 30.26 +v -4.80 5.89 29.92 +v -3.81 6.22 29.87 +v -3.83 5.89 29.69 +v -3.85 5.54 29.90 +v -3.84 5.53 30.29 +v -3.79 5.84 31.87 +v -3.78 6.19 31.66 +v -4.25 5.84 31.87 +v -4.20 5.51 31.69 +v -4.65 5.52 31.21 +v -4.35 5.52 30.95 +v -4.08 5.51 31.32 +v -4.19 5.87 30.80 +v -4.00 5.86 31.12 +v -4.32 6.21 30.92 +v -4.04 6.20 31.30 +v -4.61 6.20 31.18 +v -4.17 6.19 31.67 +v -4.78 5.86 31.33 +v -3.78 6.19 31.27 +v -3.80 5.86 31.09 +v -3.82 5.51 31.30 +v -3.81 5.50 31.69 +v -3.76 5.81 33.31 +v -3.74 6.16 33.10 +v -4.22 5.81 33.31 +v -4.17 5.48 33.13 +v -4.62 5.49 32.65 +v -4.32 5.49 32.38 +v -4.05 5.48 32.76 +v -4.16 5.84 32.24 +v -3.97 5.83 32.56 +v -4.29 6.17 32.36 +v -4.01 6.16 32.73 +v -4.58 6.17 32.62 +v -4.14 6.16 33.11 +v -4.75 5.83 32.77 +v -3.75 6.16 32.71 +v -3.77 5.83 32.53 +v -3.79 5.48 32.74 +v -3.78 5.47 33.13 +v 4.13 5.56 26.00 +v 4.09 5.36 26.49 +v 3.50 5.57 25.99 +v 3.46 5.36 26.48 +v 3.69 5.18 34.98 +v 3.06 5.19 34.96 +v 3.67 5.37 35.45 +v 3.04 5.37 35.44 +v 3.08 6.18 35.41 +v 3.71 6.17 35.42 +v 3.11 6.38 34.92 +v 3.74 6.38 34.93 +v 3.52 6.56 26.43 +v 4.15 6.55 26.45 +v 3.53 6.37 25.96 +v 4.16 6.37 25.97 +v 4.02 5.53 27.34 +v 4.41 5.53 27.34 +v 4.03 5.87 27.52 +v 4.49 5.87 27.51 +v 4.05 6.21 27.31 +v 4.45 6.21 27.31 +v 4.07 6.22 26.92 +v 4.33 6.22 26.94 +v 4.06 5.89 26.74 +v 4.26 5.88 26.77 +v 4.04 5.54 26.95 +v 4.30 5.54 26.97 +v 4.59 5.54 26.59 +v 4.87 5.54 26.85 +v 5.03 5.87 26.96 +v 4.90 6.22 26.82 +v 4.62 6.23 26.56 +v 4.46 5.89 26.45 +v 3.95 5.50 28.78 +v 4.34 5.50 28.78 +v 3.96 5.84 28.96 +v 4.42 5.84 28.95 +v 3.98 6.19 28.75 +v 4.38 6.18 28.75 +v 4.00 6.19 28.36 +v 4.26 6.19 28.38 +v 4.00 5.86 28.18 +v 4.19 5.85 28.21 +v 3.97 5.51 28.39 +v 4.23 5.51 28.41 +v 4.52 5.52 28.03 +v 4.80 5.51 28.28 +v 4.96 5.84 28.40 +v 4.83 6.19 28.26 +v 4.55 6.20 28.00 +v 4.39 5.86 27.88 +v 3.88 5.47 30.21 +v 4.27 5.47 30.21 +v 3.89 5.81 30.39 +v 4.35 5.81 30.38 +v 3.91 6.16 30.19 +v 4.31 6.15 30.18 +v 3.93 6.16 29.80 +v 4.19 6.16 29.81 +v 3.93 5.83 29.62 +v 4.12 5.82 29.64 +v 3.90 5.48 29.82 +v 4.16 5.48 29.84 +v 4.45 5.49 29.46 +v 4.73 5.48 29.72 +v 4.89 5.81 29.83 +v 4.77 6.16 29.69 +v 4.48 6.17 29.43 +v 4.32 5.83 29.32 +v 3.81 5.45 31.62 +v 4.21 5.44 31.61 +v 3.82 5.78 31.80 +v 4.28 5.78 31.79 +v 3.85 6.13 31.59 +v 4.24 6.12 31.59 +v 3.87 6.13 31.20 +v 4.12 6.13 31.22 +v 3.86 5.80 31.02 +v 4.05 5.80 31.05 +v 3.83 5.45 31.23 +v 4.09 5.45 31.25 +v 4.38 5.46 30.86 +v 4.67 5.45 31.12 +v 4.82 5.79 31.24 +v 4.70 6.13 31.09 +v 4.41 6.14 30.84 +v 4.26 5.80 30.72 +v 3.68 5.39 34.48 +v 4.07 5.38 34.48 +v 3.68 5.72 34.66 +v 4.14 5.72 34.65 +v 3.71 6.07 34.46 +v 4.10 6.06 34.45 +v 3.73 6.08 34.07 +v 3.99 6.07 34.08 +v 3.72 5.74 33.89 +v 3.91 5.74 33.91 +v 3.69 5.39 34.09 +v 3.95 5.39 34.11 +v 4.24 5.40 33.73 +v 4.53 5.39 33.99 +v 4.69 5.73 34.10 +v 4.56 6.07 33.96 +v 4.28 6.08 33.70 +v 4.12 5.74 33.59 +v 2.00 9.86 13.69 +v 0.48 10.50 13.49 +v 2.82 8.80 13.37 +v 3.16 8.00 12.53 +v 3.18 7.88 11.58 +v 3.25 8.63 9.91 +v 3.52 6.72 9.87 +v 3.62 7.10 5.87 +v 3.59 7.56 0.92 +v 3.15 7.97 -3.64 +v 2.31 8.62 -5.12 +v 1.61 8.87 -5.63 +v 0.65 8.95 -5.81 +v -0.32 8.88 -5.61 +v -1.05 8.64 -5.08 +v -1.99 8.01 -3.59 +v -2.58 7.61 0.98 +v -2.78 7.15 5.93 +v -2.82 6.77 9.93 +v -2.37 8.67 9.96 +v -2.41 7.93 11.63 +v -2.41 8.05 12.58 +v -2.01 8.84 13.42 +v -1.11 9.89 13.72 +v 2.65 -0.56 6.70 +v -2.55 -0.52 6.75 +v -2.25 3.17 2.89 +v 2.75 3.13 2.84 +v -1.08 9.58 0.57 +v 2.23 9.55 0.54 +v -2.17 3.24 6.44 +v 2.58 3.21 6.40 +v -2.27 0.09 6.82 +v 2.37 0.05 6.77 +v -1.09 9.25 -0.17 +v 2.22 9.22 -0.20 +v -1.96 -0.05 1.55 +v 2.19 -0.09 1.51 +v 3.50 8.34 10.37 +v 2.27 12.35 9.94 +v -1.02 12.37 9.97 +v -2.69 8.38 10.43 +v 3.22 8.34 10.37 +v 2.04 12.02 9.96 +v -0.82 12.04 9.99 +v -2.41 8.39 10.42 +v 1.01 7.38 -18.16 +v 1.12 12.77 -18.66 +v 0.72 7.40 -17.87 +v 0.98 12.78 -18.51 +v 0.43 7.39 -18.16 +v 0.84 12.77 -18.65 +v 0.72 7.38 -18.45 +v 0.98 12.77 -18.80 +v 15.64 4.97 -32.81 +# 1073 vertices + +vn 0.05 1.00 0.07 +vn -0.95 0.32 0.03 +vn -0.95 0.31 0.03 +vn -0.96 0.27 0.04 +vn -0.96 0.28 0.01 +vn -0.96 0.29 0.01 +vn -0.96 0.27 -0.04 +vn -0.96 0.27 -0.05 +vn -0.95 0.28 -0.12 +vn -0.96 0.26 -0.14 +vn -0.88 0.37 -0.28 +vn -0.88 0.40 -0.26 +vn -0.66 0.56 -0.49 +vn -0.59 0.64 -0.49 +vn -0.29 0.75 -0.59 +vn -0.31 0.76 -0.57 +vn 0.00 0.78 -0.62 +vn 0.00 0.79 -0.62 +vn 0.30 0.74 -0.60 +vn 0.32 0.75 -0.58 +vn 0.60 0.62 -0.50 +vn 0.69 0.52 -0.50 +vn 0.91 0.34 -0.25 +vn 0.91 0.30 -0.27 +vn 0.98 0.19 -0.09 +vn 0.98 0.18 -0.10 +vn 0.98 0.19 -0.01 +vn 0.98 0.18 -0.02 +vn 0.98 0.19 0.03 +vn 0.98 0.21 0.04 +vn 0.98 0.18 0.06 +vn 0.97 0.22 0.06 +vn 0.97 0.24 0.05 +vn -0.97 -0.22 -0.05 +vn -0.98 -0.20 -0.05 +vn -0.98 -0.17 -0.06 +vn -0.98 -0.16 -0.06 +vn -0.98 -0.18 -0.03 +vn -0.98 -0.19 -0.04 +vn -0.99 -0.17 0.01 +vn -0.99 -0.17 0.02 +vn -0.98 -0.18 0.08 +vn -0.98 -0.16 0.10 +vn -0.92 -0.28 0.27 +vn -0.92 -0.31 0.24 +vn -0.69 -0.51 0.51 +vn -0.62 -0.60 0.51 +vn -0.30 -0.73 0.62 +vn -0.33 -0.73 0.60 +vn -0.00 -0.77 0.64 +vn -0.00 -0.78 0.63 +vn 0.29 -0.74 0.61 +vn 0.32 -0.74 0.59 +vn 0.60 -0.62 0.50 +vn 0.67 -0.55 0.50 +vn 0.89 -0.38 0.25 +vn 0.89 -0.35 0.28 +vn 0.96 -0.26 0.11 +vn 0.96 -0.25 0.13 +vn 0.97 -0.26 0.04 +vn 0.97 -0.25 0.04 +vn 0.96 -0.26 -0.01 +vn 0.96 -0.28 -0.01 +vn 0.97 -0.25 -0.03 +vn 0.96 -0.29 -0.03 +vn 0.95 -0.30 -0.02 +vn 0.01 0.11 0.99 +vn 0.03 0.08 1.00 +vn 0.01 0.10 0.99 +vn -0.01 0.08 1.00 +vn -0.96 -0.28 -0.06 +vn -0.62 -0.79 -0.00 +vn -0.59 -0.81 -0.00 +vn 0.59 -0.81 0.01 +vn 0.54 -0.84 0.01 +vn 0.93 -0.36 -0.03 +vn 0.93 -0.36 -0.04 +vn -0.01 -0.10 -0.99 +vn 0.01 -0.08 -1.00 +vn -0.03 -0.08 -1.00 +vn 0.01 1.00 0.09 +vn -0.07 0.99 0.07 +vn -0.01 1.00 0.08 +vn -0.01 1.00 0.09 +vn 0.10 0.99 0.09 +vn 0.25 0.97 0.08 +vn -0.11 0.99 0.08 +vn 0.08 0.99 0.08 +vn -0.03 1.00 0.07 +vn -0.75 0.66 0.05 +vn 0.13 0.99 0.09 +vn 0.20 0.98 0.09 +vn -0.03 1.00 0.08 +vn -0.03 1.00 0.09 +vn 0.05 1.00 0.08 +vn 0.03 1.00 0.05 +vn 0.05 1.00 -0.03 +vn 0.08 0.99 -0.08 +vn 0.06 1.00 0.01 +vn 0.08 1.00 0.03 +vn 0.06 1.00 0.05 +vn -0.01 1.00 0.05 +vn -0.05 1.00 0.04 +vn -0.07 1.00 0.03 +vn -0.04 1.00 0.01 +vn -0.07 0.99 -0.09 +vn -0.04 1.00 -0.03 +vn -0.05 -0.95 -0.32 +vn -0.21 -0.95 -0.25 +vn -0.32 -0.93 -0.19 +vn -0.19 -0.98 -0.10 +vn -0.26 -0.93 0.26 +vn -0.13 -0.99 0.03 +vn 0.11 -0.99 0.04 +vn 0.21 -0.95 -0.25 +vn 0.31 -0.94 -0.16 +vn 0.18 -0.98 -0.08 +vn 0.25 -0.93 0.28 +vn 0.03 -0.95 -0.32 +vn 0.08 -0.99 -0.08 +vn -0.50 -0.86 -0.08 +vn -0.04 -1.00 -0.09 +vn -0.09 -0.99 -0.09 +vn -0.18 -0.98 -0.09 +vn -0.01 -1.00 -0.09 +vn -0.04 -0.99 -0.09 +vn 0.02 -1.00 -0.08 +vn -0.03 -1.00 -0.09 +vn 0.47 -0.88 -0.06 +vn -0.09 -0.99 -0.08 +vn -0.14 -0.99 -0.08 +vn -0.00 -1.00 -0.09 +vn 0.02 -1.00 -0.09 +vn 0.07 -0.99 -0.08 +vn 0.96 0.27 0.06 +vn 0.60 0.80 0.00 +vn 0.62 0.78 0.00 +vn -0.55 0.84 -0.01 +vn -0.59 0.81 -0.01 +vn -0.94 0.35 0.03 +vn -0.94 0.35 0.04 +vn 0.41 0.82 -0.40 +vn -0.95 -0.30 -0.05 +vn -1.00 0.04 -0.08 +vn -0.99 -0.05 -0.12 +vn -0.96 -0.21 0.16 +vn -0.94 -0.19 0.29 +vn -0.89 0.08 0.45 +vn -0.78 -0.00 0.62 +vn -0.65 0.14 0.75 +vn -0.63 0.51 0.59 +vn 0.02 0.13 0.99 +vn -0.01 0.11 0.99 +vn 0.65 0.46 0.61 +vn 0.66 0.08 0.75 +vn 0.89 -0.00 0.46 +vn 0.78 -0.07 0.62 +vn 0.91 -0.27 0.30 +vn 0.94 -0.30 0.18 +vn 1.00 -0.03 -0.06 +vn 0.92 -0.40 -0.02 +vn 0.99 -0.14 -0.10 +vn 0.86 -0.51 -0.10 +vn 0.95 -0.32 0.04 +vn 0.89 -0.45 -0.02 +vn 0.52 -0.85 -0.13 +vn 0.98 -0.12 0.13 +vn 0.84 0.44 0.32 +vn 0.51 0.86 0.05 +vn 0.96 0.25 0.09 +vn 0.91 0.41 0.06 +vn 0.88 -0.46 0.08 +vn 0.82 -0.55 0.13 +vn 0.38 -0.92 0.10 +vn 0.32 -0.94 0.14 +vn -0.01 -0.99 0.11 +vn 0.90 -0.43 0.03 +vn 0.56 -0.82 -0.06 +vn 0.52 -0.86 0.02 +vn -0.65 -0.76 -0.09 +vn -0.94 -0.35 -0.03 +vn -0.56 -0.82 -0.13 +vn -0.93 -0.36 0.00 +vn -0.55 -0.84 0.00 +vn -0.92 -0.40 0.06 +vn -0.41 -0.91 0.09 +vn -0.86 -0.50 0.12 +vn -0.35 -0.93 0.14 +vn -0.01 -1.00 0.08 +vn 0.13 -0.99 0.03 +vn 0.15 -0.99 -0.08 +vn 0.13 -0.98 -0.17 +vn 0.47 -0.84 -0.26 +vn -0.94 0.33 0.07 +vn -0.99 -0.03 0.11 +vn -0.81 0.51 0.29 +vn -0.99 -0.10 -0.13 +vn -0.92 -0.35 -0.19 +vn -0.89 -0.45 -0.10 +vn -0.48 0.87 0.03 +vn -0.89 0.46 0.04 +vn 0.66 0.74 -0.13 +vn 0.01 0.98 -0.20 +vn 0.46 0.85 -0.26 +vn 0.01 0.99 -0.13 +vn -0.62 0.77 -0.14 +vn -0.62 0.77 -0.12 +vn -0.91 0.41 -0.10 +vn -0.90 0.42 -0.10 +vn -0.98 0.17 -0.09 +vn -0.98 0.19 -0.08 +vn -1.00 -0.00 -0.09 +vn -1.00 0.03 -0.09 +vn -0.94 -0.31 -0.14 +vn -0.56 -0.78 -0.29 +vn -0.50 -0.82 -0.28 +vn 0.01 0.99 -0.10 +vn -0.60 0.79 -0.11 +vn 0.89 -0.42 -0.16 +vn 0.52 -0.81 -0.27 +vn -0.01 -0.93 -0.36 +vn -0.01 -1.00 0.00 +vn -0.58 -0.81 -0.14 +vn -0.97 -0.19 -0.14 +vn -0.99 0.05 -0.10 +vn -0.98 0.16 -0.09 +vn -0.91 0.40 -0.09 +vn -0.63 0.77 -0.09 +vn -1.00 -0.02 -0.08 +vn -0.87 -0.47 -0.16 +vn -0.02 -0.99 -0.17 +vn 0.54 -0.83 -0.11 +vn 0.91 -0.39 -0.12 +vn 0.98 -0.19 -0.11 +vn 1.00 -0.06 -0.06 +vn 1.00 -0.02 -0.06 +vn 0.99 0.13 -0.06 +vn 1.00 0.08 -0.05 +vn 0.91 0.39 -0.13 +vn 0.96 0.25 -0.14 +vn -0.99 0.07 -0.07 +vn -1.00 -0.03 -0.07 +vn -0.99 0.11 -0.06 +vn -0.77 -0.62 -0.11 +vn -0.01 -0.99 -0.17 +vn 0.83 -0.54 -0.13 +vn 0.95 -0.28 -0.11 +vn 0.99 -0.09 -0.07 +vn 0.99 0.10 -0.06 +vn 0.94 0.34 -0.08 +vn 0.66 0.74 -0.11 +vn 0.99 0.08 -0.07 +vn 1.00 -0.04 -0.08 +vn -0.81 -0.58 -0.11 +vn -0.01 -0.99 -0.11 +vn 0.74 -0.67 -0.08 +vn 0.99 -0.11 -0.05 +vn 1.00 0.07 -0.07 +vn 0.93 0.35 -0.09 +vn 0.63 0.77 -0.10 +vn 0.94 0.32 -0.07 +vn 1.00 0.02 -0.03 +vn 0.99 -0.12 -0.04 +vn 0.78 -0.63 -0.08 +vn -0.01 -0.99 -0.10 +vn -0.81 -0.57 -0.12 +vn -1.00 0.01 -0.08 +vn -1.00 0.02 -0.09 +vn -0.99 0.07 -0.08 +vn -1.00 -0.02 -0.07 +vn -0.75 -0.65 -0.12 +vn -0.99 -0.05 -0.11 +vn -0.72 -0.67 -0.16 +vn -0.99 -0.06 -0.13 +vn -0.99 0.05 -0.13 +vn -0.98 0.14 -0.14 +vn -0.99 -0.03 -0.13 +vn -0.99 0.03 -0.10 +vn -0.99 -0.09 -0.09 +vn -1.00 0.02 -0.07 +vn -0.99 0.15 0.00 +vn -0.93 0.36 -0.04 +vn -0.84 0.53 0.04 +vn -0.98 -0.05 -0.18 +vn -0.91 0.39 -0.13 +vn -0.97 0.20 -0.11 +vn -0.71 0.70 -0.06 +vn -0.80 0.60 -0.04 +vn -0.49 0.87 0.01 +vn -0.72 0.69 0.04 +vn -0.70 0.71 -0.03 +vn -0.98 0.16 -0.12 +vn -0.97 0.22 -0.07 +vn -1.00 0.07 -0.05 +vn -0.99 0.05 -0.11 +vn -0.99 0.10 0.02 +vn -0.95 0.32 0.00 +vn -0.94 0.32 0.07 +vn -0.00 1.00 -0.06 +vn 0.67 0.73 -0.07 +vn 0.75 0.65 0.06 +vn 0.84 0.55 -0.03 +vn 0.88 0.48 0.07 +vn 1.00 0.06 0.03 +vn 1.00 -0.07 -0.05 +vn 1.00 -0.03 -0.05 +vn 0.99 -0.11 -0.04 +vn 1.00 -0.07 -0.06 +vn 0.99 -0.08 -0.07 +vn 0.80 -0.59 -0.09 +vn 0.71 -0.70 -0.10 +vn -0.01 -0.99 -0.12 +vn 1.00 -0.06 -0.07 +vn 0.98 -0.18 -0.06 +vn 0.99 -0.13 -0.09 +vn 0.94 0.33 -0.11 +vn 0.96 0.13 0.26 +vn 0.96 0.11 0.26 +vn 0.99 0.13 0.01 +vn 1.00 -0.03 0.02 +vn 1.00 -0.03 -0.01 +vn 1.00 0.01 0.06 +vn 1.00 -0.02 -0.02 +vn 0.97 0.25 0.04 +vn 0.99 0.14 -0.03 +vn 0.83 0.55 -0.02 +vn 0.98 0.16 -0.09 +vn 0.75 0.66 -0.04 +vn 0.99 -0.11 -0.11 +vn 0.99 -0.05 -0.09 +vn 0.99 -0.14 -0.08 +vn 0.52 0.85 0.02 +vn 0.96 0.26 0.10 +vn 0.02 0.97 0.22 +vn 0.99 0.08 0.14 +vn 0.03 0.82 0.57 +vn 0.01 0.55 0.84 +vn -0.95 0.20 0.23 +vn -0.95 0.22 0.24 +vn -0.98 0.19 -0.06 +vn -1.00 0.07 -0.02 +vn -0.63 0.76 -0.13 +vn -0.98 0.18 0.11 +vn -0.98 0.17 -0.08 +vn -0.83 0.53 0.15 +vn 0.01 0.57 0.82 +vn -0.86 0.50 -0.08 +vn 1.00 -0.03 -0.02 +vn 1.00 0.03 -0.03 +vn 0.90 0.44 -0.05 +vn 0.87 0.46 0.16 +vn -0.06 0.74 0.67 +vn -0.06 1.00 0.01 +vn 0.04 0.99 -0.10 +vn -1.00 0.05 -0.02 +vn 0.98 -0.15 -0.10 +vn 0.70 -0.71 -0.13 +vn 0.99 -0.05 -0.13 +vn 0.99 0.08 -0.11 +vn 0.99 0.08 -0.08 +vn 1.00 0.06 -0.02 +vn 1.00 0.03 -0.00 +vn 1.00 0.02 0.01 +vn 1.00 0.01 0.02 +vn 1.00 0.08 0.06 +vn 1.00 0.01 0.03 +vn 0.99 0.11 0.03 +vn 1.00 0.07 0.02 +vn 1.00 0.09 -0.00 +vn 1.00 -0.00 0.01 +vn 1.00 0.03 0.03 +vn 1.00 -0.03 0.03 +vn 1.00 -0.03 0.07 +vn 0.99 -0.14 0.07 +vn 0.89 -0.42 0.16 +vn 0.88 -0.44 0.17 +vn 0.49 -0.84 0.25 +vn 0.98 0.17 -0.05 +vn 0.99 0.14 -0.00 +vn 1.00 0.08 -0.01 +vn 1.00 0.03 -0.04 +vn 0.97 0.21 -0.13 +vn 0.98 0.19 -0.04 +vn 0.95 0.30 -0.03 +vn 0.96 0.27 -0.05 +vn 0.99 0.15 0.03 +vn 0.99 0.17 0.02 +vn 0.50 -0.83 0.25 +vn -0.01 -0.97 0.24 +vn -0.01 -0.97 0.26 +vn -0.53 -0.81 0.25 +vn -0.52 -0.82 0.24 +vn -0.92 -0.37 0.15 +vn -0.93 -0.35 0.14 +vn -1.00 -0.05 0.05 +vn -1.00 0.07 0.05 +vn -1.00 0.06 0.01 +vn -0.99 0.13 0.00 +vn -1.00 0.09 -0.02 +vn -0.99 0.11 -0.02 +vn -0.98 0.18 -0.03 +vn -0.99 0.16 -0.01 +vn -0.98 0.20 0.00 +vn -0.99 0.10 0.00 +vn -0.98 0.17 0.03 +vn -0.51 -0.84 0.20 +vn -0.01 -0.99 0.17 +vn -0.98 -0.10 0.14 +vn -0.73 -0.67 0.14 +vn -0.27 -0.95 0.15 +vn -0.01 -0.99 0.16 +vn 0.47 -0.86 0.20 +vn 0.69 -0.71 0.15 +vn 0.97 -0.18 0.16 +vn 0.25 -0.96 0.16 +vn -0.99 0.10 -0.01 +vn -0.99 0.12 -0.01 +vn -0.99 0.12 -0.03 +vn -0.99 0.15 -0.05 +vn -0.98 0.17 -0.07 +vn -0.93 0.33 -0.16 +vn -0.88 0.46 -0.15 +vn -0.66 0.56 -0.50 +vn -0.43 0.86 -0.26 +vn -0.97 0.22 -0.08 +vn -0.99 0.12 -0.06 +vn -0.98 0.17 -0.03 +vn -0.97 0.22 -0.02 +vn -0.96 0.25 -0.07 +vn -0.95 0.29 -0.15 +vn -0.96 0.28 -0.06 +vn -0.92 0.38 -0.05 +vn -0.94 0.35 -0.08 +vn -0.97 0.24 0.00 +vn -0.97 0.25 -0.00 +vn 0.98 0.16 0.10 +vn 0.98 0.19 0.05 +vn 0.97 0.25 -0.00 +vn 0.96 0.28 -0.03 +vn 1.00 0.06 -0.01 +vn 1.00 -0.02 0.01 +vn 0.99 -0.09 0.04 +vn 0.98 -0.20 0.08 +vn 0.78 -0.59 0.20 +vn 0.94 -0.29 0.20 +vn 0.79 -0.54 0.29 +vn 0.91 -0.25 0.32 +vn 0.98 -0.09 0.19 +vn 0.61 -0.75 0.26 +vn 0.91 -0.31 0.29 +vn 0.96 -0.12 0.25 +vn 0.97 0.19 0.14 +vn 0.96 0.21 0.20 +vn 0.85 0.50 0.16 +vn 0.78 0.58 0.22 +vn 0.63 0.76 0.15 +vn 0.56 0.80 0.21 +vn 0.30 0.94 0.13 +vn 0.30 0.94 0.15 +vn 0.01 0.99 0.12 +vn 0.01 0.99 0.11 +vn -0.28 0.95 0.14 +vn -0.28 0.95 0.12 +vn -0.52 0.83 0.19 +vn -0.60 0.79 0.13 +vn -0.75 0.63 0.20 +vn -0.83 0.54 0.13 +vn -0.28 0.96 0.08 +vn -0.27 0.96 0.04 +vn 0.01 1.00 0.05 +vn 0.01 1.00 0.07 +vn 0.31 0.95 0.09 +vn 0.61 0.79 0.09 +vn 0.87 0.48 0.09 +vn 0.98 0.16 0.06 +vn 0.87 0.48 0.05 +vn 0.55 0.83 0.07 +vn 0.61 0.79 0.03 +vn 0.29 0.96 0.05 +vn 0.28 0.96 0.03 +vn 0.33 0.95 -0.01 +vn 0.01 1.00 0.02 +vn 0.01 1.00 -0.01 +vn 0.01 1.00 -0.02 +vn -0.46 0.89 -0.04 +vn -0.99 0.14 -0.02 +vn -0.98 0.17 -0.01 +vn -0.90 0.44 -0.02 +vn -0.91 0.41 -0.08 +vn -0.69 0.72 -0.09 +vn -0.77 0.63 -0.10 +vn -0.84 0.54 0.01 +vn -0.58 0.82 0.03 +vn 0.49 0.87 -0.03 +vn 0.39 0.92 -0.04 +vn 0.67 0.75 -0.01 +vn 0.92 0.39 0.02 +vn 0.99 0.11 0.02 +vn -0.99 0.15 -0.04 +vn -0.93 0.36 -0.06 +vn -0.94 0.34 -0.02 +vn -1.00 0.00 0.01 +vn -0.96 0.27 0.02 +vn -0.97 0.24 0.08 +vn -0.95 0.28 0.14 +vn -0.95 0.29 0.09 +vn -0.98 -0.02 0.21 +vn -0.98 0.04 0.17 +vn -0.93 -0.23 0.27 +vn -0.94 -0.17 0.31 +vn -0.96 -0.21 0.18 +vn -0.83 -0.48 0.28 +vn -0.82 -0.54 0.19 +vn -0.64 -0.72 0.26 +vn -0.99 -0.11 0.06 +vn -1.00 0.08 -0.01 +vn -1.00 0.04 0.03 +vn -0.98 0.20 -0.01 +vn -0.89 0.46 -0.00 +vn -0.63 0.78 -0.03 +vn -0.36 0.93 -0.05 +vn -0.30 0.95 -0.02 +vn -0.26 0.97 0.03 +vn -0.84 0.54 0.03 +vn -0.58 0.82 0.02 +vn -0.52 0.85 0.05 +vn -0.84 0.54 0.07 +vn -0.97 0.25 0.04 +vn -0.57 0.82 0.07 +vn 1.00 -0.06 0.05 +vn 1.00 0.08 0.01 +vn 1.00 0.05 0.01 +vn 0.93 0.37 0.01 +vn 0.94 0.34 -0.06 +vn 0.73 0.68 -0.07 +vn 0.81 0.58 -0.08 +vn 0.88 0.47 0.03 +vn 0.62 0.78 0.04 +vn -0.02 0.99 0.14 +vn -0.01 0.99 0.11 +vn -0.01 1.00 -0.08 +vn -0.02 1.00 -0.08 +vn -0.02 0.99 -0.12 +vn -0.09 0.99 -0.12 +vn -0.15 0.99 0.00 +vn -0.18 0.98 -0.10 +vn -0.14 0.98 0.16 +vn -0.04 0.99 0.16 +vn -0.05 0.93 0.35 +vn -0.03 0.94 0.33 +vn -0.02 0.96 0.28 +vn -0.02 0.98 0.18 +vn 0.02 1.00 0.05 +vn -0.03 0.99 0.15 +vn -0.01 1.00 -0.02 +vn -0.08 0.99 -0.09 +vn -0.03 0.99 -0.10 +vn 0.00 1.00 -0.09 +vn -0.01 0.99 -0.12 +vn 0.01 0.99 -0.14 +vn -0.43 0.85 -0.29 +vn -0.14 0.94 -0.32 +vn 0.37 0.86 0.35 +vn 0.25 0.81 0.54 +vn 0.72 0.00 0.70 +vn 0.39 0.00 0.92 +vn 0.37 -0.86 0.35 +vn 0.24 -0.81 0.53 +vn -0.43 -0.84 -0.34 +vn -0.15 -0.93 -0.34 +vn -0.83 0.06 -0.55 +vn -0.44 -0.00 -0.90 +vn 0.13 -0.05 -0.99 +vn 0.04 0.86 -0.51 +vn 0.01 0.85 0.52 +vn 0.02 0.02 1.00 +vn -0.00 -0.86 0.51 +vn 0.04 -0.86 -0.51 +vn 0.03 1.00 -0.08 +vn 0.03 0.99 -0.11 +vn 0.02 1.00 -0.08 +vn 0.02 0.99 -0.11 +vn 0.01 1.00 -0.09 +vn 0.00 0.99 -0.13 +vn -0.00 1.00 0.05 +vn 0.09 0.99 -0.08 +vn 0.02 1.00 -0.02 +vn 0.04 0.99 0.15 +vn 0.04 0.98 0.18 +vn 0.02 0.99 0.11 +vn 0.04 0.96 0.28 +vn 0.04 0.99 0.14 +vn 0.05 0.94 0.33 +vn 0.06 0.98 0.16 +vn 0.08 0.93 0.36 +vn 0.16 0.97 0.17 +vn 0.17 0.99 0.01 +vn -0.01 0.99 -0.14 +vn 0.22 0.97 -0.09 +vn 0.12 0.99 -0.11 +vn 0.08 0.98 -0.15 +vn 0.04 0.98 -0.18 +vn 0.96 0.28 -0.02 +vn 1.00 -0.02 -0.04 +vn 1.00 -0.08 -0.05 +vn 0.78 -0.62 -0.10 +vn -0.84 -0.54 -0.12 +vn -0.99 0.01 -0.10 +vn 0.00 -0.86 0.51 +vn -0.00 0.04 1.00 +vn -0.26 -0.80 0.54 +vn 0.13 -0.94 -0.32 +vn 0.40 -0.86 -0.32 +vn 0.84 -0.02 -0.54 +vn 0.43 -0.04 -0.90 +vn 0.47 0.83 -0.30 +vn 0.15 0.93 -0.33 +vn -0.34 0.87 0.34 +vn -0.21 0.82 0.53 +vn -0.72 0.04 0.69 +vn -0.38 0.03 0.92 +vn -0.39 -0.85 0.35 +vn 0.01 0.87 0.50 +vn -0.04 0.86 -0.51 +vn -0.15 -0.02 -0.99 +vn -0.06 -0.85 -0.53 +vn -0.14 0.97 -0.18 +vn -0.17 0.97 -0.18 +vn -0.39 0.91 -0.13 +vn -0.41 0.90 -0.12 +vn -0.46 0.88 -0.07 +vn -0.47 0.88 -0.06 +vn -0.44 0.90 -0.04 +vn -0.44 0.90 0.01 +vn -0.41 0.91 0.05 +vn -0.58 0.81 0.10 +vn -0.59 0.80 0.11 +vn -0.63 0.72 0.30 +vn -0.67 0.62 0.41 +vn -0.71 0.49 0.51 +vn -0.71 0.49 0.50 +vn 0.07 0.99 -0.11 +vn 0.12 0.99 -0.10 +vn 0.08 0.99 -0.10 +vn 0.12 0.99 -0.08 +vn 0.11 0.99 -0.10 +vn 0.11 0.99 -0.04 +vn 0.10 0.99 -0.04 +vn 0.07 1.00 0.01 +vn 0.07 1.00 0.02 +vn 0.11 0.98 0.18 +vn 0.15 0.96 0.22 +vn 0.25 0.87 0.42 +vn 0.34 0.83 0.44 +vn 0.29 0.76 0.58 +vn 0.21 0.82 0.53 +vn 0.19 0.92 0.36 +vn 0.53 -0.83 0.18 +vn 0.31 -0.94 0.15 +vn 0.24 -0.96 0.13 +vn -0.00 -1.00 0.08 +vn -0.33 -0.93 0.14 +vn -0.27 -0.95 0.14 +vn -0.56 -0.81 0.18 +vn -0.97 0.22 0.05 +vn -0.91 0.42 0.01 +vn -0.01 -0.11 -0.99 +vn 0.99 0.13 0.07 +vn 0.94 0.34 0.03 +vn 0.73 0.43 0.53 +vn 0.70 0.56 0.44 +vn 0.65 0.69 0.32 +vn 0.58 0.80 0.14 +vn 0.57 0.81 0.13 +vn 0.46 0.89 0.02 +vn 0.44 0.90 0.05 +vn 0.46 0.89 -0.03 +vn 0.47 0.88 -0.03 +vn 0.50 0.87 -0.06 +vn 0.49 0.87 -0.06 +vn 0.44 0.89 -0.11 +vn 0.41 0.90 -0.12 +vn 0.19 0.97 -0.17 +vn 0.16 0.97 -0.18 +vn -0.67 0.00 -0.74 +vn 0.67 -0.06 -0.74 +vn -0.05 -0.99 -0.10 +vn -0.06 -0.99 -0.11 +vn -0.04 -0.99 -0.10 +vn -0.03 -0.99 -0.12 +vn -0.02 -0.99 -0.11 +vn -0.02 -0.99 -0.13 +vn -0.03 -0.99 -0.10 +vn -0.02 -0.99 -0.10 +vn -0.03 -1.00 -0.07 +vn -0.05 -1.00 -0.01 +vn -0.03 -1.00 0.02 +vn -0.04 -1.00 0.07 +vn -0.08 -1.00 -0.02 +vn -0.05 -1.00 0.07 +vn -0.08 -1.00 -0.03 +vn -0.09 -0.99 0.06 +vn 0.02 -1.00 -0.04 +vn -0.12 -0.99 0.01 +vn -0.01 -1.00 0.02 +vn -0.06 -0.99 -0.12 +vn -0.07 -0.99 -0.11 +vn -0.05 -0.99 -0.11 +vn -0.08 -0.99 -0.10 +vn -0.01 -1.00 -0.05 +vn -0.03 -1.00 -0.05 +vn 0.11 -0.99 0.02 +vn 0.07 -1.00 0.06 +vn 0.19 -0.97 0.14 +vn 0.10 -0.97 0.22 +vn 0.53 -0.80 0.29 +vn -0.01 -1.00 -0.03 +vn -0.11 -0.99 -0.10 +vn -0.08 -0.99 -0.07 +vn 0.07 -1.00 -0.07 +vn 0.01 -1.00 -0.09 +vn -0.18 -0.98 0.08 +vn -0.88 -0.16 0.45 +vn -0.86 -0.25 0.44 +vn -0.24 -0.94 0.22 +vn -0.01 -0.97 0.23 +vn 0.23 -0.95 0.22 +vn 0.16 -0.98 0.08 +vn 0.83 -0.32 0.45 +vn 0.86 -0.24 0.45 +vn 0.03 -1.00 -0.09 +vn 0.03 -0.99 -0.10 +vn 0.04 -0.99 -0.11 +vn 0.02 -0.99 -0.12 +vn 0.03 -0.99 -0.11 +vn 0.02 -0.99 -0.11 +vn 0.05 -0.99 -0.11 +vn 0.04 -0.99 -0.10 +vn 0.06 -1.00 -0.02 +vn 0.07 -1.00 -0.00 +vn 0.04 -1.00 0.07 +vn 0.09 -0.97 0.23 +vn 0.07 -1.00 -0.03 +vn 0.06 -0.99 -0.10 +vn 0.09 -0.99 -0.10 +vn -0.01 -1.00 -0.02 +vn 0.13 -0.99 0.00 +vn 0.61 -0.78 0.12 +vn 0.66 -0.70 0.29 +vn 0.23 -0.89 0.39 +vn 0.14 -0.91 0.40 +vn 0.14 -0.91 0.39 +vn -0.07 -0.98 0.20 +vn -0.10 -0.97 0.23 +vn -0.11 -0.97 0.22 +vn -0.21 -0.97 0.13 +vn -0.14 -0.99 0.00 +vn -0.01 -1.00 0.05 +vn 0.25 -0.97 0.02 +vn -0.56 -0.78 0.28 +vn -0.11 -0.93 0.35 +vn -0.14 -0.91 0.39 +vn -0.14 -0.90 0.40 +vn -0.25 -0.89 0.39 +vn -0.69 -0.67 0.28 +vn -0.66 -0.75 0.11 +vn -0.27 -0.96 0.01 +vn -0.08 -0.99 -0.09 +vn -0.18 -0.98 0.03 +vn -0.01 -1.00 -0.07 +vn -0.01 -1.00 -0.01 +vn 0.16 -0.99 0.03 +vn 0.06 -0.99 -0.09 +vn -0.11 -0.99 -0.09 +vn -0.46 -0.88 0.13 +vn -0.19 -0.98 0.07 +vn -0.46 -0.87 0.18 +vn 0.44 -0.88 0.19 +vn 0.18 -0.98 0.08 +vn 0.43 -0.89 0.14 +vn 0.09 -0.99 -0.09 +vn -0.09 0.99 -0.04 +vn -0.04 1.00 -0.04 +vn 0.00 1.00 -0.05 +vn -0.00 1.00 0.01 +vn -0.03 0.98 0.17 +vn -0.06 0.97 0.23 +vn -0.21 0.89 0.42 +vn -0.20 0.84 0.51 +vn -0.27 0.78 0.57 +vn -0.32 0.86 0.40 +vn -0.09 0.97 0.21 +vn -0.10 0.91 0.41 +vn -0.15 0.87 0.46 +vn -0.00 1.00 -0.08 +vn -0.04 0.99 -0.09 +vn -0.10 0.99 -0.08 +vn -0.05 0.99 -0.10 +vn -0.10 0.99 -0.10 +vn -0.04 1.00 -0.09 +vn -0.05 0.99 -0.11 +vn 0.01 0.99 -0.11 +vn 0.97 0.08 0.25 +vn -0.51 0.85 0.14 +vn -0.32 0.94 0.12 +vn -0.26 0.96 0.14 +vn 0.06 0.97 0.23 +vn 0.32 0.93 0.16 +vn 0.26 0.96 0.12 +vn 0.54 0.83 0.16 +vn -0.96 0.17 0.22 +vn 0.01 -0.93 0.36 +vn 0.00 -0.98 0.17 +vn 0.00 -0.98 0.18 +vn -0.02 -0.98 -0.21 +vn -0.02 -0.98 -0.20 +vn -0.02 -0.92 -0.39 +vn -0.01 0.93 -0.36 +vn -0.00 0.98 -0.17 +vn -0.00 0.98 -0.18 +vn 0.02 0.98 0.21 +vn 0.02 0.98 0.20 +vn 0.02 0.92 0.39 +vn 0.04 0.04 1.00 +vn -1.00 0.05 0.02 +vn -0.04 -0.04 -1.00 +vn -0.08 0.86 0.51 +vn 0.01 0.86 0.52 +vn -1.00 0.08 -0.05 +vn -0.99 -0.02 -0.11 +vn -0.99 -0.02 -0.12 +vn -0.01 -0.85 -0.52 +vn 0.08 -0.85 -0.52 +vn 0.09 -0.85 -0.52 +vn 0.99 -0.09 0.07 +vn 0.99 0.01 0.12 +vn 0.99 0.02 0.12 +vn 0.11 0.85 0.51 +vn 0.02 0.85 0.52 +vn 0.99 -0.11 -0.09 +vn -0.11 -0.85 -0.52 +vn -0.02 -0.85 -0.52 +vn -0.99 0.11 0.10 +vn -1.00 0.01 0.04 +vn -1.00 0.00 0.04 +vn -0.01 -0.10 -1.00 +vn -0.01 -0.79 -0.61 +vn -0.00 0.46 -0.89 +vn -0.01 -0.44 -0.90 +vn 0.01 0.36 0.93 +vn 0.00 -0.53 0.85 +vn -1.00 0.05 -0.01 +vn 1.00 -0.05 0.01 +vn -0.16 -0.97 -0.18 +vn -0.17 -0.98 -0.08 +vn -0.14 -0.99 0.02 +vn -0.01 -1.00 -0.08 +vn -0.01 -0.98 -0.21 +vn -0.01 -0.96 -0.29 +vn 0.01 0.95 0.30 +vn 0.74 -0.64 0.19 +vn 0.81 -0.47 -0.35 +vn 0.04 -0.94 0.35 +vn 0.03 -0.97 0.25 +vn 0.02 -0.93 0.37 +vn 0.27 -0.96 0.13 +vn 0.19 -0.98 0.08 +vn 0.48 -0.88 0.05 +vn 0.25 -0.97 0.05 +vn -0.00 -1.00 0.05 +vn 0.01 -1.00 0.05 +vn 0.01 -1.00 0.08 +vn 0.01 -1.00 0.04 +vn 0.08 -0.98 0.15 +vn 0.15 -0.99 0.04 +vn 0.10 -0.98 0.16 +vn 0.07 -0.94 0.34 +vn 0.04 -0.94 0.34 +vn 0.07 -0.85 0.53 +vn 0.01 -0.96 0.28 +vn 0.02 -0.95 0.31 +vn 0.04 -0.86 0.50 +vn 0.03 -0.89 0.45 +vn 0.14 0.98 -0.13 +vn -0.22 -0.92 0.32 +vn -0.01 -0.94 0.35 +vn -0.07 -0.92 0.39 +vn -0.00 -0.91 0.42 +vn 0.06 -0.92 0.39 +vn 0.21 -0.93 0.32 +vn 0.42 -0.10 -0.90 +vn 0.13 -0.53 -0.83 +vn -0.14 0.03 -0.99 +vn 0.17 0.25 -0.95 +vn -0.00 0.06 1.00 +vn 0.00 0.07 1.00 +vn 0.02 0.06 1.00 +vn 0.01 0.07 1.00 +vn -0.08 -1.00 0.03 +vn -0.04 -1.00 -0.02 +vn -0.10 -0.99 0.04 +vn -0.17 -0.99 0.04 +vn -0.12 -0.99 0.04 +vn -0.10 -0.98 0.15 +vn -0.03 -1.00 0.08 +vn -0.05 -0.94 0.34 +vn -0.03 -0.95 0.31 +vn -0.04 -0.86 0.50 +vn -0.03 -0.89 0.45 +vn -0.02 -0.96 0.28 +vn -0.03 -0.93 0.37 +vn -0.04 -0.97 0.25 +vn -0.05 -0.94 0.35 +vn -0.29 -0.95 0.12 +vn -0.20 -0.98 0.07 +vn -0.50 -0.86 0.04 +vn -0.29 -0.96 0.04 +vn -0.02 -1.00 0.08 +vn -0.02 -1.00 0.05 +vn -0.02 -1.00 0.04 +vn -0.07 -0.85 0.53 +vn -0.08 -0.94 0.34 +vn -0.11 -0.98 0.16 +vn -0.06 0.99 -0.14 +vn -0.02 0.99 -0.16 +vn -0.39 0.83 -0.40 +vn -0.84 -0.40 -0.38 +vn -0.78 -0.60 0.17 +vn -0.13 0.98 -0.14 +vn 0.01 0.05 1.00 +vn 0.01 0.06 1.00 +vn -0.12 -0.06 -0.99 +vn -0.15 -0.52 -0.84 +vn -0.43 -0.06 -0.90 +vn -0.19 -0.01 -0.98 +vn 0.00 0.12 -0.99 +vn 0.01 0.37 0.93 +vn -0.01 0.12 -0.99 +vn -0.01 0.10 -0.99 +vn -0.01 0.11 -0.99 +vn -0.01 0.09 -1.00 +vn 0.27 0.23 0.93 +vn 0.19 0.41 0.89 +vn 0.34 -0.13 0.93 +vn -0.16 0.43 0.89 +vn -0.25 0.25 0.93 +vn -0.31 -0.16 0.94 +vn -0.33 -0.11 0.94 +vn -0.11 -0.42 0.90 +vn -0.17 -0.38 0.91 +vn 0.12 -0.44 0.89 +vn 0.01 -0.61 0.79 +vn 0.17 -0.39 0.90 +vn 0.32 -0.19 0.93 +vn -0.95 0.22 0.21 +vn -0.01 -0.99 0.12 +vn 0.96 0.13 0.24 +vn -0.59 0.79 0.16 +vn -0.31 0.94 0.15 +vn -0.30 0.94 0.15 +vn 0.35 0.92 0.16 +vn 0.63 0.76 0.18 +vn 0.02 0.69 0.72 +vn 0.22 0.53 0.82 +vn -0.07 0.70 0.71 +vn -0.20 0.55 0.81 +vn -0.32 0.28 0.91 +vn -0.34 0.21 0.92 +vn -0.33 -0.24 0.91 +vn -0.35 -0.12 0.93 +vn -0.14 -0.63 0.77 +vn -0.24 -0.49 0.84 +vn -0.01 -0.48 0.88 +vn 0.16 -0.61 0.78 +vn 0.25 -0.50 0.83 +vn 0.34 -0.27 0.90 +vn 0.36 -0.14 0.92 +vn 0.34 0.25 0.91 +vn 0.35 0.19 0.92 +vn 0.09 0.71 0.70 +vn 0.00 -0.92 -0.39 +vn -0.00 -0.98 -0.21 +vn -0.00 -0.98 -0.20 +vn -0.01 -0.98 0.17 +vn -0.01 -0.98 0.18 +vn -0.02 -0.93 0.36 +vn -0.00 0.92 0.39 +vn 0.00 0.98 0.21 +vn 0.00 0.98 0.20 +vn 0.01 0.98 -0.17 +vn 0.01 0.98 -0.18 +vn 0.02 0.93 -0.36 +vn -0.03 0.04 1.00 +vn 1.00 -0.05 0.05 +vn 0.03 -0.04 -1.00 +vn 0.31 0.87 -0.39 +vn 0.37 0.92 0.09 +vn 0.68 0.61 -0.41 +vn 0.63 0.62 -0.46 +vn 0.55 0.72 -0.42 +vn 0.64 0.67 -0.37 +vn 0.24 0.96 -0.12 +vn 0.26 0.96 -0.12 +vn -0.11 0.92 0.39 +vn -0.23 0.89 0.39 +vn 0.47 0.10 -0.88 +vn 0.54 0.10 -0.84 +vn 0.16 0.98 0.09 +vn 0.08 0.99 0.10 +vn 0.24 0.97 0.08 +vn 0.31 0.95 0.05 +vn 0.23 0.97 0.07 +vn 0.51 0.86 0.06 +vn 0.45 0.88 0.13 +vn 0.34 0.94 -0.05 +vn 0.34 0.94 -0.00 +vn 0.10 0.99 -0.11 +vn 0.10 0.99 -0.09 +vn -0.08 0.99 -0.10 +vn -0.09 0.99 -0.11 +vn -0.34 0.94 -0.05 +vn -0.40 0.91 0.10 +vn -0.50 0.87 0.05 +vn -0.21 0.98 0.05 +vn -0.30 0.95 0.04 +vn -0.14 0.99 0.08 +vn -0.23 0.97 0.08 +vn -0.07 0.99 0.09 +vn -0.14 0.99 0.09 +vn -0.54 0.16 -0.83 +vn -0.47 0.13 -0.87 +vn 0.24 0.89 0.39 +vn 0.14 0.90 0.41 +vn -0.24 0.96 -0.12 +vn -0.23 0.97 -0.12 +vn -0.59 0.72 -0.36 +vn -0.54 0.73 -0.43 +vn -0.62 0.64 -0.46 +vn -0.64 0.66 -0.40 +vn -0.26 0.96 0.09 +vn -0.38 0.83 -0.41 +vn 0.40 0.85 -0.33 +vn 0.55 0.82 -0.18 +vn 0.74 0.63 -0.24 +vn -0.23 0.66 -0.71 +vn 0.90 0.23 -0.37 +vn -0.90 0.43 -0.07 +vn -0.98 0.21 0.05 +vn 0.02 0.10 -0.99 +vn -0.38 -0.03 -0.92 +vn -0.92 0.04 -0.38 +vn -0.99 0.13 0.02 +vn -0.99 0.13 0.01 +vn -0.83 0.17 0.53 +vn 0.10 0.89 0.44 +vn 0.02 0.90 0.44 +vn 0.03 0.90 0.44 +vn -0.00 0.90 0.43 +vn 0.00 0.90 0.43 +vn 0.01 0.90 0.44 +vn -0.07 0.90 0.44 +vn 0.78 0.61 0.15 +vn 1.00 0.04 0.04 +vn 1.00 0.03 0.04 +vn 1.00 0.03 0.01 +vn 0.74 -0.16 -0.65 +vn 0.85 -0.02 -0.52 +vn 0.93 0.33 0.17 +vn 0.95 -0.02 -0.30 +vn 0.93 0.36 -0.05 +vn -0.72 0.64 -0.26 +vn -0.71 0.28 -0.65 +vn -0.70 0.67 -0.25 +vn -0.38 0.91 -0.20 +vn -0.50 0.81 -0.31 +vn 0.01 0.99 0.10 +vn 0.01 1.00 0.10 +vn 0.01 0.34 0.94 +vn 0.01 0.12 0.99 +vn 0.00 0.91 -0.41 +vn -0.99 0.16 -0.06 +vn -0.99 0.14 -0.10 +vn -0.96 0.04 -0.28 +vn -0.96 0.04 -0.29 +vn 0.96 -0.05 -0.27 +vn 1.00 0.05 -0.08 +vn 0.96 -0.05 -0.26 +vn 1.00 0.07 -0.04 +vn -0.01 -0.18 -0.98 +vn 0.83 0.10 0.55 +vn -0.74 0.66 0.13 +vn 0.94 -0.32 -0.07 +vn 0.83 -0.56 0.01 +vn -0.09 -0.40 -0.91 +vn -0.12 0.12 -0.99 +vn -0.07 -0.68 -0.73 +vn -0.07 0.27 -0.96 +vn 0.02 1.00 -0.09 +vn -0.12 0.53 -0.84 +vn -0.10 -0.26 -0.96 +vn -0.12 -0.15 -0.98 +vn 0.05 -0.53 -0.85 +vn 0.03 -0.38 -0.93 +vn 0.03 -0.98 -0.21 +vn 0.09 -0.09 -0.99 +vn 0.07 0.04 -1.00 +vn 0.08 0.14 -0.99 +vn 0.05 0.26 -0.96 +vn -0.99 0.12 -0.09 +vn 0.96 0.29 0.00 +vn 0.58 0.81 0.00 +vn 0.61 0.79 0.00 +vn -0.53 0.85 -0.01 +vn -0.57 0.82 -0.01 +vn -0.92 0.38 -0.02 +vn -0.95 -0.30 -0.00 +vn -0.61 -0.80 -0.00 +vn -0.58 -0.82 -0.00 +vn 0.57 -0.82 0.01 +vn 0.52 -0.85 0.01 +vn 0.92 -0.40 0.02 +vn 0.99 -0.12 -0.07 +vn 1.00 -0.07 -0.01 +vn 1.00 -0.08 -0.01 +vn 0.99 -0.11 0.07 +vn 1.00 -0.07 0.04 +vn 1.00 -0.01 -0.00 +vn 0.98 -0.13 -0.12 +vn 1.00 0.03 -0.08 +vn 0.88 0.04 -0.48 +vn 0.96 0.13 -0.23 +vn -0.96 0.10 -0.27 +vn -0.99 0.04 -0.13 +vn -0.99 0.04 -0.12 +vn -0.91 0.02 -0.42 +vn -0.90 -0.01 -0.43 +vn -0.99 0.02 0.17 +vn -0.98 0.06 0.19 +vn -0.96 0.03 -0.29 +vn -0.91 0.15 -0.37 +vn -0.85 0.17 0.50 +vn -0.94 -0.03 0.33 +vn 0.71 0.05 0.71 +vn -0.02 0.12 0.99 +vn 0.02 0.12 0.99 +vn -0.70 0.12 0.70 +vn -0.71 -0.01 -0.71 +vn -0.02 -0.06 -1.00 +vn 0.02 -0.06 -1.00 +vn 0.71 -0.08 -0.70 +vn 0.01 1.00 -0.03 +vn 0.03 -1.00 -0.02 +vn 0.06 -1.00 0.04 +vn 0.08 -1.00 0.04 +# 1154 vertex normals + +vt 0.41 0.82 0.00 +vt 0.39 0.82 0.00 +vt 0.42 0.80 0.00 +vt 0.39 0.80 0.00 +vt 0.37 0.80 0.00 +vt 0.37 0.82 0.00 +vt 0.35 0.82 0.00 +vt 0.35 0.80 0.00 +vt 0.33 0.80 0.00 +vt 0.33 0.81 0.00 +vt 0.31 0.81 0.00 +vt 0.30 0.80 0.00 +vt 0.30 0.81 0.00 +vt 0.29 0.80 0.00 +vt 0.29 0.81 0.00 +vt 0.28 0.80 0.00 +vt 0.34 0.81 0.00 +vt 0.30 0.82 0.00 +vt 0.34 0.82 0.00 +vt 0.39 0.81 0.00 +vt 0.43 0.81 0.00 +vt 0.43 0.82 0.00 +vt 0.98 0.38 0.00 +vt 0.98 0.42 0.00 +vt 0.97 0.44 0.00 +vt 0.50 0.74 0.00 +vt 0.49 0.75 0.00 +vt 0.54 0.75 0.00 +vt 0.47 0.74 0.00 +vt 0.45 0.75 0.00 +vt 0.43 0.74 0.00 +vt 0.43 0.75 0.00 +vt 0.41 0.75 0.00 +vt 0.41 0.74 0.00 +vt 0.40 0.75 0.00 +vt 0.40 0.74 0.00 +vt 0.42 0.75 0.00 +vt 0.46 0.74 0.00 +vt 0.54 0.72 0.00 +vt 0.50 0.73 0.00 +vt 0.50 0.72 0.00 +vt 0.54 0.71 0.00 +vt 0.46 0.73 0.00 +vt 0.43 0.73 0.00 +vt 0.40 0.73 0.00 +vt 0.43 0.72 0.00 +vt 0.40 0.72 0.00 +vt 0.43 0.71 0.00 +vt 0.40 0.71 0.00 +vt 0.43 0.70 0.00 +vt 0.40 0.70 0.00 +vt 0.40 0.69 0.00 +vt 0.46 0.71 0.00 +vt 0.50 0.71 0.00 +vt 0.46 0.70 0.00 +vt 0.45 0.69 0.00 +vt 0.46 0.69 0.00 +vt 0.50 0.70 0.00 +vt 0.54 0.70 0.00 +vt 0.58 0.71 0.00 +vt 0.59 0.75 0.00 +vt 0.58 0.73 0.00 +vt 0.56 0.88 0.00 +vt 0.56 0.91 0.00 +vt 0.54 0.89 0.00 +vt 0.60 0.90 0.00 +vt 0.60 0.88 0.00 +vt 0.59 0.86 0.00 +vt 0.65 0.85 0.00 +vt 0.65 0.83 0.00 +vt 0.59 0.83 0.00 +vt 0.65 0.78 0.00 +vt 0.59 0.78 0.00 +vt 0.65 0.76 0.00 +vt 0.64 0.75 0.00 +vt 0.65 0.90 0.00 +vt 0.65 0.88 0.00 +vt 0.64 0.74 0.00 +vt 0.70 0.75 0.00 +vt 0.70 0.76 0.00 +vt 0.70 0.77 0.00 +vt 0.70 0.79 0.00 +vt 0.70 0.82 0.00 +vt 0.70 0.85 0.00 +vt 0.70 0.87 0.00 +vt 0.75 0.79 0.00 +vt 0.75 0.78 0.00 +vt 0.75 0.75 0.00 +vt 0.58 0.75 0.00 +vt 0.55 0.78 0.00 +vt 0.55 0.84 0.00 +vt 0.50 0.83 0.00 +vt 0.54 0.86 0.00 +vt 0.51 0.87 0.00 +vt 0.53 0.88 0.00 +vt 0.78 0.82 0.00 +vt 0.78 0.80 0.00 +vt 0.75 0.82 0.00 +vt 0.78 0.78 0.00 +vt 0.78 0.76 0.00 +vt 0.69 0.77 0.00 +vt 0.81 0.79 0.00 +vt 0.81 0.77 0.00 +vt 0.86 0.78 0.00 +vt 0.86 0.79 0.00 +vt 0.81 0.80 0.00 +vt 0.86 0.81 0.00 +vt 0.81 0.83 0.00 +vt 0.86 0.83 0.00 +vt 0.92 0.80 0.00 +vt 0.92 0.81 0.00 +vt 0.93 0.80 0.00 +vt 0.93 0.81 0.00 +vt 0.93 0.83 0.00 +vt 0.92 0.83 0.00 +vt 0.88 0.84 0.00 +vt 0.88 0.83 0.00 +vt 0.86 0.84 0.00 +vt 0.81 0.84 0.00 +vt 0.78 0.84 0.00 +vt 0.75 0.85 0.00 +vt 0.78 0.85 0.00 +vt 0.88 0.85 0.00 +vt 0.86 0.85 0.00 +vt 0.89 0.86 0.00 +vt 0.83 0.86 0.00 +vt 0.85 0.86 0.00 +vt 0.81 0.86 0.00 +vt 0.78 0.86 0.00 +vt 0.75 0.86 0.00 +vt 0.93 0.85 0.00 +vt 0.91 0.88 0.00 +vt 0.93 0.87 0.00 +vt 0.91 0.89 0.00 +vt 0.93 0.89 0.00 +vt 0.93 0.97 0.00 +vt 0.89 0.89 0.00 +vt 0.88 0.88 0.00 +vt 0.84 0.88 0.00 +vt 0.71 0.90 0.00 +vt 0.88 0.81 0.00 +vt 0.88 0.80 0.00 +vt 0.88 0.78 0.00 +vt 0.92 0.78 0.00 +vt 0.89 0.99 0.00 +vt 0.89 0.98 0.00 +vt 0.92 0.98 0.00 +vt 0.82 0.90 0.00 +vt 0.86 0.89 0.00 +vt 0.83 0.91 0.00 +vt 0.88 0.98 0.00 +vt 0.93 0.98 0.00 +vt 0.90 0.99 0.00 +vt 0.93 0.99 0.00 +vt 0.90 1.00 0.00 +vt 0.93 1.00 0.00 +vt 0.93 0.79 0.00 +vt 0.46 0.86 0.00 +vt 0.46 0.83 0.00 +vt 0.40 0.86 0.00 +vt 0.40 0.83 0.00 +vt 0.35 0.85 0.00 +vt 0.32 0.85 0.00 +vt 0.29 0.85 0.00 +vt 0.29 0.83 0.00 +vt 0.24 0.83 0.00 +vt 0.23 0.80 0.00 +vt 0.19 0.80 0.00 +vt 0.20 0.77 0.00 +vt 0.16 0.78 0.00 +vt 0.16 0.76 0.00 +vt 0.09 0.78 0.00 +vt 0.09 0.75 0.00 +vt 0.36 0.80 0.00 +vt 0.40 0.79 0.00 +vt 0.46 0.79 0.00 +vt 0.50 0.78 0.00 +vt 0.50 0.76 0.00 +vt 0.45 0.77 0.00 +vt 0.40 0.78 0.00 +vt 0.36 0.79 0.00 +vt 0.33 0.78 0.00 +vt 0.04 0.76 0.00 +vt 0.09 0.74 0.00 +vt 0.04 0.74 0.00 +vt 0.24 0.80 0.00 +vt 0.33 0.85 0.00 +vt 0.36 0.82 0.00 +vt 0.16 0.74 0.00 +vt 0.15 0.73 0.00 +vt 0.19 0.76 0.00 +vt 0.19 0.74 0.00 +vt 0.18 0.73 0.00 +vt 0.18 0.76 0.00 +vt 0.18 0.74 0.00 +vt 0.51 0.83 0.00 +vt 0.54 0.92 0.00 +vt 0.34 0.87 0.00 +vt 0.32 0.86 0.00 +vt 0.31 0.86 0.00 +vt 0.28 0.86 0.00 +vt 0.24 0.85 0.00 +vt 0.19 0.83 0.00 +vt 0.15 0.80 0.00 +vt 0.09 0.80 0.00 +vt 0.04 0.78 0.00 +vt 0.04 0.80 0.00 +vt 0.01 0.78 0.00 +vt 0.01 0.80 0.00 +vt 0.03 0.82 0.00 +vt 0.01 0.77 0.00 +vt 0.00 0.83 0.00 +vt 0.04 0.84 0.00 +vt 0.00 0.84 0.00 +vt 0.03 0.86 0.00 +vt 0.00 0.86 0.00 +vt 0.03 0.88 0.00 +vt 0.00 0.87 0.00 +vt 0.04 0.89 0.00 +vt 0.00 0.89 0.00 +vt 0.04 0.91 0.00 +vt 0.00 0.90 0.00 +vt 0.04 0.88 0.00 +vt 0.09 0.89 0.00 +vt 0.15 0.90 0.00 +vt 0.14 0.91 0.00 +vt 0.09 0.91 0.00 +vt 0.09 0.88 0.00 +vt 0.09 0.87 0.00 +vt 0.09 0.85 0.00 +vt 0.15 0.87 0.00 +vt 0.15 0.89 0.00 +vt 0.19 0.89 0.00 +vt 0.18 0.90 0.00 +vt 0.21 0.90 0.00 +vt 0.18 0.92 0.00 +vt 0.21 0.92 0.00 +vt 0.25 0.92 0.00 +vt 0.28 0.92 0.00 +vt 0.28 0.90 0.00 +vt 0.21 0.85 0.00 +vt 0.18 0.85 0.00 +vt 0.21 0.87 0.00 +vt 0.25 0.87 0.00 +vt 0.25 0.88 0.00 +vt 0.28 0.88 0.00 +vt 0.30 0.87 0.00 +vt 0.30 0.90 0.00 +vt 0.30 0.92 0.00 +vt 0.25 0.90 0.00 +vt 0.21 0.89 0.00 +vt 0.18 0.87 0.00 +vt 0.14 0.85 0.00 +vt 0.29 0.86 0.00 +vt 0.05 0.84 0.00 +vt 0.01 0.83 0.00 +vt 0.15 0.83 0.00 +vt 0.08 0.82 0.00 +vt 0.15 0.85 0.00 +vt 0.14 0.83 0.00 +vt 0.35 0.31 0.00 +vt 0.35 0.37 0.00 +vt 0.33 0.31 0.00 +vt 0.33 0.26 0.00 +vt 0.29 0.27 0.00 +vt 0.29 0.23 0.00 +vt 0.33 0.22 0.00 +vt 0.30 0.21 0.00 +vt 0.34 0.20 0.00 +vt 0.35 0.22 0.00 +vt 0.34 0.26 0.00 +vt 0.35 0.26 0.00 +vt 0.36 0.31 0.00 +vt 0.36 0.36 0.00 +vt 0.37 0.40 0.00 +vt 0.35 0.41 0.00 +vt 0.37 0.42 0.00 +vt 0.34 0.42 0.00 +vt 0.31 0.42 0.00 +vt 0.32 0.41 0.00 +vt 0.32 0.37 0.00 +vt 0.28 0.37 0.00 +vt 0.29 0.32 0.00 +vt 0.28 0.41 0.00 +vt 0.69 0.72 0.00 +vt 0.71 0.73 0.00 +vt 0.70 0.71 0.00 +vt 0.72 0.73 0.00 +vt 0.71 0.70 0.00 +vt 0.73 0.73 0.00 +vt 0.69 0.73 0.00 +vt 0.70 0.73 0.00 +vt 0.70 0.74 0.00 +vt 0.71 0.74 0.00 +vt 0.72 0.74 0.00 +vt 0.73 0.74 0.00 +vt 0.33 0.58 0.00 +vt 0.29 0.57 0.00 +vt 0.33 0.52 0.00 +vt 0.29 0.52 0.00 +vt 0.32 0.47 0.00 +vt 0.28 0.47 0.00 +vt 0.32 0.43 0.00 +vt 0.35 0.43 0.00 +vt 0.37 0.44 0.00 +vt 0.35 0.47 0.00 +vt 0.37 0.48 0.00 +vt 0.35 0.52 0.00 +vt 0.36 0.53 0.00 +vt 0.35 0.58 0.00 +vt 0.36 0.58 0.00 +vt 0.35 0.62 0.00 +vt 0.33 0.62 0.00 +vt 0.28 0.43 0.00 +vt 0.34 0.63 0.00 +vt 0.31 0.63 0.00 +vt 0.29 0.61 0.00 +vt 0.26 0.63 0.00 +vt 0.26 0.62 0.00 +vt 0.38 0.14 0.00 +vt 0.39 0.16 0.00 +vt 0.38 0.22 0.00 +vt 0.39 0.22 0.00 +vt 0.37 0.27 0.00 +vt 0.39 0.27 0.00 +vt 0.38 0.31 0.00 +vt 0.39 0.31 0.00 +vt 0.38 0.37 0.00 +vt 0.39 0.37 0.00 +vt 0.39 0.43 0.00 +vt 0.39 0.47 0.00 +vt 0.37 0.49 0.00 +vt 0.38 0.49 0.00 +vt 0.37 0.50 0.00 +vt 0.97 0.50 0.00 +vt 0.95 0.45 0.00 +vt 0.95 0.50 0.00 +vt 0.97 0.56 0.00 +vt 0.95 0.55 0.00 +vt 0.97 0.60 0.00 +vt 0.95 0.59 0.00 +vt 0.97 0.66 0.00 +vt 0.95 0.66 0.00 +vt 0.95 0.70 0.00 +vt 0.98 0.72 0.00 +vt 0.96 0.75 0.00 +vt 0.98 0.76 0.00 +vt 0.98 0.77 0.00 +vt 0.96 0.76 0.00 +vt 0.93 0.75 0.00 +vt 0.47 0.73 0.00 +vt 0.46 0.75 0.00 +vt 0.44 0.73 0.00 +vt 0.42 0.73 0.00 +vt 0.41 0.73 0.00 +vt 0.23 0.78 0.00 +vt 0.28 0.78 0.00 +vt 0.29 0.82 0.00 +vt 0.45 0.82 0.00 +vt 1.00 0.79 0.00 +vt 1.00 0.77 0.00 +vt 0.99 0.72 0.00 +vt 0.99 0.65 0.00 +vt 0.99 0.60 0.00 +vt 0.99 0.55 0.00 +vt 0.99 0.50 0.00 +vt 0.67 0.71 0.00 +vt 0.68 0.72 0.00 +vt 0.66 0.71 0.00 +vt 0.66 0.74 0.00 +vt 0.67 0.74 0.00 +vt 0.65 0.72 0.00 +vt 0.06 0.05 0.00 +vt 0.10 0.06 0.00 +vt 0.06 0.07 0.00 +vt 0.10 0.08 0.00 +vt 0.06 0.14 0.00 +vt 0.08 0.14 0.00 +vt 0.13 0.08 0.00 +vt 0.12 0.16 0.00 +vt 0.17 0.09 0.00 +vt 0.16 0.16 0.00 +vt 0.20 0.09 0.00 +vt 0.20 0.18 0.00 +vt 0.25 0.11 0.00 +vt 0.20 0.07 0.00 +vt 0.27 0.08 0.00 +vt 0.20 0.06 0.00 +vt 0.27 0.07 0.00 +vt 0.21 0.04 0.00 +vt 0.28 0.05 0.00 +vt 0.28 0.03 0.00 +vt 0.17 0.05 0.00 +vt 0.17 0.07 0.00 +vt 0.14 0.06 0.00 +vt 0.14 0.04 0.00 +vt 0.18 0.03 0.00 +vt 0.21 0.02 0.00 +vt 0.29 0.07 0.00 +vt 0.28 0.09 0.00 +vt 0.31 0.08 0.00 +vt 0.18 0.02 0.00 +vt 0.10 0.04 0.00 +vt 0.15 0.03 0.00 +vt 0.15 0.01 0.00 +vt 0.11 0.02 0.00 +vt 0.04 0.04 0.00 +vt 0.07 0.03 0.00 +vt 0.09 0.02 0.00 +vt 0.11 0.01 0.00 +vt 0.20 0.10 0.00 +vt 0.27 0.11 0.00 +vt 0.30 0.04 0.00 +vt 0.31 0.05 0.00 +vt 0.33 0.08 0.00 +vt 0.32 0.09 0.00 +vt 0.31 0.11 0.00 +vt 0.29 0.13 0.00 +vt 0.23 0.17 0.00 +vt 0.28 0.08 0.00 +vt 0.34 0.04 0.00 +vt 0.34 0.06 0.00 +vt 0.26 0.18 0.00 +vt 0.33 0.07 0.00 +vt 0.41 0.31 0.00 +vt 0.41 0.38 0.00 +vt 0.50 0.31 0.00 +vt 0.51 0.36 0.00 +vt 0.41 0.42 0.00 +vt 0.50 0.40 0.00 +vt 0.40 0.47 0.00 +vt 0.41 0.47 0.00 +vt 0.51 0.43 0.00 +vt 0.43 0.46 0.00 +vt 0.51 0.26 0.00 +vt 0.41 0.26 0.00 +vt 0.41 0.21 0.00 +vt 0.41 0.17 0.00 +vt 0.49 0.18 0.00 +vt 0.49 0.21 0.00 +vt 0.45 0.73 0.00 +vt 0.44 0.75 0.00 +vt 0.09 1.00 0.00 +vt 0.09 0.98 0.00 +vt 0.10 1.00 0.00 +vt 0.10 0.98 0.00 +vt 0.27 1.00 0.00 +vt 0.27 0.98 0.00 +vt 0.28 1.00 0.00 +vt 0.28 0.98 0.00 +vt 0.28 0.96 0.00 +vt 0.27 0.96 0.00 +vt 0.28 0.94 0.00 +vt 0.27 0.94 0.00 +vt 0.10 0.96 0.00 +vt 0.10 0.94 0.00 +vt 0.09 0.96 0.00 +vt 0.09 0.94 0.00 +vt 0.15 0.96 0.00 +vt 0.15 0.95 0.00 +vt 0.13 0.96 0.00 +vt 0.13 0.95 0.00 +vt 0.45 0.81 0.00 +vt 0.36 0.81 0.00 +vt 0.41 0.81 0.00 +vt 0.42 0.82 0.00 +vt 0.42 0.81 0.00 +vt 0.44 0.81 0.00 +vt 0.48 0.76 0.00 +vt 0.44 0.70 0.00 +vt 0.45 0.70 0.00 +vt 0.50 0.68 0.00 +vt 0.55 0.69 0.00 +vt 0.58 0.70 0.00 +vt 0.49 0.04 0.00 +vt 0.47 0.04 0.00 +vt 0.48 0.03 0.00 +vt 0.47 0.03 0.00 +vt 0.01 0.72 0.00 +vt 0.02 0.70 0.00 +vt 0.02 0.72 0.00 +vt 0.01 0.68 0.00 +vt 0.02 0.67 0.00 +vt 0.01 0.62 0.00 +vt 0.02 0.62 0.00 +vt 0.06 0.67 0.00 +vt 0.06 0.63 0.00 +vt 0.11 0.63 0.00 +vt 0.11 0.67 0.00 +vt 0.16 0.64 0.00 +vt 0.16 0.67 0.00 +vt 0.20 0.64 0.00 +vt 0.20 0.68 0.00 +vt 0.22 0.65 0.00 +vt 0.22 0.68 0.00 +vt 0.20 0.69 0.00 +vt 0.16 0.69 0.00 +vt 0.17 0.70 0.00 +vt 0.06 0.70 0.00 +vt 0.11 0.70 0.00 +vt 0.12 0.71 0.00 +vt 0.07 0.71 0.00 +vt 0.28 0.42 0.00 +vt 0.01 0.75 0.00 +vt 0.48 0.02 0.00 +vt 0.47 0.02 0.00 +vt 0.01 0.63 0.00 +vt 0.08 0.91 0.00 +vt 0.05 1.00 0.00 +vt 0.07 0.99 0.00 +vt 0.06 1.00 0.00 +vt 0.08 0.98 0.00 +vt 0.04 1.00 0.00 +vt 0.03 0.99 0.00 +vt 0.00 0.96 0.00 +vt 0.01 0.91 0.00 +vt 0.00 0.94 0.00 +vt 0.01 0.98 0.00 +vt 0.22 0.61 0.00 +vt 0.20 0.60 0.00 +vt 0.20 0.62 0.00 +vt 0.16 0.68 0.00 +vt 0.16 0.63 0.00 +vt 0.26 0.21 0.00 +vt 0.25 0.22 0.00 +vt 0.38 0.09 0.00 +vt 0.44 0.82 0.00 +vt 0.93 0.78 0.00 +vt 0.94 0.78 0.00 +vt 0.49 0.05 0.00 +vt 0.49 0.06 0.00 +vt 0.48 0.04 0.00 +vt 0.47 0.06 0.00 +vt 0.23 0.73 0.00 +vt 0.27 0.73 0.00 +vt 0.21 0.74 0.00 +vt 0.29 0.74 0.00 +vt 0.29 0.77 0.00 +vt 0.63 0.01 0.00 +vt 0.66 0.01 0.00 +vt 0.63 0.02 0.00 +vt 0.66 0.02 0.00 +vt 0.90 0.76 0.00 +vt 0.90 0.75 0.00 +vt 0.89 0.76 0.00 +vt 0.89 0.74 0.00 +vt 0.84 0.74 0.00 +vt 0.83 0.76 0.00 +vt 0.84 0.76 0.00 +vt 0.83 0.75 0.00 +vt 0.68 0.90 0.00 +vt 0.61 0.96 0.00 +vt 0.67 0.96 0.00 +vt 0.61 0.97 0.00 +vt 0.67 0.97 0.00 +vt 0.64 1.00 0.00 +vt 0.62 0.99 0.00 +vt 0.66 0.99 0.00 +vt 0.93 0.77 0.00 +vt 0.94 0.77 0.00 +vt 0.36 0.87 0.00 +vt 0.37 0.87 0.00 +vt 0.38 0.87 0.00 +vt 0.53 0.97 0.00 +vt 0.53 0.96 0.00 +vt 0.55 0.97 0.00 +vt 0.52 0.96 0.00 +vt 0.53 0.95 0.00 +vt 0.59 0.99 0.00 +vt 0.59 0.96 0.00 +vt 0.59 0.98 0.00 +vt 0.60 0.97 0.00 +vt 0.59 0.97 0.00 +vt 0.59 0.93 0.00 +vt 0.56 0.97 0.00 +vt 0.57 0.93 0.00 +vt 0.54 0.97 0.00 +vt 0.54 0.93 0.00 +vt 0.52 0.93 0.00 +vt 0.52 0.94 0.00 +vt 0.53 0.98 0.00 +vt 0.55 0.98 0.00 +vt 0.56 0.98 0.00 +vt 0.56 0.94 0.00 +vt 0.57 0.96 0.00 +vt 0.51 0.93 0.00 +vt 0.58 0.97 0.00 +vt 0.58 0.96 0.00 +vt 0.58 0.95 0.00 +vt 0.57 0.97 0.00 +vt 0.47 0.75 0.00 +vt 0.40 0.01 0.00 +vt 0.40 0.07 0.00 +vt 0.46 0.02 0.00 +vt 0.46 0.06 0.00 +vt 0.38 0.01 0.00 +vt 0.38 0.07 0.00 +vt 0.35 0.02 0.00 +vt 0.35 0.06 0.00 +vt 0.46 0.03 0.00 +vt 0.46 0.04 0.00 +vt 0.41 0.03 0.00 +vt 0.39 0.05 0.00 +vt 0.39 0.07 0.00 +vt 0.39 0.02 0.00 +vt 0.58 0.93 0.00 +vt 0.52 0.03 0.00 +vt 0.49 0.03 0.00 +vt 0.57 0.01 0.00 +vt 0.62 0.01 0.00 +vt 0.52 0.01 0.00 +vt 0.62 0.02 0.00 +vt 0.57 0.02 0.00 +vt 0.51 0.02 0.00 +vt 0.48 0.01 0.00 +vt 0.52 0.02 0.00 +vt 0.62 0.03 0.00 +vt 0.57 0.03 0.00 +vt 0.51 0.04 0.00 +vt 0.21 0.51 0.00 +vt 0.19 0.51 0.00 +vt 0.20 0.49 0.00 +vt 0.19 0.49 0.00 +vt 0.22 0.52 0.00 +vt 0.20 0.52 0.00 +vt 0.20 0.54 0.00 +vt 0.23 0.54 0.00 +vt 0.24 0.56 0.00 +vt 0.21 0.55 0.00 +vt 0.24 0.57 0.00 +vt 0.22 0.57 0.00 +vt 0.24 0.59 0.00 +vt 0.22 0.58 0.00 +vt 0.20 0.58 0.00 +vt 0.22 0.59 0.00 +vt 0.21 0.49 0.00 +vt 0.21 0.50 0.00 +vt 0.19 0.50 0.00 +vt 0.19 0.52 0.00 +vt 0.19 0.54 0.00 +vt 0.19 0.56 0.00 +vt 0.48 0.73 0.00 +# 642 texture coords + +g P_51_Mustang_Hull +f 609/373/545 610/374/545 611/373/545 +f 612/375/546 611/373/547 613/376/548 +f 614/374/548 613/376/548 611/373/547 +f 613/376/548 614/374/548 615/377/549 +f 616/378/550 615/377/549 614/374/548 +f 616/378/550 617/379/551 615/377/549 +f 618/380/552 615/377/549 617/379/551 +f 618/380/552 617/379/551 619/381/553 +f 620/382/554 619/381/553 617/379/551 +f 620/382/554 621/383/555 619/381/553 +f 622/384/556 619/381/553 621/383/555 +f 621/383/555 623/385/557 622/384/556 +f 624/386/558 622/384/556 623/385/557 +f 623/385/557 625/387/559 624/386/558 +f 626/388/560 624/386/558 625/387/559 +f 626/388/560 625/387/559 627/388/561 +f 628/387/562 627/388/561 625/387/559 +f 628/387/562 629/387/563 627/388/561 +f 630/388/564 627/388/561 629/387/563 +f 630/388/564 629/387/563 631/386/565 +f 632/385/566 631/386/565 629/387/563 +f 631/386/565 632/385/566 633/384/567 +f 634/383/568 633/384/567 632/385/566 +f 633/384/567 634/383/568 635/381/569 +f 636/382/570 635/381/569 634/383/568 +f 636/382/570 637/379/571 635/381/569 +f 638/380/572 635/381/569 637/379/571 +f 638/380/572 637/379/571 639/377/573 +f 640/378/574 639/377/573 637/379/571 +f 640/378/574 641/374/575 639/377/573 +f 642/376/575 639/377/573 641/374/575 +f 641/374/575 643/373/576 642/376/575 +f 644/375/577 642/376/575 643/373/576 +f 645/375/578 646/373/579 647/376/580 +f 648/374/581 647/376/580 646/373/579 +f 647/376/580 648/374/581 649/377/582 +f 650/378/583 649/377/582 648/374/581 +f 650/378/583 651/379/584 649/377/582 +f 652/380/585 649/377/582 651/379/584 +f 652/380/585 651/379/584 653/381/586 +f 654/382/587 653/381/586 651/379/584 +f 654/382/587 655/383/588 653/381/586 +f 656/384/589 653/381/586 655/383/588 +f 655/383/588 657/385/590 656/384/589 +f 658/386/591 656/384/589 657/385/590 +f 657/385/590 659/387/592 658/386/591 +f 660/388/593 658/386/591 659/387/592 +f 660/388/593 659/387/592 661/388/594 +f 662/387/595 661/388/594 659/387/592 +f 662/387/595 663/387/596 661/388/594 +f 664/388/597 661/388/594 663/387/596 +f 664/388/597 663/387/596 665/386/598 +f 666/385/599 665/386/598 663/387/596 +f 665/386/598 666/385/599 667/384/600 +f 668/383/601 667/384/600 666/385/599 +f 667/384/600 668/383/601 669/381/602 +f 670/382/603 669/381/602 668/383/601 +f 670/382/603 671/379/604 669/381/602 +f 672/380/605 669/381/602 671/379/604 +f 672/380/605 671/379/604 673/377/606 +f 674/378/607 673/377/606 671/379/604 +f 674/378/607 610/374/608 673/377/606 +f 675/376/608 673/377/606 610/374/608 +f 610/374/608 609/373/609 675/376/608 +f 676/375/610 675/376/608 609/373/609 +f 677/385/611 678/389/612 679/390/613 +f 680/391/612 679/390/613 678/389/612 +f 678/389/612 681/392/614 680/391/612 +f 682/374/614 680/391/612 681/392/614 +f 681/392/614 683/393/613 682/374/614 +f 684/394/613 682/374/614 683/393/613 +f 683/394/615 681/374/616 685/393/615 +f 686/392/617 685/393/615 681/374/616 +f 681/374/616 678/391/618 686/392/617 +f 687/389/619 686/392/617 678/391/618 +f 678/391/618 677/390/620 687/389/619 +f 688/385/621 687/389/619 677/390/620 +f 685/394/622 686/374/623 689/393/622 +f 690/392/623 689/393/622 686/374/623 +f 686/374/623 687/391/624 690/392/623 +f 691/389/624 690/392/623 687/391/624 +f 687/391/624 688/390/622 691/389/624 +f 692/385/622 691/389/624 688/390/622 +f 674/378/625 671/379/625 610/374/625 +f 668/383/626 621/383/626 670/382/626 +f 621/383/627 620/382/627 670/382/627 +f 670/382/628 620/382/628 671/379/628 +f 617/379/625 616/378/625 620/382/625 +f 620/382/629 616/378/629 671/379/629 +f 671/379/629 616/378/629 610/374/629 +f 610/374/630 616/378/630 611/373/630 +f 616/378/631 614/374/631 611/373/631 +f 655/383/632 654/382/632 634/383/632 +f 650/378/625 648/374/625 651/379/625 +f 646/373/633 643/373/633 648/374/633 +f 648/374/634 643/373/634 651/379/634 +f 641/374/635 640/378/635 643/373/635 +f 640/378/636 637/379/636 643/373/636 +f 643/373/637 637/379/637 651/379/637 +f 651/379/638 637/379/638 654/382/638 +f 654/382/639 637/379/639 634/383/639 +f 637/379/625 636/382/625 634/383/625 +f 629/387/640 628/387/640 632/385/640 +f 662/387/641 659/387/641 628/387/641 +f 628/387/642 659/387/642 632/385/642 +f 659/387/643 657/385/643 632/385/643 +f 632/385/644 657/385/644 634/383/644 +f 657/385/645 655/383/645 634/383/645 +f 625/387/646 623/385/646 628/387/646 +f 621/383/647 668/383/647 623/385/647 +f 668/383/648 666/385/648 623/385/648 +f 666/385/649 663/387/649 623/385/649 +f 623/385/650 663/387/650 628/387/650 +f 628/387/651 663/387/651 662/387/651 +f 630/388/652 631/386/652 627/388/652 +f 633/384/653 656/384/653 631/386/653 +f 656/384/654 658/386/654 631/386/654 +f 658/386/655 660/388/655 631/386/655 +f 631/386/656 660/388/656 627/388/656 +f 627/388/657 660/388/657 661/388/657 +f 661/388/658 664/388/658 627/388/658 +f 667/384/659 622/384/659 665/386/659 +f 622/384/660 624/386/660 665/386/660 +f 665/386/661 624/386/661 664/388/661 +f 664/388/662 624/386/662 627/388/662 +f 624/386/663 626/388/663 627/388/663 +f 667/384/664 669/381/664 622/384/664 +f 675/376/665 676/375/665 673/377/665 +f 612/375/666 613/376/666 676/375/666 +f 676/375/667 613/376/667 673/377/667 +f 673/377/668 613/376/668 672/380/668 +f 615/377/669 618/380/669 613/376/669 +f 613/376/666 618/380/666 672/380/666 +f 672/380/670 618/380/670 669/381/670 +f 669/381/671 618/380/671 622/384/671 +f 618/380/672 619/381/672 622/384/672 +f 647/376/673 649/377/673 645/375/673 +f 656/384/674 633/384/674 653/381/674 +f 653/381/675 633/384/675 652/380/675 +f 635/381/676 638/380/676 633/384/676 +f 633/384/677 638/380/677 652/380/677 +f 652/380/677 638/380/677 649/377/677 +f 639/377/669 642/376/669 638/380/669 +f 638/380/678 642/376/678 649/377/678 +f 649/377/678 642/376/678 645/375/678 +f 642/376/677 644/375/677 645/375/677 +f 689/394/679 690/374/680 684/393/679 +f 682/392/681 684/393/679 690/374/680 +f 690/374/680 691/391/682 682/392/681 +f 680/389/683 682/392/681 691/391/682 +f 691/391/682 692/390/684 680/389/683 +f 679/385/685 680/389/683 692/390/684 +f 693/395/686 694/396/686 695/397/686 +f 696/398/687 697/399/688 698/400/689 +f 696/398/687 699/401/690 697/399/688 +f 700/402/691 697/399/688 699/401/690 +f 699/401/690 701/403/692 700/402/691 +f 702/404/693 700/402/691 701/403/692 +f 702/404/693 701/403/692 703/405/694 +f 704/406/695 703/405/694 701/403/692 +f 703/405/694 704/406/695 705/407/696 +f 706/408/697 705/407/696 704/406/695 +f 706/408/697 707/406/698 705/407/696 +f 708/405/699 705/407/696 707/406/698 +f 707/406/698 709/403/700 708/405/699 +f 710/409/701 708/405/699 709/403/700 +f 710/409/701 709/403/700 711/402/702 +f 712/410/703 711/402/702 709/403/700 +f 711/402/702 712/410/703 693/399/704 +f 713/398/705 693/399/704 712/410/703 +f 693/399/704 713/398/705 714/400/706 +f 715/411/707 713/398/705 716/412/708 +f 713/398/705 712/410/703 716/412/708 +f 715/411/707 717/413/709 718/414/710 +f 715/411/707 716/412/708 717/413/709 +f 716/412/708 719/415/711 717/413/709 +f 719/415/711 716/412/708 712/410/703 +f 712/410/703 709/403/700 719/415/711 +f 720/416/712 719/415/711 709/403/700 +f 707/406/698 720/416/712 709/403/700 +f 707/406/698 721/417/713 720/416/712 +f 720/416/712 721/417/713 722/418/714 +f 723/419/715 722/418/714 721/417/713 +f 722/418/714 723/419/715 724/420/716 +f 725/421/717 724/420/716 723/419/715 +f 724/420/716 725/421/717 726/422/718 +f 727/423/719 726/422/718 725/421/717 +f 727/423/719 728/424/720 726/422/718 +f 720/416/712 722/418/714 719/415/711 +f 719/415/711 722/418/714 729/425/721 +f 729/425/721 717/413/709 719/415/711 +f 717/413/709 729/425/721 730/426/722 +f 730/426/722 718/414/710 717/413/709 +f 724/420/716 729/425/721 722/418/714 +f 729/425/721 724/420/716 731/427/723 +f 731/427/723 730/426/722 729/425/721 +f 726/422/718 731/427/723 724/420/716 +f 732/426/724 733/413/725 734/414/726 +f 733/413/725 732/426/724 735/425/727 +f 736/427/728 735/425/727 732/426/724 +f 735/425/727 736/427/728 737/420/729 +f 738/422/730 737/420/729 736/427/728 +f 737/420/729 738/422/730 739/421/731 +f 740/423/732 739/421/731 738/422/730 +f 740/423/732 738/422/730 728/424/720 +f 741/428/733 728/424/720 738/422/730 +f 741/428/733 726/422/718 728/424/720 +f 741/428/733 742/429/734 726/422/718 +f 731/427/723 726/422/718 742/429/734 +f 742/429/734 743/430/735 731/427/723 +f 730/426/722 731/427/723 743/430/735 +f 743/430/735 744/431/736 730/426/722 +f 718/414/710 730/426/722 744/431/736 +f 718/414/710 744/431/736 745/432/737 +f 718/414/710 745/432/737 715/411/707 +f 737/420/729 746/418/738 735/425/727 +f 735/425/727 747/415/739 733/413/725 +f 747/415/739 735/425/727 746/418/738 +f 746/418/738 748/416/740 747/415/739 +f 749/433/741 750/434/742 698/400/689 +f 751/411/743 698/400/689 750/434/742 +f 751/411/743 696/398/687 698/400/689 +f 696/398/687 751/411/743 733/413/725 +f 696/398/687 733/413/725 699/401/690 +f 747/415/739 699/401/690 733/413/725 +f 699/401/690 747/415/739 701/403/692 +f 748/416/740 701/403/692 747/415/739 +f 748/416/740 704/406/695 701/403/692 +f 752/417/744 704/406/695 748/416/740 +f 748/416/740 746/418/738 752/417/744 +f 753/419/745 752/417/744 746/418/738 +f 746/418/738 737/420/729 753/419/745 +f 739/421/731 753/419/745 737/420/729 +f 754/435/746 755/436/747 756/437/748 +f 755/436/747 754/435/746 757/438/749 +f 755/436/747 757/438/749 758/435/750 +f 759/439/751 758/435/750 757/438/749 +f 759/439/751 760/440/752 758/435/750 +f 760/440/752 759/439/751 761/441/753 +f 761/441/753 762/442/754 760/440/752 +f 763/443/755 760/440/752 762/442/754 +f 762/442/754 764/444/756 763/443/755 +f 765/445/757 763/443/755 764/444/756 +f 764/444/756 766/446/758 765/445/757 +f 749/433/741 765/445/757 766/446/758 +f 766/446/758 767/447/759 749/433/741 +f 750/434/742 749/433/741 767/447/759 +f 768/432/760 750/434/742 767/447/759 +f 750/434/742 768/432/760 751/411/743 +f 734/414/726 751/411/743 768/432/760 +f 751/411/743 734/414/726 733/413/725 +f 769/448/761 770/449/762 757/438/749 +f 759/439/751 757/438/749 770/449/762 +f 770/449/762 761/441/753 759/439/751 +f 713/398/705 715/411/707 714/400/706 +f 715/411/707 771/434/763 714/400/706 +f 771/434/763 715/411/707 745/432/737 +f 771/434/763 745/432/737 772/447/764 +f 772/447/764 745/432/737 773/450/765 +f 773/450/765 774/451/766 772/447/764 +f 773/450/765 767/447/759 774/451/766 +f 775/452/767 774/451/766 767/447/759 +f 767/447/759 766/446/758 775/452/767 +f 776/453/768 775/452/767 766/446/758 +f 766/446/758 764/444/756 776/453/768 +f 777/454/769 776/453/768 764/444/756 +f 764/444/756 762/442/754 777/454/769 +f 778/455/770 777/454/769 762/442/754 +f 762/442/754 761/441/753 778/455/770 +f 779/456/771 778/455/770 761/441/753 +f 761/441/753 770/449/762 779/456/771 +f 780/457/772 779/456/771 770/449/762 +f 781/458/773 782/459/774 777/454/769 +f 776/453/768 777/454/769 782/459/774 +f 776/453/768 782/459/774 775/452/767 +f 783/460/775 775/452/767 782/459/774 +f 775/452/767 783/460/775 774/451/766 +f 783/460/775 784/452/776 774/451/766 +f 784/452/776 772/447/764 774/451/766 +f 772/447/764 784/452/776 785/446/777 +f 785/446/777 786/461/778 772/447/764 +f 786/461/778 785/446/777 787/445/779 +f 787/445/779 788/462/780 786/461/778 +f 788/462/780 787/445/779 789/463/781 +f 789/463/781 790/464/782 788/462/780 +f 789/463/781 791/465/783 790/464/782 +f 792/466/784 790/464/782 791/465/783 +f 792/466/784 791/465/783 793/467/566 +f 793/467/566 791/465/783 756/437/748 +f 754/435/746 756/437/748 791/465/783 +f 794/468/785 795/469/786 796/470/787 +f 781/458/773 796/470/787 795/469/786 +f 795/469/786 797/471/788 781/458/773 +f 782/459/774 781/458/773 797/471/788 +f 797/471/788 798/472/789 782/459/774 +f 783/460/775 782/459/774 798/472/789 +f 783/460/775 798/472/789 799/459/790 +f 783/460/775 799/459/790 784/452/776 +f 800/473/791 784/452/776 799/459/790 +f 800/473/791 785/446/777 784/452/776 +f 785/446/777 800/473/791 801/444/792 +f 801/444/792 787/445/779 785/446/777 +f 787/445/779 801/444/792 802/443/793 +f 802/443/793 789/463/781 787/445/779 +f 802/443/793 803/440/794 789/463/781 +f 791/465/783 789/463/781 803/440/794 +f 791/465/783 803/440/794 754/435/746 +f 804/439/795 754/435/746 803/440/794 +f 802/443/793 805/442/796 803/440/794 +f 805/442/796 802/443/793 801/444/792 +f 801/444/792 806/454/797 805/442/796 +f 806/454/797 801/444/792 800/473/791 +f 800/473/791 799/459/790 806/454/797 +f 797/471/788 795/469/786 807/474/798 +f 807/474/798 808/475/799 797/471/788 +f 798/472/789 797/471/788 808/475/799 +f 798/472/789 808/475/799 809/471/800 +f 809/471/800 799/459/790 798/472/789 +f 799/459/790 809/471/800 810/458/801 +f 810/458/801 806/454/797 799/459/790 +f 806/454/797 810/458/801 811/455/802 +f 811/455/802 805/442/796 806/454/797 +f 805/442/796 811/455/802 812/441/803 +f 812/441/803 803/440/794 805/442/796 +f 803/440/794 812/441/803 804/439/795 +f 813/449/804 804/439/795 812/441/803 +f 812/441/803 814/456/805 813/449/804 +f 814/456/805 812/441/803 811/455/802 +f 811/455/802 815/470/806 814/456/805 +f 815/470/806 811/455/802 810/458/801 +f 810/458/801 816/469/807 815/470/806 +f 816/469/807 810/458/801 809/471/800 +f 809/471/800 817/474/808 816/469/807 +f 817/474/808 809/471/800 808/475/799 +f 808/475/799 818/476/809 817/474/808 +f 808/475/799 807/474/798 818/476/809 +f 819/477/810 818/476/809 807/474/798 +f 807/474/798 820/478/811 819/477/810 +f 821/479/812 819/477/810 820/478/811 +f 820/478/811 822/480/813 821/479/812 +f 823/481/814 821/479/812 822/480/813 +f 822/480/813 820/478/811 794/468/785 +f 795/469/786 794/468/785 820/478/811 +f 820/478/811 807/474/798 795/469/786 +f 824/482/815 825/483/816 826/484/817 +f 827/485/818 826/484/817 825/483/816 +f 827/485/818 825/483/816 828/486/819 +f 829/487/820 828/486/819 825/483/816 +f 829/487/820 830/488/821 828/486/819 +f 829/487/820 831/489/822 830/488/821 +f 830/488/821 831/489/822 832/490/823 +f 823/481/814 832/490/823 831/489/822 +f 832/490/823 823/481/814 833/491/824 +f 822/480/813 833/491/824 823/481/814 +f 833/491/824 822/480/813 834/492/825 +f 794/468/785 834/492/825 822/480/813 +f 834/492/825 794/468/785 835/493/826 +f 796/470/787 835/493/826 794/468/785 +f 835/493/826 796/470/787 779/456/771 +f 778/455/770 779/456/771 796/470/787 +f 796/470/787 781/458/773 778/455/770 +f 777/454/769 778/455/770 781/458/773 +f 836/494/827 833/491/824 834/492/825 +f 837/495/828 830/488/821 838/496/829 +f 837/495/828 838/496/829 839/497/830 +f 838/496/829 840/498/831 839/497/830 +f 840/498/831 841/499/832 839/497/830 +f 840/498/831 842/500/833 841/499/832 +f 842/500/833 843/501/834 841/499/832 +f 836/494/827 843/501/834 842/500/833 +f 836/494/827 844/502/835 843/501/834 +f 836/494/827 834/492/825 844/502/835 +f 835/493/826 844/502/835 834/492/825 +f 844/502/835 835/493/826 780/457/772 +f 779/456/771 780/457/772 835/493/826 +f 832/490/823 838/496/829 830/488/821 +f 837/495/828 839/497/830 830/488/821 +f 830/488/821 839/497/830 828/486/819 +f 839/497/830 845/503/836 828/486/819 +f 839/497/830 846/504/837 845/503/836 +f 847/505/836 845/503/836 846/504/837 +f 846/504/837 848/506/838 847/505/836 +f 849/507/839 847/505/836 848/506/838 +f 850/508/838 849/507/839 848/506/838 +f 848/506/838 851/509/840 850/508/838 +f 851/509/840 848/506/838 852/510/841 +f 852/510/841 853/511/842 851/509/840 +f 853/511/842 852/510/841 843/501/834 +f 841/499/832 843/501/834 852/510/841 +f 852/510/841 846/504/837 841/499/832 +f 839/497/830 841/499/832 846/504/837 +f 846/504/837 852/510/841 848/506/838 +f 770/449/762 769/448/761 780/457/772 +f 854/512/843 780/457/772 769/448/761 +f 854/512/843 769/448/761 855/457/844 +f 854/512/843 855/457/844 856/501/845 +f 857/502/846 856/501/845 855/457/844 +f 857/502/846 858/494/847 856/501/845 +f 858/494/847 857/502/846 859/492/848 +f 860/491/849 858/494/847 859/492/848 +f 860/491/849 859/492/848 861/480/850 +f 861/480/850 862/481/851 860/491/849 +f 862/481/851 861/480/850 863/479/852 +f 863/479/852 864/513/853 862/481/851 +f 864/513/853 863/479/852 865/514/854 +f 865/514/854 866/482/855 864/513/853 +f 865/514/854 867/515/669 866/482/855 +f 868/516/856 866/482/855 867/515/669 +f 868/516/856 867/515/669 824/482/815 +f 824/482/815 826/484/817 868/516/856 +f 869/489/857 862/481/851 864/513/853 +f 862/481/851 869/489/857 870/490/858 +f 870/490/858 860/491/849 862/481/851 +f 871/488/859 870/490/858 869/489/857 +f 870/490/858 871/488/859 872/496/860 +f 873/517/861 874/518/862 875/519/863 +f 876/519/864 875/519/863 874/518/862 +f 877/508/865 875/519/863 876/519/864 +f 876/519/864 878/509/866 877/508/865 +f 879/506/867 877/508/865 878/509/866 +f 878/509/866 880/510/868 879/506/867 +f 881/504/869 879/506/867 880/510/868 +f 880/510/868 882/499/870 881/504/869 +f 883/497/871 881/504/869 882/499/870 +f 882/499/870 884/498/872 883/497/871 +f 884/498/872 872/496/860 883/497/871 +f 872/496/860 885/495/873 883/497/871 +f 885/495/873 872/496/860 871/488/859 +f 885/495/873 871/488/859 886/487/874 +f 869/489/857 886/487/874 871/488/859 +f 886/487/874 869/489/857 887/483/875 +f 864/513/853 887/483/875 869/489/857 +f 887/483/875 864/513/853 866/482/855 +f 888/500/876 884/498/872 882/499/870 +f 858/494/847 888/500/876 856/501/845 +f 856/501/845 888/500/876 882/499/870 +f 882/499/870 880/510/868 856/501/845 +f 889/511/877 856/501/845 880/510/868 +f 880/510/868 878/509/866 889/511/877 +f 854/512/843 856/501/845 890/520/878 +f 889/511/877 890/520/878 856/501/845 +f 889/511/877 891/521/879 890/520/878 +f 891/521/879 889/511/877 878/509/866 +f 878/509/866 876/519/864 891/521/879 +f 874/518/862 891/521/879 876/519/864 +f 891/521/879 874/518/862 892/522/880 +f 893/523/881 892/522/880 874/518/862 +f 893/523/881 894/518/882 892/522/880 +f 894/518/882 893/523/881 895/517/883 +f 895/517/883 896/519/884 894/518/882 +f 897/519/885 894/518/882 896/519/884 +f 896/519/884 898/524/886 897/519/885 +f 892/522/880 890/520/878 891/521/879 +f 892/522/880 899/521/887 890/520/878 +f 899/521/887 892/522/880 894/518/882 +f 894/518/882 897/519/885 899/521/887 +f 780/457/772 854/512/843 844/502/835 +f 843/501/834 844/502/835 854/512/843 +f 854/512/843 890/520/878 843/501/834 +f 853/511/842 843/501/834 890/520/878 +f 853/511/842 890/520/878 899/521/887 +f 899/521/887 851/509/840 853/511/842 +f 851/509/840 899/521/887 897/519/885 +f 897/519/885 850/508/838 851/509/840 +f 850/508/838 897/519/885 898/524/886 +f 898/524/886 849/507/839 850/508/838 +f 898/524/888 849/507/839 898/524/886 +f 898/524/886 896/519/884 898/524/888 +f 898/524/888 896/519/884 900/525/889 +f 900/525/889 896/519/884 895/517/883 +f 895/517/883 901/517/890 900/525/889 +f 901/517/890 895/517/883 893/523/881 +f 901/517/890 893/523/881 873/517/861 +f 874/518/862 873/517/861 893/523/881 +f 902/526/891 898/524/888 900/525/889 +f 903/524/892 904/524/893 905/524/892 +f 905/524/892 904/524/893 877/508/865 +f 904/524/893 875/519/863 877/508/865 +f 904/524/893 906/526/894 875/519/863 +f 875/519/863 906/526/894 873/517/861 +f 906/526/894 907/525/895 873/517/861 +f 873/517/861 907/525/895 901/517/890 +f 908/517/896 901/517/890 907/525/895 +f 908/517/896 900/525/889 901/517/890 +f 900/525/889 908/517/896 909/527/897 +f 900/525/889 909/527/897 902/526/891 +f 910/528/898 902/526/891 909/527/897 +f 910/528/898 909/527/897 906/526/894 +f 907/525/895 906/526/894 909/527/897 +f 907/525/895 909/527/897 908/517/896 +f 909/527/897 908/517/896 911/527/899 +f 912/485/900 887/483/875 913/484/901 +f 887/483/875 912/485/900 886/487/874 +f 914/486/902 886/487/874 912/485/900 +f 914/486/902 915/503/903 886/487/874 +f 915/503/903 885/495/873 886/487/874 +f 883/497/871 885/495/873 915/503/903 +f 883/497/871 915/503/903 881/504/869 +f 916/505/904 881/504/869 915/503/903 +f 881/504/869 916/505/904 879/506/867 +f 917/507/797 879/506/867 916/505/904 +f 879/506/867 917/507/797 877/508/865 +f 905/524/892 877/508/865 917/507/797 +f 866/482/855 913/484/901 887/483/875 +f 866/482/855 868/516/856 913/484/901 +f 918/529/789 913/484/901 868/516/856 +f 918/529/789 868/516/856 826/484/817 +f 792/466/784 919/530/905 790/464/782 +f 920/531/906 790/464/782 919/530/905 +f 919/530/905 921/532/907 920/531/906 +f 922/533/908 920/531/906 921/532/907 +f 921/532/907 923/534/909 922/533/908 +f 924/379/910 922/533/908 923/534/909 +f 923/534/909 925/535/911 924/379/910 +f 926/382/912 924/379/910 925/535/911 +f 925/535/911 927/536/913 926/382/912 +f 928/537/907 926/382/912 927/536/913 +f 928/537/907 927/536/913 929/538/914 +f 929/538/914 930/539/915 928/537/907 +f 930/539/915 929/538/914 931/540/916 +f 931/540/916 932/541/917 930/539/915 +f 932/541/917 931/540/916 933/542/918 +f 933/542/918 934/543/919 932/541/917 +f 933/542/918 935/544/920 934/543/919 +f 936/545/921 934/543/919 935/544/920 +f 926/382/912 937/546/922 924/379/910 +f 937/546/922 938/547/923 924/379/910 +f 922/533/908 924/379/910 938/547/923 +f 938/547/923 939/548/924 922/533/908 +f 920/531/906 922/533/908 939/548/924 +f 939/548/924 940/549/925 920/531/906 +f 790/464/782 920/531/906 940/549/925 +f 940/549/925 788/462/780 790/464/782 +f 771/434/763 772/447/764 786/461/778 +f 786/461/778 714/400/706 771/434/763 +f 714/400/706 786/461/778 788/462/780 +f 788/462/780 940/549/925 714/400/706 +f 941/550/926 714/400/706 940/549/925 +f 940/549/925 939/548/924 941/550/926 +f 694/551/927 941/550/926 939/548/924 +f 939/548/924 938/547/923 694/551/927 +f 942/552/928 694/551/927 938/547/923 +f 938/547/923 937/546/922 942/552/928 +f 943/553/929 942/552/928 937/546/922 +f 937/546/922 926/382/912 943/553/929 +f 944/554/930 943/553/929 926/382/912 +f 926/382/912 945/388/931 944/554/930 +f 945/388/931 926/382/912 928/537/907 +f 945/388/931 928/537/907 930/539/915 +f 694/551/927 693/399/704 941/550/926 +f 941/550/926 693/399/704 714/400/706 +f 936/545/921 935/544/920 946/555/932 +f 936/545/921 946/555/932 947/556/933 +f 948/557/934 947/556/933 946/555/932 +f 948/557/934 949/555/935 947/556/933 +f 950/545/936 947/556/933 949/555/935 +f 950/545/936 949/555/935 951/544/937 +f 950/545/936 951/544/937 952/543/938 +f 953/542/939 952/543/938 951/544/937 +f 953/542/939 954/541/940 952/543/938 +f 954/541/940 953/542/939 955/540/941 +f 955/540/941 956/558/942 954/541/940 +f 956/558/942 955/540/941 957/538/943 +f 957/538/943 958/537/944 956/558/942 +f 958/537/944 957/538/943 959/536/945 +f 958/537/944 959/536/945 960/382/946 +f 961/559/947 960/382/946 959/536/945 +f 960/382/946 961/559/947 962/560/948 +f 963/534/949 962/560/948 961/559/947 +f 947/556/933 964/561/950 965/562/951 +f 947/556/933 950/545/936 964/561/950 +f 952/543/938 964/561/950 950/545/936 +f 966/563/952 952/543/938 954/541/940 +f 966/563/952 967/564/953 952/543/938 +f 964/561/950 952/543/938 967/564/953 +f 968/564/954 964/561/950 967/564/953 +f 968/564/954 969/565/955 964/561/950 +f 965/562/951 964/561/950 969/565/955 +f 965/562/951 969/565/955 970/561/956 +f 970/561/956 947/556/933 965/562/951 +f 947/556/933 970/561/956 936/545/921 +f 934/543/919 936/545/921 970/561/956 +f 970/561/956 971/564/957 934/543/919 +f 972/566/958 934/543/919 971/564/957 +f 972/566/958 932/541/917 934/543/919 +f 970/561/956 973/567/959 971/564/957 +f 973/567/959 970/561/956 969/565/955 +f 962/560/948 963/534/949 974/533/960 +f 975/532/961 974/533/960 963/534/949 +f 974/533/960 975/532/961 976/531/962 +f 977/530/963 976/531/962 975/532/961 +f 976/531/962 977/530/963 978/568/964 +f 979/466/965 978/568/964 977/530/963 +f 979/466/965 980/465/966 978/568/964 +f 980/465/966 979/466/965 981/467/967 +f 981/467/967 982/437/968 980/465/966 +f 758/435/750 980/465/966 982/437/968 +f 758/435/750 982/437/968 755/436/747 +f 983/569/747 755/436/747 982/437/968 +f 983/569/747 756/437/748 755/436/747 +f 984/463/969 978/568/964 980/465/966 +f 984/463/969 985/462/813 978/568/964 +f 986/549/970 978/568/964 985/462/813 +f 978/568/964 986/549/970 976/531/962 +f 987/548/971 976/531/962 986/549/970 +f 976/531/962 987/548/971 974/533/960 +f 988/547/972 974/533/960 987/548/971 +f 974/533/960 988/547/972 962/560/948 +f 989/546/973 962/560/948 988/547/972 +f 989/546/973 960/382/946 962/560/948 +f 980/465/966 758/435/750 760/440/752 +f 980/465/966 760/440/752 984/463/969 +f 763/443/755 984/463/969 760/440/752 +f 763/443/755 765/445/757 984/463/969 +f 985/462/813 984/463/969 765/445/757 +f 765/445/757 749/433/741 985/462/813 +f 698/400/689 985/462/813 749/433/741 +f 985/462/813 698/400/689 986/549/970 +f 990/550/974 986/549/970 698/400/689 +f 986/549/970 990/550/974 987/548/971 +f 991/551/975 987/548/971 990/550/974 +f 987/548/971 991/551/975 988/547/972 +f 992/552/976 988/547/972 991/551/975 +f 988/547/972 992/552/976 989/546/973 +f 993/553/977 989/546/973 992/552/976 +f 989/546/973 993/553/977 960/382/946 +f 994/554/978 960/382/946 993/553/977 +f 960/382/946 994/554/978 995/388/979 +f 697/399/688 990/550/974 698/400/689 +f 697/399/688 991/551/975 990/550/974 +f 996/570/980 997/571/981 923/534/909 +f 925/535/911 923/534/909 997/571/981 +f 925/535/911 997/571/981 998/572/982 +f 999/573/983 925/535/911 998/572/982 +f 927/536/913 925/535/911 999/573/983 +f 927/536/913 999/573/983 1000/574/984 +f 1000/574/984 929/538/914 927/536/913 +f 1000/574/984 1001/575/985 929/538/914 +f 1001/575/985 931/540/916 929/538/914 +f 931/540/916 1001/575/985 1002/576/986 +f 1002/576/986 933/542/918 931/540/916 +f 933/542/918 1002/576/986 935/544/920 +f 1003/577/987 935/544/920 1002/576/986 +f 935/544/920 1003/577/987 1004/578/988 +f 1005/579/989 1004/578/988 1003/577/987 +f 1004/578/988 1005/579/989 1006/580/990 +f 1007/581/991 1006/580/990 1005/579/989 +f 1008/582/992 1007/581/991 1005/579/989 +f 1006/580/990 1009/583/993 1004/578/988 +f 946/555/932 1004/578/988 1009/583/993 +f 1004/578/988 946/555/932 935/544/920 +f 1010/581/994 1007/581/991 1008/582/992 +f 1011/584/995 1010/581/994 1008/582/992 +f 1008/582/992 1012/585/996 1011/584/995 +f 1013/586/997 1011/584/995 1012/585/996 +f 1012/585/996 1014/587/998 1013/586/997 +f 1015/588/999 1013/586/997 1014/587/998 +f 1014/587/998 1016/589/1000 1015/588/999 +f 1017/590/1001 1015/588/999 1016/589/1000 +f 1016/589/1000 1018/591/1002 1017/590/1001 +f 1019/592/1003 1017/590/1001 1018/591/1002 +f 1018/591/1002 1020/593/1004 1019/592/1003 +f 1021/594/1005 1019/592/1003 1020/593/1004 +f 1021/594/1005 1020/593/1004 1022/592/1006 +f 1023/591/1007 1022/592/1006 1020/593/1004 +f 1022/592/1006 1023/591/1007 1024/590/1008 +f 1025/595/1009 1024/590/1008 1023/591/1007 +f 1024/590/1008 1025/595/1009 1026/588/1010 +f 1027/587/1011 1026/588/1010 1025/595/1009 +f 1023/591/1007 1028/596/1012 1025/595/1009 +f 1029/597/1013 1028/596/1012 1030/598/1014 +f 1031/599/1015 1030/598/1014 1028/596/1012 +f 1028/596/1012 1023/591/1007 1031/599/1015 +f 1020/593/1004 1031/599/1015 1023/591/1007 +f 1020/593/1004 1018/591/1002 1031/599/1015 +f 1032/596/1016 1031/599/1015 1018/591/1002 +f 1018/591/1002 1016/589/1000 1032/596/1016 +f 1033/600/1017 1032/596/1016 1016/589/1000 +f 1016/589/1000 1014/587/998 1033/600/1017 +f 1034/601/1018 1033/600/1017 1014/587/998 +f 1014/587/998 1012/585/996 1034/601/1018 +f 1035/602/1019 1034/601/1018 1012/585/996 +f 1012/585/996 1008/582/992 1035/602/1019 +f 1034/601/1018 1035/602/1019 1036/603/1020 +f 1033/600/1017 1034/601/1018 1037/604/1021 +f 1036/603/1020 1037/604/1021 1034/601/1018 +f 1037/604/1021 1036/603/1020 1038/605/1022 +f 1032/596/1016 1033/600/1017 1039/597/1023 +f 1037/604/1021 1039/597/1023 1033/600/1017 +f 1039/597/1023 1037/604/1021 1040/606/1024 +f 1038/605/1022 1040/606/1024 1037/604/1021 +f 1040/606/1024 1038/605/1022 1041/607/1025 +f 1031/599/1015 1032/596/1016 1030/598/1014 +f 1039/597/1023 1030/598/1014 1032/596/1016 +f 1030/598/1014 1039/597/1023 1042/608/1026 +f 1040/606/1024 1042/608/1026 1039/597/1023 +f 1042/608/1026 1040/606/1024 1043/609/1027 +f 1041/607/1025 1043/609/1027 1040/606/1024 +f 1043/609/1027 1041/607/1025 1044/610/1028 +f 1045/611/1026 1046/612/1029 1044/610/1028 +f 1047/613/1030 1048/614/1031 1049/615/1032 +f 1049/615/1032 1050/616/1033 1047/613/1030 +f 1050/616/1033 1049/615/1032 1051/617/1034 +f 1051/617/1034 1052/618/1035 1050/616/1033 +f 1052/618/1035 1051/617/1034 1046/612/1029 +f 1052/618/1035 1046/612/1029 1053/619/1036 +f 1054/620/1037 1053/619/1036 1046/612/1029 +f 1054/620/1037 1046/612/1029 1055/621/1027 +f 1045/611/1026 1055/621/1027 1046/612/1029 +f 1045/611/1026 1056/612/1038 1055/621/1027 +f 1045/611/1026 1044/610/1028 1056/612/1038 +f 1057/622/1039 1056/612/1038 1044/610/1028 +f 1057/622/1039 1044/610/1028 1041/607/1025 +f 1041/607/1025 1058/623/1040 1057/622/1039 +f 1058/623/1040 1041/607/1025 1038/605/1022 +f 1038/605/1022 1059/624/1041 1058/623/1040 +f 1059/624/1041 1038/605/1022 1036/603/1020 +f 1036/603/1020 1060/625/1042 1059/624/1041 +f 1047/613/1030 1061/574/1043 1062/575/885 +f 1061/574/1043 1047/613/1030 1050/616/1033 +f 1050/616/1033 1063/626/1044 1061/574/1043 +f 1063/626/1044 1050/616/1033 1052/618/1035 +f 1063/626/1044 1052/618/1035 1064/572/1045 +f 1053/619/1036 1064/572/1045 1052/618/1035 +f 953/542/939 951/544/937 1065/576/1046 +f 1065/576/1046 955/540/941 953/542/939 +f 955/540/941 1065/576/1046 1062/575/885 +f 1062/575/885 957/538/943 955/540/941 +f 1062/575/885 1061/574/1043 957/538/943 +f 1061/574/1043 959/536/945 957/538/943 +f 959/536/945 1061/574/1043 1063/626/1044 +f 959/536/945 1063/626/1044 961/559/947 +f 961/559/947 1063/626/1044 1064/572/1045 +f 1066/571/1047 961/559/947 1064/572/1045 +f 961/559/947 1066/571/1047 963/534/949 +f 1067/570/1048 963/534/949 1066/571/1047 +f 1026/588/1010 1027/587/1011 1068/586/1049 +f 1069/627/1050 1068/586/1049 1027/587/1011 +f 1068/586/1049 1069/627/1050 1070/628/1051 +f 1071/582/1052 1070/628/1051 1069/627/1050 +f 1070/628/1051 1071/582/1052 1072/581/1053 +f 1072/581/1053 1071/582/1052 1073/581/1054 +f 1073/581/1054 1071/582/1052 1074/579/1055 +f 1073/581/1054 1074/579/1055 1075/580/1056 +f 1076/578/1057 1075/580/1056 1074/579/1055 +f 1075/580/1056 1076/578/1057 1077/583/1058 +f 949/555/935 1077/583/1058 1076/578/1057 +f 1076/578/1057 951/544/937 949/555/935 +f 951/544/937 1076/578/1057 1078/577/1059 +f 1078/577/1059 1065/576/1046 951/544/937 +f 1065/576/1046 1078/577/1059 1079/629/1060 +f 1079/629/1060 1062/575/885 1065/576/1046 +f 1062/575/885 1079/629/1060 1048/614/1031 +f 1048/614/1031 1047/613/1030 1062/575/885 +f 1074/579/1055 1078/577/1059 1076/578/1057 +f 1078/577/1059 1074/579/1055 1080/630/1061 +f 1080/630/1061 1079/629/1060 1078/577/1059 +f 1079/629/1060 1080/630/1061 1081/631/1062 +f 1081/631/1062 1048/614/1031 1079/629/1060 +f 1081/631/1062 1082/624/1063 1048/614/1031 +f 1082/624/1063 1049/615/1032 1048/614/1031 +f 1049/615/1032 1082/624/1063 1083/623/1064 +f 1083/623/1064 1051/617/1034 1049/615/1032 +f 1051/617/1034 1083/623/1064 1084/622/1065 +f 1084/622/1065 1046/612/1029 1051/617/1034 +f 1084/622/1065 1044/610/1028 1046/612/1029 +f 1084/622/1065 1085/607/1066 1044/610/1028 +f 1043/609/1027 1044/610/1028 1085/607/1066 +f 1085/607/1066 1086/606/1067 1043/609/1027 +f 1042/608/1026 1043/609/1027 1086/606/1067 +f 1086/606/1067 1029/597/1013 1042/608/1026 +f 1030/598/1014 1042/608/1026 1029/597/1013 +f 1087/603/1068 1082/624/1063 1081/631/1062 +f 1088/605/1069 1083/623/1064 1082/624/1063 +f 1082/624/1063 1087/603/1068 1088/605/1069 +f 1089/604/1070 1088/605/1069 1087/603/1068 +f 1087/603/1068 1090/601/1071 1089/604/1070 +f 1090/601/1071 1087/603/1068 1091/602/1072 +f 1091/602/1072 1087/603/1068 1081/631/1062 +f 1091/602/1072 1081/631/1062 1080/630/1061 +f 1092/600/1073 1089/604/1070 1090/601/1071 +f 1085/607/1066 1084/622/1065 1083/623/1064 +f 1083/623/1064 1088/605/1069 1085/607/1066 +f 1086/606/1067 1085/607/1066 1088/605/1069 +f 1088/605/1069 1089/604/1070 1086/606/1067 +f 1029/597/1013 1086/606/1067 1089/604/1070 +f 1089/604/1070 1092/600/1073 1029/597/1013 +f 1028/596/1012 1029/597/1013 1092/600/1073 +f 1092/600/1073 1025/595/1009 1028/596/1012 +f 1025/595/1009 1092/600/1073 1027/587/1011 +f 1090/601/1071 1027/587/1011 1092/600/1073 +f 1027/587/1011 1090/601/1071 1069/627/1050 +f 1091/602/1072 1069/627/1050 1090/601/1071 +f 1069/627/1050 1091/602/1072 1071/582/1052 +f 1080/630/1061 1071/582/1052 1091/602/1072 +f 1071/582/1052 1080/630/1061 1074/579/1055 +f 1035/602/1019 1060/625/1042 1036/603/1020 +f 1035/602/1019 1093/630/1074 1060/625/1042 +f 1093/630/1074 1035/602/1019 1008/582/992 +f 1008/582/992 1005/579/989 1093/630/1074 +f 1003/577/987 1093/630/1074 1005/579/989 +f 1093/630/1074 1003/577/987 1094/632/985 +f 1002/576/986 1094/632/985 1003/577/987 +f 1094/632/985 1002/576/986 1001/575/985 +f 1001/575/985 1095/614/1075 1094/632/985 +f 1095/614/1075 1001/575/985 1096/613/1076 +f 1096/613/1076 1097/615/1077 1095/614/1075 +f 1097/615/1077 1096/613/1076 1098/616/1078 +f 1098/616/1078 1099/617/1079 1097/615/1077 +f 1099/617/1079 1098/616/1078 1100/618/1080 +f 1100/618/1080 1056/612/1038 1099/617/1079 +f 1100/618/1080 1101/619/1081 1056/612/1038 +f 1102/620/1082 1056/612/1038 1101/619/1081 +f 1102/620/1082 1055/621/1027 1056/612/1038 +f 1094/632/985 1060/625/1042 1093/630/1074 +f 1060/625/1042 1094/632/985 1095/614/1075 +f 1059/624/1041 1060/625/1042 1095/614/1075 +f 1059/624/1041 1095/614/1075 1097/615/1077 +f 1097/615/1077 1058/623/1040 1059/624/1041 +f 1058/623/1040 1097/615/1077 1099/617/1079 +f 1099/617/1079 1057/622/1039 1058/623/1040 +f 1057/622/1039 1099/617/1079 1056/612/1038 +f 1103/633/1083 1104/634/1084 1105/635/1085 +f 1105/635/1085 1106/636/1086 1103/633/1083 +f 1106/636/1086 1105/635/1085 1107/637/1087 +f 1107/637/1087 1108/638/1088 1106/636/1086 +f 1109/639/1089 1106/636/1086 1108/638/1088 +f 1108/638/1088 1110/640/1090 1109/639/1089 +f 1111/641/1013 1109/639/1089 1110/640/1090 +f 1111/641/1013 1112/642/1091 1109/639/1089 +f 1112/642/1091 1113/643/1092 1109/639/1089 +f 1112/642/1091 1114/644/1093 1113/643/1092 +f 1114/644/1093 1115/645/1094 1113/643/1092 +f 1103/633/1083 1113/643/1092 1115/645/1094 +f 1115/645/1094 1116/646/1095 1103/633/1083 +f 1104/634/1084 1103/633/1083 1116/646/1095 +f 1116/646/1095 1117/647/1096 1104/634/1084 +f 1118/648/1097 1104/634/1084 1117/647/1096 +f 1117/647/1096 836/649/1098 1118/648/1097 +f 842/650/1099 1118/648/1097 836/649/1098 +f 1113/643/1092 1103/633/1083 1106/636/1086 +f 1106/636/1086 1109/639/1089 1113/643/1092 +f 842/650/1099 840/651/1100 1118/648/1097 +f 1119/652/1101 1118/648/1097 840/651/1100 +f 1119/652/1101 1120/653/1102 1118/648/1097 +f 1120/653/1102 1119/652/1101 1121/654/749 +f 1121/654/749 1122/655/1103 1120/653/1102 +f 1105/635/1085 1120/653/1102 1122/655/1103 +f 1122/655/1103 1107/637/1087 1105/635/1085 +f 1123/656/1104 1121/654/749 1119/652/1101 +f 1124/657/1105 1125/658/1106 1126/659/1107 +f 1127/660/1108 1126/659/1107 1125/658/1106 +f 1126/659/1107 1127/660/1108 1128/661/1109 +f 1129/662/1110 1128/661/1109 1127/660/1108 +f 1128/661/1109 1129/662/1110 1130/659/1111 +f 1131/660/1112 1130/659/1111 1129/662/1110 +f 1130/659/1111 1131/660/1112 1132/657/1113 +f 1133/658/1114 1132/657/1113 1131/660/1112 +f 1132/657/1113 1133/658/1114 1134/663/1115 +f 1135/664/1116 1134/663/1115 1133/658/1114 +f 1134/663/1115 1135/664/1116 1124/657/1105 +f 1125/658/1106 1124/657/1105 1135/664/1116 +f 1135/664/1116 1136/665/1117 1125/658/1106 +f 1137/666/1118 1125/658/1106 1136/665/1117 +f 1125/658/1106 1137/666/1118 1127/660/1108 +f 1138/667/1119 1127/660/1108 1137/666/1118 +f 1127/660/1108 1138/667/1119 1129/662/1110 +f 1139/668/1120 1129/662/1110 1138/667/1119 +f 1129/662/1110 1139/668/1120 1131/660/1112 +f 1140/667/1121 1131/660/1112 1139/668/1120 +f 1131/660/1112 1140/667/1121 1133/658/1114 +f 1141/666/1122 1133/658/1114 1140/667/1121 +f 1133/658/1114 1141/666/1122 1135/664/1116 +f 1136/665/1117 1135/664/1116 1141/666/1122 +f 1142/669/1123 1143/670/1124 1144/671/1125 +f 1145/672/1126 1144/671/1125 1143/670/1124 +f 1144/671/1125 1145/672/1126 1146/673/1127 +f 1147/674/1128 1146/673/1127 1145/672/1126 +f 1146/673/1127 1147/674/1128 1148/675/898 +f 1148/675/898 1149/676/1129 1146/673/1127 +f 1148/675/898 884/651/1130 1149/676/1129 +f 888/650/1131 1149/676/1129 884/651/1130 +f 888/650/1131 858/649/1132 1149/676/1129 +f 1150/677/1133 1149/676/1129 858/649/1132 +f 1149/676/1129 1150/677/1133 1151/678/1134 +f 1152/679/1135 1151/678/1134 1150/677/1133 +f 1151/678/1134 1152/679/1135 1153/680/1136 +f 1154/681/1137 1153/680/1136 1152/679/1135 +f 1153/680/1136 1154/681/1137 1155/682/1138 +f 1156/683/1139 1155/682/1138 1154/681/1137 +f 1156/683/1139 1157/684/1140 1155/682/1138 +f 1157/684/1140 1158/685/1141 1155/682/1138 +f 1159/686/1142 1148/675/898 1147/674/1128 +f 1157/684/1140 1160/687/1023 1158/685/1141 +f 1160/687/1023 1161/688/1143 1158/685/1141 +f 1162/689/1144 1158/685/1141 1161/688/1143 +f 1161/688/1143 1163/690/1145 1162/689/1144 +f 1164/691/1146 1162/689/1144 1163/690/1145 +f 1151/678/1134 1146/673/1127 1149/676/1129 +f 1146/673/1127 1151/678/1134 1144/671/1125 +f 1153/680/1136 1144/671/1125 1151/678/1134 +f 1144/671/1125 1153/680/1136 1142/669/1123 +f 1155/682/1138 1142/669/1123 1153/680/1136 +f 1142/669/1123 1155/682/1138 1158/685/1141 +f 1158/685/1141 1162/689/1144 1142/669/1123 +f 1143/670/1124 1142/669/1123 1162/689/1144 +f 804/439/795 757/438/749 754/435/746 +f 804/439/795 813/449/804 757/438/749 +f 769/448/761 757/438/749 813/449/804 +f 813/449/804 855/457/844 769/448/761 +f 855/457/844 813/449/804 814/456/805 +f 814/456/805 1165/493/1147 855/457/844 +f 1165/493/1147 814/456/805 815/470/806 +f 815/470/806 1166/468/1148 1165/493/1147 +f 1166/468/1148 815/470/806 816/469/807 +f 816/469/807 1167/478/1149 1166/468/1148 +f 1167/478/1149 816/469/807 817/474/808 +f 817/474/808 1168/477/1150 1167/478/1149 +f 1168/477/1150 817/474/808 818/476/809 +f 818/476/809 867/515/669 1168/477/1150 +f 818/476/809 819/477/810 867/515/669 +f 1169/514/1151 867/515/669 819/477/810 +f 819/477/810 821/479/812 1169/514/1151 +f 1170/513/1152 1169/514/1151 821/479/812 +f 1169/514/1151 824/482/815 867/515/669 +f 1169/514/1151 1170/513/1152 824/482/815 +f 825/483/816 824/482/815 1170/513/1152 +f 821/479/812 823/481/814 1170/513/1152 +f 831/489/822 1170/513/1152 823/481/814 +f 1170/513/1152 831/489/822 825/483/816 +f 829/487/820 825/483/816 831/489/822 +f 1171/667/1153 1172/668/1154 1173/660/1155 +f 1173/660/1155 1174/658/1156 1171/667/1153 +f 1174/658/1156 1173/660/1155 1175/657/1157 +f 1175/657/1157 1176/663/1158 1174/658/1156 +f 1177/664/1159 1174/658/1156 1176/663/1158 +f 1176/663/1158 1178/657/1160 1177/664/1159 +f 1179/658/1161 1177/664/1159 1178/657/1160 +f 1178/657/1160 1180/659/1162 1179/658/1161 +f 1181/660/1163 1179/658/1161 1180/659/1162 +f 1180/659/1162 1182/661/1164 1181/660/1163 +f 1183/662/1165 1181/660/1163 1182/661/1164 +f 1182/661/1164 1184/659/1166 1183/662/1165 +f 1173/660/1155 1183/662/1165 1184/659/1166 +f 1184/659/1166 1175/657/1157 1173/660/1155 +f 1183/662/1165 1173/660/1155 1172/668/1154 +f 1172/668/1154 1185/667/1167 1183/662/1165 +f 1181/660/1163 1183/662/1165 1185/667/1167 +f 1185/667/1167 1186/666/1168 1181/660/1163 +f 1179/658/1161 1181/660/1163 1186/666/1168 +f 1186/666/1168 1187/665/1169 1179/658/1161 +f 1177/664/1159 1179/658/1161 1187/665/1169 +f 1187/665/1169 1188/666/1170 1177/664/1159 +f 1174/658/1156 1177/664/1159 1188/666/1170 +f 1188/666/1170 1171/667/1153 1174/658/1156 +f 991/692/1171 1189/693/1172 992/694/1173 +f 1190/695/1174 992/694/1173 1189/693/1172 +f 992/694/1173 1190/695/1174 993/696/1175 +f 1191/697/1176 993/696/1175 1190/695/1174 +f 993/696/1175 1191/697/1176 994/698/1177 +f 1192/699/1177 994/698/1177 1191/697/1176 +f 994/698/1177 1192/699/1177 1193/700/1178 +f 1194/701/1179 1193/700/1178 1192/699/1177 +f 1194/701/1179 1195/702/1180 1193/700/1178 +f 1196/677/1181 1193/700/1178 1195/702/1180 +f 1195/702/1180 1197/703/1182 1196/677/1181 +f 954/704/1183 1196/677/1181 1197/703/1182 +f 1197/703/1182 1198/705/1184 954/704/1183 +f 966/706/1185 954/704/1183 1198/705/1184 +f 695/397/1186 1199/707/1187 1200/708/1188 +f 1201/709/1187 1200/708/1188 1199/707/1187 +f 1199/707/1187 1202/710/1189 1201/709/1187 +f 1203/711/1190 1201/709/1187 1202/710/1189 +f 1202/710/1189 1204/712/1191 1203/711/1190 +f 1205/713/1192 1203/711/1190 1204/712/1191 +f 1204/712/1191 1206/714/1193 1205/713/1192 +f 1207/715/1194 1205/713/1192 1206/714/1193 +f 1207/715/1194 1206/714/1193 1208/716/1195 +f 1209/717/1196 1208/716/1195 1206/714/1193 +f 1208/716/1195 1209/717/1196 1210/718/1197 +f 1211/719/1198 1210/718/1197 1209/717/1196 +f 1211/719/1198 1212/720/1199 1210/718/1197 +f 1213/721/1200 1210/718/1197 1212/720/1199 +f 1213/721/1200 1214/722/1201 1210/718/1197 +f 1208/716/1195 1210/718/1197 1214/722/1201 +f 1215/723/1202 1216/724/1202 1217/415/1203 +f 1218/724/1204 1217/415/1203 1216/724/1202 +f 1217/415/1203 1218/724/1204 1219/725/1205 +f 1219/725/1205 1218/724/1204 1220/726/1206 +f 1218/724/1204 1221/409/1207 1220/726/1206 +f 1220/726/1206 1221/409/1207 1222/727/1208 +f 1223/405/1208 1222/727/1208 1221/409/1207 +f 960/382/946 995/388/979 958/537/944 +f 995/388/979 956/558/942 958/537/944 +f 956/558/942 995/388/979 1196/728/1209 +f 1196/728/1209 954/541/940 956/558/942 +f 1193/729/1210 995/388/979 994/554/978 +f 1193/729/1210 1196/728/1209 995/388/979 +f 1224/730/1211 1225/391/624 1226/730/1211 +f 1227/391/624 1226/730/1211 1225/391/624 +f 1225/391/624 1228/374/623 1227/391/624 +f 1229/374/623 1227/391/624 1228/374/623 +f 1228/374/623 1230/731/1211 1229/374/623 +f 1231/731/1211 1229/374/623 1230/731/1211 +f 1232/728/1212 930/539/915 932/541/917 +f 930/539/915 1232/728/1212 945/388/931 +f 1233/729/1213 945/388/931 1232/728/1212 +f 1233/729/1213 944/554/930 945/388/931 +f 972/732/1214 1212/720/1214 932/733/1215 +f 1211/719/1216 932/733/1215 1212/720/1214 +f 932/733/1215 1211/719/1216 1232/734/1217 +f 1209/717/1218 1232/734/1217 1211/719/1216 +f 1232/734/1217 1209/717/1218 1233/735/1219 +f 1206/714/1220 1233/735/1219 1209/717/1218 +f 1206/714/1220 1204/712/1221 1233/735/1219 +f 944/736/1222 1233/735/1219 1204/712/1221 +f 1204/712/1221 1202/710/1223 944/736/1222 +f 943/737/1224 944/736/1222 1202/710/1223 +f 1202/710/1223 1199/707/1225 943/737/1224 +f 942/738/1226 943/737/1224 1199/707/1225 +f 1199/707/1225 695/397/1227 942/738/1226 +f 694/396/1228 942/738/1226 695/397/1227 +f 1096/613/1076 1001/575/985 1000/574/984 +f 1000/574/984 1098/616/1078 1096/613/1076 +f 1098/616/1078 1000/574/984 999/573/983 +f 999/573/983 1100/618/1080 1098/616/1078 +f 999/573/983 998/572/982 1100/618/1080 +f 1101/619/1081 1100/618/1080 998/572/982 +f 1178/739/1229 1176/740/1229 1180/741/1229 +f 1176/740/1229 1184/742/1229 1180/741/1229 +f 1175/743/1229 1184/742/1229 1176/740/1229 +f 1180/741/1229 1184/742/1229 1182/744/1229 +f 1132/743/1230 1134/740/1230 1130/742/1230 +f 1134/740/1230 1126/741/1230 1130/742/1230 +f 1124/739/1230 1126/741/1230 1134/740/1230 +f 1130/742/1230 1126/741/1230 1128/744/1230 +f 857/502/846 855/457/844 1165/493/1147 +f 1165/493/1147 859/492/848 857/502/846 +f 859/492/848 1165/493/1147 1166/468/1148 +f 1166/468/1148 861/480/850 859/492/848 +f 861/480/850 1166/468/1148 1167/478/1149 +f 1167/478/1149 863/479/852 861/480/850 +f 863/479/852 1167/478/1149 1168/477/1150 +f 1168/477/1150 865/514/854 863/479/852 +f 865/514/854 1168/477/1150 867/515/669 +f 1234/745/1231 1235/746/1232 1236/747/1233 +f 1237/748/1234 1236/747/1233 1235/746/1232 +f 1236/747/1233 1237/748/1234 1238/749/1235 +f 1239/750/1236 1238/749/1235 1237/748/1234 +f 1237/748/1234 1240/751/1237 1239/750/1236 +f 1241/752/1238 1239/750/1236 1240/751/1237 +f 1240/751/1237 1242/753/670 1241/752/1238 +f 1243/754/1239 1241/752/1238 1242/753/670 +f 1242/753/670 1244/755/1240 1243/754/1239 +f 1245/756/1241 1243/754/1239 1244/755/1240 +f 1244/755/1240 1246/757/1242 1245/756/1241 +f 1244/755/1240 1247/758/1243 1246/757/1242 +f 1248/759/1244 1246/757/1242 1247/758/1243 +f 1247/758/1243 1249/760/1245 1248/759/1244 +f 1250/761/1246 1248/759/1244 1249/760/1245 +f 1249/760/1245 1251/762/1247 1250/761/1246 +f 1252/763/1248 1250/761/1246 1251/762/1247 +f 1252/763/1248 1251/762/1247 1253/764/1249 +f 1249/760/1245 1254/765/1250 1251/762/1247 +f 1247/758/1243 1255/766/1251 1249/760/1245 +f 1254/765/1250 1249/760/1245 1255/766/1251 +f 1255/766/1251 1256/767/1252 1254/765/1250 +f 1244/755/1240 1242/753/670 1247/758/1243 +f 1255/766/1251 1247/758/1243 1242/753/670 +f 1242/753/670 1240/751/1237 1255/766/1251 +f 1256/767/1252 1255/766/1251 1240/751/1237 +f 1240/751/1237 1237/748/1234 1256/767/1252 +f 1235/746/1232 1256/767/1252 1237/748/1234 +f 1256/767/1252 1235/746/1232 1257/768/1253 +f 1257/768/1253 1254/765/1250 1256/767/1252 +f 1254/765/1250 1257/768/1253 1258/769/672 +f 1258/769/672 1251/762/1247 1254/765/1250 +f 1251/762/1247 1258/769/672 1259/770/1254 +f 1259/770/1254 1253/764/1249 1251/762/1247 +f 1259/770/1254 1260/762/1255 1253/764/1249 +f 1261/763/1256 1253/764/1249 1260/762/1255 +f 1261/763/1256 1260/762/1255 1262/761/1257 +f 1262/761/1257 1263/771/1258 1261/763/1256 +f 1263/771/1258 1262/761/1257 1264/772/1259 +f 1264/772/1259 1265/773/1260 1263/771/1258 +f 1266/774/1261 1259/770/1254 1258/769/672 +f 1267/775/1262 1257/768/1253 1235/746/1232 +f 1257/768/1253 1267/775/1262 1268/776/1263 +f 1268/776/1263 1258/769/672 1257/768/1253 +f 1258/769/672 1268/776/1263 1266/774/1261 +f 1269/777/1254 1266/774/1261 1268/776/1263 +f 1269/777/1254 1270/776/1264 1266/774/1261 +f 1271/769/1265 1266/774/1261 1270/776/1264 +f 1266/774/1261 1271/769/1265 1259/770/1254 +f 1260/762/1255 1259/770/1254 1271/769/1265 +f 1272/778/1266 1268/776/1263 1267/775/1262 +f 700/779/1267 702/780/1268 1272/778/1266 +f 703/781/1269 1272/778/1266 702/780/1268 +f 703/781/1269 705/782/1270 1272/778/1266 +f 705/782/1270 708/781/1271 1273/778/1272 +f 708/781/1271 710/780/1273 1273/778/1272 +f 711/779/1274 1273/778/1272 710/780/1273 +f 1274/745/1275 1275/747/1276 1276/746/1277 +f 1277/748/1278 1276/746/1277 1275/747/1276 +f 1276/746/1277 1277/748/1278 1278/767/1279 +f 1279/751/1280 1278/767/1279 1277/748/1278 +f 1278/767/1279 1279/751/1280 1280/766/1281 +f 1281/753/1282 1280/766/1281 1279/751/1280 +f 1280/766/1281 1281/753/1282 1282/758/1283 +f 1283/783/1284 1282/758/1283 1281/753/1282 +f 1283/783/1284 1284/757/1285 1282/758/1283 +f 1285/759/1285 1282/758/1283 1284/757/1285 +f 1284/757/1285 1286/784/1286 1285/759/1285 +f 1264/772/1259 1285/759/1285 1286/784/1286 +f 1285/759/1285 1264/772/1259 1262/761/1257 +f 1262/761/1257 1287/760/1287 1285/759/1285 +f 1287/760/1287 1262/761/1257 1260/762/1255 +f 1287/760/1287 1260/762/1255 1288/765/1277 +f 1271/769/1265 1288/765/1277 1260/762/1255 +f 1288/765/1277 1271/769/1265 1289/768/1288 +f 1270/776/1264 1289/768/1288 1271/769/1265 +f 1289/768/1288 1270/776/1264 1290/775/1289 +f 1273/778/1272 1290/775/1289 1270/776/1264 +f 1290/775/1289 1276/746/1277 1289/768/1288 +f 1278/767/1279 1289/768/1288 1276/746/1277 +f 1289/768/1288 1278/767/1279 1288/765/1277 +f 1280/766/1281 1288/765/1277 1278/767/1279 +f 1288/765/1277 1280/766/1281 1287/760/1287 +f 1282/758/1283 1287/760/1287 1280/766/1281 +f 1282/758/1283 1285/759/1285 1287/760/1287 +f 1253/764/1249 1291/785/1290 1252/763/1248 +f 1253/764/1249 1261/763/1256 1291/785/1290 +f 1292/786/1291 1291/785/1290 1261/763/1256 +f 1292/786/1291 1261/763/1256 1263/771/1258 +f 1292/786/1291 1263/771/1258 971/787/1292 +f 1265/773/1260 971/787/1292 1263/771/1258 +f 971/787/1292 1265/773/1260 972/787/1293 +f 1212/788/1294 972/787/1293 1265/773/1260 +f 1264/772/1259 1212/788/1294 1265/773/1260 +f 1212/788/1294 1264/772/1259 1213/789/1295 +f 1264/772/1259 1286/784/1286 1213/789/1295 +f 1214/790/1296 1213/789/1295 1286/784/1286 +f 1293/791/1297 1245/756/1241 1246/757/1242 +f 1293/791/1297 1246/757/1242 1294/784/1298 +f 1246/757/1242 1248/759/1244 1294/784/1298 +f 1295/792/1299 1294/784/1298 1248/759/1244 +f 1248/759/1244 1250/761/1246 1295/792/1299 +f 1296/771/1300 1295/792/1299 1250/761/1246 +f 1250/761/1246 1252/763/1248 1296/771/1300 +f 1297/786/1301 1296/771/1300 1252/763/1248 +f 1297/786/1301 1252/763/1248 1291/785/1290 +f 1291/785/1290 969/793/1302 1297/786/1301 +f 1291/785/1290 1292/786/1291 969/793/1302 +f 973/794/1303 969/793/1302 1292/786/1291 +f 1292/786/1291 971/787/1292 973/794/1303 +f 1298/773/1304 1295/792/1299 1296/771/1300 +f 1299/795/1305 1293/791/1297 1300/790/1306 +f 1294/784/1298 1300/790/1306 1293/791/1297 +f 1300/790/1306 1294/784/1298 1301/789/1307 +f 1295/792/1299 1301/789/1307 1294/784/1298 +f 1295/792/1299 1198/788/1308 1301/789/1307 +f 1198/788/1308 1295/792/1299 1298/773/1304 +f 1198/788/1308 1298/773/1304 966/787/1309 +f 967/796/1310 966/787/1309 1298/773/1304 +f 1298/773/1304 1296/771/1300 967/796/1310 +f 1297/786/1301 967/796/1310 1296/771/1300 +f 967/796/1310 1297/786/1301 968/794/1311 +f 968/794/1311 1297/786/1301 969/793/1302 +f 1268/776/1312 1272/778/1313 1269/777/1314 +f 705/782/1315 1269/777/1314 1272/778/1313 +f 705/782/1315 1273/778/1316 1269/777/1314 +f 1270/776/1317 1269/777/1314 1273/778/1316 +f 1235/746/1318 1234/745/1319 1267/775/1320 +f 700/779/1321 1267/775/1320 1234/745/1319 +f 700/779/1321 1272/778/1313 1267/775/1320 +f 1273/778/1316 711/779/1322 1290/775/1323 +f 711/779/1322 1274/745/1324 1290/775/1323 +f 1276/746/1325 1290/775/1323 1274/745/1324 +f 1120/653/1102 1105/635/1085 1104/634/1084 +f 1104/634/1084 1118/648/1097 1120/653/1102 +f 1192/699/1326 1302/797/1327 1194/701/897 +f 1303/798/649 1194/701/897 1302/797/1327 +f 1302/797/1327 1304/799/1328 1303/798/649 +f 1305/800/1329 1303/798/649 1304/799/1328 +f 1303/798/649 1305/800/1329 1306/801/1330 +f 1307/802/1331 1306/801/1330 1305/800/1329 +f 1306/801/1330 1307/802/1331 1308/803/1332 +f 1308/803/1332 1307/802/1331 1301/804/1333 +f 1301/804/1333 1198/705/1334 1308/803/1332 +f 1197/703/1335 1308/803/1332 1198/705/1334 +f 1197/703/1335 1195/702/1336 1308/803/1332 +f 1306/801/1330 1308/803/1332 1195/702/1336 +f 1195/702/1336 1194/701/897 1306/801/1330 +f 1303/798/649 1306/801/1330 1194/701/897 +f 1299/805/1337 1300/806/1338 1307/802/1331 +f 1307/802/1331 1300/806/1338 1301/804/1333 +f 1304/799/1328 1302/797/1327 1309/807/1339 +f 1310/808/1340 1309/807/1339 1302/797/1327 +f 1302/797/1327 1192/699/1326 1310/808/1340 +f 1191/697/1341 1310/808/1340 1192/699/1326 +f 1310/808/1340 1191/697/1341 1311/809/1342 +f 1190/695/1343 1311/809/1342 1191/697/1341 +f 1311/809/1342 1190/695/1343 1312/810/1344 +f 1189/693/1345 1312/810/1344 1190/695/1343 +f 1312/810/1344 1313/811/1346 1311/809/1342 +f 1314/812/1346 1311/809/1342 1313/811/1346 +f 1311/809/1342 1314/812/1346 1310/808/1340 +f 1309/807/1339 1310/808/1340 1314/812/1346 +f 1315/813/1347 1316/402/1347 1215/725/1347 +f 1216/814/1347 1215/725/1347 1316/402/1347 +f 1317/723/1348 1318/724/1348 1319/415/1349 +f 1320/724/1350 1319/415/1349 1318/724/1348 +f 1319/415/1349 1320/724/1350 1321/725/1351 +f 1321/725/1351 1320/724/1350 1322/726/1352 +f 1320/724/1350 1323/409/1353 1322/726/1352 +f 1322/726/1352 1323/409/1353 1315/727/1354 +f 1316/405/1354 1315/727/1354 1323/409/1353 +f 1222/404/1355 1223/416/1355 1317/814/1355 +f 1318/725/1355 1317/814/1355 1223/416/1355 +f 1324/815/1356 1325/816/1356 1326/817/1357 +f 1327/818/1358 1326/817/1357 1325/816/1356 +f 1326/817/1357 1327/818/1358 1328/819/1359 +f 1329/820/1360 1328/819/1359 1327/818/1358 +f 1328/819/1359 1329/820/1360 1330/821/1361 +f 1331/822/1361 1330/821/1361 1329/820/1360 +f 1332/823/1362 1333/824/1363 1334/825/1362 +f 1335/826/1364 1334/825/1362 1333/824/1363 +f 1333/824/1363 1336/827/1365 1335/826/1364 +f 1337/828/1366 1335/826/1364 1336/827/1365 +f 1336/827/1365 1338/829/1367 1337/828/1366 +f 1339/830/1367 1337/828/1366 1338/829/1367 +f 1339/831/1368 1338/832/1368 1324/833/1368 +f 1325/834/1368 1324/833/1368 1338/832/1368 +f 1338/829/1369 1336/827/1369 1325/816/1369 +f 1327/818/1369 1325/816/1369 1336/827/1369 +f 1336/827/1369 1333/824/1369 1327/818/1369 +f 1329/820/1369 1327/818/1369 1333/824/1369 +f 1333/824/1369 1332/823/1369 1329/820/1369 +f 1331/822/1369 1329/820/1369 1332/823/1369 +f 1332/832/1370 1334/831/1370 1331/834/1370 +f 1330/833/1370 1331/834/1370 1334/831/1370 +f 1340/668/1154 1341/667/1167 1342/662/1165 +f 1342/662/1165 1343/660/1155 1340/668/1154 +f 1343/660/1155 1342/662/1165 1344/659/1166 +f 1344/659/1166 1345/657/1157 1343/660/1155 +f 1346/658/1156 1343/660/1155 1345/657/1157 +f 1345/657/1157 1347/663/1158 1346/658/1156 +f 1348/664/1159 1346/658/1156 1347/663/1158 +f 1347/663/1158 1349/657/1160 1348/664/1159 +f 1350/658/1161 1348/664/1159 1349/657/1160 +f 1349/657/1160 1351/659/1162 1350/658/1161 +f 1352/660/1163 1350/658/1161 1351/659/1162 +f 1351/659/1162 1353/661/1164 1352/660/1163 +f 1342/662/1165 1352/660/1163 1353/661/1164 +f 1353/661/1164 1344/659/1166 1342/662/1165 +f 1352/660/1163 1342/662/1165 1341/667/1167 +f 1341/667/1167 1354/666/1168 1352/660/1163 +f 1350/658/1161 1352/660/1163 1354/666/1168 +f 1354/666/1168 1355/665/1169 1350/658/1161 +f 1348/664/1159 1350/658/1161 1355/665/1169 +f 1355/665/1169 1356/666/1170 1348/664/1159 +f 1346/658/1156 1348/664/1159 1356/666/1170 +f 1356/666/1170 1357/667/1153 1346/658/1156 +f 1343/660/1155 1346/658/1156 1357/667/1153 +f 1357/667/1153 1340/668/1154 1343/660/1155 +f 1349/739/1229 1347/740/1229 1351/741/1229 +f 1347/740/1229 1344/742/1229 1351/741/1229 +f 1345/743/1229 1344/742/1229 1347/740/1229 +f 1351/741/1229 1344/742/1229 1353/744/1229 +f 1358/731/1119 1359/374/1371 1360/835/1372 +f 1361/392/1371 1360/835/1372 1359/374/1371 +f 1360/731/1373 1361/374/1374 1362/835/838 +f 1363/392/1375 1362/835/838 1361/374/1374 +f 1362/731/1376 1363/374/1377 1364/835/1376 +f 1365/392/1378 1364/835/1376 1363/374/1377 +f 1364/731/1379 1365/374/1380 1358/835/1379 +f 1359/392/1381 1358/835/1379 1365/374/1380 +f 1366/392/1382 1367/374/1382 1368/835/1383 +f 1369/731/1119 1368/835/1383 1367/374/1382 +f 1370/392/1384 1366/374/1384 1371/835/867 +f 1368/731/867 1371/835/867 1366/374/1384 +f 1372/392/1385 1370/374/1385 1373/835/1386 +f 1371/731/1376 1373/835/1386 1370/374/1385 +f 1367/392/1387 1372/374/1387 1369/835/1388 +f 1373/731/1389 1369/835/1388 1372/374/1387 +f 904/836/1390 917/837/1390 906/836/1390 +f 917/837/1390 898/836/1390 906/836/1390 +f 898/836/1390 902/836/1390 906/836/1390 +f 906/836/1390 902/836/1390 910/836/1390 +f 918/835/1390 826/731/1390 913/835/1390 +f 913/835/1390 826/731/1390 914/393/1390 +f 914/393/1390 826/731/1390 845/838/1390 +f 916/837/1390 914/393/1390 845/838/1390 +f 847/837/1390 916/837/1390 845/838/1390 +f 916/837/1390 847/837/1390 917/837/1390 +f 847/837/1390 898/836/1390 917/837/1390 +f 849/837/1390 898/836/1390 847/837/1390 +f 915/839/1390 914/393/1390 916/837/1390 +f 912/840/1390 913/835/1390 914/393/1390 +f 1374/550/1391 1375/841/1391 1376/550/1391 +f 1377/841/1391 1376/550/1391 1375/841/1391 +f 1376/415/1392 1377/724/1392 1378/416/1392 +f 1379/404/1392 1378/416/1392 1377/724/1392 +f 1378/416/1393 1379/404/1393 1380/727/1393 +f 1381/405/1393 1380/727/1393 1379/404/1393 +f 1382/415/1394 1383/724/1394 1384/725/1394 +f 1385/814/1394 1384/725/1394 1383/724/1394 +f 1384/725/1395 1385/814/1395 1374/727/1395 +f 1375/405/1395 1374/727/1395 1385/814/1395 +f 1377/842/1396 1375/842/1396 1379/726/1396 +f 1385/727/1396 1379/726/1396 1375/842/1396 +f 1385/727/1396 1383/405/1396 1379/726/1396 +f 1381/404/1396 1379/726/1396 1383/405/1396 +f 1380/404/1397 1382/405/1397 1378/726/1397 +f 1384/727/1397 1378/726/1397 1382/405/1397 +f 1384/727/1397 1374/842/1397 1378/726/1397 +f 1376/843/1397 1378/726/1397 1374/842/1397 +f 734/414/726 1386/431/1398 732/426/724 +f 1387/430/1399 732/426/724 1386/431/1398 +f 732/426/724 1387/430/1399 736/427/728 +f 1388/429/1400 736/427/728 1387/430/1399 +f 736/427/728 1388/429/1400 738/422/730 +f 741/428/733 738/422/730 1388/429/1400 +f 741/428/733 1388/429/1400 1389/844/1401 +f 741/428/733 1389/844/1401 742/429/734 +f 743/430/735 742/429/734 1389/844/1401 +f 1389/844/1401 1390/845/1402 743/430/735 +f 744/431/736 743/430/735 1390/845/1402 +f 744/431/736 1390/845/1402 745/432/737 +f 1391/846/1403 745/432/737 1390/845/1402 +f 1391/846/1403 773/450/765 745/432/737 +f 1391/846/1403 768/432/760 773/450/765 +f 767/447/759 773/450/765 768/432/760 +f 1387/430/1399 1389/844/1401 1388/429/1400 +f 1389/844/1401 1387/430/1399 1390/845/1402 +f 1386/431/1398 1390/845/1402 1387/430/1399 +f 1386/431/1398 768/432/760 1390/845/1402 +f 1386/431/1398 734/414/726 768/432/760 +f 1391/846/1403 1390/845/1402 768/432/760 +f 706/408/1404 721/417/1404 707/406/1404 +f 752/417/1404 706/408/1404 704/406/1404 +f 693/847/1405 695/848/1405 711/849/1405 +f 1274/850/1406 711/849/1406 695/848/1406 +f 858/851/1407 1392/852/1408 1150/853/1409 +f 858/851/1407 860/854/1410 1392/852/1408 +f 1393/855/1411 1392/852/1408 860/854/1410 +f 860/854/1410 870/856/1412 1393/855/1411 +f 1394/857/1413 1393/855/1411 870/856/1412 +f 1393/855/1411 1394/857/1413 1395/858/1205 +f 1396/859/1414 1395/858/1205 1394/857/1413 +f 1396/859/1414 1397/860/1415 1395/858/1205 +f 1398/861/1416 1395/858/1205 1397/860/1415 +f 1397/860/1415 1399/862/1417 1398/861/1416 +f 1400/863/1416 1398/861/1416 1399/862/1417 +f 1399/862/1417 1401/864/658 1400/863/1416 +f 1402/865/1418 1400/863/1416 1401/864/658 +f 1401/864/658 1161/866/1419 1402/865/1418 +f 1160/867/1420 1402/865/1418 1161/866/1419 +f 1402/865/1418 1160/867/1420 1157/868/1421 +f 1157/868/1421 1403/869/1422 1402/865/1418 +f 1403/869/1422 1157/868/1421 1156/870/1423 +f 1395/858/1205 1398/861/1416 1404/871/1424 +f 1405/872/1425 1404/871/1424 1398/861/1416 +f 1398/861/1416 1400/863/1416 1405/872/1425 +f 1403/869/1422 1405/872/1425 1400/863/1416 +f 1400/863/1416 1402/865/1418 1403/869/1422 +f 1156/870/1423 1154/873/1426 1403/869/1422 +f 1405/872/1425 1403/869/1422 1154/873/1426 +f 1154/873/1426 1152/874/1427 1405/872/1425 +f 1404/871/1424 1405/872/1425 1152/874/1427 +f 1152/874/1427 1150/853/1409 1404/871/1424 +f 1392/852/1408 1404/871/1424 1150/853/1409 +f 1404/871/1424 1392/852/1408 1395/858/1205 +f 1393/855/1411 1395/858/1205 1392/852/1408 +f 884/651/1428 1148/675/1428 872/875/1428 +f 1159/686/1428 872/875/1428 1148/675/1428 +f 949/555/1429 948/557/1430 1077/583/1431 +f 1406/876/1432 1077/583/1431 948/557/1430 +f 1406/876/1432 948/557/1430 1009/583/1433 +f 946/555/1434 1009/583/1433 948/557/1430 +f 1200/877/1435 1275/877/1435 695/878/1435 +f 1274/878/1436 695/878/1436 1275/877/1436 +f 870/856/1437 872/879/1437 1394/857/1437 +f 1159/857/1438 1394/857/1438 872/879/1438 +f 1011/830/1439 1013/829/1439 1010/880/1439 +f 1013/829/1439 1021/881/1439 1010/880/1439 +f 1017/882/1439 1021/881/1439 1013/829/1439 +f 1019/883/1439 1021/881/1439 1017/882/1439 +f 1015/884/1440 1017/882/1440 1013/829/1440 +f 1022/885/1441 1024/886/1441 1021/881/1441 +f 1024/886/1441 1068/887/1441 1021/881/1441 +f 1068/887/1441 1072/888/1441 1021/881/1441 +f 1070/889/1441 1072/888/1441 1068/887/1441 +f 1026/890/1441 1068/887/1441 1024/886/1441 +f 1021/881/1442 1072/888/1442 1010/880/1442 +f 1407/891/1443 1408/892/1444 1409/893/1445 +f 1407/891/1443 1409/893/1445 1110/866/1446 +f 1410/864/1447 1110/866/1446 1409/893/1445 +f 1410/864/1447 1411/865/1448 1110/866/1446 +f 1411/865/1448 1410/864/1447 1412/894/1449 +f 1412/894/1449 1413/869/1450 1411/865/1448 +f 1413/869/1450 1412/894/1449 1414/872/1451 +f 1414/872/1451 1115/873/1452 1413/869/1450 +f 1115/873/1452 1414/872/1451 1116/874/1453 +f 1415/871/1454 1116/874/1453 1414/872/1451 +f 1116/874/1453 1415/871/1454 1117/853/1455 +f 1416/852/1456 1117/853/1455 1415/871/1454 +f 1416/852/1456 836/851/1457 1117/853/1455 +f 836/851/1457 1416/852/1456 833/854/1458 +f 1417/855/1459 833/854/1458 1416/852/1456 +f 833/854/1458 1417/855/1459 832/856/1460 +f 1418/857/1461 832/856/1460 1417/855/1459 +f 1417/855/1459 1419/858/733 1418/857/1461 +f 1420/861/1462 1414/872/1451 1412/894/1449 +f 1414/872/1451 1420/861/1462 1415/871/1454 +f 1419/858/733 1415/871/1454 1420/861/1462 +f 1415/871/1454 1419/858/733 1416/852/1456 +f 1417/855/1459 1416/852/1456 1419/858/733 +f 1421/859/1302 1418/857/1461 1419/858/733 +f 1421/859/1302 1419/858/733 1422/860/1463 +f 1420/861/1462 1422/860/1463 1419/858/733 +f 1422/860/1463 1420/861/1462 1423/895/1464 +f 1412/894/1449 1423/895/1464 1420/861/1462 +f 1423/895/1464 1412/894/1449 1410/864/1447 +f 1114/870/1465 1413/869/1450 1115/873/1452 +f 1112/868/1466 1413/869/1450 1114/870/1465 +f 1112/868/1466 1411/865/1448 1413/869/1450 +f 1111/867/1467 1411/865/1448 1112/868/1466 +f 1111/867/1467 1110/866/1446 1411/865/1448 +f 1110/640/1090 1108/638/1088 1407/896/1468 +f 1408/897/1469 1407/896/1468 1108/638/1088 +f 991/692/1470 697/898/1470 1189/693/1470 +f 845/838/1390 826/731/1390 828/394/1390 +f 826/731/1390 827/899/1390 828/394/1390 +f 1007/900/766 1010/900/766 1073/901/766 +f 1072/901/766 1073/901/766 1010/900/766 +f 1234/902/1471 1189/903/1471 700/904/1471 +f 697/905/1472 700/904/1472 1189/903/1472 +f 1123/656/1473 1119/652/1473 838/875/1473 +f 840/651/1473 838/875/1473 1119/652/1473 +f 1424/906/1474 1425/907/1474 1426/908/1474 +f 1426/908/1475 1425/907/1475 1427/541/1475 +f 1425/907/1474 1428/909/1474 1427/541/1474 +f 1428/909/1475 1429/910/1475 1427/541/1475 +f 1313/911/1476 1312/912/1476 1238/913/1476 +f 1236/914/1476 1238/913/1476 1312/912/1476 +f 1234/914/1477 1236/914/1477 1189/912/1477 +f 1312/912/1478 1189/912/1478 1236/914/1478 +f 838/879/1479 832/856/1479 1123/857/1479 +f 1418/857/1480 1123/857/1480 832/856/1480 +f 1216/915/1442 1316/916/1442 1218/917/1442 +f 1323/918/1474 1320/919/1474 1316/916/1474 +f 1316/916/1475 1320/919/1475 1218/917/1475 +f 1223/920/1442 1221/921/1442 1318/922/1442 +f 1318/922/1439 1221/921/1439 1320/919/1439 +f 1320/919/1475 1221/921/1475 1218/917/1475 +f 1430/814/1481 1431/405/1481 1432/725/1481 +f 1433/406/1481 1432/725/1481 1431/405/1481 +f 1434/438/1482 1435/923/1482 1436/924/1482 +f 1437/925/1482 1436/924/1482 1435/923/1482 +f 1438/926/1483 1436/924/1483 1439/927/1483 +f 1437/925/1483 1439/927/1483 1436/924/1483 +f 1440/928/1484 1441/929/1484 1442/930/1484 +f 1441/929/1485 1438/926/1485 1442/930/1485 +f 1442/930/1485 1438/926/1485 1439/927/1485 +f 1007/931/1486 1443/931/1487 1006/931/1488 +f 1443/931/1487 1007/931/1486 1444/932/1489 +f 1073/932/1490 1444/932/1489 1007/931/1486 +f 1444/932/1489 1073/932/1490 1445/901/1491 +f 1075/901/1492 1445/901/1491 1073/932/1490 +f 1445/901/1491 1075/901/1492 1446/901/1493 +f 1077/901/1494 1446/901/1493 1075/901/1492 +f 1447/901/1495 1446/901/1493 1077/901/1494 +f 1406/901/1496 1447/901/1495 1077/901/1494 +f 1009/901/1497 1447/901/1495 1406/901/1496 +f 1447/901/1495 1009/901/1497 1448/931/1498 +f 1006/931/1488 1448/931/1498 1009/901/1497 +f 1448/931/1498 1006/931/1488 1443/931/1487 +f 1443/814/1499 1429/725/1499 1448/724/1499 +f 1428/415/1499 1448/724/1499 1429/725/1499 +f 1444/723/1500 1427/724/1500 1443/727/1500 +f 1429/405/1500 1443/727/1500 1427/724/1500 +f 1445/813/1501 1426/402/1501 1444/416/1501 +f 1427/404/1501 1444/416/1501 1426/402/1501 +f 1448/723/1502 1428/724/1502 1447/813/1503 +f 1425/402/1504 1447/813/1503 1428/724/1502 +f 1447/813/1503 1425/402/1504 1446/726/1505 +f 1424/404/1352 1446/726/1505 1425/402/1504 +f 1446/726/1505 1424/404/1352 1445/727/1506 +f 1426/409/1506 1445/727/1506 1424/404/1352 +f 706/408/1507 1219/417/1507 721/417/1508 +f 1219/417/1507 706/408/1507 1217/417/1509 +f 752/417/1510 1217/417/1509 706/408/1507 +f 1217/417/1509 752/417/1510 1215/419/1511 +f 753/419/1512 1215/419/1511 752/417/1510 +f 1215/419/1511 753/419/1512 1315/421/1513 +f 739/421/1514 1315/421/1513 753/419/1512 +f 1315/421/1513 739/421/1514 1322/423/1515 +f 740/423/1516 1322/423/1515 739/421/1514 +f 1322/423/1515 740/423/1516 1321/423/1517 +f 728/424/1517 1321/423/1517 740/423/1516 +f 1321/423/1517 728/424/1517 1319/423/1518 +f 727/423/1519 1319/423/1518 728/424/1517 +f 1319/423/1518 727/423/1519 1317/421/1520 +f 725/421/1521 1317/421/1520 727/423/1519 +f 1317/421/1520 725/421/1521 1222/419/1522 +f 723/419/1523 1222/419/1522 725/421/1521 +f 1222/419/1522 723/419/1523 1220/417/1524 +f 721/417/1508 1220/417/1524 723/419/1523 +f 1220/417/1524 721/417/1508 1219/417/1507 +f 1449/668/1154 1450/667/1167 1451/662/1165 +f 1451/662/1165 1452/660/1155 1449/668/1154 +f 1452/660/1155 1451/662/1165 1453/659/1166 +f 1453/659/1166 1454/657/1157 1452/660/1155 +f 1455/658/1156 1452/660/1155 1454/657/1157 +f 1454/657/1157 1456/663/1158 1455/658/1156 +f 1457/664/1159 1455/658/1156 1456/663/1158 +f 1456/663/1158 1458/657/1160 1457/664/1159 +f 1459/658/1161 1457/664/1159 1458/657/1160 +f 1458/657/1160 1460/659/1162 1459/658/1161 +f 1461/660/1163 1459/658/1161 1460/659/1162 +f 1460/659/1162 1462/661/1164 1461/660/1163 +f 1451/662/1165 1461/660/1163 1462/661/1164 +f 1462/661/1164 1453/659/1166 1451/662/1165 +f 1461/660/1163 1451/662/1165 1450/667/1167 +f 1450/667/1167 1463/666/1168 1461/660/1163 +f 1459/658/1161 1461/660/1163 1463/666/1168 +f 1463/666/1168 1464/665/1169 1459/658/1161 +f 1457/664/1159 1459/658/1161 1464/665/1169 +f 1464/665/1169 1465/666/1170 1457/664/1159 +f 1455/658/1156 1457/664/1159 1465/666/1170 +f 1465/666/1170 1466/667/1153 1455/658/1156 +f 1452/660/1155 1455/658/1156 1466/667/1153 +f 1466/667/1153 1449/668/1154 1452/660/1155 +f 1458/739/1229 1456/740/1229 1460/741/1229 +f 1456/740/1229 1453/742/1229 1460/741/1229 +f 1454/743/1229 1453/742/1229 1456/740/1229 +f 1460/741/1229 1453/742/1229 1462/744/1229 +f 1467/668/1154 1468/667/1167 1469/662/1165 +f 1469/662/1165 1470/660/1155 1467/668/1154 +f 1470/660/1155 1469/662/1165 1471/659/1166 +f 1471/659/1166 1472/657/1157 1470/660/1155 +f 1473/658/1156 1470/660/1155 1472/657/1157 +f 1472/657/1157 1474/663/1158 1473/658/1156 +f 1475/664/1159 1473/658/1156 1474/663/1158 +f 1474/663/1158 1476/657/1160 1475/664/1159 +f 1477/658/1161 1475/664/1159 1476/657/1160 +f 1476/657/1160 1478/659/1162 1477/658/1161 +f 1479/660/1163 1477/658/1161 1478/659/1162 +f 1478/659/1162 1480/661/1164 1479/660/1163 +f 1469/662/1165 1479/660/1163 1480/661/1164 +f 1480/661/1164 1471/659/1166 1469/662/1165 +f 1479/660/1163 1469/662/1165 1468/667/1167 +f 1468/667/1167 1481/666/1168 1479/660/1163 +f 1477/658/1161 1479/660/1163 1481/666/1168 +f 1481/666/1168 1482/665/1169 1477/658/1161 +f 1475/664/1159 1477/658/1161 1482/665/1169 +f 1482/665/1169 1483/666/1170 1475/664/1159 +f 1473/658/1156 1475/664/1159 1483/666/1170 +f 1483/666/1170 1484/667/1153 1473/658/1156 +f 1470/660/1155 1473/658/1156 1484/667/1153 +f 1484/667/1153 1467/668/1154 1470/660/1155 +f 1476/739/1229 1474/740/1229 1478/741/1229 +f 1474/740/1229 1471/742/1229 1478/741/1229 +f 1472/743/1229 1471/742/1229 1474/740/1229 +f 1478/741/1229 1471/742/1229 1480/744/1229 +f 1485/668/1154 1486/667/1167 1487/662/1165 +f 1487/662/1165 1488/660/1155 1485/668/1154 +f 1488/660/1155 1487/662/1165 1489/659/1166 +f 1489/659/1166 1490/657/1157 1488/660/1155 +f 1491/658/1156 1488/660/1155 1490/657/1157 +f 1490/657/1157 1492/663/1158 1491/658/1156 +f 1493/664/1159 1491/658/1156 1492/663/1158 +f 1492/663/1158 1494/657/1160 1493/664/1159 +f 1495/658/1161 1493/664/1159 1494/657/1160 +f 1494/657/1160 1496/659/1162 1495/658/1161 +f 1497/660/1163 1495/658/1161 1496/659/1162 +f 1496/659/1162 1498/661/1164 1497/660/1163 +f 1487/662/1165 1497/660/1163 1498/661/1164 +f 1498/661/1164 1489/659/1166 1487/662/1165 +f 1497/660/1163 1487/662/1165 1486/667/1167 +f 1486/667/1167 1499/666/1168 1497/660/1163 +f 1495/658/1161 1497/660/1163 1499/666/1168 +f 1499/666/1168 1500/665/1169 1495/658/1161 +f 1493/664/1159 1495/658/1161 1500/665/1169 +f 1500/665/1169 1501/666/1170 1493/664/1159 +f 1491/658/1156 1493/664/1159 1501/666/1170 +f 1501/666/1170 1502/667/1153 1491/658/1156 +f 1488/660/1155 1491/658/1156 1502/667/1153 +f 1502/667/1153 1485/668/1154 1488/660/1155 +f 1494/739/1229 1492/740/1229 1496/741/1229 +f 1492/740/1229 1489/742/1229 1496/741/1229 +f 1490/743/1229 1489/742/1229 1492/740/1229 +f 1496/741/1229 1489/742/1229 1498/744/1229 +f 1503/668/1154 1504/667/1167 1505/662/1165 +f 1505/662/1165 1506/660/1155 1503/668/1154 +f 1506/660/1155 1505/662/1165 1507/659/1166 +f 1507/659/1166 1508/657/1157 1506/660/1155 +f 1509/658/1156 1506/660/1155 1508/657/1157 +f 1508/657/1157 1510/663/1158 1509/658/1156 +f 1511/664/1159 1509/658/1156 1510/663/1158 +f 1510/663/1158 1512/657/1160 1511/664/1159 +f 1513/658/1161 1511/664/1159 1512/657/1160 +f 1512/657/1160 1514/659/1162 1513/658/1161 +f 1515/660/1163 1513/658/1161 1514/659/1162 +f 1514/659/1162 1516/661/1164 1515/660/1163 +f 1505/662/1165 1515/660/1163 1516/661/1164 +f 1516/661/1164 1507/659/1166 1505/662/1165 +f 1515/660/1163 1505/662/1165 1504/667/1167 +f 1504/667/1167 1517/666/1168 1515/660/1163 +f 1513/658/1161 1515/660/1163 1517/666/1168 +f 1517/666/1168 1518/665/1169 1513/658/1161 +f 1511/664/1159 1513/658/1161 1518/665/1169 +f 1518/665/1169 1519/666/1170 1511/664/1159 +f 1509/658/1156 1511/664/1159 1519/666/1170 +f 1519/666/1170 1520/667/1153 1509/658/1156 +f 1506/660/1155 1509/658/1156 1520/667/1153 +f 1520/667/1153 1503/668/1154 1506/660/1155 +f 1512/739/1229 1510/740/1229 1514/741/1229 +f 1510/740/1229 1507/742/1229 1514/741/1229 +f 1508/743/1229 1507/742/1229 1510/740/1229 +f 1514/741/1229 1507/742/1229 1516/744/1229 +f 1521/822/1525 1522/820/1526 1523/821/1525 +f 1524/819/1527 1523/821/1525 1522/820/1526 +f 1522/820/1526 1525/818/1528 1524/819/1527 +f 1526/817/1529 1524/819/1527 1525/818/1528 +f 1525/818/1528 1527/816/1530 1526/817/1529 +f 1528/815/1530 1526/817/1529 1527/816/1530 +f 1529/830/1531 1530/829/1531 1531/828/1532 +f 1532/827/1533 1531/828/1532 1530/829/1531 +f 1531/828/1532 1532/827/1533 1533/826/1534 +f 1534/824/1535 1533/826/1534 1532/827/1533 +f 1533/826/1534 1534/824/1535 1535/825/1536 +f 1536/823/1536 1535/825/1536 1534/824/1535 +f 1527/833/1537 1530/831/1537 1528/834/1537 +f 1529/832/1537 1528/834/1537 1530/831/1537 +f 1521/822/1538 1536/823/1538 1522/820/1538 +f 1534/824/1538 1522/820/1538 1536/823/1538 +f 1522/820/1538 1534/824/1538 1525/818/1538 +f 1532/827/1538 1525/818/1538 1534/824/1538 +f 1525/818/1538 1532/827/1538 1527/816/1538 +f 1530/829/1538 1527/816/1538 1532/827/1538 +f 1523/834/1539 1535/832/1539 1521/833/1539 +f 1536/831/1539 1521/833/1539 1535/832/1539 +f 1537/667/1121 1538/660/1112 1539/668/1120 +f 1540/662/1110 1539/668/1120 1538/660/1112 +f 1539/668/1120 1540/662/1110 1541/667/1119 +f 1542/660/1108 1541/667/1119 1540/662/1110 +f 1541/667/1119 1542/660/1108 1543/666/1118 +f 1544/658/1106 1543/666/1118 1542/660/1108 +f 1543/666/1118 1544/658/1106 1545/665/1117 +f 1546/664/1116 1545/665/1117 1544/658/1106 +f 1545/665/1117 1546/664/1116 1547/666/1122 +f 1548/658/1114 1547/666/1122 1546/664/1116 +f 1547/666/1122 1548/658/1114 1537/667/1121 +f 1538/660/1112 1537/667/1121 1548/658/1114 +f 1548/658/1114 1549/657/1113 1538/660/1112 +f 1550/659/1111 1538/660/1112 1549/657/1113 +f 1538/660/1112 1550/659/1111 1540/662/1110 +f 1551/661/1109 1540/662/1110 1550/659/1111 +f 1540/662/1110 1551/661/1109 1542/660/1108 +f 1552/659/1107 1542/660/1108 1551/661/1109 +f 1542/660/1108 1552/659/1107 1544/658/1106 +f 1553/657/1105 1544/658/1106 1552/659/1107 +f 1544/658/1106 1553/657/1105 1546/664/1116 +f 1554/663/1115 1546/664/1116 1553/657/1105 +f 1546/664/1116 1554/663/1115 1548/658/1114 +f 1549/657/1113 1548/658/1114 1554/663/1115 +f 1549/743/1230 1554/740/1230 1550/742/1230 +f 1554/740/1230 1552/741/1230 1550/742/1230 +f 1553/739/1230 1552/741/1230 1554/740/1230 +f 1550/742/1230 1552/741/1230 1551/744/1230 +f 1555/667/1121 1556/660/1112 1557/668/1120 +f 1558/662/1110 1557/668/1120 1556/660/1112 +f 1557/668/1120 1558/662/1110 1559/667/1119 +f 1560/660/1108 1559/667/1119 1558/662/1110 +f 1559/667/1119 1560/660/1108 1561/666/1118 +f 1562/658/1106 1561/666/1118 1560/660/1108 +f 1561/666/1118 1562/658/1106 1563/665/1117 +f 1564/664/1116 1563/665/1117 1562/658/1106 +f 1563/665/1117 1564/664/1116 1565/666/1122 +f 1566/658/1114 1565/666/1122 1564/664/1116 +f 1565/666/1122 1566/658/1114 1555/667/1121 +f 1556/660/1112 1555/667/1121 1566/658/1114 +f 1566/658/1114 1567/657/1113 1556/660/1112 +f 1568/659/1111 1556/660/1112 1567/657/1113 +f 1556/660/1112 1568/659/1111 1558/662/1110 +f 1569/661/1109 1558/662/1110 1568/659/1111 +f 1558/662/1110 1569/661/1109 1560/660/1108 +f 1570/659/1107 1560/660/1108 1569/661/1109 +f 1560/660/1108 1570/659/1107 1562/658/1106 +f 1571/657/1105 1562/658/1106 1570/659/1107 +f 1562/658/1106 1571/657/1105 1564/664/1116 +f 1572/663/1115 1564/664/1116 1571/657/1105 +f 1564/664/1116 1572/663/1115 1566/658/1114 +f 1567/657/1113 1566/658/1114 1572/663/1115 +f 1567/743/1230 1572/740/1230 1568/742/1230 +f 1572/740/1230 1570/741/1230 1568/742/1230 +f 1571/739/1230 1570/741/1230 1572/740/1230 +f 1568/742/1230 1570/741/1230 1569/744/1230 +f 1573/667/1121 1574/660/1112 1575/668/1120 +f 1576/662/1110 1575/668/1120 1574/660/1112 +f 1575/668/1120 1576/662/1110 1577/667/1119 +f 1578/660/1108 1577/667/1119 1576/662/1110 +f 1577/667/1119 1578/660/1108 1579/666/1118 +f 1580/658/1106 1579/666/1118 1578/660/1108 +f 1579/666/1118 1580/658/1106 1581/665/1117 +f 1582/664/1116 1581/665/1117 1580/658/1106 +f 1581/665/1117 1582/664/1116 1583/666/1122 +f 1584/658/1114 1583/666/1122 1582/664/1116 +f 1583/666/1122 1584/658/1114 1573/667/1121 +f 1574/660/1112 1573/667/1121 1584/658/1114 +f 1584/658/1114 1585/657/1113 1574/660/1112 +f 1586/659/1111 1574/660/1112 1585/657/1113 +f 1574/660/1112 1586/659/1111 1576/662/1110 +f 1587/661/1109 1576/662/1110 1586/659/1111 +f 1576/662/1110 1587/661/1109 1578/660/1108 +f 1588/659/1107 1578/660/1108 1587/661/1109 +f 1578/660/1108 1588/659/1107 1580/658/1106 +f 1589/657/1105 1580/658/1106 1588/659/1107 +f 1580/658/1106 1589/657/1105 1582/664/1116 +f 1590/663/1115 1582/664/1116 1589/657/1105 +f 1582/664/1116 1590/663/1115 1584/658/1114 +f 1585/657/1113 1584/658/1114 1590/663/1115 +f 1585/743/1230 1590/740/1230 1586/742/1230 +f 1590/740/1230 1588/741/1230 1586/742/1230 +f 1589/739/1230 1588/741/1230 1590/740/1230 +f 1586/742/1230 1588/741/1230 1587/744/1230 +f 1591/667/1121 1592/660/1112 1593/668/1120 +f 1594/662/1110 1593/668/1120 1592/660/1112 +f 1593/668/1120 1594/662/1110 1595/667/1119 +f 1596/660/1108 1595/667/1119 1594/662/1110 +f 1595/667/1119 1596/660/1108 1597/666/1118 +f 1598/658/1106 1597/666/1118 1596/660/1108 +f 1597/666/1118 1598/658/1106 1599/665/1117 +f 1600/664/1116 1599/665/1117 1598/658/1106 +f 1599/665/1117 1600/664/1116 1601/666/1122 +f 1602/658/1114 1601/666/1122 1600/664/1116 +f 1601/666/1122 1602/658/1114 1591/667/1121 +f 1592/660/1112 1591/667/1121 1602/658/1114 +f 1602/658/1114 1603/657/1113 1592/660/1112 +f 1604/659/1111 1592/660/1112 1603/657/1113 +f 1592/660/1112 1604/659/1111 1594/662/1110 +f 1605/661/1109 1594/662/1110 1604/659/1111 +f 1594/662/1110 1605/661/1109 1596/660/1108 +f 1606/659/1107 1596/660/1108 1605/661/1109 +f 1596/660/1108 1606/659/1107 1598/658/1106 +f 1607/657/1105 1598/658/1106 1606/659/1107 +f 1598/658/1106 1607/657/1105 1600/664/1116 +f 1608/663/1115 1600/664/1116 1607/657/1105 +f 1600/664/1116 1608/663/1115 1602/658/1114 +f 1603/657/1113 1602/658/1114 1608/663/1115 +f 1603/743/1230 1608/740/1230 1604/742/1230 +f 1608/740/1230 1606/741/1230 1604/742/1230 +f 1607/739/1230 1606/741/1230 1608/740/1230 +f 1604/742/1230 1606/741/1230 1605/744/1230 +f 1609/667/1121 1610/660/1112 1611/668/1120 +f 1612/662/1110 1611/668/1120 1610/660/1112 +f 1611/668/1120 1612/662/1110 1613/667/1119 +f 1614/660/1108 1613/667/1119 1612/662/1110 +f 1613/667/1119 1614/660/1108 1615/666/1118 +f 1616/658/1106 1615/666/1118 1614/660/1108 +f 1615/666/1118 1616/658/1106 1617/665/1117 +f 1618/664/1116 1617/665/1117 1616/658/1106 +f 1617/665/1117 1618/664/1116 1619/666/1122 +f 1620/658/1114 1619/666/1122 1618/664/1116 +f 1619/666/1122 1620/658/1114 1609/667/1121 +f 1610/660/1112 1609/667/1121 1620/658/1114 +f 1620/658/1114 1621/657/1113 1610/660/1112 +f 1622/659/1111 1610/660/1112 1621/657/1113 +f 1610/660/1112 1622/659/1111 1612/662/1110 +f 1623/661/1109 1612/662/1110 1622/659/1111 +f 1612/662/1110 1623/661/1109 1614/660/1108 +f 1624/659/1107 1614/660/1108 1623/661/1109 +f 1614/660/1108 1624/659/1107 1616/658/1106 +f 1625/657/1105 1616/658/1106 1624/659/1107 +f 1616/658/1106 1625/657/1105 1618/664/1116 +f 1626/663/1115 1618/664/1116 1625/657/1105 +f 1618/664/1116 1626/663/1115 1620/658/1114 +f 1621/657/1113 1620/658/1114 1626/663/1115 +f 1621/743/1230 1626/740/1230 1622/742/1230 +f 1626/740/1230 1624/741/1230 1622/742/1230 +f 1625/739/1230 1624/741/1230 1626/740/1230 +f 1622/742/1230 1624/741/1230 1623/744/1230 +f 1102/620/1540 1627/933/1540 1055/621/1540 +f 1628/933/1541 1055/621/1541 1627/933/1541 +f 1101/619/1542 1629/933/1542 1102/620/1542 +f 1627/933/1543 1102/620/1543 1629/933/1543 +f 998/572/1544 1630/933/1544 1101/619/1544 +f 1629/933/1545 1101/619/1545 1630/933/1545 +f 997/571/1546 1631/933/1546 998/572/1546 +f 1630/933/1547 998/572/1547 1631/933/1547 +f 996/570/1548 1632/934/1548 997/571/1548 +f 1631/933/1549 997/571/1549 1632/934/1549 +f 923/534/1550 1633/934/1550 996/570/1550 +f 1632/934/1551 996/570/1551 1633/934/1551 +f 921/532/1552 1634/934/1552 923/534/1552 +f 1633/934/1553 923/534/1553 1634/934/1553 +f 919/530/1554 1635/935/1554 921/532/1554 +f 1634/934/1552 921/532/1552 1635/935/1552 +f 792/466/1555 1636/935/1555 919/530/1555 +f 1635/935/1556 919/530/1556 1636/935/1556 +f 793/467/1557 1637/935/1557 792/466/1557 +f 1636/935/1558 792/466/1558 1637/935/1558 +f 756/437/1559 1638/935/1559 793/467/1559 +f 1637/935/1560 793/467/1560 1638/935/1560 +f 983/569/1561 1639/935/1561 756/437/1561 +f 1638/935/1562 756/437/1562 1639/935/1562 +f 982/437/1563 1640/935/1563 983/569/1563 +f 1639/935/1564 983/569/1564 1640/935/1564 +f 981/467/1066 1641/935/1066 982/437/1066 +f 1640/935/1565 982/437/1565 1641/935/1565 +f 979/466/1566 1642/935/1566 981/467/1566 +f 1641/935/1567 981/467/1567 1642/935/1567 +f 977/530/1568 1643/935/1568 979/466/1568 +f 1642/935/1569 979/466/1569 1643/935/1569 +f 975/532/1570 1644/934/1570 977/530/1570 +f 1643/935/1571 977/530/1571 1644/934/1571 +f 963/534/1572 1645/934/1572 975/532/1572 +f 1644/934/1573 975/532/1573 1645/934/1573 +f 1067/570/1574 1646/934/1574 963/534/1574 +f 1645/934/1575 963/534/1575 1646/934/1575 +f 1066/571/1576 1647/933/1576 1067/570/1576 +f 1646/934/1577 1067/570/1577 1647/933/1577 +f 1064/572/1578 1648/933/1578 1066/571/1578 +f 1647/933/1579 1066/571/1579 1648/933/1579 +f 1053/619/1580 1649/933/1580 1064/572/1580 +f 1648/933/1581 1064/572/1581 1649/933/1581 +f 1054/620/1582 1650/933/1582 1053/619/1582 +f 1649/933/1583 1053/619/1583 1650/933/1583 +f 1055/621/1584 1628/933/1584 1054/620/1584 +f 1650/933/1585 1054/620/1585 1628/933/1585 +f 1627/936/1586 1441/937/1586 1628/938/1586 +f 1440/938/1587 1628/938/1587 1441/937/1587 +f 1629/937/1588 1441/937/1588 1627/936/1588 +f 1630/939/1589 1438/940/1589 1629/937/1589 +f 1441/937/1590 1629/937/1590 1438/940/1590 +f 1631/939/1591 1438/940/1591 1630/939/1591 +f 1632/941/1592 1436/942/1592 1631/943/1592 +f 1438/944/1593 1631/943/1593 1436/942/1593 +f 1633/945/1594 1434/946/1594 1632/941/1594 +f 1436/942/1595 1632/941/1595 1434/946/1595 +f 1634/947/961 1651/948/961 1633/945/961 +f 1434/946/961 1633/945/961 1651/948/961 +f 1635/949/1596 1430/950/1596 1634/947/1596 +f 1651/948/1597 1634/947/1597 1430/950/1597 +f 1431/951/1598 1430/950/1598 1635/949/1598 +f 1642/939/1599 1433/952/1599 1641/936/1599 +f 1641/936/1600 1433/952/1600 1640/953/1600 +f 1640/953/1601 1433/952/1601 1639/954/1601 +f 1639/954/1602 1433/952/1602 1638/955/1602 +f 1638/955/1603 1433/952/1603 1637/947/1603 +f 1433/952/1604 1431/956/1604 1637/947/1604 +f 1637/947/1605 1431/956/1605 1636/957/1605 +f 1643/958/1606 1433/952/1606 1642/939/1606 +f 1644/947/1607 1652/948/1607 1643/949/1607 +f 1432/950/1608 1643/949/1608 1652/948/1608 +f 1645/959/1609 1435/946/1609 1644/947/1609 +f 1652/948/1609 1644/947/1609 1435/946/1609 +f 1646/941/1610 1437/942/1610 1645/959/1610 +f 1435/946/1611 1645/959/1611 1437/942/1611 +f 1647/943/1612 1439/944/1612 1646/941/1612 +f 1437/942/1613 1646/941/1613 1439/944/1613 +f 1648/960/1614 1439/961/1614 1647/960/1614 +f 1649/960/1615 1442/957/1615 1648/960/1615 +f 1439/961/1616 1648/960/1616 1442/957/1616 +f 1650/962/1617 1442/957/1617 1649/960/1617 +f 1628/938/1618 1440/938/1618 1650/962/1618 +f 1442/957/1619 1650/962/1619 1440/938/1619 +f 1435/723/1620 1434/963/1620 1652/415/1620 +f 1434/963/1620 1651/724/1620 1652/415/1620 +f 1651/724/1621 1430/814/1621 1652/415/1621 +f 1652/415/1621 1430/814/1621 1432/725/1621 +f 1653/964/1622 1654/965/1622 1655/966/1622 +f 1656/967/1622 1655/966/1622 1654/965/1622 +f 1657/968/1028 1658/969/1028 1653/964/1028 +f 1654/965/1028 1653/964/1028 1658/969/1028 +f 1659/970/1623 1660/971/1623 1657/968/1623 +f 1658/969/1623 1657/968/1623 1660/971/1623 +f 1655/966/1624 1656/967/1624 1661/878/1624 +f 1662/905/1624 1661/878/1624 1656/967/1624 +f 1655/972/1625 1661/973/1626 1653/974/1627 +f 1663/975/1628 1653/974/1627 1661/973/1626 +f 1664/975/1629 1662/973/1630 1654/974/1631 +f 1656/972/1632 1654/974/1631 1662/973/1630 +f 1664/976/1633 1663/977/1633 1662/967/1633 +f 1661/966/1633 1662/967/1633 1663/977/1633 +f 1432/950/1634 1433/958/1634 1643/949/1634 +f 1636/957/1635 1431/956/1635 1635/978/1635 +f 1410/979/1636 1409/980/1636 1108/979/1636 +f 1408/850/1637 1108/979/1637 1409/980/1637 +f 1122/981/1638 1121/982/1638 1107/983/1638 +f 1123/912/1639 1418/914/1639 1121/982/1639 +f 1421/984/1640 1422/985/1640 1418/914/1640 +f 1418/914/1641 1422/985/1641 1121/982/1641 +f 1423/986/1642 1410/878/1642 1422/985/1642 +f 1422/985/1643 1410/878/1643 1121/982/1643 +f 1121/982/1644 1410/878/1644 1107/983/1644 +f 1107/983/1645 1410/878/1645 1108/987/1645 +f 1145/985/1646 1143/984/1646 1147/988/1646 +f 1162/914/1647 1401/914/1647 1143/984/1647 +f 1399/989/1648 1397/990/1648 1401/914/1648 +f 1401/914/1649 1397/990/1649 1143/984/1649 +f 1143/984/1650 1397/990/1650 1147/988/1650 +f 1397/990/1651 1394/850/1651 1147/988/1651 +f 1147/988/1652 1394/850/1652 1159/877/1652 +f 1162/849/1653 1164/991/1653 1401/848/1653 +f 1230/731/1654 1228/374/1655 1665/731/1654 +f 1666/374/1656 1665/731/1654 1228/374/1655 +f 1228/374/1655 1225/391/1657 1666/374/1656 +f 1667/391/1658 1666/374/1656 1225/391/1657 +f 1225/391/1657 1224/730/1659 1667/391/1658 +f 1668/730/1659 1667/391/1658 1224/730/1659 +f 1665/731/611 1666/374/614 1669/731/611 +f 1670/374/614 1669/731/611 1666/374/614 +f 1666/374/614 1667/391/612 1670/374/614 +f 1671/391/612 1670/374/614 1667/391/612 +f 1667/391/612 1668/730/611 1671/391/612 +f 1672/730/611 1671/391/612 1668/730/611 +f 1669/731/1660 1670/374/1661 1231/731/1660 +f 1229/374/1662 1231/731/1660 1670/374/1661 +f 1670/374/1661 1671/391/1663 1229/374/1662 +f 1227/391/1664 1229/374/1662 1671/391/1663 +f 1671/391/1663 1672/730/1665 1227/391/1664 +f 1226/730/1665 1227/391/1664 1672/730/1665 +f 1201/992/1149 1277/993/1149 1200/994/1149 +f 1275/995/1666 1200/994/1666 1277/993/1666 +f 1203/996/1667 1279/997/1667 1201/992/1667 +f 1277/993/1668 1201/992/1668 1279/997/1668 +f 1281/998/1669 1279/997/1669 1205/999/1669 +f 1203/996/1670 1205/999/1670 1279/997/1670 +f 1207/1000/1671 1283/1001/1671 1205/999/1671 +f 1281/998/1672 1205/999/1672 1283/1001/1672 +f 1208/1002/913 1284/1003/913 1207/1000/913 +f 1283/1001/1673 1207/1000/1673 1284/1003/1673 +f 1214/1004/1674 1286/1005/1674 1208/1002/1674 +f 1286/1005/1675 1284/1003/1675 1208/1002/1675 +f 1307/1006/1676 1293/1002/1676 1299/1007/1676 +f 1238/1008/1677 1239/1009/1677 1313/994/1677 +f 1314/1010/1678 1313/994/1678 1239/1009/1678 +f 1239/1009/1679 1241/996/1679 1314/1010/1679 +f 1309/1011/1680 1314/1010/1680 1241/996/1680 +f 1241/996/1681 1243/999/1681 1309/1011/1681 +f 1304/1012/1682 1309/1011/1682 1243/999/1682 +f 1304/1012/1683 1243/999/1683 1305/1013/1683 +f 1245/1000/1684 1305/1013/1684 1243/999/1684 +f 1245/1000/1685 1293/1002/1685 1305/1013/1685 +f 1307/1006/1686 1305/1013/1686 1293/1002/1686 +f 1673/417/1687 1674/1014/1687 1675/417/1688 +f 1676/1014/1689 1675/417/1688 1674/1014/1687 +f 1675/417/1688 1676/1014/1689 1677/417/1690 +f 1678/1014/1690 1677/417/1690 1676/1014/1689 +f 1677/417/1691 1678/1014/1691 1679/417/1692 +f 1680/1014/1693 1679/417/1692 1678/1014/1691 +f 1679/417/1692 1680/1014/1693 1673/417/1694 +f 1674/1014/1694 1673/417/1694 1680/1014/1693 +f 1674/726/1695 1680/726/1695 1676/727/1695 +f 1678/727/1695 1676/727/1695 1680/726/1695 +f 1164/892/1696 1163/891/1697 1681/893/1698 +f 1163/891/1697 1161/866/1419 1681/893/1698 +f 1401/864/658 1681/893/1698 1161/866/1419 +# 1961 faces + +# +# object P_51_Mustang_Right_Wing_Flap +# + +v -4.86 -0.53 -0.60 +v -4.41 -0.27 3.38 +v -4.43 -0.76 3.40 +v -29.11 -0.39 3.17 +v -28.77 -0.08 6.47 +v -28.79 -0.68 6.50 +# 6 vertices + +vn 0.99 -0.05 -0.11 +vn -0.01 1.00 -0.09 +vn -0.00 1.00 -0.07 +vn -0.00 1.00 -0.06 +vn 0.13 0.05 0.99 +vn 0.13 0.03 0.99 +vn -0.01 -1.00 -0.09 +vn -0.01 -1.00 -0.08 +vn -0.01 -1.00 -0.06 +vn -0.99 0.05 0.10 +# 10 vertex normals + +vt 0.29 0.02 0.00 +vt 0.23 0.01 0.00 +vt 0.23 0.02 0.00 +vt 0.71 0.15 0.00 +vt 0.71 0.21 0.00 +vt 0.39 0.10 0.00 +vt 0.38 0.16 0.00 +vt 0.23 0.00 0.00 +vt 0.46 0.00 0.00 +vt 0.46 0.01 0.00 +vt 0.05 0.31 0.00 +vt 0.01 0.31 0.00 +vt 0.06 0.05 0.00 +vt 0.01 0.04 0.00 +vt 0.33 0.02 0.00 +vt 0.28 0.01 0.00 +vt 0.33 0.01 0.00 +# 17 texture coords + +g P_51_Mustang_Right_Wing_Flap +f 1682/1015/1699 1683/1016/1699 1684/1017/1699 +f 1685/1018/1700 1686/1019/1700 1682/1020/1701 +f 1683/1021/1702 1682/1020/1701 1686/1019/1700 +f 1686/1022/1703 1687/1016/1703 1683/1023/1704 +f 1684/1024/1704 1683/1023/1704 1687/1016/1703 +f 1687/1025/1705 1685/1026/1706 1684/1027/1707 +f 1682/1028/1707 1684/1027/1707 1685/1026/1706 +f 1686/1029/1708 1685/1030/1708 1687/1031/1708 +# 8 faces + +# +# object P_51_Mustang_Left_Wing +# + +v 21.73 -0.34 5.07 +v 29.47 -0.26 5.88 +v 29.43 -1.11 5.94 +v 13.89 -0.70 20.02 +v 13.32 0.44 17.79 +v 8.22 -0.70 21.64 +v 6.69 0.53 18.92 +v 13.59 0.59 15.01 +v 6.67 0.70 16.38 +v 13.51 0.45 11.97 +v 6.64 0.56 12.08 +v 12.99 0.26 8.88 +v 6.75 0.38 9.22 +v 12.85 -0.11 6.05 +v 18.46 -0.07 6.17 +v 18.38 -0.30 4.71 +v 18.77 0.27 8.57 +v 22.48 0.10 8.18 +v 18.54 0.45 12.11 +v 22.26 0.41 12.21 +v 18.69 0.44 14.67 +v 22.30 0.37 14.75 +v 19.28 -0.74 18.90 +v 18.83 0.28 17.17 +v 22.46 0.18 16.71 +v 23.13 -0.75 18.50 +v 30.30 -0.03 16.07 +v 30.77 -0.79 17.69 +v 29.80 0.01 8.15 +v 29.00 0.22 12.29 +v 29.20 0.27 14.36 +v 6.63 -2.09 14.77 +v 13.47 -1.97 15.15 +v 6.91 -1.78 18.50 +v 13.40 -1.81 12.10 +v 18.43 -1.86 12.23 +v 18.67 -1.64 8.68 +v 22.40 -1.51 8.27 +v 21.69 -1.11 5.12 +v 29.73 -1.49 8.23 +v 28.90 -1.73 12.40 +v 22.15 -1.85 12.34 +v 22.20 -1.84 14.87 +v 18.58 -1.87 14.79 +v 18.75 -1.79 16.77 +v 13.22 -1.77 17.34 +v 7.17 -1.73 19.64 +v 22.37 -1.71 16.82 +v 30.16 -1.61 16.17 +v 29.10 -1.79 14.47 +v 18.09 -0.19 18.03 +v 18.07 -0.12 19.96 +v 18.47 -0.42 18.05 +v 17.66 -0.35 19.98 +v 17.68 -0.41 18.05 +v 17.64 -0.81 20.03 +v 17.66 -0.87 18.10 +v 18.02 -1.05 20.04 +v 18.04 -1.11 18.11 +v 18.43 -0.82 20.02 +v 18.45 -0.88 18.09 +v 18.45 -0.36 19.98 +v 19.42 -0.43 17.94 +v 19.40 -0.37 19.87 +v 19.82 -0.20 17.92 +v 19.37 -0.83 19.91 +v 19.40 -0.89 17.98 +v 19.76 -1.06 19.93 +v 19.78 -1.12 18.00 +v 20.16 -0.83 19.90 +v 20.18 -0.90 17.98 +v 20.18 -0.37 19.86 +v 20.20 -0.44 17.93 +v 19.80 -0.14 19.84 +v 21.31 -0.91 17.79 +v 21.29 -0.85 19.72 +v 21.33 -0.45 17.75 +v 21.67 -1.08 19.74 +v 21.69 -1.15 17.81 +v 22.07 -0.85 19.71 +v 22.09 -0.92 17.79 +v 22.09 -0.39 19.67 +v 22.12 -0.46 17.74 +v 21.71 -0.16 19.65 +v 21.73 -0.22 17.73 +v 21.31 -0.39 19.68 +v 6.36 -1.85 12.28 +v 12.90 -1.58 8.99 +v 18.40 -1.29 6.24 +v 18.34 -1.03 4.76 +v 12.79 -1.19 6.11 +v 12.60 -0.96 4.14 +v 6.61 -1.24 6.37 +v 6.45 -0.95 3.49 +v 6.61 -1.63 9.28 +v 6.54 -0.19 3.45 +v 12.64 -0.25 4.10 +v 6.70 0.02 6.36 +v 25.72 -2.97 15.17 +v 26.04 -2.97 15.16 +v 25.78 -1.70 14.94 +v 26.10 -1.70 14.93 +v 25.71 -3.12 14.67 +v 26.03 -3.12 14.66 +v 26.02 -3.16 10.99 +v 25.71 -3.16 10.99 +v 25.78 -1.72 9.85 +v 26.09 -1.72 9.85 +v 49.14 -0.79 5.08 +v 48.24 -0.91 6.93 +v 48.25 -0.61 6.89 +v 48.48 -0.39 13.06 +v 45.09 -0.22 13.27 +v 48.37 -0.52 14.30 +v 49.79 -0.70 13.22 +v 49.65 -0.81 14.45 +v 50.18 -0.86 13.17 +v 49.94 -0.86 14.46 +v 49.46 -0.86 15.18 +v 48.14 -0.86 15.82 +v 45.11 -0.50 14.61 +v 44.86 -0.85 16.21 +v 37.77 -0.27 15.37 +v 37.66 -0.83 16.94 +v 37.87 0.03 13.78 +v 37.92 0.07 11.77 +v 37.54 -0.12 8.23 +v 44.74 -0.34 7.95 +v 44.69 -0.53 6.74 +v 47.69 -0.50 8.05 +v 49.33 -0.63 7.63 +v 49.65 -0.83 7.70 +v 49.74 -0.63 11.09 +v 50.12 -0.85 11.07 +v 48.01 -0.49 11.12 +v 44.83 -0.18 11.19 +v 37.83 -1.66 11.86 +v 44.77 -1.59 11.25 +v 37.86 -1.64 13.87 +v 37.71 -1.53 15.44 +v 44.80 -1.48 14.64 +v 48.34 -1.08 14.45 +v 44.94 -1.58 13.33 +v 48.44 -1.09 13.22 +v 47.98 -1.08 11.27 +v 49.72 -0.95 11.28 +v 49.21 -0.88 7.78 +v 47.66 -0.96 8.19 +v 44.69 -1.31 7.98 +v 44.66 -1.07 6.82 +v 37.47 -1.43 8.30 +v 37.60 -1.17 6.48 +v 49.77 -1.00 13.41 +v 49.64 -0.94 14.48 +v 37.65 -0.33 6.41 +v 29.53 -2.84 10.92 +v 29.47 -2.71 15.01 +v 29.60 -1.55 9.80 +v 29.51 -1.73 14.90 +v 29.69 -1.73 14.90 +v 29.64 -2.71 15.01 +v 29.78 -1.55 9.80 +v 29.70 -2.84 10.92 +v 32.08 -2.73 14.99 +v 32.26 -2.73 14.99 +v 32.13 -1.70 14.87 +v 32.31 -1.70 14.87 +v 32.14 -2.86 10.90 +v 32.32 -2.87 10.90 +v 32.22 -1.51 9.77 +v 32.40 -1.51 9.77 +v 34.83 -2.75 14.96 +v 35.01 -2.75 14.96 +v 34.88 -1.62 14.83 +v 35.06 -1.62 14.83 +v 34.89 -2.89 10.87 +v 35.07 -2.89 10.87 +v 34.97 -1.51 9.74 +v 35.15 -1.51 9.74 +v 25.90 -3.10 16.05 +v 25.99 -3.13 9.38 +v 24.57 -3.45 16.08 +v 27.29 -3.50 9.39 +v 27.20 -3.47 16.06 +v 28.21 -4.49 9.44 +v 28.12 -4.46 16.11 +v 28.50 -5.83 9.52 +v 28.41 -5.80 16.19 +v 28.08 -7.16 9.61 +v 28.00 -7.14 16.28 +v 27.07 -8.14 9.68 +v 26.98 -8.11 16.36 +v 25.73 -8.49 9.72 +v 25.65 -8.46 16.39 +v 24.43 -8.12 9.71 +v 24.35 -8.09 16.38 +v 23.51 -7.13 9.66 +v 23.43 -7.10 16.33 +v 23.22 -5.79 9.57 +v 23.14 -5.76 16.24 +v 23.64 -4.45 9.48 +v 23.56 -4.42 16.15 +v 24.65 -3.48 9.41 +v 25.98 -4.22 6.21 +v 25.18 -4.43 6.23 +v 24.57 -5.01 6.27 +v 24.32 -5.81 6.33 +v 24.50 -6.61 6.37 +v 25.04 -7.20 6.41 +v 25.82 -7.42 6.41 +v 26.62 -7.21 6.39 +v 27.23 -6.63 6.35 +v 27.48 -5.83 6.30 +v 25.96 -5.24 3.65 +v 25.66 -5.32 3.66 +v 27.30 -5.03 6.25 +v 26.75 -4.44 6.21 +v 26.25 -5.32 3.65 +v 25.93 -5.83 3.43 +v 25.44 -5.53 3.68 +v 25.35 -5.83 3.70 +v 25.41 -6.12 3.71 +v 25.62 -6.34 3.73 +v 25.90 -6.42 3.73 +v 26.20 -6.35 3.72 +v 26.42 -6.13 3.70 +v 26.52 -5.84 3.68 +v 26.45 -5.54 3.67 +v 23.60 -6.99 17.58 +v 23.33 -5.76 17.50 +v 23.72 -4.53 17.42 +v 24.65 -3.63 17.35 +v 25.88 -3.31 17.32 +v 27.08 -3.65 17.33 +v 27.92 -4.56 17.38 +v 28.19 -5.79 17.46 +v 27.80 -7.03 17.54 +v 26.87 -7.92 17.61 +v 23.89 -5.75 19.06 +v 24.18 -4.81 19.00 +v 24.72 -5.76 20.24 +v 24.83 -6.27 20.28 +v 24.09 -6.70 19.12 +v 25.64 -8.24 17.64 +v 24.44 -7.90 17.63 +v 24.74 -7.39 19.16 +v 25.18 -6.64 20.30 +v 25.72 -5.76 20.57 +v 24.88 -5.25 20.21 +v 24.89 -4.13 18.95 +v 25.83 -3.88 18.92 +v 26.75 -4.14 18.93 +v 27.39 -4.84 18.97 +v 27.60 -5.78 19.03 +v 27.30 -6.72 19.09 +v 26.59 -7.41 19.14 +v 25.65 -7.65 19.16 +v 25.68 -6.78 20.30 +v 26.19 -6.65 20.29 +v 26.57 -6.28 20.26 +v 26.73 -5.77 20.22 +v 26.62 -5.26 20.19 +v 26.27 -4.89 20.17 +v 25.77 -4.74 20.17 +v 25.27 -4.88 20.18 +v 29.89 -0.71 2.47 +# 266 vertices + +vn 0.10 -0.07 -0.99 +vn 0.10 0.89 0.44 +vn 0.06 0.97 0.24 +vn 0.09 0.92 0.39 +vn 0.05 0.98 0.21 +vn 0.02 1.00 0.01 +vn 0.02 1.00 0.02 +vn 0.01 1.00 -0.05 +vn 0.02 1.00 -0.05 +vn 0.00 1.00 -0.10 +vn 0.02 1.00 -0.09 +vn 0.01 0.99 -0.10 +vn 0.01 0.99 -0.15 +vn 0.02 0.99 -0.15 +vn 0.02 1.00 -0.10 +vn 0.02 0.99 -0.10 +vn 0.01 1.00 -0.03 +vn 0.02 1.00 -0.03 +vn 0.02 1.00 0.03 +vn 0.03 1.00 0.05 +vn 0.09 0.87 0.48 +vn 0.06 0.96 0.28 +vn 0.05 0.96 0.28 +vn 0.06 0.89 0.44 +vn 0.04 0.95 0.31 +vn 0.05 0.91 0.41 +vn 0.01 0.99 -0.12 +vn 0.01 1.00 -0.09 +vn 0.02 1.00 -0.04 +vn 0.02 1.00 0.08 +vn 0.01 -1.00 -0.01 +vn 0.01 -1.00 0.02 +vn 0.01 -1.00 0.07 +vn -0.00 -1.00 -0.06 +vn 0.01 -1.00 -0.04 +vn 0.00 -0.99 -0.10 +vn 0.02 -0.99 -0.10 +vn 0.01 -0.99 -0.14 +vn 0.00 -0.99 -0.16 +vn 0.00 -0.99 -0.11 +vn 0.01 -1.00 0.03 +vn 0.03 -0.97 0.23 +vn 0.04 -0.98 0.22 +vn 0.08 -0.97 0.23 +vn 0.13 -0.92 0.38 +vn 0.07 -0.93 0.36 +vn 0.05 -0.90 0.44 +vn 0.03 -0.96 0.28 +vn 0.05 -0.88 0.48 +vn 0.03 -0.94 0.33 +vn 0.04 -0.89 0.46 +vn 0.01 -1.00 0.04 +vn 0.88 0.48 -0.01 +vn -0.86 0.51 -0.03 +vn -0.84 0.54 -0.03 +vn -0.88 -0.48 0.01 +vn -0.89 -0.46 0.01 +vn -0.02 -1.00 0.03 +vn -0.01 -1.00 0.03 +vn 0.84 -0.54 0.03 +vn 0.86 -0.51 0.03 +vn 0.89 0.46 -0.01 +vn 0.00 -1.00 -0.09 +vn -0.01 -0.99 -0.10 +vn -0.01 -0.99 -0.16 +vn -0.01 -0.99 -0.17 +vn -0.00 -0.99 -0.13 +vn 0.01 -0.99 -0.12 +vn 0.01 -0.99 -0.10 +vn 0.11 -0.07 -0.99 +vn 0.02 1.00 -0.07 +vn 0.01 0.09 1.00 +vn 0.02 0.18 0.98 +vn 0.00 -0.96 0.29 +vn -0.00 -1.00 0.01 +vn -0.02 -0.62 -0.78 +vn -1.00 0.05 0.00 +vn 1.00 -0.05 -0.00 +vn 0.99 -0.06 -0.14 +vn 0.99 -0.06 -0.10 +vn 0.99 -0.05 -0.10 +vn 0.98 -0.04 0.19 +vn 0.85 -0.11 -0.52 +vn 0.83 -0.07 -0.55 +vn 0.94 -0.10 -0.32 +vn -1.00 0.08 0.01 +vn -1.00 0.07 0.01 +vn -0.99 0.12 0.05 +vn -1.00 0.08 0.06 +vn -1.00 0.01 0.00 +vn -0.98 0.13 0.12 +vn -0.99 0.11 -0.07 +vn -1.00 0.07 -0.04 +vn -0.88 -0.04 0.48 +vn -0.99 -0.11 0.08 +vn -1.00 0.01 0.01 +vn -0.96 -0.13 0.23 +vn -0.90 -0.01 -0.44 +vn 0.13 0.99 0.04 +vn 0.05 0.99 0.10 +vn 0.11 0.98 0.16 +vn 0.30 0.95 0.08 +vn 0.20 0.97 0.10 +vn 0.37 0.93 0.06 +vn 0.18 0.98 0.07 +vn 0.16 0.97 0.17 +vn 0.06 0.97 0.22 +vn 0.04 0.98 0.21 +vn 0.04 0.97 0.23 +vn 0.04 0.96 0.26 +vn 0.04 0.94 0.34 +vn 0.06 0.92 0.40 +vn 0.05 0.97 0.25 +vn 0.04 0.99 0.10 +vn 0.03 1.00 -0.02 +vn 0.02 1.00 -0.08 +vn 0.04 0.99 -0.11 +vn 0.04 0.99 -0.15 +vn 0.06 1.00 -0.05 +vn 0.05 1.00 -0.07 +vn 0.31 0.95 -0.06 +vn 0.17 0.98 -0.07 +vn 0.54 0.84 -0.08 +vn 0.31 0.95 -0.03 +vn 0.50 0.86 -0.04 +vn 0.08 1.00 -0.03 +vn 0.06 1.00 -0.02 +vn 0.01 -1.00 -0.03 +vn 0.08 -1.00 -0.04 +vn 0.02 -1.00 0.04 +vn 0.03 -0.97 0.25 +vn 0.03 -0.97 0.24 +vn 0.05 -0.89 0.45 +vn 0.04 -0.91 0.42 +vn 0.04 -0.93 0.38 +vn 0.06 -0.98 0.21 +vn 0.10 -0.97 0.22 +vn 0.11 -0.99 0.08 +vn 0.08 -1.00 0.03 +vn 0.10 -1.00 -0.01 +vn 0.11 -0.99 -0.03 +vn 0.07 -1.00 -0.03 +vn 0.05 -1.00 -0.03 +vn 0.09 -1.00 -0.03 +vn 0.05 -0.99 -0.13 +vn 0.06 -1.00 -0.04 +vn 0.03 -0.98 -0.20 +vn 0.01 -0.99 -0.11 +vn 0.00 -0.99 -0.17 +vn 0.11 -0.99 -0.04 +vn 0.24 -0.97 -0.02 +vn 0.24 -0.97 -0.03 +vn 0.31 -0.95 0.01 +vn 0.35 -0.94 0.05 +vn 0.22 -0.97 0.13 +vn 0.26 -0.96 0.09 +vn 0.11 -0.98 0.15 +vn 0.08 -0.98 0.15 +vn 0.08 -0.98 0.16 +vn 0.03 0.99 -0.11 +vn 0.02 0.99 -0.12 +vn 0.08 -1.00 0.01 +vn 0.10 -0.99 0.06 +vn -1.00 0.05 -0.02 +vn 1.00 -0.05 0.02 +vn 0.00 0.12 0.99 +vn -0.00 -1.00 0.03 +vn -0.00 -0.64 -0.77 +vn 0.00 0.11 0.99 +vn 0.05 -0.47 -0.88 +vn 0.07 -0.07 -1.00 +vn 0.05 0.63 -0.77 +vn 0.05 -0.19 -0.98 +vn 0.04 -0.08 -1.00 +vn 0.04 -0.11 -0.99 +vn -0.34 -0.94 0.05 +vn -0.19 0.98 -0.09 +vn -0.32 -0.95 0.05 +vn -0.99 0.06 0.14 +vn -1.00 -0.05 0.08 +vn -0.10 0.99 0.04 +vn -0.80 0.60 -0.05 +vn -0.85 0.11 0.52 +vn -0.94 0.10 0.32 +vn -0.00 -0.66 -0.75 +vn 0.01 1.00 -0.00 +vn -0.50 0.87 -0.01 +vn 0.52 0.85 0.00 +vn 0.88 0.47 0.01 +vn 0.89 0.46 0.01 +vn 1.00 -0.03 0.01 +vn 1.00 -0.05 0.01 +vn 0.86 -0.52 0.01 +vn 0.85 -0.53 0.01 +vn 0.50 -0.87 0.01 +vn 0.48 -0.88 0.01 +vn -0.01 -1.00 0.00 +vn -0.52 -0.85 -0.00 +vn -0.89 -0.46 -0.01 +vn -0.88 -0.47 -0.01 +vn -1.00 0.05 -0.01 +vn -1.00 0.03 -0.01 +vn -0.85 0.53 -0.01 +vn -0.86 0.52 -0.01 +vn -0.48 0.88 -0.01 +vn 0.01 0.95 -0.33 +vn 0.01 0.94 -0.35 +vn -0.48 0.82 -0.32 +vn -0.47 0.81 -0.34 +vn -0.82 0.47 -0.32 +vn -0.81 0.48 -0.34 +vn -0.95 0.01 -0.32 +vn -0.94 0.02 -0.34 +vn -0.83 -0.46 -0.32 +vn -0.83 -0.45 -0.34 +vn -0.49 -0.81 -0.32 +vn -0.48 -0.81 -0.34 +vn -0.02 -0.95 -0.31 +vn -0.01 -0.95 -0.33 +vn 0.45 -0.84 -0.30 +vn 0.45 -0.83 -0.32 +vn 0.80 -0.52 -0.29 +vn 0.80 -0.51 -0.31 +vn 0.95 -0.07 -0.30 +vn 0.94 -0.06 -0.32 +vn 0.00 0.73 -0.69 +vn -0.38 0.63 -0.68 +vn 0.85 0.42 -0.31 +vn 0.84 0.42 -0.33 +vn 0.50 0.80 -0.32 +vn 0.50 0.80 -0.34 +vn 0.39 0.61 -0.68 +vn -0.01 -0.05 -1.00 +vn -0.65 0.36 -0.67 +vn -0.75 -0.00 -0.66 +vn -0.66 -0.38 -0.65 +vn -0.39 -0.66 -0.64 +vn -0.01 -0.77 -0.64 +vn 0.36 -0.68 -0.63 +vn 0.64 -0.43 -0.64 +vn 0.75 -0.07 -0.65 +vn 0.67 0.31 -0.67 +vn -0.88 -0.44 0.16 +vn -0.86 -0.44 0.25 +vn -0.99 0.06 0.15 +vn -0.97 0.06 0.24 +vn -0.83 0.54 0.15 +vn -0.82 0.52 0.23 +vn -0.47 0.87 0.15 +vn -0.47 0.85 0.24 +vn 0.02 0.99 0.16 +vn 0.01 0.97 0.25 +vn 0.51 0.84 0.17 +vn 0.50 0.83 0.26 +vn 0.87 0.47 0.17 +vn 0.85 0.46 0.26 +vn 0.98 -0.02 0.17 +vn 0.96 -0.03 0.26 +vn 0.85 -0.50 0.17 +vn 0.83 -0.50 0.26 +vn 0.49 -0.85 0.17 +vn 0.48 -0.84 0.26 +vn -0.89 0.07 0.45 +vn -0.75 0.49 0.44 +vn -0.62 0.08 0.78 +vn -0.55 -0.24 0.80 +vn -0.79 -0.39 0.47 +vn -0.01 -0.99 0.17 +vn -0.01 -0.96 0.26 +vn -0.52 -0.84 0.17 +vn -0.51 -0.82 0.26 +vn -0.47 -0.74 0.48 +vn -0.32 -0.49 0.81 +vn 0.01 0.06 1.00 +vn -0.53 0.37 0.76 +vn -0.43 0.79 0.44 +vn 0.01 0.89 0.45 +vn 0.45 0.76 0.46 +vn 0.78 0.43 0.46 +vn 0.89 -0.01 0.46 +vn 0.76 -0.44 0.47 +vn 0.45 -0.76 0.47 +vn -0.01 -0.88 0.48 +vn 0.00 -0.59 0.81 +vn 0.32 -0.51 0.80 +vn 0.54 -0.29 0.79 +vn 0.63 0.02 0.78 +vn 0.55 0.33 0.77 +vn 0.32 0.56 0.76 +vn 0.01 0.65 0.76 +vn -0.30 0.58 0.76 +vn -0.99 0.04 -0.13 +vn 0.02 0.99 -0.13 +vn 0.03 0.99 -0.13 +vn 0.01 -1.00 -0.07 +vn 0.01 -1.00 -0.06 +vn 0.90 0.01 0.44 +vn -0.05 0.07 1.00 +vn -0.05 0.11 0.99 +# 299 vertex normals + +vt 0.55 0.02 0.00 +vt 0.58 0.02 0.00 +vt 0.86 0.72 0.00 +vt 0.86 0.69 0.00 +vt 0.93 0.75 0.00 +vt 0.95 0.70 0.00 +vt 0.86 0.64 0.00 +vt 0.95 0.66 0.00 +vt 0.86 0.59 0.00 +vt 0.95 0.59 0.00 +vt 0.87 0.54 0.00 +vt 0.95 0.55 0.00 +vt 0.87 0.50 0.00 +vt 0.80 0.50 0.00 +vt 0.80 0.48 0.00 +vt 0.75 0.48 0.00 +vt 0.79 0.54 0.00 +vt 0.74 0.54 0.00 +vt 0.79 0.60 0.00 +vt 0.75 0.60 0.00 +vt 0.79 0.64 0.00 +vt 0.74 0.64 0.00 +vt 0.78 0.71 0.00 +vt 0.79 0.68 0.00 +vt 0.74 0.67 0.00 +vt 0.73 0.70 0.00 +vt 0.64 0.67 0.00 +vt 0.63 0.69 0.00 +vt 0.65 0.50 0.00 +vt 0.64 0.54 0.00 +vt 0.66 0.60 0.00 +vt 0.65 0.64 0.00 +vt 0.20 0.10 0.00 +vt 0.20 0.17 0.00 +vt 0.25 0.11 0.00 +vt 0.16 0.16 0.00 +vt 0.15 0.22 0.00 +vt 0.11 0.21 0.00 +vt 0.10 0.25 0.00 +vt 0.06 0.24 0.00 +vt 0.05 0.32 0.00 +vt 0.08 0.33 0.00 +vt 0.14 0.33 0.00 +vt 0.15 0.26 0.00 +vt 0.18 0.26 0.00 +vt 0.19 0.22 0.00 +vt 0.21 0.23 0.00 +vt 0.23 0.17 0.00 +vt 0.27 0.11 0.00 +vt 0.29 0.13 0.00 +vt 0.26 0.19 0.00 +vt 0.24 0.24 0.00 +vt 0.21 0.27 0.00 +vt 0.23 0.28 0.00 +vt 0.19 0.35 0.00 +vt 0.21 0.36 0.00 +vt 0.16 0.34 0.00 +vt 0.39 0.68 0.00 +vt 0.25 0.68 0.00 +vt 0.39 0.69 0.00 +vt 0.25 0.69 0.00 +vt 0.25 0.70 0.00 +vt 0.39 0.70 0.00 +vt 0.25 0.71 0.00 +vt 0.39 0.71 0.00 +vt 0.17 0.09 0.00 +vt 0.12 0.15 0.00 +vt 0.08 0.20 0.00 +vt 0.06 0.20 0.00 +vt 0.08 0.14 0.00 +vt 0.06 0.14 0.00 +vt 0.10 0.08 0.00 +vt 0.06 0.07 0.00 +vt 0.13 0.08 0.00 +vt 0.48 0.02 0.00 +vt 0.51 0.02 0.00 +vt 0.53 0.02 0.00 +vt 0.55 0.03 0.00 +vt 0.87 0.46 0.00 +vt 0.95 0.50 0.00 +vt 0.95 0.45 0.00 +vt 0.37 0.72 0.00 +vt 0.38 0.71 0.00 +vt 0.37 0.73 0.00 +vt 0.39 0.73 0.00 +vt 0.39 0.72 0.00 +vt 0.38 0.74 0.00 +vt 0.01 0.74 0.00 +vt 0.02 0.73 0.00 +vt 0.04 0.73 0.00 +vt 0.03 0.73 0.00 +vt 0.77 0.13 0.00 +vt 0.87 0.13 0.00 +vt 0.77 0.11 0.00 +vt 0.78 0.11 0.00 +vt 0.85 0.11 0.00 +vt 0.20 0.52 0.00 +vt 0.20 0.50 0.00 +vt 0.22 0.51 0.00 +vt 0.21 0.50 0.00 +vt 0.21 0.57 0.00 +vt 0.20 0.55 0.00 +vt 0.23 0.56 0.00 +vt 0.23 0.55 0.00 +vt 0.21 0.58 0.00 +vt 0.23 0.57 0.00 +vt 0.23 0.59 0.00 +vt 0.21 0.51 0.00 +vt 0.21 0.53 0.00 +vt 0.20 0.53 0.00 +vt 0.21 0.56 0.00 +vt 0.21 0.54 0.00 +vt 0.22 0.54 0.00 +vt 0.22 0.58 0.00 +vt 0.23 0.58 0.00 +vt 0.48 0.06 0.00 +vt 0.47 0.06 0.00 +vt 0.39 0.62 0.00 +vt 0.44 0.63 0.00 +vt 0.40 0.64 0.00 +vt 0.38 0.63 0.00 +vt 0.38 0.65 0.00 +vt 0.37 0.63 0.00 +vt 0.38 0.66 0.00 +vt 0.40 0.67 0.00 +vt 0.44 0.65 0.00 +vt 0.44 0.67 0.00 +vt 0.54 0.66 0.00 +vt 0.54 0.68 0.00 +vt 0.54 0.63 0.00 +vt 0.54 0.60 0.00 +vt 0.54 0.54 0.00 +vt 0.44 0.54 0.00 +vt 0.45 0.52 0.00 +vt 0.40 0.54 0.00 +vt 0.40 0.53 0.00 +vt 0.38 0.54 0.00 +vt 0.39 0.49 0.00 +vt 0.38 0.59 0.00 +vt 0.37 0.59 0.00 +vt 0.40 0.59 0.00 +vt 0.44 0.59 0.00 +vt 0.12 0.42 0.00 +vt 0.10 0.50 0.00 +vt 0.14 0.43 0.00 +vt 0.16 0.43 0.00 +vt 0.18 0.43 0.00 +vt 0.16 0.51 0.00 +vt 0.14 0.51 0.00 +vt 0.15 0.54 0.00 +vt 0.13 0.54 0.00 +vt 0.13 0.50 0.00 +vt 0.12 0.54 0.00 +vt 0.09 0.53 0.00 +vt 0.09 0.55 0.00 +vt 0.05 0.54 0.00 +vt 0.05 0.52 0.00 +vt 0.04 0.52 0.00 +vt 0.06 0.49 0.00 +vt 0.01 0.53 0.00 +vt 0.04 0.49 0.00 +vt 0.07 0.41 0.00 +vt 0.05 0.41 0.00 +vt 0.12 0.56 0.00 +vt 0.13 0.56 0.00 +vt 0.14 0.56 0.00 +vt 0.54 0.51 0.00 +vt 0.65 0.01 0.00 +vt 0.65 0.02 0.00 +vt 0.52 0.01 0.00 +vt 0.52 0.02 0.00 +vt 0.62 0.03 0.00 +vt 0.66 0.02 0.00 +vt 0.62 0.02 0.00 +vt 0.22 0.56 0.00 +vt 0.20 0.49 0.00 +vt 0.21 0.49 0.00 +vt 0.23 0.54 0.00 +vt 0.24 0.56 0.00 +vt 0.24 0.57 0.00 +vt 0.75 0.10 0.00 +vt 0.88 0.11 0.00 +vt 0.75 0.09 0.00 +vt 0.88 0.10 0.00 +vt 0.88 0.08 0.00 +vt 0.75 0.08 0.00 +vt 0.88 0.06 0.00 +vt 0.75 0.05 0.00 +vt 0.88 0.03 0.00 +vt 0.75 0.03 0.00 +vt 0.88 0.02 0.00 +vt 0.75 0.01 0.00 +vt 0.88 0.01 0.00 +vt 0.75 0.00 0.00 +vt 0.94 0.09 0.00 +vt 0.94 0.08 0.00 +vt 0.94 0.07 0.00 +vt 0.94 0.06 0.00 +vt 0.94 0.04 0.00 +vt 0.94 0.03 0.00 +vt 0.99 0.07 0.00 +vt 0.99 0.06 0.00 +vt 0.99 0.05 0.00 +vt 0.73 0.03 0.00 +vt 0.73 0.05 0.00 +vt 0.73 0.08 0.00 +vt 0.73 0.09 0.00 +vt 0.73 0.10 0.00 +vt 0.73 0.02 0.00 +vt 0.70 0.05 0.00 +vt 0.70 0.07 0.00 +vt 0.68 0.05 0.00 +vt 0.68 0.04 0.00 +vt 0.70 0.03 0.00 +vt 0.73 0.01 0.00 +vt 0.70 0.02 0.00 +vt 0.67 0.05 0.00 +vt 0.67 0.06 0.00 +vt 0.70 0.08 0.00 +vt 0.70 0.09 0.00 +vt 0.68 0.03 0.00 +vt 0.67 0.07 0.00 +vt 0.48 0.03 0.00 +vt 0.64 0.44 0.00 +vt 0.40 0.52 0.00 +vt 0.01 0.32 0.00 +vt 0.49 0.03 0.00 +vt 0.48 0.01 0.00 +vt 0.66 0.01 0.00 +# 229 texture coords + +g P_51_Mustang_Left_Wing +f 1688/1032/1709 1689/1033/1709 1690/1033/1709 +f 1691/1034/1710 1692/1035/1711 1693/1036/1712 +f 1694/1037/1713 1693/1036/1712 1692/1035/1711 +f 1692/1035/1711 1695/1038/1714 1694/1037/1713 +f 1696/1039/1715 1694/1037/1713 1695/1038/1714 +f 1695/1038/1714 1697/1040/1716 1696/1039/1715 +f 1698/1041/1717 1696/1039/1715 1697/1040/1716 +f 1697/1040/1716 1699/1042/1718 1698/1041/1717 +f 1700/1043/1719 1698/1041/1717 1699/1042/1718 +f 1699/1042/1718 1701/1044/1720 1700/1043/1719 +f 1701/1044/1720 1699/1042/1718 1702/1045/1721 +f 1702/1045/1721 1703/1046/1721 1701/1044/1720 +f 1688/1047/1722 1703/1046/1721 1702/1045/1721 +f 1702/1045/1721 1704/1048/1723 1688/1047/1722 +f 1705/1049/1724 1688/1047/1722 1704/1048/1723 +f 1704/1048/1723 1706/1050/1725 1705/1049/1724 +f 1707/1051/1726 1705/1049/1724 1706/1050/1725 +f 1706/1050/1725 1708/1052/1727 1707/1051/1726 +f 1709/1053/1728 1707/1051/1726 1708/1052/1727 +f 1710/1054/1729 1711/1055/1730 1691/1034/1710 +f 1692/1035/1711 1691/1034/1710 1711/1055/1730 +f 1692/1035/1711 1711/1055/1730 1695/1038/1714 +f 1708/1052/1727 1695/1038/1714 1711/1055/1730 +f 1708/1052/1727 1706/1050/1725 1695/1038/1714 +f 1697/1040/1716 1695/1038/1714 1706/1050/1725 +f 1706/1050/1725 1704/1048/1723 1697/1040/1716 +f 1699/1042/1718 1697/1040/1716 1704/1048/1723 +f 1704/1048/1723 1702/1045/1721 1699/1042/1718 +f 1708/1052/1727 1711/1055/1730 1709/1053/1728 +f 1712/1056/1731 1709/1053/1728 1711/1055/1730 +f 1711/1055/1730 1710/1054/1729 1712/1056/1731 +f 1713/1057/1732 1712/1056/1731 1710/1054/1729 +f 1712/1056/1731 1713/1057/1732 1714/1058/1733 +f 1715/1059/1734 1714/1058/1733 1713/1057/1732 +f 1688/1047/1722 1705/1049/1724 1689/1060/1735 +f 1716/1061/1736 1689/1060/1735 1705/1049/1724 +f 1716/1061/1736 1705/1049/1724 1717/1062/1737 +f 1707/1051/1726 1717/1062/1737 1705/1049/1724 +f 1707/1051/1726 1709/1053/1728 1717/1062/1737 +f 1718/1063/1738 1717/1062/1737 1709/1053/1728 +f 1718/1063/1738 1709/1053/1728 1714/1058/1733 +f 1712/1056/1731 1714/1058/1733 1709/1053/1728 +f 1719/1064/1739 1720/1065/1740 1721/1066/1741 +f 1720/1065/1740 1719/1064/1739 1722/1067/1742 +f 1722/1067/1742 1723/1068/1743 1720/1065/1740 +f 1723/1068/1743 1722/1067/1742 1724/1069/1744 +f 1724/1069/1744 1725/1070/1745 1723/1068/1743 +f 1725/1070/1745 1724/1069/1744 1726/1071/1746 +f 1726/1071/1746 1690/1072/1747 1725/1070/1745 +f 1727/1073/1748 1725/1070/1745 1690/1072/1747 +f 1727/1073/1748 1728/1074/1743 1725/1070/1745 +f 1729/1075/1743 1725/1070/1745 1728/1074/1743 +f 1729/1075/1743 1728/1074/1743 1730/1076/1749 +f 1730/1076/1749 1731/1077/1740 1729/1075/1743 +f 1731/1077/1740 1730/1076/1749 1732/1078/1750 +f 1731/1077/1740 1732/1078/1750 1720/1065/1740 +f 1733/1079/1751 1720/1065/1740 1732/1078/1750 +f 1733/1079/1751 1721/1066/1741 1720/1065/1740 +f 1721/1066/1741 1733/1079/1751 1734/1080/1752 +f 1734/1080/1752 1733/1079/1751 1693/1081/1753 +f 1729/1075/1743 1723/1068/1743 1725/1070/1745 +f 1723/1068/1743 1729/1075/1743 1731/1077/1740 +f 1731/1077/1740 1720/1065/1740 1723/1068/1743 +f 1691/1082/1754 1693/1081/1753 1733/1079/1751 +f 1733/1079/1751 1732/1078/1750 1691/1082/1754 +f 1710/1083/1755 1691/1082/1754 1732/1078/1750 +f 1732/1078/1750 1735/1084/1756 1710/1083/1755 +f 1713/1085/1757 1710/1083/1755 1735/1084/1756 +f 1735/1084/1756 1736/1086/1758 1713/1085/1757 +f 1715/1087/1759 1713/1085/1757 1736/1086/1758 +f 1737/1088/1760 1730/1076/1749 1728/1074/1743 +f 1737/1088/1760 1736/1086/1758 1730/1076/1749 +f 1735/1084/1756 1730/1076/1749 1736/1086/1758 +f 1735/1084/1756 1732/1078/1750 1730/1076/1749 +f 1738/1089/1726 1739/1090/1725 1740/1091/1761 +f 1739/1090/1725 1738/1089/1726 1741/1092/1762 +f 1742/1091/1763 1741/1092/1762 1738/1089/1726 +f 1741/1092/1762 1742/1091/1763 1743/1093/1764 +f 1744/1094/1765 1743/1093/1764 1742/1091/1763 +f 1743/1093/1764 1744/1094/1765 1745/1095/1766 +f 1746/1096/1767 1745/1095/1766 1744/1094/1765 +f 1745/1095/1766 1746/1096/1767 1747/1093/1768 +f 1748/1094/1769 1747/1093/1768 1746/1096/1767 +f 1747/1093/1768 1748/1094/1769 1749/1092/1770 +f 1740/1091/1761 1749/1092/1770 1748/1094/1769 +f 1749/1092/1770 1740/1091/1761 1739/1090/1725 +f 1750/1091/1763 1751/1092/1762 1752/1089/1726 +f 1751/1092/1762 1750/1091/1763 1753/1093/1764 +f 1754/1094/1765 1753/1093/1764 1750/1091/1763 +f 1753/1093/1764 1754/1094/1765 1755/1095/1766 +f 1756/1096/1767 1755/1095/1766 1754/1094/1765 +f 1755/1095/1766 1756/1096/1767 1757/1093/1768 +f 1758/1094/1769 1757/1093/1768 1756/1096/1767 +f 1757/1093/1768 1758/1094/1769 1759/1092/1770 +f 1760/1091/1761 1759/1092/1770 1758/1094/1769 +f 1759/1092/1770 1760/1091/1761 1761/1090/1725 +f 1752/1089/1726 1761/1090/1725 1760/1091/1761 +f 1761/1090/1725 1752/1089/1726 1751/1092/1762 +f 1762/1094/1765 1763/1093/1764 1764/1091/1763 +f 1763/1093/1764 1762/1094/1765 1765/1095/1766 +f 1766/1096/1767 1765/1095/1766 1762/1094/1765 +f 1765/1095/1766 1766/1096/1767 1767/1093/1768 +f 1768/1094/1769 1767/1093/1768 1766/1096/1767 +f 1767/1093/1768 1768/1094/1769 1769/1092/1770 +f 1770/1091/1761 1769/1092/1770 1768/1094/1769 +f 1769/1092/1770 1770/1091/1761 1771/1090/1725 +f 1772/1089/1726 1771/1090/1725 1770/1091/1761 +f 1771/1090/1725 1772/1089/1726 1773/1092/1762 +f 1764/1091/1763 1773/1092/1762 1772/1089/1726 +f 1773/1092/1762 1764/1091/1763 1763/1093/1764 +f 1774/1097/1771 1722/1067/1742 1719/1064/1739 +f 1722/1067/1742 1774/1097/1771 1775/1098/1772 +f 1775/1098/1772 1724/1069/1744 1722/1067/1742 +f 1724/1069/1744 1775/1098/1772 1776/1099/1773 +f 1776/1099/1773 1726/1071/1746 1724/1069/1744 +f 1776/1099/1773 1777/1100/1774 1726/1071/1746 +f 1776/1099/1773 1778/1101/1775 1777/1100/1774 +f 1779/1102/1748 1777/1100/1774 1778/1101/1775 +f 1778/1101/1775 1780/1103/1776 1779/1102/1748 +f 1781/1104/1777 1779/1102/1748 1780/1103/1776 +f 1782/1105/1744 1775/1098/1772 1774/1097/1771 +f 1775/1098/1772 1782/1105/1744 1778/1101/1775 +f 1778/1101/1775 1776/1099/1773 1775/1098/1772 +f 1780/1103/1776 1778/1101/1775 1782/1105/1744 +f 1783/1106/1778 1779/1107/1778 1781/1106/1778 +f 1784/1107/1778 1779/1107/1778 1783/1106/1778 +f 1777/1108/1778 1779/1107/1778 1784/1107/1778 +f 1703/1108/1778 1777/1108/1778 1784/1107/1778 +f 1777/1108/1778 1703/1108/1778 1726/1109/1778 +f 1703/1108/1778 1688/1032/1778 1726/1109/1778 +f 1726/1109/1778 1688/1032/1778 1690/1033/1778 +f 1784/1110/1779 1701/1044/1720 1703/1046/1721 +f 1701/1044/1720 1784/1110/1779 1785/1111/1723 +f 1785/1111/1723 1700/1043/1719 1701/1044/1720 +f 1783/1112/1779 1785/1111/1723 1784/1110/1779 +f 1749/1113/1780 1739/1114/1780 1747/1115/1780 +f 1739/1114/1780 1743/1116/1780 1747/1115/1780 +f 1741/1117/1780 1743/1116/1780 1739/1114/1780 +f 1747/1115/1780 1743/1116/1780 1745/1118/1780 +f 1759/1113/1780 1761/1114/1780 1757/1115/1780 +f 1761/1114/1780 1753/1116/1780 1757/1115/1780 +f 1751/1117/1780 1753/1116/1780 1761/1114/1780 +f 1757/1115/1780 1753/1116/1780 1755/1118/1780 +f 1769/1113/1780 1771/1114/1780 1767/1115/1780 +f 1771/1114/1780 1763/1116/1780 1767/1115/1780 +f 1773/1117/1780 1763/1116/1780 1771/1114/1780 +f 1767/1115/1780 1763/1116/1780 1765/1118/1780 +f 1786/1119/1781 1787/1119/1781 1788/1119/1781 +f 1789/1119/1781 1788/1119/1781 1787/1119/1781 +f 1790/1120/1782 1791/1120/1782 1786/1120/1782 +f 1787/1120/1782 1786/1120/1782 1791/1120/1782 +f 1791/1120/1783 1790/1120/1783 1792/1121/1783 +f 1793/1121/1783 1792/1121/1783 1790/1120/1783 +f 1794/1121/1784 1795/1121/1784 1793/1122/1784 +f 1792/1122/1784 1793/1122/1784 1795/1121/1784 +f 1788/1123/1785 1794/1124/1785 1786/1125/1785 +f 1790/1126/1785 1794/1124/1785 1793/1127/1785 +f 1786/1125/1785 1794/1124/1785 1790/1126/1785 +f 1789/1123/1786 1787/1125/1786 1795/1124/1786 +f 1795/1124/1786 1787/1125/1786 1792/1127/1786 +f 1792/1127/1786 1787/1125/1786 1791/1126/1786 +f 1727/1128/1787 1690/1129/1787 1716/1130/1787 +f 1689/1131/1787 1716/1130/1787 1690/1129/1787 +f 1737/1132/1788 1728/1133/1789 1718/1134/1789 +f 1717/1135/1789 1718/1134/1789 1728/1133/1789 +f 1717/1135/1790 1728/1133/1790 1716/1130/1790 +f 1727/1128/1790 1716/1130/1790 1728/1133/1790 +f 1736/1136/1791 1737/1132/1791 1714/1137/1791 +f 1718/1134/1792 1714/1137/1792 1737/1132/1792 +f 1715/1138/1793 1736/1136/1793 1714/1137/1793 +f 1780/1139/1794 1782/1140/1794 1785/1128/1794 +f 1700/1141/1795 1785/1128/1795 1782/1140/1795 +f 1783/1129/1796 1781/1129/1796 1785/1128/1796 +f 1780/1139/1797 1785/1128/1797 1781/1129/1797 +f 1696/1142/1798 1698/1143/1798 1719/1135/1798 +f 1774/1144/1799 1719/1135/1799 1698/1143/1799 +f 1774/1144/1800 1698/1143/1800 1782/1140/1800 +f 1700/1141/1801 1782/1140/1801 1698/1143/1801 +f 1693/1138/1802 1694/1145/1802 1734/1146/1802 +f 1721/1137/1803 1694/1145/1803 1719/1135/1803 +f 1696/1142/1804 1719/1135/1804 1694/1145/1804 +f 1734/1146/1805 1694/1145/1805 1721/1137/1805 +f 1796/1147/1806 1797/1148/1806 1798/1148/1806 +f 1799/1149/1807 1800/1150/1808 1801/1151/1809 +f 1799/1149/1807 1801/1151/1809 1802/1152/1810 +f 1803/1153/1811 1802/1152/1810 1801/1151/1809 +f 1802/1152/1810 1803/1153/1811 1804/1154/1812 +f 1805/1153/1813 1804/1154/1812 1803/1153/1811 +f 1805/1153/1813 1803/1153/1811 1806/1155/1814 +f 1803/1153/1811 1801/1151/1809 1806/1155/1814 +f 1807/1156/1815 1806/1155/1814 1801/1151/1809 +f 1801/1151/1809 1808/1157/1816 1807/1156/1815 +f 1809/1158/1817 1807/1156/1815 1808/1157/1816 +f 1808/1157/1816 1810/1159/1818 1809/1158/1817 +f 1811/1160/1819 1809/1158/1817 1810/1159/1818 +f 1811/1160/1819 1810/1159/1818 1715/1059/1820 +f 1714/1058/1821 1715/1059/1820 1810/1159/1818 +f 1714/1058/1821 1810/1159/1818 1718/1063/1728 +f 1812/1161/1822 1718/1063/1728 1810/1159/1818 +f 1718/1063/1728 1812/1161/1822 1717/1062/1726 +f 1813/1162/1823 1717/1062/1726 1812/1161/1822 +f 1810/1159/1818 1808/1157/1816 1812/1161/1822 +f 1800/1150/1808 1812/1161/1822 1808/1157/1816 +f 1808/1157/1816 1801/1151/1809 1800/1150/1808 +f 1813/1162/1823 1814/1163/1824 1717/1062/1726 +f 1814/1163/1824 1813/1162/1823 1815/1164/1825 +f 1815/1164/1825 1816/1165/1826 1814/1163/1824 +f 1815/1164/1825 1817/1166/1827 1816/1165/1826 +f 1798/1167/1828 1816/1165/1826 1817/1166/1827 +f 1817/1166/1827 1818/1168/1829 1798/1167/1828 +f 1796/1169/1830 1798/1167/1828 1818/1168/1829 +f 1819/1168/1831 1796/1169/1830 1818/1168/1829 +f 1818/1168/1829 1820/1170/1832 1819/1168/1831 +f 1821/1171/1833 1819/1168/1831 1820/1170/1832 +f 1821/1171/1833 1820/1170/1832 1804/1154/1812 +f 1802/1152/1810 1804/1154/1812 1820/1170/1832 +f 1802/1152/1810 1820/1170/1832 1799/1149/1807 +f 1822/1172/1834 1799/1149/1807 1820/1170/1832 +f 1799/1149/1807 1822/1172/1834 1800/1150/1808 +f 1823/1173/1835 1800/1150/1808 1822/1172/1834 +f 1800/1150/1808 1823/1173/1835 1812/1161/1822 +f 1813/1162/1823 1812/1161/1822 1823/1173/1835 +f 1823/1173/1835 1815/1164/1825 1813/1162/1823 +f 1815/1164/1825 1823/1173/1835 1817/1166/1827 +f 1822/1172/1834 1817/1166/1827 1823/1173/1835 +f 1817/1166/1827 1822/1172/1834 1818/1168/1829 +f 1820/1170/1832 1818/1168/1829 1822/1172/1834 +f 1824/1174/1836 1825/1175/1837 1826/1176/1838 +f 1826/1176/1838 1737/1088/1740 1824/1174/1836 +f 1826/1176/1838 1827/1177/1839 1737/1088/1740 +f 1736/1086/1840 1737/1088/1740 1827/1177/1839 +f 1736/1086/1840 1827/1177/1839 1715/1087/1841 +f 1811/1178/1842 1715/1087/1841 1827/1177/1839 +f 1811/1178/1842 1827/1177/1839 1809/1179/1843 +f 1828/1180/1844 1809/1179/1843 1827/1177/1839 +f 1809/1179/1843 1828/1180/1844 1807/1181/1845 +f 1829/1182/1846 1807/1181/1845 1828/1180/1844 +f 1828/1180/1844 1830/1183/1847 1829/1182/1846 +f 1831/1184/1848 1829/1182/1846 1830/1183/1847 +f 1831/1184/1848 1830/1183/1847 1832/1185/1849 +f 1832/1185/1849 1833/1186/1850 1831/1184/1848 +f 1833/1186/1850 1832/1185/1849 1834/1187/1851 +f 1835/1188/1852 1834/1187/1851 1832/1185/1849 +f 1835/1188/1852 1797/1189/1850 1834/1187/1851 +f 1835/1188/1852 1836/1190/1853 1797/1189/1850 +f 1797/1189/1850 1796/1191/1854 1834/1187/1851 +f 1837/1192/1855 1797/1189/1850 1836/1190/1853 +f 1836/1190/1853 1838/1193/1777 1837/1192/1855 +f 1839/1194/1746 1837/1192/1855 1838/1193/1777 +f 1838/1193/1777 1727/1073/1856 1839/1194/1746 +f 1690/1072/1857 1839/1194/1746 1727/1073/1856 +f 1727/1073/1856 1838/1193/1777 1728/1074/1743 +f 1824/1174/1836 1728/1074/1743 1838/1193/1777 +f 1838/1193/1777 1836/1190/1853 1824/1174/1836 +f 1825/1175/1837 1824/1174/1836 1836/1190/1853 +f 1836/1190/1853 1835/1188/1852 1825/1175/1837 +f 1832/1185/1849 1825/1175/1837 1835/1188/1852 +f 1825/1175/1837 1832/1185/1849 1830/1183/1847 +f 1830/1183/1847 1826/1176/1838 1825/1175/1837 +f 1830/1183/1847 1828/1180/1844 1826/1176/1838 +f 1827/1177/1839 1826/1176/1838 1828/1180/1844 +f 1728/1074/1743 1824/1174/1836 1737/1088/1740 +f 1834/1187/1858 1796/1191/1858 1819/1187/1858 +f 1834/1187/1858 1819/1187/1858 1833/1186/1859 +f 1821/1186/1860 1833/1186/1859 1819/1187/1858 +f 1821/1186/1860 1804/1195/1861 1833/1186/1859 +f 1840/1195/1862 1833/1186/1859 1804/1195/1861 +f 1840/1195/1862 1804/1195/1861 1841/1196/1863 +f 1805/1196/1864 1841/1196/1863 1804/1195/1861 +f 1841/1196/1863 1805/1196/1864 1806/1197/1865 +f 1841/1196/1863 1806/1197/1865 1829/1182/1866 +f 1807/1181/1867 1829/1182/1866 1806/1197/1865 +f 1842/1198/1868 1814/1163/1824 1816/1165/1826 +f 1814/1163/1824 1842/1198/1868 1716/1061/1824 +f 1716/1061/1824 1717/1062/1726 1814/1163/1824 +f 1689/1060/1869 1716/1061/1824 1842/1198/1868 +f 1840/1195/1870 1831/1184/1848 1833/1186/1850 +f 1831/1184/1848 1840/1195/1870 1829/1182/1846 +f 1841/1196/1871 1829/1182/1846 1840/1195/1870 +f 1843/1127/1872 1844/1125/1872 1845/1124/1872 +f 1846/1123/1872 1845/1124/1872 1844/1125/1872 +f 1847/1123/1873 1848/1125/1873 1849/1124/1873 +f 1850/1127/1873 1849/1124/1873 1848/1125/1873 +f 1851/1119/1874 1852/1119/1874 1853/1119/1874 +f 1854/1119/1874 1853/1119/1874 1852/1119/1874 +f 1855/1199/1875 1856/1200/1875 1851/1201/1875 +f 1852/1202/1875 1851/1201/1875 1856/1200/1875 +f 1857/1121/1876 1858/1121/1876 1855/1122/1876 +f 1856/1122/1876 1855/1122/1876 1858/1121/1876 +f 1853/1123/1872 1857/1124/1872 1851/1125/1872 +f 1855/1127/1872 1851/1125/1872 1857/1124/1872 +f 1854/1123/1873 1852/1125/1873 1858/1124/1873 +f 1856/1127/1873 1858/1124/1873 1852/1125/1873 +f 1859/1119/1877 1860/1119/1877 1861/1119/1877 +f 1862/1119/1877 1861/1119/1877 1860/1119/1877 +f 1863/1199/1875 1864/1200/1875 1859/1201/1875 +f 1860/1202/1875 1859/1201/1875 1864/1200/1875 +f 1865/1121/1876 1866/1121/1876 1863/1122/1876 +f 1864/1122/1876 1863/1122/1876 1866/1121/1876 +f 1861/1123/1872 1865/1124/1872 1859/1125/1872 +f 1863/1127/1872 1859/1125/1872 1865/1124/1872 +f 1862/1123/1873 1860/1125/1873 1866/1124/1873 +f 1864/1127/1873 1866/1124/1873 1860/1125/1873 +f 1837/1200/1878 1839/1203/1878 1797/1204/1878 +f 1690/1033/1879 1689/1033/1879 1839/1203/1879 +f 1842/1205/1880 1816/1200/1880 1689/1033/1880 +f 1689/1033/1881 1816/1200/1881 1839/1203/1881 +f 1839/1203/1882 1816/1200/1882 1797/1204/1882 +f 1816/1200/1883 1798/1204/1883 1797/1204/1883 +f 1718/1206/1884 1717/1143/1884 1714/1145/1884 +f 1716/1139/1885 1689/1207/1885 1717/1143/1885 +f 1717/1143/1886 1689/1207/1886 1714/1145/1886 +f 1690/1208/1887 1727/1130/1887 1689/1207/1887 +f 1689/1207/1888 1727/1130/1888 1714/1145/1888 +f 1728/1209/1889 1737/1210/1889 1727/1130/1889 +f 1727/1130/1890 1737/1210/1890 1714/1145/1890 +f 1737/1210/1891 1736/1211/1891 1714/1145/1891 +f 1714/1145/1892 1736/1211/1892 1715/1138/1892 +f 1844/1119/1874 1848/1119/1874 1846/1119/1874 +f 1847/1119/1874 1846/1119/1874 1848/1119/1874 +f 1843/1199/1875 1850/1200/1875 1844/1201/1875 +f 1848/1202/1875 1844/1201/1875 1850/1200/1875 +f 1845/1121/1893 1849/1121/1893 1843/1122/1893 +f 1850/1122/1893 1843/1122/1893 1849/1121/1893 +f 1867/1212/1894 1868/1213/1894 1869/1214/1895 +f 1868/1213/1894 1867/1212/1894 1870/1215/1896 +f 1871/1214/1896 1870/1215/1896 1867/1212/1894 +f 1870/1215/1896 1871/1214/1896 1872/1216/1897 +f 1873/1217/1898 1872/1216/1897 1871/1214/1896 +f 1872/1216/1897 1873/1217/1898 1874/1218/1899 +f 1875/1219/1900 1874/1218/1899 1873/1217/1898 +f 1874/1218/1899 1875/1219/1900 1876/1220/1901 +f 1877/1221/1902 1876/1220/1901 1875/1219/1900 +f 1876/1220/1901 1877/1221/1902 1878/1222/1903 +f 1879/1223/1904 1878/1222/1903 1877/1221/1902 +f 1878/1222/1903 1879/1223/1904 1880/1224/1905 +f 1881/1225/1905 1880/1224/1905 1879/1223/1904 +f 1880/1224/1905 1881/1225/1905 1882/1222/1906 +f 1883/1223/1906 1882/1222/1906 1881/1225/1905 +f 1882/1222/1906 1883/1223/1906 1884/1220/1907 +f 1885/1221/1908 1884/1220/1907 1883/1223/1906 +f 1884/1220/1907 1885/1221/1908 1886/1218/1909 +f 1887/1219/1910 1886/1218/1909 1885/1221/1908 +f 1886/1218/1909 1887/1219/1910 1888/1216/1911 +f 1889/1217/1912 1888/1216/1911 1887/1219/1910 +f 1888/1216/1911 1889/1217/1912 1890/1215/1913 +f 1869/1214/1895 1890/1215/1913 1889/1217/1912 +f 1890/1215/1913 1869/1214/1895 1868/1213/1894 +f 1868/1213/1914 1891/1226/1915 1890/1215/1916 +f 1892/1227/1917 1890/1215/1916 1891/1226/1915 +f 1890/1215/1916 1892/1227/1917 1888/1216/1918 +f 1893/1228/1919 1888/1216/1918 1892/1227/1917 +f 1888/1216/1918 1893/1228/1919 1886/1218/1920 +f 1894/1229/1921 1886/1218/1920 1893/1228/1919 +f 1886/1218/1920 1894/1229/1921 1884/1220/1922 +f 1895/1230/1923 1884/1220/1922 1894/1229/1921 +f 1884/1220/1922 1895/1230/1923 1882/1222/1924 +f 1896/1231/1925 1882/1222/1924 1895/1230/1923 +f 1882/1222/1924 1896/1231/1925 1880/1224/1926 +f 1897/1231/1927 1880/1224/1926 1896/1231/1925 +f 1880/1224/1926 1897/1231/1927 1878/1222/1928 +f 1898/1231/1929 1878/1222/1928 1897/1231/1927 +f 1878/1222/1928 1898/1231/1929 1876/1220/1930 +f 1899/1230/1931 1876/1220/1930 1898/1231/1929 +f 1876/1220/1930 1899/1230/1931 1874/1218/1932 +f 1900/1229/1933 1874/1218/1932 1899/1230/1931 +f 1891/1226/1915 1901/1232/1934 1892/1227/1917 +f 1902/1232/1935 1892/1227/1917 1901/1232/1934 +f 1892/1227/1917 1902/1232/1935 1893/1228/1919 +f 1874/1218/1932 1900/1229/1933 1872/1216/1936 +f 1903/1228/1937 1872/1216/1936 1900/1229/1933 +f 1872/1216/1936 1903/1228/1937 1870/1215/1938 +f 1904/1227/1939 1870/1215/1938 1903/1228/1937 +f 1870/1215/1938 1904/1227/1939 1868/1213/1914 +f 1891/1226/1915 1868/1213/1914 1904/1227/1939 +f 1904/1227/1939 1905/1232/1940 1891/1226/1915 +f 1901/1232/1934 1891/1226/1915 1905/1232/1940 +f 1901/1232/1934 1905/1232/1940 1906/1233/1941 +f 1902/1232/1935 1901/1232/1934 1906/1233/1941 +f 1907/1233/1942 1902/1232/1935 1906/1233/1941 +f 1907/1233/1942 1893/1228/1919 1902/1232/1935 +f 1893/1228/1919 1907/1233/1942 1894/1229/1921 +f 1908/1233/1943 1894/1229/1921 1907/1233/1942 +f 1894/1229/1921 1908/1233/1943 1895/1230/1923 +f 1909/1234/1944 1895/1230/1923 1908/1233/1943 +f 1895/1230/1923 1909/1234/1944 1896/1231/1925 +f 1910/1234/1945 1896/1231/1925 1909/1234/1944 +f 1896/1231/1925 1910/1234/1945 1897/1231/1927 +f 1911/1234/1946 1897/1231/1927 1910/1234/1945 +f 1897/1231/1927 1911/1234/1946 1898/1231/1929 +f 1912/1234/1947 1898/1231/1929 1911/1234/1946 +f 1898/1231/1929 1912/1234/1947 1899/1230/1931 +f 1913/1234/1948 1899/1230/1931 1912/1234/1947 +f 1899/1230/1931 1913/1234/1948 1900/1229/1933 +f 1914/1233/1949 1900/1229/1933 1913/1234/1948 +f 1900/1229/1933 1914/1233/1949 1903/1228/1937 +f 1915/1233/1950 1903/1228/1937 1914/1233/1949 +f 1903/1228/1937 1915/1233/1950 1904/1227/1939 +f 1905/1232/1940 1904/1227/1939 1915/1233/1950 +f 1905/1232/1940 1915/1233/1950 1906/1233/1941 +f 1915/1233/1950 1914/1233/1949 1906/1233/1941 +f 1914/1233/1949 1913/1234/1948 1906/1233/1941 +f 1913/1234/1948 1912/1234/1947 1906/1233/1941 +f 1912/1234/1947 1911/1234/1946 1906/1233/1941 +f 1911/1234/1946 1910/1234/1945 1906/1233/1941 +f 1910/1234/1945 1909/1234/1944 1906/1233/1941 +f 1909/1234/1944 1908/1233/1943 1906/1233/1941 +f 1908/1233/1943 1907/1233/1942 1906/1233/1941 +f 1885/1221/1951 1916/1235/1952 1887/1219/1953 +f 1917/1236/1954 1887/1219/1953 1916/1235/1952 +f 1887/1219/1953 1917/1236/1954 1889/1217/1955 +f 1918/1237/1956 1889/1217/1955 1917/1236/1954 +f 1889/1217/1955 1918/1237/1956 1869/1214/1957 +f 1919/1238/1958 1869/1214/1957 1918/1237/1956 +f 1869/1214/1957 1919/1238/1958 1867/1212/1959 +f 1920/1239/1960 1867/1212/1959 1919/1238/1958 +f 1867/1212/1959 1920/1239/1960 1871/1214/1961 +f 1921/1238/1962 1871/1214/1961 1920/1239/1960 +f 1871/1214/1961 1921/1238/1962 1873/1217/1963 +f 1922/1237/1964 1873/1217/1963 1921/1238/1962 +f 1873/1217/1963 1922/1237/1964 1875/1219/1965 +f 1923/1236/1966 1875/1219/1965 1922/1237/1964 +f 1875/1219/1965 1923/1236/1966 1877/1221/1967 +f 1924/1235/1968 1877/1221/1967 1923/1236/1966 +f 1877/1221/1967 1924/1235/1968 1879/1223/1969 +f 1925/1240/1970 1879/1223/1969 1924/1235/1968 +f 1917/1236/1954 1926/1241/1971 1918/1237/1956 +f 1918/1237/1956 1927/1242/1972 1919/1238/1958 +f 1927/1242/1972 1918/1237/1956 1926/1241/1971 +f 1926/1241/1971 1928/1243/1973 1927/1242/1972 +f 1928/1243/1973 1926/1241/1971 1929/1244/1974 +f 1930/1245/1975 1929/1244/1974 1926/1241/1971 +f 1926/1241/1971 1917/1236/1954 1930/1245/1975 +f 1916/1235/1952 1930/1245/1975 1917/1236/1954 +f 1879/1223/1969 1925/1240/1970 1881/1225/1976 +f 1931/1246/1977 1881/1225/1976 1925/1240/1970 +f 1881/1225/1976 1931/1246/1977 1883/1223/1978 +f 1932/1240/1979 1883/1223/1978 1931/1246/1977 +f 1883/1223/1978 1932/1240/1979 1885/1221/1951 +f 1916/1235/1952 1885/1221/1951 1932/1240/1979 +f 1932/1240/1979 1933/1247/1980 1916/1235/1952 +f 1930/1245/1975 1916/1235/1952 1933/1247/1980 +f 1933/1247/1980 1934/1244/1981 1930/1245/1975 +f 1929/1244/1974 1930/1245/1975 1934/1244/1981 +f 1934/1244/1981 1935/1248/1982 1929/1244/1974 +f 1929/1244/1974 1935/1248/1982 1928/1243/1973 +f 1928/1243/1973 1935/1248/1982 1936/1249/1983 +f 1936/1249/1983 1927/1242/1972 1928/1243/1973 +f 1927/1242/1972 1936/1249/1983 1937/1250/1984 +f 1937/1250/1984 1919/1238/1958 1927/1242/1972 +f 1919/1238/1958 1937/1250/1984 1920/1239/1960 +f 1938/1251/1985 1920/1239/1960 1937/1250/1984 +f 1920/1239/1960 1938/1251/1985 1921/1238/1962 +f 1939/1250/1986 1921/1238/1962 1938/1251/1985 +f 1921/1238/1962 1939/1250/1986 1922/1237/1964 +f 1940/1242/1987 1922/1237/1964 1939/1250/1986 +f 1922/1237/1964 1940/1242/1987 1923/1236/1966 +f 1941/1241/1988 1923/1236/1966 1940/1242/1987 +f 1923/1236/1966 1941/1241/1988 1924/1235/1968 +f 1942/1245/1989 1924/1235/1968 1941/1241/1988 +f 1924/1235/1968 1942/1245/1989 1925/1240/1970 +f 1943/1247/1990 1925/1240/1970 1942/1245/1989 +f 1925/1240/1970 1943/1247/1990 1931/1246/1977 +f 1944/1247/1991 1931/1246/1977 1943/1247/1990 +f 1931/1246/1977 1944/1247/1991 1932/1240/1979 +f 1933/1247/1980 1932/1240/1979 1944/1247/1991 +f 1944/1247/1991 1945/1252/1992 1933/1247/1980 +f 1934/1244/1981 1933/1247/1980 1945/1252/1992 +f 1945/1252/1992 1935/1248/1982 1934/1244/1981 +f 1946/1244/1993 1935/1248/1982 1945/1252/1992 +f 1945/1252/1992 1944/1247/1991 1946/1244/1993 +f 1943/1247/1990 1946/1244/1993 1944/1247/1991 +f 1947/1244/1994 1935/1248/1982 1946/1244/1993 +f 1946/1244/1993 1943/1247/1990 1947/1244/1994 +f 1942/1245/1989 1947/1244/1994 1943/1247/1990 +f 1947/1244/1994 1942/1245/1989 1948/1243/1995 +f 1941/1241/1988 1948/1243/1995 1942/1245/1989 +f 1948/1243/1995 1941/1241/1988 1949/1249/1996 +f 1940/1242/1987 1949/1249/1996 1941/1241/1988 +f 1949/1249/1996 1940/1242/1987 1950/1253/1997 +f 1939/1250/1986 1950/1253/1997 1940/1242/1987 +f 1950/1253/1997 1939/1250/1986 1951/1253/1998 +f 1938/1251/1985 1951/1253/1998 1939/1250/1986 +f 1951/1253/1998 1938/1251/1985 1952/1253/1999 +f 1937/1250/1984 1952/1253/1999 1938/1251/1985 +f 1952/1253/1999 1937/1250/1984 1936/1249/1983 +f 1936/1249/1983 1935/1248/1982 1952/1253/1999 +f 1952/1253/1999 1935/1248/1982 1951/1253/1998 +f 1951/1253/1998 1935/1248/1982 1950/1253/1997 +f 1950/1253/1997 1935/1248/1982 1949/1249/1996 +f 1949/1249/1996 1935/1248/1982 1948/1243/1995 +f 1948/1243/1995 1935/1248/1982 1947/1244/1994 +f 1689/1106/2000 1953/1107/2000 1690/1254/2000 +f 1796/1169/1719 1953/1255/2001 1798/1256/1719 +f 1689/1060/2002 1798/1256/1719 1953/1255/2001 +f 1953/1257/1856 1796/1191/2003 1690/1072/1856 +f 1797/1189/2004 1690/1072/1856 1796/1191/2003 +f 1798/1258/2005 1797/1258/2005 1796/1254/2005 +f 1690/1204/2006 1797/1259/2006 1689/1260/2006 +f 1798/1259/2007 1689/1260/2007 1797/1259/2007 +# 500 faces + +# +# object P_51_Mustang_Left_Landing_Wheel +# + +v 19.25 -7.41 18.44 +v 19.26 -7.41 18.30 +v 20.79 -7.36 18.42 +v 20.79 -7.36 18.28 +v 20.30 -0.82 17.29 +v 19.89 -9.61 17.84 +v 20.06 -0.82 17.28 +v 20.05 -9.61 18.01 +v 20.47 -0.82 17.47 +v 20.04 -9.61 18.26 +v 20.45 -0.82 17.71 +v 19.86 -9.61 18.43 +v 20.27 -0.82 17.88 +v 19.61 -9.61 18.42 +v 20.03 -0.82 17.87 +v 19.45 -9.60 18.24 +v 19.87 -0.82 17.69 +v 19.46 -9.61 18.00 +v 19.88 -0.82 17.45 +v 19.64 -9.61 17.83 +v 18.91 -13.24 18.10 +v 18.69 -13.22 18.10 +v 19.03 -10.60 17.93 +v 18.70 -10.57 17.94 +v 19.21 -9.83 17.89 +v 19.03 -9.31 17.85 +v 19.56 -9.60 17.87 +v 19.59 -9.04 17.83 +v 19.58 -9.04 18.33 +v 19.02 -9.31 18.35 +v 19.56 -9.59 18.36 +v 19.20 -9.83 18.38 +v 18.70 -10.57 18.43 +v 19.03 -10.60 18.43 +v 18.59 -13.22 18.60 +v 18.90 -13.24 18.60 +v 23.32 -9.94 15.18 +v 21.57 -3.85 17.12 +v 23.08 -10.00 18.57 +v 20.86 -1.44 18.08 +v 20.94 -1.41 16.97 +v 20.73 -1.48 16.97 +v 21.36 -3.92 17.12 +v 20.65 -1.50 18.08 +v 22.86 -10.07 18.58 +v 23.11 -10.00 15.18 +v 20.80 -7.18 18.41 +v 20.80 -7.18 18.27 +v 19.27 -7.10 18.42 +v 19.27 -7.10 18.28 +v 20.80 -7.36 17.54 +v 19.27 -7.42 17.55 +v 20.81 -7.18 17.52 +v 19.28 -7.10 17.53 +v 19.28 -7.10 17.68 +v 19.26 -7.41 17.70 +v 20.81 -7.18 17.67 +v 20.80 -7.36 17.68 +v 18.93 -10.59 17.88 +v 18.90 -10.98 16.68 +v 18.93 -10.87 19.15 +v 18.91 -11.75 20.15 +v 18.87 -12.99 20.61 +v 18.74 -15.33 17.13 +v 18.80 -13.21 15.67 +v 18.76 -14.45 16.14 +v 18.85 -11.94 15.88 +v 19.50 -14.55 15.96 +v 19.55 -13.22 15.47 +v 19.60 -11.86 15.68 +v 19.65 -10.83 16.55 +v 19.68 -10.41 17.84 +v 19.68 -10.71 19.20 +v 19.66 -11.65 20.27 +v 19.62 -12.98 20.77 +v 18.82 -14.26 20.41 +v 19.57 -14.34 20.55 +v 18.78 -15.22 19.60 +v 19.52 -15.37 19.68 +v 20.42 -10.87 19.10 +v 20.40 -11.74 20.10 +v 20.36 -12.98 20.56 +v 20.31 -14.25 20.36 +v 20.27 -15.21 19.55 +v 19.49 -15.79 18.40 +v 20.24 -15.60 18.35 +v 19.48 -15.49 17.04 +v 20.23 -15.32 17.08 +v 18.75 -15.61 18.40 +v 20.25 -14.44 16.08 +v 20.29 -13.21 15.62 +v 20.34 -11.94 15.82 +v 20.39 -10.98 16.63 +v 20.42 -10.59 17.83 +# 94 vertices + +vn 0.04 -1.00 0.00 +vn 0.41 -0.08 -0.91 +vn -0.34 -0.04 -0.94 +vn 0.94 -0.07 -0.33 +vn 0.93 -0.07 -0.35 +vn 0.90 -0.02 0.44 +vn 0.91 -0.02 0.40 +vn 0.34 0.04 0.94 +vn 0.37 0.04 0.93 +vn -0.41 0.08 0.91 +vn -0.93 0.07 0.35 +vn -0.94 0.07 0.33 +vn -0.91 0.02 -0.40 +vn -0.90 0.02 -0.44 +vn -0.37 -0.04 -0.93 +vn -0.01 -0.06 -1.00 +vn 0.01 0.06 1.00 +vn -0.01 -1.00 0.00 +vn 0.01 1.00 -0.00 +vn 0.96 0.25 0.07 +vn -0.96 -0.25 -0.07 +vn 1.00 -0.05 0.01 +vn 0.05 1.00 -0.00 +vn -1.00 0.05 -0.01 +vn -0.43 0.90 -0.01 +vn -0.97 0.25 -0.01 +vn -1.00 0.04 -0.01 +vn -1.00 0.03 -0.04 +vn -0.98 -0.00 -0.18 +vn -0.98 -0.01 -0.20 +vn -0.06 -1.00 -0.01 +vn -0.08 -1.00 -0.00 +vn -0.07 -1.00 -0.01 +vn -0.09 -1.00 0.00 +vn 0.98 -0.22 0.01 +vn 0.55 -0.83 0.01 +vn -0.29 0.96 -0.00 +vn -0.01 0.05 1.00 +vn 0.29 -0.96 0.00 +vn -0.09 0.28 -0.96 +vn 0.02 -0.06 -1.00 +vn -1.00 0.04 0.01 +vn -0.26 -0.55 -0.79 +vn -0.27 -0.10 -0.96 +vn -0.03 -0.57 -0.82 +vn -0.03 -0.10 -0.99 +vn -0.27 0.40 -0.87 +vn -0.03 0.42 -0.91 +vn -0.26 0.80 -0.53 +vn -0.02 0.83 -0.56 +vn -0.24 0.97 -0.04 +vn -0.00 1.00 -0.05 +vn -0.22 0.87 0.45 +vn 0.01 0.89 0.45 +vn -0.20 0.55 0.81 +vn 0.03 0.57 0.82 +vn -0.20 0.10 0.97 +vn 0.03 0.10 0.99 +vn -0.21 -0.40 0.89 +vn 0.03 -0.42 0.91 +vn -0.22 -0.81 0.55 +vn 0.02 -0.83 0.56 +vn 0.25 0.87 0.44 +vn 0.26 0.55 0.79 +vn 0.27 0.10 0.96 +vn 0.27 -0.40 0.87 +vn 0.26 -0.80 0.53 +vn 0.00 -1.00 0.05 +vn 0.24 -0.97 0.04 +vn -0.01 -0.89 -0.45 +vn 0.22 -0.87 -0.45 +vn -0.24 -0.97 0.05 +vn -0.25 -0.87 -0.44 +vn 0.20 -0.55 -0.81 +vn 0.20 -0.10 -0.97 +vn 0.21 0.40 -0.89 +vn 0.22 0.81 -0.55 +vn 0.24 0.97 -0.05 +vn 1.00 -0.04 -0.01 +# 79 vertex normals + +vt 0.07 0.76 0.00 +vt 0.09 0.92 0.00 +vt 0.30 0.92 0.00 +vt 0.30 0.93 0.00 +vt 0.09 0.93 0.00 +vt 0.30 0.94 0.00 +vt 0.09 0.94 0.00 +vt 0.44 0.70 0.00 +vt 0.44 0.73 0.00 +vt 0.44 0.74 0.00 +vt 0.43 0.74 0.00 +vt 0.43 0.75 0.00 +vt 0.31 0.99 0.00 +vt 0.31 0.98 0.00 +vt 0.32 1.00 0.00 +vt 0.33 0.99 0.00 +vt 0.33 0.98 0.00 +vt 0.33 1.00 0.00 +vt 0.32 0.98 0.00 +vt 0.66 0.03 0.00 +vt 0.53 0.08 0.00 +vt 0.67 0.11 0.00 +vt 0.47 0.11 0.00 +vt 0.47 0.08 0.00 +vt 0.61 0.03 0.00 +vt 0.66 0.00 0.00 +vt 0.47 0.00 0.00 +vt 0.08 0.75 0.00 +vt 0.09 0.75 0.00 +vt 0.07 0.75 0.00 +vt 0.03 0.85 0.00 +vt 0.04 0.85 0.00 +vt 0.03 0.84 0.00 +vt 0.04 0.84 0.00 +vt 0.08 0.76 0.00 +vt 0.09 0.74 0.00 +vt 0.42 0.74 0.00 +vt 0.42 0.73 0.00 +vt 0.43 0.73 0.00 +vt 0.42 0.72 0.00 +vt 0.43 0.72 0.00 +vt 0.46 0.73 0.00 +vt 0.46 0.72 0.00 +vt 0.45 0.73 0.00 +vt 0.05 0.68 0.00 +vt 0.03 0.68 0.00 +vt 0.03 0.67 0.00 +vt 0.16 0.67 0.00 +vt 0.08 0.68 0.00 +vt 0.08 0.67 0.00 +vt 0.16 0.66 0.00 +vt 0.07 0.66 0.00 +vt 0.07 0.67 0.00 +vt 0.03 0.66 0.00 +vt 0.82 0.92 0.00 +vt 0.80 0.92 0.00 +vt 0.84 0.93 0.00 +vt 0.85 0.94 0.00 +vt 0.85 0.96 0.00 +vt 0.78 0.98 0.00 +vt 0.77 0.94 0.00 +vt 0.77 0.96 0.00 +vt 0.78 0.93 0.00 +vt 0.31 0.77 0.00 +vt 0.29 0.77 0.00 +vt 0.31 0.76 0.00 +vt 0.29 0.76 0.00 +vt 0.32 0.77 0.00 +vt 0.33 0.76 0.00 +vt 0.34 0.77 0.00 +vt 0.34 0.76 0.00 +vt 0.36 0.77 0.00 +vt 0.36 0.76 0.00 +vt 0.38 0.77 0.00 +vt 0.38 0.76 0.00 +vt 0.39 0.77 0.00 +vt 0.39 0.76 0.00 +vt 0.36 0.75 0.00 +vt 0.38 0.75 0.00 +vt 0.39 0.75 0.00 +vt 0.34 0.75 0.00 +vt 0.32 0.75 0.00 +vt 0.31 0.75 0.00 +vt 0.29 0.75 0.00 +vt 0.84 0.98 0.00 +vt 0.82 0.99 0.00 +vt 0.80 0.99 0.00 +# 87 texture coords + +g P_51_Mustang_Left_Landing_Wheel +f 1954/1261/2008 1955/1261/2008 1956/1261/2008 +f 1957/1261/2008 1956/1261/2008 1955/1261/2008 +f 1958/1262/2009 1959/1263/2009 1960/1262/2010 +f 1959/1263/2009 1958/1262/2009 1961/1264/2011 +f 1962/1265/2012 1961/1264/2011 1958/1262/2009 +f 1961/1264/2011 1962/1265/2012 1963/1266/2013 +f 1964/1267/2014 1963/1266/2013 1962/1265/2012 +f 1963/1266/2013 1964/1267/2014 1965/1266/2015 +f 1966/1267/2016 1965/1266/2015 1964/1267/2014 +f 1965/1266/2015 1966/1267/2016 1967/1266/2017 +f 1968/1267/2017 1967/1266/2017 1966/1267/2016 +f 1967/1266/2017 1968/1267/2017 1969/1266/2018 +f 1970/1267/2019 1969/1266/2018 1968/1267/2017 +f 1969/1266/2018 1970/1267/2019 1971/1264/2020 +f 1972/1265/2021 1971/1264/2020 1970/1267/2019 +f 1971/1264/2020 1972/1265/2021 1973/1263/2022 +f 1960/1262/2010 1973/1263/2022 1972/1265/2021 +f 1973/1263/2022 1960/1262/2010 1959/1263/2009 +f 1974/1268/2023 1975/1268/2023 1976/1269/2023 +f 1975/1268/2023 1977/1269/2023 1976/1269/2023 +f 1976/1269/2023 1977/1269/2023 1978/1270/2023 +f 1977/1269/2023 1979/1270/2023 1978/1270/2023 +f 1978/1270/2023 1979/1270/2023 1980/1271/2023 +f 1979/1270/2023 1981/1272/2023 1980/1271/2023 +f 1982/1272/2024 1983/1270/2024 1984/1271/2024 +f 1983/1270/2024 1985/1270/2024 1984/1271/2024 +f 1986/1269/2024 1985/1270/2024 1983/1270/2024 +f 1987/1269/2024 1985/1270/2024 1986/1269/2024 +f 1988/1268/2024 1987/1269/2024 1986/1269/2024 +f 1989/1268/2024 1987/1269/2024 1988/1268/2024 +f 1967/1273/2025 1969/1274/2025 1965/1275/2025 +f 1969/1274/2025 1961/1276/2025 1965/1275/2025 +f 1973/1277/2025 1961/1276/2025 1969/1274/2025 +f 1959/1277/2025 1961/1276/2025 1973/1277/2025 +f 1965/1275/2025 1961/1276/2025 1963/1278/2025 +f 1958/1279/2026 1960/1277/2026 1962/1274/2026 +f 1960/1277/2026 1966/1275/2026 1962/1274/2026 +f 1970/1276/2026 1966/1275/2026 1960/1277/2026 +f 1968/1278/2026 1966/1275/2026 1970/1276/2026 +f 1972/1277/2026 1970/1276/2026 1960/1277/2026 +f 1990/1280/2027 1991/1281/2027 1992/1282/2027 +f 1992/1282/2027 1991/1281/2027 1993/1283/2027 +f 1991/1281/2027 1994/1284/2027 1993/1283/2027 +f 1995/1280/2028 1996/1285/2028 1997/1286/2028 +f 1996/1285/2028 1998/1287/2028 1997/1286/2028 +f 1999/1284/2028 1998/1287/2028 1996/1285/2028 +f 1956/1288/2029 1957/1288/2029 2000/1288/2029 +f 2001/1288/2029 2000/1288/2029 1957/1288/2029 +f 2000/1288/2030 2001/1288/2030 2002/1289/2030 +f 2003/1289/2030 2002/1289/2030 2001/1288/2030 +f 2002/1290/2031 2003/1290/2031 1954/1290/2031 +f 1955/1290/2031 1954/1290/2031 2003/1290/2031 +f 2004/1291/2023 2005/1292/2023 2006/1293/2023 +f 2007/1294/2023 2006/1293/2023 2005/1292/2023 +f 2008/1293/2024 2009/1291/2024 2010/1294/2024 +f 2011/1292/2024 2010/1294/2024 2009/1291/2024 +f 2009/1290/2008 2005/1261/2008 2011/1288/2008 +f 2004/1295/2008 2011/1288/2008 2005/1261/2008 +f 2011/1289/2029 2004/1289/2029 2010/1289/2029 +f 2006/1289/2029 2010/1289/2029 2004/1289/2029 +f 2010/1288/2030 2006/1288/2030 2008/1288/2030 +f 2007/1288/2030 2008/1288/2030 2006/1288/2030 +f 2008/1296/2031 2007/1296/2031 2009/1296/2031 +f 2005/1296/2031 2009/1296/2031 2007/1296/2031 +f 1982/1297/2032 1981/1298/2032 1983/1271/2032 +f 1979/1299/2032 1983/1271/2032 1981/1298/2032 +f 1983/1298/2033 1979/1300/2033 1986/1299/2033 +f 1977/1301/2033 1986/1299/2033 1979/1300/2033 +f 1986/1299/2034 1977/1301/2035 1988/1302/2036 +f 1975/1303/2037 1988/1302/2036 1977/1301/2035 +f 1988/1299/2038 1975/1299/2039 1989/1271/2040 +f 1974/1271/2041 1989/1271/2040 1975/1299/2039 +f 1989/1298/2029 1974/1298/2029 1987/1304/2029 +f 1976/1304/2029 1987/1304/2029 1974/1298/2029 +f 1987/1304/2042 1976/1304/2042 1985/1302/2042 +f 1978/1302/2042 1985/1302/2042 1976/1304/2042 +f 1985/1297/2043 1978/1271/2043 1984/1297/2043 +f 1980/1271/2043 1984/1297/2043 1978/1271/2043 +f 1994/1305/2044 1995/1305/2044 1993/1306/2044 +f 1997/1306/2044 1993/1306/2044 1995/1305/2044 +f 1998/1307/2045 1992/1307/2045 1997/1308/2045 +f 1993/1308/2045 1997/1308/2045 1992/1307/2045 +f 1999/1306/2046 1990/1307/2046 1998/1309/2046 +f 1992/1310/2046 1998/1309/2046 1990/1307/2046 +f 1990/1311/2047 1999/1308/2047 1991/1312/2047 +f 1996/1313/2047 1991/1312/2047 1999/1308/2047 +f 1995/1307/2048 1994/1314/2048 1996/1313/2048 +f 1991/1312/2048 1996/1313/2048 1994/1314/2048 +f 1962/1274/2026 1966/1275/2026 1964/1273/2026 +f 1957/1291/2023 1955/1292/2023 2001/1293/2023 +f 2003/1294/2023 2001/1293/2023 1955/1292/2023 +f 2002/1293/2024 1954/1291/2024 2000/1294/2024 +f 1956/1292/2024 2000/1294/2024 1954/1291/2024 +f 1971/1279/2025 1973/1277/2025 1969/1274/2025 +f 2012/1315/2049 2013/1316/2049 2014/1317/2049 +f 2015/1318/2049 2014/1317/2049 2016/1319/2049 +f 2014/1317/2049 2013/1316/2049 2016/1319/2049 +f 2013/1316/2049 2017/1320/2049 2016/1319/2049 +f 2018/1321/2049 2017/1320/2049 2013/1316/2049 +f 2019/1322/2049 2017/1320/2049 2018/1321/2049 +f 2020/1323/2049 2018/1321/2049 2013/1316/2049 +f 2019/1324/2050 2018/1325/2051 2021/1326/2052 +f 2022/1327/2053 2021/1326/2052 2018/1325/2051 +f 2018/1325/2051 2020/1324/2054 2022/1327/2053 +f 2023/1326/2055 2022/1327/2053 2020/1324/2054 +f 2020/1324/2054 2013/1328/2056 2023/1326/2055 +f 2024/1329/2057 2023/1326/2055 2013/1328/2056 +f 2013/1328/2056 2012/1330/2058 2024/1329/2057 +f 2025/1331/2059 2024/1329/2057 2012/1330/2058 +f 2012/1330/2058 2014/1332/2060 2025/1331/2059 +f 2026/1333/2061 2025/1331/2059 2014/1332/2060 +f 2014/1332/2060 2015/1334/2062 2026/1333/2061 +f 2027/1335/2063 2026/1333/2061 2015/1334/2062 +f 2015/1334/2062 2016/1336/2064 2027/1335/2063 +f 2028/1337/2065 2027/1335/2063 2016/1336/2064 +f 2016/1336/2064 2029/1334/2066 2028/1337/2065 +f 2030/1335/2067 2028/1337/2065 2029/1334/2066 +f 2029/1334/2066 2031/1332/2068 2030/1335/2067 +f 2032/1333/2069 2030/1335/2067 2031/1332/2068 +f 2026/1333/2061 2027/1335/2063 2033/1338/2070 +f 2034/1339/2071 2033/1338/2070 2027/1335/2063 +f 2027/1335/2063 2028/1337/2065 2034/1339/2071 +f 2035/1340/2072 2034/1339/2071 2028/1337/2065 +f 2028/1337/2065 2030/1335/2067 2035/1340/2072 +f 2036/1339/2073 2035/1340/2072 2030/1335/2067 +f 2030/1335/2067 2032/1333/2069 2036/1339/2073 +f 2037/1338/2074 2036/1339/2073 2032/1333/2069 +f 2032/1333/2069 2038/1331/2075 2037/1338/2074 +f 2039/1341/2076 2037/1338/2074 2038/1331/2075 +f 2038/1331/2075 2040/1329/2077 2039/1341/2076 +f 2041/1342/2078 2039/1341/2076 2040/1329/2077 +f 2031/1332/2068 2042/1330/2079 2032/1333/2069 +f 2038/1331/2075 2032/1333/2069 2042/1330/2079 +f 2042/1330/2079 2017/1328/2080 2038/1331/2075 +f 2040/1329/2077 2038/1331/2075 2017/1328/2080 +f 2017/1328/2080 2019/1324/2050 2040/1329/2077 +f 2021/1326/2052 2040/1329/2077 2019/1324/2050 +f 2040/1329/2077 2021/1326/2052 2041/1342/2078 +f 2043/1343/2081 2041/1342/2078 2021/1326/2052 +f 2021/1326/2052 2022/1327/2053 2043/1343/2081 +f 2044/1344/2082 2043/1343/2081 2022/1327/2053 +f 2022/1327/2053 2023/1326/2055 2044/1344/2082 +f 2045/1343/2083 2044/1344/2082 2023/1326/2055 +f 2023/1326/2055 2024/1329/2057 2045/1343/2083 +f 2046/1342/2084 2045/1343/2083 2024/1329/2057 +f 2024/1329/2057 2025/1331/2059 2046/1342/2084 +f 2047/1341/2085 2046/1342/2084 2025/1331/2059 +f 2025/1331/2059 2026/1333/2061 2047/1341/2085 +f 2033/1338/2070 2047/1341/2085 2026/1333/2061 +f 2044/1319/2086 2045/1318/2086 2043/1345/2086 +f 2045/1318/2086 2047/1315/2086 2043/1345/2086 +f 2043/1345/2086 2047/1315/2086 2036/1322/2086 +f 2047/1315/2086 2034/1323/2086 2036/1322/2086 +f 2036/1322/2086 2034/1323/2086 2035/1321/2086 +f 2033/1316/2086 2034/1323/2086 2047/1315/2086 +f 2046/1317/2086 2047/1315/2086 2045/1318/2086 +f 2041/1346/2086 2043/1345/2086 2039/1347/2086 +f 2039/1347/2086 2043/1345/2086 2036/1322/2086 +f 2037/1320/2086 2039/1347/2086 2036/1322/2086 +f 2042/1347/2049 2031/1346/2049 2017/1320/2049 +f 2017/1320/2049 2031/1346/2049 2016/1319/2049 +f 2016/1319/2049 2031/1346/2049 2029/1345/2049 +# 162 faces + +# +# object P_51_Mustang_Left_Rockets +# + +v 28.30 -4.77 8.29 +v 28.33 -4.86 5.62 +v 28.36 -4.84 8.30 +v 28.39 -4.93 5.63 +v 30.30 -3.78 17.72 +v 30.11 -3.64 18.78 +v 29.93 -4.14 17.76 +v 29.98 -4.36 6.27 +v 29.58 -4.47 6.28 +v 29.44 -4.27 17.78 +v 29.18 -4.36 6.28 +v 28.96 -4.13 17.77 +v 28.90 -4.06 6.25 +v 28.63 -3.77 17.74 +v 28.82 -3.65 6.22 +v 28.52 -3.28 17.70 +v 28.94 -3.25 6.18 +v 28.67 -2.78 17.65 +v 29.25 -2.95 6.15 +v 29.04 -2.43 17.61 +v 29.65 -2.85 6.14 +v 29.53 -2.30 17.60 +v 30.05 -2.96 6.14 +v 30.01 -2.44 17.60 +v 28.80 -3.63 18.79 +v 29.07 -3.91 18.82 +v 29.44 -4.02 18.82 +v 29.82 -3.92 18.81 +v 29.46 -3.20 20.36 +v 30.23 -3.25 18.75 +v 30.46 -3.29 17.68 +v 30.29 -4.07 6.24 +v 30.41 -3.66 6.20 +v 29.13 -2.58 18.69 +v 28.84 -2.86 18.72 +v 28.72 -3.24 18.76 +v 29.51 -2.48 18.68 +v 30.32 -3.26 6.17 +v 30.35 -2.80 17.63 +v 30.15 -2.87 18.71 +v 29.89 -2.58 18.69 +v 29.57 -3.63 6.19 +v 29.64 -3.70 6.20 +v 30.92 -2.50 5.38 +v 30.85 -2.43 5.38 +v 29.61 -3.61 8.86 +v 29.55 -3.54 8.86 +v 30.89 -2.41 8.05 +v 30.82 -2.34 8.04 +v 30.77 -4.79 8.27 +v 29.63 -3.54 8.86 +v 30.70 -4.86 8.27 +v 29.56 -3.61 8.86 +v 28.48 -2.33 8.06 +v 28.41 -2.40 8.07 +v 30.73 -4.94 5.61 +v 29.59 -3.70 6.20 +v 28.44 -2.48 5.41 +v 28.51 -2.41 5.40 +v 29.66 -3.63 6.19 +v 30.80 -4.88 5.60 +v 30.94 -4.79 8.27 +v 30.97 -4.88 5.60 +v 31.00 -4.86 8.27 +v 31.03 -4.95 5.60 +v 32.94 -3.80 17.70 +v 32.75 -3.66 18.76 +v 32.57 -4.16 17.74 +v 32.62 -4.38 6.25 +v 32.21 -4.49 6.26 +v 32.08 -4.29 17.75 +v 31.82 -4.38 6.25 +v 31.60 -4.15 17.74 +v 31.54 -4.08 6.23 +v 31.26 -3.79 17.71 +v 31.45 -3.67 6.19 +v 31.16 -3.30 17.67 +v 31.58 -3.27 6.15 +v 31.31 -2.81 17.62 +v 31.89 -2.97 6.12 +v 31.68 -2.45 17.59 +v 32.29 -2.87 6.11 +v 32.17 -2.32 17.57 +v 32.68 -2.98 6.12 +v 32.65 -2.46 17.58 +v 31.44 -3.65 18.77 +v 31.70 -3.93 18.79 +v 32.08 -4.04 18.80 +v 32.46 -3.94 18.79 +v 32.09 -3.22 20.34 +v 32.87 -3.27 18.72 +v 33.09 -3.31 17.65 +v 32.92 -4.09 6.22 +v 33.05 -3.68 6.18 +v 31.77 -2.60 18.67 +v 31.48 -2.88 18.70 +v 31.36 -3.26 18.73 +v 32.15 -2.50 18.66 +v 32.96 -3.28 6.14 +v 32.99 -2.82 17.61 +v 32.79 -2.89 18.69 +v 32.52 -2.61 18.66 +v 32.21 -3.65 6.17 +v 32.28 -3.72 6.17 +v 33.55 -2.52 5.36 +v 33.49 -2.45 5.35 +v 32.25 -3.63 8.84 +v 32.18 -3.56 8.83 +v 33.52 -2.43 8.02 +v 33.46 -2.36 8.02 +v 33.41 -4.81 8.24 +v 32.27 -3.56 8.83 +v 33.34 -4.88 8.25 +v 32.19 -3.63 8.84 +v 31.12 -2.35 8.04 +v 31.05 -2.42 8.05 +v 33.37 -4.96 5.58 +v 32.22 -3.72 6.17 +v 31.08 -2.50 5.38 +v 31.15 -2.43 5.37 +v 32.29 -3.65 6.16 +v 33.44 -4.90 5.58 +v 33.69 -4.81 8.24 +v 33.72 -4.90 5.57 +v 33.75 -4.88 8.25 +v 33.78 -4.97 5.58 +v 35.69 -3.82 17.67 +v 35.50 -3.68 18.73 +v 35.32 -4.18 17.71 +v 35.37 -4.40 6.22 +v 34.96 -4.51 6.23 +v 34.83 -4.31 17.73 +v 34.57 -4.40 6.23 +v 34.35 -4.17 17.72 +v 34.29 -4.10 6.20 +v 34.01 -3.81 17.69 +v 34.21 -3.69 6.17 +v 33.91 -3.32 17.64 +v 34.33 -3.29 6.13 +v 34.06 -2.83 17.60 +v 34.64 -2.99 6.10 +v 34.43 -2.47 17.56 +v 35.04 -2.89 6.08 +v 34.92 -2.34 17.54 +v 35.44 -3.00 6.09 +v 35.40 -2.48 17.55 +v 34.19 -3.67 18.74 +v 34.45 -3.95 18.77 +v 34.83 -4.06 18.77 +v 35.21 -3.96 18.76 +v 34.85 -3.24 20.31 +v 35.62 -3.30 18.69 +v 35.84 -3.33 17.63 +v 35.67 -4.11 6.19 +v 35.80 -3.71 6.15 +v 34.52 -2.62 18.64 +v 34.23 -2.90 18.67 +v 34.11 -3.28 18.71 +v 34.90 -2.52 18.63 +v 35.71 -3.30 6.12 +v 35.74 -2.84 17.58 +v 35.54 -2.91 18.66 +v 35.27 -2.63 18.64 +v 34.96 -3.67 6.14 +v 35.03 -3.74 6.15 +v 36.31 -2.54 5.33 +v 36.24 -2.47 5.32 +v 35.00 -3.65 8.81 +v 34.93 -3.58 8.81 +v 36.28 -2.46 8.00 +v 36.21 -2.39 7.99 +v 36.16 -4.83 8.22 +v 35.02 -3.58 8.81 +v 36.09 -4.90 8.22 +v 34.94 -3.65 8.81 +v 33.87 -2.37 8.01 +v 33.80 -2.44 8.02 +v 36.12 -4.99 5.56 +v 34.97 -3.74 6.15 +v 33.83 -2.52 5.35 +v 33.90 -2.45 5.35 +v 35.05 -3.67 6.14 +v 36.19 -4.92 5.55 +# 183 vertices + +vn -0.73 -0.68 0.01 +vn 0.85 -0.51 0.11 +vn 0.82 -0.47 0.33 +vn 0.49 -0.86 0.12 +vn 0.50 -0.87 0.02 +vn -0.01 -1.00 0.02 +vn -0.01 -0.99 0.12 +vn -0.52 -0.85 0.01 +vn -0.52 -0.85 0.12 +vn -0.89 -0.46 -0.01 +vn -0.89 -0.45 0.10 +vn -1.00 0.05 -0.03 +vn -1.00 0.05 0.08 +vn -0.85 0.53 -0.04 +vn -0.85 0.53 0.06 +vn -0.48 0.87 -0.05 +vn -0.49 0.87 0.05 +vn 0.01 1.00 -0.05 +vn 0.01 1.00 0.06 +vn 0.52 0.85 -0.04 +vn 0.52 0.85 0.07 +vn -0.85 -0.42 0.32 +vn -0.50 -0.79 0.34 +vn -0.01 -0.94 0.35 +vn 0.47 -0.81 0.34 +vn -0.35 -0.53 0.78 +vn 0.92 -0.26 0.31 +vn 0.95 -0.29 0.10 +vn 0.86 -0.52 0.01 +vn 0.95 -0.30 0.01 +vn -0.46 0.85 0.27 +vn -0.81 0.52 0.28 +vn -0.95 0.07 0.30 +vn 0.01 0.96 0.27 +vn 0.45 0.77 0.46 +vn 0.88 0.47 -0.02 +vn 0.88 0.47 0.08 +vn 0.98 0.21 -0.01 +vn 0.97 0.22 0.09 +vn 0.84 0.46 0.30 +vn 0.93 0.23 0.30 +vn 0.49 0.82 0.29 +vn -0.01 -0.09 -1.00 +vn 0.27 0.17 -0.95 +vn 0.00 -0.08 -1.00 +vn -0.27 -0.33 -0.91 +vn -0.27 -0.17 0.95 +vn -0.00 0.08 1.00 +vn 0.01 0.09 1.00 +vn 0.27 0.33 0.91 +vn -0.69 0.72 -0.03 +vn 0.28 -0.19 0.94 +vn 0.02 0.08 1.00 +vn -0.25 0.35 0.90 +vn 0.25 -0.35 -0.90 +vn -0.02 -0.08 -1.00 +vn -0.28 0.19 -0.94 +vn 0.73 0.68 -0.01 +vn 0.69 -0.72 0.03 +# 59 vertex normals + +vt 0.81 0.65 0.00 +vt 0.71 0.65 0.00 +vt 0.83 0.57 0.00 +vt 0.85 0.57 0.00 +vt 0.64 0.57 0.00 +vt 0.64 0.58 0.00 +vt 0.83 0.58 0.00 +vt 0.64 0.59 0.00 +vt 0.83 0.59 0.00 +vt 0.64 0.60 0.00 +vt 0.83 0.60 0.00 +vt 0.85 0.58 0.00 +vt 0.89 0.58 0.00 +vt 0.85 0.59 0.00 +vt 0.85 0.60 0.00 +vt 0.89 0.60 0.00 +vt 0.64 0.61 0.00 +vt 0.83 0.61 0.00 +vt 0.85 0.61 0.00 +vt 0.37 0.73 0.00 +vt 0.37 0.74 0.00 +vt 0.39 0.74 0.00 +vt 0.39 0.72 0.00 +vt 0.39 0.73 0.00 +vt 0.38 0.74 0.00 +vt 0.69 0.65 0.00 +vt 0.75 0.65 0.00 +vt 0.91 0.70 0.00 +vt 0.91 0.66 0.00 +vt 0.98 0.70 0.00 +vt 0.98 0.66 0.00 +vt 0.91 0.63 0.00 +vt 0.98 0.63 0.00 +vt 0.37 0.72 0.00 +vt 0.38 0.71 0.00 +# 35 texture coords + +g P_51_Mustang_Left_Rockets +f 2048/1348/2087 2049/1349/2087 2050/1348/2087 +f 2051/1349/2087 2050/1348/2087 2049/1349/2087 +f 2052/1350/2088 2053/1351/2089 2054/1350/2090 +f 2054/1350/2090 2055/1352/2091 2052/1350/2088 +f 2055/1352/2091 2054/1350/2090 2056/1353/2092 +f 2057/1354/2093 2056/1353/2092 2054/1350/2090 +f 2056/1353/2092 2057/1354/2093 2058/1353/2094 +f 2059/1354/2095 2058/1353/2094 2057/1354/2093 +f 2058/1353/2094 2059/1354/2095 2060/1353/2096 +f 2061/1354/2097 2060/1353/2096 2059/1354/2095 +f 2060/1353/2096 2061/1354/2097 2062/1355/2098 +f 2063/1356/2099 2062/1355/2098 2061/1354/2097 +f 2062/1355/2098 2063/1356/2099 2064/1355/2100 +f 2065/1356/2101 2064/1355/2100 2063/1356/2099 +f 2064/1355/2100 2065/1356/2101 2066/1355/2102 +f 2067/1356/2103 2066/1355/2102 2065/1356/2101 +f 2066/1355/2102 2067/1356/2103 2068/1357/2104 +f 2069/1358/2105 2068/1357/2104 2067/1356/2103 +f 2068/1357/2104 2069/1358/2105 2070/1357/2106 +f 2071/1358/2107 2070/1357/2106 2069/1358/2105 +f 2061/1354/2097 2072/1359/2108 2063/1356/2099 +f 2072/1359/2108 2061/1354/2097 2073/1359/2109 +f 2059/1354/2095 2073/1359/2109 2061/1354/2097 +f 2073/1359/2109 2059/1354/2095 2074/1359/2110 +f 2057/1354/2093 2074/1359/2110 2059/1354/2095 +f 2074/1359/2110 2057/1354/2093 2075/1351/2111 +f 2054/1350/2090 2075/1351/2111 2057/1354/2093 +f 2075/1351/2111 2054/1350/2090 2053/1351/2089 +f 2075/1351/2111 2053/1351/2089 2076/1360/2112 +f 2053/1351/2089 2077/1351/2113 2076/1360/2112 +f 2053/1351/2089 2052/1350/2088 2077/1351/2113 +f 2078/1350/2114 2077/1351/2113 2052/1350/2088 +f 2052/1350/2088 2079/1352/2115 2078/1350/2114 +f 2080/1352/2116 2078/1350/2114 2079/1352/2115 +f 2081/1361/2117 2082/1361/2118 2076/1360/2112 +f 2082/1361/2118 2083/1361/2119 2076/1360/2112 +f 2083/1361/2119 2072/1359/2108 2076/1360/2112 +f 2072/1359/2108 2073/1359/2109 2076/1360/2112 +f 2073/1359/2109 2074/1359/2110 2076/1360/2112 +f 2074/1359/2110 2075/1351/2111 2076/1360/2112 +f 2084/1362/2120 2081/1361/2117 2076/1363/2121 +f 2070/1357/2106 2071/1358/2107 2085/1357/2122 +f 2086/1358/2123 2085/1357/2122 2071/1358/2107 +f 2085/1357/2122 2086/1358/2123 2080/1364/2124 +f 2078/1365/2125 2080/1364/2124 2086/1358/2123 +f 2086/1358/2123 2087/1362/2126 2078/1365/2125 +f 2077/1366/2127 2078/1365/2125 2087/1362/2126 +f 2077/1366/2127 2087/1362/2126 2076/1363/2121 +f 2087/1362/2126 2088/1362/2128 2076/1363/2121 +f 2088/1362/2128 2084/1362/2120 2076/1363/2121 +f 2088/1362/2128 2071/1358/2107 2084/1362/2120 +f 2069/1358/2105 2084/1362/2120 2071/1358/2107 +f 2084/1362/2120 2069/1358/2105 2081/1361/2117 +f 2067/1356/2103 2081/1361/2117 2069/1358/2105 +f 2081/1361/2117 2067/1356/2103 2082/1361/2118 +f 2065/1356/2101 2082/1361/2118 2067/1356/2103 +f 2082/1361/2118 2065/1356/2101 2083/1361/2119 +f 2063/1356/2099 2083/1361/2119 2065/1356/2101 +f 2083/1361/2119 2063/1356/2099 2072/1359/2108 +f 2087/1362/2126 2086/1358/2123 2088/1362/2128 +f 2071/1358/2107 2088/1362/2128 2086/1358/2123 +f 2085/1367/2129 2080/1367/2129 2070/1368/2129 +f 2080/1367/2129 2066/1369/2129 2070/1368/2129 +f 2058/1370/2129 2066/1369/2129 2080/1367/2129 +f 2062/1371/2129 2066/1369/2129 2058/1370/2129 +f 2060/1370/2129 2062/1371/2129 2058/1370/2129 +f 2070/1368/2129 2066/1369/2129 2068/1372/2129 +f 2064/1371/2129 2066/1369/2129 2062/1371/2129 +f 2049/1373/2130 2089/1374/2129 2051/1373/2130 +f 2090/1374/2131 2051/1373/2130 2089/1374/2129 +f 2090/1374/2131 2089/1374/2129 2091/1348/2132 +f 2092/1348/2132 2091/1348/2132 2089/1374/2129 +f 2050/1373/2133 2093/1374/2134 2048/1373/2133 +f 2094/1374/2135 2048/1373/2133 2093/1374/2134 +f 2093/1374/2134 2095/1348/2136 2094/1374/2135 +f 2096/1348/2136 2094/1374/2135 2095/1348/2136 +f 2048/1375/2137 2094/1376/2137 2049/1377/2137 +f 2089/1378/2137 2049/1377/2137 2094/1376/2137 +f 2094/1376/2137 2096/1379/2137 2089/1378/2137 +f 2092/1380/2137 2089/1378/2137 2096/1379/2137 +f 2097/1373/2138 2098/1374/2135 2099/1373/2138 +f 2100/1374/2139 2099/1373/2138 2098/1374/2135 +f 2098/1374/2135 2101/1348/2140 2100/1374/2139 +f 2102/1348/2140 2100/1374/2139 2101/1348/2140 +f 2099/1375/2087 2100/1376/2087 2103/1377/2087 +f 2104/1378/2087 2103/1377/2087 2100/1376/2087 +f 2100/1376/2087 2102/1379/2087 2104/1378/2087 +f 2105/1380/2087 2104/1378/2087 2102/1379/2087 +f 2105/1348/2141 2106/1348/2141 2104/1374/2142 +f 2107/1374/2129 2104/1374/2142 2106/1348/2141 +f 2107/1374/2129 2108/1373/2143 2104/1374/2142 +f 2103/1373/2143 2104/1374/2142 2108/1373/2143 +f 2101/1375/2144 2098/1376/2144 2106/1377/2144 +f 2107/1378/2144 2106/1377/2144 2098/1376/2144 +f 2098/1376/2144 2097/1379/2144 2107/1378/2144 +f 2108/1380/2144 2107/1378/2144 2097/1379/2144 +f 2079/1381/2129 2055/1381/2129 2080/1367/2129 +f 2055/1381/2129 2058/1370/2129 2080/1367/2129 +f 2056/1382/2129 2058/1370/2129 2055/1381/2129 +f 2095/1375/2145 2093/1376/2145 2091/1377/2145 +f 2090/1378/2145 2091/1377/2145 2093/1376/2145 +f 2093/1376/2145 2050/1379/2145 2090/1378/2145 +f 2051/1380/2145 2090/1378/2145 2050/1379/2145 +f 2095/1348/2144 2091/1349/2144 2096/1348/2144 +f 2092/1349/2144 2096/1348/2144 2091/1349/2144 +f 2099/1348/2145 2103/1349/2145 2097/1348/2145 +f 2108/1349/2145 2097/1348/2145 2103/1349/2145 +f 2101/1348/2137 2106/1349/2137 2102/1348/2137 +f 2105/1349/2137 2102/1348/2137 2106/1349/2137 +f 2079/1352/2115 2052/1350/2088 2055/1352/2091 +f 2109/1348/2087 2110/1349/2087 2111/1348/2087 +f 2112/1349/2087 2111/1348/2087 2110/1349/2087 +f 2113/1350/2088 2114/1351/2089 2115/1350/2090 +f 2115/1350/2090 2116/1352/2091 2113/1350/2088 +f 2116/1352/2091 2115/1350/2090 2117/1353/2092 +f 2118/1354/2093 2117/1353/2092 2115/1350/2090 +f 2117/1353/2092 2118/1354/2093 2119/1353/2094 +f 2120/1354/2095 2119/1353/2094 2118/1354/2093 +f 2119/1353/2094 2120/1354/2095 2121/1353/2096 +f 2122/1354/2097 2121/1353/2096 2120/1354/2095 +f 2121/1353/2096 2122/1354/2097 2123/1355/2098 +f 2124/1356/2099 2123/1355/2098 2122/1354/2097 +f 2123/1355/2098 2124/1356/2099 2125/1355/2100 +f 2126/1356/2101 2125/1355/2100 2124/1356/2099 +f 2125/1355/2100 2126/1356/2101 2127/1355/2102 +f 2128/1356/2103 2127/1355/2102 2126/1356/2101 +f 2127/1355/2102 2128/1356/2103 2129/1357/2104 +f 2130/1358/2105 2129/1357/2104 2128/1356/2103 +f 2129/1357/2104 2130/1358/2105 2131/1357/2106 +f 2132/1358/2107 2131/1357/2106 2130/1358/2105 +f 2122/1354/2097 2133/1359/2108 2124/1356/2099 +f 2133/1359/2108 2122/1354/2097 2134/1359/2109 +f 2120/1354/2095 2134/1359/2109 2122/1354/2097 +f 2134/1359/2109 2120/1354/2095 2135/1359/2110 +f 2118/1354/2093 2135/1359/2110 2120/1354/2095 +f 2135/1359/2110 2118/1354/2093 2136/1351/2111 +f 2115/1350/2090 2136/1351/2111 2118/1354/2093 +f 2136/1351/2111 2115/1350/2090 2114/1351/2089 +f 2136/1351/2111 2114/1351/2089 2137/1360/2112 +f 2114/1351/2089 2138/1351/2113 2137/1360/2112 +f 2114/1351/2089 2113/1350/2088 2138/1351/2113 +f 2139/1350/2114 2138/1351/2113 2113/1350/2088 +f 2113/1350/2088 2140/1352/2115 2139/1350/2114 +f 2141/1352/2116 2139/1350/2114 2140/1352/2115 +f 2142/1361/2117 2143/1361/2118 2137/1360/2112 +f 2143/1361/2118 2144/1361/2119 2137/1360/2112 +f 2144/1361/2119 2133/1359/2108 2137/1360/2112 +f 2133/1359/2108 2134/1359/2109 2137/1360/2112 +f 2134/1359/2109 2135/1359/2110 2137/1360/2112 +f 2135/1359/2110 2136/1351/2111 2137/1360/2112 +f 2145/1362/2120 2142/1361/2117 2137/1363/2121 +f 2131/1357/2106 2132/1358/2107 2146/1357/2122 +f 2147/1358/2123 2146/1357/2122 2132/1358/2107 +f 2146/1357/2122 2147/1358/2123 2141/1364/2124 +f 2139/1365/2125 2141/1364/2124 2147/1358/2123 +f 2147/1358/2123 2148/1362/2126 2139/1365/2125 +f 2138/1366/2127 2139/1365/2125 2148/1362/2126 +f 2138/1366/2127 2148/1362/2126 2137/1363/2121 +f 2148/1362/2126 2149/1362/2128 2137/1363/2121 +f 2149/1362/2128 2145/1362/2120 2137/1363/2121 +f 2149/1362/2128 2132/1358/2107 2145/1362/2120 +f 2130/1358/2105 2145/1362/2120 2132/1358/2107 +f 2145/1362/2120 2130/1358/2105 2142/1361/2117 +f 2128/1356/2103 2142/1361/2117 2130/1358/2105 +f 2142/1361/2117 2128/1356/2103 2143/1361/2118 +f 2126/1356/2101 2143/1361/2118 2128/1356/2103 +f 2143/1361/2118 2126/1356/2101 2144/1361/2119 +f 2124/1356/2099 2144/1361/2119 2126/1356/2101 +f 2144/1361/2119 2124/1356/2099 2133/1359/2108 +f 2148/1362/2126 2147/1358/2123 2149/1362/2128 +f 2132/1358/2107 2149/1362/2128 2147/1358/2123 +f 2146/1367/2129 2141/1367/2129 2131/1368/2129 +f 2141/1367/2129 2127/1369/2129 2131/1368/2129 +f 2119/1370/2129 2127/1369/2129 2141/1367/2129 +f 2123/1371/2129 2127/1369/2129 2119/1370/2129 +f 2121/1370/2129 2123/1371/2129 2119/1370/2129 +f 2131/1368/2129 2127/1369/2129 2129/1372/2129 +f 2125/1371/2129 2127/1369/2129 2123/1371/2129 +f 2110/1373/2130 2150/1374/2129 2112/1373/2130 +f 2151/1374/2131 2112/1373/2130 2150/1374/2129 +f 2151/1374/2131 2150/1374/2129 2152/1348/2132 +f 2153/1348/2132 2152/1348/2132 2150/1374/2129 +f 2111/1373/2133 2154/1374/2134 2109/1373/2133 +f 2155/1374/2135 2109/1373/2133 2154/1374/2134 +f 2154/1374/2134 2156/1348/2136 2155/1374/2135 +f 2157/1348/2136 2155/1374/2135 2156/1348/2136 +f 2109/1375/2137 2155/1376/2137 2110/1377/2137 +f 2150/1378/2137 2110/1377/2137 2155/1376/2137 +f 2155/1376/2137 2157/1379/2137 2150/1378/2137 +f 2153/1380/2137 2150/1378/2137 2157/1379/2137 +f 2158/1373/2138 2159/1374/2135 2160/1373/2138 +f 2161/1374/2139 2160/1373/2138 2159/1374/2135 +f 2159/1374/2135 2162/1348/2140 2161/1374/2139 +f 2163/1348/2140 2161/1374/2139 2162/1348/2140 +f 2160/1375/2087 2161/1376/2087 2164/1377/2087 +f 2165/1378/2087 2164/1377/2087 2161/1376/2087 +f 2161/1376/2087 2163/1379/2087 2165/1378/2087 +f 2166/1380/2087 2165/1378/2087 2163/1379/2087 +f 2166/1348/2141 2167/1348/2141 2165/1374/2142 +f 2168/1374/2129 2165/1374/2142 2167/1348/2141 +f 2168/1374/2129 2169/1373/2143 2165/1374/2142 +f 2164/1373/2143 2165/1374/2142 2169/1373/2143 +f 2162/1375/2144 2159/1376/2144 2167/1377/2144 +f 2168/1378/2144 2167/1377/2144 2159/1376/2144 +f 2159/1376/2144 2158/1379/2144 2168/1378/2144 +f 2169/1380/2144 2168/1378/2144 2158/1379/2144 +f 2140/1381/2129 2116/1381/2129 2141/1367/2129 +f 2116/1381/2129 2119/1370/2129 2141/1367/2129 +f 2117/1382/2129 2119/1370/2129 2116/1381/2129 +f 2156/1375/2145 2154/1376/2145 2152/1377/2145 +f 2151/1378/2145 2152/1377/2145 2154/1376/2145 +f 2154/1376/2145 2111/1379/2145 2151/1378/2145 +f 2112/1380/2145 2151/1378/2145 2111/1379/2145 +f 2156/1348/2144 2152/1349/2144 2157/1348/2144 +f 2153/1349/2144 2157/1348/2144 2152/1349/2144 +f 2160/1348/2145 2164/1349/2145 2158/1348/2145 +f 2169/1349/2145 2158/1348/2145 2164/1349/2145 +f 2162/1348/2137 2167/1349/2137 2163/1348/2137 +f 2166/1349/2137 2163/1348/2137 2167/1349/2137 +f 2140/1352/2115 2113/1350/2088 2116/1352/2091 +f 2170/1348/2087 2171/1349/2087 2172/1348/2087 +f 2173/1349/2087 2172/1348/2087 2171/1349/2087 +f 2174/1350/2088 2175/1351/2089 2176/1350/2090 +f 2176/1350/2090 2177/1352/2091 2174/1350/2088 +f 2177/1352/2091 2176/1350/2090 2178/1353/2092 +f 2179/1354/2093 2178/1353/2092 2176/1350/2090 +f 2178/1353/2092 2179/1354/2093 2180/1353/2094 +f 2181/1354/2095 2180/1353/2094 2179/1354/2093 +f 2180/1353/2094 2181/1354/2095 2182/1353/2096 +f 2183/1354/2097 2182/1353/2096 2181/1354/2095 +f 2182/1353/2096 2183/1354/2097 2184/1355/2098 +f 2185/1356/2099 2184/1355/2098 2183/1354/2097 +f 2184/1355/2098 2185/1356/2099 2186/1355/2100 +f 2187/1356/2101 2186/1355/2100 2185/1356/2099 +f 2186/1355/2100 2187/1356/2101 2188/1355/2102 +f 2189/1356/2103 2188/1355/2102 2187/1356/2101 +f 2188/1355/2102 2189/1356/2103 2190/1357/2104 +f 2191/1358/2105 2190/1357/2104 2189/1356/2103 +f 2190/1357/2104 2191/1358/2105 2192/1357/2106 +f 2193/1358/2107 2192/1357/2106 2191/1358/2105 +f 2183/1354/2097 2194/1359/2108 2185/1356/2099 +f 2194/1359/2108 2183/1354/2097 2195/1359/2109 +f 2181/1354/2095 2195/1359/2109 2183/1354/2097 +f 2195/1359/2109 2181/1354/2095 2196/1359/2110 +f 2179/1354/2093 2196/1359/2110 2181/1354/2095 +f 2196/1359/2110 2179/1354/2093 2197/1351/2111 +f 2176/1350/2090 2197/1351/2111 2179/1354/2093 +f 2197/1351/2111 2176/1350/2090 2175/1351/2089 +f 2197/1351/2111 2175/1351/2089 2198/1360/2112 +f 2175/1351/2089 2199/1351/2113 2198/1360/2112 +f 2175/1351/2089 2174/1350/2088 2199/1351/2113 +f 2200/1350/2114 2199/1351/2113 2174/1350/2088 +f 2174/1350/2088 2201/1352/2115 2200/1350/2114 +f 2202/1352/2116 2200/1350/2114 2201/1352/2115 +f 2203/1361/2117 2204/1361/2118 2198/1360/2112 +f 2204/1361/2118 2205/1361/2119 2198/1360/2112 +f 2205/1361/2119 2194/1359/2108 2198/1360/2112 +f 2194/1359/2108 2195/1359/2109 2198/1360/2112 +f 2195/1359/2109 2196/1359/2110 2198/1360/2112 +f 2196/1359/2110 2197/1351/2111 2198/1360/2112 +f 2206/1362/2120 2203/1361/2117 2198/1363/2121 +f 2192/1357/2106 2193/1358/2107 2207/1357/2122 +f 2208/1358/2123 2207/1357/2122 2193/1358/2107 +f 2207/1357/2122 2208/1358/2123 2202/1364/2124 +f 2200/1365/2125 2202/1364/2124 2208/1358/2123 +f 2208/1358/2123 2209/1362/2126 2200/1365/2125 +f 2199/1366/2127 2200/1365/2125 2209/1362/2126 +f 2199/1366/2127 2209/1362/2126 2198/1363/2121 +f 2209/1362/2126 2210/1362/2128 2198/1363/2121 +f 2210/1362/2128 2206/1362/2120 2198/1363/2121 +f 2210/1362/2128 2193/1358/2107 2206/1362/2120 +f 2191/1358/2105 2206/1362/2120 2193/1358/2107 +f 2206/1362/2120 2191/1358/2105 2203/1361/2117 +f 2189/1356/2103 2203/1361/2117 2191/1358/2105 +f 2203/1361/2117 2189/1356/2103 2204/1361/2118 +f 2187/1356/2101 2204/1361/2118 2189/1356/2103 +f 2204/1361/2118 2187/1356/2101 2205/1361/2119 +f 2185/1356/2099 2205/1361/2119 2187/1356/2101 +f 2205/1361/2119 2185/1356/2099 2194/1359/2108 +f 2209/1362/2126 2208/1358/2123 2210/1362/2128 +f 2193/1358/2107 2210/1362/2128 2208/1358/2123 +f 2207/1367/2129 2202/1367/2129 2192/1368/2129 +f 2202/1367/2129 2188/1369/2129 2192/1368/2129 +f 2180/1370/2129 2188/1369/2129 2202/1367/2129 +f 2184/1371/2129 2188/1369/2129 2180/1370/2129 +f 2182/1370/2129 2184/1371/2129 2180/1370/2129 +f 2192/1368/2129 2188/1369/2129 2190/1372/2129 +f 2186/1371/2129 2188/1369/2129 2184/1371/2129 +f 2171/1373/2130 2211/1374/2129 2173/1373/2130 +f 2212/1374/2131 2173/1373/2130 2211/1374/2129 +f 2212/1374/2131 2211/1374/2129 2213/1348/2132 +f 2214/1348/2132 2213/1348/2132 2211/1374/2129 +f 2172/1373/2133 2215/1374/2134 2170/1373/2133 +f 2216/1374/2135 2170/1373/2133 2215/1374/2134 +f 2215/1374/2134 2217/1348/2136 2216/1374/2135 +f 2218/1348/2136 2216/1374/2135 2217/1348/2136 +f 2170/1375/2137 2216/1376/2137 2171/1377/2137 +f 2211/1378/2137 2171/1377/2137 2216/1376/2137 +f 2216/1376/2137 2218/1379/2137 2211/1378/2137 +f 2214/1380/2137 2211/1378/2137 2218/1379/2137 +f 2219/1373/2138 2220/1374/2135 2221/1373/2138 +f 2222/1374/2139 2221/1373/2138 2220/1374/2135 +f 2220/1374/2135 2223/1348/2140 2222/1374/2139 +f 2224/1348/2140 2222/1374/2139 2223/1348/2140 +f 2221/1375/2087 2222/1376/2087 2225/1377/2087 +f 2226/1378/2087 2225/1377/2087 2222/1376/2087 +f 2222/1376/2087 2224/1379/2087 2226/1378/2087 +f 2227/1380/2087 2226/1378/2087 2224/1379/2087 +f 2227/1348/2141 2228/1348/2141 2226/1374/2142 +f 2229/1374/2129 2226/1374/2142 2228/1348/2141 +f 2229/1374/2129 2230/1373/2143 2226/1374/2142 +f 2225/1373/2143 2226/1374/2142 2230/1373/2143 +f 2223/1375/2144 2220/1376/2144 2228/1377/2144 +f 2229/1378/2144 2228/1377/2144 2220/1376/2144 +f 2220/1376/2144 2219/1379/2144 2229/1378/2144 +f 2230/1380/2144 2229/1378/2144 2219/1379/2144 +f 2201/1381/2129 2177/1381/2129 2202/1367/2129 +f 2177/1381/2129 2180/1370/2129 2202/1367/2129 +f 2178/1382/2129 2180/1370/2129 2177/1381/2129 +f 2217/1375/2145 2215/1376/2145 2213/1377/2145 +f 2212/1378/2145 2213/1377/2145 2215/1376/2145 +f 2215/1376/2145 2172/1379/2145 2212/1378/2145 +f 2173/1380/2145 2212/1378/2145 2172/1379/2145 +f 2217/1348/2144 2213/1349/2144 2218/1348/2144 +f 2214/1349/2144 2218/1348/2144 2213/1349/2144 +f 2221/1348/2145 2225/1349/2145 2219/1348/2145 +f 2230/1349/2145 2219/1348/2145 2225/1349/2145 +f 2223/1348/2137 2228/1349/2137 2224/1348/2137 +f 2227/1349/2137 2224/1348/2137 2228/1349/2137 +f 2201/1352/2115 2174/1350/2088 2177/1352/2091 +# 330 faces + +# +# object P_51_Mustang_Left_Wing_Flap +# + +v 4.70 -0.34 3.26 +v 5.20 -0.60 -0.73 +v 4.68 -0.83 3.28 +v 29.00 -0.53 5.74 +v 29.38 -0.84 2.43 +v 28.97 -1.13 5.77 +# 6 vertices + +vn -0.99 0.04 -0.13 +vn 0.01 1.00 -0.06 +vn 0.02 1.00 -0.09 +vn 0.01 1.00 -0.07 +vn -0.10 0.04 0.99 +vn -0.10 0.06 0.99 +vn -0.00 -1.00 -0.06 +vn -0.00 -1.00 -0.08 +vn -0.00 -1.00 -0.09 +vn 0.99 -0.04 0.12 +# 10 vertex normals + +vt 0.23 0.01 0.00 +vt 0.29 0.02 0.00 +vt 0.23 0.02 0.00 +vt 0.98 0.45 0.00 +vt 0.65 0.50 0.00 +vt 0.97 0.38 0.00 +vt 0.65 0.44 0.00 +vt 0.46 0.01 0.00 +vt 0.46 0.00 0.00 +vt 0.23 0.00 0.00 +vt 0.01 0.04 0.00 +vt 0.01 0.31 0.00 +vt 0.06 0.05 0.00 +vt 0.05 0.32 0.00 +vt 0.28 0.01 0.00 +vt 0.33 0.02 0.00 +vt 0.33 0.01 0.00 +# 17 texture coords + +g P_51_Mustang_Left_Wing_Flap +f 2231/1383/2146 2232/1384/2146 2233/1385/2146 +f 2231/1386/2147 2234/1387/2148 2232/1388/2149 +f 2235/1389/2148 2232/1388/2149 2234/1387/2148 +f 2233/1390/2150 2236/1383/2151 2231/1391/2150 +f 2234/1392/2151 2231/1391/2150 2236/1383/2151 +f 2232/1393/2152 2235/1394/2153 2233/1395/2152 +f 2236/1396/2154 2233/1395/2152 2235/1394/2153 +f 2235/1397/2155 2234/1398/2155 2236/1399/2155 +# 8 faces + +# +# object P_51_Mustang_Right_Elevator +# + +v -1.73 4.93 -32.15 +v -1.43 4.98 -35.87 +v -1.80 5.11 -32.31 +v -4.44 4.96 -31.91 +v -4.06 5.00 -35.35 +v -7.81 5.09 -34.62 +v -7.82 5.05 -31.65 +v -11.23 5.16 -33.95 +v -11.33 5.14 -31.30 +v -14.07 5.22 -33.39 +v -14.38 5.21 -32.45 +v -13.95 5.24 -30.69 +v -13.81 5.66 -30.77 +v -11.12 5.68 -31.09 +v -7.79 5.68 -31.43 +v -4.42 5.63 -31.75 +v -1.74 5.55 -32.08 +# 17 vertices + +vn 0.91 0.41 0.08 +vn -0.01 -1.00 -0.01 +vn -0.02 -1.00 -0.01 +vn -0.03 -1.00 -0.01 +vn -0.03 -1.00 -0.00 +vn -0.02 -1.00 -0.02 +vn -0.02 -1.00 -0.00 +vn -0.03 -1.00 0.03 +vn -0.03 0.99 -0.16 +vn -0.02 0.98 -0.17 +vn -0.02 0.99 -0.17 +vn -0.02 0.98 -0.18 +vn -0.01 0.98 -0.18 +vn -0.01 0.98 -0.17 +vn -0.03 0.98 -0.18 +vn -0.00 0.99 -0.16 +vn -0.01 0.99 -0.16 +vn 0.01 0.99 -0.15 +vn 0.98 -0.18 0.11 +# 19 vertex normals + +vt 0.96 0.79 0.00 +vt 0.96 0.78 0.00 +vt 0.02 0.62 0.00 +vt 0.06 0.63 0.00 +vt 0.01 0.57 0.00 +vt 0.05 0.58 0.00 +vt 0.11 0.59 0.00 +vt 0.11 0.63 0.00 +vt 0.16 0.60 0.00 +vt 0.16 0.63 0.00 +vt 0.20 0.60 0.00 +vt 0.20 0.62 0.00 +vt 0.20 0.64 0.00 +vt 0.29 0.23 0.00 +vt 0.29 0.27 0.00 +vt 0.25 0.22 0.00 +vt 0.25 0.27 0.00 +vt 0.29 0.32 0.00 +vt 0.24 0.32 0.00 +vt 0.28 0.37 0.00 +vt 0.23 0.37 0.00 +vt 0.22 0.41 0.00 +vt 0.28 0.41 0.00 +# 23 texture coords + +g P_51_Mustang_Right_Elevator +f 2237/1400/2156 2238/1401/2156 2239/1400/2156 +f 2237/1402/2157 2240/1403/2158 2238/1404/2157 +f 2241/1405/2158 2238/1404/2157 2240/1403/2158 +f 2241/1405/2158 2240/1403/2158 2242/1406/2159 +f 2243/1407/2159 2242/1406/2159 2240/1403/2158 +f 2242/1406/2159 2243/1407/2159 2244/1408/2158 +f 2245/1409/2160 2244/1408/2158 2243/1407/2159 +f 2246/1410/2161 2244/1408/2158 2245/1409/2160 +f 2247/1411/2162 2246/1410/2161 2245/1409/2160 +f 2248/1412/2163 2247/1411/2162 2245/1409/2160 +f 2249/1413/2164 2250/1414/2165 2246/1415/2166 +f 2244/1416/2167 2246/1415/2166 2250/1414/2165 +f 2250/1414/2165 2251/1417/2168 2244/1416/2167 +f 2242/1418/2168 2244/1416/2167 2251/1417/2168 +f 2251/1417/2168 2252/1419/2168 2242/1418/2168 +f 2241/1420/2169 2242/1418/2168 2252/1419/2168 +f 2241/1420/2170 2252/1419/2171 2238/1421/2172 +f 2253/1422/2173 2238/1421/2172 2252/1419/2171 +f 2253/1400/2174 2239/1400/2174 2238/1401/2174 +# 19 faces + +# +# object P_51_Mustang_Back_Wheel +# + +v 0.75 -3.90 -21.82 +v 0.72 -4.53 -21.59 +v 0.78 -3.45 -22.32 +v 0.67 -5.83 -22.72 +v 0.69 -5.68 -23.36 +v 0.67 -5.64 -22.12 +v 0.79 -3.49 -23.56 +v 0.79 -3.30 -22.96 +v 0.69 -5.17 -21.70 +v 0.29 -3.41 -23.61 +v 0.29 -3.21 -22.96 +v 0.27 -3.37 -22.27 +v 0.24 -3.85 -21.74 +v 0.21 -4.52 -21.50 +v 0.18 -5.20 -21.61 +v 0.16 -5.72 -22.06 +v 0.16 -5.92 -22.71 +v 0.17 -5.76 -23.40 +v 0.72 -5.24 -23.86 +v 0.20 -5.28 -23.93 +v 0.75 -4.61 -24.09 +v 0.24 -4.61 -24.17 +v 0.78 -3.97 -23.98 +v 0.27 -3.92 -24.06 +v -0.25 -3.96 -23.97 +v -0.23 -3.49 -23.55 +v -0.23 -3.30 -22.95 +v -0.24 -3.45 -22.31 +v -0.27 -3.89 -21.81 +v -0.30 -4.52 -21.58 +v -0.33 -5.16 -21.69 +v -0.35 -5.63 -22.11 +v -0.35 -5.82 -22.71 +v -0.33 -5.68 -23.35 +v -0.31 -5.23 -23.85 +v -0.28 -4.60 -24.08 +# 36 vertices + +vn 1.00 -0.05 0.01 +vn 0.18 0.82 -0.54 +vn 0.00 0.84 -0.55 +vn 0.19 0.98 -0.04 +vn 0.01 1.00 -0.04 +vn 0.18 0.87 0.46 +vn 0.01 0.89 0.46 +vn 0.18 0.55 0.82 +vn 0.01 0.56 0.83 +vn 0.18 0.09 0.98 +vn 0.01 0.09 1.00 +vn 0.18 -0.42 0.89 +vn 0.00 -0.43 0.90 +vn 0.18 -0.82 0.54 +vn -0.00 -0.84 0.55 +vn 0.17 -0.99 0.03 +vn -0.01 -1.00 0.04 +vn 0.16 -0.87 -0.46 +vn -0.01 -0.89 -0.46 +vn 0.16 -0.55 -0.82 +vn -0.01 -0.56 -0.83 +vn 0.17 -0.09 -0.98 +vn -0.01 -0.09 -1.00 +vn 0.18 0.42 -0.89 +vn -0.00 0.43 -0.90 +vn -0.18 0.42 -0.89 +vn -0.18 0.82 -0.54 +vn -0.17 0.99 -0.03 +vn -0.16 0.87 0.46 +vn -0.16 0.55 0.82 +vn -0.17 0.09 0.98 +vn -0.18 -0.42 0.89 +vn -0.18 -0.82 0.54 +vn -0.19 -0.98 0.04 +vn -0.18 -0.87 -0.46 +vn -0.18 -0.55 -0.82 +vn -0.18 -0.09 -0.98 +vn -1.00 0.05 -0.01 +# 38 vertex normals + +vt 0.79 0.99 0.00 +vt 0.81 0.99 0.00 +vt 0.78 0.97 0.00 +vt 0.85 0.95 0.00 +vt 0.85 0.93 0.00 +vt 0.85 0.97 0.00 +vt 0.78 0.93 0.00 +vt 0.77 0.95 0.00 +vt 0.83 0.99 0.00 +vt 0.31 0.75 0.00 +vt 0.31 0.76 0.00 +vt 0.30 0.75 0.00 +vt 0.30 0.76 0.00 +vt 0.33 0.75 0.00 +vt 0.32 0.76 0.00 +vt 0.34 0.75 0.00 +vt 0.34 0.76 0.00 +vt 0.36 0.75 0.00 +vt 0.36 0.76 0.00 +vt 0.37 0.75 0.00 +vt 0.37 0.76 0.00 +vt 0.38 0.75 0.00 +vt 0.39 0.76 0.00 +vt 0.33 0.77 0.00 +vt 0.31 0.77 0.00 +vt 0.30 0.77 0.00 +vt 0.34 0.77 0.00 +vt 0.36 0.77 0.00 +vt 0.37 0.77 0.00 +vt 0.38 0.77 0.00 +vt 0.83 0.92 0.00 +vt 0.79 0.92 0.00 +vt 0.81 0.91 0.00 +# 33 texture coords + +g P_51_Mustang_Back_Wheel +f 2254/1423/2175 2255/1424/2175 2256/1425/2175 +f 2257/1426/2175 2258/1427/2175 2259/1428/2175 +f 2258/1427/2175 2255/1424/2175 2259/1428/2175 +f 2260/1429/2175 2255/1424/2175 2258/1427/2175 +f 2256/1425/2175 2255/1424/2175 2260/1429/2175 +f 2261/1430/2175 2256/1425/2175 2260/1429/2175 +f 2259/1428/2175 2255/1424/2175 2262/1431/2175 +f 2260/1432/2176 2263/1433/2177 2261/1434/2178 +f 2264/1435/2179 2261/1434/2178 2263/1433/2177 +f 2261/1434/2178 2264/1435/2179 2256/1432/2180 +f 2265/1433/2181 2256/1432/2180 2264/1435/2179 +f 2256/1432/2180 2265/1433/2181 2254/1436/2182 +f 2266/1437/2183 2254/1436/2182 2265/1433/2181 +f 2254/1436/2182 2266/1437/2183 2255/1438/2184 +f 2267/1439/2185 2255/1438/2184 2266/1437/2183 +f 2255/1438/2184 2267/1439/2185 2262/1440/2186 +f 2268/1441/2187 2262/1440/2186 2267/1439/2185 +f 2262/1440/2186 2268/1441/2187 2259/1442/2188 +f 2269/1443/2189 2259/1442/2188 2268/1441/2187 +f 2259/1442/2188 2269/1443/2189 2257/1444/2190 +f 2270/1445/2191 2257/1444/2190 2269/1443/2189 +f 2257/1444/2190 2270/1445/2191 2258/1442/2192 +f 2271/1443/2193 2258/1442/2192 2270/1445/2191 +f 2258/1442/2192 2271/1443/2193 2272/1440/2194 +f 2273/1441/2195 2272/1440/2194 2271/1443/2193 +f 2272/1440/2194 2273/1441/2195 2274/1438/2196 +f 2275/1439/2197 2274/1438/2196 2273/1441/2195 +f 2274/1438/2196 2275/1439/2197 2276/1436/2198 +f 2277/1437/2199 2276/1436/2198 2275/1439/2197 +f 2276/1436/2198 2277/1437/2199 2260/1432/2176 +f 2263/1433/2177 2260/1432/2176 2277/1437/2199 +f 2277/1437/2199 2278/1446/2200 2263/1433/2177 +f 2279/1447/2201 2263/1433/2177 2278/1446/2200 +f 2263/1433/2177 2279/1447/2201 2264/1435/2179 +f 2280/1448/2202 2264/1435/2179 2279/1447/2201 +f 2264/1435/2179 2280/1448/2202 2265/1433/2181 +f 2281/1447/2203 2265/1433/2181 2280/1448/2202 +f 2265/1433/2181 2281/1447/2203 2266/1437/2183 +f 2282/1446/2204 2266/1437/2183 2281/1447/2203 +f 2266/1437/2183 2282/1446/2204 2267/1439/2185 +f 2283/1449/2205 2267/1439/2185 2282/1446/2204 +f 2267/1439/2185 2283/1449/2205 2268/1441/2187 +f 2284/1450/2206 2268/1441/2187 2283/1449/2205 +f 2268/1441/2187 2284/1450/2206 2269/1443/2189 +f 2285/1451/2207 2269/1443/2189 2284/1450/2206 +f 2269/1443/2189 2285/1451/2207 2270/1445/2191 +f 2286/1452/2208 2270/1445/2191 2285/1451/2207 +f 2270/1445/2191 2286/1452/2208 2271/1443/2193 +f 2287/1451/2209 2271/1443/2193 2286/1452/2208 +f 2271/1443/2193 2287/1451/2209 2273/1441/2195 +f 2288/1450/2210 2273/1441/2195 2287/1451/2209 +f 2273/1441/2195 2288/1450/2210 2275/1439/2197 +f 2289/1449/2211 2275/1439/2197 2288/1450/2210 +f 2275/1439/2197 2289/1449/2211 2277/1437/2199 +f 2278/1446/2200 2277/1437/2199 2289/1449/2211 +f 2285/1428/2212 2284/1431/2212 2286/1426/2212 +f 2286/1426/2212 2284/1431/2212 2288/1453/2212 +f 2288/1453/2212 2284/1431/2212 2280/1430/2212 +f 2278/1454/2212 2288/1453/2212 2280/1430/2212 +f 2279/1429/2212 2278/1454/2212 2280/1430/2212 +f 2289/1455/2212 2288/1453/2212 2278/1454/2212 +f 2287/1427/2212 2286/1426/2212 2288/1453/2212 +f 2272/1453/2175 2274/1455/2175 2258/1427/2175 +f 2274/1455/2175 2260/1429/2175 2258/1427/2175 +f 2276/1454/2175 2260/1429/2175 2274/1455/2175 +f 2281/1425/2212 2280/1430/2212 2282/1423/2212 +f 2280/1430/2212 2284/1431/2212 2282/1423/2212 +f 2282/1423/2212 2284/1431/2212 2283/1424/2212 +# 68 faces + +# +# object P_51_Mustang_Left_Elevator +# + +v 3.14 4.95 -35.92 +v 3.33 4.89 -32.33 +v 3.39 5.51 -32.16 +v 5.75 4.92 -35.46 +v 6.03 4.88 -32.03 +v 9.49 4.95 -34.81 +v 9.40 4.92 -31.81 +v 12.89 4.98 -34.22 +v 12.73 4.96 -31.49 +v 15.72 4.99 -33.73 +v 15.64 4.97 -32.81 +v 15.50 5.01 -31.28 +v 15.57 5.42 -31.45 +v 12.75 5.49 -31.56 +v 9.43 5.54 -31.80 +v 6.06 5.54 -32.00 +v 3.41 5.07 -32.37 +# 17 vertices + +vn -1.00 0.08 0.05 +vn -0.01 -1.00 -0.01 +vn 0.00 -1.00 -0.01 +vn -0.00 -1.00 -0.01 +vn 0.01 -1.00 -0.01 +vn 0.01 -1.00 -0.00 +vn 0.02 -1.00 0.02 +vn 0.03 0.98 -0.18 +vn 0.03 0.98 -0.19 +vn 0.02 0.98 -0.19 +vn 0.02 0.98 -0.18 +vn -0.00 0.98 -0.18 +vn 0.02 0.99 -0.16 +vn 0.01 0.99 -0.17 +vn 0.04 0.99 -0.15 +vn 0.78 -0.24 0.58 +# 16 vertex normals + +vt 0.94 0.79 0.00 +vt 0.93 0.78 0.00 +vt 0.01 0.57 0.00 +vt 0.05 0.58 0.00 +vt 0.02 0.62 0.00 +vt 0.06 0.63 0.00 +vt 0.11 0.59 0.00 +vt 0.11 0.63 0.00 +vt 0.16 0.59 0.00 +vt 0.16 0.64 0.00 +vt 0.20 0.60 0.00 +vt 0.20 0.62 0.00 +vt 0.20 0.64 0.00 +vt 0.29 0.61 0.00 +vt 0.26 0.62 0.00 +vt 0.29 0.57 0.00 +vt 0.25 0.57 0.00 +vt 0.29 0.52 0.00 +vt 0.24 0.52 0.00 +vt 0.28 0.47 0.00 +vt 0.23 0.47 0.00 +vt 0.28 0.43 0.00 +vt 0.22 0.43 0.00 +# 23 texture coords + +g P_51_Mustang_Left_Elevator +f 2290/1456/2213 2291/1457/2213 2292/1457/2213 +f 2290/1458/2214 2293/1459/2215 2291/1460/2216 +f 2294/1461/2217 2291/1460/2216 2293/1459/2215 +f 2293/1459/2215 2295/1462/2217 2294/1461/2217 +f 2296/1463/2217 2294/1461/2217 2295/1462/2217 +f 2295/1462/2217 2297/1464/2217 2296/1463/2217 +f 2298/1465/2218 2296/1463/2217 2297/1464/2217 +f 2299/1466/2215 2298/1465/2218 2297/1464/2217 +f 2300/1467/2215 2298/1465/2218 2299/1466/2215 +f 2301/1468/2219 2298/1465/2218 2300/1467/2215 +f 2302/1469/2220 2299/1470/2220 2303/1471/2221 +f 2297/1472/2221 2303/1471/2221 2299/1470/2220 +f 2303/1471/2221 2297/1472/2221 2304/1473/2222 +f 2295/1474/2222 2304/1473/2222 2297/1472/2221 +f 2304/1473/2222 2295/1474/2222 2305/1475/2223 +f 2293/1476/2223 2305/1475/2223 2295/1474/2222 +f 2305/1475/2224 2293/1476/2225 2292/1477/2226 +f 2290/1478/2227 2292/1477/2226 2293/1476/2225 +f 2306/1457/2228 2292/1457/2228 2291/1457/2228 +# 19 faces + +# +# object P_51_Mustang_Rudder +# + +v 1.94 16.37 -39.44 +v 1.85 16.90 -39.49 +v 1.94 16.37 -39.43 +v -0.40 3.34 -38.12 +v -0.34 5.20 -38.31 +v 0.05 2.94 -41.04 +v 0.27 4.65 -42.12 +v 0.29 7.13 -38.50 +v 0.58 6.72 -42.03 +v 0.67 6.59 -43.07 +v 0.75 7.71 -43.00 +v 1.10 7.67 -43.30 +v 1.43 15.17 -42.50 +v 1.44 7.70 -43.02 +v 1.76 15.18 -42.35 +v 1.50 7.81 -42.12 +v 1.78 15.24 -41.86 +v 1.75 8.22 -38.63 +v 1.92 15.54 -39.35 +v 1.82 16.10 -41.76 +v 1.82 16.67 -41.61 +v 0.34 8.23 -38.61 +v 0.87 15.54 -39.34 +v 0.67 7.82 -42.09 +v 0.92 16.38 -39.42 +v 1.07 15.25 -41.84 +v 1.10 15.19 -42.33 +v 1.49 17.19 -40.75 +v 1.48 17.32 -39.52 +v 1.06 16.91 -39.48 +v 1.15 16.68 -41.59 +v 1.10 16.10 -41.74 +v 1.14 16.05 -42.19 +v 1.47 16.03 -42.34 +v 1.80 16.05 -42.20 +v 1.81 16.63 -42.01 +v 1.82 16.83 -41.81 +v 1.17 16.83 -41.79 +v 1.50 16.81 -41.93 +v 1.17 16.63 -41.99 +v 1.49 16.61 -42.13 +v 0.94 4.41 -43.65 +v 0.48 4.74 -43.09 +v 1.05 6.55 -43.43 +v 1.41 4.73 -43.10 +v 1.44 3.03 -42.87 +v 1.58 4.64 -42.14 +v 1.61 2.93 -41.06 +v 2.02 3.32 -38.14 +v 1.63 1.73 -40.70 +v 1.99 1.54 -37.97 +v 1.44 1.15 -40.85 +v 1.75 0.67 -37.88 +v 0.74 0.99 -40.75 +v 0.67 0.46 -37.85 +v 0.05 1.17 -40.84 +v -0.39 0.69 -37.86 +v -0.54 1.56 -37.94 +v -0.09 1.74 -40.68 +v 0.78 1.47 -42.17 +v 0.24 1.84 -42.10 +v 1.35 1.83 -42.11 +v 0.84 2.58 -43.11 +v 0.29 3.04 -42.85 +v 2.09 4.08 -38.22 +v 2.14 5.18 -38.33 +v 1.49 6.71 -42.05 +v 1.69 7.13 -38.52 +v 1.41 6.58 -43.09 +# 69 vertices + +vn 1.00 0.09 -0.04 +vn 0.91 0.42 -0.05 +vn 0.99 0.16 -0.05 +vn -0.99 0.04 -0.16 +vn -0.97 0.15 -0.18 +vn -0.99 0.03 -0.16 +vn -0.98 0.10 -0.16 +vn -0.98 0.14 -0.13 +vn -0.99 0.11 -0.10 +vn -0.89 0.11 -0.45 +vn -0.88 0.09 -0.47 +vn -0.01 0.10 -1.00 +vn -0.01 0.13 -0.99 +vn 0.89 0.01 -0.46 +vn 0.83 0.04 -0.56 +vn 1.00 -0.03 -0.06 +vn 1.00 -0.04 -0.05 +vn 1.00 -0.04 -0.06 +vn 1.00 -0.03 -0.05 +vn 1.00 -0.02 -0.05 +vn 0.99 0.15 0.03 +vn -0.99 0.05 -0.10 +vn -0.99 0.06 -0.09 +vn -0.99 0.07 -0.10 +vn -0.99 0.14 -0.08 +vn -1.00 0.05 -0.08 +vn -0.82 0.12 -0.56 +vn 0.03 0.99 -0.13 +vn 0.02 0.99 -0.10 +vn -0.87 0.48 -0.08 +vn -0.97 0.24 -0.01 +vn -0.99 0.07 -0.08 +vn -0.79 0.19 -0.58 +vn -0.01 0.25 -0.97 +vn 0.80 0.12 -0.59 +vn 0.75 0.35 -0.55 +vn 0.71 0.64 -0.29 +vn -0.68 0.67 -0.30 +vn -0.00 0.83 -0.56 +vn -0.74 0.40 -0.55 +vn -0.01 0.51 -0.86 +vn 0.00 -0.04 -1.00 +vn -0.89 0.08 -0.45 +vn 0.00 0.09 -1.00 +vn 0.90 -0.01 -0.44 +vn 0.84 -0.22 -0.49 +vn 0.99 -0.01 -0.14 +vn 0.99 -0.06 -0.13 +vn 0.99 -0.05 -0.14 +vn 0.97 -0.15 -0.17 +vn 0.98 -0.17 -0.14 +vn 0.65 -0.71 -0.26 +vn 0.64 -0.75 -0.19 +vn -0.01 -0.97 -0.24 +vn -0.02 -0.98 -0.18 +vn -0.68 -0.67 -0.28 +vn -0.68 -0.70 -0.21 +vn -0.98 -0.08 -0.17 +vn -0.98 -0.06 -0.19 +vn -0.02 -0.80 -0.60 +vn -0.80 -0.39 -0.45 +vn 0.78 -0.46 -0.43 +vn -0.01 -0.46 -0.89 +vn -0.85 -0.14 -0.51 +vn -0.01 -0.10 -1.00 +vn 0.99 0.04 -0.13 +vn 1.00 0.03 -0.09 +vn 0.99 0.08 -0.07 +vn 0.90 0.02 -0.44 +vn 0.01 0.10 1.00 +# 70 vertex normals + +vt 0.93 0.98 0.00 +vt 0.93 0.99 0.00 +vt 0.93 0.83 0.00 +vt 0.93 0.85 0.00 +vt 0.96 0.83 0.00 +vt 0.98 0.85 0.00 +vt 0.93 0.87 0.00 +vt 0.97 0.87 0.00 +vt 0.98 0.87 0.00 +vt 0.98 0.88 0.00 +vt 0.99 0.88 0.00 +vt 0.97 0.97 0.00 +vt 0.97 0.88 0.00 +vt 0.96 0.97 0.00 +vt 0.93 0.89 0.00 +vt 0.93 0.97 0.00 +vt 0.96 0.98 0.00 +vt 0.96 0.99 0.00 +vt 0.95 0.99 0.00 +vt 0.93 1.00 0.00 +vt 0.97 0.98 0.00 +vt 0.97 0.99 0.00 +vt 1.00 0.84 0.00 +vt 0.99 0.85 0.00 +vt 0.99 0.87 0.00 +vt 0.99 0.83 0.00 +vt 0.96 0.81 0.00 +vt 0.93 0.81 0.00 +vt 0.96 0.80 0.00 +vt 0.93 0.80 0.00 +vt 0.96 0.79 0.00 +vt 0.93 0.79 0.00 +vt 0.98 0.80 0.00 +vt 0.98 0.81 0.00 +vt 0.99 0.82 0.00 +vt 0.93 0.84 0.00 +vt 0.65 0.02 0.00 +vt 0.65 0.03 0.00 +vt 0.66 0.02 0.00 +vt 0.64 0.03 0.00 +vt 0.56 0.01 0.00 +vt 0.55 0.03 0.00 +vt 0.55 0.01 0.00 +vt 0.53 0.03 0.00 +vt 0.52 0.01 0.00 +vt 0.48 0.03 0.00 +vt 0.48 0.01 0.00 +vt 0.48 0.02 0.00 +vt 0.56 0.03 0.00 +vt 0.49 0.03 0.00 +vt 0.51 0.03 0.00 +vt 0.49 0.01 0.00 +vt 0.53 0.01 0.00 +vt 0.64 0.01 0.00 +vt 0.65 0.01 0.00 +# 55 texture coords + +g P_51_Mustang_Rudder +f 2307/1479/2229 2308/1480/2230 2309/1479/2231 +f 2310/1481/2232 2311/1482/2233 2312/1483/2234 +f 2313/1484/2235 2312/1483/2234 2311/1482/2233 +f 2311/1482/2233 2314/1485/2236 2313/1484/2235 +f 2315/1486/2237 2313/1484/2235 2314/1485/2236 +f 2315/1486/2237 2316/1487/2238 2313/1484/2235 +f 2316/1487/2238 2315/1486/2237 2317/1488/2239 +f 2317/1488/2239 2318/1489/2240 2316/1487/2238 +f 2318/1489/2240 2317/1488/2239 2319/1490/2241 +f 2318/1489/2240 2319/1490/2241 2320/1488/2242 +f 2321/1490/2243 2320/1488/2242 2319/1490/2241 +f 2320/1488/2242 2321/1490/2243 2322/1491/2244 +f 2323/1492/2245 2322/1491/2244 2321/1490/2243 +f 2322/1491/2244 2323/1492/2245 2324/1493/2246 +f 2325/1494/2247 2324/1493/2246 2323/1492/2245 +f 2323/1492/2245 2326/1495/2248 2325/1494/2247 +f 2307/1479/2229 2325/1494/2247 2326/1495/2248 +f 2326/1495/2248 2327/1496/2249 2307/1479/2229 +f 2327/1496/2249 2308/1480/2230 2307/1479/2229 +f 2314/1485/2236 2328/1493/2250 2315/1486/2237 +f 2328/1493/2250 2329/1494/2251 2330/1491/2252 +f 2330/1491/2252 2315/1486/2237 2328/1493/2250 +f 2330/1491/2252 2317/1488/2239 2315/1486/2237 +f 2329/1494/2251 2331/1479/2253 2332/1492/2254 +f 2332/1492/2254 2330/1491/2252 2329/1494/2251 +f 2332/1492/2254 2333/1490/2255 2330/1491/2252 +f 2317/1488/2239 2330/1491/2252 2333/1490/2255 +f 2333/1490/2255 2319/1490/2241 2317/1488/2239 +f 2327/1496/2249 2334/1497/2256 2308/1480/2230 +f 2335/1498/2257 2308/1480/2230 2334/1497/2256 +f 2335/1498/2257 2334/1497/2256 2336/1480/2258 +f 2337/1496/2259 2336/1480/2258 2334/1497/2256 +f 2336/1480/2258 2337/1496/2259 2331/1479/2253 +f 2338/1495/2260 2331/1479/2253 2337/1496/2259 +f 2338/1495/2260 2332/1492/2254 2331/1479/2253 +f 2338/1495/2260 2339/1495/2261 2332/1492/2254 +f 2333/1490/2255 2332/1492/2254 2339/1495/2261 +f 2339/1495/2261 2340/1499/2262 2333/1490/2255 +f 2319/1490/2241 2333/1490/2255 2340/1499/2262 +f 2319/1490/2241 2340/1499/2262 2321/1490/2243 +f 2341/1495/2263 2321/1490/2243 2340/1499/2262 +f 2321/1490/2243 2341/1495/2263 2323/1492/2245 +f 2326/1495/2248 2323/1492/2245 2341/1495/2263 +f 2341/1495/2263 2342/1496/2264 2326/1495/2248 +f 2327/1496/2249 2326/1495/2248 2342/1496/2264 +f 2342/1496/2264 2343/1496/2265 2327/1496/2249 +f 2337/1496/2259 2334/1497/2256 2344/1496/2266 +f 2327/1496/2249 2343/1496/2265 2334/1497/2256 +f 2345/1496/2267 2334/1497/2256 2343/1496/2265 +f 2345/1496/2267 2344/1496/2266 2334/1497/2256 +f 2344/1496/2266 2345/1496/2267 2346/1496/2268 +f 2344/1496/2266 2346/1496/2268 2337/1496/2259 +f 2337/1496/2259 2346/1496/2268 2338/1495/2260 +f 2339/1495/2261 2338/1495/2260 2346/1496/2268 +f 2346/1496/2268 2347/1500/2269 2339/1495/2261 +f 2340/1499/2262 2339/1495/2261 2347/1500/2269 +f 2340/1499/2262 2347/1500/2269 2341/1495/2263 +f 2342/1496/2264 2341/1495/2263 2347/1500/2269 +f 2347/1500/2269 2345/1496/2267 2342/1496/2264 +f 2343/1496/2265 2342/1496/2264 2345/1496/2267 +f 2347/1500/2269 2346/1496/2268 2345/1496/2267 +f 2348/1501/2270 2349/1502/2271 2350/1503/2272 +f 2348/1501/2270 2350/1503/2272 2351/1502/2273 +f 2351/1502/2273 2352/1504/2274 2348/1501/2270 +f 2351/1502/2273 2353/1484/2275 2352/1504/2274 +f 2354/1483/2276 2352/1504/2274 2353/1484/2275 +f 2355/1481/2277 2354/1483/2276 2353/1484/2275 +f 2354/1483/2276 2355/1481/2277 2356/1505/2278 +f 2357/1506/2279 2356/1505/2278 2355/1481/2277 +f 2356/1505/2278 2357/1506/2279 2358/1507/2280 +f 2359/1508/2281 2358/1507/2280 2357/1506/2279 +f 2358/1507/2280 2359/1508/2281 2360/1509/2282 +f 2361/1510/2283 2360/1509/2282 2359/1508/2281 +f 2360/1509/2282 2361/1510/2283 2362/1507/2284 +f 2363/1508/2285 2362/1507/2284 2361/1510/2283 +f 2363/1508/2285 2364/1506/2286 2362/1507/2284 +f 2365/1505/2287 2362/1507/2284 2364/1506/2286 +f 2364/1506/2286 2310/1481/2232 2365/1505/2287 +f 2312/1483/2234 2365/1505/2287 2310/1481/2232 +f 2366/1511/2288 2362/1507/2284 2367/1512/2289 +f 2362/1507/2284 2366/1511/2288 2360/1509/2282 +f 2366/1511/2288 2358/1507/2280 2360/1509/2282 +f 2366/1511/2288 2368/1512/2290 2358/1507/2280 +f 2356/1505/2278 2358/1507/2280 2368/1512/2290 +f 2356/1505/2278 2368/1512/2290 2354/1483/2276 +f 2352/1504/2274 2354/1483/2276 2368/1512/2290 +f 2352/1504/2274 2368/1512/2290 2369/1513/2291 +f 2369/1513/2291 2348/1501/2270 2352/1504/2274 +f 2369/1513/2291 2370/1504/2292 2348/1501/2270 +f 2349/1502/2271 2348/1501/2270 2370/1504/2292 +f 2366/1511/2288 2369/1513/2291 2368/1512/2290 +f 2366/1511/2288 2367/1512/2289 2369/1513/2291 +f 2370/1504/2292 2369/1513/2291 2367/1512/2289 +f 2371/1514/2293 2355/1481/2277 2372/1482/2294 +f 2372/1482/2294 2355/1481/2277 2353/1484/2275 +f 2353/1484/2275 2373/1486/2295 2372/1482/2294 +f 2374/1485/2296 2372/1482/2294 2373/1486/2295 +f 2374/1485/2296 2373/1486/2295 2324/1493/2246 +f 2322/1491/2244 2324/1493/2246 2373/1486/2295 +f 2322/1491/2244 2373/1486/2295 2320/1488/2242 +f 2375/1487/2297 2320/1488/2242 2373/1486/2295 +f 2320/1488/2242 2375/1487/2297 2318/1489/2240 +f 2350/1503/2272 2318/1489/2240 2375/1487/2297 +f 2350/1503/2272 2316/1487/2238 2318/1489/2240 +f 2316/1487/2238 2350/1503/2272 2349/1502/2271 +f 2349/1502/2271 2313/1484/2235 2316/1487/2238 +f 2349/1502/2271 2370/1504/2292 2313/1484/2235 +f 2312/1483/2234 2313/1484/2235 2370/1504/2292 +f 2370/1504/2292 2367/1512/2289 2312/1483/2234 +f 2365/1505/2287 2312/1483/2234 2367/1512/2289 +f 2365/1505/2287 2367/1512/2289 2362/1507/2284 +f 2373/1486/2295 2353/1484/2275 2375/1487/2297 +f 2351/1502/2273 2375/1487/2297 2353/1484/2275 +f 2375/1487/2297 2351/1502/2273 2350/1503/2272 +f 2336/1515/2298 2331/1516/2298 2335/1517/2298 +f 2331/1516/2298 2329/1518/2298 2335/1517/2298 +f 2329/1518/2298 2324/1519/2298 2335/1517/2298 +f 2314/1520/2298 2324/1519/2298 2329/1518/2298 +f 2374/1521/2298 2324/1519/2298 2314/1520/2298 +f 2314/1520/2298 2311/1522/2298 2374/1521/2298 +f 2311/1522/2298 2371/1523/2298 2374/1521/2298 +f 2363/1524/2298 2371/1523/2298 2311/1522/2298 +f 2359/1525/2298 2371/1523/2298 2363/1524/2298 +f 2361/1526/2298 2359/1525/2298 2363/1524/2298 +f 2328/1527/2298 2314/1520/2298 2329/1518/2298 +f 2364/1528/2298 2363/1524/2298 2310/1529/2298 +f 2310/1529/2298 2363/1524/2298 2311/1522/2298 +f 2357/1530/2298 2371/1523/2298 2359/1525/2298 +f 2371/1523/2298 2372/1531/2298 2374/1521/2298 +f 2324/1519/2298 2325/1532/2298 2335/1517/2298 +f 2325/1532/2298 2309/1533/2298 2335/1517/2298 +f 2309/1533/2298 2308/1515/2298 2335/1517/2298 +# 132 faces + +‰PNG + + IHDR{C­ +7iCCPsRGB IEC61966-2.1xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð +Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX +?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j +õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ +{{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% +5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óûpf* pHYs  ÒÝ~ü IDATxœì½x×u':Ä`†Í$˜-DhØ´ʲ)v+qœ8ÏÍ‹Ýl½IÓ|»n»›¶Û÷uÓv_Û|É×~Þík¿ì˶›4__“4I›Jiã­SÛ ׎YŠhÉ´aR’!Q¤A„08Äp¾sî™? (ÉùÓ×÷½w5ßÕÅp0sqçÞßïœsÏ=7:ÿ;… µQƒO®ëBŽgúÂK”þ°lµÂr}Ù¡ÂŽ±´Qªç›Nxþˆë•àÚ–%D%!*³Ïž<»×Vv×ÏŸŸÊÙÑlø0Á +Kw–û ô¼zýóüÀ¿°ÒaÑqœðC›;ßÏHáyîþ’È}p¹2w^ìã•¿(¼“UmÛ–eÙ4M1*JQÉ´LüÃ*fjB5âãÂÿŸ®#}牃YÅ2-Ûûì¿kQÄné8v$"²¢ëÚmï-Kp²Ýv!Çó«nðÖÂñâ„ˤ¨(Hªà²Gˆ¬Ó¸¬ó¸M¿óÃsYÿgÕbX,]6§ÎVœUÞ5ô:I’à]Õ>üÜsÞñv*^}58¯(qÈçÎÏA^7Œàü}ïýŸ‚òÑ©ãxÇ=Wæ½ñ%÷Ë˦]2²Ð¶Ýû-Xyo,˜M'0Šªˆ«\_m‡}U‰ÅÖ¶³Qµ¹™N ›Í†¹\׺Ù45»¥ª:üg;M1_×ÛŒˆR›ýÕvÛ²‰DEx{‚ì7/ÜAŒ„£YÃçÖ/cE“ù±ÎR4,¶¦Ý²ÔÔ¤°¡éŠc»¶ƒ/ +xCY¤±i6mÓrãÞÝÒº¾xe‘ÊŽíˆ2ž7—ñ‰1)WëK8eÅ«§q¹n¯8j"¡Æ“ì;F±×n­¸ÖJ[î‰V;™|âñ;òéÔ ŠmáõfÍ‘c‘ÞÜûz›u6E’-Ço¨ª +~Å“+ .ðþæ·[L’êfº¥ÓÂΉMB=»2»:®Wh·¡ñ×¾NH3gÙ³5%&ÌÍûýÌ' €Á j~Lëñ5‡áËr…]à ƒ5iÿþýA¹8_\ï²ÿO%B((´WÛN Ë2´aþ Ï÷KÿWñŸ%í{sò#/~è;¸ç@P–£¢Ý‚n/»®7œ\–lg¯F"pQåŽkKbØ{Û>Âðò€/â8j5ÃG¶9¶áð’xcǪ ŠÎ×Pb ˜øžÙGþó'!Ÿœ|vò;ß-ÌÎç*"È]?uä#{÷@þO~ûɧž–åïx'|¼çÀ=÷ÿ«5ùí§'¿ó4pâ>KöŠí¸UUöd,)& ¬Ö)Òh:²Qc’œŒÓµJMPÓÃÉÊBýzšZK)²¼П>ô«1ÕhØôÛ@-b(kvÑßu$‘—˜ýƒýÐáá=×ú×$@9ª8N8@—B|–;R„Ê•š©Æä´®2Hš–U©ÁO¯˜c5LSUUËÁ:¤S@$ÍÕU—П@ñì‚¶1©tÔ‡Æ/ŒV+"ÃOPúE¥?Bòd£MDÐÏ'@ÈôÇ&…GÛŽašŠŒã ?ø“•€ WÄ1ÐßtœŽPyËQÿ„œH4`ûB.Š7‘p€@‚=US¬¦èÿøSÇz/Ÿ©<[€nÓ!©‘¦éKËÔNì…•ò(ÖFŽ¿ð÷áKZÉ-ªòôª-N Y(-å×78a—í;Ο?{>([¼nÀÝ¿#­wþ'™þðÑG –¢€ª¨#1¬8Bâzo5û­Û!?]l½÷—§~‚5þq$-7––ºNZvkê•Ó?Êm'ŸžüÝ_ÿ*ÛLàu“€½ÂHMQlúÓ•t’°>õ$'`èŠâ ¡p ¿'Høï˜(ÝCïWÐóI†e*\cÕJÍQúeHÛ£“üÌÖ’±²×o{ä÷?>ùÌ?Á|ë¹zr}ÆwßûÎO?ú‡O>õÎßþä'Ÿž|Nþ'á?=ð3xäþþwžÞ½ÓÓ¶±çøÃ ”µ°–Ë„D‡5@ðˆl.[¿XŸ~a µ)EçÕd¤Zö°nØ ‘ôçv «©I"(¾v Lô +Ò*p€,Å"¢7:|ýD{0.:†æô÷¾‹H…×§‡õÊBíùç§çæ*££i8º÷.`Œ×jH-S  2P%öst@IŠ ŠøÓHð7MGfJýƒŸ ¸¯Æb¹l +x·š!ø€Ê”È#‘U"ÐÊ• + ?¾=A g.a[É‘>¸ôr ?ä¹…¾ª‹x¢£ö7ê$J2®,” ÐÖj¤X&~hÀb! þÖJˆŸ“ `·Úìú@Ö ì²>è{ú¬¯ô†55U>3W®š÷ 3P8ðS¹lÔl7¤ÁWX]Yö­¿û»¿ ÊZ¿ýº¨ðØC­ÿáÿ0"°æÜ¾%ºZØ×—?ò¯÷,«•Äú—½> D~\÷'€¤ãÄÛu;t_àÐ ÑøÓ˜-ÆŽà’Ô9câ Ñ3µð%†JÔßûl¡É©¿pk ‰ }ðºI(¼Rô?ô·‡ù½G†þ ð(½P.ƒì﻾ 4‚?œ!ñÿ·'CÖ/¾2£!:ƒÖ(‹¡‰§é ‚$û›Mqô–ÈÀøÝi| `k´ó +COÈý1˜Ôäl2V«6‹³5=“å:š€–ë@ ø#ôGe~›¿±F⿈@}رM1"™6ê2.̈d¿Åà«©A|úô E (Üyçxðµ&‚>µ + %C}è‚TJô%@ˆéu¡ÙvÚôKN^£AL=NÆ¢"@?½dÀ$n XK‰Uªøt¢2NEd@ÿZ­!´«ôP´Å“5Ô( 4€Ìy½Þ­K t¥FÃôǶŠ"ÊÃJ@ÓðLî@±„ŠçA h9 %À_AQÈèšÑÄ–E ´³å¼B&Ò@„™}¢Ø +"g´Î é…ÙÊ¡ÿ1­Ó>TÚ­¸Agª]qô x¦ºÔH‹uÓ-^4}kjÇ›R÷¿s‡Ö//…¶ìXÓ *cÞòXN[=©°A;â¡îó_Ð*pfÛ6ys|Ï´>ðóü5V‹—΢å¯z^”UIrWùŠ…ªŸÂkü}ûZ+N×ýù²æßßY±,Éj¯zTj.¡êXø]@ öµöŸƒ¿ŸÏß®Á §¬ü¨òðFðlY(¼†2u~*õßùïùwüòoKùI'x5åE|;šßˆƒƒº‚ ËC‡.¼~釾·e5#lŠÅE6U £Ô†œäå*ø'—Ù…l¨ +ã`Rÿ]J‡Ôõ»e»­6Ü-"(í¶å®Ú’¨¶}éÕµlOPD(¸Š€#ïëóh “ê–¨B­ +RYbbâÐ×=ö…ǼeßÄ;ï*¿v~÷Mù¯†/NÑÂN–Éàx9yêI %ôÑ‘ás#‹‹µÂK³7çrÿ/KnÔ‰ÈĨl»&ûEu¡xÄ:XD N¶’ oÇúvAIi. Õ‹¬zƒéÔ`ªºX]¼´ˆ ‚oßH&“Æ’iG KfÓµ—Sƒ2ŠÒSJÝ0id™Í²ñ0]WÛŒöAJe²?hWžÅÀ±q®¢ÙÄŒ¦!/N¾f:6—Ò« ˆ«†¹¾`RÊ5Ɉ¶!Y{q#øì +p@{Å+ʼn41RAO$á Ö›ОžÀVz×âJÓiÚŽ•T±mÕ¤Î7O’B³¹¤ö3ö2-£\ÎmÉ@¹ò:¾YwU´i€[õ²U‰DÑ„!)‚Ầ͖d™8S +ƒT±¦ÕlÖ,;áÖتNßE’Évöü‘ ø1´šWØô€i5—LЈàUJѤ÷ªHŠ‚Æa8¯Å@|ø¾µlƒHÀQ…_`½¹-tÎFBè rÂ3Fƒ–'T '¥y C褤*&"Ђ³¯Uýüà€wŒ UÿÉ’§`!´×ô'XbBÒ¯( 9Óö€O•ùiƒ¶*ÂwžMèÑü³’ Möu™îÕPÊ“¸º‡3'8?&:7mdÆìžx)~WùçŠ=ï£0‹›ÚïÍ.çM²c&ÜU!˜”W¹z®ô`»H4’Âa ¨æ²IkS~¶à¡/~‘╃·æß?ôtùÁßB#ÞÁÿ’{àþÌî›z~õ_\2,ÓÚüëÞDÜ¥Ë?4ú{‰¬ -Ý–í€À>RÏÄö‡óèÀ ÛŽÒ+~Äëeþ+‚oPâ{ˆÈTbâŽËçú&Á/Ĉ\/¬4 J,Äô©S€þ»'îû¥M}û¹Òk(ï?øþû!?øÇ¯òçÎ-Œn¾ëî½PNg°ÏüêãüÞL¿òGr`¸Ñô¦…ú%4>¥ÉNšTA ­×¬ÆåpJc¦0³ÞIž¡-lAb­.ÖRƒzŠ)sIMÝm…µ|L’ìvw°ÝvGöŠ=œAæç* s¡¥ª±tJ/Ηff¯=GX»ÒÊ–ÛÎÞ(½ŽÕËÞZˆA aôÃÁT ÐTbÆ7¨‰Å«†%÷+ЬÀ¨‘ѳ³³©TÊôU((DúÚ#Àpô16p¨M€ÅýÂ%ƒ%xý’9¨Sæ•¶Øo±öĶ9v»Î\f‡"ÈŠ‡6@ ªJóÁ‚Â$BÀq5*TFK(\푚Ԣ€þ4ÙKü1®Ã&À½FGcŽþ”KB}IX@IÇû‘@J§D èõ^†—ç{üÛ³$b¹|Êã€@ùm…èV(§ úùÄXa+úv›ãlzÕÓW¼ñè*kÇW®c ÄóÀÚtœónŠp&)ËoD–3c¨"š–«*èsšP„›ÓÖÕð…¹}ëÎu[øNwvývk,wŒ +’÷©ÐfN @0RçKó2k§[ú‡Ë-þNqõþÌzû—™†Ò(yýR˜Zv+@ŒÙ{·-ϋö@ˆ€lc5ÄkGœˆ'¡ ŸˆAdA”ÑA ߾㚄þP¡DôiÆÓüÎïúü]±„tBBôGA»~l …šQ;qâ||ø.2èϾiò|~ óWgo¾iG„ëÃä666633ó쳇AöïúíÀ_ûëƒýìƒ<$bxY³å™Ú€t&ð~;Œ,a}êLš¶Ðdaú3ŸPe7’‰d£Ñ Ï ¡ wy)’ÐUàmôj­iØ«m¹/BUöDzí£úe5‰_9úü4(€þ äF²€àr®uŽ?Ž’*ê"Àú¬A¿à½ÄD: è=§š“hˆlìë:ªžõ+–³‚È J€»ÚDk>U²žî ¸æ²M Æ¤¦Õ6^™EZú#ôUåF.@¿ºÁCRH sœ‚Vëñn +’mÙI™ úáO ­(ý²µbÂ$˜ðAÖ<§åͨ;4õèÕܧ²Ü'>ˆ¿YÈrAèi8# &Ô@üç“ÅìM󗺑hò3¹WS¹›½Ï„•8´ÂøQQô'%ÀjqJIKäM@j‡‹%‘„Ó s™bó-óñœàÖn]ͦ¤tšVT¥û‰ë¥tB®4˜ÞÀOÈXá³NûÁë5Ÿÿ[ª*i<ûláåÂÄÞ}ç °Ù$Ш÷¬5NZùÊ+?Z-ÿ¦ÜüàKT€¼´x¿ÆKù-™Í[sO}§cæ`PS k½¯ü)£)CÙìK…nÉÄÿ#Çl+›{ïß²¢úe’ÓÙ|XË €r”`èà0Äg ïß'М9P¤8â”÷L1ìö^n[ÉþŒdBÿ®â?€þP.¿vžÄHÿðÄ“äÇf^C‘üþ{Ñâ?[œè§k@îC%€~ýëËÞe$þSa¦`Æh‚~JÕÅjP&ðhÀï· ûëñЩ‰ŒæDÉ8š€š +4ЯÇôNiÂCE;0oÚ †FÈ Ôeçýk—j‡ŸÁ +“ ˆŒï”“ýǯOf\ùú$—“¼Y[èS}ñ? ¸_,6TU49§-@ÇŸG›»¢4›øgÿ‰@ p#®,É@šŽ†Vÿòš¥Ê à™€d6#¿3¾ZØ\ó—ÿPÞHªÆD2Û¹ŒR,[?^ô‡d,YÖ…Òf&ïnÔ¦^E&Т‚½Ö7¯;Eá µ\‡éõðJZ®N-û@À|™)»NËnûoX•Ø*:\ׯ°9=1|¿bŸƒÓ•ý +² h,&Ñ2"tqÑóÁKöyNJ±~eÙVNÏU^Ó4íØ÷üÛƒpNߘª]®BÀ4{z&5¨üæAa•öÜâk •‹•…צ5MQdqˆÍÔ«ÙÌ èÐåR¥x®P<{füfœ;¥‰ÐÆJ¥nWU) NjÓVq¦–F´5Ñ +u]„|`‡› 7dýw­P )™%¸R‘Ðæ0L¡äâJ”ÖìàÒ’3V£ŠëZ²¬6[ÌO†yaZ «O’ûÙ@tMüO”ÃOŒ%áÀ]»+‹Øc-æâÕ‡›3k.y(ã"˜¡±‰Ì5õ+u(’q ßhj(Q«ºQU%¥fÒpPÑ‘$±í ¢¦ëY˶k8§ÚNÆ"ŠB“”j:=<÷Ä÷ [7{ÃJ‰p¨™þ¼iÍd E ×.Š>ÔØ0ªÛ¶£Ä–L •+!šmâpŒ[{$+~ßs…ÔÆ¤L ÕŠ©’ð¸¶?Ϻ!“ÝHÐ@}ܟμfúg3ÝEèÿ÷Ϙ÷Œ)D×ó·µà€ý¬º÷¼ÃÑ—½êæ·)…3ÖÁo¾?»ÎwÔڀíT½‚M“ì¿ÖÕüã’å¶»NšÍõõ°•×–Eî-Ôú9àC2.×—z[ÛÉtÛÂê+V…ÁbZ%ÅÐödù6M-.‡/ª­ñæ¯îú$õTrã Ù¨˜K‰«6:TH"ÖJoŽÝzä>—?ðVmòã¿„ÔkOOXË8bò;â‡/ÿá_–{~q½T6¬Ég&?øþû wÛ-@ÿ7ôõëLV m°¸oâ¦\kyió ƒWÿÖ˜\†eb·½Î²Â—Ã޲̚Q‰1¨1cE ÈA‹Å“¶ÿ.÷ îÐçÑŸX!Ð*Ö:/¼ Eáü|Gsó%Ès[Çús[…âY”ñý!Ÿ}µ¸c UÇþìKïDX€# i(Ý}_–¦_™& T_é0öÎ=ô¯,TÈǬ ýAõÄÊs¬%˜ûxÓnÂå&s¿!¨”‘–€ 0ˆ Â0¹cb“ZͨïY "ÿÑçÑ %@ÿ q¨>ÔùéYîŠ+w®."—\"*\ôÿl¹´ÔFlºj…9³% 0rC2&ÅšNxWI(¤á)ÌïÔ…›}<ú\R—ÖBíêä±P[µ¬u„ªhog“N,?æ9gîÎ>ûü³Ü5á}bJèÁ˜ôî³÷-w­}8 ¿q¥j ¨kd]•º×PúÇï×Bÿ®xæëýב¿ìþ„qïmÒ¯1èâ€ÉgŠîέýVƒé¿ÃY 6¦ ú²¹e× +Ýl‡`*ñìÅVT¦âÌ–¨²‰r‚fÊ#«R’ ï $9)ž÷ºq™·_jƒZ½bŠ‘5@Ìîßê&Í7÷ ŽE÷«Fw«f= À\Qê53Àðµâé©Üö  pó*[ ½÷ßwØLÞtÏÁ÷¿x®˜ËåŽLýÄ݇àÕ\¨Ôà o(à€[G‡Zr¼pæG]hµš}–ÙôXhukD–€@(Û“ëc1Ä*ïú&³üˆQ ¿Ýr"Q H:|FDôÜþ:<p"AUUÀ}P§dæéé°i™õáŠé¤U©n!Àéšù›3p ùÑ#SÓ§¦éY;¶í©\ªÀ4P5 ýƒjådZHŽ/ÔñLÒw(Áßl˜€þè3¼ÅÇ9L“&ú¸isým6›¬œWØäÙÇ»9 RK§u2gô;¾#f¿JÇdð´÷Îñ…ó^ÛV.u³ÔT–à}I‚dr^ŸWÈÿià€ºé]ÐÅ¥Z)«gÙw ‹©Ì¾ «ëV§·ÅÑ#‡ƒ²½¶PûFÓ³ÿô|PÖ´õîëM€þT y·é´£Ðæäûï +m™™/ý!/•žýOÎ:_úf©{EÎ5àþ‡>aN{ 8 x®Çb‚ñëgŽ!úC¹pºÆãæL%É8[¾ÁÏ x“Ò&»†gHÎ3*,Þ®öãõë +MÎ 4ÆØ˜ Ã ”¯Ðu¸Šòu>¥ŠíPdî}þrÐŒžØ®ô h„­º1Aí\²@ËÁ@`ÁoLÚþ(B(üÀO”´¸bpFKØ ‚›ÈmûQƒ€& Ð?t…›!ºdV¡1aˆÿQa×£àØŠ$×LrqÕérï!_àR8<…€A?éÁ5FO 8³„þ^SÔ‰Hü§B*ååÄm»Š¯- V"âWX*—Ãq§1‡Rý;ˆÿ‡è_7%mYê\“Õ³}½ÿ-ÇR¢!¤u¦U0Ü,ärYà·O"g|8¢l¼å[Eççð',ÌyÏ=À²ÂúðÒÓ9Ÿ'н•ûêeï»<Œåq é*=:{7lš–¬è¸øÖVpMžÜ{Ûž_ûw-–9²çݸ;ÂÒàý¾pø3ÿíS÷¿WðíCÙ7X×òÒÉÂ`z(çOÔ?ö™'öÜ>ñÑ_~˜oCý߸…â|?QÂ:(qŽ„8<™<òÄÔK!WyTbK½",ÏèJa¶º0gÄ¢‚SKWðÒÝc’&)O¿b}îoÙú´ ®‘S1_‘¬¦¨I¥sæì…ýÎcîÃ÷Kߣ<{2|7‡/<ð¾ñÂLEOúÌì8ã¹á¹ŠñÜËHBäZgVÅFÓñVßø©Ì ÀW%o9ßøUmtÉÂÞGU‘Üü­uÅ1½´¦¦U˜m7PúÌײzˆØè!@“ïlEd®œ¦Õ=$¨žJ¿°Ð8«Ð0qfpm"/w¨0ܪd÷ÝμÁj 7¾ùÞtÖÓœhå$ÕÊ]u%QBÃñOr‰òÄ6â¬[á\¹ðÒ‰ûîÞWœ›/œ½ðc–¦(ÑH‡½?3¨Y… rêÕÃ[¶c-¹g€åŸ…,Òí¦G2™ìxïQœªWê)UBI'¬v?'døx®½Œ¥5¸¿µl*죹T§ø0älŠ®eqUZÅ^´g7šJ"›e µN¾T(Î&5¼xïÄø‡þí¯ÏzåÅg=zøûG¡üî{0ÞÃÉ“S€°š–…cï{޾püÈÓ'nß½íÆ‘‡?ú°Ùðxèìk³ßü;tuÃj’ÄÔM[ТÙ³x˜Ë œà¢“F½Q‡Ä2gÅ!‡cÒÖ¦d6/Ýöüá¦*À9N1ùÊøŠ«Øï…I®Ûý’Dn¦¸°+è¸+®Ø8‹e(DD‘|„iò\•#ÀPÏÀ—Ÿþê]æW#& ¬æÀEj žƒ+›HôîÅÚR¼ŽÒ¢Qºle7*ëF%aT’ZØáhýˆÀŽ®mÆÿg>›óÚ§É)1®ÊU} IDATnN¥TvðÚF!@ÿEúÄMö.P­ÎÏÿðXüS{oý§£/õüSTŽ.Ö;ôÍD<Ç{^üÃ¥ $Bs骢šЃLßhtɘ,Þš7 ë¾°¸ÊÀfAÁx‡ ÆÖû˜Ë¦8 èß3™K&I¯µFèŒèÿ¥¯Ìf ý!Ÿ>…pŸÞ4\¹¸pôèÑðÊ“S»vMÀœô‡ÐòÝ{ðü¶7u=ô•ééü-㦹È~—7üg^.V+Þ_‹þ])½)3 ›°OJÜR†úRØ€¼„ +À(#Á‡þE–KLß‚Üî4fÎtz‚îW:Ñ¿3i\,¶ËüÑaµý ¯U`ÞiM¨¥Ùh¢úT*õt:IyݬÃ1œF+|»µ Çú±†Íåf~l7…™ŠªW*Z= 4 ˆ2¨ãÁôCñV;·%èOg>üs&žD2ݨ‡†¸‰Ûwá̼Ÿæ.Ìßy×Û¨ =­rÉŸfh¥ÿU‹ÅØnIqËlÖúÆíU®l!íWÞ²_¥¯ªÀØU¦`úwˆÿ'fœÏòÄä=7+ӳ̪>@Ë„µèO©¹ÜŽ D 'ô§ü÷þÒüäGÔx øÖÉ×ÔŽhX, k(¥+=ÏóÍ—eu@B%Àå<…¼Aé ½é§`^.@nÕŽ—T¿+«ý¢é‡"Àß ¼æ£u'›¹J¢H3 ôÓ_Iü÷–¸­†ó]k‹ø ?á>(òÆ +ŽÕžƒÐ?³E)3ç=Õ2=|h2×íᥩ3Ý× jqkUè5¯7½ðƒ—Öã€.ôÐù ˜·r™¸6845}µy €J­9g@GªÔŒä€×þ@õ庞ԛÌóÏ®„jMöò’äv] Ç$sœ¢ÄbÐ-U³i’µÄõm&èÔƇQ•üÄÑ“’i~08sY½K,fœ åJö"Ö¡rq>½iäcÿ˯=ú|†.èÿðGÐnðÿñW•xö¯¾ø €ÏüÉç‚;L;qhþàÚv(¼<½ï­÷ú᪩K• ôzu0RJÎY`‘Aá$( £Aë,ߌC7q¯¸ÄÍ'P¸ÐÇ!¡Cã‚âÿ4PÑ¢‘Ô‚•WAÿì ˆ +·"Õ^Ç¿k»¶ÝôGXu‰Ñ!¯_ñˆ*¨UåR ¡²GRM¦’©€ùÍ7…, â?)]¦'€~È'Ÿ™þR/C¤ã?Ã]ù'¸¦…»nTd%Iâ?ä®å:uVíšÈÞ=JÀÄÝp@­ÔÒo?v­¿±ô#`_…ºh§Ï]ïã´x<&_{ž cè!—L&½…¬QoØCR£´bˆ åAÒèIò¹Û*ÁªÑSÏiµ6ÝÁbãò"Ù€ζKsZ\A%€™bNM¿üõèÔ4ÐÀ}›F*="ãO@ 8õâ `‚™³eú)*°ã&©Ï¾6{ð«‡@ö›Â\ô‡Ââ¥/þ¯m4 +7¼Ec€ûìš)@ .€“p†Q«Öô”^óô=€0wx3Þ”È6Øèbo7ùgU*èOÐß• ¢úgnÐàµlíBí®–J&d8àcižM³ËÄ®NAꢠÜl¨8œjÂZAS) €¤ þ¯­Í:CT±@ˆ_6c*­Ýݺi9r,\tc±°ÏVånLa¾Qµ/Â%¼¸ˆÕ²æŠfY6¨ÞDQ4f x¨á:,šVÍT7¦hRú|± ÅM0W–r¹LͨO~牺?wS&&ÆŒ+·àm—?ÿ³Ç ðáýHcO>áŇ è 5ÃøÚWÃ%êðp$Ûôæ‚”¨V«¯ÌœŸØ[K2)r¶0k‚Æí›[Ýìxâ*ú2µ£8pÈ©)¿-Ô¥r©PðÚ9¥¥ n‚-Ã[à˜zyJ‰+®¯C‘·•mÙpqŒÁ¥,iõËvD‰±¦¶ [WÄìæô‘g¦ –’óúZ­f\6Y[å”´AUßí¶šÛª×.[åÓIÄ¢0Ö\sÃ%7*¹¼¾P4ë4>zÈc@õv;‰P°Jµ" HÍZç„[wE†gEV#1)†¦9  nbLÀ÷ÞûAMË”ËÅÜyßyoØïEl¥Vž˜ûð/~ Ð~×®Ý{ƒ–܈Åt½ÏM&ÏNŸ|û· 7ZÆ3w#òqDtÇ_±ÚûúÍEý•[ÐÙ;’EÜDi€À›Rõ%CéOÚð–ãÑ­÷H«ÆƲYœwÁà4–BÚ Çʵ†”$µ#A.Xp`Ó\2s[4ÓŸ¬ôÐ?£"ô£¿Pe@ôÇN_“¤¾¾½;õá‹Ð}%»I }î¤sçIg<¯NÌô ù=ŸnÌ&æ^ï–;ÒlÂÙs«geÈáh^¦¥{ÍW§“Øù*WzLg¥4žÙˆ²^±Öý°´¾®=wmâã&y_ß g•ÖÜÖûk¢‡MÒ¥Ò i¯å=}Þ|/gЇþ×bóØÄoÓVûúo8öçæt<.cTN å¼g™!§ÌûÞ’+œ)­Ü R\ìxtnP+.ö¶.e7Ƹ‹¾GŠžLôDÀ^„rßtiÑ[²œÑ¸­v˲ñÖDÍf†2™Áâü5ÂE´–kÁz}mýAçÕª¦å‰¢¢ëÖ.U‚ë5ÃŒ1+* K°_hдÕ·}¥¦ :ù¤¯²8À1¥[ÍÅF–u@ûðžŒdYÕúÍËž.^(xnšF­¡éa°ïáaO”e¥T®–˜GM͘Þu«'ÑŸ™)lËSÎû< ?’ÇBrZ³:{zV8-Ü~ûí;ò;ýg^QýåЄõ »P!HdÜ ôŸššÒõ¹ô'º§€V蟸e(‘MQX£I«éZÒ2›ý$ÁúC^ºP] ÓêP‹? ÿ‰c¸NbÛ-éäFµ~™Åb,›Ôcógk•×­ü„.Æ A;€Œ€©„ô€êåÚ ®A®F-]Õi]X À¿ómïËdr†áIÜüâеiò©ƒ¹­7Ÿ:uj×ÎPÌg ËEŠér츧Àô÷L’¢9–9 «Õ¢œ,Ï‘¨Üî\Ø”ô]ëKF¬_ \`é䞉»ŽOa´p«i[¬·sp¼¤'ð¦@Øâ?ý)Í4Ȇþ¾'ùÁoß4’ÌdY`r]Óe €ÜV¤bÀ}øYÀÞ“}â06 ?p@­êÄó/ÚÛnôZ”€§Žïò×¥ž/5îºmx´Ôˆq~$?ŽWü™(ÀáŒ%âú‹ÅàJ⃛rE¶™Ãi-TýË–û„«¤JͨóNGýb©ºî: àü/> «+=9 â×abK:«©%¡@~ÂÛ'‡Ræ­¨ôca½å`·ã4ïŸüæùÇÁ˜9Q\²©tO!<ñ}ÏÈÞ…þ쌑Éæ{¨¥ËêÁ¢ wéë¸]ÁŒÛ™$Å¡ÁAá jåÎUÇš7ŒŽ @ÿë á,&[I¹õ|Ï—‘ÿ¡—¨Æbk 8³e +Ì¥ðú[åó•Dༀ˜!ˆð†à+Æ’ °Cg0🿉^“ó3kfØW^Îç¦^B&Ð}›;á8ä´)J6“ôÙ_Àyãi@ÿ{úA@8Òƒút¡8žGÔa<ák¥R-ˆ]¸VƒívBý¡LkÊ2Ù ¡?Ð@vs=ô;Hjc*KôgÓY8æ/Ì{¶j [vÀªEúÞXžøíÉÆ>ÑàþU^"6ËšÛ¢úë æoÕùлÁæ07oÌžy©Z˜ªÔ§¼‘ £ÀÐ?‘ô(v±fÀh‚£ÓU[¸çíÿ3h= µbê‰4Ñ@«£¼T<û +hŸú£OÑÇ`îPä" àeç§ Ç;÷G‰T"‰ÓÂ1I4 bª–‹*ƒÐæ¢PM‚[%üÁÖ^]‰ ¨”ïv þw4hoMâ¿À†Íú <ôžmÚ"+ \ºd‘  „b3- ~°9²IÞCñ§>±Sâé ?Pî{«×ô <õý ôÌÀäG’ÎÖ÷µrÙE#à}/ÅU>ÛÓ>Ý'%6{Ñ6(ÑÎp^âžuëjh«m­C Pωí^ÙἘ¤·”T¹¬ÞŒ·àHcìGª¡Vë!nîk Í®=™û«üÃXlpIXÏ †ïq­ÇúÚè¿=3xºìIîë×~ +òœÓÐÚ/.ùïX‹{ÀúÇA›G;?^»bA R=hÚ´ªÑޱ|´8§‚žÁXtôêÞ1XI…lF‡¼ÄŒÔð¸JךèìÍÂyË7¡€Àß ¿Æ<,ú‡¹?úSaçx)˜ ²Xñ¿²ˆ²¡¶šlÔM² è/0Ëð~8`þÜ<íBCa¦¸ßë±%ý3YŒSÄm RzªÊ–íØŠ÷ÜǢP»\# €¯[s¹©mèXÔBJÀÚ_~…—À1—ÄÈ‹gkúã–æÂÙ +( ]ÁĢᜠ+âÿBÑ„ä¸vÒ÷“¡Ô¨7øÙiª$‹¤+:â?{zØ&ý@XŽze°Q<[8ð®ûì#|ýYlÁn¿Ðäœl Èï@¯¡À +$±…¾¤x÷g… )%ÆWi4Áüsû›ï$ @aýò¨¦ƒh¼ôj ÇÆ0Ü’Cü'¦‹ ¼m#ÊR ÝÿK‹8bÙÁo÷Þ‘Ü)Awd/+¥Š’äYÒµ¤Xœ·vdÄ»ÔÉÔÞûžìýú‰S5Ô–DŒ€Ê”î¹’:¾E>‡åŒfüÓ”;v)P8!«uË©\¬(¢0¬©1?ºÅ©öL®þë·lÛoT*—íöŠ«÷ót×¶ü5å¼…€¨p bó–"rLŠx‹åš–K.*Brø¸ÊôRúÕ þ+ý¢Q·qw7I¤mÞð+‚,ÿ‘üçâÌp¸@Æíèì’è´"e²)'c „PÖä~E–caúYW’ƒ(± ›p·XGš‘àbAi(­–öøÞÒm?ãͲ6§n@IÎmÍÏ6¡](U L+NQ!?·ùf£Qa²fÚ­CX¢€ŽUÃÛ¢ LRôç/Ø×çL@ÿ…¯ß§|g‚¼Xáwòfî €þÝ;‘–K8',*L“˜.Úã[B¨zá”uÇ®ðY“ùVz‹§0¢iãTðöÆ|i¢RçÃë³èÐýr­ï 8 H„­àÇ üLULW˜A-“šmÕváÐÙRi¡¢?A?åĨ@@Ž>"€~j\$RŒ;1×+? _Ÿhùßj2<Ô,ôT*€@’±í&P¨/V\\(p;ˆ~‰¢µt­øÂ¯wÄÛ ô§´ûv”,VOïûÍOÌê«×å]óÒ¹0phö†ë]ø¾´´tÿýW¦‹7çÖA-¯ò·LL~ß[²€[ÂDþ‹JÔã—2Û-`sfðByqÍ-Ã¤È @jtÑ<]L!›þ­O ×îúœ…óf,´gÓnã>æ;ð%@¿Ïe¼-Á¶|æëjþŒ=\Vcb8h%0$_ר¦×ÐO9\Ð?)Ìç’ÉŠ#T+ÕTá»Z¯úóéðatöØ}zª”ðn£7b̲¹ós{ï;@¥n,\X ™·k‘#ïÂO)ðqÔ5O&1öì,±ä slûÐ@±ˆÁB AA`kÄ®ò.®™êË2µƒm,¯X©MJŠ™ª­Üötñ´g£¯”ñ[€þPÐ4…67T€Íw@Dݨ¾­]ißžwS¦UZ?»ª’ø/Ðü6n¤¡)ôO~ò·Ÿý.rÞ2V7q¢ ¼É•0¢)ÉþkSZuý!ÎÐèGojì”¶î£=ŽeÀ›Î­û.}+NÒ·Æ$qµ/”¾]Üy‰ Re›Qâ"Æ8Ra¥OW%àÐVÝð7j^¸7<Ó` ª²Ë…›îJ4¤q¡ýP¡ú“†¡¬ØÉ‚~3mYÃk-v§cŸ, ¢"8Éæ¯Úç/ø…Oþ-OXøØ¼4ùœñÞ_+~á×3·ë@û×ñO}u½'\#ÝzSî¥WC_ûŒ¦@ßýÊ7žà¯i,-]X\W€/[ÂÍW}Dñ¥r ÆFp1KQâJ4â]¢´‚Ž€×5€×Û¡Ï,Ê쬟ÐܯÂLpÄ&w0€û¨·IŒÂWmBÈib3&ƒ°âPduâA?yIlŽJOh@† 4 « (ÜÂ>¤°–æç‹Ì#òÔP +FÆœgƒ}àŽ;\G_i(ˆ$´A@ Œ€ ýÉç?-` d¿J¿ À "Ò:W8Ó¢îϾíÎï>{ø“ŸüäÚ6é\-Œ¯ 0[ÈïÈ—.Íû' dÿTçy Ä ЄBŸÓCÌkÍDHù·¹Òam= TÁ6ÍnŠ*`­ŠJ¹7ìïÕ·2ð(ܺÓäZó̲Ì;ÈS|/Ž~¹É@–dy)Êó,™ô€Ô•äz8Œ%d£±R¨:ؼ È +ìw-Ïþ(ÖJ·¶Ñ¹IެFœbß%…ÌÝk5' MlIýа&µ[mH{ ô{í¤G¿n<ò;ú È ”A¸ÊWz¦<Û•©ô:‚Kv£Âs@Ù°ŠçŠ|ÿ}<$âñ«YpáRÅøÈÏ>ð—}èêÏ…1Ò¥ðr«G•ÀXÇï¨g²l¬!5škWer(îšI '~=Wà@ L@üzro­[ÿ% +´à+\+Ló_!ô}ÑêtqHõ +‰d‘‰À ½T€ò‘gŽsχ^x¾è«û÷ï'ô‡#;œôîÙçýoÜ2zøùãÃÃH¢ Ɔ7ӺܮԱˆwý­2€„³ÂäS“„þ}ö±òbùc¿þ±ÙÙÙÇÿáq€~¯ò ÌK 2õ¸ž¨^®¯Çý´,£ÍíX$uC8:/6'¿5 èyñLå÷ßrà=yàøSv„Í‚0% |®CNZ»‘Ÿ€ñ_` ki~UòC<) ÐEܾØe¦!¬ ?h úôÓwyè_›hßæ®4ýŠ'͈¢šë^È}ý‰Ðÿ•ÓèÆº¦B²Kƒq÷‰Ôéô¸ÒF[¬}–…ùE+—‘Rª2¸A®УüM Ãh× W×Äá”´;'Ì]̶˜Þà6š^ÈNU »^w’IIßÚnLXÅÙ¶q…¶ušK +@ÞÖiú,ÑìùÑܶ­¦È†vußGRä^3¼rœ,ŽipZâ<Ä>!ƒ¯Ñ^NÛTQ ¶Ó…KCsÕ:'èÏòƒÐ»gתC~_gU¨&íå]Ö÷ %;¾Wæ4ÍÖjß’Ý^bË£>ìã}(FîG¢rÇcDª¤ 9$ó>¶ I‚„"Õ:¯0-ášWøÿ ¿ƒ®™I‡Ö˜Oý:bïÁ.AÚ~ÃÐæ'9™º0WòB%â“/žîº¾P(f7†/t‚«ˆÿ”N¿^Ûnw°{NS2[rG^ìäK‹¥ìÈ–ž7A%`És5Þ·'=J€¢ènKv¹Žn`²ÐjRÛО²?y#Ëô®=Y¤%‡¦!U¸*âlñ—ë` 4ù×0“‘ê¹ÿ‡ÛO’ž|S©ù›Å³ä®ú“ š–HL¼ygþæm…WΜPƒ0pŽ>o©:ŠZ +¡`n@VËÚû–w~ñ‹‘Ëe À"ÆJ¸!»$™Žã-pœdTSÝ´à§áŠ”/}ùk;wŽK¢T<3%Ýónrp_mµS鬢$c +®óöpqÇ@hIQvæóÿ•ÂáO‹kΊ'/r>tP%9{Còw¼í¾—_ÅY•“ªÚÃa";ØŲ£ibõгÿVìv€û +>®¦yn6£1¯±VÖ…FSXr„D'a†‡ÕÈ•>}úøèßu&©¥{ÙO:îÿ¸nìä•}#+~ÄD>´ò6uA†í)¦/0¿ÏÝ·i(é·„'—vïòà{_ÉïgÓ/¼| €ž\¦W ÿ`XÖä÷N|ì?øèŸп|ÅÀÝŠ³§xÿ}‡˜Þè×ô%£‡,o\+íz›Ø±yj¶Ç<Zÿ™ŒmWX•½ðMlŽ‘…hF¸ïCi@éG³]`¬˜Ç< IDAT ìWZͦâ‹Þ +Z1ÀÈ£½n c²½¥ýUÿzº[¤SñôS1ÌàÐ ÀÌË3€°ÛùÀÝx/×ø„–œüD>ˆË¶û6´‡doHçÇ<_Oà€~yÍÎóåç„ÖKÙt¶Ta~÷[°’O>óä¯ü›_Ñuýñ'qÚØÖ1Ð<øëÉD—¶Ñ3zÕµ“ÈD<9’š’æ6KÙ{÷Ž£ÏÌBþÀ¿Ù'ØÂä“Ó¹­éâYÏn¡mTjµ¦“š›­ò©~Åó³¢°Kã;÷®5‚yu¡­Ü˜léüØ_<ªÈ(™Þ÷^ ý¸¯ùÞSpM»3¢p@Ó2vîìáĸO9p€Àm]NQ L£¦júÞÛ÷=vrú“„–‘É‘sMV–U‡\Ó†wlÛùø“_ÛŠKÞðîJýT= Ÿcá‰nÔ…`÷öD :±Tg3…‚¡ÝÀm “ਬï&¤:† L­=OÑ&\.ž»3¢ôõ…«M¿²òeË] »`…Û{2Å9Ÿ‰ƒ°‘îå|ɇ~঻·uKÇ•bÑ+—¾¶çLWJo '’ƒa³Ðԥݲqö©O„ñì¬8]V _øãòÿ”;ñÓÝ»´ý!9V#¸÷?tKñAñÿô:¾4Wñ¶ø«¯z×['žú^sèõȺ‹–ôweª/g°·l§ÂKçJk¿H©Tž?pç¾/NQl¸ž»ôÿ#=F¯Q«áÔ’åq£Iìk“YqÙ2 ÀâÕã?Ä¿g½©™Á=m›Û»‚½•³0°·&1'  ÙmÒ$°qØî•r¸Í%@ÈÉî/° )È3m‡²paáè÷Ž÷ÐÌüîÛv/[hÔ°«ƒPÚˆ râÓ@‡þþq€~¢”ÐûeÚ ¥GCS;ˆ"ï,O©Þ¨gi€*¬É™sg¶žÛZ~¡½|ãæ„#`œÂÙsln÷Š·«ý\EP¬%S×9ÿº“NKé¤ÉcÍý·ë3gqÿH•­€-Îãݵí·“¢XKnPlÓ.-eF2ç'Þ‚þLŸ:ujŒ[=ÏËPZ:\:Ôàçò ©$NŠ/Ìwìð4_^ºçÍO¼.Ü1ÃÄï8¶N0¸ŽÙ[·Û¨å%.Zè·8Öåj1Ìéï&·;µ÷ä‘m7%S¡(NzúÈi®˜ð GµnXÒîôlø* Ø“_kò* ù˵X-xô/Ç—‹÷Ýsà‰§'»oÛJkD0 ù,Ìî®MR¤U*)Y-^Z4Èí‡å—´LÆ Ukx(;¤­5áòj^A½‰Ã,¦`üJ{…Möú A-àÈl^Ê^iÊ’h;.äýPp›¸M+…²Vœ˜,zqÛ.iíûÒ’‰FäΠ¦éH2œd¥6|4ìUÏÁCI&€´ò7åwlG†k,µË¤Ó# óÅ>ððÑ#“ ,æðÍ7ßñqüb ¿r¾øÚž ŒS3ªÇC¸×ÃóN¾8}âÕÉîkX@‘ýwÜmh-Õ +³¸Ì8¿c<¿-ŸÍähèÞjüÂ%³KïIܵo8ÒrÎÌ›[7«O©ä³j°›I»É¤ìáâï[Ó/CëˆÕË6©òrÝ»87¢&W°Ö¯àÄÝüüÂ0›Gܬ4c×Î]üDkÇú!®Ö1~—œ(G«…Ãë¹ïòS½z<¼Oxp;…­¿éWîôâèyMs]ïòcá¾À•y-áx¹üèéByq3©œO€ãe?fäeCø¥%ƒ÷ðé® ÇÙA­ÀÙˆp‰€±TâæŽ\5 +tš¶e-;Š¿3¨½âÛ| õÉR4â‡kõF;î(Ffá°ÛæÌM_ˆæ } P pF\¦ëéBÜdë}$YáCáßÿ¾3œ‹­QëéÞÀÙœ#˜SV½i"ÔÎÍŒÞrÅôÉ“€þüïÍmß¶sç8@ÿI·HBÿ±[ÆŠÅâôËÓã,ͽ6[*wD—ìJ yä6 Ê}áèÞ;ö’α{Ïnª|$KÔ™™™£ß{ªäýÆÎé + Õß÷ÿ1j5ÒÌç~Õ¾U3º–q`h@­\¡0¸IƒC@ c$'@ôŸ-ÌúC.¶ZîJAetßþè•G¯—öì™ø, É÷Ï“ž?ìm °ëÍëêJãcÓ38ÐZΜîhˆ¤*ÕMçž;¤çwJÏ +U$â€#ý÷îK ûÒ'U?Â%; þ×)ÚOT¿`ÿÝ >ΚÀøæ6« øiáÂüÞ}{ÿæIŠ-tÚÚt;|t¸½Cy€îtÁ¼vXàÿ‰mª•Ïï(€>â›­wMìâ5Þ…ŸŒ§”H˜ej»ªrš +'íoÛ¶mϞΠz?ŽtzþÒzp=éÂëëšòBiszíŽë&k¥É¢by}XŽvŠç,´z1‘€o™-‘dÁ÷ +>¢_?:.;¥¼ÆV¥Ðb1²Dp&¤ 8ˆà‹p8’7NW¨c9 €ÙÚ¢ÕkIÐt-6<’ñ_`‚v&›)—ÊS?À ›{ï¼ Ž£Ï£ûy€þ¹mÛŠgÎúCù”ý]顟í6>P¢þÁ^.‚b~až,<À£Ã£‚¿0È€ŽÂ©)Bà$ÁŸ²¢Ûv¡ÿØV¶¢‚”V³ à° O’šG[Ì¢7y? ¾TNP©XýÄBÔHmÒáÉ—¾8=U©ÌW ý±2Ì®+q6à§ôPG¬æ}o9päû“‡N^?€øù;ßñ†½«?û矽ý¶Û÷ìÞsüÄñëü + ÿsßû.@?”OÄÜl„û>öqÛ¼ö‚øOÇoÚÀ¶íZ@è¿s§L¸è',DnO“øP¹¤•ü­}áu?ÖÒÒä3 ‘I€ûhÿa‰Œ?ÓæjõN³; ?èÐí¯óÇÿ¿1úóON$⿵›ºA ÊÁÚKý7ïñb\1~@<º}d¨a4ÊkëfÒš’Ð +3ëŠÛ/½üâL4–jñx¯‰ª7’FÒ/þç™ë÷bÝÊÞÐ#âPW" @î—°À‘EÝòboE=ËO€þüȵŸwðg;û(ÃÂKJWàvaEߘ$Ùõ€¶âÿ0³´€¡Ù^/Úà<ö™?yè#?ðµ¿ü"¢ÿ¶m@“ßúǮۂøJ@u¨:Î6à{]&‹høÚ¹ó²,wm Å´€Hê?qüýµä³>þÅù„,$øS2¸Ž¢M‚JÀb3=èAó\yx´Ý¹qp€6¨ F¬êÅZj“4BU¥dVÊ&èúCÂÅó¼…YUôט@z ?2ÃxŒu4øáMýŸy?û…@è­Äð±ËÈ–@ÿ¡oü5xM‡‚[Ø%pû3#ÐJ,u¤ïð ( ÐT™÷]îžQ§·Œê/1P#ŽÜ‚u)_v÷Œ)ã[…ã3VjP™=WÎ(P8yºþî÷Œg· ¿5=¾CÏçõéY¬ŠÜ'TñÊyýøKµ'ž3ÆoÕӃʓßO§ÔJÕT<ꉼºïVáø)+é˲V47¾]Éo.Ÿœ®_n,mJ´Œ¨T1pCbûd‰‚(ùfuĆ寭öÑ”^Ã5V¬c5]Çû°[¦EÂoTàî㮺´C$Eú}€n ÎBšD"š{8á<jbØ£j`g¤Fë'ëåz2‘”¥d×Êxè@ýÑõ£¡¾ñ4..aC\X46o™|¾‡eÆZj&T¯=ïØ•{ádÇ ‡×wk~ûK…u]ŒºRiÑÚœ‹õ +¤Å…hT¡•ê]ùÊÓ½ÍD™¸ë\ÓP˜ÇŽ 4V˜.<|:7<Öñ]Åj-Y+ÁGf% ç^LŠ-9¦¯DÂ1i vÏ8¬pïci‡#¾ÍG„›6Zöw9mˆ‹Eè‹w*•J&‘t\…}~ø´öºlf*Él1ÆvŒüú?ýàW>ÿÅœ‘£òÂ¥¹±ûîß•?ôÅ¿ÊnÎV+ÆR 5¦¨Ñ¨‹ÇÔÔç>÷ùáÑôÈ(‚ ’tK«-š™¡á‹•Jõ²1­½ßECéW^[À°ðÊ|Ÿ]Y”Sº7ûºÐËLäfPJªž‡Ì­±X †À0ÛL¦Öh꩘,£w¬( ŽÛ´ûÐ3ʾ‚n ÉÚÕ‹f[h 6pcúº74VÃaXŸ˜t颹ë8jLZXªÍNW¤˜ :„6³[í“/!ú[–kŽÖa]Àúˆ,Q23ÕJ=ÿæ‘Éï*ž. gG†³s—Š‹ånYm·é)bx"æÎ«'ÕæŠSœ-äó™b­ög_›œUÚDˆœzºÐïZMW‰‰FÕæWüÖ–BZçWéú]RUQgªU-=¥h©}tYU‘hU¶¦©Š"–EŒß•úE¹Ÿ­5{“öøwXE;ú?úÓÚÃ\^([€þÁùüÖô¯þÚmgÒÓ³ø^Ò)e–mÂ0[À»ð½N>Wô/ÎAÀEH¿?=UðTd¿P_®ž\¸ðÊ…Ò5—ü‹JsçÑfôÆa(ÀK'gJÁ…¸uk®ëúÂL!?–ÏÝ|è›ó·Œ¦§áÐ4>ýâôô‹žtND¾@M^w¿û}¡ÉBTKÞÔñµV/{XƳ –4S + Zoysñò¢ÅÄxâ€ý)%™Ñ?Áv8ИçäꀋAN~±²$1‡«Þ^ª'àréi.Ûb4 `,0'цÝР@QBú•Ù Pà_›JcÅvÜBþK\`5E„ïB4`ù° Q*ýr©h™ üÉéah4 d;5I!µ™³–;+¸+²Òlutu€~-gEøS.§‘/ÜfNº ¢šþÔÞ­â‚À¤pà€šaÑÒæÐÌ̸τ¿»-ã‚~¼f¥íÝ8`æ5CM ø?¬_I|úoŒ.ø“ÏLnÛž>°/[©Z•jÐ@üO Å Ô¨,ZÓ…hFÃÉhÀäZèuNÜßÖA—Ovç¦"·¦0:ü+‡çø XÏo.þ:Š®nîó +cZˆGFRN»âÔ|'Wšœèâ5Êmý£ Á¢ˆ]è/ HÁ&6`#5”˜}y^UÅáaÏ1OQ"¾à+i ô×êf¬_R“JeÁ€Žª¿¯2ù×ÒÔ1ÂíTjù–¢D3›™ºì*roOh>EE >‚ìoTñ—Êr&\ÈîÜ`i]µ˜ìëivät lP9@öm  ìSxOæÐ·P¯6ñ8sºR¿Œå4{y„Kh,*ÔΔ½Š Èý"Úb’Ùt~å鉼Jâ?ÈþI®bãÛ•éÓW›î–áuIåk—çQŸ éC‘(ð’ƒóÁ™.\¶;õ .î>è:ƒ'ûäà‹Zƒó qC;oÇSº’gÖlu€ûÚ¸á?DúÎg0þ_ñ5f¸°­|žE.XþÂÇáÿŽýÈýÚU`­€©ÇãZ<^,—ÙfÅùÞ¾I§Ï]xà=^\õ!®Žþô•Ì`Y#/£Cg±ÜÑarÃC@ GfpÕ¾›2G^ ýç6ŒôÜLØZÆ*Ïõð…툤X½'‚u_I^…ïm÷×¹uøLö÷¤~²ÿtÑÀ½ï:0ùÜ‘]·ŒÿüÏ>ôÅ¿þÚìkÐçÙ^`ó8ê'§ÿôOÿ´«~‰„NzÀÂ\% R ·,vÈ0ò(Š™í5g;Ætm¶6úƒ* È„þ ô ÐêhBº›ìOŸú Ü–8té‚¿ÞˆòÇ¥c|ú˾Å×sì* µR‡cÇ¥p~¡ÇÐ  Œ×v­;†óÿNv8]¬c_2}¡„_]Á£¿·Á@q?àДØÕÄ;ñéwuÑ€÷»‚Õì *Cñ?&{Ê–&ZcÞé‘$ÈS l_*x×fSHõS5iútõ¾=#ÙDú±oV¥Ãá¯m8 j}ÝL§ÔR¹$)0´Ìh†­(;Áæ ¿ø¢ÿl±fYrNó·Fª®>>¡´¦ž<ƒ&ZMéz<ÊCÙYG%ôuqC‹fÖAëêë•Öø¬^ó917®g™Ú:.­×YJ|&ø¨¥µÖj<ÕF¢B\˜|Þø…?(>ò‹™ßýh78ô„'†ïÿåB驉xÿÕꜗÅq.Èò±(ôZ«h,Agˆ¶„·ï~l¾ÛÙÒö¬~ºpz{&žÍä +ç®í—i,Y-§Û‚S^ãöº¸dí{sîÈ‹Ý7\YŸ˜õ·'+ÀÞw£Ê¥jï ÐÙá¡﹯wm¢Üæã_ ?( ¯×‚J´7¬g[ &Gn”Ïœ2561NFöùŒ³ºY+ò|9Óvïž$áçî¡ÿëË_=5}rknë³ß{V`ë¼ +³3úÀ‡ff –!¸+b¥\Ié)wÅMmLÕ¯Ô·¾ ]õ›KM¡eì¾=çýŽ>+=*Vêv¦/#üßì½}ŒÜfz'øV±È&›Ý©ê.u©[’˲ZÓrÛNkÆväØXßÜ8™`ÇÉbçds'ì%»À.‚ÍåîAp‡|pÈ»Ù$$ã½ÝI<7pFÞ;vlϸÇV[mµ$—ÕR»JÕ]"UUl²É"ëž’Åê.Ùšlþ8àf±Xäûþžïߣ¨[¶qx°¶½Óf ,Ÿ½v·ùœ¿?Xa@¿er.@T«fuÎE›é+lÛŽ’æ[!Ö·cY…¸Ë}¯\.‚ê@÷6¢d²Ô¦ëzmø  ¬`ÞÛ¼pÍ?‹Ñ†¬GÒŽ+t£Ês ööª' MU7®¿«¦~óÒÖ–;=­ìÜi…qÌqiЯrCJ°1§ÔNšï|Ç~×ï«å)9DŠ®G!’€ò) Ðk'I +“~ lMŽ}R±jwL´•Æ4šþJ 9l.!Åá@*&†WDWDB‘„TPÁ¿À6ê±qEL®H’ƒÝ½ˆy‹ÛNW7e}K¦×G±*a"õ÷ÜäöÔN⽫…]aº&Ú]YW(±V/»+§õçe€¸ËôOº«£³ ßôÏþú ?]yä4¢?Þèíy—Ž8¼]¿õŸšòÿ©Q=’ا[÷”mù[Ø„Wþßÿçã};ùq¬:›gÕÐwrèuér}i±öăµ×ÞË‘BO©³³IæÒ•›K­Ü‹PÕ{R´»žýa˜“êÙÅËr%(°/±rßìê‡Imsí¥Ÿ_ØïIOFÉÞÜL¨lzÅ›ÙÛ#iÇwùäé­•y\W#4!ùˆq¾Ê½w¯ÖÆÍæÍÇÅ¢`íÒå«\ýüç>ÿÀýÀÎüüÂÂ<Œ…7Þ|ÐŸÙØ¸è_Îõ[{wmùáexѸ~µY;5B +­OH=ÍIV¥"£²2@Pj† øœHmîðuò)U‘Uä+,çXLôu“2’tJuº‰È—5=ê‡qz1¾?ŽuÇíD•ªÞj`VÏÆKG +Œ“æÊŒ9V— žcðõQÿ[ít’$V™©¬­ýiLi3?¯g´ Dý˜UiPYŠiªåÒCæú*c’:w"b™ëa„ë;EΑ èÖK“ãijµúu‘¨êJª¿GDd,¼£  ¸‹¢¤Úý¦¸ÝX7Šéi•ÐdÂd؇† Ý|öUÈŠ©åÈà@¬^Mж¹ +U—É’ +ñ;2ðN=úÞúÐÐ;‹Ý;b„ðRÊÐpÐvÞ¹ìÆinW^”MiéHNÛúÿÇ=<î¯_Ë]}«wöÑ©çÿ›¹•G§>ýÜÅüŸ¾ý§ÎœB÷÷ÅkŸ`n¼µ>¾] XöŽ¿¾2 €þg—Í·ÄÅ:^Þ•zãÔòÇp‹  ÀvNݬۺqæô© ߟ>4­‡HgwŒÎ þÔ}Ç.®_ köü ýyd(¿–}ýrpJêðÌ]y¸ŸEåíÖ<Я¿}•Ñ_ ¸rÞ‘ÿpÊ\k™ÖÃ?²ü ¿ˆéùô¯¿VO‰ÕŽ×Žƒ¿ÕÀ¥úÆê•êâÚ¥$· ÿ[ßþÈ€ìd€þ‚pŸÿ™INÔá.1_&úæÎzýJ2²KC™. ú2 y q™¹(¥QfJìè x­’·)’©– &ÕÉìý ýEÊHêyž¦iA¿„ªÿa ià ÑNÇ7ˆ< +dÀFÅËãÁÍ ºn@AK?­ùÌRWõ\¯D°]ÊïùcsåJ–1èßÚQs™×’?L½²,äRÌž§­MW')u\ôýTß-ÐðŠ"ÖâÁRñ +DZ}I˜pSo"Rêë7¼J9­Iô3×1²úÇHó Í"‰bIÆfâí4#KÍÕ åÛyšé½‹;YùõkíÚ3úwqVD `ûO¾TùÞ§Ü·ÞwA 0­ ? +€¾¶§VôãsòʲöÎå´}ØÝ¿íDO¬¨lðXydùù_LjRJ¹I·2óV?÷‡RŽ’¡ŸËÌéÇù(­;ŠÑðÃŽ3HÅ\Š—û²‰œÉ)”<+È ¢Ü5HÅáñQ®ÞGOË·n6Ì\¾ÿ`䚇?XËíww‡ÇTçÇ÷çú¥¯ÔçwC IDATúAüÓúÕ. €Ÿÿïîš­?gªÇæfX0]ÆeT5Kì…g#`x%µÑò/Ö“g +G¬_\ÿìã}÷7ïö-<¬¹Ôºqéò]“G§îb(Ø»ž59^=çÀÁ:çöÇõ û{Ë!-Lkk§2ÿC×Ó=òÈò;﬽KÙ;O>ýä«/c‘Íúæµæýóƒ8Y;Éê?üóñÇßÂ<},'|à‰¤]Ô7°õJ»<Úmøkÿök°½¶±ê?[:¯¹{¼ŠhhZ,`1€úÏ2 ³ÝlÍÚÅdg3J¹lŸ +> v@9ì³+ôO~”!³v+SˆU)AðŽGýEŒC2Ê¡²ú׊(缌b®û 1Þj{–¶¡ (¹©>™‹N«»€‚0örž^@Pÿá%ÅœLX# sÇ¡ ˆËÛ@xD½¡zÔÁ(érÑ݃GŽÿþÌCå’à5¬² /ŠL$ìi%Þrñ¤¯½Õ©ÕôOÉÿà)}ó¦zùº¿q¯ÏKŸöò}Ò£gŠ`4ácë†ëï; +Š“HWb´uú‚㯌“Öª!¾o…QÿÒ¶x䨭•ÇO&×—÷·æ–ýHsêNº{8!tJ8SUËumú§åûC@<×ÈäJi<^d<þŽcLæ½RûwN‡£sãG>A× ÒŒ/ë.BûNÛ§²yˆ áÞð:óÙÁžwüDõÕïbâã“O<”½_ÿ Qÿ yþ'P¿îÜNð¥ëíŸÁûÿlüêÿÚ\ZžýÜóãÿ*螃áë‡ÉßGc×p²†‘¼úÁ~¯=úîܪQ˜liû¶]RJ§™ûS=À3qs¥T,t„v›­Û»rs¼‹ ~ ¬ÈÜU-ŸâCW·ìUi’‰’L2> 0Ö(ÀVoÐGø35¼~—é·_VÔÆõ¶ÓÃHìê[ëæa£v8",bsÅÅTq“¸Z˜BâÌ[ÏvwU­Áœùó¯ÿ_|Ì¿üoÿÉfýÚ«¯"èWŽ˜‹‹\ýó«°ýåü÷ÿøÝ·¾ÿÿÌ㺡7v°}âÑ'ª Ö…o¿Rÿí†óÏœ¿ðרiPò‹_|nmuµÙDOàœŒWU§¶Öœ©[ª9¥^ý 1s{]ɱ×Ùõ¥¢Y)[G&´VÛ® ŒÊŒÁM‹Ä•dŠa|"¹¥ù.T¹õbÌ©VŒê,êÚ~¡ñø/—W6®­]Ôj“úñ…~1ko‡ˆr~Œ r@8ë¡9«ŠÔeTv“…Ün¹Õ…9›& +&`ör×£æã.9þœjµ\VËHç'•#è¥X{w ÐÖšÎd\Âa_õûìã"xü¡TBÃöPô§ùŠßñ]F9eyô@gþ¸AˆÖÀD„wo„÷@:øž€›`JëVàz²ÕWêoªÀyH¾b 9òÅdJC¨È®‹ì¢º'ü^Ò˜@-’8ìq’z€-˜÷Bøí¾ãW*LKpç2!¥’K阰­VJr‚†®bSr@ÄŒ.º\·T¯Ó¼7åÅúâ‰4 6ìjy@Ö7˜Ñ¶!¡?Ü»(‡ÚÜ_Îkˆé¸E_mø©6­ëÓÛ­ážPuf åÇ”3i¸»,ˆôNsè®Ùb»ªH—Èà +ØÏ…b å¹íôì|^PLS#º‡*ÌšdèF¾bS)©œ’Ñív;–a˜ ‘)-€¤óQvHóሠ+9~Ú¹³C`ø~~Hƒ!d®½sõÉÏŠÍë  úá«”ö·tb‰dúñý¨9_¾W&l| ú Zf°~ê}aܽçž9ÿÂ(1Üg?…úæ·V"üÖß¹ûÐß¼·8Á¾ñ쮼8–b(¹"4ô“ú‘¶?ìøûe†"áH€öqç³$‡`2*Ë”à¡ÈšUž{Ø0VÊ\´X €ÍÓ„(@ÿìø¯ÿÅ׿gféÌìô3ú󨨏Ê[Àý&þÈAý¹f¬¡Q«¨%$¾£ßú_X2÷|x+0©¦&»ûÀýÕÏÿDâ©cŸ ?}kÚÂìÌIµ6Yí8A«Ñ­Ì¡ÆS”ÀH.•Ó(ïÖB \6gÊV‘ª Û]‹'ýÛ·q&ÃÍDµ:—±ƒ79ŒÙÇ÷þ*K E*ú»xäÜ1Ói»3³C=wwwèz2sÌBþÒ¢Õ MmßöáµxÊD;ѺՂ–Ʀ(ê]z„)JÑu#Pw‹$Ì)i«A¼u½hþ¨Üuãi1{ùA_èGß}1ÓÊÙŸƒOæ`5<üéi¹ÛMsãИÔsL$Í¿:˜ÿãØž_uÕ‰a›bìMÈz#ôÓµ„ÜàŽÕ§ïZ ú±#¹ŠåŽ þÏë!ˆ[¨XGGy!¬ûó(æºw…9IËèïEØáK»&¥J¡ÿ]C6aw·óݰÀ9g€ûøÎîP÷çO©CÖK*ºÃ¿’g03:½»†2Lè/X&éûN§£–è<ôOÉ]g}ïŒ&§ #,’úæåá;‡,çÎ]/„ö“ŸÞ¼Ž(|üÄ\s;‘|ÕJeß‘ ûÿdÀÇOH—¢qæTm,)~¬_«/Ý?n}ö‘*¨<òêþ.}ª¶O䢰®ÜÄ[ô1tÓ7Zc•1~0PÿOÝ¥ŽA18‰|S Cùò°^F—KÓ]/‘| þÆ0¡ÀU”¹ê ×õ&[zfÙ€—Cí†VE;À¹ÝaT0È@˜½~ V'»“ã:—.¡ÿ+ÿóïæ¸|å¨ÿ úÿôã &ì#úïØ; @ýç#k÷è?ÿ¹Ÿà‚úÏ; ÷;áèÅ_üµ`Ày¶m»s%ñ•b¥Š² ÄÀÌ,^!lw¶R1çk¾ã–$žÌ)"6/SæÝÙè¯R™UÛs"™Æ`K±ÀvÙØ9†=™eÞ=ÏèÜnUS@ ˜el³º?]†Þ鄦•6ïÛ ìôwå™ý«¦ПýÔÿryˆ¡kÄ’ê¿GœN9ktí ˆýa«N!ˆeZì|Uf`ŒöHOˆeYêgoD#Ö@Šþ/Ã2U^0„~6S`ËÊm’zk]D2”P M•ýÙÛÅQ8ôG‡ÀÐ?ùë^›øTŽ¡’¯ +d@Ë• ´-¼qÅÔ89N€î¯kÓ®×Õõ»zW†©Ç»};ùOÁ‚Lï$F€¬úOOê]â&4¦¬LäåÇô´Õíâû€ûY#£¿5Mfìn0??Oê‡#T‰HˆA!£Îh9 º€F%÷Aô7@¼‘ ÐÿÂËŽÏ×@ýϰBÌ-~o$evZC‘pÐôŸ>ž}òÜ‹¯Þµ©Œ «Ÿœä³þA=3øDÿ}cjRí¥¡Ýs?Ró½~ýúÇ5'8V™»²ùÃÐÏÅ!'¨H%)áVõ,çxZ›Ëì€~&ö1`ñŸIêøð2­j}ãêAÈ@.Pü÷Á*e#l—´ZubèÛÒ5лPÿA÷ àÌ™3a°›Y€þ_üÉÏ㯾2àïQ3O£èoßnŸ>‰QVÿyú_øö_ó~+%•ƒ¯'Ô[sæÉû‡b’c³ÔÞÒãâ,¬þ ôq+`n€2@"ú¶ܽÔ,@"¶aRo†þûÜI¹+2·‡ŒôA*t½\À\’Bºi:ܽ4†L¹\A@1§IðTÕÛ^8ç¥ÈC¿HÑ?{  „N«›€#}7íp$Ð cJBõ¿*T,3úÀƒ¾]3aŸo® ¥¾tMä¿öæ¦k¤}ÕO8$èGùQ8’ßb;þ}iÛa0cá"A €ÐêÚ]6ò½JqAh¨ãc¬Ù~ù°¹vÉY>c¶‰éW"=ò£¹¥òú:½¡¡7b#åäX’[DyùPñð€Pý1Ûzro-Ø¡°è‡™ZßékÇ5)*Iä‚ņ¿$Ž`‘ÀRq³rÒ`À&¡ zXHÜÉ*W<êÄ­iºïu2*sYl·ÜŽ [eÊHÛßíÒcÀkÐ&H)Änàz{¡6!%ž é‡Ê¦îRí˜z¬s d¬:QT'¬N׫4‘N)k ü¹ªF³ "ø‘‚q¾ÌéŒ#L*5G:žÈ¿BžÄ¿Ø$œÊG«;·H œðâ_ýuu¾²tfYƒ‡§Ú­Ž®btÜ›û ê9V¼úœ×;újaåîøûyç霩VçLŸâÏë›;ØTyl«¡ƒŒóü“+^Åt¹õëcŒß±§Ì¡/²TÇæª7š PÿáulΚ6µÆ¶®ç3ü8¯?¾Íî_5ÐòúAýŸT'at^ð.ê7Ãà6/¹pW¨T k1QßÈ Ð­ xè ÓK)D2Â;LQÏš1áåÜvAßT§TÎäHÐÇ&\i OîÝÖ퀢3Å8k¥ã6æË§×ÿæ;ËÇf¾üSŸ[»¸¶|ß¼¸”wmvÝN/Øü“SÏ>z6N|êôÚ»ïx­Ö3çŸIïª)ßùî…ÿø è–}sÓTåúÍMufh$i%Ð!:ÌéïøÝ;¾Óóg*–×÷;½±ª!³Žvü>&•ûƒ¨uÛÕ'´ÊŒ +"ÂnÛeúlŠ&¹””©—e·Mþ´½²{NH¦?ßš2Z䉄‚.˜njª™åt1f€¾Yrû°r'ÔRÉa ‘PHŠìÚŽ”Ú w:ÉX¿ ÷)A? +°^Òœgì'Šïtׂµë4[·ZÜ|¦IÃBbJÖpn9¦¥vwýb‰\a%A™hß +Ú·`޺Ʃšƒ½k2?ÿWÅõª€¾ 3 +™””’ Ë? +cL!+p#4Â8URE…ÕC®Z›óIÇ-„œ«ËbÚÅ\ªYLn|ôÕ­ÆÎéÅi·)®æ#’ÑÈ"–bÝÔ'W§ @Ôª”‰&x"ð´—ÏX àUÍYHÐÿ‡nÎ3Èøc)Û·Ú¢4÷Ôccã0”J +¼Š(j@؈LlÎëÒuv:wz`¦zALîW9áqCÕÀÜÞþ`nø‡­2=EѸ‘–"ßêΣÕè¯N( qöU@œµœÄdU%¹Ô¾W#¦ŠDôè†óy1ÄÃ"qÄèÏBü½@WA[¼àdºïÀSÌ| ô! UÞnØO<{6{Ð^÷rÿ/ü»æù/ÍÕßǸjïÎõ{i±â±cêÆõ³BÍFu.Ñ ™ÇÙIV>5·~ý$Ï>½Rßl–dõâïM6à£pÌêåD­ßCÀ#'G†u£‰²0GÇNïÜr{ŠqE1ÿõÙÏ,Ýh%¹=SÆT&$îÖ&žY˜å5¢#ˆæ¨–꼺‚ê‹w"bpB”SâhÁ\ŧO“0 î‚ä÷’·aii(%YG0mb¨\󂌢¶1‰_Ê[€þ_ûÓ¯ýƒŸ}.;òþ«_€íýŸôÈ +>ôíßâöµ×_ûuñë,^yó•ìøïôüçÿáÏ׎ƒ8þÈɯýÅ·~û¿ÿ•ßúŸþàù_}þúÕßÿêïÿ›ßÿÕükù‹d%Î:Dÿ\]º»çK´v¬2ZØ^LYü¿…Õj.$ØÄ4¨þŠ@îhE>¯\Ø‚P((R´{T¯J2çþKò„Ÿ&ÝI6r}+ý± k"¥{Ùs%IU&dxÉÊÁ:PÝÔI%kÔ¾ÝQrwþR:I@„{QÖÑSžqéðiAdíSÓðʹÛ0?kUŸêÐé%'Ìx_ìΤ“Ú ¢ *U‹«ÔQ’T…ðÛˆÕ!9M)‰%LÁ-åxl÷õ¬âÉÈÐØ¹Ó1‚gÿ@%uÆgÅf ûùgkk—ì²™óræ,›ÙÊ0Ÿ7“h;»Ù~ÞCêNÌö‡ý°h¡÷ÙÇÇT©ºËÐò@÷g¥ý€ŽÆSYÂIƬJë°=ZW`Øí–bl1 °çɼ`G»˜Ô< |íÞë‡\Ò ÛŒÊ–³¤(ðWÛu-¸»VQ$ªz¬ªR‘ aè2úÃ5ëúÀ%åBOS/ç.³Hbcq¸ïÙæ•Ư}Ð/аj6k'Ïì{Ÿ€—fË”+†Ÿö[ÖG¼jŸûuñ/ê|ó¡Ú§¦.¾á<ü傟™õg]Ú¸²¿ÆJPJ.À:ïÏŽל:jÍ!g®ŸËÀ½ŒcóFk¼ò¾¾¹-Ä6$ˉ¸úßh¥n¢Û];ÄTo¦0 ¯L@ÿjµš{¸ª/ªŽŸÅ§ë f¦$±'X~¨¬ôevértªÕ´Qý·É\ÃÐçIZ3Hˆ\•zœš° À<šTüNg7Ñ™–——×h0[øÚÛë¿ý¿ÿ&lßY}‡¡?€þcÝö<¹:6ë7®×ŽXÆ“ßʳòØþ* ön±kɶÂV–1Ø¥E$SžµGä b¢îŽØ¡wFò÷¸M'•únZûËÖ p bÖËTöû~\ÂH ¼ü¹Jh¾óð¦¬ëH=Dn‚£`°€6¡Œº£)¿êäÐq èv[—„âúá1u:‰`Và&$kJ­_K>žëJ¥bDˆ…CÜy°~ŽÚTgW’ÃaBV^Ñè¤XB‹ëºÖs½v;Y2Á’ú0Ã['줿4‘t<€-€ ­ÛàT–"6KZ$‚ÁʲŸ  Ø°,aõ­:(†óóï¦ËͰ`ª¤ø‘¯¦„ŽÒLÑpÔe.ebõ±ÿ"¢?l}Ïè¯o|÷µwð® ~gÚ…ÙxéÂKÌ4Çè7ŸÐÿÂ민F!Aý¤ûú¯¾¹ +;ùËØó fËЊu9AÿƒCž”ò2ÐeÀD‚þùÁ4–úaÎWÉ"!¨þÃKõ³ –J™Ðº.Ü¥Td2A±•ü·* +€So†{Aü±aÕk[e»ûãŸrã x->‚ H²ÎÃÈ”©Œ¯‚Ó‚ÂŒŽ 89d€½ãÂãçwçæ‰¨ÃM~—>]t»q}ݯž’?d‰$ú#=?9ôo5l0ö}ip¦PŒéþìÙfô?x‘€þ3å‘“¸Ý‘ÈPe,ÒCƒ¶bS!M6D˜./‘+¾û\ Ù-0u©HilœF„i±Eö~ +ü\,2Î +ÒçMc§záÆ\% ƒ™æ I˜^ìúˆÂü,ñåRTˆa_ÐCEÖ½9gH>(f®@,“€øƒ8À®L=¶­V§R1\7ªTt…³¾ïvw“žé ûHD¼"BRJú…»”~ËçWŠ<¬è{<€NÐÑ¡w¬{Ça.‘V¯›ºA&Gª.·¨Õ\eÎlÝàªÅòÚê†uÄ=ýÂK«§œŸ?^yý¥ÕŇÓ7.5—æÛÛÝöNçÜSgÝîVëV«V«]}wcqqziµ³U¿²ˆ=t€×ÿ(ù…b”8m1ÿÚ÷; ‚Ñ °lü›]ÿéÏVŸ}Æ_û÷1£jr„WŒO¤©Í™~g<É2 3௚*³3Ö…”:ó)å‡9ˆ/÷ZWý¹¿<ñÌ”º“Sè +Ò]É;aœÿ±• 3’ñÉWÞYS+×GâP`\±‡Ô$6ì“?foÇÝ£ŒäI¸«8 aòÀ&-¨·ÎübIqÀ–~cÛaöG…ê `³*“ˆZ€z>v øLÆÝç›J#œ ë ¥¢×ZâmõÔœtD¬o­·'ž®-=tßgžºoýâ»ÕûTÓ(;6lk`ãªr¥¼´òeÓ²ZÛ;-æ¤,ùµã¨c©DZ0,W*íNkñä’5ï—[§yZ]o¼¦OþÇX²P(õöµöôwm +ÓPEE¬®7Õ’™Í%Ôi1ã Uû†@¡X9ZÆiSºó’䥿}€†&N-‰}>èý— +ð©B4„­7HV‡:%iS&(šÓÆ㈠+†]|€9ìv]ª}I&*Ü«"û ˜g8 ;«ß2¶Fê£Å‘Ç!82¬$°äÍx(²¡+ è‡ ÈI#fk—èúŸ÷…ßQëù.eÜ5П](âÞË€ü;•rÙî%¦ítü®kΚ֌eïp3ƒ1aIÇqmÛ­Õ*¦©_^¿|zé4láý3¹ðÒk –> ; ÏÍWVß\;÷4BóÚjýüVZÍDÀvg»  œ^ ™Ïâ Xž1àþ¹üp¢Ôñ§>yãê7þò[‹‹èC›«ÍF¶Ãß2SuÇ‘è“ã}¿ø?4?¾üÁÑÈ)×ÇjÇÄ÷`ò¬a™è'tÚòÓØÏҌɩœ0œgÍTý¸ßèôÉU³}¬‚'̧{²8gÅ<ñé‡^ûþø +†}蟕GW^xi ;Üéž‘ ‚ \‘ ÿÄÚªÌÎ,?xšL@°vâgßó(ÏâÇÎ=úlûvC/Z¿½e_6Ôr4p8C ù8ÕDÜš³Õ0oܺ²u d>Ð÷Uýñœ)áO{§©Õ÷8ض¯MXò'&ˆN-B°“T ,³¤9¢¦9ÞÿŠ)Íq(ÍÉ4 D-Û˜ÉÕ PR;Óý‹qt§B¤è v’wìÛ¼ÌC*¼ê›ŽuHm~8œ{ÞÞˆñ*1ƒØ7aœ¡?Ÿ*3èú÷ƒ›tN“ ""}Ëx޳uûL5)çDrgŽt/¾o0]K庲OŸHÉM´Èñššp·îS ziªÿ ?8*tàrñ‡Ë"éÙñ-R1Ï d“C±oQI±4¯˜"´OOפܦlgìhµÛJSsìŽiÜ_{®Z®¯×ë¢~ö©³«/a/Í'ž:ûÚ+oW—+Õ™µï_^þôi:3ÎãzWNžÐ +пr­•ǵ1*K; ûúÃÎò +Z—­F»2W6fõv«ê?l7ÞEFû–ݾåPáXBÁ4M X‚ÓÉ 8 +àÑè¿ðÊ‹`<þéa«RÀ}]û!Úá¾û§K§îSµsãárߨ7Çrÿô­¼æS…³>¡íש…»^Û¾hð±ÊÌÅFr=Y°«'_r\=l6n'rÈ$ÇŽÓË,ŒWÓÁ½Ý~o÷®N¬Kmи3H‰¸ úa»`»—Xý‡†)â +CW&}íqžÒ€ûË/\x ó÷—V–:)q±„ùÎçãuMA¡@±.ƒâ ìÚ¶[©²Òê„ÁP;i4s~Õ­¤­äÂÚÛ­ ³õ†ñ¹š™•g+p ¯î¶Âx3Àà ÿðò8¦Ía³=w(Âc«TeMX0jAàˆ¹ÚÛåÄü¿KéJZÚ‚2 u#»½Ž®iø"ôé˜\§$RZò÷Ò(.œ‡Ük€ €¯¿´žÉ€ò åRìً ˜HeG†º]¢jgíd­~­¸ïPk[Yà U7™„ßîâŸØ¯•}eùÖFNèºë(ÍTñ|ŸI1=p7€þÜhš}Œ^0_Õ;)ñ””Ë[aÇ>ŠL]æÌæ4\HZ¬ ®Œ¥¤ÇÃd’YôRb$+æëßFXX„—Žžšä^ä}L•¡›“ ~¸JÛ¶a« h½J IDATº›†e<ÊŸaõkëæô´Á;KK5x´õúÖÊÊRó£ÆÖöÊ£K«o­‡+Ë.\xùl+‡µËçÏ=!Hñ¯Õ@ÀÎÒC83«ÿ§Ól ØÙæØ²@ôÅÔ–¥*¨ÿ,ÖÞE; uk‡wDZ^éùäü!/ÐḦ>ßÛ#`÷ö˜–^`p¾ibìMnl\;`qãäµë›†ií4–—PÀܼ1w÷.™ŽãÆÿöÏ“ûõß©qc€USµ{þúóŸY¹è“éùfI4)å†[ï®ë +pÌT»¾?3ŽÖÿ‡} êÀk†Õo´…:ÛÇÒô÷}±æGÍçž9·úÖj^Þ”rÄJ`dœ*°òuRªÝ½›ðbôuùßû ¼ívÜ"y1Ÿ˜|¬“nm¶[·F1Ë}RãÔ1šNÐÏê¿$)Þ]tnl™ŒR~wø#óG²ú}ŠŠrÈ^רe£h''â0~STu26²(ºG¬þû¶íG£?3^ <¬x(ÒK0ÁØG/F9ŽÐ_ŸÔ‚­†ê?w0Ü_½Ø¬þRNÈPÿó7‘YB æÒЪ¨Tt²ÆLò½1–/&MBÏW †ç’HÆ”2„~EB½ä²ßTÍòKƒ\CR)÷`¢(§YØaბXÀÂmÈExE¢žÀÄÍ©WB­ê-}0Y9d´ZýÑíE>åðJqír»2kT*ÆÚ{7«Ôqþ7ož~xaÇvZ {y¥¶¶Z}ÿ‰§Ï¾ö26›^9·ôÚ_¯.f ùò¥ÍÇÏ!:7n:gÕÚ·»R[›Vƒ—5e>òfL•Ïæ)¢áUågŸÆ,ºÖ-°ŽÜÜlË’V)kï¼…Õ’ª¼øï.¤fr‚†ÜB  çA-1ëâwSw„TâT…d˜e½zdfáèÒÇ mgÐýksf½™£vKJÓÐòtI¼µK“ãi>¸Þ•fŸµÑû€õ˜¶ÿ,RŒNàcèðÚîÕùòã¢àËšìw}4¨'d¹( cƨ0ňÝäkÖÝ +UQ&yŸRÐÖWבŸ‚ÿƒze=z/$åBÅB!„Ѻ€w1£¨ˆ)d~„˜—¬úR®ËPŒÞ$ô@'$0©§ YÈ^æƒ +ã´¥v¯vs\ˆ‚=_7ˆoŠø²XT A„óx2á@ÒUÑS¿Š"ÒŒR´ƒL‡Se«ÝÄùP­˜ÇOTj'æÛÛxµù>ÑÀ ÝP’¥¢R´L¸°¶ºš@jŸèš9_¨wsn8×ÃÉõhoSßÊ;¾¥ÅQ"% +#.Ë +a'uÄA _—kdßÜÄ‘ ¶O]6­Ê¥«õòá +hõA{¢‹ˆ"‰&m‹Ð ( CÁ–Zý† ¨4Ó‹tå1^¼¢ªŠºþNÝ<¬vöUõÌ#fçŽãõaÉ«ÌÝ& (/SSÛ6~^Âr!KD»À‰@‘$ëÓ’ðBœR±ÚÚj©ózÙÐ#grѧÙŤ£Ò@bZ &m”#DÊ>°T`R &'ÍÀsEÉŒ"—óÜá*ò&ày*³–ešôT#¸i…On;Bc~NÝ"ÞGØiµ‡¸µMÕª³*ìhØìòº=3«Áa_ýK÷ùŸÒßÞÖÞÛ:_1ZÛ]ØùÉ/]{'Íò9ÀwÌ ²@ùHòšô“Y©ZœrúÁD]ôÇ/ý¨Íèvnn¶¶6=ßxuM ½‡~ÿÒñd»Ý„çßæüJrvŽ—]oLqCe΀Vž.“û5 ++Yãˆüݲ¦ðœW¯48UµsAP Yšñ´Õ#åõõ«sU¼†¿ù'<òعüÞÚOŸo6Z««k++˰Åøì§—ßþþZõh¥2_i7Õ¬|¤rî™3í[x-ž=Ó¼QW'S6WS¯Ø£dey˜d»[–>/ÇÉ»ºtÍ?sR…-ì¿ü¦ÿ[ˆ÷ÿ·¹vnE­=¤Ö/ú÷?õq^ ¼ýüÏõc¿|â¨ý„8ÁÇŒ<úâdÛÝ»ýõÔ}sûdXœZ‡]†Æµ€6&ºÞÖ¤.'*!ÖsÄ”†9û˜rNé‰"çý‡÷+U³2g]ø¦ÝjÚOÇ0m}Ð3@ñ+)rëú“ AÄXÃ2€IŠD’'ƒ% ôíT#gŠpÞ¼À‘pÏÃÈê¾;æµÈ¤žþç’’)×"ñn%‚Ýô+ŸÁ¤ÿÃ_'÷St:NÖ °X&· îä”ÅŒÃÆœè'Õ[)úH±`rŠ‹È  ™ tá9ÇüPOÉÚ¦áA„œ$±¤‘“¾»a¶åïåþÀ—¯­=qxè5ͺzè’°/7œD–ÂÔŸžgNUPBÄAD¯¨4Wo7-K­_ÛŸÖÌÂUÏõ}ÜÓ FVƳLPöÔ… ¤Óíq»®ÛqUcˆWê™2½Ñé¸1?¯w:Ãì²Îyúx=Ô¶³RZ'ÌØ1"Z·ÜÊ[X,?l¼ø §zTž«*/|³ñø + ;O>Vàuþ™ÚÚz—4×ÞstuPÎu³;»¨ðö¥ :f¾5;ݺiWè)ÂÎòƒ ­í ÿ2õ_¾LA³×^ºD©ÆDÄn!R–y{;iýìÂB™ËkoæºÙeãı×o\1`‰ã Üï7³&``Î/à§¶n¶t +1Óá´™¨ÿ`´¶Àœo ¶ŽVDàè¿vµñù/œ…Í+çή¾Ž–Êçξýîå*ÉŒFs„k~‡ìîv«Åº?ˆ´ZMPÿAR®W’ ðë/]Z|xЄ¢@5M7˧è¯Ý‡Aig;AgÇö¹~ÄÀ¾›ðc¿¼þ¯~£ö3Ïàm葉`ߦfŸ»KGøƒc£^?ußþš&”Ààn£vô^=Ÿ؃þïw€`îîºåú.ìs-n@Ý›rq!kωpiÎ>ffìrÅ&¥è±?ºÕh·Ét½¼Žx&­Bà’¡øRÈ €MÇDIâu!G_6ˆ¼!qÀ6»<¸˜ª®X†nw†€F€¼ç[†ewlØz{X—l2?0訠$ + •e…‰0&™þ"*RAwP&!DÌVľêÑ*èþíöâêg€Î(?¨c"hâ1¹&—%1$½9È~ÃÙ¢(R ,k,«œ2 ÔÿyÛSdGôg ~DT@€M ¥%²lèZBÝ2à0â¨ÿc'CLišô Pº›”×¾°g»~èŠzë×ÓbÝüq‹­¥¤zAšÝ;ó˜pO´ðð$Ðú‹ `D».躡×;õú¦íJI6s b¾ß–8ä—Åq™|S•„Ýví×ë(rñ¡äø÷pS;Ƴ±2 ÔÜr[î³_ª­¾Ù²ï¸ËWÖÞmøhýa =w„1ÀèoU*j«å_x9Éèxí•ÿ÷÷³@ý_Ý[Ž|!ei#¤þxBNÔéŒó‰WæLƒ$!NÍŸ¨TŽ–Aý‡­KEg€þ"… ÆtU$ˬ½ãS‰è1p™ºD-?¼¸öî†:‚îÿÆ«—çÏX‡åþüB"^ï,¯Ì·]çž60/³Õ9€Ð>Ë;|a­¦“wª™”x[[¬ÙmÔÿ³'ÊÊÊ“¼v@û3³xÜÏ>[­ŽŸŽlm¼{¶\ÛÌèÏÃv\ôÝ+)?~é+õ_úŠø›?\zì!Õ¾°òê°ð1ciN5-‘ómmÔ1mÿ³¡ àä™7×-UUe¿¨U¦öGÃëÿ©Í™lH™SêÛx΄)?ý̹‹ëé õŠÞ‹~W^§XÅÜŒ9^^·Ó»òaóù/žƒmÞÀŒÏ~éþ°“´×¾X>³ètѽ°üÐßÇÒ߇—k›˜ÍÌèÝÛ-XE°ãÞép1B†’3Ü +jÇf>jÙχ¥87ésбxf¤'œÅ3gšÍëXÑu5LÌÀÉû~ÇqÕÅëc²¼·ç›15MÛ` +ü/ÿ´öü—Ì_ù/Ìs?²dλqW2†õ¦¿ÞldüZš¢Zªº~%Iõ™™À…ûì#³˜HŠçž\¹±³scgûØÂ©·~p‘Ñ?óÝÃ9Ìé‘°Ø©Š:C[ô½ö/5ÉiÓO’|ìæÍÞ¨4þ´ªu}¯v´ºtÔÌäOµ»]6|¼ùQsîè\€ÉßµYå€uªöá÷¿úý™ ·ï²#yW@RKjGøEôŒû…|'/¤©&­‚'&` "l±Zະ(*J†1 zÒæ‡lO.±‹¼ ´QÌð]RQ•ö¼½€=0á1Ñ£ *+ó‚äˆÒDUŽ©Fˆ b8yŸŠÐè®d ú¦0a¿Ü´·7!# ˜#cŃ‹è#E_›·‹,XS*þs¿%Õ +Z Q<üÉäRøTánðìŽî”?^k³]ÇíVfç”IÝw‰ÛTR¹DŽ=B±À'Æn] ºb^ ¦Êʼn +òD)”:ÃN9,àOÍ8!Ì|˜ÿ° +àzŠ%‰Y9ÁJË|ýTŸ–pjb„º2œ{îí¶xЫÎP J_^$Ý@è'mÆÛa‘ŠôM“lVU‡Ëð‡„u,é”&äù†RÖ«¬­¾u Ðk×Úì{1§RI¯úÊB¿ª% vŠ$JជäÔ*1ÿ>*¡HX,ÐBFÿØ bsZ8U÷"MS¢žy0¾©R1‰œð)Öo†w¥~à‡q‚…© ×»~TÑà.ú¥´Qª: Þ™Òµ½«õJcáüãzÊÜYS~ì¡dÎå]»ãA¬_ –o%è[xâ­Èضó_xvmuµÕl<ðÐé5J®_^:ýú7WËsæâJ vÌyÓ*[õúʹÛî:·;+‡ Ø‚òÔ&r®2ÛtådÏŸJ| 8ù·V›‡ÇG¿ÊÍ­ìt:^¥b¯X­– F¦eù…uŠ(hšÆ)S”.D@6¡ú{0quÇn1×´ë»\›—0‘õŠÜÂ%©Ø“kXFö]ŽM=,½ÛsÏß^«WãõW¨G3Lýê„kÀ 0Zˆ¿ô¾Ê<¼¿“‹‚v¶jó•$DØ;ŽY“–x +3¢sÇ…W÷Ž»ºŠ‰¼¼÷é‚ß›7’0ÛÊ£g67±i(^…{Éy@=aðj:ÿ“9åÛ ˜öER,X³xÆ™Éм¾ÙÚÜl=údmùÁ•µlb—;yX÷×§u·ë2ú³9¢MI`ú{Hè&sð#{¸šPý/áÏÏÊ€²]0ÿÁ =Òõp,šïU‘ +£2O]VMÆ”ÈÖ4üÒ¨¾^¯Q¶7míÊœÑj$) ûÛ6µÈ¥S/?xÖ`òÕª2^Õ9ÓÙöLÖD181ÄCvGsr2C?ȼ9¡,Ã;£&  ”£ƒ®) %ë‰çI^ÜúF#[ÊÄ™ Ø›6I#|I OˆÒ…3àÐôñ©Z">Eš«ß¹ã€ (}ëeûä}â°óè +NÓ·.våçªõ­ ~3õÿÂn£<ÿsÊ…W]gN(o^ìeF@66êÃÅsæ—N)-ÊM^N áóOý$ïTçæZf¥:¯ÍÆf%­õ¿=šøá·‹Îh¨`ÇvfÈh·‡ïwèà}’ÆÂ|Ð$Á3?q®•Æ“ó½yÛTµê-LF÷JŸIÜüÜ›‰ŒwX)Iöm×:¬ÃvýÒÕLð¨ßh™†ŽzElZÛ;’±«&@×S-ù÷;2ô¯*gÜ?ûäÊ‹¯ŽIzîÉ•ƽσoÜ…w¨6·?_hå~|g5- » +ÑñƒbXâÜi´c2;Àó»NÏá0*žØœoˆãúDÔ.,•_ T^x#òØ–p6bõ_bÇñ²PÙÊÊ’ã çg”eTeÐýý¿»»×ÕÀÛ sPÁ?ijäiR¤€Ò÷.:ËÔáCÊ5IÁlTâ¢Øv0cRE ó1±Ÿ&êx©?Þa% +†œŽÃ8-âo/|êI4¬ÿøO.´¶›ðb €îd"8]‡q<–b× ¬9r]÷ág¦ KŠ"+äJ¢ œ‘Ÿåø8«>‚çèiòH‰q'w‘7°ëº û²*þ”]êlÛ&­¹V³³¶*ºÑ#õ_̯d=d,Ó¬l³€X°íbYŸ {¡óg*Ç]ð j>HµÂ0² çóõÄ7‡ÀGãèâTNNÁ'”—IßÏŠˆS(Ìøå÷A÷‡3‰ÓŽÞí"A”\ßoÛbáˆV­ŠùYô/ôjþVÓU¥Bí¨äwÅÙSªw¿´ùAø“OQ®ïvÁ¾õü–Û…ùW<ÿ„ +ö¼ +÷ëGÔí›n™~¸jÛ…©Z»*“Ž2)¨CLŒì8],hŸGÙ4¢0I„p‘‚‚Ü©A\LëŠ0®ý=Î +€ßãEØÉT¨ Bo|°!¡ú„äõ\&'5* àÏ-Ql»íêU«V9l¹w |°ïùÞÒId\°?j¹w}ŠèÛÐÜ Üž—…B•™â‡U"ßl®ò#ð0i?°£‹Rea¦r˜“ºbc^§ïBF h!´ÊŠZYÏÔ›\×n»ELìiÀœ_8j «jZ³·ÛrÕ~´·ƒ“Ÿªtîøí¶«iÔíT¶žÍ¥^ðw$î¾Ûh“j õm—ÉΨÕÕïõ×oöj¦º~uõ¹/=+î.NUJg?Uý“—FÞ<¿<§ûö®xýêH[v¬Éô÷r„d|‹¼#èÊå÷ŸÿâC_ýÆ6ˆÇNOýÙËc.F3M_8Í;Ý|^©5Uu¦¨ö DÅ_¥´Oœßðû=¸Ÿpoõ 3‹|{Ø¿×íÁ·õ)•_Sa'Ð5‰„05@®Ã VŠ®YØÆ4Ø,Ý6Q&¢ÍJ@d/’ ”4Ò'¥ºŸd¹x‡¿ÓìIX5ØÙcà¼S¼˜MOµ¤öö\»V©%J”i¢5íûLk¬P =LÎ!Ð`·rl8¡) +’_QgstùG ŦšsÖ)%9=Ÿ×]Øó§ÉcíE˜,rtá»!¬.”MSÙØ¨›t RQ‚ƒ)\”$"Gë¹’,#©<£ÂRÄi÷@MQ£8dClcÂðz^)¥(Œª U0௠½òªšê!R„UÂK`ž9u©HÛø¸ÌÞñôi…B,>,&2ñy®Ð®_q ¤)Þ¨G®…ž8Q“ØŽ§Œ—’ÁJ^°‹ù&Ó“·îÜñZ·º œŠ©·¼@•°E¥Âïò±©5`Áæï}?*t X_&ËÒTQ +ˆ oo±(i²×ã¢Ï\,¨zÈOÕ ²[á9ƒ8)ýIP`Ò60ÀÜ)%mÅ¢Áq "@<¶XL$ŠÂ"ŸKÃü¾÷Š*Dé¹gª[Ôlwš8ÑŸX©µ˜EK%%Ráa À £ŽÝLîrú@1×5—!0v4·€~-ÍÙ=Ó€>ì¸èLEa.¥3^žÆT3˜1¼¸q+ë×p¿Øß—np¤ÈÂ\Ádá‰"ç´¡ èG'9ÒvlxáâÇÖŒ~VYÎ <Áa]Ö>îŽ Ó+‰îФéó0ýŽœ•´¾ˆÑg!ñ:P­9l R<º~Pmàx˜ÜYFs~œ>Eɦ©ŸªR±`¡Z¥¯ª«Å’èv¼õ54·ÕI€¦–òmÛΦebÙÁoþÎÏ æs5¥I|7%-¾Ï‚Fõ˜õkÿõŒ}vµóO¾¾£æŽo©%@A,Ksbýý+Ï=}ꅗdzAܸݿÑÚ¯þ_XxÐT±…Ðß<ô½²iÿg?6¦ÀmnJLÝ=DÜlõöU8Á×ÒN©k®ë5áº{6 ÿÁ󴉈 +|WáœQ´»›¼¿@|—ÞÇg”Ñ“`B)È|‰eãðG¬ií¡ÝuÉ×ÁܱèÏSq=ÎPT¸'&kÊ€ã´,’r*Î KêÔrƒÝ’ ë5ÕãñT¥bRß°‹zÞÒB¦Ìäôq—¾kÐÒdM°bëWZ•yåܹ•Œ… ?ìǘ5O+B&o É(&¤Žë%ÁEΊ`-Ä„eËå÷Ù5‹¬ M•I'óÇcr4¦n>>BŠXtA'“‚,²ë‘khПP§÷eΦJ‹”è)†¡v:¾B凕#à êrÓépë›…"|J£ +¬¸ó{6äâб–½i·ÃŒ/E”üݤí¿“µN¸€¨68ŠG3)‘A˜hË Q¶Ñ^¬P0Ÿ ,3ñI–ýad;íô¶údgùHÛs+KlmL¢2è3;Ððê£| «0â‘‚™¯¥·fž“æ&²Ð‹ bü-ˆùnÂü x~éYð,a +fLûŸ\¥ IDATÍRÑ@ØéŇ”ڜĂ +#¾Ñ䪰5cæÙ÷³V;ôÏ ÛÚ= jå»c&•¢²ÄèþÍ,ï-Íl=Œ~ËoÂæ: +§ % FÜG0vn» ×?ñ£µ7Þ´ú1ÛÄ6iÞ®§M‚`gx«•x0az½À±1Û)röϪ4ž¿WÄ~I&yjý¾˜NkOÎþ¡ ßÚ¯Yóm:·R}Ê÷Ô©áô^oŠ¥¥ñßÜ̾ðÜÓæ /rI<{hBŒn¥zóÒsOϽðòˆ ™5Õ†=Þû_=2¦BØ®´lNºŠ·?4>86êÿž#å̧¼y#9?Ø:Éx¯‡|à °<§ë/.bø7_ž†©*/¶|%äN„´ ðÔzµŒÏ‡§wÜÏ +`’ìULeÎË´õŠÛ 9-S|"©“ò¹3z¸ãyz’ˆÑ1’üQÐÄrË? äu¸ïøØÎ%ˆc·íÖHSWØC`,.¢«ÓÅd«ÈJ;C€ #‘jè1¯e0Ö«šÅ +)ŸuÔœB¢_ÇBkNSѱÊW¤ +VœÆÏ`Á +Rä”J´.XM¨Nù.†UyÍî —³¤1UNã†Ï ã„“ù¡°M[ +")8êS¸u«è/’’«áÊÍtVEUòŸ*QHªŸºn«1ÒCЯ`›{ú ôP?,ˆ¢U–÷U/öƒ!¸Ö³ú/RaÀœ B$æó9¦x¹k ½'s³w× –´ˆþ‚÷¦Ãècõý(__¿²þ±4£÷ý<^üÛý'Ë/Dçó•oúoŽ¿”×Þß~ ßMÿjµã7 Y7àŠQ 6Ì¥V ã0eôÝÀäŒB[ADYžØ„zs «1­Âkuu=3Xý‡-€{f.ÊòR‘íœA<׎¦KjzK23UÐûd‚sÁ K×Ád/æ¦ Áq|.jŶSÈ­›ÿ:}JFÏÎÙ5áFIæÆÈU9fY_ýÛºYcÂêªÌ¢‹ yýA;ÔSZfø9¾;Ì;мa¶R'¹+¿™ªÿ.GŒÑ"ׯtR1)ƒcòk“å%¼˜d $ˆjºa¦¢?oY”rRCÞÈ«ÿ•šD‘AS/äò–¸c‹óJ3_3lµ)äU @þ`øgàÅÔƒS†2k ‹ Æýìä *¨¤Ä€5̵™ äZ€ÅÒt©ŠJ‰ãLÃÌ,IEªG'Ç«”Úx è üä.KlV¡ðA_È‚(JŽG(Ê¥Ÿ§†IÇó}§'¬ —ÕKµ„*¹Oõ¨ì{Ѧ4ü®½aƒoJQ°è§üǃ¨çúÒ„Ñòà‡Üáyã{iÓƒX»{ÃwÜ~ÇÝÁΜö¶ß´^A o~¼_kƒåô; í³I¯Rö]<辟®.Æ òÉj6tT…\×0³Óž^?Ò'#äMïÙØNÈG^ú->¨º^èR´@ìúÖ¶kΆe´¶;  +Ë“IO`mNÓqî¸Ø¡5òãP\ßjw‡Ö¾ Í#Ò4¿ÑÜP§$xõ¹zP¦)Øßu<׌t´Ýcáw^©§ÑkfWò£Jâ¹_8÷Â霡ÿÁññèÿÿÚqþ™¥F&< 3"'XÔ÷6ìN…»½ùÑe¯ï:ä;Âå-IðØU„&+ä;¦Ôà ²û",„Õ#ZyF}í•FtÄ/Ïè]\jˆ…Hê÷û¥R©×í1<¤ +"È™Œ à‘_’“ mùSTÖÄŠˆç!g×Àdp儊>z¢ƒ?0úg*sËtÂ;!1CÑ_d +‡ ?°D`R©åS»¾BgO®} +%eãö1e¿¿ê´8 ®(°0bxͨÀMHü{bÌ´ë"–®‘×sä%¼ÿX "A+i€)…¸€þOÀGÛ½€;Q•Šd%ô±^;ˆ‚À +vWPÈ”z s•¶x¡6/7ë! Ü"øZ/†‹ÀbŠB H± býb±†Ôðg +04Ô,K½@ý1’S½K¨•â ›F&K‘~f½BêuQ÷ÇâEøõá aÍ/%¯ç3‘'>‘`´ïíÂß"¥©è e^µDb©C…’Ï<½f¾)w_tz®1E9H9—Y ñ·zûŽ]™µÌ)£·gÞìv]”²}ü梔¡??‘&”q%8Ÿ© §u^Ó§jˆDh«›uHi]"rĘL?:’Í@IÓý%v¡FAæxa*Öž¸œ2i/ üvJœ°pÒêܾ«îOZšà<­(îǵÃ6UÙïG¾—H¤. ô‡)· rÉÉv{¼ûÅ<˜í˜ŽúúÍÚrc‡‡i¾Úíá­ëô|î‹ÛÞÞÿ+;÷@nh6‡8u,I §Ÿ¼òÝÕÙYë7ççøŸ½]jRåuIQýÝž:Ivj¹¤*%?èç+5¢ðäBH)e³C*e‡õÃ>ƒ ž“|jUÃ3£7ÂjÜ µ¿ÓS§UßöK9è>›6…ôüÎ⌑Âßþ°LíNÀçÄo™ãÙ?8ÐuãzwøËY¹Ã [H•=Ê-õó »'Úij¬‘£(ç+çmÞù;L á®d‘È<øì¡Ly.áa5 »$‹›åºN ›ÌG1ú¤õ‡ifj>)>e Jj¯Ò“3~!}<]PâÍ@ïDªñÀ Ôt™ƒXû¬[{Û®¿W¯gרWSÊ®!Ì3ãf ø`.«šŽx¨y*¹Fyã¢Ý0ÚK.l‡Óð%"ÑÎNöü€H¨hh¤ß¶¯½—a)'M|¢kÃ|\$¹d"[æ<]Ø/Ž2Ûwïx)]ú¤r*|t r0ü­hZáoYÊò¾eªdÊpª¾°*`ÔÉ:Ò)‰ºè8×à>?òé|<Â0þS* †9•øx·¶ðì<øžX~°6ühÔ÷ɘ¢–9·^XÚÝwÈz2òaAÈUû‘Åñk’"Ÿ»²Q¢ R:E’Öhª’©t6J (Ê,D*Jqêf‰Ê6#þ)çßÏÀ—Ѧ£¿{;2+ª5«Ößsn^#¯ U—¸ìĹ€[¾#„Êq³\ȉ«°Õ5ù+aëúŽNUšºjuzû5åúYWLöÔñuCÍŠz8%ž• ˜[æL0Üî”ÉÒìÜî€$àR~UãSÊà> « w«¶4 U±Ã*ßC…«:1âV,½É¤‹ÞõëÍMjÙFƒ}ÔÍ™ HÐ?æúƒ0(D‰w[¤€î‡}ÀtØÏDE)Í©ÊvLvô©+,Éôœîù¥$^:P-µïõKZ‰µÈ’¼M$ýcI ¢'Ê 'ciîæ½@›ºhm~4$ÞÈÛõqÄþI”Y0ìpî +;¯w¶‡‚ý؆-€4Ì8„HÆ/¯çñ«´ˆþÅD$YPÝÑ“4|ÀD¤;–r6r2—Y¥MF)@Jù©é¾Ÿ¾e&F¤|˜H’Ê&KlŽ wbR €€ ýaGSÅÍkx‹ ì‡îš)ËØHu:Kd_'Wù¦äEø½ÜÌeUV&¤¼ü£Š€Göe2ó¶Dnq±ˆ”È(i¹ŠÐïñw±£°9¦BQÙ°Û 3Èݔ՜là@®LžiJ9;$ü¹Ø˜>”OWd}` ¿ßÕ,r ú°Å˜jÌ_*HñÅè¼c·\ÙG ú½â@‚:†v@ô}xŒÔWiLÝU㤞ËèñàÆQvCEz¯“ýÌÈÒÉð7ÄìÂp«æw!óôû&,lÂl¥‚:l¤¬×In%c=£ÈžÓ’ +:Bâ: "§ëª6vçGЀõƒÇ¤"ÁiQӆР+ÐoVáEç­Šì¹±¦Ý;ñ<ñzgâ ØUMÃ~.ÒÀ)RÙ?+&j@^¸Ãtµ°µÊ¼ØЧ5·ëéÆÈ“S zÌb€¹Óa;µ´?È€CÖÈ´ƒÇyé*º]ª3æAÆ|ë×çÏs÷g˜oÐGLb@×+þ®ë´[°½ôþ˜$ýGT›Û£'¨ÿ¸u{ª>ÅÚ7Ã+è︉Þ]ê…Ãð‚#K…œ",•øM<[±dj*È@ó©Iü½lôwái—úþPwNFaD ðù¡ö]ü'æ”…ø]‡å +X3Í´‘½ªíÛ]n4©áSf YÃ6ùÚPÿ¹ Sè +…V+ö—Võà\´ffH‚ùûæùƒ]§;95¹¯j$ñY§êöÈ]“MYε¿v»ÆQ©­Œ4©0~×ôG™¬t.YRK+˜"‡%q$²Ly»‚‹çlþªØô´Ê:æbî…~R+wn» 'Ñóyé­º>-¬Y d{ÿ,ö~Žt +%_ÒÓ| ²ø™5­ÛYpbǶf,þƒ/'Øôûþˆýáü’@Ù™|SÐï‘0•¤K¡  OËõud@òÜe©éø°e1ÀŠ?o%i¿"ßn¹ÌÇÉ´?šŽ ÉjAäGì*à~¿N'‘†fMˆ™¸°Ö|Øÿ½@aÒ<…j8ŠŸÐQ– Á @ÿ|zã# ô ²½ÌJ›>¤çI蔜E’¹€ðÇjèJÅ,™*i¬Sbc3:~8Ç3Ç_ÌsÄÃ@èIËìá¬ÛÃ)[Õòw ªï¨ú^k2Ò¼=U%Ö*¿ç[Äjïø°PŒ²¼ÓFç½" §xíßH$ÙD!~>˜Ç’‰9¼¾K~ƒ` ékÔ¤ÕrEØ·ýxPÌz¿ù=z,Øi\·¹ñ/*æ}Ÿò1W¼=¤‹r—x&ÀJ ²*c\{§ì·]¤ô’%ÌÝòý­kîŒ R„ó—dQ]bíºnׯ¬Ãšo¥5ÒÔKOq“¦ÛÛ­Ì•'z»%ijÖdÍQŸÀ”¹TÐ “š!÷d 4¯>võéc +sæÍã} H "„zâ»èïÅR–ÐÆ¤Çp ^ñƒì» ¦Š,YÆ{¯¡Yà‡Cé’wB˜ÓC°vHE@Ú%Ëpní°NÊ¥ÿ2ý€âSÞ«;JF'‹] ¸JkÑ Q™m¦&·`%0æ¡aV˜ëcçXÎŽF·tßE¢4ŠÍÆ9m¿u SŒÄýɃV§UTP2c±B…`ôYM(òɸ3Rä!Ð +Q"I +\_Q£~àÚH9%ö„Û‹j÷Q¶Ø¶ weì*°XÙÛ¾b·¤»Úiw°á%í»úu%,6EGSŠÊbhHLœ€Ô$ 0›Ô=X¼`%[ä\v±¶Úqh9”ÈùíÔ—Ne…`ã`,Ü,¿>îë)—½f÷¼¬Y|Çu5UÂh-Ê!Åí¢$[Çï1c>yöû’z1Žòv¤übç.(Õ9¼ªÐ‚]UFY"Ž1 0öʼ +„9™ÐvA˜¦uÆÈÃ$¢òœÞnb.“e©¹}Þ¹ÖZ\ªk^e aÂ`)KÃ/À¬Ã 0mé]æ‚;˜gŽüNŠ ÿœÖàé¶wˆg Zm·\ÖÛd,–g5ûVG,‚Ì®·;ê”íâW¸ž¯êø8dÎ~ è}…oûQ¿‹(%°‡1§¡:$-íÐ(É­‘@D°´9>“`î0Ô¿ñ7x¿øcò¿¿€ñÙÏ?&ëÍðøáâÒ}Ò×_æi<Í×¾~ù³òÚõèê­vàŸðæù¢¯þNˆçÖý³¿4~üA¼¦ÿñÏ*ÿòá­yã2þikÓÞbé¡*ìH +€ú:ª s§Ô­ º_e¥~¥Q;…¨„;pd݆×ÒJµ^ÇÅ\«Y°Ï ¿^wk5À>±¾î/-©Ntíš}¾Rô_{¯µ´d ?rÍ6-Í:¬ÂNyFã+;î<žùZe«Þ}y¾fmÑGæŽë­òŒ^žÕõ†U±T]µ[¶QÖÜ;¾{Ç«·àƒüYØŠ`kÓ>$S¢¾¹eêZ‡¦ëWìÚ)‹ó7@ÀíG½N®§ÚI˱=–"p©pn/l5ÜÚ)Ó%t®-¿ý}¬>èqwæ1OJåJ‚€ÃA~ª–‚.6„?w¸$œ§¾^—5bT]˜ËÞo4é)©h©`ì1h5Û•ê w3N¦ ¿®ƒ ¢ÑtªR"s3&цŠT8Êäq”dŒÊ³&‚šl€†#Öcý*"°G4UWX7[VÓ"íÆf+ÿþÚ»ØØ§rÿzíÒU~sKlÁW bÃh\̉Yê˜~7lÌ-Ä0M›ÛZs + ìxe¢Èè/ËðÅ®/7½Ûrj2A¾%^ë^jåXr噚϶)lÑՠ霮Pµ +S ™SÉÁÌ+•¹#Ð+BZ`ôÁy'K}ÉM“‹¤Ro:§3¡ WŠ€þ^ŽÍ"뉈.ë!)[ ÷sºší2ä ¬ùŸëôü}®† ýÁBb*CAŒ&Yš¸¦Hîn”ætJð'ù™£ÍlEšAç´»fyšw2üð’>¶R¼|8Q«g,ݪíÖÈÁŠ]25^û&ÙÄtú6!5îl»ðÔH²\1©½«Y&ewî-ZÅ  õ鶇ÓCív=ƒ¬'½cº&3>ÈØéÜ!:9¸ÂkÃKÒ5P=s™~œ'1¤ÌQxa–ÊÍ&Q³Á`ä¯ë’Êž ÔØ9ùÿ°ö6P’÷`TFevfgwM=4ÓÌx¤ˆñÀXˆµ „=gíHZiå/ÎÞ“ñòì'=öqò=V+Ý顇å5²¥ó®žyZ­[¶O2ֈ܃eɈYRK0C5EUSÝÙ™Y™uÿˆÈȪê´ç˜z9ÑYYùñÿþÿþ»Õ‹Îùçàè_¸¬öx•C[Éÿ ¯éÒ Óo?å€WÿÐ÷Bà?wŸ©¿ ÒÏù¢²ól<Å ›éÇÑYp³¸Ñt\\BYf^[þX›s+ƒêàeÕAã2Zw³Þ +Ur…Î3ÇÕ‹{ìá6ÓÕÇé'ᬟh´ˆt …‰‘µ@ú‰ú'`VÍdí¯ÆÎH0:>,û ]Æ´AP¿ýÏõt=€fðQ2=~aÍð PS ý,õsb ñ_¿^ºÔr/àŸüªUFg¡glÜS“|Ðam%+%:\{ðxÛÞlúIRÿáIÊ~´ŠDÇöùõ‚¥˜lŽ_W•M±L=f¢{÷·ñ¼{srPJUþI¢Ñ°õç’ò¬CëYô=à1\$šœÏ”ޱ^Ú÷}ÏañhôÆa[ €Ë„dX®©L@Ô@д®” hûÖÖ|LýMs½éÎ&”ýu þ*šAS`„IÎJ×ÈU(Õ‡aãYŒñX °í³°Ê‹"ªš–ìØZÊQ@?d=ƒÕâu h¯ ±~ᜅ‹ ØÖ¯e7£Äɸÿ‰bŠpN²SŽ}tÐaUÀ.‰Ê‹‡Ó¦$†(领[¢,I(Y?@i”,BÇQ“8ŠKP-öP¹óìÐJ­™¶dÏwàÁ£~&g|L6;ÅVžXÚ4À×™D½ EsLùÇ2!ýnìÏ`Úg²!8\*O0ö™ŸˆËêrß»‰„ZDQ+Û‰œ„x ò"hûÌs9Ê{늖 b`Q¬J²+Å“V]’âð$ˆBM…„¹Zú–¬ç9\„Gí˜jw?ø~›3i­Yp~h‘ 0\T5¤ç…]_Wsul•–¨bB\îLŠ¢‰˜!Yˆ€BŒ2Ø-ʈÑ8èÞ÷aKûXöGñß/‰ FgÃïQlŘcÌQŽR¿t$Çâ| 4!Ó“õ¤Ñ áö^Î’aÚïpN_+ÚŒ3yå$DÐ7ø3~A`ÂãE]棋ÙR¹Á—FŽ»•»¹d&ä™Ì^ôªÄþ¨P¸Í·Ð˜Ãù\è$à·äWŽLŽºÄr”jÀôáÁ£ˆÀˆDÞë%ð8hñ×ÔpΉ‰³˜]Øî—nÌ¥í¨`Ù ð‰dÿÏìJ66+¥”3`CŽá‰‰WáœG;\«†õ¢M5Îþ¬ã²×0êçz‰Du*##R×v¼‰oÎåßþæÓýµ¨IÊzW;¨ÑSm‡ÈY6VËz/2‚› Kdˆ7b‹‡KË­]»üÞj”&¬¸9)]ÄOÍ“ÍãSêèáƒI6¼°±€ ozÎ0eX8»æÙ‚ÐF…¹´£1Ï?âÅæÃjáŽ%µ0€é’;„?r±°Áˆ’'F‚MÄuèÏaй/`Â…“x5ÅëäÀ…IJ^hÝ ñ8XKf›a}ÿ^«Ž®5¼€Ÿ~Aì;·R¨Ï®»ÔÇ {ÿÁ°Çì&™Î:¨iÈfòDÅÍ XB¸£L) |ƒÂN` ÄgcccŽÈ“~·šl Äè~yÏú[ìc+H²FP¹| Nëù’“­^;ð‹«q">_œ†„eÁJWØIâÔ*7#H‹ãD?¸vó&)üd=J݉`;Xán(³dºÌnj»cÃL‹ÂA%1{·²±`˜Rœ äe`@Š(•šùÓõy¸5„vÉŠ"DW$ýL +?Z]~õ.z€rðRkìh NM)ßmöꎛxî9ÔŠq²¸´Øiw€Hmb:y¢ÃP\În…-D˜¨ ¶‘‹;5¦ø‰9Rip_@ÍOçI–¼ÁqJ(…zå+n,×£;–Æi½mÂvqLX·æ0esÏh‘ñO°¦Æ'I¢€þ×1v°ÙòZgè¯ü ºô’%DÛ,õB&âáœËvv89gÛ²„Î!+êHt4O³™ˆ€v‚gÈ—]”îØt&:†§IIœ÷ûI +L=Ù€¾=š ¬  ;Ï–yd·›ì»å¹G[m4üÕgW±† QSùÈ=ãOÏÿ®¥° +ÜCoÀ IDAT4Õ†òÚI­–¤gpØ(ïYÚùÚ +°åý‹Ì€µÈDCeê¬'·¥ÚÏxY0Œ„«Þ˜‰l-Mã~ŸMÐŒ‘ÕÈȨBí»î'»i S+±Œì¤¬@HZ°O¶µ-…áQ UœdA!ª‰æT(¡çlé–iÃS¢(û0{-Ú›Reô¦P²Û78žŸÁ'>2‘ãÏE_ü»Î-¿²üðwÅs/Šë®wÝ'χ_/îùGñL[\}±øÔ×ĵ\~ïãâº+Åskâáãâw‹§žGpË{Ä=ÿ@žäŸuoÿë䪋ÃóóO= ÞÃÊó½Å…HI>h/ýÔr¯Û]Ñ:{¡×c¶öWc`aÓ‹ú©7ë(t¢ÓÛ³Øê¾ŒÀêj Kíòú«=à@Íû¢·ýnׂ 0· ÀZ›¡]çÝh=#kAÈÐQ Kõúˆÿ $¹hk)°VÑÙ.¬^4°îôcÍlA[^8뮜ÀGÈ( ®ÙμÀÌš *ÚgñÜ…••PXZ?~¡¤~ÒéFK;C§KwíBè7mš;[xçðÛ~-ÛÃÀaœpYs—óa0H÷ì.Y²â&w(¸C‹ +} hâF§„®|ÇLôÝÇL#Õ¬›óa-ßgˆZš!#|¬BXI•´7³Õ•¼< ·1ëùãçWá΢wnuµÛ~±Û˜µâ”³¢óBgì'X‰Ó2k»³çI;ôq¯lÂmvr~|)þs> +“~GËJÿ'p’CË@ðb¨#éû¥‡ÅRkÖ—5Hjœ0%¨ðš[s¹š#S Ä@ýA‰ì÷Ò>ËXùY~I¦aVʤ„eƒ±c°­¨ºÃ‚?~“ +sTHømsÖ¼äzÅÌ0€ær-\!càʽ¢ bÆ# õW¯ƒx ©È1Óy~Š4Mä!ŽVš*ˆF_¹.ðZdzó"Ÿ~F«æOf¿;àmÚ4Ï”uˆl(YåÒ +/ H?Ü(<ß@^ 1ã]0â)ðžýGÈ1»L¶xPz/EAÀd8 +Yˆ††V䰈Ƅ¹_Pü‡`ÏffY5ú¾aÀ Qy&“Ëj“¦E£u4†Ò­”M÷¹Jÿ.f3=c²NÞ­Ðz|–Vh:bê©=™‰õLµVÄbêsb ÛCeÙ+Ÿï”€w ÖWƒhW¾M@ þ€ö쪢þø!í݉ ýþ~ ³O; ¶Ä³yíEÙ½ßs¹3“cüYüÊòãq'Ô!ÌžÖ€ú"B§™›'%`~½^Êþ“m)i:M3¦þxò 'úœIfŒÚ@daU1õwÑ• +;ÈŒ_¨?¡dÙMP”E ùpkW˜neÑfÆ8Ýl»f†Ïâ?o)ôBu5: +tøH²¥””ñ{äÕe#àüaÓ€l@ËàÀ`Òàä#eœS¬MŽA·c#òE§2Uì-@-®Ë)£Ñ sj44?Àt›ºìY+x@€Ä/7ÎPÿ———VVÚ!•BTV~2x5>–x¸NCl%Ð%ñOV¼wjCóQîIÃ3¹„@±À°”øom Ô>"HêB¬F±`ìÜ”ì]ÌOyñP !?KÑ&’—Qíª’XeÔ Æ~‚6Vð-a$ÏH:ÛøQLcEŠ­@ö U*Áõä#”÷…Ž£e/4ô›Mß„s=J÷ýDºrLüÇÉ •­†÷ô»¼° +'É€@Cæ/dc0å0c@×YÄHà,ŸèñÇ; Ì‘Œúk­’V1g*ø2€†Œèœ 1[a&Œ›I ÿ ZE× +¥CLò>ûi'Ùùý™Ð$r¬o“ÓÆØ°PÏKÒŸ…,ÅT›ˆøx¤/X¬cÌ +Ü¢$åîÐAoÝ5Ên¦Ô52Z’ ã52‡¹â¾—l¨ç­7—ðu]¾ä?þÔà‚sÔ…¨SêQ+«V Û9±ú2FÍ7æT‘åpÍy‹;p ~pÅÉNW J- Óõä ę‰8Ò„ P¡ ¡ø’í†ùHéò9¼^9$¿4<̰.•<&e¶¾…/-âVªõ«f…ß1‚ ¿ž‚AùP-M+™Ã!БBÊW^©Ph¦¾Pûr"IJ@“ˆ[»ÀZd#¯Ãƒ’6©ˆ:§†’SŒ}ÌO +¢DàÂb½ºŸ’ŸWf¦ìæ0[°J­Èžýï'Û +‚ yðÉ“TdúÒ{ÝÒȃX]3®WsY Ç=³ü~P*À6PNã°°Q-ãÚuð€…•Å- eÏá¡K©8—ƒø0hå„¡C(st™P]C·ÊpÀ˜>:EÙèO8%nk­C9\ébý à. uŽ@ +XH5'Õ±ä°,Kû"S²R^$&ý9ÈBæá @ö7ÖW{fÊ&%_K-k4üö hÃ?oßk°xØ&™ËæŽ$ƒ ±ßáX±B6 zÒÚbH×òP¸2CÀ2MoÈá5Éd«Åmôè  9«@Aà 2sHz 8ú¤È(Õ6Û‚~Çdœ¿RÇN ‚õ’Sq\¸Éh+2+Éd€ÂˆE9ÃÑå’ÆY¸¿ûboº½'VÉ”8&#ÜŽ }à™-™E4ØÁ>< +VbM\Ò`bº7¯&UÞþñã½ÅÝž?_tN¦y‘b—ô{œ—G[µ ÓËK,´x.ŽÓïÖK‹%2ÑÕI³˜£Öd1Ñè®EiLRš¸+¢´ÉR”Eÿ3¢iÌ¿¥Hk5/"#LjáÔ¤¢àšŒq•@ý,2[ÿþZ¯¯Ëdðšâ–Ž+ªÙ&úŠïm; u|ÜhoÔïüÐJ Ô_Z`‘,Þ®¿ü¹òb›"®Ø™Ó=¥þ\;%ÆšyÙÆ”Œj,Án”‰×Ô—bQF§¢$î\ WEiÔ4Gˆ†š0¢Y.JÇŠy1æ™ô0¥ æeQžLA/&O9s¬úì¶7œŒÊ‘"Ô9”ˆÁX X³×ȳËKÉ1H꜒ãÙÄœ%¡Ã'ë=?ðíEà:±(„’›—ëCyhÊyÈpVv-¬!wÂ,´ÉåÄ´Ÿ<“¦Jœ©'ÝR|h… ;íŽ]Ürü2“þÖB+Žc“í…©ü@y‹è2¨)Ah±±¾·žûM¶(tXaŽÁ÷pAŽû7(³Ä34aŽ~B^ÕŠO)ä”' uHdÁyhÇד”­Ë¢²oŒÜDÈÁEª”k +N¨÷kÙ¦-ç)Ú ß­2ÍS˜SD8Ét|ÎÖ•õõ˜ã¾ççƒÕ¡áÂ'#‹C¶,. )A@†y޲»dh)Aa`ÑZT€$aÜ×FÆefaå3´¯ZAC¸–ÕåŒ6+“héÔµ˜IãÉ·¡.M•âtÅ#¥•Ç žEƒ¸ º9¢UƒI`"¯ç¥[¥îwœ¡s’²횈"¯E¤¸$ EF#ó*D„º0J-'2¨5›bØÜa^Ê·Ÿhƒ¼6$PÿÉn‚–‡›%ˆxÐÓKÃQ„tWJ¿,»¾…WÆjuwÅ©ÒyÃrw@#QÒoqí§üîd^Xk?ÃX87p3mSE;WÖ\>žËó ­~Á¡ð°õ­Pæá’sM¬VÆ?G›Î#~Jöë¥êtâîGþ—ЦÃ<À¶÷éüäíH½–ö)×. F +kc„‰€râ5ú±°º½‹Þ )þÁÄ”âhd¸žÑÊsææç†‚gz'=+CXçJõÆ=’ÖŒÁ ဖ23)gç›r²sXÙŽÕE1æ½V†¨fÈó˜´©/ À‹c1ª%—,Ay|»ÁlõAQ¡ct§›Š®hP*#OŽ’‡P2¸J 0àÏ•µÌ¤‰òfšXWB7ÐSò¦–Wohà +œ|³" þ°5ˆÆäY[`P07¡4>=4v5¥¶:GE&¬Ìû”™\ ’øñÕ̸¹•&&,³Sv~"¦ìèJ¥ƒ¹0žJÇA Xå!žUAŸÜ›“Ἃ^“´PìVÃuñ¯±z£®×¨_ + †ˆ¼¥þ€ÿâûî ÔœzÜ)熲JÑ I­lPñ+›Z ývX*þ”¼Z¨TK’•u&®¨Ž1dÓ¼IÍU¨ñÍ>ç±q}F5z‚¹×¨bÿa&°ùyi¹ÉQ¼eä’¨Ü —>¶Mš¾‰Aàsê˽SIk‡¿ò¥Oî"B±…­ÚY~8xÊ +LHf§Qhï0šƒ,p;jÈŸ±ü^`eç‘ÖL˜i ¹)'{F„ßB>—ðÆj„rWÈ&%ÄX£k¤œª©qVc÷y{ í9ê~vï®ø¹+m¸M$N݆>¦Ñôë×ÿÄ*yü)tß-*>þƒ";v\‰Çþ{xÂJNcÒÏÎ@„Ùþ#, €Ûê©ñˆžö˜õ£I6ˆùµ¼V™|°°Yv¶-¤ 4úß/ªTAâYY¯Û]1úl¥±ˆÊÀˆüEÔò· \…4Ĩ¢å@Ì5Oóàªv!pæ5[ŒŠq úCÄ[`¢“[j ñ'$ÐðЂy3+Mj*S4bÏSÞÃ$Ô¯è¥2›QuVµá:|»dW–FGXÁ¾u<ÓVPXsE¸Í~£NÁ{Ù½ç¶ÿL6´Íò­ÐÔßwH¤¤f, +ÁpcQÆ´[¨ˆ  +/“]†œŒ$%K]ÆÓˆhÉÊó¡< RWC9ÄÕb“O I*}=×kGÕ‡aÙÿ$VÓj¯ôÈŒ©?»¯Íý(IK*$”…5èÕà¾2.hÃ)l©•ÈÒ£" ûÑzÎ<€©ùBOgo“V›%Lûu ˆ{¸-™Åo7Ê#9ÀdìûÁK|oÊõ1d€ÕJX¯|óŠZiN@úç[ƒuʇwÝòŘ·ÚÜÿŒg°Ô¤MJm` ù¦å^}‰w‰“?^ïY ry^åÝ4…»â„½ òϼútpÝ6‘~;<´Ý—Lá ŒIÎyêšh"GÍŒe°rÓ¼~0îÕz½ +ߟ#F%;ˆ‡åê²S Ø"Âh²µi°V{Pj {órÊ UÄ:hqÉ5†‹&ÕHZè%I³UZBè*ÅV,MR)“B˜ìXp•íÔtç5\Q”®C¥ôa|ß]ClgX =N ±[ +¶Œo±Ý6áÄÅ4vó-É#ãxANéTy’o r|E®K°v!Ìýû¥ñÆðZôȶZzœ¥ÆOQÎ[ +[BÏŠš¼Á’âÆ[IèùŽB4âޤ2Å1¼¤r($”dñì®’naÕ{×§n–;q>–õ=8-ËÍ«I-Y +ú»²jD{ذœäIIÙü¶*+~?Óý<Êy!0.%ÈÒÑX¿\EŽnis$ ®Hw(£ +˜ªõb9Çð Õ]Å)ä¶çº8Ö—Ç5JÄó#ÃHÑk„–ב kÙH'ãú!­E“ê·±9!Æëņe½z`^&…²®ëß|*àõaZÿZõuý¸<[f!é`D® ‰Ö$8>uÌ´²ÆMÐ 1æ‹»†lŽKi#gá=QõQ‰Õ½œ ¦&Ù'–3Ë#Sb𯿽 0’óP¡¥r[67-©T#Iã­,ÐÑoœ±áQ2›5±ÆôfêÏâÖû ÜfܺYsnæC‘©‚×~âŽÐÐ…ÑÄKSA\ëü–h´J=O7oÖ[I037Šã0P_qúÂÄ™qqñÁÖT^5nx9=†˜2RŒÓúòÒ†=\²a8ç­|¿ ToÝ`sc«.w’ÍL܃Ä&3E1nm3ÒG)|¼1Öz§p”Ö¬E¯H?|â4T6löÐ9Õ#zåf¦Ê3JâZöYXžú1ÓùVÐhúSqx||èðTó>~ØÂaÉg§äê³…ââ£Hà ]ÛKõ5õ‚Îhä 9ÆP†Ò‡ÇGжºpú! ˆ…þÌO^øZà+ORm,å#¢ …0ÒyJPQ޶‹Ú¤c1†ö›ÅÈW4)g…!-ËNåÎøÞLÂõWÐa ©™ÑRà½ñ3³Â +‡0õGéJ×ÙªÔøúèBÂ3¼Âú¤!%[åàžx¹âvxæØÊ¥Õî–»:!SÿÕ¯“"6Zeç2º=ûש_ÑhÐMÚÛ6­ü6™BùõW¦z= ça†4#•ðž[>º®Í`m6«¬“ÐŽþ형C½x¬ïQ.Ćd]͹¥¥³‹ÙÄ;ÃfÈî +ÌMÖ™q TWθ£ËÄ3ê­÷pƨÚvûkI³åÃ í¯‹æ<ÚšûëÙ®>lá”Ícoí\l´Û=.dß~©ÇÒzo€5ÊÛT}i©Õc“…0êF‘Úm?ß๠›÷²®h¨´L¬/ï·ŸÇk-¸|ÎV#ÄŽA Ûíx‰Rûí¸¹„yàý^®Â·±t6\7¡ëÂIÚ¹:¢nÏ'ð¯d+i5Zí—qò-4ºƒ.ˆ“@ý;Ý^G:E”¤‹Â#Û%zhñL ºˆw˜©{¨ÜïžéZ@»Ý^o#[:'4¨È½v¶\ õQ/ó8‰{½¬Õr£uÌ&á¯ò$6*¼×¡+žC‘÷m5Ü“T6r÷îtf}H-\Ÿu;/qæp$†p~ú­ß£¤bx¢ÎIá +qy±%Sl Ià·NbÒF2¿#^\HN¶Å<•2„gg·ƒœ ÷pN#[„“w"P Ìý`¹]Âi€%9dpç½ßÃkl ÇoNÀI?8øÝhy¹7’Œd‡2E—šˆãë èœìcmŒaÜëöZ ­ ïSsb ý¬a`gµ·|¾JøW©­iAUÏÈ(4¬8#eMæNUúÔy‰ŒE¾x÷Hi%}/Ø›É4 Œ˜‰’¦…âÔß– +ÃÖ4-’/¡s!赈ʹ_jû3>~èïÛ½ïiñ´¬Húé*,æ³Ü3?ô°mèq2 +&ÍzƒS‰-ÿÒ"Ytê«™öv¨²|³®+¹²ª¯l|néçôQÿÏ¢„,|ˆÿ@ýõ˜xE‡R€ŠÕ†®;ãõûi5õ$ ;|~¸–°eà©ãm®ŒÖë÷ù9{Ýd‹NDµ<ò9x¹C—“«/ ˜ŒÓ¼EO´O‚Ê™â9_D¡µM†×÷¸:ÙKjÄV¾ßF~³‘§`m?ðVO¤°0–ý9ïÇJÄÀÎ&%”œ$¨ Sã!I’neÆç6¢KÈ&íå÷;þ}Õébp…/6Ä*E9ø‰è¿Œöɘb¥‚öóðŒ5d8m%¥BS¨~ìûH†RÜá®|_eE´7⦠5œ wÎÞ}°}è»÷]ðÎçV¾#úFUd2~YôÖ:½5uÚŽ¿N/Â]]0°ÌcÏ üÃcú=ìÀ¨¯|hоøÑ"n!Ùx.™2½—{I–Üúác'OÜ|÷=÷ÙE¾zk@j['Û@|{Òíwþ‰°fÂÕ\åêjϯûI?î’›ôGkƒý° w’¬Vží¾ó_Æ µDÞ>Ñ{ ÆŽô°¾¿t6BA4,›\±rŒJ&j5Äwžø{uþ n⸭¿…ïäs«áœÛ^SæÏέü@U"¡X~ž =˜WÀ V¾ŸXáB<÷£°L଎7qm3Hm•)†ÆÁ!!m“/4Yö刣òU˜€°…ª\×c  +©°7Xe¥M˜Í>#éhê£Â„,%j62Ó1좦eÇ‘.*™ ®î×Ýv;ëQ%ÁÖŽ§dœ.œ%Ò:Vß-, + O6Ì•Òb‰¡5}LÊPŽ^h áÙr%¢²ÒøRUgÃÓ…g…ÍFø +*N +èëmûí*)lÓˆ¶D8cqQg +ï-¦Å„˜}@÷ m+y@1Ñ™`,3“Å¥,·xLÕw)‘,¡¥ufËczü-S¡½s\–ãs“¸¢ÕøTFxòIÇZK%¦§ÔñÒ, Ãl9[8§ØòP™°pRbñ)¼CÓ&ô¹žçûÎá"†MV”Ïïê߆š‰0¶#ÌŽVÓXùqqb6èû1YÏs1˺©Ê®…óð블vé½Ä©h̓<Ë2²„ÙL x:£ÈYú†~cÖ2Ê›BºŸ ~ZÃ4åI ªåk÷C³©ÇÇSü7£éD 0²]:ƒÞôˆŽÝç* ëä Ý©œ¾í¿ðüãºê´ë¯ßõ¿ùþÊ$B}þU v÷7JðD ¸ï»ñ†#_»Ghpoû·@ôÑèT-z†û}–¯÷Èzž[õ¶ðä½þ/ÿ +Rêwþ`v1×#¦µ•À'9¥ˆ~DL‡ûpl/#U5¿)Ö×Ïþ·Ïð]O~õî·úÀÍ|ã›®œüêÑï}ÿM7Mî}>êÞ´?Ã-ÇUnªþzÊs ˜EZ/Hÿ`=YÄiéf0[ÍËøIÚXÁ/2¨p¶ +F$K‘Hl@Qÿ3ŸS2F4™ šÐ{aÞÖïgfzéoîaÛ{bJy¾Ó´l+{¢hVR[–1²Ôu+Ô¯þÈ7ñÅ?üM”eì2&­}…„ÌWTÚK>¥°§É‹ í‡} ËÏnÆ( ÖÎÌÁËÑ¡·2Ç<·Ú>pàÂ'Ÿ|êÉ'êòö IDATŽ ŸzÀ€ô«¯F²h>ùÔw¸ó†×ï[XØ[Þí\xìØÑ±xÃåW> Zg •ß10ÙîþÊÝÜ9ÕWñÑÿþÆ¿ÝÁ¦Â–¬aXïí?qš4hè6…o ÙúËzé„䤶ï<|õ{ÅÍ‚KlUÌw sËéV”¥‘ë…¢(™¨ã¸çÁ‘òVæêéÂ"¹Qÿ»ÿZ=û·þá¡C×^{èškŽ=úè·¾QÞÆ\Éœœ¤â„çðß«Ø2|J‘iPŽw´™òdC60#LŸŠæLl»Øo^!Ž¥WV'7¨Ã4’ žc¨ÍJVÝ]NM•%Iª´¼À5å[eê +25™‹q‰–ƒ–AäW-(‚˜îš1,NjÈà¶ò~@(»Ñðk¯‰ ¹Ó–·ÖY$[2õGN0-q`áTÅ#ßS‚˜{þ.eêÇ¥xJ›`œc²?Óq6ûœ¡Ó ¨ÝÆŒz“yyi¹_³Â+é‚õìÆ-cÃI¦Xæç‘eÆ&s®RµG7L(ß.)£ÒJS{ª³z¢¨‡xXiŠlÀóRíæ¢m + J"®eÈygT H‡¾^Ž F3’õo}S0G=Â}Ì\Äÿ"P<ºÕ(Ôܰ`œ ·Öcñ1É|§~R“½u±´SÀ¶–§»ö*„æ,Q‚âýpÐ"Ð{):g'þvåùÞòOµ¨8IÚÜUvú«=Pæ}ouµÇH«ýµhמ(ÂÉfÖÚ5¯gÉFºôZÏ€|üAG¼Y|ê>}äkGðø'00Aé9 ûÛþÉ_¸ú0òspôþ#Gï?JˆÿÀnùðï›7áÏ5oùÐMc<àÆÿíƒË{ëè×QZ¶ž»õ£ŸÞî]B{øÁ‡Þþ¯ßiþ\~µªíüÉ?þä{ÞõžþÇn÷C®ñÀvÿd"Š ¨¿O¨8‚ìݲ>.ü^rÙ%@ú¹ø¦©§mŽÉÒØ¤Î°éÂn5ðÊÚ£÷ðí¿íØ™=ï{ÿÿú©;•ÕöퟸýÑÇå¯L”cWðü1ñi«6LåÑN2ƒuõúÈêQ†l€vªZF[¨‹çÅ0‹q,ŒøŸ ¬ëâ?*ŒjLõË4áóíïõŸ]é_J@oê—–è_®m;°…júââe±Òk/ãÎg_˜~[|ŠaÝ¢‚U_ud% +ÈŸÆ„¨_Ja¶·ÔNܰë×ÇÕU©íï²n 3.GJÃ`6€¦âÏ8ü'ô©PÃ3yD|)æ’®Ž0”ÔR"”•ü/j¾·”¾³öûTûw”f)È8ïsG`N,fŒ`íD¥ ®ÿ£™ˆo2Øè4q´+Ž ½<-âˆî’ðãZ-Ù-Y`ñõÀg¬4ן àA\´ád :©ÂUY¸ÒÉ㸓¯†ˆ;i¡iAßœ ØÙþK(ä‘WHŸŽgr>Ê»ŠìrNU‘mm¨&c æU¬ÿDësñqæã J’ z|Ëua¶³,Š¢Aá˜pA/§Ø$Æ”!ÛÉÙ¢lèF4^MËÊ«°˜\Ü-uˆ†ßàg†) 4B›­[ó¸HN·Ÿ-ímUäÒN_0’tøÆùÏÛ÷Sd-.±qõ Í«f[™ ²ZI˶ïÈza6Þ¡´I„¨)³•Í2¿¸6ýµ2e=̱Ú5BVå*CMùl¸˜L ~{Ò…-ôá+è+^É[Ñ8Œ#A]…s€Ù;S DK”¨h.¨¼ .¯_Ö¬~Þë'TÒ×?û«…q§ó9µ‡á–fºDŸã!ÞY53’\ߤ²Ðô’uÃìV!)áíÓÍ +×9q¥ê lC·Ä޲V)Ý_È…ŽSC@1ž¸–˜ƒÁEä¿À¯2m«…ÊÁ›Ñ̛Һ*Çðpâ¢2*[ÒÓs† S=xôªŸ»¶@úá{€ Øgdñÿò*QmÇøªøÉ~ŽAêôN‡xÊDÐn÷}ý>Ø^ý%›;ö|¼Â>Ɔzå–+$GØ?^bÁ4L;tMù¤×¼õÊ»¾péÔ_y¾%>Á»¦Ò dãJJ…@6¾" ûo:h¨ÿÛ§î¸ëý⺻¾ðg˯V–·Ø`–ú¾¶|AD)UGµãPÐRc@ ËÆe"iþäÓS*´Á*z6Éo—÷ò*ÔóÄÁt|Ô\¯É-¬,ºTWå}ÆŽVøUâÀÖ®úGÛ×el(é8RL´Æ®_+¶ËL¶è¤í| ,¼ ’iõº›Ã„#ñºæâ9M1f˜ÙŸÅøP’ŠÚÑ]QU= y®êƒМ+¿²‰xbEþHGÃ>{L/\¶3œûŽ,òÇà¨Üì™Y .$”le6X’cý‚½Œ@ÂtÐj)½{oÂ[ D¨¿­šO<Àf6hbFñH]­Dµ¬€¡é¤˜wîÔ†4á‚ì(ÊXõI䔹¡ÆJIˆj42æ3ä\A­1IͰQµïÊK°×ÌN`¹Ð¹æ ŠÍÎu¥‚`Ó¶#:¯†®ÁÁ£>Y9'̧gh®^;¬À±è`F>t/0ø<þ­GÍñ^´¼D|ˆäÞ+ßðsc'<öÀ‘Ýç.í\'ww¦2“̶k@ÇöÜò»·Ìù73ØÿÓ¨bßò¡Û}¬Â„ J°L0ÈT9æyþø Sÿ·\£ ŸþÞKö’oÿÃãÛÝ*³¬‚$²š[MSßj+#\ªû¿øÅ/nw¡É<àÑ¿ÄüÉs,#0î«lÊQ*mÂü »Ñ:—v5±ÊÞH[ð=gp*Éꅎ㘨=i 4£Ðb’¢õ1“vNÓ&A¡Ë¥ [YÚÖ\Œ¿D ¶Àü(Y˜L'LÜ\IW޶a–ÛDµDâ—fy ¦F¯Ší,ÓQõ¢6韔ýÏ£ [V5  ¿!ú[ž êˆ'Qwf¸Þˆµ‹Œqœ-\) b\ÛÇmȤ?3‡¿â†™\NYg +¯‚â?]¡&·’M@@X½rtÞ±ØdÊ .Æc‰ús‡aŽP Üûçe§À^[ Ò¼ÁSwý' ûÒ~Ý,þ#'`uUú Ä™{e`þ:MpÌråRmÇ´ˆ Q‰U ëŽ;ŽY–ƒ<ÀTfµ@àïj _£«;BkÃD&Ô1{NÉþŒ5m‚§ Èþâ#•ý ÜùÿîcÜQÝÓ€úOží•·æŽæi¾£ƒ@ý?ôÁöøÕO\ àþ£÷s5AzÀ»Þõsdš”`>ä©'u­ €©»óRåbú¯¥=ÓyÒ%?{韺¶ÐïPÄk´Á5¨)mÐÃæb<Ü…QÚ °`7)ŸF5X½\šüݱG8>v̸å?Üü¡›ÿËÿõé×üÌ…?|⩱oþüw~¶T\×#óz +ÔÐÐDƒÛÁeŠ„Fg–¸mh4tã¸J#›ƒTÀ«Ð«QJ ɦ†’|Õ„MVÏqÓÏ“¡ï“u àèËÒë‹9L/­1°à™Ø„t~5"‹´ ¢ç°TW Ø$¼æÍ$M;väàÁC—ÿ˃+?~þÜuîÙñF?wP$Y[[9xåÁ¥]*ƒƒè…øæ7ÿ:E£Î™zF˜9–´í®õÛ«ýkßrøß}˜ØéœHòK’,!_Ô}rh³ÌP=™”“FèïÚI¶r:ýëÿ§×ƒJÊNà½{÷þÆ¿ûþÇòï\¶ÃȦ¨ãí\-ßxÅ…Ëo‰Î–:TFÚ´Âyî\öú9å]ó?£MIrÁtEú×¿ç Ø¸U {á}ãUàÓ±ûŽzëA¶Žõ×ve mWÍöŸÕ×éEàžÑHU*ÀÉ¢•Àå=ËíWQuõ¬í“êÛM¿·¶ò_ÿìÎkßrÈ%tá…&Zÿß÷·ÀÕ9ÁpSUsô¸ŽTQ¥Úf©Ô’G’iÖ—›áâ§p{èе°FöÖ­«õ{iûÝÏŠÒ½'G$ÕI‡,±©šáœ%`›šIåÀìU3L.‘¬ÙÌQk 5Éñ,ÑC†iZšì0J¡·à ”=S¦“Id ­•§y9ÓÌóDJÎ[‚µ¦¥+gšöYB@­:Ûï˜ j¬÷ËÁÄ~cßZœ®€<êSÁè~_óSí‡1bQµ*ï¢É(€°¡Œb' Š(!úUb0Gà*q»¦"2‚0¶rs˜ù WÈRGV#²ˆ–1^Rùüøš ÂàK[0Î…ã:ŒW¬Ñ’UÚˆ%›×ð´¹à1¥ ÝÎ|6ÇA/‚]`”3|-Çp-Y!Êd±}³#JzZ”®žŽ*ÄSL*ÍEvb˜®ÃAD4 #Ì!SåÞÉùF*·;¿¬à¦É¾ÇÔ_Àº´±{Òð»—‚â[#õÞÔ]pý¨3…b/¿êØ|óá}ûî4;/{ýÇ;zß=“¿í¢R;ÊUtï×ïiíö}ï ¢kÞú¶{¿6]ø‰Âá[Ú}õ[ÚßÞò»ï›ú«:©ÆøéÏÁöÝïø…w½]9¶Ã…wë>¿Ð(éÃ1׿÷Ýêø:<˯qŸ 4Ð_ø:tðmoSwÒ>ùCsžfk'wŽ}ðȽ1y¡êÒo·|øûÏ£GèuDŠÆ<Àne½+@SX¹A&×™Œí³8}3U(DÕæ b²åÈá4‰§÷Œp™ºíÂà3?£K +Ne5Î6uuŠ(Áâ—Þ8@]wé;’ùtêY‡I7l!Õ~Mu'Ä¡y€Šé¨Z_ÏUo¡B'@üO5^¯~Œ[ <¼1r„¢·R´Ã‡iq]èW)­†â +Rìòt};ÂÌÓHOèŸÌLš†°&Š>€¸z…*¢LGÓÞõÐüS“1œç1=e á± °c«…vL!¯Ò“)>³G‡ ñßLÛ¢A`± ©R¡ûÃ1àø‡²¬¹¢ŠÙ— çØXÞZâÈ +Eëù¹8ÀJ«Ž}YU±b—ïjY ‰Ð¶Fœ›è¸,Þ`ûRÂ77é!¸²m½a <¦þ,âÑcæþ|`'Ê«_T3Úõ§zì¡WÁ|=öÿ~4ó'° ~zÿ=_þÒ¾}û'Gâ4ÔŸ;À®¹æ0ÿÙÜY2P7@ü÷gÎÀ®}ë!;ëéËýåwR<è½÷Þ{ú~èƒ%¨`[±fpÝõ7¿ëí÷ßuçÇO*x¡éi¡½ïFÀ¹<€;+Ïî2ìÒj4›Lú¥ÿ6F÷|ËÁ;ÿäN±M»÷ëGî ê?• °/B€— O¢ú[¹ŸVãÍuKq*­—³ŸŒê†iÔ±fLc?·›"ãÛ "……Ôf² +4X:šä´õC‘–q0·[ßÖäààøúÆ\`¬°m@òúµÂ3T±²ºúXØk¸caá €y@Õ l ]ÃdëõŠÄ+Q48Mc’ +J@š+Ñ^t¯Êz0ަMÇHÍ™T˜–E¬0‘¶s-ÖTôo倢ؖ«[u'ÜF´v戩J”䆻Hv,“½k”g&;™¾5àÑý9Ÿ«,‘¬,–$r¤þ }e¿%L +Ë‘úcIÅQå9ŒgXÖKƒ²°£‹kµCv¯°Ì˜c[c°¨|Š˜B®ŠÆ1ßJ­ÒÏ?0 ®Kµý|B‡á¢(Ù€ãå,û;®ÌHªÖݪæ(ÈC*Â.Òê{;vl\âÒîü‹Ë.·¿ºwk×¾å0| ÃÜVûýæüé¬ÿåÏßzÈ(˜õë Â3€ß~ë+9·O~ês¦ÿ¥¯Üœ}ð€_ýÅçù‰7mÚ7þñ;ïü7ï59rÌtö_°kòxÐì?¹2šZ=¯C`¼6pÅåW=òØCtN™$:6¡¦<¢¨#ÊÜ »LÅéògëÀ$Tá‚=jå}–¢úÄBžä+†¬ç:ç”—Ò0°Ï¼&Žöd’#èôµèÎ]%þÛÔ1ôIB?Œ&r0ØPcûMøïUÕŽi¤Nê¨ z¹$y™#ú/îÝ·ÿgÊRç cç½QŸ¡÷±ÒËB½ aê[øxf@à‚Á#ùZ­9MwÖ:6°$•ÎqÅÈóƒ4‰©‚©æ×"þaàà˜i.çZ¹)8Íæ*d™ËzX˜×J†å¯í˜N‚¤éÔ´Ó]úíp„—©å¨€Ðä.tR –3D8 ¢‰5mYÃWŽô,ðý8Mqf0Í Ë¼_8.äòtí—OPž°eÈ_$qr–b6§.Baך)¾ó½'ïúüí׿÷CÐïv; ‹ sh4ÿÎwŽ_{õ¡+Þ„Ê e«'Vzø¶89ÃamØ,Óœ_híXH,°ÂÕ~ Û°‹]a$Y÷z+¡·‡÷' &ƒ„Õï÷9¶ú¶OÜšle÷»¸ûkwW"fæÄwÜq͵×ð¯Íîöj{i×l}ßWõÂh!-¿zyÆóù Ë{P*ïœúØã͹¶¯áš“~Rwêœ àû˜Òÿöè¾ ß0èá>çŸÜþþ·½õÝ÷?pT°9«®ÑÑ…2ˆ#Ð?ÙdòRÅWbµƒó)I7l¡±n¢aâK·5ÂøçK‰2½êq¡Þ!?G (zÑrÇÚÏ%UFˆ*âWTg§’ã,Ébyµq–òšp}Wë¨9ÑyŸ„ΚÏáE£€EqŸõPG©“`…6auª€„ìÀƒz‚uSëJàn%|0 qt¶Âãåkb»Q¹3Xè Š‘~Úå›l%‚Ôˆ½»Ï?ÿ¢‹–^}N2èÆëk°=GÒ¿??)Zg/‡l…y?tº‰ÄjÔTE =Kb~m†îBFÑeuÆÏ¶"fq®=-,H¦‚çzX$·´2+=Ò·Ô"ΰãôídqÁ0 X½†a÷½l"%Rí±ü…¥ròäX-­ÔÄ„U£@Õ…>Cþ +Ê€ËÁkÃ$=ÏcØg]SÃ:Mi +œ¨¾&õXÉøÚ¶®=L49f"ëÅ„ÒjåÜ32eYÃBÛMªC`Bîˆ|Ë‚}¿UÐ+rFåiUîi`ta4ó-ŒàÄ*µ®º8>!9?̯Œpç®*ìE–ZSLMts†Ç4ðÓtÿèÕ‡î½ïÈ5W2—˜ò³jk5šÍX'Iš$[ã&”öZ{içÒÔþ36¶ì£Ÿ¦(ùßX[ÜùȽÇ^sïºö ØF@¶Ð} þÜ7™É“Í®Öwú–V}€ƒõé¸Lc-Úè…Ú b´1ãéUZŸf?ΨBåH &ðáÜ6M=.˜¨Oâ™ø×/I‰df`»º¤FK•E¡°Á}½¸bf*|l¸dÁö|M+*ƒC €¶ó”~D¦"ýú¼¥ Ï@)ÜÚ3ÙÆv_ N)‘…˜D¥ù3~2¼îâ}¯{l“ uà7xÃëÆ5\¦þª? Ür[h¨F½‚#Ÿ~;;©ÓÚá4Ãb¥ã' ~FÓÌÓ +«…å;×Ë¢(q)ŽÀ‡ŒTdù,êò›Ž,é)I žL m»—nU"[Ukf–U‹ý•UÅ·²mÕ[6Ís 3k\y²šº ¹î[–2ƒ»Ëze]Žùqxr…q”Ÿlˆ@ñMdGáÓa¡ÆKQ­PVàŽ +FÝÖ‚Çy0ƒá¹½A4M¨Ð1Æ_2ÕÖš„OªgTäjÍHŒ›vTýa²1²µÐõTˆ*(NÀ?¤­ÖäT•ͺÇe1¸Ž<€¡wÀ ò1ou2,ôFyÅCRêE¾ûä“,û Dúì4æÇiÜ~ìØÔý@÷û}…g¢ ýb³º¶Ú{¹ÓëϪsxäo¿Ÿ+Þ|ÙÔ³í_¦ô«í¢7ÝtÓÂ(SZ®%rZŠÝÞÓ-‡ŽüäþŸÆèœ ¹Š$ ^fLXwÝõåýÞgN*Ó2A93öYV ¨_LBkv‰qvô¾{Œ?ƶéÚ‘Ì\íå2¡Ï’JeŒœÐŸ¸V%*ŽE‘T-P ñT¥#õ,͘ƒk©\Lì Eí6Г0`ñ_)0ÓëžòÐK#¤VUÏð‰•§÷,ïã~fY8b[дQ‡-ú–d3`†QXeÛæ»*l~¦ßÚç% þïö¿ñ]E—}¢<Ñx ÁÉi}ÂŽçÊÀ@÷Y Z¬`¢â¿«Ï[pꔋ*ßJAügSw†<àšÈú¾WŒr, çI tE ŸÔ#jÄ™oLCs4CêÊB.c ë(JÔ"E2S¯¹¬ó _9¦›Ú¸@±¢PHªj©|_¨Ï‹©­Rk”®>›†»›K悎ˆ€íKx&Ír¡òlÑ “YQðü½Š&¨„©™>Ëþ ëfÞ èÒRWƒ’ý +Ÿà×D«A㜚b÷¹S““D*NWûÐ +Kötq ØÂZ`&Á¨¦q° ù0eÇlÎÁT$TJ]>ÞDˆ¡ ÈJÇãbñÈ¢´_ +4€g¾ÿäå ú'hÌ/_CÀµW—ÎahlÃñÓ·Å þ=‚¹To×Ùh%ߎôC»é}7í¹ë¿Ýµyÿͺù>mÄžºv<4Þ4 ûg$ý¦*ðÙ-¶Q³ù³»¾òJNån_“¤r˜+³iéTÜó¾e:›l!¹R®¹ú0|lŸ¼1÷£ÊX'Pu8ó)È.d +% «N†7QäÎ4®üeíš<Àh³Ä¦œ +H<~7á‹V AžÎ`O­‚<ŽöÄȺ²?S|„,c=ê@ÄUUû4¢‡ +çÔaƒÞwl0ÊJ§íê·€¾[ÀJÍ%ý¡ÿôw¿{`_(v eBÙŸæÏ$K–æ±ëì¤ßœ¡ ãѰ}Mƒ1 g±mŠÝäÛçšb¾“ô7ýæ,nW +ŒÏc ,6§&AÎʬǡH²"NÀ3t#ŽÓp^ª2¤€ÁY Y®Ööˆš­ôäŒR—b°Q4 +äò”q¨X ÁtDL!!dAÇÍ£õŒ_*¼r®JçXç!5ú WÅŠý²HcÎl¤ *Ž‘õÍ&ê¹ý~¯¹g©¿£Žè ¾¿¸®œèu¬Œŵ³Ñy¾çúÒóinÖIvÐ몘ò—ެô„s¢áÁÿûI%#8Ø‘5ΚàÀMk˜±Š$ÂÕŽ`–×3V @·• ƒ`“Ž;R–м6n^@z-•[‰G>E`2…z(‹DÖT¼PJúD§Š¹3åßúZá55å‘­ ùAŠ ˜=:„s\™`£‹& IDAT¬e:*´Í£Qa¢[sþW¾ú—¸tïÒž•‡ËáŽÆ¥ÿb<‰¿üÍz ø +C'Z#Iêª`Å¢úà-7½ ÓÒ9Êü}ðªk¾õP’Çëq´$ühûä²]Ñf‰¢ ¹Ù«'úwES4š†Ÿþ£_zÉ2¼úÏÜùGï}ï wß}OkgëàÏ<öÀ±Ýö±Ütýy{w ò.íA³LkÂÊÄô·nø¥OþñçôX©ýR ×\{…ïûQ¤“ó6Xìh¯v8ÓêWímï¿ñÖ½:ë*Ó~ŽÞZï_]{Å%.Ñ×*ÀM}'çï©Ø‹@x¢°o L´R³¹«}â8]=¬ÐUSÁ¦ÀV”\ñ¦7@'Gø£LïߪFc®G”k‹«¢pÃÏ+¥‡x%äÆÃ3+é0GWAZÃÈf‚„ËhLh¶ÔhöK²+pMiŒÜeè*‘øÈq<¿&[)¬04²²L”† WPâ…A+º ¤0¼h¼è}Å×Ñd¹Ñ$eá`ަEuYŒ<¡ .²Œк+Gpã{KÈ–q’„g³°{·˜lzÌ£AOº–@‰º1Òª³R5á»ÏÛ·¸÷¼¯;°x’餟 N­yä…4YÞp>Õ]m0™þÆ÷¢?ú |€Ž±èlS õ@ô¹.œŸK/.ˆR ZóØYZÀ ¯t‘Û÷6{pÚV«DZÌ·ÑJ^j3¾øýµ>tÏóòµHú.ðøÌ-5{½ˆ¡qûkm ýá|‹:p>äŸbð'j»y†.âÍð:)Ýq&L!2 ›ÎŠ33n8CËûz„e3=øHý®ç¤irjÌÈRРeئz–hþ0os_Y9™ „óÖpV‰ùÀ‚Y¸ºâaÓÅ2›ÄH ~Qèz¶sO†Êúä˜(Ká¸eõÀ’}”O8UXn\H_>T…‡5ê”8äún¨ÂÿN0œ”á}iB`9Ñ-3lº±êÌÈû-”_Ç8`5 »Íº”: ³ùÙŒÏu”øO?7R¦·™ ~\f†Ã,èï@¾.ã#/»ô +øØoðØßÞ»²²²¼<ÝüݘkÀglçÊ ÚsÅ\så•Wß6õ,íÐ[¯6ýw¼ã00<íÐ<€ùö~ÿ“Öï~‚ðšk¯¹Rhº¿]3 ·c…Í{þæ¾{¾z?t^µçìò«y5‡?yÇ”àÎHTµôëéiÁDHÍÚÙÚÉ£¥ 7aÁŽ#MimQ×>%tj¬¦{¹N)÷7ÕYŸ®‹wK)Ä +g-Ï«wÂþ3+y .äkù:cÉÙÉ'¥ôäÍø©Ö]?,† ®åæv5çLÙ™ú(`Eõ§5³~ÎáQœºÚôjß@4DóÆÀ`Ý›f9«½z §Ÿ@ý÷œáÑÐï¼HmRb8ãlûÆ÷Pn6¤ÿ )Ä `¼…öÔ÷Å…¯ÅêÒÝžXžE¢¤ÿkÅÊótÇ’ýíÖ'Å™™ +¬ÒX—Ù“V<µÂcÊ\‡jWò6<ÆÖ0‘JÝz¬x–Lëa$Š$,}ŠèŸñ‚)µ¨VûâârÇŠ‘7–Ž `œr•o¥S ,q¡m8€P×–žªÙS ã TX‡,1”\Jã*z|…!K(PÿæLÌœ·îö‰u™1KZÏnˆþvÔqïòü|H?0€±¯ÖuQ Ð*↡þB(ãS û{–p+„ÿA䢯:±ètES‹PË»E»‡oey§c²y!VõK’ F´V]FÔÊb“kã¶t𸩠EmùI€°å'¬ºø,§ +;Š©¾f¢^é],²jH1®¤ 0 oŽ ní¼ Ë®Ç⿾Ã3ÛL3K¥n<¶ÑfìâR«Ó®`=º¨íZÑ«ªfEYŒž·¬ (=ªˆÿe«“uÑzfš>f å èêf¨ã’Îç*†²®ÿ†ýPåÖ„µJ¥å3drï…•õ=òZ:ÿJ#ß ¡#X=ŒHW % ͅż‡M@Èf€úg*'ê¹ßfc 4€ÅÅéä¨ÿ¤øo7à ;þÿ’þ/¹$y§ÑENߦRÔSEÐ}îϾú¹??òoåпýÕ·Ù‚ÿÞm”€®6a_ L¦‰]yÅÆö%dpf¸Ùr¦ˆš”´“ŸNËõ§ƒübÀZGSpèä6›ô²|\Ma½Ç#T’tT9è¾§%Wgû¼-¡ËòO/l+]hFÓ9ºu ´ ˆ–iÑúºçMw\𘜆ú¸â Ð7ÙÄêQœ½a.€ÞFÒšãNÚ«IˆlaÚ²¡†Q%· Ê’Cá$¸Íuøæ<Æ‹¶Óž¤|ôTD™¿‘ÁÒVÊšàŠhEŽeÞÂm8‰Qán*#9ò@Z—žz>áiÐٱβbp–¦%†xDHSP%¦‚ˆDEOŽî³œTy¶Ào¦[ƒ (`+ ¯îz•‚-˜¹Ê>®œ¥ +âÁgr6Î0¬±²¿ÛN]k’÷(àÎ0' F,r¸4˜Áœ;èÆhk+e [K€z&$tc5Œ­œc4›ÉËxym’rµZ€UD’,˜+¥¶‘N €ýœ˜Åy"ˆ__aú^Ø?…ìÑHŒ:ÅÜ‘xp)èƒw°" ú]éø888”«={ˆˆã…fÐéG§.gXŽF9¯òQ'9L-Gàë@§·0€©:_†ML5Ä€Ì 'Š÷»„‚,jXÆJõG§4£JÓ œ\t_ê<úÍc0&Õ•EmÂnSÑÝGÿž޼ë"0ô‘•x#Y:{iœúçJÎêB/\³Ùtaö4£8ÂX ºè­¶ù›á÷œûÓÉ+?–¥)èÿoüÈ_þå_®žÀ»{ï¿ÏŸSµ¿ýðáw†sÄHì³9ÇYßD¶ÒˆP]=D]AÈ-ŠØE8î–PÕá¹P‘¿êÍ—Ñ­ª‹Þpãmý÷ ó|äÓO<»ò§Ÿ(ÓÍÞñ–Ë¿ú×_’̵òaOÖ[i²âû=“Ç$†‰ZPBÁŒRt‹·b nù§ZÕ)ù€¶ s(ã_ÿë×ßúû·^ŽÞ÷ï®Ï»~M ˆ×N¼°vÕ›¯:ðÚ}ÿùO>ÉÅ`?Š@WõH·NüYPF:èVwÆó¡3°†‹1B–dpÌH出ìM…™“cÚ­_o)¤@û5× +壺ÀàYƒ^@Q:5—Á‰tÔÄŠñÕj¶î‹Ø…šxãºÐk¿ôëQZÈt3óPä/G,‰45¯y&ÿ&#ÎOÊ6i’¸ÚãIaTD$#¬ùƒé [[œòÜ7D•œ‘ª)†Í¢c쿹äoÜóê%ßvS©×4éfñš“w”…DŠñQ¦0Ú&_¶*D•ê,zpæÎØXd*V2&Ç{¿u4ôaâKJâ/$~G¢OÇŸÁ´¡¡¡…•vßòÎb˜³o¶^XJôð²ÏÛ”'Íγí@÷È €èŽÇ¸42ÚC(ægÙAáÀP#z{TªBŸy<­˜c"½:Í^Ì6v®ŸZœê6v¨˜¬4‚µ¶‰éRžt au^ÔŒB² Ê6а®(8[ëI­fX)*‹ ËJ`áÌR?a*é‡-uQ!F“ +‚?8ºU¶26Íá=eYCƒN-<ƒÁºªž' â–.¾ÓÌœSÙÓB׫¡Š%™Wµu*ÛŽFï@sQ ¡¡©Çè[Šâ»ŽÑ„Ôh°/Žv<ù½ï|á/Ä/ÿÒšÎZ{Ñr¨>öùà±,âWÞÂÙ?ÁôÓíÚ_ýÕ_ýâ/þâyç÷‡Ÿúñ¯€Ø2õ¤Á³"#pd£¸ ï,ë w\š3õ¿Qÿ{¾öÈÎ÷«Ð—ûÅÏùâŸùìg>ÎÇþWÅo—?ê<>žV9o‰î$ÜŽîsKÆË’ˆ?sÉ5§²£_¿ÏÞyì¾co¼ä·Þö‘ëó·xÏC‹l¨?lïüÜÌ‘¡[Žê$Tƒñ‘ÚÍ”—`¢<ÌQ¥ú +=ÛY)qg ;`¬B­ ãAÊ •”÷U÷?‰“ö‰Uìd%z_P÷Ã…ÅlS-À4V|Xà±^Ë_Õmç­jóùºÛði‚õºf~Fá°D›…§ @[¾èbªw¿fyÏkJ3꣤Ï>³¨÷4öG µžtê)P[Y‚4Œ5&ñfÕ"'y>ÅÒT@dúë +Éy@Š$H +,ȤÀ[_ úa=qGåBUa'iz ÉÜu"¤2:úÈëM–I ²8Α”¨x¶¬¡½щÙI¨g(u%M°½ØÐ}f°¾Êg†z#‰œ qÃ5Ô¢,EǬÖ>]Í-$c”±ÒG§eð ·79¿c'oÝ[g—Ðcl9·QÉ'ЃŽé”¾ÂÊÂ53îó¦Ú^úÉõšón¿.tfå.ÚJk?ê`þé¡|pãfgöÅ+ÁuXûÁŠ-RÄéIýf3‹"8>0ø­&8ƒë¶æVˇ¥ù+U!ëqÇlÉo¬ _dô—<¶ÆI€…¶õ¤ruÒ?ð€[>üëoxŸ¡þÜa €g¦ 4¡ÔÖüÎÔ\4½²Êd»ë³Ÿ¹î½7Ø{€øs¯Èž:¥;©Ä•‘u„[Z¢ õºÔßì?ùc¤M{^µtâdû½7Ü,># ¸çoÊ@X.3ÀÍÀXŠ ©_no 7íÉ'¿ãößô1Æ"}‹·wþé~Ï/ÿP`ðyü;O²øo7D=«É2—K™–´{¨¥Ü|¢Ø·Â଻Ì`ªYbÄLí_ šµRÍápÈl Ðõ·•Òà7h]Ó'?y0úøìúŽ7ÇY`ÿyeRužh©FžóÃͤîlèÉgBm»D<Ó¸xc±@ú—¼;ç½ÊìL“žéÚ¢åù yښƟ:“2Nšð¬¸rêÝÉxpÌãGÒJL°X*„fà,˜äøÏ€Ð‹ÿ@ý¡E‰Ée’'@$M˜3‘õ÷ÈÎËï“ÑL:ÙûÆY—y¶€ÆŸò)4`Ó(VL$IŒQjÔõ‹a„ >-ß¿ï*„ ›Êð€€ìÏâÿIñ¢ñ$Iß̘š¨ÂrsÉP›A À~)úhÊ2þm½4Èopu(ˆJ€šAlL^¢šÛiÆ_¦WÑ;Ø+».ÎüI93¢Šÿ +³­¦¢}i‚Ž®Ùdì'ìT`fÀØ@ÊÀ#FT^Q2ú³‡@iuÉ•˜¬›À´ÎKH0õ !ÌR÷Ì©N•fËþþÃÃÛö®w~×—éî3 }æÎéiY†LwBæ‘p"!Õpýw ñ>ü䔃uƒ¾|ø~P¿­di²ÂV <xrÜœ™¡û_ýŒ xÀ…?3ÎL»äÒËXøè­˜<•ú£ò3RkÔ [d`ç»Ø-#xÊNQ’ Ex‚\ÔÒ^1&pL6ö'儿ƒ' +µéï­v`› VðÐ:¯J4súî7K§ý‚_Jú%Ø?¬Ö¢¼3|´Zs|XX +“ÍUØG(7²æâîÖÙ{p{V @_¬díYÒ·x@×tÐT+•e»>*,]‚ Õ€õÑïMZ6ôL}+ š—šþ=T®%9©ØVጒУ°Öè[ÏŸUšR--s¾AÙd^NÞ®%‚‘+ž—p6´YÄ‚@'xM„¤EÄ~ë´ cÔ°\©Az±Æk–aƒß¿´bi(‰®Ã¦îaè±Ät°Øò-EÔœ+ùsê [›´áì!ÄÐu E¢Á@„?‹€'?øþÓóäîöç‚|¸ÞiG˯mŠºªk*ƒ‚ ãé8ÅG++CRúžÃƒÆå$™IÝïo$&’ Tf¬îAÅHåŒd3WÆfTé'yú~”$¹¹h“|ã[ú*„†iôÐ$I¹H}†<9orÁµ$5 +&0:*K™RäÕ2(réÏûX +XŠa>°&îùž§ùJôhá¶Ãê- +޼®Hk˜÷€ö"—•BÖ‘Û›ek‰ºx™&ÀêÀEwÖºœœ)ÐÝzüøÓÿÄaBl·T“–$bE‰mÓ@#>¬rŠ|0r{¾•ô­|‚þ©gVž]=pÆé<ƒ¡1Üù'ŸYþ©?øô[Uã-9àðÛO¥þ¹@š+k¦Ñ£ÂÛtSP¤k4… FáODÖc­«9·þ7}äÁ.jž© Í–@Ö½tá ~_­½ãoû¹7ï¿û+G`TÔEPî®îš…€‹ó4YÈS⣶¯Òã¢,ñdP&úùK+?îì¿èâ®´?öáÜõù²,Z:ÂQêŸ#÷ùí÷)°T˜–¼6w$ɤãûõTG”&=·„Ê®‘,ú_Ô*hµÂ +óÙÚ|ËÌ7s<›P¢GÙ ã³Ø™NuÍhìh¤å|F²V÷‚&N¯ÖêÔ G`s4 £Ìm˜9u•å }›èû"Èò$%k&ÊÔµUÇ.x¥×o‚’SËLK?(«MšÂ™ç_xÀ ç[ Í…¸%-“}<…´’ˆvà‹Î‹Hús‡"—Ȥ旸aùtÕ%MñYÑ[w[ój‘!þ³š°üa¡´iU¥/5®oáKÑOq‘G©Ï<ï#Í|+U…¾Îø@ÙÓ­Ø› õ7P6ÓZ4¡y,xN0v` A8Ý\îh ŒÐn~¨ÅüЬZhaèEUŒ¾°ALh°­âî@)b0Htd²I¤_7 þfxr¥ã*±¸FY–`…R(;Lèp¦ûN]qbN7Cç0Zl¦þÿ@f®òù֪ToàdZ09·¦quéN·D$Ч?KŸ +zv$išÄY“Jƒ&›){ŒIuÈBŸU†ù:þ‡t ¼£S©O8g|¤øªü¡¾„ñ ªïÊÚñªÂCdÃaeØh½t&ì¶ß™¬:§~(•º€[:fßçßó7G¿ú•OtêXÜöñ[nûD pŸmJ¦þÛµ[~÷wnùð-·ÿ§ÛÕßzá|àØ.Ä“AîžÆ…,4 æ'ƒ¼á·Uœe81ÕÓª"»¸«t>ï|;¦FÓ¤~¦ÂúÒg€šlúèíð‰O›gÿÙË/¿á·ßÏýG)Ëvb¹i +-CöK’;H ƲŸt#ˆºö Ê ÏÒÔµ,¶èœ«êÍxc@=ÉÆx|ºÚÃBí)$Ž@÷Í·‹Khg‹Ö£p> fÑL6Ñ`÷ÀÙ^{%³,¥ä+ ÊYË3SÿÊõÀ0±þR¢“ÇÚÞ}ö½îógïEÔkÏ»õ§ç–™bÇÿéx£ÙØýêÝ+¿}b¥EÔcñœæLxÃÀÍ­¨­m•dK&ž’xGÞ / QˆQ¿×?7³d–ýL ´£nÕ­l%À˜ ˆ*é7}»ð)“Ýp–?r‰ëÄÛé+U§ú ®ágC;dFH é7× +O‹m=FúrFkt*wÔIRz©:2ÏFVöƒºî íÞƒwιÀxge®= lÀò3hλ QFÐ’XQÓ\Ü£­76Š‹$sð‡€˜ìB:êy©þ-óƒu#HÒ'ñ½@|Avï¯GþŒ ×êw#æÂ‚V*¼Ðþ&vMQÇ‚ÔÉ6ÔVŠ”Î?2M\±j?&%‚¨2mgl +SCŠí þ9Ûþ÷¼òƒúç#ÌDNP%“xÀ;Þ}u¿o5Ïz)U­³ŠF þ °üŸV™ÞÿÇÜÛÀÈqÝw‚¯»ºjª§¦›UìasZ3ªEŠÔH”Ê’¹–­Ø–íUìX¹|ÝAØÄ9ÞÝCn÷rÀ]°‡],68`ƒìl.ØÅX\Î9v7ή½¶yN”h%ËÇHÖX +-š©Ç3êasšUìžšª©êê¾ÿÇ«W¯çC’=àž +¥bOwuuÕ{¿ÿ÷ïOŒfE÷Õ$= ÜðpM½åƒúí/¾ôò×¾.å«§¹GºàÜ +™Õ35Ê]¼JƒƒXòqëT!>@r~¬u¿b^R-׋-S›óÎá4X7*ËJ F™¼â^åœwr*̰ñh¢Ôÿ™Nˆè¦e:¶L´sœº°ȺHoî²úàpæåHtj‡°~1…{žó¸§Ú+/cNÅôUCðŒPq‘=kôËo¤š@د½uuùYÉÅÐñß|å™_~N?gÍ•W’ Øìƒî¿ù£N‰¾cPÿ÷mG°úû×.]yì‚ì˜Tùýÿ½«NÔñ•2ew¶Ä æ•VöªYHðèTÅš&ª§´em¡Âc©ÓmDA4ªFÛ¼GLèÆÚ:¨íüX¹º™Ž”®6!ƒXlçA?I|RFlµâ¤£‚…6N†°¯ÚÍ(•;®e ÑEÌ9½nž·Û´À˜C³ bÅ”™ÓòìD:è­$ +á{1?Ò¤jdí»ÊGå˜BR®GÇd°¸|†³?“q}þX-#÷w{eŲpÝîÆœ]¯IõÄi¶ü®‹wÐ!=¥Z1Â)Þ±~˜’ ×Ë&yŒÁ™jÏBºqÜ¡¯(Xýh¡ÙI¦j÷ì#Ru7ú­ãîqÞw + Åí6> î»Ê…|Y)÷œM§Ñî}|L%ÌåÜ8êô·c]t9\}B± ‡r¾ÓQ¹ÂM«Y·å¦oüÙ’@Þ:< ØB\åÀn~NM¶9k éEÓ"mY#Sa«\4>RåÔ +Z/Á7ÂaäÔ¨ŒqV¾ÞMØÝÄéþ¶_TO`VF\¦JÅ2é +‰ÐвfÌd7u—ßéüÐÎó¸‰2ɨjÙc@‰{n”ªFT$|ó ÓkB|d€øƒŠÍ¿ý]xñß~Ù¶ÕóÊ>ýyL|üüc¿ñë_„‡Ç_û÷jW(ó˜b&цÃÖ©Ðý±/ÌʺÜ$øÏªQÝmÞút,ëoðWovA½mÞC“¡ï{Kíêl½š«ä[}Ébvêä)ÃñŠòC¨ jÆ~yVœwCLG¡ë±M#ÞD…ÞMŸ3e8 ñ–ƒ㸊)À2ÈûoÒúDZ|vÐ'‰­ùÄ+UÊÉÿxÀ53inª:“‰ì¨å¸ î¬ÇHßV’ +:úSŒ[£³a”)/“®Ê +N±ÑbÅvɥЗX7æÍF¶^¿×@Š4Ç¡­×ÿêåÞ5d |éë²òØã¿ôw~ãÊk¯nt®ž»ðä¯üר?ÎÎKÀþÙ?ùÒùó+ïýîõ+¯ã~ßš {·Í㸶g-kÛF~üö;ç>zvÐíºž÷Ò_¼Œ„;ß`þ`ykO ÚÝûåêzþÕAc.ëogR8ÝŸIß`¸1¤ú¯Ú,ÎK&‚¿¾æÝ IDAT:3‚ýçèDQ‰‘èeîÜ,N2d·Žf”±vÐß‘¨Þ€“Rººb›é°µÉ€v» 6fŸDºôŠÒdÃMù:€þÉÕxÐ÷ˆ:8Þ YÎÃÖl5;o!"ƒ €}i\®še›Ð3´)à ö^Íæ")1=Â`à¸SõD?À9?µ#ó° ÃíF³.~°qæáÅšçÕº5/ÀŒêõ¹º[sƒ!öŸ²g«!\! €q’8ÕZ!én”$Í–LòuHHt×üÖ²'´ S¬ éæbqaz2C<?|á‹£Xý©uO‘«å ©u«ŸGW°tŠ˜yjزåoõïôG¥ùá p„ZÀmŠ…Ÿžoe:Ibp7qjSw~€rÍ)ZW®{ˆŠ'Œ²Ð¥dÄV$ò¬P‹3Rõ~y`TÀ*•ÊPfáÈžjç-´•Ë tÿæ²ã1Ã;ÅÏM4Àž}õ'lŒÝ½În¡ Ïà Hމü˜q‹¿|ñ•AŒs ,€ýå —)Yº÷¯ŠÓ Ôùl74m;ÝWó£I€Ë7:©6OVV$Ä\¹råõ\Š\¿qýÊ‚3µ»^O1½ŠUuÌY§š?.Ò¦óLeTþ4-£RÕc¹€þ\3LŠnªV j:ÙóŒùpÜΈ†]e…ÄÊ[e0n€¼@10Šè£WGê‰ì‚g¢`P‹L³Z‹¬Ý5õÊSŸG×â͓Ô¼§+dÀ£þÈ'~ögùŸ ¾öÇÿêõK/ƒð…ÿ£, `ƒƒS+çúƒú/Hœ}tÉ´ö‚ú¿ç•Êõ›Åƒ\:¾Wšõ·Ùœ!Ðù¬zUuÍ9ÆÍa0mpø·{JMfÜG5?÷¯ ©77`°I€ÿ +b€ƒc€þ ÔBí\Aì@|A.@xœÍfvPÿúÁ(Ôÿ0lÝ‹¾Ä€ù û+ŸÆZFŒ©Ù\£€2 £`L¦{Øôèà>«ÿú©wû ®þ@J¾•'Îî°Õºbz° öYQO ·}26åÒ›+­¾DqŽÃ¼ѰªUtøÈ/,ô"¦xƒàcu°÷üùh.Ô›‹5ÐýçµÞFl€õP¯¹µabÀ¨ÄÍ~N\憘}±Vè°ñvt@ÿÚ³û#éâpê¶5C¹¦c¦7'W2zl +»Å’„éŒè¸¬öUbšI¨F=Ù•T©‚R{‘05B7Òf ?Õ˜WLYê?€=¿Ô|võ°ú_t9Í-É™ŠÔ³S¦ÌTú¼‡cH€‘q~]2-–ß+ Æ'žzâÝ­ãpðÄOW2àÙŸûy!~]eOÀA9u +§!¢¨šé!i6‚Ôÿç_]íÜì4x¾g|áï#Ê_¡b:PÿßüÞ+ø"A?ˆý +ýa<ý™‡Ô±ïOu÷£¿@Ù:›·âƒ¢±²Ö+2c´QÉkcù¸|x'ÐÏ*%Ma¨ª5/‰ƒVÚhÆÚŽh:"HÜj­I÷WÌ/¶áAÄqTuj 1Z9ÛxÍmNòG˜$±I©>þžã5àÚž¼#õh„d®ö‘FcòèB»Þõ£m~i)žD ÙIÅ H˜×I,˜a²sWd0@òç1rϲ›(^”¥ƒnà4šÑhm”äîŒrZ©ˆh„¹ˆÖJJXcâ•&ØÂB£}R·œ +-À›÷Z÷æÒã"qü7>.!Û®j1ˆ/ùpçô÷«c5}Üé äw»^­Õ]ÇÙP;8Øõ†v‘æß©äœPUH÷V׶Ο:y"³ë³öbJC©e˜Õ,²QlY™ã,YÖz{ƒT™¼/ž «æl ã˜$\Ùðy—®ûåýénö93½ße+ ŇèÛ5¤½¡A2Žë³fó˜*¸ËªÂÅ@p7KÃ$ŸKÿÖp0”+R@é>Š­ìYv7{F®¥”ƒìܺíW« ág;o­Ã¢C\<’1˜æ[¸CZÒxG][bÒ_Yy:Ò wcŽZ9I )GÒi$g”¦‘Ð!†¦*â+ÿæ_ÃÆ/»^1g¿˜3{õPþ䇑6î¥^°±arä÷óÌ´ò8ÆÖXD™©|ywûSBÝvß|ë?ùêŸÂáâ=ó.`?œ'_yòq:øá5³üÔg?×"¢ù…ãM>àñÇ_ýÆ7.æ<¬%äv” Wœ‡SV;woÐÊÒýþÕb]ÄQìsÁx¬/#—¤"g/6‹Žr… ÚSxÖ*Y "ØY‡;XBÈ6Y*ÏL®<Ô9ÐŒè–bK€ª!DNèdbÇl[±×דk¿}¢]¯kzÛ¤t,ç\›«Íº¹Ž+{²Go+Æl!\Øn¡Œ©FÕÐ’ÙâÝ¢{ÚÂ1â‡øÑ•ðîÏÿgpÏãµî¥—VÏ>.­®õ›þC?åµÝz= "Š7wðœ¶Ö?òÊ+¯½¾z¥9_o«a’ë¬Ó=)–¾qP+8PÐësTŽÌkè )ˆ_ÃP±(t1÷$yµ@Q¥Ì€¼’A>ïõçër‹¯ˆ晨a”–5û.¼8G¼ÞZöœÂÎãܾŽoû}‹›#›yžbJé)`èIÇHþ‹•GRÑíQÝÁÍy“ýüÏïj˜ºö½öŽ–¤¥ù—u^¡ÉÙ³ítTÔ%Ì:·`ÿÆk˜¤µòðJñ~šF¯}ÿÇ~êÑ0Fü¸ü} ­œ^^¾ 68žs¡´<¨rXäî¬=-FÛ½ÝÝaAû%ós†áÀqêHF£u¼ŽÞQÕg(Æ j¡gÄ@}¶çí?ÅxR­Öª¦›ŒS·FQèa¿»’ПßÕ8V?ý0þÞx£Cœ#†Àp“_ê;×:ÒóÐß*ü¶ÆÁÂ]“Ü#ÈXœê&857þ]ÓnÝ×´g|úlpN{^Sc +L‹CÝ¿²‡ÖÛÂ=úïþqþQÙ˜¬ó£õJ¹rõò)J¹þÖUõ¶-‹\^Mã* 6€GÃ2“ahÌX WŠâ{ÿ7þÛ¯þ» z”À¾‹9 ¸ß%®ùk7$x5Žzú{Ñ}F>‚,‰ *#ÄEÍí|«Õ(Š,»È‹3fÌl7…=v+š³ýå©,³œqÓGЏpÖÐ$§ã2F!ñ VŸ«¡¼"– GªÞÃsßZ>µpïI¼ª<)¼{óÓ).žh/8”ɰ+À~P{W¢Êw²PÍÒ!NÔ²õþÚUÿÖÚkÿÏKgΞ¿zyþ ¸Ï¯_øØù0ŽO ºðÓíøN⇠t0,ÛëT€±ööÆó/Jôh 7š9ŽU”ú¿Gî3ÿóFW€„CVË +ê[êÆÙZA€ 8ÚÇYq{SCÞä“xÿ‰X†‹ål»êT‘³,T(¬A¦m7—ÛŒþpÐï®§q +2€³Ñ9Ýö\©ÁÙc*£/ËbÐýE£`óØ3@ èäQ€þ­ãî­þêë×:?,²§‚-M[·x8*_þëŽØÖ^×fåëU˜uqž_°ºúºžjÆ£¿Èý˜ûF’‡öTlo‚ìGÏh8Öjµæl5Þ³M Ì“Ë} TB´€ ®x° # TéüGZVþØÅa‚Á€WÇÙ F@{ñt÷Ýï~ã›hâ´`ÊŽ2Pÿ·ë 8."Kx* ëx‹‹äÜÓRu7oÉŒÿn‡…v)ëÉ;âÀ¦øÃ§b!Ú €Å¶*ó¹úƒGžþìâEØL¨üPŽ—â_x¢@R_›?¬z®ÓÝ êGÀZvü-ßš¸,ÇX±¡T@ÿ/þ*’¬­¾ñê¯<‡€þ¿ôsÏ}ûE¤[xæ³Ï^üæ×¶w“‡}ìÍ7^û¥_ýbL¬¨O}âã/þå§àã­¥ƒ E×l$) Uxî4wŽhI–[ˆV¿ø ?Û¯ü­_ù½ÿåä5ç…™/¼øÒä¦p·QÄy‰ö@õž929â8²Zåªþ(¥‰©X7&xy©)*pb‚ šºã˜ŽY €²UVt °©ÇRî@ózí—NŸSŠv øX¥0µNœz¾ßúPè˜N«•zþ£œóÓDɰj:Éî Mð‡´Ÿ«o¼¾öýái"¤ZZ^X_ÛôXÀ/Õ°8Õ%=tÿÎóO :š:@ÿÍ·×a¯ÐϨèDóû<ˆá°(×;À,‘ Ë³B±A(#€ Öýy¿Ÿ*\u’{A"rÆ•lœ/C£Í«0BßÇz¼2> ?ì‘f oßÖ³,àœf®ÌÂÌFÒi‡ûßdÎ:a¿—D6š~Púó§Ùp[Çüô¬GЍº£5ñx_ _5ÉT-"Ó"¹™Ð¹š»éDû ¾qÓÃÙ×$=¿{Ú€þ ö” ë Ñ?Áp)fèϬIä#‡ŸUO’luqÑnXµäì´m¹„X ¬®J}Œ€U$€ ÀsºE§Òý6úËÈ­»yz+¨2úõk©•  ÏÀ‚ðàBt¤M48 ßßhº[·}Ø«²0=©\§ÐÑËÔŽöJ €+œEÅä|V[ö¼=”›Ðÿµ7^]yèq@ÿ7¯^;àÆõkð:Ø`,,KEõÊ«í{^üË@¨ÏFÄ"“ewq*”ç Г¤ªtHpòËü‡—.½ÊÇñ¡×%GÿÎt¯ -[†kwxô40!ØÓú.TàÂP2e…ÍC@÷Göˆ,µX6§ã”É£hÝ&6q¯*¿é9èMjxȯ@iž82 j/tßÁ[×í\“ÍÝØc1Õ3y¨ûÖ'Ú"¯ØJØÕ2Z“aYñr2K]€`ÌØFÙèg10Ž}ÅWïL­8F°jN¼¸ü^ÿúX}åÊVÐÇË÷/r‚5ˆÞÖT®W…‰– sªœÒ³…¿¥ +VE<þˆ`å‘ ?EáÌ>);5¥ÎSjÿÄë Ýèhn;ØÒnb „sd Ý‘iÌØ`aÒt.@+]ˬ{ã]lú‡…£“‰àÒ»,sêõ‰¿ÞƆíÎNÕïöŠPUÅbŽìT®Ÿœmœ–Èø’ ±ãó„êcÓ,³ª®s¤Iê³=Êž³œ$Áˆz/ݳ\?²äÙ`Vºb4h-I ·gàN?Êä‰ý4Ê[\Ö#wÑÀÒnRÊt’+,FUËà/‚ý©‡ÑÞPÌ< +á~ÚÍæÂü±yÕNZäùÚWAA M¹ÙB]Xùû}%öãp`ii”Üõ68àrðô äNÅ;obú1³{mã Ã=ï“Váìh¼+s/½í¾/²•`ú½õµÎCœ0¸ˆ{¥põÊUOKÍôjÅq™ û4YÙôæÌPI‚ p]YÖ¯´i0ÆYmÁO (•ô\/¡Zn8g£Ñˆ»ò>þòòÛìn.´ddrËßjPä<ŒC™ äߴÏ&©iêF|ÿóú[×aSè/¦Ùi÷°¯ûìþ"þ"<@}æFr9ÁudÎT-™oŠÜ$ñAúµÞýUP¡õþqÝ0úÿÃç~æsjö"©5˜~À‹ÎŒFû?@矑]d5ÞŸ(Æ´“úp?Ó«æê½MœÿÏåTUó›W¯^y»#>E·®Ó±f)½*NépÞ|ËâG嚦í8ã’$Õ`n¥12X{Z_mooï9Ø?üÁ^®-5úÙ(W)¤fÅ| .uØWåeŠéÜÖÆ’ø};‚:a Z• „¦è€ Е¤ÁVo㊠×%»;N­æ eÃÃF] \×…íRw›,ü­.l±Úí4Ûíåö}ËwÖœjœ’¦{^ùã4™{D@ööƒm¸•üÆÔ*Ù¬øÕxïÝêÁöÊÛ=€þöýh(Ôë6sÒ,.zãòÁnžŠ$S%Æ¥ýQYy)tߨwÂ]:ýAÐÌä ¦<p`ƒ^ˆÈâXñ„ wÑÏŸ&¡fÉ(ÂÂù(ÏTÇYÂ謼ùØ.y0h=ÐŽ·Ãh‚`èçÚl;s¤!·âòû·dþ%XúŠžËw²æôAƒú1eœZêÿâ='`ÏoX^lÁ¶Öí¥Æ5e¬ò+Å_|>ýăµ_ãñˆµT\]Ógpä= Åè"£©˜ê÷ú=iºîìiüea€ ˜ª¾¦G€* ”g-¨EI.ïLÇIwCY.KÍ@N>ˆÂrRèÏCM!e\  ú€þ løëàøê«RÎ=‰ò“níìÍ«ßXøqYãÒ‰GvÑòf‚¿ÑmÎ=®õŽöÌÔvr÷ƒî…¼á¸mÁ½R‰Uj­9³Ó~9X3LP.W+e€~8Xj¾©³gNç×Y¼xå¦Ì@?Õnƒ >À¨Î:±L4$ê(Sñ„l aì ê8`Y±ÿP^Òn¨"+RýÏÑ_w̺s-É(€¶OØó#ŦDåŠÉáÓvÒÑ”K$¼Ówò|¼¥S’‹"¢èQóÞ6È€êAJ[c¾¡ãkñb ‘Bʬt2bÍq¯¯è°T(¦ž’kŠ öMzy¦_ç@ÿÓŸüÈ€Þ-´-¤·‡õ}‹Ë0GάbÀ “Oóö†ÉÖ¿ï$¬B)ôW ý²á;Öó¶x?€~u=:ô‚3½OhÔJ0dªCÄŸáç:ç`2(‹=³9KÓDFhYA‡†Þ$cÜí;¥ô-­ ‘—aÿ[*똩¢l$h2à”0 ¤zçÊg:q¥¹°tyõRo°G©½5¼Å`ŽÙN½êÔ`¿¸(5e˜¦Y2Ž#‰•aºÞ bõÓ‰´ô¸È¡7‡¬(&#Ý©ï±üX. Õ÷x¦&|—¤·Ë™3ýafÏ›O°Kžf:íj4äjÑó‚a1(õ_Ï÷ÿ . ÝÂ`¶»¾ßW. …þj˜¸øMfDȨ°™[ˆ1p@ 'êŒÈ¦ãE§8uãúõÎú oæl” •E¶§6J—m ¿Á öÓC‚vÏÅáþ ôÈG¶•G0Uºu4b’%ü#ôTåš„67tSä@³á1Q~ÿ\]Í›â`k•c]ñž@±J•cŠo{ +ñÁ`îã¶T,€=¯8‡¤©€þXp;}Z7#±åÒ{¨ÿ‚Ð_í÷¬‘–(&ïIŠ­â¶8>Ç À dl,™ñ£óä™öE™›íÚ|ßAпûÎZÕµëóÍÁ–Íp8d!¼›{f4Ž©ô0û#Ž cÚó…ŠàzˆÂ,X÷ïtP<;Õ©Þ$†5¥ +¤‘ŸR" €;˦›ô§›†´øplPæ°awÛå<µñù?[=qÿ~­–ç_aÅ´¹Ô¬ç±ŠŠ ÉŽ§\@6œ4‹íXtß‹M×i•£[Ýr÷ͼCˆ8È´ÜP£l— Û(ÃJÁÈ1Ì2ư‡çhØõ1…ï­Ù:<éR%Ks'5¶ NPO#K0„`sx§—ÌØaÂÏnž<9¼Õ5Jå¹z­y²ÝÝêö®__|øìÆ.G0¡…ÑÝòÛ'Ï$ñv-ÏH;Ö¤GÒðŽH‰jNL8üQ'HdM@<²„Mq³I(v}þ9D&“&ÙÜÒ=˜'›òƒóËí~«ìvs¶ž‘ D}»V“ÃB¦hÓð=FIæ’ƒ @M³bQµ8gθôÊïÜà€*—·èéã*¨‹>‡‘ØènÔ¸øN°kAË)ë2&)Äçã;u'„úy’åA?hŸnŸ¸÷DP$™ tsŒ2zÁÈ(߯vÝŒ5s“‰©åW'¹wåÃO}|ñÄÚúÚÍ5\<þ¶¯â“0‘4ú-:)aJ¶kôo£óvc»ßïÉûY«¡2®äGoMѽz³ž³&׈€:ï…’ŒEV±ˆ–5©—AcZV]ä©„øé9·õΜÕï|éw穜)è§–YÝî¨Ëƒ_fb¡ŠìÝšDìwdÞ +'ž î&pW'¥tc ÔD³µÔ‹zœe,›7$q¤m$ÃÔ®×`jqÉTæ–A|˜ h±%ªFA/Ã3”g&L…$ÃV°qÒJ‚Ü„bð­[ñÖD¢¿ ‚lxºÌ#HDdO¨Y˜ &HZ·¹˜‰qo­Ã>¾Hª,ôzõfsx÷‹'Oun\u6`[}å*(þõZ}$à>@çÆµÎ Qµl÷ª¨^³Õn·;ŽJâL#”bÅ)‰0EN,MeþºG<ÕUŒÄfkIýRª¤ª IDAT)›ñ=©eÿ¿ ý‡%ƒ +vòL£}®>¬Kr2èž•¯ÿ)üØÙA×o\OGÅý)wµ +I^&ëò²\Þ‹t°´Œî:o_Ý“§/qn¾!r觃*'„(Cž)¨²ÔàQá1ö4åRk*}6Öº[¶ÃÅçx0-Ôá{a«68¿ý¥ÿöÿìŸÿ€ßü¯~CLæb ò{š‘7¤Õ_t\'ÛÍT·dñ>¡¢©q¦ÝîùCîbà}SA¯äÀ~™˜Veâ {¥´¡ºGp+¡Ãw +§Ÿ€ŒiÁfZUfuåîþ°Çþ"8(•LF¦Þ:ðä:ú;ÔU€_áNÆÌ"wË0d3EA=Ïḯl%ô+Þ ¾áܧÚÐâ"l XÔÆ¨K Òe—Æ…G(F)U€÷É'Ó ÅÜsM?Haóê† +>•á¶§ ìÓ›Å+/zº¯{ubâÈ‚ aÏ”¹ë±µ¢-«Và ÙUϬ±wÓ~?œo8 ÍžE ПûDDeÆ\nº„”A+Û@ôËî¬4g8oÊ:ÄuÀÄ<`À}•‘)4Ò°iüÂÊhzoÄá`¡½Ò¹‚Eù=úAýIÐ_;Öõ ¿À®˜XÃè¿v8hß/{ÑØêûåS§A(Ü,8F´±¼X ¿7ðè@î÷º²àÈ[\ŒÃ*¹€&¥±øO=ª4q‰ ¯V­y~—¸æÜf“laÚÃäSbìÐ>´š¿xªìb1}|÷ƒArØOèçÿ@³kç¥4Zò‚èu‹4Üæ=͵µ›ËúæüÜä×4@\½v5‡~vUËÉCþÓ é®é9âÿç¤ÄšÐõoËØïq®Gé˜yy%ÀÔa©#©HB<ÿ_ðØ£ç~ï_üÁ¯üÝ/~ù_þaóžVïÝ®8d`«Â,5J Å(7m%qbUNKý cO+æ©oÙË™“8Âá–DE~pîý6Rýš÷ƒh$À¨a1«Mo] ò°A¢±fòm¯mÔÐW¼¹}fªà.$_`%pyLªºú;ÕÄù ¼¿ : 6@ýú[:ë‘ÆJTSºÑa='@p&š+~]’î½9 ˜—W –“Øë(þˆò‹&)“·Ã…À5SÿWêˆ™Ž£Øô#€Jà 'ýçîUúðìL^ª<- ?È{úoe=ÜÃpš3e§>õô+…ŠqÈØèŠ†‡€}ýòR±Äbôcl +_§v``m¤™@š1{†”í°1‡:Ca¯vj/)úP<”Mø5ðbû‘óáÝì€ùæ‚C¾û^^v¸øðY«/R×Ó“$A‹ÈýW\±zàç¼7½nûáó€þpOÒCA­PC`5Ç«ÿ¼×e˜QGa"»V÷76b:ÞëÛýO:Ú§V0Õ¬Û±µjƒ^Z¬1•µš¾±>wî©÷ë>Cx„ìÃê(iú}ßûÈTPþ4:7Uíâšõ†!käðá½þM—·}Ì3ª©ê… H=DtpÏ9¨û3Ìôs‰µœ,eú³b+mtê'ÊpŽƒúé{¯‚ øÇÿ×Î~è<Ë€X³¸59º+&YÑg‘à†} ¸K²ÁN§Öœ/r„ + ÿ¸k ö…Ÿ”Ö¢Xš€\«\pöDüDCAÿ°Y>…aJ–Á5Ãm˜Q–mlt¸Ò%â¢Ì8Ï sf«ƒ(bob6Bõc-ÞM—×¢~Þ°t†~u-=º’Ó Ò$3äSwk‚ØÕDº+Î,Ší±ˆ2\Þ°lJ%Q* Îë¬ç80 ÃX0ŒAl#H»&†'*qRPÆ6Ä;CÊJä.b «aJ@:N4¹¹—ö‰œ—5Š|fî®õ–î;íÍy–0ÒùÈõŽÃ´àD@ÇkÜxýUÀôÎë«­…åöÊY«ÂäñÆÜÜh~òLg­‡¥“÷§ÆFIl»^­&»¿ÂÙÖ‚@”ä·ÇCØõh8€Ç™Â»Ö,¤Í¹v©ìÞ³¿V'ÑÊ#ÅŠåX§Ö×€fÖ ¢°ª2ÒôÈ'åËÖyØ%³µúÆ;×ï;uá“ÏôÞ½a»¸º9K“Œ¹Ú§Ö›v|èÛsâ࡙ɇ¥0éAæ©@1zn ÖÃàîVx§?{æ”íÚ«ß¿¼þ#™ bí«ˆfåCÿ®¬”eyïdb¨èÔXX·ú°Þcg\L úQ˜Ê³L²¬L èME#¹P°Û·é ‡aÙ£žQB$&ç×êÑݾÅØõ5w¶`jr’Rº,JŒ0ɰù‡`§´)(šñþ·šÇa÷)êãÿXóøâ?ÿ_ÿ¹Ý/œ}”âFA`dY ª9ΛÛ „kÛË«uF䬚g–²ÞvÏŒL×sãtlVÊÈ!:ʸyk–a‹¥ÊŒUôŒÍŸ{{éžÕ«l’2Ná¼b¿¼›ù›éLRÄ‹IjUl¸×·JÞ«IÞ·gË<¬1faâ}{Àåcäÿ-ç™ÄecR#ÓJ)Nݱܢ¶9CŽ-Œ4›Ä¼É­¥¢Pycm½ùz.ÁÖkYã1õIÒþÄÂ*±¢š‚Ü7G¦äÖçÀçqåg…ëZcC§hÇÖ«† ͺ\¶Ëy¹/+þJÁA;ð50¢Ø9y֎‚ÐßÏ®[1=ÃpðÃÎâbó¹_ýÂWþ?úíß9'>ð`v°Dø&¹ÚœY'Ü ³jU ØÌQ™uó¾v/¯4!S%¹¶œÒW;kYþÀœêÆ=ÞÞý5ú€­¸ÈÏcPì´Ð8âõïú{?õG²=°æê°ª€î5¥¦ßl-ôó?ò‚­`M»È£²”é€ùìý‹П Hö¼¿µ¼¼úâŸ`Âæ¸ÈËGx­åõÄO4ên£Z1jÇšõyôCpíº *x“9J“ش؃$ZNŽ'\à Ÿ\ý‚Ò¥0ÎL±U¾\T\¶ËÕE”¹¹/…ÞÐÖÏ{ú·£`+^¸w/C÷?Gh¸8EúA1!þæG­vdvØZO´ÆØïI·še5@RìÕHbéWÕew|ô×ià˜Å‰ƒ0±VT†da_n-‚Š [û>äx‘w™`tytéôºÝ¡à¿nüàò ×[ùäÓòð<ôÄG°hèh£^«¯o u³´Ø†^yåe>• è—8O=¼zãêé§ÏP\q?OKèßÌ»ñu×:ý›?jÃ;gâCš­«¡ÐŸE…|¿^‘›w½àº?X`ì?ÕÉ@ÄZnžNk§ú9õêßâýS¶ºÎ`zØ{4ŸBU³"½«(bãýùªSÕȤ ÈÆÑÄЛe“Å=ÖSÔ8£T¨Ré|p² •P•qQ¹Êc›¾Á,‹ªŠü3 {&È]ÎnâQ8µw°1^³9ź±ýÕØØèîöÑ7¾ô~ë·çwñ DIÍ@¬µ Њž¬*lEÃÙÓBäù6{†ãºOž?÷‘Ÿzô»ß'ÒÀÓ5ô©V®½½vÀg´ÁmRø†síUcŽÆ”„šJô7ôk”£qDb¢ª;ùôSO-_Pô*£¬ÙlêLhñòžÚe§&5êÇ÷› ÊÛSÌ¥t7UèŸ`§è̱M8µœõ ØsïE=¸®£ÿ(ÁåQ© & 2 »VÜ¥j­îk¸^Ÿ½Ävs1Èe@D:7…ŸºT=6)Á¯¯{ vÎÎ;Øêñ\aô/~ʧٔË x7àƒÝÈÈ\;c·ÂFrà1qÜRß\;Aÿc,¼übÐŽÝy"@%]Œ\½ÿyÐÿåUüâ3펟yr~}ãö—ÿѹ‰&€þR0c-çQLÐÿc›h +€9FI“ŃÀaj~nÅSàöq9fÝŸí¸00…ƒ”HXŸ½^o¡ÕõŸK½öäÛÒÜk^¿¿u Ðß§¸.²2ÜîúbÄo²?‡·{N8‰êÿÒÉÓõYgI´C9}•qP\vnTgëJ cgˆ2€^_¸¯0Îôi!ž÷ïøL6"¦°£¥îźepX¥ØH¦²€JпýÁBþŠëW»º‹Õ=˜²hjô~4hîS +ÔèþˆÚø´öê\kƒõµáò‰bmWŒBJq(‡Lõ…{§™ECpÊà0˜¦ %¯]Î<™ ì3è£O•â‚(¹  atRR–„ +c°n’ûyA3ÄL>ätÃÈÚ9 +¥2Öª³Ž˜cÄ©VCòäÖ‰z!V•K±ñER—ßxŒ€/ýƒ×áàÜ™S,`o›TŒ&{ìý8ŠÛ,eª¯Ñ`[åi' þ‡è261íú{ãZkìüiz°Ì§dÜp“ k,‹q_z“¨ý  H:iÅ´‘êÿ¬¿³¡^_}cuU¬J@ø°ý寘«;´–õ9ÏÜ_€þ`hèO_GÆ4Ø{Úð™Ðߪ”ÌO ýå…²¸/—ĘŒ “<¯w” +Dçpþ£Ou×¾ìw×úÙ£È;Ú`²÷x;öò²^åá k5Cù^íwëa=9ý™Å6 }VÿšT0£z=tlXFu[Wª-  æB ©ËàݔՔA +º¿¡U/qMø÷ˆ¼ÐýÏ?…w5ØLúý€§–æµ¢ø¯ªñ„ ‹IùÅgÛo¾Ó9wÊyýzè͉³'ë—o êu• ˜/vl °#‹Xø¼ôH¸¶ð-Ö"hF¥™¦!¢ª‘FqPÆZbVe™Y‰, 9›'ºóÖ¥ó ˃ Ÿå8É@b&a˜• P@–Ac8éo/P¶WPC_g-éÖíÍÞVWlûg½°õîZÍ«·OaÆ f솷B¿¿¹ÖXXÎ*Ìûˆµ ‰‹g9 A–ÄíjE¬<ò¤wß)AS3«80íˆÙ"õ\Ës½áææØeQ·óæâé³úħßxù…5âäúIÆ”CN^Ìòý§ÎêlQ*áóü«=’–+¨0+¹ m´Õɬù5qr!æ’5ƈîø!&Æ6!=k¦I•%EJñh%É€k8â>ÛÍ|tyõÐ-ƒy¤õ +p½+”]Îy ½ú©Ÿ–2‡°¬ðçÏšöŒkë][ȸBƒ6ÁÙs¹?žõŒ=€±{ëö¶”ëõƒ&9ø]#›}"0OÝ9—ËágÂÈzÆ +ªÏ1<7c”µénhéÔÐÆ9i5Òë»Ý ÛEBÖ~ϯŠì£0´]n~na6|ͪ#!çÌ©BiênÆ­9e~í³M`½’@ïÇ ß—7÷µ«?9Iä{ ŒË“¯FÞ>¯Áaz‹ââ|ÀÙ#Ä +&£¸JJ™]uήœç†<½­…”R ú·Pºr~HóøbóøR÷Ý·ý៸ÅÌ!áL÷²ë˜’ÀQJI5V¡¿zç"å­ü û½Z£ù±Ï> `í­«°oiÔá¶u°Â¨û1R‚¦÷.èÇ>õ € J›…-a[ì÷†šC?×Ö òø˜ì‚@õ·æ„-DJ^6$žÃ!P¢Ì–?ͱ‘  ЮǴT[DôĪ%©è{ýÆõ‹Ï_TÿIpQ\|æo>bàäÙ“7.O¥Üñà2Ô1¼XëMŸâCÍÃ$S*?ÈNÊÆãü*ÍCúýG™•Ûœ›1u‡éy +ïÙãMÂ("ëV(3:‡ÉáÓñ$QL8 „åù¦—¦³#eÿ¯ÓÇ3Ÿöâ׿OsOµ>Þ7°AŠæwÇ™F 1éHvBÓü9ª,Ìh”ø~üXGøþI>+a]Û'>‰¢€þ¯|ç»'îÅ@ü©Žh·"¦úUÞ‹Š{á쉸trºYˆ3£(·Tõ8DèW¬· 僘3õtwkÙ©hßƈ¥~d"P÷¹Ô—Í™f¸-íòju>KQcMS¬b)S!gö¼æÙó:âReÀb‘~†93#°Š¦iñ¾ÂL3#‰OWeƒ°¶~@úï…'>~áñOÀÁïýÁ?>yâäp8ä*nÐ^j… è/MÐfsí±kU«Ž2M&ÍÌ8 ÐoÎÈÔa{Îó%܉)sÇ™‡ÛW‰·\ eŃ´šwÕfÚí4 +qú_»Ãöì3Þ+ßóö³-…þ<À`=d€Àöñò_„S¿7÷Ò›Ì`'§Ôk×åµ>~šR?+EKŠ~Wš¨ýw7œùÂH ï·²æÍ<_äËàÐ\ó„¼D>£NްÎ3ª5¥eæØn“j¯aÏÚÙ“ŸAìôû½[ë=bõoÍù§11ô‡²\(ÐÓ+íÚ< €Âù›ä)•X£HÀ±D±AîÀå°[~ófá#ú±àþrû$ì×Þ¾z8£?ìÝ£Vó¸ŒCÐú+—®NÌÈ8Â;•A‘Çk& q4Q”Ps´„úè2EA ’¼zpß"þ8)YѰ b J7éâÿ}‘òú÷^9¼~ãä_þ[¿|àïJõ5­És¤—ô +-3]h²°Tmúý'Eýh‚J­MY%qgã©ln°m°€Q‹…Ž÷e"ÈZ0BÌMÄœ'¢Ó&ðâsÀU`  ¿ßcÐ?‚§H2Àm¸bzÀšF††\èVg« ŠR®lÂ$wqà`èg1Àèh¢Š°"úu‡¦í@ïVöÍû‹XB¶›<ôØã,Ú-ОøèGÀ¸ôç_SèŸ_§íTR%BÙºÕ‰©NpýÆFÿÁ p´‚åíâ1‘!ôÓ`>¥d;͹@ Dá&lUE‘\³mòÛÄ}«ÌìÙ=ØDÙ‰wúöl#ж¬Š‘$9¼Ú@LßrþB{a/ƒûè +ÊšSB–ÏÙ“ýƒ3Dõþ”É Çr™íyJ$\¸p÷ãÂ…á ¿À‘tÕëõ8gºvªöDD0û éG‘SÈ“€8!Iªåw€úŸÂÏž1@TÀ;u²Šö}St,óÇÜ»Ã> 4L`Ï•X€þÒ8}Òæ}³9åƒûgÿÍ¡½oä/|ÈV{•‡~þz:&ˆðêµ,¬|ó‹Åù}¿0Óâ ò7:ù¯ÚYyâÉ Ò©—Ú§U–®¶ÃGt%«·ÕÍÏCÔíÇQîOœq·68ÓÔ–úÐÑÿÀÁ*6ïÓ\S†ÈƵ¢»€@AÀiBøjrpñ¤RAJ5[hš4‰unœN*g9ɣʀþ`¨ƒÎ.»¡V°]µ¼6Z„ŒãLí8[aÞ4l! å§ävªÅ MlΓ’háô šºâ/úçã4¥Ø‚ÀÿDËàÿ¼xê‰)ïLIÁ‚õ“ÁW‹Ü¡ @C %CA?ŇÒümxd~§ê¥«43ùÏé6G˜{6­¶Ã›8k>oô#SºEQo¬¹¡­‚ÀÉ´Ò}ýZ”ÑÖ*ôß3²ý 9LÙo”öðùè ;ÕÐ9MU•VL×ìí+lL‚԰dž]; yÄCèçíÁógŸxR~v»Hõaôçпý?ø‹D»òd +XYý?p(ègõ_ +ÌïgÐ/×n‘½èÏ{üФñÈ-ýÞe»†àÆê¿WßKî ƒ;¡ ´hp†—x )Ü€(œ%2óŒ¤å%\¹§î_b€c_¦ªÃw´¼Œ²(‡{Ó²ùwQÇcÎà¤èþ(F`lÞ‚1ÆÙn(IÜygÓÈ€þ­Ûl D*õ _e1Tb?øÌ‡K—oÕÿÕ Žj¢ÖÔŸ}Ø>×T]ÌÚhJ›ÐôåúÔ:¥Uœ}èÔÆ»ÝKßê‹+×W-Ïúø³?é/.]zñåÅöÉáµ9cÆNF±5cGÑPÂ1F0q¿„)Ø3ÒL2)À‹F–‹ÖIÊÙGÒT)¢ÁFfØ ”UˆÕnÐdÌÒ3DÊyÒˆ¼Ýü0 ÝA•_æfùü’yD`‡`Óv1”°_>L‚˜þ°gà î0—à ~ño1­°B„pF•Jª/ z†ÇÌ2]c&¯#)1ñ‹•æ »]3Ø?Š6ƒ8 oÏ*MÊŠïqAºM‚Š©Â_|ñE¸¸3ÇÍæ‰3rš½{] ÐG Öõ7­w¯l?r^äéáV×!L¸~õ›µ×_TÓ›½ tÎ#¿ ÷”KëVÚ°—!+tu£ž¹Ý×fÉ{ƒw,Àä´abUÌ€!u7…Yj–e2ØãQÈÓ4Ó WÉÆb§çVmø§MülÛú¡yšH‹<¯ ³ùEì¬RÅÖÁ1%€a#˜ÿÛðíÙÝ+10ÃUxiñ;\1‹_Ú:«Õñ¥ Œ–îcG?~Ÿ±ˆ¾kÞ™ûÐÄ9Ý~héøÑZ}ž; µI 6 +bBuŽ*]´äxorª°UBú 5_ñ‰|\JÍsœ¸›äÛeoÆÆ’]Œ~£¨¶ÎáÅ0í‰ãR÷õ,ôŠIAJÛ6[^ýycöî *“$AUcŽÞ¹œ Ðÿ+o,>÷èFcrKþÄEÑjÊIðzÏUüÝßóA[Úë#¼+­6ÓÌjáüô‡ûŸ‹÷â‹°Gç¾õÕ¯œZ9 ›S1žÿ‹—Ï>ŒóµóŽ®ÙáÃè¾§w%&ðâ}ÊÍ£‡Ss÷¤?; O4Dº³W/ rëOo^‘_sßbÃs»+¤ pÏ~èl¯Õëu{kkS”°Ê‚I¢a‘SThÔ¸ÙevÙ$ ·Õž2Ûú½Föꕈ:ÕÀÃæŒεô‡›Ð_Ð:´ºW¸ah[¦ÊÍý|ŠF˜¬á©ú÷üüáñfW¸Z÷´ý/}çE¼™G½ :¿ØÝÜ "Ø×_¹ô§V¯± È¿ËyzçGÒ‡#¦‹oÙƒoM+Âìñ× +˜ËúG”– g“&EîPšcNs,ÞLÿîLšªXßxœd“Ð,óº‹8§1€ƒÇ;ÿ‡ÿÛÂ1AQyé IDATt×»nÍaÚQ.Ž ËûšõéÕË5ü¸Bÿ(Wo]ǰàÉõÛ:ZhiÿðýÃkýzïæµÞM´°ÃÁ°—÷írJñµ¬"úƒ}|rÅ™/Œu@ÿ?¼ {n™éQÁWÄ<ø9IƒN<Á‘Î>)Mð»`zÂäÕ”ªÃÄ8€þnÝ!:)yË47Ô­ Ø‘{ÐJs{‹e NÎqP±+u@7*±bþ ÊÇç?éµ2a4Tæ Ç¡ÅÚæZ£Ž7äÕ×Ñj/µW¨‹äC§Ï­Ü_T{¸óîànãGxo“L3-Lûã¹Õ$ŽJäOGT LÀS31Þ›ŽÙÄÇÞ L©•Æ»aœ„È­‡°L®ügùý { l8Sãà5~½½Ò®|éÛ(¾Î\¾U»Þ/òOôm€~ùyU²ÿ½¢³ÒùÅ`·RÌ’I¹À¦žÿz¯u®‰(î®?—.4ÙAˆÌfð»RÒÙUßÒRó[ß¾¦?ó Ï]¿rÀÓŸ”fis͈ub<Ÿ_D' Øt¿M½Ã¥B8ða³5*c¤ª&è7g‹‹wêuµ–¼Æ¼çJq ;¡«Mc4fC¿`ß (åîž&lu· 掳L €2J÷_áö^ùÚ ÝíxS(è“Xí1‹td’E>#ÍuPóa–ãD¯ˆÍÛxZX`˜A³CFÁ@yÌ‹ cn™ £jëá€ûî¦I8õ† ›ÝœÿÐy…þ0÷7Z þdNýH]µà–,(] ÙéójrŒÖhX(?‡ü<ê<Ê÷R./rëîab0.Ð*6¨‘£ +ÈÓÂTYCîEXŸÉ ù'¦Cà:2yC(nF@_>œ¥§µÐ~íµUØ@ýßó'Fðý<9až” áX¥?5fXJÈ®Ã#J +#€È…ûÝ;Áõ¯ª?1ú÷¨ãUGëEܦTq°òäJ˜Ü +ýEýú¨[e`»è;¦ÀƒÜåLÇÈAýè‡=lR/¥Aº³ŽJž9Üx´˜0*:$ Ì9G´p"•Ǥ …©ùϨ +‹td°*6I aº˜ÿ“ ”°Ó½±%Ô`èÿÿò·EËVTaͽÃÐ/0—¿§…JQ+∲+ƈˆžd%<%hTgf‚à"!ÅÍ®+—±œ+$“v +ÿ„;ê0ìÙ*‘€þ€Š°ï\ëx9ê?‘£ÿbÛkµÚþm 5r~ ÄTCm…þçšÁv½x=Ü}Þm@µw¥Ù( +í8Š +@4æ¤àY_Ç70úxffd;´u¢ [4S ß“3Œ€A¯ º?l`pn¾*³J¢d€#('7wÌ òxƒÛh(Í.ŠÃq¼•Ïö¬þËëwðúÙÄUA]²™z-hªç2À*[á (–}žwÜtꪥ0˜ª¢ÉסNR¥ù&ÙXºë8ÂÁ¹ŽÓݶP·ÚM‚A¯Ã¶é(l[¥„ò)8ÕL¢³fRë2`Пòt+ôç±ÞÝ\¼§[?7„z÷+.€,F1G°±ï[Œ2s@ËØÍU¨LùQ¬:•±‹›©z—«×ù‚ÊDÒ©tT©`ï¦Ì4-çQ†qñy [ùAF|2°GSà=+ýa€úèê?¼rþÁ÷ ¤ Â}+¯^VnF|#¡n|&bbÙ,b½>*"pOú{”èÒÖ@ÿ¦ïÃ^1¸¾ôâK—ÿã×Þûb@œ:ýPs…²é®¬^üw_9ìõiâ[Äáæ°´öŒ1²Úäñ p¹5 ®ÏbŽ:¤eŠ#2I"U{¿ì YÈÀ€ù«ç?¹t==vu ÐG(lf€~<†uQE9îNÈ-zèÀ +wä:ugf—–O´NÀþ[ßAž±ÇÏ=ùÞwOúóû”)/8­9KV2¦Òÿ{g¦xONö€laÊqÂîK|†|ÉçÙ  ûÑ_~œœ µO˹‡. {ˆ;9  ìƒ-¿Ïwl'$˜ËR-C#¤öG–®ß/Ïx‡<9:àfZ]ø(ævÞq<°…ízOeÌ c¹Bh ñïÃïS$YÉöfx‡Â•u¼SçNyb´6 ÆrñlqïìUØR`ǭ؃°Wwð¯¶V•š¤ƒ3'óõF¬IØKwzƒÝ" ¹5Ü#õàî ¾ÓëÚÒ@é÷};¯rLv埃ëìÑyúi¸U.Ë×èçTëé¡sÈH®pB&ÒÄ!ç·-·âIØ: e Ù‡–äGºV&ºtý1üµ:K^¹RbÏQŠJ—¼¥ßÉFønžÜq–úÃÛ£§2ÌËÝÖÊá.%íLDJ&-¶¦²ÐoˆVs Ô #áÔÇ/1“-JxwÏ +Lý^¿'J†“«Ø(F*ç:%‰z2àñyó^w³Û¢u°Þ{ ¯V‘'-”áñƒ J“ÙQZµ¬l71`ÍOÆ‚â«UÌI@ÒÍt ôõLf Ûœ‘ ²Œû2rP±•vl‹’û‡ Ò¸FT}Yß|Ü¢<ƒk',ødÊpm©ÈãÌc®j–Yr^Ìø"H¥5‚nLâÅ2L“qb;Iý­ ½ÄÖpüÅ_ÿµx]üúŸÂ†·K«Õb¹}úµ¿~ƒCŽýÛ{ùÙŽ$wE5*ŠPÍ©VçQ…ˆd"ABÙRÊåJó\`‡ 3‰zVµ‰ûZÞ/âØÙ†NXV8UãíöBkqõ{—øßË÷ŸäƒËį¹Ü^„-ÎÑövÍSÝé¿ ÐÏ^rÊÄéI$±&HyµêFÓ œÖîqNˆØ›s] +µHŽ£>Jº6eX$;~°Çû£Ý+X-ž`—_ +ÖŒÊýñ +*Ì{Ð}˜lõ£±¬ÀåDH·pÌ…ÏŸØC +è— ³NŒŒÎ&3'§è?%·i|×°ÀÆÆÆùóç»ßì‚ àWàŸKIºœzxö±ó—_[•W^«Gƒ¡Dlú†Uß&ryR![šú[¤¶g2¼Q°BòŸÊe­âKã5 ™¤[-wõ îúIXôgûW`!Å”û^ò†j ñ!©–YƒQb`¹b\>(ÿ‡ÇïýÏ¿wé»—~ó¿ûMÝgåi­&Ê•bòm¼{K+Å.—),Pö¿\)±ËK}Gõ¯„þ"‡~ØÓÝ0ÂõDÝ`q ¶ý'ÄYÍž¢€¾÷äC«¯¬øÎ è +e>9Ý%¼#ùuKŸo,>pïþ‚Ž’ÆB•ÂÆÉu2{oN¼;â½) ® æaæŒFfEÞÒ˜x>ô¤/nPVtpE³{´Ž´vl­4¬4Øw·¦¬ês<õèYìwáügÔ‹ð\¨¯A¸'¨7ä1Œ§fa˜_.ôpwÈQY¯>m CåÛQ®o¬ +HË aWñŒàÜ®kCVàžÃtC gŸSÐß™­]½Ü9³R ÁíÐv`ÁMe÷Uz¾tË`·¶!Ÿ"vÐýyÞ],;ÅÃT¥Üýnïͤdþd–îØtP6\ŒópâÔ´£ûÇQó›Ñ÷ÄÕ5¤+á^ÎçLF*·wœ/~ŽÝÊïlWú¬)ÆÊ+ÁÊ’`KI¨?šƒB­{–@ tÞê,«¶ÕBeô—_rÅt’ÜNâß%õ;9 À<×L[@v¿þÖêL#"õ¿j7ÈðÝ9¦œ>!ÚÙc=Ç7kÖ €£»â Áø®üž|À¦1þSUÁÂKŠŒ ¡õà”Y¾?0×A%¢ÐóšÑö ØWãÝ›\øð…K…Rö¿øìç>÷ÙÏâÃ+ ú¯®ñ¾†É(¦}ñ&éìÜÈ~ŒÎKÑ ÃŸØÍ›ìFXACÂŒhîËÞyQ.×xÃ#Ô2ȶ£˜-€8Š“({fñ,ò,ÀÜŒø#­¢—œÆF¾àµƒ)/Ð ùüÕ7ÐÏþåýe¸X‘®îµØÇ´úµ¯£CFõòÄkv=nMåIº§àì'õøxHè¿Õ½y«;¼[3ÀýdšÅ~ýí7Å9î½åcŸzæ¥?¿¨¿HêÙ±rèßSÀèÔ‚IÇU;HUxl¾­ ,R‰8;™Ð-‰SÌG‹ˆúóìm$,5á#0odß—Íò8ÝÉŸ€þ½ ÐgúçŸXa1 rôw‡³Úº›ä%®ØgÏ`†úÙÏŸ}ø`Ç£ÿžÏ>tv8 ’$’ÊJ–3).Þ²¸ÈëÀÅŠ» ˜Îª¹&–}i'¨ø›FÎÙYŽã<›$.ˆ{ìb3œîRÉäèý­£ cÞ½z¥ûâg‡)kŠèˆ1Ëåÿáqñë/Š‹ –M@é»ßÙ0g‹8†ãaZŽãžñf¸-](ƨè_­Ö¢hˆ‘¨¾ÏóŸã-@jBó`| œè6ÝGt0è¹GñK9«Wh‘úAXÄÂí.èþ!)ÎfI·Ttî,/VrÓü<þÝaëhÐ6øçÇ>ýŒz?(þ|°ÖÙ0ÅÍâÉXÍÍŠÃú ûcßĆ·X“eõ8öa“_õ÷ÄýXKŸå?É¿¦…+ÀÊ mÀˆ1„EÎʤHq(O§ÏýùÑÒµ1A‚ì詯ÛMܺc”ʼQ0ÀÎ} ü,`Þ³€5ê"Œ©&‹ZqÜ7¾ù Ðú[ -Ø:ë,¤nõœÅf™$Œ<â—B.G40~›ZÏÝ_h5Òè#bwùH™˜R’ú/èWüw1¹ +ýÍY§ª±QrXܰÉô–³PïPAè—Côµc$–žÒ +/|älâ'ûi·á2Ò8 €uÿ$ÅÆ©öÌ”Ôi5üÚB?Ð|{%ê‰4–îhãí+?îµaAbç×£xÄ<è¶æ³â©/£?ìõóèê|qm˜ÊÌ)j¨øîó@‹J˜œºf™-6I_ØÇÌö”\ʦb!ÛߨŽCì÷dœ?ÿô“çßß›/JüÒ?ùÒßÿ;_tÝh` +ì¯w8¢9*>x`om ÓßMöáˆT–Ýpm¿i(õŸâ"(‚ µ«e€~W¾ŽE?,æ-Íâ w†NNX¹E®Å¹‹7ß X÷·©Óß#@€JfxË!7™3¦K½þÆõõ·aåtš'Ï:G›Njþ{ÔÞZ]cÊÎ +òÀF®H-h|Wšº°zâ;·AþXw›éèf<œàÛ‘]¿A¹ÜûTþºÄŽ€lö~ Ð ½†÷‡…šÅ]#ã–^ÅYì*.WçÙé…;`IPˆbÈ'ýJÄAa†Ÿ{h)Þ‘éªþv’îIä—á=Yî7œ±œI æ±S­ÁËJ˜¸%òxr:Š P2ŠéúM&õHœw.“辯 -@iÕ7Õ0±† pw ]4UÔåÙªùûÜt\F³)"'o½ùÁÝ!j÷£”`¢J¦‰“dÉp£±M¹Ãðf¤™5ó¦ÜCŠ ”ÉgºšŽ¹ug@Ñõì,I†aœ%5{NDQo‹•[ÿù/>ûµOnÓQ¼úÊ•UÈ¢?ǧŸ}º·Ñ ï[ân èJÎÈcšWÙȨ“2OCÙ6ȽƒmœàÅ)(þÔ8³5 “s½²RЬˆÌãIg+^V…wÆ8«Ò ?÷àŠ=çQê™a5¢]!}3wRpƒ¶‹Ê¶ÔHlš]Y4Š\MùË&–p V «dÈÔ ü0þpâAÚBm&x&”óZ5Ò(3g)<¾#+ÿCJÔt0M aìø|‡ÑäFeNÝ¥˜uÇêÌ|)+Ä9hÏØŸ£‚‡0Õôn\7yr¤]_§JÚ:µÕÝÚ7±Ù:‘¦úzŽÕȉýˆ´RçÈquÞ]y‰hîñ¶–-ªx°2öòÛÉц¾eqŒ1æYeÎ8á°'ʆrÏqâ +§y¥|ÕZÌÁ}Ê÷ˆ"©kW«RiЍæ°Z¢-l—¿SØs‚•´¹%›bs$Ø÷ãqÂDói‚$`æafé!õ9ᓃŸ©¸Æ¶l@XJG³èG…ÃxèzM%d‚s>8ƒ ™ˆîÞŸŽ F>¹Èýûüóa3Å´&ù É JŒ¹ïÕ8c‹Ô¥ÕxŒ1rez60 je‰d#1è؉Z¥0㵫k§Ï,?ûsOI°o<û O/ܳ¼±¶×Cȃû)¶—’žd°.³‘J)È[Z`мÙ‹È‹{1° œU¥O?“€ +L“Ëû©=бµŸžê½»Ç8/FA¿1°´ÔòƒA§³ÞnD¼á ;ûHÛÏk>üAái¨(è×e@ãžÅ0çî @LŠù4 ôJÞ‹Çÿ/iï·}ß b KpW€A­¸^ŠÒZ2Ú´*vXÉRR³qܤç¼W§iâ—¹?™»¹N{íÝäÝu:Ó¹™¾é½Ît.wózí¼7íäunrNò®W·¯nãºNé:²¥*±ÅØ¡M‹‘¼ÅÕR+®í,vïûç,–¢’Ü=AÀ‹?¿ßçûÿóÝE‡»w‡xÄú@?£;•v‰™-dá~Ìߢª:Ñäù,’~³( ² vâÛÄâßwÀ€-ï¤k+ý])®³wÈ®Ôb­Ðß0¦cgzÂþTâVˆÚ,æóìqà¢$öj:vˆ ÆAâÏ dFÌ"¶£Kñš%ÉÔè +DÔ㉯[Ýœ3‡Ÿ˜¨dà> >ozd”tá\ïݹ3«ï£gùÊ{øŽ¦?R™­NSâc»-ú¹ïY@·Êv•øDŠ‹x ›tv€þa誮Ȫ¸j͇^üz4!7C¤Mrl¬¦ëÌÃÃÔÜ¢=OÔ,L³  +GôÂ2]HUU´®È¢LÄ€r—7 ½€úoÆ*ÚälÜh5‹y=é²€©zYT'÷òލôCšf³ä‘y¢puÿõ.¡kgÙ=Õ pe?òî^¨#@?X:6;uu¡dÀF܇ÙU Eq=GŽMÍ}8QªÓ­§\¯”€/é@ôš“ký“ñÏ;,¹9ø¹üÖåùÍ$G^~¿^=Z%V=æ[nÝPÕÜÜKË2 ãîãZÁƒë-Z·J•q†þf· úŸxèñ4î—Hª1! +çøþ˜:¯þþïý÷ÿão¬‡Ý}œZR:zG'Q†“†Íq“¹}àQôÃèô×FP­Aèg’N»Y0úó“5Ôý1§r§'J›b=&ˆÚ{êƒeºM['ÚpÓ€wXt¨žÀíôôB¶FÝs ´ ³`‚5Àb ÇCù{7¸po7 sß"˜íýùm$ä\cKK÷ð¼“êÃû¾@²ò…Š6&þÔ‡÷º )ö6k¾Ã2 ÓÙÌRò•ë:(H*‚úF@Cƒ°â<_ÐýÙÿvw†K@?þÉîÂh|̧ÒI{ªÁ1ÍK$àO6¸ ‹ÝèL èŒH ;ŽäºÁ 40™Ú˜Kä1àwEP¶º aMsmˆÊu[Å4aø'¤8AÔŽ{ÏUYuÅžñRÜйåhq)\è†÷rly€)ÀŸ$ùû úyv¦æPçñoàr™<Œ-ÝAl\QÄ9¹L‘ªºrMôáFĆ…úýplCVÃX6 º‰Åú +ìp&5å•¥ülº®í úkì¬'=M¸\È5dJ%ø â2ãìúÝó|T ,4-¸Ë;Ÿ4ðIw×Ù³€îÏ2L¤xŠ(ZïÆ÷ýÄ`õ¶H;ÓWýá@ßÓŸy€/¥b!BPž'„2s=‘H.,À}ØaP=˜êæF[@°î¶ðàéYî¡Uw[h¬3î§½Õ€þÕS éZ¢ôøgêY‘´CÓ´q£5ÿ±½¿¢Qí£Æì€î· H/wëþJ‚-IÞû9ذ¦òQ[õc Ÿ°¤˜nkÏÂÍ,x'دk4/Tmƒ57ù¼ÒØòýA¡Ê_1H«Fûžíã.qŽ!ã[g+4&5gŸ°uÄØt75ÔE­T6Ù; ûó¯ØËï…êk þ—*JÚ(dè×(––ÃàJ_’6Zr¶PÆ‹‡Êáîb›,ž BŒµëúܸÙß ’éÃ7ñU G;—Ê”b~Ú‚"Ú€£pÉ‹; ú‘:¶¦ ¤ÈÛWDÊ®ŸÏç›ÌS©ÌËu¨bV%Fî÷À½Ô]aÚ»wT£ q Sí¾Óâ‰æ'd„)ú ¼ÎmÞŽ6")2ó8’ûUÎùNÜ-r³A÷ÅÁ¯Œx>Ø®h×@¡Ð+òíXE#·‘à*áHÀÒKµå·Ñ¥öGÿÛÍÎÏ>÷‹Ïñ9OSÙó2qéEc²2¹AN¶uj¨kÝg­ýhMKUcúÛ>óï'ÌpÛäJÝH¹¿ü®aMYÕS3hty‘£r6†žëïºIîKçW?sŠ]F†‘o·ÝRE\’;)}x +,\å>{Ö1‚êuq›ÏQó[fþQ%Û¶·Û¶×Á +N«IÙ|Qó2ÁÖí›mzËè »¯'ooá3iwÚ€=J?°Ì©øúãMNe*&Ÿv»]¶ò§VšÐ(«€ÙԌɈºÄJ. ¼ù,‹yÍ3=GŠvóÞ.êg˜Ó5K·×A¼e ˪­ÕõbiÜ,­¯×­ûŠE+[_oV C34'”v-ã žuóƒ¦}G“l©±á$ ź–7‹dÀ6êÉæ}èþvÃ9>'̲©ä² )²»8ÇgÆVÇ> IDATD‰”ZôÇÚ¢$Ë‚•í5bu =¹©\þ0€Iœå ©¨4—8ú£ŸÁßñÐ1C[×|2âü¶Ÿüz’xkc~*µ3¦Æ@ÎPV•¦Ã·G©†+? ›Ôls„qÁÞ¼$ýØŽgà­¿ÛV¸`Ä÷uÓHõÐÏÌ|†!&^ È{‰7\_ÔFt‘J„Œþw/ß~ñÛâê?6?nŒ/,,l¼Ô©¡ú3ýàôzc`E%ÝW¤ú×××y'ù39 ztª±‰ÿÊVVk)’ÎÊT¥¾>èñôÓ,ç¾{îÈTóçžcP=^=÷êÒÙ'abv~í·÷ýbbEEب]T{¦{äÁÒ³T )ƒd¹„þ®±GeÛk²7R׋ŽËê?l{‘0Ûר®ìº.¾bÀýpDQ³xVse²„Õ:ù`×PHå}s]´°,ý!m7íDÍ'ÓJQóüÞãP?Eï~,H6§ìo"xîŸ}}¤ë$˃Ó‘ùŸÂ]'صýaG"N|%˜ë$Åt`ã&ÍýNƒ©Pª³“ `M~¢T›`^è¡ü9mCïȹbé|ãÍáÆ“3OÌ€ˆ¯'Ô‹zÂ.åwx›ZÁØXýiiDŒi•^ZMD…EÑ`ÞŠ‹o UÕÅèËÉù…KˇNbS¹kaà³òwA%×D®S=o·ô±ÁÃùÚ¿}þ+¿ý;{>üé—fÓ.•L×õkµFyŠ*Zž½˜Vѱ:Å1Ô>-r˜·ïà ]ý!NU dXÂPMÚœIu¦£Ô\Ð_Š[´r/9€~ó¾yzÆFúŠW(È—^Kè¢ÅÝé®lt³ÈçL\%¼¸éà•ÈÝÀ‚V0 ã´C˜ Á¿‹sMܶ9T+‘ÃeÞ~©c¼ é9é‰Q0Pá™ÕU?ÀvFP.4z]œß(ϳÏÇup8†n,šÁ2€ÁÞv‰çG)ÇÆ/t0Ü'è/Ž'vV˜Ñ¬Úù–å”Êä$ ÚD‰±pzáâù‹åûËå‘tñâÐ`•0¢ni”C²vemúøôÙSg_þû—;À™'°Œåëßà#Ï>qvþóËÿ%Ïóùä“Å'—^]JdÀ õÃõ‹oˆ_\ü9ñ% +3âÙž< ªwò'/ë×Öa=9ÉÔ`sìéè?}bÿ®è”¹¤âƒêÉ{ÚD3}Ûà!çu™*WÙÅ!  (þAqr©Š… ÈmÓü%Bÿô/‚€~èQ=¡ÞK– •IH81 /FƦj{ÛVÁF œæ=7¥ÝåDÕHKá}Ѱ…"Õw£?ã~O„Uq¿Åi† Ðln¶R·¶[rŒþAè‚Àz:ÈþMqS¾ÍÙ žgc¾C,”üÀ·cŒµ rÏÛ§4 ONš¸‘zž,²£b?pD7S²¨o­ÄŽeŸÎ—w/­f{O¿Ü»—ưÿпu nm¨Á"îOE zîÕsrV©P}m¬ç¿þüú5Fý+ïqÓ»Òôõêú‡µçÿìkü’§O¼óÌ¿øÒž›5 +ùt]£׈ü‹;×ìÀØ.¥ÍÀü$^ fùONöó¨ÀYd•-ú»;ítw²@TÿáàØå…=~‡“ë¹H¶( ˆš?ß]qÌd ìwJ3нòè¤T».Ôºc «fA´(,1sâ¤u¨<õÀB?- úãååt×kr=ŠJšJ,R?êÙ{ý©5žŸ(þi^Ø%’8 Iýh”£x/Öd.ÛCUµìã7¥¨XÒ çæ§››­}ýø ú'®?Ðâ{ÑÐ4)OX û}„ÁžOÊÿ˜dÛ&”@uú‹/’ú[£/”6~ªg—tÁ?ùVíêúôÌ\ò¹¦ L]ùÑJÉ* +òïþÏ?üoÿóßxóW.¿öå/|eù‡Ä:5°ÔYýw]¶` ôóç Å1ôò°Ðpƒ¢›]DÿÚÚš2À¯­ÛÒÔ@¢ˆYÀÐFÀÉÇçé‚…’Çê?lmÇK²QrÉñý_yN8p4Òzxšõ‚vaÄ„i + §Žˆ¶•¸éæ5â3ð·}‘çVB&#eTЉR.cù5U&¨’Ïsa–ú;¢;ѲD45ì0•“I÷3(ÿ‘û˜˜ÓX¿Žúœù¤fsr¸+R-)OfÂË»~€m€07."e5ÈôŽmòZb´ŠGT¿¦s]®µ‘£¨È;ú´iH«‰ÊB À÷ü÷Ï;›µ§öóW×0ïÅeËc„³c¾~ ~€YžØ¼"à†½º–dR¥Ò~6Ö7EyméµÖV ƒòÔ$Nªµ+W­ûð…YVIAP€KýäéO.¿»üÿðêáj¹Tž}r¾²~Çñ3Ÿ{F¢²¬©#èäyîKÏFŸ;ŽváÔÂÄÄÁ—_zùܹsÖ¸×0;; ‡¨hÒÂúû›ÿô¦JNð2µîi¬7`ÅASž„¯¬®®Â‹®NUmÇ2Q iÙ-Ó‘a8”#ßv<)V–¥Œ´öÞÛ;Þ/ã3É™Á®ŸÍ©jNǾ»îL)É™>gåÊè—˜{²z¤ƒ#× %n¦ ˆÍbó[dËêú"ìãVK1"5CÅ +úëÃn`cbVxàáV8vãâc|d®S/a«æuý@Cå=b:€«Mê„A0™GôŸ˜õ~=Ìá¾`äÔ@—šÑ#q.±”í²Æ3…ïä)Œ}ù¿û5 k…6¯)èªäÜ0ípVqA‘)ÎêQ‚´T#ØôÂm7ÀpQúý¨¯GýP]”~eÇÛÂ$fdf(¸‹’ ±(‹Ô¶nm`RrŸ-Î|S©·„‡ šÝ˜)Z2ÈR¤Am5™Ç¹ç!·kOσ¾Hë9UÏ)«Ë”×JέNs³Yš°4m§T±š7qðx]ßè·ƒÎØÕܵ<ð= +""§ gÅh Zíø¥‘,XbîŽt½êÌ„sÛkÐ@cÂÙ‡¦­ñ&è æ¢>ªi#ñ f¢ ‹mœa #^ÓĸðçǘYˆKÒ4S‹)Ð5_ìDÝM ÍÏÿ#ÎÐk7P<:üßý鿟{x~qé;¯|þ—ž‘GüOž:+ £œU8þWóaûæ÷W~çÂï&ÏÍvba©HögæQ¡ƒfc6åzÍ-—°ŽwõÊjɪ4¨gYuR«møy #ÆZAq:Mд«U- ·d!@;UñígýÈF¿4µ¸R[Ÿ}p‚I@Yý/•,@)—×ryöšæZq+.«Run¼ÀZJæË=…"%Š%¢Ã‰÷c™ÍÍû,ûv Ð_ÓãýÅík‚\WÁ„ª(¡çTbZÄtƒ\²Ìm¿r PÐEl©¼åeòðäÅ ëõÊd Ö ¯_€-º‡(¶ [XNY§À¼ k–›7›‹O-Â%a³ÀR ÄÃb =B5°"ÖkÒ ÿô±é¤ÿ—yŸÉŠ]¨é ~ì‹ý-4G@¦û.­öd®×õBAúOXlÛö:6W»Yo;N‘’Ö`ÛºÕÐSìߥƒ( @ë…´hYÖÖžSª¤ü–ª"‡JooJ’–|ŸÅ€ßÜã~ Êd-D¢ Iº!¢½Ëñ‡}ú—¾äoo-½„Ô µ+W¤Hè¶v«ŠÅÀ7M‹¿ÛƒUŠóÙ±4]FÎs˜8 ˜Ì5eì0}¼¨_Eq5¸žy ›ú]I¤«IDCÊÍ[âYÃyƒánÈ„PÙS³@^ŽsI +EŸc6mó56šrn(­³tè'tâ»×båµišÕ˜f™aéRÖ¬]¹'îʲø³(žÿîܹw~pÀ‰ë…Òê{8~ï_}ðpî‘éo}s/ßêÉù¹ùù¹åeœÝM{`É•—/¿‹¸<~P_]v*Uêuè„€þ”“Zww:%KÈ ZVcè;vl¢†1°e#LÀ¶EН¬­²`Em:èB91‚‹÷·o\pn‰ˆ·^ãö›\BMþû˜ÿ€þú +ÑSîÂ9–øn7­ÔC{áÅà],>±ÈX|þ­ó $ì–S{þë² ý øO‰z¶Àdýº?ýÐ,08^ßz>9óÄ€þ­VkúÁi°÷—^AMпtš&4@ý‡ßmß HDþ‰¤ÀĆ€þôŸë+£Øe9ý!£¿^¼· 8•º”,¬|´$)}vSzè°À‚¢a€H8·ƒÎ}´“*ì K›F¸~Ðt©µìøŽº?',(˜™)ã@äôj‰iÚîy­üC‚×Å£óÈ.fbéì=à> ògõøqD¾£V,ÚLQ€häÃÅäq£ƒªÌ5¼ðÄ °ÈVÝ?¤ôdVˆPûIšZ“WÍ÷}ˆè-EÅ% œ Ê»R’¼ÀÊ +€PÁ–9Iød¸N>!”ÍÉ¢ÚÜ Ožšk\ošF¬ƒ?Åâ‹í;m9+Ô¸SOžŒKü×Õé +=–ŽÓj÷á³ @Š…–W}*Ž-M˜î¶§íCÈóøG÷gìX¡œ…€È%O/ ˆ"Þ¼„Óùµ×Л¿ôç—^»P¤‘ÿ/ã¥áÌ:@ÞÎÍÍpÇ÷ß\yü±¹JÙúÚ¿ÿüy d€"-|¼rñ{õÉÊИgô/JqÞè|‚úcUB7q.y‘œeÖ<Í¡QÍ(º® +ƒü½€=dTê\)ÿ¸ÊV¸s3 ƒYÚë÷@Ô>Ë\õ‚/2%²í¶+>è8k¤«’%+ °­ý7)éÛKùÄMª#&¹½Í¹@H7ÚÊÉàšnÚÞ;#+…©Ù·W;|…éb`õc‚HéÒľëƒR/ƒú¯(:lÕÌ€E2)•b’Ebðh1R¬þƒ 0 +…¦¿~jŒþ¦ÇnÁºT‡+G> êí]ôƒ³ â-MÙ#Ò™ÝO?ùôìüì·þ¯oýÊ¿ø•ßùŸ~Ǵ̩ɩ#‡€Ü @üÂe 뢴FÇH8œ›mýÄÙÄ2;räH ûƒ6 6@<6ÿ„§OUî'7ヸÉò,p‰P€ú2€ÒØcûƒdKDƒž§cïõæPüúÁ°?ÜÜè­€ h·š°æÇL؆¡>¸Aü䜗÷Z´Têj;+·mˆ¥Ê?èþP¥,«ÿ`„®¯R:YWÑ€. e0fä8—Ü¥ä +Vÿ÷”¨Y™ÕRº1d=ØDmŸn{ çW•˜Iÿ×ó7akT¦Ó§ª>8¨QbÿiUjÄÆCèàNÐKÒªãÒ]‘·Šb 'ú=„iõ¿ÎG¶4 +A°F¤ÃÆ}œ_;a›Žq·}Xõ¸-p³¼I)@ÿöÏþð±,Ôk©”åThùØìù‹ç¿z×çë{G8XxÙ —ÀìCÓ+?|G"FÀÙ3'{|ÿkbÐíëÄUPÿÇãR €~Ðýa…¦rcôÖ‹Ü^Éâr +‰‚ô…›e†Žã’w+fDfÊnT[ßœ}_wqLkÃñÜÑÆI9×ÙÔ ÃuØJý¬>f©Ä²’•1åÜâF1ZBÿÅNvGQ”ôRðS ^ +’œtÂò(g¶QT¶›©ÜaÏ7“ôýÍo<™­‰I-ÕG—mjkÍ«ñ1ÚÐÿ¥–Ö ÃÿR¥\1¾0)îC€s¾;ˆ`„i^•­‰Jk³PÑY0`pv +\ ì¬_º¨<.äe?§$«ÐÉuƒÝP[Ó­éâÄÙæÚ‹pº.cëÔ€9ÙÈKaJZÔ6jÒ˜´¹µ¹ú£ÕñûÇWVW`­V«‰åüøV× ·vµº9ìØ-{åòŠeYÙL–ã4k ØI2766@…?~œ)ß¶K–5g‹šÌòA|æHª•eI3;$üY˜»Ñµëˆ;sóB-uw]îÀuê§NI§¾úû_]¿*l§8˜Œ5ñw†¾‹½iPûÔŠ; aÛùŒ’##çÇËúXÑÝn³¥aL’ÈšÚí4 'Ú½1n©©›ižŸd)0àý@›˜fäã3³‰?j8k‡Øfü;æt¼„`îì5†G2$#_#ƒ²åÒOw%APÚ‹|âêõ¸à¨/óç2èsOÓDîWš[~èÊ•µ«—._»¹Y·ô÷NÝwVãñÓŽú#Ÿó‹EùòÚF±øæÍÆLÜ[Ó'ˆç4x“I˜HŒ–Ã&YF^4±Ý¬œËëšÖ´í’9–•ú¨*Áõ¹,ý6:1ãÃ禱i;áÎ +7Zù1M°¡œAï+ó²…Q˜Wò˜* +’txÔ¿ï –_‰›º^ÌSIMù~„žÆõwvåÆ É+•ﯴw˜àîÞjPK¨!CáþR§3P<_š¼1}ãFÛïðw)E2åiH‹æÙGpT×®ÔíÍòAá®xýÕפõ½16±ðñO.|üg%””ùÏ<õ9þ<#Ù›(wˇŽ/½Œ¬'_ùíß[{åÿä·}äôÛà=ñЗpÚ¾¿òÅgÿ‹-ÙÙ,~ù¿šÔ5%Ú•>y­êÑyX?¬ÿ«¼éOŒ—Î_ˆ½îã£ÑnÄÁÿ`W:r¼àoGÞvÏÏ´©ÉDž˜Qvv#–åûµh—î7‹MA”Œ z¹ÄÎíL*±Q@Þ ÈXcæ}zÞÈË­Ž}Û=ýÄlãfY’pâxÈIúýn(¦Z³&®É¥ ¦›–ݰͲéu<ŒûÍVé@ l`èGÏÀ­&¼i@–\=X4Ø’"áJ••W=[ûfÝôOÌÎ^PG%6ŠA”¦Ÿi~ð"<7Ã0ÀÄ`®ù0’‚hÏ™¤+kÂÞO'æï»,~zqå­•­Ö¬ãÖø™…3Kß]‚µz¤ÊT”ñçÐÿéÏ<}åÊ•—_zÙm; <~ù¿Æ âÛûW °'@å?6}Œ3y^ÿîë ¾ø…/‚xý×ß¼ˆÏó¹_~v}£þÂ_¾À¿ûì/>+WäÿòE€~‰²Q¥¸4!½°­“æQáeòpuã:ÞZeªŠ7´˜T&4 ¬ÖfP(€u˜È~N.0˜ZÒ—’kª6£0y脜Žnùº°ØâÊ«l‘w‘R¹ðxníBg¦~íy¸ØF™Œ tdž5Êå™”¼«âO³”ˆªeæè@±EèÿÑeØâ5ôpz»w6@àÈ¡d·½Åô×ÍF]Ž­:Ë*fSÅŒ‚‘T¢Ê½APJ^’“N }³‹?Ÿ„A ÔˆþAøK{2v "ô#¨Ü-ŽOË)v°†ý¡ñÊÓÄ£¿„Ä_¦çcæL~$«xù|2ý}·Ç`u±{<.]\aͺÁvmc›š*‡¾Ü=èÏ;•Š˜Ú¾çUÊB·s;ÒÄýB‰Ì§Ié¾ñ‹Õ'a@<ý¹3W/_= +ÑÌq­;¢ú)⥡óLÜ<¶yóª4¼úŸ˜;ë;+æ>2+~öψ{92 ÷Øj5,K\Þùï r@yH›†Þ¼Õf+ìØ›a~, 2@ÙÛ–bA±w£Mjé¥)²FÜí¯3èì÷ãž‘lÀÖ08 èk™ÈÙ‘Œ©Ér¬þ—ªUØY½p^7,<@ý÷ˆ6ÃîÃ…”øçAÜ‚‚Ç’>?4õÞ–'i¸o|¸üÐGOo|xÔ±“O~¶FF«ÏsŒ¡zbvÊU4ýÁÐH--–Ê•‡A§üþl‚=É/FkR$XÍ͸sï4Pù“-‹å ž²ÕÔ>€¾@üÊT:Õ ÀàYœJ}>àTÂ[»¼2II`ŒþNHR aG·†,YLëÁ{Ðùå$”*a¶>ò'§Óó÷,K¿”•²3Ó3—×.óºH~öÚµZãÏqb³xíÕ×®ü(T@,<¾ðµ®|íOÿ¸JÝ>¶pQº2à_ÇŠ3Ÿ8Àëç_ÿÆ7éÏ'Îä³ò¹ Ÿÿs„þJ½G¿w$7x™þÈôÚûxÁ3δîkmÝFGJ¸×¸ñ%ØJÈ#ä€þí;¶:.FÝŸd ¿¿ÝNÛÎV˾µe™‰U'¼1¼0óRû‚×ÎvÛ°†êzx«¤žýñO^ €É–šjbÌ6`èõ_)(r¿‡Ðƒ_Îkœ°‚àÔµ¨C-ÇWßw´¼lè`Š ê\?äÔz£»)ÿ‡½@µ«€Ìb.4ntklÎ7>¢ + @š»Äè/‘/xÏý€ú ˆûú°s†w$´Í@°0 ÃÀ“ñbúõî·€lŠýÝKÅÒ/ÀvõvãÔg>᥿€êV^]*­‚|Z¹°T"4îTñ4¯_›;u–Aúc{;Ÿýåç’ýfªG9ÀñxåÈV}/AMZ÷_9÷:ï ÈÌO@ÿJ,í9•(ˆÝ£\O„,¾-tñ‡JÌL? +ò–kÒ2`þÄ|•4»§áé—ÿöåä9ßKÔ®Ö zS‰ö ê?È€ZÜ ùâ…‹““(±ú¯ÐâRä†ÑpПüâ—¾º’ÎÏÑ`X5âZ˜š¤„™ÐçZVÁègô‡_OÐß0Dhc†W_ûôR_¯ÍEEs%KÌ Ð÷›·œ&¼÷áôÓ3Š¡?Yâtþ6£?<“ꃳùœy4›VûòûµÓg懾¢¨JNI:ö`fNL‰Šz=ש S—þ§ìÀ·…Îl›Nã’c¼˜ñ„nœ¬b Àù#iÐ’EãZè8áízñó-+º)Ʋ“ ƒ|6@ -€ X~a}½qíúæÙ'æ9NpòÔìôúô×KsÍõ\´…/lÔëW®nLÞÚ­Ù™2Íp¦ƒa +ÀÇßuÆ÷êÑ û³ ¥Ðÿ'.‡ö1Øÿóã°öý Ÿ -NÕþ— IDAT$wë„ ûG»{Ýðè´ Ï­  èöü˜„•Ú½… ¯k±€í=( ¨zl  ªöú=Ì&\ÃxKÁhßñÍ(WK`=è¦!Èn§S¥ö¼¸óУpNÛÞ„†Îâ³_´ÛN´+}tÁ»½5z_ytT«_«UŽÍ‚Ö¾Ù´&«è&ŽÝÙ¶)øæ`gœWg»ãoûÍ[0Õó¥ÉåW‘Gaþìâò¹%c¼4ûÈÜ…WÏO?Ú­VѲªó^{«?ÍT èh͹Ýd‹€X1²ÈâÔņÕýÜoÚïkQ´ú`>Ëaܼ- $J²H”òDÙ0Ë'æƒí•µ+´”î´f³)gd0¨ÑÝ?¦ñÖºÏ2ÆÏ>óÙ‹o "ú»yÈ|üãsj,H‚GyÔí´a-*ÍÎ̘J“eaÐX‡&¸È`}cÝoûÖ „Mõ”7õz½<^ ¯¯®¡qÖɇON=0µþÁúµÚ5ÐSسŸíϾv­KPP÷ÆtËTëÍH‚<4r¥ )yµú‡«Xw»Û6Í +ƒàÒsPããaÛ'·žç dƒ9^òº½m'­h:µõ ŽÍÂ;å˜P‹¼ˆ~Ç.€Œ¤èN£ŽŸXÄÜrš¥‰Rà»ÍÍæ¡˜¢Üß<²2 cjÔuƒñj·|ƒÁ„άª½ÙGHç¸Ñ˜›/±VUšœs·®§Ów^xå)¨Ìð»þNÃó6óù‰|dñ.‚¾ÆuÎQ/´íDÊûŒhžê4áݕʓµÕK­Ûþ‘£å(ð-«øèül‘=m´º¸XS ЄNÇÑó&6挲#¯jOÉjØ~6’ÒÕÊ0嬂LÚ`˜Q”ÁNl.\^+“ýn¤å¨ÝphPu›‹ßEOÚÂ'ÎÌŸ|’Îà’º~yjJzBB¼ë4Í’—®fa]¦¥zá†;[ý°‚P²2¨ÿìâV6¼8U6$ʨáÁ(Mì­GkPý[â° !°çNýJ£&4ƒ+«+õÍ7çO~vpI£åôy´̆Ìö‘QÐÄ@{gÚ0E»¦s`1è2 ö£÷ØÄg8uv(ó VÊb@ç­+¡ ô‚Y†]Ôcèç4‰09 XëOW¼ §¡Š‰CŽge0žM²lgáàa¯QþÜ•D÷Z%¿Yk”°™— ¦¼p&£ô·[.ØèLt˜hèœV~ON™®Ë~i4"¤›æ¾êš¦y¾‡¼Âšf“:bt´ötYºk#àgÏ~6¹ò0ÐXK¡ìýúïþëßÿÃ?øßÓŸ0ôK)ô—†ÑŸ…ˆs¢ç/ò8éfíëµÂˆzj¡´Y¿dеÿÕÉ%-Ø^×ÕhâÀ”&ÇÑh·XO7 ¦ë¡R àI¢ßü\&ÓQ3ݰ›ÉH8§À–ù@âtòü”•'К7æM{úáê¥ï¿W=6iÞW´o·µQzä=lÐ…Y ÜbeW_t»“zèÓÀг®pýƒ´è¡ ˆB2`qš5è[QV‹v…â1ÛJ&Û'}v|E úh=€Z.…¢½ÆÛi<ØTK¬eèm÷ßmo·Ýö¨äu|mÔ—v‚$ÐzQÔ K÷½ÀM³{Æ ´OS”Û><ØŒŠ&ôˆ®Žè¹U$t¥p;*Î4[ì:kfQ·§p7]ò¡gñª?uæÜÅ¿ú~-5~R½ÒsÁ‰#R¿üÏÿù™³ŸìÒPìR§x‰s3 ô'=ØÉ>¾Ï~Ùk² •söD„‰¨šFæ@qŠj;ÅK$ƒ@ÇþT¢¿F™ZRh˜t0ÌÑI]sÛ¾¯ûn·;Í`iØX€uñƒC1Aôw][×Í^„™zAàÆ-áótð$Y0sn̈¨ß ŠÆ‚~˜SØíŠGâÕ8š‘x‘³²œÉ²[IQX¦Eñ: Xb›IÁaš>U''¥ÍŽ ¥ª¤­‘ôkIk%©œnUhÙAJcrÒ€›j´+â¯ØŒ…wš·:O?sb቙úz«2e¥ûÖ&\’–¬ú®»Y"~$?ní©•úÅoy©ª‚LÚ$-^#ÙôïíldG'_˜qªF¥éW×jW/ùWgêIBÔw—ŽL¢ÊÉÁØ v:Ønêj‘U³p×õ{¨Ï¬•ÃÖµBþÄîØ°ƒîìÝ Ow èoQØív)N§³™Ö¡eEÞ¤ðW;Aâ–QØFLÑn· šk—Hb³™l¯?¤uºmÄ€9®1Qšx5v¬ öb'øú"ÛÉ×[/¤ê÷»\±_[Äfhri.wM×'‹ß5q7ö¼écûtÈjn9Åq#ýI:KuÏ‚œ Vqb¢Ôl îEÓaL Ô æG¡Æ9J’t®¨ûüô½çη=& W’1Ï>Œó_ù—¿ù°6® ‘(¥èD©É“²gžødòa.§õûr¯×Ëf³˜ÝGÐߥY–fÄèÑÙ»Ø?°›¨‚AmwBX™~‘î#Ï…„éË€³Á»Æ’RŠú*¹´oSŽÈ Àªï0€•Ù@IH•‰‰ú¦ð“ëÚÀÒÍå ú¦Ñ|2ÚÄXú*ÕßÜÇ’˜åŸ%¸¢hü{°íuú¹ªçØý²ª®qU!)þ¶NMÒ–>ê÷ú‘mT6GùøA?“E“MžˆyyË /†G_¸wñŠrµ–ÒùÂ2¸« õ÷Ñ A&L`¸.GÓ#<ÂnnÄ(S£Nô䮿ÁÈ€ås©Jæ8=Χ†:%MÁªíãêåמéþú3xÝôbîùÓÆ¡Ýe6Æo&µŸJL í^J©ã‡*[Òçb2H×OQó䤾 Ð_?ÜâöÎ>@BXi€[ GŽ$^gSMŽáOA Èy+ÍœÉô‚vpìfr•@„!&ù)Z %AtÿiXAˆ«ºVƒµ˜o˜ÎN»Q+±Ä¡9ØÉçÁÃæ,ë ©%RØ‹cºÝ–l*Ÿ‘GH±Z™ÄNUT†Úºi¯P›?%X|Ïè—ó˜¥ãGB•1 yØÂ%Í}Ïçnã€þ`M†€Ý2L ôUú×V/-ûÚ܉j“úâž|' þKÏ`Õu”^œî…šÆX¨Ž €[Êòˆ;2ª‰ƒ&ñþ2G!]×ý9!´à¤ß‘DÐÏ;­›)MŒ[ ¶¶ìq*ÙsNéh¥ö#ðÕ+Ëÿ´êu¤¹ùAº=£¿yP×òŠ¿jÔ]Û0p7IXìøå¯hú˜ÓZ7‹øã: wê°(Ó©m\Œ" gOX*‰Þ0±IDú§\ºÝ½NªQ—w3Q®+£=oÃ_³ç‹¿•П&^¶äáAK”)KÕØ†@Ã.Dw”úúYýWè­%DgpæÂ˜Ò‹Ÿ.}¹z¬j˜¦}Û¹¸Œ. …y¢Ä÷ÅM·¬÷ï\aÔ£ì¬4i·!uŒÓô¯FÛë )Ï> 3C½Þo¬¼sÙ*󸘞çÉq OS5wÇ‹‚;iÜááÓÈZÅbÇua¼Åb뎸`Läè÷ò0êH•aµ`4£y~{ç¦x‹Pö"c–q èÂ;Šs½¢\ìîÎI;nh•ÍÖM5¿òN d ì\x±ùÔS§ÃNÓ$Š·-›f¹· æ¡mʽ2Ü'RH|„ò€»þéÅyÞ9ù˜ˆˆÂ·¯²—Û-gö¡9x)íÛ’eU@´½³¼éw5ØF‘׸!æƒVh>Áš„ï |DyJ“mܴˇL.:˶“‡}9À–U¿Ñøö‹ËÕ*Õ&}ßFÅCºf%—ÙX«¯”'Ë^Ð6 ãnž—„–,Û“úrªÝo†ç‚J {>N,œYüɺ\–ΰǧ'Q(Ч´%XY3 Ë#JÔë#Dn'’#º6xÞm40Tв9ïð§.ùñÈÂHhFâ 1¡¿‚IJÁ ú^ 5šN Ì%ß±ÊG=ÉŽzQ–ò, +£V } ä¼Ž(ß³GþöVåðtñòàg1 +pŽPxœêÐOm€eÊ¥™L$qA6’i®ª:( ~’* +³§Ñ=íuð1Ü`C(¦2Eb2=Š8ÛÓ“ƒ¸š6q°{„b‚42²i3"¯¨ ßa±{N˜#¨þg/ LÒâ1ËJÉ"úS$šΰà ØxÛl 4PJŸÈ²cžLo?ÝÑÿ·~rK¼=K1?”‹Â¨ÇÄ]0n†éÒNÇAkÖ>øI2|ËBìFNÂYMg²pvøØCIÃ=v%ÏÄìf²IÜEò=ºu™EnF”'ŠË˘‚=ûÚéŒkÉ‚žMtµ©¨,úwÁÞWýÁÞ± OÏóý’$˜‡UMõˆP–uf †{”!.É¡‚þæÍº.‡•«Èn)8“}x˜I›Rœ’Љ}Ð[­æ e ß]Þ<~¨4sbŽ‚„8$Óÿé{Ÿ”š€Å°u¯Õt’¦µŒþ¸³Õ²HY†ó ¾uËuf¶zéÒÍž|ü!Pù£næÈQÑ"tz¶záÜ%kÜK˵“äNÓ?3 è¿UÚßÏKuZ±¸:¶†·Y:d +2`úÄ ]^Ë:„™ÍòäD£Þhßv@2?G5]ùœ¸~Ÿ°±ËØ–&Í=ÿj·AÿÊ#ôÏ#îƒè¯]ÝPƒÌP¦TH6²ŒWQuuQ^AZ4%€é†ò0£|CŸi|$j¡Î1jЧ̱+òˆÈ±öª’ ¢HE¾r„~Ô@S˜¯PÁâfŠVåD`Ôÿ†í£S\)d|g%ÇÔ¼è .‘–*TI¤þÓוj?Ë™ìh¨#ƒcýÙÿÒ”¥Ôý?*63èOÃf0Ùšqpré•ó³­š¦iÛ6:yˆ¸©+CäfbHÐÛÆNƒûÒÔ›ÍÙjõòÚ + ÿéS‹°Ï©z´¼ôê¥jµ2 ºÿ8Q‡^^­™Ô Ô|ðÝÌz ásX\â¡è–rÂ0´FÃnlÉ„·KäY@èk[¥îF–9Ü)׸g=èþ€¶€ÑÎÍ6èþÖ!kíË~|t0N.̃ÖW¦ üîÍFTïåsÍúìgN~û%4 &ÊÆù¥ÚÉSh*5®7O?9Ï©«pÚæ&î,~Ú„P“‡…®øèR…ÿ‡€Äb˜ÛÀŽOï:a¶™?; 2À»Á<ΤX3ÓÓoÿpd€/ÿ7Ï~ûo^[úÎÚ⧦A \ùà÷Xi•Ïê¶ÇÙU©ebºíñ,‹ÒðÎF‚6÷?'1p·îŸ, •8©‰¶“›º(1[!@:¬¹¶1Š@÷§n +W„!ôK˜åɱUCçÇEdèú«©qlµP®âXbÀ€e™°£izRó‘ëw1Ã^É)¸JÕ|Àø•.û]'ÄY‡¡BÀå,€ Ðàz‘ì¹Qý&Û^˜dQÀ„ÏÊYf½· O™šˆIè( +D‚{ØnIÁÔÏÈAj‡ÒtQ*À?ø»½`W8úÑËÄOG¹Éjk"N ’ùr5RÀ³Ôá‹<<œs…^7Òó:¾³,\¹Ä„éðOù9/ +Ö¢Àõ¸¸†9Ü9WÅ÷Ðq¬›–g¹Û·PŠÑv‰q5Õ÷{†¡ƒCdž㲖†ö8<7[-”ÍfmoPW–}ì;:& ö´CG‘‹RÜŠ²Pd܇mQ/&¶“Ü|4’b+©W°_ž»ãF³îNGtEg§?æ³÷<'GH\-a®¶èœüPÄ?'–Y"¡‘W™È~¼|ŸžÄÎМäG>²OM•4 ´°ZV.ΞxÔ/5ˆˆØÔTtvaô«™,R–Î!c‚ÚCÉæG”bÜ7ã*4–ÁZE³F‚—kä]“CaœT#+Åãǧ`õw"-ŒòDU˯ÕÞ÷kRcþÄÌòòeÛ>ýÔé󯜌[øôÌóúí©ÊGªç_[]|j^æÒ+˧OÏÂI}Û—ôuMouµêQsc]oùŽ1iTŽ˜¥Ã†¬÷:R¯¨ô&—¶Ö#Ûnlݘª¯olØõ³§¦Ž»Rkbµ¤|ãëK|š"þÿö?Õ@Øâ7Û`Ö'ïÝO)Ù`±LM¡öº¾Þ2Æ46…‹c–,¹ì6ÆÌâ(ÚÅØáÆ(ëõuÔèg©®“<=]Y[«‚Ã>ãJÕ™²Ý±Ac°ÊEL„àú¡i`ëlû†¦a}(ÕFÁp vC¤Ú-`Ϲåp]XÛÅûu#Wuýê±b‹cÚß~ñíé™}L»ôƒõfÓ=ñØLãz Ô¨/ü +­VæKØ3Ü›šŒ XIô'Å¢›Ô˜g8úÕ ²Y5Iög5=121¥81 ÃDrÔÈä5ï!ø…Åúp%ôùø"áŒnóÛE#_wÃAáUrl,CµÜvƒ½.l`u ¹òÄ1ØŠ":­)¯N ¿çaÀP};¼°‰'‘Ë<‰+6=¿—ðZª“œ¿%fçòë/Oô䞃5¬¼(gtðšÁ_Y݇Τ¸î5 9î/èÝûXø.~·×côgÒGv¯a•g:•3å&bn¥ÔŸ‚Ñu÷IÔ)Žé¿O ÇYbM\Bÿž5»³`»ôÆÚÂÇ1'g²b-¿u©q£1ÿ1|zßf#€î«cð"Cƒ$á@0ŒDGܽ–W³`ÅåÍгÁ`ã5±ëoT«m øsƒbýÏÿÒÓžã/¿s¹|È’NÌܦ.Q€þ67ýù°ê±ríƒÍê°³Yšé·ÿò6V•¤ç¿þ·¥B¾ðõFåHyãÚæÊ +¾ÙëÍ‹$­‹Ç\|Ѝ Ò¹ ™EµqcŸRs«TôFÕñ |/°MR¹K‡¬ôaù´9D÷Ê•«?ÿ™§k«—.¬V§+¦U<¶eݸÅ:‡^™8Z’*°£dôË$wZ[m‰T2Rxjfƒ£±Ù:Im¹`gfzŽ›ÐÑÓn£¨^|ò$òóŒiÕãø¬J˜!ån»L§Ï„ôVXl† ÈR!çªëcŠ›*”±.FöPóyloK\¤qZ«(X*ж˜Ù]Ð1}G¼S@Ðļ]<Ìw<2E=P¿±µðØLåFëâ›—7þïóó§fʇ-éçÌzýy‡ƒÀü¯Ù,#ñ“av«·¬éº—U‘,ì£e|¥Tº 7ô¥P7°êcðT‰[B‘ŒŒæ‚JÛc_HVè=D*Ƨr·c¥pLõ&µÍ>ާhÐÐÜO &A‚mNŠ‹uým—CºÅ@mÕ L9FØÊÙÊøÃŠÑË¥Ó>¢ÆN‰xÉ1mH$j€m¤-ÔÓ~'¾½¼’% vÛ~V”çß±é#ŠöϨ)Ñ*Ä3ÅΪc$²ÈøC$>}|¦©¥sá››°‚úÀ¿3PÛa NL+OŸ?ó´f `غ~mæÔYgkp Oƒy2—2@|˜TÐÿnÀùÚgŠï¶î7º‡53ªàñ¦,K9“J íbw6Þ×õ¿M¡ÐÞ¼¸`\¶c¢º^j¤ ¾¢pàJJ;åäU‰yW\RYY 4o¸ÒÇÄ1€ûL0b»6 ¥B›ê­b +â¸HF^Rˆèf¿˜E!8<ÀGJñ,…1ÃWèb |àT¢N`e€T.}¯¾úÞ•¿øèÐ>~½ñ +2÷y tþAá{åš`÷IÀ;µ« ú=spýygáÔ€ºCë[€þŸÿâ³ëuuTphKÂَ ßZͶN¹[èl)‚Ú¼Ùô_yg ÞóücÓËo®MÜo=0e{}íž+^Üß½ô2 ¯I$¦v«]ª” A ´ìfá€^ 0MýrýaGÉb=ÁÌle }åQeJäËçdñNgf«Í!L䤰M#šKiÁú~'Ü’0ó âšÂY½„(…©Ê$äù\~ØÍìÄåLoÉ_á¤þW•rC“º0°ž£Xƒôîê:;W…1ü}~ò~ëóŸ;}þÂåå —ávAÔj7“ÃØG«çédž ”>¤ÀÒŽ¼ÇÁÃv@z¹WÞ5£? _?%Kþd@è3{ †ðæ²ô¯4µœ¨Øn,VÓÀœÐmP±Ή-G +—É/¿¿ÆIRLKÃ@?ËÀý,eöD)èA¬0Ç·ï{ÈPN‰Æ¡ë²[$èHÄ8|Ý•8õXÉÃ?£œ'•(é1Æ-y~ˆyª×ëcn¨‚ý¬)6’’¼ ú:&—Ê,$Øbp1¤™$`@^’¤Á@1‘²úœp=ºÆ¡…$äÛ¼¾¾ráÜìc§™`¶ G1QÞ¼¶ºù‹ÇëWŠÛÒ£iikCV†s›[Žëì“jæ{Ç„’¶ZF†N"^Uìÿ‘$)íëW(UT-º;m9.µS€Ûd³²H=íí¶BYRâ)2 eûŽí5±8ð;y)DZ@2¨¥á*Ú°RDä‚kÍ#@>Ý¢ÜØlp>¾šp•ÀŸvœ5kuª´B’ÅÒ½$¥˜\–u}@9§õB+uáC8ÔÿjŽ#饜үgNÌ€кÙR +)Š‹ÔÛ8yrƒÝX·)_£zÑòGƒú?ydbå À`š—k×7@€°¾Q?½ðØò[+åûKó›»ðê*èþÓWÖÞ­O=`ô_~»~úÓE@é«Ý¼ÑÀèŸ^Ž?¶~ýÄï> ´‚è—î½úK8¥µp` ´¶ö‘v[­æxôõ_ü\Œþ „ô¸Î‘Õ‰‰3{ˆàdÄ4åζ;¬Ô'ê?™&}:»£Da®â¯$Ó€)ÞÔ°€tÉzè»LÊÌ9𢨤G²T¤è_¹|ãFkbrV›–1±÷~9[:ýI’ôÜëÝÄÏ_Q{ÈÒ3€J‚þAVÿ…+ißB0ÒÓ`]‰ÑîÚÙôMVµ,`dW³YxØØ_5E ³°.ƒÏÆ^ {“ã¸2¨ÿŠ®l5š[·š3³{ùkAýbˆƒ‹P5çuNÂX[Awe’`YQŒ´œa>AŽk´‹Î_uD)‘dß²eJ,Â×ÏäD¡§äå‘Am7:Ì>¹íûìûÊ¢b+Ë]rÖSì ‹}YÑ;ŒSý |•w¤)w‘¢Ã¹:ƒ'Kb.v"¬È§¤£¬$÷HNa:0fÏxØx\Þ îͪ‡«‹Ÿ{®Vu¤r ² ÷ªÎ.½Ðj·Ö]{SŠv [kþöIz‘~œ ÅýW£–£¬\xþ_ÿNø‹RÒ³}Gì„]Ù“ÆGÄàr{B3rvÑþˆ”ÉÂCsw½l?k°8­¶#wŒâDQ7(oÞÂf,VÌp¦ÆÝñl1k©L\«oÒ螘?9>a\¹ŠŒãÇ@ûsªqÎ‰í °À¡Â«Vso»GŽ p7vSÀû"iàK»·«îgû#ùPëÌ‚yþ»µöÇÓŠcò…ïžkÔ›ó§Ø4jWÁ èÁ`€¶Q€ÏÁ ìGžE]™I%$¤ô‰ô +Ùʰ€««É}2½ññ{< +¦ Òöâ+ OÌ9­òacñç©v?.©_¿¶^:„¸°²úöÜì̵Ív½V›?¹º| Fþé³'9Íqñ©“ßþËKåŠ9Q1.^\v(ûóò»µŸY˜ß²Öm{æªu @ãm{~Ç úŽ”óííš~ŸôÈÔÇßÓz/ÃŒ™8jÂlµo×gç¨îÆvaG+€êþô%¿’å~ÑpH]áQ šB!ÈQ.«yÙ ¾¬0À¡ŒN16aõ!ÿ™Ê`‘Ô“î³X‹ãXÓ˜,+teÝ4Cßwm‹³Hµ‡_4á^y?瑉ë +©7‚d™ëÔàly ý?~(šLÀŸ`F h ³ÃSáÇÑãÄõ"]¡r  !”*ÅP + בÏ<9Îÿ¿Ô½}çy'öîôto÷öN£³ì` íjÉY ‚‚Ç"NŒD:¼³¥sʶâä'N9º8U±êR¾¨ruŽ’Ô]]þñÇ9¾ +s•8’}ç“?ˆ²Š1h 4aˆ$Ö¢—Xa p€åfлÃnôlïôvOÏæùèîéY,%%%/ºº³óÑïû|?¿ßì믭ýôÒ3W®þÙÏüÔ"!:9ª¢Ìƒ½=`uq_Lªªtä•Çï´<ã’»ž* º|¼È:Œ&älh’JÃ2M·ç€èßw>» /G¯Qªq‹ ‚v)‚”/+å4ÿCS4òë{KŸ¬UkFë¹ìG@´†H5Bx7C’»U3Ê +n²š‹!0+/žM†™Ù +lï¼”Þ^»zíÖêÊÅgøéÊw^¿xéhM›Â Ý´nÝ0-'—W +„KLîÏ…°ïBei°#¦,sþTt@m¶R#c¶ÊtÙná¾Ӷë uóˆiMY=ϯ×*nׇÍ,™ÜpŽýxëM ú÷“ëãcŠœànÉÊ35ÞUíZ‘}yÙݲë9Z`–ò Ö˯€@k 5e¯³èè§A—daß}Á¸ÃŒàóœc˜,¾YÜvä÷DýB|X¦Î|d“'?ø˜¿–Ö:Ä,ú™‹‘뙨¿'bŽI‘ +|Jp.èC곊(~¦=‚<ËX¸A}àúÎÇZAí9„N¡MªIHÙOüæ Tgª¡¯7ðÍÖGüªÌBÇÿäFéÏߺÇáùaæ>KÎ'–F–À>Plïÿˆ*PÖ +AoÝÆz‹º‘:¥ªãR¾(QpWàv‰(k“"¨‚¤_ +DK½T‰CÆv3¸ÔKeÚÚ»Ø*žJÔ˜L‚Ñda¦èa"^‡ gËÉ»Q΄dè§è‡ ‹qÍÑÏ!&>P®g––VnÄ÷Ï¿Ž8W¦™Ö•Gù׎­Q]@oÇcÑ>Šž®ŒÀ!—¼Ä‘RÔh¾Ïù& ó¸T“óäXYE#W7Â&µdX30üY_<^`×Þ‰Ú‚œ ¹80iÎså>¶ÛF'±ÄË݉ ˆ³-0¾Ý“Áõ¢æn8š  +B^¿ó;›t“ÁY“Sé/„x¨ ÃxHp~RÏ@Š¥Â^ü0 +4}÷<ý*¬‚?ÁA–ó€Ë—ö'%9»ºäKc$BJtÐнÔ2N} 8ÀY&ücÆ7,ýô&@úw­Z}¾‹½;ùÓ@ÌQ’®Ãs¦s’Ytb?ŒP81!ƒ5 +>KW°7ØþLÞB–µ¢£„­hÔ7ëÐbpÛ™®ˆÁÉöÏ"ø¬”$ª•ôîòÝ)£©H1àIy!†f¾@hòdâj(â¥4 +”Ü#MË:’Ǒċ7¦Pôw7´ôxð,ìK @G>93»°¸öæëà¼øºüâÓÊÙ%³¡>#^}[‡í¹'ñ†³Ä´Y÷{{>q«¢ó”¯ö!ˆÚáŽ%ïÒ%‡ÊĤ*ïQøVÊIÆr½ÙÊÃ)„z¶îÞ4sŠÇ!c¾.),¤¹b|’³JÖr³=ÝLbÖËß[ÉB@ž->Ó`E9&`74'ôìÑs9%»Àêˆ,2Ë2ÙÖöDó¤ÿ¹OÕÏÆFs£6s¼ïþ°æØ}Ô@á¡•¿o”[½4¬dÒ3P©–O|lÆI£ê`þ;›ÿz„M‹~–æAðDpsqªÇhþ÷Á­•¡2#ØÈ]ýXC@œë{>âdéUGÃDZŽ ³\}B:yÛóYÐ~HEƉN>žÆ”©<}1BÑKMF‰GR‡ †iϾB&÷Y…°ùŸR„‘(¼¥TO#™-÷u“ôÏŸƒ l§B½¶ÛÜÁ—áã‘ãúà /!ý"J¿q™©¢Àò”r? +r?£Ï„ñô³sà¨8F1íeL:`o˜f•º¯àCȉ=9’ãb…D+ˆq½ +Eܸ'€<ó¿*'sÀbP P~pIƒu¸ê¸”ÝØЂt7Ð ï- D, ôgP/3›¼@·Ìôì  N?6S>’ø@)ÀM$+zQ-bÀ yÆØö„Â貂ö¼ž£F4/4áúဨëÇÀ®Gp>Ã!XP  + +(¤ý +Àes\el |&˜”ñžb!™}¬PV’È%((]ÈÐÔÆ…Õ>~§ Ää™î©(ö’Þkš…cÃëÏܰœ{("=ìǘSÕÎý=!õÒ¾*ô]Ó¹h‚õt?Øþ°…Š=öõÔü ®óÅQ´ôCfã+ç>ûµßk­7ÝžY,ØΧÒQìe5¹^BCì…L&35e¬Ñ$|ùͶút2#+µÊÍ›[ÓS[à öŒŸNEŠ#(ž1F³¹c5'¸óX1N=tõ3G¨’ï:Îa©#Çœƒ9)©ªÕ«Œ(á)iŠÖ {°/½HñŠ1Ѻç8­ƉâU×Õ ˜[ˆÉ¡ÈAA§_ˆXÞ}är2ØyÁÑD„ï‘é§)A/Í*ÚÇo•±¹dhûúQµjÁFxTµbF—¿õÆô´Y_xÔ÷!Ù Pü–eè \ ‚ŒnGRq¯¦ aÜFý,DSB&Ô„¾Mc¢ö."âb‹P?6ËË«å© +èNØ0´e_8¦ÓqÊe nÖD*È¢]º6aõä›ï\›:еqíÆÍé:–<Ûïߪrl\$‰»~»3{ªû9Á±7„Ó £¡ÆPò!£½áëÅ\iÂX.0¹—+}+ó¾ê| Üþ–6>|dccÃïŸ/5ׇ¨GU°ãÿl×ç0ÀÛŽ›P)„ 0‡}Xú×toý>ú1 îåñL±Ä÷ï…îßL‹^R1êø"•ceñýäxqi¾DæHfÙÕÆe £LÊ^é*dêa“HÿÝâ‘§¡B–þ)„²à&aÐq¿Ï,˜KŸXÀ9ö:S%·\:Yì+—BÊð;½ +Xó™9z8£šXØ^ BV}Ró¨hÇ8dœ~¤jßß²ïw.=wA/)^оÀfož#±!™Y=†]ú%™kBÕ›ƒ –&ÿw–fF#•K©˜[Kæ?Uܧáß”•Ç0É)8!‡xS‚åP~öå‚Â5ì1£Õ¿—džùñe9AÒŸ+;QîOª `ÏüÉÙÈØ ßCéCÓ)Lï –S<9DÇâ‡áÿð ü0%i›—éšGeŒ1÷ÔÓJñð#{‰¼ÊxÊ +E ,£LÅILE‰Ú›È}0µ$°•{1è€Þ΀“(•#„™OÕƒ8ÿññV2ª´l¹ƒ%Ä‘gÌdœé”ðà7TY`~ÁÆ/Vr½ë<ÿÁøH¤K /ƒ2½˜J +dêAÖu ¤ûÖ*ìÕÉ’’1¡ƒR 2駨[)62ÍïAÈ­Eó_õ¥ÀËÔ MÏ;êá§²Ú2ÛÇÖ‰&8HúûŽ£Sø»±¼\››ïv¶šk7Î_pZ-·ÝZzþ'–¿õ͉£SóŸÛºuÕ“sí´Â'?š·×²ƒúùK`y€È äòÙ +þxJãjk}R¯Låø© Uj„ÊR«çÙ…•ȈÖ©lÛû^œ¥ÊñÅ'fW¾¿þÿöÿ ÌÇw`ÂR3ð¥yks«³Õ¹pñìYöt}ßÝô§‰:[9žïwÁëÜ¥°Ïî@7ä 2[h‚…Íd¼ч!ö‹¦¦«ÝÚ²ïu.»€‰Ù\y;˜ÿz.UÎÔ.¬a &þ8¢Û†yéÏ2+è‚X±³ÈIcu•uK—d´·“X<•jÙšÔX*Ziƒçð+°Á +‡U —‘XÎ(h¸hG’5¤ÔÀHF•lR¯ÀM·³Y;Yc`õ +R¥†!¬Qfÿ$Õ–…8¦ìÔ¸äw#iL rhø,ý±Ç3ŽY¸£Œ¦œ +ÜRŠïnÀžÍð峯ÀˆˆFðäjIRÖ”´, +>Ö +¦¦ýÄ„|I€œ‰¤¤}2‘'ø(ûˆË:ö:(")ƒ½ž7ÌW£¤jüb3'r’3$~p7Y"ý‰SÁd”¡lŒ$ÓÓ$÷ÑöO9èÕ}Š´ø"± ‡Ð/Ii;€ÑœÕÃùHc`<û " “ÃÒŸM +˜èð «,;¹ËúãiFÑnœ¡è÷]œóp'gNê úñ=Û¡·=€ÈóŸÛu9²C=RÆ¡äŽùÏ +¤^0‚Á¥wvX˜Òľ´§ôr¶<{ʤIÜçûû/²„¡ïøÚä@¥úÇAе N€…¡mƒ£’|xŠ~KwZ®B©»eWª•î§¹ÞXøÄìÁXXZZ%*ï«W¯9^š©®6•ú°"¢Tžò:Ђ*÷ËXÒ×¹¿ñÆ«|ðýï~tÀòkÈs«Ä’ý~ÒtËÞÛ6PÑ ,–¢N­Zàxý2耥§/Uvˆ¡‰å©QýòcŽÿ_H‘šÿAR!¸ôï;ñêïù…yýªÀaÈR5ÍÕ»)ËJ-å\+éz/”ñ‚ïE`–D»iïh¹¥Äh¬Û ƒxöc&@’*Õ©Å'ÉÃK¥?¨„­ÖýJ-I3Ÿ—ãùpö8—¬`¦¤?ÓY‹kZ-©Ò`ØÍŽ! fu‰1\Éõf9}¾v«³š†€å{¹K™ê$‘f³0ê•rH€é§kÿŬ8…\¨H4¡ºóõon€=5 +€è¯¥ûû²Á’t,¦Aú“‰V?Yåd,¥2‚ÛŽrâý):ˆÈʮаÓd»Ê¾*^óÜå›U¡€$ )œ’|!Ùþ‚t@8†ßÏ86ùy‰¹˜4ýf¿»íôÁÀy¾JÕ´[®ï ×cçSÖÌÊÇŠn êÅÞÈzd @qÐHBÊtò¬÷ #rEYî‹ 4—ß›dØGúO_dïß9ÔCm¬lð³/Ì(”¶?O†êôh'IÍÊ;Cp'9ø#p’ûà dž“7¦7wbù + vÜj¬y­–wæÉØÛ÷1ÓÉ: ›ÿ9´¨ýO‘d¿9’‘3Ȥ¡)|¿¦Šrµê}èÀý ý[µ³Õb×Ìs:†UvûÉËa¬Ðzïó³¯.¿U_Xt¶lwÓ^¸øÜÍï]ç?y±ýæf0S_:4Ö5£b­z¶]žžSÂùÞeèçZ¡ÐíØŽ¾Ý¼vÍio8íÆÚ›xÞΫI´§ÕnäÊÓ¸H +“0ƒ†,’¡‡+° „ïL™ÞÚDûôÔü\•˜›÷mä=àlÖ49Ow>Xõï®V?¶¯¹m×8ZiÝkììú–Z”¬\3‚]GÇʃ^_Ñ}ürI%L˜BÌp¤°þÕ´"6"â„ìú²—q¼Ø§ˆ9Û)`H°Ä„‰ÞõqÆMä§øMh:{”Ã!uÌG};îë¨Ë¥°ï»®:njãVoω|\4PÒ1ÝáAÄ4jI™ VkhzÔ‹`õ‚@”©cc"4ïÕq]×a_(â+Ìd„~)…>ƒX¼òûo,.ÕÝn«2mµš÷û]ë(å„ àeb”_*H: ô4½mðc“Ð^aÒàÅ"æ"£"U(ÒnØlQÂa¿Å°1óÜ®|¿±øX]-¢åOaöx¾7iOO¸Ëã½Aïaþ‰]cÂg´Ë¢*° “¥X£†Á@H‰ïijP©UíÎÿee ˼pêDëÖºª‰ÀíÎ×g6&ä^ЛÐÕNÇS­—<)臌 †˜Û¤ ‚B@—C¶¹„ršíb½c½#XÐuigLr7=gË;sñQ½¤€œ¢B<·Kب Q"^Ëñ¬Y)‹Y/zT-£¨R ZÑ4µÛ¨ö´¢osOö")Lû>wÛ¯`jE)0;Ì>40%8ÚÆ…` úI0‰–à„ÇxΠQŸàø2aY?@Dý>¦5øº°ÒƸ®”¬:ùö‘€ÜÑîìÆ]nCç°½+˜ä øÊ˜¡ô©x”Aj\¦Èiy}²Ä5Qð •£Õ¦¥µî9Ó*#߃éíbÞxÀ5øR$"º"Ìu¨¹ào”†â|¾˜[Ø–•`RöWª2sLFsŸØ ²ñÂhîÑ „Õ¦$ôrQH{¨ ÕIÙsüx7R§Ì=ªº,’R‹@ çs#Àå–ÎÿÂ8ñ± œ6¢8`c¬¦Ó%ðWœ-›ì¦TQJ¤MXú¡2—{dÒˆiM¹&¬ÃåV­'³\­àïøúB{ÂýWëFÙ4[ï5Žž¬om¶`›_8³qû&HÿGÏ^€ƒ©™SÓ'?¶üÚ7«õ9sªâlÚ&ÙG=ª6±è¸ÓL,YPæôŒÛÞXþépÀ¯/¿úMY×ìfãò¿Divî€É±>àÁ¨mæQl¹â2J«R£‰ÐüPÕ\é%͸2½_8íߟôaøëüi½ûo0œÙð486 ó{ ͇ÔöIdq/é»®OÎOƒ‚•jvKž)ñ%ë:É_ „ ›²ôÇA "¦ Ös×È%û¤羫ÏЬƒ‹º”&¯l¿ÉŸ Pè$±”ÕÅb š°è,÷…lgÿÍX¼o’tpÙ(H÷¾W¼{XöX}@!+‚ %+&ŒuËò‡Ë3¥ˆr‰Ã[GEß ‘7ÊÞt±sõ±¡_h·Ìbýcà>¤ì"ÊP•[ma¯ÑbŸÍȼÿ†e;ê„Ê=…Qxó3gë ýa£#s.¹ê_ð³‘Ï?ÜOŠ”òɇES]/Šþ0pâ~Eÿ ăn°hjï¶êæÁÕh\›„•t9)š |„=b»Q~þç?»§‡¯üSbl¥¸½˜Jý €3óBÓ $-lÒ?u$©24OÁÆx©wÞƒ}«±,_Áï-ÔX]yø$´Én +øú!‹ãé"Õê ýñ?Oq¾‚€+8pdZ‡x;‘ãÚø -vn¾u¥s/}gQð9€&¨W«`þ“7ϤÓBUTM£Ïà¸ØÕ,™Ü2Ëó»wó + 9aX`Ø P-t[ßY-Fèöd.øƒÔÔKA¸_æ’&H~ ±SÒ×o¾Ó˜¦¸˜ÿ‚,öFÎt—¬Qó6&²˜¢¨çƒŸõ^ù/kìí‚s(²b–LþyAï¾5iéB‡ƒx‹)$%Áü'ø°†ÝvÎ?» JþÈì­^Âäao§Žß‰ #Ôü™$”¬&xMÕp¬#ÍI¦ï¤b›Êsñ±‘7»íUO[œa†=—úñ÷s«Qò>‰¨ŠúÃl!w_ƒ@éO:qø¹î +/GR®´Úöê{ç‰4A …wb,„S‚[Pâ.ߊ•Çá’¿¬ÚªÙ´;MÏ"æNطڧʸM,¯•‘Û‘C<14Œ&» ßc9(ÈjE¨Z%œÇu4²‡à@§­ Í3L§ëaéö°)lßé¯N¢M¢1g)©O¸˜ 4Š b!ÆÊÈ$ÌL'—’G>K¼{¦ òžqß$„éÅ˼³èäÛ<ÌW/¥à¹ç•;)_1ÒeØA×ßj<,ýÃ\R$Á“(ËÁÅžôÛ8›ûYn€J'ÁNB]Ns©/ Ξjpk#ø+ ל¤gƒÑß7àºÕl­qƒmœ^‡t`$•²>PÀj÷'Ô^&¤‚‡5.Ÿž W‘š%l ¼¾Ú8³P· ½EâÕZ"º³2ë"w + •U«S¬r4½i3¸¿Meòï%F1Øþ‹¦[b´Ëô`>UAÎÏ#ö¸þ·L„sùrÃ|­úH)äCìä»^á»›mÇnÓ®ÓNÐ`ʇ+™èw©þ½v +cÄñ`øÙé*!Ô´[/<ÿ·7½©cÈ÷R>6ËöûKŸý |çiTu¿A +À "-]ÆrjÔøT8-Èüønd#D4?á Jq2†¡ˆ,ül¸‚8ë%Éüæ¤åøwQù‰KˆçÀt©ºF–}ô2«Š^襺½]ªï*øXqEpȱ ‘6µÑw¢hÎ#8Š4 +Ä +@M낸†Ä\L1úBáÊr£2'jD?8ìðGØz„g@Z¤PÆ@A´MÏÉÀñE(ÊIZh`þ_~íú¥g‡‰™Å¥V,,¤1´ôMKÍä…‚S<²Ìt5&1˜ÒPRñ†¢4 ¶˜‚G }êŒHs? Ì©’Ä™#²Îp$û¦~(^ð,ÝøV1[Ûy4©…×­#Vc'[}aFÔý´a›K}’šŸq´Ø PÇAiçb^ êz5ÀÇ Dj01âLU{}9Γè¥I8à1lN&Ô|-Z›dy)âÍ×o>¥Kƒ·òQ/­ñ~`’ªGTçâYaš¡ú;‘>!kiÇ8¡]g»è‡2Õ‡ˆ2+˜nñ¯_¹ÑrÝ ŸZbZ¾ÏT›|XëÉvåvWÄÀ™`«½H/ÉÚ$â/•ø*ë&‡áb=p–¨ÿ€[™üºu7ñ$Iµ?ÀcØ»î°>/ΙȾ“ôâ‚sй‹"¾râ´}÷–Uqê§™°ô™¹êŸ  ¹'Ͻü»¿Ï~éÙKüºK ´Z©DWTs¨”÷ç©”bi²Õâv¬!é.ü+ä*@AîónTâpÍÝ´­c³dà§I)Ø€‹Þõ ÈüƯ˜$öÁü‘eÃ&d‰c6p/¤&@&ýù —J4” +’F°¬Aè‹\£ +ŒnOÔ€©©Õq¼' ò4*&q!]€²+šrß…½Tp9I [ÑN‚½Ž§ a‚I%f‰¨W8‚OÈí3‰éŸýÖüöfU’HpÁÕÆxä,( ¢¿–YýxÝßñýžÏ×üëÈ ƒ Ø÷ïœK×¹/›†1}´²ôøêa«iWÕ{¹¸M>òÃÅiŽïWËå¦Mˆ úÐÄ&ðœÁ0g@cãºÀœ=×¼ëgö–Ä +÷}Ò_ŒÐÚ¤œ¯££M°yÌWH+ã0žgíT%¼3üT +‡ìËA`u¢[¢*ø,ôîÆ\$QÑ65î€Ò+dT`up²d=Ê]N€$5ˆt$ýJÄÐC"ªâI‰Ô‰K….±Hêy@”SO™ÿxiÉI‚€ÒŠ b„ IÂeE¸^(o„L œ +Ky‘ƒZm»d¯ïpÚÜ)­ÉC·•ñ_o¾³¿ +Üñ\Ë884Ÿ/²2S¸0ûÁ(ïÞ7fOîý~Ô0Òßj·‡¥˜õ“&w¸.û÷r$Õ¢‚<¼ìnÇ—Õ4ñ „b™ºC•£v§ÛâÜÜÃ?šÍÿââ'/ +º¡ïÝbó_ <ÖHöÀ{à°²Ïe†QX`ûg‘"<«ž/tŠÁ—wŒ‰2lp|'…¹Ã äšBmR»ü­s%SèæZ¤?WI²ž : +%«§ÎÜYÀÍDv³ ݧŸæÒìÐùƒÑqƒ˜i!U¬0Dû¾½üÎJ^œ9·hYCyŠ cñ€ƒu‰*P*z¾¢Ÿu€ŠL˜–‰ y*˜Ëîus#lÝJðN«'®}—êètlA +¤¿û 4qç“e]S0D“Š9,#}BÁîP=ÎЂúɪZR›Äß j`ʳ2^o%gx177ÇrkÖ0íFhPuµ2ެkp©YObþ“ÜϤ|Mið$ðê'°Q?äÚPz^ þp ÊB¤šŒ"‡Ô†–Vª$f«Œ"´[©MŸ~5„ùSià1ˆ·].ÃgŠ1¦šAÔ†CgŽÙ¯À5  È î¦Á¶?7ÄÍ}yþñùu€7éxpÌCåŽs0pP¯ãoÍΞ^_Ç(ÅÜ#§|ÿ3<Ï7 Ýëb¯zíD Àòrsi©Ö¸ãš&¸ê*ô‚XS•VÛ±rßÞôA7ÀÞï†õ¹JcÍ0÷xÕ¦fÌʬÙhØ®ÉÝd~¥\æmemmnáôüÇOñïæçÑNc/vó®ýÁP¼Ú»MfMÀ! f‚E£96³Kãò¶×׳(PÆ’:0´é“õåï\®ž¨/=óBî’“¥´~z®ñƒµÚÇæ“W¹2§6¢3ÁPôý%´ÿ›ÿ7B‰Åÿ}Xd\€Ðé©þ w}yü€ÓÀÚ:’G$ž”,*R;4æ£ØÁƒ[ê¡S°ÏLÄ "ÛŸŒ©HReX¾È¬ $•, 9”Ñr+½ x ëpÀ¶Y¸GD ÙY1ë¼3J=8ˆ¹V½ïÂf•ê Z›Ë dk“’‹E»LÓ3©ÍÒŸE?¢ó“ÀÊÞv¤?:„Y4U6Aô³À¨8~àÃûAR¦-~3½ñAâAbu|× ’ œœÿŠÿˆ”•<€ÖýL§ë×V.<³`•-‡~7“’ HÖpÈí +ˆþZ¥²P¯ƒ&è|ˆßµ%Š´_ä>›ÿ"Çð·q7ÖŠ¢vߌ®€ªd +À,‹ú¬n¢ä…€@úƒ`NªI”&s²Ç,©ìå˜GLÐ úu,Š‚Åßb¶Õ7ùÈS°©Ù¾Fæ "åÆgÁ,!x Ã,H„Þ£*û®`w¸^ UÖaÓ© úñ ‡Ôz½b‘ ›¥?¾¿\^[EuÅ: ?ÿ‹o}÷Õá/ÂÆÍÄZ¬Ÿ~Ô4áþ˜ž‹áúcIz-Øö²Â×_þ?þèéÏ¡!ÿ¸ja>ÖsÔqU%+Õ:2ìôÀàj"Éš¦:–0‹P4;ü§ (Jïìv³l;çI]]ôýÚ0 +á@Q&3E® FXÿ‚d»XÜÂ)JÄ›÷»lºÂG¤ „ÈN×ëÀ¤²D©„(£»A¸»]HíPøœa–JgX¬p©>‚‹ÁÁù]i€õoL)ÆAVÕ€¾˜Ó‹%ÉÙU‰N»¨ê{1VþøHt §pÓ`zG])Éœ‘Æ(Ø2>ì’‡‹òz®H\ŽE`O0ËÑfDF!QЕ’<.a¯zÌêú= ‹…C.† IDATõ¬[¸Ÿq¬F1×è1UÂxQKÅoÉÙv’~,(tP‰£°¶µq3)¨B #¿Ô#08/¼ ¡Pðv\î‘@Ðì„) )uàÆÄÄ!ué©…¶˜üLÕ@Ä_‡™€\X·'qõˆèõÂA®’ŠðEÔD¿8 >…TG±6¡ *û["Äó˜háò+GgƒÚÚìqà«ja¢8àæÛ4Œƒ˜ˆ9vjN¨Ø$ôóÊ݆ýë¿þÏ^ú]¬5ÿÅÿôÿåoÿιO=U=wö¿þµ_úÒ/ûµ¯¿ôåôe³d®|€çz›7ŧ.á^ˆ ‹gà÷Ï<¾47;óæuQ­¬²¡úÈÌÛOÀÁ'žZUân;>¹0}Øjm5ÿĺÏÎéú¼}ÙÛ=ÁƒR¾Û1TݨO¯¿×©Rè»}Ïѳզ2w³ ýÑÃxEëwÉ #ÎN<ßKbGëk.,ìÖ=Ÿ™Óã~Ý*NÇGZ—Ýtpëž=FQ\¬+‰ãâü“çÊÇ’Ãìöƒè4×k”P-¹nó½V¥êPõ$Kÿ|˜Ì¾×¬«µ7“ض?ìxf–@¦¢:>=@Tabp´À ŠÁmWäx±©ç½Õj‡0úÌb4ŽÚ$ï‡Gáe°T7-X‹È]ˆ¤ê½?ènÙÙùdÁ^MIw­©Š³e³’Ü{fŽBöo*ŠÔë%€ºÙP'ªao$ˆiy$UÓç.A t‚ÚùXp+†à8;±_áù“ôwˆw>Þ“tã€`(ßÏü“>í=˜¦j@d &Ø$—p>IHß otõÈ™Ö&6T íÇrÂd°gÓ¸$­½cÏ=žÜÃ5¤ wÏ_Lö3&¸H$ô#$×d4­JâQ ƒ´x¤¿Bhš*âÊtY¢Ñ¸Æ×¥¿ý¹ì#ŸYl´öcCñh~ЮOj@²lmº Gîº_M®¤ÿ•ïì÷¥@¤$Þz{ùì“Kÿô×åÕ‹_ÌþšHRÔÕx¯×ç©S{ à`ãN¸ùÓD ì}è0ÍÛÍr½¼Iû£IoÁÜãó`ÕH²Å1å·‰· ¿2ÈåÛ,’7îƒQìÀÓ0L÷°¶Xú×g+¼ÄÍrÉéxKg«Ç*ÌV5$aT̤ç^3ì:õyŒ¢Â^U$°ýÁè:#Ë1i=ŸÕˆþüŸ²‚§€dÈP¤XKºs°èOÍÿ¡ôß'¶Œ2—ï´7æ?¢œa* +ż@# Fâ×å£3¸5!Š\“@ð³Är4ªQE?nº®•F²F½YTþ3‘XÜÃH€s-Øiô£ÝwÉõ#ýh|X¬ {Iмß0ŒÆ¤J¹Â\"fa8n’wþ¨Ïè{Q^ € rò4G¾z¤?èÇwÀ©°&-p0O1.&óÑj’À긌Ñ-ÊYGŒO.c„mä:œ.N +Ô`þ¹an¡‚€ešK0ÈÖJFéGû6[œmDiÑ‹\àâzþ8Höd9DV¯c(¶þÈé•åDb~í»|á9\„×ÿjù̧–Àü_y·ÁDçë­sŸ^ºö—Ëpð…Ÿ}áæ»Ží\xö̵﮳xåë uró5-5z¦ÿ©³è?÷lâðH@‰svLónë0ÿYúÃAí®;þ ÖÞMÂÕ×õ¤|´|•è‹eMeþzØoÜm--¥y{ýù“a5Goe÷âÿÅhµ×ÍÈ~аµè©1a§E8×W—Ï,,­oÜ™>7W[[kFý v¼¶º² +{C7Vÿzµv²f˜ÆÕ+ËðèYO,=ºÑ´›ö¹s‹o|%f}¡ÞXmè%cn¡võÊêù‹ ®ãÞ\m\¸ˆxeyíÒóçaÇóÕßxíz¹báÁw휀Æ{v½ŽRèæjúëÜs瞬ƒó¿.j°ÇwZ•©£˜ÿà¼å£øðæ›oþÙË‘]òO Ð °úv!{=ÈW-Žb|-¿sýá[·øøÙìØ°†9ÔS'“¹:`‘¬"þ•£àØ×²÷øA"ôËSå|…do» + N1}­H2Š"ùà'³ô¯Ÿšw¶qþÔғΆV3Aôƒà–»Ëo­´U@ Tÿ>ƒq¡ ×5›*†'Ä‚2ÅÆN€Ý´±Qdþ•cÃpçÛ¾áÓ`f«^o?‚PzñHÈI©!(Eæ”§gòE?dH˜fùE„†«ÙDšº0èÉQ]Ë4¢~ÈN€ù˜Cyë Ÿ$D‚|bPp'¨1I0OLf$…pÉìEX((ðñ®ã‚íÏè–QN¡;~H-æ°‘7•þàÄ{{îfÀ= "×ý8”þi\žEs§uœŠV+„ý,øKgŽ|>pþA°ëha¡'R3<Ì•{Ã{½wŸÈ~ˆ:¿|tø@Ë„_ÖI[u¸’G•¬)‘é–@ú£ ¹ì‡ò j™aVBR¤6Ò:Ql"ÅN@ö‹³'’g„Àú4* ¤¿½éÎÌVAô $«ÞL…/ˆ˜éYœ€öúö +œç>’&ðF®=й„FdEé¸Fžè€Îƒ¤8¢zÔáÐÊÛ×ÌØ¹¿? :`ûßh4ëõÚòòª(ªõ™jc£šÀ8¤µî´ª'«à€Ç³ðñz³i{]éühð3žZh¼‹†Zý±Úòk«fͬ·–WZK‹U× Û9óì™Æ» û/<ÿÅåeDjóyùÍU>X½Ý¬¯˜‡ôÆö™GÑöÏr§dþãò÷x ú÷3ãÖuÈU…çÎÒöµ&® lÚZmÀ>ØW¯à;Ap}3èþ†Ëߺš=üÛyÃv0>Žæ?ƾYô—§ô7®4œ÷êË :ëõ·ðüA´^]fé/HôÃÌ8h53Ožó^¹pî Hÿ_ù/~YìçÆÈÍð<zžK£¸_†ðX½q½þÁa½ß˜¦.Úkoáåá/@úÃ>áY¦á¸¸§ _›_˜ƒý`/®ÏÕk §ã.|böú_ãÉ×OVnÞnL&Ôgk®³ +À:|lÿfÃ^Xª¯.7àü—>Qo3Ò£šµ¦x¨(F[ ×QL‚;Þ‹WßZí匌ò1»C•¬åÃÆN×+Oþ”×ÙêªäöVŽšán’Ñ<’ÜEy[uÚ˜:9]ó¶áûq¢ |U‰³H¦ôf/QK,Щi… &ÐUBÖilð}¯\©HÛ²ß÷u…nÔ²@IÑp ¡öKxæ¸Ó‘T»gq–;ncÅ9ÿ,.XŸ·o´íûÎ¥çÎ(cÁPQ1Y 6:v0Åó• +ˆƒˆccˆ4™ç4å!@G„qšÀOðˆ”„Jžð–ß¾¶ôä¹úñÙko­\{ý–"©×¯ 8˜©U¯ßXæ;y÷v öƒ1ñw—™§ÌÝò2Ìוn¬ÔaŒô©lötÃBCÏa´úÉúÏýÔ%7h-=µ°ÞÞú“—_?u¢w¯@ÊZ:5qûA?Yl'f+玽Š<™Ì«Ö=üÞê±òÆF‡nÙz»{g—–wÛÓ“ÓΑB»e[“ukÒ/F©¸òäÜô™)æëàšÚÛÀs#¢ Á7p8¶«ZªÛ –;(g›mŸeô¯¢„µ~íêÍ6õêk(=ÛÛ^{ßÐ 9[™¶®/&®aÂç90iþèß\®Õ*Î}çÖå)kå{+‚®ËùÄ[„•µ±‘ÈÊk‰ºyñ±8¨V…O,¶Û¶u¤:¬ã$‘jõDvKTk(|wz×¶Á,ÒT´QJ«3NŒòœr*ÁCCÛ´þµŒwéÚ_ÿÅÓçÏJ’û‡ü[/>û…—_ûÆÕï½ò«¿üÕ—_ùøë‹/üýßþͯœ>½øÙçæËÿÍ?xñ³—æOÕÿù¿xéËÿå—Öï¬_yíÊá‹/ÿéŸÜ¼¹òåøÕ—ÿô¼Aü«¿ð•ÿñ_}uîäÂÅó?ñÏÿû¯¼øS?3¿°øµ?xéWåËð…o¾ýú/ýìÏ¿ñæëkë֔ʼ³3ã†v0'Ø«]Å.Ü ˜:ö`Ì…Ú Z%PK°î1wsæ6y}\•ÃýŠWÜï@€‡“^cXŸÁé"ßÏØÍÒ$–0~(lg娬}o·fb`Úi +K¢oFi«iHEÓÛ {„?î<°ó7èÓözTªšYµSµÙ#'20Ë(L ¡A ƒXûµ24’/G!­ÍœnÜj6nSãèüðr*9”Ag?ÚôªõÒS3?ë¡ÅøûnÜÛíqÄ/KÛøm“?ö,ýñ{6ý'žD<^.ObÄ$…Á0°Q^áz>­ˆ+œ¿V×àö°y;Û\ŠšTÊ’2àJ$Èdz…¬3þÕc3ßyÁÏ]ܸg׎ë3Ôû^kNÃÑß±J°WX™õÞétNÏ'Ñ¿Wþ¸eè~%Y&ü î7ŽvUÆ +5Àyš?ò“/â(€ü­V)ÃgãòköÏý•Fƒ*…êê7_½|†ŠV¯¿³ræ‰'Z­-ÐgÄüÅ Ï_¼põʽ@½ô·@´.WŒÅr«m·¾EÀ‚"hnàƒ&î3Ò¸T5{¼zåê2ìa[¾†Á“j­ÜB@Íí{Îô1ëÎm‡f…a·½}ÐYÍv«ÆØˆ 3…vÏ·&†Z«Yͦ†slf÷ós‘²åÌ/Ô{9:CÐà•£†Myoc¢bÛn¥bŠwÅÒ^xµJ³»ÙÑ{5Æcðb«eÃ>ˆzÛ-WLØ»Áâãõ•w jGLðE@ëƒ_²ÞNXC6™z¬{³Y?¹Ðl6Aú/||aõhT}áóŸßhƒÕo¼ùƯ¢­/nÞY}Q0@úóÁ|J   ýEZÝ?÷ñEØø J”P Hø_þG_å–þø'*v¿ðÔÓWßzÔÀL +èôèéºßÅ{µ°ˆm:ƒ½º> îiåˆYG"„ +ÕÿttÍ©d êzæç £ØSeœ¢½° +d¸ëºÀÈg[]Ç·¨•›!¾¿:@P- ÷7Àâ-šâ}*²Âø +\ÅšÀ4-×u¸­·½~{z–Jˆ¨ç û&²’Á‘†#š õd;ãº=uŸR ˜¹á@˘( fš h·ò: ùòݹìaé¢Éç¨än/„„m/Ñ Ì±öÐÈ;ªfn¼¿Æ›5=½òÖþ 54RAšØPÑ­qA€€¯ä» +ªÛ:T©Ï.^ÿ›ËZ€p —)1‘¢Wªh,QQ†5¬L­L—ƒíB™’þâTM%ìÃÎFuýÝaúú6šrë·[³HʸQ?…ëünh3ø1#ŸÒжÒüZ°O+ÕDðÕfrœ½¤$XúWÊuÇõsŽ #•²ŒÎ"~Y( ¬Ú ?gí];ëH.ŠŒ¸Þ6ÁW„(–þÌ %m|„.Ù¡Š²|68ëH€WTTÃKk“!R%بjw„ýÆýÆF³uíZbþo9]tªn7Á¬Y:—,rE•nÝDðí?½yc5f r™§$e=ÞüÜß¾È,úA ¼ñú­’‘œ?Ãodp{Ùxéi_zÖé§šÖL³¨V1÷ jlÿò‘©ÎVd)™õÓÖ¡êt;5&Ô\¸Ïïн­ ÄÏ/­Ðà,l5; ðkï¹Õc&\zþQý‚ 2gbiiæ•oÝ8·t¤ÿµåë3 }§aÙõSppéù3+Ë„ét±Òßó‚……êµk·@úƒùíÚ ++€­Mœ€ö½h²þÎùå·ÖÇ¿ôœ±ò>š ŸªØ›ÉDæ?ìAܹƒçpþìÂÚí¦J¥ +ËË+pvƒA|óÝÆ¼ åvßÉ P/Ðuü<º´dX#yã’‘ä?jµZ0!öIÿ Oa5ÎüÉ…ù_ø +ê€g¿`šø+/þ;?ÃïÛö·n­€ùϯÀÁ:Ýü‹ÏâsŸŸO5Äüâ4}Ì¥±šÑÏI*„Z2*Þ»ëÙ~à‚Ù¤§¥%L†#¨&AžáÀu¬|ß1D8~šR +£v^è3… é/°t*ùÓÔôH-,‘TGE×q9Ì:ÔHšÿdûkÓÓU×É~8Ÿ˜ÌöëXœ*i•x´’'ÏÊÓüS¦êåÜ¿MËPs’ —ÆÜ¿ûî¡|C°=²Þj˜€ Œ4€"Ñæ*dã+ÕÓ§ÝMÛGaªâ¥ôß3Ìé„ä·xö"*€L7]…û`[å +—Á7qÐ_R•6®°¢"#J¥‚Z0M|x€@¢Pô\k1{z:;ˆƒI>¾ôÙsBŠì”(»Qv;¹?M¯c{½žËlV –¯›ø@5—+•)ò–òÒßu¦ÐYª“/‡é<‹ûçCÇöÅcéåÜwÀ|»ôœ%ƨAÞfB/ éû*á ²áŸ‡OYÏ&?÷!gcû’@é¶1]Åé¶ÿ9Ú7[mP‚¢@³$¥^Wßo._[©Ö* :Ó[µÙàu DÚSF•SædÃë™)‹ˆHQq²Ñ¸ìSÙ`g¹®#SåÒáÆÝvýD¶×^[™&“äã¹óOl|Ðóÿó?ý…׿» +¢ÿÒs—VÞY)™ˆþ»mØ—N¶7orùíuq6©,|d®j·<Р Z¤ ¦i¿ÑBóœV¿/Rñ¯ÍNC"dÁü©íŸ?˜§|ïô±2l `_;RÛ[|x'©7–r*ª9yÕÅø”×In®u¤|g¢Y³,Ëq¸‹Þ‡.¨2J¨vhÒ¹Är}~± j¹)cý°G=ôAÏå¸$¼_µªÈ÷ÓëÂF篦4Æ"ˆ£`'ªN•§”5ÊÁzöÊQÅ+Œ—0«GÔ®‰˜†ADÍ·Al¦v®g{!k¯ç)2WX#Å cy/Ò²&—¢Âf‘1¡­“’˜:jhã’i–«SÓ×ÞÆ–ŽÙ…Êʵ›•™©¥…ºÛIMÂfG-Î0­• X`Ø¿þ:žyæ‰Ûï¯Ã&HU L奥9µ¤²ÆX_Ä})qEûI™/"¨a¡€ì©à–-=Y·& tÃ쉺ªéž¾£‘uÌôË|ÓdIÑ©=Ñ‹‘ŠGêõ½¸Q¡<®c¬(Üö»ØŽ«è¥¸µø+¢ï«ªÉqön·­OJ§çNhàaíTMº;ISÚø«V¥j‚äfû2wEùݨlêe³¾òn£|³Q!Åpí*Ì„j§`g±a•T›w +j4–åÂA‚;ŸÿÉçR(CkõƵ_û¯¾Z>¬ÿÉï¿lÌ%Vw;Ä™~橮 h¬Ù ~J ÅЬ1Èúñ( ÀT¦%7nûkÝå*y37«º¡ˆ Ó˜=©x»-ÅŒëfuõö›ú}¡6× œ…3s¢ ÙÛ[õ£ zÁÂ㉨úÜ gÀ-«XÖÑŠåØÞ©zL—F£5÷ñŠT”@Ð/,VÁà[ߺ{þü·»*UóˆÎÆÓÒ¹ÓAÖN”U‰"ç뫬¶–~XƒZ†‹dBÂÉI±Y2Ü.±0×&!ëÅc‰fS5ussÃàVŽ£>H2qÞb[*£™hJou½ÙQÉuÝÂ^¬*R¥I¹‹Þ` )ká®O}yTÖŒ”Š +aÃaǾAªãººÌ=Q±[( +¤½ÁųŸ2&ËÕé ïÁ”VdðàYOÔ›”£,+Ýí-¦&ä …®[æd=‹p`½_±y«§†‹ï»ª¤²‹ŒÖ …7Å¡ù¹C¥¨n +L])õHúÁJ/(…ˆÖ#2^ ›2èJA-ª±¤‰V’ì¾$4é~G¡‚xà *B[Šc ä€*7Þ[…i¼E²¸ycíÂá¥Î–«Oš …°¬£P("wŠ4é?H; 8p¬âî2sý¦‰X»Õ»¾aåéZ§Ý„JV’ë÷hêTfBB’”©ªêåcÿÂ99˜î|t¯@•ú„§kIšˆ˜íæ]ÿ>ÈsÏ~öÀOåÄ3Þøã?ë)]-¿†Çý‹ÂûÙó€=ÌéA4ˆzÔD‰ôDšhßÇ«»ô\bÜ-rªÕáå b5+8Ë}PäDa8áÆ®ê1 ¶å·5*€æ”Ÿf!cÒâ5Rn#¦?(i‰di¡ÏÆqêòAúÝ CbÚá\²G (ÁüÏöí´“ˆrðõ#–m» ú7>8¸:ùáѼÓü¹ÿ§ÑHÇ•¿¼üktpæ“O½ô[¿óã¨Æí¶ê‰á1Ò :`X’ää3vÏCJHÖ@`f«´Rax´Kî¼KZ$Ã%L®`ä Ø”¡”d"̇‡®¤£ðÐu³ô×uSÄ !L/ì©ú°¢ $gÈœ‘ãÈ: ¢Ÿ1AÁDǹúaõ˜w¼œn `Ña m®½3kr ßaìÏ=”°u2f O~‘Öaó$2PL¸é˜Ç÷+XßÛû27L-Ö©êÌáã7>HX“`ïÃI ¢Ÿ¥?ðz½ƒÍ|>ëd]ü9Ún­ÆíÝÕ ª(+ËW |ý€D=ô{µ;·› ´aAî_ÃâÁt®änzöÄÒÓIÖ»D>ì°ô‹ž¤9è““Ÿ‹QÐlû¯¯HÏõìZm¿ôçóQ.g¹$ò˜-rîÔ]zrXšW©T.U.Ùv¢Z¸¥@Où¿X¬³è—rœXañ_ù#H€ú£‡4¶Ü<ÁÒŸå>›ÿ õÆ­oü[û¹Mcð‡D€”ƒ(ßxÐéŸç¤3—-!tÈ%÷ö™ÿ`ûó‹þåïa±oâòçã •R0DpÜœmæÒfªkÜ㸓B”TQŸ¨¿S|ø V6°g¬ÿl€¬S'q?H¹J¦î=¦¬¨×f· +,ENcÖŽ£å±±Ñ±?hp4A¡1H‘Hƒ?¬X”3Ö?¨0ÿ© + ¹¤¨÷J*¯"„n•¢”ã%ê{±`û3±0ÿ lÿü%°`ÿ8 +¤ÔöfÉΈťI<í òÀüß§DêäÉÝx "NˆQ }@6d ܨ~˜h\î#I³k1K‘Bü³@Ý#E>L·7c°ˆÓ`42›ú..üîļð4–¿¡rM¿¡ˆx“8â©I=‹åÛ= ûYÆè‹/ãìÜoi*b|ö{’Ð:vëöêÊÑé`® +,/ Ðô`Ò¿"­9t¥Eîx•cUØ«*(«M#84=ƒ=½ë`©ë‚.é^yÕÝlÁV9>K¸’ª9UµŽTuÓb–(êáÂR{ ù»UKQ¤ï_ývõÄ|}(™¦gª³õÙaÁv0ô.£ÄöZŒÜƒÄ­óªfDÜÚzh*ÉœPÕü Ú†%ƒ¥«Ä.[ƒ)¨cÝ=Å4Ç{1í{:=€ÚáU] ûÖ2äΘÀðΛ_ßÚj¨z%Œ\¤»+ðãP5T ”˜ë[$Yß E0Õ- +5X]]æTó °œ\ ç'Éðq}ôŠŠ4NÕ)ý Éñösã. ñ¬ÚP–MWͱ‚^2— +0Tþ¼´ ÔÏò2ªÏéiËóvâBLØ¡9¥2 µ¿këã•B!@ƪ~„¤~²*íIpÁ®'I=í+á6Ýlù¸ü­ëõ… +ܽ½Axw}½y{cá©G½½]?GÓ ²'4Äž +Æ=4PFщOÁ±ÔAº! "¯¶P*€D“{…­M÷ÖÚÝ Ïž‘¤éVûlð祧f_ùÖwøÜ¬É| ™»¶–HwïÆÙOâã‹ÃaJ0kÃãœ1ñÌ3Cfº+ß½ìô¸ÿöK?ÿ‚:ø]~ÝnßËÞ³rsØ›¥/¿r9ȵXæIHà¶_'ñ™¿uvÛ­õÎ¥®GZvŒ‹bð£Xæ»á‡ƒ]cX€"htE£€ <·½‰ qQÌ¢å Z÷Aš4ã½”p&Ç t5•£ÛQä±Vg-PIMJøÒKÑzaT2Aúw:¾“½.’,Kz¼±F@” X u§ãö¸X/GÐÕSÅgW™”ÜífWy!ÿåždPÙX6Tº-i$(Á(æø`Ý=ä4ˆ# …Û1븉—_¹J†pPÒ\þÎ˰ñù¿G6=æm·PG"Øi<È*Ç0ßi˜eXbaØ3žÔ“H‘Ô¬p{èÒñ•±ïHP*SAticTOî*Ÿ `žóHp<ÀbPŠ +R®Ž¡$†gFæÜ ÌsMâïKq€•r v$œy€-áC K‡$w+£0ƒDÆ! JߪS97.ȇŽÓò6äãÀÞ×\± çNA²r²ìB +AS­²†äºï&”Gmä‡Hÿl/0’sK|÷µ™S“—2Yºôï}Ñþ`€ª&ú4CF˯$LU©r]zæEP,Ô:)Ã0v Òû¹Ñ‰É¾µ‰ý +9IRõ#º­ÈñE>«\Y–ò(|¨æ$õǞ܈~u²Šøªf7°XÛwX¤(N×·J(ò`&_K ÀXß‚ÅHÂÛuñÄA3 Ó£\æbÄ2¡lûa‚𗲡qåîÃ'ÆHã =öžØ÷6ŽŸ¸žgÛôô~»&+ Ñ +à€ÚuôqK¤ă8k—5§tØþ ÿ"ÿp8)¸,JÜ€¢J!åN`ËTÖ5ªÖB?D A ž`FÊh!oÇv˜ÆsÏ= wë…çŸáÿŽÅÃç÷Óî¤ï}ÿì™…·®¯Âö?ÿ‹ÿúÂÅKÃóüh®‹¿øþþ—"Ú¿ô¥¯Àþóo˜µä:‡ Cðip@?2%Æü‘2r!› ¢3Œ޹8†TYZ¥@WF‰9ø–cz!é°0K`$R“öBô Jš·„<‚œc/˜¥6!¡8 sÈøôˆFi|~Åq]Æ5ÊTA¨!µ†Y¶¬² Ò?èEj:ÛK%µÛ¥5›ç¼Ü S“펯L2z(7Òaô7¦°ž0ƒ¶£s£ÜF ERÐ: è$R°wÁ(†!†qÈŸm~IùÑ€6v È&+ŒzʸÂHŽú2¦0–5<¹s)\š¢IòxúþÌz, ’Jè>— ô¤\+²»õvà %ôLmNo®%³ÈëbQ¤+Ž»ñqš'(˜qŒ ÿå +l,Œ êÁÎ ‰~3E#éO–>„÷PìLã]L#¯¼}ݾ·ܪzâôT¥6UÁDBêé/HîƒùÏoÓ-+ìõØ $ É!Lô‹´½žUøB§† ¶Po§Çj`ÛÛæ×Q¤ó ÃÜù’Íôiñ“½®'ö] ¨Öê×GîÕ¸l <°À2¥Â¼³ +KP]jÑd ÓjaEíÏìWb/Þ'ý§Ó0¼¬îäé0Ìá1œ_3ê5%˜ô -Z!û¾@ÅXD'@·|‘Äý]WG²!üž¨Ãóö© !·ýÈPú‡ ã0šÿü‹îCø·Ö$‡—åWÔ‹uM0ðšÿ}X©cÇDž^ÐÝí¹!¨Ô8ìlv§Ž˜óÕI$ãŸþ³_»zõ;ßüÖ_üöoücÕ;Éǭü¿ñ›¿÷+ÿùÏ¿q-ñnÿãÿì¿ûê?>ÿ÷òèå?bÀv7€ô×&TþÌô£c·¦Íb|Ó†pg½ü Dÿå-X˜„Ç@yú ý‚üëÐ~´îüp·ö댌î§v´ï¬˜ÿY”#«SÌ¿ÔwL0õ1¿ˆæàs¬“;|4d0ãÍjóúU´î[ w£×£¾ø8ƒ +8­å`;9UÚC¶»¼4ZQ’áI±paÝúÈ + 4>´ÁÙ`BvØàg/3™ÎæùGwÕÒÁ®XÆÈ—–q*e! ¥¥úò²`^Ì|œ¤?l¦RUdYˆš„)>”°m¬ÚK“(JóöÒ `éÏ¿Nì^ +Ë#ƒ£&aAÉ=‘Þ«(*Ñî^¢!ð,!¥½úŒåùÆk×çGyáÁüð¥_ù'¬²†?HÿsŸDý ¶öúö|þ/|í÷ëÀk32ØtÐý •Á`À¢ñÁrÍÃS¤ŠøþX¥…$ óžïX#*MI‘¬Ð#%v<…Œô°ïÁ¬Œ¶B†A†¡PrŠE킵ª`#ü—’g¹<ˆ6ÕÌa=\AÒ{iäÁ…ÅdÀ‰¿Ù6ÑÉ€[Ý€™:ìµ×mñ·_=u}—cÔÈ3u¸<;W‹©|û’¼(Ƥ[EHÑ ,nFã8êõ»¸Ø|ôšcÒI`y¹ìÂ+[,É'¨%V*Õ +ö>°ÅÐ n?ËE€†ªPñ\ŠF "èèL+…éð¬˜'ó¡æžÂçÞ{„d¬î±%0ˆâ~œëÁw0åãynÅzDõ×ð³x‡ÄŸfár0—æ¢P?,–ŽÕçâXyãéby$BVŠHö”p‘»Ž F¡-…ŒA¢àÙÅpà »ýMs +V> +.£¨3ŒG†îPÉ““§lÍa«ÂüBë]Ë<ó'ü¿ùW¾ôå_ùõ…§e|yùz£þìoþ«_{á……wß]…‘D"bª\\xaáëùzé/Ÿú?úßý—œgý1Á p[O·®æÒë¾Gd ÿÆlü\ïb¿HbZÁ8xžãm³FUí[}»ÛQÉÆZ»×klÁ3ô·d›Bº‚õ0 mÝÒÑ$FXýFfb–P‹ƒ‘AÖ=H5­Xâ*íÍ›üôˆ¶Å7|[<Âá$ë>LØF\^¯{‘gäBcJõ¨-‡’“Èâ‹…k*ðžq4Úñ@éh9X š£AP*€PÃñµ`ú{EÊÕüÊ­Þ®€(:T ="$ZøÑRƒ~óXäÅùÎ@¨EÈÌ×fàG¸(BèÀÐA.€è…z<òEãPõ䉹 v¬ûVçXóÌâüéá3­Yó åðœJ¼ðb✪±a“,E¹¦ùƒWÁ0FWx¶^@àºÆ„ñR„;žV4ø;•\žÒE‰UZ†Šuœñx´¹Õ¯”A7 ÀJ††úc”RBJµ‹vTÅuÁ´'gÍ8¿G†[òhùáÜ(ˆÅ‘[Ü<,*‡T»ã!”@ VÿiuéÂyw³Çó9OÇ‚ôc"‘²ËIéƒAg€ô‡cõh½wb†Wk²Ľ¿;œ´ß]ÞA[oÆô„ä¶·éUg ŽA3",ã4s/AFfŒ7 cÆózž/áKÑ>ÊÄÇÓð‚Hز¼Ýîmµa6›»!i}Àœ W屪Ê[=¯aYÎ Á–(•D>ä& x¿=tÓ^5a’‚Ñ£»3Ó2ç=ÛŸþ»¯}ãµ?ÿá?à?¿üË_¾˜Gƒä§o°úîêüÖÜþÁêŸý»ß?ð ÿm úAüè÷¤ìF¨¶îúfAÞ8hƒ5 jÄ~‡bØHý0p8.”d<ß%²÷„‘‚ƒ9ÕÉläðü™K"eþZä…'yû2çj R*•+Ä(&9E ±¹)ª^á$¤ÌöôßsKU•Q~úN ÉãÈ#dÓP×ó,ý÷|V£ 9O4ÁeK {|òÚkµªmLô(·ˆ†‚E<×ÞÈöêçóœA¤ë¡F\¬±,(\;;¢€ûFiŽ ÑàOÁu†;x„K……cŠ¼ÈŸ¢¶?AÞÕóáØTŽÀׇi­S†`aËŽ\ Ò0aëßrè…íÕ2©§©d;ÜG«hÿ;…¿íÁ®MKlêÑÆ¶m_ùÎ%Ð=Û6ɦF'àh]+WªOÈ~ë>ÕÔ³ =FLƒ@Ïö qÄÕ@·‘çš÷˜ºõŒ’Áeá@|üÈNS‡žP•KÔß’åç(ˆþ<µ-‰$«Ì3ñŒˆ½Ã1¿0¿òæ7šokKç.´ÌÍ(?q-é¹'ÀñðWÖ©šþÖû0ˬN>w"ýªÖ© µí +v¨(Cc—Ä*¸(ºšG@+­Q7A`ÁÔ®äjµJMäI™lÅÒ±uv78H’ à‘D¢8‹h<ï¾ssýNïK¿t®sl‹ ’”è€ôEôOÁ4ÛrÃñCUSg`TñærûÜg¬jÝêuÝkýåN§{öX‚Æl®ì|p˜{ ‚0¤ù€(ÿà«Qù–ï8NÊÃC÷aÏÛAóŽLÃÒ*&Àá´¹Êmÿö…WÁ9÷‰ôÏwHîŸ~}þ)t o ôú_¿vé¯çA|ñÕ‹â1Ûµï_yÜá7üûïþò¯þ[½p@Ð,>å Q7¼Ià jæâbíò›2BÅÊ[~œOÜù…̺~$’œ0k‚ô¤BóßË̳l‚FécN+,¼ˆ’7b-Žò³\ËOð¸@êO‰í©y5©Â M.¨¹'ØI­ +0Ø–þ ¥¶¿À©ˆröI‰# j -~§2€<Á-ˆ•ñe ˜UærÏ´‘;½ .J»Ã`Tغc¢`%ýöƒÍÚ‘™ä¡¼þ…Ï%iÎå¢ ¬ ô¹î@I,«î«â@B¥šq¤÷ΣÄ9s%‡ÕŸˆ¦úœ§$5PÓö•×󥆤Rä‘nßi˜ªä=7BÚÎêˆ~~eóж™#ÓÌdAÁ&íÝ[OŸýߕ٢0‹È‘îQ4‚« #³€`™!z¬з¤‘Ô¨QÈA®Ä]Æ+ƒÍqˆ'(?'§ç¤^ÙO`Q1© +AIìüP²Û$Û†&þäÖlܽ“Û’ï5Ð"TöšOÖ:wmðàä»ß~›ß³v«»ö:ˆþÖÓµ×ÿ +ûÈM³Þ´fgËð$°=ŠãN‰¦Ó­ÑNRY\O˜Ârôz=—uˆ~<šz­ÞÛtwÀïÙ¸P‡ñ'À €“æñ*ìÙ÷pYѨ‘ª6@ϹÅÎö%'¶›ÿ,Ñì¾ÇÒß(jç>ƒ¡¿Þ†:`¶y@x~w0ðàS$Ì®,ÖÓØF¨jhã[?bÖ*&+ËE?È/$U§&—Çyû7ýÿ9Û/ÿÊï~ãÕ‹ÿóÿøÛ}¤²°ýøùý/Êþê¿ð¸ÿÝS@±3Êe»Û¹ìîµ[¥@Vªë±G8Y·,ñ¹˜ŠÿäWìž“vé§n‰l²"3EŸ\ è˜P°æ<À—yóCØ(ü…ðåÙµÏTþpÀü +ý+—W­Ãå÷WVApH–Àqʪ¦PÜŸ)éed_c9HرÚ ÇL^¯bAØÇ~x¬¥dñ†ÐŸ›O=€/~~w’_’qG¯Iö~086TÓä9F½0jG®f‰žúÔƒ¹{TfãW o`/ÿÓM±{‹(ÇÇøCìx±b“U­™~ nsÝÈ4Õ uˆ 7 ¸ÃÌsÆ«Çë é‰Àj ŒÃT¸›»æ7ë +|ǬØvGa7jÛ‹rˆK7B®X…Àе¶œiÖtÉ©Â@LQÈyЕ­ª0ŽEéyµ*_tŽ$À'Mª0‹GÞ¤n'Ê-õRD ë#U€°*e ÙtG"'Ü­<ïÜxãZ*G1¸  L9­à4½>w„Á Ór) $Ãp8ĺ܂®ák±^ë±”"8h=ËËCíý˜Ùh5ç"WM ”¥V©˜Sjd=-ݵ›Ëÿ-8-(þ²É+g m·;Tàt²ÖQa\¿çrì¯kוµ.ÆÊ*Å=…Ûù¨Ûþ@47Z¿òY±ãÄÀŽª‡ öÖqªa>…V_áIωY0SÀØîG¸zCÇì"»HÃ2µºiÂÕ¾Ñu»÷œzËj±Ö7z¦U +ü £dU-ÒWæÈÊZ›{zIQ‹w7„Ñ–°€0§ãœˆÆ}Š:CÑJEÃõzzÑ…¶ +>õþC‰éq>ßYmןDMáÖ?¬nn’4$Ì+cÄdUõVNƒÕd'`7Œš`g2Â<òt]«&‘¡èÜåI³¼z¤Ú˜­ýÐ)1É(”ÌiB'cnOçF ¤ú[¸ÂæfÕ£ XŸÀõà7'=þ¬Xˆ¯þß_ÿÖ—ºí+É‚œïw:Ý…gÎÀñôsÏ£Ó±õ7ÿൿzíÔ38mŠÕªdÙq¨¿dZ˜Ó’)?èûçÓHÆ£(ynß?ù“§Oœûîß½Ózª–ª˜Ã2˜Ð͇ãöèÞg™Ž·¬tëWônW +>¤©ça`¹€({ +ÎÒ¼ZÒ¼¡§j ÆéQxº#Å:¼_óËIOÕçÑÝB²{…£OMúB¢@å*êx”0ES}íì5¾˜p;'Ì^ìð**ºeÈ^6¸Èf¼@Ѓ¾Ñ 䤈<ð×Ñ!Á SƒÅ–‹½¨P'š‚3MŒß¡ =‡l€ã9ü 4# +¢6£\~ó å ŸÂ>ƒbŒyf§ä ¬'”Æ$ª%éá -”'¬LlË¥€5²0Át <*ß`Pdªßáù•¿øÓ§?çï¼÷Ž>mêz©j頒㨤¶üyNÀ|òœÿz¤çs +ü÷W¶FÉ€7h¹™ê‘öoGN­1?èoF^ÏÝdµükzb"2g¢¾mÛ`B”­JÏöœ @J¡eF'MõI–ÿ4]g·ƒÖýF§ãtØÌßåkcD…IÌI«°ôÏ«y,æòà ÚpÄä®m=]¤ý½CÁ³ >ˆþ´ÓŒŒ÷%u¥þΰTÄ fŠ£šR IDATªH.eƒ©ÜhµàèØ6L”Ðóâ¤Ú§¬Õ]õX਒€=å •®$%å¨Hú4›-PÙx7²ŒZÓÚ»´{ý•›IdsZ¯6ì‡ÞÊm»JÝ+½G^¬lò®!Ô-ÞïÙ—q› W\àûz ì+fªCu%Mƒ&iM–Z +µfŒtÝ]ÀÞo¶¢îA`o¸Tñ&Å +—‡6ëÕõ”c€Lú,DQO!¯ù ôz“ ¡·M¬‚½ £@Ô±L¥ ;žU©±¿¢Ÿ«ƒ@ô‡IÙ\wÝA€3çÑV¿·Ù;ÿÒ9ya”!ˆ¤Uqêù²• $Tu wÉL€ìš¦ÍÍT+-_]ç…˜ŠÈ‡›£ü–2™õS6”ÝÖ;6HÿÇý¯±/øó¸­Vk.,LfZ‚7®˜é^TÀ‘–4 JÔ)Ê®iºL‡˜6@´K¹÷%%ð`›F'”öö@$…Nh€\&dPwˆÈÁRgÞE’HH„éȆ!4EÕ´ÊÔ%)®ÙÝ|àîxÛÒÝg3ŽÜЀ(it×ÃEç¡1Ý1¢ ÏjP~ZA„©a‹•wW_XL¿ÿÍø^zeÏN8 zŽˆ¥#뛱Εbò-ôå|ÓH©‡œzX¶Œ×o»s³-þpü«¿¯üÍkNwçãNºœ-æf5¨Œ•˜q5*BI£BLr-BñEÒ—P¡ÊÉ>!¡éII«®qò²eTLµÓ&¼¬™j-Pf–tN’«?@x×î u™-5NzàŒ¤qœƒ+Ö’†µ¤J˜*,S(h£”𮸛_UU«d:¾ËšV¾Aˆ«Î °*àõ+ÝE1T€ôóŸ~+æ¹ÎŠ:àèØDlþóû‡Éu³íƒæW”#áÔ—r„×›ÿ!r¶$Ò?³¹Ý úÁ{;hÇá­»“ 9È}‘€¯ž"ÜÚ^Åëõ=ï18wÁv¢û•}_Œ#°úY²è·Ê /‡,$æúÀ lØW–Û­Cuf†£š-êÇâèQ:w]ª7% ŸùøRã‰F£»á>Ü þ,Í„£ûœŒá[* @úû™LW¶BÔÀÒ¹VcÖZ8æŸ9•ò\c4 Ó–`øf5'¹eX¤´9)}"Ò$ HôëI¿aéÜd‘?nÃýŒ5ðÒ¹¥Ö‰Vûv»•Pì‘þáÔ{àŒî—þÞcMÎ~bñÕŸ}5ÕªŒ_S‘›:ùéÓ§'a(Øú( é€G¾òƒ6xü§iM<ΔT0÷“K$öIüd4qj‚9êùŠ'dËXô™/`[)Q=”Œ`¹¾§P0Jÿ(3„«}àqÀ¨t7ÂÆƒž èiînáIEÎ¥HÖUMC‘¸iEÓîö.~-€KÝ« ÷o¼×®Ö¬™#¦³9H«9ÁüéÏN7âqÿ#LjXú§Ý¦¡2êšJ¨™*†nP vÔ¯VŠÀ¼R/¾r‘ s`ÑÿÒO ˜‡Ÿòy€šL¢ÑòɳôÇ”([áê%N ûÐ줓±IúóŠ›#â>f7cª +€n6hP×7H?i”î ²zšbá:+FëÃv„Àœi¸;ÝÕ•+Í'eá;Èý ‚åN¹­á¡…£ëÈ% jÀ¦¸© ¦P dұрµ×ïtnbÒiýæªÒ¤ÙòúŽQ±¬ªQo6Mæùй/©M¹²ž{AS\A]F¤°¾®(R’¦ž¨‡”ÀÚø+õð~hÍÀ1mh‚“R1QmåÐäócU”©÷/döËrô"%g¯* âéïÜ» ;HÿÔü·zÛ•Õ6x뵪|}íþ¤ŠãêJœ€je’e?ÉQÛ8†ì ô'ž©1V²F’!KÓRo '](¬Ð7TÕ&:gŒË9Aß #ÆÞ×sñ3KÁcˆ)8ãÄ1_–þ©4ìv7Oì-X2¦vM–¼pU°xØö/ >I[ 7¯ï.¿ÓdñƒH¿Ô€¢+†!s7Iyé¼ÄÓÁšiàÀƬ#«JO”ßþV2‰»þäbvÛ¿ÍÍ6ZO¡§ø^ÔäÉ †°ÿ‹_ú¹ýŸµ©aþ_ü—³ñÞ8ø“n ý%os²ÕªÖéíÊC¤: UµšÈz»ÞL%ÿ\–Ãl9 Ómàà‰ /‰ž Á0*¤0jFy]ú P¿#p@  %Ëèoìù¨Pà1Ø¡RÍÌ œ•0ßI©÷°Ÿ–!¨¬€äFK²iìî$ ÍÒ4ÏvoÁ®”dN^©³ûA.¸‹¬Àüw©«‹5’qÐÁöW dþ“Aílùl³§Ò¶Ëo¾!H ýÒ6ÑûJq¢h¹þ‡u€–ýÔ€¨až€~šÖfLüŠü¿Û¸pîâå«—¾A¶?ovÏ©%e{ŽùÒ=€BÀ¹ô”-\$Ò?õÔ´|÷­ sñÛÁp=)Q =ÚÁå¡iå~8Õw#=S*3‡ûÆá¼põ›_KÿÃwݹã­îGíÖÓ ÆLÕ˜6Ìø¢rEíÜ]/Wk¡WèŒH#åÙ7¡‰]ÒLáºà…-?â0Y£Œáná³Á‘Ìçƒp¤*y/¯ò¤©ù[·te”¯y×áü‰jLQo|Êf‹ÆxÌçT u‚Ú)HÕbá‘éä,OI>qA±ºR¹¬äSWki±‚¥ )œǵ¡¢@ ×ÛàпóÁWøÝ+ïwá÷åÊÂñæêGEŒ.ÿ(™_$²o_ÅðÎÒü\›h¯­ŠÑs¼þ 0M¼C­ ÷Ñ“YÓfo¯øÙ…†óÀ×ózL]²9Åbü^Œƺ¢²93ÑÆáï\ fÈOϲZ>‚ßÉ¢S +Ía€Õ> èØÑA4 GùBžêb…Ì/å„Y©²ä3<ò÷¡o¯÷´ü”:¥™’ÝÁµZÑ«þŽŽ+ Tx4Áv\™Æþ!U-ÁMIn9ðÀsŠJ}$¼h€qo<×ñ˜×7Ö7ºݪU…Ýõ]l£B Ðkì´»à +œEj.Åðk„iù "êAÌÉ!Gë!%‰>»?²ë­ê½‡×¹ïá¿þõ=­Mܵl­v!?ÝNКm¶ & UÆç¸j1u¿øùÏNBÿɵê-1¼öú·×úÙOe….ž[øúñzà35¦­|«4òE‘”’#ËÿÉÿ‘¾ßóðKçæôµµ v$Ó—KÇåïÛ¥i=DÖ½wŸBcJ¶‘Vƒª’®ä”®)Ã#–DÍè +Dž~^“i‰«el¢‹ÇT* +WŽ1²l††\a» "ðª¶?< Ä¢ñѳYe•žö à”ÎÇA©H-¶"äíó%D( <ÿ +®ApŒ+ßY®ÖðÑh¥<R®Ó‡“`cÜ0‡y~fö6¾z˜ Sò¢L£4„ëшcíPúûr¸˜¥tbJ@ŠU·À7–ß[iÔj¥R#Ÿ‹á9ÂÑßê;›‘?P1i¤cÉ?Þ”>Éc#‚’ÌTð-RS®”ÈbƒýtácH &xÞUÚÀÏýÒÏÿÚ›ßÃ:àÅμyåLÝ>ñ‚èÁöiϘF ÔãPŒv)¤SÏ-œýÄcƒK¯ýí·^ýܧ÷¼øÙÏìå÷ÕB__~ž3H8ÞxCpsOkz¥ŒZ=º×ë•…ùªlâÍA›”¥™£m´QRŒ&AA† ê@b ²KÁÕ>Á‘D³œ °àÐ;§)ÄA6h”œäñK+û0’E¬ZÓÄYá<å½®ØX·üöjP…É)›~“­„=€…`8”GêÐDi˜Xß[ä1—&A¾/¬¨Q ùºinÖ^@ýϾ|±kÛ]£=ûcçÏþع½c÷„!^·ªFc¼*À¢Ã¤ ¼%KÖOä}£yÅyo&ç&&=‡%lL§øÒyœ—¯ àª6ü9cÊK ™‚îÖ)œp“Hæ?ì0ÿ¹‡Û lCOÈk ½PV“F8ôB¸P°fÊpÙ¥ÍMÇ{$/»K\ÚÀ®¼ƒP`Z¡µ '·»i3& Hÿìp€QpŠû„gêÇzݵj o<¿Ï\ð â!Vøp)g@~æa¢QDÉ.ÒŠhÊòQSö&˜; +¶!dµTd+8B*]:∣µ‚°ˆqËF™ +V€Î¢Ä“¥c†“C!ƒÉಀ' a÷.ÁªÉS|VeäîE¿ÛEi˜€°‰›7ºAà.PÓ/x+·eÍëÚ½^~ß¾‹ã{âÉš¢«íšÿ…)*e½O:€EgÃó9_8 „å…ž’Ëq`Ñ@¨Â­‚Gà³ V1¯Eóf‚ôçOULÌ€JÒ%:v–þ^3eéë'ÚIqeólû35¼réòе™ª òá0쀇.…H®ƒ#õFú0Ôjªqc®yØ6Ô2H8ýµëYDèn¥Ç® Ëõ& IÄgO¨Çú4iîZ>2ZrX «Nt@Ïîo>Ì?'1“çˆqåÙ…ÿ´ O‹öDO¤4^‰À¾ùÞê«¿ðsÍæ‘¥¿øË×ã·Nö+A:àu"pWж•JKd4Ë™¥#é9{¼ù‡qµ Øc,åòº÷ˆ·îþD™1ð¦bU~uhµ ²ù1„ÄŽ¤|@‚Ÿ #¦éYäG‚ÕÃþB‰'¡(œ[…CÄ%lRɧñ`'fÑÏõïàV‚ùÏÁË@ä+.aÀD4gø°GüŸ˜DrAúóÉBk–u@ªît7GatkÝ>™¡V7“ä-HÿA’]8Yï$ÁúSÏJiåeR©Z¢öãLu„¡Kée†Ã˜RkUc{2s$ñžGõ¬ª’ì)˜Ä? ØbÑ1M\¦I1ȶ7{µ#3Y`U&<µñHæ? ©¬* ‚à @yÛëxá®vVþËËËèd HAý¸<†›G`ƒaˆÁŸÈS“y€…ô»r’aÈèJ¨È3öP˜ ÜMµV¹ñ^§w¤|ç¶á§-VúpbBgñýõÂåÐjù—¾áNt€ éN@Bê €Ø·ôÿçÿÕ¯×ïÿ¹¥ +€·l¨ºÖP— 1Ì"-NfHqHã £ÞðàØwÜT0þ¡±ÞÅð,,¢«ƒÓi’ôÕ` «>Ìõµ|Xú †AX“å9>©ÐgÑÏïá¨ó ð6=¥ÃŽèÊ´t0æ#ò$MJ0buuŸçE¨ŠÙpõ…̬í +rI¦_–Þ+ë˜þˆ Œ£T n>X¢ÃÉ—ø#ö(–©n:QDP¦  à)¥ÁŸ´#UP0€¨1o'3ƒêwÃDtøEn´G±9Óð¨2hãC½`°ÃÀN-€ 0ë5ÌéZL¢³±ˆ3^Ÿn°ß‡ }‰ì™‹µúCªØG4 •Íy°Ç¥qÏÇèŽB¤Ì¡šƒö{‚䕎ð#ïÍpä5£®è‚ªûáÉB‰ó¨ÉãŒùjX©)B5, À­†0}ãU± ¹¨Š¡æBäF£ +%4Ï ÙaR*¯ v.)gàZe3Ócömãp‹~DÎÍׂÊU6ƒæ¨œ„#Xðš5c¼Í9Cÿ;Öœ™«WW>êmºýqAUÌZð =ch·?ħÂ]-öƒ¬4„e?àñœkT}LJÉQMX&È“R#LKÁ*s·‹ ªvA1Ö`w‡)|8= ϸü õ$e"• +Ü;6ÐŽc6…ÃQxîVÞ„[ËëN×QiN©•NïF³Z©LUÏÖŠ +A´çÈ« ¼À­Y-]Õã°Í¦ ÷TçGãr¡|ñRà ƒÖIKŸ^Ú ÜyØâòSôb^)Ok„61œ/ +ETó¨°7+eBφ¸R*ydˆª@‚Tº±aç_^ò\¯q¨nöõcóö½žþ$šH2Ý—õáNäû.!}ÎÝ`éŒî8qûÃȪ¤"F±¡ónÎÖ_ZjeÝç_ûÍß{ý[ß­¯†bqÉúoÿû?†ý­+XPx†ç1¤Æ¥~‘–Ïs]?1«†_¢‹{³&ù£Òé€éöšÓ»ï.~|>诵>y>JNo2‘\?`³Lxˆ(‚s˜‹PHqc¶A‰^|³QTÒúÚžÓ3Ë&‹Ä0‚%¯äX݃=„¸ º¡*#Ϙª-ÆhŸ©y~Q/`hZçæ<¤eùØPø'zÿ¡<¡̃Ô&òÈ2¼rl§DçÞ²ZÐoÞîTWªVy4Šàf1–/â¢1=$K§â@Éy‰ECÓÔ=¯2G&£P^7Š °¬‡#Ø-ðá2vÂñtU¬—‚¥Ó'»]»ÛY üøôâY8;…ù# ̰aUŠ’à„f¬OsOõéIxP¢.óLȆ‡¸Z'Ð!*(¢ì«#|0ªdK"‡1]{&ª·5Rrq 9àF#l{’ª”²’þHPXÌÐÉ™c•|yxn´¦äx>{&f¼Ð Þ2Ýï€ ÔMӾ綊MQÀÙ|A±¨ ;aÃüÉ­ ÙNÂ¥õôšÄ_þTJt/ˆ{˜V†Îw?$Ú(¸±’€l(ðR@¸GÏ- d&çR‡±€ÀH¡Þ?þ_¾Â/CôʉåÉð}Çz&œÂsÆògÕ$­‡têŒ0Á1+ú ­4±pAîû½©ôç]×5©füÆ +Úû³G­kï¶×ï;pÂo¸¼|€½ÑK»…ÓͦÒéF­²ô\sù=iVw6ö¶ær-[úªVJ}Æáe?[@©ÐT +†«E¨EÏËx[ZB¯e°íqk8uƒâZh‹E\gÉíš1#ƒ(‡põ­ëÕÃVÕ2{ +½¿ ¢@M7ô©d3"kþ†n²}§QÏ0[ðé{—¾y=…`\^nw7œ¥¥è€`LJ]‹Vž†É’ç²?…f ¥{GŒÒš^X£LŸJ—‰÷<­Ç0 XQvÛ®µÐ Ñ/>.jO qÇHnÏÎ3…=q¢j¢ !­€VK öm_üüEØSð_ÿöoü›ßÛóžZ]¿ôÍ®uäüŸýéïñg&ÑÿW^¹øÆ—JÅ] ¤zT½w?Vò‘>•ÜH’ÊUÕæ¬ÆìQ»‹ƒ¿òýý¾×:%“F`§3ƃR—CŽÌ‘ÍÔ QÂæS³]Yb‹•ÖTßɉÊÿ9K«IݼxœhœÆ*{°ÍïAJ©’Ê *,HUe8­ +ªÒL¦ÿÒ·QøþÆ{í"bë9ƒs?¶Ð#xp$rI’®,ýù$7žxÀ<“Ó¨&>Áa>uRh“R]‡XŠŸ©,X^΄€þñ»¿ñ¯þ»³?þÉJ&Áò¸ªB÷!¾yxæÀÿ}ÜFe¨ªZÝç‚ GNO„qcÀ6A³p €«R11qœÒM ë@ãöƒáÔÖ¢z®šPZfÅ5ŽÛ¯Î˜33Rjq¹×¸n,»äì.Z¸ +2¾&qäÄ7a{¿õâ…ôÏ,"˜³LæÍ1wË2ÇeÊ¡FÃ(³ôGXþÕøÃ:,ê ý&HLËoŽB’&À!| +“™x+8(äež4"· À§´$÷¦«UÖ³ßÏ?‘jûö%ïáØMØšRMp“$8‹þ/½B-S4WA¬môt*pdrß~è-ž¨Á öd¶f½V™6ú[ÞKŸ|nrº‰m àbŸE¿?j9%å;µ(ÝÄI68)[zV,/߬׫ӇxÜò¼6R7œLˆg:†ŽV^õðÁˆr¼pa†í„%JáF;¡QÚû~UµÒ¦˜[HŇ<3m{Ãi™“S½Xrû‡æÒâq P1ܸJ[~7, "ÀD€'ÀýM +)Bƒ3K¨ðORº,úEjû³È«\ŒGL¡²™íƒk=¥¶Új÷ètpá%n ýÿù/þf}ö€&2Ðý­à—¿ü»ßø™‹ øÅŸ"àïŒ@8„Ç}¦Ž·:€¹^?'€ñ½‰‡m2™ÁP2y2«ZX=¤° +,kPé€Éšl,mPš\…œih>ç\1È}†€ä +,1sƒÀaÞ˜¤ª!%&OæÖ r§j2Râ@ÄÜeÂïÁiFWÂa ì$êLBà †?x|+y† +ŽÇ轂ôÇ\èÄüGS&ÅÄçØH°(9?Ь$Kx –€Áýˆ-¡xd«Ÿ¢ â\(A2ŠÕWÖé4?²AžŒù/7VbÊA9N!$oJ2JýÆ0ìÀüƒµˆ‰¹|6Þ•4Û+qN‘ÙLA°@ @˜T§—§ª™)Åq‹hD*ímº©B6Þ³ƫ×h„E—¾Ä4›ÏxÂO1ž\SºÐ·H"‘S’Jcf_™@íK‹æb4‚#ܳ¿B’é!<±aœ±Ö'NsCk4‰Ñ6)¨à¥²€à!&€ …uOZƒ”ò¨¤”¬ôç¾3ÄGˆÁÁÊ Aà’÷ú©àrŠÝ“ÀŠ ‰L×¹mN8g“ +qî²ÉÊ (Pîô:ÅW9$ ù°HIË ÐÒ§º2¶ÇQ+Èr ''¸z-™•Øì}ˆ«~X\Z}`VW8$¿Ù0°\$D‚þadŒô\¢¦Ü €ÙcèŠz ¨5‡§ ”HµŒPÖë1ò "ÊX¥¨á$`Ý>«ÔU_W•xäÅðEo%ß„2â¢`&qlBȹ§”°'ÞYýÓ`ÓU)aȾÐòî Ú…l]7ßïp‘7x+´]K34~·?â<Œ>7Û\vîi5\ 1˜²~ IDAT–V^7¨Ð:;çß»ßî¾ú_^,YÖ÷Û"WBx#†I樣øˆë*°™…‘Ä©•a¦Aì‘Ôð +~DHGMÝyD5¯eÝš1,ba„Ї©L„”ŒÿÃÜŽGÁ([»×b ²»Žk«W¯"cÏÒ ‹àôô†µ£+Œ°'+yîÐÉsž…¦ü^ßÇáõ‡ncºî&³Z*¢ä‚Aë9§\ûï\üéßà«ÚíöjûÌÔ,õ k[Y»5J..¨—]‰Å¸Á«?óÉŸü©3ÿ×ÿóÿæ_ÿ¡½a·NâbJáCpT+qmÆC?_)ZÜWÿÏ×ÿîï¯ü/ôÛŸ~åÂ'_~å«ñÆÉ“8˜§ÊÍ&²,Sð(%Ÿçê½h;f‘MÅjžF¸w¿ß¢6fÞbŠ¥ ‘¬’RR§B (ôAúƒÂ B¤ÓõÈÍ´Ê úÛm»A*³JÍ,܉üM—\c`þsÄ OYf. ®N©Ž?:im/&’¢þ šÁÒŸªÑlÎ&ßÇ$Á œXFK‹Rs[<µ°A)bSÚ(ê†VŠóämì„ 8WƠͺºÛÃJ(˜½µ¶õ½~Ðpggªlþã/RÃèØ-³jZ†ëìZ§à›C¤?¿²ºzãkßtñå³`û r^ÿε?ø_¿Â:À¾/­ÀÚQiÙ€ùÿ ?’Æv[ÖÆC> +¥؃ȎfMÊJ6ê.¨Î›4A$oÌêPx,ñ8®Õ¬Úsí^Û²¬Ò”ÎAf-xT²Y«hX39ÄÌŒ•'º0J¥Ì×¢o;î6¾^™ÂÞ»ïÀÉùŸæþ©NŒÕ­JÅ…ÁíàpKa¡÷ ˆaIÁú¡Œ‡±N1Qä’â¼K 1lì \Ó2ãaä £Ò8+ õLU©¢¤ˆ,½A­Ñ°t½ä kgÀð‚p‹Šs-†Ûï<-§„‚¯A FŽB† Uºƒ’¿í[UkîÄÚvv½v>ŠvÑ·P­Eõ¸î¸2ÒË´™‚÷aNŒ§,œÖ>¦[Õ’ãÀ•‡ˆd7”øeàÀ…àG~ÜI AV! E…ì’ååÕêá–x[úÙ³gíGÄY#hš5 ³@±Ι&dy=ÔgŸ’á`žKsÇçhÜÅgžºqÓž?U™ÒêîÆZ£^ëRù²9SvÉÌ?ñìÜÆZ,kèöÉgð {]ûÔÒ"ø 7WÛç.,akŒ´N´–ßÂôRë™VûÝŽÐÃÖ|娩s!´ï½²…¿Þþ¨Ó¨WЦxK/ž~{Ëm.Í]½Œúbé\µýö;Ús§ªµê•ºzÞD,‡wn]=ó±…¾ëu>²…ÖZ»Eµ‹z£÷À‰w‚J<1°«Ú?tÁi¶¢8hÀ}.´æ_Pž qLJãÊw.EAô©—Ï:V}V$#·¼Þ^œo]~sùæ‡ë/<²h[õ*Ú“ Ã$%WÈH0Bs1[ßAÈ(§ +*ú4¾9æuÂê$Ù5"tŠÇÒ«Ñt”I€ˆÅXíIß k“aïbŽu—° –Ë{`C‡ìE +7cêjÞ‡©¬€ðD/?ð#+€7û;q÷‡÷K ´†üÜa-Ë<êŽÑ ]q ™ØR>E±{óåϱ®®Ž|Š,¡fCùºV +B?ÅÔ‡{Qhì69þ#ˆ³WbLÙNF+¨E^â2%͹ßOðÇBK$S¢qâ^d}áÈC¢?(÷Ýκþ$¥ïöu$2@Œo°¸´±Ì õ2 ¢,úO>3'/¶Á\ÃZë:i'ðã¶Ö¬YŸ±n~d÷\¯jˆfãö]*É*¤¨½%UbrômI‡j@lMŒm‚=155–A8NßÚÇIÀJÿ|ŽüÉBÕKj“ ÏQ.’Õ;IXÂ~à‚àsî0`AÃGý#`'è>D‘&¸„4³±¶?tÀý{ó™4Àã6TQE*ÐÌqUzÁz†îNŒ£‰ËÈ™.yÅ +«uĘÊ|á±ã“XVHØŠ"‰ªñ†UãQHF7ÿ)ß ³+Â:+klWaðápm퀚«î:BýÉÒž×YôËL‚¨°p;JÛYØêçèZHÒT+I3ùɧZ°÷Ï.57+feõŸV_<»˶‹/ŸY}¯íØÎ™—Ï\ÿÊÙ…¥Öêr»bÕzeùívëŽFûÆÚ¢˜·»›ö½ÞéOœ¾qC%çÏ¿ö=¯`ûí¯^?yâ$ˆþ^σ=Îʻˋ/,Ù÷7îtºŸûÌE¬¢Ù°/¾r®M%mKµ +È}Pðý s©ÞWô6lÜÈœ Æ¶pF™Td KØ<*=ÔK—/-.,ÂÎ3¨u\ÀÒ¨Q(XîpF=¨ [±`=Î?‡É<9A'N¯jUûÖ_øX NZ‹¨„¼GAíI+Þ +¼­€¯* +üÖÓ&XiæleueñÙE°/SïöÛß¹vâøÁsun®17·qgmcnÎ25`ç×½-¸kši,!A¦Ã‚g + ÃíÌ=Ÿ`]–N±T‹÷Ê[n&éhØœÐÃ:! “åþDð˜8Nù¼~ÔÙ²—žG‘e2´Ò„fŒ­ žr…6–˜˜o,¨UŒaJIH^M!|…™z­¤bA'-]µ¸K¬cø>ÌTÞ®'yöê¹àšÈC4ØÓP.)9YÃ@òlH¥ý2™p?HÐ(ê½P,ýS'ŠR +ú}ag]gC5Lð("Ïê.™…cÁXã$ r÷‚@ôƒ€Îßü~ÔÀÜæÍ›k`þË K2x°¤k3F{}O»‡iÒSÇk z4SM³;œ,.M"->¡&èÅŠUž ´³|Xá.ñÀCÄWœM¹´XúÃYpôé™#¸´z›ý„z[DXìtS“nšQRÅÒuö¨Éeñ¹–}Ÿ ¦ãºµIèƒXOcƒ JÅRͲ²³tµ®¡ËÔ*èŒ^˜\T½ž{ãfûü¹%z§_3-j$ö ƒ‹I]‡ /¡%ñ©Ê(ö8U4 I2ó‰@É3J~êÀ 'ó´É:Á¶(êbרʰX|Ì%†ô_ŒÑ¤—tP½ ¤¿`50«ŠŸ îÜ ÅH_ûåþÜq=¹јÕÍ~¶õ”{pï/Ç¿ÀHj¯fŒmÄú€u@³Y³íÉ÷TÌÊžmU³@À‘aB* |KÓlþײ¡©Z•Þ@“¨:׉®™ñÜΟkqª¤?~ähŒnýøU50ÿ[ç“¥Q²€ô‡žQ§hVƒ¼>µÐBÙ}Īi`¬¸ÌµÒߢÄœ´N5/^8˜]§vdWIu÷Ÿ›zóOI€–™ÃÕ˜ëú»³» o D0‘=fzP}™ì]&W–¿Ç'·îÈÌóÚ8hZ¹ºYð8 LÃ?µ:€Õ€1=1JñMž˜(ú¥¨ãbŽ›½ø…mÒ[y²v1x‘ÌÎ){çèÎŒFJ²®­#ºu¸Âajóad¼ºY=Î]ÃÃ5ÂÜ´5Mþ$ÔN¢u‚ƳÊ:ÓöSºA!ûˆ`%s0|ŸÓLê¢Â@ËO vF±çßfÛ?HŸ|ô>ò˲W•V"g·†l¯ ¶Œ¸‰# +Ó2!Ö +è3rÍà'Š0Ø\ÓU\‰w0þÃ,w•²™ué€OýìKo~ÿÖÚ=w­á‚€O4W(Þ„À¹_«Dõ±èóŽl½¶?Ÿ´\KP™jZŒ¯\Ò 5œÜl(ËÅ$³ëeÍNÕò F{3¤Û ›™‹ÃšÖ‰ u‰˾ +,ÒŪPÁõY©í¥ŸTAÀɨ¤i˜´DÁßñ'™ö ÀÜL !ë ö’nÕªÉÒß“<8Ù$•¶…ŽÑ̈Ü9,™yÎz!Ò}¢-~ôælÉkcÞ¡,‡8 ˆ}NÀb°(žãôPª6ïít››Sa“éòwð ^¶ºbùªÒv1FÑÿ¸ËÐu <€´—EHV©¼È´2pt¸?` Acõƒ¶ã`ûó74•OàyÁ®š8mæ–,HÃ&µCƒãȈ~>™©Röæê¡]u_i–ø?ãü*óWëµEŠzI¶_P7¨ÀI ¯ä[/à•· »ÆÞ´k„?æºÏŸìÛfŽT{Îda‚ªcé:oxÖ»v×cj\ØÀö_Là/%ƒ,©p¸˜{Ý™xöÁÖ^ßî€ ¬ix|ººçe™"Μð–šbj—Dž¢’O„»Šl¬©:صq6{Œ-“ã®ìôOd™÷<‹Z1@ ´×î,.IÜâTúÔ+ÄØÔ64\QÀ}¶*Z÷`«#)/„Š¡(>‡ æï&NU㕃†áVLÿÂ;Çcn®ƒµ†È?qlê%„u;Á0‡º^À"'†0ÌÏg"|Ú*§øØt +¶Ýj±´ùÐ-¤Bˆ nÄýAåð^žn•²:*éº(i³{§ôœ¹c­KõÕÖ3‹­…Å.ÙÑú¡YD4"î>8º®Dã„–a¥Ã5ðAë© B€Eçã6g/<­áá8ʬõ Ôƒ,ë¤õ#5·ª©SßçRSÜiñ€Å ·Ìñ‘ï6ÕXêîjN. Îä •C•í­]æ HÿþÃë€~ØKªÕÞ½õ^·sêãgáÄ^_;ó_\Ð8†6Hå(+ú‘I°/©)¹8h›£ª8‚ôã?^æߤR³—žkÁI5ÃÙs›w=qWœzÒRMcµõdíUÎxzöì¹Åæ¬ÝY·›³5ô=*Èk>Yyýõå §^—³=­­cwlʾçV›»Œ„NÇ.W0vÜ÷™ª—KŒ‘ DHV\\yÆKˆ»>ª¦ V[j¸Ù>è>÷|¿Vµ¼í€¥?Ý ,¹~r¥o蕚Õ$@/Níõ‹AúwîuÏ~| N¸ +Hpäg( "y'7sØ7m2¢H8§‚”‹•)2 +“6ÔýsH)Ì8Jj'î£!¸‚ŠªçQ¾“«÷… 6„Ê +\´ú¸ß2«CiP“s<²­£'—IÚŒ¼*3=yþsL«|hóhsv6•þ‚ø×Òs¦a‘'É:æ¬Iʦ)r2>Éá&^ùð'Œ¨çóÅà1ãi%ÕhØú+5°ú‹¾Ö¥ÀßW¬€ÒÞîÒµ)mÃØøä¤?-È}æÉ¢“  c92d”Ê‚Ó4$?¾´Ô&ðÖV ®…eª>ö6†Fû³S®ëpÄKº’iéZ^Y9óü¢Ndv¥âÁ1ófãÖ™xŸ›Û›!ð¶½ìÌQ +{E•¹1aâ^W]+€ðamÆgZ”*ÂM™ +qÖÅL,Ê9K~s¶fŒ7†èºD‘ÕFËeÛrÙ6Ꙫ-²_} WÁ±a‡«ëµ ÿAúƒ†p4è »×¢ýy 1Ê\[œçVuÖÉòEÔœŠžÎ!ö¸«›é_JD2b(€ÍîúLC‚aè8›ekfõ­+•CÕru¦só†85!f©>1 +€¥ÿõ¿¿T"[¤?x ¤JÕAï÷µ#Ä1ùtè…¤m}’‹IÿW.¾š@ôÿí_¸ø‡~iùftÀ©Í›·;çÑçEÀcˆ ûpdÛìnòÂ4p[*ýƒO#Ë‚M*ÌQÓŠéÃÂæÿCü­2VŽ'^E!AŽ£[V`ŒÔ™‰­ÝƒKŠQÌÙ¶óöRâ/–(ªãûñEúz"~pwýA§f4©¥2èX¸ûÞg_Å ïò÷ñÍ ú;:;‚’÷§Î¯<,+Ð UÉæx0T‚ó8å·]—±Ž<|ìÅ©}àê¾6ô¸ íÈG €¦=Þ‰/X©j‚GÆÕ¢DoÇ®‰:>ŠIxjzèvpÝ:vÖîØK‰Œ¦ø²š°aó+Rb&9°(¥7à pÈ1ºdÅÁ„_ýÁªëv@ôóÛî®o>91ö  IDAT+#9`û‡‘¶?ÚdC? r²$5ü™^é SÁœÖ)¥”ÏàËS….„ߟåf€¥áºˆÎÄ’9œ%|‡Ó¡àJß³ü´*¥ùEé_åpU©#;YNà,SLËSd,LˆüP¶Žã‚ €À“^0ÿ“oês4 ¼ H¿y½ëTÊRe‚è_Z”! =!4]8ulõæÚÏ}žj=3,r'1íwùÍkÇæfûŽ]±&k6µräœêô%«Áp–Ü/úñ‚Éü÷é˜Ú.øDvƒ*“€G<9²ÈØéüO…gúqÝP»m·RÑjµZ»Ý†g×µ{õ$Èó3O…I‰ˆ¼è<·qq± £Ê+H ±±…GÅþ^e,ó< òy5kBñ-Pqg‡’` ’ûHÀñë¬÷ˆT$ÃfµæÜlgmöc­c7–1ézþ3?wý;¯ÃIóÄ|çödÈ@0ÿÎÕ{Åóƒ>Åc-š³ ¨zRˆo§rŸáé€]zÙ´:µÛ?Žý›ß[aW€¥?ˆ~‘ø£@ø=§/šSøgeﳿýC[‡Mš lT™³@‘æR°˜²ƒÊx\*楻CŒ§*©œA­r˜Ø:–Û Ô%”…§v¸f6ZAÀ\fJiZq\糟õúýÉWþúò§?}±×ÇÜû­ÛoüJÿW?ÿª5ÓÒè V×ÊVµ\*‡1<7´ÎŽy>VB¥uFUãBÙAá+bÌkߣzج×M”¸ÑØß¦Ç R”4ˆsI,¨ 0_7ŽÈ8C¡^¬ßI4l(Çd…MAÒè†CPÞ6ÍÁ}©ë…’ç…ºn‚yÕ¨U'Ù´1&@0½6"Õ&•'HÊdm“åŽÒW‘¢ÊÊ«Rú?Ö#ß»±ô‡£ÓíÌ¿ôéMRÍŸú"ü Ò߬ÏvWßÙ¸õ>èØo\»43ÛÚ\oƒ°2xf˜3O̱ô7ëÔÒYËþ +耹8ó £bl¼®ÁL€;™¯!ù%£± "µ¬ŽÓÌÛ»?”_ÎÒÿÆÍ]¬\•CLÇõܤ@mád]/—VÐ^xþ t¾t@l¯G((Õš!(A‚²4…4E „çÒÏkOÐ +‚G²ÇÕ2unXcÀõ0¼8cr3>¶—úŠ N–Šèû;»pìžÃQT8úàMÓJwdÍܱ‰­×hV7šU8 +$íZG,:LT71˜Gૈ Jdæ–âVĨ4•aDJ:m)×µÇØÿdò§@‚Ì|…jLÁel°L-zø9ø ­˜|[RDK“˜zn ý»Ž{«½ô CK£Ø)jG]uF£ ”…r*ýÓ­R1VWÛA`WiˆiÓnµ<"ÚãžËˆp§•Æ‹¹^õ$ƒ [É’$,ŠÉhÚ$ìòtÊ[ÀÎM¬+G†)ÂeÿU +éLùu5gJ×öl)ÒÉžmù;WLp +¤;Z¤Æ¬¼ –)£ •i0âæ˜ì·ùaÄO‘ý¶É â÷Än×Ó§UØá•³/žÍ~ñb¹H÷·~íkßøö·þÃxþÔ)þéŸ$ýkpœ ZxKôãñda†ЗOOÄBwݵªFàG0±© A½Ž'e ê0JRܨ”M3(X»†A!¤ðX&C¿Žëš¼TÝû“ÌÓÅØI %¼bâ"ï»nÅ4‘n¨}ER¢Ày"Á—W3„4†‚ðçiþ€¹Èå¡Ù͹¿Îís+ÿpiñ'08л·vêãD‚P83‡NV{ùš»±»ל»Qû°W›-Ø=wD¿|[~æ=Ñr¿qLzm(ú +X±òÙ 6@úk庖ô1EØ}g¨„”—ÅG¸µoËÉñÂ| œ& +zç¦ü•%Ÿa}V¡â„#87oo˜æÞ{ß|¸5øh#ýÓCB 7û°`Ç“Ýìt,ý7Ð2zµ|8ß¹DÆï ì{}Vç_Zâ\.Øw{0F´Ýj9‚§X@• ÿ—JwVÿiµy¼Y%^ÉÉ;#Äê#ת:ýŽUi†Iý1ƒÞе*5þàJëô= Ô6ºîëW¿~á“gY 0:[Ú,ªìÖ n˜Œ¥ôâTú+ÄäÀ爮H“•;Nt›EÝ*› ÒXÇØ$y–[Fžg,)ßuáŒ-J£.„ÄåÂê{Tš:8Û Òt@ëð.ÕÎ5v`A' ·É1ÿ˜Ë:ÇPf; ÷`#2DIo\¹z&Ì4°ý]—šªLkÐçô©Œ½€ù/¤HQ­@žÆÄùŒ Ìú”ÆõšˆEj(쾓ŸOC ðª™¬Y¤Ê !áEx.k”¢Æ BDÎ…¢_`²D³LÃ}øÛ¸ã+œn5±Î=œßp”¯¿u½u¢e¶¬#P¬ÀP€‘Ϭ/©à“´5Gª +Y³Ñïxžeˆ½ÄΆOWEo¦LxÀõ§qÜ6~ˆ+îÚÛ×Î~ü,ý©ÞÀ£Ùaó¥/|êíwçÀöÜwj’céŸ\ªVÚvÄ8]­ORb&Vp@Y-È}0ÿÙ¬ÁD}(9U/Sß)È“ÀTâ:“+Ï0Úঢ˜ê¤eßÒÿGÙÛÇ‘žwb/¦§=h̰›61;XpgÉ" jWôR»–—ÑZ¶ÅöêÜN®ºÒ?q9•r.©J)IåÊU©Jîê*Wv®êªTWeG—K®$Ç·gÉò:\Ë»&Ò.¡]a—Ô,A gÐÀ°›=hL£{z&ÏÇÛ= +'½]½ÍÁLOO¿ïû|?¿¸"ŸdX-×óŽ}©mCeœÎcKËWïm¬­è¯7­f³0mYeD}àU‘ö:e=Y„‹‘Töº `t`ÄÁÜ„™ä´P¥ÆÆ½dåÕך﯂°çË‚¤?˜ÿOÍß|ý[‚ÜÞÍ·ÿ¼J + R[÷Ï,#õJí¹¥öGQ.^¹:@’0g[•+ 'ôéãÅ ¼ôŸ=s®}ïìK¯8»1¦Ê¢¾ +@° ë`¥Çä`«Å¤’>Ùл´(—÷¥…ù÷?BoÖ$¬Ì=.@"äÿÜ|£4Ým~ŒñýÆ3¶Z˜Ø}ˆÑJ8®¬4Î/7ÿ ÃìŽGko7˜9%!Ûþú>^†çy„U¹“jÅRZâ¸Író§ÍÅOáW½ÌÐx¤²<,þ±Ià ª^œž.rXÉHiu+föüÈÓµw7@ôƒ' ÌezôÔ@À˜ TN—÷xë´öfë3zNêHÙÁ²ªwNCjUÕŠhþgIÚ’väã‚ ">‰Ä%£%Áø>_–£« š&îð²æØF‹R1šª@ú³ðI:€~]g–úªx³•QˆŸÿ©LD®m7”ËBEÄšlŸâ6­–“$>KÿÅ…Å••ËÿÁãh\®#OçØðd€r?ìsü‡úrä E³ž‡•Í8vŠ.›xÒëÊÃ./FcHÆa1‚Y9CÇš1Ù#ŒÂ(`ß·XÊðŽàäò ¸œ›Ä¨Ú¸°èQ«MÆ‹* +¼ÀLú³ŸÁßÈðôÁ¯_ˆ!Š’R(¥þ_œ3üóS¸‡½H/?9s“Qe÷]?ñ͂Ԁ@3–þˆŽxq3,‹~Éë78Þ”°ú.â–¦4ÿ‘·3·Ø$¦®sº4AøG™œCø2ˉšÑp”"K€@ÏJuYú—tÝE],9N`Öžz‚¨,òÒÒf‡Pt£Ãvï§çžÙïÅo~wù•/ûþ¶³Õ³ýÎÝf€áš—º[hƒom·ª³u1¡n¼ýfãÒ +Ì”æ{k+ÿÁ—@SEQ.e>…O³ùÁœ¬¯^«bñÂÊæk^» Ê@ óQsé…«g>u©¹q‹h¸òꯧƒG€!ë«ÍõË/¿ +¶ Ágž¶o¯­nm¼W­Õ‘p¤¬-?Š2U36o½35=Óíl»žÃ3>ŠCPÉ£vòh[+ÛÚÔyÿá-&Љ{!xšpÛØr=Âgr÷#lg רáÚ¾EÈn£Dܾç|ë_ýœõ·ÿSAåÂm§;Q0ZÛÎ,–[9µÓU³b6·Ö°×>wåÜBu¾QÛj¶Å@ønâpR"˜·Š^AH÷(Ý™„rñ &‹EŠ3jŒ=÷±Ûs«3 -c¡pâCìe˜1+!ÃUb‚Ëd>‡ebRúL–=Ä« u^W‡ ª?pÒ¶œ2ËzsÏÑ'‡^ö£DDÒNÐõ)SL Aôëš®Rèyz±¢UdmûT0ؘ:ÆF•êÔìü™Úþæ=8z¾_µK?ûéQܰ̽lhïúµÚLHŽsx°O.ªÖiï•ᙣÙ1ªZzï æÞ×Òž~ÃhÜ)œÍ øå&þ¹…ʼnÁКÖͪáî¹ð£Šˆ2 J” ³‰±€PGˆO…9ÆIEHr!ÁKW-Jç6ˆ†!õ°t"QDêòð‘Ћ†5ƒØ8înÍŸ"8U0 KÒ´¡Òðýš¢s®E$¡O#ý1úÿŸÿ]Œ®þävóž³pÆ^R ê´½åÏ4柭=þí*õ + j`F#Mšx™›¯«†iØaä£ÿ4iÀÎv\p4žnœ®¶þÁú±kš æƒ°?ÐKE{@€›:3Åj|GK˜ý>»l¶@{©>½¨–Kzg×ã¸?Ç÷™ù Ú”´«`Œ\_TÖê Äþÿ’>‰ãçB… j:àøCPÒ@×ñ2VȬ±™YƇû‹17ÃëÄsÂMØ C ¸«ƒ1è~R²ªm{TI%5n†P•®æÒ§þ£À'P„ëo¾qí•/Œ¨l!¦Ë®6¨} +ļÑ'Ï@!yu¤Ë!3 1ègå=Q +(G Ÿ. µAÌîÅ1'#ØUXÚ°ô·gmPAÚê”uócɧjÐ,‚„`ì2º7XâE†˜ÃGéO÷©÷zA¹Œe½nsÁ«¼çTú ÅäѳÀqz° {º"Þú)î×·¾ : :?æ?¨8M˵ù›k«Ãƒ¯Óqw°dåm Ç+3öì3 þ ´ ‰Ãš€.˜ÿpM–þ%Žæl­[«ƒ +£QAk ^åjt¤¬›.Þ>w3ŽcÜlÅÞöâ +ªßÛnoQjÅûO(èf™ÈçgŸ³aÿþë«ëžG×ñ6ï9_þ¥eP ¤ÅýÎn÷Ø¥Ú;ãWš÷·U-Bóÿ¾C ‰A£þ'½_ŒKâ(Ü9!¨¨Le…¶ÿ±ïj,ØÎÇ-ý Nä’ G…ÁP@óCJ´©º(²ÓÆ€4Ÿ Z£êL¥zª¬Ljܬ/RàzÈ84aM/îjéÈÂ|ö–Ø xùó(îÁüߺ×÷h.QÍn…ºÞúÊ5÷ úÁ ¨Qzjå3‹üâfVÊ @,_:çì:°-ÜüØé¿ò 8I¢dùÂÏ˨ [EÑ聾âYù©‚É`¹¨’Ñ‘°ôÏþÉB‡>’Ý‹'DuíšéÀC†hÄß+Í7ÖJJ‘]¤dâu¥`M3{šR ïú1è€îN_„ËAU%rË?iÖç¥ qí•Wó1¡Ê7³j…ÈÙ‡¡™`¹—˜27Xú£„ðâ” €gHÿ þ€áȱ^zBŽJ7õ8×úÀÒ®¯u§ãdàB²†>‘χ{•0u•Ž32n¦9°hÐB7½=¹H-Û* 5î ‚ctÔÒ‡€ùÊ÷¨“TÌæhtFfÉ2sÖßD’´ý·ˆca C@ÿÁ­<–DVÅÂ*§ÙYët ¤9¿Š4"Hÿµ`n}ŠD]§½ˆkµü•Aú{{¨<@€Ú/ìw£"ŸÀ¹b”´ëþöÚ*;0=:ïhÅ`îž—®Ûð×Ì ¨Í̓às­<ÎãÏÌ]f'`Hþ¾Ì±HˆrqîœíuÀö‡ü&¯ÿõú?ùcªȡЬ}p¤H 9ß' 1_oná \ûÜ•7oˆÇ6U+ñÜGw᱿2 (‚Ó2,L,)EªÜnà¥ø-†9n`!Sˆe bb G ¯1SIÀ,DÑ Îã`QõTùØ 0»/¨sÚ,1• ¦[†µ7Š™˜ÙD±ƒ5àu‡ìVŠÿ¨È¾„í¤?†€zÂèUN²Y€í/È éß~ Õ^)íÕ\{;†º],7ZX¨ƒì}ÿ·³4>¨2™l×ß\5péâÕ;·7¼`þ»倕,aG‰Ìÿ,¬Ìdô°¤=JØ>~&ìeíËÀÈ?ãJö Ý7З`š)v’PP^3Â(ýÚ©è×w̲Q3¨çÎÝ É{&ŽªÎ)e¼sMIbC¶O[UÓízZ.f¶#u3óOpñOœv +ÉŽoÆ@Óh˜•ôÌ9ä²Ñ!%“Pú+„AË/ +£„þ·ã‰Q¼ùA“=Æ4•! ŠÙ2߯.t/ ؈ ¦7ãâµ ×Iý‚Q¢`zÔ›Jvã§TN½Ç¨;@ô+9TmP–Ò =mòÒs•,Ö);¤ €ÀHB裬 `¶zqìŠfØÕ€ ¸á ñAîƒèîùpÎ!!$[ ÿ +d`Ž%Ø&ac©xBRp›ÇÔ5†?ë€v³½ôéóÇh…äWƒ+Ì4ˆ‡qq8RKªÉ¸%]²ß9¼¨’Êé9Ë2á¨&ùú{(ö]ñ ÏÃÿ¯ÿÑ6ž»º´òböC™,W ’‰#cJíÌÜÆ[¦ÄÒË¿žáŒ¯}ï[f¯gÕê‚óré&Yè9mÓ®Á”…]¿èû>Èn¯Ü|ãÛ $Xµ¬½ñ]½Xš_ºäï9•é„ÙFŸœèÇÃ~\eÚ˜(D3OÙ´;Aª‚ãEAká[z¹¦QÁ%µ¨‰Âd!ÜMÝl?ð;ížÿ°ÿÞFëµ_»¶öþæ¶ÏU S°p=¢§¿kéÜ|{Ä…*@Šâ"“ªZ6|®öŒíJÍp8DZs8F‡4ÎEQ­`ìšx”è%„[ + xsÓ#bÕa﮾/†Í´ÔáİPÇ9„ðGž~ÂàÔ“Ï0®-Sµ "vã},(VW¢ˆ¹À¨Á?GàïÓJhþG‰2ÕÁÃ)¼‹ücq(ûaŒÕ>!+@"¦ˆf1Ø ÆDÕœn3¬Úêì¹J *EQš’T«0Ô6wi*bn~.mÀÆ$s@Qg1Qpöel¼g×,USœÐ®Ù¼Š’~¨ ûdÝÙmå±@‚ž[ÆõÏ)6—4uÒ¨LiÔ²¦-ëT)¼³AFý)Ûzºäd>W.Q¿%XvÕK+T’0I@ƒN&‚]ŽKsQøûxñf¹F.Xg°”†5]c>?Ó*›'+žï›L¤Ò¿ˆUðå2æDñWh˜T „SJOe~Œ9UävÍ’‡Ãaœk +cq÷6fxH™ê r_F +„¤«8, 6Bÿö€¬·ÈøPF WëâeãrÌ•(e5TƒGÔem’aTšB~ŒPS䃫HàæWžO•™R€›ÑÁ íq…ZÌ”rQ )šGæÇ†{ÃÐa Ô +ýA FC‚õc¬z(°ù IDAT#!éH„ä0F…Ð +õ…y·ëît÷T½°ú£Õ—^~Ñõà±ëq +Þ„½èØ}°/ceYÒs¸@Úh°ÜD +²¥ø·èE°ßUC7 ™eÅ´KØW'õø0„£2A?IÓÔbð™ ³Tœ5&ýn·{ùÓÝÞ] –˜~¢’`}D!&Å~ßS. Hkà4ªN]cg{þòËÕ¨ ‚á×í3ç*fµÕ¼]&¦žn/¶NŽl²R-Ÿìz”þðÝ\Òæì<ìÞƒmVp„s–ûøž‡ø~øgãÂey¾¿´´ÔÜînvp@ú/œleÆŽ)QÌ !2Š( JðÛø&Ï.;ï¾1û³;µgÏÑc Õнa/»K³‘Á‚‹Ò!;ŒHA!šËgë¿÷µ×^ÿkÌplµÆûçŸ;ÃçŸy\hüƒ]i-¾ñßé¿òŠlAlï¹àw[ä]r½f‹(XÍSDrIupŒBÙòÎç¹ôÂõ"P‘-æàÞnás8OÔ\Ũx ‚”í€ñ!@„gå4™B£¬ÛuË(.ñFfAeQœz4в)h4úZÝGÛ©*^ûµ«bP[}[â&iêŽrQ©ô«)öHš!ÕŠ ~Z.­“£¸Geݽ€s$n¯Ólnôo~¼Z ^Ùø‡iîÙ±rŸÍ+÷åu}­iSS¨óÀWÀÇ…“…óçgöå Wœ‡ã2b’þh<úŸÌûÆHÿÖgí§­å‹Œ$Êa¼`ë°"å2(p¤ÜÀE”\ÅäÞºŠaNi%‚ ï%ÂÐ=ͪٹßiî{ÖÉŠûÐoœ­ -×iLñq¦8å²dc¦ÂU~ƒ-r1YŽãp9÷îŒÑÇpî ÇU:Ó²ØèkXóh3ì<¡çDXR`O ÕŸa0§§"\‘åÚbr‡Q‚°ª³Ó0¦¿ø@Â…2?-ˆ~A“0—2r‡¸û$ý…ìòž²òn è¿Û'v-™à.'.x¿uóVÆñpå¹<ý}¿’âtrI¨Ž)FŸ +fJìäšò’Q¢¥¥hEqu|<žKKPþÞûØÙ"ò?8®›ëElàXž1—WdÎ`ù3ËöS6ìNÍYxöÒ:VmÛöÜÆæûð×…¥ÆÍ·nÙ§ ÐëÍ:±#vMˆ'möé#5vY‹?8[ Ø*—µF¹TÊRcÔ@÷aSE®˜ÐëµõÉ'èà[?ÚðöÛ+/,yÑf„+¨…˜B ‹Ä“ˆ!Däp·2·&ã΄»bZÚèp˜„¬MÊÉ4™£fAø&¬Ê”4¶hvR¾YµtA/öÃA†'ÙxÁI7Þ¼)uq”s×z%¦¡zðf ‘¸D5¡®(䵎¹~˜ÕìŠBYÉß+«ƒ&ÇüºÙ²æžIØÀÈt@‹âÃårYK¬D*úeÜæo©èÿ9›¦•’x<â¼ ÇOËn'DÌ;UÏzÁÈÍJŸ, t]ÉÑH‘ã$ž HØ\ÐÆa˜«J;²1X}!mÿ ¸êñ›kÞĨwãÅkìÀæÜ»{ƒâ³àdj@þæ\Nʧ@X·Ùà Ì·}Ï=Âí±NaýèLQôƒùNÿÔ^¯ƒÄNdÒ_¤@†|ÂæþNÀÐ|gµ“z8XþO-õ¹µVH!31樋µV­½‹SD¦gß߬]½ÒtÀ™úïþÝ߄׾põ2(€ï¼qsãÎÖ‡݃½}óG úÿÎo}y}c3/úÛ;+éI(°ñÇ%ÜCÃ/bh j”Ã|Œ±6ÃÁ?>6éæ÷Æ“ ƒxC‘Ùãù‚¢ ªW¤•YÅtà÷AT­qE|~²æq1|üXµ@¨Ÿ# >­­­:ÕŒ1L#›lY•7¥þ€/Êl«Ÿ¿å;Ô ƒðˆÎ0‡-¬ÓÉÖ3rzø^ÌN€@àÁί—Šmñ® PÙ  HÿõV«§Læ›À ¶Ö}t88¶¸ÔØÜh<|BÉQ>šÀÙÝcI +r61륖%†û£Ð2,—À|Àöo¥èàŹÊqv––ÀÛ/€ôç‹þcø3`jfÒŽ’óJé“ …›7Q¶çŒÄÊ’Cšd& )dúÎ ª,Ñ[ƒžœ~ jKß*Ô˜RÅ0€ùϼ›0©`/M©Ì®óøËšá“ tCê$é¯I Ké6ÌpIðRE‰¬†ÿ£HvÆÊoÁHzQ4n×uSS‰uKÿÌ (¥ +à“BöBHž">ÿ9ëü-íVa–ò¼©€?a)c¯Fˆ$ï  +Å# +&&ÍÇþHÐèY?–|†ªNrn jiv{cÜ4Œþ‘¡ÅÃ"|<3ÿùZ¬Fe'X[ÄØEøÐ³‚1ë+õ9T4…Be¦z÷f{XŸ×§ M'"6%1`Ú™f­kÌÜýÑ0 8lí†×qæ/>Ÿ ^Õ§ëK/_ëÞoPòö\QÝìÕD­ƒÏ{^ý IFRƒ1U"döàF<Ó+åy¢ÀW§ §µÅ™†d„²m“tTŒÙKßV`„2ZJï¼ûqÔ¨}R>œ®ë}ëõë¿ý×–¯ýÑŸ^ÿ×ÿÏ6‚0Üø¸ãî¹þ#í§” +.ê—ÌÊÚýæ÷ßZ}çÇï¿ðüE°$ñ6fE Ü À8eL€³¬¬°&O¢Hxá á‰@˜ÆŽT`¸üžwîlC×­í{kàIT$^c‘IJt#¨Dý}¬œQ¿Vzµ:7Ž|/²ëÔ£[¥2ØC8ñúãì";pÄ Æ@’ÿp »22 m¦»âlqé ìÍ[ý^©³s-²nÆ Iá‡"8D¼­¨«ŠB¯G|nhj†Gï!æ%RŸ":n± +0ÜAÏ‘¸=‡X°ÂPº8¶""GÅ«M6´Ií,ôey6^QžÍõ<¬©ÎÕ¸i½Põ´9$;½j›[?k3™{û~»2­#3M9sƼsæXX{ºvçnóú­}éË×ó³ºÓ§° ]ŒPrü™|Y…úKüý@Zt€=½ÜÛ¥57èsY0(òâxÙü ¹ön{ùââPÙ/U* *ªÕ + ÓdÄÏØ/ä–D*ËPE1* ÌùrüeèË”äRÆ‹~ˆF²æ K¡hí|ÁP>—Àƒå¯$Œ› /VÊjÖ[7!Å÷`ó³0¢NŽQ1ÄVà ‹ËþꃸŸ²9饩k_ÂÊï÷Þ}/AB|ÔðKûû±÷H6)TÕ{˜ÿïÇÒ.Q´!¶F,.òÄa‚üNGî^jDŸFH¸dcÿó¤Öà´bܺ¹QÁ€Ê<6ÿßÿÉí…ç¤ÍZ)W1…[Ô1[C(:"C3#5±H2ékQáî‘Ðb: +D«¦MrŽ„Ö!I°TüÃC/ ‡)ñ 8…£1ž9 2ÌgÓ‹ÌHPÕª¡ãØ1Z†.ÔgV ÍP5Z‘ í µ”ôà ´fDrØ­˜Õíû·ã‰®ç&)†^/àl9Â(Ê8â‘LÛ\ +g[§ž j|æŠÛÞ®LŽû19ˆ$OÅÛÙn\¼Ò|_¬½ñí, ÜX¹¬OW‚G)æÓuýp„=Ü2­OœS¶œ²Æ4Œ4ú¦]ì!ÿ„§Êµ¸´n¯«“G{EAô–ðÚùײNÞ¶ZRØÜp´Ûuœî,E-/,xî Ï6@lRã8ø Ôûz»Õ½ûú7wîlýÿâ÷áäŸÿó?~þ…K•©Hz»g[84ÉÂ…¾.ÊųÈêZ?ŒYá©ÚxxW'¿emÆþ£@%ÜyeRS¨á‰qoÒjŠ-:X3äþçý ßmÒ3‰U¦»Û«ÎTÌ’Î%pt}ǪÕÔ¡Èp ‚°ë¸›FIšÿ׿wãÚ¯]u÷Ž»àcÁžÅI1òð¤ 'hæ0DBsʶÕ(ŠøÝaÈÊÐù3Dt,&ð¯ýhX“Œ­¶·È’aËÄœt¬ë¹´‡× »;rÜ“Ã~×ñºÔhë¼@.ÓZ8;{ãN¯ÿé[L×Òt0Ç`ë´÷ÀQtt×ßݼöå«ï­"{̕ϯ¬þ`­–‹õQW£<„8Áùè[ÑÞ.…Èm‹!‚íÓ3ëïoÞkµ®VLã( ÀÚ6&ËóvD92«nºñÖsD7?hYvÅÛEÁZ¡X?ÕYýíT\•r †ÎF˜8ÎJÂàéßÓ> 2¢c ŽsÛâNƒ&.‘þ¶º:;'£…Rd +pj +Œ>b`>‚›ó±#J½©·Ÿ š’Ea#¿Ò‡)y˜FK¸OxŽ@|¹¿úo}ÿøoÿéç_þbøåŠœ±¥2Þ §óS’ëå,JÚÁƒ'9¿m˜ViS3¿ð¤p²¬é¤-}šwé©—ÉÒ+g»G¦a?çAèDц=Ô¡™ùÞ‘Êr3ç°ôláGX”‹Me_r¹ä> ÒßsœÆ…#0ªV]VÖ7ß]mPãU‘6Ë.¢ 5Í:ÀÛ©»I‹Ô˜¾Ù7NŒ'4ˆþciûn“ºEóÃfã|céò’·ïÁ³à60ÿuï?I i¥À­íGDÏÒ‹×ôbéúŸ| œ;½ç#ãQ=»w÷mYêSúÖÏpΓElÛÕõnƒô¿öÊ‹*MÄ÷6¥Ûþú_^¿M]ãUŸì—é +ç‡AôÃ.Hôä?Ë)ÆRMM‡µ™#)“Z]Ž è£jÄ1þÜq +K,ʬp8á›lS +z¿ßÝ¢"ÚùùƇëMö`ï£é.PúOj 1‚i9R'¢‡“`5:WLã—rQvëã–Ÿòóu÷üî^tÅ.â8çf"ìÏàˆ¢:¶ÙD=áíVªó3Ï3ð‘#´#¬NŽ]ĆŠüM˜†¥b‰ˆl0Ê7©˜eÕCl€˜Gð§(UcX4=àŒ"E¥Ù8ÈyîlC…ƒñ QsJdØþ|n–gÅùzè†2|·Ó ‚þÂâxè¿{§ ;ÜìÚ»›Œ·uýuYòë<8²öÞògá¯ËÔñ°¶vke3[›ÍEäÑEé?sj¼JKíììPz,‰4Å€¯óúø¥,ý›9º ÀÇ—¢aq ×ã7.ÔA ¸Žß8Ó¸q¯¾xþU7Ôê3íÖx9ÖÌ‘¸ü®ÒYªU–ÃR®&gšUJ#SH55Sç@Ô¿£M–W_¾Ì¿—R ’ŠC™Tã P C~oYÀ!~îƒ Ö²¼ÄÉé@'¸`Ùb )Úþ*¢klD–ˆr®æ˜ {˜ÿà +(!¦‚:ä>õ‘׌e—X†¿×š)=ôñA ôÑiuÁXùìÂÖÏÔèÌÓÇû¡PîF‰Ä‚Gˢϴb_I;59øÃËý²YÎú3õ…yý‹X虉†‡12=VŒ¬ÍÊЫbâYð2§Y;úà0î"’=±AëØ¯À€†jÑÃÂãæXª¡–ï8ø Ç¢ ³3åt{3Å/GÐŒ]ÌGñ·mà$ýÜôH§JítUÉùavU48–o~'€{q·ÿ¨=w¦úàúÔ   ö +òÎ9 +æ0¨‰à<Ýxó˜ÿðâÝÛnVY´ùQkñ¹:›íuB½54œ€¬ íhš9Y‹Œ 8pÒxºvëÍ ùÓº~5çI€ô‡¹t뇛sxÍ[o­]~yÅïù­VkéSKpœR kVÏCl"䘪êÓÂõeV ©oT/b\g Žá1îŠÌü%wã­[œTÏ)!QšTQ/Ö@¤ÒÖµŠeGF„;“Ìì#ú1¼®© p’0]„‚0GÌö7š•´¢lÿüŸü^tÀ±Ê@f¹Á:¢8È¢üY†_`-¾j2Ép{ýHW”R¦‚U²ßdý/oÞ"ùˆ·›ƒ¯«=3g_xíóp|ý»?pzŒ´ÊhÀ£ ~:§ºZ€tœÄ˜ýddE3À3 + ‰â;ÛóÏ4à&u]F%¡0•¡«’÷ÒMSå9ðãÞ#qޤª³³æ<ì.ƒç^5Ö7o÷ëõuV€k WÙúY“­‘ë?DÿvzfÖÔ+§kUÓ¸}·Ùu=®µð}|bå†Q©0£@á ‚7ƒ±”ŠîõBo¿ß81«¤Äod@iÓ×°Z)‚«¬éôW½l…Ó ÍË;éMÜÓèïí·Ïªì£w G•¥é¸ +<µA\*‚:AÞ ‘’‚R^a"+×&åÝzgãê/^e™öKº"á QL4¸X©¤Ž†F†Øµ€‚UÂgD]ÛêÛ3g¯¿qÝ>mƒ‹Q²ôk¿²ØîP]!Z$u)È {!¡†2üQ“˜ ‘ a¶bûÈ’d”„¹¶IÌ-iñ©`/’˜£À7 +Sªg±`× Øì6›Z¨Â^ŒÔ:b¬?;NR“MC¹3œàt¨}²œ$1'0q›À§ÆÅŽ~Úi ßÞ}¸a"#جFE3Y¶-FU=# 0¸ŒÞ¦!Pß ÀÑtwÃëú ¤†™ÓpãMXJ×A”¤å 5‘øöŒ¦CXHºª»>øü/Ô¾ó|»>?wåsW~pýêI»Zµ»ÛŽQMS”ºPØ/ñJ2áÜzWº­í´ãÎÝ­3gì÷ïÁ'Á£>ìöS³¦¥+‰¢V«u;~§Óµf—îþtÜijŸªßxscñB½bé›6gˆº®ûýþÊÉŠ.tÿ¡_1µÎƒ½˜œ27Y'*î#_/¥¢¾¹q{æTÁsÛgLéz¢+F©ô»š"ãàœ.Ò©vF/©ð¼aλÙE"ÛeMQJ +œcÒR]‚»ˆÄFªÀ aáÎ^^™mïµn?¸³<:÷öÛo\½z­?Ã}\ÈaèwU £fL•¹¬ zÐsh|ƒ Ô¨äŠ#Z F8cLWá»”´¿2³>ãó§a~{…³Ò `ñEE#l°Æê• ‰N +µ HÆGIÝJ3%ñV-y '^81A=&ƒq¥)HƒrIë_‹Tî>FE +‘u²lž6Æéâf†4Ê4ë 'H*—ÀÖ½²ÆÎiït È¢·çPJ®ß¼n?ݰ*Ò‹£î{TZš0§˜¤4ÑP <‘°æò —f)uù•¯`ŽH'ðK¿öyþ+HØù¼”«c«ïsz Ž U>ôã¨Danª °Ù™HØ.ø~!-ÌJCµ|¼'P`ß–¹ywŒD½~ß¹¶Üp*Áû-ý`ñ‹"eFÜsñPÙG@ú/œm¼LÝ.K„$êÃÀ÷r%襨ԃˆÁvÚ-·V·`w;.gùEÊ4;ˆòB:nª? Œÿäs6­Ãæ6q"mÍÇ´Y”0a=o¡.¸ážbWÕ Ÿp„Ç$E[u¦ÚÝCAã³Jéš +¢¿ßûXe¬ŠžØvœÊQ4æ®ß6*ÖòÅeP Ž0j§åðH×8YRN±e“FD³ÔPà|ŒYE‡ã¿ŒX€m5ÄPˆ¡”(•òÉ|¢eÑ?”þ`(õŒÿ¶×“AfŠ9m"çpQKt•«YpÉþKSÀ¹ÑiËÿþ^¤g*«åIÅ£ÂPœ5©†V¤IÌd8=ÿéœÃþøÔé¶B‚rvºíŽŒÁIV?3?ßêõ77l»bŸ*·¶¶AúÏQÔ”¥?>ÿ‡ ê]Ù%è|ðlö0Œ~ý©•tèéwèYFuõÝ·³ æ±Á³„‡H5ŸH‘M SSÄ0nÕ Õûsï´à¸ËXá™°fé_¯þÁ'þ~ùàNi™of +cÐÈÛ• 'PÞqiP»oàu SÊðŒÓ­;wÇHU ÷ENF”/ØUJºò@úƒWž¤Yõ|Ëå×çk/åüù—H÷C [ãPW¡Ý®AÀ‚†‘ÀöuÌ>HVë7%É胊‚AÑ\N^ü€òÜro[þß3'-Ö6)'÷6ò­ãð×ëõž/ƒn¬fs”Ó`ûƒþ€OèõÚó|öB-ýY>tØM4áÌ Ë}Ñþ>8˜ÿ}Ž!ؼ4WaÿñGæ°ßW©^DkæÌCþ¼AC·Hd‘LØd0‚ðöc–þç—Äèp•‘°Fê•QlYàQE ælÛ'QëM·8;ìè MÊ8Î !0©¡Q͸ôàÊé…ÙǬsšŠØ–¢@Mùˆ˜¯I”9õ,â©{@‘Öˆãþ¨Bjäá>•X€«ëí‡Û¤LLJCQYúGô¶l‚½É!iŒG+I +mRÕµ\)¼Ít€—–E¸GC@,ý±`‰’íà€èæàž"RÜ\bŸ®ŽÛÒ +P +åHîma Ïqääqv{w?@ÕÀýVëÁñ¾¾ðÜ2§¬ " ä>ßúþ*ìÊtPKiMä°O›°S:I†eúI4 [Ï•^ÂúÚ`£%ZàÙƒØÛíÍœ*/^jTO›YÊO²í»p\y~ií ýD¤ÿ­õÆÓu«ªƒU¶¿mmÃ4+–5îÚ Â®Z,3D>ÆÁAž»[(ã¢á˜]€$wnê†æî¥)U)޽gÈ0¹ÔT®m¬Îžš«Íà/}é%‰d™øÏ>EÏ‘/$õTl÷5b-ˆ¢À( +æí€c潕¦Êª‚8NÆ4|8¸ lúHD(Œ}x'HЛkcÆà¢Èìa˜~X0ªKÀ>6ÿAúkzA›(D9JÙ¹ù˜%Í/KŽÊÆ}ê1œ’·¹å¬œnd8 $ÎÒcB­¨Xl5©›OÍ "õ¤¿ÝX€c7à Dêò‹×ظfébz8¢¬ɬÝÇdƒÃñWž¿˜…€~Îöå/IW€Ý‹þ¡´S4JNªI¡TDüAùCûðܱKË™¨à£ p¿yn¶S6øìhO{¥.€ßZß—ÌÒoLÌrÅÑjö8èæÑ-fØ;äZV©-nc³ æ?ÏL?˜ÿN í£HHWQ}¬‹$¯ðéM—²˜`)>ƒùÒÿÖêæ°:ø-xq0ÿƒ´€*èETì£ÀIŸƒraRÒ‘ö’‘uÁ€?;ÝØHî+'tЮ·¯þ⑌‚—‰øD¥H©;÷‚ R|ù HðùÌ% IDATlm¬bÊÒÃx=€d%¹Ç< Ëd•3ÃÙe!0 ûŒU‰‡àl “ÌÆAŒvÐ!Bêð¢b`‰6Rš}Zʈrµb?%EXI«p&ßét“‘ü ­Aø0éYtiôY £°r²R?[a<À ×ã³Òow¬ðuëö”m-ø}‡… HÓõ©±¬0qÃ>Š~j,gûúèıրË@D¬b\ÇV+KWÚ{òq½ýö/Ñ@1_šn™ôÏ6Vž×¤«ÉGæ?Èt8êEËHiHTýøÈbé99Rú?¶EX؃!  Ç:ºJc&CxTØày.ÈÓM&”Œo™Aâ$L³’‘îŒhqU¦Æ«À\aiÜ[è +Å‚àeã¤3Ç,/°R‰V”^*(0‚VÅr°(¨ òb~^–%ÝyˆD%º4,äª0Ф¾òƒŒÃD’œƒ<ú£Ög¤KägŽ¥Jn úhÖ:¶ÇÖ(8OøI‘Á@§ÂÄ ÃIå¤ÁȺO¯RNbHu#‚9$^7¬ZUuR±I¨}v;C):öIi"WÓ°$ôÀóAÌÁ½©‚RT)¨$`œ”K½ùù´›z +$ +#L– UX䎄«# ~]¼ð¹KB?€³FsLƒn»Ûít{;'÷îÈW"wÀ&ÎuÊP§‰»fº0?c1`ßÙÅÚ…OkÚ-)¾;Û=ÿÀ÷÷÷ÄÖ^«Ùm<רÚ2›â€*³OÍÌ~Wirê¥pz|ø~³ÑÀzÂÛïoVOÏ€æ<éŒL†f¤ŒS"*r¢RQ^tH¹¢?L’£`DI6)°`R í£=aÁ<êxóþAЃºDœÀ'lk¦‘Ä>ø:­nÂHaGP›ÀâKA5øºn%ÉA]ÇÅUžžcì.˜ÄãXfIº,¤_ÂÌð!üL™’».,>ÿÖ¿çP6.„“êEy¿¥Ý–pÑ¥‚,?Ä_ 5ܧˆS‘h>d³T×ÅQ8”Xš£D›Av -;ÄÎvañ÷¢Å sà°Q…Ð ªt˜uF*yÌÜ‚7pa;í•—^i,,¸Ý®U­Ž{²ÓÞýÅ‹WhjÆGkÖ¬•ŒÑï{´HÔ|‚{éâÂU¡G7–þqJ|üå/_{ýõë~×Ëf\ +vXHlA«%#î +bZaµ¦éôP2è]Õíl7×V­Ù9·s<@ÉA=ÏàâÏ/^ÚÚ|vxåÊ‹+ ýqïú ýçNY&-¡¹\Û³}Ú›wýnsù,%]Ñß:{.ìç>ݸó¢—ût£¿¯;­f@d~`íe {hø"ˆ6A°PÒ ÊÚÿ4š"Ý=·»'{Vyk,؃q¾$~‹Žˆ>À‡/LâÇO›Áˆð8Jû3ž©›§ŽwXÄ]H•VÛ©–¥¹´ý  š’A]@ ¬ýpmå³+V'ÿqÐyz©Ï€šøï‘`\AäÁÑö Á!úkE–a¸½~L <"™µŒaR*è3ê(ù+%½bœ1Ü +²Ë´ÉRtØCtv ø3£aFsÍØq¦ÈbŒ!aRŠ'm„žƒÛ@dƒVöÚĶ‚¨ö”…^è yŽx‘ŸWOsÓcA[UÃ¥“þATš’ãV¡Õ‹«*)©…iV½£¿½E¥TtÞúñ†=ãÛ³ÜtÚ]®3f'€“¨åô: úaÇûÙuYÀ±G1è6=™( ÖÎyÊX´WÔ©iCõúa&ý)=Mx®+­-šæ øag Þ’µqFÇõôPeAÉá$ʤF`›µªéù¬ª´S®ĸéO•ÐDm=ŠVa¢¢óräšgj@Uôö°ô Ÿ3 &ý€xÈ^oö¾Y/Böº>u\µÀB ‹)¾7V¬†œ…F/` ¼“ +zJ›å/‚=ŠXúƒÐÞÎqP§ p§åd­ñÇ)»6³œJy—Š`8i$jí]´ÕÜݰ–†‰D¢ÍΕAú·[¾U—³®Þ¨êE¤ÿÂÙ­¨`8ûìuñš – ú9róö<'Îî¨S3ÆÅ<ó´½°<ÿs½>gÏ=m¯¾µ¾´\ó…ëíÚüØî©äšø@ÃnQtN(²Wt€nš‹ ,ýâ‡ÿß×^ù >Ç )©‚2–vÜ{%¸wRx¼XŒ)Yåq,gâH±kŒži|F} c;.¨~˜Á㋬²¨ä;^ÁUš) ú¹Q$('È`÷<ù6qT è=þ9Ž?gZŒzìšVìÚ‘©ÕX’£¦OéˆÙ\?7Ÿ#Ô’ø µÌÇ6–àùwn¾)©ù Ï÷i‘÷1_ƒE1Áû饄»·0á_3­H«*U¨à€ÜWx‰ªÿÖ{à€Ÿ³ ÏØô‚€8ÀTDPÔµ'5š¶š›••«ÊfO¨ðÀü‡ ð`»·VoŽñùAôÃ/d'ÿùñ&èv³è8X.NÀõwÖXôÃ>{´Õ‹mÞ`Rü÷!. Ðàä#Å£‘@ÅœÓÙæ¦d²N¡ž=R7ùØ–Iÿ’¦èóäc»ãX&CëÔé§³‹ŸÕ@©Tj·Ût†¿d +`¾á{£¹°„~˜ÿüW89ò{™ …(,Ô‚’yfp¢ß®ZE“¤ô/•`……d5ëXÌe2¸J¦×9-‘I”ï{™o±áÈ{ ‚ÜV6à`Ûë•1e£D@QW +NX+Ä)“¢Ju)xÙiL³¬áètiY‚ºK~+bXâòí²ÿ± •4ö\aœØü×Khq³ªD9^_ŽMÙx?a§Ó‘E嚺¡N_‘Å‚9éÍ[Pž·ÚÓcÑ“©lcÛŸ7MUö¨8ªS˜ÿ¼g‹`È»{RytØgÝîÁ +À°Æ÷P{ +¿±z +£@Õ“¥ìu®…ãc›Ê¾I ìñ_GNK6ÿA ¬o`pªµ=¾C0ÿ[÷E£^k¶ÚÍíöµ+—ßù1v´ÕëÖÆOÛæŒU#ŒCC…nÇe‡=ñ¤-¡™©$©Q›kßâ@|25ÅÆÃQUÎ4ãúT‰ òbÑÏ4¿`ƒè·ª*øa0ÔóTÃtYM•¾”R•3$_xÁÙœmMýL SìxsZeÊqÄâfÊÅr«ˆµ· +µSÁݨJ0@ÖLVPaµùy˜XlÓ%ÔS­lXÓ¦³uçá6' +e bUÕµ–ô¦ùn…x'À@°Ix"` +¡S\1ôiÍ4õöÖVœ(©ÐÅ*¤~ƒÃØ£ö%ê֞iàMs@ð„©ë¥NZÎ{†^A_±×FÃGAOE>wg§5_?»öæw:„~É4·oã<]±}çPëîFãéšO‹êòË_r ôï´ûí!w£µv|ØggqúF§¹å(j\›³ÂA»û°ã¸ÞKŸ]™­×æÛìkÄ ÄyÈLT?Sï{ý8 ‡ãƒ4¡2·•€@énÜëûë™ú” Ì`[dQC: ö‰þ|ÔÒ༅ºè«xBïéGv½235…urä€@@Hú‹ÏªdL]ÕÐð·Qe X^¢D²B =ò1Y7 +5ª‚!v¿kŸšŠcµßë#\"Ö–a>@vˆ‘…Cöàvlo9¬Ü‡[vOŸ¶gKž‡Îõ1ùÆ@rá‹Õ2iŠ^™¨X†¥kz¸6—61²Ê5·ßÖ†£þ0bxW,ÆFµ*Fí™kלÖK“:ø%UF„Á‚žò]UáS^/0(à îúE‰3ƒö‰H[Hâ_òsÛ?¦œ~Dg¬1‘!„“ìg„,áÁZ¥Üèž@6LÀ@·æa÷QÇ`›(>%*1˜2p\­›Šæ^詳|É+=:T³¡1}bŸüü>B=†iZgS õªEC¶¼Ù·Ð¨ì¾ Ì#ã„¡`€CŸ]RÁ/‡á+©x§z…³©‚0ýÇBBWûûÁö]D1ñ‚°„ඦò´ÑÛê³¶•²Š?{qii“½Û;[­-UÑ:;÷Ú;hm?¸KG|›}zÖ!h û´Ù:q¯^O‘0è·TOªh?á,:»ˆ­šbÐ?÷\•1õšwäoÞn…òÝ××jus¶n]3mæL¥ÙÙ0‰mžª”ÛAe +˜o¼¹¶x¡í †þ6¦±sÕ(èÂ*2ƒžçî5k´–%8Mq,£óÖSV¬ëYø™d`2~?Êñ$Q¨¾-‰D!Fñ ˜ °”à +ªfðõ£Á<‚ ³P|Í÷ƒ‚RЧ Ð Y™ˆ¸¹i<ùaÊ‚eà±ìÖ§…©fÙ€ˆÚ´ŽqÕPItsõëVõ¤U9¨E=8ØCÂzCéé@®•"GjÊ·,Lƈ‰o\J‘Uj7ï·–Îå0rõHI@Çumë8îwónëú÷W¯}SA³5Ôí>³±—&ËýCª´ÓS¬‹8ÒDPLz$:›¢$Ôj‰á‘ƒ¾KôWøˆ´{Ô@iAð]é èÜ!(r,fœJ‹ˆ(LCÀÕD™¯Àu#X­päR~ãP2j.3•ÓðhRó\9Èá\fòÔu ~’6Ác´ÓžŒ¡î‡Hæ¥àÈÓü'V?}5/¢ÇX*õã~àœJß)«Të"Ë4p¬?£”o¦È-‘"BU˜À]Ë¡2*M°ƒ¨€n;èS%Øá¡ôçüÜ  Ð›±ý]þs§çë§ç½ÎÊÅ—e¨‡pn½‹&TuÆdGð?VWqÑàŽe›*ˆ,k¦þô„1®ˆµs. bWR¼,ýÞžÏ;–®îøöiœ`{».ìUâˆv:Hÿ商Óv;;Ý•‹»Î<ú·þæ¯^ºúùoÿ :ú_ù­¯ÁÉùóÏ/]XÙø` Žâ¶Vk«þ$ ™cÜÿ_¶¬…ŸƒÓcE+ÇWôi…{M°äŒú9 Æ¡‚\&SîÏ” ¬Ê ¹=*Ü…ê—Ë•¥¥ó†A1ä…‡qÈ”Ÿ°“ÔõÄ ÂW#BÃâè±A¢\Ì>¦“Rcƒôï¶¶@€ôçðK©¨3¼;3)YãC•¶Æù³ÍÑÑCfœ`éG-wí­öŠ ' +>¹0”mÿäbÏ=}¶±¹†}õ×¾ÄÒ_ LŸóÿØ\ùÿ«óçÀöçWZï¿Òö'ŽÙ—¿‚Ò Vtó.›']îºÊÔÀV+E° 1¸ùãæ‹¿€&K‘zÛífþ,x|aꈲ•#cH;È­i©²… rˆºÞd–°<üþÌLôÜ0§±Wþ)f:9ð§4ænè]™` ÍÈùwyyÉ´Ìv›BùmofÆÀp_¹Gp,@úºŽ—ÆÙ:èØ¯^YÑÏ:lÿðÐ×'+V¥–‹ã6™íÄ*ÕþA/VÚ½&8Íò>È}سk‚ôbùK³‚ðÅTL`ÂQ»€ìCL†rAnsA––ÿDØZÙF ¤¤álŽ÷öCð03¹G´Y%5keÇ,ýHã + +ËVg˜-ÀQÓU™¹1ͧ‘9»+¨Í<•Ô*3«`‡š¦yAbš$¬õB©Té÷ûœ„oßo©¡§ûÈ/(l†µD¡d¼9Ê^öÓî“8éfx›6b‡y”¼ÑS“NÏØƒKºš‹Š0A· ŠÖ>ý +а{`y¥ ÇíõjµÙÙaæIýÚ«©H¥uÁµî£€:Ñ<Ы7×ÅMÁ: pl‰ 5èøú™#ŠAâe¡‰)íq¿ë;;=®d]÷.Hÿ™SÖæMø À à·åÙ¶Aô¿ü¹_Îþ¹±ñì àüÛÿç7¿ò,ïÿÛoÿî?üÆÍ»wo}ñW¾r‡DDé±rÏlã’ò PššfSY#Ø úYú3Ó Çx38?‰î‡õÒHWþœŠ©’ËAP¼–<,n,´Ë™Ö ýÓŸùáó¿(‘Ü€Oâmãœ'>R`~‚ Ž3‚¯â¡8rÛeëÔ»H ý/þÖWá¤u¯™Ei³ª‘j'Á]È€ˆ1Sí(XGžÖ#“þ?Jеy»™¹'íµÚN2ÐÕÙZu¶Óí´o|ï»IßÛßßi0m9c®\ÿÎ7ù¼u{@vñ¥W¿*éé3ÝÇ¿\n`ûó1¥“[à´<6ÿÇj€t€Y+öm<³ÎÜ]×÷VpR™6rD.Rúg#hkÐbtºžsòHY·}ªÜma,÷Ó¦3ÃMI$‡.vé!Ó pcœÃÆqù`ÔÖj&©QY®€,i0Žæük³ÇqaÁ (-þµ§*Ȥ†â’*¬)˜z°ƒà‹6×ÞÁ‘¥?›ÿ‚舓¾ª”Z ëÚw{žÇ^‚ÐK2ü,N£ô׸懛t¯ç©È$&²ÛKÔ&³VQ9M’r§`h`ñeêdðá f\æÒsy‘Šqû£»·7Ö_$r:o¯c< ¸ð´9žæ@-ølÍG#)ý÷eýq:|Š+8 ýÁöç@–xSÆ ,°cýɰ3lT¬ŒŽxؼaè ÊHØ šm9C¸ì´¸î®g”$ý/+€2é†Lë6––ÛÔˆ0Gr¿”’ ¶w¶ô)«Ý–®pc»;1=;ŽÕÇ´IèðÉ6…û.‡€¼½~¦†B™%dÆ 3‘7â +•kÖü|Õ^ñ)qŠ m·dàCîÐ5ß¾!1À °«3KK—>üéûàð‹ßøG ¯ûI.#ý_âûŒ¿û;ßøÎŸ| œ€+Ÿ}ùú›ß]¾°b{³,À&«uÉCÒÝÁ“F&ýáhO§Sĉ7š0¹âR2©Ù ©PÌ^¬ k¥pZ®-,.1ê‘(Ò –Ï5EQ¦Xç^rˆ”Š3ƒ>¬QÝEóÃuwǹüê58r‚Ë8af5!üœ­×·~v§~ᇺtöb†:csærºÈû¥ˆó†µgçÀ hÞßËÊ‘¨1BΧæ6N‹—¯¾¸|ãGï”Ê%nÌ1OÕÖßþs{þì;áz°‹úìº?û—˜}™eÖÌûù_úU¼ÃÛë•“ÕÝpÜ_<ïlݽøÒ/Wí_ôZ­–t¥ï91IÕ¨ ý=dϘ4 +š1Œ‚dH@u{†]› è=1އ%ЍÀ:³N=Ëß„N×üdëãîÖ=*§ó\¥\)é¥ÍÍmÏíb=8ÙΊÎÖ4êzéÌœÑ}NOaQE  0u 2>PØÓLF‘CÁßᤫ•Ð:©o|ÐöÜÐ>¡#9µniE=ÜïØ–áìâ+…ŠÛMx4õ©–×õ ucR÷ûn´OCièQªv<7€ñªÕj8 7&±zlê8Š-bep\·)Í 3s5§Óæ€á¹³³ T®ÿ?UŸ«^yq‘~–\«£Q—0+r1ãôaô¡3*$A?Þ?ôÑÊ>ÄvŠ ö•¤dGE©T3ÔZ2*#¼Æ…ð㾨â£T‚~_£†•˜ì ÄÉ]PqRÄy³V€£®z ý$Ô§šF ³Ÿ*)!"w•ƒ(ý8‰ÑuüɃa8@á›Vš.ÕN7¢CÕš6{Af&++Ko½‰šóÙ…êÖ–3W·Á…Õs–#[dœßSÔ±,K›º1] ö}}µC4¦Ô ±Cή]45ªxáL ¥¦¥1ïéƒ3 ôI¤y=¬ô@©¤«í]·ö” “$(ªFß›P@Ü rˆ®&øü,pÊ 0…ÎY‚nôG+jTµ†j+iOB¬sëDa2BBy¡J¼såxLŽT4Hº».ؘa?t».wÒFQž[aÄ7»&5Ù¹¥åþ~?Ø *âìîx]* èv½h˜lµÐ(»ùÃgOË–YMKZ­ZްhÔëUX°-[­S(©b)/~~¡»;vca¼¿qç7߀ó«+ãÈÏ×þþïÂñ½[·®|öêò"†ˆï?CPwnógЈÖuÓíõ»® +à÷ÿ—ßÿýÿî÷×ÖÞ¹õãw¾þþ“µ[7á +Wh|•æ½nã ®ö˜1|WÄê~þ"DèÀÃ/ÀêƒcLQq¦æŠ¢| ‘é}ˆÖGåCŽæsfˆ’Fª,èÁéÕX"nÑ}Äæ«×ò4–ã+š¢ÄÉ‚mŒI§)Eíh3jÿ0„=Ct0L+ð\ó´ »›6yÚóà‘çlià¹Ï”¼‚ç¨î›a^T,»N»s©†ÏçÏ5?<Òt{ýÍUøY×ð#þ§÷HÚ¹7n¾Ã¢K÷ +@ ˜èØUEÙ¼ùvõi´Dì§æíÚ8ò§šë°ÃIçãÍÊÉ«K/`;˜ï’¡±…]Ás^ÔAú‡Gt©aÏ)M#9 ÆÉ%ˆ¤”‰0:Q)c®ë¡Ç$¾b¨ñt &ñü9)A ,.ΉOØ*¦ºýññ¬@+œX¥5‡B•§8þAÝŠö©þr&‡ÃІq=Cv(XÕ²™ƒéoÛÈ8f¾OÜž‘7Üéìq­ " ¨^Ô@ +€¹F·Ž-uò&ƒ¾mˬ€1m´¶»ßù77@ œ[l€¹.ÿ8õG›ž»ûXn?bììü é÷Ÿ ‡#¼™€XˆË“6{ x'ÔÓÀ¡¤hØ×”R¹ ¢UÁ檫² B:)Lƒïûi¤žk‘±y0 ô| ñÅ@5ækŽe|´øË"ŸQ²†Ó©Ñ]«Y®´Û®"´3ós[[­{[ÛºRÙjâ39óÌl½nm·äbYýáí+Ÿ]Ø&ÜŽ3Ϧ!”Ýq‰”=c#gFV}ÐÚDäø1)‘®Áw\¯ÙîÌP*žûeXoçP0à>V¿LqUzŸOÙ³ÄzvŒf2L# Y¨[ +H¸§"ªº½¸M•NÌËX¢Qã +¬t쇩"‰°I{Zþ$à IDAT‰wÐ~ƒ,ÜAa‚4+ÜUµF‰$‚€©T¶F¹µ»bV|×CÇ(묪U³Z•:2L¹›Z­nyJwvña:N·ÝÆ]îí©ìžûÔ¼D=M$d°ýê«¿ñÅW“¡=¾ð&vϘö­¯®­­ÒxÝ\ý!óý“F +L¹|~yn¾ñÒU‰Jð•ÔEøÆ?üFþÁÞzÔ ¾ù¿Ó:9sí—¾øÍ?þC8Öês7Vß÷9­ûGÂr¼>Û4 û“ŽÝ ƹâÉ™U¯ôçãDû~X{Zg|8¶¶Üå_Äh{Ò ºÅóŸø\­r°ô$VRoÇ1©älÿ€ä²A`û¿ô…_ö\¸ïfôÝyD~^rX™.?ú.‘ÿ²4ˆþoü÷ÿìØ—†á‘@Ç7$¤Ï½÷ßÊ^¬7_|I £Àü÷ÞqÚ÷â›\þÌËÞžN€u +v9ü‡]Ä„ Õ…v&cš§71*`ûƒô×gqÏÉ'yTMéGôÄØËÑoPI xåÜÓcéæ¿ ']ÖÒZò½€O‰>0ÿÓ盦äBA††”WÔ*£úð1ë‘óß´t8Â.0d„ÄR*¦YZ˜›™è?,^þ†Qr·’æu{~Ðjm®\:Òõà k¥b‰;³øE{¶æ§o¹#ùˆ~Õ{]Î1ÀöÚk×àÏ#ðÝx‚kŒ¦·Ä˜Í%þAD Ö®–Ã}jêN‚&64¼g8¢„Zo†_Äç ¸g™‰&wVƒÏª4ƒŸã{à÷äñÜ3'æt…á4,Ëø³ûöü|}‹PÍ6ÿa{çÇxÂ<$™`ΘkoáŸK;mÛ§@ÝŽµ£Aô„Áa Ò<»b¨…ˆ~¤*/éáÖ˜‚µŽ¼Œ‘¡E²OÀ ØÑH×§ŽI|;öØA—ä› ¸8 +&!âi—Uþ úS`€\ª®Gƒ¨ß¹Íý€dH¡3l×Î[(¬ŠÒ ý‚<…¥¿`ÑïùiwB)ƒ3©ädb&áIê*˜,´œS¶ÖQ¸ý±,*ÝÞî¶HãÂû‡)^ËÂņ(%†âÕWH_Y¹"þAöòï±0tmýÃuÞ›Û[ÿÓ?þG‚²qH,-._o=ƒ™Ï{ËøêÑûÔuë;‚‘F,ýÍ£‚×ߺ¾²rNš}Øxî¼1©²` k4-4pØû!“[! QY Òæ L¸Mr_Ê܃0¯²„ÌŠ*€‚’‘ˆi…q+5ü•½ +Ô+¡”þ0^30J:˜ÿ Ä”Á­vÜláí'ì`ÏJêQ=^­¹ÓzÔ‹8þCó!dœQA¡Î,$0ø#ý$¯—6šÕ«YÇ€Tèyur¾»;ÁÜœükÐU™åíöûÍæ® ZüùZ™Fiö…W¤€ + ·]ù,Ç B°ýåKä\ráÞööÆæïÞnGüKü;耵Ÿ¼æ?Hÿì:_ÿ”ÂAø_ýÿó?þ_ÿkA@þ‹œ–ê ö×; ©Aú“À4(«Á ¹>16F¹OV•ŒÁ8Ô¢8¶ù/ÈöGéŸÛ¤¿E…3ì|AßÀ‚I +XTqf“çhìA8ÒµÞîÞ¹O_#‘‘Óabhd0öö{~Îy°ííãjD÷½¨(àÈOª ñ¬ª% Ì‹è@A~ç™Ó&xííf«¹ÎÈa¸ïÕž[#‡hÕ™©©ûê+/ùÃïÿú9B\ØÞÑo¯ƒÙU +·‚¹ýðü—^ã·™«0ìSà’®P`\°~ávå­ÞpÚmÑÖ½æÕW¿è¹çm¦j}¥õÁw’>³ðè&)ûA5• ÌÊΛ‰DS +L—È¥;~Їg8*$žëaÇ“:Eu{ÿ/goÉuß >vu«XìbÕ4ÙÃ)ŽÚ3žÉH#9–2ÖXŠâIlÅN´›µ×Yçp› @Î »H`àE‚ìñ%6֛ݽóÆ›]{“ÓÙëDŽ#yÆËb$Q¦8šQk(¶šÓdO«»XŪ®îû¼ª.’#opO…R Ùݬ~õÞÿûÿû…àÚ{dÖ%ÄJœ Â9 ûðJ×™u‚ý‰”òª:Á$0`c ÁŸ4ëŽÈòh:XfNíÝ¡iV;·Q ƒþ Ò_?BÙÃïÇBQÓ¡lTÅPôà$Á”UƒQìíøUǪVULoÄiôÏÍ‚Y`¦¡#šC¯n\šŸoo¶L1 pÙÃ(§Q4¬Î²„ó6 ¶Þ‰àâG/ÿ¨Z»}æt,ìŠ>i8)⫚ÌF!Xf^#9©§{ý4Æjý’0‡©*FŒš’«Ö·”œ$ìcè…;ðDt$ûJ¿Ž:‚¯oÆIçŒ)t&tÎi›hU‘g9¤ä31KëeÐ&‡AtczX^iNi`–…Ù†ÙÒ&KºQb¡æu=]“¢¼Ýn#ܦNˆªËu1QcéûÍÛõw¶½nÇmµ\¾Ï~°Ò8]¯_¸±Öò磥ùS274÷ͯ<ÿÊ +ë?ÿÁKW~°?ª/΃Y´ÉÄô”ñZÓÑñ rg†¬A-¥c‡µl¸dai.”TµÌjkï:VO€3‘È.“ÜüD´mM#D¬—Ùr‰Ë£^2Ó‹M©e`ù,ºt “À#Ã"ÉBm55RÂ^À:Ô*ܳwŒF©ãLsZ^w,|šÒù(0•ÓZc>Çßõ@¹×ë5¶¸ |‘ö–eÕ°I¢ÝØ!¢½pQÊ«–5‡§x€Îð<ŸI@obèøþ3§z×£/QÀçÕõç_|éùæ ÷üy)èKšqù‰Çøúòå§òÏÑÉÈxì'QOä± þÞÏ}OB=wv:íî7þý›„)ååw?¼òÃçíYíòûžû +ìÎj£fÏZ6e¾½Q'ÒìÈGDRFÇëlyUG B°3üÆÉÅ[¯û»amÁñý Ž(96­F.Î#ñý°@ë;Ð;H)šœ{ ÑÒû÷æz×÷ãÇ )Å`;úÓJ ‘ˆÆº1|²ÉÅ<íAÔÏÀÛ1é®sl^8çh˜çëÏx?)VDå $¦eŠB8bå;×@dK_pɉsÛR?s™i­^‹3,½Ÿ}ßã_ýêÞѬgÈ«îfó…o>sáI‰&jŸÃÌ:‚5ÍIeyn»ïE`ûw6šçÞ{yzÆîÞÎÊ\E6”Zµ³½í³~GVˆæ Hd…á&¹aÖÞi¬KÙ“9wž);õýžÆ4?¨ÌXôÁAÌ1â˜,)Ža‚;«)H2? *‰iíˆs-¢S.†9àúQüdTXñq„‘ÅF"¢Ø†ç.‡¹&±·/?ŠZÖëF¿]àæAdc‘Œ*¤þ×mîve`ÈàÀk@nö2û˜îŠn§»N•Ä–c5H‹3.1»üfE÷CN¥Œ§…jœA»æhˆ –Sze}að×åC¤îD¹iÖ`ª˜äÎxК[ØE0>^éõÚpF tø-žß¦×Ñ~ÈÜa9û˜²À‚I°_7“-vÕ~þû×kYt一ðàbRét:9}îìœÍÍ6µz5¯££ìâ¯:[ÝÚ|õ™o^kz3\€E|a5e½> {´~oýkþõ b^q凫ó„Ä7ÉrLDõzùŒ1ìŠ «ÈFÙ+à0´WÁJ¤<þyè‰Êp^vfƒ£HS&9àfT†;Í Ž‹$l}0ÀkA€&8œŠ™‡øÁð‰ +u}ʨĈá¦(²òòSCv½!úÅ å¢,0x­DÓà]E(S0! B!\ÒŽÎZ2¦Ìp/€³7‹l Ÿ?éÅ1¶çvúDZ +»A_|qõ¥¿G§í™ï¢@æoŸ½ðvý +6!=yÿ£ïATüK/‰ƒã±÷J…ñØÅŸφˆ@ôóuóÖKÏ|ç›|½þR«z¼×½íW[š>ÆCeþNüüÇ-wç@™5"T¢NË÷]7ÕvÓƒ³¦kÍ7=ÐyA>jVÑ^/Á$0x{¢sL™pAäz +–º(J™[iàÁ·cO\ãGèÓãÝØycȈê±VpÒËó¿óÊ‚Õç¯-œ8Cy3 + ¦Ò(¨ÕA_uZ8g­&Šï…Fã«ÿî‹`òk@ àÏd:H%ýÍךØ{L +Ì8^zuã›DÁ +: òenÀ°œöÍæ×þÏ/ÖO6@ `‚Âð«Ñ^š3¥C(7›y`çöÖìqÙ8Æþ/•*?¦¹ƒ!‹1d1æ$'‚#‚êàæa;0Q©Åœ®€“:@Cl““`…n÷ÕážAÔæœö–ÛÞŠÁ qL½¿2'É¡¹8ˬ¥?NþKDÎc™<]?àÆ[þzÙ<ÅUô¼@ðΉ +»‚D§ÛiÂŒUk%­”gŸŠÃó’¬nÂÓ4@ ØU“¿#Íjæ°{w¼•;+ @°¿Ÿ‡}Y Zê”®fü0œ_/X.{.z‡«Q9ì¢Ä:; ÎT‡¥œ°2ÃýбpÉ“Q‡R $Cn  ¼¸‰œ«Y´ÉW©<tüE{.ÃêfàÀ†~î‚|…¾rQ! D–ä¬Ö0ÿáÀ™ïŒ5=bï,Ë\KµFÝ›76›7[àª1të[†/\]ÐÞÜjÜwHÿ:%u×^m.PM½ß .=rÿµç©Áêžšƒ;R±^1Á8®‚€³ðaŠÈâ3ˆ¨1¡qÜ,Ï ä@Ä1µ˜9<Õ 1 XLƒ¸©­u¯QÓÔ5N' N•M…C¦§ShÕb½Ž"ç8¶ŽdtyhN·'!@¢¬Ô˜Ê(v³G#Î1OŸ›.áQIw£±:`ëM”þ¨þÜÈ=ôˆÀ&Á €ãì©û³?ø©•—%V*뀫߿zåÚ•?($‡Ï?´Üh`À9×Åæ¿<“÷ðÌw¾çî®Ä£`UéBóVTµ˜À™Y"ÇòîøfŨQ lÃ’¨za/ƒô¸û–¿¼Üð¼ÌÙ™yŽJå.P†ÃáK¥R¤d˜=xðnaÕjð¸TÍßéZ³ÕÞö\œzðraÈÀ0&UPnéºv,@u¦†qžOaÍ1¾üæ(v¯}癣÷Tà!MÀüÏuãæ]°£a€€ãÒ—:BÆ óïEj is:õzãÁ ,ýá æ?(€êqœÙ°ïQ×µ\啹±8C@ʉXؤ?–ÊqeKæ9%àMëüuÐFãvV˜^6†’C°Žy¨¦(D û$ ýçGåÀ ÈÛJÑèÅÅ:hðrÃQ72BËì5Ð)2}b¬/D‚Êž+µr¹ºçÓË †À^0Ãw/ÍgàhÌQÏJÚMB£Ã²ÎÂoséŸ&<Ç› @¤Ù¬íký‘q™ñ+ÙVÍßÈV9Hœ"Ÿ*ÿm.Å·h&Å|P¬«TN +gkÊt3x¢¨@õ§1¿”„­)ã²gAÓÀßQèmGX.9YR'Tæ*M°Ùò¥ @΀® Jrò?Yôöcïä?iœZ„ØTƤ`Y¯eûÍöÚ˯/¿û8‚é,ýÙØ|«³xO Ž0 ‹0Y"ƒwæQ!Ï'q/Á¾hÙ,Mh¾D+‚û%ÙOsë>§íÍ’?‰}Do0Wè0уÏÄ(ÐHÕhµÇ vN€€.$oéuAÒßçfcFªá‚z¹ò©›šõ½Jd:Ö0Ò¾S– 4AŽU…S­±ùgš«Xª@@i0íRL`+[)¡Íd5ÇbˆÜvŒÀï@P IÊ8=¯/Ä\‡ z²tRµÊá 3„­U_f«MX-C­Œ4ÐMAXMð(»]¢úC4Ž ‰5nD¬éºŽàFqÀ|#AàsòÐ6¿7 #.éŒiLšZ9výN´ä9ƒ-Zä 5ðèÀåž:ûà}ðO>wn{•}ÎS¥á­×q[•JC-U~㟢½Ù%aU%2 +’âiú‰FÝ U ëÁEHv%ÜS“Êʉ>ÉÒC u婪|ìlmyÝnóúzã4zâÃI°F€NcdOfõ,A÷€€yH$‚Ñ^ÐuÉ@–GƒÄËp~òÎO¾ð2ø‡b(#7V@ ¦‘BdP•ë²™pÊ&\xX-`ôð6æ [ýœøX)¬¿Ö©VÁÂåp²•ˆi6Èâ~„ପIØP …¯YÑâ}4´á fSàbƒÿn=0®chUN™zdÈmD(e™êá`È€3ŒQš‡üÝHŸVÊÄ]n`A¹O5$Í7;ac©ÁhòÅÒ&œ¡¶ÅØ0œgâÌŠš5–ƒùæˆþ8‰‹lk`ckU%6·”As¤°žÁ»Š“N¸Jw^ ¢NLF†*£´¬ËAsäQ˨\øð£|½´°àù=7ÈR %ŒSD?:ç9ଠ5ÌÊÌÀ˹‘-DYÄUÑêt¦¦TÏ—ÜÁ¶5Í<Ž‚ªJº·+ÕãÖ•o­iqI\}a¿Í‹ˆL uR®BÐ`û¯¼¼Â +À²A¡YïÃ9E¨‚¼ÊS6F¨å!üA'gä1-™Ò Py‰£Ð?‚¾Ç|é ¹1XùÏÄŠÎpø¼fœûõ¡TŠQä™÷°Ùm­¿Ö~ü"U‚¶Zµê)=Éo}»{8@J:@Éx-ÊÍôî –[X{åÝÙŸ8 ÷Ë,J0ÒAîÛ²êWEö…DEó¿°®À`éÏlÉ;eÚB†Ñ…^¼¢ê…W‚5Š¡*eÉ.S©F%”Xíê¸q!ÍÃVªVÂöÚ)zÆMbLi¾35ÉÑC\ÀÃUÈ>HPž`\·’{„0ÎÎr¼?#Ö^cPv»c”—‚u˶?Ÿ‡û +'`,-”øà9ÙmðG¿:à•ÀFît\ZvXÀ=ÔŽ÷Xp¡5Hëx?(mØ P¨QXbGÇ‘á_Ðÿ9,œß˜¿+ÕCÏÅ÷Ö3\pØʈÃ-—#²a-ÍÿBœä¾·½Å! Þ* ýÑç¢æ>0ÿY¬Wçgë pvf‰¨0MíæôM<öÂ@Þ_À6 @Þ¤: —¶µ…Ú]¥?þõ’|ð Œ\ú÷Q€í?³ +À©Ú® žzCϬEŒ €Õ²¾²jÎnwgùÑK‘E°i_³ìÌåÒ”êýàä÷ƒŽ`é¯dØnB\oU®@ (¨ð€ ´«µd€[‘—»U­øwȦœi–!ñO€QªIìïÙLnÁ]”ÓNö9„*^ +÷†ÆTI T0ÃÁLÃØhš2®_ ë7)9ðùÑ~ ¦ïzAóÕÖ¥ÚòìœÃ ãI²aÎ^ÛÑ‹ÍSôQˆ:@4ŸIñ;çÈp±ù²çÔMÖìèÓ‡½LÜû [×ìõj ü\róŸã?ö4梱€?CàbÒy±Ü·+¶d‹+ƒPÕà'FàRB\~™,ÆÄËŠÅÃt¼tÍbéÏ#Ê ›\ImT¬)+¸ÓÑ/_£ÚpL +%ë”ò¥w(¥QX ’”†àDä072#ô2æ¿»ÛwfHÿ£ãCýyAj@IÑ\«Ú·Ð¾©Í; @úƒ¸¾FUX3 +ˆþÊ1sáR]YÄï¶ò÷ÈÒÞ¸o¡ùF«~Ï<¬gn§€ ý‰ôŸXú£& %ÄÒŸû‡¹¯r‰´ IDAT‹… ‰"U’s>ïØ‘¤uÚ"®ö¯a´Y-V‰ÌHbeÉðbfEç×À_9D‰‘#ÜÕª*wPH0Ø¢1eD²Y¤ñaÛå88østDx­Í¬d‘òg·Þ¼Î:ॗÅÔþ0ÎÃõÐ4“Öæl8”‘ÁÝΠÂýßË¿ÁѺ R(ÍC@¦3V\—È:D?†Àv¶L*›±67à·¸Æ&8EcˆY4¸.«œ¦’PÀ+›Ô`wbM¥1K‚‹t³bƒ¬ðªV¤ÓgnüPÔµ{C#ƒêÜuEÒ§?Sò@èøÑÙ §_ø›çqmëN°/,ÏaZ¢ŒY+kôøÂ§Ó¶íìîÛÞÙnè÷ýôãÿÏ×1Ä#¼Eǹwv:VJ D[kõ…zw;ÁM^ —?2èE…§Îþ|2¬¿àvg•°%Î=ú8ׯ`$/¨D¡zVŸ=m­q(0Þwz>£W¦Í„,ó +hðÝáFºµ¨“Š1¥gÐX"ê¹–&jþ¡ÍõÍö8X0瓺5¥ÓZBhþþvLD¥o!µ û½\†·»‰5CÑWX¦öÅh ØT¦…ûýÈr*7"d¤šTðó&RÈ1üý¸V²¼g¨ˆ!W +‚Àö)|KŒ< °–ƒ°šr?–xm˜C ¥²©! ‚Ó‹˜ ¸§CÌsÀì–ÁEH‘•=íõeµ6OI02´š—LW8ÇL¾Z_SR”!,¡‘¦¨*BÒÁr1 +Ÿ`!â±€j9[ÍØ<”‘,„W…2(+å,È£L¤~OvÒÁ0Mkk{«Z­q'qu¼¢ã–1¥pˆwZ¤iÏˤU°Ÿä#8\-‡Ÿ_й:窄q?+ðN=›-Ö1ÒÚIK0{š¯ÃÙ)£=äXÃpG+[¾»Ûì ¢ú\#ˆ¨F…!F&(!1T¼;=}²Ó¢‹x4ˆÓÒƒ³íÁëâuÍärIÐÖ\¤ßÎ9f›sÎÖN{ý•æ,”’î÷=kÚÖõºïmÁïC¦%d<]œ_0 µ¹±Ü)…="üº&1U ÍÛé4 Ù¡6(Yº³ÙÚiµºþ'—®}ïÅÎvïÜ b?G¢4¡XǸ޴bw:ÝxéÓ{ʶÆÖt™´ˆÀ6Ý„óChãR0÷Ñr +œz #%M‡ +r:[¦Ë1\-%AhBHf O’ÃgšÄ¥¥hØ.‘f âo¾96cš)òfPKJ§ÕŒÂÈ…'JFñü=K:*®2ŒÁÿ|ÝV ÝGÎåDAÙŒH‘0„²^¶OÞ'Å¿÷ô©óÑŽ·¾l²­Öîí[m¯mÍŠ-ü‰·“%xž5;.ŠÑmÛ%>mÏ­× Üÿ ãÄÂII*‰Ó6Џc#pÉС^‡`zÜâjVRt©%E%>—[o4{Hè[²µAÙõY61è˜[dÿÂØot™ á[βXd>üö©åK÷?|Éw»–S…»¢8!Ygj°ófSÑm}†Êì +a\ìàH“µ®ÃÿüÂgÿœŸþï {îÙ×úûÔŸ€ƒ¥?Œ¹Ù¹C/Æ7)¥6Ú¯·æ_oÕÏŒ'Ú #Å‚ó_¯w3›Îæˆþüe ýCn"ºú´¬k:»È"É–ôÌ+‚œ8ĺ¹ÓögëÒA›#>áø@t¯Û »]Âø&«G5à%Ú£]²Yͱ%Uñw¥(sZ¯ÍKt³±À_\ÈáRÄ0´¼@sû®VFûW-Ô‡9³“”]ÁVVüS( åöQ8Ï⺮lme!J2Ü…¿‹o´fä…üÔNd¬Š (ì´‚å¡3n°0m3F Ä8ð‚­ˆò*ë€bƒŒ~æ©J^ŽBs›ç]´ùÀ¼IìG z²d2ÇŽÑi€£h(å!&5BTÝ„YÐ(”d7¦*º«óï5Ä%X¢*ö:Á`™\j†×†Š€¦ª“sëŽ( „bÓ­.H…s}ÖövÇD?(€£wŽT’Æâ`½ ÷“TËáu5k_œ’.ŸF˜Cºy ; ÔSç¯~ÿ¯®\űMba³ˆ³,$åçm»öœ“=?X½`gØ  Ò ‡7æß)XÁ>bî¬iXad˜:w©þÌÃnxÉ4ù¦‰~~E|$SÊcóæ:HÿÅ“gà̘°Œ`.(‘jàòG?á „»ÑdéÏÄusG°d£½ ô¯ÿÖï¶_ûkìüÏo~Íùo|ûYpÛAA<õÁŸdøýù4åƒ8ºLÕ–­×7A¦rJFÌ¿]_Y©Îoq¨¶¸jŽ‹DÛXÇ ¶ÞXo!¢<—LÓ¨–¸¼ }d Ób p¹LߨÝòáp·Ç–…yL®`«*ŸMµJöi’›T:,ôÔ`Å}”0}(é‘ =, =€è¤ Ìi™C–AU"(±([c¨ºt(ãCp¬¾Ð8ÀÅÙ`‡Œ¦¯µáÃï­m¾Ùùg…ØŒ*Á@\ºÇõëMÛV¹L×KŒ|éíx¤äá>ÜξuZ29Š˜&‰»Àm×ê&û,ýƒ0)en;Í>ÙëׯÃEÇõ"9°+Öt¡u»Øü/ü›Z.‡üwqŒ¨ãz ‰B‘En&× RCl˜å±°pŠ«ÈN@D HD—Å4èØ\ oØÌÊž‚ :@™HòÚw}Ê`a ã e=Û\$B¢uFNŠe+ÞèùOÐ;œõ…³N±ÃôÂ)pWä/Êj7Ê,ýa6ìó1 °L7‚YÇK€x¬^}<g©Qü¡$œ®`óŸGý?:€¯Ÿ|ÿc|ö²… j€Û‚r%Q?÷þÇ~›.”2S($éàî œ€û:z£Á +ÀÌëÒ!˜ÿg +è¯ úW¯> ~ˆòCÒŸ‡¤ä&Lv¢sK%^<7OpXŒœSTÉÀ¥b;‰ûf¸þJ«ÛA#«×¥§ÒM@p›ÇG`þŸ>Û‰ô ýâ±€_¢àà‚ŠBNeÆ,®ž.ðÆ„´4ç [x lò’•þ™Åƒ)Ьï±n°€4éûÏáCä?ÒŸã?"S‰¹W­Ö®__-jŒø™¦‡ò'æG†ÔH\Éš˜Ðó%> † Žð›Â&/‘ ÊÒŸ-$µð˜À`¤I j«0ÚïŠ,¢ :@к BÙ¸›Šx ÃeSà¤)¥)+¢E'@â±³-“@{ãJ(ÕšjÀ¢nJŽÁïslq·aÏZÿi/¯—–â_g? óÖvg»×éø êuÏ¿ãbèŽ[«UωÓp'Ìÿ…“µµçQy<°|zíµ&者zí„í´àAj A³ƒL“ o)wú›r?'Þy™±VÝ o5²¢0ÿ™;6H Aô« †JÒ?Ì:Òy[!1Õ¹Gø˜ÿÌDNGœ\LLð+E~̓Õ¯´H«ù‹K¨ÚÞñÒ_úå1ª+‹þ ‚?X(¯Ä}ùw}OÚþüÏꬹ@ÝêOínã§­½ìÂN<ñ‡•ŠœÆlýKF°4F6T ¾üíµ¼â~H³V[Àð+Ûee¢|ÜOô)ÕZläRöú®UÖs¸A½µÝ»Y'Dsý†è‡Î<1Ä’´ª7~fmå+úôØ‚ž—2!>üÔ“Sà 9Â!$^—¹')ð'9{êé§¿à´øs˜µÙ(•VëÕMDZ9ú²›u ˜:!ÜušÍZ%]Å—>øº7Ü™Õéz¹ +¤¦)Vmy¯sÿÓDЛ>ÜÀªšÔf«³Bgc8Ëc"”bÈ0E8?îí¡ÓÆôŒR_ Â'²"±Gq¯â`7JG¢³“‚Q—Ÿ#¤èQ‡Ác¦¦ÍŦØäɘɾŸ#Q_¤ù÷z¥2ÍO nO'4ðžÚ2Ã4eb5Ø'ÁþD á’*e½¤bƒ|¤1%§ÎÍ â¢^$&Rð-˜1×Aé`èÝéÕï©)=Û²t-±kÛ`?Ff¥ªi—ì ¯ßj4Í LEVk•­-.uP•A"IµáÆ m8@ çEiâ(9^ž˜f;AÄ…®l–Uz~›h.jsˆ,g:sÜ4qûvëüý¿úäO!„Ë[×tcå[ýç´œ¢œE ÄèјTght0“¤±>iö"Op+;L5gŒ8¥ˆ>”ÛÈ’-»²IlÕç*f[^!>Pµ ÛE¸Ó3ì¡HjX0éhˆÝLÂ…¯n»ªHx£¼ˆm1e¢]›ŒYÙP•&&¶Ü ííEŽÓàþ2XüššÖ@ާ¾×j“†ßv/—N7äž äíµÌ;…*_q& ;‰åé^–íßC[GŸ2OÜ7 ç3÷ŸètZgD=|··Á©Õâõõ5ƒÄÓÍõNuÞ:ûðY·ãÏ/-85ë¸SãÕm}Æ2tçÊwÖΜ>  sv‚f"+`_ͧ§@ QPuì Œ“ß¹Ó­"*Žâ˜Bö_ˆ½(P«%Ceˆ‘[»Ž'q§IÉ@—fµ4‘rq-¦¦6Û㦼 )Î0âDV¼Âµ[éÄx½å*IÓ•®2é!:‹ +µ"€8Ûm‡˜òòÁKì°P)Ç¥¬[QÇànì!©‚{eð[·ßâH5>B}—îeÄPÍ +]…˜tY‚¨þ–Ì¡~¬—q%Û„;®^©cz²,,ÔÖñ¨˜6 ; ÇѺ£µÞÝÛ­õ¯9…Sl1Ǽw[¶5/¿ÿ#Q?<ô.tº‹À…qvù#Í×¾–ÿDÿpX¤ŽyÛñÔS? dzW®=ýÿþÚ‰;ov„¬Ò FÍ0)ç™¶ g8ë[ÕùÅîÖæÂ}‹•ŠÛ¶=cBhG¦BbúQ`g…GÈPˆ`ד&ø œ¹vc\;\ÊxìêBgGm-[O”kŸ±Îdf 4'EV§˜¶¼´}!$fÏÛÞ|“Ü?Œ€ ðÏ(«×¤N.xÐ +8ËyC E„äóŠ +ç r<½n×®JcܘË=F¤­)iØA\«™ÆtãñVDZõ³o<ù·¥ë̘înÀ¹òw,ýÁ¬fŠd@E˜¶([ú§‰îPù‰¼v•^™AÔÙvÅ6;(JN4°ðä>bO8½xâô~æŸÁõ·þú?owÞZyY‚v­¾‚ñÆsY! >ÉÉÕ ëƒ•C5DiÖŽ pÙƒÊ2f¼ð }n äfPLhê”’—Ïæõï°ÅTØÆûñÖ¶&°9©qJÈÔ̈ˆ0Á Ï€§Âœ$´Ëȵ§æá>òa®çŸØº}‹/z{@æöècŽéñ0§lÑE5ª¤?ëF-œÛ€GÀ]BU[%Šó0Dx‹$M@ô›&ñ–¾(.\ÄÄ@»ÕM•A·ÝãPçækTU³¼íÞ†ØZXš_$澕>U>?ú2×–‚HÑ‘8ò°@96,ýE– dhE>¶æK×¼ÖæÙÇ?äï´­Ù:s¨‚‡»u÷Vø_ùå_ÿÒŸ}AÞVAÌæÓϘ_9,„Aò©§0”öñ?%þX°øöw®<ýu© š7P°6NˆD îåP/{L~5}1yºnt@1<‚h´šÆakºÂkFP`‡‚û1{fEuwÐ/XiÈpÙ صbºý±,âTóyÑŸ¦Ã‚ÇYb‹d8„ ¤f‚^“¶ô•1 aó?—À&äUŒ­™â`*·!1:(B‘XèR `xÙžVÈ4•ˆƒÏˆ‡TÔ æºˆÿ70?o#J +v`úƒ"dÕxBå ÒlÄ€ WµŒœÅ°ìÀI!’a#5„8ð);[›³$.Ù@†nÒöñEö@îçç0êd;»Aâµï^ ðÕÿúô¯ˆ±8:lvó±uq<õ äðÑú!8³øËo`§1¨ækê"Àö×ÊŒO+y:K7[_ þµ‹g œ¢Õ´žâ¬Ô¤žu¬Ñs›,ý‹¼²bBçÆ´ø&?EEjHFÄ¡ŒK‚©ªøÞaWQV@S<‘‰$qÑw—8#ê€P‘6³ÄÈÐê6|Ѥ¿NrüLacºF H7†ü´GhqƒpªŽÛõ½nÕ˜ÿÛŸ3Ì™ú=5ÇW7­¾„™iîgY~°áíÍ\‚Z(h¤€ˆA2F,òŽ0’ËõN°Ks[‰5"GÆ‚}…å>øI’°£À€ÈˆhþácùÁÇàhna÷ê€ÕkÝ]¿½ÓdÞwaå»`'ý€m¡"Ã0fUÙ@‡~@Yek ð…;'D€ å~À©æ’žu/#²M¶Þ4ÄîN9’¦º¢˜ úƒý±Ìuƒ6öôØÄAÑÿTzyGkîÈîåí².Ú¸Œè`b™-¹¼ðÌÿdo¼8A XÇЄgét€ù/ЩÓJùîPÇa£¥‘ÒÍF{»¢ÿ¹uØoÕEköÞ*è€êŒÕu½õ›ÍK/¯¼Š»ìÑGÎvïølû›Sœ]—æù“ëj]wXúÙeS:êÃ~Ìæ#Èýl†ß•'Y޼¾'»f? %v + gÛ_Uõ8ޏ‘ŠÁeìúEáˆs€ÿ5+ Û0K;™ˆr ’ÄÈ]†¹Ù02 =Ú?,7Àü).½µåÁ.C3+ CEAš0‚ Q4=€œ«Äx™ !æèÃ05D‹âQÉ(SUYшÛm~×!Ð4VAt£n)#–/<yí¼ÂÏ™²¢8´MÇ *@L#˜0ÞÇdö½K¥ùųW¾ã·~ã3_øÜgŠ_ q~¨Ã6ˆbEEv£h?… 7Šr~DhVVÞËa÷•Áã—°qìëßxö7~ûÿУp³Ù^$(:ß%, ˆ8½©«õº]•2K¾ßé¼y˱¬ZãH^ +2¦¸Î†H¹éõ´$'’Qƒ`!‚ù6a=¥%,^&ô<…ƒá0E¤mCïlt:;m~Àh›“pÇü§hÄ^õá!ÐsÈU‚‰¯Œ$"hå@$¨¢dM+~¬f‡©šu‰æk^ãv#Jß @ð‰>µ¤ÙsV§åæ þ.Løpö8’¨x}_²gíæf»±XÿðcŸøê_J¨ö¹PpLiveS!6a‚]<ÂTšJiaA¨3/‘B6ÍütQ¾)‚«6l’àœ‘g섈"JjªOlÑË5Ù—°w°ê˜»<0Ø)ú´ç±&¸ P ß„,Š`kAAònF|60,\V²°0Ï…!ðG"ê¦×LR)£I¶¥‚/£2+¿r æbæ$Ö +pЋï<'Þ »Zãålï´­š ¡t[/<{öq‰Ëœ¡IÒ?J«,YØ•ÚÀrÿõßøô>ÿ™Ã/+ Á½QA0™G_ÌDÿ×¾ùœý¼N=̬?­jÕ§Öß…Ó§íYG|O€ô?ôz0Ê0L°ìÊñàíÍÎ{IÕòúñÁŒä»°¿î ç”w s‘bÕ©TÆÓËe XÊ]b}ÁæyœÅ:{½!(€^o\ ê‘« «H0$婬k$„¸ yÌ%pšk\Qj V0· 3œPö‰’Ìaêv“ÆnT—P˜mCâ.¬& †À-ð +õÝ ÷€šxŠ5¨ðxô© +ÅÙÀhl†rß}Kº$,Ö€¬-ζåsŸÏ”§?-Ž#åÚã‘â¹È›¡ä?'²lrμã§«bTziÈ_¹ò¶*'ÄŒ‚ÀÌbašŠÜ%7ÒŸÁŒàx+2:KsjrThAšA(ëËΡË̓£®áó,ˆPXÿ½òÊJ›òجä{§Àl—ù¹ê¬)$–T˪Lç¼uµªƒ¨A]—MÇAqâÓMzÙŒw8¤ 4QŽ`ç|"—¨”!ò!‚Ì¥Vg/¢½ãIÆümã†x á¹îå{.1cÁW6@Ä·[]8tRü›Ï,.Õê„*€Ç"– ^y~í Q&tnw'1ZëºUÑÌJÞpnåà"kþà„³ªåÒ?øc"߉gªúT"²*_ðY¾w›H;TˆEwÏ4䃃9ãûÌ ~'°6H ×ké,xf¡•‹¬àÛðw™Ä±.ã´C—Z=¯ Ž[í`¡n&ƒÄ®Ø\ëÌ_šïBn¦Í +¹DÛ¡8AÏÖÀ+Û|mÕ:&C䌗kh¸;`,œ=—_ëô[þ`ƒh¤‚É…G{Ž, :à—~é×ÿüÏDZ ,–­Š²©ïQ|Ö4‡è¼mšø÷ÿóðŸ/¸ÿ˜aQbjíêÕʱJmi©³±qù—Å™­wÞðßEù ÚÕœ»?ØÁ Aò7$*èÒ0À3uš°Sh6gL¸(èçÒA/ñý(Wì²YÁAgÐ©ÎØ–ÔxL•¿|9'ÌÈŠèEÖ Ã)2×Ã&{„i¤ÂM“*R*éÏŸlOcê«Á2ë œ€æ†ÒŸÕ@¸—€èóÎ,ýáŒ`Ñ%áPÜ\Î^= IDATæ#¥9ADUÏ áOÃѨUA€°çpßr‡0œívÏÉ?^N”2ÕhVò…³L/ã¸-:d}1$2<0¾uÉ'&„ÌiÓœ‹*q0ËùüB'–̱ZÿgŸ„óC¯< +ß”Á‹/£&ØÜÂÐÄâüáÜþLjSæVòB»®E×u]W¨±Ç˜áA`¨*ñ0F7—6HÇ2ìÐ(ØÍB4‰49iÏB9"øósóód߀`à0º“ê鳇#Z–¯æû™r…‚°§±bÝ:½í<ƒÈË@äæ?¿…EjÖРrÙBL8 ¬‚Œ«Ô€ÛG‰Ì€]sÀö÷›ž3CUŸ>ƒËc™² ½~Ä}RØ™s³S'|ºöæŽåØ ý™9€}Ì\ù>‘ú=VóÕ6èÓÂoÄ:ÎQ~G¥¿ˆš ÒŸÀ¡ !ŒH„ÅG>>þ%ÎÕŸÊL€¢dmýCª8*•´$ Ò¬^%ÉÄ=«„dfH?¢ûîçY>MÛq=WFö€ôç‘c×Ù@50ˆâBCraÁòƒ jéæŸ”Ô€L·1µò´&Ɔ àëºß­#éðÆ`'‘Š»Óq +ŒÕ Ð ÒŸÓðEgN€ù©ðbŒüéÕx¢•ÿò_ž†ã£}êÐÏ#BÀÁ«Bé LÇT]{µù•¿øŠþ;ŽÆÎ©¹EœPp~æOÿèÜû~ŽeWLþpFWÜäÙ³p°…ÇõÌVATY¬¶µí©%Õœwå +@V)Pƒ®(p^s ˜Ê±õ ¹@ÀåÐùhµñ· hžËe×i ýï´Y°èÇB–‰¬j(Hdó·húÁ”õ4É~(‘‰Á7vAÁèp4)òM© -û‚9^2[µ vî¸ÌC ÞŠÀü˜@¦iœ[ð(ù V6(€ (BcòAðD)­hÖ9Ÿ {ò+—OÁüÇþ E^”(‡1.£bãÖúÒ‰3E{ž`„À¹g‚t€8:Î?p L£ó^úø/tÀÍk Zí&œu¡;5\ê ÚÓ}в3E£%8)A¶îé3ÁºÔªÆi¡0Á2žÿ¼­$—þ +à“'õ|»À‘ƒ¾/è™§¤ÂÑ-ì¡e †w'@󟧔±²ÁU)ëcâšB¸¿ÕY­Œ œ‡ J^$¼¤Æ¾ C- ÙΆöõ@ @4/êÄÌ“¤’n,ó]XôóðÞ†³Êlì[{ɽRŒ$ˆô¹Ã/ˆGJ!ò[¬Xú耕ç×î]éßz³5Í59ýz9SlÖ! ù4sR âEilk¢ÄÏüV ÷¹éùOÀµr®’APÿ6œö˜ †¡\—œŠ Kœ¬.V ¡àÐÁ+!{æn²^Ô³k½ñ“íõ’JE-‚ãš-,þ2»˜ë#L´’bÙ¦KXúlMšèƒ°¶t +ü,w»°e¬:7ßÝjaÏ[è_¹ríÌËUòCÙÅä9´çªÍíú¢Å³.Ï—íGÿ§ÿùôW0œ–à#_.BÜò]{ûÊÞ¾÷ù?ùÒŸ|þK[›M졆át”‘èÆ‰5cž:+M¶@–X!}ècï‰1©<}ÚïËÔVçÆƒ¨2­C ƒ%‹A‘—kÿé‰êÎè\(ü‹EœC1ÉÀÀW&Jz“ßδèvðAGÄ îRNêªÚíôáe0$Xf)‚< +crò™Rh¥xè÷Nuh¦‚‘%Ú·^ßõ=ƒW«Í™RÀ()Öõc‡$\t`gVà†0îM¤Æ$ÚüíhŠèÓ¸ÂãÅ“ê(¥-MýÉ.È]ð'† [YÜ„ƒ,òSBç R¤ï +&d‡e‡Ö´>z½éœ¥„ÕÃ~Ï_\XözbBÛ$âONåqg&ÈæüûCF’íУH™œÐþÛñ¼šmÚÓllêjòJö‡L35m*T»ë¤,ÚÞ–»Ó¬˜œÊ#%žÍ4 †Cpç±¼©i¢ù|ãæÚÅ ?ûÙÏý+1P.¾ Þ<ÄûCÀ¸‹Ë—/>ˆ±ÍN·µúÚµ[k«¯\T6݈^,aE”’ÆìcjYcœ¥tDˆfe³Šó +ó½ ÿÌÉ yˆÿDL=“áz–a&klXb +°¼E*ŒRFK«x¦¿Då}«’`Q©Y¿GV×øadB5ã¹í<_=Òä÷#L*x¡ËÚHËÐOMÍîFiÇß0õ*Ý­•ˆ€íc”eÁé˜M}ÒLÒU«ížßI +Tnq<."2\êD’€­¶¿:`™PœšeZjã»ÕÖ›0ðýŒÇ¸{Ûå¾¢ª¢¸¯uÂ,­šíÔ7ßð´ ³³éun»çjtwº;;Áì¬ibqáô³×¾«•o§iOKÃ8¾…V>PðãºÏ‰R?Sœ\Q˜¬#!¥3<ô±U±Õª×ëÚ•ªÍì‡), pÍeœvX0%³õS;ö)ÌV’F|°UÞzƒŠD ˜,ÁÌ”`1ƒp—­Ž$yôÔг¶m_jlÞ"ü êq'ÝO/½GzùºÑè´ÛŒäÌ8?óm7D ;ôöæ­õgþöéO|üƒ ðàOÝwŠô}3‹\išØQ MåÖ3et࣌ŒÛ]SÇ*YËwSåLYNÚŠ!Ó,ô@¥;)rLlƇMJá™RBi<МöGìNêç0‰¹Àh¥QÈ·—Ôˆ€/èÇù5÷|`ù2Á[éHvª–•B³.‹þ"é‡U«·ˆóúìò²Oý ÷ûý6,ë€õWVfçæ9Òµä>päKYjr!}ð‰Ý ö‡Út¦ÙšhßÍYo÷²â¹ ¨‡w,¸n¤¿19~‚¢+°üÈrVÅ”wJz^¡ú%C+„g §*눻QTÑB%]éßÛ KÚ„d¹Žìà$AÅ´,s‘H_]Ï-¢’J'b¹êA:*¨[¤¿ž“´pžE‡Š~žuW¥\«š‡€Š£³Ý+ú<VpJG°Ë³~LHûµtŒ2ÿ#âÐlµ¼J϶*ؼ#$í¸ŽWCÁÙ(;yͬÌÌPbÎne# ‚»>n ŠXrvšu@QôQ9yœ:hþó¸«è?:–¸Çÿì3_üw_½ü>ÔŒõÏä_DR&_ Òßah,%LÇ&¼Râð`s ƒªHv4î Ër"ÃÎKi+I€êú¹â.jÕ²:O™°Û]„­ÅÇî‡ ý¹o4“ƒðú’rg¯7õ*˜ÿù?AôGq:@+s©.¿%E:ós(Ž=ÿm{wGòr¬ý´@7Ÿp%¤ðšU¾}?˜ÿÕª gUi×êõñžôºÍsᬾԼÕjƒôgÐÚ‘¼]ûnç-Y%Õ¼u}íÖÆ©_;õ¹?ý¨'ßÿ›7Öjó  ¸êß4m¸à¥(>ĪŒ+¼™;ùcæ@VµŽÎH1¬ª¦]à ¢_Cg#?ÿQK(´‘Tïèä$Ø¿”*âðÚÎGnU¤ÌÅte¥l +ì„fFˆÐ:Æ‹ÓAöA“F´çwnݰæHŽOY¤Aa¯ZÙØëwý]ãÔ»°÷>8èv”IMå˜$¬Ÿ=»òlÊó¥ó޾ÿç.céN±t’‰&ëUõœô×Õø¨T––êËúÒÿÕ²÷²7”MzIj˜Vãþ3ºnx]JG›b4T2ŸÛnd•5Ž6&{þN{óÌ»/¢)§ë]ZÕ{U²ìÒt¤ wî>ݪ֗ãݦ`™Ý¡žL ÷Å÷¹æ;<+&‡È(:Iv“ï%-!\BÝ(2–™§–+·vÜÎñ‹ôiS­èøT_¤l¬l×nmt®¯ošÇãÞÛÅ-‚ñT<ì3,Ô0UhŠi&Ù”bãÅ[°… +žlŒ‹—ÅÍáf7TO¹ÈTKèG­øï6ÆdbLf:3*vš ÒîN¤R«zu¶ +V¤jªöq»s»Í9¥Ò=°ú ¼íæÍÀßÅÏ¿ð.„〩;ºSµÜ®¹ƒîm÷\Ï?qb@#&Μ\iƼ­Àœ7ÕtŠÖ«…œºC5/îîË5 ßÛúpDÝ+£Ržì1çØö¥Ÿ|?ÿ3.lÀ£ÌC½œLb¯„ò@_ùÚ—×®¯z;í„BÛ"£4)¾¾8¸ß'g’ê—繉D‹£×쇆il¶¼jM¾Ì™žîá{m¾ê+ý\(#…kÑ›@[,xÏ‚Í|T®ðpµIÌ$Ã!÷FƒØÊêñ´i-Þ ‘>:†åˆd¹ð[Û×0 eÀOëäÁ·]×(—"x´û‰QÏ“ðy2¾u‰õ;‰Ì`Ý A ŠÆ]¡šT:»7Jª¦Àmî;~ÜÕ3… +~@}®aèK !¢ØËž=cÔOØãi¥ ø“Hø=ÐC*W †œ?Ð9§À*_öÇ‚“4iƃ„e®ZÀêánXoǃ??œènmu1ø }¤t¶w@ª.ÜkŸ¼žW ¸ýܵ«X#~å{ÏÀNˆ>‰8`ò⵿û.x^¶‰,Ä_þÏ_þÔÿþ)¸ø÷_þ÷û§sކà4‹»ÈýâRµ:ÆÅ¬† ©†1aÌF”ʆG“HÞ9 «M”".vàL/Ár`ùL2ˆeøP¬ÝÀ.ù»à5šã'£ÞåúoЈ=?:ù@Õ´58?Ö%ÜH1¯kŠ>…¯½0ÂÈ+Èþðyn?Ô°nýmu.ˆž«ÑcƒsÞâu6Mj@7‰{þP"¡þŽ¥öëG?êÿÑûá¸ë_ù‹§Ÿùŧ.ÿ˜Û(޼J—‡{Ûo<´8oáÁ82¢}ŒƒpTɶ'UXÖÁ~\½g~Hÿ.BŒ£F9‚Jø½|Î’ÊñlBðy¶£c07 =ôn*ã¥þDÝ[ë½Ò߮ڨ +]Á„¥–¸™,»ö6)°²XXª‰ïøÖöŒÞÞb6Q;èÎ+Œïó +.\ ƒq" À”CFëhèÙ³ÄËh©Ý¿»#ã?ùªÀâ?Â瀣Ӗ¶WÙÿRçvŽÚqôaµÚÕ +ÃÌ]XF[Û±-Û«ÀyÇ•yø­®>­Ùó&ê35§* ýƒ½ži½m 1D˜.é(¹ë ¬Hx4dÇæÝÆG~þc__^ùÁ wýíÑQÄ{Ÿ9Üî¢? Bdë¯4ψF®VWÖAúÃ!È„g<½ûíã ”Š‚°CÃLúq·¹~ÄG1Éb@ä +òʇ0¸øSÜmÀ}g\„ZCCJ¸Ÿ:–æúÒÞÎ׳V€cé?äOLu)«g«Æ —®¬"Å6Þ˜Ú£d÷øPc¨mÜ/…ç¢?ßÜÏ•‘ ý~¢ë ”T8P PX•ƒyÁ /rözᬈqV#ÊzV¸(ëâ£_|ô18¯­ oºò÷/¼°²ríï®ÁÁ/ûÝÏüÞcï}ü¹ï{‰V´ +ÇÇ>ö«+/àk–/Œ¹$ÿ!CUÍ$ 2º$AtC‚M~Œ4¤ã b$Ù—PìzÁÆ7î„E0þ-|¾ªÄ_êÌßK*¼—Ô¨ +œ²ÖI+A«p%°­’B#1u 0¼X:¸U8çwðÑš'‰C8´É;3 61V‚Z„ਖ>D¸Û¨~ÿô‹wÉý‚èÿ˧Ÿó¯!¹†ˆ"ß}îÚW‹¯Ãë†þðýQß’ë·ààWÚUŠ$ìö ¦²BÆÁÒ_NÓ¯jàú¯=úÔGø‡9jéü¨$ò5/z~=AV†äðV2¼½»:þú]éb7¯7õ)ü´¨èX(a‰Ø^@„|¯Þu U}¡ý¾oQøò€(&Ë%£jÁC(ɘƒ~¢”ê‘ÁXX8¼žð-…> Yz_1½í.–le8é`û;ÇT8ÎR¼@7\‚{ÝâLÌj.a·5 ë7[Ü݃ßtZcúè¨#ÈÏ^@mnÁõ±ÐàÀGNÒcòÕ,¢Çó{ðð'„+Õ¯ç ¶åí¦4I00ý ÷Mã0‹=¢ ÑÝX<óáõ"3£U©ÕªG_@Ý@r©ÈŽ%øì9€ìй㚰 IÃ>2-ÞsÉèÌaH‹PIUÄ \Q\uš'‡ñ†i1°ôÏ»ÌA©c™?ýy=ÃØPR –þ¦fz½¶KaPá€K]¹GR¶¿`Å*uª3Ú6÷‰¼" ÄêIlgͰHú‹ ¶>–@‡d¶(²ø‚×½yûžÛKôxhh%Py`œ€Cmƒ0®]ELÀŸ&€þ ËËŸø5aÛN®‚¿é³Ï=:`ùá ŸþÝOÃ?ÏÝŽ¥??þüï<òðO?üî'àâgžø¥Ó?q—ø!ÇY.K¹C ;®TF|S™Yd˜¨ð$"6ùžYés‘B•¬±|§YãPje3)óreÀvÆ¿CÑÏ Åèj[ƒƒ[VÕb”Ñüg'@àöˆe+é08»³ùÊ*èùŽtÁhYï@i&itö}å‹?y1»ÈS’ŸbÛŸçþöÛ‚Ìÿ/þÛÏ>p›çˆþ×_]{ú¿}哟úôêk«nçò{0tâä’¢Hûà9¢“·Aƒ¯ »(¨3Ъȥ/rŸ +¦ÑÆ–!YtYA« ŒãÌÿøßØò¹`²ù?ä¾²6,£»‘ÁšÅeÌ&Œ&SSçE9Î5‰}|U<(­F¡‚Snƨ¹R½ï–¦q“´^¼êwÚ ,÷¶·tsN+)í >>€‡~êáöÆFÞèÔ8×øÅ=.2Ü¢Oÿá—Ö~tý«ÿõiüÕ}u5ƒÝX{yí£¹ò/àÔÍΩSK^?Bkì⾇øiá“Æâwä;§Ö»3ç^xg™ZwwƒÝ^ITàõéÄp¢ Ö +z[po¼Œ&&”S÷£VKGêÞç»p‡°OÂÐu0£4eÎÑ ¡ §g}¦áû¾^iÄ#_Ó" Â2`/Õ׃7OÑ $›Bšö†õùj,8+ªVÇIƒi vñžeç÷~?Ƹ>AP퇈¼=÷*Ð\͹øÞsŽã<óWל™é \p ÜtVù.Ki‹ÔJÅA% u²tþÝø [­õuÅž›·©Ñ´·;ÞHëÔ0Œv£á["êÎöÄ­[(ຽ}ÝëÕºí·:wÚÈZ—˜6luÑ85_é—P{ ^t—’F‚¾M{[8iöZ3è¯Å¥†Q¶— EÕl§‘«ÀRTÌæÍMÛ©ÁE7ƒ%?îÔ4¡EQ{qÞ~ñå5Ú^·Ó8±¤M²™¦lìlØ\ª4Àï{ý& +î_úGZ¿Ù¼úgü~Çë·áìöUKTÕ>õë÷|‚ôïGLƒCJq½-pSà\ÁåÕ*–ÛîÃüP}&‚»Ò£a¬¬~•ìØXÀš}¼®L)í¾çz¡®«~ÀªK?Ás}æÛWA›bTM7Vš­îå^‚÷¶7Ý8JÏœ]Dpl˜C«ŒHïG¥žk†l›Tƒ=Þ/ø¹è”1yƒ¤i“&ÚPc²¦¦ïk2¡Ú]hÒÇæÄ¦£f³¬æë?NG +Yà‹Âb0NƒépÈÙ¤Œ”¿iÆ¢ŠöÕ['%%}Dç¸2¡³·V™Hõ vý¤beÁÌÄ–a `SÖhÐ’ÔJØÓgϘ9q¼i”¢ýl¢‰ã—/™ÎZŽŽ´ÉwÝ +Õ0·ÝÃC sÙ¹~ýy¸X}uÍžw¼äÛßøöó?\yøÝË¿ù¿~~¾|þᕟÿ1‹Ç.ñOÿ8õÎ?tîÅ—Vá¬ë¢:§l¼þúÒñ“±à–]ÇUBò/1‚ƒNPeʪN[>LHV¢v}Œ‰®„›à)#ìÕÜ÷R )Y »Ä ç÷éP +sÄèíG­7ñ£ju» +65ˉFñÄ@poÙØAʘÿ(ãDx{¥ƒF°UuŠÿ„-« gžÔTÝÎlÆVy‘ƒC$Ω‡ÎÞø‘,•ûÃ?ø|ñ¯ÿèKÿæsÿi‹HzÏÞz5Úë‘æÇX?ý;ŸýÌ¿ü­â_·«µ­=Ⳟ2óŠ£|,ȯ…%^_V˜×ú =k„… ë¾Û鮿²~æ3ìœ~7š ÷1À:â$ú1p 4t¥âÓ°,KIJÃA"åH¾k?I&¤õ ;ë ßÞWSX–éR…Ss IDATûHgêk‰ŠFÔ †GÎÚþ.5‹w,4_oý¹@ãï-ØõÍ™»Mq±ü]ß(ЛFk%Ž}ÌÀF˽³å“Áø&3pQrÄJËJ3€Ã¼ZÉ:&¿¸ë\…†wþN^ô#$1žÖMÃìlûì`*éõEã$xØl—G°üÝ =7¥™žß¡¤Hu6°Ñ8™¡ywƒ3§kë×±$üòO ýðÃóž?Ð…ž¥ÅF:‚~ל®Â™ÒŸ5Kï},ð¤ßcMW1åž•“c(ºÃ§Ã³ÝO¼­€&PæBþ 6¢Õ#1«Na-Ugïò¬s aP`—0Õ0õc˪ÊÒ£‹ ý²î5EanÔèS:Uº¹¼þ)‚„¹.Y=¶jZbÍ(‰mtVÈØÄB‚DG'SS!# !(Þ;”ý|ý“Pê\̦Vr0ìÿ^T9h*Ï K(¸)ÜìûÔ¸Fid„b¯üWÒ·2¢ÜfuJý8wþÔÚZ“ñœ5rÙâ$„ ¢R-A Z¬ùã±ñzÛsÆjcýÅÕÙùZõxMd¢Ÿoïè¢ÿnFr&9bˆr¶Z³ÁñêÍôHààSq€PÀ`gLpÁû6-»¹æá޵¦à¸°é‰Îóg½Ä +èXÖ°'Eó&Þùû—Zovî­Y3f'c]÷w]4uw¼+Ï®8…¨þpÁ:.^Z}é¡sÁÅÿ¯/íù§oÞÚX.´ãƒè‡£³5f*-J•i4h@úó?s˜_]·‰~$KÙ;€– æÔ? n:·‰±®O`A[]8üžÔµúÝùE†¶ËÑ•PÝŸu@­î @hV¸cƒý‡QÒXŽÄ2Y¥Q@KÂAãÀâ…)k†Ã¡1ipÇ€‚À‚¨„<—ÑiØ®ƒ²D7‚ó¨D&G(Â’D”à,ý£,¤‰ ÛÄ¡ N@³)'»Ô‰¥?'pý—E³å–:¾YY0ÖÎÛ*wÉéJdQ©޳ìƒÂçäI×"—²·Ûrý /ïÊ ËÌàÎ2D‡4ïµêÌÿÇÙÛ¹q¦wb/Ðèžnöì&f@@‡„HÎh¤¹Ã•Ì%#-zµ¾ÕÖ^âu9¹Ä¹Ë9{—Ø•ä/»œrÊ•«»JÊ•TR©\ʱ“º“\®ÊŸ×I¶¼özm®mÊ¢éÕr,îH³C‘‚83 ÀnÓÓ=Ýh ÏÇÛž!µN®ÕÕjbþxßçûùýžm9}õßûùtãûïÞþ«ï®­¡>øßÿß‚-Hÿ_ø¥_áDW*ýí9ë6 à9 tÀÎ6 +LÝÐëåKÿáþ@™D +@˜ÅJúŒ[êbéÏÕ:²"Hè\×6Yêd—JÕÛßã§7c öý`„:ܶR-陼5NuÀÂd–þ‚DL&qú§9*m¿¿Æ! AÖ¨ñ½¹±’¸ ÷¿õ‡ +ë‹/ÿ¸¿'>má’ílêt@õ¹úüŸüÌÓÇIP¶sÍí{-X/ñ…€MTÙ8ƒâƒÆ{sós° +¬þ\貕zœL”ÆHp6â#âµfÛ\^mj +³x óŸË7yq‡tû¥äÓ’ÈL6‚úà %.çÉÒ¶³T6Óúhûú ÐëïvYhÇðmù$ºÐS`œ)1™0ì/Íù@Ö}uà‚ù +¶0ô9Õ.”HHçÚûÄ£@&¿•´€aÀÞ´PÌé¼³¶Ž3sÔ…Ï"ÎÆ_?¦q¬2oaæ?8,hx`{«Õ ®éÒq»rRr¡€²u'0l;ð·¸Ì°ý៰ÃÒö¯ÿÙÕ‹?±µÝºqóúÏüôW[÷ò³RE³cH¾×/üüWA\ÿýo¦?Šþ¾˜æÿ§ö”t©T˨:½Á^?ûùý{ÛgÏ5Ž,M–Ñ_Ÿ^š›/mnlkº: +ýÓY +|€ðÝfÒ˜F¢C*!·uƒý#—cÔwØr“£v˜Ú“ºã8ÿ 6y.ä#D-Î3·^PÑöE:!˜ƒù„‡T#µ7åù«¾ëîM% Ëʬ#Â1퇘rT°±s1¨, }˜ÀY¹ :@>¢Ø«Ï¯$kŠçö?/éyõ£°€¼¬®¾«øYÜ¿ùî7Áü—ç¤1vë/P14Ï5[‡¬*!’mÜû`¹  @î£Ð’:‹ŽÍªÁ~DÍïŠlBû¸ò´§[®”ʆûûaWòq+íÏj€©"¥ ¹%b MÅìåòß¼ +æËÂRsg«%FâæÍëÖ‰róìÒÎ'ml©2”Ð5ðuf”þ“¾Å Ãû5Wim¬»½î¹—WAºÞx~ÑÛïG Ú¬®À½ËñV4=Ûb¦aæ±ÇRŒ‘x±Å Z~¬€A¥ô>’–Å8¦nŠžY¶å~ÉT7:P‹ÇÁ¡'¨gFÁÄ^†íŽ$1H:|÷"j·û†¥kF^Ÿ‰‘i}¤ÃŽu¾` =0ŽiY“3‰ž4¾aq5½Ê ’TÏiÜT@å @ߨ*nC¯Ÿ"Oìtºµç’ðk(ÑÍ Ýè¸8S P±ñ7qÁC PƉš3Šˆ+ÀÆWZ'ÙJµ †.÷þÄŠ"¸Õ“º7Dó_#¿d®QŒgw›¡ªßsÜþcçê«—::ÖI¥IØa•$!éµL£qï^ÿ×ÿçÿ þyõÊ0^Y½T¶jïÞÆé·tö"ÜÅ»w°Uø•‚õÿô×ßüñ[yyù7~ówðû µ²õ¬èpö²Á ¸CE`ë¿®ÙİY"ÓÁw^h6¢7JGAtz±R,…ì<õYeá\¥»Óu,Ä.›ŒŠ\‚0ª +&‚™%;.˜`xÁ:àÇ‹Ç+ñ¸ /.¤ê¨à`|ú\íö_n6Nã`îõýf\ÓÙ÷0.­*–¡²sVÈmaØ1©ÌëHäºL<0­;·š0QÎ|CSÕl;¥³ÛSYLÊ„°ưÅxb¢j,]Öj\û·~âú¿vhvá¼¹ +jQ÷TJSößó,ò÷ÿÓ_úGo®=› +øòçWÏ׸1gííëà†XÄdä>ÆÙÅ¢ŸwŠ³ÅªeI@D¿=_i.¯ ]œ±ÝíV÷aËœ«UêÒdÍ'm +°dgd^A+€quÝ]0ÊÜÑÚÚšHJáá¡ÈØ=ëïÞ® ݈dŸlÿ1#Q+¯›ž-¦©šWóÅŠ*½³d×êÍÛïM™LÓæÜ[±T›-U³OU×gaíöܬôO»Üô÷ãÍ–þb +o£›eðÌ¥¹’ T–¼ê™p༊‚è¶]A>I0œ'²DAúwºåùgœÐ„qµ?>ùaÝ× œLÆÑõ=‹Ê®À¾.Ð-¤ÄÖ!Fl‡h·³ðÂEþÎ.^&ºz(LoŸ¬µÄš×ïvﮃ0Ë-£Pî³’AÝðÞŸ¼ÛΆ¦Ø!€·r…ØþßþöŸ‚ø¯þëøòÅ—¿ÿÞ÷å½=_«?_…­ Ñ_]hÖš¨>w•¥º€ଠÌ<¤%! N¨~ç-HÿÊ©¦yBšçÈS¨évQs†!ŠË\â¤nyñÔ¡ +rKÑ4ŽŒÕªµ* +Áü§„mAô³ôÖê¶·äsðøå¹9"á#,õò¼ :Ìÿív¶¬Jǵ6AAè&’¿³ôW1'Ï€‹HâI)ðjyPû,÷­¢*Š*šÿ `\,vE¹Ó ›ÔÖm{9M€è|‚“äˆè//1üºº ’ÇÞ£€Qð`imS“ZV1&•Žj`"D^ðd&”Ⅎ‘£ºž–ЫÆÑ‡:œ¶ýa¬ÂNªi@üÑÿHÿ7¯½ùíëXx÷Oÿɯ±€ß„íwn°Û|Pßúƒ?€þí[@¾ñ¯?û…=µTþ$,šG¤?/Ò<çULJ‡‡ƒ)"ÿ¬é<šºí«—§9°¹9Ö#'t]¯L ‹{ÅQ¶âø©7:.â$‹Êɹõ;›yU{ñ|ÌP0Èù,°¾¿:cÀaj—!¨(Y¥¦­Ãx XwD±~$ò,hŽïÙ†©ùƒ^e^á•K™¸Ÿ€¥?ï„ H=ž*Mó&xv¼MÑèð%Ž‚1yZðÛLÊf’œb[¤•…ÐF24 +:<îeMƒàµ¤À0„¾wý_Ëð+¬Rwº|æÑG]Dí3Çì8`øëO÷$ –é2vK¥ +¬B¤ÚùB<°Ü²¶i•z•G&Ô÷…Àöz÷&^µcòçJ–ÒnEEŸ@·³]©I‰ïôײ€kûA‡^¸ü|tNÌ KAˆ×aüšÍûlûÃÖÝ݆Õ:‰?ÆØ# +ag¹.yÜæøGÁ[ÑÉÜc-U¼üù×@Üú£·EÒÉ6‡Ùž^ÜAfmù:@üÒ?:e°4Á©‹§ÒsVÅæZ÷7›g—ÀpÑ`²ÍF9’`JŠêµ®dY•F<€•+×Zn°`Me"íeôà]Pxg¦!b©r=lÚ2óª*uÀ§TzVÏÉ·2²/ú=pý(a¨3ŸŸK¯&lÔçÚ ÷àI:¶•Ó¥à¦{q +Æ|Úat@¼…$]–jwá‡9ä¡f k°ýAôWê¦YR÷)iÆ~@ˆãÞßóÓ–ÆH/À è÷ðæÊ&{úü9ë'3hÙ¡1Éðư5 ëŸbhá%òyžO?Éš) #áA°¹ÑúüÏ£ôçÏ_ù f¤Þý+ôÆ~îüØþ¿ü‹¿ û­7Ø€åÿþÆï€ù•ÞßÇ +…ü«¿"~Uüèë×D<̃ÔÐ+^©”OŠD˜†Ö~(ꧺ…fc§Ó¢c(ôgM%Çj™µÆÆÚ"4ÿí²iÍSu@›qüåñ©+@'Á¯TN–¹š¨ï¸—¯\jow`5—u ÷‚íqY¦™˜À‚ÈÐùaxÇ—ýe¶mseŽNù¶ÜÓøè«(SØ'D0ÿÁ832”aàXôu„@Ú©ÆOKVÖ€¡ˆcCšÿÄM‹ŽÔ«qò€t·3’Uäy—CÛ_0ÉDþS’N´¬ýÕÍK¯‚èÏHÿOí6GÑ/‰€4ñC2Clùn1‰"ìí¼rñò»õ àØ”\›Õ¹Û±Yª*!¥ôiTôݾÓ÷B<Ñ?´Æ—ìh–@ ÀÜ)¯´·ÖOºzQÞ”mÍN±îÇOAæc`§à8.«Ùžó¸à˜ó ½PEÀz§T¶ãÞ–>èõ÷Õ^q~Naæ€êDHŠm„ðU˜?Z ¿f€¹œ«ïaSX»;ÍWĹqýÅ¥×ÀVí÷ß¹±á§Tj#.Š¢-Ö³ËãÁ‚¨•ëúÆX + ç›+W(áì Ò„­Á4[Œˆs©VJßuµcÓŒ¿~ñà2ïlù•«îC !é|¼Ñºó®U“ü¹ÁHúÐãÞ`bÖ-sØqOvv t!á:ñÄPIÕ•‹(’ÀQ”„º6Q~æãŠæyá>fÈh= ¡(ɸÝ—ÂÆÒw‘QÄšÕÁ| Ä)҈öû0!„q#&çPâ†cÃ3 M˜* ]™²‘ù#£ ZI±'À'/ró-õ£Ã½†ˆ¬©÷„1ks‘N8$ÊÊzð„|?dE*¸ç`Ö5¡L`ú¡uú /<ÊÇ#}0ŒKEØ1ßWAÅHz,çõÐåõ|€ÒËR"Æ”€=s† 'I?š:yDØ'„xp“˜ ]}?NtÝp>Úþ@|wo^ƒmÐÙõþÞßÁ²¼n¯sùs™¥ùkÿË×~ñ—~essãî>ø¹ð÷ÛmœK«_þg¿õŸûû_åSy{Ò‹o··¼ƒÊ{w0…ðîwç?O£¶¸³ùÇéìêwñ¶>Ú‚5Ì&UAU M/ Új–!•««éÞk$Üdœ<º¾½»3=Þ2_¿x :A¶v£^†m»ÝËçå{]§~ª“?Ø“…>¶ûRS.!4ðHí;Ì“86âb.#ë;Á ?m7Á„U$ç‰ï1ì&†.ao d<9?F±3ò¸r>À$0W²q·n˜T៱ՔZèaö‘‡ùÞ¡ ²¬{woŸXØQòzNÖÂO+yïZL@¢`Sê*'œ%¢Y´yqš3W ò±†J¨3¡¬Â(7›Ï/9Ãþ×~ó¿4‹Vý¹fã9)«/\MŸs–Á0 æÊàw{8H*sÔ¯)‘„ëBbpö3šÆq‚BPZ–mU—é­•àF&Â×gyÃ>¤_fʈìW8C²‘éð8?±–" ,ªú¬ìµó5~G<÷½a¨ëÇø$ý^ÿÞÇzð »pgñÆ­å Ó#{ué?á)ì¢EK!leps4­t"aîõ7Þ©/£|äÙÈ 9Y?}®~ú>ì,¿:}plhŠ.ã\óãPÉH¬=âg7[XÄ«dðÖ¯}é‹×~ï÷¯Ÿaê\ÏS£|ªº;ÝFµrª†]ïIÊZ1”æ x‘ÎÛ˜êé¶Z¦eUšÍÀqÕÄSæM#]j#qqÊ\yãû˜7ö©~´–è®·u)¥ÿ aÛOHVq|ƒAR§c.]Ø®V7’4ÿ³ Æ‚€c`Œ>}ž³z¥fw;NÙÒûîÑï²iŸ&ÄòôE4µh:ƒØa-"b¨Ä­©æ£|JH™’(¥u·Ë:@$æ¿8œ1&$¸픲Cܲ‰lÇE5ùâ ÕñÒÁn„l!5Æ·§+ ЕÉ8Ãç- +Ù/¾´ ¼až Éü»œZ(—®gipÔC÷£[™É³ôO—%jêi·ï}å'1¢Áü+,—_}ýÛò[BHÔÛæÙ:¬ ýaË¢e:—¡WIDQxä$î¤0äGÏ!ØvZSµÑ>SßN´ˆ¡äAô¯"èzY¨ÛÙ¶j ®ã´K6lÑë'S¶`2I=÷¸˜3›ÿ†1’3h ÂD‘ ÖAŸèJŠ™N(8&…¼æf¿áÎrŸá͆P„×˹bVØu9ŠÀ¨Õj·×6;Þ¥Õ¥`Ï8G¥ šÆ¥GÂ$1 s #Hùq6ÑÊœÖñ1¬ @¤:€cbˆ¥zbëï]çmó ÈœÿV Ê÷ÕÏ]ä¿./½’=8å+E6mrAD¢òùCÌÿC¤èò[;¯ˆú)#Ÿ°#õž«‘üœr +iôŽ´dN1Z3L|Xk¤Bî³G½b9Úzp(!Ì +€™'X@¥qî<ó`–þ2”Ä ýAô›I6ò¼tÈò»¶¿ë9Ì`¼šh/pª‹S‚û¤Õbº€@†¿ç{u¶2×`’Zå˜O¤ÿø)ÒÃìÂCŽ×ui¾©ô!°“mb„!zZ À>tF:LêsvjÈsÖ¤ÿÜüœjà{ýo¬<ã‡iÁB¬TZA8ß4j¡]d„EÁJcœŸ,¿zmð¸;xÒmá %„rÿ=LG—f”A¿ß| 5›È䪜fò.ó”r÷g«gcޱH@Š)Œ™<²y$@yΪV›ú[t3Uµá Á?1ꢋ1€能¿‰qbok"–vL4ár4L®qؿ纂ñ(tÚyLÖ`ä3þ$ìågT-7V°³?IHÛ Ž‘ïW&ñàh•pÉÔŠÈÕ9Ó>av +œÓE ùBÉÞŽ˜ÄJ׉½r%Ýls»iŒ-åÞ=o0ÊetQ·?víš”ej!³io yF dî_Ý@j†Áu†²i¶£> îÊpo{Bù`N{‚Á"ö`üå *XQªQò÷P…«J\ÕYu&Xëc,¤£$3 6?P|Íй•Wý˸H¬~¯[ž«€çíô:ç¬"’L9cy¾±Û×ç¦/%Hã X”N+'šàÙÔJsÓsƒÆB¹rÒ÷¥y¦¦ÏL`NTÁˆÂA?‚™¤«9›n¸®·Õ‚+±Z÷ÛîãÁê«Ë­à•Ôëõv»]šµêµÊƇ­åóÍý\ ׿l ¶ñ>H|ͶËë-}¶séå RÎЫõä‡Ñ5ÝÂI.6ŽéÞp¨ä! «Ab~%I¿cesN¢ùjÇLU×~x|ùèÀ‹ÂP“´¢pã¡nšc"Æ%äG-…1þq¬å4pGÆ>új†—Ï¥¥ ˆõ‚Ê yLTN–×ïlvwûW®¬2Ó@”ÃÑ‚5£3'IÛÍÈøã`”ª¦æ-ÌÖÙ=ÎG˜ëÇJ>Ç¢Á`ÈÝøÝ¾:s,}Îi\RöKNáªtU‹3aýµï¿“nA¦Á€™›¯ÀvñÊŠ•^Á MÜ#0uU³É8¡­ç§cÍZÈœ¤jj'mç ¿& }#oÎãži*î0ЍÔ¦j,Û°bžåÄF1¦®[ƒ½.ÆT +c¸‘Ð…»F˜ÏZµs®lÊ`ˆ;+ºž×&¨¹@cšè~Òâví8]ùDÊ'kýÝÎÊkŸßøîõÒ‰JÑ®Àk¶ ûž8°¦h°ÛY~óK¼O¤?£ ÒHʈ'Û0ß›Jÿd©-Ô×Ä¡…¥?ïg«§ë§ë xß,jáŒ`]ŤNÜ'|!§×ë Ï£yú¡Y6…tNØ…Ì9Ï/¶?¼[ ýçªUPC§[:!ƒÂš&2°S>9ßß™Ff@ôóŽžÄ”·/Ä+e`¨š1ŒmÄ5B°­€_&~ØÂn,Îÿ"³\zÓ[BFly‚©¸ò9^"–G&…' 2"Û´:áŽNÜaþ"Ù +D lÙÔYéÏg@ ¢IAœnª‹°8ü]jˆö-Üâ ï[…žÕ(VŒil®O“ƒì)Âk|¸Ò‘IyG6~æÅS TH# ÛŽ;9Ž©8^Äj€cÁqÂÓ+êGVð ‡[Ðw™UQ_!³É¡ü# !‚ÅÜñŸJD©0miĄ̂ ÷†(•ô©ô§…‰|±†‡”(ø³¬YJªºÑ –Q:í' ªL;y%Ïš’k@7+(Ä51òaR¥VUv'mLH¥ +E±aÅÂv=:ÂèÂË¥Õ‹·×Þ[ýÌØÉ~FtH “Ó§1ì{ƒÞ½mô3@úÃö§~zÊ_·ü=줥·)€KÆpàÃ6ý–K¹©™“D?èpÀuÑ_'à ýKg› ýË'셓͵5Écã>XÇK ýA hºÆ€kòGvÖ±lœLÆF ¶ý´t¸”´¦£˜Æ:2D$Èt楈Xa¨SL`$Z^æ›ÁRÇ;³û–á»R¶2šÀÄ›Mª¤èü‹?‚D½¸ÜL!ó`§hËþ•xœ4P)Ш›±ŸX'`v–ç£ÄG‚³©”‘”؃Ÿ›·¯ÿþ;â©D?-MEÇ(—" D©€ñ%F£{ÿhºñ²¿î±™BeÄu1Z[-û8:®ãr»+#'OFŸQ;{N5„¸$£ÍcMT”e9åþÜðSÈ‘„˜R³Vã`šT•çš×þÖWÓthó¥Õ”°¾|rgð¸Ë! ‘ÁÆ%+ýa’¨_¸ä&Ù6xˆ,™S Ðï Á ã=xJâ +€ÐZo}ýëßÊž–ÓY)f·8e0¯‚”}ɲۭlõQìŠnm¬¿¸"ŒÀ ˆÕ€¥¿ø *Y £iìmüÅMЂ‚?‹W^ç[ܘ$檻7°’÷‹~VMP\oxHr³èeð$Ïf/lë5»ÝÁ‰~€–äˆ(áP‘ó˜³Jªe1A¹Oñ¥Â&âïWÊ'k…ì/ãÏÁOƒçáHÄÅ<³"+-TÝH>^p™ýC¨”``a†€<¸fŠtƒyWÊAL2Å¢^¢rf¤ñJ,T¤ÐM~”5É¢Ÿ†‘·ªºtxœÐ™”h¨[Òa$,‘ "ÇEWu3ØC˜Y +hjI•ñr‰"ñŒüV +ñÆ Øþ `¶vq£y-z˪0}ö¦ƒ±’xÝ6Ö›±ôÿêøs_ÿ½ÿu{»ÛHè¯ù¦`Ëù›,F£Ÿ ?¦Ò_ŠþOYRó8„Ç+Ÿ|?5[Ô<ðæ‚LipÌ*¡Aµ:À÷#Ñ’ñ$°Í#è?*vÙqI‚-Í š¼t¨#+ȈfF—ƒRöA ½)ÿpözRZAñ =P˜ e?§\…*&n3†u<‘‚}ŽÑ%ö>X·XòäIH°vÃÃ鄵¿Xkžo2'G£Ÿ +<´‘“£ÐŠE£*éX,˜)4$»Œòª¼¿ö‡, úí—©Yä‰%Îà' ýí¶ï9²÷(»®Ëöë]n»á†zE±2‡»F–Ÿö[ðŠÙÀ×]`\ lÃ.€ç n üMê +‡Súô$í“5ï±sòLsãæõz³ ‚•zD¤b1AÀ®kÌ٠–_$9;"ŽSþUôÈP<1ú‚‡·!4jÔ6rIéN^…›´¸ÿEÑ•O)(Sº§ïê†ÇãåóM¡ƒá>Fð5ÝÛ‹ÊåR•Ü$ØÁLiž]Y¿õvÿÁVåÌBéXI$Æö¢¦å(ŒF0fM6‚ô‚X¸€·c5š±n¼÷Ý׿~JÁºOÝ̘ @ŽÛ¾[…jùÔO´[ß™70l]*;±JêXW$ ¦ük «­áÕ ÛÃ’¥Ç +ÖáÄ’†^åòŒ!Xü &ð2ÔÀ ¸¹~È÷0w¤+ºÛG{¥ûÈõ¼ 2oÁ9$‰yqg|0&BQaèÉ»(ä£d ˆÿÁ‰¢ÐžÓRv-D9ðÖe¦sqœ£¾€œ’ G +‰oòW&Š¡å}Fª(èFŽB@ÊXAR$ÌöÁ½°ôg‡ ¥¥ J³F`2t0¹‰ˆÙ’½DXÇQ0ÍäÀÒÑ?ð1öáØàèœ>kŸ;½ð_üçÿökÍi2VÏð+œN0Æaé>în|øÁWÿý¿»ñÁ»jÞD*+ê½ÈÅx‘¬óÐêžQÙyE ¤ƒÀÐ DÛÏIÅæu˜/\Å‹…X…±^P8³ó5OӞʟ` ` e?ä˜3¦eÙ"èˆXY]…Ùçïöv‡Ãa±X$[$ ß©"êZú(ì5= +QAårÊl7CD)ÃäçÀT_%¢'ãRÉöfÉŽñÁê:HLˆéÚ`¯Ëo$/òØR>Yô 6–uxiŽ_k¹Ù0ð`Ì€)Œ&á™F1Ë‹ÜjuÀ…Ö±ýÈ[ý‘•ùjç8é¹ñ$¶L{øUÄ#bB+wà/ +ԊĉV2$hc¾€½;“¼c^K,ñ’9ËÙ‚Ò°‹/âXe37"÷]t¬ä*©’Ž*¹ðkBöj:Ñ$– l4«¾ßšmƒ–‚iŠJW–«”÷–õNhìæBD/RT˜óƒ`“º)/²jPWp˜à’„`dm4j1É\0W&ÉË6^ú1%Ì~b´a™ —šöÒu×é×–¼ÇX`+ãè D£à?ÔV*Mç¦ZÚ!£~à:,ýaG/ÚœB¶¹Q0ÈøÝýÝíÞn{‰ ƒ8)ªRÕF€É ôÈ¢Id*Ôt6F‡Ú¤ô¨KJÌí%:€–o|ãú—‰8:lqèÆÑš*°Sàýq¥é˜¦mWÖ¾{Ýy€M4+?úZåô";yßf± äfu|j{høM³T´ËC«˜6?º'Äåk_Äê@xÇaž–ð¯2…‹˜^-›˜„Ròú ¿¹„},!‡Šã ”á5L-ÕTú‹ ^VÊŽdât<úaéùÁÅ·fq ¾ +8ˆðÝ|RlÃ…L(“F3oiIB‚ +´Ñv„ò¸ôRS¼$«o±‘%i©÷¨P”í8Vÿ‚t€B†9Ë)—±B©w¤µíb'ð~:ÀK„ ÷\ýêQ8*W±)‘4'ãë+ªAŒšvðâ}JÏêü4øü§DH׸ÎÒüžƒÈ“r8& mZ3ï wFÄ¿“<_þ‡ÿðµE¦'C›|7a\¿s'=!w„ñÒyä¤Á"…N¢(˜šÅ ˜2«°ãÂWçãeÓç®àWUJT6 +oT{?Xd"£w—’¯ññŒìo•Kôð^Ø­'¤Ö00Ð2 .bY4™"ùƒ­6“go’Dj‰‰PR,LA‘Fá1}ßÛ+BŸ·a„q¥ƒõ c;&˜M:޲§)ÜL¢}>p5Ä%N%PwÞ>¥RH~¹D½ze¹Ö¨u~w +ö5H¼œ Œ5âf`Ü?ˆ¬²BуÆ;…"6 ÍóCØú#ŸŒX‘<[äUÎŽŠ”M¡ßwËe~D!Ó»bUBbé;ŽÃL2˜N÷øqÓ´aľ–acé2î–¥ú¹Gh•sÛó¸ìûÆ1Hÿ(CJãL,SC‡òÁäè.½U7(·JÎP”üÀ–¸gûDÓk?ÐbaAzÒÙ€ðhÒÃ@Z.Ëñ”€Šð"Э§#ÚžÿaØLNŸÞ +M›åås øsja…É’Àqºà4Ï®tg·@ôw) +„ÅRf‰¡æ9ÛÑDpDèÇÓ¾z…wºi£Ÿ>sŽ -à•›ÇñòÀènµŒj +VЂˆ|<'ŽX±Ö%M› rNÖk3ëø%ðϨ!Kd +cd9°®Æ{Òºa\Éô9XeŒÿR-­Q‚2ä<,ýi‡®<6a\®MJ8%¸q)Ó£<; z=Ñ{ä¢ð>Ö ‚V3ˆC =¶ÄÊNß>L昤ۘks± ¢¿u·;ãLÊ4íÑ÷‚höX¥?8^$#m4ÛüÓ¡B•,_nþâ`A1ä6IlÿO }ŽC?Žž]aÀ”p +Í¡Kð,=j Ûìæ¸Sì&wç!§ â+ çâqZÙ¥Ñ"_\IjVP|×’aÍ5Ïæ| Ãâ`„ ì˜'ô6¨…ã¿‚ªn˜…‰Á‚¶Ë¥æb$C»Ó.&ŸŠc«@ÓúH1(/qŒRXP˜8©ù¯ëV*ƒ8¤fê:8êªD~‹;9¦DRt?1†I8ˆ0¶ÙüWŒ˜ŸÁ ÍT)×Á ðüiMÜÅqGwÚÝÕYá™z`>ZÏJRPh_Žâ¼¤«”ñ5Sk—Ä$¯ˆö„?dó?+ýYp#‚È£™liØ.Çã*}}T„'r%ë€h„!ÆReéσ\e (ZÏD7ba¡Çî˜q,çVSÿ, Ïÿ(ç3—r~¤¢þ¼TÝÝníTµC<3 ‡ Nq´“ÇÌ€KˆÊå{•tQD¾0˜$تÇâǾ1 +êÔ5x2 w<ŽöD.õk±ÌÔŒÀíl¾·¶tq5žŒÃ[Àï`lj ã¸dÆÑˆ->… ž¥C±¯™ÇÁ»vmõë_ÿæoýÖï|ùË×tªbceâö=#‰W^z¹ù­?PƒÀßùÞ¬ö=$-¨àVækpªVk#pûº­÷?Ùj.¯`(ƒ0× TòpûhÁ æÁé7fBÇñ žœaœkÕFçã{_úÙÿö{»S+oã{ïÔù+ƒrój ÜX­yA¨Ýð IeÓÙn¾½Þù¤ož8Û› dÓÿ…Ssðܺ»ƒ…œ&@ØE2“Ê–÷¼2‰mÛôÁ}=ˆ00ºTª¼i1ž¸O¨Ø« hœ´@¯ÀŒZ–‚0˜cõFÄðYg½ËBŠ&S]¢1'+‚tx¾ú1>D\X,Qü§»ãÀ‹/•Jðz¢ýÈ,›ÅcEÌ6„QÕ¶àÚ@ãÁܳmÛu;ÞX0WÑÆÚFföB£ÛîŽý¾U­« +åÆ'ŒnTkÁ &ñn¶ fTôÛÀî£ÿCL0ßàjEÒF'#º.›E?,Çp¢cCO¦ä +­™®«¤V´´É¼lÄ:ŒC?Èa%Äb É ©¦žfy£H W€€.7Ĥ·©mØ<óV»}oeI-ÜBå$·.{Eñƒ½<ù‚ÝGƒzCÚk7¿#i°@½ý¸Þ°ƒ!Ã´é©Ø2jØØ%V=åé¸âEÆëÀx c7öQoiêÚÚðL—^¨lþ »ô‚溃{?h/]¬÷wªÐ*'-P!]×!¦j1ä*à|Z¬âùH-Q>aõ»bf$ÉnÏ›>E3<ÙÀÅž.¡×ÒÂŒ¾‚e") ÇÂQòº2ƒÑQPÛÚLÉœ1½¯?p¬¢í=î†lRüåÀW__6t£µÙ­k\„,„ÚÛï;º®5O•ù¶ú»ý{÷,&¡Nƒ^:ªa]§¦œLKÄoÊ.bCo*‘󹼉°ÕÓ'²Z s¡Ç:ÒÒ±faóClô\9 +³lFÕE~¸Åû𠤀eÜ`ò£œô"lsÓR¬óÈal%¤Õô¥ÍbKËKO‚] +N†ÃÎðq k²hùüAA3º#õ8ÆfÉ‚'©À´¤H9Y áÔK{wŸôÈ.²¢‹jËxÆôw;ýÝê\Uêpg½ˆE|žK€à¸{Rî`µ¢"»bß$|ª9kÌ?¥ê sŒÆÉ.tfy˜Ò#¹ïܸîôºð’?ø«Û3˜ÃO!oÍzsº Âaû„ +ÖÛßùÖå·þõö}º¸ü…Ÿˆ2¾ë¿ýÏa»råõÊ©ÓÁnKE¢4Ò«4ªµ¹ÕÏ.ÙªÝÙ•š9ï¦ßÑ_9Y‚­Hª\` Ò$™ª¦€ë„'`ÍIâ$Ðn9vY^ùvÛ}ñùÀÙ4fl}®ð q5™¢ð²L+1á5ih $ìi+·§¦—šò(…ˆë£alÁ¸ç௿Ç~ÊVmF)W¦Õñúáª|ø`KªTÕ–öI‚xU"Œ‘ô§«ÂxÏ´ìÕ¤@›ÀžH-ÓO[âQÈí )Ø-[ÖŠ*ƒ`‚|däx à‘Ô¶³‰ÍC¤?úAÒ?&Ÿä¾@LŒC~ðñÝ~í¾¶„<Ž¥{»ëæfó”-Ávú&y·nnèI=e¾L©.ñz§ûÌóEãåª<¿m5[÷ð$ÍsMï0ËX¦Ößk]ûÂ*laå³Íµ›¸³z¥¹±Þ²O XYë~«RÁÙÒt@i=¯/TÒ^O[²(I|ßi!¾eý HÒ§ìwFÔøÇÒ¿d™k­ÆéH~ëßkéV°ò’ì«@à~êZcÜ}ÔÑÝZ—xGzZÀzÈüÇ9®))–ÑôŽC©ßuûón¹’êº ò¤ÀÂÐdÞ¡HÉå™è[Å”ù–Ù4dVN·ãÂTºV›ú\eb=Œ§ˆ%~Âô«pDˆš¨nyã#e¹ÍV ¼"ëbœÞ3LPBi²Ä:¦³Ó jÀ¸L¬†/™€0 +Tâ&9rAÛs3¬ÁánéöÝupJåJH)œM›ƒx‡á£y:òUq®“À öú'‚àgðHkFfó`¬8‡Ôÿ‹±AžÂNëãÁkÿÚêwn§·a—°bA™$Óæ¡=WáJЬô—/û0µÀä:ˆþÕ+×Ü~—ËKÒ¥~ö,è€ßùõ_«=ßìlÉNq['éßXènOìÀ!R¨x®öœ¼ÚÎŽäŽrÇÄa›JAiI×—p›r4ÃVd„‚ 'ƒø$cm²Ø dÐ ¦I—°éŸ&?q,âhÃ6ðÔÞ1‹‡ò¨•ª †?˜ÿZG! NÌûQð÷È3\ziqóý»ýnvòšì ‚=ôñuêdÙî„2Q÷*ñ¯I¦Åò²ê9H¥?cPsFª7Òvµ(¤Í§G3ˆÙš)èYš#t d‰$UtmÕ´PªŒøªP ˜6‡’ͺL€³¨×Ÿ&Ÿa½B +D?(€ËW–V^ƃ××°~tååxq—/WŸ¬\h²=Åæ¿21&htw©’À¦$¢Ô­VëC\¯}‹&ú=œØ‚…~õ vT>YºötMV.Jƒ×*M˜»Ž + ï8 ®œXÝØüP ÎyØaùåf{ çQýùÓ­»-NÅý$/7…I¹/°ÒÔÞ&“@Ú : dM/„&Ü;(€k_¾4x<­.‰B®Á§ÈU,²oÔ IDATüÀ¼ÔjË}‡Š¶#iáVxÉcŠiƒÐ3,I ®¼q( (ÏqR“HA<YÀÁ”, LÐ8&‚s¢ªfŒ'Ôøæûè²'z νPãI‡‰ñ‰`$Éš„}è +¯ÑAÌÒ¥(X$† ‚…d‹²VH¹cÁd®ð†o¸¼B‚ +‰žF ¹‡y +ÌŽËTé`û|ší¿|åÚ ß…œÔ³øhà°a¥Òã' ·³N€IšÀÒuº Á=_驨pó‚é¬MÛUTí¨º–¨m`ûÊÓÝÞí;›ýG·ÿ|Ú5œ%à•?a˜­u–þGfÔÄÕõ+ÇÌ»y£\_(×±íË.¢çó¿væÜ­?Ä4oã,NÝÚ©&®Ä:0عÛ}ø€ŒÄ^žÊDz®ºTZ;=qxa€Õ€5¯§N€2£2#J +‹‘˵Ge ,ý­²žæ@ú—Jz©8µY>êN—2åCœ¯Ã8~QªÎÔQá3*að¸ÁbeU†€ø‹)™£±ëô‚8ò›v¥X= ýÆ%˽Gý±ß¯ž“[ñd ä”êD$=),ýIƒ¹­p¡‘ ì 8–4ÙU‡€Aúç ù˜c‰XE*ÂOQé‚ Ã4î—=€ô0>ÔHþI=Ü#Æ®@ú ýÁ ªì? 2ûŒ”Uþf±N@kホ7[à|å§ID¥6LJôóŸÀúÖµ7WÁ´‡¥—¥˜Sýöìy[VFиb`Î&è¡„Íóøð7(Ï™›?è&Ç£’ ˆi"¼Vùw¶ ¢ÖÕW°ïlÎ Š~Ü.â¶ß{,ÈÆçŽ·ï°¸}cíÒë«NÏu9g—XC€ªh}ˆI)Ph€ܡйþ©à²[ +µ+gÇòjÓÐë¤üИ+D6^©T¶Ûþ˜Só˜Í–lxà³·mP)Qjû£ãËê'“ØÏJ®Û¡ìû°ŠD±8Ôµ@VZÖ†EÉ’Ç5ÀÆŠïO{ŒyáúË(C +Èö1×üÀŽBŸÊX"U"ªòa *já´-R·NÒ>¡Hבl1ñ‡\7p´ :l€€á…€&Ü´²§är(&qtØf÷G¢µ‰èÖ|5šDˆÞ‘Ì‚lézQÏçÆK/âœÉáÐx‚ˆ“¡a±9|ÎWE¿À”r0S¸{G–eÃöÿ‡¯õqh:î¯oxp±Ön7_\¶S€É .XDØI)›x »a½ýç7?Mëå7þf»uï½wÿôêou¢¨ª5kÕóËvÕU¥¶pûÏ$Ä¿"âÂ:ýÂÊÒÅWêÏ#,èâ…Ë\ÑÿÎ7¾Þ¼° +`s':ˆÒÜBüˆñÞbÄåF@|ò +õ`´'ˆÜYW+¢È´3Tgé>Q ¾N,JÇ»=8Ô¹ƒ<º)LK§BÚÀ¶ôÖC“•J ˜Q•y[ÉyÞÞž^n&— M µÍ”Ljô+K­¼êP—&†°öf):žy ‰C¬¸÷a»2_ÔueÃyˆ°-𢠼ìÈçw¦+ +Q2ß Œ l> Ÿ£TÔ\ê°·lÃÓtäÅ-¥6!<†Iž%°I*ÁóÐk‰¹÷2‡YS®ó(¸lQÞ[™Ñþû–3>‡= #Ü#Œ¹M’Âx5ÃÁ`†ô +†ÄaÒc8ÑèÙ„#Ä>bxEv1â™èƒ¬¡(Ì|e¶4•#ŸfÎÉ*’ž{B]7a5— Ë6>¶­ˆ%_†©w³µýнví¢U&vÒ~°Ó‡ùR®Ú¶ë¾òê9)0V/~æ h7oè”Oèþ~Ókàœ^Þ@çaÇ:®#Ρ5ÏÖÛ;°…‡ÙjµWW—qçÃöÕ7.m¾ÏQA@Ÿ~+qûíi“&ÌÀáÀ•Ô~Ø|gŸgy®´öYì|ÚeJSõÉú^ûÞ‡pL½²p÷½.ƒ!»ýsgO @¯¾v¹R++m®\Y\¬ïïÅOúb¬IΕïܾ¾°P¯ÌÏ­os奥~ÇYÿäÞêgWv:ÝΓ֥ KU’Н›ßÙ([¶ïùXCìÇ̆/tn§çô¹sóV4ñ#BÈiB—èEÝn;ÖHXçF…J a´¡•CÑ,ŽUò>¼#ö^¦hUU“I sbÌ q\0ÆNvçÈ;¤Š81|ãhÚÑüùñ^:fG‘ƒþ´Šh ¯¿aÃÛäSñàÇŠ!Xú« Ì©q †´<˜ !’°ÊÎb?Ð šl¦£ç/‰¾}”Ô0[S/%—×ðÄìÒ˜n“|1âåGqÑ"ô˜/Çß÷@HPjžÃXa$ÿ z×™âxív%‚[F¹ÝãÓÊïLx‚ù<Ós f;ënºãkšOIV§_8»µqÖ¾q/[}Q;#ÕuóÅsMRÝMR6,ýÍ¢·0~†ûÒÙÚjœ9·ýñ=þë¼íw;­µ5g§ãVw`›’Z-­^.WËísw·ïmÖÏ/¾÷6‚ĸõGߨ<×Ño‘S«V.­®tvºµjåée Ÿe3L[(±«;É:v»ƒF#Ss9#œ!n‘>)+5¶¼çziìûHãèæFwi¹&¼ ÒõsW@Sx®Œlð˜÷ÈF3©Ž¶f.5,ÚEXAjÔ‰ö¬ïe"’uÄ—¶ì»ð.( #lý®ÃÛ…³ÍÖ]ÖöÝ»­ÅÅf¹lݼ¹¶ú™e°ßAúÃy<ú.Hö~oP[˜z0!uÍõ Ó¿â?{ƒíÖz£^iow·Û]®âei©’÷ïm>àµïmž{^ÆÄV.¬°é_©”yôÖž«€àÀ›𥟼zý÷oWª6¬Õ¹jBuYçö¦Ð{ôüó½GG‰yy)—Ÿ1ûþÚ¥R±‹'¦²‹èÇEªDÊ31–1I9oÉù!2EÃü§ÊEWñy‚ôOϼ½Ý½usýK_”HÃ0¢œ¡Dùh'©lø«I%(çôÄ+ Ó²­ÔÕNK‰A7ò‡`ëúTÐôœÁqÁŽ]ÔxlSèI1‘¼v «V÷§(è ˜Ø€ª©²2’BåJE¼½ôÆ[ŒÇ¢_cüïø¨ÀmÝß´NÌÍ+²ô§k• 0ó“¹$©s +Q pÏÌL¤…e9†š/d¸R–vP­VëƒéûÓž‘ÎílMCóõ¦ç ÐÒáôf–B~wFñÃ1—ÀÛŘǶ†27ïcX9Š}ˆêÝ2aÅP/LÅåŠH"ûÙÚvFg [É©×AÔTúÃ㧤 å”þœƒ¿ö:‘¤oL1t]%ˆ>9¹L}£% ||˜÷ÈëïP#Þ ½uߊkÍU9PË¢\+ 9H^9ÈðÇÉ“àÄ&`r ãWq +W•?i@Ÿ‚î¦<’4Ê.\zN%ƒH‘{ {]&ŸáÕ€€ƒ)Ê! ´C fR%èÍ™0ô®ýÈ«¬5ª ýïÿüf0Ò/_Yj 2¯Ú'¤À‚Cê¾5Ì·©³“('Q8¤`/ÀX Ϙÿ l»xòd¹G¦1¬`þ7IUôÅEi0•“=œ¤~ +E<ˆõ+¯—îÂ+×@þþî;•zùìâØà‹/aÒ¸ß^¡aGžkHVŒËBl}r?½°î£½Ês2ç?È,vw»°òþÔ@|_þ¿ó öyé¦rûÎfíä¬XtPµ[<19ó‹«Lÿ·¹²¼´ùa <€«¯_zçÆmX¼Sž³WÏݽ»Î: Ýjm»dY×Õ“v"÷ñÀ¢l|Úð%HúÃví»«¯.²¢Úð˜û{¾'ÖH‡E韦ÝpACC%`šÍž{·Ñ¨ÀÚnT²¡$x_I••Tðq!¶ƒäUþˆY¥é\eËÕ®\¢Ï:1Á`X¶é:Ó‡ïk.¡ð5ÏQïvZs¢?Á‰(Á8B€mÿÛâu¬4I`Šè©´m‹„¦5_EÄîZ +cVB©î>î1©üR”Ì:–þl;Œáb0ä# £¢¤Ê¤??#wÏéŸ*€, RÊð~ý_~KäMi𽡰çjýO¶¶¨}] ²èoÿù ˜±lþ³&(WjìÀuÎÔÀíï\_Z=*ÿé¶?x°ÿ•ÿàAÀÊ ¼’Ý£Ìv¹ÞÙFÑ÷‡Ùšßì1G„Å”ô#³€=—&\Y«ûZ1-3íú´…Ëx8Žo 9$Ÿ kt‘ÅSO̹&tLM“u8`}`¼èú•åzr jgǵ-“B@N’¼k–ÎjìkjõRMUW ý Àpöôlš.õ`Ì€èÇ4ŒÑÔðI»/–3%ŸÀ·â À¶úLð'Ûä,0M">…HX³‘¬—PrÓ3`C<Í +Ô9ÎB‡Y +eþ 2ß4%À)é1Ä +rè‡;Û;·o®¸ô*âA‚1 +x\Íó‹â‡.Séÿ¬…u˜ÿ,ýaG?vÔófý$•w  ¸E‘݈Åå:—ÁŽfºí>HÿJ}.û]#ýz $ôœ æ?ì_¾¼ò` íñ×_[ºñö¦aè+Ÿ]' R›;{¾±Óé­~'‡ôY \§2gCÞ`ç“ÔöÇRÐ"ᾦœS«L•mêô¼~C¢¶P鱃¡Ï&+îdÌØYÿV½Ùéš 2·šBjßý ÒÿÊ•Up‰jì]¿µòRÓ:Q‚cÀ£)÷œF yϳ‰IwŠ6wrÁNo8H@åÆ +Ùò “."ÄNôÈÀj€—ËWVÀ²Iˆpa[MO“‘·ál‚ Î(zÒµÀéwÓ@ +¡:àú·×Ài››+nþ ý¥/Ÿ~ç»ÀçKgŠ9j0¨ÅD^’»fZbWƒÜL0^¦ŒT¨ÜòÀEZFAÂÝÀN¬š0 ÂÀÚEºy­AGÎ\ŠwŠ*AÇ£è‰Ç +P Ä¢1¢·£ †Á$G­Iû\\!ç˜ïùq†Ø¤ï£¨5iXä—§x\5Ww>ºÛz›òëK+æ¬ÝÝn5—/mß¿;xìÝ[¿Óo?-ÓypÏ®T°).‹>gR(–»/7Ön›ÇKð7p&gãÂaqœ¤¤®÷¸ÓÞÜð†Ã͵wáÕz®Û\]uÝN<‘À|ìX1™Þ¾ç¸AmîjÐZä¼AAÏñ¾†°ãƒÀÅEE ±G|¦X[â £¹ùbí”>D!<ƒlÕp”$Šdžéæ,Åš’wú‘n$8`,c» +äíOœ¹rI¥À¨mé^–‹žU(e,äC ©RY 0²„Q>æWšÍ Æ%/ª•KØp4°a£>/(ô©ÏĈc£ëFÓ ñÄöcñ à½ØãB9»ÚÑ}|÷‘eª^,'üÀo3ù0âø%›Gý:­h2ø#G9ÏŽ¦ë5MÁ¨Ç[‰¶Î@p^ÕqÑ3($cÜ1ýQкÿž@cUÍáÆqN±Mª A¶‹ý4øÅ ·ëÀOb–¦Øœ8 m< +¢»2è)Šc»6sy{®9kgíÎV¿Óò/½v¹¶PÞüþ{íÛËŸY^y¹Ž-{.lanÇ"§É’ÜH¡®ìÈÅŽV?u¼ÇáA×ÃÕ_†¦ÅuËÒczHÁ^×ݱì*L  +‰€< Nc)0X‚²‹-ß„ž?ˆ9c‰…+™š·¾3dBÌÓ’UÁ¦Ž»JVt]øL_SA¬¾Òt÷ú çç`Ž;{né„ # ¹µ'±­w?é„ûý‰(µt77ZVIë÷Ü­;«¯,¯ßAýòë—77n•çê+Ÿ½¼µÕ:g7+ÏÕºŸtò“ Q¯mS–"¥«¬u>ñî}¿µðÚbëîýÊñ$¶‰þc*ÚŸü¡tÜ׿۪=‡ý:áF/Þµ7w>Âg;n7²‹•Ì©‚mY‘e5šgšÝnÄm°ÝîžxÉjž^¹þ‡×a ºêÝïmüÔßzkû£Nû“•Ï,ln`ÅvãÔÜú­ÊI«rÒîî:ª‰öþ®[>ié4Þ|¢7Jf¿;àÜI0ÈWO2ŸWÒkn!ô”·¿sãGߺ({3K s c…2 X©D9L¾’‡I_,¸Õ«¾éD~ǾTnß‹92JLzp.^DÕÛÔCA=+Yf¤…'ò0V‰-6E6˪!LÊêõ¤É[¢½?U%Ù|iÕ¥U¤J u޹cjRÿÍmSÕÔƒæ~3à =‘Q•²I•Æ:õ ›:(€ìšIí&Ø?Eª¸X¿y}åʵÒ\ ü³úü"ˆþJ£Ù}ØZ×Á€¹°§IEÄ š/aÃJ÷î&(ØŽóqsåE3Lñ3/ܬ¦U‰2IóÞÎWµzî¡àã‘BÌD±[¦uÎs寧sîeðÄ)·‡Ç]ØI+ISÕ, š÷Ûî“À:.瀦+ B’L,ÙÚõ÷Ç ýcS[ X4Ä ¹„- Â |û¿øò j†r »r[¡ÉŠÍâS ++¦ªä|sm"ì˧1Ä1JËÖA܋óƌ‘Þ,1Ý»l`ºT2·Û]PEÌêÞ®óðq³C”ø˜‰e´ÎH|òÍr,HdzhSZ‘ VbAAÒƒŠ§ýÆ4‘` ž,¨~$9fƒ‘›À–²I‘’l(Õfä°4“[J;¤t}ÖÛs̤¨³ÕÑ+hþD¦þ0Ó©S 7u£p,ÙX"cþÆåš7A +€c®fÓLðè£IÑžªÁ‚¡Ë#Nžƒ"[y"P‚?‡Ö{“Ç3Ñ&V‹!øį̮̂Ši ¨mJ€ñèÈŸ+s8eCnD$£5”笫¯ËªJ¶©yËK¿‡ciý{k ýyçÂ¥eþ·þrí§~ò­µ;ÝÎê…Õµ;kþc¥¹xŽW·×JÏà“ö]•Ϲ ÒŸ‰Ü„ªì(OÙ!¿µÈnç£{ó{ÿÏu„,CUq“ÞÝ^«µuí×a[­UV.¢ô¯œ¬\~ÏÝx®«U× ½˜z£ÜúH†‘×ï´V¯ vÜ|¯uõ «àît>éƒÇ;áCg饯æû(y.¿ruíέÚÉ:¨­æEÎ,¼öÆë0h$h1Hã|œ6sÐÞ“AåT¶7Skx!­e#–.®öw±±ùâßÀòjVú¬å “Ê.Ù7LÐþ„iŸj ôÈ$Ê©é³5‹ª7Œ@úƒîO? ¹`ñ˜ä¦¥ +Ò8I¢ÞdìËG7Ø Jdˆ>aié¦ÊÈ +„®'æ¿`æ iYU¤“NÔ€Bô>¸]߸Ë:@d‚’.²BâÙS¡Ï;A&jaYV³ÑP*š ºÎ=/ìšê€4»ËÝjàäI“ŸYˆ©¬ Å/, +ÉaÄÊ EÕ¦ÖjÀÔH¬?…’KóôbëÁÝôŸÄ½§‹¼b¨(ýœÆ!å0 \$3¤ºÏ˜À$îãŒWN$>D&y4@Lc/ ýo¿½yîå2˜ÿéèbåÊû!ݨºdÿ#ŒoÎ?æðãqh±5A†°SžJW H9i…éÀx—Õeò\ Ò‰$Œ=ŽÒ>ª"¯‡”;˜¡ÁJK„ó©À´©VñähÎ/Ekड़ß9ZÕ{´½´ŒxJ ®}ù-°ý–·® +ª—¿ü#«ì€Ô†€Ó +@ô·î¢!ÕÞÞé|íÍk׿}]?VZ½¼²vk½Ú¨°dg@„åZ¥²úêû„Ô@«b|zL–Nõþ}´Z?hž9 '_Å ¶ÚÝ[b ¤ý¹êõRñ|ý·ß©œ4¸îœ€>í,Q/E•jy¹×gëá3’P @ö¤ÿLÙÞÁþçú¢l@˜ x‡÷m[eNоï±ÅÑ×,À¶A<€oþîõÅ—¤Ð¯TËÌyj@O"+  ”|ž‘G1Ä${ì)Àá—¹=+\d¤¿@}"“ úyó:‚;`{ý~ÈáHß÷Ë')}´Û'àäù"Ñ0³•l²qHËb–þ‚lX/è´:¥8t6ïܺúfä®Hа +àúoÏcôûµç—ÀüÂÛnà‹Ù@Û+úûí­ÆÙ†E%I_¹Êô¼xO…àјU´L"D?w5{ŽÒŸÉå™·Ëó-åØ÷º­)$‹~X°Z†æKñ¸ˆ~˜ê.Y|sI™ 8\rÒß>®gÕ1¦} +ÈÐé »¬²¢8ôSÒ¿G + a–ôÙ13Ú‹r“ Ï…žýv ‚'>Õ律 \²­\"K§%Úv¹”²H‹„•Á852©¦-æÉ‚ÿ˜Eó0ô`”.x DÒ¥<}D3ʘÊ8Äid®b»ÄzH (I\œøfiU<«üè(”|–6N>FJ‚)ˆCp”B‚÷0Bg"KäÍUÿ"ÔLu{!xaG@ ØÐØöö\oo*À ‰ù¼ª££‘}›dïtú¡6£2î! ßÔüOËÛÉð×ÁÀ.9ÙãÍžÝGÀUI5»¼9‘J>€S8 ý5J¹£~<¦y€äuÅÊÒ¶ûgø‘en~Ê·ÌÒÿé¥zg˜ío½ùVç¯uó̰m4++pjÃvFW5áZØ!óäûÚû ÁWvuA\{}>ÏíwQ²_zevÊ•J£^Þn÷a{zaẸq MrñàÁÖµ/ m‡à9µ:HÿíO¸©ÜÞî'ýÛRúuwcÇô~Úˆ7O§ó g)ôwºpˆÍÞá#·>Þzû;7®}qòS¤®8@Cžò£H-> +Mc*|²] üq‡€TUpžŒõÄ•7°Êˆ=A:€w»%U,ý)´€ÿä®1C#»~Ô4„Âk-Ù6ebuý„=èIJÝ•©£RÑòq8ÖLU;fb¥óÐÙ÷=é‚ †;aŽ +O0·Æ¦œMvt÷áVåÔƒ;´]ºpyw¸©PzçdmáÖÿ_œc»÷ýÛåj#>ðJV¹dÍÁV§ +Y§×qíÔÍí‡-°/®\‚ÙR.Ϻ۰ŠúBgë^ãÔR©TîílGnSÛn—†OÃ#%l³™ðަéƒÇníTs›©%w|Ø‘¥¨qùÂÊÖ#ï"Z\8ß:[¿úß#ˆük—˃ ƒp÷à' "xù3°^y±X¤ $þ.ò˜ùþF¨óØ¡FWÅe¸J,DÜŽÎv€iáH=,âÅ(Ü$éÛÛí/]höw’ût剑T6³”¦[[u곚 BÄõ0þ æ§âDÉI ÔÚl†SD1e° +ši(Hp†6ªB 0¢õ~WBí0Ÿ¡å{2MØ +“ŠýÇýQ6ž àióÌa áGbR ß*E‡R𥠶­¨hÜÄÑ$ϘY ©X +³ÀÉÚÖœRúîÖ pçlSăZ]ƒS‚¥¯‘ò¦Ž9,¼ƒmçPNä…æ? ÜHQ™à Û*MÍ$‚kµïxŠ®Ã¬ˆò׈’$ž“¨YGq›‰w UTŒ#˜ç&vÿ@ }žŽ¢s£5¨%« +€Œˆsã0éL$¢ ²tI¯‚·…í;þ^€cLãš=ønúâ$&Lˆ[Ü‹ÁÃÈwRÊ|^(¼V›Ž×ù`øÓpз¨xãÃõ0ÁdÏ®Dve¡ç zCôŲªúñN§eŸÀY?Üï-®,ÀK "ÿê«ËÝÁ–i‹své^çNq^ÑíZÇÙ(À_Üío F­3Øïßß‹zµ²ÔimùW‚öÖö­¿¸õÖ—¯v>éïtz×~ìs´0Âñb³yýæÚÊE¬[]óâg›åŠÝï:+—šÞÀOKQyþ:¤ãÙòa3®¨>¾¿õ%ÙZݦ IDAT†Ûs——^;óú¿ó³?ƒY˜|ÂcbU†7±*êñ …GÅŒ×Xv€j#¡ƒ+À'º˜Ïsöü”w¼2`¯3ظ³ï‚:Ôt,ê„áýÊ•‹Ì|YBxk +¢*ù`2æ <ŒŠ  îâ ŽB˜ä£aÇÈ@î•fì3µk6n¼Sš+ç禽õÉÁÔS•Œ8§ßo..Úå2wö~D;œvû~ëÒ•« ý»Û@ðç`õƒáÝþîvYæRÄ\­+(‘é ¸}ã›Íåÿ—³·Žã<ÏÓÓ4fØÍ‡3äˆai@”hÑb1¦eÉ«8–Öç|ÞÍ®îÎç²c—Ëw¹J­/[{åÛ«\Å•‹WjoË»¹Ueã¬#ù*:I‘å¥V¡MšúÁˆDé!Œb4Í4¦Ñ==sïÏ×ß4@JN®ÕÕjκ¿þ¾÷ÿ}ôø@˜i+µ8ó‹à¬4¯a!H‹1ÕP7-Dúv×BÀ nFo·[qrŸÚî»ÝØ_ýØ10ÀŽž¾ÙGJ÷»ï§çGLf†÷Ñ™P¶j¥¥é `ƒ-Õ« @s‚ .6ÈÚbÐJ¼)‹XÔ>±Ì•2ÌÚUgü¶¼ ŸÚJ ¢ß]Ð B« ‰äKJȱ½¶Ö\x£R¸E”-“ð)y(6ü;ƒ'7[·RI{îZi†½v¨Ö8¤º¦–ó{ •Ü^_€@lƒðäBOñkƒX¶,36†e©qB‘?øðZÞ8…Àø’„7ÐX‹Ä ™ä«TyÕëF4ÂbÐÛ¢ûÙ ë%pI[Ö©ñ¾»x¹>U*¤¨V今Y-žJЃlü@/¥É*àh|ÙºÎÆ¼× ‚ŒwÖèø*wª$–ò·ÀM$u×0˜]§ë• +hh×›Ž:ä±Ẏ,´L³½áÊ8 ëÐi‡Œò6tpÖÄ¢‘ü¨ $ÐTM±Ã þI¢ßm¼+‚‚¨¼S窿Ņ•ÆZëÀô8[0n)-Ëâà ¢ô"¼SÐB7‡Óî¦ðÉÀ1™Žhì¦îÀ +(§Ùš9**>‹Ä˜LJv‰aŸ¹s²…Œ˜f‹]•¨ù ^o +¹Å7+ @Ž\¹Œ×|üþÙ³/`)êìÌÁf‹mNÞðô §çr™zÚ‰ûf@<õ„ 6XZXT†Û¹Ì )¢H4¤M†5d“Ô—l.µ#h°¼àóMQ‹ŒxQN0Ë ’g —N?{!¯ c¡çs¹Q/ìq3¸ÌÅRa%A2 ˜ÍˆÙä!H<ƒ}§FS{PÌTœšŒß€È-†ÒÕ©‡Í¦2›ÊÒÒÔá#n ¢ZY³=mgAîï+ÁÏfl¤?¿;¹Û]dJ¹5VWËç …ñ•wáwÆ÷NÚct$~j8…¹Ö †YÜvD?(P¹­ëVk Ž™YA Ð(C2[–zL×ÐX“5Ëq|üî£ò|=ðÿå7¾öâ¹ó¬>h;ñ1T°þ‚#VÌd2ív†± eM®xx˜åv8—›±D˜µPÔ #—ÛP_ù€m-rKeObí-.T³cè–öb½kkžò®rÊú ¬©À—IÖ˜mÜ)ÜÏ|aLÕF›DRS:ÑH²*>Vo¸™h A ØÅБ%Ѝ‘ 7¨ƒ€=€„ÇÁwI)¥?æuc7(#àh…=™NPQFŒ¹5l/w¥Á±ÿ¶éK¿˜W".ßx}§Âùùˆ±.ä8(?ÃàðK@ùu˜é¶¤] DÒ_‰Á–ðæ8 'ÆÝiN*¹ÔˆA…áèÀít8§Xz*2y÷zØ’ƒíl ÚUâé#xZ=¡sq!‰†Î†ŸÑAúƒ`kÑ4ƒ+ƒ-ÛbZGl1L´ýy™ˆ†,Ê\0gÒ#ãh(c„’D·"‹”N½ƒí÷Ú‘$w¬¤Ék˜Þ‹‡]R¿œPæOçYèX|EåpQL,NÆé8îÌGKõU+Ùwa™Pâb¼@‘µù ò&á¡#nÊݱ\N¤sØ“™"%›©lžÃvji[!jeùÍÒÿäýÇë„­'÷›Ü`¡`ëh <PàÀ³ùo[®ç®_Ãã™çAúŸy±¼goþ Lþ‹o-ÍÞ} ÞѤ­|+Š™ÁÎML¿KASWÁ<Ìï›Ûþ¢£˜ªà@…¸Šûqg•_ç°ôW‹‰» °¶+çHC“`÷KÁPH4˜ï£~!F$RÈT—:ÌqîW7L¦‚ßÃÖ®H~ @'õkõÜ®ajNÍÜSEó¶ +~ðâ+«X~}ŽmÿÜøžN§3¶{œ³Ò@‡ ºrüÁG¹6ŸE†¬-+JHàE?W«å°ÒßBõ0èqÏdÆ´adÈâfZLÞ“¾†oq ò©iðfb‹ÀÌÌ^b¼4ÿê¾ûK¥¿‚ÁŸûÄãÑRh¶ÞZ­(€t:ãû-Y¨DЃpÌX[Ҙ؟ ´28èhwÅè×¹' žÅ[v· ;c<0÷L­†ÑäT‘ú9{1.cå]¡ðXb²€¿o ò²c>U¶ÍvPX—v5|¸G$Îõ޽Ã04.> )“I9 Õ´Ô’³^áÚdîQd)& +„(,bŸ8î™&Eáh¸&0ˆà“Ø ÙÅÐã›”þ7±ýÅ?TTäœqØ_…¡ùLˆl\ ý¹­Aã¶j]#Àóö¦³¶ÿä¾7‰ Ü£ªÝû.²% t€¡%$¤ý×4dÛ›NÖškŽ×£Êô:lwlÃ15ÐÁ80u €¤*'3OÔq¬^h©³-+¯/‚ƈƒ2æ¥ 1HÍN€BÒ‡‹;àÞj& õR0â:R3¤Õ€J€K¹ct‡ÜN3ñÙåÎvð<*}Ãåø‰ƒkÍb$PÞRðБϱ‡½}Œ¿ +Œu@¼Ê¥}Ýe' uÌd«GÌ*pÒl¶âÝpÎýðè±+»„?¢Ì>é¿í×@ À¾ô‹Wà"Mœ“*ëªÎuó‹W#t%l‰Â`.?~—Jר“õx0ÃWª5ÎxóQâM±ô—0D² “Ï9™ä%Ä¥¦ª©ú®ÊE„-Pþ˜jÀÌ$¸s/œ¶Çrˆ±ü~ÝÛ£LɤU.WRUT½õ¢zx^ibbåÝJÆÎáêl7/¿ñJ둳¿1gÙh¹Û¹œµ+§Þ>•!~•ê»ÄæŽìÂËè4Y㥫ï.÷{avWŒ‡ŽÓœ(ð:.Å­vÓ÷=“nÞ¹îX;,Ÿ¼?cX…&뀣U(…Þuoæ®<œ\z7ŠÛb€qòã(¬OÞ{ x~—] HØxÓYñâÏ~êy›‚ü¥Q¦àõF³qÝD!ƒµ‘ïìuòkÅÌÀ*Èd5“¼r¸ ‡ëqý Ó£à><P)#áyxµù]¥ÚНkÊ0RW/¾¹2NÏ¾Þ oÓ·…ó®Â×½u¿ã)£`‘ ýØ«!ZôMÇÅß§á&˜`×7ìf­¾‘ÝšDãc“ b@0˜¥² º‚ ßóÝõ°´7ŸRìÚ¹Jæ–LÄV—ùë y0j¡€ ª™†m–ë907ô¤‘P1C‹ %˜ ÓÉ“Yñ% ^W }ðaz)ò$ZT…,£ 'úQ@3ðÙAà&f—«¢"Îhå ü|¹Ll˜óê¨å­;ÛH¶Â.‘©`ùâŠu;­sCª`•âxH¥„×µ 3ky¯{±ÍÀo6­+—ë…[Á.·12£*»M*ÒÍ‹uPMTâàŽA;Âzl4ÿAÀŽÜôyw3€1‡â4•¯jhËwbó"¤Z„Ëu´¨o¨–‰+šÚí6¼‚‰®tézÈÎMzÄtZˆŠŸÊŸ"R£±FS§(»kX,‹X³ž :VX(k Û»xVsbŸª‡‘¢£Û—ÃT\Œ¯i¦‡¸6˜Ub,UœŸ!Hœ“µ•zsÝËí¶®TkˆŽwbS"~ÏCœJÕ1Zž2„ØkjBûLS+ÌXˆszÔ÷X—XvËóÚ.\8È» (¿Pk4Z šÇ«ï6rEQ‹og”¢ÛkÒ-÷E" +±­Ò æB )ÑCW©—€%æ`V “I]í„IŽW˜Iå>ï €¿à¢ŸÛ[º¼8ÿúüôá ¸¤ä—7‰áF70wf!U$™‰>]¸àlúý4PÀØa‰ÑSôA‚)žÁaÛQpgÃÊ¢kí0­ÑR§¥]ã§gÎO‹÷Þ}l5¹ +ö·§u£›€ëGfÆucbö+€¯'åJöéEá))R[M¡gOœdH5Ž%u€”:¸$4»»°v#﫵ÖZíâ™§ù‹\g6V(N΋›Õ_T@ôOMÏ‚ ÏWaQœÛnåŠE3#µÅÚ…ÌÞ+‹~…t€vCËoOþÍ3üúC|K! è§þëÏ>²\­Â®Ð—–( 4K1åâè+®!›C mÄ{í(c\rcö>Ð:Å‚¨E^Sº!ˆþ³Ï׸*3VÈì*dÆÔ”Õ•bÍ®¼9_Ѝ@úo-Ádq¯7ÌcîõíÈÉ^ÔBÍ–ÛaÀÑ/?³tYt`1~G𠻬G?óiØAlµîo¼!ú}j›ânoŽŒí²'§J oU@úƒ˜º™ôo÷}üÞm¯°ô—ÿdI'K€™Ï}ü€Ùj™¬Îš§QÅXDômO 1„Ã[C/zK9„å¤n“¾žÚïÎX¦³ÖÛߦÀHÿø»¢ÿnX—s¢¶ÎÊÆô!‘°bÛNœk54öéoƒ7Üxk»áiæZÃeÀ²´é Ñ žLù]‘ˆàGá`%JŠ ”ÒM›G ­ãoIœˆ¿Hd0„p’ ¥{ÓÐàó„‚ç 9žœf1…7ÛÞh+1È9ÞÌ! Øh¯õº9Šrßs·ãƒpíÌc˜J—ÍOü …Šn<ý¢^Å ñw9=Èt›X˱µ+þ© zŠGQ”³•QñwCJž‹hLØ“wç¹lvãOr^‡-Ê@ø ⪑;± ÀŠÃtQØŒíÙ„ÄÐO¨Tÿã³ÈA$‰e†°°±‰:ú½ì"}ÂÉÙ3sM6Õ±ùÖòZèÐÄä”àRþ¢p)~ŦÈ/f±àÌVÄt‚ÚÀÝ0Q5q®µ3±ä–& MPòEv¶xp°ï:)¨‰é’Yn9ŒxBƒ@ +̾t±V¿ZŸ><}òÔÉúÕK á€`Τ_ê\b;K´|&rAY7@À‘!bº7tBºð‹å—æóÅAøDÿàaE q}énúrž$S‘ÕƒÁ5Âï“D7õ ¹e9U0ÃÀ! eëë¶³îp<}òð *€Qœ~w±|žËxÖjÕ‰ý¸Xú§3ˆ~Žàã5mýn[äv¼ ½­ WQ™=€•«5©ìÛûäþ}p´wd@úŸ}é8žþ»Ó ú•¿÷vckevÌj¬ Ô ¨pý¦n+)¼xégËœ”þ<}9ó©ªÛÿ‰~t€â‰6lY¡2(ÆJïnS¼-¾¹¢›¥Œwð:^`oM€ù¯`#{ +@Dÿ`üêÊ [°é!ØÃ°BŸR Œ¥P‡RonTü¨Ñ´Ì”‚ +‡.k6ש +ˆhfM0è“)×kÂD¿˜kx+ƒ?!bä&º`Z¢%¡¦ï{Ñ(„˜©)W ›Ÿì¡»7ÇÎln»Iηé‘ùÛlËŽw÷Ô‘ŽšØ"÷ã8ú•c ýA# ÎIȼt¼Ä@ÿ ©¢Å!¶¡++ÆÌãÆ¬~–øplÁüØ 8Èiað_5ªŽ•_äÌ9O¤ô¨&=ÙSÆBâò†u¶ý9•½2B®u5&”>53£WŠŸàâ)9v¨M/@¡ò…`XxÜHàÉ ä°ôWH4×k úÁ à j?HSj‹‘%9PœQ8›sáFÂ&ì õ0Þ…€Œ6¾´=ét×Nåš:»دÉGfŸÇ¦¼0`Ï#õþ®‚F˜WaTaè˜ÿ nþÏ¿>j`f¦Äô†/¥mLY,£áv`ˆ\·É48˜?T+A +€C@ +6°‡­×ªuV:þô¥(ä`H†[Xôãxn%^L"žÌ:/" <Ñ>>0ßÐŒ¥rêž•ew½"ÇV‡ä. B&ϳÃ`ôÕzM‡%{n¬+P•g·3yÇaLp‘Z&е°¹Vcäw=¶*ƒN7Ê£€áŽXÍ!²ßÍÞöøÌôÁƒ·O壜-Çî½Ð·,#ÜÄüóõù…‡)Ký̉‰Óþ8Žl,þßçÿ?²ç¶Þ|]ÁÒXæS°žk›;òc÷ßý«ÏýçÇWjRi=à&ò¥ŒÒ­ùË—(U…ܹA"¢škÀJ­$_®ÉëWP0™ù[5˜ÔXpÃXêÖ«a0Úψ 3ÞíXisbOvéÍjg½'ž;$`…L°ÀdPÂSP 6[®1Í4×à5R掔ϵEÃ:¸‘L(\Ú_8^°—¯ÀJP +y[KàÔÆç¼8øÈ)š2›×j0Mø+ë>X(¡ÂÙÂpa¡‘êã_l6üÕ«u¤l¶[Nk¼T¬Õ±â+7aÖ–×t]ßž|* ]c±@¡UMr¿{ÅtÁé`ç˜Ïúz`ŽbÔÂm!nS1\K‚´µƒ¬–2jW…Äå¶{ö”@eÒ1Í«òä1è¶±-î5Æ=ÌPæëJÉ£…_h½/~ªp[öΚnö2££š‘¶:¤R…äv„bw^¢CÕ_zJ[,;½§™¶ÉøØCØFc’‡»Ù†à;C=Ï÷tPØ= 8(È^€Ã9êž@ƒ²¨Gü.‰r‘ë7Cè•N¢JDTt|‘odXä]Y£8ëaÚÀô/ò4ô•6…IÁᶃ ŒÉ´qˆ| üaÁ¤0–UžÀ$Ô¨„ñyS¢_ÿDS®»ÌNƒN©9¦=P(Üêm†àýxÃ÷hiÆÁ‘T‰¤(•€éÜuá³¢3Õ;œqÅz=á +«(vÞ@€¿-Û‰­QÌÓ0ä ^ /y14މiºàžx g3³‡y`V ÁH‘⣙ì³ñkêÚfäD`}}´8P\º®0Óc–.n(HÝ(IšdÜÒ W¢sØÐº(ýÏ…ñ˜í@!$Toï ¸Í€.¬T¼Èå‚mHcÎqp¼Luœ†Šy…È&ÅÎÞ[¸dÆvÖZ¥©"¨°r¸ª +KZ;>²\DtJ¤’ya‡»ƒÑã·`ü >;xñ†À@0AàxF…ßr~þØý"¨Î-`¹ÂX.Ÿ•ü¾$u±8ñÔXP5öª!Š€‹ré/&–/f*â oDzéßšNtÖ?„ë ‡ŒzÜ•­›>8Yzkî_*áZ=~:€Çfñ®@ú+[+sâ›CjÙˆÕzŸ/c´ +Dÿãùä‹¥ÞÈå²\à•6G¼hì†6…ùN€ª÷º>vÐt·°Ý^ šÃ#‡vâÉ=óÈgEX ¤?–“oN—vgÁö?ýÂö˜vtÑöïqþM~^ÆOàò¦M®®U¤ Zï¬Ãš'@µãÇ"…bVne¯µO¢Þ +6œüÞ«k—Ù\s+ u8¦ì˜ÿë÷0WIP?Tm)*FXúß8¶=´d†¬h>u¢€¾T­õ 3ªé»³å×çÁç‚WúQ%8ª‰¢¿¾ìÂQA+° „no33¢¢·Ç[Í»‚Ù‹(S‚¶¿.NF¹ºå)E…‹²¹:ÛÝpK¥b¥R5ðÛÿôS¬`â‡ß?ñ+'AúŸù»Ó§N¢)°péÂÔþ#7Þé/Ý$I;ãbu|½y'èI @!"6逴›|%zËœlñ%»l~}”¤?ÇèYp Û°‰èí ëï‘Ó›rfô³|d=‚Ó!È<ê8^¬ZT“e¦,Lùœ×‡Ô ì¿%—}vüÀjÓ‘‘e´[cYk/r¶r›—˜)[r†Ç·[Kç ´––ªFëž{¦@ ’]T"É¥Ÿ\Â¥¨*r³k&R"½²D7Ù3¶--TAÁ–nr]twH Šþë]‚ÖðQôóg¬i3ˆ¢sââÝ /•4•É-De¡ +jàžûgЩ¢¦zUÊ] æÉ)fÅJˆQ:ø“!ñDN…º¯Äã¡lx‚J^S‹d±Uß©ó‰ÄƒC¹OËšÖlÏLjˆPà'}âá[¤knð&)Äç èùDS½'ø&ſ୒²ÝÚb×I‰M|e2¤“ËÚŸÿM\œÓ‡0ªóЉãÊ?d£)¢ytŒ–<^ÀQXr¯Ï/˜£ÆÉœøY^p4bp'¸žÙˆ:×åæÿáéIð¿¹tìî-u¾êÐM¼¥R̹obpUEêNlòìq|,&‘å1¨œaÐFÆë¹><Ô#QEJ©(¿´´Z̶:uJ Šd‹/Måœk.8œëwbÏʦa¿«‰d5\|ü•wiðB_p_l¢Ú¶-¼í”r7)Àq¸ÀÎ'ñ˜{Ü=eú0µwCV+7—§˜áz'&╦Pgp‡N6gÃÞ¤8²ÛoÖP£Åô%(fóºâD‹éÛø¸×"µ;3=k[™{'&Kp4âè]žªK¦q/Ö!¼ ¶Áõø^Tr7„ k¡ÈŽzÎzóÅŸ{øÁ“àI-½„EbhÚ$BSU8D«v<¤ö‘Ûç>sŠ¾Õ 6;Åâå÷êŒDØÿ‘ …_›ºíncô‰³/¿|òã§Ôîu,SöS12¾S7FMcïÅ]÷Q%Q‹",íj«þ~ ®MתB J ±â!ZH@\:hnÍçrvÑ0æ{ÕÆÕÜ®´$ˆ@úøŽ^áÖ\¦MZ}ÓtRH %À™ìþÖ­ 7©¦FLZŒÃÙŸ.ض™¿% !½#í€}7lpD æŸnêP¯KT½œÙ¦{7L­3 ³gYöÞÛ0É.ÿT²ÐZoeFñétbž\»5@ÿveYÎ"—»£ñoy†ì”^~{ðÝ ž,.¢È0D±̺ìøó¿øò—»´ˆñ„‡~„8y=3} vøç—~ûKü#pâ85ÅkÞsçìþbÎ[¯Ôk×áˆCñó³S3Så ss¯”¿úoþéÿñxñ«¿ûÍ<þ8œ|þ³ÿàGO}泟ƒóüåãÓÓ‡SÛ-ÕÞ«­ÖVK{wªÚ0 <³l¤tÃ^Ðv\#•H$•^Bíɧ.BEª6²gÑíïvì1‘Ø÷TUj›p³'½ÎE)TD‹yõ »êu¦MGÛSôÞO0æS¸`t#‰X\K¢“zk5”8d…”McüG6cí˜É„Q¹çœÃÞ¦KB8ÚÅí¬c ÅuÓ:æuB‰Àœ„€'ÿÉS\ô¥ø)•4µR}{¡³±p‹å¼ïÀe##q*ÔvÎΙ!¦Üš×mG}Ñ`\‡ú°F¬¤àF4nÕG†àPAóËs[~óN!dŹ£Øz?*•ÆVgØÑ¡é‰›Â”ow>ˆBwH f¥R&³û¥ “Ûð±”Ñ!92Ý™9]ŸsßHòù‚Ó¬‰VC*ó Áh…›*e˜1@ÔcHÚ!Åõê›ðáö{`eÂõ³VqÔ ¬!†ÍXâŽÎ)Ïž˜RÔÂ4…Úéæî!HÇT$ßAKÁ¤R/P1SHGysQwGG‚¢à²òK¶Ïž¿ïø18*±ÚêøvòÁ‡‹'fi«¯ÅÐ:¹…2v"aŠ!Ѝ1à=¦užyꙇŸ>89q©ÓWA|á–íWÎ7F‚Ü?ùñŸœþÙóÑU%âž—Ü@pý*µ’_måò„isÁ`ÁcjGt †îa¯ &_b¶Éô¡R³]QÞŒ W›¥ýD`°îùéÁíܯ×tèaj/Äù«ëá&öT¤FEI"ÃM+ãžA¹ú^#O-òÜmÈÈÏaØ—”UÞÆMÂq†¹ÅÂj6ÝJ¥^*å°VaÈÏ/^Â@RsÔªf:m’>Èå¢Bᱦä+¦ÓU$ŠJ:Ò +í¦—Þ‘Êì0Ò×½öõ¬ØÖÚ`d^~K¢_yu.Në˜E)|ôNT+ÕX4CŒÍž{½¼áµîš=üÊB>öåÇðõ»fa‡“O}æaþ<ˆ~1þ1¾R‘3D, t˜Ä3›*ÿ|ÁÊfr»ÓKKÕl6j@:é Ì7/1â›NoúVËieÒ£7} uÿV¾ +¢e*òE6$ž¡Þ³Ï·³ÙI€hI轞€bä´µuëkA ´[C—ÍÕ–i:õ Ÿ¥w0–¢£~ao›ç?¶Ý©ª Ñ¥©íy¢‘SAÝž}\­Ö¬½çœ|ø¸¬a0(Q¶¤rslBL¼¸ŽÔ$j”ˆçî&M*°MÜf\zCœ—ÏW ]™º«$u—ÇX²jK׌@ƒ•Âá z{®$ô|ìT‘‚}aˆïËØpÙ±ì¹3gáxÜq+ +KcI,ã•û!3ÂRƒø/š·H®N>B.îém­Š5P" +¿&¥ ¢‰n´²˜çó»…é:oNÚMrí”ø15ý7HÿÉÈÓ‘ãŽWÞ8>RúÿËÿék]U=~ Ó¶ßùã?;{þþÀ÷ÿä;'îØ Š–Ü(úy ¶Æ­â[\ôËšk=ªÜ˜¹SÄj^Ÿ¿jÌ©$š>Î!^ðÖU®,ô}lµÀô#÷eúàüõS¿ýß|n¹°½ +VnÛ`‡ê§g9Ìàƒí?…w$ª_ÍÖÜn”à;è¸~ðÍõŽ=ŠS´‡ Áö¯×8}õzkúP1“ÉÈůÓV[ŒRãêÜÚ‘š¿(XÃ@îËãþÛ&Yúãæý_üT1‘²Å?§§&_~ kÃÀüŸŸ ÿÂ-Þ&Ì,¢Oux€4œ,ÿ‚AMLЬ*K•™{fj•Šã8333årÜñÉC¥Å7Ñ Éæí…KµbÅëµÕFqo1Î`qãa¾R9€ÇdRº®Ç G?#)`½=raJ E +ÜA˜ÞLm G.¿¹i¡ga€‘KÉ©sý+B ÆR£ ÜÄP(ÌîÇ]ÄÌœ¶Óò“³w–jÇmˆq5ÀaL.[òC‘A%H lt'ôV%Ñ£ü1X€!•Ë3Óä`Š.ÿÏ Ej¤·{1ž^¸¸ %±&à+Z°Xd˜2 ˆ¹z]èáÐ+Y†²¿¼’´û='Ž7ÖÌøÈ¯€©ÏŠ’…ª+ÒXÜ 7Îíc^GQ9³mvBÍÄâ@ô¸ ’œ{l`L€A1´–åíXÄCX,ýE8N.˜¦([õè"­±ÝùUèƒ-ÿÙV™b¾Ç£ÿÕçΟG¡ÿµ¯Í6R'?ûP°K'ÿ›_ÿ²ñøÿSy{±rIØ_2,“èz¹±›‡Yú“PŽ_ã@%ô©,Œ+SÍZX‡ðØõO|ü¯žø"üéöùçX£n„“X߇ªÝÄSqÛ.ØþpÂ~ob]ʯ0¸"€{?Áãhò®Ä~ž1ÜyînÛÔ˜ÍúÏ$;¹M9`bk:pT•K5^ùæ¨Ô ëÄ‚žÕK…œ%ŠªéAX~¶9÷JŦ,Ñ€…ؤ`Ûäj./ØìD$\u*®ØÎúJË+íjµ‰ð^3%nÍóŸC@`†ûð¬ h°€ÈE˜NÓ‡fD³$H™[†ä~ÚæXS¤ª¡êr3sG4œÌž(¬,¸ 2cúŸý›ï½³ jNÌLúÔ©SÏ?ÿ<ÁöåÕóìEħ/ò/c(Ú¼.¬ð/‚8:{äìËDé_~y.—C°—Ko-^Z¸ó ‹ugúŽ# ýç߸†-‚¼/ì²”·«¬Î“Uð¾Aô³ËÖ$ge-§Ab…nŽf³Ê›8fF*a•Ã[—VQ)¶¬¬ÁU†‚Ù¸Ûòa¬èÑeRèHg-™pÖ›ðÜuÃÜ¡dF#ª hyt×0ï•Ì,Äô ls ¨êÞ¬9«–Q0 °‡šÆJ™*aö ~Áƒ»°É 'nÏ‚û'ûo‡é˜fX*µN¨¬™cà—˜)ËûØÝG°žmÄß±Cµ-ûÚÚR£qG!_úó¿ú·ÓGŽ\x£üÃþé·ÿ{?øëïÏ_œûÊÿÕïÿ»?…?÷Ø?ÿêüáÓûoÛÿÀ¯}ê{ÿöO?óУû÷M=÷ã'úäàÊ/]ZøüB*ÎàyBâÿí³ùF«6}¸ÄRaÌG·†Äka”+ÈA+µUxk•à èÙ¶wy‰åA3Q¾¤¼†å#FöÊ[õ±<è«~Å×sOÖTýÈÌÜyô*¦ît°ôÂéÅÔˆí\çU/$w£Ñ´Æ²ŒköúÜ Ý\sì1ˈA¹DõtÊk¯:×®ë-¯Ýê¤3©äÈà”.*øû•Ÿ5<®¡Ý¹q`ŸVº)XBËT=ò“}ÄÛ@ê>uÅ×õ±6…@­1ËÄ6{G£ÔŒ†å'¡çù õ/^D`‚‘QÄœ¿PF‡òÈÌÏ$_'˯º=1M±¶ÇÇG^Gdžö Z’ØÔî +¡çcóHˆË¤bÏÑ„÷{Ô(ä÷Åæ¬w +ù\Øó”®ÜÅYKåo„é'ú½~SŒjB÷6C-e€Ü +ÿÁÛï}ýk|rï±*:Z õ­´pÛ¶µV{ $ߎÌ⻨á<û…‹Kj"›9íÄ(ºdqŶ>É8sc«ñ¹d\ëlPÃôFÇÎÚþcѰpqAÙº1¬ zFÔ,#b\\ºÒŸ!¹Aú—ÆÁ<ÿÜO…Bÿt»÷ž{zî§J,Íß4Mx|ȉû»±yp÷¬sÙ¸^(Å0‘á`eSõ ÐìG§@ô7c!Fzû8Eâ5®GRˆ¥RG½°ÙlÙöMBÒ(s±€ 5Í×÷Åòf˜#ùIÓT+ïxz2È£îºg¦·—–²û£ÇÆL_—œŽš +nÓÔÐ4c×ÃQrû4=¯Xý;ð Øh¹][¯¼S9õ‰ß˜¹CŽýÖ—áú.]^øÊ—¿Å_ùÂþÈ3G¦¾§`Xov½Žýüþû¢sÞàë((ýŸ{ö‰ý¿ó-8¾üÚ¹ÿñßúÃ?ú6¼ûÕ/?ö§ßý‹O=xBÁ,Î@1Øö *Èrxž ˆ×ÆU#"•ÉÁ×e J£>¤ÎZkd5ÇÚ*¾¸ìàßÓÏŸæò)þwåí*xpRþùB‡æÉ|…~¡hÕªƒËcéG§JpÙÜîÌüëÕúÕÖôáâÙ—*ÎuwfºTž¯€Ñ=}èÀü›K¹]Ù\1;ÿÊ|î–ìsåùBá—siÄ7{g¦ù~˲37 ê®^E,€ü­VaÜ®­4ËçÊ÷Ü3Óh8°8Xš³ +žîÉû§Ê/Q&iªTY¨ÀOòf¹\ÏL{Ì|û-ïí’Š~Øã¿ïǦæß\tšm›úE‚Í¡Æû!ìçÞ+ï…¥½ziÏMÊs-; _ÁãÍ€F@ (7,p§Ñ5ÐXkÀ>ù*Çt×`qû‚* +ƒ ò ˆÄ›„ŸçL5“°ˆ8¨Ëx­é]B R\Çæ{xmÚúÀáFKp¤VEˆ¢ö6ô×RšPËÄ{eEµxGOü;qô0ÿÓ‹µ°$k=þIÿ“¿"à‘Yúßø+Öž¬xÝÙJÐ(ÛÖÕxë×RÖs+&•ð †à%JeÊx⯟Î/^\øÂç¹|@ÚÎq1/ÙÚJ’®ÄHú6P|ò$7Œ0…·¡nŸ:'>v€smÕÌXÌ%¢y¤¸Á­ª¾Š`8Æ_$Ú?AÄÞ"Wìð»vÖ }<€Å%$¤ž{mf¶e‰Xj³íÚiÓÖ}ÑÕ9Ü‹ ¡‰Ýö@7T.W{›± YË“FM€ãÙÀÒŸ!ºÜëü›°„ °øë5œÛR‘\‹†~hRóÈâ'›'ûŠÖ)¿×á…êE¨z¦8|ÌÁ4. ×É ÿAÔC°ÿAoMÄTAmuáäýŸÂ{¯\ÛŸßúÊ÷U4xá„”ÇþýS ýáä½ïþ_ƒ“‡?ý(¤ÿþÛ'.]º"vþõÊ1.T.WfÎÀ¬¿™£3åWÊéÑìôÌäég΂°®\®ÌÌ”ø+ì=Ô¯6K·£Tm\sﹿ´ºB„3cPÅy57 Â.Yb6sP¹œ#Èâú5‡ƒNNc0‘ê«N.Ò_*ç},çk\EÛaßGŽTß©3nàéç…'Æì¬DÈáõúäÁÜ-B N@­VŸ½kzþuª•8pìôsç‹+“Î,¼µP,{}µryŦà8LHyÍYMôÚUñ'Êç*å¨<øÜ9ovú¼6í¼q[­¹çÎ " ÛD?o¿÷õG¾ú»ßiŽƒÐl›#™ìN>©+ì @ )n¾`•_­n±÷–а"øš›õ†MUÎpRØSt$ÆŠáÆ‹ám´˜>¾r¥žË6(»iíÄ·8¡È…¶LêÉ_ai ªbƒaÄ ûk—"4V¢˜åž $aÜ ;Qâ³éºÎÕV>‚Ÿ‡ii©ºS¡ÀG«¢Nê‘gŠš 'Ê)aù ˜(äqÏÃ}¡ý…Ò?¦ ~úò…3??/=€èÆÒÌÿÆõ–£ð^¦i +:NÂŽkíÈØ™A"ˆ€è™ 5Æ1Ä ƒÊ ”R(#ÛñÔÁ)öþ·?ùÞ¬ãÛ÷ÅÜŒzkEͯÊÉyÁÊVYY9}î<¨Ê¥ùI‰?Q Ðs—Þ.¿ývýÒ¶ýåæ¶Ÿ3²³M¾›+ ð¼Á» ¸5fÂbPñ´âßm6¼8RÛ5ƒ[æú<òÔIй°NÜ Apy»‘¬µÔ]ô·H„Š03dq§-“xõ(Oæ?(îéÏ +¯v@úÏãn«Ó~úYAzuúyfÇUX (¨ü+EA\å H80ÿKûÆá­z½9}Œú +œúÈD™¾õЩãÿñ/ñw¶¶²½Š¥“$oó êÏSAô×VyZn—Åñ Ì>¹¤Á¢6·†ÕÀÁÛ›3w–V‰÷D?(ñ6õÁ J²¯™~Ü1è÷od½mM]Htzø›Ùt› +ÿ•ôS«Ùj¿ß>ztZEw13¦£˜Ô¿Æë-ö#zC¢4 ݸ®ë\ï¡Á®j†‘J$ƒvÓ¯½äŠQQ±Nø›.*nLèxȾÛU°pCP˜’ñºoÈ#´È.S—RþŸ¢hC sž2#î6¥ˆš~4*SIñ$ýNG%MoÆWáÂ>UÍr@#N]§F¾Å %PQ{²gÀÔ¦™}â¯ð­»¾wD?>±¢ .0“18Í3¶ ÍgôAfîj­¶ÿ#9ìÂ]÷fî*!bóf0q[Áõ­%;fy^01a +áê»Þ ‰-o=˜šÙ¯‚ÎÜÇîß‘Þj¶k‹—êé[Ôj¥‚®ŸmÏÍÍOÕâÂâñû·œVõêÔG§Êo¡š¹g¶|nγK¥R¹<Gcج×kSE/ÄÐ:Å /O!Ë4—Íq|Ôu\Ó2½¦À)©\®Ç ÞšT±šÝm­7Ý&i²&YôµªJµZ™ *N?‹"~dGæçgç¹ReþµMÁy²´Ø€ßyô\¶+ÕÚÔ©“+¸š”ñ‰‰‹9DÙl¶fï¸tµ5e¾ —DÓ,ÉÜ$(Cú +‹ ¼Ì&ÙàÓ‡öÁô/Žgæ^Væ^^˜œ*:ÍÁê€õ.€?m½øŸkœñzæGsàš7êË“G޹ä.À‰âæ¦öÏZ©•‚5®p”$iÌ€Ý*öhÁÞ¹šÏçæëšbüÆÃ¿qéíÊFP… ƒ' ǰë'†ÐBWCÈÂZ,8ÁØ}T ’ì{r°´‘û×>LHìÀ'²é‚  !Ùs½Nóý^~W¶â·,Ã^½ŽÎ¨è§®i^#JRˆTŠ–ä{“éüo0¥ÔþMZ@q•&•XˆŒ'~3,ØXúȶ¯ËÄÇ"é㟓|ŠŒ§Ê'=ª’ùî`Kð•¹2—.]zøÁ–¢Ðqy°PüXY؇lßøòWøä¿üäùâêjTþ11‘ŒÑ7¶ßïd²Ø*ûÑæ¶}. CÌtºQð7Áë\{ßÛ9°a%·jH,µpì¬+F¶²‚ðH~xîçš·m~‚•[#P©Šè.0å*#îÝg.oN²¥´Ço ãÎ-5f«ì´›7Iø›<¹4C(³„Ȇ©Œ2Ò¿ Ò?…è„]o@àÆŽIE’êHÖ%ÂJ¼šÉ«É(Q¯lã".bäÆ + qQ§!C“Þx#r Úõ©ƒÓßúýoÇ_éŸËYí¶Ç†! ¾Ds¨HÐMâ~Ð +v{ ¥ë ‰ÊÙl»ðt:¾ŸÂ¢Cïì8ÛG~jf¦EùöãQ=¬Y.-îÅù`‘Iè4¶DkÁ;)äíù7çNæ> ÿ,_Xš9r޵«_ýµ™E2l'—*¯U@ôÃ'¬*@úc¿ˆf0þ§fbÍÿƒÞ>=—ß|_@ñÔ®aå¶»8ó¢p§@úWWVÇ÷ÙÕeXC3|Ÿ8±éVªþxQé__õsy1Q¼†>b¿i&ãH²>8qïØiXŠKo‰bÙô¢mOôÀŸzºyà€1y;®4&¯[Ô IDAT˜5FŒåe[^ª—¼Z8öàØ–_â°•S~u‹¸{îÙÓûö—r™¢¤„ä¦c0uÍéxLÃä +°›)DB5àoÚ[6˜6u0¦‡²ÃP±á Ä;:x1"«Ø’Þ’eÚ³cÙâ¯ Ä + b®êã.j +oÞñAÛþ[rû(‰'Îz¼²ÂãÑ‘“L&ÉR#õãÔÞOHcD' ø}N@ú?õìsßü¯¼¾¸ ƒò¼¡JÛÔ¤˜Çq~<ÿôpƒŽ÷ô³O?óì3ÊVZÁ8À/ÈýopeùíÝ»Ç[ /®:>¨Äš¾=ú¤`üμ=× Deø ã6oÛšï»,ý†›7¥¸©è—"“åÖ=¢RéЈ©Xû;ƒûÑLÎÆD~]‹!bºÑ :È…®×– ’NÔJ3÷JEr!Å’™õ·A’øƒC(úÁüO$¦÷ +ˆç ì| À)(.¶¿©E‘#¡Ò#Vb©`…C@ÛC@*‚;èJ…"Þ#6@h€u² +vân¸$¾iéÜÂÅù‹çýÇŸMðÌ ÏÔëNý +0ÿ7® ¬fT™]æü“mDâ6ÁögÊF%pÖ°Ÿ^¤¿6½Í`@ŒÛ¸ƒd¡\.–¶à¯Àš¯l;+Â#¥%‹høfff’'ïÿ4¿ÒŽù|v…xFŨ’ôgVm§é‚ùïÀÈK33™f³ÝºÒšUUeV6x{Êß· +èÆ u 8=? ÛõFs±ºÈ=ßýãïÖƒÎ)“蓸פÿþ[nREÀ)ïmÓÄW>õ´™kÌ»Žº·Xôƒ ÷ý?¨°€EÌ0Æ9¬‚ô§–´Mžø›Ó -°¼\aé¯`ÆÍŸèßgéŸÞyÇž(§u6ÉWkxÛ>ïêQ^š=ÞìBúoùC×Ý=“ØÁQ ðƘnLü9MôÈÄSÁI=›\¥ ù× ª—«…ShErdq»ºÜÌix1ÄÖ8½µÓ”:€·´­·œ Zq9îŽ9ªJ§-ìÆ?«ÞMì‘¶âgÍ?¥ªü¢°º½¿»åw¨ªŠY¬…ôïòìð \É(… Ðaá¾Ì]Cv^ÔÝD/I‹§›“ÒîÁÿ‹ r»lÉ=e`RBzK +Û©Ÿ>+µUUC‰i%¸õôÔÀ(½+û¹æ_¯æv£m7?¬ïÆÍq>ðó`ûv£ôß½±ˆ“+AÖ>Zâ>s•M©R¦:À¶ÓúˆÚ¸ê€àO‚èç+ÖÞ¥P(ìð­µ÷ÛFëx6söç · ´ób[çÏ—‘¶ýü/¤?8Rú+hr±¤€ÆÅ~À½?,?FNÀÊâBµpëHTŒÜÇ(6¡ÀøÔ§ÔùòÊô „çßX¹÷ãˆM91‘{áÇçAŠƒÚZµ :`æÎÙ‚zñM”7GÍŒ5Ð(^×{êožzø×þÔ'îûÚ׿öÈ¿ ÑwÅê|þÇÏ/SÖkáByáµ9pëÕª ¢I¯eLÈŽ1j&ýPŸQŸà¨§ •BçDæIQ6&· +0|~Ýïyë~Ž<ÆÁK «°ƒ€À–cs¼ÚŽIýª{`rüÒBqN(4 ~M5©=—$uB€QÓUGÌ^c­•-°ŒV½´Ür\vÒÁ¢q®»TÞš l?‘$è œèX¼T”1A£@¾ð7šMÏ1’ž +SšÖ :pD¸ Q[ÇÅOl˜ÛLÂÿ»´7ßhx­5G7Òõeeå6@Ã5Hbke(=lh$ۄ[&áß#a¬)HÙG«¥Gä_3#5œ1J$¦ëGdè“lÚ‘Œø!’±i2¸]xJaþºIsëP £6ƒžj”«I‚c4l‚k«Ò=zÝ ¤.ˆg†M¯ãÎ<:óûXrºzÍ…‹Í嬓¹™ÆšcY¢w yÓ°Þ¯‡æ¿Š­¹ømæ˜ó]¥Çè½$Ñs‰¹S„€°v‹à K9z¬X¯·Z­ýc¤R¡.nX0«tîÉBÉ€ÑÈ™YLàH“ 9%kŸÒq}XoS¡š„\ÆŸQ8BÅ-`!׿Â8§S!;¬ÙŒÎvTæï8Å1‹RûAé– ßÐÌ¡b°ÞN§ÔÃÓ¡çN–²Þ-Ì·Ù;&àûîF}ö.œ· õZvwé¡_?ÞXC" m`z*‘I§×£Êò•p¥ +o¥Ù]‰4bð€à26CnOi6ƒ‡~}öØ]³>¥|—ßv>qêž#ÓN½Ö0`}©¡?¢Æ8ÁwS!’ åÖÄÞ±&¡8XFÊ4Pª>ó£sŽ×<ö+3Å"š\Õúe8NìÏœuñÿ©òé_Gœ˜Ú{u˜ÿ£)ã™§ž)äóÆ.¼…‚#iJ§Ž,Yßaàq|¸ÚèðŒ0ZCø½¾¢+*¬…Ì(:Ê +Ž>ëm˜ ™û ÊS®ÓÙôÓ^§cïÊ/P¾‡;ݼNSïëÜÓ§eœ‘$d z„ +Â?õ”x§í`“qÙìÊþK<¤ÓÍŠú;¾ÿ—?¿À4oÓ‡¦¦§NXé#“Q­ERˆ~¶ãDš›J•˜¾‚"6½¨%4nÎ’•!¸}$/l ýùø5*azŽÂ8ðc?yÛtA8««òæ33é\ñ†@J×ã2|ô§4®Ÿ âœM ✴jÌÊ^¾ÒÚ³GALñlÙ8i–ßEGD4y £ýžÙaÂNpÅìî ãhz‚k4SZ¢COݶL×Ùa·³™ +©ý©ÃûÓ0w6p…+jë<„]fÖ8#·S[Ââ§¶ÒíÊBÞÖ;žÇýÀ#Æêʪï‹iî0âXù,ý¹ ­ñ(Ñ5ÆDJ`2)Á Yô:~ f<ÉwaJDWN«"É0ÿct-(ý±¶Z”cÿ`§Ócð5Xúý”&02D ÝöŸé¤TM™K—/-^¾üð'àW@ô¯­5ÇÆl†YfSSK°ÌÙiFÑÎ %è8â/~ôaÔq“:wÂÑíºae5d.—AÌ¥ËõÙ£ƒg纶÷'TFI*AÈQ ãPZ[[Cün½E…Fà”2!`ëȲ`]ÈòkýrƒƒÖÖdÉ|ØíÅ#W¬Ôa½·:8!ÁL±Óƒ…ÜŠ0ƒ—*Ù]RÜ '8ŠˆUô«`À¯\¹ê2N@ùHkä¦õ¥Qè40|ìÎ#ç_½ ÿè€ç£²%±qŒ’e]?dX˜¨Ë•`b¯>Q‹ÌL¢iþgâä³U«µ*E«V¨Îg¼0öÈÃÇÿâß~úoN³à ¤¿<ï.>Í´Ås]Ò_¡t C~bÛp_\T4Œƒ¥¤èþV¦èÒÞ’rkbµ†–Új}ŠT©lrV" +¡ÈþHÍ ¢ ×û  .}}íII=¸&šgVÔv j`æŽéÙéi0ÿäÚóƒ¿z<Pé7üc·Gè!g'ˆñGHØRÉeÞXë ¶¿I¨Þöä®NŸ¼]¬xêÈÞÙ •›n"‡SÃ*,NäáK›Ü§®F !v!ð ¨}E¹rƒK{2~ÐaÌ,PŒujR÷!ñá8>±= ÒŸ{µ$«»çm¿wfw‰¿~@*e0‘Èöt‘– ÁƒDØiXÞ²c,<a'O ¦o\ú7iU§t Àhl ;ú3RÈ\¡¥ —XÉàˆ¨2±°–Az€b4+lð65Ò-|%ð +¼š”:³r£PE7H'·+4VJz°šÍ 8n#97Ùx½ )’úB¹±†8`\\ ا*Ü”Ã=ƒºŠ9a‘墜9  R)Ï4-ÂŒõÌÔ ü‰†„“XÄO-ˆQEÂǶ°Í$‘g˜ëÖ˜„¢R/rFŽó5Ä#‡‰¦Ñ—#€èýk»1áOö8LQ°T‚®—I›`·f"£ +ÌP ýýÍžI̽þF/ëSóöèÉòÁjylqg“ŸÑ¸G+›ýÚ—¾xÓIQo¸æHl5ÉäbdP2?Êò;>+€ê»ÂX<öñý¼GøÕ÷ úA(XÓµJÐà«·/1S܉DLŽôéJ,rÒ¡,:8=áž@ qžL¡šiÏõ˜Aˆu&½FÌÊ;•TR<ëB>7OÜ…EšvÚæP'sxpO?/ý¬påÝTúK“ÿÆmÛëì J܉R1÷Øo}N@ À±â8`þ£8´¥%Gþݨ²3Z¾ÉØ ã‹æÂ|,Ò§º-Qô͘Jën}µ¾\wÎÏͧâÕmIéoÄúþ¡gQtJ¼€µËñ…"?ª¾%¾/u€*J ñx7\´„KdÑÏ­^ØgØö‡#ìn[”L€‹J¢u0Yk[Úa¤¨¾SÏ|´${;›íÖYÿ‘…ÿ¼Ið©ÃM…Ù³[Ã&ècØDÒÄ@b®“¦•j€_­¬Õh ¼ÍàN4Î@`goÄ…Ë8Ž,ý†ÄÒ¶÷1ÇK+TìÁ&]m—¯<ä +"…€=”ÚBET‘F‰ ƒk¤e£FSޓՏÇ*âÂƲö…ôo6êdû éCûñ{1Ä‘}ùu¬A%?ÌÓ0MãæÍ + Ü€ó<¸ö°+´¬0VOÞkJ–0|“j—‘…ò¹ ´J¯g¦F <¿(…À½¬ÒA‡€¸Æò²VÚiê2d×’¿©Èkœ bý+Fœ>>Êg¡à&…Õ_ê‰)¶©”Àha†@¹ç6èµ7ן’þ +/¡Q°~`þÓ ?OC ¿£ ;Æñ…ÊÛK3»çX¹€¶S§ŽÿäÔ¹ÿô£¹- +@É-}šà,ï @oͳù?>QpÞüÀ< +ˆþ¹Wæg¢è«ÕjsåòìÌŒfã•0|`}³&`ÛŸ¥?Ã…J¶(¾,¾öTi"³ô6.8>ävæØPn°ýY,#ô™Œ©€éAu›<«“‰-!”XúYêG))ñÙkfy-™Q‘å+cóIʵ%“Én·k' ½ß‡ñÉü0oeýGbÁøáà6Ú1§ÆØ©X_«H©0ÈLÇ9}útù5íª,-UÞ^¬½WõÖ#ŒïQ˜ü†µA<ÕkUùÝÂ8º.Íïx)öÀ@ËP5aC”rì£íƄԮ‚@áúŽ±èƒŠô*B±ÄPJ@]¾ÒÛmÀJ³FXàé°ÎÜ6b¨h#M§"ÛÛ쀊†m®¹Å=¹ú{Ç4±)‚©Ÿ"Æôú*,5™¬–Ž4Ÿ%0D —޹‰\•.ÔöC·ÓÓuVâX¼1¤ðix\Hï#ùm"!Yæ=P0èF Æ­Ò°‘. eVV¤¶*µVá!:^ÌìÖþë4B««±f±˜!Åü"p|ä»ágëkUкpL‚« _IÝ}÷Ôwÿä™Õ•›}7^éG¨Ûîú½ o€qí/TðÑŸ=w¥Ùˆ ÍÄÀÓê…­…%¼þ£w¢nfô÷‹¨‹“Šª*ˆ>!è‡áöú¤é3=Pu=~Ì¥£.z£âGV,I5]Ä}Z¯j¤•æfšn½D{õµZƲPfÐ4§-äd• 0Ì ¬2#IÅ%qc_†õ†¨ž˜5»Ñ[bÄ=®Ø0 [M-üzŒ›gæðaÛØúö?p{Š‚øO=û´KÍ[ ýáèÄhg­|v>OE +ÍöLÚm ƒºòVÙL[¹b‰uß ÞÚ6éž~¨ˆªP"+¡C€û0ÕxÌ%Q {[ ÒZÕ-D-Q`ÛøÕ¢ùS¿Vå–“–ã¦7W°J?‰r#‚~Ûeb^™ÈU0ôoneÛU@ô¯½ß‹PõƒhxÓñtŠð‚ègs²ã .'…ae‚è_8·PUªÇ·2²ô×5ö ¿Ò¿C9g›×.ÁZÄvÇñ¢Õj…õ:×ÕôÜëÍB©ç($ˆÙÑß9Òƒ­ižà +zvA˜+þñ{=fWfn[†™ÔbA™Ìtó1DvT’ IÛ* Tpu(#êÇ=O72¾'¯ÎF[¾5µà×6[¨Yën"i˜i \7L· …D2Adp Oºaªø\ÀW0odˆ¤bû‡B~^ð# +ÄC4°åòÖtT†1–Q•"@8dqÈn 1$‡ Æ6Ã,”*%U&ðBµ€‚µ¸`W¶J èßÄTmÞ2œ˜Ç#ØK0d„A'ʇ'ä#˜‡¢¥tÔ ÛÊ徺aœ}ITUÅ;ã¡]ðøä 1É—yhòvy.É‘¾õ­¯ó HùîÂÅ…ƒþûÿò•+—ß“çKKï þnŸA2°Ù³0.Æêô ¯4xqÁà”U¾‚(ôÔ¹ÊîÊŠ~Oõ½uD¥„‘O‰¦-.Îaÿ@æ $3û¾TCØ“èÅ•KµÚ;BhйgžzD?—K,h4ÙÙ܉þ@7É’Aè‘Mßë÷‡”È–WbJ‚ÛnYK(ñÌPù <ÂÜ똙=|$ŽÞ'™¦a+ƨ¥[úâ™3-rcŸz +#9gΜübŒÉ«t`ÀËÑémO rŠÒÜ‘©¿[5#H"3#¤¤`æÃDWÏr\áW³(† )·³í÷¹J„Šgz\ ÃÒ_èЃObs‡)Žþ]ÆHÚu…L‘q¹…ÑŠ…VÌ ïÅÛ[­ Ýöù$k[‹—+ à¤ÕqeÀ£º$ýÑŠ§ÙÀ2EQ®ešõë­V£•¡8ÒÊr}|"OH€Ð—Í…DIÇÌT +<FÿçÊwÅZ@µ"‰Ì΂ü…Añn¦F5ýn#0³½ñ•Káäæß0P.BÏñ¶5ûŽç1»aÉ,P1;¾™àwøéÄd.\GœùéEünÉAÄ–¥àµP¨ºGO ŽS·êÄmÒ=¥[sŒ ÀE{˜Ã7Y} r?ð\ðMá—㼃 +7‚Q3°ø$w‡E&ÐÜaO‘„À¶.í+2JA}Õ£L% +‹%’ ŒGùyÞ˜9ÕʘmÊþñÐ F_ Áý™e…‚uؠů`âD.²A³µ&–ɆT“:< šóßóÑ9`°&Ó@0I@ﮉћ(Tà$ ffp—–ß-ÈÍ;‡ã8`bžüÑs|òGßù=íñAŠõƒ6ý¹±b\Lœ*Ý6°ô­Ñ›ÃH,¬T¾õ»ÿ;œœ—«E3[K HNÛÀ“HD«Ï@ºPñ Éî¡3ÜöHˆ³u +„úŠP ðöeö#0¹xÀÐ ƒÀ‘>IåÑS'Ÿ~öéã³GŒãÇäÇÏoßùsXõ“3gW«kWWà(Ý=°ù±ݳÆE~„ã VËÀ.L0^>• é}-LôÔ­ð¨ÄEÐÞf¬æµº¿áÁûfJHâ^)UCÁ[¢”W‰0+L4~Ì †Â‚JÍZn •&ývS6ô´Ë&–=‰¡YàøÔªˆÚÜŽ¦¿)€®eô_„£‘jJt0î×(ƒ™`笵5ª:RõXgÊ3špxƒxmé´Öj9ðÏòk qƒ8Žcî°ÀØ„ë>(Є}údtÄ`¶&& +çܹse;kퟚBJaúRo“ìPS÷|'AÁð@áÎ:~&_‚šJ³£ÜU* !e¥R+mP¦ÍvGéÁ$&àô^¢ „oÚ(°CÆPM•¥ÿÀUPÄï(ÃFÐ'Š2%@ޏŠ~O.;[Nß¶²˰3Ùòù µ*Ñ-ÃäRRí"J\±hÂô{³L ÉŒ+BP˜ÉÁðjÃZJ7;¾‹˜z†É`Ý2ÑzŸ9%è!÷墳[F‰¦ð¾žÄJ\´TOч(KÁ-oIƒ$ ¼Q&…¹â^¶ÃÐÂÚë†í6æl¨_ a‚<¤ðó_ÎﻊÊzHL³0ÈЀ/·ÆßÛ9fpø…ÑœFÒfjKý˜GÏ÷+_ûWÏ<û"Ü~±X¨VkgÏ\øÊ¾ôNåðÔtmµþÿ¶÷Žã¾ïCw{»ØÃÇ=xÄ ȳ(B`É (Ó¢¥H„£È¢CG–’Ʊë¶~Êä%uÆ3I;ÍxFOòÔfÒ‰“7™¦~u£—6i\¿çJVÌŠ²j—¶F*ZaÊ P¤‚xÄé–wXÜb÷öð¾~ûÛ½(§Í¼ŸnVËÃÝÞþùý¾ÿ¿ŸÏמxàèì~µ91X|¥á8­|>W¹´zঽ`ÑU×VM¬C5LÝΛ"`x )ÚY=ËÊZA ?]ôuÃ-º—»*Ä‚ú«À‰×”ÚîvÕ6ö•…æ¨ÏebÀ=ýݹɛÆiC‚€‹ 2{ËGw›Ã6ðX¾; IDAT4#Ô +‰žà¾t¶z¬HÆv·3³'Û¶cû¿pòÙ“på'ž‘•9ßýÎ÷Ô+SaϘ/H G–†¿‰õÑܳ=fŠ©–×Û|­·”;;hµ[MopØŒäBØg$ê"©ÔTÍVKzÈç¢F0cÀý¶ªícÐÔÒé°-#9@Ne3qÈ«ÝIת3kþÇ8éß¾´ºwߨ‚íQ@?ùŽÀ²“œ²¾WVàÆ¥A``‚èçX3âE%ùIìèœIè„BËmÕåePµj{€kBÃÐ|/tÁI &ûÉxŸ\dâ)ô)IÞ ­œ6s]É¡èP~8‹ä3HuŽ!,Ä’h·Õ*âˉ”¬óÛÄLWaÂcà U’Uâ†ÌÈr  ’ø%úlw*Èf‘±ÉD4É^ 5L3§EWg™YIupQÁ–wäUÀõÖ’G°sÃù(̈õ-Fš2¸¡îˆ}Æ€‰¡*…tRÌÉ{®juÔXm8 àTÒ¢@ÐРQ]Ö/· +Ôœd’bK_Zâ Š®T0TüUøóÀt}?¥÷´5HV±oÈæ{Ø^ßðÀ¶@Géu&jÅÎÜac¹$õøWÉD„§ËïÌ$Є’¥h­VÎÚ¡À·H©¾“Ïž*ßttÀ±w¦é¦&VQ[[.îƒmòOn»Ù'úy€ÜéÏûÜêÕ7@ôï¹ïŸºx ÏytÃP¬´¸ÿðsß=£Î°V­ÍÏÍσsk~ÈÄ}b.©-¤1'©!„â©’ P£ûì÷6À#´FÎ:?W+Œâ×'{!aàV4¬¯ büD®·”e iÑ/:·¿#È4]ØÓ ;‰ÞÝ„ÝSß> ž˜ÿ•ê’2q|ûÛ¿+/À0 îc $žªO5!ÉR­÷!ée€÷wÓ²ÄúÝÄ|J“zÀ2Œ)s”u›-=E»tÓýM?OUÞ `feGJà`=h†2iY/"=€„ܭ՜҈=VÆï®TK—â n»Hvủr ¤?]xšc8 +ÈÁêe]¯¯5A#ŽÉÕÒpZ3нfTŠÙä¾bæˆX§±3T?XŽçYÛª<çw¶mø>‰“+µôŽîFÁ·KØ:«Ž¿©è‡è€j[JÞ|/-Œïyz6«SIOÉw1>0º4²ù¼ÈìÕóG¶’Ñ d Åÿ¶³-ì•KcŸ¼kÇËáqÞš²I +&¾Wq¾Ï›Û‚n™x +ýÙŸÿ lÿÒíóob–«òΊÓl•okPû^‰S‚<:2Û$hqS©IÈñ~ü @|sÀ7YÏÜëÜE®‡°îß\Ižè€·ÁÖ§)Çyrf‘ªÿ.“æRΞ¼TD®`PÚ€ÃbêO19OR'©ò9å_w)c(á–u@°£•2äUˆvÕ?÷v,GNk¨ÿ‰|á‹øëÿû¶˜èâÈøü™k09>ÿùßúÎ÷vø$þïßW¾@+tÀGÅ… +îg)v7¹­‰|”é™éi!#Z~¢RYuPû¡|^ºÖÕRñ­ðYo¶„’ë—Ôö5/a;Êžb®ånVÄ ïÆ;bEe@ôó„O§Ð5ØŠÁúû\ùÅ ó‹a[yó ÁÒ]³kžëÿÔ`Ã_—éP N)@å +TQÛí·ìÀð[®ëÔ³ƒñ¼ Ž×0'¥ .E‹-h Æ©îÌ’!=/ž ˜“TÆêƒvÎ' „ÄNºã$MÇS´æ<Š{ +íM Üy޵âêiõs(E¿%¶ÇôûFåás}h +{2IúcÊÑäEˆð#ƒ‹­N HHÿÊùŠ@.¡ž`´eì®&N8Lü2C"ˆéÑý£õ%·¶ˆ1Ýmu ¯<&Ó$Ü… =˜Ä½1zIxØ,• ¡,ý=¡¤¿<%L–Ù/8@l¿!Td…‰ðôùXkŠwIÐÚ㘌Gñ}+*t=¬þ¤ïxüK=BÌpW›&!ã²Èf5¸9ܯ€Õ0é4§4ÑšŒ}õu6ÞQRSüG½yÚ@GwOðqFFðrØ(ìÉÝu¿l7Òi8‡õ”µ¨’®½("‘pïv %º|åSH–Ãñ£“ƒ‘Q$á5D j}£GáOl,ý}¿-ºD@ÍlnäpD¿ê9軥ï#úßg€+/ü‹¯ýáCÇïÿ_ø:Œ§Ÿ~¤¿ òñ÷ù˜Ò¸Ï! Naâh\FÁTõ`þ£¾_÷•À¸ån¢@ŽöÚ +²UYR,JGT.®Ü>s€Í§ÿvA…€è‹DpB`xجŽL)ÿA}ÝÝìZ |xf‘"“)‰èv<éÿ'¿‹…˜çξòÚÙ——Î_t[Í#äÑ…åGvÛ##éÐ3ÌÆZ5?Râ*â©tBPvÅ6)©ë8 RÅ“ˆj{¤ Î(-žÔÙ}¦ªm_#ÕJƒ5j©zÃ!Û´ì´Û³òšòw» Ç3TReº!á_Ðö°º>Ê.>+[ðÂ=kØj¬ùYCyxÓoÇË•ÊØå?õ¸a¤ºÖ>pëüÚ[í‘ënYY™k6«¹ÜpQð“ ÷:v§“ÍdÌLF§–}6ßôN:»ðŽ«—~ËÎ[ù¼v=^›ž×æß´‡sˆ·‚\vàBðr§ˆ›Ëa}nI.:;oâ:ܤJ>ªK/•÷—~¼Øî8è8ø¾Ö¨ÈS¼ÞZ¥a2¥³±¼¨;¡·Þ5‡Ò«?4¬ëŒ®oì¹a—ð!¤,-ˆ®eûi ëMˆR!ŒãT,z¼nWâÇédüh<å2&< q‹ªQºAchØn·­KµUi wuÞ€íJ + %!ÜÒÄVD(ñ¨xÿFóܲMÑ Zlj¬±]çnØ3?:sû æjÃ.Ùú»ËÖ N¬n(cµ°m϶%Cÿ{†Øñu!Jò6$F‚IÝÀØ5bš,Ä»¿NvhªjiÐÐr×Yµåz¯ËÍÊÒȨ̂œ«M†r)ÀlñÃ’³ˆOÆ-ŠQxËÀ쥰‚aÐ’nf¸IÊhÆ Ô-¯ ÌIx‘FSƒ=K$9é„éëÃÃx7,)XŒŒADžÛf4¬ j3ïÅÌŒ“ àgðk¦Ç­Xo'.­]ö‡3ïóo|ñËß|êäã_þ"LcùuMw;\Xp–/ä ×ÙgÍÛÞeå¬;_øí?úú_|þ9±o"bÀ¦GC2ôwn׈ÈH‹j|´ìu|ÅÝÔH g‡ÊšVñœFw3­¥a†…õÕµÒXAÑšIwÃnkÑ™8ªƒ]—É,è²)Œè.:ÔythB†H퉴 × +&rB©î¼kªhçkUœ$Y‘=ò‘8  RÍ>Ápž$ó…t± Å˰Ü'$uÀŽãéo? «÷™g0¤sò¿žL‹"¸ºaå†Ë7ÓÏ'š¶Œ(PîƒQ@¡|þ§ª;¢®çD³MbP†Ÿ Å€ éýö5†·,l%åâKމèg`½"–™eµ7\x™ ±.wDTœ‡X]‘9Ü“ˆp(Qpx!c<ð_X?Ã6ýÓîçŸ?yï½Èw¢ŸßÁb¹Rå ýE¤ r«ƒN×½îMír£¡6‚ÜŸ!Ô\Ø1m;*Þ‘! Iº"T©ŸÀH=<št€‹`úº‡ïûà3æ‡ó ý­FU +©„èõáÂu¹Å‹+á{Íân[R‡(ý¹à_È`¡ÁV÷aç†\ò¬÷µ—÷±hâS(ýAæ)K¶ã°wQCÿònÔж(Fú¶ƒð”‡À%Žë‚Ï É b¼kY"¢Ê%_•ùÊÊE: Ù‹Ã*éVbÑàrLË}ã(¼£«*\þ”S‰Þ~mWú%]ý¬Ø>”°9†l3æ “ŠV)bgÔ—ŒI¹°˜Ђmh%< Îú§ ŒC)¬ý éÔÎùÁgOü͇^“ +´r©‚ø9Ñøü?ú­§O<¢?ù†Ÿ1̾ïÂãHóèè‘ãèîNÀ$ïqíÝúô“Ób²V]3©È; ZÌ|à54A~vÀD =ÙA +©IM!I IÙNC,` êÄò–·­†ãÖêN±ØãÄh†î».KŽ$'CqhGéÿÔ·ž†í‰ï`i&H±)m;À¨Eƒ +ì°×&?’÷eÉP‚€¸^ÙE&èâ3äÀäé~ì‡ja7µè¢‡€Q´@ÈÈZ–ïò–&éÀ: Ñ/ðä¾ê掸n/ Hÿ.÷:Øê‡wB)|\«é¬Ùs¨_Æõo'ÊCúäC°ý…_ø­[Ýßû½/ˆm£íYC§Ž½½ÕÍGQ0Ïô šüìñÒU×¼„þ+îÉà ÔÿD?¯šb‹‰3,ýMÓ“ö ŒŸð\ä„Uä¥}:€íÜF£çY D¿ªÜåa ™à³‚ù +`t¿¹Q³‘»cl$?|ù= J u°ëey–i2WÄ•tŠÒä¡§™ÆêjøUÇÇj™ŒìÞäÀÒ›˜Æäê”|o^Ä¥';¹_^½MŸuŽD°3JÇ84ßE*×P¢Ëè1ùh·GN4`G‰~ù8`ô·±E“a´5˜'m¬Égú-º>ý Ì@5 cƒÆQxw ›Ý\:¾êJ%lj’ »±ÒáeŒEØ»r3Ì1«6ÁŸ]*Œ0|Ò*_""޻ʜ±|9¬-è»ü€è}Ív2ð=}@·rV°À©©þŠn7–ì|ÙNçàwÁßUE£¥]v +ýÑŸÄãŸÀ“Ö’‰¯œ]xOë;ðšØ?Ÿ 6²kýú›‡*9ø€z–ÃêZ%è€ùWA 8ë.³«â‘É“–é®Dé`¦½zFðD˜Q`ÍR¶ô· Ý‹ædmµ‘™½2-ʬÂÀ×dNÄ–Ïa(?è”ã8*æïÕ7+kNu©òÒÙ³§ KG¬ÕYú‹¿–Hp\Šn7Ö®éd5 É*Ù.Rݸ‘<®ïÄX¼Öþæ2üº‘f±þûÈyjZ%¼m¤Q¢7‡Ì¢ŸÓÂò-þY~4‰°@c®úämÓ…=Å‚•»ûÞ{ï¹ï^xg*ahˆŒæ¿r†‡GÙà²z"ýÀœmF>”0ç9¹ƒ¦çØyKaïDïäì| Ô€–fÕè³`Ot iV HÂ0ÄXîßE=ÀçæK£rr ‰"ÚERßvÏ t×=¶ý)äU¯Ä  ¼o”3 åº)SÖüK¦?_–Œ´Œ¦žÆ÷z<€¸Ý$N… ª´a' :ײ”ô‘°}$_`Y(Ó›c ,YøØVjmöÐ$Œ-Ü–³s˜0ä(Pr€ôç› ËxÍip˨Ì@Vµ£~°ê÷È v>àÑétÔêpã€)”QÂ&DSei¤yÍ/ø4Ó"ÝE†û$Øá TüGuNˆ¬›Žå&ñA}ê¯ÔE¤9”»²¢^kÄÍNËŒ½z" *´-jÃàU—U ÷"qY¦®‘ÉJJVcÖ`Òœºÿóâw¤Üßæ]%ǯÿêÃ}ãs¯ËìnÒüèSÿ›O=×ç°FI~ýÀÍÄßc€ìJS  +z:1µÈ&+Má,$±(dÈN“ª”Á½õ({ÌcöÁƒÂ9´À ˜=ÚÓß:€™¼%Î(Ði/²xa2d~óÿø—°wáõù‹óóãfúön| =õtŒt¶•à ÈDf<õNhF>D†‰bŒÉçè3Foõ¬=? °¹olE†Ø²º ¯ó,Ì~ô¹ü2þ¤‰Œ,do ­›FF—"p@™4hTÅX•nÀV˜a z;¥` 77l! +ÿÛºÃ0,„óÅ 6UîÍp•<œÕpêCx£ï¾ïÞðüßùììÏ.ïE‚ˆrV>¦2îˆýä_ý>8Ñîþ¢¿¥s‘b¤?)v–JbðG—ä´Ø±eYøìøá™š™Õ@U Å7úW½ÆZÃw½±bžT¬™.ØyÛY[KM.¼¸¥B°&B} «Qçˆ<ÓÄ.P‘¨fq¤0ÿãsExâÚVíNÛd­lhF{³íuºÙ,¢ÇŽ0àk{ZvKßîU_´ÅìüøÛ®·xqyjªÌÅÄaà†ütÙ®—–¸r¡¶e‚óÇ$yéTˆÙüA¨8#{ïļúaá¦ð¶ Ôs:ç}mðR°¶¤ +_[_«­^ˆWP'¡ ž+ûrêâì’_gìzŸ²5 KWk¦¥7ÉÄ»r)3jŽ5͹³Ï:tÜ ¯ãd3%-ÈÖßm•®/¶Ã&ç“«VàùžÛl& Z$Íùƒ´Hz ÖaíÈ^ë¶×‚/‹Y„†è¤fJàÎÄ´>¤Ïým%—7 ª?ÉfMo34)ݺ¥qt.½‚y?‡·\ Ôž–û!å2âÊ!3h:ÅÊ/ôÖ=ƒ¢F\ÙVU„âi1|4& 2ñ É„JS–†«rµŒàŽ_.jk~(gdµA£Þl–wÛî&<þP˜6€ýÛpVfhú œÉÙ(cµ^ßëI»ŠÕ^³Ý€WÖ”ÏâþŸ™:ñßæÊûâêLþÀ POúØÏÝÛ³ôh®>ÿƒ,½˜ª—ÆË^ovçgÞÿô·žWÑž Ô˜WܸÑñòì=åzËÄH¾kÙÍf»|óÔüùJù&¯x½5ÙÝ 7›§XÎBÂߨMS°ã3æ\1š¹n]à’üµœˆkNËaÆCt&"ÄÓÓß=;uë$CÞF»ñž»p±R,Š»©Ì üêÔ™WˆÝúúØ$×ÐÅÝ=Üyß›úÄ÷‰mãÞûî°ý}÷9pklàs2Vé_ýw'þýWŸÜñëaBBÏ/ÄôØxáÌK‹+ËõÃwa|‰hdWiW.ÅXÙMpl L»ì–…ž‘ºrA˜òæÃûF/§lõÝúÌ2ÅÒ_Ð4è†]V¼mËÓ'¼ØÂ3Íì¿5v™·×/²ôg©Ê…éTŒ„'QAH x›Ø6Ttt@ÖÌ6H8ªã‰ö|íw¡Q5ÁVĦÑé 2ú–=׋€ÐßCF‡ó„—©³FŠ $ýA øm×*J 8¼rá<Æ&ÆÇ?þÀ|œwª‰Œ?h{P`þƒ ¼žã$Gœä¤Û:€`ˆfq÷¸ë5ÀŠ7ïÎ8¥ +=Aú3ì𛈱z¿A!#xU0—ëYQ;X¡hƒôW?í¬9¨Ò’O3u˜{¾N÷ß#ñ„;ìLOñ2XRG€å + +@î¾9ÕhºæND¢•;lq3®‘•×›M—Õ@7„>²°´") w®7롘†wé^Ý„ôð P è zA¸.=X‰ qžXXúãhÅÈé"³nzí0¶ÛÍUçj5zX¨ ØÀ’ +2ÿq·{š!תmõ×a ˆJá+Μ,†}uUˆ­F@1FôÃ@c¦*tšîènѰ¼&ÈšQø%KöAÉÚ¸iÕù†Þê¼Y¹Tsw†˜à"Š9±]4ÙªE™›Ž`öè +D^M‘´ "}‹8I0©Ú6Y+˜76"#Ýhr9W<^,6VÙp> 3ì9j£M5"Ý +^KKhîÜ¢9d²ô‡qòäóñýJxrÅbü%±“ÈJz—1AþÄù×ϳ©¥¹ñÈUµá¯¼z~õÒ×8@|n²†ˆ~Ðð‘܇«µg„†ÕþöcqÁ‹5 kmá?Æ)b£!“ŽÙ]`¹ÿ )̹WÅjum´42{ôH­& †€6ÁGl{ ?Ys,¹²zÏRæ(êŽW™Ô<2„ŠãD—ºÞá ©ž5Œ$>¸ˆ¢Zm¯­€þALoWlªKÃdøJ YŸd„ÇÏwb4mº+ºÑ¥4 jЛÚѯ8}Òjn½æ…=: ¼ÿ@ù¦IØ:ˆ“ìÞŸÅö¼ù~uÁ @<ñWO>ú¹GÞçcjÜsäã¬x€wÚˆc·!Ü`Fº`N67]ÆÁOhÇè+j$©¬T7¢² hz¤}-ÓÄ<$‘~ÃÚ­­ÕO½ðÒì=wKvq46²Àö‡E›ÏåAñT¯4$~KÈp@f±¯¾+蝹K×B‹ÍÿfÃ]Z]+2Dlå¥fpvœžW-„I¦ß¾ÁËDaÆXfŽi¤p[eH§Ùì{3iûsçvÚÈŠˆßØk_Ssï8šW›ùݱ28tGŒœZJ\ƒíO=Pf,ï`ñÃR䤫 ±‘N¤šìÈaóŸ©Á`ë®Ó}Î[ªÀ¿2o×ê2––‚ôo6¼òÍ=yXblñù/ˆ27*#‡›žá:+*HDÒ £?ϧšÆÙÒGAO© ©c"È&Žÿ0W¥êUd€%g”Ùª5]¿‹Hª3FÐA_Vï\³|îØ±XŽ'=€3s—À4b@”d0ʈ^KúÿÞïýxg¦Ä§Žoÿëñ_>þ•ßýŠü-’þ¬B +µºCffߎG¾–cü´Ä—ßYËÛy„ùô\$ØñÕŒ‚. X¨ÚTë¯åç©X+ìºòB€¨ŒC@°3JÔ4§¾zúÖIõuÑ«#™ù!:¡ÛœV˜IS¨ ÃëŽî„xÆÀÜñý-¾Ëx^HÏUn ±àwåñ;h}wa‘ëš,¬¤‘Na˜™,¸»…Â8xÐmx…AÖŒO3!]Yln!d½ßÅVªp°È쉲ˆ$»‰­LL Å+iùݸóÛIô^õê¬K#·<}ð—îBx¢{î:\( ¶=bçaëELµêZ5¤âküwävU..×ÖVn¹í–ùŸËšæämÓÊSk{XžÈíWˆéÊy…”$νûÀ)t¡rvúÀÁ‰ëÇkõª»¡îûå#ø‹/w¸›žÛ +Tn(‡Ås[TÌžår8—ÑÜ%Tûºµ¬S½žÕuÐq!<ÖfÛÅØW +ÍmYéÑAªX¬ÑLau<ôñÑQ8 ×Æ%¯-§Kˆ€0à-ÀíaÓixØÎžŽ˜ÓÑK“ñ +0ö½4vZ¬7´t!ou œ•"à8I@îû>滬ÊKwcµ#y¡ôˆRÀg¥Ö£§UÝ`ÝMc&&Lf/rÕ"úe«i ÆÇ¤!ÖX«Í7Í<ª Kû5(ðÜÞlÀõí¸‘Ç ”c‰¶g^x™ß¼ýƒÓÕjLê»:kbg­öÀÇŽE“ª8:4zÿ½G_üáÜÄX DóÊr­8Z€msÝ<0¶FÜ„…QkþÍjqghk#,s0+굦9d0RXaí_ѸU)£)²ï¹š‘’³¤íf÷V²÷OÍ϶65½T°M®ûDŒ„{B$Jc6¦ÐM/Á…–¦°sä1y29Ü~ZÎù°ãi[©c ŠÂ×ü'pÅ8*‡ÃDôP,Ût¯6¹DûÂÊÛÃà±ðÙ¥‚›ð-$©¶8dMkÀ‚‰}×´‘ó…ÜÙ—ò»ÅØ ²˜Ð˜5~±¹î£0W:kŸù î®ÈºËD¼óGŽßg'z84lŸýwÿ×Ï}ž¦yê…ñ‡O<þetÚ’¹Ö#Óûÿz|”Óy{±ÉŒZWÙ’æ3=Ü8uw¦¥ÿ=÷·sð…ùåf˺¹ K Ì„º@4¸Ë£Ã#0ÚCèf—2@Z +ñ+¬œ¶Ž… IDATÕmÓR¯hx ðô6[YÕðG[-WÓd$¦p½e¦a7[˜®ô:}­B‘®%–XZ÷Ã.޲ê‚1ÖÕIšI@–< +¦3Lb’c3I'@BTRi¦A5¿àH"X[ÆäškI}‰4§ØÿÒ¿áÔòvt€*×A·ÕcúùQ¾j%'œ,$±‚ÕÎâÿ ã!¢þÎÉò§;œ„JXY3Ï—\pÂ\Z0¾ñŸžœmabJ¢s?žpÿÑûÔ·‚M ÊÛ¯üñŸþ³ßþ¢úÓÒ +ꉉ±Qgƒ ˆK¸™‚ºó×ê‰&okWZ¨hçöo¬_vÏUŽüÜLmµQ«:³ÇfNœ+í+üðä3ß:]+¯9¿°x` +;ø|€Óh´œ÷š,xÌl¿S˜³eG¨MxÎ}1Oüõº3R° àÉ5ªâÿ·á¶0Ê—äæˆ:Ãï‰á¬¼ƒ·Ô³C›ä…€ô‡Iëz>ìŒO˜+ï˜ËK8£"Ñö~Agzø-Nýàô‘œ>ýýž€þ±c¿¡¯Í¨¼?JÞD)7TB# ƒéao%«Sw삌€ΟÂW-î +÷­æ Š ¿¦"Ÿ¬íªÈÇä­“mG1Å=¹½7î©­ÅÑž˜i1ìZ¿\2ôˆ<ôF£~À¡^®vg'Àk³¥[µÏ`;è®™-Òh*mÐkWã{G¶C¤ì”?Aq[U…Í¢ÿüB…yá‹Qèö ÇÄ‘¾HŒ ,".ÃҨݸ,ßi·ºÎ{|Iñ.Ȇ¦ºRúÃ6Œêñy(†‰t*Í% }M +}€€…Äx!hIÚ&×µ"¸§äéÏj€RÐD=8‚ØEà úݨ¸ÚÇþ¢K~ú>²bŸ ð—_ÿÆÒ¥‹~þQþŠíÓ¡Èáã¸ë.‰n{ú¥3 oÊÅ j`é&“NU_Ÿ6O¿$ãÚMzpµ5œ€‘ÝËÄé; ýagòö2ìG󂛞)³:@½-H.”d0ÿa‰Çæ^ÆŸ˜š.ÏÍWÊ7`PháG SšZ¹´NÀ샳gç8ïàÌÁ³/㸉à,z¤?èP‚Y +{v.œ}ÿ«ÏÚ•sÉ‚©·²Rƒ­ˆTµÖ²ºâN§B6hðË©tåüŠ ôÏg²f¨¯é°‚´‘®­«Ô1†ÈÇnÈJÐíQ?ô¼ÔY=ýíï~þÑß)÷„¶fï;‚:àè#øÿùBtÀÉgeÖeZÃi—oÌÀo*IjfM6Ïy‰a!lÛ÷6»µCDÄc}3͵@ç‰*Dô~m­Œ8¾Â×瀹„ļ¡®Ø¬%Ƚ^»²¶øúâÌ Z ýk—›ç¦yä9·Ç J ðB9ƒ +™F)Äç!õ•l¾§V]»œƒ•!šŸÒÐwPÂ\šìþÑN×Qþ.û®LrrJ‹à’ä*tcswÝåÿæö!ß81}ð¼àòž"Kº–ž®çž= :· tuJSç{ñ@úÌÿä˜þàíóó¯ýÂý÷‹[{Þg â|yì ƒP,`Þ‰·˜Þ‰ÌpýF;x3’@mÒvjÉ`ï•¥¿H ¾rÃ]ϵLKÏZFZ‰ÃøÁˆ­Ð ˆt{É;€µÞ½7¤íùYÓÀÔå°Ž¶¦Sy þ0üoTÙÅ! õfäFµùœì§OõX¯i`×r! ÌÉ€¥Æ|Âป;´wˆ^é ~ëxw—ÿäÿ|vÿ×X§B@_ùƒÇÿWÿò‰¿xBé€ün“ÕÀ‘HÀÎÌÔØ‹?”ôIª¹Ÿˆ~µc‘µ^¯51ÔóLés(ßµíìåµ$0µÚ Q\•¸­ÎXœæ@BBGp®ºlûÛÃbÛ(óð¯WØö_<_©×m˜(‹¯Í¹Ô€ß +ìà™ÿŽªâÈу/|¯ëž£3'Oœ.]Ÿ-Ùs¯V&öâ5Ö.×§o›t¯¶jK+åNÁ¶ö^¤ÿÂB%—³`§²€^QqÌv³Ä Lã™lÐøþVùÀX¾«ˆ˜ÆSÓ¾?ÀÆnvYŃ=×Ü®œ€í%@j°ôßþ>HÞùµßxìø3³_ûªD“þă÷)€¿E=³ì%¢-ñO)ý·P„b@CdéMf +.½S + I ĽxZ +«t’«ì+h°(ˆªAÑ D?;Ž´–ÆœÐáœ9·aºj2çpnf+Øì›©”È+ Ø>1½t\jÝDmúž2̱{ \°â;fìJ³‘ÞJ¥Iàuü΀–ÒuÓÝô0¡#jKÖk4Vü(åµ·Ž?a _ZˆÓ¿ÊZT†)TƒŸ'’qÌf¦æ}.[(ÎÜ6uð¶[`»½K™›nÂÄû…±ÒüoxïÞûgWV²‰©‘DÛÓ„êoÈv¥Þö®ºÿä—Œâ›óó ÙO_~=èñëKBÖÆ¹m1ŒŒÔô§¤JI–'¦\º¯i­jº‰\ÏžkhH©S]3ŸBácÃ;bÅŽ #3_Zøc¯ S•Íš p;ךΪçß‚e‡ÖqÌ(I–E—‰M4!\°ð¦$]:,;K¥¥×iOÜ å—xÙN–îD®:ØnÛ7³Nýº)¹aÃÝð©ËÜȆ†ºöi|s;™0ûÓâ[£*€‘K‹D=·u·ºò)–áZ©Ð…­ž‘ÝËp|Ð,Á:š” #¸Q» ;8U‘8QA§fx™N¼l1Dx„—÷:mk×(¼^yíô¿ùã'æÎ½‚÷.â>;·pïÏÜýÿç¯.\\œ¾õvo½nsLû•?~ü‘O}>355‘-æ+ü+ÛÑæz“Ñ›iÆ&¦fbNªœSc­ÙíhÃùáVCFvÞÒR!C ׉ÿÖ¦h€™2‚Ml7+OL,¿‹^ÏÒO(NM‡ŒB9æåwdJü™wN•Jhm<óÿžÊÛÎZãâ8ó=§Z£8:Þx/;îô7W]]XűBðž+×®8žã_?Jö@ rù\nlÌÝË~|s}>W(xår3ogW–4+“ÝsÝÈÅ×—ðó…œã4FGó–!ÎÌ-¼k +¦ÿ¹.Ì›­¾[?÷£ÅcŸ<òÒ è»Üródvxµü p\p˜l4éŠ4Ós]¦wE½ù¬‡?šw}§±ço@a|ú—¤Á÷ÙÿíŸý›OMŒ£gì‘)óµZCtL»`8ußÔ&o,þÕŸ?^ïçÑÏ?öð§xôŸ" +´)´ö&Vf9‚‰fæº1ÁŠíÈšöd=>¬MÙ¥¼FÍ1-3K©iÏó*ïTm»4V* Oãåm‹k—q9#þá<†~ºkt»¾žÆ-ü)îjQÞÌnÀÅiDó‡µÁ:²ÑQUŦ¯E­³y;ï4»ùaÜ÷î—SLJ[½Ü€5b€Ž˜BFÛ‘K|¦Ø—E´<´;ÝN&Ý_ÖG±â# TT_/—ùLÏBõª>'Ž2dàù~^÷aõ"ò[Û¸ÿ§Æñã½yèãèè=L1}¯§CˆGE% °÷’´ËÜkóÕ˵éÞòÿ‚Àù7VÖ®¾mrù2j› ¡ŸÕÛ\BgÄxYÃ`,fѹ?ÿæÓ7ß;ðæ™Wç@úÃË%ÿ†·ØîcåY°…ËA­Ã‡fÿô«¾ýŽ•qÏ„¯:ô˜>4=¨¥ÑPu·ùÝàx¿ºT_}§>uG1‰§/é…"z¤X_”ΚgQ( ä>Øn`²€—ü nýÕ‘ZDž—«X3Hö6Åa¬A£¸VA>H­v%ðHúÈô¿"FrÖ8³'!¸T‘ÑÃJØ›ìz 3lMà +‘ >L¦.DÔ.°ãI°¦¾X('/ÏL®{QhŽO~ë©™Ûû{zy€ÜŸ¾õ5põ`G1ÃHÿ©©i˜üÎ…‹ç÷ßx¶`ÆVÞ$AvóÔÚ•¼&§ÆN¿°P/”o*Îým¶¡æ-¾Y9r÷ È÷ÅWÞ3Òß¹ÒûÀ ,ýÇÊcKoU +»óà™Ág&nŠ |K&îW–°–¡|> Vñ½lÆ.ƒÛ”ÝŒ¥ÑQöqz!Òú©Eä謨êkÍ•å&øüæ3ïªÜ@%o›õz“‘&牼·¶R;õ­SÌŠuê»g‹{òõµÆéBM¯VÑQ¹f>ÔïÌÂÐVy_Ü8Ù¨¯KÂû*I‹;ûíØ=j?ùŸ{8›=qòÔ¯}á±ÕÕU–þ}¤?ˆ~uuþèÌ™ÿ1÷ÙOþæà·ÿü¡ã³ðzúÄ)y’¶f>lyëà܆¶%‹÷ÓØçR®Óâ̳*Ç4#Xì껵¹Wç±pCÌ¿V)î±§o+ƒèçFùhÈFÄ<–†Çì"u†" +1oiÜAŽ‚…ÏZ4é$+ü•çðÛ—jKo׎ܞ¨]´*¯×œærù€œ*\k-^«?U¥_Eè—‘wÁsÙÁxíÐFŽn…Eœvè€íß!ØÀ_ÀÂ’+M×û\tß ¶Q7® ½éèx²ö1’øŸ8~,Œ¤?Þîk$A<½§*3ÖŠÝS¬^–IÖî–9v¹¾ri=†‡†¸¶2 ÷^$úQ h!3èb·NoФÿôÔ”øJÿGèÜÀ¢æ& é·Y cŠþ¯Êƒ€mnÙéNÀD¶-Ëä#ØÄÓv)pӆѠ™”OßÚ#9{¤U­ô`ˆ‹B6§2Ü©†ŠbPDhìŒáb±81¦Â¸j¨zm $â Ï*SŽ`›€ùo ò¾”ã ²C¦¿U "' RÂê¥g…‰²¶ý“¾hddDUyzÞájΠ7A§m <ævõƒ¡3”n¦Óû6ÿÏþèåòõ(žª«Kt]µ¾mO8«:Àm54ÖÈn)”Að ƒôçwôq~¤ç´›Äí3&Æê¶ ªeRØ™*/\z‘ßDÿÛ?©íý@¶"¬Nß~`þÜùâh!o½}éí½ûöNìp"Y_­V§cäúrÓÓÁüçxë ñt’ž´WÀ¦šÛ®ºH±þZ4mj`uÒº®Ó/VäBð~EH”V¯ƒÚ¥t}aõÝ5¯¾riµR©NÝr˜@åü¢9,'^Þ¶ÝV‹CØ fÀ˜«Õ‚b§àìùSÏÉsSÒöû¤?8¦\6êµCs°gΰøü¯=ö7Çg!R,ý™ÿ¦¡‚¥ÔÑÒõ=Ïa#À¢Z=çª×&ÛÍÿ®X­âT™¹cô(€ewÐN¦òe¬ÏÞŠó‚²úìF0ˆÑ´'é/¸/ÂPò|Ÿ¥¿:ÿ½ûŠðRa°<azœñâ¢OìEV:è”w™ F`5ÂüçŒkß3FM:@v%Ø‹8ßËD]ú˜ÿðb`Yyþ¬TUÈ}×q…mž–{Ä÷<»XÊï-ß:ó3wbfõ—åà}üÐOáíì§®]öÅ»“JôƒáÏÛOÿâ# BXúËÛ7lqq½i˜ª5 ÿLžjžBÑ û‡ï˜yòÄIØÂdã˜;)€z=x°ù/OÛsuÓb\b√€Q}¸k”E?xX°¢_ÙþÝÌk*ÒR¥Uû)‚f ú}G–þ¼]8÷Šz¿pÝžù×Ïùß +=ù­o<6õ¸zDßA°ñf5Ú׬´ xEuÇ›¼e1¨Ëføô¼üM´ýsvÔ€ÊÊÀŽEŒÒezä>¼N½ˆjäþ)õ£5òhóöÞ¥·e¹ó Ï¿pò„gçæ>Qš_¨€ù?{ÏÁyÄ2:3ûà#§žE{hrj|qaÎ3¿«€˜bN\^]-í±«$È,/žGwaòÀx­Ž·8ŽÒlG`µAEðGëJñ8ÙO¬Qošƒ2r:àHð@€ôÑ/(äµãð,·1ªò–þø±M¥@úÃKì4–œZ¨¶ÒÛs‘³:`ñbDŸô8›ÁÔÀ @M¡ÒÓCGIOÙþw•Ç~@ù,ýEÔ—ƒ- XTÉo:&ÒÖ+ç? +W°¥•Û" ÍvÖ@ŒÇLJsÈÛg¯ 'À.R˜¢@Tòo1~WàP‡„âÛâÚy;ƒÌ½ª„êeXV±tƒÜñ½¸ò‡E ‹6çlñ·H‘ ÝšÎ´Ú^³-=GoMJXO´Í¡¬0ex»†¬»cÖä÷ìß7öÀQrd1Çóz(£Êp +1L™–Bj¼úU¬q£bG3#³Þ&¶ƒ(ƒý…7+¡.n¿mæÌçr¶ýµÿô×o%Þ4ÉâW<¸=ˆ?–¥ŸD2Ù´nI*n™i>uoŽÜyä7ì!Û¶†§L5ZÎð¦Çú#…¡{é6 >;—WwDy¼\ž˜<ó*&Œ­½A ìq÷*æ½%õæ¿é#zˆZŒ~‚êåàxm˜FVåJ­Vq܆oŽ˜9;›Î>ùÔéÙÅ¢ÊËx¡/¨X-•ße9Ž—Âåß:ÈZî¦E7ô–~‚ÖYaOÞëjÝæÛkwÚP³.º¢ð@L·<aÇÛÄÀü³¸¿Ïxá-§˜·”¬ÚÌwÑòEJ¢ùÃÃÖôN»FžLënIsD„MI´Ë4h‹&¨ +Hw\‡êÜÛ%?'¯¯ÁÅy]ÂD¯_YkºMÔ¼¦*›‹).¢š¨þ•"œtêRí¡Ñ»ï@Av÷÷ˆÿyy婉C·ÍÐs÷ЦËÁ(ìyü÷‘fyµZ½R7‡Â σ¹sÛH€¼² ‚·cpšf¸¬ØL½å´º³•f;>ßEaѤJA¸žÄàÚÖWë0½y^Ùù\£ã4jµ±‰âþɱ‘=¶ëú°jµÝ#Gg@Ä„éµ;ï>¡Þ\¾ýÃû½;ÕVux–ÊÂŽ=NÁ1¯;p[5{4kåŒv·nŽxú°×\‡ÅZ93ë;kõvg´N…víNaþì¼]ÈéF8vaê6Ìœ=3ðð´–Ñ_øáÜ=žy{e5¸Úž¹gjŽ¢ü¸óÒ|¥|óÄÜK•©›1'1÷ò³÷™bçæMp·.”Jè y­ª SDK502 s`+÷‘ê&ð×[®62jþƒ\šÍ9ûr"dÆ6r–å<Í ϼ¡Õ®öx'<î9šŸ¸ šn ô,”F€ð Ü¡‚G×mÁCàüÖ5Áâ xa†¯Â=Ü](üäüR臦ìöƒÕ +3–Úâ¶® "Ë󺡩eÌÎ~&•Ñ:Tî,Ù:±ÑyƒÓºA]kˆNq+t<§Q‡¹:±÷p½^]«Wa»w̆‹‚™¶øúJ½yyf¦lïb^ŠM߉D‹šA¡A”¡*ÀbŒêŠ}­€Œ¯ Ñ?ôvTŸ#þÞãø±cÇ?qlµÞºû¨,¿-%h€jõøÁ`éD‚B·w£®B¯ ý˜£UÂx"oÓ O‘¼«\Zž=z¸ég~x–¿«¤¿ Ãbýñ)ɳ ?‘ý_!«ìúÒ™WçÞ €ï#Ÿ”9(^¥YÃÔÒažnöðð¡{Yp9Do†Z/×e­Õ("ã<’}3ä:’s¥B¸(ð­J¶Íæn‘’ê†åŸ9³(cà¢rÅVå"ÊôòäX©$ .øºm›FO†SÖ.;“·•Aú/¾sUʯ„El™v슪&d\‡žI,(«—VíáÜ~`xØ(”ìZ5áÎD–¸Ž½£é Î¥¼M‚ýb!jê5LO¤ }[ðP™9×ìÖ*zU*AÖ sÓˆ¹pÌ¿>?}ë4lEo£ —qúôùÜfÓÊåxçÄÜËÇÜ¡³´íóÜ àFa?Hcƒ’º®rúÎÚ^l9ÂÍ5Ðh‡ìù ’ûŒþˆ°xQ”¹r©¢_¬OJ€žR^ ¤ Ø«Tå…•$ª°˜›‡áÿü¶éÀz"T®ü´ÜË¥õ«+Í–{ËT¹ÙtWý)âTÉ Yu”ië¬p!Î §9CÄ#Nw˜2¤? ¤¿<1 +mñ>iäNnØl¶¼1Êͽº˜Ä±QãÝlKã²y +´¸Ótá^PE2³÷Ú9§RiW~²ƒ]l â«VÔó¾sÓŠþ}ôZØi”Öq'ª<ßr×]^>‚b¡ŠâØk;°oDà¬!71bvF¹ïeH\D²VnÖ{Ñ×AúƒQh™1`ÉH¡4yààÊ’,Ù=œ+l±¾áY¡ä$›ÿŒTßh©›‘r?!ý‰ÁYG 4ei¶ˆ¤?3BHô‚žµÀ’FWïŸ }ÿŸÀEòÌ3'>ýKˆ +¶ Ëqwå…K+j¿@XV¶gùa”)?9+ï¦:“5‚àÖS9ÈZfh +¼‡ò> wž;_9üáƒg¨bïÑ_Æ޳rÁ£äâîÆ­ma0”þp¶„âÂìúþ ÆK2‹õä·‘ïÔ@‚<Äd„^x!BoB ¾C*?´Á[¬Šc9ÅÌ®ˆÄ˜…ç¾£¹)‘Í¡êPós•ÚªÃ%  ÆÇ¢U}ãèX]­è.]2d¢¦0ª.ÈÛ ÖÈc/Áke¹§-^lSÄعwß#æ/û­®Ø6«­bIžd°O£È·›Ž(¦éÞA,þˆøiÕYN€mÙÑÛ »…ÈHIRÙ>®‘ûÉÁ(!bƼrÃûæç>MStãÖ0>>ng0i4}K +Mmeyñ­óÇÜán µéØ ÁÚ²Œ€Ê +õl\ÞŠˆÓ„í¬º„@¯Ã\ÍIé}ÑmƒsU°wå}e¿ßÃ$×ø2H§ÄædbÑ TT£—º±^Õóö°œ3Ë+q¶Ìÿ\ ãDDŽÓd³#êÁêJšdïØh¸~C3eAò¹3q…¢Äù;oͽRmùF¢U IÎPœÿ”ŸÌõ<ëÚe¯ü^•²j únÏ™¸¢FjÀuÃZ­?*;1¡úTl€r{9þ°£ C¥ÁØf’5ÕeA„ŽÍó¤²bÇÁXÜ’¡³—Í”¥%†‰?„­6Œ.¢”#J„U£™Y±àBsÖW‹×á=\#'`ÈìŸù‘ôosŠ–µË¢—Ž”v‚õb3ÁÐ%×–„â›* +$½Ô€“$@Ȉý7OÝ8u lS1/H‘àØ "éâäÉý·ÜùnññÛ±ˆ—Q „àðuýM’8ìÀx<öûƒùÏ€ Û_ Q|Ë‘£8ÃA ôý(bQªÆÛ„{çwuÔaÂå’%á|b°³å«š®l„êxahKï׸ˆø–Ž'yyÊJ6úÈG’ÿ+fô¥”O›æ'±“§UÏ [Mº°=jî°`ÛÇvéÿþC™ÿ¸cæF#Õi¸3‡¤íÈ&? +ý@¦=Y°ÀÐÙÛûÆY 8ލ¾T«ø|÷z,tð\*T+ìÑ'&ð° ¼^Z_=+ÒXOA¸Ä¨8œÃ®F•”lËoqwß(QGÈö®LVüâx§› IDATÃìøIY³Çäµ]¶ý±¦9›ñÚ–þ>NMزÀ°µà + íçÃbk¡Ùž™‘÷ÐÈÖš Р àlí|TX¥HE§#ÒOÆÝ„U*ç ¹b›XÕ{‰;”d¬¿‹Zjïýè‘ûî¾KÈNßT.R´BÜ®;NuMZúùÝÅVh|åß}ff¤¿ã4üØßç#£ðC[A)˜Æ.õ[fFþ., “ 7^3}IkäÓ á§¶œ™ä šÿů? +ϲY[­þ¤òO~ñáÜ9:d.ÕjE®31ƒ’Ð%ݤ K€(û̧ðì/O¾W¾qB$â‰t<8˜Mé;YYÁWJ×2~ýÔ¹W/„mׄ‡ºé˜™a-íÊTD +‘Y‚-‘’! %rid*v‰g4r©4:R,äwçÄz£vuË䫵*x!£»GÍ´‡•lRÒu;±àXlA´ßóÝy{q´pêÙÓöPeS'U±Y)2¤ œ‡¡§a»¡‡Ôèz¨Êª–F®¢®ÏÂîQCÏ—žB$ž<ÐÒ‘JÁŠò¶:ð4”†ø™0èEbî§M7ß¶4-…Ö––Õ³ƒFà3¦M¨#à5­ÝA=!‚Ôg7Doޤ¾ìe  ¯“Ð19Hs{ä:{éÒÛÿü·¿ðÕûÄü«Çï¼óàþqtìæÏ?þ—ÿ¡”·?ú‘™w–ï î¸yÞÊ/½ýÆ÷~ðäçþá£{Šæ¹×æòù)3kJ,ÅM¿ê´årCC>6Í å»QCl=òPJ ƒ! ÁÜ3B r¹v j,„‰GþËÈrX˜¯ „9p}2v°éss™„| y"}r ¬AëI6m›0¦pþyr ø<+–£mZ!ÁÙˆ‚¬“è`JÍj˜cµnYSÊâ0¨&mÅ8FJ(ÅhqJ'Á?±Ó5Äâm,Ú+ïTj“SE0£Í|©ZoæÉ«01 +®ùèüÉvEÛBcÈÛè˜Þæ:¯P"XgÄMħÝ­òúÌíQžÆéÿ¶~ìá#·¿ð‚o¹ï.ü`ç=ß %al‡³’ÓÂÃd¼/+˜¹ø˜kr ¹ŽøHj@—ì!)8«gà-kÈÝDø Æv4³#ÃG|>Q*1ëmu3d¤zXQÏúX‚¨½ºÇ ‚MÛÂ…¤u© \m$ô®kà=í²öNÜraS¾æ9}G™bþ‚÷ 5˜J7 §Z.Á€i„ Alz;{×ÇÉȇ=ôPòOJðÕêN¹®kNȨ÷ß´_}¸ºZëR8˜ÿÉÂë!â9§Bs[©¿YRË\Ðbk:LD6¸ÒZ½éEÕG*hæ7þËS`Ê}ú†xgbw¤ÿD±¨& +7£Æ + !ôSÉÖ^¾†3w1Ž›?ýô‰‰RqöÞkÒ>ýmüÑï~¡ Nž8qìøñœ•_®UrQ|ÃÛ Û~—U Hü†ÓÈ‚\1Íêj5æµm &/KÊœ+QÜi@S1(µ#ÿÄmÆ 7”¤–,ÌÏ-ªî_5TóÀ…²O9ñu.Ân/ݨ­¸ŒLQyk•± +=èdä§Û‘˜Nþ–ÇYôì #„ +(–dæ’gBe×CƒÉšT’2ä€=ǰ·= ™÷"Ú*=‰ŠdKùoüÓGAÀëÐaÂùXDi +èE%ƒi7çw¤bCÕ!ŠgH~ØF€~”w:éÄÀTÓ&aÅqxJ×ã< ÈGN‰ ?eI_ªÄ}\ðŽE?³TŠ(Æ[£\7Huë*oa4t€šðIPc•wVa û¦‘qZž9±æ‡âˆl U]ã´ø‹h»hY±xŽ r++ñô€Ëõ(.‡jÉòBbI%0š7ÖÚcÿм4C“ÖÄTÒ@ä±£íß78Š‹e¬)ÁU=Aw¼òŠc¬PÆ å{+o¾Ü¦‹=eB鿼T£S’ ­VmˆL³xíö`?j5²r¶ÛtP€ùï¶¢2Þ·/ªr=þq¢@¹ÿç°ñ +¤ÿû\a2y+v‚Ö¹ðÖ…PÇœé§"á +"c?BÁ•ÿÔ5‚ hx ¬]†tT1;et°|³ÑrÙIô¾'>F]]TÜ©y/Rà3Ÿ(S—E8?ý¡ªñÐCÇóù’_ƒ»7y*¶ó7'Àeé/ˆ3–w@üæéß$$2º¸Æ4è€v€¢_1—ˆ¢«qTóLAúãÚå&Lnyòä@Ä@𽃹ý8$H^l'eÝ>8â†]õu/è—¡-6‚E¥ÞH¬þ¤¸--S¡Oa4ÈH\D¢¨Ý°~Lc¬1¥'JKŽæO„¢jö&äà{ÅÅlbÑŸIðÊËsmb왾yÀ•µžŒHn—ݼڸåƒù•Ï&߯ü¤Rþ@ÜÅ‚œx¦ú€ás.¢ÿrýÃ# oÁ?¢À ʤNDÓˆ¬Š>(€.!ÀuêØŠ¸LKŒí‹À ØŸcúAqsÞÂ|‹õ=#Lã¬#iLÛG’Ó7‡¨äWP¸V,(† á¢a¢¸‘´õœÄ(lÅ*ÄÁž2+žçŠ7F]×p^ +,èš)êkîÚyóRn¹QoZV#}Ã+ß0êRžÉi)ã¦Ã¢_ì$0N¸L@§Œ¢L`5 úMRx¨W^£y‹kðA(^OT]¾œÿX­õO$˜üº›¬$ß[:#$4ˆZtDŠx§é\®rI #t‚WŒO²BUxb `Élç$ÈBì³ + X”@iò\BŸKÌ]S/¼2•(s[;þ+hÐø ÞûÁ)–þ"Òù©£öÊ}ÐrªáÐmá}gó¿4Z<ù,ÛÎÌ`ÁÀvž[0ÿ˜ì;«@„tMVè_C.ƒô·sViw"j™<çÈp‡¹žT`ûæh?Ðßed"ÚÞRÞ.šùßø¦ ) +à±ßû}þө矟{ùlâK;SÊ5ÝD9Z4P’v8Ÿ`™GöĈ³,=–ûõËq°.ØDЦÝÛ²‚Yh:²µ¨ÞŸ}‘ìN={:ùavHeíp$ý]Z6ì™@s68 Wßq¼õøç¬áxŸŸ²!CüÒüÇl­#gÍ'D¿ß›Ÿ“цŸ¶ï8¾Ó3_'M#m=ÑÜoþ‹¨#NÞ6ÏuÛîÆN-]‡îœiT¥Ð'`O¡Q'·+ÿÆÏ>ñ—öGÿúߨ7•ô‡U –¯eþFYéœURT(ý• àR¡ËÀYz”ÍC$}âòÔ*¨cq«N¢_T.Ö +…ùIîãÛ˜²d`+ä*d®ë±JÀg§x¸h)e Y±Æ¶¿ Š—õvm:gÐ\qK/Y£Î —c +Å2M’N›)‘UÚ“/‡• +ñ•¾òNC@uŠeP¾ ¡|B ãwÛ,ý“œ8af¢[®±¦4xVöQ²ˆÌ£Àæ?ÇŠ]¸Y^¤7@ ¨œ +6¥©ð)˜ÌcÚív9ýÛÞ¸fǼRK—_gTŸˆÖt€Ó¬Ù¹¢iÉN]5H»YˆÁQL BsáœæU^·|§‡€@úS¨X»÷6i$ñAV°ºØÞÀ˜yøs:xûÑáýÙ#‡w<û¤ !EøÕl{óŒ„Ôh:z£AËm’‡9Õð¼³o.NŒc)NËóÕ%Y¦¡i&šù&†4lê`—6»®Åá?†CÐ8L$N½²°ð#Ô´oœ;;BØ?üò—¹·‰«Œë ጟø‹¯?úùÏ”o(×®Ô‹Åâüë Ó·ö¸½qüD *R*Ž˜#Åyæ‡g`œþÁó×—Îþð•»ïž]YºX¾qºrqÞiÔì¡Qƒ[÷Lë #bôN”{o9ï,¾µ8>V”ðs¦lš+ÎÂÇŒŠ«íyíu9˜fUKÆ·9dò²€sPkpLvÐj¡PÖ‚ HàŽ^Ó+97“àEÀŠãÀÎÛhã'Oœ>|×$aû`ç}Á¶1p™„êM‘}·XCàeS†ÓsEÐÆPÆF×oÅë‡Ýume‰Ê˜òMèµPà›jˆоïšT€,(€óAÁw&ö:˜%Õ"x(s€âQ[àIØÍF £v /¯%@ ´7Ú†AAɹûË2¹"â6—ú¬¡?;=(zùpÙ/D*Øà°!µ†5CÕâ¥RÂî¿ñ€™TÞCù­ç|iü–C©œ=T>÷ZåÐÁrM ar5*Qh[a᜻-W0ÒYIõœéæz@•yäÇм%’ÃÂüÚÑ´¥\YÜi°ÕÑEnûS·Ž™9é9èe½•ùzá:k¢”«¿çÊî}ÒÖVJw<Ïq]¯9ͦ˜fÔe(#p˜ äÒ&ÍB7Aâ”Ji#°±X±‘WK™FÆky‘!Â-ä.f¼ Q C¶‘>€jäµsÍ#ò¨4ZÓ¨™PD¼•3gM9u7Ÿ7KùÒÙ«sešì ~ °V«‡àQ,7;:bäè\–¦Ñ®Â@ôi5“7ç^X°GràM¯¾Ó‘…˜{ºíÍQ¤\ÇCŽ9Dª2DëÔ8c¤¥u×à—M—œÛƪ\+«³ŸÝ%y=8ˆ5om΀û>|¾ƒ;nk½±& ò@öÖ¯Ôá Ý"Sb™lÁ=ñm+óvD[´6$Wf2*¿‹ÿ\TgúÄ›í‡È­”Á¿}MÌ|–y;W§Ÿ}cl_ÞÞ•ãPøA»me³ heî–aÙ¨*Œïgæ‰ûGbÛ@[ QâÉuiÛ x€ô_¡Æ³ù +êXÐp‹sÖN.9Q¯,Q}_*"¼À´&Áhž3Ëg,Ú‘‰—¦;KŒxÏ}ïÔwþ;:ÍuÀTÔ3üݼø³÷¾xÿ}w'´Ësö¨üëü<Š~Þîx¶ÛÇÓÿ•B:Ïœ8óJÜ)ª\Zù늼ÅTâw—{ªû¸²Ršo]±•èöÖ€^¶@æÖ®ªÞS` °¶«+ýq¶|îý*7˜Š(\a2±¶½BÊ 2w]ßУ>xÖXÄ–@$(±¬bC®üÜ.“­¬á] ¤ãb ™,} +&‹ãÈ š`Å”¯çt4òüdd•®áÉx›”O‹8{sùáÜQ½$ sy¶în†¢'‚ƒ^Zº01!sNî:%–™C\‚Ha¯g þ°XÚm¸?Vj+ÝnK…*6<“²ñÙa[ÏJ×{öè±¾^ø¾éFÙŒ a[!Šþ‡f€Q£ëL;ègT(7ap°ÄäÖèìër•‹+Y/~ÊwÝYÑÒ¿/Ä—ð€+Â:ùWƒ³zJ5I JȌӶžßaãvŒ¯cXVú¼LóªÈÇLDGeKY¤dßâ«+† ²ÊyŒ sƒô'îǨCõrÕßìi+‡nSz« H·Ã’pûUlÏH¥•o¡NL Ù,O˜{¡§€\Ɉ娊ß0 ŸòYEö¨ Ë@äAØ÷»]Õ“!"%7¤séóO "Í©`®Ã¶³žïð‚6hYN`àeÒzòɉÏnsⓃÁ~‡(ÁÞ*–lØÂºËåk¼ð¶b}ú—¾Öý=ñìs-Â9yòI òœLðJ—¼Áx¯Ë7)üÕx¯/V‚ù°¸/1²ÎÐd +cíº¼RKº]èDnÜóZTàÈ¢BH,YILpÁ”ÆòJ ì(ýÙöçÁÅïf/É%Zß0Â: p]\b˜LƒDã5O©¶žIi â½­] ¬¬: y• Ÿ!“g!î[q–Ïóp²²*J:™ë ¶]äí‚Ë,ÀKD Ãà€`¤ú/P1Rü]F:-{Áô8kgYÁ90k8gFqUýÙ¨±ÀŒ †@ ®£ÒÛbéÔ÷O.­,ÿú¯~ñÐAùË1¹NHÅ +½JëQykto»†lÑÂÐ?F""=ìUÎЖxµ,c>;ï5=#ß-Oõ¥—+à(?Õ¨P´§7ü¥ \௠+W‡%š –{l¸HMN–“ŠM¶ˆn–êªpŽW%• 2¥Œïâ£fe,0Üï2+€g¾{òàmq2ˆ~‰*yc ÅÞΛ¶¡9 g"–bµÆá ±Ø—"°¥1C: ½ág©²§£À) "‰å´=+ÒÜ`z‚ø”­y˜ž‘+‚Ú_ÀŸ×µwkÖ _€jÁûrßÔ sLß0d U/,v€VÎÎeëõ~;A¢Ò’ÿ£XàG¼em¹¡Ö\K1:€ƒiŒéß[2>þNU@pÙð²°5ÉPpÒè¨Fx¹¬Y´cÁÑòü±bž{d4y(å$‡)S—$ýus{äš–…%ª>?þ±YpžüOˆÿ(Àn&ˆ~9´–@˜ݨ‡¿xêû¢~+?Ò 8ûÆÂÜë ç^BAÒ¶«b,³÷ZÔX¹Xi5ð@ l¬A¨?1ž>ê€DÏrœÓ¶o:W–N€Ä0 Û4\ßw£ìhÈ™ŒýE‰ÚjÊ û¹ßøüîž*u‰g¸œoÇF_’rg^Z<|ö1Œäe¼»þ^¼E—ì3üÙËðª_ŽÔ•…l ýÇ&lØVÞªrŸ…SÓ‡>²¥bï‡ÖpÒ„ÎÌxòrvn¼,@´7Ú¥}%/Âme Ú°5ËÚAó’‰Â! ðĶ~K ÜM&¿ÌåÜGÈ”øÄç:ÒHÐÅ=1èXei ^JÙ¦)’’Ü'@Í@sÈôi½·‘‡%öóIR卨 +AôÃ?gîœò:žSÛ9¥ò %{"K!S²78VnPM‘RÛ¹X†¿:ÀYwTM$ž|w lx™`’ã-|>Ã5?"² “Ò_DH$3Áà ÙÀ&ÊnL‘/XåŹ—*¬âÓ@U=oFñ&§C‚\:Žº šh’‚?UVì‘~F¶¸{kÐàBdÞZX$(•wÆR¬)Yú…ë2¥/0!Y +v|×òÞñ¹©©†ã”GlßYƒ—ajÆŽä&ZªÖ# +@8¥La‹R)ØùìÏ_z½òµ?EúŽc?‡~À§yx~aÁ µOòùe®´e±Eù~’fF»_ú5gí+_ŃœøÖ7Ò¦±ü“Ê;\ÓÉÁ»¡œ54<º¯¬E„hŠ¢÷fLäbåsàìÙ¬×öìüpÛu·ˆ«(Åa+¼éš)£Û\H—R]uÞºX]vïüPž±™7H>ׂ©–Ò²D™¢“ËÌ™¦–õ¼ò"ƒtÛ²Fwgϼt&Ü ÃTl渑=ò¼x¥Z«Ï> MTS: +\jaóA3µÒXŽ·m¬Ä5éOfÃqõ(/t°JÁ”5Ý`YØ C<ðéè‡yá¨]#ŸÛ%rS‰Üõ8¹Ml´ˆÔŽiæ:®I¶¡´×H3QŠ2èVE§†ØåÚEu†óÅòÆ´©5Aèž&´ô"µ;È‹¥²8Оª®¾½¼‚Ï1¿»@W­çsE,\ÜÒ%“F'F!µ‡L8±Ú•†>`éZÔ/bš 4Õ>B¬2Ìkäl8ãe˜¢û'§Ì!!Õ5kb_¹ºº :mÉlŒÞºyáV¨¥Íg‰œ}+äžv´,©6X®‘à„šn†,Õ@jc?*Ô$d£ê|17·`  +`/#¼‹ úÀYsXMktæ’dQCj”¹Î=6<1?Ü"p¸3A¸…ïÃä·2èYÊ€¦KËpKCÞ…@Ø„EÃM(»Sš™E9NœE6*#_A%2Kׇã陦OªIeVw+ËÌÒô‘!ëÜ»KµzÝ*hËo×Û›%FüOghâš Ä)ÄŠÏ”«˳Úi î$†­d«&H·4<ßn௯w³fºíƒÙÍcá,Úv§ÞZ‚ûà!' +4ËËó±@0«;–*èäv_©6Ð$5Lç=‡Bèmz +ÉÕ¶ÇåšFo£S0cf1übó:²²hQÕ®ÔL£h‚í‰÷]… 6ðË+ä›ËïÖªïÖ>q|öUÊÜutfþlul±^Â6.¹\îÎ÷çóù‘‹ë#ÁÓ߯ì¿i¼G’9¤†Ü¥G&©é¬â2r⹡‡©~âfŒC6åàòÑþµù·M‹(LÄüaJ&0Êÿ)pNZD© ÁW”5Uƒ'/׋{âCU+nA88Û!}ÐÜaP¯l{Ÿ}Í: 0ÒDµm«AZc¥åwVÅN£¸;vÐç* ÊýäS'ys+Ë«‡?/÷Ê9ksé­ÕÚª3=S†íÊ¥*\Èükè¶ó¥ê»=¡¡ o-ïß?tÝFÓåh°ªù1°”Lj¯Q1. )é;aÈ9Ô@7,ý“¿:€ËT’4/QW=.ª‡M%3Â:'<€Éýûá%PÇÆ“Xˆ#VÃ…ç‘ÔÊMŽ>Ñcú–)Çë÷‹O`çIÊÜ>ýml¿ê«RƒEÿö‘äœKÊ}NBʦÇ‘½>•,%î=XðQ•³FZ=„UêRí€\<+kÕ5”f¡ÆûÉó‰įIRel|üð]‡E¦ÒþyÏÏÌÀ=,]_`ˆƒG¦O=w¦rq@ýr,LëàE$è¶IAúWÎ/ŸyñÌØÄ8lEÔ± £´§/LôeR +Y=Û¦Y_•G øt,®µs[nsÃ&é/°46†,ƒë ÙƒV¡9-Š•"#YÕ"'o;öÁça˘Íh6‘˜J”÷)d±ž5ˆtŠ¢¼ÿ,ýa¶Ã¬Ö·a‡è¦Fh¦Æ@›ÿÙ_zôÿcím€Ü¸î;Á4º§1=£‘`ŽH 5&=4†Œ[´eÙrGòºÖÙœ·nËwW›sîªî²u[©Ke뮲•M.®½ÊÅ›º»õnªrN|—µ“,cÙ²¼tÊThQSi4i˜£1„D˜&zºÑû¼~Ýó!Ù¹º'T«ÄW¿~ï÷ÿþýÍTëÐÕ[7àÁ2€‰¡R@;ˆe€61A¨€6æã>dâ#ôÅS– -r&_Ñ·‘:`¼-þr¤cŠNì0aÚV_TP: œ}¦ſDz,MÇSé4’Õ€Çx€ ¾[·BwbUÎ9‡šôàsQâ>qË òß2—2Ÿ³Ø`)bÑLbvCÏ­=89ý`ù+‚ùÇå•M‰ù[¸k4 6ù éeË Šóe·û`@ý§Ÿ‡Áð¥W¯Ï=йzKµ¾ÙæÐã$Î|\f¨rú•;z0’æ3ˆ°X¹UHPÿv½^ãêÍEõ™kom«D0%Ð.óÎ+“öÉ“úÓµ*<@÷HQùÚù y^LDc( IDAT«¯á¡x2ï WõÀWWïÇgª÷—V–¥2ý¯_>~ª^¢.ó •YdÊðF^WÄDvpŸK‡ÑØ gõ_A0ouA1ëäÆ0Ë&²d*ÉÉL5nq'úƒµ«×p +ÀPLûm·G"|Ê€æ-¿Ž~:{D* ç¯Ü ãM8i¿ù:£?½¦ß¡tv:‰3sYúÄI)#`ÛGíU” º^•r(¿-Ðê©Ö²˜=}•m_ ÀWÿ|m?E@\ü[¬§]¿_ª<_ü7²ú Ä€‰J–Ãb`úÁ)Ž uÚ‰T8û ' &:îOR!«˜iÝXEb/ Lã‹ ¾øÁw¹XìâÊ"£?ÝhÐ+{]wÍÔ‹¼ +Ù,HEe\Vz®òQÀ‰â÷ëßëf3È…âz]c{ïO¦ª}§œœÝƒ»³q*·º°¼‘û—vÌn1ð÷qÖ‚ Їý,Œñ<Â*ÈÚL„U|2|šh6¶Õ”¾M’‡@%ÚÛÅÄDƒ;€è¾Ý­NË  ö¼ÄC’xRP|¦ÔqÂtx€ÕÿT¿S]0Þ¥†w¦ÌeŸ…£?‹'øSq+ñ¿2YþBR}bÜŒ}hèñ“–ï!ÖýA4omÀdÀÚ-„6PÿÙD ¿"feÞs|‹ÓÄp‚ŒûÛêx!ÀœZ× Z랺gŸ<¯1 ^F€`´†»šƒÂÁÅ%`”'Çù5(BÑíu½-¯º¿úúk¯ãl¬/¾¼8nš‡©_zqŽV¡ß‹ó5›«Û Lí®“o·Û• +Ê6Pÿúáç3÷Û—//² È,í\½l¸w=†~Û;Ql îÿ0¦×ÃQÖK% ˜‹¿TEõ¨Ê'ÇÍcùž±LÓ²ù1$ ·uL е¼G‘2†Ñhdê õnû?n±Dý·dÃí9TAo›åvgÍ/º÷zn æ*T1QX7 Ôz®q-õFëޗ¨ÍÖ‚ÜY–Ä0,Mà<‡£tnÔ눈ɠα1 HÀö‡Íì8ØÔ¡¼OG¯:¨ÏÈýb¢.3–‰í‘†á•‰á^ò>5ŸÛšÈ{¸`ø¦¢.;ìa#Œ¡«e 36>˜ AÐÈ‹¸…äþý>4ûég>mÙZÇY©•:¿>äêt¤Í˜ ¥[lbè=à‚vkLc‚C3@ãv‡òzÝMñmǰ¦ÚÓúì`‰lÑš^èŽ#Ox—..×ÖJ¥bÕªb–QLYcŽ%)¡0u,§MSïz}¯ˆ÷šÈFÈóÊíMœ®eƒ¸LnÒô“èº^Í-†]Ò½{3pÀ\y±R ^ë ©«¨çÚ¶ià3¬/†#Yß'ÆeymwAãq;½Ëß[:ù3D+mÐÈøÌá–3À»œ{^×uJtkà6‰˜iYÀgb#UË«@ò&_ݽç…=9U"q lÂb¾,èí °ÎÊ_'"ôò»µê°¿èÚË×ÿìÑöz·y«Uüù)ËÈ#ÑÂŒW›ªjò”Ÿ~âï©…IDêÁVP}Ø~ñ[ ãš­V§µÖv‹.ÿÝoK[£T½iÐÒ†ƒvÜʸç‹Ú{Êð(,à Q©ÄH‘øb£¶\D`m÷wËÃ'ãO¹žóÈY=yl‹àð\¥Ýé€ÞìrΊm“•Œ­Û€Â<ú˜¥‘øŒ†Ô¡Ÿ‚ÑZ6ä5pŸ,+•H@è^ ¼0³ºòÞÀG{¾Çì4µG·Òé¤<–߸þÉgÎPÏD;¸Ü~ÒøËóè̹ðMÌÏô‡ãúZBÅ&yÑ.Õªƒˆv¡+œÃÀb@Il ÝRœéÁŽ~y_ŠÐü¸°1”P1@á2M¬]tºC*ˆ/¸–ÓLšúƒ5nqƒeÁ9¹—_º|òÔɤ]éöQ9PPÇb9ɶb§Áô U{9x½¾%Î~øä`˜"ª,Ú̆°†ò”É®Ú$µßî:vÔ³x}ß 2~rÖ¼J½Ù¿Û|éõ‚¹9[ ­Æõ6(SvÙê܉ÿi³g˜˜äìåV”nŸÌö”4g¹Æ…`ŠÄ˜ó%¿L3kÛz01ö^°Â”ïs¼t9'°ø¤±Š¶ 7¢)§ì}R5·¼Èø {}ßëÑÁÕ æ…@÷ yNï¡ ÔI;aÚ-¨Å¤ãzFlñ|îŸ|Φ"í¥7–晿üÊbóÇ­Úýò‹ÀGž)E¹¡x¼™]‡+ÛA0O«çt½J_A‹,ª0N;t¨æ =lýÑî‰Gk€þ;îEšñI}¯âY9R­÷VÄÏȦ¬ËË+ÚŽ$¥X03AWÿâO"öÛ¶Û­v±”l0y'§ݹ| Ô¹Ýíõ]€Ýå7°véÔG® +ðñäÏ/4oaR ¨áðh¯;pìÜqW®]§OîxC³Z³[MüêootgÞS™‰»³©ÀCmÚ†‡`rKö6;Øû~@­1»]bïð‡Hjn~Uß?å1o‡’<Ÿ©î7—/¯T*%n¿¯Lw@AQÀ ß| ã즜Bÿtò%% J·›ªr.bVÑ6S%áNæ L³i¦Ö“œ÷’œ,ý³»ªj(Îùó_ fô¨¥&ΨùãIÐrª\UÔ.‚ÊñÙ‡˜vâæR,``„èÙiRŒþìÕbÚ&?-PèÓ”ƒŸ†‘¤hSÝžƒÝ€Y¢kðÍ>íÿ`+ù +Øeµép¬Ï%|yìlS;ÖTÐ=h9˜j²cß×Ì})?ìöÍ«j0äãj&—R*ú—ì¢>‚;NñŒ|Ñ @’ÆYª9ª¡©Öz ýõîÉL‰fÓµr²ß!ŒZµÖl5Á(N»›}Ï“·&C¨$;Þ1ô3?óÂâ–&'5:.ÆÒýß±7`ÐwA€yo¤v"³“£OçnbŒ2‰ à 1Ã,‚ èWqæPƒƒžšAŒþÆö®>ßûþ÷ôóŸÓÕ©fÜ?Ý#õ‚I¡ƒLÒ.VÓòYM">y{àN@LX¦ìöš»©d¥WõÝR*äX._ziyæÁ$¤YŠ‘®ÛíMÚ|‚lü Qxú¯·îxè_41Y̳wÿãÛ¬ç[œK“²ŒWñ"DÖ]dz˶9n’$Ð8z þ0)Ü«£[)õÑ‘o¡ ü2j`á‘·ðÂKËB^>ª‘ +êbâUöªTzÛ*9nWì +JÚÝx0Ÿq·ë‚^/v"ù*j”< èè¨t½ÎEhb1°vkýòß.ÆÓ+ Nô/(GBŸš.ÁÏVM¡¿ÓJð"&F`¨Â.‡ôi¤åt%õEŒþ ®é†ÉMAÅ$ñÙVk0ÃTèÎGlòìéÚôätJ! ¤/³ °½˜DŒ lùBX”Ûþ;†5n8?‰é‚‡ªûØþjú¿¾¼ íöQãÊõÕå×–^þþâ•E,q^¼˜¢¦ù)*ú¤ôc"¥Ý«**“iÀ£»Ñd¯ÏÖÓ¢BpR–Iò>9}“=øÊ^ôOŽO>h©O)X²¯Ô~«GœsMªÿ°5.ŒLUèЯ’s 2@ç¶4Œ½X’~Êaï#æô»qØ öz±])X ì Aëþ0*åéë«?Bö?b¦*8áêE¼S,ê=ªÖ#g"áWwÜÆê2È@°jT¸Ç€e•%v(}Œ//¾|ð¡® û×Z2¤:Y‚9Ðí»EðBeÓz©»ÏèGç¤;wïqkÝ«NÛÆ˜Íý0´x½`í36ÞF¹ FÀÊJ󸉹nLÞ®2åU %‡ÓzÛ[§qÇ70Â-?e²3S Öýi¨¥D²˜DèCÈéSL­¿µ&+Ê×eÒ!AÖ=£(#á2ŒR®ŽbBê²÷+lVtÖšmåR4¨` +d…aL)üп^©w]§¶©ô ½@N¼ë?jÌ=2è߼ٜÙqÁ8|,IñèÐwæö{.ÛÍfbyÐ+ͽù– ®Ö¬Ö")ÅîxRXÀ^`õŸÇêå[ŠùÄÙst6ºJ£€ßà"-_¢¿zÛóY@À£hš¥b )ü¶RŠæ Ü_£K˜®•ËË•ZëZ°(™‘ Ì8ð¥ b5”G¤ÅTñ^RªT8R"!ÌRoÉÀ =M˜ñOÄô8661Öu‘á¼Ð:÷÷C‡é™ ŸÕ¾ÀóÏ¡Rÿü•Ë•ë•8š¶ä;NHEMeÚBì”VT@0gk?FÀš~hvíG7ꇎ8í–]©Ö]¸tþ«Ü£â5·š1ðp^°´gØ­ÖçÖn.…Ø*—oð%£Â­ÏŒ@p,:$`Š«b“–7\¾ÔÊsy1f1¿¼Y*ã†5JâÇN¤°ÛïqÚµH5f’IAB[m¬zÝšeÈT \E¤µ¯‡Kßåz¸—°i‘%¶ZÚÝ +ècz£Ùž;:PhåAìy‘†äß\‘ÅjøÁ WÂä°²†YFQ˜CàóÜ¡–Éô·…±üjs9F°ñ0=|à!ý/ìÞ-–Ä+5NßsïzœESÀ6s•˜Ô²{¬T0¡ÀhˆZî• A%ŒË`1#-g†Tqã3îgp"0o2“䟄²2VýËG7Q†!a:'»ë¼Vå½ ‘;Ïœ˜Z]»nÁªC°±ÆTNØcÀ4'Ìn§€ï«@¥YÙWÓó¦A®N(?Ô0òðù,ãIÀã¿®®5>÷_þ33óÒuZÝú‡j|ñ/¯¼rÓ±Ðí&¼Í(_²Â ¤¼{d¤Áèrˆ$?F/ÙÓàâ2#-ŸÃ’ØÂ 5=Õ³¹ h‹ +k½k°CörÀ„ßó@ÀÓÀ+WŠÇh†² *+%‰F« ü“Ú€Tœ"©ÞPs©Û” ®¹—ƒ°\`¥¡gï+v6æ? ƒµ[ìYY¾yøáÚí·:NïìÇ6œA{ÝÐ ¼Ø+è B¼‹°tÉ¡ª6sF‹¸†€Ö8ô•'m¯’höÁ™¢Ul¿Ý­ì/¹¢‹&Yž®bÒÇb“ÛÏÎ=¼Úì´ooœø™/¾¸¸!ęǖ^½ À =kq/³Pl¬4[mDä Ͻ$¨ææÂ_H~Æ&WäP"r•Ÿ}ÎÀÌ{ª…‚Y,â’®PAf¶5§¥á¥ =ÏÁJ”þF¿—E*=λ‡3wa¹¶H ˆ‘Me9fG0%ó>«Ù|ïž§›–ëv9Ÿ*&,ç²t»Ea@Íõˆ¸(66{pﬦFœLåûáìÁX/_¹qæñù®3Èæ:ìÜ G¸ ð+ÀÚ5Š®ïµÉrÒG!ü·ß…çs錚l–r‡£º'÷¨’7XqÍûžžÝèß}üî¿úW|róÍ2ú‹8‰ aŠ]c¨ædãôÃ1¶aà úkué9)íŸRÇmƒ;ÃĺÚDTÄÈV]±TPšDm‘¹lnIW‹FÝ;%;1i1‚ëõ¹¥ ÀÚ6ܱÖZ£:]Ï[ÝNƒ +ÌzÅ•Íò4îhË'ÈXi¯·?l×ß“¤ÁñJŠ)Yý÷ó2jç s™iå-\{Ã&š ïbÀÐÄŒsZÜ”Öðúì0˃"¶·…*ä`«_3û¤_À±çzL8ÊmXë}ÇÎ[ ¼@‚¾uÏtïÊol4ZŠ„¸i†íŽÃ)dÔ^Î>N£'³?CJ—´(o2Ÿ‰c!vÂápnÁ£ÒCy²™[lZ&S üˆíŒ7=yåƒÎÅGº·yb+2Éùa 1hh•¥a®“«3H9[T–ÑÌtýKþÅ=v4v=0 6Ÿ#:èZàYC曲q ÐO½ÝðzÓ^+Õ +MÞ&Û{Y\S˜¢X?›?jjÙ$rÖí8¥²tq`ÃSžìèÝÉèÿ. ¿{·_Ÿ©-þ`Dõ©3§_"ûûÔ™…ë¯6Ê)ÿ Èñ0úæ©óÈ#å?ð9åi/vîÊdµkÃÏ®"ïÿׯV[rû·7Fÿ¥åF©bÚesñ¥VýPÉ7¿ßZx_ëbâöíÎêª\Ø àO徿úí¤zŸsö;œ¨î­?õr)¾¨¼ç܉Ój‹ÙfÓéé´oÝœ°òâ}×ÈKâ&°ÒÐNÅ.o:øÞݾaÛ’¨1uSú‘Kµ€v~R@0ôdkß|ÉÝ’Ödàƒžfªvˆû”¨¦“ðà2Fd3 +TEÖ23SY%Wðé3ÇE\ëb>ìW8ôwƒe˜®Ï¾:” +b‡c…¡?i\ÜÇO†‘T»®§¥Ü;9¦—òф܋2ú¹o¾VœüùW¾ÇóßPy™Û’öꇓ°0/pÖ#¨Þ¾—v˜à1.6ÄzÙÉ'> +' þ Ì™]ô‡#<ªÁ‰“O-Dº =#›“pñ^ïN»x_¥Ø­pi>gÄ*ô‡“h¨‘-–‹Œeô!p“Šv„Ô­¾ë*÷Ž©ra¹¯rVN9±{¢¤h$@ÖCy»81ÏÚ½ñ8sƒ º=ÑŸ¦1ÕÐ-Žª&Dø…uÿ蟂6Ý3ÇŠ àÁ=3š½nqÌÄêž8$ènÃŽCLf‘à8½‘I4ÞZçöpØ” +;žbAˆ’mrÞ'áÆ-pá­‘Gšç&“$£P5ÔæÙcà ÿÕÅ~ðô/Nl³¸g¦À5²rB­ôÜ6ªpn6©þ žƒ£¿悚¶ýú»@Ô ˜Ø‹n³Øq‰€¾„¤)&=T<*쩸à™ðÄÀÜûæà·l¬wËìÎm§q½Q:%kˆp2çcNìH®èÝ•F@´žbÉ^¾²X©¡ÒӾݚ?ºèï íU ,€€Ô¯Cs²œâÔ“ œ:ŠnÏã?âð8ñ èYxôƒîÿ¥?½'3ï©\ºxµ=ôÔë›·6àäúJûÆu¼épL¯U0ËT²_uVŠ4{²¨Ö-m&2 G˜®–%U- /·Öî9áÂÏÌ;­Ð4Ãòâ¦#Üžoaéà(§¸´LcùåLÒ¹ÜÇ{ÄɬΦ ÆÎ?z¸:Ý£.px9#ŽU–^¿W\ÈY­~öÛ†, G8Å•×!ª$7kÆtƼÑÈa§ƒj˜ÖÕu(nŸIØy}?ñã Ã‘©ÿ3¾Ftø1#i`‚‚¹Tᆸí„exC¬ç@*=o´ìÌ„å2n°^Äl¸` 7IN£°à 0°ý,ý´ö0 »AzlÐ4Ô$ާU†Q¡¨Ãí+ï7¯]÷¼Ùãiý¸ÓëÝóG>̺nÀ‡ô”_ßó±YБؓ’EÆ;çbîç)“/|ý¼z~4Ù™Ñ|KU ·ë]Œþ x†"T–޶Wе&ò/ÉÃu’q†>»ƒá®æ÷|€ Š[&#ÉAÀŒ™»Ûß„ ™3ÄAž%'i ËKöþJ}n¾»Þj¯&%Ìø–üÉ)¡Ø;"}M¤íb§©ÜÓKó=gïÙg°‘ò¹b‹M@)­‰@õ¼AÀɉ㧛ë(ؼ˜D! –8’–½}¢RÏ Uȵ†~Ë,ÉAèÄÚ½iAÚHÓ™#oèEq–—{¯‡!VŽÒe"\vØÇ#+ÉÐib”› ﮬ‹É}l½Õ­>PŠ!vÂcŸÛ6B=âÃìŽCý‡^O»2ů~Á^õ‘¶Ítx‡^–uì +T€fò´h\Àƒx­ õéFcÔ¹éKU–^¿1d;žçþ$\ô”Õ8R'7õšmÉý’Z`3å?QþýÆ› .£[üÞÈ€Z½ºú£æÌCµÔ'Xe +À0ú ʯoÇÌÈö!$µÈƒÝR©”Åy§§ËÝØˆtîôÌ‚¤S†£m»ßÛz«7ûžúâÞ#““·þâüÎõ>7bìÜî•¶Wº–& ð@¡ágJà8í¶”:5äqºø±ëÄ…Ðî@êø©ô8}ºòÌèùØ™†mÖã`˜çú«¼^æŸïö±è×ÌíôõiFÅÁ³4¥™Aµ4g€ÍÈâ–ÈiO\}MßžÜVz|†˜Oì ¹¡üˆƒß Gv›s„ÀËÕœ€Gõ@y­ŸNõþòÕWVà8S'n®{ž5ö¿™Êwà6ôhÙç'¸¾—oú«ÿ!ÞÝòî§-€tç,†þŸ8@z¾3-gÀèd3+ªŽ;zôó IDAT„0ô+ ÞýÞüx^INóÅ 3BaU]rKpj¦† »±““N¾>f|ÛFÿÀ´ºï Ù¦^Çú¶&âÜ/b#åsŸ8óÌè/våxñ¸²xm~îÁÇŽŸb ¯¦KV ŽaÜXÆœ¥;h–ò5Î)ò‡=c—Tà2Pdÿ ‚Ù$“޽M™³ˆÊHÖ`ÎBk¼F²GÏ[NßÝÑ&Ø‹Á,‹þ]¿°Ï(îÓ£’°¡/Iýúcjbâ":rÊ#+ü-bXÑ“¤<òbOþFN(f+w¯8°–òï«>ÃiôgõßÙ¦új¢Íb¶œ­U¦?1b?÷‰g›ë ாµÉDÕ”.7<àB|ŸŠ¹¼ßíöK1á6î†WÁ2`c£[{°úÖMT8XÜwîØõ‡ë æËhóT­ÂÐ2àÌ'{­ëDÇÁÀa¦?|]êÂYƒFÞàý%“h±§g(Óq7owüHJ‹µµNpo3ý í˜Î+m´ÖP¥¨NËkèÿÆ·.̾gLN¸/Øf*ˆâõw¦ 7n¢œB¯ýö÷4ÈmÈbÀJ"ö+Î%ÏðØÑ´kÈÇ4EYƦ¼ŽSöñGé˜Ë`+h1A,€ÁnðÝ _‹Sxwðƒ€Eª³çŒþ‚¤·oL;-±¢%°»Ÿ®ËS®ºˆT×I0½¶q•Ç+"^êÉ(Œ°tƒ èÿøý§?~}nw¤ Àõý†Þ¦ËMá˜S(+K¯#ÏÜåï/]¾¶$î¶ýqìY[ÿÿi(ï3˜¥ÛxÖr_0',û©Ø7—©+Oº 8Å?“é˜qì«wÁ`¦øÐí©z.”ä!E¶‡@ý·ö•¬}¶{wo§¡<ìˆBûɲ‘ÁÓ&¬ÊTl±Óüüùëÿâ_t~ˆÐÀ2àྠÐ•ï¿ +t!>2àÈà ¬ªã'i¿žF@•es& ?¾ _xÛh+¥ÃÖ% û»½&Ûüi€þ]·é z`àºÌ™ù1ËÐå >Àò0.{y².€2C¤•üùÈEJ 0ˆ@ýï¾åY÷í=2Ç4u(sÁý emQ$ûBg¨ ¥Yäüѱ–ÆLPv,ÑÙ„„iÌ·“KR|­í¡à¬ 9–éÏD=xÒ¢4Ð\¸¾j*2½@ª%Î"·ï*7‚¿ÿ{ÿòt£yÌ<0=£²€Çå7^{äÐoÿÎçO?R³uõêc.ü§ O?uöÊ+„ûï?&Føë¯\]c%)˰¼Ç5,ËpBêUŠf05Ë ˆh9#4RÛûnWϰ†æ¦›7”™â$!&qÍâêå•ã'·nuޝã­çž3„Ìnåw–·ôLîóÿý¯©EP©Õ*“ŒÃ>¶í8ïC§{¶G"zNF”+)‹ÂcFO¡ßÚ_ñ]7¸ç¦]%˜˜ã +Ù ©(†„9Àz+L}#çM3GŠÞ²0&™ÚýM=d×ʃzÎzMìíÀ©]pnïdpÝ=ž}ûG~ò™OÂ4*—Nz(¦£¯üÅùOž;÷â÷ÿTß÷Ï~™`ëõÄLþ£ÿýOòDu€àø'‡ƒ ¸ö[Ÿ•ÐÏ—O%ï|³eŸ Š îÑ +'aœ{æ#‡ú%@!Ûí@Xâшé$]GŠ~Ù±˜ôÆGÊvq¤ª.ǧ!ißãŠâ´/kÐ÷õ˜¡À*èÕ” Û! A*Û*ÅHëºA^g·O ýBQÄíD!2uU ÏFb8“uRÌ[åòÉÜÏt÷óÿ¿ŒúÁÙæ­Æ;ýëä~k’œòÓ3r@wÚ½Éý…•ךî¨ä+¯5àØ\•»¬4Yqçõz©tμ]ÖKûÁ2+§›âái­'U¬¶½GcçcñÊëꬺ›7WoÜÄ8êÌôÁö†Tì*e¼¹ó‡JòüQ *ŸGydþšÛÛ±qJ+ÇÛMMãôe^®\“L”GIrœ†iQ’.‚ÊŒeÌ a²>=vuFœ^‰K&w‚E2ö~—~OÞ0@n —ŸjáÃYS1©*/on!k!]W&UûXí +æ‚b„ ƒÓyCÐú}i&:›®²Œ¹Ÿš {JÓÒY‘\6Ï*œÊÏ+ô¯Uk‘ˆZ1k´ª£¼qd3…#ìí®%9iì»bE­sS·J™¶AµVnQUðÇŸ=ÝÝL”˜áR¡GØÞ½Ä2Ë:–¤‘©ï`fãÝèÄ^#¥,r^3å8³î¯@Ç>ýnÎËo`â'Ÿ9@l9È€ÅÊ~ÿ÷—Q÷§qâ8nüÓÿⳂî%?yìѾñ`{õˆk_=ÜÂ_ÅÀ§Ö‘]3°;kÏ1 moËä ¸³ZBáBž4ö¡ÃǰDA—åÈÀÂ@aCXž2ðÉ€•ÈÊ*Ê•ߥŠ9Ì ½Ûr5Zå˜òQÀŽÛ’b÷žŸ¥ÖŒóÐfúÝTíA £ú!5–ô‡l‚Íĵ¤à{¤È&q‚ ž)Ù{§¾Ñ%J`¦Ñ&šÓïÕkÓ«·ÐM7S›]mÞØýök¯b<Æ+~ãùç?ú†î¿ñŸžÿìý¹ÆÍ7§h ½ŽOŽž˜ë»¸7ÞvW^k3oöÚjPžó>Ë•Äsè?¹¿ºK)ö³Ûq°€mI% ì€ J²t8,Tÿ÷™ ªSýJùY½µV¹ßj®¶×ˆÌÔ@&ŒÂ‘rçr#ÒÙƒ3Îh£”;è§sùî¹yâ…äì{®ÃbÝ_SÅ+ähv\Ì8¦)¥®Åœ×ˆ¢JÙ™1‚›úZ¦l:Ïwœ2ÖBî´¹0{ÍÀ÷JûlK±±"Òœ©”,,¿Ò¨½%'ü`UpÌ@nQ5IÜ:XrZbÂèªÒ ê„.p©*ãÀʈ}€**†{„Lg0HÐ5…Š©-ðCî\µZUE'Š…B¡Ù’ÞB3U¨Ä2€4akÝ#&VØæV5õm~H^ÿf!vãw]Ðý¿öÕK @¨fAêõè¸\™ìQáÞYV!^Ž)#Ðß0óý‘”–p'a~U…§‚~âÏI®ÊH}ƒÛÙÐÇÑ @ÑÁã?(}u4бqz \ǵ¨'8vŒñBŸv/Î5»© ¢l‹ã fJû-?ÿé… ‹-«€¬Ÿ7"æ(¥¢$_U ¯ý¨1ýn`°ìÕüPµÿÀÙ'á87Tî&bû‰ÔÿßùÃ/‚ðô)hÁøÜ¯~V½ÀÜNmŸ•™³,8!‡sr`í2:,À}çíw4Ñ东y%â$zN *°LÊ>ÄMi*g›ɵ¦-ˆò%£ïˆc{›A©jÙ“V£GU}Ð2|AÀ7üMòæ¥`uí¦‹É†F"·ÀX5MÆ\¼$²¨ 2M&ì¥ò¤œ+Æe +t:ˆn`ì°h`+Ûv v!(6É Çi‹8Õbñ×fôé/þðWžùµ/ÿõ—oüðƯýWŸûÃÿã Åqñÿ³_¿öêKÇŽžš=8;{ð¦@¬œ=KëÔ8.--/½†e.¿ù[ÿréõ„·Êß•Év<Zú›¹ƒê_µTpÕÙØ™º&ȈY܉4mèuï‹ß]¶q«µqu£w ªªž'éQ¾¿Â”±øö­Qa¯^Ê?q”ŠÅnox;‹¤ t`“ƪr"EÊ—N) ôi˜2ªžÃ¾©l©û’Âr£ þ—¨íä Ö5Iý×Ù"a¤¢xÌé àƒÓuX ÈÔ{ÀcZ)tNÐ*g,þà³(Ñ„ÝÊ’ËaÝßÐe)¸ˆ;‚º¢2`˜n»Š®&ñŽ(õßí9SÄqÀ9,Ƥ)ìý:Ùs…Ë­µ 8ô+ôgè·òÚ[dUƒ`Ž[¹Þ]Ge4ª€Æ9Eh˜^gÎÌÆÓ µÍlìR4 3Y•ý!W3’_$6øÿi€ãÂÊâåâþŠÂ#Õv÷¿GŽ0šÁÐËni܉ÉÄÎîæùä4Êø–¤e%iy©0ÖgW^_; ›<í·’TŸÆzâçY8±ò³O<~ö‰3¿ößþ¿xîÙßýßoÛGˆ.éHÏHúO¬Ðã®:aÀ1Œ¾Îç9¿éï{Ê‚š©™¢ Juôô¢hˆ &­[o÷JÅI3W**ÅiÛ%ú—^z‘ïòüÑïu¼E©‰Õ©Jç.Z¥`€Ö˜åϱ +pÌ¥o‰¡lµno_¥4}´ª„©¥[ñëFc»î®âA¡¿ÄJByÞÒå©iú,ÙU‰žÛÒ:9G“ +wú)ƒš?¸‰ÎSJ™rCÃk¬‚ÔeýÅ»vÜò™OÐ9ÒH\øö‹€O~ø¬zM£Ù®×¤Æ„]•3ZúrÒüÕêŸÔ‰@ïÿW?I¡éÙ§“¢©ŸÿÚóü‚K?¸ºð^t èô6>ó?¹ãG=8sùÅ¿öíÜê:KnEX9X ÎNÕ0òÃd?3µÃŽ,[;§ã²‡M¤¨=EŠ%tj¿Í/ÀW†RkqÂ2¬‰¶ûÓÍÔq/¡ÞÝØÿ¶Ï\^nq9¥æ,‘ !aA`Ó•,ň|Þ ü̈‰B·åŠ”*Vw}àöv&ub.ëÆ[+ÎÝÎòK_ù‹/ò™OÃÉsçÏÿú÷ê•€þ|òì?þ?þÖo^ú.VlœzüƒŸÿÝÿ©E–ÄŸüþ“jß¹€¥ì`ö㬇¹Gçk3Õ£ï;öê÷¯ÁÑ‹E¸ùãë› ›Škpâ¼! @Väáí…‚Õëí¡Úó¨ÎHß}kµÃ<×[´]øù€þb{}q_>¦P¶EÊ/jŽe¹Ž^LR‹SGH ûNZN CGäñà匀~‘ŠÐp YT­¢(¤û}ÂT ²]§ËŸ™¾ß÷ÈŽÄœ“pËú×»qæ 6 LHÃüwä_¡æhñ¶2¨E #UH% ¼9ÎÒ‰]:ŒT’[4ÇÅ/û cÏ¡t݈k#!ó²ó¥¼#ÛÖ6d΀sÛ.U6×yéI #΋¤û'©& ™çäÖAvÊ&É~P • Ú·O•&\ùX)•6:=6Ó‘uß š­n¡ï¡mAr‹# +#yýE0¼ÀNÁÛOä\—.‡YB‹°œ¿+@,¼ÿÁÅÅ¥…™@ŒU®.§N]#ÁBÎ0“^‘Ùíî¾çrv¦/Û;P4Ñ ú™¦¿ ¬vWqÓmv4‹¸3^wÖQ…1„>›üB$ê?Ý/RÿI‚p¥Ç°é+¬Ó6A€º¦Rè¿{|ô#Øs¹0ž?÷q<9÷ OowãàDúÃñÃ:ûÏã7÷wÄ ßº0ûÈœz#»º5Òb›ªLrÉŒþsÌýÑ¿ý" 89B±ßC‡Ðuð~ùWø‹ó×.¼tñ3»~ö±ƒ3•³íõ› pæ]WGîOœ>ò3übÎÎc–›op$Í’Ä2Ù¶% `Ýšc1WŠ +ÖAŒòZ©÷ÉëËÂ2xö ™›Å“Ó§ðþ^~ù2þüѼJ”!`,¿¾Ü¢†B§îé_{ì½Ç*åê?„>@é*YÏsÀôßuÓ’ám%>ß©Òd±(ïTºÍgëm´DWo"Ð7Vâ[”šé¥¸ÊÔªV¯L?TñîyI𠽆·×å("5,BÖ…áBx³Hr`®ô¦gŒ±ˆ™Å@Dœî¼Å:˜Ý¨p€î Fá€2|4vóý4×ÖÁÀÌú@Ê.°(“ÆÕÌN÷Ý8çÛwåž²âà‡j>Ìè?ÜòcÙoœÅ +I1-ýù{éD¨¦ÇØîáÊÅøíÈg] +V²Ók{˜´Ó÷Ó”™fR8Ü,½CÙžm”LÒ®ÙõÞ€TPe€îÄ€E¡ï.{Á]TMÐN˜Éö#||1£ô‹"ˆØlÞ'BFc,Ä»lyytvFتŠ. ¡¼ƒ•d,'€þ þ£Wç‚=”¥ÌQÚ×ä¡÷=Ùõmj›[)®Dè÷%¸øÌkl絇%} 3ŒY,TÙ'úOt=VÿQ ÷ï Ü¥ûpÑ2AI2Àß +àadñ?ÊoÞÝd:{XÖÎzÌþ_ÀC‡Ì:2ÇZ¹Äècjr§Kg÷ àŸÿ¢?œìvñx—Þ5pùØÓñÏå7–ÌÍ=÷Â…ÇŽ‡Š´ h=q½Ó˜?öÔ…o~€³ÝÑ*[üOýº%{úp¬¶0l×7Á%¾”$Cz ¯¬K¤/°ìd0¶ HÙçsÂ,›y‡YñoRj‹ž‚Ïòˆ ¶@?[ ЙÇè¿t¨#€þ 4¶D©g€¾jÙ¦¢qÊlq†þô´8¤qƒ]ˆjYLÜÐß&¢BÞä(±ãoó¸èä÷w{]x¨È3X~˜PVèy!)¥uL}4ãŽ1ƒ-Ô$~îpkõà> ?SÕ +|×£}dHšHA7 +‡tý€"„e²ù¼‰¡2Ì» +µ +¿éEè³Ã²̸¢‘x@•ÇŒ•é›!X$¿9æŸ ÃÎúÆdm†þÙä:Ô¯G‰FZÛ2ûÉ7lln$ÓÇ¥Ï;W˜DAròøÂÉãÇgÕËÛ»Áh®·MiªWTÒìV/^^œ•ý¥×–?yêÜ3¿ôâ÷®€•pþÛ/ž#³@ ƒîÉRkƒB“Ü‘ªuÈ ùAÙã·®¾Ù8ûþ°—g‰óÖÙtNã9TšT¥¶Õ©¬®·Á¸öÚc¢®ªR»`aÕöÝaV³}_ÍëW{wnXÖƒpÄŒÀmµÌFÁaûp6žó¶cAN‡l )Hê-zå–w‰§z$ÔöµÙö5l·¤g sB“ühv…­à´‹aKpŠXšVNfÁê´:ÊPž,hYÛ`!…{o´zk½V­,«B`Èy|‹ñØù±gí3; „ÄÜ\ðqýŽ[¯ÝøcíÓKeSŒL‹\¦™á~¶ö>ž]ä«¡Óuo5‚{ñÂpaŠÿ÷d-Lžÿ‰cŸûä‡O>z²~pÞ.UįŠwÞ0‰¨ÛÉBòœ$.?‘$T§e^æÕ«—›ƒÐýÍ  +¦f2L™¹}ÈÏ)ÝW4÷™EËâîªî í× +zý>I€Œã«{Çg&gj&-dÚ¯ÙÄ]Æ›¿Ûïb* c×qóqæ¨y³yH4Ñ£04Æ`QhØGÑ(yåÎK¥ÎÇwlb3ðB-Ò$ú紀؜ P¢CbJòÓö¼^É¥ªé»˜±ïp‡SÒm ÉíªEX‚#80&­j8F[ÂËHÊ#üvöBi!—tÁð{¤MX-ºfqŸ¸3eÁææt]Ö͹¡Q Awýòw+SayÒ¾tqñð\½|À’”Â~à†qe–i‹Ö8ЀþìÒ†ÿPë74ÇÁNË”o$"«ül˜ƒ”&V …~Lì~1p}t4YùšŽ„ÑWS„\a‚¬ã9ð³mìã²/ ŒôÎm: 3¬qÓÁ'fÙ€cHeqÒ†…q¬­Æ7&ø®(Æ/ÁÎ-ÞòJ­¨hH IDATôõnÏ+öJšÅl‰˜‡ª™Œ6ØÂ›žSõñÉà”ü(¾!‰XÖ |Ÿ¥GÞ0°"6ž‰û)Ú}FKöú©ÏÞhµ¿ÿx¹Uü]6äO1ž~•ú~ðƒ‚ÐŽSiÄß•ÓÔäâ¾hÝn/¾º´ptöù¯=ðჳ‡¶Q¸¼ðíïÀN> ǽx~v,Åv?_¿¿úÙ¸7ì—ÿÃW>Mg«€H™fNÿÒ×/ÌP?úW—–X¤ðO¾÷ø3qù×á¤P:Ðè;|‡ˆó‚Õ…©W刜qï@8ç M»6?ñéÇÄ;¸±¹Â ä €pC ¬pq.6§îoPú9œxqÿá¢m¹÷‚µÕÖ´$hÍVS&½5ÑïW*—ZoµÌ\Þ¢Ú%8†q^­V)×Pðƒ P—À NÙœ‰Í¸1—×l®¥:¾ï°Sì’ ÐoÛO<öøc'ÎÀóp²ôÚ~ ȧÛFô‡qãG:šŽ-TÊÁ ê|¶6{áo%“9{>ÿæâ·î¥$妽î4ãœn3n.].‹6‡wz)³y}ÊÈÎfp +$ç¶¶B.ÁâUCpN Dg¾í‘¬ÍDCJ¤ºtôsaªWMñ€¤w„w)¾#Ü“¹áà]VAŸ:¸¥Û· + â •Me¹Ã¶É-Ýq—Uh—q¯cA†#/$™Ýà/=b„>±$E¹¼ »TY5,¢žJHѬþi²TÚˆ¹<{•#L™íõN»Õ™_8´LÄÑ'n¡öÖzàãËÅ4çÏ`pN"ÍÊoc6%TÈ¢ý!ŸyÿÙFá}§Šo…JÓ¤Z®TàeHJæ2ºŸ|Éù»’é”L¢" ]à³eÀQž[å¬ÇŒQ6Mö †ÊîÓ©—äÖXAD­/,.€e|’põ÷ÀÛRÑ‚wëÙ!J à;¶"õòX x˜ŠK^…±PAN…òŵvŠ?c[ºç»nѦ[ãé'Ÿþ…§øäCO>Éè/ÞKg÷`ô‡ñÜ ž~ò,ˆbö©?2àæ›7ëKK¯ƒúvÀÁ÷Ì>ùÄ@ÀÑüIc?q\x•Ðù#sK¯/§Ÿwû¸Û[Cÿ*ýÂk¯-í’ à¤xßlóæó|z·Ó„På¯ÌØn'èõÜ~ßPPÅu £Jnœ"iòõƒ£61¼—b7]÷ϦtaæõèçÜWŸùÑŸÇw¾+qÿê’ ˜ç’e*ŒñXX±¢ãÇOw»­ËH¥@‰z¤ºú J"¿óŽ› þ÷h“ƒPÜgmÒeNL˜Ñ(`3¤¡è 5—ù-ÕêÌŽ'’Ç:CÑ?Å0“Ò°PË‚¢…ÙxI3½CÊ”¬‡yÆB§”¸‰-ÕƒIUK¥r‡°R£?_{)“ ø%Ò½4È2⹼¸áIèI~Œ-‹PWô ô˹J ×A?(9;Ôœ TZ|åZÁ¶@óXþ~£2U†€v\÷Õ?Ãû÷åô™îàEq“TЙ8Ó”®ÃÊ[á8 +†PSY䦲z-]*CšÀ\ˆ3É¡{‡PX–×uÀr‚3²ËÈõÐÑ­¸Ø`Í« 6†(,Á1gîøÄ'A”x™"r©ÁaÅ—ŒË’c–^À¿ +dVeªÔ^ïVˆdñòuªiœVƒúŸ§]Ÿ c»L¤š@ÌÆÉ&‘hyJ´g¿0X‘\Üv‘kJ’µH.M¹(ß ì€2éÅ+¯\íü¸eXré°_Œé£ ÅJ­V?xpáÄcÇß­ÞŸýX’™óÓa>Ž—¾à{ê} ——N.Ìצ* ýü¯_ ê y•E{~þȧ) çå—¯ýîÿü[/œùÐ ± ¼@{Ž=ÕÿÍæQ€¡_}3@ÿŠÎG÷z øÙ@’¦ÅFÀüað8½0W;øÈt`)¸±êµ6؈•ÔôÿlÁÂñÒ)ü\W"b¾?õ^ŽcÀ mÔ_Tœ4€~·ËÍyLN=†uV®¦*Ns¸aÚ婿[è1Ð]wúÙûƒng Ͷ¨üì 8îgí3¬}º™“Ÿ`°™¾ñ‰ýD¸ÿ÷`’«·ä„ÉK ŸeÀÚêÛJ¤Ù:yœýyÔ?ô1ëƒg>ÌϬÝFñ¼pü4€ßÿ_~]½’¡ÇØa0ú×¶GÂ@ €Šq¯É˲¤û¤‚Z娺HÇݸ—²Šþua…™ B²¡®” ²(Ðí[íyj¶ úc—ü6FLö ϳk¨ë ë›ŸDGgU’®šÕ¶-~lÐ/qÙÀâ^úÁh`ö¢¿†å¶¢-¡3ú£+B„LVƒ=,†›–i±Àèßl:prö‰S—î,‚ 8|•ú¾ãI\øúKRJ–¯W«õÚLµ¹Ú‚#€•eY°}ìxÝq]wTÔ˜±3 lScèÅ-“Á°òºÜ>t®Š¸"ŒÑ?Ä()ÇÞH¸úIãõ`à«soN²Æ°“‡*Óá¼,ýééÝ“©S¾k˜PŠ¢“V×ýùO® +æú#…þ°+×7Ö»=ˆ†ã±Ñ¶ƽ§9{5ué͉4ÙꌜE^ßEF ÍVçàÚ¸|WR2à‚šÈL/Ý|\a£)Úä!}ö™Oá;¶ðÈ¡ãs‡á˜vã¤q½»I.¿ClE‡fч㠽å×–çƒ#,Á§>òT(]Ç)ó_ý+ä³ëÅî¦Cg?rîáäáÙ‡é§z_<áñ÷›·a=¾¢apt.©ð¤ PÇŸ’IõLŽ`kŒø6h¬å±åóÓÇP7¼ðÝËÝ çê+׎;–7ó1 ¶Tçùü¿ûêáú<Íïò‡¬CC ‰òű‡gfî/çêÒñ­ºaM W¼´ÍY CLQõ¶0NSœÀle¯ï žBM ÉÔ&3™s¥‰4Â@ÆDìvo⌠Áf{$T‚ R(⢩ˆ¬c"ÎôbžmßëEqjyÑ´=±æwn»—/]vï&Ñ0ÃèÒJÀmìeÅñbZf¸ß6Íb×iΚS£!sÃÁÎ`–»{¶^)ËK×®v6œ³9 »éy9œ2Ä_ÃÝ”â Ðo&ØxŠ4E[ ¨ûc4i*|lp7G ò -#©Ì”f÷Nc†lÌÕÛ‰øüÿö…s{jæ!é·àùo>ã&úÊ—ßl£ïÑù#í»½sAWÒuø§ÑÐÿ¹¯?÷0Œ‡8û~\aõû+Õ +~þÙ3_¸xñÙ}8ýÕ¹=3'âìiBúõ œZ°øýWáxäàƒo ÄS sÓÓÕk?X†Ç±÷Ή]ãƒÇçAt;ú¡³v¹îtI¹iGƒè XºœPæn$yü¹} +CçHpo/Ü9©k ÜkÔá_ËÎG®é¹^D™vÒ“+5¼¿Y °ÏÞÞÚp‚ÕDðTª¤ÑO0+‚5u¾  ª^3ðúðð<€A¢&Íåýai9“»² ‰te鞃9'x¼øb⻿|%éÊà  Ì"áqâýl_âo~ì}6¸x ßûOÿ –8›I´te¦ÆÄdê«©º¸ël#g½å¶Jõ"U´ˆÝ´8}E¼ö©+2+Ó¬xª¾ƒpÂR™1”Kn„Un*AžI@m5Q™ªJ×sŒœ¬•áÌlö¼«mm™Y¥<²fÊç*5Sgòýùqbk`|4|CßC')š„Ÿ~´~ÜÇhkT9PnßÞ¨˜„gÖÜ^¼"mµ—.Êfî+oPNÔ¤59iù÷¬GM¤3y 3ÓYo9w6ºwÞæ'ÍœId¢Óp|êƒXAsæç1·zî‘„üÒyçþœ»Ç•Wç,pêÎÓOžM[ç¿þ¼²ªöòÅ‹ û™?…˜Øì€iêŠÀúèÜáƒá!ÈôN_º?Ÿ€¸±Öúܧžþ‰¿0^å°‘â(zÊŠzöcgMd€ô»¸&“Ï/-.ßqpŃð™_Æg°|sÇÿç[R{ýÀñù~ûJ—ÍFšJE¬Òq9G„dCùØæ\žô(ﳸÆ)P¸r•‹~ ™¡ò¾ƒì%—PF)ô‡øpN #1  ˆMì­+°óÈOHÔ¯w½®e–¨Y¶¦€lH‚I¶×íÄ×2¦;qž%“¬¥Ç™3O>þø“O>ñ©ä©X _ZF/P¬þËqâØã úïÊÅ$R|2‚ {òÐiº®ªdÔoc"1ÌÆý,¾ÃŒ„ubÀ ÓQÇÕžB•£Å5øŠk û£iIGkA•@º ŸówØ¥ÌÌkôÞ¬NþÅÜ)ÈÙÍÕ¹¬þƒˆ¸ôÄ—¸;ªcjÃʱ儠,à ‘zuáõååò}åÃ_ºsézì”G½ž2 ž;à^~¨íœT4ë¸ÁÑ$÷bG\ý ÿü±Ãð˜0ÍMÚ ›¯P°0ÑwÊ1iЬ:XÊfAVZ9=W7Q +<׬  @° oϦê¼ZÝnˆôsè‚I`"zzvìpîSŸÆáDIR=x¹¤øÃÿÄ´(pËÉçÌ1d€~6@ó¶<åÅ,€zmܹ\ÂŽÎèyU àH’ì&0MDý¡’àU¯›Xµ]'ù¡èÓORõµOýòÿ;÷±§f~°\*Ã=†czö7ï!èç(~ Zóv§½ÑZy³qøà¡Cq"¦“*ÀùÎ7¿ú;hñæX[¼vÛ¡×ÿü¿þ|ú3§¦ëÓ÷WkÕ)8˜®ÜltºÎé —.b?ÅÓ§šžñ‡PÏþ›ÏþJc½Å­ÕfÃÏg£D’eÆ Ý$&e1àmt——¯ƒîþ…ïœ{ò£ÑˆK|áiÓjÙÙù“ѳ™,ùîCÎj(O¿óò•k?X:û¡Ç/_½º´²ìM׎ġ…Ø8}êøâr£Û»·ôêÒ…—/}©zÛëÍvkÛÊ—©»½'êëQ±E“L¸× - '„YV éø±Ý3­¹˜03:Àü úìðeO˜ ™T[GwË·FYñè£ÌhnŸ}Gš©I_:g(e;ô£Ÿƒ-áae6 ¯Šj†êG¼A躛¨ÆNkLÛ–©•‚0îŸÌ,S¤’>i‡;Ô1Õúƒ>mÈM?JÒŠü}f©*›‡ÀÎÒeV‚;ûðìü܉ùGƒ#ÜSbfç–òåûf¬|{—“ví4„že/LôÒ dºˆÈ‘‹eÉ’À‘1Þ [ 5TÉ`x,*ÓТT¹ wà ߧy£D¨s¦e–ý0¬Ôu,qÈå»]·XÑAùTÙdjå^¯×~{^Þéô–—׉±wyC ã@sõø]ú¡Ù +MÕ*½Óõ²^“X`ÑÁòãʬY–ÉÌ4pd–_6ªl›I©“霯ØÓt³:]ËçÌNgS÷I&¡sLD¦èŒYÑ™º‚ â`½ëpK/k¤8&Äã¬fâ>¤Ò='4ʘ ŽaÖ˜ +³Â.€u‚}¯ÑOŸuØ–qZê§Í13Ÿ-ä,ú‘`]…‰º‘ÐC Χ´ ž¦½U#´bk¹Vsˆ˜PW› ÑË¥BÔígëµ`¹åÍíÇU׃=&œ–mÁ&š*áÌW`‘nŠÖæÓ3ã,ÜÍa*á±”jì:ÃòÔxí7ØòLY\}¹# iΆ;ñ™MÑÚÀþWþ.ºQ™Ëä±YNKÇ*ò†ÑÅp?~o\¥ˆ]H¼ì8yiãmgrÿ®‚ʵË6¾`åúÚáCÓ•Ér{£S¡ëlxö¤iSÙç°³•Ð~»]¡4§6¼•ý“• +H…ŽrÍw➬ð&g#.¤7}Ò´xuu]Y ëecN™¡$ŒJ—ªàÚÎÈe U=0Ùº½ÑºÝÇt½NY1§ýv£™Þ«‡”ôÀ4îuÕ…Š®žZÑm©¼˜ýKDÉÙjõtÙÅ€äîí6“çîò½œ¬Äf –õ1ÎÖCÀ,çŒåR•ç„þ'-Œ‘X"²‹\öO$ã‹L˘Ù.Ò¬ZOŸ,¾Ðt+ð¨YíDt6:×—WÔŸS±ûûÜÓOƒˆ=÷±‚šoËšH\:€û;2·oHZ[{WœÿÚóç>þ ýo¾¹Çç¿&̸Œ€úLÑ_ˆ§à{Ï Sz@\¦,{'ß¿º?'„½û°â®N°m™Ä~›º6ëþðPo¨ƒ¹ˆiëw~ºÿ0þ6ªO^^“¦î‹ß½ÜëIÿàâë×Óol,/Ï•lM øƒúŸþW°&÷OqÙzk@¡„ÐAÐË‹Aw+‰Ì«ŠbôEæ0rƒ)w£@QOcAo*ÏŒu6?½ØË±#'•˜ÌQàGèÇ0ÙP)¾/‘«×ójµóÓjöÖ›ý©ZAËz˜¯&MèT©RÛ¿ ÆU£sþͽ»^1ÕúÊ*š*OÛ.€ ‡ei1ê?~Ž/Kä±NŠ´ÚÁ=œ%¯¦KvË ô`¤Ø•§åv¦Ýq{‚ƒqwk˜«Àsq3o‚1¹°É~™8ÈË’®!ó¬g¨™äsþ“ë!8å·½Hf;P=ë‘d-H¢5Š]™JÀå· IÃ.ï+™½j€þ+¯EÒǯ\Dfí¡ÄÓ5Y.‚:ê#€¥7®Ï?²-eŽYõEÊ…8ÿè¼xT|éO¿zö‰Óü Ez%Vð$À¶ßvÌN·aH¢nàsþ ÅN³qØVƒ;9Ì*ôg޶t‹`X–d`³Ü?yº;è:Ô +ìÅlˆb`Èam^{^zý«ÁK•<âÓV^wúž]0E®è1‚ 4ŠÏv€ +Òbšæ˜Å[ í€ R…ßä?À(4o.YI˜qÁ¦ðcgMEФ +“V³¦ÇNšü6•‹¡_0ú“úÏz> Šç^ÞôÙgëýáÏœ}°žýåÏ,/½:7tî½ÇN>ЍzŽj¯~Ê«ò}RªkÑ©Æõ xÀÉçã”üë¯cÑ ¨ÿ>lŽÏÆžúóçÿ +yüŹsŸ €Ÿÿä9é J=È€ri§Â’îC èoçY¤ógöþÐÙÿø" +¶@ ìFü(n/;)ƒÔÿËË(™ÿê?ȦÊ/]µ½•ÿ/mo#GšÞ‡½]ÕUS=5ݬb›Ó;³³ÛG.)îòn5¼½£vuôêhÎ^[N²‚9²òGmHâÜAÂŽ'g‰í Ø2r ErdÀÅrEé´'®©Ûãìò¸;G¹½œa{¦YÅî©éšª®š<ïûVõ ¹’§X({ª«ëã}Ï÷ïô‡,X¢ð=¿‚vCCuwB;€°¶Ú^gDê¿(ùµ(I%®É¤cJÂI³”éêD)ISžAV­p¹dœI E91õ!åqÄÞÏɼ(ÆǬ¨ÂÖµµÅEÀÚZ/¢Ôòþ…éàö¢T0uL¯ÜêÚ)¼©úyaè×èQ9¨«Œ ¯.’Ñ?Ý?ÒªJ–¡_õ RþŸ´¸€IO¬ˆ€&®›ÐÂZ ã'ß‹4ŽpFúF€C™u Ê€àšRAÖ·+©Qã] †€¢hq1E‡^ ;“b +ÙB++2@Ré‚(U”.˜rÏ™=—)5]¥ õŸê|-d̯9’öR`kÏÞF—kאָüÆHƒ‡£Î<ÓÜýÖºç‚î?|ÇÛNÐÏU™×Öš/ü½`à[îxZ4]<óM*sÅÿæ{·Î¿ §°–Ñžê7kËœr¤ª‘‰zFrÒÅDÍb ·Œµ¯²¥GcÎÑTšGoÆmg 0I£qýBlývîÍ-p\„K´ñ*š3¶­’vxüË[âp9½~]L?'Ù;@¸nŶ¤“#Š +% ‹xÁ®„ù5 +Ùû/à +ÐYÀ0èctMº-ÝÔy‘±±Âп¢¼8Û IDATdmÁX;`hºwÓê,¦ýåçtE,J½ãŠ¥zù ¯½ò2"ÎË?vñü'ϵ¤¨/m†FEX^=öÓaàãÖQ–0±Ì#¢6ft ¯²Œn,3‰xÄyù¥•ðÿÙ8Û<^ùä¹ çqÌ­P èõ îº³•ÿñ×óþ3TÆ›'ZÃÝèouó(ùÄ2¾iÌÏËøbðÌÔAÓ(´ÈPÓ䣹0kN­†üÝŽYAŠ¥ò}¥Ê­aV €Âk«ˆû?ù×^ûçÿëo¸ªQù ©® +Úzh.‹‰¸B¥gwºëw?¼7Fu‡º6P¦Ú;Û½ö‚WŸs™Øs43´”™Ñ(Ùõïz¾ãó^¼üWƒžd¨¢¶\†°æ†”©âRsžÎ³ÏNKTYéˆPuåŠpËͲÓp²,5*:I\Àg0ó#ÌÌTÇ#¬n»¦a¤yf6M¦L-`Rj"whâl0«±àeÝ‘ê¹ñ˜h)ÒþÖðæê&ËÜÍÃa8¥1À̃,ÞGQš+Å"ÞϹƒ¼@3·L#cÙ€t­˜,$CAñnR÷]ÃâÇSƒ®Gá”ü¼¿µš5×]ßÀIÚ'½Õwî,œô;§ÖÞ‰['ÍfËÛø¨ß€2'¿óo®¶Ú^°ÿ‡?\«¡’+Ëò’¿ü äÞÀœ™ªdJˆAšVmÌm£Q«VâQ„1’< F½y~¸×Õ&T8ˆÂG¨{DÞÑ0î9ߟsd¿OGL@1‰'–S­yN4¤¦ÜŽ1‰Ç»Øë©Z+M´9"¾e-3”¹ƒmìè &ÒqCÆp=³3'”ácͺ¬§fU^4¾Ô +Ö†¥Ô0@(Çñ0k‰} uÔºLdjJ@Æa É}i.`ʵIáqêØ6~’"MrB…´y–€Å…Ù¢ð56Xm¢&¥±¸jÉÆ9Iš‰í]Lé4#1#bÔ» Gô°’\,TûNT"läU¢•%asƒ{"4A1Âïj ++؉ÌEÃM“ËŸ÷»k›q;®  ¯þÛózÀûè+úx©˜NI~Ö4M´œ™Ô¦Ê~ÜŸätbˆ¬þüò¥W¾ú•/ýüßÿGoüMt߯~íëßøæë?ùÚæ}”ogOµýñÈϽ f&¬4°ìr>8OB$Õ5¢L&jÊVˆ˜u›f13‡õ5¡FLBÔäWŠî˜W¾sí«¿ô â ¬×Þ]~íTm®­Þ,9#r:7ޡӦ6ãìln;Í®j۲ň»7ú[Owúuýc*Øsˆ¶)Q€å**…~„;·üg`«OËrŽÙù)Û3âzz,T=(ˆƒÌŠÌ*CK…ÂtØÄE«™Ymélt…ÖI–ë5‹:ê,G|Z pÁÒyU÷-š-·yÂ]Z.ôD ®L܃ AÏ@´¦³Ë±+ñ| ÅûÈJ7æ*h/€‰£½XËìs§K]Nýy_n[ÄU©Å ‚^YÉ8‡YóÊü%¹RE®û 'ë v|²Õ o³ä½ã.F‰²H0½ÏÂö.¦iq"/Ý5j©šhžwÊévÎ æ¦#‚%1Lò"=ÆÐ)/ƒmÉнÝïœ!5|õÖù•³ú@ÿ­Á‘Ý~¯+ÞÁ(Ð:éÁ3ú|\Û^96²6û²«X«~eÍw°Åy½2Lè¿ìœ=uÀ7ß¿ê5]XA ÎŒ¨Ì¢1×(w}˜”&—+sRSm¶+Ûpš¹ÀR<ö”¸)Km9òa¢ÌAû²du_úÜç‚°«[ò–Ç?²8ŽcÖô™w]vàÀ~Âòe±¯•³nd3¨D…dÌ xÑ¢Ä*Ó1ÈzÆñ–!e ³¶d*~ s1Ž4hó&=€þ`¬*´kÅVP_ ¤Ômˆ8x|ìv‘¼ø#ziºÌûÖÕï]ï§~þ¹¯Ý¡g*Å,:ÒD—Ý…¬nKîf¡R3§ì,K”E†5Ìë\1P'ü؂ Ÿuÿ‹Ÿ^ô;a¸¥`èçE'Yb˜®’™z) ¦¡æšý! +*§^´T.Yý˜A¡2á ¾þ»ß|ý¯¼vùÇ/^ùãk°Â'¯\DóèêuÄú·‰ÀÑ_<‘›€@ <„žŠ*Ê'Z. †W—ôƒˆ©ú½¹F¬Æ¨­±i¸ñ¡³è®}cåÒ—½ùÛ t9=d¢“U‚¸oqH»–{(ž‡TÙ& É1½kipЇƒSw¤ó—¹ŒÎóÄNëý#…þg^h5[w|±ƒTÌ¥Jƒ›¿c VPýÙC˜o9çY ú)¬(;²;Ï.”Ñ?‘a "¼Ä,³#ä÷§}÷˜·C–>“nf¥î†F)ZèOÌ̧ýœðÆ‹cl ÂèäKìÙGFtâŽC0PØÕœ¬°ƒ$ß®KžüœÑŸwˆþUÊŒòï2 “ ¶·×ºÍyï̹ì°à…HrvnRÛH¸œÕ8,Áà¿‚úO_¯µÔ'Nɧ¬9M›Í†N—$²¹Ç»y±Øe<ÊmÀ2àÖÝ[åcýësuÞI©µM‰7U§zTàó7¦´°C‚x6%GØÆ,{Já{ó;ß1g†çž;Ç2@FÚiüc¼-é®ÌšÃ µ?Ò=¥óËD;Θ@I@׫)ÉØE„̸Y)ûHÕ5c·hÊ€Àßñ,ý~¿e üÉ ?œ'È]k®…7[H}lH¸ê¿wB~꿵ÜêL +Ì„þõ:ZÑ¥áÙÈþŽÍ-AÐ`H%o¸ªT¬¢Ó¥*AžRI|*Ѷ™ø8måkÿúë°S[îì“o¡ÿ Åh<ø…sßsn!“4F! +€QqÇŽå8vÉ…t‡Ï Flßú~—Ñ_Lg§|üèˆ0¢Ýlµ¯þÁïp6§àœúª]õ€þÝ›« šó…úO×&§ú0ÞÕ]„à.´ [Z×N6Ç45ôƸ0Äs%_tê ‡ÜЖaF@p£qÊê?/ýMjAÃÙ‰ð¦Ö´l~6CòY‚T» êv‰ƒŒÐ_¨6R<ÿ5_ Pÿ[Tè~¸õùéßR +Úã +Ýù¾hJÎê“,c¶ÊCñzw)&Â+Ó Âï=¦Ð”:X„þ¼G},TG{r£a·Ms +¿dûC) RÝ—‰·X:à #8Ò£”Ðõúg[Au?ì_þÂÊÈs‡D‰Ðºÿ`'1pý-¿éÂN¸  ØÀtXýu3q¡¢#ÒèQÆNw@Ö±Ó$iT¾œ¡t4‰6†IÂ} +Á· û b`aô׋?ç°¨ÖþþÜžQ®¶ñ®ßÄá’‰E#£·3⤦4OÈeа«u +2ác\_Ç‚¾Æ\‘æÎdˆrü£Ñ—³ÏF8æ\&)&hîËJ`ZÐÕ=ÌŠ*9;UÑ¥l,òèlÚAÂéž`D×Èb@¨ü0¼º×íR`Ïu5úórú‹[˜‘èÐogxö( +G‚;e*d5DÿÁö¾(„D•% ¼Ç4 E=Vi.ÛiæyZÒ© Í7Ç`—u/¹ÃÔœ™öF¬ºšØ„&3@ËNÆã=‘Í8hZkˆq3ª]‡÷þÕ/`b@8Øvgª²ë¼4ýìRÉu4Q‚ç 3³¿¶WÖéKTMQ¸Å̸w?ÀzálG;4c•™¡gmXqÞ½ +þ?ÿÍß^]½!vÃ01ƒ~oôÁ:<"wµo3I– Ü#Dr¥+áLŒ[sºß¿>Û¸ì`$3@«Jð•Rcf׌ ƒ€¼19&ÚÏ6`;Øé·ÚKl¬Ø3.<Æô Å©Rw\î›Ú¼´ÑÏŸ9;é 2§&¹€N!‡©gV3ø•8æN{¿O‹R‰ñ~+Øq‚'<Œ'êöCOxX±‹¶ŒÇÊa¸Pô¬!™„¨8âý$ 4§ÁðÑPA¼¦óÞÖF*?(þô»ä硺ЊÁìíCÃæ®˜ð³n‰Ò<±“†¦C| Á99 ¢42-vYLPj»ñ êuƒ»Almõ@ÅæKâqèF&b•z6ü—)ÐOi?Ê•}§5‰ ¼GuGÈ“Ocr8$Ût2v‚ÖɦaÄ Û¹cÃtú>Ÿx7öæšñÄÎÕU&WDd­ôÑÏàŠ¯pFÍ/BÜÿ6lZíùÕ·W¸O[¾òïVÏ¿Ôi=åm|°S©=ï ·‡·ol²’þÖ¬ÐÛ´iê“£Àš³Îw:y¥CTÈn4¢TojÏžY±,A5Îp£$´]¬ÁxÕ%ŽË;ã< Mì +ÚœÑãµ*ªßœ¨’ôzIcÁô“ñ®Ô±u¦Â5ãq DÈÝÊš?€Û­¸uÐ…3£êŠ*Ø·$Mw©½»SMÕa³u[By¥–ä™; 8­“{^1¶‹8@J5ÌhªP•…ÀV31(¦°Kì)zÝÅ…Ït¢ýÍÓç™™‡E80ùr ï–\8Ñ2®œ‡AB)ùèT°¬†Â–„pǦ/XÖ:ã.Q fØ< D0©½š GŸ뇅d]Ä(%LëªL ó׿.ö…?+¼ +½Ê³Âw°¿7Qü ˜Ð°ïP˜@¨Q%í¾!BÏäÍíKÏÌÞsŒaB±ôgZ¹åf0ð†¤øž[ènÜaÕ]ëÚÑì«?ûék梙šrºfd/s»‰ñ–®„*ŠdXãr󖚇€þúV»Äˆ;F´?÷CÙ±£¢™ôKW+;PN[¢]Šaxsî¡®^ý¥åú{˜‹ùîûÈôö÷Ñ¥Ã:Ë€•³çʽ龷Z[êt4!%›y&Ù¾<C×¥Àc¤„¢ë4š­ÍÛh=Ô›-vkà%9waÅd‰l ¾têlƒªçú[› ø§÷©}¯+J¼ý¸6S † Bºþ`Ðj67ÐsÞÅ©•bœÃ€mÆîœ4NA%aFò)R_Ötpc­@Up}¿Py®)奰¹À‡éNÂ0¸³ ¡ii-H8hžx¼Ï‡½RòÅ©|j]mÀ­f„ì7`êÖQúë€Îi”Z¬;âg>,A.Å9\œÎ?M”OK)f³ánÝô …Kv½‰¾v{L ,í;æ¥ÑÀ÷e)ûyþDñ»^½^³çƒÑN¸;€0 Tu&é|Òâo„‡Ý»›S‹ƒþpg{töÜé÷çWÎ2Éeÿ~Ðß¿À +ÿ½ú¦jz³/O kbå³ÒÑÏÚ=gß{ 7FÜú-NU°Ç4mjjR‚i똀¿›R¸›·´ÃD §jDØÃÄÁöÎû)Gì-bL+/!V#Š¿½—& œvÃ[·7¼ùâ ôs 1èø,wÇqÒ^ð‚0¶e#FÐcÌšªg13¶t-¢+O™Þ)Qˆcë:ä¶²0v’ÜuÝÒ¸qy@¯ÊJ^;ÙÛ‹Siátì¬Vrxü—ÉA¿£B:ÝN¨BŒäIJ^êD¦ hlaËI4mŒ­¶«ˆþÁú`÷‡{b±)Fc ÊÎ<Ü +€ý†0<©ÚÃêÒè[–/x3ñ²y¿˜8 –¥ àåõ—»ïöwïË[¸€lCÎLö™ÊlŸ´ £šz¤4j_!@^B­-"jc &u!vÑ0GJö»€ÝÓýÏÿ“×¶ÈqŒFçÂh +ÝŸÀR‰K¥x1X™YÊÐèw‡D®ßB“gõdøL2FÿÇ./~ +µ$ÿX d@ç…•Z½F÷s©&C݈aÛ™,“Þ À}XA Àºxæ< q)1ÆÆ–žÅ5îlܽ2 ÞÞl-,r) ?ËP~ÑV˜‘®v +ƒ# œkú»sñXz61s\•ãÃ;49„ËZÌ÷?â•Vín¤G¿ìÕœIj}$¼Æ±Æ!pt±”VË ^˜†Œ™ ì#•Ìh‹+=1Š||Ë‘ [t +í‹rO6ÎÁÕ¡ÝF£±¹9å”JK1€DdHŠm˜,úaÖTõJÍ@½h IÚÛËV¿öX%-h<ô7[Kƒ¾ÌÝ +†øLbú*¨ÿ!ÉæÇ¢÷fÏ=æ´žöaÇkE¾J¶:¨L9U®üîUöÞÜûakÎ;Üá¤9ï•ýõq©Q/C¿üœ>äõ—bB"ÑÇ9i÷mKzl²ƒÈÆþqô‹G#¨G®|k1Ay®2V›Ìáùfã왥ëß½î¨cýï9&ù(ªù8N‰”Äd† ¤ã8gF˜$*H`öu71Àô¥Ü#–Ty|2ÔV¹tŸµO—"sHüP•L'ÌàÆéËì”cjè(Έ/ÏbMˆOû\›O´ ¨2€ó˜¹‹1 ÌÜ…©×Â@">9W½'dgŠ<Ƥ+~ÔôÇñ€©>¸ò2аǮ +.Ï…ATÁZB+‘Ú 7ña„¼UËî:È+ A4=ü•¡z±ºà¡±Ô”¯àŧ6oôP׬ªa!ÒËÝ— ÊUÒÍ¢ Á«)ÆÜTP”g™ÞΓ,€þËñrçFîÂ,¸·°n)Ãf‡iºÌ^’‘T¨–f”Š0Ã; ÃÐ'vÀ•ï½Ï_½½>.~ÿìÂí-ë]öÿ  @&»i®8cQ1÷Âd½{Ñ£á`Š'ŒsÆÌǬJcÖ¶I®@0@ ” â0VyÕû1¨ÿ`€âèÏk«}¶ûCÌ1ÀƒXûdY¹†-GnY ºAÍe„ ïãJ(Â)J-ïÙìƒg[o°üãN2¸2`³#`«Ô± ЧUät! بc§-Ç`á5»#,òƒ—‹rA§ÀG7~ПW§ÒfŽÜ`)@EeI…mbÔÿ îš@Á´¥xÁ2cÕ·À®/JÔÓ%*\wÎô/ÿb‡L°ý»=Œ|²úÏþúôôú‡(*.}þâ ·ã6ȯH% þÃvõ»kÉ~º¿xo³Üd@ý,þŒ¼† Ãå 퓞ƒPô–’ãŒ+’ræßÎ8€éÚž›z`ÀŽA9þn3Âu¯é‚°OqÌÉÐ…9S¼À}N:5ÙËÝ1Á>¢¸:ŒŒÂâ£2[Š^¶ RóÄqÆèê?’òc ™aÇQC«âXe){,@ýÇF»%MA“…0ÜŒWökžò9“0hÕ|d(IS¸„t„ÆœþZ…âäI'&)Z²Ç†à¤ FŒ,ãD;5ãÕ‘NÑ¿xzc´@÷ß$qbÐKy¹Ø zöÛä÷gU‡=Ž÷¶Ÿyfö¬÷öž9-nzõ¬þó¼[lF_«s5¼øâS_ç¿V…ÌÖ猇ƒ ÅØÿÓÀýL;d ìÓÎdslÚš{)9²aZ ¸Eà#ÿ¥Ã|“qžþÄR8¡Dˆ9Ï«{sÎÖç“_/Å2]L¸V‹.Rª–A«R5r—æn€Až;wï †ÑÎ(‚-³<ªZS¼»†$\™²2Ì~±ÆÄ”KMøãØ;דgÎÐöúÝö +ﯞûÌËü§1ˆ»Ý{-eÌ|€‡†œC¾rN“ðZmaÏZýýÖSKêq€Ó"rÓAÎNx˜î17ËEsÈ=Ú·ßûö{7ZOýÄÂfx VgÖîE `´ ‚Ý‹{Ñ úó+æl°sÇ=~Ú2w0x`¤(hsÌLà,4[§L€|šPd˜²Œ‘ ÞÄÀåˆV0Ó@މª+DÆöŽæhmX<í~êÕ$/<<^®Pw%ÉOg5Ž “Þp’žWøŠI±VkÆt*&rº4d?5P©7ù-ƒ6H8B÷”Ût“½ýê<%3,ŽcÖì}©ê ÷0ÚÝSŒºFw´;¬9R¹ÊAèúÒºOÓb8!åK!0÷ðØã%Ž‹BB]ÉÜëÝŒãØwág›ßi}ûÚ›‹íV}¦Ù½Óët±-8rZMê¡ü‡ß¼ÖÃöÉfr´ßjyÞB­õLÌÈÕ6r•ŸF®þ}šn%°ÃDyJ-|L÷¹bvèX ®tskXxÅ_UÇ©Îe@Òbš M±é˜^´?pg@Öœ â^Ýõë.‹:Y.§f –J´$ASn.WyŠu¼®ÇÇÂóLr ß_½îÕ—E5–µ5›ÎfãFÇ(ÕБBÍJÀ\ÊöbêH ª¸‘^•V­¬gèD/¸+Bg+Íœ’‚TSfy`m­ê¢š’>‚Û̽šF²ÎÇ?üqüªÅ#|˜íì ‘§ó Ɖ;CyGØO =QìÑä)©¡,̱®R‰Ú‰ +‚%e¦‚#`Y¬à ĵ%¾ÖXršJ<¶e³rŽ)¶xÁ©1­Ò]8T“±»+ÿûÉ• Õƒ™0 NMÁЩÙ8žhX[Xo¤¬“ +¦pb%¿ØÊ;\·`P×4«°“LÝŽ"Íú£aXÿú[Lo¥ç'>1Ë:Dp°à{4þñ97Œå÷ÁƪÉÒøgW>nU¬ˆëR‚ÒøÅÑßä#`ô™åtõí›8? +ÏÖˆ'ôçV¼-HOÓ\ØsýXˆv€[ÊŸjZh&4íÁÒ³ÑÍ8Z'“!H‚mÑR¹¡(qKšSOEßz»ÕË;¹s?™òî³#H˽ÃA`}X9 ÌèØ]øú“²À0ª‡=zÝÿ‹QüÜõ3a)˜Ü,5Õ©™kw× +ß|GzunÞ+jŠ¡ßm¸ƒé cZ0µb¢ØÜT")zjƒP+¡wÐßôN,Ä?|8ƒÅS8Qý‹ÇEü?˜OQ…ß^yô(ìÔµé^ZOÉx‹Mè ÀœEÚÑ èï/´ÄD¿wÄ@ÿþº×Z`Š7Zý¥~‚èßýVëÔ»ïDïX38ÀÎ=(©ÈÒD]×®ÓÑ4-ÇVØ-ÃÂwÑh,ÜŠ´^…­ä‘+Â4tÛ¡Ú9Õ„U=– Ì™¢Ÿ­Lû¡ Â(ý± +ÚGØ‘4Ù$wà°½„Ñßžµ—ŸnôÓ1©„˜fSØ‚eô¿}—èšøä±1=蓘iZcÀ/]Ã}z”ågzY»…©çξøþÉ—ÿÒO¼þâ'_ùòßÿ©Ÿý›_bîëÑæ{½n·vúÑöÙ¸Þ?í¢I°¸ä3ú JDîH‚²¿^Nº˜U!+Çú(°wlUžÌ&É&FEæYVñ\9؜٠¿f)à%Ænkr®Yf#ÚÛõöûCÐ¥b·¶HèOgNÇü]šèP§Æc‘TÅät?º}îGV~ã× þû3?û·¿þï~v^Ç^¢âÆM¤;×ÞºúÒ§?÷/íÃ'ï¯uÛíf·–žÁ‡s‘šÍ¹ê™ v†®[¢0`#vÌéúgN7#@sýˆ`Û^šð–R@Ò-RÐkŽ®V­;e[ª2 ̾4ãÀ©Ö`',&Y‘‚b@›þh +`¤—]4 ŠŠIeL])cES„¦`Œw%úÃVŽ™ŸûëÝ­írÀR:¤fD­ã$ƒ [©Ìdåì ’›eÊ7Êâ‘Iµ2¯øâ¾'yÇ|‘~Ý?ûÜÙÛ÷{÷úƒîN0œdÝ ˜6ƒ[÷moÞïG»Q¿‡NˆgÆqgjÍc x€6v)µ’$Æ$„<Ú˜¬¨T¹ý¨1cq>"¨mBÙUH”>N8ܪ4#UT4*ä +6ðHøosùÌò'ÑíS›­ouß?uî‚=-£`'£`ˆAÄ+&ó¤ƒ\¤Èg"†»¡K%ჭ¥g;Ã>ÉçªcVk:Ž‚ŒU;‰#n«'±[oô77¢Ñ°Þh l:5„ÂäÑö0Eö CL ‘ðF|ÇIân°y|>F½ø\£ßm=sñÖ¤åfØ3¤Ä®SçL nÆ#[z!—aÄ:èæ)Õv² +ı9÷dV>ÈË9b'%´æºD.>ÍI:Â0N¼Ü²¹½lŒŽ‹,/Ýd†Kó3/Ü)fnr™¦ßƒe6§Etµa0Š÷³…yŒ¤•,3¸æ9|,tÂâXÿp «s˜8‘Ëjº3Åý~ôÓŸ»üÅWe«Ñ²ñ ˜ùÜyÜfû²Ç(ÅïÞÀ@Ü‹ŸZù¹ÿæçõúêõwo®¾s³³ÔYZ|êÚŸ|çÛW¾!2|b_þÊß{å³—þð®þò÷ÕË?l%aÔýÆïw/~YcO5G£ÑùOw`{09À_Dj²µ­rírPB¹ÕM’'ÛÜ +tvršSÿå(ô£ÛyŽ?W›q³ŒÓ1©*ØaŽH䇰+R]q-×=·ÖŠÆ}ИãJ?ÞO¸µ§9©ÔªÎÏÄ.@R’îbãë öŠâ>¢^ÍSéùÁÚf)fÕ3ØJ3Uo/Ôv‘û;+Lb¢bÎ<Ì +&àç˜š¿³æ)ú}À€1SM4W ~“œõpy®iqÙ9Ì$dn ù›aíö¥áY‚÷Þëõðeé7ëd{1U°åK†TÁçR)»¹ºŒòÆñNô°'u °qg‘qGØÁÄË&ìk‰fï™WŽÁ ‰%q Æ‹lX/l¬ ôeŸuËÎQ¸ Ó–-‘Ê?cæ±pu:å[?ÜZngý]±là5G軎p&¢2ƒù50¼ç›ØŠ¤ †G"y Œ}̉r°b£¶x1»¢^“ª¤—1‚å’ȱîObÞÉ~kôÒi¯ÿ[«Ëã<ûé3«¬ +T3©¥ 5dÊ¿©bðÈRjV.ž° ™ý?åþ²X-mÏQY§—«ß•>ßþ×ÿôÿøú¡¸Ù·¤Víâ{A•V`9ýG^g–báåŒl‡ºß¶=fn¡BÓÈF4™dÍ®Êüe6+áT,-@Tôîy¢ã͵ï^…mÝŸ Ùb€÷ 6„aÛ:¨Ä L Xa°ñ¡h’ógpŸÒ:i˜r¯]þŠŽŽô»Fkq)ÚË@ÀJ/Âd- ¶ûO #Ñê0VZMÛß ÂæqÞ÷Æ÷1‰Hub£$Ô“!æ–+#tá\Ù+¹!ùÉ+«ùÐ4·­(©låÃF¨¥ŽãhÇ´lT SRª\ãª!7À‚ç+ÈDPù‘ß_ƇaÂðVp¦¿Â}]g‹Ñ¨Ç.»£áÖzÅ€øÓ–ñ¿ü‹ánÿW¾ü+ÿðŸþCøï/ý׿xãÆõO}êˆ /žÿÚÿþÁ‡ ®ü¯]üì¥kò&¬¯¼ò…«ò&ýò«—q%pû®' ¾ö¯¿ZNB…×ÌsÁ5$ý‘vgÅèèù3‘¢Ž4´\ô1F)†d#ÂØql/V¹ùN)‰{(«Å²é$[NòÙÚ94J‘d¿†JUìåàÔIÛ•hè Ý‹¸&ÌŒ5©z“em“}š&–R‹êÖl‚n¥lÔ¥ñ††Â(“;éÂݲ`†ÑH~H7Ï1€ «aÈ,"†ɽzĪ@·¹t¸M˜SóÃÕ禬I^¢‡]DÒhv“ÅO<Ïÿ5«³ú0³Rx5Œ4’î¾ýèÙtIpRbŒàÈ{™xf±‚¥$ ƒ%¢{ónçü©Î §o~ã_ñç­9öS‰R°CÃL&}‚ðë”SšsùWÎÑ'Øwü™-€~‹Œƒt_Xîjàú½‘jý.ý†(1Bƒ`°JY_›Û›,¼êÇͽw)?"ÖúÃ:V'Ð9A©‰(á¾Kã¶ÊÅlUPì#þSAÀ2ƒ|èœØ:5IJ¥€ÎADܶ Þ +ØÚѾ` Qá¶…gÏn}Xp˜€`6£?ŒKËu8…b è¦Â‰ÏÿèwVW›*P&ɨË.+& þƒ€îÞo-cÏ΃³Ÿº8|´mZF†îdÇp2~Z¤×¡ÿWý&Ȁi”,ËQÁgù$™Ù +g&VW$د*GA4³0Fò5Ëkè?eï +V®Qm¦Ó½º‡&-wÁžnÃ2 #C÷™!1€Ï) 8熜$( Ð!Õ“€¦»a€þ( +á°ß–[*Ê[ãR€ý¬N)•`èz÷ÆõŸÇqõ«ÿÛ¯~ñó_Üêo}÷úw?sAöŠùöUÙóçË¿øót0D¹$@ ÀÐÿâg?÷ ? ⬿$¾ÂÇ÷v +ó™uÿ£ ·cª€XÉT\Eĵl°è§´ŠI®k7Aýw­&ÌXöË J¾¨Q: H‚ñd+Þ—í `ë0Uêö­ªk[ŠÁ…p¾Kµ(Šžk’» Ñ?„+œ±5fe¨)Ó¡cÐrs]ÁÄ€œþ[">³è+)+ršëI)˜4ä„âµ.?LeG 1—„9±KÁ……,¥À4GEï‚þ£>¥r– žy”ÿëÎQ†®!oÄõ;e‚ú ôC”Î3E_à˜SÅ_<ýüÊ÷W×P¼w݉WÊÔºÇûø˜à™¹¿àÊ’ß ur¼% ?l¯üÖ·Dn2ô …þÌ(7V èO€^à91— ŽN0ßšgÇ `eÛ9}Q7ž¦ê¸¶~îG¯À}ÝÈü‘© °&¾ç|ÿrà5¿ŒZµ\-ê³uÞÚª býÁàÞ|ëàÕÆŒþ‚0î•ÏH¬éÓ/²úÿ1‹«´²…þ©.%U;\ÂjëÊLP-K;yå>‹t#13ípz7l(´ŸAu ìXO»°xêì((’ôe)y¢ûŸ\á¦",Cã ÃpãÃnƒóOÉãŒO®æ³XýçÉO‹e@&I -EžŠ V\ê:2ƒ~ü"”ÎÈÊ&Ë€a¨ƒ"‰ï»Øƒ1Nf)‰ÈHP®8!øõY2.œrÀmÆÔ ²áZ,IrÊЯ_\ô77@ØÜÿ§øÙ¿õÆ«îlãô³§a½Û½ËA PÿöZfõÿÕW$‚¿ø©0²ƒˆÑÿ ü¬È°úó.¬"ÙŸˆ²\ÖåL¨Fß#¸ ³dÀÂþJÍZôd€v @Ëù`G ¡›Û˜#M81Ms?\µ ¸¯3ý9‚/“Ý3s8+R,2%ãÉ­Oæf•ú×Û†æ¢dG$ „5¯º¢4(© £¿aÕRÁ<äXú¼hŠ|9D‰ÃÊ©ô“@_Ûmz 0¯Õóð< ÖÃGÃhDÉqäù-Áq:ÌŸ/JQJpæÚÃþ­Í÷¾ÛÞV!N¦ÚŽV aïÉ&½ûÝ»¨A¿ñw/ksŠgMHõe|˜Tìè©êïê/Th Œ€î{w.~F~«¿kzŽ4éþñ¾d}(uáÄEIy©—sTË'AÕ¡àÓb’s1r”k§¼>¬¿úÎå _}ù›B mbµû`pî™Eý Š7 #ü.†: 5ŽA Á‘·Ø{u–ÝðQpF¦#«‚HðTRæ*'s,ƒÎ‚CdÑÉ]zÎÿïÿƒÙŠeú<·ñ´ÞïÞûß„£°Äa;ù ½;‡®Y ÅŸáxçÊ¥WcqÞ©Þ‘ÉÔ0‹¹¦‡ì{¬3/©!dq·>˜D6»È†»ú®vΞuNÌD½Ûg–¥å T¯SôáÎbÙ9(µ¨ MäÛ™óE°M×c©ènUôSR)vÛKǺÉ=Er–ó¹s¼®`7nV×Wo»çÄ·Çógà[<è<|ìòâÙνÍþ5E¥pzÛ^û>¦ Äaoi¡ ¶µš;F 3¸°–oß +†è ¬Mg;ðÒ½±ÚîœCš$øJÝ3i¼2uF9?]7ä1O2îq(ÈI…õU“{ôX*g>¡ï2[î¤9ÖµUM6ÌÙE‹Â„Io`’sw(ÙÉŸ— ýg_@Q9baø(,2FX3 #ñt·@ƒ sïÄ’ßZ¼þ_/›“YÂz7RGØ3. f•Èø², ܺsË[X ¿¥Ý,È4"mj‰þú˜Æ¬»öQ÷¯Ó9sùú[_Ë'-Ér¤‘Ž’•ìÓüÀdSûšZEª¨P¬¶å÷‚$£ØÐJ–DrK¬é|”SÿÝRC`³ +åŠRÆ›£,Ø’Ãq%~ËÉÄè¡Â»aÔù‘N4Š`gø(i³7Öñ$sÞf·_÷݆çæYqµ7ßëë§6E‡ èñ%Zü'à¿×®!è/¶[Kªä¢·ýáÖJñÌØu}X£¨DrF•69Ü3é;` —a5\€\{Æ‹öBWµ8ï6YpZj”àÕ¶ë’œ*VÏ'ˆ6kV^X4&ÁYuÙ(²Ke ¬$ ª9O¥y‡èo©ê>HM5Ù2ˆøña ¦ß@Å‹it"3†¿k±”’äK 6ä¡¶ ª7œ’^[„’²õw™6Š–ÊeD¿ˆeV°åÇ©È%÷ŽÐÎ¥RÛwþˆ‰xËîå©ÒÙby\ߎYÌ#é銭]€MŸØ)B  ÿ_ùåÕ7¿]N=*¸apzÚüü‘{Å0 ŠZÐMùt^S5û{t˜‡ƒtE÷ÎÓ0¹Ð3á¶%ÐJn ú×fÅxO}!&'§«Â”ú|z“Võ|VÎDíùâV×îmh àI ûpÞ%/Ø»wK¬ôЗˆ²Š·A€#Ø÷[ ‚á FNIØ–¹Jü“í.½KïäûCRz`¤4·1' »P‘ë`T®éPÝ M Çè‘͈õIf+Ž×v“I”bݯXeRo}ÓÔîtA2°] ‚­>èþ;Û[°‚<ãÄaT“§éœ°«ŸeåØÖ¤Ö}ïZ¸Ôo6Yý//̲'‚~n®ëz¾î2Àk"ˆûØì"MT/Œ'†þë§‚. þƒ€íåó!ƒ4¶È'›¢¶Fu~4‹LP!a ÷KªœÎvjÒ2îcvöôÍa¿F5”÷ °êÊmL„-ÑüÕ\;ަ&ÀæÝŒ0l»?è¢ %«qÌZZvA ÃÐHÙí;Ç û‡ÈÕ@'iQïK/¿ú•¿÷Ëâ϶lÜ_OÓñ¡ÝYV“¨ r©ÞFÉ ý‘z_.1 Uqܰ¿.ÏSó£1úÁ'wmÓM²(÷ýZ МF‚¨âdH?åX%¦¦q²PŽKwP:²i •¥t‘S£P}Ðä³k¦f OóJ’Ž5?¾VáµN£¿àîÇÄ|-Ŧý0úÇ¢Ô@É‘zCÑ‘BÐøL©ÆŠ)Ç9_ˆ˜YJÅ +ú¼pòœ‚1ƒPò„ÓM½)ÑÿÏ´Lµ{Ê»+Ä4Á_y[Ù’Ií±î9£ý!$Ì ?ÿt¯á2Ž=ØQfQqÊAšA,€%ùDšÀ[ëeõúæä“ññÖ\@!¸ ÷ä(d Î\ÞúàŠN„ÐÑfË{ÌD9QšŸžšØ2ç‡)¦5WÌÈûH§Õÿà¡Ü)«ÿô‹nN2tŠ+ ‹“-€~?ítœàaØÝîx½nVÜâ)T™y VШAýÿû*éûAÐ î{|ªÇlÞzÇ`¼Ø€þý>~þ¹{|`–—‹/]»öæÒtÅ5èþÓ};^ë„b=”ÔÀªò‘÷î*’8Pÿaª€°Ùï3ôÖþBfë,è/ÐÀHÄiú5ËgD#hã1Ñås²:ɰ"”ú1[V}H=7T‘Ì—iïRÌÎÕº'*éŒóš…&ÐZvJñF!Št~¸ÑX«õÂ@Ç–äø2d#Ò¢1”¥Ûê +Òxä0)!~t€]Ã(Zð½(ΰúÊ‚‡¥d¨ ’ uì1¬ÿ±ÝšIL›Ô¢DzX18éö5úƒ°öÇk,Óöäñ ñºÑ˜ à°jÖí2¼¥*»@t(LÀhSÅ"hº—t|ô™ÔœÃEL·3áŸ@#D•Æè4ƒpýÑy½IE©~Fv¹zÛàå½µnÌXa :>zuî|p§7·l›õúf¯ß˜s±¨¾¼Ôò‡Èøúäž ¢a§½€Íœ’ıA•ÃäPRü9Ç ÊÒÁ£67pP6Æ{¸f §OÄlÃô7=¯§c§ÖèÞ|·:Óxú¹sêz“4„ÝE0OóZUÞ5€&÷[OU™‚–Á$¥l™”‹L´y-ƒÀîŠÌÎa¬MÆb»\G†H°R–™ +bÓXKTIT›kÁñëÝ%º<`J`dÌ –#‰ ü³Óý ÊàáƒæS˃½Ôõ±¾J8Ö/âIbî!ú'±¤ÓJ±pÚ¨Ñ\ÝøÁÕ,>Ól7‡[wüMŽÃÝšSÃæ +ðøÒ ±ß ²þ(äÌðRÙqŠW¸öÃ^§s®ÑìI* §Šý†,WHüb%ž|ôX+ÄHƒm€4¢ùÇÀg’w˜Ëqø +’–H-çXµ Ú\‚ʰ=ÏïÉÝÂÒ3ó'ê;Û(–„“ìG¢â–Ûíö[ñ~´±už#„Í +Ûn#‚¡ŠB³m>JîÜ Ü†}ýÍ^> ñ¼’µ¾nÃrëöœëê ÔL ³œ"ŠƒÁ”Ìáhg}óžp¤ï…=þ0-Ë1M‰ª—ÿÂ*@PSæØRkÆsÆ]Œà 5 Ü/»ª¥N“Ð1)ÿ¤æÆsÜyxܘk:Ø€FdÛú1'ì.æ +#‹Ù0 ˆ5%^ˆa­jiî }¦Š&vÕ¦ê?ä·ðj؇‹9 $BE+q"j†l¿‹DëX˜J”Î&»÷{ âšÏ3dÍÌ(E&²´$äØÉH…Ø"I“D†a£±-Ë€¡| èíŠ ,ƒ4JQ›¥vßR ¤$?(æLˆÏžÝ˜˜|P);ÀIJÚƒ‰ iԪȴ©ûÞh´[* ¬0ädÙ²çsÌ4Èóá?øèkÎÕ;bzÉgb£ÓƒéJQg]CÀ K,r–JQ籑Ëe •õ<¸‘—~üÕ˯ÿtw¶4\ás"ù–HdÿKú„)6e!âÃgM‹æ f"иªûÍ…y>î­¹'Ћ³9óNs¦áÛ,E³˜ô™íaÓÇQ€Û`_Ä…3'záÐm< dÿ88ÛÕÄ ·ãFC4£ À—›ËÄ!Óq®¬¢bº²¸¹¹ÞwDÏÌQ ªô¿ûOþßp ²èÚM/I2€þ†JÊiGè“¶F#Ń&° ¬ôo&Á$ƒ­C °àÿš=fþÄâÂòéZc*çÁ2KtòíhS@°oî@ÒQ¤*-6%O:YJ%×¶iFœÓR³¥ò’› CFe×`‡ë[Çðæ×s.õaã­áCéYnc2Àp§×~öœÅ˜#,¡2‰j?#pÔÖÛ7V›'ø·(Û¢FÝÏQþû[ÃÜzö ÈŒþ‡·a +]~a)Ÿ.£0 0)Щ٘Û#Û¡Ýn÷\ç¢X Ç–öï íõÂBN3¥‡Yvs åÊÄ7gL»($ÿ¢Ë_ç¬;d[É”žè/ÐZBWFç¹&Œ³ú1Pá]fDP¯DÝ»]ñlröE4L@ÖÙcÅ~MU‡…ï`?fÍ;åúÚØdƒ£Ôÿç?ƒÕžù6@?lŸ¿ÔCÐý³ý$A§y©© ¾bz `{æS¥îäDÒ©m $¡7i—ê«mËÜ @ýïüèËÝwÞÜb V«a½$ó|ì;Œ†µ™¬²Uì8²ä3 ÿg]° HÈ2œï—z¯'‚‹.õ·ÀˆD„ÜøwŠU.tÔµcòøýÔš9üÓ·Þ“!¥Íõ"I†ï²AÁ ŸÆ €dRLªhXª¨œå»`ÎDÝ¿$ ä#UmÀð0@äå­^\"7æÉ¯Ó·´¡æÖ[ѨПDRy7ÝVëÄ"' †d¶¬ÞDˆß ¼¬Ûw°l%ŠxX¹‹Àæ«Å¯ëgX޲à“Ô0ÑÛVS×È +/PÉ-•5É®m„ €þÜ5ÅAr‰¶LÊÄG‚à±0;¡ÃR¿.…+8ã@çx ”j`d†a¨D8ô,·† e€ÛŠ¥{ ÅI«±¡IÑc¾sÓfÐÒ¸ÅDÃyùE…«ñÍ£F ã¸Ì2ÿ¿ãkòSNNâ­ZéûÚ&@¢ìM[¼vaáõ:xœ¡P^8ÊøÒ¿ +ëÇæLçbȲ‰‰bÍB ˱,Å¡«- ¤Y(F·@œ\’€ ÝŸ—z KºlEûÃV¸S½ Á½¨ý ÂRRX)ñF€€ìóòóî֔禊]>gôXtá³ã<Üýq<Ç,àƒÁ¹ûËða¨ü-:¨…IšÜŠF 2/ÂÈ4¦®¢ª#0uùÊÓT)·ê„£¸F+ÞÛ¥`)B@šÔæü$ŽÀFñ½Z3ÅJÆý<3.þ>¨ { I£Q§pÜ6yO.ö?ê†ußþÎx4ìœ;/['Â#*À‘ý#f*r0˜F£;¢ê¸Ç𑃥$ȰÅ6Úô<ÇaÔx²FMò<“¨æ6/|þuøïšp­M®ûÆL¤íÐoyñ>öÒƒËe/±˜2$n˜{0Nرæ/?ˆãƒ0v[ãd0ÔOÕe;Ç)‡¶xžä“” Ì›æåÈ®#Ë#ÐÛŸîËÊ,s³ßtjÙóÓ4dkóÎÖãX‚ ã9®ã¶|Ò «±æ„É*1Ä£Ýz×ÊXÆ>9«ð‹uŽ»5lÊ£,ä€iî´ý ý° 8æTQ‚úÍ¥1àJsŸs{A¬o­_ç*Ÿ¶ìp;÷¬Œî¦%ª€µ;«Ã2¯uu¼¹)Sœ»¢ ×@)λAë)© ÄqØVu0ãýaÃGGê0XŸ1‹*~£o .ØéZZ㛈Ša²aZ±Çª=á8;ñœì(p«òr“Þ”Tl@Ü­Ñ™LIéL…£»BÉžrÂE6NÇ:ÃGèÂöfë‚(¶ÓˆÉî¿"Z©s­ëHq)ÀÔ%e,À= Âú¾B)–ß³ïÈÌfLÔ¥LtÕ¢ç +ŽA4Sjî²í2ZkÑȰõüûø2sÔ\ûº¾‡q_¡¹_¬Þwf w_vp dD+`´Ë¨ÌRÿ¹aoãÊ÷ßj¥¼„îñÎÁZt Z3C#÷v„ïÊžÀYBB?õyÇ×/D2ÆYÜk½€åÏý&ëO›áÎÈZ< ~UøÎ0?­}ߺžo~>Ëv³s³ëU ÙÓ£÷6™ˆßÈù8ÅÚÎQŠ.3Ð|g,lv£–`7ŽöS—äG9€™å¥ô¸–¥ý å>áê¢'Ð|Ó÷¥­m“ä”o—Ê[2™°ˆ¥&Û¹Iú~”ù$É9[”KD)¹÷Ó1©0ˆþfÕŠ¨¹MBBׯãŸJ…мDaªsé2Ì›à>&öéâ€òâ ÕDÌBÅõZ+/_ê}„·Ÿ^æIÈÆ‡‰–9ˆ”ð&s¢`ÃNÛ©Éõý£®çÖ{«ó'0~ìô1i§«ßjšD\+ÑÝð b9 ¯IwmTï1hù¾Ó\Iˆeæl;K +í•¡ßž©EC ÙÜýŽg&kX¿ƒ¬2øZ9¥=™U‹èj“Qwéóן]¼÷!Üã7BÕlZ°b ÙœþXÅlRzYUž¡.Œ 3’æerã_Çä¯oy ÷%ô/ÿzð0ðûw>X»ó¯¾ÊŸ´¤èØzŽ3Þ›*ÅôÇBêùýI´·Ð/°dtmªÁˤ«xÞã)÷…²>~pè“£èï·NýçjÎKÈ¥'xpK|ìRF‡XnâÝB…bôo¶^,¾@AõQp÷³ Àâòe°Òö>¼¸''ôO%¿­ &阕¯‹E¸/Šƒ½Y,ìâÈÍ•‘%¦ée˜•aYˆF*0;D›R¢ùâ­9ùðA¹þ)Àýd÷pÝÌ¡~”5}-ú2¢Q  å¥l.ÈX‚náRyò‘B¬üÄå‹á ×þè÷ô'n‰ý~ñÔOÖýÛt#øöýõŸØ4ý9ƒ. ¥XG£Âpœ³žÁ«*UœFã!É€/‚ h4 åz®k# œÀ¡x@i‘o¶óÂôÇåˆFÍéùŒK„q\"-˜êPÆ¿uQLS4Ì¡ÿãtåqüØRÏVç‹ý®` ˆ‘«ÄéËÔËät~me2ÚzÄ”G;–Š6j‚¬¬TÆoQ›R…²Õ¾ÀèŸ1½DÉ|aõÿÐâ̺‡¨ßämb3˜ñc¡ÿÏ»è<"AèÿƯ|µŒþhËÒŠŽÍ9œ•«h=…B7ྒྷýýúB0ÚÒ5Òhý#©Ÿ…¶Iš:¦¡Ã|@Hl`>%A°p7þýÍÑâ²^jJ1€F€f=ÊØÚŽÐòÔ­FIA[IJìxc€ålì<’°v@ù®«wÊ%©K÷€›³¸US­F™àûÚßÇû g(³…NðÆŠ5†¯8±â`“ö—Q=²f3vü¶…ö ·–ݬ¯7Ÿ–{ ×K¯Œ†h1‚ó ‘ÎÕ¹°0lZýoA}ÖD{`Â-ËÑA‘H ‡Í4ñ.+&å8 +Ã,»e ËŹ†• [d1¶…áDåŸu¼šS5–;Ýï]sªbé̹Ú|«ÿ€hoaDOn?«‹rÛÏ­´«âæ·¯€õ€Á|Û± #,æ2±) ] &J4M÷©Î$®©>ocŠF®}ÿª×l…Û½þæzkÁÅœÁÄVŒOÌXù~¦ó>AÝϪ –n!ÿxâS’R2I‘3®æp<|tD/\8á§Ç_=úê0!àäv) ÛÁØ™U³×0›•«ƒ,<Àæ\"#Âÿ<3a Lõñ½îçÒ˜€ˆr–Oµý€!¬(0ÕÍÊÁPWsìÛkeûTt3!&˜œ{Ã!b»Z†=§‚öBH>Íf³²©Áa£á8æpÀ¬É@4æ—ÛŒ¢÷£¶{ãå^ÓÀgRÁ\¿{ÇÊUßÐ n?õ¬žÎB+ñq\v‚¸w>b™+z…ë,eßü÷ßjÓ{Q©äÔñq*Dý¤¥D@Vj._Fñr[Óø ôšÍ&Þ Ê<íº‘} ¶Q) ˆ»@»F4š†" [¿ýêå_ùë_ºõö7÷A™íÑ©° Ë0œÙ)HÐ|7,c¿û)¶ž±hF‹1e™F&ãùRïrA@±¸ÇϤ–|õc­F)·Ê”NwÜÖ½yáù«LD­î ˜&§Ïœ¿sãm˜‡`©Sz”`³UPhsü9úPùSM¹<¹¸Pÿé®/|þ‹ð87áÝÝY]½ûÎõú|;$ëÜkµç@柑1!Y×bRdÕm9~ÞFh‹o¿w3§w›í½Ó¼ñæÏæ1Úm Ò2r5¡­6žÈrT—þœ´Û‹ní¦;}|VK'j‹ËNmpN¸á$ö¬PhH¶"wïNÙž‹”ÚÉKɼ:º€¶zÂøÙnÌ7‡;÷„¸¼x¯ÛwqôV9U†yÖræ¥!^F¼èº0½>ÒyKJB|a.#8 +€Æ‰b QêØ¦ïZ1×Å©ïò_[‹ »](òtØltµÐå¾Á(æŒ~²ùzARÎëgÛúÔ@¸fÚ/Ái[`¸`¸ä….¾Æé’ŽQœn_®Yï|òeÁ}y©“íáƒRÈœ3°<Œºo}Ó]>׿×m©£¼—aÔ¨[\ÒŒú»aqLEPÛ>f¼GýÄ)å¶ ý ðjO´uh„ù®á¾`'Áœ6¤„û–ò{ZGZˆmmÇ 'Û]ˆ"©)X”/È _ÙOãýÄ™±µ}jQ½3æÇ2mEÒ +!!Ièm{Be¸¥\[˜‹<ïÜ»ãÉ]%Â^Cycž9®ê6›IFãz½«mû`NÁ²Æ +&*¾ŸÂÝÅS—4ý×þgyÎG¨[-ŸBˆ>,| Ý»ø¦ÙÛz?+ŸMágëäâúÂ{Ã/h•Ú4O`œ£‹õ +דîW%„(¿—„ ÔU7.åçYµR@ûhs¦¨ƒp¨ä˜€ïE Úkè… –#¤ij\ŽÉ2ÿÔYÌùaÑŸãH5ìü@¶ÐD ‘CÄÌkÒxóŽ“t»¸wWåó¸þY÷øáHÉÇ/€û_ü[vNÝx»¿y{í-IÊŸUÈ®åád:ºæ‹UØ©0/Ãý?e¹£­^ØúÊýûµÿþ—„ø¥éb@ð¶·Â‡Áò¥¸y ïúÌ"Í8+Rg_”ég^8Ï;ñîr°þ¢pç–ˆ»yN.¿É…uî1|2ºA,–ÍR*|§íˆÜûaos'†uqÞù %7WšaoWÜÞÁ7uf- Y  +{23@x DºøE|ã›k·ßŸísW»#½UÀ}ÎÆ‹š…:5‰sŽÊpÈíÃqÆqn_çQrK6ÃÕ¶ZÒž#Ý!5Ñú¶¹Aë~l;Žçúq21àLS,´Nv`Ó\.µjqΆ¢—10LB—üA dSÖsi’ƒúÿ¤+ Àó—à5çƒÄÄSgÎÞ½>Üó+oRtªÕ^ìïlÒå-öl¶ŸÆ)Úûhûä2Zù쥭Í{I²·øì)ù(^ÿÁFë$:¦Öð½„ÓÛè.ÑHظ‡;ƒ8ÈÛK˽õòç–°{›ëlUô¬7O.2%¸¿°l­óNãÌn4ÛÃQבò¡U0"Ç”Ÿ]«5‚ê˜0–z{Dk:ëõAýçÆsí§;0ªý[ËE4»ùÔ™Á}<­jmmqgF¼åLýD¤&wt‘¤Ó:BP'Ó3|»¶· CþÓ©ô¼“î‰?øîûúVwxyë÷¿u÷S/ñþ°D¨•oZd¥„–H/AÀªXå~æú¯Oúä(ËË¡퀪³~{M^3Í‹[«¨FÀë€ímŽcž=Ä(þ°âwwÎ$1Z£í› ØÐK9åZ`lïíâ9<çµµdÀ×B3€þ×þkOuúA ´D‹â¦ ʦ(7“)/£íÃ!–*⬪™r(¡^}9Ý?¦SŽª.-¾.épUŽDKfÔõ> +œYÛoº°?Jk–bL´†F¡þ]@ܾúí3/_–?Q5‘ø“²ø•*Š}X¬êTnç}¢NM¢;'çhšYŒ±4åûR%,ÕÎRY¯aApÕ1:‚d—% —4h_ut {í^|þ RKeÎ ,ÓyHëÌJ»(’g B7.1Ó-éõÉcÐÚæ‚°X}ëÈjÈØº —VñŽ,õuNÚ;)¬ÔüžœR’%òñ~ƽVú[­•V‹d€ãʾؓ¬Ìn(OËtð%þ攤 rÅcz¤F–Óg:wnKY ƒ„ÆInúåãÂöäS‹;ƒþ|³Õl¶@î0ú Ôˆ{‡N5ÓÞÝDU)ý‹ëdvIj#S÷ ðî÷®½øé‹‡£ïAL[ü/×-o=˜*ìè/öOþ)$‰OZýy‡¥0Ã=@ÿ¡#ùsüÓ¢üS“~´,ÊÇ3ú rþð–u@“t<‚b@(}ìFØvÏÇ»c÷XÓ=vØÏ.»[gAajLÛ‰<"†nüRr³pR·ÖØéËÈ€ ¯¾Áû Â^ôð6ذ )Ô9$§JoŸ9 €ÞB"jFç-å†-Üö®8Hñ¤û«DO€~•|ÎîGõýÿ_—[P›sn¿wÐÿÖÍ›§?‘ðO ÄeõŸ·ñ®š)Ö“[’rº‚p_ ÖáC|û«|kw=gO$(èèÕA%ìu[0ü©þ‡Cô5æ› ÏY°QÝéÔwÀ¨z³³LpÁ¤á‰¬r€E|Éi°:UÓ¯;â ÛÚîéxbG1[Cm®†©#L©™X 21ýktl.#ÌÅú—4o¢.ƒ÷ óíéÁO;Í–»¨–‚>‹À± fb¸2Û¬‚.ŒCGÌèÁH3~ѱ»IAe¦³9®cWm&¸>RE0ÙçU›3U’IÒˆ­Hê +À'q›ÍF«ãòäéÓ;÷Î9~÷6š¢~³í ¥KªjÆQÜ8Ö|ÿæÕÆ Ÿ°< +ïa_N1xÄ)»ÔÁc’؆mLÌq³ûÅ®V¸ýéââ¢= 'èÏrÎÞh°Õ“Œüu1Þkh_1èg‘Ãð#¢Ç1M̤4Ñ2‹z$ì„’¬áo»âSYd:3±ã;o;3ÒûäT#ÐúXÛµâ‰H÷0,Kd¢Å@4 3cåãäL:3a\çÙÿµ·‘ã¼óÄž®êª©ššnu«‡ÍiõˆT›4¹¤¸Ò’ÖËI+w•uìµaÜKçl€ À!‹;øÓ—÷)¸÷-@^ÙØI°ÉÞ:vt«•V\J2giÄ%M¹­G3lN«ŠÕSSÕU]Õù¿<ÏSÕ=C;RhkšÝÕUO=Ïÿõ÷ÿýû·öÉ3ç6ãY<~Ø&ƒCrf-bNe#?šÓÊgIÿ4ù¼I`­øÃáPb“2Á³!GÞr©¬¦>“§¸1àxÁœF[‰QAÍ)í¶Î¶{×ö†ï‚§qéòó°|Í.ðRဋ>Ö{(øzÏ tIͲ.\¼`pî"<šñøç5ÙSéÏTëíî¡?²ÝÞà2¸Œìæþ€­<y^#3)wML£%‘Å8ð’±ÁDªY67d‚ +”‚Έ&(÷ÙWî&jFЩv«V?s–³Æ9U=8¹õ©|0*:ÏŽ + +“cðÍ€Û««6˜>0!;ëDΠ׿íÁewÏ †?»é4"KŒše¯¬’¨ ®¶Å¼QË™ô;ÁÅ‘æ>K²&?µÑî]§õ•½_ÞûÆòOàE–šÎÝ?à ø|+ +üpo?: 9 åïí2;/a¡ £V«…ÈL&Hõ½ç˜«¤UEä6vÝ‘ª(ÏTÆ÷eü§&Ìj¢rx"KÄÒÆŸ‘5ð\Ê‚á +Ý ã–ÉþÉ*çÌ}ž•Øý"FÞÄè»wæÿ½õSïwº]ïÉÒÅooÈ8’é\ºòìß¿û¡leÕÒýO?–ã\ÑØQ­ ¯ DÜõîŽöî>â¡è¬äçû¶XçûÖèö®˜sVY¤d놔&9SßÙùÅNcEì|½õqëŸüÇ—Æ¢f=Æ%Î<$&åýjé"­MÏ(#>y{ìíÌÝ1e:NÃa i)7sŽ A^#Í­ç*»ÞPƉ«:è¡7YO5 +é3)]ƒ#I£2Ý&}=§î€б,<€)«Q¥aH¢eÙÇ9XT¼Ïv„›+æxˆniçé3 ¦û÷ZTÀ :%J°Á$ƒJÃGãͧ/‚íí÷tXÀ“À Bg–RÆ‚@úÃuNó0 ›´ØQ= IDATqÒoýT÷àá´# ¼:=”û+޳âøaÀI<¸Gp’°cÍBו V°•°iű4¦À‘ʾ3ŒúaÔ;ÕO4w•&¨9§Öš’QsˆÊ6§KELü«ÊyzO•å…çÓ­£ËAôà‡áó¸FþC@ðg¤ .P‡wŠ‡Ò¥z+V‰/š£;b©Ó]àûŲˌçßý úg|¹«ž«RÜÙTv‡æð¢à #k#8ĦNŽí²ôÄð‘'€ôÇ™F ª©‡•$ýíäÊ e<1ý’ò*’¤?¼™Å¥Ÿ‘fL1_6`àoj0á  S!…"sEG6]¾_)Ö©ªËu±O5ÕŒfˆìBšžðºäŠ+¢Aôv† ý½'ʘ8 ¨u(3)[@«%ÀAEÙ-ŽÊøýnÿ9>¸òÒy€@\é=Bmáxޱ~ +Dÿh8äÁéÏÚàjg*£i&d½§AŒ¿ø+–•.†h@úÃkv\~hk~ùæÉàdgU<|\å3Ǩåè™Îó_*k’øo©°‡ÆxÄŒÂ#ñ!zäZ¬5»Ü wð›5ºð,†Î@ €ô¿úÛ_åÏŒ>‘ÉñƒN úùÏî©î)™vzû­ë÷vñ0óÆÝ q¡5¹Ø +Ÿ_Ç pë@Îÿ•u:¶ŒÉ£X-Tøã ÄñäGÑÆL¤¬óß3Ÿr.% ª 7dÈ5[CÑÏìüÌåâÔm?Å |8W= Æû;åÕ‚hãö7¯¿y­ Q¼^ç3ÉÒÐv½„ÞŒÑEø ++ž¼–³LA¿OÈŽ1ò‘hö¥Dq0pÀ$Å.»{¸œÕƒŽ&§åÕŽ?Ýóÿê+ߤ¢„5‡¬õÃf“*{ŸÜ»öå¯ê³Ù,[éR™/¹aãÒöæFc +[Š«˜+kO,D´A€ôWô™¾G˜“ð”xtmÛÓ öl»‚ÄÚå*Ó†: Ùß²‚N×÷a÷G5nÜØ î\Ó('K^® +ÎOBV€àRjLy'‡z±²ÐwÖ6@ T? ÒgHA^·‚ˆ22:H]7Í 3Wé÷ zX*rܺýŽ_†<¿'Y‘[ëml2Ctr…­Að”à}ùŽål´zûÁ‹þÂÊ ¬:±Ó ®aÐ ÷áesëÍ,cPÈK‡.Tªz0”QÁB‰RÌÍí4“ükÚ»²+½-«ù$:é0e’Ȩ¡&Ò: S,[¦eÊÎé  æs&žJ§‰îÏlÕm7·T¾*ý—6¼øšÅ¹ù[dûãQ,¥?h‚nÿù¥/‚ôß~Ü-ž*j?©$õô—WÂååiºÔWÆ:H…bm¶4KªZ Ís)Ê Fêr ‚-òFÈM&Š…8Æ·T]Œ´ç‹j€¥?G“ +ùŽT=KÌt…ÖºÄbáÛÎÙçÀuÚß¡l_mƒÖÅ+8ªOK roçÞåg¿Í¢ýÔåƒÝ·õI’,I%¨¯½„“ùÞnŠj@…Ëþô—ýv}ŸuÀs§ˆ)ýœØùÿ VĽO¤H¬3·N‚ *àr‘Lòw‚ØJæàè[Ì«! yÏYÁØMæAl×¼˜¦è°§@ ¸æ4EoKzÁš}L¡eªšÿêztRÑ2­\eÁ0¯M±{Š0ÛjàsR×ß…³qˆ»¡Â˜$+f>Ž Ñj€5ˆ~Pƒ ת|úMЍÞÿôN3ìôΖˆæjN´iFih]ê1ž$'5Là*²v<ØÛ‡qIˆßÒÒ?WUú•ÊK“¦Q¥ÏM¹)FåpãÔ¥²·I”¡´EÙ”±ÐìóØJ,Kª·”Ú§,µíê—.Ê+?Ýé¿ô‹ ú¹=(€¨‚m×…i ¢£LSÜ€6â&?È\½b*BÁ/ÙÐÈ'¸4º›/¿Ó$Š´ù¯U>þ©ÎÓü)§­ÌTƒ 4kìAfˆ[¸#´úIô‹ +‘K^YTÈàã*04©Ì-ý…"Uf'Àä Á +d›ÌYªÎfeêÂpöL3±¸q—=þrFÍAô{Í68¹)mØ›+ ô/á£GåMµ×{£ £Â´<`p_Ct•¨\Ë[,9Þ~ïÃHÂS®ýîW?zÿ]ý_`þ{ð’·ÖÔ:€ÍVc: +$ˆ: õ­-r¸¸²˜¥scAIhi‹ dzmÑ0¯¡w†ïkp¢2¨@?—JÀDU%pO`ˆéRäO¨ña „õÆ"þõ„ä“6P`w2ÿÁXoÉe»õW?¼|ù+w>ü~§{éâ³ß6lzpä4Åýn·7•™³ó}^V¸«ßJóö½ÙÞ™'¥ú£¯~Y>²z2KŠZ µ=‹‹Ö yßh>dþdbËu©™¢åE‘$½ì®æªO x´¬ÕSJ=·ž$]q + , £”v1L8ìºÖN&¾ÿpÜ>]â‚CYšÏ\Z„å¢/&`…2Ñ[:KòXñ:ÃÈ­'L¬-‡C-#ñ@âýʺ£«øÆþÝÆÔmd¹AfÀŒƒ%ZÔr~4Ç”8áþg{áÁAç©3¶ã¥‡QþDù°¸•‹ ðša…ÛÎåW¾þÑ¿û±*Ô¥aÔ ˜ê0t†ááœ/y4õ0ùŠE½BSbY *Ü4?ýÔ:¦+×^ؾñNøTßk•ãS€&âF‹cÌÃií:¶‡díÂ’Á àøÓ1;27‘mœVZâ]u/)"?µÍVÓ +B$Çp_ þV-Âx‹Ÿa‚t_Èä€Âºfä™Äp XTh£AE{s¹L›žC+6ü ±ÚÈR¹$Zm{P§xs“GÑj£iSù/hJÔBØ ÙFÈ×dÔE€ŒX! º92qÐÃ^Et„Ø­õ‹–±—¨ +aT0ª¡‡`ƒ…™D½¦N<â0ÕÝЇr¸¨¼œšíÄ ¢Xm׬) t3O + âÛ¦ãe3¬GÐÑEY„3&!nX’úMxŸE¼9“[ Ð7µí¯Å=n£ÿéßð‡Ì¨¡Ï{¾’ß‘Â+fܰ1D6(Œ(2£äRHÀP#´ÁÈ‘¦¥ô2seM÷¢Cä-iC–´–¿òàq~ÿ2BI} ³žV…ÅÇøQVÈ(µ€ÿ¢žÕ_˜®í€Ùr8 +5Ô龌EðÿünÎÃp?êοxëO…ñ|óô {{ ×ùRš)Ðí®‰(Áû5NQ0JÁäYF!õ-X—*÷e/ÜzpO°{0 ~ºßÜèa~‡&`@ÙÏéŸ`KEêdV·[k­ÝL=þI½g]×aþð~·½wà¾ÊIŸÁ€]Ìï¥vV°‘(OP½1ÒȨgî +<÷<‰¹á X‡XQœ¦\h 5u·µ»›IÚ9t½¦£(Õ°T\&è.íbž·æJ…’š®S¾Ú…‘ÇT­n¾ˆžÎCRÀÊg¥YAu'6£P+ç‰%ãì6/ ÷ð¨#cGÄë7Ë L~Z„.S±K²W2£”lŒ±(rPÏÕ]'eQ³œ\ÂùÑ‚Ï ¢?d‘\„æÒ ÝÒÛÝçHô/lÈ GÄ·Ã}û¹òÑýƒQgÅJª*¼øëK[~Ì6‡õŒMpT·jÚ³‹P£FmVMÊpX¨øô±U_Ý7àW³LƒñFBÍÍW9õ1ïÅ‚¦øÓ3Åêºå0FF 5‘*{Õ\i nä-™»Í2­uöÙèž¼fļÀLĹ5ˆ>h…¡×F1yø~8Â3tOŸƒ—@v“gË™S—½þx+Š6Å‚] ûâZ*¤qô¿N±/y»½¡ÁX>ñô¶)@É`ˈ6‹Û²$ÇIÑé(PóÉNòYé¼p^½1îS(çp¿‰5…þ_Q‰GsA$BµB0yÃiDGîy\yŒšgh¦ŽB‚ô÷<:sNä³Ô¦å:ü)æa@ |ô—мCE@§ç3ª,£Ö’v8’žWc‘0NÓWÀ ¥e×4ÿù¸]œ$Ò0e%sJâtÀ•—_{óòÓ·þì¹/½zÚ˜‘¬¥*Ë'°yðÈ<ê_íî¢ñ¾|ýqH¦·ÁüéºÜœ{ìŽPh…” +t`»1XÀA¦X.Çô@e|Àõ,§ÉÓø*Ðö‡ÿÝù1™ÌŒocéÏ‚B ±Ï Ñ à€€³–Õ ©ciÁ'€YEIUÙ±¼¨Þ.\¾2z€ZÙeಠ+>8kM]H…ìÿ•EË(iP±° á…à1°H*”ˆñ‹À¼gÀrŸXÏè3 ËÆnmÆÔ"ú ³§P äj*X‡X –iư1¡ì\–è« ³WÊÊ2øXsÕÿ6ÐN{=# ò|Õk•Œ{š9uÃBb¤?ªº*0àÚ¯½q°¿çå6‹žT¡à~(´ånPk?×µf`éaÉɧ6¿ô—„„èwd৪_ŽÙŸ*ˆOEE©B,Ö^.íXYŸÕR‘ÿD)L²ËϘV5Lʭǵ½¯~E_¿ÔBÁRäèþQ|Ãþâ³/|¼0¡Á•˃gÈóyKeΟ»/È bãÔ‹ðˆbÿ+~gôà^p|ý›ßÚ£úÖ:S€ÉsÌ +6ÿa¡Ð€€)ûðhbS#]!iˆÓ5KÚ$2ø«Áç˜ôq†Ÿ;f—qg;î‹[­ÉäÙuä1qpTÇ!æKPhÔÓEÚòRÙÚE1g!b]: ²YÉ»jðlpG…€=ªœ’WEª…S²UZóX‘W@½‹9ë}äaæ;ÜÞzÿr÷[ àÕ\Tñâüà`=(Phºù âÙÍØ òñà¬îÞúàÿå?}þw¾jÀz•žÚb&T•°Y1°gP饌9þdèW÷ü¡/F.‹%ÓB(;Чµçº ÿ˜NnôùH›Ûªë޼~˜¸-êçÌíeñGÊ1γæ‹e€í Ž(Âo’paÄ$ÈýK°àˆyî@|€hµ‚TÉ„6.2ÿ©õݶ¹“—?ºß\ö÷îƒè}‘jÙà™KÃ_bnm°9‡œ˜Ùýä^pqâ€&èõÏøÔ ÷ô`x?¹1£‘ã6AúçÊ·eÑ–Ñ$b#‘g—ÖŒV€.)ˆ©ØXLùZ¢Óì”ÂàÔ%VÕÀ”-\j/£’ɬ˜AôKŽ6l‚T0·•ÿpªK§C"¢•µ½eµaÚNF싱þGD?««†Ò_ èëêhg‡ik‡»}æ¼”M ÕÐþ =KÕuZYŒÜ‹©ŠqUû8¡t4ŒT·v!GœÓlžc±ô—ਿ§”3,K«”V¼ ´ÊèV›ˆU’g¦¹  ©šœU=„—±XÀh/RŠ•L_ŠSWƒ@×]Ä—êEIæPÂÑæN°mm,° €peG ·?ºôÜ5d jJ/ÖÖ³å1ô!LnÛ_9ŸÞÞSìuXÕ `kÿ °kY{¦ ªÏÀÒ:²¿ +xŸ«Õ“8Ί ŒO2 lÛ¤#â²á¢F;‰“„u /[JÑ ;uÀ4ɦ±×lFFðfëTÏ[m† Ì£4#BÑ~'¯ÿ(ÁàÔ"_[rxg Š|£V30›¢¦”?£ƒØeÖH°ÄA·¹ˆR5,u Ìw •ñ,Á˜’í ëG¡Ã49´Wš/‚[ÝûB«÷šÖuq°ÿ‹‹_zy ÃW˜YJÕIöƒ;¥›fWVáaÒ&&Ö8FÒséÿÌE³ƒ]||rüƒnP#° (!gööö÷o>|SëÅó¿õrçéç5í¹¸ýþ›·ß_ÿGXn3~€ÿ›‘¨Í‹š¨ÜËÉœã¬à XHžg²$B‘–]óT ¨8Á­÷0!ÑÀ»‹w“T´ê~¢k|b ¬ûDOf˜ î$ÉM#±<¯€#Û+ ;I²„* +&G,ý½Ü˜·\'",5Ì ä^Ê ñþ›¬86 uŒ cUAA¾Ú4aQ˜40¨«„aï9§åh§ +ÐBÓÌI’Ïo'–Ù>}ž«¨s0Òêþü#¦g8Eé8[e®r‹x~´^žÁßúkõôõÝaLBp8ÄYêN#)i­÷R-ƒfq:‹C.©«»ÚȰj9ãý‘ —@½NØkÕùеÞ=$ÁJü$Y í„D¦šsE9wޛȕ:+{s§¥e[éQhQM~nÉJø½¥Ä4š‚ºh8Â":ô£ ܆Ï@‘›ø¶ã°Ôl>y©sö QnijôycíSΚÌQ®ã°ÜÜJ&"öaõ7úY‚mœ%4.… Ò̧© ÷r™+¸S¤¥ÖÒZLsñö5lßåß +FŽãÇi:(sŠ$Öš¡±WUMUé`›2‘Ži0FR‰c[OHŸ§óKÌ!úabš5Ë&ÑjH7Õ‘R"Ï0I…±ò,¯¡7†\2uâ’1)ÿGeuXœ–›ºæ?;=|¥úr2 C¯Ûæš[ÌðÊѽ›•­pó•~ðÞß~ûÐuz›*S½öÊ«Çï¶ZêBL3ÂÈ@›ë*`ßÚ¸–Ö°â=òïã$Êf½Ä Qñø`$Ìs!Òü}j¦’˜í33û ,r0¢¹ F«>€Ü¾nÔ1…KíÀÙþE…£˜ UveàÛ’ŠÏÀ÷³26fr¶)c¨Ä)Òк}ýÍþ…+0Ü(ú¿$îüäÆÙg¯êÏðÁ˜z˜+VF6Ñ*€QŒë:ùl9ÑÔîâÃK&—ûÆ ¥¿üïºhêrpÌÁ6øá( +Aôo½óæŸýÉ÷à îâîÇ%mªÚ!¸N"Ц¨ï ¤4LÐ=Æ•í­õA€ÇÝR©Âdž*bÍI‘"8u‰ÈkË„6Pu±­Ùc,«â…`°'ò„¢Á!BÓ$‘ÈNþJ©¹œÏsžpûÙ€R)Kר)ê?Øn–įü¾„áv»e)¯m­èãÑÃ’zvV¡†ve5C¡^R‰ë¸èZ% zx„l¶¤û›É=±gçyÞ$´Rå·m”taÖ˦óxÃv™@(*Ê ®p@¡j'Ä9˜<9¨5t ˆPýD€P +öw¿qe)Ž—W§Ê¨Ý‹hL¼e‘÷$. ØË8e«‚„us³ÛeÀqFðÚj€E-WÐðóèy¡ùâèÆÎ2éd)ÌN¦ŽÙ½{Ô@£³¥Ý6CYRŽÛ€€×šr²à'`P@ôà üþu-5Öùa¶ýÁy—KÁ"Œüqzƒ˜ÔgG1B2C,û+ŒøÆv·®¿/ìà˜Þ ]Z¼Þ;ÛyêÌ»ŸýO°OIäå +®Ç—²Ž„ìÄm~xC@Ï|õJ§×«vtÒjñ»;믽±±3Ð?{ñå¯~“u¸eWŠ + sk0sAÃp˦ð—%óêø©/Dç)äõ› ªðV^Ƭ‰5û&Gl@:ØXh]Spgy¬í2­VÓ£~2Â:SÉmÙ^ŒAÕ†Ç=mÀ`®!Mg¤âö˜5ðÑvYp°¿WòåV·xVMt—ï/ÆÕQY"SÐoÝøøÃ›Û7¥Ã…¡>°VA—Ù|¿B…€PõÎKa·R/¼,}ÂÈ@˜ ð@즱«êoiZ*ÍPÅ9"fxËm‡ó˜Mç'ÈQ&b¡=ý àÅO´HbÈKÿ|)C–ˆO£´šfÑo5ڙ⬃àòo]{pÿ“0ÁkâºOt'sÅæªøÑš”Ϋž?U$ºQ³ÞØÀŸKbËqÛ=yÉ­†ŠµÅàaWÂ’r(_`ý¤q6+j ú]–þ¢ÖçØe/˜G útæÔ’$)®¡ÅÖbrC:Ý[ØÄ–`‚øüޤ+ + Mž¥3«^¶†NE +ŠG«Ëat@.}& Õ€V6 ¢p<¼½=øÛ+ ·Ye ¸ñŸº†ã[½Jƒ,_yù¹¦ç€—KV0ˆªV»=˜¦_èú@„ÁeÉÑ‘eËtB*ÿ7&¹·ê±ôG‡AÕUÛ+ ËkBEƒÍNG³>Qü!¥¸ôÖ”€Tö†Ô[pÀWÂH!xÌU€óØ!°P€ôÇVb¶”þXÅ®Ü,SŒ:Ø5Ó™Œ«°¿ŽG`þÃ~½·9V±30ÛAdsèÎOÞîìÉAÇdÝŠ/8àø‘… =ôïlÉ¢>1“ApœÕ¦¤eö@íŒÀwö¼FM`ß;3{ñÚ[ñæ +Ðð±Ý_ÞedÓ €`‡ã—¬á8;²ârwbPo»ß?æ"æ€ÜóŸ_VâkŠn ™Z–¤Ký™z‰.,[3t‚ùß"¤(ƨ(Ê¢i »#èÄ zjF dPI_øŠƒDêYµ¹P†¿ŒYöàãGÿöÏôo +<€¯ÿýo‹ÿÿ6Ð/¾‚#:`ûæû7¯ß`'€·8MýI$I¹Ñ»L«eç0ª¼dÁp0Þ"0cIùý€¬býqËF—:h]1çµf©ÆMp`Ö–Cv%Y­7¶ýyÓˆ~xé÷Aô‡’Šý”.Äš­ÖGsÓ&Jç&YîÚkd,Á¼RÇÃN€e9 lÛMӏпrœFRAÁ‚ô·Áˆ67YÛá-×¥nC'–ð±†ØT‘Ç1’âó_(ÙUýº qU©ÞãÙuy*°ÄE!YòL£<«\¨!@ĽdlþÓûæ¢Âé/‡W¥l•mN(¦Ä€®ìãÛÇšÚƒ€WopióÌÆÓgA €ù¯G“kJŽßK;ͲuIÅüO³4o¬¶üdfÞ\k°#%‡É,6Q÷˜\ßk®Vv—]mÀ¤Çô)Êà(>”ó¸Õ¦âÕ0³WŒ+b`è-;™ÁÁž·æEÆç¯½Ø +ÆQ0†‘l7ð( +„ J‚£–|È4‚äË\ƒˆfcFÓ£Ì#çlj ¾6³lÖ5…q–Öæ¹k)j³yÞ¤.˜&­Ë€ ChRbMg Ø/æªv›ëÝ۷ƒñÕ¯¼Ñü¤;útgtžJ»×$õúY¤y*jæésWD&»pŽwwî¨~¼|%¼uN÷ºg_t]´†`=$½ «Éøàª)ª ëõ?Leg­åà“®U]øFΊûÞSƒÞ?úOoüøOÿä¿þßúÇßÓ7“ [Çyïx¬¶ËÕ|²e{½;[[ãýëIæ÷Ÿ½ØÚèÂÈ™õb“!z ÊPÒªò9(yÍ\¹•¯É6ø0! òN)zÊóc_9F6‡±‘-(]lànÆQÎYÄUÄÔ#Ûà”ä}{ {j~ޱ ›ÖÎØ‘…¹EµßF®Ý‚¥p“£½Vÿep{Ã0i·Z\¿áïïßxç/Ï_¹rþÙ+ƒÍJeõ‚Õ_é;“kŒÀøN9·-Y ³+°òöʵ×àõòïl´õþmb‚¼½-邃×nomësö”Û§ÅÏŒ¶Úg*Ç3ëy‘g.bœXY²NuKj,ÅÕ“a'Qz[7cÉ$+æ¨8œ'ñ“‚8Ç6¶‹gû)–q!ð[×Ú£ÝaúÝþà(:â¶É‰a¶û¯& ÑÌÚ§îL)é†l|`GRÀò&+2ØßóžŽË{Oà:Möwà“4)’ÈlxIŽñ"ÄhÂ"Âd¤F\>RŽÏ£d6Çž¬5ǬÀtÒ<1,ô¦IŒQÆÕ(ØsÖÚ¹e˜ +âˆ'©a‚cÊÂÄ~‹Eà IDATªrxfÝ-c@:zv<\“Ι#ÒAzû©ß^k‹YbÔ]¤_L’<‘ÚQªuL€²Ù!í0ëq`+d€ï¢mÖ|1EêÑ®§÷sÌ—`Ï>ð9¨FÞ‘ÍøìzbK-ÏXùpÈY’g\b"í£­ë{Ÿ~ܺ×m¯w7Ÿ¹t拊nˆ$=[­j¾Äù( ÷dGIÆv¨bJÏòXeqÆNSo +Ä`Ô3 +Ũºkô1©¬LÂ1Iôã(L ]°DÈ3Þé?¸újD8¼dš8+àØ t?9Æñžã9¼OT&%†FÔf²K"Ý ;}Œ·µ‰¦†Q–Òãø¶YqŒ@ô7N­÷/a¢bDý~¯¼òZ@ƒAµºgÎvîÑëvW(~J!ëõz¿ßé`|y¬Ú ÄqÄ žËõ(fè‘®·…Ëöxð)‰X³IßûtØ{zðòï}t¼¾üÿxWQÔÂè%‹¡¶î·Þ~“È—0µù…×úg/î~rB'B÷_âûQË×{³ŸĘäë‚é –Óãù¡éä«Nó›ö‚™i¨ +Æ#†J󪵂l”°\/ŸꪰBP9;‹s©ºÜ¿÷á6¼àøÅ—_¾òÂËWŽQ„V7Iƒ“Ȱ§¼`¦r«¬jø¯=ÆKW_€€€Çqó¯ßÞºþ¼ªì•ᣠùD+|Toخ̳ÌóöúÃ)L †S3WZ5Î#î(c¦,%‚ÁŽÆ¦¸`V+~ A`²Ob#TÎcl;ì£ð„ÇÓT`_ål@úg²ï8bd_RB­u¢‚WS£‹üÒ¸(ÂÏ1ÔêR7D‰;`gH¥¹Ô#Ca‰ÕÕ¬Äßýƒ}ðQlElÞÍãOµ,Õ^a$–­Lö@5êü$yj‚%oSÍàÿÎ1¤á ¯ +Ç ìéy kdù£í©þÕKâÿ!ÎJBÊ}‚½ê0;sK×Ãh|—rrà(0-¦¼©Z•šeap9< otæÞ¥³ç/k5À›TŠjû‰L‚²©ÊÆUÁ5˯½Ðµ'õÒÙA•>ãÒ°ÒÕåˆ3hPJb‡âw¼Oë´Ÿe튪7–þÌxÓn¶@„ÅGEKNk4Iâs‡a£Ð7 Ǫ³ 7æÌ˜&¹€8`Åú@(Ô¶ ¥¦¡®–—pÞ;›ý®¢nÝÛ¿;ÀAý”ßí| J®Û?{å¥×áÏVOZãÝûãJ'îÔÁÇL\AãŸÏó¼ZÙä¨Â`Û°è5PåÞÙýÅÝþ.€øÁÿð¯oüŸßß¼p¹òŒ¥èù×ö;oÂÄ3ˆ~N3DBþK:—å¡à5_˹UÂ|YÔòÿz¶4ÿY€ôçʳLq‘Ÿ9×dY:º/£ Z`¿ßiÊh°.”M¶:f²8BЂe3…PÒ™"!h£Ç‹~AÔZãýÝóª)ÇöOnÀ @\yñ•+Ï-gÌD¥ðÇÂIBK§ôØø¨"œÙö¤ 66ûW_ymëï¼j êÒ“Ðo4ÛìÕÁÞu\SU´¢ éÉ<ZCJ™7MŸ +M%ý‘ä¼ns¡_J¡HseUÐAïÁ23Å;’fS9Qïê¦×lGV4 Â0ì÷ûbq &KØÛkMýA€%p%ôÓL¤Á< °x +’YÍ'»ðʦ!småFnQÚ9šŒÀ–G…—–8äþ %Е-…™P[ àð +Èð_ÍÁ „d„–Ç$(ÍúÉï¥,ºÖ +ø׸ÌRDdêkH°5žNªW7YÇ@:`IúKQ®T¸üQ.‹We•¢’J´2Q•Þb0ízÝ®+!Ì.¹#*Üz\p]íÎÏoà Ô@ó‰õþÙþæYê&=ÍØüMPg*DfJÐÍuKnŸ,ÊÀv&?€d‚‘ŸÂ,–î¨ÌR”åÑq[ÚØŠéôúã=Œ§ÃþùßŬ]¤Êp@r±ðr]Ç÷NAç•$³®“¿Î b0ÍE¢¿M×h +ó_rœi‚9eø§ÇC‡êF +ÇæÅ¸I‹ …iغÀU‡€’†Uó¤?ÖßíÉDèPTù­*¡4 Ë‘ÛV#³ÐÜó?¤À‹Hݯ"›FÚHI¸Ø À¢èY*sàœ„[Ù¨B²£Èô"=z)6\\+.Æèü<_Z5BÅ6ôŸ´#íwew3b䢃֛‡g¹N>—Ý“•”'T~ X2e€HŸ_¦ +8m  +5Ê?é<ªþz–Îêv]ß‹P™=³Ô,$¸Õ€2éIHºPЭSƒûŸÜß=» j`ýô&¶ûžD+­:|ê{‘øÁ˜KLn>/òŸ Ì„¦!œÐdô§F§¤YêÖH7ÊË¢‰ Ò9îmÆèÂÙâ a5®½„ Byc°h&ƻΚ¯æ©Îî­›áçÁ¥¯Â1‹³°¢AN'òïRm*•lðb1«ê˜ÖÜóCÿ›ƒj:uV ÐS2rU§,1óš{ƒvCrjŠ9ê-ËÀ(QJñªõµ+¼uà,–cÚÎùk×,B KìþrçÒ+o„ãÑd<‚ýÆÀM¼` R Ü7j٘ʔ8Õ3çibS bpœÀ‰Ÿ…&ÖÞÞZsÑD‰¹²ž^ž#ßR£¨)ÍÁgòDÔå”ÊjT_ ×E££þ™ ·œ·oüøûoüXà8îö;o³cÞî .´(P Âk´ãiœ…ãxI!⢖GÁH Q°§1 žÎ.Ò„k=Q.Bw ^ø¿÷>¥…Á(©¬™d&Aƒ~àßÞØðZ˜ÒÝì÷Î“Ž‘í™g¾¨Bäõ’ ÓÔ.v†œ9LЉhbz,á}¦–qLO?«9ˆ€. íï¶HôsŽš§¨ƒ3štÏ]Â&eq4™Do¿ùã[\?÷Å —_¸véKWq!8|/˜ù&‰P ’­u™b%A¼Q¬•c¥ÌÏðëßúÎ+o|m8¼óÖÿöƒm*>ˆr†Õ@m­´çÕJ½$5ÀýRjá8Oç–¨›3Ó*æ2Q#¾*ר¾L6ç¥xKR–Ákæ3 aƒÔ>?@Š:BõAÙÍ&_7–|^t0L>!›“ÁÇ"d'9Ü3©vMÚ<—ĤÁé±Kp2Xí°ZOv©(É%Ó°iaÔÜ!ÈØ½®ÄAW,M‡éŽ«a•,3íÀ +õÒyÓÅ©;Îé3YasJâ÷B¾[ 9Z²ÿ—rá€HU€|éÔ#Áäø?ËÆš)y¥ bâš›ü-›š kyMÍ rmãÅ:/pÁÏ2.(£: …‹›/GüÅ®“>"•“)ëª64ª­ÂσÿAP4C›Ø¥HJƒšü0þ£ë S¾Ïg¨ÜÑ£1Oô#wÿãàþÇÛ›gÎô7¿p!8Ld?.©×EŒ‚¢r%7!52DÞ48PDHö k°+d~B)(ƶk|‹àòÎ8fªBýf³Õ™ãF» ¢_žLK—×m*áCŠn aP1ëÝLWÃGÂ.'¡î0âý‰GÓ(Ê SRGˆÇä;UöÌì:\í)hÙëüiy%‚¥fúãHÿÞÓ '8…ËÇ,úaÄÊ·&¸†ñ0³H[kílf1ÉHÉÁ`NÓ\aöñÒ€ÐU‡¢R—gÚRdÓŪ#‚w0:k©;éÒÆ¶¿Ê„™eºN³ò× +Šˆ©¡óLa‡Xh+Žhx”d×sn–©Ì@xbAaª†ä a”ê¦ +ë<ž +N©bƒKørª,Wm¿Jx«Šñ1Œ¿.DÐÒS–±„"eO‚{´¸ì 0V +ò’âØjàÉw‡þE€ÙŽRdâµ´>€G让ŠjÉÔ(/E|bõ,˜¢&BéÏ¢›âÂÌ— +€7‡‹è‡®ßœ¨ ÿîÇCþýs¡l[í‚¥Ä@Gèr,œFÌ7-jÝ_LÕ¡F¢.ë€2£¨q¡D€?Ɖ圱ß;üK[·2‹,±¼›ÿ3cjÕ ÒB“žå>o^Ó‹¨zÂZ±’¬ tñJòœ€Då 0 ¦¤?ɼ†-¬jAÒd¤ÀsÐÈHéÅÌÆŠLk©×òO˜Kv>‚è×Ewspæ‹—9þs|k7ÛÜU¹¸Îsz»?¿3R^í;ý3”óØÿpŒ¦ñ½;ü_%"«õ|tuÃ?–aã¿vÛý¿ÒZsF»¨ºý‰IµfËl´ŒâРI<Íe?> Ö˜%Ø•žÍØÇÕ!bëqÅ­÷ß…×ÿ·âÕ׿:àÜå‹°O‚Ä÷}Ý*d bȱ´H‘öË´¢ yŒ-SWz{áï~^ÀïÝúë·¶®¿Ãj@ãÍÓ$Ö¤.4iSÍ'mµéƲ ®¤ ²4ÇœN&‹¥ø5¦ÖJÑÆæHx6íT5¥®`/f1gôéõrüNÁÁ&6Tmæ?UŸ0)…ô ,ò¦Þ ÊÎsY'Á! GC»Õß›ÔËKªÖyÉæÈ[#îhUhàà‹’š¿Âº¡ÀOZ ŸIÀ[¨Ž}é¦`þäs޼«kЙg ì1Œ%eP†øçfÅ8nJ¨pe°Ü7ˆÞòÃvÉ!"ˬº +T ä×ß»?4WœÞ/yóCÝ#™†æŠ ó&‰ ³ižÞÜܽ}·ÿÌ+s¢il¬âÕÁ|gq‘.qãÉ‘€±t’Tm +Þš­–,¹*þÓtÅ®¤ô€ÍÐÄ¢ óÁ +±V0ðEElŒ5Í›Oެå¸ ;>ô‰cÝårgç§ÈÆ×}jÐj¼;ôìž{9Á’®nr"l\4{r©‹yŽˆ®5aÞH_Ÿí“q$4™"\k>ë®#0ûd&ÓËj8à>­L†Rˆ)ö¨ +)n•&à¢y„ŒŽÂ±Ègµ 2ý̹߼÷þuP¥?HÙ‚Yš-rÑÆöìKT’OùyöLÿìÙ«çñþ_[{÷ƒ$‘&A²èZÓ`9Ží:V ´cÍ '©ëbá~†„bvåsÉ¥9[!H„)c¿êÚÃP` m%„¢žz®=ö‘”ƒŽëµ:]·ÎŠ“bmŒø¯mØn#‰ýX‚³9IFŒbW%A² +d"¡qhŸêogEosÀïöÖ»ðjv:ý ¯þÖÕk/ÉÐï—ÞO6KlÌJ‘‡^'›n†˜ÞÔM!Á Å +¼òû÷¶é׳s_<ÿÂßEíÍÿãûÃ;·ÿìO€Ú…SÄÊ×a~ (æBQÙÒYÌÖ …ÕG7nÔL‰gUmœ3T;_Ϧ1µZkÂÃqOõ$Ù½iíéÒ0Ì&!§Ô1Û†Æb‘=ntƒ¥Os>Ò=Õ ÇC/mo×]õ’Y‚]ç½fðp$ˆb }¥ùÓwÄ;ͤI\$ˆ¼˜h0Iä܈‰àÝ8JÝSDÈ1+02K¢ pá‰`âÎÀ1R‚3øq.7åâ$- wÙ5Äw–¼d (—Ùäš¼`™ƒÃŸÅ ±*6ÖÌb"‡ <[H¹økÖI¹ +䉥(¯ÁãÃO昣¨|`ÅJ#œr6üºV;s¼j$¢¨s"\ت>6¶ô ðÞ]&øQ'Äøy*—ðøó=€@U3ú}Çs’ˆ=¾²ðJ(éÏïÈÌ!ÿ¯Ò*É¡4' `&;‰KÞcXrÔÆ (rVqVä*‚6rW]ØÃËkµmŠK +Š‘±€wRe¹# SAwÁ>Jq)Êi³¥ÿÂ%)µÄåÙS PÇÔÀ‰dZ[ñh—°}º?Ä+ßmÞ„ü o¶NuÕ¦<\H~Y¤º£7NáN³ÌkÈá~œr–ì0…²•ôªÆ­òXô-ø®¶‰9/;D#ÊRŠíCïuŸ9ûñg÷5Á;+w®¿=c³ÂhèR­ÙíõŸ½šS¬>ª%¸w—BkË–>—Î;¤@ú;ÊQc£’Å·’>a˜•б$Ù€Õz`ÜüYãz× +ü.‰£ýûCoÍÙ¾ îz«ÓFEuö7N@v²A„éiÉû$¥ªë¡&žP>#nù:nÎüT“ñÁíëïÞ|ûÍ­—®ÃŸW_~eðŘxõõÀ܃ùçà0˜Ãe”`!Žò;8Ðoü=,Tþú?üÎÖ{ïÞ|ï:ì«çÔ¨¡…f jœyÓ«REJ]fÏ7‚û¶° g[ÎðçDoþÅ“»BZ¦˜g²?!AŠÅë*\¿! +o —êàü¥}bÁ +>ùþ¨ÝÚ2ס¬)6­´´ál˜H©ÆO¹¬ÕRÉÏiFI¸x9$ËØ®/Ã.jñò¶N +±+ãÅÇX@QÐã‘ûòœ O)„r”H¨ +apÆt]…>¥¾(åW>F2ȧ:î=ð>‰„Ñr¤ {Ï¥ñRƒ?ûX10H¸B(À 4 ’zÌò„ zîQÖ ³ÈW¨ /Ä´4¼hñ±–þ ŠH3­(´ªb¨ Yy,©5-0HÿÁsW†¾éß}zj !4ó­GqÄ%Çîjé´€«$®¹ÛŸÜþ 1¤™°+U—eqõj—ÒŸ«À¦ 3%¤H23@q]ûúýàÁ}þ°ˆt<Þ§GeƒMm>N´WÝài¢»ØV°ÚyQ£*êµ)×añûÎ:¼škÞMͰ¿öÊ+—®\»D]¼»½« •ETùa’ž™M޶¥¸CFÅ’×óêK¯^E'ã»ÿæüï>øËñÿ2ZU#++϶¹C0½„%ÒR±•ANì Odöp;­S§õûÑ¡—-逯Ððgó€FLã.¸W%ê˜|”ýƒ;ˆA"N@Œ*ñO¡î–Qÿ°º`X‘†Hé*]l¤£²Q`¤9 +¦‘¿Ëp,0.ÁÄðZ-î€$¸O1±!ÉÒB0IFiãsvw¹]o!÷99¤–ZhZxS>³ndúØ*Z‚mîê­‚4Ój* êŠj—66ÿ…Ê¾ŠŠ¯3½¢R°Dç§?_r`(é¿tX2O­²ÁBfM‰ÛJ⑪ ¥]dК ŽuBùc,îù»_MÙP’S-F îkíL-o°¾áu€Þ˜õ>ŠN¨øèRJ +Ô€MO%‹2ìví: àÕî´©ÛQ¢t³~­É œ—ÈLI_§™×0™cF[ç`ÎY²¯,•¹±š‰°‹xžÄf#»½¬Q¹7=Xýß޸ö•oñ1è–þÇoSþÜ +«% F2<S¾Ð5 QÏü¯Íd/N«WhÃqÒëŠðóB}Ø+r®2—~‹70ÿù€¥?øë}÷‡ñøÁÞŸn]|î*È}6ÿa¼Èòü…;åMÕjT—€´iÖj•ùØe¼ü µœrKs¬»aZv^å[V×®Ã|ðÊúRž®{ê±ÍÍ…|‚ÂQƒjK¦jïuÔ÷I T7ºý³›·¶%þg:àßÿSo­ñá¡Fy«+G?Àª™dþ“­W3@|ÃEMð÷GÿÅ¿â_xÿ­o¿û¶Î£0¶Š³¹iÕ¥àáU;€;²é¢8Š-eBykmýpÐy¢ /þK×PÍœq ROWN¶¥•Ú‹è0äN­'»ð +ö÷¤õMYSìñéyèIðõ”ð<ÚçÜŽÛBÎhü^—:aD"ähµ¿¿INvz\ëEmÚ³¯€#¬šÂe¾—/Œ>oÉ}®ý3èîi’¹÷D[<óuHšÿä=(" +)œ5,§šã]ªš:ùò+äqù¢F>†¼6~\&‚™uJò*ˆÒºgJfY¦ÿr$üÁBTrH€~ì”ר CA+Azûò! ûßʦ‘d#¡fž‘¬”±9ª` ³ÈŽdq×àÔÝäp¯èÑAr˜x^Ó(°ŒÌ†g‹ Q-°‘P¯€mÃf"°&ö1ÞȨ¼~49[²Ý6†³bòôŠ}P6&†81Ô%ŠšeaŠ/)Ð8v-Li¤ ¡Â^ÃI “z°#BÔ„1`/`†âëh9¤Sê$S§úïfÛ1Ž×-We®âº@J}°¶Ïëœ9…cØï;Ž{é¥ß¹ñãïà 8N‹‘¯0Ç}0Üà–W…(Ó8NÌϪ#”c;Eš[«œÜ¨#ÈœpXä52caÌ_pœI˜JâƒE¶¶æÆq %Gn±ü4r­W¿)ÐÂñx¼¿‡1«[ÛÁþý«ÿÞ×vv~)Ãu²qû\Fa: ù8ÏÁÎc™µßÿ,†g‘gä²pmÎ÷‚þ{B,ܺ‡1%Û—€ n›-BF–n¹*lFÚ^~§Èu™‹Šš‚?3ÓaÍ,æX„ˆ}¤Ùp.rH4OÜL`»T#¯šû4!aÞ8±ˆµ·ëRR” &’´*!\#d¤çÖ*I´ºkʈJ —®Ì¼9Œ2Ucfél£7€…M&7¯_gŒÐ7ÿÃ?€ý«¿+9ôo¾wãò¥çõŽ“ØQhMäÈ©O·`Uª¾³y¦eÄÞÏoÃ#xáÅáþ³þê­Þy ö‡ne=Óôñºr ¦|‘¥£mJð¼0¥a ŽÿÊ3'“$ üKW{fC_§UË£4E’gì^í‚Q’E!È“0c^Y,' IDAT²I=wi1ÏMÉÒ˜ôžepè†Ãg6£(@çó)¸: ¥ø°a"}FHŃðž6¬Ö^¦,&—ÍpظÉQ ž@t“²{Óx–ÕmæHà:mǨ›hg¯X9 1äâQ-òヤ5’Ás–Å:¦ô'ÐÃpP¢Î‘{3Md{LÏ=¯àpRYœÃS]Ïê2¶SáÒðvLÃÉÉŠgrû* =Jbb®Óˆœx>Ï'º’ vžë$¼iy¬Œ11gœ®¼–rbÀ—g1èWƒj"d‚¶¢àëUJ*^!I«Õ¦JÈZñ2 ¨ò†{kMþ3=Šáe¯º°ã¿ùÄcÍ1ì¥ WBæƒE“ s­‡A{c@ׄLÕN¶ò‚€]BºùÓp¢+ >€m¬\Gx„Ä'`ð×UøÁ„œÍú)¨~س‘?.ÊðŽÚM,’Ša&€c© s‚=^×{}ÞxCú黿¸}éÅ7ª—Ú&ig)#/§”HöAŒGÁÄÊõ&™v>' Š? +‚B2È +ö†ãrø( |kÍã˜,þ=ìv»íû¾lùýpÄÁ¨Û×1Ùè¬oÝÏc䪵±Œ4i¸×OU°‚K÷XïmÛjôEÛ"†ÎYqÜ×—Ù†¹'è‚ôWo–®ñ1'ìKÞ•ªq­åf•§áÄ-&öÊ* âÒ‡AJ‹ÖQØ ß† Õ&޼ñÌ÷ x%Ôç_ÿ—ÿâ³Wnoo_}ùåk/á+™œ|I81õ"Q˜ 6ê1m J6yøDôÞý=¤[q^øí/à Þßzÿ½ïýWÿòø9¯YÞ2¥Íø˜qúHÑ^X˜ýÁ ,g9ó×:ÕNŽâ$ØCÑOkÁ<”²2NŠþ"íîjí?¤ù'†Äü$¼0ôoJß®ÆÆËA&ØHKÈeú'Ðþ3e‰·Qcé¯?j`¦³upEhI§ð¢xÀf>#/k*XòZE“„×ìš+Ë"ßçä*×[è2)ôÏâmðYbøQÌ?6Ò/ªèMVœÐQ²G’Azîbñv^ó\•|+oÌP~[•ƒ eYHàdœ>¬Hý Ô¢B•.+Ua +·Ò>{±ƒ[‰ð‘:öÛï¾¥?«Ô×ì7x«Oõ™D±wíPxñD”ø6MœÊ¦ šÙB§?¸=L;›ûßÂùýI³_ð2˜ÎâéÌ]©ÃÞF3¡JÒØÜ 4.·žb×IJæ9Kaþó`owüÙ}0±û_¸¢Ì8\º*Íj=Ïüõp@&Eù€ÁjóÐ(¸g€¼Ê*?Œájn{<å²È®Ò4QÈn±)YI¹µ³Ü@ŸÌP×þýoùv9S]%Èt}š¸®æ?(ØŸÀO[5,sœ&D¡³*E¿{¬çÏãNÅqy-Ù™€Å’ýÿJ ›PbBT$¸–ãìÊéWHŒr$¤ÀH[â†Ô'‡/–DdþŸø+ˆn x}ƒE/_ºtåÚË'”¹õÒÓgmª –.nÒ‘O§"ƒ®¾þåÿæõ7·Þ~ëæ;±uý­ê9ùQ‚à„™ r}kµ)ÏlÛˆëOå”n¶Ú`þOü:O”ëºþÑoh$",àE–ž “ˆG¨¾éµZ‘ŠV1‘†ž*¦¥?zWšmîX³¼p’ µQ(€Y³÷Ëa{cÙ™$a¥…Õ’=Wåc êFÉ7*\›˜yÊÞG(3¿«Á¼«Q#ŽØ¤qÞ¿(µfš¤ùad·Ú°ÞL¤¶õre„ié/Ïv¬W©šA +çá(7Rx’Ð:@O6HÇÎh+ÖÞAûvÃ˧ $*¦?5&ÙYª +#·HÔ ´Áž²:;DÝþ »9XPé~ªvF%¢¿Ú¨¤Ê鯿?HÿÝaõœÔï;cô‹àÅ…•Æ­)±n€z­¸kmì+»èpûimþ UU/!¡Ü>³åŒö5€å¾…àøˆ`w=Öy>çrPXý¯æq1Ë‘~n£ü²ÊË­ÄM„C0N^wœU°‘“CŸ‘Bþ$nS÷´&ÄŠëƒùÅ—^üáÖ›ƒ«o€ô¯&”ÒYÚÈs=øÝx + +‰±›F¤Ë[à1¶Ú÷>ºÏ<©I@°Ç5¯:LåÚ SC¶‹ÉNá  }råQ³Ñ„e†¡¤øŸ#|h–Ζ‚?jBËcƒÐèš³ã`Öl‘F±€ÒÚHöªc®CÒ3”p_˜x3ù+ؤ¾f`Ab^Áÿ  Æ‹ì—EI&Ú¬IẨVAÊtŸ!¬(¥~ ƒ5ŽÃ’r½_üíöG?y×ñšÃŸß¹ö¥¯^{¡iÛgûéú¡LØ Øª‚„³•ðzĶ0e {i6Û_ûöwàuûg[?úßÿÍ­÷Þ–ƒA«=™$Á$èÞÜPLŸ&f標Ã9;O÷à<sy&ì7ÖÛÇ{ù<µ„ÏÄ©wå=Dî 4‰,jüâºMgÅþ0Ú5WÝ[»F¿‡¡*øJÌ@ Ái#ÃŽUí)f|cž[d=d³4›g¦¬Ö¡‰8hXÌY1£sV=MŒª©°q2gÄ +¿¥ÛüÎJÜ”‘pfQã$ Î[øVã + R*ÕåX•[@€sÚ—ÍÜP ¥ÌxFÓ,QI-é6Å縈ù©Ãº± +÷8B`!ÑYé!5žÀšŠÑîj“Ýz0ïæÌ v튋EcsÉGT 7QŒÓŸØÃÕ€gAzÄô%1¢¹ŠÊ¬7tŸê•@³Ûqj-ìí>ñaï’ ž„ÓlU½ìªÑePÁ·|_™cöjc˜,×MA·YNF‰lÌ$¢JÐ|²ãKW_ ©0Xã|y@  [d;ê‡"Ûõ@¶¦ ©•  ©tÿ˜a^“A8†¨a–O…T\ž²»†O¹µd¦²+®·¡RÞ)Œ¸¥k/wïn‹ W6ΟßúáŸ_UŸŒŽ’áÑÙͲز€-Aw9?AXs"Ò+‰S@¶#w)"ú5J +û-Q‘ 4-×Óiatµ³8w§ £„×<Þ-««QT {‘E!HÀg$Æ€`MK›‚-ñ“âð_ऺž«ËGðRÜåh»‚{ÊxwÅüçB°Å<Þ³·‚|ÔðJ$©– `Tçð±®@Ù‹uf‹´ôo0ˆAŨx.Ë-T.TÌUžD—IP<<#î‡ÊtB1ã©(J.T7qì6’0‰­›lQ IÐç/_~þ¥_ÕÏ bDp`ÕŒ ¬Hdb4÷’D›ª“G>¼à fð‡ÿôŸÿ¡øç ~úÞ;7Þ}»zªý]t¯Y „AÐT-(I@ñ-Y[…Yx“aœ¼l&•L#ýqÅ•‘ôÖ<ÆØ„Ÿ—áCYx s@‡û”;…ÇB!åáÖˆßÔ’ÏøáÖªjGÅ%ÁxÔx²Ëy{|W¹ÆLˆ]–¹â°«±°«þŠn:¦ÝG—t%êêªæyŒ¸¤­L~ŽÈù¯ß©>¬š`àf9tìŠùB[‹IQ +f2ÏU‚Qìh9–YHÒÆF†œÛƒ=¼bEKŽ,8`›Ö„F[h×JÕÓб’þF¥xgs°Ölw{ ýE5Ð8µÊÓiœËBº¦¦œCàxIú¡>bFcœp–Ûȱ€ž[5ð"eHq ðÆÄöz4ñ9.qƒ*@ö‰ä8bEXN(€qʆ–þz Ói.B¸`ËÆÚcY+€žÇL‘ÄÏÙüO°pÄö%•@-vé®=dÒ#¯‰>Ð¥W0åëÓÍ¢ù_Ù¼U<–þpmªN„¨²V |¬¯l מ-ûÞÉBb…m¯R´[n¤¢4ºa…ïG®»‹èª¢ ýÎ~ã’KU‚Û g\ù‰:@¨€Œ¹hYÄ !©Yµødèá$ Ã2Q”%•ÄC! ¥4K©ò3-Û…žTw#*±Z¢*±­J™å¯Ýœ±(òØNË6•5‡Ó•â8Ä$\Ïeë~­8[jB·A¥ÓÚ©òë1Ê ÔÀ»oþ¿.\F¤ÐÝnéhè·Pj€ ¬JðMcy5°J«õù—^‡×þgÿL”íQYO¯õ€»Ã!H­Vï¨%=:J¼e‰ãchqÃp)X¡sëC·×ïÊŠñ݇§6KÚ‰ŠE¬¡ÕK_¯ôêF@4ö½N)‚6žp‹AKCvH?¶±ô‡Å‚`ÒÐŒ•°UtEA +Ê2*(¥§ë¸Ü ¾zþªôGݼØiÕÛZ ër*¼^%Ô›Ô[ bV=®…ý¬¨² úõIàa©ÎÒÔçží5YÛ’Í‘%8ƒ8&úIÿõ§ÍU‡¥¿8ž^Ú’ø,ýyãøDJxí.¨ÿS,i±‘Êmbƒ XÐP9ƒ" ²ýù‘€á¿ûñá ¿Nr¥Z^PÃhĨQœ³æâB•rŒÍE ¹_߸O…Påcyµ³Ï,cJ5ÐHš¨HܘD‰Íÿp<â8WÿûçÎW¯¶ÛiGq —¤]zXÞµ˜~Ž?)³vÔ‹Æ\1©ß ³vÈ"2þ˜…ujšIÕ-;²û.ÈKsô`iî;ý3[?ú>x `I;^é€nàCgD*‹«Hÿó—AjÜÐêÜÿ‰RžÆM2’Ò%ø#¿Ým7›Íû‹-ôsaÑÆ>ã>—Á \•ŒfÛ¿ŠBU¡\ÆŒ6mïüŠ °PªK€è·=¡Ë¦‰ò¿€–J>MØtÒ䔼>Yôãc²iÐD[ý¿â–¶[ïÝ€\{ýÐ/?ûàÐ|Ÿ¥6+@¸°nFÀ´…M­#ìC )N¬{Õ›.(û³ÿõO@l½wö½M\í –†œÛ?Ž"ð`]U˜3¬´ôÇ0±Ù›!!L 8pÀs4‰8$pE·á5Ú¥TÄ#(ÿ'£òÔi‹¥?¦*Ê–ŒûÁ|NE#€›^pç ]š§?/*U´rpLx™°«QPU©Â«æ±,uiB9”ìPËçxz)%Fzý§Ä&0Q1v蕵–…ĺ“»®%¢˜Ö´F­v“™ª³^¦„L3žx<«=êÐæ?€ÒåëÉΚÜ ÆÓ4xV»$åÕmTRk¦ +“°ô‡}»²hêàJðÕø1¹ÑŠ.†„ß‘âmr_ß( +Çl&çÐ8 íìc?H}§ÕI°ˆÙuÖðö’#x‰:òóËz±š + ljêÔaõ¶2Dv{éQØ9u6 +ýàÁô$&ŽÈFK‚X84çÐFι‹t”…öªgÖŒä0´°295Ï]ÅHD:Åò[ißÙX$9™àóðM?ô™ ‰þ„ÉMc,„åi!Ú^yÒÜ0ìáF>U,; ÄÓœ0DY8bÔaÝ3‡ãáÍñ«ÿà;ã½ûø 1û9u”A»œUâ© &~*rÎ9gÌÅaX£Ðä¼4§c°Õ&h£âÁø€•Z€ÜÁ^°yœ ÛõŘ+…‘3XÇÐiÝ¢@’Ägž}Ÿ]:qVÝt!™;o w¥Ìø¹\ƒÒ-wg +Â$:ƒMçæO†l×#…€Zc…Z´˜kñL XûFåœZñä0‰ë±GÔ4Þ)/]d³å„!°V½^g±‚dHìs¦ØÛÙ™£V·–¼/þEåáÆqÌʼny‘¯‚ÓS'ª2¸;Ž}gè$GA³-M]ö3 ´—cÓ ¸UøEx@´r@š‚&®™pQx•اw¯¬¸3¦î(0[#kVW¨VÒi n7 f ˜bZú㚤ª"< ÂBÎÅUU”G,7p¶lšÝ|û:¼ºOõ±CÙµžA††_ž{„a÷?Ó¦.FX¤‚¦«Yž38ØãzC°«PbO¹üÇúÎþ]8xû‡ºóñÝÛïßLU”¬µÖØzïªâ5Œ°×‘é&Ûé§6Á€ˆ,ÈøÉ9Á¨°Y'Æl‹Á [ÈíÂÆ&.Xì–A –"ÊÒ:â}ÍÂÀ +ÇL‹lÝ8„x9u‘ÉÇi¢B¥)¶Þ€Ðg¨À¤ÇÜQ‡±• À¹–º¬XÎâ Y˜WÒ½°âŸQ¥™„,ù¹À5`Bšè~ˆöÊZšÄ”:¢…l`_b ¦ç%Ø'+ñÃwzgg»Høc0¿‚­ð]˜¯Ï5cø™áëýŒwÁ¨Ì‰¤óa +Ž’pâ7í¤ŽÙxä¨ -'› —–‰nZÜ®‡[ȵ“ß)é8{¿qí⃰$æTK…Ò8õ«=•@B¥‹þ5a[Ë8o(ý•ŽAéøp¦„‚ø âÃÈ]ãê­È¤à ;‚ì»j³ÍF»5!öiì-·;ìöl&(zg‹³|êGãÊ%”Xv¬IÔ²›‰Œ.« +wIYoSWaJ³ÿE˜¿¬ð£Ì±6#æؘmÊ%ÀA ×Û¸}ª3¸„\Á`kë°»Næ°¦Á¯¹jZÊOw1cq/Y,†´t°ØduIE?^ÛßÖÂH/ašéJ}pŸe6øÐï‘Ôë<%ó~§ÎŒ?“ׯ¡Ãv»åX^ (ÚoƒÁ•V« Ò¿ú¦»/Áu–LoÆÿ€ÐgëéDÜå,­H2~ aªÑFtP…}E÷n$×0­˜¦´8J¬·ÝýÑ —‘´‡àz™"G˸£>N ±ÆEÑûlV'+ïç‹ô±ÅRqf*ÿ‹ÍLº s ¦Mj@Îpl¯fØL1Š}P pý]zR£Ïvßüì[ï¿ûÇÿ½ðÜ—^>{î쯸µê¦+@‚à ÙIâùÇ ÷áàõ¯~SÁûÝ[7ïüÍìYúë±]:à †+U^BYT˜K™TçÎjªL÷ºƒÎzWBl;Ë—Ã5–êý«‹¤P»Kª‰¬F‰¢½O‡íN™ÁÚì÷óJoż,t2«y£*û¯è.>5k.é~=ðÿ溘ŽsËX¯)tÎpGØÃô°‘n9ª!¯ÞúFµÏ6;Žùbѵöœ˜„ÃRs†³]é†Cþ“X§Êi¼Ä>ÔTqx&îFG¦Q+[óVú؜ȭ ·nÿL·v½Óê´¤ýgY%I’ ùßwQúsÓ¶Á²ÎÀü·W0~bÎó˜ä°þ`CTƒä0Šý·½S+ ä¬y C‘³ߤÚZÞ:e: ü-Päb›Hä5çl«Ìy\Ð {¯Ñfx¥åéEp©š¾":ÌÛ-¤¥†=ïê1ÊÓfï„ä´½b2ìAô·U‰.¬nnŒˆÒ¦å‡™»bÀ‹éå[ë­·¯ƒWºÞ?Ë +€ý8ÂzföЇž¯‡:€PÕ¶¥ü»àï•ÌÕ†ŒÃPƒbô%€ç'Zx±¸4#} @¡VéƒÆŸí~òá‹âuþÓÅ„ —àiéïGa›bß`·A3¬I‚³áp¡™­¨€ôáAgqÂVÿï’§¬që  ª“’[wÅIŒboŒ}•ÈU3ÝX¨$‡™VÚõÕMæÕ +lÿÊo`Æ"Õ b&¹2€x¨€räŸÔuIolQJ&E¤¥?ÿïDŒ)SÍ b˜³O7SÄ2¥·´c5‘Ixëƒð:áò•kW¯\Ã:íÆÝݦBjÂÆ:;Û=d°&6ˆ¢s?~ï¬Ov/< ^wo]½÷3Ì:€€×—¿ñMÖ BÀšá¯ð”–ƒFJÚãÎ$5Á•ö‚È9J œ1—Áz¼¯WLNNórœŽÝºc*ªdQcòvÛTÖKÛýÝÝN§Ã•´h8 ”G ¤Áüw’Ÿë¥K´WÊò˜ãLÃ6׈§à變{Ín:xÏ]‚ý½ÖÆB‹$|Þg†`༌“¸7@°ˆç¡àûFž'©‚1™É|Xõñ93#!ìÐ2šxÃ^›ç.íQ—'réôˆ[›ðjÔ²>éH98ÍnÏiœÑߥ'[ ûÈúhbͨÇYêZv Z7M ’Àb›'(úQXÙ4­~¹*Ñô†¿C8QÜ6Ue,±S"¦lÙ8h>ÙÞýxÈæ¿| Ô¨Z(Ó‘LU6;R¿°„Ï.*SyÍ& +¸«¸þÏF‹~ÁÑóy¾÷è-5Q"cZúã×-t@¢(B9d}¦E2•oÖHú ÚÃõó›°`<¯a×-PKžëÕ˜~SÈ€žm9Q“Òâç.fEab l˜8®g±) šÑ rºØævièóæUD¬÷0éwñK¯ë_ÑJâ¦Ý‚Åê5¢ßZ¯Ô‚¢ÿŽTްo=†£†5Ç·j±ÒãJs5)ðùÕ°h,[@\ÿ¥ï tf %€x¡}à×ä2mÌÊ P§æâmÖ­26#J(ÓYƒ•Æ-E—ÌÛ6ª:@ý­åP_eüLA:ƒq3åFƒàt¼æòhÛ¾y^B|tÀ—¿öõþ™>(€ðQXÀ/6¤š›Õ»ŽùÌÚ÷åãIx‚«:àË¿óuA +€nÄŽ&‘¾*­v?Ù*a«ùTp= +™³‹E›üÎÑB5Ðhpa&Y¸‚ר3 ×H‚ɃÅâ>“õ+WíïTÓl4LÕ>Hîdó|Á HŒ™‘/b+À{6*©fÍmd™2WŒí¬e·A"y®ÿz3Ÿ½• ží:³ +ží€D]B§’÷./ƒÜ ¢ìµô±{$HX³-rÜÈ îÇÎ}«PôSHÿ:§CôügßTÆcJÀ`÷ˆ˜_ýÍS°ßØXÉã|©î1Û%!C´xQ• .å;I˜xÉŽà—+dæ X˜2ÿ¾»Rwìz +Ñ6v ÛdÌâ,š0D7üÇKp¨‘PÓÈ»›ƒ;7ßöG÷½ ÏÇàã›ÿIy)Ž&“ç[+"ð`þETNœaŸö6Ò$w 1'«ažgE­Äuá¤!÷ Ë4f ].´s§{ä·[-gNЧ&¹õDÇ®á7ÚTú±!¡Aáøv` vr8Š'#QC0Ÿ¦›Yˆ{–—©I}â´µ.ˆu'Oræ‹E4j «ÚöV½Éá–¢³6&Ü d?—Q»[É%9 ƒ›¨™šŨÔ˜aaŽ"jÀµÙ-@Zo¾°rœõVr”ŸΪ“$¾±Jd$j­áÊí샞žg˜~y’UgЗk~ÀÉd¢‹hL8[‚ñ;¤'ªa…„l+”ׄQF%™SqÀ,2Dnf¥ò³ë:ÄóÏ­×6uTÂ$›²æÙ&ü—Ãå)¬Ñ@[ÿ¿í}[ÜÖyæi Ó=hö°5£¦†î&=òÄZÊFÚ•«ÌT­¼•[ÅNÊyÝÊ{^òž§}Ü·<û5©ÚŠk\ÎVÖUrÙ²T˵,E-šôPmŽfØTsšÝD ÞÿrÎÁé¹ÈJ¶œ'ŸêÁžn4p€ó_¿ÿûßüßßûÉÞ¸ú»ÛW··a»Þ&…mÁ¢K¦F1>Ù¾´& ·**b~ñÞ¿ŸþDïIÈ:>ôÎòJ³ð–t>c IDATWìÍlhã'’¿% a%cR’•m#8@r­4Æg±î&‡“ä(Â| áK™êSI@'¼:X¤dø£u2“=o³Ã©»âÀt úýV§åSÉˆææ¯ÐØnû62µºÂ’Í¢‘Mc›hr/†@·j<¦.$†p¹Ý\jŠu$4u`xÁU"\Y’Vhî9Í•öúæ ýÅYF¬û[EúNW“«ðØÛ†åàûwWeÏÖ®ÎÒªNEöڬʙ±ÇYöÚËðxû^&8£€@0ºw«ÆÛߦV¯æuÒYÙ¸¼éµÖ@è5 G8ÆCPQ‡R1É·èàýº’j%^èvà0M&mQÃõ$I +r-N ïÞ¶Xmh)™bÕÏ\‡5`ŠƒN7èên|ìåýƒ½=Ømê”Ä`¿ƒƒÑüBR#a2Øñ¸Ì=,MTî!vìB’çAóŽÄ‡0É¢¿ú¤OÛff¡MOÑ‹+" +̪,9Éqæ“ +´æ›üxÎY¡-÷Jú»u¾`õÀoÝ{÷‡Û„îõ¯Þx•3õ¨gh>s5&å °˜@Ŭ˜ †ëBYú Ê:ÄX?ìp*‚£Õ)ÅFò™:yç„|Ôc÷Cô7{½Ý~ä~ku ¶ôUvÈýéèÞé/¢Óà^f'ÂÁ®…] \káM³!%û=òa RÃâÔU¡8´÷Oôe=5ØcÎB×°`cW#Ißÿ$Ú „Ð}Ï îÂÇ5.=ë4ø¾¨ÏU—h- Bª,T‹ ªrNdIe™”Z4Ø.F×,{Ȳ$3Ã!Ñ÷6.mŒ&;ÿr^âïðzæ5/¤Åp©&O{õ©ÔhÓößÿî{õ‘G@ï´VCx†ÊC°jäŒÁ™he’R¬¡5~PbŒ+†»ÛȤ è+'Ý]3<¦ðQ€ÅƒúçÊ),YÊè ótsƒ{|¸Û/¬‰Å(¹´'hß^rÄõPk%dtc0í°ô×Dò¢RyR%€ŸGqÅ$nÒꇲ–=FHÇã!ˆ~ÎùëCÑ"-@ °dÀhO¾ð édSoé÷%Å?·˜—î{É­O4‘u—ƒ1‡€^èeSL›“Ü~ ;0öJÌm(7NãwïÒ‹8‡£ +›7Ü>ŠªåP=V¬8 2êä¬à6ëlúʹ”î}S%圈J2éæìò¿qä*‡·Ýí ÀÞŽ´JºW®íüüg$K÷CÅ[U@v2.à2ćn +£B‡ãùñd(Ü.¨ña’Mε‚1‘ã)V>·šÈ¶1ŽâÀ•¸ КVO±æi!Òk©/õx©€ègx5N²#(qîRú3ó¤RLTðPNAs$ +ìGéöò  + üPög£gQÓ(âí•×¾ÿ?ÿìlþN^º0jòld٣鋢Ɏ·HÂç­t@À6ϰåäÉätr5#'ý‚í ŠÎÙÀGÕEÄÀP¾ë$l_EpIŸE!Œ(®‡\uQti‚((ÎüⓌ:7òÂ/LìæYl\Bán™y_ö2â«Ó!Ç’ì{ËèjP¢9UÊ4c}¡d[£X.=qÎƒÍ—Š·],²­üFGªÚÇ£8V²ts³k t´AÐå¨$;×:­Î* ö76?£;Àè¦9F~«dU÷Ja uÅ)éÏ%Qôy°÷-¶ý9€)z\ 0­A™º  ”ë ’5éL« *ì¬x_÷’YŠ[žiEý¤[B†…áêVš²q#E]ŒJ.^Ý4óÈ#aÝ`öùázG!f3tBÛåžÝ;l2‡ªt€ctñä*xêÖžG‰: †3¹ÁÍ<Œ‚ÍÀo‚è–›ðÿDÿäBÓtÐ\“„µuå\#:6žÕ&¼@¬()¶yiä>ïƒ+à.¹ãg ýñPâ\ã×o @ÐI¢a6ýEýóâÙ¤E€K0køO¦ $¼4“mŠûñû°c)# d“yv­ÔÅÒˆoIsë¤3ǬcæmÔñu×rM‰<àj¯ C‹%é€ +¯ [ŒüPËaCQµÊ‚¤V±V_çÞ¢¤BÓ›ÈYŽàw Z-A~€¸°^™³Tëu ÿÓ Õ9Ñ«óa ¢8eà 3›y§%P-ã~ºœâö–½u.‡aä ”`ÑÏ€lþ -úO ûñQ„¯$šüòïôûZú ì L±«²ÙÈÁ‹"‚Ðó@ärõšÇah {È…Ñ…)ç9H{Û*@¢%qê7(œ7·j)0„‚T›œc+(q$ó!QÜZ¿å°Mßú¡Ý»¶¶Þ*’›’íÏ·Ì× °¹w’ù l.aQ +Žû3è$äèÑÐõüÎó›w~úfgãrgs¤?þÐpèÃ#æt”åYr ü ¸²d&[Îb@•‰ãcFgΰш1D?0|<†×«ÿåD=î=\ëJô^­,’ãÔ_B„ +\ƒ#º¶(M‹]u»†èi!¦~B±y¦O?ƆŽMaŠü%«1CQÞºxEˆev‡ÕÀ«˜ìŒâèѲ@£ZšÒ²ƒàø«úÓ&~œš¥ïÁÉËÿ—„ÅÌŠùÜéœøÓ9ÅGí†ç€ÁËÜC"öüæJ³}òÿð¸äÁ™cµ^Ç8EUk#¡{s +wª9±Ï3‹¾§¼$Luâû­|ŽÅôQ_J?FK +¶ëk˜„LŽÉlÓò={YÙ 50¸BF³€5ÄPô|ã•Yœ@ËàñÒdvÝ£¿T\åˆÚÁE¥ÎðeÕ>£˜Ï1ádaßJbŒ±PI#-„—ÏwI&ŠyÍû*Ü/ÈóAD¯-ÛªØ&Yzl,ñð +n@~³äÇZUü6’BŽŽì™°íêX–gÄÁÓ”ænªÿjšñh w>›¸2A‰²êPÝÙ¼ÔC_¾õ‹»:?Me3"ÔÊ5,*‹k¬¶ÙðÙ„E?qä,a|¼¨;L"„îìLpÌ&F+Aò±ÀEéMÀ ìl´á8Ì7ÄÙ(ž ‡ëœ†gƱt$ tª¿B9 ‡¹ê +m¿'lMƒ£PæLÇÆŸ/ÈpÄ0oÝ*á霧,ú +.ªagÖF£9FƒÁ Û½ÎA­îÙp:šdÓAg£OáZˆóYéT†k â=â²dÖƒ1Ò…9ØJžb€örPÑ’+ý”¤“]’8VVI‚Ž<ÚÝMŽ&íÍÍ# +6ºZ‹ëE,:çð„ dáO¡Âé³½x²ÐsÛ`+gÅBÑfÀs^‡%Àbã¼ëB +A_ ùâÈ,åIϰvŸ€mq„Ò_ðÔ(íîR‰“àj°‘õRqÝÔÄÞ‡š¸ùû¯>¼§Oº´@nú”gGü·Êÿø“a‡èé¨y¡=GO†LÉˤ¿À^¸ƒƒÁ¶×o¼Ü½¶éæ$ÎÉݤ½9œEf»§½T»¢&”à}Ögºlr8ž è?kx +–ªø•§Ž‰7±0Ü´¦ŒéÜZí÷òÕí|yl^ßö„Áë0C©7ù˜Z÷ÚÅø Î!lû¿ô>»\ûôƒ±.ºîéÌ1™NBƒü•e´¯ መbý%¼_6ÒA+œNÀà´.:‡¶U!¥<ÿìÈÒycûey½ÕÍÞö;¶l£°7Døø-ëÌL>¼ƒ…oõœ³8ºQ-"k–D¾[œB^gÇØ…FçBR]êØ Ø… +õÈÏÀ±t ÚC3E]ìÈ·>à,Ù¸%#“3^,úÙi°jÕµÀ9xʇ“­œèw¸¼¸ó’‚p ÏÑ5–örøˆívçúµmRƒ‡Ò|WW¤s@¤ÐêD#-JaŸœµ‹rÖ³c°tRÂö¸:ÕÌßM'ŒùD«p‚¢÷Á«;@’´š¤|uQš©‚…îÍs…ŒTûŠû¿åÑu–¨k¥6bÏŒ"ÙÍæB2£ÑÓÈ +¨¶ ¶N^i]¸Á ú90˜å©ãú²o°7gœ«f+2¹€dÓןädî÷5ïˆ~Þé€ +º¸.ï…G,\Æå®MvFý¶øá9 Ø8ðT˜—ÝÓ:H'°®´B‡¿¶ý1ƒUfš)A`] åsƒ³j*\ƒŽÆš®fa) +Ž’vɹô;••ÿpóÁ?S|*Kùc,@uSon;žLãñ`Ø¥tÇt|Ð$ëX´ÃÁÃá£]ðWž-¨¸· ¶^¹Åj€¯%3P5kúYÔSh^”‹kÀ‹1YÛ@4Úß½þ•×@=žNZN^úËG«AôÇT!A—£xÓ.^+Í„;®¥û¹ƒÜ7ˆÉP‘åOÆËôÉäY?\Ã9'@`{nùp´×š£ƒ¶°’êþÔ þƒ]Ü™‰«ŸÛ|ýOÿ“þ+Ñxëóèõ¾¿p”ÛÐj»Œ/y\3ÜÇÆX׎'I: ¤ôM Iê£á>ø|\È +@¡5P¾ûßpùs¨œÙ~¥Rù[ás[,ýy€ù/ððÄðÙ}ûMôŠR¼ÿÓ»ü™ÉÁÂùïüb÷uµÂöÿƷР~ü~~÷C<æÁ>îƒ8ÝíK¶%‰BædÑ€®(†ÅÌÜML&ÁÒŸŸ4h–ƒ°Ýi­â„¯_ÂeÖêþúîð0úwnŸv´A„•ÕXðž€ù¨KŒ6lr¦qÄ%(šÏ½wçR”×Ý ™3Q„Äi%¡Дƒ‚±Ôa®/dý UßrDÉ(/¶ý]ׂÈ·\&'ðŽ ‹øD– j€ùŸUšd ‹=oÁM۸܃׻?zc÷ÞîN¡{oœ$¸‹Lõª¨Ø¼™Ê +ðûÙ ,YG£ƒ>É[æ1÷ûúÂh¹ŒîÁµÍÎÏòŠòÜü¤öðÁC ·x拳¢o:ºÄ£¶³ÝÚ¿ß=JX€€IíxÌ–¾>< H?Á˜nZ£•N³àá(Õ÷x𨬊A€è ˜†×ÿãk÷ÞBŠðZç×+°þK'Ñ“ÛlõŸ ýI¸ìÜ7/ALÚšKRöÒ¤sÂ8oÍe”'‚¯»Žé¸H±À5eþSûM“/¬pç21P”¶G0´û‰ò›* °¯B¸Ö¹ó߸öÒM¯Ñ*üºÇÎÝøÉ ãì(ƺ@Ò4ÃÇxVš"P(›ýªLíÝýgî–&¸hëêuTþÚòÝn§¦| Ö_襇¿ý·ÿÈÿíß­ú¹/ÑŒ ó_lluÏ%™"†ƒ°‘ £wÚ„|´;—akmõ3ãa:êËcb÷ :&KÿÃ8ÂÜ`JHP±Égc#¤Go…Nû’rY6‚çÖqu!Î<ÖT„¤ *ùr—¨Ö$ÊQÒˆŽãŠ›%¾³±øNáûãÁÀÖø¬p)È€†§ãÙs‘æÈÓWнH%ÓŽ4¦Š2-Ø£¼ +†H‘9>ºBX0'–;¯‰¹¤ö%VaÙ…EiLÏ!9wbžçë– º¶ÃµJL —0]±XR ä¹(Žcj‡MùêsE$éèÏ5ÉÆcÏbK±+3JUÒÒÆ{|qE$ÆYŒ±`feÉ·jëB=Ç´ƒ$ò¹M-Ú󼢞†É´¨÷åWo]½¾õæÞèÞ¥ÌÄ^ÖAbíN’ƒ×{§N8 ;ã#N©ôbŠn–Gö¸m×r55*5˜Á +:’³MÅ:ƒG?@®­ò0ƒuÝë1¥‡ªÐÔ½+¨DC¨z,#Ð~| û-s¶ÉD0§È뎎âÔå\ÝÞl»* 2¡ýÜ%ÞA~)0úì¤ÝY¯’Šì(Âüà\d:"¦¨2èTKük-Ó1¨,1¤¿ ç5bªáš4í[N–¥û¿º×ýÌuøo»î|ýOþÏy2ªÙò^œ€ÕñºÞÿèûÑä>œžÃøh­RíðHÃ勲H“‚±mìðÕÍ®F‹! ¹ìãƒor¶Þ` ¨G}.WxEýEÞA1Šd„w,0É,ûtX5>Ü_¨€ô=ÚS0þ°½óÚÂõ®š£vë"Z…f„Ž8Ü­,\Á …å]>W»»ùàÎû£G»‚àðTà:¨Øƒ]Xà¹d!ÚeŠWJó`×*\?ÞßÓä»?y¶[_~ùÞ»â჻—¯,X.‚ªÿYú %úyl½TUè5ƒÊôŽUÐüË¿·uhÀ¹µ+=îü´ÿÁûèUì÷ñÈý_U$bÞ§¨lß5ÀÙ éSB[ o2:¾rí:ŠöÖ +.ÈÍ«Ô\Èõ@ôËsV§ ·Î®ĈB`s_‡ì¸ÔÒÿSÉ©YÇøI‘yLj† ²ÆgªÆ$î™OX(ÑÏëD—•:~@uª¾IÕcAPEmWH6lù+Û†ÅÑXR›{§Z!#ª7ŸgÌ}"IjUè)V¬J)H!õÔ!ƒâþ,ô-`ÉìEçÃì„|ZnŽªHÛ°šuržÎ ôa ÷ßåÞk_½õða÷áÐ2/h«8–a¸®Ìp•f®èÒ*IÙ’cÅ‹Ñlƒ˜S?0Òf‡‘·Ȧ48¶Ž˜!L%w¯‡|ù|ÁÜÖéÉAhœ‚nеÔ-4×YÝ—mŸ ¸=…bð׃f3Ž"§^ãÃòýÒØÿbnWD&F‚›ªÈ9±*å>LsSÁZkr'¼Øåæ×þt¼ša{¿PÉnï²ËÙg,ûÓñ=Øâ<ë\0¹©P \×9²ôÊ9ÔCÏbE^&ÑŒñÇjF”þðO Íù 1=8ðcgø” +á˜m‹£(˜0 +¬NŒ{ïܾþ%Üv8~ Cãá ³qI*€:±1CyªÏpg£‹-ú¼Àöƒl<„5…–¹þ•×@àΗ Mx®w+ç‚¶ÈpübVù@|É–;Ú[ÿ„±yek÷ÁÝNÏ„C¢`qa3ìlßÀ+êÛûlõ-;¯Cçb>;“ÉRuû‹½$%Ãäk¸ñëÕšIf•ƒo¾oޱAñ6ªG¤,(XG +@¶óV!oþ‚€¤;D%Ôñ8 Ül“z A—j z†Çå£áÁ +À\´'ÂwòWXo™†¥²íÒŸñ0¬ À¨r”~‚ÂÓF±‹06©±Ä 4'¹©®¹B8ÒÍsÂo• +¤¤Ž€PTîuŽ :ŠŠ4[–ƒåÔ6¶îËöL$ú5O/þ,%a‡y%ô¦óÒŽ#ãA‘—Yf©€Ÿ¹UUKv.£±­_Ãô®æÇa¦&!-3ÎOèÞŠÌå¬ZìÖíÍË=x ßý±lM †¿üé8Âf%–#‹ãìJfc9D’µÌ`ÜŒö‘Ù—À³½CV“ãù\€‡\2:Ÿ0cqVÚ®%{7¥x ø™Ä7ôXÂ4…Jžs`ÝB¸ÍÍËlÏ.T,žG`‡èlH,Æâ§ã8JqiÓºFvEgžª§x' Õ_ŒG Ö5è€Ð@mÕ§A5à•J®v:ñ$ºýƒïêq§¬.ÅQO(€xr?ß‹wÍ7ÁöÏàà+5-’ÌßЧ6·"f¥OlÊjEHàC™ÿÈ©ƒ¸S >CDВݽÒcF MeûÃŽlã×h ÷« *ÈÐ …žMøvu·Îôð+™øÂ—z?{gÉd¼YH~Ö+Kí¹õ +:›Wï× î63šÞy¡2pXêùOßJâŽc½0@ú{ž¦òÈ`û³8s/”Á´¨ƒvŒ6¯´Ïû® ýŠ=Í6ƒµáEÛ÷pæ¹à¼#pJ_Õ~ÛÜht€åœ´šÙ àpJ¾h,ƒ& À~’JaåÅYQ.•U±ÞL0wýQÆpôAT¦—9Ð8$¥¿þ Å82­ÆjIã/5å/oí%©fÌŸÀwʺ®Å±ÅqQQ0UN>×Fë…Ó“†?Z“×DV¬"fØÕÀõÊß}÷­ÅHÿñ“½ÖÚ†E2õÓ*yÎÍX<fM/¶?›ÿ¸µQ¢ë:¶ÁÁ¶T- Ö=\…æ¶Âó1 yuF©R†Ô1] 2Óev ΣPñ›Â¸ ’e¥É‹D?²gáK®THƒÌ™Ùk€©S‘Ëüµj§(”äÆjsòŒzÿªV3°R‚fè-{ëÄ*õt2zRU-_ÚÚrÃÖð1ñ¸­u«é»(m„”0µa#˜L«[h3p¨,Z«áøÙdðQ¿wíúÎÏïdÑa^ÒkÃ5š••:¥˜86.À›1Ç,˜¯8 @™¦(ì–“Šyº¶6šNÝýÉ··¾ü—½ÿüêí|Ç„ñ¼uçhæ÷íÛÿt{çƒ >íjœeó¸ýÖÝ3Þ5 »ó¿ûë‡qœó,ètV©wÍ€ùð-|þ<«|f~×<Caï_¾RbWÃJ“S£ökÛ—¯ÿîæà#´.ñnæÞî‡;~¢èÒè§ßµ¨ƒRª;óä©1‡`ïÀ´häªV¢Öð®Ä"(àœõ‡ðÌS;$­Ã?ár›9éá"éCõ£åÃáäÌϘü/’Ïc¾ð ¡ØP ^¯nÅǹU# +õ[Œé€ý­/ÞFýû÷nýÉ7ÞûÑ—Qœ½ûÞΕýáQF °W¬€Š^ÞxÛµˆ‡ŠzJc¸è÷×=Í‘8A‹Œpò² Œ÷®„Ÿ&¢¦ý¤¢T%Áy– {³J·¤è¡0‰y~¦U ìƒáò”3ðžï8·5¥.i +PKåo† Ætn[Ïl›ôߌÔa‹LXî,9ëu‰•Ç+Z*¿þ?êpwC~ü “º´áäÖ,&;ñð ê3;–È zr1ïÏ Í5󸉩u˜ø°µ¬:¦¾˜u®‰•™qËaF*Pe‘ƒˆo­ðÒ1AÐGtçøOfs8ƒètZÔ·GŸk‘±ô?1öwî6.Ušpx C"µÎpð¸³!Ó/Ž·¬?£ï‹~-ý›§keeãzì|ý[Ñÿe_GZjµÊ&^òÕ¦³G1AIDAT*1ÈÕŒ¢L¦ÊÛðbè^¹%¯âWwá…çY{?~JØÛ W;Z¿ÿ¶ñþOÏ€4$²–‹ À¿ãéüFÆK_4ðK†Un4FE˜JÂ~á+7MG³µöëýªá£c.F0¨ŽOr I‡ÔS30»5(¤ªvZívë•W¹PàÆWo¸õ‡ß„ýþ}D*><Ë‚1ÚÇQsE­)r溛½é³MVä)ÈVfPÀÜåªÀj²};ΓL‰ ³m$8À…Añ+®Æé,ö–:2.Ĺ6T‡ÎÁ §yúÆ?|§÷â‹·þì›Õï®^M ú§ãâ|¼’‹r_7,Ãd{ݦZôœÊ°ªH 7ÚË‘—P¶ýñy´—8þ‹M }EÿXu '`J‘µˆnR‹j"@ú t] çNد¦¢òh©ë‡ù‘Üo¯6M‡3V>`÷êÖfwc¨B„Í*K?¥Ôüö Ùz}DñŸöZ[ã7Bú(ޡܽ¨¾lX:Ÿí]ýü6èP·ßº +€K½½s¤gƦ›pm§¬Úæ…^ô´ïQƒMpn~í›,ýñŸî¼þg75ÎÒ) UÃâøxÿP´…¥iX+O'‡g¾Ï]MxÔÏANÖ (tiÀøÆOLÅ\ šf¸¢÷=ƒñ|fXñO†Õù´:ÕçãñÙk{ÍXW†õêf˜íÅ{×6öÎÞ?Ó0>úøÎµ·ÿúoþÿw!Äa„Å +“¾m^Cn|f!^fЛÄù9jÇ ÔÚÆg +ã}ó»æçÏ Ý›¹3ÇcÄ×’ôì9?ï8º0ÅYrÊYÉ2 ›Ñ*aâ"ü=+¤©É˲<ó¨zô®méí.Uz>$@Gœ¤£ÔU(÷#”Zú ,è Aôïïö›«½G§ÛM'…BÖ33ÈtÐ;A›À|Ï(ãRs‹_d楥){m„B‘ðâŸ7æô·áŸå@,jÒ ÙlQGå˜FxAZÈqÄ]TE$Ç¢áUèv•aÛ¢…Ê€(³–Š`³ü‰z˜êÞ‹[ãA +¢?ölçñî#â¹Ð[Øq¹ŸW—d4Q*6ÿšç\´L+Xƒ£ ™È¸dlÿ éäJò!)$ +ˆ~PíÕ’¥?Œƒ8 ”Ä7 è$µ´ ˆ_%Óõ˜PHa”Î…^ü¾)|Í‚ ÑÏ;ábU°Vž³!ÑDÿÕímÞ¹õµ[g~æÓŒh:™*|:‘Ö (€þ=¯û™“ O9¶oTÞÏ9A–]sf(à<Åf"C²¹A[3™R8ûwÿMeiünxÞyæçD3$e|~ê¥/Êr‡ñA¥|R÷þe^Ͱb–ýíøW ÝHRá”óƒ ‘l¤¿£¬®ÆJ+Š&ÃÇø.öïßF/¿ò*–Á 0Ÿ†rð¶¿sWܬÆ÷0²O#KÓʘ¥ úÏBØö«Ö¸ÖµH’Ô Z’p–:ÚjR¡¬É°-GÑ{¤iÕ×[é µƒ`¹zö\LJ—lêRGóû÷]É0”e`5ÊŽ.uK Ó€ Äê_UôÐY¯"–:Ô +}Ò2Œ15ã T¢KFêA0§lÿþwá¶z úãh‡A•æ?Hÿ h#0m¦¡£™¨SÈó`%¡¡˜ Íÿ-½¥»ˆñŽôIEND®B`‚‰PNG + + IHDR€}WÑ pHYs  ÒÝ~ü +MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ +VœHUÄ‚Õ +Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d +”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z +Ðzù‹y8ü@ž¡PÈ< + í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ +¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN +!%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì +ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3 cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF÷IDATxÚìÜMˆœõÇñ_6›ØÌĪ ±­Ø6ÚôÍ„$„Ô*($E(4tŠD‡6² !-„=DÖäà1ÉAˆD±íÔ°"yzèÁj}ARÝ]bju©k­QÑ$›&ûäe7»=d)5øRKÍlæù|`oÃ2ü™ßwž™îéééÕÒí@€ @€ @€ @€ @€@€f¯-[¶Ì¨;v¬–d^’©$§×®];~÷ÝwŸÝ´iÓ´SÀÿÉæÍ›»Z­Ö‚²,ëI.KÒåT:Þd’Ó+W®<944tf6Ü¡z½^/Ëòš$×%¹6É™ûùÁFïºë®¿ Ù¿ÿd»ïk__ßÜ}ûöÕfþfæù›éxÓIÎ%)gþf&‰¸äÝ{ï½szè¡/'¹>É·“,™‰:ûÉìt’÷‡‡‡ÿV¯×G[­ÖX£ÑhÛ«ëz½¾°,Ëï&¹±ÑȆmÛ²6ÉÜ$Ó££9¶ukö—ež/Šb°§§çÝvF@OOÏeEQ|-É·’|#É3÷•Î5•äD’·†‡‡ßX½zõ;ƒƒƒ"@\ÚvîÜÙdñêÕùé®]Ùì +@užÐFGsdëÖì+Ëò™f³9ÜjµŽ¶#n½õÖùeY~}á¬àürãÆ,«Õ>r“%kÖäWÛ·çú¢ÈDQe’#mÿ¥3¡ò³mÛrÓÌsÕ©Ž718˜‘mÛ²chhh,ɘ#—ºyI/Z”ï­[—kG¥,Y´([šÍÔ˲ìj6›ƒíˆ€ƒÖ’\·qc~ÒÛ›ew›•+sùý÷çÇÏ=—¡±±¼Ù××7¶wïÞsmÿë’ÜÒhäÎV+?ªÕ •ÌŸŸî$ßLòª +É‚©©ÔEõ4ùj«•_4›IY–iGŒ})É5}}Yñi·»á†,\³&ËŸ~:WŒŒŒÌÍù÷dÛ1þÍV+ëõœ=›9I.·O “̉K˜UŽ€¯´9º“,˜œüìÇàÔTæ'¹¬»»û¢½Meüù˜M€Ž1=óƒhGL&9ÕÝýÙÁ®®œMrfrrrÊøÓ&SŽ@tÒƒùTWWÆ…hG\yå•§ÇÆÆÞÝ»7¯ÞrKÖ}Òíʉ—_Ρ$Ç—-[ö…_þ7þ\hþüLçüL: Ð &’9z4¯=óLþÿÐɺ’̽ñÆ|ù‚OÙ·5V¬X1þ /ŒîÛ—'{zòF#×\x›²Ìô=÷äÙ±±¼’äÃ/ú€Ÿwü‡‡sæèÑœš jWÓ:ô¹rp0#IÞJR:pÉÛ¾}ûäÎ; æ÷ë×çµø€Ž~“äêF#7µZùá' ÚÅŽ€çŸ~¢^¯¿}òdùl³™»wçÎÿüWÀááœØ¾=ÏE~—äÕF£q|6Qäƒf3O–eFf^ +€ÎóïïHòƪU«\1—¾;vL>|øŸ­Vë¯eYºÐÙæ&¹º(òz³™òÓ†íbG@«Õ:Ñl6•e9Ñ×—Ñ]»òƒE‹²8ÉäK/å/e™WfÆÿ/òK€þ‡ñ¿ÙÌoË2J2â•aÇúÈ7ú Ð1öìÙ3µgÏžñÄç:]OOÏá¢(ÆŠ"Íf2[" ÑhL«×ë˲|wx8NRËù÷Z'ù°ÑhŸ…ãÿë²ÌjµÚÐîÝ»öööú€˜}öïߺ§§çÍ¢(RÉlŠ€$/~øáS<òÈ{9%jzéÒ¥çfÛ{þŒÿ`»¾Eðy"àÌlŽ€ÞÞÞéÞÞÞ‹v‰Õøƒ0K"ÀøƒD€ñˆãÆ Œ?@@U#Àøƒ*ÆP±0þ €ŠE€ñT,Œ? b`üA‹ã¨X@Å"Àøƒ*ÆP±0þ €ŠE€ñT,Œ? b`üA‹ã¨X@Å"Àøƒ*ÆP¡xðÁ>ñÄó‹¢XjüA‰€M›6½žäò$7@5"`^Yf8ÉF6@5"àçwÜ‘ïßv[–´ZYeüAÕˆ€Å/¾˜uË–e^­öÉ¿×øƒ:,V¯Î¼Oû}ÆС`üA"ÀøƒªÆP±0þ €ŠE€ñT,Š"ï5›ùñtvL5›9õØcÙðÔSy{füÿhüAçŠ"Þ|sŒŒä½²ÌP­V{Ýøƒ:8n¿ýöÑÇüØà`^Ir®:ñ裞ܰaƒñtª‰þþþ#÷Ýw_×òå˧<8åT@Ðßß?ÝßßÎI€ @€ @€@€ @€þKÿÿÿÈ{ jyQIEND®B`‚‰PNG + + IHDR¸½A÷ +7iCCPsRGB IEC61966-2.1xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð +Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX +?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j +õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ +{{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% +5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óûpf* pHYs  ÒÝ~ü IDATxœìÝ_¬e×}ðufîŒÇ3öxÆŽãxâ6q“úçÁ/<"Ñ +JUŦµUª*QMKMp”â**´•[”4”Ò6 €'ϼø¡)A¸Im§žØžÏxæþ™¹‡ßïîµgö=sÇv’¹çæÞßç#-s÷^ûܹ’WN~ßµöÚ+?ñB¶•½þ»O  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€€ë^|î‘Cñ2‹v¨ÚŒ6ø‰6ß¡ï¡Þ÷–ýwÇ8`·È"âp¼v¬·ñûa=Újœ_×,(zÁqdÒ7[ ó…þëÑÿÚrÿØ¿ŒCv› ¸(»¢Ýížh'ÛP„äìáZ´óÑ.D{3úfa‘ß§zß{£ïÇ®.ô¿ý/Eñ±¶Ô?ö!ã€eÖ‹Ž,"î‹ö@´÷ö÷cáq9Ú7¢½-û®õ×ÓÑŠö` +•œ¹ÌYÆ·¢½íl´W£­Äï8¯ø€[3X@Q}¹qÎ8f¡q&Ú‡òu>Ÿ?=í7›Í~¶ …Hëý5‹”Eßg?7ú?Ó†bæp?t5~×UËáfÆ!Ë$¨+‹‰\n<¿±S§8þKQLü\–_î¯ìTtôþ[…K\óxf#/÷vå¶ÿ°ÿ‡,  ¾Xn–÷çrã3ã¹(>߆%Ĺôøh?íãøgûñ•~ÍØÿù6Yd‹¾öSù™yòÑ.Äï\³+9Ü`°l€šr·ð,<ò¾áû&³…Yt佯Y,änâwDZçâüÑ~>ÞçìäJ¼¬÷ÿbî3>×ûŸÌÏÈóù™ñþÉ6,CÎ>o.ùo„ïtÆ!K%¨)gó;`¼§x”˃ÇÙœ%ÌåÞÉùéû”»ŒçÆd¯öþïkÃÒäщhwöß“¿óúýÇ;<¿ºÍÞæ}~ÏÇ!µ˜šõ–ÆçŒO “ܬlº|8—"g‘òrÿyܘlt´Æá6)ò£ø_|~ù‘&à`Ëq³m5[Œ|½ÕóK‡Ô#¨)‹‡|^øzo£œ)ÌG‹å2â,@îï?ŽõëFù> ™‹ýçÕ…ó‡ÛÎÅ0yßsî|žËŸs¶RÀA5ÿy~.Á½ ³öëýÜÒÇ!5 jÊÂ"‹„­‚d6›}n>Ÿ*ÚÇûÓ†$¿#NDZM®—íOËš[Û>+ÙÚ%þ[ú²ÿœÌ ‹šD{OB€œµ<ÜààÉ%÷km(þ_k7–áçÏYø/uP—  ¼ÿ8Šñ,<ò^ã\>|}c°(4þîÛ\z­Ý|ÿðôþÅ"#ƒ†Åb$ûd±ŸEÍ—¾É:ì{QÜ´ ö¥½‡$¨-— çÌä•(J~3ŠŽŸœžŒcÿ5^îŒã?Ø­µíK‹ó{$—#ßÝ>Ö¶·Œ…ŠânÍ8`)õ¥øÓ–ßW£Ðøí6,×/Þ—Ÿ3”óÉÏyï~Þ›¼Öûåîä'&çsv3ï}ž›½ÿ¹ø}¹¬Ù-t‹·œë?§½‡$¨k,8ŽÏçógó@¿×nlX–ȵ8÷ú¹/´¡ð˜~wäŒcî6žËb%‹{&ç¯ô¶µÙÙäÖƒKmxÎyþ®ÜÍ&€d;m˜c ÇÂ8[¿´q¸+!û‚€ëA+ +ŒÿØzÑѶÏ2~µ »Œ¯L6+{¬$§ú5YÄ|<;Çñ,f²ÐÉbeuü¬‡ŸxaãÅçÉâ'—0ç}ÏHÛØ[;:9¿e〚ueÁ±õè°(²ˆø\Œ×^ìç® …GìY°\ÏEÿGoñù_oÃrç|ÜÙjÎþ'z…MΈN7/ƒƒlÜ©ÞWÃj{8¨GPÐÂSrvð¥(.~!ŠˆÏ,öãOÅËÿ‹örïŸßâøãñz&®yú×|-Ú«m˜­\_ì3)Dw3‡¾Æ!µêÊåȹ,xÜ|/7{2^ïêç³0Ï¢áO¢½Ò†%gWúk^¾_s¢ÝX®œŸ™³Ž/E{#Ú¥(tù°3〥Õgs ~nÆ—EDÞ—Ÿ3…¹‘X~?äla.MÎâ!—÷ꯗû¹¼ïøŽ~ÍÕÉñ¼æ|»±Û9°À8`™…åŒ`9‹˜EFY„ä¦|¹“xn6ݰlc\¶׌FgÛp?òÛ^ìÌ8`YÅõÂ`-ЉqöqÜ”oÛ†e ×äRâ+qÍølów¼¸5ã€e°å[Ù”ÏF~p{‡ì& €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +pÝ‹Ï=r(^fÑõC›Ñæ?ñÂæ;ô=ÔûÞ²?ðî‡ìcq$Ú±ÞŽöSëÑVãüj¼ndA±CßlY€Ìú¯GÿkËýK`ÿ2Øm€â¢H8/Ç£ŒvO´SÑîè§×¢v!Ú›Ñ7 ‹•Þ'ûÞÛ¯ÍcWú_Œþ—¢øX[Þ_û“qÀ2 +볈Y8Üíþhg¢½7ڽ˕hg£½Ò†bäJÍþE{° K/9ËøV´×ú5¯F[‰ßq^ñ·f°,€Úr qYt|0Ú÷Ìçóg§f³ÙSmXŠœ}ÇÂ# ”,öíýŸiÃÌäá~èjW-C†[2X +@Q}Ö1ïÎ%ÄYHÜTt¤<ÅÄϵ¡¸Ø†™Ê‡vêÛû?¯qÍãm˜¼ÜÛ•Ýø;`?3X&@]¹aX9KøÞ±ˆ‚áwÛ°‘ØÖqüG¢ýbÿT +qæ±õþÏ·¡°È"ãXô}´ŸÊ>yòÑ.D¡³fWr¸‰qÀÒêÊ™Ç\Rœ…ĉ…s× É±,Prùñ‰(.>¹ur6ûbî3>ׯ9Ç>çËÈxÿd¿.û¼¹k ì_Æ!K# —O¿²¸¸ÚßOç,弿Žr—ñܘ,7ËYÅ÷µaiò( šÜÈ, œ,t®ß¼ÃóËá Ûìm¾Ã,üžŒCjÔ5 ‹x +;ù>‹’£“c¹Ûx.-~¹ÿœ³˜LΛ–žþŽ(þŸ_~¤ 8Ør¼mD[Íc`õá'^Øh{8¨GP×´àØ˜Íf¿5ŸÏÿ~´¿´Ø1Îýv +•ÅYÊ,P² ¹Ø^m7Š–ÖûïTüßÕ†MÏò1f¹ûyÎV +8¨Æâ?ïÑÏ%ø¯·á~üKmÆ!5 êgÇönúڡ︬¹M^Gãÿ-}ÙÎFf<û@´÷´!ÈYËà ž\r¿Ö†âÿµvcþX¤/uP—  I!žËŒïŽv:góÜl6û÷m˜©LÇãøßŽöc}—ñœY\,<¦3˜‹EFÞ«¼XŒdŸ;úïüÒíø{`?‰±ôÑ6lØ7ó{1(HPÓøè±,:NEañÔÖÁ¡¸È{‰ÇÂs7ñçãüdzõ%ÈÓYú•Éç´þ~úÝr­7ÅÜ, u〥Ô4]0ÝM|\ª¼Ñ^kÛw Ï¢cúH²¼wÿtï—ŸyoÛþ(³õþYÓâc³÷?…ÌÇš[8øo8×N9“¿ã€‚L‹î,D²p‹„ñña£«mûæb9ãø@ï“I!÷LÎ_é- Í|ôÙ‹Ï=’ïsó³oôß“¢Ùƒl§Ms äXš÷>K‡ßö_À¾%¨)‹€,rÆðÊxp>ŸÿÈl6ûÝv£Ø8‘Ç&×eá²}~-Ž?í±xÿ…8vª LÞ«üñìÇŸíý³àÉ{–· +|ôYßý< ˜||™ÇRÁ¶ÇöÖúëÒÇ!5 jÊ" ‹óÑÎF‘ðé(>½ub{¡q]/$^í×ÝuýƒæóGoñ;¾Þ†åÎòšœýOô —#çŒèâóÏá wêŸ÷Õ0ùßýžCêÔ‹, ²(x)Ú±iñ±(ÏÅËWÛ°l?g1ïˆcOÄëƒqÍÓ;ôÏÍ̾ֆB%ŸM¾¾Ó¿¡¿½¶x*øN‡Ô"¨+ ˆœy'¶ÓmØoü~Èeú¹t8 ˆWúû,"rþ\Æ®_“÷(çÒãk½OÎ:fA“;™_ŠBG‘;3X@Q}ö1—೉YHd‘EÄXŒäñ¼O?w-ÏYÊ,*ræ>Ÿ 3ŠYXä}ÇYˆäwJ*—ûñ쟅͸Û9°À8`™…åŒ`YXälbY„ä¦|ãŽä9c8Ý´l£,y> Œ,.ζ¡ÉÝÇç;õ_Þ_ûqÀ²Šë…ÁZãìãtS¾m›–M®É‚äJ\3>Û|¼fÇþÀÛ3X[¾•Mùlä·—qÀn@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@ @q/>÷È¡x™E;ÔÛN6{›?üÄ ›·¸î¦>À»c° €Â¢x8/Ç&-^,>²ˆØˆ¶š-®¹Ú\—È<Úzï“}×£¹¶ëìsÆ!Ë"(ªwE»'Ú}ÑNF;Þnc’EÇ[ÑÞŒv>ÚZ´Ã½ï©þšß'Wû¹ìs!ÚÅø—¢øX[ÒŸûŽqÀ2 +êˆsæ0 û£} Ú{ÚP|ÜÑÏß9›x1Ú7¢½Ü†È,<²Xyo¿&ÎYÆ,P^‹v6Ú«ùñ»Î+>àfÆ!Ë&¨+‹,2NÏçó/½› f³ÙO´a2—¿?®ûì}žiÃŒäá~èj.W¶ vd°4¾÷F»3ÚÉ(:>³S‡8þt¾Fòxf#/÷veYÿH8àŒC¾%€ºrS±\|.Š„µaéñ½ý5—ŸŽv* +‰?›£Ï¯µá¾älï?$Ž?߆Â"‹ŒcÑÿÑ~êLîC~#Ú…Ÿ{dÍ®äp〥”@yOñ¥6ÜSœÁ¹6cq$Šˆ¿’ý£¸ø­6¹ÙÝqüýøÛpŸq^›»ŸŒcŸóå d¼² ˳ϛËüá;qÀ² ŠŠâc#woîá¹iX¹<8%–Ë‹OMº¿Ò†MÅòÜ]“ãú¹Üh,‹—÷µa7òщþY¹™YÞë|ýþãwùÜs8H6{›³ð{=¨EPX/>²Èųp¸» »ç=Äåël6û¥xy© EÆ]½ß( –œ‘|¹ÿœ›™=09ŸG.UÎÈ®ùïò¹çpä¸É™ûk«1Vsü剽‡Ô#(®/CÎÅüNÈÂ!gOLºä¬b.O^í}æ“sWûñ‹ýçÕ~lt¸í\ü¿ÝsÏá ‹ÿ\ÖŸKð_oÃýø—&!ÀRÇ!5 H9C˜³Žyïñýóùüçóàl6ûçm(:²`¹Öû,—5·¶}Vrë#Úöâÿž{~¸ÁÁ“c'7úËâ?—ðËð×sæ²)ßRÆ!u ŠëEyÎ6æŒ|Þo|ßät.+Î{’sñì—³•ó…˜ÞÿXddßÅbä›~î9$Qд ãj1[æ8  9ëž3òù¸±û&³ŽŸkÃle¹´8g'³ð˜n –ß#yÿ8#y¬mÿn¹Ö›âÞžqÀ®EÞkœËðï™ÏbãÍÞ.ö>Yx¬OúäŒe,¹¼9gïmÛï[^o7Š•éòäÅçž»€ƒlñ€sýçiA¾ìq@A€Âú²ãœ-ÌG„-n:–ÅÆ¥þš›—åwF>žì­IŸœq| _Ÿ÷g2-^®ô–Èæ-ž{þz³ ÛN›æXïcb©ãð6ÿmì#€Ú¦»Ž›ÏçOmœÍ>Û†"%ï9΢# ‡Õþókqþ™èût>¢,Þ¡ ÷,çìýñ8öñþÏöÏx³_»uÏòÏ=÷@*ØöÀlãÚŒCj²ߘü|¶ eÑ…ÇøŒò ýÜ©±cÞâ3¿Þ†åÎyÍêd§óésÏó³§›—ÁA6îÔ?ŸŽ‡‰¥ŽCêEG.>?9–ECÎæ²ãõÉÒýü9ŸG~x6›=¯grrñã\Î`~­÷ÝúŒÅ>“BäÚâ9(hOÆ!µjËåÀYä ãKýñd)7)ïSÞ*Уø¸Ö—îßyü|\ódîY>ÜågeáòRf//åµËùs`_2X +@a}F1—g±3òú©ÜM<‹ŒË K÷×¢ÎPæle.IÎÂ"—!ç½Ë+ Çó³Î÷ÏnÁ8`YÅM6åËÈñ^ü,6Ö'›”Mûgñ1ã½Èù³ÜÈ,g2W'mÃ=ÇðÎŒC–AÀtS¾é±[ })ñ•¸f|¶ù¸‘ß;mrÜ‚qÀn°å[)lä·—qÀn@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@ ×½øÜ#‡âeíPo›½Í~â…Íoµ/ðî‡ìcq$Ú±IË¢bm5[ôÉ×~É­ú®Oú®Grm™ìgÆ!»MP\ ‡ãåx´“Ñî‰voЉ£Ñ®F»í\´ Ñ.õËŽOúæû•Þw-ÚùÞ÷b|ö¥(>Ö–öÇÀ>e° €ÂúŒc÷E»?Ú™hï‹vw´Ã½[¯F{%ÚÅ6Ì0æ5öv²÷ÍYÆ·¢½íl¿f%~ÇyÅÜšqÀ²j»#Ú©6Œö=óùüÙÅN³ÙìâåÎh¯÷CYl<}q‡¾ÏôÏ —«Q|\µ nÉ8`)Eõ%ÇwµaùðûÛ-ŠŽÇ?ÅÓm˜qL÷űÏÞ¢oöËäñ6ÌF^îíÊíý `ÿ3X&@]yoq.1~ ÚwEG ¿×†]ij0Y‰ã?œÇãõ™8÷é~í{ƉcÏ·¡°È"ãXô{´ŸÊeÌyòÑ.D¡³fWr¸‰qÀÒ +ê÷çc¹XMN;‰çýÂ×¢°øý(&þf?—…J#OnuœÍ¾Ø†ûŒÏõkNƱÏÇùÇr2Þg¿S½Ï›KøÓ`ß0X6@MY\dá‘EÁQ$|jëàlößÛ0ã˜3„‡zß,>~« ³‹yìŽÉçä.ã¹)Ù«ýšÜ¸ìøäü‰6ܳ|´_{ýþãž_Ýfoó> ¿çã€Z5eÅÀøØ±Q›Qˆüiç(<~§ ÏoýºQî6žK‹_ž\ÿÀä|öÍg•n“"?ŠÿÅç—iB¶,Ì7¢­f‹1¯{:¨GPSY dQp}&1 +ŽÜ©sÿÑ^|¬õkFùÌñ,d.öŸWû±Ñá¶sñŸ›žå²ç|ìY>Ç›€ƒk,þsö>—àç.þúñ#mÆ!5 êÊb`¥-}ó±¼—8— ßEÇåñ^|ü‡6,[ž—5·ÉëõkÛ‹ÿqÆ3€|äÙÚpïs†YnpðäXÊ¢=‹ÿ×ÚeøY¨¯´%Cê0ßDañ¥vã^â´š3ŽYtôŸLûwÓ{ø‹Œì»XŒŒ÷/ŸŽÏýÒ·ùo‡}'ÆÔGÛPܯO/{P ®é=É£,J¾ÑÛx›À]“ó‹EG~ä=üw÷Ÿµíß-×zS|ÀÎŒC–FPSY\iÃb£\¦¼Ñn +Ùgz/qÎXN‹¼wÿt¿. •{Û°ãø´ÿFÛ^|löþçf³ÙÇš[8øo8×¾ÚÛ^ŒC +Ô”E@Î8æ¦d&Çó{!g³¸Èû†s£¾c“ó‹ÏÏÇÜm{J IDATüÎÞÿt¿ft¥·,@6óÑg/>÷H¾¿Ô†ÙÍüwä†h6ä ÛiÀ9޶%ÃÛñ°? jÊÂ"€|tØÙÙlö³óùü—¢=ï½ 3òYŒŸˆcæqüWâåüø>Žÿt´ÇâýÚðóœ½?Ç>Þû<Û†BçÍþ»¶f,~â…Ÿ{$‹ŸœÑÌYO¤‚mì-åÿ[ú8 &@A}&>‹œuÌÍÆŽF¡ðT ÏFû©[\öÕ6,]N§Çƒca²ƒ¯·a¹sþŽÕü“ߟ!@.GΙÏéæep;õÏÇñ°—ã€zuåldÎ +æìûÖ#ÅÆÈi§8öLŠ“?n7ž3~w<^ÏDÿ§?8‹˜xùZv1ÏkÖûL +‘k·å¯ýiOÇ!µŠê«Æø”Kƒ×£høm¸'?gÁˇ϶ážýK½oÞŸœ÷ŸþO¶añ\zœÅ|39ëøR–6_Šß¥È‡‡,“ °,úýøãýÉyO~¹#ÿXxd!‘ˇsñr¿4ßçuYXœêýó;åjïóF¿&ïU^[ÒŸû’qÀ²ŠëÅGãîü9Óx´ŸÎBbܰl}œAì;ù;—Ÿíýsùò¼mßälÃ=ÇðÎŒC–AÀx?þZ9û˜ÅǸyÛ†e“þY€\‰þã³ÍÇünÚä xwŒCv›€ë¾Ùùlä·ŸqÀn@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@ [^|î‘Cñ2‹v¨·Ñfoó‡ŸxaómúïØx÷ŒCv“€,"ŽÄ˱IËŸÇbb#Új¶è·Ú­,ôÏdm}Òo= +kKþS`ß2Øm€â¢H¸#^NF»'Ú½ýým(<®F»íÍh¯G{« …Çñhw÷þù~¥÷]‹v>Ú…hã³/Eñ±¶Ì¿ö#ã€e…Ááx¹+ÚýÑŒö]ÑîkCá‘r&1‹Ž×¢îïõkìíd?—³Œoõ¾g£½m%~ÇyÅÜšqÀ²j;چĢ}x>ŸÿÆ­:Îf³¿Ü†ïýÿ‡¢ÿ³;ô{&^Nõ~éjW-C†[2X +@Q}ó°¼o8—¿7ÚCïpI.QÎÇœiü®ŠŽÇŸÎ×(@oÃläåޮܞ9Æ!Ë$¨+7 Ëû†óþá¢`ø'[g³ÿÒ†%Ç—Úpq.%ÎeÄ×zÿÓmXrÜzÿçÛPXäùcñ9öSgúõoD»…Κ]Éá&Æ!K#¨+¿òãœI<=9žIn$–»Ž¯÷–ïs™rÎTÞÅŧ¶:Îf_lÃ}ÆçÚ°ûøÉ8öù8ÿXÎ@Æû'Û° 9û¼¹”¿ +ö〥ԕ…Ľ˜Ï{†ô6žËû“õ÷wMúæ.㯴af2gß׆ÙÉщþGûõ×ï?~›çÃAµÙÛ|2 ¿§ã€Zõâ{¥·±ÈžÏç?<í?›Í>׆™Ã,JÊÝÆsiñËýç¼?ùÉù£ý³óºëEþÛ<ïª,Ìs5[ŒÕ~lÏÆ!õÈ Ã~zòþÏïpþSQ|üëÖï/žœÊ%ÊYÈ\ì?¯öc£Ãmçâ?g/³€ÉGåÒ眭pPÅÞ£Ÿüëm˜µÏñrý¿ùeŽCjÔ5%×wââ_öcyq§¢èø;y.^"Îÿ~»ñX±éçlNÞOKü·ô•99>óüÑÞÓ†àŽ>‚,Ø×ÚPüçf~ã2üq¼,uP— ®,r¦ðõ((þ^îÎcãÌaéïs¿EÇöcYŒÌ>gzÿb‘1o7#Ù'‹ýÓñ¹_úvÿØobL}´ öåXØ«q@A€Ú²È骃 ýuü9g'ó±d¹qØÝ“þ‹EG~›ô9Ö¶·\kÛg:›‡,… ¶üÈ¥ÄÇ{ËeÇ›íÆòâéLdÊG‘M‹ñyäY¬ä¬c+'úçgN‹ÍÞÿÜl6ûXs ßâ-çúÏ9Æ 9—=(HP×x?~>Oüßå(ÈŸiÃFbYHdAžõM7[|†xÎ8ænã9C™÷ŸnÛw'¿Ò[ ›ù賟{$ß_Šö6#¹!šM9ÈvÚ0Ç@Ž…_K‡·ñï`ŸÔ–÷õY÷(@žŽâã7ÛP¬¤;ãØ£ù&ŽÿJ¼œßçŽåÑ‹÷_ˆC§úçcï}žmC¡“ÅJÞã¼5cùð/l¼øÜ#YüäŒf>¾Ìc©`Ûc{ËcYü/}P“ ®qó±ËQ$|2 +†_΃ñú“·èÿÕ6,]N§Çƒca²ƒ¯·a¹óÖãÎrö<ÑC€\Žœ3¢ÓÍËà wêŸ÷Õ0ÓM—>¨GPÐd)~. ÎÙÁ—£øø…(">³Ø·/G~%Ú·Ï¿;Ž?¯gr¶r‡kžŠ—¯E{µ_³¾Ó¿¡¿½vþ$Øw¾Æ!µêÊåŹ,xÜ|ïj O¶á±cãsÊs‰~ΞmÃ=û—úµÙ'‹–óýšý3®õÏÌYÇ—¢½‘×D¡£È‡‡, ¨>û˜Kð³ È"$‹Šœ)ÌÄòûa|YÞoœË‡sñr¿übEÞw|ÇäšËýø…~íÚrþ"ØŒC–IPXÎFñ‘³‹¹48g ³ÉMùr'ñy?>nX¶>Î öeËY`dq‘³’G'×L79ÛpÏ1¼=ã€e× ƒµ(&ÆÙÇqS¾m–-\“È•¸f|¶ù;^ÜšqÀ2Øò­lÊg#?¸½ŒCv“ +@(@  €VZ›íõ¿ØeV@(@  €PÀJ›íõ?ØmV@(@ €{ÀÁg €P€ +@(`¥5€ƒÎ +(@  €P€ +Xi³½þ'»Í +(@ °b@8ø¬€P€ +@(@ €•Öf{ýov™P€ +@(@ €O€ƒÏ +(@  €P€ +X™íõ¿ØuV@(@ €•ÖlP€ +@(@ °Òf{ýO`?ú¿¿ú‡â%¿Eõ¶ÙÛüßøƒÍ½ü·AÆ!ß +¸I/*·¡ ]‚âZ?w$Ú±IËdm=ÚjôYÍ÷Ù¹ÿr88ŒCn7ÛDÑGÇÛð=‘- ‰,(²°8íd´{¢Ý;éw5ÚZ´óÑ.D»ý/Eñ±¶ô?ö9ã€Ý àº^tÜít +‹»Û0«x¾·,<îŒv_´‡¢=؆"$¯ËYÆ·¢½íl´W£­ÄgžW|À»g°[l™÷·¡ ø®h§æóù¯Ïf³Š÷Ò†ÂâD´÷GûSqîÙÅω¾Ïäum(FÒÕøì«–!Ã;3ØMÆ{s qÎ(fQñ§£=…ÅÏö.ß݆™Å\’œEÅwïTt¤8þt¾Fòx¿æroWvóo€ýÎ8`·­xáŽ6ïö‘hßÄ?šœOî'ÎûŽó~ãÇQ`<߆Âb«0‰ëí§Î´a¹òym7k±+9¼ã€]e@q_ùÕÈÄóþá,(r¹ñ‡ŠŽtWoù½qoœ*FÑñÅ6Üg|® »ŸŒcŸóå d¼² Möys)ìCÆ!Ë (ì+Û7ËÙć&EÅÿŽ÷¦wÍï‹cýý“ÈÙÈWÚ°ÑXÎ*¾¯ K˜G'zÿœ±ÌåÍ×ï?þÊÍÏ/‡ƒn³·ùt~/Ç!µŠúÊû³èx  K…ÏLºL‹„,PÆâãŽÉñÜŒ,—¿Ü¾£Ö( Ž#máYæ}¶súüò#MÀÁ–…ùFëò‹1°ú‘OüÁÆ^ŽCêÔ5.9Îû?íÃóùü“yb6›ý¯¶ý;"ûæ b#ÓÂ#Ÿ9žÍÅþój?6:Üv.þs¶3ov_ÿ7oB®±øÏ{ôs þëÑ.ÄXÈŸó¿ù¥CjÔgs1‹ðœmüž(:þqž‹¢ã´áûaú‘JÎ2®·KGã²æ6yKü§¿7g#ÇÇœ}  ›åçgAs¸ÁÁ“ûZŠÿ×Úeø9^rœ-uP×Êð@1ù?þYˆgAqßä‘aÿ³ GãÓ{ˆsyr0y¯ñ‘…ÏšÞÿXdä†d‹ÅÈ¡þù§ã÷~éÛú+`ŠqöÑ6lØ—cmÆ¡ÿïP•uÝT,DòçvêÇÿb¾Faò›mû,ýx?òÝýçcmûw˵vc¦¸™qÀÒêÊ{„s6ñâ;u\¸fZDŒ›—åçd“0;19ŸK•óÞçiñ±ÙûŸ‹BæcÍ-|‹·œë?çXØ«q@A€šrIp¹”øå(ļ …x>+üÞþþþq&2Îÿç6ì0ž›—|NÎ8ænã¹1Y®+Î"äžÉù+½åïÚüÈ'¾¼ù•_ýþ|)Ú7ÚPŒägÚƒl§Ms ¬ösK‡»ñ°? +ê…xYxdÑÅAÎÂgá›óéÇFùŒñ?nãƎF!òl>§<Úcñþ m(Xröþxûx^}ÚP¨dÁ“¿kÞ÷Füî,~r374ó@*ØöÀÞrF>ÇAþÿ±¥ŽCjÕ ñ, +Æ•ã=ÄYxŒÅÂè¢}µÏb}c<…Æ£·ø_oÃrçüìÕ ~w?ãcÐÿT0îÔ?ŸŒ‡Í½‡Ô#(l‡Bü|få³°˜>GüÚ°ô8‹ˆüîxk6›=¯gÆË§âÜSñòµh¯¶áÞæõ~÷Xˆ\»]ìG{9¨EPÜ´ïEHÊûˆ7úãÊRnZ–ˈ³(ÉïŽÜl,ûž>O¶añÃýXÎNæ¬ãKmXª|)~‡"Þ†qÀ2¬x,£üÃ/o~å_]ß ‹…sýTyßþ8C¹Úßga‘÷çþY\ÏÏ8¿u­ïx׌Cv‹lÅÇFYdäráñÞüœ\ÏsùCœÏsY`dqq¶ ;’gy‘ŒM79ÛÈbf¹ìÆ!»AÀMzñqmáØæä}ž»}Æg›ùÝØäLÁßã€ÛMÀŽÞMá0éãÞbØÆ!·“ +@+6„€ƒÏ +(@  €P€ +@(@  €VÚl¯ÿ Àn³ +@(@ €€ƒÏ +(@  €P€ +@(@  €VÚl¯ÿ Àn³ +@(@ °â)€pðY  €P€ +@(@  €VÚl¯ÿ Àn³ +@(@ °â)€pðY  €P€ +@(@  €VÚl¯ÿ |'ø?ÿâûÅK~+êm³·ù÷þÌ—7¿ÝþÀ;3ØMV× ˆ#ÑŽMZóh«Ù¢O¾ndAñý×'ý×£ÿµeÿ=°‡,ƒ °(ÇËñh§¢Ýít´;ÛPXlD»í\´ ÑÎGÿ,,V&ýïí×籫ÑÖ²_ï1ú_Šâcm™ì7Æ!Ë"(ªÏ fÑp´÷F{(ÚÑN¶3‰oF{5ÚKÑîˆöV½¯÷°÷ÏæZ?ÿZ´³ýº•ø=ç°3ã€eÔ•³‹Y4dñÁhžÏçŸYì4›Í>݆åÅÙÿr=í#ÑÿÙú?Ó†™ÉÃýÐÕ(>®Z† ;2X@A}Öñh–gáñþŠŽÇ?ÅÄ?ë?æ2䜭|h§¢£÷:_ãšÇÛ0y¹·+·õ€}Î8`Ùueñ‘3ŠÇ£Xøåñ` ÿ¶ EÉÑ8þ×óX¼þÓ8þ©6*yÍ™IÿçÛPXd‘q,ú>ÚOeŸ¼ùh¢ØY³+9ÜÄ8`iµ†m‰""gsÉp÷ÄÏÿ) +‰¿ÚOçfcY¬œˆcŸìý¿Ø†ûŒsF2ïU>Ç>çËÈxÿd–!gŸ7—õGÁ>c°+³½þ°W²èÈÍÂ^‰á‡âõî6'Ú° YÎ>žœôÏ{ŽsÙñ“c¹Ëø+mØh,gß×ûŒNôþùY‡fÃìä–?¼ùùåpÐmö6ÿ¾³ð{:¨Å +€‚²øøÃáQbãl`>jì®Þ²xÈÇŠ™Ïç-OFaòÛm˜‘ÌâØä£²pÉ¥Å/÷Ÿsgò&ç³ÿ‘~íõ"?~÷âóË4![æ9ÎV³ÅÈ×,Ä÷lP ¨ïû™/oD’÷ ç d¾fÑ‘!»/7ûEÑñßúÛ,*Vúë(¯ÍBæbÿyµþÿìÝ{¬eçuöïÌÜ‡ä ‡¯)RTd§F$#.à•7IQ[Tà mb°¶‘D‘Cµc9V „z!.Ë­ü•@²Ù€”)P HÇAÝÀ©\ ªÀrþJˆÔcøš‡Ã™{çÞÓµf{îž«;$EÎ9‡sÖï,ísöùö™s/øéܵ¾Çnû'ÿùoåTæÜø,G7s´R€u5&ÿÙÏ2Ù± £öçÛî}Kí‡Ô¤PÛ8™ J&{\IÈ_Ìc}Ìuʇö¼Ç8­¹MŽ£qŠÿ¼»ëy&9yßó‡#îiC šƒ ÖOö³ì;™ü¿Ð†>1ö½WÛ’û!u)Ô6Nœ‘ˆ‰$ãgãø}ïŠÄãCÙ0Ž=ι ÉÄÔt ÿÞ$#ßoo2’m2Ù?ïùôúAàfýè‘6lØ7ÝcÙý€‚ŠêSñsê}޾çÆc¹IØ8 ?§&?Ÿç"ÙøR$?Ó/Û;ê˜ß#Gúõ­?ž~·l÷|Àwÿq£?ý€…R(h2?“Žœ‚Ÿ÷ +w ÏÑÂqr³Çhº®¸õkN´aJr¾gnZvÛäõ¼6×>O“Þþt$56KX{—œn»·ý[U?  €ºò; “„æóùÿ‘'"!ÿd6"ËD!G"3™N5ÎÉùäyŽ8žìm³]&!Ç'¯¿ÚãÊúæÉÝÆ‘ÍLFrC4›²ÎöÛ0û@ö…ñ–Kë‡7öGàf¢PÛ5»‰GòñH>þI’•L$n×ÇùßhÃÈe>þõ8ÿsÇãÏÅ©;Û0ztÒþ©6$:™ðä†fW–~÷L`ÆûŸ» \sÀy.g,½P“@]™|dBp!’„FÂð™<Ç¿söÿ©õÄ£ #Œ­·ì:í¿Ý†éÎy»³‹9ú?¾Ð‹ãíϦ›—Á:wêŸ÷Ù0Ú +û!õ(4™ŠŸÓ‚stð›‘|üƒH">½·mœÿT¾ñLÛ½Ïøqþ#m˜¶üä>×|,߈8Õ¯ÙÜÛf’ˆl߀ n:o‡~@- +uåôâœâ˜Iý÷E<q2âXÛý~Èdâ\Ä©ˆoE¼Ü†ƼîþÙ>˜eÌ$å…ˆçú5ñ|ÀþôC–I ®]̤áîˆwG|ÿ|>ÿô~ g³Ù'âp{Ä‹mX_|GÄŸˆö¿¼OÛOµa$sœ¾Îâ4• IDAT|9’˦!þôC–fãÊj1Jùw¿reÔñpÄ­mH<Þy½¤#ÅkŸˆ„â©6Œ(æhäñëµóOæ1Ú¤ £‘®Ä¬½zc +¸¹é‡,›ueò‘‡dá3ãÉHþi†™¼=^ûé<ÇÅk¿Ñ†õÈwLÚ± ÉE^s$Ú=Ö_z  ë_Š8ÉÎ¥?ýKv%‡=ôC–F ¶qð+úãÜ`,“ˆœj|OœûR$?Ó›ä(åv<ÿ›½ýçÛ0™›“åšäcqî³ñúã9ŸhÃ4älsnI?ÜlôC–B ®L:r³°oE‚ð—Ú0 9GsŠpŽ:ÞÓ†uÆ·N®9Ôvw&O¹ËxnJvª·}G6&ÝÖ¯ÏiÎ9ÒyuýqŸþ¼÷~ç°ÎvzÌ'£ð+í‡Ô¢PP&‘€ç½ÂÇÑÀL6Æ[ˆ¥L2QÈÛ‹mM.Ýi×&뙸äÔâoöç·´aóQ&™¨œ^ÿöÞû—jЬ·ì;Ù—.fDÈc&â+ë‡Ô³a@€š~è—¾¾õµ_y_®o1–‰Ç¸!Y®-ÎÄüÖù|þw³ýl6ûÍÞv:™Ï3‘y¹?¿Øv“—t°M’ŽüÎùÚüç´æ¼yNeÎÐs´R€u5&ÿÙß²¯å.þ9j?Nó_z? &3 +ëE€q£±LÂsäðD6Ëû’›4¾íÿ½1Nkn“ãhœâÅ×vw=¿½¿ÿÃm˜â|¬ÿÛ¬Ÿìc¹Æ?üÚî4üýuÙý€º&_ êÁEå@Ž2æˆ|&E<qß|>ÿ¥+ f³¼¥XŽ.æ¨ãÞ$}º†o’‘’íMF²Í•'Þÿéô3ÀM#úÓ#mذ¯÷—Ùø?Kê‡þæ¨Ê €Â¾ö+ïÍ$"Gãs*~nöîŒH8þáØ¦ïHþí6LSÎÄE~™œ;Ò®ýnÙîá¶cpú!˲ûå  PÊמzoŽætãL:Þñ'3ò>ãc›H:þqÖ)gŒëŒ/MÞ&¯?ÑÏ›•Ý6y=§8çÚçiò±ÓÛŸŽ÷´YÀúÛ»àtž}!ÿ›Ï„}yýÐß|e™PW®7ÎÄû¾6$ï¤ãò…H8þE¦gª0®Ù¿Ð¯›îFž#Ž¹Ûø­½m&!Ç'¯¿Ú#úØï|í©÷æãLdr-s&@¹!šMYgûm8&óù·ØRûá ÿé¸i(ÔGÿ3¡ÈQÂLÞ5I:þMFã39ÉÄ"G&3iÈïŒy¼m>í?ñx<þ\¦$çHæÑ8÷¡þ>Oµ!Ñ9ׯËuÈí‡>öÇ[ñïÉOÞ¾Ìm©àšÛöÈsYüZz? &€ºÆÍøòcOÆã?{½ "™øÛmH$NÚ?væ¹^9§;çíÎ.æèÿøB/Œ·?›n^ëlÜ©ÞgÃŒÿí¯¤P@mã­ÈÞ¨¹ÏQû3‘„ä}ÉOFâñäÞFñZ®_þFÄ©6Laþ®c’ˆl¯ÖÌÊú!µl\ÝffG€bÆ)øß‰D!§ çäœj|xòz& ãæe9ø;m˜F<ÏŵO´a +sŽFn÷ó9êølÄKçèø÷’|ØŸ~ÀÒ˜PP$;_ûŸþT&ã4âL22YÈâPo6NWžn^6î^žrZqnä—ëŽs +óFŸl› GN9>ӮݭèôC–M ¨H>¶"ù7ãËéÁ×ÛŒoïæeãNâù’‰Èsm­ÌÑÈy»v“³­LrþÃÀMJ?`™6®Nü· œÿüü÷[ÿß/ÿ©7²ßÕÍËâš1‘ÈkÇiÉãµûµ^ƒ~À²˜PÜ$Aøž×¿•k]ú!Ë L +ÖÀº2 +P€v VÀÚ2 +ظ:òo¬-w€6¤ý°þì(@ +PÀnÀf°¶Ì€Ü +0 +P€l˜lø€õç.P€%P€à.P€P€ ¸ °!í€õg à6€P€P€à.P€°$ø‰ï;ІŠû•íô˜ÿð'þÃΪ? T KÉÿ¡8™D>¯ZÈ„+âbFün.þð'þÃÖŠ?¬=w€ûÃ_Iþo8qwıˆ£­f`Lþ/Dœ‹x1âì~âûÎÿð'`‘Ì€Šä?üÃm(ÜñpÄ=m(ÜqpuŸn%¶#.µ!ù¡ <·¿«íþ¤å°(þ`á2ÉÍdÿÄ|>zÕæíd6›=‡Ó­Ï„ðw ,Ž»o#þ€E±/§µç´÷Ó³ÙìÑf Àt ÀéþÜÔX0X ?óÉÿ¸óo?þžÍxx>âù6$º¹ñMw7ÌßÍfþ®VùÁ`ݹ ,ØŸùÔÜú·O¾'“Ü˯4·¼æ6€ù;ZíG€õg,A/äô÷ù>Ðê&ÿ£óøÝù€%P€%™$ºÛ+ý @I +P€Û@f@Æý`ý¹ `  ¸ ` ¸ ``@(`ãjÚ/ÿ€µe ` `à6€P€%P€%P€%P€P€°quæ¿%°¶Ì€ w€Ì€ K 3 ¾Ëÿû÷:0}þ_ü£gv®Ó&çè±Óc¾_{à{£p£)pH(Åáp’‰´ç6#™Øê¯çùlsd™€Ì#6#.F›‹ù8®Ù^öç‡u °W—þÛ ´?øÅ+ Å-·GÜÖ†„"G_8ÉÄùþ<Ïßq<⮈£m((_ޏq&âlÄËyÍûõ™KKþQথ°Hf0&·¶!‘¸'âîˆc9Úx*â¹¶;µ8“Žû"Œ¸¿·;‘£Œ¯D¼ÐÛçuñÞg$ðúôCM ¸H 2iÈÑÃL:2‘xOÄóùüWóõÙlö×Ú0­x«_’íŠøhóÔÞ÷‹öŸjCrr°ŸºÿÆåH>LC†ëÐX·(ì>zeÄqœJœ£‰™tü@FG™ŒähâËmX|2â]û%)Î?™ÇH@>Ò†ÑÈ Wbve +3°‡~À²˜P[Žfâ‘kßñž1q˜È©Å¹ùŽ6l:–S“ï_Œã‹mH.2É8×?Ö_z  ë_Š8IÎ¥÷Æ®ä°ý€¥P¨-Gó» ;#iøô>mrC²Ü|LPîŽvË"éø|ÖŸnÃôäcqî³ñúã™ÀÄã'Ú0ª™mÎ-ü§›“~ÀRX@~ŒD!G3™øí8ÜÏ?Ð_““1ù¸urmî2þ­6l4–£Š9zytòúm½ýp;³Y»ºþø~á»î_ënÜÀoþþ_û®Qø•ôCj1€¼Wø™H8~<Žßñîví÷Ãå~ÌiÊã½ÉG¹ÛxN-þfž£”''¯î×äµW“üHþ÷Þ¿üPS`½ebžøe»}àâûí™­ÉëKï‡Ô£P[&™xäÔáL2qÈ‘Âc“6™¤dò’‰ÃÁ¶»«øôú—ûó‹m7Qi“ö{“ÿ\Ëœ÷/os–£•Ь«1ùÏ5ú9ÿÅ–ëñá¡ómX³¿ô~@M–öþÿù™í?ø{e²0&™täæbÓuÂóÉãqÚþÔ8­¹MŽ£qŠÿ}Ú&8Y¸7âáþïe¢“IÏÁë'“üKmèW¹“ÿ~n3âÕe÷CóÔµá; ¶‰äã«ï¡LNr42Gs”òÒuš_Y¿¼çÜt ÿÞÆyûîd$Ûd²b>Ÿ?ýf?7ܬf³Ù#mí¿Ò_òo±eöCûÔe ™|ìDò‘S†3rdror‘vúkÓ Äò{$×ðßÑŸi×~·ŒíÝv ^‡~À¢YÀ1&¹ysr>×îŸhÃHeŽ:ÞÕ†ÇG›ýšiò±ÓÛŸžÍf6KX{—œîχ>ñÆÿ»1ýÐß|e™À^c’1G3‰ÈuʯL^ËÇÜm<×,gZ‘IÈñÉë¯öÈkw~äyfç«?ÿP>ÎiÎÏ÷+7D³ ël¿M³lfŸxkÒßâÏÀML€©1Q™®=ÎÇcÒ‘¯½0›Í>5ŸÏŸŒx<.ÎÝÙ†Ñû£qîCyQœª ‰Î¹~í•éÌ‘ðl}õç¯ì~žÓœ3‰q@*¸æ6€Ù^§íÂú!5YÀhï(å(“¥e¼s|1Ç®ó~ßnÃtç³-“_ßéŒÇ[_ý¹‡¶û¿5ݼ ÖÙ¸Sÿ|Úöi³”~@=f0ÊÄ GÇuÊ£||¦ ‰ÇÕûÏf³ÄñÜûFñÚÇâðˆSýºÍ½m&‰ÈöÞ× °¥öCjQ`”Sƒ3ñÈéÂú­ÊÒé¶»f9§íO÷3Ñî‰6l8v°ŸËÄ%GŸx)¯‹d_’oŒ~ÀÂ(pEŽÈõçÊÄ#§ +g¢pº¿4Þ›üB??Þ¦,Ÿgb‘Ósÿ=çó}δëßËØC?`‘ìÀU?òÏl}õ¿¿²A_N×åçHãf¾ÖŸ_Š6c‚‘ÉÅs‡ÛðM2Ž^ޱ×Ys ßý€E1€kôäc{Ϲ=ÏóõW£Ýxoóq#¿ÝMÎ$ð¦é‡,‚ßå& “vÖà ¦p£Y\-Èÿ`}Y(@ +PÀî6€µe X˜(@–@f@ +P€%P€P€°[°Ö–PÀî&€«üÀB™Ø +° +° +° +° +° +° +0 +°` ` ` ` ` ,É¿zü¡m(¹èQÙNùýÙgvVýa K` ~÷ñ‡ÅáÈ$òyÕ"@&ü[3þÕã]ü±Ï>³µâÏkÏX°ß}ìJò{Äñˆ»#ŽEm5‹cò!â\Ä‹g÷ñ‡ÎÿØç`‘,€Šä?üÃm(ÜñpÄ=m(ÜqpuŸn%¶#.µ!ù¡ <·¿«íûœå°(–Àâe’›Éþ‰ù|þôª?ÌÛÉl6{$§[Ÿ áïX3 {Àâå´öœö~z6›=Ú,˜.8ÝŸSÿý= c ,Ð~ó™ßù[mÆÃóÏ·!ÑÍïl¸» `þn6ówµÊëÎX°Hl·~ço=”IîåˆWšÛ^sÀŒü­ö#Àú³–àŸfëw~ö¡œþž#ßZÝä´Óc¿#ÿ°–À’<²›èn¯ôƒ%YX˜Ø +° +° +° +0 +P€v—XkË (@ +° +0 +P€,€Ì€ (@ +ØÝp•ŸX(3 (À(À (@ +P€ì˜(@–@f@ +P€%P€P€` ` X˜(@ +PÀÆÿóËï]õglã¯ü—ïXõgÌ(@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +ؘ­ú g (@ +P€ (@ +PÀÆlÕŸX83`Iþ·ß?u Y{?У²ó¿ú£'wVýa X‚HþÅáÈ$òyÕ"@&ü[3âwsñ¯þèÉ­&X{ +°`=ù¿=âxÄÝÇ"޶šE€1ù¿q.âň³ñ;:¯‹¥ Ô§ýnCàÞˆ‡#îiCà–ˆƒ«ût+±q© Éÿ m(€ä¹Íø]m[‹£‹—In&û'æóùÓ«þ0o'³Ùì‘8œnõfBÀÒ)@ +°x9­=§½ŸžÍf6K¦KN÷ç¦þÀ‚mÌVý `ýäžÜùç¿j3žx¾ ‰nn|gÀÝMów³ù“ÖÿÀB™ ‰íÖ?ÿýS™ä^Žx¥¹ à5·ÌøIw€…S€%èE€œþž#ßZÝä´Ócnä–C–d’èn¯ôƒ%)@ +P€ (@³U`áÌ€ (@ +P€ (@ +ؘ­ú g°ÑL€µg (@ +P€ (@³U`á6š +¬=K (@ +P€ (@€×õ¿þëS¦Ïÿ»?wrç:mòæ²zìô˜ï×xsôGÞ¬Ùª?okÿì_Ÿ:‡ÃmH"ÒN$›?õçNnõ×ó|¶92‰üz™GlF\Œöóq\³½ìÏëDà­Øh*ìãŸýßW‰["n¸­ ‰D޾q>óýyž¿3âxÄ]GÛ0ÃìrÄ¥ˆ3g#^Îk~êÏŸ¼´änzú#7‚%|—žlÜÚ†➈»#ŽEä(㩈çÚî”âL6î‹x0âþÞî`DŽ.¾ñBoŸ×mÄ{Ÿ‘tÀ§?p£(pH2YÈQÃL62xOÄóùüWóõÙlö×Ú0x«_’íŠøhóÔÞ÷‹öŸjCRr°ŸºÿÆåH:L?†×¡?p#)pUi§ç(b&?ІÑÄQ&!9ŠørÖ!ŸŒx×~ÉFŠóOæ1´aòBWóSÀzијÊQÁL8rñ;"Þ3& 9¥8×!ßÑ†ÍÆrJòýã‹‘X|± E&GâúÇúK´aýñKg#¹¹ôSÞnäðôGn(¦r1¿2á¸3’…OïÓ&7"Ë]ÈÇÄäîh÷±|!’Ï·a}ñé6LK>ç>¯?ž‰K<~¢ £™9by!§·ÝÛ”Áº»z+¾7˜l/«?f›soíGàf PLŸV<½?x“‘ü^Èdâ`$9r˜IÄoÇá¾xþÞæÀ¤]&·NÞ>wÿV6Ë÷ÌQË£“×o›Äf?—ïq¨)°Þ²?ä:ý¼ßÅè‡y×ݯ²?ÞÚvo+h€5§PH${ï~¨¿”‰É˜g¢p.ã÷G¼»]û}q¹öëO^Ë]ÆsJñ7ûó<9y=Ÿgr¼¿g&Çú9EÖÕ˜üçTüi± kö³Ïåócò¾ìþx¸_s°é{%lÌVý XŠ/É®Îä{¼Ø8Zxå^âm1Ì[‚e⣆·´Ý$}”ÉI&%™0l»»‰§LFrdóåþübÛMPR&.GúçÈc&#÷ô÷¿eÏ{ÁºÈ‘õìW™üçò—üï<ûBö¥ì—Ù'WÑÇöW’¬¿ ÿo°þ¾ü{§ÆQÆL¼ïx¸ ‰÷m½Éxðoôc& +9rx¤·›®žOË ¦ÆuÎmrœ¶Ï„#™cóùüé7ýCÁMj6›ýD÷Œì“¹«ÿ*úã¸ô`÷kÍ€:òýL¼O\/ñŽÄä‘6ì žÓǑܶ|é:ïyeC³}þ“Ç{ÛÛivûã]+ìó¦?”¢À^™\žsúòÞ¤bl·Ý®Ý8lœâG~¤]û]3®…Î)ίD‚óh³€õ·w ÀKýù¡×º¨[dÛ+¡PGþ‘ŸIÇéIâ½wÊñéÞæõ‚1Ù˜nV–r3¿ý=r´ñ®É¿‘r3“ÿsý˜£™/6›²Þönx¶í®ÿ?´Âþ¸Ù¯Q(B €Ÿþ 'w¾ü{§òýÜXìù6ü±Ÿ‰÷tÓ±qwòl“mÇïˆ1¹£†ã´äW&¯åHãÉþ¾¹¢8“ã“×Ç(›—û¿ç6€T0½ àfžûrŒ£ú«è¯ö?kN ˆŸþ '·¾ü{§2™È„#“„½·»8Fo› ù˜´L×çã1ÙÈ×^˜ÍfŸšÏçOF<?çîlÃtþ£qîCyQœª M®iÎäÿ\Ûݽ\òOããþ±°Êþx®_»ß²ÖŒ@!=‘ÈщŸ&ÞW“œ-097¶<ÊÇYHo-–£‹wŽ/F‚ñØuþùo·aZsN¾Ÿ¥Ÿß¾N{Xw;o“þxqòï°ÆŠ™ü¡ÿz‰w¶Ë‘Áqã²Q>Gñ¯Þ|6›}$ŽäÈãÞ7Š×>Ö†[šê×mîmé,ÓÆÌ=_Ø_N ΄#§ è·$K§ÛîÚäqwò” Ì™h÷D6;ØÏeÂ’£Ï¶a÷óó?ó_4êßý€·Ì öIÁΗþ¯S™päáLN÷—rÍq&úùË=òy&9ý8oé·±ç|¾Ï™vý{˜ס?p#(p]‘tlEÒ1îB>]Ÿ¼™¯õ痢͘XdRñ\v7Ï9fã¨å[™È,ñG€µ¡?ðV)ðšzÒ±½çÜΞçùú«Ñ.GsŠñ¸¡ÙÕÍÌ$ðÖé¼ +¼®7š,LÚYS ¢?ðf)@ +P€ lÌf«þÀ¢™(@ +P€ (@ +P€°1›­ú#‹f (@ +P€ (@ +P€°1›­ú#‹¶Ñš +¬;K (@ +P€ (@ +ؘÍVý€EÛhM–á·þå·´á‹÷@ÊvzÌÿÆß¿³êXKÉÿ¡8™D>¯ZÈ„+âbFün.þ¿kÅŸ Öž,XOþo8qwıˆ£­f`Lþ/Dœ‹x1âlüŽÎ+Àb)Àõiÿ‡ÛP¸7âáˆ{ÚP¸%âàê>ÝJlG\jCòÿB + yn3~WÛ–Àâ(Àâe’›Éþ‰ù|þôª?ÌÛÉl6{$§[½™°t +P€,^NkÏiï§g³Ù£Í€é€Óý¹©ÿ°`n‹ó¡¿ç‹ÿòÛ›ñð|ÄómHtsã;›în˜¿›ÍYÿ µÑT`¡>ôû·¾ø;ßÎ$÷rÄ+Ím¯¹ `FþŽVû‘`ýYKЋ9ý=G¾´ºÉÿh§Ç<~7Fþ` 6š)°úÀc¢»½Ò”d (@ +P€°á°þ6ÜÖŸ%PÀF3ÖžP€ (@ +PÀ†{ÀúÛp@X–ëHݲ IDAT@ÍX{f@ +P€ (@ +P€ (@ +P€ (@ +P€ûúÂWž=‡YÄi§ÇüÃ|pçuÚ_·-ð½Ñ¸¸FOE™ÄÁþòvÄÅŒh—Ç­~~oûL<曓¶›‘xl/ëç€u ?p#)pU$™X¸3âxĉˆÛÚP¤L0^‰8q6â|?´·¿«?Îï—Ë—"Îô¶/ÇûŸ¤ãÒR~¸ÉéÜh +\ÑG3Y¸7⾈#NFk»ß™Dœ‹8ñ­ˆ—Û0²˜×Ýß#Ûgâ’£‹™œ¼ñ\¿f#þ3’xmú#‹ À(G3Y¸;âÝß?ŸÏ?½_ÃÙlö‰8ÜñbÖßñ'¢ý/ïÓöSmÁ§-_ޤã²éÇðšôGn8ÆÑÆÃ·¶!áxçõ’¯}"‰§Ú0’˜£Ç¯×>Î?™Çhÿ‘6ŒB^èñê ý!`Mè,Š£L:rð£‘$|f<‰Â?mC¢#’·Çk?çãø±xí7Ú°ùŽIû/¶!¡ÈkŽD»ÇúK´aýñKg#ɹd7r¸.ý€N€©q£°+úÔâÜX,“‡œb|OœûR$?Ó›äèäv<ÿ›½ýçÛ0 +™›’åZäcqî³ñúã9òŸhÃôã\‡|!§·kokëì{½ß²úc¶9w#~@ÞÞйÎýÄÇÇy{°ïDbð—Ú0ý8GsjpŽ6ÞÓ†äåÖÉÛj»;’§Ü]<7#;ÕÛ¾£ ’n›Äf?w¤¿‡"ë,ûCö§émûÆu÷«ìyýáþïÙ`Í)IÇÞûƒÉBþáed² IC&™\î¯ßÖŸçmŶ&o¹Ó®MÜs—ñœRüÍþü–6ì\Þ&ÏÇ[”åwP&Çú9EÖÕ˜üçTüiÏÍúrÇþ,‚ëýWÑ÷ó`Ó÷JP(¢'ÿ9m8“ïœ*œ‰÷8z˜ FN-~¹?Îc&c’žkŠ3A¹u>Ÿÿݼ`6›ýf’éd>¿Ø¯oýñåÉëý}nïÇLFîéŸ%““ƒ ÖO&ô9•?“ÿ\þ’ÿg_Èä=ûeöÉUôǃMòPŠ@“]Å3ñÎûŠ?܆Äû¶Þd¼?ø7Ú$Œë“3)?ц Ãòºc“·}¾íÿ=2®sn“ã(?ÇÁþ¾Ç"yyúMÿPp“Šdý'ÚügdŸ|°­¦?ŽK(B ŽüCÿJq½Ä;“GÚ0ò˜Ssd2“‡Ú Ü×ýRo—·ËQÅmÜ;j¿w-óÔ4ÊÆþx× +ûc¾¯þPˆS™dä(d&&92™ÉÆ»#Ñø‡cƒ¾ù·Û°ž9w¿crý8ÅüÁ·¾ð•gÇ‘ÂaœÞvlÜa<„!¼’lü›6LAÎë2¡¸{Ò>“™ Ñæ3Ñþ£Çãϵa*rNç?ç>Ôßç©6$9gÚ¼œk»·-“üSÁ¸Ƽ?‹«ìçúuãg`)Ò‹9Ú˜£…{7ËQÄL(E’ðäxM<þ³×{¿H"þvˆƒ“ö]§y®SÎõÏ9ýùB~–~~ûÍý4pÓÛy›ôÇ‹9Kè-üÜ$Š™ü¡5ñžÜ&0§_üÞ.gäèå™H>ò~ä'§ÉÊ(^ËuËyK³Smýß|sŸÖ‹þÀ2)0—|'„œ&œk‡sòðäõLÆÝÌsúðwÚ ÌÆsqím˜¶œ£Ûý|Ž6>Û†ÝÏÏGÒcÔ^›þÀ §Àt“Àqúp&™$dâ0]—¼w7óÜÌoܬ,§çƒ¹Þ8×(oô÷ɶ™häTã3íÚ]Ê=ôGE€+öl˜Ó‚¯·;ÿt7óéŽæù’ Èsm¥ÌQÈù¤]Æ–µÆðúôGA€«^c“À½®îf>I òÚq:òxí~í€7@àFSàûmJ¶Œkï¦?p#)@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +°$_øÊ³â0‹8У²óðÁU¨@– ’ÿCq82‰|^µ ÿVÄÅŒøÝ\üðÜZñg€µ§ Ö“ÿÛ#ŽGÜq,âh«Y“ÿ ç"^Œ8¿£óаX +°@}Úÿá6îx8âž6n‰8¸ºO·Û—Úü¿Ð†HžÛŒßÕ¶å°8 +°x™äf²b>Ÿ?½êóv2›Í‰ÃéVo&, ‹—ÓÚsÚûéÙlöh³`ºàtnê?,˜,P®iÿÂWžÝŒ‡ç#žoC¢›ßÙpwÀüÝlZÿ‹¥ –»Ûç.÷ñðrÄ+Ím¯¹ `†;Àâ)Àô"@NÏ‘ï­nò?Úé17òË¡K2It·WúA€’ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€Ø×¾òì8Ì"ôØé1ÿðÜy«í7NàFPà=q8qd™HÌ#.fD›Ÿzo£Ùlö‰6L+Îöúñˆ?íŸÚ§ý§Ú0"y°ŸºIÇeÓá5éÜp +Œ£‡Û0½8Žwî—l¤8ÿ‰H">ÙŸæôã¥|p¿d£·2qÍGÚ0 +y¡Ç«7ô‡€5¡?°( +Œ2éȑģ‘$|f<‰Âoµ!9çÿJž‹ãÇãü/¶!AÉk˜´ÿbŠL.ŽDÛÇúKÙ&׿q6’œKv#‡ëÒ¸á˜7 +»"’‡E̩™Tçÿ{$ÿM97Ë$å¶8÷ÑÞþómX_œ#‘¹FùXœûl¼þxŽ<Æã'Ú0ý8×!_È©Çm÷6e°î¾×[ñ-«?f›s7ä'àmM ˜}îÞ&óö`߉Äà/ÇñŽ6$·µaó±u<6y«\kœÓoœËÝſՆ Æ2ÁyGo3ºm›ýܸ~Y€u–ý!wîŸÞºo\w¿Êþxk¯“ÏÀšR($’޽÷?Ô_Ê?ü¯ŒL¶!iÈä<“ƒÛÛ4äíÄÍçóÿ6GBòÛm‰<Üßg”»Œç”âoöç¹#ùÉÉëù<­Ìï L>ŽõsЬ«1ùÏ©ø9ÒþbÄËmègãzÿUôÇÃýß<Øô=€ŠèÉ&™|çÆb™x£…¹Øù6$%¯öÈÇy ²»s£±ñ}"Ùø?ûÃL&6úq”S–/ök[|yòz¶?Ò?G3¹§–|Ÿƒ ÖO&ô9•?“ÿ\þ’ÿg_È¢@öËì“«è›ä €&»ŠgâIÄÃmH¼oëMÆûƒçýÄǤa§/Nß+’¿˜Ç>ê˜IÍ¡v­qs›Gù92áÈ$åX¼×ÓoñGƒ›NôŸhCòŸ‘}òÁ¶šþ8.= €:òýL¼O\/ñîk3‰¸ºYYÄ™8ÿ³qü¾ˆwŵʶqüëqþËmH"öþ;ÓµÌSÓd*ûã]+ìó¦?”¢ÀTNËÏ]Á31ÉÄ`Lr:òó·F’ñ¥H6~¦·ß;Ú8Nñ¿cò~Óïšq-tNi~%ÞëÑf ëoÚþ£õ{-º?n·Ýý(@ Žü#?“ŽÓ“Ä{œrœÓŠ3©§$ß׆‘ÄLr”ðH?n¶ÝÝûÓt=qÊÍüNô'•»&ÿÆøïdò®sS´›MYo{7<Ûv×ÿZaÜìÿ†"@ +ä=Ç¿ð•góýqä0ÿØÏÄ{Üt,_Ë„"’{æóùoåÉHL>Ù†¤e»·ÍÄc:Åø|¿n”#'{Ûl—ÉÇñÉëc”÷%¹·¤‚ém7ûóÜ—#“öì_«èãƒãç`Í)ñá>¸õ…¯<› B&¹ÉØô¶cc2’£wŽ×DâññH:þI—L n×ÇùßhC"Ÿ=Îÿ\Äãñøsý=r:ÿÑIû§ÚäœiCò®];­ÖÝt-‹«ìçúç˜XS +…ô"@Žæ(âÞÍÁŽöã‘|4…Ïä qü;×y»ÿÔzÂц‘ÅÖÛ?vößnÃúçœþ|!?K?¿ýæ~¸éí¼MúãÅœ%ô~n +ÅLþп&ñŽD$Ïç(d.8IÇ?ˆäáÓ{¯óŸŠÃ·"ži»÷¿#Î$ŽÄ5OîsÍÇâðˆSýšÍ½m "ý€eR`”#ò9xÜÿr$ +O´a²‰Ìe¼?ùsmHLÎ÷k³M®%>Ó¯¹­¿ÇvÏmÌ{šçîçç#é1ê¯Mà†SàŠ¾Q`NEÎD"“L&r„07Ëï‹Ü; wÏ5ü9m8G/ôË_îí3¡o[6^s¡Ÿ?Û¯½´œŸn^ú#‹ ÀU9IGŽ*æ”à)ÌäcÜi|¼íØÅ›ãÈa¿Ã@&™TähäáÉ5'±e­1¼1ú#7š×è Á¥H"ÆQÇqs²«;˜ïMzâñj\“£‰çÞÈ5ÀëÓ¸‘Ø×õ6'»ÑׯOàFP€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +P€ (@ +PþÿöîîÇ®+Oó*IQ¤D‰T«ÕÒp¦Ç31’ü¹ ßÄJ:ÉÅ8†Ó–!ÙÖÀ2Æ3˜Æ8# 4˜‰ 0Fì Û­4 Çv#¹H€€WArÿ!p÷°Õ#uKâ—øQü¨¬—{mr×QIIE–x~Ï,œ:{¯}ª +àBñ÷®µ× +@(@  €P€ +@(@Øï=w¨¿lôvh´Û£m¿öê™Ûù³A5Æ#»ð@£˜ØlS!1»Ù ‰[ãܑގ-Z +íÞ¶z»Öû\Ë×éÿxrX?Æ#_”€ûêÅB +ÇÛôw#-D +‰G{;ÙÛs½^ô»ÙÛõÞÎ÷v¡·K½ÿå^t\쿬 ã€/CÀžF±ñLo§ÚTP<Û¦ÙÄó£¥àxº·z;ÓÛËm*>r]f?íí½}ØÛ½îŸy^ÑŸŸñÀ—%`W‹bãÅ6¿ÜÛóÛÛÛÿxccã?ë_ÿE› +нýRoÿv?÷îêçô¾ïäº6!q³öMËááìŸ1î#ÎÒáÌ$¦˜øwzûK½ øÝÑåWÚ4£˜¥È)&~e·b#úñ·óÚ 7Ç5WF»ú(XÆ#ûEÀnžjS!ñõÞþroÿn/~kqþkmº8÷ç>ã—ç½°øa› +Š;I¿îõqê•6-Sþ8×ö¢æºÝÈá¡ì ;ôB ;ˆç¾áYfüë+ÅF<3ZþŽœîç¿›ƒ½ØøA›î/þ¤M»ŽŸìǾ×Ï¿‘™Çþõ[m*drò•,=n÷Sëîs?Šï1Çô¹ø¥;¾òÅìò|𘠓ü]˜7Ë,â™E1ñÿö¯ÿ½Ñ?ýޝŸ^||f!ßoÓcù¼o´iéòìÄ¢mcùœ#MÀzËx¸ÑîíØŸ×ù¾ûƒét|oû¬9@!c6qù|ð#ãT +“ÌÆçïBv©MK„_Y\¾,6Û½¢ã©ÅñlB–%Å?ÕïS€<7®Oñqr°®æâ?Kñ3ÓþQo—Ú‚åß| +ðƒGÇ÷ÜlÆ@ €"FñŸÙÄßÙL,…÷<[x}´6Žg£±_ÛÞÞþíØØØøÚοGƵ)B–GŠ–Ìl^ï¯c³¹Hyf¼¦ùÚøžùœÍë'ã$ã+Ån™ öúK“17›â @cÙfûæÇˆ}³M…÷‰Ñ%…AvÏŒdŠ‘_]ÿW›þ^,ÿf¤(ùtô?Övš—/·Åë,?G +Ž)'û÷øÑ—ýÝàIÓÇÔ·ÚTü§eLži3ç[(BPGþ£ŸÂûÔ^…w/.rñ3‹bãÿnÓߊyéþ,÷$g†2÷Yù˜å½Ì«ÅŲÊæñxúÇc64 +°jcþ¢ÿÁnúñÿèNÇÚv.ÛŸ—ø?;Þk;ÿÖÌ÷BgvóÓ~ý·›[X«·|<Þ¯ë»y”ãñÖhB€"uä?ù):>YÞó’ã,žw%¿¹û建Ùv™•œg#3Ûxzñ=Z»·´ùâxͦh5›²ÞV7¼ÐîÝÿäÇãÖø9„E +È3Çß;{.ÿÙ¿ÜÛÏÛôŸýÞó¦c9—" EÂǽ y³ÝÛ˜,ECŠ“çÈ~þoÓÎâùŒ£‹o5ïXžÏÍÌå©ñ9³¹ÊsÉ/ë= +–Üï3vR´gìÄx¼Úîí5 (@PÄk¯ž¹ñÞÙs RpdðåcÇæÀ¼Ï¬á_´{ÏϦyüØÕÅÇåÙâÞ¦¥ÌG{ònžOÞÛýëï÷cÏ·i)òñ~ì;¹ }ÚT œoSñq|Ïå=Ê°Îæ=0¶Çû9 8ÈñxqüÛ €µ'(d„).2¿,¼çÙ¿ü]8Úî=—<3ˆ)8æ"aöozûñ8ž"åÆ|¢¯ïñíÖ¦ûŸ³üùJ~–qüÖýaÝÝþŠŒÇkY%ôå¾êÅ,þ£¿[ဠ÷ ÏËl}f'SP,ïEþ7mZrœâ!K>Ë”_éÇÛ«:v3ÿIo´iök_~xÂãü¸øœŒG¾,÷µØ<0Ë„—÷(oÍ÷ñ' ¤°HQña›îYÎ,e6»¶h7Ük _œñÀ—!à›.Ý^|sWÇýÊYbèípÿçð`Æ#ûMÀÒÑ6;ÔÛ¿µ½½ýOö긱±ñŸ´éïÈæèÿë½ÿ»»ô{§¿Ö ÖÕnì›ï»?Èñ˜Ï8:®·Àš²ÇóÄãöxŸÙÆG—mnooÿÆòs666þ´M3†)Fž[œÊ.ãYRüÓñ>÷%¿´8ÿÔøü\³œá<Þ„¬¯¹ø_>²ïR›B°ü›Ÿgï÷x<:¾çf3öJ1Šÿ̦@È£Äæç‰Ç<ŸóO÷ã·æëú×ÿáêge‰q/:þ§6î+^œÊÒäÌl^ï¯c³Ã£ÿ3ã5ÅÈ×ÆÏ’âd³ÁúÉ8É£ö–ìËXH(q™1yãq³)þJ0–ýg¶o~¦ø7ÛTxÏK‹SdðËëzQñ?Œc¹8…Å󽨸¯s®¿þ~þ_·Ïíó}Îmñ:;4ú§Ø?Ù?ãG_ú—ƒ'L7ßjÓ¸J˘Ìÿ1ç[(BPGþ£ŸÂûÔ^…÷x4اcs°ôO±1ϦPù¥~î_ôëÿú8–"d{—ïshñõÒ²ÊæñxúÇcú…XÊâyõ!'ë IDATWñ™‰¼>ŽçqdY¢üì¢ÿj±1/ñŸûk;ÿÖÌ÷Bgv3…Í·›[X«·|<Þ¹ßEíÑÇ[£ ŠÔ‘ÿä§xødQx/—gðæY<ï*¾9®Û\|Æòâ'Ë¢c~ùõqýé¶sóyióÅñšMÑ>j6d½­nx¡Ý»ÿÿÈŽÇ9\!( Ïïì¹ügÿro?oÓöSx/7KáYø···³¡X– ¿Ó¦ Ä®sÙ¬l¹ÉØê³ÃS¨¼4>7…Ë©¶sWò¹úd|îGÍc©aùÀ­ñ>ûr¤€O~ãñêhóÏÀšñÚ«gn¼wö\€™]\}ìXŠ‘y9þ½ðx»ÿ´ÝÛŒ,;’¿ž/úñÔ_ÎÏ_÷ãÿ ·7ú×ßoÓ,åñ~ì;£Ï»m*rrMŠ˜‹ãû®>ÿÖÕ¼Æ?®91>ãÖøÌÌ6žkÓîç—{ÑcÖîÏx`ß ¸cl˜¥È)$R|¤˜È a6Ëß‹ìÍÇrŸq– gæðʸüÒ蟂"÷?µ¸æÊ8~a\{ýñüFðä2xÜ•™À^tdV1K‚3S˜â#˳ƒøö8~m´­yæp?ã€/KÀgŒâáHoÇ-ÅÄvo×ÒzŸ¼Þ—ìÕwkÑw«·çïëÀx`¿Ø¡›ýåxo'{{®·Óm*"Žöv³·«½}ÒÛ…Þ.ËŽ/úæëãïõÞξ—úg_îEÇõÇöËÀÎx`? ¸kÌ4¦`x¡·{{¥·oôölo›£[ŠŒz{¿·KmšYÌ5/vrôÍìâ§½ý¢·Ç5‡û÷8¯è€3Øo–žêíù6¿ÚÛ¯moo¿»Úiccã÷ûËÓ½}4¥ÈøK½ïïÒ÷ñ™sÁr³7-?†2ØWîKŸiÓ²á_j{Ñÿa/$ÞnÓLc¼ÐýÑ}Ó/…Ç›mš…¼2ÚÕýý `}< +f¹§8K‹_êíWæb£ +ÿªM»‡§ 9ÜÿFŽ÷×wú¹?×~mþ~ì‡m*(R\ëý^§²|9÷ÜÛ…^à\·9ìÉx`ß ˜ï5ÎÆbÙ8,ÅÙÅéyñÜ'|«ÿºÿÅ8—%EÈ[w:nlü M÷2®9Ù}¯Ÿ#3ýëôËòã܇|%K۽ǔÁº{¨GñÀxLŸ‹ûø{ð%(f—çƒGþä¾ál6ör/~'{p¶M3·}Stü³6Í*æØS‹ÏîâÙŒìƒqM6,;¾8bѶƱ:Gš€õ–ñÇô-Û7ßwã1{×Ú`Í +éEÇêóÁŒSùÏÿ©6Í6žZ\’bâv/@þóåçô‚ã_´{üÑÅ©ì2ž%Å?]\ÿÒÊçÍ(Ëß 'Ç1!ëj.þS¤g¦=›õeÇþŒ¡ü›Ï:ˆñxt|ÏÍfì” (bÿÙT,ÅwfSx?½è’"üÅqþŽ^hü•Ý>«ÿë£èÈ2ä#‹SYÒŸ™ÍKãýµql–¿;ÇÆÏ‘×#_?KŠ“Íë'3ë+)þsûËû÷Û +düdÌÄxÜlŠ€RŒeÿ™íKá¢â›m*¼OŒ.)PRäâåáyÓ±OFŸçz±ñ7r|ÿk›–//Í÷9·ÅëìÐø>)öOöÏøÑ—þåà ÓÇÍ·ÚTü§eLæÿƒó­!¨c¾?øÔ^…w/ þû¶øÛÐß§ß|q\ËLcŠñ>³Û»|ŸC‹¯—–ÅT6ÇÓ8Ó×x(DÀÒ¼dx–™ÆŸ6ÏÞ?³8¿ZlÌKüŸïµkæ{¡óÌñO{ñòíæÖßê-·Ï.×ßÍ£·F!¨#ÿÉOÑñÉ¢ðž—߯¹M`¹„øú87)–÷gã±eÑ‘åʧÆu)PN/¾G¤˜Iñq¼fS´šMYo«›^h÷îÿ?r€ãqk|ž @yæø{gÏå?û—Û4{˜ÿì§ðž7K‘¿ ϯ\šc™aLQ‘B$’[œ_}vxf_Ÿ›þ§Úb³v¯ÊLæ¥ñ3x ,¸5Þ§ÀÏØK~ãñêhóÏÀšñÚ«gn¼wö\€y<Øò±cs1’ÂßÝÞÞ~··ßì_ÿã6-ÑO~¢{=ôãÿ¨¿œŸ¿îÇÿAooô¯¿ß¦Â%Ë“÷cß}ÞmS‘“kRü_l÷žg®ø§‚yŒy–~r<^?Çêí¬!@!#ÈlcfâW ïY*|g&pQtü½=>îÇmšÉ»Ï*Ÿ ’]ü¬M÷?gùó•ü,ãø­/ò»À¸ýײJè ÿ<1Å,þ£¿£ðî…È\ß½ç¸¿Û ˆ?YöëÇÞiÓNäÞî=_üÙ~üÍþúJïÿöê÷LñÒ_~Ò¦ÝËsÍÖ>ü*ðÄ3xœÜ1ö ˜g"#K‚·z±ð·Û´™XާPȲáÛ´—ÀåÑ7÷%ç^âó½ÿ[mÚh,KŽSÔd‰qfϵi÷óËý{™õ‡û0xÜ•B`ì0oX–{“SXä}sÁ1ïbž™Ã+ãÒ|ëRPé»Õ [ü—€5a<°ßÜ1Šgz{®·z;ÙÛñv¯è˜ Ÿöv±·ó½]ïmsô}~¼æïËÍq.}.ôv©˽è¸þ˜~%xb< +æå™1LÁñboßìíkm*:žçæ¿™E¼ÔÛÏ{ûi›fSp¤Hùú¸&ï3»˜Âä½}ØÛùŒþ½Î+:`oÆ#Š€YŠŽ§¶··ô0lllü6Íï´i&rsº™eÊ–Ã}ì;_ÆéÞžîíd/6þp·ýøÛyí…Ç›mš…¼2ÚÕÇõCBÆ#÷%`–ÍIJø“^|»MKŽO×,'>ÕÛó½€ø÷Ó¹÷ù³6ÝœöõùCúñ¶© Hqq¬÷}œz¥M÷ÜÛ…÷Ξ»n7rØ“ñÀ¾Ðòÿ^ä^âËmº—8…À'm*6æâáH/þÓôïEÅ?kSá ÈžíÇÿþ8þƒ6Ý_œk³ëøÉ~ì{ýü™yì_¿Õ¦åǹùÊØ±ü~7ƒuòPâ;€ñ˜>Å/ ÀW‹ ˜=ž+>#ׯ×Ù,,EÃÕÑ7ËŠŸ_|Ìûm*âsî™Åñ ãÜãs¾Ñ¦]Èg'mkÛëñf°NV×—×ù¾ûƒù¬£ã{Û`Í +Ùã¹â1&[£Í…dzã}î~#¯Ò_ε©¸x¦Ý+V"…Jf":Þg³—çó>Hm–¿AwîWn;oëf.þ3{Ÿ™öÚ´sÆÖ¼ãÿAŒÇ£ã{n6c @{Þl³ÁúÉÌzîçÏËL}þg,¤Ðϸ̘<ˆñ¸Ùÿ¥ +¸ÏsÅçBb~>xú¥€H¡ðÜèóâööö?L§ÿ¶MÅF +“5Ïîòíæûœ[Û9ÙÆç§àH!sòao뤣oµ©øO˘<Óf<ηP„ Ž>W¼µM³…)Ò3#™ûŒ_XtÉrâÜ‹|~|^ +˜í•YÞ˼Z\,‹¨l§p<¦¯ñPˆ€UùÛeÉyäØ ‹ÙÆ?mÓ¬d +Ž%YQ‚ãÖʵYÚ?ÏDk;ÿÖÌ÷Bg‰ó§‹Ç›¹€u¶z ÀÇãý‘û]4<Êñxk4!@€:v{®øê’ãó£_–%§hxnq}ŠŒ‹£]צàØZôÉýɧÆ÷Élãé¶ó~å,ežïoÎk6Eû¨Ùõ¶º à…vïþÿ#8·Ú½Ð@P€ €=ž+žÂ{uÓ±&)æ™Ãe±pi\Ÿ×+£Ï™üEŸ)/ÏÍýÅ)>–EË\ͳ–5¤†åc·ÆûÌÚgS¾à1¯Ž6ÿ<¬9@¯½zæÆ{gÏ¥`HÁ‘"a·ÇŽÍ³wîOÞÞÞþnNnllüQ› +”ÌH¦Ø˜M–÷¿èçßé}ßΣÉú×ßoÓ½ÊYμûÎøŒwŸ1Ï^Þn;ïQ†u6ï1ß§?‡9/ŽkW÷` +!@fS4, ï¹0Éß…ÌJÎKƒg¶é¾å‹ãÚ|FІ ãÜósÇ^`¼¾Ç·ÿY›–5çš+ùYÆñ[{ô‡uwû+2¯e•ÐþüJ|• ŠYüGÿ3…w/Fò’b#Ë‚Ï/N¥XÈlafî··ä}žC¾¹±±ñf}%3«ŸÛÏeæò'£ï¥¶ó>e(Ëxàq°”eÀ)2³xn<†,rÏ~ +ŽÜBp§PéEÇ­qKÁü·$ÇÏ÷kÞjӽʛãX>+Kª™ÌZ^εç×'šñÀ¾pטIÌRâùþü ãTvOqqe¹T¸}½÷ÏÌdöÈRäY~œGú^9žÏ:?> xã€ý&`‡Åf™y\Þ“¼µ¸oÙ?EÇ\XÌ÷ ç¾åì:žÌk‹výÆððŒGö“€ÏXl¸<¶g¡0–_í×d61³•ó†fww=WhÀc<°_ìê‹÷ÛÐ øâŒGöƒ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@ØÓ{gÏê/½‡n÷¶ýÚ«gn? ï¡ÑwÏþÀçc<ðe øŒQ<éíØhGÇ©­Þ®õó×úë»ôMKá±½Ò«÷¿õxxòì;ôâ`³¿ïídoÏõö|oOÓ×{;ßÛ…Þ.ö¾)(>é{z\›c7Wú_êý/÷¢ãúãûmàÉf<°ŸÜ5fS0¼ÐÛ‹½½ÒÛ×{{zt¹ÚÛ‡½½ß¦"äêxMÿ3½½Ü¦B%EKf?ííãšz;Ü¿ÇyE<˜ñÀ~°”¥Ã)Rlüjo¿¶½½ýî²ÃÆÆÆwÛ´9}ç‚#…É_^í;ú¿Ó¦ÉÍqèf/:nZ~ d<°¯Ü1fs¿p–§€øL±9Ö‹ˆßkSq©M3”gvë;ú¿×~Í›mš…¼2ÚÕGñ{À:0x̲QX +ŽÌ~}. z¡ð/Û´Ø·ýø_ëíûñßiSÁ1Ï8¶Ñÿ‡m*(R\ë}_§Ò'÷ÜÛ…^à\·9ìÉx`ß ˜eÆ1K‰S@œX9w·àXKa’eÇ'zQñÛwNnlü M÷2®9Ù}¯Ÿ#3ýë·Æu¹ùJ–·{)ƒu÷yÅ÷8Çcú\üâ¿O +@1»<üÈ8•Â$Â3mšqÜ\\–a·‚ãð¸þèâXvϒ⟎÷ù¬—çó>Èsãú|öÉqLÀºš‹ÿ,ÅÏLûGmZ®Ÿlžé?ˆñ8o¸ÙŒ=€EŒâ?EŠï<&,…÷òqbyXúÜ™!Ìòáííí¿ÕÛ¼úYýÜ?oS’Âaù·$…If6/÷×Ú½b¥¾ÇÆÏ‘×#_?Ëj¡ë"3ë_)þsû˵WáÝ “ßjS±qº÷ù›ãØÿÒ¦¥Ëq¼ÿ¯zûcwñÌ(®Ë{™W‹‹e1•ÍãñôŽÇì`<"`)3Ïö‚âïçÍ(*rñ¼Cxvÿa?ÿ´±ôx¹l^âÿìx¬íü[3ß ÎOûõßnn`ý­Þðq»·Äÿ~õx¼5š @ùO~ŠŽO…÷¼ä8Eyfówáäâš¹p¹1Þ_o;w +O±±|YîW>5úe¶ñtÛù³ÌP¦ø¿8^3“ùQ³ ëmuÀ íÞýÿGp…EŠŠÛT€d×ñíÝú?¾ßž\Æ#ûMÀ£ ¸Þ‹ˆyÖq¹9ÙÝ]Ì—…ÃXB|µ_“ÙÄ‹‹kví<ã€ý$`W{mN¶ß×f<°P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@ÀžÞ;{îPÙèíÐ8t»·í×^=sû}¾{ö>ã€/KÀgôâa³¿ííØhóß‹­Þ®õó×úë£Ð8²è›–Âc{¥ÿVïëñþ&ðä3Ø/vèÅÁSýå™Þžíí¹ÞN¶©øÈ¬áõÞÎ÷v¡·‹½o +Šü-y~ô=ÝÛñqìæJÿK½ÿå^t\¬¿<ÁŒGö“€»F±‘âá…Þ^êíëãë¹à¸ÒÛÏ{{¿·ô½>^Oõv¦·—ÛT dÆ2³‹Ÿöö‹Þ>ìíƒÞ÷ïq^Ñf<°ßÜ1–g¦1Æ+½ýz^···ß^öÛØØøÝ6 )4¶ÆkŠ“_ï}ß]ý¤Âµß¬IDATÜÞÿ61›ãÐÍþ½nZ~ {3xÌRDd™ñ\<ü“Ý:õãÒ‹ˆßkÓÒâ+ãõ¥ÝŠÑÿNÁÒ¯y³M³WF»ºï¿¬ã€}'`Þ1<›…å¾á,3~e>× …ïµiép–íÄßëíûñ?Çkæþ?lSA‘ââXïûú8•ÏÌýÇ÷v¡Ïëv#‡Ï2xTDv OÁ‘û…_X̦ØÈ=Æ)²‹ø³ýØÿØÏÿfoÿ°YÉÃýë7Fÿ´éþâOFÿ“ùŒœÏgö¯ßjÓòã܇|%K۽ǔÁº{ØGñ=îñ˜>Å/ ÀW‹ ˜]žYnüô¢Í²,xž%¼=®;½8¿ü:²»x6$û`ôÿF›–$ÏN,ÚÖ8–BçH°Þ2nô–GðÍâ›ï»?Èñøôø~‡?kJPH/:VŸ~dœÊþ³Üx~dØlc´¹Oú?µ8ŸMÊ–3™Y‚œâä§ãý¼!Y[¼?>¾W¾OŠ“ã˜€u5ÿYŠŸ™öz»Ô¦,ÿæS€Äx<:>c³{%ŠÅ +„ÙY<…÷<»˜¥øóùÍÅe™!Ì#Ų|8…Ç‹ãýìØ¸v–¯3³yi¼¿¶rþð¸æ™ñšbäkãgyjå{úÈÌzµ—â?·¿äßyÆBBŒ»ŒÉƒ›MñPŠ €±ì?³})(R4|³M…÷‰Ñ%…Áü,ð›¶½½ýVo«ý?~ù›qªûöâ£çÛ –æûœ[Û99÷OÁ‘bÿdÿ¬}é_ž0}L}«MÅZÆä™v0ãq¾õ€"uä?ú)¼OíUxMÁR”\žõ¾ó>Ÿy«}ö¾áå½Ì«ÅŲÊæñxúÇcV…XJñû’¯Í»…/Oöcÿgyºÿ+ãPf)w[âÿìx¬íü[3ß ÍÌ>ퟗÙK·°îVoøx¼?r¿‹Ú£s` (BPGþ“Ÿá“Eá½\rœ ÃRl¤XÈLa–ÿó6åó²âÕúRÐl/ÞgÓ²Sãû¤ßéÅ÷˜¿ÏÕq]^³)ÚGÍ&€¬·ÕM/´{÷ÿ9Àñ¸5~!@€òÌñ÷ΞËö³”8ÏÏöSxÏ›Žå\ +‡;³…‹çŽÿ«v¯xIáq«Ÿ{uœû~› +Žåß’+/ÏM‘’âã¹Åù¹ÊsÉ/ŸÁc©`ùÀ­ñ>ûrdÆ>øAŒÇ«£Í?kNPÄk¯ž¹ñÞÙs Rpdvqùر¹É,äÝ]Å{qñ_öÂâk£Øh;gܦ"þpïó§½ïïd‰ò(Dž×ïǾ“Îýø»m*rÎë.Žï»¼GÖÙ¼Æ<Žæ0à ÇãÅñs,? €5%(d„)2¿º9Øññú|/R<üiNô×ßXýœ~þ÷ÚTp¤pI¡ru>×û¿¾Ç·ÿY›îÎòç+ùYÆñÕMË ŠÛ_‘ñx-«„öå7à+MPÌâ?ú; +ï^ˆäxf!s‹À¹^Tü~/þpõú~ü»ýåÿëí§m*4ò·äB?þf}e^®¼Ë5?éíƒ6ÍRníßoO.ã€ÇIÀ,3òY<ïÆs<†ì™q>JŠ…¿èíý6-ÎŒãáñšëÏkN´{Ë”ó™™m<צÝÏ/÷¢Ç¬?ÜŸñÀ¾pÇØ(0K‘3ã8?{<3„Ù@,/î<ެMEC– Ï÷¯WƹÜoüÔ¸ææâx®Éýÿ×Û/O(ã€GAÀ]™ ìEÇüø±)>² 9;ˆg“°k‹vc^¾Ü¯™ ‹¶é>äû^ÜŸñÀ~°Ã(®÷"bžuœ7'»»ƒùjÑ0–_í×d6ñâÃ\<˜ñÀ~°«½6'Ûïk€3Ø(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@(@  €P€ +@ÿ?|ÐV7@ÔžýIEND®B`‚‰PNG + + IHDR¸½A÷ +7iCCPsRGB IEC61966-2.1xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð +Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX +?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j +õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ +{{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% +5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óûpf* pHYs  ÒÝ~ü IDATxœìÝAŠd7@Aý"ñ=|<ßÖç1M·1˜ªñd^ÄjfVÚ ÿU¦4¿ÿñçÏ®6§ì'@€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€0k=§Ïlf @€ `ÖsúÀn& @€wÀýL@€ @€³–‡àv& @€ @€f=§ìf @€€q ÜÏ @€ @À¬õœ>°™  @€ `¼÷3 @€0ÏéÛ™€ `Ör ÜÎ @€ @À¬çô€ÝL@€ @Àxîg @€f-ïÀíL@€ @€ÌzNØÍ @€ŒGà~& @€ @€ @€ `ÖsúÀn& @€ `<÷3 @€ @€ @€³žÓGv3 @€ŒWà~& @€ @€ @€˜õœ>°›  @€ `¼÷3 @€ @€ @À¬çô€ÝL@€ @€ÌsúÀv& @€ @€ @€f=§ìf @€ `žÓ'¶3 @€ @€ @€ @À¬çô€ÝL@€cîg @€ @€ @€ @€€YÏé#»™€ `Ü÷3 @€ @€ @€ÌzNØÍ @€ã@¸Ÿ  @€ @€ @€ `ÖsúÀn& @€wÀýL@À/À,ÜÊ|€¸–  @€æ}ùßã@¸•  `Þƒÿ6àZ& @€€_€¸•  àlÀµL@À¼ù7×ò +ŒÏ~¸Ÿ; @€>Àep-à@0¸L@Àøáîç°xL@€xÆg?ÜÏ +xL@€^€ @€W ÀŒþà~^€+ @€W À @€g ÀŒßýà~ž€+ @€W Àà0.€€yöûþ€kY€+`<V À +X€ @À¼'ÿ­ÀµL@€^€ @€00ïÕwÀµL@€ž€ @€0X€€ñÝ÷³V À`L@€¸L@€V à|ÿÀ½¬@€|îp \Ë`L@€V À`L@€Ÿ`®e>—ž<°• pX€+`¬@€°& À`¬@€°V À +X€+`L@€; À +X€+`¬@€0î€+`¬@€  à³`®e°& @€+` @€€Ï%€'Ole°& @€Ü& @€+`ùþþþÏß_¯×¡“ÿ7+ñýõµ~¾þúçOÿþËkýÌoë5~€ÿãó7{÷¯$ÇQp¸g·ïN– 611@ïCʳð:$~ +R  +lc[H:éþ­¸YY²x½Uóû>ÕÕuõ\ÐÙîüÔ=@ÀzóójÜ¿¹~ßçvójÌ'O¿ < À§=lܺíÿpÿfÜ]ÿ{ܾøjܾúæ8ùìÓñöðÓ±ÛïÇØ=u6Îظõ3þáövܽüf¼þòïã³ßýæ8ÿ«ßþa,ËnÌ«gcùÔwØ8;`ëÖw7ãþõ‹qóâ«ÓëøòãO×Ö¿vÀ¦ °y‡qx¸·¯à½u¼Î­×¾{0 °Uóp|ðøö©ÀÀÖ<Ü<Þä?þÜ¿y5îo®?̯ãun½¶þ#°móæÅ?Žƒë½<óR€Sx¸}3^óÏqûâëq÷êù‡ùu¼Î­×VûË'çZ"ð˜×Ÿÿå8x~õÑ™—œÂáþnܾüz\ù·ñæùæ×ñþâê8¾{ù|ìæÅ¹–üæõç>öãêÌKNáððp<ï¿Þðß|/¼?ÜÝŒùÑÞ½جù×?þþÜkÎà‹?}vî%? o€€ù‹Ÿ|î5'ôöí÷‡ñæö0nîãËçïÞüó³O.ÇÕÅn<¹Ü¹ßÅk`Óæ'Ïl€-{8¼w÷ËØíþû½ùúd?ž^íÆÅÜýN€-›?`ÓÖps{cyoÇï}tù.|üøsu)ÀÖ͵úÛu¿Þû?þ»x;î.¿ûÜ¿|?9Ø'ߦ¯°is·ói[6ÇaÌýs—ß»Ë_ÇëÜzmö¶ÍþØïÖýÆåÅwÛü×ñÜ/ÇkÀö °ß­7üïnôýËŸ?½Úçöîÿ A€{·µÿp|Òÿúÿÿß~ú¯Ïü›s;Ûÿ A€€õ}Àîžôçæ:ˆx¿àÿç€BÜð@— @€ @€ @€ @€ @€0—s¯89; @€ @€˜Ë¹Wœœ @€ @€s9÷ +€“³ @€ @€€¹œ{ÀÉÙ @€ @À\νàä쀀9l€Í³ @€ `.ç^prs(°yŽ@€ @€ÌåÜ+Nn6Ï @€ @€€¹œ{ÀÉÍ¡Àæ9 @€0—åÜKNÍ @€ @€沜{ À©Ù @€ @À\–s/RùdÓ!IDAT85; @€ @€ `.˹—œÚC€­s @€ `.˹—œÚC€­s @€˜^Û7‡›çÌa lž @€0½¶oz lŸ#0‡-°yv@€ @Àôؾé-€°}Ž@À¶ÀæÙ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ü§;äo=È…À€€ 0 `@À€€ 0 `@À€€ 0 `@À€€ 0 `@À€€ 0 `@À@  ›­éSçIEND®B`‚‰PNG + + IHDR€€Ã>aË pHYs¸Œ¸ŒÌö»/ +MiCCPPhotoshop ICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ +VœHUÄ‚Õ +Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d +”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z +Ðzù‹y8ü@ž¡PÈ< + í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ +¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN +!%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì +ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû%ÒŸ3 cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF'¤IDATxÚì{tTÕù÷¿çœ¹ßg’Éä +äB ¹Ä(¹) +‚ŠJ­öU+/(jKjýiÁºZZ¡E-&jÁ‚`¹†$$æ~L&“¹Ï™™3gÎyÿÈ Ö¾?+$œïZg±+sÛÏg?ϳ÷~öÞžçÑW‚HDˆ(@D"ŠQ€ˆ"D ¢Eˆ(@D"ŠQ€ÓÒ9ÉCú‡%Üú8qéÒ%ª¶¶–r8‚®®.!ŠeYÊçó‘ˆïx/—Ë9‚ X@ÀÆÇdzÑÑÑlrrr0??Ÿ«/{kÈ.þaóÛøcg_}õ• ¡¡Aìõz¥(]- =2RÂÐï&¾€óx<>»Ýîà9vì½}ûvZ­Vû233™‰'éš=\$\C…ùäÑ£GEV«U +¼§   ý{ù‘ÉdF£R*•òääd€ÿä8Žã‚µµµv–e½f³ÙƲ¬€ €€ÍápØNž|¸ë'ÙD À÷ÔÁZ ¡ô5E(®'ŸûÄOÜüØc¥ÇÅÅ]îí‹…ûôÓO]ü±õŸÿü§­··×ÀÀ À2z8³ïo|þ[à2¨PÛxžF±Ñh”9rDúòË/+’’’T“'OÖÞÿýÚéÓ§+d2f̘¡Ÿ1c†¾ºº:ÿí·ß®úðÿr»ÝUê[[[[7µÂ2yòdo¶ª-à?È3ضm›$ã‡H—Ëå¹>úè„Õ«WçÄÆÆŠ€çyœ9sÆÿÁX÷îÝk6VÎáéo>ø-ƒwLô{.Ã@ @ÒÞÞ.Û¹s§bçÎꬬ¬¨x fáÂ…êÔÔTaVV–âÝwß-|ê©§²V¯^ýÏÒÒÒS<ÏW¨?vìXÇ9…ÂöüóÏÚoá#ôÓ‰àBé6E(± `Ìí·ß>éõ×_¿5''G6üßÿþwÏo¼Ñ}ôèÑn–eí¡á™»ŸáÙ~Fÿ¡êJ0úAh.A@^]]mzá…:^}õUÝüùócŸyæ}^^žx̘1ÊO?ýtú²~õ«_­©©9à’Ûín\¹re÷¼yóèÄ`ÀŸËÍ"šnÑ…â|¦N§»éõ×_Ÿ¹xñâäp6úôißêÕ«eee]zC†w… Ï\£_(¹„7ôùbV—Ëeyÿý÷Í»wïŽ~ðÁÖ¬Y›””DÍž=;¶°°ðž7ß|sÔúõër§PSRRÒžššê¼3#Èþhˆ.x˜X·n@L¨×çLŸ>}úÆ'egg+ »»›{á…L|ðA»Ïç3»{oÈÜ÷tëW[\¿0†Áîóùì[·ní---5/_¾|ØòåË£¢¢¢/¿ürÞ„ â–/_þy}}½€¼±±±i›Qj}tºùÑÐ-GlZ·N @&€±+V¬˜³fÍš<™LFÀ¾}û\+V¬hmllì``Åùkiøïò á°ãy$gww·kÕªU¶Ï>û,iãÆÃÆŽ+ž5k–!''gÁ’%Kb÷ï߯ óz½uü{‡ùùçŸ÷÷œù ÿ£ SGü±@"€l©TzË–-[Šzè¡á`6›ƒ«W¯6mÛ¶­™çùîËw†x¨Î´õ!"ÜÇŽsO™2žzõêäçž{.:11Qü׿þuú‹/¾µ~ýz9 ˲—Ö®]kZ³f×rv;CÐ)È#‹‹‹•¡,?7))iÊþð‡Ysç΀/¿üÒ÷ÄO4WUUµ0£oÞÓo7ÔÅ÷}0¼.—‹^µj•ûĉÉ[¶lIJHH ~÷»ßåkµZéÚµk^¯W€Z·n]ç`C0¨˜ÄdñÞ½ŠñóSRR¦ïß¿~ff¦>þøcדO>Yo±XÚCÆw„2û ®?q!ÁWZZê›;w®ïOúSòرcÅ+V¬––¦\¼x±€¦iÖ­[×ù2‚¾áˆû±éÅe†ÈMII™±ÿþ¢°ñßyçÛÒ¥Kk9Žë ßÕ/Ö„ˆ~=v ½ò`sçÎfΜéûä“OFMœ8Qz÷Ýw'¸oñâÅ i: ¸µÌdüùŒXß À‹/¾( ñÇ$''OëoüÍ›7Û–-[v‰ã¸ŽñÝ¡†ã¡ßM… àúÅî‚!Ê 8A‹Åœ?>¿{÷îÑS§N•Þ}÷Ýñ,Z´ˆõz½ŸÏøs¹¹û‘i1Ì À_þÑ#MëfI¥Ò[Þ{⦅„ÿÖ[oYŸyæ™K:зÄŽ÷e| ABžç½¡Ïô taoàd8‹ÅÂÏ›7ûôÓO3§L™"½ûî»Ö®];ç׿þµ€Ÿ¦éÀÁZeæh–½®8X+x<€Q$IÞ´}ûö{¦M›rûö_þò—5ÚûõüúÁaãkè'Mš4ü‰'žˆ{üñÇkhšîÐ +; Êmàr¹°`Árß¾}£'Mš$]±bÅ(«Õ:oÆ tCC3fL‘=½À]—˜ÄdCÃ^€¹Ï?ÿüO,XÛ·ow,]º´&äö{Ñøñ………i{öìI5 ”L&“-Z´¨&œ„ 0‹…¸ûÏ?ÿ<#//O¼víÚ¼êêêÞÒÒR'Oqq1³aÃOÛïð×{÷î•¢oý>kΜ9wüö·¿Í€ãÇ{Ÿ}öÙ†~1ß5ˆÆO/..N1 $ÌŸ?_¹sçά|¤éËÉ÷`Aà@Z,ò‘G‘8p`d||<õÇ?þqÒäÉ“M®—^z©ãá)ÑÌu@ñù€}åZ£âââ +7oÞ<¢(ÆàâÅ‹­Vkû ?®°°0­¿ñÃ***’ïØ±cô¢E‹¸A† È .ˆüqɾ}û†ÇÇÇ‹7mÚtÇìÙ³;ƒÁ Õív»ë™[-#EuÜu­ŸJvvþY ™ ˆÜÍ›7ÏLLL”p‡%K–t´´´´_ƒžŸV\\œj0HŽã`·Û¡Óé.ÿñüùó;vìÈ\´h?ÈøCˆ8 yóÍ7•+W®Œš9sf̯~õ«™ëׯ7°:tˆù“îë€íÛ·‹ÑWÅ3êÞ{ï\TTùË_ì%%%-ý&y˜ÎöÃ=dIIIJLL Ë—/gÆG=ôÐC”ÉdâËËËùŸþô§d?0ÈøB3ž’—_~¹éÎ;ïTäåå‰W¬X1fß¾}…uuu&½ŸœcüóÇŠC€‹Ž$ŠãZ4R CÁo¼1š››ÙU«V5‡†z¶ùѨúJÂc G_6þÊ•+¿ÿýï½;vìРxžÇ/~ñ woo¯pÙ²eÒùóç+ûA^C0³†4€^·Û-[¶l™¦¬¬,M«Õ +Þ~ûí)³gÏnà8®Ëh4:ÄÛi6›»Ð·œKàô.‰¾M êÂÂÂ!·6¾yÆ ]è«õS‘$Éázúé§½Eé—,Y¢%†™>ø Ÿ¦i/þµ5³†ÁÐHÈrüøñö·ÞzK÷ë_ÿ:êÎ;ï4Üu×]…h`z÷Ýw=W3!¼ª|eЦ€¾Âެ¬¬qË—/‡ö·£oIw ã~ØÆwàÀ N6~÷† ¾ÍÈ©ûO1Såæy¾gÙ²eViK–,Ñ)wïÞýÈ#Ø{zzl¡÷èiãpRhyíµ×Ú-Z¤IHH 6lØpó‘#Gª<O›Ûí¶`øÃV´à‡çΓ o}ä/ùË›år9IÓ4¿bÅŠðXß>€®ÿ²Ùl>£ÑèÓétò•+Wv†Œßúl1¾¹Æà`å8Ž]¶l™@Æ’%Kô‰Ç æBÔÚÛÛkúío³uëÖ„¬¬,ÅÂ… o~ï½÷jtìÝ»×uÏ8 3¤ðDO!9î/ÃÆŒ“wß}÷ €>úÈYQQÑŠûéú¿Ñ“óæÍ;5uêÔ˜­[·¶„B}û¹ïp¿4Çqô²eËÜÕÕÕÃ?üðÃV›Íf÷ß_l(XwíÚÕ¹|ùr}vv¶èÙgŸóÑGe¸ÝîF“ÉÔ Œ°)JJJDèÛ¢5béÒ¥2™Œôx<ü믿nÄ¿ +:ƒØ‹ˆ¦¦&_SSSS¨Qõƒâÿ¥á=ǹ7oÞÜÑxAàòÐÐçóY^}õUó|˜‘‘¡(***رcÇEÍç­ñÎ|‘Œœ±œ°•.Wˆ×ëõ£ŠŠŠ’ààÁƒžšššðÏ‹Á)èϲ…+…Ã+~A|÷†ÐoCÀ„Bz¯ ¿…Eßâ”ý“O>1577Ç&'' ~ö³ŸÞµkW2Çq_Ÿ>}º;f‚{H°wï^*4æNœ7o^vx›ÖÖ­[Ãq çùÿßõyÔ÷x‡¡QyÄpz<ë®]»ì¿ùÍo¢'Mš•YQQq14Ë3ïóx.íæ¯9gΜ‘Ð1lñâÅiPSSÃ9r¤ÿªà½î÷Ò².ç%;wî4?ûì³QR©”xà2***âèJKK-SSÀ\SR¦.#¼¥ÏÉrrrF?^;vì°Ó4mÿŠ;"úa¹€«¶¶¶·¼¼œž={¶üž{îþÊ+¯$»\.ý×_Ý>5%éÚpðàA24®Ž1cFªD"!hšæ?þøcK¤÷_\€çyÇÎ;­³gÏ–9R–úå—_‚Á "æ¦GœæÓæ¯/^Б$™0gΜaPUUÅ444ØC‰Ì ŒûoP… KÝGµ9ΕJEÎ;7õË/¿4P?~¼;]üÃó«+Àd2ID%%%%7N eee.ŽãÂ۶؈¯8¤M&“óìÙ³¾©S§Êî¸ãŽ„ßüæ7qÁ`P[QQ!J/»6ŒºãY¥OÉèÆ—$—ËIžçqøðaGÈøþˆû¿*É ã8÷áÇÝS§N•¥§§+†žÐÔÔ¤5›Íà‡—‘_çÏŸ'ÑW`©+,,Œúöë_¼xÑŠý‘äïê…ïñãÇ]ÇÅÈår2;;;¾©©Iƒ¾™Më5àÒ¥K‚0yyyQPWWÇX,þµU;¢+W€·®®Îíp88­VKŽ;ÖPRR¢ ç‡Í"¨§½"L&“€B­VG5J‚‡MŸ#¶»j£Æd2Ñmmm¬V«;6 +}5ò¦¦&êš`±X„äz½^%€êêj_Èe dÍ1 0<Ïûêêêü¹¹¹¢#F(„B¡&ÈÚÛÛ?4Ü^@@@–šš%“ÉžçQ__îýl€«:)Ä`êëëý”Æ “EGGkººº¤N§óÛñ¿Ð¥›L0ÌûBR±X,ºººpòqÿW×0•••^ I"‘H +@bµZ€ÐÑ-¢±cÇ^.¯%"|pCø€¥¡$ +}«|ß>*¶ÿé`Ô…€ÀÁ€\.'ÓÓÓ5­­­"‚ ‚  +…B +ÚÛÛƒ€ðižÌ@ƒ¾¤ûï †þŸ‚ß9,euu5  +AQTøô2rЗ{Ïóø|>Ð4­B_Q¨r†"dü¨`0(žç ¿ß¯Fßi%Cñ;‡% ±Ùl²~ÇÜ’¡öÇ °oß¾þ®”€aÆ‘%%%1<Ïë0tÎðÁw¹ú‚‚!hµZbÏž=Ñ@@‹Ý"~5¾;%—Ëß:™ì·¯qðp»ÿ½E©TsçΆh½.$‹1kÖ¬ëê;ÿÛáZx€ïLU9n·›À÷¥Cº7}×Pk(‹àyž I’P(ÄÕzÓ À¼yó¸’’’o¸y›ÍÆ}ôÑG‰Db“Éd’$¹¡ÞsB y±,+p»ÝJ©Tª{ðÁµuy°ÂÉd2nÐÐëõá^s¹†Ž N(Úu:]{LLLX,Ž,]%y<©Ñh4p'D_ýex~€'Irð=@ßqû}նᱩR©¤¢¢¢­VkKIIéV©Tވ鮊§"zzzn·["‘Høpï͹\Ññy?€`0xyz²ªªÊš"‚ H’ä$I@.—3ó]9Ni(·"€¦i¾©©É Àó|pÐPôåA€eYŸÍf£C@*•J|>Ÿ0P³]µäš`FÀ0ŒP¯×‹ÃÐårÑ|r¹üÚT‰Åb†eYÚh4:ü~?/‹ …B!±Ûí"¿ß/àyž‡‡ˆ®Òï÷ €X­V‹ »»Ûçp8œ¼z½þÚ T*Çc4­N§“ÕëõB­V+íîîùý~!ÇqEQ®|@ú|>Çqb­V+€¶¶6ÚãñØÐQQQ×€ØØØ€Édr[,–Þ††·^¯×ªÕj ˲R¯×+bY–¤(*Rx…b†òz½"’$¥r¹\.\°"tzzjjjðšžžÎ^¸pÁ ÀzáÂÛ-·Ü¢Õh4"2š¦Å ÃÄbq¤,ì +å÷û…G"•JR©”€³gÏšÃäæær×€üüüàîݻݬgΜ1H‘Ëå¹\®t¹\R¯×+T*•¾ˆ ¯,þÓ4-r»ÝR½^¯$I Ãð•••]!èú²·x<ýôàÐqâ_gcccÍ¡C‡LEEEñÉÉɪêêêèžžKtt´K,³‘µÿ],Ë’v»]f6›ÕÆ%€÷ß¿ža˜F¦Ñ£GÓ}Û/‡0uêTÿgŸ}Ö  iÓ¦MsçΗÉdTjjj|SS“9&&Æ¡T*ýR©4²Dü=b¿ÅbQ9ÝĉcI’„ÙlfvíÚu@Ë¢E‹Ø®Sï R¨š úƒl+//?wøðáq·ß~»>##CרØhèîî¶kµZH$b#CÿßÌŸ²ÙlŠ®®.F£‰OLL”À–-[껺ºªt(•JWש÷†ÞQ±#FŒ [ZZ:9ŽûzÆ gf̘q—L&£²³³‡]¼x±W§Ó¹är¹_©TFFÿaÜïr¹$&“Iãt:cf̘‘@ÌfsàwÞ9 @÷Œ3ÎcÈ0{ ØM-èÐT^^þÕ‡~8æ§?ýiRZZšº®®.Áh4:U*-‹ƒ"‘(²Hô-ù|>aOOÊh4F'&&&…‹?^zé¥ +“ÉT •¢(G|àüUó Wý¸ø””OSSSÏó5ÿó?ÿóå¼yóÈårrüøñIGޱvuu¹år¹?**ŠêUÃ=ì³Z­òÎÎÎ(žçã + + P]]íÞºuë õLsçÎõ_­Þ? ܕɱ›šÐ  ±¦¦æŸ¯¼òJÆË/¿œ'MKKKnmmu)•J¯D"aC¡àG?*à8Žp:’®®.­Ùl6&Ëd2Ša~ùòå'¼^o€f…BqU{ÿ€·Ýv›÷èÑ£j6nÜøûï¿?9''G™››c4‡µ··Ó2™Œ +…ÁûÜÏó„Çãwww«ÛÚÚb’“““°sçÎÖ²²²/Ôè~òÉ'ºf†<c”­Á³ +…Íív7z½Þs>úèðcÇŽÍ•ÉddaaáðòòrW{{»_$bbbÜ?æ|Àçó Ìf³²µµ5†$Éa7ÝtS,ÔÔÔ¸Ÿ{¨К••å¦kö\uo9`ׯ-]º”Y¿~}7€š³gÏF­Y³føk¯½–o0$yyyi.\ð‹Åâ€@ ࢢ¢ŸÐb±È[[[cZZZ’òòò2333µ°ÿ~Ó/~ñ‹OœP¯P(l“†9´-åúøgžyÆ»qãÆNâææfÉc=¦...¾K­VS·ÜrKüÉ“'ÑØØHpŽãzu:}£%†<Ï>ŸOÐÓÓ£ õü¤œœœŒ¬¬,-\ºtÉýä“O iúTÈõ›ê¾àA€©ÿ„/**ò·9rDtß}÷ wïÞ=C­VS“&MJ8qâÑÐÐ@ƒAŠeYKtt´çFY=ä8Ž iZ2~Lgggb~~þèpÏ¿té’{Μ9ÅGTèZ³fÏrv;n ½Àegg;+++›P‡¢î¿ÿ~ìÞ½{†J¥¢n½õÖøÓ§OSÍÍÍ"¿ß/dÆ¢×ë]r¹œ¹žg Y–¥œN§Øl6«[[[cìv{Ò¸qãÒF¥îoü¦¦¦2:/^챜Ý>(à ³1&wY6Ã^SSÓ Ο?Ÿ}çw¦¦§§Ën¾ùfƒR©WTTˆišÓ4Ýc0jµÚ'‰†òù=ÿÑåÛl6™ÉdÒ¶µµÅ°,›4yòäÔ¸¸8)”••õ<ñÄšššÊCÆo-**r«l_ Úï vÃLKõ²@†­¦¦¦@°¼¼œ¹óÎ;íûö훓——§ÊÌÌÔètº1_}õ•²¶¶Vær¹zâââ¬QQQ™LÆ\KÉ@€r»Ýb‹Å¢ìììÔ™L&CTTÔˆ[n¹%Q¡PP°gÏžŽ‡~xŸ×ë=rûmEEEîö þ>Áµh i©^– 2í—.]jhnnöM›6ͱeË–¹÷Ýw_bll¬dÖ¬YéçÏŸ×466¶ØívyBBB¯^¯wªÕj¯D" ÅúÂ`0Hz½^¡Íf“www«;;;£ý~|^^ވѣGkB!/¾øbå+¯¼R O‡¾Î¢¢"z°Í€©)t0=½ÈQ\\ÜÀg³Ùè… ÚΜ9s× /¼§T*ÉñãÇU§OŸÖÔÔÔ­V«Å`0Øt:[¥RùÅb1;òƒ°á‡´··Wi2™´‹E“4eÊ”xµZ-€ÖÖVßÓO?}¼¤¤¤ À_0¯^½Ú븸ëš-¸– —À^à~þóŸ»·nÝÚ†¾[1\¯½öZï?þñ¶?ýéOÓòòòTñññÒY³f¥×××ÇTUUµ÷ôôt [tt´C«Õz +…O*•²ƒ=‹Èó<¨ÐΉÍfSšÍfµÅbÑI¥Ò¸‰'&6Lþû}ûö—-[vÐh4žP  Y&“õ®[·Ži9ºéšy3Áµî=’îÃüo¼á]·nÑétú8Μ9Ó;qâÄÖ§žzjÊêÕ«³ +™™™©>|¸ª¦¦&®©©Éh2™,Z­ÖíÔh4¥Ré•ÉdWàbøÈó<Á²,É0ŒÀãñˆ‡Ôf³)z{{Uv»]#‘HbrssãÒÒÒÔB¡úöñ­\¹òôîÝ»ñ<_êõ©©©Î;3‚lËÑM×´ý¯9Ðôßó‹'똓ƴžsçÎÑì§çw¿û][iiéø+VܲhÑ¢ar¹œ7nœ>##C×ÒÒâlnnî©­­í‘Éd­VëÒh4…Bá•Ëå~©TÊŠD"V I’äÿÛœçyð¤úVÿÏíq¾:¥§¼¼Ü ÀÀøùçŸ7}þùççf̘1öÉ'ŸÌ™9sfœ\.'ããã¥ñññ ^¯7Îb±ø:::œ‹Åi±X\h@à‹Å~±ẌÅbV „AàÂ^!Á²,ɲ,Å0ŒÀï÷ †ùý~1˲RŠ¢äJ¥R™’’¢ŽWDEEIúŸÙÛÕÕÅ”””´¿óÎ;g/^¼X¾®fFŠ¢l?ü°ÿjlä¸á+CÖÌøÉ÷ÁZ/t e€–²²²š²²²“ééé÷ßÖüùóGäç竤R)™””$KJJ’ñ<ër¹X‡ÃÁ8¿Õj¥Ýn·ÏårùH’ z½^?Aá³÷à QA”D"ƒAJ©TJ£££%FªÕj%jµZ$“ɾq"£ÏçãO:Õ»k×®†ýû÷W™L¦°›oGßîÛm·Ýæ£l Ôrî @X3G³ì“O¾áÜ´iÝÔÔd 5nC]]]ÕK/½trýúõÃ'Ož<ú¶ÛnKž3gNbVV–J(B¥R T*• ))I†ÐÉšÁ`Çñn·› °Ì>l™ (ŠP(èwë7=”ËÅ9sÆzàÀ¶òòòÆóçÏסo³FGR3Çøñã½7Řƒ@ënß!@8I¼+dŽpT¹†»?Þ Ûè€þðáç>÷ÒK/%Œ5*iüøñI†¼¼<]ZZšB£ÑE"(ŠEQ„V«ý^'ƒÓ4Í[,}}½ûüùó½§Nê:{öl[KKK¸‡›tè`S«ÕîÛo¿Ýß—à™¯‹)ëë€þ£l ޹+ÉC&Ï¡KKK{›››ÛÑwу&DUUU骪ªtÛ¶mÓÐéõúèØØXmBB‚Z«Õʳ²²ÔèwÇÁ·“–eƒçγ2 㯯¯ïµX,6‡ÃÑ‹¾Ë¿ý8H’t3ÆÿÀ°_¾Ë¥ï† ,®y??+ ²F0²Œ®Ï?ÿÜ\WW'¦iZ†¾[A===Šžžyee¥€€ß}ÍJøàk}ׯxÑwý­}ç …V«õfgg3wÜqG°o‹–_¾{]¶ãu À7\uÍ~B"cÜšÜÉÊÊJª±±QÐÕÕ%ôù|Bš¦Eè»"lüï:b›Cß­!,A¹\Î(Š@LLL ##ƒÍÏ϶ߚOhÃÕØœ`d¯ØÉ%\R2HVyÀ3lmm%>ü—P…{S(ü7ëðœ€ç+´ÿê†k« Àö7_—‘Ýø ¢Eˆ(@D"ŠQ€ˆ"D ¢Eˆ(@D"êÓÿý‹Â™†õƒ«IEND®B`‚ \ No newline at end of file diff --git a/examples/web/models/models_yaw_pitch_roll.html b/examples/web/models/models_yaw_pitch_roll.html new file mode 100644 index 0000000..d8aa1cd --- /dev/null +++ b/examples/web/models/models_yaw_pitch_roll.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/models/models_yaw_pitch_roll.js b/examples/web/models/models_yaw_pitch_roll.js new file mode 100644 index 0000000..10f47c5 --- /dev/null +++ b/examples/web/models/models_yaw_pitch_roll.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_yaw_pitch_roll.data";var REMOTE_PACKAGE_BASE="models_yaw_pitch_roll.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5279952,DYNAMICTOP_PTR=37040;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="models_yaw_pitch_roll.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"Ac":___lock,"H":___setErrNo,"lb":___syscall140,"ab":___syscall145,"G":___syscall146,"r":___syscall221,"xa":___syscall5,"F":___syscall54,"ca":___syscall6,"E":___unlock,"D":_eglGetProcAddress,"ba":_emscripten_exit_pointerlock,"Fd":_emscripten_get_gamepad_status,"ud":_emscripten_get_heap_size,"jd":_emscripten_get_num_gamepads,"aa":_emscripten_get_pointerlock_status,"Qc":_emscripten_glActiveTexture,"Gc":_emscripten_glAttachShader,"zc":_emscripten_glBeginQueryEXT,"vc":_emscripten_glBindAttribLocation,"oc":_emscripten_glBindBuffer,"lc":_emscripten_glBindFramebuffer,"ec":_emscripten_glBindRenderbuffer,"Zb":_emscripten_glBindTexture,"Vb":_emscripten_glBindVertexArrayOES,"Lb":_emscripten_glBlendColor,"Ab":_emscripten_glBlendEquation,"wb":_emscripten_glBlendEquationSeparate,"vb":_emscripten_glBlendFunc,"ub":_emscripten_glBlendFuncSeparate,"tb":_emscripten_glBufferData,"sb":_emscripten_glBufferSubData,"rb":_emscripten_glCheckFramebufferStatus,"qb":_emscripten_glClear,"pb":_emscripten_glClearColor,"ob":_emscripten_glClearDepthf,"nb":_emscripten_glClearStencil,"mb":_emscripten_glColorMask,"kb":_emscripten_glCompileShader,"jb":_emscripten_glCompressedTexImage2D,"ib":_emscripten_glCompressedTexSubImage2D,"hb":_emscripten_glCopyTexImage2D,"gb":_emscripten_glCopyTexSubImage2D,"fb":_emscripten_glCreateProgram,"eb":_emscripten_glCreateShader,"db":_emscripten_glCullFace,"cb":_emscripten_glDeleteBuffers,"bb":_emscripten_glDeleteFramebuffers,"$a":_emscripten_glDeleteProgram,"_a":_emscripten_glDeleteQueriesEXT,"Za":_emscripten_glDeleteRenderbuffers,"Ya":_emscripten_glDeleteShader,"Xa":_emscripten_glDeleteTextures,"Wa":_emscripten_glDeleteVertexArraysOES,"Va":_emscripten_glDepthFunc,"Ua":_emscripten_glDepthMask,"Ta":_emscripten_glDepthRangef,"Sa":_emscripten_glDetachShader,"Ra":_emscripten_glDisable,"Qa":_emscripten_glDisableVertexAttribArray,"Pa":_emscripten_glDrawArrays,"Oa":_emscripten_glDrawArraysInstancedANGLE,"Na":_emscripten_glDrawBuffersWEBGL,"Ma":_emscripten_glDrawElements,"La":_emscripten_glDrawElementsInstancedANGLE,"Ka":_emscripten_glEnable,"Ja":_emscripten_glEnableVertexAttribArray,"Ia":_emscripten_glEndQueryEXT,"Ha":_emscripten_glFinish,"Ga":_emscripten_glFlush,"Fa":_emscripten_glFramebufferRenderbuffer,"Ea":_emscripten_glFramebufferTexture2D,"Da":_emscripten_glFrontFace,"Ca":_emscripten_glGenBuffers,"Ba":_emscripten_glGenFramebuffers,"Aa":_emscripten_glGenQueriesEXT,"za":_emscripten_glGenRenderbuffers,"ya":_emscripten_glGenTextures,"wa":_emscripten_glGenVertexArraysOES,"va":_emscripten_glGenerateMipmap,"ua":_emscripten_glGetActiveAttrib,"ta":_emscripten_glGetActiveUniform,"sa":_emscripten_glGetAttachedShaders,"ra":_emscripten_glGetAttribLocation,"qa":_emscripten_glGetBooleanv,"pa":_emscripten_glGetBufferParameteriv,"oa":_emscripten_glGetError,"na":_emscripten_glGetFloatv,"ma":_emscripten_glGetFramebufferAttachmentParameteriv,"la":_emscripten_glGetIntegerv,"ka":_emscripten_glGetProgramInfoLog,"ja":_emscripten_glGetProgramiv,"ia":_emscripten_glGetQueryObjecti64vEXT,"ha":_emscripten_glGetQueryObjectivEXT,"ga":_emscripten_glGetQueryObjectui64vEXT,"fa":_emscripten_glGetQueryObjectuivEXT,"ea":_emscripten_glGetQueryivEXT,"da":_emscripten_glGetRenderbufferParameteriv,"re":_emscripten_glGetShaderInfoLog,"qe":_emscripten_glGetShaderPrecisionFormat,"pe":_emscripten_glGetShaderSource,"oe":_emscripten_glGetShaderiv,"ne":_emscripten_glGetString,"me":_emscripten_glGetTexParameterfv,"le":_emscripten_glGetTexParameteriv,"ke":_emscripten_glGetUniformLocation,"je":_emscripten_glGetUniformfv,"ie":_emscripten_glGetUniformiv,"he":_emscripten_glGetVertexAttribPointerv,"ge":_emscripten_glGetVertexAttribfv,"fe":_emscripten_glGetVertexAttribiv,"ee":_emscripten_glHint,"de":_emscripten_glIsBuffer,"ce":_emscripten_glIsEnabled,"be":_emscripten_glIsFramebuffer,"ae":_emscripten_glIsProgram,"$d":_emscripten_glIsQueryEXT,"_d":_emscripten_glIsRenderbuffer,"Zd":_emscripten_glIsShader,"Yd":_emscripten_glIsTexture,"Xd":_emscripten_glIsVertexArrayOES,"Wd":_emscripten_glLineWidth,"Vd":_emscripten_glLinkProgram,"Ud":_emscripten_glPixelStorei,"Td":_emscripten_glPolygonOffset,"Sd":_emscripten_glQueryCounterEXT,"Rd":_emscripten_glReadPixels,"Qd":_emscripten_glReleaseShaderCompiler,"Pd":_emscripten_glRenderbufferStorage,"Od":_emscripten_glSampleCoverage,"Nd":_emscripten_glScissor,"Md":_emscripten_glShaderBinary,"Ld":_emscripten_glShaderSource,"Kd":_emscripten_glStencilFunc,"Jd":_emscripten_glStencilFuncSeparate,"Id":_emscripten_glStencilMask,"Hd":_emscripten_glStencilMaskSeparate,"Gd":_emscripten_glStencilOp,"Ed":_emscripten_glStencilOpSeparate,"Dd":_emscripten_glTexImage2D,"Cd":_emscripten_glTexParameterf,"Bd":_emscripten_glTexParameterfv,"Ad":_emscripten_glTexParameteri,"zd":_emscripten_glTexParameteriv,"yd":_emscripten_glTexSubImage2D,"xd":_emscripten_glUniform1f,"wd":_emscripten_glUniform1fv,"vd":_emscripten_glUniform1i,"td":_emscripten_glUniform1iv,"sd":_emscripten_glUniform2f,"rd":_emscripten_glUniform2fv,"qd":_emscripten_glUniform2i,"pd":_emscripten_glUniform2iv,"od":_emscripten_glUniform3f,"nd":_emscripten_glUniform3fv,"md":_emscripten_glUniform3i,"ld":_emscripten_glUniform3iv,"kd":_emscripten_glUniform4f,"id":_emscripten_glUniform4fv,"hd":_emscripten_glUniform4i,"gd":_emscripten_glUniform4iv,"fd":_emscripten_glUniformMatrix2fv,"ed":_emscripten_glUniformMatrix3fv,"dd":_emscripten_glUniformMatrix4fv,"cd":_emscripten_glUseProgram,"bd":_emscripten_glValidateProgram,"ad":_emscripten_glVertexAttrib1f,"$c":_emscripten_glVertexAttrib1fv,"_c":_emscripten_glVertexAttrib2f,"Zc":_emscripten_glVertexAttrib2fv,"Yc":_emscripten_glVertexAttrib3f,"Xc":_emscripten_glVertexAttrib3fv,"Wc":_emscripten_glVertexAttrib4f,"Vc":_emscripten_glVertexAttrib4fv,"Uc":_emscripten_glVertexAttribDivisorANGLE,"Tc":_emscripten_glVertexAttribPointer,"Sc":_emscripten_glViewport,"Rc":_emscripten_memcpy_big,"Pc":_emscripten_request_pointerlock,"Oc":_emscripten_resize_heap,"$":_emscripten_run_script,"Nc":_emscripten_sample_gamepad_data,"Mc":_emscripten_set_click_callback_on_thread,"Lc":_emscripten_set_fullscreenchange_callback_on_thread,"Kc":_emscripten_set_gamepadconnected_callback_on_thread,"Jc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Ic":_emscripten_set_keypress_callback_on_thread,"Hc":_emscripten_set_main_loop,"Fc":_emscripten_set_touchcancel_callback_on_thread,"Ec":_emscripten_set_touchend_callback_on_thread,"Dc":_emscripten_set_touchmove_callback_on_thread,"Cc":_emscripten_set_touchstart_callback_on_thread,"Bc":_exit,"C":_glActiveTexture,"_":_glAttachShader,"o":_glBindAttribLocation,"c":_glBindBuffer,"l":_glBindFramebuffer,"Z":_glBindRenderbuffer,"g":_glBindTexture,"Y":_glBlendFunc,"j":_glBufferData,"B":_glBufferSubData,"yc":_glCheckFramebufferStatus,"X":_glClear,"W":_glClearColor,"xc":_glClearDepthf,"wc":_glCompileShader,"uc":_glCompressedTexImage2D,"tc":_glCreateProgram,"sc":_glCreateShader,"rc":_glCullFace,"q":_glDeleteBuffers,"qc":_glDeleteFramebuffers,"A":_glDeleteProgram,"pc":_glDeleteRenderbuffers,"V":_glDeleteShader,"t":_glDeleteTextures,"nc":_glDepthFunc,"U":_glDetachShader,"T":_glDisable,"k":_glDisableVertexAttribArray,"S":_glDrawArrays,"R":_glDrawElements,"z":_glEnable,"f":_glEnableVertexAttribArray,"mc":_glFramebufferRenderbuffer,"Q":_glFramebufferTexture2D,"kc":_glFrontFace,"i":_glGenBuffers,"jc":_glGenFramebuffers,"ic":_glGenRenderbuffers,"P":_glGenTextures,"hc":_glGenerateMipmap,"y":_glGetAttribLocation,"gc":_glGetFloatv,"fc":_glGetProgramInfoLog,"O":_glGetProgramiv,"dc":_glGetShaderInfoLog,"N":_glGetShaderiv,"p":_glGetString,"x":_glGetUniformLocation,"cc":_glLinkProgram,"bc":_glPixelStorei,"ac":_glReadPixels,"$b":_glRenderbufferStorage,"_b":_glShaderSource,"M":_glTexImage2D,"h":_glTexParameteri,"L":_glUniform1i,"w":_glUniform4f,"v":_glUniformMatrix4fv,"n":_glUseProgram,"Yb":_glVertexAttrib2f,"Xb":_glVertexAttrib3f,"u":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Wb":_glViewport,"Ub":_glfwCreateWindow,"Tb":_glfwDefaultWindowHints,"Sb":_glfwDestroyWindow,"Rb":_glfwGetCursorPos,"Qb":_glfwGetKey,"s":_glfwGetTime,"Pb":_glfwInit,"Ob":_glfwMakeContextCurrent,"Nb":_glfwSetCharCallback,"Mb":_glfwSetCursorEnterCallback,"Kb":_glfwSetCursorPosCallback,"Jb":_glfwSetDropCallback,"Ib":_glfwSetErrorCallback,"Hb":_glfwSetKeyCallback,"Gb":_glfwSetMouseButtonCallback,"Fb":_glfwSetScrollCallback,"Eb":_glfwSetWindowIconifyCallback,"Db":_glfwSetWindowShouldClose,"Cb":_glfwSetWindowSizeCallback,"Bb":_glfwSwapBuffers,"K":_glfwTerminate,"m":_glfwWindowHint,"J":_llvm_stackrestore,"I":_llvm_stacksave,"zb":_nanosleep,"yb":_time,"xb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["we"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["He"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Ie"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Je"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["De"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/models/models_yaw_pitch_roll.wasm b/examples/web/models/models_yaw_pitch_roll.wasm new file mode 100644 index 0000000..3d8e1d1 Binary files /dev/null and b/examples/web/models/models_yaw_pitch_roll.wasm differ diff --git a/examples/web/physac/physac.h b/examples/web/physac/physac.h new file mode 100644 index 0000000..42cb019 --- /dev/null +++ b/examples/web/physac/physac.h @@ -0,0 +1,2041 @@ +/********************************************************************************************** +* +* Physac v1.0 - 2D Physics library for videogames +* +* DESCRIPTION: +* +* Physac is a small 2D physics engine written in pure C. The engine uses a fixed time-step thread loop +* to simluate physics. A physics step contains the following phases: get collision information, +* apply dynamics, collision solving and position correction. It uses a very simple struct for physic +* bodies with a position vector to be used in any 3D rendering API. +* +* CONFIGURATION: +* +* #define PHYSAC_IMPLEMENTATION +* Generates the implementation of the library into the included file. +* If not defined, the library is in header only mode and can be included in other headers +* or source files without problems. But only ONE file should hold the implementation. +* +* #define PHYSAC_STATIC (defined by default) +* The generated implementation will stay private inside implementation file and all +* internal symbols and functions will only be visible inside that file. +* +* #define PHYSAC_NO_THREADS +* The generated implementation won't include pthread library and user must create a secondary thread to call PhysicsThread(). +* It is so important that the thread where PhysicsThread() is called must not have v-sync or any other CPU limitation. +* +* #define PHYSAC_STANDALONE +* Avoid raylib.h header inclusion in this file. Data types defined on raylib are defined +* internally in the library and input management and drawing functions must be provided by +* the user (check library implementation for further details). +* +* #define PHYSAC_DEBUG +* Traces log messages when creating and destroying physics bodies and detects errors in physics +* calculations and reference exceptions; it is useful for debug purposes +* +* #define PHYSAC_MALLOC() +* #define PHYSAC_FREE() +* You can define your own malloc/free implementation replacing stdlib.h malloc()/free() functions. +* Otherwise it will include stdlib.h and use the C standard library malloc()/free() function. +* +* +* NOTE 1: Physac requires multi-threading, when InitPhysics() a second thread is created to manage physics calculations. +* NOTE 2: Physac requires static C library linkage to avoid dependency on MinGW DLL (-static -lpthread) +* +* Use the following code to compile: +* gcc -o $(NAME_PART).exe $(FILE_NAME) -s -static -lraylib -lpthread -lopengl32 -lgdi32 -lwinmm -std=c99 +* +* VERY THANKS TO: +* Ramon Santamaria (github: @raysan5) +* +* +* LICENSE: zlib/libpng +* +* Copyright (c) 2016-2018 Victor Fisac (github: @victorfisac) +* +* This software is provided "as-is", without any express or implied warranty. In no event +* will the authors be held liable for any damages arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, including commercial +* applications, and to alter it and redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that you +* wrote the original software. If you use this software in a product, an acknowledgment +* in the product documentation would be appreciated but is not required. +* +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented +* as being the original software. +* +* 3. This notice may not be removed or altered from any source distribution. +* +**********************************************************************************************/ + +#if !defined(PHYSAC_H) +#define PHYSAC_H + +// #define PHYSAC_STATIC +// #define PHYSAC_NO_THREADS +// #define PHYSAC_STANDALONE +// #define PHYSAC_DEBUG + +#if defined(PHYSAC_STATIC) + #define PHYSACDEF static // Functions just visible to module including this file +#else + #if defined(__cplusplus) + #define PHYSACDEF extern "C" // Functions visible from other files (no name mangling of functions in C++) + #else + #define PHYSACDEF extern // Functions visible from other files + #endif +#endif + +//---------------------------------------------------------------------------------- +// Defines and Macros +//---------------------------------------------------------------------------------- +#define PHYSAC_MAX_BODIES 64 +#define PHYSAC_MAX_MANIFOLDS 4096 +#define PHYSAC_MAX_VERTICES 24 +#define PHYSAC_CIRCLE_VERTICES 24 + +#define PHYSAC_COLLISION_ITERATIONS 100 +#define PHYSAC_PENETRATION_ALLOWANCE 0.05f +#define PHYSAC_PENETRATION_CORRECTION 0.4f + +#define PHYSAC_PI 3.14159265358979323846 +#define PHYSAC_DEG2RAD (PHYSAC_PI/180.0f) + +#define PHYSAC_MALLOC(size) malloc(size) +#define PHYSAC_FREE(ptr) free(ptr) + +//---------------------------------------------------------------------------------- +// Types and Structures Definition +// NOTE: Below types are required for PHYSAC_STANDALONE usage +//---------------------------------------------------------------------------------- +#if defined(PHYSAC_STANDALONE) + // Vector2 type + typedef struct Vector2 { + float x; + float y; + } Vector2; + + // Boolean type + #if !defined(_STDBOOL_H) + typedef enum { false, true } bool; + #define _STDBOOL_H + #endif +#endif + +typedef enum PhysicsShapeType { PHYSICS_CIRCLE, PHYSICS_POLYGON } PhysicsShapeType; + +// Previously defined to be used in PhysicsShape struct as circular dependencies +typedef struct PhysicsBodyData *PhysicsBody; + +// Mat2 type (used for polygon shape rotation matrix) +typedef struct Mat2 { + float m00; + float m01; + float m10; + float m11; +} Mat2; + +typedef struct PolygonData { + unsigned int vertexCount; // Current used vertex and normals count + Vector2 positions[PHYSAC_MAX_VERTICES]; // Polygon vertex positions vectors + Vector2 normals[PHYSAC_MAX_VERTICES]; // Polygon vertex normals vectors +} PolygonData; + +typedef struct PhysicsShape { + PhysicsShapeType type; // Physics shape type (circle or polygon) + PhysicsBody body; // Shape physics body reference + float radius; // Circle shape radius (used for circle shapes) + Mat2 transform; // Vertices transform matrix 2x2 + PolygonData vertexData; // Polygon shape vertices position and normals data (just used for polygon shapes) +} PhysicsShape; + +typedef struct PhysicsBodyData { + unsigned int id; // Reference unique identifier + bool enabled; // Enabled dynamics state (collisions are calculated anyway) + Vector2 position; // Physics body shape pivot + Vector2 velocity; // Current linear velocity applied to position + Vector2 force; // Current linear force (reset to 0 every step) + float angularVelocity; // Current angular velocity applied to orient + float torque; // Current angular force (reset to 0 every step) + float orient; // Rotation in radians + float inertia; // Moment of inertia + float inverseInertia; // Inverse value of inertia + float mass; // Physics body mass + float inverseMass; // Inverse value of mass + float staticFriction; // Friction when the body has not movement (0 to 1) + float dynamicFriction; // Friction when the body has movement (0 to 1) + float restitution; // Restitution coefficient of the body (0 to 1) + bool useGravity; // Apply gravity force to dynamics + bool isGrounded; // Physics grounded on other body state + bool freezeOrient; // Physics rotation constraint + PhysicsShape shape; // Physics body shape information (type, radius, vertices, normals) +} PhysicsBodyData; + +typedef struct PhysicsManifoldData { + unsigned int id; // Reference unique identifier + PhysicsBody bodyA; // Manifold first physics body reference + PhysicsBody bodyB; // Manifold second physics body reference + float penetration; // Depth of penetration from collision + Vector2 normal; // Normal direction vector from 'a' to 'b' + Vector2 contacts[2]; // Points of contact during collision + unsigned int contactsCount; // Current collision number of contacts + float restitution; // Mixed restitution during collision + float dynamicFriction; // Mixed dynamic friction during collision + float staticFriction; // Mixed static friction during collision +} PhysicsManifoldData, *PhysicsManifold; + +#if defined(__cplusplus) +extern "C" { // Prevents name mangling of functions +#endif + +//---------------------------------------------------------------------------------- +// Module Functions Declaration +//---------------------------------------------------------------------------------- +PHYSACDEF void InitPhysics(void); // Initializes physics values, pointers and creates physics loop thread +PHYSACDEF void RunPhysicsStep(void); // Run physics step, to be used if PHYSICS_NO_THREADS is set in your main loop +PHYSACDEF void SetPhysicsTimeStep(double delta); // Sets physics fixed time step in milliseconds. 1.666666 by default +PHYSACDEF bool IsPhysicsEnabled(void); // Returns true if physics thread is currently enabled +PHYSACDEF void SetPhysicsGravity(float x, float y); // Sets physics global gravity force +PHYSACDEF PhysicsBody CreatePhysicsBodyCircle(Vector2 pos, float radius, float density); // Creates a new circle physics body with generic parameters +PHYSACDEF PhysicsBody CreatePhysicsBodyRectangle(Vector2 pos, float width, float height, float density); // Creates a new rectangle physics body with generic parameters +PHYSACDEF PhysicsBody CreatePhysicsBodyPolygon(Vector2 pos, float radius, int sides, float density); // Creates a new polygon physics body with generic parameters +PHYSACDEF void PhysicsAddForce(PhysicsBody body, Vector2 force); // Adds a force to a physics body +PHYSACDEF void PhysicsAddTorque(PhysicsBody body, float amount); // Adds an angular force to a physics body +PHYSACDEF void PhysicsShatter(PhysicsBody body, Vector2 position, float force); // Shatters a polygon shape physics body to little physics bodies with explosion force +PHYSACDEF int GetPhysicsBodiesCount(void); // Returns the current amount of created physics bodies +PHYSACDEF PhysicsBody GetPhysicsBody(int index); // Returns a physics body of the bodies pool at a specific index +PHYSACDEF int GetPhysicsShapeType(int index); // Returns the physics body shape type (PHYSICS_CIRCLE or PHYSICS_POLYGON) +PHYSACDEF int GetPhysicsShapeVerticesCount(int index); // Returns the amount of vertices of a physics body shape +PHYSACDEF Vector2 GetPhysicsShapeVertex(PhysicsBody body, int vertex); // Returns transformed position of a body shape (body position + vertex transformed position) +PHYSACDEF void SetPhysicsBodyRotation(PhysicsBody body, float radians); // Sets physics body shape transform based on radians parameter +PHYSACDEF void DestroyPhysicsBody(PhysicsBody body); // Unitializes and destroy a physics body +PHYSACDEF void ResetPhysics(void); // Destroys created physics bodies and manifolds and resets global values +PHYSACDEF void ClosePhysics(void); // Unitializes physics pointers and closes physics loop thread + +#if defined(__cplusplus) +} +#endif + +#endif // PHYSAC_H + +/*********************************************************************************** +* +* PHYSAC IMPLEMENTATION +* +************************************************************************************/ + +#if defined(PHYSAC_IMPLEMENTATION) + +#if !defined(PHYSAC_NO_THREADS) + #include // Required for: pthread_t, pthread_create() +#endif + +#if defined(PHYSAC_DEBUG) + #include // Required for: printf() +#endif + +#include // Required for: malloc(), free(), srand(), rand() +#include // Required for: cosf(), sinf(), fabs(), sqrtf() +#include // Required for: uint64_t + +#if !defined(PHYSAC_STANDALONE) + #include "raymath.h" // Required for: Vector2Add(), Vector2Subtract() +#endif + +// Time management functionality +#include // Required for: time(), clock_gettime() +#if defined(_WIN32) + // Functions required to query time on Windows + int __stdcall QueryPerformanceCounter(unsigned long long int *lpPerformanceCount); + int __stdcall QueryPerformanceFrequency(unsigned long long int *lpFrequency); +#elif defined(__linux__) + #if _POSIX_C_SOURCE < 199309L + #undef _POSIX_C_SOURCE + #define _POSIX_C_SOURCE 199309L // Required for CLOCK_MONOTONIC if compiled with c99 without gnu ext. + #endif + #include // Required for: timespec +#elif defined(__APPLE__) // macOS also defines __MACH__ + #include // Required for: mach_absolute_time() +#endif + +//---------------------------------------------------------------------------------- +// Defines and Macros +//---------------------------------------------------------------------------------- +#define min(a,b) (((a)<(b))?(a):(b)) +#define max(a,b) (((a)>(b))?(a):(b)) +#define PHYSAC_FLT_MAX 3.402823466e+38f +#define PHYSAC_EPSILON 0.000001f +#define PHYSAC_K 1.0f/3.0f +#define PHYSAC_VECTOR_ZERO (Vector2){ 0.0f, 0.0f } + +//---------------------------------------------------------------------------------- +// Global Variables Definition +//---------------------------------------------------------------------------------- +#if !defined(PHYSAC_NO_THREADS) +static pthread_t physicsThreadId; // Physics thread id +#endif +static unsigned int usedMemory = 0; // Total allocated dynamic memory +static bool physicsThreadEnabled = false; // Physics thread enabled state +static double baseTime = 0.0; // Offset time for MONOTONIC clock +static double startTime = 0.0; // Start time in milliseconds +static double deltaTime = 1.0/60.0/10.0 * 1000; // Delta time used for physics steps, in milliseconds +static double currentTime = 0.0; // Current time in milliseconds +static uint64_t frequency = 0; // Hi-res clock frequency + +static double accumulator = 0.0; // Physics time step delta time accumulator +static unsigned int stepsCount = 0; // Total physics steps processed +static Vector2 gravityForce = { 0.0f, 9.81f }; // Physics world gravity force +static PhysicsBody bodies[PHYSAC_MAX_BODIES]; // Physics bodies pointers array +static unsigned int physicsBodiesCount = 0; // Physics world current bodies counter +static PhysicsManifold contacts[PHYSAC_MAX_MANIFOLDS]; // Physics bodies pointers array +static unsigned int physicsManifoldsCount = 0; // Physics world current manifolds counter + +//---------------------------------------------------------------------------------- +// Module Internal Functions Declaration +//---------------------------------------------------------------------------------- +static int FindAvailableBodyIndex(); // Finds a valid index for a new physics body initialization +static PolygonData CreateRandomPolygon(float radius, int sides); // Creates a random polygon shape with max vertex distance from polygon pivot +static PolygonData CreateRectanglePolygon(Vector2 pos, Vector2 size); // Creates a rectangle polygon shape based on a min and max positions +static void *PhysicsLoop(void *arg); // Physics loop thread function +static void PhysicsStep(void); // Physics steps calculations (dynamics, collisions and position corrections) +static int FindAvailableManifoldIndex(); // Finds a valid index for a new manifold initialization +static PhysicsManifold CreatePhysicsManifold(PhysicsBody a, PhysicsBody b); // Creates a new physics manifold to solve collision +static void DestroyPhysicsManifold(PhysicsManifold manifold); // Unitializes and destroys a physics manifold +static void SolvePhysicsManifold(PhysicsManifold manifold); // Solves a created physics manifold between two physics bodies +static void SolveCircleToCircle(PhysicsManifold manifold); // Solves collision between two circle shape physics bodies +static void SolveCircleToPolygon(PhysicsManifold manifold); // Solves collision between a circle to a polygon shape physics bodies +static void SolvePolygonToCircle(PhysicsManifold manifold); // Solves collision between a polygon to a circle shape physics bodies +static void SolvePolygonToPolygon(PhysicsManifold manifold); // Solves collision between two polygons shape physics bodies +static void IntegratePhysicsForces(PhysicsBody body); // Integrates physics forces into velocity +static void InitializePhysicsManifolds(PhysicsManifold manifold); // Initializes physics manifolds to solve collisions +static void IntegratePhysicsImpulses(PhysicsManifold manifold); // Integrates physics collisions impulses to solve collisions +static void IntegratePhysicsVelocity(PhysicsBody body); // Integrates physics velocity into position and forces +static void CorrectPhysicsPositions(PhysicsManifold manifold); // Corrects physics bodies positions based on manifolds collision information +static float FindAxisLeastPenetration(int *faceIndex, PhysicsShape shapeA, PhysicsShape shapeB); // Finds polygon shapes axis least penetration +static void FindIncidentFace(Vector2 *v0, Vector2 *v1, PhysicsShape ref, PhysicsShape inc, int index); // Finds two polygon shapes incident face +static int Clip(Vector2 normal, float clip, Vector2 *faceA, Vector2 *faceB); // Calculates clipping based on a normal and two faces +static bool BiasGreaterThan(float valueA, float valueB); // Check if values are between bias range +static Vector2 TriangleBarycenter(Vector2 v1, Vector2 v2, Vector2 v3); // Returns the barycenter of a triangle given by 3 points + +static void InitTimer(void); // Initializes hi-resolution MONOTONIC timer +static uint64_t GetTimeCount(void); // Get hi-res MONOTONIC time measure in mseconds +static double GetCurrentTime(void); // Get current time measure in milliseconds + +// Math functions +static Vector2 MathCross(float value, Vector2 vector); // Returns the cross product of a vector and a value +static float MathCrossVector2(Vector2 v1, Vector2 v2); // Returns the cross product of two vectors +static float MathLenSqr(Vector2 vector); // Returns the len square root of a vector +static float MathDot(Vector2 v1, Vector2 v2); // Returns the dot product of two vectors +static inline float DistSqr(Vector2 v1, Vector2 v2); // Returns the square root of distance between two vectors +static void MathNormalize(Vector2 *vector); // Returns the normalized values of a vector +#if defined(PHYSAC_STANDALONE) +static Vector2 Vector2Add(Vector2 v1, Vector2 v2); // Returns the sum of two given vectors +static Vector2 Vector2Subtract(Vector2 v1, Vector2 v2); // Returns the subtract of two given vectors +#endif + +static Mat2 Mat2Radians(float radians); // Creates a matrix 2x2 from a given radians value +static void Mat2Set(Mat2 *matrix, float radians); // Set values from radians to a created matrix 2x2 +static inline Mat2 Mat2Transpose(Mat2 matrix); // Returns the transpose of a given matrix 2x2 +static inline Vector2 Mat2MultiplyVector2(Mat2 matrix, Vector2 vector); // Multiplies a vector by a matrix 2x2 + +//---------------------------------------------------------------------------------- +// Module Functions Definition +//---------------------------------------------------------------------------------- +// Initializes physics values, pointers and creates physics loop thread +PHYSACDEF void InitPhysics(void) +{ + #if !defined(PHYSAC_NO_THREADS) + // NOTE: if defined, user will need to create a thread for PhysicsThread function manually + // Create physics thread using POSIXS thread libraries + pthread_create(&physicsThreadId, NULL, &PhysicsLoop, NULL); + #endif + + // Initialize high resolution timer + InitTimer(); + + #if defined(PHYSAC_DEBUG) + printf("[PHYSAC] physics module initialized successfully\n"); + #endif + + accumulator = 0.0; +} + +// Returns true if physics thread is currently enabled +PHYSACDEF bool IsPhysicsEnabled(void) +{ + return physicsThreadEnabled; +} + +// Sets physics global gravity force +PHYSACDEF void SetPhysicsGravity(float x, float y) +{ + gravityForce.x = x; + gravityForce.y = y; +} + +// Creates a new circle physics body with generic parameters +PHYSACDEF PhysicsBody CreatePhysicsBodyCircle(Vector2 pos, float radius, float density) +{ + PhysicsBody newBody = CreatePhysicsBodyPolygon(pos, radius, PHYSAC_CIRCLE_VERTICES, density); + return newBody; +} + +// Creates a new rectangle physics body with generic parameters +PHYSACDEF PhysicsBody CreatePhysicsBodyRectangle(Vector2 pos, float width, float height, float density) +{ + PhysicsBody newBody = (PhysicsBody)PHYSAC_MALLOC(sizeof(PhysicsBodyData)); + usedMemory += sizeof(PhysicsBodyData); + + int newId = FindAvailableBodyIndex(); + if (newId != -1) + { + // Initialize new body with generic values + newBody->id = newId; + newBody->enabled = true; + newBody->position = pos; + newBody->velocity = (Vector2){ 0.0f }; + newBody->force = (Vector2){ 0.0f }; + newBody->angularVelocity = 0.0f; + newBody->torque = 0.0f; + newBody->orient = 0.0f; + newBody->shape.type = PHYSICS_POLYGON; + newBody->shape.body = newBody; + newBody->shape.radius = 0.0f; + newBody->shape.transform = Mat2Radians(0.0f); + newBody->shape.vertexData = CreateRectanglePolygon(pos, (Vector2){ width, height }); + + // Calculate centroid and moment of inertia + Vector2 center = { 0.0f, 0.0f }; + float area = 0.0f; + float inertia = 0.0f; + + for (int i = 0; i < newBody->shape.vertexData.vertexCount; i++) + { + // Triangle vertices, third vertex implied as (0, 0) + Vector2 p1 = newBody->shape.vertexData.positions[i]; + int nextIndex = (((i + 1) < newBody->shape.vertexData.vertexCount) ? (i + 1) : 0); + Vector2 p2 = newBody->shape.vertexData.positions[nextIndex]; + + float D = MathCrossVector2(p1, p2); + float triangleArea = D/2; + + area += triangleArea; + + // Use area to weight the centroid average, not just vertex position + center.x += triangleArea*PHYSAC_K*(p1.x + p2.x); + center.y += triangleArea*PHYSAC_K*(p1.y + p2.y); + + float intx2 = p1.x*p1.x + p2.x*p1.x + p2.x*p2.x; + float inty2 = p1.y*p1.y + p2.y*p1.y + p2.y*p2.y; + inertia += (0.25f*PHYSAC_K*D)*(intx2 + inty2); + } + + center.x *= 1.0f/area; + center.y *= 1.0f/area; + + // Translate vertices to centroid (make the centroid (0, 0) for the polygon in model space) + // Note: this is not really necessary + for (int i = 0; i < newBody->shape.vertexData.vertexCount; i++) + { + newBody->shape.vertexData.positions[i].x -= center.x; + newBody->shape.vertexData.positions[i].y -= center.y; + } + + newBody->mass = density*area; + newBody->inverseMass = ((newBody->mass != 0.0f) ? 1.0f/newBody->mass : 0.0f); + newBody->inertia = density*inertia; + newBody->inverseInertia = ((newBody->inertia != 0.0f) ? 1.0f/newBody->inertia : 0.0f); + newBody->staticFriction = 0.4f; + newBody->dynamicFriction = 0.2f; + newBody->restitution = 0.0f; + newBody->useGravity = true; + newBody->isGrounded = false; + newBody->freezeOrient = false; + + // Add new body to bodies pointers array and update bodies count + bodies[physicsBodiesCount] = newBody; + physicsBodiesCount++; + + #if defined(PHYSAC_DEBUG) + printf("[PHYSAC] created polygon physics body id %i\n", newBody->id); + #endif + } + #if defined(PHYSAC_DEBUG) + else printf("[PHYSAC] new physics body creation failed because there is any available id to use\n"); + #endif + + return newBody; +} + +// Creates a new polygon physics body with generic parameters +PHYSACDEF PhysicsBody CreatePhysicsBodyPolygon(Vector2 pos, float radius, int sides, float density) +{ + PhysicsBody newBody = (PhysicsBody)PHYSAC_MALLOC(sizeof(PhysicsBodyData)); + usedMemory += sizeof(PhysicsBodyData); + + int newId = FindAvailableBodyIndex(); + if (newId != -1) + { + // Initialize new body with generic values + newBody->id = newId; + newBody->enabled = true; + newBody->position = pos; + newBody->velocity = PHYSAC_VECTOR_ZERO; + newBody->force = PHYSAC_VECTOR_ZERO; + newBody->angularVelocity = 0.0f; + newBody->torque = 0.0f; + newBody->orient = 0.0f; + newBody->shape.type = PHYSICS_POLYGON; + newBody->shape.body = newBody; + newBody->shape.transform = Mat2Radians(0.0f); + newBody->shape.vertexData = CreateRandomPolygon(radius, sides); + + // Calculate centroid and moment of inertia + Vector2 center = { 0.0f, 0.0f }; + float area = 0.0f; + float inertia = 0.0f; + + for (int i = 0; i < newBody->shape.vertexData.vertexCount; i++) + { + // Triangle vertices, third vertex implied as (0, 0) + Vector2 position1 = newBody->shape.vertexData.positions[i]; + int nextIndex = (((i + 1) < newBody->shape.vertexData.vertexCount) ? (i + 1) : 0); + Vector2 position2 = newBody->shape.vertexData.positions[nextIndex]; + + float cross = MathCrossVector2(position1, position2); + float triangleArea = cross/2; + + area += triangleArea; + + // Use area to weight the centroid average, not just vertex position + center.x += triangleArea*PHYSAC_K*(position1.x + position2.x); + center.y += triangleArea*PHYSAC_K*(position1.y + position2.y); + + float intx2 = position1.x*position1.x + position2.x*position1.x + position2.x*position2.x; + float inty2 = position1.y*position1.y + position2.y*position1.y + position2.y*position2.y; + inertia += (0.25f*PHYSAC_K*cross)*(intx2 + inty2); + } + + center.x *= 1.0f/area; + center.y *= 1.0f/area; + + // Translate vertices to centroid (make the centroid (0, 0) for the polygon in model space) + // Note: this is not really necessary + for (int i = 0; i < newBody->shape.vertexData.vertexCount; i++) + { + newBody->shape.vertexData.positions[i].x -= center.x; + newBody->shape.vertexData.positions[i].y -= center.y; + } + + newBody->mass = density*area; + newBody->inverseMass = ((newBody->mass != 0.0f) ? 1.0f/newBody->mass : 0.0f); + newBody->inertia = density*inertia; + newBody->inverseInertia = ((newBody->inertia != 0.0f) ? 1.0f/newBody->inertia : 0.0f); + newBody->staticFriction = 0.4f; + newBody->dynamicFriction = 0.2f; + newBody->restitution = 0.0f; + newBody->useGravity = true; + newBody->isGrounded = false; + newBody->freezeOrient = false; + + // Add new body to bodies pointers array and update bodies count + bodies[physicsBodiesCount] = newBody; + physicsBodiesCount++; + + #if defined(PHYSAC_DEBUG) + printf("[PHYSAC] created polygon physics body id %i\n", newBody->id); + #endif + } + #if defined(PHYSAC_DEBUG) + else printf("[PHYSAC] new physics body creation failed because there is any available id to use\n"); + #endif + + return newBody; +} + +// Adds a force to a physics body +PHYSACDEF void PhysicsAddForce(PhysicsBody body, Vector2 force) +{ + if (body != NULL) body->force = Vector2Add(body->force, force); +} + +// Adds an angular force to a physics body +PHYSACDEF void PhysicsAddTorque(PhysicsBody body, float amount) +{ + if (body != NULL) body->torque += amount; +} + +// Shatters a polygon shape physics body to little physics bodies with explosion force +PHYSACDEF void PhysicsShatter(PhysicsBody body, Vector2 position, float force) +{ + if (body != NULL) + { + if (body->shape.type == PHYSICS_POLYGON) + { + PolygonData vertexData = body->shape.vertexData; + bool collision = false; + + for (int i = 0; i < vertexData.vertexCount; i++) + { + Vector2 positionA = body->position; + Vector2 positionB = Mat2MultiplyVector2(body->shape.transform, Vector2Add(body->position, vertexData.positions[i])); + int nextIndex = (((i + 1) < vertexData.vertexCount) ? (i + 1) : 0); + Vector2 positionC = Mat2MultiplyVector2(body->shape.transform, Vector2Add(body->position, vertexData.positions[nextIndex])); + + // Check collision between each triangle + float alpha = ((positionB.y - positionC.y)*(position.x - positionC.x) + (positionC.x - positionB.x)*(position.y - positionC.y))/ + ((positionB.y - positionC.y)*(positionA.x - positionC.x) + (positionC.x - positionB.x)*(positionA.y - positionC.y)); + + float beta = ((positionC.y - positionA.y)*(position.x - positionC.x) + (positionA.x - positionC.x)*(position.y - positionC.y))/ + ((positionB.y - positionC.y)*(positionA.x - positionC.x) + (positionC.x - positionB.x)*(positionA.y - positionC.y)); + + float gamma = 1.0f - alpha - beta; + + if ((alpha > 0.0f) && (beta > 0.0f) & (gamma > 0.0f)) + { + collision = true; + break; + } + } + + if (collision) + { + int count = vertexData.vertexCount; + Vector2 bodyPos = body->position; + Vector2 *vertices = (Vector2*)malloc(sizeof(Vector2) * count); + Mat2 trans = body->shape.transform; + for (int i = 0; i < count; i++) vertices[i] = vertexData.positions[i]; + + // Destroy shattered physics body + DestroyPhysicsBody(body); + + for (int i = 0; i < count; i++) + { + int nextIndex = (((i + 1) < count) ? (i + 1) : 0); + Vector2 center = TriangleBarycenter(vertices[i], vertices[nextIndex], PHYSAC_VECTOR_ZERO); + center = Vector2Add(bodyPos, center); + Vector2 offset = Vector2Subtract(center, bodyPos); + + PhysicsBody newBody = CreatePhysicsBodyPolygon(center, 10, 3, 10); // Create polygon physics body with relevant values + + PolygonData newData = { 0 }; + newData.vertexCount = 3; + + newData.positions[0] = Vector2Subtract(vertices[i], offset); + newData.positions[1] = Vector2Subtract(vertices[nextIndex], offset); + newData.positions[2] = Vector2Subtract(position, center); + + // Separate vertices to avoid unnecessary physics collisions + newData.positions[0].x *= 0.95f; + newData.positions[0].y *= 0.95f; + newData.positions[1].x *= 0.95f; + newData.positions[1].y *= 0.95f; + newData.positions[2].x *= 0.95f; + newData.positions[2].y *= 0.95f; + + // Calculate polygon faces normals + for (int j = 0; j < newData.vertexCount; j++) + { + int nextVertex = (((j + 1) < newData.vertexCount) ? (j + 1) : 0); + Vector2 face = Vector2Subtract(newData.positions[nextVertex], newData.positions[j]); + + newData.normals[j] = (Vector2){ face.y, -face.x }; + MathNormalize(&newData.normals[j]); + } + + // Apply computed vertex data to new physics body shape + newBody->shape.vertexData = newData; + newBody->shape.transform = trans; + + // Calculate centroid and moment of inertia + center = PHYSAC_VECTOR_ZERO; + float area = 0.0f; + float inertia = 0.0f; + + for (int j = 0; j < newBody->shape.vertexData.vertexCount; j++) + { + // Triangle vertices, third vertex implied as (0, 0) + Vector2 p1 = newBody->shape.vertexData.positions[j]; + int nextVertex = (((j + 1) < newBody->shape.vertexData.vertexCount) ? (j + 1) : 0); + Vector2 p2 = newBody->shape.vertexData.positions[nextVertex]; + + float D = MathCrossVector2(p1, p2); + float triangleArea = D/2; + + area += triangleArea; + + // Use area to weight the centroid average, not just vertex position + center.x += triangleArea*PHYSAC_K*(p1.x + p2.x); + center.y += triangleArea*PHYSAC_K*(p1.y + p2.y); + + float intx2 = p1.x*p1.x + p2.x*p1.x + p2.x*p2.x; + float inty2 = p1.y*p1.y + p2.y*p1.y + p2.y*p2.y; + inertia += (0.25f*PHYSAC_K*D)*(intx2 + inty2); + } + + center.x *= 1.0f/area; + center.y *= 1.0f/area; + + newBody->mass = area; + newBody->inverseMass = ((newBody->mass != 0.0f) ? 1.0f/newBody->mass : 0.0f); + newBody->inertia = inertia; + newBody->inverseInertia = ((newBody->inertia != 0.0f) ? 1.0f/newBody->inertia : 0.0f); + + // Calculate explosion force direction + Vector2 pointA = newBody->position; + Vector2 pointB = Vector2Subtract(newData.positions[1], newData.positions[0]); + pointB.x /= 2.0f; + pointB.y /= 2.0f; + Vector2 forceDirection = Vector2Subtract(Vector2Add(pointA, Vector2Add(newData.positions[0], pointB)), newBody->position); + MathNormalize(&forceDirection); + forceDirection.x *= force; + forceDirection.y *= force; + + // Apply force to new physics body + PhysicsAddForce(newBody, forceDirection); + } + + free(vertices); + } + } + } + #if defined(PHYSAC_DEBUG) + else printf("[PHYSAC] error when trying to shatter a null reference physics body"); + #endif +} + +// Returns the current amount of created physics bodies +PHYSACDEF int GetPhysicsBodiesCount(void) +{ + return physicsBodiesCount; +} + +// Returns a physics body of the bodies pool at a specific index +PHYSACDEF PhysicsBody GetPhysicsBody(int index) +{ + PhysicsBody body = NULL; + + if (index < physicsBodiesCount) + { + body = bodies[index]; + + if (body == NULL) + { + #if defined(PHYSAC_DEBUG) + printf("[PHYSAC] error when trying to get a null reference physics body"); + #endif + } + } + #if defined(PHYSAC_DEBUG) + else printf("[PHYSAC] physics body index is out of bounds"); + #endif + + return body; +} + +// Returns the physics body shape type (PHYSICS_CIRCLE or PHYSICS_POLYGON) +PHYSACDEF int GetPhysicsShapeType(int index) +{ + int result = -1; + + if (index < physicsBodiesCount) + { + PhysicsBody body = bodies[index]; + + if (body != NULL) result = body->shape.type; + #if defined(PHYSAC_DEBUG) + else printf("[PHYSAC] error when trying to get a null reference physics body"); + #endif + } + #if defined(PHYSAC_DEBUG) + else printf("[PHYSAC] physics body index is out of bounds"); + #endif + + return result; +} + +// Returns the amount of vertices of a physics body shape +PHYSACDEF int GetPhysicsShapeVerticesCount(int index) +{ + int result = 0; + + if (index < physicsBodiesCount) + { + PhysicsBody body = bodies[index]; + + if (body != NULL) + { + switch (body->shape.type) + { + case PHYSICS_CIRCLE: result = PHYSAC_CIRCLE_VERTICES; break; + case PHYSICS_POLYGON: result = body->shape.vertexData.vertexCount; break; + default: break; + } + } + #if defined(PHYSAC_DEBUG) + else printf("[PHYSAC] error when trying to get a null reference physics body"); + #endif + } + #if defined(PHYSAC_DEBUG) + else printf("[PHYSAC] physics body index is out of bounds"); + #endif + + return result; +} + +// Returns transformed position of a body shape (body position + vertex transformed position) +PHYSACDEF Vector2 GetPhysicsShapeVertex(PhysicsBody body, int vertex) +{ + Vector2 position = { 0.0f, 0.0f }; + + if (body != NULL) + { + switch (body->shape.type) + { + case PHYSICS_CIRCLE: + { + position.x = body->position.x + cosf(360.0f/PHYSAC_CIRCLE_VERTICES*vertex*PHYSAC_DEG2RAD)*body->shape.radius; + position.y = body->position.y + sinf(360.0f/PHYSAC_CIRCLE_VERTICES*vertex*PHYSAC_DEG2RAD)*body->shape.radius; + } break; + case PHYSICS_POLYGON: + { + PolygonData vertexData = body->shape.vertexData; + position = Vector2Add(body->position, Mat2MultiplyVector2(body->shape.transform, vertexData.positions[vertex])); + } break; + default: break; + } + } + #if defined(PHYSAC_DEBUG) + else printf("[PHYSAC] error when trying to get a null reference physics body"); + #endif + + return position; +} + +// Sets physics body shape transform based on radians parameter +PHYSACDEF void SetPhysicsBodyRotation(PhysicsBody body, float radians) +{ + if (body != NULL) + { + body->orient = radians; + + if (body->shape.type == PHYSICS_POLYGON) body->shape.transform = Mat2Radians(radians); + } +} + +// Unitializes and destroys a physics body +PHYSACDEF void DestroyPhysicsBody(PhysicsBody body) +{ + if (body != NULL) + { + int id = body->id; + int index = -1; + + for (int i = 0; i < physicsBodiesCount; i++) + { + if (bodies[i]->id == id) + { + index = i; + break; + } + } + + #if defined(PHYSAC_DEBUG) + if (index == -1) printf("[PHYSAC] cannot find body id %i in pointers array\n", id); + #endif + + // Free body allocated memory + PHYSAC_FREE(body); + usedMemory -= sizeof(PhysicsBodyData); + bodies[index] = NULL; + + // Reorder physics bodies pointers array and its catched index + for (int i = index; i < physicsBodiesCount; i++) + { + if ((i + 1) < physicsBodiesCount) bodies[i] = bodies[i + 1]; + } + + // Update physics bodies count + physicsBodiesCount--; + + #if defined(PHYSAC_DEBUG) + printf("[PHYSAC] destroyed physics body id %i\n", id); + #endif + } + #if defined(PHYSAC_DEBUG) + else printf("[PHYSAC] error trying to destroy a null referenced body\n"); + #endif +} + +// Destroys created physics bodies and manifolds and resets global values +PHYSACDEF void ResetPhysics(void) +{ + // Unitialize physics bodies dynamic memory allocations + for (int i = physicsBodiesCount - 1; i >= 0; i--) + { + PhysicsBody body = bodies[i]; + + if (body != NULL) + { + PHYSAC_FREE(body); + bodies[i] = NULL; + usedMemory -= sizeof(PhysicsBodyData); + } + } + + physicsBodiesCount = 0; + + // Unitialize physics manifolds dynamic memory allocations + for (int i = physicsManifoldsCount - 1; i >= 0; i--) + { + PhysicsManifold manifold = contacts[i]; + + if (manifold != NULL) + { + PHYSAC_FREE(manifold); + contacts[i] = NULL; + usedMemory -= sizeof(PhysicsManifoldData); + } + } + + physicsManifoldsCount = 0; + + #if defined(PHYSAC_DEBUG) + printf("[PHYSAC] physics module reset successfully\n"); + #endif +} + +// Unitializes physics pointers and exits physics loop thread +PHYSACDEF void ClosePhysics(void) +{ + // Exit physics loop thread + physicsThreadEnabled = false; + + #if !defined(PHYSAC_NO_THREADS) + pthread_join(physicsThreadId, NULL); + #endif + + // Unitialize physics manifolds dynamic memory allocations + for (int i = physicsManifoldsCount - 1; i >= 0; i--) DestroyPhysicsManifold(contacts[i]); + + // Unitialize physics bodies dynamic memory allocations + for (int i = physicsBodiesCount - 1; i >= 0; i--) DestroyPhysicsBody(bodies[i]); + + #if defined(PHYSAC_DEBUG) + if (physicsBodiesCount > 0 || usedMemory != 0) printf("[PHYSAC] physics module closed with %i still allocated bodies [MEMORY: %i bytes]\n", physicsBodiesCount, usedMemory); + else if (physicsManifoldsCount > 0 || usedMemory != 0) printf("[PHYSAC] physics module closed with %i still allocated manifolds [MEMORY: %i bytes]\n", physicsManifoldsCount, usedMemory); + else printf("[PHYSAC] physics module closed successfully\n"); + #endif +} + +//---------------------------------------------------------------------------------- +// Module Internal Functions Definition +//---------------------------------------------------------------------------------- +// Finds a valid index for a new physics body initialization +static int FindAvailableBodyIndex() +{ + int index = -1; + for (int i = 0; i < PHYSAC_MAX_BODIES; i++) + { + int currentId = i; + + // Check if current id already exist in other physics body + for (int k = 0; k < physicsBodiesCount; k++) + { + if (bodies[k]->id == currentId) + { + currentId++; + break; + } + } + + // If it is not used, use it as new physics body id + if (currentId == i) + { + index = i; + break; + } + } + + return index; +} + +// Creates a random polygon shape with max vertex distance from polygon pivot +static PolygonData CreateRandomPolygon(float radius, int sides) +{ + PolygonData data = { 0 }; + data.vertexCount = sides; + + // Calculate polygon vertices positions + for (int i = 0; i < data.vertexCount; i++) + { + data.positions[i].x = cosf(360.0f/sides*i*PHYSAC_DEG2RAD)*radius; + data.positions[i].y = sinf(360.0f/sides*i*PHYSAC_DEG2RAD)*radius; + } + + // Calculate polygon faces normals + for (int i = 0; i < data.vertexCount; i++) + { + int nextIndex = (((i + 1) < sides) ? (i + 1) : 0); + Vector2 face = Vector2Subtract(data.positions[nextIndex], data.positions[i]); + + data.normals[i] = (Vector2){ face.y, -face.x }; + MathNormalize(&data.normals[i]); + } + + return data; +} + +// Creates a rectangle polygon shape based on a min and max positions +static PolygonData CreateRectanglePolygon(Vector2 pos, Vector2 size) +{ + PolygonData data = { 0 }; + data.vertexCount = 4; + + // Calculate polygon vertices positions + data.positions[0] = (Vector2){ pos.x + size.x/2, pos.y - size.y/2 }; + data.positions[1] = (Vector2){ pos.x + size.x/2, pos.y + size.y/2 }; + data.positions[2] = (Vector2){ pos.x - size.x/2, pos.y + size.y/2 }; + data.positions[3] = (Vector2){ pos.x - size.x/2, pos.y - size.y/2 }; + + // Calculate polygon faces normals + for (int i = 0; i < data.vertexCount; i++) + { + int nextIndex = (((i + 1) < data.vertexCount) ? (i + 1) : 0); + Vector2 face = Vector2Subtract(data.positions[nextIndex], data.positions[i]); + + data.normals[i] = (Vector2){ face.y, -face.x }; + MathNormalize(&data.normals[i]); + } + + return data; +} + +// Physics loop thread function +static void *PhysicsLoop(void *arg) +{ + #if defined(PHYSAC_DEBUG) + printf("[PHYSAC] physics thread created successfully\n"); + #endif + + // Initialize physics loop thread values + physicsThreadEnabled = true; + + // Physics update loop + while (physicsThreadEnabled) + { + RunPhysicsStep(); + } + + return NULL; +} + +// Physics steps calculations (dynamics, collisions and position corrections) +static void PhysicsStep(void) +{ + // Update current steps count + stepsCount++; + + // Clear previous generated collisions information + for (int i = physicsManifoldsCount - 1; i >= 0; i--) + { + PhysicsManifold manifold = contacts[i]; + if (manifold != NULL) DestroyPhysicsManifold(manifold); + } + + // Reset physics bodies grounded state + for (int i = 0; i < physicsBodiesCount; i++) + { + PhysicsBody body = bodies[i]; + body->isGrounded = false; + } + + // Generate new collision information + for (int i = 0; i < physicsBodiesCount; i++) + { + PhysicsBody bodyA = bodies[i]; + + if (bodyA != NULL) + { + for (int j = i + 1; j < physicsBodiesCount; j++) + { + PhysicsBody bodyB = bodies[j]; + + if (bodyB != NULL) + { + if ((bodyA->inverseMass == 0) && (bodyB->inverseMass == 0)) continue; + + PhysicsManifold manifold = CreatePhysicsManifold(bodyA, bodyB); + SolvePhysicsManifold(manifold); + + if (manifold->contactsCount > 0) + { + // Create a new manifold with same information as previously solved manifold and add it to the manifolds pool last slot + PhysicsManifold newManifold = CreatePhysicsManifold(bodyA, bodyB); + newManifold->penetration = manifold->penetration; + newManifold->normal = manifold->normal; + newManifold->contacts[0] = manifold->contacts[0]; + newManifold->contacts[1] = manifold->contacts[1]; + newManifold->contactsCount = manifold->contactsCount; + newManifold->restitution = manifold->restitution; + newManifold->dynamicFriction = manifold->dynamicFriction; + newManifold->staticFriction = manifold->staticFriction; + } + } + } + } + } + + // Integrate forces to physics bodies + for (int i = 0; i < physicsBodiesCount; i++) + { + PhysicsBody body = bodies[i]; + if (body != NULL) IntegratePhysicsForces(body); + } + + // Initialize physics manifolds to solve collisions + for (int i = 0; i < physicsManifoldsCount; i++) + { + PhysicsManifold manifold = contacts[i]; + if (manifold != NULL) InitializePhysicsManifolds(manifold); + } + + // Integrate physics collisions impulses to solve collisions + for (int i = 0; i < PHYSAC_COLLISION_ITERATIONS; i++) + { + for (int j = 0; j < physicsManifoldsCount; j++) + { + PhysicsManifold manifold = contacts[i]; + if (manifold != NULL) IntegratePhysicsImpulses(manifold); + } + } + + // Integrate velocity to physics bodies + for (int i = 0; i < physicsBodiesCount; i++) + { + PhysicsBody body = bodies[i]; + if (body != NULL) IntegratePhysicsVelocity(body); + } + + // Correct physics bodies positions based on manifolds collision information + for (int i = 0; i < physicsManifoldsCount; i++) + { + PhysicsManifold manifold = contacts[i]; + if (manifold != NULL) CorrectPhysicsPositions(manifold); + } + + // Clear physics bodies forces + for (int i = 0; i < physicsBodiesCount; i++) + { + PhysicsBody body = bodies[i]; + if (body != NULL) + { + body->force = PHYSAC_VECTOR_ZERO; + body->torque = 0.0f; + } + } +} + +// Wrapper to ensure PhysicsStep is run with at a fixed time step +PHYSACDEF void RunPhysicsStep(void) +{ + // Calculate current time + currentTime = GetCurrentTime(); + + // Calculate current delta time + const double delta = currentTime - startTime; + + // Store the time elapsed since the last frame began + accumulator += delta; + + // Fixed time stepping loop + while (accumulator >= deltaTime) + { +#ifdef PHYSAC_DEBUG + //printf("currentTime %f, startTime %f, accumulator-pre %f, accumulator-post %f, delta %f, deltaTime %f\n", + // currentTime, startTime, accumulator, accumulator-deltaTime, delta, deltaTime); +#endif + PhysicsStep(); + accumulator -= deltaTime; + } + + // Record the starting of this frame + startTime = currentTime; +} + +PHYSACDEF void SetPhysicsTimeStep(double delta) +{ + deltaTime = delta; +} + +// Finds a valid index for a new manifold initialization +static int FindAvailableManifoldIndex() +{ + int index = -1; + for (int i = 0; i < PHYSAC_MAX_MANIFOLDS; i++) + { + int currentId = i; + + // Check if current id already exist in other physics body + for (int k = 0; k < physicsManifoldsCount; k++) + { + if (contacts[k]->id == currentId) + { + currentId++; + break; + } + } + + // If it is not used, use it as new physics body id + if (currentId == i) + { + index = i; + break; + } + } + + return index; +} + +// Creates a new physics manifold to solve collision +static PhysicsManifold CreatePhysicsManifold(PhysicsBody a, PhysicsBody b) +{ + PhysicsManifold newManifold = (PhysicsManifold)PHYSAC_MALLOC(sizeof(PhysicsManifoldData)); + usedMemory += sizeof(PhysicsManifoldData); + + int newId = FindAvailableManifoldIndex(); + if (newId != -1) + { + // Initialize new manifold with generic values + newManifold->id = newId; + newManifold->bodyA = a; + newManifold->bodyB = b; + newManifold->penetration = 0; + newManifold->normal = PHYSAC_VECTOR_ZERO; + newManifold->contacts[0] = PHYSAC_VECTOR_ZERO; + newManifold->contacts[1] = PHYSAC_VECTOR_ZERO; + newManifold->contactsCount = 0; + newManifold->restitution = 0.0f; + newManifold->dynamicFriction = 0.0f; + newManifold->staticFriction = 0.0f; + + // Add new body to bodies pointers array and update bodies count + contacts[physicsManifoldsCount] = newManifold; + physicsManifoldsCount++; + } + #if defined(PHYSAC_DEBUG) + else printf("[PHYSAC] new physics manifold creation failed because there is any available id to use\n"); + #endif + + return newManifold; +} + +// Unitializes and destroys a physics manifold +static void DestroyPhysicsManifold(PhysicsManifold manifold) +{ + if (manifold != NULL) + { + int id = manifold->id; + int index = -1; + + for (int i = 0; i < physicsManifoldsCount; i++) + { + if (contacts[i]->id == id) + { + index = i; + break; + } + } + + #if defined(PHYSAC_DEBUG) + if (index == -1) printf("[PHYSAC] cannot find manifold id %i in pointers array\n", id); + #endif + + // Free manifold allocated memory + PHYSAC_FREE(manifold); + usedMemory -= sizeof(PhysicsManifoldData); + contacts[index] = NULL; + + // Reorder physics manifolds pointers array and its catched index + for (int i = index; i < physicsManifoldsCount; i++) + { + if ((i + 1) < physicsManifoldsCount) contacts[i] = contacts[i + 1]; + } + + // Update physics manifolds count + physicsManifoldsCount--; + } + #if defined(PHYSAC_DEBUG) + else printf("[PHYSAC] error trying to destroy a null referenced manifold\n"); + #endif +} + +// Solves a created physics manifold between two physics bodies +static void SolvePhysicsManifold(PhysicsManifold manifold) +{ + switch (manifold->bodyA->shape.type) + { + case PHYSICS_CIRCLE: + { + switch (manifold->bodyB->shape.type) + { + case PHYSICS_CIRCLE: SolveCircleToCircle(manifold); break; + case PHYSICS_POLYGON: SolveCircleToPolygon(manifold); break; + default: break; + } + } break; + case PHYSICS_POLYGON: + { + switch (manifold->bodyB->shape.type) + { + case PHYSICS_CIRCLE: SolvePolygonToCircle(manifold); break; + case PHYSICS_POLYGON: SolvePolygonToPolygon(manifold); break; + default: break; + } + } break; + default: break; + } + + // Update physics body grounded state if normal direction is down and grounded state is not set yet in previous manifolds + if (!manifold->bodyB->isGrounded) manifold->bodyB->isGrounded = (manifold->normal.y < 0); +} + +// Solves collision between two circle shape physics bodies +static void SolveCircleToCircle(PhysicsManifold manifold) +{ + PhysicsBody bodyA = manifold->bodyA; + PhysicsBody bodyB = manifold->bodyB; + + if ((bodyA == NULL) || (bodyB == NULL)) return; + + // Calculate translational vector, which is normal + Vector2 normal = Vector2Subtract(bodyB->position, bodyA->position); + + float distSqr = MathLenSqr(normal); + float radius = bodyA->shape.radius + bodyB->shape.radius; + + // Check if circles are not in contact + if (distSqr >= radius*radius) + { + manifold->contactsCount = 0; + return; + } + + float distance = sqrtf(distSqr); + manifold->contactsCount = 1; + + if (distance == 0.0f) + { + manifold->penetration = bodyA->shape.radius; + manifold->normal = (Vector2){ 1.0f, 0.0f }; + manifold->contacts[0] = bodyA->position; + } + else + { + manifold->penetration = radius - distance; + manifold->normal = (Vector2){ normal.x/distance, normal.y/distance }; // Faster than using MathNormalize() due to sqrt is already performed + manifold->contacts[0] = (Vector2){ manifold->normal.x*bodyA->shape.radius + bodyA->position.x, manifold->normal.y*bodyA->shape.radius + bodyA->position.y }; + } + + // Update physics body grounded state if normal direction is down + if (!bodyA->isGrounded) bodyA->isGrounded = (manifold->normal.y < 0); +} + +// Solves collision between a circle to a polygon shape physics bodies +static void SolveCircleToPolygon(PhysicsManifold manifold) +{ + PhysicsBody bodyA = manifold->bodyA; + PhysicsBody bodyB = manifold->bodyB; + + if ((bodyA == NULL) || (bodyB == NULL)) return; + + manifold->contactsCount = 0; + + // Transform circle center to polygon transform space + Vector2 center = bodyA->position; + center = Mat2MultiplyVector2(Mat2Transpose(bodyB->shape.transform), Vector2Subtract(center, bodyB->position)); + + // Find edge with minimum penetration + // It is the same concept as using support points in SolvePolygonToPolygon + float separation = -PHYSAC_FLT_MAX; + int faceNormal = 0; + PolygonData vertexData = bodyB->shape.vertexData; + + for (int i = 0; i < vertexData.vertexCount; i++) + { + float currentSeparation = MathDot(vertexData.normals[i], Vector2Subtract(center, vertexData.positions[i])); + + if (currentSeparation > bodyA->shape.radius) return; + + if (currentSeparation > separation) + { + separation = currentSeparation; + faceNormal = i; + } + } + + // Grab face's vertices + Vector2 v1 = vertexData.positions[faceNormal]; + int nextIndex = (((faceNormal + 1) < vertexData.vertexCount) ? (faceNormal + 1) : 0); + Vector2 v2 = vertexData.positions[nextIndex]; + + // Check to see if center is within polygon + if (separation < PHYSAC_EPSILON) + { + manifold->contactsCount = 1; + Vector2 normal = Mat2MultiplyVector2(bodyB->shape.transform, vertexData.normals[faceNormal]); + manifold->normal = (Vector2){ -normal.x, -normal.y }; + manifold->contacts[0] = (Vector2){ manifold->normal.x*bodyA->shape.radius + bodyA->position.x, manifold->normal.y*bodyA->shape.radius + bodyA->position.y }; + manifold->penetration = bodyA->shape.radius; + return; + } + + // Determine which voronoi region of the edge center of circle lies within + float dot1 = MathDot(Vector2Subtract(center, v1), Vector2Subtract(v2, v1)); + float dot2 = MathDot(Vector2Subtract(center, v2), Vector2Subtract(v1, v2)); + manifold->penetration = bodyA->shape.radius - separation; + + if (dot1 <= 0.0f) // Closest to v1 + { + if (DistSqr(center, v1) > bodyA->shape.radius*bodyA->shape.radius) return; + + manifold->contactsCount = 1; + Vector2 normal = Vector2Subtract(v1, center); + normal = Mat2MultiplyVector2(bodyB->shape.transform, normal); + MathNormalize(&normal); + manifold->normal = normal; + v1 = Mat2MultiplyVector2(bodyB->shape.transform, v1); + v1 = Vector2Add(v1, bodyB->position); + manifold->contacts[0] = v1; + } + else if (dot2 <= 0.0f) // Closest to v2 + { + if (DistSqr(center, v2) > bodyA->shape.radius*bodyA->shape.radius) return; + + manifold->contactsCount = 1; + Vector2 normal = Vector2Subtract(v2, center); + v2 = Mat2MultiplyVector2(bodyB->shape.transform, v2); + v2 = Vector2Add(v2, bodyB->position); + manifold->contacts[0] = v2; + normal = Mat2MultiplyVector2(bodyB->shape.transform, normal); + MathNormalize(&normal); + manifold->normal = normal; + } + else // Closest to face + { + Vector2 normal = vertexData.normals[faceNormal]; + + if (MathDot(Vector2Subtract(center, v1), normal) > bodyA->shape.radius) return; + + normal = Mat2MultiplyVector2(bodyB->shape.transform, normal); + manifold->normal = (Vector2){ -normal.x, -normal.y }; + manifold->contacts[0] = (Vector2){ manifold->normal.x*bodyA->shape.radius + bodyA->position.x, manifold->normal.y*bodyA->shape.radius + bodyA->position.y }; + manifold->contactsCount = 1; + } +} + +// Solves collision between a polygon to a circle shape physics bodies +static void SolvePolygonToCircle(PhysicsManifold manifold) +{ + PhysicsBody bodyA = manifold->bodyA; + PhysicsBody bodyB = manifold->bodyB; + + if ((bodyA == NULL) || (bodyB == NULL)) return; + + manifold->bodyA = bodyB; + manifold->bodyB = bodyA; + SolveCircleToPolygon(manifold); + + manifold->normal.x *= -1.0f; + manifold->normal.y *= -1.0f; +} + +// Solves collision between two polygons shape physics bodies +static void SolvePolygonToPolygon(PhysicsManifold manifold) +{ + if ((manifold->bodyA == NULL) || (manifold->bodyB == NULL)) return; + + PhysicsShape bodyA = manifold->bodyA->shape; + PhysicsShape bodyB = manifold->bodyB->shape; + manifold->contactsCount = 0; + + // Check for separating axis with A shape's face planes + int faceA = 0; + float penetrationA = FindAxisLeastPenetration(&faceA, bodyA, bodyB); + if (penetrationA >= 0.0f) return; + + // Check for separating axis with B shape's face planes + int faceB = 0; + float penetrationB = FindAxisLeastPenetration(&faceB, bodyB, bodyA); + if (penetrationB >= 0.0f) return; + + int referenceIndex = 0; + bool flip = false; // Always point from A shape to B shape + + PhysicsShape refPoly; // Reference + PhysicsShape incPoly; // Incident + + // Determine which shape contains reference face + if (BiasGreaterThan(penetrationA, penetrationB)) + { + refPoly = bodyA; + incPoly = bodyB; + referenceIndex = faceA; + } + else + { + refPoly = bodyB; + incPoly = bodyA; + referenceIndex = faceB; + flip = true; + } + + // World space incident face + Vector2 incidentFace[2]; + FindIncidentFace(&incidentFace[0], &incidentFace[1], refPoly, incPoly, referenceIndex); + + // Setup reference face vertices + PolygonData refData = refPoly.vertexData; + Vector2 v1 = refData.positions[referenceIndex]; + referenceIndex = (((referenceIndex + 1) < refData.vertexCount) ? (referenceIndex + 1) : 0); + Vector2 v2 = refData.positions[referenceIndex]; + + // Transform vertices to world space + v1 = Mat2MultiplyVector2(refPoly.transform, v1); + v1 = Vector2Add(v1, refPoly.body->position); + v2 = Mat2MultiplyVector2(refPoly.transform, v2); + v2 = Vector2Add(v2, refPoly.body->position); + + // Calculate reference face side normal in world space + Vector2 sidePlaneNormal = Vector2Subtract(v2, v1); + MathNormalize(&sidePlaneNormal); + + // Orthogonalize + Vector2 refFaceNormal = { sidePlaneNormal.y, -sidePlaneNormal.x }; + float refC = MathDot(refFaceNormal, v1); + float negSide = MathDot(sidePlaneNormal, v1)*-1; + float posSide = MathDot(sidePlaneNormal, v2); + + // Clip incident face to reference face side planes (due to floating point error, possible to not have required points + if (Clip((Vector2){ -sidePlaneNormal.x, -sidePlaneNormal.y }, negSide, &incidentFace[0], &incidentFace[1]) < 2) return; + if (Clip(sidePlaneNormal, posSide, &incidentFace[0], &incidentFace[1]) < 2) return; + + // Flip normal if required + manifold->normal = (flip ? (Vector2){ -refFaceNormal.x, -refFaceNormal.y } : refFaceNormal); + + // Keep points behind reference face + int currentPoint = 0; // Clipped points behind reference face + float separation = MathDot(refFaceNormal, incidentFace[0]) - refC; + if (separation <= 0.0f) + { + manifold->contacts[currentPoint] = incidentFace[0]; + manifold->penetration = -separation; + currentPoint++; + } + else manifold->penetration = 0.0f; + + separation = MathDot(refFaceNormal, incidentFace[1]) - refC; + + if (separation <= 0.0f) + { + manifold->contacts[currentPoint] = incidentFace[1]; + manifold->penetration += -separation; + currentPoint++; + + // Calculate total penetration average + manifold->penetration /= currentPoint; + } + + manifold->contactsCount = currentPoint; +} + +// Integrates physics forces into velocity +static void IntegratePhysicsForces(PhysicsBody body) +{ + if ((body == NULL) || (body->inverseMass == 0.0f) || !body->enabled) return; + + body->velocity.x += (body->force.x*body->inverseMass)*(deltaTime/2.0); + body->velocity.y += (body->force.y*body->inverseMass)*(deltaTime/2.0); + + if (body->useGravity) + { + body->velocity.x += gravityForce.x*(deltaTime/1000/2.0); + body->velocity.y += gravityForce.y*(deltaTime/1000/2.0); + } + + if (!body->freezeOrient) body->angularVelocity += body->torque*body->inverseInertia*(deltaTime/2.0); +} + +// Initializes physics manifolds to solve collisions +static void InitializePhysicsManifolds(PhysicsManifold manifold) +{ + PhysicsBody bodyA = manifold->bodyA; + PhysicsBody bodyB = manifold->bodyB; + + if ((bodyA == NULL) || (bodyB == NULL)) return; + + // Calculate average restitution, static and dynamic friction + manifold->restitution = sqrtf(bodyA->restitution*bodyB->restitution); + manifold->staticFriction = sqrtf(bodyA->staticFriction*bodyB->staticFriction); + manifold->dynamicFriction = sqrtf(bodyA->dynamicFriction*bodyB->dynamicFriction); + + for (int i = 0; i < manifold->contactsCount; i++) + { + // Caculate radius from center of mass to contact + Vector2 radiusA = Vector2Subtract(manifold->contacts[i], bodyA->position); + Vector2 radiusB = Vector2Subtract(manifold->contacts[i], bodyB->position); + + Vector2 crossA = MathCross(bodyA->angularVelocity, radiusA); + Vector2 crossB = MathCross(bodyB->angularVelocity, radiusB); + + Vector2 radiusV = { 0.0f, 0.0f }; + radiusV.x = bodyB->velocity.x + crossB.x - bodyA->velocity.x - crossA.x; + radiusV.y = bodyB->velocity.y + crossB.y - bodyA->velocity.y - crossA.y; + + // Determine if we should perform a resting collision or not; + // The idea is if the only thing moving this object is gravity, then the collision should be performed without any restitution + if (MathLenSqr(radiusV) < (MathLenSqr((Vector2){ gravityForce.x*deltaTime/1000, gravityForce.y*deltaTime/1000 }) + PHYSAC_EPSILON)) manifold->restitution = 0; + } +} + +// Integrates physics collisions impulses to solve collisions +static void IntegratePhysicsImpulses(PhysicsManifold manifold) +{ + PhysicsBody bodyA = manifold->bodyA; + PhysicsBody bodyB = manifold->bodyB; + + if ((bodyA == NULL) || (bodyB == NULL)) return; + + // Early out and positional correct if both objects have infinite mass + if (fabs(bodyA->inverseMass + bodyB->inverseMass) <= PHYSAC_EPSILON) + { + bodyA->velocity = PHYSAC_VECTOR_ZERO; + bodyB->velocity = PHYSAC_VECTOR_ZERO; + return; + } + + for (int i = 0; i < manifold->contactsCount; i++) + { + // Calculate radius from center of mass to contact + Vector2 radiusA = Vector2Subtract(manifold->contacts[i], bodyA->position); + Vector2 radiusB = Vector2Subtract(manifold->contacts[i], bodyB->position); + + // Calculate relative velocity + Vector2 radiusV = { 0.0f, 0.0f }; + radiusV.x = bodyB->velocity.x + MathCross(bodyB->angularVelocity, radiusB).x - bodyA->velocity.x - MathCross(bodyA->angularVelocity, radiusA).x; + radiusV.y = bodyB->velocity.y + MathCross(bodyB->angularVelocity, radiusB).y - bodyA->velocity.y - MathCross(bodyA->angularVelocity, radiusA).y; + + // Relative velocity along the normal + float contactVelocity = MathDot(radiusV, manifold->normal); + + // Do not resolve if velocities are separating + if (contactVelocity > 0.0f) return; + + float raCrossN = MathCrossVector2(radiusA, manifold->normal); + float rbCrossN = MathCrossVector2(radiusB, manifold->normal); + + float inverseMassSum = bodyA->inverseMass + bodyB->inverseMass + (raCrossN*raCrossN)*bodyA->inverseInertia + (rbCrossN*rbCrossN)*bodyB->inverseInertia; + + // Calculate impulse scalar value + float impulse = -(1.0f + manifold->restitution)*contactVelocity; + impulse /= inverseMassSum; + impulse /= (float)manifold->contactsCount; + + // Apply impulse to each physics body + Vector2 impulseV = { manifold->normal.x*impulse, manifold->normal.y*impulse }; + + if (bodyA->enabled) + { + bodyA->velocity.x += bodyA->inverseMass*(-impulseV.x); + bodyA->velocity.y += bodyA->inverseMass*(-impulseV.y); + if (!bodyA->freezeOrient) bodyA->angularVelocity += bodyA->inverseInertia*MathCrossVector2(radiusA, (Vector2){ -impulseV.x, -impulseV.y }); + } + + if (bodyB->enabled) + { + bodyB->velocity.x += bodyB->inverseMass*(impulseV.x); + bodyB->velocity.y += bodyB->inverseMass*(impulseV.y); + if (!bodyB->freezeOrient) bodyB->angularVelocity += bodyB->inverseInertia*MathCrossVector2(radiusB, impulseV); + } + + // Apply friction impulse to each physics body + radiusV.x = bodyB->velocity.x + MathCross(bodyB->angularVelocity, radiusB).x - bodyA->velocity.x - MathCross(bodyA->angularVelocity, radiusA).x; + radiusV.y = bodyB->velocity.y + MathCross(bodyB->angularVelocity, radiusB).y - bodyA->velocity.y - MathCross(bodyA->angularVelocity, radiusA).y; + + Vector2 tangent = { radiusV.x - (manifold->normal.x*MathDot(radiusV, manifold->normal)), radiusV.y - (manifold->normal.y*MathDot(radiusV, manifold->normal)) }; + MathNormalize(&tangent); + + // Calculate impulse tangent magnitude + float impulseTangent = -MathDot(radiusV, tangent); + impulseTangent /= inverseMassSum; + impulseTangent /= (float)manifold->contactsCount; + + float absImpulseTangent = fabs(impulseTangent); + + // Don't apply tiny friction impulses + if (absImpulseTangent <= PHYSAC_EPSILON) return; + + // Apply coulumb's law + Vector2 tangentImpulse = { 0.0f, 0.0f }; + if (absImpulseTangent < impulse*manifold->staticFriction) tangentImpulse = (Vector2){ tangent.x*impulseTangent, tangent.y*impulseTangent }; + else tangentImpulse = (Vector2){ tangent.x*-impulse*manifold->dynamicFriction, tangent.y*-impulse*manifold->dynamicFriction }; + + // Apply friction impulse + if (bodyA->enabled) + { + bodyA->velocity.x += bodyA->inverseMass*(-tangentImpulse.x); + bodyA->velocity.y += bodyA->inverseMass*(-tangentImpulse.y); + + if (!bodyA->freezeOrient) bodyA->angularVelocity += bodyA->inverseInertia*MathCrossVector2(radiusA, (Vector2){ -tangentImpulse.x, -tangentImpulse.y }); + } + + if (bodyB->enabled) + { + bodyB->velocity.x += bodyB->inverseMass*(tangentImpulse.x); + bodyB->velocity.y += bodyB->inverseMass*(tangentImpulse.y); + + if (!bodyB->freezeOrient) bodyB->angularVelocity += bodyB->inverseInertia*MathCrossVector2(radiusB, tangentImpulse); + } + } +} + +// Integrates physics velocity into position and forces +static void IntegratePhysicsVelocity(PhysicsBody body) +{ + if ((body == NULL) ||!body->enabled) return; + + body->position.x += body->velocity.x*deltaTime; + body->position.y += body->velocity.y*deltaTime; + + if (!body->freezeOrient) body->orient += body->angularVelocity*deltaTime; + Mat2Set(&body->shape.transform, body->orient); + + IntegratePhysicsForces(body); +} + +// Corrects physics bodies positions based on manifolds collision information +static void CorrectPhysicsPositions(PhysicsManifold manifold) +{ + PhysicsBody bodyA = manifold->bodyA; + PhysicsBody bodyB = manifold->bodyB; + + if ((bodyA == NULL) || (bodyB == NULL)) return; + + Vector2 correction = { 0.0f, 0.0f }; + correction.x = (max(manifold->penetration - PHYSAC_PENETRATION_ALLOWANCE, 0.0f)/(bodyA->inverseMass + bodyB->inverseMass))*manifold->normal.x*PHYSAC_PENETRATION_CORRECTION; + correction.y = (max(manifold->penetration - PHYSAC_PENETRATION_ALLOWANCE, 0.0f)/(bodyA->inverseMass + bodyB->inverseMass))*manifold->normal.y*PHYSAC_PENETRATION_CORRECTION; + + if (bodyA->enabled) + { + bodyA->position.x -= correction.x*bodyA->inverseMass; + bodyA->position.y -= correction.y*bodyA->inverseMass; + } + + if (bodyB->enabled) + { + bodyB->position.x += correction.x*bodyB->inverseMass; + bodyB->position.y += correction.y*bodyB->inverseMass; + } +} + +// Returns the extreme point along a direction within a polygon +static Vector2 GetSupport(PhysicsShape shape, Vector2 dir) +{ + float bestProjection = -PHYSAC_FLT_MAX; + Vector2 bestVertex = { 0.0f, 0.0f }; + PolygonData data = shape.vertexData; + + for (int i = 0; i < data.vertexCount; i++) + { + Vector2 vertex = data.positions[i]; + float projection = MathDot(vertex, dir); + + if (projection > bestProjection) + { + bestVertex = vertex; + bestProjection = projection; + } + } + + return bestVertex; +} + +// Finds polygon shapes axis least penetration +static float FindAxisLeastPenetration(int *faceIndex, PhysicsShape shapeA, PhysicsShape shapeB) +{ + float bestDistance = -PHYSAC_FLT_MAX; + int bestIndex = 0; + + PolygonData dataA = shapeA.vertexData; + //PolygonData dataB = shapeB.vertexData; + + for (int i = 0; i < dataA.vertexCount; i++) + { + // Retrieve a face normal from A shape + Vector2 normal = dataA.normals[i]; + Vector2 transNormal = Mat2MultiplyVector2(shapeA.transform, normal); + + // Transform face normal into B shape's model space + Mat2 buT = Mat2Transpose(shapeB.transform); + normal = Mat2MultiplyVector2(buT, transNormal); + + // Retrieve support point from B shape along -n + Vector2 support = GetSupport(shapeB, (Vector2){ -normal.x, -normal.y }); + + // Retrieve vertex on face from A shape, transform into B shape's model space + Vector2 vertex = dataA.positions[i]; + vertex = Mat2MultiplyVector2(shapeA.transform, vertex); + vertex = Vector2Add(vertex, shapeA.body->position); + vertex = Vector2Subtract(vertex, shapeB.body->position); + vertex = Mat2MultiplyVector2(buT, vertex); + + // Compute penetration distance in B shape's model space + float distance = MathDot(normal, Vector2Subtract(support, vertex)); + + // Store greatest distance + if (distance > bestDistance) + { + bestDistance = distance; + bestIndex = i; + } + } + + *faceIndex = bestIndex; + return bestDistance; +} + +// Finds two polygon shapes incident face +static void FindIncidentFace(Vector2 *v0, Vector2 *v1, PhysicsShape ref, PhysicsShape inc, int index) +{ + PolygonData refData = ref.vertexData; + PolygonData incData = inc.vertexData; + + Vector2 referenceNormal = refData.normals[index]; + + // Calculate normal in incident's frame of reference + referenceNormal = Mat2MultiplyVector2(ref.transform, referenceNormal); // To world space + referenceNormal = Mat2MultiplyVector2(Mat2Transpose(inc.transform), referenceNormal); // To incident's model space + + // Find most anti-normal face on polygon + int incidentFace = 0; + float minDot = PHYSAC_FLT_MAX; + + for (int i = 0; i < incData.vertexCount; i++) + { + float dot = MathDot(referenceNormal, incData.normals[i]); + + if (dot < minDot) + { + minDot = dot; + incidentFace = i; + } + } + + // Assign face vertices for incident face + *v0 = Mat2MultiplyVector2(inc.transform, incData.positions[incidentFace]); + *v0 = Vector2Add(*v0, inc.body->position); + incidentFace = (((incidentFace + 1) < incData.vertexCount) ? (incidentFace + 1) : 0); + *v1 = Mat2MultiplyVector2(inc.transform, incData.positions[incidentFace]); + *v1 = Vector2Add(*v1, inc.body->position); +} + +// Calculates clipping based on a normal and two faces +static int Clip(Vector2 normal, float clip, Vector2 *faceA, Vector2 *faceB) +{ + int sp = 0; + Vector2 out[2] = { *faceA, *faceB }; + + // Retrieve distances from each endpoint to the line + float distanceA = MathDot(normal, *faceA) - clip; + float distanceB = MathDot(normal, *faceB) - clip; + + // If negative (behind plane) + if (distanceA <= 0.0f) out[sp++] = *faceA; + if (distanceB <= 0.0f) out[sp++] = *faceB; + + // If the points are on different sides of the plane + if ((distanceA*distanceB) < 0.0f) + { + // Push intersection point + float alpha = distanceA/(distanceA - distanceB); + out[sp] = *faceA; + Vector2 delta = Vector2Subtract(*faceB, *faceA); + delta.x *= alpha; + delta.y *= alpha; + out[sp] = Vector2Add(out[sp], delta); + sp++; + } + + // Assign the new converted values + *faceA = out[0]; + *faceB = out[1]; + + return sp; +} + +// Check if values are between bias range +static bool BiasGreaterThan(float valueA, float valueB) +{ + return (valueA >= (valueB*0.95f + valueA*0.01f)); +} + +// Returns the barycenter of a triangle given by 3 points +static Vector2 TriangleBarycenter(Vector2 v1, Vector2 v2, Vector2 v3) +{ + Vector2 result = { 0.0f, 0.0f }; + + result.x = (v1.x + v2.x + v3.x)/3; + result.y = (v1.y + v2.y + v3.y)/3; + + return result; +} + +// Initializes hi-resolution MONOTONIC timer +static void InitTimer(void) +{ + srand(time(NULL)); // Initialize random seed + +#if defined(_WIN32) + QueryPerformanceFrequency((unsigned long long int *) &frequency); +#endif + +#if defined(__linux__) + struct timespec now; + if (clock_gettime(CLOCK_MONOTONIC, &now) == 0) frequency = 1000000000; +#endif + +#if defined(__APPLE__) + mach_timebase_info_data_t timebase; + mach_timebase_info(&timebase); + frequency = (timebase.denom*1e9)/timebase.numer; +#endif + + baseTime = GetTimeCount(); // Get MONOTONIC clock time offset + startTime = GetCurrentTime(); // Get current time +} + +// Get hi-res MONOTONIC time measure in seconds +static uint64_t GetTimeCount(void) +{ + uint64_t value = 0; + +#if defined(_WIN32) + QueryPerformanceCounter((unsigned long long int *) &value); +#endif + +#if defined(__linux__) + struct timespec now; + clock_gettime(CLOCK_MONOTONIC, &now); + value = (uint64_t)now.tv_sec*(uint64_t)1000000000 + (uint64_t)now.tv_nsec; +#endif + +#if defined(__APPLE__) + value = mach_absolute_time(); +#endif + + return value; +} + +// Get current time in milliseconds +static double GetCurrentTime(void) +{ + return (double)(GetTimeCount() - baseTime)/frequency*1000; +} + +// Returns the cross product of a vector and a value +static inline Vector2 MathCross(float value, Vector2 vector) +{ + return (Vector2){ -value*vector.y, value*vector.x }; +} + +// Returns the cross product of two vectors +static inline float MathCrossVector2(Vector2 v1, Vector2 v2) +{ + return (v1.x*v2.y - v1.y*v2.x); +} + +// Returns the len square root of a vector +static inline float MathLenSqr(Vector2 vector) +{ + return (vector.x*vector.x + vector.y*vector.y); +} + +// Returns the dot product of two vectors +static inline float MathDot(Vector2 v1, Vector2 v2) +{ + return (v1.x*v2.x + v1.y*v2.y); +} + +// Returns the square root of distance between two vectors +static inline float DistSqr(Vector2 v1, Vector2 v2) +{ + Vector2 dir = Vector2Subtract(v1, v2); + return MathDot(dir, dir); +} + +// Returns the normalized values of a vector +static void MathNormalize(Vector2 *vector) +{ + float length, ilength; + + Vector2 aux = *vector; + length = sqrtf(aux.x*aux.x + aux.y*aux.y); + + if (length == 0) length = 1.0f; + + ilength = 1.0f/length; + + vector->x *= ilength; + vector->y *= ilength; +} + +#if defined(PHYSAC_STANDALONE) +// Returns the sum of two given vectors +static inline Vector2 Vector2Add(Vector2 v1, Vector2 v2) +{ + return (Vector2){ v1.x + v2.x, v1.y + v2.y }; +} + +// Returns the subtract of two given vectors +static inline Vector2 Vector2Subtract(Vector2 v1, Vector2 v2) +{ + return (Vector2){ v1.x - v2.x, v1.y - v2.y }; +} +#endif + +// Creates a matrix 2x2 from a given radians value +static Mat2 Mat2Radians(float radians) +{ + float c = cosf(radians); + float s = sinf(radians); + + return (Mat2){ c, -s, s, c }; +} + +// Set values from radians to a created matrix 2x2 +static void Mat2Set(Mat2 *matrix, float radians) +{ + float cos = cosf(radians); + float sin = sinf(radians); + + matrix->m00 = cos; + matrix->m01 = -sin; + matrix->m10 = sin; + matrix->m11 = cos; +} + +// Returns the transpose of a given matrix 2x2 +static inline Mat2 Mat2Transpose(Mat2 matrix) +{ + return (Mat2){ matrix.m00, matrix.m10, matrix.m01, matrix.m11 }; +} + +// Multiplies a vector by a matrix 2x2 +static inline Vector2 Mat2MultiplyVector2(Mat2 matrix, Vector2 vector) +{ + return (Vector2){ matrix.m00*vector.x + matrix.m01*vector.y, matrix.m10*vector.x + matrix.m11*vector.y }; +} + +#endif // PHYSAC_IMPLEMENTATION diff --git a/examples/web/physac/physics_demo.c b/examples/web/physac/physics_demo.c index 0c17fc3..73aaec7 100644 --- a/examples/web/physac/physics_demo.c +++ b/examples/web/physac/physics_demo.c @@ -7,9 +7,9 @@ * * Use the following line to compile: * -* gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread +* gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread * -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition -* +* * Copyright (c) 2017 Victor Fisac * ********************************************************************************************/ @@ -26,15 +26,15 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Physac logo drawing position int logoX = 0; int logoY = 15; -PhysicsBody ground; -PhysicsBody circle; +PhysicsBody ground = { 0 }; +PhysicsBody circle = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -42,16 +42,16 @@ PhysicsBody circle; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- SetConfigFlags(FLAG_MSAA_4X_HINT); InitWindow(screenWidth, screenHeight, "Physac [raylib] - Physics demo"); SetTargetFPS(60); - + logoX = screenWidth - MeasureText("Physac", 30) - 10; // Initialize physics and default physics bodies @@ -70,7 +70,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -79,7 +79,7 @@ int main() #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- ClosePhysics(); // Uninitialize physics CloseWindow(); // Close window and OpenGL context @@ -112,7 +112,7 @@ void UpdateDrawFrame(void) // Destroy falling physics bodies int bodiesCount = GetPhysicsBodiesCount(); - + for (int i = bodiesCount - 1; i >= 0; i--) { PhysicsBody body = GetPhysicsBody(i); @@ -130,7 +130,7 @@ void UpdateDrawFrame(void) // Draw created physics bodies bodiesCount = GetPhysicsBodiesCount(); - + for (int i = 0; i < bodiesCount; i++) { PhysicsBody body = GetPhysicsBody(i); diff --git a/examples/web/physac/physics_demo.html b/examples/web/physac/physics_demo.html new file mode 100644 index 0000000..a4cf875 --- /dev/null +++ b/examples/web/physac/physics_demo.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/physac/physics_demo.html.mem b/examples/web/physac/physics_demo.html.mem new file mode 100644 index 0000000..9234525 Binary files /dev/null and b/examples/web/physac/physics_demo.html.mem differ diff --git a/examples/web/physac/physics_demo.js b/examples/web/physac/physics_demo.js new file mode 100644 index 0000000..117e064 --- /dev/null +++ b/examples/web/physac/physics_demo.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(typeof ENVIRONMENT_IS_PTHREAD==="undefined"){ENVIRONMENT_IS_PTHREAD=false;var PthreadWorkerInit={}}var _scriptDir=typeof document!=="undefined"&&document.currentScript?document.currentScript.src:undefined;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var GLOBAL_BASE=1024;if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var wasmModule;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx)){var u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}if(!ENVIRONMENT_IS_PTHREAD){var DYNAMIC_BASE=5290944,DYNAMICTOP_PTR=48032}var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;if(ENVIRONMENT_IS_PTHREAD)runtimeInitialized=true;function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;if(runtimeInitialized)return;runtimeInitialized=true;__register_pthread_ptr(PThread.mainThreadBlock,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(PThread.mainThreadBlock);if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){if(ENVIRONMENT_IS_PTHREAD)return;FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;runtimeExited=true}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){assert(!ENVIRONMENT_IS_PTHREAD,"addRunDependency cannot be used in a pthread worker");runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="physics_demo.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD)removeRunDependency("wasm-instantiate")}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency("wasm-instantiate")}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"],output["module"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":607,"maximum":607,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};var ASM_CONSTS=[function(){console.error("emscripten_webgl_create_context: attributes pointer is null!")},function(){postMessage({cmd:"processQueuedMainThreadWork"})},function($0){if(!ENVIRONMENT_IS_PTHREAD){if(!PThread.pthreads[$0]||!PThread.pthreads[$0].worker){return 0}PThread.pthreads[$0].worker.postMessage({cmd:"processThreadQueue"})}else{postMessage({targetThread:$0,cmd:"processThreadQueue"})}return 1},function(){return!!Module["canvas"]},function(){Module["noExitRuntime"]=true},function(){throw"Canceled!"}];function _emscripten_asm_const_i(code){return ASM_CONSTS[code]()}function _emscripten_asm_const_ii(code,a0){return ASM_CONSTS[code](a0)}if(!ENVIRONMENT_IS_PTHREAD)__ATINIT__.push({func:function(){___emscripten_pthread_data_constructor()}});if(!ENVIRONMENT_IS_PTHREAD){memoryInitializer="physics_demo.html.mem"}var tempDoublePtr;if(!ENVIRONMENT_IS_PTHREAD)tempDoublePtr=48048;function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var PROCINFO={ppid:1,pid:42,sid:42,pgid:42};var PThread={MAIN_THREAD_ID:1,mainThreadInfo:{schedPolicy:0,schedPrio:0},unusedWorkerPool:[],runningWorkers:[],initMainThreadBlock:function(){if(ENVIRONMENT_IS_PTHREAD)return undefined;PThread.mainThreadBlock=47232;for(var i=0;i<244/4;++i)HEAPU32[PThread.mainThreadBlock/4+i]=0;HEAP32[PThread.mainThreadBlock+24>>2]=PThread.mainThreadBlock;var headPtr=PThread.mainThreadBlock+168;HEAP32[headPtr>>2]=headPtr;var tlsMemory=47488;for(var i=0;i<128;++i)HEAPU32[tlsMemory/4+i]=0;Atomics.store(HEAPU32,PThread.mainThreadBlock+116>>2,tlsMemory);Atomics.store(HEAPU32,PThread.mainThreadBlock+52>>2,PThread.mainThreadBlock);Atomics.store(HEAPU32,PThread.mainThreadBlock+56>>2,PROCINFO.pid)},pthreads:{},pthreadIdCounter:2,exitHandlers:null,setThreadStatus:function(){},runExitHandlers:function(){if(PThread.exitHandlers!==null){while(PThread.exitHandlers.length>0){PThread.exitHandlers.pop()()}PThread.exitHandlers=null}if(ENVIRONMENT_IS_PTHREAD&&threadInfoStruct)___pthread_tsd_run_dtors()},threadExit:function(exitCode){var tb=_pthread_self();if(tb){Atomics.store(HEAPU32,tb+4>>2,exitCode);Atomics.store(HEAPU32,tb+0>>2,1);Atomics.store(HEAPU32,tb+72>>2,1);Atomics.store(HEAPU32,tb+76>>2,0);PThread.runExitHandlers();_emscripten_futex_wake(tb+0,2147483647);__register_pthread_ptr(0,0,0);threadInfoStruct=0;if(ENVIRONMENT_IS_PTHREAD){postMessage({cmd:"exit"})}}},threadCancel:function(){PThread.runExitHandlers();Atomics.store(HEAPU32,threadInfoStruct+4>>2,-1);Atomics.store(HEAPU32,threadInfoStruct+0>>2,1);_emscripten_futex_wake(threadInfoStruct+0,2147483647);threadInfoStruct=selfThreadId=0;__register_pthread_ptr(0,0,0);postMessage({cmd:"cancelDone"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.pthreads={};for(var t in PThread.unusedWorkerPool){var pthread=PThread.unusedWorkerPool[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.unusedWorkerPool=[];for(var t in PThread.runningWorkers){var pthread=PThread.runningWorkers[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.runningWorkers=[]},freeThreadData:function(pthread){if(!pthread)return;if(pthread.threadInfoStruct){var tlsMemory=HEAP32[pthread.threadInfoStruct+116>>2];HEAP32[pthread.threadInfoStruct+116>>2]=0;_free(pthread.tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},receiveObjectTransfer:function(data){},allocateUnusedWorkers:function(numWorkers,onFinishedLoading){if(typeof SharedArrayBuffer==="undefined")return;var numWorkersLoaded=0;var pthreadMainJs="physics_demo.worker.js";pthreadMainJs=locateFile(pthreadMainJs);for(var i=0;i0)return PThread.unusedWorkerPool.pop();else return null},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>2]=value;return value}function ___lock(){}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,which,varargs);SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(7,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(8,1,name_);return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i>2]=eventTypeId;HEAP32[varargs+4>>2]=eventData;HEAP32[varargs+8>>2]=userData;_emscripten_async_queue_on_thread_(targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(9,1);JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}var __main_thread_futex_wait_address;if(ENVIRONMENT_IS_PTHREAD)__main_thread_futex_wait_address=PthreadWorkerInit.__main_thread_futex_wait_address;else PthreadWorkerInit.__main_thread_futex_wait_address=__main_thread_futex_wait_address=48016;function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>HEAP8.length||addr&3!=0)return-22;if(ENVIRONMENT_IS_WORKER){var ret=Atomics.wait(HEAP32,addr>>2,val,timeout);if(ret==="timed-out")return-110;if(ret==="not-equal")return-11;if(ret==="ok")return 0;throw"Atomics.wait returned an unexpected value "+ret}else{var loadedVal=Atomics.load(HEAP32,addr>>2);if(val!=loadedVal)return-11;var tNow=performance.now();var tEnd=tNow+timeout;Atomics.store(HEAP32,__main_thread_futex_wait_address>>2,addr);var ourWaitAddress=addr;while(addr==ourWaitAddress){tNow=performance.now();if(tNow>tEnd){return-110}_emscripten_main_thread_process_queued_calls();addr=Atomics.load(HEAP32,__main_thread_futex_wait_address>>2)}return 0}}function _emscripten_futex_wake(addr,count){if(addr<=0||addr>HEAP8.length||addr&3!=0||count<0)return-22;if(count==0)return 0;var mainThreadWaitAddress=Atomics.load(HEAP32,__main_thread_futex_wait_address>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(HEAP32,__main_thread_futex_wait_address>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(HEAP32,addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw"Atomics.notify returned an unexpected value "+ret}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(10,1,index,gamepadState);if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(11,1);return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(12,1,pointerlockStatus);if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);HEAP32[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArrays(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstanced(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffers(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstanced(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArray(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisor(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_has_threading_support(){return typeof SharedArrayBuffer!=="undefined"}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var buffer=stackAlloc(numCallArgs*8);for(var i=0;i>3)+i]=arguments[2+i]}var ret=_emscripten_run_in_main_runtime_thread_js(index,numCallArgs,buffer,sync);stackRestore(stack);return ret}function _emscripten_receive_on_main_thread_js(index,numCallArgs,buffer){if(!_emscripten_receive_on_main_thread_js.callArgs){_emscripten_receive_on_main_thread_js.callArgs=[]}var callArgs=_emscripten_receive_on_main_thread_js.callArgs;callArgs.length=numCallArgs;for(var i=0;i>3)+i]}var func;if(index>0){func=proxiedFunctionTable[index]}else{func=ASM_CONSTS[-index-1]}return func.apply(null,callArgs)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(13,1,target,deferUntilInEventHandler);if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(14,1);return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}HEAP32[varargs>>2]=targetCanvasPtr;HEAP32[varargs+4>>2]=width;HEAP32[varargs+8>>2]=height;_emscripten_async_queue_on_thread_(targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):"";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}function __findCanvasEventTarget(target){if(typeof target==="number")target=UTF8ToString(target);if(!target||target==="#canvas"){if(typeof GL!=="undefined"&&GL.offscreenCanvases["canvas"])return GL.offscreenCanvases["canvas"];return Module["canvas"]}if(typeof GL!=="undefined"&&GL.offscreenCanvases[target])return GL.offscreenCanvases[target];return __findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=__findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){HEAP32[canvas.canvasSharedPtr>>2]=width;HEAP32[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(canvas.GLctxObject.GLctx.VIEWPORT);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=HEAP32[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(15,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=__findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(targetThread){var mouseEventData=_malloc(72);__fillMouseEventData(mouseEventData,e,target);JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,mouseEventData,userData)}else if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(16,1,target,userData,useCapture,callbackfunc,targetThread);__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=targetThread?_malloc(280):JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,fullscreenChangeEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(17,1,target,userData,useCapture,callbackfunc,targetThread);if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=targetThread?_malloc(1432):JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,gamepadEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(18,1,userData,useCapture,callbackfunc,targetThread);if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(19,1,userData,useCapture,callbackfunc,targetThread);if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=targetThread?_malloc(164):JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,keyEventData,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(20,1,target,userData,useCapture,callbackfunc,targetThread);__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,touchEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(21,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(22,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(23,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(24,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_supports_offscreencanvas(){return 0}function _emscripten_syscall(which,varargs){switch(which){case 140:return ___syscall140(which,varargs);case 145:return ___syscall145(which,varargs);case 146:return ___syscall146(which,varargs);case 221:return ___syscall221(which,varargs);case 5:return ___syscall5(which,varargs);case 54:return ___syscall54(which,varargs);case 6:return ___syscall6(which,varargs);default:throw"surprising proxied syscall: "+which}}function _emscripten_webgl_do_commit_frame(){if(!GL.currentContext||!GL.currentContext.GLctx){return-3}if(!GL.currentContext.GLctx.commit){return-1}if(!GL.currentContext.attributes.explicitSwapControl){return-3}GL.currentContext.GLctx.commit();return 0}var __emscripten_webgl_power_preferences=["default","low-power","high-performance"];function _emscripten_webgl_do_create_context(target,attributes){var contextAttributes={};var a=attributes>>2;contextAttributes["alpha"]=!!HEAP32[a+(0>>2)];contextAttributes["depth"]=!!HEAP32[a+(4>>2)];contextAttributes["stencil"]=!!HEAP32[a+(8>>2)];contextAttributes["antialias"]=!!HEAP32[a+(12>>2)];contextAttributes["premultipliedAlpha"]=!!HEAP32[a+(16>>2)];contextAttributes["preserveDrawingBuffer"]=!!HEAP32[a+(20>>2)];var powerPreference=HEAP32[a+(24>>2)];contextAttributes["powerPreference"]=__emscripten_webgl_power_preferences[powerPreference];contextAttributes["failIfMajorPerformanceCaveat"]=!!HEAP32[a+(28>>2)];contextAttributes.majorVersion=HEAP32[a+(32>>2)];contextAttributes.minorVersion=HEAP32[a+(36>>2)];contextAttributes.enableExtensionsByDefault=HEAP32[a+(40>>2)];contextAttributes.explicitSwapControl=HEAP32[a+(44>>2)];contextAttributes.proxyContextToMainThread=HEAP32[a+(48>>2)];contextAttributes.renderViaOffscreenBackBuffer=HEAP32[a+(52>>2)];var canvas=__findCanvasEventTarget(target);if(ENVIRONMENT_IS_PTHREAD){if(contextAttributes.proxyContextToMainThread===2||!canvas&&contextAttributes.proxyContextToMainThread===1){if(typeof OffscreenCanvas==="undefined"){HEAP32[attributes+52>>2]=1;HEAP32[attributes+20>>2]=1}return _emscripten_sync_run_in_main_thread_2(622854144,target,attributes)}}if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _exit(status){exit(status)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2]=0}var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,thread:threadParams.pthread_ptr,threadInfoStruct:threadParams.pthread_ptr};Atomics.store(HEAPU32,pthread.threadInfoStruct+0>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+4>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+20>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+80>>2,threadParams.detached);Atomics.store(HEAPU32,pthread.threadInfoStruct+116>>2,tlsMemory);Atomics.store(HEAPU32,pthread.threadInfoStruct+60>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+52>>2,pthread.threadInfoStruct);Atomics.store(HEAPU32,pthread.threadInfoStruct+56>>2,PROCINFO.pid);Atomics.store(HEAPU32,pthread.threadInfoStruct+120>>2,threadParams.stackSize);Atomics.store(HEAPU32,pthread.threadInfoStruct+96>>2,threadParams.stackSize);Atomics.store(HEAPU32,pthread.threadInfoStruct+92>>2,threadParams.stackBase);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+8>>2,threadParams.stackBase);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+12>>2,threadParams.detached);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+20>>2,threadParams.schedPolicy);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+24>>2,threadParams.schedPrio);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(HEAPU32,pthread.threadInfoStruct+188>>2,global_locale);worker.pthread=pthread;var msg={cmd:"run",start_routine:threadParams.startRoutine,arg:threadParams.arg,threadInfoStruct:threadParams.pthread_ptr,selfThreadId:threadParams.pthread_ptr,parentThreadId:threadParams.parent_pthread_ptr,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}}function _pthread_getschedparam(thread,policy,schedparam){if(!policy&&!schedparam)return ERRNO_CODES.EINVAL;if(!thread){err("pthread_getschedparam called with a null thread pointer!");return ERRNO_CODES.ESRCH}var self=HEAP32[thread+24>>2];if(self!=thread){err("pthread_getschedparam attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var schedPolicy=Atomics.load(HEAPU32,thread+120+20>>2);var schedPrio=Atomics.load(HEAPU32,thread+120+24>>2);if(policy)HEAP32[policy>>2]=schedPolicy;if(schedparam)HEAP32[schedparam>>2]=schedPrio;return 0}function _pthread_create(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer==="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 11}if(!pthread_ptr){err("pthread_create called with a null thread pointer!");return 22}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length==0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;var schedPolicy=0;var schedPrio=0;if(attr){stackSize=HEAP32[attr>>2];stackSize+=81920;stackBase=HEAP32[attr+8>>2];detached=HEAP32[attr+12>>2]!=0;var inheritSched=HEAP32[attr+16>>2]==0;if(inheritSched){var prevSchedPolicy=HEAP32[attr+20>>2];var prevSchedPrio=HEAP32[attr+24>>2];var parentThreadPtr=PThread.currentProxiedOperationCallerThread?PThread.currentProxiedOperationCallerThread:_pthread_self();_pthread_getschedparam(parentThreadPtr,attr+20,attr+24);schedPolicy=HEAP32[attr+20>>2];schedPrio=HEAP32[attr+24>>2];HEAP32[attr+20>>2]=prevSchedPolicy;HEAP32[attr+24>>2]=prevSchedPrio}else{schedPolicy=HEAP32[attr+20>>2];schedPrio=HEAP32[attr+24>>2]}}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_malloc(stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(244);for(var i=0;i<244>>2;++i)HEAPU32[(threadInfoStruct>>2)+i]=0;HEAP32[pthread_ptr>>2]=threadInfoStruct;HEAP32[threadInfoStruct+24>>2]=threadInfoStruct;var headPtr=threadInfoStruct+168;HEAP32[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,schedPolicy:schedPolicy,schedPrio:schedPrio,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,parent_pthread_ptr:_pthread_self(),arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList)}else{__spawn_thread(threadParams)}return 0}function __cleanup_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! _cleanup_thread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in _cleanup_thread!";HEAP32[pthread_ptr+24>>2]=0;var pthread=PThread.pthreads[pthread_ptr];var worker=pthread.worker;PThread.freeThreadData(pthread);worker.pthread=undefined;PThread.unusedWorkerPool.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker.pthread),1)}function __pthread_testcancel_js(){if(!ENVIRONMENT_IS_PTHREAD)return;if(!threadInfoStruct)return;var cancelDisabled=Atomics.load(HEAPU32,threadInfoStruct+72>>2);if(cancelDisabled)return;var canceled=Atomics.load(HEAPU32,threadInfoStruct+0>>2);if(canceled==2)throw"Canceled!"}function _pthread_join(thread,status){if(!thread){err("pthread_join attempted on a null thread pointer!");return ERRNO_CODES.ESRCH}if(ENVIRONMENT_IS_PTHREAD&&selfThreadId==thread){err("PThread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}else if(!ENVIRONMENT_IS_PTHREAD&&PThread.mainThreadBlock==thread){err("Main thread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}var self=HEAP32[thread+24>>2];if(self!=thread){err("pthread_join attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var detached=Atomics.load(HEAPU32,thread+80>>2);if(detached){err("Attempted to join thread "+thread+", which was already detached!");return ERRNO_CODES.EINVAL}for(;;){var threadStatus=Atomics.load(HEAPU32,thread+0>>2);if(threadStatus==1){var threadExitCode=Atomics.load(HEAPU32,thread+4>>2);if(status)HEAP32[status>>2]=threadExitCode;Atomics.store(HEAPU32,thread+80>>2,1);if(!ENVIRONMENT_IS_PTHREAD)__cleanup_thread(thread);else postMessage({cmd:"cleanupThread",thread:thread});return 0}__pthread_testcancel_js();if(!ENVIRONMENT_IS_PTHREAD)_emscripten_main_thread_process_queued_calls();_emscripten_futex_wait(thread+0,threadStatus,ENVIRONMENT_IS_PTHREAD?100:1)}}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(ENVIRONMENT_IS_PTHREAD){_emscripten_get_now=function(){return performance["now"]()-__performance_now_clock_drift}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));var proxiedFunctionTable=[null,___syscall140,___syscall145,___syscall146,___syscall221,___syscall5,___syscall54,___syscall6,_eglGetProcAddress,_emscripten_exit_pointerlock,_emscripten_get_gamepad_status,_emscripten_get_num_gamepads,_emscripten_get_pointerlock_status,_emscripten_request_pointerlock,_emscripten_sample_gamepad_data,_emscripten_set_canvas_element_size_main_thread,_emscripten_set_click_callback_on_thread,_emscripten_set_fullscreenchange_callback_on_thread,_emscripten_set_gamepadconnected_callback_on_thread,_emscripten_set_gamepaddisconnected_callback_on_thread,_emscripten_set_keypress_callback_on_thread,_emscripten_set_touchcancel_callback_on_thread,_emscripten_set_touchend_callback_on_thread,_emscripten_set_touchmove_callback_on_thread,_emscripten_set_touchstart_callback_on_thread];function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"g":setTempRet0,"b":___assert_fail,"n":___call_main,"Hc":___lock,"xa":___setErrNo,"Gc":___syscall140,"Fc":___syscall145,"U":___syscall146,"j":___syscall221,"Ec":___syscall5,"Dc":___syscall54,"sc":___syscall6,"p":___unlock,"o":_eglGetProcAddress,"i":_emscripten_asm_const_i,"zd":_emscripten_asm_const_ii,"vb":_emscripten_exit_pointerlock,"f":_emscripten_futex_wait,"h":_emscripten_futex_wake,"td":_emscripten_get_gamepad_status,"l":_emscripten_get_heap_size,"e":_emscripten_get_now,"Wc":_emscripten_get_num_gamepads,"Sa":_emscripten_get_pointerlock_status,"Na":_emscripten_glActiveTexture,"Ma":_emscripten_glAttachShader,"La":_emscripten_glBeginQueryEXT,"Ka":_emscripten_glBindAttribLocation,"Ja":_emscripten_glBindBuffer,"Ia":_emscripten_glBindFramebuffer,"Ha":_emscripten_glBindRenderbuffer,"Ga":_emscripten_glBindTexture,"Fa":_emscripten_glBindVertexArray,"Ea":_emscripten_glBlendColor,"Da":_emscripten_glBlendEquation,"Ca":_emscripten_glBlendEquationSeparate,"Ba":_emscripten_glBlendFunc,"Aa":_emscripten_glBlendFuncSeparate,"za":_emscripten_glBufferData,"ya":_emscripten_glBufferSubData,"wa":_emscripten_glCheckFramebufferStatus,"va":_emscripten_glClear,"ua":_emscripten_glClearColor,"ta":_emscripten_glClearDepthf,"sa":_emscripten_glClearStencil,"ra":_emscripten_glColorMask,"qa":_emscripten_glCompileShader,"pa":_emscripten_glCompressedTexImage2D,"oa":_emscripten_glCompressedTexSubImage2D,"na":_emscripten_glCopyTexImage2D,"ma":_emscripten_glCopyTexSubImage2D,"la":_emscripten_glCreateProgram,"ka":_emscripten_glCreateShader,"ja":_emscripten_glCullFace,"ia":_emscripten_glDeleteBuffers,"ha":_emscripten_glDeleteFramebuffers,"ga":_emscripten_glDeleteProgram,"fa":_emscripten_glDeleteQueriesEXT,"ea":_emscripten_glDeleteRenderbuffers,"da":_emscripten_glDeleteShader,"ca":_emscripten_glDeleteTextures,"ba":_emscripten_glDeleteVertexArrays,"aa":_emscripten_glDepthFunc,"$":_emscripten_glDepthMask,"_":_emscripten_glDepthRangef,"Z":_emscripten_glDetachShader,"Y":_emscripten_glDisable,"X":_emscripten_glDisableVertexAttribArray,"W":_emscripten_glDrawArrays,"V":_emscripten_glDrawArraysInstanced,"T":_emscripten_glDrawBuffers,"S":_emscripten_glDrawElements,"R":_emscripten_glDrawElementsInstanced,"Q":_emscripten_glEnable,"P":_emscripten_glEnableVertexAttribArray,"O":_emscripten_glEndQueryEXT,"N":_emscripten_glFinish,"M":_emscripten_glFlush,"L":_emscripten_glFramebufferRenderbuffer,"K":_emscripten_glFramebufferTexture2D,"J":_emscripten_glFrontFace,"I":_emscripten_glGenBuffers,"H":_emscripten_glGenFramebuffers,"G":_emscripten_glGenQueriesEXT,"F":_emscripten_glGenRenderbuffers,"E":_emscripten_glGenTextures,"D":_emscripten_glGenVertexArrays,"C":_emscripten_glGenerateMipmap,"B":_emscripten_glGetActiveAttrib,"A":_emscripten_glGetActiveUniform,"z":_emscripten_glGetAttachedShaders,"y":_emscripten_glGetAttribLocation,"x":_emscripten_glGetBooleanv,"w":_emscripten_glGetBufferParameteriv,"v":_emscripten_glGetError,"u":_emscripten_glGetFloatv,"t":_emscripten_glGetFramebufferAttachmentParameteriv,"s":_emscripten_glGetIntegerv,"r":_emscripten_glGetProgramInfoLog,"q":_emscripten_glGetProgramiv,"Cc":_emscripten_glGetQueryObjecti64vEXT,"Bc":_emscripten_glGetQueryObjectivEXT,"Ac":_emscripten_glGetQueryObjectui64vEXT,"zc":_emscripten_glGetQueryObjectuivEXT,"yc":_emscripten_glGetQueryivEXT,"xc":_emscripten_glGetRenderbufferParameteriv,"wc":_emscripten_glGetShaderInfoLog,"vc":_emscripten_glGetShaderPrecisionFormat,"uc":_emscripten_glGetShaderSource,"tc":_emscripten_glGetShaderiv,"rc":_emscripten_glGetString,"qc":_emscripten_glGetTexParameterfv,"pc":_emscripten_glGetTexParameteriv,"oc":_emscripten_glGetUniformLocation,"nc":_emscripten_glGetUniformfv,"mc":_emscripten_glGetUniformiv,"lc":_emscripten_glGetVertexAttribPointerv,"kc":_emscripten_glGetVertexAttribfv,"jc":_emscripten_glGetVertexAttribiv,"ic":_emscripten_glHint,"hc":_emscripten_glIsBuffer,"gc":_emscripten_glIsEnabled,"fc":_emscripten_glIsFramebuffer,"ec":_emscripten_glIsProgram,"dc":_emscripten_glIsQueryEXT,"cc":_emscripten_glIsRenderbuffer,"bc":_emscripten_glIsShader,"ac":_emscripten_glIsTexture,"$b":_emscripten_glIsVertexArray,"_b":_emscripten_glLineWidth,"Zb":_emscripten_glLinkProgram,"Yb":_emscripten_glPixelStorei,"Xb":_emscripten_glPolygonOffset,"Wb":_emscripten_glQueryCounterEXT,"Vb":_emscripten_glReadPixels,"Ub":_emscripten_glReleaseShaderCompiler,"Tb":_emscripten_glRenderbufferStorage,"Sb":_emscripten_glSampleCoverage,"Rb":_emscripten_glScissor,"Qb":_emscripten_glShaderBinary,"Pb":_emscripten_glShaderSource,"Ob":_emscripten_glStencilFunc,"Nb":_emscripten_glStencilFuncSeparate,"Mb":_emscripten_glStencilMask,"Lb":_emscripten_glStencilMaskSeparate,"Kb":_emscripten_glStencilOp,"Jb":_emscripten_glStencilOpSeparate,"Ib":_emscripten_glTexImage2D,"Hb":_emscripten_glTexParameterf,"Gb":_emscripten_glTexParameterfv,"Fb":_emscripten_glTexParameteri,"Eb":_emscripten_glTexParameteriv,"Db":_emscripten_glTexSubImage2D,"Cb":_emscripten_glUniform1f,"Bb":_emscripten_glUniform1fv,"Ab":_emscripten_glUniform1i,"zb":_emscripten_glUniform1iv,"yb":_emscripten_glUniform2f,"xb":_emscripten_glUniform2fv,"wb":_emscripten_glUniform2i,"ub":_emscripten_glUniform2iv,"tb":_emscripten_glUniform3f,"sb":_emscripten_glUniform3fv,"rb":_emscripten_glUniform3i,"qb":_emscripten_glUniform3iv,"pb":_emscripten_glUniform4f,"ob":_emscripten_glUniform4fv,"nb":_emscripten_glUniform4i,"mb":_emscripten_glUniform4iv,"lb":_emscripten_glUniformMatrix2fv,"kb":_emscripten_glUniformMatrix3fv,"jb":_emscripten_glUniformMatrix4fv,"ib":_emscripten_glUseProgram,"hb":_emscripten_glValidateProgram,"gb":_emscripten_glVertexAttrib1f,"fb":_emscripten_glVertexAttrib1fv,"eb":_emscripten_glVertexAttrib2f,"db":_emscripten_glVertexAttrib2fv,"cb":_emscripten_glVertexAttrib3f,"bb":_emscripten_glVertexAttrib3fv,"ab":_emscripten_glVertexAttrib4f,"$a":_emscripten_glVertexAttrib4fv,"_a":_emscripten_glVertexAttribDivisor,"Za":_emscripten_glVertexAttribPointer,"Ya":_emscripten_glViewport,"yd":_emscripten_has_threading_support,"xd":_emscripten_memcpy_big,"wd":_emscripten_receive_on_main_thread_js,"vd":_emscripten_request_pointerlock,"ud":_emscripten_resize_heap,"Xa":_emscripten_run_script,"sd":_emscripten_sample_gamepad_data,"rd":_emscripten_set_canvas_element_size,"qd":_emscripten_set_click_callback_on_thread,"pd":_emscripten_set_fullscreenchange_callback_on_thread,"od":_emscripten_set_gamepadconnected_callback_on_thread,"nd":_emscripten_set_gamepaddisconnected_callback_on_thread,"md":_emscripten_set_keypress_callback_on_thread,"ld":_emscripten_set_main_loop,"kd":_emscripten_set_touchcancel_callback_on_thread,"jd":_emscripten_set_touchend_callback_on_thread,"id":_emscripten_set_touchmove_callback_on_thread,"hd":_emscripten_set_touchstart_callback_on_thread,"gd":_emscripten_supports_offscreencanvas,"fd":_emscripten_syscall,"Wa":_emscripten_webgl_do_commit_frame,"Va":_emscripten_webgl_do_create_context,"ed":_exit,"Ua":_glfwCreateWindow,"dd":_glfwDefaultWindowHints,"cd":_glfwDestroyWindow,"bd":_glfwGetCursorPos,"Ta":_glfwGetPrimaryMonitor,"k":_glfwGetTime,"ad":_glfwGetVideoModes,"$c":_glfwInit,"_c":_glfwMakeContextCurrent,"Zc":_glfwSetCharCallback,"Yc":_glfwSetCursorEnterCallback,"Xc":_glfwSetCursorPosCallback,"Vc":_glfwSetDropCallback,"Uc":_glfwSetErrorCallback,"Tc":_glfwSetKeyCallback,"Sc":_glfwSetMouseButtonCallback,"Rc":_glfwSetScrollCallback,"Qc":_glfwSetWindowIconifyCallback,"Pc":_glfwSetWindowShouldClose,"Oc":_glfwSetWindowSizeCallback,"Nc":_glfwSwapBuffers,"Mc":_glfwSwapInterval,"Ra":_glfwTerminate,"d":_glfwWindowHint,"Qa":_llvm_stackrestore,"Pa":_llvm_stacksave,"Lc":_pthread_cleanup_pop,"Kc":_pthread_cleanup_push,"m":_pthread_create,"Jc":_pthread_join,"Oa":_time,"Ic":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___emscripten_pthread_data_constructor=Module["___emscripten_pthread_data_constructor"]=function(){return Module["asm"]["Ad"].apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["Bd"].apply(null,arguments)};var ___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=function(){return Module["asm"]["Cd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_add_u64=Module["__emscripten_atomic_fetch_and_add_u64"]=function(){return Module["asm"]["Dd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_and_u64=Module["__emscripten_atomic_fetch_and_and_u64"]=function(){return Module["asm"]["Ed"].apply(null,arguments)};var __emscripten_atomic_fetch_and_or_u64=Module["__emscripten_atomic_fetch_and_or_u64"]=function(){return Module["asm"]["Fd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_sub_u64=Module["__emscripten_atomic_fetch_and_sub_u64"]=function(){return Module["asm"]["Gd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_xor_u64=Module["__emscripten_atomic_fetch_and_xor_u64"]=function(){return Module["asm"]["Hd"].apply(null,arguments)};var __register_pthread_ptr=Module["__register_pthread_ptr"]=function(){return Module["asm"]["Id"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["Jd"].apply(null,arguments)};var _emscripten_async_queue_call_on_thread=Module["_emscripten_async_queue_call_on_thread"]=function(){return Module["asm"]["Kd"].apply(null,arguments)};var _emscripten_async_queue_on_thread_=Module["_emscripten_async_queue_on_thread_"]=function(){return Module["asm"]["Ld"].apply(null,arguments)};var _emscripten_async_run_in_main_thread=Module["_emscripten_async_run_in_main_thread"]=function(){return Module["asm"]["Md"].apply(null,arguments)};var _emscripten_atomic_add_u64=Module["_emscripten_atomic_add_u64"]=function(){return Module["asm"]["Nd"].apply(null,arguments)};var _emscripten_atomic_and_u64=Module["_emscripten_atomic_and_u64"]=function(){return Module["asm"]["Od"].apply(null,arguments)};var _emscripten_atomic_cas_u64=Module["_emscripten_atomic_cas_u64"]=function(){return Module["asm"]["Pd"].apply(null,arguments)};var _emscripten_atomic_exchange_u64=Module["_emscripten_atomic_exchange_u64"]=function(){return Module["asm"]["Qd"].apply(null,arguments)};var _emscripten_atomic_load_f32=Module["_emscripten_atomic_load_f32"]=function(){return Module["asm"]["Rd"].apply(null,arguments)};var _emscripten_atomic_load_f64=Module["_emscripten_atomic_load_f64"]=function(){return Module["asm"]["Sd"].apply(null,arguments)};var _emscripten_atomic_load_u64=Module["_emscripten_atomic_load_u64"]=function(){return Module["asm"]["Td"].apply(null,arguments)};var _emscripten_atomic_or_u64=Module["_emscripten_atomic_or_u64"]=function(){return Module["asm"]["Ud"].apply(null,arguments)};var _emscripten_atomic_store_f32=Module["_emscripten_atomic_store_f32"]=function(){return Module["asm"]["Vd"].apply(null,arguments)};var _emscripten_atomic_store_f64=Module["_emscripten_atomic_store_f64"]=function(){return Module["asm"]["Wd"].apply(null,arguments)};var _emscripten_atomic_store_u64=Module["_emscripten_atomic_store_u64"]=function(){return Module["asm"]["Xd"].apply(null,arguments)};var _emscripten_atomic_sub_u64=Module["_emscripten_atomic_sub_u64"]=function(){return Module["asm"]["Yd"].apply(null,arguments)};var _emscripten_atomic_xor_u64=Module["_emscripten_atomic_xor_u64"]=function(){return Module["asm"]["Zd"].apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=function(){return Module["asm"]["_d"].apply(null,arguments)};var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=function(){return Module["asm"]["$d"].apply(null,arguments)};var _emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=function(){return Module["asm"]["ae"].apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=function(){return Module["asm"]["be"].apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=function(){return Module["asm"]["ce"].apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread=Module["_emscripten_sync_run_in_main_thread"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_0=Module["_emscripten_sync_run_in_main_thread_0"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_1=Module["_emscripten_sync_run_in_main_thread_1"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_2=Module["_emscripten_sync_run_in_main_thread_2"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_3=Module["_emscripten_sync_run_in_main_thread_3"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_5=Module["_emscripten_sync_run_in_main_thread_5"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_6=Module["_emscripten_sync_run_in_main_thread_6"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_7=Module["_emscripten_sync_run_in_main_thread_7"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_xprintf_varargs=Module["_emscripten_sync_run_in_main_thread_xprintf_varargs"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _emscripten_webgl_commit_frame=Module["_emscripten_webgl_commit_frame"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _proxy_main=Module["_proxy_main"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var _pthread_self=Module["_pthread_self"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var establishStackSpace=Module["establishStackSpace"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["He"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Ie"].apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["De"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};Module["asm"]=asm;Module["establishStackSpace"]=establishStackSpace;Module["dynCall_ii"]=dynCall_ii;if(memoryInitializer&&!ENVIRONMENT_IS_PTHREAD){if(!isDataURI(memoryInitializer)){memoryInitializer=locateFile(memoryInitializer)}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module["memoryInitializerRequest"])delete Module["memoryInitializerRequest"].response;removeRunDependency("memory initializer")};var doBrowserLoad=function(){Module["readAsync"](memoryInitializer,applyMemoryInitializer,function(){throw"could not load memory initializer "+memoryInitializer})};if(Module["memoryInitializerRequest"]){var useRequest=function(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}applyMemoryInitializer(response)};if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{PThread.terminateAllThreads();ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(ENVIRONMENT_IS_PTHREAD)console.error("Pthread aborting at "+(new Error).stack);if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}if(!ENVIRONMENT_IS_PTHREAD)Module["noExitRuntime"]=true;if(!ENVIRONMENT_IS_PTHREAD)run(); diff --git a/examples/web/physac/physics_demo.wasm b/examples/web/physac/physics_demo.wasm new file mode 100644 index 0000000..ca66ec4 Binary files /dev/null and b/examples/web/physac/physics_demo.wasm differ diff --git a/examples/web/physac/physics_demo.worker.js b/examples/web/physac/physics_demo.worker.js new file mode 100644 index 0000000..3878b57 --- /dev/null +++ b/examples/web/physac/physics_demo.worker.js @@ -0,0 +1,184 @@ +// Copyright 2015 The Emscripten Authors. All rights reserved. +// Emscripten is available under two separate licenses, the MIT license and the +// University of Illinois/NCSA Open Source License. Both these licenses can be +// found in the LICENSE file. + +// Pthread Web Worker startup routine: +// This is the entry point file that is loaded first by each Web Worker +// that executes pthreads on the Emscripten application. + +// Thread-local: +var threadInfoStruct = 0; // Info area for this thread in Emscripten HEAP (shared). If zero, this worker is not currently hosting an executing pthread. +var selfThreadId = 0; // The ID of this thread. 0 if not hosting a pthread. +var parentThreadId = 0; // The ID of the parent pthread that launched this thread. +var tempDoublePtr = 0; // A temporary memory area for global float and double marshalling operations. + +// Thread-local: Each thread has its own allocated stack space. +var STACK_BASE = 0; +var STACKTOP = 0; +var STACK_MAX = 0; + +// These are system-wide memory area parameters that are set at main runtime startup in main thread, and stay constant throughout the application. +var buffer; // All pthreads share the same Emscripten HEAP as SharedArrayBuffer with the main execution thread. +var DYNAMICTOP_PTR = 0; +var DYNAMIC_BASE = 0; + +var ENVIRONMENT_IS_PTHREAD = true; +var PthreadWorkerInit = {}; + +// performance.now() is specced to return a wallclock time in msecs since that Web Worker/main thread launched. However for pthreads this can cause +// subtle problems in emscripten_get_now() as this essentially would measure time from pthread_create(), meaning that the clocks between each threads +// would be wildly out of sync. Therefore sync all pthreads to the clock on the main browser thread, so that different threads see a somewhat +// coherent clock across each of them (+/- 0.1msecs in testing) +var __performance_now_clock_drift = 0; + +// Cannot use console.log or console.error in a web worker, since that would risk a browser deadlock! https://bugzilla.mozilla.org/show_bug.cgi?id=1049091 +// Therefore implement custom logging facility for threads running in a worker, which queue the messages to main thread to print. +var Module = {}; + + +// When error objects propagate from Web Worker to main thread, they lose helpful call stack and thread ID information, so print out errors early here, +// before that happens. +this.addEventListener('error', function(e) { + if (e.message.indexOf('SimulateInfiniteLoop') != -1) return e.preventDefault(); + + var errorSource = ' in ' + e.filename + ':' + e.lineno + ':' + e.colno; + console.error('Pthread ' + selfThreadId + ' uncaught exception' + (e.filename || e.lineno || e.colno ? errorSource : "") + ': ' + e.message + '. Error object:'); + console.error(e.error); +}); + +function threadPrint() { + var text = Array.prototype.slice.call(arguments).join(' '); + console.log(text); +} +function threadPrintErr() { + var text = Array.prototype.slice.call(arguments).join(' '); + console.error(text); + console.error(new Error().stack); +} +function threadAlert() { + var text = Array.prototype.slice.call(arguments).join(' '); + postMessage({cmd: 'alert', text: text, threadId: selfThreadId}); +} +out = threadPrint; +err = threadPrintErr; +this.alert = threadAlert; + +Module['instantiateWasm'] = function(info, receiveInstance) { + // Instantiate from the module posted from the main thread. + // We can just use sync instantiation in the worker. + instance = new WebAssembly.Instance(wasmModule, info); + // We don't need the module anymore; new threads will be spawned from the main thread. + wasmModule = null; + receiveInstance(instance); // The second 'module' parameter is intentionally null here, we don't need to keep a ref to the Module object from here. + return instance.exports; +} + +var wasmModule; +var wasmMemory; + +this.onmessage = function(e) { + try { + if (e.data.cmd === 'load') { // Preload command that is called once per worker to parse and load the Emscripten code. + // Initialize the thread-local field(s): + tempDoublePtr = e.data.tempDoublePtr; + + // Initialize the global "process"-wide fields: + DYNAMIC_BASE = e.data.DYNAMIC_BASE; + DYNAMICTOP_PTR = e.data.DYNAMICTOP_PTR; + + // The Wasm module will have import fields for STACKTOP and STACK_MAX. At 'load' stage of Worker startup, we are just + // spawning this Web Worker to act as a host for future created pthreads, i.e. we do not have a pthread to start up here yet. + // (A single Worker can also host multiple pthreads throughout its lifetime, shutting down a pthread will not shut down its hosting Worker, + // but the Worker is reused for later spawned pthreads). The 'run' stage below will actually start running a pthread. + // The stack space for a pthread is allocated and deallocated when a pthread is actually run, not yet at Worker 'load' stage. + // However, the WebAssembly module we are loading up here has import fields for STACKTOP and STACK_MAX, which it needs to get filled in + // immediately at Wasm Module instantiation time. The values of these will not get used until pthread is actually running some code, so + // we'll proceed to set up temporary invalid values for these fields for import purposes. Then whenever a pthread is launched at 'run' stage + // below, these values are rewritten to establish proper stack area for the particular pthread. + Module['STACK_MAX'] = Module['STACKTOP'] = 0x7FFFFFFF; + + // Module and memory were sent from main thread + wasmModule = e.data.wasmModule; + wasmMemory = e.data.wasmMemory; + buffer = wasmMemory.buffer; + + PthreadWorkerInit = e.data.PthreadWorkerInit; + + if (typeof e.data.urlOrBlob === 'string') { + importScripts(e.data.urlOrBlob); + } else { + var objectUrl = URL.createObjectURL(e.data.urlOrBlob); + importScripts(objectUrl); + URL.revokeObjectURL(objectUrl); + } + + + if (typeof FS !== 'undefined' && typeof FS.createStandardStreams === 'function') FS.createStandardStreams(); + postMessage({ cmd: 'loaded' }); + } else if (e.data.cmd === 'objectTransfer') { + PThread.receiveObjectTransfer(e.data); + } else if (e.data.cmd === 'run') { // This worker was idle, and now should start executing its pthread entry point. + __performance_now_clock_drift = performance.now() - e.data.time; // Sync up to the clock of the main thread. + threadInfoStruct = e.data.threadInfoStruct; + __register_pthread_ptr(threadInfoStruct, /*isMainBrowserThread=*/0, /*isMainRuntimeThread=*/0); // Pass the thread address inside the asm.js scope to store it for fast access that avoids the need for a FFI out. + selfThreadId = e.data.selfThreadId; + parentThreadId = e.data.parentThreadId; + // Establish the stack frame for this thread in global scope + STACK_BASE = STACKTOP = e.data.stackBase; + STACK_MAX = STACK_BASE + e.data.stackSize; + // Call inside asm.js/wasm module to set up the stack frame for this pthread in asm.js/wasm module scope + Module['establishStackSpace'](e.data.stackBase, e.data.stackBase + e.data.stackSize); + + PThread.receiveObjectTransfer(e.data); + PThread.setThreadStatus(_pthread_self(), 1/*EM_THREAD_STATUS_RUNNING*/); + + try { + // pthread entry points are always of signature 'void *ThreadMain(void *arg)' + // Native codebases sometimes spawn threads with other thread entry point signatures, + // such as void ThreadMain(void *arg), void *ThreadMain(), or void ThreadMain(). + // That is not acceptable per C/C++ specification, but x86 compiler ABI extensions + // enable that to work. If you find the following line to crash, either change the signature + // to "proper" void *ThreadMain(void *arg) form, or try linking with the Emscripten linker + // flag -s EMULATE_FUNCTION_POINTER_CASTS=1 to add in emulation for this x86 ABI extension. + var result = Module['dynCall_ii'](e.data.start_routine, e.data.arg); + + + } catch(e) { + if (e === 'Canceled!') { + PThread.threadCancel(); + return; + } else if (e === 'SimulateInfiniteLoop' || e === 'pthread_exit') { + return; + } else { + Atomics.store(HEAPU32, (threadInfoStruct + 4 /*C_STRUCTS.pthread.threadExitCode*/ ) >> 2, (e instanceof ExitStatus) ? e.status : -2 /*A custom entry specific to Emscripten denoting that the thread crashed.*/); + Atomics.store(HEAPU32, (threadInfoStruct + 0 /*C_STRUCTS.pthread.threadStatus*/ ) >> 2, 1); // Mark the thread as no longer running. + _emscripten_futex_wake(threadInfoStruct + 0 /*C_STRUCTS.pthread.threadStatus*/, 0x7FFFFFFF/*INT_MAX*/); // Wake all threads waiting on this thread to finish. + if (!(e instanceof ExitStatus)) throw e; + } + } + // The thread might have finished without calling pthread_exit(). If so, then perform the exit operation ourselves. + // (This is a no-op if explicit pthread_exit() had been called prior.) + if (!Module['noExitRuntime']) PThread.threadExit(result); + } else if (e.data.cmd === 'cancel') { // Main thread is asking for a pthread_cancel() on this thread. + if (threadInfoStruct && PThread.thisThreadCancelState == 0/*PTHREAD_CANCEL_ENABLE*/) { + PThread.threadCancel(); + } + } else if (e.data.target === 'setimmediate') { + // no-op + } else if (e.data.cmd === 'processThreadQueue') { + if (threadInfoStruct) { // If this thread is actually running? + _emscripten_current_thread_process_queued_calls(); + } + } else { + err('worker.js received unknown command ' + e.data.cmd); + console.error(e.data); + } + } catch(e) { + console.error('worker.js onmessage() captured an uncaught exception: ' + e); + console.error(e.stack); + throw e; + } +} + + diff --git a/examples/web/physac/physics_friction.c b/examples/web/physac/physics_friction.c index d015630..2b328a8 100644 --- a/examples/web/physac/physics_friction.c +++ b/examples/web/physac/physics_friction.c @@ -7,9 +7,9 @@ * * Use the following line to compile: * -* gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread +* gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread * -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition -* +* * Copyright (c) 2017 Victor Fisac * ********************************************************************************************/ @@ -26,15 +26,15 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Physac logo drawing position int logoX = 0; int logoY = 15; -PhysicsBody bodyA; -PhysicsBody bodyB; +PhysicsBody bodyA = { 0 }; +PhysicsBody bodyB = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -42,9 +42,9 @@ PhysicsBody bodyB; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -60,7 +60,7 @@ int main() // Create floor rectangle physics body PhysicsBody ground = CreatePhysicsBodyRectangle((Vector2){ screenWidth/2, screenHeight }, screenWidth, 100, 10); ground->enabled = false; // Disable body state to convert it to static (no dynamics, but collisions) - + PhysicsBody wall = CreatePhysicsBodyRectangle((Vector2){ screenWidth/2, screenHeight*0.8f }, 10, 80, 10); wall->enabled = false; // Disable body state to convert it to static (no dynamics, but collisions) @@ -90,7 +90,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -99,7 +99,7 @@ int main() #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- ClosePhysics(); // Uninitialize physics CloseWindow(); // Close window and OpenGL context @@ -122,7 +122,7 @@ void UpdateDrawFrame(void) bodyA->velocity = (Vector2){ 0, 0 }; bodyA->angularVelocity = 0; SetPhysicsBodyRotation(bodyA, 30*DEG2RAD); - + bodyB->position = (Vector2){ screenWidth - 35, screenHeight*0.6f }; bodyB->velocity = (Vector2){ 0, 0 }; bodyB->angularVelocity = 0; diff --git a/examples/web/physac/physics_friction.html b/examples/web/physac/physics_friction.html new file mode 100644 index 0000000..b574d46 --- /dev/null +++ b/examples/web/physac/physics_friction.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/physac/physics_friction.html.mem b/examples/web/physac/physics_friction.html.mem new file mode 100644 index 0000000..e51e74c Binary files /dev/null and b/examples/web/physac/physics_friction.html.mem differ diff --git a/examples/web/physac/physics_friction.js b/examples/web/physac/physics_friction.js new file mode 100644 index 0000000..de89479 --- /dev/null +++ b/examples/web/physac/physics_friction.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(typeof ENVIRONMENT_IS_PTHREAD==="undefined"){ENVIRONMENT_IS_PTHREAD=false;var PthreadWorkerInit={}}var _scriptDir=typeof document!=="undefined"&&document.currentScript?document.currentScript.src:undefined;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var GLOBAL_BASE=1024;if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var wasmModule;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx)){var u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}if(!ENVIRONMENT_IS_PTHREAD){var DYNAMIC_BASE=5290880,DYNAMICTOP_PTR=47968}var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;if(ENVIRONMENT_IS_PTHREAD)runtimeInitialized=true;function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;if(runtimeInitialized)return;runtimeInitialized=true;__register_pthread_ptr(PThread.mainThreadBlock,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(PThread.mainThreadBlock);if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){if(ENVIRONMENT_IS_PTHREAD)return;FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;runtimeExited=true}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){assert(!ENVIRONMENT_IS_PTHREAD,"addRunDependency cannot be used in a pthread worker");runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="physics_friction.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD)removeRunDependency("wasm-instantiate")}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency("wasm-instantiate")}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"],output["module"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":607,"maximum":607,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};var ASM_CONSTS=[function(){console.error("emscripten_webgl_create_context: attributes pointer is null!")},function(){postMessage({cmd:"processQueuedMainThreadWork"})},function($0){if(!ENVIRONMENT_IS_PTHREAD){if(!PThread.pthreads[$0]||!PThread.pthreads[$0].worker){return 0}PThread.pthreads[$0].worker.postMessage({cmd:"processThreadQueue"})}else{postMessage({targetThread:$0,cmd:"processThreadQueue"})}return 1},function(){return!!Module["canvas"]},function(){Module["noExitRuntime"]=true},function(){throw"Canceled!"}];function _emscripten_asm_const_i(code){return ASM_CONSTS[code]()}function _emscripten_asm_const_ii(code,a0){return ASM_CONSTS[code](a0)}if(!ENVIRONMENT_IS_PTHREAD)__ATINIT__.push({func:function(){___emscripten_pthread_data_constructor()}});if(!ENVIRONMENT_IS_PTHREAD){memoryInitializer="physics_friction.html.mem"}var tempDoublePtr;if(!ENVIRONMENT_IS_PTHREAD)tempDoublePtr=47984;function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var PROCINFO={ppid:1,pid:42,sid:42,pgid:42};var PThread={MAIN_THREAD_ID:1,mainThreadInfo:{schedPolicy:0,schedPrio:0},unusedWorkerPool:[],runningWorkers:[],initMainThreadBlock:function(){if(ENVIRONMENT_IS_PTHREAD)return undefined;PThread.mainThreadBlock=47168;for(var i=0;i<244/4;++i)HEAPU32[PThread.mainThreadBlock/4+i]=0;HEAP32[PThread.mainThreadBlock+24>>2]=PThread.mainThreadBlock;var headPtr=PThread.mainThreadBlock+168;HEAP32[headPtr>>2]=headPtr;var tlsMemory=47424;for(var i=0;i<128;++i)HEAPU32[tlsMemory/4+i]=0;Atomics.store(HEAPU32,PThread.mainThreadBlock+116>>2,tlsMemory);Atomics.store(HEAPU32,PThread.mainThreadBlock+52>>2,PThread.mainThreadBlock);Atomics.store(HEAPU32,PThread.mainThreadBlock+56>>2,PROCINFO.pid)},pthreads:{},pthreadIdCounter:2,exitHandlers:null,setThreadStatus:function(){},runExitHandlers:function(){if(PThread.exitHandlers!==null){while(PThread.exitHandlers.length>0){PThread.exitHandlers.pop()()}PThread.exitHandlers=null}if(ENVIRONMENT_IS_PTHREAD&&threadInfoStruct)___pthread_tsd_run_dtors()},threadExit:function(exitCode){var tb=_pthread_self();if(tb){Atomics.store(HEAPU32,tb+4>>2,exitCode);Atomics.store(HEAPU32,tb+0>>2,1);Atomics.store(HEAPU32,tb+72>>2,1);Atomics.store(HEAPU32,tb+76>>2,0);PThread.runExitHandlers();_emscripten_futex_wake(tb+0,2147483647);__register_pthread_ptr(0,0,0);threadInfoStruct=0;if(ENVIRONMENT_IS_PTHREAD){postMessage({cmd:"exit"})}}},threadCancel:function(){PThread.runExitHandlers();Atomics.store(HEAPU32,threadInfoStruct+4>>2,-1);Atomics.store(HEAPU32,threadInfoStruct+0>>2,1);_emscripten_futex_wake(threadInfoStruct+0,2147483647);threadInfoStruct=selfThreadId=0;__register_pthread_ptr(0,0,0);postMessage({cmd:"cancelDone"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.pthreads={};for(var t in PThread.unusedWorkerPool){var pthread=PThread.unusedWorkerPool[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.unusedWorkerPool=[];for(var t in PThread.runningWorkers){var pthread=PThread.runningWorkers[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.runningWorkers=[]},freeThreadData:function(pthread){if(!pthread)return;if(pthread.threadInfoStruct){var tlsMemory=HEAP32[pthread.threadInfoStruct+116>>2];HEAP32[pthread.threadInfoStruct+116>>2]=0;_free(pthread.tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},receiveObjectTransfer:function(data){},allocateUnusedWorkers:function(numWorkers,onFinishedLoading){if(typeof SharedArrayBuffer==="undefined")return;var numWorkersLoaded=0;var pthreadMainJs="physics_friction.worker.js";pthreadMainJs=locateFile(pthreadMainJs);for(var i=0;i0)return PThread.unusedWorkerPool.pop();else return null},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>2]=value;return value}function ___lock(){}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,which,varargs);SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(7,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(8,1,name_);return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i>2]=eventTypeId;HEAP32[varargs+4>>2]=eventData;HEAP32[varargs+8>>2]=userData;_emscripten_async_queue_on_thread_(targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(9,1);JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}var __main_thread_futex_wait_address;if(ENVIRONMENT_IS_PTHREAD)__main_thread_futex_wait_address=PthreadWorkerInit.__main_thread_futex_wait_address;else PthreadWorkerInit.__main_thread_futex_wait_address=__main_thread_futex_wait_address=47952;function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>HEAP8.length||addr&3!=0)return-22;if(ENVIRONMENT_IS_WORKER){var ret=Atomics.wait(HEAP32,addr>>2,val,timeout);if(ret==="timed-out")return-110;if(ret==="not-equal")return-11;if(ret==="ok")return 0;throw"Atomics.wait returned an unexpected value "+ret}else{var loadedVal=Atomics.load(HEAP32,addr>>2);if(val!=loadedVal)return-11;var tNow=performance.now();var tEnd=tNow+timeout;Atomics.store(HEAP32,__main_thread_futex_wait_address>>2,addr);var ourWaitAddress=addr;while(addr==ourWaitAddress){tNow=performance.now();if(tNow>tEnd){return-110}_emscripten_main_thread_process_queued_calls();addr=Atomics.load(HEAP32,__main_thread_futex_wait_address>>2)}return 0}}function _emscripten_futex_wake(addr,count){if(addr<=0||addr>HEAP8.length||addr&3!=0||count<0)return-22;if(count==0)return 0;var mainThreadWaitAddress=Atomics.load(HEAP32,__main_thread_futex_wait_address>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(HEAP32,__main_thread_futex_wait_address>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(HEAP32,addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw"Atomics.notify returned an unexpected value "+ret}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(10,1,index,gamepadState);if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(11,1);return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(12,1,pointerlockStatus);if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);HEAP32[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArrays(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstanced(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffers(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstanced(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArray(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisor(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_has_threading_support(){return typeof SharedArrayBuffer!=="undefined"}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var buffer=stackAlloc(numCallArgs*8);for(var i=0;i>3)+i]=arguments[2+i]}var ret=_emscripten_run_in_main_runtime_thread_js(index,numCallArgs,buffer,sync);stackRestore(stack);return ret}function _emscripten_receive_on_main_thread_js(index,numCallArgs,buffer){if(!_emscripten_receive_on_main_thread_js.callArgs){_emscripten_receive_on_main_thread_js.callArgs=[]}var callArgs=_emscripten_receive_on_main_thread_js.callArgs;callArgs.length=numCallArgs;for(var i=0;i>3)+i]}var func;if(index>0){func=proxiedFunctionTable[index]}else{func=ASM_CONSTS[-index-1]}return func.apply(null,callArgs)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(13,1,target,deferUntilInEventHandler);if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(14,1);return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}HEAP32[varargs>>2]=targetCanvasPtr;HEAP32[varargs+4>>2]=width;HEAP32[varargs+8>>2]=height;_emscripten_async_queue_on_thread_(targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):"";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}function __findCanvasEventTarget(target){if(typeof target==="number")target=UTF8ToString(target);if(!target||target==="#canvas"){if(typeof GL!=="undefined"&&GL.offscreenCanvases["canvas"])return GL.offscreenCanvases["canvas"];return Module["canvas"]}if(typeof GL!=="undefined"&&GL.offscreenCanvases[target])return GL.offscreenCanvases[target];return __findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=__findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){HEAP32[canvas.canvasSharedPtr>>2]=width;HEAP32[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(canvas.GLctxObject.GLctx.VIEWPORT);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=HEAP32[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(15,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=__findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(targetThread){var mouseEventData=_malloc(72);__fillMouseEventData(mouseEventData,e,target);JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,mouseEventData,userData)}else if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(16,1,target,userData,useCapture,callbackfunc,targetThread);__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=targetThread?_malloc(280):JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,fullscreenChangeEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(17,1,target,userData,useCapture,callbackfunc,targetThread);if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=targetThread?_malloc(1432):JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,gamepadEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(18,1,userData,useCapture,callbackfunc,targetThread);if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(19,1,userData,useCapture,callbackfunc,targetThread);if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=targetThread?_malloc(164):JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,keyEventData,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(20,1,target,userData,useCapture,callbackfunc,targetThread);__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,touchEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(21,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(22,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(23,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(24,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_supports_offscreencanvas(){return 0}function _emscripten_syscall(which,varargs){switch(which){case 140:return ___syscall140(which,varargs);case 145:return ___syscall145(which,varargs);case 146:return ___syscall146(which,varargs);case 221:return ___syscall221(which,varargs);case 5:return ___syscall5(which,varargs);case 54:return ___syscall54(which,varargs);case 6:return ___syscall6(which,varargs);default:throw"surprising proxied syscall: "+which}}function _emscripten_webgl_do_commit_frame(){if(!GL.currentContext||!GL.currentContext.GLctx){return-3}if(!GL.currentContext.GLctx.commit){return-1}if(!GL.currentContext.attributes.explicitSwapControl){return-3}GL.currentContext.GLctx.commit();return 0}var __emscripten_webgl_power_preferences=["default","low-power","high-performance"];function _emscripten_webgl_do_create_context(target,attributes){var contextAttributes={};var a=attributes>>2;contextAttributes["alpha"]=!!HEAP32[a+(0>>2)];contextAttributes["depth"]=!!HEAP32[a+(4>>2)];contextAttributes["stencil"]=!!HEAP32[a+(8>>2)];contextAttributes["antialias"]=!!HEAP32[a+(12>>2)];contextAttributes["premultipliedAlpha"]=!!HEAP32[a+(16>>2)];contextAttributes["preserveDrawingBuffer"]=!!HEAP32[a+(20>>2)];var powerPreference=HEAP32[a+(24>>2)];contextAttributes["powerPreference"]=__emscripten_webgl_power_preferences[powerPreference];contextAttributes["failIfMajorPerformanceCaveat"]=!!HEAP32[a+(28>>2)];contextAttributes.majorVersion=HEAP32[a+(32>>2)];contextAttributes.minorVersion=HEAP32[a+(36>>2)];contextAttributes.enableExtensionsByDefault=HEAP32[a+(40>>2)];contextAttributes.explicitSwapControl=HEAP32[a+(44>>2)];contextAttributes.proxyContextToMainThread=HEAP32[a+(48>>2)];contextAttributes.renderViaOffscreenBackBuffer=HEAP32[a+(52>>2)];var canvas=__findCanvasEventTarget(target);if(ENVIRONMENT_IS_PTHREAD){if(contextAttributes.proxyContextToMainThread===2||!canvas&&contextAttributes.proxyContextToMainThread===1){if(typeof OffscreenCanvas==="undefined"){HEAP32[attributes+52>>2]=1;HEAP32[attributes+20>>2]=1}return _emscripten_sync_run_in_main_thread_2(622854144,target,attributes)}}if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _exit(status){exit(status)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2]=0}var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,thread:threadParams.pthread_ptr,threadInfoStruct:threadParams.pthread_ptr};Atomics.store(HEAPU32,pthread.threadInfoStruct+0>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+4>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+20>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+80>>2,threadParams.detached);Atomics.store(HEAPU32,pthread.threadInfoStruct+116>>2,tlsMemory);Atomics.store(HEAPU32,pthread.threadInfoStruct+60>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+52>>2,pthread.threadInfoStruct);Atomics.store(HEAPU32,pthread.threadInfoStruct+56>>2,PROCINFO.pid);Atomics.store(HEAPU32,pthread.threadInfoStruct+120>>2,threadParams.stackSize);Atomics.store(HEAPU32,pthread.threadInfoStruct+96>>2,threadParams.stackSize);Atomics.store(HEAPU32,pthread.threadInfoStruct+92>>2,threadParams.stackBase);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+8>>2,threadParams.stackBase);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+12>>2,threadParams.detached);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+20>>2,threadParams.schedPolicy);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+24>>2,threadParams.schedPrio);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(HEAPU32,pthread.threadInfoStruct+188>>2,global_locale);worker.pthread=pthread;var msg={cmd:"run",start_routine:threadParams.startRoutine,arg:threadParams.arg,threadInfoStruct:threadParams.pthread_ptr,selfThreadId:threadParams.pthread_ptr,parentThreadId:threadParams.parent_pthread_ptr,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}}function _pthread_getschedparam(thread,policy,schedparam){if(!policy&&!schedparam)return ERRNO_CODES.EINVAL;if(!thread){err("pthread_getschedparam called with a null thread pointer!");return ERRNO_CODES.ESRCH}var self=HEAP32[thread+24>>2];if(self!=thread){err("pthread_getschedparam attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var schedPolicy=Atomics.load(HEAPU32,thread+120+20>>2);var schedPrio=Atomics.load(HEAPU32,thread+120+24>>2);if(policy)HEAP32[policy>>2]=schedPolicy;if(schedparam)HEAP32[schedparam>>2]=schedPrio;return 0}function _pthread_create(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer==="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 11}if(!pthread_ptr){err("pthread_create called with a null thread pointer!");return 22}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length==0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;var schedPolicy=0;var schedPrio=0;if(attr){stackSize=HEAP32[attr>>2];stackSize+=81920;stackBase=HEAP32[attr+8>>2];detached=HEAP32[attr+12>>2]!=0;var inheritSched=HEAP32[attr+16>>2]==0;if(inheritSched){var prevSchedPolicy=HEAP32[attr+20>>2];var prevSchedPrio=HEAP32[attr+24>>2];var parentThreadPtr=PThread.currentProxiedOperationCallerThread?PThread.currentProxiedOperationCallerThread:_pthread_self();_pthread_getschedparam(parentThreadPtr,attr+20,attr+24);schedPolicy=HEAP32[attr+20>>2];schedPrio=HEAP32[attr+24>>2];HEAP32[attr+20>>2]=prevSchedPolicy;HEAP32[attr+24>>2]=prevSchedPrio}else{schedPolicy=HEAP32[attr+20>>2];schedPrio=HEAP32[attr+24>>2]}}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_malloc(stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(244);for(var i=0;i<244>>2;++i)HEAPU32[(threadInfoStruct>>2)+i]=0;HEAP32[pthread_ptr>>2]=threadInfoStruct;HEAP32[threadInfoStruct+24>>2]=threadInfoStruct;var headPtr=threadInfoStruct+168;HEAP32[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,schedPolicy:schedPolicy,schedPrio:schedPrio,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,parent_pthread_ptr:_pthread_self(),arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList)}else{__spawn_thread(threadParams)}return 0}function __cleanup_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! _cleanup_thread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in _cleanup_thread!";HEAP32[pthread_ptr+24>>2]=0;var pthread=PThread.pthreads[pthread_ptr];var worker=pthread.worker;PThread.freeThreadData(pthread);worker.pthread=undefined;PThread.unusedWorkerPool.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker.pthread),1)}function __pthread_testcancel_js(){if(!ENVIRONMENT_IS_PTHREAD)return;if(!threadInfoStruct)return;var cancelDisabled=Atomics.load(HEAPU32,threadInfoStruct+72>>2);if(cancelDisabled)return;var canceled=Atomics.load(HEAPU32,threadInfoStruct+0>>2);if(canceled==2)throw"Canceled!"}function _pthread_join(thread,status){if(!thread){err("pthread_join attempted on a null thread pointer!");return ERRNO_CODES.ESRCH}if(ENVIRONMENT_IS_PTHREAD&&selfThreadId==thread){err("PThread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}else if(!ENVIRONMENT_IS_PTHREAD&&PThread.mainThreadBlock==thread){err("Main thread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}var self=HEAP32[thread+24>>2];if(self!=thread){err("pthread_join attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var detached=Atomics.load(HEAPU32,thread+80>>2);if(detached){err("Attempted to join thread "+thread+", which was already detached!");return ERRNO_CODES.EINVAL}for(;;){var threadStatus=Atomics.load(HEAPU32,thread+0>>2);if(threadStatus==1){var threadExitCode=Atomics.load(HEAPU32,thread+4>>2);if(status)HEAP32[status>>2]=threadExitCode;Atomics.store(HEAPU32,thread+80>>2,1);if(!ENVIRONMENT_IS_PTHREAD)__cleanup_thread(thread);else postMessage({cmd:"cleanupThread",thread:thread});return 0}__pthread_testcancel_js();if(!ENVIRONMENT_IS_PTHREAD)_emscripten_main_thread_process_queued_calls();_emscripten_futex_wait(thread+0,threadStatus,ENVIRONMENT_IS_PTHREAD?100:1)}}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(ENVIRONMENT_IS_PTHREAD){_emscripten_get_now=function(){return performance["now"]()-__performance_now_clock_drift}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));var proxiedFunctionTable=[null,___syscall140,___syscall145,___syscall146,___syscall221,___syscall5,___syscall54,___syscall6,_eglGetProcAddress,_emscripten_exit_pointerlock,_emscripten_get_gamepad_status,_emscripten_get_num_gamepads,_emscripten_get_pointerlock_status,_emscripten_request_pointerlock,_emscripten_sample_gamepad_data,_emscripten_set_canvas_element_size_main_thread,_emscripten_set_click_callback_on_thread,_emscripten_set_fullscreenchange_callback_on_thread,_emscripten_set_gamepadconnected_callback_on_thread,_emscripten_set_gamepaddisconnected_callback_on_thread,_emscripten_set_keypress_callback_on_thread,_emscripten_set_touchcancel_callback_on_thread,_emscripten_set_touchend_callback_on_thread,_emscripten_set_touchmove_callback_on_thread,_emscripten_set_touchstart_callback_on_thread];function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"g":setTempRet0,"b":___assert_fail,"n":___call_main,"Hc":___lock,"xa":___setErrNo,"Gc":___syscall140,"Fc":___syscall145,"U":___syscall146,"j":___syscall221,"Ec":___syscall5,"Dc":___syscall54,"sc":___syscall6,"p":___unlock,"o":_eglGetProcAddress,"i":_emscripten_asm_const_i,"zd":_emscripten_asm_const_ii,"vb":_emscripten_exit_pointerlock,"f":_emscripten_futex_wait,"h":_emscripten_futex_wake,"td":_emscripten_get_gamepad_status,"l":_emscripten_get_heap_size,"e":_emscripten_get_now,"Wc":_emscripten_get_num_gamepads,"Sa":_emscripten_get_pointerlock_status,"Na":_emscripten_glActiveTexture,"Ma":_emscripten_glAttachShader,"La":_emscripten_glBeginQueryEXT,"Ka":_emscripten_glBindAttribLocation,"Ja":_emscripten_glBindBuffer,"Ia":_emscripten_glBindFramebuffer,"Ha":_emscripten_glBindRenderbuffer,"Ga":_emscripten_glBindTexture,"Fa":_emscripten_glBindVertexArray,"Ea":_emscripten_glBlendColor,"Da":_emscripten_glBlendEquation,"Ca":_emscripten_glBlendEquationSeparate,"Ba":_emscripten_glBlendFunc,"Aa":_emscripten_glBlendFuncSeparate,"za":_emscripten_glBufferData,"ya":_emscripten_glBufferSubData,"wa":_emscripten_glCheckFramebufferStatus,"va":_emscripten_glClear,"ua":_emscripten_glClearColor,"ta":_emscripten_glClearDepthf,"sa":_emscripten_glClearStencil,"ra":_emscripten_glColorMask,"qa":_emscripten_glCompileShader,"pa":_emscripten_glCompressedTexImage2D,"oa":_emscripten_glCompressedTexSubImage2D,"na":_emscripten_glCopyTexImage2D,"ma":_emscripten_glCopyTexSubImage2D,"la":_emscripten_glCreateProgram,"ka":_emscripten_glCreateShader,"ja":_emscripten_glCullFace,"ia":_emscripten_glDeleteBuffers,"ha":_emscripten_glDeleteFramebuffers,"ga":_emscripten_glDeleteProgram,"fa":_emscripten_glDeleteQueriesEXT,"ea":_emscripten_glDeleteRenderbuffers,"da":_emscripten_glDeleteShader,"ca":_emscripten_glDeleteTextures,"ba":_emscripten_glDeleteVertexArrays,"aa":_emscripten_glDepthFunc,"$":_emscripten_glDepthMask,"_":_emscripten_glDepthRangef,"Z":_emscripten_glDetachShader,"Y":_emscripten_glDisable,"X":_emscripten_glDisableVertexAttribArray,"W":_emscripten_glDrawArrays,"V":_emscripten_glDrawArraysInstanced,"T":_emscripten_glDrawBuffers,"S":_emscripten_glDrawElements,"R":_emscripten_glDrawElementsInstanced,"Q":_emscripten_glEnable,"P":_emscripten_glEnableVertexAttribArray,"O":_emscripten_glEndQueryEXT,"N":_emscripten_glFinish,"M":_emscripten_glFlush,"L":_emscripten_glFramebufferRenderbuffer,"K":_emscripten_glFramebufferTexture2D,"J":_emscripten_glFrontFace,"I":_emscripten_glGenBuffers,"H":_emscripten_glGenFramebuffers,"G":_emscripten_glGenQueriesEXT,"F":_emscripten_glGenRenderbuffers,"E":_emscripten_glGenTextures,"D":_emscripten_glGenVertexArrays,"C":_emscripten_glGenerateMipmap,"B":_emscripten_glGetActiveAttrib,"A":_emscripten_glGetActiveUniform,"z":_emscripten_glGetAttachedShaders,"y":_emscripten_glGetAttribLocation,"x":_emscripten_glGetBooleanv,"w":_emscripten_glGetBufferParameteriv,"v":_emscripten_glGetError,"u":_emscripten_glGetFloatv,"t":_emscripten_glGetFramebufferAttachmentParameteriv,"s":_emscripten_glGetIntegerv,"r":_emscripten_glGetProgramInfoLog,"q":_emscripten_glGetProgramiv,"Cc":_emscripten_glGetQueryObjecti64vEXT,"Bc":_emscripten_glGetQueryObjectivEXT,"Ac":_emscripten_glGetQueryObjectui64vEXT,"zc":_emscripten_glGetQueryObjectuivEXT,"yc":_emscripten_glGetQueryivEXT,"xc":_emscripten_glGetRenderbufferParameteriv,"wc":_emscripten_glGetShaderInfoLog,"vc":_emscripten_glGetShaderPrecisionFormat,"uc":_emscripten_glGetShaderSource,"tc":_emscripten_glGetShaderiv,"rc":_emscripten_glGetString,"qc":_emscripten_glGetTexParameterfv,"pc":_emscripten_glGetTexParameteriv,"oc":_emscripten_glGetUniformLocation,"nc":_emscripten_glGetUniformfv,"mc":_emscripten_glGetUniformiv,"lc":_emscripten_glGetVertexAttribPointerv,"kc":_emscripten_glGetVertexAttribfv,"jc":_emscripten_glGetVertexAttribiv,"ic":_emscripten_glHint,"hc":_emscripten_glIsBuffer,"gc":_emscripten_glIsEnabled,"fc":_emscripten_glIsFramebuffer,"ec":_emscripten_glIsProgram,"dc":_emscripten_glIsQueryEXT,"cc":_emscripten_glIsRenderbuffer,"bc":_emscripten_glIsShader,"ac":_emscripten_glIsTexture,"$b":_emscripten_glIsVertexArray,"_b":_emscripten_glLineWidth,"Zb":_emscripten_glLinkProgram,"Yb":_emscripten_glPixelStorei,"Xb":_emscripten_glPolygonOffset,"Wb":_emscripten_glQueryCounterEXT,"Vb":_emscripten_glReadPixels,"Ub":_emscripten_glReleaseShaderCompiler,"Tb":_emscripten_glRenderbufferStorage,"Sb":_emscripten_glSampleCoverage,"Rb":_emscripten_glScissor,"Qb":_emscripten_glShaderBinary,"Pb":_emscripten_glShaderSource,"Ob":_emscripten_glStencilFunc,"Nb":_emscripten_glStencilFuncSeparate,"Mb":_emscripten_glStencilMask,"Lb":_emscripten_glStencilMaskSeparate,"Kb":_emscripten_glStencilOp,"Jb":_emscripten_glStencilOpSeparate,"Ib":_emscripten_glTexImage2D,"Hb":_emscripten_glTexParameterf,"Gb":_emscripten_glTexParameterfv,"Fb":_emscripten_glTexParameteri,"Eb":_emscripten_glTexParameteriv,"Db":_emscripten_glTexSubImage2D,"Cb":_emscripten_glUniform1f,"Bb":_emscripten_glUniform1fv,"Ab":_emscripten_glUniform1i,"zb":_emscripten_glUniform1iv,"yb":_emscripten_glUniform2f,"xb":_emscripten_glUniform2fv,"wb":_emscripten_glUniform2i,"ub":_emscripten_glUniform2iv,"tb":_emscripten_glUniform3f,"sb":_emscripten_glUniform3fv,"rb":_emscripten_glUniform3i,"qb":_emscripten_glUniform3iv,"pb":_emscripten_glUniform4f,"ob":_emscripten_glUniform4fv,"nb":_emscripten_glUniform4i,"mb":_emscripten_glUniform4iv,"lb":_emscripten_glUniformMatrix2fv,"kb":_emscripten_glUniformMatrix3fv,"jb":_emscripten_glUniformMatrix4fv,"ib":_emscripten_glUseProgram,"hb":_emscripten_glValidateProgram,"gb":_emscripten_glVertexAttrib1f,"fb":_emscripten_glVertexAttrib1fv,"eb":_emscripten_glVertexAttrib2f,"db":_emscripten_glVertexAttrib2fv,"cb":_emscripten_glVertexAttrib3f,"bb":_emscripten_glVertexAttrib3fv,"ab":_emscripten_glVertexAttrib4f,"$a":_emscripten_glVertexAttrib4fv,"_a":_emscripten_glVertexAttribDivisor,"Za":_emscripten_glVertexAttribPointer,"Ya":_emscripten_glViewport,"yd":_emscripten_has_threading_support,"xd":_emscripten_memcpy_big,"wd":_emscripten_receive_on_main_thread_js,"vd":_emscripten_request_pointerlock,"ud":_emscripten_resize_heap,"Xa":_emscripten_run_script,"sd":_emscripten_sample_gamepad_data,"rd":_emscripten_set_canvas_element_size,"qd":_emscripten_set_click_callback_on_thread,"pd":_emscripten_set_fullscreenchange_callback_on_thread,"od":_emscripten_set_gamepadconnected_callback_on_thread,"nd":_emscripten_set_gamepaddisconnected_callback_on_thread,"md":_emscripten_set_keypress_callback_on_thread,"ld":_emscripten_set_main_loop,"kd":_emscripten_set_touchcancel_callback_on_thread,"jd":_emscripten_set_touchend_callback_on_thread,"id":_emscripten_set_touchmove_callback_on_thread,"hd":_emscripten_set_touchstart_callback_on_thread,"gd":_emscripten_supports_offscreencanvas,"fd":_emscripten_syscall,"Wa":_emscripten_webgl_do_commit_frame,"Va":_emscripten_webgl_do_create_context,"ed":_exit,"Ua":_glfwCreateWindow,"dd":_glfwDefaultWindowHints,"cd":_glfwDestroyWindow,"bd":_glfwGetCursorPos,"Ta":_glfwGetPrimaryMonitor,"k":_glfwGetTime,"ad":_glfwGetVideoModes,"$c":_glfwInit,"_c":_glfwMakeContextCurrent,"Zc":_glfwSetCharCallback,"Yc":_glfwSetCursorEnterCallback,"Xc":_glfwSetCursorPosCallback,"Vc":_glfwSetDropCallback,"Uc":_glfwSetErrorCallback,"Tc":_glfwSetKeyCallback,"Sc":_glfwSetMouseButtonCallback,"Rc":_glfwSetScrollCallback,"Qc":_glfwSetWindowIconifyCallback,"Pc":_glfwSetWindowShouldClose,"Oc":_glfwSetWindowSizeCallback,"Nc":_glfwSwapBuffers,"Mc":_glfwSwapInterval,"Ra":_glfwTerminate,"d":_glfwWindowHint,"Qa":_llvm_stackrestore,"Pa":_llvm_stacksave,"Lc":_pthread_cleanup_pop,"Kc":_pthread_cleanup_push,"m":_pthread_create,"Jc":_pthread_join,"Oa":_time,"Ic":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___emscripten_pthread_data_constructor=Module["___emscripten_pthread_data_constructor"]=function(){return Module["asm"]["Ad"].apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["Bd"].apply(null,arguments)};var ___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=function(){return Module["asm"]["Cd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_add_u64=Module["__emscripten_atomic_fetch_and_add_u64"]=function(){return Module["asm"]["Dd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_and_u64=Module["__emscripten_atomic_fetch_and_and_u64"]=function(){return Module["asm"]["Ed"].apply(null,arguments)};var __emscripten_atomic_fetch_and_or_u64=Module["__emscripten_atomic_fetch_and_or_u64"]=function(){return Module["asm"]["Fd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_sub_u64=Module["__emscripten_atomic_fetch_and_sub_u64"]=function(){return Module["asm"]["Gd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_xor_u64=Module["__emscripten_atomic_fetch_and_xor_u64"]=function(){return Module["asm"]["Hd"].apply(null,arguments)};var __register_pthread_ptr=Module["__register_pthread_ptr"]=function(){return Module["asm"]["Id"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["Jd"].apply(null,arguments)};var _emscripten_async_queue_call_on_thread=Module["_emscripten_async_queue_call_on_thread"]=function(){return Module["asm"]["Kd"].apply(null,arguments)};var _emscripten_async_queue_on_thread_=Module["_emscripten_async_queue_on_thread_"]=function(){return Module["asm"]["Ld"].apply(null,arguments)};var _emscripten_async_run_in_main_thread=Module["_emscripten_async_run_in_main_thread"]=function(){return Module["asm"]["Md"].apply(null,arguments)};var _emscripten_atomic_add_u64=Module["_emscripten_atomic_add_u64"]=function(){return Module["asm"]["Nd"].apply(null,arguments)};var _emscripten_atomic_and_u64=Module["_emscripten_atomic_and_u64"]=function(){return Module["asm"]["Od"].apply(null,arguments)};var _emscripten_atomic_cas_u64=Module["_emscripten_atomic_cas_u64"]=function(){return Module["asm"]["Pd"].apply(null,arguments)};var _emscripten_atomic_exchange_u64=Module["_emscripten_atomic_exchange_u64"]=function(){return Module["asm"]["Qd"].apply(null,arguments)};var _emscripten_atomic_load_f32=Module["_emscripten_atomic_load_f32"]=function(){return Module["asm"]["Rd"].apply(null,arguments)};var _emscripten_atomic_load_f64=Module["_emscripten_atomic_load_f64"]=function(){return Module["asm"]["Sd"].apply(null,arguments)};var _emscripten_atomic_load_u64=Module["_emscripten_atomic_load_u64"]=function(){return Module["asm"]["Td"].apply(null,arguments)};var _emscripten_atomic_or_u64=Module["_emscripten_atomic_or_u64"]=function(){return Module["asm"]["Ud"].apply(null,arguments)};var _emscripten_atomic_store_f32=Module["_emscripten_atomic_store_f32"]=function(){return Module["asm"]["Vd"].apply(null,arguments)};var _emscripten_atomic_store_f64=Module["_emscripten_atomic_store_f64"]=function(){return Module["asm"]["Wd"].apply(null,arguments)};var _emscripten_atomic_store_u64=Module["_emscripten_atomic_store_u64"]=function(){return Module["asm"]["Xd"].apply(null,arguments)};var _emscripten_atomic_sub_u64=Module["_emscripten_atomic_sub_u64"]=function(){return Module["asm"]["Yd"].apply(null,arguments)};var _emscripten_atomic_xor_u64=Module["_emscripten_atomic_xor_u64"]=function(){return Module["asm"]["Zd"].apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=function(){return Module["asm"]["_d"].apply(null,arguments)};var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=function(){return Module["asm"]["$d"].apply(null,arguments)};var _emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=function(){return Module["asm"]["ae"].apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=function(){return Module["asm"]["be"].apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=function(){return Module["asm"]["ce"].apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread=Module["_emscripten_sync_run_in_main_thread"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_0=Module["_emscripten_sync_run_in_main_thread_0"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_1=Module["_emscripten_sync_run_in_main_thread_1"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_2=Module["_emscripten_sync_run_in_main_thread_2"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_3=Module["_emscripten_sync_run_in_main_thread_3"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_5=Module["_emscripten_sync_run_in_main_thread_5"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_6=Module["_emscripten_sync_run_in_main_thread_6"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_7=Module["_emscripten_sync_run_in_main_thread_7"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_xprintf_varargs=Module["_emscripten_sync_run_in_main_thread_xprintf_varargs"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _emscripten_webgl_commit_frame=Module["_emscripten_webgl_commit_frame"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _proxy_main=Module["_proxy_main"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var _pthread_self=Module["_pthread_self"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var establishStackSpace=Module["establishStackSpace"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["He"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Ie"].apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["De"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};Module["asm"]=asm;Module["establishStackSpace"]=establishStackSpace;Module["dynCall_ii"]=dynCall_ii;if(memoryInitializer&&!ENVIRONMENT_IS_PTHREAD){if(!isDataURI(memoryInitializer)){memoryInitializer=locateFile(memoryInitializer)}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module["memoryInitializerRequest"])delete Module["memoryInitializerRequest"].response;removeRunDependency("memory initializer")};var doBrowserLoad=function(){Module["readAsync"](memoryInitializer,applyMemoryInitializer,function(){throw"could not load memory initializer "+memoryInitializer})};if(Module["memoryInitializerRequest"]){var useRequest=function(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}applyMemoryInitializer(response)};if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{PThread.terminateAllThreads();ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(ENVIRONMENT_IS_PTHREAD)console.error("Pthread aborting at "+(new Error).stack);if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}if(!ENVIRONMENT_IS_PTHREAD)Module["noExitRuntime"]=true;if(!ENVIRONMENT_IS_PTHREAD)run(); diff --git a/examples/web/physac/physics_friction.wasm b/examples/web/physac/physics_friction.wasm new file mode 100644 index 0000000..9dc05c8 Binary files /dev/null and b/examples/web/physac/physics_friction.wasm differ diff --git a/examples/web/physac/physics_friction.worker.js b/examples/web/physac/physics_friction.worker.js new file mode 100644 index 0000000..3878b57 --- /dev/null +++ b/examples/web/physac/physics_friction.worker.js @@ -0,0 +1,184 @@ +// Copyright 2015 The Emscripten Authors. All rights reserved. +// Emscripten is available under two separate licenses, the MIT license and the +// University of Illinois/NCSA Open Source License. Both these licenses can be +// found in the LICENSE file. + +// Pthread Web Worker startup routine: +// This is the entry point file that is loaded first by each Web Worker +// that executes pthreads on the Emscripten application. + +// Thread-local: +var threadInfoStruct = 0; // Info area for this thread in Emscripten HEAP (shared). If zero, this worker is not currently hosting an executing pthread. +var selfThreadId = 0; // The ID of this thread. 0 if not hosting a pthread. +var parentThreadId = 0; // The ID of the parent pthread that launched this thread. +var tempDoublePtr = 0; // A temporary memory area for global float and double marshalling operations. + +// Thread-local: Each thread has its own allocated stack space. +var STACK_BASE = 0; +var STACKTOP = 0; +var STACK_MAX = 0; + +// These are system-wide memory area parameters that are set at main runtime startup in main thread, and stay constant throughout the application. +var buffer; // All pthreads share the same Emscripten HEAP as SharedArrayBuffer with the main execution thread. +var DYNAMICTOP_PTR = 0; +var DYNAMIC_BASE = 0; + +var ENVIRONMENT_IS_PTHREAD = true; +var PthreadWorkerInit = {}; + +// performance.now() is specced to return a wallclock time in msecs since that Web Worker/main thread launched. However for pthreads this can cause +// subtle problems in emscripten_get_now() as this essentially would measure time from pthread_create(), meaning that the clocks between each threads +// would be wildly out of sync. Therefore sync all pthreads to the clock on the main browser thread, so that different threads see a somewhat +// coherent clock across each of them (+/- 0.1msecs in testing) +var __performance_now_clock_drift = 0; + +// Cannot use console.log or console.error in a web worker, since that would risk a browser deadlock! https://bugzilla.mozilla.org/show_bug.cgi?id=1049091 +// Therefore implement custom logging facility for threads running in a worker, which queue the messages to main thread to print. +var Module = {}; + + +// When error objects propagate from Web Worker to main thread, they lose helpful call stack and thread ID information, so print out errors early here, +// before that happens. +this.addEventListener('error', function(e) { + if (e.message.indexOf('SimulateInfiniteLoop') != -1) return e.preventDefault(); + + var errorSource = ' in ' + e.filename + ':' + e.lineno + ':' + e.colno; + console.error('Pthread ' + selfThreadId + ' uncaught exception' + (e.filename || e.lineno || e.colno ? errorSource : "") + ': ' + e.message + '. Error object:'); + console.error(e.error); +}); + +function threadPrint() { + var text = Array.prototype.slice.call(arguments).join(' '); + console.log(text); +} +function threadPrintErr() { + var text = Array.prototype.slice.call(arguments).join(' '); + console.error(text); + console.error(new Error().stack); +} +function threadAlert() { + var text = Array.prototype.slice.call(arguments).join(' '); + postMessage({cmd: 'alert', text: text, threadId: selfThreadId}); +} +out = threadPrint; +err = threadPrintErr; +this.alert = threadAlert; + +Module['instantiateWasm'] = function(info, receiveInstance) { + // Instantiate from the module posted from the main thread. + // We can just use sync instantiation in the worker. + instance = new WebAssembly.Instance(wasmModule, info); + // We don't need the module anymore; new threads will be spawned from the main thread. + wasmModule = null; + receiveInstance(instance); // The second 'module' parameter is intentionally null here, we don't need to keep a ref to the Module object from here. + return instance.exports; +} + +var wasmModule; +var wasmMemory; + +this.onmessage = function(e) { + try { + if (e.data.cmd === 'load') { // Preload command that is called once per worker to parse and load the Emscripten code. + // Initialize the thread-local field(s): + tempDoublePtr = e.data.tempDoublePtr; + + // Initialize the global "process"-wide fields: + DYNAMIC_BASE = e.data.DYNAMIC_BASE; + DYNAMICTOP_PTR = e.data.DYNAMICTOP_PTR; + + // The Wasm module will have import fields for STACKTOP and STACK_MAX. At 'load' stage of Worker startup, we are just + // spawning this Web Worker to act as a host for future created pthreads, i.e. we do not have a pthread to start up here yet. + // (A single Worker can also host multiple pthreads throughout its lifetime, shutting down a pthread will not shut down its hosting Worker, + // but the Worker is reused for later spawned pthreads). The 'run' stage below will actually start running a pthread. + // The stack space for a pthread is allocated and deallocated when a pthread is actually run, not yet at Worker 'load' stage. + // However, the WebAssembly module we are loading up here has import fields for STACKTOP and STACK_MAX, which it needs to get filled in + // immediately at Wasm Module instantiation time. The values of these will not get used until pthread is actually running some code, so + // we'll proceed to set up temporary invalid values for these fields for import purposes. Then whenever a pthread is launched at 'run' stage + // below, these values are rewritten to establish proper stack area for the particular pthread. + Module['STACK_MAX'] = Module['STACKTOP'] = 0x7FFFFFFF; + + // Module and memory were sent from main thread + wasmModule = e.data.wasmModule; + wasmMemory = e.data.wasmMemory; + buffer = wasmMemory.buffer; + + PthreadWorkerInit = e.data.PthreadWorkerInit; + + if (typeof e.data.urlOrBlob === 'string') { + importScripts(e.data.urlOrBlob); + } else { + var objectUrl = URL.createObjectURL(e.data.urlOrBlob); + importScripts(objectUrl); + URL.revokeObjectURL(objectUrl); + } + + + if (typeof FS !== 'undefined' && typeof FS.createStandardStreams === 'function') FS.createStandardStreams(); + postMessage({ cmd: 'loaded' }); + } else if (e.data.cmd === 'objectTransfer') { + PThread.receiveObjectTransfer(e.data); + } else if (e.data.cmd === 'run') { // This worker was idle, and now should start executing its pthread entry point. + __performance_now_clock_drift = performance.now() - e.data.time; // Sync up to the clock of the main thread. + threadInfoStruct = e.data.threadInfoStruct; + __register_pthread_ptr(threadInfoStruct, /*isMainBrowserThread=*/0, /*isMainRuntimeThread=*/0); // Pass the thread address inside the asm.js scope to store it for fast access that avoids the need for a FFI out. + selfThreadId = e.data.selfThreadId; + parentThreadId = e.data.parentThreadId; + // Establish the stack frame for this thread in global scope + STACK_BASE = STACKTOP = e.data.stackBase; + STACK_MAX = STACK_BASE + e.data.stackSize; + // Call inside asm.js/wasm module to set up the stack frame for this pthread in asm.js/wasm module scope + Module['establishStackSpace'](e.data.stackBase, e.data.stackBase + e.data.stackSize); + + PThread.receiveObjectTransfer(e.data); + PThread.setThreadStatus(_pthread_self(), 1/*EM_THREAD_STATUS_RUNNING*/); + + try { + // pthread entry points are always of signature 'void *ThreadMain(void *arg)' + // Native codebases sometimes spawn threads with other thread entry point signatures, + // such as void ThreadMain(void *arg), void *ThreadMain(), or void ThreadMain(). + // That is not acceptable per C/C++ specification, but x86 compiler ABI extensions + // enable that to work. If you find the following line to crash, either change the signature + // to "proper" void *ThreadMain(void *arg) form, or try linking with the Emscripten linker + // flag -s EMULATE_FUNCTION_POINTER_CASTS=1 to add in emulation for this x86 ABI extension. + var result = Module['dynCall_ii'](e.data.start_routine, e.data.arg); + + + } catch(e) { + if (e === 'Canceled!') { + PThread.threadCancel(); + return; + } else if (e === 'SimulateInfiniteLoop' || e === 'pthread_exit') { + return; + } else { + Atomics.store(HEAPU32, (threadInfoStruct + 4 /*C_STRUCTS.pthread.threadExitCode*/ ) >> 2, (e instanceof ExitStatus) ? e.status : -2 /*A custom entry specific to Emscripten denoting that the thread crashed.*/); + Atomics.store(HEAPU32, (threadInfoStruct + 0 /*C_STRUCTS.pthread.threadStatus*/ ) >> 2, 1); // Mark the thread as no longer running. + _emscripten_futex_wake(threadInfoStruct + 0 /*C_STRUCTS.pthread.threadStatus*/, 0x7FFFFFFF/*INT_MAX*/); // Wake all threads waiting on this thread to finish. + if (!(e instanceof ExitStatus)) throw e; + } + } + // The thread might have finished without calling pthread_exit(). If so, then perform the exit operation ourselves. + // (This is a no-op if explicit pthread_exit() had been called prior.) + if (!Module['noExitRuntime']) PThread.threadExit(result); + } else if (e.data.cmd === 'cancel') { // Main thread is asking for a pthread_cancel() on this thread. + if (threadInfoStruct && PThread.thisThreadCancelState == 0/*PTHREAD_CANCEL_ENABLE*/) { + PThread.threadCancel(); + } + } else if (e.data.target === 'setimmediate') { + // no-op + } else if (e.data.cmd === 'processThreadQueue') { + if (threadInfoStruct) { // If this thread is actually running? + _emscripten_current_thread_process_queued_calls(); + } + } else { + err('worker.js received unknown command ' + e.data.cmd); + console.error(e.data); + } + } catch(e) { + console.error('worker.js onmessage() captured an uncaught exception: ' + e); + console.error(e.stack); + throw e; + } +} + + diff --git a/examples/web/physac/physics_movement.c b/examples/web/physac/physics_movement.c index 70078b0..d7a2f7d 100644 --- a/examples/web/physac/physics_movement.c +++ b/examples/web/physac/physics_movement.c @@ -7,9 +7,9 @@ * * Use the following line to compile: * -* gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread +* gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread * -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition -* +* * Copyright (c) 2017 Victor Fisac * ********************************************************************************************/ @@ -28,14 +28,14 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Physac logo drawing position int logoX = 0; int logoY = 15; -PhysicsBody body; +PhysicsBody body = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -43,9 +43,9 @@ PhysicsBody body; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -76,13 +76,13 @@ int main() body = CreatePhysicsBodyRectangle((Vector2){ screenWidth/2, screenHeight/2 }, 50, 50, 1); body->freezeOrient = true; // Constrain body rotation to avoid little collision torque amounts - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -91,7 +91,7 @@ int main() #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- ClosePhysics(); // Uninitialize physics CloseWindow(); // Close window and OpenGL context diff --git a/examples/web/physac/physics_movement.html b/examples/web/physac/physics_movement.html new file mode 100644 index 0000000..09156ae --- /dev/null +++ b/examples/web/physac/physics_movement.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/physac/physics_movement.html.mem b/examples/web/physac/physics_movement.html.mem new file mode 100644 index 0000000..fc90d95 Binary files /dev/null and b/examples/web/physac/physics_movement.html.mem differ diff --git a/examples/web/physac/physics_movement.js b/examples/web/physac/physics_movement.js new file mode 100644 index 0000000..078167e --- /dev/null +++ b/examples/web/physac/physics_movement.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(typeof ENVIRONMENT_IS_PTHREAD==="undefined"){ENVIRONMENT_IS_PTHREAD=false;var PthreadWorkerInit={}}var _scriptDir=typeof document!=="undefined"&&document.currentScript?document.currentScript.src:undefined;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var GLOBAL_BASE=1024;if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var wasmModule;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx)){var u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}if(!ENVIRONMENT_IS_PTHREAD){var DYNAMIC_BASE=5290896,DYNAMICTOP_PTR=47984}var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;if(ENVIRONMENT_IS_PTHREAD)runtimeInitialized=true;function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;if(runtimeInitialized)return;runtimeInitialized=true;__register_pthread_ptr(PThread.mainThreadBlock,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(PThread.mainThreadBlock);if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){if(ENVIRONMENT_IS_PTHREAD)return;FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;runtimeExited=true}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){assert(!ENVIRONMENT_IS_PTHREAD,"addRunDependency cannot be used in a pthread worker");runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="physics_movement.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD)removeRunDependency("wasm-instantiate")}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency("wasm-instantiate")}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"],output["module"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":607,"maximum":607,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};var ASM_CONSTS=[function(){console.error("emscripten_webgl_create_context: attributes pointer is null!")},function(){postMessage({cmd:"processQueuedMainThreadWork"})},function($0){if(!ENVIRONMENT_IS_PTHREAD){if(!PThread.pthreads[$0]||!PThread.pthreads[$0].worker){return 0}PThread.pthreads[$0].worker.postMessage({cmd:"processThreadQueue"})}else{postMessage({targetThread:$0,cmd:"processThreadQueue"})}return 1},function(){return!!Module["canvas"]},function(){Module["noExitRuntime"]=true},function(){throw"Canceled!"}];function _emscripten_asm_const_i(code){return ASM_CONSTS[code]()}function _emscripten_asm_const_ii(code,a0){return ASM_CONSTS[code](a0)}if(!ENVIRONMENT_IS_PTHREAD)__ATINIT__.push({func:function(){___emscripten_pthread_data_constructor()}});if(!ENVIRONMENT_IS_PTHREAD){memoryInitializer="physics_movement.html.mem"}var tempDoublePtr;if(!ENVIRONMENT_IS_PTHREAD)tempDoublePtr=48e3;function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var PROCINFO={ppid:1,pid:42,sid:42,pgid:42};var PThread={MAIN_THREAD_ID:1,mainThreadInfo:{schedPolicy:0,schedPrio:0},unusedWorkerPool:[],runningWorkers:[],initMainThreadBlock:function(){if(ENVIRONMENT_IS_PTHREAD)return undefined;PThread.mainThreadBlock=47184;for(var i=0;i<244/4;++i)HEAPU32[PThread.mainThreadBlock/4+i]=0;HEAP32[PThread.mainThreadBlock+24>>2]=PThread.mainThreadBlock;var headPtr=PThread.mainThreadBlock+168;HEAP32[headPtr>>2]=headPtr;var tlsMemory=47440;for(var i=0;i<128;++i)HEAPU32[tlsMemory/4+i]=0;Atomics.store(HEAPU32,PThread.mainThreadBlock+116>>2,tlsMemory);Atomics.store(HEAPU32,PThread.mainThreadBlock+52>>2,PThread.mainThreadBlock);Atomics.store(HEAPU32,PThread.mainThreadBlock+56>>2,PROCINFO.pid)},pthreads:{},pthreadIdCounter:2,exitHandlers:null,setThreadStatus:function(){},runExitHandlers:function(){if(PThread.exitHandlers!==null){while(PThread.exitHandlers.length>0){PThread.exitHandlers.pop()()}PThread.exitHandlers=null}if(ENVIRONMENT_IS_PTHREAD&&threadInfoStruct)___pthread_tsd_run_dtors()},threadExit:function(exitCode){var tb=_pthread_self();if(tb){Atomics.store(HEAPU32,tb+4>>2,exitCode);Atomics.store(HEAPU32,tb+0>>2,1);Atomics.store(HEAPU32,tb+72>>2,1);Atomics.store(HEAPU32,tb+76>>2,0);PThread.runExitHandlers();_emscripten_futex_wake(tb+0,2147483647);__register_pthread_ptr(0,0,0);threadInfoStruct=0;if(ENVIRONMENT_IS_PTHREAD){postMessage({cmd:"exit"})}}},threadCancel:function(){PThread.runExitHandlers();Atomics.store(HEAPU32,threadInfoStruct+4>>2,-1);Atomics.store(HEAPU32,threadInfoStruct+0>>2,1);_emscripten_futex_wake(threadInfoStruct+0,2147483647);threadInfoStruct=selfThreadId=0;__register_pthread_ptr(0,0,0);postMessage({cmd:"cancelDone"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.pthreads={};for(var t in PThread.unusedWorkerPool){var pthread=PThread.unusedWorkerPool[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.unusedWorkerPool=[];for(var t in PThread.runningWorkers){var pthread=PThread.runningWorkers[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.runningWorkers=[]},freeThreadData:function(pthread){if(!pthread)return;if(pthread.threadInfoStruct){var tlsMemory=HEAP32[pthread.threadInfoStruct+116>>2];HEAP32[pthread.threadInfoStruct+116>>2]=0;_free(pthread.tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},receiveObjectTransfer:function(data){},allocateUnusedWorkers:function(numWorkers,onFinishedLoading){if(typeof SharedArrayBuffer==="undefined")return;var numWorkersLoaded=0;var pthreadMainJs="physics_movement.worker.js";pthreadMainJs=locateFile(pthreadMainJs);for(var i=0;i0)return PThread.unusedWorkerPool.pop();else return null},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>2]=value;return value}function ___lock(){}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,which,varargs);SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(7,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(8,1,name_);return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i>2]=eventTypeId;HEAP32[varargs+4>>2]=eventData;HEAP32[varargs+8>>2]=userData;_emscripten_async_queue_on_thread_(targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(9,1);JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}var __main_thread_futex_wait_address;if(ENVIRONMENT_IS_PTHREAD)__main_thread_futex_wait_address=PthreadWorkerInit.__main_thread_futex_wait_address;else PthreadWorkerInit.__main_thread_futex_wait_address=__main_thread_futex_wait_address=47968;function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>HEAP8.length||addr&3!=0)return-22;if(ENVIRONMENT_IS_WORKER){var ret=Atomics.wait(HEAP32,addr>>2,val,timeout);if(ret==="timed-out")return-110;if(ret==="not-equal")return-11;if(ret==="ok")return 0;throw"Atomics.wait returned an unexpected value "+ret}else{var loadedVal=Atomics.load(HEAP32,addr>>2);if(val!=loadedVal)return-11;var tNow=performance.now();var tEnd=tNow+timeout;Atomics.store(HEAP32,__main_thread_futex_wait_address>>2,addr);var ourWaitAddress=addr;while(addr==ourWaitAddress){tNow=performance.now();if(tNow>tEnd){return-110}_emscripten_main_thread_process_queued_calls();addr=Atomics.load(HEAP32,__main_thread_futex_wait_address>>2)}return 0}}function _emscripten_futex_wake(addr,count){if(addr<=0||addr>HEAP8.length||addr&3!=0||count<0)return-22;if(count==0)return 0;var mainThreadWaitAddress=Atomics.load(HEAP32,__main_thread_futex_wait_address>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(HEAP32,__main_thread_futex_wait_address>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(HEAP32,addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw"Atomics.notify returned an unexpected value "+ret}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(10,1,index,gamepadState);if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(11,1);return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(12,1,pointerlockStatus);if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);HEAP32[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArrays(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstanced(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffers(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstanced(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArray(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisor(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_has_threading_support(){return typeof SharedArrayBuffer!=="undefined"}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var buffer=stackAlloc(numCallArgs*8);for(var i=0;i>3)+i]=arguments[2+i]}var ret=_emscripten_run_in_main_runtime_thread_js(index,numCallArgs,buffer,sync);stackRestore(stack);return ret}function _emscripten_receive_on_main_thread_js(index,numCallArgs,buffer){if(!_emscripten_receive_on_main_thread_js.callArgs){_emscripten_receive_on_main_thread_js.callArgs=[]}var callArgs=_emscripten_receive_on_main_thread_js.callArgs;callArgs.length=numCallArgs;for(var i=0;i>3)+i]}var func;if(index>0){func=proxiedFunctionTable[index]}else{func=ASM_CONSTS[-index-1]}return func.apply(null,callArgs)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(13,1,target,deferUntilInEventHandler);if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(14,1);return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}HEAP32[varargs>>2]=targetCanvasPtr;HEAP32[varargs+4>>2]=width;HEAP32[varargs+8>>2]=height;_emscripten_async_queue_on_thread_(targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):"";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}function __findCanvasEventTarget(target){if(typeof target==="number")target=UTF8ToString(target);if(!target||target==="#canvas"){if(typeof GL!=="undefined"&&GL.offscreenCanvases["canvas"])return GL.offscreenCanvases["canvas"];return Module["canvas"]}if(typeof GL!=="undefined"&&GL.offscreenCanvases[target])return GL.offscreenCanvases[target];return __findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=__findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){HEAP32[canvas.canvasSharedPtr>>2]=width;HEAP32[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(canvas.GLctxObject.GLctx.VIEWPORT);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=HEAP32[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(15,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=__findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(targetThread){var mouseEventData=_malloc(72);__fillMouseEventData(mouseEventData,e,target);JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,mouseEventData,userData)}else if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(16,1,target,userData,useCapture,callbackfunc,targetThread);__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=targetThread?_malloc(280):JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,fullscreenChangeEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(17,1,target,userData,useCapture,callbackfunc,targetThread);if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=targetThread?_malloc(1432):JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,gamepadEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(18,1,userData,useCapture,callbackfunc,targetThread);if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(19,1,userData,useCapture,callbackfunc,targetThread);if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=targetThread?_malloc(164):JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,keyEventData,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(20,1,target,userData,useCapture,callbackfunc,targetThread);__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,touchEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(21,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(22,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(23,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(24,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_supports_offscreencanvas(){return 0}function _emscripten_syscall(which,varargs){switch(which){case 140:return ___syscall140(which,varargs);case 145:return ___syscall145(which,varargs);case 146:return ___syscall146(which,varargs);case 221:return ___syscall221(which,varargs);case 5:return ___syscall5(which,varargs);case 54:return ___syscall54(which,varargs);case 6:return ___syscall6(which,varargs);default:throw"surprising proxied syscall: "+which}}function _emscripten_webgl_do_commit_frame(){if(!GL.currentContext||!GL.currentContext.GLctx){return-3}if(!GL.currentContext.GLctx.commit){return-1}if(!GL.currentContext.attributes.explicitSwapControl){return-3}GL.currentContext.GLctx.commit();return 0}var __emscripten_webgl_power_preferences=["default","low-power","high-performance"];function _emscripten_webgl_do_create_context(target,attributes){var contextAttributes={};var a=attributes>>2;contextAttributes["alpha"]=!!HEAP32[a+(0>>2)];contextAttributes["depth"]=!!HEAP32[a+(4>>2)];contextAttributes["stencil"]=!!HEAP32[a+(8>>2)];contextAttributes["antialias"]=!!HEAP32[a+(12>>2)];contextAttributes["premultipliedAlpha"]=!!HEAP32[a+(16>>2)];contextAttributes["preserveDrawingBuffer"]=!!HEAP32[a+(20>>2)];var powerPreference=HEAP32[a+(24>>2)];contextAttributes["powerPreference"]=__emscripten_webgl_power_preferences[powerPreference];contextAttributes["failIfMajorPerformanceCaveat"]=!!HEAP32[a+(28>>2)];contextAttributes.majorVersion=HEAP32[a+(32>>2)];contextAttributes.minorVersion=HEAP32[a+(36>>2)];contextAttributes.enableExtensionsByDefault=HEAP32[a+(40>>2)];contextAttributes.explicitSwapControl=HEAP32[a+(44>>2)];contextAttributes.proxyContextToMainThread=HEAP32[a+(48>>2)];contextAttributes.renderViaOffscreenBackBuffer=HEAP32[a+(52>>2)];var canvas=__findCanvasEventTarget(target);if(ENVIRONMENT_IS_PTHREAD){if(contextAttributes.proxyContextToMainThread===2||!canvas&&contextAttributes.proxyContextToMainThread===1){if(typeof OffscreenCanvas==="undefined"){HEAP32[attributes+52>>2]=1;HEAP32[attributes+20>>2]=1}return _emscripten_sync_run_in_main_thread_2(622854144,target,attributes)}}if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _exit(status){exit(status)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2]=0}var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,thread:threadParams.pthread_ptr,threadInfoStruct:threadParams.pthread_ptr};Atomics.store(HEAPU32,pthread.threadInfoStruct+0>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+4>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+20>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+80>>2,threadParams.detached);Atomics.store(HEAPU32,pthread.threadInfoStruct+116>>2,tlsMemory);Atomics.store(HEAPU32,pthread.threadInfoStruct+60>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+52>>2,pthread.threadInfoStruct);Atomics.store(HEAPU32,pthread.threadInfoStruct+56>>2,PROCINFO.pid);Atomics.store(HEAPU32,pthread.threadInfoStruct+120>>2,threadParams.stackSize);Atomics.store(HEAPU32,pthread.threadInfoStruct+96>>2,threadParams.stackSize);Atomics.store(HEAPU32,pthread.threadInfoStruct+92>>2,threadParams.stackBase);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+8>>2,threadParams.stackBase);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+12>>2,threadParams.detached);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+20>>2,threadParams.schedPolicy);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+24>>2,threadParams.schedPrio);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(HEAPU32,pthread.threadInfoStruct+188>>2,global_locale);worker.pthread=pthread;var msg={cmd:"run",start_routine:threadParams.startRoutine,arg:threadParams.arg,threadInfoStruct:threadParams.pthread_ptr,selfThreadId:threadParams.pthread_ptr,parentThreadId:threadParams.parent_pthread_ptr,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}}function _pthread_getschedparam(thread,policy,schedparam){if(!policy&&!schedparam)return ERRNO_CODES.EINVAL;if(!thread){err("pthread_getschedparam called with a null thread pointer!");return ERRNO_CODES.ESRCH}var self=HEAP32[thread+24>>2];if(self!=thread){err("pthread_getschedparam attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var schedPolicy=Atomics.load(HEAPU32,thread+120+20>>2);var schedPrio=Atomics.load(HEAPU32,thread+120+24>>2);if(policy)HEAP32[policy>>2]=schedPolicy;if(schedparam)HEAP32[schedparam>>2]=schedPrio;return 0}function _pthread_create(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer==="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 11}if(!pthread_ptr){err("pthread_create called with a null thread pointer!");return 22}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length==0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;var schedPolicy=0;var schedPrio=0;if(attr){stackSize=HEAP32[attr>>2];stackSize+=81920;stackBase=HEAP32[attr+8>>2];detached=HEAP32[attr+12>>2]!=0;var inheritSched=HEAP32[attr+16>>2]==0;if(inheritSched){var prevSchedPolicy=HEAP32[attr+20>>2];var prevSchedPrio=HEAP32[attr+24>>2];var parentThreadPtr=PThread.currentProxiedOperationCallerThread?PThread.currentProxiedOperationCallerThread:_pthread_self();_pthread_getschedparam(parentThreadPtr,attr+20,attr+24);schedPolicy=HEAP32[attr+20>>2];schedPrio=HEAP32[attr+24>>2];HEAP32[attr+20>>2]=prevSchedPolicy;HEAP32[attr+24>>2]=prevSchedPrio}else{schedPolicy=HEAP32[attr+20>>2];schedPrio=HEAP32[attr+24>>2]}}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_malloc(stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(244);for(var i=0;i<244>>2;++i)HEAPU32[(threadInfoStruct>>2)+i]=0;HEAP32[pthread_ptr>>2]=threadInfoStruct;HEAP32[threadInfoStruct+24>>2]=threadInfoStruct;var headPtr=threadInfoStruct+168;HEAP32[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,schedPolicy:schedPolicy,schedPrio:schedPrio,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,parent_pthread_ptr:_pthread_self(),arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList)}else{__spawn_thread(threadParams)}return 0}function __cleanup_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! _cleanup_thread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in _cleanup_thread!";HEAP32[pthread_ptr+24>>2]=0;var pthread=PThread.pthreads[pthread_ptr];var worker=pthread.worker;PThread.freeThreadData(pthread);worker.pthread=undefined;PThread.unusedWorkerPool.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker.pthread),1)}function __pthread_testcancel_js(){if(!ENVIRONMENT_IS_PTHREAD)return;if(!threadInfoStruct)return;var cancelDisabled=Atomics.load(HEAPU32,threadInfoStruct+72>>2);if(cancelDisabled)return;var canceled=Atomics.load(HEAPU32,threadInfoStruct+0>>2);if(canceled==2)throw"Canceled!"}function _pthread_join(thread,status){if(!thread){err("pthread_join attempted on a null thread pointer!");return ERRNO_CODES.ESRCH}if(ENVIRONMENT_IS_PTHREAD&&selfThreadId==thread){err("PThread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}else if(!ENVIRONMENT_IS_PTHREAD&&PThread.mainThreadBlock==thread){err("Main thread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}var self=HEAP32[thread+24>>2];if(self!=thread){err("pthread_join attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var detached=Atomics.load(HEAPU32,thread+80>>2);if(detached){err("Attempted to join thread "+thread+", which was already detached!");return ERRNO_CODES.EINVAL}for(;;){var threadStatus=Atomics.load(HEAPU32,thread+0>>2);if(threadStatus==1){var threadExitCode=Atomics.load(HEAPU32,thread+4>>2);if(status)HEAP32[status>>2]=threadExitCode;Atomics.store(HEAPU32,thread+80>>2,1);if(!ENVIRONMENT_IS_PTHREAD)__cleanup_thread(thread);else postMessage({cmd:"cleanupThread",thread:thread});return 0}__pthread_testcancel_js();if(!ENVIRONMENT_IS_PTHREAD)_emscripten_main_thread_process_queued_calls();_emscripten_futex_wait(thread+0,threadStatus,ENVIRONMENT_IS_PTHREAD?100:1)}}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(ENVIRONMENT_IS_PTHREAD){_emscripten_get_now=function(){return performance["now"]()-__performance_now_clock_drift}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));var proxiedFunctionTable=[null,___syscall140,___syscall145,___syscall146,___syscall221,___syscall5,___syscall54,___syscall6,_eglGetProcAddress,_emscripten_exit_pointerlock,_emscripten_get_gamepad_status,_emscripten_get_num_gamepads,_emscripten_get_pointerlock_status,_emscripten_request_pointerlock,_emscripten_sample_gamepad_data,_emscripten_set_canvas_element_size_main_thread,_emscripten_set_click_callback_on_thread,_emscripten_set_fullscreenchange_callback_on_thread,_emscripten_set_gamepadconnected_callback_on_thread,_emscripten_set_gamepaddisconnected_callback_on_thread,_emscripten_set_keypress_callback_on_thread,_emscripten_set_touchcancel_callback_on_thread,_emscripten_set_touchend_callback_on_thread,_emscripten_set_touchmove_callback_on_thread,_emscripten_set_touchstart_callback_on_thread];function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"g":setTempRet0,"b":___assert_fail,"n":___call_main,"Hc":___lock,"xa":___setErrNo,"Gc":___syscall140,"Fc":___syscall145,"U":___syscall146,"j":___syscall221,"Ec":___syscall5,"Dc":___syscall54,"sc":___syscall6,"p":___unlock,"o":_eglGetProcAddress,"i":_emscripten_asm_const_i,"Ad":_emscripten_asm_const_ii,"vb":_emscripten_exit_pointerlock,"f":_emscripten_futex_wait,"h":_emscripten_futex_wake,"ud":_emscripten_get_gamepad_status,"l":_emscripten_get_heap_size,"e":_emscripten_get_now,"Xc":_emscripten_get_num_gamepads,"Sa":_emscripten_get_pointerlock_status,"Na":_emscripten_glActiveTexture,"Ma":_emscripten_glAttachShader,"La":_emscripten_glBeginQueryEXT,"Ka":_emscripten_glBindAttribLocation,"Ja":_emscripten_glBindBuffer,"Ia":_emscripten_glBindFramebuffer,"Ha":_emscripten_glBindRenderbuffer,"Ga":_emscripten_glBindTexture,"Fa":_emscripten_glBindVertexArray,"Ea":_emscripten_glBlendColor,"Da":_emscripten_glBlendEquation,"Ca":_emscripten_glBlendEquationSeparate,"Ba":_emscripten_glBlendFunc,"Aa":_emscripten_glBlendFuncSeparate,"za":_emscripten_glBufferData,"ya":_emscripten_glBufferSubData,"wa":_emscripten_glCheckFramebufferStatus,"va":_emscripten_glClear,"ua":_emscripten_glClearColor,"ta":_emscripten_glClearDepthf,"sa":_emscripten_glClearStencil,"ra":_emscripten_glColorMask,"qa":_emscripten_glCompileShader,"pa":_emscripten_glCompressedTexImage2D,"oa":_emscripten_glCompressedTexSubImage2D,"na":_emscripten_glCopyTexImage2D,"ma":_emscripten_glCopyTexSubImage2D,"la":_emscripten_glCreateProgram,"ka":_emscripten_glCreateShader,"ja":_emscripten_glCullFace,"ia":_emscripten_glDeleteBuffers,"ha":_emscripten_glDeleteFramebuffers,"ga":_emscripten_glDeleteProgram,"fa":_emscripten_glDeleteQueriesEXT,"ea":_emscripten_glDeleteRenderbuffers,"da":_emscripten_glDeleteShader,"ca":_emscripten_glDeleteTextures,"ba":_emscripten_glDeleteVertexArrays,"aa":_emscripten_glDepthFunc,"$":_emscripten_glDepthMask,"_":_emscripten_glDepthRangef,"Z":_emscripten_glDetachShader,"Y":_emscripten_glDisable,"X":_emscripten_glDisableVertexAttribArray,"W":_emscripten_glDrawArrays,"V":_emscripten_glDrawArraysInstanced,"T":_emscripten_glDrawBuffers,"S":_emscripten_glDrawElements,"R":_emscripten_glDrawElementsInstanced,"Q":_emscripten_glEnable,"P":_emscripten_glEnableVertexAttribArray,"O":_emscripten_glEndQueryEXT,"N":_emscripten_glFinish,"M":_emscripten_glFlush,"L":_emscripten_glFramebufferRenderbuffer,"K":_emscripten_glFramebufferTexture2D,"J":_emscripten_glFrontFace,"I":_emscripten_glGenBuffers,"H":_emscripten_glGenFramebuffers,"G":_emscripten_glGenQueriesEXT,"F":_emscripten_glGenRenderbuffers,"E":_emscripten_glGenTextures,"D":_emscripten_glGenVertexArrays,"C":_emscripten_glGenerateMipmap,"B":_emscripten_glGetActiveAttrib,"A":_emscripten_glGetActiveUniform,"z":_emscripten_glGetAttachedShaders,"y":_emscripten_glGetAttribLocation,"x":_emscripten_glGetBooleanv,"w":_emscripten_glGetBufferParameteriv,"v":_emscripten_glGetError,"u":_emscripten_glGetFloatv,"t":_emscripten_glGetFramebufferAttachmentParameteriv,"s":_emscripten_glGetIntegerv,"r":_emscripten_glGetProgramInfoLog,"q":_emscripten_glGetProgramiv,"Cc":_emscripten_glGetQueryObjecti64vEXT,"Bc":_emscripten_glGetQueryObjectivEXT,"Ac":_emscripten_glGetQueryObjectui64vEXT,"zc":_emscripten_glGetQueryObjectuivEXT,"yc":_emscripten_glGetQueryivEXT,"xc":_emscripten_glGetRenderbufferParameteriv,"wc":_emscripten_glGetShaderInfoLog,"vc":_emscripten_glGetShaderPrecisionFormat,"uc":_emscripten_glGetShaderSource,"tc":_emscripten_glGetShaderiv,"rc":_emscripten_glGetString,"qc":_emscripten_glGetTexParameterfv,"pc":_emscripten_glGetTexParameteriv,"oc":_emscripten_glGetUniformLocation,"nc":_emscripten_glGetUniformfv,"mc":_emscripten_glGetUniformiv,"lc":_emscripten_glGetVertexAttribPointerv,"kc":_emscripten_glGetVertexAttribfv,"jc":_emscripten_glGetVertexAttribiv,"ic":_emscripten_glHint,"hc":_emscripten_glIsBuffer,"gc":_emscripten_glIsEnabled,"fc":_emscripten_glIsFramebuffer,"ec":_emscripten_glIsProgram,"dc":_emscripten_glIsQueryEXT,"cc":_emscripten_glIsRenderbuffer,"bc":_emscripten_glIsShader,"ac":_emscripten_glIsTexture,"$b":_emscripten_glIsVertexArray,"_b":_emscripten_glLineWidth,"Zb":_emscripten_glLinkProgram,"Yb":_emscripten_glPixelStorei,"Xb":_emscripten_glPolygonOffset,"Wb":_emscripten_glQueryCounterEXT,"Vb":_emscripten_glReadPixels,"Ub":_emscripten_glReleaseShaderCompiler,"Tb":_emscripten_glRenderbufferStorage,"Sb":_emscripten_glSampleCoverage,"Rb":_emscripten_glScissor,"Qb":_emscripten_glShaderBinary,"Pb":_emscripten_glShaderSource,"Ob":_emscripten_glStencilFunc,"Nb":_emscripten_glStencilFuncSeparate,"Mb":_emscripten_glStencilMask,"Lb":_emscripten_glStencilMaskSeparate,"Kb":_emscripten_glStencilOp,"Jb":_emscripten_glStencilOpSeparate,"Ib":_emscripten_glTexImage2D,"Hb":_emscripten_glTexParameterf,"Gb":_emscripten_glTexParameterfv,"Fb":_emscripten_glTexParameteri,"Eb":_emscripten_glTexParameteriv,"Db":_emscripten_glTexSubImage2D,"Cb":_emscripten_glUniform1f,"Bb":_emscripten_glUniform1fv,"Ab":_emscripten_glUniform1i,"zb":_emscripten_glUniform1iv,"yb":_emscripten_glUniform2f,"xb":_emscripten_glUniform2fv,"wb":_emscripten_glUniform2i,"ub":_emscripten_glUniform2iv,"tb":_emscripten_glUniform3f,"sb":_emscripten_glUniform3fv,"rb":_emscripten_glUniform3i,"qb":_emscripten_glUniform3iv,"pb":_emscripten_glUniform4f,"ob":_emscripten_glUniform4fv,"nb":_emscripten_glUniform4i,"mb":_emscripten_glUniform4iv,"lb":_emscripten_glUniformMatrix2fv,"kb":_emscripten_glUniformMatrix3fv,"jb":_emscripten_glUniformMatrix4fv,"ib":_emscripten_glUseProgram,"hb":_emscripten_glValidateProgram,"gb":_emscripten_glVertexAttrib1f,"fb":_emscripten_glVertexAttrib1fv,"eb":_emscripten_glVertexAttrib2f,"db":_emscripten_glVertexAttrib2fv,"cb":_emscripten_glVertexAttrib3f,"bb":_emscripten_glVertexAttrib3fv,"ab":_emscripten_glVertexAttrib4f,"$a":_emscripten_glVertexAttrib4fv,"_a":_emscripten_glVertexAttribDivisor,"Za":_emscripten_glVertexAttribPointer,"Ya":_emscripten_glViewport,"zd":_emscripten_has_threading_support,"yd":_emscripten_memcpy_big,"xd":_emscripten_receive_on_main_thread_js,"wd":_emscripten_request_pointerlock,"vd":_emscripten_resize_heap,"Xa":_emscripten_run_script,"td":_emscripten_sample_gamepad_data,"sd":_emscripten_set_canvas_element_size,"rd":_emscripten_set_click_callback_on_thread,"qd":_emscripten_set_fullscreenchange_callback_on_thread,"pd":_emscripten_set_gamepadconnected_callback_on_thread,"od":_emscripten_set_gamepaddisconnected_callback_on_thread,"nd":_emscripten_set_keypress_callback_on_thread,"md":_emscripten_set_main_loop,"ld":_emscripten_set_touchcancel_callback_on_thread,"kd":_emscripten_set_touchend_callback_on_thread,"jd":_emscripten_set_touchmove_callback_on_thread,"id":_emscripten_set_touchstart_callback_on_thread,"hd":_emscripten_supports_offscreencanvas,"gd":_emscripten_syscall,"Wa":_emscripten_webgl_do_commit_frame,"Va":_emscripten_webgl_do_create_context,"fd":_exit,"Ua":_glfwCreateWindow,"ed":_glfwDefaultWindowHints,"dd":_glfwDestroyWindow,"cd":_glfwGetCursorPos,"bd":_glfwGetKey,"Ta":_glfwGetPrimaryMonitor,"k":_glfwGetTime,"ad":_glfwGetVideoModes,"$c":_glfwInit,"_c":_glfwMakeContextCurrent,"Zc":_glfwSetCharCallback,"Yc":_glfwSetCursorEnterCallback,"Wc":_glfwSetCursorPosCallback,"Vc":_glfwSetDropCallback,"Uc":_glfwSetErrorCallback,"Tc":_glfwSetKeyCallback,"Sc":_glfwSetMouseButtonCallback,"Rc":_glfwSetScrollCallback,"Qc":_glfwSetWindowIconifyCallback,"Pc":_glfwSetWindowShouldClose,"Oc":_glfwSetWindowSizeCallback,"Nc":_glfwSwapBuffers,"Mc":_glfwSwapInterval,"Ra":_glfwTerminate,"d":_glfwWindowHint,"Qa":_llvm_stackrestore,"Pa":_llvm_stacksave,"Lc":_pthread_cleanup_pop,"Kc":_pthread_cleanup_push,"m":_pthread_create,"Jc":_pthread_join,"Oa":_time,"Ic":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___emscripten_pthread_data_constructor=Module["___emscripten_pthread_data_constructor"]=function(){return Module["asm"]["Bd"].apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["Cd"].apply(null,arguments)};var ___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=function(){return Module["asm"]["Dd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_add_u64=Module["__emscripten_atomic_fetch_and_add_u64"]=function(){return Module["asm"]["Ed"].apply(null,arguments)};var __emscripten_atomic_fetch_and_and_u64=Module["__emscripten_atomic_fetch_and_and_u64"]=function(){return Module["asm"]["Fd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_or_u64=Module["__emscripten_atomic_fetch_and_or_u64"]=function(){return Module["asm"]["Gd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_sub_u64=Module["__emscripten_atomic_fetch_and_sub_u64"]=function(){return Module["asm"]["Hd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_xor_u64=Module["__emscripten_atomic_fetch_and_xor_u64"]=function(){return Module["asm"]["Id"].apply(null,arguments)};var __register_pthread_ptr=Module["__register_pthread_ptr"]=function(){return Module["asm"]["Jd"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["Kd"].apply(null,arguments)};var _emscripten_async_queue_call_on_thread=Module["_emscripten_async_queue_call_on_thread"]=function(){return Module["asm"]["Ld"].apply(null,arguments)};var _emscripten_async_queue_on_thread_=Module["_emscripten_async_queue_on_thread_"]=function(){return Module["asm"]["Md"].apply(null,arguments)};var _emscripten_async_run_in_main_thread=Module["_emscripten_async_run_in_main_thread"]=function(){return Module["asm"]["Nd"].apply(null,arguments)};var _emscripten_atomic_add_u64=Module["_emscripten_atomic_add_u64"]=function(){return Module["asm"]["Od"].apply(null,arguments)};var _emscripten_atomic_and_u64=Module["_emscripten_atomic_and_u64"]=function(){return Module["asm"]["Pd"].apply(null,arguments)};var _emscripten_atomic_cas_u64=Module["_emscripten_atomic_cas_u64"]=function(){return Module["asm"]["Qd"].apply(null,arguments)};var _emscripten_atomic_exchange_u64=Module["_emscripten_atomic_exchange_u64"]=function(){return Module["asm"]["Rd"].apply(null,arguments)};var _emscripten_atomic_load_f32=Module["_emscripten_atomic_load_f32"]=function(){return Module["asm"]["Sd"].apply(null,arguments)};var _emscripten_atomic_load_f64=Module["_emscripten_atomic_load_f64"]=function(){return Module["asm"]["Td"].apply(null,arguments)};var _emscripten_atomic_load_u64=Module["_emscripten_atomic_load_u64"]=function(){return Module["asm"]["Ud"].apply(null,arguments)};var _emscripten_atomic_or_u64=Module["_emscripten_atomic_or_u64"]=function(){return Module["asm"]["Vd"].apply(null,arguments)};var _emscripten_atomic_store_f32=Module["_emscripten_atomic_store_f32"]=function(){return Module["asm"]["Wd"].apply(null,arguments)};var _emscripten_atomic_store_f64=Module["_emscripten_atomic_store_f64"]=function(){return Module["asm"]["Xd"].apply(null,arguments)};var _emscripten_atomic_store_u64=Module["_emscripten_atomic_store_u64"]=function(){return Module["asm"]["Yd"].apply(null,arguments)};var _emscripten_atomic_sub_u64=Module["_emscripten_atomic_sub_u64"]=function(){return Module["asm"]["Zd"].apply(null,arguments)};var _emscripten_atomic_xor_u64=Module["_emscripten_atomic_xor_u64"]=function(){return Module["asm"]["_d"].apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=function(){return Module["asm"]["$d"].apply(null,arguments)};var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=function(){return Module["asm"]["ae"].apply(null,arguments)};var _emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=function(){return Module["asm"]["be"].apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=function(){return Module["asm"]["ce"].apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread=Module["_emscripten_sync_run_in_main_thread"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_0=Module["_emscripten_sync_run_in_main_thread_0"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_1=Module["_emscripten_sync_run_in_main_thread_1"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_2=Module["_emscripten_sync_run_in_main_thread_2"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_3=Module["_emscripten_sync_run_in_main_thread_3"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_5=Module["_emscripten_sync_run_in_main_thread_5"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_6=Module["_emscripten_sync_run_in_main_thread_6"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_7=Module["_emscripten_sync_run_in_main_thread_7"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_xprintf_varargs=Module["_emscripten_sync_run_in_main_thread_xprintf_varargs"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var _emscripten_webgl_commit_frame=Module["_emscripten_webgl_commit_frame"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var _proxy_main=Module["_proxy_main"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var _pthread_self=Module["_pthread_self"]=function(){return Module["asm"]["we"].apply(null,arguments)};var establishStackSpace=Module["establishStackSpace"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["He"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Ie"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Je"].apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["De"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};Module["asm"]=asm;Module["establishStackSpace"]=establishStackSpace;Module["dynCall_ii"]=dynCall_ii;if(memoryInitializer&&!ENVIRONMENT_IS_PTHREAD){if(!isDataURI(memoryInitializer)){memoryInitializer=locateFile(memoryInitializer)}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module["memoryInitializerRequest"])delete Module["memoryInitializerRequest"].response;removeRunDependency("memory initializer")};var doBrowserLoad=function(){Module["readAsync"](memoryInitializer,applyMemoryInitializer,function(){throw"could not load memory initializer "+memoryInitializer})};if(Module["memoryInitializerRequest"]){var useRequest=function(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}applyMemoryInitializer(response)};if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{PThread.terminateAllThreads();ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(ENVIRONMENT_IS_PTHREAD)console.error("Pthread aborting at "+(new Error).stack);if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}if(!ENVIRONMENT_IS_PTHREAD)Module["noExitRuntime"]=true;if(!ENVIRONMENT_IS_PTHREAD)run(); diff --git a/examples/web/physac/physics_movement.wasm b/examples/web/physac/physics_movement.wasm new file mode 100644 index 0000000..87b234f Binary files /dev/null and b/examples/web/physac/physics_movement.wasm differ diff --git a/examples/web/physac/physics_movement.worker.js b/examples/web/physac/physics_movement.worker.js new file mode 100644 index 0000000..3878b57 --- /dev/null +++ b/examples/web/physac/physics_movement.worker.js @@ -0,0 +1,184 @@ +// Copyright 2015 The Emscripten Authors. All rights reserved. +// Emscripten is available under two separate licenses, the MIT license and the +// University of Illinois/NCSA Open Source License. Both these licenses can be +// found in the LICENSE file. + +// Pthread Web Worker startup routine: +// This is the entry point file that is loaded first by each Web Worker +// that executes pthreads on the Emscripten application. + +// Thread-local: +var threadInfoStruct = 0; // Info area for this thread in Emscripten HEAP (shared). If zero, this worker is not currently hosting an executing pthread. +var selfThreadId = 0; // The ID of this thread. 0 if not hosting a pthread. +var parentThreadId = 0; // The ID of the parent pthread that launched this thread. +var tempDoublePtr = 0; // A temporary memory area for global float and double marshalling operations. + +// Thread-local: Each thread has its own allocated stack space. +var STACK_BASE = 0; +var STACKTOP = 0; +var STACK_MAX = 0; + +// These are system-wide memory area parameters that are set at main runtime startup in main thread, and stay constant throughout the application. +var buffer; // All pthreads share the same Emscripten HEAP as SharedArrayBuffer with the main execution thread. +var DYNAMICTOP_PTR = 0; +var DYNAMIC_BASE = 0; + +var ENVIRONMENT_IS_PTHREAD = true; +var PthreadWorkerInit = {}; + +// performance.now() is specced to return a wallclock time in msecs since that Web Worker/main thread launched. However for pthreads this can cause +// subtle problems in emscripten_get_now() as this essentially would measure time from pthread_create(), meaning that the clocks between each threads +// would be wildly out of sync. Therefore sync all pthreads to the clock on the main browser thread, so that different threads see a somewhat +// coherent clock across each of them (+/- 0.1msecs in testing) +var __performance_now_clock_drift = 0; + +// Cannot use console.log or console.error in a web worker, since that would risk a browser deadlock! https://bugzilla.mozilla.org/show_bug.cgi?id=1049091 +// Therefore implement custom logging facility for threads running in a worker, which queue the messages to main thread to print. +var Module = {}; + + +// When error objects propagate from Web Worker to main thread, they lose helpful call stack and thread ID information, so print out errors early here, +// before that happens. +this.addEventListener('error', function(e) { + if (e.message.indexOf('SimulateInfiniteLoop') != -1) return e.preventDefault(); + + var errorSource = ' in ' + e.filename + ':' + e.lineno + ':' + e.colno; + console.error('Pthread ' + selfThreadId + ' uncaught exception' + (e.filename || e.lineno || e.colno ? errorSource : "") + ': ' + e.message + '. Error object:'); + console.error(e.error); +}); + +function threadPrint() { + var text = Array.prototype.slice.call(arguments).join(' '); + console.log(text); +} +function threadPrintErr() { + var text = Array.prototype.slice.call(arguments).join(' '); + console.error(text); + console.error(new Error().stack); +} +function threadAlert() { + var text = Array.prototype.slice.call(arguments).join(' '); + postMessage({cmd: 'alert', text: text, threadId: selfThreadId}); +} +out = threadPrint; +err = threadPrintErr; +this.alert = threadAlert; + +Module['instantiateWasm'] = function(info, receiveInstance) { + // Instantiate from the module posted from the main thread. + // We can just use sync instantiation in the worker. + instance = new WebAssembly.Instance(wasmModule, info); + // We don't need the module anymore; new threads will be spawned from the main thread. + wasmModule = null; + receiveInstance(instance); // The second 'module' parameter is intentionally null here, we don't need to keep a ref to the Module object from here. + return instance.exports; +} + +var wasmModule; +var wasmMemory; + +this.onmessage = function(e) { + try { + if (e.data.cmd === 'load') { // Preload command that is called once per worker to parse and load the Emscripten code. + // Initialize the thread-local field(s): + tempDoublePtr = e.data.tempDoublePtr; + + // Initialize the global "process"-wide fields: + DYNAMIC_BASE = e.data.DYNAMIC_BASE; + DYNAMICTOP_PTR = e.data.DYNAMICTOP_PTR; + + // The Wasm module will have import fields for STACKTOP and STACK_MAX. At 'load' stage of Worker startup, we are just + // spawning this Web Worker to act as a host for future created pthreads, i.e. we do not have a pthread to start up here yet. + // (A single Worker can also host multiple pthreads throughout its lifetime, shutting down a pthread will not shut down its hosting Worker, + // but the Worker is reused for later spawned pthreads). The 'run' stage below will actually start running a pthread. + // The stack space for a pthread is allocated and deallocated when a pthread is actually run, not yet at Worker 'load' stage. + // However, the WebAssembly module we are loading up here has import fields for STACKTOP and STACK_MAX, which it needs to get filled in + // immediately at Wasm Module instantiation time. The values of these will not get used until pthread is actually running some code, so + // we'll proceed to set up temporary invalid values for these fields for import purposes. Then whenever a pthread is launched at 'run' stage + // below, these values are rewritten to establish proper stack area for the particular pthread. + Module['STACK_MAX'] = Module['STACKTOP'] = 0x7FFFFFFF; + + // Module and memory were sent from main thread + wasmModule = e.data.wasmModule; + wasmMemory = e.data.wasmMemory; + buffer = wasmMemory.buffer; + + PthreadWorkerInit = e.data.PthreadWorkerInit; + + if (typeof e.data.urlOrBlob === 'string') { + importScripts(e.data.urlOrBlob); + } else { + var objectUrl = URL.createObjectURL(e.data.urlOrBlob); + importScripts(objectUrl); + URL.revokeObjectURL(objectUrl); + } + + + if (typeof FS !== 'undefined' && typeof FS.createStandardStreams === 'function') FS.createStandardStreams(); + postMessage({ cmd: 'loaded' }); + } else if (e.data.cmd === 'objectTransfer') { + PThread.receiveObjectTransfer(e.data); + } else if (e.data.cmd === 'run') { // This worker was idle, and now should start executing its pthread entry point. + __performance_now_clock_drift = performance.now() - e.data.time; // Sync up to the clock of the main thread. + threadInfoStruct = e.data.threadInfoStruct; + __register_pthread_ptr(threadInfoStruct, /*isMainBrowserThread=*/0, /*isMainRuntimeThread=*/0); // Pass the thread address inside the asm.js scope to store it for fast access that avoids the need for a FFI out. + selfThreadId = e.data.selfThreadId; + parentThreadId = e.data.parentThreadId; + // Establish the stack frame for this thread in global scope + STACK_BASE = STACKTOP = e.data.stackBase; + STACK_MAX = STACK_BASE + e.data.stackSize; + // Call inside asm.js/wasm module to set up the stack frame for this pthread in asm.js/wasm module scope + Module['establishStackSpace'](e.data.stackBase, e.data.stackBase + e.data.stackSize); + + PThread.receiveObjectTransfer(e.data); + PThread.setThreadStatus(_pthread_self(), 1/*EM_THREAD_STATUS_RUNNING*/); + + try { + // pthread entry points are always of signature 'void *ThreadMain(void *arg)' + // Native codebases sometimes spawn threads with other thread entry point signatures, + // such as void ThreadMain(void *arg), void *ThreadMain(), or void ThreadMain(). + // That is not acceptable per C/C++ specification, but x86 compiler ABI extensions + // enable that to work. If you find the following line to crash, either change the signature + // to "proper" void *ThreadMain(void *arg) form, or try linking with the Emscripten linker + // flag -s EMULATE_FUNCTION_POINTER_CASTS=1 to add in emulation for this x86 ABI extension. + var result = Module['dynCall_ii'](e.data.start_routine, e.data.arg); + + + } catch(e) { + if (e === 'Canceled!') { + PThread.threadCancel(); + return; + } else if (e === 'SimulateInfiniteLoop' || e === 'pthread_exit') { + return; + } else { + Atomics.store(HEAPU32, (threadInfoStruct + 4 /*C_STRUCTS.pthread.threadExitCode*/ ) >> 2, (e instanceof ExitStatus) ? e.status : -2 /*A custom entry specific to Emscripten denoting that the thread crashed.*/); + Atomics.store(HEAPU32, (threadInfoStruct + 0 /*C_STRUCTS.pthread.threadStatus*/ ) >> 2, 1); // Mark the thread as no longer running. + _emscripten_futex_wake(threadInfoStruct + 0 /*C_STRUCTS.pthread.threadStatus*/, 0x7FFFFFFF/*INT_MAX*/); // Wake all threads waiting on this thread to finish. + if (!(e instanceof ExitStatus)) throw e; + } + } + // The thread might have finished without calling pthread_exit(). If so, then perform the exit operation ourselves. + // (This is a no-op if explicit pthread_exit() had been called prior.) + if (!Module['noExitRuntime']) PThread.threadExit(result); + } else if (e.data.cmd === 'cancel') { // Main thread is asking for a pthread_cancel() on this thread. + if (threadInfoStruct && PThread.thisThreadCancelState == 0/*PTHREAD_CANCEL_ENABLE*/) { + PThread.threadCancel(); + } + } else if (e.data.target === 'setimmediate') { + // no-op + } else if (e.data.cmd === 'processThreadQueue') { + if (threadInfoStruct) { // If this thread is actually running? + _emscripten_current_thread_process_queued_calls(); + } + } else { + err('worker.js received unknown command ' + e.data.cmd); + console.error(e.data); + } + } catch(e) { + console.error('worker.js onmessage() captured an uncaught exception: ' + e); + console.error(e.stack); + throw e; + } +} + + diff --git a/examples/web/physac/physics_restitution.c b/examples/web/physac/physics_restitution.c index 70d0a14..15f8b25 100644 --- a/examples/web/physac/physics_restitution.c +++ b/examples/web/physac/physics_restitution.c @@ -7,9 +7,9 @@ * * Use the following line to compile: * -* gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread +* gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread * -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition -* +* * Copyright (c) 2017 Victor Fisac * ********************************************************************************************/ @@ -26,16 +26,16 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Physac logo drawing position int logoX = 0; int logoY = 15; -PhysicsBody circleA; -PhysicsBody circleB; -PhysicsBody circleC; +PhysicsBody circleA = { 0 }; +PhysicsBody circleB = { 0 }; +PhysicsBody circleC = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -43,9 +43,9 @@ PhysicsBody circleC; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -76,7 +76,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -85,7 +85,7 @@ int main() #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- ClosePhysics(); // Uninitialize physics CloseWindow(); // Close window and OpenGL context diff --git a/examples/web/physac/physics_restitution.html b/examples/web/physac/physics_restitution.html new file mode 100644 index 0000000..6c99bc2 --- /dev/null +++ b/examples/web/physac/physics_restitution.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/physac/physics_restitution.html.mem b/examples/web/physac/physics_restitution.html.mem new file mode 100644 index 0000000..0f210d8 Binary files /dev/null and b/examples/web/physac/physics_restitution.html.mem differ diff --git a/examples/web/physac/physics_restitution.js b/examples/web/physac/physics_restitution.js new file mode 100644 index 0000000..17d0d0c --- /dev/null +++ b/examples/web/physac/physics_restitution.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(typeof ENVIRONMENT_IS_PTHREAD==="undefined"){ENVIRONMENT_IS_PTHREAD=false;var PthreadWorkerInit={}}var _scriptDir=typeof document!=="undefined"&&document.currentScript?document.currentScript.src:undefined;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var GLOBAL_BASE=1024;if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var wasmModule;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx)){var u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}if(!ENVIRONMENT_IS_PTHREAD){var DYNAMIC_BASE=5290896,DYNAMICTOP_PTR=47984}var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;if(ENVIRONMENT_IS_PTHREAD)runtimeInitialized=true;function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;if(runtimeInitialized)return;runtimeInitialized=true;__register_pthread_ptr(PThread.mainThreadBlock,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(PThread.mainThreadBlock);if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){if(ENVIRONMENT_IS_PTHREAD)return;FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;runtimeExited=true}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){assert(!ENVIRONMENT_IS_PTHREAD,"addRunDependency cannot be used in a pthread worker");runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="physics_restitution.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD)removeRunDependency("wasm-instantiate")}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency("wasm-instantiate")}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"],output["module"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":607,"maximum":607,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};var ASM_CONSTS=[function(){console.error("emscripten_webgl_create_context: attributes pointer is null!")},function(){postMessage({cmd:"processQueuedMainThreadWork"})},function($0){if(!ENVIRONMENT_IS_PTHREAD){if(!PThread.pthreads[$0]||!PThread.pthreads[$0].worker){return 0}PThread.pthreads[$0].worker.postMessage({cmd:"processThreadQueue"})}else{postMessage({targetThread:$0,cmd:"processThreadQueue"})}return 1},function(){return!!Module["canvas"]},function(){Module["noExitRuntime"]=true},function(){throw"Canceled!"}];function _emscripten_asm_const_i(code){return ASM_CONSTS[code]()}function _emscripten_asm_const_ii(code,a0){return ASM_CONSTS[code](a0)}if(!ENVIRONMENT_IS_PTHREAD)__ATINIT__.push({func:function(){___emscripten_pthread_data_constructor()}});if(!ENVIRONMENT_IS_PTHREAD){memoryInitializer="physics_restitution.html.mem"}var tempDoublePtr;if(!ENVIRONMENT_IS_PTHREAD)tempDoublePtr=48e3;function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var PROCINFO={ppid:1,pid:42,sid:42,pgid:42};var PThread={MAIN_THREAD_ID:1,mainThreadInfo:{schedPolicy:0,schedPrio:0},unusedWorkerPool:[],runningWorkers:[],initMainThreadBlock:function(){if(ENVIRONMENT_IS_PTHREAD)return undefined;PThread.mainThreadBlock=47184;for(var i=0;i<244/4;++i)HEAPU32[PThread.mainThreadBlock/4+i]=0;HEAP32[PThread.mainThreadBlock+24>>2]=PThread.mainThreadBlock;var headPtr=PThread.mainThreadBlock+168;HEAP32[headPtr>>2]=headPtr;var tlsMemory=47440;for(var i=0;i<128;++i)HEAPU32[tlsMemory/4+i]=0;Atomics.store(HEAPU32,PThread.mainThreadBlock+116>>2,tlsMemory);Atomics.store(HEAPU32,PThread.mainThreadBlock+52>>2,PThread.mainThreadBlock);Atomics.store(HEAPU32,PThread.mainThreadBlock+56>>2,PROCINFO.pid)},pthreads:{},pthreadIdCounter:2,exitHandlers:null,setThreadStatus:function(){},runExitHandlers:function(){if(PThread.exitHandlers!==null){while(PThread.exitHandlers.length>0){PThread.exitHandlers.pop()()}PThread.exitHandlers=null}if(ENVIRONMENT_IS_PTHREAD&&threadInfoStruct)___pthread_tsd_run_dtors()},threadExit:function(exitCode){var tb=_pthread_self();if(tb){Atomics.store(HEAPU32,tb+4>>2,exitCode);Atomics.store(HEAPU32,tb+0>>2,1);Atomics.store(HEAPU32,tb+72>>2,1);Atomics.store(HEAPU32,tb+76>>2,0);PThread.runExitHandlers();_emscripten_futex_wake(tb+0,2147483647);__register_pthread_ptr(0,0,0);threadInfoStruct=0;if(ENVIRONMENT_IS_PTHREAD){postMessage({cmd:"exit"})}}},threadCancel:function(){PThread.runExitHandlers();Atomics.store(HEAPU32,threadInfoStruct+4>>2,-1);Atomics.store(HEAPU32,threadInfoStruct+0>>2,1);_emscripten_futex_wake(threadInfoStruct+0,2147483647);threadInfoStruct=selfThreadId=0;__register_pthread_ptr(0,0,0);postMessage({cmd:"cancelDone"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.pthreads={};for(var t in PThread.unusedWorkerPool){var pthread=PThread.unusedWorkerPool[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.unusedWorkerPool=[];for(var t in PThread.runningWorkers){var pthread=PThread.runningWorkers[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.runningWorkers=[]},freeThreadData:function(pthread){if(!pthread)return;if(pthread.threadInfoStruct){var tlsMemory=HEAP32[pthread.threadInfoStruct+116>>2];HEAP32[pthread.threadInfoStruct+116>>2]=0;_free(pthread.tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},receiveObjectTransfer:function(data){},allocateUnusedWorkers:function(numWorkers,onFinishedLoading){if(typeof SharedArrayBuffer==="undefined")return;var numWorkersLoaded=0;var pthreadMainJs="physics_restitution.worker.js";pthreadMainJs=locateFile(pthreadMainJs);for(var i=0;i0)return PThread.unusedWorkerPool.pop();else return null},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>2]=value;return value}function ___lock(){}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,which,varargs);SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(7,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(8,1,name_);return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i>2]=eventTypeId;HEAP32[varargs+4>>2]=eventData;HEAP32[varargs+8>>2]=userData;_emscripten_async_queue_on_thread_(targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(9,1);JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}var __main_thread_futex_wait_address;if(ENVIRONMENT_IS_PTHREAD)__main_thread_futex_wait_address=PthreadWorkerInit.__main_thread_futex_wait_address;else PthreadWorkerInit.__main_thread_futex_wait_address=__main_thread_futex_wait_address=47968;function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>HEAP8.length||addr&3!=0)return-22;if(ENVIRONMENT_IS_WORKER){var ret=Atomics.wait(HEAP32,addr>>2,val,timeout);if(ret==="timed-out")return-110;if(ret==="not-equal")return-11;if(ret==="ok")return 0;throw"Atomics.wait returned an unexpected value "+ret}else{var loadedVal=Atomics.load(HEAP32,addr>>2);if(val!=loadedVal)return-11;var tNow=performance.now();var tEnd=tNow+timeout;Atomics.store(HEAP32,__main_thread_futex_wait_address>>2,addr);var ourWaitAddress=addr;while(addr==ourWaitAddress){tNow=performance.now();if(tNow>tEnd){return-110}_emscripten_main_thread_process_queued_calls();addr=Atomics.load(HEAP32,__main_thread_futex_wait_address>>2)}return 0}}function _emscripten_futex_wake(addr,count){if(addr<=0||addr>HEAP8.length||addr&3!=0||count<0)return-22;if(count==0)return 0;var mainThreadWaitAddress=Atomics.load(HEAP32,__main_thread_futex_wait_address>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(HEAP32,__main_thread_futex_wait_address>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(HEAP32,addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw"Atomics.notify returned an unexpected value "+ret}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(10,1,index,gamepadState);if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(11,1);return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(12,1,pointerlockStatus);if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);HEAP32[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArrays(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstanced(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffers(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstanced(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArray(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisor(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_has_threading_support(){return typeof SharedArrayBuffer!=="undefined"}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var buffer=stackAlloc(numCallArgs*8);for(var i=0;i>3)+i]=arguments[2+i]}var ret=_emscripten_run_in_main_runtime_thread_js(index,numCallArgs,buffer,sync);stackRestore(stack);return ret}function _emscripten_receive_on_main_thread_js(index,numCallArgs,buffer){if(!_emscripten_receive_on_main_thread_js.callArgs){_emscripten_receive_on_main_thread_js.callArgs=[]}var callArgs=_emscripten_receive_on_main_thread_js.callArgs;callArgs.length=numCallArgs;for(var i=0;i>3)+i]}var func;if(index>0){func=proxiedFunctionTable[index]}else{func=ASM_CONSTS[-index-1]}return func.apply(null,callArgs)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(13,1,target,deferUntilInEventHandler);if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(14,1);return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}HEAP32[varargs>>2]=targetCanvasPtr;HEAP32[varargs+4>>2]=width;HEAP32[varargs+8>>2]=height;_emscripten_async_queue_on_thread_(targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):"";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}function __findCanvasEventTarget(target){if(typeof target==="number")target=UTF8ToString(target);if(!target||target==="#canvas"){if(typeof GL!=="undefined"&&GL.offscreenCanvases["canvas"])return GL.offscreenCanvases["canvas"];return Module["canvas"]}if(typeof GL!=="undefined"&&GL.offscreenCanvases[target])return GL.offscreenCanvases[target];return __findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=__findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){HEAP32[canvas.canvasSharedPtr>>2]=width;HEAP32[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(canvas.GLctxObject.GLctx.VIEWPORT);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=HEAP32[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(15,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=__findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(targetThread){var mouseEventData=_malloc(72);__fillMouseEventData(mouseEventData,e,target);JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,mouseEventData,userData)}else if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(16,1,target,userData,useCapture,callbackfunc,targetThread);__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=targetThread?_malloc(280):JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,fullscreenChangeEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(17,1,target,userData,useCapture,callbackfunc,targetThread);if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=targetThread?_malloc(1432):JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,gamepadEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(18,1,userData,useCapture,callbackfunc,targetThread);if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(19,1,userData,useCapture,callbackfunc,targetThread);if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=targetThread?_malloc(164):JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,keyEventData,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(20,1,target,userData,useCapture,callbackfunc,targetThread);__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,touchEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(21,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(22,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(23,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(24,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_supports_offscreencanvas(){return 0}function _emscripten_syscall(which,varargs){switch(which){case 140:return ___syscall140(which,varargs);case 145:return ___syscall145(which,varargs);case 146:return ___syscall146(which,varargs);case 221:return ___syscall221(which,varargs);case 5:return ___syscall5(which,varargs);case 54:return ___syscall54(which,varargs);case 6:return ___syscall6(which,varargs);default:throw"surprising proxied syscall: "+which}}function _emscripten_webgl_do_commit_frame(){if(!GL.currentContext||!GL.currentContext.GLctx){return-3}if(!GL.currentContext.GLctx.commit){return-1}if(!GL.currentContext.attributes.explicitSwapControl){return-3}GL.currentContext.GLctx.commit();return 0}var __emscripten_webgl_power_preferences=["default","low-power","high-performance"];function _emscripten_webgl_do_create_context(target,attributes){var contextAttributes={};var a=attributes>>2;contextAttributes["alpha"]=!!HEAP32[a+(0>>2)];contextAttributes["depth"]=!!HEAP32[a+(4>>2)];contextAttributes["stencil"]=!!HEAP32[a+(8>>2)];contextAttributes["antialias"]=!!HEAP32[a+(12>>2)];contextAttributes["premultipliedAlpha"]=!!HEAP32[a+(16>>2)];contextAttributes["preserveDrawingBuffer"]=!!HEAP32[a+(20>>2)];var powerPreference=HEAP32[a+(24>>2)];contextAttributes["powerPreference"]=__emscripten_webgl_power_preferences[powerPreference];contextAttributes["failIfMajorPerformanceCaveat"]=!!HEAP32[a+(28>>2)];contextAttributes.majorVersion=HEAP32[a+(32>>2)];contextAttributes.minorVersion=HEAP32[a+(36>>2)];contextAttributes.enableExtensionsByDefault=HEAP32[a+(40>>2)];contextAttributes.explicitSwapControl=HEAP32[a+(44>>2)];contextAttributes.proxyContextToMainThread=HEAP32[a+(48>>2)];contextAttributes.renderViaOffscreenBackBuffer=HEAP32[a+(52>>2)];var canvas=__findCanvasEventTarget(target);if(ENVIRONMENT_IS_PTHREAD){if(contextAttributes.proxyContextToMainThread===2||!canvas&&contextAttributes.proxyContextToMainThread===1){if(typeof OffscreenCanvas==="undefined"){HEAP32[attributes+52>>2]=1;HEAP32[attributes+20>>2]=1}return _emscripten_sync_run_in_main_thread_2(622854144,target,attributes)}}if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _exit(status){exit(status)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2]=0}var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,thread:threadParams.pthread_ptr,threadInfoStruct:threadParams.pthread_ptr};Atomics.store(HEAPU32,pthread.threadInfoStruct+0>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+4>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+20>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+80>>2,threadParams.detached);Atomics.store(HEAPU32,pthread.threadInfoStruct+116>>2,tlsMemory);Atomics.store(HEAPU32,pthread.threadInfoStruct+60>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+52>>2,pthread.threadInfoStruct);Atomics.store(HEAPU32,pthread.threadInfoStruct+56>>2,PROCINFO.pid);Atomics.store(HEAPU32,pthread.threadInfoStruct+120>>2,threadParams.stackSize);Atomics.store(HEAPU32,pthread.threadInfoStruct+96>>2,threadParams.stackSize);Atomics.store(HEAPU32,pthread.threadInfoStruct+92>>2,threadParams.stackBase);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+8>>2,threadParams.stackBase);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+12>>2,threadParams.detached);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+20>>2,threadParams.schedPolicy);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+24>>2,threadParams.schedPrio);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(HEAPU32,pthread.threadInfoStruct+188>>2,global_locale);worker.pthread=pthread;var msg={cmd:"run",start_routine:threadParams.startRoutine,arg:threadParams.arg,threadInfoStruct:threadParams.pthread_ptr,selfThreadId:threadParams.pthread_ptr,parentThreadId:threadParams.parent_pthread_ptr,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}}function _pthread_getschedparam(thread,policy,schedparam){if(!policy&&!schedparam)return ERRNO_CODES.EINVAL;if(!thread){err("pthread_getschedparam called with a null thread pointer!");return ERRNO_CODES.ESRCH}var self=HEAP32[thread+24>>2];if(self!=thread){err("pthread_getschedparam attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var schedPolicy=Atomics.load(HEAPU32,thread+120+20>>2);var schedPrio=Atomics.load(HEAPU32,thread+120+24>>2);if(policy)HEAP32[policy>>2]=schedPolicy;if(schedparam)HEAP32[schedparam>>2]=schedPrio;return 0}function _pthread_create(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer==="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 11}if(!pthread_ptr){err("pthread_create called with a null thread pointer!");return 22}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length==0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;var schedPolicy=0;var schedPrio=0;if(attr){stackSize=HEAP32[attr>>2];stackSize+=81920;stackBase=HEAP32[attr+8>>2];detached=HEAP32[attr+12>>2]!=0;var inheritSched=HEAP32[attr+16>>2]==0;if(inheritSched){var prevSchedPolicy=HEAP32[attr+20>>2];var prevSchedPrio=HEAP32[attr+24>>2];var parentThreadPtr=PThread.currentProxiedOperationCallerThread?PThread.currentProxiedOperationCallerThread:_pthread_self();_pthread_getschedparam(parentThreadPtr,attr+20,attr+24);schedPolicy=HEAP32[attr+20>>2];schedPrio=HEAP32[attr+24>>2];HEAP32[attr+20>>2]=prevSchedPolicy;HEAP32[attr+24>>2]=prevSchedPrio}else{schedPolicy=HEAP32[attr+20>>2];schedPrio=HEAP32[attr+24>>2]}}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_malloc(stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(244);for(var i=0;i<244>>2;++i)HEAPU32[(threadInfoStruct>>2)+i]=0;HEAP32[pthread_ptr>>2]=threadInfoStruct;HEAP32[threadInfoStruct+24>>2]=threadInfoStruct;var headPtr=threadInfoStruct+168;HEAP32[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,schedPolicy:schedPolicy,schedPrio:schedPrio,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,parent_pthread_ptr:_pthread_self(),arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList)}else{__spawn_thread(threadParams)}return 0}function __cleanup_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! _cleanup_thread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in _cleanup_thread!";HEAP32[pthread_ptr+24>>2]=0;var pthread=PThread.pthreads[pthread_ptr];var worker=pthread.worker;PThread.freeThreadData(pthread);worker.pthread=undefined;PThread.unusedWorkerPool.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker.pthread),1)}function __pthread_testcancel_js(){if(!ENVIRONMENT_IS_PTHREAD)return;if(!threadInfoStruct)return;var cancelDisabled=Atomics.load(HEAPU32,threadInfoStruct+72>>2);if(cancelDisabled)return;var canceled=Atomics.load(HEAPU32,threadInfoStruct+0>>2);if(canceled==2)throw"Canceled!"}function _pthread_join(thread,status){if(!thread){err("pthread_join attempted on a null thread pointer!");return ERRNO_CODES.ESRCH}if(ENVIRONMENT_IS_PTHREAD&&selfThreadId==thread){err("PThread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}else if(!ENVIRONMENT_IS_PTHREAD&&PThread.mainThreadBlock==thread){err("Main thread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}var self=HEAP32[thread+24>>2];if(self!=thread){err("pthread_join attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var detached=Atomics.load(HEAPU32,thread+80>>2);if(detached){err("Attempted to join thread "+thread+", which was already detached!");return ERRNO_CODES.EINVAL}for(;;){var threadStatus=Atomics.load(HEAPU32,thread+0>>2);if(threadStatus==1){var threadExitCode=Atomics.load(HEAPU32,thread+4>>2);if(status)HEAP32[status>>2]=threadExitCode;Atomics.store(HEAPU32,thread+80>>2,1);if(!ENVIRONMENT_IS_PTHREAD)__cleanup_thread(thread);else postMessage({cmd:"cleanupThread",thread:thread});return 0}__pthread_testcancel_js();if(!ENVIRONMENT_IS_PTHREAD)_emscripten_main_thread_process_queued_calls();_emscripten_futex_wait(thread+0,threadStatus,ENVIRONMENT_IS_PTHREAD?100:1)}}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(ENVIRONMENT_IS_PTHREAD){_emscripten_get_now=function(){return performance["now"]()-__performance_now_clock_drift}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));var proxiedFunctionTable=[null,___syscall140,___syscall145,___syscall146,___syscall221,___syscall5,___syscall54,___syscall6,_eglGetProcAddress,_emscripten_exit_pointerlock,_emscripten_get_gamepad_status,_emscripten_get_num_gamepads,_emscripten_get_pointerlock_status,_emscripten_request_pointerlock,_emscripten_sample_gamepad_data,_emscripten_set_canvas_element_size_main_thread,_emscripten_set_click_callback_on_thread,_emscripten_set_fullscreenchange_callback_on_thread,_emscripten_set_gamepadconnected_callback_on_thread,_emscripten_set_gamepaddisconnected_callback_on_thread,_emscripten_set_keypress_callback_on_thread,_emscripten_set_touchcancel_callback_on_thread,_emscripten_set_touchend_callback_on_thread,_emscripten_set_touchmove_callback_on_thread,_emscripten_set_touchstart_callback_on_thread];function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"g":setTempRet0,"b":___assert_fail,"n":___call_main,"Hc":___lock,"xa":___setErrNo,"Gc":___syscall140,"Fc":___syscall145,"U":___syscall146,"j":___syscall221,"Ec":___syscall5,"Dc":___syscall54,"sc":___syscall6,"p":___unlock,"o":_eglGetProcAddress,"i":_emscripten_asm_const_i,"zd":_emscripten_asm_const_ii,"vb":_emscripten_exit_pointerlock,"f":_emscripten_futex_wait,"h":_emscripten_futex_wake,"td":_emscripten_get_gamepad_status,"l":_emscripten_get_heap_size,"e":_emscripten_get_now,"Wc":_emscripten_get_num_gamepads,"Sa":_emscripten_get_pointerlock_status,"Na":_emscripten_glActiveTexture,"Ma":_emscripten_glAttachShader,"La":_emscripten_glBeginQueryEXT,"Ka":_emscripten_glBindAttribLocation,"Ja":_emscripten_glBindBuffer,"Ia":_emscripten_glBindFramebuffer,"Ha":_emscripten_glBindRenderbuffer,"Ga":_emscripten_glBindTexture,"Fa":_emscripten_glBindVertexArray,"Ea":_emscripten_glBlendColor,"Da":_emscripten_glBlendEquation,"Ca":_emscripten_glBlendEquationSeparate,"Ba":_emscripten_glBlendFunc,"Aa":_emscripten_glBlendFuncSeparate,"za":_emscripten_glBufferData,"ya":_emscripten_glBufferSubData,"wa":_emscripten_glCheckFramebufferStatus,"va":_emscripten_glClear,"ua":_emscripten_glClearColor,"ta":_emscripten_glClearDepthf,"sa":_emscripten_glClearStencil,"ra":_emscripten_glColorMask,"qa":_emscripten_glCompileShader,"pa":_emscripten_glCompressedTexImage2D,"oa":_emscripten_glCompressedTexSubImage2D,"na":_emscripten_glCopyTexImage2D,"ma":_emscripten_glCopyTexSubImage2D,"la":_emscripten_glCreateProgram,"ka":_emscripten_glCreateShader,"ja":_emscripten_glCullFace,"ia":_emscripten_glDeleteBuffers,"ha":_emscripten_glDeleteFramebuffers,"ga":_emscripten_glDeleteProgram,"fa":_emscripten_glDeleteQueriesEXT,"ea":_emscripten_glDeleteRenderbuffers,"da":_emscripten_glDeleteShader,"ca":_emscripten_glDeleteTextures,"ba":_emscripten_glDeleteVertexArrays,"aa":_emscripten_glDepthFunc,"$":_emscripten_glDepthMask,"_":_emscripten_glDepthRangef,"Z":_emscripten_glDetachShader,"Y":_emscripten_glDisable,"X":_emscripten_glDisableVertexAttribArray,"W":_emscripten_glDrawArrays,"V":_emscripten_glDrawArraysInstanced,"T":_emscripten_glDrawBuffers,"S":_emscripten_glDrawElements,"R":_emscripten_glDrawElementsInstanced,"Q":_emscripten_glEnable,"P":_emscripten_glEnableVertexAttribArray,"O":_emscripten_glEndQueryEXT,"N":_emscripten_glFinish,"M":_emscripten_glFlush,"L":_emscripten_glFramebufferRenderbuffer,"K":_emscripten_glFramebufferTexture2D,"J":_emscripten_glFrontFace,"I":_emscripten_glGenBuffers,"H":_emscripten_glGenFramebuffers,"G":_emscripten_glGenQueriesEXT,"F":_emscripten_glGenRenderbuffers,"E":_emscripten_glGenTextures,"D":_emscripten_glGenVertexArrays,"C":_emscripten_glGenerateMipmap,"B":_emscripten_glGetActiveAttrib,"A":_emscripten_glGetActiveUniform,"z":_emscripten_glGetAttachedShaders,"y":_emscripten_glGetAttribLocation,"x":_emscripten_glGetBooleanv,"w":_emscripten_glGetBufferParameteriv,"v":_emscripten_glGetError,"u":_emscripten_glGetFloatv,"t":_emscripten_glGetFramebufferAttachmentParameteriv,"s":_emscripten_glGetIntegerv,"r":_emscripten_glGetProgramInfoLog,"q":_emscripten_glGetProgramiv,"Cc":_emscripten_glGetQueryObjecti64vEXT,"Bc":_emscripten_glGetQueryObjectivEXT,"Ac":_emscripten_glGetQueryObjectui64vEXT,"zc":_emscripten_glGetQueryObjectuivEXT,"yc":_emscripten_glGetQueryivEXT,"xc":_emscripten_glGetRenderbufferParameteriv,"wc":_emscripten_glGetShaderInfoLog,"vc":_emscripten_glGetShaderPrecisionFormat,"uc":_emscripten_glGetShaderSource,"tc":_emscripten_glGetShaderiv,"rc":_emscripten_glGetString,"qc":_emscripten_glGetTexParameterfv,"pc":_emscripten_glGetTexParameteriv,"oc":_emscripten_glGetUniformLocation,"nc":_emscripten_glGetUniformfv,"mc":_emscripten_glGetUniformiv,"lc":_emscripten_glGetVertexAttribPointerv,"kc":_emscripten_glGetVertexAttribfv,"jc":_emscripten_glGetVertexAttribiv,"ic":_emscripten_glHint,"hc":_emscripten_glIsBuffer,"gc":_emscripten_glIsEnabled,"fc":_emscripten_glIsFramebuffer,"ec":_emscripten_glIsProgram,"dc":_emscripten_glIsQueryEXT,"cc":_emscripten_glIsRenderbuffer,"bc":_emscripten_glIsShader,"ac":_emscripten_glIsTexture,"$b":_emscripten_glIsVertexArray,"_b":_emscripten_glLineWidth,"Zb":_emscripten_glLinkProgram,"Yb":_emscripten_glPixelStorei,"Xb":_emscripten_glPolygonOffset,"Wb":_emscripten_glQueryCounterEXT,"Vb":_emscripten_glReadPixels,"Ub":_emscripten_glReleaseShaderCompiler,"Tb":_emscripten_glRenderbufferStorage,"Sb":_emscripten_glSampleCoverage,"Rb":_emscripten_glScissor,"Qb":_emscripten_glShaderBinary,"Pb":_emscripten_glShaderSource,"Ob":_emscripten_glStencilFunc,"Nb":_emscripten_glStencilFuncSeparate,"Mb":_emscripten_glStencilMask,"Lb":_emscripten_glStencilMaskSeparate,"Kb":_emscripten_glStencilOp,"Jb":_emscripten_glStencilOpSeparate,"Ib":_emscripten_glTexImage2D,"Hb":_emscripten_glTexParameterf,"Gb":_emscripten_glTexParameterfv,"Fb":_emscripten_glTexParameteri,"Eb":_emscripten_glTexParameteriv,"Db":_emscripten_glTexSubImage2D,"Cb":_emscripten_glUniform1f,"Bb":_emscripten_glUniform1fv,"Ab":_emscripten_glUniform1i,"zb":_emscripten_glUniform1iv,"yb":_emscripten_glUniform2f,"xb":_emscripten_glUniform2fv,"wb":_emscripten_glUniform2i,"ub":_emscripten_glUniform2iv,"tb":_emscripten_glUniform3f,"sb":_emscripten_glUniform3fv,"rb":_emscripten_glUniform3i,"qb":_emscripten_glUniform3iv,"pb":_emscripten_glUniform4f,"ob":_emscripten_glUniform4fv,"nb":_emscripten_glUniform4i,"mb":_emscripten_glUniform4iv,"lb":_emscripten_glUniformMatrix2fv,"kb":_emscripten_glUniformMatrix3fv,"jb":_emscripten_glUniformMatrix4fv,"ib":_emscripten_glUseProgram,"hb":_emscripten_glValidateProgram,"gb":_emscripten_glVertexAttrib1f,"fb":_emscripten_glVertexAttrib1fv,"eb":_emscripten_glVertexAttrib2f,"db":_emscripten_glVertexAttrib2fv,"cb":_emscripten_glVertexAttrib3f,"bb":_emscripten_glVertexAttrib3fv,"ab":_emscripten_glVertexAttrib4f,"$a":_emscripten_glVertexAttrib4fv,"_a":_emscripten_glVertexAttribDivisor,"Za":_emscripten_glVertexAttribPointer,"Ya":_emscripten_glViewport,"yd":_emscripten_has_threading_support,"xd":_emscripten_memcpy_big,"wd":_emscripten_receive_on_main_thread_js,"vd":_emscripten_request_pointerlock,"ud":_emscripten_resize_heap,"Xa":_emscripten_run_script,"sd":_emscripten_sample_gamepad_data,"rd":_emscripten_set_canvas_element_size,"qd":_emscripten_set_click_callback_on_thread,"pd":_emscripten_set_fullscreenchange_callback_on_thread,"od":_emscripten_set_gamepadconnected_callback_on_thread,"nd":_emscripten_set_gamepaddisconnected_callback_on_thread,"md":_emscripten_set_keypress_callback_on_thread,"ld":_emscripten_set_main_loop,"kd":_emscripten_set_touchcancel_callback_on_thread,"jd":_emscripten_set_touchend_callback_on_thread,"id":_emscripten_set_touchmove_callback_on_thread,"hd":_emscripten_set_touchstart_callback_on_thread,"gd":_emscripten_supports_offscreencanvas,"fd":_emscripten_syscall,"Wa":_emscripten_webgl_do_commit_frame,"Va":_emscripten_webgl_do_create_context,"ed":_exit,"Ua":_glfwCreateWindow,"dd":_glfwDefaultWindowHints,"cd":_glfwDestroyWindow,"bd":_glfwGetCursorPos,"Ta":_glfwGetPrimaryMonitor,"k":_glfwGetTime,"ad":_glfwGetVideoModes,"$c":_glfwInit,"_c":_glfwMakeContextCurrent,"Zc":_glfwSetCharCallback,"Yc":_glfwSetCursorEnterCallback,"Xc":_glfwSetCursorPosCallback,"Vc":_glfwSetDropCallback,"Uc":_glfwSetErrorCallback,"Tc":_glfwSetKeyCallback,"Sc":_glfwSetMouseButtonCallback,"Rc":_glfwSetScrollCallback,"Qc":_glfwSetWindowIconifyCallback,"Pc":_glfwSetWindowShouldClose,"Oc":_glfwSetWindowSizeCallback,"Nc":_glfwSwapBuffers,"Mc":_glfwSwapInterval,"Ra":_glfwTerminate,"d":_glfwWindowHint,"Qa":_llvm_stackrestore,"Pa":_llvm_stacksave,"Lc":_pthread_cleanup_pop,"Kc":_pthread_cleanup_push,"m":_pthread_create,"Jc":_pthread_join,"Oa":_time,"Ic":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___emscripten_pthread_data_constructor=Module["___emscripten_pthread_data_constructor"]=function(){return Module["asm"]["Ad"].apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["Bd"].apply(null,arguments)};var ___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=function(){return Module["asm"]["Cd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_add_u64=Module["__emscripten_atomic_fetch_and_add_u64"]=function(){return Module["asm"]["Dd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_and_u64=Module["__emscripten_atomic_fetch_and_and_u64"]=function(){return Module["asm"]["Ed"].apply(null,arguments)};var __emscripten_atomic_fetch_and_or_u64=Module["__emscripten_atomic_fetch_and_or_u64"]=function(){return Module["asm"]["Fd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_sub_u64=Module["__emscripten_atomic_fetch_and_sub_u64"]=function(){return Module["asm"]["Gd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_xor_u64=Module["__emscripten_atomic_fetch_and_xor_u64"]=function(){return Module["asm"]["Hd"].apply(null,arguments)};var __register_pthread_ptr=Module["__register_pthread_ptr"]=function(){return Module["asm"]["Id"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["Jd"].apply(null,arguments)};var _emscripten_async_queue_call_on_thread=Module["_emscripten_async_queue_call_on_thread"]=function(){return Module["asm"]["Kd"].apply(null,arguments)};var _emscripten_async_queue_on_thread_=Module["_emscripten_async_queue_on_thread_"]=function(){return Module["asm"]["Ld"].apply(null,arguments)};var _emscripten_async_run_in_main_thread=Module["_emscripten_async_run_in_main_thread"]=function(){return Module["asm"]["Md"].apply(null,arguments)};var _emscripten_atomic_add_u64=Module["_emscripten_atomic_add_u64"]=function(){return Module["asm"]["Nd"].apply(null,arguments)};var _emscripten_atomic_and_u64=Module["_emscripten_atomic_and_u64"]=function(){return Module["asm"]["Od"].apply(null,arguments)};var _emscripten_atomic_cas_u64=Module["_emscripten_atomic_cas_u64"]=function(){return Module["asm"]["Pd"].apply(null,arguments)};var _emscripten_atomic_exchange_u64=Module["_emscripten_atomic_exchange_u64"]=function(){return Module["asm"]["Qd"].apply(null,arguments)};var _emscripten_atomic_load_f32=Module["_emscripten_atomic_load_f32"]=function(){return Module["asm"]["Rd"].apply(null,arguments)};var _emscripten_atomic_load_f64=Module["_emscripten_atomic_load_f64"]=function(){return Module["asm"]["Sd"].apply(null,arguments)};var _emscripten_atomic_load_u64=Module["_emscripten_atomic_load_u64"]=function(){return Module["asm"]["Td"].apply(null,arguments)};var _emscripten_atomic_or_u64=Module["_emscripten_atomic_or_u64"]=function(){return Module["asm"]["Ud"].apply(null,arguments)};var _emscripten_atomic_store_f32=Module["_emscripten_atomic_store_f32"]=function(){return Module["asm"]["Vd"].apply(null,arguments)};var _emscripten_atomic_store_f64=Module["_emscripten_atomic_store_f64"]=function(){return Module["asm"]["Wd"].apply(null,arguments)};var _emscripten_atomic_store_u64=Module["_emscripten_atomic_store_u64"]=function(){return Module["asm"]["Xd"].apply(null,arguments)};var _emscripten_atomic_sub_u64=Module["_emscripten_atomic_sub_u64"]=function(){return Module["asm"]["Yd"].apply(null,arguments)};var _emscripten_atomic_xor_u64=Module["_emscripten_atomic_xor_u64"]=function(){return Module["asm"]["Zd"].apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=function(){return Module["asm"]["_d"].apply(null,arguments)};var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=function(){return Module["asm"]["$d"].apply(null,arguments)};var _emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=function(){return Module["asm"]["ae"].apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=function(){return Module["asm"]["be"].apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=function(){return Module["asm"]["ce"].apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread=Module["_emscripten_sync_run_in_main_thread"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_0=Module["_emscripten_sync_run_in_main_thread_0"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_1=Module["_emscripten_sync_run_in_main_thread_1"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_2=Module["_emscripten_sync_run_in_main_thread_2"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_3=Module["_emscripten_sync_run_in_main_thread_3"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_5=Module["_emscripten_sync_run_in_main_thread_5"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_6=Module["_emscripten_sync_run_in_main_thread_6"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_7=Module["_emscripten_sync_run_in_main_thread_7"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_xprintf_varargs=Module["_emscripten_sync_run_in_main_thread_xprintf_varargs"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _emscripten_webgl_commit_frame=Module["_emscripten_webgl_commit_frame"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _proxy_main=Module["_proxy_main"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var _pthread_self=Module["_pthread_self"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var establishStackSpace=Module["establishStackSpace"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["He"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Ie"].apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["De"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};Module["asm"]=asm;Module["establishStackSpace"]=establishStackSpace;Module["dynCall_ii"]=dynCall_ii;if(memoryInitializer&&!ENVIRONMENT_IS_PTHREAD){if(!isDataURI(memoryInitializer)){memoryInitializer=locateFile(memoryInitializer)}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module["memoryInitializerRequest"])delete Module["memoryInitializerRequest"].response;removeRunDependency("memory initializer")};var doBrowserLoad=function(){Module["readAsync"](memoryInitializer,applyMemoryInitializer,function(){throw"could not load memory initializer "+memoryInitializer})};if(Module["memoryInitializerRequest"]){var useRequest=function(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}applyMemoryInitializer(response)};if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{PThread.terminateAllThreads();ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(ENVIRONMENT_IS_PTHREAD)console.error("Pthread aborting at "+(new Error).stack);if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}if(!ENVIRONMENT_IS_PTHREAD)Module["noExitRuntime"]=true;if(!ENVIRONMENT_IS_PTHREAD)run(); diff --git a/examples/web/physac/physics_restitution.wasm b/examples/web/physac/physics_restitution.wasm new file mode 100644 index 0000000..caf3cc7 Binary files /dev/null and b/examples/web/physac/physics_restitution.wasm differ diff --git a/examples/web/physac/physics_restitution.worker.js b/examples/web/physac/physics_restitution.worker.js new file mode 100644 index 0000000..3878b57 --- /dev/null +++ b/examples/web/physac/physics_restitution.worker.js @@ -0,0 +1,184 @@ +// Copyright 2015 The Emscripten Authors. All rights reserved. +// Emscripten is available under two separate licenses, the MIT license and the +// University of Illinois/NCSA Open Source License. Both these licenses can be +// found in the LICENSE file. + +// Pthread Web Worker startup routine: +// This is the entry point file that is loaded first by each Web Worker +// that executes pthreads on the Emscripten application. + +// Thread-local: +var threadInfoStruct = 0; // Info area for this thread in Emscripten HEAP (shared). If zero, this worker is not currently hosting an executing pthread. +var selfThreadId = 0; // The ID of this thread. 0 if not hosting a pthread. +var parentThreadId = 0; // The ID of the parent pthread that launched this thread. +var tempDoublePtr = 0; // A temporary memory area for global float and double marshalling operations. + +// Thread-local: Each thread has its own allocated stack space. +var STACK_BASE = 0; +var STACKTOP = 0; +var STACK_MAX = 0; + +// These are system-wide memory area parameters that are set at main runtime startup in main thread, and stay constant throughout the application. +var buffer; // All pthreads share the same Emscripten HEAP as SharedArrayBuffer with the main execution thread. +var DYNAMICTOP_PTR = 0; +var DYNAMIC_BASE = 0; + +var ENVIRONMENT_IS_PTHREAD = true; +var PthreadWorkerInit = {}; + +// performance.now() is specced to return a wallclock time in msecs since that Web Worker/main thread launched. However for pthreads this can cause +// subtle problems in emscripten_get_now() as this essentially would measure time from pthread_create(), meaning that the clocks between each threads +// would be wildly out of sync. Therefore sync all pthreads to the clock on the main browser thread, so that different threads see a somewhat +// coherent clock across each of them (+/- 0.1msecs in testing) +var __performance_now_clock_drift = 0; + +// Cannot use console.log or console.error in a web worker, since that would risk a browser deadlock! https://bugzilla.mozilla.org/show_bug.cgi?id=1049091 +// Therefore implement custom logging facility for threads running in a worker, which queue the messages to main thread to print. +var Module = {}; + + +// When error objects propagate from Web Worker to main thread, they lose helpful call stack and thread ID information, so print out errors early here, +// before that happens. +this.addEventListener('error', function(e) { + if (e.message.indexOf('SimulateInfiniteLoop') != -1) return e.preventDefault(); + + var errorSource = ' in ' + e.filename + ':' + e.lineno + ':' + e.colno; + console.error('Pthread ' + selfThreadId + ' uncaught exception' + (e.filename || e.lineno || e.colno ? errorSource : "") + ': ' + e.message + '. Error object:'); + console.error(e.error); +}); + +function threadPrint() { + var text = Array.prototype.slice.call(arguments).join(' '); + console.log(text); +} +function threadPrintErr() { + var text = Array.prototype.slice.call(arguments).join(' '); + console.error(text); + console.error(new Error().stack); +} +function threadAlert() { + var text = Array.prototype.slice.call(arguments).join(' '); + postMessage({cmd: 'alert', text: text, threadId: selfThreadId}); +} +out = threadPrint; +err = threadPrintErr; +this.alert = threadAlert; + +Module['instantiateWasm'] = function(info, receiveInstance) { + // Instantiate from the module posted from the main thread. + // We can just use sync instantiation in the worker. + instance = new WebAssembly.Instance(wasmModule, info); + // We don't need the module anymore; new threads will be spawned from the main thread. + wasmModule = null; + receiveInstance(instance); // The second 'module' parameter is intentionally null here, we don't need to keep a ref to the Module object from here. + return instance.exports; +} + +var wasmModule; +var wasmMemory; + +this.onmessage = function(e) { + try { + if (e.data.cmd === 'load') { // Preload command that is called once per worker to parse and load the Emscripten code. + // Initialize the thread-local field(s): + tempDoublePtr = e.data.tempDoublePtr; + + // Initialize the global "process"-wide fields: + DYNAMIC_BASE = e.data.DYNAMIC_BASE; + DYNAMICTOP_PTR = e.data.DYNAMICTOP_PTR; + + // The Wasm module will have import fields for STACKTOP and STACK_MAX. At 'load' stage of Worker startup, we are just + // spawning this Web Worker to act as a host for future created pthreads, i.e. we do not have a pthread to start up here yet. + // (A single Worker can also host multiple pthreads throughout its lifetime, shutting down a pthread will not shut down its hosting Worker, + // but the Worker is reused for later spawned pthreads). The 'run' stage below will actually start running a pthread. + // The stack space for a pthread is allocated and deallocated when a pthread is actually run, not yet at Worker 'load' stage. + // However, the WebAssembly module we are loading up here has import fields for STACKTOP and STACK_MAX, which it needs to get filled in + // immediately at Wasm Module instantiation time. The values of these will not get used until pthread is actually running some code, so + // we'll proceed to set up temporary invalid values for these fields for import purposes. Then whenever a pthread is launched at 'run' stage + // below, these values are rewritten to establish proper stack area for the particular pthread. + Module['STACK_MAX'] = Module['STACKTOP'] = 0x7FFFFFFF; + + // Module and memory were sent from main thread + wasmModule = e.data.wasmModule; + wasmMemory = e.data.wasmMemory; + buffer = wasmMemory.buffer; + + PthreadWorkerInit = e.data.PthreadWorkerInit; + + if (typeof e.data.urlOrBlob === 'string') { + importScripts(e.data.urlOrBlob); + } else { + var objectUrl = URL.createObjectURL(e.data.urlOrBlob); + importScripts(objectUrl); + URL.revokeObjectURL(objectUrl); + } + + + if (typeof FS !== 'undefined' && typeof FS.createStandardStreams === 'function') FS.createStandardStreams(); + postMessage({ cmd: 'loaded' }); + } else if (e.data.cmd === 'objectTransfer') { + PThread.receiveObjectTransfer(e.data); + } else if (e.data.cmd === 'run') { // This worker was idle, and now should start executing its pthread entry point. + __performance_now_clock_drift = performance.now() - e.data.time; // Sync up to the clock of the main thread. + threadInfoStruct = e.data.threadInfoStruct; + __register_pthread_ptr(threadInfoStruct, /*isMainBrowserThread=*/0, /*isMainRuntimeThread=*/0); // Pass the thread address inside the asm.js scope to store it for fast access that avoids the need for a FFI out. + selfThreadId = e.data.selfThreadId; + parentThreadId = e.data.parentThreadId; + // Establish the stack frame for this thread in global scope + STACK_BASE = STACKTOP = e.data.stackBase; + STACK_MAX = STACK_BASE + e.data.stackSize; + // Call inside asm.js/wasm module to set up the stack frame for this pthread in asm.js/wasm module scope + Module['establishStackSpace'](e.data.stackBase, e.data.stackBase + e.data.stackSize); + + PThread.receiveObjectTransfer(e.data); + PThread.setThreadStatus(_pthread_self(), 1/*EM_THREAD_STATUS_RUNNING*/); + + try { + // pthread entry points are always of signature 'void *ThreadMain(void *arg)' + // Native codebases sometimes spawn threads with other thread entry point signatures, + // such as void ThreadMain(void *arg), void *ThreadMain(), or void ThreadMain(). + // That is not acceptable per C/C++ specification, but x86 compiler ABI extensions + // enable that to work. If you find the following line to crash, either change the signature + // to "proper" void *ThreadMain(void *arg) form, or try linking with the Emscripten linker + // flag -s EMULATE_FUNCTION_POINTER_CASTS=1 to add in emulation for this x86 ABI extension. + var result = Module['dynCall_ii'](e.data.start_routine, e.data.arg); + + + } catch(e) { + if (e === 'Canceled!') { + PThread.threadCancel(); + return; + } else if (e === 'SimulateInfiniteLoop' || e === 'pthread_exit') { + return; + } else { + Atomics.store(HEAPU32, (threadInfoStruct + 4 /*C_STRUCTS.pthread.threadExitCode*/ ) >> 2, (e instanceof ExitStatus) ? e.status : -2 /*A custom entry specific to Emscripten denoting that the thread crashed.*/); + Atomics.store(HEAPU32, (threadInfoStruct + 0 /*C_STRUCTS.pthread.threadStatus*/ ) >> 2, 1); // Mark the thread as no longer running. + _emscripten_futex_wake(threadInfoStruct + 0 /*C_STRUCTS.pthread.threadStatus*/, 0x7FFFFFFF/*INT_MAX*/); // Wake all threads waiting on this thread to finish. + if (!(e instanceof ExitStatus)) throw e; + } + } + // The thread might have finished without calling pthread_exit(). If so, then perform the exit operation ourselves. + // (This is a no-op if explicit pthread_exit() had been called prior.) + if (!Module['noExitRuntime']) PThread.threadExit(result); + } else if (e.data.cmd === 'cancel') { // Main thread is asking for a pthread_cancel() on this thread. + if (threadInfoStruct && PThread.thisThreadCancelState == 0/*PTHREAD_CANCEL_ENABLE*/) { + PThread.threadCancel(); + } + } else if (e.data.target === 'setimmediate') { + // no-op + } else if (e.data.cmd === 'processThreadQueue') { + if (threadInfoStruct) { // If this thread is actually running? + _emscripten_current_thread_process_queued_calls(); + } + } else { + err('worker.js received unknown command ' + e.data.cmd); + console.error(e.data); + } + } catch(e) { + console.error('worker.js onmessage() captured an uncaught exception: ' + e); + console.error(e.stack); + throw e; + } +} + + diff --git a/examples/web/physac/physics_shatter.c b/examples/web/physac/physics_shatter.c index 7ca656f..832bed0 100644 --- a/examples/web/physac/physics_shatter.c +++ b/examples/web/physac/physics_shatter.c @@ -7,9 +7,9 @@ * * Use the following line to compile: * -* gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread +* gcc -o $(NAME_PART).exe $(FILE_NAME) -s $(RAYLIB_DIR)\raylib\raylib_icon -static -lraylib -lpthread * -lglfw3 -lopengl32 -lgdi32 -lopenal32 -lwinmm -std=c99 -Wl,--subsystem,windows -Wl,-allow-multiple-definition -* +* * Copyright (c) 2017 Victor Fisac * ********************************************************************************************/ @@ -17,7 +17,7 @@ #include "raylib.h" #define PHYSAC_IMPLEMENTATION -#include "physac.h" +#include "physac.h" #if defined(PLATFORM_WEB) #include @@ -26,14 +26,14 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Physac logo drawing position int logoX = 0; int logoY = 15; -PhysicsBody body; +PhysicsBody body = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -41,9 +41,9 @@ PhysicsBody body; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -65,7 +65,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -74,7 +74,7 @@ int main() #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- ClosePhysics(); // Uninitialize physics CloseWindow(); // Close window and OpenGL context diff --git a/examples/web/physac/physics_shatter.html b/examples/web/physac/physics_shatter.html new file mode 100644 index 0000000..b0de76e --- /dev/null +++ b/examples/web/physac/physics_shatter.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/physac/physics_shatter.html.mem b/examples/web/physac/physics_shatter.html.mem new file mode 100644 index 0000000..ef84794 Binary files /dev/null and b/examples/web/physac/physics_shatter.html.mem differ diff --git a/examples/web/physac/physics_shatter.js b/examples/web/physac/physics_shatter.js new file mode 100644 index 0000000..e60c35d --- /dev/null +++ b/examples/web/physac/physics_shatter.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(typeof ENVIRONMENT_IS_PTHREAD==="undefined"){ENVIRONMENT_IS_PTHREAD=false;var PthreadWorkerInit={}}var _scriptDir=typeof document!=="undefined"&&document.currentScript?document.currentScript.src:undefined;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var GLOBAL_BASE=1024;if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var wasmModule;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx)){var u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}if(!ENVIRONMENT_IS_PTHREAD){var DYNAMIC_BASE=5290896,DYNAMICTOP_PTR=47984}var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;if(ENVIRONMENT_IS_PTHREAD)runtimeInitialized=true;function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;if(runtimeInitialized)return;runtimeInitialized=true;__register_pthread_ptr(PThread.mainThreadBlock,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(PThread.mainThreadBlock);if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){if(ENVIRONMENT_IS_PTHREAD)return;FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;runtimeExited=true}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){assert(!ENVIRONMENT_IS_PTHREAD,"addRunDependency cannot be used in a pthread worker");runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="physics_shatter.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD)removeRunDependency("wasm-instantiate")}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency("wasm-instantiate")}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"],output["module"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":607,"maximum":607,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};var ASM_CONSTS=[function(){console.error("emscripten_webgl_create_context: attributes pointer is null!")},function(){postMessage({cmd:"processQueuedMainThreadWork"})},function($0){if(!ENVIRONMENT_IS_PTHREAD){if(!PThread.pthreads[$0]||!PThread.pthreads[$0].worker){return 0}PThread.pthreads[$0].worker.postMessage({cmd:"processThreadQueue"})}else{postMessage({targetThread:$0,cmd:"processThreadQueue"})}return 1},function(){return!!Module["canvas"]},function(){Module["noExitRuntime"]=true},function(){throw"Canceled!"}];function _emscripten_asm_const_i(code){return ASM_CONSTS[code]()}function _emscripten_asm_const_ii(code,a0){return ASM_CONSTS[code](a0)}if(!ENVIRONMENT_IS_PTHREAD)__ATINIT__.push({func:function(){___emscripten_pthread_data_constructor()}});if(!ENVIRONMENT_IS_PTHREAD){memoryInitializer="physics_shatter.html.mem"}var tempDoublePtr;if(!ENVIRONMENT_IS_PTHREAD)tempDoublePtr=48e3;function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var PROCINFO={ppid:1,pid:42,sid:42,pgid:42};var PThread={MAIN_THREAD_ID:1,mainThreadInfo:{schedPolicy:0,schedPrio:0},unusedWorkerPool:[],runningWorkers:[],initMainThreadBlock:function(){if(ENVIRONMENT_IS_PTHREAD)return undefined;PThread.mainThreadBlock=47184;for(var i=0;i<244/4;++i)HEAPU32[PThread.mainThreadBlock/4+i]=0;HEAP32[PThread.mainThreadBlock+24>>2]=PThread.mainThreadBlock;var headPtr=PThread.mainThreadBlock+168;HEAP32[headPtr>>2]=headPtr;var tlsMemory=47440;for(var i=0;i<128;++i)HEAPU32[tlsMemory/4+i]=0;Atomics.store(HEAPU32,PThread.mainThreadBlock+116>>2,tlsMemory);Atomics.store(HEAPU32,PThread.mainThreadBlock+52>>2,PThread.mainThreadBlock);Atomics.store(HEAPU32,PThread.mainThreadBlock+56>>2,PROCINFO.pid)},pthreads:{},pthreadIdCounter:2,exitHandlers:null,setThreadStatus:function(){},runExitHandlers:function(){if(PThread.exitHandlers!==null){while(PThread.exitHandlers.length>0){PThread.exitHandlers.pop()()}PThread.exitHandlers=null}if(ENVIRONMENT_IS_PTHREAD&&threadInfoStruct)___pthread_tsd_run_dtors()},threadExit:function(exitCode){var tb=_pthread_self();if(tb){Atomics.store(HEAPU32,tb+4>>2,exitCode);Atomics.store(HEAPU32,tb+0>>2,1);Atomics.store(HEAPU32,tb+72>>2,1);Atomics.store(HEAPU32,tb+76>>2,0);PThread.runExitHandlers();_emscripten_futex_wake(tb+0,2147483647);__register_pthread_ptr(0,0,0);threadInfoStruct=0;if(ENVIRONMENT_IS_PTHREAD){postMessage({cmd:"exit"})}}},threadCancel:function(){PThread.runExitHandlers();Atomics.store(HEAPU32,threadInfoStruct+4>>2,-1);Atomics.store(HEAPU32,threadInfoStruct+0>>2,1);_emscripten_futex_wake(threadInfoStruct+0,2147483647);threadInfoStruct=selfThreadId=0;__register_pthread_ptr(0,0,0);postMessage({cmd:"cancelDone"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.pthreads={};for(var t in PThread.unusedWorkerPool){var pthread=PThread.unusedWorkerPool[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.unusedWorkerPool=[];for(var t in PThread.runningWorkers){var pthread=PThread.runningWorkers[t];if(pthread){PThread.freeThreadData(pthread);if(pthread.worker)pthread.worker.terminate()}}PThread.runningWorkers=[]},freeThreadData:function(pthread){if(!pthread)return;if(pthread.threadInfoStruct){var tlsMemory=HEAP32[pthread.threadInfoStruct+116>>2];HEAP32[pthread.threadInfoStruct+116>>2]=0;_free(pthread.tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},receiveObjectTransfer:function(data){},allocateUnusedWorkers:function(numWorkers,onFinishedLoading){if(typeof SharedArrayBuffer==="undefined")return;var numWorkersLoaded=0;var pthreadMainJs="physics_shatter.worker.js";pthreadMainJs=locateFile(pthreadMainJs);for(var i=0;i0)return PThread.unusedWorkerPool.pop();else return null},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>2]=value;return value}function ___lock(){}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,which,varargs);SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(7,1,which,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(8,1,name_);return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i>2]=eventTypeId;HEAP32[varargs+4>>2]=eventData;HEAP32[varargs+8>>2]=userData;_emscripten_async_queue_on_thread_(targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getBoundingClientRectOrZeros:function(target){return target.getBoundingClientRect?target.getBoundingClientRect():{left:0,top:0}},pageScrollPos:function(){if(window.pageXOffset>0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(9,1);JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}var __main_thread_futex_wait_address;if(ENVIRONMENT_IS_PTHREAD)__main_thread_futex_wait_address=PthreadWorkerInit.__main_thread_futex_wait_address;else PthreadWorkerInit.__main_thread_futex_wait_address=__main_thread_futex_wait_address=47968;function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>HEAP8.length||addr&3!=0)return-22;if(ENVIRONMENT_IS_WORKER){var ret=Atomics.wait(HEAP32,addr>>2,val,timeout);if(ret==="timed-out")return-110;if(ret==="not-equal")return-11;if(ret==="ok")return 0;throw"Atomics.wait returned an unexpected value "+ret}else{var loadedVal=Atomics.load(HEAP32,addr>>2);if(val!=loadedVal)return-11;var tNow=performance.now();var tEnd=tNow+timeout;Atomics.store(HEAP32,__main_thread_futex_wait_address>>2,addr);var ourWaitAddress=addr;while(addr==ourWaitAddress){tNow=performance.now();if(tNow>tEnd){return-110}_emscripten_main_thread_process_queued_calls();addr=Atomics.load(HEAP32,__main_thread_futex_wait_address>>2)}return 0}}function _emscripten_futex_wake(addr,count){if(addr<=0||addr>HEAP8.length||addr&3!=0||count<0)return-22;if(count==0)return 0;var mainThreadWaitAddress=Atomics.load(HEAP32,__main_thread_futex_wait_address>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(HEAP32,__main_thread_futex_wait_address>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(HEAP32,addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw"Atomics.notify returned an unexpected value "+ret}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(10,1,index,gamepadState);if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(11,1);return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(12,1,pointerlockStatus);if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);HEAP32[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArrays(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstanced(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffers(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstanced(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArray(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisor(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_has_threading_support(){return typeof SharedArrayBuffer!=="undefined"}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var buffer=stackAlloc(numCallArgs*8);for(var i=0;i>3)+i]=arguments[2+i]}var ret=_emscripten_run_in_main_runtime_thread_js(index,numCallArgs,buffer,sync);stackRestore(stack);return ret}function _emscripten_receive_on_main_thread_js(index,numCallArgs,buffer){if(!_emscripten_receive_on_main_thread_js.callArgs){_emscripten_receive_on_main_thread_js.callArgs=[]}var callArgs=_emscripten_receive_on_main_thread_js.callArgs;callArgs.length=numCallArgs;for(var i=0;i>3)+i]}var func;if(index>0){func=proxiedFunctionTable[index]}else{func=ASM_CONSTS[-index-1]}return func.apply(null,callArgs)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(13,1,target,deferUntilInEventHandler);if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(14,1);return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}HEAP32[varargs>>2]=targetCanvasPtr;HEAP32[varargs+4>>2]=width;HEAP32[varargs+8>>2]=height;_emscripten_async_queue_on_thread_(targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):"";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}function __findCanvasEventTarget(target){if(typeof target==="number")target=UTF8ToString(target);if(!target||target==="#canvas"){if(typeof GL!=="undefined"&&GL.offscreenCanvases["canvas"])return GL.offscreenCanvases["canvas"];return Module["canvas"]}if(typeof GL!=="undefined"&&GL.offscreenCanvases[target])return GL.offscreenCanvases[target];return __findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=__findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){HEAP32[canvas.canvasSharedPtr>>2]=width;HEAP32[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(canvas.GLctxObject.GLctx.VIEWPORT);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=HEAP32[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(15,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=__findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(targetThread){var mouseEventData=_malloc(72);__fillMouseEventData(mouseEventData,e,target);JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,mouseEventData,userData)}else if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(16,1,target,userData,useCapture,callbackfunc,targetThread);__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=targetThread?_malloc(280):JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,fullscreenChangeEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(17,1,target,userData,useCapture,callbackfunc,targetThread);if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=targetThread?_malloc(1432):JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,gamepadEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(18,1,userData,useCapture,callbackfunc,targetThread);if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(19,1,userData,useCapture,callbackfunc,targetThread);if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=targetThread?_malloc(164):JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,keyEventData,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(20,1,target,userData,useCapture,callbackfunc,targetThread);__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(targetThread)JSEvents.queueEventHandlerOnThread_iiii(targetThread,callbackfunc,eventTypeId,touchEvent,userData);else if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(21,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(22,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(23,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(24,1,target,userData,useCapture,callbackfunc,targetThread);__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_supports_offscreencanvas(){return 0}function _emscripten_syscall(which,varargs){switch(which){case 140:return ___syscall140(which,varargs);case 145:return ___syscall145(which,varargs);case 146:return ___syscall146(which,varargs);case 221:return ___syscall221(which,varargs);case 5:return ___syscall5(which,varargs);case 54:return ___syscall54(which,varargs);case 6:return ___syscall6(which,varargs);default:throw"surprising proxied syscall: "+which}}function _emscripten_webgl_do_commit_frame(){if(!GL.currentContext||!GL.currentContext.GLctx){return-3}if(!GL.currentContext.GLctx.commit){return-1}if(!GL.currentContext.attributes.explicitSwapControl){return-3}GL.currentContext.GLctx.commit();return 0}var __emscripten_webgl_power_preferences=["default","low-power","high-performance"];function _emscripten_webgl_do_create_context(target,attributes){var contextAttributes={};var a=attributes>>2;contextAttributes["alpha"]=!!HEAP32[a+(0>>2)];contextAttributes["depth"]=!!HEAP32[a+(4>>2)];contextAttributes["stencil"]=!!HEAP32[a+(8>>2)];contextAttributes["antialias"]=!!HEAP32[a+(12>>2)];contextAttributes["premultipliedAlpha"]=!!HEAP32[a+(16>>2)];contextAttributes["preserveDrawingBuffer"]=!!HEAP32[a+(20>>2)];var powerPreference=HEAP32[a+(24>>2)];contextAttributes["powerPreference"]=__emscripten_webgl_power_preferences[powerPreference];contextAttributes["failIfMajorPerformanceCaveat"]=!!HEAP32[a+(28>>2)];contextAttributes.majorVersion=HEAP32[a+(32>>2)];contextAttributes.minorVersion=HEAP32[a+(36>>2)];contextAttributes.enableExtensionsByDefault=HEAP32[a+(40>>2)];contextAttributes.explicitSwapControl=HEAP32[a+(44>>2)];contextAttributes.proxyContextToMainThread=HEAP32[a+(48>>2)];contextAttributes.renderViaOffscreenBackBuffer=HEAP32[a+(52>>2)];var canvas=__findCanvasEventTarget(target);if(ENVIRONMENT_IS_PTHREAD){if(contextAttributes.proxyContextToMainThread===2||!canvas&&contextAttributes.proxyContextToMainThread===1){if(typeof OffscreenCanvas==="undefined"){HEAP32[attributes+52>>2]=1;HEAP32[attributes+20>>2]=1}return _emscripten_sync_run_in_main_thread_2(622854144,target,attributes)}}if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _exit(status){exit(status)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2]=0}var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,thread:threadParams.pthread_ptr,threadInfoStruct:threadParams.pthread_ptr};Atomics.store(HEAPU32,pthread.threadInfoStruct+0>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+4>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+20>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+80>>2,threadParams.detached);Atomics.store(HEAPU32,pthread.threadInfoStruct+116>>2,tlsMemory);Atomics.store(HEAPU32,pthread.threadInfoStruct+60>>2,0);Atomics.store(HEAPU32,pthread.threadInfoStruct+52>>2,pthread.threadInfoStruct);Atomics.store(HEAPU32,pthread.threadInfoStruct+56>>2,PROCINFO.pid);Atomics.store(HEAPU32,pthread.threadInfoStruct+120>>2,threadParams.stackSize);Atomics.store(HEAPU32,pthread.threadInfoStruct+96>>2,threadParams.stackSize);Atomics.store(HEAPU32,pthread.threadInfoStruct+92>>2,threadParams.stackBase);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+8>>2,threadParams.stackBase);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+12>>2,threadParams.detached);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+20>>2,threadParams.schedPolicy);Atomics.store(HEAPU32,pthread.threadInfoStruct+120+24>>2,threadParams.schedPrio);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(HEAPU32,pthread.threadInfoStruct+188>>2,global_locale);worker.pthread=pthread;var msg={cmd:"run",start_routine:threadParams.startRoutine,arg:threadParams.arg,threadInfoStruct:threadParams.pthread_ptr,selfThreadId:threadParams.pthread_ptr,parentThreadId:threadParams.parent_pthread_ptr,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}}function _pthread_getschedparam(thread,policy,schedparam){if(!policy&&!schedparam)return ERRNO_CODES.EINVAL;if(!thread){err("pthread_getschedparam called with a null thread pointer!");return ERRNO_CODES.ESRCH}var self=HEAP32[thread+24>>2];if(self!=thread){err("pthread_getschedparam attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var schedPolicy=Atomics.load(HEAPU32,thread+120+20>>2);var schedPrio=Atomics.load(HEAPU32,thread+120+24>>2);if(policy)HEAP32[policy>>2]=schedPolicy;if(schedparam)HEAP32[schedparam>>2]=schedPrio;return 0}function _pthread_create(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer==="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 11}if(!pthread_ptr){err("pthread_create called with a null thread pointer!");return 22}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length==0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;var schedPolicy=0;var schedPrio=0;if(attr){stackSize=HEAP32[attr>>2];stackSize+=81920;stackBase=HEAP32[attr+8>>2];detached=HEAP32[attr+12>>2]!=0;var inheritSched=HEAP32[attr+16>>2]==0;if(inheritSched){var prevSchedPolicy=HEAP32[attr+20>>2];var prevSchedPrio=HEAP32[attr+24>>2];var parentThreadPtr=PThread.currentProxiedOperationCallerThread?PThread.currentProxiedOperationCallerThread:_pthread_self();_pthread_getschedparam(parentThreadPtr,attr+20,attr+24);schedPolicy=HEAP32[attr+20>>2];schedPrio=HEAP32[attr+24>>2];HEAP32[attr+20>>2]=prevSchedPolicy;HEAP32[attr+24>>2]=prevSchedPrio}else{schedPolicy=HEAP32[attr+20>>2];schedPrio=HEAP32[attr+24>>2]}}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_malloc(stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(244);for(var i=0;i<244>>2;++i)HEAPU32[(threadInfoStruct>>2)+i]=0;HEAP32[pthread_ptr>>2]=threadInfoStruct;HEAP32[threadInfoStruct+24>>2]=threadInfoStruct;var headPtr=threadInfoStruct+168;HEAP32[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,schedPolicy:schedPolicy,schedPrio:schedPrio,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,parent_pthread_ptr:_pthread_self(),arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList)}else{__spawn_thread(threadParams)}return 0}function __cleanup_thread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! _cleanup_thread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in _cleanup_thread!";HEAP32[pthread_ptr+24>>2]=0;var pthread=PThread.pthreads[pthread_ptr];var worker=pthread.worker;PThread.freeThreadData(pthread);worker.pthread=undefined;PThread.unusedWorkerPool.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker.pthread),1)}function __pthread_testcancel_js(){if(!ENVIRONMENT_IS_PTHREAD)return;if(!threadInfoStruct)return;var cancelDisabled=Atomics.load(HEAPU32,threadInfoStruct+72>>2);if(cancelDisabled)return;var canceled=Atomics.load(HEAPU32,threadInfoStruct+0>>2);if(canceled==2)throw"Canceled!"}function _pthread_join(thread,status){if(!thread){err("pthread_join attempted on a null thread pointer!");return ERRNO_CODES.ESRCH}if(ENVIRONMENT_IS_PTHREAD&&selfThreadId==thread){err("PThread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}else if(!ENVIRONMENT_IS_PTHREAD&&PThread.mainThreadBlock==thread){err("Main thread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}var self=HEAP32[thread+24>>2];if(self!=thread){err("pthread_join attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var detached=Atomics.load(HEAPU32,thread+80>>2);if(detached){err("Attempted to join thread "+thread+", which was already detached!");return ERRNO_CODES.EINVAL}for(;;){var threadStatus=Atomics.load(HEAPU32,thread+0>>2);if(threadStatus==1){var threadExitCode=Atomics.load(HEAPU32,thread+4>>2);if(status)HEAP32[status>>2]=threadExitCode;Atomics.store(HEAPU32,thread+80>>2,1);if(!ENVIRONMENT_IS_PTHREAD)__cleanup_thread(thread);else postMessage({cmd:"cleanupThread",thread:thread});return 0}__pthread_testcancel_js();if(!ENVIRONMENT_IS_PTHREAD)_emscripten_main_thread_process_queued_calls();_emscripten_futex_wait(thread+0,threadStatus,ENVIRONMENT_IS_PTHREAD?100:1)}}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(ENVIRONMENT_IS_PTHREAD){_emscripten_get_now=function(){return performance["now"]()-__performance_now_clock_drift}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));var proxiedFunctionTable=[null,___syscall140,___syscall145,___syscall146,___syscall221,___syscall5,___syscall54,___syscall6,_eglGetProcAddress,_emscripten_exit_pointerlock,_emscripten_get_gamepad_status,_emscripten_get_num_gamepads,_emscripten_get_pointerlock_status,_emscripten_request_pointerlock,_emscripten_sample_gamepad_data,_emscripten_set_canvas_element_size_main_thread,_emscripten_set_click_callback_on_thread,_emscripten_set_fullscreenchange_callback_on_thread,_emscripten_set_gamepadconnected_callback_on_thread,_emscripten_set_gamepaddisconnected_callback_on_thread,_emscripten_set_keypress_callback_on_thread,_emscripten_set_touchcancel_callback_on_thread,_emscripten_set_touchend_callback_on_thread,_emscripten_set_touchmove_callback_on_thread,_emscripten_set_touchstart_callback_on_thread];function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"g":setTempRet0,"b":___assert_fail,"n":___call_main,"Hc":___lock,"xa":___setErrNo,"Gc":___syscall140,"Fc":___syscall145,"U":___syscall146,"j":___syscall221,"Ec":___syscall5,"Dc":___syscall54,"sc":___syscall6,"p":___unlock,"o":_eglGetProcAddress,"i":_emscripten_asm_const_i,"zd":_emscripten_asm_const_ii,"vb":_emscripten_exit_pointerlock,"f":_emscripten_futex_wait,"h":_emscripten_futex_wake,"td":_emscripten_get_gamepad_status,"l":_emscripten_get_heap_size,"e":_emscripten_get_now,"Wc":_emscripten_get_num_gamepads,"Sa":_emscripten_get_pointerlock_status,"Na":_emscripten_glActiveTexture,"Ma":_emscripten_glAttachShader,"La":_emscripten_glBeginQueryEXT,"Ka":_emscripten_glBindAttribLocation,"Ja":_emscripten_glBindBuffer,"Ia":_emscripten_glBindFramebuffer,"Ha":_emscripten_glBindRenderbuffer,"Ga":_emscripten_glBindTexture,"Fa":_emscripten_glBindVertexArray,"Ea":_emscripten_glBlendColor,"Da":_emscripten_glBlendEquation,"Ca":_emscripten_glBlendEquationSeparate,"Ba":_emscripten_glBlendFunc,"Aa":_emscripten_glBlendFuncSeparate,"za":_emscripten_glBufferData,"ya":_emscripten_glBufferSubData,"wa":_emscripten_glCheckFramebufferStatus,"va":_emscripten_glClear,"ua":_emscripten_glClearColor,"ta":_emscripten_glClearDepthf,"sa":_emscripten_glClearStencil,"ra":_emscripten_glColorMask,"qa":_emscripten_glCompileShader,"pa":_emscripten_glCompressedTexImage2D,"oa":_emscripten_glCompressedTexSubImage2D,"na":_emscripten_glCopyTexImage2D,"ma":_emscripten_glCopyTexSubImage2D,"la":_emscripten_glCreateProgram,"ka":_emscripten_glCreateShader,"ja":_emscripten_glCullFace,"ia":_emscripten_glDeleteBuffers,"ha":_emscripten_glDeleteFramebuffers,"ga":_emscripten_glDeleteProgram,"fa":_emscripten_glDeleteQueriesEXT,"ea":_emscripten_glDeleteRenderbuffers,"da":_emscripten_glDeleteShader,"ca":_emscripten_glDeleteTextures,"ba":_emscripten_glDeleteVertexArrays,"aa":_emscripten_glDepthFunc,"$":_emscripten_glDepthMask,"_":_emscripten_glDepthRangef,"Z":_emscripten_glDetachShader,"Y":_emscripten_glDisable,"X":_emscripten_glDisableVertexAttribArray,"W":_emscripten_glDrawArrays,"V":_emscripten_glDrawArraysInstanced,"T":_emscripten_glDrawBuffers,"S":_emscripten_glDrawElements,"R":_emscripten_glDrawElementsInstanced,"Q":_emscripten_glEnable,"P":_emscripten_glEnableVertexAttribArray,"O":_emscripten_glEndQueryEXT,"N":_emscripten_glFinish,"M":_emscripten_glFlush,"L":_emscripten_glFramebufferRenderbuffer,"K":_emscripten_glFramebufferTexture2D,"J":_emscripten_glFrontFace,"I":_emscripten_glGenBuffers,"H":_emscripten_glGenFramebuffers,"G":_emscripten_glGenQueriesEXT,"F":_emscripten_glGenRenderbuffers,"E":_emscripten_glGenTextures,"D":_emscripten_glGenVertexArrays,"C":_emscripten_glGenerateMipmap,"B":_emscripten_glGetActiveAttrib,"A":_emscripten_glGetActiveUniform,"z":_emscripten_glGetAttachedShaders,"y":_emscripten_glGetAttribLocation,"x":_emscripten_glGetBooleanv,"w":_emscripten_glGetBufferParameteriv,"v":_emscripten_glGetError,"u":_emscripten_glGetFloatv,"t":_emscripten_glGetFramebufferAttachmentParameteriv,"s":_emscripten_glGetIntegerv,"r":_emscripten_glGetProgramInfoLog,"q":_emscripten_glGetProgramiv,"Cc":_emscripten_glGetQueryObjecti64vEXT,"Bc":_emscripten_glGetQueryObjectivEXT,"Ac":_emscripten_glGetQueryObjectui64vEXT,"zc":_emscripten_glGetQueryObjectuivEXT,"yc":_emscripten_glGetQueryivEXT,"xc":_emscripten_glGetRenderbufferParameteriv,"wc":_emscripten_glGetShaderInfoLog,"vc":_emscripten_glGetShaderPrecisionFormat,"uc":_emscripten_glGetShaderSource,"tc":_emscripten_glGetShaderiv,"rc":_emscripten_glGetString,"qc":_emscripten_glGetTexParameterfv,"pc":_emscripten_glGetTexParameteriv,"oc":_emscripten_glGetUniformLocation,"nc":_emscripten_glGetUniformfv,"mc":_emscripten_glGetUniformiv,"lc":_emscripten_glGetVertexAttribPointerv,"kc":_emscripten_glGetVertexAttribfv,"jc":_emscripten_glGetVertexAttribiv,"ic":_emscripten_glHint,"hc":_emscripten_glIsBuffer,"gc":_emscripten_glIsEnabled,"fc":_emscripten_glIsFramebuffer,"ec":_emscripten_glIsProgram,"dc":_emscripten_glIsQueryEXT,"cc":_emscripten_glIsRenderbuffer,"bc":_emscripten_glIsShader,"ac":_emscripten_glIsTexture,"$b":_emscripten_glIsVertexArray,"_b":_emscripten_glLineWidth,"Zb":_emscripten_glLinkProgram,"Yb":_emscripten_glPixelStorei,"Xb":_emscripten_glPolygonOffset,"Wb":_emscripten_glQueryCounterEXT,"Vb":_emscripten_glReadPixels,"Ub":_emscripten_glReleaseShaderCompiler,"Tb":_emscripten_glRenderbufferStorage,"Sb":_emscripten_glSampleCoverage,"Rb":_emscripten_glScissor,"Qb":_emscripten_glShaderBinary,"Pb":_emscripten_glShaderSource,"Ob":_emscripten_glStencilFunc,"Nb":_emscripten_glStencilFuncSeparate,"Mb":_emscripten_glStencilMask,"Lb":_emscripten_glStencilMaskSeparate,"Kb":_emscripten_glStencilOp,"Jb":_emscripten_glStencilOpSeparate,"Ib":_emscripten_glTexImage2D,"Hb":_emscripten_glTexParameterf,"Gb":_emscripten_glTexParameterfv,"Fb":_emscripten_glTexParameteri,"Eb":_emscripten_glTexParameteriv,"Db":_emscripten_glTexSubImage2D,"Cb":_emscripten_glUniform1f,"Bb":_emscripten_glUniform1fv,"Ab":_emscripten_glUniform1i,"zb":_emscripten_glUniform1iv,"yb":_emscripten_glUniform2f,"xb":_emscripten_glUniform2fv,"wb":_emscripten_glUniform2i,"ub":_emscripten_glUniform2iv,"tb":_emscripten_glUniform3f,"sb":_emscripten_glUniform3fv,"rb":_emscripten_glUniform3i,"qb":_emscripten_glUniform3iv,"pb":_emscripten_glUniform4f,"ob":_emscripten_glUniform4fv,"nb":_emscripten_glUniform4i,"mb":_emscripten_glUniform4iv,"lb":_emscripten_glUniformMatrix2fv,"kb":_emscripten_glUniformMatrix3fv,"jb":_emscripten_glUniformMatrix4fv,"ib":_emscripten_glUseProgram,"hb":_emscripten_glValidateProgram,"gb":_emscripten_glVertexAttrib1f,"fb":_emscripten_glVertexAttrib1fv,"eb":_emscripten_glVertexAttrib2f,"db":_emscripten_glVertexAttrib2fv,"cb":_emscripten_glVertexAttrib3f,"bb":_emscripten_glVertexAttrib3fv,"ab":_emscripten_glVertexAttrib4f,"$a":_emscripten_glVertexAttrib4fv,"_a":_emscripten_glVertexAttribDivisor,"Za":_emscripten_glVertexAttribPointer,"Ya":_emscripten_glViewport,"yd":_emscripten_has_threading_support,"xd":_emscripten_memcpy_big,"wd":_emscripten_receive_on_main_thread_js,"vd":_emscripten_request_pointerlock,"ud":_emscripten_resize_heap,"Xa":_emscripten_run_script,"sd":_emscripten_sample_gamepad_data,"rd":_emscripten_set_canvas_element_size,"qd":_emscripten_set_click_callback_on_thread,"pd":_emscripten_set_fullscreenchange_callback_on_thread,"od":_emscripten_set_gamepadconnected_callback_on_thread,"nd":_emscripten_set_gamepaddisconnected_callback_on_thread,"md":_emscripten_set_keypress_callback_on_thread,"ld":_emscripten_set_main_loop,"kd":_emscripten_set_touchcancel_callback_on_thread,"jd":_emscripten_set_touchend_callback_on_thread,"id":_emscripten_set_touchmove_callback_on_thread,"hd":_emscripten_set_touchstart_callback_on_thread,"gd":_emscripten_supports_offscreencanvas,"fd":_emscripten_syscall,"Wa":_emscripten_webgl_do_commit_frame,"Va":_emscripten_webgl_do_create_context,"ed":_exit,"Ua":_glfwCreateWindow,"dd":_glfwDefaultWindowHints,"cd":_glfwDestroyWindow,"bd":_glfwGetCursorPos,"Ta":_glfwGetPrimaryMonitor,"k":_glfwGetTime,"ad":_glfwGetVideoModes,"$c":_glfwInit,"_c":_glfwMakeContextCurrent,"Zc":_glfwSetCharCallback,"Yc":_glfwSetCursorEnterCallback,"Xc":_glfwSetCursorPosCallback,"Vc":_glfwSetDropCallback,"Uc":_glfwSetErrorCallback,"Tc":_glfwSetKeyCallback,"Sc":_glfwSetMouseButtonCallback,"Rc":_glfwSetScrollCallback,"Qc":_glfwSetWindowIconifyCallback,"Pc":_glfwSetWindowShouldClose,"Oc":_glfwSetWindowSizeCallback,"Nc":_glfwSwapBuffers,"Mc":_glfwSwapInterval,"Ra":_glfwTerminate,"d":_glfwWindowHint,"Qa":_llvm_stackrestore,"Pa":_llvm_stacksave,"Lc":_pthread_cleanup_pop,"Kc":_pthread_cleanup_push,"m":_pthread_create,"Jc":_pthread_join,"Oa":_time,"Ic":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___emscripten_pthread_data_constructor=Module["___emscripten_pthread_data_constructor"]=function(){return Module["asm"]["Ad"].apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["Bd"].apply(null,arguments)};var ___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=function(){return Module["asm"]["Cd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_add_u64=Module["__emscripten_atomic_fetch_and_add_u64"]=function(){return Module["asm"]["Dd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_and_u64=Module["__emscripten_atomic_fetch_and_and_u64"]=function(){return Module["asm"]["Ed"].apply(null,arguments)};var __emscripten_atomic_fetch_and_or_u64=Module["__emscripten_atomic_fetch_and_or_u64"]=function(){return Module["asm"]["Fd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_sub_u64=Module["__emscripten_atomic_fetch_and_sub_u64"]=function(){return Module["asm"]["Gd"].apply(null,arguments)};var __emscripten_atomic_fetch_and_xor_u64=Module["__emscripten_atomic_fetch_and_xor_u64"]=function(){return Module["asm"]["Hd"].apply(null,arguments)};var __register_pthread_ptr=Module["__register_pthread_ptr"]=function(){return Module["asm"]["Id"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["Jd"].apply(null,arguments)};var _emscripten_async_queue_call_on_thread=Module["_emscripten_async_queue_call_on_thread"]=function(){return Module["asm"]["Kd"].apply(null,arguments)};var _emscripten_async_queue_on_thread_=Module["_emscripten_async_queue_on_thread_"]=function(){return Module["asm"]["Ld"].apply(null,arguments)};var _emscripten_async_run_in_main_thread=Module["_emscripten_async_run_in_main_thread"]=function(){return Module["asm"]["Md"].apply(null,arguments)};var _emscripten_atomic_add_u64=Module["_emscripten_atomic_add_u64"]=function(){return Module["asm"]["Nd"].apply(null,arguments)};var _emscripten_atomic_and_u64=Module["_emscripten_atomic_and_u64"]=function(){return Module["asm"]["Od"].apply(null,arguments)};var _emscripten_atomic_cas_u64=Module["_emscripten_atomic_cas_u64"]=function(){return Module["asm"]["Pd"].apply(null,arguments)};var _emscripten_atomic_exchange_u64=Module["_emscripten_atomic_exchange_u64"]=function(){return Module["asm"]["Qd"].apply(null,arguments)};var _emscripten_atomic_load_f32=Module["_emscripten_atomic_load_f32"]=function(){return Module["asm"]["Rd"].apply(null,arguments)};var _emscripten_atomic_load_f64=Module["_emscripten_atomic_load_f64"]=function(){return Module["asm"]["Sd"].apply(null,arguments)};var _emscripten_atomic_load_u64=Module["_emscripten_atomic_load_u64"]=function(){return Module["asm"]["Td"].apply(null,arguments)};var _emscripten_atomic_or_u64=Module["_emscripten_atomic_or_u64"]=function(){return Module["asm"]["Ud"].apply(null,arguments)};var _emscripten_atomic_store_f32=Module["_emscripten_atomic_store_f32"]=function(){return Module["asm"]["Vd"].apply(null,arguments)};var _emscripten_atomic_store_f64=Module["_emscripten_atomic_store_f64"]=function(){return Module["asm"]["Wd"].apply(null,arguments)};var _emscripten_atomic_store_u64=Module["_emscripten_atomic_store_u64"]=function(){return Module["asm"]["Xd"].apply(null,arguments)};var _emscripten_atomic_sub_u64=Module["_emscripten_atomic_sub_u64"]=function(){return Module["asm"]["Yd"].apply(null,arguments)};var _emscripten_atomic_xor_u64=Module["_emscripten_atomic_xor_u64"]=function(){return Module["asm"]["Zd"].apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=function(){return Module["asm"]["_d"].apply(null,arguments)};var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=function(){return Module["asm"]["$d"].apply(null,arguments)};var _emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=function(){return Module["asm"]["ae"].apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=function(){return Module["asm"]["be"].apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=function(){return Module["asm"]["ce"].apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread=Module["_emscripten_sync_run_in_main_thread"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_0=Module["_emscripten_sync_run_in_main_thread_0"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_1=Module["_emscripten_sync_run_in_main_thread_1"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_2=Module["_emscripten_sync_run_in_main_thread_2"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_3=Module["_emscripten_sync_run_in_main_thread_3"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_5=Module["_emscripten_sync_run_in_main_thread_5"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_6=Module["_emscripten_sync_run_in_main_thread_6"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_7=Module["_emscripten_sync_run_in_main_thread_7"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _emscripten_sync_run_in_main_thread_xprintf_varargs=Module["_emscripten_sync_run_in_main_thread_xprintf_varargs"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _emscripten_webgl_commit_frame=Module["_emscripten_webgl_commit_frame"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _proxy_main=Module["_proxy_main"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var _pthread_self=Module["_pthread_self"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var establishStackSpace=Module["establishStackSpace"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["He"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Ie"].apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["De"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};Module["asm"]=asm;Module["establishStackSpace"]=establishStackSpace;Module["dynCall_ii"]=dynCall_ii;if(memoryInitializer&&!ENVIRONMENT_IS_PTHREAD){if(!isDataURI(memoryInitializer)){memoryInitializer=locateFile(memoryInitializer)}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module["memoryInitializerRequest"])delete Module["memoryInitializerRequest"].response;removeRunDependency("memory initializer")};var doBrowserLoad=function(){Module["readAsync"](memoryInitializer,applyMemoryInitializer,function(){throw"could not load memory initializer "+memoryInitializer})};if(Module["memoryInitializerRequest"]){var useRequest=function(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}applyMemoryInitializer(response)};if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{PThread.terminateAllThreads();ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(ENVIRONMENT_IS_PTHREAD)console.error("Pthread aborting at "+(new Error).stack);if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}if(!ENVIRONMENT_IS_PTHREAD)Module["noExitRuntime"]=true;if(!ENVIRONMENT_IS_PTHREAD)run(); diff --git a/examples/web/physac/physics_shatter.wasm b/examples/web/physac/physics_shatter.wasm new file mode 100644 index 0000000..428de8c Binary files /dev/null and b/examples/web/physac/physics_shatter.wasm differ diff --git a/examples/web/physac/physics_shatter.worker.js b/examples/web/physac/physics_shatter.worker.js new file mode 100644 index 0000000..3878b57 --- /dev/null +++ b/examples/web/physac/physics_shatter.worker.js @@ -0,0 +1,184 @@ +// Copyright 2015 The Emscripten Authors. All rights reserved. +// Emscripten is available under two separate licenses, the MIT license and the +// University of Illinois/NCSA Open Source License. Both these licenses can be +// found in the LICENSE file. + +// Pthread Web Worker startup routine: +// This is the entry point file that is loaded first by each Web Worker +// that executes pthreads on the Emscripten application. + +// Thread-local: +var threadInfoStruct = 0; // Info area for this thread in Emscripten HEAP (shared). If zero, this worker is not currently hosting an executing pthread. +var selfThreadId = 0; // The ID of this thread. 0 if not hosting a pthread. +var parentThreadId = 0; // The ID of the parent pthread that launched this thread. +var tempDoublePtr = 0; // A temporary memory area for global float and double marshalling operations. + +// Thread-local: Each thread has its own allocated stack space. +var STACK_BASE = 0; +var STACKTOP = 0; +var STACK_MAX = 0; + +// These are system-wide memory area parameters that are set at main runtime startup in main thread, and stay constant throughout the application. +var buffer; // All pthreads share the same Emscripten HEAP as SharedArrayBuffer with the main execution thread. +var DYNAMICTOP_PTR = 0; +var DYNAMIC_BASE = 0; + +var ENVIRONMENT_IS_PTHREAD = true; +var PthreadWorkerInit = {}; + +// performance.now() is specced to return a wallclock time in msecs since that Web Worker/main thread launched. However for pthreads this can cause +// subtle problems in emscripten_get_now() as this essentially would measure time from pthread_create(), meaning that the clocks between each threads +// would be wildly out of sync. Therefore sync all pthreads to the clock on the main browser thread, so that different threads see a somewhat +// coherent clock across each of them (+/- 0.1msecs in testing) +var __performance_now_clock_drift = 0; + +// Cannot use console.log or console.error in a web worker, since that would risk a browser deadlock! https://bugzilla.mozilla.org/show_bug.cgi?id=1049091 +// Therefore implement custom logging facility for threads running in a worker, which queue the messages to main thread to print. +var Module = {}; + + +// When error objects propagate from Web Worker to main thread, they lose helpful call stack and thread ID information, so print out errors early here, +// before that happens. +this.addEventListener('error', function(e) { + if (e.message.indexOf('SimulateInfiniteLoop') != -1) return e.preventDefault(); + + var errorSource = ' in ' + e.filename + ':' + e.lineno + ':' + e.colno; + console.error('Pthread ' + selfThreadId + ' uncaught exception' + (e.filename || e.lineno || e.colno ? errorSource : "") + ': ' + e.message + '. Error object:'); + console.error(e.error); +}); + +function threadPrint() { + var text = Array.prototype.slice.call(arguments).join(' '); + console.log(text); +} +function threadPrintErr() { + var text = Array.prototype.slice.call(arguments).join(' '); + console.error(text); + console.error(new Error().stack); +} +function threadAlert() { + var text = Array.prototype.slice.call(arguments).join(' '); + postMessage({cmd: 'alert', text: text, threadId: selfThreadId}); +} +out = threadPrint; +err = threadPrintErr; +this.alert = threadAlert; + +Module['instantiateWasm'] = function(info, receiveInstance) { + // Instantiate from the module posted from the main thread. + // We can just use sync instantiation in the worker. + instance = new WebAssembly.Instance(wasmModule, info); + // We don't need the module anymore; new threads will be spawned from the main thread. + wasmModule = null; + receiveInstance(instance); // The second 'module' parameter is intentionally null here, we don't need to keep a ref to the Module object from here. + return instance.exports; +} + +var wasmModule; +var wasmMemory; + +this.onmessage = function(e) { + try { + if (e.data.cmd === 'load') { // Preload command that is called once per worker to parse and load the Emscripten code. + // Initialize the thread-local field(s): + tempDoublePtr = e.data.tempDoublePtr; + + // Initialize the global "process"-wide fields: + DYNAMIC_BASE = e.data.DYNAMIC_BASE; + DYNAMICTOP_PTR = e.data.DYNAMICTOP_PTR; + + // The Wasm module will have import fields for STACKTOP and STACK_MAX. At 'load' stage of Worker startup, we are just + // spawning this Web Worker to act as a host for future created pthreads, i.e. we do not have a pthread to start up here yet. + // (A single Worker can also host multiple pthreads throughout its lifetime, shutting down a pthread will not shut down its hosting Worker, + // but the Worker is reused for later spawned pthreads). The 'run' stage below will actually start running a pthread. + // The stack space for a pthread is allocated and deallocated when a pthread is actually run, not yet at Worker 'load' stage. + // However, the WebAssembly module we are loading up here has import fields for STACKTOP and STACK_MAX, which it needs to get filled in + // immediately at Wasm Module instantiation time. The values of these will not get used until pthread is actually running some code, so + // we'll proceed to set up temporary invalid values for these fields for import purposes. Then whenever a pthread is launched at 'run' stage + // below, these values are rewritten to establish proper stack area for the particular pthread. + Module['STACK_MAX'] = Module['STACKTOP'] = 0x7FFFFFFF; + + // Module and memory were sent from main thread + wasmModule = e.data.wasmModule; + wasmMemory = e.data.wasmMemory; + buffer = wasmMemory.buffer; + + PthreadWorkerInit = e.data.PthreadWorkerInit; + + if (typeof e.data.urlOrBlob === 'string') { + importScripts(e.data.urlOrBlob); + } else { + var objectUrl = URL.createObjectURL(e.data.urlOrBlob); + importScripts(objectUrl); + URL.revokeObjectURL(objectUrl); + } + + + if (typeof FS !== 'undefined' && typeof FS.createStandardStreams === 'function') FS.createStandardStreams(); + postMessage({ cmd: 'loaded' }); + } else if (e.data.cmd === 'objectTransfer') { + PThread.receiveObjectTransfer(e.data); + } else if (e.data.cmd === 'run') { // This worker was idle, and now should start executing its pthread entry point. + __performance_now_clock_drift = performance.now() - e.data.time; // Sync up to the clock of the main thread. + threadInfoStruct = e.data.threadInfoStruct; + __register_pthread_ptr(threadInfoStruct, /*isMainBrowserThread=*/0, /*isMainRuntimeThread=*/0); // Pass the thread address inside the asm.js scope to store it for fast access that avoids the need for a FFI out. + selfThreadId = e.data.selfThreadId; + parentThreadId = e.data.parentThreadId; + // Establish the stack frame for this thread in global scope + STACK_BASE = STACKTOP = e.data.stackBase; + STACK_MAX = STACK_BASE + e.data.stackSize; + // Call inside asm.js/wasm module to set up the stack frame for this pthread in asm.js/wasm module scope + Module['establishStackSpace'](e.data.stackBase, e.data.stackBase + e.data.stackSize); + + PThread.receiveObjectTransfer(e.data); + PThread.setThreadStatus(_pthread_self(), 1/*EM_THREAD_STATUS_RUNNING*/); + + try { + // pthread entry points are always of signature 'void *ThreadMain(void *arg)' + // Native codebases sometimes spawn threads with other thread entry point signatures, + // such as void ThreadMain(void *arg), void *ThreadMain(), or void ThreadMain(). + // That is not acceptable per C/C++ specification, but x86 compiler ABI extensions + // enable that to work. If you find the following line to crash, either change the signature + // to "proper" void *ThreadMain(void *arg) form, or try linking with the Emscripten linker + // flag -s EMULATE_FUNCTION_POINTER_CASTS=1 to add in emulation for this x86 ABI extension. + var result = Module['dynCall_ii'](e.data.start_routine, e.data.arg); + + + } catch(e) { + if (e === 'Canceled!') { + PThread.threadCancel(); + return; + } else if (e === 'SimulateInfiniteLoop' || e === 'pthread_exit') { + return; + } else { + Atomics.store(HEAPU32, (threadInfoStruct + 4 /*C_STRUCTS.pthread.threadExitCode*/ ) >> 2, (e instanceof ExitStatus) ? e.status : -2 /*A custom entry specific to Emscripten denoting that the thread crashed.*/); + Atomics.store(HEAPU32, (threadInfoStruct + 0 /*C_STRUCTS.pthread.threadStatus*/ ) >> 2, 1); // Mark the thread as no longer running. + _emscripten_futex_wake(threadInfoStruct + 0 /*C_STRUCTS.pthread.threadStatus*/, 0x7FFFFFFF/*INT_MAX*/); // Wake all threads waiting on this thread to finish. + if (!(e instanceof ExitStatus)) throw e; + } + } + // The thread might have finished without calling pthread_exit(). If so, then perform the exit operation ourselves. + // (This is a no-op if explicit pthread_exit() had been called prior.) + if (!Module['noExitRuntime']) PThread.threadExit(result); + } else if (e.data.cmd === 'cancel') { // Main thread is asking for a pthread_cancel() on this thread. + if (threadInfoStruct && PThread.thisThreadCancelState == 0/*PTHREAD_CANCEL_ENABLE*/) { + PThread.threadCancel(); + } + } else if (e.data.target === 'setimmediate') { + // no-op + } else if (e.data.cmd === 'processThreadQueue') { + if (threadInfoStruct) { // If this thread is actually running? + _emscripten_current_thread_process_queued_calls(); + } + } else { + err('worker.js received unknown command ' + e.data.cmd); + console.error(e.data); + } + } catch(e) { + console.error('worker.js onmessage() captured an uncaught exception: ' + e); + console.error(e.stack); + throw e; + } +} + + diff --git a/examples/web/shaders/shaders_custom_uniform.c b/examples/web/shaders/shaders_custom_uniform.c index 4c3fbe1..77f84bd 100644 --- a/examples/web/shaders/shaders_custom_uniform.c +++ b/examples/web/shaders/shaders_custom_uniform.c @@ -22,25 +22,31 @@ #include #endif +#if defined(PLATFORM_DESKTOP) + #define GLSL_VERSION 330 +#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB + #define GLSL_VERSION 100 +#endif + //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world -Camera camera = {{ 3.0f, 3.0f, 3.0f }, { 0.0f, 1.5f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; +Camera camera = { 0 }; -Model dwarf; // OBJ model -Texture2D texture; // Model texture -Shader shader; // Postpro shader +Model model = { 0 }; // Model data +Texture2D texture = { 0 }; // Model texture +Shader shader = { 0 }; // Postpro shader Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position -int swirlCenterLoc; -float swirlCenter[2]; +int swirlCenterLoc = 0; +float swirlCenter[2] = { 0.0f }; -RenderTexture2D target; +RenderTexture2D target = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -48,7 +54,7 @@ RenderTexture2D target; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -57,23 +63,31 @@ int main(void) SetConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available) InitWindow(screenWidth, screenHeight, "raylib [shaders] example - custom uniform variable"); - dwarf = LoadModel("resources/model/dwarf.obj"); // Load OBJ model - texture = LoadTexture("resources/model/dwarf_diffuse.png"); // Load model texture - dwarf.material.maps[MAP_DIFFUSE].texture = texture; // Set dwarf model diffuse texture + // Define the camera to look into our 3d world + camera.position = (Vector3){ 8.0f, 8.0f, 8.0f }; + camera.target = (Vector3){ 0.0f, 1.5f, 0.0f }; + camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; + camera.fovy = 45.0f; + camera.type = CAMERA_PERSPECTIVE; + + model = LoadModel("resources/models/barracks.obj"); // Load OBJ model + texture = LoadTexture("resources/models/barracks_diffuse.png"); // Load model texture + model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set model diffuse texture + + // Load postprocessing shader + // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader + shader = LoadShader(0, FormatText("resources/shaders/glsl%i/swirl.fs", GLSL_VERSION)); - shader = LoadShader("resources/shaders/glsl100/base.vs", - "resources/shaders/glsl100/swirl.fs"); // Load postpro shader - // Get variable (uniform) location on the shader to connect with the program // NOTE: If uniform variable could not be found in the shader, function returns -1 swirlCenterLoc = GetShaderLocation(shader, "center"); - + swirlCenter[0] = (float)screenWidth/2; swirlCenter[1] = (float)screenHeight/2; // Create a RenderTexture2D to be used for render to texture target = LoadRenderTexture(screenWidth, screenHeight); - + // Setup orbital camera SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode @@ -82,7 +96,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -94,7 +108,7 @@ int main(void) //-------------------------------------------------------------------------------------- UnloadShader(shader); // Unload shader UnloadTexture(texture); // Unload texture - UnloadModel(dwarf); // Unload model + UnloadModel(model); // Unload model CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -115,9 +129,9 @@ void UpdateDrawFrame(void) swirlCenter[1] = screenHeight - mousePosition.y; // Send new value to the shader to be used on drawing - SetShaderValue(shader, swirlCenterLoc, swirlCenter, 2); + SetShaderValue(shader, swirlCenterLoc, swirlCenter, UNIFORM_VEC2); - UpdateCamera(&camera); // Update internal camera and our camera + UpdateCamera(&camera); // Update camera //---------------------------------------------------------------------------------- // Draw @@ -127,27 +141,29 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); BeginTextureMode(target); // Enable drawing to texture + ClearBackground(RAYWHITE); // Clear texture background - Begin3dMode(camera); + BeginMode3D(camera); // Begin 3d mode drawing - DrawModel(dwarf, position, 2.0f, WHITE); // Draw 3d model with texture + DrawModel(model, position, 0.5f, WHITE); // Draw 3d model with texture DrawGrid(10, 1.0f); // Draw a grid - End3dMode(); - + EndMode3D(); // End 3d mode drawing, returns to orthographic 2d mode + DrawText("TEXT DRAWN IN RENDER TEXTURE", 200, 10, 30, RED); - - EndTextureMode(); // End drawing to texture (now we have a texture available for next passes) - + + EndTextureMode(); // End drawing to texture (now we have a texture available for next passes) + BeginShaderMode(shader); - + // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom) DrawTextureRec(target.texture, (Rectangle){ 0, 0, target.texture.width, -target.texture.height }, (Vector2){ 0, 0 }, WHITE); - + EndShaderMode(); - - DrawText("(c) Dwarf 3D model by David Moreno", screenWidth - 200, screenHeight - 20, 10, GRAY); + + // Draw some 2d text over drawn texture + DrawText("(c) Barracks 3D model by Alberto Cano", screenWidth - 220, screenHeight - 20, 10, GRAY); DrawFPS(10, 10); diff --git a/examples/web/shaders/shaders_custom_uniform.data b/examples/web/shaders/shaders_custom_uniform.data new file mode 100644 index 0000000..0392ad9 --- /dev/null +++ b/examples/web/shaders/shaders_custom_uniform.data @@ -0,0 +1,24148 @@ +# (c) 2018 Medieval Assets Pack by Alberto Cano +# Licensed as Creative Commons Attribution-NonCommercial 4.0 + +# +# object barracks +# + +v -8.9771 5.2854 3.5742 +v -8.9771 -0.0497 3.5742 +v -8.9771 -0.0497 7.1735 +v -9.5268 8.3033 7.1735 +v -8.9770 5.2854 10.7728 +v -8.9770 -0.0497 10.7728 +v 4.0289 -0.0497 10.7728 +v 4.0289 5.2854 10.7728 +v 4.0289 5.2854 3.5742 +v 4.0289 -0.0497 3.5742 +v 4.0289 -0.0497 7.1735 +v 4.0289 8.3033 7.1735 +v -9.2884 4.0591 7.1735 +v -9.2884 4.0831 7.5774 +v -9.3565 4.9996 7.5774 +v -9.3565 5.2929 7.1735 +v -9.3222 3.9731 7.8933 +v -9.2295 3.9731 7.8933 +v -9.2295 4.1051 7.8933 +v -9.3222 4.1051 7.8933 +v -9.3902 5.0827 7.7890 +v -9.2975 5.0827 7.7890 +v -9.2975 5.5092 7.1735 +v -9.3902 5.5092 7.1735 +v -9.3222 4.1051 6.4537 +v -9.2295 4.1051 6.4537 +v -9.2295 3.9731 6.4537 +v -9.3222 3.9731 6.4537 +v -9.3222 3.9731 6.5581 +v -9.2295 3.9731 6.5581 +v -9.2295 3.9271 7.1735 +v -9.3222 3.9271 7.1735 +v -9.4239 3.9731 7.7890 +v -9.4239 4.1051 7.7890 +v -9.4239 4.0831 7.5774 +v -9.3902 4.9996 7.5774 +v -9.3902 5.2929 7.1735 +v -9.4239 4.1051 6.5581 +v -9.4239 3.9731 6.5581 +v -9.4239 4.0917 6.7696 +v -9.4239 3.9271 7.1735 +v -9.4239 4.0591 7.1735 +v -9.3565 4.9996 6.7696 +v -9.2884 4.0917 6.7696 +v -9.2975 5.0827 6.5581 +v -9.3902 5.0827 6.5581 +v -9.2295 3.9731 7.7890 +v -9.3222 3.9731 7.7890 +v -9.3902 4.9996 6.7696 +v -9.3222 4.0831 7.5774 +v -9.3222 4.0917 6.7696 +v -9.3222 4.0591 7.1735 +v -9.3222 4.1051 6.5581 +v -9.2295 4.1051 6.5581 +v -9.3222 4.1051 7.7890 +v -9.2295 4.1051 7.7890 +v -9.4239 3.9731 7.8933 +v -9.4239 4.1051 7.8933 +v -9.4239 4.1051 6.4537 +v -9.4239 3.9731 6.4537 +v -8.7325 0.3307 10.8308 +v -8.7325 0.3307 10.9332 +v 3.8501 0.3307 10.9332 +v 3.8501 0.3307 10.8308 +v -8.7325 -0.0497 10.9332 +v 3.8501 -0.0497 10.9332 +v -9.0350 0.3307 3.6224 +v -9.1375 0.3307 3.6224 +v -9.1375 0.3307 10.7569 +v -9.0350 0.3307 10.7569 +v -9.1375 -0.0497 3.6224 +v -9.1375 -0.0497 10.7569 +v 0.8922 7.8216 7.1735 +v 1.0445 5.3128 3.2348 +v -2.5490 5.2357 3.2348 +v -2.8536 7.3417 7.1735 +v -6.5995 7.8216 7.1735 +v -6.1424 5.0816 11.1122 +v -2.5490 5.0816 11.1122 +v 1.0316 4.9710 3.2348 +v -2.5747 4.8939 3.2348 +v -9.7359 5.0816 3.2348 +v -9.7875 4.7398 3.2348 +v -10.3453 8.4824 7.1735 +v -10.3453 8.8242 7.1735 +v -9.7359 5.0816 11.1122 +v -9.7359 4.7398 11.1122 +v 4.6380 5.0816 11.1122 +v 4.6380 4.7398 11.1122 +v 4.6380 8.4824 7.1735 +v 4.6380 8.8242 7.1735 +v 0.8922 7.4798 7.1735 +v -2.8536 6.9999 7.1735 +v -6.1424 5.1587 3.2348 +v 4.6380 5.3898 3.2348 +v 1.0445 5.0816 11.1122 +v -6.1811 4.8169 3.2348 +v 4.6380 5.0480 3.2348 +v 1.0445 4.7398 11.1122 +v -6.1424 4.7398 11.1122 +v -6.5995 7.4798 7.1735 +v -11.3392 8.6350 7.5749 +v -11.3392 8.6350 6.7721 +v -11.3392 7.8323 6.7721 +v -11.3392 7.8323 7.5749 +v -10.3540 7.4474 6.8345 +v -10.3540 8.1255 6.8345 +v -9.3564 7.9260 6.8671 +v -9.3564 7.3131 6.8671 +v -9.3564 7.3131 7.4800 +v -10.3540 7.4474 7.5126 +v -9.3564 7.9260 7.4800 +v -10.3540 8.1255 7.5126 +v 4.0029 0.3307 10.4457 +v 4.1053 0.3307 10.4457 +v 4.1053 0.3307 7.9969 +v 4.0029 0.3307 7.9969 +v 4.1053 -0.0497 10.4457 +v 4.1053 -0.0497 7.9969 +v -10.2556 8.5899 7.7509 +v -10.2924 8.4159 7.7509 +v -9.2822 8.2024 7.7509 +v -9.2454 8.3764 7.7509 +v -9.2064 8.5611 7.2760 +v -9.1696 8.7351 7.2760 +v -10.1798 8.9486 7.2760 +v -10.2166 8.7745 7.2760 +v -9.2039 8.5728 7.1735 +v -9.1672 8.7468 7.1735 +v -10.1773 8.9603 7.1735 +v -10.2141 8.7863 7.1735 +v -9.2822 8.2024 6.5962 +v -10.2924 8.4159 6.5962 +v -10.2556 8.5899 6.5962 +v -9.2454 8.3764 6.5962 +v -9.2064 8.5611 7.0711 +v -9.1696 8.7351 7.0711 +v -10.1798 8.9486 7.0711 +v -10.2166 8.7745 7.0711 +v -9.3847 8.1121 7.7509 +v -8.3745 7.8986 7.7509 +v -8.3377 8.0727 7.7509 +v -9.3479 8.2862 7.7509 +v -8.2619 8.4314 7.2760 +v -9.2721 8.6448 7.2760 +v -8.2987 8.2573 7.2760 +v -8.2594 8.4431 7.1735 +v -9.2696 8.6566 7.1735 +v -8.2962 8.2690 7.1735 +v -8.3377 8.0727 6.5962 +v -8.3745 7.8986 6.5962 +v -9.3847 8.1121 6.5962 +v -9.3479 8.2862 6.5962 +v -8.2619 8.4314 7.0711 +v -9.2721 8.6448 7.0711 +v -8.2987 8.2573 7.0711 +v -8.5801 7.8589 7.7509 +v -7.5630 7.6811 7.7509 +v -7.5324 7.8564 7.7509 +v -8.5495 8.0341 7.7509 +v -7.4693 8.2175 7.2760 +v -8.4864 8.3952 7.2760 +v -7.4999 8.0423 7.2760 +v -7.4672 8.2293 7.1735 +v -8.4843 8.4070 7.1735 +v -7.4978 8.0541 7.1735 +v -7.5324 7.8564 6.5962 +v -7.5630 7.6811 6.5962 +v -8.5801 7.8589 6.5962 +v -8.5495 8.0341 6.5962 +v -7.4693 8.2175 7.0711 +v -8.4864 8.3952 7.0711 +v -7.4999 8.0423 7.0711 +v -7.6752 7.6154 7.7509 +v -6.6503 7.4907 7.7509 +v -6.6288 7.6673 7.7509 +v -7.6538 7.7920 7.7509 +v -6.5846 8.0312 7.2760 +v -7.6095 8.1559 7.2760 +v -6.6061 7.8546 7.2760 +v -6.5831 8.0431 7.1735 +v -7.6081 8.1678 7.1735 +v -6.6046 7.8665 7.1735 +v -6.6288 7.6673 6.5962 +v -6.6503 7.4907 6.5962 +v -7.6752 7.6154 6.5962 +v -7.6538 7.7920 6.5962 +v -6.5846 8.0312 7.0711 +v -7.6095 8.1559 7.0711 +v -6.6061 7.8546 7.0711 +v -6.7532 7.4096 7.7509 +v -5.7283 7.2850 7.7509 +v -5.7068 7.4616 7.7509 +v -6.7318 7.5862 7.7509 +v -5.6626 7.8255 7.2760 +v -6.6875 7.9502 7.2760 +v -5.6840 7.6489 7.2760 +v -5.6611 7.8374 7.1735 +v -6.6861 7.9620 7.1735 +v -5.6826 7.6608 7.1735 +v -5.7068 7.4616 6.5962 +v -5.7283 7.2850 6.5962 +v -6.7532 7.4096 6.5962 +v -6.7318 7.5862 6.5962 +v -5.6626 7.8255 7.0711 +v -6.6875 7.9502 7.0711 +v -5.6840 7.6489 7.0711 +v -5.7708 7.2429 7.7509 +v -4.7459 7.1183 7.7509 +v -4.7244 7.2949 7.7509 +v -5.7493 7.4196 7.7509 +v -4.6801 7.6588 7.2760 +v -5.7051 7.7835 7.2760 +v -4.7016 7.4822 7.2760 +v -4.6787 7.6707 7.1735 +v -5.7036 7.7954 7.1735 +v -4.7002 7.4941 7.1735 +v -4.7244 7.2949 6.5962 +v -4.7459 7.1183 6.5962 +v -5.7708 7.2429 6.5962 +v -5.7493 7.4196 6.5962 +v -4.6801 7.6588 7.0711 +v -5.7051 7.7835 7.0711 +v -4.7016 7.4822 7.0711 +v -5.0398 7.1215 7.7509 +v -4.0088 7.0662 7.7509 +v -3.9993 7.2439 7.7509 +v -5.0303 7.2991 7.7509 +v -3.9796 7.6099 7.2760 +v -5.0107 7.6652 7.2760 +v -3.9892 7.4323 7.2760 +v -3.9790 7.6219 7.1735 +v -5.0100 7.6771 7.1735 +v -3.9885 7.4443 7.1735 +v -3.9993 7.2439 6.5962 +v -4.0088 7.0662 6.5962 +v -5.0398 7.1215 6.5962 +v -5.0303 7.2991 6.5962 +v -3.9796 7.6099 7.0711 +v -5.0107 7.6652 7.0711 +v -3.9892 7.4323 7.0711 +v 1.5002 7.7939 7.7509 +v 2.5251 7.9185 7.7508 +v 2.5036 8.0951 7.7508 +v 1.4787 7.9704 7.7509 +v 1.4344 8.3344 7.2760 +v 1.4559 8.1578 7.2760 +v 2.4594 8.4590 7.2760 +v 2.4809 8.2824 7.2760 +v 1.4545 8.1696 7.1735 +v 1.4330 8.3463 7.1735 +v 2.4579 8.4709 7.1735 +v 2.4794 8.2943 7.1735 +v 2.5036 8.0951 6.5962 +v 2.5251 7.9185 6.5962 +v 1.5002 7.7939 6.5962 +v 1.4787 7.9704 6.5962 +v 1.4559 8.1578 7.0711 +v 1.4344 8.3344 7.0711 +v 2.4594 8.4590 7.0711 +v 2.4809 8.2824 7.0711 +v 0.5583 7.8497 7.7509 +v 0.5643 7.6719 7.7509 +v 1.5962 7.7068 7.7509 +v 1.5902 7.8846 7.7509 +v 1.5778 8.2509 7.2760 +v 0.5459 8.2161 7.2760 +v 0.5519 8.0383 7.2760 +v 1.5774 8.2629 7.1735 +v 0.5455 8.2281 7.1735 +v 0.5515 8.0503 7.1735 +v 1.5962 7.7068 6.5962 +v 0.5643 7.6719 6.5962 +v 0.5583 7.8498 6.5962 +v 1.5902 7.8846 6.5962 +v 0.5459 8.2161 7.0711 +v 1.5778 8.2509 7.0711 +v 0.5519 8.0383 7.0711 +v -0.4450 7.6654 7.7509 +v -0.4298 7.4881 7.7509 +v 0.5989 7.5765 7.7509 +v 0.5837 7.7538 7.7509 +v 0.5523 8.1190 7.2760 +v -0.4764 8.0306 7.2760 +v -0.4612 7.8534 7.2760 +v 0.5513 8.1310 7.1735 +v -0.4774 8.0426 7.1735 +v -0.4622 7.8653 7.1735 +v 0.5989 7.5765 6.5962 +v -0.4298 7.4881 6.5962 +v -0.4450 7.6654 6.5962 +v 0.5837 7.7538 6.5962 +v -0.4764 8.0306 7.0711 +v 0.5523 8.1190 7.0711 +v -0.4612 7.8534 7.0711 +v -1.3304 7.4633 7.7509 +v -1.3090 7.2867 7.7509 +v -0.2840 7.4113 7.7509 +v -0.3055 7.5879 7.7509 +v -0.3498 7.9518 7.2760 +v -1.3747 7.8272 7.2760 +v -1.3532 7.6506 7.2760 +v -0.3512 7.9637 7.1735 +v -1.3761 7.8391 7.1735 +v -1.3547 7.6625 7.1735 +v -0.2840 7.4113 6.5962 +v -1.3090 7.2867 6.5962 +v -1.3304 7.4633 6.5962 +v -0.3055 7.5879 6.5962 +v -1.3747 7.8272 7.0711 +v -0.3498 7.9518 7.0711 +v -1.3532 7.6506 7.0711 +v -2.2525 7.2647 7.7509 +v -2.2310 7.0881 7.7509 +v -1.2061 7.2127 7.7509 +v -1.2275 7.3893 7.7509 +v -1.2718 7.7532 7.2760 +v -2.2967 7.6286 7.2760 +v -2.2752 7.4520 7.2760 +v -1.2732 7.7651 7.1735 +v -2.2982 7.6405 7.1735 +v -2.2767 7.4639 7.1735 +v -1.2061 7.2127 6.5962 +v -2.2310 7.0881 6.5962 +v -2.2525 7.2647 6.5962 +v -1.2275 7.3893 6.5962 +v -2.2967 7.6286 7.0711 +v -1.2718 7.7532 7.0711 +v -2.2752 7.4520 7.0711 +v -3.2517 7.1204 7.7509 +v -3.2457 6.9426 7.7509 +v -2.2138 6.9774 7.7509 +v -2.2198 7.1552 7.7509 +v -2.2321 7.5216 7.2760 +v -3.2640 7.4868 7.2760 +v -3.2580 7.3090 7.2760 +v -2.2325 7.5336 7.1735 +v -3.2644 7.4988 7.1735 +v -3.2584 7.3210 7.1735 +v -2.2138 6.9774 6.5962 +v -3.2457 6.9426 6.5962 +v -3.2517 7.1204 6.5962 +v -2.2198 7.1552 6.5962 +v -3.2640 7.4868 7.0711 +v -2.2321 7.5216 7.0711 +v -3.2580 7.3090 7.0711 +v -4.0502 7.1836 7.7509 +v -4.0717 7.0070 7.7509 +v -3.0468 6.8823 7.7509 +v -3.0253 7.0589 7.7509 +v -2.9810 7.4229 7.2760 +v -4.0060 7.5475 7.2760 +v -4.0275 7.3709 7.2760 +v -2.9796 7.4347 7.1735 +v -4.0045 7.5594 7.1735 +v -4.0260 7.3828 7.1735 +v -3.0468 6.8823 6.5962 +v -4.0717 7.0070 6.5962 +v -4.0502 7.1836 6.5962 +v -3.0253 7.0589 6.5962 +v -4.0060 7.5475 7.0711 +v -2.9810 7.4229 7.0711 +v -4.0275 7.3709 7.0711 +v 2.5178 8.0423 7.7509 +v 3.5427 8.1670 7.7508 +v 3.5213 8.3436 7.7508 +v 2.4963 8.2189 7.7509 +v 2.4521 8.5829 7.2760 +v 2.4735 8.4063 7.2760 +v 3.4770 8.7075 7.2760 +v 3.4985 8.5309 7.2760 +v 2.4721 8.4181 7.1735 +v 2.4506 8.5947 7.1735 +v 3.4756 8.7194 7.1735 +v 3.4970 8.5428 7.1735 +v 3.5213 8.3436 6.5962 +v 3.5427 8.1670 6.5962 +v 2.5178 8.0423 6.5962 +v 2.4963 8.2189 6.5962 +v 2.4735 8.4063 7.0711 +v 2.4521 8.5829 7.0711 +v 3.4770 8.7075 7.0711 +v 3.4985 8.5309 7.0711 +v 3.3558 8.2956 7.7509 +v 4.3808 8.4202 7.7508 +v 4.3593 8.5968 7.7508 +v 3.3344 8.4722 7.7509 +v 3.2901 8.8361 7.2760 +v 3.3116 8.6595 7.2760 +v 4.3150 8.9607 7.2760 +v 4.3365 8.7841 7.2760 +v 3.3101 8.6714 7.1735 +v 3.2887 8.8480 7.1735 +v 4.3136 8.9726 7.1735 +v 4.3351 8.7960 7.1735 +v 4.3593 8.5968 6.5962 +v 4.3808 8.4202 6.5962 +v 3.3558 8.2956 6.5962 +v 3.3344 8.4722 6.5962 +v 3.3116 8.6595 7.0711 +v 3.2901 8.8361 7.0711 +v 4.3150 8.9607 7.0711 +v 4.3365 8.7841 7.0711 +v -6.1361 2.4706 3.5553 +v -6.5400 2.4946 3.5553 +v -6.5299 3.4112 3.5442 +v -6.1261 3.7044 3.5442 +v -6.8559 2.3847 3.5216 +v -6.8559 2.3847 3.6143 +v -6.8559 2.5166 3.6143 +v -6.8559 2.5166 3.5216 +v -6.7415 3.4943 3.5105 +v -6.7415 3.4943 3.6032 +v -6.1261 3.9208 3.6032 +v -6.1261 3.9208 3.5105 +v -5.4163 2.5166 3.5216 +v -5.4163 2.5166 3.6143 +v -5.4163 2.3847 3.6143 +v -5.4163 2.3847 3.5216 +v -5.5207 2.3847 3.5216 +v -5.5207 2.3847 3.6143 +v -6.1361 2.3387 3.6143 +v -6.1361 2.3387 3.5216 +v -6.7515 2.3847 3.4199 +v -6.7515 2.5166 3.4199 +v -6.5400 2.4946 3.4199 +v -6.5300 3.4112 3.5105 +v -6.1261 3.7044 3.5105 +v -5.5207 2.5166 3.4199 +v -5.5207 2.3847 3.4199 +v -5.7322 2.5032 3.4199 +v -6.1361 2.3387 3.4199 +v -6.1361 2.4706 3.4199 +v -5.7222 3.4112 3.5442 +v -5.7322 2.5032 3.5553 +v -5.5106 3.4943 3.6032 +v -5.5106 3.4943 3.5105 +v -6.7516 2.3847 3.6143 +v -6.7515 2.3847 3.5216 +v -5.7222 3.4112 3.5105 +v -6.5400 2.4946 3.5216 +v -5.7322 2.5032 3.5216 +v -6.1361 2.4706 3.5216 +v -5.5207 2.5166 3.5216 +v -5.5207 2.5166 3.6143 +v -6.7515 2.5166 3.5216 +v -6.7516 2.5166 3.6143 +v -6.8559 2.3847 3.4199 +v -6.8559 2.5166 3.4199 +v -5.4164 2.5166 3.4199 +v -5.4164 2.3847 3.4199 +v 1.0773 2.4706 3.5553 +v 0.6735 2.4946 3.5553 +v 0.6835 3.4112 3.5442 +v 1.0874 3.7044 3.5442 +v 0.3576 2.3847 3.5216 +v 0.3576 2.3847 3.6143 +v 0.3576 2.5166 3.6143 +v 0.3576 2.5166 3.5216 +v 0.4719 3.4943 3.5105 +v 0.4720 3.4943 3.6032 +v 1.0874 3.9208 3.6032 +v 1.0874 3.9208 3.5105 +v 1.7971 2.5166 3.5216 +v 1.7971 2.5166 3.6143 +v 1.7971 2.3847 3.6143 +v 1.7971 2.3847 3.5216 +v 1.6928 2.3847 3.5216 +v 1.6928 2.3847 3.6143 +v 1.0774 2.3387 3.6143 +v 1.0774 2.3387 3.5216 +v 0.4619 2.3847 3.4199 +v 0.4619 2.5166 3.4199 +v 0.6735 2.4946 3.4199 +v 0.6835 3.4112 3.5105 +v 1.0874 3.7044 3.5105 +v 1.6928 2.5166 3.4199 +v 1.6928 2.3847 3.4199 +v 1.4812 2.5032 3.4199 +v 1.0774 2.3387 3.4199 +v 1.0774 2.4706 3.4199 +v 1.4913 3.4112 3.5442 +v 1.4812 2.5032 3.5553 +v 1.7028 3.4943 3.6032 +v 1.7028 3.4943 3.5105 +v 0.4619 2.3847 3.6143 +v 0.4619 2.3847 3.5216 +v 1.4913 3.4112 3.5105 +v 0.6735 2.4946 3.5216 +v 1.4812 2.5032 3.5216 +v 1.0774 2.4706 3.5216 +v 1.6928 2.5166 3.5216 +v 1.6928 2.5166 3.6143 +v 0.4619 2.5166 3.5216 +v 0.4619 2.5166 3.6143 +v 0.3576 2.3847 3.4199 +v 0.3576 2.5166 3.4199 +v 1.7971 2.5166 3.4199 +v 1.7971 2.3847 3.4199 +v 11.6321 5.5867 2.0069 +v 11.4477 5.5867 0.6063 +v 10.0464 4.2732 0.3535 +v 10.0937 4.2732 2.8951 +v 12.7529 5.5867 2.8669 +v 12.2931 4.2732 4.5828 +v 14.1534 5.5867 2.6825 +v 15.0416 4.2732 4.2209 +v 15.0134 5.5867 1.5617 +v 16.7293 4.2732 2.0215 +v 14.8290 5.5867 0.1612 +v 16.3674 4.2732 -0.7270 +v 13.7083 5.5867 -0.6988 +v 14.1680 4.2732 -2.4147 +v 12.3077 5.5867 -0.5144 +v 11.7340 4.2732 -1.8459 +v 13.2306 7.5569 1.0840 +v 10.0464 3.6592 0.3535 +v 10.0937 3.6592 2.8951 +v 12.2931 3.6592 4.5828 +v 15.0416 3.6592 4.2209 +v 16.7293 3.6592 2.0215 +v 16.3674 3.6592 -0.7270 +v 14.1680 3.6592 -2.4147 +v 11.7340 3.6592 -1.8459 +v 10.4802 3.0597 -1.8219 +v 11.4558 3.7400 -1.1388 +v 11.8295 3.7400 -1.6724 +v 10.8539 3.0597 -2.3556 +v 9.5046 2.8306 -2.5051 +v 9.8782 2.8306 -3.0387 +v 8.5289 3.2758 -3.1882 +v 8.9026 3.2758 -3.7219 +v 8.5036 2.6341 -3.2059 +v 8.8772 2.6341 -3.7396 +v 10.1065 3.0597 -1.2883 +v 11.0822 3.7400 -0.6051 +v 9.1309 2.8306 -1.9714 +v 8.1552 3.2758 -2.6546 +v 8.1299 2.6341 -2.6723 +v 9.7329 3.0597 -0.7546 +v 10.7085 3.7400 -0.0715 +v 8.7572 2.8306 -1.4378 +v 7.7816 3.2759 -2.1209 +v 7.7562 2.6341 -2.1386 +v 9.3592 3.0597 -0.2210 +v 10.3348 3.7400 0.4622 +v 8.3836 2.8306 -0.9041 +v 7.4079 3.2758 -1.5873 +v 7.3826 2.6341 -1.6050 +v 8.9361 3.5898 -3.5906 +v 9.1688 3.5898 -3.4277 +v 9.2794 3.5898 -3.5855 +v 9.0466 3.5898 -3.7485 +v 9.3343 1.7644 -3.4331 +v 9.3018 -0.0611 -3.5852 +v 9.0386 -0.0611 -3.7695 +v 9.1687 1.7644 -3.5491 +v 8.9136 -0.0611 -3.5910 +v 9.0900 1.7644 -3.4367 +v 9.1768 -0.0611 -3.4067 +v 9.2556 1.7644 -3.3207 +v 7.5317 3.5898 -1.5850 +v 7.4211 3.5898 -1.4271 +v 7.6539 3.5898 -1.2641 +v 7.7644 3.5898 -1.4220 +v 7.8160 1.7644 -1.2646 +v 7.6503 1.7644 -1.3806 +v 7.3987 -0.0611 -1.4275 +v 7.6619 -0.0611 -1.2432 +v 7.7290 1.7644 -1.4930 +v 7.5237 -0.0611 -1.6059 +v 7.8946 1.7644 -1.3770 +v 7.7869 -0.0611 -1.4217 +v 9.8150 0.4345 3.0119 +v 9.5352 -0.0497 3.1542 +v 12.0931 -0.0497 5.1170 +v 12.1868 0.4345 4.8318 +v 10.2280 1.4030 2.8047 +v 12.3265 1.4030 4.4150 +v 10.3166 2.8558 2.7664 +v 12.3597 2.8558 4.3342 +v 10.3166 3.8243 2.7664 +v 12.3597 3.8243 4.3342 +v 10.3166 4.3085 2.7664 +v 12.3597 4.3085 4.3342 +v 10.6981 0.4345 -0.6231 +v 10.6263 -0.0497 -0.6781 +v 10.8311 1.4030 -0.5770 +v 10.8994 2.8558 -0.6186 +v 10.9903 3.8243 -0.7370 +v 11.0670 4.3085 -0.7188 +v 14.2087 0.4345 -2.7141 +v 14.2737 -0.0497 -3.0212 +v 11.0309 -0.0497 -1.2054 +v 11.1026 0.4345 -1.1503 +v 14.1155 1.4030 -2.2615 +v 11.1816 1.4030 -1.0338 +v 14.1014 2.8558 -2.1661 +v 11.1591 2.8558 -0.9570 +v 14.1014 3.8243 -2.1661 +v 11.0683 3.8243 -0.8386 +v 14.1014 4.3085 -2.1661 +v 16.5805 0.4345 -0.8942 +v 16.8317 -0.0497 -1.0584 +v 16.2140 1.4030 -0.6513 +v 16.1445 2.8558 -0.5983 +v 16.1445 3.8243 -0.5983 +v 16.1445 4.3085 -0.5983 +v 16.9707 0.4345 2.0698 +v 17.2525 -0.0497 2.1382 +v 16.5592 1.4030 1.9712 +v 16.4807 2.8558 1.9549 +v 16.4807 3.8243 1.9549 +v 16.4807 4.3085 1.9549 +v 15.1508 0.4345 4.4416 +v 15.2897 -0.0497 4.6961 +v 14.9490 1.4030 4.0697 +v 14.9129 2.8558 3.9980 +v 14.9129 3.8243 3.9980 +v 14.9129 4.3085 3.9980 +v 3.7753 0.3307 3.5742 +v 3.7753 0.3307 3.4718 +v -0.7192 0.3307 3.4718 +v -0.7192 0.3307 3.5742 +v -8.5752 0.3307 3.4718 +v -8.5752 0.3307 3.5742 +v -4.0878 0.3307 3.5742 +v -4.0878 0.3307 3.4718 +v 3.7753 -0.0497 3.4718 +v -0.7192 -0.0497 3.4718 +v -8.5752 -0.0497 3.4718 +v -4.0878 -0.0497 3.4718 +v -0.6234 3.0645 3.1779 +v -4.1805 3.0645 3.1779 +v -4.1805 3.0645 3.5523 +v -0.6234 3.0645 3.5523 +v -4.1805 -0.0767 3.1779 +v -4.1805 -0.0767 3.5523 +v -0.6234 -0.0767 3.5523 +v -0.6234 -0.0767 3.1779 +v -3.7941 2.7616 3.1779 +v -3.7941 -0.0767 3.1779 +v -1.0098 2.7616 3.1779 +v -1.0098 -0.0767 3.1779 +v -3.7941 2.7616 3.5523 +v -3.7941 -0.0767 3.5523 +v -1.0098 2.7616 3.5523 +v -1.0098 -0.0767 3.5523 +v -4.7283 2.7086 0.8535 +v -4.8864 2.0913 1.4841 +v -4.9701 2.9149 1.4841 +v -4.7752 3.3618 0.6425 +v -4.8307 2.0913 1.4841 +v -4.6726 2.7086 0.8535 +v -4.7194 3.3618 2.3257 +v -4.7752 3.3618 2.3257 +v -4.7283 2.7086 2.1147 +v -4.6726 2.7086 2.1147 +v -4.9144 3.7385 1.4841 +v -4.9701 3.7385 1.4841 +v -4.8607 3.9096 2.1147 +v -4.8049 3.9096 2.1147 +v -4.7195 3.3618 0.6425 +v -4.8607 3.9096 0.8535 +v -4.8049 3.9096 0.8535 +v -4.4872 2.7086 2.1147 +v -4.3292 2.0913 1.4841 +v -4.2455 2.9149 1.4841 +v -4.4404 3.3618 2.3257 +v -4.3849 2.0913 1.4841 +v -4.5429 2.7086 2.1147 +v -4.4961 3.3618 0.6425 +v -4.4404 3.3618 0.6425 +v -4.4872 2.7086 0.8535 +v -4.5429 2.7086 0.8535 +v -4.3012 3.7385 1.4841 +v -4.2455 3.7385 1.4841 +v -4.3549 3.9096 0.8535 +v -4.4106 3.9096 0.8535 +v -4.4961 3.3618 2.3257 +v -4.3549 3.9096 2.1147 +v -4.4106 3.9096 2.1147 +v -4.8751 4.9001 3.5979 +v -4.8751 4.6254 2.3101 +v -4.8751 4.2747 2.3101 +v -4.8751 4.5494 3.5979 +v -4.3656 4.9001 3.5979 +v -4.3656 4.6254 2.3101 +v -4.3656 4.5494 3.5979 +v -4.3656 4.2747 2.3101 +v -4.8751 4.5494 1.0224 +v -4.3656 4.5494 1.0224 +v -4.8751 4.9001 1.0224 +v -4.3656 4.9001 1.0224 +v -4.8480 3.6715 1.2143 +v -4.8790 4.8495 1.2143 +v -4.9390 4.8495 1.1797 +v -4.9080 3.6715 1.1797 +v -4.8480 3.6715 1.1450 +v -4.8790 4.8495 1.1450 +v -4.7435 4.8672 1.1450 +v -4.7435 4.9272 1.1797 +v -4.7435 4.8672 1.2143 +v -4.8290 4.8723 1.2143 +v -4.8590 4.9023 1.1797 +v -4.8290 4.8723 1.1450 +v -4.3907 3.5246 1.8443 +v -4.3596 4.7026 1.8443 +v -4.2996 4.7026 1.8790 +v -4.3306 3.5246 1.8790 +v -4.3907 3.5246 1.9136 +v -4.3596 4.7026 1.9136 +v -4.4951 4.7203 1.9136 +v -4.4951 4.7803 1.8790 +v -4.4951 4.7203 1.8443 +v -4.4096 4.7254 1.8443 +v -4.3796 4.7554 1.8790 +v -4.4096 4.7254 1.9136 +v 7.6091 11.2223 7.4926 +v 7.6091 11.2223 3.6675 +v 4.2986 11.2223 3.6675 +v 4.2986 11.2223 7.4926 +v 4.2039 11.6538 3.3840 +v 7.7038 11.6676 3.3840 +v 7.9561 11.4163 3.3840 +v 3.9517 11.4005 3.3840 +v 3.9517 -0.0497 3.3840 +v 7.9561 -0.0497 3.3840 +v 3.9517 11.6528 7.5239 +v 3.9517 11.6528 3.6363 +v 3.9517 11.4005 7.7761 +v 3.9517 -0.0497 7.7761 +v 7.7038 11.6676 7.7761 +v 4.2039 11.6538 7.7761 +v 7.9561 11.4163 7.7761 +v 7.9561 -0.0497 7.7761 +v 7.9561 11.6686 3.6363 +v 7.9561 11.6686 7.5239 +v 4.2384 12.2911 3.6246 +v 4.2975 12.2911 3.6675 +v 7.6079 12.3069 3.6675 +v 7.6647 12.3069 3.6201 +v 7.7027 12.3059 3.3840 +v 4.2028 12.2921 3.3840 +v 4.2411 12.2911 7.5354 +v 4.2975 12.2911 7.4926 +v 3.9505 12.2911 3.6363 +v 3.9505 12.2911 7.5239 +v 7.6834 12.3069 7.5403 +v 7.6079 12.3069 7.4926 +v 4.2028 12.2921 7.7761 +v 7.7027 12.3059 7.7761 +v 7.9549 12.3069 7.5239 +v 7.9549 12.3069 3.6363 +v 4.2986 11.6528 3.6675 +v 7.6091 11.6686 3.6675 +v 7.6091 11.6686 7.4926 +v 4.2986 11.6528 7.4926 +v 5.9539 11.1742 2.7345 +v 8.5221 11.1742 2.7345 +v 8.5221 10.4250 2.7345 +v 5.9539 10.2869 2.7345 +v 3.3856 11.1742 5.5801 +v 3.3856 11.1742 2.7345 +v 3.3856 10.4250 2.7345 +v 3.3856 10.2869 5.5801 +v 5.9539 11.1742 8.4256 +v 3.3856 11.1742 8.4256 +v 3.3856 10.4250 8.4256 +v 5.9539 10.2869 8.4256 +v 8.5221 11.1742 5.5801 +v 8.5221 11.1742 8.4256 +v 8.5221 10.4250 8.4256 +v 8.5221 10.2869 5.5801 +v 7.9561 10.4250 3.3840 +v 7.9561 10.2869 5.5801 +v 7.9561 10.4250 7.7761 +v 5.9539 10.2869 7.7761 +v 3.9516 10.4250 7.7761 +v 3.9516 10.2869 5.5801 +v 3.9516 10.4250 3.3840 +v 5.9539 10.2869 3.3840 +v 7.9561 11.1742 3.3840 +v 5.9539 11.1742 3.3840 +v 3.9516 11.1742 3.3840 +v 3.9516 11.1742 5.5801 +v 3.9516 11.1742 7.7761 +v 5.9539 11.1742 7.7761 +v 7.9561 11.1742 7.7761 +v 7.9561 11.1742 5.5801 +v 5.9538 2.4706 3.3529 +v 5.5500 2.4946 3.3529 +v 5.5600 3.4112 3.3417 +v 5.9639 3.7044 3.3417 +v 5.2341 2.3847 3.3191 +v 5.2341 2.3847 3.4119 +v 5.2341 2.5166 3.4119 +v 5.2341 2.5166 3.3191 +v 5.3484 3.4943 3.3080 +v 5.3484 3.4943 3.4007 +v 5.9638 3.9208 3.4007 +v 5.9638 3.9208 3.3080 +v 6.6736 2.5166 3.3191 +v 6.6736 2.5166 3.4118 +v 6.6736 2.3847 3.4118 +v 6.6736 2.3847 3.3191 +v 6.5693 2.3847 3.3191 +v 6.5693 2.3847 3.4118 +v 5.9538 2.3387 3.4119 +v 5.9538 2.3387 3.3191 +v 5.3384 2.3847 3.2174 +v 5.3384 2.5166 3.2174 +v 5.5500 2.4946 3.2174 +v 5.5600 3.4112 3.3080 +v 5.9638 3.7044 3.3080 +v 6.5693 2.5166 3.2174 +v 6.5693 2.3847 3.2174 +v 6.3577 2.5032 3.2174 +v 5.9538 2.3387 3.2174 +v 5.9538 2.4706 3.2174 +v 6.3678 3.4112 3.3417 +v 6.3577 2.5032 3.3529 +v 6.5793 3.4943 3.4007 +v 6.5793 3.4943 3.3080 +v 5.3384 2.3847 3.4119 +v 5.3384 2.3847 3.3191 +v 6.3677 3.4112 3.3080 +v 5.5500 2.4946 3.3191 +v 6.3577 2.5032 3.3191 +v 5.9538 2.4706 3.3191 +v 6.5693 2.5166 3.3191 +v 6.5693 2.5166 3.4118 +v 5.3384 2.5166 3.3191 +v 5.3384 2.5166 3.4119 +v 5.2341 2.3847 3.2174 +v 5.2341 2.5166 3.2174 +v 6.6736 2.5166 3.2175 +v 6.6736 2.3847 3.2175 +v 7.7029 12.7510 3.3802 +v 7.6649 12.7520 3.6163 +v 7.9551 12.7520 3.6325 +v 3.9507 12.7362 3.6400 +v 4.2385 12.7362 3.6284 +v 4.2029 12.7372 3.3877 +v 4.2029 12.7372 7.7724 +v 4.2412 12.7362 7.5316 +v 3.9507 12.7362 7.5201 +v 7.9552 12.7520 7.5277 +v 7.6836 12.7520 7.5441 +v 7.7029 12.7510 7.7800 +v 5.9539 5.6553 2.7345 +v 8.5221 5.6552 2.7345 +v 8.5221 4.9060 2.7345 +v 5.9539 4.7680 2.7345 +v 3.3856 5.6553 5.5801 +v 3.3856 5.6552 2.7345 +v 3.3856 4.9060 2.7345 +v 3.3856 4.7680 5.5801 +v 5.9539 5.6552 8.4256 +v 3.3856 5.6552 8.4256 +v 3.3856 4.9060 8.4256 +v 5.9539 4.7680 8.4256 +v 8.5221 5.6553 5.5801 +v 8.5221 5.6552 8.4256 +v 8.5221 4.9060 8.4256 +v 8.5221 4.7680 5.5801 +v 7.9561 4.9060 3.3840 +v 7.9561 4.7680 5.5801 +v 7.9561 4.9060 7.7761 +v 5.9539 4.7680 7.7761 +v 3.9516 4.9060 7.7761 +v 3.9516 4.7680 5.5801 +v 3.9516 4.9060 3.3840 +v 5.9539 4.7680 3.3840 +v 7.9561 5.6552 3.3840 +v 5.9539 5.6553 3.3840 +v 3.9516 5.6552 3.3840 +v 3.9516 5.6553 5.5801 +v 3.9516 5.6552 7.7761 +v 5.9539 5.6552 7.7761 +v 7.9561 5.6552 7.7761 +v 7.9561 5.6553 5.5801 +v 3.8492 7.9916 3.3442 +v 4.2778 7.9916 3.2874 +v 4.3820 5.5057 3.0843 +v 3.6056 5.5057 3.0843 +v 4.3820 10.4775 3.0843 +v 3.6056 10.4775 3.0843 +v 3.6056 5.5057 3.8698 +v 3.8492 7.9916 3.7879 +v 3.6056 11.0073 3.8698 +v 4.3820 5.5057 3.8698 +v 4.2778 7.9916 3.7311 +v 4.3820 11.0073 3.8698 +v 8.0585 8.0320 3.3442 +v 8.3022 5.5461 3.0843 +v 7.5257 5.5461 3.0843 +v 7.6299 8.0320 3.2874 +v 7.5257 10.5178 3.0843 +v 8.3022 10.5178 3.0843 +v 8.0585 8.0320 3.7879 +v 8.3022 5.5461 3.8698 +v 8.3022 11.0477 3.8698 +v 7.6299 8.0320 3.7311 +v 7.5257 5.5461 3.8698 +v 7.5257 11.0477 3.8698 +v 8.0585 2.4361 3.3442 +v 8.3022 -0.0497 3.0843 +v 7.5257 -0.0497 3.0843 +v 7.6299 2.4361 3.2874 +v 7.5257 4.9220 3.0843 +v 8.3022 4.9220 3.0843 +v 8.0585 2.4361 3.7879 +v 8.3022 -0.0497 3.8698 +v 8.3022 5.4519 3.8698 +v 7.6299 2.4361 3.7311 +v 7.5257 -0.0497 3.8698 +v 7.5257 5.4519 3.8698 +v 3.8492 8.0460 7.8159 +v 3.6056 5.5601 8.0758 +v 4.3820 5.5601 8.0758 +v 4.2778 8.0460 7.8728 +v 4.3820 10.5319 8.0758 +v 3.6056 10.5319 8.0758 +v 3.8492 8.0460 7.3722 +v 3.6056 5.5601 7.2903 +v 3.6056 11.0617 7.2903 +v 4.2778 8.0460 7.4291 +v 4.3820 5.5601 7.2903 +v 4.3820 11.0617 7.2903 +v -6.1483 5.2854 13.8904 +v -6.1483 -0.0497 13.8904 +v -2.5490 -0.0497 13.8904 +v -2.5490 8.3033 14.4402 +v -6.1483 5.2854 9.5363 +v -6.1483 -0.0497 9.5363 +v 1.0503 5.2854 13.8904 +v 1.0503 -0.0497 13.8904 +v -2.5490 4.0591 14.2018 +v -2.1451 4.0831 14.2018 +v -2.1451 4.9996 14.2698 +v -2.5490 5.2929 14.2698 +v -1.8292 3.9731 14.2355 +v -1.8292 3.9731 14.1428 +v -1.8292 4.1051 14.1428 +v -1.8292 4.1051 14.2355 +v -1.9335 5.0827 14.3036 +v -1.9335 5.0827 14.2108 +v -2.5490 5.5092 14.2108 +v -2.5490 5.5092 14.3036 +v -3.2687 4.1051 14.2355 +v -3.2687 4.1051 14.1428 +v -3.2687 3.9731 14.1428 +v -3.2687 3.9731 14.2355 +v -3.1644 3.9731 14.2355 +v -3.1644 3.9731 14.1428 +v -2.5490 3.9271 14.1428 +v -2.5490 3.9271 14.2355 +v -1.9335 3.9731 14.3372 +v -1.9335 4.1051 14.3372 +v -2.1451 4.0831 14.3372 +v -2.1451 4.9996 14.3036 +v -2.5490 5.2929 14.3036 +v -3.1644 4.1051 14.3372 +v -3.1644 3.9731 14.3372 +v -2.9528 4.0916 14.3372 +v -2.5490 3.9271 14.3372 +v -2.5490 4.0591 14.3372 +v -2.9528 4.9996 14.2698 +v -2.9528 4.0916 14.2018 +v -3.1644 5.0827 14.2108 +v -3.1644 5.0827 14.3036 +v -1.9335 3.9731 14.1428 +v -1.9335 3.9731 14.2355 +v -2.9528 4.9996 14.3036 +v -2.1451 4.0831 14.2355 +v -2.9528 4.0916 14.2355 +v -2.5490 4.0591 14.2355 +v -3.1644 4.1051 14.2355 +v -3.1644 4.1051 14.1428 +v -1.9335 4.1051 14.2355 +v -1.9335 4.1051 14.1428 +v -1.8292 3.9731 14.3372 +v -1.8292 4.1051 14.3372 +v -3.2687 4.1051 14.3372 +v -3.2687 3.9731 14.3372 +v -6.1001 0.3307 13.9484 +v -6.1001 0.3307 14.0508 +v 1.0344 0.3307 14.0508 +v 1.0344 0.3307 13.9484 +v -6.1001 -0.0497 14.0508 +v 1.0344 -0.0497 14.0508 +v -2.5490 7.3417 7.3874 +v -2.5490 7.8216 11.5128 +v 1.3897 5.0816 11.0558 +v 1.3897 5.0816 9.5363 +v -6.4877 5.1674 14.6493 +v -6.4877 4.8256 14.7008 +v -2.5490 8.4824 15.2587 +v -2.5490 8.8242 15.2587 +v 1.3897 5.1674 14.6493 +v 1.3897 4.8256 14.6493 +v -6.4877 5.1587 11.0558 +v -6.4877 5.2357 9.5363 +v -6.4877 4.8169 11.0945 +v 1.3897 4.7398 11.0558 +v -2.5490 7.4798 11.5128 +v -2.1476 8.6350 16.2525 +v -2.9503 8.6350 16.2525 +v -2.9503 7.8323 16.2525 +v -2.1476 7.8323 16.2525 +v -2.8880 7.4474 15.2674 +v -2.8880 8.1255 15.2674 +v -2.8554 7.9260 14.2697 +v -2.8554 7.3131 14.2697 +v -2.2425 7.3131 14.2697 +v -2.2099 7.4474 15.2674 +v -2.2425 7.9260 14.2697 +v -2.2099 8.1255 15.2674 +v -1.9716 8.5899 15.1690 +v -1.9716 8.4159 15.2058 +v -1.9716 8.2024 14.1956 +v -1.9716 8.3764 14.1588 +v -2.4465 8.5610 14.1198 +v -2.4465 8.7351 14.0830 +v -2.4465 8.9486 15.0932 +v -2.4465 8.7745 15.1300 +v -2.5490 8.5728 14.1173 +v -2.5490 8.7468 14.0805 +v -2.5490 8.9603 15.0907 +v -2.5490 8.7863 15.1275 +v -3.1263 8.2024 14.1956 +v -3.1263 8.4159 15.2058 +v -3.1263 8.5899 15.1690 +v -3.1263 8.3764 14.1588 +v -2.6514 8.5610 14.1198 +v -2.6514 8.7351 14.0830 +v -2.6514 8.9486 15.0932 +v -2.6514 8.7745 15.1300 +v -1.9716 8.1121 14.2980 +v -1.9716 7.8986 13.2878 +v -1.9716 8.0727 13.2511 +v -1.9716 8.2862 14.2612 +v -2.4465 8.4313 13.1752 +v -2.4465 8.6448 14.1854 +v -2.4465 8.2573 13.2120 +v -2.5490 8.4431 13.1728 +v -2.5490 8.6566 14.1830 +v -2.5490 8.2690 13.2096 +v -3.1263 8.0727 13.2511 +v -3.1263 7.8986 13.2878 +v -3.1263 8.1121 14.2980 +v -3.1263 8.2862 14.2612 +v -2.6514 8.4313 13.1752 +v -2.6514 8.6448 14.1854 +v -2.6514 8.2573 13.2120 +v -1.9716 7.8588 13.4934 +v -1.9716 7.6811 12.4763 +v -1.9716 7.8564 12.4457 +v -1.9716 8.0341 13.4628 +v -2.4465 8.2175 12.3826 +v -2.4465 8.3952 13.3997 +v -2.4465 8.0423 12.4133 +v -2.5490 8.2293 12.3806 +v -2.5490 8.4070 13.3977 +v -2.5490 8.0541 12.4112 +v -3.1263 7.8564 12.4457 +v -3.1263 7.6811 12.4763 +v -3.1263 7.8588 13.4934 +v -3.1263 8.0341 13.4628 +v -2.6514 8.2175 12.3826 +v -2.6514 8.3952 13.3997 +v -2.6514 8.0423 12.4133 +v -1.9716 7.6154 12.5886 +v -1.9716 7.4907 11.5637 +v -1.9716 7.6673 11.5422 +v -1.9716 7.7920 12.5671 +v -2.4465 8.0312 11.4979 +v -2.4465 8.1559 12.5229 +v -2.4465 7.8546 11.5194 +v -2.5490 8.0431 11.4965 +v -2.5490 8.1678 12.5214 +v -2.5490 7.8665 11.5180 +v -3.1263 7.6673 11.5422 +v -3.1263 7.4907 11.5637 +v -3.1263 7.6154 12.5886 +v -3.1263 7.7920 12.5671 +v -2.6514 8.0312 11.4979 +v -2.6514 8.1559 12.5229 +v -2.6514 7.8546 11.5194 +v -1.9716 7.4096 11.6666 +v -1.9716 7.2850 10.6417 +v -1.9716 7.4616 10.6202 +v -1.9716 7.5862 11.6451 +v -2.4465 7.8255 10.5759 +v -2.4465 7.9502 11.6009 +v -2.4465 7.6489 10.5974 +v -2.5490 7.8374 10.5745 +v -2.5490 7.9620 11.5994 +v -2.5490 7.6608 10.5960 +v -3.1263 7.4616 10.6202 +v -3.1263 7.2850 10.6417 +v -3.1263 7.4096 11.6666 +v -3.1263 7.5862 11.6451 +v -2.6514 7.8255 10.5759 +v -2.6514 7.9502 11.6009 +v -2.6514 7.6489 10.5974 +v -1.9716 7.2429 10.6842 +v -1.9716 7.1183 9.6592 +v -1.9716 7.2949 9.6378 +v -1.9716 7.4195 10.6627 +v -2.4465 7.6588 9.5935 +v -2.4465 7.7835 10.6185 +v -2.4465 7.4822 9.6150 +v -2.5490 7.6707 9.5921 +v -2.5490 7.7954 10.6170 +v -2.5490 7.4941 9.6135 +v -3.1263 7.2949 9.6378 +v -3.1263 7.1183 9.6592 +v -3.1263 7.2429 10.6842 +v -3.1263 7.4195 10.6627 +v -2.6514 7.6588 9.5935 +v -2.6514 7.7835 10.6185 +v -2.6514 7.4822 9.6150 +v -1.9716 7.1215 9.9531 +v -1.9716 7.0662 8.9221 +v -1.9716 7.2439 8.9126 +v -1.9716 7.2991 9.9436 +v -2.4465 7.6099 8.8930 +v -2.4465 7.6652 9.9240 +v -2.4465 7.4323 8.9025 +v -2.5490 7.6219 8.8924 +v -2.5490 7.6771 9.9234 +v -2.5490 7.4443 8.9019 +v -3.1263 7.2439 8.9126 +v -3.1263 7.0662 8.9221 +v -3.1263 7.1215 9.9531 +v -3.1263 7.2991 9.9436 +v -2.6514 7.6099 8.8930 +v -2.6514 7.6652 9.9240 +v -2.6514 7.4323 8.9025 +v -1.9716 7.1204 8.1650 +v -1.9716 6.9426 8.1590 +v -1.9716 6.9774 7.3778 +v -1.9716 7.1552 7.3838 +v -2.4465 7.5216 7.3962 +v -2.4465 7.4868 8.1774 +v -2.4465 7.3090 8.1714 +v -2.5490 7.5336 7.3966 +v -2.5490 7.4987 8.1778 +v -2.5490 7.3210 8.1718 +v -3.1263 6.9774 7.3778 +v -3.1263 6.9426 8.1590 +v -3.1263 7.1204 8.1650 +v -3.1263 7.1552 7.3838 +v -2.6514 7.4868 8.1774 +v -2.6514 7.5216 7.3962 +v -2.6514 7.3090 8.1714 +v -1.9716 7.1836 8.9636 +v -1.9716 7.0070 8.9851 +v -1.9716 6.8823 7.9601 +v -1.9716 7.0589 7.9387 +v -2.4465 7.4228 7.8944 +v -2.4465 7.5475 8.9193 +v -2.4465 7.3709 8.9408 +v -2.5490 7.4347 7.8930 +v -2.5490 7.5594 8.9179 +v -2.5490 7.3828 8.9394 +v -3.1263 6.8823 7.9601 +v -3.1263 7.0070 8.9851 +v -3.1263 7.1836 8.9636 +v -3.1263 7.0589 7.9387 +v -2.6514 7.5475 8.9193 +v -2.6514 7.4228 7.8944 +v -2.6514 7.3709 8.9408 +v -6.2507 0.3307 13.4886 +v -6.1483 0.3307 13.4886 +v -6.1483 0.3307 9.5363 +v -6.2507 0.3307 9.5363 +v -6.2507 -0.0497 13.4886 +v -6.2507 -0.0497 9.5363 +v 1.0503 -0.0497 9.5363 +v 1.0503 5.2854 9.5363 +v 1.1083 0.3307 13.6458 +v 1.2107 0.3307 13.6458 +v 1.2107 0.3307 9.5034 +v 1.1083 0.3307 9.5034 +v 1.2107 -0.0497 13.6458 +v 1.2107 -0.0497 9.5034 +v -6.1581 2.4361 13.9934 +v -6.2150 2.4361 13.5648 +v -6.4181 -0.0497 13.4606 +v -6.4181 -0.0497 14.2371 +v -6.4181 4.9220 13.4606 +v -6.4181 4.9220 14.2371 +v -5.6326 -0.0497 14.2371 +v -5.7144 2.4361 13.9934 +v -5.6326 5.4519 14.2371 +v -5.6326 -0.0497 13.4606 +v -5.7713 2.4361 13.5648 +v -5.6326 5.4519 13.4606 +v 1.0602 2.4361 13.9934 +v 1.3202 -0.0497 14.2371 +v 1.3202 -0.0497 13.4606 +v 1.1171 2.4361 13.5648 +v 1.3202 4.9220 13.4606 +v 1.3202 4.9220 14.2371 +v 0.6165 2.4361 13.9934 +v 0.5347 -0.0497 14.2371 +v 0.5347 5.4519 14.2371 +v 0.6734 2.4361 13.5648 +v 0.5347 -0.0497 13.4606 +v 0.5347 5.4519 13.4606 +v -9.0259 2.4361 10.7880 +v -9.2695 -0.0497 11.0480 +v -8.4931 -0.0497 11.0480 +v -8.5973 2.4361 10.8449 +v -8.4931 4.9220 11.0480 +v -9.2695 4.9220 11.0480 +v -9.0258 2.4361 10.3443 +v -9.2695 -0.0497 10.2625 +v -9.2695 5.4519 10.2625 +v -8.5973 2.4361 10.4012 +v -8.4931 -0.0497 10.2625 +v -8.4931 5.4519 10.2625 +v -9.0258 2.4361 3.5590 +v -8.5973 2.4361 3.5021 +v -8.4931 -0.0497 3.2991 +v -9.2695 -0.0497 3.2991 +v -8.4931 4.9220 3.2991 +v -9.2695 4.9220 3.2991 +v -9.2695 -0.0497 4.0846 +v -9.0258 2.4361 4.0027 +v -9.2695 5.4519 4.0846 +v -8.4931 -0.0497 4.0846 +v -8.5973 2.4361 3.9458 +v -8.4931 5.4519 4.0846 +v 8.0585 2.4361 7.8159 +v 7.6299 2.4361 7.8728 +v 7.5257 -0.0497 8.0758 +v 8.3022 -0.0497 8.0758 +v 7.5257 4.9220 8.0758 +v 8.3022 4.9220 8.0758 +v 8.3022 -0.0497 7.2903 +v 8.0585 2.4361 7.3722 +v 8.3022 5.4519 7.2903 +v 7.5257 -0.0497 7.2903 +v 7.6299 2.4361 7.4291 +v 7.5257 5.4519 7.2903 +v 8.0585 8.0320 7.8159 +v 7.6299 8.0320 7.8728 +v 7.5257 5.5461 8.0758 +v 8.3022 5.5461 8.0758 +v 7.5257 10.5178 8.0758 +v 8.3022 10.5178 8.0758 +v 8.3022 5.5461 7.2903 +v 8.0585 8.0320 7.3722 +v 8.3022 11.0477 7.2903 +v 7.5257 5.5461 7.2903 +v 7.6299 8.0320 7.4291 +v 7.5257 11.0477 7.2903 +v 4.0787 2.4361 10.7880 +v 3.6501 2.4361 10.8449 +v 3.5459 -0.0497 11.0480 +v 4.3223 -0.0497 11.0480 +v 3.5459 4.9220 11.0480 +v 4.3223 4.9220 11.0480 +v 4.3223 -0.0497 10.2625 +v 4.0787 2.4361 10.3443 +v 4.3223 5.4519 10.2625 +v 3.5459 -0.0497 10.2625 +v 3.6501 2.4361 10.4012 +v 3.5459 5.4519 10.2625 +v 3.8492 2.4361 7.8159 +v 3.6056 -0.0497 8.0758 +v 4.3820 -0.0497 8.0758 +v 4.2778 2.4361 7.8728 +v 4.3820 4.9220 8.0758 +v 3.6056 4.9220 8.0758 +v 3.8492 2.4361 7.3722 +v 3.6056 -0.0497 7.2903 +v 3.6056 5.4519 7.2903 +v 4.2778 2.4361 7.4291 +v 4.3820 -0.0497 7.2903 +v 4.3820 5.4519 7.2903 +v 3.8492 2.4361 3.3442 +v 4.2778 2.4361 3.2874 +v 4.3820 -0.0497 3.0843 +v 3.6056 -0.0497 3.0843 +v 4.3820 4.9220 3.0843 +v 3.6056 4.9220 3.0843 +v 3.6056 -0.0497 3.8698 +v 3.8492 2.4361 3.7879 +v 3.6056 5.4519 3.8698 +v 4.3820 -0.0497 3.8698 +v 4.2778 2.4361 3.7311 +v 4.3820 5.4519 3.8698 +v -8.8369 0.3836 2.7871 +v -9.6622 0.0369 2.7377 +v -9.3873 0.7742 2.9950 +v -8.4314 0.9276 2.9011 +v -9.6420 0.0080 2.7808 +v -8.8167 0.3547 2.8302 +v -9.8499 1.1425 3.7831 +v -9.8702 1.1714 3.7400 +v -9.9150 0.5663 3.4157 +v -9.8947 0.5374 3.4588 +v -9.0617 1.4391 3.3601 +v -9.0819 1.4680 3.3170 +v -9.5178 1.6467 3.7829 +v -9.4975 1.6178 3.8260 +v -8.4112 0.8987 2.9442 +v -8.4397 1.4640 3.1543 +v -8.4195 1.4351 3.1975 +v -4.8751 4.0741 3.5979 +v -4.8107 4.3886 2.8279 +v -4.8107 4.3414 2.3081 +v -4.8751 3.7234 3.5979 +v -4.3656 4.0741 3.5979 +v -4.4300 4.3886 2.8279 +v -4.3656 3.7234 3.5979 +v -4.4300 4.3414 2.3081 +v -14.7300 1.7089 -16.2260 +v -14.7320 1.7089 -15.9598 +v -14.5329 1.7089 -15.9532 +v -14.5309 1.7089 -16.2194 +v -14.5148 0.8805 -16.1713 +v -14.5162 0.8805 -15.9847 +v -14.5328 0.0000 -15.9656 +v -14.5309 0.0000 -16.2070 +v -14.6657 0.8805 -16.1763 +v -14.7301 0.0000 -16.2136 +v -14.6672 0.8805 -15.9897 +v -14.7319 0.0000 -15.9722 +v -14.2891 1.8182 -16.1558 +v -14.2903 1.8182 -15.9976 +v -14.0912 1.8182 -15.9911 +v -14.0900 1.8182 -16.1492 +v -14.0714 0.8805 -16.2411 +v -14.0723 0.8805 -16.1212 +v -14.0442 0.0000 -15.9911 +v -14.0430 0.0000 -16.1492 +v -14.2223 0.8805 -16.2461 +v -14.2421 0.0000 -16.1558 +v -14.2233 0.8805 -16.1262 +v -14.2433 0.0000 -15.9976 +v -13.7487 1.4149 -16.2523 +v -13.7496 1.4149 -16.1324 +v -12.8465 1.4917 -15.9514 +v -12.8453 1.4917 -16.1096 +v -14.6517 1.5530 -16.1694 +v -14.6529 1.5530 -16.0112 +v -13.7552 1.2339 -16.2525 +v -12.8538 1.2529 -16.1099 +v -14.6603 1.3141 -16.1697 +v -13.7561 1.2339 -16.1326 +v -12.8550 1.2529 -15.9517 +v -14.6615 1.3141 -16.0115 +v -13.7507 0.5144 -15.9900 +v -13.7516 0.5144 -15.8701 +v -12.8465 0.5972 -15.9514 +v -12.8453 0.5972 -16.1096 +v -14.6517 0.6584 -16.1694 +v -14.6529 0.6584 -16.0112 +v -13.7572 0.3333 -15.9902 +v -12.8538 0.3583 -16.1099 +v -14.6603 0.4196 -16.1697 +v -13.7581 0.3333 -15.8703 +v -12.8550 0.3583 -15.9517 +v -14.6615 0.4196 -16.0115 +v -13.8315 1.8814 -16.1422 +v -13.8327 1.8814 -15.9841 +v -13.6336 1.8814 -15.9775 +v -13.6323 1.8814 -16.1356 +v -13.6560 0.8805 -16.1897 +v -13.6570 0.8805 -16.0698 +v -13.6336 0.0000 -15.9775 +v -13.6323 0.0000 -16.1356 +v -13.8070 0.8805 -16.1947 +v -13.8315 0.0000 -16.1422 +v -13.8079 0.8805 -16.0748 +v -13.8327 0.0000 -15.9841 +v -13.3832 1.6654 -16.1274 +v -13.3844 1.6654 -15.9692 +v -13.1853 1.6654 -15.9626 +v -13.1841 1.6654 -16.1208 +v -13.2307 0.8805 -16.0068 +v -13.2316 0.8805 -15.8869 +v -13.1853 0.0000 -15.9626 +v -13.1841 0.0000 -16.1208 +v -13.3816 0.8805 -16.0118 +v -13.3832 0.0000 -16.1274 +v -13.3825 0.8805 -15.8919 +v -13.3844 0.0000 -15.9692 +v -12.9829 1.7611 -16.1723 +v -12.9850 1.7611 -15.8978 +v -12.7859 1.7611 -15.8912 +v -12.7838 1.7611 -16.1657 +v -12.8386 0.8805 -16.0902 +v -12.8395 0.8805 -15.9703 +v -12.7855 0.0000 -15.9494 +v -12.7842 0.0000 -16.1076 +v -12.9896 0.8805 -16.0952 +v -12.9834 0.0000 -16.1141 +v -12.9905 0.8805 -15.9753 +v -12.9846 0.0000 -15.9560 +v -12.6474 1.7089 -16.2260 +v -12.6494 1.7089 -15.9598 +v -12.4503 1.7089 -15.9532 +v -12.4482 1.7089 -16.2194 +v -12.4322 0.8805 -16.1713 +v -12.4336 0.8805 -15.9847 +v -12.4502 0.0000 -15.9656 +v -12.4483 0.0000 -16.2070 +v -12.5831 0.8805 -16.1763 +v -12.6475 0.0000 -16.2136 +v -12.5846 0.8805 -15.9897 +v -12.6493 0.0000 -15.9722 +v -12.2065 1.8182 -16.1558 +v -12.2077 1.8182 -15.9976 +v -12.0086 1.8182 -15.9911 +v -12.0074 1.8182 -16.1492 +v -11.9888 0.8805 -16.2411 +v -11.9897 0.8805 -16.1212 +v -11.9616 0.0000 -15.9911 +v -11.9604 0.0000 -16.1492 +v -12.1397 0.8805 -16.2461 +v -12.1595 0.0000 -16.1558 +v -12.1407 0.8805 -16.1262 +v -12.1607 0.0000 -15.9976 +v -11.6661 1.4149 -16.2523 +v -11.6670 1.4149 -16.1324 +v -10.7639 1.4917 -15.9514 +v -10.7627 1.4917 -16.1096 +v -12.5691 1.5530 -16.1694 +v -12.5703 1.5530 -16.0112 +v -11.6726 1.2339 -16.2525 +v -10.7712 1.2529 -16.1099 +v -12.5777 1.3141 -16.1697 +v -11.6735 1.2339 -16.1326 +v -10.7724 1.2529 -15.9517 +v -12.5789 1.3141 -16.0115 +v -11.6681 0.5144 -15.9900 +v -11.6690 0.5144 -15.8701 +v -10.7639 0.5972 -15.9514 +v -10.7627 0.5972 -16.1096 +v -12.5691 0.6584 -16.1694 +v -12.5703 0.6584 -16.0112 +v -11.6746 0.3333 -15.9902 +v -10.7712 0.3583 -16.1099 +v -12.5777 0.4196 -16.1697 +v -11.6755 0.3333 -15.8703 +v -10.7724 0.3583 -15.9517 +v -12.5789 0.4196 -16.0115 +v -11.7489 1.8814 -16.1422 +v -11.7501 1.8814 -15.9841 +v -11.5510 1.8814 -15.9775 +v -11.5497 1.8814 -16.1356 +v -11.5734 0.8805 -16.1897 +v -11.5744 0.8805 -16.0698 +v -11.5510 0.0000 -15.9775 +v -11.5497 0.0000 -16.1356 +v -11.7244 0.8805 -16.1947 +v -11.7489 0.0000 -16.1422 +v -11.7253 0.8805 -16.0748 +v -11.7501 0.0000 -15.9841 +v -11.3006 1.6654 -16.1274 +v -11.3018 1.6654 -15.9692 +v -11.1027 1.6654 -15.9626 +v -11.1015 1.6654 -16.1208 +v -11.1481 0.8805 -16.0068 +v -11.1490 0.8805 -15.8869 +v -11.1027 0.0000 -15.9626 +v -11.1015 0.0000 -16.1208 +v -11.2990 0.8805 -16.0118 +v -11.3006 0.0000 -16.1274 +v -11.2999 0.8805 -15.8919 +v -11.3018 0.0000 -15.9692 +v -10.9003 1.7611 -16.1723 +v -10.9024 1.7611 -15.8978 +v -10.7033 1.7611 -15.8912 +v -10.7012 1.7611 -16.1657 +v -10.7560 0.8805 -16.0902 +v -10.7569 0.8805 -15.9703 +v -10.7029 0.0000 -15.9494 +v -10.7016 0.0000 -16.1076 +v -10.9069 0.8805 -16.0952 +v -10.9008 0.0000 -16.1141 +v -10.9079 0.8805 -15.9753 +v -10.9020 0.0000 -15.9560 +v -10.5648 1.7089 -16.2260 +v -10.5668 1.7089 -15.9598 +v -10.3677 1.7089 -15.9532 +v -10.3657 1.7089 -16.2194 +v -10.3496 0.8805 -16.1713 +v -10.3510 0.8805 -15.9847 +v -10.3676 0.0000 -15.9656 +v -10.3657 0.0000 -16.2070 +v -10.5005 0.8805 -16.1763 +v -10.5649 0.0000 -16.2136 +v -10.5020 0.8805 -15.9897 +v -10.5667 0.0000 -15.9722 +v -10.1239 1.8182 -16.1558 +v -10.1251 1.8182 -15.9976 +v -9.9260 1.8182 -15.9911 +v -9.9248 1.8182 -16.1492 +v -9.9062 0.8805 -16.2411 +v -9.9071 0.8805 -16.1212 +v -9.8790 0.0000 -15.9911 +v -9.8778 0.0000 -16.1492 +v -10.0571 0.8805 -16.2461 +v -10.0769 0.0000 -16.1558 +v -10.0581 0.8805 -16.1262 +v -10.0781 0.0000 -15.9976 +v -9.5835 1.4149 -16.2523 +v -9.5844 1.4149 -16.1324 +v -8.6813 1.4917 -15.9514 +v -8.6801 1.4917 -16.1096 +v -10.4865 1.5530 -16.1694 +v -10.4877 1.5530 -16.0112 +v -9.5900 1.2339 -16.2525 +v -8.6886 1.2529 -16.1099 +v -10.4951 1.3141 -16.1697 +v -9.5909 1.2339 -16.1326 +v -8.6898 1.2529 -15.9517 +v -10.4963 1.3141 -16.0115 +v -9.5855 0.5144 -15.9900 +v -9.5864 0.5144 -15.8701 +v -8.6813 0.5972 -15.9514 +v -8.6801 0.5972 -16.1096 +v -10.4865 0.6584 -16.1694 +v -10.4877 0.6584 -16.0112 +v -9.5920 0.3333 -15.9902 +v -8.6886 0.3583 -16.1099 +v -10.4951 0.4196 -16.1697 +v -9.5929 0.3333 -15.8703 +v -8.6898 0.3583 -15.9517 +v -10.4963 0.4196 -16.0115 +v -9.6663 1.8814 -16.1422 +v -9.6675 1.8814 -15.9841 +v -9.4684 1.8814 -15.9775 +v -9.4671 1.8814 -16.1356 +v -9.4908 0.8805 -16.1897 +v -9.4918 0.8805 -16.0698 +v -9.4684 0.0000 -15.9775 +v -9.4671 0.0000 -16.1356 +v -9.6418 0.8805 -16.1947 +v -9.6663 0.0000 -16.1422 +v -9.6427 0.8805 -16.0748 +v -9.6675 0.0000 -15.9841 +v -9.2180 1.6654 -16.1274 +v -9.2192 1.6654 -15.9692 +v -9.0201 1.6654 -15.9626 +v -9.0189 1.6654 -16.1208 +v -9.0655 0.8805 -16.0068 +v -9.0664 0.8805 -15.8869 +v -9.0201 0.0000 -15.9626 +v -9.0189 0.0000 -16.1208 +v -9.2164 0.8805 -16.0118 +v -9.2180 0.0000 -16.1274 +v -9.2173 0.8805 -15.8919 +v -9.2192 0.0000 -15.9692 +v -8.8177 1.7611 -16.1723 +v -8.8198 1.7611 -15.8978 +v -8.6207 1.7611 -15.8912 +v -8.6186 1.7611 -16.1657 +v -8.6734 0.8805 -16.0902 +v -8.6743 0.8805 -15.9703 +v -8.6203 0.0000 -15.9494 +v -8.6190 0.0000 -16.1076 +v -8.8243 0.8805 -16.0952 +v -8.8182 0.0000 -16.1141 +v -8.8253 0.8805 -15.9753 +v -8.8194 0.0000 -15.9560 +v -8.4822 1.7089 -16.2260 +v -8.4842 1.7089 -15.9598 +v -8.2851 1.7089 -15.9532 +v -8.2830 1.7089 -16.2194 +v -8.2670 0.8805 -16.1713 +v -8.2684 0.8805 -15.9847 +v -8.2850 0.0000 -15.9656 +v -8.2831 0.0000 -16.2070 +v -8.4179 0.8805 -16.1763 +v -8.4823 0.0000 -16.2136 +v -8.4194 0.8805 -15.9897 +v -8.4841 0.0000 -15.9722 +v -8.0413 1.8182 -16.1558 +v -8.0425 1.8182 -15.9976 +v -7.8434 1.8182 -15.9911 +v -7.8422 1.8182 -16.1492 +v -7.8236 0.8805 -16.2411 +v -7.8245 0.8805 -16.1212 +v -7.7964 0.0000 -15.9911 +v -7.7952 0.0000 -16.1492 +v -7.9745 0.8805 -16.2461 +v -7.9943 0.0000 -16.1558 +v -7.9755 0.8805 -16.1262 +v -7.9955 0.0000 -15.9976 +v -7.5009 1.4149 -16.2523 +v -7.5018 1.4149 -16.1324 +v -6.5987 1.4917 -15.9514 +v -6.5975 1.4917 -16.1096 +v -8.4039 1.5530 -16.1694 +v -8.4051 1.5530 -16.0112 +v -7.5073 1.2339 -16.2525 +v -6.6060 1.2529 -16.1099 +v -8.4125 1.3141 -16.1697 +v -7.5083 1.2339 -16.1326 +v -6.6072 1.2529 -15.9517 +v -8.4137 1.3141 -16.0115 +v -7.5029 0.5144 -15.9900 +v -7.5038 0.5144 -15.8701 +v -6.5987 0.5972 -15.9514 +v -6.5975 0.5972 -16.1096 +v -8.4039 0.6584 -16.1694 +v -8.4051 0.6584 -16.0112 +v -7.5094 0.3333 -15.9902 +v -6.6060 0.3583 -16.1099 +v -8.4125 0.4196 -16.1697 +v -7.5103 0.3333 -15.8703 +v -6.6072 0.3583 -15.9517 +v -8.4137 0.4196 -16.0115 +v -7.5837 1.8814 -16.1422 +v -7.5849 1.8814 -15.9841 +v -7.3858 1.8814 -15.9775 +v -7.3845 1.8814 -16.1356 +v -7.4082 0.8805 -16.1897 +v -7.4091 0.8805 -16.0698 +v -7.3858 0.0000 -15.9775 +v -7.3845 0.0000 -16.1356 +v -7.5592 0.8805 -16.1947 +v -7.5837 0.0000 -16.1422 +v -7.5601 0.8805 -16.0748 +v -7.5849 0.0000 -15.9841 +v -7.1354 1.6654 -16.1274 +v -7.1366 1.6654 -15.9692 +v -6.9375 1.6654 -15.9626 +v -6.9363 1.6654 -16.1208 +v -6.9829 0.8805 -16.0068 +v -6.9838 0.8805 -15.8869 +v -6.9375 0.0000 -15.9626 +v -6.9363 0.0000 -16.1208 +v -7.1338 0.8805 -16.0118 +v -7.1354 0.0000 -16.1274 +v -7.1347 0.8805 -15.8919 +v -7.1366 0.0000 -15.9692 +v -6.7351 1.7611 -16.1723 +v -6.7372 1.7611 -15.8978 +v -6.5381 1.7611 -15.8912 +v -6.5360 1.7611 -16.1657 +v -6.5908 0.8805 -16.0902 +v -6.5917 0.8805 -15.9703 +v -6.5377 0.0000 -15.9494 +v -6.5364 0.0000 -16.1076 +v -6.7417 0.8805 -16.0952 +v -6.7356 0.0000 -16.1141 +v -6.7427 0.8805 -15.9753 +v -6.7368 0.0000 -15.9560 +v -6.3996 1.7089 -16.2260 +v -6.4016 1.7089 -15.9598 +v -6.2025 1.7089 -15.9532 +v -6.2004 1.7089 -16.2194 +v -6.1844 0.8805 -16.1713 +v -6.1858 0.8805 -15.9847 +v -6.2024 0.0000 -15.9656 +v -6.2005 0.0000 -16.2070 +v -6.3353 0.8805 -16.1763 +v -6.3997 0.0000 -16.2136 +v -6.3368 0.8805 -15.9897 +v -6.4015 0.0000 -15.9722 +v -5.9587 1.8182 -16.1558 +v -5.9599 1.8182 -15.9976 +v -5.7608 1.8182 -15.9911 +v -5.7596 1.8182 -16.1492 +v -5.7410 0.8805 -16.2411 +v -5.7419 0.8805 -16.1212 +v -5.7138 0.0000 -15.9911 +v -5.7126 0.0000 -16.1492 +v -5.8919 0.8805 -16.2461 +v -5.9117 0.0000 -16.1558 +v -5.8929 0.8805 -16.1262 +v -5.9129 0.0000 -15.9976 +v -5.4183 1.4149 -16.2523 +v -5.4192 1.4149 -16.1324 +v -4.5161 1.4917 -15.9514 +v -4.5149 1.4917 -16.1096 +v -6.3213 1.5530 -16.1694 +v -6.3225 1.5530 -16.0112 +v -5.4248 1.2339 -16.2525 +v -4.5234 1.2529 -16.1099 +v -6.3299 1.3141 -16.1697 +v -5.4257 1.2339 -16.1326 +v -4.5246 1.2529 -15.9517 +v -6.3311 1.3141 -16.0115 +v -5.4203 0.5144 -15.9900 +v -5.4212 0.5144 -15.8701 +v -4.5161 0.5972 -15.9514 +v -4.5149 0.5972 -16.1096 +v -6.3213 0.6584 -16.1694 +v -6.3225 0.6584 -16.0112 +v -5.4268 0.3333 -15.9902 +v -4.5234 0.3583 -16.1099 +v -6.3299 0.4196 -16.1697 +v -5.4277 0.3333 -15.8703 +v -4.5246 0.3583 -15.9517 +v -6.3311 0.4196 -16.0115 +v -5.5011 1.8814 -16.1422 +v -5.5023 1.8814 -15.9841 +v -5.3032 1.8814 -15.9775 +v -5.3019 1.8814 -16.1356 +v -5.3256 0.8805 -16.1897 +v -5.3265 0.8805 -16.0698 +v -5.3032 0.0000 -15.9775 +v -5.3019 0.0000 -16.1356 +v -5.4766 0.8805 -16.1947 +v -5.5011 0.0000 -16.1422 +v -5.4775 0.8805 -16.0748 +v -5.5023 0.0000 -15.9841 +v -5.0528 1.6654 -16.1274 +v -5.0540 1.6654 -15.9692 +v -4.8549 1.6654 -15.9626 +v -4.8537 1.6654 -16.1208 +v -4.9003 0.8805 -16.0068 +v -4.9012 0.8805 -15.8869 +v -4.8549 0.0000 -15.9626 +v -4.8537 0.0000 -16.1208 +v -5.0512 0.8805 -16.0118 +v -5.0528 0.0000 -16.1274 +v -5.0521 0.8805 -15.8919 +v -5.0540 0.0000 -15.9692 +v -4.6525 1.7611 -16.1723 +v -4.6546 1.7611 -15.8978 +v -4.4555 1.7611 -15.8912 +v -4.4534 1.7611 -16.1657 +v -4.5082 0.8805 -16.0902 +v -4.5091 0.8805 -15.9703 +v -4.4551 0.0000 -15.9494 +v -4.4538 0.0000 -16.1076 +v -4.6591 0.8805 -16.0952 +v -4.6530 0.0000 -16.1141 +v -4.6601 0.8805 -15.9753 +v -4.6542 0.0000 -15.9560 +v -4.3170 1.7089 -16.2260 +v -4.3190 1.7089 -15.9598 +v -4.1199 1.7089 -15.9532 +v -4.1179 1.7089 -16.2194 +v -4.1018 0.8805 -16.1713 +v -4.1032 0.8805 -15.9847 +v -4.1198 0.0000 -15.9656 +v -4.1179 0.0000 -16.2070 +v -4.2527 0.8805 -16.1763 +v -4.3171 0.0000 -16.2136 +v -4.2542 0.8805 -15.9897 +v -4.3189 0.0000 -15.9722 +v -3.8761 1.8182 -16.1558 +v -3.8773 1.8182 -15.9976 +v -3.6782 1.8182 -15.9911 +v -3.6770 1.8182 -16.1492 +v -3.6584 0.8805 -16.2411 +v -3.6593 0.8805 -16.1212 +v -3.6312 0.0000 -15.9911 +v -3.6300 0.0000 -16.1492 +v -3.8093 0.8805 -16.2461 +v -3.8291 0.0000 -16.1558 +v -3.8103 0.8805 -16.1262 +v -3.8303 0.0000 -15.9976 +v -3.3357 1.4149 -16.2523 +v -3.3366 1.4149 -16.1324 +v -2.4335 1.4917 -15.9514 +v -2.4323 1.4917 -16.1096 +v -4.2387 1.5530 -16.1694 +v -4.2399 1.5530 -16.0112 +v -3.3422 1.2339 -16.2525 +v -2.4408 1.2529 -16.1099 +v -4.2473 1.3141 -16.1697 +v -3.3431 1.2339 -16.1326 +v -2.4420 1.2529 -15.9517 +v -4.2485 1.3141 -16.0115 +v -3.3377 0.5144 -15.9900 +v -3.3386 0.5144 -15.8701 +v -2.4335 0.5972 -15.9514 +v -2.4323 0.5972 -16.1096 +v -4.2387 0.6584 -16.1694 +v -4.2399 0.6584 -16.0112 +v -3.3442 0.3333 -15.9902 +v -2.4408 0.3583 -16.1099 +v -4.2473 0.4196 -16.1697 +v -3.3451 0.3333 -15.8703 +v -2.4420 0.3583 -15.9517 +v -4.2485 0.4196 -16.0115 +v -3.4185 1.8814 -16.1422 +v -3.4197 1.8814 -15.9841 +v -3.2206 1.8814 -15.9775 +v -3.2193 1.8814 -16.1356 +v -3.2430 0.8805 -16.1897 +v -3.2440 0.8805 -16.0698 +v -3.2206 0.0000 -15.9775 +v -3.2193 0.0000 -16.1356 +v -3.3940 0.8805 -16.1947 +v -3.4185 0.0000 -16.1422 +v -3.3949 0.8805 -16.0748 +v -3.4197 0.0000 -15.9841 +v -2.9702 1.6654 -16.1274 +v -2.9714 1.6654 -15.9692 +v -2.7723 1.6654 -15.9626 +v -2.7711 1.6654 -16.1208 +v -2.8177 0.8805 -16.0068 +v -2.8186 0.8805 -15.8869 +v -2.7723 0.0000 -15.9626 +v -2.7711 0.0000 -16.1208 +v -2.9686 0.8805 -16.0118 +v -2.9702 0.0000 -16.1274 +v -2.9695 0.8805 -15.8919 +v -2.9714 0.0000 -15.9692 +v -2.5699 1.7611 -16.1723 +v -2.5720 1.7611 -15.8978 +v -2.3729 1.7611 -15.8912 +v -2.3708 1.7611 -16.1657 +v -2.4256 0.8805 -16.0902 +v -2.4265 0.8805 -15.9703 +v -2.3725 0.0000 -15.9494 +v -2.3712 0.0000 -16.1076 +v -2.5765 0.8805 -16.0952 +v -2.5704 0.0000 -16.1141 +v -2.5775 0.8805 -15.9753 +v -2.5716 0.0000 -15.9560 +v -2.2344 1.7089 -16.2260 +v -2.2364 1.7089 -15.9598 +v -2.0373 1.7089 -15.9532 +v -2.0352 1.7089 -16.2194 +v -2.0192 0.8805 -16.1713 +v -2.0206 0.8805 -15.9847 +v -2.0372 0.0000 -15.9656 +v -2.0353 0.0000 -16.2070 +v -2.1701 0.8805 -16.1763 +v -2.2345 0.0000 -16.2136 +v -2.1716 0.8805 -15.9897 +v -2.2363 0.0000 -15.9722 +v -1.7935 1.8182 -16.1558 +v -1.7947 1.8182 -15.9976 +v -1.5956 1.8182 -15.9911 +v -1.5944 1.8182 -16.1492 +v -1.5758 0.8805 -16.2411 +v -1.5767 0.8805 -16.1212 +v -1.5486 0.0000 -15.9911 +v -1.5474 0.0000 -16.1492 +v -1.7267 0.8805 -16.2461 +v -1.7465 0.0000 -16.1558 +v -1.7277 0.8805 -16.1262 +v -1.7477 0.0000 -15.9976 +v -1.2531 1.4149 -16.2523 +v -1.2540 1.4149 -16.1324 +v -0.3509 1.4917 -15.9514 +v -0.3497 1.4917 -16.1096 +v -2.1561 1.5530 -16.1694 +v -2.1573 1.5530 -16.0112 +v -1.2595 1.2339 -16.2525 +v -0.3582 1.2529 -16.1099 +v -2.1647 1.3141 -16.1697 +v -1.2605 1.2339 -16.1326 +v -0.3594 1.2529 -15.9517 +v -2.1659 1.3141 -16.0115 +v -1.2551 0.5144 -15.9900 +v -1.2560 0.5144 -15.8701 +v -0.3509 0.5972 -15.9514 +v -0.3497 0.5972 -16.1096 +v -2.1561 0.6584 -16.1694 +v -2.1573 0.6584 -16.0112 +v -1.2616 0.3333 -15.9902 +v -0.3582 0.3583 -16.1099 +v -2.1647 0.4196 -16.1697 +v -1.2625 0.3333 -15.8703 +v -0.3594 0.3583 -15.9517 +v -2.1659 0.4196 -16.0115 +v -1.3359 1.8814 -16.1422 +v -1.3371 1.8814 -15.9841 +v -1.1380 1.8814 -15.9775 +v -1.1367 1.8814 -16.1356 +v -1.1604 0.8805 -16.1897 +v -1.1613 0.8805 -16.0698 +v -1.1380 0.0000 -15.9775 +v -1.1367 0.0000 -16.1356 +v -1.3114 0.8805 -16.1947 +v -1.3359 0.0000 -16.1422 +v -1.3123 0.8805 -16.0748 +v -1.3371 0.0000 -15.9841 +v -0.8876 1.6654 -16.1274 +v -0.8888 1.6654 -15.9692 +v -0.6897 1.6654 -15.9626 +v -0.6885 1.6654 -16.1208 +v -0.7351 0.8805 -16.0068 +v -0.7360 0.8805 -15.8869 +v -0.6897 0.0000 -15.9626 +v -0.6885 0.0000 -16.1208 +v -0.8860 0.8805 -16.0118 +v -0.8876 0.0000 -16.1274 +v -0.8869 0.8805 -15.8919 +v -0.8888 0.0000 -15.9692 +v -0.4873 1.7611 -16.1723 +v -0.4894 1.7611 -15.8978 +v -0.2903 1.7611 -15.8912 +v -0.2882 1.7611 -16.1657 +v -0.3430 0.8805 -16.0902 +v -0.3439 0.8805 -15.9703 +v -0.2898 0.0000 -15.9494 +v -0.2886 0.0000 -16.1076 +v -0.4939 0.8805 -16.0952 +v -0.4878 0.0000 -16.1141 +v -0.4949 0.8805 -15.9753 +v -0.4890 0.0000 -15.9560 +v -0.1518 1.7089 -16.2260 +v -0.1538 1.7089 -15.9598 +v 0.0453 1.7089 -15.9532 +v 0.0474 1.7089 -16.2194 +v 0.0634 0.8805 -16.1713 +v 0.0620 0.8805 -15.9847 +v 0.0454 0.0000 -15.9656 +v 0.0473 0.0000 -16.2070 +v -0.0875 0.8805 -16.1763 +v -0.1519 0.0000 -16.2136 +v -0.0890 0.8805 -15.9897 +v -0.1537 0.0000 -15.9722 +v 0.2891 1.8182 -16.1558 +v 0.2879 1.8182 -15.9976 +v 0.4870 1.8182 -15.9911 +v 0.4882 1.8182 -16.1492 +v 0.5068 0.8805 -16.2411 +v 0.5059 0.8805 -16.1212 +v 0.5340 0.0000 -15.9911 +v 0.5352 0.0000 -16.1492 +v 0.3559 0.8805 -16.2461 +v 0.3361 0.0000 -16.1558 +v 0.3549 0.8805 -16.1262 +v 0.3349 0.0000 -15.9976 +v 0.8295 1.4149 -16.2523 +v 0.8286 1.4149 -16.1324 +v 1.7317 1.4917 -15.9514 +v 1.7329 1.4917 -16.1096 +v -0.0735 1.5530 -16.1694 +v -0.0747 1.5530 -16.0112 +v 0.8230 1.2339 -16.2525 +v 1.7244 1.2529 -16.1099 +v -0.0821 1.3141 -16.1697 +v 0.8221 1.2339 -16.1326 +v 1.7232 1.2529 -15.9517 +v -0.0833 1.3141 -16.0115 +v 0.8275 0.5144 -15.9900 +v 0.8266 0.5144 -15.8701 +v 1.7317 0.5972 -15.9514 +v 1.7329 0.5972 -16.1096 +v -0.0735 0.6584 -16.1694 +v -0.0747 0.6584 -16.0112 +v 0.8210 0.3333 -15.9902 +v 1.7244 0.3583 -16.1099 +v -0.0821 0.4196 -16.1697 +v 0.8201 0.3333 -15.8703 +v 1.7232 0.3583 -15.9517 +v -0.0833 0.4196 -16.0115 +v 0.7467 1.8814 -16.1422 +v 0.7455 1.8814 -15.9841 +v 0.9446 1.8814 -15.9775 +v 0.9459 1.8814 -16.1356 +v 0.9222 0.8805 -16.1897 +v 0.9213 0.8805 -16.0698 +v 0.9446 0.0000 -15.9775 +v 0.9459 0.0000 -16.1356 +v 0.7712 0.8805 -16.1947 +v 0.7467 0.0000 -16.1422 +v 0.7703 0.8805 -16.0748 +v 0.7455 0.0000 -15.9841 +v 1.1950 1.6654 -16.1274 +v 1.1938 1.6654 -15.9692 +v 1.3929 1.6654 -15.9626 +v 1.3941 1.6654 -16.1208 +v 1.3475 0.8805 -16.0068 +v 1.3466 0.8805 -15.8869 +v 1.3929 0.0000 -15.9626 +v 1.3941 0.0000 -16.1208 +v 1.1966 0.8805 -16.0118 +v 1.1950 0.0000 -16.1274 +v 1.1957 0.8805 -15.8919 +v 1.1938 0.0000 -15.9692 +v 1.5953 1.7611 -16.1723 +v 1.5932 1.7611 -15.8978 +v 1.7923 1.7611 -15.8912 +v 1.7944 1.7611 -16.1657 +v 1.7396 0.8805 -16.0902 +v 1.7387 0.8805 -15.9703 +v 1.7928 0.0000 -15.9494 +v 1.7940 0.0000 -16.1076 +v 1.5887 0.8805 -16.0952 +v 1.5948 0.0000 -16.1141 +v 1.5877 0.8805 -15.9753 +v 1.5936 0.0000 -15.9560 +v 1.9308 1.7089 -16.2260 +v 1.9288 1.7089 -15.9598 +v 2.1279 1.7089 -15.9532 +v 2.1299 1.7089 -16.2194 +v 2.1460 0.8805 -16.1713 +v 2.1446 0.8805 -15.9847 +v 2.1280 0.0000 -15.9656 +v 2.1299 0.0000 -16.2070 +v 1.9951 0.8805 -16.1763 +v 1.9307 0.0000 -16.2136 +v 1.9936 0.8805 -15.9897 +v 1.9289 0.0000 -15.9722 +v 2.3717 1.8182 -16.1558 +v 2.3705 1.8182 -15.9976 +v 2.5696 1.8182 -15.9911 +v 2.5708 1.8182 -16.1492 +v 2.5894 0.8805 -16.2411 +v 2.5885 0.8805 -16.1212 +v 2.6166 0.0000 -15.9911 +v 2.6178 0.0000 -16.1492 +v 2.4385 0.8805 -16.2461 +v 2.4187 0.0000 -16.1558 +v 2.4375 0.8805 -16.1262 +v 2.4175 0.0000 -15.9976 +v 2.9121 1.4149 -16.2523 +v 2.9112 1.4149 -16.1324 +v 3.8143 1.4917 -15.9514 +v 3.8155 1.4917 -16.1096 +v 2.0091 1.5530 -16.1694 +v 2.0079 1.5530 -16.0112 +v 2.9056 1.2339 -16.2525 +v 3.8070 1.2529 -16.1099 +v 2.0005 1.3141 -16.1697 +v 2.9047 1.2339 -16.1326 +v 3.8058 1.2529 -15.9517 +v 1.9993 1.3141 -16.0115 +v 2.9101 0.5144 -15.9900 +v 2.9092 0.5144 -15.8701 +v 3.8143 0.5972 -15.9514 +v 3.8155 0.5972 -16.1096 +v 2.0091 0.6584 -16.1694 +v 2.0079 0.6584 -16.0112 +v 2.9036 0.3333 -15.9902 +v 3.8070 0.3583 -16.1099 +v 2.0005 0.4196 -16.1697 +v 2.9027 0.3333 -15.8703 +v 3.8058 0.3583 -15.9517 +v 1.9993 0.4196 -16.0115 +v 2.8293 1.8814 -16.1422 +v 2.8281 1.8814 -15.9841 +v 3.0272 1.8814 -15.9775 +v 3.0285 1.8814 -16.1356 +v 3.0048 0.8805 -16.1897 +v 3.0038 0.8805 -16.0698 +v 3.0272 0.0000 -15.9775 +v 3.0285 0.0000 -16.1356 +v 2.8538 0.8805 -16.1947 +v 2.8293 0.0000 -16.1422 +v 2.8529 0.8805 -16.0748 +v 2.8281 0.0000 -15.9841 +v 3.2776 1.6654 -16.1274 +v 3.2764 1.6654 -15.9692 +v 3.4755 1.6654 -15.9626 +v 3.4767 1.6654 -16.1208 +v 3.4301 0.8805 -16.0068 +v 3.4292 0.8805 -15.8869 +v 3.4755 0.0000 -15.9626 +v 3.4767 0.0000 -16.1208 +v 3.2792 0.8805 -16.0118 +v 3.2776 0.0000 -16.1274 +v 3.2783 0.8805 -15.8919 +v 3.2764 0.0000 -15.9692 +v 3.6779 1.7611 -16.1723 +v 3.6758 1.7611 -15.8978 +v 3.8749 1.7611 -15.8912 +v 3.8770 1.7611 -16.1657 +v 3.8222 0.8805 -16.0902 +v 3.8213 0.8805 -15.9703 +v 3.8753 0.0000 -15.9494 +v 3.8766 0.0000 -16.1076 +v 3.6713 0.8805 -16.0952 +v 3.6774 0.0000 -16.1141 +v 3.6703 0.8805 -15.9753 +v 3.6762 0.0000 -15.9560 +v 4.0134 1.7089 -16.2260 +v 4.0114 1.7089 -15.9598 +v 4.2105 1.7089 -15.9532 +v 4.2126 1.7089 -16.2194 +v 4.2286 0.8805 -16.1713 +v 4.2272 0.8805 -15.9847 +v 4.2106 0.0000 -15.9656 +v 4.2125 0.0000 -16.2070 +v 4.0777 0.8805 -16.1763 +v 4.0133 0.0000 -16.2136 +v 4.0762 0.8805 -15.9897 +v 4.0115 0.0000 -15.9722 +v 4.4543 1.8182 -16.1558 +v 4.4531 1.8182 -15.9976 +v 4.6522 1.8182 -15.9911 +v 4.6534 1.8182 -16.1492 +v 4.6720 0.8805 -16.2411 +v 4.6711 0.8805 -16.1212 +v 4.6992 0.0000 -15.9911 +v 4.7004 0.0000 -16.1492 +v 4.5211 0.8805 -16.2461 +v 4.5013 0.0000 -16.1558 +v 4.5201 0.8805 -16.1262 +v 4.5001 0.0000 -15.9976 +v 4.9947 1.4149 -16.2523 +v 4.9938 1.4149 -16.1324 +v 5.8969 1.4917 -15.9514 +v 5.8981 1.4917 -16.1096 +v 4.0917 1.5530 -16.1694 +v 4.0905 1.5530 -16.0112 +v 4.9883 1.2339 -16.2525 +v 5.8896 1.2529 -16.1099 +v 4.0831 1.3141 -16.1697 +v 4.9873 1.2339 -16.1326 +v 5.8884 1.2529 -15.9517 +v 4.0819 1.3141 -16.0115 +v 4.9927 0.5144 -15.9900 +v 4.9918 0.5144 -15.8701 +v 5.8969 0.5972 -15.9514 +v 5.8981 0.5972 -16.1096 +v 4.0917 0.6584 -16.1694 +v 4.0905 0.6584 -16.0112 +v 4.9863 0.3333 -15.9902 +v 5.8896 0.3583 -16.1099 +v 4.0831 0.4196 -16.1697 +v 4.9853 0.3333 -15.8703 +v 5.8884 0.3583 -15.9517 +v 4.0819 0.4196 -16.0115 +v 4.9119 1.8814 -16.1422 +v 4.9107 1.8814 -15.9841 +v 5.1098 1.8814 -15.9775 +v 5.1111 1.8814 -16.1356 +v 5.0874 0.8805 -16.1897 +v 5.0865 0.8805 -16.0698 +v 5.1098 0.0000 -15.9775 +v 5.1111 0.0000 -16.1356 +v 4.9364 0.8805 -16.1947 +v 4.9119 0.0000 -16.1422 +v 4.9355 0.8805 -16.0748 +v 4.9107 0.0000 -15.9841 +v 5.3602 1.6654 -16.1274 +v 5.3590 1.6654 -15.9692 +v 5.5581 1.6654 -15.9626 +v 5.5593 1.6654 -16.1208 +v 5.5127 0.8805 -16.0068 +v 5.5118 0.8805 -15.8869 +v 5.5581 0.0000 -15.9626 +v 5.5593 0.0000 -16.1208 +v 5.3618 0.8805 -16.0118 +v 5.3602 0.0000 -16.1274 +v 5.3609 0.8805 -15.8919 +v 5.3590 0.0000 -15.9692 +v 5.7605 1.7611 -16.1723 +v 5.7584 1.7611 -15.8978 +v 5.9575 1.7611 -15.8912 +v 5.9596 1.7611 -16.1657 +v 5.9048 0.8805 -16.0902 +v 5.9039 0.8805 -15.9703 +v 5.9580 0.0000 -15.9494 +v 5.9592 0.0000 -16.1076 +v 5.7539 0.8805 -16.0952 +v 5.7600 0.0000 -16.1141 +v 5.7529 0.8805 -15.9753 +v 5.7588 0.0000 -15.9560 +v 6.0960 1.7089 -16.2260 +v 6.0940 1.7089 -15.9598 +v 6.2931 1.7089 -15.9532 +v 6.2952 1.7089 -16.2194 +v 6.3112 0.8805 -16.1713 +v 6.3098 0.8805 -15.9847 +v 6.2932 0.0000 -15.9656 +v 6.2951 0.0000 -16.2070 +v 6.1603 0.8805 -16.1763 +v 6.0959 0.0000 -16.2136 +v 6.1588 0.8805 -15.9897 +v 6.0941 0.0000 -15.9722 +v 6.5369 1.8182 -16.1558 +v 6.5357 1.8182 -15.9976 +v 6.7348 1.8182 -15.9911 +v 6.7360 1.8182 -16.1492 +v 6.7546 0.8805 -16.2411 +v 6.7537 0.8805 -16.1212 +v 6.7818 0.0000 -15.9911 +v 6.7830 0.0000 -16.1492 +v 6.6037 0.8805 -16.2461 +v 6.5839 0.0000 -16.1558 +v 6.6027 0.8805 -16.1262 +v 6.5827 0.0000 -15.9976 +v 7.0773 1.4149 -16.2523 +v 7.0764 1.4149 -16.1324 +v 7.9795 1.4917 -15.9514 +v 7.9807 1.4917 -16.1096 +v 6.1743 1.5530 -16.1694 +v 6.1731 1.5530 -16.0112 +v 7.0709 1.2339 -16.2525 +v 7.9722 1.2529 -16.1099 +v 6.1657 1.3141 -16.1697 +v 7.0699 1.2339 -16.1327 +v 7.9710 1.2529 -15.9517 +v 6.1645 1.3141 -16.0115 +v 7.0753 0.5144 -15.9900 +v 7.0744 0.5144 -15.8701 +v 7.9795 0.5972 -15.9514 +v 7.9807 0.5972 -16.1096 +v 6.1743 0.6584 -16.1694 +v 6.1731 0.6584 -16.0112 +v 7.0689 0.3333 -15.9902 +v 7.9722 0.3583 -16.1099 +v 6.1657 0.4196 -16.1697 +v 7.0679 0.3333 -15.8703 +v 7.9710 0.3583 -15.9517 +v 6.1645 0.4196 -16.0115 +v 6.9945 1.8814 -16.1422 +v 6.9933 1.8814 -15.9841 +v 7.1924 1.8814 -15.9775 +v 7.1937 1.8814 -16.1356 +v 7.1700 0.8805 -16.1897 +v 7.1691 0.8805 -16.0698 +v 7.1924 0.0000 -15.9775 +v 7.1937 0.0000 -16.1356 +v 7.0190 0.8805 -16.1947 +v 6.9945 0.0000 -16.1422 +v 7.0181 0.8805 -16.0748 +v 6.9933 0.0000 -15.9841 +v 7.4428 1.6654 -16.1274 +v 7.4416 1.6654 -15.9692 +v 7.6407 1.6654 -15.9626 +v 7.6420 1.6654 -16.1208 +v 7.5953 0.8805 -16.0068 +v 7.5944 0.8805 -15.8869 +v 7.6407 0.0000 -15.9626 +v 7.6420 0.0000 -16.1208 +v 7.4444 0.8805 -16.0118 +v 7.4428 0.0000 -16.1274 +v 7.4435 0.8805 -15.8919 +v 7.4416 0.0000 -15.9692 +v 7.8431 1.7611 -16.1723 +v 7.8410 1.7611 -15.8978 +v 8.0401 1.7611 -15.8912 +v 8.0422 1.7611 -16.1657 +v 7.9874 0.8805 -16.0902 +v 7.9865 0.8805 -15.9703 +v 8.0406 0.0000 -15.9494 +v 8.0418 0.0000 -16.1076 +v 7.8365 0.8805 -16.0952 +v 7.8426 0.0000 -16.1142 +v 7.8355 0.8805 -15.9753 +v 7.8414 0.0000 -15.9560 +v 8.1786 1.7089 -16.2260 +v 8.1766 1.7089 -15.9598 +v 8.3757 1.7089 -15.9532 +v 8.3778 1.7089 -16.2194 +v 8.3938 0.8805 -16.1713 +v 8.3924 0.8805 -15.9847 +v 8.3758 0.0000 -15.9656 +v 8.3777 0.0000 -16.2070 +v 8.2429 0.8805 -16.1763 +v 8.1785 0.0000 -16.2136 +v 8.2414 0.8805 -15.9897 +v 8.1767 0.0000 -15.9722 +v 8.6195 1.8182 -16.1558 +v 8.6183 1.8182 -15.9976 +v 8.8174 1.8182 -15.9911 +v 8.8186 1.8182 -16.1492 +v 8.8372 0.8805 -16.2411 +v 8.8363 0.8805 -16.1212 +v 8.8644 0.0000 -15.9911 +v 8.8656 0.0000 -16.1492 +v 8.6863 0.8805 -16.2461 +v 8.6665 0.0000 -16.1558 +v 8.6854 0.8805 -16.1262 +v 8.6653 0.0000 -15.9976 +v 9.1599 1.4149 -16.2523 +v 9.1590 1.4149 -16.1324 +v 10.0621 1.4917 -15.9514 +v 10.0633 1.4917 -16.1096 +v 8.2569 1.5530 -16.1694 +v 8.2557 1.5530 -16.0112 +v 9.1535 1.2339 -16.2525 +v 10.0548 1.2529 -16.1099 +v 8.2483 1.3141 -16.1697 +v 9.1525 1.2339 -16.1327 +v 10.0536 1.2529 -15.9517 +v 8.2471 1.3141 -16.0115 +v 9.1579 0.5144 -15.9900 +v 9.1570 0.5144 -15.8701 +v 10.0621 0.5972 -15.9514 +v 10.0633 0.5972 -16.1096 +v 8.2569 0.6584 -16.1694 +v 8.2557 0.6584 -16.0112 +v 9.1515 0.3333 -15.9902 +v 10.0548 0.3583 -16.1099 +v 8.2483 0.4196 -16.1697 +v 9.1505 0.3333 -15.8703 +v 10.0536 0.3583 -15.9517 +v 8.2471 0.4196 -16.0115 +v 9.0771 1.8814 -16.1422 +v 9.0759 1.8814 -15.9841 +v 9.2751 1.8814 -15.9775 +v 9.2763 1.8814 -16.1356 +v 9.2526 0.8805 -16.1897 +v 9.2517 0.8805 -16.0698 +v 9.2751 0.0000 -15.9775 +v 9.2763 0.0000 -16.1356 +v 9.1016 0.8805 -16.1947 +v 9.0771 0.0000 -16.1422 +v 9.1007 0.8805 -16.0748 +v 9.0759 0.0000 -15.9841 +v 9.5254 1.6654 -16.1274 +v 9.5242 1.6654 -15.9692 +v 9.7233 1.6654 -15.9626 +v 9.7246 1.6654 -16.1208 +v 9.6779 0.8805 -16.0068 +v 9.6770 0.8805 -15.8869 +v 9.7233 0.0000 -15.9626 +v 9.7246 0.0000 -16.1208 +v 9.5270 0.8805 -16.0118 +v 9.5254 0.0000 -16.1274 +v 9.5261 0.8805 -15.8919 +v 9.5242 0.0000 -15.9692 +v 9.9257 1.7611 -16.1723 +v 9.9236 1.7611 -15.8978 +v 10.1227 1.7611 -15.8912 +v 10.1248 1.7611 -16.1657 +v 10.0700 0.8805 -16.0902 +v 10.0691 0.8805 -15.9703 +v 10.1232 0.0000 -15.9494 +v 10.1244 0.0000 -16.1076 +v 9.9191 0.8805 -16.0952 +v 9.9252 0.0000 -16.1142 +v 9.9181 0.8805 -15.9753 +v 9.9240 0.0000 -15.9560 +v 10.2612 1.7089 -16.2260 +v 10.2592 1.7089 -15.9598 +v 10.4583 1.7089 -15.9532 +v 10.4604 1.7089 -16.2194 +v 10.4764 0.8805 -16.1713 +v 10.4750 0.8805 -15.9847 +v 10.4584 0.0000 -15.9656 +v 10.4603 0.0000 -16.2070 +v 10.3255 0.8805 -16.1763 +v 10.2611 0.0000 -16.2136 +v 10.3240 0.8805 -15.9897 +v 10.2593 0.0000 -15.9722 +v 10.7021 1.8182 -16.1558 +v 10.7009 1.8182 -15.9976 +v 10.9000 1.8182 -15.9911 +v 10.9012 1.8182 -16.1492 +v 10.9198 0.8805 -16.2411 +v 10.9189 0.8805 -16.1212 +v 10.9470 0.0000 -15.9911 +v 10.9482 0.0000 -16.1492 +v 10.7689 0.8805 -16.2461 +v 10.7491 0.0000 -16.1558 +v 10.7679 0.8805 -16.1262 +v 10.7479 0.0000 -15.9976 +v 11.2425 1.4149 -16.2523 +v 11.2416 1.4149 -16.1324 +v 12.1447 1.4917 -15.9514 +v 12.1459 1.4917 -16.1096 +v 10.3395 1.5530 -16.1694 +v 10.3383 1.5530 -16.0112 +v 11.2360 1.2339 -16.2525 +v 12.1374 1.2529 -16.1099 +v 10.3309 1.3141 -16.1697 +v 11.2351 1.2339 -16.1327 +v 12.1362 1.2529 -15.9517 +v 10.3297 1.3141 -16.0115 +v 11.2405 0.5144 -15.9900 +v 11.2396 0.5144 -15.8701 +v 12.1447 0.5972 -15.9514 +v 12.1459 0.5972 -16.1096 +v 10.3395 0.6584 -16.1694 +v 10.3383 0.6584 -16.0112 +v 11.2340 0.3333 -15.9902 +v 12.1374 0.3583 -16.1099 +v 10.3309 0.4196 -16.1697 +v 11.2331 0.3333 -15.8703 +v 12.1362 0.3583 -15.9517 +v 10.3297 0.4196 -16.0115 +v 11.1597 1.8814 -16.1422 +v 11.1585 1.8814 -15.9841 +v 11.3576 1.8814 -15.9775 +v 11.3589 1.8814 -16.1356 +v 11.3352 0.8805 -16.1897 +v 11.3342 0.8805 -16.0698 +v 11.3576 0.0000 -15.9775 +v 11.3589 0.0000 -16.1356 +v 11.1842 0.8805 -16.1947 +v 11.1597 0.0000 -16.1422 +v 11.1833 0.8805 -16.0748 +v 11.1585 0.0000 -15.9841 +v 11.6080 1.6654 -16.1274 +v 11.6068 1.6654 -15.9692 +v 11.8059 1.6654 -15.9626 +v 11.8071 1.6654 -16.1208 +v 11.7605 0.8805 -16.0068 +v 11.7596 0.8805 -15.8869 +v 11.8059 0.0000 -15.9626 +v 11.8071 0.0000 -16.1208 +v 11.6096 0.8805 -16.0118 +v 11.6080 0.0000 -16.1274 +v 11.6087 0.8805 -15.8919 +v 11.6068 0.0000 -15.9692 +v 12.0083 1.7611 -16.1723 +v 12.0062 1.7611 -15.8978 +v 12.2053 1.7611 -15.8912 +v 12.2074 1.7611 -16.1657 +v 12.1526 0.8805 -16.0902 +v 12.1517 0.8805 -15.9703 +v 12.2057 0.0000 -15.9494 +v 12.2070 0.0000 -16.1076 +v 12.0017 0.8805 -16.0952 +v 12.0078 0.0000 -16.1142 +v 12.0007 0.8805 -15.9753 +v 12.0066 0.0000 -15.9560 +v 12.3438 1.7089 -16.2260 +v 12.3418 1.7089 -15.9598 +v 12.5409 1.7089 -15.9532 +v 12.5430 1.7089 -16.2194 +v 12.5590 0.8805 -16.1713 +v 12.5576 0.8805 -15.9847 +v 12.5410 0.0000 -15.9656 +v 12.5429 0.0000 -16.2070 +v 12.4081 0.8805 -16.1763 +v 12.3437 0.0000 -16.2136 +v 12.4066 0.8805 -15.9897 +v 12.3419 0.0000 -15.9722 +v 12.7847 1.8182 -16.1558 +v 12.7835 1.8182 -15.9976 +v 12.9826 1.8182 -15.9911 +v 12.9838 1.8182 -16.1492 +v 13.0024 0.8805 -16.2411 +v 13.0015 0.8805 -16.1212 +v 13.0296 0.0000 -15.9911 +v 13.0308 0.0000 -16.1492 +v 12.8515 0.8805 -16.2461 +v 12.8317 0.0000 -16.1558 +v 12.8505 0.8805 -16.1262 +v 12.8305 0.0000 -15.9976 +v 13.3251 1.4149 -16.2523 +v 13.3242 1.4149 -16.1324 +v 14.2273 1.4917 -15.9514 +v 14.2285 1.4917 -16.1096 +v 12.4221 1.5530 -16.1694 +v 12.4209 1.5530 -16.0112 +v 13.3187 1.2339 -16.2525 +v 14.2200 1.2529 -16.1099 +v 12.4135 1.3141 -16.1697 +v 13.3177 1.2339 -16.1327 +v 14.2188 1.2529 -15.9517 +v 12.4123 1.3141 -16.0115 +v 13.3231 0.5144 -15.9900 +v 13.3222 0.5144 -15.8701 +v 14.2273 0.5972 -15.9514 +v 14.2285 0.5972 -16.1096 +v 12.4221 0.6584 -16.1694 +v 12.4209 0.6584 -16.0112 +v 13.3167 0.3333 -15.9902 +v 14.2200 0.3583 -16.1099 +v 12.4135 0.4196 -16.1697 +v 13.3157 0.3333 -15.8703 +v 14.2188 0.3583 -15.9517 +v 12.4123 0.4196 -16.0115 +v 13.2423 1.8814 -16.1422 +v 13.2411 1.8814 -15.9841 +v 13.4402 1.8814 -15.9775 +v 13.4415 1.8814 -16.1356 +v 13.4178 0.8805 -16.1897 +v 13.4169 0.8805 -16.0698 +v 13.4402 0.0000 -15.9775 +v 13.4415 0.0000 -16.1356 +v 13.2668 0.8805 -16.1947 +v 13.2423 0.0000 -16.1422 +v 13.2659 0.8805 -16.0748 +v 13.2411 0.0000 -15.9841 +v 13.6906 1.6654 -16.1274 +v 13.6894 1.6654 -15.9692 +v 13.8885 1.6654 -15.9626 +v 13.8898 1.6654 -16.1208 +v 13.8432 0.8805 -16.0068 +v 13.8422 0.8805 -15.8869 +v 13.8885 0.0000 -15.9626 +v 13.8898 0.0000 -16.1208 +v 13.6922 0.8805 -16.0118 +v 13.6906 0.0000 -16.1274 +v 13.6913 0.8805 -15.8919 +v 13.6894 0.0000 -15.9692 +v 14.0909 1.7611 -16.1723 +v 14.0888 1.7611 -15.8978 +v 14.2879 1.7611 -15.8912 +v 14.2900 1.7611 -16.1657 +v 14.2352 0.8805 -16.0902 +v 14.2343 0.8805 -15.9703 +v 14.2884 0.0000 -15.9494 +v 14.2896 0.0000 -16.1076 +v 14.0843 0.8805 -16.0952 +v 14.0904 0.0000 -16.1142 +v 14.0833 0.8805 -15.9753 +v 14.0892 0.0000 -15.9560 +v 14.4264 1.7089 -16.2260 +v 14.4244 1.7089 -15.9598 +v 14.6235 1.7089 -15.9532 +v 14.6256 1.7089 -16.2194 +v 14.6416 0.8805 -16.1713 +v 14.6402 0.8805 -15.9847 +v 14.6236 0.0000 -15.9656 +v 14.6255 0.0000 -16.2070 +v 14.4907 0.8805 -16.1763 +v 14.4263 0.0000 -16.2136 +v 14.4892 0.8805 -15.9897 +v 14.4245 0.0000 -15.9722 +v 14.8673 1.8182 -16.1558 +v 14.8661 1.8182 -15.9976 +v 15.0652 1.8182 -15.9911 +v 15.0664 1.8182 -16.1492 +v 15.0850 0.8805 -16.2411 +v 15.0841 0.8805 -16.1212 +v 15.1122 0.0000 -15.9911 +v 15.1134 0.0000 -16.1492 +v 14.9341 0.8805 -16.2461 +v 14.9143 0.0000 -16.1558 +v 14.9331 0.8805 -16.1262 +v 14.9131 0.0000 -15.9976 +v 15.4077 1.4149 -16.2523 +v 15.4068 1.4149 -16.1324 +v 16.3099 1.4917 -15.9514 +v 16.3111 1.4917 -16.1096 +v 14.5047 1.5530 -16.1694 +v 14.5035 1.5530 -16.0112 +v 15.4012 1.2339 -16.2525 +v 16.3026 1.2529 -16.1099 +v 14.4961 1.3141 -16.1697 +v 15.4003 1.2339 -16.1327 +v 16.3014 1.2529 -15.9517 +v 14.4949 1.3141 -16.0115 +v 15.4057 0.5144 -15.9900 +v 15.4048 0.5144 -15.8701 +v 16.3099 0.5972 -15.9514 +v 16.3111 0.5972 -16.1096 +v 14.5047 0.6584 -16.1694 +v 14.5035 0.6584 -16.0112 +v 15.3992 0.3333 -15.9902 +v 16.3026 0.3583 -16.1099 +v 14.4961 0.4196 -16.1697 +v 15.3983 0.3333 -15.8703 +v 16.3014 0.3583 -15.9517 +v 14.4949 0.4196 -16.0115 +v 15.3249 1.8814 -16.1422 +v 15.3237 1.8814 -15.9841 +v 15.5228 1.8814 -15.9775 +v 15.5241 1.8814 -16.1356 +v 15.5004 0.8805 -16.1897 +v 15.4995 0.8805 -16.0698 +v 15.5228 0.0000 -15.9775 +v 15.5241 0.0000 -16.1356 +v 15.3494 0.8805 -16.1947 +v 15.3249 0.0000 -16.1422 +v 15.3485 0.8805 -16.0748 +v 15.3237 0.0000 -15.9841 +v 15.7732 1.6654 -16.1274 +v 15.7720 1.6654 -15.9692 +v 15.9711 1.6654 -15.9626 +v 15.9723 1.6654 -16.1208 +v 15.9257 0.8805 -16.0068 +v 15.9248 0.8805 -15.8869 +v 15.9711 0.0000 -15.9626 +v 15.9723 0.0000 -16.1208 +v 15.7748 0.8805 -16.0118 +v 15.7732 0.0000 -16.1274 +v 15.7739 0.8805 -15.8919 +v 15.7720 0.0000 -15.9692 +v 16.1735 1.7611 -16.1723 +v 16.1714 1.7611 -15.8978 +v 16.3705 1.7611 -15.8912 +v 16.3726 1.7611 -16.1657 +v 16.3178 0.8805 -16.0902 +v 16.3169 0.8805 -15.9703 +v 16.3710 0.0000 -15.9494 +v 16.3722 0.0000 -16.1076 +v 16.1669 0.8805 -16.0952 +v 16.1730 0.0000 -16.1142 +v 16.1659 0.8805 -15.9753 +v 16.1718 0.0000 -15.9560 +v 16.4188 1.7089 -16.2260 +v 16.4168 1.7089 -15.9598 +v 16.6159 1.7089 -15.9532 +v 16.6180 1.7089 -16.2194 +v 16.6340 0.8805 -16.1713 +v 16.6326 0.8805 -15.9847 +v 16.6160 0.0000 -15.9656 +v 16.6179 0.0000 -16.2070 +v 16.4831 0.8805 -16.1763 +v 16.4188 0.0000 -16.2136 +v 16.4817 0.8805 -15.9897 +v 16.4169 0.0000 -15.9722 +v 16.8597 1.8182 -16.1558 +v 16.8585 1.8182 -15.9976 +v 17.0576 1.8182 -15.9911 +v 17.0588 1.8182 -16.1492 +v 17.0774 0.8805 -16.2411 +v 17.0765 0.8805 -16.1212 +v 17.1046 0.0000 -15.9911 +v 17.1058 0.0000 -16.1492 +v 16.9265 0.8805 -16.2461 +v 16.9067 0.0000 -16.1558 +v 16.9256 0.8805 -16.1262 +v 16.9055 0.0000 -15.9976 +v 17.4001 1.4149 -16.2523 +v 17.3992 1.4149 -16.1324 +v 18.3023 1.4917 -15.9514 +v 18.3035 1.4917 -16.1096 +v 16.4971 1.5530 -16.1694 +v 16.4959 1.5530 -16.0112 +v 17.3937 1.2339 -16.2525 +v 18.2950 1.2529 -16.1099 +v 16.4886 1.3141 -16.1697 +v 17.3927 1.2339 -16.1327 +v 18.2938 1.2529 -15.9517 +v 16.4873 1.3141 -16.0115 +v 17.3981 0.5144 -15.9900 +v 17.3972 0.5144 -15.8701 +v 18.3023 0.5972 -15.9514 +v 18.3035 0.5972 -16.1096 +v 16.4971 0.6584 -16.1694 +v 16.4959 0.6584 -16.0112 +v 17.3917 0.3333 -15.9902 +v 18.2950 0.3583 -16.1099 +v 16.4886 0.4196 -16.1697 +v 17.3907 0.3333 -15.8703 +v 18.2938 0.3583 -15.9517 +v 16.4873 0.4196 -16.0115 +v 17.3173 1.8814 -16.1422 +v 17.3161 1.8814 -15.9841 +v 17.5153 1.8814 -15.9775 +v 17.5165 1.8814 -16.1356 +v 17.4928 0.8805 -16.1897 +v 17.4919 0.8805 -16.0698 +v 17.5153 0.0000 -15.9775 +v 17.5165 0.0000 -16.1356 +v 17.3418 0.8805 -16.1947 +v 17.3173 0.0000 -16.1422 +v 17.3409 0.8805 -16.0748 +v 17.3161 0.0000 -15.9841 +v 17.7656 1.6654 -16.1274 +v 17.7644 1.6654 -15.9692 +v 17.9636 1.6654 -15.9626 +v 17.9648 1.6654 -16.1208 +v 17.9182 0.8805 -16.0068 +v 17.9172 0.8805 -15.8869 +v 17.9636 0.0000 -15.9626 +v 17.9648 0.0000 -16.1208 +v 17.7672 0.8805 -16.0118 +v 17.7656 0.0000 -16.1274 +v 17.7663 0.8805 -15.8919 +v 17.7644 0.0000 -15.9692 +v 18.1659 1.7611 -16.1723 +v 18.1638 1.7611 -15.8978 +v 18.3629 1.7611 -15.8912 +v 18.3650 1.7611 -16.1657 +v 18.3102 0.8805 -16.0902 +v 18.3093 0.8805 -15.9703 +v 18.3634 0.0000 -15.9494 +v 18.3646 0.0000 -16.1076 +v 18.1593 0.8805 -16.0952 +v 18.1654 0.0000 -16.1142 +v 18.1584 0.8805 -15.9753 +v 18.1642 0.0000 -15.9560 +v 18.4203 1.7089 -15.6952 +v 18.1542 1.7089 -15.6972 +v 18.1476 1.7089 -15.4981 +v 18.4137 1.7089 -15.4960 +v 18.3657 0.8805 -15.4800 +v 18.1791 0.8805 -15.4814 +v 18.1600 0.0000 -15.4980 +v 18.4013 0.0000 -15.4961 +v 18.3707 0.8805 -15.6309 +v 18.4079 0.0000 -15.6953 +v 18.1841 0.8805 -15.6324 +v 18.1666 0.0000 -15.6971 +v 18.3502 1.8182 -15.2543 +v 18.1920 1.8182 -15.2555 +v 18.1854 1.8182 -15.0564 +v 18.3436 1.8182 -15.0552 +v 18.4355 0.8805 -15.0366 +v 18.3156 0.8805 -15.0375 +v 18.1854 0.0000 -15.0094 +v 18.3436 0.0000 -15.0082 +v 18.4405 0.8805 -15.1875 +v 18.3502 0.0000 -15.2073 +v 18.3206 0.8805 -15.1884 +v 18.1920 0.0000 -15.2085 +v 18.4467 1.4149 -14.7139 +v 18.3268 1.4149 -14.7148 +v 18.1458 1.4917 -13.8117 +v 18.3039 1.4917 -13.8105 +v 18.3637 1.5530 -15.6169 +v 18.2056 1.5530 -15.6181 +v 18.4469 1.2339 -14.7203 +v 18.3042 1.2529 -13.8190 +v 18.3640 1.3141 -15.6255 +v 18.3270 1.2339 -14.7213 +v 18.1460 1.2529 -13.8202 +v 18.2059 1.3141 -15.6267 +v 18.1843 0.5144 -14.7159 +v 18.0644 0.5144 -14.7168 +v 18.1458 0.5972 -13.8117 +v 18.3039 0.5972 -13.8105 +v 18.3637 0.6584 -15.6169 +v 18.2056 0.6584 -15.6181 +v 18.1845 0.3333 -14.7223 +v 18.3042 0.3583 -13.8190 +v 18.3640 0.4196 -15.6255 +v 18.0646 0.3333 -14.7233 +v 18.1460 0.3583 -13.8202 +v 18.2059 0.4196 -15.6267 +v 18.3366 1.8814 -14.7967 +v 18.1784 1.8814 -14.7979 +v 18.1718 1.8814 -14.5987 +v 18.3300 1.8814 -14.5975 +v 18.3841 0.8805 -14.6212 +v 18.2642 0.8805 -14.6221 +v 18.1718 0.0000 -14.5987 +v 18.3300 0.0000 -14.5975 +v 18.3891 0.8805 -14.7722 +v 18.3366 0.0000 -14.7967 +v 18.2691 0.8805 -14.7731 +v 18.1784 0.0000 -14.7979 +v 18.3218 1.6654 -14.3484 +v 18.1636 1.6654 -14.3496 +v 18.1570 1.6654 -14.1505 +v 18.3152 1.6654 -14.1492 +v 18.2012 0.8805 -14.1958 +v 18.0813 0.8805 -14.1968 +v 18.1570 0.0000 -14.1505 +v 18.3152 0.0000 -14.1492 +v 18.2062 0.8805 -14.3468 +v 18.3218 0.0000 -14.3484 +v 18.0863 0.8805 -14.3477 +v 18.1636 0.0000 -14.3496 +v 18.3667 1.7611 -13.9481 +v 18.0922 1.7611 -13.9502 +v 18.0856 1.7611 -13.7511 +v 18.3601 1.7611 -13.7490 +v 18.2846 0.8805 -13.8038 +v 18.1647 0.8805 -13.8047 +v 18.1437 0.0000 -13.7506 +v 18.3019 0.0000 -13.7494 +v 18.2896 0.8805 -13.9547 +v 18.3085 0.0000 -13.9486 +v 18.1697 0.8805 -13.9557 +v 18.1503 0.0000 -13.9498 +v 18.4203 1.7089 -13.6126 +v 18.1542 1.7089 -13.6146 +v 18.1476 1.7089 -13.4154 +v 18.4137 1.7089 -13.4134 +v 18.3657 0.8805 -13.3974 +v 18.1791 0.8805 -13.3988 +v 18.1600 0.0000 -13.4154 +v 18.4013 0.0000 -13.4135 +v 18.3707 0.8805 -13.5483 +v 18.4079 0.0000 -13.6126 +v 18.1841 0.8805 -13.5497 +v 18.1666 0.0000 -13.6145 +v 18.3502 1.8182 -13.1717 +v 18.1920 1.8182 -13.1729 +v 18.1854 1.8182 -12.9738 +v 18.3436 1.8182 -12.9726 +v 18.4355 0.8805 -12.9540 +v 18.3156 0.8805 -12.9549 +v 18.1854 0.0000 -12.9268 +v 18.3436 0.0000 -12.9256 +v 18.4405 0.8805 -13.1049 +v 18.3502 0.0000 -13.1247 +v 18.3206 0.8805 -13.1058 +v 18.1920 0.0000 -13.1259 +v 18.4467 1.4149 -12.6313 +v 18.3268 1.4149 -12.6322 +v 18.1458 1.4917 -11.7291 +v 18.3039 1.4917 -11.7279 +v 18.3637 1.5530 -13.5343 +v 18.2056 1.5530 -13.5355 +v 18.4469 1.2339 -12.6377 +v 18.3042 1.2529 -11.7364 +v 18.3640 1.3141 -13.5428 +v 18.3270 1.2339 -12.6387 +v 18.1460 1.2529 -11.7376 +v 18.2059 1.3141 -13.5441 +v 18.1843 0.5144 -12.6333 +v 18.0644 0.5144 -12.6342 +v 18.1458 0.5972 -11.7291 +v 18.3039 0.5972 -11.7279 +v 18.3637 0.6584 -13.5343 +v 18.2056 0.6584 -13.5355 +v 18.1845 0.3333 -12.6397 +v 18.3042 0.3583 -11.7364 +v 18.3640 0.4196 -13.5428 +v 18.0646 0.3333 -12.6407 +v 18.1460 0.3583 -11.7376 +v 18.2059 0.4196 -13.5441 +v 18.3366 1.8814 -12.7141 +v 18.1784 1.8814 -12.7153 +v 18.1718 1.8814 -12.5161 +v 18.3300 1.8814 -12.5149 +v 18.3841 0.8805 -12.5386 +v 18.2642 0.8805 -12.5395 +v 18.1718 0.0000 -12.5161 +v 18.3300 0.0000 -12.5149 +v 18.3891 0.8805 -12.6896 +v 18.3366 0.0000 -12.7141 +v 18.2691 0.8805 -12.6905 +v 18.1784 0.0000 -12.7153 +v 18.3218 1.6654 -12.2658 +v 18.1636 1.6654 -12.2670 +v 18.1570 1.6654 -12.0679 +v 18.3152 1.6654 -12.0666 +v 18.2012 0.8805 -12.1132 +v 18.0813 0.8805 -12.1142 +v 18.1570 0.0000 -12.0679 +v 18.3152 0.0000 -12.0666 +v 18.2062 0.8805 -12.2642 +v 18.3218 0.0000 -12.2658 +v 18.0863 0.8805 -12.2651 +v 18.1636 0.0000 -12.2670 +v 18.3667 1.7611 -11.8655 +v 18.0922 1.7611 -11.8676 +v 18.0856 1.7611 -11.6685 +v 18.3601 1.7611 -11.6664 +v 18.2846 0.8805 -11.7212 +v 18.1647 0.8805 -11.7221 +v 18.1437 0.0000 -11.6680 +v 18.3019 0.0000 -11.6668 +v 18.2896 0.8805 -11.8721 +v 18.3085 0.0000 -11.8660 +v 18.1697 0.8805 -11.8730 +v 18.1503 0.0000 -11.8672 +v 18.4203 1.7089 -11.5205 +v 18.1542 1.7089 -11.5225 +v 18.1476 1.7089 -11.3233 +v 18.4137 1.7089 -11.3213 +v 18.3657 0.8805 -11.3053 +v 18.1791 0.8805 -11.3067 +v 18.1600 0.0000 -11.3233 +v 18.4013 0.0000 -11.3214 +v 18.3707 0.8805 -11.4562 +v 18.4079 0.0000 -11.5205 +v 18.1841 0.8805 -11.4576 +v 18.1666 0.0000 -11.5224 +v 18.3502 1.8182 -11.0796 +v 18.1920 1.8182 -11.0808 +v 18.1854 1.8182 -10.8817 +v 18.3436 1.8182 -10.8805 +v 18.4355 0.8805 -10.8619 +v 18.3156 0.8805 -10.8628 +v 18.1854 0.0000 -10.8347 +v 18.3436 0.0000 -10.8335 +v 18.4405 0.8805 -11.0128 +v 18.3502 0.0000 -11.0326 +v 18.3206 0.8805 -11.0137 +v 18.1920 0.0000 -11.0338 +v 18.4467 1.4149 -10.5392 +v 18.3268 1.4149 -10.5401 +v 18.1458 1.4917 -9.6370 +v 18.3039 1.4917 -9.6358 +v 18.3637 1.5530 -11.4422 +v 18.2056 1.5530 -11.4434 +v 18.4469 1.2339 -10.5456 +v 18.3042 1.2529 -9.6443 +v 18.3640 1.3141 -11.4507 +v 18.3270 1.2339 -10.5465 +v 18.1460 1.2529 -9.6455 +v 18.2059 1.3141 -11.4520 +v 18.1843 0.5144 -10.5412 +v 18.0644 0.5144 -10.5421 +v 18.1458 0.5972 -9.6370 +v 18.3039 0.5972 -9.6358 +v 18.3637 0.6584 -11.4422 +v 18.2056 0.6584 -11.4434 +v 18.1845 0.3333 -10.5476 +v 18.3042 0.3583 -9.6443 +v 18.3640 0.4196 -11.4507 +v 18.0646 0.3333 -10.5485 +v 18.1460 0.3583 -9.6455 +v 18.2059 0.4196 -11.4520 +v 18.3366 1.8814 -10.6220 +v 18.1784 1.8814 -10.6232 +v 18.1718 1.8814 -10.4240 +v 18.3300 1.8814 -10.4228 +v 18.3841 0.8805 -10.4465 +v 18.2642 0.8805 -10.4474 +v 18.1718 0.0000 -10.4240 +v 18.3300 0.0000 -10.4228 +v 18.3891 0.8805 -10.5975 +v 18.3366 0.0000 -10.6220 +v 18.2691 0.8805 -10.5984 +v 18.1784 0.0000 -10.6232 +v 18.3218 1.6654 -10.1737 +v 18.1636 1.6654 -10.1749 +v 18.1570 1.6654 -9.9757 +v 18.3152 1.6654 -9.9745 +v 18.2012 0.8805 -10.0211 +v 18.0813 0.8805 -10.0221 +v 18.1570 0.0000 -9.9757 +v 18.3152 0.0000 -9.9745 +v 18.2062 0.8805 -10.1721 +v 18.3218 0.0000 -10.1737 +v 18.0863 0.8805 -10.1730 +v 18.1636 0.0000 -10.1749 +v 18.3667 1.7611 -9.7734 +v 18.0922 1.7611 -9.7755 +v 18.0856 1.7611 -9.5764 +v 18.3601 1.7611 -9.5743 +v 18.2846 0.8805 -9.6291 +v 18.1647 0.8805 -9.6300 +v 18.1437 0.0000 -9.5759 +v 18.3019 0.0000 -9.5747 +v 18.2896 0.8805 -9.7800 +v 18.3085 0.0000 -9.7739 +v 18.1697 0.8805 -9.7809 +v 18.1503 0.0000 -9.7751 +v 18.4203 1.7088 -9.4379 +v 18.1542 1.7088 -9.4399 +v 18.1476 1.7088 -9.2407 +v 18.4137 1.7088 -9.2387 +v 18.3657 0.8805 -9.2227 +v 18.1791 0.8805 -9.2241 +v 18.1600 0.0000 -9.2407 +v 18.4013 0.0000 -9.2388 +v 18.3707 0.8805 -9.3736 +v 18.4079 0.0000 -9.4379 +v 18.1841 0.8805 -9.3750 +v 18.1666 0.0000 -9.4398 +v 18.3502 1.8182 -8.9970 +v 18.1920 1.8182 -8.9982 +v 18.1854 1.8182 -8.7991 +v 18.3436 1.8182 -8.7979 +v 18.4355 0.8805 -8.7793 +v 18.3156 0.8805 -8.7802 +v 18.1854 0.0000 -8.7521 +v 18.3436 0.0000 -8.7509 +v 18.4405 0.8805 -8.9302 +v 18.3502 0.0000 -8.9500 +v 18.3206 0.8805 -8.9311 +v 18.1920 0.0000 -8.9512 +v 18.4467 1.4149 -8.4566 +v 18.3268 1.4149 -8.4575 +v 18.1458 1.4917 -7.5544 +v 18.3039 1.4917 -7.5532 +v 18.3637 1.5530 -9.3596 +v 18.2056 1.5530 -9.3608 +v 18.4469 1.2339 -8.4630 +v 18.3042 1.2529 -7.5617 +v 18.3640 1.3141 -9.3681 +v 18.3270 1.2339 -8.4639 +v 18.1460 1.2529 -7.5629 +v 18.2059 1.3141 -9.3694 +v 18.1843 0.5144 -8.4586 +v 18.0644 0.5144 -8.4595 +v 18.1458 0.5972 -7.5544 +v 18.3039 0.5972 -7.5532 +v 18.3637 0.6584 -9.3596 +v 18.2056 0.6584 -9.3608 +v 18.1845 0.3333 -8.4650 +v 18.3042 0.3583 -7.5617 +v 18.3640 0.4196 -9.3681 +v 18.0646 0.3333 -8.4660 +v 18.1460 0.3583 -7.5629 +v 18.2059 0.4196 -9.3694 +v 18.3366 1.8814 -8.5394 +v 18.1784 1.8814 -8.5406 +v 18.1718 1.8814 -8.3414 +v 18.3300 1.8814 -8.3402 +v 18.3841 0.8805 -8.3639 +v 18.2642 0.8805 -8.3648 +v 18.1718 0.0000 -8.3414 +v 18.3300 0.0000 -8.3402 +v 18.3891 0.8805 -8.5149 +v 18.3366 0.0000 -8.5394 +v 18.2691 0.8805 -8.5158 +v 18.1784 0.0000 -8.5406 +v 18.3218 1.6654 -8.0911 +v 18.1636 1.6654 -8.0923 +v 18.1570 1.6654 -7.8931 +v 18.3152 1.6654 -7.8919 +v 18.2012 0.8805 -7.9385 +v 18.0813 0.8805 -7.9395 +v 18.1570 0.0000 -7.8932 +v 18.3152 0.0000 -7.8919 +v 18.2062 0.8805 -8.0895 +v 18.3218 0.0000 -8.0911 +v 18.0863 0.8805 -8.0904 +v 18.1636 0.0000 -8.0923 +v 18.3667 1.7611 -7.6908 +v 18.0922 1.7611 -7.6929 +v 18.0856 1.7611 -7.4938 +v 18.3601 1.7611 -7.4917 +v 18.2846 0.8805 -7.5465 +v 18.1647 0.8805 -7.5474 +v 18.1437 0.0000 -7.4933 +v 18.3019 0.0000 -7.4921 +v 18.2896 0.8805 -7.6974 +v 18.3085 0.0000 -7.6913 +v 18.1697 0.8805 -7.6983 +v 18.1503 0.0000 -7.6925 +v 18.4203 1.7088 -7.3786 +v 18.1542 1.7088 -7.3806 +v 18.1476 1.7088 -7.1815 +v 18.4137 1.7088 -7.1795 +v 18.3657 0.8805 -7.1634 +v 18.1791 0.8805 -7.1648 +v 18.1600 0.0000 -7.1814 +v 18.4013 0.0000 -7.1795 +v 18.3707 0.8805 -7.3143 +v 18.4079 0.0000 -7.3787 +v 18.1841 0.8805 -7.3158 +v 18.1666 0.0000 -7.3805 +v 18.3502 1.8182 -6.9377 +v 18.1920 1.8182 -6.9390 +v 18.1854 1.8182 -6.7398 +v 18.3436 1.8182 -6.7386 +v 18.4355 0.8805 -6.7200 +v 18.3156 0.8805 -6.7209 +v 18.1854 0.0000 -6.6928 +v 18.3436 0.0000 -6.6916 +v 18.4405 0.8805 -6.8709 +v 18.3502 0.0000 -6.8907 +v 18.3206 0.8805 -6.8719 +v 18.1920 0.0000 -6.8919 +v 18.4467 1.4149 -6.3973 +v 18.3268 1.4149 -6.3982 +v 18.1458 1.4917 -5.4951 +v 18.3039 1.4917 -5.4939 +v 18.3637 1.5530 -7.3003 +v 18.2056 1.5530 -7.3015 +v 18.4469 1.2339 -6.4038 +v 18.3042 1.2529 -5.5024 +v 18.3640 1.3141 -7.3089 +v 18.3270 1.2339 -6.4047 +v 18.1460 1.2529 -5.5036 +v 18.2059 1.3141 -7.3101 +v 18.1843 0.5144 -6.3993 +v 18.0644 0.5144 -6.4002 +v 18.1458 0.5972 -5.4951 +v 18.3039 0.5972 -5.4939 +v 18.3637 0.6584 -7.3003 +v 18.2056 0.6584 -7.3015 +v 18.1845 0.3333 -6.4058 +v 18.3042 0.3583 -5.5024 +v 18.3640 0.4196 -7.3089 +v 18.0646 0.3333 -6.4067 +v 18.1460 0.3583 -5.5036 +v 18.2059 0.4196 -7.3101 +v 18.3366 1.8814 -6.4801 +v 18.1784 1.8814 -6.4813 +v 18.1718 1.8814 -6.2822 +v 18.3300 1.8814 -6.2810 +v 18.3841 0.8805 -6.3046 +v 18.2642 0.8805 -6.3056 +v 18.1718 0.0000 -6.2822 +v 18.3300 0.0000 -6.2810 +v 18.3891 0.8805 -6.4556 +v 18.3366 0.0000 -6.4801 +v 18.2691 0.8805 -6.4565 +v 18.1784 0.0000 -6.4813 +v 18.3218 1.6654 -6.0318 +v 18.1636 1.6654 -6.0330 +v 18.1570 1.6654 -5.8339 +v 18.3152 1.6654 -5.8327 +v 18.2012 0.8805 -5.8793 +v 18.0813 0.8805 -5.8802 +v 18.1570 0.0000 -5.8339 +v 18.3152 0.0000 -5.8327 +v 18.2062 0.8805 -6.0302 +v 18.3218 0.0000 -6.0318 +v 18.0863 0.8805 -6.0311 +v 18.1636 0.0000 -6.0330 +v 18.3667 1.7611 -5.6315 +v 18.0922 1.7611 -5.6336 +v 18.0856 1.7611 -5.4345 +v 18.3601 1.7611 -5.4324 +v 18.2846 0.8805 -5.4872 +v 18.1647 0.8805 -5.4881 +v 18.1437 0.0000 -5.4341 +v 18.3019 0.0000 -5.4329 +v 18.2896 0.8805 -5.6382 +v 18.3085 0.0000 -5.6320 +v 18.1697 0.8805 -5.6391 +v 18.1503 0.0000 -5.6332 +v 18.4203 1.7088 -5.2960 +v 18.1542 1.7088 -5.2980 +v 18.1476 1.7088 -5.0989 +v 18.4137 1.7088 -5.0969 +v 18.3657 0.8805 -5.0808 +v 18.1791 0.8805 -5.0822 +v 18.1600 0.0000 -5.0988 +v 18.4013 0.0000 -5.0969 +v 18.3707 0.8805 -5.2317 +v 18.4079 0.0000 -5.2961 +v 18.1841 0.8805 -5.2332 +v 18.1666 0.0000 -5.2979 +v 18.3502 1.8182 -4.8551 +v 18.1920 1.8182 -4.8564 +v 18.1854 1.8182 -4.6572 +v 18.3436 1.8182 -4.6560 +v 18.4355 0.8805 -4.6374 +v 18.3156 0.8805 -4.6383 +v 18.1854 0.0000 -4.6102 +v 18.3436 0.0000 -4.6090 +v 18.4405 0.8805 -4.7883 +v 18.3502 0.0000 -4.8081 +v 18.3206 0.8805 -4.7893 +v 18.1920 0.0000 -4.8093 +v 18.4467 1.4149 -4.3147 +v 18.3268 1.4149 -4.3156 +v 18.1458 1.4917 -3.4125 +v 18.3039 1.4917 -3.4113 +v 18.3637 1.5530 -5.2177 +v 18.2056 1.5530 -5.2190 +v 18.4469 1.2339 -4.3212 +v 18.3042 1.2529 -3.4198 +v 18.3640 1.3141 -5.2263 +v 18.3270 1.2339 -4.3221 +v 18.1460 1.2529 -3.4210 +v 18.2059 1.3141 -5.2275 +v 18.1843 0.5144 -4.3167 +v 18.0644 0.5144 -4.3176 +v 18.1458 0.5972 -3.4125 +v 18.3039 0.5972 -3.4113 +v 18.3637 0.6584 -5.2177 +v 18.2056 0.6584 -5.2190 +v 18.1845 0.3333 -4.3232 +v 18.3042 0.3583 -3.4198 +v 18.3640 0.4196 -5.2263 +v 18.0646 0.3333 -4.3241 +v 18.1460 0.3583 -3.4210 +v 18.2059 0.4196 -5.2275 +v 18.3366 1.8814 -4.3975 +v 18.1784 1.8814 -4.3987 +v 18.1718 1.8814 -4.1996 +v 18.3300 1.8814 -4.1984 +v 18.3841 0.8805 -4.2220 +v 18.2642 0.8805 -4.2230 +v 18.1718 0.0000 -4.1996 +v 18.3300 0.0000 -4.1984 +v 18.3891 0.8805 -4.3730 +v 18.3366 0.0000 -4.3975 +v 18.2691 0.8805 -4.3739 +v 18.1784 0.0000 -4.3987 +v 18.3218 1.6654 -3.9492 +v 18.1636 1.6654 -3.9504 +v 18.1570 1.6654 -3.7513 +v 18.3152 1.6654 -3.7501 +v 18.2012 0.8805 -3.7967 +v 18.0813 0.8805 -3.7976 +v 18.1570 0.0000 -3.7513 +v 18.3152 0.0000 -3.7501 +v 18.2062 0.8805 -3.9476 +v 18.3218 0.0000 -3.9492 +v 18.0863 0.8805 -3.9485 +v 18.1636 0.0000 -3.9504 +v 18.3667 1.7611 -3.5489 +v 18.0922 1.7611 -3.5510 +v 18.0856 1.7611 -3.3519 +v 18.3601 1.7611 -3.3498 +v 18.2846 0.8805 -3.4046 +v 18.1647 0.8805 -3.4055 +v 18.1437 0.0000 -3.3515 +v 18.3019 0.0000 -3.3503 +v 18.2896 0.8805 -3.5556 +v 18.3085 0.0000 -3.5494 +v 18.1697 0.8805 -3.5565 +v 18.1503 0.0000 -3.5506 +v 18.4203 1.7088 -3.2304 +v 18.1542 1.7088 -3.2324 +v 18.1476 1.7088 -3.0333 +v 18.4137 1.7088 -3.0313 +v 18.3657 0.8805 -3.0152 +v 18.1791 0.8805 -3.0166 +v 18.1600 0.0000 -3.0332 +v 18.4013 0.0000 -3.0314 +v 18.3707 0.8805 -3.1662 +v 18.4079 0.0000 -3.2305 +v 18.1841 0.8805 -3.1676 +v 18.1666 0.0000 -3.2323 +v 18.3502 1.8182 -2.7896 +v 18.1920 1.8182 -2.7908 +v 18.1854 1.8182 -2.5916 +v 18.3436 1.8182 -2.5904 +v 18.4355 0.8805 -2.5718 +v 18.3156 0.8805 -2.5727 +v 18.1854 0.0000 -2.5446 +v 18.3436 0.0000 -2.5434 +v 18.4405 0.8805 -2.7228 +v 18.3502 0.0000 -2.7426 +v 18.3206 0.8805 -2.7237 +v 18.1920 0.0000 -2.7438 +v 18.4467 1.4149 -2.2491 +v 18.3268 1.4149 -2.2500 +v 18.1458 1.4917 -1.3469 +v 18.3039 1.4917 -1.3457 +v 18.3637 1.5530 -3.1522 +v 18.2056 1.5530 -3.1534 +v 18.4469 1.2339 -2.2556 +v 18.3042 1.2529 -1.3543 +v 18.3640 1.3141 -3.1607 +v 18.3270 1.2339 -2.2565 +v 18.1460 1.2529 -1.3555 +v 18.2059 1.3141 -3.1619 +v 18.1843 0.5144 -2.2511 +v 18.0644 0.5144 -2.2520 +v 18.1458 0.5972 -1.3469 +v 18.3039 0.5972 -1.3457 +v 18.3637 0.6584 -3.1522 +v 18.2056 0.6584 -3.1534 +v 18.1845 0.3333 -2.2576 +v 18.3042 0.3583 -1.3543 +v 18.3640 0.4196 -3.1607 +v 18.0646 0.3333 -2.2585 +v 18.1460 0.3583 -1.3555 +v 18.2059 0.4196 -3.1619 +v 18.3366 1.8814 -2.3319 +v 18.1784 1.8814 -2.3331 +v 18.1718 1.8814 -2.1340 +v 18.3300 1.8814 -2.1328 +v 18.3841 0.8805 -2.1565 +v 18.2642 0.8805 -2.1574 +v 18.1718 0.0000 -2.1340 +v 18.3300 0.0000 -2.1328 +v 18.3891 0.8805 -2.3074 +v 18.3366 0.0000 -2.3319 +v 18.2691 0.8805 -2.3083 +v 18.1784 0.0000 -2.3331 +v 18.3218 1.6654 -1.8836 +v 18.1636 1.6654 -1.8848 +v 18.1570 1.6654 -1.6857 +v 18.3152 1.6654 -1.6845 +v 18.2012 0.8805 -1.7311 +v 18.0813 0.8805 -1.7320 +v 18.1570 0.0000 -1.6857 +v 18.3152 0.0000 -1.6845 +v 18.2062 0.8805 -1.8820 +v 18.3218 0.0000 -1.8836 +v 18.0863 0.8805 -1.8830 +v 18.1636 0.0000 -1.8848 +v 18.3667 1.7611 -1.4834 +v 18.0922 1.7611 -1.4855 +v 18.0856 1.7611 -1.2863 +v 18.3601 1.7611 -1.2842 +v 18.2846 0.8805 -1.3390 +v 18.1647 0.8805 -1.3399 +v 18.1437 0.0000 -1.2859 +v 18.3019 0.0000 -1.2847 +v 18.2896 0.8805 -1.4900 +v 18.3085 0.0000 -1.4838 +v 18.1697 0.8805 -1.4909 +v 18.1503 0.0000 -1.4850 +v 18.4203 1.7088 -1.1478 +v 18.1542 1.7088 -1.1498 +v 18.1476 1.7088 -0.9507 +v 18.4137 1.7088 -0.9487 +v 18.3657 0.8805 -0.9326 +v 18.1791 0.8805 -0.9340 +v 18.1600 0.0000 -0.9506 +v 18.4013 0.0000 -0.9488 +v 18.3707 0.8805 -1.0836 +v 18.4079 0.0000 -1.1479 +v 18.1841 0.8805 -1.0850 +v 18.1666 0.0000 -1.1497 +v 18.3502 1.8182 -0.7070 +v 18.1920 1.8182 -0.7082 +v 18.1854 1.8182 -0.5090 +v 18.3436 1.8182 -0.5078 +v 18.4355 0.8805 -0.4892 +v 18.3156 0.8805 -0.4901 +v 18.1854 0.0000 -0.4620 +v 18.3436 0.0000 -0.4608 +v 18.4405 0.8805 -0.6402 +v 18.3502 0.0000 -0.6600 +v 18.3206 0.8805 -0.6411 +v 18.1920 0.0000 -0.6612 +v 18.4467 1.4149 -0.1665 +v 18.3268 1.4149 -0.1674 +v 18.1458 1.4917 0.7357 +v 18.3039 1.4917 0.7369 +v 18.3637 1.5530 -1.0696 +v 18.2056 1.5530 -1.0708 +v 18.4469 1.2339 -0.1730 +v 18.3042 1.2529 0.7283 +v 18.3640 1.3141 -1.0781 +v 18.3270 1.2339 -0.1739 +v 18.1460 1.2529 0.7271 +v 18.2059 1.3141 -1.0793 +v 18.1843 0.5144 -0.1685 +v 18.0644 0.5144 -0.1694 +v 18.1458 0.5972 0.7357 +v 18.3039 0.5972 0.7369 +v 18.3637 0.6584 -1.0696 +v 18.2056 0.6584 -1.0708 +v 18.1845 0.3333 -0.1750 +v 18.3042 0.3583 0.7283 +v 18.3640 0.4196 -1.0781 +v 18.0646 0.3333 -0.1759 +v 18.1460 0.3583 0.7271 +v 18.2059 0.4196 -1.0793 +v 18.3366 1.8814 -0.2493 +v 18.1784 1.8814 -0.2505 +v 18.1718 1.8814 -0.0514 +v 18.3300 1.8814 -0.0502 +v 18.3841 0.8805 -0.0739 +v 18.2642 0.8805 -0.0748 +v 18.1718 0.0000 -0.0514 +v 18.3300 0.0000 -0.0502 +v 18.3891 0.8805 -0.2248 +v 18.3366 0.0000 -0.2493 +v 18.2691 0.8805 -0.2257 +v 18.1784 0.0000 -0.2505 +v 18.3218 1.6654 0.1990 +v 18.1636 1.6654 0.1978 +v 18.1570 1.6654 0.3969 +v 18.3152 1.6654 0.3981 +v 18.2012 0.8805 0.3515 +v 18.0813 0.8805 0.3506 +v 18.1570 0.0000 0.3969 +v 18.3152 0.0000 0.3981 +v 18.2062 0.8805 0.2006 +v 18.3218 0.0000 0.1990 +v 18.0863 0.8805 0.1996 +v 18.1636 0.0000 0.1978 +v 18.3667 1.7611 0.5992 +v 18.0922 1.7611 0.5971 +v 18.0856 1.7611 0.7963 +v 18.3601 1.7611 0.7984 +v 18.2846 0.8805 0.7436 +v 18.1647 0.8805 0.7427 +v 18.1437 0.0000 0.7967 +v 18.3019 0.0000 0.7979 +v 18.2896 0.8805 0.5926 +v 18.3085 0.0000 0.5988 +v 18.1697 0.8805 0.5917 +v 18.1503 0.0000 0.5976 +v 18.4203 1.7088 0.8554 +v 18.1542 1.7088 0.8534 +v 18.1476 1.7088 1.0525 +v 18.4137 1.7088 1.0545 +v 18.3657 0.8805 1.0706 +v 18.1791 0.8805 1.0692 +v 18.1600 0.0000 1.0526 +v 18.4013 0.0000 1.0544 +v 18.3707 0.8805 0.9196 +v 18.4079 0.0000 0.8553 +v 18.1841 0.8805 0.9182 +v 18.1666 0.0000 0.8535 +v 18.3502 1.8182 1.2962 +v 18.1920 1.8182 1.2950 +v 18.1854 1.8182 1.4942 +v 18.3436 1.8182 1.4954 +v 18.4355 0.8805 1.5140 +v 18.3156 0.8805 1.5131 +v 18.1854 0.0000 1.5412 +v 18.3436 0.0000 1.5424 +v 18.4405 0.8805 1.3630 +v 18.3502 0.0000 1.3432 +v 18.3206 0.8805 1.3621 +v 18.1920 0.0000 1.3420 +v 18.4467 1.4149 1.8367 +v 18.3268 1.4149 1.8358 +v 18.1458 1.4917 2.7389 +v 18.3039 1.4917 2.7401 +v 18.3637 1.5530 0.9336 +v 18.2056 1.5530 0.9324 +v 18.4469 1.2339 1.8302 +v 18.3042 1.2529 2.7315 +v 18.3640 1.3141 0.9251 +v 18.3270 1.2339 1.8293 +v 18.1460 1.2529 2.7303 +v 18.2059 1.3141 0.9239 +v 18.1843 0.5144 1.8347 +v 18.0644 0.5144 1.8338 +v 18.1458 0.5972 2.7389 +v 18.3039 0.5972 2.7401 +v 18.3637 0.6584 0.9336 +v 18.2056 0.6584 0.9324 +v 18.1845 0.3333 1.8282 +v 18.3042 0.3583 2.7315 +v 18.3640 0.4196 0.9251 +v 18.0646 0.3333 1.8273 +v 18.1460 0.3583 2.7303 +v 18.2059 0.4196 0.9239 +v 18.3366 1.8814 1.7539 +v 18.1784 1.8814 1.7527 +v 18.1718 1.8814 1.9518 +v 18.3300 1.8814 1.9530 +v 18.3841 0.8805 1.9293 +v 18.2642 0.8805 1.9284 +v 18.1718 0.0000 1.9518 +v 18.3300 0.0000 1.9530 +v 18.3891 0.8805 1.7784 +v 18.3366 0.0000 1.7539 +v 18.2691 0.8805 1.7775 +v 18.1784 0.0000 1.7527 +v 18.3218 1.6654 2.2022 +v 18.1636 1.6654 2.2010 +v 18.1570 1.6654 2.4001 +v 18.3152 1.6654 2.4013 +v 18.2012 0.8805 2.3547 +v 18.0813 0.8805 2.3538 +v 18.1570 0.0000 2.4001 +v 18.3152 0.0000 2.4013 +v 18.2062 0.8805 2.2038 +v 18.3218 0.0000 2.2022 +v 18.0863 0.8805 2.2028 +v 18.1636 0.0000 2.2010 +v 18.3667 1.7611 2.6024 +v 18.0922 1.7611 2.6003 +v 18.0856 1.7611 2.7995 +v 18.3601 1.7611 2.8016 +v 18.2846 0.8805 2.7468 +v 18.1647 0.8805 2.7459 +v 18.1437 0.0000 2.7999 +v 18.3019 0.0000 2.8011 +v 18.2896 0.8805 2.5958 +v 18.3085 0.0000 2.6020 +v 18.1697 0.8805 2.5949 +v 18.1503 0.0000 2.6008 +v 18.4203 1.7088 2.9380 +v 18.1542 1.7088 2.9360 +v 18.1476 1.7088 3.1351 +v 18.4137 1.7088 3.1371 +v 18.3657 0.8805 3.1532 +v 18.1791 0.8805 3.1518 +v 18.1600 0.0000 3.1352 +v 18.4013 0.0000 3.1370 +v 18.3707 0.8805 3.0022 +v 18.4079 0.0000 2.9379 +v 18.1841 0.8805 3.0008 +v 18.1666 0.0000 2.9361 +v 18.3502 1.8182 3.3788 +v 18.1920 1.8182 3.3776 +v 18.1854 1.8182 3.5768 +v 18.3436 1.8182 3.5780 +v 18.4355 0.8805 3.5966 +v 18.3156 0.8805 3.5957 +v 18.1854 0.0000 3.6238 +v 18.3436 0.0000 3.6250 +v 18.4405 0.8805 3.4456 +v 18.3502 0.0000 3.4258 +v 18.3206 0.8805 3.4447 +v 18.1920 0.0000 3.4246 +v 18.4467 1.4149 3.9193 +v 18.3268 1.4149 3.9184 +v 18.1458 1.4917 4.8215 +v 18.3039 1.4917 4.8227 +v 18.3637 1.5530 3.0162 +v 18.2056 1.5530 3.0150 +v 18.4469 1.2339 3.9128 +v 18.3042 1.2529 4.8141 +v 18.3640 1.3141 3.0077 +v 18.3270 1.2339 3.9119 +v 18.1460 1.2529 4.8129 +v 18.2059 1.3141 3.0065 +v 18.1843 0.5144 3.9173 +v 18.0644 0.5144 3.9164 +v 18.1458 0.5972 4.8215 +v 18.3039 0.5972 4.8227 +v 18.3637 0.6584 3.0162 +v 18.2056 0.6584 3.0150 +v 18.1845 0.3333 3.9108 +v 18.3042 0.3583 4.8141 +v 18.3640 0.4196 3.0077 +v 18.0646 0.3333 3.9099 +v 18.1460 0.3583 4.8129 +v 18.2059 0.4196 3.0065 +v 18.3366 1.8814 3.8365 +v 18.1784 1.8814 3.8353 +v 18.1718 1.8814 4.0344 +v 18.3300 1.8814 4.0356 +v 18.3841 0.8805 4.0119 +v 18.2642 0.8805 4.0110 +v 18.1718 0.0000 4.0344 +v 18.3300 0.0000 4.0356 +v 18.3891 0.8805 3.8610 +v 18.3366 0.0000 3.8365 +v 18.2691 0.8805 3.8601 +v 18.1784 0.0000 3.8353 +v 18.3218 1.6654 4.2848 +v 18.1636 1.6654 4.2836 +v 18.1570 1.6654 4.4827 +v 18.3152 1.6654 4.4839 +v 18.2012 0.8805 4.4373 +v 18.0813 0.8805 4.4364 +v 18.1570 0.0000 4.4827 +v 18.3152 0.0000 4.4839 +v 18.2062 0.8805 4.2864 +v 18.3218 0.0000 4.2848 +v 18.0863 0.8805 4.2854 +v 18.1636 0.0000 4.2836 +v 18.3667 1.7611 4.6850 +v 18.0922 1.7611 4.6829 +v 18.0856 1.7611 4.8821 +v 18.3601 1.7611 4.8842 +v 18.2846 0.8805 4.8294 +v 18.1647 0.8805 4.8285 +v 18.1437 0.0000 4.8825 +v 18.3019 0.0000 4.8837 +v 18.2896 0.8805 4.6784 +v 18.3085 0.0000 4.6846 +v 18.1697 0.8805 4.6775 +v 18.1503 0.0000 4.6834 +v 18.4203 1.7088 5.0312 +v 18.1542 1.7088 5.0291 +v 18.1476 1.7088 5.2283 +v 18.4137 1.7088 5.2303 +v 18.3657 0.8805 5.2464 +v 18.1791 0.8805 5.2449 +v 18.1600 0.0000 5.2284 +v 18.4013 0.0000 5.2302 +v 18.3707 0.8805 5.0954 +v 18.4079 0.0000 5.0311 +v 18.1841 0.8805 5.0940 +v 18.1666 0.0000 5.0292 +v 18.3502 1.8182 5.4720 +v 18.1920 1.8182 5.4708 +v 18.1854 1.8182 5.6699 +v 18.3436 1.8182 5.6711 +v 18.4355 0.8805 5.6898 +v 18.3156 0.8805 5.6889 +v 18.1854 -0.0000 5.7169 +v 18.3436 -0.0000 5.7182 +v 18.4405 0.8805 5.5388 +v 18.3502 0.0000 5.5190 +v 18.3206 0.8805 5.5379 +v 18.1920 0.0000 5.5178 +v 18.4467 1.4149 6.0125 +v 18.3268 1.4149 6.0116 +v 18.1458 1.4917 6.9147 +v 18.3039 1.4917 6.9159 +v 18.3637 1.5530 5.1094 +v 18.2056 1.5530 5.1082 +v 18.4469 1.2339 6.0060 +v 18.3042 1.2529 6.9073 +v 18.3640 1.3141 5.1009 +v 18.3270 1.2339 6.0051 +v 18.1460 1.2529 6.9061 +v 18.2059 1.3141 5.0997 +v 18.1843 0.5144 6.0105 +v 18.0644 0.5144 6.0096 +v 18.1458 0.5972 6.9147 +v 18.3039 0.5972 6.9159 +v 18.3637 0.6584 5.1094 +v 18.2056 0.6584 5.1082 +v 18.1845 0.3333 6.0040 +v 18.3042 0.3583 6.9073 +v 18.3640 0.4196 5.1009 +v 18.0646 0.3333 6.0031 +v 18.1460 0.3583 6.9061 +v 18.2059 0.4196 5.0997 +v 18.3366 1.8814 5.9297 +v 18.1784 1.8814 5.9285 +v 18.1718 1.8814 6.1276 +v 18.3300 1.8814 6.1288 +v 18.3841 0.8805 6.1051 +v 18.2642 0.8805 6.1042 +v 18.1718 -0.0000 6.1276 +v 18.3300 -0.0000 6.1288 +v 18.3891 0.8805 5.9542 +v 18.3366 -0.0000 5.9297 +v 18.2691 0.8805 5.9533 +v 18.1784 -0.0000 5.9285 +v 18.3218 1.6654 6.3780 +v 18.1636 1.6654 6.3768 +v 18.1570 1.6654 6.5759 +v 18.3152 1.6654 6.5771 +v 18.2012 0.8805 6.5305 +v 18.0813 0.8805 6.5296 +v 18.1570 -0.0000 6.5759 +v 18.3152 -0.0000 6.5771 +v 18.2062 0.8805 6.3795 +v 18.3218 -0.0000 6.3780 +v 18.0863 0.8805 6.3786 +v 18.1636 -0.0000 6.3768 +v 18.3667 1.7611 6.7782 +v 18.0922 1.7611 6.7761 +v 18.0856 1.7611 6.9753 +v 18.3601 1.7611 6.9774 +v 18.2846 0.8805 6.9226 +v 18.1647 0.8805 6.9216 +v 18.1437 -0.0000 6.9757 +v 18.3019 -0.0000 6.9769 +v 18.2896 0.8805 6.7716 +v 18.3085 -0.0000 6.7778 +v 18.1697 0.8805 6.7707 +v 18.1504 -0.0000 6.7766 +v 18.4203 1.7088 7.1138 +v 18.1542 1.7088 7.1118 +v 18.1476 1.7088 7.3109 +v 18.4137 1.7088 7.3129 +v 18.3657 0.8805 7.3290 +v 18.1791 0.8805 7.3276 +v 18.1600 -0.0000 7.3110 +v 18.4013 -0.0000 7.3128 +v 18.3707 0.8805 7.1780 +v 18.4079 -0.0000 7.1137 +v 18.1841 0.8805 7.1766 +v 18.1666 -0.0000 7.1119 +v 18.3502 1.8182 7.5546 +v 18.1920 1.8182 7.5534 +v 18.1854 1.8182 7.7526 +v 18.3436 1.8182 7.7537 +v 18.4355 0.8805 7.7724 +v 18.3156 0.8805 7.7715 +v 18.1854 -0.0000 7.7996 +v 18.3436 -0.0000 7.8008 +v 18.4405 0.8805 7.6214 +v 18.3502 -0.0000 7.6016 +v 18.3206 0.8805 7.6205 +v 18.1920 -0.0000 7.6004 +v 18.4467 1.4149 8.0951 +v 18.3268 1.4149 8.0942 +v 18.1458 1.4917 8.9973 +v 18.3039 1.4917 8.9985 +v 18.3638 1.5530 7.1920 +v 18.2056 1.5530 7.1908 +v 18.4469 1.2339 8.0886 +v 18.3042 1.2529 8.9899 +v 18.3640 1.3141 7.1835 +v 18.3270 1.2339 8.0877 +v 18.1460 1.2529 8.9887 +v 18.2059 1.3141 7.1823 +v 18.1843 0.5144 8.0931 +v 18.0644 0.5144 8.0922 +v 18.1458 0.5972 8.9973 +v 18.3039 0.5972 8.9985 +v 18.3638 0.6584 7.1920 +v 18.2056 0.6584 7.1908 +v 18.1845 0.3333 8.0866 +v 18.3042 0.3583 8.9899 +v 18.3640 0.4196 7.1835 +v 18.0646 0.3333 8.0857 +v 18.1460 0.3583 8.9887 +v 18.2059 0.4196 7.1823 +v 18.3366 1.8814 8.0123 +v 18.1784 1.8814 8.0111 +v 18.1718 1.8814 8.2102 +v 18.3300 1.8814 8.2114 +v 18.3841 0.8805 8.1877 +v 18.2642 0.8805 8.1868 +v 18.1718 0.0000 8.2102 +v 18.3300 0.0000 8.2114 +v 18.3891 0.8805 8.0368 +v 18.3366 -0.0000 8.0123 +v 18.2691 0.8805 8.0359 +v 18.1784 -0.0000 8.0111 +v 18.3218 1.6654 8.4606 +v 18.1636 1.6654 8.4594 +v 18.1570 1.6654 8.6585 +v 18.3152 1.6654 8.6597 +v 18.2012 0.8805 8.6131 +v 18.0813 0.8805 8.6122 +v 18.1570 0.0000 8.6585 +v 18.3152 0.0000 8.6597 +v 18.2062 0.8805 8.4621 +v 18.3218 0.0000 8.4606 +v 18.0863 0.8805 8.4612 +v 18.1636 0.0000 8.4594 +v 18.3667 1.7611 8.8608 +v 18.0922 1.7611 8.8587 +v 18.0856 1.7611 9.0579 +v 18.3601 1.7611 9.0600 +v 18.2846 0.8805 9.0052 +v 18.1647 0.8805 9.0043 +v 18.1437 0.0000 9.0583 +v 18.3019 0.0000 9.0595 +v 18.2896 0.8805 8.8542 +v 18.3085 0.0000 8.8604 +v 18.1697 0.8805 8.8533 +v 18.1504 0.0000 8.8592 +v 17.9256 1.7088 9.1043 +v 17.9276 1.7088 8.8382 +v 17.7285 1.7088 8.8316 +v 17.7265 1.7088 9.0977 +v 17.7104 0.8805 9.0497 +v 17.7118 0.8805 8.8631 +v 17.7284 0.0000 8.8440 +v 17.7265 0.0000 9.0853 +v 17.8613 0.8805 9.0547 +v 17.9257 0.0000 9.0919 +v 17.8628 0.8805 8.8681 +v 17.9275 0.0000 8.8506 +v 17.4847 1.8182 9.0342 +v 17.4860 1.8182 8.8760 +v 17.2868 1.8182 8.8694 +v 17.2856 1.8182 9.0276 +v 17.2670 0.8805 9.1194 +v 17.2679 0.8805 8.9995 +v 17.2398 0.0000 8.8694 +v 17.2386 0.0000 9.0276 +v 17.4179 0.8805 9.1244 +v 17.4377 0.0000 9.0342 +v 17.4189 0.8805 9.0045 +v 17.4389 0.0000 8.8760 +v 16.9443 1.4149 9.1307 +v 16.9452 1.4149 9.0108 +v 16.0421 1.4917 8.8297 +v 16.0409 1.4917 8.9879 +v 17.8473 1.5530 9.0477 +v 17.8485 1.5530 8.8895 +v 16.9508 1.2339 9.1309 +v 16.0494 1.2529 8.9882 +v 17.8559 1.3141 9.0480 +v 16.9517 1.2339 9.0110 +v 16.0506 1.2529 8.8300 +v 17.8571 1.3141 8.8898 +v 16.9463 0.5144 8.8683 +v 16.9472 0.5144 8.7484 +v 16.0421 0.5972 8.8297 +v 16.0409 0.5972 8.9879 +v 17.8473 0.6584 9.0477 +v 17.8485 0.6584 8.8895 +v 16.9528 0.3333 8.8685 +v 16.0494 0.3583 8.9882 +v 17.8559 0.4196 9.0480 +v 16.9537 0.3333 8.7486 +v 16.0506 0.3583 8.8300 +v 17.8571 0.4196 8.8898 +v 17.0271 1.8814 9.0206 +v 17.0283 1.8814 8.8624 +v 16.8292 1.8814 8.8558 +v 16.8280 1.8814 9.0140 +v 16.8516 0.8805 9.0680 +v 16.8526 0.8805 8.9481 +v 16.8292 0.0000 8.8558 +v 16.8280 0.0000 9.0140 +v 17.0026 0.8805 9.0730 +v 17.0271 0.0000 9.0206 +v 17.0035 0.8805 8.9531 +v 17.0283 0.0000 8.8624 +v 16.5788 1.6654 9.0057 +v 16.5800 1.6654 8.8475 +v 16.3809 1.6654 8.8410 +v 16.3797 1.6654 8.9991 +v 16.4263 0.8805 8.8852 +v 16.4272 0.8805 8.7653 +v 16.3809 0.0000 8.8410 +v 16.3797 0.0000 8.9991 +v 16.5772 0.8805 8.8902 +v 16.5788 0.0000 9.0057 +v 16.5781 0.8805 8.7703 +v 16.5800 0.0000 8.8475 +v 16.1785 1.7611 9.0507 +v 16.1806 1.7611 8.7761 +v 15.9815 1.7611 8.7695 +v 15.9794 1.7611 9.0441 +v 16.0342 0.8805 8.9686 +v 16.0351 0.8805 8.8487 +v 15.9811 0.0000 8.8277 +v 15.9799 0.0000 8.9859 +v 16.1852 0.8805 8.9735 +v 16.1790 0.0000 8.9925 +v 16.1861 0.8805 8.8536 +v 16.1802 0.0000 8.8343 +v 15.8430 1.7088 9.1043 +v 15.8450 1.7088 8.8382 +v 15.6459 1.7088 8.8316 +v 15.6438 1.7088 9.0977 +v 15.6278 0.8805 9.0497 +v 15.6292 0.8805 8.8631 +v 15.6458 0.0000 8.8440 +v 15.6439 0.0000 9.0853 +v 15.7787 0.8805 9.0547 +v 15.8431 0.0000 9.0919 +v 15.7802 0.8805 8.8681 +v 15.8449 0.0000 8.8506 +v 15.4021 1.8182 9.0342 +v 15.4033 1.8182 8.8760 +v 15.2042 1.8182 8.8694 +v 15.2030 1.8182 9.0276 +v 15.1844 0.8805 9.1194 +v 15.1853 0.8805 8.9995 +v 15.1572 0.0000 8.8694 +v 15.1560 0.0000 9.0276 +v 15.3353 0.8805 9.1244 +v 15.3551 0.0000 9.0342 +v 15.3363 0.8805 9.0045 +v 15.3563 0.0000 8.8760 +v 14.8617 1.4149 9.1307 +v 14.8626 1.4149 9.0108 +v 13.9595 1.4917 8.8297 +v 13.9583 1.4917 8.9879 +v 15.7647 1.5530 9.0477 +v 15.7659 1.5530 8.8895 +v 14.8682 1.2339 9.1309 +v 13.9668 1.2529 8.9882 +v 15.7733 1.3141 9.0480 +v 14.8691 1.2339 9.0110 +v 13.9680 1.2529 8.8300 +v 15.7745 1.3141 8.8898 +v 14.8637 0.5144 8.8683 +v 14.8646 0.5144 8.7484 +v 13.9595 0.5972 8.8297 +v 13.9583 0.5972 8.9879 +v 15.7647 0.6584 9.0477 +v 15.7659 0.6584 8.8895 +v 14.8702 0.3333 8.8685 +v 13.9668 0.3583 8.9882 +v 15.7733 0.4196 9.0480 +v 14.8711 0.3333 8.7486 +v 13.9680 0.3583 8.8300 +v 15.7745 0.4196 8.8898 +v 14.9445 1.8814 9.0206 +v 14.9457 1.8814 8.8624 +v 14.7466 1.8814 8.8558 +v 14.7453 1.8814 9.0140 +v 14.7690 0.8805 9.0680 +v 14.7700 0.8805 8.9481 +v 14.7466 0.0000 8.8558 +v 14.7453 0.0000 9.0140 +v 14.9200 0.8805 9.0730 +v 14.9445 0.0000 9.0206 +v 14.9209 0.8805 8.9531 +v 14.9457 0.0000 8.8624 +v 14.4962 1.6654 9.0057 +v 14.4974 1.6654 8.8475 +v 14.2983 1.6654 8.8410 +v 14.2971 1.6654 8.9991 +v 14.3437 0.8805 8.8852 +v 14.3446 0.8805 8.7653 +v 14.2983 0.0000 8.8410 +v 14.2971 0.0000 8.9991 +v 14.4946 0.8805 8.8902 +v 14.4962 0.0000 9.0057 +v 14.4955 0.8805 8.7703 +v 14.4974 0.0000 8.8475 +v 14.0959 1.7611 9.0507 +v 14.0980 1.7611 8.7761 +v 13.8989 1.7611 8.7695 +v 13.8968 1.7611 9.0441 +v 13.9516 0.8805 8.9686 +v 13.9525 0.8805 8.8487 +v 13.8985 0.0000 8.8277 +v 13.8972 0.0000 8.9859 +v 14.1025 0.8805 8.9735 +v 14.0964 0.0000 8.9925 +v 14.1035 0.8805 8.8536 +v 14.0976 0.0000 8.8343 +v 13.7498 1.7088 9.1043 +v 13.7518 1.7088 8.8382 +v 13.5527 1.7088 8.8316 +v 13.5507 1.7088 9.0977 +v 13.5346 0.8805 9.0497 +v 13.5360 0.8805 8.8631 +v 13.5526 0.0000 8.8440 +v 13.5507 0.0000 9.0853 +v 13.6855 0.8805 9.0547 +v 13.7499 0.0000 9.0919 +v 13.6870 0.8805 8.8681 +v 13.7517 0.0000 8.8506 +v 13.3089 1.8182 9.0342 +v 13.3102 1.8182 8.8760 +v 13.1110 1.8182 8.8694 +v 13.1098 1.8182 9.0276 +v 13.0912 0.8805 9.1194 +v 13.0921 0.8805 8.9995 +v 13.0640 0.0000 8.8694 +v 13.0628 0.0000 9.0276 +v 13.2421 0.8805 9.1244 +v 13.2619 0.0000 9.0342 +v 13.2431 0.8805 9.0045 +v 13.2631 0.0000 8.8760 +v 12.7685 1.4149 9.1307 +v 12.7694 1.4149 9.0108 +v 11.8663 1.4917 8.8297 +v 11.8651 1.4917 8.9879 +v 13.6715 1.5530 9.0477 +v 13.6728 1.5530 8.8895 +v 12.7750 1.2339 9.1309 +v 11.8736 1.2529 8.9882 +v 13.6801 1.3141 9.0480 +v 12.7759 1.2339 9.0110 +v 11.8748 1.2529 8.8300 +v 13.6813 1.3141 8.8898 +v 12.7705 0.5144 8.8683 +v 12.7714 0.5144 8.7484 +v 11.8663 0.5972 8.8297 +v 11.8651 0.5972 8.9879 +v 13.6715 0.6584 9.0477 +v 13.6728 0.6584 8.8895 +v 12.7770 0.3333 8.8685 +v 11.8736 0.3583 8.9882 +v 13.6801 0.4196 9.0480 +v 12.7779 0.3333 8.7486 +v 11.8748 0.3583 8.8300 +v 13.6813 0.4196 8.8898 +v 12.8513 1.8814 9.0206 +v 12.8525 1.8814 8.8624 +v 12.6534 1.8814 8.8558 +v 12.6522 1.8814 9.0140 +v 12.6758 0.8805 9.0680 +v 12.6768 0.8805 8.9481 +v 12.6534 0.0000 8.8558 +v 12.6522 0.0000 9.0140 +v 12.8268 0.8805 9.0730 +v 12.8513 0.0000 9.0206 +v 12.8277 0.8805 8.9531 +v 12.8525 0.0000 8.8624 +v 12.4030 1.6654 9.0057 +v 12.4042 1.6654 8.8475 +v 12.2051 1.6654 8.8410 +v 12.2039 1.6654 8.9991 +v 12.2505 0.8805 8.8852 +v 12.2514 0.8805 8.7653 +v 12.2051 0.0000 8.8410 +v 12.2039 0.0000 8.9991 +v 12.4014 0.8805 8.8902 +v 12.4030 0.0000 9.0057 +v 12.4023 0.8805 8.7703 +v 12.4042 0.0000 8.8475 +v 12.0027 1.7611 9.0507 +v 12.0048 1.7611 8.7761 +v 11.8057 1.7611 8.7695 +v 11.8036 1.7611 9.0441 +v 11.8584 0.8805 8.9686 +v 11.8593 0.8805 8.8487 +v 11.8053 0.0000 8.8277 +v 11.8041 0.0000 8.9859 +v 12.0094 0.8805 8.9735 +v 12.0032 0.0000 8.9925 +v 12.0103 0.8805 8.8536 +v 12.0044 0.0000 8.8343 +v 11.6672 1.7088 9.1043 +v 11.6692 1.7088 8.8382 +v 11.4701 1.7088 8.8316 +v 11.4681 1.7088 9.0977 +v 11.4520 0.8805 9.0497 +v 11.4534 0.8805 8.8631 +v 11.4700 0.0000 8.8440 +v 11.4681 0.0000 9.0853 +v 11.6030 0.8805 9.0547 +v 11.6673 0.0000 9.0919 +v 11.6044 0.8805 8.8681 +v 11.6691 0.0000 8.8506 +v 11.2264 1.8182 9.0342 +v 11.2276 1.8182 8.8760 +v 11.0284 1.8182 8.8694 +v 11.0272 1.8182 9.0276 +v 11.0086 0.8805 9.1194 +v 11.0095 0.8805 8.9995 +v 10.9814 0.0000 8.8694 +v 10.9802 0.0000 9.0276 +v 11.1595 0.8805 9.1244 +v 11.1793 0.0000 9.0342 +v 11.1605 0.8805 9.0045 +v 11.1806 0.0000 8.8760 +v 10.6859 1.4149 9.1307 +v 10.6868 1.4149 9.0108 +v 9.7837 1.4917 8.8297 +v 9.7825 1.4917 8.9879 +v 11.5889 1.5530 9.0477 +v 11.5902 1.5530 8.8895 +v 10.6924 1.2339 9.1309 +v 9.7910 1.2529 8.9882 +v 11.5975 1.3141 9.0480 +v 10.6933 1.2339 9.0110 +v 9.7923 1.2529 8.8300 +v 11.5987 1.3141 8.8898 +v 10.6879 0.5144 8.8683 +v 10.6888 0.5144 8.7484 +v 9.7837 0.5972 8.8297 +v 9.7825 0.5972 8.9879 +v 11.5889 0.6584 9.0477 +v 11.5902 0.6584 8.8895 +v 10.6944 0.3333 8.8685 +v 9.7910 0.3583 8.9882 +v 11.5975 0.4196 9.0480 +v 10.6953 0.3333 8.7486 +v 9.7923 0.3583 8.8300 +v 11.5987 0.4196 8.8898 +v 10.7687 1.8814 9.0206 +v 10.7699 1.8814 8.8624 +v 10.5708 1.8814 8.8558 +v 10.5696 1.8814 9.0140 +v 10.5932 0.8805 9.0680 +v 10.5942 0.8805 8.9481 +v 10.5708 0.0000 8.8558 +v 10.5696 0.0000 9.0140 +v 10.7442 0.8805 9.0730 +v 10.7687 0.0000 9.0206 +v 10.7451 0.8805 8.9531 +v 10.7699 0.0000 8.8624 +v 10.3204 1.6654 9.0057 +v 10.3216 1.6654 8.8475 +v 10.1225 1.6654 8.8410 +v 10.1213 1.6654 8.9991 +v 10.1679 0.8805 8.8852 +v 10.1688 0.8805 8.7653 +v 10.1225 0.0000 8.8410 +v 10.1213 0.0000 8.9991 +v 10.3188 0.8805 8.8902 +v 10.3204 0.0000 9.0057 +v 10.3197 0.8805 8.7703 +v 10.3216 0.0000 8.8475 +v 9.9201 1.7611 9.0507 +v 9.9223 1.7611 8.7761 +v 9.7231 1.7611 8.7695 +v 9.7210 1.7611 9.0441 +v 9.7758 0.8805 8.9686 +v 9.7767 0.8805 8.8487 +v 9.7227 0.0000 8.8277 +v 9.7215 0.0000 8.9859 +v 9.9268 0.8805 8.9735 +v 9.9206 0.0000 8.9925 +v 9.9277 0.8805 8.8536 +v 9.9218 0.0000 8.8343 +v 5.2841 1.7088 12.6327 +v 5.2821 1.7088 12.8988 +v 5.4812 1.7088 12.9054 +v 5.4832 1.7088 12.6393 +v 5.4993 0.8805 12.6873 +v 5.4979 0.8805 12.8739 +v 5.4813 -0.0000 12.8930 +v 5.4831 -0.0000 12.6517 +v 5.3483 0.8805 12.6823 +v 5.2840 -0.0000 12.6451 +v 5.3469 0.8805 12.8689 +v 5.2822 -0.0000 12.8865 +v 5.7249 1.8182 12.7029 +v 5.7237 1.8182 12.8610 +v 5.9229 1.8182 12.8676 +v 5.9241 1.8182 12.7094 +v 5.9427 0.8805 12.6176 +v 5.9418 0.8805 12.7375 +v 5.9699 -0.0000 12.8676 +v 5.9711 -0.0000 12.7094 +v 5.7917 0.8805 12.6126 +v 5.7719 -0.0000 12.7028 +v 5.7908 0.8805 12.7325 +v 5.7707 -0.0000 12.8610 +v 6.2654 1.4149 12.6063 +v 6.2645 1.4149 12.7262 +v 7.1676 1.4917 12.9073 +v 7.1688 1.4917 12.7491 +v 5.3623 1.5530 12.6893 +v 5.3611 1.5530 12.8475 +v 6.2589 1.2339 12.6061 +v 7.1602 1.2529 12.7488 +v 5.3538 1.3141 12.6890 +v 6.2580 1.2339 12.7260 +v 7.1590 1.2529 12.9070 +v 5.3526 1.3141 12.8472 +v 6.2634 0.5144 12.8687 +v 6.2625 0.5144 12.9886 +v 7.1676 0.5972 12.9073 +v 7.1688 0.5972 12.7491 +v 5.3623 0.6584 12.6893 +v 5.3611 0.6584 12.8475 +v 6.2569 0.3333 12.8685 +v 7.1602 0.3583 12.7488 +v 5.3538 0.4196 12.6890 +v 6.2560 0.3333 12.9884 +v 7.1590 0.3583 12.9070 +v 5.3526 0.4196 12.8472 +v 6.1826 1.8814 12.7164 +v 6.1814 1.8814 12.8746 +v 6.3805 1.8814 12.8812 +v 6.3817 1.8814 12.7230 +v 6.3580 0.8805 12.6690 +v 6.3571 0.8805 12.7889 +v 6.3805 -0.0000 12.8812 +v 6.3817 -0.0000 12.7230 +v 6.2071 0.8805 12.6640 +v 6.1826 -0.0000 12.7164 +v 6.2062 0.8805 12.7839 +v 6.1814 -0.0000 12.8746 +v 6.6309 1.6654 12.7313 +v 6.6297 1.6654 12.8895 +v 6.8288 1.6654 12.8961 +v 6.8300 1.6654 12.7379 +v 6.7834 0.8805 12.8518 +v 6.7825 0.8805 12.9717 +v 6.8288 -0.0000 12.8960 +v 6.8300 -0.0000 12.7379 +v 6.6325 0.8805 12.8468 +v 6.6309 -0.0000 12.7313 +v 6.6315 0.8805 12.9667 +v 6.6297 -0.0000 12.8895 +v 7.0311 1.7611 12.6863 +v 7.0290 1.7611 12.9609 +v 7.2282 1.7611 12.9675 +v 7.2303 1.7611 12.6929 +v 7.1755 0.8805 12.7685 +v 7.1746 0.8805 12.8884 +v 7.2286 -0.0000 12.9093 +v 7.2298 -0.0000 12.7511 +v 7.0245 0.8805 12.7635 +v 7.0307 -0.0000 12.7445 +v 7.0236 0.8805 12.8834 +v 7.0295 -0.0000 12.9027 +v 7.3667 1.7088 12.6327 +v 7.3647 1.7088 12.8988 +v 7.5638 1.7088 12.9054 +v 7.5658 1.7088 12.6393 +v 7.5819 0.8805 12.6873 +v 7.5805 0.8805 12.8739 +v 7.5639 -0.0000 12.8930 +v 7.5657 -0.0000 12.6517 +v 7.4309 0.8805 12.6823 +v 7.3666 -0.0000 12.6451 +v 7.4295 0.8805 12.8689 +v 7.3648 -0.0000 12.8865 +v 7.8075 1.8182 12.7029 +v 7.8063 1.8182 12.8610 +v 8.0055 1.8182 12.8676 +v 8.0067 1.8182 12.7094 +v 8.0253 0.8805 12.6176 +v 8.0244 0.8805 12.7375 +v 8.0525 -0.0000 12.8676 +v 8.0537 -0.0000 12.7094 +v 7.8743 0.8805 12.6126 +v 7.8545 -0.0000 12.7028 +v 7.8734 0.8805 12.7325 +v 7.8533 -0.0000 12.8610 +v 8.3480 1.4149 12.6063 +v 8.3471 1.4149 12.7262 +v 9.2502 1.4917 12.9073 +v 9.2514 1.4917 12.7491 +v 7.4449 1.5530 12.6893 +v 7.4437 1.5530 12.8475 +v 8.3415 1.2339 12.6061 +v 9.2428 1.2529 12.7488 +v 7.4364 1.3141 12.6890 +v 8.3406 1.2339 12.7260 +v 9.2416 1.2529 12.9070 +v 7.4352 1.3141 12.8472 +v 8.3460 0.5144 12.8687 +v 8.3451 0.5144 12.9886 +v 9.2502 0.5972 12.9073 +v 9.2514 0.5972 12.7491 +v 7.4449 0.6584 12.6893 +v 7.4437 0.6584 12.8475 +v 8.3395 0.3333 12.8685 +v 9.2428 0.3583 12.7488 +v 7.4364 0.4196 12.6890 +v 8.3386 0.3333 12.9884 +v 9.2416 0.3583 12.9070 +v 7.4352 0.4196 12.8472 +v 8.2652 1.8814 12.7164 +v 8.2640 1.8814 12.8746 +v 8.4631 1.8814 12.8812 +v 8.4643 1.8814 12.7230 +v 8.4406 0.8805 12.6690 +v 8.4397 0.8805 12.7889 +v 8.4631 -0.0000 12.8812 +v 8.4643 -0.0000 12.7230 +v 8.2897 0.8805 12.6640 +v 8.2652 -0.0000 12.7164 +v 8.2888 0.8805 12.7839 +v 8.2640 -0.0000 12.8746 +v 8.7135 1.6654 12.7313 +v 8.7123 1.6654 12.8895 +v 8.9114 1.6654 12.8961 +v 8.9126 1.6654 12.7379 +v 8.8660 0.8805 12.8518 +v 8.8651 0.8805 12.9717 +v 8.9114 -0.0000 12.8960 +v 8.9126 -0.0000 12.7379 +v 8.7151 0.8805 12.8468 +v 8.7135 -0.0000 12.7313 +v 8.7141 0.8805 12.9667 +v 8.7123 -0.0000 12.8895 +v 9.1137 1.7611 12.6863 +v 9.1117 1.7611 12.9609 +v 9.3108 1.7611 12.9675 +v 9.3129 1.7611 12.6929 +v 9.2581 0.8805 12.7685 +v 9.2572 0.8805 12.8884 +v 9.3112 -0.0000 12.9093 +v 9.3124 -0.0000 12.7511 +v 9.1071 0.8805 12.7635 +v 9.1133 -0.0000 12.7445 +v 9.1062 0.8805 12.8834 +v 9.1121 -0.0000 12.9027 +v 9.4214 1.7088 12.8486 +v 9.6875 1.7088 12.8506 +v 9.6941 1.7088 12.6514 +v 9.4279 1.7088 12.6494 +v 9.4760 0.8805 12.6334 +v 9.6626 0.8805 12.6348 +v 9.6817 -0.0000 12.6514 +v 9.4403 -0.0000 12.6495 +v 9.4710 0.8805 12.7843 +v 9.4337 -0.0000 12.8486 +v 9.6576 0.8805 12.7857 +v 9.6751 -0.0000 12.8505 +v 9.4915 1.8182 12.4077 +v 9.6497 1.8182 12.4089 +v 9.6563 1.8182 12.2098 +v 9.4981 1.8182 12.2086 +v 9.4062 0.8805 12.1900 +v 9.5261 0.8805 12.1909 +v 9.6563 -0.0000 12.1628 +v 9.4981 -0.0000 12.1616 +v 9.4012 0.8805 12.3409 +v 9.4915 -0.0000 12.3607 +v 9.5211 0.8805 12.3418 +v 9.6497 -0.0000 12.3619 +v 9.3950 1.4149 11.8673 +v 9.5149 1.4149 11.8682 +v 9.6959 1.4917 10.9651 +v 9.5377 1.4917 10.9639 +v 9.4779 1.5530 12.7703 +v 9.6361 1.5530 12.7715 +v 9.3948 1.2339 11.8737 +v 9.5375 1.2529 10.9724 +v 9.4777 1.3141 12.7788 +v 9.5147 1.2339 11.8746 +v 9.6956 1.2529 10.9736 +v 9.6358 1.3141 12.7801 +v 9.6574 0.5144 11.8693 +v 9.7773 0.5144 11.8702 +v 9.6959 0.5972 10.9651 +v 9.5377 0.5972 10.9639 +v 9.4779 0.6584 12.7703 +v 9.6361 0.6584 12.7715 +v 9.6571 0.3333 11.8757 +v 9.5375 0.3583 10.9724 +v 9.4777 0.4196 12.7788 +v 9.7770 0.3333 11.8767 +v 9.6956 0.3583 10.9736 +v 9.6358 0.4196 12.7801 +v 9.5051 1.8814 11.9501 +v 9.6633 1.8814 11.9513 +v 9.6698 1.8814 11.7521 +v 9.5117 1.8814 11.7509 +v 9.4576 0.8805 11.7746 +v 9.5775 0.8805 11.7755 +v 9.6698 -0.0000 11.7521 +v 9.5117 -0.0000 11.7509 +v 9.4526 0.8805 11.9256 +v 9.5051 -0.0000 11.9501 +v 9.5725 0.8805 11.9265 +v 9.6633 -0.0000 11.9513 +v 9.5199 1.6654 11.5018 +v 9.6781 1.6654 11.5030 +v 9.6847 1.6654 11.3039 +v 9.5265 1.6654 11.3026 +v 9.6405 0.8805 11.3492 +v 9.7604 0.8805 11.3502 +v 9.6847 -0.0000 11.3039 +v 9.5265 -0.0000 11.3026 +v 9.6355 0.8805 11.5002 +v 9.5199 -0.0000 11.5018 +v 9.7554 0.8805 11.5011 +v 9.6781 -0.0000 11.5030 +v 9.4750 1.7611 11.1015 +v 9.7495 1.7611 11.1036 +v 9.7561 1.7611 10.9045 +v 9.4816 1.7611 10.9024 +v 9.5571 0.8805 10.9572 +v 9.6770 0.8805 10.9581 +v 9.6979 -0.0000 10.9040 +v 9.5398 -0.0000 10.9028 +v 9.5521 0.8805 11.1081 +v 9.5332 -0.0000 11.1020 +v 9.6720 0.8805 11.1090 +v 9.6913 -0.0000 11.1032 +v 9.4214 1.7088 10.7660 +v 9.6875 1.7088 10.7680 +v 9.6941 1.7088 10.5688 +v 9.4279 1.7088 10.5668 +v 9.4760 0.8805 10.5508 +v 9.6626 0.8805 10.5522 +v 9.6817 -0.0000 10.5688 +v 9.4403 -0.0000 10.5669 +v 9.4710 0.8805 10.7017 +v 9.4337 -0.0000 10.7660 +v 9.6576 0.8805 10.7031 +v 9.6751 -0.0000 10.7679 +v 9.4915 1.8182 10.3251 +v 9.6497 1.8182 10.3263 +v 9.6563 1.8182 10.1272 +v 9.4981 1.8182 10.1260 +v 9.4062 0.8805 10.1074 +v 9.5261 0.8805 10.1083 +v 9.6563 -0.0000 10.0802 +v 9.4981 -0.0000 10.0790 +v 9.4012 0.8805 10.2583 +v 9.4915 -0.0000 10.2781 +v 9.5211 0.8805 10.2592 +v 9.6497 -0.0000 10.2793 +v 9.3950 1.4149 9.7847 +v 9.5149 1.4149 9.7856 +v 9.6959 1.4917 8.8825 +v 9.5377 1.4917 8.8813 +v 9.4779 1.5530 10.6877 +v 9.6361 1.5530 10.6889 +v 9.3948 1.2339 9.7911 +v 9.5375 1.2529 8.8898 +v 9.4777 1.3141 10.6962 +v 9.5147 1.2339 9.7920 +v 9.6956 1.2529 8.8910 +v 9.6358 1.3141 10.6975 +v 9.6574 0.5144 9.7867 +v 9.7773 0.5144 9.7876 +v 9.6959 0.5972 8.8825 +v 9.5377 0.5972 8.8813 +v 9.4779 0.6584 10.6877 +v 9.6361 0.6584 10.6889 +v 9.6571 0.3333 9.7931 +v 9.5375 0.3583 8.8898 +v 9.4777 0.4196 10.6962 +v 9.7770 0.3333 9.7941 +v 9.6956 0.3583 8.8910 +v 9.6358 0.4196 10.6975 +v 9.5051 1.8814 9.8675 +v 9.6633 1.8814 9.8687 +v 9.6698 1.8814 9.6695 +v 9.5117 1.8814 9.6683 +v 9.4576 0.8805 9.6920 +v 9.5775 0.8805 9.6929 +v 9.6698 -0.0000 9.6695 +v 9.5117 -0.0000 9.6683 +v 9.4526 0.8805 9.8430 +v 9.5051 -0.0000 9.8675 +v 9.5725 0.8805 9.8439 +v 9.6633 -0.0000 9.8687 +v 9.5199 1.6654 9.4192 +v 9.6781 1.6654 9.4204 +v 9.6847 1.6654 9.2213 +v 9.5265 1.6654 9.2200 +v 9.6405 0.8805 9.2666 +v 9.7604 0.8805 9.2676 +v 9.6847 0.0000 9.2213 +v 9.5265 0.0000 9.2200 +v 9.6355 0.8805 9.4176 +v 9.5199 -0.0000 9.4192 +v 9.7554 0.8805 9.4185 +v 9.6781 -0.0000 9.4204 +v 9.4750 1.7611 9.0189 +v 9.7495 1.7611 9.0210 +v 9.7561 1.7611 8.8219 +v 9.4816 1.7611 8.8198 +v 9.5571 0.8805 8.8746 +v 9.6770 0.8805 8.8755 +v 9.6979 0.0000 8.8214 +v 9.5398 0.0000 8.8202 +v 9.5521 0.8805 9.0255 +v 9.5332 0.0000 9.0194 +v 9.6720 0.8805 9.0264 +v 9.6913 0.0000 9.0206 +v 1.2967 1.7088 12.6327 +v 1.2947 1.7088 12.8988 +v 1.4938 1.7088 12.9054 +v 1.4958 1.7088 12.6393 +v 1.5119 0.8805 12.6873 +v 1.5105 0.8805 12.8739 +v 1.4939 -0.0000 12.8931 +v 1.4957 -0.0000 12.6517 +v 1.3609 0.8805 12.6823 +v 1.2966 -0.0000 12.6451 +v 1.3595 0.8805 12.8689 +v 1.2948 -0.0000 12.8865 +v 1.7376 1.8182 12.7029 +v 1.7363 1.8182 12.8610 +v 1.9355 1.8182 12.8676 +v 1.9367 1.8182 12.7094 +v 1.9553 0.8805 12.6176 +v 1.9544 0.8805 12.7375 +v 1.9825 -0.0000 12.8676 +v 1.9837 -0.0000 12.7094 +v 1.8044 0.8805 12.6126 +v 1.7846 -0.0000 12.7029 +v 1.8034 0.8805 12.7325 +v 1.7834 -0.0000 12.8610 +v 2.2780 1.4149 12.6063 +v 2.2771 1.4149 12.7262 +v 3.1802 1.4917 12.9073 +v 3.1814 1.4917 12.7491 +v 1.3750 1.5530 12.6893 +v 1.3737 1.5530 12.8475 +v 2.2715 1.2339 12.6061 +v 3.1729 1.2529 12.7488 +v 1.3664 1.3141 12.6890 +v 2.2706 1.2339 12.7260 +v 3.1716 1.2529 12.9070 +v 1.3652 1.3141 12.8472 +v 2.2760 0.5144 12.8687 +v 2.2751 0.5144 12.9886 +v 3.1802 0.5972 12.9073 +v 3.1814 0.5972 12.7491 +v 1.3750 0.6584 12.6893 +v 1.3737 0.6584 12.8475 +v 2.2695 0.3333 12.8685 +v 3.1729 0.3583 12.7488 +v 1.3664 0.4196 12.6890 +v 2.2686 0.3333 12.9884 +v 3.1716 0.3583 12.9070 +v 1.3652 0.4196 12.8472 +v 2.1952 1.8814 12.7164 +v 2.1940 1.8814 12.8746 +v 2.3931 1.8814 12.8812 +v 2.3943 1.8814 12.7230 +v 2.3707 0.8805 12.6690 +v 2.3697 0.8805 12.7889 +v 2.3931 -0.0000 12.8812 +v 2.3943 -0.0000 12.7230 +v 2.2197 0.8805 12.6640 +v 2.1952 -0.0000 12.7164 +v 2.2188 0.8805 12.7839 +v 2.1940 -0.0000 12.8746 +v 2.6435 1.6654 12.7313 +v 2.6423 1.6654 12.8895 +v 2.8414 1.6654 12.8961 +v 2.8426 1.6654 12.7379 +v 2.7960 0.8805 12.8518 +v 2.7951 0.8805 12.9717 +v 2.8414 -0.0000 12.8960 +v 2.8426 -0.0000 12.7379 +v 2.6451 0.8805 12.8469 +v 2.6435 -0.0000 12.7313 +v 2.6442 0.8805 12.9668 +v 2.6423 -0.0000 12.8895 +v 3.0438 1.7611 12.6863 +v 3.0417 1.7611 12.9609 +v 3.2408 1.7611 12.9675 +v 3.2429 1.7611 12.6929 +v 3.1881 0.8805 12.7685 +v 3.1872 0.8805 12.8884 +v 3.2412 -0.0000 12.9093 +v 3.2424 -0.0000 12.7511 +v 3.0371 0.8805 12.7635 +v 3.0433 -0.0000 12.7445 +v 3.0362 0.8805 12.8834 +v 3.0421 -0.0000 12.9027 +v 3.3793 1.7088 12.6327 +v 3.3773 1.7088 12.8988 +v 3.5764 1.7088 12.9054 +v 3.5784 1.7088 12.6393 +v 3.5945 0.8805 12.6873 +v 3.5931 0.8805 12.8739 +v 3.5765 -0.0000 12.8930 +v 3.5783 -0.0000 12.6517 +v 3.4435 0.8805 12.6823 +v 3.3792 -0.0000 12.6451 +v 3.4421 0.8805 12.8689 +v 3.3774 -0.0000 12.8865 +v 3.8201 1.8182 12.7029 +v 3.8189 1.8182 12.8610 +v 4.0181 1.8182 12.8676 +v 4.0193 1.8182 12.7094 +v 4.0379 0.8805 12.6176 +v 4.0370 0.8805 12.7375 +v 4.0651 -0.0000 12.8676 +v 4.0663 -0.0000 12.7094 +v 3.8869 0.8805 12.6126 +v 3.8672 -0.0000 12.7029 +v 3.8860 0.8805 12.7325 +v 3.8659 -0.0000 12.8610 +v 4.3606 1.4149 12.6063 +v 4.3597 1.4149 12.7262 +v 5.2628 1.4917 12.9073 +v 5.2640 1.4917 12.7491 +v 3.4576 1.5530 12.6893 +v 3.4563 1.5530 12.8475 +v 4.3541 1.2339 12.6061 +v 5.2555 1.2529 12.7488 +v 3.4490 1.3141 12.6890 +v 4.3532 1.2339 12.7260 +v 5.2542 1.2529 12.9070 +v 3.4478 1.3141 12.8472 +v 4.3586 0.5144 12.8687 +v 4.3577 0.5144 12.9886 +v 5.2628 0.5972 12.9073 +v 5.2640 0.5972 12.7491 +v 3.4576 0.6584 12.6893 +v 3.4563 0.6584 12.8475 +v 4.3521 0.3333 12.8685 +v 5.2555 0.3583 12.7488 +v 3.4490 0.4196 12.6890 +v 4.3512 0.3333 12.9884 +v 5.2542 0.3583 12.9070 +v 3.4478 0.4196 12.8472 +v 4.2778 1.8814 12.7164 +v 4.2766 1.8814 12.8746 +v 4.4757 1.8814 12.8812 +v 4.4769 1.8814 12.7230 +v 4.4533 0.8805 12.6690 +v 4.4523 0.8805 12.7889 +v 4.4757 -0.0000 12.8812 +v 4.4769 -0.0000 12.7230 +v 4.3023 0.8805 12.6640 +v 4.2778 -0.0000 12.7164 +v 4.3014 0.8805 12.7839 +v 4.2766 -0.0000 12.8746 +v 4.7261 1.6654 12.7313 +v 4.7249 1.6654 12.8895 +v 4.9240 1.6654 12.8961 +v 4.9252 1.6654 12.7379 +v 4.8786 0.8805 12.8518 +v 4.8777 0.8805 12.9717 +v 4.9240 -0.0000 12.8960 +v 4.9252 -0.0000 12.7379 +v 4.7277 0.8805 12.8468 +v 4.7261 -0.0000 12.7313 +v 4.7267 0.8805 12.9668 +v 4.7249 -0.0000 12.8895 +v 5.1263 1.7611 12.6863 +v 5.1242 1.7611 12.9609 +v 5.3234 1.7611 12.9675 +v 5.3255 1.7611 12.6929 +v 5.2707 0.8805 12.7685 +v 5.2698 0.8805 12.8884 +v 5.3238 -0.0000 12.9093 +v 5.3250 -0.0000 12.7511 +v 5.1197 0.8805 12.7635 +v 5.1259 -0.0000 12.7445 +v 5.1188 0.8805 12.8834 +v 5.1247 -0.0000 12.9027 +v -10.4130 1.7088 12.6327 +v -10.4151 1.7088 12.8988 +v -10.2159 1.7088 12.9054 +v -10.2139 1.7088 12.6393 +v -10.1979 0.8805 12.6873 +v -10.1993 0.8805 12.8739 +v -10.2159 -0.0000 12.8931 +v -10.2140 -0.0000 12.6517 +v -10.3488 0.8805 12.6823 +v -10.4131 -0.0000 12.6451 +v -10.3502 0.8805 12.8689 +v -10.4150 -0.0000 12.8865 +v -9.9722 1.8182 12.7029 +v -9.9734 1.8182 12.8610 +v -9.7743 1.8182 12.8676 +v -9.7731 1.8182 12.7094 +v -9.7545 0.8805 12.6176 +v -9.7554 0.8805 12.7375 +v -9.7273 -0.0000 12.8676 +v -9.7261 -0.0000 12.7095 +v -9.9054 0.8805 12.6126 +v -9.9252 -0.0000 12.7029 +v -9.9063 0.8805 12.7325 +v -9.9264 -0.0000 12.8610 +v -9.4318 1.4149 12.6063 +v -9.4327 1.4149 12.7262 +v -8.5296 1.4917 12.9073 +v -8.5284 1.4917 12.7491 +v -10.3348 1.5530 12.6893 +v -10.3360 1.5530 12.8475 +v -9.4382 1.2339 12.6061 +v -8.5369 1.2529 12.7488 +v -10.3433 1.3141 12.6890 +v -9.4391 1.2339 12.7260 +v -8.5381 1.2529 12.9070 +v -10.3445 1.3141 12.8472 +v -9.4338 0.5144 12.8687 +v -9.4347 0.5144 12.9886 +v -8.5296 0.5972 12.9073 +v -8.5284 0.5972 12.7491 +v -10.3348 0.6584 12.6893 +v -10.3360 0.6584 12.8475 +v -9.4402 0.3333 12.8685 +v -8.5369 0.3583 12.7488 +v -10.3433 0.4196 12.6890 +v -9.4411 0.3333 12.9884 +v -8.5381 0.3583 12.9070 +v -10.3445 0.4196 12.8472 +v -9.5146 1.8814 12.7164 +v -9.5158 1.8814 12.8746 +v -9.3166 1.8814 12.8812 +v -9.3154 1.8814 12.7230 +v -9.3391 0.8805 12.6690 +v -9.3400 0.8805 12.7889 +v -9.3166 -0.0000 12.8812 +v -9.3154 -0.0000 12.7230 +v -9.4900 0.8805 12.6640 +v -9.5146 -0.0000 12.7164 +v -9.4910 0.8805 12.7839 +v -9.5158 -0.0000 12.8746 +v -9.0663 1.6654 12.7313 +v -9.0675 1.6654 12.8895 +v -8.8683 1.6654 12.8961 +v -8.8671 1.6654 12.7379 +v -8.9137 0.8805 12.8518 +v -8.9146 0.8805 12.9717 +v -8.8683 -0.0000 12.8961 +v -8.8671 -0.0000 12.7379 +v -9.0647 0.8805 12.8469 +v -9.0663 -0.0000 12.7313 +v -9.0656 0.8805 12.9668 +v -9.0675 -0.0000 12.8895 +v -8.6660 1.7611 12.6864 +v -8.6681 1.7611 12.9609 +v -8.4690 1.7611 12.9675 +v -8.4669 1.7611 12.6929 +v -8.5217 0.8805 12.7685 +v -8.5226 0.8805 12.8884 +v -8.4685 -0.0000 12.9093 +v -8.4673 -0.0000 12.7511 +v -8.6726 0.8805 12.7635 +v -8.6665 -0.0000 12.7445 +v -8.6735 0.8805 12.8834 +v -8.6677 -0.0000 12.9027 +v -8.3304 1.7088 12.6327 +v -8.3325 1.7088 12.8988 +v -8.1333 1.7088 12.9054 +v -8.1313 1.7088 12.6393 +v -8.1153 0.8805 12.6873 +v -8.1167 0.8805 12.8739 +v -8.1332 -0.0000 12.8931 +v -8.1314 -0.0000 12.6517 +v -8.2662 0.8805 12.6823 +v -8.3305 -0.0000 12.6451 +v -8.2676 0.8805 12.8689 +v -8.3324 -0.0000 12.8865 +v -7.8896 1.8182 12.7029 +v -7.8908 1.8182 12.8610 +v -7.6917 1.8182 12.8676 +v -7.6905 1.8182 12.7094 +v -7.6718 0.8805 12.6176 +v -7.6728 0.8805 12.7375 +v -7.6447 -0.0000 12.8676 +v -7.6435 -0.0000 12.7095 +v -7.8228 0.8805 12.6126 +v -7.8426 -0.0000 12.7029 +v -7.8237 0.8805 12.7325 +v -7.8438 -0.0000 12.8610 +v -7.3492 1.4149 12.6063 +v -7.3501 1.4149 12.7262 +v -6.4470 1.4917 12.9073 +v -6.4458 1.4917 12.7491 +v -8.2522 1.5530 12.6893 +v -8.2534 1.5530 12.8475 +v -7.3556 1.2339 12.6061 +v -6.4543 1.2529 12.7488 +v -8.2607 1.3141 12.6890 +v -7.3565 1.2339 12.7260 +v -6.4555 1.2529 12.9070 +v -8.2619 1.3141 12.8472 +v -7.3511 0.5144 12.8687 +v -7.3521 0.5144 12.9886 +v -6.4470 0.5972 12.9073 +v -6.4458 0.5972 12.7491 +v -8.2522 0.6584 12.6893 +v -8.2534 0.6584 12.8475 +v -7.3576 0.3333 12.8685 +v -6.4543 0.3583 12.7488 +v -8.2607 0.4196 12.6890 +v -7.3585 0.3333 12.9884 +v -6.4555 0.3583 12.9070 +v -8.2619 0.4196 12.8472 +v -7.4320 1.8814 12.7164 +v -7.4332 1.8814 12.8746 +v -7.2340 1.8814 12.8812 +v -7.2328 1.8814 12.7230 +v -7.2565 0.8805 12.6690 +v -7.2574 0.8805 12.7889 +v -7.2340 -0.0000 12.8812 +v -7.2328 -0.0000 12.7230 +v -7.4074 0.8805 12.6640 +v -7.4320 -0.0000 12.7164 +v -7.4084 0.8805 12.7839 +v -7.4332 -0.0000 12.8746 +v -6.9837 1.6654 12.7313 +v -6.9849 1.6654 12.8895 +v -6.7857 1.6654 12.8961 +v -6.7845 1.6654 12.7379 +v -6.8311 0.8805 12.8518 +v -6.8320 0.8805 12.9717 +v -6.7857 -0.0000 12.8961 +v -6.7845 -0.0000 12.7379 +v -6.9821 0.8805 12.8469 +v -6.9837 -0.0000 12.7313 +v -6.9830 0.8805 12.9668 +v -6.9849 -0.0000 12.8895 +v -6.5834 1.7611 12.6864 +v -6.5855 1.7611 12.9609 +v -6.3864 1.7611 12.9675 +v -6.3843 1.7611 12.6929 +v -6.4391 0.8805 12.7685 +v -6.4400 0.8805 12.8884 +v -6.3859 -0.0000 12.9093 +v -6.3847 -0.0000 12.7511 +v -6.5900 0.8805 12.7635 +v -6.5838 -0.0000 12.7445 +v -6.5909 0.8805 12.8834 +v -6.5851 -0.0000 12.9027 +v -14.4004 1.7088 12.6327 +v -14.4025 1.7088 12.8988 +v -14.2033 1.7088 12.9054 +v -14.2013 1.7088 12.6393 +v -14.1852 0.8805 12.6873 +v -14.1867 0.8805 12.8739 +v -14.2032 -0.0000 12.8931 +v -14.2014 -0.0000 12.6517 +v -14.3362 0.8805 12.6823 +v -14.4005 -0.0000 12.6451 +v -14.3376 0.8805 12.8689 +v -14.4024 -0.0000 12.8865 +v -13.9596 1.8182 12.7029 +v -13.9608 1.8182 12.8610 +v -13.7617 1.8182 12.8676 +v -13.7605 1.8182 12.7094 +v -13.7418 0.8805 12.6176 +v -13.7428 0.8805 12.7375 +v -13.7147 -0.0000 12.8676 +v -13.7134 -0.0000 12.7095 +v -13.8928 0.8805 12.6126 +v -13.9126 -0.0000 12.7029 +v -13.8937 0.8805 12.7325 +v -13.9138 -0.0000 12.8610 +v -13.4191 1.4149 12.6063 +v -13.4201 1.4149 12.7262 +v -12.5170 1.4917 12.9073 +v -12.5157 1.4917 12.7491 +v -14.3222 1.5530 12.6893 +v -14.3234 1.5530 12.8475 +v -13.4256 1.2339 12.6061 +v -12.5243 1.2529 12.7488 +v -14.3307 1.3141 12.6890 +v -13.4265 1.2339 12.7260 +v -12.5255 1.2529 12.9070 +v -14.3319 1.3141 12.8472 +v -13.4211 0.5144 12.8687 +v -13.4221 0.5144 12.9886 +v -12.5170 0.5972 12.9073 +v -12.5157 0.5972 12.7491 +v -14.3222 0.6584 12.6893 +v -14.3234 0.6584 12.8475 +v -13.4276 0.3333 12.8685 +v -12.5243 0.3583 12.7488 +v -14.3307 0.4196 12.6890 +v -13.4285 0.3333 12.9884 +v -12.5255 0.3583 12.9070 +v -14.3319 0.4196 12.8472 +v -13.5019 1.8814 12.7164 +v -13.5031 1.8814 12.8746 +v -13.3040 1.8814 12.8812 +v -13.3028 1.8814 12.7230 +v -13.3265 0.8805 12.6690 +v -13.3274 0.8805 12.7889 +v -13.3040 -0.0000 12.8812 +v -13.3028 -0.0000 12.7230 +v -13.4774 0.8805 12.6640 +v -13.5019 -0.0000 12.7164 +v -13.4784 0.8805 12.7839 +v -13.5031 -0.0000 12.8746 +v -13.0536 1.6654 12.7313 +v -13.0549 1.6654 12.8895 +v -12.8557 1.6654 12.8961 +v -12.8545 1.6654 12.7379 +v -12.9011 0.8805 12.8518 +v -12.9020 0.8805 12.9717 +v -12.8557 -0.0000 12.8961 +v -12.8545 -0.0000 12.7379 +v -13.0521 0.8805 12.8469 +v -13.0536 -0.0000 12.7313 +v -13.0530 0.8805 12.9668 +v -13.0549 -0.0000 12.8895 +v -12.6534 1.7611 12.6864 +v -12.6555 1.7611 12.9609 +v -12.4564 1.7611 12.9675 +v -12.4543 1.7611 12.6929 +v -12.5090 0.8805 12.7685 +v -12.5100 0.8805 12.8884 +v -12.4559 -0.0000 12.9093 +v -12.4547 -0.0000 12.7511 +v -12.6600 0.8805 12.7635 +v -12.6538 -0.0000 12.7445 +v -12.6609 0.8805 12.8834 +v -12.6550 -0.0000 12.9027 +v -12.3178 1.7088 12.6327 +v -12.3199 1.7088 12.8988 +v -12.1207 1.7088 12.9054 +v -12.1187 1.7088 12.6393 +v -12.1026 0.8805 12.6873 +v -12.1041 0.8805 12.8739 +v -12.1206 -0.0000 12.8931 +v -12.1188 -0.0000 12.6517 +v -12.2536 0.8805 12.6823 +v -12.3179 -0.0000 12.6451 +v -12.2550 0.8805 12.8689 +v -12.3198 -0.0000 12.8865 +v -11.8770 1.8182 12.7029 +v -11.8782 1.8182 12.8610 +v -11.6791 1.8182 12.8676 +v -11.6779 1.8182 12.7094 +v -11.6592 0.8805 12.6176 +v -11.6602 0.8805 12.7375 +v -11.6321 -0.0000 12.8676 +v -11.6308 -0.0000 12.7095 +v -11.8102 0.8805 12.6126 +v -11.8300 -0.0000 12.7029 +v -11.8111 0.8805 12.7325 +v -11.8312 -0.0000 12.8610 +v -11.3365 1.4149 12.6063 +v -11.3375 1.4149 12.7262 +v -10.4344 1.4917 12.9073 +v -10.4332 1.4917 12.7491 +v -12.2396 1.5530 12.6893 +v -12.2408 1.5530 12.8475 +v -11.3430 1.2339 12.6061 +v -10.4417 1.2529 12.7488 +v -12.2481 1.3141 12.6890 +v -11.3439 1.2339 12.7260 +v -10.4429 1.2529 12.9070 +v -12.2493 1.3141 12.8472 +v -11.3385 0.5144 12.8687 +v -11.3395 0.5144 12.9886 +v -10.4344 0.5972 12.9073 +v -10.4332 0.5972 12.7491 +v -12.2396 0.6584 12.6893 +v -12.2408 0.6584 12.8475 +v -11.3450 0.3333 12.8685 +v -10.4417 0.3583 12.7488 +v -12.2481 0.4196 12.6890 +v -11.3459 0.3333 12.9884 +v -10.4429 0.3583 12.9070 +v -12.2493 0.4196 12.8472 +v -11.4193 1.8814 12.7164 +v -11.4205 1.8814 12.8746 +v -11.2214 1.8814 12.8812 +v -11.2202 1.8814 12.7230 +v -11.2439 0.8805 12.6690 +v -11.2448 0.8805 12.7889 +v -11.2214 -0.0000 12.8812 +v -11.2202 -0.0000 12.7230 +v -11.3948 0.8805 12.6640 +v -11.4193 -0.0000 12.7164 +v -11.3958 0.8805 12.7839 +v -11.4205 -0.0000 12.8746 +v -10.9711 1.6654 12.7313 +v -10.9723 1.6654 12.8895 +v -10.7731 1.6654 12.8961 +v -10.7719 1.6654 12.7379 +v -10.8185 0.8805 12.8518 +v -10.8194 0.8805 12.9717 +v -10.7731 -0.0000 12.8961 +v -10.7719 -0.0000 12.7379 +v -10.9695 0.8805 12.8469 +v -10.9711 -0.0000 12.7313 +v -10.9704 0.8805 12.9668 +v -10.9723 -0.0000 12.8895 +v -10.5708 1.7611 12.6864 +v -10.5729 1.7611 12.9609 +v -10.3738 1.7611 12.9675 +v -10.3717 1.7611 12.6929 +v -10.4264 0.8805 12.7685 +v -10.4274 0.8805 12.8884 +v -10.3733 -0.0000 12.9093 +v -10.3721 -0.0000 12.7511 +v -10.5774 0.8805 12.7635 +v -10.5712 -0.0000 12.7445 +v -10.5783 0.8805 12.8834 +v -10.5724 -0.0000 12.9027 +v -16.5316 1.7088 12.6327 +v -16.5337 1.7088 12.8988 +v -16.3345 1.7088 12.9054 +v -16.3325 1.7088 12.6393 +v -16.3164 0.8805 12.6873 +v -16.3179 0.8805 12.8739 +v -16.3344 -0.0000 12.8931 +v -16.3326 -0.0000 12.6517 +v -16.4674 0.8805 12.6823 +v -16.5317 -0.0000 12.6451 +v -16.4688 0.8805 12.8689 +v -16.5336 -0.0000 12.8865 +v -16.0908 1.8182 12.7029 +v -16.0920 1.8182 12.8610 +v -15.8929 1.8182 12.8676 +v -15.8917 1.8182 12.7094 +v -15.8730 0.8805 12.6176 +v -15.8740 0.8805 12.7375 +v -15.8459 -0.0000 12.8676 +v -15.8446 -0.0000 12.7095 +v -16.0240 0.8805 12.6126 +v -16.0438 -0.0000 12.7029 +v -16.0249 0.8805 12.7325 +v -16.0450 -0.0000 12.8610 +v -15.5503 1.4149 12.6063 +v -15.5513 1.4149 12.7262 +v -14.6482 1.4917 12.9073 +v -14.6470 1.4917 12.7491 +v -16.4534 1.5530 12.6893 +v -16.4546 1.5530 12.8475 +v -15.5568 1.2339 12.6061 +v -14.6555 1.2529 12.7488 +v -16.4619 1.3141 12.6890 +v -15.5577 1.2339 12.7260 +v -14.6567 1.2529 12.9070 +v -16.4631 1.3141 12.8472 +v -15.5523 0.5144 12.8687 +v -15.5533 0.5144 12.9886 +v -14.6482 0.5972 12.9073 +v -14.6470 0.5972 12.7491 +v -16.4534 0.6584 12.6893 +v -16.4546 0.6584 12.8475 +v -15.5588 0.3333 12.8685 +v -14.6555 0.3583 12.7488 +v -16.4619 0.4196 12.6890 +v -15.5597 0.3333 12.9884 +v -14.6567 0.3583 12.9070 +v -16.4631 0.4196 12.8472 +v -15.6331 1.8814 12.7164 +v -15.6343 1.8814 12.8746 +v -15.4352 1.8814 12.8812 +v -15.4340 1.8814 12.7230 +v -15.4577 0.8805 12.6690 +v -15.4586 0.8805 12.7889 +v -15.4352 -0.0000 12.8812 +v -15.4340 -0.0000 12.7230 +v -15.6086 0.8805 12.6640 +v -15.6331 -0.0000 12.7164 +v -15.6096 0.8805 12.7839 +v -15.6343 -0.0000 12.8746 +v -15.1849 1.6654 12.7313 +v -15.1861 1.6654 12.8895 +v -14.9869 1.6654 12.8961 +v -14.9857 1.6654 12.7379 +v -15.0323 0.8805 12.8518 +v -15.0332 0.8805 12.9717 +v -14.9869 -0.0000 12.8961 +v -14.9857 -0.0000 12.7379 +v -15.1833 0.8805 12.8469 +v -15.1849 -0.0000 12.7313 +v -15.1842 0.8805 12.9668 +v -15.1861 -0.0000 12.8895 +v -14.7846 1.7611 12.6864 +v -14.7867 1.7611 12.9609 +v -14.5876 1.7611 12.9675 +v -14.5855 1.7611 12.6929 +v -14.6402 0.8805 12.7685 +v -14.6412 0.8805 12.8884 +v -14.5871 -0.0000 12.9093 +v -14.5859 -0.0000 12.7511 +v -14.7912 0.8805 12.7635 +v -14.7850 -0.0000 12.7445 +v -14.7921 0.8805 12.8834 +v -14.7862 -0.0000 12.9027 +v -16.1976 1.7088 8.6138 +v -16.4638 1.7088 8.6118 +v -16.4703 1.7088 8.8109 +v -16.2042 1.7088 8.8129 +v -16.2523 0.8805 8.8290 +v -16.4388 0.8805 8.8276 +v -16.4580 0.0000 8.8110 +v -16.2166 0.0000 8.8129 +v -16.2473 0.8805 8.6781 +v -16.2100 0.0000 8.6137 +v -16.4338 0.8805 8.6766 +v -16.4514 0.0000 8.6119 +v -16.2678 1.8182 9.0547 +v -16.4259 1.8182 9.0534 +v -16.4325 1.8182 9.2526 +v -16.2744 1.8182 9.2538 +v -16.1825 0.8805 9.2724 +v -16.3024 0.8805 9.2715 +v -16.4325 -0.0000 9.2996 +v -16.2744 -0.0000 9.3008 +v -16.1775 0.8805 9.1215 +v -16.2678 0.0000 9.1017 +v -16.2974 0.8805 9.1205 +v -16.4259 0.0000 9.1005 +v -16.1713 1.4149 9.5951 +v -16.2912 1.4149 9.5942 +v -16.4722 1.4917 10.4973 +v -16.3140 1.4917 10.4985 +v -16.2542 1.5530 8.6921 +v -16.4124 1.5530 8.6909 +v -16.1710 1.2339 9.5886 +v -16.3137 1.2529 10.4900 +v -16.2539 1.3141 8.6835 +v -16.2909 1.2339 9.5877 +v -16.4719 1.2529 10.4888 +v -16.4121 1.3141 8.6823 +v -16.4336 0.5144 9.5931 +v -16.5535 0.5144 9.5922 +v -16.4722 0.5972 10.4973 +v -16.3140 0.5972 10.4985 +v -16.2542 0.6584 8.6921 +v -16.4124 0.6584 8.6909 +v -16.4334 0.3333 9.5866 +v -16.3137 0.3583 10.4900 +v -16.2539 0.4196 8.6835 +v -16.5533 0.3333 9.5857 +v -16.4719 0.3583 10.4888 +v -16.4121 0.4196 8.6823 +v -16.2814 1.8814 9.5123 +v -16.4395 1.8814 9.5111 +v -16.4461 1.8814 9.7102 +v -16.2880 1.8814 9.7114 +v -16.2339 0.8805 9.6878 +v -16.3538 0.8805 9.6868 +v -16.4461 -0.0000 9.7102 +v -16.2880 -0.0000 9.7114 +v -16.2289 0.8805 9.5368 +v -16.2814 -0.0000 9.5123 +v -16.3488 0.8805 9.5359 +v -16.4395 -0.0000 9.5111 +v -16.2962 1.6654 9.9606 +v -16.4544 1.6654 9.9594 +v -16.4610 1.6654 10.1585 +v -16.3028 1.6654 10.1597 +v -16.4168 0.8805 10.1131 +v -16.5367 0.8805 10.1122 +v -16.4610 -0.0000 10.1585 +v -16.3028 -0.0000 10.1597 +v -16.4118 0.8805 9.9622 +v -16.2962 -0.0000 9.9606 +v -16.5317 0.8805 9.9613 +v -16.4544 -0.0000 9.9594 +v -16.2513 1.7611 10.3609 +v -16.5258 1.7611 10.3588 +v -16.5324 1.7611 10.5579 +v -16.2579 1.7611 10.5600 +v -16.3334 0.8805 10.5052 +v -16.4533 0.8805 10.5043 +v -16.4742 -0.0000 10.5583 +v -16.3160 -0.0000 10.5595 +v -16.3284 0.8805 10.3542 +v -16.3094 -0.0000 10.3604 +v -16.4483 0.8805 10.3533 +v -16.4676 -0.0000 10.3592 +v -16.1976 1.7088 10.6964 +v -16.4638 1.7088 10.6944 +v -16.4703 1.7088 10.8935 +v -16.2042 1.7088 10.8955 +v -16.2523 0.8805 10.9116 +v -16.4388 0.8805 10.9102 +v -16.4580 -0.0000 10.8936 +v -16.2166 -0.0000 10.8955 +v -16.2473 0.8805 10.7607 +v -16.2100 -0.0000 10.6963 +v -16.4338 0.8805 10.7592 +v -16.4514 -0.0000 10.6945 +v -16.2678 1.8182 11.1373 +v -16.4259 1.8182 11.1361 +v -16.4325 1.8182 11.3352 +v -16.2744 1.8182 11.3364 +v -16.1825 0.8805 11.3550 +v -16.3024 0.8805 11.3541 +v -16.4325 -0.0000 11.3822 +v -16.2744 -0.0000 11.3834 +v -16.1775 0.8805 11.2041 +v -16.2678 -0.0000 11.1843 +v -16.2974 0.8805 11.2031 +v -16.4259 -0.0000 11.1831 +v -16.1713 1.4149 11.6777 +v -16.2912 1.4149 11.6768 +v -16.4722 1.4917 12.5799 +v -16.3140 1.4917 12.5811 +v -16.2542 1.5530 10.7747 +v -16.4124 1.5530 10.7735 +v -16.1710 1.2339 11.6712 +v -16.3137 1.2529 12.5726 +v -16.2539 1.3141 10.7661 +v -16.2909 1.2339 11.6703 +v -16.4719 1.2529 12.5714 +v -16.4121 1.3141 10.7649 +v -16.4336 0.5143 11.6757 +v -16.5535 0.5143 11.6748 +v -16.4722 0.5972 12.5799 +v -16.3140 0.5972 12.5811 +v -16.2542 0.6584 10.7747 +v -16.4124 0.6584 10.7735 +v -16.4334 0.3333 11.6692 +v -16.3137 0.3583 12.5726 +v -16.2539 0.4196 10.7661 +v -16.5533 0.3333 11.6683 +v -16.4719 0.3583 12.5714 +v -16.4121 0.4196 10.7649 +v -16.2814 1.8814 11.5949 +v -16.4395 1.8814 11.5937 +v -16.4461 1.8814 11.7928 +v -16.2880 1.8814 11.7941 +v -16.2339 0.8805 11.7704 +v -16.3538 0.8805 11.7694 +v -16.4461 -0.0000 11.7928 +v -16.2880 -0.0000 11.7941 +v -16.2289 0.8805 11.6194 +v -16.2814 -0.0000 11.5949 +v -16.3488 0.8805 11.6185 +v -16.4395 -0.0000 11.5937 +v -16.2962 1.6654 12.0432 +v -16.4544 1.6654 12.0420 +v -16.4610 1.6654 12.2411 +v -16.3028 1.6654 12.2423 +v -16.4168 0.8805 12.1957 +v -16.5367 0.8805 12.1948 +v -16.4610 -0.0000 12.2411 +v -16.3028 -0.0000 12.2423 +v -16.4118 0.8805 12.0448 +v -16.2962 -0.0000 12.0432 +v -16.5317 0.8805 12.0439 +v -16.4544 -0.0000 12.0420 +v -16.2513 1.7611 12.4435 +v -16.5258 1.7611 12.4414 +v -16.5324 1.7611 12.6405 +v -16.2579 1.7611 12.6426 +v -16.3334 0.8805 12.5878 +v -16.4533 0.8805 12.5869 +v -16.4742 -0.0000 12.6409 +v -16.3160 -0.0000 12.6422 +v -16.3284 0.8805 12.4368 +v -16.3094 -0.0000 12.4430 +v -16.4483 0.8805 12.4359 +v -16.4676 -0.0000 12.4418 +v -16.1976 1.7088 4.6264 +v -16.4638 1.7088 4.6244 +v -16.4703 1.7088 4.8235 +v -16.2042 1.7088 4.8256 +v -16.2523 0.8805 4.8416 +v -16.4389 0.8805 4.8402 +v -16.4580 0.0000 4.8236 +v -16.2166 0.0000 4.8255 +v -16.2473 0.8805 4.6907 +v -16.2100 0.0000 4.6263 +v -16.4338 0.8805 4.6892 +v -16.4514 0.0000 4.6245 +v -16.2678 1.8182 5.0673 +v -16.4259 1.8182 5.0661 +v -16.4325 1.8182 5.2652 +v -16.2744 1.8182 5.2664 +v -16.1825 0.8805 5.2850 +v -16.3024 0.8805 5.2841 +v -16.4325 0.0000 5.3122 +v -16.2744 0.0000 5.3134 +v -16.1775 0.8805 5.1341 +v -16.2678 0.0000 5.1143 +v -16.2974 0.8805 5.1332 +v -16.4259 0.0000 5.1131 +v -16.1713 1.4149 5.6077 +v -16.2912 1.4149 5.6068 +v -16.4722 1.4917 6.5099 +v -16.3140 1.4917 6.5111 +v -16.2542 1.5530 4.7047 +v -16.4124 1.5530 4.7035 +v -16.1710 1.2339 5.6013 +v -16.3137 1.2529 6.5026 +v -16.2539 1.3141 4.6961 +v -16.2909 1.2339 5.6003 +v -16.4719 1.2529 6.5014 +v -16.4121 1.3141 4.6949 +v -16.4336 0.5144 5.6057 +v -16.5535 0.5144 5.6048 +v -16.4722 0.5972 6.5099 +v -16.3140 0.5972 6.5111 +v -16.2542 0.6584 4.7047 +v -16.4124 0.6584 4.7035 +v -16.4334 0.3333 5.5993 +v -16.3137 0.3583 6.5026 +v -16.2539 0.4196 4.6961 +v -16.5533 0.3333 5.5983 +v -16.4719 0.3583 6.5014 +v -16.4121 0.4196 4.6949 +v -16.2814 1.8814 5.5249 +v -16.4395 1.8814 5.5237 +v -16.4461 1.8814 5.7229 +v -16.2880 1.8814 5.7241 +v -16.2339 0.8805 5.7004 +v -16.3538 0.8805 5.6995 +v -16.4461 -0.0000 5.7229 +v -16.2880 -0.0000 5.7241 +v -16.2289 0.8805 5.5494 +v -16.2814 0.0000 5.5249 +v -16.3488 0.8805 5.5485 +v -16.4395 0.0000 5.5237 +v -16.2962 1.6654 5.9732 +v -16.4544 1.6654 5.9720 +v -16.4610 1.6654 6.1711 +v -16.3028 1.6654 6.1724 +v -16.4168 0.8805 6.1258 +v -16.5367 0.8805 6.1248 +v -16.4610 -0.0000 6.1711 +v -16.3028 -0.0000 6.1724 +v -16.4118 0.8805 5.9748 +v -16.2962 -0.0000 5.9732 +v -16.5317 0.8805 5.9739 +v -16.4544 -0.0000 5.9720 +v -16.2513 1.7611 6.3735 +v -16.5258 1.7611 6.3714 +v -16.5324 1.7611 6.5705 +v -16.2579 1.7611 6.5726 +v -16.3334 0.8805 6.5178 +v -16.4533 0.8805 6.5169 +v -16.4742 -0.0000 6.5710 +v -16.3160 -0.0000 6.5722 +v -16.3284 0.8805 6.3669 +v -16.3094 -0.0000 6.3730 +v -16.4483 0.8805 6.3659 +v -16.4676 -0.0000 6.3718 +v -16.1976 1.7088 6.7090 +v -16.4638 1.7088 6.7070 +v -16.4703 1.7088 6.9061 +v -16.2042 1.7088 6.9082 +v -16.2523 0.8805 6.9242 +v -16.4388 0.8805 6.9228 +v -16.4580 -0.0000 6.9062 +v -16.2166 -0.0000 6.9081 +v -16.2473 0.8805 6.7733 +v -16.2100 -0.0000 6.7089 +v -16.4338 0.8805 6.7718 +v -16.4514 -0.0000 6.7071 +v -16.2678 1.8182 7.1499 +v -16.4259 1.8182 7.1487 +v -16.4325 1.8182 7.3478 +v -16.2744 1.8182 7.3490 +v -16.1825 0.8805 7.3676 +v -16.3024 0.8805 7.3667 +v -16.4325 -0.0000 7.3948 +v -16.2744 -0.0000 7.3960 +v -16.1775 0.8805 7.2167 +v -16.2678 -0.0000 7.1969 +v -16.2974 0.8805 7.2158 +v -16.4259 -0.0000 7.1957 +v -16.1713 1.4149 7.6903 +v -16.2912 1.4149 7.6894 +v -16.4722 1.4917 8.5925 +v -16.3140 1.4917 8.5937 +v -16.2542 1.5530 6.7873 +v -16.4124 1.5530 6.7861 +v -16.1710 1.2339 7.6839 +v -16.3137 1.2529 8.5852 +v -16.2539 1.3141 6.7788 +v -16.2909 1.2339 7.6829 +v -16.4719 1.2529 8.5840 +v -16.4121 1.3141 6.7775 +v -16.4336 0.5144 7.6883 +v -16.5535 0.5144 7.6874 +v -16.4722 0.5972 8.5925 +v -16.3140 0.5972 8.5937 +v -16.2542 0.6584 6.7873 +v -16.4124 0.6584 6.7861 +v -16.4334 0.3333 7.6819 +v -16.3137 0.3583 8.5852 +v -16.2539 0.4196 6.7788 +v -16.5533 0.3333 7.6809 +v -16.4719 0.3583 8.5840 +v -16.4121 0.4196 6.7775 +v -16.2814 1.8814 7.6075 +v -16.4395 1.8814 7.6063 +v -16.4461 1.8814 7.8055 +v -16.2880 1.8814 7.8067 +v -16.2339 0.8805 7.7830 +v -16.3538 0.8805 7.7821 +v -16.4461 -0.0000 7.8055 +v -16.2880 -0.0000 7.8067 +v -16.2289 0.8805 7.6320 +v -16.2814 -0.0000 7.6075 +v -16.3488 0.8805 7.6311 +v -16.4395 -0.0000 7.6063 +v -16.2962 1.6654 8.0558 +v -16.4544 1.6654 8.0546 +v -16.4610 1.6654 8.2537 +v -16.3028 1.6654 8.2550 +v -16.4168 0.8805 8.2084 +v -16.5367 0.8805 8.2074 +v -16.4610 0.0000 8.2537 +v -16.3028 0.0000 8.2550 +v -16.4118 0.8805 8.0574 +v -16.2962 -0.0000 8.0558 +v -16.5317 0.8805 8.0565 +v -16.4544 -0.0000 8.0546 +v -16.2513 1.7611 8.4561 +v -16.5258 1.7611 8.4540 +v -16.5324 1.7611 8.6531 +v -16.2579 1.7611 8.6552 +v -16.3334 0.8805 8.6004 +v -16.4533 0.8805 8.5995 +v -16.4742 0.0000 8.6536 +v -16.3160 0.0000 8.6548 +v -16.3284 0.8805 8.4495 +v -16.3094 0.0000 8.4556 +v -16.4483 0.8805 8.4485 +v -16.4676 0.0000 8.4544 +v -16.1976 1.7088 2.4952 +v -16.4638 1.7088 2.4932 +v -16.4703 1.7088 2.6923 +v -16.2042 1.7088 2.6944 +v -16.2523 0.8805 2.7104 +v -16.4389 0.8805 2.7090 +v -16.4580 0.0000 2.6924 +v -16.2166 0.0000 2.6943 +v -16.2473 0.8805 2.5595 +v -16.2100 0.0000 2.4951 +v -16.4338 0.8805 2.5580 +v -16.4514 0.0000 2.4933 +v -16.2678 1.8182 2.9361 +v -16.4259 1.8182 2.9349 +v -16.4325 1.8182 3.1340 +v -16.2744 1.8182 3.1352 +v -16.1825 0.8805 3.1538 +v -16.3024 0.8805 3.1529 +v -16.4325 0.0000 3.1810 +v -16.2744 0.0000 3.1822 +v -16.1775 0.8805 3.0029 +v -16.2678 0.0000 2.9831 +v -16.2974 0.8805 3.0020 +v -16.4259 0.0000 2.9819 +v -16.1713 1.4149 3.4765 +v -16.2912 1.4149 3.4756 +v -16.4722 1.4917 4.3787 +v -16.3140 1.4917 4.3799 +v -16.2542 1.5530 2.5735 +v -16.4124 1.5530 2.5723 +v -16.1710 1.2339 3.4701 +v -16.3137 1.2529 4.3714 +v -16.2539 1.3141 2.5649 +v -16.2909 1.2339 3.4691 +v -16.4719 1.2529 4.3702 +v -16.4121 1.3141 2.5637 +v -16.4336 0.5144 3.4745 +v -16.5535 0.5144 3.4736 +v -16.4722 0.5972 4.3787 +v -16.3140 0.5972 4.3799 +v -16.2542 0.6584 2.5735 +v -16.4124 0.6584 2.5723 +v -16.4334 0.3333 3.4681 +v -16.3137 0.3583 4.3714 +v -16.2539 0.4196 2.5649 +v -16.5533 0.3333 3.4671 +v -16.4719 0.3583 4.3702 +v -16.4121 0.4196 2.5637 +v -16.2814 1.8814 3.3937 +v -16.4395 1.8814 3.3925 +v -16.4461 1.8814 3.5917 +v -16.2880 1.8814 3.5929 +v -16.2339 0.8805 3.5692 +v -16.3538 0.8805 3.5683 +v -16.4461 0.0000 3.5917 +v -16.2880 0.0000 3.5929 +v -16.2289 0.8805 3.4182 +v -16.2814 0.0000 3.3937 +v -16.3488 0.8805 3.4173 +v -16.4395 0.0000 3.3925 +v -16.2962 1.6654 3.8420 +v -16.4544 1.6654 3.8408 +v -16.4610 1.6654 4.0399 +v -16.3028 1.6654 4.0412 +v -16.4168 0.8805 3.9945 +v -16.5367 0.8805 3.9936 +v -16.4610 0.0000 4.0399 +v -16.3028 0.0000 4.0412 +v -16.4118 0.8805 3.8436 +v -16.2962 0.0000 3.8420 +v -16.5317 0.8805 3.8427 +v -16.4544 0.0000 3.8408 +v -16.2513 1.7611 4.2423 +v -16.5258 1.7611 4.2402 +v -16.5324 1.7611 4.4393 +v -16.2579 1.7611 4.4414 +v -16.3334 0.8805 4.3866 +v -16.4533 0.8805 4.3857 +v -16.4742 0.0000 4.4398 +v -16.3160 0.0000 4.4410 +v -16.3284 0.8805 4.2357 +v -16.3094 0.0000 4.2418 +v -16.4483 0.8805 4.2347 +v -16.4676 0.0000 4.2406 +v -16.1976 1.7088 -1.5986 +v -16.4638 1.7088 -1.6006 +v -16.4703 1.7088 -1.4015 +v -16.2042 1.7088 -1.3994 +v -16.2523 0.8805 -1.3834 +v -16.4389 0.8805 -1.3848 +v -16.4580 0.0000 -1.4014 +v -16.2166 0.0000 -1.3995 +v -16.2473 0.8805 -1.5343 +v -16.2100 0.0000 -1.5987 +v -16.4338 0.8805 -1.5358 +v -16.4514 0.0000 -1.6005 +v -16.2678 1.8182 -1.1577 +v -16.4259 1.8182 -1.1589 +v -16.4325 1.8182 -0.9598 +v -16.2744 1.8182 -0.9586 +v -16.1825 0.8805 -0.9400 +v -16.3024 0.8805 -0.9409 +v -16.4325 0.0000 -0.9128 +v -16.2744 0.0000 -0.9116 +v -16.1775 0.8805 -1.0909 +v -16.2678 0.0000 -1.1107 +v -16.2974 0.8805 -1.0918 +v -16.4259 0.0000 -1.1119 +v -16.1713 1.4149 -0.6173 +v -16.2912 1.4149 -0.6182 +v -16.4722 1.4917 0.2849 +v -16.3140 1.4917 0.2861 +v -16.2542 1.5530 -1.5203 +v -16.4124 1.5530 -1.5215 +v -16.1710 1.2339 -0.6237 +v -16.3137 1.2529 0.2776 +v -16.2539 1.3141 -1.5289 +v -16.2909 1.2339 -0.6247 +v -16.4719 1.2529 0.2764 +v -16.4121 1.3141 -1.5301 +v -16.4336 0.5144 -0.6193 +v -16.5535 0.5144 -0.6202 +v -16.4722 0.5972 0.2849 +v -16.3140 0.5972 0.2861 +v -16.2542 0.6584 -1.5203 +v -16.4124 0.6584 -1.5215 +v -16.4334 0.3333 -0.6257 +v -16.3137 0.3583 0.2776 +v -16.2539 0.4196 -1.5289 +v -16.5533 0.3333 -0.6267 +v -16.4719 0.3583 0.2764 +v -16.4121 0.4196 -1.5301 +v -16.2814 1.8814 -0.7001 +v -16.4395 1.8814 -0.7013 +v -16.4461 1.8814 -0.5021 +v -16.2880 1.8814 -0.5009 +v -16.2339 0.8805 -0.5246 +v -16.3538 0.8805 -0.5255 +v -16.4461 0.0000 -0.5021 +v -16.2880 0.0000 -0.5009 +v -16.2289 0.8805 -0.6756 +v -16.2814 0.0000 -0.7001 +v -16.3488 0.8805 -0.6765 +v -16.4395 0.0000 -0.7013 +v -16.2962 1.6654 -0.2518 +v -16.4544 1.6654 -0.2530 +v -16.4610 1.6654 -0.0539 +v -16.3028 1.6654 -0.0526 +v -16.4168 0.8805 -0.0992 +v -16.5367 0.8805 -0.1002 +v -16.4610 0.0000 -0.0539 +v -16.3028 0.0000 -0.0526 +v -16.4118 0.8805 -0.2502 +v -16.2962 0.0000 -0.2518 +v -16.5317 0.8805 -0.2511 +v -16.4544 0.0000 -0.2530 +v -16.2513 1.7611 0.1485 +v -16.5258 1.7611 0.1464 +v -16.5324 1.7611 0.3455 +v -16.2579 1.7611 0.3476 +v -16.3334 0.8805 0.2928 +v -16.4533 0.8805 0.2919 +v -16.4742 0.0000 0.3460 +v -16.3160 0.0000 0.3472 +v -16.3284 0.8805 0.1419 +v -16.3094 0.0000 0.1480 +v -16.4483 0.8805 0.1409 +v -16.4676 0.0000 0.1468 +v -16.1976 1.7088 0.4840 +v -16.4638 1.7088 0.4820 +v -16.4703 1.7088 0.6811 +v -16.2042 1.7088 0.6832 +v -16.2523 0.8805 0.6992 +v -16.4389 0.8805 0.6978 +v -16.4580 0.0000 0.6812 +v -16.2166 0.0000 0.6831 +v -16.2473 0.8805 0.5483 +v -16.2100 0.0000 0.4839 +v -16.4338 0.8805 0.5468 +v -16.4514 0.0000 0.4821 +v -16.2678 1.8182 0.9249 +v -16.4259 1.8182 0.9237 +v -16.4325 1.8182 1.1228 +v -16.2744 1.8182 1.1240 +v -16.1825 0.8805 1.1426 +v -16.3024 0.8805 1.1417 +v -16.4325 0.0000 1.1698 +v -16.2744 0.0000 1.1710 +v -16.1775 0.8805 0.9917 +v -16.2678 0.0000 0.9719 +v -16.2974 0.8805 0.9908 +v -16.4259 0.0000 0.9707 +v -16.1713 1.4149 1.4653 +v -16.2912 1.4149 1.4644 +v -16.4722 1.4917 2.3675 +v -16.3140 1.4917 2.3687 +v -16.2542 1.5530 0.5623 +v -16.4124 1.5530 0.5611 +v -16.1710 1.2339 1.4589 +v -16.3137 1.2529 2.3602 +v -16.2539 1.3141 0.5538 +v -16.2909 1.2339 1.4579 +v -16.4719 1.2529 2.3590 +v -16.4121 1.3141 0.5525 +v -16.4336 0.5144 1.4633 +v -16.5535 0.5144 1.4624 +v -16.4722 0.5972 2.3675 +v -16.3140 0.5972 2.3687 +v -16.2542 0.6584 0.5623 +v -16.4124 0.6584 0.5611 +v -16.4334 0.3333 1.4569 +v -16.3137 0.3583 2.3602 +v -16.2539 0.4196 0.5538 +v -16.5533 0.3333 1.4559 +v -16.4719 0.3583 2.3590 +v -16.4121 0.4196 0.5525 +v -16.2814 1.8814 1.3825 +v -16.4395 1.8814 1.3813 +v -16.4461 1.8814 1.5805 +v -16.2880 1.8814 1.5817 +v -16.2339 0.8805 1.5580 +v -16.3538 0.8805 1.5571 +v -16.4461 0.0000 1.5805 +v -16.2880 0.0000 1.5817 +v -16.2289 0.8805 1.4070 +v -16.2814 0.0000 1.3825 +v -16.3488 0.8805 1.4061 +v -16.4395 0.0000 1.3813 +v -16.2962 1.6654 1.8308 +v -16.4544 1.6654 1.8296 +v -16.4610 1.6654 2.0287 +v -16.3028 1.6654 2.0300 +v -16.4168 0.8805 1.9834 +v -16.5367 0.8805 1.9824 +v -16.4610 0.0000 2.0287 +v -16.3028 0.0000 2.0300 +v -16.4118 0.8805 1.8324 +v -16.2962 0.0000 1.8308 +v -16.5317 0.8805 1.8315 +v -16.4544 0.0000 1.8296 +v -16.2513 1.7611 2.2311 +v -16.5258 1.7611 2.2290 +v -16.5324 1.7611 2.4281 +v -16.2579 1.7611 2.4302 +v -16.3334 0.8805 2.3754 +v -16.4533 0.8805 2.3745 +v -16.4742 0.0000 2.4286 +v -16.3160 0.0000 2.4298 +v -16.3284 0.8805 2.2245 +v -16.3094 0.0000 2.2306 +v -16.4483 0.8805 2.2236 +v -16.4676 0.0000 2.2294 +v -16.1976 1.7089 -15.7068 +v -16.4638 1.7089 -15.7088 +v -16.4704 1.7089 -15.5097 +v -16.2042 1.7089 -15.5076 +v -16.2523 0.8805 -15.4916 +v -16.4389 0.8805 -15.4930 +v -16.4580 0.0000 -15.5096 +v -16.2166 0.0000 -15.5077 +v -16.2473 0.8805 -15.6425 +v -16.2100 0.0000 -15.7069 +v -16.4339 0.8805 -15.6440 +v -16.4514 0.0000 -15.7087 +v -16.2678 1.8182 -15.2659 +v -16.4260 1.8182 -15.2671 +v -16.4325 1.8182 -15.0680 +v -16.2744 1.8182 -15.0668 +v -16.1825 0.8805 -15.0482 +v -16.3024 0.8805 -15.0491 +v -16.4325 0.0000 -15.0210 +v -16.2744 0.0000 -15.0198 +v -16.1775 0.8805 -15.1991 +v -16.2678 0.0000 -15.2189 +v -16.2974 0.8805 -15.2000 +v -16.4260 0.0000 -15.2201 +v -16.1713 1.4149 -14.7255 +v -16.2912 1.4149 -14.7264 +v -16.4722 1.4917 -13.8233 +v -16.3140 1.4917 -13.8221 +v -16.2542 1.5530 -15.6285 +v -16.4124 1.5530 -15.6297 +v -16.1711 1.2339 -14.7319 +v -16.3137 1.2529 -13.8306 +v -16.2539 1.3141 -15.6370 +v -16.2909 1.2339 -14.7329 +v -16.4719 1.2529 -13.8318 +v -16.4121 1.3141 -15.6383 +v -16.4336 0.5144 -14.7275 +v -16.5535 0.5144 -14.7284 +v -16.4722 0.5972 -13.8233 +v -16.3140 0.5972 -13.8221 +v -16.2542 0.6584 -15.6285 +v -16.4124 0.6584 -15.6297 +v -16.4334 0.3333 -14.7339 +v -16.3137 0.3583 -13.8306 +v -16.2539 0.4196 -15.6370 +v -16.5533 0.3333 -14.7349 +v -16.4719 0.3583 -13.8318 +v -16.4121 0.4196 -15.6383 +v -16.2814 1.8814 -14.8083 +v -16.4395 1.8814 -14.8095 +v -16.4461 1.8814 -14.6103 +v -16.2880 1.8814 -14.6091 +v -16.2339 0.8805 -14.6328 +v -16.3538 0.8805 -14.6337 +v -16.4461 0.0000 -14.6103 +v -16.2880 0.0000 -14.6091 +v -16.2289 0.8805 -14.7838 +v -16.2814 0.0000 -14.8083 +v -16.3488 0.8805 -14.7847 +v -16.4395 0.0000 -14.8095 +v -16.2962 1.6654 -14.3600 +v -16.4544 1.6654 -14.3612 +v -16.4610 1.6654 -14.1621 +v -16.3028 1.6654 -14.1608 +v -16.4168 0.8805 -14.2074 +v -16.5367 0.8805 -14.2084 +v -16.4610 0.0000 -14.1621 +v -16.3028 0.0000 -14.1608 +v -16.4118 0.8805 -14.3584 +v -16.2962 0.0000 -14.3600 +v -16.5317 0.8805 -14.3593 +v -16.4544 0.0000 -14.3612 +v -16.2513 1.7611 -13.9597 +v -16.5258 1.7611 -13.9618 +v -16.5324 1.7611 -13.7627 +v -16.2579 1.7611 -13.7606 +v -16.3334 0.8805 -13.8154 +v -16.4533 0.8805 -13.8163 +v -16.4742 0.0000 -13.7622 +v -16.3160 0.0000 -13.7610 +v -16.3284 0.8805 -13.9663 +v -16.3094 0.0000 -13.9602 +v -16.4483 0.8805 -13.9672 +v -16.4676 0.0000 -13.9614 +v -16.1976 1.7089 -13.6242 +v -16.4638 1.7089 -13.6262 +v -16.4704 1.7089 -13.4270 +v -16.2042 1.7089 -13.4250 +v -16.2523 0.8805 -13.4090 +v -16.4389 0.8805 -13.4104 +v -16.4580 0.0000 -13.4270 +v -16.2166 0.0000 -13.4251 +v -16.2473 0.8805 -13.5599 +v -16.2100 0.0000 -13.6242 +v -16.4339 0.8805 -13.5613 +v -16.4514 0.0000 -13.6261 +v -16.2678 1.8182 -13.1833 +v -16.4260 1.8182 -13.1845 +v -16.4325 1.8182 -12.9854 +v -16.2744 1.8182 -12.9842 +v -16.1825 0.8805 -12.9656 +v -16.3024 0.8805 -12.9665 +v -16.4325 0.0000 -12.9384 +v -16.2744 0.0000 -12.9372 +v -16.1775 0.8805 -13.1165 +v -16.2678 0.0000 -13.1363 +v -16.2974 0.8805 -13.1174 +v -16.4260 0.0000 -13.1375 +v -16.1713 1.4149 -12.6429 +v -16.2912 1.4149 -12.6438 +v -16.4722 1.4917 -11.7407 +v -16.3140 1.4917 -11.7395 +v -16.2542 1.5530 -13.5459 +v -16.4124 1.5530 -13.5471 +v -16.1711 1.2339 -12.6493 +v -16.3137 1.2529 -11.7480 +v -16.2539 1.3141 -13.5544 +v -16.2909 1.2339 -12.6502 +v -16.4719 1.2529 -11.7492 +v -16.4121 1.3141 -13.5557 +v -16.4336 0.5144 -12.6449 +v -16.5535 0.5144 -12.6458 +v -16.4722 0.5972 -11.7407 +v -16.3140 0.5972 -11.7395 +v -16.2542 0.6584 -13.5459 +v -16.4124 0.6584 -13.5471 +v -16.4334 0.3333 -12.6513 +v -16.3137 0.3583 -11.7480 +v -16.2539 0.4196 -13.5544 +v -16.5533 0.3333 -12.6523 +v -16.4719 0.3583 -11.7492 +v -16.4121 0.4196 -13.5557 +v -16.2814 1.8814 -12.7257 +v -16.4395 1.8814 -12.7269 +v -16.4461 1.8814 -12.5277 +v -16.2880 1.8814 -12.5265 +v -16.2339 0.8805 -12.5502 +v -16.3538 0.8805 -12.5511 +v -16.4461 0.0000 -12.5277 +v -16.2880 0.0000 -12.5265 +v -16.2289 0.8805 -12.7012 +v -16.2814 0.0000 -12.7257 +v -16.3488 0.8805 -12.7021 +v -16.4395 0.0000 -12.7269 +v -16.2962 1.6654 -12.2774 +v -16.4544 1.6654 -12.2786 +v -16.4610 1.6654 -12.0795 +v -16.3028 1.6654 -12.0782 +v -16.4168 0.8805 -12.1248 +v -16.5367 0.8805 -12.1258 +v -16.4610 0.0000 -12.0795 +v -16.3028 0.0000 -12.0782 +v -16.4118 0.8805 -12.2758 +v -16.2962 0.0000 -12.2774 +v -16.5317 0.8805 -12.2767 +v -16.4544 0.0000 -12.2786 +v -16.2513 1.7611 -11.8771 +v -16.5258 1.7611 -11.8792 +v -16.5324 1.7611 -11.6801 +v -16.2579 1.7611 -11.6780 +v -16.3334 0.8805 -11.7328 +v -16.4533 0.8805 -11.7337 +v -16.4742 0.0000 -11.6796 +v -16.3160 0.0000 -11.6784 +v -16.3284 0.8805 -11.8837 +v -16.3094 0.0000 -11.8776 +v -16.4483 0.8805 -11.8846 +v -16.4676 0.0000 -11.8788 +v -14.6277 1.7089 -15.8850 +v -14.6257 1.7089 -16.1511 +v -14.8248 1.7089 -16.1577 +v -14.8268 1.7089 -15.8916 +v -14.8429 0.8805 -15.9396 +v -14.8415 0.8805 -16.1262 +v -14.8249 0.0000 -16.1454 +v -14.8268 0.0000 -15.9040 +v -14.6919 0.8805 -15.9347 +v -14.6276 0.0000 -15.8974 +v -14.6905 0.8805 -16.1212 +v -14.6258 0.0000 -16.1388 +v -15.0685 1.8182 -15.9552 +v -15.0673 1.8182 -16.1133 +v -15.2665 1.8182 -16.1199 +v -15.2677 1.8182 -15.9618 +v -15.2863 0.8805 -15.8699 +v -15.2854 0.8805 -15.9898 +v -15.3135 0.0000 -16.1199 +v -15.3147 0.0000 -15.9618 +v -15.1354 0.8805 -15.8649 +v -15.1156 0.0000 -15.9552 +v -15.1344 0.8805 -15.9848 +v -15.1144 0.0000 -16.1133 +v -15.6090 1.4149 -15.8586 +v -15.6081 1.4149 -15.9785 +v -16.5112 1.4917 -16.1596 +v -16.5124 1.4917 -16.0014 +v -14.7060 1.5530 -15.9416 +v -14.7047 1.5530 -16.0998 +v -15.6025 1.2339 -15.8584 +v -16.5039 1.2529 -16.0011 +v -14.6974 1.3141 -15.9413 +v -15.6016 1.2339 -15.9783 +v -16.5026 1.2529 -16.1593 +v -14.6962 1.3141 -16.0995 +v -15.6070 0.5144 -16.1210 +v -15.6061 0.5144 -16.2409 +v -16.5112 0.5972 -16.1596 +v -16.5124 0.5972 -16.0014 +v -14.7060 0.6584 -15.9416 +v -14.7047 0.6584 -16.0998 +v -15.6005 0.3333 -16.1208 +v -16.5039 0.3583 -16.0011 +v -14.6974 0.4196 -15.9413 +v -15.5996 0.3333 -16.2407 +v -16.5026 0.3583 -16.1593 +v -14.6962 0.4196 -16.0995 +v -15.5262 1.8814 -15.9688 +v -15.5250 1.8814 -16.1269 +v -15.7241 1.8814 -16.1335 +v -15.7253 1.8814 -15.9753 +v -15.7016 0.8805 -15.9213 +v -15.7007 0.8805 -16.0412 +v -15.7241 0.0000 -16.1335 +v -15.7253 0.0000 -15.9753 +v -15.5507 0.8805 -15.9163 +v -15.5262 0.0000 -15.9688 +v -15.5498 0.8805 -16.0362 +v -15.5250 0.0000 -16.1269 +v -15.9745 1.6654 -15.9836 +v -15.9733 1.6654 -16.1418 +v -16.1724 1.6654 -16.1484 +v -16.1736 1.6654 -15.9902 +v -16.1270 0.8805 -16.1041 +v -16.1261 0.8805 -16.2241 +v -16.1724 0.0000 -16.1484 +v -16.1736 0.0000 -15.9902 +v -15.9761 0.8805 -16.0992 +v -15.9745 0.0000 -15.9836 +v -15.9751 0.8805 -16.2191 +v -15.9733 0.0000 -16.1418 +v -16.3747 1.7611 -15.9387 +v -16.3727 1.7611 -16.2132 +v -16.5718 1.7611 -16.2198 +v -16.5739 1.7611 -15.9452 +v -16.5191 0.8805 -16.0208 +v -16.5182 0.8805 -16.1407 +v -16.5722 0.0000 -16.1616 +v -16.5734 0.0000 -16.0034 +v -16.3681 0.8805 -16.0158 +v -16.3743 0.0000 -15.9968 +v -16.3672 0.8805 -16.1357 +v -16.3731 0.0000 -16.1550 +v -16.5007 1.7088 -1.3839 +v -16.4987 1.7088 -1.6500 +v -16.6978 1.7088 -1.6566 +v -16.6999 1.7088 -1.3905 +v -16.7159 0.8805 -1.4385 +v -16.7145 0.8805 -1.6251 +v -16.6979 0.0000 -1.6442 +v -16.6998 0.0000 -1.4028 +v -16.5650 0.8805 -1.4335 +v -16.5006 0.0000 -1.3962 +v -16.5635 0.8805 -1.6201 +v -16.4988 0.0000 -1.6376 +v -16.9416 1.8182 -1.4540 +v -16.9404 1.8182 -1.6122 +v -17.1395 1.8182 -1.6188 +v -17.1407 1.8182 -1.4606 +v -17.1593 0.8805 -1.3687 +v -17.1584 0.8805 -1.4886 +v -17.1865 0.0000 -1.6188 +v -17.1877 0.0000 -1.4606 +v -17.0084 0.8805 -1.3637 +v -16.9886 0.0000 -1.4540 +v -17.0075 0.8805 -1.4836 +v -16.9874 0.0000 -1.6122 +v -17.4820 1.4149 -1.3575 +v -17.4811 1.4149 -1.4774 +v -18.3842 1.4917 -1.6584 +v -18.3854 1.4917 -1.5002 +v -16.5790 1.5530 -1.4404 +v -16.5778 1.5530 -1.5986 +v -17.4756 1.2339 -1.3573 +v -18.3769 1.2529 -1.5000 +v -16.5704 1.3141 -1.4402 +v -17.4746 1.2339 -1.4772 +v -18.3757 1.2529 -1.6581 +v -16.5692 1.3141 -1.5983 +v -17.4800 0.5144 -1.6199 +v -17.4791 0.5144 -1.7398 +v -18.3842 0.5972 -1.6584 +v -18.3854 0.5972 -1.5002 +v -16.5790 0.6584 -1.4404 +v -16.5778 0.6584 -1.5986 +v -17.4736 0.3333 -1.6196 +v -18.3769 0.3583 -1.5000 +v -16.5704 0.4196 -1.4402 +v -17.4726 0.3333 -1.7396 +v -18.3757 0.3583 -1.6581 +v -16.5692 0.4196 -1.5983 +v -17.3992 1.8814 -1.4676 +v -17.3980 1.8814 -1.6258 +v -17.5972 1.8814 -1.6324 +v -17.5984 1.8814 -1.4742 +v -17.5747 0.8805 -1.4201 +v -17.5738 0.8805 -1.5400 +v -17.5972 0.0000 -1.6324 +v -17.5984 0.0000 -1.4742 +v -17.4237 0.8805 -1.4151 +v -17.3992 0.0000 -1.4676 +v -17.4228 0.8805 -1.5350 +v -17.3980 0.0000 -1.6258 +v -17.8475 1.6654 -1.4824 +v -17.8463 1.6654 -1.6406 +v -18.0454 1.6654 -1.6472 +v -18.0467 1.6654 -1.4890 +v -18.0001 0.8805 -1.6030 +v -17.9991 0.8805 -1.7229 +v -18.0454 0.0000 -1.6472 +v -18.0467 0.0000 -1.4890 +v -17.8491 0.8805 -1.5980 +v -17.8475 0.0000 -1.4824 +v -17.8482 0.8805 -1.7179 +v -17.8463 0.0000 -1.6406 +v -18.2478 1.7611 -1.4375 +v -18.2457 1.7611 -1.7120 +v -18.4448 1.7611 -1.7186 +v -18.4469 1.7611 -1.4441 +v -18.3921 0.8805 -1.5196 +v -18.3912 0.8805 -1.6395 +v -18.4453 0.0000 -1.6604 +v -18.4465 0.0000 -1.5023 +v -18.2412 0.8805 -1.5146 +v -18.2473 0.0000 -1.4957 +v -18.2402 0.8805 -1.6345 +v -18.2461 0.0000 -1.6538 +v -16.5007 1.7088 -11.7369 +v -16.4987 1.7088 -12.0031 +v -16.6978 1.7088 -12.0097 +v -16.6999 1.7088 -11.7435 +v -16.7159 0.8805 -11.7916 +v -16.7145 0.8805 -11.9782 +v -16.6979 0.0000 -11.9973 +v -16.6998 0.0000 -11.7559 +v -16.5650 0.8805 -11.7866 +v -16.5006 0.0000 -11.7493 +v -16.5635 0.8805 -11.9732 +v -16.4988 0.0000 -11.9907 +v -16.9416 1.8182 -11.8071 +v -16.9404 1.8182 -11.9653 +v -17.1395 1.8182 -11.9719 +v -17.1407 1.8182 -11.8137 +v -17.1593 0.8805 -11.7218 +v -17.1584 0.8805 -11.8417 +v -17.1865 0.0000 -11.9719 +v -17.1877 0.0000 -11.8137 +v -17.0084 0.8805 -11.7168 +v -16.9886 0.0000 -11.8071 +v -17.0075 0.8805 -11.8367 +v -16.9874 0.0000 -11.9653 +v -17.4820 1.4149 -11.7106 +v -17.4811 1.4149 -11.8305 +v -18.3842 1.4917 -12.0115 +v -18.3854 1.4917 -11.8533 +v -16.5790 1.5530 -11.7935 +v -16.5778 1.5530 -11.9517 +v -17.4756 1.2339 -11.7104 +v -18.3769 1.2529 -11.8531 +v -16.5705 1.3141 -11.7932 +v -17.4746 1.2339 -11.8303 +v -18.3757 1.2529 -12.0112 +v -16.5692 1.3141 -11.9514 +v -17.4800 0.5144 -11.9729 +v -17.4791 0.5144 -12.0929 +v -18.3842 0.5972 -12.0115 +v -18.3854 0.5972 -11.8533 +v -16.5790 0.6584 -11.7935 +v -16.5778 0.6584 -11.9517 +v -17.4736 0.3333 -11.9727 +v -18.3769 0.3583 -11.8531 +v -16.5705 0.4196 -11.7932 +v -17.4726 0.3333 -12.0926 +v -18.3757 0.3583 -12.0112 +v -16.5692 0.4196 -11.9514 +v -17.3992 1.8814 -11.8207 +v -17.3980 1.8814 -11.9789 +v -17.5972 1.8814 -11.9854 +v -17.5984 1.8814 -11.8273 +v -17.5747 0.8805 -11.7732 +v -17.5738 0.8805 -11.8931 +v -17.5972 0.0000 -11.9854 +v -17.5984 0.0000 -11.8273 +v -17.4237 0.8805 -11.7682 +v -17.3992 0.0000 -11.8207 +v -17.4228 0.8805 -11.8881 +v -17.3980 0.0000 -11.9789 +v -17.8475 1.6654 -11.8355 +v -17.8463 1.6654 -11.9937 +v -18.0454 1.6654 -12.0003 +v -18.0467 1.6654 -11.8421 +v -18.0001 0.8805 -11.9561 +v -17.9991 0.8805 -12.0760 +v -18.0454 0.0000 -12.0003 +v -18.0467 0.0000 -11.8421 +v -17.8491 0.8805 -11.9511 +v -17.8475 0.0000 -11.8355 +v -17.8482 0.8805 -12.0710 +v -17.8463 0.0000 -11.9937 +v -18.2478 1.7611 -11.7906 +v -18.2457 1.7611 -12.0651 +v -18.4448 1.7611 -12.0717 +v -18.4469 1.7611 -11.7972 +v -18.3921 0.8805 -11.8727 +v -18.3912 0.8805 -11.9926 +v -18.4453 0.0000 -12.0135 +v -18.4465 0.0000 -11.8553 +v -18.2412 0.8805 -11.8677 +v -18.2473 0.0000 -11.8488 +v -18.2402 0.8805 -11.9876 +v -18.2461 0.0000 -12.0069 +v -13.4333 1.3855 -14.8170 +v -13.3083 1.8860 -14.9564 +v -12.6208 1.3855 -15.1128 +v -11.7678 1.4064 -15.2974 +v -11.8082 1.3855 -15.4085 +v -11.9936 1.8860 -15.4350 +v -11.9532 1.9069 -15.3239 +v -12.4185 2.1954 -15.3383 +v -12.3781 2.2162 -15.2273 +v -12.9207 2.1954 -15.1556 +v -12.8803 2.2162 -15.0445 +v -13.2679 1.9069 -14.8454 +v -13.3929 1.4064 -14.7059 +v -13.2479 0.8850 -14.7906 +v -13.2075 0.9058 -14.6795 +v -12.8230 0.5756 -14.8872 +v -12.7826 0.5965 -14.7761 +v -12.3208 0.5756 -15.0700 +v -12.2804 0.5965 -14.9589 +v -11.9332 0.8850 -15.2691 +v -11.8928 0.9058 -15.1580 +v -12.5803 1.4064 -15.0017 +v -12.7498 1.8031 -15.1131 +v -12.6339 1.7693 -15.1536 +v -12.7051 1.7422 -15.3141 +v -12.8209 1.7759 -15.2737 +v -13.1019 0.0241 -14.6562 +v -12.9860 -0.0096 -14.6967 +v -13.1730 -0.0030 -14.8168 +v -13.0571 -0.0368 -14.8573 +v -12.7098 1.7422 -15.3601 +v -12.6611 1.7693 -15.1913 +v -12.5463 1.8031 -15.2348 +v -12.5951 1.7759 -15.4035 +v -12.0978 -0.0096 -15.0677 +v -11.9830 0.0241 -15.1111 +v -12.0317 -0.0030 -15.2799 +v -12.1465 -0.0368 -15.2364 +v -12.7132 1.7060 -15.0538 +v -12.9305 -0.0497 -15.6601 +v -12.8095 -0.0506 -15.6996 +v -12.5922 1.7051 -15.0933 +v -12.8547 0.0104 -15.8603 +v -12.6374 1.7661 -15.2539 +v -12.9757 0.0114 -15.8207 +v -12.7584 1.7670 -15.2144 +v -15.8108 1.3855 -14.3550 +v -15.7723 1.8860 -14.5383 +v -15.2550 1.3855 -15.0174 +v -14.6087 1.4064 -15.6038 +v -14.6992 1.3855 -15.6798 +v -14.8730 1.8860 -15.6100 +v -14.7824 1.9069 -15.5340 +v -15.1927 2.1954 -15.3139 +v -15.1021 2.2162 -15.2379 +v -15.5362 2.1954 -14.9045 +v -15.4456 2.2162 -14.8285 +v -15.6817 1.9069 -14.4623 +v -15.7203 1.4064 -14.2790 +v -15.6371 0.8850 -14.4248 +v -15.5465 0.9058 -14.3488 +v -15.3174 0.5756 -14.7209 +v -15.2268 0.5965 -14.6449 +v -14.9739 0.5756 -15.1303 +v -14.8833 0.5965 -15.0543 +v -14.7378 0.8850 -15.4966 +v -14.6472 0.9058 -15.4206 +v -15.1645 1.4064 -14.9414 +v -15.3669 1.8031 -14.9532 +v -15.2868 1.7693 -15.0462 +v -15.4287 1.7422 -15.1497 +v -15.5088 1.7759 -15.0567 +v -15.4434 0.0241 -14.3815 +v -15.3633 -0.0096 -14.4745 +v -15.5853 -0.0030 -14.4850 +v -15.5052 -0.0368 -14.5780 +v -15.4558 1.7422 -15.1870 +v -15.3292 1.7693 -15.0653 +v -15.2516 1.8031 -15.1603 +v -15.3781 1.7759 -15.2821 +v -14.7796 -0.0096 -15.2399 +v -14.7019 0.0241 -15.3349 +v -14.8285 -0.0030 -15.4567 +v -14.9061 -0.0368 -15.3616 +v -15.3056 1.7060 -14.9201 +v -15.7969 -0.0497 -15.3365 +v -15.7119 -0.0506 -15.4312 +v -15.2206 1.7051 -15.0148 +v -15.8314 0.0104 -15.5478 +v -15.3400 1.7661 -15.1314 +v -15.9164 0.0114 -15.4531 +v -15.4251 1.7670 -15.0366 +v -15.6943 1.3855 -11.7111 +v -15.6881 1.8860 -11.8982 +v -15.2620 1.3855 -12.4599 +v -14.7272 1.4064 -13.1496 +v -14.8296 1.3855 -13.2087 +v -14.9886 1.8860 -13.1099 +v -14.8862 1.9069 -13.0507 +v -15.2520 2.1954 -12.7627 +v -15.1496 2.2162 -12.7036 +v -15.5192 2.1954 -12.2999 +v -15.4168 2.2162 -12.2408 +v -15.5858 1.9069 -11.8391 +v -15.5919 1.4063 -11.6520 +v -15.5353 0.8850 -11.8100 +v -15.4329 0.9058 -11.7508 +v -15.2719 0.5756 -12.1571 +v -15.1695 0.5965 -12.0980 +v -15.0047 0.5756 -12.6199 +v -14.9023 0.5965 -12.5608 +v -14.8357 0.8850 -13.0216 +v -14.7334 0.9058 -12.9625 +v -15.1596 1.4063 -12.4008 +v -15.3610 1.8031 -12.3772 +v -15.2983 1.7693 -12.4827 +v -15.4560 1.7422 -12.5600 +v -15.5187 1.7759 -12.4545 +v -15.3370 0.0241 -11.8010 +v -15.2743 -0.0096 -11.9064 +v -15.4948 -0.0030 -11.8782 +v -15.4320 -0.0368 -11.9837 +v -15.4891 1.7422 -12.5921 +v -15.3433 1.7693 -12.4941 +v -15.2833 1.8031 -12.6012 +v -15.4291 1.7759 -12.6992 +v -14.8323 -0.0096 -12.7615 +v -14.7723 0.0241 -12.8686 +v -14.9181 -0.0030 -12.9666 +v -14.9781 -0.0368 -12.8595 +v -15.2948 1.7060 -12.3553 +v -15.8510 -0.0497 -12.6801 +v -15.7837 -0.0506 -12.7881 +v -15.2275 1.7051 -12.4633 +v -15.9216 0.0104 -12.8821 +v -15.3654 1.7661 -12.5574 +v -15.9889 0.0114 -12.7741 +v -15.4327 1.7670 -12.4493 +v -10.1961 1.3855 11.3643 +v -10.3684 1.8860 11.4378 +v -11.0575 1.3855 11.2889 +v -11.9086 1.4063 11.0958 +v -11.9189 1.3855 11.2136 +v -11.7621 1.8860 11.3159 +v -11.7518 1.9069 11.1981 +v -11.3362 2.1954 11.4079 +v -11.3259 2.2162 11.2901 +v -10.8038 2.1954 11.4545 +v -10.7935 2.2162 11.3367 +v -10.3580 1.9069 11.3200 +v -10.1858 1.4063 11.2465 +v -10.3530 0.8850 11.2620 +v -10.3427 0.9058 11.1442 +v -10.7789 0.5756 11.1699 +v -10.7686 0.5965 11.0522 +v -11.3113 0.5756 11.1234 +v -11.3010 0.5965 11.0056 +v -11.7467 0.8850 11.1400 +v -11.7364 0.9058 11.0223 +v -11.0472 1.4063 11.1711 +v -10.9407 1.8031 11.3437 +v -11.0628 1.7693 11.3315 +v -11.0662 1.7422 11.5071 +v -10.9441 1.7759 11.5193 +v -10.4286 0.0241 11.0785 +v -10.5507 -0.0096 11.0662 +v -10.4320 -0.0030 11.2541 +v -10.5541 -0.0368 11.2418 +v -11.0813 1.7422 11.5507 +v -11.0542 1.7693 11.3771 +v -11.1766 1.8031 11.3680 +v -11.2037 1.7759 11.5416 +v -11.5125 -0.0096 11.0270 +v -11.6349 0.0241 11.0179 +v -11.6620 -0.0030 11.1914 +v -11.5396 -0.0368 11.2005 +v -10.9488 1.7060 11.2745 +v -11.0081 -0.0497 11.9158 +v -11.1345 -0.0506 11.9005 +v -11.0752 1.7051 11.2592 +v -11.1614 0.0104 12.0653 +v -11.1021 1.7661 11.4239 +v -11.0350 0.0114 12.0806 +v -10.9758 1.7670 11.4392 +v -13.9193 1.3855 11.3643 +v -14.0915 1.8860 11.4378 +v -14.7807 1.3855 11.2889 +v -15.6318 1.4063 11.0958 +v -15.6421 1.3855 11.2136 +v -15.4853 1.8860 11.3159 +v -15.4750 1.9069 11.1981 +v -15.0594 2.1954 11.4079 +v -15.0491 2.2162 11.2901 +v -14.5270 2.1954 11.4545 +v -14.5167 2.2162 11.3367 +v -14.0812 1.9069 11.3200 +v -13.9090 1.4063 11.2465 +v -14.0762 0.8850 11.2620 +v -14.0659 0.9058 11.1442 +v -14.5021 0.5756 11.1699 +v -14.4918 0.5965 11.0522 +v -15.0345 0.5756 11.1234 +v -15.0242 0.5965 11.0056 +v -15.4699 0.8850 11.1400 +v -15.4596 0.9058 11.0223 +v -14.7704 1.4063 11.1711 +v -14.6639 1.8031 11.3437 +v -14.7860 1.7693 11.3315 +v -14.7894 1.7422 11.5071 +v -14.6673 1.7759 11.5193 +v -14.1518 0.0241 11.0785 +v -14.2739 -0.0096 11.0662 +v -14.1552 -0.0030 11.2541 +v -14.2773 -0.0368 11.2418 +v -14.8045 1.7422 11.5507 +v -14.7774 1.7693 11.3771 +v -14.8997 1.8031 11.3680 +v -14.9269 1.7759 11.5416 +v -15.2357 -0.0096 11.0270 +v -15.3581 0.0241 11.0179 +v -15.3852 -0.0030 11.1914 +v -15.2628 -0.0368 11.2005 +v -14.6720 1.7060 11.2745 +v -14.7313 -0.0497 11.9158 +v -14.8577 -0.0506 11.9005 +v -14.7984 1.7051 11.2592 +v -14.8846 0.0104 12.0653 +v -14.8253 1.7661 11.4239 +v -14.7582 0.0114 12.0806 +v -14.6989 1.7670 11.4392 +v -11.9555 1.3855 11.3643 +v -12.1277 1.8860 11.4378 +v -12.8168 1.3855 11.2889 +v -13.6679 1.4063 11.0958 +v -13.6782 1.3855 11.2136 +v -13.5214 1.8860 11.3159 +v -13.5111 1.9069 11.1981 +v -13.0955 2.1954 11.4079 +v -13.0852 2.2162 11.2901 +v -12.5631 2.1954 11.4545 +v -12.5528 2.2162 11.3367 +v -12.1173 1.9069 11.3200 +v -11.9452 1.4063 11.2465 +v -12.1123 0.8850 11.2620 +v -12.1020 0.9058 11.1442 +v -12.5382 0.5756 11.1699 +v -12.5279 0.5965 11.0522 +v -13.0706 0.5756 11.1234 +v -13.0603 0.5965 11.0056 +v -13.5060 0.8850 11.1400 +v -13.4957 0.9058 11.0223 +v -12.8065 1.4063 11.1711 +v -12.7000 1.8031 11.3437 +v -12.8222 1.7693 11.3315 +v -12.8255 1.7422 11.5071 +v -12.7034 1.7759 11.5193 +v -12.1879 0.0241 11.0785 +v -12.3100 -0.0096 11.0662 +v -12.1913 -0.0030 11.2541 +v -12.3134 -0.0368 11.2418 +v -12.8406 1.7422 11.5507 +v -12.8135 1.7693 11.3771 +v -12.9359 1.8031 11.3680 +v -12.9630 1.7759 11.5416 +v -13.2718 -0.0096 11.0270 +v -13.3942 0.0241 11.0179 +v -13.4213 -0.0030 11.1914 +v -13.2989 -0.0368 11.2005 +v -12.7081 1.7060 11.2745 +v -12.7674 -0.0497 11.9158 +v -12.8938 -0.0506 11.9005 +v -12.8345 1.7051 11.2592 +v -12.9207 0.0104 12.0653 +v -12.8614 1.7661 11.4239 +v -12.7944 0.0114 12.0806 +v -12.7351 1.7670 11.4392 +v 0.1802 0.5595 -14.7704 +v 0.1255 0.5595 -14.5283 +v -0.0289 0.9000 -14.4721 +v 0.0649 0.9000 -14.8875 +v 0.2942 0.5595 -14.8315 +v 0.2606 0.9000 -14.9924 +v 0.5261 0.5595 -14.7429 +v 0.6584 0.9000 -14.8404 +v 0.5704 0.5595 -14.6214 +v 0.7343 0.9000 -14.6318 +v 0.4497 0.5595 -14.4045 +v 0.5273 0.9000 -14.2596 +v 0.3230 0.5595 -14.3780 +v 0.3100 0.9000 -14.2141 +v 0.2022 0.5595 -14.4241 +v 0.1027 0.9000 -14.2934 +v -0.0872 1.2405 -14.4509 +v -0.0091 1.7519 -14.4793 +v 0.0797 1.7519 -14.8725 +v 0.0214 1.2405 -14.9318 +v 0.2649 1.7519 -14.9718 +v 0.2478 1.2405 -15.0531 +v 0.6415 1.7519 -14.8279 +v 0.7084 1.2405 -14.8772 +v 0.7133 1.7519 -14.6305 +v 0.7963 1.2405 -14.6357 +v 0.5173 1.7519 -14.2782 +v 0.5566 1.2405 -14.2049 +v 0.3117 1.7519 -14.2351 +v 0.3051 1.2405 -14.1523 +v 0.1154 1.7519 -14.3101 +v 0.0651 1.2405 -14.2440 +v 0.1289 1.8995 -14.5295 +v 0.1827 1.8995 -14.7679 +v 0.2949 1.8995 -14.8280 +v 0.5232 1.8995 -14.7408 +v 0.5668 1.8995 -14.6211 +v 0.4480 1.8995 -14.4076 +v 0.3233 1.8995 -14.3815 +v 0.2044 1.8995 -14.4270 +v 0.1924 2.0403 -14.5527 +v 0.2302 2.0403 -14.7197 +v 0.3088 2.0403 -14.7618 +v 0.4687 2.0403 -14.7007 +v 0.4992 2.0403 -14.6169 +v 0.4160 2.0403 -14.4672 +v 0.3287 2.0403 -14.4490 +v 0.2453 2.0403 -14.4808 +v 0.1924 2.0876 -14.5527 +v 0.2302 2.0876 -14.7197 +v 0.3088 2.0876 -14.7618 +v 0.4687 2.0876 -14.7007 +v 0.4992 2.0876 -14.6169 +v 0.4160 2.0876 -14.4672 +v 0.3287 2.0876 -14.4490 +v 0.2453 2.0876 -14.4808 +v 0.1046 2.2023 -14.5207 +v 0.1646 2.2023 -14.7863 +v 0.2897 2.2023 -14.8533 +v 0.5440 2.2023 -14.7561 +v 0.5925 2.2023 -14.6228 +v 0.4602 2.2023 -14.3849 +v 0.3213 2.2023 -14.3558 +v 0.1887 2.2023 -14.4064 +v 0.1046 2.4098 -14.5207 +v 0.1646 2.4098 -14.7863 +v 0.2897 2.4098 -14.8533 +v 0.5440 2.4098 -14.7561 +v 0.5925 2.4098 -14.6228 +v 0.4602 2.4098 -14.3849 +v 0.3213 2.4098 -14.3558 +v 0.1887 2.4098 -14.4064 +v 0.2046 2.5373 -14.5571 +v 0.2393 2.5373 -14.7104 +v 0.3114 2.5373 -14.7491 +v 0.4583 2.5373 -14.6930 +v 0.4863 2.5373 -14.6160 +v 0.4099 2.5373 -14.4787 +v 0.3297 2.5373 -14.4619 +v 0.2532 2.5373 -14.4911 +v 0.3412 2.6507 -14.6068 +v 0.5700 1.5684 -14.5433 +v 0.5610 1.6492 -14.5187 +v 0.9846 1.5228 -14.3645 +v 0.9936 1.4420 -14.3892 +v 0.5319 1.6492 -14.4388 +v 0.9555 1.5228 -14.2847 +v 0.5229 1.5684 -14.4142 +v 0.9465 1.4420 -14.2600 +v 1.5494 1.4280 -14.0401 +v 1.5584 1.3472 -14.0648 +v 1.5204 1.4280 -13.9603 +v 1.5114 1.3472 -13.9356 +v 1.5349 1.2972 -14.0002 +v 0.1252 1.5684 -14.7052 +v -0.2984 1.4420 -14.8594 +v -0.3074 1.5228 -14.8347 +v 0.1162 1.6492 -14.6805 +v -0.3364 1.5228 -14.7549 +v 0.0872 1.6492 -14.6007 +v -0.3454 1.4420 -14.7302 +v 0.0782 1.5684 -14.5760 +v -0.9396 1.3472 -14.9740 +v -0.9486 1.4280 -14.9493 +v -0.9776 1.4280 -14.8695 +v -0.9866 1.3472 -14.8448 +v -0.9631 1.2972 -14.9094 +v 0.4048 -0.0767 -14.4979 +v 0.4048 0.7107 -14.4979 +v 0.2225 0.7107 -14.5643 +v 0.2225 -0.0767 -14.5643 +v 0.2777 0.7107 -14.7157 +v 0.2777 -0.0767 -14.7157 +v 0.4599 0.7107 -14.6494 +v 0.4599 -0.0767 -14.6494 +v -1.2374 1.2649 -15.0641 +v -1.1839 1.0229 -14.6042 +v -0.9923 1.4302 -14.7777 +v -1.1680 1.5864 -15.2935 +v -1.1668 1.0029 -14.6232 +v -1.2203 1.2449 -15.0831 +v -0.4444 1.5234 -14.6335 +v -0.4615 1.5434 -14.6145 +v -0.7079 1.2328 -14.5553 +v -0.6908 1.2128 -14.5743 +v -0.7581 1.7875 -14.9989 +v -0.7751 1.8075 -14.9799 +v -0.4318 1.8305 -14.8049 +v -0.4147 1.8105 -14.8239 +v -1.1510 1.5663 -15.3125 +v -0.9612 1.8626 -15.3137 +v -0.9441 1.8426 -15.3327 +v 1.4660 1.2989 -14.0503 +v 1.5641 1.2989 -13.9816 +v 1.5222 1.3053 -13.9217 +v 1.4240 1.3053 -13.9904 +v 1.5668 3.0809 -14.1517 +v 1.5420 3.0847 -14.1162 +v 1.6001 3.0847 -14.0756 +v 1.6249 3.0809 -14.1110 +v 1.4794 1.5669 -14.0695 +v 1.5776 1.5669 -14.0008 +v 1.5356 1.5733 -13.9409 +v 1.4375 1.5733 -14.0096 +v 1.5801 1.6171 -14.0044 +v 1.4820 1.6171 -14.0731 +v 1.5382 1.6235 -13.9445 +v 1.4400 1.6235 -14.0132 +v 1.8476 1.6235 -13.7278 +v 1.8451 1.5733 -13.7242 +v 1.8870 1.5669 -13.7842 +v 1.8895 1.6171 -13.7877 +v 1.1725 1.6171 -14.2898 +v 1.1700 1.5669 -14.2862 +v 1.1281 1.5733 -14.2263 +v 1.1306 1.6235 -14.2299 +v 13.7652 5.5867 -6.7761 +v 12.4179 5.5867 -7.2009 +v 11.5965 4.2732 -6.0377 +v 13.9200 4.2732 -5.0064 +v 15.0182 5.5867 -7.4284 +v 16.3791 4.2732 -6.2865 +v 15.4430 5.5867 -8.7756 +v 17.2127 4.2732 -8.9305 +v 14.7907 5.5867 -10.0287 +v 15.9326 4.2732 -11.3895 +v 13.4434 5.5867 -10.4534 +v 13.2886 4.2732 -12.2231 +v 12.1904 5.5867 -9.8012 +v 10.8296 4.2732 -10.9430 +v 11.7656 5.5867 -8.4539 +v 10.3164 4.2732 -8.4967 +v 13.6043 7.5569 -8.6148 +v 11.5965 3.6592 -6.0377 +v 13.9200 3.6592 -5.0064 +v 16.3791 3.6592 -6.2865 +v 17.2127 3.6592 -8.9305 +v 15.9326 3.6592 -11.3895 +v 13.2886 3.6592 -12.2231 +v 10.8296 3.6592 -10.9430 +v 10.3164 3.6592 -8.4967 +v 13.9081 0.4345 -4.7045 +v 13.9188 -0.0497 -4.3908 +v 16.7787 -0.0497 -5.8795 +v 16.5598 0.4345 -6.0849 +v 13.8948 1.4030 -5.1663 +v 16.2411 1.4030 -6.3877 +v 13.8976 2.8558 -5.2628 +v 16.1819 2.8558 -6.4519 +v 13.8976 3.8243 -5.2628 +v 16.1819 3.8243 -6.4519 +v 13.8976 4.3085 -5.2628 +v 16.1819 4.3085 -6.4519 +v 10.9868 0.4345 -7.0411 +v 10.9067 -0.0497 -6.9992 +v 11.0849 1.4030 -7.1421 +v 11.0761 2.8558 -7.2216 +v 11.0071 3.8243 -7.3540 +v 11.0560 4.3085 -7.4158 +v 10.5754 0.4345 -11.1064 +v 10.3246 -0.0497 -11.2952 +v 10.5998 -0.0497 -7.5888 +v 10.6800 0.4345 -7.6304 +v 10.9462 1.4030 -10.8307 +v 10.8190 1.4030 -7.6528 +v 11.0267 2.8558 -10.7776 +v 10.8791 2.8558 -7.6000 +v 11.0267 3.8243 -10.7776 +v 10.9480 3.8243 -7.4676 +v 11.0267 4.3085 -10.7776 +v 13.2272 0.4345 -12.4869 +v 13.1845 -0.0497 -12.7839 +v 13.2924 1.4030 -12.0521 +v 13.3111 2.8558 -11.9667 +v 13.3111 3.8243 -11.9667 +v 13.3111 4.3085 -11.9667 +v 16.0784 0.4345 -11.5879 +v 16.2594 -0.0497 -11.8144 +v 15.8151 1.4030 -11.2567 +v 15.7672 2.8558 -11.1923 +v 15.7672 3.8243 -11.1923 +v 15.7672 4.3085 -11.1923 +v 17.4588 0.4345 -8.9361 +v 17.7482 -0.0497 -8.9545 +v 17.0365 1.4030 -8.9104 +v 16.9563 2.8558 -8.9080 +v 16.9563 3.8243 -8.9080 +v 16.9563 4.3085 -8.9080 +v 6.4082 5.5867 -10.5037 +v 5.2168 5.5867 -9.7447 +v 5.5799 4.2732 -8.3678 +v 7.8634 4.2732 -9.4848 +v 6.7140 5.5867 -11.8829 +v 8.4634 4.2732 -12.1914 +v 5.9549 5.5867 -13.0743 +v 6.9739 4.2732 -14.5295 +v 4.5758 5.5867 -13.3800 +v 4.2673 4.2732 -15.1295 +v 3.3844 5.5867 -12.6210 +v 1.9292 4.2732 -13.6399 +v 3.0786 5.5867 -11.2419 +v 1.3292 4.2732 -10.9334 +v 3.8376 5.5867 -10.0505 +v 2.8733 4.2732 -8.9678 +v 4.8963 7.5569 -11.5624 +v 5.5799 3.6592 -8.3678 +v 7.8634 3.6592 -9.4848 +v 8.4634 3.6592 -12.1914 +v 6.9739 3.6592 -14.5295 +v 4.2673 3.6592 -15.1295 +v 1.9292 3.6592 -13.6399 +v 1.3292 3.6592 -10.9334 +v 2.8733 3.6592 -8.9678 +v 8.0870 0.4345 -9.2816 +v 8.3342 -0.0497 -9.0881 +v 9.0320 -0.0497 -12.2359 +v 8.7340 0.4345 -12.2003 +v 7.7247 1.4030 -9.5683 +v 8.2972 1.4030 -12.1507 +v 7.6526 2.8558 -9.6324 +v 8.2099 2.8558 -12.1467 +v 7.6526 3.8243 -9.6324 +v 8.2099 3.8243 -12.1467 +v 7.6526 4.3085 -9.6324 +v 8.2099 4.3085 -12.1467 +v 4.4193 0.4345 -8.5457 +v 4.3998 -0.0497 -8.4574 +v 4.4049 1.4030 -8.6857 +v 4.3384 2.8558 -8.7301 +v 4.1927 3.8243 -8.7624 +v 4.1767 4.3085 -8.8396 +v 1.0406 0.4345 -10.8437 +v 0.7348 -0.0497 -10.7729 +v 3.7510 -0.0497 -8.6013 +v 3.7706 0.4345 -8.6895 +v 1.4902 1.4030 -10.9505 +v 3.8428 1.4030 -8.8104 +v 1.5826 2.8558 -10.9781 +v 3.9219 2.8558 -8.8224 +v 1.5826 3.8243 -10.9781 +v 4.0676 3.8243 -8.7901 +v 1.5826 4.3085 -10.9781 +v 1.6877 0.4345 -13.7624 +v 1.4327 -0.0497 -13.9206 +v 2.0627 1.4030 -13.5329 +v 2.1400 2.8558 -13.4923 +v 2.1400 3.8243 -13.4923 +v 2.1400 4.3085 -13.4923 +v 4.2091 0.4345 -15.3687 +v 4.1519 -0.0497 -15.6530 +v 4.2936 1.4030 -14.9541 +v 4.3120 2.8558 -14.8760 +v 4.3120 3.8243 -14.8760 +v 4.3120 4.3085 -14.8760 +v 7.1278 0.4345 -14.7216 +v 7.2997 -0.0497 -14.9552 +v 6.8760 1.4030 -14.3816 +v 6.8262 2.8558 -14.3186 +v 6.8262 3.8243 -14.3186 +v 6.8262 4.3085 -14.3186 +v -7.3603 0.5595 -14.6578 +v -7.2663 0.5595 -14.4280 +v -7.3605 0.9000 -14.2934 +v -7.5219 0.9000 -14.6876 +v -7.3020 0.5595 -14.7732 +v -7.4218 0.9000 -14.8857 +v -7.0612 0.5595 -14.8336 +v -7.0087 0.9000 -14.9894 +v -6.9552 0.5595 -14.7594 +v -6.8269 0.9000 -14.8620 +v -6.9297 0.5595 -14.5125 +v -6.7830 0.9000 -14.4384 +v -7.0182 0.5595 -14.4182 +v -6.9349 0.9000 -14.2765 +v -7.1437 0.5595 -14.3867 +v -7.1502 0.9000 -14.2225 +v -7.3961 1.2405 -14.2426 +v -7.3484 1.7519 -14.3107 +v -7.5012 1.7519 -14.6838 +v -7.5830 1.2405 -14.6988 +v -7.4065 1.7519 -14.8713 +v -7.4671 1.2405 -14.9281 +v -7.0154 1.7519 -14.9694 +v -6.9889 1.2405 -15.0482 +v -6.8433 1.7519 -14.8489 +v -6.7784 1.2405 -14.9008 +v -6.8018 1.7519 -14.4479 +v -6.7276 1.2405 -14.4104 +v -6.9456 1.7519 -14.2947 +v -6.9035 1.2405 -14.2230 +v -7.1494 1.7519 -14.2435 +v -7.1527 1.2405 -14.1605 +v -7.2642 1.8995 -14.4310 +v -7.3568 1.8995 -14.6571 +v -7.2994 1.8995 -14.7708 +v -7.0623 1.8995 -14.8303 +v -6.9580 1.8995 -14.7572 +v -6.9329 1.8995 -14.5141 +v -7.0200 1.8995 -14.4213 +v -7.1435 1.8995 -14.3903 +v -7.2254 2.0403 -14.4864 +v -7.2903 2.0403 -14.6448 +v -7.2500 2.0403 -14.7245 +v -7.0840 2.0403 -14.7661 +v -7.0109 2.0403 -14.7150 +v -6.9933 2.0403 -14.5447 +v -7.0543 2.0403 -14.4796 +v -7.1409 2.0403 -14.4579 +v -7.2254 2.0876 -14.4864 +v -7.2903 2.0876 -14.6448 +v -7.2500 2.0876 -14.7245 +v -7.0840 2.0876 -14.7661 +v -7.0109 2.0876 -14.7150 +v -6.9933 2.0876 -14.5447 +v -7.0543 2.0876 -14.4796 +v -7.1409 2.0876 -14.4579 +v -7.2790 2.2023 -14.4098 +v -7.3822 2.2023 -14.6618 +v -7.3182 2.2023 -14.7884 +v -7.0541 2.2023 -14.8547 +v -6.9379 2.2023 -14.7733 +v -6.9099 2.2023 -14.5025 +v -7.0069 2.2023 -14.3990 +v -7.1446 2.2023 -14.3645 +v -7.2790 2.4098 -14.4098 +v -7.3822 2.4098 -14.6618 +v -7.3182 2.4098 -14.7884 +v -7.0541 2.4098 -14.8547 +v -6.9379 2.4098 -14.7733 +v -6.9099 2.4098 -14.5025 +v -7.0069 2.4098 -14.3990 +v -7.1446 2.4098 -14.3645 +v -7.2180 2.5373 -14.4970 +v -7.2775 2.5373 -14.6425 +v -7.2406 2.5373 -14.7156 +v -7.0881 2.5373 -14.7539 +v -7.0210 2.5373 -14.7069 +v -7.0048 2.5373 -14.5505 +v -7.0609 2.5373 -14.4908 +v -7.1403 2.5373 -14.4708 +v -7.1346 2.6507 -14.6161 +v -6.9108 1.5684 -14.6953 +v -6.9040 1.6492 -14.6699 +v -6.4686 1.5228 -14.7866 +v -6.4754 1.4420 -14.8120 +v -6.8820 1.6492 -14.5879 +v -6.4466 1.5228 -14.7046 +v -6.8752 1.5684 -14.5625 +v -6.4398 1.4420 -14.6792 +v -5.8198 1.4280 -14.8449 +v -5.8266 1.3472 -14.8702 +v -5.7978 1.4280 -14.7628 +v -5.7910 1.3472 -14.7374 +v -5.8088 1.2972 -14.8038 +v -7.3680 1.5684 -14.5728 +v -7.8034 1.4420 -14.4561 +v -7.7966 1.5228 -14.4308 +v -7.3612 1.6492 -14.5474 +v -7.7746 1.5228 -14.3487 +v -7.3392 1.6492 -14.4654 +v -7.7678 1.4420 -14.3234 +v -7.3324 1.5684 -14.4400 +v -8.3943 1.3472 -14.1822 +v -8.3875 1.4280 -14.1568 +v -8.3656 1.4280 -14.0748 +v -8.3588 1.3472 -14.0494 +v -8.3766 1.2972 -14.1158 +v -7.0200 -0.0767 -14.5634 +v -7.0200 0.7107 -14.5634 +v -7.2074 0.7107 -14.5132 +v -7.2074 -0.0767 -14.5132 +v -7.2491 0.7107 -14.6688 +v -7.2491 -0.0767 -14.6688 +v -7.0618 0.7107 -14.7190 +v -7.0618 -0.0767 -14.7190 +v -8.6899 1.2649 -14.0852 +v -8.3823 1.0229 -13.7392 +v -8.3250 1.4302 -13.9912 +v -8.7648 1.5864 -14.3129 +v -8.3793 1.0029 -13.7646 +v -8.6869 1.2449 -14.1106 +v -7.7934 1.5234 -14.1874 +v -7.7965 1.5434 -14.1620 +v -7.9644 1.2328 -13.9721 +v -7.9614 1.2128 -13.9975 +v -8.2600 1.7875 -14.3068 +v -8.2630 1.8075 -14.2814 +v -7.8814 1.8305 -14.3350 +v -7.8783 1.8105 -14.3604 +v -8.7617 1.5663 -14.3383 +v -8.6069 1.8626 -14.4481 +v -8.6038 1.8426 -14.4735 +v -5.8940 1.2989 -14.8054 +v -5.7742 1.2989 -14.8054 +v -5.7742 1.3053 -14.7323 +v -5.8940 1.3053 -14.7323 +v -5.8696 3.0809 -14.9463 +v -5.8696 3.0847 -14.9030 +v -5.7987 3.0847 -14.9030 +v -5.7987 3.0809 -14.9463 +v -5.8940 1.5669 -14.8288 +v -5.7742 1.5669 -14.8288 +v -5.7742 1.5733 -14.7557 +v -5.8940 1.5733 -14.7557 +v -5.7742 1.6171 -14.8332 +v -5.8940 1.6171 -14.8332 +v -5.7742 1.6235 -14.7601 +v -5.8940 1.6235 -14.7601 +v -5.3965 1.6235 -14.7601 +v -5.3965 1.5733 -14.7557 +v -5.3965 1.5669 -14.8288 +v -5.3965 1.6171 -14.8332 +v -6.2718 1.6171 -14.8332 +v -6.2718 1.5669 -14.8288 +v -6.2718 1.5733 -14.7557 +v -6.2718 1.6235 -14.7601 +v -3.3736 0.5595 -14.7023 +v -3.3208 0.5595 -14.4598 +v -3.4370 0.9000 -14.3436 +v -3.5276 0.9000 -14.7597 +v -3.2961 0.5595 -14.8059 +v -3.3946 0.9000 -14.9374 +v -3.0485 0.5595 -14.8236 +v -2.9697 0.9000 -14.9678 +v -2.9570 0.5595 -14.7321 +v -2.8128 0.9000 -14.8109 +v -2.9747 0.5595 -14.4845 +v -2.8432 0.9000 -14.3860 +v -3.0783 0.5595 -14.4070 +v -3.0208 0.9000 -14.2530 +v -3.2073 0.5595 -14.3978 +v -3.2422 0.9000 -14.2372 +v -3.4809 1.2405 -14.2997 +v -3.4221 1.7519 -14.3584 +v -3.5078 1.7519 -14.7524 +v -3.5857 1.2405 -14.7814 +v -3.3819 1.7519 -14.9206 +v -3.4318 1.2405 -14.9871 +v -2.9798 1.7519 -14.9493 +v -2.9400 1.2405 -15.0223 +v -2.8312 1.7519 -14.8008 +v -2.7583 1.2405 -14.8406 +v -2.8600 1.7519 -14.3986 +v -2.7935 1.2405 -14.3488 +v -3.0282 1.7519 -14.2727 +v -2.9992 1.2405 -14.1949 +v -3.2377 1.7519 -14.2578 +v -3.2554 1.2405 -14.1765 +v -3.3183 1.8995 -14.4623 +v -3.3702 1.8995 -14.7011 +v -3.2939 1.8995 -14.8030 +v -3.0502 1.8995 -14.8205 +v -2.9601 1.8995 -14.7304 +v -2.9776 1.8995 -14.4866 +v -3.0795 1.8995 -14.4103 +v -3.2065 1.8995 -14.4012 +v -3.2705 2.0403 -14.5101 +v -3.3068 2.0403 -14.6774 +v -3.2534 2.0403 -14.7488 +v -3.0826 2.0403 -14.7611 +v -3.0195 2.0403 -14.6980 +v -3.0317 2.0403 -14.5272 +v -3.1032 2.0403 -14.4737 +v -3.1921 2.0403 -14.4674 +v -3.2705 2.0876 -14.5101 +v -3.3068 2.0876 -14.6774 +v -3.2534 2.0876 -14.7488 +v -3.0826 2.0876 -14.7611 +v -3.0195 2.0876 -14.6980 +v -3.0317 2.0876 -14.5272 +v -3.1032 2.0876 -14.4737 +v -3.1921 2.0876 -14.4674 +v -3.3365 2.2023 -14.4440 +v -3.3944 2.2023 -14.7101 +v -3.3094 2.2023 -14.8237 +v -3.0378 2.2023 -14.8431 +v -2.9375 2.2023 -14.7428 +v -2.9569 2.2023 -14.4712 +v -3.0705 2.2023 -14.3862 +v -3.2120 2.2023 -14.3760 +v -3.3365 2.4098 -14.4440 +v -3.3944 2.4098 -14.7101 +v -3.3094 2.4098 -14.8237 +v -3.0378 2.4098 -14.8431 +v -2.9375 2.4098 -14.7428 +v -2.9569 2.4098 -14.4712 +v -3.0705 2.4098 -14.3862 +v -3.2120 2.4098 -14.3760 +v -3.2613 2.5373 -14.5193 +v -3.2947 2.5373 -14.6729 +v -3.2456 2.5373 -14.7385 +v -3.0888 2.5373 -14.7497 +v -3.0309 2.5373 -14.6918 +v -3.0421 2.5373 -14.5350 +v -3.1077 2.5373 -14.4859 +v -3.1894 2.5373 -14.4800 +v -3.1585 2.6507 -14.6221 +v -2.9244 1.5684 -14.6612 +v -2.9221 1.6492 -14.6351 +v -2.4730 1.5228 -14.6744 +v -2.4753 1.4420 -14.7005 +v -2.9147 1.6492 -14.5504 +v -2.4656 1.5228 -14.5897 +v -2.9124 1.5684 -14.5243 +v -2.4633 1.4420 -14.5636 +v -1.8240 1.4280 -14.6191 +v -1.8263 1.3472 -14.6452 +v -1.8166 1.4280 -14.5344 +v -1.8143 1.3472 -14.5083 +v -1.8203 1.2972 -14.5768 +v -3.3959 1.5684 -14.6200 +v -3.8449 1.4420 -14.5807 +v -3.8426 1.5228 -14.5545 +v -3.3936 1.6492 -14.5938 +v -3.8352 1.5228 -14.4699 +v -3.3862 1.6492 -14.5092 +v -3.8330 1.4420 -14.4438 +v -3.3839 1.5684 -14.4830 +v -4.4745 1.3472 -14.4135 +v -4.4722 1.4280 -14.3874 +v -4.4648 1.4280 -14.3028 +v -4.4625 1.3472 -14.2766 +v -4.4685 1.2972 -14.3451 +v -3.0549 -0.0767 -14.5503 +v -3.0549 0.7107 -14.5503 +v -3.2481 0.7107 -14.5334 +v -3.2481 -0.0767 -14.5334 +v -3.2621 0.7107 -14.6939 +v -3.2621 -0.0767 -14.6939 +v -3.0689 0.7107 -14.7108 +v -3.0689 -0.0767 -14.7108 +v -4.7824 1.2649 -14.3694 +v -4.5396 1.0229 -13.9752 +v -4.4393 1.4302 -14.2134 +v -4.8166 1.5864 -14.6066 +v -4.5321 1.0029 -13.9996 +v -4.7750 1.2449 -14.3938 +v -3.8818 1.5234 -14.3143 +v -3.8892 1.5434 -14.2898 +v -4.0876 1.2328 -14.1320 +v -4.0801 1.2128 -14.1564 +v -4.3205 1.7875 -14.5129 +v -4.3279 1.8075 -14.4884 +v -3.9428 1.8305 -14.4749 +v -3.9353 1.8105 -14.4994 +v -4.8091 1.5663 -14.6311 +v -4.6376 1.8626 -14.7123 +v -4.6302 1.8426 -14.7367 +v -1.9039 1.2989 -14.5931 +v -1.7860 1.2989 -14.5723 +v -1.7986 1.3053 -14.5003 +v -1.9166 1.3053 -14.5211 +v -1.8554 3.0809 -14.7276 +v -1.8629 3.0847 -14.6849 +v -1.7931 3.0847 -14.6726 +v -1.7855 3.0809 -14.7153 +v -1.8999 1.5669 -14.6162 +v -1.7819 1.5669 -14.5954 +v -1.7946 1.5733 -14.5234 +v -1.9125 1.5733 -14.5442 +v -1.7811 1.6171 -14.5997 +v -1.8991 1.6171 -14.6205 +v -1.7938 1.6235 -14.5277 +v -1.9118 1.6235 -14.5485 +v -1.4218 1.6235 -14.4621 +v -1.4226 1.5733 -14.4578 +v -1.4099 1.5669 -14.5298 +v -1.4091 1.6171 -14.5341 +v -2.2711 1.6171 -14.6861 +v -2.2719 1.5669 -14.6818 +v -2.2845 1.5733 -14.6098 +v -2.2838 1.6235 -14.6141 +v -4.8350 0.5595 -9.5807 +v -4.8664 0.5595 -9.8270 +v -4.7405 0.9000 -9.9326 +v -4.6866 0.9000 -9.5101 +v -4.9213 0.5595 -9.4843 +v -4.8346 0.9000 -9.3447 +v -5.1695 0.5595 -9.4883 +v -5.2605 0.9000 -9.3515 +v -5.2526 0.5595 -9.5874 +v -5.4032 0.9000 -9.5215 +v -5.2134 0.5595 -9.8325 +v -5.3359 0.9000 -9.9421 +v -5.1035 0.5595 -9.9007 +v -5.1473 0.9000 -10.0591 +v -4.9741 0.5595 -9.8986 +v -4.9253 0.9000 -10.0556 +v -4.6930 1.2405 -9.9725 +v -4.7567 1.7519 -9.9191 +v -4.7056 1.7519 -9.5192 +v -4.6306 1.2405 -9.4834 +v -4.8457 1.7519 -9.3626 +v -4.8019 1.2405 -9.2920 +v -5.2488 1.7519 -9.3690 +v -5.2949 1.2405 -9.2998 +v -5.3839 1.7519 -9.5299 +v -5.4600 1.2405 -9.4966 +v -5.3202 1.7519 -9.9280 +v -5.3821 1.2405 -9.9834 +v -5.1417 1.7519 -10.0388 +v -5.1638 1.2405 -10.1189 +v -4.9316 1.7519 -10.0355 +v -4.9069 1.2405 -10.1148 +v -4.8692 1.8995 -9.8247 +v -4.8382 1.8995 -9.5823 +v -4.9231 1.8995 -9.4874 +v -5.1675 1.8995 -9.4912 +v -5.2493 1.8995 -9.5888 +v -5.2107 1.8995 -9.8301 +v -5.1025 1.8995 -9.8973 +v -4.9752 1.8995 -9.8952 +v -4.9210 2.0403 -9.7812 +v -4.8993 2.0403 -9.6114 +v -4.9588 2.0403 -9.5449 +v -5.1300 2.0403 -9.5476 +v -5.1873 2.0403 -9.6159 +v -5.1603 2.0403 -9.7850 +v -5.0845 2.0403 -9.8320 +v -4.9953 2.0403 -9.8306 +v -4.9210 2.0876 -9.7812 +v -4.8993 2.0876 -9.6114 +v -4.9588 2.0876 -9.5449 +v -5.1300 2.0876 -9.5476 +v -5.1873 2.0876 -9.6159 +v -5.1603 2.0876 -9.7850 +v -5.0845 2.0876 -9.8320 +v -4.9953 2.0876 -9.8306 +v -4.8494 2.2023 -9.8413 +v -4.8149 2.2023 -9.5712 +v -4.9095 2.2023 -9.4655 +v -5.1818 2.2023 -9.4698 +v -5.2730 2.2023 -9.5785 +v -5.2300 2.2023 -9.8473 +v -5.1094 2.2023 -9.9221 +v -4.9675 2.2023 -9.9199 +v -4.8494 2.4098 -9.8413 +v -4.8149 2.4098 -9.5712 +v -4.9095 2.4098 -9.4655 +v -5.1818 2.4098 -9.4698 +v -5.2730 2.4098 -9.5785 +v -5.2300 2.4098 -9.8473 +v -5.1094 2.4098 -9.9221 +v -4.9675 2.4098 -9.9199 +v -4.9309 2.5373 -9.7729 +v -4.9110 2.5373 -9.6169 +v -4.9656 2.5373 -9.5559 +v -5.1228 2.5373 -9.5584 +v -5.1755 2.5373 -9.6211 +v -5.1506 2.5373 -9.7763 +v -5.0810 2.5373 -9.8195 +v -4.9991 2.5373 -9.8182 +v -5.0423 2.6507 -9.6794 +v -5.2789 1.5684 -9.6608 +v -5.2789 1.6492 -9.6871 +v -5.7297 1.5228 -9.6871 +v -5.7297 1.4420 -9.6608 +v -5.2789 1.6492 -9.7720 +v -5.7297 1.5228 -9.7720 +v -5.2789 1.5684 -9.7983 +v -5.7297 1.4420 -9.7983 +v -6.3714 1.4280 -9.7987 +v -6.3714 1.3472 -9.7725 +v -6.3714 1.4280 -9.8837 +v -6.3715 1.3472 -9.9099 +v -6.3714 1.2972 -9.8412 +v -4.8056 1.5684 -9.6608 +v -4.3549 1.4420 -9.6608 +v -4.3549 1.5228 -9.6871 +v -4.8056 1.6492 -9.6871 +v -4.3549 1.5228 -9.7720 +v -4.8056 1.6492 -9.7720 +v -4.3549 1.4420 -9.7983 +v -4.8056 1.5684 -9.7983 +v -3.7131 1.3472 -9.7725 +v -3.7132 1.4280 -9.7987 +v -3.7131 1.4280 -9.8837 +v -3.7131 1.3472 -9.9099 +v -3.7131 1.2972 -9.8412 +v -5.1393 -0.0767 -9.7600 +v -5.1393 0.7107 -9.7600 +v -4.9453 0.7107 -9.7600 +v -4.9453 -0.0767 -9.7600 +v -4.9453 0.7107 -9.5988 +v -4.9453 -0.0767 -9.5988 +v -5.1393 0.7107 -9.5988 +v -5.1393 -0.0767 -9.5988 +v -3.4025 1.2649 -9.7896 +v -3.6101 1.0229 -10.2035 +v -3.7307 1.4302 -9.9749 +v -3.3892 1.5864 -9.5503 +v -3.6196 1.0029 -10.1798 +v -3.4120 1.2449 -9.7659 +v -4.2949 1.5234 -9.9230 +v -4.2854 1.5434 -9.9467 +v -4.0741 1.2328 -10.0867 +v -4.0836 1.2128 -10.0630 +v -3.8752 1.7875 -9.6869 +v -3.8657 1.8075 -9.7106 +v -4.2482 1.8305 -9.7577 +v -4.2577 1.8105 -9.7340 +v -3.3987 1.5663 -9.5266 +v -3.5767 1.8626 -9.4606 +v -3.5862 1.8426 -9.4369 +v -6.2896 1.2989 -9.8177 +v -6.4053 1.2989 -9.8487 +v -6.3864 1.3053 -9.9193 +v -6.2706 1.3053 -9.8883 +v -6.3496 3.0809 -9.6879 +v -6.3384 3.0847 -9.7297 +v -6.4069 3.0847 -9.7481 +v -6.4181 3.0809 -9.7063 +v -6.2956 1.5669 -9.7950 +v -6.4113 1.5669 -9.8260 +v -6.3924 1.5733 -9.8966 +v -6.2767 1.5733 -9.8656 +v -6.4125 1.6171 -9.8218 +v -6.2968 1.6171 -9.7908 +v -6.3936 1.6235 -9.8924 +v -6.2778 1.6235 -9.8614 +v -6.7584 1.6235 -9.9902 +v -6.7573 1.5733 -9.9944 +v -6.7762 1.5669 -9.9238 +v -6.7773 1.6171 -9.9195 +v -5.9319 1.6171 -9.6930 +v -5.9308 1.5669 -9.6972 +v -5.9118 1.5733 -9.7679 +v -5.9130 1.6235 -9.7636 +v -0.5296 0.5595 -9.5807 +v -0.5610 0.5595 -9.8270 +v -0.4351 0.9000 -9.9326 +v -0.3812 0.9000 -9.5101 +v -0.6158 0.5595 -9.4843 +v -0.5292 0.9000 -9.3447 +v -0.8640 0.5595 -9.4883 +v -0.9550 0.9000 -9.3515 +v -0.9472 0.5595 -9.5874 +v -1.0977 0.9000 -9.5215 +v -0.9079 0.5595 -9.8325 +v -1.0304 0.9000 -9.9421 +v -0.7980 0.5595 -9.9007 +v -0.8418 0.9000 -10.0591 +v -0.6687 0.5595 -9.8986 +v -0.6199 0.9000 -10.0556 +v -0.3875 1.2405 -9.9725 +v -0.4512 1.7519 -9.9191 +v -0.4002 1.7519 -9.5192 +v -0.3251 1.2405 -9.4834 +v -0.5403 1.7519 -9.3626 +v -0.4964 1.2405 -9.2920 +v -0.9434 1.7519 -9.3690 +v -0.9894 1.2405 -9.2998 +v -1.0784 1.7519 -9.5299 +v -1.1546 1.2405 -9.4966 +v -1.0147 1.7519 -9.9280 +v -1.0767 1.2405 -9.9834 +v -0.8362 1.7519 -10.0388 +v -0.8583 1.2405 -10.1189 +v -0.6261 1.7519 -10.0355 +v -0.6015 1.2405 -10.1148 +v -0.5637 1.8995 -9.8247 +v -0.5328 1.8995 -9.5823 +v -0.6177 1.8995 -9.4874 +v -0.8620 1.8995 -9.4912 +v -0.9439 1.8995 -9.5888 +v -0.9053 1.8995 -9.8301 +v -0.7971 1.8995 -9.8973 +v -0.6697 1.8995 -9.8952 +v -0.6156 2.0403 -9.7812 +v -0.5939 2.0403 -9.6114 +v -0.6534 2.0403 -9.5449 +v -0.8246 2.0403 -9.5476 +v -0.8819 2.0403 -9.6159 +v -0.8548 2.0403 -9.7850 +v -0.7790 2.0403 -9.8320 +v -0.6898 2.0403 -9.8306 +v -0.6156 2.0876 -9.7812 +v -0.5939 2.0876 -9.6114 +v -0.6534 2.0876 -9.5449 +v -0.8246 2.0876 -9.5476 +v -0.8819 2.0876 -9.6159 +v -0.8548 2.0876 -9.7850 +v -0.7790 2.0876 -9.8320 +v -0.6898 2.0876 -9.8306 +v -0.5439 2.2023 -9.8413 +v -0.5095 2.2023 -9.5712 +v -0.6041 2.2023 -9.4655 +v -0.8763 2.2023 -9.4698 +v -0.9675 2.2023 -9.5785 +v -0.9245 2.2023 -9.8473 +v -0.8039 2.2023 -9.9221 +v -0.6621 2.2023 -9.9199 +v -0.5439 2.4098 -9.8413 +v -0.5095 2.4098 -9.5712 +v -0.6041 2.4098 -9.4655 +v -0.8763 2.4098 -9.4698 +v -0.9675 2.4098 -9.5785 +v -0.9245 2.4098 -9.8473 +v -0.8039 2.4098 -9.9221 +v -0.6621 2.4098 -9.9199 +v -0.6255 2.5373 -9.7729 +v -0.6056 2.5373 -9.6169 +v -0.6602 2.5373 -9.5559 +v -0.8174 2.5373 -9.5584 +v -0.8700 2.5373 -9.6211 +v -0.8452 2.5373 -9.7763 +v -0.7756 2.5373 -9.8195 +v -0.6937 2.5373 -9.8182 +v -0.7368 2.6507 -9.6794 +v -0.9735 1.5684 -9.6608 +v -0.9735 1.6492 -9.6871 +v -1.4243 1.5228 -9.6871 +v -1.4243 1.4420 -9.6608 +v -0.9735 1.6492 -9.7720 +v -1.4243 1.5228 -9.7720 +v -0.9735 1.5684 -9.7983 +v -1.4243 1.4420 -9.7983 +v -2.0660 1.4280 -9.7987 +v -2.0660 1.3472 -9.7725 +v -2.0660 1.4280 -9.8837 +v -2.0660 1.3472 -9.9099 +v -2.0660 1.2972 -9.8412 +v -0.5002 1.5684 -9.6608 +v -0.0494 1.4420 -9.6608 +v -0.0494 1.5228 -9.6871 +v -0.5002 1.6492 -9.6871 +v -0.0494 1.5228 -9.7720 +v -0.5002 1.6492 -9.7720 +v -0.0494 1.4420 -9.7983 +v -0.5002 1.5684 -9.7983 +v 0.5923 1.3472 -9.7725 +v 0.5923 1.4280 -9.7987 +v 0.5923 1.4280 -9.8837 +v 0.5923 1.3472 -9.9099 +v 0.5923 1.2972 -9.8412 +v -0.8338 -0.0767 -9.7600 +v -0.8338 0.7107 -9.7600 +v -0.6399 0.7107 -9.7600 +v -0.6399 -0.0767 -9.7600 +v -0.6399 0.7107 -9.5988 +v -0.6399 -0.0767 -9.5988 +v -0.8338 0.7107 -9.5988 +v -0.8338 -0.0767 -9.5988 +v 0.9029 1.2649 -9.7896 +v 0.6954 1.0229 -10.2035 +v 0.5747 1.4302 -9.9749 +v 0.9163 1.5864 -9.5503 +v 0.6858 1.0029 -10.1798 +v 0.8934 1.2449 -9.7659 +v 0.0105 1.5234 -9.9230 +v 0.0201 1.5434 -9.9467 +v 0.2314 1.2328 -10.0867 +v 0.2219 1.2128 -10.0630 +v 0.4303 1.7875 -9.6869 +v 0.4398 1.8075 -9.7106 +v 0.0573 1.8305 -9.7577 +v 0.0477 1.8105 -9.7340 +v 0.9067 1.5663 -9.5266 +v 0.7288 1.8626 -9.4606 +v 0.7193 1.8426 -9.4369 +v -1.9841 1.2989 -9.8177 +v -2.0998 1.2989 -9.8487 +v -2.0809 1.3053 -9.9193 +v -1.9652 1.3053 -9.8883 +v -2.0442 3.0809 -9.6879 +v -2.0330 3.0847 -9.7297 +v -2.1015 3.0847 -9.7481 +v -2.1127 3.0809 -9.7063 +v -1.9902 1.5669 -9.7950 +v -2.1059 1.5669 -9.8260 +v -2.0870 1.5733 -9.8966 +v -1.9712 1.5733 -9.8656 +v -2.1070 1.6171 -9.8218 +v -1.9913 1.6171 -9.7908 +v -2.0881 1.6235 -9.8924 +v -1.9724 1.6235 -9.8614 +v -2.4530 1.6235 -9.9902 +v -2.4518 1.5733 -9.9944 +v -2.4708 1.5669 -9.9238 +v -2.4719 1.6171 -9.9195 +v -1.6265 1.6171 -9.6930 +v -1.6253 1.5669 -9.6972 +v -1.6064 1.5733 -9.7679 +v -1.6075 1.6235 -9.7636 +v -7.0597 1.5017 2.9909 +v -6.9399 1.5017 2.9909 +v -6.9399 1.5268 2.9219 +v -7.0597 1.5268 2.9219 +v -7.0353 -0.1729 2.3655 +v -7.0353 -0.1580 2.3246 +v -6.9643 -0.1580 2.3246 +v -6.9643 -0.1729 2.3655 +v -7.0597 1.2489 2.8989 +v -6.9399 1.2489 2.8989 +v -6.9399 1.2740 2.8299 +v -7.0597 1.2740 2.8299 +v -6.9399 1.2015 2.8816 +v -7.0597 1.2015 2.8816 +v -6.9399 1.2266 2.8127 +v -7.0597 1.2266 2.8127 +v -6.5622 1.2266 2.8127 +v -6.5622 1.2740 2.8299 +v -6.5622 1.2489 2.8989 +v -6.5622 1.2015 2.8816 +v -7.4374 1.2015 2.8816 +v -7.4374 1.2489 2.8989 +v -7.4374 1.2740 2.8299 +v -7.4374 1.2266 2.8127 +v -7.0632 0.0497 2.4800 +v -7.0653 0.0489 2.5758 +v -5.9749 0.0496 2.5758 +v -5.9776 0.0497 2.4800 +v -7.0632 -0.0767 2.4800 +v -5.9776 -0.0767 2.4800 +v -7.2299 -0.0767 2.4800 +v -7.2342 -0.0766 2.5758 +v -7.2320 0.0491 2.5758 +v -7.2299 0.0497 2.4800 +v -5.9723 -0.0761 2.5758 +v -7.0674 -0.0769 2.5758 +v -5.8058 -0.0759 2.5758 +v -5.8109 -0.0767 2.4800 +v -5.8109 0.0497 2.4800 +v -5.8083 0.0499 2.5758 +v -7.2299 1.4067 2.9473 +v -7.2299 1.4067 3.0439 +v -7.0632 1.4067 3.0439 +v -7.0632 1.4067 2.9473 +v -5.8109 1.4067 3.0439 +v -5.8109 1.4067 2.9473 +v -5.9769 1.4067 2.9473 +v -5.9769 1.4067 3.0439 +v -7.2299 1.2410 3.0439 +v -7.2299 1.2401 2.9473 +v -7.0632 1.2405 3.0439 +v -7.0632 1.2421 2.9473 +v -5.9773 1.2437 2.9473 +v -5.8109 1.2435 2.9473 +v -5.9773 1.2420 3.0439 +v -5.8109 1.2425 3.0439 +v -5.8109 1.4067 3.4851 +v -5.9769 1.4067 3.4851 +v -5.9773 1.2420 3.4851 +v -5.8109 1.2425 3.4851 +v -7.0632 1.4067 3.4851 +v -7.2299 1.4067 3.4851 +v -7.2299 1.2410 3.4851 +v -7.0632 1.2405 3.4851 +v -5.9670 -0.0755 3.3494 +v -5.9722 0.0495 3.3494 +v -5.8058 0.0500 3.3494 +v -5.8007 -0.0750 3.3494 +v -7.2384 -0.0765 3.3494 +v -7.2342 0.0485 3.3494 +v -7.0674 0.0480 3.3494 +v -7.0716 -0.0770 3.3494 +v -6.4628 0.2134 2.4968 +v -6.6246 -0.0549 2.0788 +v -6.8162 0.3198 2.3147 +v -6.5070 0.5277 2.7418 +v -6.6303 -0.0767 2.1021 +v -6.4685 0.1916 2.5202 +v -7.3877 0.3084 2.3685 +v -7.3821 0.3302 2.3451 +v -7.1185 0.0655 2.1995 +v -7.1242 0.0436 2.2229 +v -7.0219 0.6399 2.6091 +v -7.0162 0.6617 2.5857 +v -7.3967 0.6159 2.5393 +v -7.4024 0.5941 2.5626 +v -6.5126 0.5059 2.7652 +v -6.7410 0.7639 2.8365 +v -6.7467 0.7420 2.8599 +v -6.1035 1.5017 2.9909 +v -5.9837 1.5017 2.9909 +v -5.9837 1.5268 2.9219 +v -6.1035 1.5268 2.9219 +v -6.0791 -0.1729 2.3655 +v -6.0791 -0.1580 2.3246 +v -6.0081 -0.1580 2.3246 +v -6.0081 -0.1729 2.3655 +v -6.1035 1.2489 2.8989 +v -5.9837 1.2489 2.8989 +v -5.9837 1.2740 2.8299 +v -6.1035 1.2740 2.8299 +v -5.9837 1.2015 2.8816 +v -6.1035 1.2015 2.8816 +v -5.9837 1.2266 2.8127 +v -6.1035 1.2266 2.8127 +v -5.6060 1.2266 2.8127 +v -5.6060 1.2740 2.8299 +v -5.6060 1.2489 2.8989 +v -5.6060 1.2015 2.8816 +v -6.4812 1.2015 2.8816 +v -6.4812 1.2489 2.8989 +v -6.4812 1.2740 2.8299 +v -6.4812 1.2266 2.8127 +v 9.6897 1.5017 1.5610 +v 9.7404 1.5017 1.4524 +v 9.6778 1.5268 1.4232 +v 9.6272 1.5268 1.5318 +v 9.1332 -0.1729 1.2745 +v 9.0962 -0.1580 1.2572 +v 9.1262 -0.1580 1.1930 +v 9.1632 -0.1729 1.2102 +v 9.6063 1.2489 1.5221 +v 9.6569 1.2489 1.4135 +v 9.5944 1.2740 1.3844 +v 9.5438 1.2740 1.4929 +v 9.6413 1.2015 1.4062 +v 9.5907 1.2015 1.5148 +v 9.5788 1.2266 1.3771 +v 9.5282 1.2266 1.4856 +v 9.7384 1.2266 1.0347 +v 9.7541 1.2740 1.0420 +v 9.8166 1.2489 1.0712 +v 9.8009 1.2015 1.0639 +v 9.4311 1.2015 1.8571 +v 9.4467 1.2489 1.8644 +v 9.3842 1.2740 1.8353 +v 9.3685 1.2266 1.8280 +v 9.2252 0.0497 1.3482 +v 9.3111 0.0489 1.3906 +v 9.7720 0.0496 0.4024 +v 9.6840 0.0497 0.3643 +v 9.2252 -0.0767 1.3482 +v 9.6840 -0.0767 0.3643 +v 9.1547 -0.0767 1.4993 +v 9.2398 -0.0766 1.5436 +v 9.2407 0.0491 1.5417 +v 9.1547 0.0497 1.4993 +v 9.7731 -0.0761 0.4000 +v 9.3102 -0.0769 1.3925 +v 9.8434 -0.0759 0.2491 +v 9.7545 -0.0767 0.2132 +v 9.7545 0.0497 0.2132 +v 9.8423 0.0499 0.2514 +v 9.5783 1.4067 1.6968 +v 9.6658 1.4067 1.7376 +v 9.7363 1.4067 1.5865 +v 9.6488 1.4067 1.5457 +v 10.2655 1.4067 0.4516 +v 10.1780 1.4067 0.4107 +v 10.1078 1.4067 0.5612 +v 10.1954 1.4067 0.6020 +v 9.6658 1.2410 1.7376 +v 9.5783 1.2401 1.6968 +v 9.7363 1.2405 1.5865 +v 9.6488 1.2421 1.5457 +v 10.1077 1.2437 0.5615 +v 10.1780 1.2435 0.4107 +v 10.1952 1.2420 0.6024 +v 10.2655 1.2425 0.4516 +v 10.6654 1.4067 0.6380 +v 10.5952 1.4067 0.7885 +v 10.5951 1.2420 0.7888 +v 10.6654 1.2425 0.6380 +v 10.1362 1.4067 1.7730 +v 10.0657 1.4067 1.9241 +v 10.0657 1.2410 1.9241 +v 10.1362 1.2405 1.7730 +v 10.4764 -0.0755 0.7222 +v 10.4742 0.0495 0.7268 +v 10.5445 0.0500 0.5760 +v 10.5467 -0.0750 0.5714 +v 9.9391 -0.0765 1.8744 +v 9.9409 0.0485 1.8706 +v 10.0113 0.0480 1.7194 +v 10.0095 -0.0770 1.7233 +v 9.4942 0.2134 0.8112 +v 9.0469 -0.0549 0.7812 +v 9.1798 0.3198 1.0545 +v 9.6976 0.5277 0.9547 +v 9.0657 -0.0767 0.7962 +v 9.5130 0.1916 0.8262 +v 8.9869 0.3084 1.5952 +v 8.9682 0.3302 1.5802 +v 8.9476 0.0655 1.2798 +v 8.9664 0.0436 1.2948 +v 9.3596 0.6399 1.3653 +v 9.3409 0.6617 1.3503 +v 9.1379 0.6159 1.6755 +v 9.1567 0.5941 1.6905 +v 9.7163 0.5059 0.9698 +v 9.6845 0.7639 1.2069 +v 9.7032 0.7420 1.2219 +v 10.0938 1.5017 0.6944 +v 10.1445 1.5017 0.5858 +v 10.0820 1.5268 0.5566 +v 10.0313 1.5268 0.6652 +v 9.5373 -0.1729 0.4079 +v 9.5003 -0.1580 0.3906 +v 9.5303 -0.1580 0.3263 +v 9.5673 -0.1729 0.3436 +v 10.0104 1.2489 0.6555 +v 10.0611 1.2489 0.5469 +v 9.9985 1.2740 0.5177 +v 9.9479 1.2740 0.6263 +v 10.0454 1.2015 0.5396 +v 9.9948 1.2015 0.6482 +v 9.9829 1.2266 0.5105 +v 9.9323 1.2266 0.6190 +v 10.1426 1.2266 0.1681 +v 10.1582 1.2740 0.1754 +v 10.2207 1.2489 0.2045 +v 10.2051 1.2015 0.1973 +v 9.8352 1.2015 0.9905 +v 9.8508 1.2489 0.9978 +v 9.7883 1.2740 0.9687 +v 9.7726 1.2266 0.9614 +v 9.6653 1.5017 -8.2456 +v 9.5883 1.5017 -8.3374 +v 9.5355 1.5268 -8.2930 +v 9.6125 1.5268 -8.2013 +v 9.1705 -0.1729 -7.8623 +v 9.1392 -0.1580 -7.8361 +v 9.0936 -0.1580 -7.8904 +v 9.1249 -0.1729 -7.9166 +v 9.5948 1.2489 -8.1864 +v 9.5178 1.2489 -8.2782 +v 9.4650 1.2740 -8.2339 +v 9.5420 1.2740 -8.1421 +v 9.5046 1.2015 -8.2671 +v 9.5816 1.2015 -8.1754 +v 9.4518 1.2266 -8.2228 +v 9.5288 1.2266 -8.1310 +v 9.2090 1.2266 -8.5122 +v 9.2222 1.2740 -8.5232 +v 9.2750 1.2489 -8.5676 +v 9.2618 1.2015 -8.5565 +v 9.8244 1.2015 -7.8860 +v 9.8376 1.2489 -7.8971 +v 9.7848 1.2740 -7.8528 +v 9.7716 1.2266 -7.8417 +v 9.2762 0.0497 -7.9145 +v 9.3509 0.0489 -7.9745 +v 8.6500 0.0496 -8.8098 +v 8.5784 0.0497 -8.7461 +v 9.2762 -0.0767 -7.9145 +v 8.5784 -0.0767 -8.7461 +v 9.3834 -0.0767 -7.7868 +v 9.4595 -0.0766 -7.8451 +v 9.4581 0.0491 -7.8468 +v 9.3834 0.0497 -7.7868 +v 8.6484 -0.0761 -8.8118 +v 9.3523 -0.0769 -7.9729 +v 8.5413 -0.0759 -8.9393 +v 8.4712 -0.0767 -8.8738 +v 8.4712 0.0497 -8.8738 +v 8.5430 0.0499 -8.9374 +v 9.7414 1.4067 -8.0872 +v 9.8153 1.4067 -8.1493 +v 9.7082 1.4067 -8.2770 +v 9.6342 1.4067 -8.2149 +v 8.9032 1.4067 -9.2363 +v 8.8292 1.4067 -9.1742 +v 8.9359 1.4067 -9.0471 +v 9.0099 1.4067 -9.1091 +v 9.8153 1.2410 -8.1493 +v 9.7414 1.2401 -8.0872 +v 9.7082 1.2405 -8.2770 +v 9.6342 1.2421 -8.2149 +v 8.9362 1.2437 -9.0468 +v 8.8292 1.2435 -9.1742 +v 9.0102 1.2420 -9.1089 +v 8.9032 1.2425 -9.2363 +v 9.2412 1.4067 -9.5199 +v 9.3479 1.4067 -9.3927 +v 9.3481 1.2420 -9.3925 +v 9.2412 1.2425 -9.5199 +v 10.0461 1.4067 -8.5606 +v 10.1533 1.4067 -8.4329 +v 10.1533 1.2410 -8.4329 +v 10.0461 1.2405 -8.5606 +v 9.2376 -0.0755 -9.3130 +v 9.2408 0.0495 -9.3091 +v 9.1339 0.0500 -9.4366 +v 9.1306 -0.0750 -9.4405 +v 10.0548 -0.0765 -8.3391 +v 10.0520 0.0485 -8.3424 +v 9.9449 0.0480 -8.4701 +v 9.9476 -0.0770 -8.4669 +v 8.9031 0.2134 -8.3853 +v 8.6869 -0.0549 -7.9926 +v 8.9907 0.3198 -7.9975 +v 9.1192 0.5277 -8.5089 +v 8.7084 -0.0767 -8.0032 +v 8.9246 0.1916 -8.3959 +v 9.3993 0.3084 -7.5942 +v 9.3778 0.3302 -7.5835 +v 9.0969 0.0655 -7.6919 +v 9.1184 0.0436 -7.7026 +v 9.3485 0.6399 -8.0291 +v 9.3269 0.6617 -8.0185 +v 9.5360 0.6159 -7.6971 +v 9.5575 0.5941 -7.7078 +v 9.1408 0.5059 -8.5196 +v 9.3422 0.7639 -8.3905 +v 9.3637 0.7420 -8.4012 +v 9.0507 1.5017 -8.9781 +v 8.9737 1.5017 -9.0699 +v 8.9208 1.5268 -9.0255 +v 8.9978 1.5268 -8.9338 +v 8.5559 -0.1729 -8.5948 +v 8.5246 -0.1580 -8.5686 +v 8.4790 -0.1580 -8.6229 +v 8.5103 -0.1729 -8.6491 +v 8.9802 1.2489 -8.9189 +v 8.9032 1.2489 -9.0107 +v 8.8503 1.2740 -8.9664 +v 8.9274 1.2740 -8.8746 +v 8.8900 1.2015 -8.9996 +v 8.9670 1.2015 -8.9079 +v 8.8371 1.2266 -8.9553 +v 8.9141 1.2266 -8.8635 +v 8.5943 1.2266 -9.2447 +v 8.6075 1.2740 -9.2557 +v 8.6604 1.2489 -9.3001 +v 8.6472 1.2015 -9.2890 +v 9.2098 1.2015 -8.6185 +v 9.2230 1.2489 -8.6296 +v 9.1701 1.2740 -8.5853 +v 9.1569 1.2266 -8.5742 +# 7481 vertices + +vn -0.9963 -0.0483 -0.0716 +vn -1.0000 0.0000 0.0000 +vn -0.9997 -0.0248 0.0000 +vn -0.9978 -0.0657 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -0.0000 0.0000 -1.0000 +vn -0.9963 -0.0483 0.0716 +vn 1.0000 0.0000 -0.0000 +vn -0.9976 -0.0691 -0.0006 +vn -0.9972 -0.0740 0.0044 +vn -0.9978 -0.0585 -0.0318 +vn -0.9985 -0.0550 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.8219 0.5696 +vn 0.0000 1.0000 0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 -0.9972 -0.0745 +vn 0.0000 -1.0000 0.0000 +vn -0.9978 -0.0586 0.0315 +vn -0.9972 -0.0747 -0.0060 +vn -0.0000 0.8219 -0.5696 +vn 0.0000 -0.9972 0.0745 +vn -0.0000 -0.8092 -0.5875 +vn 0.0000 -0.8092 0.5875 +vn 0.0000 0.9968 0.0803 +vn -0.0001 0.9968 0.0803 +vn -0.0001 0.9982 -0.0593 +vn -0.0000 0.9982 -0.0593 +vn -0.9972 -0.0747 -0.0047 +vn -0.9972 -0.0694 -0.0272 +vn -0.9972 -0.0740 0.0077 +vn -0.9972 -0.0694 0.0272 +vn -0.0000 0.9946 -0.1034 +vn 0.0000 0.9982 -0.0593 +vn 0.0000 0.9980 0.0634 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 1.0000 0.0000 +vn -0.1198 0.9926 0.0202 +vn -0.0181 0.8430 -0.5376 +vn -0.0395 0.8691 -0.4930 +vn -0.0263 0.9996 0.0128 +vn 0.1422 0.9898 0.0041 +vn 0.0244 0.8365 0.5474 +vn -0.0243 0.8529 0.5215 +vn -0.9518 0.1435 -0.2712 +vn -0.9882 -0.0000 -0.1529 +vn -0.9882 0.0000 0.1529 +vn 0.0180 -0.8430 0.5376 +vn 0.1118 -0.8730 0.4747 +vn 0.0108 0.8458 -0.5335 +vn 0.0716 0.7912 -0.6074 +vn 0.2586 0.9660 0.0000 +vn -0.0970 0.8030 -0.5881 +vn -0.2585 0.9658 0.0187 +vn 0.0000 0.8209 0.5711 +vn -0.0820 0.7799 0.6205 +vn 0.0813 0.7867 0.6120 +vn 0.0177 -0.8274 0.5613 +vn -0.1940 -0.7247 0.6612 +vn 0.0188 -0.8811 0.4725 +vn -0.1062 -0.8289 0.5492 +vn 0.1978 -0.7388 0.6442 +vn -0.0000 -0.8209 -0.5711 +vn -0.1943 -0.7259 -0.6597 +vn 0.1905 -0.7117 -0.6762 +vn 0.0453 0.0000 -0.9990 +vn 0.0509 -0.0000 -0.9987 +vn 0.0327 0.0000 -0.9995 +vn -0.2538 -0.9673 0.0000 +vn -0.1334 -0.9911 0.0000 +vn 0.0453 -0.0000 0.9990 +vn 0.0327 -0.0000 0.9995 +vn 0.0509 -0.0000 0.9987 +vn 0.3347 0.9423 -0.0000 +vn 0.1961 0.9806 -0.0000 +vn 0.0631 -0.0000 -0.9980 +vn -0.3639 -0.9315 0.0000 +vn 0.0631 -0.0000 0.9980 +vn 0.4594 0.8882 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn 0.9784 -0.2067 0.0000 +vn 0.9784 -0.2069 -0.0000 +vn 0.1637 0.7745 0.6111 +vn -0.9784 0.2067 -0.0000 +vn -0.9784 0.2068 -0.0000 +vn 0.9784 -0.2069 0.0000 +vn 0.9784 -0.2068 -0.0001 +vn 0.2054 0.9718 0.1161 +vn -0.9784 0.2068 -0.0001 +vn 0.9784 -0.2067 -0.0000 +vn 0.1637 0.7745 -0.6111 +vn 0.9784 -0.2068 0.0001 +vn 0.2054 0.9718 -0.1161 +vn -0.9784 0.2068 0.0001 +vn -0.9784 0.2068 0.0000 +vn 0.9784 -0.2068 -0.0000 +vn 0.2054 0.9718 0.1162 +vn 0.9784 -0.2068 0.0000 +vn 0.9784 -0.2067 -0.0001 +vn 0.2054 0.9718 -0.1162 +vn 0.9784 -0.2067 0.0001 +vn 0.1362 0.7798 0.6111 +vn 0.1363 0.7798 0.6111 +vn 0.9851 -0.1722 -0.0000 +vn 0.9851 -0.1721 0.0000 +vn 0.1710 0.9784 0.1162 +vn 0.9851 -0.1722 0.0001 +vn 0.9851 -0.1721 -0.0000 +vn 0.1363 0.7798 -0.6111 +vn 0.1362 0.7798 -0.6111 +vn 0.9851 -0.1722 0.0000 +vn 0.1710 0.9784 -0.1162 +vn 0.9851 -0.1722 -0.0001 +vn 0.0956 0.7858 0.6111 +vn 0.9927 -0.1207 0.0000 +vn 0.1199 0.9860 0.1162 +vn 0.1199 0.9860 0.1161 +vn 0.9927 -0.1207 -0.0000 +vn 0.0956 0.7858 -0.6111 +vn 0.1199 0.9860 -0.1162 +vn 0.1199 0.9860 -0.1161 +vn 0.9927 -0.1207 0.0001 +vn 0.0955 0.7858 -0.6111 +vn 0.9927 -0.1207 -0.0001 +vn 0.0423 0.7905 0.6111 +vn 0.9986 -0.0535 0.0000 +vn 0.0531 0.9918 0.1162 +vn 0.0531 0.9918 0.1161 +vn 0.9986 -0.0535 -0.0000 +vn 0.0423 0.7905 -0.6111 +vn 0.0531 0.9918 -0.1162 +vn 0.0531 0.9918 -0.1161 +vn -0.9927 -0.1208 -0.0000 +vn -0.9927 -0.1207 -0.0000 +vn -0.0956 0.7858 0.6111 +vn 0.9927 0.1207 -0.0000 +vn 0.9927 0.1207 0.0000 +vn -0.9927 -0.1208 0.0001 +vn -0.9927 -0.1207 -0.0001 +vn -0.1199 0.9860 0.1161 +vn 0.9927 0.1207 -0.0001 +vn 0.0000 0.0000 -1.0000 +vn -0.9927 -0.1208 0.0000 +vn -0.9927 -0.1207 0.0000 +vn -0.0956 0.7858 -0.6111 +vn -0.9927 -0.1208 -0.0001 +vn -0.9927 -0.1207 0.0001 +vn -0.1199 0.9860 -0.1161 +vn 0.9927 0.1207 0.0001 +vn -0.0267 0.7911 0.6111 +vn -0.9994 -0.0338 -0.0000 +vn -0.0335 0.9927 0.1162 +vn -0.0335 0.9927 0.1163 +vn -0.9994 -0.0337 -0.0001 +vn -0.9994 -0.0338 0.0000 +vn -0.0267 0.7911 -0.6111 +vn -0.0335 0.9927 -0.1162 +vn -0.0335 0.9927 -0.1163 +vn -0.9994 -0.0337 0.0001 +vn -0.0678 0.7887 0.6111 +vn -0.9963 -0.0856 -0.0000 +vn -0.0850 0.9896 0.1162 +vn -0.9963 -0.0855 -0.0001 +vn -0.9963 -0.0856 0.0001 +vn -0.0678 0.7887 -0.6111 +vn -0.9963 -0.0856 0.0000 +vn -0.0850 0.9896 -0.1162 +vn -0.9963 -0.0856 -0.0001 +vn -0.9963 -0.0855 0.0001 +vn -0.1199 0.9860 0.1162 +vn -0.0955 0.7858 -0.6111 +vn -0.1199 0.9860 -0.1162 +vn -0.9994 -0.0337 0.0000 +vn -0.0335 0.9927 0.1161 +vn -0.9994 -0.0337 -0.0000 +vn -0.0335 0.9927 -0.1161 +vn -0.9927 0.1207 0.0000 +vn -0.9927 0.1207 -0.0000 +vn -0.9927 0.1208 -0.0000 +vn 0.9927 0.1206 -0.0000 +vn 0.9927 0.1208 0.0000 +vn 0.9927 0.1208 -0.0001 +vn 0.0000 -0.0000 -1.0000 +vn 0.9927 0.1208 -0.0000 +vn 0.9927 0.1206 0.0000 +vn 0.9927 0.1208 0.0001 +vn 0.0001 -0.0114 -0.9999 +vn -0.0007 -0.0121 -0.9999 +vn 0.0052 -0.0096 -0.9999 +vn -0.0000 -0.0090 -1.0000 +vn -1.0000 0.0000 0.0002 +vn -0.5696 0.8219 0.0002 +vn 0.0745 -0.9972 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.0051 -0.0096 -0.9999 +vn 0.0010 -0.0123 -0.9999 +vn 0.5696 0.8219 -0.0001 +vn -0.0745 -0.9972 -0.0000 +vn 0.9999 -0.0110 -0.0000 +vn 0.9999 -0.0109 -0.0014 +vn 0.5875 -0.8092 -0.0009 +vn -0.5875 -0.8092 0.0009 +vn -0.5875 -0.8092 0.0006 +vn -0.9999 0.0110 0.0010 +vn -0.9999 0.0111 -0.0003 +vn -0.0803 0.9968 -0.0000 +vn -0.0803 0.9968 -0.0001 +vn 0.0593 0.9982 -0.0000 +vn 0.0008 -0.0123 -0.9999 +vn 0.0045 -0.0114 -0.9999 +vn 0.9999 -0.0102 -0.0001 +vn 0.9999 -0.0103 -0.0000 +vn 0.9999 -0.0102 -0.0002 +vn -0.9999 0.0103 -0.0001 +vn -0.9999 0.0103 -0.0002 +vn -0.9999 0.0102 0.0004 +vn -0.0012 -0.0121 -0.9999 +vn -0.0044 -0.0113 -0.9999 +vn -1.0000 -0.0000 -0.0001 +vn 0.1034 0.9946 -0.0000 +vn -0.0634 0.9980 -0.0000 +vn 1.0000 -0.0000 -0.0002 +vn -0.0745 -0.9972 0.0000 +vn -0.0000 -1.0000 0.0000 +vn 0.0001 -0.0000 -1.0000 +vn 0.0000 1.0000 -0.0000 +vn -0.5808 0.7502 0.3160 +vn -0.6749 0.7133 -0.1892 +vn -0.6402 0.7454 -0.1856 +vn -0.5286 0.8038 0.2731 +vn -0.1688 0.7582 0.6298 +vn -0.1539 0.8041 0.5743 +vn 0.3260 0.7582 0.5647 +vn 0.2973 0.8041 0.5149 +vn 0.6298 0.7582 0.1688 +vn 0.5743 0.8041 0.1539 +vn 0.5647 0.7582 -0.3260 +vn 0.5149 0.8041 -0.2973 +vn 0.1688 0.7582 -0.6298 +vn 0.1404 0.7962 -0.5885 +vn -0.3673 0.7221 -0.5862 +vn -0.3538 0.7376 -0.5751 +vn -0.7497 0.6544 0.0987 +vn -0.5999 0.6544 -0.4603 +vn -0.4603 0.6544 0.5999 +vn 0.0987 0.6544 0.7497 +vn 0.5999 0.6544 0.4603 +vn 0.7497 0.6544 -0.0987 +vn 0.4603 0.6544 -0.5999 +vn -0.0987 0.6544 -0.7497 +vn -0.9998 0.0000 0.0186 +vn -0.9998 -0.0000 0.0186 +vn -0.6088 0.0000 0.7934 +vn 0.1305 0.0000 0.9914 +vn 0.7934 -0.0000 0.6088 +vn 0.7934 0.0000 0.6088 +vn 0.9914 0.0000 -0.1305 +vn 0.6088 0.0000 -0.7934 +vn -0.2276 0.0000 -0.9738 +vn -0.7934 0.0000 -0.6088 +vn -0.2844 0.9378 -0.1991 +vn -0.4063 0.8683 -0.2845 +vn 0.0686 0.9965 0.0480 +vn -0.4506 0.8351 -0.3155 +vn -0.8182 0.0481 -0.5729 +vn 0.5736 0.0036 -0.8191 +vn 0.5726 0.0579 -0.8178 +vn -0.8191 0.0053 -0.5736 +vn -0.8126 0.1266 -0.5690 +vn -0.5736 0.0034 0.8191 +vn -0.5735 -0.0138 0.8191 +vn 0.8191 0.0049 0.5736 +vn 0.8175 -0.0623 0.5725 +vn 0.5728 -0.0511 -0.8181 +vn -0.8136 -0.1166 -0.5697 +vn -0.5735 0.0207 0.8190 +vn 0.8170 0.0724 0.5721 +vn -0.5736 0.0036 0.8191 +vn -0.5726 0.0579 0.8178 +vn 0.5736 0.0034 -0.8192 +vn 0.5735 -0.0138 -0.8191 +vn 0.8176 -0.0623 0.5724 +vn -0.5728 -0.0511 0.8181 +vn -0.8135 -0.1166 -0.5697 +vn 0.5735 0.0207 -0.8190 +vn -0.8235 0.4943 0.2784 +vn -0.7949 0.5296 0.2960 +vn -0.2250 0.5263 0.8200 +vn -0.2255 0.4770 0.8495 +vn -0.9099 0.2560 0.3265 +vn -0.2479 0.2511 0.9357 +vn -0.9314 0.0324 0.3627 +vn -0.2578 0.0300 0.9657 +vn -0.9351 0.0077 0.3543 +vn -0.2588 0.0000 0.9659 +vn -0.9386 0.0000 0.3449 +vn -0.9560 0.1873 -0.2259 +vn -0.9476 0.1711 -0.2698 +vn -0.9806 0.0934 -0.1726 +vn -0.9828 0.0501 -0.1779 +vn -0.9753 0.1168 -0.1876 +vn -0.9710 0.1469 -0.1887 +vn 0.0592 0.4877 -0.8710 +vn 0.0776 0.5413 -0.8372 +vn -0.4447 0.1942 -0.8744 +vn -0.4185 0.1747 -0.8913 +vn 0.1004 0.2548 -0.9618 +vn -0.3822 0.0939 -0.9193 +vn 0.1305 0.0324 -0.9909 +vn -0.3886 0.0526 -0.9199 +vn 0.1253 0.0041 -0.9921 +vn -0.4112 0.1412 -0.9005 +vn 0.1192 0.0119 -0.9928 +vn -0.4203 0.2169 -0.8811 +vn 0.7621 0.4770 -0.4377 +vn 0.7338 0.5263 -0.4296 +vn 0.8396 0.2511 -0.4816 +vn 0.8661 0.0300 -0.4989 +vn 0.8660 0.0000 -0.5000 +vn 0.8553 0.4643 0.2300 +vn 0.8293 0.5137 0.2200 +vn 0.9370 0.2417 0.2522 +vn 0.9655 0.0277 0.2591 +vn 0.9659 -0.0000 0.2588 +vn 0.4435 0.4643 0.7666 +vn 0.4271 0.5137 0.7441 +vn 0.4862 0.2417 0.8398 +vn 0.5001 0.0277 0.8655 +vn 0.5000 0.0000 0.8660 +vn -0.9391 -0.1373 -0.3151 +vn -0.9949 -0.1011 0.0000 +vn -0.9965 -0.0835 0.0000 +vn -0.9670 -0.0794 -0.2419 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 -0.7146 -0.6995 +vn 0.0000 0.0030 1.0000 +vn 0.0000 0.0510 0.9987 +vn 0.0000 -0.3074 0.9516 +vn -0.0000 0.9651 -0.2619 +vn -0.0000 0.0030 -1.0000 +vn -0.0000 0.0510 -0.9987 +vn -0.0000 0.3594 -0.9332 +vn -0.9391 -0.1373 0.3151 +vn -0.9670 -0.0794 0.2419 +vn 0.0000 -0.7146 0.6995 +vn 0.0000 0.9651 0.2619 +vn -0.9996 -0.0298 -0.0000 +vn -0.9784 -0.0790 -0.1912 +vn 0.0000 0.3594 0.9332 +vn -0.0000 -0.3074 -0.9516 +vn -0.9784 -0.0790 0.1912 +vn 0.9391 -0.1373 0.3151 +vn 0.9949 -0.1011 -0.0000 +vn 0.9965 -0.0835 -0.0000 +vn 0.9670 -0.0794 0.2419 +vn 0.9391 -0.1373 -0.3151 +vn 0.9670 -0.0794 -0.2419 +vn 0.9996 -0.0298 -0.0000 +vn 0.9784 -0.0790 0.1912 +vn 0.9784 -0.0790 -0.1912 +vn -0.0000 0.9780 -0.2086 +vn -0.0000 -0.9780 -0.2086 +vn 0.0000 0.9780 0.2086 +vn 0.0000 -0.9780 0.2086 +vn 0.5107 0.0135 0.8597 +vn 0.1707 0.0283 0.9849 +vn -0.9257 0.3783 -0.0000 +vn -0.9997 -0.0264 -0.0000 +vn 0.5107 0.0135 -0.8597 +vn 0.1707 0.0283 -0.9849 +vn 0.0006 -0.2982 0.9545 +vn -0.3776 0.9260 -0.0000 +vn 0.0006 -0.2982 -0.9545 +vn -0.0311 -0.5235 0.8515 +vn -0.0550 0.9985 -0.0000 +vn -0.0311 -0.5235 -0.8515 +vn -0.5107 0.0135 -0.8596 +vn -0.1707 0.0283 -0.9849 +vn 0.9257 0.3783 0.0000 +vn 0.9997 -0.0263 -0.0000 +vn -0.5107 0.0135 0.8596 +vn -0.1707 0.0283 0.9849 +vn -0.0006 -0.2982 -0.9545 +vn 0.3776 0.9260 0.0000 +vn -0.0006 -0.2982 0.9545 +vn 0.0311 -0.5235 -0.8515 +vn 0.0550 0.9985 0.0000 +vn 0.0311 -0.5235 0.8515 +vn -1.0000 -0.0007 0.0000 +vn 1.0000 0.0007 -0.0000 +vn 1.0000 -0.0000 0.0000 +vn -0.0020 1.0000 0.0024 +vn -0.0025 1.0000 0.0035 +vn -0.0024 1.0000 -0.0026 +vn -0.0021 1.0000 -0.0025 +vn -0.0045 1.0000 -0.0045 +vn -0.0040 1.0000 0.0047 +vn -0.0017 1.0000 -0.0023 +vn -0.0023 1.0000 -0.0026 +vn -0.0020 1.0000 0.0023 +vn -0.0026 1.0000 0.0041 +vn -0.0045 1.0000 -0.0046 +vn -0.0040 1.0000 0.0046 +vn -1.0000 -0.0009 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -1.0000 0.0000 -0.0000 +vn 1.0000 0.0009 -0.0000 +vn 0.0014 -1.0000 -0.0061 +vn 0.0038 -1.0000 0.0033 +vn -0.0089 -1.0000 -0.0000 +vn 0.0014 -1.0000 0.0061 +vn 0.0038 -1.0000 -0.0033 +vn 0.0000 -1.0000 -0.0093 +vn -0.0014 -1.0000 0.0061 +vn -0.0038 -1.0000 -0.0033 +vn 0.0089 -1.0000 -0.0000 +vn -0.0014 -1.0000 -0.0061 +vn -0.0038 -1.0000 0.0033 +vn 0.0000 -1.0000 0.0093 +vn -0.5696 0.8219 0.0003 +vn -0.5696 0.8219 0.0000 +vn 0.0373 -0.9993 -0.0000 +vn 0.0373 -0.9993 0.0000 +vn -0.0019 -0.0054 -1.0000 +vn -0.0025 -0.0063 -1.0000 +vn 0.5696 0.8219 -0.0000 +vn -0.0373 -0.9993 -0.0000 +vn 0.0025 -0.0063 -1.0000 +vn 0.0019 -0.0055 -1.0000 +vn 0.9999 -0.0109 -0.0016 +vn 0.5875 -0.8092 -0.0008 +vn -0.5875 -0.8092 0.0008 +vn -0.9999 0.0110 0.0013 +vn -0.9999 0.0111 -0.0004 +vn -0.0747 0.9972 -0.0000 +vn -0.0106 0.9999 -0.0000 +vn -0.0105 0.9999 -0.0001 +vn 0.0740 0.9973 0.0000 +vn 0.0013 -0.0121 -0.9999 +vn -0.9999 0.0102 0.0005 +vn -0.0017 -0.0120 -0.9999 +vn 0.0518 0.9987 0.0000 +vn 0.0345 0.9994 0.0000 +vn 0.0814 0.9967 0.0000 +vn -0.0105 0.9999 0.0000 +vn -0.0719 0.9974 0.0000 +vn -0.0211 0.9998 0.0000 +vn -0.0317 0.9995 0.0000 +vn 1.0000 -0.0000 -0.0001 +vn -1.0000 -0.0018 -0.0000 +vn 1.0000 0.0018 -0.0000 +vn -1.0000 -0.0018 0.0000 +vn 0.5758 0.5781 -0.5781 +vn -0.5789 0.5766 -0.5766 +vn -0.5789 0.5766 0.5766 +vn 0.5758 0.5781 0.5781 +vn 0.0002 1.0000 -0.0042 +vn 0.0002 1.0000 0.0041 +vn 0.0002 1.0000 -0.0041 +vn 0.0003 1.0000 0.0042 +vn 0.7071 0.0013 -0.7071 +vn -0.7071 -0.0013 -0.7071 +vn -0.7071 -0.0013 0.7071 +vn 0.7071 0.0013 0.7071 +vn -0.9873 -0.0009 -0.1589 +vn -0.0555 0.0085 0.9984 +vn 0.7071 -0.0064 -0.7071 +vn 0.0405 -0.0084 0.9991 +vn 0.9892 0.0009 -0.1463 +vn -0.7071 0.0062 -0.7071 +vn 0.9876 0.0010 0.1571 +vn 0.0395 -0.0084 -0.9992 +vn -0.7071 0.0062 0.7071 +vn -0.0603 0.0086 -0.9981 +vn -0.9967 -0.0002 0.0813 +vn 0.7071 -0.0064 0.7071 +vn -0.1074 0.0000 -0.9942 +vn -0.1316 0.0000 -0.9913 +vn -0.0146 0.1009 -0.9948 +vn -0.0000 0.1040 -0.9946 +vn -0.0146 -0.1009 -0.9948 +vn -0.0000 -0.1040 -0.9946 +vn -0.9952 0.0976 0.0000 +vn -1.0000 0.0016 0.0053 +vn -0.9952 -0.0832 0.0507 +vn -0.9951 -0.0819 0.0553 +vn 0.1094 0.0048 0.9940 +vn 0.0000 0.0329 0.9995 +vn 0.0147 0.0360 0.9992 +vn 0.1316 0.0054 0.9913 +vn 0.0121 -0.0293 0.9995 +vn 0.0000 -0.0271 0.9996 +vn 1.0000 0.0007 0.0022 +vn 0.9991 0.0419 -0.0000 +vn 0.9991 -0.0361 0.0220 +vn 0.9991 -0.0356 0.0240 +vn 0.1073 0.0000 -0.9942 +vn 0.0146 0.1009 -0.9948 +vn 0.1316 0.0000 -0.9913 +vn 0.0146 -0.1009 -0.9948 +vn 1.0000 0.0000 0.0000 +vn 1.0000 0.0016 0.0053 +vn 0.9952 0.0976 0.0000 +vn 0.9952 0.0976 -0.0000 +vn 0.9952 -0.0832 0.0507 +vn 0.9951 -0.0819 0.0553 +vn -0.1094 0.0048 0.9940 +vn -0.1316 0.0054 0.9913 +vn -0.0147 0.0360 0.9992 +vn -0.0121 -0.0293 0.9995 +vn -1.0000 -0.0000 0.0000 +vn -0.9991 0.0419 0.0000 +vn -1.0000 0.0007 0.0022 +vn -0.9991 -0.0361 0.0220 +vn -0.9991 -0.0356 0.0240 +vn -0.1074 -0.0000 0.9942 +vn 0.0000 0.1040 0.9946 +vn -0.0146 0.1009 0.9948 +vn -0.1316 -0.0000 0.9913 +vn -0.0146 -0.1009 0.9948 +vn 0.0000 -0.1040 0.9946 +vn -1.0000 0.0016 -0.0053 +vn -0.9952 0.0976 -0.0000 +vn -0.9952 -0.0832 -0.0507 +vn -0.9951 -0.0819 -0.0553 +vn 0.1094 0.0048 -0.9940 +vn 0.1316 0.0054 -0.9913 +vn 0.0147 0.0360 -0.9992 +vn -0.0000 0.0329 -0.9995 +vn 0.0121 -0.0293 -0.9995 +vn -0.0000 -0.0271 -0.9996 +vn 1.0000 0.0007 -0.0022 +vn 0.9991 -0.0361 -0.0220 +vn 0.9991 -0.0356 -0.0240 +vn -0.0716 -0.0483 0.9963 +vn 0.0000 -0.0248 0.9997 +vn 0.0000 -0.0657 0.9978 +vn 0.0716 -0.0483 0.9963 +vn -0.0006 -0.0691 0.9976 +vn 0.0044 -0.0740 0.9972 +vn -0.0318 -0.0585 0.9978 +vn 0.0000 -0.0550 0.9985 +vn 0.0315 -0.0586 0.9978 +vn -0.0060 -0.0747 0.9972 +vn -1.0000 -0.0000 0.0001 +vn -0.5875 -0.8092 0.0001 +vn -0.5875 -0.8092 0.0000 +vn 0.5875 -0.8092 -0.0000 +vn 0.0804 0.9968 -0.0000 +vn 0.0803 0.9968 0.0001 +vn -0.0593 0.9982 0.0001 +vn -0.0593 0.9982 -0.0000 +vn -0.0047 -0.0747 0.9972 +vn -0.0272 -0.0694 0.9972 +vn 0.0077 -0.0740 0.9972 +vn 0.0272 -0.0694 0.9972 +vn -0.1034 0.9946 -0.0000 +vn 0.0803 0.9968 -0.0000 +vn 0.0634 0.9980 -0.0000 +vn 0.0128 0.9962 -0.0863 +vn 0.0042 0.9899 -0.1419 +vn 0.5477 0.8361 -0.0330 +vn 0.4977 0.8674 0.0000 +vn -0.2683 0.1436 0.9526 +vn -0.1529 0.0000 0.9882 +vn 0.1529 0.0000 0.9882 +vn -0.5290 0.8485 -0.0127 +vn -0.6020 0.7941 -0.0839 +vn -0.0000 0.9660 -0.2586 +vn -0.4518 0.8910 0.0452 +vn 0.6066 0.7895 -0.0936 +vn 0.5599 -0.8285 0.0020 +vn 0.6521 -0.7323 0.1960 +vn -0.5694 -0.8218 0.0196 +vn -0.6507 -0.7335 0.1963 +vn -0.9990 -0.0000 -0.0453 +vn -0.9987 -0.0000 -0.0509 +vn -0.9995 -0.0000 -0.0327 +vn 0.0000 -0.9673 0.2538 +vn 0.0000 -0.9911 0.1334 +vn 0.9990 -0.0000 -0.0453 +vn 0.9995 -0.0000 -0.0327 +vn 0.9987 -0.0000 -0.0509 +vn -0.0000 0.9423 -0.3347 +vn -0.0000 0.9806 -0.1961 +vn -0.9980 -0.0000 -0.0631 +vn 0.0000 -0.9315 0.3639 +vn 0.9980 -0.0000 -0.0631 +vn -0.0000 0.8882 -0.4594 +vn 0.0000 -0.2067 -0.9784 +vn -0.0000 -0.2069 -0.9784 +vn 0.6111 0.7745 -0.1637 +vn -0.0000 0.2067 0.9784 +vn 0.0000 0.2068 0.9784 +vn 0.0000 -0.2069 -0.9784 +vn -0.0001 -0.2068 -0.9784 +vn 0.1161 0.9718 -0.2054 +vn 0.1162 0.9718 -0.2054 +vn -0.0000 0.2068 0.9784 +vn -0.0001 0.2068 0.9784 +vn -0.0000 -0.2067 -0.9784 +vn -0.6111 0.7745 -0.1637 +vn 0.0001 -0.2068 -0.9784 +vn -0.1161 0.9718 -0.2054 +vn -0.1162 0.9718 -0.2054 +vn 0.0001 0.2068 0.9784 +vn 0.6110 0.7745 -0.1637 +vn -0.0000 -0.2068 -0.9784 +vn 0.0000 -0.2068 -0.9784 +vn 0.6110 0.7798 -0.1362 +vn 0.6111 0.7798 -0.1363 +vn -0.0000 -0.1721 -0.9851 +vn 0.0000 -0.1721 -0.9851 +vn 0.1162 0.9784 -0.1709 +vn 0.1162 0.9784 -0.1710 +vn 0.0001 -0.1721 -0.9851 +vn -0.6111 0.7798 -0.1363 +vn -0.6111 0.7798 -0.1362 +vn -0.1162 0.9784 -0.1709 +vn -0.1162 0.9784 -0.1710 +vn -0.0001 -0.1721 -0.9851 +vn 0.6111 0.7858 -0.0956 +vn -0.0000 -0.1207 -0.9927 +vn 0.0000 -0.1207 -0.9927 +vn 0.1162 0.9860 -0.1199 +vn 0.1161 0.9860 -0.1199 +vn -0.0001 -0.1207 -0.9927 +vn -0.6111 0.7858 -0.0956 +vn -0.1162 0.9860 -0.1199 +vn -0.1161 0.9860 -0.1199 +vn 0.0001 -0.1207 -0.9927 +vn 0.6111 0.7858 -0.0955 +vn -0.6111 0.7858 -0.0955 +vn 0.6111 0.7905 -0.0423 +vn 0.0000 -0.0535 -0.9986 +vn 0.0000 -0.0534 -0.9986 +vn 0.1162 0.9918 -0.0531 +vn 0.1161 0.9918 -0.0531 +vn -0.6111 0.7905 -0.0423 +vn -0.0000 -0.0534 -0.9986 +vn -0.0000 -0.0535 -0.9986 +vn -0.1162 0.9918 -0.0531 +vn -0.1161 0.9918 -0.0531 +vn 0.6110 0.7908 0.0353 +vn 0.0000 -0.0337 0.9994 +vn 0.1162 0.9922 0.0442 +vn 0.1161 0.9922 0.0442 +vn -0.0000 -0.0337 0.9994 +vn -0.6110 0.7908 0.0353 +vn -0.1162 0.9922 0.0442 +vn -0.1161 0.9922 0.0442 +vn 0.6110 0.7858 -0.0956 +vn 0.0000 0.1207 0.9927 +vn -0.0000 0.1207 0.9927 +vn -0.9942 -0.0000 0.1074 +vn -0.9913 0.0000 0.1316 +vn -0.9948 0.1009 0.0146 +vn -0.9946 0.1040 0.0000 +vn -0.9948 -0.1009 0.0146 +vn -0.9946 -0.1040 0.0000 +vn 0.0000 0.0976 0.9952 +vn 0.0053 0.0016 1.0000 +vn 0.0507 -0.0832 0.9952 +vn 0.0553 -0.0819 0.9951 +vn 0.9940 0.0048 -0.1094 +vn 0.9995 0.0329 -0.0000 +vn 0.9992 0.0360 -0.0147 +vn 0.9913 0.0054 -0.1316 +vn 0.9995 -0.0293 -0.0121 +vn 0.9996 -0.0271 -0.0000 +vn 0.0022 0.0007 -1.0000 +vn -0.0000 0.0419 -0.9991 +vn 0.0220 -0.0361 -0.9991 +vn 0.0240 -0.0356 -0.9991 +vn 0.9942 -0.0000 0.1074 +vn 0.9946 0.1040 -0.0000 +vn 0.9948 0.1009 0.0146 +vn 0.9913 0.0000 0.1316 +vn 0.9948 -0.1009 0.0146 +vn 0.9946 -0.1040 -0.0000 +vn -0.0000 0.0000 1.0000 +vn -0.0053 0.0016 1.0000 +vn -0.0000 0.0976 0.9952 +vn -0.0507 -0.0832 0.9952 +vn -0.0553 -0.0819 0.9951 +vn -0.9940 0.0048 -0.1094 +vn -0.9913 0.0054 -0.1316 +vn -0.9992 0.0360 -0.0147 +vn -0.9995 0.0329 0.0000 +vn -0.9995 -0.0293 -0.0121 +vn -0.9996 -0.0271 0.0000 +vn -0.0022 0.0007 -1.0000 +vn -0.0220 -0.0361 -0.9991 +vn -0.0240 -0.0356 -0.9991 +vn -0.1073 -0.0000 0.9942 +vn -1.0000 0.0016 -0.0052 +vn 0.1074 -0.0000 0.9942 +vn 0.1316 0.0000 0.9913 +vn 0.0146 0.1009 0.9948 +vn 0.0146 -0.1009 0.9948 +vn 1.0000 0.0016 -0.0052 +vn 0.9952 -0.0832 -0.0507 +vn 0.9951 -0.0819 -0.0553 +vn -0.1094 0.0048 -0.9940 +vn -0.0147 0.0360 -0.9992 +vn -0.1316 0.0054 -0.9913 +vn -0.0121 -0.0293 -0.9995 +vn -1.0000 0.0007 -0.0022 +vn -0.9991 -0.0361 -0.0220 +vn -0.9991 -0.0356 -0.0240 +vn 0.1316 -0.0000 0.9913 +vn 1.0000 0.0016 -0.0053 +vn 0.1073 -0.0000 0.9942 +vn -0.1316 0.0000 0.9913 +vn -0.1226 0.3261 -0.9374 +vn -0.3988 0.4312 -0.8094 +vn -0.3929 0.4468 -0.8037 +vn -0.1739 0.3999 -0.8999 +vn -0.3707 -0.8424 -0.3910 +vn 0.3330 -0.7033 -0.6280 +vn -0.8537 0.1474 0.4995 +vn -0.8348 0.1876 0.5176 +vn -0.9273 -0.1212 0.3541 +vn 0.3707 0.8424 0.3910 +vn 0.5816 0.7751 0.2469 +vn 0.8559 -0.1423 -0.4972 +vn 0.8726 -0.1017 -0.4778 +vn 0.9309 0.1676 -0.3245 +vn -0.6613 0.4174 -0.6233 +vn -0.5875 0.4700 -0.6588 +vn -0.8628 -0.5007 0.0693 +vn 0.1339 0.8509 0.5079 +vn -0.3741 0.4937 -0.7851 +vn -0.2212 0.4135 -0.8832 +vn -0.6644 0.4379 0.6056 +vn 0.6994 -0.3968 -0.5944 +vn -0.5481 0.4689 -0.6926 +vn -0.9988 0.0156 -0.0466 +vn -0.9862 0.1651 -0.0150 +vn -0.9953 0.0915 -0.0307 +vn -0.9988 -0.0000 -0.0498 +vn 0.0000 0.9258 0.3781 +vn 0.9976 0.0206 -0.0656 +vn 0.9962 0.0872 -0.0079 +vn 0.9969 0.0767 -0.0171 +vn 0.9965 -0.0000 -0.0833 +vn -0.0000 -0.9018 -0.4321 +vn 1.0000 0.0007 0.0076 +vn 0.9998 -0.0186 0.0077 +vn 0.9998 0.0198 0.0076 +vn 0.0331 -0.0088 -0.9994 +vn 0.0331 -0.0087 -0.9994 +vn 0.0331 0.0398 -0.9987 +vn 0.0330 -0.0572 -0.9978 +vn -1.0000 -0.0027 -0.0076 +vn -0.9973 0.0732 -0.0076 +vn -0.9969 -0.0778 -0.0076 +vn -0.0331 -0.0082 0.9994 +vn -0.0331 0.0223 0.9992 +vn -0.0331 -0.0386 0.9987 +vn 0.9996 0.0261 0.0077 +vn 0.9994 0.0330 0.0077 +vn 0.9998 0.0191 0.0076 +vn 0.0331 -0.0008 -0.9995 +vn 0.0331 -0.0040 -0.9994 +vn 0.0329 -0.1027 -0.9942 +vn 0.0329 0.0981 -0.9946 +vn -0.9997 -0.0242 -0.0077 +vn -0.9997 -0.0244 -0.0077 +vn -0.9997 0.0217 -0.0076 +vn -0.9975 -0.0703 -0.0076 +vn -0.0331 0.0059 0.9994 +vn -0.0331 0.0014 0.9995 +vn -0.0327 0.1451 0.9889 +vn -0.0328 -0.1381 0.9899 +vn 0.0356 0.9994 0.0003 +vn 0.0318 0.9995 0.0002 +vn -0.0845 0.9964 -0.0006 +vn 0.1512 0.9885 0.0012 +vn 0.0329 0.0000 -0.9995 +vn 0.0332 -0.0000 -0.9994 +vn 0.1565 -0.0044 -0.9877 +vn -0.0908 0.0044 -0.9959 +vn -0.0329 -0.9995 -0.0003 +vn -0.0347 -0.9994 -0.0003 +vn 0.0210 -0.9998 0.0002 +vn -0.0884 -0.9961 -0.0007 +vn -0.0331 -0.0000 0.9995 +vn -0.0327 -0.0000 0.9995 +vn -0.1970 0.0059 0.9804 +vn 0.1321 -0.0059 0.9912 +vn 0.0352 0.9994 0.0003 +vn 0.0314 0.9995 0.0002 +vn -0.0912 0.9958 -0.0007 +vn 0.1577 0.9875 0.0012 +vn 0.0321 0.0000 -0.9995 +vn 0.0316 0.0001 -0.9995 +vn -0.1315 0.0059 -0.9913 +vn 0.1944 -0.0058 -0.9809 +vn -0.0326 -0.9995 -0.0003 +vn -0.0345 -0.9994 -0.0003 +vn 0.0277 -0.9996 0.0002 +vn -0.0950 -0.9955 -0.0007 +vn -0.0321 -0.0000 0.9995 +vn -0.0325 -0.0000 0.9995 +vn 0.0899 -0.0044 0.9959 +vn -0.1540 0.0043 0.9881 +vn 1.0000 0.0016 0.0077 +vn 1.0000 0.0017 0.0077 +vn 0.9996 0.0274 0.0077 +vn 0.9997 -0.0241 0.0077 +vn 0.0331 -0.0037 -0.9994 +vn 0.0331 -0.0604 -0.9976 +vn 0.0331 0.0531 -0.9980 +vn -1.0000 0.0017 -0.0077 +vn -1.0000 0.0016 -0.0077 +vn -0.9996 0.0274 -0.0076 +vn -0.9997 -0.0241 -0.0076 +vn -0.0331 0.0063 0.9994 +vn -0.0329 0.1034 0.9941 +vn -0.0330 -0.0911 0.9953 +vn -0.0330 -0.0910 0.9953 +vn 1.0000 -0.0034 0.0076 +vn 1.0000 -0.0030 0.0076 +vn 0.9986 0.0519 0.0077 +vn 0.9983 -0.0582 0.0077 +vn 0.0331 -0.0079 -0.9994 +vn 0.0331 -0.0081 -0.9994 +vn 0.0328 0.1300 -0.9910 +vn 0.0327 -0.1455 -0.9888 +vn -1.0000 -0.0001 -0.0077 +vn -1.0000 -0.0002 -0.0077 +vn -1.0000 0.0028 -0.0076 +vn -1.0000 -0.0031 -0.0076 +vn -0.0331 0.0055 0.9994 +vn -0.0331 0.0053 0.9994 +vn -0.0329 -0.0873 0.9956 +vn -0.0329 0.0979 0.9947 +vn 1.0000 -0.0012 0.0077 +vn 0.9981 0.0614 0.0076 +vn 0.9981 -0.0614 0.0076 +vn 0.0330 -0.0329 -0.9989 +vn 0.0331 0.0217 -0.9992 +vn 0.0329 -0.0874 -0.9956 +vn -1.0000 0.0001 -0.0076 +vn -0.9999 -0.0068 -0.0076 +vn -0.9999 0.0068 -0.0076 +vn -0.0330 -0.0329 0.9989 +vn -0.0331 0.0217 0.9992 +vn -0.0329 -0.0874 0.9956 +vn -0.0330 -0.0874 0.9956 +vn 1.0000 0.0007 0.0077 +vn -0.0326 -0.9995 -0.0002 +vn -0.0346 -0.9994 -0.0003 +vn 1.0000 0.0016 0.0076 +vn 1.0000 0.0017 0.0076 +vn 1.0000 -0.0034 0.0077 +vn 1.0000 -0.0030 0.0077 +vn -1.0000 0.0001 -0.0077 +vn 0.9998 -0.0187 0.0077 +vn 0.9981 -0.0614 0.0077 +vn 0.9983 -0.0581 0.0077 +vn 0.0330 -0.0079 -0.9994 +vn 0.0330 -0.0081 -0.9994 +vn 0.9981 0.0615 0.0076 +vn 0.9981 -0.0615 0.0076 +vn -0.0331 -0.0329 0.9989 +vn 0.0353 0.9994 0.0003 +vn -0.9996 0.0274 -0.0077 +vn -0.9997 -0.0241 -0.0077 +vn -0.9999 -0.0068 -0.0077 +vn -1.0000 -0.0027 -0.0077 +vn -0.9997 0.0217 -0.0077 +vn -0.9975 -0.0703 -0.0077 +vn -0.9996 0.0274 -0.0075 +vn -0.9997 -0.0241 -0.0075 +vn -1.0000 -0.0001 -0.0078 +vn -1.0000 -0.0002 -0.0078 +vn -1.0000 -0.0032 -0.0076 +vn 0.9981 0.0615 0.0077 +vn -0.9999 -0.0069 -0.0076 +vn -0.9999 0.0068 -0.0077 +vn 0.9996 0.0260 0.0076 +vn 0.9996 0.0261 0.0076 +vn -0.9997 0.0217 -0.0075 +vn -1.0000 0.0028 -0.0075 +vn -1.0000 -0.0031 -0.0075 +vn -0.0076 0.0007 1.0000 +vn -0.0077 -0.0186 0.9998 +vn -0.0076 0.0198 0.9998 +vn 0.9994 -0.0088 0.0331 +vn 0.9994 -0.0087 0.0331 +vn 0.9987 0.0398 0.0331 +vn 0.9987 0.0398 0.0330 +vn 0.9978 -0.0572 0.0331 +vn 0.0076 -0.0027 -1.0000 +vn 0.0076 0.0732 -0.9973 +vn 0.0076 -0.0778 -0.9969 +vn -0.9994 -0.0082 -0.0331 +vn -0.9992 0.0223 -0.0331 +vn -0.9987 -0.0386 -0.0331 +vn -0.0077 0.0261 0.9996 +vn -0.0077 0.0330 0.9994 +vn -0.0076 0.0191 0.9998 +vn 0.9995 -0.0008 0.0331 +vn 0.9994 -0.0040 0.0331 +vn 0.9942 -0.1027 0.0329 +vn 0.9942 -0.1027 0.0330 +vn 0.9946 0.0981 0.0330 +vn 0.0077 -0.0242 -0.9997 +vn 0.0077 -0.0244 -0.9997 +vn 0.0076 0.0217 -0.9997 +vn 0.0076 -0.0703 -0.9975 +vn -0.9994 0.0059 -0.0331 +vn -0.9994 0.0014 -0.0331 +vn -0.9889 0.1451 -0.0327 +vn -0.9899 -0.1381 -0.0328 +vn -0.0003 0.9994 0.0356 +vn -0.0002 0.9995 0.0318 +vn 0.0006 0.9964 -0.0845 +vn -0.0012 0.9885 0.1512 +vn 0.9995 0.0000 0.0329 +vn 0.9994 -0.0000 0.0332 +vn 0.9877 -0.0044 0.1565 +vn 0.9959 0.0044 -0.0908 +vn 0.0003 -0.9995 -0.0329 +vn 0.0003 -0.9994 -0.0347 +vn -0.0002 -0.9998 0.0210 +vn 0.0007 -0.9961 -0.0884 +vn -0.9995 -0.0001 -0.0331 +vn -0.9995 -0.0001 -0.0327 +vn -0.9804 0.0059 -0.1970 +vn -0.9912 -0.0059 0.1321 +vn -0.0003 0.9994 0.0352 +vn -0.0002 0.9995 0.0314 +vn 0.0007 0.9958 -0.0912 +vn -0.0012 0.9875 0.1577 +vn 0.9995 0.0001 0.0321 +vn 0.9995 0.0001 0.0316 +vn 0.9913 0.0059 -0.1315 +vn 0.9809 -0.0058 0.1944 +vn 0.0003 -0.9995 -0.0326 +vn 0.0003 -0.9994 -0.0345 +vn -0.0002 -0.9996 0.0277 +vn 0.0007 -0.9955 -0.0950 +vn -0.9995 -0.0000 -0.0321 +vn -0.9995 -0.0000 -0.0325 +vn -0.9959 -0.0044 0.0899 +vn -0.9881 0.0043 -0.1540 +vn -0.0076 0.0016 1.0000 +vn -0.0076 0.0017 1.0000 +vn -0.0077 0.0274 0.9996 +vn -0.0077 -0.0241 0.9997 +vn 0.9994 -0.0037 0.0331 +vn 0.9976 -0.0604 0.0330 +vn 0.9980 0.0531 0.0330 +vn 0.0077 0.0017 -1.0000 +vn 0.0077 0.0016 -1.0000 +vn 0.0076 0.0274 -0.9996 +vn 0.0076 -0.0241 -0.9997 +vn -0.9994 0.0063 -0.0330 +vn -0.9941 0.1034 -0.0329 +vn -0.9953 -0.0910 -0.0330 +vn -0.0076 -0.0034 1.0000 +vn -0.0076 -0.0030 1.0000 +vn -0.0077 0.0519 0.9986 +vn -0.0077 -0.0582 0.9983 +vn 0.9994 -0.0079 0.0331 +vn 0.9994 -0.0081 0.0331 +vn 0.9910 0.1300 0.0328 +vn 0.9888 -0.1455 0.0328 +vn 0.0077 -0.0002 -1.0000 +vn 0.0076 0.0028 -1.0000 +vn 0.0076 -0.0031 -1.0000 +vn -0.9994 0.0055 -0.0331 +vn -0.9994 0.0053 -0.0331 +vn -0.9956 -0.0873 -0.0330 +vn -0.9947 0.0979 -0.0330 +vn -0.0077 -0.0012 1.0000 +vn -0.0076 0.0614 0.9981 +vn -0.0076 -0.0614 0.9981 +vn 0.9989 -0.0329 0.0331 +vn 0.9992 0.0217 0.0331 +vn 0.9956 -0.0874 0.0330 +vn 0.9956 -0.0874 0.0329 +vn 0.0076 0.0001 -1.0000 +vn 0.0076 -0.0068 -0.9999 +vn 0.0076 0.0068 -0.9999 +vn -0.9989 -0.0329 -0.0331 +vn -0.9992 0.0217 -0.0331 +vn -0.9956 -0.0874 -0.0330 +vn -0.0076 -0.0582 0.9983 +vn -0.0076 -0.0012 1.0000 +vn -0.0076 0.0615 0.9981 +vn -0.0076 0.0261 0.9996 +vn -0.0077 0.0016 1.0000 +vn -0.0077 0.0017 1.0000 +vn -0.0077 -0.0034 1.0000 +vn -0.0077 -0.0030 1.0000 +vn 0.0002 -0.9995 -0.0326 +vn 0.0077 0.0001 -1.0000 +vn 0.0077 -0.0001 -1.0000 +vn -1.0000 0.0007 -0.0077 +vn -1.0000 0.0007 -0.0076 +vn -0.9998 -0.0187 -0.0077 +vn -0.9998 0.0198 -0.0076 +vn -0.0331 -0.0088 0.9994 +vn -0.0331 -0.0087 0.9994 +vn -0.0331 0.0398 0.9987 +vn -0.0331 -0.0572 0.9978 +vn 1.0000 -0.0027 0.0076 +vn 0.9973 0.0732 0.0076 +vn 0.9969 -0.0778 0.0076 +vn 0.0331 -0.0082 -0.9994 +vn 0.0331 0.0223 -0.9992 +vn 0.0331 -0.0386 -0.9987 +vn -0.9996 0.0261 -0.0077 +vn -0.9994 0.0330 -0.0077 +vn -0.9998 0.0191 -0.0076 +vn -0.0331 -0.0008 0.9995 +vn -0.0331 -0.0040 0.9994 +vn -0.0329 -0.1027 0.9942 +vn -0.0329 0.0981 0.9946 +vn 0.9997 -0.0242 0.0077 +vn 0.9997 -0.0244 0.0077 +vn 0.9997 0.0217 0.0077 +vn 0.9975 -0.0703 0.0077 +vn 0.9975 -0.0703 0.0076 +vn 0.0331 0.0059 -0.9994 +vn 0.0331 0.0014 -0.9995 +vn 0.0327 0.1451 -0.9889 +vn 0.0328 -0.1381 -0.9899 +vn -0.0356 0.9994 -0.0003 +vn -0.0318 0.9995 -0.0002 +vn 0.0845 0.9964 0.0006 +vn -0.1512 0.9885 -0.0012 +vn -0.0329 -0.0000 0.9995 +vn -0.0332 -0.0000 0.9994 +vn -0.1565 -0.0044 0.9877 +vn 0.0908 0.0044 0.9959 +vn 0.0329 -0.9995 0.0003 +vn 0.0347 -0.9994 0.0003 +vn -0.0210 -0.9998 -0.0002 +vn 0.0884 -0.9961 0.0007 +vn 0.0331 -0.0000 -0.9995 +vn 0.0327 -0.0000 -0.9995 +vn 0.1970 0.0059 -0.9804 +vn -0.1321 -0.0059 -0.9912 +vn -0.0352 0.9994 -0.0003 +vn -0.0314 0.9995 -0.0002 +vn 0.0912 0.9958 0.0007 +vn -0.1577 0.9875 -0.0012 +vn -0.0321 0.0000 0.9995 +vn -0.0316 0.0000 0.9995 +vn 0.1315 0.0059 0.9913 +vn -0.1944 -0.0058 0.9809 +vn 0.0326 -0.9995 0.0002 +vn 0.0345 -0.9994 0.0003 +vn -0.0277 -0.9996 -0.0002 +vn 0.0950 -0.9955 0.0007 +vn 0.0321 -0.0000 -0.9995 +vn 0.0325 -0.0000 -0.9995 +vn -0.0899 -0.0044 -0.9959 +vn 0.1540 0.0043 -0.9881 +vn -0.0331 -0.0037 0.9994 +vn -0.0330 -0.0604 0.9976 +vn -0.0331 0.0531 0.9980 +vn 0.0331 0.0063 -0.9994 +vn 0.0329 0.1034 -0.9941 +vn 0.0330 -0.0911 -0.9953 +vn 0.0330 -0.0910 -0.9953 +vn -1.0000 -0.0034 -0.0076 +vn -1.0000 -0.0030 -0.0076 +vn -0.9986 0.0519 -0.0077 +vn -0.9983 -0.0581 -0.0077 +vn -0.0331 -0.0079 0.9994 +vn -0.0331 -0.0081 0.9994 +vn -0.0328 0.1300 0.9910 +vn -0.0327 -0.1455 0.9888 +vn 1.0000 -0.0002 0.0077 +vn 1.0000 0.0028 0.0076 +vn 1.0000 -0.0031 0.0076 +vn 0.0331 0.0055 -0.9994 +vn 0.0331 0.0053 -0.9994 +vn 0.0329 -0.0873 -0.9956 +vn 0.0329 0.0979 -0.9947 +vn -1.0000 -0.0012 -0.0077 +vn -0.9981 0.0615 -0.0076 +vn -0.9981 -0.0615 -0.0076 +vn 1.0000 0.0001 0.0077 +vn 0.9999 -0.0068 0.0076 +vn 0.9999 0.0068 0.0076 +vn 0.0331 -0.0329 -0.9989 +vn 0.0330 -0.0874 -0.9956 +vn -0.0330 -0.0572 0.9978 +vn -0.9998 0.0191 -0.0075 +vn 0.9997 0.0217 0.0076 +vn -0.0329 0.0000 0.9995 +vn -0.0316 0.0001 0.9995 +vn 1.0000 0.0018 0.0077 +vn 0.9996 0.0274 0.0076 +vn 0.9997 -0.0241 0.0076 +vn -1.0000 -0.0034 -0.0077 +vn -1.0000 -0.0030 -0.0077 +vn -0.9983 -0.0582 -0.0077 +vn 1.0000 -0.0001 0.0077 +vn 1.0000 0.0028 0.0075 +vn 1.0000 -0.0031 0.0075 +vn -0.9981 0.0614 -0.0077 +vn -0.9981 -0.0614 -0.0076 +vn 0.9999 -0.0068 0.0077 +vn -0.9998 -0.0186 -0.0077 +vn 1.0000 -0.0027 0.0077 +vn -0.0353 0.9994 -0.0003 +vn 0.0346 -0.9994 0.0003 +vn -0.9981 -0.0614 -0.0077 +vn 0.9999 -0.0069 0.0076 +vn 0.9999 0.0068 0.0077 +vn -0.9998 -0.0186 -0.0076 +vn -0.9986 0.0519 -0.0076 +vn -0.9983 -0.0582 -0.0076 +vn 1.0000 0.0001 0.0076 +vn 0.0331 -0.0572 -0.9978 +vn 0.0329 -0.0000 -0.9995 +vn 0.9981 0.0614 0.0077 +vn 0.9998 0.0191 0.0075 +vn -0.0845 0.9964 -0.0007 +vn -0.9996 0.0273 -0.0077 +vn 0.0076 0.0007 -1.0000 +vn 0.0077 -0.0186 -0.9998 +vn 0.0076 0.0198 -0.9998 +vn -0.9994 -0.0088 -0.0331 +vn -0.9994 -0.0087 -0.0331 +vn -0.9987 0.0398 -0.0331 +vn -0.9978 -0.0572 -0.0330 +vn -0.0076 -0.0027 1.0000 +vn -0.0076 0.0732 0.9973 +vn -0.0076 -0.0778 0.9969 +vn 0.9994 -0.0082 0.0331 +vn 0.9992 0.0223 0.0331 +vn 0.9987 -0.0386 0.0331 +vn 0.9987 -0.0387 0.0331 +vn 0.0077 0.0261 -0.9996 +vn 0.0076 0.0261 -0.9996 +vn 0.0077 0.0330 -0.9994 +vn 0.0076 0.0191 -0.9998 +vn -0.9995 -0.0008 -0.0331 +vn -0.9994 -0.0040 -0.0331 +vn -0.9942 -0.1027 -0.0329 +vn -0.9946 0.0981 -0.0329 +vn -0.0077 -0.0242 0.9997 +vn -0.0077 -0.0244 0.9997 +vn -0.0076 0.0217 0.9997 +vn -0.0076 -0.0703 0.9975 +vn 0.9994 0.0059 0.0331 +vn 0.9995 0.0014 0.0331 +vn 0.9889 0.1451 0.0327 +vn 0.9899 -0.1381 0.0328 +vn 0.0003 0.9994 -0.0356 +vn 0.0002 0.9995 -0.0318 +vn -0.0006 0.9964 0.0845 +vn 0.0012 0.9885 -0.1512 +vn -0.9995 0.0000 -0.0329 +vn -0.9994 -0.0000 -0.0332 +vn -0.9877 -0.0044 -0.1565 +vn -0.9959 0.0044 0.0908 +vn -0.9959 0.0043 0.0908 +vn -0.0003 -0.9995 0.0329 +vn -0.0003 -0.9994 0.0347 +vn 0.0002 -0.9998 -0.0210 +vn -0.0007 -0.9961 0.0884 +vn 0.9995 -0.0001 0.0331 +vn 0.9995 -0.0001 0.0327 +vn 0.9804 0.0059 0.1970 +vn 0.9912 -0.0059 -0.1321 +vn 0.0003 0.9994 -0.0352 +vn 0.0002 0.9995 -0.0314 +vn -0.0007 0.9958 0.0912 +vn 0.0012 0.9875 -0.1577 +vn -0.9995 0.0001 -0.0321 +vn -0.9995 0.0001 -0.0316 +vn -0.9913 0.0059 0.1315 +vn -0.9809 -0.0058 -0.1944 +vn -0.9809 -0.0059 -0.1944 +vn -0.0002 -0.9995 0.0326 +vn -0.0003 -0.9994 0.0345 +vn 0.0002 -0.9996 -0.0277 +vn -0.0007 -0.9955 0.0950 +vn 0.9995 -0.0000 0.0321 +vn 0.9995 -0.0000 0.0325 +vn 0.9959 -0.0044 -0.0899 +vn 0.9881 0.0043 0.1540 +vn 0.0077 0.0274 -0.9996 +vn 0.0077 -0.0241 -0.9997 +vn -0.9994 -0.0037 -0.0331 +vn -0.9976 -0.0604 -0.0331 +vn -0.9980 0.0531 -0.0331 +vn -0.0076 0.0274 0.9996 +vn -0.0076 -0.0241 0.9997 +vn 0.9994 0.0063 0.0330 +vn 0.9941 0.1034 0.0329 +vn 0.9953 -0.0911 0.0329 +vn 0.9953 -0.0910 0.0329 +vn 0.0076 -0.0034 -1.0000 +vn 0.0076 -0.0030 -1.0000 +vn 0.0077 0.0519 -0.9986 +vn 0.0077 -0.0582 -0.9983 +vn -0.9994 -0.0079 -0.0330 +vn -0.9994 -0.0081 -0.0330 +vn -0.9910 0.1300 -0.0328 +vn -0.9888 -0.1455 -0.0327 +vn -0.0077 -0.0001 1.0000 +vn -0.0077 -0.0002 1.0000 +vn -0.0076 0.0028 1.0000 +vn -0.0076 -0.0031 1.0000 +vn 0.9994 0.0055 0.0331 +vn 0.9994 0.0053 0.0331 +vn 0.9956 -0.0873 0.0330 +vn 0.9947 0.0979 0.0330 +vn 0.0077 -0.0012 -1.0000 +vn 0.0076 0.0614 -0.9981 +vn 0.0076 -0.0614 -0.9981 +vn -0.9956 -0.0874 -0.0329 +vn -0.0076 0.0001 1.0000 +vn -0.0076 -0.0068 0.9999 +vn -0.0076 0.0068 0.9999 +vn 0.0077 -0.0034 -1.0000 +vn 0.0077 -0.0030 -1.0000 +vn 0.0330 -0.0604 -0.9976 +vn 1.0000 -0.0012 0.0076 +vn 0.9983 -0.0582 0.0076 +vn -0.9987 -0.0387 -0.0331 +vn 0.9994 -0.0039 0.0331 +vn 0.9946 0.0981 0.0329 +vn -0.9995 0.0014 -0.0331 +vn 0.9995 -0.0000 0.0329 +vn -0.9995 -0.0000 -0.0331 +vn 0.9995 0.0000 0.0321 +vn -0.9881 0.0044 -0.1540 +vn 0.9980 0.0531 0.0331 +vn -0.9994 0.0063 -0.0331 +vn -0.9953 -0.0911 -0.0330 +vn 0.9888 -0.1455 0.0327 +vn -0.9956 -0.0873 -0.0329 +vn -0.9947 0.0979 -0.0329 +vn 0.9989 -0.0329 0.0330 +vn -0.9989 -0.0329 -0.0330 +vn 0.9978 -0.0572 0.0330 +vn -0.9889 0.1451 -0.0328 +vn 0.9976 -0.0604 0.0331 +vn -0.9994 0.0055 -0.0330 +vn -1.0000 0.0016 -0.0076 +vn -1.0000 0.0017 -0.0076 +vn -0.0331 -0.0604 0.9976 +vn 0.0329 -0.0911 -0.9953 +vn -0.9981 0.0614 -0.0076 +vn -0.3368 -0.1736 -0.9254 +vn 0.9397 0.0000 -0.3420 +vn 0.7253 0.5789 -0.3726 +vn 0.7253 0.5788 -0.3726 +vn 0.2339 0.9366 -0.2609 +vn -0.3469 0.9366 -0.0495 +vn -0.7951 0.5789 0.1808 +vn -0.9397 -0.0000 0.3420 +vn -0.7253 -0.5789 0.3726 +vn -0.2339 -0.9366 0.2609 +vn 0.3469 -0.9366 0.0495 +vn 0.7951 -0.5788 -0.1808 +vn 0.7951 -0.5789 -0.1808 +vn 0.3368 0.1736 0.9254 +vn 0.3368 0.1737 0.9254 +vn -0.3368 -0.1737 -0.9254 +vn 0.1910 0.9504 -0.2454 +vn 0.1911 0.9504 -0.2454 +vn 0.3674 0.1625 0.9158 +vn 0.3675 0.1624 0.9157 +vn -0.8968 0.2679 0.3520 +vn -0.3673 -0.1625 -0.9158 +vn 0.8968 -0.2679 -0.3520 +vn 0.8969 -0.2679 -0.3520 +vn -0.3041 0.9504 -0.0652 +vn 0.3072 0.1624 0.9377 +vn 0.3072 0.1625 0.9377 +vn 0.9133 0.2679 -0.3068 +vn -0.3073 -0.1625 -0.9377 +vn -0.9133 -0.2679 0.3068 +vn -0.9133 -0.2679 0.3069 +vn 0.2891 -0.3443 0.8933 +vn 0.2891 -0.3443 0.8932 +vn 0.9601 -0.0226 -0.2787 +vn -0.2891 0.3443 -0.8933 +vn -0.2892 0.3443 -0.8932 +vn -0.9601 0.0226 0.2787 +vn -0.7544 -0.1736 -0.6330 +vn 0.6428 0.0000 -0.7660 +vn 0.4418 0.5789 -0.6854 +vn 0.0721 0.9366 -0.3429 +vn -0.3252 0.9366 0.1306 +vn -0.5982 0.5789 0.5541 +vn -0.6428 -0.0000 0.7660 +vn -0.4418 -0.5789 0.6853 +vn -0.0721 -0.9366 0.3429 +vn 0.3252 -0.9366 -0.1306 +vn 0.5982 -0.5789 -0.5541 +vn 0.7544 0.1736 0.6330 +vn 0.7544 0.1737 0.6330 +vn -0.7544 -0.1737 -0.6330 +vn 0.0427 0.9504 -0.3081 +vn 0.7761 0.1625 0.6094 +vn 0.7761 0.1624 0.6094 +vn -0.6007 0.2679 0.7533 +vn -0.7760 -0.1625 -0.6094 +vn 0.6007 -0.2679 -0.7533 +vn 0.6006 -0.2679 -0.7533 +vn -0.2960 0.9504 0.0956 +vn 0.7349 0.1625 0.6584 +vn 0.6375 0.2679 -0.7224 +vn -0.7349 -0.1625 -0.6584 +vn -0.7350 -0.1625 -0.6584 +vn -0.6375 -0.2679 0.7224 +vn -0.6375 -0.2679 0.7223 +vn 0.6970 -0.3443 0.6291 +vn 0.6921 -0.0226 -0.7214 +vn -0.6970 0.3443 -0.6291 +vn -0.6970 0.3443 -0.6290 +vn -0.6921 0.0226 0.7214 +vn -0.8529 -0.1736 -0.4924 +vn 0.5000 0.0000 -0.8660 +vn 0.3161 0.5789 -0.7517 +vn 0.3161 0.5788 -0.7517 +vn 0.0115 0.9366 -0.3502 +vn -0.2975 0.9366 0.1850 +vn -0.2976 0.9366 0.1850 +vn -0.4929 0.5789 0.6496 +vn -0.4929 0.5788 0.6496 +vn -0.5000 -0.0000 0.8660 +vn -0.3161 -0.5789 0.7517 +vn -0.0115 -0.9366 0.3502 +vn 0.2975 -0.9366 -0.1850 +vn 0.4929 -0.5789 -0.6496 +vn 0.8529 0.1736 0.4924 +vn 0.8529 0.1737 0.4924 +vn -0.8529 -0.1737 -0.4924 +vn -0.0114 0.9504 -0.3108 +vn 0.8701 0.1625 0.4654 +vn 0.8701 0.1624 0.4653 +vn -0.4607 0.2679 0.8461 +vn -0.4608 0.2679 0.8461 +vn -0.8700 -0.1625 -0.4654 +vn -0.8701 -0.1625 -0.4654 +vn 0.4608 -0.2679 -0.8461 +vn 0.4607 -0.2679 -0.8461 +vn -0.2749 0.9504 0.1455 +vn 0.8381 0.1625 0.5208 +vn 0.5024 0.2679 -0.8221 +vn -0.8381 -0.1625 -0.5208 +vn -0.8381 -0.1625 -0.5207 +vn -0.5024 -0.2679 0.8221 +vn 0.7956 -0.3443 0.4985 +vn 0.7956 -0.3443 0.4984 +vn 0.5563 -0.0226 -0.8306 +vn 0.5564 -0.0226 -0.8306 +vn -0.7956 0.3443 -0.4985 +vn -0.7957 0.3443 -0.4984 +vn -0.5563 0.0226 0.8306 +vn -0.0858 -0.1737 0.9811 +vn -0.0858 -0.1736 0.9811 +vn -0.9962 -0.0000 -0.0872 +vn -0.8148 0.5789 0.0312 +vn -0.3222 0.9366 0.1376 +vn 0.2934 0.9366 0.1915 +vn 0.2935 0.9366 0.1915 +vn 0.7970 0.5789 0.1722 +vn 0.7970 0.5788 0.1722 +vn 0.9962 0.0000 0.0872 +vn 0.8148 -0.5789 -0.0312 +vn 0.3222 -0.9366 -0.1376 +vn -0.2934 -0.9366 -0.1914 +vn -0.2935 -0.9366 -0.1914 +vn -0.7970 -0.5789 -0.1722 +vn 0.0858 0.1736 -0.9811 +vn 0.0858 0.1737 -0.9811 +vn -0.2769 0.9504 0.1417 +vn 0.0541 0.1625 -0.9852 +vn 0.0540 0.1624 -0.9852 +vn 0.9616 0.2679 0.0600 +vn -0.0541 -0.1625 0.9852 +vn -0.9616 -0.2679 -0.0600 +vn 0.2481 0.9504 0.1876 +vn 0.1178 0.1625 -0.9797 +vn -0.9574 0.2679 -0.1079 +vn -0.1178 -0.1625 0.9797 +vn 0.9574 -0.2679 0.1079 +vn 0.1155 -0.3443 -0.9317 +vn -0.9879 -0.0226 -0.1532 +vn -0.1155 0.3443 0.9317 +vn -0.1154 0.3443 0.9318 +vn 0.9879 0.0226 0.1532 +vn 0.9962 -0.0000 0.0872 +vn -0.2934 -0.9366 -0.1915 +vn -0.2935 -0.9366 -0.1915 +vn -0.9962 0.0000 -0.0872 +vn -0.8148 0.5788 0.0312 +vn 0.9616 0.2679 0.0599 +vn -0.7291 -0.4300 -0.5325 +vn -0.8872 -0.4300 0.1675 +vn -0.9341 -0.2974 0.1975 +vn -0.7585 -0.2974 -0.5798 +vn -0.0395 -0.4300 -0.9020 +vn -0.0626 -0.2974 -0.9527 +vn 0.6308 -0.4300 -0.6459 +vn 0.6819 -0.2974 -0.6683 +vn 0.8984 -0.4300 0.0892 +vn 0.9519 -0.2974 0.0737 +vn 0.5495 -0.4299 0.7164 +vn 0.5645 -0.2974 0.7700 +vn -0.0714 -0.4346 0.8978 +vn -0.0755 -0.3029 0.9500 +vn -0.5454 -0.4346 0.7167 +vn -0.5772 -0.3029 0.7584 +vn -0.9775 -0.0091 0.2107 +vn -0.8865 0.4225 0.1889 +vn -0.7192 0.4225 -0.5516 +vn -0.7921 -0.0091 -0.6103 +vn -0.0608 0.4225 -0.9043 +vn -0.0694 -0.0091 -0.9975 +vn 0.6483 0.4225 -0.6334 +vn 0.7169 -0.0091 -0.6972 +vn 0.9038 0.4225 0.0685 +vn 0.9973 -0.0091 0.0733 +vn 0.5347 0.4225 0.7318 +vn 0.5880 -0.0091 0.8088 +vn -0.0714 0.4338 0.8982 +vn -0.0792 -0.0093 0.9968 +vn -0.5457 0.4338 0.7170 +vn -0.6056 -0.0093 0.7957 +vn -0.7892 0.5943 0.1549 +vn -0.6460 0.5943 -0.4790 +vn -0.0410 0.5943 -0.8032 +vn 0.5661 0.5943 -0.5712 +vn 0.8008 0.5943 0.0737 +vn 0.4848 0.5943 0.6416 +vn -0.0639 0.5919 0.8035 +vn -0.4882 0.5919 0.6414 +vn -0.8879 0.4284 0.1677 +vn -0.7296 0.4284 -0.5330 +vn -0.0396 0.4284 -0.9027 +vn 0.6314 0.4284 -0.6464 +vn 0.8992 0.4284 0.0892 +vn 0.5499 0.4284 0.7170 +vn -0.0714 0.4330 0.8985 +vn -0.5459 0.4330 0.7173 +vn -0.9754 -0.0000 -0.2203 +vn -0.4723 -0.0000 -0.8815 +vn 0.3569 -0.0000 -0.9341 +vn 0.9397 -0.0000 -0.3421 +vn 0.8738 0.0000 0.4862 +vn 0.2048 0.0000 0.9788 +vn -0.3569 0.0000 0.9341 +vn -0.8053 0.0000 0.5929 +vn -0.8047 -0.5652 -0.1817 +vn -0.3721 -0.6157 -0.6946 +vn 0.2944 -0.5652 -0.7706 +vn 0.7404 -0.6157 -0.2695 +vn 0.7209 -0.5652 0.4011 +vn 0.1614 -0.6157 0.7713 +vn -0.2812 -0.6157 0.7361 +vn -0.6345 -0.6157 0.4672 +vn -0.6345 -0.6157 0.4671 +vn -0.4722 -0.0000 -0.8815 +vn 0.3569 -0.0000 -0.9342 +vn 0.9397 -0.0000 -0.3420 +vn 0.8739 0.0000 0.4862 +vn 0.8739 -0.0000 0.4862 +vn 0.2048 -0.0000 0.9788 +vn -0.3569 0.0000 0.9342 +vn -0.7982 0.5747 -0.1803 +vn -0.7982 0.5748 -0.1803 +vn -0.3687 0.6252 -0.6879 +vn -0.3686 0.6252 -0.6880 +vn 0.2920 0.5747 -0.7644 +vn 0.2920 0.5748 -0.7644 +vn 0.7334 0.6252 -0.2670 +vn 0.7334 0.6252 -0.2669 +vn 0.7151 0.5747 0.3979 +vn 0.1598 0.6252 0.7639 +vn -0.2785 0.6252 0.7291 +vn -0.6285 0.6252 0.4627 +vn -0.6633 0.7332 -0.1498 +vn -0.2980 0.7759 -0.5561 +vn 0.2427 0.7332 -0.6352 +vn 0.5928 0.7759 -0.2158 +vn 0.5942 0.7332 0.3306 +vn 0.1292 0.7759 0.6175 +vn -0.2251 0.7759 0.5893 +vn -0.5080 0.7759 0.3741 +vn 0.4052 0.3079 -0.8608 +vn 0.3963 0.8168 -0.4193 +vn 0.4090 0.7639 -0.4991 +vn 0.4659 0.3054 -0.8305 +vn 0.0341 0.8168 0.5759 +vn -0.0776 0.8050 0.5881 +vn -0.2429 0.3079 0.9199 +vn -0.3547 0.3089 0.8825 +vn 0.3926 0.8026 -0.4490 +vn 0.5124 0.3023 -0.8038 +vn -0.2254 0.7568 0.6136 +vn -0.4348 0.3068 0.8467 +vn 0.9397 -0.0000 0.3420 +vn 0.9397 -0.0000 0.3421 +vn 0.9397 0.0000 0.3420 +vn 0.2429 0.3079 -0.9199 +vn 0.1770 0.3053 -0.9357 +vn 0.0075 0.7639 -0.6453 +vn -0.0341 0.8168 -0.5759 +vn -0.3186 0.8050 0.5004 +vn -0.3963 0.8168 0.4193 +vn -0.2955 0.3089 0.9040 +vn -0.4052 0.3078 0.8609 +vn 0.1242 0.3024 -0.9451 +vn -0.0121 0.8027 -0.5963 +vn -0.2218 0.7568 0.6149 +vn -0.2112 0.3068 0.9281 +vn -0.9397 0.0000 -0.3420 +vn -0.9397 0.0001 -0.3420 +vn -0.9397 -0.0001 -0.3419 +vn -0.9397 -0.0000 -0.3420 +vn -0.3420 0.0000 0.9397 +vn 0.3420 -0.0000 -0.9397 +vn -0.7828 0.4849 0.3900 +vn -0.5688 0.5340 0.6256 +vn -0.5617 0.5488 0.6191 +vn -0.7186 0.5445 0.4327 +vn -0.4524 -0.7860 0.4212 +vn -0.4525 -0.7860 0.4211 +vn -0.8273 -0.5310 -0.1832 +vn 0.7217 -0.0413 0.6910 +vn 0.7424 -0.0036 0.6700 +vn 0.5464 -0.2833 0.7882 +vn 0.4525 0.7860 -0.4212 +vn 0.2481 0.7700 -0.5878 +vn -0.7189 0.0461 -0.6936 +vn -0.6963 0.0837 -0.7129 +vn -0.5096 0.3234 -0.7973 +vn -0.3288 0.4574 0.8263 +vn -0.3700 0.5233 0.7676 +vn 0.1806 -0.5923 0.7852 +vn 0.6253 0.7471 -0.2252 +vn -0.5389 0.5930 0.5983 +vn -0.6878 0.5496 0.4742 +vn 0.8347 0.2418 0.4947 +vn -0.8246 -0.2000 -0.5292 +vn -0.8246 -0.1999 -0.5292 +vn -0.4123 0.5328 0.7390 +vn -0.0500 -0.9962 0.0714 +vn 0.0500 0.9962 -0.0714 +vn 0.5714 -0.0872 -0.8160 +vn 0.5714 -0.0872 -0.8161 +vn 0.5714 -0.0871 -0.8160 +vn 0.8192 -0.0000 0.5736 +vn 0.8191 0.0000 0.5736 +vn -0.5714 0.0871 0.8160 +vn -0.5714 0.0872 0.8160 +vn -0.8191 0.0000 -0.5736 +vn -0.8192 0.0000 -0.5736 +vn 0.5719 -0.0770 -0.8167 +vn 0.5716 -0.0821 -0.8164 +vn 0.5717 -0.0821 -0.8164 +vn 0.8200 0.0166 0.5722 +vn 0.8199 0.0166 0.5723 +vn -0.5708 0.0973 0.8153 +vn -0.5711 0.0922 0.8157 +vn -0.8182 0.0166 -0.5748 +vn -0.8182 0.0166 -0.5747 +vn 0.8191 -0.0000 0.5736 +vn -0.8191 0.0001 -0.5736 +vn 0.0410 0.7502 0.6599 +vn -0.4567 0.7133 0.5317 +vn -0.4388 0.7454 0.5018 +vn 0.0241 0.8038 0.5945 +vn 0.4995 0.7582 0.4191 +vn 0.4554 0.8041 0.3822 +vn 0.6496 0.7582 -0.0568 +vn 0.5923 0.8041 -0.0518 +vn 0.4191 0.7582 -0.4995 +vn 0.3822 0.8041 -0.4554 +vn -0.0568 0.7582 -0.6496 +vn -0.0518 0.8041 -0.5923 +vn -0.4995 0.7582 -0.4191 +vn -0.4741 0.7962 -0.3759 +vn -0.6866 0.7221 0.0852 +vn -0.6708 0.7376 0.0776 +vn -0.2274 0.6544 0.7211 +vn -0.6707 0.6544 0.3491 +vn 0.3491 0.6544 0.6707 +vn 0.7211 0.6544 0.2274 +vn 0.6707 0.6544 -0.3491 +vn 0.2274 0.6544 -0.7211 +vn -0.3491 0.6544 -0.6707 +vn -0.7211 0.6544 -0.2274 +vn -0.4057 0.0000 0.9140 +vn 0.4617 -0.0000 0.8870 +vn 0.4617 0.0000 0.8870 +vn 0.9537 -0.0000 0.3007 +vn 0.8870 0.0000 -0.4617 +vn 0.3007 0.0000 -0.9537 +vn -0.4617 0.0000 -0.8870 +vn -0.9787 -0.0000 -0.2053 +vn -0.9787 0.0000 -0.2053 +vn -0.8870 0.0000 0.4618 +vn -0.0957 0.4943 0.8640 +vn -0.0677 0.5296 0.8455 +vn 0.6481 0.5263 0.5505 +vn 0.6746 0.4770 0.5634 +vn -0.0887 0.2560 0.9626 +vn 0.7432 0.2511 0.6201 +vn -0.0649 0.0324 0.9974 +vn 0.7663 0.0300 0.6418 +vn -0.0741 0.0077 0.9972 +vn 0.7660 -0.0000 0.6428 +vn -0.0841 -0.0000 0.9965 +vn -0.6088 0.1873 0.7709 +vn -0.6450 0.1711 0.7448 +vn -0.5708 0.0934 0.8157 +vn -0.5766 0.0501 0.8155 +vn -0.5822 0.1168 0.8046 +vn -0.5813 0.1469 0.8003 +vn -0.7644 0.4877 -0.4217 +vn -0.7260 0.5413 -0.4241 +vn -0.9804 0.1942 0.0335 +vn -0.9846 0.1747 0.0026 +vn -0.8292 0.2548 -0.4975 +vn -0.9947 0.0939 -0.0422 +vn -0.8429 0.0324 -0.5370 +vn -0.9979 0.0526 -0.0365 +vn -0.8462 0.0041 -0.5328 +vn -0.9899 0.1412 -0.0079 +vn -0.8494 0.0119 -0.5276 +vn -0.9762 0.2168 0.0085 +vn -0.0746 0.4770 -0.8757 +vn -0.0792 0.5263 -0.8466 +vn -0.0817 0.2511 -0.9645 +vn -0.0862 0.0300 -0.9958 +vn -0.0872 0.0000 -0.9962 +vn -0.0872 -0.0000 -0.9962 +vn 0.5699 0.4643 -0.6779 +vn 0.5498 0.5137 -0.6586 +vn 0.6246 0.2417 -0.7426 +vn 0.6428 0.0277 -0.7655 +vn 0.6428 -0.0000 -0.7660 +vn 0.8822 0.4643 -0.0780 +vn 0.8549 0.5137 -0.0726 +vn 0.9666 0.2417 -0.0857 +vn 0.9958 0.0277 -0.0875 +vn 0.9962 0.0000 -0.0872 +vn 0.5319 0.7502 0.3928 +vn 0.1137 0.7133 0.6916 +vn 0.1023 0.7454 0.6587 +vn 0.4709 0.8038 0.3636 +vn 0.6421 0.7582 -0.1132 +vn 0.5855 0.8041 -0.1032 +vn 0.3740 0.7582 -0.5341 +vn 0.3410 0.8041 -0.4870 +vn -0.1132 0.7582 -0.6421 +vn -0.1032 0.8041 -0.5855 +vn -0.5341 0.7582 -0.3740 +vn -0.4870 0.8041 -0.3410 +vn -0.6421 0.7582 0.1132 +vn -0.5927 0.7962 0.1215 +vn -0.3761 0.7221 0.5807 +vn -0.3717 0.7376 0.5637 +vn 0.4063 0.6544 0.6377 +vn -0.1637 0.6544 0.7382 +vn 0.7382 0.6544 0.1637 +vn 0.6377 0.6544 -0.4063 +vn 0.1637 0.6544 -0.7382 +vn -0.4063 0.6544 -0.6377 +vn -0.7382 0.6544 -0.1637 +vn -0.6377 0.6544 0.4063 +vn 0.4394 -0.0000 0.8983 +vn 0.9763 -0.0000 0.2164 +vn 0.8434 0.0000 -0.5373 +vn 0.2164 0.0000 -0.9763 +vn -0.5373 0.0000 -0.8434 +vn -0.9763 0.0000 -0.2164 +vn -0.7864 0.0000 0.6178 +vn -0.7864 -0.0000 0.6178 +vn -0.2164 -0.0000 0.9763 +vn -0.2164 0.0000 0.9763 +vn 0.6004 0.4943 0.6287 +vn 0.6042 0.5296 0.5954 +vn 0.8382 0.5263 -0.1426 +vn 0.8652 0.4770 -0.1546 +vn 0.6804 0.2560 0.6867 +vn 0.9528 0.2511 -0.1708 +vn 0.7223 0.0324 0.6908 +vn 0.9842 0.0300 -0.1745 +vn 0.7163 0.0077 0.6978 +vn 0.9848 0.0000 -0.1736 +vn 0.7093 -0.0000 0.7050 +vn 0.9848 -0.0000 -0.1737 +vn 0.1992 0.1873 0.9619 +vn 0.1560 0.1711 0.9728 +vn 0.2580 0.0934 0.9616 +vn 0.2541 0.0501 0.9659 +vn 0.2422 0.1168 0.9632 +vn 0.2394 0.1469 0.9597 +vn -0.8144 0.4877 0.3145 +vn -0.7916 0.5413 0.2835 +vn -0.6045 0.1942 0.7726 +vn -0.6309 0.1747 0.7560 +vn -0.9141 0.2548 0.3155 +vn -0.6717 0.0939 0.7349 +vn -0.9532 0.0324 0.3005 +vn -0.6695 0.0526 0.7410 +vn -0.9521 0.0041 0.3058 +vn -0.6424 0.1412 0.7533 +vn -0.9502 0.0119 0.3116 +vn -0.6210 0.2169 0.7533 +vn -0.7188 0.4770 -0.5057 +vn -0.6994 0.5263 -0.4835 +vn -0.7914 0.2511 -0.5574 +vn -0.8182 0.0300 -0.5741 +vn -0.8192 -0.0000 -0.5736 +vn -0.1530 0.4643 -0.8723 +vn -0.1511 0.5137 -0.8446 +vn -0.1674 0.2417 -0.9558 +vn -0.1732 0.0277 -0.9845 +vn -0.1736 0.0000 -0.9848 +vn -0.1736 -0.0000 -0.9848 +vn 0.5073 0.4643 -0.7260 +vn 0.4939 0.5137 -0.7016 +vn 0.5557 0.2417 -0.7955 +vn 0.5730 0.0277 -0.8191 +vn 0.5736 0.0000 -0.8192 +vn 0.5736 -0.0000 -0.8192 +vn -0.9027 -0.4300 -0.0180 +vn -0.6307 -0.4300 0.6461 +vn -0.6519 -0.2974 0.6976 +vn -0.9539 -0.2974 -0.0399 +vn -0.5497 -0.4300 -0.7162 +vn -0.5977 -0.2974 -0.7445 +vn 0.1463 -0.4300 -0.8909 +vn 0.1752 -0.2974 -0.9385 +vn 0.7871 -0.4299 -0.4422 +vn 0.8220 -0.2974 -0.4857 +vn 0.8610 -0.4300 0.2716 +vn 0.9040 -0.2974 0.3070 +vn 0.4565 -0.4346 0.7764 +vn 0.4830 -0.3029 0.8215 +vn -0.0357 -0.4346 0.8999 +vn -0.0378 -0.3029 0.9523 +vn -0.6799 -0.0091 0.7332 +vn -0.6178 0.4225 0.6632 +vn -0.9055 0.4225 -0.0393 +vn -0.9989 -0.0091 -0.0457 +vn -0.5685 0.4225 -0.7059 +vn -0.6290 -0.0091 -0.7773 +vn 0.1677 0.4225 -0.8907 +vn 0.1873 -0.0091 -0.9823 +vn 0.7796 0.4225 -0.4623 +vn 0.8589 -0.0091 -0.5120 +vn 0.8578 0.4225 0.2928 +vn 0.9456 -0.0091 0.3252 +vn 0.4567 0.4338 0.7767 +vn 0.5068 -0.0093 0.8620 +vn -0.0357 0.4338 0.9003 +vn -0.0397 -0.0093 0.9992 +vn -0.5576 0.5943 0.5795 +vn -0.8039 0.5943 -0.0219 +vn -0.4943 0.5943 -0.6344 +vn 0.1361 0.5943 -0.7926 +vn 0.6983 0.5943 -0.3990 +vn 0.7652 0.5943 0.2475 +vn 0.4085 0.5919 0.6948 +vn -0.0320 0.5919 0.8054 +vn -0.6311 0.4284 0.6466 +vn -0.9034 0.4284 -0.0181 +vn -0.5503 0.4284 -0.7167 +vn 0.1465 0.4284 -0.8916 +vn 0.7878 0.4284 -0.4426 +vn 0.8617 0.4284 0.2719 +vn 0.4569 0.4330 0.7770 +vn -0.0358 0.4330 0.9007 +vn -0.9254 0.0000 0.3790 +vn -0.8924 -0.0000 -0.4512 +vn -0.2435 -0.0000 -0.9699 +vn 0.5736 -0.0000 -0.8191 +vn 0.9947 -0.0000 -0.1029 +vn 0.7292 0.0000 0.6843 +vn 0.2435 0.0000 0.9699 +vn -0.3196 0.0000 0.9476 +vn -0.7634 -0.5652 0.3127 +vn -0.7032 -0.6157 -0.3555 +vn -0.2008 -0.5652 -0.8001 +vn 0.4520 -0.6157 -0.6455 +vn 0.8206 -0.5652 -0.0849 +vn 0.5746 -0.6157 0.5392 +vn 0.1918 -0.6157 0.7642 +vn -0.2518 -0.6157 0.7466 +vn -0.7573 0.5747 0.3101 +vn -0.7573 0.5748 0.3102 +vn -0.6965 0.6252 -0.3521 +vn -0.1992 0.5747 -0.7937 +vn 0.4476 0.6252 -0.6393 +vn 0.4477 0.6252 -0.6393 +vn 0.8140 0.5747 -0.0842 +vn 0.5691 0.6252 0.5341 +vn 0.1900 0.6252 0.7570 +vn -0.2494 0.6252 0.7395 +vn -0.6293 0.7332 0.2577 +vn -0.5630 0.7759 -0.2846 +vn -0.1655 0.7332 -0.6595 +vn 0.3618 0.7759 -0.5168 +vn 0.6764 0.7332 -0.0700 +vn 0.4600 0.7759 0.4317 +vn 0.1536 0.7759 0.6119 +vn -0.2016 0.7759 0.5978 +vn -0.1618 0.3079 -0.9376 +vn 0.0842 0.8168 -0.5708 +vn 0.0488 0.7639 -0.6435 +vn -0.0948 0.3054 -0.9475 +vn 0.3583 0.8168 0.4522 +vn 0.2738 0.8050 0.5263 +vn 0.3286 0.3078 0.8929 +vn 0.2156 0.3089 0.9264 +vn 0.0641 0.8026 -0.5930 +vn -0.0413 0.3023 -0.9523 +vn 0.1674 0.7568 0.6319 +vn 0.1295 0.3068 0.9429 +vn 0.9659 0.0000 -0.2588 +vn 0.9659 0.0001 -0.2589 +vn 0.9659 0.0001 -0.2588 +vn -0.3286 0.3079 -0.8929 +vn -0.3917 0.3054 -0.8679 +vn -0.3640 0.7639 -0.5329 +vn -0.3583 0.8168 -0.4522 +vn 0.0261 0.8050 0.5927 +vn -0.0842 0.8168 0.5708 +vn 0.2765 0.3089 0.9100 +vn 0.1618 0.3079 0.9376 +vn -0.4404 0.3024 -0.8454 +vn -0.3520 0.8027 -0.4815 +vn 0.1710 0.7568 0.6309 +vn 0.3593 0.3068 0.8813 +vn -0.9659 0.0000 0.2588 +vn -0.9659 0.0001 0.2588 +vn -0.9659 -0.0000 0.2588 +vn 0.2588 0.0000 0.9659 +vn -0.2588 -0.0000 -0.9659 +vn 0.9659 -0.0000 -0.2588 +vn -0.4175 0.4850 0.7684 +vn -0.1071 0.5340 0.8387 +vn -0.1050 0.5488 0.8293 +vn -0.3405 0.5445 0.7666 +vn -0.1290 -0.7860 0.6046 +vn -0.1291 -0.7860 0.6046 +vn -0.7828 -0.5311 0.3243 +vn 0.9875 -0.0413 0.1521 +vn 0.9924 -0.0036 0.1229 +vn 0.8997 -0.2833 0.3322 +vn 0.1291 0.7860 -0.6046 +vn -0.1339 0.7701 -0.6238 +vn -0.9867 0.0461 -0.1558 +vn -0.9793 0.0837 -0.1845 +vn -0.8748 0.3234 -0.3608 +vn 0.2046 0.4574 0.8654 +vn 0.1372 0.5233 0.8410 +vn 0.5983 -0.5923 0.5396 +vn 0.3831 0.7471 -0.5432 +vn -0.0983 0.5930 0.7992 +vn -0.2914 0.5495 0.7830 +vn 0.9675 0.2417 -0.0736 +vn -0.9790 -0.2000 0.0394 +vn 0.0861 0.5328 0.8418 +vn -0.0000 -0.9962 0.0871 +vn -0.0000 -0.9962 0.0872 +vn 0.0000 -0.9962 0.0871 +vn -0.0000 0.9962 -0.0871 +vn -0.0000 -0.0872 -0.9962 +vn 0.0000 0.0872 0.9962 +vn -0.0000 -0.0770 -0.9970 +vn -0.0000 -0.0821 -0.9966 +vn 0.9999 0.0166 -0.0015 +vn 0.0000 0.0973 0.9953 +vn 0.0000 0.0922 0.9957 +vn -0.9999 0.0166 -0.0015 +vn -0.0000 0.9962 -0.0872 +vn 0.0000 0.9962 -0.0872 +vn -0.8858 -0.4300 -0.1745 +vn -0.7333 -0.4300 0.5267 +vn -0.7631 -0.2974 0.5738 +vn -0.9325 -0.2974 -0.2049 +vn -0.4170 -0.4300 -0.8008 +vn -0.4593 -0.2974 -0.8370 +vn 0.2988 -0.4300 -0.8520 +vn 0.3355 -0.2974 -0.8938 +vn 0.8520 -0.4300 -0.2988 +vn 0.8938 -0.2974 -0.3355 +vn 0.8008 -0.4300 0.4170 +vn 0.8370 -0.2974 0.4593 +vn 0.3147 -0.4346 0.8438 +vn 0.3331 -0.3029 0.8929 +vn -0.1914 -0.4346 0.8800 +vn -0.2026 -0.3029 0.9312 +vn -0.7969 -0.0091 0.6040 +vn -0.7236 0.4225 0.5458 +vn -0.8849 0.4225 -0.1959 +vn -0.9758 -0.0091 -0.2184 +vn -0.4373 0.4225 -0.7939 +vn -0.4845 -0.0091 -0.8748 +vn 0.3199 0.4225 -0.8481 +vn 0.3551 -0.0091 -0.9348 +vn 0.8481 0.4225 -0.3199 +vn 0.9348 -0.0091 -0.3551 +vn 0.7939 0.4225 0.4373 +vn 0.8747 -0.0091 0.4845 +vn 0.3149 0.4338 0.8442 +vn 0.3494 -0.0093 0.9369 +vn -0.1915 0.4338 0.8804 +vn -0.2126 -0.0093 0.9771 +vn -0.6498 0.5943 0.4739 +vn -0.7879 0.5943 -0.1612 +vn -0.3766 0.5943 -0.7106 +vn 0.2717 0.5943 -0.7570 +vn 0.7570 0.5943 -0.2717 +vn 0.7106 0.5943 0.3766 +vn 0.2817 0.5919 0.7552 +vn -0.1713 0.5919 0.7876 +vn -0.7338 0.4284 0.5272 +vn -0.8865 0.4284 -0.1748 +vn -0.4174 0.4284 -0.8014 +vn 0.2991 0.4284 -0.8526 +vn 0.8526 0.4284 -0.2991 +vn 0.8014 0.4284 0.4174 +vn 0.3150 0.4330 0.8445 +vn -0.1916 0.4331 0.8808 +vn -0.9771 0.0000 0.2126 +vn -0.8005 -0.0000 -0.5993 +vn -0.0713 -0.0000 -0.9975 +vn 0.7071 -0.0000 -0.7071 +vn 0.9975 0.0000 0.0713 +vn 0.5992 0.0000 0.8006 +vn 0.0713 0.0000 0.9975 +vn -0.4793 0.0000 0.8777 +vn -0.8061 -0.5652 0.1754 +vn -0.6308 -0.6157 -0.4722 +vn -0.0589 -0.5652 -0.8229 +vn -0.0588 -0.5652 -0.8228 +vn 0.5572 -0.6157 -0.5572 +vn 0.8229 -0.5652 0.0589 +vn 0.8229 -0.5652 0.0588 +vn 0.4722 -0.6157 0.6308 +vn 0.0562 -0.6157 0.7860 +vn -0.3776 -0.6157 0.6916 +vn 0.5993 0.0000 0.8006 +vn -0.7997 0.5747 0.1739 +vn -0.7996 0.5748 0.1740 +vn -0.6248 0.6252 -0.4676 +vn -0.6248 0.6252 -0.4677 +vn -0.0584 0.5747 -0.8163 +vn -0.0584 0.5747 -0.8162 +vn -0.0584 0.5748 -0.8162 +vn 0.5518 0.6252 -0.5519 +vn 0.5519 0.6252 -0.5519 +vn 0.8163 0.5747 0.0584 +vn 0.8162 0.5748 0.0584 +vn 0.4677 0.6252 0.6248 +vn 0.0557 0.6252 0.7785 +vn -0.3740 0.6252 0.6850 +vn -0.6644 0.7332 0.1445 +vn -0.5051 0.7759 -0.3780 +vn -0.0485 0.7332 -0.6782 +vn 0.4461 0.7759 -0.4461 +vn 0.6783 0.7332 0.0486 +vn 0.3781 0.7759 0.5050 +vn 0.0450 0.7759 0.6293 +vn -0.3023 0.7759 0.5537 +vn 0.0034 0.3079 -0.9514 +vn 0.1820 0.8168 -0.5475 +vn 0.1598 0.7639 -0.6252 +vn 0.0712 0.3054 -0.9496 +vn 0.2743 0.8168 0.5076 +vn 0.1782 0.8050 0.5658 +vn 0.1686 0.3079 0.9364 +vn 0.0515 0.3089 0.9497 +vn 0.1661 0.8027 -0.5729 +vn 0.1247 0.3023 -0.9450 +vn 0.0551 0.7568 0.6513 +vn -0.0362 0.3068 0.9511 +vn 0.9962 -0.0000 -0.0872 +vn 0.9962 -0.0001 -0.0871 +vn -0.1686 0.3079 -0.9364 +vn -0.2350 0.3053 -0.9228 +vn -0.2659 0.7639 -0.5880 +vn -0.2743 0.8168 -0.5076 +vn -0.0773 0.8050 0.5882 +vn -0.1820 0.8168 0.5475 +vn 0.1143 0.3088 0.9442 +vn -0.0034 0.3079 0.9514 +vn -0.2869 0.3024 -0.9090 +vn -0.2630 0.8027 -0.5353 +vn 0.0589 0.7568 0.6510 +vn 0.2008 0.3068 0.9303 +vn -0.9962 0.0000 0.0871 +vn -0.9962 -0.0000 0.0871 +vn -0.9962 0.0001 0.0871 +vn 0.0872 0.0000 0.9962 +vn -0.9962 -0.0000 0.0872 +vn -0.9962 0.0000 0.0872 +vn -0.5446 0.4850 0.6842 +vn -0.2511 0.5340 0.8073 +vn -0.2474 0.5488 0.7985 +vn -0.4684 0.5445 0.6958 +vn -0.2320 -0.7860 0.5730 +vn -0.2321 -0.7860 0.5729 +vn -0.8272 -0.5310 0.1836 +vn 0.9461 -0.0414 0.3212 +vn 0.9560 -0.0037 0.2933 +vn 0.8283 -0.2833 0.4834 +vn 0.2321 0.7860 -0.5730 +vn -0.0236 0.7700 -0.6375 +vn -0.0236 0.7700 -0.6376 +vn -0.9447 0.0462 -0.3247 +vn -0.9324 0.0838 -0.3517 +vn -0.7989 0.3235 -0.5071 +vn 0.0512 0.4574 0.8878 +vn -0.0110 0.5233 0.8521 +vn 0.4955 -0.5923 0.6353 +vn 0.4717 0.7470 -0.4685 +vn -0.2356 0.5930 0.7700 +vn -0.4230 0.5496 0.7205 +vn 0.9656 0.2419 0.0957 +vn 0.9656 0.2419 0.0958 +vn -0.9710 -0.2000 -0.1312 +vn -0.0614 0.5328 0.8440 +vn -0.0151 -0.9962 0.0858 +vn 0.0151 0.9962 -0.0858 +vn 0.1730 -0.0872 -0.9811 +vn 0.1730 -0.0871 -0.9811 +vn 0.9848 -0.0000 0.1736 +vn -0.1730 0.0872 0.9811 +vn -0.1730 0.0871 0.9811 +vn -0.9848 0.0000 -0.1736 +vn 0.1731 -0.0770 -0.9819 +vn 0.1731 -0.0821 -0.9815 +vn 0.9849 0.0166 0.1722 +vn 0.9849 0.0166 0.1721 +vn -0.1728 0.0973 0.9801 +vn -0.1729 0.0922 0.9806 +vn -0.9844 0.0166 -0.1751 +vn -0.9844 0.0166 -0.1750 +vn -0.9848 -0.0001 -0.1736 +vn 0.8672 -0.4300 0.2510 +vn 0.7764 -0.4300 -0.4608 +vn 0.8102 -0.2974 -0.5051 +vn 0.9111 -0.2974 0.2854 +vn 0.3456 -0.4300 0.8341 +vn 0.3846 -0.2974 0.8738 +vn -0.3719 -0.4300 0.8227 +vn -0.4122 -0.2974 0.8612 +vn -0.8748 -0.4300 0.2234 +vn -0.9197 -0.2974 0.2564 +vn -0.7614 -0.4300 -0.4852 +vn -0.7938 -0.2974 -0.5305 +vn -0.2400 -0.4346 -0.8681 +vn -0.2540 -0.3029 -0.9186 +vn 0.2674 -0.4346 -0.8600 +vn 0.2830 -0.3029 -0.9100 +vn 0.8465 -0.0091 -0.5323 +vn 0.7684 0.4225 -0.4807 +vn 0.8645 0.4225 0.2723 +vn 0.9531 -0.0091 0.3026 +vn 0.3664 0.4225 0.8290 +vn 0.4064 -0.0091 0.9136 +vn -0.3926 0.4225 0.8170 +vn -0.4352 -0.0091 0.9003 +vn -0.8727 0.4225 0.2447 +vn -0.9622 -0.0091 0.2722 +vn -0.7528 0.4225 -0.5048 +vn -0.8292 -0.0091 -0.5589 +vn -0.2401 0.4338 -0.8684 +vn -0.2665 -0.0093 -0.9638 +vn 0.2675 0.4338 -0.8604 +vn 0.2969 -0.0093 -0.9549 +vn 0.6886 0.5943 -0.4155 +vn 0.7709 0.5943 0.2292 +vn 0.3133 0.5943 0.7407 +vn -0.3366 0.5943 0.7304 +vn -0.7778 0.5943 0.2046 +vn -0.6751 0.5943 -0.4371 +vn -0.2148 0.5919 -0.7769 +vn 0.2393 0.5919 -0.7697 +vn 0.7770 0.4284 -0.4612 +vn 0.8679 0.4284 0.2513 +vn 0.3460 0.4284 0.8347 +vn -0.3724 0.4284 0.8233 +vn -0.8755 0.4284 0.2237 +vn -0.7620 0.4284 -0.4857 +vn -0.2402 0.4331 -0.8688 +vn 0.2677 0.4330 -0.8607 +vn 0.9920 -0.0000 -0.1266 +vn 0.7453 0.0000 0.6667 +vn -0.0159 0.0000 0.9999 +vn -0.7661 0.0000 0.6427 +vn -0.9874 -0.0000 -0.1580 +vn -0.5273 -0.0000 -0.8497 +vn 0.0158 -0.0000 -0.9999 +vn 0.5540 -0.0000 -0.8325 +vn 0.8183 -0.5652 -0.1044 +vn 0.5872 -0.6158 0.5254 +vn 0.5873 -0.6157 0.5253 +vn -0.0131 -0.5652 0.8249 +vn -0.0131 -0.5652 0.8248 +vn -0.6036 -0.6157 0.5065 +vn -0.6036 -0.6157 0.5064 +vn -0.8146 -0.5652 -0.1304 +vn -0.8146 -0.5652 -0.1303 +vn -0.4154 -0.6157 -0.6696 +vn -0.4155 -0.6157 -0.6696 +vn 0.0125 -0.6157 -0.7879 +vn 0.4365 -0.6157 -0.6561 +vn 0.4365 -0.6157 -0.6560 +vn 0.7453 0.0000 0.6668 +vn -0.7661 0.0000 0.6428 +vn -0.5272 -0.0000 -0.8497 +vn 0.0159 -0.0000 -0.9999 +vn 0.5539 -0.0000 -0.8326 +vn 0.8117 0.5748 -0.1036 +vn 0.5817 0.6252 0.5203 +vn 0.5817 0.6252 0.5204 +vn -0.0130 0.5747 0.8182 +vn -0.5978 0.6252 0.5017 +vn -0.5979 0.6252 0.5017 +vn -0.8081 0.5747 -0.1293 +vn -0.8080 0.5748 -0.1293 +vn -0.4115 0.6252 -0.6632 +vn 0.0124 0.6252 -0.7804 +vn 0.4323 0.6252 -0.6498 +vn 0.6745 0.7332 -0.0861 +vn 0.4702 0.7759 0.4206 +vn -0.0108 0.7332 0.6799 +vn -0.4833 0.7759 0.4055 +vn -0.6714 0.7332 -0.1075 +vn -0.3326 0.7759 -0.5361 +vn 0.0100 0.7759 -0.6308 +vn 0.3495 0.7759 -0.5253 +vn -0.0863 0.3079 0.9475 +vn -0.2290 0.8168 0.5296 +vn -0.2137 0.7639 0.6089 +vn -0.1537 0.3054 0.9398 +vn -0.2290 0.8168 -0.5296 +vn -0.1282 0.8050 -0.5792 +vn -0.0863 0.3078 -0.9475 +vn 0.0315 0.3088 -0.9506 +vn -0.2154 0.8026 0.5562 +vn -0.2066 0.3023 0.9305 +vn 0.0019 0.7568 -0.6537 +vn 0.1189 0.3068 -0.9443 +vn -1.0000 0.0001 -0.0000 +vn -1.0000 0.0001 0.0000 +vn 0.0863 0.3079 0.9475 +vn 0.1537 0.3053 0.9398 +vn 0.2137 0.7639 0.6089 +vn 0.2290 0.8168 0.5295 +vn 0.1282 0.8050 -0.5792 +vn 0.2290 0.8168 -0.5295 +vn -0.0315 0.3088 -0.9506 +vn 0.0863 0.3078 -0.9475 +vn 0.2066 0.3024 0.9305 +vn 0.2154 0.8027 0.5562 +vn -0.0019 0.7568 -0.6537 +vn -0.1189 0.3068 -0.9443 +vn 1.0000 0.0001 0.0000 +vn 1.0000 0.0001 -0.0000 +vn 1.0000 0.0001 0.0001 +vn 1.0000 0.0002 -0.0000 +vn 0.6022 0.4849 -0.6342 +vn 0.3205 0.5340 -0.7824 +vn 0.3160 0.5488 -0.7739 +vn 0.5273 0.5445 -0.6523 +vn 0.2812 -0.7860 -0.5506 +vn 0.2811 -0.7860 -0.5506 +vn 0.8401 -0.5310 -0.1108 +vn -0.9145 -0.0412 -0.4026 +vn -0.9267 -0.0035 -0.3757 +vn -0.7831 -0.2834 -0.5536 +vn -0.2811 0.7860 0.5505 +vn -0.0321 0.7700 0.6372 +vn 0.9127 0.0460 0.4061 +vn 0.8981 0.0836 0.4319 +vn 0.7516 0.3234 0.5749 +vn 0.0264 0.4574 -0.8889 +vn 0.0852 0.5233 -0.8479 +vn -0.4383 -0.5924 -0.6760 +vn -0.5106 0.7471 0.4255 +vn 0.3018 0.5930 -0.7465 +vn 0.4842 0.5496 -0.6809 +vn -0.9537 0.2416 -0.1792 +vn 0.9559 -0.2000 0.2153 +vn 0.1347 0.5328 -0.8354 +vn 0.0226 -0.9962 -0.0842 +vn -0.0226 0.9962 0.0842 +vn -0.2578 -0.0872 0.9622 +vn -0.9659 -0.0000 -0.2588 +vn -0.9659 0.0000 -0.2589 +vn 0.2579 0.0872 -0.9622 +vn 0.2578 0.0872 -0.9622 +vn -0.2581 -0.0770 0.9631 +vn -0.2580 -0.0821 0.9627 +vn -0.9662 0.0166 -0.2573 +vn -0.9662 0.0166 -0.2574 +vn 0.2576 0.0973 -0.9613 +vn 0.2577 0.0922 -0.9618 +vn 0.9654 0.0166 0.2602 +vn 0.9654 0.0166 0.2601 +vn -0.9659 -0.0000 -0.2589 +vn -0.9659 -0.0001 -0.2590 +vn -0.9659 0.0001 -0.2588 +vn 0.9659 0.0001 0.2588 +vn 0.9659 0.0000 0.2588 +vn -0.2578 -0.0872 0.9623 +vn 0.2578 0.0871 -0.9623 +vn 0.8672 -0.4300 0.2511 +vn -0.3720 -0.4300 0.8227 +vn 0.3132 0.5943 0.7407 +vn -0.2402 0.4330 -0.8688 +vn 0.5873 -0.6157 0.5254 +vn -0.1537 0.3054 0.9397 +vn -0.2290 0.8168 -0.5295 +vn -0.0863 0.3079 -0.9475 +vn 0.0315 0.3089 -0.9506 +vn -0.0315 0.3089 -0.9506 +vn 0.0863 0.3079 -0.9475 +vn 1.0000 0.0000 -0.0001 +vn -0.9145 -0.0412 -0.4025 +vn -0.9267 -0.0036 -0.3757 +vn -0.2811 0.7861 0.5505 +vn -0.0321 0.7701 0.6371 +vn 0.8980 0.0836 0.4319 +vn 0.9559 -0.2000 0.2152 +vn -0.2579 -0.0871 0.9622 +vn -0.2578 -0.0871 0.9623 +vn 0.2579 0.0871 -0.9622 +vn -0.9659 0.0000 -0.2588 +vn 0.2578 0.0872 -0.9623 +vn 0.0000 0.9397 0.3420 +vn -0.0000 0.9397 0.3420 +vn -0.0000 -0.9397 -0.3420 +vn -0.0000 -0.3420 0.9397 +vn 0.0000 -0.3420 0.9397 +vn -0.0000 0.3420 -0.9397 +vn 0.0000 -0.3516 0.9362 +vn 0.0000 -0.3468 0.9379 +vn 0.9999 -0.0156 -0.0057 +vn 0.0000 0.3324 -0.9431 +vn -0.0000 0.3372 -0.9414 +vn -0.0000 0.3373 -0.9414 +vn -0.9999 -0.0156 -0.0057 +vn 0.0000 -0.9397 -0.3420 +vn 0.0000 0.3420 -0.9397 +vn -0.0006 1.0000 0.0085 +vn -0.0007 1.0000 0.0089 +vn -0.0000 1.0000 0.0019 +vn 0.0000 1.0000 0.0015 +vn -0.9993 0.0098 -0.0349 +vn -0.9989 0.0168 -0.0441 +vn -0.9995 0.0069 -0.0311 +vn -0.9998 -0.0000 -0.0220 +vn 0.9991 0.0084 -0.0423 +vn 0.9986 -0.0000 -0.0533 +vn 0.9992 0.0119 -0.0377 +vn 0.9994 0.0203 -0.0267 +vn -0.9997 0.0104 -0.0219 +vn -0.0005 -0.3656 0.9308 +vn -0.0010 -0.3656 0.9308 +vn 0.9997 -0.0086 0.0220 +vn 1.0000 -0.0018 -0.0000 +vn -0.0000 0.3654 -0.9308 +vn -0.0042 0.3649 -0.9310 +vn -0.0000 0.3645 -0.9312 +vn 0.0004 0.3645 -0.9312 +vn -0.9995 -0.0132 0.0285 +vn -1.0000 0.0003 0.0000 +vn 0.0006 -0.3654 0.9309 +vn 0.0012 -0.3654 0.9308 +vn 0.9996 0.0104 -0.0266 +vn 1.0000 0.0021 0.0000 +vn -1.0000 0.0022 0.0000 +vn -1.0000 0.0021 0.0000 +vn -0.9992 -0.0409 0.0035 +vn -0.9998 -0.0203 0.0069 +vn 0.9991 0.0409 -0.0067 +vn 0.9998 0.0203 -0.0033 +vn -0.9994 0.0338 -0.0027 +vn -0.9998 0.0168 -0.0055 +vn 0.9994 -0.0338 0.0055 +vn 0.9999 -0.0168 0.0027 +vn -0.0034 1.0000 -0.0002 +vn -0.0017 1.0000 0.0002 +vn 0.0028 1.0000 0.0011 +vn 0.0014 1.0000 0.0008 +vn 0.5022 0.5970 -0.6256 +vn 0.2157 0.5968 -0.7728 +vn 0.2086 0.6105 -0.7641 +vn 0.4176 0.6423 -0.6427 +vn 0.4168 -0.7123 -0.5647 +vn 0.4167 -0.7124 -0.5647 +vn 0.9219 -0.3683 -0.1205 +vn -0.8934 -0.1992 -0.4027 +vn -0.9122 -0.1648 -0.3751 +vn -0.7208 -0.4106 -0.5584 +vn -0.4168 0.7123 0.5647 +vn -0.1686 0.7402 0.6509 +vn 0.8908 0.2035 0.4062 +vn 0.8697 0.2373 0.4328 +vn 0.6827 0.4439 0.5803 +vn -0.0601 0.4701 -0.8806 +vn -0.0140 0.5449 -0.8384 +vn -0.3263 -0.6499 -0.6864 +vn -0.6359 0.6347 0.4391 +vn 0.1868 0.6508 -0.7359 +vn 0.3742 0.6400 -0.6711 +vn -0.9823 0.0681 -0.1744 +vn 0.9770 -0.0274 0.2114 +vn 0.0330 0.5630 -0.8258 +vn 0.3100 0.9397 0.1445 +vn 0.3099 0.9397 0.1446 +vn 0.3100 0.9397 0.1446 +vn -0.3100 -0.9397 -0.1446 +vn -0.3101 -0.9397 -0.1446 +vn -0.3099 -0.9397 -0.1446 +vn 0.8516 -0.3420 0.3972 +vn 0.8516 -0.3421 0.3972 +vn 0.4225 0.0000 -0.9063 +vn 0.4226 0.0000 -0.9063 +vn -0.8517 0.3420 -0.3971 +vn -0.4226 -0.0000 0.9063 +vn -0.4226 0.0000 0.9063 +vn 0.8484 -0.3516 0.3958 +vn 0.8500 -0.3468 0.3964 +vn 0.8501 -0.3468 0.3964 +vn 0.4173 -0.0156 -0.9086 +vn 0.4174 -0.0156 -0.9086 +vn -0.8548 0.3324 -0.3985 +vn -0.8532 0.3372 -0.3979 +vn -0.4278 -0.0156 0.9037 +vn -0.4277 -0.0157 0.9038 +vn 0.4226 -0.0000 -0.9063 +vn 0.4227 -0.0000 -0.9063 +vn -0.3100 -0.9397 -0.1445 +vn 0.8516 -0.3422 0.3971 +vn 0.3099 0.9397 0.1445 +vn -0.8517 0.3419 -0.3972 +vn 0.8517 -0.3419 0.3971 +vn 0.8517 -0.3420 0.3971 +vn -0.8517 0.3419 -0.3971 +vn 0.0075 1.0000 0.0042 +vn 0.0078 1.0000 0.0044 +vn 0.0017 1.0000 0.0008 +vn 0.0013 1.0000 0.0006 +vn -0.9063 -0.0000 -0.4226 +vn -0.4540 0.0098 0.8909 +vn -0.4621 0.0168 0.8867 +vn -0.4506 0.0069 0.8927 +vn -0.4425 0.0000 0.8968 +vn 0.9063 0.0001 0.4226 +vn 0.9063 0.0000 0.4226 +vn 0.3839 0.0084 -0.9233 +vn 0.3738 0.0000 -0.9275 +vn 0.3882 0.0119 -0.9215 +vn 0.3983 0.0203 -0.9170 +vn -0.9063 -0.0000 -0.4227 +vn -0.9063 0.0000 -0.4226 +vn -0.4424 0.0104 0.8968 +vn 0.8433 -0.3656 0.3938 +vn 0.8432 -0.3656 0.3943 +vn 0.4424 -0.0086 -0.8968 +vn 0.4226 -0.0017 -0.9063 +vn -0.8436 0.3654 -0.3934 +vn -0.8456 0.3649 -0.3897 +vn -0.8440 0.3645 -0.3936 +vn -0.8438 0.3645 -0.3939 +vn -0.3966 -0.0132 0.9179 +vn -0.4226 0.0003 0.9063 +vn 0.8439 -0.3654 0.3928 +vn 0.8442 -0.3654 0.3922 +vn 0.3983 0.0104 -0.9172 +vn 0.4226 0.0021 -0.9063 +vn 0.9063 -0.0000 0.4226 +vn -0.4226 0.0022 0.9063 +vn -0.4226 0.0021 0.9063 +vn -0.4191 -0.0409 0.9070 +vn -0.4163 -0.0204 0.9090 +vn 0.4162 0.0410 -0.9083 +vn 0.4195 0.0203 -0.9075 +vn -0.4248 0.0338 0.9046 +vn -0.4275 0.0168 0.9039 +vn 0.4273 -0.0338 -0.9035 +vn 0.4250 -0.0168 -0.9050 +vn -0.0016 1.0000 0.0030 +vn -0.0005 1.0000 0.0016 +vn 0.0022 1.0000 -0.0021 +vn 0.0013 1.0000 -0.0009 +vn -0.3548 0.5970 -0.7195 +vn -0.6093 0.5968 -0.5221 +vn -0.6043 0.6105 -0.5120 +vn -0.4060 0.6423 -0.6501 +vn -0.3356 -0.7124 -0.6163 +vn -0.3356 -0.7124 -0.6164 +vn 0.2803 -0.3682 -0.8865 +vn -0.7425 -0.1992 0.6395 +vn -0.7255 -0.1648 0.6682 +vn -0.8106 -0.4107 0.4174 +vn 0.3355 0.7124 0.6163 +vn 0.3356 0.7124 0.6163 +vn 0.5185 0.7403 0.4278 +vn 0.7449 0.2033 -0.6355 +vn 0.7600 0.2371 -0.6051 +vn 0.8145 0.4439 -0.3735 +vn -0.8235 0.4701 -0.3177 +vn -0.7658 0.5449 -0.3416 +vn -0.7599 -0.6500 0.0056 +vn 0.1292 0.6347 0.7619 +vn -0.5880 0.6508 -0.4803 +vn -0.4501 0.6400 -0.6228 +vn -0.5732 0.0681 0.8166 +vn 0.6044 -0.0274 -0.7962 +vn -0.7345 0.5630 -0.3789 +vn -0.8516 0.3420 -0.3971 +vn -0.8516 0.3421 -0.3972 +vn -0.8516 0.3420 -0.3972 +vn 0.8484 -0.3516 0.3957 +vn 0.8500 -0.3469 0.3964 +vn -0.8547 0.3324 -0.3987 +vn -0.8532 0.3373 -0.3979 +vn -0.4277 -0.0156 0.9038 +vn 0.4226 0.0001 -0.9063 +vn -0.8516 0.3421 -0.3971 +vn 0.2620 0.9397 -0.2199 +vn -0.2620 -0.9397 0.2198 +vn 0.7198 -0.3420 -0.6040 +vn 0.7198 -0.3421 -0.6040 +vn -0.6428 -0.0000 -0.7660 +vn -0.6428 -0.0000 -0.7661 +vn -0.7198 0.3420 0.6040 +vn -0.7199 0.3420 0.6040 +vn 0.6428 -0.0000 0.7660 +vn 0.6428 0.0000 0.7660 +vn 0.6428 0.0000 0.7661 +vn 0.7172 -0.3516 -0.6017 +vn 0.7185 -0.3468 -0.6029 +vn -0.6470 -0.0157 -0.7623 +vn -0.6472 -0.0156 -0.7622 +vn -0.7225 0.3324 0.6062 +vn -0.7212 0.3372 0.6051 +vn 0.6382 -0.0156 0.7697 +vn 0.6384 -0.0157 0.7696 +vn -0.6428 0.0001 -0.7660 +vn -0.6429 0.0002 -0.7660 +vn -0.6428 0.0000 -0.7660 +vn -0.6428 -0.0001 -0.7660 +vn 0.6429 0.0001 0.7660 +vn 0.6427 -0.0000 0.7661 +vn 0.6427 -0.0001 0.7661 +vn -0.2621 -0.9397 0.2199 +vn 0.7199 -0.3419 -0.6040 +vn 0.2620 0.9397 -0.2198 +vn -0.7198 0.3421 0.6040 +vn -0.7199 0.3419 0.6041 +vn -0.2620 -0.9397 0.2199 +vn 0.0069 1.0000 -0.0050 +vn 0.0073 1.0000 -0.0052 +vn 0.0015 1.0000 -0.0012 +vn 0.0011 1.0000 -0.0009 +vn -0.7660 0.0000 0.6428 +vn 0.6156 0.0099 0.7880 +vn 0.6083 0.0169 0.7935 +vn 0.6187 0.0070 0.7856 +vn 0.6258 0.0000 0.7800 +vn 0.7660 0.0001 -0.6428 +vn 0.7660 -0.0000 -0.6428 +vn -0.6746 0.0084 -0.7382 +vn -0.6827 -0.0000 -0.7307 +vn -0.6711 0.0119 -0.7412 +vn -0.6628 0.0203 -0.7485 +vn 0.6258 0.0104 0.7799 +vn 0.7134 -0.3656 -0.5979 +vn 0.7137 -0.3656 -0.5975 +vn -0.6257 -0.0086 -0.7800 +vn -0.6428 -0.0018 -0.7660 +vn -0.7130 0.3654 0.5984 +vn -0.7105 0.3649 0.6017 +vn -0.7133 0.3645 0.5986 +vn -0.7136 0.3645 0.5983 +vn 0.6644 -0.0132 0.7473 +vn 0.6428 0.0003 0.7661 +vn 0.7127 -0.3654 -0.5988 +vn 0.7123 -0.3654 -0.5993 +vn -0.6629 0.0104 -0.7486 +vn -0.6427 0.0021 -0.7661 +vn -0.6427 -0.0000 -0.7661 +vn 0.6428 0.0022 0.7660 +vn 0.6428 0.0021 0.7660 +vn 0.6449 -0.0409 0.7631 +vn 0.6479 -0.0203 0.7615 +vn -0.6473 0.0409 -0.7611 +vn -0.6452 0.0203 -0.7638 +vn 0.6403 0.0338 0.7673 +vn 0.6385 0.0169 0.7694 +vn -0.6382 -0.0338 -0.7691 +vn -0.6406 -0.0167 -0.7677 +vn 0.0021 1.0000 0.0027 +vn 0.0012 1.0000 0.0012 +vn -0.0009 1.0000 -0.0029 +vn -0.0003 1.0000 -0.0016 +vn 0.7660 0.0000 -0.6428 +vn 0.7661 0.0000 -0.6428 +vn 0.7661 -0.0000 -0.6428 +vn -0.8020 0.5970 0.0175 +vn -0.7306 0.5969 0.3315 +vn -0.7194 0.6105 0.3313 +vn -0.7608 0.6423 0.0932 +vn -0.7003 -0.7125 0.0436 +vn -0.7003 -0.7125 0.0437 +vn -0.6849 -0.3683 -0.6288 +vn 0.2658 -0.1993 0.9432 +vn 0.2991 -0.1648 0.9399 +vn 0.0356 -0.4106 0.9111 +vn 0.7005 0.7123 -0.0437 +vn 0.6070 0.7402 -0.2892 +vn -0.2614 0.2035 -0.9435 +vn -0.2275 0.2373 -0.9444 +vn 0.0057 0.4440 -0.8960 +vn -0.6359 0.4701 0.6121 +vn -0.6332 0.5449 0.5497 +vn -0.3161 -0.6499 0.6912 +vn 0.7451 0.6347 0.2049 +vn -0.6838 0.6508 0.3300 +vn -0.7547 0.6400 0.1447 +vn 0.4978 0.0681 0.8646 +vn -0.4661 -0.0274 -0.8843 +vn -0.6538 0.5630 0.5055 +vn 0.7198 -0.3419 -0.6041 +vn 0.6427 0.0000 0.7661 +vn 0.7185 -0.3467 -0.6029 +vn -0.6471 -0.0156 -0.7623 +vn -0.7211 0.3373 0.6051 +vn 0.6383 -0.0156 0.7696 +vn -0.6428 0.0001 -0.7661 +vn -0.6428 0.0000 -0.7661 +vn -0.6428 0.0002 -0.7660 +vn 0.6428 -0.0000 0.7661 +vn 0.7199 -0.3420 -0.6040 +# 2554 vertex normals + +vt 0.6655 0.3799 0.0000 +vt 0.6655 0.2980 0.0000 +vt 0.6061 0.2980 0.0000 +vt 0.6061 0.4262 0.0000 +vt 0.3051 0.5851 0.0000 +vt 0.3051 0.5008 0.0000 +vt 0.1303 0.5008 0.0000 +vt 0.1303 0.5851 0.0000 +vt 0.0138 0.6936 0.0000 +vt 0.0138 0.6029 0.0000 +vt 0.2175 0.6029 0.0000 +vt 0.2175 0.6936 0.0000 +vt 0.5468 0.3799 0.0000 +vt 0.5468 0.2980 0.0000 +vt 0.3901 0.2905 0.0000 +vt 0.3901 0.4260 0.0000 +vt 0.3301 0.3771 0.0000 +vt 0.3301 0.2905 0.0000 +vt 0.7661 0.5332 0.0000 +vt 0.7866 0.5343 0.0000 +vt 0.7868 0.5807 0.0000 +vt 0.7665 0.5956 0.0000 +vt 0.8286 0.5719 0.0000 +vt 0.8412 0.5719 0.0000 +vt 0.8412 0.5898 0.0000 +vt 0.8286 0.5898 0.0000 +vt 0.8477 0.4969 0.0000 +vt 0.8540 0.4969 0.0000 +vt 0.8540 0.5534 0.0000 +vt 0.8477 0.5534 0.0000 +vt 0.8172 0.5898 0.0000 +vt 0.8172 0.5719 0.0000 +vt 0.7968 0.6174 0.0000 +vt 0.8003 0.6175 0.0000 +vt 0.8000 0.6420 0.0000 +vt 0.7964 0.6420 0.0000 +vt 0.8288 0.6193 0.0000 +vt 0.8388 0.6193 0.0000 +vt 0.8371 0.6353 0.0000 +vt 0.7885 0.5925 0.0000 +vt 0.8003 0.5971 0.0000 +vt 0.7661 0.6208 0.0000 +vt 0.7661 0.6088 0.0000 +vt 0.8388 0.7121 0.0000 +vt 0.8288 0.7121 0.0000 +vt 0.8378 0.6962 0.0000 +vt 0.8254 0.6657 0.0000 +vt 0.8353 0.6657 0.0000 +vt 0.7460 0.5809 0.0000 +vt 0.7457 0.5350 0.0000 +vt 0.8540 0.6098 0.0000 +vt 0.8477 0.6098 0.0000 +vt 0.7996 0.6666 0.0000 +vt 0.7960 0.6666 0.0000 +vt 0.7319 0.5971 0.0000 +vt 0.7436 0.5925 0.0000 +vt 0.8580 0.5104 0.0000 +vt 0.8580 0.4256 0.0000 +vt 0.8636 0.4256 0.0000 +vt 0.8636 0.5104 0.0000 +vt 0.8636 0.5566 0.0000 +vt 0.8580 0.5566 0.0000 +vt 0.8636 0.6027 0.0000 +vt 0.8580 0.6027 0.0000 +vt 0.8636 0.6868 0.0000 +vt 0.8580 0.6868 0.0000 +vt 0.8180 0.7079 0.0000 +vt 0.8146 0.7079 0.0000 +vt 0.8139 0.6724 0.0000 +vt 0.8173 0.6724 0.0000 +vt 0.8132 0.6370 0.0000 +vt 0.8166 0.6369 0.0000 +vt 0.7319 0.5428 0.0000 +vt 0.7436 0.5420 0.0000 +vt 0.8540 0.6835 0.0000 +vt 0.8477 0.6835 0.0000 +vt 0.8477 0.4232 0.0000 +vt 0.8540 0.4232 0.0000 +vt 0.7885 0.5415 0.0000 +vt 0.8003 0.5428 0.0000 +vt 0.8078 0.6185 0.0000 +vt 0.8129 0.6184 0.0000 +vt 0.8082 0.6371 0.0000 +vt 0.8089 0.6725 0.0000 +vt 0.8096 0.7080 0.0000 +vt 0.8150 0.7265 0.0000 +vt 0.8100 0.7266 0.0000 +vt 0.7928 0.6174 0.0000 +vt 0.7925 0.6420 0.0000 +vt 0.7921 0.6665 0.0000 +vt 0.8173 0.6091 0.0000 +vt 0.8174 0.6183 0.0000 +vt 0.8127 0.6092 0.0000 +vt 0.8076 0.6093 0.0000 +vt 0.8388 0.6115 0.0000 +vt 0.8288 0.6115 0.0000 +vt 0.7921 0.6707 0.0000 +vt 0.7960 0.6707 0.0000 +vt 0.7996 0.6707 0.0000 +vt 0.8004 0.6133 0.0000 +vt 0.7968 0.6133 0.0000 +vt 0.7929 0.6133 0.0000 +vt 0.8288 0.7200 0.0000 +vt 0.8388 0.7200 0.0000 +vt 0.8101 0.7357 0.0000 +vt 0.8152 0.7356 0.0000 +vt 0.8196 0.7264 0.0000 +vt 0.8198 0.7356 0.0000 +vt 0.1047 0.0697 0.0000 +vt 0.1047 0.0688 0.0000 +vt 0.2162 0.0689 0.0000 +vt 0.2162 0.0698 0.0000 +vt 0.1047 0.0655 0.0000 +vt 0.2162 0.0656 0.0000 +vt 0.1066 0.0572 0.0000 +vt 0.1066 0.0557 0.0000 +vt 0.2128 0.0558 0.0000 +vt 0.2128 0.0573 0.0000 +vt 0.1066 0.0500 0.0000 +vt 0.2128 0.0501 0.0000 +vt 0.2904 0.8785 0.0000 +vt 0.2914 0.9922 0.0000 +vt 0.2039 0.9913 0.0000 +vt 0.1986 0.8824 0.0000 +vt 0.2030 0.7411 0.0000 +vt 0.2963 0.7363 0.0000 +vt 0.2828 0.8546 0.0000 +vt 0.1939 0.8533 0.0000 +vt 0.5048 0.2825 0.0000 +vt 0.4197 0.2818 0.0000 +vt 0.4202 0.2737 0.0000 +vt 0.5057 0.2744 0.0000 +vt 0.7719 0.6692 0.0000 +vt 0.7719 0.6558 0.0000 +vt 0.6326 0.8027 0.0000 +vt 0.6326 0.8161 0.0000 +vt 0.4932 0.6692 0.0000 +vt 0.4932 0.6558 0.0000 +vt 0.8611 0.9882 0.0000 +vt 0.8258 0.9875 0.0000 +vt 0.8274 0.9418 0.0000 +vt 0.8643 0.9445 0.0000 +vt 0.1059 0.8750 0.0000 +vt 0.1176 0.9905 0.0000 +vt 0.0318 0.9943 0.0000 +vt 0.0116 0.8630 0.0000 +vt 0.3785 0.9940 0.0000 +vt 0.3838 0.8670 0.0000 +vt 0.1087 0.7337 0.0000 +vt 0.1063 0.8523 0.0000 +vt 0.0191 0.8558 0.0000 +vt 0.0127 0.7217 0.0000 +vt 0.3712 0.8569 0.0000 +vt 0.3909 0.7233 0.0000 +vt 0.6752 0.2842 0.0000 +vt 0.5900 0.2833 0.0000 +vt 0.5912 0.2752 0.0000 +vt 0.6767 0.2761 0.0000 +vt 0.3347 0.2731 0.0000 +vt 0.3345 0.2812 0.0000 +vt 0.5462 0.8911 0.0000 +vt 0.5462 0.8749 0.0000 +vt 0.3921 0.8749 0.0000 +vt 0.3921 0.8911 0.0000 +vt 0.3908 0.9002 0.0000 +vt 0.3908 0.9171 0.0000 +vt 0.5591 0.9171 0.0000 +vt 0.5591 0.9002 0.0000 +vt 0.6935 0.8698 0.0000 +vt 0.7024 0.8236 0.0000 +vt 0.7627 0.8394 0.0000 +vt 0.7620 0.8900 0.0000 +vt 0.8964 0.9891 0.0000 +vt 0.9012 0.9426 0.0000 +vt 0.7906 0.9872 0.0000 +vt 0.7900 0.9361 0.0000 +vt 0.8240 0.8246 0.0000 +vt 0.8310 0.8710 0.0000 +vt 0.8071 0.8858 0.0000 +vt 0.8403 0.8968 0.0000 +vt 0.7616 0.2643 0.0000 +vt 0.8091 0.2643 0.0000 +vt 0.8091 0.2168 0.0000 +vt 0.7616 0.2168 0.0000 +vt 0.4610 0.0664 0.0000 +vt 0.4159 0.0664 0.0000 +vt 0.4291 0.0051 0.0000 +vt 0.4700 0.0051 0.0000 +vt 0.5121 0.0630 0.0000 +vt 0.5104 0.0055 0.0000 +vt 0.4783 0.0055 0.0000 +vt 0.4765 0.0630 0.0000 +vt 0.4354 0.1270 0.0000 +vt 0.3819 0.1270 0.0000 +vt 0.4733 0.1197 0.0000 +vt 0.5153 0.1197 0.0000 +vt 0.1088 0.0839 0.0000 +vt 0.1088 0.0815 0.0000 +vt 0.1654 0.0805 0.0000 +vt 0.1654 0.0829 0.0000 +vt 0.1086 0.0727 0.0000 +vt 0.1652 0.0718 0.0000 +vt 0.9889 0.9266 0.0000 +vt 0.9971 0.9266 0.0000 +vt 0.9971 0.9742 0.0000 +vt 0.9889 0.9743 0.0000 +vt 0.9938 0.9809 0.0000 +vt 0.9658 0.9805 0.0000 +vt 0.9614 0.9740 0.0000 +vt 0.9614 0.9269 0.0000 +vt 0.9658 0.9203 0.0000 +vt 0.9938 0.9200 0.0000 +vt 0.9612 0.9824 0.0000 +vt 0.9570 0.9747 0.0000 +vt 0.9570 0.9261 0.0000 +vt 0.9612 0.9185 0.0000 +vt 0.9169 0.9742 0.0000 +vt 0.9169 0.9266 0.0000 +vt 0.9251 0.9266 0.0000 +vt 0.9251 0.9743 0.0000 +vt 0.9482 0.9805 0.0000 +vt 0.9202 0.9809 0.0000 +vt 0.9526 0.9740 0.0000 +vt 0.9526 0.9269 0.0000 +vt 0.9482 0.9203 0.0000 +vt 0.9202 0.9200 0.0000 +vt 0.9528 0.9824 0.0000 +vt 0.9528 0.9185 0.0000 +vt 0.9974 0.8603 0.0000 +vt 0.9974 0.9085 0.0000 +vt 0.9891 0.9085 0.0000 +vt 0.9891 0.8603 0.0000 +vt 0.9610 0.9085 0.0000 +vt 0.9611 0.8602 0.0000 +vt 0.9661 0.9151 0.0000 +vt 0.9941 0.9151 0.0000 +vt 0.9563 0.9083 0.0000 +vt 0.9563 0.8602 0.0000 +vt 0.9611 0.9169 0.0000 +vt 0.9563 0.9165 0.0000 +vt 0.9235 0.9085 0.0000 +vt 0.9152 0.9085 0.0000 +vt 0.9151 0.8603 0.0000 +vt 0.9234 0.8603 0.0000 +vt 0.9515 0.9085 0.0000 +vt 0.9514 0.8602 0.0000 +vt 0.9464 0.9151 0.0000 +vt 0.9184 0.9151 0.0000 +vt 0.9514 0.9169 0.0000 +vt 0.4631 0.5582 0.0000 +vt 0.4800 0.5614 0.0000 +vt 0.4793 0.5907 0.0000 +vt 0.4510 0.5875 0.0000 +vt 0.4489 0.5481 0.0000 +vt 0.4255 0.5698 0.0000 +vt 0.4399 0.5332 0.0000 +vt 0.4097 0.5428 0.0000 +vt 0.4381 0.5163 0.0000 +vt 0.4065 0.5108 0.0000 +vt 0.5197 0.5330 0.0000 +vt 0.5215 0.5160 0.0000 +vt 0.5531 0.5106 0.0000 +vt 0.5499 0.5426 0.0000 +vt 0.5108 0.5479 0.0000 +vt 0.5341 0.5695 0.0000 +vt 0.4968 0.5578 0.0000 +vt 0.5101 0.5840 0.0000 +vt 0.4797 0.5195 0.0000 +vt 0.4798 0.5195 0.0000 +vt 0.4798 0.6016 0.0000 +vt 0.4471 0.5975 0.0000 +vt 0.4176 0.5771 0.0000 +vt 0.3996 0.5464 0.0000 +vt 0.3950 0.5125 0.0000 +vt 0.5646 0.5123 0.0000 +vt 0.5600 0.5463 0.0000 +vt 0.5417 0.5769 0.0000 +vt 0.5143 0.5942 0.0000 +vt 0.6596 0.4838 0.0000 +vt 0.6986 0.4835 0.0000 +vt 0.6987 0.4996 0.0000 +vt 0.6597 0.4999 0.0000 +vt 0.6290 0.4840 0.0000 +vt 0.6291 0.5001 0.0000 +vt 0.5951 0.4842 0.0000 +vt 0.5952 0.5003 0.0000 +vt 0.5773 0.4843 0.0000 +vt 0.5774 0.5004 0.0000 +vt 0.6595 0.4677 0.0000 +vt 0.6985 0.4675 0.0000 +vt 0.6289 0.4679 0.0000 +vt 0.5950 0.4681 0.0000 +vt 0.5772 0.4683 0.0000 +vt 0.6594 0.4516 0.0000 +vt 0.6984 0.4514 0.0000 +vt 0.6288 0.4518 0.0000 +vt 0.5949 0.4520 0.0000 +vt 0.5771 0.4522 0.0000 +vt 0.6593 0.4356 0.0000 +vt 0.6983 0.4353 0.0000 +vt 0.6287 0.4357 0.0000 +vt 0.5948 0.4359 0.0000 +vt 0.5770 0.4361 0.0000 +vt 0.7533 0.2332 0.0000 +vt 0.7344 0.2341 0.0000 +vt 0.7338 0.2213 0.0000 +vt 0.7526 0.2204 0.0000 +vt 0.7242 0.0679 0.0000 +vt 0.7193 0.0023 0.0000 +vt 0.7081 0.0023 0.0000 +vt 0.7171 0.0679 0.0000 +vt 0.6996 0.0651 0.0000 +vt 0.6995 0.0019 0.0000 +vt 0.7062 0.0021 0.0000 +vt 0.7038 0.0652 0.0000 +vt 0.7083 0.1335 0.0000 +vt 0.7182 0.1335 0.0000 +vt 0.6996 0.1282 0.0000 +vt 0.6936 0.1280 0.0000 +vt 0.6258 0.5158 0.0000 +vt 0.6259 0.5055 0.0000 +vt 0.6675 0.5090 0.0000 +vt 0.6657 0.5191 0.0000 +vt 0.6254 0.5360 0.0000 +vt 0.6626 0.5388 0.0000 +vt 0.6246 0.5648 0.0000 +vt 0.6595 0.5672 0.0000 +vt 0.6237 0.5837 0.0000 +vt 0.6580 0.5860 0.0000 +vt 0.6232 0.5931 0.0000 +vt 0.6572 0.5954 0.0000 +vt 0.5757 0.5204 0.0000 +vt 0.5735 0.5114 0.0000 +vt 0.5783 0.5382 0.0000 +vt 0.5781 0.5653 0.0000 +vt 0.5757 0.5837 0.0000 +vt 0.5754 0.5931 0.0000 +vt 0.5225 0.4287 0.0000 +vt 0.5243 0.4192 0.0000 +vt 0.5715 0.4315 0.0000 +vt 0.5677 0.4395 0.0000 +vt 0.5189 0.4472 0.0000 +vt 0.5618 0.4553 0.0000 +vt 0.5148 0.4737 0.0000 +vt 0.5574 0.4802 0.0000 +vt 0.5128 0.4913 0.0000 +vt 0.5569 0.4974 0.0000 +vt 0.5118 0.5001 0.0000 +vt 0.5563 0.5061 0.0000 +vt 0.4825 0.4259 0.0000 +vt 0.4830 0.4164 0.0000 +vt 0.4813 0.4444 0.0000 +vt 0.4797 0.4710 0.0000 +vt 0.4786 0.4887 0.0000 +vt 0.4781 0.4974 0.0000 +vt 0.4423 0.4258 0.0000 +vt 0.4414 0.4164 0.0000 +vt 0.4439 0.4443 0.0000 +vt 0.4445 0.4711 0.0000 +vt 0.4441 0.4888 0.0000 +vt 0.4439 0.4975 0.0000 +vt 0.4023 0.4300 0.0000 +vt 0.3989 0.4212 0.0000 +vt 0.4076 0.4469 0.0000 +vt 0.4096 0.4719 0.0000 +vt 0.4094 0.4889 0.0000 +vt 0.4092 0.4976 0.0000 +vt 0.7092 0.5179 0.0000 +vt 0.7051 0.5270 0.0000 +vt 0.6984 0.5447 0.0000 +vt 0.6941 0.5714 0.0000 +vt 0.6924 0.5896 0.0000 +vt 0.6915 0.5989 0.0000 +vt 0.1069 0.0977 0.0000 +vt 0.1069 0.0953 0.0000 +vt 0.2136 0.0953 0.0000 +vt 0.2136 0.0977 0.0000 +vt 0.2145 0.1095 0.0000 +vt 0.2145 0.1119 0.0000 +vt 0.1078 0.1121 0.0000 +vt 0.1077 0.1097 0.0000 +vt 0.1069 0.0862 0.0000 +vt 0.2136 0.0862 0.0000 +vt 0.2144 0.1004 0.0000 +vt 0.1077 0.1007 0.0000 +vt 0.3056 0.3903 0.0000 +vt 0.3056 0.3114 0.0000 +vt 0.3162 0.3114 0.0000 +vt 0.3162 0.3903 0.0000 +vt 0.3056 0.2226 0.0000 +vt 0.3162 0.2226 0.0000 +vt 0.3162 0.4790 0.0000 +vt 0.3056 0.4790 0.0000 +vt 0.4444 0.1484 0.0000 +vt 0.4444 0.2592 0.0000 +vt 0.4324 0.2485 0.0000 +vt 0.4324 0.1484 0.0000 +vt 0.3337 0.2592 0.0000 +vt 0.3457 0.2485 0.0000 +vt 0.3337 0.1484 0.0000 +vt 0.3457 0.1484 0.0000 +vt 0.4664 0.1514 0.0000 +vt 0.4664 0.2622 0.0000 +vt 0.4509 0.2622 0.0000 +vt 0.4509 0.1514 0.0000 +vt 0.3528 0.1503 0.0000 +vt 0.4234 0.1503 0.0000 +vt 0.4234 0.2319 0.0000 +vt 0.3528 0.2319 0.0000 +vt 0.8774 0.7506 0.0000 +vt 0.9152 0.7151 0.0000 +vt 0.9157 0.7625 0.0000 +vt 0.8664 0.7883 0.0000 +vt 0.9124 0.7134 0.0000 +vt 0.8747 0.7491 0.0000 +vt 0.9680 0.7875 0.0000 +vt 0.9651 0.7879 0.0000 +vt 0.9535 0.7502 0.0000 +vt 0.9562 0.7487 0.0000 +vt 0.9157 0.8130 0.0000 +vt 0.9157 0.8098 0.0000 +vt 0.9526 0.8194 0.0000 +vt 0.9524 0.8226 0.0000 +vt 0.8634 0.7880 0.0000 +vt 0.8788 0.8197 0.0000 +vt 0.8757 0.8204 0.0000 +vt 0.9180 0.7134 0.0000 +vt 0.8791 0.8229 0.0000 +vt 0.9558 0.8200 0.0000 +vt 0.9673 0.1980 0.0000 +vt 0.9793 0.2576 0.0000 +vt 0.9947 0.2576 0.0000 +vt 0.9826 0.1980 0.0000 +vt 0.5207 0.1141 0.0000 +vt 0.5207 0.0595 0.0000 +vt 0.5433 0.0595 0.0000 +vt 0.5433 0.1141 0.0000 +vt 0.5433 0.0049 0.0000 +vt 0.5207 0.0049 0.0000 +vt 0.8891 0.2135 0.0000 +vt 0.8891 0.2610 0.0000 +vt 0.8303 0.2610 0.0000 +vt 0.8303 0.2135 0.0000 +vt 0.9673 0.3172 0.0000 +vt 0.9826 0.3172 0.0000 +vt 0.9082 0.6023 0.0000 +vt 0.9082 0.6496 0.0000 +vt 0.9043 0.6496 0.0000 +vt 0.9043 0.6023 0.0000 +vt 0.9136 0.6023 0.0000 +vt 0.9136 0.6496 0.0000 +vt 0.9174 0.6023 0.0000 +vt 0.9174 0.6496 0.0000 +vt 0.9335 0.6713 0.0000 +vt 0.9272 0.6930 0.0000 +vt 0.9135 0.6751 0.0000 +vt 0.9082 0.6526 0.0000 +vt 0.9043 0.6558 0.0000 +vt 0.9136 0.6526 0.0000 +vt 0.9174 0.6558 0.0000 +vt 0.9082 0.6596 0.0000 +vt 0.9041 0.6655 0.0000 +vt 0.9136 0.6596 0.0000 +vt 0.9173 0.6655 0.0000 +vt 0.5834 0.7132 0.0000 +vt 0.5834 0.6102 0.0000 +vt 0.6864 0.6102 0.0000 +vt 0.6864 0.7132 0.0000 +vt 0.0941 0.2745 0.0000 +vt 0.0152 0.2747 0.0000 +vt 0.0095 0.2691 0.0000 +vt 0.0998 0.2688 0.0000 +vt 0.0999 0.0105 0.0000 +vt 0.0096 0.0105 0.0000 +vt 0.1935 0.4614 0.0000 +vt 0.1158 0.4614 0.0000 +vt 0.1108 0.4564 0.0000 +vt 0.1985 0.4564 0.0000 +vt 0.1985 0.2278 0.0000 +vt 0.1108 0.2278 0.0000 +vt 0.2878 0.4646 0.0000 +vt 0.2157 0.4638 0.0000 +vt 0.2105 0.4586 0.0000 +vt 0.2931 0.4594 0.0000 +vt 0.2946 0.2231 0.0000 +vt 0.2121 0.2226 0.0000 +vt 0.0949 0.5244 0.0000 +vt 0.0151 0.5244 0.0000 +vt 0.0100 0.5192 0.0000 +vt 0.1001 0.5192 0.0000 +vt 0.1001 0.2840 0.0000 +vt 0.0100 0.2840 0.0000 +vt 0.9749 0.7086 0.0000 +vt 0.9729 0.7099 0.0000 +vt 0.8589 0.7099 0.0000 +vt 0.8569 0.7084 0.0000 +vt 0.8556 0.7010 0.0000 +vt 0.9762 0.7010 0.0000 +vt 0.9748 0.8312 0.0000 +vt 0.9729 0.8298 0.0000 +vt 0.9848 0.7089 0.0000 +vt 0.9848 0.8308 0.0000 +vt 0.8563 0.8313 0.0000 +vt 0.8589 0.8298 0.0000 +vt 0.9762 0.8387 0.0000 +vt 0.8556 0.8387 0.0000 +vt 0.8469 0.8308 0.0000 +vt 0.8469 0.7089 0.0000 +vt 0.6780 0.9586 0.0000 +vt 0.6780 0.9368 0.0000 +vt 0.4953 0.9368 0.0000 +vt 0.4953 0.9586 0.0000 +vt 0.9867 0.0995 0.0000 +vt 0.9867 0.1918 0.0000 +vt 0.9610 0.1918 0.0000 +vt 0.9562 0.0995 0.0000 +vt 0.9867 0.0071 0.0000 +vt 0.9610 0.0071 0.0000 +vt 0.5832 0.0338 0.0000 +vt 0.5731 0.0233 0.0000 +vt 0.5731 0.0692 0.0000 +vt 0.5832 0.0692 0.0000 +vt 0.5832 0.1046 0.0000 +vt 0.5731 0.1151 0.0000 +vt 0.6189 0.1151 0.0000 +vt 0.6189 0.1046 0.0000 +vt 0.6547 0.1046 0.0000 +vt 0.6648 0.1151 0.0000 +vt 0.6648 0.0692 0.0000 +vt 0.6547 0.0692 0.0000 +vt 0.6547 0.0338 0.0000 +vt 0.6648 0.0233 0.0000 +vt 0.6189 0.0233 0.0000 +vt 0.6189 0.0338 0.0000 +vt 0.5693 0.0201 0.0000 +vt 0.5553 0.0055 0.0000 +vt 0.6190 0.0055 0.0000 +vt 0.6190 0.0201 0.0000 +vt 0.6687 0.0201 0.0000 +vt 0.6828 0.0055 0.0000 +vt 0.6828 0.0693 0.0000 +vt 0.6687 0.0693 0.0000 +vt 0.6687 0.1185 0.0000 +vt 0.6828 0.1330 0.0000 +vt 0.6190 0.1330 0.0000 +vt 0.6190 0.1185 0.0000 +vt 0.5693 0.1185 0.0000 +vt 0.5553 0.1330 0.0000 +vt 0.5553 0.0693 0.0000 +vt 0.5693 0.0693 0.0000 +vt 0.4953 0.9908 0.0000 +vt 0.6780 0.9908 0.0000 +vt 0.2515 0.0074 0.0000 +vt 0.4019 0.0074 0.0000 +vt 0.4019 0.0321 0.0000 +vt 0.2515 0.0321 0.0000 +vt 0.0074 0.2768 0.0000 +vt 0.1019 0.2765 0.0000 +vt 0.2086 0.4657 0.0000 +vt 0.2949 0.4666 0.0000 +vt 0.8556 0.7009 0.0000 +vt 0.8569 0.7083 0.0000 +vt 0.8469 0.7088 0.0000 +vt 0.9848 0.7090 0.0000 +vt 0.9749 0.7087 0.0000 +vt 0.9761 0.7011 0.0000 +vt 0.9761 0.8386 0.0000 +vt 0.9748 0.8310 0.0000 +vt 0.9848 0.8307 0.0000 +vt 0.8469 0.8309 0.0000 +vt 0.8563 0.8314 0.0000 +vt 0.8556 0.8388 0.0000 +vt 0.4157 0.0073 0.0000 +vt 0.4157 0.0320 0.0000 +vt 0.2377 0.0073 0.0000 +vt 0.2377 0.0320 0.0000 +vt 0.9695 0.3196 0.0000 +vt 0.9833 0.3194 0.0000 +vt 0.9835 0.3421 0.0000 +vt 0.9697 0.3423 0.0000 +vt 0.9953 0.3194 0.0000 +vt 0.9955 0.3421 0.0000 +vt 0.4158 0.0492 0.0000 +vt 0.4020 0.0493 0.0000 +vt 0.2514 0.0493 0.0000 +vt 0.2376 0.0492 0.0000 +vt 0.9477 0.0973 0.0000 +vt 0.9477 0.0050 0.0000 +vt 0.9220 0.0050 0.0000 +vt 0.9173 0.0973 0.0000 +vt 0.9088 0.0951 0.0000 +vt 0.9088 0.0028 0.0000 +vt 0.8830 0.0028 0.0000 +vt 0.8783 0.0951 0.0000 +vt 0.8830 0.1875 0.0000 +vt 0.9088 0.1875 0.0000 +vt 0.9220 0.1896 0.0000 +vt 0.9477 0.1896 0.0000 +vt 0.8646 0.1042 0.0000 +vt 0.8487 0.1042 0.0000 +vt 0.8449 0.0032 0.0000 +vt 0.8736 0.0032 0.0000 +vt 0.8449 0.2052 0.0000 +vt 0.8736 0.2052 0.0000 +vt 0.7879 0.0971 0.0000 +vt 0.7980 0.0020 0.0000 +vt 0.7675 0.0020 0.0000 +vt 0.7707 0.0971 0.0000 +vt 0.7980 0.1922 0.0000 +vt 0.7675 0.2125 0.0000 +vt 0.7481 0.0989 0.0000 +vt 0.7574 0.0026 0.0000 +vt 0.7278 0.0026 0.0000 +vt 0.7317 0.0989 0.0000 +vt 0.7278 0.2157 0.0000 +vt 0.7574 0.2157 0.0000 +vt 0.8305 0.0992 0.0000 +vt 0.8132 0.0992 0.0000 +vt 0.8078 0.0042 0.0000 +vt 0.8384 0.0042 0.0000 +vt 0.8384 0.1942 0.0000 +vt 0.8078 0.2144 0.0000 +vt 0.1989 0.1865 0.0000 +vt 0.1989 0.1256 0.0000 +vt 0.1548 0.1256 0.0000 +vt 0.1548 0.2209 0.0000 +vt 0.7155 0.4921 0.0000 +vt 0.8089 0.4921 0.0000 +vt 0.8089 0.3683 0.0000 +vt 0.7155 0.3683 0.0000 +vt 0.1107 0.1865 0.0000 +vt 0.1107 0.1256 0.0000 +vt 0.1070 0.0309 0.0000 +vt 0.1070 0.0293 0.0000 +vt 0.2164 0.0298 0.0000 +vt 0.2164 0.0314 0.0000 +vt 0.1070 0.0235 0.0000 +vt 0.2165 0.0240 0.0000 +vt 0.5829 0.8473 0.0000 +vt 0.4785 0.8490 0.0000 +vt 0.4958 0.7292 0.0000 +vt 0.5339 0.7309 0.0000 +vt 0.7603 0.6599 0.0000 +vt 0.7603 0.6484 0.0000 +vt 0.6335 0.7712 0.0000 +vt 0.6335 0.7827 0.0000 +vt 0.5066 0.6599 0.0000 +vt 0.5066 0.6484 0.0000 +vt 0.4059 0.7256 0.0000 +vt 0.3820 0.8592 0.0000 +vt 0.5198 0.6276 0.0000 +vt 0.3962 0.6307 0.0000 +vt 0.3962 0.6182 0.0000 +vt 0.5198 0.6150 0.0000 +vt 0.7003 0.8135 0.0000 +vt 0.7060 0.7674 0.0000 +vt 0.7662 0.7798 0.0000 +vt 0.7681 0.8297 0.0000 +vt 0.8258 0.7622 0.0000 +vt 0.8343 0.8077 0.0000 +vt 0.7218 0.3550 0.0000 +vt 0.7654 0.3550 0.0000 +vt 0.7654 0.3114 0.0000 +vt 0.7218 0.3114 0.0000 +vt 0.9328 0.2260 0.0000 +vt 0.9566 0.2281 0.0000 +vt 0.9524 0.1954 0.0000 +vt 0.9308 0.1935 0.0000 +vt 0.9261 0.2345 0.0000 +vt 0.9251 0.1942 0.0000 +vt 0.9052 0.1942 0.0000 +vt 0.9041 0.2345 0.0000 +vt 0.9435 0.2588 0.0000 +vt 0.9717 0.2613 0.0000 +vt 0.9021 0.2743 0.0000 +vt 0.9281 0.2743 0.0000 +vt 0.2118 0.0436 0.0000 +vt 0.2118 0.0463 0.0000 +vt 0.1061 0.0468 0.0000 +vt 0.1060 0.0440 0.0000 +vt 0.2118 0.0334 0.0000 +vt 0.1060 0.0339 0.0000 +vt 0.1074 0.0204 0.0000 +vt 0.1074 0.0178 0.0000 +vt 0.2135 0.0178 0.0000 +vt 0.2135 0.0204 0.0000 +vt 0.1074 0.0081 0.0000 +vt 0.2135 0.0081 0.0000 +vt 0.8539 0.8870 0.0000 +vt 0.8785 0.8648 0.0000 +vt 0.8783 0.8952 0.0000 +vt 0.8464 0.9111 0.0000 +vt 0.8768 0.8636 0.0000 +vt 0.8522 0.8861 0.0000 +vt 0.9120 0.9113 0.0000 +vt 0.9101 0.9115 0.0000 +vt 0.9029 0.8873 0.0000 +vt 0.9046 0.8864 0.0000 +vt 0.8782 0.9276 0.0000 +vt 0.8782 0.9255 0.0000 +vt 0.9019 0.9317 0.0000 +vt 0.9017 0.9337 0.0000 +vt 0.8445 0.9109 0.0000 +vt 0.8543 0.9314 0.0000 +vt 0.8522 0.9318 0.0000 +vt 0.8803 0.8636 0.0000 +vt 0.8545 0.9334 0.0000 +vt 0.9040 0.9321 0.0000 +vt 17.5506 -12.4380 0.0000 +vt 18.4998 -11.9652 0.0000 +vt 19.1406 -12.0361 0.0000 +vt 17.5506 -12.9652 0.0000 +vt 20.2520 -12.9121 0.0000 +vt 19.9949 -11.2325 0.0000 +vt 19.4018 -11.2480 0.0000 +vt 19.4583 -12.9329 0.0000 +vt 18.3953 -11.6402 0.0000 +vt 18.9312 -11.6356 0.0000 +vt 18.7947 -9.8062 0.0000 +vt 18.3941 -9.8096 0.0000 +vt 0.8020 0.3054 0.0000 +vt 0.7651 0.3054 0.0000 +vt 0.7651 0.2802 0.0000 +vt 0.8020 0.2802 0.0000 +vt 0.6098 0.1948 0.0000 +vt 0.6195 0.1948 0.0000 +vt 0.6204 0.1386 0.0000 +vt 0.6079 0.1386 0.0000 +vt 0.6073 0.2476 0.0000 +vt 0.6211 0.2476 0.0000 +vt 0.6498 0.1976 0.0000 +vt 0.6595 0.1976 0.0000 +vt 0.6584 0.1393 0.0000 +vt 0.6457 0.1393 0.0000 +vt 0.6457 0.2525 0.0000 +vt 0.6584 0.2525 0.0000 +vt 0.6594 0.1976 0.0000 +vt 0.6497 0.1976 0.0000 +vt 0.6456 0.1393 0.0000 +vt 0.6583 0.1393 0.0000 +vt 0.6583 0.2525 0.0000 +vt 0.6456 0.2525 0.0000 +vt 0.8100 0.3534 0.0000 +vt 0.7732 0.3534 0.0000 +vt 0.7732 0.3159 0.0000 +vt 0.8100 0.3159 0.0000 +vt 0.5880 0.1906 0.0000 +vt 0.5942 0.1906 0.0000 +vt 0.6003 0.1394 0.0000 +vt 0.5925 0.1394 0.0000 +vt 0.5925 0.2451 0.0000 +vt 0.6003 0.2451 0.0000 +vt 0.6658 0.1976 0.0000 +vt 0.6754 0.1976 0.0000 +vt 0.6772 0.1393 0.0000 +vt 0.6645 0.1393 0.0000 +vt 0.6615 0.2598 0.0000 +vt 0.6742 0.2598 0.0000 +vt 0.6657 0.1976 0.0000 +vt 0.6644 0.1393 0.0000 +vt 0.6614 0.2598 0.0000 +vt 0.5376 0.2024 0.0000 +vt 0.5295 0.2030 0.0000 +vt 0.5169 0.1370 0.0000 +vt 0.5275 0.1362 0.0000 +vt 0.5326 0.2696 0.0000 +vt 0.5220 0.2704 0.0000 +vt 0.7032 0.2002 0.0000 +vt 0.7152 0.1997 0.0000 +vt 0.7202 0.1395 0.0000 +vt 0.7045 0.1401 0.0000 +vt 0.7085 0.2605 0.0000 +vt 0.7243 0.2599 0.0000 +vt 0.7152 0.1998 0.0000 +vt 0.7202 0.1396 0.0000 +vt 0.7243 0.2600 0.0000 +vt 0.7085 0.2606 0.0000 +vt 0.4828 0.1920 0.0000 +vt 0.4914 0.1920 0.0000 +vt 0.4856 0.1299 0.0000 +vt 0.4743 0.1298 0.0000 +vt 0.4700 0.2539 0.0000 +vt 0.4813 0.2540 0.0000 +vt 0.5126 0.1996 0.0000 +vt 0.4998 0.1992 0.0000 +vt 0.4939 0.1366 0.0000 +vt 0.5109 0.1372 0.0000 +vt 0.5065 0.2620 0.0000 +vt 0.4896 0.2615 0.0000 +vt 0.4914 0.1925 0.0000 +vt 0.4828 0.1924 0.0000 +vt 0.4742 0.1304 0.0000 +vt 0.4856 0.1305 0.0000 +vt 0.4813 0.2545 0.0000 +vt 0.4700 0.2545 0.0000 +vt 0.5126 0.1997 0.0000 +vt 0.4939 0.1367 0.0000 +vt 0.5065 0.2621 0.0000 +vt 0.8538 0.3510 0.0000 +vt 0.8169 0.3510 0.0000 +vt 0.8169 0.3091 0.0000 +vt 0.8538 0.3091 0.0000 +vt 0.5695 0.1957 0.0000 +vt 0.5780 0.1957 0.0000 +vt 0.5843 0.1365 0.0000 +vt 0.5731 0.1365 0.0000 +vt 0.5731 0.2630 0.0000 +vt 0.5843 0.2630 0.0000 +vt 0.6833 0.1976 0.0000 +vt 0.6930 0.1976 0.0000 +vt 0.6945 0.1393 0.0000 +vt 0.6818 0.1393 0.0000 +vt 0.6818 0.2640 0.0000 +vt 0.6945 0.2640 0.0000 +vt 0.6929 0.1976 0.0000 +vt 0.6817 0.1393 0.0000 +vt 0.6944 0.1393 0.0000 +vt 0.6944 0.2640 0.0000 +vt 0.6817 0.2640 0.0000 +vt 0.8112 0.3025 0.0000 +vt 0.8104 0.2685 0.0000 +vt 0.8495 0.2679 0.0000 +vt 0.8503 0.3018 0.0000 +vt 0.6334 0.2065 0.0000 +vt 0.6409 0.2065 0.0000 +vt 0.6363 0.1400 0.0000 +vt 0.6264 0.1400 0.0000 +vt 0.6264 0.2658 0.0000 +vt 0.6363 0.2658 0.0000 +vt 0.6458 0.1393 0.0000 +vt 0.6458 0.2525 0.0000 +vt 0.8599 0.3147 0.0000 +vt 0.8591 0.2734 0.0000 +vt 0.8876 0.2730 0.0000 +vt 0.8884 0.3143 0.0000 +vt 0.5505 0.2039 0.0000 +vt 0.5603 0.2039 0.0000 +vt 0.5620 0.1345 0.0000 +vt 0.5490 0.1345 0.0000 +vt 0.5444 0.2732 0.0000 +vt 0.5665 0.2732 0.0000 +vt 0.6499 0.1976 0.0000 +vt 0.6585 0.1393 0.0000 +vt 0.9218 0.6342 0.0000 +vt 0.9286 0.6561 0.0000 +vt 0.9576 0.6342 0.0000 +vt 0.4434 0.7103 0.0000 +vt 0.4434 0.7035 0.0000 +vt 0.4750 0.7035 0.0000 +vt 0.4750 0.7103 0.0000 +vt 0.1709 0.7103 0.0000 +vt 0.1709 0.7035 0.0000 +vt 0.2008 0.7035 0.0000 +vt 0.2008 0.7103 0.0000 +vt 0.2299 0.7035 0.0000 +vt 0.2299 0.7103 0.0000 +vt 0.2598 0.7035 0.0000 +vt 0.2598 0.7103 0.0000 +vt 0.2914 0.7035 0.0000 +vt 0.2914 0.7103 0.0000 +vt 0.3230 0.7035 0.0000 +vt 0.3230 0.7103 0.0000 +vt 0.3529 0.7035 0.0000 +vt 0.3529 0.7103 0.0000 +vt 0.3819 0.7035 0.0000 +vt 0.3819 0.7103 0.0000 +vt 0.4119 0.7035 0.0000 +vt 0.4119 0.7103 0.0000 +vt 0.9866 0.6124 0.0000 +vt 0.9934 0.6342 0.0000 +vt 0.9866 0.6561 0.0000 +vt 0.9687 0.6696 0.0000 +vt 0.9286 0.6124 0.0000 +vt 0.9687 0.5989 0.0000 +vt 0.9465 0.6696 0.0000 +vt 0.9465 0.5989 0.0000 +vt 0.8958 0.6005 0.0000 +vt 0.8832 0.6005 0.0000 +vt 0.8832 0.6195 0.0000 +vt 0.8958 0.6195 0.0000 +vt 0.8796 0.4709 0.0000 +vt 0.8714 0.4709 0.0000 +vt 0.8714 0.5890 0.0000 +vt 0.8796 0.5890 0.0000 +vt 0.8836 0.4716 0.0000 +vt 0.8950 0.4716 0.0000 +vt 0.8950 0.5947 0.0000 +vt 0.8836 0.5947 0.0000 +vt 0.9506 0.4767 0.0000 +vt 0.9378 0.4727 0.0000 +vt 0.9267 0.4894 0.0000 +vt 0.9467 0.4944 0.0000 +vt 0.9598 0.4779 0.0000 +vt 0.9572 0.4957 0.0000 +vt 0.9742 0.4789 0.0000 +vt 0.9778 0.4971 0.0000 +vt 0.9810 0.4776 0.0000 +vt 0.9884 0.4959 0.0000 +vt 0.9501 0.3524 0.0000 +vt 0.9360 0.3511 0.0000 +vt 0.9285 0.3709 0.0000 +vt 0.9509 0.3719 0.0000 +vt 0.9590 0.3514 0.0000 +vt 0.9623 0.3707 0.0000 +vt 0.9674 0.3502 0.0000 +vt 0.9737 0.3692 0.0000 +vt 0.9744 0.3479 0.0000 +vt 0.9848 0.3662 0.0000 +vt 0.9210 0.5089 0.0000 +vt 0.9255 0.5375 0.0000 +vt 0.9443 0.5347 0.0000 +vt 0.9443 0.5102 0.0000 +vt 0.9532 0.5351 0.0000 +vt 0.9553 0.5111 0.0000 +vt 0.9715 0.5382 0.0000 +vt 0.9781 0.5139 0.0000 +vt 0.9802 0.5424 0.0000 +vt 0.9900 0.5156 0.0000 +vt 0.9267 0.3919 0.0000 +vt 0.9356 0.4208 0.0000 +vt 0.9554 0.4150 0.0000 +vt 0.9520 0.3890 0.0000 +vt 0.9653 0.4142 0.0000 +vt 0.9643 0.3879 0.0000 +vt 0.9754 0.4143 0.0000 +vt 0.9768 0.3871 0.0000 +vt 0.9858 0.4163 0.0000 +vt 0.9899 0.3864 0.0000 +vt 0.9332 0.5471 0.0000 +vt 0.9455 0.5444 0.0000 +vt 0.9529 0.5446 0.0000 +vt 0.9658 0.5468 0.0000 +vt 0.9714 0.5502 0.0000 +vt 0.9446 0.4298 0.0000 +vt 0.9572 0.4254 0.0000 +vt 0.9649 0.4248 0.0000 +vt 0.9724 0.4249 0.0000 +vt 0.9792 0.4268 0.0000 +vt 0.9375 0.5535 0.0000 +vt 0.9465 0.5523 0.0000 +vt 0.9523 0.5525 0.0000 +vt 0.9618 0.5539 0.0000 +vt 0.9662 0.5554 0.0000 +vt 0.9497 0.4362 0.0000 +vt 0.9590 0.4338 0.0000 +vt 0.9648 0.4332 0.0000 +vt 0.9704 0.4331 0.0000 +vt 0.9753 0.4336 0.0000 +vt 0.9371 0.5550 0.0000 +vt 0.9463 0.5550 0.0000 +vt 0.9522 0.5551 0.0000 +vt 0.9617 0.5565 0.0000 +vt 0.9663 0.5566 0.0000 +vt 0.9497 0.4381 0.0000 +vt 0.9592 0.4368 0.0000 +vt 0.9651 0.4360 0.0000 +vt 0.9707 0.4357 0.0000 +vt 0.9756 0.4351 0.0000 +vt 0.9328 0.5621 0.0000 +vt 0.9455 0.5618 0.0000 +vt 0.9513 0.5618 0.0000 +vt 0.9635 0.5637 0.0000 +vt 0.9699 0.5637 0.0000 +vt 0.9464 0.4463 0.0000 +vt 0.9601 0.4443 0.0000 +vt 0.9665 0.4434 0.0000 +vt 0.9732 0.4431 0.0000 +vt 0.9801 0.4421 0.0000 +vt 0.9336 0.5747 0.0000 +vt 0.9455 0.5712 0.0000 +vt 0.9507 0.5709 0.0000 +vt 0.9625 0.5735 0.0000 +vt 0.9682 0.5760 0.0000 +vt 0.9488 0.4591 0.0000 +vt 0.9615 0.4542 0.0000 +vt 0.9677 0.4536 0.0000 +vt 0.9741 0.4538 0.0000 +vt 0.9809 0.4549 0.0000 +vt 0.9407 0.5825 0.0000 +vt 0.9470 0.5785 0.0000 +vt 0.9509 0.5781 0.0000 +vt 0.9582 0.5803 0.0000 +vt 0.9609 0.5830 0.0000 +vt 0.9565 0.4665 0.0000 +vt 0.9633 0.4620 0.0000 +vt 0.9676 0.4616 0.0000 +vt 0.9719 0.4622 0.0000 +vt 0.9756 0.4641 0.0000 +vt 0.9509 0.5867 0.0000 +vt 0.9668 0.4710 0.0000 +vt 0.9343 0.4652 0.0000 +vt 0.9352 0.4618 0.0000 +vt 0.9158 0.4614 0.0000 +vt 0.9150 0.4649 0.0000 +vt 0.9353 0.4583 0.0000 +vt 0.9158 0.4579 0.0000 +vt 0.9345 0.4549 0.0000 +vt 0.9153 0.4544 0.0000 +vt 0.8888 0.4581 0.0000 +vt 0.8880 0.4615 0.0000 +vt 0.8886 0.4546 0.0000 +vt 0.8884 0.4511 0.0000 +vt 0.8855 0.4593 0.0000 +vt 0.8853 0.4536 0.0000 +vt 0.8833 0.4566 0.0000 +vt 0.9201 0.5346 0.0000 +vt 0.9201 0.5950 0.0000 +vt 0.9054 0.5950 0.0000 +vt 0.9054 0.5346 0.0000 +vt 0.9061 0.4693 0.0000 +vt 0.9061 0.5278 0.0000 +vt 0.9167 0.5278 0.0000 +vt 0.9167 0.4693 0.0000 +vt 0.4954 0.3295 0.0000 +vt 0.4954 0.3372 0.0000 +vt 0.4998 0.3372 0.0000 +vt 0.4998 0.3295 0.0000 +vt 0.4905 0.3389 0.0000 +vt 0.4905 0.3465 0.0000 +vt 0.5029 0.3466 0.0000 +vt 0.5030 0.3390 0.0000 +vt 0.5409 0.3573 0.0000 +vt 0.5409 0.3495 0.0000 +vt 0.5218 0.3495 0.0000 +vt 0.5218 0.3573 0.0000 +vt 0.5278 0.3857 0.0000 +vt 0.5277 0.3906 0.0000 +vt 0.5086 0.3911 0.0000 +vt 0.5088 0.3863 0.0000 +vt 0.4148 0.3557 0.0000 +vt 0.5182 0.3573 0.0000 +vt 0.5182 0.3495 0.0000 +vt 0.4148 0.3511 0.0000 +vt 0.4012 0.3904 0.0000 +vt 0.5052 0.3864 0.0000 +vt 0.5050 0.3912 0.0000 +vt 0.4011 0.3932 0.0000 +vt 0.5151 0.2984 0.0000 +vt 0.5151 0.3464 0.0000 +vt 0.5066 0.3464 0.0000 +vt 0.5066 0.2984 0.0000 +vt 0.5182 0.3817 0.0000 +vt 0.5218 0.3817 0.0000 +vt 0.5218 0.3250 0.0000 +vt 0.5182 0.3250 0.0000 +vt 0.2714 0.0585 0.0000 +vt 0.2715 0.0626 0.0000 +vt 0.2256 0.0626 0.0000 +vt 0.2257 0.0585 0.0000 +vt 0.3377 0.0529 0.0000 +vt 0.3377 0.0578 0.0000 +vt 0.2942 0.0578 0.0000 +vt 0.2942 0.0529 0.0000 +vt 0.3393 0.1174 0.0000 +vt 0.3336 0.1174 0.0000 +vt 0.3336 0.1244 0.0000 +vt 0.3393 0.1244 0.0000 +vt 0.2940 0.0529 0.0000 +vt 0.2941 0.0578 0.0000 +vt 0.3378 0.0578 0.0000 +vt 0.3379 0.0529 0.0000 +vt 0.2837 0.1158 0.0000 +vt 0.2837 0.1205 0.0000 +vt 0.2759 0.1205 0.0000 +vt 0.2759 0.1158 0.0000 +vt 0.2174 0.1205 0.0000 +vt 0.2174 0.1158 0.0000 +vt 0.2252 0.1158 0.0000 +vt 0.2252 0.1205 0.0000 +vt 0.3444 0.0529 0.0000 +vt 0.3444 0.0578 0.0000 +vt 0.2875 0.0578 0.0000 +vt 0.2875 0.0529 0.0000 +vt 0.3058 0.1905 0.0000 +vt 0.3116 0.1905 0.0000 +vt 0.3377 0.1040 0.0000 +vt 0.3444 0.1041 0.0000 +vt 0.3336 0.1243 0.0000 +vt 0.3116 0.1906 0.0000 +vt 0.3444 0.1040 0.0000 +vt 0.3377 0.1041 0.0000 +vt 0.2942 0.1042 0.0000 +vt 0.2875 0.1042 0.0000 +vt 0.3058 0.1906 0.0000 +vt 0.3116 0.1907 0.0000 +vt 0.2874 0.0578 0.0000 +vt 0.2875 0.1041 0.0000 +vt 0.2942 0.1041 0.0000 +vt 0.3058 0.1997 0.0000 +vt 0.3116 0.1997 0.0000 +vt 0.3444 0.1105 0.0000 +vt 0.3377 0.1105 0.0000 +vt 0.2942 0.1105 0.0000 +vt 0.2875 0.1105 0.0000 +vt 0.2689 0.1124 0.0000 +vt 0.2798 0.1124 0.0000 +vt 0.2798 0.1020 0.0000 +vt 0.2689 0.1020 0.0000 +vt 0.2252 0.1417 0.0000 +vt 0.2174 0.1417 0.0000 +vt 0.2797 0.1906 0.0000 +vt 0.2797 0.1997 0.0000 +vt 0.2837 0.1417 0.0000 +vt 0.2759 0.1417 0.0000 +vt 0.2797 0.1905 0.0000 +vt 0.2877 0.1174 0.0000 +vt 0.2877 0.1244 0.0000 +vt 0.2877 0.1175 0.0000 +vt 0.2877 0.1243 0.0000 +vt 0.2255 0.0955 0.0000 +vt 0.2185 0.0955 0.0000 +vt 0.2186 0.0626 0.0000 +vt 0.2786 0.0955 0.0000 +vt 0.2715 0.0955 0.0000 +vt 0.2785 0.0626 0.0000 +# 1115 texture coords + +o barracks +g barracks +f 1/1/1 2/2/2 3/3/3 +f 3/3/3 4/4/4 1/1/1 +f 5/5/5 6/6/5 7/7/5 +f 7/7/5 8/8/5 5/5/5 +f 9/9/6 10/10/6 2/11/6 +f 2/11/6 1/12/6 9/9/6 +f 5/13/7 4/4/4 3/3/3 +f 3/3/3 6/14/2 5/13/7 +f 11/15/8 12/16/8 8/17/8 +f 8/17/8 7/18/8 11/15/8 +f 13/19/9 14/20/10 15/21/11 +f 15/21/11 16/22/12 13/19/9 +f 17/23/13 18/24/13 19/25/13 +f 19/25/13 20/26/13 17/23/13 +f 21/27/14 22/28/14 23/29/15 +f 23/29/15 24/30/15 21/27/14 +f 25/26/16 26/31/16 27/32/16 +f 27/32/16 28/23/16 25/26/16 +f 29/33/17 30/34/17 31/35/18 +f 31/35/18 32/36/18 29/33/17 +f 33/37/2 34/38/2 35/39/2 +f 36/40/2 21/41/2 24/42/2 +f 24/42/2 37/43/2 36/40/2 +f 38/44/2 39/45/2 40/46/2 +f 40/46/2 39/45/2 41/47/2 +f 41/47/2 42/48/2 40/46/2 +f 13/19/9 16/22/12 43/49/19 +f 43/49/19 44/50/20 13/19/9 +f 24/30/15 23/29/15 45/51/21 +f 45/51/21 46/52/21 24/30/15 +f 32/36/18 31/35/18 47/53/22 +f 47/53/22 48/54/22 32/36/18 +f 37/43/2 24/42/2 46/55/2 +f 46/55/2 49/56/2 37/43/2 +f 35/39/2 42/48/2 41/47/2 +f 41/47/2 33/37/2 35/39/2 +f 15/57/16 14/58/16 50/59/16 +f 50/59/16 36/60/16 15/57/16 +f 15/57/23 36/60/23 37/61/23 +f 37/61/23 16/62/23 15/57/23 +f 16/62/24 37/61/24 49/63/24 +f 49/63/24 43/64/24 16/62/24 +f 43/64/13 49/63/13 51/65/13 +f 51/65/13 44/66/13 43/64/13 +f 44/67/25 51/68/25 52/69/25 +f 52/69/26 13/70/26 44/67/26 +f 13/70/27 52/69/27 50/71/27 +f 50/71/28 14/72/28 13/70/28 +f 53/73/29 51/74/29 49/56/29 +f 49/56/30 46/55/30 53/73/30 +f 45/51/16 54/75/16 53/76/16 +f 53/76/16 46/52/16 45/51/16 +f 55/77/13 56/78/13 22/28/13 +f 22/28/13 21/27/13 55/77/13 +f 36/40/31 50/79/31 55/80/31 +f 55/80/32 21/41/32 36/40/32 +f 57/32/13 17/23/13 20/26/13 +f 20/26/13 58/31/13 57/32/13 +f 34/81/33 55/82/33 50/71/33 +f 50/71/33 35/83/33 34/81/33 +f 35/83/28 50/71/28 52/69/28 +f 52/69/34 42/84/34 35/83/34 +f 42/84/25 52/69/25 51/68/25 +f 51/68/25 40/85/25 42/84/25 +f 40/85/35 51/68/35 53/86/35 +f 53/86/35 38/87/35 40/85/35 +f 59/25/16 25/26/16 28/23/16 +f 28/23/16 60/24/16 59/25/16 +f 39/88/17 29/33/17 32/36/17 +f 32/36/17 41/89/17 39/88/17 +f 41/89/22 32/36/22 48/54/22 +f 48/54/22 33/90/22 41/89/22 +f 19/91/36 56/92/36 55/82/36 +f 55/82/36 20/93/36 19/91/36 +f 20/93/36 55/82/36 34/81/36 +f 34/81/36 58/94/36 20/93/36 +f 58/95/2 34/38/2 33/37/2 +f 33/37/2 57/96/2 58/95/2 +f 57/97/18 33/90/18 48/54/18 +f 48/54/18 17/98/18 57/97/18 +f 17/98/18 48/54/18 47/53/18 +f 47/53/18 18/99/18 17/98/18 +f 27/100/18 30/34/18 29/33/18 +f 29/33/18 28/101/18 27/100/18 +f 28/101/18 29/33/18 39/88/18 +f 39/88/18 60/102/18 28/101/18 +f 60/103/2 39/45/2 38/44/2 +f 38/44/2 59/104/2 60/103/2 +f 59/105/36 38/87/36 53/86/36 +f 53/86/36 25/106/36 59/105/36 +f 25/106/36 53/86/36 54/107/36 +f 54/107/36 26/108/36 25/106/36 +f 61/109/15 62/110/15 63/111/15 +f 63/111/15 64/112/15 61/109/15 +f 62/110/13 65/113/13 66/114/13 +f 66/114/13 63/111/13 62/110/13 +f 67/115/37 68/116/37 69/117/15 +f 69/117/15 70/118/15 67/115/37 +f 68/116/2 71/119/2 72/120/2 +f 72/120/2 69/117/2 68/116/2 +f 73/121/38 74/122/39 75/123/40 +f 75/123/40 76/124/41 73/121/38 +f 76/125/41 77/126/42 78/127/43 +f 78/127/43 79/128/44 76/125/41 +f 75/129/16 74/130/16 80/131/16 +f 80/131/6 81/132/6 75/129/6 +f 82/133/45 83/134/45 84/135/45 +f 84/135/46 85/136/46 82/133/46 +f 86/137/47 85/136/47 84/135/47 +f 84/135/47 87/138/47 86/137/47 +f 88/137/8 89/138/8 90/135/8 +f 90/135/8 91/136/8 88/137/8 +f 81/139/48 80/140/48 92/141/48 +f 92/141/49 93/142/49 81/139/49 +f 77/143/42 94/144/50 82/145/51 +f 82/145/51 85/146/52 77/143/42 +f 76/124/41 75/123/40 94/144/50 +f 94/144/50 77/143/42 76/124/41 +f 95/147/53 74/122/39 73/121/38 +f 73/121/38 91/148/54 95/147/53 +f 73/149/38 96/150/55 88/151/56 +f 88/151/56 91/152/54 73/149/38 +f 73/149/38 76/125/41 79/128/44 +f 79/128/44 96/150/55 73/149/38 +f 86/153/57 78/127/43 77/126/42 +f 77/126/42 85/154/52 86/153/57 +f 82/155/6 94/156/6 97/157/6 +f 97/157/6 83/158/6 82/155/6 +f 94/156/6 75/129/6 81/132/6 +f 81/132/6 97/157/6 94/156/6 +f 98/159/16 80/131/16 74/130/16 +f 74/130/16 95/160/16 98/159/16 +f 96/161/13 99/162/13 89/163/13 +f 89/163/13 88/164/13 96/161/13 +f 100/165/13 78/166/13 86/167/13 +f 86/167/13 87/168/13 100/165/13 +f 83/169/58 97/170/58 101/171/58 +f 101/171/59 84/172/59 83/169/59 +f 97/173/60 81/139/60 93/142/60 +f 93/142/61 101/174/61 97/173/61 +f 92/141/48 80/140/48 98/175/48 +f 98/175/62 90/176/62 92/141/62 +f 101/171/63 100/177/63 87/178/63 +f 87/178/64 84/172/64 101/171/64 +f 89/179/63 99/180/63 92/141/63 +f 92/141/65 90/176/65 89/179/65 +f 102/181/2 103/182/2 104/183/2 +f 104/183/2 105/184/2 102/181/2 +f 106/185/66 107/186/67 108/187/68 +f 108/187/68 109/188/68 106/185/66 +f 106/189/69 109/190/70 110/191/70 +f 110/191/70 111/192/69 106/189/69 +f 111/185/71 110/188/72 112/187/72 +f 112/187/72 113/186/73 111/185/71 +f 113/192/74 112/191/75 108/190/75 +f 108/190/75 107/189/74 113/192/74 +f 107/186/67 106/185/66 104/193/76 +f 104/193/76 103/194/76 107/186/67 +f 106/189/69 111/192/69 105/195/77 +f 105/195/77 104/196/77 106/189/69 +f 105/193/78 111/185/71 113/186/73 +f 113/186/73 102/194/78 105/193/78 +f 113/192/74 107/189/74 103/196/79 +f 103/196/79 102/195/79 113/192/74 +f 114/197/15 115/198/15 116/199/15 +f 116/199/15 117/200/15 114/197/15 +f 115/198/80 118/201/80 119/202/80 +f 119/202/80 116/199/80 115/198/80 +f 120/203/13 121/204/13 122/205/13 +f 122/205/13 123/206/13 120/203/13 +f 123/206/81 122/207/81 124/208/81 +f 124/208/82 125/209/82 123/206/82 +f 126/210/83 120/203/83 123/206/83 +f 123/206/83 125/209/83 126/210/83 +f 127/211/84 121/212/84 120/203/84 +f 120/203/85 126/210/85 127/211/85 +f 125/209/86 124/208/86 128/213/86 +f 128/213/87 129/214/87 125/209/87 +f 129/214/88 130/215/88 126/210/88 +f 126/210/88 125/209/88 129/214/88 +f 126/210/85 130/215/85 131/216/85 +f 131/216/89 127/211/89 126/210/89 +f 132/217/16 133/218/16 134/219/16 +f 134/219/16 135/220/16 132/217/16 +f 136/221/90 132/222/90 135/220/90 +f 135/220/86 137/223/86 136/221/86 +f 138/224/91 137/223/91 135/220/91 +f 135/220/91 134/219/91 138/224/91 +f 139/225/85 138/224/85 134/219/85 +f 134/219/85 133/226/85 139/225/85 +f 128/227/82 136/221/82 137/223/82 +f 137/223/92 129/214/92 128/227/92 +f 138/224/93 130/215/93 129/214/93 +f 129/214/93 137/223/93 138/224/93 +f 138/224/94 139/225/94 131/228/94 +f 131/228/95 130/215/95 138/224/95 +f 140/229/13 141/230/13 142/231/13 +f 142/231/13 143/232/13 140/229/13 +f 144/233/83 145/234/83 143/232/83 +f 143/232/83 142/231/83 144/233/83 +f 146/235/96 144/233/96 142/231/96 +f 142/231/96 141/236/96 146/235/96 +f 144/233/97 147/237/97 148/238/97 +f 148/238/97 145/234/97 144/233/97 +f 144/233/98 146/239/98 149/240/98 +f 149/240/99 147/237/99 144/233/99 +f 150/241/16 151/242/16 152/243/16 +f 152/243/16 153/244/16 150/241/16 +f 154/245/91 150/241/91 153/244/91 +f 153/244/91 155/246/91 154/245/91 +f 156/247/90 151/248/90 150/241/90 +f 150/241/96 154/245/96 156/247/96 +f 148/238/100 147/237/100 154/245/100 +f 154/245/100 155/246/100 148/238/100 +f 154/245/101 147/237/101 149/240/101 +f 149/240/96 156/249/96 154/245/96 +f 157/229/13 158/230/13 159/231/13 +f 159/231/13 160/232/13 157/229/13 +f 161/233/102 162/234/102 160/232/102 +f 160/232/103 159/231/103 161/233/103 +f 163/235/104 161/233/104 159/231/104 +f 159/231/105 158/236/105 163/235/105 +f 161/233/106 164/237/106 165/238/106 +f 165/238/106 162/234/106 161/233/106 +f 161/233/107 163/239/107 166/240/107 +f 166/240/108 164/237/108 161/233/108 +f 167/241/16 168/242/16 169/243/16 +f 169/243/6 170/244/6 167/241/6 +f 171/245/109 167/241/109 170/244/109 +f 170/244/110 172/246/110 171/245/110 +f 173/247/108 168/248/108 167/241/108 +f 167/241/111 171/245/111 173/247/111 +f 165/238/112 164/237/112 171/245/112 +f 171/245/112 172/246/112 165/238/112 +f 171/245/105 164/237/105 166/240/105 +f 166/240/113 173/249/113 171/245/113 +f 174/229/13 175/230/13 176/231/13 +f 176/231/13 177/232/13 174/229/13 +f 178/233/114 179/234/114 177/232/114 +f 177/232/114 176/231/114 178/233/114 +f 180/235/115 178/233/115 176/231/115 +f 176/231/115 175/236/115 180/235/115 +f 178/233/116 181/237/116 182/238/116 +f 182/238/117 179/234/117 178/233/117 +f 178/233/115 180/239/115 183/240/115 +f 183/240/118 181/237/118 178/233/118 +f 184/241/16 185/242/16 186/243/16 +f 186/243/16 187/244/16 184/241/16 +f 188/245/119 184/241/119 187/244/119 +f 187/244/119 189/246/119 188/245/119 +f 190/247/118 185/248/118 184/241/118 +f 184/241/118 188/245/118 190/247/118 +f 182/238/120 181/237/120 188/245/120 +f 188/245/121 189/246/121 182/238/121 +f 188/245/115 181/237/115 183/240/115 +f 183/240/118 190/249/118 188/245/118 +f 191/229/13 192/230/13 193/231/13 +f 193/231/13 194/232/13 191/229/13 +f 195/233/114 196/234/114 194/232/114 +f 194/232/114 193/231/114 195/233/114 +f 197/235/118 195/233/118 193/231/118 +f 193/231/118 192/236/118 197/235/118 +f 195/233/117 198/237/117 199/238/117 +f 199/238/117 196/234/117 195/233/117 +f 195/233/122 197/239/122 200/240/122 +f 200/240/115 198/237/115 195/233/115 +f 201/241/16 202/242/16 203/243/16 +f 203/243/16 204/244/16 201/241/16 +f 205/245/119 201/241/119 204/244/119 +f 204/244/123 206/246/123 205/245/123 +f 207/247/115 202/248/115 201/241/115 +f 201/241/115 205/245/115 207/247/115 +f 199/238/121 198/237/121 205/245/121 +f 205/245/121 206/246/121 199/238/121 +f 205/245/118 198/237/118 200/240/118 +f 200/240/124 207/249/124 205/245/124 +f 208/229/13 209/230/13 210/231/13 +f 210/231/13 211/232/13 208/229/13 +f 212/233/114 213/234/114 211/232/114 +f 211/232/114 210/231/114 212/233/114 +f 214/235/115 212/233/115 210/231/115 +f 210/231/115 209/236/115 214/235/115 +f 212/233/116 215/237/116 216/238/116 +f 216/238/117 213/234/117 212/233/117 +f 212/233/115 214/239/115 217/240/115 +f 217/240/115 215/237/115 212/233/115 +f 218/241/6 219/242/6 220/243/6 +f 220/243/6 221/244/6 218/241/6 +f 222/245/119 218/241/119 221/244/119 +f 221/244/119 223/246/119 222/245/119 +f 224/247/118 219/248/118 218/241/118 +f 218/241/118 222/245/118 224/247/118 +f 216/238/120 215/237/120 222/245/120 +f 222/245/121 223/246/121 216/238/121 +f 222/245/118 215/237/118 217/240/118 +f 217/240/118 224/249/118 222/245/118 +f 225/229/13 226/230/13 227/231/13 +f 227/231/13 228/232/13 225/229/13 +f 229/233/125 230/234/125 228/232/125 +f 228/232/125 227/231/125 229/233/125 +f 231/235/126 229/233/126 227/231/126 +f 227/231/126 226/236/126 231/235/126 +f 229/233/127 232/237/127 233/238/127 +f 233/238/128 230/234/128 229/233/128 +f 229/233/129 231/239/129 234/240/129 +f 234/240/129 232/237/129 229/233/129 +f 235/241/16 236/242/16 237/243/16 +f 237/243/16 238/244/16 235/241/16 +f 239/245/130 235/241/130 238/244/130 +f 238/244/130 240/246/130 239/245/130 +f 241/247/129 236/248/129 235/241/129 +f 235/241/129 239/245/129 241/247/129 +f 233/238/131 232/237/131 239/245/131 +f 239/245/132 240/246/132 233/238/132 +f 239/245/126 232/237/126 234/240/126 +f 234/240/126 241/249/126 239/245/126 +f 242/205/13 243/204/13 244/203/13 +f 244/203/5 245/206/5 242/205/5 +f 245/206/133 246/209/133 247/208/133 +f 247/208/134 242/207/134 245/206/134 +f 245/206/135 244/203/135 248/210/135 +f 248/210/135 246/209/135 245/206/135 +f 244/203/136 243/212/136 249/211/136 +f 249/211/137 248/210/137 244/203/137 +f 250/213/138 247/208/138 246/209/138 +f 246/209/139 251/214/139 250/213/139 +f 248/210/140 252/215/140 251/214/140 +f 251/214/140 246/209/140 248/210/140 +f 248/210/141 249/211/141 253/216/141 +f 253/216/136 252/215/136 248/210/136 +f 254/219/142 255/218/142 256/217/142 +f 256/217/6 257/220/6 254/219/6 +f 258/221/143 259/223/143 257/220/143 +f 257/220/144 256/222/144 258/221/144 +f 257/220/145 259/223/145 260/224/145 +f 260/224/145 254/219/145 257/220/145 +f 254/219/136 260/224/136 261/225/136 +f 261/225/136 255/226/136 254/219/136 +f 259/223/146 258/221/146 250/227/146 +f 250/227/147 251/214/147 259/223/147 +f 251/214/148 252/215/148 260/224/148 +f 260/224/148 259/223/148 251/214/148 +f 260/224/137 252/215/137 253/228/137 +f 253/228/149 261/225/149 260/224/149 +f 262/231/13 263/230/13 264/229/13 +f 264/229/13 265/232/13 262/231/13 +f 265/232/150 266/234/150 267/233/150 +f 267/233/150 262/231/150 265/232/150 +f 262/231/151 267/233/151 268/235/151 +f 268/235/151 263/236/151 262/231/151 +f 269/238/152 270/237/152 267/233/152 +f 267/233/153 266/234/153 269/238/153 +f 267/233/154 270/237/154 271/240/154 +f 271/240/155 268/239/155 267/233/155 +f 272/243/16 273/242/16 274/241/16 +f 274/241/16 275/244/16 272/243/16 +f 275/244/156 274/241/156 276/245/156 +f 276/245/156 277/246/156 275/244/156 +f 274/241/155 273/248/155 278/247/155 +f 278/247/155 276/245/155 274/241/155 +f 276/245/157 270/237/157 269/238/157 +f 269/238/158 277/246/158 276/245/158 +f 276/245/151 278/249/151 271/240/151 +f 271/240/159 270/237/159 276/245/159 +f 279/231/13 280/230/13 281/229/13 +f 281/229/13 282/232/13 279/231/13 +f 282/232/160 283/234/160 284/233/160 +f 284/233/160 279/231/160 282/232/160 +f 279/231/161 284/233/161 285/235/161 +f 285/235/161 280/236/161 279/231/161 +f 286/238/162 287/237/162 284/233/162 +f 284/233/162 283/234/162 286/238/162 +f 284/233/163 287/237/163 288/240/163 +f 288/240/164 285/239/164 284/233/164 +f 289/243/16 290/242/16 291/241/16 +f 291/241/16 292/244/16 289/243/16 +f 292/244/165 291/241/165 293/245/165 +f 293/245/165 294/246/165 292/244/165 +f 291/241/166 290/248/166 295/247/166 +f 295/247/166 293/245/166 291/241/166 +f 293/245/167 287/237/167 286/238/167 +f 286/238/167 294/246/167 293/245/167 +f 293/245/168 295/249/168 288/240/168 +f 288/240/169 287/237/169 293/245/169 +f 296/231/13 297/230/13 298/229/13 +f 298/229/13 299/232/13 296/231/13 +f 299/232/135 300/234/135 301/233/135 +f 301/233/135 296/231/135 299/232/135 +f 296/231/144 301/233/144 302/235/144 +f 302/235/144 297/236/144 296/231/144 +f 303/238/170 304/237/170 301/233/170 +f 301/233/140 300/234/140 303/238/140 +f 301/233/134 304/237/134 305/240/134 +f 305/240/144 302/239/144 301/233/144 +f 306/243/16 307/242/16 308/241/16 +f 308/241/16 309/244/16 306/243/16 +f 309/244/171 308/241/171 310/245/171 +f 310/245/145 311/246/145 309/244/145 +f 308/241/134 307/248/134 312/247/134 +f 312/247/134 310/245/134 308/241/134 +f 310/245/172 304/237/172 303/238/172 +f 303/238/148 311/246/148 310/245/148 +f 310/245/134 312/249/134 305/240/134 +f 305/240/144 304/237/144 310/245/144 +f 313/231/13 314/230/13 315/229/13 +f 315/229/13 316/232/13 313/231/13 +f 316/232/135 317/234/135 318/233/135 +f 318/233/135 313/231/135 316/232/135 +f 313/231/144 318/233/144 319/235/144 +f 319/235/144 314/236/144 313/231/144 +f 320/238/140 321/237/140 318/233/140 +f 318/233/140 317/234/140 320/238/140 +f 318/233/147 321/237/147 322/240/147 +f 322/240/144 319/239/144 318/233/144 +f 323/243/16 324/242/16 325/241/16 +f 325/241/16 326/244/16 323/243/16 +f 326/244/145 325/241/145 327/245/145 +f 327/245/145 328/246/145 326/244/145 +f 325/241/134 324/248/134 329/247/134 +f 329/247/134 327/245/134 325/241/134 +f 327/245/148 321/237/148 320/238/148 +f 320/238/148 328/246/148 327/245/148 +f 327/245/134 329/249/134 322/240/134 +f 322/240/139 321/237/139 327/245/139 +f 330/231/13 331/230/13 332/229/13 +f 332/229/13 333/232/13 330/231/13 +f 333/232/150 334/234/150 335/233/150 +f 335/233/150 330/231/150 333/232/150 +f 330/231/173 335/233/173 336/235/173 +f 336/235/173 331/236/173 330/231/173 +f 337/238/152 338/237/152 335/233/152 +f 335/233/174 334/234/174 337/238/174 +f 335/233/175 338/237/175 339/240/175 +f 339/240/175 336/239/175 335/233/175 +f 340/243/16 341/242/16 342/241/16 +f 342/241/16 343/244/16 340/243/16 +f 343/244/156 342/241/156 344/245/156 +f 344/245/156 345/246/156 343/244/156 +f 342/241/175 341/248/175 346/247/175 +f 346/247/175 344/245/175 342/241/175 +f 344/245/157 338/237/157 337/238/157 +f 337/238/176 345/246/176 344/245/176 +f 344/245/173 346/249/173 339/240/173 +f 339/240/173 338/237/173 344/245/173 +f 347/231/13 348/230/13 349/229/13 +f 349/229/13 350/232/13 347/231/13 +f 350/232/114 351/234/114 352/233/114 +f 352/233/114 347/231/114 350/232/114 +f 347/231/177 352/233/177 353/235/177 +f 353/235/177 348/236/177 347/231/177 +f 354/238/116 355/237/116 352/233/116 +f 352/233/117 351/234/117 354/238/117 +f 352/233/177 355/237/177 356/240/177 +f 356/240/178 353/239/178 352/233/178 +f 357/243/16 358/242/16 359/241/16 +f 359/241/16 360/244/16 357/243/16 +f 360/244/119 359/241/119 361/245/119 +f 361/245/119 362/246/119 360/244/119 +f 359/241/179 358/248/179 363/247/179 +f 363/247/178 361/245/178 359/241/178 +f 361/245/120 355/237/120 354/238/120 +f 354/238/121 362/246/121 361/245/121 +f 361/245/177 363/249/177 356/240/177 +f 356/240/178 355/237/178 361/245/178 +f 364/205/13 365/204/13 366/203/13 +f 366/203/13 367/206/13 364/205/13 +f 367/206/144 368/209/144 369/208/144 +f 369/208/144 364/207/144 367/206/144 +f 367/206/135 366/203/135 370/210/135 +f 370/210/135 368/209/135 367/206/135 +f 366/203/180 365/212/180 371/211/180 +f 371/211/181 370/210/181 366/203/181 +f 372/213/144 369/208/144 368/209/144 +f 368/209/134 373/214/134 372/213/134 +f 370/210/140 374/215/140 373/214/140 +f 373/214/170 368/209/170 370/210/170 +f 370/210/182 371/211/182 375/216/182 +f 375/216/141 374/215/141 370/210/141 +f 376/219/16 377/218/16 378/217/16 +f 378/217/183 379/220/183 376/219/183 +f 380/221/134 381/223/134 379/220/134 +f 379/220/134 378/222/134 380/221/134 +f 379/220/145 381/223/145 382/224/145 +f 382/224/145 376/219/145 379/220/145 +f 376/219/184 382/224/184 383/225/184 +f 383/225/185 377/226/185 376/219/185 +f 381/223/134 380/221/134 372/227/134 +f 372/227/144 373/214/144 381/223/144 +f 373/214/148 374/215/148 382/224/148 +f 382/224/172 381/223/172 373/214/172 +f 382/224/149 374/215/149 375/228/149 +f 375/228/186 383/225/186 382/224/186 +f 384/205/13 385/204/13 386/203/13 +f 386/203/13 387/206/13 384/205/13 +f 387/206/133 388/209/133 389/208/133 +f 389/208/144 384/207/144 387/206/144 +f 387/206/135 386/203/135 390/210/135 +f 390/210/135 388/209/135 387/206/135 +f 386/203/136 385/212/136 391/211/136 +f 391/211/181 390/210/181 386/203/181 +f 392/213/143 389/208/143 388/209/143 +f 388/209/139 393/214/139 392/213/139 +f 390/210/140 394/215/140 393/214/140 +f 393/214/140 388/209/140 390/210/140 +f 390/210/184 391/211/184 395/216/184 +f 395/216/136 394/215/136 390/210/136 +f 396/219/16 397/218/16 398/217/16 +f 398/217/16 399/220/16 396/219/16 +f 400/221/143 401/223/143 399/220/143 +f 399/220/134 398/222/134 400/221/134 +f 399/220/145 401/223/145 402/224/145 +f 402/224/145 396/219/145 399/220/145 +f 396/219/184 402/224/184 403/225/184 +f 403/225/137 397/226/137 396/219/137 +f 401/223/133 400/221/133 392/227/133 +f 392/227/147 393/214/147 401/223/147 +f 393/214/148 394/215/148 402/224/148 +f 402/224/148 401/223/148 393/214/148 +f 402/224/137 394/215/137 395/228/137 +f 395/228/181 403/225/181 402/224/181 +f 404/19/187 405/20/188 406/21/189 +f 406/21/189 407/22/190 404/19/187 +f 408/23/191 409/24/191 410/25/191 +f 410/25/191 411/26/191 408/23/191 +f 412/27/192 413/28/192 414/29/37 +f 414/29/37 415/30/36 412/27/192 +f 416/26/8 417/31/8 418/32/8 +f 418/32/8 419/23/8 416/26/8 +f 420/33/193 421/34/193 422/35/18 +f 422/35/18 423/36/194 420/33/193 +f 424/37/16 425/38/16 426/39/16 +f 427/40/183 412/41/183 415/42/183 +f 415/42/16 428/43/16 427/40/16 +f 429/44/183 430/45/183 431/46/183 +f 431/46/183 430/45/183 432/47/183 +f 432/47/16 433/48/16 431/46/16 +f 404/19/187 407/22/190 434/49/195 +f 434/49/195 435/50/196 404/19/187 +f 415/30/36 414/29/37 436/51/197 +f 436/51/197 437/52/197 415/30/36 +f 423/36/194 422/35/18 438/53/198 +f 438/53/198 439/54/198 423/36/194 +f 428/43/16 415/42/16 437/55/16 +f 437/55/16 440/56/16 428/43/16 +f 426/39/16 433/48/16 432/47/16 +f 432/47/6 424/37/6 426/39/6 +f 406/57/199 405/58/199 441/59/199 +f 441/59/200 427/60/200 406/57/200 +f 406/57/201 427/60/201 428/61/201 +f 428/61/201 407/62/201 406/57/201 +f 407/62/202 428/61/202 440/63/202 +f 440/63/203 434/64/203 407/62/203 +f 434/64/204 440/63/204 442/65/204 +f 442/65/205 435/66/205 434/64/205 +f 435/67/206 442/68/206 443/69/206 +f 443/69/207 404/70/207 435/67/207 +f 404/70/208 443/69/208 441/71/208 +f 441/71/208 405/72/208 404/70/208 +f 444/73/209 442/74/209 440/56/209 +f 440/56/210 437/55/210 444/73/210 +f 436/51/211 445/75/212 444/76/212 +f 444/76/212 437/52/213 436/51/211 +f 446/77/214 447/78/215 413/28/216 +f 413/28/216 412/27/216 446/77/214 +f 427/40/217 441/79/217 446/80/217 +f 446/80/218 412/41/218 427/40/218 +f 448/32/219 408/23/219 411/26/219 +f 411/26/219 449/31/219 448/32/219 +f 425/81/220 446/82/220 441/71/220 +f 441/71/220 426/83/220 425/81/220 +f 426/83/208 441/71/208 443/69/208 +f 443/69/208 433/84/208 426/83/208 +f 433/84/206 443/69/206 442/68/206 +f 442/68/206 431/85/206 433/84/206 +f 431/85/221 442/68/221 444/86/221 +f 444/86/221 429/87/221 431/85/221 +f 450/25/222 416/26/222 419/23/222 +f 419/23/222 451/24/222 450/25/222 +f 430/88/193 420/33/193 423/36/193 +f 423/36/193 432/89/193 430/88/193 +f 432/89/223 423/36/223 439/54/223 +f 439/54/223 424/90/223 432/89/223 +f 410/91/36 447/92/36 446/82/36 +f 446/82/36 411/93/36 410/91/36 +f 411/93/36 446/82/36 425/81/36 +f 425/81/36 449/94/36 411/93/36 +f 449/95/16 425/38/16 424/37/16 +f 424/37/16 448/96/16 449/95/16 +f 448/97/18 424/90/18 439/54/18 +f 439/54/18 408/98/18 448/97/18 +f 408/98/18 439/54/18 438/53/18 +f 438/53/18 409/99/18 408/98/18 +f 418/100/18 421/34/18 420/33/18 +f 420/33/18 419/101/18 418/100/18 +f 419/101/224 420/33/224 430/88/224 +f 430/88/224 451/102/224 419/101/224 +f 451/103/225 430/45/225 429/44/225 +f 429/44/225 450/104/225 451/103/225 +f 450/105/226 429/87/226 444/86/226 +f 444/86/226 416/106/226 450/105/226 +f 416/106/36 444/86/36 445/107/36 +f 445/107/36 417/108/36 416/106/36 +f 452/19/187 453/20/188 454/21/189 +f 454/21/189 455/22/190 452/19/187 +f 456/23/191 457/24/191 458/25/191 +f 458/25/191 459/26/191 456/23/191 +f 460/27/192 461/28/192 462/29/37 +f 462/29/37 463/30/36 460/27/192 +f 464/26/8 465/31/8 466/32/8 +f 466/32/8 467/23/8 464/26/8 +f 468/33/193 469/34/193 470/35/18 +f 470/35/18 471/36/194 468/33/193 +f 472/37/16 473/38/16 474/39/16 +f 475/40/183 460/41/183 463/42/183 +f 463/42/16 476/43/16 475/40/16 +f 477/44/183 478/45/183 479/46/183 +f 479/46/183 478/45/183 480/47/183 +f 480/47/16 481/48/16 479/46/16 +f 452/19/187 455/22/190 482/49/195 +f 482/49/195 483/50/196 452/19/187 +f 463/30/36 462/29/37 484/51/197 +f 484/51/197 485/52/197 463/30/36 +f 471/36/194 470/35/18 486/53/198 +f 486/53/198 487/54/198 471/36/194 +f 476/43/16 463/42/16 485/55/16 +f 485/55/16 488/56/16 476/43/16 +f 474/39/16 481/48/16 480/47/16 +f 480/47/6 472/37/6 474/39/6 +f 454/57/199 453/58/199 489/59/199 +f 489/59/200 475/60/200 454/57/200 +f 454/57/201 475/60/201 476/61/201 +f 476/61/201 455/62/201 454/57/201 +f 455/62/202 476/61/202 488/63/202 +f 488/63/203 482/64/203 455/62/203 +f 482/64/204 488/63/204 490/65/204 +f 490/65/205 483/66/205 482/64/205 +f 483/67/206 490/68/206 491/69/206 +f 491/69/207 452/70/207 483/67/207 +f 452/70/208 491/69/208 489/71/208 +f 489/71/208 453/72/208 452/70/208 +f 492/73/209 490/74/209 488/56/209 +f 488/56/210 485/55/210 492/73/210 +f 484/51/211 493/75/212 492/76/212 +f 492/76/212 485/52/213 484/51/211 +f 494/77/214 495/78/215 461/28/216 +f 461/28/216 460/27/216 494/77/214 +f 475/40/217 489/79/217 494/80/217 +f 494/80/218 460/41/218 475/40/218 +f 496/32/219 456/23/219 459/26/219 +f 459/26/219 497/31/219 496/32/219 +f 473/81/220 494/82/220 489/71/220 +f 489/71/220 474/83/220 473/81/220 +f 474/83/208 489/71/208 491/69/208 +f 491/69/208 481/84/208 474/83/208 +f 481/84/206 491/69/206 490/68/206 +f 490/68/206 479/85/206 481/84/206 +f 479/85/221 490/68/221 492/86/221 +f 492/86/221 477/87/221 479/85/221 +f 498/25/222 464/26/222 467/23/222 +f 467/23/222 499/24/222 498/25/222 +f 478/88/193 468/33/193 471/36/193 +f 471/36/193 480/89/193 478/88/193 +f 480/89/223 471/36/223 487/54/223 +f 487/54/223 472/90/223 480/89/223 +f 458/91/36 495/92/36 494/82/36 +f 494/82/36 459/93/36 458/91/36 +f 459/93/36 494/82/36 473/81/36 +f 473/81/36 497/94/36 459/93/36 +f 497/95/16 473/38/16 472/37/16 +f 472/37/16 496/96/16 497/95/16 +f 496/97/18 472/90/18 487/54/18 +f 487/54/18 456/98/18 496/97/18 +f 456/98/18 487/54/18 486/53/18 +f 486/53/18 457/99/18 456/98/18 +f 466/100/18 469/34/18 468/33/18 +f 468/33/18 467/101/18 466/100/18 +f 467/101/224 468/33/224 478/88/224 +f 478/88/224 499/102/224 467/101/224 +f 499/103/225 478/45/225 477/44/225 +f 477/44/225 498/104/225 499/103/225 +f 498/105/226 477/87/226 492/86/226 +f 492/86/226 464/106/226 498/105/226 +f 464/106/36 492/86/36 493/107/36 +f 493/107/36 465/108/36 464/106/36 +f 500/250/227 501/251/228 502/252/229 +f 502/252/229 503/253/230 500/250/227 +f 504/254/231 500/250/227 503/253/230 +f 503/253/230 505/255/232 504/254/231 +f 506/256/233 504/254/231 505/255/232 +f 505/255/232 507/257/234 506/256/233 +f 508/258/235 506/256/233 507/257/234 +f 507/257/234 509/259/236 508/258/235 +f 510/260/237 508/261/235 509/262/236 +f 509/262/236 511/263/238 510/260/237 +f 512/264/239 510/260/237 511/263/238 +f 511/263/238 513/265/240 512/264/239 +f 514/266/241 512/264/239 513/265/240 +f 513/265/240 515/267/242 514/266/241 +f 501/251/228 514/266/241 515/267/242 +f 515/267/242 502/252/229 501/251/228 +f 516/268/243 516/268/244 501/251/228 +f 501/251/228 500/250/227 516/268/243 +f 516/268/245 516/268/243 500/250/227 +f 500/250/227 504/254/231 516/268/245 +f 516/269/246 516/268/245 504/254/231 +f 504/254/231 506/256/233 516/269/246 +f 516/269/247 516/269/246 506/256/233 +f 506/256/233 508/258/235 516/269/247 +f 516/268/248 516/269/247 508/261/235 +f 508/261/235 510/260/237 516/268/248 +f 516/268/249 516/268/248 510/260/237 +f 510/260/237 512/264/239 516/268/249 +f 516/268/250 516/268/249 512/264/239 +f 512/264/239 514/266/241 516/268/250 +f 516/268/244 516/268/250 514/266/241 +f 514/266/241 501/251/228 516/268/244 +f 516/269/2 516/269/2 516/268/2 +f 516/268/2 516/268/2 516/268/2 +f 516/268/2 516/268/2 516/268/2 +f 516/268/2 516/268/2 516/268/2 +f 516/269/2 516/268/2 516/268/2 +f 516/269/2 516/268/2 516/268/2 +f 517/270/251 518/271/251 503/253/251 +f 503/253/252 502/252/252 517/270/252 +f 518/271/253 519/272/253 505/255/253 +f 505/255/253 503/253/253 518/271/253 +f 519/272/254 520/273/254 507/257/254 +f 507/257/254 505/255/254 519/272/254 +f 520/273/255 521/274/255 509/259/255 +f 509/259/256 507/257/256 520/273/256 +f 521/275/257 522/276/257 511/263/257 +f 511/263/257 509/262/257 521/275/257 +f 522/276/258 523/277/258 513/265/258 +f 513/265/258 511/263/258 522/276/258 +f 523/277/259 524/278/259 515/267/259 +f 515/267/259 513/265/259 523/277/259 +f 524/278/260 517/270/260 502/252/260 +f 502/252/260 515/267/260 524/278/260 +f 525/279/261 526/280/262 527/281/262 +f 527/281/262 528/282/261 525/279/261 +f 529/283/263 525/279/261 528/282/261 +f 528/282/261 530/284/263 529/283/263 +f 531/285/264 529/283/263 530/284/263 +f 530/284/263 532/286/264 531/285/264 +f 533/287/265 531/285/264 532/286/264 +f 532/286/264 534/288/265 533/287/265 +f 535/289/261 536/290/262 526/280/262 +f 526/280/262 525/279/261 535/289/261 +f 537/291/263 535/289/261 525/279/261 +f 525/279/261 529/283/263 537/291/263 +f 538/292/264 537/291/263 529/283/263 +f 529/283/263 531/285/264 538/292/264 +f 539/293/265 538/292/264 531/285/264 +f 531/285/264 533/287/265 539/293/265 +f 540/294/261 541/295/262 536/290/262 +f 536/290/262 535/289/261 540/294/261 +f 542/296/263 540/294/261 535/289/261 +f 535/289/261 537/291/263 542/296/263 +f 543/297/264 542/296/263 537/291/263 +f 537/291/263 538/292/264 543/297/264 +f 544/298/265 543/297/264 538/292/264 +f 538/292/264 539/293/265 544/298/265 +f 545/299/261 546/300/262 541/295/262 +f 541/295/262 540/294/261 545/299/261 +f 547/301/263 545/299/261 540/294/261 +f 540/294/261 542/296/263 547/301/263 +f 548/302/264 547/301/263 542/296/263 +f 542/296/263 543/297/264 548/302/264 +f 549/303/265 548/302/264 543/297/264 +f 543/297/264 544/298/265 549/303/265 +f 550/304/36 551/305/36 552/306/36 +f 552/306/36 553/307/36 550/304/36 +f 554/308/266 555/309/267 556/310/267 +f 556/310/267 557/311/266 554/308/266 +f 557/312/268 556/313/269 558/314/269 +f 558/314/269 559/315/268 557/312/268 +f 559/311/270 558/310/271 560/309/271 +f 560/309/271 561/308/270 559/311/270 +f 561/315/272 560/314/273 555/313/273 +f 555/313/273 554/312/272 561/315/272 +f 554/308/266 557/311/266 553/316/274 +f 553/316/274 552/317/274 554/308/266 +f 557/312/268 559/315/268 550/318/275 +f 550/318/275 553/319/275 557/312/268 +f 559/311/270 561/308/270 551/317/276 +f 551/317/276 550/316/276 559/311/270 +f 561/315/272 554/312/272 552/319/277 +f 552/319/277 551/318/277 561/315/272 +f 562/307/226 563/304/36 564/305/226 +f 564/305/226 565/306/226 562/307/226 +f 566/308/278 567/311/278 568/310/279 +f 568/310/279 569/309/279 566/308/278 +f 567/312/268 570/315/268 571/314/269 +f 571/314/269 568/313/269 567/312/268 +f 570/311/280 572/308/280 573/309/281 +f 573/309/281 571/310/281 570/311/280 +f 572/315/272 566/312/272 569/313/282 +f 569/313/282 573/314/282 572/315/272 +f 566/308/278 564/317/283 563/316/283 +f 563/316/283 567/311/278 566/308/278 +f 567/312/268 563/319/284 562/318/284 +f 562/318/284 570/315/268 567/312/268 +f 570/311/280 562/316/285 565/317/285 +f 565/317/285 572/308/280 570/311/280 +f 572/315/272 565/318/277 564/319/277 +f 564/319/277 566/312/272 572/315/272 +f 574/320/286 575/321/287 576/322/288 +f 576/322/288 577/323/289 574/320/286 +f 578/324/290 574/320/286 577/323/289 +f 577/323/289 579/325/291 578/324/290 +f 580/326/292 578/324/290 579/325/291 +f 579/325/291 581/327/293 580/326/292 +f 582/328/294 580/326/292 581/327/293 +f 581/327/293 583/329/295 582/328/294 +f 584/330/296 582/328/294 583/329/295 +f 583/329/295 585/331/295 584/330/296 +f 586/332/297 587/333/298 575/321/287 +f 575/321/287 574/320/286 586/332/297 +f 586/332/297 574/320/286 578/324/290 +f 578/324/290 588/334/299 586/332/297 +f 588/334/299 578/324/290 580/326/292 +f 580/326/292 589/335/300 588/334/299 +f 589/335/300 580/326/292 582/328/294 +f 582/328/294 590/336/301 589/335/300 +f 591/337/302 590/336/301 582/328/294 +f 582/328/294 584/330/296 591/337/302 +f 592/338/303 593/339/304 594/340/305 +f 594/340/305 595/341/306 592/338/303 +f 596/342/307 592/338/303 595/341/306 +f 595/341/306 597/343/308 596/342/307 +f 598/344/309 596/342/307 597/343/308 +f 597/343/308 599/345/310 598/344/309 +f 600/346/311 598/344/309 599/345/310 +f 599/345/310 601/347/312 600/346/311 +f 602/348/313 600/346/311 601/347/312 +f 601/347/312 591/349/314 602/348/313 +f 603/350/315 604/351/316 593/339/304 +f 593/339/304 592/338/303 603/350/315 +f 605/352/317 603/350/315 592/338/303 +f 592/338/303 596/342/307 605/352/317 +f 606/353/318 605/352/317 596/342/307 +f 596/342/307 598/344/309 606/353/318 +f 607/354/319 606/353/318 598/344/309 +f 598/344/309 600/346/311 607/354/319 +f 608/355/319 607/354/319 600/346/311 +f 600/346/311 602/348/313 608/355/319 +f 609/356/320 610/357/321 604/351/316 +f 604/351/316 603/350/315 609/356/320 +f 611/358/322 609/356/320 603/350/315 +f 603/350/315 605/352/317 611/358/322 +f 612/359/323 611/358/322 605/352/317 +f 605/352/317 606/353/318 612/359/323 +f 613/360/324 612/359/323 606/353/318 +f 606/353/318 607/354/319 613/360/324 +f 614/361/324 613/360/324 607/354/319 +f 607/354/319 608/355/319 614/361/324 +f 615/362/325 616/363/326 610/357/321 +f 610/357/321 609/356/320 615/362/325 +f 617/364/327 615/362/325 609/356/320 +f 609/356/320 611/358/322 617/364/327 +f 618/365/328 617/364/327 611/358/322 +f 611/358/322 612/359/323 618/365/328 +f 619/366/329 618/365/328 612/359/323 +f 612/359/323 613/360/324 619/366/329 +f 620/367/329 619/366/329 613/360/324 +f 613/360/324 614/361/324 620/367/329 +f 577/323/289 576/322/288 616/368/326 +f 616/368/326 615/369/325 577/323/289 +f 579/325/291 577/323/289 615/369/325 +f 615/369/325 617/370/327 579/325/291 +f 581/327/293 579/325/291 617/370/327 +f 617/370/327 618/371/328 581/327/293 +f 583/329/295 581/327/293 618/371/328 +f 618/371/328 619/372/329 583/329/295 +f 585/331/295 583/329/295 619/372/329 +f 619/372/329 620/373/329 585/331/295 +f 621/374/36 622/375/36 623/376/36 +f 623/376/36 624/377/36 621/374/36 +f 625/378/36 626/379/36 627/380/36 +f 627/380/36 628/381/36 625/378/36 +f 622/375/16 629/382/16 630/383/16 +f 630/383/16 623/376/16 622/375/16 +f 631/384/16 625/378/16 628/381/16 +f 628/381/16 632/385/16 631/384/16 +f 633/386/36 634/387/36 635/388/36 +f 635/388/36 636/389/36 633/386/36 +f 637/390/2 638/391/2 635/388/2 +f 635/388/2 634/387/2 637/390/2 +f 639/392/8 640/393/8 633/386/8 +f 633/386/8 636/389/8 639/392/8 +f 637/394/6 634/395/6 641/396/6 +f 641/396/6 642/397/6 637/394/6 +f 634/395/6 633/398/6 643/399/6 +f 643/399/6 641/396/6 634/395/6 +f 633/398/6 640/400/6 644/401/6 +f 644/401/142 643/399/142 633/398/142 +f 642/402/8 641/403/8 645/404/8 +f 645/404/8 646/405/8 642/402/8 +f 641/395/18 643/398/18 647/398/18 +f 647/398/18 645/395/18 641/395/18 +f 643/403/2 644/402/2 648/405/2 +f 648/405/2 647/404/2 643/403/2 +f 648/406/6 646/407/6 645/408/6 +f 645/408/6 647/409/16 648/406/6 +f 649/410/330 650/411/331 651/412/332 +f 651/412/332 652/413/333 649/410/330 +f 653/414/334 650/411/334 649/410/335 +f 649/410/335 654/415/335 653/414/334 +f 655/416/336 656/417/337 657/418/338 +f 657/418/338 658/419/338 655/416/336 +f 659/420/15 660/421/15 661/422/339 +f 661/422/339 662/423/339 659/420/15 +f 663/424/340 652/413/341 664/425/342 +f 664/425/342 665/426/342 663/424/340 +f 657/418/343 656/417/344 651/412/332 +f 651/412/332 650/411/331 657/418/343 +f 658/419/345 657/418/345 650/411/334 +f 650/411/334 653/427/334 658/419/345 +f 665/428/346 664/425/346 660/421/15 +f 660/421/15 659/420/15 665/428/346 +f 660/421/347 664/425/348 652/413/333 +f 652/413/333 651/412/332 660/421/347 +f 662/429/349 661/422/349 656/417/337 +f 656/417/337 655/416/336 662/429/349 +f 654/415/350 649/410/350 652/413/341 +f 652/413/341 663/424/340 654/415/350 +f 656/417/344 661/422/351 660/421/347 +f 660/421/347 651/412/332 656/417/344 +f 666/410/352 667/411/353 668/412/354 +f 668/412/354 669/413/355 666/410/352 +f 670/414/334 667/411/334 666/410/345 +f 666/410/345 671/415/345 670/414/334 +f 672/416/340 673/417/341 674/418/350 +f 674/418/350 675/419/350 672/416/340 +f 676/420/15 677/421/15 678/422/346 +f 678/422/346 679/423/346 676/420/15 +f 680/424/336 669/413/337 681/425/349 +f 681/425/349 682/426/349 680/424/336 +f 674/418/356 673/417/357 668/412/354 +f 668/412/354 667/411/353 674/418/356 +f 675/419/335 674/418/335 667/411/334 +f 667/411/334 670/427/334 675/419/335 +f 682/428/339 681/425/339 677/421/15 +f 677/421/15 676/420/15 682/428/339 +f 677/421/358 681/425/359 669/413/355 +f 669/413/355 668/412/354 677/421/358 +f 679/429/342 678/422/342 673/417/341 +f 673/417/341 672/416/340 679/429/342 +f 671/415/338 666/410/338 669/413/337 +f 669/413/337 680/424/336 671/415/338 +f 673/417/357 678/422/360 677/421/358 +f 677/421/358 668/412/354 673/417/357 +f 683/430/2 684/431/2 685/432/2 +f 685/432/2 686/433/2 683/430/2 +f 687/434/361 688/435/15 684/436/15 +f 684/436/15 683/437/361 687/434/361 +f 689/433/8 690/432/8 688/431/8 +f 688/431/8 687/430/8 689/433/8 +f 690/435/334 685/436/334 691/438/362 +f 691/438/362 692/439/362 690/435/334 +f 691/440/16 693/441/16 694/442/16 +f 694/442/16 692/443/16 691/440/16 +f 693/444/2 691/445/2 685/432/2 +f 685/432/2 684/431/2 693/444/2 +f 694/439/363 693/438/363 684/436/15 +f 684/436/15 688/435/15 694/439/363 +f 692/445/8 694/444/8 688/431/8 +f 688/431/8 690/432/8 692/445/8 +f 689/434/364 686/437/364 685/436/334 +f 685/436/334 690/435/334 689/434/364 +f 695/446/365 696/447/366 697/448/367 +f 697/448/367 698/449/368 695/446/365 +f 699/450/369 700/451/370 696/447/366 +f 696/447/366 695/446/365 699/450/369 +f 698/452/368 697/453/367 700/451/370 +f 700/451/370 699/450/369 698/452/368 +f 701/454/8 702/455/8 703/456/8 +f 696/447/366 704/457/371 705/458/372 +f 705/458/372 697/448/367 696/447/366 +f 706/459/373 704/457/371 696/447/366 +f 696/447/366 700/451/370 706/459/373 +f 705/460/372 706/459/373 700/451/370 +f 700/451/370 697/453/367 705/460/372 +f 704/457/371 703/461/374 702/462/375 +f 702/462/375 705/458/372 704/457/371 +f 701/463/376 703/461/374 704/457/371 +f 704/457/371 706/459/373 701/463/376 +f 702/464/375 701/463/376 706/459/373 +f 706/459/373 705/460/372 702/464/375 +f 707/446/377 708/447/378 709/448/379 +f 709/448/379 710/449/380 707/446/377 +f 711/450/381 712/451/382 708/447/378 +f 708/447/378 707/446/377 711/450/381 +f 710/452/380 709/453/379 712/451/382 +f 712/451/382 711/450/381 710/452/380 +f 713/454/2 714/455/2 715/456/2 +f 708/447/378 716/457/383 717/458/384 +f 717/458/384 709/448/379 708/447/378 +f 718/459/385 716/457/383 708/447/378 +f 708/447/378 712/451/382 718/459/385 +f 717/460/384 718/459/385 712/451/382 +f 712/451/382 709/453/379 717/460/384 +f 716/457/383 715/461/386 714/462/387 +f 714/462/387 717/458/384 716/457/383 +f 713/463/388 715/461/386 716/457/383 +f 716/457/383 718/459/385 713/463/388 +f 714/464/387 713/463/388 718/459/385 +f 718/459/385 717/460/384 714/464/387 +f 719/465/37 720/466/36 721/467/37 +f 721/467/37 722/468/37 719/465/37 +f 723/469/6 724/470/6 725/471/6 +f 726/472/6 723/469/6 725/471/6 +f 727/473/6 726/472/6 725/471/6 +f 727/473/6 725/471/6 728/474/142 +f 729/475/389 730/476/389 726/477/2 +f 731/478/2 729/475/389 726/477/2 +f 732/479/2 731/478/2 726/477/2 +f 732/479/2 726/477/2 727/480/2 +f 733/481/5 734/482/5 731/483/5 +f 735/484/5 733/481/5 731/483/5 +f 736/485/13 735/484/5 731/483/5 +f 736/485/13 731/483/5 732/486/13 +f 737/487/390 738/488/390 735/489/391 +f 725/490/8 737/487/390 735/489/391 +f 728/491/391 725/490/8 735/489/391 +f 728/491/391 735/489/391 736/492/391 +f 739/493/392 740/494/393 741/495/394 +f 741/495/394 742/496/395 743/497/396 +f 739/493/392 741/495/394 743/497/396 +f 744/498/397 739/493/392 743/497/396 +f 745/499/398 746/500/399 740/494/393 +f 740/494/393 739/493/392 747/501/15 +f 745/499/398 740/494/393 747/501/15 +f 748/502/15 745/499/398 747/501/15 +f 749/503/400 750/504/401 746/500/399 +f 746/500/399 745/499/398 751/505/402 +f 749/503/400 746/500/399 751/505/402 +f 752/506/403 749/503/400 751/505/402 +f 742/496/395 741/495/394 750/504/401 +f 750/504/401 749/503/400 753/507/36 +f 742/496/395 750/504/401 753/507/36 +f 754/508/37 742/496/395 753/507/36 +f 755/509/5 721/510/13 720/511/13 +f 720/511/13 756/512/5 755/509/5 +f 756/509/404 720/510/405 719/511/406 +f 719/511/406 757/512/404 756/509/404 +f 757/512/6 719/511/6 722/510/6 +f 722/510/6 758/509/6 757/512/6 +f 758/512/407 722/511/8 721/510/8 +f 721/510/8 755/509/407 758/512/407 +f 759/513/6 760/514/16 761/515/6 +f 761/515/6 762/516/6 759/513/6 +f 763/513/2 764/517/2 765/518/2 +f 765/518/2 766/516/2 763/513/2 +f 767/513/13 768/517/13 769/518/13 +f 769/518/13 770/516/13 767/513/13 +f 771/513/8 772/514/8 773/515/8 +f 773/515/8 774/516/8 771/513/8 +f 775/519/408 761/520/409 774/521/410 +f 774/521/410 776/522/334 775/519/408 +f 777/523/411 773/524/412 770/525/413 +f 770/525/413 778/526/18 777/523/411 +f 779/527/414 769/528/415 766/529/416 +f 766/529/416 780/530/334 779/527/414 +f 781/531/417 765/532/418 762/533/419 +f 762/533/419 782/534/18 781/531/417 +f 783/535/15 760/536/15 759/537/15 +f 759/537/15 784/538/226 783/535/15 +f 785/539/37 764/540/37 763/541/15 +f 763/541/15 786/542/15 785/539/37 +f 787/543/15 768/544/15 767/545/36 +f 767/545/36 788/546/36 787/543/15 +f 789/547/37 772/548/37 771/549/37 +f 771/549/37 790/550/15 789/547/37 +f 767/513/13 770/516/13 773/515/13 +f 773/515/13 772/514/13 767/513/13 +f 771/513/8 774/516/8 761/518/8 +f 761/518/8 760/517/8 771/513/8 +f 777/523/411 776/522/334 774/521/410 +f 774/521/410 773/524/412 777/523/411 +f 779/527/414 778/526/18 770/525/413 +f 770/525/413 769/528/415 779/527/414 +f 781/531/417 780/530/334 766/529/416 +f 766/529/416 765/532/418 781/531/417 +f 789/547/37 788/546/36 767/545/36 +f 767/545/36 772/548/37 789/547/37 +f 783/535/15 790/550/15 771/549/37 +f 771/549/37 760/536/15 783/535/15 +f 759/513/6 762/516/6 765/518/6 +f 765/518/6 764/517/16 759/513/6 +f 763/513/2 766/516/2 769/515/2 +f 769/515/2 768/514/2 763/513/2 +f 775/519/408 782/534/18 762/533/419 +f 762/533/419 761/520/409 775/519/408 +f 785/539/37 784/538/226 759/537/15 +f 759/537/15 764/540/37 785/539/37 +f 787/543/15 786/542/15 763/541/15 +f 763/541/15 768/544/15 787/543/15 +f 791/19/187 792/20/188 793/21/189 +f 793/21/189 794/22/190 791/19/187 +f 795/23/2 796/24/191 797/25/191 +f 797/25/191 798/26/2 795/23/2 +f 799/27/192 800/28/420 801/29/421 +f 801/29/421 802/30/421 799/27/192 +f 803/26/80 804/31/8 805/32/8 +f 805/32/8 806/23/80 803/26/80 +f 807/33/422 808/34/423 809/35/18 +f 809/35/18 810/36/194 807/33/422 +f 811/37/6 812/38/16 813/39/6 +f 814/40/424 799/41/425 802/42/16 +f 802/42/16 815/43/16 814/40/424 +f 816/44/225 817/45/225 818/46/183 +f 818/46/183 817/45/225 819/47/16 +f 819/47/16 820/48/16 818/46/183 +f 791/19/187 794/22/190 821/49/195 +f 821/49/195 822/50/196 791/19/187 +f 802/30/426 801/29/426 823/51/197 +f 823/51/197 824/52/197 802/30/426 +f 810/36/194 809/35/18 825/53/427 +f 825/53/427 826/54/427 810/36/194 +f 815/43/16 802/42/16 824/55/428 +f 824/55/428 827/56/429 815/43/16 +f 813/39/6 820/48/16 819/47/16 +f 819/47/16 811/37/6 813/39/6 +f 793/57/430 792/58/199 828/59/199 +f 828/59/199 814/60/430 793/57/430 +f 793/57/201 814/60/201 815/61/431 +f 815/61/431 794/62/431 793/57/201 +f 794/62/432 815/61/432 827/63/432 +f 827/63/432 821/64/432 794/62/432 +f 821/64/433 827/63/433 829/65/434 +f 829/65/434 822/66/434 821/64/433 +f 822/67/206 829/68/435 830/69/436 +f 830/69/436 791/70/437 822/67/206 +f 791/70/437 830/69/436 828/71/438 +f 828/71/438 792/72/208 791/70/437 +f 831/73/439 829/74/209 827/56/429 +f 827/56/429 824/55/428 831/73/439 +f 823/51/211 832/75/212 831/76/212 +f 831/76/212 824/52/213 823/51/211 +f 833/77/214 834/78/215 800/28/216 +f 800/28/216 799/27/440 833/77/214 +f 814/40/424 828/79/217 833/80/441 +f 833/80/441 799/41/425 814/40/424 +f 835/32/219 795/23/2 798/26/2 +f 798/26/2 836/31/219 835/32/219 +f 812/81/442 833/82/443 828/71/438 +f 828/71/438 813/83/444 812/81/442 +f 813/83/444 828/71/438 830/69/436 +f 830/69/436 820/84/445 813/83/444 +f 820/84/445 830/69/436 829/68/435 +f 829/68/435 818/85/446 820/84/445 +f 818/85/446 829/68/435 831/86/447 +f 831/86/447 816/87/448 818/85/446 +f 837/25/449 803/26/80 806/23/80 +f 806/23/80 838/24/449 837/25/449 +f 817/88/422 807/33/422 810/36/194 +f 810/36/194 819/89/194 817/88/422 +f 819/89/194 810/36/194 826/54/427 +f 826/54/427 811/90/427 819/89/194 +f 797/91/36 834/92/36 833/82/443 +f 833/82/443 798/93/15 797/91/36 +f 798/93/15 833/82/443 812/81/442 +f 812/81/442 836/94/15 798/93/15 +f 836/95/16 812/38/16 811/37/6 +f 811/37/6 835/96/16 836/95/16 +f 835/97/334 811/90/427 826/54/427 +f 826/54/427 795/98/334 835/97/334 +f 795/98/334 826/54/427 825/53/427 +f 825/53/427 796/99/18 795/98/334 +f 805/100/18 808/34/423 807/33/422 +f 807/33/422 806/101/194 805/100/18 +f 806/101/194 807/33/422 817/88/422 +f 817/88/422 838/102/194 806/101/194 +f 838/103/225 817/45/225 816/44/225 +f 816/44/225 837/104/225 838/103/225 +f 837/105/37 816/87/448 831/86/447 +f 831/86/447 803/106/37 837/105/37 +f 803/106/37 831/86/447 832/107/36 +f 832/107/36 804/108/36 803/106/37 +f 755/509/5 756/512/5 741/551/5 +f 741/551/5 740/552/5 755/509/5 +f 756/509/404 757/512/404 750/551/450 +f 750/551/450 741/552/450 756/509/404 +f 757/512/6 758/509/6 746/552/16 +f 746/552/16 750/551/16 757/512/6 +f 758/512/407 755/509/407 740/552/451 +f 740/552/451 746/551/451 758/512/407 +f 724/553/6 723/554/6 744/555/6 +f 744/555/6 743/556/6 724/553/6 +f 730/553/389 729/554/389 748/555/452 +f 748/555/452 747/556/452 730/553/389 +f 734/554/5 733/553/5 752/556/5 +f 752/556/5 751/555/5 734/554/5 +f 738/553/390 737/554/390 754/555/451 +f 754/555/451 753/556/451 738/553/390 +f 725/471/453 724/470/453 737/557/453 +f 726/472/454 730/558/454 723/469/454 +f 731/483/455 734/482/455 729/559/455 +f 735/484/456 738/560/456 733/481/456 +f 839/561/457 840/562/457 841/563/457 +f 842/564/458 843/565/458 844/566/458 +f 845/567/459 846/568/459 847/569/459 +f 848/570/460 849/571/460 850/572/460 +f 737/554/461 724/573/461 743/574/461 +f 743/574/461 754/555/461 737/554/461 +f 723/575/462 730/553/462 747/556/462 +f 747/556/462 744/576/462 723/575/462 +f 729/554/463 734/573/463 751/574/463 +f 751/574/463 748/555/463 729/554/463 +f 733/575/464 738/553/464 753/556/464 +f 753/556/464 752/576/464 733/575/464 +f 743/577/465 742/578/465 840/579/465 +f 840/579/465 839/580/465 743/577/465 +f 742/578/466 754/581/466 841/582/466 +f 841/582/466 840/579/466 742/578/466 +f 754/555/467 743/574/467 839/583/467 +f 839/583/467 841/584/467 754/555/467 +f 747/577/468 739/578/468 843/579/468 +f 843/579/468 842/580/468 747/577/468 +f 739/578/469 744/581/469 844/582/469 +f 844/582/469 843/579/469 739/578/469 +f 744/576/470 747/556/470 842/585/470 +f 842/585/470 844/586/470 744/576/470 +f 751/577/471 745/578/471 846/579/471 +f 846/579/471 845/580/471 751/577/471 +f 745/578/472 748/581/472 847/582/472 +f 847/582/472 846/579/472 745/578/472 +f 748/555/473 751/574/473 845/583/473 +f 845/583/473 847/584/473 748/555/473 +f 753/577/474 749/578/474 849/579/474 +f 849/579/474 848/580/474 753/577/474 +f 749/578/475 752/581/475 850/582/475 +f 850/582/475 849/579/475 749/578/475 +f 752/576/476 753/556/476 848/585/476 +f 848/585/476 850/586/476 752/576/476 +f 851/513/16 852/514/16 853/515/16 +f 853/515/16 854/516/16 851/513/16 +f 855/587/2 856/588/2 857/589/2 +f 857/589/2 858/590/2 855/587/2 +f 859/591/5 860/592/5 861/593/5 +f 861/593/5 862/594/5 859/591/5 +f 863/513/8 864/514/8 865/515/8 +f 865/515/8 866/516/8 863/513/8 +f 867/519/408 853/520/409 866/521/410 +f 866/521/410 868/522/334 867/519/408 +f 869/523/411 865/524/412 862/525/413 +f 862/525/413 870/526/18 869/523/411 +f 871/527/414 861/528/415 858/529/416 +f 858/529/416 872/530/334 871/527/414 +f 873/531/417 857/532/418 854/533/419 +f 854/533/419 874/534/194 873/531/417 +f 875/535/226 852/536/15 851/537/15 +f 851/537/15 876/538/226 875/535/226 +f 877/539/36 856/540/37 855/541/15 +f 855/541/15 878/542/15 877/539/36 +f 879/543/15 860/544/15 859/545/36 +f 859/545/36 880/546/36 879/543/15 +f 881/547/37 864/548/37 863/549/37 +f 863/549/37 882/550/15 881/547/37 +f 859/591/5 862/594/5 865/595/5 +f 865/595/5 864/596/5 859/591/5 +f 863/513/8 866/516/8 853/518/8 +f 853/518/8 852/517/8 863/513/8 +f 869/523/411 868/522/334 866/521/410 +f 866/521/410 865/524/412 869/523/411 +f 871/527/414 870/526/18 862/525/413 +f 862/525/413 861/528/415 871/527/414 +f 873/531/417 872/530/334 858/529/416 +f 858/529/416 857/532/418 873/531/417 +f 881/547/37 880/546/36 859/545/36 +f 859/545/36 864/548/37 881/547/37 +f 875/535/226 882/550/15 863/549/37 +f 863/549/37 852/536/15 875/535/226 +f 851/513/16 854/516/16 857/518/16 +f 857/518/16 856/517/16 851/513/16 +f 855/587/2 858/590/2 861/597/2 +f 861/597/2 860/598/2 855/587/2 +f 867/519/408 874/534/194 854/533/419 +f 854/533/419 853/520/409 867/519/408 +f 877/539/36 876/538/226 851/537/15 +f 851/537/15 856/540/37 877/539/36 +f 879/543/15 878/542/15 855/541/15 +f 855/541/15 860/544/15 879/543/15 +f 883/599/477 884/600/478 885/601/479 +f 885/601/479 886/602/480 883/599/477 +f 887/603/481 884/600/478 883/599/477 +f 883/599/477 888/604/482 887/603/481 +f 883/605/2 886/606/483 889/607/483 +f 889/607/483 890/608/484 883/605/2 +f 888/609/485 883/605/2 890/608/484 +f 890/608/484 891/610/486 888/609/485 +f 890/611/487 889/612/488 892/613/489 +f 892/613/489 893/614/490 890/611/487 +f 894/615/491 891/616/492 890/611/487 +f 890/611/487 893/614/490 894/615/491 +f 884/617/80 893/618/493 892/619/494 +f 892/619/494 885/620/494 884/617/80 +f 887/621/495 894/622/496 893/618/493 +f 893/618/493 884/617/80 887/621/495 +f 895/599/497 896/602/480 897/601/498 +f 897/601/498 898/600/499 895/599/497 +f 899/603/500 900/604/482 895/599/497 +f 895/599/497 898/600/499 899/603/500 +f 895/605/501 901/608/502 902/607/503 +f 902/607/503 896/606/504 895/605/501 +f 900/609/505 903/610/506 901/608/502 +f 901/608/502 895/605/501 900/609/505 +f 901/611/507 904/614/508 905/613/509 +f 905/613/509 902/612/488 901/611/507 +f 906/615/510 904/614/508 901/611/507 +f 901/611/507 903/616/492 906/615/510 +f 898/617/511 897/620/512 905/619/512 +f 905/619/512 904/618/513 898/617/511 +f 899/621/514 898/617/511 904/618/513 +f 904/618/513 906/622/515 899/621/514 +f 907/599/497 908/602/480 909/601/498 +f 909/601/498 910/600/499 907/599/497 +f 911/603/500 912/604/482 907/599/497 +f 907/599/497 910/600/499 911/603/500 +f 907/605/501 913/608/502 914/607/503 +f 914/607/503 908/606/504 907/605/501 +f 912/609/505 915/610/506 913/608/502 +f 913/608/502 907/605/501 912/609/505 +f 913/611/507 916/614/508 917/613/509 +f 917/613/509 914/612/488 913/611/507 +f 918/615/510 916/614/508 913/611/507 +f 913/611/507 915/616/492 918/615/510 +f 910/617/2 909/620/512 917/619/512 +f 917/619/512 916/618/513 910/617/2 +f 911/621/514 910/617/2 916/618/513 +f 916/618/513 918/622/515 911/621/514 +f 919/599/516 920/602/517 921/601/518 +f 921/601/518 922/600/519 919/599/516 +f 923/603/520 924/604/521 919/599/516 +f 919/599/516 922/600/519 923/603/520 +f 919/605/406 925/608/522 926/607/523 +f 926/607/523 920/606/483 919/605/406 +f 924/609/524 927/610/525 925/608/522 +f 925/608/522 919/605/406 924/609/524 +f 925/611/526 928/614/527 929/613/528 +f 929/613/528 926/612/529 925/611/526 +f 930/615/530 928/614/527 925/611/526 +f 925/611/526 927/616/531 930/615/530 +f 922/617/8 921/620/494 929/619/494 +f 929/619/494 928/618/532 922/617/8 +f 923/621/533 922/617/8 928/618/532 +f 928/618/532 930/622/534 923/621/533 +f 931/623/535 932/624/13 933/625/536 +f 933/625/536 934/626/537 931/623/535 +f 931/627/2 935/628/2 936/629/2 +f 936/629/2 932/630/2 931/627/2 +f 937/631/538 934/626/537 933/625/536 +f 933/625/536 938/632/13 937/631/538 +f 939/19/539 940/20/540 941/21/541 +f 941/21/541 942/22/542 939/19/539 +f 943/23/8 944/24/8 945/25/8 +f 945/25/8 946/26/8 943/23/8 +f 947/27/426 948/28/426 949/29/226 +f 949/29/226 950/30/226 947/27/426 +f 951/26/2 952/31/2 953/32/2 +f 953/32/2 954/23/2 951/26/2 +f 955/33/223 956/34/223 957/35/18 +f 957/35/18 958/36/18 955/33/223 +f 959/37/13 960/38/13 961/39/13 +f 962/40/13 947/41/13 950/42/13 +f 950/42/13 963/43/13 962/40/13 +f 964/44/13 965/45/13 966/46/13 +f 966/46/13 965/45/13 967/47/13 +f 967/47/13 968/48/13 966/46/13 +f 939/19/539 942/22/542 969/49/543 +f 969/49/543 970/50/544 939/19/539 +f 950/30/226 949/29/226 971/51/421 +f 971/51/421 972/52/421 950/30/226 +f 958/36/18 957/35/18 973/53/193 +f 973/53/193 974/54/193 958/36/18 +f 963/43/13 950/42/13 972/55/13 +f 972/55/13 975/56/13 963/43/13 +f 961/39/13 968/48/13 967/47/13 +f 967/47/13 959/37/13 961/39/13 +f 941/57/2 940/58/2 976/59/2 +f 976/59/545 962/60/545 941/57/545 +f 941/57/546 962/60/546 963/61/546 +f 963/61/547 942/62/547 941/57/547 +f 942/62/548 963/61/548 975/63/548 +f 975/63/548 969/64/548 942/62/548 +f 969/64/8 975/63/8 977/65/8 +f 977/65/8 970/66/8 969/64/8 +f 970/67/549 977/68/549 978/69/549 +f 978/69/550 939/70/550 970/67/550 +f 939/70/551 978/69/551 976/71/551 +f 976/71/552 940/72/552 939/70/552 +f 979/73/553 977/74/553 975/56/553 +f 975/56/554 972/55/554 979/73/554 +f 971/51/2 980/75/2 979/76/2 +f 979/76/2 972/52/2 971/51/2 +f 981/77/8 982/78/8 948/28/8 +f 948/28/8 947/27/8 981/77/8 +f 962/40/555 976/79/555 981/80/555 +f 981/80/556 947/41/556 962/40/556 +f 983/32/8 943/23/8 946/26/8 +f 946/26/8 984/31/8 983/32/8 +f 960/81/557 981/82/557 976/71/557 +f 976/71/557 961/83/557 960/81/557 +f 961/83/552 976/71/552 978/69/552 +f 978/69/552 968/84/552 961/83/552 +f 968/84/549 978/69/549 977/68/549 +f 977/68/558 966/85/558 968/84/558 +f 966/85/559 977/68/559 979/86/559 +f 979/86/559 964/87/559 966/85/559 +f 985/25/2 951/26/2 954/23/2 +f 954/23/2 986/24/2 985/25/2 +f 965/88/223 955/33/223 958/36/223 +f 958/36/223 967/89/223 965/88/223 +f 967/89/193 958/36/193 974/54/193 +f 974/54/193 959/90/193 967/89/193 +f 945/91/36 982/92/36 981/82/36 +f 981/82/36 946/93/36 945/91/36 +f 946/93/36 981/82/36 960/81/36 +f 960/81/36 984/94/36 946/93/36 +f 984/95/13 960/38/13 959/37/13 +f 959/37/13 983/96/13 984/95/13 +f 983/97/18 959/90/18 974/54/18 +f 974/54/18 943/98/18 983/97/18 +f 943/98/18 974/54/18 973/53/18 +f 973/53/18 944/99/18 943/98/18 +f 953/100/18 956/34/18 955/33/18 +f 955/33/18 954/101/18 953/100/18 +f 954/101/18 955/33/18 965/88/18 +f 965/88/18 986/102/18 954/101/18 +f 986/103/13 965/45/13 964/44/13 +f 964/44/13 985/104/13 986/103/13 +f 985/105/36 964/87/36 979/86/36 +f 979/86/36 951/106/36 985/105/36 +f 951/106/36 979/86/36 980/107/36 +f 980/107/36 952/108/36 951/106/36 +f 987/633/15 988/634/15 989/635/15 +f 989/635/15 990/636/15 987/633/15 +f 988/634/13 991/637/13 992/638/13 +f 992/638/13 989/635/13 988/634/13 +f 993/639/560 994/640/561 995/641/562 +f 995/641/562 996/642/563 993/639/560 +f 997/643/564 998/644/564 999/645/564 +f 999/645/565 1000/646/565 997/643/565 +f 1001/647/566 1000/646/566 999/645/566 +f 999/645/566 1002/648/566 1001/647/566 +f 994/640/561 1003/641/567 997/649/568 +f 997/649/568 1000/650/569 994/640/561 +f 993/639/560 1004/642/570 1003/641/567 +f 1003/641/567 994/640/561 993/639/560 +f 1001/649/571 995/641/562 994/640/561 +f 994/640/561 1000/650/569 1001/649/571 +f 997/651/2 1003/652/2 1005/653/2 +f 1005/653/2 998/654/2 997/651/2 +f 1006/654/8 995/651/8 1001/652/8 +f 1001/652/8 1002/653/8 1006/654/8 +f 998/655/572 1005/656/572 1007/657/572 +f 1007/657/573 999/658/573 998/655/573 +f 1007/657/574 1006/659/574 1002/660/574 +f 1002/660/575 999/658/575 1007/657/575 +f 1008/661/13 1009/662/13 1010/663/13 +f 1010/663/13 1011/664/13 1008/661/13 +f 1012/665/576 1013/666/577 1014/667/578 +f 1014/667/578 1015/668/578 1012/665/576 +f 1012/669/579 1015/670/580 1016/671/580 +f 1016/671/580 1017/672/579 1012/669/579 +f 1017/665/581 1016/668/582 1018/667/582 +f 1018/667/582 1019/666/583 1017/665/581 +f 1019/672/584 1018/671/585 1014/670/585 +f 1014/670/585 1013/669/584 1019/672/584 +f 1013/666/577 1012/665/576 1010/673/586 +f 1010/673/586 1009/674/586 1013/666/577 +f 1012/669/579 1017/672/579 1011/675/587 +f 1011/675/587 1010/676/587 1012/669/579 +f 1011/673/588 1017/665/581 1019/666/583 +f 1019/666/583 1008/674/588 1011/673/588 +f 1019/672/584 1013/669/584 1009/676/589 +f 1009/676/589 1008/675/589 1019/672/584 +f 1020/203/8 1021/204/8 1022/205/8 +f 1022/205/8 1023/206/8 1020/203/8 +f 1023/206/590 1022/207/590 1024/208/590 +f 1024/208/591 1025/209/591 1023/206/591 +f 1026/210/592 1020/203/592 1023/206/592 +f 1023/206/592 1025/209/592 1026/210/592 +f 1027/211/593 1021/212/593 1020/203/593 +f 1020/203/594 1026/210/594 1027/211/594 +f 1025/209/595 1024/208/595 1028/213/595 +f 1028/213/596 1029/214/596 1025/209/596 +f 1029/214/597 1030/215/597 1026/210/597 +f 1026/210/598 1025/209/598 1029/214/598 +f 1026/210/599 1030/215/599 1031/216/599 +f 1031/216/600 1027/211/600 1026/210/600 +f 1032/217/2 1033/218/2 1034/219/2 +f 1034/219/2 1035/220/2 1032/217/2 +f 1036/221/601 1032/222/601 1035/220/601 +f 1035/220/595 1037/223/595 1036/221/595 +f 1038/224/602 1037/223/602 1035/220/602 +f 1035/220/602 1034/219/602 1038/224/602 +f 1039/225/599 1038/224/599 1034/219/599 +f 1034/219/599 1033/226/599 1039/225/599 +f 1028/227/591 1036/221/591 1037/223/591 +f 1037/223/603 1029/214/603 1028/227/603 +f 1038/224/604 1030/215/604 1029/214/604 +f 1029/214/605 1037/223/605 1038/224/605 +f 1038/224/606 1039/225/606 1031/228/606 +f 1031/228/594 1030/215/594 1038/224/594 +f 1040/229/8 1041/230/8 1042/231/8 +f 1042/231/8 1043/232/8 1040/229/8 +f 1044/233/607 1045/234/607 1043/232/607 +f 1043/232/592 1042/231/592 1044/233/592 +f 1046/235/608 1044/233/608 1042/231/608 +f 1042/231/608 1041/236/608 1046/235/608 +f 1044/233/598 1047/237/598 1048/238/598 +f 1048/238/598 1045/234/598 1044/233/598 +f 1044/233/609 1046/239/609 1049/240/609 +f 1049/240/596 1047/237/596 1044/233/596 +f 1050/241/2 1051/242/2 1052/243/2 +f 1052/243/2 1053/244/2 1050/241/2 +f 1054/245/602 1050/241/602 1053/244/602 +f 1053/244/602 1055/246/602 1054/245/602 +f 1056/247/608 1051/248/608 1050/241/608 +f 1050/241/608 1054/245/608 1056/247/608 +f 1048/238/605 1047/237/605 1054/245/605 +f 1054/245/605 1055/246/605 1048/238/605 +f 1054/245/603 1047/237/603 1049/240/603 +f 1049/240/608 1056/249/608 1054/245/608 +f 1057/229/8 1058/230/8 1059/231/8 +f 1059/231/8 1060/232/8 1057/229/8 +f 1061/233/610 1062/234/610 1060/232/610 +f 1060/232/611 1059/231/611 1061/233/611 +f 1063/235/612 1061/233/612 1059/231/612 +f 1059/231/613 1058/236/613 1063/235/613 +f 1061/233/614 1064/237/614 1065/238/614 +f 1065/238/615 1062/234/615 1061/233/615 +f 1061/233/616 1063/239/616 1066/240/616 +f 1066/240/612 1064/237/612 1061/233/612 +f 1067/241/2 1068/242/2 1069/243/2 +f 1069/243/2 1070/244/2 1067/241/2 +f 1071/245/617 1067/241/617 1070/244/617 +f 1070/244/618 1072/246/618 1071/245/618 +f 1073/247/612 1068/248/612 1067/241/612 +f 1067/241/613 1071/245/613 1073/247/613 +f 1065/238/619 1064/237/619 1071/245/619 +f 1071/245/620 1072/246/620 1065/238/620 +f 1071/245/613 1064/237/613 1066/240/613 +f 1066/240/621 1073/249/621 1071/245/621 +f 1074/229/8 1075/230/8 1076/231/8 +f 1076/231/8 1077/232/8 1074/229/8 +f 1078/233/622 1079/234/622 1077/232/622 +f 1077/232/622 1076/231/622 1078/233/622 +f 1080/235/623 1078/233/623 1076/231/623 +f 1076/231/624 1075/236/624 1080/235/624 +f 1078/233/625 1081/237/625 1082/238/625 +f 1082/238/626 1079/234/626 1078/233/626 +f 1078/233/624 1080/239/624 1083/240/624 +f 1083/240/627 1081/237/627 1078/233/627 +f 1084/241/2 1085/242/2 1086/243/2 +f 1086/243/2 1087/244/2 1084/241/2 +f 1088/245/628 1084/241/628 1087/244/628 +f 1087/244/628 1089/246/628 1088/245/628 +f 1090/247/623 1085/248/623 1084/241/623 +f 1084/241/624 1088/245/624 1090/247/624 +f 1082/238/629 1081/237/629 1088/245/629 +f 1088/245/630 1089/246/630 1082/238/630 +f 1088/245/631 1081/237/631 1083/240/631 +f 1083/240/623 1090/249/623 1088/245/623 +f 1091/229/8 1092/230/8 1093/231/8 +f 1093/231/8 1094/232/8 1091/229/8 +f 1095/233/632 1096/234/632 1094/232/632 +f 1094/232/622 1093/231/622 1095/233/622 +f 1097/235/623 1095/233/623 1093/231/623 +f 1093/231/623 1092/236/623 1097/235/623 +f 1095/233/626 1098/237/626 1099/238/626 +f 1099/238/626 1096/234/626 1095/233/626 +f 1095/233/631 1097/239/631 1100/240/631 +f 1100/240/624 1098/237/624 1095/233/624 +f 1101/241/2 1102/242/2 1103/243/2 +f 1103/243/2 1104/244/2 1101/241/2 +f 1105/245/628 1101/241/628 1104/244/628 +f 1104/244/633 1106/246/633 1105/245/633 +f 1107/247/624 1102/248/624 1101/241/624 +f 1101/241/624 1105/245/624 1107/247/624 +f 1099/238/630 1098/237/630 1105/245/630 +f 1105/245/630 1106/246/630 1099/238/630 +f 1105/245/623 1098/237/623 1100/240/623 +f 1100/240/627 1107/249/627 1105/245/627 +f 1108/229/8 1109/230/8 1110/231/8 +f 1110/231/8 1111/232/8 1108/229/8 +f 1112/233/622 1113/234/622 1111/232/622 +f 1111/232/622 1110/231/622 1112/233/622 +f 1114/235/624 1112/233/624 1110/231/624 +f 1110/231/624 1109/236/624 1114/235/624 +f 1112/233/625 1115/237/625 1116/238/625 +f 1116/238/626 1113/234/626 1112/233/626 +f 1112/233/624 1114/239/624 1117/240/624 +f 1117/240/624 1115/237/624 1112/233/624 +f 1118/241/2 1119/242/2 1120/243/2 +f 1120/243/2 1121/244/2 1118/241/2 +f 1122/245/628 1118/241/628 1121/244/628 +f 1121/244/628 1123/246/628 1122/245/628 +f 1124/247/623 1119/248/623 1118/241/623 +f 1118/241/623 1122/245/623 1124/247/623 +f 1116/238/629 1115/237/629 1122/245/629 +f 1122/245/630 1123/246/630 1116/238/630 +f 1122/245/623 1115/237/623 1117/240/623 +f 1117/240/623 1124/249/623 1122/245/623 +f 1125/229/8 1126/230/8 1127/231/8 +f 1127/231/8 1128/232/8 1125/229/8 +f 1129/233/634 1130/234/634 1128/232/634 +f 1128/232/634 1127/231/634 1129/233/634 +f 1131/235/635 1129/233/635 1127/231/635 +f 1127/231/636 1126/236/636 1131/235/636 +f 1129/233/637 1132/237/637 1133/238/637 +f 1133/238/638 1130/234/638 1129/233/638 +f 1129/233/635 1131/239/635 1134/240/635 +f 1134/240/635 1132/237/635 1129/233/635 +f 1135/241/2 1136/242/2 1137/243/2 +f 1137/243/2 1138/244/2 1135/241/2 +f 1139/245/639 1135/241/639 1138/244/639 +f 1138/244/639 1140/246/639 1139/245/639 +f 1141/247/640 1136/248/640 1135/241/640 +f 1135/241/641 1139/245/641 1141/247/641 +f 1133/238/642 1132/237/642 1139/245/642 +f 1139/245/643 1140/246/643 1133/238/643 +f 1139/245/641 1132/237/641 1134/240/641 +f 1134/240/641 1141/249/641 1139/245/641 +f 1142/231/8 1143/230/8 1144/229/8 +f 1144/229/8 1145/232/8 1142/231/8 +f 1145/232/644 1146/234/644 1147/233/644 +f 1147/233/644 1142/231/644 1145/232/644 +f 1142/231/645 1147/233/645 1148/235/645 +f 1148/235/645 1143/236/645 1142/231/645 +f 1149/238/646 1150/237/646 1147/233/646 +f 1147/233/647 1146/234/647 1149/238/647 +f 1147/233/648 1150/237/648 1151/240/648 +f 1151/240/648 1148/239/648 1147/233/648 +f 1152/243/2 1153/242/2 1154/241/2 +f 1154/241/2 1155/244/2 1152/243/2 +f 1155/244/649 1154/241/649 1156/245/649 +f 1156/245/649 1157/246/649 1155/244/649 +f 1154/241/648 1153/248/648 1158/247/648 +f 1158/247/648 1156/245/648 1154/241/648 +f 1156/245/650 1150/237/650 1149/238/650 +f 1149/238/651 1157/246/651 1156/245/651 +f 1156/245/645 1158/249/645 1151/240/645 +f 1151/240/645 1150/237/645 1156/245/645 +f 1159/231/8 1160/230/8 1161/229/8 +f 1161/229/8 1162/232/8 1159/231/8 +f 1162/232/622 1163/234/622 1164/233/622 +f 1164/233/652 1159/231/652 1162/232/652 +f 1159/231/653 1164/233/653 1165/235/653 +f 1165/235/653 1160/236/653 1159/231/653 +f 1166/238/625 1167/237/625 1164/233/625 +f 1164/233/626 1163/234/626 1166/238/626 +f 1164/233/653 1167/237/653 1168/240/653 +f 1168/240/654 1165/239/654 1164/233/654 +f 1169/243/2 1170/242/2 1171/241/2 +f 1171/241/2 1172/244/2 1169/243/2 +f 1172/244/628 1171/241/628 1173/245/628 +f 1173/245/628 1174/246/628 1172/244/628 +f 1171/241/654 1170/248/654 1175/247/654 +f 1175/247/654 1173/245/654 1171/241/654 +f 1173/245/629 1167/237/629 1166/238/629 +f 1166/238/630 1174/246/630 1173/245/630 +f 1173/245/653 1175/249/653 1168/240/653 +f 1168/240/654 1167/237/654 1173/245/654 +f 1176/677/36 1177/678/36 1178/679/36 +f 1178/679/36 1179/680/36 1176/677/36 +f 1180/681/2 1176/677/2 1179/680/2 +f 1179/680/2 1181/682/2 1180/681/2 +f 937/627/8 938/630/8 1182/629/8 +f 1182/629/8 1183/628/8 937/627/8 +f 1184/683/15 1185/684/15 1186/685/15 +f 1186/685/15 1187/686/15 1184/683/15 +f 1185/684/8 1188/687/8 1189/688/8 +f 1189/688/8 1186/685/8 1185/684/8 +f 1190/599/655 1191/600/656 1192/601/657 +f 1192/601/657 1193/602/658 1190/599/655 +f 1194/603/659 1191/600/656 1190/599/655 +f 1190/599/655 1195/604/660 1194/603/659 +f 1190/605/13 1193/606/661 1196/607/661 +f 1196/607/661 1197/608/662 1190/605/13 +f 1195/609/663 1190/605/13 1197/608/662 +f 1197/608/662 1198/610/664 1195/609/663 +f 1197/611/665 1196/612/666 1199/613/667 +f 1199/613/667 1200/614/668 1197/611/665 +f 1201/615/669 1198/616/670 1197/611/665 +f 1197/611/665 1200/614/668 1201/615/669 +f 1191/617/16 1200/618/671 1199/619/672 +f 1199/619/672 1192/620/672 1191/617/16 +f 1194/621/673 1201/622/674 1200/618/671 +f 1200/618/671 1191/617/16 1194/621/673 +f 1202/599/675 1203/602/676 1204/601/677 +f 1204/601/677 1205/600/678 1202/599/675 +f 1206/603/679 1207/604/680 1202/599/675 +f 1202/599/675 1205/600/678 1206/603/679 +f 1202/605/681 1208/608/682 1209/607/683 +f 1209/607/683 1203/606/661 1202/605/681 +f 1207/609/684 1210/610/685 1208/608/682 +f 1208/608/682 1202/605/681 1207/609/684 +f 1208/611/686 1211/614/687 1212/613/688 +f 1212/613/688 1209/612/689 1208/611/686 +f 1213/615/690 1211/614/687 1208/611/686 +f 1208/611/686 1210/616/691 1213/615/690 +f 1205/617/16 1204/620/672 1212/619/672 +f 1212/619/672 1211/618/692 1205/617/16 +f 1206/621/693 1205/617/16 1211/618/692 +f 1211/618/692 1213/622/694 1206/621/693 +f 1214/599/695 1215/602/517 1216/601/518 +f 1216/601/518 1217/600/519 1214/599/695 +f 1218/603/520 1219/604/521 1214/599/695 +f 1214/599/695 1217/600/519 1218/603/520 +f 1214/605/406 1220/608/696 1221/607/523 +f 1221/607/523 1215/606/483 1214/605/406 +f 1219/609/524 1222/610/525 1220/608/696 +f 1220/608/696 1214/605/406 1219/609/524 +f 1220/611/526 1223/614/527 1224/613/528 +f 1224/613/528 1221/612/529 1220/611/526 +f 1225/615/530 1223/614/527 1220/611/526 +f 1220/611/526 1222/616/531 1225/615/530 +f 1217/617/8 1216/620/494 1224/619/494 +f 1224/619/494 1223/618/532 1217/617/8 +f 1218/621/533 1217/617/8 1223/618/532 +f 1223/618/532 1225/622/534 1218/621/533 +f 1226/599/477 1227/600/478 1228/601/479 +f 1228/601/479 1229/602/480 1226/599/477 +f 1230/603/481 1227/600/478 1226/599/477 +f 1226/599/477 1231/604/482 1230/603/481 +f 1226/605/2 1229/606/483 1232/607/483 +f 1232/607/483 1233/608/484 1226/605/2 +f 1231/609/485 1226/605/2 1233/608/484 +f 1233/608/484 1234/610/486 1231/609/485 +f 1233/611/487 1232/612/488 1235/613/489 +f 1235/613/489 1236/614/490 1233/611/487 +f 1237/615/491 1234/616/492 1233/611/487 +f 1233/611/487 1236/614/490 1237/615/491 +f 1227/617/8 1236/618/493 1235/619/494 +f 1235/619/494 1228/620/494 1227/617/8 +f 1230/621/495 1237/622/496 1236/618/493 +f 1236/618/493 1227/617/8 1230/621/495 +f 1238/599/697 1239/600/698 1240/601/699 +f 1240/601/699 1241/602/517 1238/599/697 +f 1242/603/700 1239/600/698 1238/599/697 +f 1238/599/697 1243/604/521 1242/603/700 +f 1238/605/80 1241/606/504 1244/607/504 +f 1244/607/504 1245/608/701 1238/605/80 +f 1243/609/702 1238/605/80 1245/608/701 +f 1245/608/701 1246/610/703 1243/609/702 +f 1245/611/704 1244/612/529 1247/613/705 +f 1247/613/705 1248/614/706 1245/611/704 +f 1249/615/707 1246/616/531 1245/611/704 +f 1245/611/704 1248/614/706 1249/615/707 +f 1239/617/2 1248/618/708 1247/619/512 +f 1247/619/512 1240/620/512 1239/617/2 +f 1242/621/709 1249/622/710 1248/618/708 +f 1248/618/708 1239/617/2 1242/621/709 +f 1250/599/697 1251/600/711 1252/601/699 +f 1252/601/699 1253/602/517 1250/599/697 +f 1254/603/700 1251/600/711 1250/599/697 +f 1250/599/697 1255/604/521 1254/603/700 +f 1250/605/8 1253/606/504 1256/607/504 +f 1256/607/504 1257/608/712 1250/605/8 +f 1255/609/702 1250/605/8 1257/608/712 +f 1257/608/712 1258/610/703 1255/609/702 +f 1257/611/704 1256/612/529 1259/613/705 +f 1259/613/705 1260/614/706 1257/611/704 +f 1261/615/707 1258/616/531 1257/611/704 +f 1257/611/704 1260/614/706 1261/615/707 +f 1251/617/2 1260/618/708 1259/619/512 +f 1259/619/512 1252/620/512 1251/617/2 +f 1254/621/709 1261/622/710 1260/618/708 +f 1260/618/708 1251/617/2 1254/621/709 +f 1262/599/713 1263/600/711 1264/601/699 +f 1264/601/699 1265/602/517 1262/599/713 +f 1266/603/700 1263/600/711 1262/599/713 +f 1262/599/713 1267/604/521 1266/603/700 +f 1262/605/8 1265/606/504 1268/607/504 +f 1268/607/504 1269/608/712 1262/605/8 +f 1267/609/702 1262/605/8 1269/608/712 +f 1269/608/712 1270/610/703 1267/609/702 +f 1269/611/704 1268/612/529 1271/613/705 +f 1271/613/705 1272/614/706 1269/611/704 +f 1273/615/707 1270/616/531 1269/611/704 +f 1269/611/704 1272/614/706 1273/615/707 +f 1263/617/2 1272/618/708 1271/619/512 +f 1271/619/512 1264/620/512 1263/617/2 +f 1266/621/709 1273/622/710 1272/618/708 +f 1272/618/708 1263/617/2 1266/621/709 +f 1274/599/516 1275/602/517 1276/601/518 +f 1276/601/518 1277/600/714 1274/599/516 +f 1278/603/520 1279/604/521 1274/599/516 +f 1274/599/516 1277/600/714 1278/603/520 +f 1274/605/406 1280/608/522 1281/607/523 +f 1281/607/523 1275/606/483 1274/605/406 +f 1279/609/524 1282/610/525 1280/608/522 +f 1280/608/522 1274/605/406 1279/609/524 +f 1280/611/526 1283/614/527 1284/613/528 +f 1284/613/528 1281/612/529 1280/611/526 +f 1285/615/530 1283/614/527 1280/611/526 +f 1280/611/526 1282/616/531 1285/615/530 +f 1277/617/8 1276/620/494 1284/619/494 +f 1284/619/494 1283/618/532 1277/617/8 +f 1278/621/533 1277/617/8 1283/618/532 +f 1283/618/532 1285/622/534 1278/621/533 +f 1286/599/477 1287/600/478 1288/601/479 +f 1288/601/479 1289/602/480 1286/599/477 +f 1290/603/481 1287/600/478 1286/599/477 +f 1286/599/477 1291/604/482 1290/603/481 +f 1286/605/2 1289/606/483 1292/607/483 +f 1292/607/483 1293/608/484 1286/605/2 +f 1291/609/485 1286/605/2 1293/608/484 +f 1293/608/484 1294/610/486 1291/609/485 +f 1293/611/487 1292/612/488 1295/613/489 +f 1295/613/489 1296/614/490 1293/611/487 +f 1297/615/491 1294/616/492 1293/611/487 +f 1293/611/487 1296/614/490 1297/615/491 +f 1287/617/8 1296/618/493 1295/619/494 +f 1295/619/494 1288/620/494 1287/617/8 +f 1290/621/495 1297/622/496 1296/618/493 +f 1296/618/493 1287/617/8 1290/621/495 +f 1298/689/715 1299/690/716 1300/691/717 +f 1300/691/717 1301/692/718 1298/689/715 +f 1302/693/719 1299/690/719 1298/689/720 +f 1298/689/720 1303/694/720 1302/693/719 +f 1304/695/721 1305/696/722 1306/697/723 +f 1306/697/723 1307/698/723 1304/695/721 +f 1308/699/724 1309/700/724 1310/701/725 +f 1310/701/725 1311/702/725 1308/699/724 +f 1312/703/726 1301/692/727 1313/704/728 +f 1313/704/728 1314/705/728 1312/703/726 +f 1306/697/729 1305/696/730 1300/691/717 +f 1300/691/717 1299/690/716 1306/697/729 +f 1307/698/731 1306/697/731 1299/690/719 +f 1299/690/719 1302/706/719 1307/698/731 +f 1314/707/732 1313/704/732 1309/700/724 +f 1309/700/724 1308/699/724 1314/707/732 +f 1309/700/733 1313/704/734 1301/692/718 +f 1301/692/718 1300/691/717 1309/700/733 +f 1311/708/735 1310/701/735 1305/696/722 +f 1305/696/722 1304/695/721 1311/708/735 +f 1303/694/736 1298/689/736 1301/692/727 +f 1301/692/727 1312/703/726 1303/694/736 +f 1305/696/730 1310/701/737 1309/700/733 +f 1309/700/733 1300/691/717 1305/696/730 +f 1315/709/738 1316/710/739 1317/711/740 +f 1317/711/740 1318/712/741 1315/709/738 +f 1319/713/742 1320/714/742 1316/715/742 +f 1316/715/742 1315/716/742 1319/713/742 +f 1321/712/743 1322/711/744 1320/710/745 +f 1320/710/745 1319/709/746 1321/712/743 +f 1321/717/747 1318/718/747 1317/719/747 +f 1317/719/747 1322/720/747 1321/717/747 +f 1323/721/36 1324/722/36 1325/723/36 +f 1325/723/36 1326/724/36 1323/721/36 +f 1327/725/748 1328/726/748 1329/727/749 +f 1329/727/749 1330/728/749 1327/725/748 +f 1326/729/750 1325/730/750 1328/726/748 +f 1328/726/748 1327/725/748 1326/729/750 +f 1331/731/751 1327/732/752 1330/733/753 +f 1330/733/753 1332/734/753 1331/731/751 +f 1323/735/754 1326/736/754 1327/732/752 +f 1327/732/752 1331/731/751 1323/735/754 +f 1333/726/755 1331/725/755 1332/728/756 +f 1332/728/756 1334/727/756 1333/726/755 +f 1324/730/757 1323/729/757 1331/725/755 +f 1331/725/755 1333/726/755 1324/730/757 +f 1328/737/758 1333/738/758 1334/739/759 +f 1334/739/759 1329/740/759 1328/737/758 +f 1325/741/760 1324/742/760 1333/738/758 +f 1333/738/758 1328/737/758 1325/741/760 +f 1335/743/36 1336/744/36 1337/745/36 +f 1337/745/36 1338/746/36 1335/743/36 +f 1339/747/761 1340/748/761 1341/749/762 +f 1341/749/762 1342/750/762 1339/747/761 +f 1338/751/763 1337/752/763 1340/748/761 +f 1340/748/761 1339/747/761 1338/751/763 +f 1343/753/764 1339/754/765 1342/755/766 +f 1342/755/766 1344/756/766 1343/753/764 +f 1335/757/767 1338/758/767 1339/754/765 +f 1339/754/765 1343/753/764 1335/757/767 +f 1345/748/768 1343/747/769 1344/750/770 +f 1344/750/770 1346/749/770 1345/748/768 +f 1336/752/771 1335/751/771 1343/747/769 +f 1343/747/769 1345/748/768 1336/752/771 +f 1340/754/772 1345/759/773 1346/760/774 +f 1346/760/774 1341/755/774 1340/754/772 +f 1337/758/775 1336/761/775 1345/759/773 +f 1345/759/773 1340/754/772 1337/758/775 +f 1347/762/776 1348/763/777 1349/764/778 +f 1349/764/778 1350/765/778 1347/762/776 +f 1351/766/779 1352/767/779 1348/763/777 +f 1348/763/777 1347/762/776 1351/766/779 +f 1353/768/780 1347/769/781 1350/770/782 +f 1350/770/782 1354/771/782 1353/768/780 +f 1355/772/783 1351/773/783 1347/769/781 +f 1347/769/781 1353/768/780 1355/772/783 +f 1356/763/784 1353/762/785 1354/765/786 +f 1354/765/786 1357/764/786 1356/763/784 +f 1358/767/787 1355/766/787 1353/762/785 +f 1353/762/785 1356/763/784 1358/767/787 +f 1348/774/788 1356/768/789 1357/771/790 +f 1357/771/790 1349/775/790 1348/774/788 +f 1352/776/791 1358/777/791 1356/768/789 +f 1356/768/789 1348/774/788 1352/776/791 +f 1359/778/792 1360/779/793 1361/780/794 +f 1361/780/794 1362/781/794 1359/778/792 +f 1363/782/795 1364/783/795 1360/779/793 +f 1360/779/793 1359/778/792 1363/782/795 +f 1365/784/796 1359/785/797 1362/786/798 +f 1362/786/798 1366/787/798 1365/784/796 +f 1367/788/799 1363/789/799 1359/785/797 +f 1359/785/797 1365/784/796 1367/788/799 +f 1368/790/800 1365/791/801 1366/792/802 +f 1366/792/802 1369/793/802 1368/790/800 +f 1370/794/803 1367/795/803 1365/791/801 +f 1365/791/801 1368/790/800 1370/794/803 +f 1360/785/804 1368/796/805 1369/787/806 +f 1369/787/806 1361/797/806 1360/785/804 +f 1364/789/807 1370/798/807 1368/796/805 +f 1368/796/805 1360/785/804 1364/789/807 +f 1371/799/36 1372/800/36 1373/801/36 +f 1373/801/36 1374/802/36 1371/799/36 +f 1375/803/808 1376/804/809 1377/805/810 +f 1377/805/810 1378/806/810 1375/803/808 +f 1374/807/811 1373/808/811 1376/804/809 +f 1376/804/809 1375/803/808 1374/807/811 +f 1379/809/812 1375/810/812 1378/811/813 +f 1378/811/813 1380/812/813 1379/809/812 +f 1371/813/814 1374/814/814 1375/810/812 +f 1375/810/812 1379/809/812 1371/813/814 +f 1381/804/815 1379/803/816 1380/806/817 +f 1380/806/817 1382/805/817 1381/804/815 +f 1372/808/818 1371/807/818 1379/803/816 +f 1379/803/816 1381/804/815 1372/808/818 +f 1376/815/819 1381/809/819 1382/816/820 +f 1382/816/820 1377/817/820 1376/815/819 +f 1373/818/821 1372/819/822 1381/809/819 +f 1381/809/819 1376/815/819 1373/818/821 +f 1383/820/36 1384/821/36 1385/822/36 +f 1385/822/36 1386/823/36 1383/820/36 +f 1387/824/823 1388/825/824 1389/826/825 +f 1389/826/825 1390/827/825 1387/824/823 +f 1386/828/826 1385/829/826 1388/825/824 +f 1388/825/824 1387/824/823 1386/828/826 +f 1391/737/827 1387/738/828 1390/734/829 +f 1390/734/829 1392/740/829 1391/737/827 +f 1383/741/830 1386/735/830 1387/738/828 +f 1387/738/828 1391/737/827 1383/741/830 +f 1393/825/831 1391/824/832 1392/827/833 +f 1392/827/833 1394/826/833 1393/825/831 +f 1384/829/834 1383/828/834 1391/824/832 +f 1391/824/832 1393/825/831 1384/829/834 +f 1388/731/835 1393/737/836 1394/733/837 +f 1394/733/837 1389/830/837 1388/731/835 +f 1385/831/838 1384/736/838 1393/737/836 +f 1393/737/836 1388/731/835 1385/831/838 +f 1395/832/36 1396/833/36 1397/834/36 +f 1397/834/36 1398/835/36 1395/832/36 +f 1399/836/839 1400/837/839 1401/838/840 +f 1401/838/840 1402/839/840 1399/836/839 +f 1398/840/841 1397/841/841 1400/837/839 +f 1400/837/839 1399/836/839 1398/840/841 +f 1403/737/842 1399/731/842 1402/734/843 +f 1402/734/843 1404/733/843 1403/737/842 +f 1395/741/844 1398/735/844 1399/731/842 +f 1399/731/842 1403/737/842 1395/741/844 +f 1405/837/845 1403/836/845 1404/839/846 +f 1404/839/846 1406/838/846 1405/837/845 +f 1396/841/847 1395/840/847 1403/836/845 +f 1403/836/845 1405/837/845 1396/841/847 +f 1400/842/848 1405/732/848 1406/843/849 +f 1406/843/849 1401/734/849 1400/842/848 +f 1397/831/850 1396/736/851 1405/732/848 +f 1405/732/848 1400/842/848 1397/831/850 +f 1407/721/36 1408/722/36 1409/723/36 +f 1409/723/36 1410/724/36 1407/721/36 +f 1411/725/852 1412/726/748 1413/727/749 +f 1413/727/749 1414/728/749 1411/725/852 +f 1410/729/750 1409/730/750 1412/726/748 +f 1412/726/748 1411/725/852 1410/729/750 +f 1415/731/751 1411/732/752 1414/733/753 +f 1414/733/753 1416/734/753 1415/731/751 +f 1407/735/754 1410/736/754 1411/732/752 +f 1411/732/752 1415/731/751 1407/735/754 +f 1417/726/755 1415/725/755 1416/728/756 +f 1416/728/756 1418/727/756 1417/726/755 +f 1408/730/757 1407/729/757 1415/725/755 +f 1415/725/755 1417/726/755 1408/730/757 +f 1412/737/758 1417/738/758 1418/739/759 +f 1418/739/759 1413/740/759 1412/737/758 +f 1409/741/760 1408/742/760 1417/738/758 +f 1417/738/758 1412/737/758 1409/741/760 +f 1419/743/36 1420/744/36 1421/745/36 +f 1421/745/36 1422/746/36 1419/743/36 +f 1423/747/761 1424/748/761 1425/749/762 +f 1425/749/762 1426/750/762 1423/747/761 +f 1422/751/763 1421/752/763 1424/748/761 +f 1424/748/761 1423/747/761 1422/751/763 +f 1427/753/764 1423/754/765 1426/755/766 +f 1426/755/766 1428/756/766 1427/753/764 +f 1419/757/767 1422/758/767 1423/754/765 +f 1423/754/765 1427/753/764 1419/757/767 +f 1429/748/768 1427/747/769 1428/750/770 +f 1428/750/770 1430/749/770 1429/748/768 +f 1420/752/771 1419/751/771 1427/747/769 +f 1427/747/769 1429/748/768 1420/752/771 +f 1424/754/772 1429/759/773 1430/760/774 +f 1430/760/774 1425/755/774 1424/754/772 +f 1421/758/775 1420/761/775 1429/759/773 +f 1429/759/773 1424/754/772 1421/758/775 +f 1431/762/776 1432/763/777 1433/764/778 +f 1433/764/778 1434/765/778 1431/762/776 +f 1435/766/779 1436/767/779 1432/763/777 +f 1432/763/777 1431/762/776 1435/766/779 +f 1437/768/780 1431/769/781 1434/770/782 +f 1434/770/782 1438/771/782 1437/768/780 +f 1439/772/783 1435/773/783 1431/769/781 +f 1431/769/781 1437/768/780 1439/772/783 +f 1440/763/784 1437/762/785 1438/765/786 +f 1438/765/786 1441/764/786 1440/763/784 +f 1442/767/787 1439/766/787 1437/762/785 +f 1437/762/785 1440/763/784 1442/767/787 +f 1432/774/788 1440/768/789 1441/771/790 +f 1441/771/790 1433/775/790 1432/774/788 +f 1436/776/791 1442/777/791 1440/768/789 +f 1440/768/789 1432/774/788 1436/776/791 +f 1443/778/792 1444/779/793 1445/780/794 +f 1445/780/794 1446/781/794 1443/778/792 +f 1447/782/795 1448/783/795 1444/779/793 +f 1444/779/793 1443/778/792 1447/782/795 +f 1449/784/796 1443/785/797 1446/786/798 +f 1446/786/798 1450/787/798 1449/784/796 +f 1451/788/799 1447/789/799 1443/785/797 +f 1443/785/797 1449/784/796 1451/788/799 +f 1452/790/853 1449/791/854 1450/792/802 +f 1450/792/802 1453/793/802 1452/790/853 +f 1454/794/803 1451/795/803 1449/791/854 +f 1449/791/854 1452/790/853 1454/794/803 +f 1444/785/804 1452/796/805 1453/787/806 +f 1453/787/806 1445/797/806 1444/785/804 +f 1448/789/807 1454/798/807 1452/796/805 +f 1452/796/805 1444/785/804 1448/789/807 +f 1455/799/36 1456/800/36 1457/801/36 +f 1457/801/36 1458/802/36 1455/799/36 +f 1459/803/855 1460/804/856 1461/805/810 +f 1461/805/810 1462/806/810 1459/803/855 +f 1458/807/811 1457/808/811 1460/804/856 +f 1460/804/856 1459/803/855 1458/807/811 +f 1463/809/812 1459/810/812 1462/811/813 +f 1462/811/813 1464/812/813 1463/809/812 +f 1455/813/814 1458/814/814 1459/810/812 +f 1459/810/812 1463/809/812 1455/813/814 +f 1465/804/815 1463/803/816 1464/806/817 +f 1464/806/817 1466/805/817 1465/804/815 +f 1456/808/818 1455/807/818 1463/803/816 +f 1463/803/816 1465/804/815 1456/808/818 +f 1460/815/819 1465/809/819 1466/816/820 +f 1466/816/820 1461/817/820 1460/815/819 +f 1457/818/821 1456/819/822 1465/809/819 +f 1465/809/819 1460/815/819 1457/818/821 +f 1467/820/36 1468/821/36 1469/822/36 +f 1469/822/36 1470/823/36 1467/820/36 +f 1471/824/857 1472/825/858 1473/826/825 +f 1473/826/825 1474/827/825 1471/824/857 +f 1470/828/826 1469/829/826 1472/825/858 +f 1472/825/858 1471/824/857 1470/828/826 +f 1475/737/827 1471/738/828 1474/734/829 +f 1474/734/829 1476/740/829 1475/737/827 +f 1467/741/830 1470/735/830 1471/738/828 +f 1471/738/828 1475/737/827 1467/741/830 +f 1477/825/831 1475/824/832 1476/827/833 +f 1476/827/833 1478/826/833 1477/825/831 +f 1468/829/834 1467/828/834 1475/824/832 +f 1475/824/832 1477/825/831 1468/829/834 +f 1472/731/835 1477/737/836 1478/733/837 +f 1478/733/837 1473/830/837 1472/731/835 +f 1469/831/838 1468/736/838 1477/737/836 +f 1477/737/836 1472/731/835 1469/831/838 +f 1479/832/36 1480/833/36 1481/834/36 +f 1481/834/36 1482/835/36 1479/832/36 +f 1483/836/839 1484/837/839 1485/838/840 +f 1485/838/840 1486/839/840 1483/836/839 +f 1482/840/841 1481/841/841 1484/837/839 +f 1484/837/839 1483/836/839 1482/840/841 +f 1487/737/842 1483/731/842 1486/734/843 +f 1486/734/843 1488/733/843 1487/737/842 +f 1479/741/844 1482/735/844 1483/731/842 +f 1483/731/842 1487/737/842 1479/741/844 +f 1489/837/859 1487/836/859 1488/839/846 +f 1488/839/846 1490/838/846 1489/837/859 +f 1480/841/847 1479/840/847 1487/836/859 +f 1487/836/859 1489/837/859 1480/841/847 +f 1484/842/848 1489/732/848 1490/843/849 +f 1490/843/849 1485/734/849 1484/842/848 +f 1481/831/850 1480/736/851 1489/732/848 +f 1489/732/848 1484/842/848 1481/831/850 +f 1491/721/36 1492/722/36 1493/723/36 +f 1493/723/36 1494/724/36 1491/721/36 +f 1495/725/852 1496/726/748 1497/727/860 +f 1497/727/860 1498/728/860 1495/725/852 +f 1494/729/750 1493/730/750 1496/726/748 +f 1496/726/748 1495/725/852 1494/729/750 +f 1499/731/751 1495/732/752 1498/733/753 +f 1498/733/753 1500/734/753 1499/731/751 +f 1491/735/754 1494/736/754 1495/732/752 +f 1495/732/752 1499/731/751 1491/735/754 +f 1501/726/755 1499/725/755 1500/728/756 +f 1500/728/756 1502/727/756 1501/726/755 +f 1492/730/757 1491/729/757 1499/725/755 +f 1499/725/755 1501/726/755 1492/730/757 +f 1496/737/758 1501/738/758 1502/739/759 +f 1502/739/759 1497/740/759 1496/737/758 +f 1493/741/760 1492/742/760 1501/738/758 +f 1501/738/758 1496/737/758 1493/741/760 +f 1503/743/36 1504/744/36 1505/745/36 +f 1505/745/36 1506/746/36 1503/743/36 +f 1507/747/761 1508/748/761 1509/749/762 +f 1509/749/762 1510/750/762 1507/747/761 +f 1506/751/763 1505/752/763 1508/748/761 +f 1508/748/761 1507/747/761 1506/751/763 +f 1511/753/764 1507/754/765 1510/755/766 +f 1510/755/766 1512/756/766 1511/753/764 +f 1503/757/767 1506/758/767 1507/754/765 +f 1507/754/765 1511/753/764 1503/757/767 +f 1513/748/768 1511/747/769 1512/750/770 +f 1512/750/770 1514/749/770 1513/748/768 +f 1504/752/771 1503/751/771 1511/747/769 +f 1511/747/769 1513/748/768 1504/752/771 +f 1508/754/772 1513/759/773 1514/760/774 +f 1514/760/774 1509/755/774 1508/754/772 +f 1505/758/775 1504/761/775 1513/759/773 +f 1513/759/773 1508/754/772 1505/758/775 +f 1515/762/776 1516/763/777 1517/764/778 +f 1517/764/778 1518/765/778 1515/762/776 +f 1519/766/779 1520/767/779 1516/763/777 +f 1516/763/777 1515/762/776 1519/766/779 +f 1521/768/780 1515/769/781 1518/770/782 +f 1518/770/782 1522/771/782 1521/768/780 +f 1523/772/783 1519/773/783 1515/769/781 +f 1515/769/781 1521/768/780 1523/772/783 +f 1524/763/784 1521/762/785 1522/765/786 +f 1522/765/786 1525/764/786 1524/763/784 +f 1526/767/787 1523/766/787 1521/762/785 +f 1521/762/785 1524/763/784 1526/767/787 +f 1516/774/788 1524/768/789 1525/771/790 +f 1525/771/790 1517/775/790 1516/774/788 +f 1520/776/791 1526/777/791 1524/768/789 +f 1524/768/789 1516/774/788 1520/776/791 +f 1527/778/792 1528/779/793 1529/780/794 +f 1529/780/794 1530/781/794 1527/778/792 +f 1531/782/795 1532/783/795 1528/779/793 +f 1528/779/793 1527/778/792 1531/782/795 +f 1533/784/796 1527/785/797 1530/786/798 +f 1530/786/798 1534/787/798 1533/784/796 +f 1535/788/799 1531/789/799 1527/785/797 +f 1527/785/797 1533/784/796 1535/788/799 +f 1536/790/800 1533/791/801 1534/792/802 +f 1534/792/802 1537/793/802 1536/790/800 +f 1538/794/803 1535/795/803 1533/791/801 +f 1533/791/801 1536/790/800 1538/794/803 +f 1528/785/804 1536/796/805 1537/787/806 +f 1537/787/806 1529/797/806 1528/785/804 +f 1532/789/807 1538/798/807 1536/796/805 +f 1536/796/805 1528/785/804 1532/789/807 +f 1539/799/36 1540/800/36 1541/801/36 +f 1541/801/36 1542/802/36 1539/799/36 +f 1543/803/808 1544/804/809 1545/805/810 +f 1545/805/810 1546/806/810 1543/803/808 +f 1542/807/811 1541/808/811 1544/804/809 +f 1544/804/809 1543/803/808 1542/807/811 +f 1547/809/812 1543/810/812 1546/811/813 +f 1546/811/813 1548/812/813 1547/809/812 +f 1539/813/814 1542/814/814 1543/810/812 +f 1543/810/812 1547/809/812 1539/813/814 +f 1549/804/815 1547/803/816 1548/806/817 +f 1548/806/817 1550/805/817 1549/804/815 +f 1540/808/818 1539/807/818 1547/803/816 +f 1547/803/816 1549/804/815 1540/808/818 +f 1544/815/819 1549/809/819 1550/816/820 +f 1550/816/820 1545/817/820 1544/815/819 +f 1541/818/821 1540/819/822 1549/809/819 +f 1549/809/819 1544/815/819 1541/818/821 +f 1551/820/36 1552/821/36 1553/822/36 +f 1553/822/36 1554/823/36 1551/820/36 +f 1555/824/823 1556/825/824 1557/826/825 +f 1557/826/825 1558/827/825 1555/824/823 +f 1554/828/826 1553/829/826 1556/825/824 +f 1556/825/824 1555/824/823 1554/828/826 +f 1559/737/827 1555/738/828 1558/734/829 +f 1558/734/829 1560/740/829 1559/737/827 +f 1551/741/830 1554/735/830 1555/738/828 +f 1555/738/828 1559/737/827 1551/741/830 +f 1561/825/832 1559/824/832 1560/827/833 +f 1560/827/833 1562/826/833 1561/825/832 +f 1552/829/834 1551/828/834 1559/824/832 +f 1559/824/832 1561/825/832 1552/829/834 +f 1556/731/835 1561/737/836 1562/733/837 +f 1562/733/837 1557/830/837 1556/731/835 +f 1553/831/838 1552/736/838 1561/737/836 +f 1561/737/836 1556/731/835 1553/831/838 +f 1563/832/36 1564/833/36 1565/834/36 +f 1565/834/36 1566/835/36 1563/832/36 +f 1567/836/839 1568/837/839 1569/838/840 +f 1569/838/840 1570/839/840 1567/836/839 +f 1566/840/841 1565/841/841 1568/837/839 +f 1568/837/839 1567/836/839 1566/840/841 +f 1571/737/842 1567/731/842 1570/734/843 +f 1570/734/843 1572/733/843 1571/737/842 +f 1563/741/844 1566/735/844 1567/731/842 +f 1567/731/842 1571/737/842 1563/741/844 +f 1573/837/859 1571/836/859 1572/839/846 +f 1572/839/846 1574/838/846 1573/837/859 +f 1564/841/847 1563/840/847 1571/836/859 +f 1571/836/859 1573/837/859 1564/841/847 +f 1568/842/848 1573/732/848 1574/843/849 +f 1574/843/849 1569/734/849 1568/842/848 +f 1565/831/850 1564/736/851 1573/732/848 +f 1573/732/848 1568/842/848 1565/831/850 +f 1575/721/36 1576/722/36 1577/723/36 +f 1577/723/36 1578/724/36 1575/721/36 +f 1579/725/852 1580/726/748 1581/727/860 +f 1581/727/860 1582/728/860 1579/725/852 +f 1578/729/750 1577/730/750 1580/726/748 +f 1580/726/748 1579/725/852 1578/729/750 +f 1583/731/751 1579/732/752 1582/733/753 +f 1582/733/753 1584/734/753 1583/731/751 +f 1575/735/754 1578/736/754 1579/732/752 +f 1579/732/752 1583/731/751 1575/735/754 +f 1585/726/755 1583/725/755 1584/728/756 +f 1584/728/756 1586/727/756 1585/726/755 +f 1576/730/757 1575/729/757 1583/725/755 +f 1583/725/755 1585/726/755 1576/730/757 +f 1580/737/758 1585/738/758 1586/739/759 +f 1586/739/759 1581/740/759 1580/737/758 +f 1577/741/760 1576/742/760 1585/738/758 +f 1585/738/758 1580/737/758 1577/741/760 +f 1587/743/36 1588/744/36 1589/745/36 +f 1589/745/36 1590/746/36 1587/743/36 +f 1591/747/761 1592/748/761 1593/749/762 +f 1593/749/762 1594/750/762 1591/747/761 +f 1590/751/763 1589/752/763 1592/748/761 +f 1592/748/761 1591/747/761 1590/751/763 +f 1595/753/764 1591/754/765 1594/755/766 +f 1594/755/766 1596/756/766 1595/753/764 +f 1587/757/767 1590/758/767 1591/754/765 +f 1591/754/765 1595/753/764 1587/757/767 +f 1597/748/768 1595/747/769 1596/750/770 +f 1596/750/770 1598/749/770 1597/748/768 +f 1588/752/771 1587/751/771 1595/747/769 +f 1595/747/769 1597/748/768 1588/752/771 +f 1592/754/772 1597/759/773 1598/760/774 +f 1598/760/774 1593/755/774 1592/754/772 +f 1589/758/775 1588/761/775 1597/759/773 +f 1597/759/773 1592/754/772 1589/758/775 +f 1599/762/776 1600/763/777 1601/764/778 +f 1601/764/778 1602/765/778 1599/762/776 +f 1603/766/779 1604/767/779 1600/763/777 +f 1600/763/777 1599/762/776 1603/766/779 +f 1605/768/780 1599/769/781 1602/770/782 +f 1602/770/782 1606/771/782 1605/768/780 +f 1607/772/783 1603/773/783 1599/769/781 +f 1599/769/781 1605/768/780 1607/772/783 +f 1608/763/784 1605/762/785 1606/765/786 +f 1606/765/786 1609/764/786 1608/763/784 +f 1610/767/787 1607/766/787 1605/762/785 +f 1605/762/785 1608/763/784 1610/767/787 +f 1600/774/788 1608/768/789 1609/771/790 +f 1609/771/790 1601/775/790 1600/774/788 +f 1604/776/791 1610/777/791 1608/768/789 +f 1608/768/789 1600/774/788 1604/776/791 +f 1611/778/792 1612/779/793 1613/780/794 +f 1613/780/794 1614/781/794 1611/778/792 +f 1615/782/795 1616/783/795 1612/779/793 +f 1612/779/793 1611/778/792 1615/782/795 +f 1617/784/796 1611/785/797 1614/786/798 +f 1614/786/798 1618/787/798 1617/784/796 +f 1619/788/799 1615/789/799 1611/785/797 +f 1611/785/797 1617/784/796 1619/788/799 +f 1620/790/800 1617/791/801 1618/792/802 +f 1618/792/802 1621/793/802 1620/790/800 +f 1622/794/803 1619/795/803 1617/791/801 +f 1617/791/801 1620/790/800 1622/794/803 +f 1612/785/804 1620/796/805 1621/787/806 +f 1621/787/806 1613/797/806 1612/785/804 +f 1616/789/807 1622/798/807 1620/796/805 +f 1620/796/805 1612/785/804 1616/789/807 +f 1623/799/36 1624/800/36 1625/801/36 +f 1625/801/36 1626/802/36 1623/799/36 +f 1627/803/808 1628/804/809 1629/805/810 +f 1629/805/810 1630/806/810 1627/803/808 +f 1626/807/811 1625/808/811 1628/804/809 +f 1628/804/809 1627/803/808 1626/807/811 +f 1631/809/812 1627/810/812 1630/811/813 +f 1630/811/813 1632/812/813 1631/809/812 +f 1623/813/814 1626/814/814 1627/810/812 +f 1627/810/812 1631/809/812 1623/813/814 +f 1633/804/815 1631/803/816 1632/806/817 +f 1632/806/817 1634/805/817 1633/804/815 +f 1624/808/818 1623/807/818 1631/803/816 +f 1631/803/816 1633/804/815 1624/808/818 +f 1628/815/819 1633/809/819 1634/816/820 +f 1634/816/820 1629/817/820 1628/815/819 +f 1625/818/821 1624/819/822 1633/809/819 +f 1633/809/819 1628/815/819 1625/818/821 +f 1635/820/36 1636/821/36 1637/822/36 +f 1637/822/36 1638/823/36 1635/820/36 +f 1639/824/823 1640/825/824 1641/826/825 +f 1641/826/825 1642/827/825 1639/824/823 +f 1638/828/826 1637/829/826 1640/825/824 +f 1640/825/824 1639/824/823 1638/828/826 +f 1643/737/827 1639/738/828 1642/734/829 +f 1642/734/829 1644/740/829 1643/737/827 +f 1635/741/830 1638/735/830 1639/738/828 +f 1639/738/828 1643/737/827 1635/741/830 +f 1645/825/831 1643/824/832 1644/827/833 +f 1644/827/833 1646/826/833 1645/825/831 +f 1636/829/834 1635/828/834 1643/824/832 +f 1643/824/832 1645/825/831 1636/829/834 +f 1640/731/835 1645/737/836 1646/733/837 +f 1646/733/837 1641/830/837 1640/731/835 +f 1637/831/838 1636/736/838 1645/737/836 +f 1645/737/836 1640/731/835 1637/831/838 +f 1647/832/36 1648/833/36 1649/834/36 +f 1649/834/36 1650/835/36 1647/832/36 +f 1651/836/839 1652/837/839 1653/838/840 +f 1653/838/840 1654/839/840 1651/836/839 +f 1650/840/841 1649/841/841 1652/837/839 +f 1652/837/839 1651/836/839 1650/840/841 +f 1655/737/842 1651/731/842 1654/734/843 +f 1654/734/843 1656/733/843 1655/737/842 +f 1647/741/844 1650/735/844 1651/731/842 +f 1651/731/842 1655/737/842 1647/741/844 +f 1657/837/845 1655/836/845 1656/839/846 +f 1656/839/846 1658/838/846 1657/837/845 +f 1648/841/847 1647/840/847 1655/836/845 +f 1655/836/845 1657/837/845 1648/841/847 +f 1652/842/848 1657/732/848 1658/843/849 +f 1658/843/849 1653/734/849 1652/842/848 +f 1649/831/850 1648/736/851 1657/732/848 +f 1657/732/848 1652/842/848 1649/831/850 +f 1659/721/36 1660/722/36 1661/723/36 +f 1661/723/36 1662/724/36 1659/721/36 +f 1663/725/852 1664/726/748 1665/727/749 +f 1665/727/749 1666/728/749 1663/725/852 +f 1662/729/750 1661/730/750 1664/726/748 +f 1664/726/748 1663/725/852 1662/729/750 +f 1667/731/751 1663/732/752 1666/733/753 +f 1666/733/753 1668/734/753 1667/731/751 +f 1659/735/754 1662/736/754 1663/732/752 +f 1663/732/752 1667/731/751 1659/735/754 +f 1669/726/755 1667/725/755 1668/728/756 +f 1668/728/756 1670/727/756 1669/726/755 +f 1660/730/757 1659/729/757 1667/725/755 +f 1667/725/755 1669/726/755 1660/730/757 +f 1664/737/758 1669/738/758 1670/739/759 +f 1670/739/759 1665/740/759 1664/737/758 +f 1661/741/760 1660/742/760 1669/738/758 +f 1669/738/758 1664/737/758 1661/741/760 +f 1671/743/36 1672/744/36 1673/745/36 +f 1673/745/36 1674/746/36 1671/743/36 +f 1675/747/761 1676/748/761 1677/749/762 +f 1677/749/762 1678/750/762 1675/747/761 +f 1674/751/763 1673/752/763 1676/748/761 +f 1676/748/761 1675/747/761 1674/751/763 +f 1679/753/764 1675/754/765 1678/755/766 +f 1678/755/766 1680/756/766 1679/753/764 +f 1671/757/767 1674/758/767 1675/754/765 +f 1675/754/765 1679/753/764 1671/757/767 +f 1681/748/768 1679/747/769 1680/750/770 +f 1680/750/770 1682/749/770 1681/748/768 +f 1672/752/771 1671/751/771 1679/747/769 +f 1679/747/769 1681/748/768 1672/752/771 +f 1676/754/772 1681/759/773 1682/760/774 +f 1682/760/774 1677/755/774 1676/754/772 +f 1673/758/775 1672/761/775 1681/759/773 +f 1681/759/773 1676/754/772 1673/758/775 +f 1683/762/776 1684/763/777 1685/764/778 +f 1685/764/778 1686/765/778 1683/762/776 +f 1687/766/779 1688/767/779 1684/763/777 +f 1684/763/777 1683/762/776 1687/766/779 +f 1689/768/780 1683/769/781 1686/770/782 +f 1686/770/782 1690/771/782 1689/768/780 +f 1691/772/783 1687/773/783 1683/769/781 +f 1683/769/781 1689/768/780 1691/772/783 +f 1692/763/784 1689/762/785 1690/765/786 +f 1690/765/786 1693/764/786 1692/763/784 +f 1694/767/787 1691/766/787 1689/762/785 +f 1689/762/785 1692/763/784 1694/767/787 +f 1684/774/788 1692/768/789 1693/771/790 +f 1693/771/790 1685/775/790 1684/774/788 +f 1688/776/791 1694/777/791 1692/768/789 +f 1692/768/789 1684/774/788 1688/776/791 +f 1695/778/792 1696/779/793 1697/780/794 +f 1697/780/794 1698/781/794 1695/778/792 +f 1699/782/795 1700/783/795 1696/779/793 +f 1696/779/793 1695/778/792 1699/782/795 +f 1701/784/796 1695/785/797 1698/786/798 +f 1698/786/798 1702/787/798 1701/784/796 +f 1703/788/799 1699/789/799 1695/785/797 +f 1695/785/797 1701/784/796 1703/788/799 +f 1704/790/853 1701/791/854 1702/792/802 +f 1702/792/802 1705/793/802 1704/790/853 +f 1706/794/803 1703/795/803 1701/791/854 +f 1701/791/854 1704/790/853 1706/794/803 +f 1696/785/804 1704/796/805 1705/787/806 +f 1705/787/806 1697/797/806 1696/785/804 +f 1700/789/807 1706/798/807 1704/796/805 +f 1704/796/805 1696/785/804 1700/789/807 +f 1707/799/36 1708/800/36 1709/801/36 +f 1709/801/36 1710/802/36 1707/799/36 +f 1711/803/855 1712/804/856 1713/805/810 +f 1713/805/810 1714/806/810 1711/803/855 +f 1710/807/811 1709/808/811 1712/804/856 +f 1712/804/856 1711/803/855 1710/807/811 +f 1715/809/812 1711/810/812 1714/811/813 +f 1714/811/813 1716/812/813 1715/809/812 +f 1707/813/814 1710/814/814 1711/810/812 +f 1711/810/812 1715/809/812 1707/813/814 +f 1717/804/815 1715/803/816 1716/806/817 +f 1716/806/817 1718/805/817 1717/804/815 +f 1708/808/818 1707/807/818 1715/803/816 +f 1715/803/816 1717/804/815 1708/808/818 +f 1712/815/819 1717/809/819 1718/816/820 +f 1718/816/820 1713/817/820 1712/815/819 +f 1709/818/821 1708/819/822 1717/809/819 +f 1717/809/819 1712/815/819 1709/818/821 +f 1719/820/36 1720/821/36 1721/822/36 +f 1721/822/36 1722/823/36 1719/820/36 +f 1723/824/857 1724/825/858 1725/826/825 +f 1725/826/825 1726/827/825 1723/824/857 +f 1722/828/826 1721/829/826 1724/825/858 +f 1724/825/858 1723/824/857 1722/828/826 +f 1727/737/827 1723/738/828 1726/734/829 +f 1726/734/829 1728/740/829 1727/737/827 +f 1719/741/830 1722/735/830 1723/738/828 +f 1723/738/828 1727/737/827 1719/741/830 +f 1729/825/831 1727/824/832 1728/827/833 +f 1728/827/833 1730/826/833 1729/825/831 +f 1720/829/834 1719/828/834 1727/824/832 +f 1727/824/832 1729/825/831 1720/829/834 +f 1724/731/835 1729/737/836 1730/733/837 +f 1730/733/837 1725/830/837 1724/731/835 +f 1721/831/838 1720/736/838 1729/737/836 +f 1729/737/836 1724/731/835 1721/831/838 +f 1731/832/36 1732/833/36 1733/834/36 +f 1733/834/36 1734/835/36 1731/832/36 +f 1735/836/839 1736/837/839 1737/838/840 +f 1737/838/840 1738/839/840 1735/836/839 +f 1734/840/861 1733/841/861 1736/837/839 +f 1736/837/839 1735/836/839 1734/840/861 +f 1739/737/842 1735/731/842 1738/734/843 +f 1738/734/843 1740/733/843 1739/737/842 +f 1731/741/844 1734/735/844 1735/731/842 +f 1735/731/842 1739/737/842 1731/741/844 +f 1741/837/859 1739/836/859 1740/839/846 +f 1740/839/846 1742/838/846 1741/837/859 +f 1732/841/847 1731/840/847 1739/836/859 +f 1739/836/859 1741/837/859 1732/841/847 +f 1736/842/848 1741/732/848 1742/843/849 +f 1742/843/849 1737/734/849 1736/842/848 +f 1733/831/850 1732/736/851 1741/732/848 +f 1741/732/848 1736/842/848 1733/831/850 +f 1743/721/36 1744/722/36 1745/723/36 +f 1745/723/36 1746/724/36 1743/721/36 +f 1747/725/852 1748/726/748 1749/727/860 +f 1749/727/860 1750/728/860 1747/725/852 +f 1746/729/750 1745/730/750 1748/726/748 +f 1748/726/748 1747/725/852 1746/729/750 +f 1751/731/751 1747/732/752 1750/733/753 +f 1750/733/753 1752/734/753 1751/731/751 +f 1743/735/754 1746/736/754 1747/732/752 +f 1747/732/752 1751/731/751 1743/735/754 +f 1753/726/755 1751/725/755 1752/728/756 +f 1752/728/756 1754/727/756 1753/726/755 +f 1744/730/757 1743/729/757 1751/725/755 +f 1751/725/755 1753/726/755 1744/730/757 +f 1748/737/758 1753/738/758 1754/739/759 +f 1754/739/759 1749/740/759 1748/737/758 +f 1745/741/760 1744/742/760 1753/738/758 +f 1753/738/758 1748/737/758 1745/741/760 +f 1755/743/36 1756/744/36 1757/745/36 +f 1757/745/36 1758/746/36 1755/743/36 +f 1759/747/761 1760/748/761 1761/749/762 +f 1761/749/762 1762/750/762 1759/747/761 +f 1758/751/763 1757/752/763 1760/748/761 +f 1760/748/761 1759/747/761 1758/751/763 +f 1763/753/764 1759/754/765 1762/755/766 +f 1762/755/766 1764/756/766 1763/753/764 +f 1755/757/767 1758/758/767 1759/754/765 +f 1759/754/765 1763/753/764 1755/757/767 +f 1765/748/768 1763/747/769 1764/750/770 +f 1764/750/770 1766/749/770 1765/748/768 +f 1756/752/771 1755/751/771 1763/747/769 +f 1763/747/769 1765/748/768 1756/752/771 +f 1760/754/772 1765/759/773 1766/760/774 +f 1766/760/774 1761/755/774 1760/754/772 +f 1757/758/775 1756/761/775 1765/759/773 +f 1765/759/773 1760/754/772 1757/758/775 +f 1767/762/776 1768/763/777 1769/764/778 +f 1769/764/778 1770/765/778 1767/762/776 +f 1771/766/779 1772/767/779 1768/763/777 +f 1768/763/777 1767/762/776 1771/766/779 +f 1773/768/780 1767/769/781 1770/770/782 +f 1770/770/782 1774/771/782 1773/768/780 +f 1775/772/783 1771/773/783 1767/769/781 +f 1767/769/781 1773/768/780 1775/772/783 +f 1776/763/784 1773/762/785 1774/765/786 +f 1774/765/786 1777/764/786 1776/763/784 +f 1778/767/787 1775/766/787 1773/762/785 +f 1773/762/785 1776/763/784 1778/767/787 +f 1768/774/788 1776/768/789 1777/771/790 +f 1777/771/790 1769/775/790 1768/774/788 +f 1772/776/791 1778/777/791 1776/768/789 +f 1776/768/789 1768/774/788 1772/776/791 +f 1779/778/792 1780/779/793 1781/780/794 +f 1781/780/794 1782/781/794 1779/778/792 +f 1783/782/795 1784/783/795 1780/779/793 +f 1780/779/793 1779/778/792 1783/782/795 +f 1785/784/796 1779/785/797 1782/786/798 +f 1782/786/798 1786/787/798 1785/784/796 +f 1787/788/799 1783/789/799 1779/785/797 +f 1779/785/797 1785/784/796 1787/788/799 +f 1788/790/800 1785/791/801 1786/792/802 +f 1786/792/802 1789/793/802 1788/790/800 +f 1790/794/803 1787/795/803 1785/791/801 +f 1785/791/801 1788/790/800 1790/794/803 +f 1780/785/804 1788/796/805 1789/787/806 +f 1789/787/806 1781/797/806 1780/785/804 +f 1784/789/807 1790/798/807 1788/796/805 +f 1788/796/805 1780/785/804 1784/789/807 +f 1791/799/36 1792/800/36 1793/801/36 +f 1793/801/36 1794/802/36 1791/799/36 +f 1795/803/808 1796/804/809 1797/805/810 +f 1797/805/810 1798/806/810 1795/803/808 +f 1794/807/811 1793/808/811 1796/804/809 +f 1796/804/809 1795/803/808 1794/807/811 +f 1799/809/812 1795/810/812 1798/811/813 +f 1798/811/813 1800/812/813 1799/809/812 +f 1791/813/814 1794/814/814 1795/810/812 +f 1795/810/812 1799/809/812 1791/813/814 +f 1801/804/815 1799/803/816 1800/806/817 +f 1800/806/817 1802/805/817 1801/804/815 +f 1792/808/818 1791/807/818 1799/803/816 +f 1799/803/816 1801/804/815 1792/808/818 +f 1796/815/819 1801/809/819 1802/816/820 +f 1802/816/820 1797/817/820 1796/815/819 +f 1793/818/821 1792/819/822 1801/809/819 +f 1801/809/819 1796/815/819 1793/818/821 +f 1803/820/36 1804/821/36 1805/822/36 +f 1805/822/36 1806/823/36 1803/820/36 +f 1807/824/823 1808/825/824 1809/826/825 +f 1809/826/825 1810/827/825 1807/824/823 +f 1806/828/826 1805/829/826 1808/825/824 +f 1808/825/824 1807/824/823 1806/828/826 +f 1811/737/827 1807/738/828 1810/734/829 +f 1810/734/829 1812/740/829 1811/737/827 +f 1803/741/830 1806/735/830 1807/738/828 +f 1807/738/828 1811/737/827 1803/741/830 +f 1813/825/832 1811/824/832 1812/827/833 +f 1812/827/833 1814/826/833 1813/825/832 +f 1804/829/834 1803/828/834 1811/824/832 +f 1811/824/832 1813/825/832 1804/829/834 +f 1808/731/835 1813/737/836 1814/733/837 +f 1814/733/837 1809/830/837 1808/731/835 +f 1805/831/838 1804/736/838 1813/737/836 +f 1813/737/836 1808/731/835 1805/831/838 +f 1815/832/36 1816/833/36 1817/834/36 +f 1817/834/36 1818/835/36 1815/832/36 +f 1819/836/839 1820/837/839 1821/838/840 +f 1821/838/840 1822/839/840 1819/836/839 +f 1818/840/841 1817/841/841 1820/837/839 +f 1820/837/839 1819/836/839 1818/840/841 +f 1823/737/842 1819/731/842 1822/734/843 +f 1822/734/843 1824/733/843 1823/737/842 +f 1815/741/844 1818/735/844 1819/731/842 +f 1819/731/842 1823/737/842 1815/741/844 +f 1825/837/859 1823/836/859 1824/839/846 +f 1824/839/846 1826/838/846 1825/837/859 +f 1816/841/847 1815/840/847 1823/836/859 +f 1823/836/859 1825/837/859 1816/841/847 +f 1820/842/848 1825/732/848 1826/843/849 +f 1826/843/849 1821/734/849 1820/842/848 +f 1817/831/850 1816/736/851 1825/732/848 +f 1825/732/848 1820/842/848 1817/831/850 +f 1827/721/36 1828/722/36 1829/723/36 +f 1829/723/36 1830/724/36 1827/721/36 +f 1831/725/852 1832/726/748 1833/727/860 +f 1833/727/860 1834/728/860 1831/725/852 +f 1830/729/750 1829/730/750 1832/726/748 +f 1832/726/748 1831/725/852 1830/729/750 +f 1835/731/751 1831/732/752 1834/733/753 +f 1834/733/753 1836/734/753 1835/731/751 +f 1827/735/754 1830/736/754 1831/732/752 +f 1831/732/752 1835/731/751 1827/735/754 +f 1837/726/755 1835/725/755 1836/728/756 +f 1836/728/756 1838/727/756 1837/726/755 +f 1828/730/757 1827/729/757 1835/725/755 +f 1835/725/755 1837/726/755 1828/730/757 +f 1832/737/758 1837/738/758 1838/739/759 +f 1838/739/759 1833/740/759 1832/737/758 +f 1829/741/760 1828/742/760 1837/738/758 +f 1837/738/758 1832/737/758 1829/741/760 +f 1839/743/36 1840/744/36 1841/745/36 +f 1841/745/36 1842/746/36 1839/743/36 +f 1843/747/761 1844/748/761 1845/749/762 +f 1845/749/762 1846/750/762 1843/747/761 +f 1842/751/763 1841/752/763 1844/748/761 +f 1844/748/761 1843/747/761 1842/751/763 +f 1847/753/764 1843/754/765 1846/755/766 +f 1846/755/766 1848/756/766 1847/753/764 +f 1839/757/767 1842/758/767 1843/754/765 +f 1843/754/765 1847/753/764 1839/757/767 +f 1849/748/768 1847/747/769 1848/750/770 +f 1848/750/770 1850/749/770 1849/748/768 +f 1840/752/771 1839/751/771 1847/747/769 +f 1847/747/769 1849/748/768 1840/752/771 +f 1844/754/772 1849/759/773 1850/760/774 +f 1850/760/774 1845/755/774 1844/754/772 +f 1841/758/775 1840/761/775 1849/759/773 +f 1849/759/773 1844/754/772 1841/758/775 +f 1851/762/776 1852/763/777 1853/764/778 +f 1853/764/778 1854/765/778 1851/762/776 +f 1855/766/779 1856/767/779 1852/763/777 +f 1852/763/777 1851/762/776 1855/766/779 +f 1857/768/780 1851/769/781 1854/770/782 +f 1854/770/782 1858/771/782 1857/768/780 +f 1859/772/783 1855/773/783 1851/769/781 +f 1851/769/781 1857/768/780 1859/772/783 +f 1860/763/784 1857/762/785 1858/765/786 +f 1858/765/786 1861/764/786 1860/763/784 +f 1862/767/787 1859/766/787 1857/762/785 +f 1857/762/785 1860/763/784 1862/767/787 +f 1852/774/788 1860/768/789 1861/771/790 +f 1861/771/790 1853/775/790 1852/774/788 +f 1856/776/791 1862/777/791 1860/768/789 +f 1860/768/789 1852/774/788 1856/776/791 +f 1863/778/792 1864/779/793 1865/780/794 +f 1865/780/794 1866/781/794 1863/778/792 +f 1867/782/795 1868/783/795 1864/779/793 +f 1864/779/793 1863/778/792 1867/782/795 +f 1869/784/796 1863/785/797 1866/786/798 +f 1866/786/798 1870/787/798 1869/784/796 +f 1871/788/799 1867/789/799 1863/785/797 +f 1863/785/797 1869/784/796 1871/788/799 +f 1872/790/800 1869/791/801 1870/792/802 +f 1870/792/802 1873/793/802 1872/790/800 +f 1874/794/803 1871/795/803 1869/791/801 +f 1869/791/801 1872/790/800 1874/794/803 +f 1864/785/804 1872/796/805 1873/787/806 +f 1873/787/806 1865/797/806 1864/785/804 +f 1868/789/807 1874/798/807 1872/796/805 +f 1872/796/805 1864/785/804 1868/789/807 +f 1875/799/36 1876/800/36 1877/801/36 +f 1877/801/36 1878/802/36 1875/799/36 +f 1879/803/808 1880/804/809 1881/805/810 +f 1881/805/810 1882/806/810 1879/803/808 +f 1878/807/811 1877/808/811 1880/804/809 +f 1880/804/809 1879/803/808 1878/807/811 +f 1883/809/812 1879/810/812 1882/811/813 +f 1882/811/813 1884/812/813 1883/809/812 +f 1875/813/814 1878/814/814 1879/810/812 +f 1879/810/812 1883/809/812 1875/813/814 +f 1885/804/815 1883/803/816 1884/806/817 +f 1884/806/817 1886/805/817 1885/804/815 +f 1876/808/818 1875/807/818 1883/803/816 +f 1883/803/816 1885/804/815 1876/808/818 +f 1880/815/819 1885/809/819 1886/816/820 +f 1886/816/820 1881/817/820 1880/815/819 +f 1877/818/821 1876/819/822 1885/809/819 +f 1885/809/819 1880/815/819 1877/818/821 +f 1887/820/36 1888/821/36 1889/822/36 +f 1889/822/36 1890/823/36 1887/820/36 +f 1891/824/823 1892/825/824 1893/826/825 +f 1893/826/825 1894/827/825 1891/824/823 +f 1890/828/826 1889/829/826 1892/825/824 +f 1892/825/824 1891/824/823 1890/828/826 +f 1895/737/827 1891/738/828 1894/734/829 +f 1894/734/829 1896/740/829 1895/737/827 +f 1887/741/830 1890/735/830 1891/738/828 +f 1891/738/828 1895/737/827 1887/741/830 +f 1897/825/831 1895/824/832 1896/827/833 +f 1896/827/833 1898/826/833 1897/825/831 +f 1888/829/834 1887/828/834 1895/824/832 +f 1895/824/832 1897/825/831 1888/829/834 +f 1892/731/835 1897/737/836 1898/733/837 +f 1898/733/837 1893/830/837 1892/731/835 +f 1889/831/838 1888/736/838 1897/737/836 +f 1897/737/836 1892/731/835 1889/831/838 +f 1899/832/36 1900/833/36 1901/834/36 +f 1901/834/36 1902/835/36 1899/832/36 +f 1903/836/839 1904/837/839 1905/838/840 +f 1905/838/840 1906/839/840 1903/836/839 +f 1902/840/841 1901/841/841 1904/837/839 +f 1904/837/839 1903/836/839 1902/840/841 +f 1907/737/842 1903/731/842 1906/734/843 +f 1906/734/843 1908/733/843 1907/737/842 +f 1899/741/844 1902/735/844 1903/731/842 +f 1903/731/842 1907/737/842 1899/741/844 +f 1909/837/859 1907/836/859 1908/839/846 +f 1908/839/846 1910/838/846 1909/837/859 +f 1900/841/847 1899/840/847 1907/836/859 +f 1907/836/859 1909/837/859 1900/841/847 +f 1904/842/848 1909/732/848 1910/843/849 +f 1910/843/849 1905/734/849 1904/842/848 +f 1901/831/850 1900/736/851 1909/732/848 +f 1909/732/848 1904/842/848 1901/831/850 +f 1911/721/36 1912/722/36 1913/723/36 +f 1913/723/36 1914/724/36 1911/721/36 +f 1915/725/852 1916/726/748 1917/727/749 +f 1917/727/749 1918/728/749 1915/725/852 +f 1914/729/750 1913/730/750 1916/726/748 +f 1916/726/748 1915/725/852 1914/729/750 +f 1919/731/751 1915/732/752 1918/733/753 +f 1918/733/753 1920/734/753 1919/731/751 +f 1911/735/754 1914/736/754 1915/732/752 +f 1915/732/752 1919/731/751 1911/735/754 +f 1921/726/755 1919/725/755 1920/728/756 +f 1920/728/756 1922/727/756 1921/726/755 +f 1912/730/757 1911/729/757 1919/725/755 +f 1919/725/755 1921/726/755 1912/730/757 +f 1916/737/758 1921/738/758 1922/739/759 +f 1922/739/759 1917/740/759 1916/737/758 +f 1913/741/760 1912/742/760 1921/738/758 +f 1921/738/758 1916/737/758 1913/741/760 +f 1923/743/36 1924/744/36 1925/745/36 +f 1925/745/36 1926/746/36 1923/743/36 +f 1927/747/761 1928/748/761 1929/749/762 +f 1929/749/762 1930/750/762 1927/747/761 +f 1926/751/763 1925/752/763 1928/748/761 +f 1928/748/761 1927/747/761 1926/751/763 +f 1931/753/764 1927/754/765 1930/755/766 +f 1930/755/766 1932/756/766 1931/753/764 +f 1923/757/767 1926/758/767 1927/754/765 +f 1927/754/765 1931/753/764 1923/757/767 +f 1933/748/768 1931/747/769 1932/750/770 +f 1932/750/770 1934/749/770 1933/748/768 +f 1924/752/771 1923/751/771 1931/747/769 +f 1931/747/769 1933/748/768 1924/752/771 +f 1928/754/772 1933/759/773 1934/760/774 +f 1934/760/774 1929/755/774 1928/754/772 +f 1925/758/775 1924/761/775 1933/759/773 +f 1933/759/773 1928/754/772 1925/758/775 +f 1935/762/776 1936/763/777 1937/764/778 +f 1937/764/778 1938/765/778 1935/762/776 +f 1939/766/779 1940/767/779 1936/763/777 +f 1936/763/777 1935/762/776 1939/766/779 +f 1941/768/780 1935/769/781 1938/770/782 +f 1938/770/782 1942/771/782 1941/768/780 +f 1943/772/783 1939/773/783 1935/769/781 +f 1935/769/781 1941/768/780 1943/772/783 +f 1944/763/784 1941/762/785 1942/765/786 +f 1942/765/786 1945/764/786 1944/763/784 +f 1946/767/787 1943/766/787 1941/762/785 +f 1941/762/785 1944/763/784 1946/767/787 +f 1936/774/788 1944/768/789 1945/771/790 +f 1945/771/790 1937/775/790 1936/774/788 +f 1940/776/791 1946/777/791 1944/768/789 +f 1944/768/789 1936/774/788 1940/776/791 +f 1947/778/792 1948/779/793 1949/780/794 +f 1949/780/794 1950/781/794 1947/778/792 +f 1951/782/795 1952/783/795 1948/779/793 +f 1948/779/793 1947/778/792 1951/782/795 +f 1953/784/796 1947/785/797 1950/786/798 +f 1950/786/798 1954/787/798 1953/784/796 +f 1955/788/799 1951/789/799 1947/785/797 +f 1947/785/797 1953/784/796 1955/788/799 +f 1956/790/853 1953/791/854 1954/792/802 +f 1954/792/802 1957/793/802 1956/790/853 +f 1958/794/803 1955/795/803 1953/791/854 +f 1953/791/854 1956/790/853 1958/794/803 +f 1948/785/804 1956/796/805 1957/787/806 +f 1957/787/806 1949/797/806 1948/785/804 +f 1952/789/807 1958/798/807 1956/796/805 +f 1956/796/805 1948/785/804 1952/789/807 +f 1959/799/36 1960/800/36 1961/801/36 +f 1961/801/36 1962/802/36 1959/799/36 +f 1963/803/855 1964/804/856 1965/805/810 +f 1965/805/810 1966/806/810 1963/803/855 +f 1962/807/811 1961/808/811 1964/804/856 +f 1964/804/856 1963/803/855 1962/807/811 +f 1967/809/812 1963/810/812 1966/811/813 +f 1966/811/813 1968/812/813 1967/809/812 +f 1959/813/814 1962/814/814 1963/810/812 +f 1963/810/812 1967/809/812 1959/813/814 +f 1969/804/815 1967/803/816 1968/806/817 +f 1968/806/817 1970/805/817 1969/804/815 +f 1960/808/818 1959/807/818 1967/803/816 +f 1967/803/816 1969/804/815 1960/808/818 +f 1964/815/819 1969/809/819 1970/816/820 +f 1970/816/820 1965/817/820 1964/815/819 +f 1961/818/821 1960/819/822 1969/809/819 +f 1969/809/819 1964/815/819 1961/818/821 +f 1971/820/36 1972/821/36 1973/822/36 +f 1973/822/36 1974/823/36 1971/820/36 +f 1975/824/857 1976/825/858 1977/826/825 +f 1977/826/825 1978/827/825 1975/824/857 +f 1974/828/826 1973/829/826 1976/825/858 +f 1976/825/858 1975/824/857 1974/828/826 +f 1979/737/827 1975/738/828 1978/734/829 +f 1978/734/829 1980/740/829 1979/737/827 +f 1971/741/830 1974/735/830 1975/738/828 +f 1975/738/828 1979/737/827 1971/741/830 +f 1981/825/831 1979/824/832 1980/827/833 +f 1980/827/833 1982/826/833 1981/825/831 +f 1972/829/834 1971/828/834 1979/824/832 +f 1979/824/832 1981/825/831 1972/829/834 +f 1976/731/835 1981/737/836 1982/733/837 +f 1982/733/837 1977/830/837 1976/731/835 +f 1973/831/838 1972/736/838 1981/737/836 +f 1981/737/836 1976/731/835 1973/831/838 +f 1983/832/36 1984/833/36 1985/834/36 +f 1985/834/36 1986/835/36 1983/832/36 +f 1987/836/839 1988/837/839 1989/838/840 +f 1989/838/840 1990/839/840 1987/836/839 +f 1986/840/861 1985/841/861 1988/837/839 +f 1988/837/839 1987/836/839 1986/840/861 +f 1991/737/842 1987/731/842 1990/734/843 +f 1990/734/843 1992/733/843 1991/737/842 +f 1983/741/844 1986/735/844 1987/731/842 +f 1987/731/842 1991/737/842 1983/741/844 +f 1993/837/859 1991/836/859 1992/839/846 +f 1992/839/846 1994/838/846 1993/837/859 +f 1984/841/847 1983/840/847 1991/836/859 +f 1991/836/859 1993/837/859 1984/841/847 +f 1988/842/848 1993/732/848 1994/843/849 +f 1994/843/849 1989/734/849 1988/842/848 +f 1985/831/850 1984/736/851 1993/732/848 +f 1993/732/848 1988/842/848 1985/831/850 +f 1995/721/36 1996/722/36 1997/723/36 +f 1997/723/36 1998/724/36 1995/721/36 +f 1999/725/852 2000/726/748 2001/727/860 +f 2001/727/860 2002/728/860 1999/725/852 +f 1998/729/750 1997/730/750 2000/726/748 +f 2000/726/748 1999/725/852 1998/729/750 +f 2003/731/751 1999/732/752 2002/733/753 +f 2002/733/753 2004/734/753 2003/731/751 +f 1995/735/754 1998/736/754 1999/732/752 +f 1999/732/752 2003/731/751 1995/735/754 +f 2005/726/755 2003/725/755 2004/728/756 +f 2004/728/756 2006/727/756 2005/726/755 +f 1996/730/757 1995/729/757 2003/725/755 +f 2003/725/755 2005/726/755 1996/730/757 +f 2000/737/758 2005/738/758 2006/739/759 +f 2006/739/759 2001/740/759 2000/737/758 +f 1997/741/760 1996/742/760 2005/738/758 +f 2005/738/758 2000/737/758 1997/741/760 +f 2007/743/36 2008/744/36 2009/745/36 +f 2009/745/36 2010/746/36 2007/743/36 +f 2011/747/761 2012/748/761 2013/749/762 +f 2013/749/762 2014/750/762 2011/747/761 +f 2010/751/763 2009/752/763 2012/748/761 +f 2012/748/761 2011/747/761 2010/751/763 +f 2015/753/764 2011/754/765 2014/755/766 +f 2014/755/766 2016/756/766 2015/753/764 +f 2007/757/767 2010/758/767 2011/754/765 +f 2011/754/765 2015/753/764 2007/757/767 +f 2017/748/768 2015/747/769 2016/750/770 +f 2016/750/770 2018/749/770 2017/748/768 +f 2008/752/771 2007/751/771 2015/747/769 +f 2015/747/769 2017/748/768 2008/752/771 +f 2012/754/772 2017/759/773 2018/760/774 +f 2018/760/774 2013/755/774 2012/754/772 +f 2009/758/775 2008/761/775 2017/759/773 +f 2017/759/773 2012/754/772 2009/758/775 +f 2019/762/776 2020/763/777 2021/764/778 +f 2021/764/778 2022/765/778 2019/762/776 +f 2023/766/779 2024/767/779 2020/763/777 +f 2020/763/777 2019/762/776 2023/766/779 +f 2025/768/780 2019/769/781 2022/770/782 +f 2022/770/782 2026/771/782 2025/768/780 +f 2027/772/783 2023/773/783 2019/769/781 +f 2019/769/781 2025/768/780 2027/772/783 +f 2028/763/784 2025/762/785 2026/765/786 +f 2026/765/786 2029/764/786 2028/763/784 +f 2030/767/787 2027/766/787 2025/762/785 +f 2025/762/785 2028/763/784 2030/767/787 +f 2020/774/788 2028/768/789 2029/771/790 +f 2029/771/790 2021/775/790 2020/774/788 +f 2024/776/791 2030/777/791 2028/768/789 +f 2028/768/789 2020/774/788 2024/776/791 +f 2031/778/792 2032/779/793 2033/780/794 +f 2033/780/794 2034/781/794 2031/778/792 +f 2035/782/795 2036/783/795 2032/779/793 +f 2032/779/793 2031/778/792 2035/782/795 +f 2037/784/796 2031/785/797 2034/786/798 +f 2034/786/798 2038/787/798 2037/784/796 +f 2039/788/799 2035/789/799 2031/785/797 +f 2031/785/797 2037/784/796 2039/788/799 +f 2040/790/800 2037/791/801 2038/792/802 +f 2038/792/802 2041/793/802 2040/790/800 +f 2042/794/803 2039/795/803 2037/791/801 +f 2037/791/801 2040/790/800 2042/794/803 +f 2032/785/804 2040/796/805 2041/787/806 +f 2041/787/806 2033/797/806 2032/785/804 +f 2036/789/807 2042/798/807 2040/796/805 +f 2040/796/805 2032/785/804 2036/789/807 +f 2043/799/36 2044/800/36 2045/801/36 +f 2045/801/36 2046/802/36 2043/799/36 +f 2047/803/808 2048/804/809 2049/805/810 +f 2049/805/810 2050/806/810 2047/803/808 +f 2046/807/811 2045/808/811 2048/804/809 +f 2048/804/809 2047/803/808 2046/807/811 +f 2051/809/812 2047/810/812 2050/811/813 +f 2050/811/813 2052/812/813 2051/809/812 +f 2043/813/814 2046/814/814 2047/810/812 +f 2047/810/812 2051/809/812 2043/813/814 +f 2053/804/815 2051/803/816 2052/806/817 +f 2052/806/817 2054/805/817 2053/804/815 +f 2044/808/818 2043/807/818 2051/803/816 +f 2051/803/816 2053/804/815 2044/808/818 +f 2048/815/819 2053/809/819 2054/816/820 +f 2054/816/820 2049/817/820 2048/815/819 +f 2045/818/821 2044/819/822 2053/809/819 +f 2053/809/819 2048/815/819 2045/818/821 +f 2055/820/36 2056/821/36 2057/822/36 +f 2057/822/36 2058/823/36 2055/820/36 +f 2059/824/857 2060/825/858 2061/826/825 +f 2061/826/825 2062/827/825 2059/824/857 +f 2058/828/826 2057/829/826 2060/825/858 +f 2060/825/858 2059/824/857 2058/828/826 +f 2063/737/827 2059/738/828 2062/734/829 +f 2062/734/829 2064/740/829 2063/737/827 +f 2055/741/830 2058/735/830 2059/738/828 +f 2059/738/828 2063/737/827 2055/741/830 +f 2065/825/832 2063/824/832 2064/827/833 +f 2064/827/833 2066/826/833 2065/825/832 +f 2056/829/834 2055/828/834 2063/824/832 +f 2063/824/832 2065/825/832 2056/829/834 +f 2060/731/835 2065/737/836 2066/733/837 +f 2066/733/837 2061/830/837 2060/731/835 +f 2057/831/838 2056/736/838 2065/737/836 +f 2065/737/836 2060/731/835 2057/831/838 +f 2067/832/36 2068/833/36 2069/834/36 +f 2069/834/36 2070/835/36 2067/832/36 +f 2071/836/839 2072/837/839 2073/838/840 +f 2073/838/840 2074/839/840 2071/836/839 +f 2070/840/841 2069/841/841 2072/837/839 +f 2072/837/839 2071/836/839 2070/840/841 +f 2075/737/842 2071/731/842 2074/734/843 +f 2074/734/843 2076/733/843 2075/737/842 +f 2067/741/844 2070/735/844 2071/731/842 +f 2071/731/842 2075/737/842 2067/741/844 +f 2077/837/859 2075/836/859 2076/839/846 +f 2076/839/846 2078/838/846 2077/837/859 +f 2068/841/847 2067/840/847 2075/836/859 +f 2075/836/859 2077/837/859 2068/841/847 +f 2072/842/848 2077/732/848 2078/843/849 +f 2078/843/849 2073/734/849 2072/842/848 +f 2069/831/850 2068/736/851 2077/732/848 +f 2077/732/848 2072/842/848 2069/831/850 +f 2079/721/36 2080/722/36 2081/723/36 +f 2081/723/36 2082/724/36 2079/721/36 +f 2083/725/852 2084/726/748 2085/727/860 +f 2085/727/860 2086/728/860 2083/725/852 +f 2082/729/750 2081/730/750 2084/726/748 +f 2084/726/748 2083/725/852 2082/729/750 +f 2087/731/751 2083/732/752 2086/733/753 +f 2086/733/753 2088/734/753 2087/731/751 +f 2079/735/754 2082/736/754 2083/732/752 +f 2083/732/752 2087/731/751 2079/735/754 +f 2089/726/755 2087/725/755 2088/728/756 +f 2088/728/756 2090/727/756 2089/726/755 +f 2080/730/757 2079/729/757 2087/725/755 +f 2087/725/755 2089/726/755 2080/730/757 +f 2084/737/758 2089/738/758 2090/739/759 +f 2090/739/759 2085/740/759 2084/737/758 +f 2081/741/760 2080/742/760 2089/738/758 +f 2089/738/758 2084/737/758 2081/741/760 +f 2091/743/36 2092/744/36 2093/745/36 +f 2093/745/36 2094/746/36 2091/743/36 +f 2095/747/761 2096/748/761 2097/749/762 +f 2097/749/762 2098/750/762 2095/747/761 +f 2094/751/763 2093/752/763 2096/748/761 +f 2096/748/761 2095/747/761 2094/751/763 +f 2099/753/764 2095/754/765 2098/755/766 +f 2098/755/766 2100/756/766 2099/753/764 +f 2091/757/767 2094/758/767 2095/754/765 +f 2095/754/765 2099/753/764 2091/757/767 +f 2101/748/768 2099/747/769 2100/750/770 +f 2100/750/770 2102/749/770 2101/748/768 +f 2092/752/771 2091/751/771 2099/747/769 +f 2099/747/769 2101/748/768 2092/752/771 +f 2096/754/772 2101/759/773 2102/760/774 +f 2102/760/774 2097/755/774 2096/754/772 +f 2093/758/775 2092/761/775 2101/759/773 +f 2101/759/773 2096/754/772 2093/758/775 +f 2103/762/776 2104/763/777 2105/764/778 +f 2105/764/778 2106/765/778 2103/762/776 +f 2107/766/779 2108/767/779 2104/763/777 +f 2104/763/777 2103/762/776 2107/766/779 +f 2109/768/780 2103/769/781 2106/770/782 +f 2106/770/782 2110/771/782 2109/768/780 +f 2111/772/783 2107/773/783 2103/769/781 +f 2103/769/781 2109/768/780 2111/772/783 +f 2112/763/784 2109/762/785 2110/765/786 +f 2110/765/786 2113/764/786 2112/763/784 +f 2114/767/787 2111/766/787 2109/762/785 +f 2109/762/785 2112/763/784 2114/767/787 +f 2104/774/788 2112/768/789 2113/771/790 +f 2113/771/790 2105/775/790 2104/774/788 +f 2108/776/791 2114/777/791 2112/768/789 +f 2112/768/789 2104/774/788 2108/776/791 +f 2115/778/792 2116/779/793 2117/780/794 +f 2117/780/794 2118/781/794 2115/778/792 +f 2119/782/795 2120/783/795 2116/779/793 +f 2116/779/793 2115/778/792 2119/782/795 +f 2121/784/796 2115/785/797 2118/786/798 +f 2118/786/798 2122/787/798 2121/784/796 +f 2123/788/799 2119/789/799 2115/785/797 +f 2115/785/797 2121/784/796 2123/788/799 +f 2124/790/800 2121/791/801 2122/792/802 +f 2122/792/802 2125/793/802 2124/790/800 +f 2126/794/803 2123/795/803 2121/791/801 +f 2121/791/801 2124/790/800 2126/794/803 +f 2116/785/804 2124/796/805 2125/787/806 +f 2125/787/806 2117/797/806 2116/785/804 +f 2120/789/807 2126/798/807 2124/796/805 +f 2124/796/805 2116/785/804 2120/789/807 +f 2127/799/36 2128/800/36 2129/801/36 +f 2129/801/36 2130/802/36 2127/799/36 +f 2131/803/808 2132/804/809 2133/805/810 +f 2133/805/810 2134/806/810 2131/803/808 +f 2130/807/811 2129/808/811 2132/804/809 +f 2132/804/809 2131/803/808 2130/807/811 +f 2135/809/812 2131/810/812 2134/811/813 +f 2134/811/813 2136/812/813 2135/809/812 +f 2127/813/814 2130/814/814 2131/810/812 +f 2131/810/812 2135/809/812 2127/813/814 +f 2137/804/815 2135/803/816 2136/806/817 +f 2136/806/817 2138/805/817 2137/804/815 +f 2128/808/818 2127/807/818 2135/803/816 +f 2135/803/816 2137/804/815 2128/808/818 +f 2132/815/819 2137/809/819 2138/816/820 +f 2138/816/820 2133/817/820 2132/815/819 +f 2129/818/821 2128/819/822 2137/809/819 +f 2137/809/819 2132/815/819 2129/818/821 +f 2139/820/36 2140/821/36 2141/822/36 +f 2141/822/36 2142/823/36 2139/820/36 +f 2143/824/823 2144/825/824 2145/826/825 +f 2145/826/825 2146/827/825 2143/824/823 +f 2142/828/826 2141/829/826 2144/825/824 +f 2144/825/824 2143/824/823 2142/828/826 +f 2147/737/827 2143/738/828 2146/734/829 +f 2146/734/829 2148/740/829 2147/737/827 +f 2139/741/830 2142/735/830 2143/738/828 +f 2143/738/828 2147/737/827 2139/741/830 +f 2149/825/832 2147/824/832 2148/827/833 +f 2148/827/833 2150/826/833 2149/825/832 +f 2140/829/834 2139/828/834 2147/824/832 +f 2147/824/832 2149/825/832 2140/829/834 +f 2144/731/835 2149/737/836 2150/733/837 +f 2150/733/837 2145/830/837 2144/731/835 +f 2141/831/838 2140/736/838 2149/737/836 +f 2149/737/836 2144/731/835 2141/831/838 +f 2151/832/36 2152/833/36 2153/834/36 +f 2153/834/36 2154/835/36 2151/832/36 +f 2155/836/839 2156/837/839 2157/838/840 +f 2157/838/840 2158/839/840 2155/836/839 +f 2154/840/841 2153/841/841 2156/837/839 +f 2156/837/839 2155/836/839 2154/840/841 +f 2159/737/842 2155/731/842 2158/734/843 +f 2158/734/843 2160/733/843 2159/737/842 +f 2151/741/844 2154/735/844 2155/731/842 +f 2155/731/842 2159/737/842 2151/741/844 +f 2161/837/859 2159/836/859 2160/839/846 +f 2160/839/846 2162/838/846 2161/837/859 +f 2152/841/847 2151/840/847 2159/836/859 +f 2159/836/859 2161/837/859 2152/841/847 +f 2156/842/848 2161/732/848 2162/843/849 +f 2162/843/849 2157/734/849 2156/842/848 +f 2153/831/850 2152/736/851 2161/732/848 +f 2161/732/848 2156/842/848 2153/831/850 +f 2163/721/36 2164/722/36 2165/723/36 +f 2165/723/36 2166/724/36 2163/721/36 +f 2167/725/852 2168/726/748 2169/727/749 +f 2169/727/749 2170/728/749 2167/725/852 +f 2166/729/750 2165/730/750 2168/726/748 +f 2168/726/748 2167/725/852 2166/729/750 +f 2171/731/751 2167/732/752 2170/733/753 +f 2170/733/753 2172/734/753 2171/731/751 +f 2163/735/754 2166/736/754 2167/732/752 +f 2167/732/752 2171/731/751 2163/735/754 +f 2173/726/755 2171/725/755 2172/728/756 +f 2172/728/756 2174/727/756 2173/726/755 +f 2164/730/757 2163/729/757 2171/725/755 +f 2171/725/755 2173/726/755 2164/730/757 +f 2168/737/758 2173/738/758 2174/739/759 +f 2174/739/759 2169/740/759 2168/737/758 +f 2165/741/760 2164/742/760 2173/738/758 +f 2173/738/758 2168/737/758 2165/741/760 +f 2175/743/36 2176/744/36 2177/745/36 +f 2177/745/36 2178/746/36 2175/743/36 +f 2179/747/761 2180/748/761 2181/749/762 +f 2181/749/762 2182/750/762 2179/747/761 +f 2178/751/763 2177/752/763 2180/748/761 +f 2180/748/761 2179/747/761 2178/751/763 +f 2183/753/764 2179/754/765 2182/755/766 +f 2182/755/766 2184/756/766 2183/753/764 +f 2175/757/767 2178/758/767 2179/754/765 +f 2179/754/765 2183/753/764 2175/757/767 +f 2185/748/768 2183/747/769 2184/750/770 +f 2184/750/770 2186/749/770 2185/748/768 +f 2176/752/771 2175/751/771 2183/747/769 +f 2183/747/769 2185/748/768 2176/752/771 +f 2180/754/772 2185/759/773 2186/760/774 +f 2186/760/774 2181/755/774 2180/754/772 +f 2177/758/775 2176/761/775 2185/759/773 +f 2185/759/773 2180/754/772 2177/758/775 +f 2187/762/776 2188/763/777 2189/764/778 +f 2189/764/778 2190/765/778 2187/762/776 +f 2191/766/779 2192/767/779 2188/763/777 +f 2188/763/777 2187/762/776 2191/766/779 +f 2193/768/780 2187/769/781 2190/770/782 +f 2190/770/782 2194/771/782 2193/768/780 +f 2195/772/783 2191/773/783 2187/769/781 +f 2187/769/781 2193/768/780 2195/772/783 +f 2196/763/784 2193/762/785 2194/765/786 +f 2194/765/786 2197/764/786 2196/763/784 +f 2198/767/787 2195/766/787 2193/762/785 +f 2193/762/785 2196/763/784 2198/767/787 +f 2188/774/788 2196/768/789 2197/771/790 +f 2197/771/790 2189/775/790 2188/774/788 +f 2192/776/791 2198/777/791 2196/768/789 +f 2196/768/789 2188/774/788 2192/776/791 +f 2199/778/792 2200/779/793 2201/780/794 +f 2201/780/794 2202/781/794 2199/778/792 +f 2203/782/795 2204/783/795 2200/779/793 +f 2200/779/793 2199/778/792 2203/782/795 +f 2205/784/796 2199/785/797 2202/786/798 +f 2202/786/798 2206/787/798 2205/784/796 +f 2207/788/799 2203/789/799 2199/785/797 +f 2199/785/797 2205/784/796 2207/788/799 +f 2208/790/800 2205/791/801 2206/792/802 +f 2206/792/802 2209/793/802 2208/790/800 +f 2210/794/803 2207/795/803 2205/791/801 +f 2205/791/801 2208/790/800 2210/794/803 +f 2200/785/804 2208/796/805 2209/787/806 +f 2209/787/806 2201/797/806 2200/785/804 +f 2204/789/807 2210/798/807 2208/796/805 +f 2208/796/805 2200/785/804 2204/789/807 +f 2211/799/36 2212/800/36 2213/801/36 +f 2213/801/36 2214/802/36 2211/799/36 +f 2215/803/808 2216/804/809 2217/805/810 +f 2217/805/810 2218/806/810 2215/803/808 +f 2214/807/811 2213/808/811 2216/804/809 +f 2216/804/809 2215/803/808 2214/807/811 +f 2219/809/812 2215/810/812 2218/811/813 +f 2218/811/813 2220/812/813 2219/809/812 +f 2211/813/814 2214/814/814 2215/810/812 +f 2215/810/812 2219/809/812 2211/813/814 +f 2221/804/815 2219/803/816 2220/806/817 +f 2220/806/817 2222/805/817 2221/804/815 +f 2212/808/818 2211/807/818 2219/803/816 +f 2219/803/816 2221/804/815 2212/808/818 +f 2216/815/819 2221/809/819 2222/816/820 +f 2222/816/820 2217/817/820 2216/815/819 +f 2213/818/821 2212/819/822 2221/809/819 +f 2221/809/819 2216/815/819 2213/818/821 +f 2223/820/36 2224/821/36 2225/822/36 +f 2225/822/36 2226/823/36 2223/820/36 +f 2227/824/857 2228/825/858 2229/826/825 +f 2229/826/825 2230/827/825 2227/824/857 +f 2226/828/862 2225/829/862 2228/825/858 +f 2228/825/858 2227/824/857 2226/828/862 +f 2231/737/863 2227/738/864 2230/734/829 +f 2230/734/829 2232/740/829 2231/737/863 +f 2223/741/830 2226/735/830 2227/738/864 +f 2227/738/864 2231/737/863 2223/741/830 +f 2233/825/832 2231/824/832 2232/827/833 +f 2232/827/833 2234/826/833 2233/825/832 +f 2224/829/834 2223/828/834 2231/824/832 +f 2231/824/832 2233/825/832 2224/829/834 +f 2228/731/835 2233/737/836 2234/733/837 +f 2234/733/837 2229/830/837 2228/731/835 +f 2225/831/838 2224/736/838 2233/737/836 +f 2233/737/836 2228/731/835 2225/831/838 +f 2235/832/36 2236/833/36 2237/834/36 +f 2237/834/36 2238/835/36 2235/832/36 +f 2239/836/839 2240/837/839 2241/838/865 +f 2241/838/865 2242/839/865 2239/836/839 +f 2238/840/866 2237/841/866 2240/837/839 +f 2240/837/839 2239/836/839 2238/840/866 +f 2243/737/842 2239/731/842 2242/734/843 +f 2242/734/843 2244/733/843 2243/737/842 +f 2235/741/844 2238/735/844 2239/731/842 +f 2239/731/842 2243/737/842 2235/741/844 +f 2245/837/859 2243/836/859 2244/839/846 +f 2244/839/846 2246/838/846 2245/837/859 +f 2236/841/847 2235/840/847 2243/836/859 +f 2243/836/859 2245/837/859 2236/841/847 +f 2240/842/867 2245/732/848 2246/843/849 +f 2246/843/849 2241/734/849 2240/842/867 +f 2237/831/850 2236/736/851 2245/732/848 +f 2245/732/848 2240/842/867 2237/831/850 +f 2247/721/36 2248/722/36 2249/723/36 +f 2249/723/36 2250/724/36 2247/721/36 +f 2251/725/852 2252/726/748 2253/727/860 +f 2253/727/860 2254/728/860 2251/725/852 +f 2250/729/750 2249/730/750 2252/726/748 +f 2252/726/748 2251/725/852 2250/729/750 +f 2255/731/751 2251/732/752 2254/733/753 +f 2254/733/753 2256/734/753 2255/731/751 +f 2247/735/754 2250/736/754 2251/732/752 +f 2251/732/752 2255/731/751 2247/735/754 +f 2257/726/755 2255/725/755 2256/728/756 +f 2256/728/756 2258/727/756 2257/726/755 +f 2248/730/757 2247/729/757 2255/725/755 +f 2255/725/755 2257/726/755 2248/730/757 +f 2252/737/758 2257/738/758 2258/739/759 +f 2258/739/759 2253/740/759 2252/737/758 +f 2249/741/760 2248/742/760 2257/738/758 +f 2257/738/758 2252/737/758 2249/741/760 +f 2259/743/36 2260/744/36 2261/745/36 +f 2261/745/36 2262/746/36 2259/743/36 +f 2263/747/761 2264/748/761 2265/749/762 +f 2265/749/762 2266/750/762 2263/747/761 +f 2262/751/763 2261/752/763 2264/748/761 +f 2264/748/761 2263/747/761 2262/751/763 +f 2267/753/764 2263/754/765 2266/755/766 +f 2266/755/766 2268/756/766 2267/753/764 +f 2259/757/767 2262/758/767 2263/754/765 +f 2263/754/765 2267/753/764 2259/757/767 +f 2269/748/768 2267/747/769 2268/750/770 +f 2268/750/770 2270/749/770 2269/748/768 +f 2260/752/771 2259/751/771 2267/747/769 +f 2267/747/769 2269/748/768 2260/752/771 +f 2264/754/772 2269/759/773 2270/760/774 +f 2270/760/774 2265/755/774 2264/754/772 +f 2261/758/775 2260/761/775 2269/759/773 +f 2269/759/773 2264/754/772 2261/758/775 +f 2271/762/776 2272/763/777 2273/764/778 +f 2273/764/778 2274/765/778 2271/762/776 +f 2275/766/779 2276/767/779 2272/763/777 +f 2272/763/777 2271/762/776 2275/766/779 +f 2277/768/780 2271/769/781 2274/770/782 +f 2274/770/782 2278/771/782 2277/768/780 +f 2279/772/783 2275/773/783 2271/769/781 +f 2271/769/781 2277/768/780 2279/772/783 +f 2280/763/784 2277/762/785 2278/765/786 +f 2278/765/786 2281/764/786 2280/763/784 +f 2282/767/787 2279/766/787 2277/762/785 +f 2277/762/785 2280/763/784 2282/767/787 +f 2272/774/788 2280/768/789 2281/771/790 +f 2281/771/790 2273/775/790 2272/774/788 +f 2276/776/791 2282/777/791 2280/768/789 +f 2280/768/789 2272/774/788 2276/776/791 +f 2283/778/868 2284/779/793 2285/780/794 +f 2285/780/794 2286/781/794 2283/778/868 +f 2287/782/795 2288/783/795 2284/779/793 +f 2284/779/793 2283/778/868 2287/782/795 +f 2289/784/796 2283/785/797 2286/786/798 +f 2286/786/798 2290/787/798 2289/784/796 +f 2291/788/799 2287/789/799 2283/785/797 +f 2283/785/797 2289/784/796 2291/788/799 +f 2292/790/800 2289/791/801 2290/792/802 +f 2290/792/802 2293/793/802 2292/790/800 +f 2294/794/803 2291/795/803 2289/791/801 +f 2289/791/801 2292/790/800 2294/794/803 +f 2284/785/804 2292/796/805 2293/787/806 +f 2293/787/806 2285/797/806 2284/785/804 +f 2288/789/807 2294/798/807 2292/796/805 +f 2292/796/805 2284/785/804 2288/789/807 +f 2295/799/36 2296/800/36 2297/801/36 +f 2297/801/36 2298/802/36 2295/799/36 +f 2299/803/808 2300/804/809 2301/805/810 +f 2301/805/810 2302/806/810 2299/803/808 +f 2298/807/811 2297/808/811 2300/804/809 +f 2300/804/809 2299/803/808 2298/807/811 +f 2303/809/812 2299/810/812 2302/811/813 +f 2302/811/813 2304/812/813 2303/809/812 +f 2295/813/814 2298/814/814 2299/810/812 +f 2299/810/812 2303/809/812 2295/813/814 +f 2305/804/815 2303/803/816 2304/806/869 +f 2304/806/869 2306/805/869 2305/804/815 +f 2296/808/870 2295/807/870 2303/803/816 +f 2303/803/816 2305/804/815 2296/808/870 +f 2300/815/819 2305/809/819 2306/816/820 +f 2306/816/820 2301/817/820 2300/815/819 +f 2297/818/821 2296/819/821 2305/809/819 +f 2305/809/819 2300/815/819 2297/818/821 +f 2307/820/36 2308/821/36 2309/822/36 +f 2309/822/36 2310/823/36 2307/820/36 +f 2311/824/857 2312/825/858 2313/826/825 +f 2313/826/825 2314/827/825 2311/824/857 +f 2310/828/826 2309/829/826 2312/825/858 +f 2312/825/858 2311/824/857 2310/828/826 +f 2315/737/827 2311/738/864 2314/734/829 +f 2314/734/829 2316/740/829 2315/737/827 +f 2307/741/830 2310/735/830 2311/738/864 +f 2311/738/864 2315/737/827 2307/741/830 +f 2317/825/832 2315/824/832 2316/827/833 +f 2316/827/833 2318/826/833 2317/825/832 +f 2308/829/834 2307/828/834 2315/824/832 +f 2315/824/832 2317/825/832 2308/829/834 +f 2312/731/835 2317/737/836 2318/733/837 +f 2318/733/837 2313/830/837 2312/731/835 +f 2309/831/838 2308/736/838 2317/737/836 +f 2317/737/836 2312/731/835 2309/831/838 +f 2319/832/36 2320/833/36 2321/834/36 +f 2321/834/36 2322/835/36 2319/832/36 +f 2323/836/839 2324/837/839 2325/838/840 +f 2325/838/840 2326/839/840 2323/836/839 +f 2322/840/841 2321/841/841 2324/837/839 +f 2324/837/839 2323/836/839 2322/840/841 +f 2327/737/842 2323/731/842 2326/734/843 +f 2326/734/843 2328/733/843 2327/737/842 +f 2319/741/844 2322/735/844 2323/731/842 +f 2323/731/842 2327/737/842 2319/741/844 +f 2329/837/859 2327/836/859 2328/839/871 +f 2328/839/871 2330/838/871 2329/837/859 +f 2320/841/847 2319/840/847 2327/836/859 +f 2327/836/859 2329/837/859 2320/841/847 +f 2324/842/848 2329/732/848 2330/843/849 +f 2330/843/849 2325/734/849 2324/842/848 +f 2321/831/850 2320/736/851 2329/732/848 +f 2329/732/848 2324/842/848 2321/831/850 +f 2331/721/36 2332/722/36 2333/723/36 +f 2333/723/36 2334/724/36 2331/721/36 +f 2335/725/852 2336/726/748 2337/727/860 +f 2337/727/860 2338/728/860 2335/725/852 +f 2334/729/750 2333/730/750 2336/726/748 +f 2336/726/748 2335/725/852 2334/729/750 +f 2339/731/751 2335/732/752 2338/733/753 +f 2338/733/753 2340/734/753 2339/731/751 +f 2331/735/754 2334/736/754 2335/732/752 +f 2335/732/752 2339/731/751 2331/735/754 +f 2341/726/872 2339/725/755 2340/728/756 +f 2340/728/756 2342/727/756 2341/726/872 +f 2332/730/757 2331/729/757 2339/725/755 +f 2339/725/755 2341/726/872 2332/730/757 +f 2336/737/758 2341/738/758 2342/739/759 +f 2342/739/759 2337/740/759 2336/737/758 +f 2333/741/760 2332/742/760 2341/738/758 +f 2341/738/758 2336/737/758 2333/741/760 +f 2343/743/36 2344/744/36 2345/745/36 +f 2345/745/36 2346/746/36 2343/743/36 +f 2347/747/761 2348/748/761 2349/749/762 +f 2349/749/762 2350/750/762 2347/747/761 +f 2346/751/763 2345/752/763 2348/748/761 +f 2348/748/761 2347/747/761 2346/751/763 +f 2351/753/764 2347/754/765 2350/755/766 +f 2350/755/766 2352/756/766 2351/753/764 +f 2343/757/767 2346/758/767 2347/754/765 +f 2347/754/765 2351/753/764 2343/757/767 +f 2353/748/768 2351/747/769 2352/750/873 +f 2352/750/873 2354/749/873 2353/748/768 +f 2344/752/874 2343/751/771 2351/747/769 +f 2351/747/769 2353/748/768 2344/752/874 +f 2348/754/772 2353/759/773 2354/760/774 +f 2354/760/774 2349/755/774 2348/754/772 +f 2345/758/775 2344/761/775 2353/759/773 +f 2353/759/773 2348/754/772 2345/758/775 +f 2355/762/776 2356/763/777 2357/764/778 +f 2357/764/778 2358/765/778 2355/762/776 +f 2359/766/779 2360/767/779 2356/763/777 +f 2356/763/777 2355/762/776 2359/766/779 +f 2361/768/780 2355/769/781 2358/770/782 +f 2358/770/782 2362/771/782 2361/768/780 +f 2363/772/783 2359/773/783 2355/769/781 +f 2355/769/781 2361/768/780 2363/772/783 +f 2364/763/784 2361/762/785 2362/765/786 +f 2362/765/786 2365/764/786 2364/763/784 +f 2366/767/787 2363/766/787 2361/762/785 +f 2361/762/785 2364/763/784 2366/767/787 +f 2356/774/788 2364/768/789 2365/771/790 +f 2365/771/790 2357/775/790 2356/774/788 +f 2360/776/791 2366/777/791 2364/768/789 +f 2364/768/789 2356/774/788 2360/776/791 +f 2367/778/792 2368/779/793 2369/780/794 +f 2369/780/794 2370/781/794 2367/778/792 +f 2371/782/795 2372/783/795 2368/779/793 +f 2368/779/793 2367/778/792 2371/782/795 +f 2373/784/796 2367/785/797 2370/786/798 +f 2370/786/798 2374/787/798 2373/784/796 +f 2375/788/799 2371/789/799 2367/785/797 +f 2367/785/797 2373/784/796 2375/788/799 +f 2376/790/800 2373/791/801 2374/792/802 +f 2374/792/802 2377/793/802 2376/790/800 +f 2378/794/803 2375/795/803 2373/791/801 +f 2373/791/801 2376/790/800 2378/794/803 +f 2368/785/804 2376/796/805 2377/787/806 +f 2377/787/806 2369/797/806 2368/785/804 +f 2372/789/807 2378/798/807 2376/796/805 +f 2376/796/805 2368/785/804 2372/789/807 +f 2379/799/36 2380/800/36 2381/801/36 +f 2381/801/36 2382/802/36 2379/799/36 +f 2383/803/808 2384/804/809 2385/805/810 +f 2385/805/810 2386/806/810 2383/803/808 +f 2382/807/811 2381/808/811 2384/804/809 +f 2384/804/809 2383/803/808 2382/807/811 +f 2387/809/812 2383/810/812 2386/811/813 +f 2386/811/813 2388/812/813 2387/809/812 +f 2379/813/814 2382/814/814 2383/810/812 +f 2383/810/812 2387/809/812 2379/813/814 +f 2389/804/815 2387/803/816 2388/806/875 +f 2388/806/875 2390/805/875 2389/804/815 +f 2380/808/876 2379/807/876 2387/803/816 +f 2387/803/816 2389/804/815 2380/808/876 +f 2384/815/819 2389/809/819 2390/816/820 +f 2390/816/820 2385/817/820 2384/815/819 +f 2381/818/821 2380/819/822 2389/809/819 +f 2389/809/819 2384/815/819 2381/818/821 +f 2391/820/36 2392/821/36 2393/822/36 +f 2393/822/36 2394/823/36 2391/820/36 +f 2395/824/857 2396/825/858 2397/826/825 +f 2397/826/825 2398/827/825 2395/824/857 +f 2394/828/826 2393/829/826 2396/825/858 +f 2396/825/858 2395/824/857 2394/828/826 +f 2399/737/827 2395/738/828 2398/734/829 +f 2398/734/829 2400/740/829 2399/737/827 +f 2391/741/830 2394/735/830 2395/738/828 +f 2395/738/828 2399/737/827 2391/741/830 +f 2401/825/877 2399/824/878 2400/827/833 +f 2400/827/833 2402/826/833 2401/825/877 +f 2392/829/834 2391/828/879 2399/824/878 +f 2399/824/878 2401/825/877 2392/829/834 +f 2396/731/835 2401/737/836 2402/733/837 +f 2402/733/837 2397/830/837 2396/731/835 +f 2393/831/838 2392/736/838 2401/737/836 +f 2401/737/836 2396/731/835 2393/831/838 +f 2403/832/36 2404/833/36 2405/834/36 +f 2405/834/36 2406/835/36 2403/832/36 +f 2407/836/839 2408/837/839 2409/838/880 +f 2409/838/880 2410/839/880 2407/836/839 +f 2406/840/841 2405/841/841 2408/837/839 +f 2408/837/839 2407/836/839 2406/840/841 +f 2411/737/842 2407/731/842 2410/734/843 +f 2410/734/843 2412/733/843 2411/737/842 +f 2403/741/844 2406/735/844 2407/731/842 +f 2407/731/842 2411/737/842 2403/741/844 +f 2413/837/859 2411/836/859 2412/839/881 +f 2412/839/881 2414/838/881 2413/837/859 +f 2404/841/882 2403/840/882 2411/836/859 +f 2411/836/859 2413/837/859 2404/841/882 +f 2408/842/848 2413/732/848 2414/843/849 +f 2414/843/849 2409/734/849 2408/842/848 +f 2405/831/850 2404/736/851 2413/732/848 +f 2413/732/848 2408/842/848 2405/831/850 +f 2415/721/36 2416/722/36 2417/723/36 +f 2417/723/36 2418/724/36 2415/721/36 +f 2419/725/852 2420/726/748 2421/727/860 +f 2421/727/860 2422/728/860 2419/725/852 +f 2418/729/750 2417/730/750 2420/726/748 +f 2420/726/748 2419/725/852 2418/729/750 +f 2423/731/751 2419/732/752 2422/733/753 +f 2422/733/753 2424/734/753 2423/731/751 +f 2415/735/754 2418/736/754 2419/732/752 +f 2419/732/752 2423/731/751 2415/735/754 +f 2425/726/755 2423/725/755 2424/728/756 +f 2424/728/756 2426/727/756 2425/726/755 +f 2416/730/757 2415/729/757 2423/725/755 +f 2423/725/755 2425/726/755 2416/730/757 +f 2420/737/758 2425/738/758 2426/739/759 +f 2426/739/759 2421/740/759 2420/737/758 +f 2417/741/760 2416/742/760 2425/738/758 +f 2425/738/758 2420/737/758 2417/741/760 +f 2427/743/36 2428/744/36 2429/745/36 +f 2429/745/36 2430/746/36 2427/743/36 +f 2431/747/761 2432/748/761 2433/749/762 +f 2433/749/762 2434/750/762 2431/747/761 +f 2430/751/763 2429/752/763 2432/748/761 +f 2432/748/761 2431/747/761 2430/751/763 +f 2435/753/764 2431/754/765 2434/755/766 +f 2434/755/766 2436/756/766 2435/753/764 +f 2427/757/767 2430/758/767 2431/754/765 +f 2431/754/765 2435/753/764 2427/757/767 +f 2437/748/768 2435/747/769 2436/750/873 +f 2436/750/873 2438/749/873 2437/748/768 +f 2428/752/874 2427/751/771 2435/747/769 +f 2435/747/769 2437/748/768 2428/752/874 +f 2432/754/772 2437/759/773 2438/760/774 +f 2438/760/774 2433/755/774 2432/754/772 +f 2429/758/775 2428/761/775 2437/759/773 +f 2437/759/773 2432/754/772 2429/758/775 +f 2439/762/776 2440/763/777 2441/764/778 +f 2441/764/778 2442/765/778 2439/762/776 +f 2443/766/779 2444/767/779 2440/763/777 +f 2440/763/777 2439/762/776 2443/766/779 +f 2445/768/780 2439/769/781 2442/770/782 +f 2442/770/782 2446/771/782 2445/768/780 +f 2447/772/783 2443/773/783 2439/769/781 +f 2439/769/781 2445/768/780 2447/772/783 +f 2448/763/784 2445/762/785 2446/765/786 +f 2446/765/786 2449/764/786 2448/763/784 +f 2450/767/787 2447/766/787 2445/762/785 +f 2445/762/785 2448/763/784 2450/767/787 +f 2440/774/788 2448/768/789 2449/771/790 +f 2449/771/790 2441/775/790 2440/774/788 +f 2444/776/791 2450/777/791 2448/768/789 +f 2448/768/789 2440/774/788 2444/776/791 +f 2451/778/792 2452/779/793 2453/780/794 +f 2453/780/794 2454/781/794 2451/778/792 +f 2455/782/795 2456/783/795 2452/779/793 +f 2452/779/793 2451/778/792 2455/782/795 +f 2457/784/796 2451/785/797 2454/786/798 +f 2454/786/798 2458/787/798 2457/784/796 +f 2459/788/799 2455/789/799 2451/785/797 +f 2451/785/797 2457/784/796 2459/788/799 +f 2460/790/800 2457/791/801 2458/792/802 +f 2458/792/802 2461/793/802 2460/790/800 +f 2462/794/803 2459/795/803 2457/791/801 +f 2457/791/801 2460/790/800 2462/794/803 +f 2452/785/804 2460/796/805 2461/787/806 +f 2461/787/806 2453/797/806 2452/785/804 +f 2456/789/807 2462/798/807 2460/796/805 +f 2460/796/805 2452/785/804 2456/789/807 +f 2463/799/36 2464/800/36 2465/801/36 +f 2465/801/36 2466/802/36 2463/799/36 +f 2467/803/808 2468/804/809 2469/805/810 +f 2469/805/810 2470/806/810 2467/803/808 +f 2466/807/811 2465/808/811 2468/804/809 +f 2468/804/809 2467/803/808 2466/807/811 +f 2471/809/812 2467/810/812 2470/811/813 +f 2470/811/813 2472/812/813 2471/809/812 +f 2463/813/814 2466/814/814 2467/810/812 +f 2467/810/812 2471/809/812 2463/813/814 +f 2473/804/815 2471/803/816 2472/806/869 +f 2472/806/869 2474/805/869 2473/804/815 +f 2464/808/870 2463/807/870 2471/803/816 +f 2471/803/816 2473/804/815 2464/808/870 +f 2468/815/819 2473/809/819 2474/816/820 +f 2474/816/820 2469/817/820 2468/815/819 +f 2465/818/821 2464/819/821 2473/809/819 +f 2473/809/819 2468/815/819 2465/818/821 +f 2475/820/36 2476/821/36 2477/822/36 +f 2477/822/36 2478/823/36 2475/820/36 +f 2479/824/857 2480/825/858 2481/826/825 +f 2481/826/825 2482/827/825 2479/824/857 +f 2478/828/862 2477/829/862 2480/825/858 +f 2480/825/858 2479/824/857 2478/828/862 +f 2483/737/863 2479/738/864 2482/734/829 +f 2482/734/829 2484/740/829 2483/737/863 +f 2475/741/830 2478/735/830 2479/738/864 +f 2479/738/864 2483/737/863 2475/741/830 +f 2485/825/832 2483/824/832 2484/827/833 +f 2484/827/833 2486/826/833 2485/825/832 +f 2476/829/834 2475/828/834 2483/824/832 +f 2483/824/832 2485/825/832 2476/829/834 +f 2480/731/835 2485/737/836 2486/733/837 +f 2486/733/837 2481/830/837 2480/731/835 +f 2477/831/838 2476/736/838 2485/737/836 +f 2485/737/836 2480/731/835 2477/831/838 +f 2487/832/36 2488/833/36 2489/834/36 +f 2489/834/36 2490/835/36 2487/832/36 +f 2491/836/839 2492/837/839 2493/838/865 +f 2493/838/865 2494/839/865 2491/836/839 +f 2490/840/866 2489/841/866 2492/837/839 +f 2492/837/839 2491/836/839 2490/840/866 +f 2495/737/842 2491/731/842 2494/734/843 +f 2494/734/843 2496/733/843 2495/737/842 +f 2487/741/844 2490/735/844 2491/731/842 +f 2491/731/842 2495/737/842 2487/741/844 +f 2497/837/859 2495/836/859 2496/839/846 +f 2496/839/846 2498/838/846 2497/837/859 +f 2488/841/847 2487/840/847 2495/836/859 +f 2495/836/859 2497/837/859 2488/841/847 +f 2492/842/867 2497/732/848 2498/843/849 +f 2498/843/849 2493/734/849 2492/842/867 +f 2489/831/850 2488/736/851 2497/732/848 +f 2497/732/848 2492/842/867 2489/831/850 +f 2499/721/36 2500/722/36 2501/723/36 +f 2501/723/36 2502/724/36 2499/721/36 +f 2503/725/852 2504/726/748 2505/727/749 +f 2505/727/749 2506/728/749 2503/725/852 +f 2502/729/750 2501/730/750 2504/726/748 +f 2504/726/748 2503/725/852 2502/729/750 +f 2507/731/751 2503/732/752 2506/733/753 +f 2506/733/753 2508/734/753 2507/731/751 +f 2499/735/754 2502/736/754 2503/732/752 +f 2503/732/752 2507/731/751 2499/735/754 +f 2509/726/872 2507/725/755 2508/728/756 +f 2508/728/756 2510/727/756 2509/726/872 +f 2500/730/757 2499/729/757 2507/725/755 +f 2507/725/755 2509/726/872 2500/730/757 +f 2504/737/758 2509/738/758 2510/739/759 +f 2510/739/759 2505/740/759 2504/737/758 +f 2501/741/760 2500/742/760 2509/738/758 +f 2509/738/758 2504/737/758 2501/741/760 +f 2511/743/36 2512/744/36 2513/745/36 +f 2513/745/36 2514/746/36 2511/743/36 +f 2515/747/761 2516/748/761 2517/749/762 +f 2517/749/762 2518/750/762 2515/747/761 +f 2514/751/763 2513/752/763 2516/748/761 +f 2516/748/761 2515/747/761 2514/751/763 +f 2519/753/764 2515/754/765 2518/755/766 +f 2518/755/766 2520/756/766 2519/753/764 +f 2511/757/767 2514/758/767 2515/754/765 +f 2515/754/765 2519/753/764 2511/757/767 +f 2521/748/768 2519/747/769 2520/750/873 +f 2520/750/873 2522/749/873 2521/748/768 +f 2512/752/874 2511/751/771 2519/747/769 +f 2519/747/769 2521/748/768 2512/752/874 +f 2516/754/772 2521/759/773 2522/760/774 +f 2522/760/774 2517/755/774 2516/754/772 +f 2513/758/775 2512/761/775 2521/759/773 +f 2521/759/773 2516/754/772 2513/758/775 +f 2523/762/776 2524/763/777 2525/764/778 +f 2525/764/778 2526/765/778 2523/762/776 +f 2527/766/779 2528/767/779 2524/763/777 +f 2524/763/777 2523/762/776 2527/766/779 +f 2529/768/780 2523/769/781 2526/770/782 +f 2526/770/782 2530/771/782 2529/768/780 +f 2531/772/783 2527/773/783 2523/769/781 +f 2523/769/781 2529/768/780 2531/772/783 +f 2532/763/784 2529/762/785 2530/765/786 +f 2530/765/786 2533/764/786 2532/763/784 +f 2534/767/787 2531/766/787 2529/762/785 +f 2529/762/785 2532/763/784 2534/767/787 +f 2524/774/788 2532/768/789 2533/771/790 +f 2533/771/790 2525/775/790 2524/774/788 +f 2528/776/791 2534/777/791 2532/768/789 +f 2532/768/789 2524/774/788 2528/776/791 +f 2535/778/868 2536/779/793 2537/780/794 +f 2537/780/794 2538/781/794 2535/778/868 +f 2539/782/795 2540/783/795 2536/779/793 +f 2536/779/793 2535/778/868 2539/782/795 +f 2541/784/796 2535/785/797 2538/786/798 +f 2538/786/798 2542/787/798 2541/784/796 +f 2543/788/799 2539/789/799 2535/785/797 +f 2535/785/797 2541/784/796 2543/788/799 +f 2544/790/853 2541/791/854 2542/792/802 +f 2542/792/802 2545/793/802 2544/790/853 +f 2546/794/803 2543/795/803 2541/791/854 +f 2541/791/854 2544/790/853 2546/794/803 +f 2536/785/804 2544/796/805 2545/787/806 +f 2545/787/806 2537/797/806 2536/785/804 +f 2540/789/807 2546/798/807 2544/796/805 +f 2544/796/805 2536/785/804 2540/789/807 +f 2547/799/36 2548/800/36 2549/801/36 +f 2549/801/36 2550/802/36 2547/799/36 +f 2551/803/808 2552/804/809 2553/805/810 +f 2553/805/810 2554/806/810 2551/803/808 +f 2550/807/811 2549/808/811 2552/804/809 +f 2552/804/809 2551/803/808 2550/807/811 +f 2555/809/812 2551/810/812 2554/811/813 +f 2554/811/813 2556/812/813 2555/809/812 +f 2547/813/814 2550/814/814 2551/810/812 +f 2551/810/812 2555/809/812 2547/813/814 +f 2557/804/815 2555/803/816 2556/806/869 +f 2556/806/869 2558/805/869 2557/804/815 +f 2548/808/870 2547/807/870 2555/803/816 +f 2555/803/816 2557/804/815 2548/808/870 +f 2552/815/819 2557/809/819 2558/816/820 +f 2558/816/820 2553/817/820 2552/815/819 +f 2549/818/821 2548/819/821 2557/809/819 +f 2557/809/819 2552/815/819 2549/818/821 +f 2559/820/36 2560/821/36 2561/822/36 +f 2561/822/36 2562/823/36 2559/820/36 +f 2563/824/857 2564/825/858 2565/826/825 +f 2565/826/825 2566/827/825 2563/824/857 +f 2562/828/826 2561/829/826 2564/825/858 +f 2564/825/858 2563/824/857 2562/828/826 +f 2567/737/827 2563/738/828 2566/734/829 +f 2566/734/829 2568/740/829 2567/737/827 +f 2559/741/830 2562/735/830 2563/738/828 +f 2563/738/828 2567/737/827 2559/741/830 +f 2569/825/832 2567/824/832 2568/827/833 +f 2568/827/833 2570/826/833 2569/825/832 +f 2560/829/834 2559/828/834 2567/824/832 +f 2567/824/832 2569/825/832 2560/829/834 +f 2564/731/835 2569/737/836 2570/733/837 +f 2570/733/837 2565/830/837 2564/731/835 +f 2561/831/838 2560/736/838 2569/737/836 +f 2569/737/836 2564/731/835 2561/831/838 +f 2571/832/36 2572/833/36 2573/834/36 +f 2573/834/36 2574/835/36 2571/832/36 +f 2575/836/839 2576/837/839 2577/838/865 +f 2577/838/865 2578/839/865 2575/836/839 +f 2574/840/861 2573/841/861 2576/837/839 +f 2576/837/839 2575/836/839 2574/840/861 +f 2579/737/842 2575/731/842 2578/734/843 +f 2578/734/843 2580/733/843 2579/737/842 +f 2571/741/844 2574/735/844 2575/731/842 +f 2575/731/842 2579/737/842 2571/741/844 +f 2581/837/859 2579/836/859 2580/839/881 +f 2580/839/881 2582/838/881 2581/837/859 +f 2572/841/882 2571/840/882 2579/836/859 +f 2579/836/859 2581/837/859 2572/841/882 +f 2576/842/848 2581/732/848 2582/843/849 +f 2582/843/849 2577/734/849 2576/842/848 +f 2573/831/850 2572/736/851 2581/732/848 +f 2581/732/848 2576/842/848 2573/831/850 +f 2583/721/36 2584/722/36 2585/723/36 +f 2585/723/36 2586/724/36 2583/721/36 +f 2587/725/852 2588/726/748 2589/727/860 +f 2589/727/860 2590/728/860 2587/725/852 +f 2586/729/750 2585/730/750 2588/726/748 +f 2588/726/748 2587/725/852 2586/729/750 +f 2591/731/751 2587/732/752 2590/733/753 +f 2590/733/753 2592/734/753 2591/731/751 +f 2583/735/754 2586/736/754 2587/732/752 +f 2587/732/752 2591/731/751 2583/735/754 +f 2593/726/755 2591/725/755 2592/728/756 +f 2592/728/756 2594/727/756 2593/726/755 +f 2584/730/757 2583/729/757 2591/725/755 +f 2591/725/755 2593/726/755 2584/730/757 +f 2588/737/758 2593/738/758 2594/739/759 +f 2594/739/759 2589/740/759 2588/737/758 +f 2585/741/760 2584/742/760 2593/738/758 +f 2593/738/758 2588/737/758 2585/741/760 +f 2595/743/36 2596/744/36 2597/745/36 +f 2597/745/36 2598/746/36 2595/743/36 +f 2599/747/883 2600/748/884 2601/749/762 +f 2601/749/762 2602/750/762 2599/747/883 +f 2598/751/763 2597/752/763 2600/748/884 +f 2600/748/884 2599/747/883 2598/751/763 +f 2603/753/764 2599/754/765 2602/755/766 +f 2602/755/766 2604/756/766 2603/753/764 +f 2595/757/767 2598/758/767 2599/754/765 +f 2599/754/765 2603/753/764 2595/757/767 +f 2605/748/768 2603/747/769 2604/750/885 +f 2604/750/885 2606/749/885 2605/748/768 +f 2596/752/771 2595/751/771 2603/747/769 +f 2603/747/769 2605/748/768 2596/752/771 +f 2600/754/772 2605/759/773 2606/760/774 +f 2606/760/774 2601/755/774 2600/754/772 +f 2597/758/775 2596/761/775 2605/759/773 +f 2605/759/773 2600/754/772 2597/758/775 +f 2607/762/776 2608/763/777 2609/764/778 +f 2609/764/778 2610/765/778 2607/762/776 +f 2611/766/779 2612/767/779 2608/763/777 +f 2608/763/777 2607/762/776 2611/766/779 +f 2613/768/780 2607/769/781 2610/770/782 +f 2610/770/782 2614/771/782 2613/768/780 +f 2615/772/783 2611/773/783 2607/769/781 +f 2607/769/781 2613/768/780 2615/772/783 +f 2616/763/784 2613/762/785 2614/765/786 +f 2614/765/786 2617/764/786 2616/763/784 +f 2618/767/787 2615/766/787 2613/762/785 +f 2613/762/785 2616/763/784 2618/767/787 +f 2608/774/788 2616/768/789 2617/771/790 +f 2617/771/790 2609/775/790 2608/774/788 +f 2612/776/791 2618/777/791 2616/768/789 +f 2616/768/789 2608/774/788 2612/776/791 +f 2619/778/792 2620/779/793 2621/780/794 +f 2621/780/794 2622/781/794 2619/778/792 +f 2623/782/795 2624/783/795 2620/779/793 +f 2620/779/793 2619/778/792 2623/782/795 +f 2625/784/796 2619/785/797 2622/786/798 +f 2622/786/798 2626/787/798 2625/784/796 +f 2627/788/799 2623/789/799 2619/785/797 +f 2619/785/797 2625/784/796 2627/788/799 +f 2628/790/800 2625/791/801 2626/792/802 +f 2626/792/802 2629/793/802 2628/790/800 +f 2630/794/803 2627/795/803 2625/791/801 +f 2625/791/801 2628/790/800 2630/794/803 +f 2620/785/804 2628/796/805 2629/787/806 +f 2629/787/806 2621/797/806 2620/785/804 +f 2624/789/807 2630/798/807 2628/796/805 +f 2628/796/805 2620/785/804 2624/789/807 +f 2631/799/36 2632/800/36 2633/801/36 +f 2633/801/36 2634/802/36 2631/799/36 +f 2635/803/808 2636/804/809 2637/805/810 +f 2637/805/810 2638/806/810 2635/803/808 +f 2634/807/811 2633/808/811 2636/804/809 +f 2636/804/809 2635/803/808 2634/807/811 +f 2639/809/812 2635/810/812 2638/811/813 +f 2638/811/813 2640/812/813 2639/809/812 +f 2631/813/814 2634/814/814 2635/810/812 +f 2635/810/812 2639/809/812 2631/813/814 +f 2641/804/815 2639/803/816 2640/806/869 +f 2640/806/869 2642/805/869 2641/804/815 +f 2632/808/870 2631/807/870 2639/803/816 +f 2639/803/816 2641/804/815 2632/808/870 +f 2636/815/819 2641/809/819 2642/816/820 +f 2642/816/820 2637/817/820 2636/815/819 +f 2633/818/821 2632/819/821 2641/809/819 +f 2641/809/819 2636/815/819 2633/818/821 +f 2643/820/36 2644/821/36 2645/822/36 +f 2645/822/36 2646/823/36 2643/820/36 +f 2647/824/857 2648/825/858 2649/826/825 +f 2649/826/825 2650/827/825 2647/824/857 +f 2646/828/826 2645/829/826 2648/825/858 +f 2648/825/858 2647/824/857 2646/828/826 +f 2651/737/863 2647/738/864 2650/734/829 +f 2650/734/829 2652/740/829 2651/737/863 +f 2643/741/830 2646/735/830 2647/738/864 +f 2647/738/864 2651/737/863 2643/741/830 +f 2653/825/831 2651/824/832 2652/827/833 +f 2652/827/833 2654/826/886 2653/825/831 +f 2644/829/834 2643/828/887 2651/824/832 +f 2651/824/832 2653/825/831 2644/829/834 +f 2648/731/835 2653/737/836 2654/733/837 +f 2654/733/837 2649/830/837 2648/731/835 +f 2645/831/838 2644/736/838 2653/737/836 +f 2653/737/836 2648/731/835 2645/831/838 +f 2655/832/36 2656/833/36 2657/834/36 +f 2657/834/36 2658/835/36 2655/832/36 +f 2659/836/839 2660/837/839 2661/838/840 +f 2661/838/840 2662/839/840 2659/836/839 +f 2658/840/841 2657/841/841 2660/837/839 +f 2660/837/839 2659/836/839 2658/840/841 +f 2663/737/842 2659/731/842 2662/734/843 +f 2662/734/843 2664/733/843 2663/737/842 +f 2655/741/844 2658/735/844 2659/731/842 +f 2659/731/842 2663/737/842 2655/741/844 +f 2665/837/859 2663/836/859 2664/839/871 +f 2664/839/871 2666/838/871 2665/837/859 +f 2656/841/847 2655/840/847 2663/836/859 +f 2663/836/859 2665/837/859 2656/841/847 +f 2660/842/848 2665/732/848 2666/843/849 +f 2666/843/849 2661/734/849 2660/842/848 +f 2657/831/850 2656/736/851 2665/732/848 +f 2665/732/848 2660/842/848 2657/831/850 +f 2667/721/36 2668/722/36 2669/723/36 +f 2669/723/36 2670/724/36 2667/721/36 +f 2671/725/888 2672/726/888 2673/727/889 +f 2673/727/889 2674/728/889 2671/725/888 +f 2670/729/890 2669/730/890 2672/726/888 +f 2672/726/888 2671/725/888 2670/729/890 +f 2675/731/891 2671/732/892 2674/733/893 +f 2674/733/893 2676/734/894 2675/731/891 +f 2667/735/895 2670/736/895 2671/732/892 +f 2671/732/892 2675/731/891 2667/735/895 +f 2677/726/896 2675/725/896 2676/728/897 +f 2676/728/897 2678/727/897 2677/726/896 +f 2668/730/898 2667/729/898 2675/725/896 +f 2675/725/896 2677/726/896 2668/730/898 +f 2672/737/899 2677/738/899 2678/739/900 +f 2678/739/900 2673/740/900 2672/737/899 +f 2669/741/901 2668/742/901 2677/738/899 +f 2677/738/899 2672/737/899 2669/741/901 +f 2679/743/36 2680/744/36 2681/745/36 +f 2681/745/36 2682/746/36 2679/743/36 +f 2683/747/902 2684/748/902 2685/749/903 +f 2685/749/903 2686/750/903 2683/747/902 +f 2682/751/904 2681/752/904 2684/748/902 +f 2684/748/902 2683/747/902 2682/751/904 +f 2687/753/905 2683/754/906 2686/755/907 +f 2686/755/907 2688/756/908 2687/753/905 +f 2679/757/909 2682/758/909 2683/754/906 +f 2683/754/906 2687/753/905 2679/757/909 +f 2689/748/910 2687/747/911 2688/750/912 +f 2688/750/912 2690/749/912 2689/748/910 +f 2680/752/913 2679/751/913 2687/747/911 +f 2687/747/911 2689/748/910 2680/752/913 +f 2684/754/914 2689/759/915 2690/760/916 +f 2690/760/916 2685/755/916 2684/754/914 +f 2681/758/917 2680/761/917 2689/759/915 +f 2689/759/915 2684/754/914 2681/758/917 +f 2691/762/918 2692/763/919 2693/764/920 +f 2693/764/920 2694/765/920 2691/762/918 +f 2695/766/921 2696/767/921 2692/763/919 +f 2692/763/919 2691/762/918 2695/766/921 +f 2697/768/922 2691/769/923 2694/770/924 +f 2694/770/924 2698/771/924 2697/768/922 +f 2699/772/925 2695/773/925 2691/769/923 +f 2691/769/923 2697/768/922 2699/772/925 +f 2700/763/926 2697/762/927 2698/765/928 +f 2698/765/928 2701/764/928 2700/763/926 +f 2702/767/929 2699/766/929 2697/762/927 +f 2697/762/927 2700/763/926 2702/767/929 +f 2692/774/930 2700/768/931 2701/771/932 +f 2701/771/932 2693/775/932 2692/774/930 +f 2696/776/933 2702/777/933 2700/768/931 +f 2700/768/931 2692/774/930 2696/776/933 +f 2703/778/934 2704/779/935 2705/780/936 +f 2705/780/936 2706/781/936 2703/778/934 +f 2707/782/937 2708/783/937 2704/779/935 +f 2704/779/935 2703/778/934 2707/782/937 +f 2709/784/938 2703/785/939 2706/786/940 +f 2706/786/940 2710/787/940 2709/784/938 +f 2711/788/941 2707/789/941 2703/785/939 +f 2703/785/939 2709/784/938 2711/788/941 +f 2712/790/942 2709/791/943 2710/792/944 +f 2710/792/944 2713/793/944 2712/790/942 +f 2714/794/945 2711/795/945 2709/791/943 +f 2709/791/943 2712/790/942 2714/794/945 +f 2704/785/946 2712/796/947 2713/787/948 +f 2713/787/948 2705/797/948 2704/785/946 +f 2708/789/949 2714/798/949 2712/796/947 +f 2712/796/947 2704/785/946 2708/789/949 +f 2715/799/36 2716/800/36 2717/801/36 +f 2717/801/36 2718/802/36 2715/799/36 +f 2719/803/950 2720/804/951 2721/805/952 +f 2721/805/952 2722/806/952 2719/803/950 +f 2718/807/953 2717/808/953 2720/804/951 +f 2720/804/951 2719/803/950 2718/807/953 +f 2723/809/954 2719/810/954 2722/811/955 +f 2722/811/955 2724/812/955 2723/809/954 +f 2715/813/956 2718/814/956 2719/810/954 +f 2719/810/954 2723/809/954 2715/813/956 +f 2725/804/957 2723/803/958 2724/806/959 +f 2724/806/959 2726/805/959 2725/804/957 +f 2716/808/960 2715/807/960 2723/803/958 +f 2723/803/958 2725/804/957 2716/808/960 +f 2720/815/961 2725/809/961 2726/816/962 +f 2726/816/962 2721/817/962 2720/815/961 +f 2717/818/963 2716/819/963 2725/809/961 +f 2725/809/961 2720/815/961 2717/818/963 +f 2727/820/36 2728/821/36 2729/822/36 +f 2729/822/36 2730/823/36 2727/820/36 +f 2731/824/964 2732/825/965 2733/826/966 +f 2733/826/966 2734/827/966 2731/824/964 +f 2730/828/967 2729/829/967 2732/825/965 +f 2732/825/965 2731/824/964 2730/828/967 +f 2735/737/968 2731/738/969 2734/734/970 +f 2734/734/970 2736/740/970 2735/737/968 +f 2727/741/971 2730/735/971 2731/738/969 +f 2731/738/969 2735/737/968 2727/741/971 +f 2737/825/972 2735/824/972 2736/827/973 +f 2736/827/973 2738/826/973 2737/825/972 +f 2728/829/974 2727/828/974 2735/824/972 +f 2735/824/972 2737/825/972 2728/829/974 +f 2732/731/975 2737/737/976 2738/733/977 +f 2738/733/977 2733/830/977 2732/731/975 +f 2729/831/978 2728/736/978 2737/737/976 +f 2737/737/976 2732/731/975 2729/831/978 +f 2739/832/36 2740/833/36 2741/834/36 +f 2741/834/36 2742/835/36 2739/832/36 +f 2743/836/979 2744/837/979 2745/838/980 +f 2745/838/980 2746/839/980 2743/836/979 +f 2742/840/981 2741/841/981 2744/837/979 +f 2744/837/979 2743/836/979 2742/840/981 +f 2747/737/982 2743/731/982 2746/734/983 +f 2746/734/983 2748/733/983 2747/737/982 +f 2739/741/984 2742/735/985 2743/731/982 +f 2743/731/982 2747/737/982 2739/741/984 +f 2749/837/986 2747/836/986 2748/839/987 +f 2748/839/987 2750/838/987 2749/837/986 +f 2740/841/988 2739/840/988 2747/836/986 +f 2747/836/986 2749/837/986 2740/841/988 +f 2744/842/989 2749/732/989 2750/843/990 +f 2750/843/990 2745/734/990 2744/842/989 +f 2741/831/991 2740/736/991 2749/732/989 +f 2749/732/989 2744/842/989 2741/831/991 +f 2751/721/226 2752/722/226 2753/723/226 +f 2753/723/226 2754/724/226 2751/721/226 +f 2755/725/888 2756/726/888 2757/727/889 +f 2757/727/889 2758/728/889 2755/725/888 +f 2754/729/890 2753/730/890 2756/726/888 +f 2756/726/888 2755/725/888 2754/729/890 +f 2759/731/891 2755/732/892 2758/733/893 +f 2758/733/893 2760/734/893 2759/731/891 +f 2751/735/895 2754/736/895 2755/732/892 +f 2755/732/892 2759/731/891 2751/735/895 +f 2761/726/896 2759/725/896 2760/728/897 +f 2760/728/897 2762/727/897 2761/726/896 +f 2752/730/898 2751/729/898 2759/725/896 +f 2759/725/896 2761/726/896 2752/730/898 +f 2756/737/899 2761/738/899 2762/739/900 +f 2762/739/900 2757/740/900 2756/737/899 +f 2753/741/901 2752/742/901 2761/738/899 +f 2761/738/899 2756/737/899 2753/741/901 +f 2763/743/36 2764/744/36 2765/745/36 +f 2765/745/36 2766/746/36 2763/743/36 +f 2767/747/902 2768/748/902 2769/749/903 +f 2769/749/903 2770/750/903 2767/747/902 +f 2766/751/904 2765/752/904 2768/748/902 +f 2768/748/902 2767/747/902 2766/751/904 +f 2771/753/905 2767/754/906 2770/755/907 +f 2770/755/907 2772/756/908 2771/753/905 +f 2763/757/909 2766/758/909 2767/754/906 +f 2767/754/906 2771/753/905 2763/757/909 +f 2773/748/910 2771/747/911 2772/750/912 +f 2772/750/912 2774/749/912 2773/748/910 +f 2764/752/913 2763/751/913 2771/747/911 +f 2771/747/911 2773/748/910 2764/752/913 +f 2768/754/914 2773/759/915 2774/760/916 +f 2774/760/916 2769/755/916 2768/754/914 +f 2765/758/917 2764/761/917 2773/759/915 +f 2773/759/915 2768/754/914 2765/758/917 +f 2775/762/918 2776/763/919 2777/764/920 +f 2777/764/920 2778/765/920 2775/762/918 +f 2779/766/921 2780/767/921 2776/763/919 +f 2776/763/919 2775/762/918 2779/766/921 +f 2781/768/922 2775/769/923 2778/770/924 +f 2778/770/924 2782/771/924 2781/768/922 +f 2783/772/925 2779/773/925 2775/769/923 +f 2775/769/923 2781/768/922 2783/772/925 +f 2784/763/926 2781/762/927 2782/765/928 +f 2782/765/928 2785/764/928 2784/763/926 +f 2786/767/929 2783/766/929 2781/762/927 +f 2781/762/927 2784/763/926 2786/767/929 +f 2776/774/930 2784/768/931 2785/771/932 +f 2785/771/932 2777/775/932 2776/774/930 +f 2780/776/933 2786/777/933 2784/768/931 +f 2784/768/931 2776/774/930 2780/776/933 +f 2787/778/934 2788/779/935 2789/780/936 +f 2789/780/936 2790/781/936 2787/778/934 +f 2791/782/937 2792/783/937 2788/779/935 +f 2788/779/935 2787/778/934 2791/782/937 +f 2793/784/938 2787/785/939 2790/786/940 +f 2790/786/940 2794/787/940 2793/784/938 +f 2795/788/941 2791/789/941 2787/785/939 +f 2787/785/939 2793/784/938 2795/788/941 +f 2796/790/942 2793/791/943 2794/792/944 +f 2794/792/944 2797/793/944 2796/790/942 +f 2798/794/945 2795/795/945 2793/791/943 +f 2793/791/943 2796/790/942 2798/794/945 +f 2788/785/946 2796/796/947 2797/787/948 +f 2797/787/948 2789/797/948 2788/785/946 +f 2792/789/949 2798/798/949 2796/796/947 +f 2796/796/947 2788/785/946 2792/789/949 +f 2799/799/37 2800/800/37 2801/801/37 +f 2801/801/37 2802/802/37 2799/799/37 +f 2803/803/950 2804/804/951 2805/805/952 +f 2805/805/952 2806/806/952 2803/803/950 +f 2802/807/953 2801/808/953 2804/804/951 +f 2804/804/951 2803/803/950 2802/807/953 +f 2807/809/954 2803/810/954 2806/811/955 +f 2806/811/955 2808/812/955 2807/809/954 +f 2799/813/956 2802/814/956 2803/810/954 +f 2803/810/954 2807/809/954 2799/813/956 +f 2809/804/957 2807/803/958 2808/806/959 +f 2808/806/959 2810/805/959 2809/804/957 +f 2800/808/960 2799/807/960 2807/803/958 +f 2807/803/958 2809/804/957 2800/808/960 +f 2804/815/961 2809/809/961 2810/816/962 +f 2810/816/962 2805/817/962 2804/815/961 +f 2801/818/963 2800/819/963 2809/809/961 +f 2809/809/961 2804/815/961 2801/818/963 +f 2811/820/36 2812/821/36 2813/822/36 +f 2813/822/36 2814/823/36 2811/820/36 +f 2815/824/964 2816/825/965 2817/826/966 +f 2817/826/966 2818/827/966 2815/824/964 +f 2814/828/992 2813/829/967 2816/825/965 +f 2816/825/965 2815/824/964 2814/828/992 +f 2819/737/968 2815/738/969 2818/734/970 +f 2818/734/970 2820/740/970 2819/737/968 +f 2811/741/971 2814/735/971 2815/738/969 +f 2815/738/969 2819/737/968 2811/741/971 +f 2821/825/972 2819/824/972 2820/827/973 +f 2820/827/973 2822/826/973 2821/825/972 +f 2812/829/974 2811/828/974 2819/824/972 +f 2819/824/972 2821/825/972 2812/829/974 +f 2816/731/975 2821/737/976 2822/733/977 +f 2822/733/977 2817/830/977 2816/731/975 +f 2813/831/978 2812/736/978 2821/737/976 +f 2821/737/976 2816/731/975 2813/831/978 +f 2823/832/37 2824/833/37 2825/834/37 +f 2825/834/37 2826/835/37 2823/832/37 +f 2827/836/993 2828/837/993 2829/838/994 +f 2829/838/994 2830/839/980 2827/836/993 +f 2826/840/981 2825/841/981 2828/837/993 +f 2828/837/993 2827/836/993 2826/840/981 +f 2831/737/982 2827/731/982 2830/734/983 +f 2830/734/983 2832/733/983 2831/737/982 +f 2823/741/984 2826/735/985 2827/731/982 +f 2827/731/982 2831/737/982 2823/741/984 +f 2833/837/986 2831/836/986 2832/839/987 +f 2832/839/987 2834/838/987 2833/837/986 +f 2824/841/988 2823/840/988 2831/836/986 +f 2831/836/986 2833/837/986 2824/841/988 +f 2828/842/989 2833/732/989 2834/843/990 +f 2834/843/990 2829/734/990 2828/842/989 +f 2825/831/991 2824/736/991 2833/732/989 +f 2833/732/989 2828/842/989 2825/831/991 +f 2835/721/36 2836/722/36 2837/723/36 +f 2837/723/36 2838/724/36 2835/721/36 +f 2839/725/888 2840/726/888 2841/727/889 +f 2841/727/889 2842/728/889 2839/725/888 +f 2838/729/890 2837/730/890 2840/726/888 +f 2840/726/888 2839/725/888 2838/729/890 +f 2843/731/891 2839/732/892 2842/733/893 +f 2842/733/893 2844/734/893 2843/731/891 +f 2835/735/895 2838/736/895 2839/732/892 +f 2839/732/892 2843/731/891 2835/735/895 +f 2845/726/896 2843/725/896 2844/728/897 +f 2844/728/897 2846/727/897 2845/726/896 +f 2836/730/898 2835/729/898 2843/725/896 +f 2843/725/896 2845/726/896 2836/730/898 +f 2840/737/899 2845/738/899 2846/739/900 +f 2846/739/900 2841/740/900 2840/737/899 +f 2837/741/901 2836/742/901 2845/738/899 +f 2845/738/899 2840/737/899 2837/741/901 +f 2847/743/36 2848/744/36 2849/745/36 +f 2849/745/36 2850/746/36 2847/743/36 +f 2851/747/995 2852/748/995 2853/749/903 +f 2853/749/903 2854/750/903 2851/747/995 +f 2850/751/904 2849/752/904 2852/748/995 +f 2852/748/995 2851/747/995 2850/751/904 +f 2855/753/905 2851/754/906 2854/755/907 +f 2854/755/907 2856/756/908 2855/753/905 +f 2847/757/909 2850/758/909 2851/754/906 +f 2851/754/906 2855/753/905 2847/757/909 +f 2857/748/910 2855/747/911 2856/750/912 +f 2856/750/912 2858/749/912 2857/748/910 +f 2848/752/913 2847/751/913 2855/747/911 +f 2855/747/911 2857/748/910 2848/752/913 +f 2852/754/914 2857/759/915 2858/760/916 +f 2858/760/916 2853/755/916 2852/754/914 +f 2849/758/917 2848/761/917 2857/759/915 +f 2857/759/915 2852/754/914 2849/758/917 +f 2859/762/918 2860/763/919 2861/764/920 +f 2861/764/920 2862/765/920 2859/762/918 +f 2863/766/921 2864/767/921 2860/763/919 +f 2860/763/919 2859/762/918 2863/766/921 +f 2865/768/922 2859/769/923 2862/770/924 +f 2862/770/924 2866/771/924 2865/768/922 +f 2867/772/925 2863/773/925 2859/769/923 +f 2859/769/923 2865/768/922 2867/772/925 +f 2868/763/926 2865/762/927 2866/765/928 +f 2866/765/928 2869/764/928 2868/763/926 +f 2870/767/929 2867/766/929 2865/762/927 +f 2865/762/927 2868/763/926 2870/767/929 +f 2860/774/930 2868/768/931 2869/771/932 +f 2869/771/932 2861/775/932 2860/774/930 +f 2864/776/933 2870/777/933 2868/768/931 +f 2868/768/931 2860/774/930 2864/776/933 +f 2871/778/934 2872/779/935 2873/780/936 +f 2873/780/936 2874/781/936 2871/778/934 +f 2875/782/937 2876/783/937 2872/779/935 +f 2872/779/935 2871/778/934 2875/782/937 +f 2877/784/938 2871/785/939 2874/786/940 +f 2874/786/940 2878/787/940 2877/784/938 +f 2879/788/941 2875/789/941 2871/785/939 +f 2871/785/939 2877/784/938 2879/788/941 +f 2880/790/942 2877/791/943 2878/792/944 +f 2878/792/944 2881/793/944 2880/790/942 +f 2882/794/945 2879/795/945 2877/791/943 +f 2877/791/943 2880/790/942 2882/794/945 +f 2872/785/946 2880/796/947 2881/787/948 +f 2881/787/948 2873/797/948 2872/785/946 +f 2876/789/949 2882/798/949 2880/796/947 +f 2880/796/947 2872/785/946 2876/789/949 +f 2883/799/36 2884/800/36 2885/801/36 +f 2885/801/36 2886/802/36 2883/799/36 +f 2887/803/996 2888/804/997 2889/805/952 +f 2889/805/952 2890/806/952 2887/803/996 +f 2886/807/953 2885/808/953 2888/804/997 +f 2888/804/997 2887/803/996 2886/807/953 +f 2891/809/954 2887/810/954 2890/811/955 +f 2890/811/955 2892/812/955 2891/809/954 +f 2883/813/956 2886/814/956 2887/810/954 +f 2887/810/954 2891/809/954 2883/813/956 +f 2893/804/957 2891/803/958 2892/806/959 +f 2892/806/959 2894/805/959 2893/804/957 +f 2884/808/960 2883/807/960 2891/803/958 +f 2891/803/958 2893/804/957 2884/808/960 +f 2888/815/961 2893/809/961 2894/816/962 +f 2894/816/962 2889/817/962 2888/815/961 +f 2885/818/963 2884/819/963 2893/809/961 +f 2893/809/961 2888/815/961 2885/818/963 +f 2895/820/36 2896/821/36 2897/822/36 +f 2897/822/36 2898/823/36 2895/820/36 +f 2899/824/998 2900/825/999 2901/826/966 +f 2901/826/966 2902/827/966 2899/824/998 +f 2898/828/967 2897/829/967 2900/825/999 +f 2900/825/999 2899/824/998 2898/828/967 +f 2903/737/968 2899/738/969 2902/734/970 +f 2902/734/970 2904/740/970 2903/737/968 +f 2895/741/971 2898/735/971 2899/738/969 +f 2899/738/969 2903/737/968 2895/741/971 +f 2905/825/972 2903/824/972 2904/827/973 +f 2904/827/973 2906/826/973 2905/825/972 +f 2896/829/974 2895/828/974 2903/824/972 +f 2903/824/972 2905/825/972 2896/829/974 +f 2900/731/975 2905/737/976 2906/733/977 +f 2906/733/977 2901/830/977 2900/731/975 +f 2897/831/978 2896/736/978 2905/737/976 +f 2905/737/976 2900/731/975 2897/831/978 +f 2907/832/226 2908/833/226 2909/834/226 +f 2909/834/226 2910/835/226 2907/832/226 +f 2911/836/993 2912/837/993 2913/838/980 +f 2913/838/980 2914/839/980 2911/836/993 +f 2910/840/981 2909/841/981 2912/837/993 +f 2912/837/993 2911/836/993 2910/840/981 +f 2915/737/982 2911/731/982 2914/734/983 +f 2914/734/983 2916/733/983 2915/737/982 +f 2907/741/984 2910/735/985 2911/731/982 +f 2911/731/982 2915/737/982 2907/741/984 +f 2917/837/986 2915/836/986 2916/839/987 +f 2916/839/987 2918/838/987 2917/837/986 +f 2908/841/988 2907/840/988 2915/836/986 +f 2915/836/986 2917/837/986 2908/841/988 +f 2912/842/989 2917/732/989 2918/843/990 +f 2918/843/990 2913/734/990 2912/842/989 +f 2909/831/991 2908/736/991 2917/732/989 +f 2917/732/989 2912/842/989 2909/831/991 +f 2919/721/36 2920/722/36 2921/723/36 +f 2921/723/36 2922/724/36 2919/721/36 +f 2923/725/888 2924/726/888 2925/727/889 +f 2925/727/889 2926/728/889 2923/725/888 +f 2922/729/890 2921/730/890 2924/726/888 +f 2924/726/888 2923/725/888 2922/729/890 +f 2927/731/891 2923/732/892 2926/733/893 +f 2926/733/893 2928/734/893 2927/731/891 +f 2919/735/895 2922/736/895 2923/732/892 +f 2923/732/892 2927/731/891 2919/735/895 +f 2929/726/896 2927/725/896 2928/728/897 +f 2928/728/897 2930/727/897 2929/726/896 +f 2920/730/898 2919/729/898 2927/725/896 +f 2927/725/896 2929/726/896 2920/730/898 +f 2924/737/899 2929/738/899 2930/739/900 +f 2930/739/900 2925/740/900 2924/737/899 +f 2921/741/901 2920/742/901 2929/738/899 +f 2929/738/899 2924/737/899 2921/741/901 +f 2931/743/37 2932/744/37 2933/745/37 +f 2933/745/37 2934/746/37 2931/743/37 +f 2935/747/995 2936/748/995 2937/749/903 +f 2937/749/903 2938/750/903 2935/747/995 +f 2934/751/904 2933/752/904 2936/748/995 +f 2936/748/995 2935/747/995 2934/751/904 +f 2939/753/905 2935/754/906 2938/755/907 +f 2938/755/907 2940/756/908 2939/753/905 +f 2931/757/909 2934/758/909 2935/754/906 +f 2935/754/906 2939/753/905 2931/757/909 +f 2941/748/910 2939/747/911 2940/750/912 +f 2940/750/912 2942/749/912 2941/748/910 +f 2932/752/913 2931/751/913 2939/747/911 +f 2939/747/911 2941/748/910 2932/752/913 +f 2936/754/914 2941/759/915 2942/760/916 +f 2942/760/916 2937/755/916 2936/754/914 +f 2933/758/917 2932/761/917 2941/759/915 +f 2941/759/915 2936/754/914 2933/758/917 +f 2943/762/918 2944/763/919 2945/764/920 +f 2945/764/920 2946/765/920 2943/762/918 +f 2947/766/921 2948/767/921 2944/763/919 +f 2944/763/919 2943/762/918 2947/766/921 +f 2949/768/922 2943/769/923 2946/770/924 +f 2946/770/924 2950/771/924 2949/768/922 +f 2951/772/925 2947/773/925 2943/769/923 +f 2943/769/923 2949/768/922 2951/772/925 +f 2952/763/926 2949/762/927 2950/765/928 +f 2950/765/928 2953/764/928 2952/763/926 +f 2954/767/929 2951/766/929 2949/762/927 +f 2949/762/927 2952/763/926 2954/767/929 +f 2944/774/930 2952/768/931 2953/771/932 +f 2953/771/932 2945/775/932 2944/774/930 +f 2948/776/933 2954/777/933 2952/768/931 +f 2952/768/931 2944/774/930 2948/776/933 +f 2955/778/934 2956/779/935 2957/780/936 +f 2957/780/936 2958/781/936 2955/778/934 +f 2959/782/937 2960/783/937 2956/779/935 +f 2956/779/935 2955/778/934 2959/782/937 +f 2961/784/938 2955/785/939 2958/786/940 +f 2958/786/940 2962/787/940 2961/784/938 +f 2963/788/941 2959/789/941 2955/785/939 +f 2955/785/939 2961/784/938 2963/788/941 +f 2964/790/1000 2961/791/943 2962/792/944 +f 2962/792/944 2965/793/944 2964/790/1000 +f 2966/794/945 2963/795/945 2961/791/943 +f 2961/791/943 2964/790/1000 2966/794/945 +f 2956/785/946 2964/796/947 2965/787/948 +f 2965/787/948 2957/797/948 2956/785/946 +f 2960/789/949 2966/798/949 2964/796/947 +f 2964/796/947 2956/785/946 2960/789/949 +f 2967/799/36 2968/800/36 2969/801/36 +f 2969/801/36 2970/802/36 2967/799/36 +f 2971/803/996 2972/804/997 2973/805/952 +f 2973/805/952 2974/806/952 2971/803/996 +f 2970/807/953 2969/808/953 2972/804/997 +f 2972/804/997 2971/803/996 2970/807/953 +f 2975/809/954 2971/810/954 2974/811/955 +f 2974/811/955 2976/812/955 2975/809/954 +f 2967/813/956 2970/814/956 2971/810/954 +f 2971/810/954 2975/809/954 2967/813/956 +f 2977/804/957 2975/803/958 2976/806/959 +f 2976/806/959 2978/805/959 2977/804/957 +f 2968/808/960 2967/807/960 2975/803/958 +f 2975/803/958 2977/804/957 2968/808/960 +f 2972/815/961 2977/809/961 2978/816/962 +f 2978/816/962 2973/817/962 2972/815/961 +f 2969/818/963 2968/819/963 2977/809/961 +f 2977/809/961 2972/815/961 2969/818/963 +f 2979/820/37 2980/821/37 2981/822/37 +f 2981/822/37 2982/823/37 2979/820/37 +f 2983/824/998 2984/825/999 2985/826/966 +f 2985/826/966 2986/827/966 2983/824/998 +f 2982/828/967 2981/829/967 2984/825/999 +f 2984/825/999 2983/824/998 2982/828/967 +f 2987/737/968 2983/738/969 2986/734/970 +f 2986/734/970 2988/740/970 2987/737/968 +f 2979/741/971 2982/735/971 2983/738/969 +f 2983/738/969 2987/737/968 2979/741/971 +f 2989/825/972 2987/824/972 2988/827/973 +f 2988/827/973 2990/826/973 2989/825/972 +f 2980/829/974 2979/828/974 2987/824/972 +f 2987/824/972 2989/825/972 2980/829/974 +f 2984/731/975 2989/737/976 2990/733/977 +f 2990/733/977 2985/830/977 2984/731/975 +f 2981/831/978 2980/736/978 2989/737/976 +f 2989/737/976 2984/731/975 2981/831/978 +f 2991/832/36 2992/833/36 2993/834/36 +f 2993/834/36 2994/835/36 2991/832/36 +f 2995/836/993 2996/837/993 2997/838/980 +f 2997/838/980 2998/839/980 2995/836/993 +f 2994/840/981 2993/841/981 2996/837/993 +f 2996/837/993 2995/836/993 2994/840/981 +f 2999/737/982 2995/731/982 2998/734/983 +f 2998/734/983 3000/733/983 2999/737/982 +f 2991/741/984 2994/735/985 2995/731/982 +f 2995/731/982 2999/737/982 2991/741/984 +f 3001/837/986 2999/836/986 3000/839/987 +f 3000/839/987 3002/838/987 3001/837/986 +f 2992/841/988 2991/840/988 2999/836/986 +f 2999/836/986 3001/837/986 2992/841/988 +f 2996/842/989 3001/732/989 3002/843/990 +f 3002/843/990 2997/734/990 2996/842/989 +f 2993/831/991 2992/736/991 3001/732/989 +f 3001/732/989 2996/842/989 2993/831/991 +f 3003/721/36 3004/722/36 3005/723/36 +f 3005/723/36 3006/724/36 3003/721/36 +f 3007/725/888 3008/726/888 3009/727/889 +f 3009/727/889 3010/728/889 3007/725/888 +f 3006/729/890 3005/730/890 3008/726/888 +f 3008/726/888 3007/725/888 3006/729/890 +f 3011/731/891 3007/732/892 3010/733/893 +f 3010/733/893 3012/734/893 3011/731/891 +f 3003/735/895 3006/736/895 3007/732/892 +f 3007/732/892 3011/731/891 3003/735/895 +f 3013/726/896 3011/725/896 3012/728/897 +f 3012/728/897 3014/727/897 3013/726/896 +f 3004/730/898 3003/729/898 3011/725/896 +f 3011/725/896 3013/726/896 3004/730/898 +f 3008/737/899 3013/738/899 3014/739/900 +f 3014/739/900 3009/740/900 3008/737/899 +f 3005/741/901 3004/742/901 3013/738/899 +f 3013/738/899 3008/737/899 3005/741/901 +f 3015/743/36 3016/744/36 3017/745/36 +f 3017/745/36 3018/746/36 3015/743/36 +f 3019/747/902 3020/748/902 3021/749/903 +f 3021/749/903 3022/750/903 3019/747/902 +f 3018/751/904 3017/752/904 3020/748/902 +f 3020/748/902 3019/747/902 3018/751/904 +f 3023/753/905 3019/754/906 3022/755/907 +f 3022/755/907 3024/756/908 3023/753/905 +f 3015/757/909 3018/758/909 3019/754/906 +f 3019/754/906 3023/753/905 3015/757/909 +f 3025/748/910 3023/747/911 3024/750/912 +f 3024/750/912 3026/749/912 3025/748/910 +f 3016/752/913 3015/751/913 3023/747/911 +f 3023/747/911 3025/748/910 3016/752/913 +f 3020/754/914 3025/759/915 3026/760/916 +f 3026/760/916 3021/755/916 3020/754/914 +f 3017/758/917 3016/761/917 3025/759/915 +f 3025/759/915 3020/754/914 3017/758/917 +f 3027/762/918 3028/763/919 3029/764/920 +f 3029/764/920 3030/765/920 3027/762/918 +f 3031/766/921 3032/767/921 3028/763/919 +f 3028/763/919 3027/762/918 3031/766/921 +f 3033/768/922 3027/769/923 3030/770/924 +f 3030/770/924 3034/771/924 3033/768/922 +f 3035/772/925 3031/773/925 3027/769/923 +f 3027/769/923 3033/768/922 3035/772/925 +f 3036/763/926 3033/762/927 3034/765/928 +f 3034/765/928 3037/764/928 3036/763/926 +f 3038/767/929 3035/766/929 3033/762/927 +f 3033/762/927 3036/763/926 3038/767/929 +f 3028/774/930 3036/768/931 3037/771/932 +f 3037/771/932 3029/775/932 3028/774/930 +f 3032/776/933 3038/777/933 3036/768/931 +f 3036/768/931 3028/774/930 3032/776/933 +f 3039/778/934 3040/779/935 3041/780/936 +f 3041/780/936 3042/781/936 3039/778/934 +f 3043/782/937 3044/783/937 3040/779/935 +f 3040/779/935 3039/778/934 3043/782/937 +f 3045/784/938 3039/785/939 3042/786/940 +f 3042/786/940 3046/787/940 3045/784/938 +f 3047/788/941 3043/789/941 3039/785/939 +f 3039/785/939 3045/784/938 3047/788/941 +f 3048/790/942 3045/791/943 3046/792/944 +f 3046/792/944 3049/793/944 3048/790/942 +f 3050/794/945 3047/795/945 3045/791/943 +f 3045/791/943 3048/790/942 3050/794/945 +f 3040/785/946 3048/796/947 3049/787/948 +f 3049/787/948 3041/797/948 3040/785/946 +f 3044/789/949 3050/798/949 3048/796/947 +f 3048/796/947 3040/785/946 3044/789/949 +f 3051/799/36 3052/800/36 3053/801/36 +f 3053/801/36 3054/802/36 3051/799/36 +f 3055/803/950 3056/804/951 3057/805/952 +f 3057/805/952 3058/806/952 3055/803/950 +f 3054/807/953 3053/808/953 3056/804/951 +f 3056/804/951 3055/803/950 3054/807/953 +f 3059/809/954 3055/810/954 3058/811/955 +f 3058/811/955 3060/812/955 3059/809/954 +f 3051/813/956 3054/814/956 3055/810/954 +f 3055/810/954 3059/809/954 3051/813/956 +f 3061/804/957 3059/803/958 3060/806/959 +f 3060/806/959 3062/805/959 3061/804/957 +f 3052/808/960 3051/807/960 3059/803/958 +f 3059/803/958 3061/804/957 3052/808/960 +f 3056/815/961 3061/809/961 3062/816/962 +f 3062/816/962 3057/817/962 3056/815/961 +f 3053/818/963 3052/819/963 3061/809/961 +f 3061/809/961 3056/815/961 3053/818/963 +f 3063/820/226 3064/821/226 3065/822/226 +f 3065/822/226 3066/823/226 3063/820/226 +f 3067/824/998 3068/825/999 3069/826/966 +f 3069/826/966 3070/827/966 3067/824/998 +f 3066/828/967 3065/829/967 3068/825/999 +f 3068/825/999 3067/824/998 3066/828/967 +f 3071/737/968 3067/738/969 3070/734/970 +f 3070/734/970 3072/740/970 3071/737/968 +f 3063/741/971 3066/735/971 3067/738/969 +f 3067/738/969 3071/737/968 3063/741/971 +f 3073/825/972 3071/824/972 3072/827/973 +f 3072/827/973 3074/826/973 3073/825/972 +f 3064/829/974 3063/828/974 3071/824/972 +f 3071/824/972 3073/825/972 3064/829/974 +f 3068/731/975 3073/737/976 3074/733/977 +f 3074/733/977 3069/830/977 3068/731/975 +f 3065/831/978 3064/736/978 3073/737/976 +f 3073/737/976 3068/731/975 3065/831/978 +f 3075/832/36 3076/833/36 3077/834/36 +f 3077/834/36 3078/835/36 3075/832/36 +f 3079/836/979 3080/837/979 3081/838/980 +f 3081/838/980 3082/839/980 3079/836/979 +f 3078/840/981 3077/841/981 3080/837/979 +f 3080/837/979 3079/836/979 3078/840/981 +f 3083/737/982 3079/731/982 3082/734/983 +f 3082/734/983 3084/733/983 3083/737/982 +f 3075/741/984 3078/735/985 3079/731/982 +f 3079/731/982 3083/737/982 3075/741/984 +f 3085/837/1001 3083/836/1001 3084/839/987 +f 3084/839/987 3086/838/987 3085/837/1001 +f 3076/841/988 3075/840/988 3083/836/1001 +f 3083/836/1001 3085/837/1001 3076/841/988 +f 3080/842/989 3085/732/989 3086/843/990 +f 3086/843/990 3081/734/990 3080/842/989 +f 3077/831/991 3076/736/991 3085/732/989 +f 3085/732/989 3080/842/989 3077/831/991 +f 3087/721/37 3088/722/37 3089/723/37 +f 3089/723/37 3090/724/37 3087/721/37 +f 3091/725/888 3092/726/888 3093/727/889 +f 3093/727/889 3094/728/889 3091/725/888 +f 3090/729/890 3089/730/890 3092/726/888 +f 3092/726/888 3091/725/888 3090/729/890 +f 3095/731/891 3091/732/892 3094/733/893 +f 3094/733/893 3096/734/893 3095/731/891 +f 3087/735/895 3090/736/895 3091/732/892 +f 3091/732/892 3095/731/891 3087/735/895 +f 3097/726/896 3095/725/896 3096/728/897 +f 3096/728/897 3098/727/897 3097/726/896 +f 3088/730/898 3087/729/898 3095/725/896 +f 3095/725/896 3097/726/896 3088/730/898 +f 3092/737/899 3097/738/899 3098/739/900 +f 3098/739/900 3093/740/900 3092/737/899 +f 3089/741/901 3088/742/901 3097/738/899 +f 3097/738/899 3092/737/899 3089/741/901 +f 3099/743/36 3100/744/36 3101/745/36 +f 3101/745/36 3102/746/36 3099/743/36 +f 3103/747/902 3104/748/995 3105/749/903 +f 3105/749/903 3106/750/903 3103/747/902 +f 3102/751/904 3101/752/904 3104/748/995 +f 3104/748/995 3103/747/902 3102/751/904 +f 3107/753/905 3103/754/906 3106/755/907 +f 3106/755/907 3108/756/908 3107/753/905 +f 3099/757/909 3102/758/909 3103/754/906 +f 3103/754/906 3107/753/905 3099/757/909 +f 3109/748/910 3107/747/911 3108/750/912 +f 3108/750/912 3110/749/912 3109/748/910 +f 3100/752/913 3099/751/913 3107/747/911 +f 3107/747/911 3109/748/910 3100/752/913 +f 3104/754/914 3109/759/915 3110/760/916 +f 3110/760/916 3105/755/916 3104/754/914 +f 3101/758/917 3100/761/917 3109/759/915 +f 3109/759/915 3104/754/914 3101/758/917 +f 3111/762/918 3112/763/919 3113/764/920 +f 3113/764/920 3114/765/920 3111/762/918 +f 3115/766/921 3116/767/921 3112/763/919 +f 3112/763/919 3111/762/918 3115/766/921 +f 3117/768/922 3111/769/923 3114/770/924 +f 3114/770/924 3118/771/924 3117/768/922 +f 3119/772/925 3115/773/925 3111/769/923 +f 3111/769/923 3117/768/922 3119/772/925 +f 3120/763/926 3117/762/927 3118/765/928 +f 3118/765/928 3121/764/928 3120/763/926 +f 3122/767/929 3119/766/929 3117/762/927 +f 3117/762/927 3120/763/926 3122/767/929 +f 3112/774/930 3120/768/931 3121/771/932 +f 3121/771/932 3113/775/932 3112/774/930 +f 3116/776/933 3122/777/933 3120/768/931 +f 3120/768/931 3112/774/930 3116/776/933 +f 3123/778/934 3124/779/935 3125/780/936 +f 3125/780/936 3126/781/936 3123/778/934 +f 3127/782/937 3128/783/937 3124/779/935 +f 3124/779/935 3123/778/934 3127/782/937 +f 3129/784/938 3123/785/939 3126/786/940 +f 3126/786/940 3130/787/940 3129/784/938 +f 3131/788/941 3127/789/941 3123/785/939 +f 3123/785/939 3129/784/938 3131/788/941 +f 3132/790/1000 3129/791/943 3130/792/944 +f 3130/792/944 3133/793/944 3132/790/1000 +f 3134/794/945 3131/795/945 3129/791/943 +f 3129/791/943 3132/790/1000 3134/794/945 +f 3124/785/946 3132/796/947 3133/787/948 +f 3133/787/948 3125/797/948 3124/785/946 +f 3128/789/949 3134/798/949 3132/796/947 +f 3132/796/947 3124/785/946 3128/789/949 +f 3135/799/37 3136/800/37 3137/801/37 +f 3137/801/37 3138/802/37 3135/799/37 +f 3139/803/950 3140/804/951 3141/805/952 +f 3141/805/952 3142/806/952 3139/803/950 +f 3138/807/953 3137/808/953 3140/804/951 +f 3140/804/951 3139/803/950 3138/807/953 +f 3143/809/954 3139/810/954 3142/811/955 +f 3142/811/955 3144/812/955 3143/809/954 +f 3135/813/956 3138/814/956 3139/810/954 +f 3139/810/954 3143/809/954 3135/813/956 +f 3145/804/957 3143/803/958 3144/806/959 +f 3144/806/959 3146/805/959 3145/804/957 +f 3136/808/960 3135/807/960 3143/803/958 +f 3143/803/958 3145/804/957 3136/808/960 +f 3140/815/961 3145/809/961 3146/816/962 +f 3146/816/962 3141/817/962 3140/815/961 +f 3137/818/963 3136/819/963 3145/809/961 +f 3145/809/961 3140/815/961 3137/818/963 +f 3147/820/36 3148/821/36 3149/822/36 +f 3149/822/36 3150/823/36 3147/820/36 +f 3151/824/998 3152/825/999 3153/826/966 +f 3153/826/966 3154/827/966 3151/824/998 +f 3150/828/967 3149/829/967 3152/825/999 +f 3152/825/999 3151/824/998 3150/828/967 +f 3155/737/968 3151/738/969 3154/734/970 +f 3154/734/970 3156/740/970 3155/737/968 +f 3147/741/971 3150/735/971 3151/738/969 +f 3151/738/969 3155/737/968 3147/741/971 +f 3157/825/972 3155/824/972 3156/827/973 +f 3156/827/973 3158/826/973 3157/825/972 +f 3148/829/974 3147/828/974 3155/824/972 +f 3155/824/972 3157/825/972 3148/829/974 +f 3152/731/975 3157/737/976 3158/733/977 +f 3158/733/977 3153/830/977 3152/731/975 +f 3149/831/978 3148/736/978 3157/737/976 +f 3157/737/976 3152/731/975 3149/831/978 +f 3159/832/36 3160/833/36 3161/834/36 +f 3161/834/36 3162/835/36 3159/832/36 +f 3163/836/979 3164/837/979 3165/838/994 +f 3165/838/994 3166/839/994 3163/836/979 +f 3162/840/981 3161/841/981 3164/837/979 +f 3164/837/979 3163/836/979 3162/840/981 +f 3167/737/982 3163/731/982 3166/734/983 +f 3166/734/983 3168/733/983 3167/737/982 +f 3159/741/984 3162/735/985 3163/731/982 +f 3163/731/982 3167/737/982 3159/741/984 +f 3169/837/1001 3167/836/1001 3168/839/987 +f 3168/839/987 3170/838/987 3169/837/1001 +f 3160/841/988 3159/840/988 3167/836/1001 +f 3167/836/1001 3169/837/1001 3160/841/988 +f 3164/842/989 3169/732/989 3170/843/990 +f 3170/843/990 3165/734/990 3164/842/989 +f 3161/831/991 3160/736/991 3169/732/989 +f 3169/732/989 3164/842/989 3161/831/991 +f 3171/721/36 3172/722/36 3173/723/36 +f 3173/723/36 3174/724/36 3171/721/36 +f 3175/725/888 3176/726/888 3177/727/889 +f 3177/727/889 3178/728/889 3175/725/888 +f 3174/729/890 3173/730/890 3176/726/888 +f 3176/726/888 3175/725/888 3174/729/890 +f 3179/731/891 3175/732/892 3178/733/893 +f 3178/733/893 3180/734/893 3179/731/891 +f 3171/735/895 3174/736/895 3175/732/892 +f 3175/732/892 3179/731/891 3171/735/895 +f 3181/726/896 3179/725/896 3180/728/897 +f 3180/728/897 3182/727/897 3181/726/896 +f 3172/730/898 3171/729/898 3179/725/896 +f 3179/725/896 3181/726/896 3172/730/898 +f 3176/737/899 3181/738/899 3182/739/900 +f 3182/739/900 3177/740/900 3176/737/899 +f 3173/741/901 3172/742/901 3181/738/899 +f 3181/738/899 3176/737/899 3173/741/901 +f 3183/743/36 3184/744/36 3185/745/36 +f 3185/745/36 3186/746/36 3183/743/36 +f 3187/747/995 3188/748/995 3189/749/903 +f 3189/749/903 3190/750/903 3187/747/995 +f 3186/751/904 3185/752/904 3188/748/995 +f 3188/748/995 3187/747/995 3186/751/904 +f 3191/753/905 3187/754/906 3190/755/907 +f 3190/755/907 3192/756/908 3191/753/905 +f 3183/757/909 3186/758/909 3187/754/906 +f 3187/754/906 3191/753/905 3183/757/909 +f 3193/748/910 3191/747/911 3192/750/912 +f 3192/750/912 3194/749/912 3193/748/910 +f 3184/752/913 3183/751/913 3191/747/911 +f 3191/747/911 3193/748/910 3184/752/913 +f 3188/754/914 3193/759/915 3194/760/916 +f 3194/760/916 3189/755/916 3188/754/914 +f 3185/758/917 3184/761/917 3193/759/915 +f 3193/759/915 3188/754/914 3185/758/917 +f 3195/762/918 3196/763/919 3197/764/920 +f 3197/764/920 3198/765/920 3195/762/918 +f 3199/766/921 3200/767/921 3196/763/919 +f 3196/763/919 3195/762/918 3199/766/921 +f 3201/768/922 3195/769/923 3198/770/924 +f 3198/770/924 3202/771/924 3201/768/922 +f 3203/772/925 3199/773/925 3195/769/923 +f 3195/769/923 3201/768/922 3203/772/925 +f 3204/763/926 3201/762/927 3202/765/928 +f 3202/765/928 3205/764/928 3204/763/926 +f 3206/767/929 3203/766/929 3201/762/927 +f 3201/762/927 3204/763/926 3206/767/929 +f 3196/774/930 3204/768/931 3205/771/932 +f 3205/771/932 3197/775/932 3196/774/930 +f 3200/776/933 3206/777/933 3204/768/931 +f 3204/768/931 3196/774/930 3200/776/933 +f 3207/778/934 3208/779/935 3209/780/936 +f 3209/780/936 3210/781/936 3207/778/934 +f 3211/782/937 3212/783/937 3208/779/935 +f 3208/779/935 3207/778/934 3211/782/937 +f 3213/784/938 3207/785/939 3210/786/940 +f 3210/786/940 3214/787/940 3213/784/938 +f 3215/788/941 3211/789/941 3207/785/939 +f 3207/785/939 3213/784/938 3215/788/941 +f 3216/790/1000 3213/791/943 3214/792/944 +f 3214/792/944 3217/793/944 3216/790/1000 +f 3218/794/945 3215/795/945 3213/791/943 +f 3213/791/943 3216/790/1000 3218/794/945 +f 3208/785/946 3216/796/947 3217/787/948 +f 3217/787/948 3209/797/948 3208/785/946 +f 3212/789/949 3218/798/949 3216/796/947 +f 3216/796/947 3208/785/946 3212/789/949 +f 3219/799/226 3220/800/226 3221/801/226 +f 3221/801/226 3222/802/226 3219/799/226 +f 3223/803/996 3224/804/997 3225/805/952 +f 3225/805/952 3226/806/952 3223/803/996 +f 3222/807/953 3221/808/953 3224/804/997 +f 3224/804/997 3223/803/996 3222/807/953 +f 3227/809/954 3223/810/954 3226/811/955 +f 3226/811/955 3228/812/955 3227/809/954 +f 3219/813/956 3222/814/956 3223/810/954 +f 3223/810/954 3227/809/954 3219/813/956 +f 3229/804/957 3227/803/958 3228/806/959 +f 3228/806/959 3230/805/959 3229/804/957 +f 3220/808/960 3219/807/960 3227/803/958 +f 3227/803/958 3229/804/957 3220/808/960 +f 3224/815/961 3229/809/961 3230/816/962 +f 3230/816/962 3225/817/962 3224/815/961 +f 3221/818/963 3220/819/963 3229/809/961 +f 3229/809/961 3224/815/961 3221/818/963 +f 3231/820/36 3232/821/36 3233/822/36 +f 3233/822/36 3234/823/36 3231/820/36 +f 3235/824/998 3236/825/999 3237/826/966 +f 3237/826/966 3238/827/966 3235/824/998 +f 3234/828/967 3233/829/967 3236/825/999 +f 3236/825/999 3235/824/998 3234/828/967 +f 3239/737/968 3235/738/969 3238/734/970 +f 3238/734/970 3240/740/970 3239/737/968 +f 3231/741/971 3234/735/971 3235/738/969 +f 3235/738/969 3239/737/968 3231/741/971 +f 3241/825/972 3239/824/972 3240/827/973 +f 3240/827/973 3242/826/973 3241/825/972 +f 3232/829/974 3231/828/974 3239/824/972 +f 3239/824/972 3241/825/972 3232/829/974 +f 3236/731/975 3241/737/976 3242/733/977 +f 3242/733/977 3237/830/977 3236/731/975 +f 3233/831/978 3232/736/978 3241/737/976 +f 3241/737/976 3236/731/975 3233/831/978 +f 3243/832/37 3244/833/37 3245/834/37 +f 3245/834/37 3246/835/37 3243/832/37 +f 3247/836/979 3248/837/979 3249/838/994 +f 3249/838/994 3250/839/994 3247/836/979 +f 3246/840/981 3245/841/981 3248/837/979 +f 3248/837/979 3247/836/979 3246/840/981 +f 3251/737/982 3247/731/982 3250/734/983 +f 3250/734/983 3252/733/983 3251/737/982 +f 3243/741/985 3246/735/985 3247/731/982 +f 3247/731/982 3251/737/982 3243/741/985 +f 3253/837/1001 3251/836/1001 3252/839/987 +f 3252/839/987 3254/838/987 3253/837/1001 +f 3244/841/988 3243/840/988 3251/836/1001 +f 3251/836/1001 3253/837/1001 3244/841/988 +f 3248/842/989 3253/732/989 3254/843/990 +f 3254/843/990 3249/734/990 3248/842/989 +f 3245/831/991 3244/736/991 3253/732/989 +f 3253/732/989 3248/842/989 3245/831/991 +f 3255/721/36 3256/722/36 3257/723/36 +f 3257/723/36 3258/724/36 3255/721/36 +f 3259/725/888 3260/726/888 3261/727/889 +f 3261/727/889 3262/728/889 3259/725/888 +f 3258/729/890 3257/730/890 3260/726/888 +f 3260/726/888 3259/725/888 3258/729/890 +f 3263/731/891 3259/732/892 3262/733/893 +f 3262/733/893 3264/734/893 3263/731/891 +f 3255/735/895 3258/736/895 3259/732/892 +f 3259/732/892 3263/731/891 3255/735/895 +f 3265/726/896 3263/725/896 3264/728/897 +f 3264/728/897 3266/727/897 3265/726/896 +f 3256/730/898 3255/729/898 3263/725/896 +f 3263/725/896 3265/726/896 3256/730/898 +f 3260/737/899 3265/738/899 3266/739/900 +f 3266/739/900 3261/740/900 3260/737/899 +f 3257/741/901 3256/742/901 3265/738/899 +f 3265/738/899 3260/737/899 3257/741/901 +f 3267/743/36 3268/744/36 3269/745/36 +f 3269/745/36 3270/746/36 3267/743/36 +f 3271/747/995 3272/748/995 3273/749/903 +f 3273/749/903 3274/750/903 3271/747/995 +f 3270/751/904 3269/752/904 3272/748/995 +f 3272/748/995 3271/747/995 3270/751/904 +f 3275/753/905 3271/754/906 3274/755/907 +f 3274/755/907 3276/756/908 3275/753/905 +f 3267/757/909 3270/758/909 3271/754/906 +f 3271/754/906 3275/753/905 3267/757/909 +f 3277/748/910 3275/747/911 3276/750/912 +f 3276/750/912 3278/749/912 3277/748/910 +f 3268/752/913 3267/751/913 3275/747/911 +f 3275/747/911 3277/748/910 3268/752/913 +f 3272/754/914 3277/759/915 3278/760/916 +f 3278/760/916 3273/755/916 3272/754/914 +f 3269/758/917 3268/761/917 3277/759/915 +f 3277/759/915 3272/754/914 3269/758/917 +f 3279/762/918 3280/763/919 3281/764/920 +f 3281/764/920 3282/765/920 3279/762/918 +f 3283/766/921 3284/767/921 3280/763/919 +f 3280/763/919 3279/762/918 3283/766/921 +f 3285/768/922 3279/769/923 3282/770/924 +f 3282/770/924 3286/771/924 3285/768/922 +f 3287/772/925 3283/773/925 3279/769/923 +f 3279/769/923 3285/768/922 3287/772/925 +f 3288/763/926 3285/762/927 3286/765/928 +f 3286/765/928 3289/764/928 3288/763/926 +f 3290/767/929 3287/766/929 3285/762/927 +f 3285/762/927 3288/763/926 3290/767/929 +f 3280/774/930 3288/768/931 3289/771/932 +f 3289/771/932 3281/775/932 3280/774/930 +f 3284/776/933 3290/777/933 3288/768/931 +f 3288/768/931 3280/774/930 3284/776/933 +f 3291/778/934 3292/779/935 3293/780/936 +f 3293/780/936 3294/781/936 3291/778/934 +f 3295/782/937 3296/783/937 3292/779/935 +f 3292/779/935 3291/778/934 3295/782/937 +f 3297/784/938 3291/785/939 3294/786/940 +f 3294/786/940 3298/787/940 3297/784/938 +f 3299/788/941 3295/789/941 3291/785/939 +f 3291/785/939 3297/784/938 3299/788/941 +f 3300/790/1000 3297/791/943 3298/792/944 +f 3298/792/944 3301/793/944 3300/790/1000 +f 3302/794/945 3299/795/945 3297/791/943 +f 3297/791/943 3300/790/1000 3302/794/945 +f 3292/785/946 3300/796/947 3301/787/948 +f 3301/787/948 3293/797/948 3292/785/946 +f 3296/789/949 3302/798/949 3300/796/947 +f 3300/796/947 3292/785/946 3296/789/949 +f 3303/799/36 3304/800/36 3305/801/36 +f 3305/801/36 3306/802/36 3303/799/36 +f 3307/803/996 3308/804/997 3309/805/952 +f 3309/805/952 3310/806/952 3307/803/996 +f 3306/807/953 3305/808/953 3308/804/997 +f 3308/804/997 3307/803/996 3306/807/953 +f 3311/809/954 3307/810/954 3310/811/955 +f 3310/811/955 3312/812/955 3311/809/954 +f 3303/813/956 3306/814/956 3307/810/954 +f 3307/810/954 3311/809/954 3303/813/956 +f 3313/804/957 3311/803/958 3312/806/959 +f 3312/806/959 3314/805/959 3313/804/957 +f 3304/808/960 3303/807/960 3311/803/958 +f 3311/803/958 3313/804/957 3304/808/960 +f 3308/815/961 3313/809/961 3314/816/962 +f 3314/816/962 3309/817/962 3308/815/961 +f 3305/818/963 3304/819/963 3313/809/961 +f 3313/809/961 3308/815/961 3305/818/963 +f 3315/820/36 3316/821/36 3317/822/36 +f 3317/822/36 3318/823/36 3315/820/36 +f 3319/824/998 3320/825/999 3321/826/966 +f 3321/826/966 3322/827/966 3319/824/998 +f 3318/828/967 3317/829/967 3320/825/999 +f 3320/825/999 3319/824/998 3318/828/967 +f 3323/737/968 3319/738/969 3322/734/970 +f 3322/734/970 3324/740/970 3323/737/968 +f 3315/741/971 3318/735/971 3319/738/969 +f 3319/738/969 3323/737/968 3315/741/971 +f 3325/825/972 3323/824/972 3324/827/973 +f 3324/827/973 3326/826/973 3325/825/972 +f 3316/829/974 3315/828/974 3323/824/972 +f 3323/824/972 3325/825/972 3316/829/974 +f 3320/731/975 3325/737/976 3326/733/977 +f 3326/733/977 3321/830/977 3320/731/975 +f 3317/831/978 3316/736/978 3325/737/976 +f 3325/737/976 3320/731/975 3317/831/978 +f 3327/832/36 3328/833/36 3329/834/36 +f 3329/834/36 3330/835/36 3327/832/36 +f 3331/836/993 3332/837/979 3333/838/994 +f 3333/838/994 3334/839/994 3331/836/993 +f 3330/840/981 3329/841/981 3332/837/979 +f 3332/837/979 3331/836/993 3330/840/981 +f 3335/737/982 3331/731/982 3334/734/983 +f 3334/734/983 3336/733/983 3335/737/982 +f 3327/741/984 3330/735/985 3331/731/982 +f 3331/731/982 3335/737/982 3327/741/984 +f 3337/837/1001 3335/836/1001 3336/839/987 +f 3336/839/987 3338/838/987 3337/837/1001 +f 3328/841/988 3327/840/988 3335/836/1001 +f 3335/836/1001 3337/837/1001 3328/841/988 +f 3332/842/989 3337/732/989 3338/843/990 +f 3338/843/990 3333/734/990 3332/842/989 +f 3329/831/991 3328/736/991 3337/732/989 +f 3337/732/989 3332/842/989 3329/831/991 +f 3339/721/36 3340/722/36 3341/723/36 +f 3341/723/36 3342/724/36 3339/721/36 +f 3343/725/888 3344/726/888 3345/727/889 +f 3345/727/889 3346/728/889 3343/725/888 +f 3342/729/890 3341/730/890 3344/726/888 +f 3344/726/888 3343/725/888 3342/729/890 +f 3347/731/891 3343/732/892 3346/733/893 +f 3346/733/893 3348/734/893 3347/731/891 +f 3339/735/895 3342/736/895 3343/732/892 +f 3343/732/892 3347/731/891 3339/735/895 +f 3349/726/896 3347/725/896 3348/728/897 +f 3348/728/897 3350/727/897 3349/726/896 +f 3340/730/898 3339/729/898 3347/725/896 +f 3347/725/896 3349/726/896 3340/730/898 +f 3344/737/899 3349/738/899 3350/739/900 +f 3350/739/900 3345/740/900 3344/737/899 +f 3341/741/901 3340/742/901 3349/738/899 +f 3349/738/899 3344/737/899 3341/741/901 +f 3351/743/37 3352/744/37 3353/745/37 +f 3353/745/37 3354/746/37 3351/743/37 +f 3355/747/902 3356/748/995 3357/749/903 +f 3357/749/903 3358/750/903 3355/747/902 +f 3354/751/904 3353/752/904 3356/748/995 +f 3356/748/995 3355/747/902 3354/751/904 +f 3359/753/905 3355/754/906 3358/755/907 +f 3358/755/907 3360/756/908 3359/753/905 +f 3351/757/909 3354/758/909 3355/754/906 +f 3355/754/906 3359/753/905 3351/757/909 +f 3361/748/910 3359/747/911 3360/750/912 +f 3360/750/912 3362/749/912 3361/748/910 +f 3352/752/913 3351/751/913 3359/747/911 +f 3359/747/911 3361/748/910 3352/752/913 +f 3356/754/914 3361/759/915 3362/760/916 +f 3362/760/916 3357/755/916 3356/754/914 +f 3353/758/917 3352/761/917 3361/759/915 +f 3361/759/915 3356/754/914 3353/758/917 +f 3363/762/918 3364/763/919 3365/764/920 +f 3365/764/920 3366/765/920 3363/762/918 +f 3367/766/921 3368/767/921 3364/763/919 +f 3364/763/919 3363/762/918 3367/766/921 +f 3369/768/922 3363/769/923 3366/770/924 +f 3366/770/924 3370/771/924 3369/768/922 +f 3371/772/925 3367/773/925 3363/769/923 +f 3363/769/923 3369/768/922 3371/772/925 +f 3372/763/926 3369/762/927 3370/765/928 +f 3370/765/928 3373/764/928 3372/763/926 +f 3374/767/929 3371/766/929 3369/762/927 +f 3369/762/927 3372/763/926 3374/767/929 +f 3364/774/930 3372/768/931 3373/771/932 +f 3373/771/932 3365/775/932 3364/774/930 +f 3368/776/933 3374/777/933 3372/768/931 +f 3372/768/931 3364/774/930 3368/776/933 +f 3375/778/934 3376/779/935 3377/780/936 +f 3377/780/936 3378/781/936 3375/778/934 +f 3379/782/937 3380/783/937 3376/779/935 +f 3376/779/935 3375/778/934 3379/782/937 +f 3381/784/938 3375/785/939 3378/786/940 +f 3378/786/940 3382/787/940 3381/784/938 +f 3383/788/941 3379/789/941 3375/785/939 +f 3375/785/939 3381/784/938 3383/788/941 +f 3384/790/1000 3381/791/943 3382/792/944 +f 3382/792/944 3385/793/944 3384/790/1000 +f 3386/794/945 3383/795/945 3381/791/943 +f 3381/791/943 3384/790/1000 3386/794/945 +f 3376/785/946 3384/796/947 3385/787/948 +f 3385/787/948 3377/797/948 3376/785/946 +f 3380/789/949 3386/798/949 3384/796/947 +f 3384/796/947 3376/785/946 3380/789/949 +f 3387/799/37 3388/800/37 3389/801/37 +f 3389/801/37 3390/802/37 3387/799/37 +f 3391/803/996 3392/804/997 3393/805/952 +f 3393/805/952 3394/806/952 3391/803/996 +f 3390/807/953 3389/808/953 3392/804/997 +f 3392/804/997 3391/803/996 3390/807/953 +f 3395/809/954 3391/810/954 3394/811/955 +f 3394/811/955 3396/812/955 3395/809/954 +f 3387/813/956 3390/814/956 3391/810/954 +f 3391/810/954 3395/809/954 3387/813/956 +f 3397/804/957 3395/803/958 3396/806/959 +f 3396/806/959 3398/805/959 3397/804/957 +f 3388/808/960 3387/807/960 3395/803/958 +f 3395/803/958 3397/804/957 3388/808/960 +f 3392/815/961 3397/809/961 3398/816/962 +f 3398/816/962 3393/817/962 3392/815/961 +f 3389/818/963 3388/819/963 3397/809/961 +f 3397/809/961 3392/815/961 3389/818/963 +f 3399/820/37 3400/821/37 3401/822/37 +f 3401/822/37 3402/823/37 3399/820/37 +f 3403/824/998 3404/825/999 3405/826/966 +f 3405/826/966 3406/827/966 3403/824/998 +f 3402/828/967 3401/829/967 3404/825/999 +f 3404/825/999 3403/824/998 3402/828/967 +f 3407/737/968 3403/738/969 3406/734/970 +f 3406/734/970 3408/740/970 3407/737/968 +f 3399/741/971 3402/735/971 3403/738/969 +f 3403/738/969 3407/737/968 3399/741/971 +f 3409/825/972 3407/824/972 3408/827/973 +f 3408/827/973 3410/826/973 3409/825/972 +f 3400/829/974 3399/828/974 3407/824/972 +f 3407/824/972 3409/825/972 3400/829/974 +f 3404/731/975 3409/737/976 3410/733/977 +f 3410/733/977 3405/830/977 3404/731/975 +f 3401/831/978 3400/736/978 3409/737/976 +f 3409/737/976 3404/731/975 3401/831/978 +f 3411/832/36 3412/833/36 3413/834/36 +f 3413/834/36 3414/835/36 3411/832/36 +f 3415/836/979 3416/837/979 3417/838/980 +f 3417/838/980 3418/839/980 3415/836/979 +f 3414/840/981 3413/841/981 3416/837/979 +f 3416/837/979 3415/836/979 3414/840/981 +f 3419/737/982 3415/731/982 3418/734/983 +f 3418/734/983 3420/733/983 3419/737/982 +f 3411/741/984 3414/735/985 3415/731/982 +f 3415/731/982 3419/737/982 3411/741/984 +f 3421/837/1001 3419/836/1001 3420/839/987 +f 3420/839/987 3422/838/987 3421/837/1001 +f 3412/841/988 3411/840/988 3419/836/1001 +f 3419/836/1001 3421/837/1001 3412/841/988 +f 3416/842/989 3421/732/989 3422/843/990 +f 3422/843/990 3417/734/990 3416/842/989 +f 3413/831/991 3412/736/991 3421/732/989 +f 3421/732/989 3416/842/989 3413/831/991 +f 3423/721/36 3424/722/36 3425/723/36 +f 3425/723/36 3426/724/36 3423/721/36 +f 3427/725/888 3428/726/888 3429/727/889 +f 3429/727/889 3430/728/889 3427/725/888 +f 3426/729/890 3425/730/890 3428/726/888 +f 3428/726/888 3427/725/888 3426/729/890 +f 3431/731/891 3427/732/892 3430/733/893 +f 3430/733/893 3432/734/893 3431/731/891 +f 3423/735/895 3426/736/895 3427/732/892 +f 3427/732/892 3431/731/891 3423/735/895 +f 3433/726/896 3431/725/896 3432/728/897 +f 3432/728/897 3434/727/897 3433/726/896 +f 3424/730/898 3423/729/898 3431/725/896 +f 3431/725/896 3433/726/896 3424/730/898 +f 3428/737/899 3433/738/899 3434/739/900 +f 3434/739/900 3429/740/900 3428/737/899 +f 3425/741/901 3424/742/901 3433/738/899 +f 3433/738/899 3428/737/899 3425/741/901 +f 3435/743/226 3436/744/226 3437/745/226 +f 3437/745/226 3438/746/226 3435/743/226 +f 3439/747/902 3440/748/995 3441/749/903 +f 3441/749/903 3442/750/903 3439/747/902 +f 3438/751/904 3437/752/904 3440/748/995 +f 3440/748/995 3439/747/902 3438/751/904 +f 3443/753/905 3439/754/906 3442/755/907 +f 3442/755/907 3444/756/908 3443/753/905 +f 3435/757/909 3438/758/909 3439/754/906 +f 3439/754/906 3443/753/905 3435/757/909 +f 3445/748/910 3443/747/911 3444/750/912 +f 3444/750/912 3446/749/912 3445/748/910 +f 3436/752/913 3435/751/913 3443/747/911 +f 3443/747/911 3445/748/910 3436/752/913 +f 3440/754/914 3445/759/915 3446/760/916 +f 3446/760/916 3441/755/916 3440/754/914 +f 3437/758/917 3436/761/917 3445/759/915 +f 3445/759/915 3440/754/914 3437/758/917 +f 3447/762/918 3448/763/919 3449/764/920 +f 3449/764/920 3450/765/920 3447/762/918 +f 3451/766/921 3452/767/921 3448/763/919 +f 3448/763/919 3447/762/918 3451/766/921 +f 3453/768/922 3447/769/923 3450/770/924 +f 3450/770/924 3454/771/924 3453/768/922 +f 3455/772/925 3451/773/925 3447/769/923 +f 3447/769/923 3453/768/922 3455/772/925 +f 3456/763/926 3453/762/927 3454/765/928 +f 3454/765/928 3457/764/928 3456/763/926 +f 3458/767/929 3455/766/929 3453/762/927 +f 3453/762/927 3456/763/926 3458/767/929 +f 3448/774/930 3456/768/931 3457/771/932 +f 3457/771/932 3449/775/932 3448/774/930 +f 3452/776/933 3458/777/933 3456/768/931 +f 3456/768/931 3448/774/930 3452/776/933 +f 3459/778/934 3460/779/935 3461/780/936 +f 3461/780/936 3462/781/936 3459/778/934 +f 3463/782/937 3464/783/937 3460/779/935 +f 3460/779/935 3459/778/934 3463/782/937 +f 3465/784/938 3459/785/939 3462/786/940 +f 3462/786/940 3466/787/940 3465/784/938 +f 3467/788/941 3463/789/941 3459/785/939 +f 3459/785/939 3465/784/938 3467/788/941 +f 3468/790/1000 3465/791/943 3466/792/944 +f 3466/792/944 3469/793/944 3468/790/1000 +f 3470/794/945 3467/795/945 3465/791/943 +f 3465/791/943 3468/790/1000 3470/794/945 +f 3460/785/946 3468/796/947 3469/787/948 +f 3469/787/948 3461/797/948 3460/785/946 +f 3464/789/949 3470/798/949 3468/796/947 +f 3468/796/947 3460/785/946 3464/789/949 +f 3471/799/36 3472/800/36 3473/801/36 +f 3473/801/36 3474/802/36 3471/799/36 +f 3475/803/996 3476/804/997 3477/805/952 +f 3477/805/952 3478/806/952 3475/803/996 +f 3474/807/953 3473/808/953 3476/804/997 +f 3476/804/997 3475/803/996 3474/807/953 +f 3479/809/954 3475/810/954 3478/811/955 +f 3478/811/955 3480/812/955 3479/809/954 +f 3471/813/956 3474/814/956 3475/810/954 +f 3475/810/954 3479/809/954 3471/813/956 +f 3481/804/957 3479/803/958 3480/806/959 +f 3480/806/959 3482/805/959 3481/804/957 +f 3472/808/960 3471/807/960 3479/803/958 +f 3479/803/958 3481/804/957 3472/808/960 +f 3476/815/961 3481/809/961 3482/816/962 +f 3482/816/962 3477/817/962 3476/815/961 +f 3473/818/963 3472/819/963 3481/809/961 +f 3481/809/961 3476/815/961 3473/818/963 +f 3483/820/36 3484/821/36 3485/822/36 +f 3485/822/36 3486/823/36 3483/820/36 +f 3487/824/998 3488/825/999 3489/826/966 +f 3489/826/966 3490/827/966 3487/824/998 +f 3486/828/967 3485/829/967 3488/825/999 +f 3488/825/999 3487/824/998 3486/828/967 +f 3491/737/968 3487/738/969 3490/734/970 +f 3490/734/970 3492/740/970 3491/737/968 +f 3483/741/971 3486/735/971 3487/738/969 +f 3487/738/969 3491/737/968 3483/741/971 +f 3493/825/972 3491/824/972 3492/827/973 +f 3492/827/973 3494/826/973 3493/825/972 +f 3484/829/974 3483/828/974 3491/824/972 +f 3491/824/972 3493/825/972 3484/829/974 +f 3488/731/975 3493/737/976 3494/733/977 +f 3494/733/977 3489/830/977 3488/731/975 +f 3485/831/978 3484/736/978 3493/737/976 +f 3493/737/976 3488/731/975 3485/831/978 +f 3495/832/36 3496/833/36 3497/834/36 +f 3497/834/36 3498/835/36 3495/832/36 +f 3499/836/979 3500/837/979 3501/838/980 +f 3501/838/980 3502/839/980 3499/836/979 +f 3498/840/981 3497/841/981 3500/837/979 +f 3500/837/979 3499/836/979 3498/840/981 +f 3503/737/982 3499/731/982 3502/734/983 +f 3502/734/983 3504/733/983 3503/737/982 +f 3495/741/984 3498/735/985 3499/731/982 +f 3499/731/982 3503/737/982 3495/741/984 +f 3505/837/1001 3503/836/1001 3504/839/987 +f 3504/839/987 3506/838/987 3505/837/1001 +f 3496/841/988 3495/840/988 3503/836/1001 +f 3503/836/1001 3505/837/1001 3496/841/988 +f 3500/842/989 3505/732/989 3506/843/990 +f 3506/843/990 3501/734/990 3500/842/989 +f 3497/831/991 3496/736/991 3505/732/989 +f 3505/732/989 3500/842/989 3497/831/991 +f 3507/721/37 3508/722/37 3509/723/37 +f 3509/723/37 3510/724/37 3507/721/37 +f 3511/725/888 3512/726/888 3513/727/889 +f 3513/727/889 3514/728/889 3511/725/888 +f 3510/729/890 3509/730/890 3512/726/888 +f 3512/726/888 3511/725/888 3510/729/890 +f 3515/731/891 3511/732/892 3514/733/893 +f 3514/733/893 3516/734/893 3515/731/891 +f 3507/735/895 3510/736/895 3511/732/892 +f 3511/732/892 3515/731/891 3507/735/895 +f 3517/726/896 3515/725/896 3516/728/897 +f 3516/728/897 3518/727/897 3517/726/896 +f 3508/730/898 3507/729/898 3515/725/896 +f 3515/725/896 3517/726/896 3508/730/898 +f 3512/737/899 3517/738/899 3518/739/900 +f 3518/739/900 3513/740/900 3512/737/899 +f 3509/741/901 3508/742/901 3517/738/899 +f 3517/738/899 3512/737/899 3509/741/901 +f 3519/743/37 3520/744/37 3521/745/37 +f 3521/745/37 3522/746/37 3519/743/37 +f 3523/747/902 3524/748/995 3525/749/903 +f 3525/749/903 3526/750/903 3523/747/902 +f 3522/751/904 3521/752/904 3524/748/995 +f 3524/748/995 3523/747/902 3522/751/904 +f 3527/753/905 3523/754/906 3526/755/907 +f 3526/755/907 3528/756/908 3527/753/905 +f 3519/757/909 3522/758/909 3523/754/906 +f 3523/754/906 3527/753/905 3519/757/909 +f 3529/748/910 3527/747/911 3528/750/912 +f 3528/750/912 3530/749/912 3529/748/910 +f 3520/752/913 3519/751/913 3527/747/911 +f 3527/747/911 3529/748/910 3520/752/913 +f 3524/754/914 3529/759/915 3530/760/916 +f 3530/760/916 3525/755/916 3524/754/914 +f 3521/758/917 3520/761/917 3529/759/915 +f 3529/759/915 3524/754/914 3521/758/917 +f 3531/762/918 3532/763/919 3533/764/920 +f 3533/764/920 3534/765/920 3531/762/918 +f 3535/766/921 3536/767/921 3532/763/919 +f 3532/763/919 3531/762/918 3535/766/921 +f 3537/768/922 3531/769/923 3534/770/924 +f 3534/770/924 3538/771/924 3537/768/922 +f 3539/772/925 3535/773/925 3531/769/923 +f 3531/769/923 3537/768/922 3539/772/925 +f 3540/763/926 3537/762/927 3538/765/928 +f 3538/765/928 3541/764/928 3540/763/926 +f 3542/767/929 3539/766/929 3537/762/927 +f 3537/762/927 3540/763/926 3542/767/929 +f 3532/774/930 3540/768/931 3541/771/932 +f 3541/771/932 3533/775/932 3532/774/930 +f 3536/776/933 3542/777/933 3540/768/931 +f 3540/768/931 3532/774/930 3536/776/933 +f 3543/778/934 3544/779/935 3545/780/936 +f 3545/780/936 3546/781/936 3543/778/934 +f 3547/782/937 3548/783/937 3544/779/935 +f 3544/779/935 3543/778/934 3547/782/937 +f 3549/784/938 3543/785/939 3546/786/940 +f 3546/786/940 3550/787/940 3549/784/938 +f 3551/788/941 3547/789/941 3543/785/939 +f 3543/785/939 3549/784/938 3551/788/941 +f 3552/790/1000 3549/791/943 3550/792/944 +f 3550/792/944 3553/793/944 3552/790/1000 +f 3554/794/945 3551/795/945 3549/791/943 +f 3549/791/943 3552/790/1000 3554/794/945 +f 3544/785/946 3552/796/947 3553/787/948 +f 3553/787/948 3545/797/948 3544/785/946 +f 3548/789/949 3554/798/949 3552/796/947 +f 3552/796/947 3544/785/946 3548/789/949 +f 3555/799/37 3556/800/37 3557/801/37 +f 3557/801/37 3558/802/37 3555/799/37 +f 3559/803/996 3560/804/997 3561/805/952 +f 3561/805/952 3562/806/952 3559/803/996 +f 3558/807/953 3557/808/953 3560/804/997 +f 3560/804/997 3559/803/996 3558/807/953 +f 3563/809/954 3559/810/954 3562/811/955 +f 3562/811/955 3564/812/955 3563/809/954 +f 3555/813/956 3558/814/956 3559/810/954 +f 3559/810/954 3563/809/954 3555/813/956 +f 3565/804/957 3563/803/958 3564/806/959 +f 3564/806/959 3566/805/959 3565/804/957 +f 3556/808/960 3555/807/960 3563/803/958 +f 3563/803/958 3565/804/957 3556/808/960 +f 3560/815/961 3565/809/961 3566/816/962 +f 3566/816/962 3561/817/962 3560/815/961 +f 3557/818/963 3556/819/963 3565/809/961 +f 3565/809/961 3560/815/961 3557/818/963 +f 3567/820/36 3568/821/36 3569/822/36 +f 3569/822/36 3570/823/36 3567/820/36 +f 3571/824/998 3572/825/999 3573/826/966 +f 3573/826/966 3574/827/966 3571/824/998 +f 3570/828/967 3569/829/967 3572/825/999 +f 3572/825/999 3571/824/998 3570/828/967 +f 3575/737/968 3571/738/969 3574/734/970 +f 3574/734/970 3576/740/970 3575/737/968 +f 3567/741/971 3570/735/971 3571/738/969 +f 3571/738/969 3575/737/968 3567/741/971 +f 3577/825/972 3575/824/972 3576/827/973 +f 3576/827/973 3578/826/973 3577/825/972 +f 3568/829/974 3567/828/974 3575/824/972 +f 3575/824/972 3577/825/972 3568/829/974 +f 3572/731/975 3577/737/976 3578/733/977 +f 3578/733/977 3573/830/977 3572/731/975 +f 3569/831/978 3568/736/978 3577/737/976 +f 3577/737/976 3572/731/975 3569/831/978 +f 3579/832/36 3580/833/36 3581/834/36 +f 3581/834/36 3582/835/36 3579/832/36 +f 3583/836/979 3584/837/979 3585/838/980 +f 3585/838/980 3586/839/980 3583/836/979 +f 3582/840/981 3581/841/981 3584/837/979 +f 3584/837/979 3583/836/979 3582/840/981 +f 3587/737/982 3583/731/982 3586/734/983 +f 3586/734/983 3588/733/983 3587/737/982 +f 3579/741/984 3582/735/985 3583/731/982 +f 3583/731/982 3587/737/982 3579/741/984 +f 3589/837/1001 3587/836/1001 3588/839/987 +f 3588/839/987 3590/838/987 3589/837/1001 +f 3580/841/988 3579/840/988 3587/836/1001 +f 3587/836/1001 3589/837/1001 3580/841/988 +f 3584/842/989 3589/732/989 3590/843/990 +f 3590/843/990 3585/734/990 3584/842/989 +f 3581/831/991 3580/736/991 3589/732/989 +f 3589/732/989 3584/842/989 3581/831/991 +f 3591/721/226 3592/722/226 3593/723/226 +f 3593/723/226 3594/724/226 3591/721/226 +f 3595/725/888 3596/726/888 3597/727/889 +f 3597/727/889 3598/728/889 3595/725/888 +f 3594/729/890 3593/730/890 3596/726/888 +f 3596/726/888 3595/725/888 3594/729/890 +f 3599/731/891 3595/732/892 3598/733/893 +f 3598/733/893 3600/734/893 3599/731/891 +f 3591/735/895 3594/736/895 3595/732/892 +f 3595/732/892 3599/731/891 3591/735/895 +f 3601/726/896 3599/725/896 3600/728/897 +f 3600/728/897 3602/727/897 3601/726/896 +f 3592/730/898 3591/729/898 3599/725/896 +f 3599/725/896 3601/726/896 3592/730/898 +f 3596/737/899 3601/738/899 3602/739/900 +f 3602/739/900 3597/740/900 3596/737/899 +f 3593/741/901 3592/742/901 3601/738/899 +f 3601/738/899 3596/737/899 3593/741/901 +f 3603/743/36 3604/744/36 3605/745/36 +f 3605/745/36 3606/746/36 3603/743/36 +f 3607/747/902 3608/748/995 3609/749/903 +f 3609/749/903 3610/750/903 3607/747/902 +f 3606/751/904 3605/752/904 3608/748/995 +f 3608/748/995 3607/747/902 3606/751/904 +f 3611/753/905 3607/754/906 3610/755/907 +f 3610/755/907 3612/756/908 3611/753/905 +f 3603/757/909 3606/758/909 3607/754/906 +f 3607/754/906 3611/753/905 3603/757/909 +f 3613/748/910 3611/747/911 3612/750/912 +f 3612/750/912 3614/749/912 3613/748/910 +f 3604/752/913 3603/751/913 3611/747/911 +f 3611/747/911 3613/748/910 3604/752/913 +f 3608/754/914 3613/759/915 3614/760/916 +f 3614/760/916 3609/755/916 3608/754/914 +f 3605/758/917 3604/761/917 3613/759/915 +f 3613/759/915 3608/754/914 3605/758/917 +f 3615/762/918 3616/763/919 3617/764/920 +f 3617/764/920 3618/765/920 3615/762/918 +f 3619/766/921 3620/767/921 3616/763/919 +f 3616/763/919 3615/762/918 3619/766/921 +f 3621/768/922 3615/769/923 3618/770/924 +f 3618/770/924 3622/771/924 3621/768/922 +f 3623/772/925 3619/773/925 3615/769/923 +f 3615/769/923 3621/768/922 3623/772/925 +f 3624/763/926 3621/762/927 3622/765/928 +f 3622/765/928 3625/764/928 3624/763/926 +f 3626/767/929 3623/766/929 3621/762/927 +f 3621/762/927 3624/763/926 3626/767/929 +f 3616/774/930 3624/768/931 3625/771/932 +f 3625/771/932 3617/775/932 3616/774/930 +f 3620/776/933 3626/777/933 3624/768/931 +f 3624/768/931 3616/774/930 3620/776/933 +f 3627/778/934 3628/779/935 3629/780/936 +f 3629/780/936 3630/781/936 3627/778/934 +f 3631/782/937 3632/783/937 3628/779/935 +f 3628/779/935 3627/778/934 3631/782/937 +f 3633/784/938 3627/785/939 3630/786/940 +f 3630/786/940 3634/787/940 3633/784/938 +f 3635/788/941 3631/789/941 3627/785/939 +f 3627/785/939 3633/784/938 3635/788/941 +f 3636/790/1000 3633/791/943 3634/792/944 +f 3634/792/944 3637/793/944 3636/790/1000 +f 3638/794/945 3635/795/945 3633/791/943 +f 3633/791/943 3636/790/1000 3638/794/945 +f 3628/785/946 3636/796/947 3637/787/948 +f 3637/787/948 3629/797/948 3628/785/946 +f 3632/789/949 3638/798/949 3636/796/947 +f 3636/796/947 3628/785/946 3632/789/949 +f 3639/799/36 3640/800/36 3641/801/36 +f 3641/801/36 3642/802/36 3639/799/36 +f 3643/803/996 3644/804/997 3645/805/952 +f 3645/805/952 3646/806/952 3643/803/996 +f 3642/807/953 3641/808/953 3644/804/997 +f 3644/804/997 3643/803/996 3642/807/953 +f 3647/809/954 3643/810/954 3646/811/955 +f 3646/811/955 3648/812/955 3647/809/954 +f 3639/813/956 3642/814/956 3643/810/954 +f 3643/810/954 3647/809/954 3639/813/956 +f 3649/804/957 3647/803/958 3648/806/959 +f 3648/806/959 3650/805/959 3649/804/957 +f 3640/808/960 3639/807/960 3647/803/958 +f 3647/803/958 3649/804/957 3640/808/960 +f 3644/815/961 3649/809/961 3650/816/962 +f 3650/816/962 3645/817/962 3644/815/961 +f 3641/818/963 3640/819/963 3649/809/961 +f 3649/809/961 3644/815/961 3641/818/963 +f 3651/820/36 3652/821/36 3653/822/36 +f 3653/822/36 3654/823/36 3651/820/36 +f 3655/824/964 3656/825/965 3657/826/966 +f 3657/826/966 3658/827/966 3655/824/964 +f 3654/828/967 3653/829/967 3656/825/965 +f 3656/825/965 3655/824/964 3654/828/967 +f 3659/737/968 3655/738/969 3658/734/970 +f 3658/734/970 3660/740/970 3659/737/968 +f 3651/741/971 3654/735/971 3655/738/969 +f 3655/738/969 3659/737/968 3651/741/971 +f 3661/825/1002 3659/824/972 3660/827/973 +f 3660/827/973 3662/826/973 3661/825/1002 +f 3652/829/974 3651/828/974 3659/824/972 +f 3659/824/972 3661/825/1002 3652/829/974 +f 3656/731/975 3661/737/976 3662/733/977 +f 3662/733/977 3657/830/977 3656/731/975 +f 3653/831/978 3652/736/978 3661/737/976 +f 3661/737/976 3656/731/975 3653/831/978 +f 3663/832/226 3664/833/226 3665/834/226 +f 3665/834/226 3666/835/226 3663/832/226 +f 3667/836/979 3668/837/979 3669/838/980 +f 3669/838/980 3670/839/980 3667/836/979 +f 3666/840/981 3665/841/981 3668/837/979 +f 3668/837/979 3667/836/979 3666/840/981 +f 3671/737/982 3667/731/982 3670/734/983 +f 3670/734/983 3672/733/983 3671/737/982 +f 3663/741/984 3666/735/985 3667/731/982 +f 3667/731/982 3671/737/982 3663/741/984 +f 3673/837/1001 3671/836/1001 3672/839/987 +f 3672/839/987 3674/838/987 3673/837/1001 +f 3664/841/988 3663/840/988 3671/836/1001 +f 3671/836/1001 3673/837/1001 3664/841/988 +f 3668/842/989 3673/732/989 3674/843/990 +f 3674/843/990 3669/734/990 3668/842/989 +f 3665/831/991 3664/736/991 3673/732/989 +f 3673/732/989 3668/842/989 3665/831/991 +f 3675/721/226 3676/722/226 3677/723/226 +f 3677/723/226 3678/724/226 3675/721/226 +f 3679/725/1003 3680/726/1004 3681/727/1005 +f 3681/727/1005 3682/728/1005 3679/725/1003 +f 3678/729/1006 3677/730/1006 3680/726/1004 +f 3680/726/1004 3679/725/1003 3678/729/1006 +f 3683/731/1007 3679/732/1008 3682/733/1009 +f 3682/733/1009 3684/734/1009 3683/731/1007 +f 3675/735/1010 3678/736/1010 3679/732/1008 +f 3679/732/1008 3683/731/1007 3675/735/1010 +f 3685/726/1011 3683/725/1011 3684/728/1012 +f 3684/728/1012 3686/727/1012 3685/726/1011 +f 3676/730/1013 3675/729/1013 3683/725/1011 +f 3683/725/1011 3685/726/1011 3676/730/1013 +f 3680/737/1014 3685/738/1014 3686/739/1015 +f 3686/739/1015 3681/740/1015 3680/737/1014 +f 3677/741/1016 3676/742/1016 3685/738/1014 +f 3685/738/1014 3680/737/1014 3677/741/1016 +f 3687/743/37 3688/744/37 3689/745/37 +f 3689/745/37 3690/746/37 3687/743/37 +f 3691/747/1017 3692/748/1017 3693/749/1018 +f 3693/749/1018 3694/750/1018 3691/747/1017 +f 3690/751/1019 3689/752/1019 3692/748/1017 +f 3692/748/1017 3691/747/1017 3690/751/1019 +f 3695/753/1020 3691/754/1021 3694/755/1022 +f 3694/755/1022 3696/756/1022 3695/753/1020 +f 3687/757/1023 3690/758/1023 3691/754/1021 +f 3691/754/1021 3695/753/1020 3687/757/1023 +f 3697/748/1024 3695/747/1025 3696/750/1026 +f 3696/750/1026 3698/749/1026 3697/748/1024 +f 3688/752/1027 3687/751/1028 3695/747/1025 +f 3695/747/1025 3697/748/1024 3688/752/1027 +f 3692/754/1029 3697/759/1030 3698/760/1031 +f 3698/760/1031 3693/755/1031 3692/754/1029 +f 3689/758/1032 3688/761/1032 3697/759/1030 +f 3697/759/1030 3692/754/1029 3689/758/1032 +f 3699/762/1033 3700/763/1034 3701/764/1035 +f 3701/764/1035 3702/765/1035 3699/762/1033 +f 3703/766/1036 3704/767/1036 3700/763/1034 +f 3700/763/1034 3699/762/1033 3703/766/1036 +f 3705/768/1037 3699/769/1038 3702/770/1039 +f 3702/770/1039 3706/771/1039 3705/768/1037 +f 3707/772/1040 3703/773/1040 3699/769/1038 +f 3699/769/1038 3705/768/1037 3707/772/1040 +f 3708/763/1041 3705/762/1042 3706/765/1043 +f 3706/765/1043 3709/764/1043 3708/763/1041 +f 3710/767/1044 3707/766/1044 3705/762/1042 +f 3705/762/1042 3708/763/1041 3710/767/1044 +f 3700/774/1045 3708/768/1046 3709/771/1047 +f 3709/771/1047 3701/775/1047 3700/774/1045 +f 3704/776/1048 3710/777/1048 3708/768/1046 +f 3708/768/1046 3700/774/1045 3704/776/1048 +f 3711/778/1049 3712/779/1050 3713/780/1051 +f 3713/780/1051 3714/781/1051 3711/778/1049 +f 3715/782/1052 3716/783/1052 3712/779/1050 +f 3712/779/1050 3711/778/1049 3715/782/1052 +f 3717/784/1053 3711/785/1054 3714/786/1055 +f 3714/786/1055 3718/787/1055 3717/784/1053 +f 3719/788/1056 3715/789/1056 3711/785/1054 +f 3711/785/1054 3717/784/1053 3719/788/1056 +f 3720/790/1057 3717/791/1058 3718/792/1059 +f 3718/792/1059 3721/793/1059 3720/790/1057 +f 3722/794/1060 3719/795/1060 3717/791/1058 +f 3717/791/1058 3720/790/1057 3722/794/1060 +f 3712/785/1061 3720/796/1062 3721/787/1063 +f 3721/787/1063 3713/797/1063 3712/785/1061 +f 3716/789/1064 3722/798/1064 3720/796/1062 +f 3720/796/1062 3712/785/1061 3716/789/1064 +f 3723/799/37 3724/800/37 3725/801/37 +f 3725/801/37 3726/802/37 3723/799/37 +f 3727/803/816 3728/804/815 3729/805/869 +f 3729/805/869 3730/806/869 3727/803/816 +f 3726/807/870 3725/808/870 3728/804/815 +f 3728/804/815 3727/803/816 3726/807/870 +f 3731/809/1065 3727/810/1065 3730/811/1066 +f 3730/811/1066 3732/812/1066 3731/809/1065 +f 3723/813/1067 3726/814/1067 3727/810/1065 +f 3727/810/1065 3731/809/1065 3723/813/1067 +f 3733/804/809 3731/803/808 3732/806/810 +f 3732/806/810 3734/805/810 3733/804/809 +f 3724/808/811 3723/807/811 3731/803/808 +f 3731/803/808 3733/804/809 3724/808/811 +f 3728/815/1068 3733/809/1068 3734/816/1069 +f 3734/816/1069 3729/817/1069 3728/815/1068 +f 3725/818/1070 3724/819/1071 3733/809/1068 +f 3733/809/1068 3728/815/1068 3725/818/1070 +f 3735/820/37 3736/821/37 3737/822/37 +f 3737/822/37 3738/823/37 3735/820/37 +f 3739/824/1072 3740/825/1073 3741/826/1074 +f 3741/826/1074 3742/827/1074 3739/824/1072 +f 3738/828/1075 3737/829/1075 3740/825/1073 +f 3740/825/1073 3739/824/1072 3738/828/1075 +f 3743/737/1076 3739/738/1077 3742/734/1078 +f 3742/734/1078 3744/740/1078 3743/737/1076 +f 3735/741/1079 3738/735/1079 3739/738/1077 +f 3739/738/1077 3743/737/1076 3735/741/1079 +f 3745/825/1080 3743/824/1080 3744/827/1081 +f 3744/827/1081 3746/826/1081 3745/825/1080 +f 3736/829/1082 3735/828/1082 3743/824/1080 +f 3743/824/1080 3745/825/1080 3736/829/1082 +f 3740/731/1083 3745/737/1084 3746/733/1085 +f 3746/733/1085 3741/830/1085 3740/731/1083 +f 3737/831/1086 3736/736/1086 3745/737/1084 +f 3745/737/1084 3740/731/1083 3737/831/1086 +f 3747/832/37 3748/833/37 3749/834/37 +f 3749/834/37 3750/835/37 3747/832/37 +f 3751/836/1087 3752/837/1087 3753/838/1088 +f 3753/838/1088 3754/839/1088 3751/836/1087 +f 3750/840/1089 3749/841/1089 3752/837/1087 +f 3752/837/1087 3751/836/1087 3750/840/1089 +f 3755/737/848 3751/731/848 3754/734/849 +f 3754/734/849 3756/733/849 3755/737/848 +f 3747/741/850 3750/735/850 3751/731/848 +f 3751/731/848 3755/737/848 3747/741/850 +f 3757/837/1090 3755/836/1090 3756/839/1091 +f 3756/839/1091 3758/838/1091 3757/837/1090 +f 3748/841/1092 3747/840/1092 3755/836/1090 +f 3755/836/1090 3757/837/1090 3748/841/1092 +f 3752/842/1093 3757/732/842 3758/843/843 +f 3758/843/843 3753/734/843 3752/842/1093 +f 3749/831/1094 3748/736/1094 3757/732/842 +f 3757/732/842 3752/842/1093 3749/831/1094 +f 3759/721/226 3760/722/226 3761/723/226 +f 3761/723/226 3762/724/226 3759/721/226 +f 3763/725/1003 3764/726/1004 3765/727/1005 +f 3765/727/1005 3766/728/1005 3763/725/1003 +f 3762/729/1006 3761/730/1006 3764/726/1004 +f 3764/726/1004 3763/725/1003 3762/729/1006 +f 3767/731/1007 3763/732/1008 3766/733/1009 +f 3766/733/1009 3768/734/1009 3767/731/1007 +f 3759/735/1095 3762/736/1010 3763/732/1008 +f 3763/732/1008 3767/731/1007 3759/735/1095 +f 3769/726/1011 3767/725/1011 3768/728/1012 +f 3768/728/1012 3770/727/1012 3769/726/1011 +f 3760/730/1013 3759/729/1013 3767/725/1011 +f 3767/725/1011 3769/726/1011 3760/730/1013 +f 3764/737/1014 3769/738/1014 3770/739/1015 +f 3770/739/1015 3765/740/1015 3764/737/1014 +f 3761/741/1016 3760/742/1016 3769/738/1014 +f 3769/738/1014 3764/737/1014 3761/741/1016 +f 3771/743/37 3772/744/37 3773/745/37 +f 3773/745/37 3774/746/37 3771/743/37 +f 3775/747/1017 3776/748/1017 3777/749/1018 +f 3777/749/1018 3778/750/1018 3775/747/1017 +f 3774/751/1096 3773/752/1096 3776/748/1017 +f 3776/748/1017 3775/747/1017 3774/751/1096 +f 3779/753/1020 3775/754/1021 3778/755/1022 +f 3778/755/1022 3780/756/1022 3779/753/1020 +f 3771/757/1023 3774/758/1023 3775/754/1021 +f 3775/754/1021 3779/753/1020 3771/757/1023 +f 3781/748/1024 3779/747/1025 3780/750/1097 +f 3780/750/1097 3782/749/1097 3781/748/1024 +f 3772/752/1028 3771/751/1028 3779/747/1025 +f 3779/747/1025 3781/748/1024 3772/752/1028 +f 3776/754/1029 3781/759/1030 3782/760/1031 +f 3782/760/1031 3777/755/1031 3776/754/1029 +f 3773/758/1032 3772/761/1032 3781/759/1030 +f 3781/759/1030 3776/754/1029 3773/758/1032 +f 3783/762/1033 3784/763/1034 3785/764/1035 +f 3785/764/1035 3786/765/1035 3783/762/1033 +f 3787/766/1036 3788/767/1036 3784/763/1034 +f 3784/763/1034 3783/762/1033 3787/766/1036 +f 3789/768/1098 3783/769/1038 3786/770/1039 +f 3786/770/1039 3790/771/1039 3789/768/1098 +f 3791/772/1040 3787/773/1040 3783/769/1038 +f 3783/769/1038 3789/768/1098 3791/772/1040 +f 3792/763/1041 3789/762/1042 3790/765/1043 +f 3790/765/1043 3793/764/1043 3792/763/1041 +f 3794/767/1044 3791/766/1044 3789/762/1042 +f 3789/762/1042 3792/763/1041 3794/767/1044 +f 3784/774/1045 3792/768/1046 3793/771/1047 +f 3793/771/1047 3785/775/1047 3784/774/1045 +f 3788/776/1048 3794/777/1048 3792/768/1046 +f 3792/768/1046 3784/774/1045 3788/776/1048 +f 3795/778/1049 3796/779/1050 3797/780/1051 +f 3797/780/1051 3798/781/1051 3795/778/1049 +f 3799/782/1052 3800/783/1052 3796/779/1050 +f 3796/779/1050 3795/778/1049 3799/782/1052 +f 3801/784/1053 3795/785/1099 3798/786/1055 +f 3798/786/1055 3802/787/1055 3801/784/1053 +f 3803/788/1056 3799/789/1056 3795/785/1099 +f 3795/785/1099 3801/784/1053 3803/788/1056 +f 3804/790/1057 3801/791/1058 3802/792/1059 +f 3802/792/1059 3805/793/1059 3804/790/1057 +f 3806/794/1060 3803/795/1060 3801/791/1058 +f 3801/791/1058 3804/790/1057 3806/794/1060 +f 3796/785/1061 3804/796/1062 3805/787/1063 +f 3805/787/1063 3797/797/1063 3796/785/1061 +f 3800/789/1064 3806/798/1064 3804/796/1062 +f 3804/796/1062 3796/785/1061 3800/789/1064 +f 3807/799/37 3808/800/37 3809/801/37 +f 3809/801/37 3810/802/37 3807/799/37 +f 3811/803/816 3812/804/815 3813/805/869 +f 3813/805/869 3814/806/869 3811/803/816 +f 3810/807/870 3809/808/870 3812/804/815 +f 3812/804/815 3811/803/816 3810/807/870 +f 3815/809/1065 3811/810/1065 3814/811/1066 +f 3814/811/1066 3816/812/1066 3815/809/1065 +f 3807/813/1067 3810/814/1067 3811/810/1065 +f 3811/810/1065 3815/809/1065 3807/813/1067 +f 3817/804/1100 3815/803/808 3816/806/1101 +f 3816/806/1101 3818/805/1101 3817/804/1100 +f 3808/808/1102 3807/807/1102 3815/803/808 +f 3815/803/808 3817/804/1100 3808/808/1102 +f 3812/815/1068 3817/809/1068 3818/816/1069 +f 3818/816/1069 3813/817/1069 3812/815/1068 +f 3809/818/1071 3808/819/1071 3817/809/1068 +f 3817/809/1068 3812/815/1068 3809/818/1071 +f 3819/820/37 3820/821/37 3821/822/37 +f 3821/822/37 3822/823/37 3819/820/37 +f 3823/824/1103 3824/825/1104 3825/826/1074 +f 3825/826/1074 3826/827/1074 3823/824/1103 +f 3822/828/1105 3821/829/1105 3824/825/1104 +f 3824/825/1104 3823/824/1103 3822/828/1105 +f 3827/737/1076 3823/738/1077 3826/734/1078 +f 3826/734/1078 3828/740/1078 3827/737/1076 +f 3819/741/1079 3822/735/1079 3823/738/1077 +f 3823/738/1077 3827/737/1076 3819/741/1079 +f 3829/825/1106 3827/824/1080 3828/827/1081 +f 3828/827/1081 3830/826/1107 3829/825/1106 +f 3820/829/1082 3819/828/1108 3827/824/1080 +f 3827/824/1080 3829/825/1106 3820/829/1082 +f 3824/731/1083 3829/737/1084 3830/733/1085 +f 3830/733/1085 3825/830/1085 3824/731/1083 +f 3821/831/1086 3820/736/1086 3829/737/1084 +f 3829/737/1084 3824/731/1083 3821/831/1086 +f 3831/832/37 3832/833/37 3833/834/37 +f 3833/834/37 3834/835/37 3831/832/37 +f 3835/836/1087 3836/837/1087 3837/838/1109 +f 3837/838/1109 3838/839/1109 3835/836/1087 +f 3834/840/1110 3833/841/1110 3836/837/1087 +f 3836/837/1087 3835/836/1087 3834/840/1110 +f 3839/737/848 3835/731/848 3838/734/849 +f 3838/734/849 3840/733/849 3839/737/848 +f 3831/741/850 3834/735/850 3835/731/848 +f 3835/731/848 3839/737/848 3831/741/850 +f 3841/837/1090 3839/836/1090 3840/839/1111 +f 3840/839/1111 3842/838/1111 3841/837/1090 +f 3832/841/1092 3831/840/1092 3839/836/1090 +f 3839/836/1090 3841/837/1090 3832/841/1092 +f 3836/842/842 3841/732/842 3842/843/843 +f 3842/843/843 3837/734/843 3836/842/842 +f 3833/831/1094 3832/736/1094 3841/732/842 +f 3841/732/842 3836/842/842 3833/831/1094 +f 3843/721/226 3844/722/226 3845/723/226 +f 3845/723/226 3846/724/226 3843/721/226 +f 3847/725/1004 3848/726/1004 3849/727/1112 +f 3849/727/1112 3850/728/1112 3847/725/1004 +f 3846/729/1006 3845/730/1006 3848/726/1004 +f 3848/726/1004 3847/725/1004 3846/729/1006 +f 3851/731/1007 3847/732/1008 3850/733/1009 +f 3850/733/1009 3852/734/1009 3851/731/1007 +f 3843/735/1010 3846/736/1010 3847/732/1008 +f 3847/732/1008 3851/731/1007 3843/735/1010 +f 3853/726/1113 3851/725/1011 3852/728/1012 +f 3852/728/1012 3854/727/1012 3853/726/1113 +f 3844/730/1013 3843/729/1013 3851/725/1011 +f 3851/725/1011 3853/726/1113 3844/730/1013 +f 3848/737/1014 3853/738/1014 3854/739/1015 +f 3854/739/1015 3849/740/1015 3848/737/1014 +f 3845/741/1016 3844/742/1016 3853/738/1014 +f 3853/738/1014 3848/737/1014 3845/741/1016 +f 3855/743/37 3856/744/37 3857/745/37 +f 3857/745/37 3858/746/37 3855/743/37 +f 3859/747/1017 3860/748/1017 3861/749/1018 +f 3861/749/1018 3862/750/1018 3859/747/1017 +f 3858/751/1019 3857/752/1019 3860/748/1017 +f 3860/748/1017 3859/747/1017 3858/751/1019 +f 3863/753/1020 3859/754/1021 3862/755/1022 +f 3862/755/1022 3864/756/1022 3863/753/1020 +f 3855/757/1023 3858/758/1023 3859/754/1021 +f 3859/754/1021 3863/753/1020 3855/757/1023 +f 3865/748/1024 3863/747/1025 3864/750/1026 +f 3864/750/1026 3866/749/1026 3865/748/1024 +f 3856/752/1027 3855/751/1028 3863/747/1025 +f 3863/747/1025 3865/748/1024 3856/752/1027 +f 3860/754/1029 3865/759/1030 3866/760/1031 +f 3866/760/1031 3861/755/1031 3860/754/1029 +f 3857/758/1032 3856/761/1032 3865/759/1030 +f 3865/759/1030 3860/754/1029 3857/758/1032 +f 3867/762/1033 3868/763/1034 3869/764/1035 +f 3869/764/1035 3870/765/1035 3867/762/1033 +f 3871/766/1036 3872/767/1036 3868/763/1034 +f 3868/763/1034 3867/762/1033 3871/766/1036 +f 3873/768/1098 3867/769/1038 3870/770/1039 +f 3870/770/1039 3874/771/1039 3873/768/1098 +f 3875/772/1040 3871/773/1040 3867/769/1038 +f 3867/769/1038 3873/768/1098 3875/772/1040 +f 3876/763/1041 3873/762/1042 3874/765/1043 +f 3874/765/1043 3877/764/1043 3876/763/1041 +f 3878/767/1044 3875/766/1044 3873/762/1042 +f 3873/762/1042 3876/763/1041 3878/767/1044 +f 3868/774/1045 3876/768/1046 3877/771/1047 +f 3877/771/1047 3869/775/1047 3868/774/1045 +f 3872/776/1048 3878/777/1048 3876/768/1046 +f 3876/768/1046 3868/774/1045 3872/776/1048 +f 3879/778/1114 3880/779/1050 3881/780/1051 +f 3881/780/1051 3882/781/1051 3879/778/1114 +f 3883/782/1052 3884/783/1052 3880/779/1050 +f 3880/779/1050 3879/778/1114 3883/782/1052 +f 3885/784/1053 3879/785/1099 3882/786/1055 +f 3882/786/1055 3886/787/1055 3885/784/1053 +f 3887/788/1056 3883/789/1056 3879/785/1099 +f 3879/785/1099 3885/784/1053 3887/788/1056 +f 3888/790/1057 3885/791/1115 3886/792/1059 +f 3886/792/1059 3889/793/1059 3888/790/1057 +f 3890/794/1060 3887/795/1060 3885/791/1115 +f 3885/791/1115 3888/790/1057 3890/794/1060 +f 3880/785/1061 3888/796/1062 3889/787/1063 +f 3889/787/1063 3881/797/1063 3880/785/1061 +f 3884/789/1064 3890/798/1064 3888/796/1062 +f 3888/796/1062 3880/785/1061 3884/789/1064 +f 3891/799/37 3892/800/37 3893/801/37 +f 3893/801/37 3894/802/37 3891/799/37 +f 3895/803/816 3896/804/815 3897/805/869 +f 3897/805/869 3898/806/869 3895/803/816 +f 3894/807/870 3893/808/870 3896/804/815 +f 3896/804/815 3895/803/816 3894/807/870 +f 3899/809/1065 3895/810/1065 3898/811/1066 +f 3898/811/1066 3900/812/1066 3899/809/1065 +f 3891/813/1067 3894/814/1067 3895/810/1065 +f 3895/810/1065 3899/809/1065 3891/813/1067 +f 3901/804/809 3899/803/808 3900/806/810 +f 3900/806/810 3902/805/810 3901/804/809 +f 3892/808/811 3891/807/811 3899/803/808 +f 3899/803/808 3901/804/809 3892/808/811 +f 3896/815/1068 3901/809/1068 3902/816/1069 +f 3902/816/1069 3897/817/1069 3896/815/1068 +f 3893/818/1070 3892/819/1071 3901/809/1068 +f 3901/809/1068 3896/815/1068 3893/818/1070 +f 3903/820/37 3904/821/37 3905/822/37 +f 3905/822/37 3906/823/37 3903/820/37 +f 3907/824/1103 3908/825/1104 3909/826/1074 +f 3909/826/1074 3910/827/1074 3907/824/1103 +f 3906/828/1105 3905/829/1105 3908/825/1104 +f 3908/825/1104 3907/824/1103 3906/828/1105 +f 3911/737/1076 3907/738/1077 3910/734/1078 +f 3910/734/1078 3912/740/1078 3911/737/1076 +f 3903/741/1079 3906/735/1079 3907/738/1077 +f 3907/738/1077 3911/737/1076 3903/741/1079 +f 3913/825/1080 3911/824/1080 3912/827/1081 +f 3912/827/1081 3914/826/1081 3913/825/1080 +f 3904/829/1082 3903/828/1082 3911/824/1080 +f 3911/824/1080 3913/825/1080 3904/829/1082 +f 3908/731/1083 3913/737/1084 3914/733/1085 +f 3914/733/1085 3909/830/1085 3908/731/1083 +f 3905/831/1086 3904/736/1086 3913/737/1084 +f 3913/737/1084 3908/731/1083 3905/831/1086 +f 3915/832/37 3916/833/37 3917/834/37 +f 3917/834/37 3918/835/37 3915/832/37 +f 3919/836/1087 3920/837/1087 3921/838/1088 +f 3921/838/1088 3922/839/1088 3919/836/1087 +f 3918/840/1116 3917/841/1116 3920/837/1087 +f 3920/837/1087 3919/836/1087 3918/840/1116 +f 3923/737/848 3919/731/848 3922/734/849 +f 3922/734/849 3924/733/849 3923/737/848 +f 3915/741/850 3918/735/850 3919/731/848 +f 3919/731/848 3923/737/848 3915/741/850 +f 3925/837/1090 3923/836/1090 3924/839/1117 +f 3924/839/1117 3926/838/1117 3925/837/1090 +f 3916/841/1118 3915/840/1118 3923/836/1090 +f 3923/836/1090 3925/837/1090 3916/841/1118 +f 3920/842/842 3925/732/842 3926/843/843 +f 3926/843/843 3921/734/843 3920/842/842 +f 3917/831/1094 3916/736/1094 3925/732/842 +f 3925/732/842 3920/842/842 3917/831/1094 +f 3927/721/226 3928/722/226 3929/723/226 +f 3929/723/226 3930/724/226 3927/721/226 +f 3931/725/1004 3932/726/1004 3933/727/1119 +f 3933/727/1119 3934/728/1112 3931/725/1004 +f 3930/729/1006 3929/730/1006 3932/726/1004 +f 3932/726/1004 3931/725/1004 3930/729/1006 +f 3935/731/1007 3931/732/1008 3934/733/1009 +f 3934/733/1009 3936/734/1009 3935/731/1007 +f 3927/735/1010 3930/736/1010 3931/732/1008 +f 3931/732/1008 3935/731/1007 3927/735/1010 +f 3937/726/1113 3935/725/1011 3936/728/1012 +f 3936/728/1012 3938/727/1012 3937/726/1113 +f 3928/730/1013 3927/729/1013 3935/725/1011 +f 3935/725/1011 3937/726/1113 3928/730/1013 +f 3932/737/1014 3937/738/1014 3938/739/1015 +f 3938/739/1015 3933/740/1015 3932/737/1014 +f 3929/741/1016 3928/742/1016 3937/738/1014 +f 3937/738/1014 3932/737/1014 3929/741/1016 +f 3939/743/37 3940/744/37 3941/745/37 +f 3941/745/37 3942/746/37 3939/743/37 +f 3943/747/1017 3944/748/1017 3945/749/1018 +f 3945/749/1018 3946/750/1018 3943/747/1017 +f 3942/751/1019 3941/752/1019 3944/748/1017 +f 3944/748/1017 3943/747/1017 3942/751/1019 +f 3947/753/1020 3943/754/1021 3946/755/1022 +f 3946/755/1022 3948/756/1022 3947/753/1020 +f 3939/757/1023 3942/758/1023 3943/754/1021 +f 3943/754/1021 3947/753/1020 3939/757/1023 +f 3949/748/1024 3947/747/1025 3948/750/1026 +f 3948/750/1026 3950/749/1026 3949/748/1024 +f 3940/752/1027 3939/751/1028 3947/747/1025 +f 3947/747/1025 3949/748/1024 3940/752/1027 +f 3944/754/1029 3949/759/1030 3950/760/1031 +f 3950/760/1031 3945/755/1031 3944/754/1029 +f 3941/758/1032 3940/761/1032 3949/759/1030 +f 3949/759/1030 3944/754/1029 3941/758/1032 +f 3951/762/1033 3952/763/1034 3953/764/1035 +f 3953/764/1035 3954/765/1035 3951/762/1033 +f 3955/766/1036 3956/767/1036 3952/763/1034 +f 3952/763/1034 3951/762/1033 3955/766/1036 +f 3957/768/1098 3951/769/1038 3954/770/1039 +f 3954/770/1039 3958/771/1039 3957/768/1098 +f 3959/772/1040 3955/773/1040 3951/769/1038 +f 3951/769/1038 3957/768/1098 3959/772/1040 +f 3960/763/1041 3957/762/1042 3958/765/1043 +f 3958/765/1043 3961/764/1043 3960/763/1041 +f 3962/767/1044 3959/766/1044 3957/762/1042 +f 3957/762/1042 3960/763/1041 3962/767/1044 +f 3952/774/1045 3960/768/1046 3961/771/1047 +f 3961/771/1047 3953/775/1047 3952/774/1045 +f 3956/776/1048 3962/777/1048 3960/768/1046 +f 3960/768/1046 3952/774/1045 3956/776/1048 +f 3963/778/1114 3964/779/1050 3965/780/1051 +f 3965/780/1051 3966/781/1051 3963/778/1114 +f 3967/782/1052 3968/783/1052 3964/779/1050 +f 3964/779/1050 3963/778/1114 3967/782/1052 +f 3969/784/1053 3963/785/1099 3966/786/1055 +f 3966/786/1055 3970/787/1055 3969/784/1053 +f 3971/788/1056 3967/789/1056 3963/785/1099 +f 3963/785/1099 3969/784/1053 3971/788/1056 +f 3972/790/1057 3969/791/1058 3970/792/1059 +f 3970/792/1059 3973/793/1059 3972/790/1057 +f 3974/794/1060 3971/795/1060 3969/791/1058 +f 3969/791/1058 3972/790/1057 3974/794/1060 +f 3964/785/1061 3972/796/1062 3973/787/1063 +f 3973/787/1063 3965/797/1063 3964/785/1061 +f 3968/789/1064 3974/798/1064 3972/796/1062 +f 3972/796/1062 3964/785/1061 3968/789/1064 +f 3975/799/37 3976/800/37 3977/801/37 +f 3977/801/37 3978/802/37 3975/799/37 +f 3979/803/816 3980/804/815 3981/805/869 +f 3981/805/869 3982/806/869 3979/803/816 +f 3978/807/870 3977/808/870 3980/804/815 +f 3980/804/815 3979/803/816 3978/807/870 +f 3983/809/1065 3979/810/1065 3982/811/1066 +f 3982/811/1066 3984/812/1066 3983/809/1065 +f 3975/813/1067 3978/814/1067 3979/810/1065 +f 3979/810/1065 3983/809/1065 3975/813/1067 +f 3985/804/809 3983/803/808 3984/806/810 +f 3984/806/810 3986/805/810 3985/804/809 +f 3976/808/811 3975/807/811 3983/803/808 +f 3983/803/808 3985/804/809 3976/808/811 +f 3980/815/1068 3985/809/1068 3986/816/1069 +f 3986/816/1069 3981/817/1069 3980/815/1068 +f 3977/818/1070 3976/819/1071 3985/809/1068 +f 3985/809/1068 3980/815/1068 3977/818/1070 +f 3987/820/37 3988/821/37 3989/822/37 +f 3989/822/37 3990/823/37 3987/820/37 +f 3991/824/1072 3992/825/1073 3993/826/1120 +f 3993/826/1120 3994/827/1074 3991/824/1072 +f 3990/828/1121 3989/829/1105 3992/825/1073 +f 3992/825/1073 3991/824/1072 3990/828/1121 +f 3995/737/1076 3991/738/1077 3994/734/1078 +f 3994/734/1078 3996/740/1078 3995/737/1076 +f 3987/741/1079 3990/735/1079 3991/738/1077 +f 3991/738/1077 3995/737/1076 3987/741/1079 +f 3997/825/1080 3995/824/1080 3996/827/1081 +f 3996/827/1081 3998/826/1081 3997/825/1080 +f 3988/829/1082 3987/828/1082 3995/824/1080 +f 3995/824/1080 3997/825/1080 3988/829/1082 +f 3992/731/1083 3997/737/1084 3998/733/1085 +f 3998/733/1085 3993/830/1085 3992/731/1083 +f 3989/831/1086 3988/736/1086 3997/737/1084 +f 3997/737/1084 3992/731/1083 3989/831/1086 +f 3999/832/37 4000/833/37 4001/834/37 +f 4001/834/37 4002/835/37 3999/832/37 +f 4003/836/1087 4004/837/1087 4005/838/1088 +f 4005/838/1088 4006/839/1088 4003/836/1087 +f 4002/840/1089 4001/841/1089 4004/837/1087 +f 4004/837/1087 4003/836/1087 4002/840/1089 +f 4007/737/848 4003/731/848 4006/734/849 +f 4006/734/849 4008/733/849 4007/737/848 +f 3999/741/850 4002/735/850 4003/731/848 +f 4003/731/848 4007/737/848 3999/741/850 +f 4009/837/1122 4007/836/1122 4008/839/1091 +f 4008/839/1091 4010/838/1091 4009/837/1122 +f 4000/841/1118 3999/840/1118 4007/836/1122 +f 4007/836/1122 4009/837/1122 4000/841/1118 +f 4004/842/1093 4009/732/842 4010/843/843 +f 4010/843/843 4005/734/843 4004/842/1093 +f 4001/831/1094 4000/736/1094 4009/732/842 +f 4009/732/842 4004/842/1093 4001/831/1094 +f 4011/721/226 4012/722/226 4013/723/226 +f 4013/723/226 4014/724/226 4011/721/226 +f 4015/725/852 4016/726/748 4017/727/749 +f 4017/727/749 4018/728/749 4015/725/852 +f 4014/729/750 4013/730/750 4016/726/748 +f 4016/726/748 4015/725/852 4014/729/750 +f 4019/731/751 4015/732/752 4018/733/753 +f 4018/733/753 4020/734/753 4019/731/751 +f 4011/735/1123 4014/736/1123 4015/732/752 +f 4015/732/752 4019/731/751 4011/735/1123 +f 4021/726/755 4019/725/755 4020/728/756 +f 4020/728/756 4022/727/756 4021/726/755 +f 4012/730/757 4011/729/757 4019/725/755 +f 4019/725/755 4021/726/755 4012/730/757 +f 4016/737/758 4021/738/758 4022/739/759 +f 4022/739/759 4017/740/759 4016/737/758 +f 4013/741/760 4012/742/760 4021/738/758 +f 4021/738/758 4016/737/758 4013/741/760 +f 4023/743/226 4024/744/226 4025/745/226 +f 4025/745/226 4026/746/226 4023/743/226 +f 4027/747/761 4028/748/761 4029/749/762 +f 4029/749/762 4030/750/762 4027/747/761 +f 4026/751/763 4025/752/763 4028/748/761 +f 4028/748/761 4027/747/761 4026/751/763 +f 4031/753/764 4027/754/765 4030/755/766 +f 4030/755/766 4032/756/766 4031/753/764 +f 4023/757/767 4026/758/767 4027/754/765 +f 4027/754/765 4031/753/764 4023/757/767 +f 4033/748/768 4031/747/769 4032/750/770 +f 4032/750/770 4034/749/770 4033/748/768 +f 4024/752/771 4023/751/771 4031/747/769 +f 4031/747/769 4033/748/768 4024/752/771 +f 4028/754/772 4033/759/773 4034/760/774 +f 4034/760/774 4029/755/774 4028/754/772 +f 4025/758/775 4024/761/775 4033/759/773 +f 4033/759/773 4028/754/772 4025/758/775 +f 4035/762/776 4036/763/777 4037/764/778 +f 4037/764/778 4038/765/778 4035/762/776 +f 4039/766/779 4040/767/779 4036/763/777 +f 4036/763/777 4035/762/776 4039/766/779 +f 4041/768/1124 4035/769/781 4038/770/782 +f 4038/770/782 4042/771/782 4041/768/1124 +f 4043/772/783 4039/773/783 4035/769/781 +f 4035/769/781 4041/768/1124 4043/772/783 +f 4044/763/784 4041/762/785 4042/765/786 +f 4042/765/786 4045/764/786 4044/763/784 +f 4046/767/787 4043/766/787 4041/762/785 +f 4041/762/785 4044/763/784 4046/767/787 +f 4036/774/788 4044/768/789 4045/771/790 +f 4045/771/790 4037/775/790 4036/774/788 +f 4040/776/791 4046/777/791 4044/768/789 +f 4044/768/789 4036/774/788 4040/776/791 +f 4047/778/868 4048/779/793 4049/780/794 +f 4049/780/794 4050/781/794 4047/778/868 +f 4051/782/795 4052/783/795 4048/779/793 +f 4048/779/793 4047/778/868 4051/782/795 +f 4053/784/796 4047/785/797 4050/786/798 +f 4050/786/798 4054/787/798 4053/784/796 +f 4055/788/799 4051/789/799 4047/785/797 +f 4047/785/797 4053/784/796 4055/788/799 +f 4056/790/853 4053/791/854 4054/792/802 +f 4054/792/802 4057/793/802 4056/790/853 +f 4058/794/803 4055/795/803 4053/791/854 +f 4053/791/854 4056/790/853 4058/794/803 +f 4048/785/804 4056/796/805 4057/787/806 +f 4057/787/806 4049/797/806 4048/785/804 +f 4052/789/807 4058/798/807 4056/796/805 +f 4056/796/805 4048/785/804 4052/789/807 +f 4059/799/226 4060/800/226 4061/801/226 +f 4061/801/226 4062/802/226 4059/799/226 +f 4063/803/808 4064/804/809 4065/805/810 +f 4065/805/810 4066/806/810 4063/803/808 +f 4062/807/811 4061/808/811 4064/804/809 +f 4064/804/809 4063/803/808 4062/807/811 +f 4067/809/812 4063/810/812 4066/811/813 +f 4066/811/813 4068/812/813 4067/809/812 +f 4059/813/814 4062/814/814 4063/810/812 +f 4063/810/812 4067/809/812 4059/813/814 +f 4069/804/815 4067/803/816 4068/806/817 +f 4068/806/817 4070/805/817 4069/804/815 +f 4060/808/818 4059/807/818 4067/803/816 +f 4067/803/816 4069/804/815 4060/808/818 +f 4064/815/819 4069/809/819 4070/816/820 +f 4070/816/820 4065/817/820 4064/815/819 +f 4061/818/821 4060/819/822 4069/809/819 +f 4069/809/819 4064/815/819 4061/818/821 +f 4071/820/226 4072/821/226 4073/822/226 +f 4073/822/226 4074/823/226 4071/820/226 +f 4075/824/857 4076/825/858 4077/826/825 +f 4077/826/825 4078/827/825 4075/824/857 +f 4074/828/826 4073/829/826 4076/825/858 +f 4076/825/858 4075/824/857 4074/828/826 +f 4079/737/827 4075/738/828 4078/734/829 +f 4078/734/829 4080/740/829 4079/737/827 +f 4071/741/830 4074/735/830 4075/738/828 +f 4075/738/828 4079/737/827 4071/741/830 +f 4081/825/831 4079/824/832 4080/827/833 +f 4080/827/833 4082/826/833 4081/825/831 +f 4072/829/834 4071/828/834 4079/824/832 +f 4079/824/832 4081/825/831 4072/829/834 +f 4076/731/835 4081/737/836 4082/733/837 +f 4082/733/837 4077/830/837 4076/731/835 +f 4073/831/838 4072/736/838 4081/737/836 +f 4081/737/836 4076/731/835 4073/831/838 +f 4083/832/226 4084/833/226 4085/834/226 +f 4085/834/226 4086/835/226 4083/832/226 +f 4087/836/839 4088/837/839 4089/838/1125 +f 4089/838/1125 4090/839/1125 4087/836/839 +f 4086/840/841 4085/841/841 4088/837/839 +f 4088/837/839 4087/836/839 4086/840/841 +f 4091/737/842 4087/731/842 4090/734/843 +f 4090/734/843 4092/733/843 4091/737/842 +f 4083/741/844 4086/735/844 4087/731/842 +f 4087/731/842 4091/737/842 4083/741/844 +f 4093/837/859 4091/836/859 4092/839/881 +f 4092/839/881 4094/838/881 4093/837/859 +f 4084/841/847 4083/840/847 4091/836/859 +f 4091/836/859 4093/837/859 4084/841/847 +f 4088/842/848 4093/732/848 4094/843/849 +f 4094/843/849 4089/734/849 4088/842/848 +f 4085/831/851 4084/736/851 4093/732/848 +f 4093/732/848 4088/842/848 4085/831/851 +f 4095/721/226 4096/722/226 4097/723/226 +f 4097/723/226 4098/724/226 4095/721/226 +f 4099/725/852 4100/726/748 4101/727/860 +f 4101/727/860 4102/728/860 4099/725/852 +f 4098/729/750 4097/730/750 4100/726/748 +f 4100/726/748 4099/725/852 4098/729/750 +f 4103/731/751 4099/732/752 4102/733/753 +f 4102/733/753 4104/734/753 4103/731/751 +f 4095/735/1123 4098/736/1123 4099/732/752 +f 4099/732/752 4103/731/751 4095/735/1123 +f 4105/726/755 4103/725/755 4104/728/756 +f 4104/728/756 4106/727/756 4105/726/755 +f 4096/730/757 4095/729/757 4103/725/755 +f 4103/725/755 4105/726/755 4096/730/757 +f 4100/737/758 4105/738/758 4106/739/759 +f 4106/739/759 4101/740/759 4100/737/758 +f 4097/741/760 4096/742/760 4105/738/758 +f 4105/738/758 4100/737/758 4097/741/760 +f 4107/743/226 4108/744/226 4109/745/226 +f 4109/745/226 4110/746/226 4107/743/226 +f 4111/747/761 4112/748/761 4113/749/762 +f 4113/749/762 4114/750/762 4111/747/761 +f 4110/751/1126 4109/752/1126 4112/748/761 +f 4112/748/761 4111/747/761 4110/751/1126 +f 4115/753/764 4111/754/765 4114/755/766 +f 4114/755/766 4116/756/766 4115/753/764 +f 4107/757/767 4110/758/767 4111/754/765 +f 4111/754/765 4115/753/764 4107/757/767 +f 4117/748/768 4115/747/769 4116/750/770 +f 4116/750/770 4118/749/770 4117/748/768 +f 4108/752/771 4107/751/771 4115/747/769 +f 4115/747/769 4117/748/768 4108/752/771 +f 4112/754/772 4117/759/773 4118/760/774 +f 4118/760/774 4113/755/774 4112/754/772 +f 4109/758/775 4108/761/775 4117/759/773 +f 4117/759/773 4112/754/772 4109/758/775 +f 4119/762/776 4120/763/777 4121/764/778 +f 4121/764/778 4122/765/1127 4119/762/776 +f 4123/766/779 4124/767/779 4120/763/777 +f 4120/763/777 4119/762/776 4123/766/779 +f 4125/768/1124 4119/769/781 4122/770/782 +f 4122/770/782 4126/771/782 4125/768/1124 +f 4127/772/783 4123/773/783 4119/769/781 +f 4119/769/781 4125/768/1124 4127/772/783 +f 4128/763/784 4125/762/785 4126/765/786 +f 4126/765/786 4129/764/786 4128/763/784 +f 4130/767/787 4127/766/787 4125/762/785 +f 4125/762/785 4128/763/784 4130/767/787 +f 4120/774/788 4128/768/789 4129/771/790 +f 4129/771/790 4121/775/790 4120/774/788 +f 4124/776/791 4130/777/791 4128/768/789 +f 4128/768/789 4120/774/788 4124/776/791 +f 4131/778/792 4132/779/793 4133/780/794 +f 4133/780/794 4134/781/794 4131/778/792 +f 4135/782/795 4136/783/795 4132/779/793 +f 4132/779/793 4131/778/792 4135/782/795 +f 4137/784/796 4131/785/797 4134/786/798 +f 4134/786/798 4138/787/798 4137/784/796 +f 4139/788/799 4135/789/799 4131/785/797 +f 4131/785/797 4137/784/796 4139/788/799 +f 4140/790/800 4137/791/801 4138/792/802 +f 4138/792/802 4141/793/802 4140/790/800 +f 4142/794/803 4139/795/803 4137/791/801 +f 4137/791/801 4140/790/800 4142/794/803 +f 4132/785/804 4140/796/805 4141/787/806 +f 4141/787/806 4133/797/806 4132/785/804 +f 4136/789/807 4142/798/807 4140/796/805 +f 4140/796/805 4132/785/804 4136/789/807 +f 4143/799/226 4144/800/226 4145/801/226 +f 4145/801/226 4146/802/226 4143/799/226 +f 4147/803/808 4148/804/809 4149/805/810 +f 4149/805/810 4150/806/810 4147/803/808 +f 4146/807/811 4145/808/811 4148/804/809 +f 4148/804/809 4147/803/808 4146/807/811 +f 4151/809/812 4147/810/812 4150/811/813 +f 4150/811/813 4152/812/813 4151/809/812 +f 4143/813/814 4146/814/814 4147/810/812 +f 4147/810/812 4151/809/812 4143/813/814 +f 4153/804/815 4151/803/816 4152/806/1128 +f 4152/806/1128 4154/805/1128 4153/804/815 +f 4144/808/870 4143/807/870 4151/803/816 +f 4151/803/816 4153/804/815 4144/808/870 +f 4148/815/819 4153/809/819 4154/816/820 +f 4154/816/820 4149/817/820 4148/815/819 +f 4145/818/821 4144/819/822 4153/809/819 +f 4153/809/819 4148/815/819 4145/818/821 +f 4155/820/226 4156/821/226 4157/822/226 +f 4157/822/226 4158/823/226 4155/820/226 +f 4159/824/857 4160/825/858 4161/826/825 +f 4161/826/825 4162/827/825 4159/824/857 +f 4158/828/862 4157/829/862 4160/825/858 +f 4160/825/858 4159/824/857 4158/828/862 +f 4163/737/827 4159/738/828 4162/734/829 +f 4162/734/829 4164/740/829 4163/737/827 +f 4155/741/830 4158/735/830 4159/738/828 +f 4159/738/828 4163/737/827 4155/741/830 +f 4165/825/832 4163/824/832 4164/827/833 +f 4164/827/833 4166/826/833 4165/825/832 +f 4156/829/834 4155/828/834 4163/824/832 +f 4163/824/832 4165/825/832 4156/829/834 +f 4160/731/835 4165/737/836 4166/733/837 +f 4166/733/837 4161/830/837 4160/731/835 +f 4157/831/838 4156/736/838 4165/737/836 +f 4165/737/836 4160/731/835 4157/831/838 +f 4167/832/226 4168/833/226 4169/834/226 +f 4169/834/226 4170/835/226 4167/832/226 +f 4171/836/839 4172/837/839 4173/838/865 +f 4173/838/865 4174/839/865 4171/836/839 +f 4170/840/866 4169/841/866 4172/837/839 +f 4172/837/839 4171/836/839 4170/840/866 +f 4175/737/842 4171/731/842 4174/734/843 +f 4174/734/843 4176/733/843 4175/737/842 +f 4167/741/844 4170/735/844 4171/731/842 +f 4171/731/842 4175/737/842 4167/741/844 +f 4177/837/859 4175/836/859 4176/839/871 +f 4176/839/871 4178/838/871 4177/837/859 +f 4168/841/847 4167/840/847 4175/836/859 +f 4175/836/859 4177/837/859 4168/841/847 +f 4172/842/867 4177/732/848 4178/843/849 +f 4178/843/849 4173/734/849 4172/842/867 +f 4169/831/851 4168/736/851 4177/732/848 +f 4177/732/848 4172/842/867 4169/831/851 +f 4179/721/226 4180/722/226 4181/723/226 +f 4181/723/226 4182/724/226 4179/721/226 +f 4183/725/1129 4184/726/1129 4185/727/1130 +f 4185/727/1130 4186/728/1130 4183/725/1129 +f 4182/729/1131 4181/730/1131 4184/726/1129 +f 4184/726/1129 4183/725/1129 4182/729/1131 +f 4187/731/1132 4183/732/1133 4186/733/1134 +f 4186/733/1134 4188/734/1134 4187/731/1132 +f 4179/735/1135 4182/736/1135 4183/732/1133 +f 4183/732/1133 4187/731/1132 4179/735/1135 +f 4189/726/1136 4187/725/1136 4188/728/1137 +f 4188/728/1137 4190/727/1137 4189/726/1136 +f 4180/730/1138 4179/729/1138 4187/725/1136 +f 4187/725/1136 4189/726/1136 4180/730/1138 +f 4184/737/1139 4189/738/1139 4190/739/1140 +f 4190/739/1140 4185/740/1140 4184/737/1139 +f 4181/741/1141 4180/742/1142 4189/738/1139 +f 4189/738/1139 4184/737/1139 4181/741/1141 +f 4191/743/36 4192/744/36 4193/745/36 +f 4193/745/36 4194/746/36 4191/743/36 +f 4195/747/1143 4196/748/1144 4197/749/1145 +f 4197/749/1145 4198/750/1145 4195/747/1143 +f 4194/751/1146 4193/752/1146 4196/748/1144 +f 4196/748/1144 4195/747/1143 4194/751/1146 +f 4199/753/1147 4195/754/1148 4198/755/1149 +f 4198/755/1149 4200/756/1149 4199/753/1147 +f 4191/757/1150 4194/758/1150 4195/754/1148 +f 4195/754/1148 4199/753/1147 4191/757/1150 +f 4201/748/1151 4199/747/1152 4200/750/1153 +f 4200/750/1153 4202/749/1153 4201/748/1151 +f 4192/752/1154 4191/751/1154 4199/747/1152 +f 4199/747/1152 4201/748/1151 4192/752/1154 +f 4196/754/1155 4201/759/1156 4202/760/1157 +f 4202/760/1157 4197/755/1157 4196/754/1155 +f 4193/758/1158 4192/761/1158 4201/759/1156 +f 4201/759/1156 4196/754/1155 4193/758/1158 +f 4203/762/1159 4204/763/1160 4205/764/1161 +f 4205/764/1161 4206/765/1161 4203/762/1159 +f 4207/766/1162 4208/767/1162 4204/763/1160 +f 4204/763/1160 4203/762/1159 4207/766/1162 +f 4209/768/1163 4203/769/1164 4206/770/1165 +f 4206/770/1165 4210/771/1165 4209/768/1163 +f 4211/772/1166 4207/773/1167 4203/769/1164 +f 4203/769/1164 4209/768/1163 4211/772/1166 +f 4212/763/1168 4209/762/1169 4210/765/1170 +f 4210/765/1170 4213/764/1170 4212/763/1168 +f 4214/767/1171 4211/766/1171 4209/762/1169 +f 4209/762/1169 4212/763/1168 4214/767/1171 +f 4204/774/1172 4212/768/1173 4213/771/1174 +f 4213/771/1174 4205/775/1174 4204/774/1172 +f 4208/776/1175 4214/777/1175 4212/768/1173 +f 4212/768/1173 4204/774/1172 4208/776/1175 +f 4215/778/1176 4216/779/1177 4217/780/1178 +f 4217/780/1178 4218/781/1178 4215/778/1176 +f 4219/782/1179 4220/783/1179 4216/779/1177 +f 4216/779/1177 4215/778/1176 4219/782/1179 +f 4221/784/1180 4215/785/1181 4218/786/1182 +f 4218/786/1182 4222/787/1182 4221/784/1180 +f 4223/788/1183 4219/789/1184 4215/785/1181 +f 4215/785/1181 4221/784/1180 4223/788/1183 +f 4224/790/1185 4221/791/1186 4222/792/1187 +f 4222/792/1187 4225/793/1187 4224/790/1185 +f 4226/794/1188 4223/795/1188 4221/791/1186 +f 4221/791/1186 4224/790/1185 4226/794/1188 +f 4216/785/1189 4224/796/1190 4225/787/1191 +f 4225/787/1191 4217/797/1191 4216/785/1189 +f 4220/789/1192 4226/798/1192 4224/796/1190 +f 4224/796/1190 4216/785/1189 4220/789/1192 +f 4227/799/36 4228/800/36 4229/801/36 +f 4229/801/36 4230/802/36 4227/799/36 +f 4231/803/958 4232/804/957 4233/805/1193 +f 4233/805/1193 4234/806/1193 4231/803/958 +f 4230/807/1194 4229/808/1194 4232/804/957 +f 4232/804/957 4231/803/958 4230/807/1194 +f 4235/809/1195 4231/810/1195 4234/811/1196 +f 4234/811/1196 4236/812/1196 4235/809/1195 +f 4227/813/1197 4230/814/1197 4231/810/1195 +f 4231/810/1195 4235/809/1195 4227/813/1197 +f 4237/804/997 4235/803/996 4236/806/1198 +f 4236/806/1198 4238/805/1198 4237/804/997 +f 4228/808/1199 4227/807/1199 4235/803/996 +f 4235/803/996 4237/804/997 4228/808/1199 +f 4232/815/1200 4237/809/1200 4238/816/1201 +f 4238/816/1201 4233/817/1201 4232/815/1200 +f 4229/818/1202 4228/819/1203 4237/809/1200 +f 4237/809/1200 4232/815/1200 4229/818/1202 +f 4239/820/36 4240/821/36 4241/822/36 +f 4241/822/36 4242/823/36 4239/820/36 +f 4243/824/1204 4244/825/1205 4245/826/1206 +f 4245/826/1206 4246/827/1206 4243/824/1204 +f 4242/828/1207 4241/829/1207 4244/825/1205 +f 4244/825/1205 4243/824/1204 4242/828/1207 +f 4247/737/1208 4243/738/1209 4246/734/1210 +f 4246/734/1210 4248/740/1210 4247/737/1208 +f 4239/741/1211 4242/735/1211 4243/738/1209 +f 4243/738/1209 4247/737/1208 4239/741/1211 +f 4249/825/1212 4247/824/1213 4248/827/1214 +f 4248/827/1214 4250/826/1214 4249/825/1212 +f 4240/829/1215 4239/828/1215 4247/824/1213 +f 4247/824/1213 4249/825/1212 4240/829/1215 +f 4244/731/1216 4249/737/1217 4250/733/1218 +f 4250/733/1218 4245/830/1218 4244/731/1216 +f 4241/831/1219 4240/736/1219 4249/737/1217 +f 4249/737/1217 4244/731/1216 4241/831/1219 +f 4251/832/226 4252/833/226 4253/834/226 +f 4253/834/226 4254/835/226 4251/832/226 +f 4255/836/1220 4256/837/1220 4257/838/1221 +f 4257/838/1221 4258/839/1221 4255/836/1220 +f 4254/840/1222 4253/841/1222 4256/837/1220 +f 4256/837/1220 4255/836/1220 4254/840/1222 +f 4259/737/989 4255/731/989 4258/734/990 +f 4258/734/990 4260/733/990 4259/737/989 +f 4251/741/1223 4254/735/1223 4255/731/989 +f 4255/731/989 4259/737/989 4251/741/1223 +f 4261/837/1224 4259/836/1224 4260/839/1225 +f 4260/839/1225 4262/838/1225 4261/837/1224 +f 4252/841/1226 4251/840/1226 4259/836/1224 +f 4259/836/1224 4261/837/1224 4252/841/1226 +f 4256/842/982 4261/732/982 4262/843/983 +f 4262/843/983 4257/734/983 4256/842/982 +f 4253/831/985 4252/736/985 4261/732/982 +f 4261/732/982 4256/842/982 4253/831/985 +f 4263/721/36 4264/722/36 4265/723/36 +f 4265/723/36 4266/724/36 4263/721/36 +f 4267/725/1129 4268/726/1129 4269/727/1130 +f 4269/727/1130 4270/728/1130 4267/725/1129 +f 4266/729/1131 4265/730/1131 4268/726/1129 +f 4268/726/1129 4267/725/1129 4266/729/1131 +f 4271/731/1132 4267/732/1133 4270/733/1134 +f 4270/733/1134 4272/734/1134 4271/731/1132 +f 4263/735/1135 4266/736/1135 4267/732/1133 +f 4267/732/1133 4271/731/1132 4263/735/1135 +f 4273/726/1136 4271/725/1136 4272/728/1137 +f 4272/728/1137 4274/727/1137 4273/726/1136 +f 4264/730/1138 4263/729/1138 4271/725/1136 +f 4271/725/1136 4273/726/1136 4264/730/1138 +f 4268/737/1139 4273/738/1139 4274/739/1140 +f 4274/739/1140 4269/740/1140 4268/737/1139 +f 4265/741/1141 4264/742/1142 4273/738/1139 +f 4273/738/1139 4268/737/1139 4265/741/1141 +f 4275/743/36 4276/744/36 4277/745/36 +f 4277/745/36 4278/746/36 4275/743/36 +f 4279/747/1143 4280/748/1144 4281/749/1145 +f 4281/749/1145 4282/750/1145 4279/747/1143 +f 4278/751/1146 4277/752/1146 4280/748/1144 +f 4280/748/1144 4279/747/1143 4278/751/1146 +f 4283/753/1147 4279/754/1148 4282/755/1149 +f 4282/755/1149 4284/756/1149 4283/753/1147 +f 4275/757/1150 4278/758/1150 4279/754/1148 +f 4279/754/1148 4283/753/1147 4275/757/1150 +f 4285/748/1151 4283/747/1152 4284/750/1153 +f 4284/750/1153 4286/749/1153 4285/748/1151 +f 4276/752/1154 4275/751/1154 4283/747/1152 +f 4283/747/1152 4285/748/1151 4276/752/1154 +f 4280/754/1155 4285/759/1156 4286/760/1157 +f 4286/760/1157 4281/755/1157 4280/754/1155 +f 4277/758/1158 4276/761/1158 4285/759/1156 +f 4285/759/1156 4280/754/1155 4277/758/1158 +f 4287/762/1159 4288/763/1160 4289/764/1161 +f 4289/764/1161 4290/765/1161 4287/762/1159 +f 4291/766/1162 4292/767/1162 4288/763/1160 +f 4288/763/1160 4287/762/1159 4291/766/1162 +f 4293/768/1163 4287/769/1164 4290/770/1165 +f 4290/770/1165 4294/771/1165 4293/768/1163 +f 4295/772/1166 4291/773/1167 4287/769/1164 +f 4287/769/1164 4293/768/1163 4295/772/1166 +f 4296/763/1168 4293/762/1169 4294/765/1170 +f 4294/765/1170 4297/764/1170 4296/763/1168 +f 4298/767/1171 4295/766/1171 4293/762/1169 +f 4293/762/1169 4296/763/1168 4298/767/1171 +f 4288/774/1172 4296/768/1173 4297/771/1174 +f 4297/771/1174 4289/775/1174 4288/774/1172 +f 4292/776/1175 4298/777/1175 4296/768/1173 +f 4296/768/1173 4288/774/1172 4292/776/1175 +f 4299/778/1176 4300/779/1177 4301/780/1178 +f 4301/780/1178 4302/781/1178 4299/778/1176 +f 4303/782/1179 4304/783/1179 4300/779/1177 +f 4300/779/1177 4299/778/1176 4303/782/1179 +f 4305/784/1180 4299/785/1181 4302/786/1182 +f 4302/786/1182 4306/787/1182 4305/784/1180 +f 4307/788/1183 4303/789/1184 4299/785/1181 +f 4299/785/1181 4305/784/1180 4307/788/1183 +f 4308/790/1185 4305/791/1186 4306/792/1187 +f 4306/792/1187 4309/793/1187 4308/790/1185 +f 4310/794/1188 4307/795/1188 4305/791/1186 +f 4305/791/1186 4308/790/1185 4310/794/1188 +f 4300/785/1189 4308/796/1190 4309/787/1191 +f 4309/787/1191 4301/797/1191 4300/785/1189 +f 4304/789/1192 4310/798/1192 4308/796/1190 +f 4308/796/1190 4300/785/1189 4304/789/1192 +f 4311/799/37 4312/800/37 4313/801/37 +f 4313/801/37 4314/802/37 4311/799/37 +f 4315/803/958 4316/804/957 4317/805/1193 +f 4317/805/1193 4318/806/1193 4315/803/958 +f 4314/807/1194 4313/808/1194 4316/804/957 +f 4316/804/957 4315/803/958 4314/807/1194 +f 4319/809/1195 4315/810/1195 4318/811/1196 +f 4318/811/1196 4320/812/1196 4319/809/1195 +f 4311/813/1197 4314/814/1197 4315/810/1195 +f 4315/810/1195 4319/809/1195 4311/813/1197 +f 4321/804/997 4319/803/996 4320/806/1198 +f 4320/806/1198 4322/805/1198 4321/804/997 +f 4312/808/1199 4311/807/1199 4319/803/996 +f 4319/803/996 4321/804/997 4312/808/1199 +f 4316/815/1200 4321/809/1200 4322/816/1201 +f 4322/816/1201 4317/817/1201 4316/815/1200 +f 4313/818/1202 4312/819/1203 4321/809/1200 +f 4321/809/1200 4316/815/1200 4313/818/1202 +f 4323/820/37 4324/821/37 4325/822/37 +f 4325/822/37 4326/823/37 4323/820/37 +f 4327/824/1227 4328/825/1228 4329/826/1206 +f 4329/826/1206 4330/827/1206 4327/824/1227 +f 4326/828/1207 4325/829/1207 4328/825/1228 +f 4328/825/1228 4327/824/1227 4326/828/1207 +f 4331/737/1208 4327/738/1209 4330/734/1210 +f 4330/734/1210 4332/740/1210 4331/737/1208 +f 4323/741/1211 4326/735/1211 4327/738/1209 +f 4327/738/1209 4331/737/1208 4323/741/1211 +f 4333/825/1213 4331/824/1213 4332/827/1214 +f 4332/827/1214 4334/826/1214 4333/825/1213 +f 4324/829/1215 4323/828/1215 4331/824/1213 +f 4331/824/1213 4333/825/1213 4324/829/1215 +f 4328/731/1216 4333/737/1217 4334/733/1218 +f 4334/733/1218 4329/830/1218 4328/731/1216 +f 4325/831/1219 4324/736/1219 4333/737/1217 +f 4333/737/1217 4328/731/1216 4325/831/1219 +f 4335/832/37 4336/833/37 4337/834/37 +f 4337/834/37 4338/835/37 4335/832/37 +f 4339/836/1220 4340/837/1220 4341/838/1221 +f 4341/838/1221 4342/839/1221 4339/836/1220 +f 4338/840/1222 4337/841/1222 4340/837/1220 +f 4340/837/1220 4339/836/1220 4338/840/1222 +f 4343/737/989 4339/731/989 4342/734/990 +f 4342/734/990 4344/733/990 4343/737/989 +f 4335/741/1223 4338/735/1223 4339/731/989 +f 4339/731/989 4343/737/989 4335/741/1223 +f 4345/837/1224 4343/836/1224 4344/839/1225 +f 4344/839/1225 4346/838/1225 4345/837/1224 +f 4336/841/1226 4335/840/1226 4343/836/1224 +f 4343/836/1224 4345/837/1224 4336/841/1226 +f 4340/842/982 4345/732/982 4346/843/983 +f 4346/843/983 4341/734/983 4340/842/982 +f 4337/831/985 4336/736/985 4345/732/982 +f 4345/732/982 4340/842/982 4337/831/985 +f 4347/721/226 4348/722/226 4349/723/226 +f 4349/723/226 4350/724/226 4347/721/226 +f 4351/725/852 4352/726/748 4353/727/860 +f 4353/727/860 4354/728/860 4351/725/852 +f 4350/729/750 4349/730/750 4352/726/748 +f 4352/726/748 4351/725/852 4350/729/750 +f 4355/731/751 4351/732/752 4354/733/753 +f 4354/733/753 4356/734/753 4355/731/751 +f 4347/735/754 4350/736/1123 4351/732/752 +f 4351/732/752 4355/731/751 4347/735/754 +f 4357/726/755 4355/725/755 4356/728/756 +f 4356/728/756 4358/727/756 4357/726/755 +f 4348/730/757 4347/729/757 4355/725/755 +f 4355/725/755 4357/726/755 4348/730/757 +f 4352/737/758 4357/738/758 4358/739/759 +f 4358/739/759 4353/740/759 4352/737/758 +f 4349/741/760 4348/742/760 4357/738/758 +f 4357/738/758 4352/737/758 4349/741/760 +f 4359/743/226 4360/744/226 4361/745/226 +f 4361/745/226 4362/746/226 4359/743/226 +f 4363/747/761 4364/748/761 4365/749/762 +f 4365/749/762 4366/750/762 4363/747/761 +f 4362/751/763 4361/752/763 4364/748/761 +f 4364/748/761 4363/747/761 4362/751/763 +f 4367/753/764 4363/754/765 4366/755/766 +f 4366/755/766 4368/756/766 4367/753/764 +f 4359/757/767 4362/758/767 4363/754/765 +f 4363/754/765 4367/753/764 4359/757/767 +f 4369/748/768 4367/747/769 4368/750/770 +f 4368/750/770 4370/749/770 4369/748/768 +f 4360/752/771 4359/751/771 4367/747/769 +f 4367/747/769 4369/748/768 4360/752/771 +f 4364/754/772 4369/759/773 4370/760/774 +f 4370/760/774 4365/755/774 4364/754/772 +f 4361/758/775 4360/761/775 4369/759/773 +f 4369/759/773 4364/754/772 4361/758/775 +f 4371/762/776 4372/763/777 4373/764/778 +f 4373/764/778 4374/765/778 4371/762/776 +f 4375/766/779 4376/767/779 4372/763/777 +f 4372/763/777 4371/762/776 4375/766/779 +f 4377/768/780 4371/769/781 4374/770/782 +f 4374/770/782 4378/771/782 4377/768/780 +f 4379/772/783 4375/773/783 4371/769/781 +f 4371/769/781 4377/768/780 4379/772/783 +f 4380/763/784 4377/762/785 4378/765/786 +f 4378/765/786 4381/764/786 4380/763/784 +f 4382/767/787 4379/766/787 4377/762/785 +f 4377/762/785 4380/763/784 4382/767/787 +f 4372/774/788 4380/768/789 4381/771/790 +f 4381/771/790 4373/775/790 4372/774/788 +f 4376/776/791 4382/777/791 4380/768/789 +f 4380/768/789 4372/774/788 4376/776/791 +f 4383/778/792 4384/779/793 4385/780/794 +f 4385/780/794 4386/781/794 4383/778/792 +f 4387/782/795 4388/783/795 4384/779/793 +f 4384/779/793 4383/778/792 4387/782/795 +f 4389/784/796 4383/785/797 4386/786/798 +f 4386/786/798 4390/787/798 4389/784/796 +f 4391/788/799 4387/789/799 4383/785/797 +f 4383/785/797 4389/784/796 4391/788/799 +f 4392/790/800 4389/791/801 4390/792/802 +f 4390/792/802 4393/793/802 4392/790/800 +f 4394/794/803 4391/795/803 4389/791/801 +f 4389/791/801 4392/790/800 4394/794/803 +f 4384/785/804 4392/796/805 4393/787/806 +f 4393/787/806 4385/797/806 4384/785/804 +f 4388/789/807 4394/798/807 4392/796/805 +f 4392/796/805 4384/785/804 4388/789/807 +f 4395/799/226 4396/800/226 4397/801/226 +f 4397/801/226 4398/802/226 4395/799/226 +f 4399/803/855 4400/804/856 4401/805/810 +f 4401/805/810 4402/806/810 4399/803/855 +f 4398/807/811 4397/808/811 4400/804/856 +f 4400/804/856 4399/803/855 4398/807/811 +f 4403/809/812 4399/810/812 4402/811/1229 +f 4402/811/1229 4404/812/1229 4403/809/812 +f 4395/813/814 4398/814/814 4399/810/812 +f 4399/810/812 4403/809/812 4395/813/814 +f 4405/804/815 4403/803/816 4404/806/817 +f 4404/806/817 4406/805/817 4405/804/815 +f 4396/808/818 4395/807/818 4403/803/816 +f 4403/803/816 4405/804/815 4396/808/818 +f 4400/815/819 4405/809/819 4406/816/820 +f 4406/816/820 4401/817/820 4400/815/819 +f 4397/818/822 4396/819/822 4405/809/819 +f 4405/809/819 4400/815/819 4397/818/822 +f 4407/820/226 4408/821/226 4409/822/226 +f 4409/822/226 4410/823/226 4407/820/226 +f 4411/824/857 4412/825/858 4413/826/825 +f 4413/826/825 4414/827/825 4411/824/857 +f 4410/828/826 4409/829/826 4412/825/858 +f 4412/825/858 4411/824/857 4410/828/826 +f 4415/737/827 4411/738/828 4414/734/829 +f 4414/734/829 4416/740/829 4415/737/827 +f 4407/741/830 4410/735/830 4411/738/828 +f 4411/738/828 4415/737/827 4407/741/830 +f 4417/825/832 4415/824/832 4416/827/833 +f 4416/827/833 4418/826/833 4417/825/832 +f 4408/829/834 4407/828/834 4415/824/832 +f 4415/824/832 4417/825/832 4408/829/834 +f 4412/731/835 4417/737/836 4418/733/837 +f 4418/733/837 4413/830/837 4412/731/835 +f 4409/831/838 4408/736/838 4417/737/836 +f 4417/737/836 4412/731/835 4409/831/838 +f 4419/832/226 4420/833/226 4421/834/226 +f 4421/834/226 4422/835/226 4419/832/226 +f 4423/836/1230 4424/837/1230 4425/838/865 +f 4425/838/865 4426/839/865 4423/836/1230 +f 4422/840/841 4421/841/841 4424/837/1230 +f 4424/837/1230 4423/836/1230 4422/840/841 +f 4427/737/842 4423/731/842 4426/734/843 +f 4426/734/843 4428/733/843 4427/737/842 +f 4419/741/844 4422/735/844 4423/731/842 +f 4423/731/842 4427/737/842 4419/741/844 +f 4429/837/859 4427/836/859 4428/839/846 +f 4428/839/846 4430/838/846 4429/837/859 +f 4420/841/847 4419/840/847 4427/836/859 +f 4427/836/859 4429/837/859 4420/841/847 +f 4424/842/848 4429/732/848 4430/843/849 +f 4430/843/849 4425/734/849 4424/842/848 +f 4421/831/851 4420/736/851 4429/732/848 +f 4429/732/848 4424/842/848 4421/831/851 +f 4431/721/226 4432/722/226 4433/723/226 +f 4433/723/226 4434/724/226 4431/721/226 +f 4435/725/748 4436/726/748 4437/727/749 +f 4437/727/749 4438/728/749 4435/725/748 +f 4434/729/750 4433/730/750 4436/726/748 +f 4436/726/748 4435/725/748 4434/729/750 +f 4439/731/751 4435/732/752 4438/733/753 +f 4438/733/753 4440/734/753 4439/731/751 +f 4431/735/754 4434/736/1123 4435/732/752 +f 4435/732/752 4439/731/751 4431/735/754 +f 4441/726/755 4439/725/755 4440/728/756 +f 4440/728/756 4442/727/756 4441/726/755 +f 4432/730/757 4431/729/757 4439/725/755 +f 4439/725/755 4441/726/755 4432/730/757 +f 4436/737/758 4441/738/758 4442/739/759 +f 4442/739/759 4437/740/759 4436/737/758 +f 4433/741/760 4432/742/760 4441/738/758 +f 4441/738/758 4436/737/758 4433/741/760 +f 4443/743/226 4444/744/226 4445/745/226 +f 4445/745/226 4446/746/226 4443/743/226 +f 4447/747/761 4448/748/761 4449/749/762 +f 4449/749/762 4450/750/762 4447/747/761 +f 4446/751/763 4445/752/763 4448/748/761 +f 4448/748/761 4447/747/761 4446/751/763 +f 4451/753/764 4447/754/765 4450/755/766 +f 4450/755/766 4452/756/766 4451/753/764 +f 4443/757/767 4446/758/767 4447/754/765 +f 4447/754/765 4451/753/764 4443/757/767 +f 4453/748/768 4451/747/769 4452/750/770 +f 4452/750/770 4454/749/770 4453/748/768 +f 4444/752/771 4443/751/771 4451/747/769 +f 4451/747/769 4453/748/768 4444/752/771 +f 4448/754/772 4453/759/773 4454/760/774 +f 4454/760/774 4449/755/774 4448/754/772 +f 4445/758/775 4444/761/775 4453/759/773 +f 4453/759/773 4448/754/772 4445/758/775 +f 4455/762/776 4456/763/777 4457/764/778 +f 4457/764/778 4458/765/778 4455/762/776 +f 4459/766/779 4460/767/779 4456/763/777 +f 4456/763/777 4455/762/776 4459/766/779 +f 4461/768/780 4455/769/781 4458/770/782 +f 4458/770/782 4462/771/782 4461/768/780 +f 4463/772/783 4459/773/783 4455/769/781 +f 4455/769/781 4461/768/780 4463/772/783 +f 4464/763/784 4461/762/785 4462/765/786 +f 4462/765/786 4465/764/786 4464/763/784 +f 4466/767/787 4463/766/787 4461/762/785 +f 4461/762/785 4464/763/784 4466/767/787 +f 4456/774/788 4464/768/789 4465/771/790 +f 4465/771/790 4457/775/790 4456/774/788 +f 4460/776/791 4466/777/791 4464/768/789 +f 4464/768/789 4456/774/788 4460/776/791 +f 4467/778/792 4468/779/793 4469/780/794 +f 4469/780/794 4470/781/794 4467/778/792 +f 4471/782/795 4472/783/795 4468/779/793 +f 4468/779/793 4467/778/792 4471/782/795 +f 4473/784/796 4467/785/797 4470/786/798 +f 4470/786/798 4474/787/798 4473/784/796 +f 4475/788/799 4471/789/799 4467/785/797 +f 4467/785/797 4473/784/796 4475/788/799 +f 4476/790/800 4473/791/801 4474/792/802 +f 4474/792/802 4477/793/802 4476/790/800 +f 4478/794/803 4475/795/803 4473/791/801 +f 4473/791/801 4476/790/800 4478/794/803 +f 4468/785/804 4476/796/805 4477/787/806 +f 4477/787/806 4469/797/806 4468/785/804 +f 4472/789/807 4478/798/807 4476/796/805 +f 4476/796/805 4468/785/804 4472/789/807 +f 4479/799/226 4480/800/226 4481/801/226 +f 4481/801/226 4482/802/226 4479/799/226 +f 4483/803/808 4484/804/809 4485/805/810 +f 4485/805/810 4486/806/810 4483/803/808 +f 4482/807/811 4481/808/811 4484/804/809 +f 4484/804/809 4483/803/808 4482/807/811 +f 4487/809/812 4483/810/812 4486/811/1229 +f 4486/811/1229 4488/812/1229 4487/809/812 +f 4479/813/814 4482/814/814 4483/810/812 +f 4483/810/812 4487/809/812 4479/813/814 +f 4489/804/815 4487/803/816 4488/806/817 +f 4488/806/817 4490/805/817 4489/804/815 +f 4480/808/818 4479/807/818 4487/803/816 +f 4487/803/816 4489/804/815 4480/808/818 +f 4484/815/819 4489/809/819 4490/816/820 +f 4490/816/820 4485/817/820 4484/815/819 +f 4481/818/822 4480/819/822 4489/809/819 +f 4489/809/819 4484/815/819 4481/818/822 +f 4491/820/226 4492/821/226 4493/822/226 +f 4493/822/226 4494/823/226 4491/820/226 +f 4495/824/823 4496/825/824 4497/826/825 +f 4497/826/825 4498/827/825 4495/824/823 +f 4494/828/1231 4493/829/826 4496/825/824 +f 4496/825/824 4495/824/823 4494/828/1231 +f 4499/737/827 4495/738/828 4498/734/829 +f 4498/734/829 4500/740/829 4499/737/827 +f 4491/741/830 4494/735/830 4495/738/828 +f 4495/738/828 4499/737/827 4491/741/830 +f 4501/825/831 4499/824/832 4500/827/833 +f 4500/827/833 4502/826/833 4501/825/831 +f 4492/829/834 4491/828/834 4499/824/832 +f 4499/824/832 4501/825/831 4492/829/834 +f 4496/731/835 4501/737/836 4502/733/837 +f 4502/733/837 4497/830/837 4496/731/835 +f 4493/831/838 4492/736/838 4501/737/836 +f 4501/737/836 4496/731/835 4493/831/838 +f 4503/832/226 4504/833/226 4505/834/226 +f 4505/834/226 4506/835/226 4503/832/226 +f 4507/836/839 4508/837/839 4509/838/840 +f 4509/838/840 4510/839/840 4507/836/839 +f 4506/840/841 4505/841/841 4508/837/839 +f 4508/837/839 4507/836/839 4506/840/841 +f 4511/737/842 4507/731/842 4510/734/843 +f 4510/734/843 4512/733/843 4511/737/842 +f 4503/741/844 4506/735/844 4507/731/842 +f 4507/731/842 4511/737/842 4503/741/844 +f 4513/837/845 4511/836/845 4512/839/846 +f 4512/839/846 4514/838/846 4513/837/845 +f 4504/841/847 4503/840/847 4511/836/845 +f 4511/836/845 4513/837/845 4504/841/847 +f 4508/842/867 4513/732/848 4514/843/849 +f 4514/843/849 4509/734/849 4508/842/867 +f 4505/831/851 4504/736/851 4513/732/848 +f 4513/732/848 4508/842/867 4505/831/851 +f 4515/721/226 4516/722/226 4517/723/226 +f 4517/723/226 4518/724/226 4515/721/226 +f 4519/725/748 4520/726/748 4521/727/749 +f 4521/727/749 4522/728/749 4519/725/748 +f 4518/729/750 4517/730/750 4520/726/748 +f 4520/726/748 4519/725/748 4518/729/750 +f 4523/731/751 4519/732/752 4522/733/753 +f 4522/733/753 4524/734/753 4523/731/751 +f 4515/735/754 4518/736/1123 4519/732/752 +f 4519/732/752 4523/731/751 4515/735/754 +f 4525/726/755 4523/725/755 4524/728/756 +f 4524/728/756 4526/727/756 4525/726/755 +f 4516/730/757 4515/729/757 4523/725/755 +f 4523/725/755 4525/726/755 4516/730/757 +f 4520/737/758 4525/738/758 4526/739/759 +f 4526/739/759 4521/740/759 4520/737/758 +f 4517/741/760 4516/742/760 4525/738/758 +f 4525/738/758 4520/737/758 4517/741/760 +f 4527/743/226 4528/744/226 4529/745/226 +f 4529/745/226 4530/746/226 4527/743/226 +f 4531/747/761 4532/748/761 4533/749/762 +f 4533/749/762 4534/750/762 4531/747/761 +f 4530/751/763 4529/752/763 4532/748/761 +f 4532/748/761 4531/747/761 4530/751/763 +f 4535/753/764 4531/754/765 4534/755/766 +f 4534/755/766 4536/756/766 4535/753/764 +f 4527/757/767 4530/758/767 4531/754/765 +f 4531/754/765 4535/753/764 4527/757/767 +f 4537/748/768 4535/747/769 4536/750/770 +f 4536/750/770 4538/749/770 4537/748/768 +f 4528/752/771 4527/751/771 4535/747/769 +f 4535/747/769 4537/748/768 4528/752/771 +f 4532/754/772 4537/759/773 4538/760/774 +f 4538/760/774 4533/755/774 4532/754/772 +f 4529/758/775 4528/761/775 4537/759/773 +f 4537/759/773 4532/754/772 4529/758/775 +f 4539/762/776 4540/763/777 4541/764/778 +f 4541/764/778 4542/765/778 4539/762/776 +f 4543/766/779 4544/767/779 4540/763/777 +f 4540/763/777 4539/762/776 4543/766/779 +f 4545/768/780 4539/769/781 4542/770/782 +f 4542/770/782 4546/771/782 4545/768/780 +f 4547/772/783 4543/773/783 4539/769/781 +f 4539/769/781 4545/768/780 4547/772/783 +f 4548/763/784 4545/762/785 4546/765/786 +f 4546/765/786 4549/764/786 4548/763/784 +f 4550/767/787 4547/766/787 4545/762/785 +f 4545/762/785 4548/763/784 4550/767/787 +f 4540/774/788 4548/768/789 4549/771/790 +f 4549/771/790 4541/775/790 4540/774/788 +f 4544/776/791 4550/777/791 4548/768/789 +f 4548/768/789 4540/774/788 4544/776/791 +f 4551/778/792 4552/779/793 4553/780/794 +f 4553/780/794 4554/781/794 4551/778/792 +f 4555/782/795 4556/783/795 4552/779/793 +f 4552/779/793 4551/778/792 4555/782/795 +f 4557/784/796 4551/785/797 4554/786/798 +f 4554/786/798 4558/787/798 4557/784/796 +f 4559/788/799 4555/789/799 4551/785/797 +f 4551/785/797 4557/784/796 4559/788/799 +f 4560/790/800 4557/791/801 4558/792/802 +f 4558/792/802 4561/793/802 4560/790/800 +f 4562/794/803 4559/795/803 4557/791/801 +f 4557/791/801 4560/790/800 4562/794/803 +f 4552/785/804 4560/796/805 4561/787/806 +f 4561/787/806 4553/797/806 4552/785/804 +f 4556/789/807 4562/798/807 4560/796/805 +f 4560/796/805 4552/785/804 4556/789/807 +f 4563/799/226 4564/800/226 4565/801/226 +f 4565/801/226 4566/802/226 4563/799/226 +f 4567/803/808 4568/804/809 4569/805/810 +f 4569/805/810 4570/806/810 4567/803/808 +f 4566/807/811 4565/808/811 4568/804/809 +f 4568/804/809 4567/803/808 4566/807/811 +f 4571/809/812 4567/810/812 4570/811/1229 +f 4570/811/1229 4572/812/1229 4571/809/812 +f 4563/813/814 4566/814/814 4567/810/812 +f 4567/810/812 4571/809/812 4563/813/814 +f 4573/804/815 4571/803/816 4572/806/817 +f 4572/806/817 4574/805/817 4573/804/815 +f 4564/808/818 4563/807/818 4571/803/816 +f 4571/803/816 4573/804/815 4564/808/818 +f 4568/815/819 4573/809/819 4574/816/820 +f 4574/816/820 4569/817/820 4568/815/819 +f 4565/818/822 4564/819/822 4573/809/819 +f 4573/809/819 4568/815/819 4565/818/822 +f 4575/820/226 4576/821/226 4577/822/226 +f 4577/822/226 4578/823/226 4575/820/226 +f 4579/824/823 4580/825/824 4581/826/825 +f 4581/826/825 4582/827/825 4579/824/823 +f 4578/828/826 4577/829/826 4580/825/824 +f 4580/825/824 4579/824/823 4578/828/826 +f 4583/737/827 4579/738/828 4582/734/829 +f 4582/734/829 4584/740/829 4583/737/827 +f 4575/741/830 4578/735/830 4579/738/828 +f 4579/738/828 4583/737/827 4575/741/830 +f 4585/825/831 4583/824/832 4584/827/833 +f 4584/827/833 4586/826/833 4585/825/831 +f 4576/829/834 4575/828/834 4583/824/832 +f 4583/824/832 4585/825/831 4576/829/834 +f 4580/731/835 4585/737/836 4586/733/837 +f 4586/733/837 4581/830/837 4580/731/835 +f 4577/831/838 4576/736/838 4585/737/836 +f 4585/737/836 4580/731/835 4577/831/838 +f 4587/832/226 4588/833/226 4589/834/226 +f 4589/834/226 4590/835/226 4587/832/226 +f 4591/836/839 4592/837/839 4593/838/840 +f 4593/838/840 4594/839/840 4591/836/839 +f 4590/840/841 4589/841/841 4592/837/839 +f 4592/837/839 4591/836/839 4590/840/841 +f 4595/737/842 4591/731/842 4594/734/843 +f 4594/734/843 4596/733/843 4595/737/842 +f 4587/741/844 4590/735/844 4591/731/842 +f 4591/731/842 4595/737/842 4587/741/844 +f 4597/837/845 4595/836/845 4596/839/846 +f 4596/839/846 4598/838/846 4597/837/845 +f 4588/841/847 4587/840/847 4595/836/845 +f 4595/836/845 4597/837/845 4588/841/847 +f 4592/842/867 4597/732/848 4598/843/849 +f 4598/843/849 4593/734/849 4592/842/867 +f 4589/831/851 4588/736/851 4597/732/848 +f 4597/732/848 4592/842/867 4589/831/851 +f 4599/721/226 4600/722/226 4601/723/226 +f 4601/723/226 4602/724/226 4599/721/226 +f 4603/725/748 4604/726/748 4605/727/749 +f 4605/727/749 4606/728/749 4603/725/748 +f 4602/729/750 4601/730/750 4604/726/748 +f 4604/726/748 4603/725/748 4602/729/750 +f 4607/731/751 4603/732/752 4606/733/753 +f 4606/733/753 4608/734/753 4607/731/751 +f 4599/735/754 4602/736/1123 4603/732/752 +f 4603/732/752 4607/731/751 4599/735/754 +f 4609/726/755 4607/725/755 4608/728/756 +f 4608/728/756 4610/727/756 4609/726/755 +f 4600/730/757 4599/729/757 4607/725/755 +f 4607/725/755 4609/726/755 4600/730/757 +f 4604/737/758 4609/738/758 4610/739/759 +f 4610/739/759 4605/740/759 4604/737/758 +f 4601/741/760 4600/742/760 4609/738/758 +f 4609/738/758 4604/737/758 4601/741/760 +f 4611/743/226 4612/744/226 4613/745/226 +f 4613/745/226 4614/746/226 4611/743/226 +f 4615/747/761 4616/748/761 4617/749/762 +f 4617/749/762 4618/750/762 4615/747/761 +f 4614/751/763 4613/752/763 4616/748/761 +f 4616/748/761 4615/747/761 4614/751/763 +f 4619/753/764 4615/754/765 4618/755/766 +f 4618/755/766 4620/756/766 4619/753/764 +f 4611/757/767 4614/758/767 4615/754/765 +f 4615/754/765 4619/753/764 4611/757/767 +f 4621/748/768 4619/747/769 4620/750/770 +f 4620/750/770 4622/749/770 4621/748/768 +f 4612/752/771 4611/751/771 4619/747/769 +f 4619/747/769 4621/748/768 4612/752/771 +f 4616/754/772 4621/759/773 4622/760/774 +f 4622/760/774 4617/755/774 4616/754/772 +f 4613/758/775 4612/761/775 4621/759/773 +f 4621/759/773 4616/754/772 4613/758/775 +f 4623/762/776 4624/763/777 4625/764/778 +f 4625/764/778 4626/765/778 4623/762/776 +f 4627/766/779 4628/767/779 4624/763/777 +f 4624/763/777 4623/762/776 4627/766/779 +f 4629/768/780 4623/769/781 4626/770/782 +f 4626/770/782 4630/771/782 4629/768/780 +f 4631/772/783 4627/773/783 4623/769/781 +f 4623/769/781 4629/768/780 4631/772/783 +f 4632/763/784 4629/762/785 4630/765/786 +f 4630/765/786 4633/764/786 4632/763/784 +f 4634/767/787 4631/766/787 4629/762/785 +f 4629/762/785 4632/763/784 4634/767/787 +f 4624/774/788 4632/768/789 4633/771/790 +f 4633/771/790 4625/775/790 4624/774/788 +f 4628/776/791 4634/777/791 4632/768/789 +f 4632/768/789 4624/774/788 4628/776/791 +f 4635/778/792 4636/779/793 4637/780/794 +f 4637/780/794 4638/781/794 4635/778/792 +f 4639/782/795 4640/783/795 4636/779/793 +f 4636/779/793 4635/778/792 4639/782/795 +f 4641/784/796 4635/785/797 4638/786/798 +f 4638/786/798 4642/787/798 4641/784/796 +f 4643/788/799 4639/789/799 4635/785/797 +f 4635/785/797 4641/784/796 4643/788/799 +f 4644/790/800 4641/791/801 4642/792/802 +f 4642/792/802 4645/793/802 4644/790/800 +f 4646/794/803 4643/795/803 4641/791/801 +f 4641/791/801 4644/790/800 4646/794/803 +f 4636/785/804 4644/796/805 4645/787/806 +f 4645/787/806 4637/797/806 4636/785/804 +f 4640/789/807 4646/798/807 4644/796/805 +f 4644/796/805 4636/785/804 4640/789/807 +f 4647/799/226 4648/800/226 4649/801/226 +f 4649/801/226 4650/802/226 4647/799/226 +f 4651/803/808 4652/804/809 4653/805/810 +f 4653/805/810 4654/806/810 4651/803/808 +f 4650/807/811 4649/808/811 4652/804/809 +f 4652/804/809 4651/803/808 4650/807/811 +f 4655/809/812 4651/810/812 4654/811/1229 +f 4654/811/1229 4656/812/1229 4655/809/812 +f 4647/813/814 4650/814/814 4651/810/812 +f 4651/810/812 4655/809/812 4647/813/814 +f 4657/804/815 4655/803/816 4656/806/817 +f 4656/806/817 4658/805/817 4657/804/815 +f 4648/808/818 4647/807/818 4655/803/816 +f 4655/803/816 4657/804/815 4648/808/818 +f 4652/815/819 4657/809/819 4658/816/820 +f 4658/816/820 4653/817/820 4652/815/819 +f 4649/818/822 4648/819/822 4657/809/819 +f 4657/809/819 4652/815/819 4649/818/822 +f 4659/820/226 4660/821/226 4661/822/226 +f 4661/822/226 4662/823/226 4659/820/226 +f 4663/824/823 4664/825/824 4665/826/825 +f 4665/826/825 4666/827/825 4663/824/823 +f 4662/828/1231 4661/829/826 4664/825/824 +f 4664/825/824 4663/824/823 4662/828/1231 +f 4667/737/827 4663/738/828 4666/734/829 +f 4666/734/829 4668/740/829 4667/737/827 +f 4659/741/830 4662/735/830 4663/738/828 +f 4663/738/828 4667/737/827 4659/741/830 +f 4669/825/831 4667/824/832 4668/827/833 +f 4668/827/833 4670/826/833 4669/825/831 +f 4660/829/834 4659/828/834 4667/824/832 +f 4667/824/832 4669/825/831 4660/829/834 +f 4664/731/835 4669/737/836 4670/733/837 +f 4670/733/837 4665/830/837 4664/731/835 +f 4661/831/838 4660/736/838 4669/737/836 +f 4669/737/836 4664/731/835 4661/831/838 +f 4671/832/226 4672/833/226 4673/834/226 +f 4673/834/226 4674/835/226 4671/832/226 +f 4675/836/839 4676/837/839 4677/838/840 +f 4677/838/840 4678/839/840 4675/836/839 +f 4674/840/841 4673/841/841 4676/837/839 +f 4676/837/839 4675/836/839 4674/840/841 +f 4679/737/842 4675/731/842 4678/734/843 +f 4678/734/843 4680/733/843 4679/737/842 +f 4671/741/844 4674/735/844 4675/731/842 +f 4675/731/842 4679/737/842 4671/741/844 +f 4681/837/845 4679/836/845 4680/839/846 +f 4680/839/846 4682/838/846 4681/837/845 +f 4672/841/847 4671/840/847 4679/836/845 +f 4679/836/845 4681/837/845 4672/841/847 +f 4676/842/867 4681/732/848 4682/843/849 +f 4682/843/849 4677/734/849 4676/842/867 +f 4673/831/851 4672/736/851 4681/732/848 +f 4681/732/848 4676/842/867 4673/831/851 +f 4683/721/226 4684/722/226 4685/723/226 +f 4685/723/226 4686/724/226 4683/721/226 +f 4687/725/852 4688/726/748 4689/727/860 +f 4689/727/860 4690/728/860 4687/725/852 +f 4686/729/750 4685/730/750 4688/726/748 +f 4688/726/748 4687/725/852 4686/729/750 +f 4691/731/751 4687/732/752 4690/733/753 +f 4690/733/753 4692/734/753 4691/731/751 +f 4683/735/754 4686/736/1123 4687/732/752 +f 4687/732/752 4691/731/751 4683/735/754 +f 4693/726/755 4691/725/755 4692/728/756 +f 4692/728/756 4694/727/756 4693/726/755 +f 4684/730/757 4683/729/757 4691/725/755 +f 4691/725/755 4693/726/755 4684/730/757 +f 4688/737/758 4693/738/758 4694/739/759 +f 4694/739/759 4689/740/759 4688/737/758 +f 4685/741/760 4684/742/760 4693/738/758 +f 4693/738/758 4688/737/758 4685/741/760 +f 4695/743/226 4696/744/226 4697/745/226 +f 4697/745/226 4698/746/226 4695/743/226 +f 4699/747/761 4700/748/761 4701/749/762 +f 4701/749/762 4702/750/762 4699/747/761 +f 4698/751/763 4697/752/763 4700/748/761 +f 4700/748/761 4699/747/761 4698/751/763 +f 4703/753/764 4699/754/765 4702/755/766 +f 4702/755/766 4704/756/766 4703/753/764 +f 4695/757/767 4698/758/767 4699/754/765 +f 4699/754/765 4703/753/764 4695/757/767 +f 4705/748/768 4703/747/769 4704/750/770 +f 4704/750/770 4706/749/770 4705/748/768 +f 4696/752/771 4695/751/771 4703/747/769 +f 4703/747/769 4705/748/768 4696/752/771 +f 4700/754/772 4705/759/773 4706/760/774 +f 4706/760/774 4701/755/774 4700/754/772 +f 4697/758/775 4696/761/775 4705/759/773 +f 4705/759/773 4700/754/772 4697/758/775 +f 4707/762/776 4708/763/777 4709/764/778 +f 4709/764/778 4710/765/778 4707/762/776 +f 4711/766/779 4712/767/779 4708/763/777 +f 4708/763/777 4707/762/776 4711/766/779 +f 4713/768/780 4707/769/781 4710/770/782 +f 4710/770/782 4714/771/782 4713/768/780 +f 4715/772/783 4711/773/783 4707/769/781 +f 4707/769/781 4713/768/780 4715/772/783 +f 4716/763/784 4713/762/785 4714/765/786 +f 4714/765/786 4717/764/786 4716/763/784 +f 4718/767/787 4715/766/787 4713/762/785 +f 4713/762/785 4716/763/784 4718/767/787 +f 4708/774/788 4716/768/789 4717/771/790 +f 4717/771/790 4709/775/790 4708/774/788 +f 4712/776/791 4718/777/791 4716/768/789 +f 4716/768/789 4708/774/788 4712/776/791 +f 4719/778/792 4720/779/793 4721/780/794 +f 4721/780/794 4722/781/794 4719/778/792 +f 4723/782/795 4724/783/795 4720/779/793 +f 4720/779/793 4719/778/792 4723/782/795 +f 4725/784/796 4719/785/797 4722/786/798 +f 4722/786/798 4726/787/798 4725/784/796 +f 4727/788/799 4723/789/799 4719/785/797 +f 4719/785/797 4725/784/796 4727/788/799 +f 4728/790/800 4725/791/801 4726/792/802 +f 4726/792/802 4729/793/802 4728/790/800 +f 4730/794/803 4727/795/803 4725/791/801 +f 4725/791/801 4728/790/800 4730/794/803 +f 4720/785/804 4728/796/805 4729/787/806 +f 4729/787/806 4721/797/806 4720/785/804 +f 4724/789/807 4730/798/807 4728/796/805 +f 4728/796/805 4720/785/804 4724/789/807 +f 4731/799/226 4732/800/226 4733/801/226 +f 4733/801/226 4734/802/226 4731/799/226 +f 4735/803/808 4736/804/809 4737/805/810 +f 4737/805/810 4738/806/810 4735/803/808 +f 4734/807/811 4733/808/811 4736/804/809 +f 4736/804/809 4735/803/808 4734/807/811 +f 4739/809/812 4735/810/812 4738/811/1229 +f 4738/811/1229 4740/812/1229 4739/809/812 +f 4731/813/814 4734/814/814 4735/810/812 +f 4735/810/812 4739/809/812 4731/813/814 +f 4741/804/815 4739/803/816 4740/806/817 +f 4740/806/817 4742/805/817 4741/804/815 +f 4732/808/818 4731/807/818 4739/803/816 +f 4739/803/816 4741/804/815 4732/808/818 +f 4736/815/819 4741/809/819 4742/816/820 +f 4742/816/820 4737/817/820 4736/815/819 +f 4733/818/822 4732/819/822 4741/809/819 +f 4741/809/819 4736/815/819 4733/818/822 +f 4743/820/226 4744/821/226 4745/822/226 +f 4745/822/226 4746/823/226 4743/820/226 +f 4747/824/857 4748/825/858 4749/826/825 +f 4749/826/825 4750/827/825 4747/824/857 +f 4746/828/826 4745/829/826 4748/825/858 +f 4748/825/858 4747/824/857 4746/828/826 +f 4751/737/827 4747/738/828 4750/734/829 +f 4750/734/829 4752/740/829 4751/737/827 +f 4743/741/830 4746/735/830 4747/738/828 +f 4747/738/828 4751/737/827 4743/741/830 +f 4753/825/831 4751/824/832 4752/827/833 +f 4752/827/833 4754/826/833 4753/825/831 +f 4744/829/834 4743/828/834 4751/824/832 +f 4751/824/832 4753/825/831 4744/829/834 +f 4748/731/835 4753/737/836 4754/733/837 +f 4754/733/837 4749/830/837 4748/731/835 +f 4745/831/838 4744/736/838 4753/737/836 +f 4753/737/836 4748/731/835 4745/831/838 +f 4755/832/226 4756/833/226 4757/834/226 +f 4757/834/226 4758/835/226 4755/832/226 +f 4759/836/1230 4760/837/1230 4761/838/840 +f 4761/838/840 4762/839/840 4759/836/1230 +f 4758/840/841 4757/841/841 4760/837/1230 +f 4760/837/1230 4759/836/1230 4758/840/841 +f 4763/737/842 4759/731/842 4762/734/843 +f 4762/734/843 4764/733/843 4763/737/842 +f 4755/741/844 4758/735/844 4759/731/842 +f 4759/731/842 4763/737/842 4755/741/844 +f 4765/837/859 4763/836/859 4764/839/846 +f 4764/839/846 4766/838/846 4765/837/859 +f 4756/841/847 4755/840/847 4763/836/859 +f 4763/836/859 4765/837/859 4756/841/847 +f 4760/842/848 4765/732/848 4766/843/849 +f 4766/843/849 4761/734/849 4760/842/848 +f 4757/831/851 4756/736/851 4765/732/848 +f 4765/732/848 4760/842/848 4757/831/851 +f 4767/721/226 4768/722/226 4769/723/226 +f 4769/723/226 4770/724/226 4767/721/226 +f 4771/725/748 4772/726/748 4773/727/749 +f 4773/727/749 4774/728/749 4771/725/748 +f 4770/729/750 4769/730/750 4772/726/748 +f 4772/726/748 4771/725/748 4770/729/750 +f 4775/731/751 4771/732/752 4774/733/753 +f 4774/733/753 4776/734/753 4775/731/751 +f 4767/735/754 4770/736/1123 4771/732/752 +f 4771/732/752 4775/731/751 4767/735/754 +f 4777/726/755 4775/725/755 4776/728/756 +f 4776/728/756 4778/727/756 4777/726/755 +f 4768/730/757 4767/729/757 4775/725/755 +f 4775/725/755 4777/726/755 4768/730/757 +f 4772/737/758 4777/738/758 4778/739/759 +f 4778/739/759 4773/740/759 4772/737/758 +f 4769/741/760 4768/742/760 4777/738/758 +f 4777/738/758 4772/737/758 4769/741/760 +f 4779/743/226 4780/744/226 4781/745/226 +f 4781/745/226 4782/746/226 4779/743/226 +f 4783/747/883 4784/748/884 4785/749/762 +f 4785/749/762 4786/750/762 4783/747/883 +f 4782/751/763 4781/752/763 4784/748/884 +f 4784/748/884 4783/747/883 4782/751/763 +f 4787/753/764 4783/754/765 4786/755/766 +f 4786/755/766 4788/756/766 4787/753/764 +f 4779/757/767 4782/758/767 4783/754/765 +f 4783/754/765 4787/753/764 4779/757/767 +f 4789/748/768 4787/747/769 4788/750/770 +f 4788/750/770 4790/749/770 4789/748/768 +f 4780/752/771 4779/751/771 4787/747/769 +f 4787/747/769 4789/748/768 4780/752/771 +f 4784/754/772 4789/759/773 4790/760/774 +f 4790/760/774 4785/755/774 4784/754/772 +f 4781/758/775 4780/761/775 4789/759/773 +f 4789/759/773 4784/754/772 4781/758/775 +f 4791/762/776 4792/763/777 4793/764/778 +f 4793/764/778 4794/765/778 4791/762/776 +f 4795/766/779 4796/767/779 4792/763/777 +f 4792/763/777 4791/762/776 4795/766/779 +f 4797/768/780 4791/769/781 4794/770/782 +f 4794/770/782 4798/771/782 4797/768/780 +f 4799/772/783 4795/773/783 4791/769/781 +f 4791/769/781 4797/768/780 4799/772/783 +f 4800/763/784 4797/762/785 4798/765/786 +f 4798/765/786 4801/764/786 4800/763/784 +f 4802/767/787 4799/766/787 4797/762/785 +f 4797/762/785 4800/763/784 4802/767/787 +f 4792/774/788 4800/768/789 4801/771/790 +f 4801/771/790 4793/775/790 4792/774/788 +f 4796/776/791 4802/777/791 4800/768/789 +f 4800/768/789 4792/774/788 4796/776/791 +f 4803/778/868 4804/779/793 4805/780/794 +f 4805/780/794 4806/781/794 4803/778/868 +f 4807/782/795 4808/783/795 4804/779/793 +f 4804/779/793 4803/778/868 4807/782/795 +f 4809/784/796 4803/785/797 4806/786/798 +f 4806/786/798 4810/787/798 4809/784/796 +f 4811/788/799 4807/789/799 4803/785/797 +f 4803/785/797 4809/784/796 4811/788/799 +f 4812/790/853 4809/791/854 4810/792/802 +f 4810/792/802 4813/793/802 4812/790/853 +f 4814/794/803 4811/795/803 4809/791/854 +f 4809/791/854 4812/790/853 4814/794/803 +f 4804/785/804 4812/796/805 4813/787/806 +f 4813/787/806 4805/797/806 4804/785/804 +f 4808/789/807 4814/798/807 4812/796/805 +f 4812/796/805 4804/785/804 4808/789/807 +f 4815/799/226 4816/800/226 4817/801/226 +f 4817/801/226 4818/802/226 4815/799/226 +f 4819/803/808 4820/804/809 4821/805/810 +f 4821/805/810 4822/806/810 4819/803/808 +f 4818/807/811 4817/808/811 4820/804/809 +f 4820/804/809 4819/803/808 4818/807/811 +f 4823/809/812 4819/810/812 4822/811/1229 +f 4822/811/1229 4824/812/1229 4823/809/812 +f 4815/813/814 4818/814/814 4819/810/812 +f 4819/810/812 4823/809/812 4815/813/814 +f 4825/804/815 4823/803/816 4824/806/817 +f 4824/806/817 4826/805/817 4825/804/815 +f 4816/808/818 4815/807/818 4823/803/816 +f 4823/803/816 4825/804/815 4816/808/818 +f 4820/815/819 4825/809/819 4826/816/820 +f 4826/816/820 4821/817/820 4820/815/819 +f 4817/818/822 4816/819/822 4825/809/819 +f 4825/809/819 4820/815/819 4817/818/822 +f 4827/820/226 4828/821/226 4829/822/226 +f 4829/822/226 4830/823/226 4827/820/226 +f 4831/824/857 4832/825/858 4833/826/825 +f 4833/826/825 4834/827/825 4831/824/857 +f 4830/828/826 4829/829/826 4832/825/858 +f 4832/825/858 4831/824/857 4830/828/826 +f 4835/737/827 4831/738/828 4834/734/829 +f 4834/734/829 4836/740/829 4835/737/827 +f 4827/741/830 4830/735/830 4831/738/828 +f 4831/738/828 4835/737/827 4827/741/830 +f 4837/825/831 4835/824/832 4836/827/833 +f 4836/827/833 4838/826/833 4837/825/831 +f 4828/829/834 4827/828/834 4835/824/832 +f 4835/824/832 4837/825/831 4828/829/834 +f 4832/731/835 4837/737/836 4838/733/837 +f 4838/733/837 4833/830/837 4832/731/835 +f 4829/831/838 4828/736/838 4837/737/836 +f 4837/737/836 4832/731/835 4829/831/838 +f 4839/832/226 4840/833/226 4841/834/226 +f 4841/834/226 4842/835/226 4839/832/226 +f 4843/836/839 4844/837/839 4845/838/840 +f 4845/838/840 4846/839/840 4843/836/839 +f 4842/840/861 4841/841/861 4844/837/839 +f 4844/837/839 4843/836/839 4842/840/861 +f 4847/737/842 4843/731/842 4846/734/843 +f 4846/734/843 4848/733/843 4847/737/842 +f 4839/741/844 4842/735/844 4843/731/842 +f 4843/731/842 4847/737/842 4839/741/844 +f 4849/837/845 4847/836/845 4848/839/846 +f 4848/839/846 4850/838/846 4849/837/845 +f 4840/841/847 4839/840/847 4847/836/845 +f 4847/836/845 4849/837/845 4840/841/847 +f 4844/842/867 4849/732/848 4850/843/849 +f 4850/843/849 4845/734/849 4844/842/867 +f 4841/831/851 4840/736/851 4849/732/848 +f 4849/732/848 4844/842/867 4841/831/851 +f 4851/721/226 4852/722/226 4853/723/226 +f 4853/723/226 4854/724/226 4851/721/226 +f 4855/725/852 4856/726/748 4857/727/749 +f 4857/727/749 4858/728/749 4855/725/852 +f 4854/729/750 4853/730/750 4856/726/748 +f 4856/726/748 4855/725/852 4854/729/750 +f 4859/731/751 4855/732/752 4858/733/753 +f 4858/733/753 4860/734/753 4859/731/751 +f 4851/735/754 4854/736/1123 4855/732/752 +f 4855/732/752 4859/731/751 4851/735/754 +f 4861/726/755 4859/725/755 4860/728/756 +f 4860/728/756 4862/727/756 4861/726/755 +f 4852/730/757 4851/729/757 4859/725/755 +f 4859/725/755 4861/726/755 4852/730/757 +f 4856/737/758 4861/738/758 4862/739/759 +f 4862/739/759 4857/740/759 4856/737/758 +f 4853/741/760 4852/742/760 4861/738/758 +f 4861/738/758 4856/737/758 4853/741/760 +f 4863/743/226 4864/744/226 4865/745/226 +f 4865/745/226 4866/746/226 4863/743/226 +f 4867/747/761 4868/748/761 4869/749/762 +f 4869/749/762 4870/750/762 4867/747/761 +f 4866/751/763 4865/752/763 4868/748/761 +f 4868/748/761 4867/747/761 4866/751/763 +f 4871/753/764 4867/754/765 4870/755/766 +f 4870/755/766 4872/756/766 4871/753/764 +f 4863/757/767 4866/758/767 4867/754/765 +f 4867/754/765 4871/753/764 4863/757/767 +f 4873/748/768 4871/747/769 4872/750/770 +f 4872/750/770 4874/749/770 4873/748/768 +f 4864/752/771 4863/751/771 4871/747/769 +f 4871/747/769 4873/748/768 4864/752/771 +f 4868/754/772 4873/759/773 4874/760/774 +f 4874/760/774 4869/755/774 4868/754/772 +f 4865/758/775 4864/761/775 4873/759/773 +f 4873/759/773 4868/754/772 4865/758/775 +f 4875/762/776 4876/763/777 4877/764/778 +f 4877/764/778 4878/765/778 4875/762/776 +f 4879/766/779 4880/767/779 4876/763/777 +f 4876/763/777 4875/762/776 4879/766/779 +f 4881/768/780 4875/769/781 4878/770/782 +f 4878/770/782 4882/771/782 4881/768/780 +f 4883/772/783 4879/773/783 4875/769/781 +f 4875/769/781 4881/768/780 4883/772/783 +f 4884/763/784 4881/762/785 4882/765/786 +f 4882/765/786 4885/764/786 4884/763/784 +f 4886/767/787 4883/766/787 4881/762/785 +f 4881/762/785 4884/763/784 4886/767/787 +f 4876/774/788 4884/768/789 4885/771/790 +f 4885/771/790 4877/775/790 4876/774/788 +f 4880/776/791 4886/777/791 4884/768/789 +f 4884/768/789 4876/774/788 4880/776/791 +f 4887/778/792 4888/779/793 4889/780/794 +f 4889/780/794 4890/781/794 4887/778/792 +f 4891/782/795 4892/783/795 4888/779/793 +f 4888/779/793 4887/778/792 4891/782/795 +f 4893/784/796 4887/785/797 4890/786/798 +f 4890/786/798 4894/787/798 4893/784/796 +f 4895/788/799 4891/789/799 4887/785/797 +f 4887/785/797 4893/784/796 4895/788/799 +f 4896/790/853 4893/791/854 4894/792/802 +f 4894/792/802 4897/793/802 4896/790/853 +f 4898/794/803 4895/795/803 4893/791/854 +f 4893/791/854 4896/790/853 4898/794/803 +f 4888/785/804 4896/796/805 4897/787/806 +f 4897/787/806 4889/797/806 4888/785/804 +f 4892/789/807 4898/798/807 4896/796/805 +f 4896/796/805 4888/785/804 4892/789/807 +f 4899/799/226 4900/800/226 4901/801/226 +f 4901/801/226 4902/802/226 4899/799/226 +f 4903/803/855 4904/804/856 4905/805/810 +f 4905/805/810 4906/806/810 4903/803/855 +f 4902/807/811 4901/808/811 4904/804/856 +f 4904/804/856 4903/803/855 4902/807/811 +f 4907/809/812 4903/810/812 4906/811/1229 +f 4906/811/1229 4908/812/1229 4907/809/812 +f 4899/813/814 4902/814/814 4903/810/812 +f 4903/810/812 4907/809/812 4899/813/814 +f 4909/804/815 4907/803/816 4908/806/817 +f 4908/806/817 4910/805/817 4909/804/815 +f 4900/808/818 4899/807/818 4907/803/816 +f 4907/803/816 4909/804/815 4900/808/818 +f 4904/815/819 4909/809/819 4910/816/820 +f 4910/816/820 4905/817/820 4904/815/819 +f 4901/818/822 4900/819/822 4909/809/819 +f 4909/809/819 4904/815/819 4901/818/822 +f 4911/820/226 4912/821/226 4913/822/226 +f 4913/822/226 4914/823/226 4911/820/226 +f 4915/824/857 4916/825/858 4917/826/825 +f 4917/826/825 4918/827/825 4915/824/857 +f 4914/828/826 4913/829/826 4916/825/858 +f 4916/825/858 4915/824/857 4914/828/826 +f 4919/737/827 4915/738/828 4918/734/829 +f 4918/734/829 4920/740/829 4919/737/827 +f 4911/741/830 4914/735/830 4915/738/828 +f 4915/738/828 4919/737/827 4911/741/830 +f 4921/825/831 4919/824/832 4920/827/833 +f 4920/827/833 4922/826/833 4921/825/831 +f 4912/829/834 4911/828/834 4919/824/832 +f 4919/824/832 4921/825/831 4912/829/834 +f 4916/731/835 4921/737/836 4922/733/837 +f 4922/733/837 4917/830/837 4916/731/835 +f 4913/831/838 4912/736/838 4921/737/836 +f 4921/737/836 4916/731/835 4913/831/838 +f 4923/832/226 4924/833/226 4925/834/226 +f 4925/834/226 4926/835/226 4923/832/226 +f 4927/836/839 4928/837/839 4929/838/840 +f 4929/838/840 4930/839/840 4927/836/839 +f 4926/840/861 4925/841/861 4928/837/839 +f 4928/837/839 4927/836/839 4926/840/861 +f 4931/737/842 4927/731/842 4930/734/843 +f 4930/734/843 4932/733/843 4931/737/842 +f 4923/741/844 4926/735/844 4927/731/842 +f 4927/731/842 4931/737/842 4923/741/844 +f 4933/837/859 4931/836/859 4932/839/846 +f 4932/839/846 4934/838/846 4933/837/859 +f 4924/841/847 4923/840/847 4931/836/859 +f 4931/836/859 4933/837/859 4924/841/847 +f 4928/842/848 4933/732/848 4934/843/849 +f 4934/843/849 4929/734/849 4928/842/848 +f 4925/831/851 4924/736/851 4933/732/848 +f 4933/732/848 4928/842/848 4925/831/851 +f 4935/721/36 4936/722/36 4937/723/36 +f 4937/723/36 4938/724/36 4935/721/36 +f 4939/725/888 4940/726/888 4941/727/889 +f 4941/727/889 4942/728/889 4939/725/888 +f 4938/729/890 4937/730/890 4940/726/888 +f 4940/726/888 4939/725/888 4938/729/890 +f 4943/731/891 4939/732/892 4942/733/893 +f 4942/733/893 4944/734/893 4943/731/891 +f 4935/735/895 4938/736/895 4939/732/892 +f 4939/732/892 4943/731/891 4935/735/895 +f 4945/726/896 4943/725/896 4944/728/897 +f 4944/728/897 4946/727/897 4945/726/896 +f 4936/730/898 4935/729/898 4943/725/896 +f 4943/725/896 4945/726/896 4936/730/898 +f 4940/737/899 4945/738/899 4946/739/900 +f 4946/739/900 4941/740/900 4940/737/899 +f 4937/741/901 4936/742/1232 4945/738/899 +f 4945/738/899 4940/737/899 4937/741/901 +f 4947/743/226 4948/744/226 4949/745/226 +f 4949/745/226 4950/746/226 4947/743/226 +f 4951/747/902 4952/748/995 4953/749/903 +f 4953/749/903 4954/750/903 4951/747/902 +f 4950/751/904 4949/752/904 4952/748/995 +f 4952/748/995 4951/747/902 4950/751/904 +f 4955/753/905 4951/754/1233 4954/755/907 +f 4954/755/907 4956/756/907 4955/753/905 +f 4947/757/1234 4950/758/1234 4951/754/1233 +f 4951/754/1233 4955/753/905 4947/757/1234 +f 4957/748/910 4955/747/911 4956/750/912 +f 4956/750/912 4958/749/912 4957/748/910 +f 4948/752/913 4947/751/913 4955/747/911 +f 4955/747/911 4957/748/910 4948/752/913 +f 4952/754/914 4957/759/1235 4958/760/916 +f 4958/760/916 4953/755/916 4952/754/914 +f 4949/758/917 4948/761/917 4957/759/1235 +f 4957/759/1235 4952/754/914 4949/758/917 +f 4959/762/918 4960/763/919 4961/764/920 +f 4961/764/920 4962/765/920 4959/762/918 +f 4963/766/921 4964/767/921 4960/763/919 +f 4960/763/919 4959/762/918 4963/766/921 +f 4965/768/1236 4959/769/923 4962/770/924 +f 4962/770/924 4966/771/924 4965/768/1236 +f 4967/772/925 4963/773/925 4959/769/923 +f 4959/769/923 4965/768/1236 4967/772/925 +f 4968/763/926 4965/762/927 4966/765/928 +f 4966/765/928 4969/764/928 4968/763/926 +f 4970/767/929 4967/766/929 4965/762/927 +f 4965/762/927 4968/763/926 4970/767/929 +f 4960/774/1237 4968/768/578 4969/771/932 +f 4969/771/932 4961/775/932 4960/774/1237 +f 4964/776/933 4970/777/933 4968/768/578 +f 4968/768/578 4960/774/1237 4964/776/933 +f 4971/778/934 4972/779/935 4973/780/936 +f 4973/780/936 4974/781/936 4971/778/934 +f 4975/782/937 4976/783/937 4972/779/935 +f 4972/779/935 4971/778/934 4975/782/937 +f 4977/784/1238 4971/785/939 4974/786/940 +f 4974/786/940 4978/787/940 4977/784/1238 +f 4979/788/941 4975/789/941 4971/785/939 +f 4971/785/939 4977/784/1238 4979/788/941 +f 4980/790/1000 4977/791/943 4978/792/944 +f 4978/792/944 4981/793/944 4980/790/1000 +f 4982/794/945 4979/795/945 4977/791/943 +f 4977/791/943 4980/790/1000 4982/794/945 +f 4972/785/946 4980/796/947 4981/787/948 +f 4981/787/948 4973/797/948 4972/785/946 +f 4976/789/949 4982/798/1239 4980/796/947 +f 4980/796/947 4972/785/946 4976/789/949 +f 4983/799/36 4984/800/36 4985/801/36 +f 4985/801/36 4986/802/36 4983/799/36 +f 4987/803/996 4988/804/997 4989/805/952 +f 4989/805/952 4990/806/952 4987/803/996 +f 4986/807/953 4985/808/953 4988/804/997 +f 4988/804/997 4987/803/996 4986/807/953 +f 4991/809/954 4987/810/954 4990/811/955 +f 4990/811/955 4992/812/955 4991/809/954 +f 4983/813/1240 4986/814/1240 4987/810/954 +f 4987/810/954 4991/809/954 4983/813/1240 +f 4993/804/957 4991/803/958 4992/806/959 +f 4992/806/959 4994/805/959 4993/804/957 +f 4984/808/960 4983/807/960 4991/803/958 +f 4991/803/958 4993/804/957 4984/808/960 +f 4988/815/1241 4993/809/1241 4994/816/962 +f 4994/816/962 4989/817/962 4988/815/1241 +f 4985/818/1242 4984/819/963 4993/809/1241 +f 4993/809/1241 4988/815/1241 4985/818/1242 +f 4995/820/36 4996/821/36 4997/822/36 +f 4997/822/36 4998/823/36 4995/820/36 +f 4999/824/998 5000/825/999 5001/826/966 +f 5001/826/966 5002/827/966 4999/824/998 +f 4998/828/967 4997/829/967 5000/825/999 +f 5000/825/999 4999/824/998 4998/828/967 +f 5003/737/968 4999/738/969 5002/734/970 +f 5002/734/970 5004/740/970 5003/737/968 +f 4995/741/1243 4998/735/1243 4999/738/969 +f 4999/738/969 5003/737/968 4995/741/1243 +f 5005/825/972 5003/824/972 5004/827/973 +f 5004/827/973 5006/826/973 5005/825/972 +f 4996/829/974 4995/828/974 5003/824/972 +f 5003/824/972 5005/825/972 4996/829/974 +f 5000/731/975 5005/737/976 5006/733/1244 +f 5006/733/1244 5001/830/1244 5000/731/975 +f 4997/831/1245 4996/736/1245 5005/737/976 +f 5005/737/976 5000/731/975 4997/831/1245 +f 5007/832/36 5008/833/36 5009/834/36 +f 5009/834/36 5010/835/36 5007/832/36 +f 5011/836/979 5012/837/979 5013/838/980 +f 5013/838/980 5014/839/980 5011/836/979 +f 5010/840/981 5009/841/981 5012/837/979 +f 5012/837/979 5011/836/979 5010/840/981 +f 5015/737/1246 5011/731/1246 5014/734/983 +f 5014/734/983 5016/733/983 5015/737/1246 +f 5007/741/985 5010/735/985 5011/731/1246 +f 5011/731/1246 5015/737/1246 5007/741/985 +f 5017/837/1001 5015/836/1001 5016/839/987 +f 5016/839/987 5018/838/987 5017/837/1001 +f 5008/841/988 5007/840/988 5015/836/1001 +f 5015/836/1001 5017/837/1001 5008/841/988 +f 5012/842/1247 5017/732/1247 5018/843/990 +f 5018/843/990 5013/734/990 5012/842/1247 +f 5009/831/991 5008/736/991 5017/732/1247 +f 5017/732/1247 5012/842/1247 5009/831/991 +f 5019/721/37 5020/722/37 5021/723/37 +f 5021/723/37 5022/724/37 5019/721/37 +f 5023/725/888 5024/726/888 5025/727/889 +f 5025/727/889 5026/728/889 5023/725/888 +f 5022/729/890 5021/730/890 5024/726/888 +f 5024/726/888 5023/725/888 5022/729/890 +f 5027/731/891 5023/732/892 5026/733/893 +f 5026/733/893 5028/734/893 5027/731/891 +f 5019/735/895 5022/736/895 5023/732/892 +f 5023/732/892 5027/731/891 5019/735/895 +f 5029/726/896 5027/725/896 5028/728/897 +f 5028/728/897 5030/727/897 5029/726/896 +f 5020/730/898 5019/729/898 5027/725/896 +f 5027/725/896 5029/726/896 5020/730/898 +f 5024/737/899 5029/738/899 5030/739/900 +f 5030/739/900 5025/740/900 5024/737/899 +f 5021/741/901 5020/742/1232 5029/738/899 +f 5029/738/899 5024/737/899 5021/741/901 +f 5031/743/36 5032/744/36 5033/745/36 +f 5033/745/36 5034/746/36 5031/743/36 +f 5035/747/902 5036/748/995 5037/749/903 +f 5037/749/903 5038/750/903 5035/747/902 +f 5034/751/904 5033/752/904 5036/748/995 +f 5036/748/995 5035/747/902 5034/751/904 +f 5039/753/905 5035/754/1233 5038/755/907 +f 5038/755/907 5040/756/907 5039/753/905 +f 5031/757/1234 5034/758/1234 5035/754/1233 +f 5035/754/1233 5039/753/905 5031/757/1234 +f 5041/748/910 5039/747/911 5040/750/912 +f 5040/750/912 5042/749/912 5041/748/910 +f 5032/752/913 5031/751/913 5039/747/911 +f 5039/747/911 5041/748/910 5032/752/913 +f 5036/754/914 5041/759/1235 5042/760/916 +f 5042/760/916 5037/755/916 5036/754/914 +f 5033/758/917 5032/761/917 5041/759/1235 +f 5041/759/1235 5036/754/914 5033/758/917 +f 5043/762/918 5044/763/919 5045/764/920 +f 5045/764/920 5046/765/920 5043/762/918 +f 5047/766/921 5048/767/921 5044/763/919 +f 5044/763/919 5043/762/918 5047/766/921 +f 5049/768/1236 5043/769/923 5046/770/924 +f 5046/770/924 5050/771/924 5049/768/1236 +f 5051/772/925 5047/773/925 5043/769/923 +f 5043/769/923 5049/768/1236 5051/772/925 +f 5052/763/926 5049/762/927 5050/765/928 +f 5050/765/928 5053/764/928 5052/763/926 +f 5054/767/929 5051/766/929 5049/762/927 +f 5049/762/927 5052/763/926 5054/767/929 +f 5044/774/1237 5052/768/578 5053/771/932 +f 5053/771/932 5045/775/932 5044/774/1237 +f 5048/776/933 5054/777/933 5052/768/578 +f 5052/768/578 5044/774/1237 5048/776/933 +f 5055/778/934 5056/779/935 5057/780/936 +f 5057/780/936 5058/781/936 5055/778/934 +f 5059/782/937 5060/783/937 5056/779/935 +f 5056/779/935 5055/778/934 5059/782/937 +f 5061/784/1238 5055/785/939 5058/786/940 +f 5058/786/940 5062/787/940 5061/784/1238 +f 5063/788/941 5059/789/941 5055/785/939 +f 5055/785/939 5061/784/1238 5063/788/941 +f 5064/790/1000 5061/791/943 5062/792/944 +f 5062/792/944 5065/793/944 5064/790/1000 +f 5066/794/945 5063/795/945 5061/791/943 +f 5061/791/943 5064/790/1000 5066/794/945 +f 5056/785/946 5064/796/947 5065/787/948 +f 5065/787/948 5057/797/948 5056/785/946 +f 5060/789/949 5066/798/1239 5064/796/947 +f 5064/796/947 5056/785/946 5060/789/949 +f 5067/799/37 5068/800/37 5069/801/37 +f 5069/801/37 5070/802/37 5067/799/37 +f 5071/803/996 5072/804/997 5073/805/952 +f 5073/805/952 5074/806/952 5071/803/996 +f 5070/807/953 5069/808/953 5072/804/997 +f 5072/804/997 5071/803/996 5070/807/953 +f 5075/809/954 5071/810/954 5074/811/955 +f 5074/811/955 5076/812/955 5075/809/954 +f 5067/813/1240 5070/814/1240 5071/810/954 +f 5071/810/954 5075/809/954 5067/813/1240 +f 5077/804/957 5075/803/958 5076/806/959 +f 5076/806/959 5078/805/959 5077/804/957 +f 5068/808/960 5067/807/960 5075/803/958 +f 5075/803/958 5077/804/957 5068/808/960 +f 5072/815/1241 5077/809/1241 5078/816/962 +f 5078/816/962 5073/817/962 5072/815/1241 +f 5069/818/1242 5068/819/963 5077/809/1241 +f 5077/809/1241 5072/815/1241 5069/818/1242 +f 5079/820/36 5080/821/36 5081/822/36 +f 5081/822/36 5082/823/36 5079/820/36 +f 5083/824/964 5084/825/965 5085/826/966 +f 5085/826/966 5086/827/966 5083/824/964 +f 5082/828/967 5081/829/967 5084/825/965 +f 5084/825/965 5083/824/964 5082/828/967 +f 5087/737/968 5083/738/969 5086/734/970 +f 5086/734/970 5088/740/970 5087/737/968 +f 5079/741/1243 5082/735/1243 5083/738/969 +f 5083/738/969 5087/737/968 5079/741/1243 +f 5089/825/972 5087/824/972 5088/827/973 +f 5088/827/973 5090/826/973 5089/825/972 +f 5080/829/974 5079/828/974 5087/824/972 +f 5087/824/972 5089/825/972 5080/829/974 +f 5084/731/975 5089/737/976 5090/733/1244 +f 5090/733/1244 5085/830/1244 5084/731/975 +f 5081/831/1245 5080/736/1245 5089/737/976 +f 5089/737/976 5084/731/975 5081/831/1245 +f 5091/832/36 5092/833/36 5093/834/36 +f 5093/834/36 5094/835/36 5091/832/36 +f 5095/836/979 5096/837/979 5097/838/994 +f 5097/838/994 5098/839/994 5095/836/979 +f 5094/840/981 5093/841/981 5096/837/979 +f 5096/837/979 5095/836/979 5094/840/981 +f 5099/737/1246 5095/731/1246 5098/734/983 +f 5098/734/983 5100/733/983 5099/737/1246 +f 5091/741/985 5094/735/985 5095/731/1246 +f 5095/731/1246 5099/737/1246 5091/741/985 +f 5101/837/1001 5099/836/1001 5100/839/987 +f 5100/839/987 5102/838/987 5101/837/1001 +f 5092/841/988 5091/840/988 5099/836/1001 +f 5099/836/1001 5101/837/1001 5092/841/988 +f 5096/842/1247 5101/732/1247 5102/843/990 +f 5102/843/990 5097/734/990 5096/842/1247 +f 5093/831/991 5092/736/991 5101/732/1247 +f 5101/732/1247 5096/842/1247 5093/831/991 +f 5103/721/36 5104/722/36 5105/723/36 +f 5105/723/36 5106/724/36 5103/721/36 +f 5107/725/888 5108/726/888 5109/727/889 +f 5109/727/889 5110/728/889 5107/725/888 +f 5106/729/890 5105/730/890 5108/726/888 +f 5108/726/888 5107/725/888 5106/729/890 +f 5111/731/891 5107/732/892 5110/733/893 +f 5110/733/893 5112/734/893 5111/731/891 +f 5103/735/895 5106/736/895 5107/732/892 +f 5107/732/892 5111/731/891 5103/735/895 +f 5113/726/896 5111/725/896 5112/728/897 +f 5112/728/897 5114/727/897 5113/726/896 +f 5104/730/898 5103/729/898 5111/725/896 +f 5111/725/896 5113/726/896 5104/730/898 +f 5108/737/899 5113/738/899 5114/739/900 +f 5114/739/900 5109/740/900 5108/737/899 +f 5105/741/901 5104/742/1232 5113/738/899 +f 5113/738/899 5108/737/899 5105/741/901 +f 5115/743/37 5116/744/37 5117/745/37 +f 5117/745/37 5118/746/37 5115/743/37 +f 5119/747/902 5120/748/995 5121/749/903 +f 5121/749/903 5122/750/903 5119/747/902 +f 5118/751/904 5117/752/904 5120/748/995 +f 5120/748/995 5119/747/902 5118/751/904 +f 5123/753/905 5119/754/1233 5122/755/907 +f 5122/755/907 5124/756/907 5123/753/905 +f 5115/757/1234 5118/758/1234 5119/754/1233 +f 5119/754/1233 5123/753/905 5115/757/1234 +f 5125/748/910 5123/747/911 5124/750/912 +f 5124/750/912 5126/749/912 5125/748/910 +f 5116/752/913 5115/751/913 5123/747/911 +f 5123/747/911 5125/748/910 5116/752/913 +f 5120/754/914 5125/759/1235 5126/760/916 +f 5126/760/916 5121/755/916 5120/754/914 +f 5117/758/917 5116/761/917 5125/759/1235 +f 5125/759/1235 5120/754/914 5117/758/917 +f 5127/762/918 5128/763/919 5129/764/920 +f 5129/764/920 5130/765/920 5127/762/918 +f 5131/766/921 5132/767/921 5128/763/919 +f 5128/763/919 5127/762/918 5131/766/921 +f 5133/768/1236 5127/769/923 5130/770/924 +f 5130/770/924 5134/771/924 5133/768/1236 +f 5135/772/925 5131/773/925 5127/769/923 +f 5127/769/923 5133/768/1236 5135/772/925 +f 5136/763/926 5133/762/927 5134/765/928 +f 5134/765/928 5137/764/928 5136/763/926 +f 5138/767/929 5135/766/929 5133/762/927 +f 5133/762/927 5136/763/926 5138/767/929 +f 5128/774/1237 5136/768/578 5137/771/932 +f 5137/771/932 5129/775/932 5128/774/1237 +f 5132/776/933 5138/777/933 5136/768/578 +f 5136/768/578 5128/774/1237 5132/776/933 +f 5139/778/934 5140/779/935 5141/780/936 +f 5141/780/936 5142/781/936 5139/778/934 +f 5143/782/937 5144/783/937 5140/779/935 +f 5140/779/935 5139/778/934 5143/782/937 +f 5145/784/1238 5139/785/939 5142/786/940 +f 5142/786/940 5146/787/940 5145/784/1238 +f 5147/788/941 5143/789/941 5139/785/939 +f 5139/785/939 5145/784/1238 5147/788/941 +f 5148/790/1000 5145/791/943 5146/792/944 +f 5146/792/944 5149/793/944 5148/790/1000 +f 5150/794/945 5147/795/945 5145/791/943 +f 5145/791/943 5148/790/1000 5150/794/945 +f 5140/785/946 5148/796/947 5149/787/948 +f 5149/787/948 5141/797/948 5140/785/946 +f 5144/789/949 5150/798/1239 5148/796/947 +f 5148/796/947 5140/785/946 5144/789/949 +f 5151/799/37 5152/800/37 5153/801/37 +f 5153/801/37 5154/802/37 5151/799/37 +f 5155/803/996 5156/804/997 5157/805/952 +f 5157/805/952 5158/806/952 5155/803/996 +f 5154/807/953 5153/808/953 5156/804/997 +f 5156/804/997 5155/803/996 5154/807/953 +f 5159/809/954 5155/810/954 5158/811/955 +f 5158/811/955 5160/812/955 5159/809/954 +f 5151/813/1240 5154/814/1240 5155/810/954 +f 5155/810/954 5159/809/954 5151/813/1240 +f 5161/804/957 5159/803/958 5160/806/959 +f 5160/806/959 5162/805/959 5161/804/957 +f 5152/808/960 5151/807/960 5159/803/958 +f 5159/803/958 5161/804/957 5152/808/960 +f 5156/815/1241 5161/809/1241 5162/816/962 +f 5162/816/962 5157/817/962 5156/815/1241 +f 5153/818/1242 5152/819/963 5161/809/1241 +f 5161/809/1241 5156/815/1241 5153/818/1242 +f 5163/820/37 5164/821/37 5165/822/37 +f 5165/822/37 5166/823/37 5163/820/37 +f 5167/824/998 5168/825/999 5169/826/966 +f 5169/826/966 5170/827/966 5167/824/998 +f 5166/828/967 5165/829/967 5168/825/999 +f 5168/825/999 5167/824/998 5166/828/967 +f 5171/737/968 5167/738/969 5170/734/970 +f 5170/734/970 5172/740/970 5171/737/968 +f 5163/741/1243 5166/735/1243 5167/738/969 +f 5167/738/969 5171/737/968 5163/741/1243 +f 5173/825/972 5171/824/972 5172/827/973 +f 5172/827/973 5174/826/973 5173/825/972 +f 5164/829/974 5163/828/974 5171/824/972 +f 5171/824/972 5173/825/972 5164/829/974 +f 5168/731/975 5173/737/976 5174/733/1244 +f 5174/733/1244 5169/830/1244 5168/731/975 +f 5165/831/1245 5164/736/1245 5173/737/976 +f 5173/737/976 5168/731/975 5165/831/1245 +f 5175/832/36 5176/833/36 5177/834/36 +f 5177/834/36 5178/835/36 5175/832/36 +f 5179/836/979 5180/837/979 5181/838/980 +f 5181/838/980 5182/839/980 5179/836/979 +f 5178/840/981 5177/841/981 5180/837/979 +f 5180/837/979 5179/836/979 5178/840/981 +f 5183/737/1246 5179/731/1246 5182/734/983 +f 5182/734/983 5184/733/983 5183/737/1246 +f 5175/741/985 5178/735/985 5179/731/1246 +f 5179/731/1246 5183/737/1246 5175/741/985 +f 5185/837/986 5183/836/986 5184/839/987 +f 5184/839/987 5186/838/987 5185/837/986 +f 5176/841/988 5175/840/988 5183/836/986 +f 5183/836/986 5185/837/986 5176/841/988 +f 5180/842/1247 5185/732/1247 5186/843/990 +f 5186/843/990 5181/734/990 5180/842/1247 +f 5177/831/991 5176/736/991 5185/732/1247 +f 5185/732/1247 5180/842/1247 5177/831/991 +f 5187/721/36 5188/722/36 5189/723/36 +f 5189/723/36 5190/724/36 5187/721/36 +f 5191/725/888 5192/726/888 5193/727/889 +f 5193/727/889 5194/728/889 5191/725/888 +f 5190/729/890 5189/730/890 5192/726/888 +f 5192/726/888 5191/725/888 5190/729/890 +f 5195/731/891 5191/732/892 5194/733/893 +f 5194/733/893 5196/734/893 5195/731/891 +f 5187/735/895 5190/736/895 5191/732/892 +f 5191/732/892 5195/731/891 5187/735/895 +f 5197/726/896 5195/725/896 5196/728/897 +f 5196/728/897 5198/727/897 5197/726/896 +f 5188/730/898 5187/729/898 5195/725/896 +f 5195/725/896 5197/726/896 5188/730/898 +f 5192/737/899 5197/738/899 5198/739/900 +f 5198/739/900 5193/740/900 5192/737/899 +f 5189/741/901 5188/742/1232 5197/738/899 +f 5197/738/899 5192/737/899 5189/741/901 +f 5199/743/226 5200/744/226 5201/745/226 +f 5201/745/226 5202/746/226 5199/743/226 +f 5203/747/902 5204/748/995 5205/749/903 +f 5205/749/903 5206/750/903 5203/747/902 +f 5202/751/904 5201/752/904 5204/748/995 +f 5204/748/995 5203/747/902 5202/751/904 +f 5207/753/905 5203/754/1233 5206/755/907 +f 5206/755/907 5208/756/907 5207/753/905 +f 5199/757/1234 5202/758/1234 5203/754/1233 +f 5203/754/1233 5207/753/905 5199/757/1234 +f 5209/748/910 5207/747/911 5208/750/912 +f 5208/750/912 5210/749/912 5209/748/910 +f 5200/752/913 5199/751/913 5207/747/911 +f 5207/747/911 5209/748/910 5200/752/913 +f 5204/754/914 5209/759/1235 5210/760/916 +f 5210/760/916 5205/755/916 5204/754/914 +f 5201/758/917 5200/761/917 5209/759/1235 +f 5209/759/1235 5204/754/914 5201/758/917 +f 5211/762/918 5212/763/919 5213/764/920 +f 5213/764/920 5214/765/920 5211/762/918 +f 5215/766/921 5216/767/921 5212/763/919 +f 5212/763/919 5211/762/918 5215/766/921 +f 5217/768/1236 5211/769/923 5214/770/924 +f 5214/770/924 5218/771/924 5217/768/1236 +f 5219/772/925 5215/773/925 5211/769/923 +f 5211/769/923 5217/768/1236 5219/772/925 +f 5220/763/926 5217/762/927 5218/765/928 +f 5218/765/928 5221/764/928 5220/763/926 +f 5222/767/929 5219/766/929 5217/762/927 +f 5217/762/927 5220/763/926 5222/767/929 +f 5212/774/1237 5220/768/578 5221/771/932 +f 5221/771/932 5213/775/932 5212/774/1237 +f 5216/776/933 5222/777/933 5220/768/578 +f 5220/768/578 5212/774/1237 5216/776/933 +f 5223/778/934 5224/779/935 5225/780/936 +f 5225/780/936 5226/781/936 5223/778/934 +f 5227/782/937 5228/783/937 5224/779/935 +f 5224/779/935 5223/778/934 5227/782/937 +f 5229/784/1238 5223/785/939 5226/786/940 +f 5226/786/940 5230/787/940 5229/784/1238 +f 5231/788/941 5227/789/941 5223/785/939 +f 5223/785/939 5229/784/1238 5231/788/941 +f 5232/790/1000 5229/791/943 5230/792/944 +f 5230/792/944 5233/793/944 5232/790/1000 +f 5234/794/945 5231/795/945 5229/791/943 +f 5229/791/943 5232/790/1000 5234/794/945 +f 5224/785/946 5232/796/947 5233/787/948 +f 5233/787/948 5225/797/948 5224/785/946 +f 5228/789/949 5234/798/1239 5232/796/947 +f 5232/796/947 5224/785/946 5228/789/949 +f 5235/799/36 5236/800/36 5237/801/36 +f 5237/801/36 5238/802/36 5235/799/36 +f 5239/803/950 5240/804/951 5241/805/952 +f 5241/805/952 5242/806/952 5239/803/950 +f 5238/807/953 5237/808/953 5240/804/951 +f 5240/804/951 5239/803/950 5238/807/953 +f 5243/809/954 5239/810/954 5242/811/955 +f 5242/811/955 5244/812/955 5243/809/954 +f 5235/813/1240 5238/814/1240 5239/810/954 +f 5239/810/954 5243/809/954 5235/813/1240 +f 5245/804/957 5243/803/958 5244/806/959 +f 5244/806/959 5246/805/959 5245/804/957 +f 5236/808/960 5235/807/960 5243/803/958 +f 5243/803/958 5245/804/957 5236/808/960 +f 5240/815/1241 5245/809/1241 5246/816/962 +f 5246/816/962 5241/817/962 5240/815/1241 +f 5237/818/1242 5236/819/963 5245/809/1241 +f 5245/809/1241 5240/815/1241 5237/818/1242 +f 5247/820/36 5248/821/36 5249/822/36 +f 5249/822/36 5250/823/36 5247/820/36 +f 5251/824/998 5252/825/999 5253/826/966 +f 5253/826/966 5254/827/966 5251/824/998 +f 5250/828/967 5249/829/967 5252/825/999 +f 5252/825/999 5251/824/998 5250/828/967 +f 5255/737/968 5251/738/969 5254/734/970 +f 5254/734/970 5256/740/970 5255/737/968 +f 5247/741/1243 5250/735/1243 5251/738/969 +f 5251/738/969 5255/737/968 5247/741/1243 +f 5257/825/972 5255/824/972 5256/827/973 +f 5256/827/973 5258/826/973 5257/825/972 +f 5248/829/974 5247/828/974 5255/824/972 +f 5255/824/972 5257/825/972 5248/829/974 +f 5252/731/975 5257/737/976 5258/733/1244 +f 5258/733/1244 5253/830/1244 5252/731/975 +f 5249/831/1245 5248/736/1245 5257/737/976 +f 5257/737/976 5252/731/975 5249/831/1245 +f 5259/832/36 5260/833/36 5261/834/36 +f 5261/834/36 5262/835/36 5259/832/36 +f 5263/836/979 5264/837/979 5265/838/980 +f 5265/838/980 5266/839/980 5263/836/979 +f 5262/840/981 5261/841/981 5264/837/979 +f 5264/837/979 5263/836/979 5262/840/981 +f 5267/737/1246 5263/731/1246 5266/734/983 +f 5266/734/983 5268/733/983 5267/737/1246 +f 5259/741/985 5262/735/985 5263/731/1246 +f 5263/731/1246 5267/737/1246 5259/741/985 +f 5269/837/1001 5267/836/1001 5268/839/987 +f 5268/839/987 5270/838/987 5269/837/1001 +f 5260/841/988 5259/840/988 5267/836/1001 +f 5267/836/1001 5269/837/1001 5260/841/988 +f 5264/842/1247 5269/732/1247 5270/843/990 +f 5270/843/990 5265/734/990 5264/842/1247 +f 5261/831/991 5260/736/991 5269/732/1247 +f 5269/732/1247 5264/842/1247 5261/831/991 +f 5271/721/36 5272/722/36 5273/723/36 +f 5273/723/36 5274/724/36 5271/721/36 +f 5275/725/888 5276/726/888 5277/727/889 +f 5277/727/889 5278/728/889 5275/725/888 +f 5274/729/890 5273/730/890 5276/726/888 +f 5276/726/888 5275/725/888 5274/729/890 +f 5279/731/891 5275/732/892 5278/733/893 +f 5278/733/893 5280/734/893 5279/731/891 +f 5271/735/895 5274/736/895 5275/732/892 +f 5275/732/892 5279/731/891 5271/735/895 +f 5281/726/896 5279/725/896 5280/728/897 +f 5280/728/897 5282/727/897 5281/726/896 +f 5272/730/898 5271/729/898 5279/725/896 +f 5279/725/896 5281/726/896 5272/730/898 +f 5276/737/899 5281/738/899 5282/739/900 +f 5282/739/900 5277/740/900 5276/737/899 +f 5273/741/901 5272/742/1232 5281/738/899 +f 5281/738/899 5276/737/899 5273/741/901 +f 5283/743/36 5284/744/36 5285/745/36 +f 5285/745/36 5286/746/36 5283/743/36 +f 5287/747/902 5288/748/995 5289/749/903 +f 5289/749/903 5290/750/903 5287/747/902 +f 5286/751/904 5285/752/904 5288/748/995 +f 5288/748/995 5287/747/902 5286/751/904 +f 5291/753/905 5287/754/1233 5290/755/907 +f 5290/755/907 5292/756/907 5291/753/905 +f 5283/757/1234 5286/758/1234 5287/754/1233 +f 5287/754/1233 5291/753/905 5283/757/1234 +f 5293/748/910 5291/747/911 5292/750/912 +f 5292/750/912 5294/749/912 5293/748/910 +f 5284/752/913 5283/751/913 5291/747/911 +f 5291/747/911 5293/748/910 5284/752/913 +f 5288/754/914 5293/759/1235 5294/760/916 +f 5294/760/916 5289/755/916 5288/754/914 +f 5285/758/917 5284/761/917 5293/759/1235 +f 5293/759/1235 5288/754/914 5285/758/917 +f 5295/762/918 5296/763/919 5297/764/920 +f 5297/764/920 5298/765/920 5295/762/918 +f 5299/766/921 5300/767/921 5296/763/919 +f 5296/763/919 5295/762/918 5299/766/921 +f 5301/768/1236 5295/769/923 5298/770/924 +f 5298/770/924 5302/771/924 5301/768/1236 +f 5303/772/925 5299/773/925 5295/769/923 +f 5295/769/923 5301/768/1236 5303/772/925 +f 5304/763/926 5301/762/927 5302/765/928 +f 5302/765/928 5305/764/928 5304/763/926 +f 5306/767/929 5303/766/929 5301/762/927 +f 5301/762/927 5304/763/926 5306/767/929 +f 5296/774/1237 5304/768/578 5305/771/932 +f 5305/771/932 5297/775/932 5296/774/1237 +f 5300/776/933 5306/777/933 5304/768/578 +f 5304/768/578 5296/774/1237 5300/776/933 +f 5307/778/934 5308/779/935 5309/780/936 +f 5309/780/936 5310/781/936 5307/778/934 +f 5311/782/937 5312/783/937 5308/779/935 +f 5308/779/935 5307/778/934 5311/782/937 +f 5313/784/1238 5307/785/939 5310/786/940 +f 5310/786/940 5314/787/940 5313/784/1238 +f 5315/788/941 5311/789/941 5307/785/939 +f 5307/785/939 5313/784/1238 5315/788/941 +f 5316/790/1000 5313/791/943 5314/792/944 +f 5314/792/944 5317/793/944 5316/790/1000 +f 5318/794/945 5315/795/945 5313/791/943 +f 5313/791/943 5316/790/1000 5318/794/945 +f 5308/785/946 5316/796/947 5317/787/948 +f 5317/787/948 5309/797/948 5308/785/946 +f 5312/789/949 5318/798/1239 5316/796/947 +f 5316/796/947 5308/785/946 5312/789/949 +f 5319/799/226 5320/800/226 5321/801/226 +f 5321/801/226 5322/802/226 5319/799/226 +f 5323/803/996 5324/804/997 5325/805/952 +f 5325/805/952 5326/806/952 5323/803/996 +f 5322/807/953 5321/808/953 5324/804/997 +f 5324/804/997 5323/803/996 5322/807/953 +f 5327/809/954 5323/810/954 5326/811/955 +f 5326/811/955 5328/812/955 5327/809/954 +f 5319/813/1240 5322/814/1240 5323/810/954 +f 5323/810/954 5327/809/954 5319/813/1240 +f 5329/804/957 5327/803/958 5328/806/959 +f 5328/806/959 5330/805/959 5329/804/957 +f 5320/808/960 5319/807/960 5327/803/958 +f 5327/803/958 5329/804/957 5320/808/960 +f 5324/815/1241 5329/809/1241 5330/816/962 +f 5330/816/962 5325/817/962 5324/815/1241 +f 5321/818/1242 5320/819/963 5329/809/1241 +f 5329/809/1241 5324/815/1241 5321/818/1242 +f 5331/820/36 5332/821/36 5333/822/36 +f 5333/822/36 5334/823/36 5331/820/36 +f 5335/824/998 5336/825/999 5337/826/966 +f 5337/826/966 5338/827/966 5335/824/998 +f 5334/828/967 5333/829/967 5336/825/999 +f 5336/825/999 5335/824/998 5334/828/967 +f 5339/737/968 5335/738/969 5338/734/970 +f 5338/734/970 5340/740/970 5339/737/968 +f 5331/741/1243 5334/735/1243 5335/738/969 +f 5335/738/969 5339/737/968 5331/741/1243 +f 5341/825/972 5339/824/972 5340/827/973 +f 5340/827/973 5342/826/973 5341/825/972 +f 5332/829/974 5331/828/974 5339/824/972 +f 5339/824/972 5341/825/972 5332/829/974 +f 5336/731/975 5341/737/976 5342/733/1244 +f 5342/733/1244 5337/830/1244 5336/731/975 +f 5333/831/1245 5332/736/1245 5341/737/976 +f 5341/737/976 5336/731/975 5333/831/1245 +f 5343/832/36 5344/833/36 5345/834/36 +f 5345/834/36 5346/835/36 5343/832/36 +f 5347/836/979 5348/837/979 5349/838/980 +f 5349/838/980 5350/839/980 5347/836/979 +f 5346/840/981 5345/841/981 5348/837/979 +f 5348/837/979 5347/836/979 5346/840/981 +f 5351/737/1246 5347/731/1246 5350/734/983 +f 5350/734/983 5352/733/983 5351/737/1246 +f 5343/741/985 5346/735/985 5347/731/1246 +f 5347/731/1246 5351/737/1246 5343/741/985 +f 5353/837/1001 5351/836/1001 5352/839/987 +f 5352/839/987 5354/838/987 5353/837/1001 +f 5344/841/988 5343/840/988 5351/836/1001 +f 5351/836/1001 5353/837/1001 5344/841/988 +f 5348/842/1247 5353/732/1247 5354/843/990 +f 5354/843/990 5349/734/990 5348/842/1247 +f 5345/831/991 5344/736/991 5353/732/1247 +f 5353/732/1247 5348/842/1247 5345/831/991 +f 5355/721/37 5356/722/37 5357/723/37 +f 5357/723/37 5358/724/37 5355/721/37 +f 5359/725/888 5360/726/888 5361/727/889 +f 5361/727/889 5362/728/889 5359/725/888 +f 5358/729/890 5357/730/890 5360/726/888 +f 5360/726/888 5359/725/888 5358/729/890 +f 5363/731/891 5359/732/892 5362/733/893 +f 5362/733/893 5364/734/893 5363/731/891 +f 5355/735/895 5358/736/895 5359/732/892 +f 5359/732/892 5363/731/891 5355/735/895 +f 5365/726/896 5363/725/896 5364/728/897 +f 5364/728/897 5366/727/897 5365/726/896 +f 5356/730/898 5355/729/898 5363/725/896 +f 5363/725/896 5365/726/896 5356/730/898 +f 5360/737/899 5365/738/899 5366/739/900 +f 5366/739/900 5361/740/900 5360/737/899 +f 5357/741/901 5356/742/1232 5365/738/899 +f 5365/738/899 5360/737/899 5357/741/901 +f 5367/743/36 5368/744/36 5369/745/36 +f 5369/745/36 5370/746/36 5367/743/36 +f 5371/747/902 5372/748/995 5373/749/903 +f 5373/749/903 5374/750/903 5371/747/902 +f 5370/751/904 5369/752/904 5372/748/995 +f 5372/748/995 5371/747/902 5370/751/904 +f 5375/753/905 5371/754/1233 5374/755/907 +f 5374/755/907 5376/756/907 5375/753/905 +f 5367/757/1234 5370/758/1234 5371/754/1233 +f 5371/754/1233 5375/753/905 5367/757/1234 +f 5377/748/910 5375/747/911 5376/750/912 +f 5376/750/912 5378/749/912 5377/748/910 +f 5368/752/913 5367/751/913 5375/747/911 +f 5375/747/911 5377/748/910 5368/752/913 +f 5372/754/914 5377/759/1235 5378/760/916 +f 5378/760/916 5373/755/916 5372/754/914 +f 5369/758/917 5368/761/917 5377/759/1235 +f 5377/759/1235 5372/754/914 5369/758/917 +f 5379/762/918 5380/763/919 5381/764/920 +f 5381/764/920 5382/765/920 5379/762/918 +f 5383/766/921 5384/767/921 5380/763/919 +f 5380/763/919 5379/762/918 5383/766/921 +f 5385/768/1236 5379/769/923 5382/770/924 +f 5382/770/924 5386/771/924 5385/768/1236 +f 5387/772/925 5383/773/925 5379/769/923 +f 5379/769/923 5385/768/1236 5387/772/925 +f 5388/763/926 5385/762/927 5386/765/928 +f 5386/765/928 5389/764/928 5388/763/926 +f 5390/767/929 5387/766/929 5385/762/927 +f 5385/762/927 5388/763/926 5390/767/929 +f 5380/774/1237 5388/768/578 5389/771/932 +f 5389/771/932 5381/775/932 5380/774/1237 +f 5384/776/933 5390/777/933 5388/768/578 +f 5388/768/578 5380/774/1237 5384/776/933 +f 5391/778/934 5392/779/935 5393/780/936 +f 5393/780/936 5394/781/936 5391/778/934 +f 5395/782/937 5396/783/937 5392/779/935 +f 5392/779/935 5391/778/934 5395/782/937 +f 5397/784/1238 5391/785/939 5394/786/940 +f 5394/786/940 5398/787/940 5397/784/1238 +f 5399/788/941 5395/789/941 5391/785/939 +f 5391/785/939 5397/784/1238 5399/788/941 +f 5400/790/1000 5397/791/943 5398/792/944 +f 5398/792/944 5401/793/944 5400/790/1000 +f 5402/794/945 5399/795/945 5397/791/943 +f 5397/791/943 5400/790/1000 5402/794/945 +f 5392/785/946 5400/796/947 5401/787/948 +f 5401/787/948 5393/797/948 5392/785/946 +f 5396/789/949 5402/798/1239 5400/796/947 +f 5400/796/947 5392/785/946 5396/789/949 +f 5403/799/36 5404/800/36 5405/801/36 +f 5405/801/36 5406/802/36 5403/799/36 +f 5407/803/996 5408/804/997 5409/805/952 +f 5409/805/952 5410/806/952 5407/803/996 +f 5406/807/953 5405/808/953 5408/804/997 +f 5408/804/997 5407/803/996 5406/807/953 +f 5411/809/954 5407/810/954 5410/811/955 +f 5410/811/955 5412/812/955 5411/809/954 +f 5403/813/1240 5406/814/1240 5407/810/954 +f 5407/810/954 5411/809/954 5403/813/1240 +f 5413/804/957 5411/803/958 5412/806/959 +f 5412/806/959 5414/805/959 5413/804/957 +f 5404/808/960 5403/807/960 5411/803/958 +f 5411/803/958 5413/804/957 5404/808/960 +f 5408/815/1241 5413/809/1241 5414/816/962 +f 5414/816/962 5409/817/962 5408/815/1241 +f 5405/818/1242 5404/819/963 5413/809/1241 +f 5413/809/1241 5408/815/1241 5405/818/1242 +f 5415/820/36 5416/821/36 5417/822/36 +f 5417/822/36 5418/823/36 5415/820/36 +f 5419/824/998 5420/825/999 5421/826/966 +f 5421/826/966 5422/827/966 5419/824/998 +f 5418/828/967 5417/829/967 5420/825/999 +f 5420/825/999 5419/824/998 5418/828/967 +f 5423/737/968 5419/738/969 5422/734/970 +f 5422/734/970 5424/740/970 5423/737/968 +f 5415/741/1243 5418/735/1243 5419/738/969 +f 5419/738/969 5423/737/968 5415/741/1243 +f 5425/825/972 5423/824/972 5424/827/973 +f 5424/827/973 5426/826/973 5425/825/972 +f 5416/829/974 5415/828/974 5423/824/972 +f 5423/824/972 5425/825/972 5416/829/974 +f 5420/731/975 5425/737/976 5426/733/1244 +f 5426/733/1244 5421/830/1244 5420/731/975 +f 5417/831/1245 5416/736/1245 5425/737/976 +f 5425/737/976 5420/731/975 5417/831/1245 +f 5427/832/36 5428/833/36 5429/834/36 +f 5429/834/36 5430/835/36 5427/832/36 +f 5431/836/993 5432/837/979 5433/838/994 +f 5433/838/994 5434/839/994 5431/836/993 +f 5430/840/981 5429/841/981 5432/837/979 +f 5432/837/979 5431/836/993 5430/840/981 +f 5435/737/1246 5431/731/1246 5434/734/983 +f 5434/734/983 5436/733/983 5435/737/1246 +f 5427/741/985 5430/735/985 5431/731/1246 +f 5431/731/1246 5435/737/1246 5427/741/985 +f 5437/837/1001 5435/836/1001 5436/839/987 +f 5436/839/987 5438/838/987 5437/837/1001 +f 5428/841/988 5427/840/988 5435/836/1001 +f 5435/836/1001 5437/837/1001 5428/841/988 +f 5432/842/1247 5437/732/1247 5438/843/990 +f 5438/843/990 5433/734/990 5432/842/1247 +f 5429/831/991 5428/736/991 5437/732/1247 +f 5437/732/1247 5432/842/1247 5429/831/991 +f 5439/721/36 5440/722/36 5441/723/36 +f 5441/723/36 5442/724/36 5439/721/36 +f 5443/725/888 5444/726/888 5445/727/889 +f 5445/727/889 5446/728/889 5443/725/888 +f 5442/729/890 5441/730/890 5444/726/888 +f 5444/726/888 5443/725/888 5442/729/890 +f 5447/731/891 5443/732/892 5446/733/893 +f 5446/733/893 5448/734/893 5447/731/891 +f 5439/735/895 5442/736/895 5443/732/892 +f 5443/732/892 5447/731/891 5439/735/895 +f 5449/726/896 5447/725/896 5448/728/897 +f 5448/728/897 5450/727/897 5449/726/896 +f 5440/730/898 5439/729/898 5447/725/896 +f 5447/725/896 5449/726/896 5440/730/898 +f 5444/737/899 5449/738/899 5450/739/900 +f 5450/739/900 5445/740/900 5444/737/899 +f 5441/741/901 5440/742/1232 5449/738/899 +f 5449/738/899 5444/737/899 5441/741/901 +f 5451/743/36 5452/744/36 5453/745/36 +f 5453/745/36 5454/746/36 5451/743/36 +f 5455/747/902 5456/748/995 5457/749/903 +f 5457/749/903 5458/750/903 5455/747/902 +f 5454/751/904 5453/752/904 5456/748/995 +f 5456/748/995 5455/747/902 5454/751/904 +f 5459/753/905 5455/754/1233 5458/755/907 +f 5458/755/907 5460/756/907 5459/753/905 +f 5451/757/1234 5454/758/1234 5455/754/1233 +f 5455/754/1233 5459/753/905 5451/757/1234 +f 5461/748/910 5459/747/911 5460/750/912 +f 5460/750/912 5462/749/912 5461/748/910 +f 5452/752/913 5451/751/913 5459/747/911 +f 5459/747/911 5461/748/910 5452/752/913 +f 5456/754/914 5461/759/1235 5462/760/916 +f 5462/760/916 5457/755/916 5456/754/914 +f 5453/758/917 5452/761/917 5461/759/1235 +f 5461/759/1235 5456/754/914 5453/758/917 +f 5463/762/918 5464/763/919 5465/764/920 +f 5465/764/920 5466/765/920 5463/762/918 +f 5467/766/921 5468/767/921 5464/763/919 +f 5464/763/919 5463/762/918 5467/766/921 +f 5469/768/1236 5463/769/923 5466/770/924 +f 5466/770/924 5470/771/924 5469/768/1236 +f 5471/772/925 5467/773/925 5463/769/923 +f 5463/769/923 5469/768/1236 5471/772/925 +f 5472/763/926 5469/762/927 5470/765/928 +f 5470/765/928 5473/764/928 5472/763/926 +f 5474/767/929 5471/766/929 5469/762/927 +f 5469/762/927 5472/763/926 5474/767/929 +f 5464/774/1237 5472/768/578 5473/771/932 +f 5473/771/932 5465/775/932 5464/774/1237 +f 5468/776/933 5474/777/933 5472/768/578 +f 5472/768/578 5464/774/1237 5468/776/933 +f 5475/778/934 5476/779/935 5477/780/936 +f 5477/780/936 5478/781/936 5475/778/934 +f 5479/782/937 5480/783/937 5476/779/935 +f 5476/779/935 5475/778/934 5479/782/937 +f 5481/784/1238 5475/785/939 5478/786/940 +f 5478/786/940 5482/787/940 5481/784/1238 +f 5483/788/941 5479/789/941 5475/785/939 +f 5475/785/939 5481/784/1238 5483/788/941 +f 5484/790/1000 5481/791/943 5482/792/944 +f 5482/792/944 5485/793/944 5484/790/1000 +f 5486/794/945 5483/795/945 5481/791/943 +f 5481/791/943 5484/790/1000 5486/794/945 +f 5476/785/946 5484/796/947 5485/787/948 +f 5485/787/948 5477/797/948 5476/785/946 +f 5480/789/949 5486/798/1239 5484/796/947 +f 5484/796/947 5476/785/946 5480/789/949 +f 5487/799/226 5488/800/226 5489/801/226 +f 5489/801/226 5490/802/226 5487/799/226 +f 5491/803/996 5492/804/997 5493/805/952 +f 5493/805/952 5494/806/952 5491/803/996 +f 5490/807/953 5489/808/953 5492/804/997 +f 5492/804/997 5491/803/996 5490/807/953 +f 5495/809/954 5491/810/954 5494/811/955 +f 5494/811/955 5496/812/955 5495/809/954 +f 5487/813/1240 5490/814/1240 5491/810/954 +f 5491/810/954 5495/809/954 5487/813/1240 +f 5497/804/957 5495/803/958 5496/806/959 +f 5496/806/959 5498/805/959 5497/804/957 +f 5488/808/960 5487/807/960 5495/803/958 +f 5495/803/958 5497/804/957 5488/808/960 +f 5492/815/1241 5497/809/1241 5498/816/962 +f 5498/816/962 5493/817/962 5492/815/1241 +f 5489/818/1242 5488/819/963 5497/809/1241 +f 5497/809/1241 5492/815/1241 5489/818/1242 +f 5499/820/36 5500/821/36 5501/822/36 +f 5501/822/36 5502/823/36 5499/820/36 +f 5503/824/998 5504/825/999 5505/826/966 +f 5505/826/966 5506/827/966 5503/824/998 +f 5502/828/967 5501/829/967 5504/825/999 +f 5504/825/999 5503/824/998 5502/828/967 +f 5507/737/968 5503/738/969 5506/734/970 +f 5506/734/970 5508/740/970 5507/737/968 +f 5499/741/1243 5502/735/1243 5503/738/969 +f 5503/738/969 5507/737/968 5499/741/1243 +f 5509/825/972 5507/824/972 5508/827/973 +f 5508/827/973 5510/826/973 5509/825/972 +f 5500/829/974 5499/828/974 5507/824/972 +f 5507/824/972 5509/825/972 5500/829/974 +f 5504/731/975 5509/737/976 5510/733/1244 +f 5510/733/1244 5505/830/1244 5504/731/975 +f 5501/831/1245 5500/736/1245 5509/737/976 +f 5509/737/976 5504/731/975 5501/831/1245 +f 5511/832/37 5512/833/37 5513/834/37 +f 5513/834/37 5514/835/37 5511/832/37 +f 5515/836/993 5516/837/979 5517/838/980 +f 5517/838/980 5518/839/980 5515/836/993 +f 5514/840/981 5513/841/981 5516/837/979 +f 5516/837/979 5515/836/993 5514/840/981 +f 5519/737/1246 5515/731/1246 5518/734/983 +f 5518/734/983 5520/733/983 5519/737/1246 +f 5511/741/985 5514/735/985 5515/731/1246 +f 5515/731/1246 5519/737/1246 5511/741/985 +f 5521/837/1001 5519/836/1001 5520/839/987 +f 5520/839/987 5522/838/987 5521/837/1001 +f 5512/841/988 5511/840/988 5519/836/1001 +f 5519/836/1001 5521/837/1001 5512/841/988 +f 5516/842/1247 5521/732/1247 5522/843/990 +f 5522/843/990 5517/734/990 5516/842/1247 +f 5513/831/991 5512/736/991 5521/732/1247 +f 5521/732/1247 5516/842/1247 5513/831/991 +f 5523/721/36 5524/722/36 5525/723/36 +f 5525/723/36 5526/724/36 5523/721/36 +f 5527/725/888 5528/726/888 5529/727/889 +f 5529/727/889 5530/728/889 5527/725/888 +f 5526/729/890 5525/730/890 5528/726/888 +f 5528/726/888 5527/725/888 5526/729/890 +f 5531/731/891 5527/732/892 5530/733/893 +f 5530/733/893 5532/734/893 5531/731/891 +f 5523/735/1248 5526/736/1248 5527/732/892 +f 5527/732/892 5531/731/891 5523/735/1248 +f 5533/726/896 5531/725/896 5532/728/897 +f 5532/728/897 5534/727/897 5533/726/896 +f 5524/730/898 5523/729/898 5531/725/896 +f 5531/725/896 5533/726/896 5524/730/898 +f 5528/737/899 5533/738/899 5534/739/900 +f 5534/739/900 5529/740/900 5528/737/899 +f 5525/741/901 5524/742/901 5533/738/899 +f 5533/738/899 5528/737/899 5525/741/901 +f 5535/743/36 5536/744/36 5537/745/36 +f 5537/745/36 5538/746/36 5535/743/36 +f 5539/747/995 5540/748/995 5541/749/903 +f 5541/749/903 5542/750/903 5539/747/995 +f 5538/751/904 5537/752/904 5540/748/995 +f 5540/748/995 5539/747/995 5538/751/904 +f 5543/753/905 5539/754/906 5542/755/907 +f 5542/755/907 5544/756/907 5543/753/905 +f 5535/757/1234 5538/758/1234 5539/754/906 +f 5539/754/906 5543/753/905 5535/757/1234 +f 5545/748/910 5543/747/911 5544/750/912 +f 5544/750/912 5546/749/912 5545/748/910 +f 5536/752/913 5535/751/913 5543/747/911 +f 5543/747/911 5545/748/910 5536/752/913 +f 5540/754/914 5545/759/1235 5546/760/916 +f 5546/760/916 5541/755/1249 5540/754/914 +f 5537/758/917 5536/761/917 5545/759/1235 +f 5545/759/1235 5540/754/914 5537/758/917 +f 5547/762/918 5548/763/919 5549/764/920 +f 5549/764/920 5550/765/920 5547/762/918 +f 5551/766/921 5552/767/921 5548/763/919 +f 5548/763/919 5547/762/918 5551/766/921 +f 5553/768/922 5547/769/923 5550/770/924 +f 5550/770/924 5554/771/924 5553/768/922 +f 5555/772/925 5551/773/925 5547/769/923 +f 5547/769/923 5553/768/922 5555/772/925 +f 5556/763/926 5553/762/927 5554/765/928 +f 5554/765/928 5557/764/928 5556/763/926 +f 5558/767/929 5555/766/929 5553/762/927 +f 5553/762/927 5556/763/926 5558/767/929 +f 5548/774/1237 5556/768/578 5557/771/932 +f 5557/771/932 5549/775/932 5548/774/1237 +f 5552/776/933 5558/777/933 5556/768/578 +f 5556/768/578 5548/774/1237 5552/776/933 +f 5559/778/934 5560/779/935 5561/780/936 +f 5561/780/936 5562/781/936 5559/778/934 +f 5563/782/937 5564/783/937 5560/779/935 +f 5560/779/935 5559/778/934 5563/782/937 +f 5565/784/1238 5559/785/939 5562/786/940 +f 5562/786/940 5566/787/940 5565/784/1238 +f 5567/788/941 5563/789/941 5559/785/939 +f 5559/785/939 5565/784/1238 5567/788/941 +f 5568/790/942 5565/791/943 5566/792/944 +f 5566/792/944 5569/793/944 5568/790/942 +f 5570/794/945 5567/795/945 5565/791/943 +f 5565/791/943 5568/790/942 5570/794/945 +f 5560/785/946 5568/796/947 5569/787/948 +f 5569/787/948 5561/797/948 5560/785/946 +f 5564/789/949 5570/798/949 5568/796/947 +f 5568/796/947 5560/785/946 5564/789/949 +f 5571/799/36 5572/800/36 5573/801/36 +f 5573/801/36 5574/802/36 5571/799/36 +f 5575/803/950 5576/804/951 5577/805/952 +f 5577/805/952 5578/806/952 5575/803/950 +f 5574/807/953 5573/808/953 5576/804/951 +f 5576/804/951 5575/803/950 5574/807/953 +f 5579/809/954 5575/810/954 5578/811/1250 +f 5578/811/1250 5580/812/1250 5579/809/954 +f 5571/813/1240 5574/814/1240 5575/810/954 +f 5575/810/954 5579/809/954 5571/813/1240 +f 5581/804/957 5579/803/958 5580/806/959 +f 5580/806/959 5582/805/959 5581/804/957 +f 5572/808/960 5571/807/960 5579/803/958 +f 5579/803/958 5581/804/957 5572/808/960 +f 5576/815/1241 5581/809/1241 5582/816/962 +f 5582/816/962 5577/817/962 5576/815/1241 +f 5573/818/1242 5572/819/963 5581/809/1241 +f 5581/809/1241 5576/815/1241 5573/818/1242 +f 5583/820/36 5584/821/36 5585/822/36 +f 5585/822/36 5586/823/36 5583/820/36 +f 5587/824/964 5588/825/965 5589/826/966 +f 5589/826/966 5590/827/966 5587/824/964 +f 5586/828/992 5585/829/967 5588/825/965 +f 5588/825/965 5587/824/964 5586/828/992 +f 5591/737/968 5587/738/969 5590/734/970 +f 5590/734/970 5592/740/970 5591/737/968 +f 5583/741/1243 5586/735/1243 5587/738/969 +f 5587/738/969 5591/737/968 5583/741/1243 +f 5593/825/972 5591/824/972 5592/827/973 +f 5592/827/973 5594/826/973 5593/825/972 +f 5584/829/974 5583/828/974 5591/824/972 +f 5591/824/972 5593/825/972 5584/829/974 +f 5588/731/1251 5593/737/976 5594/733/1244 +f 5594/733/1244 5589/830/977 5588/731/1251 +f 5585/831/1245 5584/736/1245 5593/737/976 +f 5593/737/976 5588/731/1251 5585/831/1245 +f 5595/832/36 5596/833/36 5597/834/36 +f 5597/834/36 5598/835/36 5595/832/36 +f 5599/836/993 5600/837/993 5601/838/980 +f 5601/838/980 5602/839/980 5599/836/993 +f 5598/840/981 5597/841/981 5600/837/993 +f 5600/837/993 5599/836/993 5598/840/981 +f 5603/737/982 5599/731/982 5602/734/983 +f 5602/734/983 5604/733/983 5603/737/982 +f 5595/741/985 5598/735/985 5599/731/982 +f 5599/731/982 5603/737/982 5595/741/985 +f 5605/837/986 5603/836/986 5604/839/987 +f 5604/839/987 5606/838/987 5605/837/986 +f 5596/841/988 5595/840/988 5603/836/986 +f 5603/836/986 5605/837/986 5596/841/988 +f 5600/842/989 5605/732/989 5606/843/990 +f 5606/843/990 5601/734/990 5600/842/989 +f 5597/831/1223 5596/736/1223 5605/732/989 +f 5605/732/989 5600/842/989 5597/831/1223 +f 5607/721/226 5608/722/226 5609/723/226 +f 5609/723/226 5610/724/226 5607/721/226 +f 5611/725/888 5612/726/888 5613/727/889 +f 5613/727/889 5614/728/889 5611/725/888 +f 5610/729/890 5609/730/890 5612/726/888 +f 5612/726/888 5611/725/888 5610/729/890 +f 5615/731/891 5611/732/892 5614/733/893 +f 5614/733/893 5616/734/893 5615/731/891 +f 5607/735/1248 5610/736/1248 5611/732/892 +f 5611/732/892 5615/731/891 5607/735/1248 +f 5617/726/896 5615/725/896 5616/728/897 +f 5616/728/897 5618/727/897 5617/726/896 +f 5608/730/898 5607/729/898 5615/725/896 +f 5615/725/896 5617/726/896 5608/730/898 +f 5612/737/899 5617/738/899 5618/739/900 +f 5618/739/900 5613/740/900 5612/737/899 +f 5609/741/901 5608/742/901 5617/738/899 +f 5617/738/899 5612/737/899 5609/741/901 +f 5619/743/36 5620/744/36 5621/745/36 +f 5621/745/36 5622/746/36 5619/743/36 +f 5623/747/995 5624/748/995 5625/749/903 +f 5625/749/903 5626/750/903 5623/747/995 +f 5622/751/904 5621/752/904 5624/748/995 +f 5624/748/995 5623/747/995 5622/751/904 +f 5627/753/905 5623/754/906 5626/755/907 +f 5626/755/907 5628/756/907 5627/753/905 +f 5619/757/1234 5622/758/1234 5623/754/906 +f 5623/754/906 5627/753/905 5619/757/1234 +f 5629/748/910 5627/747/911 5628/750/912 +f 5628/750/912 5630/749/912 5629/748/910 +f 5620/752/913 5619/751/913 5627/747/911 +f 5627/747/911 5629/748/910 5620/752/913 +f 5624/754/914 5629/759/1235 5630/760/916 +f 5630/760/916 5625/755/1249 5624/754/914 +f 5621/758/917 5620/761/917 5629/759/1235 +f 5629/759/1235 5624/754/914 5621/758/917 +f 5631/762/918 5632/763/919 5633/764/920 +f 5633/764/920 5634/765/920 5631/762/918 +f 5635/766/921 5636/767/921 5632/763/919 +f 5632/763/919 5631/762/918 5635/766/921 +f 5637/768/922 5631/769/923 5634/770/924 +f 5634/770/924 5638/771/924 5637/768/922 +f 5639/772/925 5635/773/925 5631/769/923 +f 5631/769/923 5637/768/922 5639/772/925 +f 5640/763/926 5637/762/927 5638/765/928 +f 5638/765/928 5641/764/928 5640/763/926 +f 5642/767/929 5639/766/929 5637/762/927 +f 5637/762/927 5640/763/926 5642/767/929 +f 5632/774/1237 5640/768/578 5641/771/932 +f 5641/771/932 5633/775/932 5632/774/1237 +f 5636/776/933 5642/777/933 5640/768/578 +f 5640/768/578 5632/774/1237 5636/776/933 +f 5643/778/934 5644/779/935 5645/780/936 +f 5645/780/936 5646/781/936 5643/778/934 +f 5647/782/937 5648/783/937 5644/779/935 +f 5644/779/935 5643/778/934 5647/782/937 +f 5649/784/1238 5643/785/939 5646/786/940 +f 5646/786/940 5650/787/940 5649/784/1238 +f 5651/788/941 5647/789/941 5643/785/939 +f 5643/785/939 5649/784/1238 5651/788/941 +f 5652/790/942 5649/791/943 5650/792/944 +f 5650/792/944 5653/793/944 5652/790/942 +f 5654/794/945 5651/795/945 5649/791/943 +f 5649/791/943 5652/790/942 5654/794/945 +f 5644/785/946 5652/796/947 5653/787/948 +f 5653/787/948 5645/797/948 5644/785/946 +f 5648/789/949 5654/798/949 5652/796/947 +f 5652/796/947 5644/785/946 5648/789/949 +f 5655/799/37 5656/800/37 5657/801/37 +f 5657/801/37 5658/802/37 5655/799/37 +f 5659/803/996 5660/804/997 5661/805/952 +f 5661/805/952 5662/806/952 5659/803/996 +f 5658/807/953 5657/808/953 5660/804/997 +f 5660/804/997 5659/803/996 5658/807/953 +f 5663/809/954 5659/810/954 5662/811/1250 +f 5662/811/1250 5664/812/1250 5663/809/954 +f 5655/813/1240 5658/814/1240 5659/810/954 +f 5659/810/954 5663/809/954 5655/813/1240 +f 5665/804/957 5663/803/958 5664/806/959 +f 5664/806/959 5666/805/959 5665/804/957 +f 5656/808/960 5655/807/960 5663/803/958 +f 5663/803/958 5665/804/957 5656/808/960 +f 5660/815/1241 5665/809/1241 5666/816/962 +f 5666/816/962 5661/817/962 5660/815/1241 +f 5657/818/1242 5656/819/963 5665/809/1241 +f 5665/809/1241 5660/815/1241 5657/818/1242 +f 5667/820/36 5668/821/36 5669/822/36 +f 5669/822/36 5670/823/36 5667/820/36 +f 5671/824/964 5672/825/965 5673/826/966 +f 5673/826/966 5674/827/966 5671/824/964 +f 5670/828/992 5669/829/967 5672/825/965 +f 5672/825/965 5671/824/964 5670/828/992 +f 5675/737/968 5671/738/969 5674/734/970 +f 5674/734/970 5676/740/970 5675/737/968 +f 5667/741/1243 5670/735/1243 5671/738/969 +f 5671/738/969 5675/737/968 5667/741/1243 +f 5677/825/1002 5675/824/972 5676/827/973 +f 5676/827/973 5678/826/973 5677/825/1002 +f 5668/829/974 5667/828/974 5675/824/972 +f 5675/824/972 5677/825/1002 5668/829/974 +f 5672/731/1251 5677/737/976 5678/733/1244 +f 5678/733/1244 5673/830/977 5672/731/1251 +f 5669/831/1245 5668/736/1245 5677/737/976 +f 5677/737/976 5672/731/1251 5669/831/1245 +f 5679/832/37 5680/833/37 5681/834/37 +f 5681/834/37 5682/835/37 5679/832/37 +f 5683/836/993 5684/837/993 5685/838/980 +f 5685/838/980 5686/839/980 5683/836/993 +f 5682/840/981 5681/841/981 5684/837/993 +f 5684/837/993 5683/836/993 5682/840/981 +f 5687/737/982 5683/731/982 5686/734/983 +f 5686/734/983 5688/733/983 5687/737/982 +f 5679/741/985 5682/735/985 5683/731/982 +f 5683/731/982 5687/737/982 5679/741/985 +f 5689/837/986 5687/836/986 5688/839/987 +f 5688/839/987 5690/838/987 5689/837/986 +f 5680/841/988 5679/840/988 5687/836/986 +f 5687/836/986 5689/837/986 5680/841/988 +f 5684/842/989 5689/732/989 5690/843/990 +f 5690/843/990 5685/734/990 5684/842/989 +f 5681/831/1223 5680/736/1223 5689/732/989 +f 5689/732/989 5684/842/989 5681/831/1223 +f 5691/721/36 5692/722/36 5693/723/36 +f 5693/723/36 5694/724/36 5691/721/36 +f 5695/725/1003 5696/726/1004 5697/727/1112 +f 5697/727/1112 5698/728/1112 5695/725/1003 +f 5694/729/1006 5693/730/1006 5696/726/1004 +f 5696/726/1004 5695/725/1003 5694/729/1006 +f 5699/731/1007 5695/732/1008 5698/733/1009 +f 5698/733/1009 5700/734/1009 5699/731/1007 +f 5691/735/1010 5694/736/1010 5695/732/1008 +f 5695/732/1008 5699/731/1007 5691/735/1010 +f 5701/726/1011 5699/725/1011 5700/728/1012 +f 5700/728/1012 5702/727/1012 5701/726/1011 +f 5692/730/1013 5691/729/1013 5699/725/1011 +f 5699/725/1011 5701/726/1011 5692/730/1013 +f 5696/737/1014 5701/738/1014 5702/739/1015 +f 5702/739/1015 5697/740/1015 5696/737/1014 +f 5693/741/1016 5692/742/1016 5701/738/1014 +f 5701/738/1014 5696/737/1014 5693/741/1016 +f 5703/743/36 5704/744/36 5705/745/36 +f 5705/745/36 5706/746/36 5703/743/36 +f 5707/747/1017 5708/748/1017 5709/749/1018 +f 5709/749/1018 5710/750/1018 5707/747/1017 +f 5706/751/1019 5705/752/1019 5708/748/1017 +f 5708/748/1017 5707/747/1017 5706/751/1019 +f 5711/753/1020 5707/754/1021 5710/755/1022 +f 5710/755/1022 5712/756/1022 5711/753/1020 +f 5703/757/1023 5706/758/1023 5707/754/1021 +f 5707/754/1021 5711/753/1020 5703/757/1023 +f 5713/748/1024 5711/747/1025 5712/750/1097 +f 5712/750/1097 5714/749/1097 5713/748/1024 +f 5704/752/1028 5703/751/1028 5711/747/1025 +f 5711/747/1025 5713/748/1024 5704/752/1028 +f 5708/754/1029 5713/759/1030 5714/760/1031 +f 5714/760/1031 5709/755/1031 5708/754/1029 +f 5705/758/1032 5704/761/1032 5713/759/1030 +f 5713/759/1030 5708/754/1029 5705/758/1032 +f 5715/762/1033 5716/763/1034 5717/764/1035 +f 5717/764/1035 5718/765/1035 5715/762/1033 +f 5719/766/1036 5720/767/1036 5716/763/1034 +f 5716/763/1034 5715/762/1033 5719/766/1036 +f 5721/768/1037 5715/769/1038 5718/770/1039 +f 5718/770/1039 5722/771/1039 5721/768/1037 +f 5723/772/1040 5719/773/1040 5715/769/1038 +f 5715/769/1038 5721/768/1037 5723/772/1040 +f 5724/763/1041 5721/762/1042 5722/765/1043 +f 5722/765/1043 5725/764/1043 5724/763/1041 +f 5726/767/1044 5723/766/1044 5721/762/1042 +f 5721/762/1042 5724/763/1041 5726/767/1044 +f 5716/774/1045 5724/768/1046 5725/771/1047 +f 5725/771/1047 5717/775/1047 5716/774/1045 +f 5720/776/1048 5726/777/1048 5724/768/1046 +f 5724/768/1046 5716/774/1045 5720/776/1048 +f 5727/778/1114 5728/779/1050 5729/780/1051 +f 5729/780/1051 5730/781/1051 5727/778/1114 +f 5731/782/1052 5732/783/1052 5728/779/1050 +f 5728/779/1050 5727/778/1114 5731/782/1052 +f 5733/784/1053 5727/785/1099 5730/786/1055 +f 5730/786/1055 5734/787/1055 5733/784/1053 +f 5735/788/1056 5731/789/1056 5727/785/1099 +f 5727/785/1099 5733/784/1053 5735/788/1056 +f 5736/790/1057 5733/791/1115 5734/792/1059 +f 5734/792/1059 5737/793/1059 5736/790/1057 +f 5738/794/1060 5735/795/1060 5733/791/1115 +f 5733/791/1115 5736/790/1057 5738/794/1060 +f 5728/785/1061 5736/796/1062 5737/787/1063 +f 5737/787/1063 5729/797/1063 5728/785/1061 +f 5732/789/1064 5738/798/1064 5736/796/1062 +f 5736/796/1062 5728/785/1061 5732/789/1064 +f 5739/799/36 5740/800/36 5741/801/36 +f 5741/801/36 5742/802/36 5739/799/36 +f 5743/803/1252 5744/804/1253 5745/805/869 +f 5745/805/869 5746/806/869 5743/803/1252 +f 5742/807/870 5741/808/870 5744/804/1253 +f 5744/804/1253 5743/803/1252 5742/807/870 +f 5747/809/1065 5743/810/1065 5746/811/1254 +f 5746/811/1254 5748/812/1254 5747/809/1065 +f 5739/813/1067 5742/814/1067 5743/810/1065 +f 5743/810/1065 5747/809/1065 5739/813/1067 +f 5749/804/809 5747/803/808 5748/806/1101 +f 5748/806/1101 5750/805/1101 5749/804/809 +f 5740/808/1102 5739/807/1102 5747/803/808 +f 5747/803/808 5749/804/809 5740/808/1102 +f 5744/815/1068 5749/809/1068 5750/816/1069 +f 5750/816/1069 5745/817/1069 5744/815/1068 +f 5741/818/1255 5740/819/1071 5749/809/1068 +f 5749/809/1068 5744/815/1068 5741/818/1255 +f 5751/820/36 5752/821/36 5753/822/36 +f 5753/822/36 5754/823/36 5751/820/36 +f 5755/824/1103 5756/825/1104 5757/826/1074 +f 5757/826/1074 5758/827/1074 5755/824/1103 +f 5754/828/1105 5753/829/1105 5756/825/1104 +f 5756/825/1104 5755/824/1103 5754/828/1105 +f 5759/737/1076 5755/738/1077 5758/734/1078 +f 5758/734/1078 5760/740/1078 5759/737/1076 +f 5751/741/1079 5754/735/1079 5755/738/1077 +f 5755/738/1077 5759/737/1076 5751/741/1079 +f 5761/825/1106 5759/824/1080 5760/827/1081 +f 5760/827/1081 5762/826/1081 5761/825/1106 +f 5752/829/1082 5751/828/1082 5759/824/1080 +f 5759/824/1080 5761/825/1106 5752/829/1082 +f 5756/731/1083 5761/737/1084 5762/733/1085 +f 5762/733/1085 5757/830/1085 5756/731/1083 +f 5753/831/1086 5752/736/1086 5761/737/1084 +f 5761/737/1084 5756/731/1083 5753/831/1086 +f 5763/832/36 5764/833/36 5765/834/36 +f 5765/834/36 5766/835/36 5763/832/36 +f 5767/836/1087 5768/837/1087 5769/838/1256 +f 5769/838/1256 5770/839/1256 5767/836/1087 +f 5766/840/1116 5765/841/1116 5768/837/1087 +f 5768/837/1087 5767/836/1087 5766/840/1116 +f 5771/737/848 5767/731/848 5770/734/849 +f 5770/734/849 5772/733/849 5771/737/848 +f 5763/741/850 5766/735/850 5767/731/848 +f 5767/731/848 5771/737/848 5763/741/850 +f 5773/837/1090 5771/836/1090 5772/839/1091 +f 5772/839/1091 5774/838/1091 5773/837/1090 +f 5764/841/1092 5763/840/1092 5771/836/1090 +f 5771/836/1090 5773/837/1090 5764/841/1092 +f 5768/842/842 5773/732/842 5774/843/843 +f 5774/843/843 5769/734/843 5768/842/842 +f 5765/831/844 5764/736/1094 5773/732/842 +f 5773/732/842 5768/842/842 5765/831/844 +f 5775/721/37 5776/722/37 5777/723/37 +f 5777/723/37 5778/724/37 5775/721/37 +f 5779/725/1003 5780/726/1004 5781/727/1112 +f 5781/727/1112 5782/728/1112 5779/725/1003 +f 5778/729/1006 5777/730/1006 5780/726/1004 +f 5780/726/1004 5779/725/1003 5778/729/1006 +f 5783/731/1007 5779/732/1008 5782/733/1009 +f 5782/733/1009 5784/734/1009 5783/731/1007 +f 5775/735/1010 5778/736/1010 5779/732/1008 +f 5779/732/1008 5783/731/1007 5775/735/1010 +f 5785/726/1011 5783/725/1011 5784/728/1012 +f 5784/728/1012 5786/727/1012 5785/726/1011 +f 5776/730/1013 5775/729/1013 5783/725/1011 +f 5783/725/1011 5785/726/1011 5776/730/1013 +f 5780/737/1014 5785/738/1014 5786/739/1015 +f 5786/739/1015 5781/740/1015 5780/737/1014 +f 5777/741/1016 5776/742/1016 5785/738/1014 +f 5785/738/1014 5780/737/1014 5777/741/1016 +f 5787/743/36 5788/744/36 5789/745/36 +f 5789/745/36 5790/746/36 5787/743/36 +f 5791/747/1017 5792/748/1017 5793/749/1018 +f 5793/749/1018 5794/750/1018 5791/747/1017 +f 5790/751/1019 5789/752/1019 5792/748/1017 +f 5792/748/1017 5791/747/1017 5790/751/1019 +f 5795/753/1020 5791/754/1021 5794/755/1022 +f 5794/755/1022 5796/756/1022 5795/753/1020 +f 5787/757/1023 5790/758/1023 5791/754/1021 +f 5791/754/1021 5795/753/1020 5787/757/1023 +f 5797/748/1024 5795/747/1025 5796/750/1097 +f 5796/750/1097 5798/749/1097 5797/748/1024 +f 5788/752/1028 5787/751/1028 5795/747/1025 +f 5795/747/1025 5797/748/1024 5788/752/1028 +f 5792/754/1029 5797/759/1030 5798/760/1031 +f 5798/760/1031 5793/755/1031 5792/754/1029 +f 5789/758/1032 5788/761/1032 5797/759/1030 +f 5797/759/1030 5792/754/1029 5789/758/1032 +f 5799/762/1033 5800/763/1034 5801/764/1035 +f 5801/764/1035 5802/765/1035 5799/762/1033 +f 5803/766/1036 5804/767/1036 5800/763/1034 +f 5800/763/1034 5799/762/1033 5803/766/1036 +f 5805/768/1098 5799/769/1038 5802/770/1039 +f 5802/770/1039 5806/771/1039 5805/768/1098 +f 5807/772/1040 5803/773/1040 5799/769/1038 +f 5799/769/1038 5805/768/1098 5807/772/1040 +f 5808/763/1041 5805/762/1042 5806/765/1043 +f 5806/765/1043 5809/764/1043 5808/763/1041 +f 5810/767/1044 5807/766/1044 5805/762/1042 +f 5805/762/1042 5808/763/1041 5810/767/1044 +f 5800/774/1045 5808/768/1046 5809/771/1047 +f 5809/771/1047 5801/775/1047 5800/774/1045 +f 5804/776/1048 5810/777/1048 5808/768/1046 +f 5808/768/1046 5800/774/1045 5804/776/1048 +f 5811/778/1049 5812/779/1050 5813/780/1051 +f 5813/780/1051 5814/781/1051 5811/778/1049 +f 5815/782/1052 5816/783/1052 5812/779/1050 +f 5812/779/1050 5811/778/1049 5815/782/1052 +f 5817/784/1053 5811/785/1099 5814/786/1055 +f 5814/786/1055 5818/787/1055 5817/784/1053 +f 5819/788/1056 5815/789/1056 5811/785/1099 +f 5811/785/1099 5817/784/1053 5819/788/1056 +f 5820/790/1057 5817/791/1115 5818/792/1059 +f 5818/792/1059 5821/793/1059 5820/790/1057 +f 5822/794/1060 5819/795/1060 5817/791/1115 +f 5817/791/1115 5820/790/1057 5822/794/1060 +f 5812/785/1061 5820/796/1062 5821/787/1063 +f 5821/787/1063 5813/797/1063 5812/785/1061 +f 5816/789/1064 5822/798/1064 5820/796/1062 +f 5820/796/1062 5812/785/1061 5816/789/1064 +f 5823/799/36 5824/800/36 5825/801/36 +f 5825/801/36 5826/802/36 5823/799/36 +f 5827/803/1252 5828/804/1253 5829/805/869 +f 5829/805/869 5830/806/869 5827/803/1252 +f 5826/807/870 5825/808/870 5828/804/1253 +f 5828/804/1253 5827/803/1252 5826/807/870 +f 5831/809/1065 5827/810/1065 5830/811/1066 +f 5830/811/1066 5832/812/1066 5831/809/1065 +f 5823/813/1067 5826/814/1067 5827/810/1065 +f 5827/810/1065 5831/809/1065 5823/813/1067 +f 5833/804/809 5831/803/808 5832/806/1101 +f 5832/806/1101 5834/805/1101 5833/804/809 +f 5824/808/1102 5823/807/1102 5831/803/808 +f 5831/803/808 5833/804/809 5824/808/1102 +f 5828/815/1068 5833/809/1068 5834/816/1069 +f 5834/816/1069 5829/817/1069 5828/815/1068 +f 5825/818/1071 5824/819/1071 5833/809/1068 +f 5833/809/1068 5828/815/1068 5825/818/1071 +f 5835/820/36 5836/821/36 5837/822/36 +f 5837/822/36 5838/823/36 5835/820/36 +f 5839/824/1103 5840/825/1104 5841/826/1074 +f 5841/826/1074 5842/827/1074 5839/824/1103 +f 5838/828/1105 5837/829/1105 5840/825/1104 +f 5840/825/1104 5839/824/1103 5838/828/1105 +f 5843/737/1076 5839/738/1077 5842/734/1078 +f 5842/734/1078 5844/740/1078 5843/737/1076 +f 5835/741/1079 5838/735/1079 5839/738/1077 +f 5839/738/1077 5843/737/1076 5835/741/1079 +f 5845/825/1106 5843/824/1080 5844/827/1081 +f 5844/827/1081 5846/826/1081 5845/825/1106 +f 5836/829/1082 5835/828/1082 5843/824/1080 +f 5843/824/1080 5845/825/1106 5836/829/1082 +f 5840/731/1083 5845/737/1084 5846/733/1085 +f 5846/733/1085 5841/830/1085 5840/731/1083 +f 5837/831/1086 5836/736/1086 5845/737/1084 +f 5845/737/1084 5840/731/1083 5837/831/1086 +f 5847/832/36 5848/833/36 5849/834/36 +f 5849/834/36 5850/835/36 5847/832/36 +f 5851/836/1087 5852/837/1087 5853/838/1256 +f 5853/838/1256 5854/839/1256 5851/836/1087 +f 5850/840/1110 5849/841/1110 5852/837/1087 +f 5852/837/1087 5851/836/1087 5850/840/1110 +f 5855/737/848 5851/731/848 5854/734/849 +f 5854/734/849 5856/733/849 5855/737/848 +f 5847/741/850 5850/735/850 5851/731/848 +f 5851/731/848 5855/737/848 5847/741/850 +f 5857/837/1090 5855/836/1090 5856/839/1091 +f 5856/839/1091 5858/838/1091 5857/837/1090 +f 5848/841/1092 5847/840/1092 5855/836/1090 +f 5855/836/1090 5857/837/1090 5848/841/1092 +f 5852/842/842 5857/732/842 5858/843/843 +f 5858/843/843 5853/734/843 5852/842/842 +f 5849/831/1094 5848/736/1094 5857/732/842 +f 5857/732/842 5852/842/842 5849/831/1094 +f 5859/721/36 5860/722/36 5861/723/36 +f 5861/723/36 5862/724/36 5859/721/36 +f 5863/725/1003 5864/726/1004 5865/727/1112 +f 5865/727/1112 5866/728/1112 5863/725/1003 +f 5862/729/1006 5861/730/1006 5864/726/1004 +f 5864/726/1004 5863/725/1003 5862/729/1006 +f 5867/731/1007 5863/732/1008 5866/733/1009 +f 5866/733/1009 5868/734/1009 5867/731/1007 +f 5859/735/1010 5862/736/1010 5863/732/1008 +f 5863/732/1008 5867/731/1007 5859/735/1010 +f 5869/726/1011 5867/725/1011 5868/728/1012 +f 5868/728/1012 5870/727/1012 5869/726/1011 +f 5860/730/1013 5859/729/1013 5867/725/1011 +f 5867/725/1011 5869/726/1011 5860/730/1013 +f 5864/737/1014 5869/738/1014 5870/739/1015 +f 5870/739/1015 5865/740/1015 5864/737/1014 +f 5861/741/1016 5860/742/1016 5869/738/1014 +f 5869/738/1014 5864/737/1014 5861/741/1016 +f 5871/743/36 5872/744/36 5873/745/36 +f 5873/745/36 5874/746/36 5871/743/36 +f 5875/747/1017 5876/748/1017 5877/749/1018 +f 5877/749/1018 5878/750/1018 5875/747/1017 +f 5874/751/1019 5873/752/1019 5876/748/1017 +f 5876/748/1017 5875/747/1017 5874/751/1019 +f 5879/753/1020 5875/754/1021 5878/755/1022 +f 5878/755/1022 5880/756/1022 5879/753/1020 +f 5871/757/1023 5874/758/1023 5875/754/1021 +f 5875/754/1021 5879/753/1020 5871/757/1023 +f 5881/748/1024 5879/747/1025 5880/750/1097 +f 5880/750/1097 5882/749/1097 5881/748/1024 +f 5872/752/1028 5871/751/1028 5879/747/1025 +f 5879/747/1025 5881/748/1024 5872/752/1028 +f 5876/754/1029 5881/759/1030 5882/760/1031 +f 5882/760/1031 5877/755/1031 5876/754/1029 +f 5873/758/1032 5872/761/1032 5881/759/1030 +f 5881/759/1030 5876/754/1029 5873/758/1032 +f 5883/762/1033 5884/763/1034 5885/764/1035 +f 5885/764/1035 5886/765/1035 5883/762/1033 +f 5887/766/1036 5888/767/1036 5884/763/1034 +f 5884/763/1034 5883/762/1033 5887/766/1036 +f 5889/768/1037 5883/769/1038 5886/770/1039 +f 5886/770/1039 5890/771/1039 5889/768/1037 +f 5891/772/1040 5887/773/1040 5883/769/1038 +f 5883/769/1038 5889/768/1037 5891/772/1040 +f 5892/763/1041 5889/762/1042 5890/765/1043 +f 5890/765/1043 5893/764/1043 5892/763/1041 +f 5894/767/1044 5891/766/1044 5889/762/1042 +f 5889/762/1042 5892/763/1041 5894/767/1044 +f 5884/774/1045 5892/768/1046 5893/771/1047 +f 5893/771/1047 5885/775/1047 5884/774/1045 +f 5888/776/1048 5894/777/1048 5892/768/1046 +f 5892/768/1046 5884/774/1045 5888/776/1048 +f 5895/778/1049 5896/779/1050 5897/780/1051 +f 5897/780/1051 5898/781/1051 5895/778/1049 +f 5899/782/1052 5900/783/1052 5896/779/1050 +f 5896/779/1050 5895/778/1049 5899/782/1052 +f 5901/784/1053 5895/785/1099 5898/786/1055 +f 5898/786/1055 5902/787/1055 5901/784/1053 +f 5903/788/1056 5899/789/1056 5895/785/1099 +f 5895/785/1099 5901/784/1053 5903/788/1056 +f 5904/790/1057 5901/791/1115 5902/792/1059 +f 5902/792/1059 5905/793/1059 5904/790/1057 +f 5906/794/1060 5903/795/1060 5901/791/1115 +f 5901/791/1115 5904/790/1057 5906/794/1060 +f 5896/785/1061 5904/796/1062 5905/787/1063 +f 5905/787/1063 5897/797/1063 5896/785/1061 +f 5900/789/1064 5906/798/1064 5904/796/1062 +f 5904/796/1062 5896/785/1061 5900/789/1064 +f 5907/799/36 5908/800/36 5909/801/36 +f 5909/801/36 5910/802/36 5907/799/36 +f 5911/803/1252 5912/804/1253 5913/805/869 +f 5913/805/869 5914/806/869 5911/803/1252 +f 5910/807/870 5909/808/870 5912/804/1253 +f 5912/804/1253 5911/803/1252 5910/807/870 +f 5915/809/1065 5911/810/1065 5914/811/1066 +f 5914/811/1066 5916/812/1066 5915/809/1065 +f 5907/813/1067 5910/814/1067 5911/810/1065 +f 5911/810/1065 5915/809/1065 5907/813/1067 +f 5917/804/809 5915/803/808 5916/806/1101 +f 5916/806/1101 5918/805/1101 5917/804/809 +f 5908/808/1102 5907/807/1102 5915/803/808 +f 5915/803/808 5917/804/809 5908/808/1102 +f 5912/815/1068 5917/809/1068 5918/816/1069 +f 5918/816/1069 5913/817/1069 5912/815/1068 +f 5909/818/1070 5908/819/1071 5917/809/1068 +f 5917/809/1068 5912/815/1068 5909/818/1070 +f 5919/820/36 5920/821/36 5921/822/36 +f 5921/822/36 5922/823/36 5919/820/36 +f 5923/824/1103 5924/825/1104 5925/826/1074 +f 5925/826/1074 5926/827/1074 5923/824/1103 +f 5922/828/1105 5921/829/1105 5924/825/1104 +f 5924/825/1104 5923/824/1103 5922/828/1105 +f 5927/737/1076 5923/738/1077 5926/734/1078 +f 5926/734/1078 5928/740/1078 5927/737/1076 +f 5919/741/1079 5922/735/1079 5923/738/1077 +f 5923/738/1077 5927/737/1076 5919/741/1079 +f 5929/825/1106 5927/824/1080 5928/827/1081 +f 5928/827/1081 5930/826/1081 5929/825/1106 +f 5920/829/1082 5919/828/1082 5927/824/1080 +f 5927/824/1080 5929/825/1106 5920/829/1082 +f 5924/731/1083 5929/737/1084 5930/733/1085 +f 5930/733/1085 5925/830/1085 5924/731/1083 +f 5921/831/1086 5920/736/1086 5929/737/1084 +f 5929/737/1084 5924/731/1083 5921/831/1086 +f 5931/832/36 5932/833/36 5933/834/36 +f 5933/834/36 5934/835/36 5931/832/36 +f 5935/836/1087 5936/837/1087 5937/838/1256 +f 5937/838/1256 5938/839/1256 5935/836/1087 +f 5934/840/1110 5933/841/1110 5936/837/1087 +f 5936/837/1087 5935/836/1087 5934/840/1110 +f 5939/737/848 5935/731/848 5938/734/849 +f 5938/734/849 5940/733/849 5939/737/848 +f 5931/741/850 5934/735/850 5935/731/848 +f 5935/731/848 5939/737/848 5931/741/850 +f 5941/837/1090 5939/836/1090 5940/839/1091 +f 5940/839/1091 5942/838/1091 5941/837/1090 +f 5932/841/1092 5931/840/1092 5939/836/1090 +f 5939/836/1090 5941/837/1090 5932/841/1092 +f 5936/842/842 5941/732/842 5942/843/843 +f 5942/843/843 5937/734/843 5936/842/842 +f 5933/831/844 5932/736/1094 5941/732/842 +f 5941/732/842 5936/842/842 5933/831/844 +f 5943/844/1257 5944/845/1257 5945/846/1257 +f 5946/847/1258 5947/848/1258 5948/849/1259 +f 5948/849/1259 5949/850/1260 5946/847/1258 +f 5949/851/1260 5948/852/1259 5950/853/1261 +f 5950/853/1261 5951/854/1261 5949/851/1260 +f 5951/854/1261 5950/853/1261 5952/855/1262 +f 5952/855/1262 5953/856/1262 5951/854/1261 +f 5953/856/1262 5952/855/1262 5944/857/1263 +f 5944/857/1263 5954/858/1263 5953/856/1262 +f 5954/858/1263 5944/857/1263 5943/859/1264 +f 5943/859/1264 5955/860/1264 5954/858/1263 +f 5955/860/1264 5943/859/1264 5956/861/1265 +f 5956/861/1265 5957/862/1265 5955/860/1264 +f 5957/862/1265 5956/861/1265 5958/863/1266 +f 5958/863/1266 5959/864/1266 5957/862/1265 +f 5959/864/1266 5958/863/1266 5960/865/1267 +f 5960/865/1267 5961/866/1267 5959/864/1266 +f 5961/866/1267 5960/865/1267 5962/867/1268 +f 5962/867/1268 5963/868/1269 5961/866/1267 +f 5963/868/1269 5962/867/1268 5947/848/1258 +f 5947/848/1258 5946/847/1258 5963/868/1269 +f 5963/869/1270 5946/870/1270 5964/846/1271 +f 5949/871/1270 5951/872/1271 5964/846/1271 +f 5955/844/1271 5957/873/1271 5964/846/1271 +f 5964/846/1271 5961/874/1270 5963/869/1270 +f 5953/875/1271 5954/845/1271 5964/846/1271 +f 5964/846/1271 5959/876/1271 5961/874/1270 +f 5951/872/1271 5953/875/1271 5964/846/1271 +f 5964/846/1271 5957/873/1271 5959/876/1271 +f 5946/870/1270 5949/871/1270 5964/846/1271 +f 5964/846/1271 5954/845/1271 5955/844/1271 +f 5945/846/1257 5962/869/1272 5960/874/1272 +f 5948/871/1257 5947/870/1257 5945/846/1257 +f 5945/846/1257 5947/870/1257 5962/869/1272 +f 5960/874/1272 5958/876/1272 5945/846/1257 +f 5945/846/1257 5944/845/1257 5952/875/1257 +f 5958/876/1272 5956/873/1272 5945/846/1257 +f 5945/846/1257 5952/875/1257 5950/872/1257 +f 5956/873/1272 5943/844/1257 5945/846/1257 +f 5945/846/1257 5950/872/1257 5948/871/1257 +f 5965/877/1273 5966/878/1273 5967/879/1274 +f 5967/879/1274 5968/880/1274 5965/877/1273 +f 5969/881/1275 5970/882/1275 5966/883/1276 +f 5966/883/1276 5965/884/1276 5969/881/1275 +f 5971/885/1277 5969/886/1277 5965/887/1277 +f 5965/887/1277 5968/888/1277 5971/885/1277 +f 5972/882/1278 5971/881/1278 5968/884/1278 +f 5968/884/1278 5967/883/1278 5972/882/1278 +f 5970/886/1279 5972/885/1279 5967/888/1279 +f 5967/888/1279 5966/887/1280 5970/886/1279 +f 5973/879/1281 5974/878/1281 5975/877/1281 +f 5975/877/1281 5976/880/1281 5973/879/1281 +f 5974/883/1282 5977/882/1283 5978/881/1283 +f 5978/881/1283 5975/884/1282 5974/883/1282 +f 5975/887/1284 5978/886/1284 5979/885/1284 +f 5979/885/1284 5976/888/1284 5975/887/1284 +f 5976/884/1285 5979/881/1285 5980/882/1285 +f 5980/882/1285 5973/883/1285 5976/884/1285 +f 5973/888/1286 5980/885/1287 5977/886/1287 +f 5977/886/1287 5974/887/1286 5973/888/1286 +f 5981/883/1288 5982/882/1289 5983/881/1289 +f 5983/881/1289 5984/884/1288 5981/883/1288 +f 5984/887/1290 5983/886/1290 5985/885/1290 +f 5985/885/1290 5986/888/1290 5984/887/1290 +f 5986/884/1291 5985/881/1292 5987/882/1292 +f 5987/882/1292 5988/883/1291 5986/884/1291 +f 5988/888/1293 5987/885/1293 5982/886/1293 +f 5982/886/1293 5981/887/1293 5988/888/1293 +f 5989/844/1294 5990/845/1294 5991/846/1294 +f 5992/847/1295 5993/848/1295 5994/849/1296 +f 5994/849/1296 5995/850/1296 5992/847/1295 +f 5995/851/1296 5994/852/1296 5996/853/1297 +f 5996/853/1297 5997/854/1297 5995/851/1296 +f 5997/854/1297 5996/853/1297 5998/855/1298 +f 5998/855/1298 5999/856/1298 5997/854/1297 +f 5999/856/1298 5998/855/1298 5990/857/1299 +f 5990/857/1299 6000/858/1299 5999/856/1298 +f 6000/858/1299 5990/857/1299 5989/859/1300 +f 5989/859/1300 6001/860/1300 6000/858/1299 +f 6001/860/1300 5989/859/1300 6002/861/1301 +f 6002/861/1301 6003/862/1301 6001/860/1300 +f 6003/862/1301 6002/861/1301 6004/863/1302 +f 6004/863/1302 6005/864/1302 6003/862/1301 +f 6005/864/1302 6004/863/1302 6006/865/1303 +f 6006/865/1303 6007/866/1303 6005/864/1302 +f 6007/866/1303 6006/865/1303 6008/867/1304 +f 6008/867/1304 6009/868/1304 6007/866/1303 +f 6009/868/1304 6008/867/1304 5993/848/1295 +f 5993/848/1295 5992/847/1295 6009/868/1304 +f 6009/869/1305 5992/870/1305 6010/846/1306 +f 5995/871/1306 5997/872/1306 6010/846/1306 +f 6001/844/1306 6003/873/1306 6010/846/1306 +f 6010/846/1306 6007/874/1305 6009/869/1305 +f 5999/875/1306 6000/845/1306 6010/846/1306 +f 6010/846/1306 6005/876/1305 6007/874/1305 +f 5997/872/1306 5999/875/1306 6010/846/1306 +f 6010/846/1306 6003/873/1306 6005/876/1305 +f 5992/870/1305 5995/871/1306 6010/846/1306 +f 6010/846/1306 6000/845/1306 6001/844/1306 +f 5991/846/1294 6008/869/1307 6006/874/1307 +f 5994/871/1294 5993/870/1294 5991/846/1294 +f 5991/846/1294 5993/870/1294 6008/869/1307 +f 6006/874/1307 6004/876/1307 5991/846/1294 +f 5991/846/1294 5990/845/1294 5998/875/1294 +f 6004/876/1307 6002/873/1307 5991/846/1294 +f 5991/846/1294 5998/875/1294 5996/872/1294 +f 6002/873/1307 5989/844/1294 5991/846/1294 +f 5991/846/1294 5996/872/1294 5994/871/1294 +f 6011/877/1308 6012/878/1308 6013/879/1308 +f 6013/879/1308 6014/880/1308 6011/877/1308 +f 6015/881/1309 6016/882/1309 6012/883/1310 +f 6012/883/1310 6011/884/1310 6015/881/1309 +f 6017/885/1311 6015/886/1311 6011/887/1311 +f 6011/887/1311 6014/888/1311 6017/885/1311 +f 6018/882/1312 6017/881/1312 6014/884/1312 +f 6014/884/1312 6013/883/1312 6018/882/1312 +f 6016/886/1313 6018/885/1313 6013/888/1314 +f 6013/888/1314 6012/887/1314 6016/886/1313 +f 6019/879/1315 6020/878/1315 6021/877/1315 +f 6021/877/1315 6022/880/1315 6019/879/1315 +f 6020/883/1316 6023/882/1316 6024/881/1316 +f 6024/881/1316 6021/884/1316 6020/883/1316 +f 6021/887/1317 6024/886/1317 6025/885/1317 +f 6025/885/1317 6022/888/1317 6021/887/1317 +f 6022/884/1318 6025/881/1319 6026/882/1319 +f 6026/882/1319 6019/883/1318 6022/884/1318 +f 6019/888/1320 6026/885/1321 6023/886/1321 +f 6023/886/1321 6020/887/1320 6019/888/1320 +f 6027/883/1322 6028/882/1322 6029/881/1322 +f 6029/881/1322 6030/884/1322 6027/883/1322 +f 6030/887/1323 6029/886/1323 6031/885/1323 +f 6031/885/1323 6032/888/1323 6030/887/1323 +f 6032/884/1324 6031/881/1325 6033/882/1325 +f 6033/882/1325 6034/883/1324 6032/884/1324 +f 6034/888/1326 6033/885/1326 6028/886/1326 +f 6028/886/1326 6027/887/1326 6034/888/1326 +f 6035/844/1327 6036/845/1327 6037/846/1327 +f 6038/847/1328 6039/848/1328 6040/849/1329 +f 6040/849/1329 6041/850/1330 6038/847/1328 +f 6041/851/1330 6040/852/1329 6042/853/1331 +f 6042/853/1331 6043/854/1331 6041/851/1330 +f 6043/854/1331 6042/853/1331 6044/855/1332 +f 6044/855/1332 6045/856/1333 6043/854/1331 +f 6045/856/1333 6044/855/1332 6036/857/1334 +f 6036/857/1334 6046/858/1335 6045/856/1333 +f 6046/858/1335 6036/857/1334 6035/859/1336 +f 6035/859/1336 6047/860/1336 6046/858/1335 +f 6047/860/1336 6035/859/1336 6048/861/1337 +f 6048/861/1337 6049/862/1337 6047/860/1336 +f 6049/862/1337 6048/861/1337 6050/863/1338 +f 6050/863/1338 6051/864/1338 6049/862/1337 +f 6051/864/1338 6050/863/1338 6052/865/1339 +f 6052/865/1339 6053/866/1339 6051/864/1338 +f 6053/866/1339 6052/865/1339 6054/867/1340 +f 6054/867/1340 6055/868/1340 6053/866/1339 +f 6055/868/1340 6054/867/1340 6039/848/1328 +f 6039/848/1328 6038/847/1328 6055/868/1340 +f 6055/869/1341 6038/870/1341 6056/846/1342 +f 6041/871/1342 6043/872/1342 6056/846/1342 +f 6047/844/1341 6049/873/1341 6056/846/1342 +f 6056/846/1342 6053/874/1342 6055/869/1341 +f 6045/875/1342 6046/845/1342 6056/846/1342 +f 6056/846/1342 6051/876/1341 6053/874/1342 +f 6043/872/1342 6045/875/1342 6056/846/1342 +f 6056/846/1342 6049/873/1341 6051/876/1341 +f 6038/870/1341 6041/871/1342 6056/846/1342 +f 6056/846/1342 6046/845/1342 6047/844/1341 +f 6037/846/1327 6054/869/1343 6052/874/1343 +f 6040/871/1327 6039/870/1327 6037/846/1327 +f 6037/846/1327 6039/870/1327 6054/869/1343 +f 6052/874/1343 6050/876/1343 6037/846/1327 +f 6037/846/1327 6036/845/1327 6044/875/1327 +f 6050/876/1343 6048/873/1343 6037/846/1327 +f 6037/846/1327 6044/875/1327 6042/872/1327 +f 6048/873/1343 6035/844/1327 6037/846/1327 +f 6037/846/1327 6042/872/1327 6040/871/1327 +f 6057/877/1344 6058/878/1344 6059/879/1344 +f 6059/879/1344 6060/880/1344 6057/877/1344 +f 6061/881/1345 6062/882/1345 6058/883/1346 +f 6058/883/1346 6057/884/1346 6061/881/1345 +f 6063/885/1347 6061/886/1347 6057/887/1348 +f 6057/887/1348 6060/888/1348 6063/885/1347 +f 6064/882/1349 6063/881/1349 6060/884/1350 +f 6060/884/1350 6059/883/1350 6064/882/1349 +f 6062/886/1351 6064/885/1351 6059/888/1352 +f 6059/888/1352 6058/887/1352 6062/886/1351 +f 6065/879/1353 6066/878/1353 6067/877/1353 +f 6067/877/1353 6068/880/1353 6065/879/1353 +f 6066/883/1354 6069/882/1354 6070/881/1354 +f 6070/881/1354 6067/884/1354 6066/883/1354 +f 6067/887/1355 6070/886/1355 6071/885/1355 +f 6071/885/1355 6068/888/1355 6067/887/1355 +f 6068/884/1356 6071/881/1357 6072/882/1357 +f 6072/882/1357 6065/883/1356 6068/884/1356 +f 6065/888/1358 6072/885/1358 6069/886/1358 +f 6069/886/1358 6066/887/1358 6065/888/1358 +f 6073/883/1359 6074/882/1360 6075/881/1360 +f 6075/881/1360 6076/884/1359 6073/883/1359 +f 6076/887/1361 6075/886/1362 6077/885/1362 +f 6077/885/1362 6078/888/1361 6076/887/1361 +f 6078/884/1363 6077/881/1364 6079/882/1364 +f 6079/882/1364 6080/883/1363 6078/884/1363 +f 6080/888/1365 6079/885/1365 6074/886/1365 +f 6074/886/1365 6073/887/1365 6080/888/1365 +f 6081/844/1366 6082/845/1367 6083/846/1367 +f 6084/847/1368 6085/848/1368 6086/849/1369 +f 6086/849/1369 6087/850/1369 6084/847/1368 +f 6087/851/1369 6086/852/1369 6088/853/1370 +f 6088/853/1370 6089/854/1370 6087/851/1369 +f 6089/854/1370 6088/853/1370 6090/855/1371 +f 6090/855/1371 6091/856/1372 6089/854/1370 +f 6091/856/1372 6090/855/1371 6082/857/1373 +f 6082/857/1373 6092/858/1374 6091/856/1372 +f 6092/858/1374 6082/857/1373 6081/859/1375 +f 6081/859/1375 6093/860/1375 6092/858/1374 +f 6093/860/1375 6081/859/1375 6094/861/1376 +f 6094/861/1376 6095/862/1376 6093/860/1375 +f 6095/862/1376 6094/861/1376 6096/863/1377 +f 6096/863/1377 6097/864/1377 6095/862/1376 +f 6097/864/1377 6096/863/1377 6098/865/1378 +f 6098/865/1378 6099/866/1379 6097/864/1377 +f 6099/866/1379 6098/865/1378 6100/867/1380 +f 6100/867/1380 6101/868/1380 6099/866/1379 +f 6101/868/1380 6100/867/1380 6085/848/1368 +f 6085/848/1368 6084/847/1368 6101/868/1380 +f 6101/869/1381 6084/870/1381 6102/846/1382 +f 6087/871/1381 6089/872/1382 6102/846/1382 +f 6093/844/1382 6095/873/1382 6102/846/1382 +f 6102/846/1382 6099/874/1381 6101/869/1381 +f 6091/875/1382 6092/845/1382 6102/846/1382 +f 6102/846/1382 6097/876/1381 6099/874/1381 +f 6089/872/1382 6091/875/1382 6102/846/1382 +f 6102/846/1382 6095/873/1382 6097/876/1381 +f 6084/870/1381 6087/871/1381 6102/846/1382 +f 6102/846/1382 6092/845/1382 6093/844/1382 +f 6083/846/1367 6100/869/1366 6098/874/1366 +f 6086/871/1367 6085/870/1367 6083/846/1367 +f 6083/846/1367 6085/870/1367 6100/869/1366 +f 6098/874/1366 6096/876/1366 6083/846/1367 +f 6083/846/1367 6082/845/1367 6090/875/1367 +f 6096/876/1366 6094/873/1366 6083/846/1367 +f 6083/846/1367 6090/875/1367 6088/872/1367 +f 6094/873/1366 6081/844/1366 6083/846/1367 +f 6083/846/1367 6088/872/1367 6086/871/1367 +f 6103/877/1383 6104/878/1383 6105/879/1383 +f 6105/879/1383 6106/880/1383 6103/877/1383 +f 6107/881/1384 6108/882/1384 6104/883/1385 +f 6104/883/1385 6103/884/1385 6107/881/1384 +f 6109/885/1386 6107/886/1386 6103/887/1386 +f 6103/887/1386 6106/888/1386 6109/885/1386 +f 6110/882/1387 6109/881/1387 6106/884/1387 +f 6106/884/1387 6105/883/1387 6110/882/1387 +f 6108/886/1388 6110/885/1388 6105/888/1388 +f 6105/888/1388 6104/887/1388 6108/886/1388 +f 6111/879/1389 6112/878/1389 6113/877/1389 +f 6113/877/1389 6114/880/1389 6111/879/1389 +f 6112/883/1390 6115/882/1390 6116/881/1390 +f 6116/881/1390 6113/884/1390 6112/883/1390 +f 6113/887/1391 6116/886/1391 6117/885/1391 +f 6117/885/1391 6114/888/1391 6113/887/1391 +f 6114/884/1392 6117/881/1392 6118/882/1392 +f 6118/882/1392 6111/883/1392 6114/884/1392 +f 6111/888/1393 6118/885/1393 6115/886/1393 +f 6115/886/1393 6112/887/1393 6111/888/1393 +f 6119/883/1394 6120/882/1394 6121/881/1394 +f 6121/881/1394 6122/884/1394 6119/883/1394 +f 6122/887/1395 6121/886/1395 6123/885/1395 +f 6123/885/1395 6124/888/1395 6122/887/1395 +f 6124/884/1396 6123/881/1397 6125/882/1397 +f 6125/882/1397 6126/883/1396 6124/884/1396 +f 6126/888/1398 6125/885/1398 6120/886/1398 +f 6120/886/1398 6119/887/1398 6126/888/1398 +f 6127/844/1366 6128/845/1367 6129/846/1367 +f 6130/847/1368 6131/848/1368 6132/849/1369 +f 6132/849/1369 6133/850/1369 6130/847/1368 +f 6133/851/1369 6132/852/1369 6134/853/1370 +f 6134/853/1370 6135/854/1370 6133/851/1369 +f 6135/854/1370 6134/853/1370 6136/855/1371 +f 6136/855/1371 6137/856/1371 6135/854/1370 +f 6137/856/1371 6136/855/1371 6128/857/1373 +f 6128/857/1373 6138/858/1374 6137/856/1371 +f 6138/858/1374 6128/857/1373 6127/859/1399 +f 6127/859/1399 6139/860/1399 6138/858/1374 +f 6139/860/1399 6127/859/1399 6140/861/1376 +f 6140/861/1376 6141/862/1376 6139/860/1399 +f 6141/862/1376 6140/861/1376 6142/863/1377 +f 6142/863/1377 6143/864/1377 6141/862/1376 +f 6143/864/1377 6142/863/1377 6144/865/1400 +f 6144/865/1400 6145/866/1401 6143/864/1377 +f 6145/866/1401 6144/865/1400 6146/867/1380 +f 6146/867/1380 6147/868/1380 6145/866/1401 +f 6147/868/1380 6146/867/1380 6131/848/1368 +f 6131/848/1368 6130/847/1368 6147/868/1380 +f 6147/869/1381 6130/870/1381 6148/846/1382 +f 6133/871/1381 6135/872/1382 6148/846/1382 +f 6139/844/1382 6141/873/1382 6148/846/1382 +f 6148/846/1382 6145/874/1381 6147/869/1381 +f 6137/875/1382 6138/845/1382 6148/846/1382 +f 6148/846/1382 6143/876/1381 6145/874/1381 +f 6135/872/1382 6137/875/1382 6148/846/1382 +f 6148/846/1382 6141/873/1382 6143/876/1381 +f 6130/870/1381 6133/871/1381 6148/846/1382 +f 6148/846/1382 6138/845/1382 6139/844/1382 +f 6129/846/1367 6146/869/1366 6144/874/1366 +f 6132/871/1367 6131/870/1367 6129/846/1367 +f 6129/846/1367 6131/870/1367 6146/869/1366 +f 6144/874/1366 6142/876/1366 6129/846/1367 +f 6129/846/1367 6128/845/1367 6136/875/1367 +f 6142/876/1366 6140/873/1366 6129/846/1367 +f 6129/846/1367 6136/875/1367 6134/872/1367 +f 6140/873/1366 6127/844/1366 6129/846/1367 +f 6129/846/1367 6134/872/1367 6132/871/1367 +f 6149/877/1383 6150/878/1383 6151/879/1383 +f 6151/879/1383 6152/880/1383 6149/877/1383 +f 6153/881/1384 6154/882/1384 6150/883/1385 +f 6150/883/1385 6149/884/1385 6153/881/1384 +f 6155/885/1386 6153/886/1386 6149/887/1386 +f 6149/887/1386 6152/888/1386 6155/885/1386 +f 6156/882/1387 6155/881/1387 6152/884/1387 +f 6152/884/1387 6151/883/1387 6156/882/1387 +f 6154/886/1388 6156/885/1388 6151/888/1388 +f 6151/888/1388 6150/887/1388 6154/886/1388 +f 6157/879/1389 6158/878/1389 6159/877/1389 +f 6159/877/1389 6160/880/1389 6157/879/1389 +f 6158/883/1390 6161/882/1390 6162/881/1390 +f 6162/881/1390 6159/884/1390 6158/883/1390 +f 6159/887/1391 6162/886/1391 6163/885/1391 +f 6163/885/1391 6160/888/1391 6159/887/1391 +f 6160/884/1392 6163/881/1392 6164/882/1392 +f 6164/882/1392 6157/883/1392 6160/884/1392 +f 6157/888/1393 6164/885/1393 6161/886/1393 +f 6161/886/1393 6158/887/1393 6157/888/1393 +f 6165/883/1394 6166/882/1394 6167/881/1394 +f 6167/881/1394 6168/884/1394 6165/883/1394 +f 6168/887/1395 6167/886/1395 6169/885/1395 +f 6169/885/1395 6170/888/1395 6168/887/1395 +f 6170/884/1396 6169/881/1397 6171/882/1397 +f 6171/882/1397 6172/883/1396 6170/884/1396 +f 6172/888/1398 6171/885/1398 6166/886/1398 +f 6166/886/1398 6165/887/1398 6172/888/1398 +f 6173/844/1366 6174/845/1367 6175/846/1367 +f 6176/847/1402 6177/848/1402 6178/849/1369 +f 6178/849/1369 6179/850/1403 6176/847/1402 +f 6179/851/1403 6178/852/1369 6180/853/1370 +f 6180/853/1370 6181/854/1370 6179/851/1403 +f 6181/854/1370 6180/853/1370 6182/855/1371 +f 6182/855/1371 6183/856/1371 6181/854/1370 +f 6183/856/1371 6182/855/1371 6174/857/1373 +f 6174/857/1373 6184/858/1374 6183/856/1371 +f 6184/858/1374 6174/857/1373 6173/859/1399 +f 6173/859/1399 6185/860/1399 6184/858/1374 +f 6185/860/1399 6173/859/1399 6186/861/1376 +f 6186/861/1376 6187/862/1376 6185/860/1399 +f 6187/862/1376 6186/861/1376 6188/863/1377 +f 6188/863/1377 6189/864/1377 6187/862/1376 +f 6189/864/1377 6188/863/1377 6190/865/1401 +f 6190/865/1401 6191/866/1400 6189/864/1377 +f 6191/866/1400 6190/865/1401 6192/867/1380 +f 6192/867/1380 6193/868/1380 6191/866/1400 +f 6193/868/1380 6192/867/1380 6177/848/1402 +f 6177/848/1402 6176/847/1402 6193/868/1380 +f 6193/869/1381 6176/870/1381 6194/846/1382 +f 6179/871/1381 6181/872/1382 6194/846/1382 +f 6185/844/1381 6187/873/1382 6194/846/1382 +f 6194/846/1382 6191/874/1381 6193/869/1381 +f 6183/875/1382 6184/845/1382 6194/846/1382 +f 6194/846/1382 6189/876/1382 6191/874/1381 +f 6181/872/1382 6183/875/1382 6194/846/1382 +f 6194/846/1382 6187/873/1382 6189/876/1382 +f 6176/870/1381 6179/871/1381 6194/846/1382 +f 6194/846/1382 6184/845/1382 6185/844/1381 +f 6175/846/1367 6192/869/1366 6190/874/1366 +f 6178/871/1367 6177/870/1367 6175/846/1367 +f 6175/846/1367 6177/870/1367 6192/869/1366 +f 6190/874/1366 6188/876/1366 6175/846/1367 +f 6175/846/1367 6174/845/1367 6182/875/1367 +f 6188/876/1366 6186/873/1366 6175/846/1367 +f 6175/846/1367 6182/875/1367 6180/872/1367 +f 6186/873/1366 6173/844/1366 6175/846/1367 +f 6175/846/1367 6180/872/1367 6178/871/1367 +f 6195/877/1383 6196/878/1383 6197/879/1383 +f 6197/879/1383 6198/880/1383 6195/877/1383 +f 6199/881/1384 6200/882/1384 6196/883/1385 +f 6196/883/1385 6195/884/1385 6199/881/1384 +f 6201/885/1404 6199/886/1404 6195/887/1386 +f 6195/887/1386 6198/888/1386 6201/885/1404 +f 6202/882/1387 6201/881/1387 6198/884/1387 +f 6198/884/1387 6197/883/1387 6202/882/1387 +f 6200/886/1388 6202/885/1388 6197/888/1388 +f 6197/888/1388 6196/887/1388 6200/886/1388 +f 6203/879/1389 6204/878/1389 6205/877/1389 +f 6205/877/1389 6206/880/1389 6203/879/1389 +f 6204/883/1390 6207/882/1390 6208/881/1390 +f 6208/881/1390 6205/884/1390 6204/883/1390 +f 6205/887/1391 6208/886/1391 6209/885/1391 +f 6209/885/1391 6206/888/1391 6205/887/1391 +f 6206/884/1392 6209/881/1392 6210/882/1392 +f 6210/882/1392 6203/883/1392 6206/884/1392 +f 6203/888/1393 6210/885/1393 6207/886/1393 +f 6207/886/1393 6204/887/1393 6203/888/1393 +f 6211/883/1394 6212/882/1394 6213/881/1394 +f 6213/881/1394 6214/884/1394 6211/883/1394 +f 6214/887/1395 6213/886/1395 6215/885/1395 +f 6215/885/1395 6216/888/1395 6214/887/1395 +f 6216/884/1396 6215/881/1397 6217/882/1397 +f 6217/882/1397 6218/883/1396 6216/884/1396 +f 6218/888/1398 6217/885/1398 6212/886/1398 +f 6212/886/1398 6211/887/1398 6218/888/1398 +f 6219/889/1405 6220/890/1406 6221/891/1407 +f 6221/891/1407 6222/892/1408 6219/889/1405 +f 6223/893/1409 6219/889/1405 6222/892/1408 +f 6222/892/1408 6224/894/1410 6223/893/1409 +f 6225/895/1411 6223/893/1409 6224/894/1410 +f 6224/894/1410 6226/896/1412 6225/895/1411 +f 6227/897/1413 6225/895/1411 6226/896/1412 +f 6226/896/1412 6228/898/1414 6227/897/1413 +f 6229/899/1415 6227/900/1413 6228/901/1414 +f 6228/901/1414 6230/902/1416 6229/899/1415 +f 6231/903/1417 6229/899/1415 6230/902/1416 +f 6230/902/1416 6232/904/1418 6231/903/1417 +f 6233/905/1419 6231/903/1417 6232/904/1418 +f 6232/904/1418 6234/906/1420 6233/905/1419 +f 6220/907/1406 6233/905/1419 6234/906/1420 +f 6234/906/1420 6221/908/1407 6220/907/1406 +f 6235/909/1421 6236/910/1422 6237/911/1423 +f 6237/911/1423 6238/912/1424 6235/909/1421 +f 6238/912/1424 6237/911/1423 6239/913/1425 +f 6239/913/1425 6240/914/1426 6238/912/1424 +f 6240/914/1426 6239/913/1425 6241/915/1427 +f 6241/915/1427 6242/916/1428 6240/914/1426 +f 6242/916/1428 6241/915/1427 6243/917/1429 +f 6243/917/1429 6244/918/1430 6242/916/1428 +f 6244/919/1430 6243/920/1429 6245/921/1431 +f 6245/921/1431 6246/922/1432 6244/919/1430 +f 6246/922/1432 6245/921/1431 6247/923/1433 +f 6247/923/1433 6248/924/1434 6246/922/1432 +f 6248/924/1434 6247/923/1433 6249/925/1435 +f 6249/925/1435 6250/926/1436 6248/924/1434 +f 6250/926/1436 6249/925/1435 6236/927/1422 +f 6236/927/1422 6235/928/1421 6250/926/1436 +f 6236/910/1422 6251/929/1437 6252/930/1438 +f 6252/930/1438 6237/911/1423 6236/910/1422 +f 6237/911/1423 6252/930/1438 6253/931/1439 +f 6253/931/1439 6239/913/1425 6237/911/1423 +f 6239/913/1425 6253/931/1439 6254/932/1440 +f 6254/932/1440 6241/915/1427 6239/913/1425 +f 6241/915/1427 6254/932/1440 6255/933/1441 +f 6255/933/1441 6243/917/1429 6241/915/1427 +f 6243/920/1429 6255/934/1441 6256/935/1442 +f 6256/935/1442 6245/921/1431 6243/920/1429 +f 6245/921/1431 6256/935/1442 6257/936/1443 +f 6257/936/1443 6247/923/1433 6245/921/1431 +f 6247/923/1433 6257/936/1443 6258/937/1444 +f 6258/937/1444 6249/925/1435 6247/923/1433 +f 6249/925/1435 6258/937/1444 6251/938/1437 +f 6251/938/1437 6236/927/1422 6249/925/1435 +f 6251/929/1437 6259/939/1445 6260/940/1446 +f 6260/940/1446 6252/930/1438 6251/929/1437 +f 6252/930/1438 6260/940/1446 6261/941/1447 +f 6261/941/1447 6253/931/1439 6252/930/1438 +f 6253/931/1439 6261/941/1447 6262/942/1448 +f 6262/942/1448 6254/932/1440 6253/931/1439 +f 6254/932/1440 6262/942/1448 6263/943/1449 +f 6263/943/1449 6255/933/1441 6254/932/1440 +f 6255/934/1441 6263/944/1449 6264/945/1450 +f 6264/945/1450 6256/935/1442 6255/934/1441 +f 6256/935/1442 6264/945/1450 6265/946/1451 +f 6265/946/1451 6257/936/1443 6256/935/1442 +f 6257/936/1443 6265/946/1451 6266/947/1452 +f 6266/947/1452 6258/937/1444 6257/936/1443 +f 6258/937/1444 6266/947/1452 6259/948/1445 +f 6259/948/1445 6251/938/1437 6258/937/1444 +f 6222/892/1408 6221/891/1407 6235/909/1421 +f 6235/909/1421 6238/912/1424 6222/892/1408 +f 6240/914/1426 6224/894/1410 6222/892/1408 +f 6222/892/1408 6238/912/1424 6240/914/1426 +f 6226/896/1412 6224/894/1410 6240/914/1426 +f 6240/914/1426 6242/916/1428 6226/896/1412 +f 6244/918/1430 6228/898/1414 6226/896/1412 +f 6226/896/1412 6242/916/1428 6244/918/1430 +f 6230/902/1416 6228/901/1414 6244/919/1430 +f 6244/919/1430 6246/922/1432 6230/902/1416 +f 6248/924/1434 6232/904/1418 6230/902/1416 +f 6230/902/1416 6246/922/1432 6248/924/1434 +f 6250/926/1436 6234/906/1420 6232/904/1418 +f 6232/904/1418 6248/924/1434 6250/926/1436 +f 6235/928/1421 6221/908/1407 6234/906/1420 +f 6234/906/1420 6250/926/1436 6235/928/1421 +f 6259/939/1453 6267/949/1453 6268/950/1453 +f 6268/950/1453 6260/940/1453 6259/939/1453 +f 6260/940/1454 6268/950/1454 6269/951/1454 +f 6269/951/1454 6261/941/1454 6260/940/1454 +f 6261/941/1455 6269/951/1455 6270/952/1455 +f 6270/952/1455 6262/942/1455 6261/941/1455 +f 6262/942/1456 6270/952/1456 6271/953/1456 +f 6271/953/1456 6263/943/1456 6262/942/1456 +f 6263/944/1457 6271/954/1457 6272/955/1457 +f 6272/955/1457 6264/945/1457 6263/944/1457 +f 6264/945/1458 6272/955/1458 6273/956/1458 +f 6273/956/1458 6265/946/1458 6264/945/1458 +f 6265/946/1459 6273/956/1459 6274/957/1459 +f 6274/957/1459 6266/947/1459 6265/946/1459 +f 6266/947/1460 6274/957/1460 6267/958/1460 +f 6267/958/1460 6259/948/1460 6266/947/1460 +f 6267/949/1461 6275/959/1461 6276/960/1461 +f 6276/960/1461 6268/950/1461 6267/949/1461 +f 6268/950/1462 6276/960/1462 6277/961/1462 +f 6277/961/1462 6269/951/1462 6268/950/1462 +f 6269/951/1463 6277/961/1463 6278/962/1463 +f 6278/962/1463 6270/952/1463 6269/951/1463 +f 6270/952/1464 6278/962/1464 6279/963/1464 +f 6279/963/1464 6271/953/1464 6270/952/1464 +f 6271/954/1465 6279/964/1465 6280/965/1465 +f 6280/965/1465 6272/955/1465 6271/954/1465 +f 6272/955/1466 6280/965/1466 6281/966/1466 +f 6281/966/1466 6273/956/1466 6272/955/1466 +f 6273/956/1467 6281/966/1467 6282/967/1467 +f 6282/967/1467 6274/957/1467 6273/956/1467 +f 6274/957/1468 6282/967/1468 6275/968/1468 +f 6275/968/1469 6267/958/1469 6274/957/1469 +f 6275/959/1453 6283/969/1453 6284/970/1453 +f 6284/970/1453 6276/960/1453 6275/959/1453 +f 6276/960/1470 6284/970/1470 6285/971/1470 +f 6285/971/1470 6277/961/1470 6276/960/1470 +f 6277/961/1471 6285/971/1471 6286/972/1471 +f 6286/972/1471 6278/962/1471 6277/961/1471 +f 6278/962/1472 6286/972/1472 6287/973/1472 +f 6287/973/1472 6279/963/1472 6278/962/1472 +f 6279/964/1473 6287/974/1473 6288/975/1473 +f 6288/975/1474 6280/965/1474 6279/964/1474 +f 6280/965/1475 6288/975/1475 6289/976/1475 +f 6289/976/1458 6281/966/1458 6280/965/1458 +f 6281/966/1476 6289/976/1476 6290/977/1476 +f 6290/977/1476 6282/967/1476 6281/966/1476 +f 6282/967/1460 6290/977/1460 6283/978/1460 +f 6283/978/1460 6275/968/1460 6282/967/1460 +f 6283/969/1477 6291/979/1477 6292/980/1477 +f 6292/980/1478 6284/970/1478 6283/969/1478 +f 6284/970/1479 6292/980/1479 6293/981/1479 +f 6293/981/1480 6285/971/1480 6284/970/1480 +f 6285/971/1481 6293/981/1481 6294/982/1481 +f 6294/982/1482 6286/972/1482 6285/971/1482 +f 6286/972/1483 6294/982/1483 6295/983/1483 +f 6295/983/1484 6287/973/1484 6286/972/1484 +f 6287/974/1485 6295/984/1485 6296/985/1485 +f 6296/985/1485 6288/975/1485 6287/974/1485 +f 6288/975/1486 6296/985/1486 6297/986/1486 +f 6297/986/1486 6289/976/1486 6288/975/1486 +f 6289/976/1487 6297/986/1487 6298/987/1487 +f 6298/987/1487 6290/977/1487 6289/976/1487 +f 6290/977/1488 6298/987/1488 6291/988/1488 +f 6291/988/1488 6283/978/1488 6290/977/1488 +f 6291/979/1489 6299/989/1489 6292/980/1489 +f 6292/980/1490 6299/989/1490 6293/981/1490 +f 6293/981/1491 6299/989/1491 6294/982/1491 +f 6294/982/1492 6299/989/1492 6295/983/1492 +f 6295/984/1493 6299/990/1493 6296/985/1493 +f 6296/985/1494 6299/990/1494 6297/986/1494 +f 6297/986/1495 6299/990/1495 6298/987/1495 +f 6298/987/1496 6299/990/1496 6291/988/1496 +f 6300/991/1497 6301/992/1498 6302/993/1499 +f 6302/993/1499 6303/994/1500 6300/991/1497 +f 6301/992/1498 6304/995/1501 6305/996/1502 +f 6305/996/1502 6302/993/1499 6301/992/1498 +f 6304/995/1501 6306/997/1503 6307/998/1504 +f 6307/998/1504 6305/996/1502 6304/995/1501 +f 6303/994/1500 6302/993/1499 6308/999/1505 +f 6308/999/1505 6309/1000/1506 6303/994/1500 +f 6302/993/1499 6305/996/1502 6310/1001/1507 +f 6310/1001/1507 6308/999/1505 6302/993/1499 +f 6305/996/1502 6307/998/1504 6311/1002/1508 +f 6311/1002/1508 6310/1001/1507 6305/996/1502 +f 6309/1003/1509 6308/999/1510 6310/1001/1511 +f 6310/1001/1511 6311/1004/1511 6309/1003/1509 +f 6311/1004/1511 6312/1005/1509 6309/1003/1509 +f 6313/991/1512 6314/994/1513 6315/993/1514 +f 6315/993/1514 6316/992/1515 6313/991/1512 +f 6316/992/1515 6315/993/1514 6317/996/1516 +f 6317/996/1516 6318/995/1517 6316/992/1515 +f 6318/995/1517 6317/996/1516 6319/998/1518 +f 6319/998/1518 6320/997/1519 6318/995/1517 +f 6314/994/1513 6321/1000/1520 6322/999/1521 +f 6322/999/1521 6315/993/1514 6314/994/1513 +f 6315/993/1514 6322/999/1521 6323/1001/1522 +f 6323/1001/1522 6317/996/1516 6315/993/1514 +f 6317/996/1516 6323/1001/1522 6324/1002/1523 +f 6324/1002/1523 6319/998/1518 6317/996/1516 +f 6321/1003/1524 6324/1004/1525 6323/1001/1525 +f 6323/1001/1525 6322/999/1526 6321/1003/1524 +f 6324/1004/1525 6321/1003/1524 6325/1005/1527 +f 6326/1006/1528 6327/1007/1528 6328/1008/1528 +f 6328/1008/1528 6329/1009/1528 6326/1006/1528 +f 6329/1010/1527 6328/1011/1527 6330/1012/1527 +f 6330/1012/1527 6331/1013/1527 6329/1010/1527 +f 6331/1009/1529 6330/1008/1529 6332/1007/1529 +f 6332/1007/1529 6333/1006/1529 6331/1009/1529 +f 6333/1013/1511 6332/1012/1511 6327/1011/1511 +f 6327/1011/1511 6326/1010/1511 6333/1013/1511 +f 6334/689/1530 6335/690/1531 6336/691/1532 +f 6336/691/1532 6337/692/1533 6334/689/1530 +f 6338/693/1534 6335/690/1535 6334/689/1536 +f 6334/689/1536 6339/694/1536 6338/693/1534 +f 6340/695/1537 6341/696/1538 6342/697/1539 +f 6342/697/1539 6343/698/1539 6340/695/1537 +f 6344/699/1540 6345/700/1540 6346/701/1541 +f 6346/701/1541 6347/702/1541 6344/699/1540 +f 6348/703/1542 6337/692/1543 6349/704/1544 +f 6349/704/1544 6350/705/1544 6348/703/1542 +f 6342/697/1545 6341/696/1546 6336/691/1532 +f 6336/691/1532 6335/690/1531 6342/697/1545 +f 6343/698/1547 6342/697/1547 6335/690/1535 +f 6335/690/1535 6338/706/1534 6343/698/1547 +f 6350/707/1548 6349/704/1548 6345/700/1540 +f 6345/700/1540 6344/699/1540 6350/707/1548 +f 6345/700/1549 6349/704/1550 6337/692/1533 +f 6337/692/1533 6336/691/1532 6345/700/1549 +f 6347/708/1551 6346/701/1551 6341/696/1538 +f 6341/696/1538 6340/695/1537 6347/708/1551 +f 6339/694/1552 6334/689/1553 6337/692/1543 +f 6337/692/1543 6348/703/1542 6339/694/1552 +f 6341/696/1546 6346/701/1554 6345/700/1549 +f 6345/700/1549 6336/691/1532 6341/696/1546 +f 6351/1014/1555 6352/1015/1555 6353/1016/1555 +f 6353/1016/1555 6354/1017/1555 6351/1014/1555 +f 6355/1018/1556 6356/1019/1556 6357/1020/1556 +f 6357/1020/1556 6358/1021/1556 6355/1018/1556 +f 6352/1022/1557 6351/1023/1558 6359/1024/1557 +f 6359/1024/1557 6360/1025/1559 6352/1022/1557 +f 6353/1026/1560 6352/1027/1560 6360/1028/1561 +f 6360/1028/1561 6361/1029/1561 6353/1026/1560 +f 6354/1023/1562 6353/1022/1562 6361/1025/1563 +f 6361/1025/1563 6362/1024/1562 6354/1023/1562 +f 6351/1027/1564 6354/1026/1564 6362/1029/1564 +f 6362/1029/1564 6359/1028/1565 6351/1027/1564 +f 6358/1030/1566 6363/1031/1567 6364/1032/1568 +f 6364/1032/1568 6355/1033/1566 6358/1030/1566 +f 6357/1034/1569 6365/1035/1570 6363/1036/1570 +f 6363/1036/1570 6358/1037/1569 6357/1034/1569 +f 6356/1033/1571 6366/1032/1572 6365/1031/1572 +f 6365/1031/1572 6357/1030/1571 6356/1033/1571 +f 6355/1037/1573 6364/1036/1574 6366/1035/1574 +f 6366/1035/1574 6356/1034/1573 6355/1037/1573 +f 6363/1031/1567 6360/1025/1559 6359/1024/1557 +f 6359/1024/1557 6364/1032/1568 6363/1031/1567 +f 6367/1035/1575 6368/1029/1575 6369/1028/1575 +f 6369/1028/1575 6370/1036/1561 6367/1035/1575 +f 6366/1032/1572 6362/1024/1562 6361/1025/1563 +f 6361/1025/1563 6365/1031/1572 6366/1032/1572 +f 6371/1036/1576 6372/1028/1576 6373/1029/1576 +f 6373/1029/1576 6374/1035/1576 6371/1036/1576 +f 6365/1038/1556 6367/1039/1556 6370/1040/1556 +f 6370/1040/1556 6363/1041/1556 6365/1038/1556 +f 6363/1031/1559 6370/1042/1559 6369/1043/1559 +f 6369/1043/1559 6360/1025/1559 6363/1031/1559 +f 6360/1041/1555 6369/1040/1555 6368/1039/1555 +f 6368/1039/1555 6361/1038/1555 6360/1041/1555 +f 6361/1025/1563 6368/1043/1563 6367/1042/1563 +f 6367/1042/1563 6365/1031/1563 6361/1025/1563 +f 6359/1024/1557 6372/1044/1557 6371/1045/1557 +f 6371/1045/1557 6364/1032/1557 6359/1024/1557 +f 6364/1040/1556 6371/1041/1556 6374/1038/1556 +f 6374/1038/1556 6366/1039/1556 6364/1040/1556 +f 6366/1032/1563 6374/1045/1563 6373/1044/1563 +f 6373/1044/1562 6362/1024/1562 6366/1032/1562 +f 6362/1039/1555 6373/1038/1555 6372/1041/1555 +f 6372/1041/1555 6359/1040/1555 6362/1039/1555 +f 6375/250/1577 6376/251/1578 6377/252/1579 +f 6377/252/1579 6378/253/1580 6375/250/1577 +f 6379/254/1581 6375/250/1577 6378/253/1580 +f 6378/253/1580 6380/255/1582 6379/254/1581 +f 6381/256/1583 6379/254/1581 6380/255/1582 +f 6380/255/1582 6382/257/1584 6381/256/1583 +f 6383/258/1585 6381/256/1583 6382/257/1584 +f 6382/257/1584 6384/259/1586 6383/258/1585 +f 6385/260/1587 6383/261/1585 6384/262/1586 +f 6384/262/1586 6386/263/1588 6385/260/1587 +f 6387/264/1589 6385/260/1587 6386/263/1588 +f 6386/263/1588 6388/265/1590 6387/264/1589 +f 6389/266/1591 6387/264/1589 6388/265/1590 +f 6388/265/1590 6390/267/1592 6389/266/1591 +f 6376/251/1578 6389/266/1591 6390/267/1592 +f 6390/267/1592 6377/252/1579 6376/251/1578 +f 6391/268/1593 6391/268/1594 6376/251/1578 +f 6376/251/1578 6375/250/1577 6391/268/1593 +f 6391/268/1595 6391/268/1593 6375/250/1577 +f 6375/250/1577 6379/254/1581 6391/268/1595 +f 6391/269/1596 6391/268/1595 6379/254/1581 +f 6379/254/1581 6381/256/1583 6391/269/1596 +f 6391/269/1597 6391/269/1596 6381/256/1583 +f 6381/256/1583 6383/258/1585 6391/269/1597 +f 6391/268/1598 6391/269/1597 6383/261/1585 +f 6383/261/1585 6385/260/1587 6391/268/1598 +f 6391/268/1599 6391/268/1598 6385/260/1587 +f 6385/260/1587 6387/264/1589 6391/268/1599 +f 6391/268/1600 6391/268/1599 6387/264/1589 +f 6387/264/1589 6389/266/1591 6391/268/1600 +f 6391/268/1594 6391/268/1600 6389/266/1591 +f 6389/266/1591 6376/251/1578 6391/268/1594 +f 6391/269/2 6391/269/2 6391/268/2 +f 6391/268/2 6391/268/2 6391/268/2 +f 6391/268/2 6391/268/2 6391/268/2 +f 6391/268/2 6391/268/2 6391/268/2 +f 6391/269/2 6391/268/2 6391/268/2 +f 6391/269/2 6391/268/2 6391/268/2 +f 6392/270/1601 6393/271/1601 6378/253/1601 +f 6378/253/1601 6377/252/1601 6392/270/1601 +f 6393/271/1602 6394/272/1602 6380/255/1602 +f 6380/255/1603 6378/253/1603 6393/271/1603 +f 6394/272/1604 6395/273/1604 6382/257/1604 +f 6382/257/1604 6380/255/1604 6394/272/1604 +f 6395/273/1605 6396/274/1605 6384/259/1605 +f 6384/259/1605 6382/257/1605 6395/273/1605 +f 6396/275/1606 6397/276/1606 6386/263/1606 +f 6386/263/1606 6384/262/1606 6396/275/1606 +f 6397/276/1607 6398/277/1607 6388/265/1607 +f 6388/265/1607 6386/263/1607 6397/276/1607 +f 6398/277/1608 6399/278/1608 6390/267/1608 +f 6390/267/1609 6388/265/1609 6398/277/1609 +f 6399/278/1610 6392/270/1610 6377/252/1610 +f 6377/252/1610 6390/267/1610 6399/278/1610 +f 6400/320/1611 6401/321/1612 6402/322/1613 +f 6402/322/1613 6403/323/1614 6400/320/1611 +f 6404/324/1615 6400/320/1611 6403/323/1614 +f 6403/323/1614 6405/325/1616 6404/324/1615 +f 6406/326/1617 6404/324/1615 6405/325/1616 +f 6405/325/1616 6407/327/1618 6406/326/1617 +f 6408/328/1619 6406/326/1617 6407/327/1618 +f 6407/327/1618 6409/329/1620 6408/328/1619 +f 6410/330/1621 6408/328/1619 6409/329/1620 +f 6409/329/1620 6411/331/1620 6410/330/1621 +f 6412/332/1622 6413/333/1623 6401/321/1612 +f 6401/321/1612 6400/320/1611 6412/332/1622 +f 6412/332/1622 6400/320/1611 6404/324/1615 +f 6404/324/1615 6414/334/1624 6412/332/1622 +f 6414/334/1624 6404/324/1615 6406/326/1617 +f 6406/326/1617 6415/335/1625 6414/334/1624 +f 6415/335/1625 6406/326/1617 6408/328/1619 +f 6408/328/1619 6416/336/1626 6415/335/1625 +f 6417/337/1627 6416/336/1626 6408/328/1619 +f 6408/328/1619 6410/330/1621 6417/337/1627 +f 6418/338/1628 6419/339/1629 6420/340/1630 +f 6420/340/1630 6421/341/1631 6418/338/1628 +f 6422/342/1632 6418/338/1628 6421/341/1631 +f 6421/341/1631 6423/343/1633 6422/342/1632 +f 6424/344/1634 6422/342/1632 6423/343/1633 +f 6423/343/1633 6425/345/1635 6424/344/1634 +f 6426/346/1636 6424/344/1634 6425/345/1635 +f 6425/345/1635 6427/347/1637 6426/346/1636 +f 6428/348/1638 6426/346/1636 6427/347/1637 +f 6427/347/1637 6417/349/1639 6428/348/1638 +f 6429/350/1640 6430/351/1641 6419/339/1629 +f 6419/339/1629 6418/338/1628 6429/350/1640 +f 6431/352/1642 6429/350/1640 6418/338/1628 +f 6418/338/1628 6422/342/1632 6431/352/1642 +f 6432/353/1643 6431/352/1642 6422/342/1632 +f 6422/342/1632 6424/344/1634 6432/353/1643 +f 6433/354/1644 6432/353/1643 6424/344/1634 +f 6424/344/1634 6426/346/1636 6433/354/1644 +f 6434/355/1645 6433/354/1644 6426/346/1636 +f 6426/346/1636 6428/348/1638 6434/355/1645 +f 6435/356/1646 6436/357/1647 6430/351/1641 +f 6430/351/1641 6429/350/1640 6435/356/1646 +f 6437/358/1648 6435/356/1646 6429/350/1640 +f 6429/350/1640 6431/352/1642 6437/358/1648 +f 6438/359/1649 6437/358/1648 6431/352/1642 +f 6431/352/1642 6432/353/1643 6438/359/1649 +f 6439/360/1295 6438/359/1649 6432/353/1643 +f 6432/353/1643 6433/354/1644 6439/360/1295 +f 6440/361/1650 6439/360/1295 6433/354/1644 +f 6433/354/1644 6434/355/1645 6440/361/1650 +f 6441/362/1651 6442/363/1652 6436/357/1647 +f 6436/357/1647 6435/356/1646 6441/362/1651 +f 6443/364/1653 6441/362/1651 6435/356/1646 +f 6435/356/1646 6437/358/1648 6443/364/1653 +f 6444/365/1654 6443/364/1653 6437/358/1648 +f 6437/358/1648 6438/359/1649 6444/365/1654 +f 6445/366/1655 6444/365/1654 6438/359/1649 +f 6438/359/1649 6439/360/1295 6445/366/1655 +f 6446/367/1655 6445/366/1655 6439/360/1295 +f 6439/360/1295 6440/361/1650 6446/367/1655 +f 6403/323/1614 6402/322/1613 6442/368/1652 +f 6442/368/1652 6441/369/1651 6403/323/1614 +f 6405/325/1616 6403/323/1614 6441/369/1651 +f 6441/369/1651 6443/370/1653 6405/325/1616 +f 6407/327/1618 6405/325/1616 6443/370/1653 +f 6443/370/1653 6444/371/1654 6407/327/1618 +f 6409/329/1620 6407/327/1618 6444/371/1654 +f 6444/371/1654 6445/372/1655 6409/329/1620 +f 6411/331/1620 6409/329/1620 6445/372/1655 +f 6445/372/1655 6446/373/1655 6411/331/1620 +f 6447/250/1656 6448/251/1657 6449/252/1658 +f 6449/252/1658 6450/253/1659 6447/250/1656 +f 6451/254/1660 6447/250/1656 6450/253/1659 +f 6450/253/1659 6452/255/1661 6451/254/1660 +f 6453/256/1662 6451/254/1660 6452/255/1661 +f 6452/255/1661 6454/257/1663 6453/256/1662 +f 6455/258/1664 6453/256/1662 6454/257/1663 +f 6454/257/1663 6456/259/1665 6455/258/1664 +f 6457/260/1666 6455/261/1664 6456/262/1665 +f 6456/262/1665 6458/263/1667 6457/260/1666 +f 6459/264/1668 6457/260/1666 6458/263/1667 +f 6458/263/1667 6460/265/1669 6459/264/1668 +f 6461/266/1670 6459/264/1668 6460/265/1669 +f 6460/265/1669 6462/267/1671 6461/266/1670 +f 6448/251/1657 6461/266/1670 6462/267/1671 +f 6462/267/1671 6449/252/1658 6448/251/1657 +f 6463/268/1672 6463/268/1673 6448/251/1657 +f 6448/251/1657 6447/250/1656 6463/268/1672 +f 6463/268/1674 6463/268/1672 6447/250/1656 +f 6447/250/1656 6451/254/1660 6463/268/1674 +f 6463/269/1675 6463/268/1674 6451/254/1660 +f 6451/254/1660 6453/256/1662 6463/269/1675 +f 6463/269/1676 6463/269/1675 6453/256/1662 +f 6453/256/1662 6455/258/1664 6463/269/1676 +f 6463/268/1677 6463/269/1676 6455/261/1664 +f 6455/261/1664 6457/260/1666 6463/268/1677 +f 6463/268/1678 6463/268/1677 6457/260/1666 +f 6457/260/1666 6459/264/1668 6463/268/1678 +f 6463/268/1679 6463/268/1678 6459/264/1668 +f 6459/264/1668 6461/266/1670 6463/268/1679 +f 6463/268/1673 6463/268/1679 6461/266/1670 +f 6461/266/1670 6448/251/1657 6463/268/1673 +f 6463/269/2 6463/269/2 6463/268/2 +f 6463/268/2 6463/268/2 6463/268/2 +f 6463/268/2 6463/268/2 6463/268/2 +f 6463/268/2 6463/268/2 6463/268/2 +f 6463/269/2 6463/268/2 6463/268/2 +f 6463/269/2 6463/268/2 6463/268/2 +f 6464/270/1680 6465/271/1680 6450/253/1680 +f 6450/253/1680 6449/252/1680 6464/270/1680 +f 6465/271/1681 6466/272/1681 6452/255/1681 +f 6452/255/1681 6450/253/1681 6465/271/1681 +f 6466/272/1682 6467/273/1682 6454/257/1682 +f 6454/257/1682 6452/255/1682 6466/272/1682 +f 6467/273/1683 6468/274/1683 6456/259/1683 +f 6456/259/1683 6454/257/1683 6467/273/1683 +f 6468/275/1684 6469/276/1684 6458/263/1684 +f 6458/263/1684 6456/262/1684 6468/275/1684 +f 6469/276/1685 6470/277/1685 6460/265/1685 +f 6460/265/1685 6458/263/1685 6469/276/1685 +f 6470/277/1686 6471/278/1686 6462/267/1686 +f 6462/267/1687 6460/265/1687 6470/277/1687 +f 6471/278/1688 6464/270/1688 6449/252/1688 +f 6449/252/1689 6462/267/1689 6471/278/1689 +f 6472/320/1690 6473/321/1691 6474/322/1692 +f 6474/322/1692 6475/323/1693 6472/320/1690 +f 6476/324/1694 6472/320/1690 6475/323/1693 +f 6475/323/1693 6477/325/1695 6476/324/1694 +f 6478/326/1696 6476/324/1694 6477/325/1695 +f 6477/325/1695 6479/327/1697 6478/326/1696 +f 6480/328/1698 6478/326/1696 6479/327/1697 +f 6479/327/1697 6481/329/1699 6480/328/1698 +f 6482/330/1700 6480/328/1698 6481/329/1699 +f 6481/329/1699 6483/331/1701 6482/330/1700 +f 6484/332/1702 6485/333/1703 6473/321/1691 +f 6473/321/1691 6472/320/1690 6484/332/1702 +f 6484/332/1702 6472/320/1690 6476/324/1694 +f 6476/324/1694 6486/334/1704 6484/332/1702 +f 6486/334/1704 6476/324/1694 6478/326/1696 +f 6478/326/1696 6487/335/1705 6486/334/1704 +f 6487/335/1705 6478/326/1696 6480/328/1698 +f 6480/328/1698 6488/336/1706 6487/335/1705 +f 6489/337/1707 6488/336/1706 6480/328/1698 +f 6480/328/1698 6482/330/1700 6489/337/1707 +f 6490/338/1708 6491/339/1709 6492/340/1710 +f 6492/340/1710 6493/341/1711 6490/338/1708 +f 6494/342/1712 6490/338/1708 6493/341/1711 +f 6493/341/1711 6495/343/1713 6494/342/1712 +f 6496/344/1714 6494/342/1712 6495/343/1713 +f 6495/343/1713 6497/345/1715 6496/344/1714 +f 6498/346/1716 6496/344/1714 6497/345/1715 +f 6497/345/1715 6499/347/1717 6498/346/1716 +f 6500/348/1718 6498/346/1716 6499/347/1717 +f 6499/347/1717 6489/349/1719 6500/348/1718 +f 6501/350/1720 6502/351/1721 6491/339/1709 +f 6491/339/1709 6490/338/1708 6501/350/1720 +f 6503/352/1722 6501/350/1720 6490/338/1708 +f 6490/338/1708 6494/342/1712 6503/352/1722 +f 6504/353/1723 6503/352/1722 6494/342/1712 +f 6494/342/1712 6496/344/1714 6504/353/1723 +f 6505/354/1565 6504/353/1723 6496/344/1714 +f 6496/344/1714 6498/346/1716 6505/354/1565 +f 6506/355/1724 6505/354/1565 6498/346/1716 +f 6498/346/1716 6500/348/1718 6506/355/1724 +f 6507/356/1725 6508/357/1726 6502/351/1721 +f 6502/351/1721 6501/350/1720 6507/356/1725 +f 6509/358/1727 6507/356/1725 6501/350/1720 +f 6501/350/1720 6503/352/1722 6509/358/1727 +f 6510/359/1728 6509/358/1727 6503/352/1722 +f 6503/352/1722 6504/353/1723 6510/359/1728 +f 6511/360/1729 6510/359/1728 6504/353/1723 +f 6504/353/1723 6505/354/1565 6511/360/1729 +f 6512/361/1730 6511/360/1729 6505/354/1565 +f 6505/354/1565 6506/355/1724 6512/361/1730 +f 6513/362/1731 6514/363/1732 6508/357/1726 +f 6508/357/1726 6507/356/1725 6513/362/1731 +f 6515/364/1733 6513/362/1731 6507/356/1725 +f 6507/356/1725 6509/358/1727 6515/364/1733 +f 6516/365/1734 6515/364/1733 6509/358/1727 +f 6509/358/1727 6510/359/1728 6516/365/1734 +f 6517/366/1735 6516/365/1734 6510/359/1728 +f 6510/359/1728 6511/360/1729 6517/366/1735 +f 6518/367/1736 6517/366/1735 6511/360/1729 +f 6511/360/1729 6512/361/1730 6518/367/1736 +f 6475/323/1693 6474/322/1692 6514/368/1732 +f 6514/368/1732 6513/369/1731 6475/323/1693 +f 6477/325/1695 6475/323/1693 6513/369/1731 +f 6513/369/1731 6515/370/1733 6477/325/1695 +f 6479/327/1697 6477/325/1695 6515/370/1733 +f 6515/370/1733 6516/371/1734 6479/327/1697 +f 6481/329/1699 6479/327/1697 6516/371/1734 +f 6516/371/1734 6517/372/1735 6481/329/1699 +f 6483/331/1701 6481/329/1699 6517/372/1735 +f 6517/372/1735 6518/373/1736 6483/331/1701 +f 6519/889/1737 6520/890/1738 6521/891/1739 +f 6521/891/1739 6522/892/1740 6519/889/1737 +f 6523/893/1741 6519/889/1737 6522/892/1740 +f 6522/892/1740 6524/894/1742 6523/893/1741 +f 6525/895/1743 6523/893/1741 6524/894/1742 +f 6524/894/1742 6526/896/1744 6525/895/1743 +f 6527/897/1745 6525/895/1743 6526/896/1744 +f 6526/896/1744 6528/898/1746 6527/897/1745 +f 6529/899/1747 6527/900/1745 6528/901/1746 +f 6528/901/1746 6530/902/1748 6529/899/1747 +f 6531/903/1749 6529/899/1747 6530/902/1748 +f 6530/902/1748 6532/904/1750 6531/903/1749 +f 6533/905/1751 6531/903/1749 6532/904/1750 +f 6532/904/1750 6534/906/1752 6533/905/1751 +f 6520/907/1738 6533/905/1751 6534/906/1752 +f 6534/906/1752 6521/908/1739 6520/907/1738 +f 6535/909/1753 6536/910/1754 6537/911/1755 +f 6537/911/1755 6538/912/1756 6535/909/1753 +f 6538/912/1756 6537/911/1755 6539/913/1757 +f 6539/913/1757 6540/914/1758 6538/912/1756 +f 6540/914/1758 6539/913/1757 6541/915/1759 +f 6541/915/1759 6542/916/1760 6540/914/1758 +f 6542/916/1760 6541/915/1759 6543/917/1761 +f 6543/917/1761 6544/918/1762 6542/916/1760 +f 6544/919/1762 6543/920/1761 6545/921/1763 +f 6545/921/1763 6546/922/1764 6544/919/1762 +f 6546/922/1764 6545/921/1763 6547/923/1765 +f 6547/923/1765 6548/924/1766 6546/922/1764 +f 6548/924/1766 6547/923/1765 6549/925/1767 +f 6549/925/1767 6550/926/1768 6548/924/1766 +f 6550/926/1768 6549/925/1767 6536/927/1754 +f 6536/927/1754 6535/928/1753 6550/926/1768 +f 6536/910/1754 6551/929/1769 6552/930/1770 +f 6552/930/1770 6537/911/1755 6536/910/1754 +f 6537/911/1755 6552/930/1770 6553/931/1771 +f 6553/931/1771 6539/913/1757 6537/911/1755 +f 6539/913/1757 6553/931/1771 6554/932/1772 +f 6554/932/1772 6541/915/1759 6539/913/1757 +f 6541/915/1759 6554/932/1772 6555/933/1773 +f 6555/933/1773 6543/917/1761 6541/915/1759 +f 6543/920/1761 6555/934/1773 6556/935/1774 +f 6556/935/1774 6545/921/1763 6543/920/1761 +f 6545/921/1763 6556/935/1774 6557/936/1775 +f 6557/936/1775 6547/923/1765 6545/921/1763 +f 6547/923/1765 6557/936/1775 6558/937/1776 +f 6558/937/1776 6549/925/1767 6547/923/1765 +f 6549/925/1767 6558/937/1776 6551/938/1769 +f 6551/938/1769 6536/927/1754 6549/925/1767 +f 6551/929/1769 6559/939/1777 6560/940/1778 +f 6560/940/1778 6552/930/1770 6551/929/1769 +f 6552/930/1770 6560/940/1778 6561/941/1779 +f 6561/941/1779 6553/931/1771 6552/930/1770 +f 6553/931/1771 6561/941/1779 6562/942/1780 +f 6562/942/1780 6554/932/1772 6553/931/1771 +f 6554/932/1772 6562/942/1780 6563/943/1781 +f 6563/943/1781 6555/933/1773 6554/932/1772 +f 6555/934/1773 6563/944/1781 6564/945/1782 +f 6564/945/1782 6556/935/1774 6555/934/1773 +f 6556/935/1774 6564/945/1782 6565/946/1783 +f 6565/946/1783 6557/936/1775 6556/935/1774 +f 6557/936/1775 6565/946/1783 6566/947/1784 +f 6566/947/1784 6558/937/1776 6557/936/1775 +f 6558/937/1776 6566/947/1784 6559/948/1777 +f 6559/948/1777 6551/938/1769 6558/937/1776 +f 6522/892/1740 6521/891/1739 6535/909/1753 +f 6535/909/1753 6538/912/1756 6522/892/1740 +f 6540/914/1758 6524/894/1742 6522/892/1740 +f 6522/892/1740 6538/912/1756 6540/914/1758 +f 6526/896/1744 6524/894/1742 6540/914/1758 +f 6540/914/1758 6542/916/1760 6526/896/1744 +f 6544/918/1762 6528/898/1746 6526/896/1744 +f 6526/896/1744 6542/916/1760 6544/918/1762 +f 6530/902/1748 6528/901/1746 6544/919/1762 +f 6544/919/1762 6546/922/1764 6530/902/1748 +f 6548/924/1766 6532/904/1750 6530/902/1748 +f 6530/902/1748 6546/922/1764 6548/924/1766 +f 6550/926/1768 6534/906/1752 6532/904/1750 +f 6532/904/1750 6548/924/1766 6550/926/1768 +f 6535/928/1753 6521/908/1739 6534/906/1752 +f 6534/906/1752 6550/926/1768 6535/928/1753 +f 6559/939/1785 6567/949/1785 6568/950/1785 +f 6568/950/1785 6560/940/1785 6559/939/1785 +f 6560/940/1786 6568/950/1786 6569/951/1786 +f 6569/951/1786 6561/941/1786 6560/940/1786 +f 6561/941/1787 6569/951/1787 6570/952/1787 +f 6570/952/1787 6562/942/1787 6561/941/1787 +f 6562/942/1788 6570/952/1788 6571/953/1788 +f 6571/953/1788 6563/943/1788 6562/942/1788 +f 6563/944/1789 6571/954/1789 6572/955/1789 +f 6572/955/1789 6564/945/1789 6563/944/1789 +f 6564/945/1790 6572/955/1790 6573/956/1790 +f 6573/956/1790 6565/946/1790 6564/945/1790 +f 6565/946/1791 6573/956/1791 6574/957/1791 +f 6574/957/1791 6566/947/1791 6565/946/1791 +f 6566/947/1792 6574/957/1792 6567/958/1792 +f 6567/958/1792 6559/948/1792 6566/947/1792 +f 6567/949/1793 6575/959/1793 6576/960/1793 +f 6576/960/1793 6568/950/1793 6567/949/1793 +f 6568/950/1794 6576/960/1794 6577/961/1794 +f 6577/961/1794 6569/951/1794 6568/950/1794 +f 6569/951/1795 6577/961/1795 6578/962/1795 +f 6578/962/1795 6570/952/1795 6569/951/1795 +f 6570/952/1796 6578/962/1796 6579/963/1796 +f 6579/963/1796 6571/953/1796 6570/952/1796 +f 6571/954/1797 6579/964/1797 6580/965/1797 +f 6580/965/1797 6572/955/1797 6571/954/1797 +f 6572/955/1798 6580/965/1798 6581/966/1798 +f 6581/966/1798 6573/956/1798 6572/955/1798 +f 6573/956/1799 6581/966/1799 6582/967/1799 +f 6582/967/1799 6574/957/1799 6573/956/1799 +f 6574/957/1800 6582/967/1800 6575/968/1800 +f 6575/968/1800 6567/958/1800 6574/957/1800 +f 6575/959/1785 6583/969/1785 6584/970/1785 +f 6584/970/1785 6576/960/1785 6575/959/1785 +f 6576/960/1786 6584/970/1786 6585/971/1786 +f 6585/971/1786 6577/961/1786 6576/960/1786 +f 6577/961/1787 6585/971/1787 6586/972/1787 +f 6586/972/1787 6578/962/1787 6577/961/1787 +f 6578/962/1788 6586/972/1788 6587/973/1788 +f 6587/973/1788 6579/963/1788 6578/962/1788 +f 6579/964/1789 6587/974/1789 6588/975/1789 +f 6588/975/1789 6580/965/1789 6579/964/1789 +f 6580/965/1790 6588/975/1790 6589/976/1790 +f 6589/976/1790 6581/966/1790 6580/965/1790 +f 6581/966/1791 6589/976/1791 6590/977/1791 +f 6590/977/1791 6582/967/1791 6581/966/1791 +f 6582/967/1792 6590/977/1792 6583/978/1792 +f 6583/978/1792 6575/968/1792 6582/967/1792 +f 6583/969/1801 6591/979/1801 6592/980/1801 +f 6592/980/1802 6584/970/1802 6583/969/1802 +f 6584/970/1803 6592/980/1803 6593/981/1803 +f 6593/981/1803 6585/971/1803 6584/970/1803 +f 6585/971/1804 6593/981/1804 6594/982/1804 +f 6594/982/1804 6586/972/1804 6585/971/1804 +f 6586/972/1805 6594/982/1805 6595/983/1805 +f 6595/983/1806 6587/973/1806 6586/972/1806 +f 6587/974/1807 6595/984/1807 6596/985/1807 +f 6596/985/1807 6588/975/1807 6587/974/1807 +f 6588/975/1808 6596/985/1808 6597/986/1808 +f 6597/986/1808 6589/976/1808 6588/975/1808 +f 6589/976/1809 6597/986/1809 6598/987/1809 +f 6598/987/1809 6590/977/1809 6589/976/1809 +f 6590/977/1810 6598/987/1810 6591/988/1810 +f 6591/988/1810 6583/978/1810 6590/977/1810 +f 6591/979/1811 6599/989/1811 6592/980/1811 +f 6592/980/1812 6599/989/1812 6593/981/1812 +f 6593/981/1813 6599/989/1813 6594/982/1813 +f 6594/982/1814 6599/989/1814 6595/983/1814 +f 6595/984/1815 6599/990/1815 6596/985/1815 +f 6596/985/1816 6599/990/1816 6597/986/1816 +f 6597/986/1817 6599/990/1817 6598/987/1817 +f 6598/987/1818 6599/990/1818 6591/988/1818 +f 6600/991/1819 6601/992/1820 6602/993/1821 +f 6602/993/1821 6603/994/1822 6600/991/1819 +f 6601/992/1820 6604/995/1823 6605/996/1824 +f 6605/996/1824 6602/993/1821 6601/992/1820 +f 6604/995/1823 6606/997/1825 6607/998/1826 +f 6607/998/1826 6605/996/1824 6604/995/1823 +f 6603/994/1822 6602/993/1821 6608/999/1827 +f 6608/999/1827 6609/1000/1828 6603/994/1822 +f 6602/993/1821 6605/996/1824 6610/1001/1829 +f 6610/1001/1829 6608/999/1827 6602/993/1821 +f 6605/996/1824 6607/998/1826 6611/1002/1830 +f 6611/1002/1830 6610/1001/1829 6605/996/1824 +f 6609/1003/1831 6608/999/1832 6610/1001/1831 +f 6610/1001/1831 6611/1004/1831 6609/1003/1831 +f 6611/1004/1831 6612/1005/1833 6609/1003/1831 +f 6613/991/1834 6614/994/1835 6615/993/1836 +f 6615/993/1836 6616/992/1837 6613/991/1834 +f 6616/992/1837 6615/993/1836 6617/996/1838 +f 6617/996/1838 6618/995/1839 6616/992/1837 +f 6618/995/1839 6617/996/1838 6619/998/1840 +f 6619/998/1840 6620/997/1841 6618/995/1839 +f 6614/994/1835 6621/1000/1842 6622/999/1843 +f 6622/999/1843 6615/993/1836 6614/994/1835 +f 6615/993/1836 6622/999/1843 6623/1001/1844 +f 6623/1001/1844 6617/996/1838 6615/993/1836 +f 6617/996/1838 6623/1001/1844 6624/1002/1845 +f 6624/1002/1845 6619/998/1840 6617/996/1838 +f 6621/1003/1846 6624/1004/1846 6623/1001/1847 +f 6623/1001/1847 6622/999/1847 6621/1003/1846 +f 6624/1004/1846 6621/1003/1846 6625/1005/1848 +f 6626/1006/1849 6627/1007/1849 6628/1008/1849 +f 6628/1008/1849 6629/1009/1849 6626/1006/1849 +f 6629/1010/1846 6628/1011/1846 6630/1012/1846 +f 6630/1012/1846 6631/1013/1846 6629/1010/1846 +f 6631/1009/1850 6630/1008/1850 6632/1007/1850 +f 6632/1007/1850 6633/1006/1850 6631/1009/1850 +f 6633/1013/1851 6632/1012/1851 6627/1011/1851 +f 6627/1011/1851 6626/1010/1851 6633/1013/1851 +f 6634/689/1852 6635/690/1853 6636/691/1854 +f 6636/691/1854 6637/692/1855 6634/689/1852 +f 6638/693/1856 6635/690/1857 6634/689/1858 +f 6634/689/1858 6639/694/1858 6638/693/1856 +f 6640/695/1859 6641/696/1860 6642/697/1861 +f 6642/697/1861 6643/698/1861 6640/695/1859 +f 6644/699/1862 6645/700/1862 6646/701/1863 +f 6646/701/1863 6647/702/1863 6644/699/1862 +f 6648/703/1864 6637/692/1865 6649/704/1866 +f 6649/704/1866 6650/705/1866 6648/703/1864 +f 6642/697/1867 6641/696/1868 6636/691/1854 +f 6636/691/1854 6635/690/1853 6642/697/1867 +f 6643/698/1869 6642/697/1869 6635/690/1857 +f 6635/690/1857 6638/706/1856 6643/698/1869 +f 6650/707/1870 6649/704/1870 6645/700/1862 +f 6645/700/1862 6644/699/1862 6650/707/1870 +f 6645/700/1871 6649/704/1872 6637/692/1855 +f 6637/692/1855 6636/691/1854 6645/700/1871 +f 6647/708/1873 6646/701/1873 6641/696/1860 +f 6641/696/1860 6640/695/1859 6647/708/1873 +f 6639/694/1874 6634/689/1874 6637/692/1865 +f 6637/692/1865 6648/703/1864 6639/694/1874 +f 6641/696/1868 6646/701/1875 6645/700/1871 +f 6645/700/1871 6636/691/1854 6641/696/1868 +f 6651/1014/1876 6652/1015/1877 6653/1016/1877 +f 6653/1016/1877 6654/1017/1878 6651/1014/1876 +f 6655/1018/1879 6656/1019/1879 6657/1020/1879 +f 6657/1020/1879 6658/1021/1879 6655/1018/1879 +f 6652/1022/1880 6651/1023/1880 6659/1024/1880 +f 6659/1024/1880 6660/1025/1880 6652/1022/1880 +f 6653/1026/8 6652/1027/8 6660/1028/8 +f 6660/1028/8 6661/1029/8 6653/1026/8 +f 6654/1023/1881 6653/1022/1881 6661/1025/1881 +f 6661/1025/1881 6662/1024/1881 6654/1023/1881 +f 6651/1027/2 6654/1026/2 6662/1029/2 +f 6662/1029/2 6659/1028/2 6651/1027/2 +f 6658/1030/1882 6663/1031/1883 6664/1032/1883 +f 6664/1032/1883 6655/1033/1882 6658/1030/1882 +f 6657/1034/1884 6665/1035/1884 6663/1036/1884 +f 6663/1036/1884 6658/1037/1884 6657/1034/1884 +f 6656/1033/1885 6666/1032/1886 6665/1031/1886 +f 6665/1031/1886 6657/1030/1885 6656/1033/1885 +f 6655/1037/1887 6664/1036/1887 6666/1035/1887 +f 6666/1035/1887 6656/1034/1887 6655/1037/1887 +f 6663/1031/1883 6660/1025/1880 6659/1024/1880 +f 6659/1024/1880 6664/1032/1883 6663/1031/1883 +f 6667/1035/8 6668/1029/8 6669/1028/8 +f 6669/1028/8 6670/1036/8 6667/1035/8 +f 6666/1032/1886 6662/1024/1881 6661/1025/1881 +f 6661/1025/1881 6665/1031/1886 6666/1032/1886 +f 6671/1036/2 6672/1028/2 6673/1029/2 +f 6673/1029/2 6674/1035/2 6671/1036/2 +f 6665/1038/1888 6667/1039/1888 6670/1040/1888 +f 6670/1040/1889 6663/1041/1889 6665/1038/1889 +f 6663/1031/1880 6670/1042/1880 6669/1043/1880 +f 6669/1043/1880 6660/1025/1880 6663/1031/1880 +f 6660/1041/1877 6669/1040/1877 6668/1039/1877 +f 6668/1039/1878 6661/1038/1878 6660/1041/1878 +f 6661/1025/1881 6668/1043/1881 6667/1042/1881 +f 6667/1042/1881 6665/1031/1881 6661/1025/1881 +f 6659/1024/1880 6672/1044/1880 6671/1045/1880 +f 6671/1045/1880 6664/1032/1880 6659/1024/1880 +f 6664/1040/1888 6671/1041/1888 6674/1038/1888 +f 6674/1038/1888 6666/1039/1888 6664/1040/1888 +f 6666/1032/1881 6674/1045/1881 6673/1044/1881 +f 6673/1044/1881 6662/1024/1881 6666/1032/1881 +f 6662/1039/1877 6673/1038/1877 6672/1041/1877 +f 6672/1041/1878 6659/1040/1878 6662/1039/1878 +f 6675/889/1890 6676/890/1891 6677/891/1892 +f 6677/891/1892 6678/892/1893 6675/889/1890 +f 6679/893/1894 6675/889/1890 6678/892/1893 +f 6678/892/1893 6680/894/1895 6679/893/1894 +f 6681/895/1896 6679/893/1894 6680/894/1895 +f 6680/894/1895 6682/896/1897 6681/895/1896 +f 6683/897/1898 6681/895/1896 6682/896/1897 +f 6682/896/1897 6684/898/1899 6683/897/1898 +f 6685/899/1900 6683/900/1898 6684/901/1899 +f 6684/901/1899 6686/902/1901 6685/899/1900 +f 6687/903/1902 6685/899/1900 6686/902/1901 +f 6686/902/1901 6688/904/1903 6687/903/1902 +f 6689/905/1904 6687/903/1902 6688/904/1903 +f 6688/904/1903 6690/906/1905 6689/905/1904 +f 6676/907/1891 6689/905/1904 6690/906/1905 +f 6690/906/1905 6677/908/1892 6676/907/1891 +f 6691/909/1906 6692/910/1907 6693/911/1908 +f 6693/911/1908 6694/912/1909 6691/909/1906 +f 6694/912/1909 6693/911/1908 6695/913/1910 +f 6695/913/1910 6696/914/1911 6694/912/1909 +f 6696/914/1911 6695/913/1910 6697/915/1912 +f 6697/915/1912 6698/916/1913 6696/914/1911 +f 6698/916/1913 6697/915/1912 6699/917/1914 +f 6699/917/1914 6700/918/1915 6698/916/1913 +f 6700/919/1915 6699/920/1914 6701/921/1916 +f 6701/921/1916 6702/922/1917 6700/919/1915 +f 6702/922/1917 6701/921/1916 6703/923/1918 +f 6703/923/1918 6704/924/1919 6702/922/1917 +f 6704/924/1919 6703/923/1918 6705/925/1920 +f 6705/925/1920 6706/926/1921 6704/924/1919 +f 6706/926/1921 6705/925/1920 6692/927/1907 +f 6692/927/1907 6691/928/1906 6706/926/1921 +f 6692/910/1907 6707/929/1922 6708/930/1923 +f 6708/930/1923 6693/911/1908 6692/910/1907 +f 6693/911/1908 6708/930/1923 6709/931/1924 +f 6709/931/1924 6695/913/1910 6693/911/1908 +f 6695/913/1910 6709/931/1924 6710/932/1925 +f 6710/932/1925 6697/915/1912 6695/913/1910 +f 6697/915/1912 6710/932/1925 6711/933/1926 +f 6711/933/1926 6699/917/1914 6697/915/1912 +f 6699/920/1914 6711/934/1926 6712/935/1927 +f 6712/935/1927 6701/921/1916 6699/920/1914 +f 6701/921/1916 6712/935/1927 6713/936/1928 +f 6713/936/1928 6703/923/1918 6701/921/1916 +f 6703/923/1918 6713/936/1928 6714/937/1929 +f 6714/937/1929 6705/925/1920 6703/923/1918 +f 6705/925/1920 6714/937/1929 6707/938/1922 +f 6707/938/1922 6692/927/1907 6705/925/1920 +f 6707/929/1922 6715/939/1930 6716/940/1931 +f 6716/940/1931 6708/930/1923 6707/929/1922 +f 6708/930/1923 6716/940/1931 6717/941/1932 +f 6717/941/1932 6709/931/1924 6708/930/1923 +f 6709/931/1924 6717/941/1932 6718/942/1933 +f 6718/942/1933 6710/932/1925 6709/931/1924 +f 6710/932/1925 6718/942/1933 6719/943/1934 +f 6719/943/1934 6711/933/1926 6710/932/1925 +f 6711/934/1926 6719/944/1934 6720/945/1935 +f 6720/945/1935 6712/935/1927 6711/934/1926 +f 6712/935/1927 6720/945/1935 6721/946/1936 +f 6721/946/1936 6713/936/1928 6712/935/1927 +f 6713/936/1928 6721/946/1936 6722/947/1937 +f 6722/947/1937 6714/937/1929 6713/936/1928 +f 6714/937/1929 6722/947/1937 6715/948/1930 +f 6715/948/1930 6707/938/1922 6714/937/1929 +f 6678/892/1893 6677/891/1892 6691/909/1906 +f 6691/909/1906 6694/912/1909 6678/892/1893 +f 6696/914/1911 6680/894/1895 6678/892/1893 +f 6678/892/1893 6694/912/1909 6696/914/1911 +f 6682/896/1897 6680/894/1895 6696/914/1911 +f 6696/914/1911 6698/916/1913 6682/896/1897 +f 6700/918/1915 6684/898/1899 6682/896/1897 +f 6682/896/1897 6698/916/1913 6700/918/1915 +f 6686/902/1901 6684/901/1899 6700/919/1915 +f 6700/919/1915 6702/922/1917 6686/902/1901 +f 6704/924/1919 6688/904/1903 6686/902/1901 +f 6686/902/1901 6702/922/1917 6704/924/1919 +f 6706/926/1921 6690/906/1905 6688/904/1903 +f 6688/904/1903 6704/924/1919 6706/926/1921 +f 6691/928/1906 6677/908/1892 6690/906/1905 +f 6690/906/1905 6706/926/1921 6691/928/1906 +f 6715/939/1938 6723/949/1938 6724/950/1938 +f 6724/950/1938 6716/940/1938 6715/939/1938 +f 6716/940/1939 6724/950/1939 6725/951/1939 +f 6725/951/1939 6717/941/1939 6716/940/1939 +f 6717/941/1940 6725/951/1940 6726/952/1940 +f 6726/952/1940 6718/942/1940 6717/941/1940 +f 6718/942/1941 6726/952/1941 6727/953/1941 +f 6727/953/1941 6719/943/1941 6718/942/1941 +f 6719/944/1942 6727/954/1942 6728/955/1942 +f 6728/955/1942 6720/945/1942 6719/944/1942 +f 6720/945/1943 6728/955/1943 6729/956/1943 +f 6729/956/1943 6721/946/1943 6720/945/1943 +f 6721/946/1944 6729/956/1944 6730/957/1944 +f 6730/957/1944 6722/947/1944 6721/946/1944 +f 6722/947/1945 6730/957/1945 6723/958/1945 +f 6723/958/1945 6715/948/1945 6722/947/1945 +f 6723/949/1946 6731/959/1946 6732/960/1946 +f 6732/960/1946 6724/950/1946 6723/949/1946 +f 6724/950/1947 6732/960/1947 6733/961/1947 +f 6733/961/1947 6725/951/1947 6724/950/1947 +f 6725/951/1948 6733/961/1948 6734/962/1948 +f 6734/962/1949 6726/952/1949 6725/951/1949 +f 6726/952/1950 6734/962/1950 6735/963/1950 +f 6735/963/1950 6727/953/1950 6726/952/1950 +f 6727/954/1951 6735/964/1951 6736/965/1951 +f 6736/965/1952 6728/955/1952 6727/954/1952 +f 6728/955/1953 6736/965/1953 6737/966/1953 +f 6737/966/1953 6729/956/1953 6728/955/1953 +f 6729/956/1954 6737/966/1954 6738/967/1954 +f 6738/967/1954 6730/957/1954 6729/956/1954 +f 6730/957/1955 6738/967/1955 6731/968/1955 +f 6731/968/1955 6723/958/1955 6730/957/1955 +f 6731/959/1938 6739/969/1938 6740/970/1938 +f 6740/970/1938 6732/960/1938 6731/959/1938 +f 6732/960/1939 6740/970/1939 6741/971/1939 +f 6741/971/1939 6733/961/1939 6732/960/1939 +f 6733/961/1940 6741/971/1940 6742/972/1940 +f 6742/972/1940 6734/962/1940 6733/961/1940 +f 6734/962/1941 6742/972/1941 6743/973/1941 +f 6743/973/1941 6735/963/1941 6734/962/1941 +f 6735/964/1942 6743/974/1942 6744/975/1942 +f 6744/975/1942 6736/965/1942 6735/964/1942 +f 6736/965/1956 6744/975/1956 6745/976/1956 +f 6745/976/1956 6737/966/1956 6736/965/1956 +f 6737/966/1944 6745/976/1944 6746/977/1944 +f 6746/977/1944 6738/967/1944 6737/966/1944 +f 6738/967/1945 6746/977/1945 6739/978/1945 +f 6739/978/1945 6731/968/1945 6738/967/1945 +f 6739/969/1957 6747/979/1957 6748/980/1957 +f 6748/980/1958 6740/970/1958 6739/969/1958 +f 6740/970/1959 6748/980/1959 6749/981/1959 +f 6749/981/1960 6741/971/1960 6740/970/1960 +f 6741/971/1961 6749/981/1961 6750/982/1961 +f 6750/982/1962 6742/972/1962 6741/971/1963 +f 6742/972/1964 6750/982/1964 6751/983/1964 +f 6751/983/1965 6743/973/1965 6742/972/1965 +f 6743/974/1966 6751/984/1966 6752/985/1966 +f 6752/985/1967 6744/975/1967 6743/974/1967 +f 6744/975/1968 6752/985/1968 6753/986/1968 +f 6753/986/1968 6745/976/1968 6744/975/1968 +f 6745/976/1969 6753/986/1969 6754/987/1969 +f 6754/987/1969 6746/977/1969 6745/976/1969 +f 6746/977/1970 6754/987/1970 6747/988/1970 +f 6747/988/1970 6739/978/1970 6746/977/1970 +f 6747/979/1971 6755/989/1971 6748/980/1971 +f 6748/980/1972 6755/989/1972 6749/981/1972 +f 6749/981/1973 6755/989/1973 6750/982/1973 +f 6750/982/1974 6755/989/1974 6751/983/1974 +f 6751/984/1975 6755/990/1975 6752/985/1975 +f 6752/985/1976 6755/990/1976 6753/986/1976 +f 6753/986/1977 6755/990/1977 6754/987/1977 +f 6754/987/1978 6755/990/1978 6747/988/1978 +f 6756/991/1979 6757/992/1980 6758/993/1981 +f 6758/993/1981 6759/994/1982 6756/991/1979 +f 6757/992/1980 6760/995/1983 6761/996/1984 +f 6761/996/1984 6758/993/1981 6757/992/1980 +f 6760/995/1983 6762/997/1985 6763/998/1986 +f 6763/998/1986 6761/996/1984 6760/995/1983 +f 6759/994/1982 6758/993/1981 6764/999/1987 +f 6764/999/1987 6765/1000/1988 6759/994/1982 +f 6758/993/1981 6761/996/1984 6766/1001/1989 +f 6766/1001/1989 6764/999/1987 6758/993/1981 +f 6761/996/1984 6763/998/1986 6767/1002/1990 +f 6767/1002/1990 6766/1001/1989 6761/996/1984 +f 6765/1003/1991 6764/999/1992 6766/1001/1991 +f 6766/1001/1991 6767/1004/1655 6765/1003/1991 +f 6767/1004/1655 6768/1005/1991 6765/1003/1991 +f 6769/991/1993 6770/994/1994 6771/993/1995 +f 6771/993/1995 6772/992/1996 6769/991/1993 +f 6772/992/1996 6771/993/1995 6773/996/1997 +f 6773/996/1997 6774/995/1998 6772/992/1996 +f 6774/995/1998 6773/996/1997 6775/998/1999 +f 6775/998/1999 6776/997/2000 6774/995/1998 +f 6770/994/1994 6777/1000/2001 6778/999/2002 +f 6778/999/2002 6771/993/1995 6770/994/1994 +f 6771/993/1995 6778/999/2002 6779/1001/2003 +f 6779/1001/2003 6773/996/1997 6771/993/1995 +f 6773/996/1997 6779/1001/2003 6780/1002/2004 +f 6780/1002/2004 6775/998/1999 6773/996/1997 +f 6777/1003/2005 6780/1004/2005 6779/1001/2006 +f 6779/1001/2006 6778/999/2005 6777/1003/2005 +f 6780/1004/2005 6777/1003/2005 6781/1005/2007 +f 6782/1006/2008 6783/1007/2008 6784/1008/2008 +f 6784/1008/2008 6785/1009/2008 6782/1006/2008 +f 6785/1010/2009 6784/1011/2010 6786/1012/2009 +f 6786/1012/2009 6787/1013/2009 6785/1010/2009 +f 6787/1009/1644 6786/1008/1644 6788/1007/1644 +f 6788/1007/1644 6789/1006/1645 6787/1009/1644 +f 6789/1013/1991 6788/1012/1991 6783/1011/1991 +f 6783/1011/1991 6782/1010/1991 6789/1013/1991 +f 6790/689/2011 6791/690/2012 6792/691/2013 +f 6792/691/2013 6793/692/2014 6790/689/2011 +f 6794/693/2015 6791/690/2016 6790/689/2017 +f 6790/689/2017 6795/694/2017 6794/693/2015 +f 6796/695/2018 6797/696/2019 6798/697/2020 +f 6798/697/2020 6799/698/2020 6796/695/2018 +f 6800/699/2021 6801/700/2021 6802/701/2022 +f 6802/701/2022 6803/702/2023 6800/699/2021 +f 6804/703/2024 6793/692/2025 6805/704/2026 +f 6805/704/2026 6806/705/2026 6804/703/2024 +f 6798/697/2027 6797/696/2028 6792/691/2013 +f 6792/691/2013 6791/690/2012 6798/697/2027 +f 6799/698/2029 6798/697/2029 6791/690/2016 +f 6791/690/2016 6794/706/2015 6799/698/2029 +f 6806/707/2030 6805/704/2030 6801/700/2021 +f 6801/700/2021 6800/699/2021 6806/707/2030 +f 6801/700/2031 6805/704/2032 6793/692/2014 +f 6793/692/2014 6792/691/2013 6801/700/2031 +f 6803/708/2033 6802/701/2034 6797/696/2019 +f 6797/696/2019 6796/695/2018 6803/708/2033 +f 6795/694/2035 6790/689/2035 6793/692/2025 +f 6793/692/2025 6804/703/2024 6795/694/2035 +f 6797/696/2028 6802/701/2036 6801/700/2031 +f 6801/700/2031 6792/691/2013 6797/696/2028 +f 6807/1014/2037 6808/1015/2037 6809/1016/2037 +f 6809/1016/2037 6810/1017/2037 6807/1014/2037 +f 6811/1018/2038 6812/1019/2038 6813/1020/2038 +f 6813/1020/2038 6814/1021/2038 6811/1018/2038 +f 6808/1022/2039 6807/1023/2039 6815/1024/2040 +f 6815/1024/2040 6816/1025/2040 6808/1022/2039 +f 6809/1026/2041 6808/1027/2041 6816/1028/2041 +f 6816/1028/2041 6817/1029/2041 6809/1026/2041 +f 6810/1023/2042 6809/1022/2042 6817/1025/2043 +f 6817/1025/2043 6818/1024/2043 6810/1023/2042 +f 6807/1027/2044 6810/1026/2044 6818/1029/2044 +f 6818/1029/2044 6815/1028/2044 6807/1027/2044 +f 6814/1030/2045 6819/1031/2046 6820/1032/2046 +f 6820/1032/2046 6811/1033/2045 6814/1030/2045 +f 6813/1034/2047 6821/1035/2048 6819/1036/2048 +f 6819/1036/2048 6814/1037/2047 6813/1034/2047 +f 6812/1033/2049 6822/1032/2050 6821/1031/2050 +f 6821/1031/2050 6813/1030/2049 6812/1033/2049 +f 6811/1037/2051 6820/1036/2052 6822/1035/2052 +f 6822/1035/2052 6812/1034/2051 6811/1037/2051 +f 6819/1031/2046 6816/1025/2040 6815/1024/2040 +f 6815/1024/2040 6820/1032/2046 6819/1031/2046 +f 6823/1035/2041 6824/1029/2041 6825/1028/2041 +f 6825/1028/2041 6826/1036/2041 6823/1035/2041 +f 6822/1032/2050 6818/1024/2043 6817/1025/2043 +f 6817/1025/2043 6821/1031/2050 6822/1032/2050 +f 6827/1036/2053 6828/1028/2053 6829/1029/2053 +f 6829/1029/2053 6830/1035/2053 6827/1036/2053 +f 6821/1038/2038 6823/1039/2038 6826/1040/2038 +f 6826/1040/2038 6819/1041/2038 6821/1038/2038 +f 6819/1031/2040 6826/1042/2040 6825/1043/2040 +f 6825/1043/2040 6816/1025/2040 6819/1031/2040 +f 6816/1041/2037 6825/1040/2037 6824/1039/2037 +f 6824/1039/2037 6817/1038/2037 6816/1041/2037 +f 6817/1025/2043 6824/1043/2043 6823/1042/2043 +f 6823/1042/2043 6821/1031/2043 6817/1025/2043 +f 6815/1024/2040 6828/1044/2040 6827/1045/2040 +f 6827/1045/2040 6820/1032/2040 6815/1024/2040 +f 6820/1040/2038 6827/1041/2038 6830/1038/2038 +f 6830/1038/2038 6822/1039/2038 6820/1040/2038 +f 6822/1032/2043 6830/1045/2043 6829/1044/2043 +f 6829/1044/2043 6818/1024/2043 6822/1032/2043 +f 6818/1039/2037 6829/1038/2037 6828/1041/2037 +f 6828/1041/2037 6815/1040/2037 6818/1039/2037 +f 6831/889/2054 6832/890/2055 6833/891/2056 +f 6833/891/2056 6834/892/2057 6831/889/2054 +f 6835/893/2058 6831/889/2054 6834/892/2057 +f 6834/892/2057 6836/894/2059 6835/893/2058 +f 6837/895/2060 6835/893/2058 6836/894/2059 +f 6836/894/2059 6838/896/2061 6837/895/2060 +f 6839/897/2062 6837/895/2060 6838/896/2061 +f 6838/896/2061 6840/898/2063 6839/897/2062 +f 6841/899/2064 6839/900/2062 6840/901/2063 +f 6840/901/2063 6842/902/2065 6841/899/2064 +f 6843/903/2066 6841/899/2064 6842/902/2065 +f 6842/902/2065 6844/904/2067 6843/903/2066 +f 6845/905/2068 6843/903/2066 6844/904/2067 +f 6844/904/2067 6846/906/2069 6845/905/2068 +f 6832/907/2055 6845/905/2068 6846/906/2069 +f 6846/906/2069 6833/908/2056 6832/907/2055 +f 6847/909/2070 6848/910/2071 6849/911/2072 +f 6849/911/2072 6850/912/2073 6847/909/2070 +f 6850/912/2073 6849/911/2072 6851/913/2074 +f 6851/913/2074 6852/914/2075 6850/912/2073 +f 6852/914/2075 6851/913/2074 6853/915/2076 +f 6853/915/2076 6854/916/2077 6852/914/2075 +f 6854/916/2077 6853/915/2076 6855/917/2078 +f 6855/917/2078 6856/918/2079 6854/916/2077 +f 6856/919/2079 6855/920/2078 6857/921/2080 +f 6857/921/2080 6858/922/2081 6856/919/2079 +f 6858/922/2081 6857/921/2080 6859/923/2082 +f 6859/923/2082 6860/924/2083 6858/922/2081 +f 6860/924/2083 6859/923/2082 6861/925/2084 +f 6861/925/2084 6862/926/2085 6860/924/2083 +f 6862/926/2085 6861/925/2084 6848/927/2071 +f 6848/927/2071 6847/928/2070 6862/926/2085 +f 6848/910/2071 6863/929/2086 6864/930/2087 +f 6864/930/2087 6849/911/2072 6848/910/2071 +f 6849/911/2072 6864/930/2087 6865/931/2088 +f 6865/931/2088 6851/913/2074 6849/911/2072 +f 6851/913/2074 6865/931/2088 6866/932/2089 +f 6866/932/2089 6853/915/2076 6851/913/2074 +f 6853/915/2076 6866/932/2089 6867/933/2090 +f 6867/933/2090 6855/917/2078 6853/915/2076 +f 6855/920/2078 6867/934/2090 6868/935/2091 +f 6868/935/2091 6857/921/2080 6855/920/2078 +f 6857/921/2080 6868/935/2091 6869/936/2092 +f 6869/936/2092 6859/923/2082 6857/921/2080 +f 6859/923/2082 6869/936/2092 6870/937/2093 +f 6870/937/2093 6861/925/2084 6859/923/2082 +f 6861/925/2084 6870/937/2093 6863/938/2086 +f 6863/938/2086 6848/927/2071 6861/925/2084 +f 6863/929/2086 6871/939/2094 6872/940/2095 +f 6872/940/2095 6864/930/2087 6863/929/2086 +f 6864/930/2087 6872/940/2095 6873/941/2096 +f 6873/941/2096 6865/931/2088 6864/930/2087 +f 6865/931/2088 6873/941/2096 6874/942/2097 +f 6874/942/2097 6866/932/2089 6865/931/2088 +f 6866/932/2089 6874/942/2097 6875/943/2098 +f 6875/943/2098 6867/933/2090 6866/932/2089 +f 6867/934/2090 6875/944/2098 6876/945/2099 +f 6876/945/2099 6868/935/2091 6867/934/2090 +f 6868/935/2091 6876/945/2099 6877/946/2100 +f 6877/946/2100 6869/936/2092 6868/935/2091 +f 6869/936/2092 6877/946/2100 6878/947/2101 +f 6878/947/2101 6870/937/2093 6869/936/2092 +f 6870/937/2093 6878/947/2101 6871/948/2094 +f 6871/948/2094 6863/938/2086 6870/937/2093 +f 6834/892/2057 6833/891/2056 6847/909/2070 +f 6847/909/2070 6850/912/2073 6834/892/2057 +f 6852/914/2075 6836/894/2059 6834/892/2057 +f 6834/892/2057 6850/912/2073 6852/914/2075 +f 6838/896/2061 6836/894/2059 6852/914/2075 +f 6852/914/2075 6854/916/2077 6838/896/2061 +f 6856/918/2079 6840/898/2063 6838/896/2061 +f 6838/896/2061 6854/916/2077 6856/918/2079 +f 6842/902/2065 6840/901/2063 6856/919/2079 +f 6856/919/2079 6858/922/2081 6842/902/2065 +f 6860/924/2083 6844/904/2067 6842/902/2065 +f 6842/902/2065 6858/922/2081 6860/924/2083 +f 6862/926/2085 6846/906/2069 6844/904/2067 +f 6844/904/2067 6860/924/2083 6862/926/2085 +f 6847/928/2070 6833/908/2056 6846/906/2069 +f 6846/906/2069 6862/926/2085 6847/928/2070 +f 6871/939/2102 6879/949/2102 6880/950/2102 +f 6880/950/2102 6872/940/2102 6871/939/2102 +f 6872/940/2103 6880/950/2103 6881/951/2103 +f 6881/951/2103 6873/941/2103 6872/940/2103 +f 6873/941/2104 6881/951/2104 6882/952/2104 +f 6882/952/2104 6874/942/2104 6873/941/2104 +f 6874/942/2105 6882/952/2105 6883/953/2105 +f 6883/953/2105 6875/943/2105 6874/942/2105 +f 6875/944/2106 6883/954/2106 6884/955/2106 +f 6884/955/2106 6876/945/2106 6875/944/2106 +f 6876/945/2107 6884/955/2107 6885/956/2107 +f 6885/956/2107 6877/946/2107 6876/945/2107 +f 6877/946/2108 6885/956/2108 6886/957/2108 +f 6886/957/2108 6878/947/2108 6877/946/2108 +f 6878/947/2109 6886/957/2109 6879/958/2109 +f 6879/958/2109 6871/948/2109 6878/947/2109 +f 6879/949/2110 6887/959/2110 6888/960/2110 +f 6888/960/2110 6880/950/2110 6879/949/2110 +f 6880/950/2111 6888/960/2111 6889/961/2111 +f 6889/961/2112 6881/951/2112 6880/950/2112 +f 6881/951/2113 6889/961/2113 6890/962/2113 +f 6890/962/2114 6882/952/2114 6881/951/2114 +f 6882/952/2115 6890/962/2115 6891/963/2115 +f 6891/963/2116 6883/953/2116 6882/952/2116 +f 6883/954/2117 6891/964/2117 6892/965/2117 +f 6892/965/2118 6884/955/2118 6883/954/2118 +f 6884/955/2119 6892/965/2119 6893/966/2119 +f 6893/966/2120 6885/956/2120 6884/955/2120 +f 6885/956/2121 6893/966/2121 6894/967/2121 +f 6894/967/2121 6886/957/2121 6885/956/2121 +f 6886/957/2122 6894/967/2122 6887/968/2122 +f 6887/968/2123 6879/958/2123 6886/957/2123 +f 6887/959/2102 6895/969/2102 6896/970/2102 +f 6896/970/2102 6888/960/2102 6887/959/2102 +f 6888/960/2124 6896/970/2124 6897/971/2124 +f 6897/971/2124 6889/961/2124 6888/960/2124 +f 6889/961/2104 6897/971/2104 6898/972/2104 +f 6898/972/2104 6890/962/2104 6889/961/2104 +f 6890/962/2125 6898/972/2125 6899/973/2125 +f 6899/973/2125 6891/963/2125 6890/962/2125 +f 6891/964/2106 6899/974/2106 6900/975/2106 +f 6900/975/2106 6892/965/2106 6891/964/2106 +f 6892/965/2126 6900/975/2126 6901/976/2126 +f 6901/976/2126 6893/966/2126 6892/965/2126 +f 6893/966/2127 6901/976/2127 6902/977/2127 +f 6902/977/2127 6894/967/2127 6893/966/2127 +f 6894/967/2128 6902/977/2128 6895/978/2128 +f 6895/978/2128 6887/968/2128 6894/967/2128 +f 6895/969/2129 6903/979/2129 6904/980/2129 +f 6904/980/2129 6896/970/2129 6895/969/2129 +f 6896/970/2130 6904/980/2130 6905/981/2130 +f 6905/981/2131 6897/971/2131 6896/970/2131 +f 6897/971/2132 6905/981/2132 6906/982/2132 +f 6906/982/2132 6898/972/2132 6897/971/2132 +f 6898/972/2133 6906/982/2133 6907/983/2133 +f 6907/983/2134 6899/973/2134 6898/972/2134 +f 6899/974/2135 6907/984/2135 6908/985/2135 +f 6908/985/2136 6900/975/2136 6899/974/2136 +f 6900/975/2137 6908/985/2137 6909/986/2137 +f 6909/986/2137 6901/976/2137 6900/975/2137 +f 6901/976/2138 6909/986/2138 6910/987/2138 +f 6910/987/2138 6902/977/2138 6901/976/2138 +f 6902/977/2139 6910/987/2139 6903/988/2139 +f 6903/988/2139 6895/978/2139 6902/977/2139 +f 6903/979/2140 6911/989/2140 6904/980/2140 +f 6904/980/2141 6911/989/2141 6905/981/2141 +f 6905/981/2142 6911/989/2142 6906/982/2142 +f 6906/982/2143 6911/989/2143 6907/983/2143 +f 6907/984/2144 6911/990/2144 6908/985/2144 +f 6908/985/2145 6911/990/2145 6909/986/2145 +f 6909/986/2146 6911/990/2146 6910/987/2146 +f 6910/987/2147 6911/990/2147 6903/988/2147 +f 6912/991/2148 6913/992/2149 6914/993/2150 +f 6914/993/2150 6915/994/2151 6912/991/2148 +f 6913/992/2149 6916/995/2152 6917/996/2153 +f 6917/996/2153 6914/993/2150 6913/992/2149 +f 6916/995/2152 6918/997/2154 6919/998/2155 +f 6919/998/2155 6917/996/2153 6916/995/2152 +f 6915/994/2151 6914/993/2150 6920/999/2156 +f 6920/999/2156 6921/1000/2157 6915/994/2151 +f 6914/993/2150 6917/996/2153 6922/1001/2158 +f 6922/1001/2158 6920/999/2156 6914/993/2150 +f 6917/996/2153 6919/998/2155 6923/1002/2159 +f 6923/1002/2159 6922/1001/2158 6917/996/2153 +f 6921/1003/406 6920/999/219 6922/1001/2160 +f 6922/1001/2160 6923/1004/2161 6921/1003/406 +f 6923/1004/2161 6924/1005/511 6921/1003/406 +f 6925/991/2162 6926/994/2163 6927/993/2164 +f 6927/993/2164 6928/992/2165 6925/991/2162 +f 6928/992/2165 6927/993/2164 6929/996/2166 +f 6929/996/2166 6930/995/2167 6928/992/2165 +f 6930/995/2167 6929/996/2166 6931/998/2168 +f 6931/998/2168 6932/997/2169 6930/995/2167 +f 6926/994/2163 6933/1000/2170 6934/999/2171 +f 6934/999/2171 6927/993/2164 6926/994/2163 +f 6927/993/2164 6934/999/2171 6935/1001/2172 +f 6935/1001/2172 6929/996/2166 6927/993/2164 +f 6929/996/2166 6935/1001/2172 6936/1002/2173 +f 6936/1002/2173 6931/998/2168 6929/996/2166 +f 6933/1003/2174 6936/1004/2175 6935/1001/501 +f 6935/1001/501 6934/999/2176 6933/1003/2174 +f 6936/1004/2175 6933/1003/2174 6937/1005/2177 +f 6938/1006/16 6939/1007/16 6940/1008/16 +f 6940/1008/16 6941/1009/16 6938/1006/16 +f 6941/1010/80 6940/1011/80 6942/1012/80 +f 6942/1012/80 6943/1013/80 6941/1010/80 +f 6943/1009/13 6942/1008/13 6944/1007/13 +f 6944/1007/13 6945/1006/13 6943/1009/13 +f 6945/1013/406 6944/1012/405 6939/1011/406 +f 6939/1011/406 6938/1010/2 6945/1013/406 +f 6946/689/2178 6947/690/2179 6948/691/2180 +f 6948/691/2180 6949/692/2181 6946/689/2178 +f 6950/693/2182 6947/690/2183 6946/689/2184 +f 6946/689/2184 6951/694/2184 6950/693/2182 +f 6952/695/2185 6953/696/2186 6954/697/2187 +f 6954/697/2187 6955/698/2187 6952/695/2185 +f 6956/699/2188 6957/700/2188 6958/701/2189 +f 6958/701/2189 6959/702/2189 6956/699/2188 +f 6960/703/2190 6949/692/2191 6961/704/2192 +f 6961/704/2192 6962/705/2192 6960/703/2190 +f 6954/697/2193 6953/696/2194 6948/691/2180 +f 6948/691/2180 6947/690/2179 6954/697/2193 +f 6955/698/2195 6954/697/2195 6947/690/2183 +f 6947/690/2183 6950/706/2182 6955/698/2195 +f 6962/707/2196 6961/704/2196 6957/700/2188 +f 6957/700/2188 6956/699/2188 6962/707/2196 +f 6957/700/2197 6961/704/2198 6949/692/2181 +f 6949/692/2181 6948/691/2180 6957/700/2197 +f 6959/708/2199 6958/701/2199 6953/696/2186 +f 6953/696/2186 6952/695/2185 6959/708/2199 +f 6951/694/2200 6946/689/2200 6949/692/2191 +f 6949/692/2191 6960/703/2190 6951/694/2200 +f 6953/696/2194 6958/701/2201 6957/700/2197 +f 6957/700/2197 6948/691/2180 6953/696/2194 +f 6963/1014/2202 6964/1015/2202 6965/1016/2202 +f 6965/1016/2202 6966/1017/2202 6963/1014/2202 +f 6967/1018/2203 6968/1019/2203 6969/1020/2203 +f 6969/1020/2203 6970/1021/2203 6967/1018/2203 +f 6964/1022/2204 6963/1023/2204 6971/1024/2204 +f 6971/1024/2204 6972/1025/2204 6964/1022/2204 +f 6965/1026/2205 6964/1027/2205 6972/1028/2206 +f 6972/1028/2206 6973/1029/2206 6965/1026/2205 +f 6966/1023/2207 6965/1022/2207 6973/1025/2207 +f 6973/1025/2207 6974/1024/2208 6966/1023/2207 +f 6963/1027/324 6966/1026/324 6974/1029/324 +f 6974/1029/324 6971/1028/324 6963/1027/324 +f 6970/1030/2209 6975/1031/2210 6976/1032/2210 +f 6976/1032/2210 6967/1033/2209 6970/1030/2209 +f 6969/1034/2211 6977/1035/2212 6975/1036/2212 +f 6975/1036/2212 6970/1037/2211 6969/1034/2211 +f 6968/1033/2213 6978/1032/2214 6977/1031/2214 +f 6977/1031/2214 6969/1030/2213 6968/1033/2213 +f 6967/1037/2215 6976/1036/2216 6978/1035/2216 +f 6978/1035/2216 6968/1034/2215 6967/1037/2215 +f 6975/1031/2210 6972/1025/2204 6971/1024/2204 +f 6971/1024/2204 6976/1032/2210 6975/1031/2210 +f 6979/1035/2217 6980/1029/2218 6981/1028/2217 +f 6981/1028/2217 6982/1036/2219 6979/1035/2217 +f 6978/1032/2214 6974/1024/2208 6973/1025/2207 +f 6973/1025/2207 6977/1031/2214 6978/1032/2214 +f 6983/1036/2220 6984/1028/2220 6985/1029/2220 +f 6985/1029/2220 6986/1035/2221 6983/1036/2220 +f 6977/1038/2203 6979/1039/2203 6982/1040/2203 +f 6982/1040/2203 6975/1041/2203 6977/1038/2203 +f 6975/1031/2222 6982/1042/2222 6981/1043/2222 +f 6981/1043/2222 6972/1025/2222 6975/1031/2222 +f 6972/1041/2202 6981/1040/2202 6980/1039/2202 +f 6980/1039/2202 6973/1038/2202 6972/1041/2202 +f 6973/1025/2208 6980/1043/2208 6979/1042/2208 +f 6979/1042/2208 6977/1031/2208 6973/1025/2208 +f 6971/1024/2204 6984/1044/2204 6983/1045/2204 +f 6983/1045/2204 6976/1032/2204 6971/1024/2204 +f 6976/1040/2203 6983/1041/2203 6986/1038/2203 +f 6986/1038/2203 6978/1039/2203 6976/1040/2203 +f 6978/1032/2223 6986/1045/2223 6985/1044/2223 +f 6985/1044/2208 6974/1024/2208 6978/1032/2208 +f 6974/1039/2202 6985/1038/2202 6984/1041/2202 +f 6984/1041/2202 6971/1040/2202 6974/1039/2202 +f 6987/889/2224 6988/890/2055 6989/891/2056 +f 6989/891/2056 6990/892/2057 6987/889/2224 +f 6991/893/2058 6987/889/2224 6990/892/2057 +f 6990/892/2057 6992/894/2059 6991/893/2058 +f 6993/895/2225 6991/893/2058 6992/894/2059 +f 6992/894/2059 6994/896/2061 6993/895/2225 +f 6995/897/2062 6993/895/2225 6994/896/2061 +f 6994/896/2061 6996/898/2063 6995/897/2062 +f 6997/899/2064 6995/900/2062 6996/901/2063 +f 6996/901/2063 6998/902/2065 6997/899/2064 +f 6999/903/2066 6997/899/2064 6998/902/2065 +f 6998/902/2065 7000/904/2067 6999/903/2066 +f 7001/905/2068 6999/903/2066 7000/904/2067 +f 7000/904/2067 7002/906/2069 7001/905/2068 +f 6988/907/2055 7001/905/2068 7002/906/2069 +f 7002/906/2069 6989/908/2056 6988/907/2055 +f 7003/909/2070 7004/910/2071 7005/911/2072 +f 7005/911/2072 7006/912/2073 7003/909/2070 +f 7006/912/2073 7005/911/2072 7007/913/2074 +f 7007/913/2074 7008/914/2075 7006/912/2073 +f 7008/914/2075 7007/913/2074 7009/915/2076 +f 7009/915/2076 7010/916/2077 7008/914/2075 +f 7010/916/2077 7009/915/2076 7011/917/2078 +f 7011/917/2078 7012/918/2079 7010/916/2077 +f 7012/919/2079 7011/920/2078 7013/921/2080 +f 7013/921/2080 7014/922/2081 7012/919/2079 +f 7014/922/2081 7013/921/2080 7015/923/2082 +f 7015/923/2082 7016/924/2083 7014/922/2081 +f 7016/924/2083 7015/923/2082 7017/925/2084 +f 7017/925/2084 7018/926/2085 7016/924/2083 +f 7018/926/2085 7017/925/2084 7004/927/2071 +f 7004/927/2071 7003/928/2070 7018/926/2085 +f 7004/910/2071 7019/929/2086 7020/930/2087 +f 7020/930/2087 7005/911/2072 7004/910/2071 +f 7005/911/2072 7020/930/2087 7021/931/2226 +f 7021/931/2226 7007/913/2074 7005/911/2072 +f 7007/913/2074 7021/931/2226 7022/932/2089 +f 7022/932/2089 7009/915/2076 7007/913/2074 +f 7009/915/2076 7022/932/2089 7023/933/2090 +f 7023/933/2090 7011/917/2078 7009/915/2076 +f 7011/920/2078 7023/934/2090 7024/935/2091 +f 7024/935/2091 7013/921/2080 7011/920/2078 +f 7013/921/2080 7024/935/2091 7025/936/2092 +f 7025/936/2092 7015/923/2082 7013/921/2080 +f 7015/923/2082 7025/936/2092 7026/937/2093 +f 7026/937/2093 7017/925/2084 7015/923/2082 +f 7017/925/2084 7026/937/2093 7019/938/2086 +f 7019/938/2086 7004/927/2071 7017/925/2084 +f 7019/929/2086 7027/939/2094 7028/940/2095 +f 7028/940/2095 7020/930/2087 7019/929/2086 +f 7020/930/2087 7028/940/2095 7029/941/2096 +f 7029/941/2096 7021/931/2226 7020/930/2087 +f 7021/931/2226 7029/941/2096 7030/942/2097 +f 7030/942/2097 7022/932/2089 7021/931/2226 +f 7022/932/2089 7030/942/2097 7031/943/2098 +f 7031/943/2098 7023/933/2090 7022/932/2089 +f 7023/934/2090 7031/944/2098 7032/945/2099 +f 7032/945/2099 7024/935/2091 7023/934/2090 +f 7024/935/2091 7032/945/2099 7033/946/2227 +f 7033/946/2227 7025/936/2092 7024/935/2091 +f 7025/936/2092 7033/946/2227 7034/947/2101 +f 7034/947/2101 7026/937/2093 7025/936/2092 +f 7026/937/2093 7034/947/2101 7027/948/2094 +f 7027/948/2094 7019/938/2086 7026/937/2093 +f 6990/892/2057 6989/891/2056 7003/909/2070 +f 7003/909/2070 7006/912/2073 6990/892/2057 +f 7008/914/2075 6992/894/2059 6990/892/2057 +f 6990/892/2057 7006/912/2073 7008/914/2075 +f 6994/896/2061 6992/894/2059 7008/914/2075 +f 7008/914/2075 7010/916/2077 6994/896/2061 +f 7012/918/2079 6996/898/2063 6994/896/2061 +f 6994/896/2061 7010/916/2077 7012/918/2079 +f 6998/902/2065 6996/901/2063 7012/919/2079 +f 7012/919/2079 7014/922/2081 6998/902/2065 +f 7016/924/2083 7000/904/2067 6998/902/2065 +f 6998/902/2065 7014/922/2081 7016/924/2083 +f 7018/926/2085 7002/906/2069 7000/904/2067 +f 7000/904/2067 7016/924/2083 7018/926/2085 +f 7003/928/2070 6989/908/2056 7002/906/2069 +f 7002/906/2069 7018/926/2085 7003/928/2070 +f 7027/939/2102 7035/949/2102 7036/950/2102 +f 7036/950/2102 7028/940/2102 7027/939/2102 +f 7028/940/2103 7036/950/2103 7037/951/2103 +f 7037/951/2103 7029/941/2103 7028/940/2103 +f 7029/941/2104 7037/951/2104 7038/952/2104 +f 7038/952/2104 7030/942/2104 7029/941/2104 +f 7030/942/2105 7038/952/2105 7039/953/2105 +f 7039/953/2105 7031/943/2105 7030/942/2105 +f 7031/944/2106 7039/954/2106 7040/955/2106 +f 7040/955/2106 7032/945/2106 7031/944/2106 +f 7032/945/2107 7040/955/2107 7041/956/2107 +f 7041/956/2107 7033/946/2107 7032/945/2107 +f 7033/946/2127 7041/956/2127 7042/957/2127 +f 7042/957/2127 7034/947/2127 7033/946/2127 +f 7034/947/2109 7042/957/2109 7035/958/2109 +f 7035/958/2109 7027/948/2109 7034/947/2109 +f 7035/949/2110 7043/959/2110 7044/960/2110 +f 7044/960/2110 7036/950/2110 7035/949/2110 +f 7036/950/2111 7044/960/2111 7045/961/2111 +f 7045/961/2228 7037/951/2228 7036/950/2228 +f 7037/951/2113 7045/961/2113 7046/962/2113 +f 7046/962/2113 7038/952/2113 7037/951/2113 +f 7038/952/2115 7046/962/2115 7047/963/2115 +f 7047/963/2116 7039/953/2116 7038/952/2116 +f 7039/954/2117 7047/964/2117 7048/965/2117 +f 7048/965/2118 7040/955/2118 7039/954/2118 +f 7040/955/2119 7048/965/2119 7049/966/2119 +f 7049/966/2120 7041/956/2120 7040/955/2120 +f 7041/956/2121 7049/966/2121 7050/967/2121 +f 7050/967/2121 7042/957/2121 7041/956/2121 +f 7042/957/2123 7050/967/2123 7043/968/2123 +f 7043/968/2123 7035/958/2123 7042/957/2123 +f 7043/959/2102 7051/969/2102 7052/970/2102 +f 7052/970/2102 7044/960/2102 7043/959/2102 +f 7044/960/2124 7052/970/2124 7053/971/2124 +f 7053/971/2124 7045/961/2124 7044/960/2124 +f 7045/961/2104 7053/971/2104 7054/972/2104 +f 7054/972/2104 7046/962/2104 7045/961/2104 +f 7046/962/2125 7054/972/2125 7055/973/2125 +f 7055/973/2125 7047/963/2125 7046/962/2125 +f 7047/964/2106 7055/974/2106 7056/975/2106 +f 7056/975/2106 7048/965/2106 7047/964/2106 +f 7048/965/2126 7056/975/2126 7057/976/2126 +f 7057/976/2126 7049/966/2126 7048/965/2126 +f 7049/966/2127 7057/976/2127 7058/977/2127 +f 7058/977/2127 7050/967/2127 7049/966/2127 +f 7050/967/2128 7058/977/2128 7051/978/2128 +f 7051/978/2128 7043/968/2128 7050/967/2128 +f 7051/969/2129 7059/979/2129 7060/980/2129 +f 7060/980/2129 7052/970/2129 7051/969/2129 +f 7052/970/2130 7060/980/2130 7061/981/2130 +f 7061/981/2131 7053/971/2131 7052/970/2131 +f 7053/971/2132 7061/981/2132 7062/982/2132 +f 7062/982/2132 7054/972/2132 7053/971/2132 +f 7054/972/2133 7062/982/2133 7063/983/2133 +f 7063/983/2134 7055/973/2134 7054/972/2134 +f 7055/974/2135 7063/984/2135 7064/985/2135 +f 7064/985/2136 7056/975/2136 7055/974/2136 +f 7056/975/2137 7064/985/2137 7065/986/2137 +f 7065/986/2137 7057/976/2137 7056/975/2137 +f 7057/976/2138 7065/986/2138 7066/987/2138 +f 7066/987/2138 7058/977/2138 7057/976/2138 +f 7058/977/2139 7066/987/2139 7059/988/2139 +f 7059/988/2139 7051/978/2139 7058/977/2139 +f 7059/979/2140 7067/989/2140 7060/980/2140 +f 7060/980/2141 7067/989/2141 7061/981/2141 +f 7061/981/2142 7067/989/2142 7062/982/2142 +f 7062/982/2143 7067/989/2143 7063/983/2143 +f 7063/984/2144 7067/990/2144 7064/985/2144 +f 7064/985/2145 7067/990/2145 7065/986/2145 +f 7065/986/2146 7067/990/2146 7066/987/2146 +f 7066/987/2147 7067/990/2147 7059/988/2147 +f 7068/991/2148 7069/992/2149 7070/993/2150 +f 7070/993/2150 7071/994/2229 7068/991/2148 +f 7069/992/2149 7072/995/2230 7073/996/2153 +f 7073/996/2153 7070/993/2150 7069/992/2149 +f 7072/995/2230 7074/997/2231 7075/998/2232 +f 7075/998/2232 7073/996/2153 7072/995/2230 +f 7071/994/2229 7070/993/2150 7076/999/2156 +f 7076/999/2156 7077/1000/2157 7071/994/2229 +f 7070/993/2150 7073/996/2153 7078/1001/2158 +f 7078/1001/2158 7076/999/2156 7070/993/2150 +f 7073/996/2153 7075/998/2232 7079/1002/2159 +f 7079/1002/2159 7078/1001/2158 7073/996/2153 +f 7077/1003/406 7076/999/219 7078/1001/2160 +f 7078/1001/2160 7079/1004/2161 7077/1003/406 +f 7079/1004/2161 7080/1005/511 7077/1003/406 +f 7081/991/2162 7082/994/2163 7083/993/2164 +f 7083/993/2164 7084/992/2165 7081/991/2162 +f 7084/992/2165 7083/993/2164 7085/996/2166 +f 7085/996/2166 7086/995/2167 7084/992/2165 +f 7086/995/2167 7085/996/2166 7087/998/2233 +f 7087/998/2233 7088/997/2234 7086/995/2167 +f 7082/994/2163 7089/1000/2170 7090/999/2171 +f 7090/999/2171 7083/993/2164 7082/994/2163 +f 7083/993/2164 7090/999/2171 7091/1001/2172 +f 7091/1001/2172 7085/996/2166 7083/993/2164 +f 7085/996/2166 7091/1001/2172 7092/1002/2173 +f 7092/1002/2173 7087/998/2233 7085/996/2166 +f 7089/1003/2174 7092/1004/2175 7091/1001/501 +f 7091/1001/501 7090/999/2176 7089/1003/2174 +f 7092/1004/2175 7089/1003/2174 7093/1005/2177 +f 7094/1006/16 7095/1007/16 7096/1008/16 +f 7096/1008/16 7097/1009/16 7094/1006/16 +f 7097/1010/2235 7096/1011/449 7098/1012/449 +f 7098/1012/449 7099/1013/2235 7097/1010/2235 +f 7099/1009/5 7098/1008/5 7100/1007/5 +f 7100/1007/5 7101/1006/5 7099/1009/5 +f 7101/1013/406 7100/1012/406 7095/1011/406 +f 7095/1011/406 7094/1010/2 7101/1013/406 +f 7102/689/2178 7103/690/2179 7104/691/2180 +f 7104/691/2180 7105/692/2181 7102/689/2178 +f 7106/693/2183 7103/690/2182 7102/689/2184 +f 7102/689/2184 7107/694/2184 7106/693/2183 +f 7108/695/2236 7109/696/2237 7110/697/2187 +f 7110/697/2187 7111/698/2187 7108/695/2236 +f 7112/699/2238 7113/700/2238 7114/701/2239 +f 7114/701/2239 7115/702/2239 7112/699/2238 +f 7116/703/2190 7105/692/2240 7117/704/2192 +f 7117/704/2192 7118/705/2192 7116/703/2190 +f 7110/697/2193 7109/696/2194 7104/691/2180 +f 7104/691/2180 7103/690/2179 7110/697/2193 +f 7111/698/2195 7110/697/2195 7103/690/2182 +f 7103/690/2182 7106/706/2183 7111/698/2195 +f 7118/707/2196 7117/704/2196 7113/700/2238 +f 7113/700/2238 7112/699/2238 7118/707/2196 +f 7113/700/2197 7117/704/2198 7105/692/2181 +f 7105/692/2181 7104/691/2180 7113/700/2197 +f 7115/708/2199 7114/701/2199 7109/696/2237 +f 7109/696/2237 7108/695/2236 7115/708/2199 +f 7107/694/2200 7102/689/2241 7105/692/2240 +f 7105/692/2240 7116/703/2190 7107/694/2200 +f 7109/696/2194 7114/701/2201 7113/700/2197 +f 7113/700/2197 7104/691/2180 7109/696/2194 +f 7119/1014/2202 7120/1015/2202 7121/1016/2202 +f 7121/1016/2202 7122/1017/2202 7119/1014/2202 +f 7123/1018/2203 7124/1019/2203 7125/1020/2203 +f 7125/1020/2203 7126/1021/2203 7123/1018/2203 +f 7120/1022/2204 7119/1023/2242 7127/1024/2204 +f 7127/1024/2204 7128/1025/2243 7120/1022/2204 +f 7121/1026/2205 7120/1027/2205 7128/1028/2206 +f 7128/1028/2206 7129/1029/2206 7121/1026/2205 +f 7122/1023/2244 7121/1022/2244 7129/1025/2207 +f 7129/1025/2207 7130/1024/2207 7122/1023/2244 +f 7119/1027/324 7122/1026/324 7130/1029/324 +f 7130/1029/324 7127/1028/324 7119/1027/324 +f 7126/1030/2209 7131/1031/2210 7132/1032/2210 +f 7132/1032/2210 7123/1033/2209 7126/1030/2209 +f 7125/1034/2211 7133/1035/2212 7131/1036/2212 +f 7131/1036/2212 7126/1037/2211 7125/1034/2211 +f 7124/1033/2213 7134/1032/2214 7133/1031/2214 +f 7133/1031/2214 7125/1030/2213 7124/1033/2213 +f 7123/1037/2216 7132/1036/2215 7134/1035/2215 +f 7134/1035/2215 7124/1034/2216 7123/1037/2216 +f 7131/1031/2210 7128/1025/2243 7127/1024/2204 +f 7127/1024/2204 7132/1032/2210 7131/1031/2210 +f 7135/1035/2206 7136/1029/2217 7137/1028/2245 +f 7137/1028/2245 7138/1036/2219 7135/1035/2206 +f 7134/1032/2214 7130/1024/2207 7129/1025/2207 +f 7129/1025/2207 7133/1031/2214 7134/1032/2214 +f 7139/1036/2220 7140/1028/2220 7141/1029/2220 +f 7141/1029/2220 7142/1035/2220 7139/1036/2220 +f 7133/1038/2203 7135/1039/2203 7138/1040/2203 +f 7138/1040/2203 7131/1041/2203 7133/1038/2203 +f 7131/1031/2243 7138/1042/2243 7137/1043/2243 +f 7137/1043/2243 7128/1025/2243 7131/1031/2243 +f 7128/1041/2202 7137/1040/2202 7136/1039/2202 +f 7136/1039/2202 7129/1038/2202 7128/1041/2202 +f 7129/1025/2246 7136/1043/2246 7135/1042/2246 +f 7135/1042/2246 7133/1031/2246 7129/1025/2246 +f 7127/1024/2204 7140/1044/2204 7139/1045/2204 +f 7139/1045/2204 7132/1032/2204 7127/1024/2204 +f 7132/1040/2203 7139/1041/2203 7142/1038/2203 +f 7142/1038/2203 7134/1039/2203 7132/1040/2203 +f 7134/1032/2208 7142/1045/2208 7141/1044/2208 +f 7141/1044/2208 7130/1024/2208 7134/1032/2208 +f 7130/1039/2202 7141/1038/2202 7140/1041/2202 +f 7140/1041/2202 7127/1040/2202 7130/1039/2202 +f 7143/1014/2247 7144/1015/2248 7145/1016/2248 +f 7145/1016/2248 7146/1017/2247 7143/1014/2247 +f 7147/1018/2249 7148/1019/2249 7149/1020/2249 +f 7149/1020/2249 7150/1021/2249 7147/1018/2249 +f 7144/1022/2250 7143/1023/2250 7151/1024/2250 +f 7151/1024/2250 7152/1025/2251 7144/1022/2250 +f 7145/1026/8 7144/1027/8 7152/1028/8 +f 7152/1028/8 7153/1029/8 7145/1026/8 +f 7146/1023/2252 7145/1022/2252 7153/1025/2252 +f 7153/1025/2252 7154/1024/2252 7146/1023/2252 +f 7143/1027/2 7146/1026/2 7154/1029/2 +f 7154/1029/2 7151/1028/2 7143/1027/2 +f 7150/1030/2253 7155/1031/2254 7156/1032/2254 +f 7156/1032/2254 7147/1033/2253 7150/1030/2253 +f 7149/1034/2255 7157/1035/2255 7155/1036/2255 +f 7155/1036/2255 7150/1037/2255 7149/1034/2255 +f 7148/1033/2256 7158/1032/2257 7157/1031/2258 +f 7157/1031/2258 7149/1030/2256 7148/1033/2256 +f 7147/1037/2259 7156/1036/2259 7158/1035/2259 +f 7158/1035/2259 7148/1034/2259 7147/1037/2259 +f 7155/1031/2254 7152/1025/2251 7151/1024/2250 +f 7151/1024/2250 7156/1032/2254 7155/1031/2254 +f 7159/1035/8 7160/1029/8 7161/1028/8 +f 7161/1028/8 7162/1036/8 7159/1035/8 +f 7158/1032/2257 7154/1024/2252 7153/1025/2252 +f 7153/1025/2252 7157/1031/2258 7158/1032/2257 +f 7163/1036/2 7164/1028/2 7165/1029/2 +f 7165/1029/2 7166/1035/2 7163/1036/2 +f 7157/1038/2260 7159/1039/2260 7162/1040/2260 +f 7162/1040/2260 7155/1041/2260 7157/1038/2260 +f 7155/1031/2251 7162/1042/2251 7161/1043/2251 +f 7161/1043/2251 7152/1025/2251 7155/1031/2251 +f 7152/1041/2248 7161/1040/2248 7160/1039/2248 +f 7160/1039/2248 7153/1038/2248 7152/1041/2248 +f 7153/1025/2261 7160/1043/2261 7159/1042/2261 +f 7159/1042/2261 7157/1031/2261 7153/1025/2261 +f 7151/1024/2250 7164/1044/2250 7163/1045/2250 +f 7163/1045/2250 7156/1032/2250 7151/1024/2250 +f 7156/1040/2260 7163/1041/2260 7166/1038/2260 +f 7166/1038/2260 7158/1039/2260 7156/1040/2260 +f 7158/1032/2261 7166/1045/2261 7165/1044/2261 +f 7165/1044/2252 7154/1024/2252 7158/1032/2252 +f 7154/1039/2247 7165/1038/2247 7164/1041/2247 +f 7164/1041/2248 7151/1040/2248 7154/1039/2248 +f 7167/1046/2262 7168/1047/2263 7169/1048/2264 +f 7169/1048/2264 7170/1049/2265 7167/1046/2262 +f 7171/1050/16 7167/1051/16 7170/1052/16 +f 7170/1052/16 7172/1053/16 7171/1050/16 +f 7173/1054/2266 7174/1055/2267 7175/1056/2268 +f 7175/1056/2268 7176/1057/2269 7173/1054/2266 +f 7177/1058/13 7169/1059/13 7168/1060/13 +f 7168/1060/13 7178/1061/13 7177/1058/13 +f 7179/1055/2270 7180/1054/2271 7181/1057/2272 +f 7181/1057/2272 7182/1056/2273 7179/1055/2270 +f 7183/1062/36 7184/1063/36 7185/1064/36 +f 7185/1064/36 7186/1065/36 7183/1062/36 +f 7187/1066/36 7188/1067/36 7189/1068/36 +f 7189/1068/36 7190/1069/36 7187/1066/36 +f 7173/1070/16 7176/1071/16 7167/1051/16 +f 7167/1051/16 7171/1050/16 7173/1070/16 +f 7181/1072/16 7180/1073/16 7172/1053/16 +f 7172/1053/16 7170/1052/16 7181/1072/16 +f 7176/1057/2274 7175/1056/2274 7191/1074/2274 +f 7191/1074/2 7192/1075/2 7176/1057/2 +f 7175/1071/2275 7168/1060/2275 7193/1076/2275 +f 7193/1076/2276 7191/1077/2276 7175/1071/2276 +f 7168/1078/2277 7167/1057/2277 7194/1079/2277 +f 7194/1079/2278 7193/1074/2278 7168/1078/2278 +f 7167/1051/2279 7176/1071/2279 7192/1080/2279 +f 7192/1080/2280 7194/1081/2280 7167/1051/2280 +f 7181/1072/2281 7170/1052/2281 7195/1082/2281 +f 7195/1082/2282 7196/1083/2282 7181/1072/2282 +f 7170/1057/2283 7169/1056/2283 7197/1084/2283 +f 7197/1084/2284 7195/1085/2284 7170/1057/2284 +f 7169/1059/2285 7182/1086/2285 7198/1087/2285 +f 7198/1087/2286 7197/1088/2286 7169/1059/2286 +f 7182/1056/2287 7181/1057/2287 7196/1079/2287 +f 7196/1079/2288 7198/1084/2288 7182/1056/2288 +f 7192/1075/2 7191/1074/2 7184/1089/2 +f 7184/1089/2 7183/1090/2 7192/1075/2 +f 7198/1084/8 7196/1079/8 7188/1090/8 +f 7188/1090/8 7187/1089/8 7198/1084/8 +f 7186/1065/36 7185/1064/36 7190/1069/36 +f 7190/1069/36 7189/1068/36 7186/1065/36 +f 7183/1091/6 7186/1092/6 7194/1081/6 +f 7194/1081/6 7192/1080/6 7183/1091/6 +f 7189/1093/6 7188/1094/6 7196/1083/6 +f 7196/1083/6 7195/1082/6 7189/1093/6 +f 7199/1095/5 7200/1096/5 7201/1097/5 +f 7201/1097/5 7202/1098/5 7199/1095/5 +f 7190/1093/5 7185/1092/5 7193/1076/5 +f 7193/1076/5 7197/1088/5 7190/1093/5 +f 7203/1095/5 7204/1096/5 7205/1097/5 +f 7205/1097/5 7206/1098/5 7203/1095/5 +f 7186/1092/6 7189/1093/6 7195/1082/6 +f 7195/1082/6 7194/1081/6 7186/1092/6 +f 7187/1066/36 7190/1069/36 7200/1099/36 +f 7200/1099/36 7199/1100/36 7187/1066/36 +f 7190/1089/2289 7197/1084/2289 7201/1101/2289 +f 7201/1101/2290 7200/1102/2290 7190/1089/2290 +f 7198/1084/8 7187/1089/8 7199/1102/8 +f 7199/1102/8 7202/1101/8 7198/1084/8 +f 7185/1064/36 7184/1063/36 7204/1103/36 +f 7204/1103/36 7203/1104/36 7185/1064/36 +f 7184/1089/2 7191/1074/2 7205/1105/2 +f 7205/1105/2 7204/1102/2 7184/1089/2 +f 7193/1074/8 7185/1089/8 7203/1102/8 +f 7203/1102/8 7206/1105/8 7193/1074/8 +f 7207/1106/2291 7208/1107/2291 7169/1056/2291 +f 7169/1056/2292 7177/1055/2292 7207/1106/2292 +f 7209/1107/2293 7210/1108/2293 7179/1055/2293 +f 7179/1055/2294 7182/1056/2294 7209/1107/2294 +f 7211/1106/2295 7212/1109/2295 7175/1056/2295 +f 7175/1056/2296 7174/1055/2296 7211/1106/2296 +f 7213/1109/2297 7214/1106/2297 7178/1055/2297 +f 7178/1055/2298 7168/1078/2298 7213/1109/2298 +f 7208/1110/2299 7209/1111/2299 7182/1112/2299 +f 7182/1112/2300 7169/1048/2300 7208/1110/2300 +f 7212/1113/2301 7213/1114/2301 7168/1047/2301 +f 7168/1047/2302 7175/1115/2302 7212/1113/2302 +f 7207/1097/13 7210/1098/13 7209/1095/13 +f 7209/1095/13 7208/1096/13 7207/1097/13 +f 7212/1096/13 7211/1097/13 7214/1098/13 +f 7214/1098/13 7213/1095/13 7212/1096/13 +f 7215/689/2303 7216/690/2304 7217/691/2305 +f 7217/691/2305 7218/692/2306 7215/689/2303 +f 7219/693/2307 7216/690/2308 7215/689/2309 +f 7215/689/2309 7220/694/2309 7219/693/2307 +f 7221/695/2310 7222/696/2311 7223/697/2312 +f 7223/697/2312 7224/698/2312 7221/695/2310 +f 7225/699/2313 7226/700/2313 7227/701/2314 +f 7227/701/2314 7228/702/2314 7225/699/2313 +f 7229/703/2315 7218/692/2316 7230/704/2317 +f 7230/704/2317 7231/705/2317 7229/703/2315 +f 7223/697/2318 7222/696/2319 7217/691/2305 +f 7217/691/2305 7216/690/2304 7223/697/2318 +f 7224/698/2320 7223/697/2320 7216/690/2308 +f 7216/690/2308 7219/706/2307 7224/698/2320 +f 7231/707/2321 7230/704/2321 7226/700/2313 +f 7226/700/2313 7225/699/2313 7231/707/2321 +f 7226/700/2322 7230/704/2323 7218/692/2306 +f 7218/692/2306 7217/691/2305 7226/700/2322 +f 7228/708/2324 7227/701/2324 7222/696/2311 +f 7222/696/2311 7221/695/2310 7228/708/2324 +f 7220/694/2325 7215/689/2325 7218/692/2316 +f 7218/692/2316 7229/703/2315 7220/694/2325 +f 7222/696/2319 7227/701/2326 7226/700/2322 +f 7226/700/2322 7217/691/2305 7222/696/2319 +f 7232/1014/2247 7233/1015/2248 7234/1016/2248 +f 7234/1016/2248 7235/1017/2247 7232/1014/2247 +f 7236/1018/2249 7237/1019/2249 7238/1020/2249 +f 7238/1020/2249 7239/1021/2249 7236/1018/2249 +f 7233/1022/2250 7232/1023/2250 7240/1024/2250 +f 7240/1024/2250 7241/1025/2251 7233/1022/2250 +f 7234/1026/8 7233/1027/8 7241/1028/8 +f 7241/1028/8 7242/1029/8 7234/1026/8 +f 7235/1023/2252 7234/1022/2252 7242/1025/2252 +f 7242/1025/2252 7243/1024/2252 7235/1023/2252 +f 7232/1027/2 7235/1026/2 7243/1029/2 +f 7243/1029/2 7240/1028/2 7232/1027/2 +f 7239/1030/2253 7244/1031/2254 7245/1032/2254 +f 7245/1032/2254 7236/1033/2253 7239/1030/2253 +f 7238/1034/2255 7246/1035/2255 7244/1036/2255 +f 7244/1036/2255 7239/1037/2255 7238/1034/2255 +f 7237/1033/2256 7247/1032/2257 7246/1031/2258 +f 7246/1031/2258 7238/1030/2256 7237/1033/2256 +f 7236/1037/2259 7245/1036/2259 7247/1035/2259 +f 7247/1035/2259 7237/1034/2259 7236/1037/2259 +f 7244/1031/2254 7241/1025/2251 7240/1024/2250 +f 7240/1024/2250 7245/1032/2254 7244/1031/2254 +f 7248/1035/8 7249/1029/8 7250/1028/8 +f 7250/1028/8 7251/1036/8 7248/1035/8 +f 7247/1032/2257 7243/1024/2252 7242/1025/2252 +f 7242/1025/2252 7246/1031/2258 7247/1032/2257 +f 7252/1036/2 7253/1028/2 7254/1029/2 +f 7254/1029/2 7255/1035/2 7252/1036/2 +f 7246/1038/2260 7248/1039/2260 7251/1040/2260 +f 7251/1040/2260 7244/1041/2260 7246/1038/2260 +f 7244/1031/2251 7251/1042/2251 7250/1043/2251 +f 7250/1043/2251 7241/1025/2251 7244/1031/2251 +f 7241/1041/2248 7250/1040/2248 7249/1039/2248 +f 7249/1039/2248 7242/1038/2248 7241/1041/2248 +f 7242/1025/2261 7249/1043/2261 7248/1042/2261 +f 7248/1042/2261 7246/1031/2261 7242/1025/2261 +f 7240/1024/2250 7253/1044/2250 7252/1045/2250 +f 7252/1045/2250 7245/1032/2250 7240/1024/2250 +f 7245/1040/2260 7252/1041/2260 7255/1038/2260 +f 7255/1038/2260 7247/1039/2260 7245/1040/2260 +f 7247/1032/2261 7255/1045/2261 7254/1044/2261 +f 7254/1044/2252 7243/1024/2252 7247/1032/2252 +f 7243/1039/2247 7254/1038/2247 7253/1041/2247 +f 7253/1041/2248 7240/1040/2248 7243/1039/2248 +f 7256/1014/2327 7257/1015/2328 7258/1016/2329 +f 7258/1016/2329 7259/1017/2327 7256/1014/2327 +f 7260/1018/2330 7261/1019/2331 7262/1020/2332 +f 7262/1020/2332 7263/1021/2332 7260/1018/2330 +f 7257/1022/2333 7256/1023/2333 7264/1024/2333 +f 7264/1024/2333 7265/1025/2334 7257/1022/2333 +f 7258/1026/2335 7257/1027/2335 7265/1028/2336 +f 7265/1028/2336 7266/1029/2336 7258/1026/2335 +f 7259/1023/2337 7258/1022/2337 7266/1025/2337 +f 7266/1025/2337 7267/1024/2337 7259/1023/2337 +f 7256/1027/2338 7259/1026/2338 7267/1029/2339 +f 7267/1029/2339 7264/1028/2339 7256/1027/2338 +f 7263/1030/2340 7268/1031/2341 7269/1032/2342 +f 7269/1032/2342 7260/1033/2340 7263/1030/2340 +f 7262/1034/2343 7270/1035/2344 7268/1036/2344 +f 7268/1036/2344 7263/1037/2343 7262/1034/2343 +f 7261/1033/2345 7271/1032/2346 7270/1031/2346 +f 7270/1031/2346 7262/1030/2345 7261/1033/2345 +f 7260/1037/2347 7269/1036/2348 7271/1035/2348 +f 7271/1035/2348 7261/1034/2347 7260/1037/2347 +f 7268/1031/2341 7265/1025/2334 7264/1024/2333 +f 7264/1024/2333 7269/1032/2342 7268/1031/2341 +f 7272/1035/2349 7273/1029/2350 7274/1028/2349 +f 7274/1028/2349 7275/1036/2336 7272/1035/2349 +f 7271/1032/2346 7267/1024/2337 7266/1025/2337 +f 7266/1025/2337 7270/1031/2346 7271/1032/2346 +f 7276/1036/2339 7277/1028/2339 7278/1029/2339 +f 7278/1029/2339 7279/1035/2339 7276/1036/2339 +f 7270/1038/2330 7272/1039/2330 7275/1040/2330 +f 7275/1040/2351 7268/1041/2351 7270/1038/2351 +f 7268/1031/2352 7275/1042/2352 7274/1043/2352 +f 7274/1043/2352 7265/1025/2352 7268/1031/2352 +f 7265/1041/2327 7274/1040/2327 7273/1039/2327 +f 7273/1039/2353 7266/1038/2353 7265/1041/2353 +f 7266/1025/2354 7273/1043/2354 7272/1042/2354 +f 7272/1042/2354 7270/1031/2354 7266/1025/2354 +f 7264/1024/2355 7277/1044/2355 7276/1045/2355 +f 7276/1045/2356 7269/1032/2356 7264/1024/2356 +f 7269/1040/2330 7276/1041/2330 7279/1038/2330 +f 7279/1038/2351 7271/1039/2351 7269/1040/2351 +f 7271/1032/2357 7279/1045/2357 7278/1044/2357 +f 7278/1044/2357 7267/1024/2357 7271/1032/2357 +f 7267/1039/2327 7278/1038/2327 7277/1041/2327 +f 7277/1041/2327 7264/1040/2327 7267/1039/2327 +f 7280/1046/2358 7281/1047/2359 7282/1048/2360 +f 7282/1048/2360 7283/1049/2361 7280/1046/2358 +f 7284/1050/2362 7280/1051/2362 7283/1052/2362 +f 7283/1052/2362 7285/1053/2362 7284/1050/2362 +f 7286/1054/2363 7287/1055/2364 7288/1056/2365 +f 7288/1056/2365 7289/1057/2366 7286/1054/2363 +f 7290/1058/2367 7282/1059/2367 7281/1060/2368 +f 7281/1060/2368 7291/1061/2368 7290/1058/2367 +f 7292/1055/2369 7293/1054/2370 7294/1057/2371 +f 7294/1057/2371 7295/1056/2372 7292/1055/2369 +f 7296/1062/36 7297/1063/36 7298/1064/36 +f 7298/1064/36 7299/1065/36 7296/1062/36 +f 7300/1066/37 7301/1067/37 7302/1068/37 +f 7302/1068/37 7303/1069/37 7300/1066/37 +f 7286/1070/2373 7289/1071/2373 7280/1051/2362 +f 7280/1051/2362 7284/1050/2362 7286/1070/2373 +f 7294/1072/2374 7293/1073/2374 7285/1053/2362 +f 7285/1053/2362 7283/1052/2362 7294/1072/2374 +f 7289/1057/2375 7288/1056/2375 7304/1074/2375 +f 7304/1074/2338 7305/1075/2338 7289/1057/2338 +f 7288/1071/2376 7281/1060/2376 7306/1076/2376 +f 7306/1076/2377 7304/1077/2377 7288/1071/2377 +f 7281/1078/2378 7280/1057/2378 7307/1079/2378 +f 7307/1079/2379 7306/1074/2379 7281/1078/2379 +f 7280/1051/2380 7289/1071/2380 7305/1080/2380 +f 7305/1080/2381 7307/1081/2381 7280/1051/2381 +f 7294/1072/2382 7283/1052/2382 7308/1082/2382 +f 7308/1082/2383 7309/1083/2383 7294/1072/2383 +f 7283/1057/2384 7282/1056/2384 7310/1084/2384 +f 7310/1084/2385 7308/1085/2385 7283/1057/2385 +f 7282/1059/2386 7295/1086/2386 7311/1087/2386 +f 7311/1087/2387 7310/1088/2387 7282/1059/2387 +f 7295/1056/2388 7294/1057/2388 7309/1079/2388 +f 7309/1079/2389 7311/1084/2389 7295/1056/2389 +f 7305/1075/2338 7304/1074/2338 7297/1089/2338 +f 7297/1089/2338 7296/1090/2338 7305/1075/2338 +f 7311/1084/2336 7309/1079/2336 7301/1090/2336 +f 7301/1090/2336 7300/1089/2336 7311/1084/2336 +f 7299/1065/36 7298/1064/36 7303/1069/36 +f 7303/1069/37 7302/1068/37 7299/1065/37 +f 7296/1091/2374 7299/1092/2374 7307/1081/2374 +f 7307/1081/2374 7305/1080/2374 7296/1091/2374 +f 7302/1093/2374 7301/1094/2374 7309/1083/2374 +f 7309/1083/2374 7308/1082/2374 7302/1093/2374 +f 7312/1095/2368 7313/1096/2368 7314/1097/2368 +f 7314/1097/2390 7315/1098/2390 7312/1095/2390 +f 7303/1093/2390 7298/1092/2390 7306/1076/2390 +f 7306/1076/2368 7310/1088/2368 7303/1093/2368 +f 7316/1095/2390 7317/1096/2390 7318/1097/2390 +f 7318/1097/2390 7319/1098/2390 7316/1095/2390 +f 7299/1092/2374 7302/1093/2374 7308/1082/2374 +f 7308/1082/2374 7307/1081/2374 7299/1092/2374 +f 7300/1066/37 7303/1069/37 7313/1099/37 +f 7313/1099/15 7312/1100/15 7300/1066/15 +f 7303/1089/2391 7310/1084/2391 7314/1101/2391 +f 7314/1101/2392 7313/1102/2392 7303/1089/2392 +f 7311/1084/2336 7300/1089/2336 7312/1102/2336 +f 7312/1102/2336 7315/1101/2336 7311/1084/2336 +f 7298/1064/15 7297/1063/15 7317/1103/15 +f 7317/1103/37 7316/1104/37 7298/1064/37 +f 7297/1089/2338 7304/1074/2338 7318/1105/2338 +f 7318/1105/2338 7317/1102/2338 7297/1089/2338 +f 7306/1074/2336 7298/1089/2336 7316/1102/2336 +f 7316/1102/2336 7319/1105/2336 7306/1074/2336 +f 7320/1106/2393 7321/1107/2393 7282/1056/2393 +f 7282/1056/2394 7290/1055/2394 7320/1106/2394 +f 7322/1107/2395 7323/1108/2395 7292/1055/2395 +f 7292/1055/2396 7295/1056/2396 7322/1107/2396 +f 7324/1106/2397 7325/1109/2397 7288/1056/2397 +f 7288/1056/2398 7287/1055/2398 7324/1106/2398 +f 7326/1109/2399 7327/1106/2399 7291/1055/2399 +f 7291/1055/2400 7281/1078/2400 7326/1109/2400 +f 7321/1110/2401 7322/1111/2401 7295/1112/2401 +f 7295/1112/2402 7282/1048/2402 7321/1110/2402 +f 7325/1113/2403 7326/1114/2403 7281/1047/2403 +f 7281/1047/2404 7288/1115/2404 7325/1113/2404 +f 7320/1097/2368 7323/1098/2368 7322/1095/2368 +f 7322/1095/2390 7321/1096/2390 7320/1097/2390 +f 7325/1096/2390 7324/1097/2390 7327/1098/2390 +f 7327/1098/2367 7326/1095/2367 7325/1096/2367 +f 7328/689/2405 7329/690/2406 7330/691/2407 +f 7330/691/2407 7331/692/2408 7328/689/2405 +f 7332/693/2409 7329/690/2410 7328/689/2411 +f 7328/689/2411 7333/694/2411 7332/693/2409 +f 7334/695/2412 7335/696/2413 7336/697/2414 +f 7336/697/2414 7337/698/2414 7334/695/2412 +f 7338/699/2415 7339/700/2416 7340/701/2417 +f 7340/701/2417 7341/702/2417 7338/699/2415 +f 7342/703/2418 7331/692/2419 7343/704/2420 +f 7343/704/2420 7344/705/2420 7342/703/2418 +f 7336/697/2421 7335/696/2422 7330/691/2407 +f 7330/691/2407 7329/690/2406 7336/697/2421 +f 7337/698/2423 7336/697/2423 7329/690/2410 +f 7329/690/2410 7332/706/2409 7337/698/2423 +f 7344/707/2424 7343/704/2424 7339/700/2416 +f 7339/700/2416 7338/699/2415 7344/707/2424 +f 7339/700/2425 7343/704/2426 7331/692/2408 +f 7331/692/2408 7330/691/2407 7339/700/2425 +f 7341/708/2427 7340/701/2427 7335/696/2413 +f 7335/696/2413 7334/695/2412 7341/708/2427 +f 7333/694/2428 7328/689/2428 7331/692/2419 +f 7331/692/2419 7342/703/2418 7333/694/2428 +f 7335/696/2422 7340/701/2429 7339/700/2425 +f 7339/700/2425 7330/691/2407 7335/696/2422 +f 7345/1014/2329 7346/1015/2329 7347/1016/2329 +f 7347/1016/2329 7348/1017/2329 7345/1014/2329 +f 7349/1018/2330 7350/1019/2330 7351/1020/2330 +f 7351/1020/2330 7352/1021/2330 7349/1018/2330 +f 7346/1022/2333 7345/1023/2333 7353/1024/2334 +f 7353/1024/2334 7354/1025/2356 7346/1022/2333 +f 7347/1026/2349 7346/1027/2349 7354/1028/2349 +f 7354/1028/2349 7355/1029/2350 7347/1026/2349 +f 7348/1023/2430 7347/1022/2430 7355/1025/2431 +f 7355/1025/2431 7356/1024/2432 7348/1023/2430 +f 7345/1027/2339 7348/1026/2339 7356/1029/2339 +f 7356/1029/2339 7353/1028/2339 7345/1027/2339 +f 7352/1030/2433 7357/1031/2341 7358/1032/2434 +f 7358/1032/2434 7349/1033/2433 7352/1030/2433 +f 7351/1034/2344 7359/1035/2343 7357/1036/2343 +f 7357/1036/2343 7352/1037/2344 7351/1034/2344 +f 7350/1033/2435 7360/1032/2346 7359/1031/2436 +f 7359/1031/2436 7351/1030/2435 7350/1033/2435 +f 7349/1037/2437 7358/1036/2348 7360/1035/2348 +f 7360/1035/2348 7350/1034/2437 7349/1037/2437 +f 7357/1031/2341 7354/1025/2356 7353/1024/2334 +f 7353/1024/2334 7358/1032/2434 7357/1031/2341 +f 7361/1035/2336 7362/1029/2350 7363/1028/2438 +f 7363/1028/2438 7364/1036/2438 7361/1035/2336 +f 7360/1032/2346 7356/1024/2432 7355/1025/2431 +f 7355/1025/2431 7359/1031/2436 7360/1032/2346 +f 7365/1036/2338 7366/1028/2338 7367/1029/2338 +f 7367/1029/2338 7368/1035/2339 7365/1036/2338 +f 7359/1038/2330 7361/1039/2330 7364/1040/2330 +f 7364/1040/2351 7357/1041/2351 7359/1038/2351 +f 7357/1031/2356 7364/1042/2356 7363/1043/2356 +f 7363/1043/2356 7354/1025/2356 7357/1031/2356 +f 7354/1041/2327 7363/1040/2327 7362/1039/2327 +f 7362/1039/2327 7355/1038/2327 7354/1041/2327 +f 7355/1025/2357 7362/1043/2357 7361/1042/2357 +f 7361/1042/2439 7359/1031/2439 7355/1025/2439 +f 7353/1024/2352 7366/1044/2352 7365/1045/2352 +f 7365/1045/2352 7358/1032/2352 7353/1024/2352 +f 7358/1040/2351 7365/1041/2351 7368/1038/2351 +f 7368/1038/2351 7360/1039/2351 7358/1040/2351 +f 7360/1032/2357 7368/1045/2357 7367/1044/2357 +f 7367/1044/2357 7356/1024/2357 7360/1032/2357 +f 7356/1039/2353 7367/1038/2353 7366/1041/2353 +f 7366/1041/2353 7353/1040/2353 7356/1039/2353 +f 7369/1014/2440 7370/1015/2440 7371/1016/2440 +f 7371/1016/2440 7372/1017/2440 7369/1014/2440 +f 7373/1018/2441 7374/1019/2441 7375/1020/2441 +f 7375/1020/2441 7376/1021/2441 7373/1018/2441 +f 7370/1022/2442 7369/1023/2442 7377/1024/2443 +f 7377/1024/2443 7378/1025/2443 7370/1022/2442 +f 7371/1026/2444 7370/1027/2444 7378/1028/2445 +f 7378/1028/2445 7379/1029/2445 7371/1026/2444 +f 7372/1023/2446 7371/1022/2446 7379/1025/2447 +f 7379/1025/2447 7380/1024/2446 7372/1023/2446 +f 7369/1027/2448 7372/1026/2448 7380/1029/2449 +f 7380/1029/2449 7377/1028/2450 7369/1027/2448 +f 7376/1030/2451 7381/1031/2452 7382/1032/2452 +f 7382/1032/2452 7373/1033/2451 7376/1030/2451 +f 7375/1034/2453 7383/1035/2454 7381/1036/2454 +f 7381/1036/2454 7376/1037/2453 7375/1034/2453 +f 7374/1033/2455 7384/1032/2456 7383/1031/2456 +f 7383/1031/2456 7375/1030/2455 7374/1033/2455 +f 7373/1037/2457 7382/1036/2458 7384/1035/2458 +f 7384/1035/2458 7374/1034/2457 7373/1037/2457 +f 7381/1031/2452 7378/1025/2443 7377/1024/2443 +f 7377/1024/2443 7382/1032/2452 7381/1031/2452 +f 7385/1035/2459 7386/1029/2460 7387/1028/2461 +f 7387/1028/2461 7388/1036/2462 7385/1035/2459 +f 7384/1032/2456 7380/1024/2446 7379/1025/2447 +f 7379/1025/2447 7383/1031/2456 7384/1032/2456 +f 7389/1036/2448 7390/1028/2463 7391/1029/2464 +f 7391/1029/2464 7392/1035/2465 7389/1036/2448 +f 7383/1038/2441 7385/1039/2441 7388/1040/2441 +f 7388/1040/2466 7381/1041/2466 7383/1038/2466 +f 7381/1031/2467 7388/1042/2467 7387/1043/2467 +f 7387/1043/2443 7378/1025/2443 7381/1031/2443 +f 7378/1041/2440 7387/1040/2440 7386/1039/2440 +f 7386/1039/2468 7379/1038/2468 7378/1041/2468 +f 7379/1025/2469 7386/1043/2469 7385/1042/2469 +f 7385/1042/2470 7383/1031/2470 7379/1025/2470 +f 7377/1024/2467 7390/1044/2467 7389/1045/2467 +f 7389/1045/2443 7382/1032/2443 7377/1024/2443 +f 7382/1040/2441 7389/1041/2441 7392/1038/2441 +f 7392/1038/2471 7384/1039/2471 7382/1040/2471 +f 7384/1032/2469 7392/1045/2469 7391/1044/2469 +f 7391/1044/2446 7380/1024/2446 7384/1032/2446 +f 7380/1039/2440 7391/1038/2440 7390/1041/2440 +f 7390/1041/2468 7377/1040/2468 7380/1039/2468 +f 7393/1046/2472 7394/1047/2473 7395/1048/2474 +f 7395/1048/2474 7396/1049/2475 7393/1046/2472 +f 7397/1050/2476 7393/1051/2476 7396/1052/2476 +f 7396/1052/2476 7398/1053/2476 7397/1050/2476 +f 7399/1054/2477 7400/1055/2478 7401/1056/2479 +f 7401/1056/2479 7402/1057/2480 7399/1054/2477 +f 7403/1058/2481 7395/1059/2481 7394/1060/2482 +f 7394/1060/2482 7404/1061/2482 7403/1058/2481 +f 7405/1055/2483 7406/1054/2484 7407/1057/2485 +f 7407/1057/2485 7408/1056/2486 7405/1055/2483 +f 7409/1062/36 7410/1063/36 7411/1064/36 +f 7411/1064/36 7412/1065/36 7409/1062/36 +f 7413/1066/36 7414/1067/36 7415/1068/36 +f 7415/1068/36 7416/1069/36 7413/1066/36 +f 7399/1070/2476 7402/1071/2476 7393/1051/2476 +f 7393/1051/2476 7397/1050/2476 7399/1070/2476 +f 7407/1072/2476 7406/1073/2476 7398/1053/2476 +f 7398/1053/2476 7396/1052/2476 7407/1072/2476 +f 7402/1057/2487 7401/1056/2487 7417/1074/2487 +f 7417/1074/2448 7418/1075/2448 7402/1057/2448 +f 7401/1071/2488 7394/1060/2488 7419/1076/2488 +f 7419/1076/2489 7417/1077/2489 7401/1071/2489 +f 7394/1078/2490 7393/1057/2490 7420/1079/2490 +f 7420/1079/2491 7419/1074/2491 7394/1078/2491 +f 7393/1051/2492 7402/1071/2492 7418/1080/2492 +f 7418/1080/2493 7420/1081/2493 7393/1051/2493 +f 7407/1072/2494 7396/1052/2494 7421/1082/2494 +f 7421/1082/2495 7422/1083/2495 7407/1072/2495 +f 7396/1057/2496 7395/1056/2496 7423/1084/2496 +f 7423/1084/2497 7421/1085/2497 7396/1057/2497 +f 7395/1059/2498 7408/1086/2498 7424/1087/2498 +f 7424/1087/2499 7423/1088/2499 7395/1059/2499 +f 7408/1056/2500 7407/1057/2500 7422/1079/2500 +f 7422/1079/2501 7424/1084/2501 7408/1056/2501 +f 7418/1075/2449 7417/1074/2449 7410/1089/2449 +f 7410/1089/2449 7409/1090/2449 7418/1075/2449 +f 7424/1084/2502 7422/1079/2502 7414/1090/2502 +f 7414/1090/2502 7413/1089/2502 7424/1084/2502 +f 7412/1065/15 7411/1064/15 7416/1069/15 +f 7416/1069/15 7415/1068/15 7412/1065/15 +f 7409/1091/2476 7412/1092/2476 7420/1081/2476 +f 7420/1081/2476 7418/1080/2476 7409/1091/2476 +f 7415/1093/2476 7414/1094/2476 7422/1083/2476 +f 7422/1083/2476 7421/1082/2476 7415/1093/2476 +f 7425/1095/2482 7426/1096/2482 7427/1097/2482 +f 7427/1097/2482 7428/1098/2482 7425/1095/2482 +f 7416/1093/2482 7411/1092/2482 7419/1076/2482 +f 7419/1076/2482 7423/1088/2482 7416/1093/2482 +f 7429/1095/2482 7430/1096/2482 7431/1097/2482 +f 7431/1097/2482 7432/1098/2482 7429/1095/2482 +f 7412/1092/2476 7415/1093/2476 7421/1082/2476 +f 7421/1082/2476 7420/1081/2476 7412/1092/2476 +f 7413/1066/36 7416/1069/36 7426/1099/36 +f 7426/1099/15 7425/1100/15 7413/1066/15 +f 7416/1089/2503 7423/1084/2503 7427/1101/2503 +f 7427/1101/2504 7426/1102/2504 7416/1089/2504 +f 7424/1084/2444 7413/1089/2444 7425/1102/2444 +f 7425/1102/2444 7428/1101/2444 7424/1084/2444 +f 7411/1064/36 7410/1063/36 7430/1103/36 +f 7430/1103/36 7429/1104/36 7411/1064/36 +f 7410/1089/2450 7417/1074/2450 7431/1105/2450 +f 7431/1105/2450 7430/1102/2450 7410/1089/2450 +f 7419/1074/2444 7411/1089/2444 7429/1102/2444 +f 7429/1102/2444 7432/1105/2444 7419/1074/2444 +f 7433/1106/2505 7434/1107/2505 7395/1056/2505 +f 7395/1056/2506 7403/1055/2506 7433/1106/2506 +f 7435/1107/2507 7436/1108/2507 7405/1055/2507 +f 7405/1055/2508 7408/1056/2508 7435/1107/2508 +f 7437/1106/2509 7438/1109/2509 7401/1056/2509 +f 7401/1056/2510 7400/1055/2510 7437/1106/2510 +f 7439/1109/2511 7440/1106/2511 7404/1055/2511 +f 7404/1055/2512 7394/1078/2512 7439/1109/2512 +f 7434/1110/2513 7435/1111/2513 7408/1112/2513 +f 7408/1112/2514 7395/1048/2514 7434/1110/2514 +f 7438/1113/2515 7439/1114/2515 7394/1047/2515 +f 7394/1047/2516 7401/1115/2516 7438/1113/2516 +f 7433/1097/2517 7436/1098/2517 7435/1095/2517 +f 7435/1095/2517 7434/1096/2517 7433/1097/2517 +f 7438/1096/2518 7437/1097/2518 7440/1098/2518 +f 7440/1098/2519 7439/1095/2519 7438/1096/2519 +f 7441/689/2520 7442/690/2521 7443/691/2522 +f 7443/691/2522 7444/692/2523 7441/689/2520 +f 7445/693/2524 7442/690/2525 7441/689/2526 +f 7441/689/2526 7446/694/2526 7445/693/2524 +f 7447/695/2527 7448/696/2528 7449/697/2529 +f 7449/697/2529 7450/698/2529 7447/695/2527 +f 7451/699/2530 7452/700/2530 7453/701/2531 +f 7453/701/2531 7454/702/2531 7451/699/2530 +f 7455/703/2532 7444/692/2533 7456/704/2534 +f 7456/704/2534 7457/705/2534 7455/703/2532 +f 7449/697/2535 7448/696/2536 7443/691/2522 +f 7443/691/2522 7442/690/2521 7449/697/2535 +f 7450/698/2537 7449/697/2537 7442/690/2525 +f 7442/690/2525 7445/706/2524 7450/698/2537 +f 7457/707/2538 7456/704/2538 7452/700/2530 +f 7452/700/2530 7451/699/2530 7457/707/2538 +f 7452/700/2539 7456/704/2540 7444/692/2523 +f 7444/692/2523 7443/691/2522 7452/700/2539 +f 7454/708/2541 7453/701/2541 7448/696/2528 +f 7448/696/2528 7447/695/2527 7454/708/2541 +f 7446/694/2542 7441/689/2542 7444/692/2533 +f 7444/692/2533 7455/703/2532 7446/694/2542 +f 7448/696/2536 7453/701/2543 7452/700/2539 +f 7452/700/2539 7443/691/2522 7448/696/2536 +f 7458/1014/2440 7459/1015/2440 7460/1016/2440 +f 7460/1016/2440 7461/1017/2468 7458/1014/2440 +f 7462/1018/2471 7463/1019/2471 7464/1020/2471 +f 7464/1020/2471 7465/1021/2441 7462/1018/2471 +f 7459/1022/2442 7458/1023/2442 7466/1024/2442 +f 7466/1024/2442 7467/1025/2544 7459/1022/2442 +f 7460/1026/2461 7459/1027/2461 7467/1028/2461 +f 7467/1028/2461 7468/1029/2461 7460/1026/2461 +f 7461/1023/2446 7460/1022/2447 7468/1025/2469 +f 7468/1025/2469 7469/1024/2469 7461/1023/2446 +f 7458/1027/2450 7461/1026/2545 7469/1029/2448 +f 7469/1029/2448 7466/1028/2448 7458/1027/2450 +f 7465/1030/2451 7470/1031/2546 7471/1032/2452 +f 7471/1032/2452 7462/1033/2451 7465/1030/2451 +f 7464/1034/2547 7472/1035/2453 7470/1036/2453 +f 7470/1036/2453 7465/1037/2547 7464/1034/2547 +f 7463/1033/2455 7473/1032/2548 7472/1031/2548 +f 7472/1031/2548 7464/1030/2455 7463/1033/2455 +f 7462/1037/2549 7471/1036/2549 7473/1035/2549 +f 7473/1035/2549 7463/1034/2549 7462/1037/2549 +f 7470/1031/2546 7467/1025/2544 7466/1024/2442 +f 7466/1024/2442 7471/1032/2452 7470/1031/2546 +f 7474/1035/2550 7475/1029/2551 7476/1028/2459 +f 7476/1028/2459 7477/1036/2552 7474/1035/2550 +f 7473/1032/2548 7469/1024/2469 7468/1025/2469 +f 7468/1025/2469 7472/1031/2548 7473/1032/2548 +f 7478/1036/2448 7479/1028/2553 7480/1029/2449 +f 7480/1029/2449 7481/1035/2449 7478/1036/2448 +f 7472/1038/2471 7474/1039/2471 7477/1040/2471 +f 7477/1040/2441 7470/1041/2441 7472/1038/2441 +f 7470/1031/2443 7477/1042/2443 7476/1043/2443 +f 7476/1043/2467 7467/1025/2467 7470/1031/2467 +f 7467/1041/2468 7476/1040/2468 7475/1039/2468 +f 7475/1039/2440 7468/1038/2440 7467/1041/2440 +f 7468/1025/2446 7475/1043/2446 7474/1042/2446 +f 7474/1042/2469 7472/1031/2469 7468/1025/2469 +f 7466/1024/2554 7479/1044/2554 7478/1045/2554 +f 7478/1045/2554 7471/1032/2554 7466/1024/2554 +f 7471/1040/2471 7478/1041/2471 7481/1038/2471 +f 7481/1038/2441 7473/1039/2441 7471/1040/2441 +f 7473/1032/2470 7481/1045/2470 7480/1044/2470 +f 7480/1044/2469 7469/1024/2469 7473/1032/2469 +f 7469/1039/2468 7480/1038/2468 7479/1041/2468 +f 7479/1041/2440 7466/1040/2440 7469/1039/2440 +# 11084 faces + +‰PNG + + IHDRHÃÛ± cHRMz%€ƒùÿ€èRX:—o×ZPLTE  ( ( 170  / " ;"9#)'%./0.010.+0/031.975;?@=ABGRH)H*M0 L3T& X,T3 [;J4$A=:[<"V>1d& m,e< a>s+ s-~0{1`?!@?@KI^C ^@NM DA=WG$WF6YX&\P°|=€^E†fH†jW‹qM‡tW‘mAnRœvC˜wWma‡tg‚|v“{d¦{C¡|Y±~B£}`Æs‡„<–€.›8¶ž¡…/®’&°…*½‹<±—%ŽŒ@‘A›‚[—•Eˆ‚{™†h™Šu‘v¬G©†U I·‡I·ŒS¸–Kº‘Y¬†g§Œv¬‘h§–x²‹l¶Žp¶–g»”t§¤L®«P»£B±¬Q¶³T»¡yÅ…*À‹:Ç›)ɨ)ƪ7ÂŽLÀŽPÅ‘MÇ•TÓ˜OÓœUÅ›cØxèHƧWØ¡XÊ¢jŧyÕ¦fÒ¬vÙ±vâ§ZŒ‡‘Œ…˜”Œ———§˜†¥›•¸š†¯¤‡«¡š¹¦…¶¦–¿°§§§´«§º²©ºººÄ‚Å©†Ê«–ʲŠË·”Я‚Ó·ŠÒ¼–À­ É¶¦Ã½·ÓºªÓ¾±ÙÚÊÀ®ÈÁ¼ÚÈ¢ØÅ¹àÀâÈœá̤åÒªæÖ±íá½òá¸ÈÈÈ×ÌÅØÑÍ×××àÏÅâÔËäÛÕèáÝáááðëèýýýæê¾ntRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿS÷% pHYs  ÒÝ~ütEXtSoftwarepaint.net 4.0.19ÔÖ²dûYIDATx^ÌýÍŽG¶¥‹ —¬F!DÄE’•u2§q„lé Hl`C"Ÿ¥ôÂ}!é$ª—…ìßÎn ¹ºÕ½ß7Æ4w_Á D†°ïôåæö;ÍÜlŽiÓÌ}­õèöê7ŽË——\//./o¯p «Ë+b®nIIðêêtqqu•0™.nãÓ{u©¿KeKü_’gOŸ,ÈØþ‹Ë‹3[ký~. ËË'ÍwûâêÖSRoŸPê¢M†|ä:%J“á–6s—W)³‰ÍÍy×[ØÚ7:##¤³ÅÛ¤ô“~òäÉÙÙÙU[a«.žè"Cóÿúþ÷Л7ox󃟷?rùñŽ$ÌõíoøáÇŸ~üá'η?âK4©dý‰°þÆGIÄ’ï"HùégĽ}Ké·?Áã§Lÿé§·0…0|ÌfB›‹z ½µf\=Éa,ôæZýzšÿzü»èìì\züçâ)Çù…œ³Çg1ËÓ‰¡‹§× ]_?5Ÿ¸>Êçñ'æüÔ8dæý¤DéöúÁt¡ƒ<"“´Oé‘`üÕãJ Út+¬ +½4 + ºm0"‰±D–Â$½ØÀ" <;Li3 +àê•&¿PåJMWW…³‰&›î‹{üeN ·j½F-¤UyaŒÌCä+÷má†.P©ˆ"eh|îþ ‰v3M·ºm@2¶9ã>”¾ÿîwo‚~ü ] +à'£TUB¤ß€Âz»+ÒÜo~$I”R¦ +àg€ð}ûÓÏ`þíÏä“û@­©GN(€ŸU?‡Õ®R{ +[Á›·ß¿ùþ5çCàøÁô‰èþäü€øï øé§*€ ÄŸãèÐ5y7BL–ðzô¨ð)ìäMôCÀôÂVODkôA½‹ÐSÛ'dÖd·¨à?(€ÛçWŽX/ƨÐ!È̵Lû Ü-²!ãÍj@¨Ÿ’¦åÆ€v }£`ÊçÄH­@ŒIÞù\>´ÈcàjmÇýÀ²vר_³kñ©½çnPvâ£Ì Öíaº=€ºH53Euª”’÷ÁŸïxþØãû·› ÐLµËÀ~'€Ä­ ¸ +æµ~Ж{ÇÀ»[oÿÿÔpv?ûäüqÀÓO?Ÿ œXO ÆHÐg>¿c\~C®dñòÉf$2%£N€ïᔂà9qrùP÷¹Ô8*€Ìš¿F—€ßËÁ¡L–ˆ²^,&Ve’s&^=hý)ØÒDjWcœê‡U´)̨ﱜmͧJz±Ò©íð¤ Y ù˜HlÙ$h¬.¢`þ"kÓWjÚ¿…«Jao™û,€x4µèö÷[j†Æ<”€ñéK€£Åˆw›À­ðÎ`,¯pÿé§ÿ· ŽÐ V¨¿cÜYìÀADuذäpœÓ?î(’JA¾ ÅùÔ9=*KþBFœ±(X +@ÀÉþ¿$¼èsÖ +QŸ:¹ƒþG(€GYl=s<ûBþ"àçhð>=°æÿÍð¬3k€€_b  ùþ+‡†¾Æ1BÜy1˜‹µ"ØÁ‘A°&^¦Á™²ÔÙ[úý{bÃ,CY´-=4‰[¹@iWæÿeHw,€4Ko-â›4•hȼK€Þ)$‹­°µoX×PçØ®Ü“±QÖuÇ/Z»˜™UÎ|~Ïy˜Ð?þxÛé_¾ji‹D¡×ð¶ø‘%@’GˆU‚w,–æD/È6µpǸ£ðõÆû@4Nš†5Âdt ðŸhdà²]¬v¦k­y=ÌÓh<½!Å’*€ZÎÿ? S¢€ûã³O2ó¯ëÙÙy@ßipÆ—ªæAŒ q«È•§oU!I[{Ù$î{Bÿ`˜ÃXè?y Ä +XºôÏ + ¦psSðüi¬„‹(Ô@ \8ëoôù¿%Ÿ—µˆ€~0î±;ÎüÛ50-°Íÿ ýè/º³PòºÀоù¿ŽÀ]áFP…‚Þà Ú÷^¼ Ù‰5è7ÎsßgÜŠM +Ýc˜Ð ŸƒèS)é^¸Kw÷Èl§{;ØT?QIèåÄ …Wj=qR¸ + öÑ’¤‡ŸIcXÛþ ­PÉAóY)xrûøóÿ‰%Àq¤ÅÓân +pÿÑc[øDüä2@­1ÀÛŸ£ÞµŒËEfï±h™ÙÌHž.ŽsúÇå`ûî€u¦ðh€ZŸÎc@§÷Q1Äúq`èúº{ÿ¥À'‡§²å‚Å­ÁìòUú¢ü¸ÐÏJ ü™ÿõ&hêoXG +’rè )lnŸA†ˆ¿½úK²Î3w<æB0·÷n;×o˜ 1½ël›xK…6ðºËrúhˆ7ób¸0c[ܹÝÔµP&pëGÃ*™BsÙ,€˜'{¢wÓEðß°ž%€m2ÒXœ<˜HäŒÞíÝ4ÔŽPAd›À«#òóÉïz +°[â @To€ +á®`*IïÛøM à¾%@HÆïß ¹ÿs-€Ù,VrÞ=̃}€(é`÷>¿Îâß¶  +Øöà Áú?¦À™ûAzœíô2!p>¡ÒÁï½{^ïS!$Z™VVãS¦6.Î”Õ Jµé/¢¤LKõB÷YFàcmñ® @&»Y ÁýdÀÀåŽÐôÔ ½o`,€PòàJ¬J­Úd¯Úz&›ÅU@-ìΤ]µÐ¨6-`NzØÞ¯þj–µÈ®2gP´b.èäüNaüpêcÀû,€Û0Io +àž§†ïZ¤}Ï{ä @-‚&{Q71‹ÿçY™˜­`uN×@hœ¹¾ÏÀ¤-€Ú–÷ìä=já3Ê Sþ€¡Qj:¥oÔÀ†|<õÇMÙ:=²³è½ + ¤Dï l^ €š½•jЄEv®'GÑdîÒ5±FW@[aó'7º;Ð$t\¨U,Ë­˜–" —,BÚ)8A¨ú‰S•°Ìhó¼¸8Ãu à$ƒùkÈbSJ©FR‚¹Ú¤‹Ë3ºKü£vŸ Å­w+;ßÌG'£òPúîw‘Àh\Ñ@Å™“õÜ·NôĉËÂÖ½}ÕÂz~ü ¬þœÓ‚O ËU.™º¹ºÊ0å¿1&éGuDBx]SüðÖRA>•¤Q(«·oÞ¼9Ú0øÀîÁTp3gª8K€¾ÀåÂmÿnºèO‚tgà:–>Ó–ð¨{Z°ÐðÇÞÈfÀ6‰#. Êœ#<½žlnjÚ +¿o`ƒÈ{)âÍd%txý‚Þζ¥\³è5ÍÙ39›}Â&1eÅ…T8‰¥ä©K€P ©NgÚáPÓV›l" qgÙÃm&ýnÌ3>•TÞêyQ `QüÞCuÕ³rå˜"-’ÊÔÉUÅd§Ûé|MÓ÷Û,³d€:£Aòé{ /¬ŠQ/bRÜŠN@º /Bñúf +‡7º”³¢±VÈ3tÀëï¾{ýÀã»×y6Ÿc@ýq §NüÙè§ú2éWè;Zy€6‰Áµà ;‹0ÓíÚßKLQ®$Ešú@±1´è$€P­‡q·ìŠL§žEœª Hç}4ÂNVý€¤Ð,HBB›P)ß)@5ç +¼úKJXɮϥ†‹:ÈÉt¡X$Df6m›Ò†ÖTÂÓ}‰¡Í½p Ъãz¢T¾žLÐÜ\ôz£è.ó„6¹Ò¦šfµ›èdª={‚fi/;Ý ÐÄ«)\/“¡ò©çWý~Î^ÿz‰ +`úwþgÒa•“ntB *Zó¸Ð½85OàÙ‰ÚNÜ?¸Ê× + ‡z!©Õõº^ a¬pnIBFsj7XZ¢¼|Œzcë0¾óæõëW§àõüâÓÑEö‘àŽÕîl €Åö $xÈcôµOûw àßþOª{Ž{]úûËÿs¥Ç±^gÜ‘…qÅy“îÐȉïÛPѼK$$°ÐøŠÁ®Î˜ïº÷}B¾C0:'©ú[“OJ˜µ{ê“CŠó¦û} j"<8drm`©ÕC·´I}²)%¿Ý®mC‰koèÖÄ[77'Eª_ €KÛS¥”ð¼ˆÍ´ña.EØÅé~µ€Yð{6±<Èð<œF¬F¯_±`G HE^ è ç’¹$­ç¨§òdê¹d×u"ð;ù17T-‰“‡Œ0ÜÌÆ#ë +y¸ƒ”òðyûÆ}Ë7ß¿|ùêaÇ«—/¤:`Ó¨€Ñò_¥Ù̵´ý3cû`ÛP,öüãm + ý“±0‰yÁ €:`õŸ–)?zÍxíIŽvR΢©¹àæ¬s(U„*›9ûjÌšÀ,ÙŠ#ø-p‹xß-(½pö\O £›=€qB®·½ÊKØ•'UÄlN­(-E« €”i“HN›®‚B<5ì dT»HTãIˆbÐSÌ—é*QMV +ÐŽudªìU»›¡àd$ÒäÇc+…ÿ{èÛßC¯^}ÿ&µàwßÏO/Λ7Yˆjêc|ð›i:æAr:á¿}ó3%\$³&PŽ%ƒ¬Ùº @EÖ§Ò!ÒÄ©‹r|>ðóÛXîüðæ{‹ÐXò˜;ÐyÎÊÅ?Èb ÿiõ@Ãú{(àt nÌJ¢G¿0®+E¸75´ËÔÁÈ¥ø/ösÕß¼NÔÀ~¸l%-;¨c.*€Óù?þ¼D´fÛUTDF÷ØÕË(B¨ ÒÝ,¡ƒõzù{èÕË< +|óö;7€&v&gQŒIzø «¸à&+1naû6›‚"ÕÌäQc¨84úñs²Ð×.°|ÚýÃ&/äNÀÖ¤5`yB‚ÿ;7-¿ÇeíòprÂÚ7Ä‘A5Áâý.¶¸‚¶{ö¹’àÚ å…ßø ª Jxçe*«Â€]ðoܧè”X6aZ‚¼êËT®¿Ñ‹NC#U´ÓËVl`¯h= +ò«p–˜PH3[{›B.d åß‹r­Jb-‹Š¤GLD§\¯Ù¹72¼æše¼É¢ Á€H¢œl±¹¨Ìj½‹65Óp3™dcl“¹N@€mÑ6Ƈ)¹J©%±Mø!ƒU á“uKIDxŠ;×ù? + =“®g ˆGÚ+">.®ÜPp¼û9Æßë÷˜¹üaôòe–ÀÊ-ö¢?K± òð½÷…iprÿÖ™¼° ЋT±NB­~ÑD•”°‰F'Ö ?™‰zªþjŸ$«“¨ß +ê{ü,oœÇÌ¡A¾HÿtŽÝ$XgOɱïœ}GäE€§×O¯¯É̯Ÿ=ÿ\º¾ùüææúZç÷:/\ø­ÀVjE/éÔoÅÓ÷—ˆ·£1¹" +ˆ_b&¨M·íäòêéE^ÿ@*‡ñd1 7 zû8zÝì…ªƒhD©` +Ÿm:- ¾&”+º©¯kgSÒ¤´IgWb¤(¥)+¥ áùÂ÷Ú¢c»Èlì(€•2zÃ8;C¶a®v¤’įAéåj:=@ÍH0B\U]½ÁË'‰×y(X?”^½fJýþû1ʃH°†&u:¢OÀþè/Gq肬ª UC&}1þæ'â¿W˜²j •lQ*‹WNC‚¾Ðÿñ{×ýf1lêßÇ“š©éí÷o~ð Þ¼þîõËQ`¡"_›=(ó#̈ +òŠaKÞ€^ø­=ú}–ì‹Ô‹ë€¿~zóüù³gÔO¯Ÿzöìóç77ÏHå耛ÏÑ77y10ðG?|þüÙµö‚ü8ê ‚Ök p ÐïR¢÷´ÔK±§`©€ÙLD1?ðÁOÕ^/.zíÄgQk(S^|‘Dè0]žR µ@–¬’hˬ-+ÏYè¬]ôÔÈGEÕ¦Q5J¦%B¦ZLâ+µÙ~ò½åå+ÃìlFA(“EVœ®B&ª8o½íØjŸîë¨ÎKÞø ãjœ`øü'JàÝÏžP:øåzüòÛ‡ß~ûÝëW*!Ÿ—l›«ØùA¨æ{ÂÂÝ)µ øµkç«6F¨6ZÂ’ߣœÞ)ð óè®ÁO?ª;FQÈc²TÕÄ¿¡†zÕê™°-9ágúî'@¼÷[Ä.ȈÄVF×Ený +ŒOÖFpUIß<ÉßàåÅyŒaeŸX@õ ÚH„¤°¸”RD.“œ“Ë.Šõ)-cSà `"Ûï#—¥LZ½:!€¹”´MùÖR"Âd2ø&à;”¸Õ¤d^a:Ôhɾ¤{½ª|ÿŸ€=¯Ä@A~Á£Gêàh¦'£~ƒ|Î|rl¿k ðêµÆ¾{]ø¿Å¼/€Ý´B#_­€á#ž‰Ø‰Z@—àƒ|YD È ³=Ðæ¨É"AB>€OIò³ÞoþïŒp£@cÃŒÑ$~€<^+üß¿ùþõwß½zõj°ü +ª‹ìôÌóÑõç3iͰ,ÇÃ5@ð©5¿€tãà©Ó; +@ücÜ ø‡9Ç +›ç®û¯]¸!zàŠ­¡ž!ƒ«OŒë#ü c/‘v%o#“CŠdb¢ÄötnRî*²ÐåÅ£ÛëÀC=Z Ç­Òë ^)kÎH~(¨ŒgSsذ‰@‚'ðYV¿®“_QeîâÜeXÅi­>OëVÖ=´)‡N šµ$þšÒF©Œ­.@Û¤R[$í6>G<ãXER-™<Ê(и Dœ´-ùÓùu·¢’×¢ï³6|oŸÞåŒ`?˜¢8œÁY@ÎøNï@Þ5¸øs~àTxÌ”Ùÿíw¾¨(“S +¤»n(KôeἯ +Ûhƒ0´‰†Õ¨®Vžò2ùž–¢±^¿ü}æèÚ¿xïŠàÓ(`íFŸª‰ª‹Æøc€@‡’œÀðó¹Ôé + À‹˜˜M¸üÏåK7™òC‚qÁêÿsñÿ\ @a&.Ÿs·ž¨Ô•/çBå'âE B”ÕL÷@à¹\ÇR¢ðR àúÖ€OÇg9p‹ Cb¸ÉFI¡!ἦuNº­¡2šGd«cP~×Þræ´–A1dKÕA—·»Xô¶õ%ŸõžZ7×3wÓ\ÆõÆmUÛ”Z½Ò¦y!À{¶\Š$Ÿ ÓB]-¤Wé긲Û4p®-šlæÂu¤ C…6@]@Ê›¢Ë‰;‚ý0úöÛàÿûà߀7¯“»ÀyAº˜Ý`ÿöíëÌÕ8~— pÁ{u@rW!Ħpý@ÉýA_ÒÌ '/j +W÷æ°xS! ¼¶ÃVøÅÅïYdÀv?”:ÛïÎ+ ,ó;¡ >YFMäjñ¿à¯ÐÐ0à˜\5À Ó¹›€_©:A^ìÇx¦’ €ÏçUMûÒýçÿ€'PöI ð€:PübÓr*‹Ê¾@$IÑ!¡3±æM!ƒbí –Huþ¿$RPNêåí…¯ô†HÎż *ô 9”Ä+‰:¥pVÙàð¹•W^n¥à€ü6)¥×T˜´hA{ÚO£=tr-’F_¿|ù +à»×ß¾g£©Ÿ§ Ïi˜ˆ Õ)Ø©Xä{sÄðzh*ø-Vc;D$ZD£(‚×CN±íÃ-ÜÑ8͘éÅ’<±ûióÛËß}÷J0­Íl_¤í9±ãÞkæMÁò³k€±øã`¸3õÇ„w<tCøüÒÿ•¥ªâó矫 8{Ÿ ´ ~Ð9ñûEyÅP¹S0•Ó(ƒˆÝ!®e-@(")~ðY‘Q.’âäÊ\8Ë?y`>ÖN~¾|{ûWt‘y)ÕASOÖü²(x¿ÝÞ´}ÖÉó‚ 8hØ)Øió ío“=Õa|ànmRcÁþ‹ù™¡R¬„7Ê'uâ¹µ”áÆ¨C^ý¥‘(9ý~Yê¬nåi“²]h‡0Zd mj_ÇÝJM¶Ý ò±º¿8ÏõàNÔxëî9r™™íAô ˆRß½d>fó»AA[pk tö¼â1{râS¤¿%=hwUo€`kÀÉÿû×o¾÷ù‚©ÌôQ0y¨ï\å!/ùdÂ=jr[¢ ¾óîm’[/_½ze»HíÎ9‚ó®ø5ý'œ´8ë0 ã1je ¶ÿ hÆ“=Ál`3ä7bœœê· 2ÿÇP9,ôC™üÏn®Bš8‘ qÑF%¬DâfJ„ñäPUè'6 °Q˜#L‡ªÀO4À-Sš¨+ÎÉ¡q@D~$GÊï•–ØÏZ¿ñ–Îw‡/¯æ}”†Zx¥^P1Tãd÷0Yâs'ô[¿›g6ëTo–çŸIÈâ9eÓ Òá]!’ɾµÉP"ê袮0yP(þìAoÆ”…áÕ ªI{†¹¥FQA­3IfZ +¨úwŠNÿÂY0¯c!|Bë²G5ÒðååHöƒèÛ—¾!ï“ÀØî$òµÄô@fáè€ÌË( â3Ñt3R·S7ˉïÀQ[$A]b)\8‚݉^]‘$ÝDWaìÃ-á¤BªŽÊøÿöÕïØÅBÙÙ݃i½ïJªŠ¢®µÀnÌ‹­u'~-œë‹±.£âßI @U‘%€aµ„èçóÕóàÿ@}ð䜃ñÿNC‘¹ªÂ8"Yxã²^˜H²"Ф±O0¾ñ<2É«è)1ۊζN—`Ôsá~#å[Q=N®F ¦§¯X`s; @ØãûkÔŽi²‰î»y Á1Ì¡ÛyYX &B/¥°LæõÂPH»•¡…®ŸùY}ª²M©ÆA}ô +‘Ùcu¢2ië…4hkÀøô“jí1ÂVhdç„’PHÏYd7nb‰+©^ëüæÁTLhV‹{–×ÀMü‹»ïœ¹ùp¿¬g²ÿîûW"Ø™ÞiÚ  ìœñBy`]€7ÔÏÄÕ³‚+¡µÎk=@ß2©ú$àø÷µ@>`P¼æ‡÷ˆUhˆÅÌâ Ù%@q¸;ÑëÑzçjAÕ–»)Q Zª6f‹]c-MÒ÷õã1ÉÁðc£0õ£^M£¿ùæÛß|ÃÔž¹\«ß~qí#|BÝgg~#ríò€„;)¢?ÔM@fwŒ ¢ƒä}@zþüÏšùæ$ËMŸIü?ö% +Úð#RBœÄ´òUØäqóàíÀ¨d r Dö'Á̵Nc½„D–êS—ˆÕXŸ,¸–MœOÀ½.4¦¼¾Záe;¸#½¸RY鉹Sê5Æ3Î\½p’öYÈžÔ€VÄJ#<êS€ù†íƒ)‡^z­¾!]|ý@Ê2à[±å;AB¾}@N 7š†'‰„a•e„Kê|Ì%Km‡(+µø÷j ƒ*"™~‡âð’FøýÚ”Ç8_g óA$ìA¬a­ .КÏ„èdÐk>“EœÆÂA Jf}êv¿ÐÕ@ë]8Õ‹ôÐó?x!n´_L¶ 7 -€;{A|¶îÏ3¹dމÌáíu»„–ÐZª…qò@Õ$Ïoê†e=ëR >j” ¥€Ë(¿ȵÃ2qéfÚMb™m½&6 ÝpÐ8­c7@¾ƒ WæmÓ¡eð‰Û^ã¶qÛ¦ÚýMÑ×6á‹Rš¹¿—2?T1$gbÝ>ÌPÙÝNÿžÒÏ uæºü¥ D8¶âëot0+þÕ/_÷¨¾|)r¦:!˜º_,ë¢/€ï¨„”#¯Oâ™Á}ÑÐwwºq™ßƒgË-ÿkÕ YW(™h“m êo_9óûÀËßÿo¿ÉÁkPÛ€ª=‰y4P/ &œ”‹óùùž Ø×(ˆÈÃ{—7·Nû»àòþÏ;þ!&ysjÿßÇ€ +àòÔ`°ŸÛÂù í›$E"„á°ÙÃ¦ŽœB®#|€_ +Ã$èI`‹–½ `Tƒ¥ù*଒Z(?¬Çg!è…‹;3SÎ+§7Ø#¬Ê=´m&Lú‰´€Ïç¶\RûˆkZ»±°EÖqu›ýD<{›ôŰ‚YX ö怡C%054æ¶„ÊYûÈn}ryöx_¼« ˜·©}üõ.çà™ ÇŒ€„÷o_?äÀpJ}ùÍ+.>dsƒÍö9óâ]¢]&¸cè•$±žíOAŠÑOÈÔå²2ˆV0Q¨‹–±B*ù "_~÷êå÷"Y¡¨üþŸÏ,¾ý:.šë¡Ô9¿øÙîÄ/ÖÄ{’·Ã6@ˈ÷5pþ‚‡Û.Ìjn{í[>Y÷ u@¦úÑÿçWy aÐçû?äù2ø àІ#ÿzñþ_½GRVFeÔÈ—‹ÜÓ'”ÓÒ–j&>нÛós[,lYÇS‹ŽAí–%eò@‹Ê$XJ œ’`ÜLâÍ€¦2n1 gÕŽ°ŸXÊúaõ ±‰çRÝ–%@îoØÇ±úŸmJ¬(%­ž4‰#Ü’.‹^ªÎ 6©UÅàÓÚîàˆ\¨Â³S"MSGéˆw騫ÿ8úÆ…q k­³¯œmL‚¦ÊdЫ¥€WD›É('ò×êN ½ÃƇMæs\?š‚=ªrÊŸÌä†m|©!;h&ÒYüCX+/¿¡ÉßNëBAUS¨3?—-Ò˜^ò¹X2rÁ¶I¸Õ`þée!ŸçùX'@õ« ‚~èâš©?4Oð]~8O/R»F„q“‰J«h,Z64r‰¬À áìoö8ð\Ôðš +!WÃßM—K|kp§€ŠÔ¼ºšÝþpyz™w³õ¿¸ë,ÚÐÑåÚ=€Ø!C]?´ 4ëÐ3xT4b9¶I•áå`€xñ…‚Æ·Š6,û€‡š–¿Õh¸DÙ +”nöæ/[ªFx62΄d0Ïæ¼ÑØñrÀzk +~èÓâ7À*ûj1¯…®ÛlƒâÀ¿Ýeƒ‡~Ȭ ”Ø”á´Ñ-n:±LìÉ ?æòÉÙ˜nðËÇ#õ~G|4P%¥±‡FÿíÁT„Cª‡„êr7Òß\M{º=tófðü!±îä-ê/ö¥k|xÿ¼,‰µÁõSÌü,Æ@IÔøj +½?¾üW"V3@˸C»H‹¸¤°ÍÞ•ÖÍWÍò^Eÿ¦šDÉ*ð(áqR$ahq\x]KÓL²Â½ºÌ¿T̆zÒ»•ºÈ/ ìl\× Ò”>´I(’Õ[ÉukTœ@ +¹ @Ì ÿÁ*!"…Bt’®,÷¬ UAâüè8dA?€-ô,êìïlœ ý11ñB‡›•2LúhúÛ×|¾fJõ¥€o]Řà]´âŠLg_/8Åãlœë VãÇõë|Î:Þ¥Fsx©ã,ÏÔÞ7ø)ë+ +In¬>ŸoܸüÛ´ÿ$Vm@”w~È;*@•½kuÅX·'€Ë¾[Y)Œ @{, ÀåED¨Ô€ªM2[Á…ÆÀÔ=h3GÀ1¸Wh—.0ªÀïüÊßÐÆ/œøxF PÄÄF‡õ¬&DÛR‰ èv¬‰fäºn,2jžÝÝ-áÔO]ˆ°~îo6̵BÚSßíþFÙÂÔÝ¥‘flÁ­_n{ì85L«7‡=˜S‹m¡7:`dg1UÉ1èÞuÝ’JxgX*Àf]]ýíOyˆ~\ñïÎ:ØûZ ·^©"Ð,€ÁñD[°Øuã “±„Dp +S ~ù™ÎF4—ZÂH¹“äê䛯Å}âþÒ7_£·LÅñƒHT>ÝöÄ~ðW ÀÙ¿¦;pwÿr,J¸Á´þœ5w$¢v àùWy“PüÇÐq‡”®È°¢v¤+»Ìâ8Uh³'ƒÎVé ÐUƒû‘ݰev©8žp^œV[¼Ú¾&´D)P"QLaVo +€-€™m[$wIm²Sî»§`[5ìyà€žpà ­{Z¾Ö·-²Æ±¸˜pÒ·»Ê‹7š¸F·æ®MKxðOÕ€"0PÅgˆð ´OéÝ„-ÆÚïÂßÏùGÐgZÓLª3µâ€AMAžÎ×Ó1*¹šN¶n"šÑ‹!Q*¯”Ã'ªIsæÆ}iù`ØÉ㧉j Ðð§À·_¿$m± ÑTjÁÖ4ýí3çè!Q¨³“3üaÀÑë_‚Q5€ +‚l7Ïž%P àéíó;OTî +ø˜7Ûk_¡º°ç~°ÖŠœ3£CAÌUZ¾Èð,[i—ÅÅ )ºNQ~aŠÌæš”ªÀ©uø>¯obš’,™lÒ*Ø4˶´°ÔÊÕ7%f;ضOb6݃%À<íÛXäÄí{HüÔGú^ŒÐá’/%Cbâ”ålLÊÒæÐ[µ­èH¢<éÈùþ|ççþ=üÆd>/²u6ÏrQ{ZZÁM{¡4‹`×¹A_ÿIHå„Dí@_XƳHÐcüß_#6”¦”Ÿ¥¥ñ§ø6üߦoõé_ò„Ój™ú ýé³?}öpǾ‡ëš]g]W`‹Š +è·4ΧË Û³=`)°ŸÊ›/7üÿ™ó+L~5@Àßêy¾ö|D`±!T€C^Êœ˜±Ö£ z9%àî@(€î$+1 ++Ôß ¥>Õ‚²…l‡[²"Ú‰ZŒŠ„EF›PPœ’°÷šx¼™ôKÑ»l“±mÇXY=‡‰jÀÆÐµ¡ +±4mjgR nÍ0yÛ$"¸RyÛÔ83J)áÒp<³žuÛYbÝw4ô¢¯ R£÷Á‹Àl*ÀùƒÏì¢è幑’ÊÕÏÅÌtAN§àêoû,(+(Ûx¤Ba&D6-ÀÔKdvLüŒ'ZÂ_%"ƒõ•ƒŠh"—nX$O#Ì`q.Àšþú` :™ÿ ª NöæBi€s·pF2Ö`û Az²é—ç„“ BX+€ÍØ× +Uf?r—¯³ùC~C'HÊ. ™2yù=Ï"d(ØÙ@h*KuRYÙ·J(Å{ΖÊÙ½»¶4×$,^‹©-š¡4I©äï™a É#ÚD´èê +¿©r‘U–[!Ú\k3ƒ”šmòi~µÚdrÈÈöX!îúîÁRËŒ¥ãëô/ð(>3‰˜˜LLk zÏ¡v-½¸œ‰îéoŸ¹ð7ÀÚµ€8#ôâ+*Mᨠ#³uàÒ8ZÐ2§)‰úÛ×°ýœ†½ù,#ùGd˜–‡IÔ)Âe%ºª†¸¦à§ÝxèçÃÀøCÀ`®ñË ø÷5¡…ÿëÛ ÀŸ +?¼ô'0—YfüFß<½þò«, þܧʘè3ãÎÀAÝÇ>Þ‘µÕÇWAýBÿ±„ä¢@1>X;%Ãþ^WÀemg`@„Í ¯’o¾‘¸)1nJ5`I‹Ãu³¶ +™Ì˵ԉáO CÓ2a…QJ¹¤Ÿ UEÔ…hœ÷¨ŸdB³4,eB:Oú/”æØ È{/—¥ÍÇK²Î˜m´t@Å' €Ñ­höÞ—Cµd€| aMÏ”“¶0¶ £‹Å ð)na þ¥—&#3˜5Å’îD…1犗»˜ÿL'Fì[ígÑ æŒ)ÑjÊúÃgxàçZõ9–s7/—ÍÇfùMtðæŸE©Ë€,@þfô sIÏó?» xöeðŸŠéã&÷]~ܧ õ»0ñ+øþH× 5,ðˆq'`š‘»è;¦zYú`(%m JŠlm¯íÑßrû‚‹ ‚µ7dˆè·OhO’o/ÏÖ+;/ÈmLl‘65 ­J#š#ÍOÆRª°þiÓ¢DNÚˆi«Ò˜|‘&ñØRÝئè <™AJ6íCIu–Ƶc‡ôÚ\/í£@J€Xb8XÄ-ð¾6Á°ð÷_‹±˜$¿á0F ·¡œRf4Àfù{ÆHùPŠ6Kµ6mHŸmhs?Âc VÓ³¨Z$ 7ѧfÒ›:¢ÜiÜ@>IIî?ýI¬eÖñ&m™PÔÖÉh†@ß„°kA6¦Æ€åñ=€Ò‡‘K€ëÍ`ç!@ÖêhÀîäýìöš‘>¶À \bù_€0¯þ©n² /ï (Wô?íL y9Žú E®q"‚úD*)_¸Å >_"Þú"çï³$Aûâ/W_ü¿5h3›€Ãéo}aÛ«¯Ô˜Þn(&6×^ø£`Ö'?¿õGnïƒ(™ðÂq( ë‡,TEYÀf[ƒo뱄UÇ;žø>Ëñ…2'•Ø M¤^»ÏlÖfa³ÈÐ;°h~šD(ϵD¢7N]ǵTôNdFïæÞ˜ø¹ÿAí©Ø­~ÿ#$‰¿q¨«=4݇  +E± Z5·)¨>ˆŠË€Rióãwn‚.¿õ»˜w[ Kô”H\’œ£3‚¯a¨•?­¢ˆNÖd"Y³2Yµc¬¤ÉA+°0¦@rrþá³ÿŠ-ÿ@*–D>å{ú48FÜXcþÍì³ò—pöFäò +àâúÆ€Gíh~ ¥2bÄ%|wi‚ˆ©R<Qm$˜_˜áK@QØ:Q—~Ãþzû⯲3{žÁ !¤E“ÈÎŒ4™39ñD +ÔS\[àò‰ö;Y´ÂÕ+ÍËC~È\aÙÄùRFs'vñ0×îw;2q²4ÁnÆ‘ÜsåƒC  ^bA[t“ÁB'-¸ç°"ÕŠ‰b»¹Äk„…“TAåQ)–j?ûì¿>˜‚чÑ;Àùãþ‘o@] ß¾ œo™¿ï·®/ŽÀ³þ<˜ú@ @Aô?¥pôÀˆžE‘}….ãn8³:¡\#‹·_88+Y.¶«ñ½Xaz4ü(yï'“(ÿWgU|ðè+ub8µBÅqìð-®/žXY±Y +Øf!f‘›ÏŒ–ÎÝhX›…Αz˗ϲÌe‰yVÑðÁœ$hQ¡Ñ¢a™…ÙŒ ™NÎð1$c’"»-LujŽË«ì)à©C.êk-‡ëÉü€ø«X>NèÇ+¦£âOˆÂ–ïÀ÷riî{-€Üh*Ïçɯ­àX8†>~Ýxwñ/J£ÈëBÈ]^—èe&^WvÒÂFúÃs¢9Ä¿®dű/bcÌgìÚçÞ ‡šÄ*­éáK€ßkøç …¿6@¿È@?E7ýPVþ€àÏ}ûU€;{LòØ(€XÆú" IÏž9Obè<ͨÃîÔëœ'x@Rý‚Z¦Í™¶S?Q#>ZD*×’)u&ö/W kJv";¼‹àσâINU•EÉx Nm’a•œÉ0ûsÐÔO¥­IJ ½Ó_j4=±À‹éìKXÍtÅ%ÓØ‚b9¸Ma£Ú¦rUmÊŒC6“s¥æVùh7Åç Û´^1–ìˆØUA.­U, @ÈÿË؉<Óá˜1Ö!i¦Dá’â±8W¦¡ÃSü\FÞ?€‚¬…1Á&jðPÅød¯¬ +¢âdÀ «FAi‘ÔG 8ÁGc„ j'sŠ c¬ÉÌe¬–±`–&”ÖµÑcÏ<ý®=ÿýs-´ÖC€.u`œ?Ë7·îp8Ïè…º +àâúòh<Ÿ'8_nOà–ó8ÎCˆk$ùÌ4•+q醢øuîRz¸„Èc”W•Ì£d-O˜Šã»»™ï ®·Œ¸•’‰ix!Wj£e¦ âu‚°{[ %›kå§õñL-w«êönM]’,{ ËUo~ +t§ÑxaÑ6ù+½C#ÓWÍ"07Õ íEuCr˜A%x­>LLˆ¬¸`Þ¹ÚÜ™|`~°ø7ÕÙ¾ÇÌøVüÄüí¯ Q™ð·H¯Mäü_^<üD€Eçø 0rñ3è', 'B}tKF§ШoÈ“£åidq.óo’GКÉÂ){!O*–…æ©6z¸ø=À…Kû“=€¾$ü‹ÿdó5€ìlÿ<ó|¾ ìëézùÔÂ|_èK-€KW’ €ë ³N§!§C$öšá®QOlçUçI(‘$1½èÆ6BƒàDšd\#!›ÏX‘Üb î"˜y[gW’gÃmÀ–iU[˜ ‘™™ì„™¼(´¹b˜¬É·ô'hÎ}ÄüO¦«Û/ˆ©2´©»xd£¦¶©åw"”Jü„¸éÄfI€†Ë«ø§ÑdM²²¥Mi’mÊAÂíä8?ØfL.§kŒuû½»‹"31'"ûÿÌçÅ;s;n>ѽú0a³T{ÕúÒØøÌËE üü¢Õõ·s¸ ¡2§è&‰Ô SèJÞüÁt^è#sÊJËM1‚<þ¤ÔÔÝæKÌ"£“7mRGÅÐÈrãÁäòú¡' +àæé,îXÙœM çMÞ ÌùE¸W-€m€Øœ_’˜°LÜQø«C|*hâòEÀâÝÞãÃ’ŸD ñÅ:˜Éy‰(BVŠP)pÊßÙ¾ÞÜÄÀŽ*²on€r‚ÍÙv§d¼sÛ\CSüIÔS°á%È#›¹UE[‰ô 3@­/ÆÀ_¹Ô°yæ²E„dC‚úÃÕFȼÉSÍÐÈR,·5MÊŽH" ÆÕ“®íÞ«‚Ò?™TV­ñ±¨LìWqHÓÁK¸ñ°[Ú5è~˜û±X„Ç+ÛÍh>E± lOƒò_¥à*oö9k‘„"®ˆÿú›‚´ïé/ÇKÞÖß Ëy„rc&ë0…N³XŸ$Gç )ßÚ|±lwm$€ðÂùØÓiùLð/ `àŸ@4€#Þ-€ìt€7| ß—R=_jÀË‘¯R‘AÇó0Úc8F‚#—áÌaÎn*˜s…`¯l…Kñ¯œ¡Ξ¨¦ø)¡F¹Ìúš‚QYÖsñT)ifÛFC¶OÈ+guÖU$Öˆê€d°F2 הܢŽ«(š3m‚S&LÚd‰1zŸá¦R +Ó2xÇ3SêÔœ—[Ø„9.Wot^}ñGêÊ„½Q#qíx +Æ¡@>2ƒäôŸœý½@ô†£W†Öúñ«S(ë¾a57:”¦óY¥¥+gÎß (€™Yå˜ÈË:`áóìù\ý*ÏøÀ}¾¡;¡q&ÁH¡«rX‰áÕ,á«7y8q{I +M˜u@VÑC¶+W‹¡àLþ?cÖ0-7â>üš þ¸¨ +˜ß(Zý-?I€ýg{€¨~h³¶=€XÐXÙˆe€ƒ!]Î@×E³Sg( +¤£ 3q¥¬#•ÈHÓNÕ? .‡‘õð©_6a4`³þ'ÙpÛ-€)é‹=¥ .°ê³5y…c>8Éî¼Ê'¹KT¦è1€3’‹5¤h\(–‘ZF†wÚ¬’?D0¹¥\×IhŠš)‘)ë­ÛÒÆKU4ûÉ Ù„¨ +ÀnßtbHâFîßKh…軡“`­åûå^œg0m¬¡®²ùÕýľ|Ym G¹üb@J¨)¢6H«¦H ®˜¯·¹7ûµfú˜¨°€ûC¯ó9??,bTø P¤ýX7X¨ãóµÄx÷Ž@4Âî<ÿò«g1üá'ÖP’J’cÄD9ð¨¼( øbN$_{AÄI„â@ÕZ×ΖAR¤ˆ@fAÕ +ÂjäÿÉU'ñ¢ÆO(W{Œ¹-ÜÈ×ÈÒÚ_lʸÔ'Ø È¨Ån«Ë’Bt‘,€vâZ•ZmXM”m¢‹Œk%‹’:Ü£$’;,T[V=æ¥Ë!1îL>øÏô PL™ÿ¹ ©ß–ØX8- Céøm”fÑ®ÖjTî0Kå÷‚)OÜ_3ïæ"7Ìz0S‹éP&ûÜ +1“?èáÏzˆi H„“¡!Z€|ñþû“ù”«‰ÑFæš$9HY²Ø,”Ógÿõ¿þÁÏàúƒÉ˜UÅô2>èZ=pvv$ï±¢(|D˜ÝÞö=PάŸ³ +Püáé +@x—âÕøê¹øç”ßí¤@-ª@0ÄŠF̽ˆ¤ãK(•Z×;Š¡sj΄'¢KÁ–ªÂ*qz6Êã–ØÉ\œÙcÓÛk”á=ÅçWšÇo³·hB &"Åb•˜ P¤Ý“2§Y:Ô@s%o¯ãRC|MßHÿ\««kXÒ%&—u\‡ÀÙÚÎÕ; ðWDvªÇ3žœv쯒šÝ§—«ö±{!}m—>Î$Ù%¿± +þÁ¶ûUÅWà‚Y!NÜËh@.6¿õgúQb?”©]U x9Œ §”NüØË—7±É’bQ–6šÈ¿É.†­²}}зúBËTïüúaWæk®µŽon@7ÈlîÐ-vÀõ + ß +¸xz ÜŸ?»­çßþÏ ß®ðe~<&€ß+lcÞÃ) ?B`Œ33é~!}¦'99ÍZèÉÙó À \ȹ-(¸šE<ôäÌ«¡„'–0 +`«ÀFL(Sý–I”ÅßGw&÷Ì%Ÿ$\š¢œÞ\PXµMÞYxmœ½±Ð©8xɹr‡‡Wöš1F®Sò}z`³×$À¹Þ¹«c®“oø°–¦.‹O8ȤŒÆ7ýȼïðï@bG +JizÛ‘$C¡Ûúû(ËjW +Ü;ãfòå¸ë-~ý‘/Pl²àñßæ‡<É# ÅµiäV]„ÍËü™ž@[pWø»‚á¥âc+ûúkóî ¨:$¬””MÎÖåC 4/ àïµÎϘÎ×_e0ý} h¶”ØÉå¼? +¦ûÏo¸|ù¥@ŸBÎñ^ƒv@vµnP±""JJç D Ò¡'¸wàC(€•Jô{‰b~ð ôòÌoúê¶Ö$‡zI].ZéjŽY!Ÿ¹'Úi ‹ÍregœÝÄâ)8¿Ÿ2›úž¦uPýÉ%þ„U?âSH÷'=g–Çã{úãQ +`]Üæj€àü›—ùÙ_O’e¤/?üi¾~Ÿ§’Ôl ªAÒžê(ŸYºoñp¡ §zUàè×Û/e °Ëð8_ Bܸè/ òìôá€ð `’bœ_ý,–Xp(uÛÈ'a ƒ‘-B‘ØEÊ—“¸Ä¸ 0=Ð:É[@m¾¯¬¶õªd†o{´NÒ6Z™êªµ¬ÅÈiàÅÝÉ”—rSÊKŠrÂΰBôåq /[>µ„(åR({К$›0nœ>8ÛoìM–F„¿ü,ô‹tƒI¿‹°¬òùˆ|‘ÞéŠè¨ Ò!òΡ¯¡Ý÷„2d7«<ìT Aûø˜ÞÇt>ÐK]D'ïFª2Ë[`b/qái¼|'ºÏlS¾ìŸ(kMÚü¥RÚ” +Œî æÏÉsBÞˆµµêá4®k™ÄJ©eúOTOîÞ É`7F~<1ÜsFz¡z²(Ä-‘ߢ©d÷¡e(eߪ×Çð°¢– ½ó]ˆÛä–ñvýîÔàÊ€ØÞBÎúÂwÀ-Jïñ¸€'àOz'Ö4ó©4¢pÆî''áoò¯¤¨¸ÌÈL²'År~¨ॠŠïK b¸x(1“_:Mg®þkrjT0‡ß|ôø‡ft@°¿,†À}vÿüVP&X;¿{î úü—0–À I7Ï…‚5â¹ÎM\sÌ€{ER è5aÕ,AúŠ€dÛ¿¿¼îeóp…`ۺ˸5êA¾²Ã7•Aø¨<šä6¿´û…/Í¿yû.½ —†±×´ÎÝ•N)så·.S®5Mü1s…‚†ÍïÝåUh§>K†²ÐvfçÐW(“åêŮϬùVൠ¹Îà’Ó[ô EvOŒv²oüH¢{Ðïü?¾ehÀ/vš•À,¥j<œú ¥LüÃEUð›OHLznbB˜Éï^OšÕÝöc£À³;uóªƒ9րĄ="Û½¡ü먙¢.òwÚ œî úgŸQåêjAƨ‚Ô#úiB–6ÔÓ>l‹ux8½ +Ëq~õÊ‘ ¤&ð@ïü1Èù¼ L~7Å?Êc#&sÿ'Øÿþr€oúº?álpñ¿,—ÖÈY€{­Õî‘wÅ2}ñBf<ó¡‘î³t€<.9ÏG¨½FŠô'0…W‰¢Ψ¦ráú6pý Ÿ³yò?ò'ÉÉõ>ig(Ï÷äèM„±`³.Ð&Â(—fW5P6Eªàùœ~߉^ +Ç&ÑŒ¿Þ™LÿIª~‚p·6ɼÍRÅp“òOkÒ8óá³…~Íb +ÁÿõÍ/¬‘ƒ¢'¨½U D€c›<¶ý-ž‘°ëŸCíý©–ðž÷ô¥oâã\Àîó1 @÷øÝQB«Ó~‘ÁÌÿnÏÅÎðúsÐÝŸïê_¿$7ÍbÙ?{ ¸—(Üý°ü3PóÁ·û¯^i7ÀÇì!«!?Y§1êØÅ +Ö¿»€§…ì@¶P¿ÿºr6FüŸÃ(úÏjìàzpèæ’¢7»P%À@…â& ;¡â¿ïð©0I±ˆhu€}.úJ+×Ã41>h]¥D®ˆapò&`|û\í— :å•5M°#*Ï ±þêÃSlS(˜\”—i½É­'1)§ËÕ0l;Œ³`ü ®º"EZš& Äžœ5r)ËRê9#eå‹Fmšmв¢MVŽ.³Š´Ø»V/¥Õ6£ ¼ö'>®†ûX#´À®É^]0›NÐ#¡OÄŒ€\\•L¯õ9â°¢@-ÿdh€U›i£">MR{$Ò:?ÿ·ƒƒ&­MÿÌýÁ“® + F|ïl]» « |Ô«)`(ÀÖõßÄ:Ïû‡Âþï°¶¾%UšIŒuà\Ÿ´ªœ,t40Òu®i¯Ï-®ôzo§ô¾ë]zš]Øí¿cûkþ¯pb0™ûв¤>\{7YD/ì@*Û@ž%zNÆ6SÃŒ½“E¼œïÄv¾S·¤0oöÛ€•èCf€¼Êrnã c¿˜[ß,IѨ՟-ÉDª"fÚß P¯ü`E)ÜDEÚÞ¯û»DNa¹÷†Œá¦Ó ùMk-I#|´@Ñ,:dn2W)öÞRÁLÖ¸2éÉE`ü7’ ›‹iT§üüº4µ{™“%Š9,3NqÏÊbS 1“m––Op%Ÿ#^M£;@Ì B–[5J¶ÊqFßµ.ocþÞ=ü2 :+@tåÝ{N èüû7_û"Üû¯À…¯S|^ùÕ*5À«W¯qª^»á—BÑøá5B|þ,:¦¦GJẰ ߬W²>ñ1`d1ÿúÛg¬á3¯_¸q¯"¸sÝ.+°® hüú4ÈæO?”ÿzV àýÿ÷ÿþrÛ ¥TíÐ=Û'·¦üãÿÈ„ üIÀ[7½É€€r <шïEð•“E”×0/b]xåhžXøý,GpŠ „ +Ø<ÁaªÖUÑ^I ;w&&$.6Bô6ÒܦxUŒ½–l[ÒP…)›ÂÉÞ¯@÷‘£E5"¦M©U’VÙóRÍð¤@OJ« ¯ ƒZå §Ò"+€%6 g”TÚàœ0—¥TO`µ[²-%#a°R:¼RÍÑÀg@“” ¤.;;§2ÿÝ%µ€OÕA×7B¬¯ýJ·áâ>âËŒLPÜ a5ø ¸³! OT71Éý{PUE²§^ ãõ%#s~ê­Hµ:Ô©J‚¼ ¥0UÔ[¿ÏøÔúa8›g¿Ô3þ¹äÐx¼^ˆ°ÖÿMðª€BH k ø7ú_qûôÿºÿþÏ_þùÏÿç¿ûEÿ Êà¢tAûè—"¿Å2_±&Äghùi€Sù2Pƒ9)ï+n!••—IFl%à/Á¿•FÜHa¶uµPc)×ß óš 8Œ' + YÂÄŠŒÕç^¦á¸p³‘.´VVӚ߉¯¿ChCT^f2åê ÄM›&:Š Y¼ÍÄÖ•Œ—=<[ƒ™Ÿºó©CØ‹[úø'5t†k™c`ÂWrÌ5 +€¶|àìä/¸qùdÞ?µ¶÷,šâCQ?|d‡$åN–p{µ-û·+Ôé4_µõd’u¢1 +@Ð;ýG“¢Y¸ã +néÍWÀç„1ºõ9CÍÅÙ§ +œ' +@¢±CJ¶íoùi1­íò ºñçh€Gƒw]=(‚-¬7¨®c¤ôôâ °)ÆqþèB åñŸõÀõõÍ­±Ïö÷S5À/п~ù—øÿ ðÏBÿDü#CªLd`+j¥¹* Èt. +ãÌZMÚ‰tå"§³œŸQï’Yœ"-3gx)U|›ªÒ°¯Qœ”Í‘¢Ñ%õŸ’J$º*é¥oøéXJø§z‚®cXNY¯L£¦ ]Ñ%À ¥í}ä2dl~OÍ%'cSn¯¡¾iÈ^ˆ¾•̵'§ïX盛þ} @Ù9ëS€2?½CWú­å‚Ü£Šÿ à‰Ã—¶”Ò‡p±`†Õ =áêì\  6Øü纭ÀßÁéÂN¯HÜ-q0gbÈ z,Ð`J„ö ×͈¯ïµôˆ|ÈËf¸Жäqëc9ŒõO/=Ò¨eï'ž^ûaºOÌÑw `à=.üI@I„þeÜh·ç¿BÿÿNÿÿþ‹ZØÿ=àÿ;ÇŒkÏåQx¼†"¡Ê¬09s“,x¹‡"Í㇖p$’)-¿[ꜬèÀI¤d¶E¾ô¶Io“ À¦Z¥ + <¥m-»26.Wοâu¡±YPSˆÆXw7éÙ?°MѬš|8¶ÑE‘KùÔ"¯LìzµŒ™pÛ4=8QãÀÕÿþÐ_šVxû“3éƒ{ñêL \¯ÑCŠš¡ + “÷»dþQãSþf ’ÐŒ¾´rÅ'É›å&°ò£,·—úÃ>uâG8—úL­+l@ˆóŽ%€°ýÀØkP ~-€I4üò®`v/>4×f oœðG„jœ%X¦ùy|ö™‹j¦ÍþG9¿{Æç^|ÙGoÌß§˜[þ `=Ôª@³¸(êþñß\^<ÿÿÿ¡ +À¨ü¥5°×qw±Ñ™.ðªF8'o)Í‹ÛÒé{-€ìÛˆ’==3¿5Æ ¢ÆÙ¶$n“[ Ñ O•ÐX" '×É[ΙÈdÙÔ Qך:7JA@6 A×i»û´©jŠØÖš»€£m2Si]UyFDZªjª(€­GmO›a?Õ*çBORÍ€ìå{"bÿ~à+âïÒ>Z€~³Ô!j-bèH+;±ÒU´†¨4ÁÐP–ÑjWŸÀ@¨@Eð À@P·^ñ(°c’K L´@¢ÜÈî^¸¼k˜¦@4tjX×Ñ@٠ȶXUaw¸Þö_üœ²Áï#¯çŸ^ñëEÀÏÅÑ/¸çü/ ÙÝ-Èà²BÏž~þGÿ_~ùV¿¨F@ÿÇÿˆa¹ð?TÙº(ñy2µÄ8ORi%¾ÅUþý + ü¨V8$Ü‹UÎ]ý[­A˜ë5¡¢W·‚ø ·F[ó\‰uÓ`àl\|Qr!i„W+1žÃ‰>E†6†Q1NõiÖJÂÓ%€YJIàPxÙb‡Ú&· Rd¢|G[Õ¶¥ŸÄ¤à'H 2d\@¯[|ËPð˜D + ؽKbýŽ@¼Qw-ý6°- X} Å8¯àè¯Î¥µX–Ë‘›0 +@LŠæÂ¹°ºy…Ç=Š¢)Å9ç»@R’M÷7÷D>åÔ=€6Ùæøñßtž1#߈`Ñš‰䯀Ý™äñ¨ ðÔ͵ÒϸˆêY~é?IÙ öóâ¾Aø¯’ð¨ðïÿÜÖA?çßÿÞ]#>×Êa)"ï§0Æà]©» —FòãH¿¢Üv»˜/¼Ç­S¹rR­ÚqÊ]ñøÎæ PªÇUEŒÈñèêñvÂ9I\œQM BÇÁ©Ñ8èMd Æ胉ñÔåHV?C-âÊ=,›mOAÖ8…BDsc(ÄDeà údŽîRd! zÅ/èÍ~3² à?1ß¶þKd<±Äö(ä·mÅÑÀ§k’” d_ž/ ʼ3@ψبàì+ìô:+GtRݾï ¼w,³ߦÞk8ïkÔ—„S`µVÆyPcTeeJÿàƒBŸÝö±@æjaHÈ‹oÐ-%@¬‚¨‚§¢Û„|Wy0,KN·Ü¼è«€B?jàÖÿÐü²>À©þùÏÿ m Ÿ‹rÃh® £ë\¬ŽWå3CT~ÍÖ,KX#Ijò¯-Ȥ-‹U%ɉÞçC¶$ î†)l›Óz’°må½’Mê=Ð^ã6¿œ™·›uâ$/w-‚Ù5´M>˜R-`ã­Bm5^ËM$GÚDÔ$„oüÓ±¦%= h–¾$=)uìZ†"–ÊÔ¯ +@€[€Ñ_  à«@*%ó‡Eh÷:ÿ«9–ˆÏ÷PÖÀL«Òá)þh©Üˆâ`MZ¹‰Û¥µ%À¶MÀ“=€è…À>p.¬ƒê €AÞÏÑ g²KÙ4çÁpª`3 ÛF× ÓÿtÿÖ!ú?û“ð`,€ÑxÑï1è÷ˆq¢û!Ê~šmwFd `! ÿ<@¥0ÿUÊü |Wÿ àì€ÀÿïgÀ]S9¼ÊNÅ/$^|¹rî–׆ø’»øGÐCñþŠÈÌv¬Fû"è"I°eÿ¿áó‘[Šxчë `òy1]RZµ®“«K£q§ñFG¾… + µÌƧ±uζ–÷“drˆ¶ +“°Yi06ê¥ckäDY«˜×Õô/A½A‘K¸øg P -„œáâ†Õ' +OöÖÀÚŽ@E‚f¥ö&ÐØtE–#CäAŽí)ÀüüÇÇíÌS€Dõ)Àý{°©"¨`ü] ÀºŽJGäCQNÛ& Nq]ûå×Ïþ›—kÀï àÓXýK<âA{á'˜Î:;?»pH¤OÀ=…ôn vâå锿–Y|Ð +`Ynj”¢ÿÿûgô@c–)~EZŒv×—Ð!›Co0gü“¨Db´(¹¶/¬…Z:…g½]ržI’ +À_ï5Ôz’[V $²DõD‘„[Ê\“ Öâ¼//:Ôµ²B2‹Þ‹àÝ›#•}-ý•{ó@(€V`~Yä\J)¹¼äl&éíêÌÕ_kù×( ÅqÕ@4@f8Uɘí)\G@A¹Fà +/ÕÇ é³UõE9#ÅÀ> 7xy•©Q;ïŒpØøp `“ö~ @Fœ‡§p?Z¿²`‹C3ÅÿÚÑŒŸÅúLá¹Ö Á¿ïôq úP~q.Ü%2÷ªƒ*pO0û‚BÇÿÊBÀ +¢ã¿Fƒÿÿû¢?Tà"øÿüóÚ€öA_Òg\è”ßv ÀlyòRm†¾áÍS øßYï”eõ–”2Ö ,³zvÃ-J`òè«:_ÿG/פé‰t6k¤ñztT`ÛJé‹ÈI_ûCecNm ñî[æÇDU)-JözomSGÙHyý¡q‹,BJYÞCÞ}à-¦É†‹Þ1v!ªPQx™=‰,AýÉS€pÒǽôE  ¥½ãÜtC¡ÙˆFôŒXx_]FÏ, ¾´ùû§+Ëûö’/¾f¬°€ÕZ™Q¥(§ã@m€Aù¯dûó³g7±|±þS €ƒ˜Q¯§š@dCOη¹ÿ.ÍoX4êÄ_ŸŸcˆ~µÀ‡)€òI`ñ¯Àþj€ÒA"!C9#ñB&¨r ¤DxÝJŽbØÂš%G/‹’¥{Fn …‹K%Lrjœ’ l ¹I@Š#‚žI¨êè÷èŽ$»¬gNÀÒÙ±²(-Mr§YÎw0Øî†eÉ!´XfÀËDym«Zu?Þ „5S§í Ïö.¨-ôU±ÖüP Ð=€):סš—G  K€¼‰Ú%Õ@Çr&>Ä$;—^XK€Ñ·fóF2gæÝÌÍ`¦ ùîMëվܖ”åv¡_y +pß{IÉ€¸ßÞ8ZÛàOöæÞf“€ÌŸ}öÕW¾l—_êÅ`­ÿ)½«\ø$ ÿùÏ/ζ¹?4+ÿO>ùäü“óõ`¬€­¨e}L¹Tà5¶,\=¨¿Î¿À_øWîæE K”ÑNd0ã©f²/)u´fÊO³lLƒR¾ pŸ@”ÞS ¦ +P:Àx–”*ã…L3C\ëqÌý ³ ÿ §ê Ÿ@Ú蛀3½ÿ·Ø÷žµþð§?« <p‚ÿŸ^ÐË)Û}xP +¸;÷;,ØýÎübû50àïÊAã¿|ˆ÷Œÿý‡GâÿŒ€i€ÿÿ9à‡lûþTOˆÌ£òp†Óè]D"¾ÄåÓké‘È5ß\ÑúÂ<²td³è¶–*Ú°?lSüS‰Õ±èJÚ¾9hƒrŸò¦fØš¹ñ‡î0²TèÎÓ¢ÜÉ–°¥O;½2”„¨’EI#:“ì²o¦ƒä]¯5D‡eó/*@ÓððD, {Ìì'¦<ãq¿Ð=|*€w¿ xx + *Ú5€@žX\D¼a%g@un¢6 €Ûš8±Hœªø¤›÷=_œsÞ»Ð` âdz-о\àæ9À?þôS;>=ÿ.eH'ÉAŒÆ7 p:¦œµ¶l-t­WÍ8ž:¥Ís‡œrMÃwI2 ­z+IÐQ¸U¾ˆFt|7Év®‚±1ÇË"²Û)¦°‹¢„OÊ(ï4ö´âv¥p^/SžR4ƒÕØmmØXJø@§ +@ð'à/Ì;þGܳ–Êж³!-„d½QV«žI‹BzÓeù,ü‹k| w[ˆkü²ïjw¥‚°l8q­gZnC¸è{ +€žøïû8Ax!þÙŸ´NÏ\TÁLàŸçŸúm€O?©*Þià|Æ‘ØÈ!aPò  ÿ® À/ÖµžRÔßóŠ +àsþ›€ˆ¯ïHÄ/³ øË¿Güô£øÿÑö¼Ÿ“%­ ùw(Br·XpYö©w©‰øA}ï a§Ñ& ~J¨‡ŸEwLý¤løí?P˧œ¥Ý·Sò´±^—m"䜙<ÄÙ§´Éžh\ûäeÉÆS^‰höÄH]ñ¦øH3õçâuÄIzìo„ؾæ¦h?±  €Òf…Ç{¾ ¨¦ó™ø$‰èXÜý²ìf®&‹ø ™kVúˉˆ,º@šb³,ìIV£ˆy ¸cã^ô½×¸³ð߀þ¶fx@¾¼÷Ïÿ:ÿ£0fÕþM€P­–ªmÈ_௶€ò²x÷5÷]ýOÚo/6E€×ýA ›ÿüÇßþ?ý´vÖÑîRFJ ;`Æ9M×èP¿#Ò`#‹S<4~ë¼É[&¤°´8ôÂ’ß-ëˆä‘®Ÿ@e Dˆâ ¥\Ò-e³x]—QƒiP²p®6¥ny¦Mb)÷~‰‡NÔØO±¶ihñ7‡Ð“M=-Ô<Þ¶Ð×À—KU@IÁklò¦ëåå'À=OÈs°¢0â,êœ_.BÒÐP–÷Z’{ù6ÇnlU^Œ‡ôåRUnÙ®À=§vѨ¿ï)À¿Püß±Öœ/Ê âmàx±þ], àúÙµ³uŸÜQgçþãNæð“í¾Øÿ±ŒîõîÀÅc@£C÷ûIüÇ +pòïø + ûíö­ÿ!GÛþ¯£`t.‰y§8"ß}q”ÁIÂ=´Y^=’ÕÌË„;ÎAPòZŽ@¢IŒ½¡•«"Qäí N¡}V5v‹&ñå³{&0µ´”qÙ¡kíiÐTƒcë¨ÖŒ†mO$7ýPr-ùÆ „…Géü¨§¡ÜDä½bCTÐk¶7B|ýÍS¡¢Hì•ä±M¹Êarª2ŒN¹dؾ ÈÙVì”Õ•7šÐ¨T)À¾Ðl8‘‘M-l +ÀòFí@ržì´&³zËíoºóà=ßÀ‘tsàhlïôË@›cÔøsþ!IúóRntàúÚ§€÷šµ¾eœ=ö'V¿ôôœ•„¶„_ræWÔ8h€Áù}4ÐøOÀ<ˆøÇ<ðKÁíýSrR$9Ëì‹'”¾Â°úyÊ,):µ åk¾³Œ,Lí#¢Ê§|¥LyRˆˆ@®L!Ò"ñâ_ï¯TT¤ÖPiNî-C/A­·×›´JÑB!lJæé‹Ki@ž…¸›e«–ø&K¸HQ o”¤QV†¡ÎðÓÛæc‡¬êQÍ:ÂYPk°oÔéÞ9]¡R´|h(üdäæA$®d+ˆP‰Ã­`NB´wÕà¦mä$hŒÏ/Ù†·ÞY›€Æß} +ã`³8OözIÃ3:^mÑ=`Þ¥_3~Ô@±Ü»È×ëuª€zþôçç_> ñ?›éïlHíüŽà‡„þÉÔ/äÕ B^3àââSjVhðÿøñ€ý.æC+*:@ò[kà‚8þþ§×K +];>ÒƒPÌÔ£()! 8ÿºK\t:~¥«w-€ø”xrS.Q“÷òê ¯Y¶'¦3B•gŸ6Äw‡b ÈLà„)\ü(ÝÞÉ6uh +ê€ãÕ¦¡$(Ï·· Ìó9)kÖ÷ÆÒâÓöÈ)'m¢ú6,ÛwDsé͛Ú8 +w?ÆÎˆÐ&Ãé³èÞæÖ¡G`}BÎë +XD‹){ßLMÒ&„bý`èƒ^b¸±´b+ž= +º»lÖÛpF €6Haã{£Iå™äž©*€fçI|p.Ôß·ðÁïÿ§{ݼ׻B†—÷³Ïžÿù«…ÿ¯.– à¯tĸπֹ%Ðmÿüó~€äGiÐÄd9ûÄÁúMà‹³ŽFû0pT@žþüóßÂ*}‡Å28Í”ß hLK-âk§íÅ—½˜a¼ßÐŒ&ù öü)ìl #‰#Æ$—ZÆJ9Œß4gqnËlfÁ”Æs¬YÂi\§'+PÞÛ_ Ç6‰ l‰² ¤FVõ˜qÃ|jÞ7Býî­HŸ6IU6ª êj“lÍDçö¨8ûƒJ¹!0ÌIÁ—ÜÑ+ð¯a4p*ZÊÝcÊ”ëª2äÄ£&󦊸è–íˆôÓ"½Þ;W> ÿéÅ_Ý /8ß»ÎN ¦×ì—ôbT€ÃÉyq ®?à) ¡ßܸϘ7» P¬ëÅßp^þ'âÿøêùóM¬M·¯À}pqÖüqs×þz~Ȉ<´®ýÕ0bÄñ= + (_” ÓOià¿L€¿ÿÌñÓß3vÌ3ö:B' ÅB)®0§R—XõCy‘;èÑÕ•r¦ž(é‹ê¿u/^ êÊD$Ù°‰ËM ÂO6„Š;ÑÙÓ¤7­2£:óK‰YÔf"nkRpŠ,Ó¼-’„•Œ‘l[»~©ßQ‰[‘ŽZ8KÍúL0-q4ÓPÅÝ~‘yÞ¦ŒhÚ‹«_Ð'­(w ºÕ 8U.ÖR‰¼q¦{£¥%vjÌ€îNM‹ôµ=øHkRÚzw@@§©†7µ0 +`q"´,»ß²»05™Õ{åøû0ã :sû‡¾ðQßÈ›€QœÙê×ÿ‡õjñ\ü÷í¯Àÿ—£ò`³ü‘Ÿ÷(€G¾ë“©ÿ~'þØ 8™é&€¯f p~æ3AmÿÒ£àýðC+˜ë»ö5þ‰øÙ}@…2‘®Ždªyõ9 ØD"oŠÈë–UÇIT×K £B‘Ó.`¾ëY¤. ŒPœÓ5srîºAd¦V‘´%Au“mr…ßb™ß7]BÓÚ†‹'iÓò"R—áz Ü-´¤E+•™ýG —Tm +mR?åPC¤m9`—€ÅœxgImRböÐQ› øH+žµ¦À¡q#äþ( çh¤ Ã7­‰ß_Û`dÇ5@îö äý{™d5q›@Á(:ÉruRÌ×úÆ¥ÅQ™Œ§.ç{,Ã\‰ÌS€è€ßÞ(þïXYêy°T@ð¿TC@¯pò Û€7LÕ™Èíêöù)úGô»ÑŸ ?@îèKQÙLè±’‰å,®Oi >Ô¨¸Ð®ÿ¾ 0? ðóÏNOö°ú¿ýG)Uâ¢"Ê + +²Ç9 ^ŒôÊa6¥^JñX!ÕümGÐÓ¹–Øþ©ââ„b4r‘¯t@H šÙì'‚M6Ûd\¸4†4%D3—.3dcÃð*µ~×·mÊíHxM!°g &¼ŒJuA% ãm‡–Òµé;ü&¸'@KmìXÞp#Òðdw¢'ä7(þÍe>™Å „`4{*ˆ“žàv#B•G~y?ï +ð¡{G à° 88— ØÁø„|-€m P p}@ƒÔ÷˜¾p´ü/>uâwîéŸ +úØýÁ?uÊa¾ %/ ²ïPf|q>áE:næë@—¢“aÁô;oßG«LÕ€HŠœL>Å„’ +åõF,°H±ƒÓ¿£|@‰Š…ÈG®+Ñ JÓÁíËÀ-ê¿{$É‚&qìsb…0¶}ýÔЄœaµJ!‘Rƒä“"ÞjÏÐmSWòæK\43 v"ß*¹NõW—û_¥k ÿŒÌ HõðÙl‰!QèG8¢šÏjX…é]¤º@sB<ñ[2‹úCÉÓªÜw¸ ŸifN7dkÛâ4œægo €k’i±´ÔÄedîIÛ«íd17êÑOWúï~à Ææ} XØcîë‰Q±þ¡ìÌ@ €É_À7üRàý + q…>”¹ßŸý®ò]Bl~ñïª?×Ú|PÐè‚ ÿ÷+à­ÛÀ;ÔmñÏà?±ø±Ý+z=£øs$ÈQQ˜PHJ†‡à>G˜§r¦ºˆFÿOüg »äpð-â¹ðäšùûÒ­¯ÔÚãý"Ÿ-I&™=RcùR¶èÝ-ä4–ÂÁ˜ÒUÌ“2¥ü•®b É„¹5é§’?ÎmÉRÓ¼9ò§S‰¡½_Ê=EòØ mJÔjJ=Ða—¡ü´2lq"Ú½eÌeÎf(²û +¤£Ç"ËÀ5Œa3Rõâ~SÕ®(\ª¬Ë“Ò^€4Eåî•ɶø/xmuïÈT!õjl0g¸¨j8t±r†mNÆÇ¶G sô2¡àXÿÊ€:âÞ(þO÷üE ‘.üûÌ¿K\Uà_Ô°6bägº cŽéðw¨ðÏoƒŠ~!Εc|À=¿ýYä'V  _\ À.çûwÁoò¦ª6 €ðuÀŸ„¿Ý0Ä +ÔRàpAX¼*úñ$בˆ¤¸Ó?Ç= ++ xnîH{ƒÅ|dàx•e +X]ÅPO&ØD4ã–O,Á–È¥KȘ°W=^Ýkx­_Z7D@\•÷dKšŸœ$%hï4¢©:á®·d,½3-ÐMïµÚÞKÔç¿â[ì—z²È´=THþ³ µp˺ªÔ„’;¥SÊ÷Sj¤¥OÒ¨¶# ì¬+Æu ÞD­25̤¨€Ù\I$—*j1&§GÊF ÕAë +éͳ€@ýýOâûí=€w-aÏÔ3ïÇÍ›ø6€zÀ?Ø:ZÛÀ¹ß_U8‘úÉ'ïQÆvîŸ]~°=W ´ã]ø_èçÊêß=€û,=¾û©©…¾$ü»`ðw_þ‰µˆ*¶pä+çô¸³ºÂÁ‰ÝL@ûàln©¦s¢æ‘®¯À§øÅÈV¾§ãÇ¡2+…E.ÿxu<Ž_’Ë8÷RÐM’n"¥ ;[Ì¢Un›NC™]6Vs5Jh«JPטÛÍÄ™O„ŽðÓƒ»kzÉ ‰εaSŽ + D¸¬MhbÄÑuW$YUÙ§‰"õˆÿ’S;‚á_­BaªÐ,*êSÐk¿¡Ú%€…¢ßìšè®Ö ÓaQ„š6m÷’%”œæKÚ¬²Hà–ó~T'˜–UE´š{)`ïÀ¿Püß·9?è-¨ëÛçh•€ +àÄxÚ] §nô÷¾ 8ôø±&èfÅÏ‚¡´®zÖ¯ÿG˜@°?xŸøp°k€þãgðÿÿR¬jÑNçw= „ºÈi¥˜åµÂçP!‰‰:’£¦ØÉb p:¡—üOà5¼§ÂøHI<°yñ¬bï´ )ù^ý‰VZ§Fx¥Ñ`=R­’±ýƒ!)Þ »ù@î4 é@"ÄH©,šý5jå_í¡%IÐh•ø­„€ã䬫&À‹ïô?&€S» +Àd +¥­SËP °ð/é•_®ƒÞ²ï¶ÍØágÜXíÊéÍ\¦µÏW¤WËÉ@Ô^€¯  X•¼‡öûŸ|ÜßÜ8Z‡÷´Öü_ô«þ¤}ßÿÝ_+ÿ“5€@~ =½û·WÔ'1û}`¸`À¨ êÀ/bX¼×ø0 ò€Œ¬L»$ÀŠ*芓¿AÓÌ^FH¢ ¤RL4 àð ùfoE³Ó„d¸±•AÈl™…ñ¤ zâB°Í¤‘°-a íþƒ5ZÙv 7Ð8ÛcˆÙÆï'Ž€ýæ7Æø$pnobò·_‹Œžê6w»¦¾x²—W~ðÕ&›QAûà]øjLSÊ–…A>ï(€G,&½RMÝ€\l’Žˆ¾³ý·Qêó~Œï…œ‡}MF]·„è¿rín úî'&Ð&C\õÎ~„öï~à î¼ èÜŸwþú"pà}û Àä¿,þ·5@Ügù“`,€÷˜' <†?GüÓçàŸ%€Ôê { Ôðù]&Àz(/#,Ń« _zŒ©Òg¼*+S³·a QD‰dþȤ¤Õ 4p1¦ ¼sñúøöx8C­¢Ô_ËÜIÁKzTa餄w=Äš0EöÙvÏŸ·4Z§‚Š&#ÂæáœBS×rÂ[êýN#½ß¶pYJU‹[a3é­À/ª¿îÜވ࣑QïÜwkÇgwƒ 5ÿÏØ(o:îÐùim¡`xÌÐí”"Œã(õäÀIsÀ×Îòôæä,XŸé0š»"‡föÞtsË.iŽª^1ó¾ê è>€Ï Ü2LÆÜ5ùí¹í\ïS€‡ô»˜ÿ2þôðïßóçÏÔ¢¾ø_ÖÀSL€>ð9€_áù•70@³øî'àÊœ?þQ¾ +¨ 0,®úóÀÕy(ðÊs¤ @ŽD¢/ΦÊÜ” ôÔMY£±6ðãéìŽQÒ©è†{4%¤w •˜$î„”Y™GWL5BO\òg¦Y„¸åª‘1ÑS c•Ì!ÑOq™øLPÉÙGE aÓfâ–‘¥ŒÅW¥Ô8yMÚŠ M–iˆFr)9‚Eêƒ_,;˜fþU30þ,p+H7ञI;P5†,F‡8rÜ—ã>}Þ!Þ6¯­h8½3KRq©uµ>mo<»%e€Š¸P²@_º½úë­o>kÍ­Âï¥÷?øïÔü%‚A?„ 0su@è ÿ¦  àâ4À]Ð0]­Û…øÊ›ýVAÈ –ÏÁô‡Òá) ´Àßÿ1€ƒß,Ø&‡@Ú çÔ¹SÅÇ¥ìG T gOæAF&cUÀüT^c*x’cÃ`ý×áyÉ,²r7—S ` ØE«îÒx7ÞÚé}øEÕ|@:Kð·¸5†¢b%¢0¶c9ù˜\Ú|z†QÉÒ­Ou 3?’*·ãÐs h‰­¤X«—XÝ¡ŒØ”„ð†aÕ7 ·¬2aäo ájh$dGŒ8²e@â;ܬJؽ^œå‡=Ø×è÷—9úf0YÒ³Î:sùà÷>â»Ðþ"P¦ÿbÿ6®ØüËøsñ¿ÖXyÛ]󌧣ïPû=¿üûüCZÁ?N¿ +€V°À¾ ðÞ¯¾—Ôƒ~hÀà?£LÁ}UÐÃÏFMIŒ—â.RŠŠ~<µ2÷GHB°³×5ꑎãd‘(dñ‹py1‹ÙGØ“#×Q‘¢z%tDúøûņ#M¹TaCì$Ī0Àz« Ž®ÌCY{ÀX¼DÙjn¢÷`«¼µTQîs÷uÐW7`"hªiíAëŽ~ÈÁrÌ+¹SHÅ2¸xðD5–· e§½îªôÄß7EulÓäħNɘܠaŠÀM^Ë¡:®^¼øâê¯8/|£ b °Uò+ôþ§Æ|À@ñ¿  +ÈÊ¿¬ÝỽüË `)€§™üãÄøôü“»àìuû:[zûZY ƒl5_ òÜp lüÁâúÃÉ÷þkP À!F@GÆebá|Žñ§!i“£L#Bù|¢x—2ÛA¸‘mP:"/sâw²HŠñŠ¥8°±M.“‚USÅè†Z®´6 NÈÚ¬iÁ?÷Û{‡-ûÐ:üI¾Ú#´7šU.¾¯ +‰ù±9×2} â&Àáe€*€ÿ©9R’c_„ `‰6Y3zbÉC„•šÊ' +`ò@nEfÞÜäåXJoF¥ddd¯ò¥T ø¢ bƒ+¥93Ûæ +•ëF§~ÓsÀ¤ +`ÒçBd$×úà†¼QÛ§:°)£úIÈ 9¶Ô»¸ÌÛ9ùØh›½U6Wc›× 9¢høYD¨ +šNÓPÞ`Ó¶§'"yC þU²1–ÐÜ[˦øôl¢-w6½/È8;Ìn£õ4%‡b&ÇÎvE!†èõjxºZ³Ê×0Y—xsJÂü> €hèA{.þô‡gÏnŸÀгÛQ.}4À˜}@e“oõø³@‘S¢³1ÎüFÀ.Á^èÇ-öíÕ#³Yx½,€s_0xŒZxÐ`Ðÿ/HðÏþód¬cÜFnƒé‚÷Ø$c£Š—ñœäÈ0Å·Y3Ø¡m~V0áuPá÷ŒDÀFypÊÂÕCª™iïÈ+…JDœ'7¾0ÞHÓ2S’× :犣í‚QKíTX%úW¼w‰Ëm*ÕÞ2rÙ^ š„Äɳò/4È:Üç–,¼Ç@²ó#/K¤¼2otø…yFG¯‘F¼0rÁ-H +9ß±”¡¢ÿ@eÛñžÊzÒ¸6b…Ûï7/Øþ4œ£• +ðF[ ~B‚ܦòFÈ<%“ÖRÏLirØn¦zˆ‚Qc.Þ³P÷7ß(þO÷þô§g¥Û  6ÀÍÍíµèöüKQß5À2|à“€›1ì¯{¼c@FÐóŸ<þäL s»Èß\¯P_ŒÐ/ h$*\?ÁØNƒiáÿŸÿuÏ89ú›@E¤ ó ™§ + BØøR…Dßö×`#¶¤+“|Ï!Ì"¤ný,zÀg‹d»QÎĶÎÍ¡ðEN­z«Z!%ɶ$²í]@ +Å7d&Ü; *꘩°UáµÙääh?&IÖ”÷'JT„iÁ†Oc“ðÉ:Á4Ð(³è›¥Mñ¶÷gØ€5±ªÐt‘O\˜V¡ +`©ùÆiI"‡Sœ´< ò¾lƒ LíÆ¥w),n$Ùl¡ez3Æsµ,Š«'! `»E§$?Räk{‡Íi>c㉻epç)@tÀoïÜcúò±æO-p«}Ÿ-€£0? +às€ü(§_ ô]Àó"þ”èuVù0á‰}—þ»Ðˆv —_NT,€OQ@Go`ýQTø{üÿ3ã]¡ +ßÊS¨ï2Ü›@ωo<Žoû€ÂPÉ€*š>Efx±é1‘˜ý¡œ’ë¶Xe8¿ bŠ,&ÎRZœˆFšCÍÜ€ÁŠ §ŒÂWözõ¤™Ô]J(¿`K¹&^FBžûѬÍEš04QÄ–Ÿ/ô@«²H ý +àÿøç?ÄEJÂx—àâÕélG9Ã3ãoØX/œã‰|èÛÞx9Ñ7Ñ BI°IKv7Ši !yQž•‰5„B)Q\È@o"DžÊ3Ÿ6ThôKDƆ#éÖ@tšQ>ónê«B¬Ó\É诒¥L–Œ4L£rÕ«Çh<ÁA;q<6_Ûd9Û‰${Ÿ$Jûej®Þ+ÁïB¸=RG´™©8­‘]e&´£ÿ„Šýˆ@–šÒ0Ûˆ3áà˜‹u§q¹Ý4“ŽUdðK´8Íš`’Ím»r•êH EM + ǵ]ê5µq%ÀL÷êH÷7÷Ó}a_ð?1„t5øg`,€Q}(øzÝßö¹ïm@"ܘgä-èÅ}°_pMz$›mÀs&hx ¦?œfî/Eüc)€ g$ ˆW$‡ªî døcºß ‡F±ƒDZ•…¹eyXÜKNôc(©Ê*ÞÁùÅ‹D7-dB lCq¤m ‘´nÔ@¢#»f®àq$žQ8››6ƒ9˜ñؤ 8N©º!ó¡ï’èç¬ß#$&ïùÑXšn^][JÖ¦¤Á¹Ú§gÛï‚´cÉ•[¥Á÷'”6Á[q¼ª­n¥Â ³P¸ÊÞzí“w¾¼é€–Æ+3©B¯kƒešPÈÆè''©Íš. /Ruâ9zkúÏ}y·™DÌYaAvOù69íŸñp‘Y~#Ú,€þ=€Á¼Î Ÿ«~á~JFº}-€®.žº¸,€~!ð®H¿?ZÏ:Íç î…~üÒEâóÀkæ÷·ÄÎ\?, 0°þp:àßçÀÿŸÿ舦¯³|ÎØwH3éhÇ!z#Ó¬D:šˆ9A™t¢*Ûqaë%`Ëa¸é’“´ý:¦rÁHo ©+I•”Îã4ÄFJ4Ò‰Év5$¯ü50ŒD~ß^‰çQVq>O“¥Lµ ¥æÉ—›LH“Ä?Ùo•Ö–˜$OrPCéH mc[8ÏÖ·à¼Ùà„ƒ‹æÞÞªw8:6«õ~F(]*€²€_¹Èv´áïPj±Ü³a‘Ä{©ã8r§þÈr$ÂKi­ ŽlÕ3´{G¦å™ÛÎȆÁDÕ _Ûº³ðÁïÿ…~0?j`iƒƒ¸¹ ¥pØp °=¤%–"ß 8vãÎM€;@p¶[}ç?UpM nÞ"²s~ñÏàP£­Ãk`ý1ôÿ÷ÿÿ³ð¥:2Š”­n¶ÿ“h0B‚D:ؤ0ĸäÆŒ“WÇA½k˜©e”–ÍÒW"·H>àC½ÆøÞ=€ðÒ°I–µ"8\b³'*|m[š0”jò•–äÓb—W™m66œ…ž;wOÆÚ.YHF‡61ÿ­û'YˆsÉåQo‚t€þܵžðWäå"ÛÓèù¹ã4áQ „(סäس¥;à¿fÎ~‡KiØðÒ°åC*—Sÿ¾p`¾·ÀNæBÞ7ÚÀ MùšÝqE¥z—ÆémÙÒç=ïafš®Ó{Jû7²„㿹rÍp¨ Q"N- px +ðÛ{_ߺÕ¤/Ì/ @uà|BèƒX® YlÀWÌèLÿ)èk|¾¯s¢”T†ë𠌛ùââ¼è¯FÐ üyíG“¢îÙ'®°+Ò_ƒé¤üpXñ¯øå—ÿ§*` DÇV¢”›Œ™‡ckïûªH-Ñâ ›3NŠ)¥x2¨ïS!<”j„<¢Vκ©ÝŠäK $3£oÌ£6ùI»Ã«¤œß2[”䜭ûäÂJTª¤ºTÅ’¦å„}ÒK]êO¬„@½»ƒäN~u'w2 + Í:£ $¼;c¸?‘Ú¥uÍ-ÀG=7¬ºëm Ñ#kYØFû6cµ67Z„góKÉj1Þ†] àšx—ˆÉpõœ:’;{ç„­ßv+vgší±Ñ½€6,á¹° ¹“03 ㄚŒS xç=€÷íûþæñ³L 4Ut]M€£°Öë§Å0&@þàD¨\Çoo8ýC¾ð«·QÎþþ°ˆÀw ÀR`L¿`g}¼8XÿÒ¿~ÿÿÞþŸ +”4ÃÛ ;ÎãçB·×£›‘²@üŒq‡š÷îœ0ްOc)ë´Ö'µy9àd’$Þ“°µhè*ŒWHÂxs*²–|¡Šû5Wæ¨ÊêÍìÍO›B£ ¦\@å2f h«‡cü4†óC0 œ·Jvbå<¾»imSÆE•ÞµKlq;R²FļëTœîœúe:ÿ¸°Á>ž¨/©÷¶jÏMôFïÌã%üHlƒô;xǰ¤wŒT‘ÿÛhJ½ƒ#…uÔòeSø¦­žÌùÑï Ð3Óïž ÿF¼ó2`wooæeÀÀ¾@”ÁEŸ¸ k_ä¿û€QÒ€2Éî—*€ ý~Ô3õ_ØEÁ?KW° +ª?–Ä~œ¬~ù§C‘ÃyC‰Š µÏ×xãq”´Ò8"iä>PÆ· + R°¨áœ˜‰Ü g˜ùÞl„×ñ]’%!g¼à¨ ?ÖÛT[Þïn˜w}ä¬j§ÝIÉ=Pœ>[iZâ­Ñ”NšUÔÐFáoN_º1Ý[HU­Ûò)ÞÌôBœ'¹n + Œ7 +#K¼*Ê®0}¡TE"*c¾ ›ÞÀ±_;Z.X´MŽ•ž¬µ5›kÝÂD6IŠPÄ~œi¹€ØìÍÏ@^œ«¿¢’;ŠRl´ÐÐÿ•…,õõ’ped…› +Ö;÷gðëïòœ¡Í3¾û_Ö™ßç7ºˆàs + áÚýD8T>ѯ0p¿öÿ¿¬d¡?žì +øü?ÀßLœŽöÀP4*à—éÿà^qŠà0¼éÙ §[´ÅI:ÙƒˆŒy@ûÈÔ~šßÌ +£'╪è5 +Má¸i…8+,ÜpŸUº¤`Cg°å†ìløòûØú§×'íOŠO¨}'[¬ö“Éd>(ƒÃ{JqK|X¥aªŸ©Þ6©`(Þ›?©žÙ1 ¶¨ ªÅrÝ%‰Õ¸ÐØÌô + ΋@QÏ”¬‘1¤Œ¤ÓÜ™üz³vîc§Cpo”‘Z[ÌI“J°¶ÖB†d1C³¨wIEXÝ¥xT6:¨C‘è;$Ë%Þ‚nÎTÆŠž÷çæVÁû½ ºgÒÏT?AfoSjå;@"æÙu k€Xk ÐWºyð΋»’wš—@¶P>AÜ¢ðå`4–"G,†{ üѤ ë÷µJtàXÁ«Ç=]Çñ2² ‹5 +"a q—åƒ 5Ž>ë"!’Z¤§lÀpPÖ%fM °©–¤lÀv…· +`*³:é¯1E#Åê\M±[…'CiEÀWÄOqMY+¡êÄ5kµO”ÀGv‘íè^Ó|ánØÉßs¼6ʬÎì~{“ßÊ"Ðy°ÜÕÓЈý>öÜäæ5À}þ ̳xü«@†CŒ“T@ž ˜@}ðË¿~ñ3c ¦òâ±¢ƒ7‡²€³FZKÙM.<ŠÉáU8b—›^¦Hlj©TÑìŠd°âçZ¨[R¹Û,XD®#ΰF3ä–À&é²BYÃG7ÕG‚Â[1k­n$†b6$…©¥@:†o")†Ô›²³“Í`íI¶8Ÿ—ù£Uñ"LºòvDÀ¥ˆ¹e—î¡åöÚñË@tÕˆ˜ä(zK¶ÉCòõ£ª&ÎU…m2êM³·åЪÕvØûI=HÛh8MÈôOŒ€KÙÈÁç´ý‹2@ԶꀡÁDB½¿Ö=žøýáƒpg P¼ë÷"}›òWd¼‰4J]RL `4@ž<¯á0è­s;’wêWmÿÁ@P¦”Ð d* -€OßyP0?„jüò J`Y íjFò>é8FN¾GØ8ÚNâÙÉÉxeèd™LÈ£ù|…›ÜÞPšÒw¹tláz»Å„šq6…3fødMÎ$8ÛºænÍGŠ@£m6AïWuCmT]@ÓHLß<*u`küÄB)¡Øþ ›æ‡PL_ø×¿~ù—ƒ øU#@G×ÿ̇F®B›²ŽŒYr_Ùæ.ò4§„ÈÌ0™×²­Oć|ë-úÌö¼ º~Ž 0…¥m2«˜‚]‘ãIô­OÖQp ä!þ¾ PŠ Ein°"µ•ìdHª ²I­¿ lSw(@D5±m,US-“¬’/ÐÆCýíMDävm—M +y¯Œí%„®|”²Ü›RTbcmqö´Z@”íZuƵ:DLY|æQ4@~è?Fzè€(4#Êk®ˆ„ç„*én†E9s`ãȸ<éÉëÈ9çÈÄÔcÍÚ¹d4ó¹Á²N¼T ÀH!'Õª•méÄCW/ò½øTx‡°ldªKEVººax3¾T#QÇìPGd>Ñ!qÞ6 +€äm›l¬ä½6+äïf`3¶ .o£U,â­Y“lmœmJµéÞhk€þ8¥‘0ÉŠZN£(+u ²i«=Wn¼&`Åp7ÒÐ(WGŽÃ¨Ü—¼ÍÔÃ:Ƀ*£YFL¼èç8™ÿ§Ù½L»ï#+š3¼âYU—mâõ4P¿Al€ÍþLÿ]û/È/o¾ª +¢̾¨3q®ñUk P ~a}­ðçÇ~?¹;&o1|²àÿ‰¶‚TaÑP-€ò8›m@Ëú&áïÆ¿_Bü‡C Lñat„€€aBG¼Rr¤ƒü:Ü +‚³ÿõ­v\.‹#ƒBž|z05SÆZ”Š%,rSfl{LQ!º3Á6¦Ò&ã‰õ;yÆW(¤uƒ°žpŽðõŒ”Ÿ7±•=³¦61 + åLˆ–±A5b¦-‡Úm•_ž tâ-S¡–úq¦wœC­7}K#C6Ïk0bÆióFÒå~Údl5¡´sh݈×vÇòYÖ L2Ži ­ *~o›Š¨¬¯àØlkóé.>i,ëÿx$›L;s±Íï¥rã4KŸ>{ 7¸¢Œ§³XØžk”€QÈÑ Â~â;#— +ÐÛD¿  ;‚™ËUæ,zïÜÁ(€L©ZÏI}CÎÿ\–ZX4`~þµ„CÂ`âI:–ŠÄ’ÏŠHCqÑ‹BˆDÚÖøŽLFË΋9¢ ž©,f]ŸÌM(ï€=ó_â•¶ZÁƒukd’}Úi¯$žÜ!Ïz­¤z$q+žTi¡7µYùW#Ê[ÀvÊqñ’‡ l@bÇPŠ t’K2úê¶­i½ñé ¨Q{ÁÄtWÜ‚Çx»×žÝoFO Ÿv¶,®ÇÌþiÜÚèܘµ&èxbS)$›¾ê ‘ÏØŒ©m²‡MoÐLíËâ”Or‘Mnâ@Óè÷’mh­ò³ ù¬6lŸÉ±u–€(¤1€y1^°÷“õÿDé«KüÛä7º÷§øê«?W\ fëàÝÀ;øwàæ¦€S¿Ô×ú€üõ™½W>æPÀÿ/7ÿ £Á¨8P€ÂQS• „eÉK®NnùCðD-bÀ3DAÑ"y:tA/ +G<Î!î Œi¢èeéi¼Ñ•ü¸æ7onCà#ÐÍ”JŒ±‰Ù@ d+­+Óöf]$ÖÖ„q '›ü?ž¢Ó©1uðLTo=BiÌXt(y¼÷‡®^lSñ?ÝݲÊ(ETº“¶BôHú*ÝUÏÂ1‰ù¤ÄF°œ¿^µæm ØDëNuºŽ}Ó <ŒÌݵAÓíF 1Íúô£Q&$Îf)šv×]j»‡¶§—ï'¸´ø¤«YµÕ7áuÝ“.f`]TÏU§Ó‚‡Í€ÆF)sRñi¾Û¾ +ðeM€Zê€çµ9$*€» oöúšO5€ÀÙp‡õ©Æ¹½>;ÇtÒÛ}Âè€èó( ôKeDZp`sµ×ŸÂ±c<éãœÀ>•Ðë}u—߯º")'HÝdKäëK9U² jdfûÉØZ¦P„¤ÆHö€‡¨üö†"K6›¶ +´éNÂòMf© ¾R)4#2kÑh˜O«êà µËÚø,J©\Ìô®ð·glNî}2Îe~Ôk(y³Þ˜˜M!‚ù˜Öޱj[)‘ÉŽ±Á€If;%ÍMÙ‹‹üùÖ´RÛA-pÞjÌý@Ü‚ÝaR›“fÚ¼ŽRoÙÆ¤AÃ!U§sÉã§6"á¤Ùmøoéi+¬2ýÀåø1jÜø–' ->Æ~L€¢;€/Þk4ÕOc×d~$¢¶M€Y8û£žM@À}ï +@€l¨²tP  4 +`U{ÓÀ¶1Ù¿×óGÓü,пb, ™\EW$‡³R22€??àר!ÅiˆÔtˆ9e:ß|GÜ)ÝB,~i@$“ñ›\ò +wu ”z5•eøý3¹ÔË8ËbäÕüæ ·0npk +5hØà¦Ð|Û\T–Ïæ)@þÔ +oÒcLÉ2Ç]̪§`EˆÆí·n¼wÚPU¬ƒ° b¤‰‡^üÔAs?ÞìFÓÛEÀ‘Bi0\ø8z4¡ +|g<9ÂÚRÞÇàÌW è‡ÑVg_“C«1MñÞ9MŸÖÍÈ¥À"âÖg׿þPï¾Õr´¥‡c’Æ‹ +(´὎7ž‰)î‡ô©‚;([LÒ7ùQ€eìÀ¦¶2³xG¸È‹¾Ë¦×ù'„…úJÒpî'´=4ðûW}Á`x+®Üж‚{«=ÒrÇ*Eôpæ^z<Ê~gÑó‹]ÎT”#¿Ñ³Žèç§6ä+¼E-I0pQk ²ä4d¦/àÑi-#ÝH¿öÒ QF·®’q§Jî5…wo3€‘g-€c(KFÇH|zË.f˜ šmq‰:ªÃ?dY¸rÊžˆ¶áÖ>-uT +|²<›| ˆÙÈ7!'²¸j²ìjÇtÌ7ÞTšË֟†|-ÊðaŽ8+$á¶l®¶F‰²¥^$ɳ—{J´8*à”@ÛлégœFúN½O.:›Â1®ß§û¦LêNÄFÁf^˜¿P|és@¼K$3øÖ8ÙÈ=ç[Ây €ÈÿœmÀ<õj‹ JDE7è š?žÖOFà=3\ŒW;y`‘)¸tÆ¿‰¯®p±£E Ýœ¡u€ómÀ‰!NߟދÑ(¸8m¶IÙðC„˜y“"­n8¿@ƒ¼ðŸ%·FR0*Á R_ÆMJ$§Ðôž)¶Ù†ç>Œ q½’4÷¬~2™„QÆpµœ"ñæžìâiú†áp (úÇ*^µKÜ… %¢5È׆e³Â€ä­ØÝ‹rgÓÒz ùfDod*È%z…t‡Înu¬@²7¸×h&ÉžÏÛ¼«Zcžh?*4 jbý¹¦¥iíPñÿ¤ŽJN?{àèn‘qË®õÔè—6¨Ç­e°2ìˆìÔ|“]D‘êÏú¨ªƒ/}}Oõ’œy„ï`»?¼ŸpôU@·:Ï?=_ÀL€èÁsí‚LÿÉœèÒàùã©à_ MrDFK…EQÞ%—>]B3×ÊŽ‡N¤CÈàzB÷þ „0>_5âã„gBrƒ¹»‘}7 ³kä®òûš·ùÞ­½þ’wò¦uܘ øV÷Ö®ŸÑž»_qPÄm(ïÐÑ’`a_(\r<Îö6ÆŽ¨¾HÔä6š˜–LD –Qk9Fç¨(} Û|)µÕÜ¿“sC[WÄâ’'ämÉ3(І±iG2Å éŽ|Jà:&ªßÄ„_¢õ«”?‰ÞÕá`Û’ÖVΙ”]Böã׉ڭÞz3¹¡úô¬À©<ùÜ®¹¾˜áRçú‰2’s.%=ƒ6ˆÌr‰0? + °èËZÁ?Юð¹§¶ÿP,€8dÎDv(»~ðÀ­F‘ªÆø‹€h‡a HœžSDô"äŽ}F_å߯'U•ŸÑIyep«ÌRê5ˆÕ¾’°d-S§M3ÁŠ LEÑ2³òkŠR÷u2éšË+ENs›”€37[M;mrBÓ]za"½/É´,{¬ƒÎŽŸˆjû!­Jcäd´ f”ˆ·ƒÞݰ`º@ß±€œVȪldz„Ì4'M.œ”P†³Ì‚Ñ6RËhXMãsšjÓÃÑœ)sF•.J=Ä5ñ R3&„Ïæ¶ Ég‹Ì[)H 49ÚÃÒÞ´ú×È[i³¼æHLºk ì×ø—‹³ây¾p_ÐÞqª#¢V†D—暈/™úO ¿~öyòùï`ƒöü§÷þè/¯Ÿž×ÊŒ +  ÿµa¸²å2`~iÐýŽF>¢^ÓÑãH_Ä8bç˜Ïè R8eå¤<¤hõ%¾¸›È…béKʸù2uøDVÒœ¯F|Ô/´éer')|ü±nìÌÉDPìHJ°)½—åó·ê-gÍ‘L`zaÓªâÚDê7*2!@Úr¶Ý{ÜâBÉ®hð&"”ÛÎMáÛ¸Ìæ†µ¤°›q ÐÔx2lv7NR×X°m-ß'ÚZ«WBáÜTZã¸SMÆÙbé‘2q }Vš‘NˆäD5Å$}i4¡ÚOÛšRJÄÆ´û}deíyÚÓ>×·ŽƒgOšK<ô[Ð,ž‹é9qÁy]E¶ ‡çx×ßSh¡þ@LØîÄ€ëó]^¬þ@_ŠsÔA–Õ‚ÛëS¬ Œƒ>þkB¯ýAr œD1¤H‡* RY-xê‰ÔL´."ä—fF¤Å–‘5×*»(…jÐC“!‡WÙMùÐl Ø¢4kJEÈÂ5mÖ …¨ríTGÐL +eT€!Á•Ë €‹hJJ‘ÙL]öxßÊ,l¼ + )±xŒxmL¥¢¶Tª^ð‹K¡-^ •­7ê•„¹Ãm4W›H–ÌÍ‹ÒフPbmNnSÎk°qÌÙʣśÍ€ù;aƒ×±ìt[âr‘Õ’ÞRú&U>¤ßFðO›ª’ÓX~ÆáRnh€B¼x/¸sÆm°³~¬€-†sÈdç~ñ}só¹ß +}î'@ž<žOûE÷Ó§Üq® jÏ‹§¢Ê@@?ŽqÎþçQD]õMår™Ë`ù!Ôg€k(:@ñ•¸F@*3‹mBñÖ –V)h†7#Gz¥¬G(—‚áçAÞfÕŽ¿ôûOˆb†œš‘)7’Öò™#ý–×­ £SU¿ôÝ~pl²µ5Þ¤y#¸¹Ê[üPj¦!AG-Ȱ<ÈGÞÉl%ÁµÖ +uÓòiçb‘ʕӉ#‘0©ÅžÌ©vé^q%4mr*²ÿ§ÇÇM´¤¶:›í—ìXˆÆÈ.ÝŸ‹ û‹'çÕ£,“‰«}aDŠ§Ææ‰JÚ—q ÌGôÿºp˜øX}Z¸ÎõIdºp ܹPïBs¡¾g ŽwûèäwEkû³øI ÿÏp¾ôMÀ§×ÏŸ“1 |ìOöñp³Yñûë_|4Ì[<÷=R Æ(±ü¿8Ïê`Ç}Ï^tÍ¡Á¢ôѺfÀ8v¡YSÈH%0FXé`FÕ‘¯@åÈð&×° ÿÂé\^Šyâ)¡ši3Óú¼ ¨èã DÄ.,É£¦€H°½E¾eûÜN6¬8ëœbÉ[Oo¢rº"•·)9MuæPèeÑ+c®igubUÂHÿL° „,'bÙSbnC×ò9íè6Ñô÷Ø\ƒ(øQØú™Ÿ&‡]U‡š­3 ±ú;€Ýo—x:<• ±Öü'vrL äÚF÷ŒKZÚ[ú ô»ÿ—ªýÄã1—ÜŸuNÔZÑËØÏµ”Ÿh„=ÏXþ”'t@»jÀn>ÏÜóüÙógh€/¿új,Ú+ä÷y‚{@¾Ù“U€.èÏ*ꛀ¡[‚Zƒþ@9MM€9SPÏ€ù4ý¿‘C˜‹=¦D»ñÕEvŸJbpœ­èoF½]m7ÏgX“±rÖë:åmôb›’ªÉ(¨7 ó,ŒÌ<Šdµ°ˆw€„©‰Øl !‚ò©›3^~Yˆf7"´Q3 +ËPüPÀCK"†k vÉžS¡LN•’·Ÿ$66Li¸eão-Rx +®ÞçâRuwM>šhR@j÷r÷c”ìîâ ”LÁõgzÐÓá!•;óF4ËN·%OŽè©‰Œ«N?¤¥Á-ÝÔÖ}ÔÖYµ=m°n|ùô²?ËëIͶ[%(/¦}¡/ÀçT/dÒw{@JšŽ‘>óíz Ö·›®n0ÿÙ–Ná ·Uܲ‘ é²6èË7ù:ðy3”®½_U€*#¦€ª º`àüñ”؉rlì(±]W!©B‚í$-Yì\@`2ñì˜n²†»]‚”°HW¨¢–5ÀÑ *òßµàA„/¸ùV ¹0ÍtøçFêÆSÀ”Vgës÷ó×ú¶-­Ë¦©Uþ©EdÛø€TGâT+~z´[ë"WõÇè&Jt˜mƒ&ôZg4r;7,[k)œ0j®‚œÐôÊFÖgÝ´Æ|6àÔH©¾ÑC 9dÅ{ÚÂi¶s£r§ÔN¨cgÔ²µ9õå4ã>…”:lãÙ:˳¼žQ–¶ö‰6@PîÛ¼*àÞÉ^°{“€<&±ðï&`7—@ùú¿ö¥±À¨P­p–p?aàƒdHp{É‘%Àñ]¿©Â‘ù¹m`^ï©;[2pþhšþê1t“ÝyCð²÷‘ ø6±$N,äcFFÂ-ò¸íT¤%}Jô†TÙq¸ˆ1ÙÚT6Èøü ?&?É•Ç÷´Kü‹N3ؼ«ÖòWäëæÈ×”¦ð–÷/:TpWù¯ + ýRcØ·åðY;4ÝP·]r—¨4H §Ç‘V+ÊÍJý‚~O»|ºÐH©÷@Þ¨”~‘¦ÈNLT.^l7]`kBúÀȹ_Å$ +0M2< „½­DKú×™¤|Òæ¶û~ø#>·í¨ ôC{j={IT>[”uÚNmaž‰>s~Nÿ!°†z žªÓ…›@ ¦ÁbMH àóÃSÀ?µ~3¦\B 4ñ„Sìg} ÷S`.²±è«C)âÞaKÎ |r}¨ Ð8P†&—­{‘æ MߘÁ‡1`%Y”Žº´F·#¸ÀÈÔé2Ï÷kºPàbdQAl,ƒ*š“š¬;ZH9ãC.DDö´Ê_–c¤*Ú¦W^+OÓÔ#Q­*ÀŸ´¶ „œ§.î,-0ʇ"ê(…_6Ëd!MÞ—½ÿôC}s´Wê”(Ý…ˆœò–á¶Ü«tÒ¨3šP®—€­véð¡dÚiXûp5¬òÙÆ4„j³÷ÉÝâÖ¬'å +úF—ad„€Q{\îDFkÀŽ‘Ë; Ÿ6ºð¿WØJ,)Ò¯ˆÆÙÜx’¡¾å¿iý¶Ò&ïlãšùYxhÔkšŠ¡hŒ ‰=¸ñÇ¿DþÒý.@žé‹Ïøe_šíª­ +àv{ÓHJº¿ÈÌÌP[ÑòÃp1€þHšØ)ãÃPpeÛwÀ!@ˆëÀ +R€nœà&Ûò9‚ï¼_åm~R(¹)ä­ãH”Ó­U-€'4¯ˆpTɲ‹P#âÜŸl+"W¯|{&€mk‡ˆ¦çr°R…7gËTLc¤"ªQ¸§-†Ògg*€øtG]¯ÇK(•š×þ‹ž³Ó+»V’äì–fÔ-õS}/Üxî dŸ—zw3,íÏSÀh] ˆ¾†Ôqù†&tË“F™F"}fÓì ‘>‰ À¬ u4>êÂÛj<¤º'Ý0:à.M;Ò%é”ñqÉQˆ·¾íëHçXõ-ªˆ.ɶƾ`V»v»0wU€ö@VÐ ú#iz'G'W» + +@(nZàëYÞÊ«í<éa4“ÊhÂ3>Tb”£H5D’iµÊp¶ÒˆI¶\2ʆÂÉ×’lB[w§#Z<ÒX¢…8¿·Y¶ ÍΟ +ç6`á¿ìÈ"<‰­è-qo@g\È>ÈŠ!’ÙŸbJû¬K/÷cWk"I4Àª¨ifo$²è“ô{¸­—×]@…ÑŠ´¸•¯A? íg@7RÚ8›sn9½éMl}ÂÅûÄŸ´xëÑŸ.˜^ÈPyœÒTF;rcv²­„pÛëÑÏ8û¥^ý­¾­Ô}"Ð×Ê?Þ! 5ñoTTùÂr  >øsa €¥¾ÜWôÐ=ÎöýbÏ®úºß;û€þü'¥ŒQO\\» òU¢ÐÃ@zåp@ë"eØ3îgKþ2É*0|ľ±3ÎÀ†Žã¹‹Z.u”oÖ–úÃÓa Î8Vâ£Ô %6£kchÍìà¶¢Œ8-ØÐ³i€Zfz§‘IˆxŽ @T Tç–cX³­¥˜Õ“Nð¤ýíGbι_Ò¤ÂÇkÚìmJéQ+QÐÓîs@T,hÓ´¦«µ¶0#aÚp[fÿäðcfYÙ|ÃCÉ`ß{¿I‹’ÇVÀÃf«³{Þxg‚è V]Wí«¨Ã•Í‘i÷L,ií(²RwÎ릨#½ÑNá“>Ÿc]'4ñ[j?ÖWÊxy2ÁgªûzÕÑÑ +§”i8 +ÏAþStD`LêçÏ|pb€fúæÎ‰ãRýiã³~˰á9¸ÒQ©ìÔ8Wi lUÞ"'×¾H¤ +Ï`ú£(c±WQúc:Qˆu4ä ù¶À‡v«ÙwP0×!µä&l¼ˆc-€îÈ?£¬° l¼‘uéˆ[Vß'æp†Y[@›5ˆ–+-¢k·ôl12{%r¯l©íþ=K *ا±æŒ0%ž d±A4„ Ñ^¥>y[oüzÆ•¬tW2ã®àáµJùÆ£dömB¢*úìË©,Mš ŸÃgÆí:ê¥L:PÚ¯k4ñ¤Ð¨ Fæ“j±ààgBàö…?ª3Dàâ2MvÊ ðÞ£ÍEëþä¢ÈÑD™‘hÝ¥7êƒl‘ K‡mç~lûŸË?ý¬G´»Ôï’?Z@up—Šþîë[à›pL°x}ýùü2ࢯ¾z–9Zà—Ì–¬.¹ÎìO¤lûšH‡ñóÕ†”2 À¿!FK@ø:sAüÙpD!‘ÁKºÈ¾¥÷mð®n_øÆm.}Ó†¡qT–˜K£Î#'ë÷†I%ÑB¶²q—ý‰#ÒÂ;]¹ÍÿT$§kq³©žÂN=¯à+76ÆûH;¸U€@¤BJ {ᤢÖv¯`±h¼mÖ*ôâ _ºÃiÓÎбO¼µKo*U@án–ô$´õüX³ ˜Þ¡é£ s³Ânu‹…,íäœÎ, +(–ž‚Di-“YwŠ>êô¦·5#m“£ý²è ­P05å¸ú;-i¸Ï6F«ÁP«‚¸M²ÙD厷<³@“‡´¦÷Õ3þ+6þ-2mU¦¹Á!gûÎøÝÜ-ù‹…Zˆ÷Ó.ªÄ(6¨Ÿ—¤/U@rWNýÍ›=¯ê(óy/¦=V?ÕZÈDß±æ&ø"†ZïSkÙ4ÀCL€‘Ïí°û… '’βÿ£}”ìè/l†‰A"‹â5ë'´pGd,€rÀÐŽ"¢0*éLù’©Tl0ƒk!¤áŽ€tÅX±¥Ž«Õì@‘OÎEH"dIŸUÊé~ ã$÷±íPlh«Ùv À !ÓtI®ã»K΄ȥîN(Ílï\]ýÑ æÖ.¥™ÂÉL)gºÂÂDÙàôß>†³ ‡=ʰ£¨kgá~)öMì   +`ÐïU¢Çö‰µÁ„öl=Êð8š‹ÙŠ6'-O4ÑÅfižDµÅGsú1¼!¾Ç1¦N†¡ ¶± '~>w±þŠ|HdbŸŠ½Ù)Œ¦¾ÿ¯ Ð5À³/¿úò&F9‰ÿ–,¡,Ö +€ð÷Ìë~àüé,&1ož÷_Cñÿ1TÔ”öy¼X8µON jÚSíCF€ÑËh0®/Û\ú;ÅRœ£xÃf³NHì822P‰ì³­ÕU"È\ò&B¸ŸX&¹°Â“Òl²ñð°1ÞǨ€·Ä×»@…Fɲ>Ó­ÌFk¨ +¢È_H§;d›*=¼†(Yé¦r ÉÇÖPáX4È;³ä\qÁ]ü$’?÷FY1—æÈJJžŒW{*}½¨€÷Τr¥±”MW¯:k<>3\ p8û +•á[,€4/K€D›ŸÓ¥Åjk‚<ìDµî¸©ËðÀG{¼Ñ‰ÈeÎ-Oünb80v½ËDø(àyƒþÈê4 Þ0º?d¢xöí€ÉçC„et-àR¼›QMz§ð¼ÔŸ1?:@¯è~|&ö»Ü7‹&Ѿ +¼YóV±N8¤…Áÿëׯ^ ²?Œ*¡ÇC ,Teû)ÝÈ(¬Qb4_h\ÝjÌäMò +?xø^pG + åëÈÌñS0¾Pn2M˜B\áE*g6âkI¤áh@¦&'K€r¥©Ã|w,œ)KRPáô)å"Èy¬ÔÉÔ®v†âL+¢™ÒIçJ·ìT9ÀPú»O´krÖ²§Õk^Ë\”Y?òçÚÞ¹¼=X˜ÄÇ¥H {k4Ú{—tXû6R•Í]&jô§ +/}+ùεÑZ[nhY–‹µb;N-F)´gÕÅA£)’v´yñ¬%²—D6mÛ°oíéø Ôé±.ëºÅØRz=-–ègõ€‡@+­cóùùè +ðÁ¿Æ|÷Пç~ÛÇ=À ~§ÏQd—ÓFNÿ:cÿcÇI££Á¹:f•€.ÎiºO!›æca¨˜Ü=pf +tÀë—ƒî CŸl¡T,EÇÈ#°ÆžAʼà‚àìÄ€ÐrJoâ økô=9ô8"WùT”!¶¹L—oO£¨S¤ÌÄG»,Dû”kqkšM6«é6f ¿_J÷<èEуõ1Ã/áC(mYÆúTZ4Šƒ8 +ÂMÙ¥òEäf Gª¬gõÎÖKx­”p3—P¤—JÒýk> +ÆyŸvSIˆ%‘öP2Ýh£½ËÛPãÁÏŽÈRpâ-ú@©¤å¶Gv+¯ó´=f»œÌ=¸ú+lª‰Ñ½¸ æ¶)ui0À¨ –VeæTˆàKÔ~ÇÒz +@—œøN>8q×u}h§mÕq(ã:ü¢jCö©³¾ßÒ‰W”‰~UÀ§™tÉ,By?пöY¨ æ+”oí'|‘÷‚W>6á¼ñÏu–ÕZÊ‰åæ‰  <ê÷ˆh¥~¼à ½|ù¡*àûäô°ªÀ%cÞþZ»HÔ`°ß±Ú¡‘i¨ˆë£èÃ)ˆ8Š“«šX£"$©(Ç«7q.N,€4Ê)€´›É´¡iÑྜ)?«Áq%}*˜½Çˆ¥ÁìŸt›¨ÑáG=D²P³¼ ÔsÀZw;”J[ù4Beš·¯àŸ‘Ýa±ìIˆÎ1£w”KV(šl[œ}ˆUÝ@;?7Ú;™>${ ½ž$¢)‰3wµuC‹­šý¸Þ +Á37»xZõG;1;4Vm¦¡õ@zVb ”‘tv/Ë?×-IH[ã´sµ¯8ÄYа2Ù3«‚ñ y¹ºð1³/ÁD +]é¹øÏ€ÿ èóÏEªP.ŒCbÙË, +mY˜‡Åþ æöÙH’ß ”¨Õ_Ö#æ7 `|¢?çËWß~÷ý@ü×èÇøáÇéY• æô”O2 _G£‹ÿèÆX™ÜöÀœ¥—€WØóó@§è×U¼^ L^|ñÿÁ–/0ó9Ö©Úa')»Ï0ÙI`À3‡Lò÷cèƒ,€Tu2µ;—%Ç} +à½0dVJ?Õ+_'Q3Óòl•ã)Wx%w/V”.ðƸu:úsëB@I*¢h‚ô@úHx¤mÂ20΢éi/öO|†é!&ÕverIö€7¸À"Œ¢õ4 µ½óÛ `ÙO®a+Ô{ذR¯È?3ÕL¡©Î4•,Œ‰¹cØ«R5@ûçÖëÏuÿpf\ajƒéZ‡1×\ÎÏg­?æ¾p»ÿò +/gþÂNú¤ÿìYpóüÙçÛs@ð“@#-†|)Øï¢K€¢;èÏ2@ à×þP9>œ‚QèŒ +Êüµ€š :@mÅÔßviüg  ðúÍ›7oç÷Ó?B?@é›ýP•¾ê8Íu£Ù¸×°›‡À›Ÿ¬Ö€ñ@ +‚7òÿó¥òÂ?÷èêpF3é±ÂÉø® °Ù² utЦEƒÿºúC‘¤HAnºdS?,è†(€váX©œÚsßQ@dPÌs¸0ü· † ;Võ¬"È/ÉÞ?ç_¯.þz‹@ñÒJœ¤·Ÿèº«ô“£bœéò,ÄÙ_;€i~§jÏñÚb[ïÖþ‘ì¢tstnhfÕZ8¢:•‹Ôp­°ï¤¡!rÚ¸ e!Ô¦ 퉆c[„æ)À`z|+xrÁ™”åÙ‡ØYàîxaFÎ7r•XZÓk&}WZè®1ǫ̀”H½¹yvóüÀ%ÀÅxÆ øÎ#€FŒ×ÞzA½Q~ë?» µ2ýC›Ъ«l“Í¡U´ë"ÖX(€ïßü0h‡~ø ôÇàL×ìDAKúç`t ¸“=ÿ½{9ìöY„— šóêRYF•\üEŽùaOñîæ€â„÷Å_ã©)Ê|’ª">DÔDÉ&“Ìwïc ßÆ ½× ¸PQTŒEU©xôeÐvoÁ»5½Þ–÷Öè°j%­Hš”ìe¥Ý¢#õÈžK æ"‹ZéŒ$ûņܾø?¯.ÿš Tg8ÉöWÒÓèi~Ú‰¿tåŠÀç ¹²ˆÂÛÈÉû1ÑÆÙÝ%âly-òhçg é—©ÿÅÅþ̉§Z³ç)€“’]Fä¤+í¢A–2 _ nðäÒëŠ'#kGg„üûöì‰`/ê tƒãb`siZ†n,<À¿ìwŸßhl¸ç4¯?îWÃÀ²j€\¼úàܯüô/€Bfèïöª¯6äSÎlUØ6§ÿÑXßi ¾ÿᇟó;½ýáÍ?P3`º§]˜(št²ýc*:èW,€ÈùÒ°rÛ€Â'Dãé3óC/F®+·Wnø²fÁÕ-ëe!âAKF8iœ2M+•E`ÁF UK‘Ñ%d¥Ü]ˆ€ÂUhÈþêÌU¾‡²F½Öºq¬ 1•(šÓÛ?&©Œd[I#ƒ‰Pš03‘åĪdÀ® Y¡$z”b®$]Ý^8Ï‹,¢é<:@{à2½ø×ËKº*ÃA*Õ[`1„ì¯m“-]™ÈÆ«³‚ôöqRìz;Æ[eÍÐv—©•„Ø*Ó4M2_;{6ƒQ‚Eâ-´¦ö„)AG){©eBÚ¿ ÓÑš#HïîÄÏnn¯—¼™õið 9ó‹$íý†ªðUàŠ5U€ÿè!99ƒQ +hÞú\dÿ[ö]È›:&€Þ¢Zk>þ®.®/ñ¹ÛPQôާN¼þ›P[F‹l†Ç›×±þûàÕ·¯µÞDüøÃO™ïú ³ÿ§úég€1£ÀÿO?ÿœ¾(QUæÊtÍÁ`̉ˆ[ ïì}º€“¦e `×÷)€ò‘c'¶«¿(»B½¤0¸t´ˆ‰íêÅÅ.ÆâªâÅ+7:ª14Q]jR¬úôwÆžK|öQâRi 7o”`§9# úݳmßÒÆVq5iY|. +ô^v™Ñ +sɧÍQa˜ZPvD©‡­m‰Ïzì( U©(½=cs—ÓOöà ÔCK¸!hCM(ÈM³@{“ $Xl³ós‹9ÈîåÛIÉк%o„›–§µ¦1—6>{×&1‚vL+·‰ÙSØš&¦½k”ß°ë¡ôTÂãЊ1vöyç7EÔÉ¥cã6è»îX„Š1ÜxÄ~±òÁ]&oÖý¬ýÝ|ö¹@ÏOÞÀ'è+ÀN-€>xðç|„ÿ¥8çjÀùÓk[“H“v @µ„hÕîG²þG?ØÆ7oºÿ§pjüøã[(ÿI¨£~ àW üøãÏ?^=Õ¹›Î¢ó»‘1Ê(eŒb0Ø.N,…µˆÀ¨G,ÝÅËà# úºc`Éf¶Oœ#o%9µaý¤jËn + @!ŠüÊ•¸¥©hÄ:ElŸÄzg¥äiJ/HcEÆ®@ؼ_e-ÒF`uBª·^Žä•GÊZ?‚cîP¶Uä4â!Ö:†•ÈΧ¤µ”•Ü'Fybf¯4Ù¡ôýê'zé/™ní&×Jö“)2€—Õ•õ¸DQ¯CR¸Ù[§`i<æÅ `Mƒ¾²Í™kýE>X]ä\`$ŸZNª†‰Q£*~BÉlSM¸ûÀ&ÏX¶OGoºªýuçè‡Óv‡ß¡0rF%2B¥{&úâ+gqŸ'€(|êˆø“„ôçë÷€\¸ß<ý<ï=˜ú]:±Š|5p÷E ÇçrOr*9×|õ @j_'ö©Š*Ëc™îƒýÑÛ€KÀϱ€ûR €@‚¦BiÖ?’ï-y<…Ëo8Ô&?þð–(ηoßjk|÷úÕ·ß~ûµ4ø‡–°íÜ¡|1ÉÕQ*\ã2ÜN +w´‘J„Wddÿ]‘VH‚GN • ñŒÄÈP"(ÈN6"è¢vM¢.‚ǰ¥)§ÀˆÎÀ4HxII_Ïø„X§ñ…‘jÇÿìjÕ&è‘¿)Úú™'ƒ*ˆ»M±ÜÅT.ÿ¦fºŒŒðæì"<í' ¥«¿Î&†fHÞ¶:ªj'‹YÁfÑoÉè2;" ª¹Oδ:Ih‹˜}¶Æ»µÕÔ3ŸL t3J4îøL‰'Ÿ÷°YÞ¨Ñf!ü[O‚i{U7‡Ÿñ&è¹>uÐ?@ÆÁá~z1è3>˜Çen]‹7ßò{8!ÂéõͳçU7Ÿ_î„ÿù{þÂïa 0Ykl¿û÷ô©¿è©g’U~Ë àKBy +@#Ñ)±ÒRã9l×SøæÍ;Ov @8o +À%Àa€ó‡Q"\ƒ k=oÞþð#7jÀHU‚)Q Ò›j€ï¾S|³(ð Àî¿W\œE’²—•éÃáF¨|LY€²¸Í¼–°ûÖÙH…Ÿ1ìXFx’ßX§2eµ½æ„‹Jç]9EZbÇXV¼„¹2.©bkÕ@2e¡z>°U[ +h NDkÇ%HdÔ™Wî¸{cÝÛÆ­ ×%@:ÊBœÎ§–[˜i"* \ F/fƒ>QÖ¨º²L h‡XÌð àGõÃ[-t@£îX/c@ßÔ¨ +°û1w)³GbˆãF¢*¬Œ~Žˆ+á ‘*qVïX‘E«³­@L"†û‰â¼&s˜c‚ø¤9¨$\dØä$Bä6‘\‰©!¼©Eþ3¥1â%Š$·-Çä¡ð&ßi,<a!dãýP4}3A[Ré'ÃDÛ&$ÕõGÂfŒ:ÓŸHúS°úјœ~l¾7ž[¶PÉI~ïÒ±ó>)2ZµLAûT9pS5Ûµ«>šohJîÈõ@¿T¢ÍÙnïhûƒ`—L»†^™a‹3?½äàc‹ýS €Vë3‹›{b\<éð\Ä^¯˜„Â? ½¾é;@7Ÿ?½qÿO“@pÍ ÿ#ê¯g½|¸mì‰ê«Ìó­:ÑúhfþOìâü“ìXİE4†¦½yûß™ñ ðúå«;{óû,ÿóÏ?k4£Î胵Ü2’˜ìüè +@°,€×¯À×ß|÷ꇺ˜=€m@À^T®]‘×Ȱ'ZÄ—,†Ü(ü{ú`1Šø …ç8‚ÒlݹW¨+U…Ie¡¿˜ôT®u" )ÈÄktóYCÒˆ´qE$‰ê•™"uåj=©Á†qU]ˆƒ(–@ÃÏû ø=òÉMäv)kgŒ°ú‰$)ßH3pmò({‡@›nÔþ±Ÿ9r3¤{Ÿ™)­Û™û·ßªˆ(ÀÂ3‘„¹saÛæíÙ_^þ1­€^$z9%lMoǦ$»Ž¥¨©;Ð6Άœ1ÿYiqáGiá~¼íð““J©•ÒqÁù`–9¸ù®ê€"^¼ymÈX=®½Õg –Ϙÿó¿7Fô«.ÆÔ?ÒÍSÝw#^% à@_¼«lÈ'›ðI6 ­ß§€mÛ§?‚vfáÿ.ú]¼ìS€ÙØžŒ¸³`ìX‰$jߘ%@À^ åÑbÑ»%À_óúuÇ`HÜꕊŒ¦«ÁuàØÄ¸÷ -©åº@€7²P9UB/GUÑ-Eh(—º½È”X”–H0J'ÔO(ŒÅu"Éj¸õOÉd°j–)nlS %Œœ)Rá7žØ0¨°ÝZˆŒƒûs¯ŠqNÈ¡Ú@È4®ýdëL—«w‘¤òˆ¯ýnx¡ÙZ Ú,ó4 7×RÅO~ú#7ûCXb9§Ã¤W™Ì]‡oãå*Éh¼˜°Ѹ±ÌœU5½ƒpÊ•¤ø-Ÿöz­Û£Žò&lr>:sY1ÙX6ÏÍ7ŸÚøÀLþL÷îÿkú«ò×þ5È. èon€wâÞ·ý¿mÐò® ¿ß<€|Aö»/0€mËB@zz.ð߾黯ޱ@öa °,€‚?Îfwܨùožehÿ·Äa³\ŒðÍëïLM¦±/‘[Dz0—´:jxóóc!¢j=·þ¨®aª0§‚2ã*6B™àg¦H„"C‘)µ(42CŒ% j¿Oç#³׃dãÉÜ›·0•GøX’à±KŒKB"||å±·u ª¦:©ËtydõÜžh?¤}¤ž©HVGÅš6»`qßj™F@¶˜hYLEv¡wÊ`åÞüp¤XVPÖ ésÉaUY 6Cò4gº­å˼ñÜkæ²’W¯ÁKVx²m”;l”¤x‰hÇOC’±ç—‚…} ?ä]ýÔØK?Ùˆá=¨_¾XÿÕü¬@À?÷ý߀¿ä·«N)¿A‡¤¨ä«€Åé%÷w àcþhͬp6ð'1Jé8þè,¼= ¼gàýpÆÐêo$QwöÞí±Þh¸°–÷Y;þ=éðùUà; `Y¶PÄ Çlã4)뉋X#›áþ +…nFÜá­ˆ‘È\“DyG|*fTæÈ®Ô¥È =K[´ü„½Ò1 + Mlíˆ,ýùïÌï2 'Ø8ãS"éf1-¹å(ûÞ×4snκɎC-Ó-Mí{'AiÌ/¯P”}¬ïY䇢úÞ¡òl;Ÿ[CzÇ3Ø}L&‹.œ£>Å¿=Û°D†eˆ`–ÄéèÓ%@3Y˜X,€î#ݳðÝ þi‡@ÅöôódøCŒ¦Ó¨#®@m›DnÜ?‚£\QÂñVeˆ0 :Ë47—&/ÁHŠH VíÜ%øÉnÁÊŒHÜÎ~äIœy-Xù“Ó*”Ç€a4Ed©ëŒÞ4Qí-¨”$ŸuzÙkØxÖ¢¹ÃS@¢YlHú RQ^YÈÜF¬Z „d3à=÷‘žIA;Ÿ{}Ì­É$–SD¦g’•« ¯ÁJf¸'ËÏÿ–©3,æÈ¥D”wœîä¦R>{êe› +Å¢s$o 7JqÏuðY¨ï1°gPṡΧÆZÅ;H烯”ïÜlú܉e¿àlÿÜ¥ö\øà|à`ø#?¡*€º +ÀéÿƒýLôgiHê·M1ª²( ‡€…2åÏàå;ï–ïy +p²(˾ð¶ÀÝ=€ÄZ} +ÐõÿÊeòÛ7÷[J.BÒA¨0n +ËšËrÉØKµ2ö|:úH¨ÉK€!ulËÅ”î4'kÂÂäú\1¡>/è`¤ÜåòRÊ%ŽßÉ¡¤"—MLë+—¦êEäad½½?]=€V_ï gn•º`ÍÜ×LúRV¢°w`féÅHŠ\¢P¼)¯qõœRÚàÕâÊ˦O-|¸™©4¥‹ÇÒK§4e)€˜ë éÃöŒCÅöììðNl¸¥ Þº)¸±ˆ[UÑ‘)J{ákDsêáLß76· «ÞËzi´@ôÓœ­­û` ç™ìÁ èÑ%ú«´Ä?¤=€UàkÏnžvÀ'ó·ÂÐßÈ +@Äü¥Þ\ûñôqÜoT|_Ìß‚œÏS‰¿­t KÀð­û€ï¾`ê{-Ç0W<'{]¬=€µ8îÄ8ÿm-€;GFq@ÎŒ#GèT¨È!%.â¹Sp EÖ™{L3iô͹EVþŠgK Ë&®ò`&½2T¡Ðûf·êJW1¶¶œ{ÉJ;”DÊÙª±\ýؾ¡‚Öo#Û àïS”€¿ €ð¬_ñ/¡ Æð+ã öý*ƒ|À™^Ð[U¬|• á| q#Ö›Mµ¼tºðAOîîÄÃôí`혼í~éîÀéüO+jСPÆj#íÔ(€HžÉ“‰„5m'ÎkF SDˬé*™çLÙ#ÿ>'÷qó‰$&é,1 Üp± ms*ç:a8S:ù”}óö’8˜¨3lO‚Š´Õå“ZS³÷–æD?m¤ªé.¸Ê-åžu¨À,zm˜©MŒ2Y÷¶e7sQéI2·ßLaãEtÑJý䎌ñBÈÎ Þ{"»{Dœt£@ïÞоDq ,FÿM Db+0çŒÍNsG)Ò;H+Táê@øUI2Ù˾l™ÔeTD ÜÒG1QŽT%PñÈ!á6þ_\gKMÖ€/æÿB¿9b ø ðgÉÿ ð÷§@D~l@÷ö`6ý\5ì_–TøÖSúÚß@ÙÄüŸ•þü"˜ÕÎ÷vrïO¸J"ñûÿž@÷ZDžî¼ûàdþ§ANÿ±Û~ÔŒëHB†²¢¿@ãqdYØeÀ!}r‰]é “˜!éë«ë#þ•øDˆœô„IY!5½Jðú0#Â2EÌ R)f‚𝬒ÅFÅŽ¡ÎÈ«íÇã-¤M0¥©Ö!ÓÜCr+é6_×Ä´ráê]„OüÓ uwQ+4Ê{¨Õq›¹Y{sGB—ŠõYbµ9lkPÍtõVL’#_`H”IŒPzšÏ¬IÅ)W-ôR÷ šŒKÈ–ûóÞRÎÀòö:Áô`oáxôžr£½WñŠ +àÙü[&ÿÒ¸ h˜;E«jdòôŸûËÀŸÂXÿ&|}Kò˜…Dý÷/¿vðÝ[¼ß³~ÿÑiüÇŸÞI,û·?àý9šÓŸÉ?`ÿéð6iÌê?eÝ ”9SŒ(DBž¦7~øþ»W¯¾ýÓßîÌÿbY[†ˆÏuþoÏ™¢ÀFâ9¸dÜ[3«’ad‡Y²’á—„˜‘䌭YH: +ZJ0CòÁ\±©Ê²úLñqVv +Jn1ã²ÀdùˆƒpI3s#±á™Ð[™±&&˜{;Rn§5Y´ìü¶1ñ©€Ú͆×úMC$½A?š1ÍO©Å»°G‚´U_*ò¤ÜW›]vö˜=·pÂ:\²æéQß(w¹È!ˆÖl1¼Ðn¼E—Älä*ãöÈÖٹȭzŸf§¨­kU¬à¸)Fb µ#¼ƒÕ”¹“ûõ +©Ÿs+;EÌ€.C a.þ‹yØ÷‰©>¨"p)0à³@fýXÙþ“ðhtý/ÔÇN,€¼ìç p£ð»pgù?+ɑРâ®Èßœh€Ÿ¿ÿÿ1÷?—]çXv•&Uftµ' kRU*½dA@’0 !Æ ( ŒÉ"À;©s•¾è Cí@BWÓþZ e"¨ˆ òŠW’(b£îœÈˆâ°0Ó(˜QJ40‘ûn>Ÿï÷YûœóÖKJö¸1yö9{¯ßëYk=ßg=kí}öyêÉg®_¿uã&Ëð ü„x`©iÏç–Óº–ÁÝØòè#Z!1û«‚äÛà½þØdP˜Xð"J&nÞ|žùÿ:º¢Ø·\ð¿³2>#¡Œ™§qC¸¿È#>`„Ç7<)g·‚Šè2ìY˜j¤R* J[“Í’”¹TK9”4ñ§p¸ ÅÑ)Óå9ç¡jè³|Æå¥AEɤùïÜ+þ˜ýA?gÔn‚ϼüʧ´ž÷dê/ü£v?À— ßÍð=ÁQ +Ù ôI7û(8¥‹îEUÒÙ3´"®¡Ì¾{6ÀÛ·n=õ™§®çÅ 7X°Jwôj¬{·ïV¶0ýs‹ß)=@àmWy$bà¹ëÕFööM‹™}ì€Ü¸yãÆç¯³òHMƒÿÌÿÀ6xKBÄ—C+"™Ñt@‚¤O8_D!²a¾r"¡§$¸DGXI˲ˆ=²¼”iJZЇ¥S9#$¥”iŒÅÈÿ|£dfKká‰ÕX{š_“†SŽÞÅÛ0AyfÍüZŒêO: +fâ…,WJ¡”—º9H²º³í·²U£äl‹[ 2¬Ø½öC²§:òã*Üv.LM“U „‘7 +@<¦÷â¹½Û€nU¦"®…£QõÖEªß¾lTΧÓÉFp‚µa:Iý¤eqÛÄ@‘×ÂÞcGÖS[O08 +°î—ÝY µ}à.ksÿ´¨vîÿW>ݵ¿øÇ`ée~DÊmpåÔà÷E@Ë +Èš~·ûóè?è?…þÅ‹ëÌß°ný› ÀéíÛÏ|ò)ðóFæ`4€aÌÚ¦ï¦Ó Âɯ=é>wAþm-ƒ»Lõ$°§vóÛš¦Ô4 `ÀsÏ<õ ÙjO¬ùÿ! À¡áBÒ13’¥ÁñãÁá.³g +BÉñN ¡)ä –ISØe‚i:C-tÈŸ&4™LžBëÅKf@’Ù••¤0‘2Ji&"W J‚ GÚ9Îåÿ5hJ垌¤´%¶RÞÛ‚´ §Em¹[Pê)ûj’r’ ®³S:.ëH[§‡èó^7ÖH.Élá–(¶Òl+“ ¦v¬y˜ô-2¶OÀª¿Üi± Û÷ô¥;†#G8(GÇì@Ö5yM»)RÊÁé¯(fù³ZûáΖ%夨è[þ6ªp`9Am çKkÿðH Sý`p¯u0acjpËú¿Ïþò `ï• Z$½ žþ¥±8°¼Ýgå¾õãÜ™3y °þ}ðP + Ëïe€r–âÏ<}øß`éÎb??æÁwA-.± ‚»žëÞÛþÚùBŸyþm¬}ŒI ™@D¢³þÏ€€»„*`â¹ço``N¤xuDñ¿YÊ"[Q u{ˆñKþ*ÔñÞŸ‚{bÛy¢g6ÑDé”’!@ l˜åÒÅk]– „*Šbd: uåÃ6éˆô)SJG=qÞ½ŽÃ¹Ù¹„§E¬1)J6®¹¯ÕNVg+—¥¸ƒ Ë•)9íÉÍ*‹êÀi_X¡{RA4¥%C ï“ÍoÓ7³vœÝ¢«Màêôme ">lxVÉ ‹j…CÎÖ mß–(”XÂ&^ÒeÅýÂS4¶:¢ƒj ŒHíødDåB\?²mB9BjlÒµ†uìQšáÅcìÿâŸÐ×ÊÍ™æçg· ä𤠴½Ø`·è=Á½»€(ÿ+ä 4?’ÝH   gøè]öPÒ­¶¡§@× ÿ™§Ÿ|ê©§Ÿ»ñ|¶æ!qî^ß­Á<vÎϦ(ýZÛs|mû;·u$ÄE€Ob ˜¹¡¹#5Ë m€VGÕÇà³:@ë¼QD•=r[¿xñ %üÈ·ÜÅ‹DO®¹àß™ ^îžV^%#,žBýéMÅÄ3á$Q˜HTDê)ѳ¥éa:Z„'WJ«­ß„æåÓYµß4ÇßÝÊ"Ïìðð^¢q½#¾@ù«Tª@TS«Õ=CÔa#ÓRˆ©ëˆ–]ºvíZÒà4ñôËdVZÅqU¿5tD™OlšÝg +›ÒŽªÛy¾F Gt¼ZÅ’mˆŒ–“þ}ìÅi ÇP­jpñ€«ü8|­×“ +1J±°.ké"umà䱘%8VÃ>¥ÒrJ_;ÿÓ{dZa ÝIXK\¨;¶îæIàu¨´Šm_®Pÿ,F \~|í¸Èwp€þP§íŽÃY+¯&Q©–ÀÙ‡{ÇsO~ò·?ù™gž÷î_@Ì$gú€°¼ 0ûm1×E¼ÐÚî 0ç“")O¾¸ß®ýOi¤ï€Š ÷o½ˆö ÞydÕá¬?Dz•cÄH‡Ìúµôz‚‘Y%ÛwÉD|MVTÁp¨3.™;ÓH„TÙ]¿·‡ÁÕôçs|¶â(`IùEàõ7pÒR~ðn2E*ÒÉ=²Å¤B¨EY] ðuô9ªµ…ŠqÈ"’_ÞŠoI©>Lf³…lýäòbBLÍ19Ó hÅ'ø|^pòJM¶0IæÌ>©§ˆ ‹ µw¹FKy ¨ëV@ ù±P4GÐKŽèâzP6]JD¦X#Im/—~µÞ–Déa:¸üñÅ3ÁÊ@¾VWØ{l´êõ#þioñ?Á‚>ºtGÀ_ à-€zò«þüö¿OÕ’Ÿû)þÕ)5ý1XŸ:{æ,\þçü!ɰ;0Žá_ìà?Äê{èùÏ=÷ÔSŸüÌ“O>s܉â*AÌ9¶y€«>8A€òM8•kì)Ÿ(@°>¨h¹Ù¼éƒÐ¿ñÜõ§Ÿzú™ëÏO;Ê Aö>=BŠ]Šà®ÉK#cìÄwW–ޏ” ’œ˜”D% +J˜˜cŠ(âÎ?ÖÐŒn]„èéPäÈ·xÛ,€£â}ˆ2LbˆòëéÌSYN°‡Í€Ècx*F«îQuik«Z=fW‚å··v³fz'φÑT QÑ4{4ýDø³#M&)QÐ%yÿüð°¦Ãù³”hx¹”â d ¥—œìeï“qH¸Hªi ”%/Dd0(ɹ\¸&ò¤r®É'ôÍbš#J,Ø„zNaËxJHI&L!)J"ª$YBK $È“_²õþs¸ï߀mèôæÊøëÐë`ûÐ_w pÏäïæ Ä +`mÆÊ·H‘=€‰ésgÀ~ö(õã/üN°H™ó(¼J¢ï)–Ïß|þÆZµkõ‡À‡À‹µ²_¸€@òݾËj@pÇÛQS À ið…§ž|òɧ¯G;ÒpÖgó–RÎ3±*ö™I± |Æ×Ê“‘}Aã:b•E"ÔrS¼?=¾ö¹`&ú Y”A«"ó*Mš©“«04Mj± +;&EZ Ø)ýCÑ¥…+|äG.\óš/Ïý„ùXa²¶ÜZ]R?M¨£k»ÛYÍ&ƒ­[Ú/ˆeuL²ê Ð#±$v‘€~´—•+Ÿ´ô9X!‰H!8Œ4±UȧèÔ©?å@iE9zɦyɪ”‘y_0áûÉ’ Õš”ý’–²š}`ü+Ccÿë›m«YüÙ6ÀµOB9kú{å²à÷÷?kúGà ôUw@ÇöÀÿYŸé×Fð>`J~ô$ü0sbCÞ퓼íç³xÐóϹ³Fxà¸À(pš?Xôi¿'[>È•'»7´®?ý4, ìwtʱÙÑòmW¥t"» ® #%KÚ%EÂ$‘"ÅÊ‘“dì.¶BD€rÈ5À'.°cÀ­+>ó(+ÊNJŒ¨&¸È M4aR^J‚|)UÌ­"‹’ë7©©!¼„"(®!w’FÉõE Õ0P3†ŠHœ¢¬„s;'%d#QÊþ$Û§f±(Òël‘×µáéÙ•ÃE»§KŠ‹  M l'Ÿ=m‚ô·þÐI`DÀ)•)yM·DU¥ý°eQ1õñfë” «Áoð‚è–—®³qòP$)6À¦ -=Ò7˜´Ñà/¾k•À1ìKA鼨 èû]‡€öÿÑn @2›fþ®±ø§PÓPùãk~¨ÒðìÉ•·”%¸7ã¯?wSÚß߈wg¨,á?À­äð£ò\éUÄŒp禀&ûV€üñNü9°ÒP qvLz„?ß%;˜Ä9àç/žsÌq*f›4{eÐ#œœ”Bœ… +·,ÌcDhŠòÊ› "¶ŒEšô d#s¦$Õ|â­LêÕ¦ýf  {-ÿçë4L2{‰Ür1oŠ {~8 5P±ÐkY*]zbõ”Fsð¡ŽÞÐÖ‘Ðþ©Ÿ¤z°Üô}‘̙֤ipg9tù†pØ»M&úÛÎc‚nKà3(Î&ðñE«£j8£ÔO:Lè§ÓûÈ(7"öµN›”d=dJ¿Þ·vçëúŸºÇºH¸ªñ^5pûþ @­©üÑüñ×§}HÐþc䮿 £4Ð)Ç€m±¬Âpö¬¿xüJ)ê÷è˜F0ó©µ (ùKÀçžC¸ýŸÛ~Ä7(·ÀP1½)€ÜØßP'¬%€àç{×%À²àÒ r«bx¿Ñ\.n^îùe`ŸFT¨R¢ŒF$³”"RÀíž6>™,ñM,s}dpk„st REjq‰ažœGTSjàö¶àâ¼ü¹0DX·\íÒR%¸ÅÁQÐ@™A@©VÍ£M±ÈÖ7ŬÒÈ; +àsž ú–u„-2%wZ… óž **Ô¬„‹É©RâH„IôÏEH™0`‰>H9Y¤—“ J“Œ¿žÙkðäèäë8Æ•?\5…„œÅÇ­‰Ö- ø¢ÀuKýi˜‰ÔH¦u`w6@ €lLçj›½ûÿ„åÀÅ”ïB<ˆÝ§A·-€°ÕÖŸ»€âß{À_'àÐ@Sní»8ß_úà9'×$:´†ÜfßèÖ oÆqšYWkÜèKg|¨öEÀ,Àöº  %@,€Ù¸ã€©ØXôŒÁ‡Û]€2ðbL€h á`GnF +zYÇ¢,ªȼ–Û]쓲dÆ/E fºâ‰Ìžõd6$B© +ð•NΗDé³>Ë3Q‹ð4_k)rHˆ½‘’­ßTÏ ï€K€@BÛÿ pÄ€ƒK¸±|ÇfuŸé£BÀ9ðÏì¯0™&Uè¸ xC7o?üž-ªÚ7þ¹Ã°Q-€c{±ºàËŽÒŸ¨½«W®FçùÄcTƒÜ¹éÉ\ù"FI~t@³±Ú}7b4ÀF^  +>´ƒ„Sç¬õ¹*Kj¬P””Q'eçÞ_K¨6½Ž&MòxñàRêqý¯Õ–€…u Œl×l—œ¹}ØtlZàQ°àÎÿ‡W¯ò©¼Qè½»¢T‡ÿª¤Ë ÿäû á!%eÒ£þ"TSp&î¡à{!Ý«@}¡3Qmb;V§fŽaª-ÿî,=òiô¶©Ã™4ðϺaL‡èÄMÀ’·À&rQhh¦¼“8-1<×Q÷;1CL$ɉ†ÑT-ÙTi™Ð^„$KA9QK-€`¤1ÒeOELÓB“·XŠUŠBêî@XðzI…±2D‘M‘#†¥â~¤±vý7_ó%'¿²Äá 3yÊãsHô˦¶ïî’ôÓë¤à%ÝkÐô±†Ï¦¼¤[dä\0/-ð·Ùm§¹H4Nuek @Ñ$ÐΖçŠÜFdn,oçý ‘RªKÚToêŽíØÿÿ†ÿðg#Ú{TÌöÔÁ&Gqò÷þÞg£²òg™\ ÀM€íQ ù’³ï€·”›L¯*úÇ Äf8¦NVÅÛ"í7òÜÝóÿ9ùûŸEŠ/Ϫ>}áÑG/œ=] ÎÁ;-•á+ŸRÐH7F°h—ÙXŽ®q¯Ñ¬ :¤îÌ0mG`ãµ`ëízˆ-¢`‚PÊŽß…ÂÈ®Fsa #¸ä݉B%NvsçÚ4S½¤\X—etfl± ܈Ød±]ÉädÓ»áÉ$:Û"Ù‘²é\@yAätDØ[\j#Ëék<´:¬~‚Ô/¬MÀÖ‡|‘yôØ?DÑ'FOPXLƒVaµEž.Wc:¶#©_;ŒÅ¥ba9¦NæoM=Ñ1&±Bâ?×€{¡yàÔz¶”-ò£lbtŽýßô£Šÿ°òÈ + 4: § ¾èÊUÉóÙ«o)“Í€º`#0ä³€}`G0ßÙÖ$`Ð,Ø ÇMéôÙɳG›õò¹[ˆ©xÀ:¤¾Nô˜pZß–8>£Œ68‹v‹Á#Oë• —?uåʧ.È9§O_u?@ `x +Mm»acü;ê+ÁÖ7c®sW»¾}ªlÄ=(¶–†'J;!–Â_©sZ!q08±;Š4OI)Óø,ä”Zk¡ê¸z‚CeâiBH ”‚ÏU·!´SBL=\»½¢,Ø`NÛ#.“îõ[sR@(Ò§ >Á÷–.A^"{I€:†º÷Òj·¯y¡Î-uÚ3^Ût{ѱE$È„žVˆãÕ^÷@Mš6“-axÍNvyrð)`‡¢4üz/د> ¬àžôû%甦ÉÖì_ã$õSñˆöÉäûY ÷sUì^ý{ŸÕõ1øþcŒùudÉðFAgL‹ÁTŠð0ü1$œ ?Øô¤êKXwîÜ`ýž}|i³¬æ –*@Ü HX9¸€v ‹NŸ +8² üaûÊ•î_j\Ÿüó_ü|Û¦„ãê_'lzcÏi8ÝÛ^öë;àŽ}…RAˆ(Ä¿¡0A1cÅÖ¬ 1ÊšÎ,BJœò ¦¿IÏÅ ò”Á¤¥&‰ð)FïåH¸Åš–+ymV¸ÕGLNm’ ¥ò(€!3ÿÆ–‡”£ƒ‚¦ìé&‰˜Xþ=$ŸUXv~SnÉI²õà‰DÎQÃê–—CÂáÕ(€ÇÄ ‘6[ ¥vŠ}_À˜2ØmfWW| K<(µsVzÅþï4¾)à¿»¢ßëÄŒ + ³ê†b@ùfPÀÌÿÑ'|ó1åpïuDûd÷@¨2Ç_½ÊúýêÕÏr¸.²MV÷†qUà! À?þà«BöŒ†C:sú¬ïÆe>.ÀN}’S¯(ô÷Cé›Ò¹î .%PpúQøyT ÀЃ®öe4À9xÚ%€í¼úóÒ¾2Õ‡¨ó ›€þ½7áòÃÞŒ·#Pqpm˜ ¼ç$@¨’ q½DtÌa*Í´KP™ã‹+:”§ðDÈÄ ‘#éÍÃìäU¸Ž´%5§™¶Z¦ln¦á\MŸóÊœÍ1Ýžò‹#ŒªŽH—!v‰!‚S¿Ù‘Ñ´ƒªŒñœrW?%mâêQÙÅ14,%Ï·~‹J·$Ÿ'@xšruÏ#y8£aSF‰ìžç[r¨vªFžeÂFà¶ŠÔ«ÛL Ö,méNçY‰šÅRÓ|Xö;[/èÆE¿LØN@6¶«y{»‰ÓdöÏ@DXd#­Ù>™r§.jàq0Áz€øÐC‚“è}‚Îÿú(1è¾ÜÚ¤¬ƒg†.``ŸûŒP¼Új>1úKhîÝ¿E ýЭsb¢¢Μ9“‡ŽÏ}Ú÷œŸåp;0ÐW|JMð)UÀ§ápþòO6øÿùÏ÷€z%DáØwæ§H¤p8®±b1-† tÔpÉP(F(^¥…s†t‚+Ð…"F9t§ 1\8.醦$‡ÞdÍW™(S2ƒàÄSžRYõ°S{RÎI1‰á>fàXg¸Ÿ‹¤˜Ë±™ÜʦŽÖ—–ÀN:ÉKX= Ÿö“é&¿Ÿ:ržVmø–kó&?1IZþº+þñôádŸ¦„VöLèñ´ô±c ©•Ê+ßD5våúλ:ÚËröÇÄŸñˆk³SC†LhCùPR5@üûüO„ÍNµ Zœ”¡‘í à¼ô/ÀTÞ@ê‡CükD3‹JÇ@µºسˆõyæõß6ÈÄãWÆþ‡ÀÙÌòÿ¹ õx憚ÁßóÞ}ûí·ÕÙ黀 pŽþ ø7©ØøräUvåÓšø?¯øÅ®uGS¤æ¡þ¶¼†*@ TŒéé%\Šßæa¼òÈJ¤EÁm&ñ PÅ Ôs• £¥ +MRš‚Œ òš%R*Ž{ li&Ûª•F* k$ l¤ªT‰%@R*§¨¢•ך"Ü’õ6”;)Ãâl„1œ,hÇb!ºu>Üù¨ÊE’˜:…M\[Ìú¤Þ~ñÜÒ·âCx–°8MÕÜØ¼¡¤Ü·lp+$r —2·—‘`û¨<'º^2XGú† ‹ì8r‚ÔŠ8}Qï| ò˜Ô•ÚúMS—X‚ýcµ>9þ.tŸLÎÄ>îƒÓ}qMãÐè7c 6'ï„ÄY•€7â¡l;Šº‡ÑO”Ÿ=­]a´¨ûZ?.⇂@A¸(5y¢žgoݼi"°ÿýоÿý >}áÜ©G9Á–{Õ¾gNŸ²ª h€«? è¥ÿ/~ni® •¦6I&ò+âc´,±.P ñÈYžËoÿõù? ÓŽ›14­Ã¨P(Vkð='ê<ÂÙ=á—ⲺZ³†®ÆyýÔ=pàåÈ9±Œ"ß8•”žRe*<<Y£ZDÉ%Ij¦P‹è7¬§D™Ïuñ;ülRæùÉ éÏ$/]B†ãóÇûm’’ZS‰<鮜Cá6‡Ô.0%?¸mgô¼O¦¢.¨ñ¢§£P&›Þ³ušÜ†Ä!°Bm®!ñ¦LH £Œ†ƒ¼¸¶ FÒÅ8Ó›Óš¥`‰€Súèùå¯ +H‰vn÷Ô¥³ÿOÎdwLam²ìYq,ø>‚‚à Óå ÏcW®.øz+0Ž˜ö’‹hî“@=ä¶|¶æ1Lrîì$––SÕ apFРšjëgJïás¹/úàRKé\Ð þï~TJàß?wúÂU4@,€3ÙëS`¤ºO_ùùÏúÓŸÿlgûþpA‚ǯ=~%Ú§”ç +OTZî‚þª£¼”BMu€Qp­)¦³†LÜÈRŒ” ”"2Žäðª7'Hp= ! +RHÉô­EçÜŸ»ô%(+ ,Ú¹(§–«o ó8oRDí¸òǦ ÉLRØi“­ Û1¿.OaIñ; "-íS-껓plÕé:Ðr}Ãg™Î^%U†Ù”vœì²é3.>Ï€\jASž‰úS-È îÉî©JÊ8òEÓæ°C©`7*ÑuÇ O+jMË>$d¡€{ð[ÊüoîhiÜÉ·šw·ÿßÚcÖºB×.=R }‰n±pe:ÀwuáX À5skæ|ßéµQ7‰mZHþ,`|_>íƒx›/Àã p;oÞág,¿ ¸Ò(è̳yBR¼ öÿuðÿƒ?çû^­qÒÿ$Á@my—óÓ?àkül›ý¥ÿõçi`ïXºð÷ðýYjàðxñT pH`.õ©!>¯ƒ°€Q08 .I™'ؽ½yüÅDfB{xI,¤<£çØ¿^š¹§é2‹’Ù¹Áá!E¶Ø˜¥É¢WÊ–¥)£œJð²óÊ…Š[SÓ +מœÂyr4[¸Ov‡lB#­ÏÛÿ”F)³– +Sšïê ƒIxíóVg>›§¡`FYr²"»¤õDkf¶m®†¶jØŽ25©KCÑ““’Y||6€§ ¬%†³¶AkíÙâÒ£õBɳX˸Õ@l¢ Ê ·¥¨€úžÿlðç,üw6@o¢“>úšä±"wG$ Ö>‚ +î<äshƒþOúӵϋ]¨žEÙèÍ5ók5Ð]8…€„Wêò +ö/÷)Á)v³T9™z!¨ r©Ø÷tŽé?»Lÿ˜h€xüàÿÓ~øÃò}{eæÓ—Ïÿ4$ò÷¶þ *-Ô />¾rÅ*KùëÐyÓè¨"z}þèÚçÈHŒ2·žœõÌ ¿æâ¤¼'X!vÄ[¹JtS Hž¢Úùv^"¡“ú 5É”f‹sõOJ÷”¡kñ¬íôñšE ½ +Ô!KÞi&ÖTe&TL>ácKn)žìBÐT_˜àQ@m¦n,ÈÖUÍP·Œªmüµ'0&ZŠQês„öj6 +;,¹p6(”â-³)ËT6~vETwæ#„ìKÏö!M8{5ësQ•¥Õ))‚ "OW-ö›*x÷4Àè€ÆBø«ÌŒ[RÂàäq´µâ¬ÝJŒµIù± + kýœ€JžŒóßPn(`Ý´@&Ö<>táísÎ’úª¨WÉhΜÑ#©¶ì +­òÓCÏ(€ãè™H$ÜoÌxÂ4èS”” -%`A<—Æ©˜·ŽÐ9¾æ#66Œam$ü“.³[&Å-‹D’åóDÀ¶di“HÕR«„€ò´~Dlú‰œÑ%©Z²@¢°ˆ·§â06ç%€ByuÊÚËÔŒ×QÈ]ÜŠDÌyM Ë<ï:£Í€ÿ]ú½ˆ¨çv}rl‰h[o]8dvq;Žþ¸ó)‰dG.ˆÞ– ÒZXÎ\¹Ÿ´Uê«uåüïšá—ÜXä?þ`¸Uþ±Ù³œ¿âSóÀ´JDƒõâ\×þ8ׯ* 0Àó7wKcè7H—¹ w}°éçþ,ôØÒM wË_õ ûùú’€¹°·€`þÿsmæûþÅ/\Àñ‚¿óÿôm£Éppårí»wnaì÷^ä(¥uÜ>…PöÀ¡„*oSIåìsGOD¬ pƒ!Qá[Ÿs‚ J– ÙMŠƒHÁ†à8¨å‘ü©-9!$l)\A¾ä*q¤ðÇ4ȓҺ«c•fìd<Û”vZ•kèTÀ—ú‘Q™Ç”û4{ËÙª€:ÅXu +±HyfÏ_ƒU´ü4øi°„¯™!rø“†4\ÓÜZ€¥S¶ë'&¿‚XD­;æ-ÛOtZhs„ +§ÕSð.î]èt_ÓkT òE}ÛÂ7ãçHò)üs¸“&àßþ¥$ËÐ+%•…Á[ÆcªŽ®`Pv"‰sº×ª0ôØÇóƒ`Ñ¿ÃóÀœçý›?­`\ÎM@!MçýÉÁ—€Yá¼  ÅØÒmwâDɨoÿôIDAT¬¼gö‡>ñì³Á?ª! €˜U?øóØ®ÀýÕøŸÀ¶¸À/ŽÜŒ’›ir%P…°G'üˆaV°‘á‚pm›˜Yo'ª!PÕ1CFxP»Ÿ¸ñ`ÓÏ×AHü¾0tI@ »§Ñ*dw6,“íÔ‡Ìn~S.u„¼êÇ!#² Xp6áFN0<Ä"‚yWヰ”âz"["ÉI7,–’ÌlU÷…™a±èp*³P'§;HÓI?mñÓCâœGˆÞÂûx2‘¬¾L»le|Xí‚Éɲ%“µ’RäW¹ˆ}u€À ˆÇVâT d ´³Òï kV…!á)zþ‡³€ëDʼç47 +@ðëÌìßÍñ+WްØûÀ\`,ÎkœÉÿ& Go¸ŸR +kr% æµ.µ†Q} +À^Âõ(þܤ¾7ú„€È¼£ÐE@Iüw€ Päÿìg¹÷Ý"à§UÛà.AÂîÕÅÀ‹}‹ÐÃ+–J„œñ­KA1…²Þf=ÁfH†ÄsÅ6öµ±d©’ô‘¬`“ 5zd©@ñîèd„|>$K€J¥\9C‡x,¥”(©v:Зʺ™­)íŒPÉ‚€ 9%a3•jìlõ›Ñ~â¡GIµ¤¬ öúisì3Û^ájÚ0rtñ‰kO¸”ˆu’†åAŠ;ª½ì]]¢<aZÍSã!±XèZ­=?O¦“öˆ¦8 8þDÌÉ”Za*ZÀº3ÕçtúÔ©  :n}ù a4 +.ѹ–ùaäÇ>;bÎõ“ÿåOû£9×êÌúGÝ¡ÅrÞé\û&ú”M&‚tç\樥]´û´ פÕq^ +²%7á\Üî¬{÷T‘<}æÌ³Ïúž0Óø£ÿe, ös +ú5ÿ…{ËXü7 …s•ïzAäç”­€:åúó²¢%Êõ …t¾Bg¿G¬G°×Žûþ{/D…‚›ˆŠÌ!GJðžüÅ© Æ‘ç›a®Æg 0‰[GÜK,R^ ²‘§ûç’HOË4(YQiSÈs/–™H¾dä€ú ¿Â§#ž£ÏÓ_;Ýc9y–R…TQÊS³rñ˜ç­ëYd^éâeϳn(™Lú3:D>!{”/4¨%Ù…Eˆ&îcD .‘Ié‰Ò§rKÚt¹Ë q޹ •˾ų´—M£HMŒa¶R倴˜ÔÈ9@VcD ”·uÂo¶ya:Ì,«uìÍÿ‘“ôÎàk¨pJè›Üp?.{€†ck0ýó Ðs.–/Ÿ?ç_ýCcxD»t0åJ ³aYæ#|· °Ó¯øü Ai{ØèÙ¾,Äê…ì¨~ðƒ=Àìºøô˜þN÷³°¿ îþÑ*ÁÇ¿º–±ÿQ1ófá}Zw”‘È'{½p¤3¦­nÛk p.+A€µ/Öž¾sg ÝÜ”CÁÙQãWÎÏ­ûÊž©A–IÉ’òý„ˆJî%”’¢6"ã4¼¹­¬Q©ŸÌ{ר"E’V¦Í5óüOÝ%9¡hë§˜ïø›ÖXr¤2× ÜQ3/u˜¯eŸeL„dk‡I£†@0•¡\ì<:%f“¦á\ùZ%.ûœaÑU®R(¼e²T‘­‘2[S/¢ZPãl@ã%„ŒG˜Kì/üó–~úõ()Ï‹©)ó?YaÁ:$b¡±._õ༔ TO€.pÅqfqTUBÑÁq~ tŒvé²@çD>n.háfžå z›N‰ÀxÖ÷„ÕÐþ]h8÷G tÊ×ÐøÙþ À_ô4È +üc‰´þ;·ßö6`€Cʯb qÒÁ»­;‚býzÞ»Zü›¦J›þ…ÏÊQÊiÄvÕØæÙжÃKÐ5g iå€Ü}Rò+´ %kî ™[Of?ºxzªH@㤠ÇSÒizVŽWÂÆ[$N>ÍûQJB:®~"â¼]º´hÈ4GÓ꽺¹hÛ§Û#ñ2(Ñô‰Y&2v9êJ‘õ©ð&¥KÓé4sS™#oT謺¸`¤†¬ÒbXžšåÕ,Œ! Ò#¬› e쬀<kÈ]h÷<Àà?9©HmQnåO:b" ¯ÓeÞ˜ó^}vìÎùžð^Y·‹?„ßÈJþAP-æ|·ÿ°ÜÿE½Z£Ðõ©;b œ¡"Ùû‚ƒéÜ +4;ÚaSSð¬/ þ(ïÞÂ/“îùÑÁé3çnl@ +bop·ÐògþwÚ `GƒûÙYˆ ÌÃÁ󟂇t*âù*r\) lGJ!W¤ŠQ$ÞáXqž¼®%À +"á*i“´’s‚B‘ "à5’á¬.a&E¢â¢È( +ĽK€2Ô"ó…¥:rÁ“« åh±À¢@ "• 'o¨lÅÀfô6<µ´”H?uÑo?EYŒ.›¹´B2I™Ÿ.H½zÚxYæJ„,ö¼k?´’–‚ºE½EØL…?ìFAUqJ€3Ѻ”êA5¤)…À]W”M*ó–c)þLêÎsî$*&ÀØE¿ðÎóMÊÎHxLsjKÄ“&}=ðÒªƒüipmuÄ? +äsÀs°Èäó¸[ä¤ý(  tUx…r°ŒÉÐ#¸·ôâ{‘ Ô çΩàNc­ÿ¥c¾åWôcˆgEp;MÕ`þöÖ³Y˜,›žçY äFàÿ"wTœÖÞßqûÿìoŠ\öM ·™ÿïÜñ ²s@§DBL@V ™ˆp*l +Èœ³ÿ“ÀÛfH{‚½C•¤ñʬoÉQÎàFf,82à oÏ$nHþ´J}À/ +€\Z ߨ?Šƒ§–ÐèH`\\6dšXIÓ±«¡”Àºv<ñ­G¥h3ÚO^´ +,¸<ሕ°OöSJ<ßú§Bϵœ†ûˆz˜ÌÙïÖŽÒ¡fÜÑnÆ”!~éc@FpOÅb‡×úôDð† }½~â“‘fZ 96)žúp*檀Yk*ü I®£˜ :aBÈKâŸ4«£¤óæ¯À9–Ào8¼pAñ÷€hñß[’wÆ–ýOÂüí4kŠîöG%ýB^ 0J"„cáŸÔî¤ã)}«mSØß.æÅÞ>@[ií™Ïæ¿Ú=ð0”›¹ðмï*  è¡5@7"¯ô÷þ¯pþqø„%ÀÜHÞIº{ H§÷6 ¡ý):þ~rhv÷ȱZ 8$Ƙ|î8ð+SÈÍ.½e„Ê4$­Àèswv yñ;’³,€Ä»´‰’›<‘dñÕLù–âòÔ¬)a: +çh±dÖ൰‘Š2 ëÝÑÊ—:§r/©:mâ›OBe+sÜ{tþ´º|(¥X:ØÁ»ímQ\×@¦iØ„r˜0Ã#ÖͩӴîå€fI6B\üKÕ\Pí–”J©M`UÖÞ(¤í_šŸ"r\ôoó´NÿØÓî܈üêåÇcHó¢¬ÜþiÜdîˆw½ægÿ†\$@ˆW1XxÓm$ö«ÌÕ©[ŽKdö…œý}ËÞïi¨®? Õˆ€Xþ«6 +üÿbîˆö¡þÂÿC€ú„·³é`é>†ôb|Çz ]rt!í­ˆóš'"qè?ã[Ê ©šÈ º‹¨$‘¢’b•˜ÈdÅn"á›Íþ$°Ið:&§=ÁSZááÉbÓ¬$Zúb—,Î|¶ôœë†ä¸a‰ª»¸IC;pÉb"—ÁÏ\iÙ!âIJýfØ6®UzYi×µD'T§,Ú¢t²¡«kÏžÃ=Ôˆ†§'ë¶OrMwwPì¬B3eH ÀdQ3¹[¤°>ÀVf1ѦRŒÙ)tÀZ¤ÐDÒyV›>ÚÐüÎÿàþü…ù“PJt&Îh€£Ç»È ä]ú#-cR€ÝóB:“{£g P`ó5Ød™ã£-B+²Z"‚HÑç$ü4”©Ö%@€žçc\¿ÁÀßn{Àÿûwvðß{èç?›=€ î¡R8N¾càm¬Jwò02Õ!!:™t»²9BNÌΖô$¥@Í#f-©®’ÂI˜ð‹xih,8[•ù‡¡ò„ø˜(% KfÙÄv“™æUÍi J2çF,<[ÜvŒRJIsÙ( r$74‰DDâ€{û©Ë5y•ÅCÚ@ûiÊ*YÈÑXd©o»@ ³üÚ+Ú¿ Þ*ó¬Ï'§Æ;iSš¤ÉÙï iß%¨'"ìJÀ>ØŽXMCgR Øîè“T4m µ’Ê-B/“•äQQ–Ac'Ž.͸WðRYN þØ–>˯)î]€«Wÿcä ‘ükš©>à&¯ÐV! .êW²€{§ – ªñeî:hybßGÐÍ;9Y +DL§œ:­  _u `wûyüG »ÿû÷ÿCó?Ûð}~軈ÐDõïÑ)¡,ö§lzyn[ohc$4ÿ;Z—ˆyRn«¥Å7éVˆiõ¶FdÀlŽüfé§¼fUh˜ÏS•7…\‘¨x›x\zgD¬%[pÎ\å*‰)SÉ’•dHD]ö©ð&ñÔj`/: ™Äf†×ðjCl$0¸åù›&˰ú´­GB΃}fÿAòqJ9\ï+ÁøÌIe#)¶‹(Ã\š°…Iò±£Å“iÊ3Ù€• À¯BrºUt»¨ßóÝìÚ\7û§LyÔQüÏ*€(:1”ý?ÓÙŠU±þý/ÑïûçðDeþÇÈ<¡³¿'á)–³ +¶¶¾Íðv_ ‚‹Mâ·z!dªB?z#®óç.R,ºÅ8—:Bú¡;þu¯30ˆ{ñNž€w}RpÁ?›€ÝÌ-€ŸFtpïé¿’H¯xH<~øÃCžø0¢,2†»oˆ¥—[oª eÐFœfX #´*]r”ÝKT +ç.˜ÑĘZ²Äè ¥™i Á)˜âh¹Ð ¶'wVÕPäi3>?ÕÈ*U3Ó°H”ÆõNÂÅkÔDÞ÷Ge©˜ÃÒWÕšç‰kk¸N¥˜»ÿ†èõ”Ì‹¨(GxL_P=yÑ-€ï5œ6ðàáþÙÓטV„´Bãçê‡öØ[:=‡cNóȆÊs7,z&…±ö‹_›ìàáZ­J9žÓõ)f-« +ðÇ4Àz"(7M$"5ÊJñ_@-™BÿM(c °>çó_ZSþZÇkŠ@¨|cßP™·‰ÿ|;ck 1:’‚ù?¡ž©tÝ80Ô) -4@ÊÞ£‚Úõ¹™_ã‚~ix=u] àmטèIë"ÀçvÀÒAÿh€lþI'a?¤ÀBh½ì®u?üRðQC—éfGŸoEGók†‚±u̶±î³‚yøU±ÜóŽ[G×ò¦ÝkÞã&DV†\P`‹-uŒO¢Ê~[bþ§”ÒMÏaqÍ¢*žJ¶5EàCÃûÙÜ8 ”¼tzaª@¸—Pjdèòce–BH†ÏZ-Т(ƒò`&Lq6Éðkº´2ƒ‰eI¾’;D†vÍçD¾Ã8—§©“6K·£ à{É´KÐÓmvÂHFwXa¼©>áø£¢ã¶[òèGH–¤I¨'C 4£—X‘›ØX@¸øæÈ) s~ ¹df€Òfж³ì "eTd"žÿk¥=AbþŒoïðš:¼põÕÚà?;‚—?}y a[lרîöô¹ °â ôç~Aþ<0Õ°2½À¬ŸnƒÌˆè>›k±–MDÿÏÞ̃XQEwDÿöïÇiÐ~Á =¥Æ¬þO˜þ¡~ „õØGÂ3 +¿gLEòv€¯qòâ#ÌáOX\‡TÊ1šŒº5¤àt(Çv¨Fp‹h 0öRï;è\逅”—UÄñ霕c¥eI6»ü”% hÒ$j#má©UY?Á)WGR)— “=ĵE¡ÝR„ñ-ѹŽÜ|}fÐß ÓSGG×¢1ì:M¥€%P1Çå^¦†u±j01”–¢Ã$Ùˆ”’x»¨ZÚœ,Â,yHÉ4õ'gÒL§ÖàÓ$žhSümeȤMÐ^ÔÄûÐ1 çhú3c¸¥·€Áÿ2ï*†ÌXÕ¤¿xÑÅþɤpîÑ K γÀ¡1Dq•€ +@·°‡Ö«¿€z–%ŸòBÂh) e\¸Ð‡B&`MéË"Ší{–à·o >¿;àÙÛÏ®MÀ(€Ì`ÒPtûo[ü/´Ÿ@—/ä—©ûî‹h¡ÜˆxˆNR‹<ú9Âñ*J™v˜RîÏ#2ˆØSˆ°Ðr˜¿e„RØv¿¤rÜáŽ2䬶G†cÂ"| OÙUGÙ hÒ*—r—€h¥Äd'Å$´.&G›âf§(ñHô”gÐï…¦ ?ÿHSHôà+S@‡èÏ9Aû Ÿ.þi + öS5eªZÅèuµÞ‹öyC7ŠÏ0)%Ù{Õá€P6Qâ¶ÌÚC M&«Cyé’ #¢‹ #Ñeq¹„Ò=Ý™í=‡gê8»i€ˆ×U€m±$]‹vK€jaÏX¤ÿÒ„PrpjÎ.ü»úߎìºð(øù˜ól~)¨¥Aòy£.î[ÁwN„–]à†¥â$ŸÁ³Sè3‰nO\8÷è9ášx½ ýqZüßÈ]ÿ/\°?ÿoK(Þð´þÇâÿ¿ðOïbPwà/yóð 4ÿCO0m;e!Ϊ DP8Ÿ?„D„ûüÝZÌv>«Ø…”>FÝ7fBapwîrSüFH°C w¸KŠ49R %™h1›ùÈúRù–—`s÷,Áœ‰‹*^ËLi§4‡ïí+Î W›_Ë­wà´¼>¨h$òA%1WêÙ8Ò + Âò¨(@âøZ +ÔùŸÜ‚¸•’Ì– &HpNfØš€K@ª³-IÍ•OTtbìasæçÕšÛ©2Í"ª­ÔáZ!¼aqÞ)]ç•Àçúú×@{øe 2Úúž OŒ@ØpÂI‹¶ðÉ™ +g¦ïEôC@Ñ‹;çüû,7ö5ÀÌÛ9AQâ9‘{À.Ì-€þ `êâžot€#ç[k*ï-Iw(2ÃJ·\ñ®Áé÷Æ€°Öm€Ýïö4€ø`ÁÖþ¯|¢k€·}!w|ïø –ðÔš2ã”WL0˜ÒÞWxµp“+ë_(Z™Ž^ðªà)WYÄ™k e„¯B¥B¨9YÄø R&‘å µÈF´pËÞ%ðÎ7a!/Ä­Ê -(ò!ÞÜSr&¢!¡Æ¸Ñ ïÒÙô¢xÕ¤ ‹ìºD‰7Mè‚%ýdTŠ+E È„fI ~e)æK«Ñe—pÚßôœ8ºt·0e#øæñˆ€œ.Xë5Yu½×¼©.'×0Uö×ô(î¸P¹Rbï™“Ïø¨,á·;%®å +*öC$¥Xíë™x©ù¶ü -ÀÒþ{ÖÅóçüûÜ+ùŸÀµ/¼æÊ)³º+÷è‚À}ߨ‘÷j^-Õƒè7ŸŸJeÂíGðÿ¨ŸGó‡€ÿŒsþåß-¸Øàé“314ží†FÔØÛøiKl+€ÿÏþÖçòHtþ£ÌæA€‡'.ÿ\èêñ¬`"‹¥Ùç‘×·HwScm+O¹½%D’0¡#gÐ60Ü x‘¤zHI¡T@{±ÅUc(Ë©! R§€!IÅWcì¬DCÄä“tòJÔjºdN"ÌÐtœÚRiÇ ƒ„YÑ01(è·wHþª2 œ49j`ãG´Ü>¥Ê å´e ðÒs@L”þd—À +ñ“/„bÀ• 4Ç —‰É ‰{˶xp>>OR¹ º©¾=ÛÝR!8oä2`)ÝfhmP ™†”@Å H¡ý¤JäìGþNÉ4 +Gîô%`ð@¸`æÄäîÀZîg®ODÁ½èÜ,zTÄH:Pљث<|Ç9öí·o¹ _ã¹%˜~ÀØöT.Ži¡¯Ø¡o+ðWPùA@-€à>Vˆêà€NÑÁ‡ÇFz–Hí|¡Le¾±Ò _§†}‡2b¥ØQä,%1vq×ÓPOƒÅŒhφëDR¬»¡IÝ„Î`!¼ Il$;<àטßĵ{qõ ¥Œä2†Y[Õ1Iˆ'Ü&ÊɶöH@™+®Tè¯ül?©z('vo£,àÒ]X)ÎàÀfêÕªòqõ•«y|؈êPº+µQ¼ZˆÌÆ%¸G›Š”A2£GwÓv’à§5å †à¥V&:¤ä#Mÿ ¼´û²C´§³‰6ÛygÿÈùôžMX§”¸g$9™ÝxèÀT9Çaã\S¿à•N Úߊ®µ\l€CGP¾€¾â}æúDK½žƒ“¦ ÞGèÑ…£Î—ÀáÿÜ……<ÉùwÈž9ükÌ[cþ}Àfÿy`·8ÿxªà®ÃTî;ÓÇl*ß{£Bœ"/Nô®”Ÿ(År"²20<‰#«5’¥ ʇo†3ÈRÖ8Q¾± +¹œ¸äºP;’À)ÙS²Õt†Dl|Äd;y[TN%R˜HœZ溄ÀN~?»Ñ4NìÁE€9É5ýÓFt¥„S)Âé—ä/Ie‡5Û€œËV½ŠDlZ—¤fíoÜ38SH6RÀ +Kð‘6d+Ôp;LÝmÉ#Æ5ÉhñR¹[ãîF¥í-ŒÚ4À>¢Ý-rð¦Â¨SOò¬Üe„Zn¨—•Íß{$ö‚ÍìnÏ%NÐÕž¯\‰i?ö¿Wÿ tÜ;šMÀà5ú‰'a.bvøŸÅ™äŒë&üNt  à©ßÅPx#pw €øï@àÿÓþþÿ^à`üã) +À*Å¿ï[ í£ìazz7\!dE‰={ž©_02.F©B»5؈i@¸_nB +{‰sÄÎ Xg¤4:j!‡SC’7Y(¼š!u¦d•)ŒQ˜²S_ÑÝ~z´q†CL툃8àœâTC=8o¢¤ï…Ø,®¹ŽÊƦùÈé}ƒÃ¯³6ÑÙ0™±˜ÌÓãv¢·ëë7$©8¥ÃÕÖ),AFØ;2Ê¥ž!ÓXÃÑ–fˆ3%1ÙÓY8Û±8ør¥ç þОÐ#ÐÏžÿ×;:uÚ÷œ´ŠK-©Ó ½´f`“Í×Ë¢€ú9%~ðéû€ î#Œ¥yž•)üëÙÊ?TYlÀè³Äïþ¿K€.|þÀ{ZCw|'èü;pà橱|Àü`à?;€k 0 +`P¿30ý£>^ø¯È«W| +‰úGËÐè¸,rƒÒîEi]ÎYŠFÅ@峯ÂX”9-R”‹žÖ³ÂuïªÑfçý'Zk5 +#¦@l˜Âé,wJPÅ”Ï +çè„Ó(ˆsd×ä\¢cVD6¹&MK™`HˆÒœ³câ'ŽÖJÎËTµµ*¼dV&5·Ÿˆç2+*pÛmL•'Ш Ò}VKJßµP¨:Ì/ÄiçÈDj2Yš`ŠšQ¹–G„Á$±ZÈ*ýÝ{ †t9ËËM©•&zŒ€M¤[ó$‡ä:(ï&õRÿ\j£Ö5•.s|d~ÓžŒHÉM +mŽ‚ñaòMýçYHWµ„o ›Y{ð> +@ û–±+@= +àÍÀlA¼*&…eï¯{®?T1zœïª[|úøÞNQk °Þ 6«Ö@( +`{ ÀÐnéÿ± +àq߈T¤ö¡Žþ$¢44Cc;äÁ×ÖßRÅ%8÷Î6£éx’„ Æ,—z<§dMÞnà””4¢9ŸÈRJ#ÄGI¤'¶©(3Ázr¯¹ô_¼xÚd~ZAÔH¢ªâŽHNÙo"ò4> “>%í]€ZHŽê]˜À0ÏDß”S‰-ƒ¢Ë0•}$ ¾®XèæH…8ƒÿÄA¦Î1¾É’ð4(pÖŒðR @›;_ŠkV˱pC3Vœ´¬jJÀD3†àÆi®XEhzœþÛ ”l¦q‹– +`tòDÆÀvU‘{èÔÙ,:v¥xír °ˆÌþs€iš@W­$)·ö,€< ÜBÁpñáò•«(œ(ô\òJ ºn¯k0ÁâÞ€q§ÜX.øÛ$\Ìü‹b‚àݽsËYøî‹§O9uúÌVàYæÿ¾Lü¯M€MþNýÇ5€ô±è‡6 *6î¾8wÿwtâ ³mDb¯¯CŠHdñu›KÉR˜ÄE$ÙÂ0³‡šÍ¢2ÛnøIØH]iïZµ3ƒ%Ü„^9×ÈGîâ¨y0ÆGRãݘبå„f‰)%‹òoºb±_ )Rqݪ–V¶|¡D¦,ÂÉ”ÍÄî ×Ù³í'â¹h§ÎÿΖ1Y„¹‰TC±ˆ· tLòY›ºPQç¤jÞV0_¡› ¡L ®=‘l··Â’ir1¦³æÒ?U£{àÃO›ˆ # ×ÐYL!)B’•õ ˆ& þ™(@=-æÃˆ”óbg vŒ2÷9 þ`Â!,š î½íý±À²A¦šrº5x%`O„¯rßqŒ€P{¿PÜ[€=çßÌÂ/z¯àôéÿìwwÍÿ{ï¦O8¢ñ",‘ø’Ö„Éq93é ´ƒÚXeÔ½£p½Ç+dó¬?èÙOl §ìÊ­V‹f§Ø9dÐTqÎ|Tf,8›M@)å‘mBj!øÐ…Äd7ƒý%Õ ¤¨AŸÚ®9ˆÚËŒEˈ[z-Ãqv o…¯ÝŽ|ß¾QwoÌ”»ñ’ª‰!/àUÀ‡3£@ñCûg¯i2=DÖou¦àýMSÒÑC€‹½ LúŸÊàê§еÙuù@œë§cî£=„bÌÏß[+iãA+ÔàÓ*ŒLU ðÀÒ¦ ²ðè€Nºû"óÿ­;w}2ÀN8sú©¬nÜðç€Yd ¯Þ-6°-ÿEÿÂÿ/¡ËZùk€<”¿}ˆTt«=»ß»ºj§ÈѲˆ 3‘4hL`"ìGD@<&1(þsäHh#[ŸÌòÐ 3ª^·óND+ÁfŠ f”Pm…¯A°Š'Òd"kÌ,²S{À⪞ •^1¦¤†î`=€Çç5¨1#³)Ãú–Ž .´'µ¿U˜‚Ù‘À^NáêŠ]-áh‘C 0[…rl€àÚ“–šÌ- œX4™þ9e0|l´çlwj¾Ì„Œî/@¬À@Ѹ‚ÒeôwvºDdrÇë6žW@jb·h~(¶_Ù£³3  =ô¶ߺ=áúÌu€¿¸åD¼{ +(À¬æ) Ým€Ð/]ûE\Í<œ°nߺãÉ»“ +`wô”oÏA­‚7aP$u-$¥ MQ°GKªû×^Ç£ø¸“™9%ôKBª°ÐH½¡….ÎLìÀ‘'9N3ì(@¶FD6§¤µD,cM,…¹´h[ìø ³vE½Ç¨vÌ0š€YȲ%‚½è¹h’üœ*.)i9² ÕMacm®­'ïÊdCdÈŽHÍù#B¬ž‚ä!»³–Ž£+c’ÒYqàLÏ%"å?"óLjRØÑ@_þ ŠÂHÑÐÎîw + IN™ßè|þoiÍo펗ŸÐj  R_ òèÂ>ÀT~ÖõW®´ˆç¢AÍ 739aÛÉ,Ôµ?Á¬ ª’ʹ¬3ÏE»¸‚ ´¯0½>é#ö…Ÿ¾<0˜'» u«®*`Óë)àŸÿìð.ÀÀû—ÒùQ`?[€Yô?D§"=Ö§nÎH‚ý=‘Ò…j†ýÆ©¼è†”¼8ŽFZÖð%U1ëóæPì”y”ÏS릻Ã’ì ¬¤U4"¶Š L`j+@ä%ĺ)(ð5‰ rÚá¡@qCÃ0]e¥´Œ‰ë$ܨþ]†øå«AgÏíç§jÃCï$Kü“&´Àº‹€v&KÿµÁe’µ¸(CõŸèj®mí*gû–HÒÛ)Æ{òS2ø BÜ*䃜 -öËàâr„nê5•Ú›ËJæ")£‚’ø–6ÇF$ò¾;h}táŸãQgâ ÿS¹Pˆ _ +Vãprð'L  ›€Nå’3?Ú$Ϭ‰á™¯U&g)é ñ†2ù‡²÷zÛ÷о$€EQ úGüy_¼=È@ }æÿ_MœÏϯ¾}÷îºùçàqz耎{vwqþpÇï)÷oMlFd@<Ј+Ã;{JÛ–W)MI[ѱ›‘B†¾²¨ +É vbÌ$¬ jˆƒ …¿¯Ë£i Á£xâ2¿•­%€´±ûfœ%|]ônê­ñ»³‡Ö5mãs¼¤²ˆcÚ½2’Ô)ÍyúšoÁ û-v@¯AÊÉä-ÔRÔØ8wl¦›Ò%øèz#ŽÆÎɬ¼…ò³œ˜7è'‰Ê€’ÐÎM&C‰J'óv6€` ÎGnH 2V·êõ`,‰BÍ¢,‡·$]¨óеˆ|_&ò×Ü %‹ü+Ÿ‰xÀl@YØ‚ÛLîNâšò Ë ?ó™ [@à +3^ÔIk±R˜V€G@k)Ýʤ€ïÎí[£ Ò þ8 /Š °i€þЬÀ~T€G €_QäQàÜëû |ö;ÚWA†}­È¥Ëc oã“ïxò”N‡Eo²çè­uGv#Æ +[xƒÂÊ“sÍí-H­·Ð¯Ð9øÎ ‘be”³>¥‰1IÅœ°ˆOò)£É“(~êË@jÈx`wã5„gùå®É·‘ĆŸ@6b-_º $‚œåÃH›”[%Ö±’FOÔ¹#1 +J)îù¦ŒFé«¢”ÅËìî(Œù…¹è [Â8UºíD\Nòj”¦˜1‰0º´[x=}Iàh¥4kò»ÊÐåhnÚÃb­š˜}™ +Y …¸üò{©øò§hgbéâ¾D˜3>1;üû'?ç‚e€¤o{8À(Õ¬ Nöä9ÄÿŸòy“Ï-€ïÞî.`¶Üþ7nbdðàe{øßÝ\ËÀÝóÇÒåóù‹+× o¿x'ú`ŸN‰ŠuøqE”r $@Š‚ŸÊ„!A¥C0cSp™! +À«4Ñ!%>×O ¢U)ŒŒµ„Ua•?ŸÌ㲓㮛‹ì’”D.žäŒŸ"ˆ—zRäÔ³ãI®XÚí$„¼“\…”À¦NDisyÙ¹½•O‚‰ˆÀÂÀBŸEà™ PÐ/MǺ;‡6¯;xuÅÁd]M€{?\¥1þ]M¹×ý°>KU%žÖ°›Åæ\Œ@»×!ÈZ(^È_äæ$Œr¦,®T± +^ªCÅNÉ üÓŠnPEˆÄA¾v€wéÕ—/|êS…ì¹ ž*©ë{Ÿò€ +È7 @m×Îîj…~Ð[µ¢ b +$’ÌÖš‘ Í+?æÿÛ¾˜Ê& /ÐX& / À]Àm ðgù-Àþ­À_Á +¸|þâNø(’!hþ=x„p#º@„S„Ð÷~œ„B›$ôöT +!4Ó®y²Fl´Ít3žJ'rž>çkNgzÏ‘%ŠPN|T Ö `TÊ 7"9(ÀPü™°Z€’ÐŒá,U´^³áܨàŒ3ñö@¼“Áô¥q͹M0áÊ8¤‚#¨"ƒiT›ezƒ“màL‡¹s˜Ü‹ÌKHQgý@´ÖsÐïÇPR‘· šÌ*ÒñíýM”ä! Òé7[CkK‘§Ì¾íÃê›jslÝ64éöX£–H•—¤–kîô‚n£ÌFvcð%*á¡…ÿSr>¢\p‰ƒB °,83åçŠ]oBÕGA‹  (Ò‹Ó€÷Ó™Ù› +}a5ùäÏÈÐ-£RÍiv÷ÈÛÀ2 « ò0pvXä9Aéñ÷n*`ív#à—<ÿ¿QžZìï¼=6ÀI{v¥"3½„Dl„P¿£)ðrÛD‚SÁ櫤FD˜ c§däJ›”ì9êEtêóôGô¨Ï`ç–…ÞJ‰<…ÍN>%™‰ß€|(]Q·Œ„‡ŒŠî &·¶Èa’<Åɉ•ÖÝæŒoh¾g~°ú0EÔá‹„"çÞl?Á”è‘¡Éœ‚ˆJï~.ÀïFâqsi¤—½¿bîÕó¥ü9­aGûßDZv±à¤„–1#pE× Ë|ìõ4Ä–CÜN†ÒåÀ\­†üVB&µ½RD§ù Mº„/JcÌcv‚‹ûìËåm<;P-€gt€¸-xÕ}Š?zí÷ñ ç ÿtß["¿‡ÕäHU8L´mäW@¥¾Ôç€$æ_©Àé3› à@Ç€¢þ|T@ H`Ô€ +àWPû|ÃEì*tªú00/%Û#ÿ”Le¬ G +å@+'¤ê€I1%„RÎGfMJÊM´u9ÒæÆ/Ρ–L˜6I$ S›|m%’™Ÿñš×"³¡ÀÔ³¨I‡¡¸§ %g¢äiË””úrá£éãOÊ0ì'µ–Âõ”@·ÄF?ê|\AN^óÀ³Îà Ê:ä’ÏLÕ™+Ù9ÏáI? ÉÚûœôõŽBÓCr¶h uíB0ÖI¼j¬DÈƒŽ¨’(R¹Â{±=`kg°2FÜù ÿÂÉï¤rÀìƒDd‡¡ž…•ýù߆þ|Ý +ôäLÎ> +õV1ÄRà`àìîB@P‡ö,€Ëp¨Ò:køXê‰àßÂ<§N €E©&õ”no”x;÷—Pô×ý- @i,wæFàÁ/ú à/×(ؽ|¾ó~þ—P&ÂÀ>å… —ÜÊ"Ș258|Š@&Ù k¢òã–¦"7ÙúÆÊÈZž>Í@í¥Âé§LIG +u˜½DlTN IÖ”„û5IåaÿÉ/?F _ZNB) ÎÔe#²ª#ÑT¡ˆÙºÅå·ˆ=…<•&‰ñ^¤´ÊÞhKLT+!*Iš,Á—ŽŠ.Hÿ ¶vÜJ©pÛ’ÿÑÌŇwìd¢º0—ñ&*d ¥äXüFÆã]UkÂ'¤C­q_ØA§”´Ÿöàç—RÒtµa×VA«[íIPÞ®´ÕíµÑ û.ò¦ƒÈIQÙ¯ÑèžÂr²x¸çЮũÆá¥Å—Ï jàÇ™‹_±¨„gK AîÓ‰dgÏˆÑØñ(è-€Ë¢ü×0kÀ» »û ¬û§¤¥I²*U€zæQ®3ÅJ¹ç\(ðpþ_¸ ðýïÿë“Ö‡JàW3ü¥“o-JÅ:t’pñSvbúÕîõÊxؽ EFRø"dzgH*U¡ ]JP°™°ˆ‰„@J„*Åñ#^1‹‘aU +]§ÿæªïòQµä§&º1^b[,`´\åQ«ÃV°¦7xep™’ª,3ì”7Y†ò$Ca,ºÇ“H`÷áYomP )JDøÓ@/>eß@õêê) +äœ~â[@—(*”ßR&À{‘©'ñ¦ ½ÇµæŽ»ÖÞ†Tô6d”K€D·œ­R8ßF±Ý“$ö¯ÝˆïRÞRb¹Ö£ä†}p;ø´+Ûcf̫ҵà> +Àiwêr¨’B2pÅíœá4KöUîy„ +½AyÈ? +©æ½A$pv&™øYàôâX àr,y‘QÝgIüþE¾gø!óF—T¬òv¨{‘©„;÷®€eû¯±æÿ—°ÿÁq¿vÿ¯¸.¸˜€ÚEýÍ+ÁÜǸN÷²”_@ݸùìh€·ûNàPîª2û{ ú¡_ ÿW/Ó¬óëÍÄ.nËÅCt*(R@¼2ÌŠºýKç;^FÚÛ• C†p.‚ÝñYc´H™°Ì5«¦Á–ç¼J ßè¯qšêÈÈôA ’MoqƦv‹Î‰ ©¶áê4×ú[³¤¸Z9<¥”|FˆÃ‰×V³j’2·Æu´ÔâÙ‹×®}^4̪~ˆ€n ‡&­WµÔPBå¹t”Ú¿DÕÄ@BÝ’Q@»ý¨*È'u-§5E…WÖj”ó­ B£¶EÙö¨±â + N%Q=ñÄGþ¢Gø'?}î¤)‘-ݪ@c^àßN˜:­­øÏ¯HIw¯X.*—:×èåœq G¡‹ËX$¼–ð꛺¤eÖà ;­éµbŒ௄°ÿiY„»{‡4 +!3¿d9óF L½CÀôÝ]ÏùŸcön©¶»¾Pèg ´›û‡äG?~äóÎnä@ÿdp`¿#@,Ô¡s~N¿®O`|Þ1¬°íI3o) ¦#~Ò¯e°™´¹îF{Þíµ€~ùD 27êQŠËÁSÙãœ+mP³À9Œ¤ëLŠ$5£èJvyjxBˆv$$­Éw4ÔÙùn<žM&—¥”Ÿ¹%`£p5ñ"£’iñ䣀0 +@Eà@… “7¯gÒçâÊC³õ€FþMs± |ôÖjì‡ÙüTJ7§ÈZ[·>—‚¬Ò"TYý5šA”Šñh;ÝÑœ¢éq3Á¯û€I±*Õ¨˜¿âÃI 2qЦ TÌ|JÄË™L\òOB¶Fm¾1|­6uLcøçI?±ïô ÜÚÑHµÎd©Àð°X´‹è•Ÿß3Öáw}+0‡*€h€õV`ôDŸpþ_&@5@m€Aÿ¯¸¸šßBpçm Ž   +8vÔè'_†Óñ§[éù„„2HÀÞðHø<䢂hš\“ÎÙÜQ*­«¥ªÀÙŸRªq(½©5‰<éË© +À¡×€w¦žˆs…/§8Q ª1DOyTGhi˜0èö'–¹¥RZPÄ›:ÄÁmËy€BØ0òš½Ùš%[¤°cÉ‘úB:Òe=$¸DʬVQ†ÒDÃWÌ„ÖdšøŒPÈ*‚Ô6´ªÜz1ß&:Úþ";X§þi…|ûEú„‡: ù¹8ÏY|Fb¢‹ÝF®# ¶ŽÚùßȾ4 $Ò±3iáßñž‚!mcsxþ-ϺÆKÔ鳞Ïh°;S{·€•ýY-­õ °,€˜ s0è­ÏwG–YÚ¹Bd;|À;Xÿý1p6ãþ§ÏøsÀg}bðØ£€?”=€ÁýúSðAøÇÓåǯú_è—ç…`1nkìc?Ç)…q$'ža*`qŽ·ý¿^åb"ÚÁJtâ•O£W„„ekK3ˆ[ÔdÝeO¡*ÎN¢1)ƒS lä­Aê ä*äI¶! Ò(G-Ý|¡ !zfWà8ÊÜö)UþÎ?"Tã³â†`5›Q²³:®I¬ËÇ÷õìvèEuªì8—1ó¢™­ÂÙWÚÀ- ŽÔ¢æLdöË„¨i|¡@+Šc÷Ó‰ Ž¢¨Ìc@`AÄz¸d S¡uä=²/î¥Út4ýžA𜰀RT2™ås8LDúžM±YÉmrRáP&͵ë¨P®þMP‰ ”ä…6«Üþ[ÀiŸpVw'ÿÀÐß*€ÓyT àÐ &…ž‰}!ž ¼÷¿@’óÿmQ*ú9²°^ ì¿vm@V›­M€_eúG\Å8züòåVŸ—‚åNÄCÇú-@‡, q @ÿfÛçŽGšP¦þQHì¥S$#A#Q$C®+™¥wdç¥Bê'$‡ÆÉ(€V&¿Ù]H ¦h+”+ç’6‹‹yMb“T!³å’ÃbÒðÅèDoÀäÚèè–J»f…–¯ –¡V¡]Û=¦œFy¼pûô¦D“ÒY©Käå+ù—Àz»=`¬~QË¥s5Øï²?•¨†ú«K‹'ûn,äåt:öâÑç¨! šßq³:Ÿ¸ô˜;DWˆ?gyû]c QA”s¼QÑŠ­w˜Šü’I(¢â7B© Ñô;ìK‘+?ò0;÷[t`d À—Õùfœanÿ>Ì·‡,ç¿­[€µæ6:2S<µñ!ÀªSWê¡Ú3…žt×ßãÞ½ûâ-Õ€6Íz.OÞ®°n f pnî݈ø¬€Ëþ-à•ËUåôg@®¢SéèN‘½d„‚º€èD4ÚùãÞ6DõšÔ¹âˆðàð;$>3·]íáóÈVxB ·rÖé%lWTF¸šueÒ@½hS(Žóª2W͸xZ¡uèšÙyWŠ›%€€z(üÇ™‘#k´HŽ1§{fÜVËÃU{¶¢œ¬=§˜} `öEp¶óÎZ‚@5JÀ€P,€ …ÿçN{ç?J"ùR „þh¡œEòùÕ©0•f÷/ä ÌìÏ`Ø×ªòÀ³5\DHó(`@hð à—*€óXh,€ÿ*j]ȹ ˜ÎîØätñ4˜‰›È|‚G ¢ å¤ôÄ¥ÀàÊ škHòñ”•`ÛB8‰Þj‘FX^K©ËĆ % +Š„[å M%﹜ÄÎtƒô8XI)U«®V¡Y°)€F”“y â#Ñ7êu¥VTÎ+&ß~øÂ®‘;¸Û¶9äÌ.Šg E èè×([bÂó¼N[ž¤I eÄ$+q|ÓsE_ê;öœñÉkp¢Úö/žHÅÄôçÐe2ÚÈ`³¤ì¿§¬ ,­ÃÑ!|࿇ÿµ¨ŒžCãÀ…­}²rå×Ȩü€ +j)3 Rª“=8Ž%Ï" Ðö&àRªò§,w°ÎvS/@O¡3,*€ã:ä{ÚÐwÛ@ŽÜ˜îoNÞøÙ¶ß¿²pÕZKð¡"xˆRж‘uÄôÐï`;|F½„8«¢4’. òÂwF.™Ìì©c„6ÁI‘s/9ò)S˜Ë]geqÍð#%E´–0)¸("°bQIañ©Éz[k”ÒDPLb'F§¡†…ô‘oô^ý˜>q°hÂí?¯0Ó yj†­ì#aåOh—åàâ,SN2<Ó!Ð$5®©ô¨;êä¼!A®¿[Á>¹xÐ$ ´[ ­w˜(Æá"Qz„D&•ÑR²BíšÎ%d˜ €¤ðD:Hðî(0TÉlV¯Ž•áBæ%8e„?kéGJ+§Ù~6ûßÞË ÅCꑚâ5Àq 'ñlå3—Ÿ Âç9€Xæ—·x@… 7Kè÷Äð¢Öiƒ<>5È ùŽ_Ì•‚~•’·ú$ {µ¶ÿÞíìî Ä¥šþ£._Þ·˜êQ0."–ôô1rÐÁr¸ˆ(ÑÇ­ ^gÒfÑèhy(R‘SÎÀäƒo?ZæHXE­gq MÉÊ¥ÕİÑÁ:U3eû¡ˆŸ#Ò5§Â–Ú-°ìÉ´UXAx4ÿfX¥ àgÙu&}¸å”I¶¹z6£žÔãQ²¤f°¢”Œ×”õóÙYf²²I‘ß½ƒë 87â°®»vkâOØ*hx°l“'{eØÌ(Y3Ì,Í=­"YbÙ«!–ÌÙEBfï~ÅñÐ?*å#qs@â(@ª°koùa&MÕÅwÙÿIqéÒцǔµö¢€[-7ý…sö² Ø­†áúÝ0yïh ¥Ô¢½×Mø‰©Ÿ ô¿·ïÜf +ÔuöÇ~8ó L€í¿û¿ ÙØÖC› 0—ö܇–ÁüÍÁžàS@ªµ ¹#€r°#û}¯-j 6Â3Òé)“+.ma®ŽR$ª€ÂaV*%˜Ý0ÇL tXMŒgO©Æs*´låGäAÀW° œDéŽ<-‘ªÃ‘Ⱥ mà^ gÀzÜV`-r‘FÈ’¡!ḭl2r*Ÿ³õ1œç ±Éhš–eSíö”b©!޶ՀEV°çoù­0h5…@ï& 1>ö_ °Rq6Ǫ"Q~Ò­†åг¬|Á)! æ¬B K +0/ÇtŸÍõÓ¦˜È±°¿¢™™ªJ'ušÙ`) ZK @RŠ™JÓ‚Pš= nþ>÷$ÌèƒÀ–*ôÿ0!^¡<‹^9Ñ®ï_#ÔX3ÇîÀ,$u@¨+ +l…R["ó9>…¡ïýýœ3ƒ@a^JN÷Îjÿߺ @Ñ ¹  @ °) €¾Ô[„‚._Tø§ò¨ \òÄàaÊ`±£6„ÄÏŽˆJ.†M™“éš:r™!— £§Ü€ŠÈDpF¥®nÏz ¢x‹‰\…ÀÈOjØÀ¢x’¸L+â“©'ãm…™•ÁÔ­‘ê#up¡lë#»çiºaÉÂU£ÙOr™¶5AzâLEΖc†&m5gǤ!vFȺÓ9ÛG"q†Ë"A¯›€q­½Ipx–¨-ÕZ¨wVåiŠU¥UBi¯j)¥`ç«RLJHHöõNꜫ(ÉKÆÆ£Õ‘¼™Q©;*~†2`ä¿©98—­46Ü‘B&.yO# ÔŠÿ¬ÎÀ…n7ö,€¾Þ[0›ë‡Û=´ƒy¼aè‡Älñ_–Ëz˜¯¸ûÕì¼ç ô´À߯=D~áùÀá¿gþ¨ø™ïÔÈ*@ 0@ÿ(ʯ€4.÷F¤¯$š©[„lt²¨ S¨²ž‘”Hét¡²&F9^Œž”3â"3‚­Ò6ŸáõdB"2æÄL¡…«×ºåÑ‚LjÙŠX‚CÞîG12€|qÔëâ [nqx‹KöŠ„8ôO#!r&Zsx ƒiãkÏúLb.+ׇL`Efœ" Ò˜(Ù+–vŒv JH{°~~,€`ÂPL/T”XÉ­ƒB©[ë«•ZQιdcÆÎoù^½ËÏ9CbPZeyæ¦ *'¿'So¿ÚR;»ÚØ~%OÊ¡;¥zKÍjYÎùp£m q '0¥{Ÿ™-+›€‚œ3—mcÈs–‰Lþk 7ä»8DC0ý5‰YÕ½`ÁÇ,€Ú^ÓŒSb½‹î<yüÿ PõtúF~¸ððƒì®Û€1–ýïi@þqäßž3(íþR"|–NXÇGX3f3r +ª @ÊÄî¯qA§ƒÁV\06¸å‘^yñ4k†)‚Žrs89#/–C*r,. !^ðA…gJÈG}§iW@)â)£Å½Ü,Á4_še‰f]mLTfزB+Ædx4Få_–Ó„°÷KVÙ06í]^)J®ÓxÚ’C¢Îȼn/ó¶.ï̳:×"¡¯l`kI'ÐÓÓ=¬²™$• ·¾XÕžÃS?¬‡ÎœIž¥´_ik äÉÞHm6ëøÀÙ{ùÂ%ÀKˈG! øÝ7Ø»  =áM€Íõ~r[ÙþËÙÛðy+wƒ8´ ²8}îF~ Ô=5@,€Ý_Uì? üË4Àã¾ èrÿˆr}:&» šïÝS‘ón×Kñ”;f¶&nNý ‡<¢±ÑDásDr‹|.ÉÂ(1b™¨H¦˜)J¿REhñ¤Y¬3¾yÊ—H’%„W^*íJl².¶Îy²(È$HK$¿¯ R4{hi»ÕlIéX®H©Ü«vR”“ÊåRRië^è —öO©ò,XÕ lj¼|F¤ Ó‚tÛaK”~݉ ^vê$Û%é\ÿ•~l¿§lxLwO—ÏäöW  ÎF¬GNáB}—âMoŠÕCéªt‘‰SŸ§(l#9‡ø‡’S"ýT-Û6p‘õgݲ›ÿóÛiã¢bˆÿ>· €î@slÇX›•„¸/ /fƒP½±íf9‘bÃiyN+tÏ)3ÿ"pßßvU@H“¡ÓŸx `[ä6@h–ÿ= ð +`·8ðU }ØÅ.úÝ}pòÏï€#²tÀFAƒ™a¨D+¥ÃàÀ*"Kx ‹¤9 ú‹"jÖ\¢#e>É“ÄBB0~d†°ÁÍ¢2” +"|¤3•oá‘"ø2*¶Sÿ¥ŠPYRhk s0r2cÛ¤ð¢)œ¶¦$³±vAÕŽÑ;ŠXû\‰EȈóF9Rµ +¨äÒ¦Ùƒá)á‡4%@Æ´ _í1A]àÓ»½J–⯅Rš÷_š:Ù:[# äù&?ŽTÎY˜²Ó~rõfÂ,8¥Ïë&¸:Ç}|# ðIW¸ÀÑ/vkúÈ:Wç-[Ð,Rêþéï0ÓÑó$Ûh3ùZ¯Šh뀽H,€ÀÔ3èÏŸXööŸŠŠ Øz4ßb>ï{XAŽÐX.œÁc„í¨/N[SÄyÑž3tëîÚˆ“RŒ¬ùÇ(€YôA ÂÝøÛ;ÁNV‰ø_u=îo€  ýIr­þ»]ø°ÑqÚYéÉqÈÀ)ÕÁŒ3"sÚ“Ò°dc]”xÕ×ìéãjA8G¸(-ÕK±Õ ┉Q¦Bå¦Â1“ˆõ€5Ì$$ÖAÀú¥J(òli¤ +iŸÉ"ÉÈp¯²<):\\Q of²B\ÒôƒiÛ¥Êt@[ݼIfù½eßP¨ÿ'œ’R÷ü¢ç€HŸÄyÜv6kE„Ù¥˜7Ø„YP0ɦTŠ‘÷4åtú[›Š BŽsFˆ¼Ês«ø’ÇìÄ„1âÔúÓ:£Œµ'ìˆ^1-ÑÕ#ê!½µ§œ¢gÈI”îM·¶|¾i§„óâù#:Û&÷À ]ƒ'SøÔÍÙM…×qæ¶| @ÔÆÀß%@fïÝ€ÏNx=4„àmðg àí»Å¾VįßÌ£@1ª¤ýßx@èW|Ì" VÀRkŽÐÝ»¾UtÂs3\sâB÷ÓùƒŒ‚‚CÇ»î.2Ú‘Ž-R‘ ]¢-°‹@)%£@Ìø°%•\3Õ&«—?%2„Ê~ á$ðÑGM)ª÷á$tä{l,6 1q„œvÐÖÌ“C"Š˜Ú(¶µzçüQî¶Çª1_;)&¤[–‚£„–ÄEwTçôSjN²pH¶²k{Ï0\Ÿ‹°g·È(C’$kŒ:ýäÙº]-…§\á +—#@ëL·4€Éý9 –“|˜ïÃYƒXþ¨³âé…‡¬mîà9Q;šy3t0ÿ'µÕÉB›Ð-Už£ "M@Þ½T1æt±»šœ$ôÙ̺ðÏZ_ªPeÀйú/þU³0[tÀÛ€Ë?àZ$ò1ÀQÝ€ÂU™Ê?ì~ üÿüØ +À×íY©<ù`£þ®@´¾° ˜>˜Að:p3gŒOT;¼\=J‡%ƒ”IõDº%] Q#– &Ä’Ëf™ËØ>âÛ0tC–g½Š@k€ÆØ·jF´ìœ£"2ÉÏ +¹éHáÉ +'6¥‰J©€¡×m„R©"†™ð´A´`Ëc–rê4 Oϸà’>³Ÿæ»vlÚ}v¾ÚÛÅThÇÅ€¥Ì_¼ø¹´tõÉÂÒÑç"çG`±o]q*(»<êÚÙàKº…òsµce€èîæX´N¶|9äg˜X6@V-ÝîPpJHS")Öa— ÷R¡³È¶B"jr9,ð¥âEX?.¥è Íû‚ÿéÈóÅ‹‚V´ûô>pðª*®b¬ÛajœÞ F PKaÈ•ƒWNáw¦.´!ŸÿÙ£,Å…áàÊ6ÂiÍ€3¿~€Yà€à‡»EÀР?süG*€¿0ÕÃúÅÊ÷9:E×| å`ªÜb‹c”™g…”m)‚홑*Ðu+‘8sZá ¢!å¬e L¦#Ÿ¼ß:BµK­!B8ýæŽøÊOœ; À+<&ŸxÎôíl”hφX Õ)IéòC¤/ŠVª“심߂téMçSPî-Š5»ÄŽ ®ñj'Èdà”jw…’ÂcѵónYˆNz§_Î×>Ç÷‰#ßÜ.NÉ —òÆY¢2¾ü~©²€#&78ýÀ"D’ô¤ôu`\«ª-ÀLérC¥±ˆ0:lGNÚöHZK2¥BE¨ñ²¡ÿé¾È`1é%ÙðëNˆ ……t%\DþÓ8[®K¶¥ÜÈŽ¾Kù@\Ð¥T×êÝ­6ôCq7˜‰<¸ïÿ3¹nôö]ç~iPwçŽìôV"Z${€w–ࣀ}ÈÞ=€_²°£ ¿´=è‰<×ø8¤ÕñíŠî‡5®ÂøF„2$ +·úw¦ÔŒ{:ÞárÌDz®{¤|œø¤4i  íK^<~4€4•Y6à× +¸uwÿ! ‡ÀÑ3k\3"øè{‡&B›q¨\œ=kÏã-Ò‚È5> SÂvú¸Io9U–M€(%…ujHÙ8,QXUŒáÉ§àŒ©$3®d[1ÏoÞ©KõF°íõj‚îH/DY½Å¨IZ·a5’œèˆŽð›°!œ2nôµ µhAl+4Í‚ˆ*Íï'oå1„ý;Q×P—.[ZbZBˆüèíѤøÓ·qÙLÓæ¾5Æå£%5ØÒǰ  ɔۮVLi²ýkªtÍÙU;9³o,©mµŽÔ;ÏøÈŽLÈIõ߸!S†E¨6ÂQ`»¡ù,« ¾ùÎ@êrˆÈÒ?;ÉæO¢ŒQœR«dhÂJº^’Õ]éG"£AQ¶0Ñ–¸Ã~’Øb*KY–;]"™o¿*¶)¤«pìgÛiTöš€öÿ¡òVrþ'¦JàâÅ€5î&@tûy [î6mN¹#°YñIµD>F€)÷ÿ¤”€w|`æÈÙŸb!ζ»ý9àX› °{ø£i‡ÿª€¹åù PÞJòð€µ±ëâY_&Cµ$ÁA:\V‡¡£ë` + ¬±StÆrü83ÆxœèMØÀžgECJÎÈD‚H¡E(cQY²6N:½×È…š"~M…,éuz2O®*sìØoõTm®X†…¦`Ï@Rg_J¦ÒEtÊ*–FÚÅ¿‘Ø·7Ó“¦4ÕY>§ô¥¼ã ml…&PŠs7$c€92T”à9£(b¥2Òš¸àKp½#jªŒˆ/®Ôe¦Uül­@Q`iBY0êo*¦ØöI)Õ,-EAq­S®`X7ü;èEvhÿœ `Zì,²ÑNÝÝ òÀß-€LèBZ˜ºwˆÊÀp¨Ÿ1båT“eÍp’àc€~öÖ¿/Àð^Â'>‘=€u`Ýúµ2ÿ{£?§IàûËjUÀã5ÿ=òVðl3õ{tÜö¡ÍÛStÀŒKDÖ'è2”‘êøÄܶ—#¿n"ˆÍœ°†qèü5¢”¼í€w#ê‰(Ε<}Š*LX‹¯ÑMRθ䵅Go NJ_CHaÆÈ)}‡ŽÎ‹Qƒbšä–F‹1טÌ@¿ö½ƒÓ`¡`5TGצ|“Fòí)-"³îD¼$¸w9rj52Ð.mLìSâE¹Hä¢H¦Há#è>°’¥5š}BÉŒ|‡ZÉB ƒK% ¶Ý9©Ô7ö¢«y䬵· +vELŠgWÅ0´©kΔ;ö×Ò/-€â?×aš¦#0ó’Œz0ÏELe\˜Ì=Ul7A³@ô{™I?ÀÎÈ4¹,N>z!¨ß#f‘w7–¸Pä|ºÖ?¤púô¹óXÛ“ þ³ °»ðÑ÷ z?1P©2ßLý©ûÖq:®B t¼Œ·ŽK@ts-€äáŽÈm€ÎÀT˜‘€y`âvtÍé[2ÙMe©ÓöÑžµ­h)LÔР&j7(€Ô³¯¡l…ÎZrv šzvÀ¡:hk5¡D†‹€µ!áÃr•ZüIÍI·ï ó7?¦,ÙYÁ?%Økò “¤µCÚϦJCŠuk[”†/ó§é-"Bà ÿô’•Ê_4gU²gRöMTeBé‰"Óá/–âU”Ê€ÙÃÑ-¥¥ÖKpâM5@ªxAã͹ø7WÛC ^¼Ýoë¹à=Giz„·-ðiçä\Ú°ŸX#R¦ä³ÌéàÇIþöÛÝŒ`”ü‰ `ÓÎþ; à$ +ä m€X;‚…[UÇéÔŒñ|BEÆ2B`÷†§1î(Q‘œ8íÒNÜR¯ +&.Jܶâ¡óµöLm°a -£•IÙIQÍ“3ÌDÞö,¯Â¸<‘ÎIÖ¤)XwÞÎJ + GYL@œÆ+¾™p²Ë^ +dÒ‚"鄨loí7"=‘ÎG + _É÷j…(3[ýl]•M5„V'~å’HúHZ;AâP62Å»9´K¹HQ ÏÈ3öN“ÔÒMi•òíß’%Ù}ògU.ì¾F¦m·=6Am-|T/*9Oº†[ÈÑüZ×Uh(’ïO" æ[UÊìPÅÛz†ßc$@Ñ”é0Y™Ñf P† æþ¡š¡°\à§KrJXœg¾€+哃BTT²Ó’u{±5Âšì¸ `%:Y¤ÇRÅúR rh•Ô‰ ›Ãöá~Iˆ=T*òG=$¢Ì¤Ä +{j€à~)€lè‹x(—,ûÁ¿'Cýf‚Ä2Hê>g¸7Ñ +¿»/Þz»ËUü È»¬|`ãSÖ£¿ém€‡ï0ÿÿìgô£6àŠ /ɉ?FÜWM¥ãÿ à¨ÀP¤•¾ÁügKp†'‰ºÐ ÄùBl¥G—îØ ›—íQàˆÎC̶Ë#úFd2F¡®× Ö§ô"˜‹ì$Àô- —0¦Ï¢ +zŠ%%ùdïéKÊâò‘ ®˜8ï„A¶<]Ö‚¤|Û‹1U’©ÛìCü}ÐÑOÑT¤«œfn²ºFJ"“¨y›oqç%/!h»w1d‘>+í{Aø1˜á‡ëb¿54tŸâ%I›Èòêjw(  *]kð*ÙÒ¤5¶1é¡tœÝA¡)<žý´·þOþPîòÑÚ¢¾Z/]¶”À„LèÚÿ `à”d¯m,^Ö-t½ùW¢r1©m°ÐïÔŸI­þsŠà]WÑ#”3àZä €€PS|NýE äOŠ(Ë›Ž.l€øø9‹ýîJùúU™úsÙ_ôŸåcü{ôÈÐ#ºÑ¾ŒQ€* Ïm”%À ¡èwHaôžà¶£udpÝ×klp±"ÏÕ‚â«Ñ6vd€N(LÙ&Ž1 ÷WlCfú%T“†¤Ô Ä݆ôCx™Ñm¢lQ4 Ô|ö`ÖA“máê>N©_ÙH7‚8êR%"N.{Í å|ûÒΙþ•è—:L¾Æ”Xx0QF£â#~¶ïà_†[—d‹.]ú\^yJÛ¢e N­ƒ²ÑB’$ÂnYø”=•5ÀR¬É…ÿ ZØG,]à^@’OLávd5L,æCvŸE‹WVÝùL–å7Ápì ›’`,J³¦p''rH—x±U$Ha¾"ÁÁî¨×òŠ0I¿2È€® ;Å+ þ†3´0ßOÚbÙenX˜ ¤¨ßÚ¡)?y{ÒÖ8BÈg· þg¡¯¿}Êô?6@§¤¥’¡ )¡ú@o dk/V€Èöƒþ¹ìöNyË o%!Iú".ì0Àoû Î>ÿÌ«*( +àt–ókÀA¶Gxp`¿Ñg‹ÿµ þ¯î–Öoò‹ Czè×€Ž3#Ýø# +Rd`RᨘK¦g¥LñvvKïJE÷ÏÆ/m½Îr3áàv7‘Q3&Ò#;ÔCÁ‘ )˜KÕ­­ÆHàÎP(páÓ¬±·ö)Zž¢?5Ýø$«$Ì}È.9äÈ‚‘ý•Dé·âʧ‰º"*çœÛcå]va¦…KŠåò¹‚¡°khÏÞxïæûD`–¤Môå¥A~Î.>2ÊIèýbo &­0‘ÖÄ#gg°‡¢ ¾¤°Äa+šKh9<”X pñ豉&´ŸRÆ‚xºÂ®Ì€ìÙ×=…ž©Ì:Ùm”€öO€³¶¿;1ð*ÈÓÐtDI­°aßïšÿó€£éЉâŸY|ó©àäoЀßÀ `Ðø‰xè6@¦Ú³ PS¼—ìæy£.œ;{î¼óÿº8:`จí_è{ àj^Hl­¹Ôxþ'½¼c-š]¸ï ¡‰öÌ`uœâq¸ü^ ;:'z:ÝÞY怑-ñ²,(X Èpa—ŒŒ¨ÁD Ë­.‰wc©!EÜRnó"&Sñëd¡Ðiß™Qï("Íî\‰,%›…ÊÛaÏ`êHˆ˜Uí‡|ÂÛb;¸•¦œ„IuÈÁÃO¤´†œ_?žÐê/]ûPÈ­ñ@ů%HÞàbËùÈFX 'ç²CJË$Çð¿ÿPuTòHÔG6kR£¨ý ·㨶 mi¹¡Mö’’‰‚ž¾þœ‡,U®¹É™Œ?lúœ?¦!*¢Ñáºc 'aœP¦ÿ•<ÁSR®ŽÉVöFh–múïԤǕ ,²XÜ. €xæþ$ãÈ_ºsçŸÝv û€yÞw#2ŸÉúð‹ÿ¿åʃ*²èBë?JÇžóÕ¾&€Î;¾eHòRí£"òr@§úö&çöí€F‰˜Ê %Cd(Ç“,U8ÌL5*‚®ìŸuTW¿{¦ŠŒZO *2b EþHŽLYÔä7NARém†­$ù2<ËŒò‘V!Õ]EÐv9i  ðKÖD^Š4ŒÔ|Ú>µ½aKÃYZlÝs¢É, .JRQf.l9¦k»pþÇê¾&“{Çä†þFî­ÿÕ­-{oˆ!ó^:ÊÜ_$ ýÍYK`B-)€ˆ*ÿ¢;·œ€ß¾Û{;:“_#=jùݤ4àÏGì,€Xü¡j€Zë! Ý%fȉK·oÎ)²¡ÑŠýE@EAÚæ~®&ÙQ$¾‚QKWÚå3ÉŠ4>i"?cä´ÈäÒñ;Zx:rÜqK‘Vn¸eŒE_’#¯¹ aK1$“+›!)Ë34Ù]ßLP%Ä”íB,̓jÒ_-̒%"¢¦A %8æ6Lh{§›z±Ð[F’(ŽœS95ø11* ¦½¾ùâ.êÚåEW;eäáùßAÏ7ð×Èúçr3QfõFÚN»Îj¶$ò5—ÅIIü“Æ1 \¿Îäÿ ó?*à™g®³P5š%¹šÕùÿ àÏ +€ +ÑOmçÿÇè⬠+’ª—tfៈ~·ù?Ú=J' +ôeèä»skŒ®µ@}ö Àñ‰Këc0$ÞµýÇpþ?{V= ø«¼ø¿Èd_üý`¿„zuã…Úó"Œ§XHC A=C“9_¡ˆš3‰)š ª1`qãC1Ï #Èwp“ÔØöü¤ªç$ ÁTT ÄŸlâO‰IøV…( +`…®’dÌðìÈB$ßDŒ²‰"¬¦\9WV–NjMÂ'†m¬<Oô±¥LËÆÎ«Ç“ÕSäô– +àÈŸïZVj!ã>P“ æH +ˆ Ô=ÒÜ@(JVÒà©;%Ó›ð<ÂovÙp÷?ݶӧ¦Jid¨÷(Àž`"ߘ²,?5´séoKŠ9ømLêIOeu[)Ä!öAÿXâ×u£Mhê½õæï€FÁhÀwz,B²éR#HjŸ4‘§=WhŠžä¥ +,Ú¹ÝY>3¾ª@7€Ç«“#᪗gì©À3Àp>ζ{$þòZLÃ{ä{Ê):èÏüEÏ~è‹Áû ”ßfàpþ÷Çÿ :àªøß§ùc° ØQ-€y"į¤dÄœdl…~X±{FPQbp«Õw +ÀŽmç^ºô„ +À,–ÖqT½Œgo0,VYoÐgXGYZQ\¬Ûéwùö(u†dÊÅ4‘ š©veST¤Lúýp +Ç©žˆúäH>ìX*<­p + õ¨e¥”^¸GV'²©S]wµ¸–‰Ôë7QW&£b€¦«X÷ÇG¡M{V³A?M<–Àe‚h£æÿè¨*À^¾L½«øÝ@Ø·^aN]˜ªÃxw+¤ʃ²RÀús@ð +à9Àëf°D¿Ðnþ/Jm¥}ðXF_q‰¿=êEôÓ%úûÝæ™(³SÒS± çÆ;ãÏè7<šÁwøJ Ó±rèØý)ß"÷ß|1Š`ÿîƒþ¿•ùß5…ÿëqaîF}Á#à@øÀÏ¡ˆ¥Ê©9羌dîÑ)%¡VÀ#\U$yc5^ŽÝHìiu†o×R lXÏ‘m…@ô™,VãqeÀ6ÁþùjR̺+âNk)ØÀÃnj̫ÚÌXÄTÜBí'’äOí¢•ß²@XNu|îs‰Ùú±ª(DïVI„iš©gí#ßtºSõ;jÐRi÷¥‹m`×o)¦u+ìœîôÅÊq¼øÈsÏt믘žÓXª„ëO?Ý\)tþ§¹öo‡€~¶fÆ5u™vãþdN÷pšù?<ÔMg•FZ)ø²èžï….ýçËÏ% +˜<pÎ.Æ&6Fü_@d×};ð3ÿ>ôs|3ð§IÞ@¨²ø‹Ìÿy `·°Ñã÷™ß‡4ÀC@êñç ØÑñ» +†HwÈuŒT¨å–à|gBzžÞ×­]‰¨°ëßôzßRIAzƒýD¯”‡m4œXÔ€7äà·TÇ9ÞMÝÚ(Z¸ŽoGÔÿ²¬ME¹ ñ#Ý4XÙ n‚NØÄ ò·ÄH±a°Ó.9{v€©e<ÝÔ{fÉ!÷8Ó\+–s`ãrRþƒ4%RP|I±L[B³0p1¹@ûçþ¯f£žI˜\ãºøH³‡kxïŒÈ<C×Î_ÛWõ{´gÐí*š•F¼¡Žì‘Jƒ%Ö% 1+mûîüy- ÿÂýa €gž[Åï¯ÿ©;c™ÑȰ:ªœIGçhÊÐØ>#`ßÅ·›ÿ+I:'d£I›pø[öÿ‚õ|ÅgŒüÆ©Üôí $ø_¸|° ¬ßŸù^\èÿgb\ð +ÝMÿ?ü)*À-€Í8Àù=¦ô<ò^+88Nß”ï‡Hµ ¬óööºƒ *-€éÖ^"%î;N¦šî5XŠÌ,Ù\¤3£*dˆTìò z ³’IßÑŒ*jÀŠQáÈÅfä´{DTÚÏ}h€V´àé—ÃVÙ]`ì±ÌÁU¨GØ€¦{¦¦; +Þ”/ú+¥}è±ø7C£èŒ` +YEÙfþ|BÐgàPj£œüv + ‡êÜî°I¾vt6{ŽÐwàÕÁ¸-¿ø)K µŠœµïÚatŠe#Ë“,Ϙþâ¾ +ø»À±íŒvxîzDˆ–yÿÏùŸV:ˆ‚h›“V‘îèÚ5«ˆèöy¢¯cáixÝÈAà޵æX÷ðeM \wPÀ°Ÿ”4" Ÿ›ŸÛJùWî[·±ù‹ûnß!ýÌÿbËB¯èEœß–?ýyÿ 4ðÿ_^àêÑ(€h€Aý>YÛ‹¿(ORæ}¾Ž~†?Toâ†ìzd‚‘®ïœË‚éÜ!ûØ0YäÎþwü¤•8#±7Ž«0ZñÁyÆ:²›šCIà:<¼O°µÒ)"ý–éhiÔ1{+ùcÀ`ˆlÙvû ‰£ÐÍf¶“ÖÖkpÂñM¿tWðz½¿#¢/®)áTd3¤2È$ Œ€>5…[ƒªÃtáå”¶8jÚ9 ï`=Ùè°ÿ4fÓ¹Ø+zÊÅ劯CETåŽæÑ ppñi â7 ÀM@ƒ¶ˆ}î9ºä‰kŸwþO§ÈºbdíHF%ª@Ðw$#±×ž +EkÔqH“aò_œ»yyKH°Ÿ½}žÇ…¦] ècœB¨¼‹ïÀÛçý’âßò}|»—qzð)Úÿ9]ÿSzŸD¤ü ØY`¸ 8ô‹y!ˆÈ_T»ÿ`{òßC>Ь"8 -€ÑŽ{ä ¤$¨¦TZŽEæ:¾‘m—íÁÕ¿‘ÓË‘·‰'pëü'©¶ Æ*?  9rd¬RMg}>„²Ó{%Á—bH!™ê ÊŠ2‘’-©“å~6È%%“ÂKÕHy8)ú{ËÞ¸ôؾ`ÕvV¼²hqf¢€wŒIù 4Xµ«¹Ø'2“àèš¡¾Ñ«‹óEÞœù(Î.4 >°Ò‰ö°¬Û'œýUöG,f"˜¶Ø)­•bò5Ôá縤q<&nY`{ûO?­pþß-€ûá]€Í¸þ<ßµþW-Rp{>­áÚqb3øOcÓ#:ÉgŽPr…:´ÙùðNè}ºß-A7œ­Çòçp×W—!<â·ÀùË_ͯÿ_|;÷]„ïþhèîÝ5ÿûÿÅ”¼æÿj€Ÿ®MTÀflÿÿrø ûQ¸Q7‡díZ!!ÇéàÌ;Zx Wˆf§]hÜ1û¶^äà»0•Û‰>¹Hö}¯9¦*ñ:à|3Ì:õQKÀoÅuyÙH¶¼î­e€0ê¢RKš=€É¸xÐØ +ÃæŸ“ÓP›>­à,eamà¶05×tUžJ“·/'„˜Î/CÖÑDÕrtíÚç™ mÿ„%ûÄm>çþó>#ca›€ã®-kIv–(‚•6 ÿ%_Ìp’€"mÊh‡³M·n+¡sÿü«ì•[ÒV¸1ê"ð~úig|¿[àæ™çÁûI@¬ýG²’a‡Vl{ÁʸpJû5ƒÈ”PÉdMï¥ìýpàtçðêÇ›â2êÀí~wüj òp ³-À…Ùäs;ø;‰ûný€ÿ —ç6àÏ}`» È'¨/eP0ø?øpIûƒïíìÒ¡¨„úQ~3ô;Âø@jº’P¡ØusLÚõ|œKOsTÌ +…peTÌpˆ³ÚÅ»GxÃ!×M<’Y¦6q€Öuèà9€Ä)rä €üq¦ +é´¥`˜\®l+Ý_¦9Ûs +ì$ÝHàüÒhÇW9çƒp@€Þ†Ñ÷’¥¬=€<«§%ïYéA›VÒoé¤X3Ì{¤âG¶¦Ï!´æ¥ÂbXð&REa:ÚÎwk(»|ñ|A kSÏéÿH €Rlе[*R:‰º6™Hçx¶ßͳ¥5é8Ûû‹ì'B*¥…ü(‚â=_-€ØF, €NüÁp[ ǀ̞»p'ïéuþï@cÿC*4ɦjÌ=€lôPàŸ}-ÙßÛ£µûpÜ4` Ph,BÄgš?Û»K<©¢†œ‚qEÁ™ˆ_¼#`qñSN7~=“86q@Šè\!:âŸl ÅZ—Ï0 ÄÿF¨<ä\gèØQ2­ø 퇳§ÝuvÚ ‘·¡ñÁ²9mE@“²ÇVØku²ï±U`“ŸC8¿ˆ@ë +¬Šˆô»*è‘£l•£R2_KÝX€9¸:Lùv©Ãˆ"::ÒmÀ者ÿ"Gä£%1tl'EÇ2YúÚZOáÞŽþ³§°ý¡ÍØp÷.ÀÇZÏ\ê©§fþOk)sÈÖØ²å…âH§ÃH<2? @ô˜m;(3x-¼ƒtѾÓÖêí Ñ~ Ðá2öנϽ7±ööÃÿÍÉÚœóíü,hoþþ-àrð¿÷B°eþWWU¾D¨·ìrõûÆxöéT!¼;ª8äb„a¦ì`¯ä +6´Ú‹«/+Ž\4@-¾3F9K»¾SŠ8‘?~/Ùÿ¿‡¹ñKSÛzøº ˜Œ¶£›Æ› ÜÄȯ=GAkµsî +[U§pœŸ*%M«c8Æ ç§47Òëé籎.bºšàØ€¥@Ø Gø?j ÃN9-b¿Ì°‡h'lc»GAàh5`̳‹Ÿ¾þôS™Þw€î(1ïtÿñÀÓO=ùÔÓâ?ý’žÉ%§ö€ÝȵRåª$Žø™ÓOcJÕ–ÝÿŸ +ï™þk ̼ϴÞÝÀFŒÀX‹þà_Üf `÷@P €‡î°0ð…ÁwnݺŒTm’ù÷Ï`½¨? &_< püy£»Ö¯ºu3ÌìÓ)lw0¢Â<·aBq܈æ¯X3øÊ½›ܺ8†±?úzÉ8e ¶3)“xoPäDÏsz¤b|ˆÿ›"¤múá4ðr³ÙmXŸÍPølTçîH[«Åýê½ n˹6«{¾€Lÿp íXë?ÜÈG}au)½EÉb@Üüø?ê.€*À¢œ"-Ã_uȆ-dÑj3å,B ~­!geŸ}„Éœpý—ì<ó À“dU›lRVJ7y‹GkïC6zœ¦Zd¶4n$3¤Ó'ú,€(UÀ¥ºÀËø¤üíè¹Gý™úQ‰^ +2gßà½Þn³,7p¢Æ4ÀåCøÿ܉þ$à[¿óúá*€Cr ’ ¼yœNz#P ^´˜sõÂf8—9Ù)„äD¢è»täêMûÚþµ\‹ŽV&²ñŽfisÔ©ø‡øˆíîã¤ü¥i(ݤ +¯êÈàÕµ~â÷Ô›\°Ç YòJ™é »K€<¸ô¦dû”ˆdÕ8"³Z÷ˆP%ûØ€#f±8|äsræA¹eÆÜ›âC„·‚ÎQ¢ó¼ùP8|=õä3bÿ! `SóXÿ €üXä~ú)ÛQ^æZW;´ýê t†4­¶äM8d¯›Gü¯œ|°ûè9<jNšQ õEä¾4úƒÚ\kTdªWNÀ,`oN§éÁ¾4è—²¸(·þ…ÿ +ðY_ò× @4Á>afܾuëæ-N}Ñî8¦:° èÅ?ß™ 4&`†"EñTºþtàÖËYê’‰´Ò¹+YÎD'ñ–ƒðàŸ1ÉÀà+tÿÁý|>xðÁ‡<¸ÿá½>üðGîGFL Z|, +0гcÉÌ"Õ+ídLá»(ß^÷dÛc4d©Ôù7 ÉsN-¶‘†¾uçµ^* 2Û|þâ9QE(½PPQÎcFMiÚÂV=vtñòc]Åäzì³=öÙßùìcýλzõïá ÿ ÿIè•—C¯ãõ×ÿåë*Kf\È~ò€ò‡W¸V+©o`®ÃO¤@ü§e·Çù‹NÜ*€e¨œÛ« ªT¿l`Y)¨-ßë„:Ó£qAÈr®2O¼¥w/¤¯yváºò 0$Ò£8FX¾9ã¹$‰#ø{ñö­›^^ô¼‘ërïÏ/ ÜÞÍM)™‡. < _\¾rõòqø«C²»î=s¼í²bGÎÿ·nÞt;ÂØýã Ïi4ÔKÃR ˜AtÔ˜žÜõgä j"ëÁŒDà˜Û¥3âÃ"Aƒü¡ÿæ½Þ{ðoîðÁ?~€@|ÈõÝ~xÿCçÓÜóÍT9EF|…F$wgÃx¬îÈ£lí1±uoÅ\@öa:¤wçÏšâ04"í©ü%6Pj¿@‰ÜaÜú³Î–«÷“õŽ’ÖöË]¾ø©«W{ⳟ½ZÀ_ýÂïàŠó _øÂg?û…/<ü…þùþË‚ÿk½¼þÊ¿¤Öe¨¢NPiŽ*f˜ÅáÔï´^[ {á6ßö_œê3À6 +à©ëÏ|¤¸gªÿ¥{uøàÁûÞù?zðþ½û?~ðÞ5 Ü€Vøáþ{Ðÿ¼JÔˆïY—ÆXÜ(3¸ƒ=ñ–c¢p óùÏÙ¶]@"IÌ`ÅjXMΕ¸>ѶQ…5â:õ_d%$§}¡e€³ZÊ{ìw~ç³W?ûØÕÏþÎ~¬—~ç ÿÀÓFÿÉò…/¼ò—;ï¿ ø…ÿ×¾ÿë”΀9™S¨{‡wà'íòdsäÔÛpQNŽdæÿ°C! Ž{zäÉ'ÅìSO}fß8a@¿Ÿ_z`,VO=ù䓟”»R{ÖoN|e`ÂCéØýIß4KW •(·IbÞÏÌù†û3Àú%A»a÷)ã Å^gûáN˜@Õ5xt¿}'Y÷i:½óeÀ¯é? +€o,Î|»ðÄ¢›7°PÇé$ `4@æÿÞØ4@-•C({æqNðFð±>¶_éÙ#Ÿ1Yì2’4U%],—ò“AÜoôoîßÇ`Þÿ K€÷YÔø@«äßÇûµðàÁ{è€ÿùÇî}pµpÿƒ÷ß{ðã½Çõ^ÆÝû ãTŠàê©Ü9y§õ]Ù]hïd¥±+%2 +Ò¾Ð̶=6Ñ¢Ñ镸¹ÚZ•]0n:õª>OJ gc䎹‰™þ³ÿ¿ÜÐ?’~ïÒ/¿ü‡/ƒöWþ¥Î×u%üøµ/ý¯ýá¿øš>è*ÝYÇ÷¿ zŽàêÙ¡†M‡R§m+Ù]°­ð{þ3Ÿ‰ àcïü*{ˈ&©xê3rµ(:G0³QÒr»hëÿ LSÌ(™Îe¾{þn +û Íþª ÿ(€pÏi\¾\ôa~kïYÚüZ5ýYŒ/ûïĘأ,êÜýÈrP”t° Q 2þoÞºqãÖm¹8¤¶DùZ, °…~Hݯiœ#{úruvhz9øB‰&Ý’½¡YøÔïØvþ×è×i|øá{è€ÿÇX¨‚±~üÁ(€P÷î¡îÝpïÝ?|ÿÝû÷pºŸÂî³ x‡“0ìŒKC* e2.Ô›MÙ—¡ÈÊ.`á:tt© !Š6À÷§cÌl¿þU}®FjP®|ߺÿÝ{÷Þzãõ7_Øù¾ð‡/¼ü4—^0|Ì|Sà&ÆãKJ€”_zùËÆP¼ãå°ˆð£P®Úü4Äf‘ÂÀsZ coÓH“¶ö‰ñôÉO~rÀq @w Ï|ïÀ¯x`§>ó¤ Œ°²˜±±ßýŬ•ÿ„„Æ?¤/ ­Ë {‰¾6@¦úÚÑ >ìAÜÙµ7 0[‚™Æ·;p™ðC†fÀ©?K€Y×ÀqûÅ–³èç?Û4ÂÕh€»>ܧéO-HgÀ²r†Àÿó7n>ëÖN',úH @ôÇØÍÿc@›Ð.æ‚ >’'ÁŽõråS¹é<+ü¡5DQ1 ß'æÿX÷Qî -€À_·„¿1[º;€sà K€Á‘)MŸÀG“:xº9ݸ“HÃó7žîÆÍ›ú}º¯]ÿ +L?xÿ­?åøÞŸþé÷^ëý÷ßzëÞ½wßzë-o½ÿß½õþ½×¡{o½ùæý{ïßÿÓý½7ߺ÷þ[¯¿ùÖëÌ¡¯¿büë£jüäÀ[o¡9Þ}÷­—^úêK/½ôÇ/}ã«/½êÀœxðîû÷Þ{ãMòSÅ›oÞ;Â÷æÂÑ‘¿Âýwƒž¸(X2Gç?õYmõÿóg?ûØå‹Ä=ñÄg?ÿÄWßyíÍwÞ¡š7Þ¹ïžfÈýÿ»žwß{ã_½ùÆk¯ýñkïüÙk/}õ+h€w {ï¼ù?¾÷úëÝ·Þ|•Ù»àÿŠNxá˽,w#6úÚ / VÔNÇd÷€#† +(”:,ƒä†Yq¯¢ÊE$ +A Pü_þŸd†>q  +`ÿ.Ž¿â]€ðäg>ó×e2Í9ê +õê§Ò•Ÿǵ‰*{É#þw´<)R”ßæq»í§S_¶Q:0½rÙç äXB²Ñ"1𜗻/dï”·ø¤ŒE-2áíe¸E€ +€bbü»° ›³pëyè¹çnÔ·O'[R¦úM”Æ0à;‰f Ò„°¿ìúTÇ&ó?)édJ@ûå¶à­Ö@)*¦.Ï¡±n ê÷è@|÷Ý÷Þ»÷=€þÝï|÷»ßý§ï¼ú½ï}÷Õ·8MÈ÷„ø«¬_}õÕ×ßÑöÞ»àý­·ˆzýõ—ý¾úM®bz,€÷þ ‡wÉù=ÄK_þÊW¾üÒK_A ¼öÖ›ïª\^G{þK²¾ÁlŒ6yãõ·˜—ßzãÕo¾ñú+j•,ÎÿþŸýÏ~Ö_—¥W^ù—ßý®•J(ŸW^}ù¯¿Ž2yã{¨uÿ­7_í7ßøækob¼¤øã—¾üeL€7PÿÛïÜ{ §ñÿ5¼擨Ñ/ç|"½ð‡LØÁmmíÐÜö‡ ++¿œTà\  # ÃG @#@û[Œðÿósà~í¬MÀ±°\þÇÌŠ’’ÏKýWiQ܈¥É¶KR!Œì©Êr]þ‹ÁuAžó }ÿ²³NŸ¡c\a P¸ +¼çoÑ6¤›ùY¿sçF4@-×ûZ½î-…¯ñºµ­–Œ¿,€;þíϱ=€Í¸UÄú_]ª ÿldò@*ønj@•Pã ¤üøÙ,€Ðž¸t‘–Þ…Ý ¾-Ãy×ýȬ¢p£%Õ“*:뺌?¬Þ|ë½wß|óÝwÁú÷¾Òýrz•ë«z¤W€Û+¯¾’-0O€{ŸãU ÷º7ÁUüê›h†wÜ‹ïë€ ›ø×¿¬øJè›ý] o‰kì¯}“« +İo$Â]6på:üe&Ø×ÿå˯üKyåëÐ+¯|ûÛº_ÁÅ׿¯XÜa™¼ùæC)ß P¸äú×¾ùò7¾ò¥/}åå/QOèÝ×ßxâï×JXùšú’ÿ"¸®F þ¤Àã¡RØi ˜ úù2nk@äïÑ@b©5 +€±žEÙÁ|‰Æ_@øÿê{Q¿l`ï.À¾P kê­œaØ7Dƒuþ·%¥Í!%XIm(®Ø6h ýq4ÊÀ'ÎÎtåÊãUŸºŒ83£=o{®?w3Ï0µeîísÁ³a€»YÝ×5Û"%K=ä_¼Ìßìx÷j€3Q$Á}L²‡ô‘{já>Àïeg4]->î\cxcÎÓ†¬o²¢ÁM -¶µqi¨jøJÇ-€[Þ¶ÜoTûï[ßý®¨—¾ý0¾¾Ã÷Õï|ýëßúÖ×ÿxyÓëëѯ¿þ*&'aôêË|€¾(ˆoj¼þMÔØÃ3{äàûò—¾ü%ðÿ%| l3©!–^øÊ×T$V¸—_ûZ€?ô­0õ­ý èk_ÿš¬”W^}ýe´ž^€ñWÞÿâk™2qSí+¯c6à2ðkSÄF/¼ðû/üþSqÊ%•¹($ >NÙ–Ì€3w»0°bõ²àµÎKUîÑE€* ‚!T€”> ü9@éÓO‰|¯x&+Q^¤ƒ| î)êM!äp%ýÓdöÚj“Ø|Ð1ÙnŒÑ"{±Ôf׿ Á´{5혖D-Ìý¿à~úß¾î!7ü‹ßÓh€ÓK]¾\€Û6^^ýE;X@Þû³àãÅs ø­°}²GT1•’µ ×ÀóÇì`(Qèãëý>}ÄÀ!þ7 ?ð3D†Öùâ]çø·£dŒÛ¨4GVäf)€8÷À±%Àó7ž¯pëΑSø@ùÕLúL¬¯|û;ß`LHåûŠP{áë'\èUòh¼Ân¯|L°Â.D7f2¹Oz¾˜IU\ õ’~tBNð%@¿Qœ(ž&"¥ò}åA”Š_cüZ"5jSHB³’Ê$SfÉD¿ÿû+bG¦µPO¦¾H2|/ÿ[§ÿeÌëöŽ DæÊ\_ͯÝìuètâ' &“3$FE«§Îú€;kQþÌ3À¼;Ú1þ1õoÜ("?à×(Àĉ͟™Ÿ/†€J *ª¦a ¸ +ê(Ð/ü½É«NH;ôŽÃå@ÿ Û§ Asøs‡=ÎÍ£€ À]Ô_yüñµ Hëž{îé§TTO>}ýæóÏ#×µåu tÖ`,>Ä«ë«}µˆ?~ + ¥áßö@P»ñÜ3O~æ·?ùÉ'ÕŇô‘{™å¶ö7~óz-˜ +àV¬XõÀ¡áÕ&Œ€–À:eYYäÁ…þ"'ë7¿óê·™î¿þmæ€à+ûð¼q¾JhŒî±¹Eh«WLe’BL Š/?_bD˜(JÙ¬é‹ÅUØ(9ç{ý#õTlèÈÿ¨Uµ Àµ'‚þ(:Ì* ‘ ƒÕ®$©&i„k´v‚V&…³q¨$¾§Ñù‰c ÿ¢sŒº؉1”çÔͳO ȯ¸x¾ÐT€ÔëO=áî¼Î~ýúÂ;Ë{Qïh3ñsaÕ÷€¾ëzXŸg¼3ÿ·{8'•éöÿp×—tb’€ûc©¿üþ(Ø»sàñÇU¸jš-·O» khïÝè´®Ø,€`” ì‰c§öîþ(Š÷€ÿ zÙmTGä8}„ ü5öàþ0ýÖõ[ÀÜ*©¼ÀW­¯m°Q; @£@'©wKM °íô.¬ß>¦Xz3™ý;Høwr|{  ðGÈ¿,ç·¾õ'ßy œD•áßú“o½ò-TAYq‡,HP†¾–Rsýú×±²EZ*Jxêü'rªK•[†„4fSÉ#üÍèi• áB?€ÞU)à‹à?jP +RIöéWhêø#‚IO(ª„z~ï÷T*€ÚùGqà‚ ( ØH+á,âÝmQŸÙßûnÀÿüÿ)ÌòasÖwÞwƒïéç°?1í˜Õ]ðwãÏW>3ä±ù9“,Ëçÿš9Eä8¹ØÊž±±ôiŠç@fü™68OJ†íã#“õë~µ€ücé‚ úÑ>«€<®{¾?Ž@ÔoÜ|úéç}Æå‰€¢Aä‹!/x5èïÞV¸ü#€,^£ ºÀÏ/þÌ8?Ô N¡Î¬šÙ@‹:AÔº ±G[ƒî_~ó:•Pc¨ +ž­\ð€Lë´rgþ“÷®wÍPäyó.À·À~æÕ,ÄH)/xuý>WÑo²z6ÑÿI΄ 릧8lâÄè±ìLÇñîìô.JÁ‘¿¿`iŠF$ia ‰Ã+¡žU#–¼a(Aøw!‰h±L¾°ÁÇè…¨€TfD*ÁâS¬y^xá÷~Ÿ€Óî´×>ç‹ Ü5;ÔÂh&Ïüe1¨Òƒ¿&@ ÂÜXs³ÀÉÚ'V>g×ùèw¾‚…ๆUðüDãrQ P0}ið¯FZÈŸ†Ä?øßi€Cü[ˆ6„¯^ßGç/ä~OŸ=Ûÿ¢ @ž,þ‘wåÿÖ­çž²á5 w-'m×ûÁ‘ÿߌ8i] çäÛEE—§·1÷Õ­ìš‹`ó%¶Ïƒ+@uóùçž~ÎØjq·Oƒå¿€Î¡àö`*GØ0ûÐ À­ `öH¶¿øú+(€W^ý¶[¯|ë[,b¯/p"Ùà$|ý{-èXû Q‰r-ü£VÃr^¾@ãšs‹‚°*(­¹ ªè«RXÈûi²;BI!”Ìú¶Ù>HÐÿ÷Šàê’Rµ–=1+{J ¹ÿ÷¢4¢#˜ükX@ú“u0ËÿÏ)ñÙRw×8,Ú¡Îû ÞÛ€xÄÑl¢X°Ô½£+_Ç@ýyl>áàÒØy1£ï§±„kKPh´ÀÓO]ý~4ž¬ l 6r¯rh´€ÔMAפž¶ákcýªC²-28ÿHò14ÀðúŒ«þ¬bœuC þ33ñ=wý)º$&€s§š½·ˆ Àœ9ˆpÉwîbV'Ppà^ÁZ£[fHô¼óS ;ûÞ¹Ãzó† +øSmâÒƒå¿ýÖ3¶ÂBÃÀÁ×ÝÀ Q->fÀÇ—#«¡×¿ËàUí~Vðˆ9Ëx ¨‹? WÖãuƲß+> YT `è·êÝ›g{~]P¾J ÕeI(Ö]e[×[kQ&{> +4ÎRŽ‘Y[…•¦ÞmÊ"> /­EPLs[sNá ü3ññL"5ErÛXʪB'þQNú°ÔúíN'¹óçý·$þàÚZl´N÷ù1@ÿ›ô9¸'E+°ÁèVf$Ç\ã6$7ª=¡ðñò1.w´`MË7Û׳ ÈcÖ2øZÍ•%0Sþð,p–öÛqt¸ÿøG±%,(ó?Büc>Z¹È +`Û¸‚ðø…¼1åÂù…àwë©Ï<ýŒÍf]îö9’ÍWËYPº¼¿Íúß­~ÑÐ0‚LÄ»#è$= Èä³‚î ŒŽñ"ô¿¹0èùgžúäSÏYVIèm4XþkÑÉ{2»íì,¥s”[À,Žïd °³ÈøÿÛûàÁ½ï~ç;¯`ú¿Šˆ3ÿ‹“¡` Àuæ¤)TšŒ/àMŒqS­Aøð „ö¿®ºM:Ø"UNRÕÄ¢êoP¼¢mBš?*ʼ 9ñ‹yfOŠ(µ¤ä_ôGÔ ¥!"¹`¾À˜ •8‰Xê'i9€Â¤]"ꉲ,ñ¯П»G˜¹ à|ö„Í (iCŒáAÍÜ ‚åg5@ïwMÿ,økó3Ý{kO À;-ã¬ÿõáÑ@å'¡îâ@$ü*îðe!uÀÓOç~€Ø‹0x £›‚ÿ°œÇ ­ +ÛÓ”v³JèüO«:Ñ$¡Îø—žÐ™y¯·k€ìÌgÃÿ[¨.ºÊ}fHmvñíä¼O¡d˜.¤ÃpçÚÆ ¶„ÕæH2 ‹óÁعÍ~ëæsÏ¡) ™¡ h°|ê׿ûW¡c{ >w(ü´}'Y2ªÓÊ× À¶àÓJû{ä¹3[?ùñ‡Þúî«ßaòŸ[ù¯ˆ€`~ ¬r"Á¸¸ +œ1V$ìªv>ñˆ;[k |ËûމÝßöáÃo½òŸ#øº`çò篛§ý_øÒË÷N΋öœ3a%°Ó0ðòõ.+L ä¿ýí<^úz9ö·¯úÛƒïâüîw¾÷½ïþ·\¿÷½ïýé[¡?õ·‰þúç­·ÞxóÝ÷Ü{÷MœïÞ{ó7Þ|éÿñµ×^úÏÿã¿ówÿîßùÿàŸþÓ?øæKßüÆ7ßø&Ÿ—_öwù9ÿ2ª¾ô‚æBŒ…Ĩ\Ác$8 :*AJàs$O?'Ò—òß)@ž©î|öùC ï."™Ä»éŸÆô/‰ýYýRîÿ=óÌóÎÿÙ˜ÇÐ}Ü‹­JˆØGà½qã62€p‹U²êÁÕòó|ŒÌÔà&@·uæÉ ¡p^eE%€†Aþ@›‹¿ÎÞö4T2QÛüO«ò4ÌGk€3£æ÷€Ç`q þ±Š0p B î×(€ÜÕo°·ü¢@3g'x61V ìðø(0‡K· «@ ³- +Sé#4À`ù¯¥NÞˆ®íY½ˆ°·àq@pÇe +ðãxïþ=°°e’}åuçe!¼Oò'½×¿QµDÝßæ sÿîw½ÃPzÕŸë½öÕ¯¾öÇÿü¿þêK÷üàžï¸÷î»÷üèÃßÿÁýû?ùñýß¿÷þ‡îÿ„ï?ºÿ£ø£ï¾ÿ£wô“{÷>øñ¼÷Þ÷ÜpïÞ;ïü×öÞ;¯}õù¿ûäßyòÉ¿óðÿìµ—þìµ×ÞyçÍwî½ñú›ß@øýÒW¾ö‡ø/¾ü¥/ñùÒõ{ÿø÷üüW_ú¯Ô ùqEtm¡Þ¸O&ÕÆ—Py$ÖÍnQqíWìå’3~¦U§Y€ï`t(!€ó`QÊv=Óµ3¿ø¹‡'ÐùcíëVåkãë{Îäx>>±‚($…k®> ÐÍ Þ£*¦àßfÁ=1̘ÿÂÝhÎA>§æèü´Íÿ¾½âhþ$îóF`éüeß$þ/_¹rAµÕ L#õû + °ð#%Åm_ €é\X p€èRÙˆ€ª`^L¼ ,j,ïh!ìùb°®"5$üBƒåE%5ðËžà»w–uÊ´Æ€• ü“öžH·K_¼S ýü½ûàÇï¾ÿþ½¨&âüPTû?Áéw‹†W^ùΫ¯èòøîw¼fÄ+šð¯¼üÆ7_“9»Sù[÷ü‘àK¯½öÇü¯^{é¿úÒƒŸZÃlo`Lì¢-ÿù‹ÅÖº÷ÿÀ«‹}ûœ³{ íXÇàc‚O.ð%â5 üõ¼¸y0) ¿Ï_:*…:öHC噯bÉA‹Šh¿QÅ¿$ögþBwì®×ê'øf0”;Ù¸²,¾gƒnñ²õîÝ,jä«ù€oÏËïYz²éÆ4.ÔÏXÒPÐã¿æà¡=€Àù¸`hS,ð+<@éZ*µ¬æá¿Ÿx¼ñÖý÷ßÿSlñï}ïõXê‹üÉ0¡o½¯•þ]¬ôÅ»÷ï¿Ë¼ýî»Þ¿Oæ7¾ü×_zéÏþÕ;ïýø'<¸ÿþ}0~ÿÁƒ{ü¯þÕó¿퟿öÕ—~ôãœÊ?|ïÞÿÈP`ü/(€÷Þÿ± + àÃ?bÒ_ +àÞÿ«€¯)ÒøêŸ¡j|æïü±^S¼óÎ{(‹÷Þ¹wÏŸüååüñ+ÿôþÃðþÁ?úOÑX/|)/øúÃüÆ÷c xkÄ%@‰Ø§\DìÝȽ5Ëߨ|ùj€„¦Ü9ײ–ÞíÉ?ý”+)˜½ž¸œÚ™ßE¶V?ÐÎ" n o|¢£(rw€C³@Ñ  ôI¢^žFÉl40Î>€ð…¹KX¸C ³~Ñ9-Ú-ÿsÊ»žøØ`«ü§µ<ÿ‘_ ÷òøßÚpŸ€èþíˆd?›ý£ð@ú9/ à!€{·pÚusq-‘Ï ®?#ô† 4X–þÊŠà·ž¡ž”Û@t•üe`S6 ¬âÙÀ,Þ8x€,.(wà_ àHýðG÷ÞŸÉûG>xÿ}ìóÿæÞ½{ïÿwÊBý»ßùÓÿöOÿô¿óõ`~ü#°ýÖ‡÷ßùðÇH{ÿÁÿò“ûïÿäÃÿèÝ÷Þùƒ?ÆÔçÏÞ¹ÿ“ÿÙiûý2áðà}fÿ?þêX€9À»ï~@šŸìY÷U¾Ê+¢kõ9ô̸óâȾLŽãÉ'k|ùµ?~óµ×Þ}“jß»‡xï½·¸ô•¯¼L¥/ýÁ?ü¡ðù'¬¾ì[ü^ÿf^;u Hûþ5Ç¿à +°(rìÈØ¾öÍŠ½˜òýE6€S^æþšÁ£6 +Ö%S¾€Wãºý_êN:”9œÿ² ;ÁÌ4PÌ£ˆñ‰€›198CªuGEây4€;‚Žm±ÿÛù Ë5ûÏŸåÚÀÐà_”Xdð¬ÿ§á3ÿÓ×>Ú`ˆit ¡^~œ%@á–SDþ¸)ÚsÅÕ%€è®à³Ï*€‡,€;oS.Áû›€Û+º˜=·KÑ©*üøë'íˆþÔúQ€Lë´rgþ“öŽ?°mº5m¥oÈÍ‘ºéOn<ÿŸ?,!,íá»4CÙBüwL¿ø·ù—ùóÖŸÿüç?ýéðýïßýþÏÿò/ÿòßþâqçÙ¨öý?ýOów¯’‰~øÃ?ÿ oßzöúðïÿ{¿þ‰ßúäõ›w¿ÿƒ.ù‹_Âÿ²uüÍÑ|d¾û±D¼ç!Q4ù‡D¦Ç…¢è¾º¥·}/>ôŒ{tnÿ¡ÜÄphœç3§{[«0ý¸õÙò#@ó_ä j4Hì« ´žÉÝ…gv›€y¶3ÿË3\­_¶¡^²ô‡ÿ}ì·öÖÿjˆÌÿöþü:î$: ~Û¸§üðãhŸ¨b` ú¡÷bˆ”eì6 ÷—AÕøb(`Œê…¤¤¸Q^еXh9¬%€ãòÌÂ+$íüÕÁ¯ð[üiéNx¶ýVk¿âs15H—ŸH[ +ô6Ñæ¼®@ärîðy)• +æßµ¦U¿øùÿ{À~xQ ?Eܾ#®²ÿBì pÀ¢îÜ|öÙÿà“Ÿø +àwQß'a@‹öó7KKüÁ‚Ó½ø~äÚü2HøG @IÄe4Àù¼7„+䣶îH8‡%o8-ÿ1ö‹amí~g|®ª ï°é•2÷ßr³Ð$Љyoä¥vî".*´ü‘Ð…ó™ÿá +–ò$“MHHšR,7d&rª7Úì5ÿ]{âÒe­¹s'ø¶¨ñŸÀ²²ðTø_@Š6t°pâÀ©/@±?$ð„)×à#,€¼‘D pý¸,ÿµŒ€ã{'¼`ßøè%€óø/y`gØ`ÛŠx¿J@‹2sËNØxµ¯<‚ÿ¡ÿ¨G·þò?|ñÙgÙüàÏ?¸sóÆï>õÉïŸø÷þ*îYŸbþ&iD`ÐçÑèSÁóLI (¢.ùÇÆ( ˆÍüŸËÞ=@ø?÷ÌóÏdºF›k™eußó›Ï¹øÏóÆíÜ ˆ@ ¼ f@ CK¾l!jË"Vÿ¡€ÉÌÿ²'üAù<ʘù†êè\ï·óìÿø;ÿ]z¶ÞIYéI™þ/xðÊå+ç.@M€€B¬d‡Ç_~ 2±¯ELì¾p÷î±=€çûؤà™ë©¬D—ÉÍmÀ_å9€M¤Ó6ët¼ _™<¾ðð°6 €"ö–}bºÄuDÿß aý3ýK—Ÿÿ, +à¿GlÀÍÛ/fbÿ!ÀXQ›ð»Oýïc\¿U àgµ(˜ +þ†ñ¿)€¥býkø<ÀºÀéÒ8(Ú ³@aÔˆ pp rŽ©ÚþÞó÷1Mü¬ýäýhd†×8.îÁ8ãJñŸ +d+}S +”å­V ×;!;ð›Äf´e‰6™¶Â±ù¿øïïúäï±Ô[RV1Žz`V¦9…¤žÑT8ã»BŠeÐpçŸyÅU À u,ä|gÜé¬1ÓÂÐOw€( à¤Jè€gžIm%À¯sðùµ8þjšàOÔŽ%#âP¹~GË¡ªølçƒw*–A'~¦~TÀM÷†ò¤ˆ+ÆÎÏ?ÿ e0´îùêÛPó†…ª?BƒL!UyÌÜÜî±"äKqL3h&ÓüCâÈþ¿ {@À÷ß>´ÞþÁŸXYŒpëÆõÿà£,µ€Ÿ¿9 +öTǸèš7ð?r.4"ÓªW_´{‰%@Tö÷m€îú/Ò—Ña0‘ï & +Š_Ïüh€èƯó¾ï®@ܼõ\F‘§‘ä‹TiV0ì>t@™ÿÚ¿SÔ8s!¨LC­_7û%ÓIëÚ¯R´HQ|.*åaò.àÒÿy@—CÂýÔ)àïÛÉÐãôid™O𻿰SøG0õ}ÿû#5› -b-c1²,€*€€' +`Û£½~ Nþõ=úµ_ÿ«¨€_ûßú•è“O?s4T^‚Ĥ®¸ýÌ')à7ã7~ó7>ñ›ŸøÍßz#^L h H¬ÄÛä+”5ȦªÄ&¸qý“¿aÝ¿!ýæoüæ'>ñLž\>ñ¿õ%<ó¼;)·X +)lôÿ» €_üWŒp  rø+Y¿‹àfA•}-ŠŸŠþFhÝŠ{ðýþ`]è†1ŽIE0ëêØl€â~#ºJÜÙÚI]  `A¯‘KD»vãµ 2pÒï`…¸°Ã›…èõ>‡v€õì“Ü–/8ÒAKà{Z(¥A\^kHæÿàßëìÿ£ Mr4ëxïæùd^öæl®¢g¶7WrvüŸyò ç>}â·Ÿzò“Ÿ|’\þìÌMïÑÈÿß< *(€m @€Àm'v,€Í8°žÝ·ÐŽ´íÖ¢Åÿ j€üŠ÷Ä·6Àù‹Ÿwþ),%Æ@4‚¾¬ÀUŠ  ÀH’£çL#е¯Ž&Ó‚[ +øý>"`‰P7ý£pâÒ¶$ÔK©6€? +Ø¿  g÷2vøïÛA Î×vÓæÛ.¾¾!€Vjû˜rÖÿGØÿøŽæÁg0ùùßM²žÈ]× ÜQ§‹ÿXgæ×€ô1wì5À"6RÐý€$ä(€X/¾½ÝXÀÌÿ½(€NÒ9•‚.–;ÕðúÕ™óÐç€Nÿú'ÎxÎú'ÿöoÿÖ'›Óßþ­¿ý·ÿöoqaò?„ñ®@òJ¿ù['Ñ'>ú]…楨IøÉOþöÞ瓃€¿q +BkHû@ÀgŸ½s'@†-ƒwì.Àï>õïÿï²ÐÛ€ë.€À߬8ëÛ|‹àÀËî^Àç§@ct çF±D¶ì˜M_öPÝðß'4€—`=ÈG äή3ûmq®çF6À³›ꄤÅSàÆínDeDåÁIâ;„SÉ…--s0,óù3Ÿ "ÍX€­×‘/DÓœïMq°ÿg«³/õ3''.6Âeÿ\€  ‹Ðú©ÿ/qzžg¢ì.²»XMM›2AJÝ,V‰Ýê1ŒãÈ4„4f +-ûƒ2Iáp}ÀÌI¢BBpÐ'iPHͶ€þÛŠj–Xjû@°ó«Dª¸c9®R;ƒ#Ãv!GF ðÈÈ ?ä’ç¾îçy×ÇÞ›,²ºgγ×^ïz×Úkïµîû¹Ÿç}×ÚÙgÀ +ÀÞ÷¹A¹hf²r/@w04¦_I/3@P@\AÿYè×õóhµ4@äPÉXƒ@dã• ÀbÂëFÅÀ¯íÒ0*éÍvôBˆ§={E =}NüÀÇ~«(ü7rF¯Cr:au@ç°¥hìVÞ§åÅÇeÜÇÛËŒ¯þ’°Aw ûB‹»PûM„êиô9À¿™;âoÞEJ?²CàL‡¨×D~ ¤ òº>¹@Å€¼£<ìUCSÕ`+§¬ +ôùA ãêøß]uèøø$0©ä-Ñ•È}þéÿñ¿–èI [Écx|¼?cÁÿbKŒ¾0êç‚[Lƒ^ƺLÁð/¸þ›ˆ]£«”RÓþ^LA}¿Å Á„‘ +pÒ’ÿ4 iNGXè }Œ|¿—_"«™77GhoüãýÐâ7ãÿ Ú(Ñm4úù7ø³`8G Ã_"@6mÀŒ~½›ªÑ‚A_Š™œJ±žV€M]¾Ï<«÷Ð3¿" f€ÿŸý™ U¿Ó‰­y/@c´à” ("oš5ýàS‚ ü,·wø¯XètéG°h†—ö ^ˆ§²ù_ xð˜éÁŸ0;Ë¿6PâñœØA%ü™+B&RÐhŒ¬€ IÁxjàéˆ0D +-¬$‚5‚8šcš.55E¥" ÔG%>V3Bþ0@ 6þðCµÀ~ނɛ +àÙãÀÇb ƒG÷ˆxš‡H¦{ìK¿DÉ/þ·î ¤wøL—ê¯ +!0@tðvÎ<ðk)€UÞB?~ÝXÆ¿ÓÞ'Dû²…cC1‚t½#؆ÍÙŠEZO§Âh?î6AÐå;Á¼¬ØEX×WxùêK‚¶ od–ðÃ}â­òϸ²sç~= _¬ð¯j~ÃŸŽ‘P ƒrþUÓ@{Q"è IB8ýº`PúVóÏ<#øä/|:¢S€™Ó°Oà +ÇZ¹ Œ˜ø3û(L@’ø7‚}.i–Ë(/fiãñ˜E­f.Ê–E Õƒ` ˜ciqÎ2"?\¦C“³¢‚ +¡¾”…]Ê,%â/`ãVRl°€9<Â2M©ímlY­kY‚ácµðÑ€ü÷äJ?ÈÛ `ëjp Gð1PhÅE‚1@É„^úoU2òÒÿø‹,¦IÈöQ…€<@¾6]´ÝÐüøòÁ¹3º^£ûŸà ö™€vhÂnؤ×¶ÂfÁ‚½W‹$4ÍÖÀ–ùëqô- þ_6ØUê ¬îMþVЛ¶èÿ½èÆqXª~DC‰ +`XÅÆ¼ÀôÔ•`‚.vŽUêÉ —¿æ[­Š‰¥jŸÂÿ3ÒŸþô-~P€ß1ìÓŸ^X0ÐÃþ:§]–ГûÀ䨥‰qÒ€“›ºÈµêg×o ™ë ˆw5âïzIä¹éž“A³o°ãÕU3 +ã L"Aè)þA2…no<‰jX\˜+h­‚ÈŠ3øÿÙI h‚x)b0¦šªÚÏ£   ¯0®ìª@W+À 9^Õײ‡ øë/¼8¢+8¿ð‹ä5!HxbDƒœ`€l- ð5mÉ ¾«î·º5®ß`·C7µhä[àà üiÔ*Š©'ìk =@•u!®Jü¯®qéé²K¾©M Pð†Á`™FSü½JÝ£‘g"ÊÝ¿üòÕ_¤¬;þ×ú«WŸKõï‘ÁNìQ¿ã(þ/øG$üY‰„ïûuP +€D Ô€'ƒƒ@±<ýÔSCO  dÀŸ…>ùÉ/~úKò#èz  ~¡ÿÓŸþâ§@øÏ<ظ²˜gZXò‹0°j“לtâýÁ¸Î"1œmÃ:cÁgf5¦£óBÐ'¦ü¤©J  óó¡Ì»1 ˜Üø˜ÇaŸ ¡taÖÿ¨(ø›-\CüA}ͺÄ>;§j$)Ñæ€È# M²>ÿ9¦Û£F«  ;@?€õÍÿôÏðìEDЕèjø/ÚþãaƒÝïTyã_ðVfùê/!äJ!bdÕÐËz™fá)±`ý¦‰Ìí\0€7¯¤›BïÓ¯ÆZà—WhFûárãÓˆI~VËÿ8ú>£ãKüiß•Ÿ€‡ƒ¾Œ° éEÿ×ñ?öOÅùÛ@»4€‘ϸR„î0Â#Á®&ú/OMþQ®g;ï@eÌx¥æL €¹~Òà"2Üc…¾øëâ€ø) ú¿øé)0V8à3T“GB¬W†[U\=ÉS][˲*é +âÊF' ˆè-¸á‹K—ûÔ%æ¾àý8Àø÷6ý?_Þú‡ßAq¾_à_«»¾KoüÏóÃGü@Ü`P¡ÿõà2­;Ï&À,„1?=ÅÞ“±/2P<€ S`Ý +0êy?ýÔÓæ‚§ECŸ›üTP@¾_Ρ€s@™1Ô+¼‡5Hb ·bs“ +&g=pªŸYg8sÊÖEßœ-Ÿ9 +ܘ c› ¨å¥8‰.€ ´˜raN@Fla +€ „n¹kùsÁ8@LÿfÌõµDen0§€þ_+ešXˆPŠúµµÀ¬VñÑk‰‹Í¤… +Àøýù£[ÑP + øÿœÜ # FùIOb\ôB> +à9Þ€Ûª<€Œ{™è¿ô"ëèBÁ±+0©^x‰Çåx™sÒeâiÈ^W7xκ* ß¼i€çÕañ.F²@ +Õ7a7 °*Ûû ˜%„™]þŸ¬_ùt¦YØÿsüþ."šñÿUÿÆ,, wü_n _cé€TþW€¸8c€4° ÔEbïK .Lñd‘s…¼¼ÿÓ(½ŸB<54ôÌ3ÏŽ}ròS _üõå_ÇìüýÉuàú¯~ò¿òˆ¹½;{ßþ­ïüÁ¿úÉŸüÕŸ·Ö'ú¹øôî&€%…þ³cŠ—ì®ùñÍ×´&pÖ8Ì™¿×7 å{È›3Ä”;;µ '3Öqö¾ ¯“‹Œ3}{:t&ù3)Yj™@à~ɵÍlµÌÿÊk"Óˆÿˆ”¯—ÞŸH@ Ÿ{hÁñç±–Ðø˜ „Vðo+Ê Ü +ÐÎôW+>üËjÌÅÐÈ6dx!|¦Á\èë#·O>S±ê”¶½ÐUM[–ûÐI¼Æ¿Þ\I¹F`_—‡ûÿr‰øZ¡„UºÊPºˆ´‡ryÑcÈ{Aø’ècöÿhxáŸü|}8ÐtføÃg}~eVFrS³ømïšà>üQçþÖÿ°C8v)€pÿmüKØÓà„àÜÄàœà0!Û°‹Ñðü~ÁÒ¢€¡gÆD“ŸúÔ§ +ôåýŸ2¢eþ'ÿþtÿþÑÁÿõ·ó7÷îÜýÍ;··ïÜùÍßú“Ì &úkH@[š”îH· ¬üúB:]aÍMŸÅ!:ek›ë·6ù2Á^ZœJŸ'â8mã?(—Æ¡`o4×Ö$2hT€¥<,0!‚щvÆWGxátd&‚ »]r&%Æž}Z –à?'µÇÇd‚ù1 +€b+€ìð³cîø?,è×XzÎ0@äìåš8˜ ØÆ[—J+¨Û,ѺŒ@'vS†à‚à*Ñ…ã°£L×. ºtkAV¹~_)Þ6T¤—uEð ýLÇTð_ûž¯o¾ßÎø/?€€ólkÒ ð…üŽ.àÎ$2àGÜl”q;ÚýŠ@3„&ð페;÷04DPÀœ¾@¯—k@2@®ñ““¿`È$Œû¯þ¿?üþýû|pÿƒÝíìuîÞÝ›ßë¼sóæùßxû;?ù ´Šº `yavqa||õm¼éß¼•)[h@sgkó6½ oÿš¬Q 蜺ÌrÁ2çS3>ÌòÏ:‘<㉘Ý@–’Nd!²®Î¼Ð¬‘¯(®zƒÃ2?|–@€$ÂÄØB€E®cMYâãc1#´Àÿx`ÇÐgÔ¿à˜À“×=;¾_8ðBñ„‘ð˽1áøÛ;‚L+ +Щ4@Ý`!Öm0€NNœµŸst5ø2¢Àþ?T´`"ðŒNótÐj“ó% +Оp¾¼kç‘zŒCoàßþ__Ý_…ïߌû™7Éñ}TæøßßPu"°¨áÊý€GYàßäàn9ØÀÿ¨ÀÐfTÿ#•0 þc.¶ÍýŒNáø‡è +   ã»ñ>ô¬ò'Çbièi€üÇÀcpïßç‘Ø÷öw¶öî~ûÎ;óóó×e¿ªéÿ0¿õ¶u€ ÏuðŸ M[¦éR +@ sŠÀ´NÆ­¢Öè^,&0Ú¹ÍßÿT)ˆ¼ +𹣆&‘Õ… x&‘çÛ¦ÔÉ$aä|%H2À}9Ëá.¢².ο/ &„lÝ“ŒAËúÌèGÞï…%B>K&ôÏðD VÀ!À)sOH÷òŽ+ÝãâõÁ¼ ZÔFGeºÔÏk¢M( +PÔ|5a×6¸ãšqõ«ëÿçÜû$à €=~Ýíê- 4òõ""€´-¨2{Ó‹wÕÏttíü?ß,¾t;“äsÌÔîQÛÎÐ7¤¦@ÜhËŽˆ m¯Äÿ‡§ÀiÀé)ðoo ükȬ{ÃïWsƒzé$"€ð'ûôä3&"ä.Äâ€Gþ¿ÞýáÑÑ·î‰øŸ›Ý­­·ßÞ{{þÍ/|áúk׿0ÿæÛ_}ó ׯϿù[lì7l€Ÿ¾a« ‚áäøì"é?NH`ž‡øÀë<íÏØ_òyºïó× @-má@ó +0;fIàE œÖu4À«7:’gI[Éc$øµÇÀéDÿU혋IWƒ@üaÐælJQ0¶âOäRê÷²%H>¦üÛ +@+=Áÿÿ‰9€¼ìË«V¾À­l¡4ر °01\žË4@7( +HØu¤ÎÉ3E‹‰q :‹2ñ¿® ®(ÀwB ZÒé㺠+­ ü7AP†HÕçúTe.LðO +€ë§Û¢µBð¯±Ì—N«fÂŒ칑¯þ¢6”ÿ—òoB±[ˆ@9hÈçx´ 4'þýHÀF nœ†þÁó‘P@ëaÂ=(*(sç½[ŒN=;öÌØ³ÏÈß?«×¯øá¤ €¾²‚} Üóç?ùá?8:º{tïðÞÑÁ®às~þµë[[ïìmmí¼³×yÿÛûwö¾ºõöüüÞþcGh€nXY\XˆfDâú•b{øÛ·oÛ̓t!ßò"k‰áõY` aM`%€ +€€=ŠNQ>¬9"r¹zŽì2@<àg>‹xx˜E7øü›˜ÑÆyÎa€ €9’"€ +·ìBN´„ÉÇ`ᣠ4ÀÏ)Í›ò^7B=­@·À‚`Înuã>°¯Eã™Ë|0Aˆ„™b -ðq4€<ÀU¹c,ê?Õ¹‡óMýšr ñéÉÊ™¬xÚª¥¬B3pöuúá}ηCÇ~Æ‘'þñÿ¨û8x•ñÆÊ4M¿ÊræE:? uô«Ä¯è‹V3€€C€¢„X!×ÿ fÍâI×\̼a­üÄÜ @?Í.BxxF ø3yfùÃ?·¼1æ ^Üú¢¨àïþ¦µÿÑáÁ9 þyÿåÝ»w;ûwïþðGü¦4½yÉÿ9T@f ÅÖ——&I Ó ~Áým0.(ƒ{̓PëU,zâ þñõõ¤ +nù ¾€à!€çuù _N7!] +yà--Ñey·ø"PMÑÞA³‹¯¢K'úT—Æ„¥$€¡±ež£@@r’%P>²ô÷S”ÐδÀ—>…è½ìó:»ù6à56bÉ… ºÐ=¢$ÀÈGØœ'³Å‚P¹âéjUï—élâú9k>ÙÌø2 áȧR§O+¸Ȇ¼æ‰~xN7Ie]0D‘lëý%ëk÷â‹~&Ô7ý‰ÿ±Þ,âëëé§‘1ÕŠðýØy¡´(€çIéWV?ÍöµeQ" mâôßyº ÷¼“¼Mê“{yöYÁü}ñÃ…Oÿ˜8 o‡ÿ;{û‚ÿ÷DGû[ózmñ­88èìÜÕªýþÑ¿þÑïÿèýßÜûªTÀoüÏà‡ «êµ¾ÆŸ:MNN.è‡Dw!îmn.’7ÿ·yŽ/Þ•§s Ü·ã“$ôE"Ç ñ@"NsöýLû©~™›uVP[x:0PÇÉSßA5¾åö.$ä­\p4 Ò€0ô´€ŽK¼õK¨|d Œ +hå´Ò +`ƒ$àŸÛ +pܽ¶'b€ï¸@|w–0æø¹òí!]øÇª( ˜ ?“X–9 +0Ü{Mô ¥‹¬Wâ”s¦!6§…y˜‹¸D\ ÜS•k!7à +€÷ƒ%Ðk:á¾jú˜ÿ¨'þÀ“2¸ËÑ +ËMbˆ$`þp ]ø³ð*€Qì^ü§D„ülÈFqÿà {ÓHOжLÏzpï7óLB,|j!|¿§h<5páÍ»‘û»/çßéìloíìítîÞ=úáû¢€ŽôÀÎàþ?úõ:wöïl}aþ7~'ð/ëV+ Ë˳“ ‹8V~{‡òñxýÛ,†î°9Mœ>ò’N÷!¸=@vÛ âùë(Ô:”œ÷ìg>À+þ‰@'çÎL\½¼L÷¾¶]Ò† ìÅ%„ˆšÒ+&iØ´™~ø~ÆÉ`Rùu#Z1›!MÀgŸq)p©Àñ¬Ð•E#.×ÊF´:Û]@Ôæ|‹óïèqlü¦CÂD™ñO¡KDnŠ˜fQ<Üè–þzãÌ㕤 3fcdÓÜ蔼;AÀ¹AmF‡€¶)~¿zävâðûñÖ˜™ÑgÉ<#øô§û6ÀøÞ÷ÿäþïø¿£;ïóÖGG߇ì} üë ð··w÷^üU÷úµ±êDš"΅΄¼9½•|ä0ÊQbÑì'ðk ]/j"h7@ صf×èdjÙaE Ðk_´Áé«ô äFVÁ1îD€- áTð%‚°O Ž®BBų•¸}KÃc-áò €ÖÐTÿüу¸ð1O"èQì•8£éêÔvyàÝ×tbÞ—·h!®ó( ØW†*n0€€!  ]€‹°çž3àzÍÁ›N‰N §É]x8ita÷ßt=¨¬(|\?[€z‚zZMg"X‚ó'CàSz-úÿôÿ!¹˜+&´»NãçhˆÿÅ_é”9€ 2P ¼w奈ô* + "ÔcÞ?͆†|(€˜×à (€ZhþWwî} ùÿžÜ¿ÿ%ºsxÿ¤ß•ú§hkçð\¿F|p(88øáÞüÖ?ûÿ-“€œ€†­-ÎNLLÎÉÃÎôd¥æÉñ Qžb¼…¹á_'ÉÀ*¤È*àô9ÓKPŒç¶ ˆKCà׿N3öõéGóë­K$ªjÝÂ䨸Š4Ê*™F.ô ª í´-7˜øÏS`üdKÀ|$+èï¯2`\ ØÇ´|éSù¿=ý¼÷ü¤S—®Ÿ.𸪈Á—»WZ 0 +Ü— €£b{É4r„Œy€ü]füëÜq"ªœ.r8t]eºlT÷ë¢ ®3§ûLëtÒlŒ€/Ìó*Ϩ¤\9p~ß×Jú¼¹¿ºM3Zä+5 øÇLŒü›1ëq; β^òþ¤{@eFï(î?nþõF£ÓU¿s*iæþ¼l.#39‹„yQ‹3¯K„N¨ÎRI{ƒ˜UåØ/I#7õ¼íÿ¿ñC@»| +|p´¿÷O¿ú/a€.¸µ±Ä ÁNàªùÛLÎT¾&@×o¬--sÊÖ7n¯ßæt ¨¡UÐ á}U§ +–çé¦wŸMŸf-û,JÅ9Ôש䪱χü9Õ9ðVÁº‚ʹYÕÑ.4èÃE'&(È"‰">š¿$°†.1=Ö5Á P  +üÛ +€âP·³ØÏ‘–›ð®õ:ƒq ‡“Ú¼r¯‰ Íâ&ƒ½XÀ¿›„(¨‚x–‚­ÛttVÅÇ8N §\ЀŸ“ö)Q .¸,41?$ÔEüÜ6@QèÒâ\ë²ñHWçÜŸ×zÓ¨¯TÅÿ|Sÿ&|†i)¿<–_ªm Ï0b€`€’ˆ®<˜\Yà_ +÷Ï=¿lÄ£D,úY +€½]&4äÞ4SCoïÉ›t€z§³×þ¾up œw´¬âÎîÎöÎîî.â sðÁ*?¸Ûé(8ÝÝ{ûŸþ/¿oÃÖ–f/MÌÉ›òûãÊayþ’ ŒÊ£íT—¶@­z95x)•´¥ÊØ…°*À®8™Ðž€)Ð&ÿGPŸ’@ä3ÐþÏåÂ¥ÀuCt¿Ä& _Î;²Sm#í@ÓÁÒ‚;Œ­é¸yÚi,qó,0Z( Ý +Oj>P  ÐμxõÅËŸ‘€½ú÷¥¿üòg^~ùòg®~†GS¼x5?뱬¹ôy™V3]žìa ܧy&ÊzóÎ(`qÖú™»èè<|Π&«+ÀW€–9“`[§n €s«Yß^¦RUο.'2¿A#Œ¸vt­èœãEú™ü[ã[jÔ•ÕtVê¶,áfoá©@"€óEœ ¬KÌž§  ¡ââ¾²ÜkÆsÓxw•ÿÞÜ:8þª:Û„ÿ;ïÿàèð`w›äŸJ¶lZ#8„;´þ>pðþþ?ý§¿ó³n°¹*™=6)ÐÏï?%Áé Jܪèž~:ëK‹«ëôÿÓ/-j›%ßèt! t:E&yΙ&:{œcã[ +°œ@"¹x¼aŒö«M¸Vèœ$NÒ¬F_þ~½äìp9t$\X˜S 00¶¢c?e ðÑ£€‚þrV9wã¿Õ +pùÅÏý¼<ú¯¾Äð2á,Ë/y­GvÍ*pÇ5-úÞ×êÅ]ìáÖ@Ìé툠ī¼ Eà+ŸÝÚb¡¼*¶Ìh+™¼-6ºR¢9Î5dGC¢uL'Ѽ ¯ÓÇe¢švÿ¢t]8…,9=°±é M—‚õ ¬'ÇÍô³}×Ðÿa|Yrý=´ìßĦ¹>–ð «€¡,o^+€lzJº`jŠŽ‚&€Áaß*¬ZÞÈ©Ãxœ`ÏÛHg÷ÖLÐt*" `èŸ~ù@RøïËùo!ÿPû‡Šýoޘߺñåù7oh†nA73p8:¢×€jïõùéÏÅ6P ôÁÝ ÷¯½-–ÜwýøËË´ñ¡ÇpÄ·Dkª(\n’xÓÇ/¨[øÌ +Ê:m\N 9Û/µ†ów.‡H@Kn:ö\2xÎ5T179>·v‹¬G QL1P 'Ú xøØ\(€—:šÓ½ÈOlf€~ + Ÿ ˜­í§;¸ü"è²·^0ÁË@^ö2´ ô³Jh) ÀK U‹~«Ôpm\ååÒnlÌ™ +ÌyõǦú2r[˜Ø€“xŒé—Š OÁV™Õ„ÀÅÕ{ JÀ…^4£ägõ3[ ;ÆðÕHsÓ£QÌçob+Ó– ›µ‰ÿ(éyrÅL3ÂþÈ B)ëQ Š2 ØúaB‚{¿W(€Oì0±ðÛ<30ðè;¡°§à^ø×lDŠæÅoÎß¼ùfh€ù×Ä[Z£Háàè[ïßÿÑý»ß:8:Úßû?ùÛàÀì‚,ÈñƒÿÛ úëôò¦]PçQ§G\.o¿Éÿö +q:s4¨Œ³hîç<Å '¯E¹s°#ûCú‡x§"ÐU€SÐI¶`àZZ_d[E\4:®j9ã }¯Ñ†¨,,ÎÍ™ˆ•Ni ä'4°_Áÿ¸Àƒ¾O®1¨×¬Æ~ÖÖgLòóW)Ó¼.à«/ÉÙG•©:Q\ÛÀÔº”ñìh[Þž‰åæR Cs õÕÏÊ,ûÊåR&,q_Ò¡ûÿÛÆ©ý†»Ï%Ýxu†a.(Φ*¢½F'TŽÂ¨ç2KÄÃõ\Z³&™‘ŸÕÇt||¥øV|WþØÜ •‰œ)(•ªSS"CB?­àß + Ý +p XüGh€´:6Í.öyãî„ðEȘ«XàÑ£?Þí&.ÿNà/ïÞÙÙ?:¸9/äoï)9l) Î"€£ƒ;ÿþ0¸k3(Ðo |¤ TH(`Ìël®/.C :7âgŸKAMuˆhæ÷yõ‰Õ©ª®Ðéž[‚°Sý&Èþ!ÝuÎx‹8÷qÁ y+KsÆ–a“q‹q.÷ï%-ÓKÀ]´+9º@3ÀàØê­‡b¤ÍS[Bù M8ï¯D UO@)!Þ €©–Ñ._ƒË*ö3¬e¿„ÜÀcë|íº¹.Ú»T Lãň›ù¹´…Õ£¸Ô£p„ßçŠWÐÐê°Þ½?>+glÚ<Ú|¾|[¯,µà +átm$½¦ºj´J3AœqNöú*—%ª©)ô¼ sœÛpy iöÑ•ä¬OÏK +_ƒ­Þ]ø×OÆwòo$+_¾˜–càÉ‚² €ü;(02* à”¿Ûøµ^›!F¹!€&ÄÆb‰”ŸÞfÍ1bA.ÿÝiD´=ú+aý`àÆÉÿ£ý»ûûRùÎÑýwDröûû{»{{¤÷÷w$æo¼6/P ppô#¢€£÷ÿðïiXžœŸ]‚IðÑÛW À ñÃÚ₼Pÿ¦|¼‰·amÇÖ†%>]ÖHçk1û¹<|––„üEÍ,ò¥ŠÝMdtêu9aèYÑn–&‡.-oèjçh‡KËø UÓÕŸJèpº"&çfLJžR€hÓNi å'²‚þþ9€|& w¢~ö³P`×nŸW$,ðìdl<ÇžhàE¾!»h+æuqsEÇóºÖ™E {â \×b”dÕØ'Œ¼%.°eŸÀçëý âªu!ˆ£uª€´ï+KS3¼‹ì0ÜL¤b\ +çßᓆ¦ ŸýI!ï90L7Òó¢<¿ž—™žüÿT|?aX~}¾­Šc3 •>’!ÀCK\¹6M`°Ó +Ü(%€ +.ŒŽ^D +To•\4âÿ}O¼>qðœ6WdþüîNúäݾõ}aÚ1ÁöÞÝ£;»Gw…ó£Î]aÿ[rôìlݸ~cëNg»>àÞ¡{Gÿ¦KÜZ[ž›Ÿ\ZÖ/ïeÚƒq‘ñ‚@ç/A0]^ +&ÐË™çÓIàž>çãi~žçÙ_òÓŒþb<8žëççûq~ÃW ÷8ÏŠ&‡†–¹j 8`yaiÝ­ +:(28ƒvÏÃ&ÆÜ (K^;•%˜ŸÈÌý@æzèEÜ[ȃt«“AC€~jê m ¼ƒMÿ›&¼C\ºqù¾ðÒs¸§0 gkkB…ýæ¤.VÐ œùï6JÝ—Ã=9u"‘œ;xL£ì˜ƒÀ¾N2Åvø&¨ÃMƒn?¦1I…:ïºV¬ 4¨¢Ó>ý^ºöVW*Dƒð®ü¿¤ÕÂ'ªðã6+ã¿kŒcbGè +I@ÆV×ð\€U@ +5îDäž¼‘šþõÀËÓáÑÁ1ιAWÒ.Gýdg_ŠŸ6@'²BÿöAçîGôõ9¼Iç Wïä€lgkþµ/lí½C$ðÁÑû" UÈ,X¾no.NNŒÍ-‘­][ÆÉ¤=üo=ظí[‚ÖÖ#ì_×DÿVÜhÿ¯“µ¶ŽÊ·shãz/ó(_Íñì¦ü‹Ðœ$ H Ù7 ý ]S( +¢å_X_\–`¤õQWµt9 4$"çDç `x€ú©-Áüö+ø÷ËðD x*°{¦Û—1¤ø‹WAþgB ¼œÀ9€P<ÉÚCæØäãÿ¹zÿ¼®¾ðÒVW FžŸ ù,ùááŠÿï2ïÏÓòÊ›Ó5ÜÛ¯(– {'(#Œt›fÍÛIç„´ k‡Î¯4€O²æL +æ +4ÃÅE“‚ÆgÚçþW8N}A~ÿ÷sü¥UV×ÊìùË+[pæQÐVÓ‘œÒ^Á9PÏ®À~&˜{áì÷°A¼PÆ| ?±ÏkTÛkÓÁsÚ$$ÀOÀ;þÿÞÁ®›ÿvXÔìöÁ]šø…ú†ÅB8üÝ]¯ÍomK@~ Ò TØ×æÒÂø¤@¿<˜æV_7l¬¯ÈûÞ†¨¯ [§JÌÀ³ÁH +è­Óyz·ñÍC¾ø[ÁYc<Ÿö3Ç_ Îò‡‚ŠÙy¯Y(€ð#d ÚPè—Ì]¢k2iG«‹Kk+î­ ãà¨è3g'­nm>¸ýðÁY^ ç'0Ἷhä6?ÌVƒ—{ôŸ xó–"ñØ/þ"Ý ¼¤ “np ([9åñ® +£äû@+™»˜zY¬H ×àrÚ(~î¹aR9ÇÚk#œƒÌåÅ9¼Î)KºJàFqºãTéH<у¦ÒÚ^³èQíS­ªÄ°—Y?  +fó×ëÎÿ³¨o£± ÑeùMÕ_S¼˜€î†ÿ¡ @Aˆ€s‚ÿt€$; Þ®1à íVE@%£#ÓÓÚÁ4ÿ,¬I™NM;7* `K(àÑ·wñ÷¸t÷¿Oêkk»ó>þEôG$àr£lp¤õ‡‡‡û{dè°{pïènÀƒÖk}YÐ\p½oÇÝ>` }uaI'+WŠ tN,þ¿%'øûÁ~ù‹ÿå}&øo/M´ÈÿMð_üå×8·!}៌WÁÚ* +€¿ ò ,¯¯¯,¯s<‘‰ä² (tG€‰±¡±ŽÎaÀ,á|f+è?!Põ0È ôCþ“ö·Ó—i¢Á”ÐPn´ð7Uh>`ÎW±Ek\Ò~‰P­Ë¸¯éÒ'–Ï¥ncWiÞ/Kõ>GŽ» ¨˜´ûyè´àÌ…mp¬ëJƒ% w©Jõð‚*ÃúöúRœ|-ÊɈ2˜Õ›ËK;Ä æùa}͇©wßü|á¿®›Õíèãe  ÐÏ"CÈfÀaþ"\,€XºãfŒ„uƒ |‚ Éɘ27Êÿš¨%›úKbzwäá[ûtò-\À#Aÿ>8”Ë?8°Î?’d0aîo“ |“n +ŽŽ~ÿp¿»'àú’0¹@¯{Â~…·D‚=ÿ·…a36}í¤é`r‚–tœr)qî˱ìGä#¿e<¶S@nzUàÿü¯Dz-,.骡렯gýW–f‡¸¹G§Ýþ^g_*„tªÐŒà+ÍÂÅ1168¶ò@Çô€°ä,–€>³™ú)€î~FÀ˜‘‘’ |³Ų̈„—oÖcÄ Rü›ý^ÃCþGt•ãÝò·/“xéÂgÚßjú^Œ(F„wüKBœ,ø qp¯  ÃÀ˜`7=ø”‹8‹8{q+y[TŸÖ¡JuêÙÅ:妙cMéð?¸«aÖÿ¢ÿõ;Ä·‹ïÉÇbeÀ>,á +â³6sM/€PjŒ åþóOoq°—€¾^ª!QémË ¿ï1S)©AmeðGGƒ&¼ýÝŽäçy}¼¸–:ÛÍ}ðG÷?¸ÿÁx4èÁÚßïÜ=ú¾tDÃáÁQGÀßš¿БX›ôtZž¬JnëG&é'á¼½ÒgFàcªenÒ¹Y 9 ªHà/ü‡GÍù|ë¼é4úˆ4®ƒ®av­„Ä¢t];œ|mÅí'‡.¬Ü’ÐEbÈ//hÿËKAzt:ïÈ=CCcÈQ×Y-}Fûü»såŸ|øág>óÐ/½˜È™ˆ‚Z­!œhô°RÀ¬Tàë7æSd3w ý•~Z}™ÛÚW¾,ö›ÈUu|¢Ž£î…U :i›E8ç<ÂéœÎ`N¢Q®Ó¿¢õÚÞ`7úBPC‹°‡N¶¯ “ÌôÖßÿû›åb«êÔ•Y3ÒVn°±ìný±(»víÊ̵kB³nÞ + ^²¸‡à[°@0—‡<>ü‡`:ªÿE\ùá‘Ô|ggg{kö}Äÿîîð—ÖÇõ+â?üÁî¶›ÿç·Þá± wyTè·ŽŽé(¸~C °ÿ¾"Ô•¼µ¾(—LŠü@ŽcCÁã½ÖWt*7 ãO'aÓO ]¿MÜ€7^^œ[Z''• –Ж¾3…àz±‹xqj}¥è¼›#è† ghßnÿÜ'†.Hó£\[Z\ZÝXY¥÷qäÙ‹®»Õ]\‚ÆWh–/_ëF~æ½ ‹DÝb5\œë£RT´›?á…”“ë8s ?‡tœsŠW@¹!m’€%àî$åBðÅ jà9] ¹3T£7Ñé†hZÖ$!¦b€ÖK£Ì˜_4ÂúëÕÀ/!?8ÖV&Ð.F#àL(€,Œÿì +È´%fr¨G~;ñgôGôïñtE±áåïÈöÑ¿o§³»#ÛúòÖ>ùþCßò×Ùy?Í_;æoní¹¯ðÞÞÁ·Ì¿öÚ­=Xáð¨›6–f熃>¡A1>Èwo À­M)€U±8þÜ9@qôš|­‘ȹ^æÎýñ9…n=Ð^„ev•úÁ#†·•bMT¾ª @'=ðÉÊ»ù„€«†êœüåžY¸lâQ5_%$¨ëƒŠ¡htæW‚úLf诒@ qíñqé/D‘-ZBD+&›9›µ±/a_Ä”E©À3nIu~G¼|–˜QíØª×¼¢˜öY&žqw»ãß‚Ÿh¿N´GôOï0'  ¶Mzs†UªŠpüŽ%>ç™ @°¨¨€«%ˆB”€ÏÐGõX…~½–õã°e §îïùÿšïý X[Œd_]ÆŽåÃÛo‹² @vmæŠûH”€V€xQÁ!€qÜ„¾GÌúúÁÿÌ4‰ùcGÞüã{tóÆÛ[¿ïúÛ¾G»ÿÁÁööAç&Ø¿1¯õŠn +ÿ7æ}W€‚}‚"i€;Òß:<ì¾`sE  `I¯ `Â-:€X@Þ\¥k‹ 9u…gNî2Ýq„C1ýðs³ã³4Ã=¤>ÁÂ;­x3©õéwÿÀE]7º$ðš÷W°^ž¢uB \XY¦±Àwª{ÑÄ%¡Ïv¿ƒñ ãë¢Å.n?<ëë ZAyÿîÀÝ>!bjÑ/ÇNQâZ#½1¦ ÀKë_xáÅ—«€7¿†y^à ТÀÀÝÎ?tPY\älÒºüVÖDXÒ;ýí±F~F×åápÖ™ùºl6âï´’Kˆ~'žgFjD€@eH@ZÑ3l 7zïDë«ÿãKð{è© úÕÄœü ‡¯ »²(i†Wf@õÍÎȬîùž‹šÑý/Zÿ§¦fâ͂Ȇ§ ˜9¦ÞÿÑÁÁû0Àžð½½ï[°Î½Ã{÷vT¶}ãÆü;ûòø;û{Ûï¼³·½uƒ>À7·Ä{ûï¿/ù°·å>h€Ô0…“ ί §8q9EÀïƒ+㟈Éì1!‘ ð©0\AøÂº°h}oâ×ÉÖ©3÷G!i¤ežäËÓ¼'õZâQ_›R\"â½vºøO‰œ Ò˜‡ƒ8pÝpQi­ +|Ÿ€;LÒk‰¡ná<íëö“1À± +à¿þ—Ÿ —273^>Üm€¦r€&‚\ÝÈ(‹¡¦™B×[·0ÃØ2Ó:@ @÷Û +À°ºÀÛS­5Kù蜪Œïu6KXŸÚ +úûç.§ÛØÑõô§ï÷H¨JÈ·_õ€XˆRÄ–XKøU)ÍñW‰ÿ=D€ÈP mÝËÚCÞ;û}11v¬AŠìèÈ`†ø¡ý.4¼/®; E+â}RR@LíX\A+¹Àð<ÎB/b€“LQym?äþ~ñ²d«~`1ÐN §Ï&ÇßKZ#0C_ ½¦ÿRRñÛ!À5þ$Œ(^á?C(ºŠ|ƒO¯ü«=° ’©©Ä¿àÊ•kÿúG÷Þ§ßOGÂ~ûèþÑÝí­›Âÿöþ!E7o^ÿÕû~ °\û¾hBø?tDP€8`oŸäÛßmö(€ÕEâkýæy;à@ø¯øçÿ­¯òâ«K‹ÀÑT¿(ÂXZ\¤ÙG@\Ó*Åàc“kÚh}miÖŸ“ï§CðÜ;&M Ž ƒ ëÆÇíÿ‡Î==F룟7¦+x—ÂêÊÂÜØÀЂöK†û‡è=$G¿H  Š¤$u¥!7Å‹‹<ˆÏ¿%Aq¬ÑYìWðo+€Ë/$¤õÒÀB ß‰?¡9X +Ÿ7ó/¿Xçj  ºrìÔ—¯‹âZn*îzcW½ÍÞÏÀ´õ’;͉÷æ¿:ù™¥zxrðl|#â"ÁçØ^eòêÿÔ¤k ”Éýà3¬uÞNÚ1,c‡p’ùð›Æù +þM¦ñõV~ƒ õqö»á>pÞpuì%28 ¬@ŸžÑÑ™™+33öÿü3ø?Gïácð/¹¨·À`‚éŠG§¯¼öïDæ^æÜæ³güo ðïÌo}¹Döîö· z^^ÿÎ]SÀÍwÜ ¹pãµ-¯ïi¤ ?­òø¸À@6, mxkK"¯*ÿ"O¼¼ª- êõu´<ðØ$î[4½Úç¸ÝoQèe@Åô 48ç„M?ðAêÚ×ëʼn±±‰%¦gE.^³dwr ¦ $YYö-¢< B·aýD–Ð>¥Ùÿ÷SF=ª¿LïP¹=™ù€ù¨E  ÷×Tº©ìè²ÕB£€x .åd€ÌL±d !r€Á€ßp +k€ƒÝ0²8I(úÞŠm(v ‘?ÜÅtÃc¶5ì;pUF,G íG®>ÐÆH2Ç›óã£m|KýZ Zß_ƒ!‡©´ù«„øçiþ$ð÷sƒü„`` k/ Ó(0ÊAWJà4ÞÀ÷©JÆ­Wu3 DD‰þÁô–»8=ýÕÿ ïΟìÌߨæIßÛ¸òÎöMyõë7;]*ÛÝÝ¥@çŽHƒ'íöûÛ7®÷'€õe¡ueE¸0è†À4l¬Û§“!ä Î&=tòªs…Ç^^\œŸÕ™& ö_\¹b ÞP³y«<Àí’t÷åbÑ™u³*@ÉÊÊÂØØ"jp¨BîÓGÁö'ñÉ\t0IÀ9… ÜNù¤–Ð>•ô÷(P•_B~§þXŒÔ€F®R(( + ¯oÚ3àš`Ò +€+¹\ͽ9Í|æ…—táÒüϵOD ™ÇYÁB왊à-À÷{§s¶ÿ×ÈÍc‡¿ËbM,ôyk­Ý¿ª@œR]>ãÚ…æEª;ócdumÄgoô®Í_#I°.ð/fë¡ÄÄ¿_Ë_â°íè~4À5é~Ò`F³Ó´ +¤p-ZFéû[$@K +ˆÀ;¾Ÿ Ljpnxzú·ÿ=÷–ÜßzíÆž`ýþÎöŽbîô ñ·E»»ƒoÝ¥ÛßÁ½C€„þ=…wöÞ¹‰DØÝÿ–p¿3ÿÚ–"„oÝëî ¸±,Á¾´âž¾aTLG?qY}rô>«:›·nq*èÒÁùåoŸyþ¿ƒç÷ë n +ÌÂ8°×ÉÐx•“&îÖ2IZâÍí“!&ßi\|"O‡Øx ˜ +Qøú¨<ë$•¸†¨fª,I.ˆsfy‚ ¤Ë™ïhZ‚ûTÖ_RaÚí~šÇ8îÄ9Žž +>w±–J¼JP +À!€ü¹ ग़9ÿÙ¨WŒ¡ƒ®€×]õs‚|ùkìùSYÆÞßü}ÆMÓ:å†/ðׂΠ.@7`וðë`^§^„ÎàÓKumO¸ò0T†>ÃÇ“,; eíÃ7GEÅ+¾`ã×`Ö‹ üãñGŠå/¾ˆè þe€V€¥ pæÚô赯%þ3 (¬ÛrÖZ0„5Àó×~ú‡?¸wÿÀü¯Ýؼ÷wv¶¿LÀááÜÿõùím;ø·ìI+Ü;0Ü;8:ºÓ!¸…^Øßïl]÷ƒDïuß¼¾$uÎó· ÀÛÜQ‹ +pŸZ±Áæúªoé'ŽŸ\ZßÖ}ŸÂó:]YT > ‰ßrm㟨Pø¼ˆCÏX ]¸ ÒàlCL.Ú +ð3Ä…t•Pòh~µ³¾ÎÐ+ì÷æhÒç% Ì{I“â癩ëä’þÕ—óv`ZÈ ¼ ‘ð†Ø‰ + r‘<еo +€NÿbÚGŒ_á±eĹ€/)ÉDÐ_¥AÓ…(€¢Ó¯å#§.æµ/ðWH&0§æ ìK>G{pµ=Æ|Ô6ö+ß<¯üfÅb¥Ç¾w¯¼š + ÂŒ´ ·ü/ÿ @' Aj†[ª@µÜ€èÇÿô·Ü¾€?'5 O¿ö7ß¾wïþý£}¹ïù}žÿµCp÷Þáýý­ë¯Ñ×€¿#Øîìð$°½­H}¢‚£»û{^ü÷;ó¯)\èì‹Ú¶±, Áí6wàûÑ-1 t¼[%Éæ þÜêÊ÷ð’Ë:—!ñiÒ£ß@h÷Ûà–½8qpø™Ð*Š˜³¸0),ßZßXv*@lõ¡«#Ú'h,¸¤ý.M279>1·h¡«ƒÿ˜Á˜Z¤*ùü5µ¼Æ“¾4ÐBËp1rõÒº@ÿæÚB.ô*<º\¿l» 0ÀÏÔ”`ÿßÿY·©´@ÚOh×’½W;àë8_}s(²~0HÀÿqp¾{œ9E€LÞ™G¹¤ÜÙ#¯mãÅÑûÐ6ð7 ¡ñQ÷r^ç”u‚Ï2  +:Û\L§°ü2 t‚Ÿ’ût~ +ÿù“T¿ 0'Ðç•y@*?ìÚeüóGvzmfúÊôÌ+ÿh(€èÌÓÖþi] ²L½ù7ïÿOGÞS8D‡à}áÿ`[¢`þ&N]koÜØzgk+ ~ýWÿ.½þÜsÿ¡›7vxFàŽ˜ÀÏèÓX +€÷[yÀCFÜ«V1Ïÿ ‡x—#ç!^Žñ‘™Ê鸃˜…àÄñÈ!td!<£•U9 ±…öå‡x]¸4$ (¹€g €~pÈÇ-E#‚„Ç"í”<9D”CÇ!›.íœðC„b0áÏÜþ“™ØCÇßÀ3 è6Å*ݼe + ñì±@¸¦ÀXóõ…ôú °¦½ðålDDz@!À‹/ˆPRÄ®  ~.ãrE7€¢hæ3b€öÎK—÷ )ã~ä ðúײØ78€4_åÿwõ‹@µ ø#¢Ðô¹ú¹kÜÔ­¼?à ´_µh[EÃSÿì/¾ý}?çKzﮤþîö6ŠþPÀöëtõëtîvÈöomoݸ9ÿæüuÀßýÕÛ +)uö¶¸7hw["âæMÝ@7{!üùZÇÿkªàÖÃxê—¡F æ( ¢·?W±€sDçÀmz ++p‹:Î<ü¯AÈÄ%( +ZÇWoéjØäÊ! Hh@ÅÂ’^¢›E³»MÁ:¾rL*b¤ö§`EÑ‹äË“›çî>*>r“œ—x…$ºM¿Ðæ>óö-€)\#Þw#@yQ‡ôU¼BårùÀ¿nà‚d ÚÄëÊm÷àRÎ,€¬q/@C<hoÚ X¨.ú¶–³)h7øåø51)œÎM:'ð”ñHWàʧmò‡N¡ý˜öú‰™Ñ»€ß7jÙ %öúz«¦Î:W¯ +º„<Öò[ènð"¿“+/PÖõcè×qÊΞ߀ßîÌàþyG €e@vß§À´¢÷è¯rÁn9ÜkÜW¯ãl4Z‡§ë/îÝ¿wtpó ;4ð£v„lI|y}^¡ÿáÑ×:ïlw¾Æ“Âwß‘ à† ë¿¶M2ðàà¨3Ï-DÜMl½ èòfäæ—…h]ðru[ Ü"`Á«ÓÀH€àLÝqžâÄÊ óßã³¾Ahsm•†;€õTƒ“««íœ'"d'¤ºD°¹.Ñ€šú. b2‡ }@_ùÙ2úÐmÐûø ŸÜpLúpó!@ñQý@Ùãj8 >[`_E͆€¿ó‚ŒÜ ( ÿ—¤7Ô9/v\F‰¯gÞµˆ‰‹"àÏ{IWû1A />ߨIà?D@"ë$Ó9â¡ àîëÃØæZ`0 ¸; + ,<‰Ù›¸ "Ff|½Âã-¾¿Šœ ÿe\›W–‘v¿è÷+àfÒà<9Àȸ ð?H3 ^<ÀdúsBÿ•é+3Ó¾‹(r´\¬‚€î×ñ +àqT3õ;ó¾àÞáAçæ¶èÇÛÙèiÖïìHÌC÷¿¯øŸ¿ þÁÑá=­»wïkD;»ûq€À¼p/渱µµ·ßét÷\—Â^”¸æŸÿQüè~½Ðà9ç ÉA‚tDÉnÆÕIL˜[cpît +ÈશΦûî[ÚsQ˜Ä"8 péÒ… ì„6>žÄíÆt=„-¨Ë失NF#@ RC\A:hÅ<pnòÒ䪾 ÍOh4K‡@¡ê€ã㬺r}Í@7ÎY`K.@KB4ù{S¡7PV]ªk­y£™ àšçí¨ö¢I@Ws(€: …T% ÔøKSxKþôùöûzá(ÀÓÖ‰ÆÍ©ñ¿FÀÒÝ¿"h÷¬E^\*\Ìå*‚ +~°†×™3¼˜ô¡Ò˜"ò1Æ7óïú?¾´‘Ïof¬WïÆHôk:HC;( ›­iªP师ž€}à8S¬Áß‚ŒOýÁ¿—ÿ—èìݼ~“H¾³½õeyýýƒŽ"€ë7·:_;8TŒðý{²üàþ>¸Ï‚îì]§ùowß[ÜäF`MߤOÀÎNO`Iö’ŸF÷Láð†ïé·ÀýñüOGÈ20B—N ¦âuùóIš6oñìhÝž”{ùïè@E0¼êsß,ÿè;$¯}k–])îgp çËõ¢šªhŸàÛ‚¥ "ˆ®Œœ?t‚&„D&:VÔ¾¸3 Cáptè\µ$Ì7n|k„£Gé3O #¨ÀìÀ‹š±‚uà]èþ™pAº6Õ¹zc[Y½¯jVè]+¡^.* +€ÃÒ%XÐæ¾U`DÐÿþJäB™žO”Ÿ`<ÚÕ)€zsYè\CÔ¸o9q¤ @¾ p>ùi¡ô YÖi„wÁõ»õÏKÚTNÿûàió§0ÿ2 Z_¿+ÿKøômrþ$íñþ€Wäü„~rÜ'YÁ0mpNAtë½!€|*0¨îóúÏ?Äw™ï¿ +ŒþôßñØ/ùûmží»#ïÑóÿ¿"ÅôÜ Àß¿ÿƒüàþèüàýb„μŸ¢ ö¹w`× +àæÍ­ýNÏCA—æ&çIáÂÛÓ™„U {=‰r8AK:g›:Qb\wÄ™õytBãù>Q}]Ûl;uÐ/7Á³Ã¥Ù/ ´ô8æ/Ÿ  í.Ô‚{ލ:‘μg½=îŸË^q=HÿKLŽM,ë¸tÔOf4\áûe‡@M§Q~üC@ÿNß_gà\fr`ZV''Àšo(Í[à°¼ˆ×B#À¾ªƒ zï`M¥tA + Àm,¬‹ï„9€ç“šFNCÓàŸ/ä^8oIèZTÀ9e%~†÷9ÝŒt˜×©/hJ 2+ ÆDáâgù1¾/ƒ_|û¦ú“ äåyv7Ù¾‹òÿ~W­BrBã ñú€bà 8_è0Æ1Zÿçÿ¹?XÀ7R?ýWÛßöóÜî¯xÿ`[ÐéììÜ”“§wÿ½£îËû ÿ÷E»÷¾ðÎMC9@ÿo€ŒÇ‰ô†s³<˜]øõ#‰šPš¸þ‘›üWBAžò6hÕéZYY ©?»æ$ èÔÉ ¿) @×AØ@—€Èݧ'žâ71vilbÕ¬â úüTY׊QŽ›×E àFpÍùÑ‹_H+¸Óyò(Î+”`¨¸OÔYés¯ÕQ•jœ~í›T4sãëÛÿÂã÷ȱ̥¹*,Ä=Ìã~Ë$óôòŸþHÜ“á31Hˆ>W)  +I‘ÈnÛþÞ o;8<ýÓ?Pl/Àm¿@§#ø'îÜßÙ|ù¦%€LÞÿà€ƒƒ¯Ñ,xs~þË +DÂÿ îÞ¼¹Åÿˆw?d~|‹ +Û…gÁ'J[¹EVÿhssË@À[¦3Lß?þ]l}“ÞC¹iÞ ¾s¿™ß'¨'½OG€ äDŽ"â®. 3>c­£‘¾%q)h}ަô_ˆ˜DV <´ôìÆGÔ +À4’ +@_ƒ?ÆŒgÐ&¼½ 8 + HÞÞS„¾)&(,c¨žpo³Àéë²dE;|Yd WtAo?ª©–<õµ7ÀŸ9‡/Xÿ£RýÇ ¸çÄÜà×ÈùÖñÆYâÜŠ•íåõã­n +öz ,IÆßøÑÉ À³ PÞ„€ß^Šη¡ÿhíN8þmüó³4ÑŸ#CÖF/€aòvN D@;ªÂ‚ôíX⟠¡ÀµèÈ3­Í!XB +À)éýîá?#ú2€>(þTäÜðÔ|[øŽ[€ñnçk4l(âïl¿výúÖ;[ït„xùþ?‚ýHÐIø›DÚòæMi$„ØÞÞÞê~ ÈOöÿîè|ÜNãa~<Üss0`ÞT9qB”Ëq$÷ +b5kg3©ªáµù0kîߕזP©0­+BøW]®·ûèrZæN#]QÎý¤OXì­àöå®…ü/~B h*´ W¥>Ô +àT@P+¨Ò;ÈBõ€Ì«Yˆ"SÅÕf+qq–záÝ©ÛÇ%ͨWTý`ŽPb_ëB=k´:€ßDÖ¼ËØ½MšK\o>EbkΖO ~\? lÂ!u8.Pàʹ"¸.8«b•@éx}mK¯@ƒA4à¢Íáq&°†ñ½ýkøW*–ÄÐÀ~˜¼¾@O“Ÿg ú#L÷ç n2|…"˜šº2=ueJ›ÁÎH$h}ÕÅÌ… ÿôIDATÏ÷r5.øïÇúˆ$€i`ÿð[G_ÛÚú²„<)þÝ­/o3¥Àõy¹õ½Î>ÈÿÝÿ#îºwÀ³åìiÜ‘¸ÁíƒÂÿM:no÷&g'&x,¸8`—Ê×”v7«ëÒæ-Føá µ~¨&:ûòÁ“ã“«T•óÔÕØ©K¨`³szˆV|ûÞÄØ€>ôÖú*w›|„a¼¼.aRMŠ872ù2ã’â‚ Åz ÀÎέøáàù¬¶P€ˆÀ^ÈJ¶„ñ½O6U5¦å |Fîhàj´3ëBÚ +ƒ4Z=UÀJ ´ˆ×BÝ +à}Ë¡zû÷ªjà3tÍÇKfq! ˜‡Woá¯$‚œÑ(?ÑtŽ8Q:+7ÝÄräRuÆT Z'È#˱¨ãß¿¬ VU ð ¼=»AÈ÷«¦Ÿq +Â0Ù{^åQ|ÿ@?Pî5áÕ™OÙŽYá›ýဢü0°«ôθPFÄD¤üšÃ(ðàçÿ5a_á?08<õíow:wîÉÓ§Ÿ¿öÚÝÙºÁ½À$o¾v}~kÀ ó5Eþ÷|×kæ¿ ¸K/hƒáß°'ð3‚vz ¶4;>¾°¨3F/nœk EÈumžðC D†´NÎÒò¢\ð,0§# Žôd TQ§\¸û¬ªi{9m€vw[~žÍÖÂ^Á·I š—ÿÉèLÈÅÂEè’ðÎ.==¦}kœÙ´Y[¸ ®\_¬Nc »â ÞME¨Ì¨gЈ¶î 6—jÖÉ€g³a/)^*( + &}¦ÀÕ«©`§Ç þPóœæà{Äb:ÖÌçÇ$À™±g,„£í¹¸ÂÝÇD3¬ „ëªÐ µ»‡o™]5Øt¦¡z܉€SØ—ÇÆe ûèp!QE 'Zåøs#ÑÀ +@»²> X`æ€éÏ¡äÿ§®¸ÊEð?`í@P¯æ0eü[ü×ÿÒÃ|Û*øöøVŸ#…Âq‡Þî¶â~  üÚuº÷vövve;Üø5±ÿà¦wxm^àçOè ¼µµ»ßä"€e±ò¦â}ÚÐú·7 < ÛÇ‚‰ÀxVÌø6ÜäƒÝuný ÜÚc,ñ8¶aC¼*g^èFÜûþÝñK—L·o‹3xÊ É8 @\A$}‚¹®­EÎ=z_ +—WZ*}úØÀß×}F#ùØ£´+®U]¢gQpØA°^¡´ÈZ\k +à› +@\ÑP½9Fü¨G¾ýø—Œ¬ÔPZ‡®Í)øký_8 ŽN£|§¾~H2@œ@ý†úíŒp“n ™@¿µ~c¯U¹Þœ5\€\@Ù[x¹ãU¢È}9”O4_ts¾àØg¯þ&¼*ö·Úg™tÇ› ž—¦ØcD¨E8˜n÷€$ÀëeøèÑ(@ +à·ÿ`gGAÀþþ½ý·w;Û;_šýØž|ƒg¿ÓQqg‡ÕŠõ·ç¯ÿê<¼Á³UEÛí©xo{ûM1€v×¼µ4‰ Øî†,‰~ÓÀ‘B¤ýíöq…‚6Dø´qûîœ`íÖCÒb29ôµÿ§‹­f]7N¯®«ö± “k|Úº.žï¦qþº.$ú édâZ4«ñ‚»ü,-ÈѰŸ¸(äsÌ&C„·6éVr6ƒzs8£†8­Àãõ­ôÎ@~å*SAH…(޲¼€!˜£(€ÏP«™`@PBA¸ûZtõxîn70ô¹!˜*N¢²ÀˆÇå—Wfb–ñy¤ÖcÌ€3‚`çªÐÛ>^þräý@Õ€•‘ÐB*Ñ€ÉA×e€¿©L~"È…ÓÜ °¸ŒX‹ÿ~äô…À'ŸÃ9wf)fMW · ±àšœw´¿å#HòxNT/ᨗñïïq¯@» h?ž±¼Ñlèkƽ?äÆzº dûyVRgðÜùóƒÜdZp­™·èu¹RŒò@ ^"@ø÷-åí¶>ÀC +àÍ¿¼#q¿·G/ºmÜ?úÚMž +€^>7è|§úyø;…̃àÊOÿàðèp¿ÓÙ(ò?<ìhfÿ ÀM>ÛR2ço|Áý~ïÝ?¼°»Í„ý“mà§ŠŠ"¶;û=Í€›+ò´³ 톤»pnï¯)|àÞo?dL†o`0èCøàÙU·ø”;µF¨€À'ËBç:Í÷¨ûY NPÎ–Ç àùua8]„ÿ_ìÉL +ø€&*™åq¢(&ñã€ææÆ­øº/žöE¿‡Ç(@|t&p O˯æÐ(ˉ»æ•q9Ý©ºxÉ;û^Cé*9Eü}xϳ¤9;‹îû‰©/\C$Æ7¨7 ö6]j9w‚%ÈO2ZIÊ•ÈuûåL2‘ g½só òÁy­§ +É$’ÐE’ ÍíAZ 2ð' á-ý½¡® 1¿|Qói†²GÅ\7· °[XŒ«QÁ‹àðKh1(`tæÚ5禧¯ x™8¤Øtjj1º"ýüCüT‹Bl .ŽN}çïß÷ÿ$÷ç;< \b^Z@úŸTཻû´ +ÐOH`‡hÜ=¸wtÿ®ê]¿ÁÿšèH SDÑ«tæ1Î ±þׯK^€&ìVì,µHßR0€¨§ç<®Ó¾¸0>6«ea…è ·aø«6{3®Lb:„¸$Ò€ ¯ã •¸_@uüs‚¿XÊO&œãz§Á1ðèqtÁ€>ìÁ ÎõìtR@cÀiͨvÃÍ¡¼r¥‡ºÔØr™’°ÃpЪ•Õpôè}Á] 78 3ü±ûĤ£½?Ì9?“Àsm0M<”iÏp2î0E‹’v2É3Îéà 8ß 2ÿD,H tà|à1÷‚úÉ38j‰B¹…Ìo¸ÜÅh¶ëáГrÔbRW.Ý›˜,å +„Êèâ#d¢†ýŸÁñ!"€™?ä_,@Ë# P+€@?98 àOPž+é$‚^Ú­ÿW`PÁÈ?û<ðîÝ»ÿï»w…^ðp°ÃŸvŽx€ÂºøHþëmŒïíí*R óÐè æ|këMjìtöv»Z¬ó˜¥9…Ú+¤Ñ7× rK}ü½0<@È €ð’]¥<ºz4> xS >bqW<*]úÿáà«ÀØäš|¶ÈŸ{Hh—"N9w +örùsñc2-ñw# Kô6ÑA\¸Lùì„[ðþ§$˜®3ÑÚäÄV+Õ;­8SÀˆO3Ìc€ô…Ñç ^5ì…vfDÎ +"xàDaðD/k–˜ÂàkДÁ?øIïàßÿD3ôõrs§gI ÛÌŒqøàžû»µ ßkÐHf +@¨ª¤ƒ•ˆH4u`na"€ÀH7Ö™X›cnàN½Ú4¯µNĦIü>¬Ñ2¦št@°×`€bl†@ºp+ºðÌÝ€ }³¨WP–©Ÿ2L½öޏßÿàýJlmú/åÚ¥¤ÿåÙw!ºúl‰¶÷øÐÝ{?¸ÿ#îFôïíîºÚMÈ&…BbýÚ\_ZZY]˜]\öí—B0 0£ù5†Å ÑøíÌ!€MÊpè"j!÷–­[¨'Ù„„Š€¸«»s ï/ÐXˆÆÓòÿÁî¦Óí›üi÷ó_Œ,Ùù/ð·"³îà Å ù…+Âÿ­ÛÉk5¼ +Ås +p ýt¯æl˜gbÉPVY1Èr&&¬0Ä¡™áÔpÏ(9€µÑÁ0âÿ¼ÜoH”Ÿd:-B¨'Vìvçõód­ý5þõSýÿ¼†-¹Ä:Ã:5bi‹7mš9æµ¼@#|Çý¤Â?Ïù1'èM‘VxÆÍ6ðÏÍÀN÷±¹«E)€RÅ€&I€(ñÛ!€ €·É¢(€8œ„¿ldÔâ¿Âä+ `㑃âŽ÷£{‡‡Gw:ÂîÖîÑýÃ{¼Ÿ°çÿÛ·ØÞf¼³çÛ~îÿ@œá‡í@‡‡?8ܦÁÎÞþÎnŸ$àÂÊŠ$ö’ˆ™®@xl<7P—?tB€ [¢@cBü9ÌáŽÀôŠÀ¤ $ÖØ\[^ÒÉ#\ØP]r– °‰ë§˜t+€Š7ÝuˆBƒ.€P&û9_<ô*¯×hц‹`àŸÇVð<óSÍÇ)‘€®Í:ðop3\?‚Ü2+ +ÙD @7€l0c1É(ß ^I +/õEâ×õ£¾J…® Ψ@¾x‡=ÑÄÖ8ÿ Vy,ˆÎ4"@­_P› T(Ö–ݨcRpÓ¿Æ\(:/KÒÿxNµâ=”Æ hGFÝÀ5&ýJ à +‹¨l k8 `gNõ¨ŸŒ ô³‡TÓPQɬé+³ÿoåªgËþ§ €`ô_üŸppç­íÝ›Û÷xòÿngûæõóót÷Q¼Ï³Â·ìmf¶w:÷?¸´£õ +´$`ÛýNhfÂno./­®(õÓ;`ç:6ÚÜ~(ü Àb¡Æ,à Y®\õ:žÊwªÒæÚ’﮼tƒMç‹ðµ `Œ~àMÂ$Aú­Cù™ñqÄ'èç# Vt*ÝœÆø®¸æœÐ + ð ò‡8€?’…§€nCÜè¼3àû‘É Ô`…XC†jp© +Sò; H €ßʱ ½cÆ“,aÄÏòkAT >Áj$tzü°€gOðë{V Á2E¬È“oÝïm‘x–Ú±v+'°(×Á‡7Ôj¦Í`Yo&€Kæý0T`ÌÓqÏ[èÅÀ½yF»FçÄVª"ü6ÀÌtê ‡@~"& +ø3Ô9€Œ +þ}ŒÎŒNMýÎaøèðˆ¤þ<îÅ߀ó¨¿ëüç¿ÊhäáÜáúüü;{Ò€ƒ= +´O äuZŒ¿åX›\T €GÛºÚ55ž<ì3U}ƒÂ `cQ/yF×þ9qǦ3züe.SØb;í‚(@«pñ¤whΣ€'ù +qÚ…°&ýï`ôUÄÿ~Ç™%ÿ+©Ï¢B½E]ô +‘ñÜð…Iq‰`íÔ!€ïY;^|´ÀGd°ŸoHœƒ¬ò=€ò˜¢ TÃ[e:€*Âyp€!ï©wè®À öá§?Ù¸š€p ‰;šŠõë" ìÿA8tÏj4€®ü €ög­û8¨ëø§þ6Ÿ&à»Ã?8¨'fˆ&Ƴ × ÕêRìTE@}6‚0€®=9úX*ž=¶ö#ÿµMä¸ BïÝ›ùP´!¾ßý‡Sxlp+`€ÿ”Ò .Fã;ûŠüïuönÎßà6€»»; â€mž2¿å'~I(ìûÁ;âÚö¤¤öÿ¨ƒza§ûf 5òÿ<L§E‘¸À X‘ŽúI €{æ›nPa>½waíåÅÙYþšËu Á\P¢ALÀ-ºêóÄO]:Çòé V +€ÏÈûÒ›K@g^zR°çÊbÄý:Áz;Õ€¹8¨°D0tÀ$ÆO²x¸L*€Ç´D?Õk|õÇ™üDž¿X(kx[P@àDËLx{OõvÞàœV: .rÀÈ7 ð® <Þü'-'šO”€OL ÖØØç¤øEšáÔät¥°¨sáÆ>. +K]̃|8_W€øe‰~¡' Æ[šPhPR i‘‚‹]¾i°sd ®€ðÿ±¡T@tÐ/D—¾ïAV€íD Aÿ— q3*úH ¢Ê þ43@ÉüüçÚWÔçØÈ²på§ïÜûÁýã£;4÷íñW Äù„ÿ»ÈSÀö–ŸùG.ôþ‹"HP.tøƒ°NÏíÀ(€þékiIW»Ð€ÐÔ‚ßØ×È0pr_^#©¿J’ž@XðÏ$ÿˆþUIÃÈÒC`MþV'”N>Añ 0] :óœsRÇÿÐ;MÌüyÎóQP\`¡Õ +À@=GÚÎ&<üSd€£×ååQâÿaÜ +À¬@Åb6uáÿ1¦ïq6é.Ðt„ìœ"sÀŠØ@ðgÁ€™çÑòÚ9úø¾û×õ9Éuɸøl[ÀNÔ z!\"@¥ðÅhI¼1ˆ¦Î x.üöB+ø§ŸŸo²´(÷𦟲»‘ö§0€ÿèÑÏÎZR8 àf@ÙÏ~ûîááá½:Hߣôwööö÷÷h7v:ï¼=¿µ-/ÀKþsðáýÃ{»»ÿäæÖ×:áŹú\¸éÜЗK#7Þ$ C/óP<ØW‘æt6Ü´‹‰'(×Ëç—Ä*ìvAŸ×ÃqfPhÒìí…zÀ+ jx9"P‘1¨ƒ0x€jƒXv”/}y2(›mIø&gç$ ÔõTÉ!ËBM¹·N~È=V?üðá€ìOýÙŸýÙÿ4îCá ‡/rÑÔÔ_ÿÍaœL‡g|Jîß|‡ÿëìvÜ1aßÙÝÞÚݽwï`·³7¿õÎ]¹ÿÃ{_Sí_»¹³+½pwgGÞÿÞ·Ž¤ +Å6W–&Çpþ.„8Ïs’ƒä¶ @ë%ƒ·fÀ "dúDœª% nÎK¤ô„úSf6ñ†¼í:ä!b†&¹ƒ?ì­¸qºûqʃúuz 4/p”iB0ID#ÀÀ³æNËÙÑïs/#]Z Àaè«Z´r%8“ÀOf• ž«@—QK€ýfÀ„…ñ¾ +Àœá/°=Žf€X<Æ~üc˜öD[˜›5U“¶‰³cX^çm-<d8§õ„þ*ñD&ì³Ø$²@|€âŒYéŒc^?6ÄŠÙ?${€kÖ© À+Û$P«7¿€¥áó^ýzáþ5Ðþ PI¦ †0ßðayÃºÎ¾Ä ×Æm‰€0Í|ø§yÚ„ìÅ0=G/ëõ³·C€Ã{¾ù×&wOlÏ»PþýkªrïÞÑÝ»”‰ ¶¿ÌÍ@Ûa­‰ü‘àQO@SÚĘ$€ÎX04í5ød«q™!6Þ#UëŽÖx;c¹sÿÉŽSÛ CÂ=Mˆ´ÿYPÀ»š6´âïÁ…Q;DÂ5áÌ_7øŒÇiŸ\˜4„( 1é¿uÀM0ë±Q§>©V„'´„P½³(€'&€¦˜öät!ÇRvöxûpø©’ +ˆP˜Ë¥Pý0_•Å c½,K ÷·I„âœK ”€CZè`O×îd¡Š(äápFP¼s@Ú×ιÀ¯)—Dûñ?4ib!Ç€æá>ºñdèkNpÏ €˜Kc‹” çÙÊ€5þÁ;»é÷0þmøjíFŸ£+oÖ @ÓcJÃððò¯é×ýÖhã¶D@˜œÓŽ»:€‰eþöÛ<á÷àPq<þ íßü2íßhºO¹w÷&¬P€Gƒð'áÀÿ€^B‡‡ß::8:ê Ü“ЭŸY€æ§€ŽS³`Œ~£ÁíˆA)@õ×I‘[‚„ŸHø +6á5o?ؼý¡>ô ÄC—D·ÖWñöôÀª§×¿Ïô+ò4Þ,Hoªþ¬®ÍR>&)¡“ÁÍ@VÇ›˜ ½©‹¬V„s?€YŒ­éSPdˆ{Îø§‚ ¯ Þ†(õ~d•Hk»|/hÄ4'e,{øoØL¬œMŠŒa‚¾bpáºN@:è&\]ExšðÒ5õCTqäO °6·Üãã¢Ä9ÖUÀYo¿ud] !_ ˜¢ñìf‚Èü!ÿÙs5&ìÅ>¬Œ+{û(×Oò“ðÿEdP@¿šª± D@ÀŸ¥…/òbøâ¿ô%ÿÛ^‡«æù8{ž–ÿŸ½üèÑ_ßòßûäó÷èú¿õ¶ïþŸßºI«`g‡?¿'÷~O¦˜_ ü·ü´`Iž&ª¨Àà[= yvì S§MçŒ{x÷Ã0›£Õ8W¼–i˜5jfní[$ x[ðæ™ðÎl:+Hï¼ÛÂqi… ‰†KCÜ?°A?"³FÌú|Ã*@ž3#/j>< ¦J¤ÇE$i òXøC´úô*€’ &‰~gÌ<1ôË +J +ô×~=Ðo©ïIž@ý@< ^?(‡`Š5f±j‘zç€öáñ€<+Ë[ÇEdøBˆx< +7æA<‹¾š +$G40i@Úƒ//_<²BÑÞD {¿~[QBy‚( øPþÂ,þŸÆ–ØÕ$°z^@æ-ø ÀzîÇègì}ÈQ³­B€éË-kh ì ûô§>õ)ÞL¾øë_ú’ñúš&Š t$£/0‚ íM 0õèÑ£ßVÌÿp× +¶ÃC¾onmÏ£æçoJÐ<¸»û5Ú·Y=|Ùð§/tƒ{ËîÝí&€M³É1µG #^@XÃ9*âÇh¤¥^F§ä!q©RíüÙï¤û⛀0€¨Üˆ´Sm¢XægÝp].{C‹|nt¹0:ã¾ +×p%©œk/Žx¤O'X“Öð!ckD5:ܶè“è× +ßâÔ–(~3hdØ +}c­Ò.r€ÙÁ7ýQ¬m*€‡ˆzÅé+dȹ°‚qé +Èú¨sî¡]lÒ€ñÞk³Z Þ à:Šðk•ÉYn)3‚€N/‰„BEhªSÝ­Œü<2 Üì?§õ|èn«ÙÌU8îÄ üëË× + ?WmÿTºî]ýè k,IñÀ—lqHªÎ ‡é@TpyôÑ£?ùj§£°~‡†üý½Ý O6àæ¼¼ý×íÆÍ-i‚/k–'›äý÷޶w´…6dcq@O@pXŸ]ÔÄ6â)^ô¤W úÚH"«O~\¬ŠVuºæ&æÚL“3øµ½Ý?ŠdŒÄ˜Ÿø)p{su™Çƒ»¯°Í©E_$è T»à ×\¢a,áÜ`dCÄúýŒ'(vÖÈ<®àÉÀ2@Cp[ +ÀøÇÓc`œi,: yîùñOŒ?ÿ<ãËÏkhX­Ê~Awâ;§.Ê¡aÚ:¡Pë/N©|FC˜ú+±}7ôQ ?͇eàÙŒp›ÀF…=^@ÆZ±é«V<ٛЕ )?h r¹c7° ºS@Öä* ÀŒêˆ8èŒÕöI}O}úÓŸþâ§LMáÿ“ºPNŠýõ£ŸÜÙßÝïûß?èìíøA@tf€nܸéç‚ÑS€~ÿý¯q£P'À~gÿn§WÍ3ø^ + „×UoÔþ1¯–[`éŒKçÏœU“¢[W¸¯R |ƒ@°[â>U‘@x“€ _Ø’»N +\Ú«„Ès5nm$M\5"&–MZÁƾv¤‹ùaXávä‘íï5X¥¯Ðq~ì9€ ú+ ˆ;@QÀZ&¤?YƒçAÿåñOPúüóŸPа"dÀ¼ô6êcYoíìùçcµóm;Iº‹ðIízønØÁ9€†pHX+€VÀœf€Ù„`@„9çïN¿Á PµMÈ¥@Û9=( ÿÚÑÈXÏwåøs J´€ðK­È5ò¹þ|ÑÀØ3ÏüÀûSšè³õâ!ã’‡éd6¸LCáOîìt;þß{GGïïwöÞøß¡E`{ëË_æ?! +öâqa¤ùqþ5D̰¿ÿ^XY[™Ÿ[Ê\<~T€ÐÊåÆÃý btë < RÑ/LΡDòØÑP[úß…ü`!{PÜ+„!’X$˜]ƒ`6×–>VSGÆU_ø .8C%x-ª!A×U(€ ìëX£ï)ÙÉÞ@¯øè­ƒH˜v)àß@¿œ½°.ŒâùÇ5ð¡( ÇПÿ +@×r7è+˹M(€ÀZ5$î‹! +¤Ÿ¨H´€B€„OX9¤ž^½ÁF<0…Æ¿^`¬a@W†©&¼¡ß@[Ñ5P–»mælfZœ@F¨NÔ¶T¸HÖP8`x¨aÏŽ‰D~r,‹äd*€üŠ=úNggWñüþÁáý£ûüiø~§cÈ ÿažn¿Ó9D'tvùWðnP èw:û;ßyÔO¬LŒÏ‘j]]ëÎÝ ›±QÝ-P£R¡DÞR`,i»‡Š%ëùWíÊ)Z@9ÈÞHúl> ÕÑ8„èp@£#Z]WÉ‚.’UV*MÀ#;[°¶ê~|öä%î4ͤÃï2gBt·³¥ü ‡•@åóºÜã×µXä~~…ýžÊ $>ñ<.M×4ˆ×»ÂõÇ^.[ôš_Ùér€üÉs©øð€`?͸Kê;á ÃÁ_”àj»ž¼9˶Üt^[<0.¦Ÿ&±:iä +þó9î>¨*A¾††ž®^Ø3Ï02è£_ˆ#Ó±C›~¤ àÑ¿º+!Ïý½G‡¢€ÃƒÚü¹Óooûíßìt¸ã¸ãìièˆ/ i†Žf˜tö¿ý读 @š}myvRH“ˆýUŒþ·þŠÏ"èYas„@NÖ æñâìÿ/sðn }à]’ Î5…îÜ8¹Àóõ 6 ÿÏK»¤¿ q¿/;n@ËuB)àÕ§i"X^š›õíÀËÇ{i¡]ßÒ9vl8VèªV€œU<Ô + @»à†d·Á ¾ãÝ ÚêºÅœ%5«}Ä7¬½R ‰´ž!Á/;{+€ÏmPiQA èi:€°r0´¶¢˜Zf7ýÁ¶˜Êï‡ëO.xøœbv¶&i ক@øç¹ßNÔM˜HÏáñÀÀSÕ xú)[÷êG¬(â…xôû_óýý?8<”8DÜ•ºß ìíG–‡NÀ6‘øBŒ @T°»?Üý¶vÓýXp]ä+B#]qÖWµŒ·lCå õ4¬=|yäâ@õ˜@£­Åî‹<-Œn„Þ‰Pcñ¯-­(¾èO¤3O;þÂÊš¼- w3ÄARü\(î;"ÿ¯%röࣵ+>{vüÂÐ…‰Eþ¤¯IPÔ + ; á­g– ä3[­Ø› + ør&rìµkù^€˜i‹„öBN ]Hd‘¨¢9´”Ãå +l=fôc§Ïd?Ne¯PÅE@ ºmDyYÕ˜m+@jÍâÆU!ŒweÕÏòÈÙ ÚñÝÞ¶²T…Øg£@VÂ+”ÞC²òD ~Û43ô´ŒƒñÀkñ´L?û‹»»»G÷¹5èP pbÿ蠳ݹK7ÅûFÿá=QÁ¶„?'Ì“€ù‡±½½½ï°›®‡‚âéøZý ²w†Q!;pÀChà!Á&­Öö&€¹¥%R@ÐÖ¼ Œ €P€0¸”ØnØ÷UÒ„Aá%LvÛ¾HhX]O`WôC—œèÛ ÷ï!rD!À ­OØ@f8ŸÑŽWÀ41aS±]ú'ŠÿoU²eÍ´\á"hTmZsã àõÆ·† 4X¯Z–—¹ÚGkZ%ñ!]ëš%¥BB­2û~;qÍEf¿rþ2…]% ç9@™ÿìo䯢vnÓ½©—5Š¡mUqµ¦9ßB$öõ€{lSÁk¯ÿE0–KРF¾¦ÌÔ9€àí³Î¸bš±ïM !˜‡F €c-½?m¢€% —G?ü=úë¿úöAçÞ‘ ¸g°Küä“$õ÷þÁ®ˆÀÐïìïó¬@ù'öþÄûøY·º€5@Q‚~EàX&DCªV!@C1-`lÖ!€€°®©´/C¯¡–Éû§ø‡Êè tÀqÿóöÛ +8M Õ +` z>þ3™ñ|6«@Ý^/(¿à1Ðî\?³n¥´fm q{üj]_Üg èõ¶®²Ú eœ– L¢‚ ²«JchZ³¤TfmâƒxyΘws» >xƒ|CoIð?VÚðb°„P ×~L›Z¿2>  û‘wá±·ì5”À@á'µÿ(0uís×®}.$À£¿úÉ]À|Ÿ»}¸; s$ôï:ЂO¯?zðÜ0Ío‰ü¬°»ßüŸ¤„-[l +ª\ÄVUP€€Ý«–j!@;`«C€F€§…‹;XÕè£j ]¡LR½!ÝS9«ýÛ[kÂñ‹:¯e¡Õë[ÅÍ•1ÿDZœÀk˜ô»ÍZ rý3Ûç_3¼þV ? ˜™R쥪­¸À,@áß»–ìa½ÏáïÝo°2•€b˜âÈÝc$ÞSì)+€8:-{à¨?÷9ÁKøJÜ!Oò÷éö'õÇ}‚ûû + +öù/MîÞùêÁOr{@Óý s=9;kò{2÷åéVBtp÷ŸJ`µм9 ¿h†@UX<•€*à€?¤iŠFðý +™€29€> +@¿Š€àÿä­ED²?Xk¸6=;ó åª- '.j¾ßôå]kcþ”z½CXWaïujË…j}5œTœÖ,‰™~ + Ž"¹>2íl…ý¯¿þæ[oMÇ AäôÖùàmÁ°¹$Q =ð€€Á{Ó¼1ÔP#S‰ù&ô‹ù˜0…3צxÖhmh«€¿þ‹oßÙû­ßÜèù`3Mü¤ý÷ü/!î)H»ÿîþÿàÎWÿ…Ý¿6×Ð¥6u‘Ó/¯‘P‹Ïk)AÙ +€)À->u+@CЯ´{ÐLK¨ZW@!€ !@(Ñ@—Ð’€³‚=9À¥> +@ŒÄ} mÐÐW8© „O`æ3š9À°`qüM¥nï-8‚x‡î¼3†—N`ìù¬™ó2нèÊ]ñýãÌû4ÈŽ³^€öµ‚ÔFýþ›õ/­·Ô^?æc¦qöýF¼„@Ì•$Àk¯¿ðÖo½áÿŒ…?œ7l­þyÁñp_ÀùáAÁ¶(ïIؠȇÿq![3Ñ.ìÄ”°=~/«¬:Rеk£Ó×®µ8 á¿þßþæ'¿ó[´ë9¸GøÏý»;DB½ÖÒð§ ÿWlÖGðHŸV+€^•èÍômh焘®Vs@@³¡T +;¥ À®R,¦¨¢cdÐÊ8œ¨ÀÿOJ3 ÏdF¿àI_þcÝ´ûï´ <'¾yÁzFüqû;Ñ ‘Ð µ¾CXWaïujË…j}5ôÄдæbÌ÷UàÏ ¦y£_J»vÿÆÿ[o}Eøgü‚ Ë‚p +ðyd¨Ã›H B€ó©Èø~±>ŒÈ‡˜Fø«U¡¢-ªù¶zýW6}Uîj†‡Ö–‰@ì¯ÿöoþæ/þÝoõŽÄ½P~ï`w{{oo›‡»»/}þ÷÷vö:w |û'î"‰pJpr ´4’€­V€9f¢È ÐÝÀØË€;úž2ÐP •àØ…îTÂ1²ã#´<‰0¦Ïh"WÓ‰cÖú ˆ£À…ì®z!‹½â¬–[j?]lY/@ûZAj£þi6«¬Ú2¶êš?ŽÿÜc—óøá©·€þÖoÁo¼ñ†‘Ïóý¤'‘ðt¿6À¹àÍÒôql!œ7ñOvfÐÛÚ€ÖþiˆI¦qÌÌLËûOI´£€Gñü0ìgû·ó—ñûñÓï|û;ß¾sçí­=› /ÜwîÜÝßãià{_ý€A@Ðåß0¶±¾9€lPyƒzúØmV + ¬o`£Õ +@pJ!@j}<ÐPðFo€ÚmÐlÐçDPv}KPŸÚBš7^ÏaFvL›ÆV±aÌý¹¥èÄ>¼ÞøLG$Ó~ˆëº +{‡¨S[UtÊ¡i^üðëyw]v1 %‹<@r€\¾ hà­·ÞýŠà·\Ñ`äüy+¢§ò+ üW + ÊˆGŸ®K_€Až:,/HöÿÚ±âðo£¢*Á7 ÍÐ-±K žü¯ÿê/ÿòoþãü?ýéO~ú“õßþ¿?ÿüßùÕ¿ó…ßøÂÖÛouïí½;{w¾úÿ×þ§Q»l%;^'*ÀYëjŸwb+9€BÚ¼Vt)ÎVvÕÖׄ1î‚AH!¢‹8½n­ã…aƒuŽkYXÖÇù™P³““ã“~4Hv>ÑÔO ¤ÇÉ‚f—–ùH{½ a ‘€J +à”OâèÏl‰ëS8¢zÃ}‚õàþ@Žª±® +Tsì0%A¼¼úqÇÌ’¹ö~Ö Ð¾VÚ¨šÍ*«¶¬¶ªæxÝV+ß” þßrÀso}@ PõÄkZ¦¡ý5ÆýóÿÎhZ+ÁXÓ¨¬í­˜¸Äøo†„ƒÃ—§µÆÇ–&JaŸ$àÌ«3Ù`¿5’ýõÿçÖ?û"BdƒÑ!ƒž~þù+K«?Ί±QnùØXu~OÖ?пÀ. +€› + &€4Êaìià` ñ ø ÚÍOóóÿDñh ¡A”0+êr¯qÈÚ“Ã#•ðpܽ½ +@Ga £ªoòñŸÑÙ§2à( L7ãE?½°€,…1ê5zxƒöújQ34v~¼…vÀT½­wë*ì¢NmUÑ)‡¨^yýR’3Ç()ì4 5Š܇÷ë+_ùŠæõzS €ûþG†C¦jŒ±  §`ôyíÝ•XäÙdŽˆ"d‚ÿ4r?cLD2<}D–·M]ED`敦 +ðMM(«â¨£O*/s×7xä°­¢ ?ü”­Í@!AÖ +€iQ¥ «.³`oìµ4Bùg|q[èÃS¬„Xþ[ + ú +þVB~*XP€s'µô*yÿºÀ +@Çëã?«%¸o ³À©A'ÄRmWœ€ÛjÓf¥àº0«Y DÉñæmÜè )ýûê€&O°‚ÔFýÓlVYsû°jž1ʼçÅ-uFUtbþ7ß4üß2úmïJD*à­wqÓÆúHä +@ +@A€¯:º^6(ÈKXÄ«¡’¨6H§#¿8Êr´‚½s¯H¼ZX€ì…VÇ·P rušÞK‘¯87vaxøÂà…± ÅÕŠð—Uð/öØðæ|Ÿº€ ©4€=h@?ŒrÈ£È@ ðj¡¥üÀ0;9×R@( ' °·î jÐ +8þ3[Âûqf° iÂ}ú5×kÏ_|˜ÐX°Üe¥†ÀZ[Î×¾ÜöP,‡”…— Ð +îª!¬«°wˆ:µUE§¢rXU"+«Šsn¿WÂÀȨü|ü·Þ}÷]éÿ¯¼‹p© +ܧŸö>@ðû©>ìS + §`º(•h‘¿+pþF/Š.úÖÚ Ï 7`‹YiøœñÿjªóXÔ™¾*¦PUÿ5Ù &÷ö·y¦ _ÓŠž¼€ oÀÔÐÈ´@ϽzþµàãÚRJ;É!ü! ÞP<¼[èÅL3À-&íÀ9"ŒãZô%OÊ”àÉ,~¢%¾lB)@­ÀÚ€¨g½^ˆ,mzœzô`eÁqm]††u3ƒê‘ HÈUÈ«¬ Ǭ µQÿ„ÍŽÍ94Ê«1.ðl¿­ùŒ¢kæˆ÷+ÜÃdÁ[ï~%ô~&5/ëVÎö¶\}>€Jè>à'“ðÔŒt ¡¸ÓqÁß€Ç +ÈÁŸ(s+°ð*D +ÀøwwAr•H€™«ÓWEÚç ðÛHEu›AeÁ©úœ˜¢!¯®@Àk(#¦©hWlå@Qúhû^‡ÚT @*žn¼÷(€v 7èéÐèUÇÒãÇ["¬È3ÚrÎ5L=“©A–±NÎ]ÐõFáËûYWm›kW[64í$Ð +³Íò®!ktY³F×k˸5Š!,f>ü1€oB?ÞÈrƒ*˜À0ã7äó ÿ÷Œÿ$€¯xþ-Áýž +€L¾¬¢€Ø-À s¿ à€0é*(a_gl9€‹ò÷O¤¸ºÑcAZp'`ÿÿ÷<ñœ<¡­E !D|ZÂ]†ß‡x§x|+@P€Þ‰­M ¨@„Æw€v´š¦Ý<Ú§Ì´[ýû溒€@øÿo÷` óc,°U[€Í¨4ÓmW0Õ UXfÚöàõf S!åÚWw› ÞWHØüé±.«$ä4éòÎZŠád‹ +ÊezœåÊWuZΞ—ë=/8 +èöÃà¼høØßLçÿÞ7ÞKP9Òo½üGh‹=à@´˜†GŸçæàÍ¢Odʆ`G:.¸`ÐàŠpÅìïëðÿ’ÿÒ14eê[„àï øORùÿ™)aŸW±€{¯}ô~‚n@WÐTXKtåøV  Êœ¥ ŸhäRxx²{¢_Å_éÌ–Pïc†TÛ²Á-QWÜvÁ´'À3—eäòUJ[@§47¯7ê±ö&åãbêOD‚·jC—Uå]C¬êcÍJÍ!×5¦­UÅÊ*³½sŒÒ 4Ãð¼üí3ìßûzÅÅÞ‚ À ^c\Ûùóçù–Ô§% {SO ÑB{á ‡ásƒçØ·V‰ Š8Èr›¢¿F¯\›ùܵ’ó8æHªÒÕiÝœìÿ“H)  êÄœ&ÐÓçµ€!+c +:ªQ ý<`‹8"€Õ6h„:RÙ éÐÓ +àШ„¤«sýZ>r+€Ñü–hï6éÛz=z¦®­¤C²¸[ eZ_8¡åÚ\Q^±>•…†5–èDÀgÄn+ƸòËšÆ ÇX¬iTÎÙhÙ«­¹ßƤ1“ÆÆšP_ÈÂþ{¥m¸ hëÿ +`±/xï_G|EÊ`‡$žx pqþ°@¾À¿Lø‡†‡/ +ò£òãWÿñç¾î>ä@[$þKÃP øéÁa>Ê E€€\ö ÜßD‡å\ûC`F¼^µ™è°ª@CôæªV€†ô6¯B€†HÐ7r¢_ðjhµT9Íáý±÷Þý_ÿÆ7¾‘Ð@2Àyß €GàÙ‘wWÌ·k µ†/@P½,§|…^ƒ£&¹cÞø|mlÀsÃÿãt´´ÝË|Œ˜¢ý¢®iðûÕ™XÉ¥ )€‘H¦û—±‹–U7?y?Aß +€© @«›!@¥ºï0Æ»L(Ó~´éÊêòÚš*/ ø Àÿúêbà_.Ï-„+ÚÐyÈ™“-)¢_[Õ¯rûaÏÚF‡À_HYøµ†ül¥Ý­-pªÞÒf«‚»ÓŒØ’ãY[e÷kú6–+Od‰ú°„R H¦ (hM0à¸c£ *ñ®.£8磶«ÇÞ +¤cE®fÙ{ñ>²ÄÖ–"  àšc[UÐ(“5øžL‹ k5ÚUëm™3 +{ ˜½^7çVþ>èÿºæ¿QEàÿ-K3€È#wcK÷¯×ùÁóƒ¸íZœ?? +À§öø©Þ`À&ôÅ(Ùs‡ÃJV!ðÊã¿`o\åÙew29`ð;03í Æ¿ŽÄåM£©@$ðø{€ÿ‰ + [\©"€¥î~u@ž¹×å«b#¹´——Üï_)øÆŸ…ÉÉ¥UŽ_ìµÂ7ƒãe‚*N› _¼qÛÍ ƒzLCú¸e'ç°=]פ6n)ÖàIuPí{ôñ<ÖnaaNâBuõéOf ý“±_$xŒ[þ7À¨¢(½Œ#®ÐŒ}ÂŽ?bý¤ö¬ö›{®v&SysU±öRe㉷Æäy©ivÜí51Û[5­Y¿3ã…jÆkZ˶i·hÎèb€ ¹ý÷ÞÅóÛ,Þ R0¼!ùfßÐײ1Ðú] +€€€n=’‘~¼ÈæB¹àï«Gñ>¬.à׉ùþø™› ûÂÜ3HC è–Ëo=þ?ÌlqªVA ‡8ö^€†‚kо`||b¼ñ—cñ<ä¡¡ C—†.É.Œ]ã=Ƽм«Ä? ðgóræñè@AœƒÖsÀòûŽéù—1„ú²‰k+¿ч÷c´‹>äß7×'.èÓ||Ê¥ýíTýNTý[Ž» pÔkù­O´¡‰…•P☟ xñá`_:Š@èpÉ6B=–Pê`­(zûq‰ þ],Ô†÷³º4yª£Q¸wÆA–Ø9Á*ˆibo >¯Ë +‰jFàY»ÇðlZõb/Þ=ºÁ!tï,H‚c*ÇÒÂeÀ/†nëY³}j¶Öxœ•4éÒú,ÛŒÐ^Ãц(ñ?H/@¯÷w='£h@ ð: + » + ¶¯Þ‰¢¸8ÊãIòD?· +–(Ô¹s€Úcæÿ»€Œ.~A‰}Œ.»Š€*¬Ò­÷ÅŽñÿigÏœ¹ :Y‹ÿsü1J~óãmhlBĤ +}ߟj\À…tü4ð=8`q•Ï€C­ÝÜX[G¬ów‚ˆ~Q@„z-I,/ÏñÏb±§†žŠ×™†¡s`'YííÍÁšÁXÐS­”Ò@Ÿ³ZÓç‚Q*Ü{TWK˜×PŨ ÷Ì$µ‡) u0Bü²Øµ²UÐ(µµkUã°îÊÅTÞL*ä,s@´Ï ›Qð€Ôó›ß- @`02ª@ÛÐж„ÿùóyGŒ€¼Ÿ5¾¢Jð0AG皀]Ž#%€ñß`R +¾ÀÝx@ükI0@ö¸:­@¬ë]ëÿhÿ;ÁNÕ ÑDu)€>­Çý/@ ýX˯n{ +˜jO=õ´¦O«hðÒ„{÷Øk¯:z×K‘¼\:Mt¿>”Ot÷¬û¶˜À$ŸÏˆ-x´2B;ô?TJU,Œùmñw- ]âôdtN0ƒ=§E–€1èÕ`¦.бÌÞ¹ùRY ÚûËzQ"Óž™o&úªÙR)–½”ÇD ›èa¿ª¤¹ +k®+ÖS€[‹iÌ×s²º(Z«À3ðÚºã=ȶ¿B[Ÿ€໼¾gP øÆ7èH?¶£ô×-$0bíï7f H+÷ 8 H+`æðÈÀÓÜ( “:à¢bN€Ži¬ÄhÜòåß_îk»*—OË¡…4A¬STPì1ø?…²- Rß@ŸVmÞ̰1 +€X¾¯)Ê׺šŽÅØØädü· &×Ï[4à|¿;Þß +À’„îÑŒ)ðßF D«ž O 4Ãʱ?øçßk–––økQý†=ýôSO?e6 +SQI œÕ.~N°@X…O¬ø\ +õv_Ìä8WzYÛ³‹òöØèN/ž[ˆ_*zÈâ^ËJ^…e—Df„3.†ÊªÅjU,–?–²¬²æroÆ|=«¹f.k¿B-JÜîöݯ¼Ë?ï½›MØw¿+ˆ,€ oåÑ­r/Õþ2þçÞ_oöaÿI•l)ÂÈÇòܰ%05BçÀÈ ïãO£‚ì'ö^}%À+ŸÕ; +y‘y›Ûø»öù¸ãì£÷ÈVW:&€ +×{lll<^]¦rìÙøæOUð¿04¦wÃ.‰fóO¥À¾Eð·W×'Ñvh”ë`|Ñ‚6U™î@´öÑÀ1Å2ˆDÇYrÀÉ<ðYíä`£æ@l—Õ,i>c9{åeýRÁïÂ4C½ +¸Exëd˜ªvÃT%&÷ÀL©§ÃL¬áz »‘Ù\W[³ˆùjÙ3YRV³’®…†½>fôA÷»t*™€ï}÷»ß”¹5Ð,@3À[ _ +ÀÎýÈø1Òì›’¦Äâ:ÙýkÖÿD€¢Û¢Á^àÈ^ª?Àµ™ÏêmƒA²1ZÒˆàÚŒSt]ˆªÇÛ©ZõZôôò»@ßÿ Ãž;íðn=x&'ÇøÞþkD’ð¦ cÍxC=Œÿ{jãðÿV-ÿuà~¸¾ÿh pPA=HPl®'AlÒ\@Ÿ  l X„ú&'ÆÆ†B“¤±ð߈Šd>3:z>‰%r޳Äg"­a*ÐðÒYk–`ü4E¸ø²ƒ²‹Ç4aË2ºˆýE¹BÅ@a”•µ Všiæ¿-øk¢PóUa5ŸÖ^®g›•ÚuÂún„õԬ̰ë1/ÍÞ] +@Þ߀ø_øÿøOþ¯¿žmî¤XR% ¨Ú}<ó§ü?Ð ï  À +Ðê+‚°jj-if°O@G@ú1!úw LQ€; x@C(Hy,þŸ0üORU+@ƒš +£¹_F½¶EÉâÂâ$.V0Kàirœîî?Œƒúù9 ˆß¦éÎ +@zÞÂx#[6nK<ðœÅ‡ëL€ª‹/,P +lÊÜlùô }$Ÿ­iÚé¡É¹'¶DN«Ü?3mª,œ°ÿñ/f™«LEft»ˆº¹}k“ÊJó@ŒZu\è’†" ± ƒÔaªÔH jCX˜e¶Q$Ë¥æ=ª¡QМ kÎ7,¡×mdå˜$þvÿßýÞ÷¤dÖ¶Ì ´ ¨ªÍŽ?eÀ`¤2`ßÒÿšU±‡å‡÷Ãó„]’"€óçB”(Tè%aÜ +`ZÀÿl¶ûÀF¦gh€ôU8 p*4µÓ +Ð/ÐÓ +KôSq/}öŽ7áyqyAü_ðìcéð/Q®IôüŸ˜äïfIþ-èÚ+ÚÒ±¯"5€¸æõÂóëpulð˜Ö#( @ËâAûð®èSDâÉñ‰qn/à“³s“ “ÜvÁlÞ:ëP¡¼Ÿ¥_í‡Ó@aBÒÖg?¬gÿªÜ½6÷«ëäbdám<2´ã¥u©r{«„œKã~㯠±XÍüøÇs¶,‡ÕKrͶka½%ÅŽ] mÛy²ñ!¦Þ¢÷¿ ðoÿÿÝßý]À×±÷ÐÂæùP¾ 2( ¦‘p@ +x@—pøÀNLàÿ +¼pþüyãß7 d˸ËïU·¢ý%˜„ø»+âF€©ÁŸnO®ÎÞ ï¿wß ÊN°ÕÕ¥•Õ nº÷Ï |s òšü!ü¬Æ†¡`D€»Ã"xü?=xô9¿/¿GD䯣ŒïÀðo¬‹ædî>(‰ ˜óÝEV%ú| Â0)xj`h6Rg·•.èUh³iÆ"½Æ¡Öy­@—¸3VÛVéòØRµÚžwÆú=†ƒÏíc¸úŒü|FQæ—UIYà¶‚c™i–a­YÿzÌFIWaeíUý,\sóeh:Ÿ92!ÿíÿ¿û½ßû½!¾Ž:p€À­ËG7,¼¿Ç 9šMéc%~‡Ž@øÏJàWÛ + [Ú + ý<€MãŒLânÇÞ]¶¶¢÷úòÐÀàý¿•¾Þ¸ZÃ78tæAy}ߨ'À^ þ××qý:bðmÁ_‡]ŽÒÇg:³F ¨úÚPQ€ÛµCï 07§OçÃù(ß^¼à€`rìÂÐÀ…ŵemò$Vkè†5`ËZ1õðQfèÕ¹0š<(­¹yUÕKÞ$+ÙrÔaµß¯j²²Þ,·ˆ|#•h3D›(õ|”e±¢[YÓ3ªLK14Ê«¹>Eýíœbkeä‡vøbí½wéï/ÀÛ; ü‹~üG G4šˆ@smþ–„ØQùQöA@89ïOçOÄ &£Ú€Ni`~­tzÅcC›æ®@A^Hç¡ ,©PLà™´@i€N쀰Ö9€šZýØóÉ[¬/_zfl\XO¢Ÿz™`H‡]<±€/m¢Eû~xEG”âÌÞ­õ[ëàß`*ða¸ T4ÒÁ¨@G*óÝÇNúÞ@>kEßž[~âc}""qÀĸ`l|£…ÇÍè®ñVYÃÑ70ªÙ\Ò$!.ðåëM©7ÏÒ‚ÓfÕ4沈Ü5f_ÞØ-“âó™÷8MEõ*×2c°µ—ZVà¬Öwg'šÀ˜ä¹@àß÷L& üg`Ì£~ï{ß-‰@VpcpÀ9mÉÖÞY¼RÿØ÷kT)€©é+Üï çˆâCQú(ÀÎ6zþÈOá ¡Í{Òè $ÔOñ瀑¨(@;ö¥úy^£‘ Ð< +à¹#ˆž¤ ‘÷w²é³×—dž.8ÓO’OÈKTj‡+«tÔá¨V–ø3  +Ôʃ#þuä:Ú[bšû%õ%ýCökÇDäiÜ?äÛÂ|cb  +Ý‚V—V—ù|B ÙOp‘.dÆD7ÚFp–A¯ÿ`j€k‚”y-¥O,Wk+d—ÇñÈ„Ü(Ö¨†p%W­©ƒqÓï;ïb,w 5eWæ+M˲WÆLlj9¬…Ô Ò69 g}C!dicå ÖU¥Z<7ˆÏ7ð<0æ×aîÍ! €`0Ì-~×  à{¿kp°Vv;àÝ1‰d@(FELG+€ŒmùP:Ó HŽZëè¼;sM +à< +`êrÿ{ܾ'0åÇû¡à5öQáø‡}‹€Êõ9< *`§kè×ÀnVfך + o+xyœ™–/ÑÉfbBž>Â||³BgÆ0Á’p R¥ÿdÿpþ¤ôg^šó1ÁZ:Tô mÑÿ"Ž™–$Çæ/! ÄM†röúö‚>$£&0ýÌÎŽ‹.-)zPü= +N9ðJô€¿ÚjFH slQÙYÝ…š§ Q,SÝÞÜ~ŽÁ3ïÝÕMø²œe[×öT+u¼‰÷\ޏµ½Œu ל?ÉZ5„ý9gÛmùdOÏs“>¸Õ뼂pǸqÃdÄ9€L6ð/ÀàŸ*&€œ}Xx^Æ~aÞ)€°sçøÌÑéË +øéRŒp=€ÀkÓ#Ú‰ÈÀ-‚}; ÆŸ½æ‡Â ÿd€©ó#"ˆ¢Ü`Æà‘@çŸDœùyÇ´Ô9€S™¨c@ +€–>úú¯ú†}íQh7î—–À$&䫘|ê#ùG¼ï 0gBP‡û %ܨ/²îD€Žº÷À’ "D+ ³ú|Íå 5¡æf'ÇÇÆ.)ºÑæg·õÄT¢TN™y½3_ˆK$z»æÊÖeZ™ + +z¶hC—©„-ÌXOÖÔçu¥ Â(i´´ðX,¨×=|Øt­ø»‹s³²•¬1Ûš/ÖS&ÌëEPø>Z% 瞀tˆ Ü~Â_ 8àžàJôHøÿTô®@… v‘¿üÕŽBx €k3rÕÃÈ—Éþôï“k—¸*ÿ¯Ú‘`æY„©áÑÎòG{ šÕMI0œøºöäý*+¦&€F@º(ÑÊiŒ¼U`|2@Þëg¨kj.,fò ´JûGOø·nKÝ@X ý¿”£Õ ý>œfªÂxÖÂ"„}kÇ$ùt‰½üiËÒKK Ž-égºÅg5#Æ /Я¸ ñê‰Fié׋{׿í-b7 l~ú®‰ ÚJfRÉÏj—½õ*«Ž§lÙ­0lq B^5´f{ŒÒðôu•œP|’è¿Ãn‹Ý–ÁÎß#ž×„ÈT<Ï„¾N üÿîïEpK@&¸<‹>"¨úaà €ß(Q@+€’dç.Kæ·€ -RÁÿ1 +ÀJ¡`yô<ÿYØR +$B¼úÊ«'Ù+¯žªÀ‰9¡JõìakPå¨qÓæRƒCc“³ÜîC  +}b3l°¼D Ý÷Öì‚Ô†>EŽœ¦=}]€ÅhÿlꥣÕ©Ù¦fóö¦€ÊÈP$D$–«+bÑìƒñÇh[–\9«µìŸ‡¬GPǸ·Œå{ŸÌ’ÊrIU™cW9­LË®¤ÈÊ”ùeÑA…ßUrAGæ:Z¤¼²Æ!…Q q^—U®?'Åpö9ËB±>请jnßm'­Þå‘aÏ¡Rr³¾-7íd}â# P@æ•—×Þ¿©Ú9j ìâèÅËÒ¡Ü¿/À4 ö€+(€ðد«H€À¶ [È´­Ö=—ÏÈ."Pô š¹rÂû î8® ‹B¸ÂiŒp] +àÙ,!ñA:)w)°ìFCá?²ÿ>föºQÈÆçë ÜzøÐßÀ\àZ›B°ˆ@„G G®OÛ,ëã5ú:òY\T 0168¶L.ñì¶)ÄTþ´ ÙÆBølàè Ö\Ùµ]ÉúkÇ‚mæ÷TÃC~š7Ј•¹OŠ¢vTÊOaPä:”VÆ>r6,ª~¢ÙP†>”vÐOkõÇnëƒpË<²ì3g +È.j42lüg ÈD Ü„C×¶6X$E@zù4Å•¸8œ-ÜI@!@2&1è@+€–ŒË=¾Ç(€‘LÆ­ô’PáÈÈ+¯Zntôys@«~q̓;‚o\,«ë– ޘ{hé…ùùXöؚùØ…–i© ßw¯kBר¤B€„HüHE.õTXÄï÷ çkï[À8¤ z* Ð9€QmÛ!ý¿ýz0€GÚ»±L0ISü&×½¡`v޾¾¡?X…rø‰ÊpÕчwM:`‡ÿÓV‰k'ýÊõŽ–@v +ú…yM%(â!V@9dT±¾¼@CºA¤OåùÛŠ&džÆW­Îj·@g¦°ÆŒPœwÕf0Šõ}1daî¢1-+ ¶®eÚiV´’¡Ú,>Q¾ß%>ðøôòQ¶ò9½~ìk5þOWÿ±Vï&Ž!‡À>nßS4“ˆ”™¢à»ÜÜôÃÉ .V +@{€yMعݿ^TànƒÆG£,ð +@ƒƒþP  pñÀXºÔËŒ}à¯MÂ}< ŒÿáަF†Eÿð‚àÿþÑ?âPÎ%ôc2`ð– +ÀøŽ|Að8 i!€’ˆ]h{Q)€•S1€ìöš`lŽ;q–´±Øç;À=,Mk·U圞å¿á- ; (oOŸO;à¦sƒ,PÇ@›ˆH¬èµH@¾>zû‹è{™Ñ;‹st˜Xå³Înà ¯ ¶HÕ èÒLÂÌî5Ê‹±Tœn©å‘Ç1W¡³ÈR¬KÓB» m¼±ITˆ«­R,Íi`rÙxKkA°=”IËZ^(£“«vY¿ú•ð8æšþ¿ù]ž€D$Ý €xC’ží½¨Gƒ41ÐõÏî?ÀÍ€*ˆ;ãE‘@Àˆ@ˆÙ`™@s3WTŽŒè"÷$¥§¥¦ðT  ¥'£–äB<+pD:Ç05óÙ™ô +þU è t·àâ¹òÁòI9 +P L-P EPGx|Œ=À ¯ˆ¸p™F" Ò}ŠúC‡èã—ÉØ[õ ÖMzŒ„sŠooÊÍãéåñÁþ¦ˆþÍk«ÍÛÎâióÈhíÖêB_‹ŸB߃¥±Q_[Z\˜¿0¾f¶9³_ §+«p ®^U±…WnöµQ«öÎ1WÕd†dæ!ƪHaƵ×_ï£e•¢0cUY‡ÜJ…Æ[? kÔ¬j?f³þ«û–ª°t±w™@l ÛÞâ_²ð»Møÿ–~" +¬ÍÙL +œ Öçe8}•*`÷´*†êEXàV™¥81i£xêò‚àÒ0/àL™ûxm[˜äÚM¤4½ÆŸ‚¹6øW0üœ +Ì ÿøüãÚÿúÁÁF1^O%Θ d½ + §€ÛiPøJ!—QQi…®Þ'è¼µ:éVÀ¥ÅÅ%>‘gÐKº`Ô#Û5 Ù™ „d’zp×îx€½¿]¾vÎ<Ü`÷¯ÍX)ðŒ0mÇÄB¿aÍýà.ô?‡ãRÀФqF»UÀˆ4„sFžqN¶ APÆŠ +¯1e;ÏÔ5ÙOl‚¥SϺñ1¡º·§(Þe›Ú;ô¤PEK®­ÑØBà1Cmõ²&%5X—ôö굺vÎÕf?Wö»¥Óéâë»ý4&|ÏÍ€~4è×ã¹ ŒåäéV(TKÿ3Ç=ˆ*ÀúÄ~¼P™ý(dºP(OJÀ ¼’ +À/J0¹j€-ü€¾i`„.F¼Pn`£¤B h ¼úYá¿éÿUµÎØÿB3ø7–äcsí RÚC·üË'<¿óöúÄ¥ñÉÙEúÝÒàø7D)«ôOdÏâ¡Ô +@HE až`¿.•ÿࡈÀ½þ@½Fd>ëR¶ñp#:6B L"<¶øo®¯ñÄLßÃÁß_yiiivvüÒäê­‡~¬è­àÊîÚXÌwS€R€ªðž0eYAÍi¬=T Ì:YÓÐ4cþز¾ÎÚ(Ô;·ÍIš—âˆ4Ë”#`‹ºÑ ïØÇˆõì)àÞ°¼cC5ònšÝ³,²t¾ ðÍor7 b`ä݀䳀bc2 rú¾ÓЙ@" Àú +ÿªêÚñ¶0þŸŸ6þÅR % 8Š ¨Û"îv`&X‚û?;óŠî?Â) ÉТÀ¼âÀùÀ?þ?ñλ +²0¸°àßTþœ”¨C€$€†:‘ €:§‰nÝ^'Pޤç J¬rƒ®e:¡;y{¼Oþ€åûñÿäìµ?n`ãG<Ô J¸ý€Aá—t!rA[{Ä®L*t…& Èß”¨ÀÂÇ/-NNŽM®Á>³Ø?¯Q#€áK ”ËÚ A6|k½2X"{çåDkøgŸŠªH½X.µÝ¶ÍŸ/o_6eÔ½.±ŸïÜM‰F‰¿.zhÏù]°ó•U÷ õZ¶×å’÷¥ùÞ ¹à±tþ%…>,` Üñ@îâ‰@°]‚‚XãF€·†[ +À‘¿ î} µ¢(Ú‚`bêÅ¢Â÷GÀ?û…VpÁô5€“f *~Q^P¥PžL+€ ÀßG@N_,€ðÿ¸wÀgøgË€¾G¡ÿÁH<¸ÆÇ(yh•P±G#@YÕ +æÈüøÿ¼6yibv%¿£/>™~¬£å•ƒ?üu€WØg˜öŠø*øÇý=TV`9z1àòÉZhDn@!Ç»¼B“€%ˆƒ}ý¥¥…¹‰K³k$,ØçÙLÈ HFX ê=-¥Àª@¶QŒi>…Dz7WÖ;×da1ø¡i±\…õ1¡K˜?Ð ¥DÆÅjÛà}xcǽ <ÞšuË|ЗÇ|Šk¸â+k†xîÁr/ A€Ðî{ã€E´€Æx}@ÍnØL™ˆýôÔð襸<:}Ù­€d#m'xÁ ¾T% @ vµ(§ûóÉàNh…D¹DíÉŽ^éÄ©òw<`ª¡ÿÏ™6Z Г ‚‡f=¸µ¹º<>69K¿¸ `mÃÑ1"®¤Huà,¸Šqâ4ûi_2Fn TéÃ$5ÿ̹’ðëüá&Á{þt#–X_U Â×3ð­A6x¨á²b€Å…Ù±Ù5íMŸwVK´G¦„¬!—3µE‘=¬ó^¤J£– Z/9¥Û1I¶ÉŰBÞ³9©­ró±Æ+½yѱ¯²QµçDdhþXN=ßÏŽ]aË­O°¾5tÅWÎ?­€R % (ÿOÛ ûïñ4 ߀û¼ûž*:Xm [Xø;ÿWÅûBÕ2#y€C£S”iņÐû³‚:`Ÿ¦[?àK”ÿpW@­ŠFBþödP$%FF¯ +ÿÿ Âôÿg¤ÚÆW6¼,;è«p%КÜ:±ƒë´s²ÄA8×'ýÏ_t^æHÒõ +ÿ«°ÀêêÒ’BÕ5öQû´ä›äàåâÝë÷¡°Ísä䘌|å¶™8= Îý DÑʂݭû{ùGàq0ßH œ›%²`—gzÝŠ$ ®ÔÀªà”%.møÜ[‘l¯V…êóžrW±ûœTVoáB¶`oZ ¼QQ vãA‹ÕaµÔ‹KË÷Èz@d°ç©ü2ÿÎê@¨÷çj¤ºS@Ö»(`‡~¬­Ûµû°I³À&àkBå™äN " öG€®€þÛ¸feÕùÿˆøXpè÷º¼<·þóóÆç›˜°¤„`N`ü¿(€DA8Ö¨hsCÊ&ž9¦#pÏ @3ÀÜäØäªÈã¡êžéu« ‡rÂéŸ1€ÖFbæžÅ_WŒ¹Çî3’מsꕹEKža6ª…\¨¨™°ÅG£8P·'¤Åv}%@=×5ô³cŠm¹î¤*}×rÑwYÑ^H' ý_Àøë mU¶–èwÓé>/¸,bïÙ#Oõ +`ÍEºòLÌd^?’{W¥ÿ¥è ¤Êf€¢ÕhÈ#à‘àþµÏAh€Ò‡‰ñ?£]£H +°ÍTþߨgä˜Âó­@`7$K„öä²0zV[ß \crák<p–{S`h7Ðû/ÚÑÁ-¯ Ñ|°,äê;¦Ï€øCò ›Â¨ªñB¾&ÈÍ<€=6ɰh. ‹ ^Y\¶As#ßKƒ$ϨdÙ +`r=)æl–XC8Ï:ʧ¨åM»Mè,@B½2a0ÑmKÜu™+¾º¢­Ñ÷BVÉ [5*YcÄR–ÅçŦ.LÁÐýIZÑ-ª‰·ÖK"ûµµk¥v½Õ)¶÷ýÀ݆?ŽÔÝ9ýny,xÅÜ(Kxïݯô(q€ñ^ÁŸ©Vk´ Œ_¼ €~Yå´Yš¦g®Lq‘óܹWgþþÌ«TP]QX¿víïü_»öÊ5ç…3NùÅÎxÖ€hAK£•¸úJàŸ @ÀŸ©B,ðÏË@#\Ы„¶i†lÙè@I*€:P ‰Þ÷…­HLL‚ÂÓÏ$"- +ƒZZBuÁÝO1þÉó ·øzºÿ¸ u½ +\³Ž"  bc× ‘næ‰öeü߀>~Õwñ»H™,ÍñçÁ“kt4>“Ý&PZøÜ¬º(uåÞà ے„Ç̬WQ”Ö늱} ›ue ïES),d9Ëä8Ëš²œÓÄG¯)ˆ¬‡Sw8DZª…(íÓdÆ!05ºLpD¾kôÐP€‚|#À»o½)°_({{´={A N|b*îˆétC–¼%s?=:¢HjÑkfæs!ùÃõϼ", úX™³þô*Nü‹D< D1€²«¯ŽèÐùÕI h¥[* ÃóB†`H€“Zú)|wäÚ!ÀÊêƒãLnzmlàÂøì‚Ðç-#`L¯>_¥€tóA(vÍóæ›xø´ØX{†·ÐN„Ï̃M‹VØù+®àQ’›Ü[¤ïéo± +òõéZM€âY^œ¸4p)ÔÂÙ̈©,0^£åœÅ«Š\©éîõ.™úôÕžÔ@¿±•X¡¹jÿ®´SH TnÔê1jª~9¦êÐ4«Ï7ðl]Ö[ÒcU•j]µž$˜ ­*€¶mÀø +bo¼ñº@y&ˆaþß¾ŸÀ×Y-ðFQøyíƒí‰à íø`õ(ÝJ Ü±@mÐ +¢Rö€xjz!À Ôÿ«™(9€x* ÿ„½*05œ93<„‰"‚h¯‰Y¥0Z"ST öA´]>!€}q—(Azzʲícs++ö>&'¾viÀ²àÁ? ~sSD 0±¬.Atá-€džèßÞ[³µ£¢)è«È‚"8Rp³Ÿ^ºwŒ *èfÖy2Ð ŸÌ‡‹ó蕸JWÀ¥¹‰±±Uw18›µšÍ{pæediŽ  ˜ÆZƒ¯,”ŠZŒÒœóRl婬>Ê2«c)>$wáÅž@£²<â²w-æÁy¾õhàŽ1:ü–µÇתÖõ­Ò(¬ ñ¬Ñ0Uês7@$æŒá7Þx£ôðŒdHOUàµR¯¿nXqðSæÜ8Zìý âà>`™>£Ó7CT| Ø +€ü4ó÷TÌ›{û5þ¬¶ +BxEAÀ+–"€Üâ_‰ל_œz!(@‘À«£çÎù‚ú¼:€æÐÐè`Œ•(Lp¬€R´Zb=­X¢¡ÇäÖMssô¦`H€5©oí΋ôÇ]GºÓvgô‚k2w(5ÔÒäO±Ÿÿy#;ÂŒôøÚˆ¿ƒ!H‚ØXWéºjn¬-/¡}ˆüy1ÀÞ’›.­™aÎd(€Ä,]6È Ì«*žD˜«AU]A£z£¬P£?wUÍD…8eYàÙ,¸X“'4Û«€Õ„9¬ëé¿¥¸eUjmOµª@ûËê1骙 õzHqâÛ_ýu§«0 ,Óÿþß­€¯‹6€8üÁ·o +0X,Ž7­£ 2+7ÞZÃÛ +`jÔ79PPZ`‡™k©>+øãûg¤®Ñ×O«M´í€ú ’xeôÜÀ”‚ ãŸêÞ¥HBAGKp±ãÁ¨¨WȱwõÓÀ†£ío·W. üDNíÿŸ@:äêc¤Â—WÜ]_˜Õ[å [±>7Ò0#vçüÁ¨‚~͉ +@´ß1@·6àíñb9‘ +°¬ïÌçƒ~䇀%?•tA0¶¬]Õ„\¹áÄ{e Hyl—La…qd%€ÀcUU‰2fìä³jlLiúþØS-BÌ#eÉ“(9ÉŽ# — {u¿Ÿº­…T¬]§.Çʺ>ûi™ð2®+kŽÁ møT5œ+À-ÿÝF uo½! à‹?ðy…ˆy5‰Ä=›¾À‰û€"S-Å# +ÈO2ú=ÊŠÈxZÿ_(xUT0BÀÞ"LÈ.°A(sÀg§¤Üh ÀgÚûS¹Õ +˜ñ߀ / ˜ŽkçžÐP¢Ì´[0 ÚïåV)€v¯}|<°£h¯€Ý¹¥»àd€7v#€¹ñO•B yà¶;{cê0T•v‰‰‹u9zãéck›ú²‚?f¥V#¦8ƒµrN£±…Z Ðz=POP²¬™ÀýCÊWæŠ%gÉ•±'JÊG»¨Ô.¼P>àÓ§¶j6Óër¯Hæ’‘ê‰Ç-+uzVÕ·çÓ\·zʨÇðùvüÕ ¹»Lã‰`€÷ðóh€¯ xˆ6ÀŸÿ<ÀÐÆáþQýÆ=·¸p¢½ŸÑ `ä"®_¨³ ÝÏÀŽ€9R +µàñ^WY˜¹úêÌçhúÅ +Ðn4 '®Ò-€pÀ PEÂ~¥léýUI³­~~ƒ5æ4²–ïULkPmÝÈP– + '„Ä5`$ ›é0ÈÁ‡*é“/ðrúNáÅ”Ð}{ƒûÿíÛeòõ"'ë¼YâÅŠ6³šÊ%„zH è­PžAظ ž̯´²ÄCPk|Ä-ü¾FöØBRß&¬b> VÊ+/4Þp–²kK öÀ¡=ÉXŠWR*{Ûþ/Wggµ± ¶Ôû<¨kh(£•`gÚ¨Ô]¿ZîZQ¶¯¬Ž)ª5Ú¤Ð÷ +ÀÖÛà‡‚$øZxïëßxッûoi*|ãõÏ¿þy"s÷#Ä;;êÇí;°ÿ§X2¿ÏÀKŸ)ß—™ÜäpÔ²° „ðG 7@鄸{räf€k×^ý*ˆIÑ&ø÷nè¿à›yU +Àí u‹ÿ—5röÿøãåÑ!z@¨$$€“uÄ̽÷¤%ºL"|uìé±Yº|2«oÚE!×V·ýãü7œÌáOº?@§ÏèwùÒƒª§½áôIú¡áfòð!ÀmžÀ—XE€XÿÓo¤o²¼à[ŽÎf¹D".¼˜z…3Ø@1i¸\žH‘ÖucÐËÍæ§x7šŸš¯ž%â}¸~à>‹Â( +«ç°²m™ÊØMµa +½ÀÔ­ñÚÏb]ŒÀ]›7w¡ùÞÂb]=Š0 œ{ýó¯¡"  ÷™ð—Á¼)¦@ äÖ†|"ß<)\èÅb’ ˜¶Ë`t.í· H!¶sÖ‡ž™ùû©¢ž›üy 0 +€þµšŽÚ¡¨"ÎˆŽ£ðÀÕW‡F“,ìýÓZ9È %ˆ'€º€¬²è ˜P)íàøÀqÿ"FpaÙŠè—Vúj™À]#ê5Y'(§@³¦::,ñ^¸)¿ýV±©#†(§Í^…dÖ鉴â‰Cø58}#š ÆœÙsá‚[ÖÀTê° +šÕŒ¶`¾øîææìLÅ(›2²‚«{. r.S‘ÓûY©9 õÁ~´§¬nkôÁ¬ Y»}a5ŒÅºn ·°Ì*¯~øðA?¨³:g±8Ždð‹ÅÀ°àÿy3@á™A/ço&°ÿãM)€ÏýÊ/ÿª»èËÉkË*‰@ 8ÀX·Ã¯9 Q<ä²´¿œ²@ʾR1#Lòè>ê²‹Ü +`UðYBy1 ÀP6 E©H2Ë ðêð¹ÑèSRàk÷„ +Œú ƒ}s] + ´X¨nè +Ž „Áe!k‚žÀü+—3p–!rËâ±xgimU%dÇïK㓵³7øc€M«b$5crРËço-¸=ü?;Ò–¢r€Ì©.O‚Æ6Q›: +^úJ2w$ÀñžÑ*Ä+>?ñxÃ\¯8ÿj#Íx –DZ¦HYU\O«Ý–u±†$ÊJ/ä†ÕöÍÊbvãFu+@A5 ÌùÊëþ:;…Š±ì‚˜ÔkÙA¬ð;êÅJ¦ñbègA~b°'F×¼N ì]w +Àrbÿ¯õo¼þËû @Çs±9áÜ`‚]Öà€2å^ € @ÞVvS WmZá±oN»&ðꫯ3Ѓ³¤0\‹»ý1ÐÀÔ'` ƒj¡a€¬Â?@çZÇß!åû·ÐU§@ÿÀ +  p®C“s~£n&úçá*@q,¯ƒuü<¬‹÷-¤ô;&Ç%H÷[D{ ÊŸ5¨ûoà/Ì+ø§9—[E2y Ñ!ˆ#¾.9€L-žÅìL1€Óa-×Ó‚kkÁ4ÁÞX[ĸvÆA$®»`…W³˜{­›ÿ]¥2>MKâÈÈ;v)ïôî¸ÈCù¬,ÌJ¼õµZÏÑëãÇ…jܳH=ºÒí‚j‰/dICëH Û†üKÕcAróÁŽù1føcŸ7ürCô)‚ íõ‹"©>“‘ƒïË—œÓÙt÷”9žXx#Ê>‹_·˜öƒCÃÜ à+€Xí6•'ÿ©xÿwÃçF ¤B·)vÁ63^>Bì¤V€*h´ØaÓ + Úàè6tU®•'²Á2âÛ€DôÎaǤÖÉÖ }ƒdúﱈ×"Y}ܽ Ê^YeZeâ  V‘ c±¥ à0€‡‚êû8’!÷ ‘¾—¾Üjü=àÏ:s `¸Ô°tN#­©mYoTùî ËêÊb¥Š¨Aš»Ì­€ví\ã¹ü,Ê]7ç2J]?½RÖ7Tµš—iû€[b¯à¯L…Ï„¨±oHÄ{UΕ’˜Ë-°ÆlÃbÓ\è±8”V¾¿¥ÿ6ƒ¼è€œ¾¡ØŸö¯ÿü•_þe h€äˆÀ|ÌCÃç.º#Ÿ!Ïô¢ÿˆ\K¡¸ V<éÏÊžyY(1@›l®0õ«%‘ÇÝ +RD; ƒ€ÈhW¸yrñ?„ÿýðÀ”*é±E$”£¾…hcYÀ÷õÉôI¦äP’ + ;X^özL|Õ÷ ø ß]qè +$ÀƒoÒlO.ω;¹pmXô83f¹ùMQ€`GH'D©Ñî®ÂZ6æiÀõ»žª0ë{L„ú\þl#~}üÂ’ÀäҪ؆ÁY¬_šÔ@Qc•çÃÏ5°ØëcÚ]"˜dZö†õš)¬©ÊË\lcåÞ"Ka"ÏT5=°d¦À +â*ëZ”é„õƒz ûʘ÷šòî1ÆUâÛŸlèË‚œkãÿ5@$ÞÔ·oׯÑç?ÿ+¿Â;$€À +@»ÿ!ÁçϹ8ÚõbN¿GL ƒ° +`÷A€÷€ÒDÀ\ÿÁa?¼ñ €xt¸Œ,À«N8 @ÉÕf|3€l´(€0L+€*PÚ0mzu`qQ×w Øfï­Í¢Ã):)ÐOh™è ´ xìµ[y/€€ÀO¢ €D1€öº²´ÌüC­ Þ`Ô:ÙÇ=@ø}ÐmˆcZã*EG!UËg[î³…VòŠ*Ú É—"!÷€Ð/ˆf'gåÿÙÕÙ,œ,HJͲ s¡Æ¥,Q¯Éí»ÍMÔˆ¡ÚPûÔŠØg”UÛ×3lª!jy‡–ŸE‰ÞY`j*òEe¶ä| ü5̰®†¹§Œ½¢¢Ï6^ ±~•ªãH 6 ˆHè‡õ¦½ñ:” ÷tø?_ðÿË¿ìÍ…vÒˆ=m‚…„]^°·ö×dXŒ %@Œr; 7ûR¾Q¶£Ÿ^È3ÄN<à?5õÊçª~^Ž<``øCî€H(VeD‹Å‹ÇÛ `Ā螨VY(€`myš€69Näóx ˆwD+œ€,T°Ž_fÙ¾]Î[à&{Ñ®w¸µÏfŸ®‘c†¾Gð!MYL!ã®Bˆ +`CGÝ€A?žH̯â'‚ÌNÌ­‰=Ðg±‡À¨BNºW[éÐn;¬~R VÖ$sTVyß0ðœýsÃo…Ó¬”Ù‘+¹œ@ODQ± ©|³wí›Ï÷n\ìóÎJ+@m=ÅŒpÏxªJþ³3m\wíÌë½ ª{ —÷~pB?ÞV‰ü°×š §/šÀÀ/ÿÊçµ&€_–ïü3`0ücÉâ?^A<4–eÂ5þèåi +¦W# 8®ù×j»!€ýÑ àŠB»"P ¡ +@\óÿ˜ù¬ªU¨9 €Å’ɳûv€’l+@#ÐjHÁt…Æ_¸}{}rŒ‡Ï-j €)™ŽÄùþè–üµ@ï0J‘kVöñ€?iÁŒ< +êpЛ» Yí1|:Òž{–w}¢ßˆ}}9`r|v=¨æld³Ùdmà•¹ÎfäauM”À kVà·oÇX­Yñ‚ }fd®\y{¬:¼Ú´Pýa˜fãc¢0kÂýz 6fk ˆ7!˼‡XW¿ZÖÜS®ª'14¬®- P,òùÅí5 ˆÿž I@à„ {&ž¥M`0u¿=¿ÓQª€Œ&Ð2ÿ% W +€»²Áž€>êEKžL³Ñ hÚ-'´AC„qwÐÔ?|žÍ"WРl`É €Á Ýð×B`_ «´+¨€§–û(€Àÿ1 pkmi‚ŽÞÎ^_À§/@Á¿öFO@7:ä +Ó%×ǘÿû ß4ðŒ`Ï“`vï¯I8Ш &Pœï€ íp“ᇾFt’Yñç//,,ÌÍ®Ÿ=¸u«x×;6ÍÙA'Âru]«ÌËå⨣²‹XloÌRµ%ÌÀ5TOgï—uY °<äÖÞ}X~jJŽñç{þ¸±Ü†&Ëxø$×cÞËÆ¿kPÜcUiδ'6í¯ûP*ÿî|/ôQ…~ùW~¥‰ÿÈI÷µÐðÿãíoz#Y’4]AfžàD÷a”÷$ˆŠ +Ä7™«©Êb£‘gu7w¼M21~ü–æÜ?ÄÈSµ»wr7µ.TÞÎó¼"jnþÁøÈlŒ˜»™ššš™»©¾"¯ˆª™öeñe…ÿLJÀß25x_ð@~ò‰€æÛX‚ P,¡Æ Ô“ƒtÅO?l›2ÙP + ºúA~œ·ï~~½o8¡Î4¤õÀÞU4€Q¯æšÚb¶zeX¹­f @ìLãf +`àG?È 8ÉAB?Œ¨@ *…ß‚i¸àWë[Ä3j îRÍÿ=^ºý;³¬«÷0€ôÿ+,3~ðS +šSçy‰CÚIv v¾¬Æß'F`Êdñ敟`—Ìñ¬æ«r£(²¶kv^ÁVgH2†}UØT3‡UæJ(=³(Åæ%Ù5«YšÊiZao†ÀJn£ô³AÀ9È…­F¸˜oŒŒƒÎdUæ‹"ôTÀ.Pp/ÚÈw0À?®1€¿çhH€àûñöôÓìGü€k @)\pÄèG7@Æùµ²˜¤€GM€c5³9H¤Q'àÃϯߢV–¤\î]´t`Yà…ˆxA•°ÁÀq±ÊÙoΘíî˜ðÿŒð„8=¿ô,ž¯_ë+ íhÀÑûŽÙK0Pî/¤cÞÕäù‚ W=j9YWM$X˜g¸·ƒ]Ä«ˆ*x¸­Ÿ,ëðìª /D‚€Ž:½S©|¯ â\è)K\³à¼±6Cr¶M ¤¶Äòލ@­j•§ýɪƒ÷Æ^užNºR¿@ß’Õ9‘kM” æîè{púäó?7Ú†ÌñZ@]ÇôÀ—÷fi.ëk‘då(ß"…~1»mÿ7£€‰”@-Àþó:øûŽäÍ@5˜ß7Úýà?ËÄþFâÌ‚hœÅ¹-XƒÃ 4þ4‹,M1ðŸoVƒðÑx“@Y{Ö¢~~ÅÊðÖåÃÞEk€˜n‰@PÓÿ-½äÌ@ï§öØìXá—Ÿß‚®‹‹ëK=ŒkÑW]ºá*±¼¤Á)Â’ýÂÛ™\ʦƒÖìÒ¼Ñ®Ê Üës°Ï,ã+”VÜû ãÉ”ûúy=ð©O ¨nìï@)N5É`²àf2G²(íb%â®&ú-Y›@JÚ ?³Ò@cû$}â5©‚}ž:ÆL§ô!Èé‹  ]óÂ)À.lØÎáë¦`£L%ê03IîZ¹/H‡ îW²æü¯ÿ/¾~ò!‰løGB%ÐÆ_€Rˆ·¿ŠÌÒ`ÚGªD¾sÑÚÀãp}@i£€!Øt ìb`)À…ÍtÞ¢V àãϾ@ÐR“(p98€Ø¹":ˆ‡ïd:ãj€õ¡šè;¤Ìf `†4€q´õ Þžž^øP^UPÌ¿q@‡è[¸Fíiãaç±÷òvüP-ØeøÞÛÿ”±ÀˆEÈ3jÿÙ‘Bª =í@FfpATÁýC ö:Hý>$ryy~ÁOTðù>$@&ÓT°3ÀçÆ|'gs¬¬!˜&«v6Ñ%"1é9|©™Þ·¤ +»t‹Ûë€d­iœ!½_f袳¬^˜³Ø œî€m4³¤Çäl[vëËçüeû™ï« `Çj=½ÿå?7ò[ö%áeü3ïô““.ˆ®‘€W!8¹q;d`ûTôÿàðÝJÎħ‚ÿ®@ãŸ.€¯ +ª‘€H8ÿ ­0“þ Ø»@fq€ žDÈ€ò(v°öD æ«@»køßäö;_ vváÝøž(ãdàvH.¯!æ¢× ~õ”1×ô‹áB&I@yôYͫ‹DÓ¨ êMd$pÄ(‡D8‘SÞ=x?€*àÆp}‰ÀOD<éW|ÇdpCÌQ¦ qVÊ€‹ÆY¤Šö^kè5íj%©Þꢳܽµ’ƒÕçÂæ”è¬ +˜šgeáØîØÀã&Œçëù4S—I.²q¼H6|›Ø&J ^Ò €OH `“ü½1ú# 'ÂÛýŸ=¹¶ÿ:¯ñsÀx$ÒhútQ[­д{Ã@¼÷.Xú¿T0òq’Œ°øH¹0Ž•¨JKÈæ ¶.XŽ °“¸£ÅÊþ tw0€uü_âf ÞžÈ|5;é;Ø0\ì¿©q +¬> zóÀ× €GÚøîÓÕç¸ÞýÀ*,ž|ا{ä=Ȱ c°O…aXááîæÊǨü q?¸v¢ŽNþ’§ÀêZäŠ@ï´©úŒ(]A˜t–óŒépôXö¬Ô‚µ>zÄý‡½ŸöSrÞæ«‰òžVp$ýuŠÊɼ2¾ÆÖ¤»¶Ç0ýñÆ7YÏŠ…:¹S?¬K4@C~’ÿ…O¿’Õ8¤z6Àß ÿÒ¢ßÙ«Ñí7l~y5‘!ÀÈó@ô€oÀºäp<‘ãÞfœ ¹lÞ ÿ)àñÖ@V” Àq éç+{2€PhüeºÊ6ù.@1ªâðÍ¢6ð¿BoòrP +肆ú;.Àí#h­N|«5Çœ›ÖÞKõ©w)ºÑ3êô¦žOòj`æ1}7 €?a@ÄÃ×@œ¢ð&¾KŒ48·d•_©ÌÖ@× e-¥Z¥´ò¨É™-U|íðÛâQêHÑîÒÊ‚Ù|Ÿ>X) +ÕWù%b Î?ÏȰ{¥s]dêõgd*T+ëòÌ©qv€9Ðÿï Ýè‡üÇÿü÷ë +àÿñ÷3ÿž^a·Ç”Q@>ÿãÇ|ÍAÞ¼þQ è2kØG>ÈÈ@C°³û°,ëPr-0câ] K°x1÷kà Q?Ìzz pRƒ¬8@™ïŒ„Ñú3/XfqÐȃrP­©ŒRXbéóî ŸžÍ¦ld¦~°À&þ·@Bó¾Ð׃{? Šý€„ªœe^ ,n+pÇ^`ר€á;€Ü‚OöéExô~Ô…{‡x„Ïö&äÍ hï+䈰þ¥Šë úñì,üƒ×W×—ç§Ç'wþÖï“ÇGÑ$h¶df”]öw@®’ì:·èÈjОKJµ1ŒMRÇh½±’Øzóê['Z=¹}öA ØZ†²°ÎÖVje¬,÷ +½ü|úš¸CJUáÙ1Ÿ‘m l0€ÿgbc,@1€ÙH@§ 7;"ˆ ô³âý‹ùñ þ­¨Ï—´ŽëÍ@åHÛsË/èdf ÀTn&·Bü&WJÀWL @à{Ê4ˆæ@:€FxEbEæ²wúç@ Å²ßÐæIB}É +ø!ƒ±êY©{Àj°†ìÆ,pÍ!øàQoâKÈOËãGùT@N-P¨¢ˆÔ ¬9n/>@p/t['xGQ†ÿ%¦ÐßG/ òU5ä9€Ì‹î{ @‡B&qBàÙß äÉUá3×Wç§‹ƒ“%šå{5€½ÈsÐlætJµam8®Ké¡* I—Ã`0‡¿euèH{“XxW^íȶզd³*ìùŒÓDiˆ0Ð-Àû[XŸI!´0»­d5÷W:s]6r-Ý’üº4䇨¨ê+é^€8;Æ”ú•h€ýº0–¿Cÿ&E}R¯} Èzûì‚jÅÿ£ ã…e ¸Bìм‹þ¡šüT1Ño1-ú›· ‹ï~x›÷"ƒ ‘„DØôiÿL‚·ô€àÕ-¿¾ºL 0\ÑîÃòƒofØè+í§*"0Jnm^“†ÅJðåŸ>«â Tüëf} Ž+oG„«´Ž ÏgC¡’%¤›…ýs‚°L°ï=À%PpŒ(’¦ÿ¬ßÝãè¼Dý‚ˆþá?8ðôäàä¶#ˆß%‚Ä Ð¬Iu§#ꤋª`%Y«mC?ŒB,·XƪxK +ÍþÎ˲„I™Ø ¥- ºÆÙ°çC²ÏTdH—[‹ +¬œs–›§° ‡ +†+'ve*J^ÿ´q¾^V)W6~YA~ÉñÖHÀ¯Èsd$Ö‘_ëÓ¶‘‰D»dS—Ïü[¤!?—1€ˆ ÀünÀ•4xe㿼ó1úeøCúû£C_ç½ ‘‰h´×$”Ÿ9ÀÛÜœÌ,ƒÿV¸ Þ Ø €íŽp0Áœ”ñÏ7 `Þ €¼ÉÆ7(€ói±ÌÎÏ+€M°Þ`¾8Ë–ÊÃR'åsÏ/k¿Ú¥ΫԖÇ3 laŒKaLð~ß t—0$d€ذ/À†w(0ƒp7âïg¿¤®/ûã2P·œÊ9C(ïŽlµCÐqꚥ§ÿ~àëPÏ*€…o'ú\ +åÛ&E”ˆVÜ»mê +ƒSBqs–•=íQû¬`ZbÖ*gëñÛ‡¬”+c§Õ1Kð­ýJ×L<Á|ŽÙ*„­Ÿ^€¹ù¯Ï$3ˆÌ®=¡¼•ÂXä3m‰–M럕}IÇ +푸ÿ™•H/Àn (ì#W±Ú-a™eÉbÎ +!áç•ûw]Š€u¬º×:½m øO/j!è¶ìÇ·Ï1´ÄŒ$·æ{g3×çgg§§¦ùÙiV\惰~Ýpn1•‚+)Ú%É8õ[¥Ñ ”ÚY÷\Œ×}º=>Xt? 1¸Ø`Ðç,F@ª.e¿¸÷wb/³_ä^¸eXPÐî1xžÁè @/ȶd8€ž¿‡A·˜ã›¤ ðäQÞÀÿ^ì/8·Çü>4Â(³¹5…O³¼ãã«U$«ò°6C’]§™«‹¸ûXýkJKöneœ.RY%lè¢ëò·óOk€ß’ɨ« ñÎÍZþ²¬tÖªØ\ÈèM[ë(ë2é Oa~%*~’Ä¢ܺ°EÓÖð/`à{6}æ1€¿†˜ez%Õ  ß èÀ¾–ËŸçu1@(Àûf¸Ñ'(‡«I|Øx$ÐF 2tÀ^€:ä$ˆO¢×“:QNO•Ë|³ˆSÉñq'È©dTAôÃl +07äñó ätAàmÔ€8·²ÿr €ìݧ;y;(ä> ˆkÜ«[$ü¥ zÖ òRá€@Ÿ9§{ô±à75ú¯" +ˆ3t¶à'.sšï”@¦€•$³BÑ&–"µ5÷ ¦§¼:L+\¯åX.¹ãÛۆ鷲è˜43§Gc9’­AøÎ3ò×a·Z*x–Öd(äšÎа¯oo$»e×¶éœ;å—]>€X²º Ùÿåý_v÷„ 7ò#W û1e6"(€ý@[y÷·^ û†€P;(¾,ôkßÑP€Q~'ål6PLbÈ@?²p—# ~¼8>vmQr|’yÒ ¶³™ÉÙîš„¤{gKšŒ"X¸&Àô!.@‚v(Ô}@°t€ +Á˜âU¼‚˜l­öÃÃ~À€ Üuã5é‹*€';áj‡Äý´÷*‘ÇtIØ‚ –ñ£gêÝ( °ÏÙí +¹Â›É»oŸþ‚Û (™Ç—kŽÅ-£îl&µî¼ —°ä£÷Ofl&•ovr„âž ëfÖš8I¥ÒM-D WbvÓWÀì£È“håSànÀ 8goÞ¼/ ¯Ñß]  6¢¤è3‰£?ø»4:/¡`(€äëŸBRzr§•S‡3(IëMär;…ú™à¶?Ý.öN)k/d‚’ocpMðÕŵÁ_› Š–Î€–^˜yaœ³%†šUŸê3A{C +±ðHŸ8–=s´ .@(€ãaþ +;?ýáèF\O—C}ãäˆ)€Ë|es ºÌKþ´y`ÎÅf×ý$få.{‡§1³Tδó” híšB½ç@>2”AÒΦ=S:°›cm&ñÀëç§ÌW*¡ô@pßâŠÙµcÊÔâë²yê¹üò'ksimßúQ›.€ €Oé…ÿ‚˜ß ø`¹î@ ¬>Î òÍÐÁ´òîï¼õ^€}žèXM ÀàÿQ,À±4ÿ|Þ; õH« (˜ß +À†zb ó=Zù=Þ„½q·o®ôÃës{ï2ðɽAw)%ŸDp2qac°eË‘ežì—<ŠTÖì»5œ>úòøåâØ›ìt¸öÔ ô)D8áWü†ø1ÿ%q ÔÀ{ȹ®¼]Q÷ºù¨¡ÏzÈ‚ØG?OðvÂè RFýùóœÜ?žóç׸¡ŠÑq/y7Å¿uâçВ·íNm¬cl' ¶ÜaZ™„¬Îç«©2³“él­¼–Øñv÷Ç +%F¡qºä¦Poì}Ö,zó8³«;‘?dy†é ÒOÑf7ø«LåT¹ñ2O?#õc6>4Z_Ú µ’~ßOëøù«qYèüç¿¿¼½¹>•ÔB”5t;Àeì¾|=øƒþX)=€DäwÜåǦDSÀú)"s×öç)ÁŠ +€¯* zœ8˜÷ ¢Þ~\c.Šl½$²gcn‡¾Bƒ{•|n½ñ‚9ZÆ®¶€•åç¸Ðíxæ–ÀJqPôÀ…¾Ál»ÕRŸ=†_ +oÊ£ àÕá±/NP :(ÿh…‹+‡Ôhk0Èw!àó$";§ò×׿ÐQÀÔ‡ë»Ñß!m‚« 6x×ßå5¿Þ!Îá ꬼ +´8Äà,¹^ß#scÜþyAŠymªÕ¶´+Ôi^{S„-fL>:R&=X °Ç¦ùnJÚG®PÚCÕ9g’ ð­£4'p¾Q6ÑÇÆRX[‰ .ÈV¢“ âÂ9¢0O ¥ò©ÂsY;ôùÒöOZöNM¸‡æ@Þ½ßHîýÄÈQíz|²a¶Þ•*$âô68ÛfWÿ5ÝwyÇóV`r[„¼”¢`n +já½¥˜~„è#`ý°îBwhù‡0cî[½Å|0@ÁßýH,a’ÊŽÌ€·ãìþâô ¬ýÍE‚_'Z¢ÐOŸî +°)ßÉxņÛ¹‚Q´×—×wQ ¨KlêKÖº˜»xáXàÜ °Ì dLq!лŠuÂfü /¸×7(Ü‹qÒB:ào%³ÎïÿŸd~ÙLA¬!ášc~=JÈÌ­ÿwL´°·18:êçüôdqP +ÀÿómSËÀÌ +Í)KNá*HÂÊØ:Ò%ÆÔ +`¹¤êW ÀÚW1˜VØ$¬ò¹@e482¦PNí†xçŸCÁ¯ ¿Èj„Á¢o ,<¯ øÿ»)ê_Vûè7)üÇ€¼ýç Î)àÊñï#A9N3€• +( ²·p‘´×>šËgs‚‹\¿õ²=JX¬ÆÑìô°h¯ ÛÝؽº:_\xCޏþš<<^/öP±ð« :ΰc Xw\_^]œK`Š"— Äè w\׬Er¨¸¦ÈâVb’lôiu' EÏÜaõ—è)ˆ$Ä!þÚø—üzo‘·öþVyšT–420¦4zkÑx›ƒ.Ê!†ºù%Çö±\¹euÅÍS‘áå+IekÎnì˜ã•™ös[”‘åwJám’„M +_ðN^e×ÇÕNgú~™Ÿz.ÚÀÄhÕ7k €¡ÒG߯›¾ mïkøOÑ ÅÞýM9¾Á¶žç"ø›lF‚~fmÑ!À¶ý­ XT`ì@©‡€L1€l/©HÕ°¦À1>ÀÓãòôàäL|‡Ã”Ön'Yàn Ýè`š$s4ƒ0g:Ö±9¨YöÓÅÙ­·ÍºÍz_:Ó +`aðбˆWÞQ€ æX…@kÄ.z£s¨Rú¬\3åæ²¥,åïì]¸æddáí;ß^ß-½± X¯ÂêÒì뀟 øH‡1;¸™sgX$g§ ì]ß×ë¾G~XÙgàÒ‘¿ÂhÆ +j‘Õ{ÉØ{vH[ú.7Ž’DÌ×´5ëÍß#Óé§_“°Õ öAz[¶fmå´aë.€å6À®@(@ø{ÀßÞ@xÀ< `åxdŠí)ï1úê‡(hÉG‡ùQôw€Ÿ™ ÿßÀýÏ}C©Ÿ¢d¨_¤€£‡äµá¿që\Àð??âÑßõˆ¼Ük ¢\`¯Åg•At€$׈8e€?šF­Y¾¹¾<Ë;ôÌGÊgb-Ìåñ‰½.QGÇv +>n÷;ÀþQ|zv%jE,²‹s_# ØäI¢È-a•Þý›Úà£Ü(M¨b.<“Üåâܱ]œ êáì\ šÂy)€«»Òß,¯_ÿðZà(¡€Žo :ìk`irêe)¤eG%J)–ÉpïõúÖ˜þôË/& + ÿü§_þéø—¹L¿üÉwûÿóŸþùóŸþ‰Ö|Ù?þùoHýòKŽìéú÷Og­EŽLyÂ^~¶$P_A»ÄUŸo¯õjoN±¿J|Ú„–,  zhr0øÐþàpÀâÃöDz€«oß曽å£Dôþ –ß½û›ÿfí@Úž>ÛŸè_1‡þºñƒN‚¡ƒ”È—ìuøƒ~I€‰¹Ä€õéÎÛruĆ6%ÉUÒÖcúÒ¥ö9N€Ú@- Ê7¶ä`ìÇ‹ã%{|ÈMxR'œ û†pÑ!à±ä>Œ;ŽyÀ ©Xœ@ä à Áõï­ËÔ *‰eÕsânãçD}Ùe·Ï ¬æO=@M²oe›a|ñÖ¡Èj‰†Ç’ £€yÐÁÞâZ²Ó¿úÄûF÷÷_7"Àãg ¶E ÍMs y)³“bkï4ÊÕêìH]ì~þgqøù—LŽÕOg½ Þ…O·dé"É.µ*\[<ìçÏÿôùŸ?ÿòË y@mž•ß”müÔ3Kw€[ò²=óo‘¨ŽÏãìõ;üXŸ :µ7_bÒÊ5ðÍ1€Ë ÐÞ€wƼ§9øïxûÖÑ<ÊŒõîÝßåÍaø V$š-gàwz?·øéw£ J#\1€ +mb²Eð;{÷vÏ–ß’1´ÐóÛ…±8#q(€ÀI'àåà]0¢W + ~’zòMÜÙ Ñ®`ýxq²Ô HþKò™*z¼‰¸¸ôA8îjë xz~qrº”dx ÏY~I"3êT=d¦ŠIß$ + +e@1·vA™K¹.è²Y}rW +Jˆ50|H£Ã@y+ÀÞb éñÿ~‹Xõh€×?ü (Îx×$ê |…eÊe½r3«'í¡­Ž½ÀA¡ðn eéWëC’ãÌ]L+óbSÕ¢d¬D•|VÙ\ üÏ@=°Þè­ÅÈ«™?/Z)ÍvìLj&¶’'|Û¡¾xˆ @³ÿËbW}¹f1ù™f + qX˜O$ :€]6/ø Íì„à€|5@1t€¡>ñî6qž¡€ƒTPè“Ë| üs7€zZª 1ŒêÊø*m?É)¸g¬/ðÊ5VÍÞøð¬Ã“ÛÏî#̶¤Š¯&Îû°DŸ^Ô@\€×=‘šåû;ƒqÞ íÇÓ¶ç02§tBôÿ“ß(õ7&+?gÿ@_·âáé-dQŸ‘ÓùYŽ´2ËŸ>Óê\V9Ö䟌3tz’Ú$rq²0ìm%«f8 êkQY)eå{o7BmQ’55€]: bã¨é€¸°À¸Òš À¦od}S Ÿ|†™,ðþï‚êÆ½¶[ }ǰ¿ÿþï´þê=ûpCüLy™Ø÷Y ‡ð;€ÁK9h€2ƒ4ö£Þ“;G?+’ƒê œ3€qÕÆ]yâ\&5¥–×멨¸¤I¹Ï½|t”®=ô\­Ëó“£Óe°=öù’–·‹ý_ÀTU'bÛÚ +Ï»Á—²§lž#®~×Îó4ù9P/QX{¡?½3¨tÕýƒÿ’Ÿ¤MPÈ¥!xÜ¢÷Ž‚Ò¡µød62ÇŸî/ËúŠPßA¾Ï‹È„?ø.):]ÒÔç½\yeÂaÌê32Öd;¿ +OùóM³µÚ2ß>%6dû +0[íOfQŸPßÿû§Ï÷Ø•åmV" µÁO)Ÿ£úÙΧ ¾²‡H a«4 àn‹ üÛBï‰üåãCÿ þ{½ÿØÿ70€}% +àïj Ð`š~¸~ç@~Ç +òÕ(ئ°(À&¨n@ö+`Ö À9¤ø + +€íaòvÃàKëÎ]yÄ @‹–ÍsíêòQ~?kŽ `6lÁ¸ÙµX9èRÔæ5©c¬%ƒâÑõ¸¸¼ÊÀc)Õ‹J±vÌÐ,K讈e/NêÚúüèœøã'ú}uq£ó÷ÔFól$õ¶/NÆ) ¢Êü;(žj0!üš+Ÿ x|kX“½žŸ ÿ@þ‡à^= ``ðMÁŒ¢:TˆªPYˆ£¥,W‰™Ì·LŸÊ©ù”S2KÏ7N‰IV9ÖnâËÁwÉç§?WùÛ§¬?= ¸º6) ³"Z+µ‚y/£Yúùà^ã_J «ûé˜,üæ¤Å/õP‰ãBÐ +MóÕ]2•šŠLó)§džžmÜ(¥¬Ö“Zùîß"ìâÿ0€»všh€Sií­-ûP3ÐÚ È’ +¶ŠÚ²–𬉠oLi­¾Ü @mÓîþÒqÊÿ†¹ês_Ðïàº` @ЈýûLŽóùøÓïzÿú_w ¡ Œî³”&X<°ç[w¶ àâ-È~x“Û‡Š ©÷‚ ø¯m[»H±hàƒ ÄyéØVêëv„(£ ¸–Òq®«clnp|…F\öÍÅžOóJ¶Æç + Á¾(€`Š `æà—ùKJØ0¢¡š¤S`“¸ÌžŸ|/ wRSk ÀAk À»¾Êý¼‡žD øë L½ù%&ç_Í?Ð'IâŸ>§O/¸™dZ­MŸu©Œyö¼à”®ÕÕr–÷<Þ«Ìü³¹ÎGÑhSU»@°,¦SˆæÐV>øoÚ_ @ Qö=û V u§Óak UÊDÓµn£â|½à¯€x+@™ý•XcýLÀwXÿz'Àp@7ú@I/Áßê³;z‡O”„ò!ø àwQu—@†¢Ff @©@ßÔ„ËP‹ ÙVCŒvƒ³»ëÅÁ!ªî —Æ‘°ºƒ9¥ß¼yÚ?• ¢¸”BÛÿ¿tÜ,ýÕ²Þïë8¼uÉ~Ó„> +Ð.ÀŒp~Gjª€çÕŽ3+P*5³ÜÊ9hŤ‚œÅ]R @`#±¹(Cä´w4^ÛE@\€£ÓÛ/0ßv?Ø/€ï+ÀÐÆ÷·>Ó·fíhþBš»d*XE¦ù”S2OGæg‡L¶öý¢x¢e¨]¹Ì·2Ö à— +¬mØz×åHævá*6•«jž c‹X™Ó”Ö3ö,°µE€€¿"`7@¡à³H ó×ûà¿ Ó¾ÐÚuÃû¥À´Q„¿vÝ྅$ ¿ÿYüâ~ö‘`ºÿÀ›¥ÃÜ£¦!ññ· ,0:"ó‚ðÇøs§÷½½ƒƒÃ#ÿ0Ù§ýŸ£edàCmFˆ3MqÚþÝʼnwKŸä)Ac³ÔÏ[›ÎΪJ'Ys™1ªèÖ—IV @?\€T5 Œüèççç’11W’°“m³þ“ €?‰*,àI¿‹Ô…< Ì¼ÖÔ +?ä…q*a? *âo€N²» ·9w~fRkó¼y©)=r2SFÆ ÿS¢6T‰¯~Xu/õí¯4&΂Õ¶Z?áÉZq•E諼Úìcq'ÃXm®ÆÉêµÞ‡x&tMm³à»bP€6ûQ=Í@?0=H;®Ey|æúõ±Ú,ÊH™9ðf wÎ?e¹ígÆ"ïß½ŽÈñ"cŒìùÜ®ž#¦ØE^îìL²¸Ô ¢A3:6©øK¬%y{}ÜE•ýƒâà ÇÛ!ÔfÔGO›1€v¨4jES¬ €@î<À®6¥(*[lk J3m0·¥h%i•26M1ۓ냨u† 0À—bvúcñ ð¤£JdþúP>,¾HØ[FZ¥0ïó߀ԔØ-SÑÈ¿–5É<=“Rs °Úòܾ¹`ž@Ø]ƒÝÇÛë8<8:tq$7(Žš0™kÖOO‡‡âýèèˆ=J‰ôëÙã‹ø¾Ž®¬ÈÜØè¨Š±^¶Ÿ+3ž”%HiJÐ(QÍÒL”U À³–à÷|4Þ'Àãd½¿ÉzÝ7Ú•(Ç¿Eàû=žFÕnr¶^Û¶?3©µyÞ¼Ô”žÆ–•Â|¬Íe*?}¦ÌyB ŒQõyÔòÅ•¯|\€ *˜Ý ‘.:èsÎo¾‹9þɱsý=øÇÁ¨-CBé2m2 •{m2€^ß;+pÄ3üGPcXn2žW1€À[€ ø>6¬M¿´BJXÀÏ¿oðñw¿ûÝ`1í.âl2€o^ÿÆ#Íòë}ùSùk(8A¹8ñ‚@´ëBÞá¡[vnÅÀ/t +ràÕ§kQ€ 0ïPlÇúÊør @0Å,V €²S À&Å|Õ ÀXëX^]ÉvÅÊê¯A>ˆ/2PèO? ÷b]¸Ï;$}_Ý€ÐÀÓ„ª)±SܺŠNó)‡åÄ Ö¥ ÷´‰_%y»vYÉ´u³XÁš*yÀó¶JÝk¨ãfi䛺Ë*ɹW’oéÕ@ò+ËšÒŒW'€ìGl«)mb( +¤¢ÿª@“7 î † øtPZC+P ˆÅ3hU0 üKE˜èà ¤l^ V½ìþÓPÆãç@¸û½½ü,)Hwcò†ÀŒÏü½#€À„ǘìrêO‡&$“d¬| NÒ/j¡(ûy½¦ÉröøR/À72RÛ1B1€$Ø)16 z·2[s.À—ÀÀ¹“¾ÿ÷Á~-íˆx_€ãÕꃉ ÌBÿ«Ô$Ózm›>«åJjuž9Ïa¾Ú”•ÌÚ÷¸sY]IÊ÷gZ'<†è¶zlà´Ä‹n­¾EuA߀AÖøÆ)¨ßrî"µ— +Eê°wVû(¤¤B3É(û=÷üuã2ðÇÿÂÿkß$@„ÀÊ^ƒx¾±ïY“rûßâ ¼MÇ^@«i/ù`ðwy50ÃïP_q´Ä*A?ÿRïÞÌÆ %ðîížÿ¤Å—ø ßÓƒ½}Úîô8;¯ €˜6Ñ‹àÝi3OÜ*ÉŠªÎó²‘-yŽ<× €1þëbÚœµýPl<•ˆL + §ÝÑ °˜Hã¼ù–H€¯ U‚#ð\[åÌéIÁÉÕÊꕲ*8Š´½Ÿræó/È0ÿÑß°Ï´q$²¬ƒàsíòÊæâhEµ&>¥t²é¬Ë4–C:aFm i À-Ö$2h‚5¼šÒ&¾ÌlmQöü5ã¾Epìp €   À{Mx =ò“€ââEbþ3·d— øÙÔäĺ×ý<€ú“g_Y“j(‰˜+€ˆ¾`Úƒía±õÿûIàYÍ+„š2øö¾XoVNN€·ÏS¼ð ˆŠe]¬®™l0€í^€ `w/©í€: €KÀf ŠÔä8àë½>ícBx–Ά¨yr“ ì‹ÿÏîl©è €Ær&¬—®mÓ§rÖe¾qÚi>¯Òéi]Ðf>ÉjÓJj¯úL«•RøoDrAE3¯6™l›yC… °ÆNbS»ænE¬(ŽÆ•Ïñ€ÿoS¢‹!–¨)ÕÛ +àÛzþòq—Â=·Áü'=`ãØ«¡Àûþa[1€`Ý”Œ@נ€d¾‹Ñ6ЂÙÿé÷¿×ømÝ d¿bJ08á\ü«pTÌ£ `¯·Â_òxWçG8Qt§gg¾\ž]úfÖD3 È.ÎE”ó” +`+èóôíZª,NÓ\<Û ðW°Ñu í¯€íˆ¤Y6—5 @)€ÁÖcïpð‚q¡O¿ÖøŽ¹ë5·ÌëôÎI@Iâ@f†ž’™KI²Å$µ¹ÊMŸIæ«•ØØ:É<½[¶÷_V‰^"E:€×*ÀkžzRbãÝN9æ2 ,ÕGŠE)­`+ëÁÉ–m}L$•áLÖ¶M3â¦Â–E’…Ï’$ÛPõTq,+@ã_ä¾ë«‹ð_fQ$<ƒÿ+à>¼ÿzOˆßãt,‚z  + Ÿ?@VÑ%ñÿU&Ý áw_eô(ì@aìüx"@r‹`ž °Á¢ö‘닼üôòOµäþÑ‹sÕú¡ÔøÎ›AófàsH +€T¶±¦ñÉéL<8G“®Äwû(¦ñf2)€çzvŽÒ3 Ê§%På»be (a󡙃dÏ,"­ë¹èFÄÿqž;þÄw¡ý‡î뮀 4ãÕkÜý™Ý?.諺ëhú¬d¬O›FFåmHåLùSÙin¢Væ2³û«Í.Ó)0IíŸí£Ð*1“¿ . ‹Xjh² äb=ó‚%K3þ™«øfߪ¯•¸Q¨ø'Éy"¤Ù‘& öiUV$Ög„–DE2ßYÉ{/|F¾&ø¿º8;¥™ž£—X~^åhóΫ)oI†˜BøºÍÀ¿Oü˜îÄr¯1€T¦H(@!å3‹T©ôÌR&›xÿîíëh“M™+€ë¨>ÔÀÀ‰/öò—äØB[ƒsÊö>ì‹ J\“{͆k_1î+t£ÎØ‚EïÂsù"ØÝ °è+ š– apkrÝ`1ÐZ ­F%0 ò´åÀ@ŠØ çÿAyµnþèÎ;Uô?y&öóp@Ÿ šà?éÿàçø?ôÈ¿]"oWvÉD:|W«•.«“…îô¦¬ï6K*®®)€–*¶ÚµR½‚ô>*€`´.¾!¬ãâz66ÚSÒl… EZ,;ŸÊ,B¡I_FpØè¦OTWK=$–ïMj¥µúˆW;$}ܬÍý†£PÁÊJVMPšìËsŸ yvrv÷°¼¬þ°ãV¢‚o·äuIЯ¦˜D µÆúãïƒК‘|¦\ø—Ióï~ˆv{T@f|~ïÙäAØÄ`A"ådpº +fb @зpµË[÷XHš)È•3.â³rMeµfl•/ÝÜ\Â’§¦8M_¢  ž«q TFjxÈ\üµ½´ãܺаXõT«aÆÑŠL1€-àÓ½½ÂÄØeí ó9@O*ŽÁÐ ÑøyåoÇý‹ øp¤€3húle¯¯(½«H’³õ±Â|þù‚<³5 ží<Û,ïz +3 ¦üB¿B~C}€¼Ÿy »¯çX­~£¼¹Mý[Í%‚u]˲&‡G‡|•SÍJjYï?!@TC‘U,ÙéùÝÝEwv‹~ÃaÁÿ3 ˆ‡¼öÁ>É(€ +Ö@Àb¿tç.>)U@I0i ÒæŸÔÏ̦€A@õÈŒ ÿ0€ál耽€q +`y}ƒÀÝñ‚×Àvy•nÜÁéÓ²—€Þç·æp/Ì£%Ý~UA€—(€ Ká¼Ï… ¬P­6†šæ.ÇØî×ûJ -ÖcnÄÀùˆX`  ìè˜b­¿“ àV= ¨dð^Ú`¤zÝÀ|}üJvi]žÉn©­SIOÙ#cZ¬É”·*¶aëkÃÈ\mœv‰ZŽ5d* ´êV‚ÒgN6‹¦ú̳Þk)Aú³ÊêL©–‰˜×òðhôé›åàÂçϧùÓ¾á·×†±d³(€³ã³›ëãƒCÜÿêóÕ—eýåÄ[BïX~"_…@zrú‘@ïÓ“¯Ýb +ô aÁÿÀ•dè¿ÒøÏóÁ÷óï›Ä´ç(S `z€!€7FQ.u¬ÞÙkc2Bâãø®`y:7&Tg—ïæéüqX‚3“ WrД4‹Xç"ª#ðŸŽOxÁ~ÞÇ»KÒ +Z6€H_c²ñoí %lÇÂVãvÅÒvÐ#ü³0€• Ð#þÖªøþãÞlf ûÉä¯P?}™ö(ãòcý›»¯€SËÏ´\å¬RµÒ‹N•¬­ÔZ©Ï.ٛ˕ëYî3ÇYÛ@ DGXÓ×ßÈêD™|×Ú¨ ½Y5n-)Í×oc ’y|¹w0›¾&Ð]øÓ¼Àá¯>™@;Æî³ó_½byÝ­ @?b—hýiù˜²…ØHðÝ?ƒü `‹¼ bE+þvRí¹ÒöŸ·ÛÏ€áØÔD^*º&(€×3`ÎLÌ_š ‰OÀFœœIrT¢ø@•€$Aìñ®úýYÌu©¢&®|+@Àe=Ò;þئ̣s ØÙ ðµq…l̓ÇÜ`|’›í*€y/À®{š” (òo ø_c½Èÿø2—õ=0<…ׯ(ð·Ó±Þ¢]~únéWÇ UŸJÏ7Íeäö’ÅZ¹ie-wH•îMÓÊôYT†>Õ€’`t€J uCã›…®¿óäw6’TêϪ +Ò3«•ÇTUVäàà徟}ððÂßPÿ9:9Ç“==vX»ø÷¦8 èWta[@ý3 0”À¾·ª¼PCüñ§?gÀ Ô'ðŸãç´€ÛÛ4G‘@)¤ÊpÔ@Ò `œ`0U ¤u˺gúÚP D‹kÐúàaïwô$¾ª@P¾p×òù¹^öƒ+É|=[o[RË%“ÐíØÕ ðM1©ý_|/³Ès1ßÀ¯ô]zʺ;[Á_c¯Ú·û?ø_-›¨Ƴ=3ŸÀSŸ­ >•9æ«Ù|Ñ©’ùJmýŠó-Ê´¾cÛd£—rÄ"#óüBz+9¾(×/HžÊ€ìþ†$×’uæ¢„Š²’ìP+ßÝþñ·Ñê"¿%^þ$û/ÿàªÏNöQ!¢¿Üÿ`w9®n³þu÷¾4ŠàÇ _o@  ð£|3 A1ü÷ï²k/R¦_œ²œ\€aþ?~üƒÞ@3IDi B]}€È‡fh†tÀÐ{uÉ"*ÔûûåõùâðØ þ Îïn|O†8÷A¢Ý^9L¸ªêÃ^TÀñâW^Ä+œ£îªØºuÚ`Ž¥”ú»bê€)àÅT$£lWh5þÆ#˜ºåD€ú„¾ð€îˆ­Ûññ­¼úô:âLø+…9LV²;WÙÞÒ9Ó|³>eî”ÞZ‹±Ë$ó5Ó+ï©Ò]dZ©õÎ]“»pϧÂûÌÝT)êÐ¥ Ïæ(€ÊøOÍ©ªwÃöá…qÒaÙÈŸIaz.ÞªR_˜êNÁ^äžV½€rÿËÿ·ÓwÈ”îí“£[2+²VÙy¤¶÷ãQáô3¿ßjAU0¤Ò:lm2üËá + žÍú$2ö–Ü©Ö7¦”€ø—ø/2ϬäåË/^¨rÛž®Ã+Ãýwôk™ÿîkÒ¿.†þ~w4˜À48ÏõÆ1óe¼M3kð<ˆêø)Äïà ì*ü-kþĆx@ŸʆΉxV¿ó79 +òáÞ÷󜜞åý|â„K臗käE„ƒ)–hƒ<ðÇŠ`¨- y÷w+€;Ÿ¬¥½-Ôïè`× VÌ CPÉ s´6o «m•<}‹ù >ÉÍÓ§`» w2%€°?ÏVE¶ÿá”ùc䳬‚  ¶/‡éÏ¥݀&…µXwÑt Ï +ðMð­Ef?üíß‹ŒÈ„‘5Ù›fE’\Û…•ú|Ef%få]Vº»¾eé^­ÔÚz‹©iÍ#ŦGxdµ‚„__ “€/{߈WC”–PÔùÑ!ü¡…··×·ÿ2E¦@¿%7­µÐÚ¼Ø?xùª ¿)êôzà…×(ÖÞÞ+ñï;«{ü/ŸôfÛøvH9þ¢>j :`´ùýøÓok,ðûlS…aŒJMŒ‘N‡€æb(  î‚GP˜|ÀºH/À»·yRÈl @ýŒuÀU|xPè€ñÆÇö{}½ÐËdž½àFWù$œò^ (€… + +Ü\ +¹ƒfz]7!X[‚t³¯YãÃ&ó’Íi”ˆ:*ðöùÉõÀÊ7139ÌpERvðÿ‡Ÿ~.€­› Ê`YQ¿yÛ¥r¾Ì”ùcÁÁ%s]€£S_ ” à ˆ?J@Å›éÞJùFø\õ V1¶××¾BÇ›×¾¹'ÝíëÀb»ŸafìdâÑÂÁ®2bHPZ…;™ìR1€ltË&(ò`&ŸŽ˜£Fh°âxýCA5üî_újÿÕAVK1¸øašÆ*PÓgȬëäî P›¦½œ‡Ôje%[yÛ…æ9AjÁö«Rû1יּVr Ò)µB:q€èÀ=‡Hl—í~進ÿ*€ê ­ÙbŒÀþøÇëš|‡Û«è«SÚ">ý0üÑ_={ág|qôO}â ZÁ2‡­^œªD¢2þ¯¼ÿ²C;db|ä‡íÐ&Æ{tãOH4?~aW¼ÿ$­´À[qh©û~§Á†<´ÿ>}Ø¢2€fóƒHÖò?iô†þ¹Ð`Øü#öü‘Ëm÷8©TAQ¨€Š ÇPŸÈ×*ЍŠu"¾í¼˜v•oñm 81óZp(DÍK6È$­À.VGŽÑ‹ª¥@ŽäöMàThÊìŒ¸Ú €8#йö=²ZB2§^_GÈ :•è­ó¬–Uªd*2“íµUΪüz©™L¶°Ï–)ôüS9%ëc™]›óó1XÓŠÿ¹Ô¿VÓ¿“ÅÐZÿòÊá·ædw¬H@¤x@ĬW—g´Elyõ Hèót*{bGáÜÌäðËC­ð¢$ÃÒõIzþ®õi²³V1“×õ<€Ìܼx¯ozçSÿßùf P0.MºÀ©÷~N"56ÛMnö}3KŽàc2’ˆòxï?n½XÀG–Ñÿ*—ïçA@‡Õ=>^/öö'ç¾"ã Í×;plL®pFÈÊŠ¸æ¶ª0uynðÅÞ! +u±%âõ¹@.#¨ür/˜™2€¨j[¨ÂÂÜBÖT@EdS$7G1€‹<a½#ðG „DlÈŽ¬u "¾Oæøš>µZ³ZmY[QȘJÙ*´–kÙÐÛ»uóÞ¶^¤Ö>d@Õ+¤ÑÃ÷5LO‚!P¸n¿®R3€¶Æ±XŽÌḚã(€-`ÍM ÙqȰ´sQkõª † PÇèE•òßÊJI´ ðÿY;@ön à‡pÖŠ|¯‰¬#k·¬pX²½ÏsGé|áYIæ®”Ì÷"íg>ªYõd¶’ùªJ¥XèçÛ˜%Q”ŸŒúdAvJLøGlq´5lQÀi¢··v0äèOJ®&ªùvyuI[ ÷ôA6:ôŽvóöËËÖÆú:ôá¸{ÁþðëÓ"lNë­b’ùaþ³Ð÷ümÞ øÎqvŽ;~“ǹÅÄ8@u¯q>s±pÂôDi +¡ýñÙ¦')¯HÁ3¡{Ñ©™ V¾~¹Pœ_00ê¨×;»Zóɼ¼ü5ôBüƒ|ŸµÊÙ†kpkæzXª$jŒÞJ¼N‹ÊÛp3_î»J1Q­ ……y°ôV €¬u`îš PåM†°Þ9r<ðïwŸZzíKß¾[ +ß)’LðÍú ^#k[6K®Km˜ÏŸ‘Þø•!_8Šƒqªõ/ ´O + Ÿˆ)$iÛMÒðbl*òŸ ÜçåcCº¦ÛUwåS. `Ú1üB]øKêvZS,?ºòAç'ÇØ°øhŠ”ü|h9¶¢þlKû öM ~[ËŠ`‹¼Þ3cXp @‚œÆS¿&Á¿®WP.} lâ¯ÇÈ̓ƒ8¥…óÐAöà´¡{:þ5ÅT×8üGÄË—j…°Y=À<ÞBvRsH ŒõY/`k›~ÀW{‹k +l*€ÔŒšÙª);/¦ë‚‚9¡Æ¹'k«½Õ ÀvJ…¬9ä8”ÀMöV/À6ð°BÖ ØG«C'è” +Øã¢þÿOU_€Ö$›e¾eŸ’o(9!aº~&óŸ¥Òz à‹„ +Ô,ð/;ß +À?ÙâœF#Èg¥lk +à·`NQÒ‘¿.¯Žö^bË>Ý6ý`Úx¾ãNQ5®×~*Ÿb U,ùo <[Kj=ldÕD¶DØý,5þYµ™  RY8¤÷·€5è®ûýƒÕæÿNÚj7ºÅíC4ý~ãò·¨¾ýõˆéI8¸´Â§ƒý3 Ð(Ušëù)|½Àùe€¡Ãîã”Pbœk%ðè \v‰pW€’ø¯ìÆn˜³ãů_î-–âCR/\F¡»‹piÍør/¥‚ÎÁ²â/Ná Zä:”qIJÑ-› +€Ý=Aö.@ ©b½ÿ~öþb`³ÿ¾Ïºª9Îj^Ÿ/ÈTòë’B›§mùúž)Q¦RõQ%x/@}ÄñŸ¢2 ¨r*€zÀ(ÀP º`ÿëb0*­Ñ&vµH Pñ<Ÿmsuåã-lB´ô¨}6SÆGÞÊì 0öúiLy »xVÛÝé§ÅmÉšÝUé}Q×¢ÒúÉ+›½Éêf@qð«DÄrû0û¬Üã¼–XûOfÖF>¨_?µ p©AÍEÚaø!û1ûåẢ[fÂÛöÕ£ç ´¸±l ÜR(âB‚}€^Snf>1€dw @ˆšÇ' '^Ño^ Ü‡¸ÿïà·€»dûîÚ™÷TªV³cKáÐ +€ªý¾©Ûé÷É@Õ×ð×Û¿Ó™|¥ðгb&ùÎ?³ÔæÊJ|+´à¿Ì|A½¾W¹nüëxç–ÍÈè•làqÍü# F„¦+ ¸>Ò¨ÇÜ©»½*ÚžäZcÆU€²§p àMqJ3O  mö ¶¤¿)«—ƒ¾Ï¼l5f¸ÑšÕ(€fh‰AyÙêl$ˆ˜‡)§ˆÃf 9Ììf@ðæõ6ÇöýOWÖ÷rU>=y“ÍÓãíbïð8 Ò ÿ¨£²¯' “!ìM10 à#• ,ŽTUTù–\@­ ðî;îja³Eæ èñ²gZ³ÙÒ`·B±¨ž+€œ1퀜ɨ’ÅL¯¤ðà8 ï×ÝNÿ:™°•D­máM±¼l­OËÚ>šÉNòE™Ø.Ü, ¶?°À.òMðGªîDš 5 +@üè§Û\€:àD‹ýR÷÷×µƒ#oéÛƒú‹fÛ¡±nªš–GÀP€Ñ@4NÀáñ…›l‰Ú©4‰r=T/[21€ Щ9¸È\hfÍýë ¼jÜ…kÉ;€Û@rY?e2 +ÐBÊÐïß{Óº&_Û/ö‹9ðqç=AœÉÏ#:°X8Hhá`q© ñKå? 5€&TPÆ4KÉ™/V±ßåì,1€¥·í1œ¤A¬8þs1171€`¤³…ló0Ù,ÝQ€Üä1lî"p£¾¹€„‡s¿ä£f={–~u@1€ý¿óßú¬}»™~§ $}~]Âùóe×·|ù˜×Q(Kg|w|ú¾€)£Ò3 îDzÙ>øž ÿJ ½ü«f„R‚omcš6(€¬µÆzw{çðv=|{ø½ùeÑmGh€´ÚϵÓÑWKØà ¯O/ÓV(Iq©fÚª  Ž¿15äWà¯ÔjÀû¿Í¢¡êÉ+ñ˜2¦`_ý +ÿ?½û)C‘–`‘ªŽdU—€JD«/ÿ//"¿?]5[ëÑ÷O7‹ýÀ%—ƻР>@]øºËeø‘8îÝ5@iÁêS¿:€˜ÙñÁH„x1w3€l&ã˽¨ ke0«Ò© V·²¥¿¨òÉTÅŠxŒè… €ib±êTïîo}Ö¾ÝLÿgÊ€Ø:ÔŒÙêVÑ¿Hv>¸h~è‘¢sËï²VDxPÎL®?Sú• +ú'¦þDbî5ÿ´Æ²¹DSÕ À1xø§Þ©Ø´˜ë<ΊZVèíûàkG œ8¹–#Юmv?€&UMdC°KÔýó^€¢…áÁÝ]À„ÿ›¬¢&DíÀøO @Ü'Áò¾¼<àÍ›ßÔEþ$¹³˜R³Ø€;UÆûùPàÇ<^ðëÓ3ô ÿF5§àŠ‹ï{ý¯`]èûTu ™óDr±ïÀ +õyt`P=s7„«ÅÝðÂR1èl/~ hž—:‹Q¸f&{סÜ«½û»•Ä60·†'ñûݲ9ÀY”ر:(s„Ï¿%k¹ÝL¿[–\~ ¾«m›¥¾´×÷•f[}V©éY[™‘ÀÒÞœ®€¦µ÷C&e õwFC×ÌÄ õv­0m9"7… &°m'๹Ð[ýi=4 =ÄjN )@…NÐÙ®I¢UrRaá™w `·ëo<h¤&üÊÈÛ ð!nþÀdË({pü€ësÃü&ã§ŸUÞ`Na]^|xK“d­Áꨔרß½¡Šû}˜+€âW·‹½£ã ‰£€^Bƒ€eðŽV?ó„d³/ìá“C…︴W¾`ÌÇ0DXjÕ¬°´Ý;€WÛŒ/÷ˆ]×p%J:…­ÓÊQ]|m€ž¢|9n+€RåJü# ¼ò5ð2€/‰õÞÉIº™>#r柯Ê(óµ²_ܾ½±ræó¯ +Åæ%Wé‘ TЖ”ÙoMÆïji„¬~šÑ“·Åü¨4NaÎ?y´šl-±J¶ó Û³z‰…õI›°M-æfcŠ#@NplXn:Áj•Ò>%“j€[÷Ú)€=ý~|›ÿ%&–éü¿vü˜ à­ uìÎïYþüs£= àçbúïM¤%P‡p€Fà5êDê¿yš’ùÝ€\\€ªô*e\OM¾ýÀýñ¡ÆcÛŠuòh|–(Ó„X.O}Éðb©v(QùCÀJÝÛv^LO +@°R1µEÓV–¸ ‡æ@‰Ä5Sk¬¤ÀwŲ±»óc’Ê̹Š"Ò7l¿zÝãÌì›ëSÖøVëÿËåy$Ö–Íí 7äù=ç2J}©4Ûžû”¬­N©^´`Ï_#½à¯&Ðà'§feÿ˨†¤ÕO¹Ö:¢¦*Ñ\=Äð¹ÞÔküŸöB½£ëÙ݇ØX±iOi1560 +àp)᯶a¹ƒ +ñvJÐ>P¯T*$ÿÓ½Ha6–ÿÿúsÐX"àQÞö[F0þq6€éZ“ô1eH½-P l+5@õúYpr~¡Î»à"îÓüËïïÀ²»7Ѐܢù©â€ð®£,*#TîPGWB¿‘pÚÌ(óL @Ý…úZï j-‰v1€ ÚM[ + ¹a”é]4Àø›òóR2øûÆ¡À¥X|ý36Žïwôn¦Oåüe2”À®|å ß©?(´VnÇNuÄšÛ Ð†¿"¾@oÎH ý‚w5¤„÷±üŒà¤[¢¤Š(¶Tšjîp=ö•ŽÊã¬UçV¯ÐØ47RT6 4 À»„ì8¥‰÷elÝ.òm¹hY öÅ`LáýÿðgE4£-Šö›w|ù  Tøg€ÅÌ‹Lé÷¹x} + à¿KÖ‚€¾`A "wÒ(™$Àp_DXTÊ/¦'Pb•0Êùéâpoq‹«ðõ¹òêG€? »3`å0Ÿ@e«µÉ°´ó€ÕÚbÙ½yö˜V)ªB÷àœ3PΛ’Mê=Ýsåp›§½˜ãÉØlh—¨oÀ?S|žŸjQ§ƒ´ü¿Dv€)Y#ß%ßžC¾åUfúÌsZ’9k[J€?Xÿ5ö'³ û-ÉsûÀ?6ª J"ÆœoŠÈÞa{ µõflË¢B€——W6ê· ¸]‰É¨ž@l˜àå«ï×12ã(‚Môý:Ø +Ö>þÿ+`Àß ϸ2\ÿwú¿‹H @S>ˆÁûCÜ ­Br¼ï~˜Þ´Ë Xæåzux|Îåá’¨äÐÐ « €‚Xý{Ÿ¸­SàŠÊÀ'x:PpŒT1‚wÕ¸yåŸeRûV©£XôÉ0ÐÏb×âY½BˆíË$Àr œ{9Ó”¯îŠ…²n¶o93'£¾ ]ræìZ%´·šÜ·ƒf@Áúù©c oôàûT@ag hI­¬}’•Ýl¬~A8ÒW"¨Ž`âA¿“l@%ÐZ rý¨´ÿN RMÓ÷ÙÂ@£Áé–nmH¶=>Þþß÷£¶£úÔñÖxìOžvÑtí¢Ú*è`6|€ãSàÉth“$µŠ÷ËÝø¿]a¾æ­Ò[ÔW/`ü ÿ!…Hå7oÄ;¸Í“OAPÿÓÏï~óÓÏa1ò‰Ù•LüÐÕ†ñ7YWëwãÄŽ/®áFÆWüÄd ŠyÉ¿µ€Ëö °7 +ÀÑ™b@põ9Ÿ4€ââ[Â|Kð‰DP13Àí­9Ø–^zå“ bµ‘@V2çdX'½;œžµ‚¯8ÓWÑߣ0“e\\PÀ{?ÓZJò xÊ{–›kÙ×·€@±ƒ¿d+5e˜€|·øšL€û*ò¾.~¿òóÓÕ~«œ¤63Wâѱì¨G‚š0¨ü~×Ñú÷"ZüóM£¡Í`­¤Ñ¯h¢î½ÅýWÇÇKÛ¡…¥8«ji&# à"QÀÓkyííîp‘ÇÀYß%…÷-™À* 4þÿ%¸ArÑÁ€¼û]ÀÛ §ü¥Æ…„°2èD½=°WvÈz7 =þÒ‘wGçq•UwÚp©¿w»LP»¸Q©!ªÅ¢±ßŽ<[ IîT]OOç“È•ö™¾Zó ¬¥ßC®Ú‹Á_BÚ@ž¬M~Ówk9ê“Ú þ1Þ +KEÔæÙPéÓq‘°Ð`Û7«ȯ$Ÿ”$³—d'í×]|eSBv¯ª~Óv+x+UÉir}z má{d H»Põ¼¬¡y¾ë·æÔA GÌA¿pd‘ïBaQ=H)‚º9¬`ÛOÓ,U@CCØ*ìòº@ ˆ,m™5Ù¦–>4o»ó¦¾"š›ôæÑÈ×ÖÀ$oiš”áã-­ÇÇ‹3l=­º´@¸@¾ì¦ƒ¼% øuÙ/¢êè½+)ô—Ì}€ôý)P€9xÛ½–ú`d¿¦û£;H¿G{󃚢Ò;dÞ àÕúô¸\,N¡Í\ þÿÕ…ª(=I‚Ý "á5PòÃ_Ž@¯cº C¼Ë"@ ¬Y2“i“Í¢\õàSÀwsîàÜlë­Ë$›=«LTˆ°.˜jÆãÆ{[‡  /|èÃó< +‚&t›“±i7ùQØtvšE„sqq­»RÍD÷öl…û,óüõØÉ€áª¬@÷üÖów—ZË}î@›B¹úÌe#s¥EúN>3±¯ÍÏÐÀ¹DÄùþZ"y¨Dþh @B:вjrw¶ÓÛS_f/`½ò³Ì í[×ÿ6\Þ¯Á@ÍMéF}€ãpóˆ‚0ˆ +ȱ¤òLœ~S +ñ[2Æÿ›ËÀ¿ó‰@/½«¿ä?Á€x)€Š”€×¿ØÁO –õH°Ò}4Àn÷?²öD .–.ÀÁ˜æqžéäOÇ÷7 ßo-|îhX¾êÇz¥£—ÑÀ"Ø¿ZÀÆÔU“2€Á„+8¬psWÍ»º1WHë·“UÎn +C¯¤_€ÎbàÝoá?ÇÑôs*õäìüììúçmÞ[­P3ï a“,ãýn9÷!P®«|R¦ÕMJ=¯I%ðfêxféEåú-†o“Mx­­ IfmÙ¹ýÛä™]Ël'¹[ȾÓgÈüxµA¿ô€-£Ô@SÅ^)ñµÀ*ãel0ù1ÉaYÓùbŽ^kìÓ§‡åÑÞÞ¾ +%žÖVfDÏ2¾<–N!Ã×ßÔÊ*¤ÆOOQ +Yù™é`-¼5Í‚sIí‹ø5û/XQ€2òæMî÷U~úøÛ¿Á¦~ÿág@l¼vÝ[€âÞWLàëÁÙúvÅ&Þ8àÄn°Ps~FŸÃø«Ëx^n®§—’2^~qàUö•~@.—ÊhÜûOËÇÏÙ«DP–à«¡™ËtóL +â6·EÌ­ Ë[:d=2qörؾ;"WW>ê ¡úêycŽø@…õ¬úô +›¡3dÊ#×{(€ýà Ðg^j !ÀÕè_ù|“ÌQ¶¹V²ŽJå ûl`ýwÌ·“®Ï޽F^oáÿT¢þÚ€z@žYÌõù#!ÿ*Ù?í̧ÀÔÀ7°wF!Ä%gT«µ)F?]£`Öà¥!ÞxŒaÅëùFv¶g +sB3òá Þtf‰Œˆ‰Ü¢lîÜa×ôØ_õ¬É~¥ì +òæM*iÊoêw¸éˆQw^Z Àu¦N?jÀw¼ûÐe¶e­ÐxŒ¸¸ñ­?ü!þyžìï•å*ƒÿë"〩¥ú®T¨fýìTA¡ÿ]óŠõ%ÃOåôYñõ†¼œÜ,lp§"F;Þ¥dìbZØ3! RÆs}´¯x-§@M¾Ñ=Æâp2oæ8)¿×üè ñŸË;b_˜úÌkÕ÷®)“h8|£¬6¥60·±Šlç|M¾y +nŸ~þ)™H¸¿ËR­¢ ÊØ¯´bèß–ß(€l3mMCl £KKÓ þFfz®7>슧"!ˆõ¸[‡ÿ& +h+÷–!­¼~ä@™º?£õœßx hŠi9³!È"kçhÄoJª¿Q?“B>Zà_U“€âô(Rÿü0€yx`_Ã{¼`ˆºà/ + =1‡tr—̃€ü.n@¤eh”ø¾¹þ\*%ê‚Ê!kÔ +“޻ɠP¸ÆÜj¥Ì©±X®ída…k ܬ;¼œ¤oºSܪsà[XÓžý-ŸµìßâºRÏtÛ£ŒíV±U3Q²æÌExvNŠXÛš€D7K¨8)_€Ï,#Ÿo}V)<¿LA?³4@ƒ¿?ß.sD)s´•l–@¶²¾žQ²ýÓ6rØoúlKeN›¢¢Hõ *Ñúþ+GÊ_ËÀÞyMZªFp{›æ—f9I +!ÌH78ÑnØÃ—!%hê6_&ÄJ–PÁ7rQ ‚Móø,¯Ä’'¨cn—žúÁ``Ø! øuXùÁüºüK’a~ä·è‚x'ˆØc×½»¿wCù³ NÀ—(Àº šp—×?ä½||¯&f?L£Ÿ€Å™=›~Ⴝ1¨yq–lè€!ÒÐÌÙOδʑÊEF*ËXï^p“y]bZEîOOÛN—BQO”¸<»¼½Ç/ùôÙ ½å³ÝK‰lò‡ükŸùK\ʱ`¦Ê›*|À?  Mûö4ÿ0«9IЯ|$x + jñE8Ú µ5ùz‰ç‹ÌÐêošÿª6à%”Û@SÔØWªµEìÃ^.P°‹·ýªÔŸýiµ²‰4Þê\P N}»¨ ¨Ц™“×§X@Þ·öQXÿ"~6 @™»Ã@¼ë7—ˆøbßû@(2bóWÀÇ}M `âú•Ú)ëOâ +?-Ó `géÝòÁWÔ½@è»»ôõ§„Š8k&&@aã*y(c ŽÞ¤L´÷XBÎ5Çý2gyYK’YvBÚžìù‰³M©p²‰å®J*RW¡ F’Ô|2¤‰xšÿÚ¿ä&Y­uxDYZžo5ÎÏÔÏn—¼Ñ(‹?}§T}*¯•€¿¯q%YÀ1}j¹[ +Q3hM[ÇÚ–<{Ä ™f é%*KjúlË”ÙÐ/üg%Rˆ_)€ýÿ±¤˜Ù“Š!fsg ÷AÐÚO7‡*€….%迵c¹v…ï-¿ôßva£ç¥+ àøT Z-GÀf.5Nî¦î[ò%€à  +‘Z0@nl _ðg¨f¶tºý)õ›Ñ ðÛ/ác ³[À94I>üxçÓþ…¿0GõiIS  qÔ<šÃV.’Q»ï3ø`qc€`ŠxQ‘Pw#,1ÊØïXè˜g¨¼±yGm˜××#ÁÇq „)ké_çâžøñÜKª’êG%vôäÏLâ70ÿŒó‡Kd™þ7ÿ\À”LõµeËŠÜ‚Ÿ¾ @nój€ÜkêO¯™bµè8@!¿>ë+ß$àÛÇmxnç̲ræ¨|çæÙ>IåLŸ!µ7xö€Y‰`ÿ'0)€ÜÀ>Ãú*+ëY0•X…†4LðµýÙul•le ÉîÛÇØ%k¥\ Dë$œœ)õÆI§µÎØñà]‡ßc8ò‡O2sUÌŠ_Ô›T ð©ji¨×Óg âÖ5f%µTcŽPw휜 ÍØÏŸVØN®œž„mË,ÚÖµ7´#ö¡@çûãlÀ^Ûâ{1„Äì„3iÀ¯Ë4Ä—„Ö¼± Eêø¼0€éx÷á÷ƒ8[wí?¬þ­ÀÛÒÏö¼àù~þÓ÷ùnqp|vQ +@ðëìL}ŠÙIJ‰ÏþU«…Šk\¤\Cv´÷^  PÖßbŸUتìuã¸!ß*&{ˆrñ}#Ÿ>q*ê[îÀ>d4[o¦aâþf¢&ÇŸ»½×m¯#iLŸKíxéK5‰äèAšñÙH@î.©r|ŒWðß>[šcr^Jç—ÛÊwü”À +v/@jÖZ •ÑŸf“`Öš a¢€°õÏÝ·È€$2K–le ©Ã÷¹Z’ÈuôõéY¶O2Ž: Äz}ÖÎ'ºK<`¥<|TyÑO–s‹sê) j«eêøk€WŸ ê†T°Û4„ÒÞÞ–€·•ÅåØïvÓ²ç`ÿ´Äuž +ËÌ8 +éôGWÐÎÕyIÆí3ï¿›  U@){&@‘L½%ƒ8ì§€8wèOÛöõO1©ÊQ!ñKr€`:¿+~Š™þöü\Ž$ÆÛÝO|“C¨ÿH°PðOCÜ1¿,‹Ì?`¢ú`0 Þ8Ÿ–ЉZ`rfÒ@4ögrß$sô­ ¶ŽW9Ûj[ÁS¼‚ÞZç›MãðÌ“X_Û)ÁxDMaÿpä™ÓR15ÀÈ⢛eŠ‹¾ÛeðzwØ÷,\­$±êåÑÞ  ~f4Mîú.ÝvÄòÇú3™Õ‡u(@ùªÇgKOe1í>ǧýé@R™€>ÀoaÐÛGŒ||?æ¿ ¾{J`Ÿ’ãHàgŒÄ@·ëG*ÄË…¸¸¸A@¬£íøÏ )\ Š!ê‹'2c{½ö¹Mq}Éå«  µ†9¥F­O¹GñŒ@ïâÜaY†TâY‰ÞÔŸG¤¯¶«1Ü ‘2‰Æ Ào.ÏNNn-«½&°uòýøó9§a%…uÓîè Ô)‹@ýò#s*w*m‘B”MÞc*n0€¼E»b"ë3Pó†?R¦Ð¥2— ²?ÏÈ–Ažd‹ÏñÂ[aÕ}] H'Üç\Ïfœ­•ÀæÉûh6€™Äˆýñ™B•ˆ²Ù i;ÖA4€­Fƒ-°î&‰‚h¡Y|~º8==»¸ººÄïĿĴÁÆ @‹ÀÈQŸ8JØŽìô Î—öSJoØÇcÚ YKƒß–Fü¦DT»ù`_øO>ÀÌþÇZ£~/àW2À»÷ïóî¯ÄÈu” 0ux+ÀDàuõ ôˆ.Àé…·é ïn?ùî/mnAEÔhR“*œ®uâý;\¿óÀ-0¤ Õ§PÍjxpæþw§ç—zhVxÆýæ9 ^çœFe‘Óªós^•1çYÞJ3'¾|¤v,áFL=ÉãÝ®áp[”o^Q£‘(ôs*gìP?ËN6AʧðãÛz$ AÀwæ ù5ÔçSÙ+ +°â“h¨¬IW¨ÜÄTÃ2¨|Nf›æå¶ö #†Ù*°“‡ÀÉååµs~Hm[I¾~Ûêgg + s±‘œG`ûLrš(ØÏ•„¡—µcª‹ +±2mZñ»ò[Õÿ šÖß= ààÀXó9ËF«¶·_£ÉÂðSBÑY2øÌ^há>ßSrd¼Ú!‹ïQc$`!_ À”YÒx,™Ç>þAe€ø €ù‰YÆ}ÒÞ‡ò“»ŠX¶Ò»dÏÿÑ_añùÓ †ûôòêößGψkØÿµl'˜Š@ Gà 4ÉR$ÚÔèžêó@­ÒâÞìL†û>Ü.Î|ö ÀžF6®2‰¾PT¹°§Ñ;õH`™§A+ñwÃV€dKˆØsPqÓ/UMC*zà.T’õÐè®X·#˜Š¤¦ÒL#ddÀþ" À›À¯ ÃnmvåÏC[}¶H–Æ}³EÆ—ÃbOç· úÙB.hFB"*a‡4â7¥€/ ö¯gÓŸã4[ža¸zýšødl™DÀ«ÆÝ€¯xûU`%äÃ}vy-*ê#{æï†õxMƒ"ˆ—ii¥z½ž¢¿.àÅéñÑÞbÉ^èg©Æpêà ÎÆ„§*ÀsäwXÍ|ž˜z—œ2QÆ8jö5ž@WîÐnÛs.Îóh~>{õ÷4lÇvÈ9r¾ÏüÖ8+œ„Ò,u3¯ÏΗŸ]›Ä'¶¼yûÀ<гZk0ûˆÿ-0wžÕÛ"šEf]JÎV’­µ")— YL’rÖi¾ïTÖ½Hoì3d…ö5ÐÏ¥à/:rý›$ÅÓVÞ"ÚÙÎz² UZôg)™³ àp΋úÌ…c=æ™À¿>9=÷-ß¹‰|©ÑÑý·«ÉJýPÑ ö/¡Ò¿||fÔŸÆj Ò¦™¢Jl Xßþ 6‚7`)ÓßS|€i4*‚zÎþáãO¿ýø»áäå>zÀØcȇרb_ †¤z¼Àµàêæ€@ŽêÊúÁ§°C¨[Ã,æ¡-âT9ÆÚgª\^œüÚ{¸\œRøá +n㲞-|þ8¼ ÕÁiºH©‚œG¥cuküE' æâ'T{qrtpìíßxíñÖ„}ïOœjµCÓz˯¡9rtLŠðüœSû»*ú˜4gSÿÝÞ\ÀcJOŒFe0$ \€ á=õg¨‚éà˜¥’}¿U@f§„ Y+ë9Äœ¬ŽíµGçº_îúØÚI%{»ÉX“½RµØ%þRõY/PV%•!ðõÐ&øËt;ÐGŒT5)V÷ãíÑÞÁÑ ÀY*•ëAâØÊ1ÿ4CÚ¼«¹öVó‹K{gh ­?­ÂsÛi…ª„üŠMïýjæ2M ÚÌ3ü¿ýñQ€£Ò`-ð|½IÐOÀ`@¹Å6Ðýæõ›ÞP#‹øš À%"¼¼(5X"ú¹Pz=·J!EÁ'êVE\|l‚”Ùçq_]]_œXê½O;V57þ—(Ï”x¬ª˜ö+Ñw™BÑ ÖTDª]‰9r¯¦îž x»öGõ«ož—ÇÇpªW%•zLš!ûYØŸå¯óàOøü_µZ 2s®ŠéS·¤0Ý€ø5Ès…ü¡œ×§s†lr€¹4†¾(¨èÌÚ ÁqC¸r’›O%vËØ¥v^“à§lä¯tÀôA<)üÇa§¬¼4€ÔÕÜÎóÅù%è¬ù&%c"òM€˜=Æ#¾…ZµEcÓÀža Š=G„·j€ º©|û!ÆT€ç¥YB ÔàoÉ ø³iÿµ- ÀÒ?òÁHj4X×bX1 @^í绀ªèÑï¿>öÿ5ëÜ)ó'KZü©ON@_«ýÔß:±ŽV ÆÙ+,7mlå:™•f]_98wê¿7UÞ=«üý])ƒT¥˜nÍ©L¨\85m¡7Fïòƒnej—ç'G¯´Ï±úõüvç7zkçX.oØI +€ðWܮڲӰðû¥_èúò´îiDJK 5'`êÔǼgÿ*§álh€M' ±´)ª +{q"+(6’§Œ¬×‡•U¹MÉ&‘Z«›òüŽ%ã—íüáÿ··ôém­r‰Aì°÷B=E`ÿ±="ÄSK6k:λ ÀsÌ`oãi±6£Nj _»3(„D&Mbs¨»OgËjûÚ¨œ–“c> + +Û´ÙjJ#xƒð㯱ú?6ø‘ôë†âš¬õè¨`ly——‚ œK3þ•è[‹d_túw+¹t÷2‡úDÝ#q‹îƇû`īXPcó\#®;{'Wðòâôpc}^;¬ôiâgº¿½>ñ:f\ÿ2Î1‰øÇÉJ炨«nLïîö–qv,A¯’SHc¡Eø¨rÔ™ãšìö‘¦ÔoðÀÔâCø‰òÙu£r`?ÕÖ"CëÉ«!ä%+ðfz@ÏW³Ôø<%+ ØïÐ;±T2ภ®r%‘^ÛQnMú@Ñ»äÙClåöŸýþ†0ø§Eüo—ÿ5‘%1ÄEÏÂ>`ÿKs™GLâ^VxŒ`nt&õŽÔFŶôÙnÀcAD ¦>ˆøØ,=P·UL®1BJ:øÔ§°á÷I‡Q ìL€Ïlm²ù7o¼¾¿“K²‹sÙŒD„ûzÿ» ûG%UQ€¯2€þÝŠ,ÿÓÃ-þô\ÃŒ9oîW\ƒ¨ÿ:KªQ»)|ØŠ +Ðð¶yƒ(\<À Di„iŸž +?Øtù»óžÙ)ªÆfÁÅG‡p= ‡ÌÄ…vtŽ˜5Õ0û¡”2Ã;O÷N¯ï…±?©ÄºDÈá‡Âº³±¨Œÿ ’Ç÷óDŸ?çÄùgnä ¾0 +"s| ÌÇÞ‚äTì_é{è§Ï|ÝÕ5üïåîÅH~BÿáÁa#ÙRÜ9ó»Yh”¬å³ž».ƒ!˜Ìbã!nøÂAØ¥÷êW·°o þ¦ót.av£ã®ê¡¤ûKbù£²4×™Â.©-ŸB; ADOLe6D~·\ì%Üìs'ïD1ò,%ŒpP™ú`)ÿ§e•À‡ÅÿôIDATó‘4>À†`ðáΙvÄ6²C÷šÍ$øßÃòË@}€ïÇïÅÈV àôrP-Hä6€©èo´þ‚=€‡¬9¯¿ën@^¢pvyéX`Ÿ•öõî3ª,0 Ú(ì¸Z£f^ÌêH `yyyŽq–<³Ã 埮"\a‡`ÞšÁÙ UÈÀPÃqïsqƒÃPìÈå' ‡‹ïYäoËååU?yø %nd§¤j9ã=îî®Ñþ‹c{€¼Ä;ÜdðÁE@~ér5‘‡¶~Ìå…ÿboïàðèàðÐÛ—•· ,þ©½ô Ñ>Ögs™i€†þJ;Ê&º•/À0²µ½á;¤Ò³œ“˜4EN\kSÞ×eR#1á²gLíêêú¿ªí©cêSxzøð0€Î  K#¬™W" @¦§ÐÚˆb²ý*U™_g ªæñÓÝâÕáñMºšÖ#ߨÁ¿iŸòÍñ½Koô‰'Çç´áèvÑBÑF9lÁY èïŠàøùªR¯w8k à·|ú°ôÛ]ÃJT*sÀÎrCæÏÇO(€ +Àþy Qtdt×\ ð'A¢‰{ì'ªt†I§ÄOñ§Ó(€Yõ4jÚGÅœž\,ã™9æ½@„G³R½ºå¹êÖ·ºf®õV=píÕK†ÏŽ 4><ÞâpŒÇ‹ÄX+gÞ8¼àº«#>pìÝþêÄÅ-?¬îð¨C.rKð=>É츃#ö?:äýíPyó`~,G¢’™¯ËP `ý+ MRšÉ:76oƒ•œÌµUWFFÐÃÊÚ1gú!²±ZRˆoë¿ÚÝÉÚûë?Ò@¬×û‹óÿšÇøæªƒkv iäT|[”hà ø;¢ds¤uJ/öÒŸ ™ˆP‹MH§öÄ—‚HM±N¨HxOEB ·'õ¯%2¾ ½¼ªœå!Ú&€Þ€VÐÕ>źí6ÿ›ø‡ô¢¤Á8“U à!?7¨aè¶¿ÍcÁ×Cü¢Ìë¡€?À¾Ø п[|>0 ·Ùž‘x÷>Û/Š[Øð÷eÿ\„Ú#Q{fªUx³AÀ«¸ç*vÌåráƒ=˜ló‹›+Îshð"4q¼Ú~c€—Ž@à žéI]+ç·êÊÌßHÿ/ëvƒ½ÃKìüéÌ’úà?Äóùu·w°ß‡,®©iª[Ñ"Píù] +Çš÷Ò½~ÙþßQ£°Qߟ|™U’ioï…Gò,8üj_àNÙÞ¸³ø*s¶94Ñ6 ,kåY¡=É^ea*`–\/?q˜_þôôp… ìÔHa]  ŽI‚⤫D-k@“PM +³‘QCkD °§ §DuñpkÈ{}µ¯’) ƒÿЏÄu-ü/Ù®ë@@€#ï˜4>øåŽ~AŠü¯\€ZÜÛÃòÇöoK£qÕ©W @À€ÀÄÏÅþ“–¤Ó »´0TŽ +áK2WØõÏŸ7u´87dbÿœÄ¨á[Ýt†ÖÑ0?|æ²HÎUõ¬TŸ„m €cª¶KOžà#›ŽmÆ8ZàõôødásüN5Ћ“ó»„$Tàü®å¹Eê eêsœ£ƒ}Aåžbœ9j‰[ê<È¡gy1À¥'¡5ÏSIôë=¢rÂG‡ˆ{”ìãîÀU:0Ù.€4 îl°ç;}ø:ïÙþg giS, @T2ØN(Ôæ¥Ö‹±òe“ÌŽ/TÕë2ÿ «Â@ÜbJñpõÿ¸Ès¼g  ð>&?ºðßZ`"arÄ(‘;@í5ð§XŽéûíâ…/h˜ý^ @Ì•CPo㽺®5(#ãH¶ŠÊPR~4Χ0U!`÷Ô. žõp +ð¦_¸-Æ•¬À?V¢Â@†ÄÁÖ||_€È øEп[áZR5‰àš§Ç4ÚQµÇåÎÑ„ª@þ½,Š$ÍžlË8`>:P×Wçghïè6Á6 +¤ÖŠ ^mÙæ’Å•Z M•Ü_OÖyMöƒªÒ!+‰ý_ Op0Ny™‡ñÃâ7,¹"¥ßÊÖÙÍ3«ÎUÁ~=h <¿>ù2ËZ2×¼ÀÆh4@Àó?E¶à¿¦)Jv臥ºX ?ÛcüÙJ§‚ÈbÉAø¬)ÍÉŠT ÐÛ ë¥VØWTuZ“ +̦©Ceš†‚!vB¡ö¨8)¦@WÐÄrù–aZœq@4@žðU¸´íð~»è7 †%Ü%ýó…¶öøwIÃqEV1UA©@mL†ß¼µC`îã£VaÍÅvÉš `Œmôš¦ÃT:q óÄôGûQ”Šˆt`O¶è˜«t.ó^ý¸”öÐλÉã…ƒ'€¦ùW¶úEìvÀxx¤!Œ…ÖÇNŸŸa™Ü/j5å;Ê òÌo%ö<"ƒSpoA¾åݳ Œ+¸"( u$#O,T@1Zðú˜è/@` çc‘ÉYR¯ööÿÿ›@Ë?‘€BÑ7I#n·¬ºå“l`z]êøZײͥ¶¤Yý¤pð¦ÂÁ°&3Ðj ˜ï³d?7þ|M$+íT["Ö¢d½K¡ŸCT©’ǧ‡;Ç‚x/0œV_Óvš®$Ÿ²ýp¨@|LœØ+ +Z1€Œp² £—¥§ægl‹hÖäg%$T`H˜>JãqzpO _.ÀÇߓȺ‚ödë¼}óÑÇ‚ 7Àëdµ¨ÿ÷0ûÙí9W” `AcKB¨<­9ó0tª’ nWV ý÷<½*ëá ¶]ÐLx]:^7ˆû‚Ô}ˆ”‹~ä5Í-}c¸g§¾Œ‹3èdøž€ü„š'ÜGw¦2–ŠªáÐ3¼:öÑ„+ ôÓ`Bûj‘ÉYR{/_&”°Øæè€ï¤¸[¡oÔceµ½S½áY  (Çb&9ÆtH®åµé2€?~JŽ1€fÝ Iìúu‚Ê-àÖ¨€’¨ Ò`à˜\÷Z“*¬`¥qjQá¾ëæ »‡Ê´éChØ­t(›Áï Ÿ/a¾2ÿûEòÉ¥ÌüÛò)¨ÔìJùH0ª¼@#~’ÒÇIšü!俌vø0 Pä]€S ÿc@Šxóº 6“8°=íõ•ŠäªŽNª{µÈՉެ¨ +Üs¢Åý˹*Té +4ýgQ¯ö×ø`º %åwû¨nU+—ª/ú1ºéj ˜ðL±ïòDšÌ»AÀj´0ˆ×@¿Ð>ƒøô.( ÓzJèI^ ç)"B~8ÿÌj×T>…Ô‡Žæ¹£–åj©—*‘êżºŠ`?óŠ|ì¡ÖÀLÈe +ý¥ +E¦_õ7Š8.q ö–5)Ä—L‰ìÙ à±~ÑŠf [øgšÀïBIƒœA¹’eHhJZ¢‰ôÔ{~¦±þ7pí7es{[z!a§öA/½õ/~\Z.Ú8/¬àÖ^bŸ„ AœŸÃT#àßÎ(Û:K$¿aK +Ô+ä'ѽÏ{HƒsØn ø]›ñÌA»y?U$°ßÚb`*‰îxóCs‘)L>Áz ÀëåÍ“G\°+Õ¥—˜«¤î3îÇZÂøaFUúêG§ûð§~ د÷öožÀÕR8*9?…À$d'8ÐÕl]€>ó R91…1o†~ìÃËàGtßßösUï…iîä÷\cÎ׃ºd‘×ú£Ø;ªC%…@Éx†ÉƆÿÕ•ý‘´¯™œ%õ‚ß°ƒDõíÒI`»`4XÝ’9N7$Vx."©—(wuŽüNWÊýF àÓgC=ùÛÕ 0c̱ë#[Ôo1?_a‚~ˆÍÎûAPñWy+¨CH@:³ÖMG€)€#:L@#ö©€>Xa+¸§ÔÝC:¦4„ÛÒ7ü{6c-Ñ +õPóFdË*ðñgIYeå¥üY*j€woL5¦ç  \‚z"Ðøz¤}‡±™Ö»Ÿøk>DÙ±À—v™Ú¯¯¶s÷£!PÁ.éG·zÜ‹úärF)ÞÞ¡>¹r—çç'ÏÅ5EÒSi 3Ï\=;róã“Ø``¬1.€ª¡ + U‹ìK<ů‘Y2C +žmŸñÙj +HQá¾0ôâÜ|àLäëÈŸùFB%€w^Ÿì~iªBÝ«ÿCà­ü'ƒ›‘þUèÃÊÏ™œuúe4@à?Ó¿ÞÔÀßÀá„©¿PÖ`º³Û²*ó­™[j¥: +öbÈ +û³Dv´0€ƒ—/¸ +%Ô PÀYîטŸ ß‰Â?ˆÔØÃͲO‹¡Y¢|Îun–´ @“ö™1ÿ.û»Ê@?Pêú:oôy·¶ùòø9Ýö?ýÞ¾07²W iï(ü'Uë+„6™ˆñϽy (Ó úH¼€ê  Dg®€(wñ: + è@dÒ‘9xô¦úÀ!pñ áK4£ŽºR ³xÉrQ¸ȧ(É55`'`b €/n닇´¸ôK×@s?ØŒ±-<@&ímàXhœò©õ6›9Ê`(Ž˜˜MO S@K5žÑ0.˜·{(Jçˆç„Êà÷–W9yrgÀî‘3ॹEìgzûú €>_ä[ ÐàŒæ?“‰ÈeZæ `f»Õ¼Ì,¿,è! Ò)Á}Ø©df}¬e9í>G~§+U;¡ü«û¨.å$ó€‡öS'ÉNþA<…K¾ÍÐ;€˜_ çGÔ«Á©F)j~èÖb·Žk§ÓÃíòÎq(>Ñ‚&AëÀМùClï4ûŒˆµ7|7x,ÈçSÐOªÇ˜×ð_¿çû¯Ö8@1€Ö¬O* =þh9ÀoV7ðqa ùß”27þNëãøgž=:vÜv÷DѪp¸ê\{Ë¡}¦¶ã„…8¥ ­èB9 ÈNêûW>®‹*èˆKØç›ë ŸÔN}ChD$Šä(€`3X R ä¢6sÄMìóEÌóÅÀç„Ó1{~-#Ñ÷hîî D¼³@žr6lj æ`žŒãá8žäQ)ûè„ôg¶àÛ À~€Ö=°¥2àp†¥!z¤Ì/J +¬•Ú8ÀUª™!oI¢f£øØ6OÄ—¬N%Ÿê¾|qðrb-BWü‹ö~Ÿ¦$ˆ¨D–º"O6E]€b½OÄMCly¾ë +7QJë€3Ÿ­¥eëÛC^m¼û°ul:Ô¾m+s|q«‹Åó>RI°±x—ÞóØYˆnÿqm+¸wþø¼b-`2ñQ%“åÏ<ªÀY½7Dðv¢ùg  ¥²ö›ÜÔZæCùcÀú¦“keǨêÑñÒ¸SIÔ?w\¾;”zð¾á{èÒqöa(€—{‡7aJcd†—ÁÁBÅ^$Ö ãÇ âAŸÐ}@R‹|u…ë¦e”ÆetìQQ§'žjŠdZ){}.~…–Ñ¿÷Þ!é1è…qû,óe7gŠš%8M7ÀÁEÚͤМõ@°Õ0€9Þ×Ò|9ÓÞ‹—/6}€•8Vˆý|@-"ªÐ)¨´¬0¸&³â_:L•]•Ÿ}%ž´“VêÓâ[VZ`¤žøÛ“@:Uò’Iü}÷øù¬$¸¯¹3eƒØôÈíò-Ñcа<ñ’ZÍæÞ&]mæ¯2aQRTC‰í@U¤ÓË8`>ÓˆÚõiàd;€™~õ«¢ý•šàó!;+ûÃÒ#A7òÛ2àÕÛ_z x28@wü)2€7¹øM‘ýÿÛ`ñ Z Pæ tó¿p^ýzc7àßK#Kr®æUK¨4PãuÕÂ?½+€k‡Q߇K\.\þÓ@æÒþØ«Ã(­9~»`”8—º Pß䪡NmÔҢإþY€ÈG£äasÁ¹]^-^øg<É…Ø._ÞS¨çK’À?¬•›«$®P7gÍ1–º†ÕpП ¸+Ø©‘NK¨A b$ cŠt7@©!Õ` èFêûeì$˜ë8•ó K˜¾ÓY2›vóGN?tJ¼z¹?³ù\… Àƃ=ŽªàXÿ$"¾0lªçÿ´¹Va½KD-±šàŸ÷·§G†°+´=«1¼Vôs ±Ïñhå0€„ •¸¦Þ $ô¥¼HBáð +­åhÕë"ÆèJdÈ3.P¹³|%.ƒÉ°À‘~¼…þÄ(ãc‚>þ hùðøs6¾?¼»è†ñÌà^€Ð››Óƒ¸(€GåÛ¨«ܹb‰úcf€¿Føú4®«W˜b©›žÞD;ôµéWƒY +WÁ{p|T³@q¢Ðɇ‰¶0¤Ý Cµ¤3Ÿ×‚’Ñ>/.¥Žn7O$ËåÕ¯a§qøQêÜ@Q®â&M…sÔÜÅ×ç^Ÿ{ÇþÞÁ¤Ñ©¥‚€ÎÕðR€¶õë©^µ ðåËW/ö`ÁÌžój2ø_1€%—[ ›Ë„¹’© p˜mœ\âÁv­%û­N·¸'K([ÅMÀœ^ò鉬ÛÿÕâÁÁ€¯?'ŸÐ‚„š4ú· ’ÜÞ¿¤ZÚøçç§ÛÓÃãôjUí'¨=»Ó¬©E*Ò…f m€¦Fc¡…adN.–z +¶xɬÈ× Îã0v‰`¦UÞeÿµði „ׯh¶ï"ÀBè»’¬Ö…6 ëqú§¾þ”©5¼€Ÿ˜V 1€ÕP@Áà;*ˆÔ a:°×šÒ©hÍäÜ ‰VYj$ÐKûó  ³àïSå‹"F)ÊEä +:@˜Ù (XÜ´V)ñ²{Ñ*wØfãógí¹ F2RC½,R’ª0¿æê†²ßê‡Rœã²¡¼!ºuË»«ÅþA½RÕ¡b1äf Ïa?wE Üqʬæ7¤(.€jì×—(-ybKÿy;°¿ð¾‘r68£6dp€Å‰ 73F%_ ¤ÓlÈó+Íí–Œ£mžxVØßú("¾RÞøËŸüGû/^¼Úúliüg$8ʤÔ|Ʋl%°hÐ{DÒÐV¢ñ6ˆPµÓ|è—á~ —Ót«Û„i¶3˜¯;>9µï«h¦Ì3Ç­[¢QÇʃk§²÷.ü˪‚¥¿Zµp!Qèþ·ÿ?Z›XÀû÷¸?½Ðþ  P)ðq¦ À{EþjS„u aŽÛûë“:)W÷–`•£<€KfÜ$ ¯C.¯ !J©<©o1è{´¼÷ ¥Y†˜*áÄ ‚LtFŒ½†Y[KíCY‚[ØÄ™QÎÚ¢]\VœýÖ[—-‰•YÞ£fÐ2v$Èa= V`y¥qG‹ Aàë”°þ£P~F2¥÷z ä‡Ê}yoß0  ñ>–ª€šÙÌÁ‹(lâ8€y†,!¦¯È ¡I|öR uz½ä´66Ö—5/ã¼&¬níŸÂø3°n÷WB¾ø‡#ô½ AqÎÓ G¬4ü¿Âº¥ ñq2w´gBÕë|ÆT©¬ËYµÚhîiÁ¥þq>ã,N} tW{—æ®"`Q:aK4êAó|BÐ\Æèa_ÀõÑcXNø/ÑÜó™Lº|’2€†t½0=.ìCÞ31ì~ë +ª€µn@p ŽoUÇé6 ¢DU þ¹J\6‹|òQa:Þ“I]èzÂSî„íäÿÇ%KkM(Í¿ôQ'‰Îrž þö$Z;éŒ1¥2VØ1ƒ¹¶^XG_d Ö à¯É¡”ÕWÒgagŽämDj3€«T-ÿɿ刚A%ò'¥*ØA¨˜ý½§ŸÌ?ÿEðü+°ü +øCˆþ¢5mË«‰¨«"Á“2°8“³/Hãr³+™b ÆÓ ‘ÙÉÖê£PjÚ#n ßË Àn € +ÿMP8>GêŽXHnà¯á¿cA¢5ASãjZ¤¸‡Ï¹ÖfÚ”hVÚªZŠt€#Ñ’±ii644€ãNŽÏ¼¡Í—QÒÄ?ÔP¢Òȶ%Øäs^Sýï„üœ²© ¿yUž¬©3p®ü>: qAƒ€?¡ºh¹­¼SPmP«ÀÝ@eý•¹™G äÝ@4·q™n—Í•¼T( 4éì"' ‡‹ÊF€W. +à×TýÑMJ$~bµx#çí äÜNkÆ‹.¼!³pé½™j ƒæšàÒÝÕ1zCt4£K6 ¿)TÒ'S‘Ü{¡Ê :SQI>ççr†:Sº„ôs<Ž + ¾(™+4c¢¯üÛ+SQö?³Ñ ÐxË,üö_´xñ‹ø,8]z[ÂICI™pµ)3ÌMÉuˆÎ:‰åÆncÛf™ÈtÌ^îÐ&›‡Ï.Ás@Búo®I®G6üZô,²SA?hîà„}åk €é¶ÕôàS©Q'ñhÕëjz[F戃€m¾¶òd‚~$ÝÐçvŸëòÊÊ(ÿW?`·ÛÐ@o¸c änëÉ ­ZÎí…ÌaÅË|#ëwý)Û€ + ¶5øðQˆ»ù½w !P„·o£Ýï °þD ÇàãÀ‰Dç|˜®Ï0ȃWˆRY/€´£¼€fSB +nÄfLçÞ¸¢rð™pý—÷×G/ÿchIͼõ7\üpã`KJ¡O¢ëJ6 úÜu'Ý~@ïY’âˆ*äA ÖBcíW0„ ÖßãÙ*xÉH`qe‰±ˆøíp­ `ƒ½>cQË´uùb^ålI8@F62wjD­0¸-Ïo²Ø´åë»—¬öù6 è#¿ÎÔ¯G¥÷ë Ç’ßðs!4ÿE(ë#× –/€ñhMP \gÙENØÏb}Ä÷\h¦Y÷©fë`ñW €"Þ±e"#T0“5€qWÙa›íŸ‹ `Ħ2!]‘¯¿ºS³Áet +À+w²øªÿÈ[¿Ð ÁM@dA-ö¼Ä¸kŒsdz¡Ç’uâ³Ô Å Š`,ñÙõã †új¡Ôݺ”j7ÀI úþ*“('«üAÍ‘çCøãÈåQ•Ée.®ÃûO¬\€êX½~Æš¦ßo€_Ó svp€RßΔÚ8¡o—ljuy~¿Íƒ¯Íc­ð_2Ì?B½aÙ•½}þ1ôcR½ýJÈ•xQöß’1þ]ä2€F¾ó–/3€BàºÙ +œû[­Xj7¦>æ ~jÃMÓdÉ'vâ&O:ï@œÄ{ÆD9=ƒ»äQ‹ú@9_ç6‰h€=•AŒ~@ÏrÒf—÷P@Œ'±!ãîßÚ\  üǦ(€òZCÔQÞÀ0û±ÿ+ *¢`Õ<,Àn°YOËäz +Ȩÿ8M8 ©6±ÅK +y¾1|Êu›{×n÷"Ï$úãïü Þ`“ŒðžG{<‚OÏwníxôôKH38‰N²ÐPqÔчšÉϺ‹ð xÏà tøT29iþZ±|µ‚*:S=2€þ‚îQKÈÿ þ#•ëÔ·_¾;E^´7¸&¯ÀÿÙéù1WÝ»& +°  [@œäy8Gf›¿RrU€åHn1й°\·D—>a€}QîW g8æ‰="A¾R*@ºIÞÁÁÍM™þ™P‰gbÁY±u±è}­–&à—li2@XVðIµ:¶!›* ]Ó61gôYjÐêáµù [‚Û¦ ñÀ\°Oµ^ž~ SÝ[˜õžÏ9ÀPc‰h\ÛøÓO¿égx03ô}p`¿‹ôïV„¿Ï=3°8 ;4^²À?ù_ ˆ)¤7éÜ']§ôÂKù“bZàõ3Òp÷‚ —Õ¹Ô T= Ëæô‰+˜)2¾Ú(A€ Ô-ýÒ÷~•ÔY¢ŸîЛ±OC5¦PX_Ú<MàñÁµìÀQ@ã8¤®‘¢P!€5 0cÂßE¾o¯¼ðáás}{îÏ" +d ªF7¶ +íÈ)ù›Ë]²^f+PðŸòn»-`ZÓÞ¢8Gg;Ž ð"Ì?=>o™ÙÌþ#qÃËö·"(i °©‡(rÿQ¤¼…1Ѩ?=-¯òøiƒ€´3ß«pïX4 ˆ›éh³óŒ´jLëó0du@TKšÙ–~ñ­1ÏWPO€f1¬}––¤X\¤<V¦ïïø{ª}-±cýï{ñ®PkÀ›Ñ78—µ@.ÈÃãµá¹z`·áöXh¥ŒUµ Sõ<µøX@2ºSæ¤ï,ˆ‚XgìÏ5ô,¿òaíàòZâUçÐê ô@2*­W õÎ3­ )€4ãx^¤ær¢HŸ¤˜ÇôÏ •Ï1RÍh‹ûnp“óèÞj¦ü=ÎÉ.ãhãÅÁ«¥øÁ…~Æ?_.vêV¼—Tj¨è/ ä[Y2Ã~£Ï ÷vfXШڅÏØÜüœÉnÓ32öXí¶íÌñ/`¼%öèÙGö©%Ãðx‡WWg•‡ àÓæö¿ðO-‹íFu+Žÿ+ þåßÛBu=å9×ýT`Í5kXj"¬p”Tªv¬‰±ÓÈÛÏr;p‡Üê·-Fì” ¾f…æà:ô?ò²=Ë.ôwÂȼã;d+í Â(Îð±ccì Daz‰ðœø¯d®økAÏÍâE@ªLˉÐÀs…¥\_Ú$ÒD,³ÔµãBç‰Ë–AzŽ¡ýÖ–R•Ây¼»âzñ¢<€0 á è¬ü—f),­0 † +ÜAûñ3NŽ¿Ú· Z"»)¨W‰4ÆûSpœC}À‚*Íßgªóã‡Ü’±·¸î«ÂYÄú×·xoPóJPé¢]Xð{=œB‰ ýCäM,—õ„"¥qµ¸ë(, nšeò±¾Ø¹ëš°}e24@¶ÑÛ2ØO;88¥Î¨·Ë«‹Ò +ƒØ] ÿŸìÿ~ãÿféÕ+Ü÷< €ÙÄV1¹~pšJZ åïo5hgç¶ä4ª<ÍÊÚOux€Ù6à?SüŸûL@«ÞX6óû /|phpaSÄrà8³°A¤‰ÀÚÜ3¯rN–ê„ €óÝ(Ï·0=#Ñ €=äïxÛ1AÊ#e€C€6ÕÀž(WÂRÓ Ý ¯CyNXO•§á’øÎÁ’vÒ‹Hv^«L1µ¼ + ]ô2€zåBI©ÇTpÉÍû˜kpN3/&S-ú‚ÕCˆ'¶zôTö5¦‹†V<…0{ÕѭЙ | W™*^µÍ1«‰zDå‡>«p³‚T/×RG¤œ½ÿt¬ƒ~$ý\è{Ztt€ ¯Ü’\¡«›ËÓÀ¹O% ÀvÀs`.²¹yµ¾¾eë0SÆÖ–òë³’g‚€Ÿÿôêå«vCÈòˆeœ_\-!Ö@낵δ”ö_`eÿÅ©â%ã³üÿY  «î¾{¢ê*S\ƒv ¡-7P'?ãíÒCÐ>Uü6iù§væ–o a&@úÇshÚ@ A>§R¶]«ë.¦º¦Q…~βî²Ðyé믎Àà|BýdX* ãÿÉDm”`oŽéoGAYÿŸË¶wLÉÈ3÷éæŒÒ¥6Њ1Á"Qsa椸bì×)7ñù %ê”v½ÜS"À"†¨š›¼Lv®ÒpFü8¨Æ™2b^5`-ûÓ<×Mz ª'ƒ4Œ^ª#¬Æ–èU h½»9v8ðòúNx~w~»aÀ‘ÓIè˜s^9;ÿŠ«øÕþ‚ƒÓz4Ãý=ØP vWö>ßZÔgY¸ö¤`JO@I-NuP¯OU%² „®áÙÔ]2+óÕ²s©ýj—g|€ƒ—/_¾Ø·R65Àìw)ùˆÕÃ\ÏûÀ/\µð©Í}û“jbEÿ Ô±n®÷sá¢+þͦ( ^ +àsÞð¨lÚ,õÓgoo;´Ã™öÉqE8”•†@}«ìmÃi+¤â†ÒÄôlʸ€gw{ÐÞƒÚi0œÆ±A»Eä—ñ/ PI/=ßlr59•OÞ‡÷¾DìŽzxÇlkƒ0@_êâ} +:=ÀC„´óßcZòN±½Â~¦ÂómnÔ­Î3UÖÖêðyJê€ ¡ú±ÑJö M¸2†NA¦¶ùàìÒq¶ZÝ*9j‰«ýPcb€²,3:X„²Mµ"J©uô]îáÊiJ;×Aßß[\±±v\÷V üÏІÊÿKQ¼~„V$—”þSÁRºá [ÔˆÕÉñáÁâ6㾚LãÿÉ_ç%üÔa÷…y¥òõÙ•«†x±÷âÀw×/Q7> ©E„í@ë\ln^­ïر¤6L›Iì,º+K°ÆÿÁ ƒé ٛɈ—ø¸·)®9É ŽN2Õ‡>ª}=X‡*ÐøGnæ18õ¦þÖø“+iZ[F™ò˜[‡ƒÓÖ`›¶àn-*s´€ §=¤Ec°4d¡*iʾ\ÛB»…»&¨& ï9 P˜o„›6LT ø[ÜXxŸ +Fs°’×ÿµíƘ¯!~}eÅT(ñß.€ûã B²ÏZ0àWöÄt 0ÓÈÃ^9zÆQzŽ é[uäÐ.\R4°õsÍLZX¢4ÏpJâB8’(«µÁÜê³^¯!OŒQ Mk†zµ>LSSÑ0»K”QMÓøÇˆüʽñÂqpăOrs‚ò—fø«9PÔŒ¡ÆD/©Wµ9 ÇŸÄ Û¢Èi {lOð̸„Ä X1€™°=`Ô³ÈiÉ$^€5@t@m¨F~ðòÀÆy}uzÒàd0œÃ_) nau–•âó2IìØcKj§úD¶b´™ôò¡Ò64 +ÀV”ç,R_A>ß³ GÚçÀwÿ_ïÔ6ñ/)¿Þd6@án§X]yÆÕâ´:œ¤6k†I+ƒjûm,Ó¶=LÍìø4O¶6jE#Ð8hÁh.ý\Œm šiB»ðÍJÚDi€=ûýº[ãõôÑÎÉÑ{w °÷%7p?Í+ÆW ÀéÃ;_?\ñÊ$’]¢¼‘ˆû9ØËÕn$Ö€AD÷Ù ‡÷dÍ›ñäG€Ð+å0½(ì„WÙjø¤ÏÓ~µ÷«<¥G¥4@¤SjêÜrdtŽf$ùïàÎz‘Åã¨`yòµhš:‡»¼ÄM–e Т+Zr–º>9<ö•:°ßxl\RÎÀÑóS8+¼ŽZõ%12<óiü¡«s:²PU¨%Z$‰ä!¯+ÐîùD¼Jp›qÜAßÔ µP‘ð½E]©ŠL² §k`sóvñ’YþFVwî´+°¦¬øåÒÑίø#®­9‹£Àß[±mDö¨¡øú·ð±Ë¢‡Ð_âü!¹˜†‘ÿ¥¬{Ÿ¶õënÓ”©í€œ-&^ãRG’‚¡P‚ÙZ™ÅÙ æ¾oýaLÑ ;¥/ª5íå Ìc{•§žhà'#Içû€ßÀ»Æð+" …} ?%V ˜«)d#òßû%=ý”$ñ›5€€äëË_etªD àCx®ìàšè¥*Ði²~²êVÄGizÕ +šU(E”‚%ø³Ň5çAmV>€vWÌZÄ Ô‹ku³ + N†Y6<ãCÀµ ò £ˆÑè-U †á''§ÒhÈ"Š$bÂôƒlšQêÖ¯lòþÑÒü­KØÌÑÁb éCßW›züT`0°>à_I¾Nùµ¡CãOËÎ=¡¯ö^ì/2Jéâô¸lÿP¶Ä5ü#àpÝÊš2’رdžPbþQÖð/V"ÖôÏ¢”Q›Þßàh’3oĺ¸THP´)®,,@®#`yeô\ßz¡pïZbrnªbç @:NR¿a'çP€Ü ÆËÚë%â +ZŽú&³ýM]*ßx ðKô‰Æ”ÁÿœWï_•Ðíl[þÛDéw¾:Bß  Ð^…Sˆ²`á–DïeyÞ‡v¼h@Å& àìÃ`lgu< ƒÂ )œàäýJí‰íÀÅ…¦² ©‰ÔftŠêûBã~‰W$^¯}T&+¥ùä=~Ðë(vÉžÈÄ7D íB ÕOóêq™šãÆ›qÁ&PúCÎT&¢£ƒÚšÅÀ$牒¡Õìïýú@L*§ã—œé›³œ]:T™¶Ð"Ÿky€ä-Gú~*yU@ÎãçÑÛŒï9Ò;?Làç$ÎÿÆ€¯DÆò|~zúß?}þÜðGV `&ª½WÆJö`! x¥èñpÈâBêút¡Ý_Éÿ(iÐ)køG +À;1ܲV\ùRá™LG®Odàß‹È7s#ì¼mΩù£ð÷ÉR4‚è#í†T&-Š.v¼/ÁZ€×hfÿcgšX¿ªj„fÒCKžŸ¢°Ã)!m[QÔÿ¶´:­£]MëÞBáÍŸ§»Ø¶d€>€­Ê8á¶Îùø&ð+j„*RV?J ;eµ,ÿ{¼–ïñ>$(hw>ŽÁŒ S @5Á4@¶…°`^°˜i’s°¬‰Y²§^š×mË þðóYä~)Ù»˜¥BW|Âå¡€;pt›[‡t¥D>Ü‚,½s-³Oh»\4 eLu„™ÉÆ©&øl2ü_úOÓ°³ô8<úТ†V|©éÝÍ©ñßDÕ6ÝÐOGÝ3{{–3x 4•«<üt ÷ãGóÓæøÍ8€9èkЍÁ‚ÿ +giÐ$$ùů^¾(ô·¼r,Šî Î5“ÆÿJÿ¦0‡¬Ö×·Ì0\ËiólËšìÌl@UiB£O­»¥ÚŒIpÝÜhÐc;h6TýÕ¥× p@n¬Ã +aâ-6“K—àÀ?ËxiпXä6®þ5Û2=@ç=+‚ôÓÍ‘oº¨á`öh…-jï<õÏWìÓðú?¡Ÿôgãgžžœq"ŽÄôiS´„ŒªÆ¼K¼¨èù6è¯ý ý*ª`É”—öZá[ >êLzŒº4 2gú Àÿ­/ +ÉÆ¾g ‹®Ÿ•Zßk¶©€â õ„ +x“êÉñ赡B©±Ü!EJB`š”õNURΗsRgÔ¥ +€k®!³l¦rü0[žœœã–â ÿ7úäU¶-s-=CI@üy »8ôUž¡G§h€*».ÖVõ8~†:ƶCÍø}Â{èHÂ{T,5§ÏÈo{àGØêôjP‹Kvb«?[ úóvÐvÖ@iÏ p}-™Í‡KM #Püt¡øý˾ÐCö»åßÿÇ¿ÿ÷ÿwØÁn oeMIÌ7ÿò§_^wr&¿ü)ÿ02Š‹¯žmá÷†•¡|ðÇþËWI.ó ÂŽòôFÏtÀ°\–Ëè.$ ˜m¬ªîS.þ!~Yqt¿ñá_ @Øëë3E°¯[Q–uؾ  e¯[ÉY œw[!DZ8ñ-ÛVéhž,uö}Œ¾ùùúÚ>vphþê"ãÚ•¨‘è·<©ÍÀÐ|•z€©ÿˆ6ÖãcEëßÛj¨Yöß6æ;i+œæ¼|„–줊çw×Ç0ª=%Ô ÿ¨Ô ½¹èsíEqKƒâW7Ð(àé­?yHÆUæ¹€â?Ý€…úšÿOiPíyrt[Œ3Žõ;†ÜÞ^ŸùüòIé%ÿÞË!àŸÙ¿ÿ÷ÿQ«~¾Uþu.þ?É+kí‡1f”s5¡Ä?­Ûºr`†Ö’k.7;8€Ò@ÅT´§Ò‹_¸‰7²-éWMm}ªÍu!iz!G¿ößë”¶'þ5ÿköIeSÉ¥‘Ÿü6œÍôj…¾ô \p¾F•qÔ áï8@=m¡=Úð?_V~¿¡Ò±´“ç¦DôdeÚMò§†° ßF?KõÀ„ÿ!Ò|þ|?àHD?_ »…?Eø„àbŽª€YƲ‚Éï'ͨ +@›=$?É+µK tº.\æÕA{/Ü-ûv©¶i¶tïqS3x«k¦Q)8fO2€³(d;bmN‚QlZ.©(x»ÜX#b{A1Ûb8 Ó“ElœpouVQoß]ŸT_c?ÙÄá—Q4r9Ï(¯“ Eîu>h 4€w8†É `¤ÌbRÀYcQõ'Ôš/5Àêã-Á\Ù¼ùHú{ÀÏÂÜX%ô– + ¿ªÑÿ­à_7ÀÿñÏÿ¯­µ×²›¦8+Aü‰K¦â´vŒºøQ„àà¼:â:ŸÈ©lƒ}ri57L!w”§’TdZ¡ÁXiªò¨ÀÁ¯2ðEZ“øÏ%|H×`A˜·Jþ‚P§·4’z…Nˆ?‚Çe1rP( Â!­ê~ÞŠ>€?îøÌ§†¤mHïíÿ³³ˆ¦òéó®ÉH±æôí¬]0į Ñ`h2¼ 01f]GGDМRyŠmÄjÅÙGœ¢hBš,­º`Ïù˜{Z~P<Õ:àçåNZ*œÕ±€‡û*šRÚ?R €ô. r͹4U6wÎíóñ›pa_ìsasÁxÀÁÁ1NÆ]Å+] +ÌW²­è³bšå.ù·^*ÿ:–%µüóÿù”'ÓãÕ`™ææßïÛüy®Yj«nª­(¤]'@ƨZFïcnAPþ¼õçð‹›®Vø(½¼Þq§°ýÿ´ Ð~.ή)ë+þs~ˆ@ +ä_êÓWÝüÇ(-AÔQ´&?Møq·>*ÔÆa›óʼnv;`qærί©°Ýfi¤½HwLˆnÏžÂÅ€óWöº-’b¥¶ñ€ü÷ö $"PèO€ù©\ýG_ P D@­ñ¼ìIŒZ¨‹ôÔüÿuµµ¤…žû¦M݀ΌX¤ª-.À<Íá,]RUr//{DèSåÔd¬ý=Wšë|û˜v¥ý¤Š…6^Yü2ƒŽðL²ç€=O ÀjÕEÒÎÓ¡†Uî!ƒfC­‡õü·ª¨/Å„MA‘é(žU…x¸üôðð”6È€˜‚€[1€ë<åÞ›4_×üÌè€<ç…—6—)Ÿ9X\ß°ÃõÉñtA æ+yF$Õ“Ÿo’-ðË›x©Íöqü¬ øM@ƽq`µuTÊÀ\$üŸx›•kÅP$*¾ðuOåšcÕêÓigÓ¨#äXB»Má\}@®<øç¼ªUu +²¤ÚlPêìg&>Ú;À+¡ùPîëJis¬*ƒªìpšô5û4kãäŒØWkñ)x±+ƒ°)ÿ @H—ùÛ¶ eNV[™‡*¨ï¶ù.Ø-ø’–üF`7`Å,ÁÆŠ$jÐáyÀØË%mñRpu®VÔ=Ô‰ÜÞÊÂå}Ô¹Z\ŠSæ©Q+Ê«f'êH€— .vªÌÚR¬­T˜NTÞØrn}Z+¹z}8w,ÍKÌ…"×FáçM¦–>Y4À½ À÷œ†ùùóÕ +¾îü(S§2…*N¤_sxð÷¨8¡»‰;Ù’ àÄ‚Q?¦W8zòŸs-Øõà/J³æûF0þ‡ À»&ïuWÊü•LÏÔÊ ñ½.E†éoiè#ÿö<(-ðW*õs/»Q Vµ9¨s©ËƒƒûÁÿ‰ Çð?ª;Pi^ûû°34@Z„ÛPÆ02òG-WÐi®8Œ ú‹ÿ«|Ò^ªÍ[28ã™)õå@ ÜÃÑ´ö½‹Å÷_Ðtýù­Î¤&N~ØéU‚nÎ"ê€ØþL´‘j9ÛÂO} û×÷/Àr ß6R#bñE~Ê$•A€ÏH|ð;˯7ç§wÇô×h‚h†îÑ@ë²öD .–/ü¼»(úaK Ñ®Wþú’„Âm¦¤—Ëà•àZ¿jõ¼RK~pz§Yõ°6Äj²o¢¼b–Ñ*¼®_ÓLÛFño€ªåPá—ØÚ|1ÀÞþiÙ‰ˆ>@uê`ƒÑiŠr ~ˆ‡PY¢^óo† üq‡rÐAž°$?ÿW I¬ €ör]ÏBŠàÇIUbý÷ìþãwˬÆðÓoqW0S%…ò™lis€r@¦Z_—9ýŸ9­zxÛÿ¢câ¿ÀÀ>òæmþÀ +âÕÈèi.Ôò¤žïqdÿß9- iáŪ­׎²â?p3e}×pK]m9špßç%q¡„¿üßjõ¹’Š*„xíÅW€ŠÕ彎²_‚_ž3þ„- ¥’¿“5+]ºéËðÍĹqŒLi"À€ñ"Žž¢@VîµçeàExÅ‚ýHà^R gê½[Àÿ44@:!_ð€Ub´ôÝÄ¢¤_Šô•R¤K|žî®©{q´œÔa*0+8IÄ{0@Nïf6÷)C($uxçK¯–PÈÎìîÝyœ²<=rŒ.H¯à´ +ÙÀŒ®bÕGYÿ45Ëñ†æì{†˜Œ½‹0c31°ÎÎÆ¾ÌѤ+žFGC`´ðû/˜ŸåOÇÓÂÂjø+QüãM€0CúóŠ‚Ñ6+Õ'¿Î³_¾”þÛ¶qdì3!•‡aߨ˜ø­mÿ7 €h_1ÐÏÒïuY×-…ü–x=@€˜/‘ÿ³°ŽàG ­£c9M?Ðþ?ÄèNÆÜèx©Ýs ¶i™ƒà‰×ÞB*±+ PC%rôÿeŽÃA´ÿ¢56š™5W ð b îÓòPp »âw…ÇZ»8âßà÷8SGÅ„Ùà 8kod*€”£i¤åHs[Ð3B¡ûmz™.k@£Ÿ9¯zP;8Ϭîø‚éx“Wüw/À»ßèí¿^1ÖBŒÄöïÒ{Ýaær½n0ÿÿòê* rº Pă7bø—a\"AK[‡©ë/ÎUÒ®Lë$êæw§Gy[ƒµªgÈd;qvo˜F`é˺ÄnÙãůu5Ðyà’¾8ÕWÌÅÆ‡ÔO¿ÒÈfu‰ 6# ïoeqR9>üü{ô{ÜlÛµìÓ(àP“*ðÿC9Ï3Ù{Åßà4þ 5ॉ¼åÄIýåm“‡GynÂíý­ícÈ'ÀžËN ” ýI«¾,M¦@-W  €½MF °’ +rPg«¸¢^Ø¥/`ÑþÓp Ž\ðK7ù·KfP/v•Pïe/Pí‰íR™h4zìøLJÜ=Æ4¨;Þ%M+Šûk*€êò‘`2Ÿ åÙä–ê’j ò[~™?uMŽÌ`S’™œÝÚúm3´u±-£“úÏH@ˆ+´ ¥æˆ€o Ê%¹#¸)êD Ï7ø/àÃÛ· žänw)ûÀ–ðWƒÕýÖw¶Løäz ¬Ss@]ûé?…H{Mt¬©U®ä G ž.Ñ•–DêÊp·Ç¼³• +±™Í´ŒRÆÑÏé8‚€èþ·FBd¾¾\☷\`­{pòJ<æ²@t‚NGM;ÒÍG¨Ðá€{Óø‰Ö3?Ìn€b†/ê"ÐÚðqòóÊV÷ˆÒ”ðg¢töÓ³*þ»Ãá*ÙèQ½QD +ã3Ùÿú1=£Šlð€H@ôØÄ|×Ü@¾RIUs$?‰j4ÏÀÿQ:† þ×Ë+ë5Q»\rÑï.°\Ýð6•~//€+CíRŸFäÿ2»s‘( ð‹ÿúŒ<+áêQ‡ MÈÕW:´W~V+­›UmÊ:P&æÔíÞì òËP4ÿ}^ +øåÞG4ú“jì+.jåð¯Tÿ>˜ÀûqÞA¾ 7^P‘€¿øÿ09¨ÍŸ¿ötw¬Â´'§ÇϨ!¡<:?%þw +?ÉíF*TŽÆ¥sô=Oß»è2f»§#Ñ^9¾Ÿn!¼TGÔ9Áµ·J(• +6(bE®à}atÑg,|h¹CY̓‡.ëÌ-­p-hKÎrö¸ÔïS§¤¾mIñýåþ’ÿüÂOò½ ”‘J)mÓ(€'#—iŠ>T) °ÁÐu£¸,üþÍõÍ¢Þ‚g”Ì7N¶àÿØ™y|©=º>9ªÜmÂ7¤Aÿïÿ㿯Ò[²“ÿ¯@IzTdü¨½ñ&Û_ßàÏë$PY“ÈK€*þø[¾ˆ=]÷ZÚM Oó°…¨áo±·\AÂCx•¡8q¸F´¾áÿSa¹ä¥·=šmCü—VWI¬Î§»S/|'Ñ–8¬í RâA1nü£¬ÏJ—÷ÅâÐਊÅÙòáÁþaNÆWåe»á¼m,ž“`Í×–ÑÐo!ÓM*aªþUè%ƒØ P÷è üD·ÊvÚÿº±8#ÖÞ èÁ²ž +Œ+gè,cTj<´UýÍ÷(( ¯±W/æ›ëwmô$cõöNî$MEfb/ Ÿ%ÊÕqR.õ°• %³~i<Ø_–©¯(€D‹Õ+ì…“œ(Ãña®çÁ?1lj¨á‡v '—Ñ ŽI7,@»µ1± VUE$b(\1@ákÏh òÀéqWf¨¿ØÿÙ­Ôê4±Ÿbhš—¿åöz¡û¯o{"M.üGƒr©ìÇpƒHƒ|%;ñ«ßÉRð5Q Eðü8›(s/g1€`_%W ’¹h%\’® +Ñ[ó'³á/c9¯ìµá¨ò^‘™-¡2¸º¶+ëXƒ{yu. h/`¿ì?*`…ÿ’˜ÿ࿬*à‹¢ÁöE´*´Í #K¸ÞàÞ­¿1-›Ÿë³@üíüœï1Yx/€'ãgp< ¡í@¥ŸöI@1üÙ8€´-ÁßN@¾ +º¿I2¸YÝ \1€øþ(€w*aÞŽ€#gÏL^é’æ +0ËêŸnÿŒÉöÂPÁ’5þ*œ2@[ˆQˆêÀ¿ÍÁÛ_‚5Š< €Ãr²g€øç Úf\ÅœÂzÐý§¢E§„Ä „ŽÉ@ëX`gØ)ÞYEŸ ,®[ +ÿË¥ímy}æ‡W盫Tw"Æ£¬Ì „€ŸyW±ŠÄ9=§^Ú£q¼xµ¸­ÇK–4"¦[æ²÷ª"ŸnÊ ˆÑZÞ^-^ÿÚþ Ÿ?€Ha ^úï¶\"®×eSÿ}©•AÃûkò<ØŒ´”Pg€Ëeû©“FEèØàèP_hãªÏx†\ —|¼¾È‡±©ëSÝñ¹+p Àezé À¶%® Gü«n(¬y˜ñ¤+åá|Tœ ¥AK}HU"7ÉAù=¦$¶O ºœ4¹ÓÚ‡ ܦlSIË×!ìð¼Ä´æq”Z0^ÈöêT¸¿I€°=ï‹ûg¶b‚}Êåf€Ž*æ1ÿf-À;{u šŠ5@ ®Ðü7Ã…Þji}rAh¸vyQ—>­çàv3:³øµbysS£ pê@@»ÛTÉV† ‚£ð±*nì½C Pm0þS:gæ@*¨%ʆŸÊ™ðMÃû.g6L)gJ0ZôÓ6-gåW>‰}ÿ­ß¢eº¹D›V ŽP8‹~9pÛþšì®4€fG¤Í¿à7|á³Ëí³t刉ëÅQÆ\œ4ÊW²‰ÿùÙäg‡¬Å6@É`ü™ÁÚøÎÊøTøŸ4€þá¡øÿÞ8†ù÷ù.\åkœê<S!Z)ì¥!“æÔa¸H41q™×I y°8†T–×»Í?(æ?ñÿúpœ,ž—ÜÛäŸ$=¡¹©H€½Ê$ ÿL½ày©xÈ +L¨ò[½û'‹$­áë à±ý >WÔþ­‚ýX~Õ€kío“ ø#ð½ÌJ¼•ˆúâЄ<"XY9ÙÿVü?ËÏ[Ș®nî$s©K™ÿƒÿûþáóCÀäÜÑàAfÓ«×:ZçÅuTfºØ"¢Ÿ…÷!Ö×ÞÖì‹~ˆ¶ŸšðˆÞQHe`"Ã\9ÌuTÎð÷µ+%9‚ÝÄŸžnû¾‘âúh]X±T½Àúæ„þÊ©¢Õí @Ød75ºïF:ÃA2`žÂ?2|u@¾T®Ð_Ó\»ÛK¯(IÜ)õàš{ú—þ®+Mh¦FùLvh€²øÑ»ÀoÖWbí4Ïx9{ÀŒ(ohòQ7^¡{ìþ•궸€¿VýàTŸŽÿ’N%…ü$ÓfÅO(ࣨÆN®ˆ]£¯ŽPüÖ"»Q[§.ËíøqŸêP dý p(o»ÄˆŒû“ø!¶V¶¼“¥ª%Mûà1Ø1;³P´ (ž¡÷‰Âf<«Êì+ò0(À.°—m’?)ÔØþ&Á°Ç ðå ¬L àw`à€–[Å?˜#òÑ.ç ¶D»}zðjºÚ‰çpE¨¤Ô@þ7DÞ!@ÐüKÑŸ^¯—×û¼CÏ7â@®TÇ—9x]X²óíé±{I{bL„.uÑê@ê/öábVE|~•’uÈ<·,98¡UZ‰‘>Ù_þÉâüâzy ô1&Æ€mVü›û[õz~]´€¤„k–Š(CxÕ¤!¨ÏÆ€«¶°_ß@¿4ÀCs€ÛS0.þ±íÂßåìÃã×»¸”ûÜâ©”(Œ?'`¸Œþدɿà%eö+?ÿÿúç?Ãøå3à4l¿3—üñÂáЉ,Ï£ÀÊþËÿíýãÒɽ˜ÞH—vÃu5ÞjåWhÈËL:;ù|ªù,@ptj;ki|…1º¤Å}z3ùô Xö«nhI(Ú©m ­€ãúUPç’µŠ^Æ8ƒsÂD¼§µm¨S<jù«Ò€VÂ…µ¡(™s½ÛûW貿M0ê à8@À€Ÿ›€Ä¿oð– •  °ž¯²–ÔòçO·'‰X¡5–˘‰ž2WAö¦;\Å7c²TÀíã^Ñ-°ÔURl1H_˜xº3 !ã‹D„§ó¤Tõ3¤aä%m4Œ|€+sàÝ¡(‘>‹®ç8=½¼¼QœØ>*¨è«¤?<Á)$]šù_QD4? f€o}õäˆT PhÌ@´ ôÄ\à#{÷Ÿ?áçKgí£J#Û¡ÆW;”…ÿi¤?/±ÿÏâhÿû¿bý àï;$Û¦ ‘ùó/?ò7ö}Ä©ó5­¥þŸq,í#.­¨¶k—îÿç¯Ù`¼*ü½¼|µÂßà±—»†’˜³kÃJK÷¹T4 /}e'qšå¶ªŽzŠý)\~A ´ŽlÉ»ŽuQìÙæFEúé ç£Âm}(‡ºÐvFCv 'âhéøcž” +æàËb@„Ó4J +ý|ƒúPÿ(]·}A°ÞóùؽÆÞ½ù V½y†R ÄÇHß }\ È/F Ü¿BœÀ˜ çO)— €½OQ˜Z5á@MEÑh\¸DëXãîÐ2Nƒ pOÀ'PÕ' k ý±´ €ö2–áooß¹Ñ븒ƒµ’ªz*ˆs/¡# øhßwû¦#Ûgê;JÀrÞäo¢}—ð¿Ò>ôN ‚ÍÔeõ/& gŽ F³`ò‚x,5MSWûïý‹räsX†ÒÈhŽ} +‚ ‘ó[–…ÿ¯(€aÿÃvJ,ý°ð¦×¸@/KþåÏþó/ÍÔ(€fÿE˜0*xÑû •V`‰õ/þ¢ýOŒ=ø7¼Ï5¤È]¹Éå&rM¢i I^~–Ú]-t¢GßL¬ζtLv¸!ö¿à݃87Aõ=ÌÇþoNV†êN ‹r.¯ôWöP έráG¨‰ÒøRí«aÇ>$ýEª0þ“6¢ËùšqÀ¸`|™I Bý£¾6pC±³b­ì(àæþ [?¤r‡|˜»1ìh€ÛÓ0€S_ª­Þ­ÞRÐ,ؽæ6r#@Ÿ¿Hæ{¸¯kg%®\®’¯¤N£F`·eFé«=…í‹ÀºGB¬+á‚]À`b橚‹óUøo%ç÷¹P™éæ,ç—§/}Ñ +­|t-o¸¨6ª¨€(§ö»Äé´‹ýÅ­Ö߯x(ªtû?þnë;ýÿûoŒ¼ðï8t˜wRžÊŸ£P‚h€Ûh¦BúsRŽÿ—àðoûûבjA %ú¨Âü¯ó×2MŸ7o[ýi PT&µ³ðÎU[ÝicàÌ •¨6£I¨çÅ Í®X×8M\žDŽb<>.ëÙ‡sU^…I sÊX‡´6՚ؠvO¨6'¬MhE;ÕÊÐÚbؼïÜyre#øŠWW>²°jL}f³HƒqÎ?L›þª„˜¡è¯@áúÛ¥À;ñÿ“·ôÜl8 €ã|g1€­)1€¾†í?L· S, + ®ôSkÖå×Vq×¹Î\$#èÄ«vöת}Á¸T–W!x”<þÂg _×Ã"AÇWøêLÚž0‡yJÑÙôÂ~Æ«‹fÿ/ò™ä`q´.‹ÃWk`œÊÁÔ Eñ—øOÚ$>4(¢-Ɔ›Ÿ«AH¨ˆG ˜ +øE(@ƒ?ðw`.‡ÎT¥>2§/ücRŒaè^æiSQ“ŽÜ[\à+ ËÊtùeð0€J!3ðGÀ3€ýÁgT2m°ü{©ôréÔ×§>1öÝj|MíêÕ½Á^>\^„‹¡¯È§H–ØI³méþ-¥[i:áFö_â5]ÿÆRm\S¤t¶+®2ž›8µƒ' ’⦠HUljj|ÕeñG i'(iŒ®bH?ÜuOê_ûª€½¿}mªœÉ ø®¸cË·€ +@øúé ˆð6x0¡˜ÿn¯ ± 2¿»Z¼ðzºS_ dúC²U€A;íûIŠ­·–Ùvgø/ÜøÃmAž¯U+Àð¢Ý¯ú±.€]n éÓfdâÞ¢vÑê¦÷€QI—íË2·7—ç>²4wÖ®Áÿ«àÀ#G˜èTÞ£×üKõP`´×O÷O˜&Û¨À•Й1DÐãK B¤@<U@þšÂxé»Ëêÿ?>=9=%à?L7^M˜nn¥¿,etëCœ +éÏHƒÿ«  ‰¿  Ÿ«Nÿù_˜xýcèL@tÀ›·¯ûûFµ˜64Àò¶ṏD6ìY(ó6¡~BÐfZŸh8(Ñã•w;.¾:` +J¸¢Šì½:8¾¢eètÐŽrÿoâ2 Õ@ÖŸ‘ÒÙ2Z¦ q @¯È?mµëš$;%n&9¥MúD3ÍÄ„ÌÑ¿ø òÓJ¬K+Òß/>ü£ÀÇ (0sbö¸ÐÖ¯@ï Äßסh‰=ÍR zv–ö<¤ÙÑ]*x¾çdù×Ô—:•ÚäÂÚÒŒ€ÿ³C¼¿ýà•÷¾êvIét3¹CX†M ã°ñ´¥ôøÒªtŒ¥Â°+Æð_øÿdv·¼:æàØwìpOò’HU8®ÍÍÞ%BU …/ @…Ø(-!/½8?©q†!8Sèý+Bð=ÂAøô«Šø4PÒ+Pßtf±ØGsDÔÈ“H#x¢ØûÑôgæ +y¹òp§û~ÔLêTÑà–ì®Ø<çÎa j¡Îl7'¾³=AYü.Žó‘ƒQ˜Ãÿv—Á–/±\ûë3ïª÷[Ï¢ÿ€€…§Ÿ/äŸè¸ØCk$§i](€°˜é“„¡Þ[,µ_ݨ¶bAæ77ÚIÿŸƒ>úÿÓÁ/AâCÛbÞÀ¯sÁ×wd† U¹n¬ï”þçð/ä…yp/ø·µ  2TÀŸÿåÏþ×(€W¾æLÀ…¨jR  ÑŠƒÜßÜ^{&?=DQ½¦*OëÒp¦eSÕ°ªޏ¤¹áVø³®>¡—J b|º\‰H½}´¬|x©Ã89JéWÖO`γ’ª­¡m‡0•üP~§]œOT××öP-9íƒÀ ŠŽG§¸ž´Ô€¬$+þh›ÿׄk¹b}bê=àŸŒïÐdRZxI”5Êð~¬Â}³ÅXDx¨ù3ÑäÞ¨rbÝî½ÈØõ_{·Ú‘7¬Âó¼"†{ìªn™¹Kg%mØÛ®^ÉcCŸ8TÊòøàDÃ!q øT@E½¥À~{qrzvÖr}‚שU åùzÍ•¦ùªð“ŽÊˆ.&‹G{„Ðd ÛÙª¬é‡íry¶<>ùr’t“k!2â?cUC|~zþ:Él{Õþê9R.[˜AïƒS{·Øë¿ÞÒ`ß%å<¯¢V ÏúHo€0€¸þÀM*íìã›·?ý‚×":ÈÍ£K4±ÕÞÕü7ÝÄÜ€qp ¯Ê5š´:c¸¬öé“õhØ?W]ü[F»JE{¨}{HhP\¼æ‘KÏ%ªyZPV]ïfµK(âùóL Ð°¢€zùš.Ú ÷Ñ>0=RmÔ3¿âèøREA©¥6»GiáÏüšÔu + –¾8Àdòs»Îw€ ÝrUh€ßy8G¾Ùàh[_"EðnB¦è€õÇ‚k§NÏ|*°ä+wMŠ#oK +1qä:Œºe“;FwSwÀßò£S1è˜[@Þ Ë$•tÿ© ðÁ¨í¿Cæ`€TâíÍÙaÿ.‰ ˼u+òu*àÁ §©:XMã(V#­Ò6b[2…!VÉÛ( ªç9¢g§$Öß®²$ 74ÀãçO÷ÿ×7É„}Ò°)‘^ž;,zƒ‹q¼8»}x²I?臶ØwI1€¨]RñGN1 ÿ/Ã#P&%ðçQ¬&ë·ÅÔSP¼¢"…´—莖kÊŸsü™U¨µ–Ýi1.fñŸÒAÄBj õB=PÂË„¾Õü(´€ ÁH Þh£uŒ¹¤2VÈ©!ò€g‡ã“aøÊ¾dÅ{5qWô4ƒükû¢\ñ¯øÊšJãGûÞJù8›ç27°ê!ò÷¾(€MlfÌà=f¡þ•ý  °ÔòÍ£¿'€ ð&.€&¿N¶íë·4ÓìAÖkðÏVŠíækÊ“>¹ø¨wì¿ÐŽ÷öu¾%dqRZ@G­²øŠïz$l©€‚æGÔ FµX3Ë…·h‹ÿ›+ ÏÅ÷òkü©0‚NgÙùõïþæôðàE½MWë_*`’¯¨€—2Àã³³3ì9¨H9`·ÚPª‹S7@ã¤þŽ;h'€}ngò<€5Ð.bh€OËŠ’s ùÿ¹=ãd lÚšHh™ìbpäÁ-Ïs€€?:à>@œ•µnÀ5 +0c?¾þñ§Ÿ~ÿÛÁŠÿ¯…>ßÿƵúôøtw¶pÈàKíÎÒ½FËnt“oÝ+øü2d y¼½öæM©ÐM2\}›(Ê?…G;RËð9[jËÕY¸c>¶¤ÎWÕl|«ô§Ç»ûëC4¿Öšà×Òè¬ © šÀ.õƒ~P?ŸR7‰À}¯ÜB[øù¨*¢8¾"âÏ+΋ôš“øg64Ã3¸ +ø„þU²{òü¨Áÿ[¸ýk1MãtÀdôgÖ?½*ŠÒê’ó  ŠÏ(u¿PßUΟX1覴ÉGP=dxK€wL]räV06€{ƒ?:†7ÇÇúÅê^±)SXU ¹ÿü×#™–G/÷ösO}D%¯ÙV /¾¬Ôg''âÐ +wôqlŽ:€”Vj¼:"À$¡îo®àˆÀpv0€"š¿ÖŸî®ê*ÆFr Ô<ŽKPøß¡¨­CßÒ0iàŸmµ\‡!_Г +Ø)è] ôb•2©€?£P™ÙØ€ÿ¤|Ö\BÀIµ(Iºÿdüÿ%ÎÑbq«$Æÿôªôbè¹¢O¹®úSË‹ËÒâ÷wŸPráXx^tÕ/K.ôš+ΡԹ,åx¯Æew‰ºœoMí “®Å1ª*ÎÔW˜=LU@ݽ„Øè˜Ví9Ý4ÇéÄÂÉú†§|N Š ] _˜BÅ…[Js€ò’ˆ0ÝQÁoª3À¥¯ ໼VØQ@2$8©!œ X{7`† ð‰P»OÏ€Ñ|®]Ù³ Ajœîìì㻢 äõÀþ½ö}Û‘_Sà•0µr·çq] þ\b¾¹Ûòžûú6=GúÓv¨Ím ATÂ¥5m‹å¥€oô?g2Þ`Ÿ'?D+Ò®€Io÷ˆ@óS0Ð(€ÛOŸù\R!à¯økŠ' €*±—ŒÓF‰–ÕAlÞ²Šÿ,/ª«éÖ‹ÖÈ €Iî›ãïâÙ( *`Îf6uÐ)Eü£ J~ÿ‡Ÿ°YèF†¤/°ž®Vô*ñϬ ´î¯ÿâF–Ì5£ŒHzSeÛÜUJUà£ìHË?Ö Ë ŠY•v©ª›4qïàèBíúŒ¤Rž~¾È#ËQ¶Öxc¡@5  ¦@Yšž-Ú€ÍæBÝ@™S»{{GQ »%HNR£W¿N‹üCÛ »‚Äùè´b½Ø¢aG‡G'Ñ|ËGÉU…¾zN–w>/¦ß €'Þ±ôé¾Ãê— +øN +ç~`*ímNCºQNÒ _ ‚sÁGÀÉ^Ü•/ +Ÿ‹Ã˜..ÌíA%³“¹JT”+^ÕÌÕ›ØVwï½€„ÿoñ!šãš9‡&!(äçéû€"Íùͪî¥Ãc’h|6EÛ,§ÊLûO5Û.OOŽ^嶦Ü)Ñ-1 ¯DܵpŒ|FBé%Géˆÿa&¯²ÝüïK‡M¡bN—ħMð (ð<(ìÏ€øÏ8füÿùÏÿRC1ÿ´¨ß÷w.üW}»Iä…èTs=µÿVÃù€šBƒr®òæŠ|úä£ÀHreou¦Tµx±þ÷8é\õ\rȪ¶…)A÷¦îpühSÏI5«Ýòàƒœî½¿]ìp±Ô~hº&…­Qï u¿DDÝ{1¼aÊßü€åxþå ww?´ø} rIîÇoð š‘Üïj'@@\4ZÉMªƒ– ,1È6õÅ$sàÀµ„‰ ®õØ~ƒ_РÖk’8É‹  4S¯j«…\µÅÉâ°4ÀïåLÑLi¼Ž×‹½£’)£0þoík5/ÿ»½_^Ÿ/ð8ñÑyt¨ˆÄÌ*Õ1Éa‚Û +ÀžÌcopRwÑl´XÀ÷Rv“´NÈocáAÒ xŒ-_,5%ÿ‰ÔP °§W6¥ÆÈçÿãT@˜ð7½ë•*Û™¡“PZ& Ãû07À—¦mù7{½4 —ðƒ ôGþüç?ÿU6¥ß†x7ùšäOµ4<ôrÏŽué4 óo€ž¼;‘¿G‡UrAí¿sÀšÕ«œ…:ÔK눩Œ¨xi3TÆdñk®b½:œ«ieóíE¨^VÐ5ùl~]øàêÏOõ„ U1-–ªwt»?ÀŤ öYU%ð¬ú<Ÿ€Ú9×=ë1 þ¯ÍL–ÿñy›7tòYp]ƒøñ)Mà" Œ¿9YýVÉÁ9 ÄGÛdà?B’CU:ŠÀüÑ `”0RðG4iQ 7>sa ÝfÔ®´Ÿ +dbÂ.oú¢ŠmðÊç*éR\&(à#K$ΪŔ›ÈMÃíý ÀûûÑ#B# +%êDM‚û%qðÅýòêôp I²R £WØŒ"5<॓oªeZÉ‹x(c4‚-Úµ Ö}˜LuØ/m‚íyȹÁü<d5€+®Úþ5PO²ÏoÊãŠc$½†Qq(8·‚yzÎ…a™XóÙÝÓ“íjÃ@ñkëŸÄ.‘ðký'gß¼™D z›ìlÞoSMs _·ß…õ>`þ£Ú­ø?F³Â¢:`,F{4à¶eQ…øP¸ÐU­î—]6 *DÛ¬Rœù~©½½…LÜ +|N +œ;%®©GÜØ¢uù­(+Œ¹¿•_â +zÊ‘a:"ËåÕ ÍÐ(×±·ÇpÜ"5$ê-*‰!g·8(l‰ÑU ¨·™gä] òkƒo—˜r¦¿ói ž¬M½î~6­¼þ^–Lª¡uÀ\€?7¹\0€ó³Ðq·L9d$Ô´ çTj‚ÒhÓ¥Î)œ""‰Ëø  j¡Q. sªÝ@Ã9-ëÊçFÜß-ÁJÌ /ï)ušÆï²нN$ S¯$¯ãM<›O*ˆ#rŒnq€* ãŸfG? ð¨ÁÏHÀ ™ç—CeJ}ê?rÝœsìÕ(šy÷é3. + ‚%³© ¾&mûŸaQùÎbC4úWò/ÿb7`ÚÔ?d¾CøK¿òeæ…<–œ¿:¤‰õsŒv ÿ +ës¹˜©Ó¼‹ôQ`‰rËÛÜ¢'ø3³E˜s88D[ÊÍ“£ÁÂØï 5öŒ€,èx3€÷“ãúýZúh!_*¡r¦r_—˜y¼€3Ù"½ÒA‡¤ß¥[`h `­WàÍÚ»µ¹\~€!€¦Ë\5ý2†¦g7(¬Ïuo '´Í9¥¼ÏÝ€`Ó~FJhÕ +ä^× êÄ ’z£Y{Gõ£zaÿjÙÛSÉDì¿ ÒöÈŽ|–."ºi“ +PÀ¾ÓÜpÜ»úÈ­¢5 JÏÚרti•6TÛ!Cœb }²ÁÒNú®ßO\7›øW7`B¯@<çÍãÿù™ NûÅ—%zB‘(`ùDçxGQ—錕á¸iCõß*Æÿ4ðÃÆ‡ ò¯˜ÖO(I7`›ÿçt€f.ú†'/X¢¦óÏ(«X¯Ôoþ‹Ä™4×Õ¦ÅÍí€Ø[ D jiË@ ¸CŸpå%GéyÉéŒ*=/U+;Å{¸P2€€KµºÎJ”|)$?‚_áÐ:üÓÏÏO.êû5’0Xœÿ&oÙ%ß½†´XÅf&ždh:, !ݳí_ì~8Æû÷3Иg‘N€Á:øãpž5 °v7 ÜÇà—qÞ#m¥æ˜*ö¹@Àžop¡sŒ„8Z.=xFdà§—6ý«}ˆ°É÷ñ»/7œðþž³øèa•ŒÑ…+5~qMõPèeô*öÌ;Þ°åðp5ÞH‹0×Ý[PÐ/1k0{iµþ«šÆçØU˜ +#UhåÇœüúà =Ü@ã¿Éò­ó"üÎcÛnÏ:9Å“£P˜\%Z·æÝ¶-[:]z›ÍV7`¤ý?OþN—تñßr>~ìè_ÞfVc>rO¦ÿM‹ÊŸâŠ…Ä’ +a­¹4ê§ém\[is|Í¿X*ä1Ùw -÷85"¦—˜½ÿq×[Ivé¢Ì–H&á$½öææXL&Mš:Få%hÊ ä ’8f5·°HþpŒ²¸aè$t[Æ.!ÿC]“m«Ñh´»K´m hèÒeYjËó<ï˜+?² +½·µG¬+V|̈˜s¾c¼cÌ3l»K·³û$ç½[(-Î’g¼\¯󮚒TûƒÏ„°Zn*®²?6¤ål2WoάF1£îŠ ÐÇ àcªf¿Þ#@XâóMT€˜M3´£ÿçÀêF´MðÌ*I{y58þ3xgMbíÏ æè´Ñ—à‘0ÇÈ;Q5¢'Š*”ýO^¡!ÂC èþ©&\ù”Ik.›ý§œcbó⡱©ÀŸàOïŸò9òÕ¼Aôû¨ š‡âö:Ái-ì+Q 0WŸÉ±³àh9s»¹ÕÓ ËϬ8@ì1n T}m~td¡÷퀗UÈ €Mp¾íûo*WN.îf"Õgt€Kd( åq†OµZMè‡Ò@úo*³¶ÿ¦òŠQqæ1 ¸e#sÒè†ùxj&OÂZ¤ š„÷DàÅi"ÉÝzðAÌ©vµ V@ÍŠÀÑØ|É|úœÜ/2‰û¦´Ý\ã8ÆTŒB÷VÁêÊ›«Sõsñ*D,¨ƒôE÷ÇûºrÉ¿\ÁtÜ­ȯÍÅ ÐX +`Ð@¼‹úà¾L¾m‚Á}¸€ëß%âÕàS†l[V¡÷b¸=X•åoË "À)Y5í48¦ïâ|r4Òy­1Þ,‰p|àŸ’ÿ†jp¤Ô¥–½[Âp5naûpÈìÅ]}îñE=(5 Ï€$4kÿX 1²?–5’»H4âaè?æ_öI¯ãxTD Þ±*ðØXàÐÐаþ¢pä4R®Í–éTÄX.-cÔX¹'ÀþÞÚüØñ€¬HM2jî€t W§xÇ-™_±¡<üŸì!ÍÊ&©^’ZÊ[_ÀB.O£rf§Ñc±~ûA ©l§\†B1ï-¥Gq©ø8‡“ŸDI!žžÁý}%Û¤Ñè +=h-GˆÆ0ëÕ©*±v VPdVRî“V,wÉ嵺ûb²¦»©=³#ªz +ÛK²MŠÂU¨Àÿ +CîKÒöOâÕ$p©¶È<ƒ£dÅ 1Ãf@sÉ•„ü‚ûXáX}þ!@úoIëPò"@¾ lU0Î>dé\€-Û8#sÞÆ|ÜÙ"8=´0^Fæ 7ÈËÀXÜäŸ>[µ¤»AhtKÛ† Óf垯'©ÌQEŒQOÈe´m€1²ò4büƒÿõ½jsJ-Kô¯·ÿð=¾~½`@¬C  ¢ÈHA™¾“Ó–®ûwWŸÆè[¼*ì—§A;õé´c(àh~mû£Ð3ÌÜÕÕµùh@ø7üGÄ@*˜Êýƒ½bjQÕM¾êÀa=÷¾žË|ôpîÁÊîóĨÓMiý·–VÓîr¶¶õȧb´÷øpiž{Qº^Eáä‹®˜zø·3|vAvrƒY¢‚=mªÐך&ûµ +ú™T’G‡ɹy ÌXÒ½Ò°w—„\œØ0íw”¹LW‡#6_m¥xñüS5%må<<¦Þjò½|AŸFc’¾rß+n   ¾ê@ ¬—­O€ü–>hZà†X×nŠ@^†hÉ£–7ÊÞGvV%>˜Sóücþó<øga{fH°äÄ…OÝ£/>EÓ%·×öƒã Ù‡·y³úB{Iv©²£¬+P6¦Íwö˜‹äH\®Ô õ ZÖp7ø7î‹»çÓÿ:‰ì¿á{¤~ ¾`‹ ¡Š„ø,b“ú•¨óR±[A¢Á+&îšêŠž70Ìm«PjT¼1 + u‘ÎýHëðô×$c,Ñï·7ÅhÄ%æ¨%{$j£iåRæy·³Ë“õ¥xÙCiøü·€ß°CP;7 ù%°ÔçzÑ×ísG ÖŠ¦ +óñÐße!e‰Ø]ë—ð + <÷•=*ÔÊ€ý$)¡LŒ0™IûãoáFª8å¡÷M9ÏÝpyzX +À!(5bÒ>.V–)ð¥VþTè\­ƒhÊ,Ê^ÄIó¦ÔYÌ®bg¦Âz0›{>:èêà½ï =0«RÇf”Šuô%8úÅîF*¢P {8‰ýúyEÈŒ„lonq0 C Yvq26èNvA•)jßÜcÿvrNâDÞ~'ƒð"a&Ï(7ÀÁ&ZŽŽ,ú¦&¨#ê†Êà$½ ´y ÿ>_0^_ÛËÓ?g'û#¹¼"ÂGëyÑP”ÍB¡ýKާ÷€?yɵʼ}€VC¿R‰€19›Ô:5\”ZŸb·Ôz›^­ÊÌVz@ +>i9u…Qtû¢P£7|”@¹Qövg_uš(ÀcǤ–ŒWâß §Ï߃´zw[4\s/æ,ßü ™¨ÿOP—g2juüååup&'U¬'ÒŒ®<‡g¡o#}´€n8âiPSگ̭8´‘¤{'‹æ>éÀJcõÌ‚áFNÅ\me™O@y!œž2Ò4C£žž2€ë `85¨o.N›‡Ï€ï2þr)àU.¹.Òê× iÐGÐ-HvÜJ3 SoéÑ?n¨MºÃ9ÀçˆØDÙÎ0îñòòä<0xmß™Oše50½A·D-.5€Ù†ÐnFÓiþ‘”²ÕBÿ! À÷|k“ùàmícÜ÷Ž|úçâ´9‡$úù7 + ¿ö‰£8ž" `$á4€^°¿€]Hz!cè ÅnX—˟ᎴÜ}i5/Õ; )Y[™9Uø‘–•««> ` °Åb¨”#›DöãÀMNçkT˜56ikÞlÇ<8æôõà½4pþ^$•¯Ém*ÁfÌí…›8”eP縒€öpj‘øÖ²klÉÔtpd¸U*U 5{*þ +î Q_ÊòhþÐ +TÞ#žó¡ÌH¿1‹ÀÝd\€³TíŽ8 í” Ø +Ó FpÕ¡@'à)Ù%øz`+@ËÇX{Á^ˆïuÐwS«[·¥XgC?g°AßÃ^íú7‚ÔâÚkÐÈßR «Mà6$ +À ÷_B! XfM—«h(uò ôYÀÑ>ØM&©*Õz)à PRMwA€îI®÷ŽÒÙ¦+½vm§“<.;y\ó:=ǾáÃíøÿMbÛU…‰=UAž7`£1Î ý½L@:FØ`¸’KíElÞ¡FP¸'nΕñŒfs\u‡Ó«j€“ ‰~£}:{²CÙÔ1‡ã d‡=B8Jt"£*I-A…¢:Á“Æ£ÇóGÛ“jv´b¹K¢. @åÕ1‰HÅ:ýc)0GTÒ2€© ÀM隨 Åñ&P«ÜÛ”70x Ho¸G€»=ø;U7ùúG×7øÇÕíT¼UÊÅ·(¨ÕZÝéŠÄ¾zü¬™MTòÏ,:€…@¦\\žhyíÁ˜œÉšÔàF²‚Ì#ç éPèUìö "ëTò*Œ_§–ȼ2™,-3žu§Ž*c¬:oÏ‚ð=¸0Vù´ÿCæ…?ƲžMdçÄ`Çj»û8*åhM— DP!ðàqÚæÂª+>€#½ ÜB:ƒpG(9/T +/°:£N%¬Ö×’–“««>¼( Ð+0Aê¾3›J§EÏ+Ÿ:1—¢]¼•ìàüìx¨bo‚à3]s‚½T¸±Ô)CKÒ¡4  ä JíSqðS=ÒÈGÀÃÑѹ¼óÒŠåN2cyÔÕ×2€ãÐÅHR]PÞ_Steò+Ö7˜Dú~¹t_òßål­-q]°‹tF¿ )Êõû÷Õ!”S×л¬ÝÊ5qàÞ@óÔ +A¶Ü¸<]j + Þë êã.(°Ð·Œ}¨ho_Ü·hmý[m[bÇì7(¼ä”ŠÇFÍ#kãt*EÿŽWÚÓÿÀÍ^ø¬…ô³Ù–*A(ÍÈ@4PÉØì˜¶ùãCGwò„Ü‹@{~aüÏ{¦²R8  eMêÊÅEåä4Ð1‘­€Rµ£“¯Œ»pzb&[V| ç%ïtÌ£›  ó÷&V*å¿«I3ˆ„ÙÞÙÝmw(À“ÑÊøà0wN šmî3…(¹æçì$N4Ê.„Úù wÏG¢(iÍhh5)ºèÑT/M ©ÊÂU9à 4ãq§xì=0Œ¨„I¯j.÷ñÎV€Šàö£X”̶èUûpž’Vè_c ë½T €¬-ì×#jW`çaëöü÷0ÿ f9¶O¹d“€¸L º¬ã¯ˆ;}Nû/ñ>Ï{P±^b"8σ›²;kËÍ0”‚ªÁ2Kï9£§¶žÁÏçÅåY’¬ªl>M3 +ÀÀ|*;ÀŒý÷)ƒƒ¥¹‡‰ÿá̓»ÕdŸÚ¼k;Ó ¼I‚©I±L)ðGLIO"A£t‡Ú"ïóqíØ/|ËÕ[Š*ãÖ˜\ûV1‰m‹Æš·‚€­@û¨h}»Âã%ûÊH7<iºZ€M<Á°K|µ þN.’™G‚åÿÐÌ5°›2´UV¾Õ!À]Ü—ºÓºïÀš|€ç'XPüÃc[^ä]x>‡¶ÁR¹H€Jÿ=6j e<ÕäÑñÁþèQÆ}¨ß-Qu;ËÊ7h'—²gþðÏøÙÚüˆ»VQPé‡p“Ø«(‰r©(¸˜33ãlQÈ›´éÀWP©´Φ:maÿ2ü霅lU¼ž^b´™ qÑÏ|5Ö_X'Œ·•vFŸèdÄÙ—D `ÚNè.Yy›P oNd©ºÔ[ÛM¨®°49*@Ìùò¾2çêp£6¾Í€ê ½)K6•Å™£´Lé}ööŒ(‘õÇ{vñ)û_×Gã +øt–ƒAÖlþb×Ñ0t!X¼?ìAF8nšÄvÀCÐgã\Ö•då㎢ָðšö ÀÒãÑðSìS  = P@5€(wŠF9?†½æ…¤(šG‘ÆKaÈ€ ¾líˆ\º˜ü?¯¦^Àhë+óÆ^ìjª…nÀhËä+* ãú«Fu|¤Ïþ±Q–X•ÄzÄ@vppV=5¦Xb´‡ÖUìsˆóÓc|°c;±§º÷I‘Ü'íf"y…®¿ÁŠÊ­¡â>üÿü)?;›=‹ÞSÕ°âÅ«ÝÁoöòwѸŠX$_@šy´¸üd£ÌmdØ +0íÀKŸzT– +òù-- rë\ñ¿ôƒpæ±þœÆ+wo¹YÏz#¯ÀÆ/.zÁ¬¨AsÚÕs‘ÚðÝ€h5Šãøl°}þ@%|,{ (£²äÂ¥Z_ËÉ‚¬É‚³b' +0Ÿ€¥YE] áÞa”zõÈÙ©Š¡5ÿùÜ?xf›w‹ˆ~¾õ‹›ñÀ‚±B¿hðWH`$ÁF½›“4qFïÐzgb×+¯(€êŒúÞG°ž•¸¸HG@§Ö Éf„ ¢Æ9àÉ'Ò ÖtžØÂ-¹PQÆSЇ1?â&±r·@åïUªN¾Ø©Áå«iª1€r`CXC®UÛN‘©îw!Û¨QoÊ^›N 9­Œ½4¯'GGÒJ–^]‡Sª pŒÁV˜8oex¼’^’qºï’œêáÒ¸”ÕGyqFƒŠ ÷Ù?»þ°)ðÏmrÃZÌÝW»/£º#àöæ +{t¢0B-X‹¤¿Á|P©´$ר3«ƒó?Æß/Ây‚ÔÆÿIEðÛÑGÂÉt4Ä´Ö[cGÀœŠ½s¤±}¾‹®“#ÔÅ'Á~|pxG~Hc¶ÀR‹ 0¢*âýHWex åYô”D튶4Jʵg£€5– +5[àa½Ð +rJ7 +ÀÇæmÎãCñóÏ?¶÷?›€l&ñ÷ þ‘DÏw€*Á.µAE0PÕ +þŘdônÀ¥ +¤Û9ÝE½¶è(¯‚ëÀ¡Æ2æF'TPu€*Ûèð?ì +,¨›$ mÜÙéèñ¼m©æˆW 8¾}—MºJf“zlýØSŸŽ×àœi˜üýŠÕðªSUH;cESÌÄÀóx-1ÀÓÓ 5¦Á4‰¼J²ë3÷›’6 ŽÀ§p‡’d¾¬RÄë[§/µHÕIJ}²Ë©­%c€›ú^X7ÅqÚƒö›â}4T•lv.@|`íèV1€g~Œ,=ýÜjQ8ÏîÀ[G.Ì0ÖˆÆÅe¸… IžÝîìÜT¡æ¢‚yÿ©7j¦2àÇS•µŽ–ü-ö“3â9ð“ݱÉfGï)bÊ›;«‹ QwžÚbÀüãñüÊZ¥U(´ö‰ã§i–íæ¡›Ãh³ ¿zAâß2ƒ²‘ÍTl8@t¢fÛ·tœbš}¥áŸÔ»A@–•>Dû¬}ð¨ÛB¿ˆðQŒrûÑy­üøÿ; ¸^ú´T¤CUŒGšþyß:øëi¶ÛHG4¨ŒÏ£Ž¹]®š»„ÿ;¥3pÏú¬¬¼9ƶx>ÆS¦. {ȲQ¨ :'†ê2‰XËP €ª,' ’¿g¡ÚØ”´›ú3¥³¨ P»~y6Q4͉÷b¡"ÖÀo´ ÀúÈüù„;ñ^;`oÑ iøT°ýÉR+N€y‡šµ2YNŽU'¬5Ù;§û¤ æÅׂˆÅî­ŸŽºËô}«?Úî€ÏÜlÃf\@RB-ˆÍæ·o/,/.˜S$‘Üêa_¶fÀcÅ|»@ÖäàíØþ²ýb[öÏÕ,ôE}”MZó¼C‰ –ÄAà^ëüiöWH6ÈÏŸHmÆÒŠs^íóyŠåøh‚Ð(^0·è) »sÈ_ŠKØøÝ¡Îx·é l+Æ”[©h@¨2úÉ':À .u'ã¯Í?š{ØFÿ·?O±vðøãàÀ÷_ɇsÚôb%jþe[Ä@|˜†1G󄿤Rœrb¡’î‚Ûp‹ + O5Oªd*ÄÌDÈ÷"hwIÞK—Žy¸¦àvÁ=z…|T—òWýGîŒíŒ"kåÒÀ0G?5Dþ¾ÅÚTæƒ/^$•¨\€Ö þâr²¿~ 9¤tñè¢ä£ùP•‰¬+×8@ö%ÇvìA¤C‰½¢p%üê R³&YIÈ7£UÆÌ˜ &v,TYÜ+Éõ¡xÝ‘†®.@n(…×1ýcÀ÷ø2€P€—¯øÛáÈžhY“¬ yŽAWîéÐ.ȳ[vnWWj€5ÑžÊäÓÃ7³Ò6^F?þ9#ÿݹy)J[½hï`~Ù æh2Õ> „ +x3ŒP”.Àƒ%¬ªÃ'AßD¬ÅE¡Xò¢  ¦ +i¹a[JÌ"£¬=sD€ù‡Ãè +ùEØ ø8 + :{”uª¾®íá{j¶«`/ÈW è5d»¥€NA±€ÌÆÐ4¥MÙÒõÈ¿Zú‘¡ @q€gûèÏÛ 'YÌZÂðø7ÕÒ#þeèïTt•³ÇRDAî<,wö9wÕCitD—Qø£Ž}ÑgÙæ•µ=;áñßûÁ`ë¶ç >®E4˜ÑðÂ*d†(ÐBŠªßs0ŽŽèzM©rr±ªbÐi­q |X—«§Š—ˆ}€jùi|Ô÷©#oÞÈÆöø ð N€Þ-g…ìDǬŸjCO÷þŠLáŸ%êõ¿‚Ç5ßÜyD¨þá7²6îÄN”1ØÄ0u°«“Ío×H¤¤ÁüM¿¼® CbÅ5/ª sÚ'íÖNH°¢…ßD¸x`Ñ~¸ÔNjл—ðGÍ€ 0ؘmÍ`o{!  å7úd¥R0Ï™³*à„np…N=ƒj&çó Ÿ$È®¥pØ= —ØNœasù‰jÈ ˜J§ÈdØ¡Oç}@+™í: +€b/ƒOQ²ŸJ—Ræ'Ú9$ÀH€àèÐ'¹×Gï=œi:{ã) <99“u…Ä ;X>YãºyGÿ®N@¢;à÷ü4üCçWò,À£+a½(€ðOp„{@">{`?ˆH4øÏhGvif² +#GG1cÖáHàе”´»D7ê 7àØÚ|s2€£zÔ0(5Àx¢{¶¿Þß$˜üŸ”õ_+õSk²"ҭ;ÙV ̨„¥R÷¢í¨ˆ›5çìÀn5fÃGk §Þ¸:*àêòúš%Ök,¬$*Oa”3gK-QÅÎèOKfy´?Z?k=p¿‰W?¿‚Èo@@ ~¶y“¼;nS „[$™×1€$P"Â3«V€›WØ" +éÚkìúOJ×ë÷GËDðϲ‹­=ÆÝÓ]¸*OÌR§Ãû(`TÀ(+KjèR¥âÂÞ«Ž€ÔÒ”0*Þ™V +[(Tc ~€ÚÜm(m¹nk?ƒÌÏ­è¨Ì ¢M¼ù EçÌ/±Çʃ´Ü?¬·HؼÂî…¾ì_ñÏx¼f zµøW !¿ÞS8Ó +‡ŠWâø¶#;Ô 8Ò<ã|„ üú²Ø8ªÐ @îbäËìD~ÝEë 8ÃBÚfG¢¦:— phSŠ®EH†¤äê8\8NÀø”Ã`ÿ×@öt¹ûSÈ®U®Ë¿¶{-uD¨7X «jñv£¬#ª~îî`_jƒZãµ +Øh+‡]û4üV.¿×š èG!5má®2\1íx 2.ã€'Ç£õÓË+•ªÊç>©Ã ?íÓK¿<Ó žr3¯Í(ò—›d@Ö‡hèýÃÏ­@ì8ð_H @„fÍÝýDkmW¼*ÿ”¹.ÀŸ\¬–?ý{W3µ7“wwÎŒcKÕ%F<@Ð1U«gºêÆU¡Ì0 íòd©ï Œ=׃µò§µßðLÊ,ó²ûr,ÃäÐvè,Ù‡.@"ñHÒV¡£±Oò¡|dÞ€8øÏ >@ß ÞÃÞ…»Ï阆Ïÿè.  ð&VbPaÉ7 +(ê“(,ç€ÚÕ‰ £¾eÆÅ±^½)€CVSÙÕJµe_©5í@öE¸gòÇן;–… «­Ð“Œ6!@霠&÷¸½•ñÄl<•è ¥Àû $¸b¸×¥êÏ7ê uŠ +-ø¹Ëh€^ˆfÀ~°ïó §RjÔÐîñ°#õ”/UÌÂUI¤ŽhuSF늳`JøÀ‡‰S§ Êòäìøp4N#lû CØ#ü­5mýj5Œ + ¡ ,Ò +PW}ÕROàl߈0ïb[(é‚ÅÅ'>"CÉýñ˜ÀRé{³Ù³²èŽR/­.E’ÏZ~{ò±²ÈŒö?Øv…ÐÎÔDÏÔÝGÉeq^¹ta*X$f82ÛHïõd4÷p ·Ü†rà@ͧŒíñ¼{Gšç–ªEkù'L0tk n»¢÷lAŠýjøbúb^‹ð¯ jt†«ï¾cyU ã@ÇbwÈð5Þ,þ`3/©ÕIˆÓߦ&+¦×¤RlAE5@^x„Šs| г«ÜĘ ·ÍºÜB{ªyÞQ#Ù)øg‚Pô@å"’¬¬ÏÛ`[#>T9>Ö"€'™O(Ê=©LÞ>sy1Ù¡åð~ Ìîé…Ÿµí%¾8t(Ž©Ñ„ÿph}þ£V7wõwƒcî spt V §Ñᑽ«Þ\Û§Ú}®Ã®® (çhn@Oø€Ii÷­LV>-• £CÂäÓÁÚú„ÔûW³ß# ¡p”ßúÜ”tŽßÚH$¨as‚õA6Ûcy£`kguqú¨sƒ8¶àogô=·y¢;û´Ëò˜`»´…ªRÈ×y¥=bÿËæ3Û6îÕgV+r8÷ Çà%–À_`ÆUqs¤9½?°ßÁߢèÀõT$k¡üÈ7÷cO…õõܸ,PûŸB²¼tùj–/Ö«ÍGj»ç˱VNØ™µêu¤€Æ€ šipÜ?È §•AÐŽÀöúo‘;yükÊíP `Ïàþ5þ.;Ù±` NÀmP@ñèäU'iƒ•Þ² À'Ì+ªçÙìbi89-ôÅD?óV¯®R·O×—ÈÅ ) j©!ã+©q|õDšTr¨Óÿé@ð>ƒô÷SðÏÿä;&pþð3zx-vãˆG Íš`1`kwkwGuEÙ¿9Ç3¬ImˆPXD³>âµ: A_kCžð'b@O`„€½ê¥j$9AR(síôpmO4Þ!†!ì mÝ+þ£~úã¿ùò‘_}õßö»›Õ³>31ÔÀ*t°Øó|‘‚°aëFàÝ1¨jœ Ôw÷àbT? êî‰&+žýÙNaYb)vU¶‰Eûo£€åà“šý`<ׂˆë•DóÖ& +?J<°ëô E¢* êµÜXKÛÿ"û½¡MwE ’çþý?ˆ±˜wÌ6D_¨À8žÅ>* üƒú4 +È ¸zŸ:ðLê˜y_%‚6D Œýê€ÿ¥R²ñúúr2^ïË.ÒÊ ‹J3‚–ô©`_*Íà,{ö°¿<;ðQå4€~½ÜbÓ¥^t‚™Ï1C¡º8´ ¼q5Ѥž>Áü»2  à +„_rS‚´j•ÃZaͺ2Ê—ðŸ*@uÀ\P¿ðH5¤‘ËKæU ™s° Ó:u¦5S¦ÃÄÞyÃöèž{EôÔ'ÒýÎÈ÷>ý|J†òö§?üP#<ð–/^ìâìÀrcõ^ÞЀÏhw2ÙJZ6Î cnˆcÿë_M{ò{Uç/Ñö»gœ'ÿ±ï¬Lc¹Äp›£† +ù9Bþ¦vZ=øÉõõUûFc×{ÔÖ}`†škÜ @èé—¢¦ªšR©!¢_©(z½ÕÅÑô씽//%ò^(½½~´Ì ¥SA ÌE €æ00¢¡ºþS èqd5Ôšöª¸Öéè&­£žÊáBݶ¶–x‚­6. +6ñŸÀNÆÒ׈“ÀÆ®72X &æAÍÛ `?€ÜeÙÄ7gë …xêSÎzIŠö¿¾c-D‰3ÙÀ£&û9ÑtúÆ é=îû|˜>à_n+ÌE@[‰ þt1€±ÄÑiú†–|Ê·*‡†Þ¹ÕD'@ûŸàžŠƒJ#ü­0úÿ–/ó8€\BSb]‹Ë¨W99=>84þ\zâ~ihP +üÎK#ÔÔ~Òð~§| T0é z Ù}¹kOŽÍßë$V +@S‹I7°¼À²˜Ž°Uÿ©?e ^û믽ìëâ8tkçÕ« JïB7`æ') ÅzÈ)2Æ?{–nQ°¾!_Š`á¤ò¹+P›pæ}ŠE®ªë*!³‚R6é¤^W\Q2,E9œ_hlä†Ú•çèŽÝâ”ÐvÍþúïYñÍþÛÎ@mÇù¯~ËÊ+ùÒçç}ûØÜÜ{®Ú÷+‰E‹-JLŒ)<@  ;E`gÖq Ù¨'Ç¿Šà×*¤¬¿“y¡•×odf¢ ~áQÉD¾ÉQVžúPÌÁÞ÷µ2>óPÀ¬4|~­Þë×uKmAÿ?¿uÈŒóÅG0€­çV5o0N @°cØEí› [˜&¶ëéº{óU¿¬»Š€ÿùS3hú€Ý®³“qÀ+á•:öùפX[È¢´œœM8–Õï”RƒÓ]²½óºAýny å¶ÿsCž q0€`™£ƒÿí­.€uòö­ê ¼¬©íÎÐ\•I­í:åí;à“x4÷ÿ&þwwQmOw;TRCñR9E®ÐkLš^Ä`+}/]»Iæ–îN~ @þ7a7—Ç#±—¼ÚGÆÚ +~ÏPÎl¶©Gü§ §eÒŠ­~‘Vaª6 Q@ ¸rlë !ˆÔ +Ÿp›ÁèP¢TˆÀ±w&¸ÁøÊþìÈ‘߉}ˆÔµµ—õÚ`·GA„PÔ³ÆFŒ¿áød1ÚI`)'y´®K0•f$c‡„˜ÛŠ™sùæ ãfÛý×l¼¸85‡l ´7¤ý%|Ú@E3öí×g‡ÿ³ + T@pÞÉM€ÿ +àÓ˜‘„3=Z\|^÷&üùè4ÛB¼Ã7¨ûp#>@Ãw †Óÿ la €[’fñ ÿØ*˜¶f þ~gÚÈFþB>¡œkü¥zöö;¼)r÷$ëŽwË0àÞ¤µN²‘œF,ˆDW+û£L @à7©¨Œ1€< +•O7@îøŸ25 WêÖŠ84.>^€¾Bêv:¹Jmç–|É%«O‡¢‚ÑþÁ>T»úþOåÁ܃֠|‹Ïh%X$©5€3Àià• +V€Ó|²%È•ÊÃ>¾È§µ4¦W!S )T’ ìVZÆ1KrÝ%„ö?Í}pÚ(r†ðJ;̦Jû´”²(~ÒI=o8^[ǰ,Î÷º8C'  _'AupÞdú¿ý +=7Üï…Y|ÚB€Þ¡n04B»+Ê[ž'ÐÃ<Þ£ý§¤r…XK\ÆÕO“UÆ:Ç7KÕ7({8'ôCê3juM•)°Nù +A÷5»§a \ øúq)õþûŸ‹óOµý(—gäÛª£¼x¡?"ÈÇ¿6[lZG^¤$kpíX QG?yƺüi vÀåhÆ9* WÒàÒîîm°«Îð$-å;ÄRÊ¥ ìØ‡“¹ŠÔŽX(й<H0¦bÆíþVô½mÅ©c(Ôk1ï¢:EóîvK,*»=æ’€ÞC߸ùÐ+ö㸩.úü{ïýA°—®:Á›Ñ8ƒa?G>?kAÄè!ŠýßKǽŠÞ+v#xtKDW$è ´GŽÆODš—¡þ±ƒqØÞ8àü‡$k‘t‚¹ŒÈK-Œþ‰|õ Ùd/É>Ó(€½ñÚšý€ÍÙÿE0Týr§Š´ýo +·S1€ÍgÑnÔ¦ q8ÅE]ÐC÷nØ‚Žg•‡Ìß7( +˦¨'l¹0øgö¶É&¾*Ógg1Ò&3ʱƒ³þÝÒÐHÝWûwÿ‡0ûÉǯ_Ÿ)òÑ ]ðC!dW`ˆ?%kOÈb¦!º0›‹ËÛS@¢~–Å:idzw᪚ÄýÇê³ê«MßÈ@™÷»€Nà¾#ö׋ºŠS´+ÄüWÀ|mB…¼òyJÊ åa~€eÕ¤ +¦);•ž¨ågñÒ,) /µÀ +õxm­ÄôºÀè˜ FJlMÓ³@¡ï}7"Ò¾U¡| 1Øàyl{^/^¾´Ýu&¶Ö'z¦ø:`ý(øÝ³ä½ö¢à$ÞKG-ô!ªCP˜Eâ‘SvïR=V$XyÑN¨¢.>ˆ# ƒRŽ P`ʨåP¤ÉÞÈ1UТð"s ¡ßÖR&ïG``iÏ@×›ÉÁ^Á~*G ¡_'¥¦2ý;ÃÚÞ·ÄúÊ,>Ý\}æ½åþò)ð>ËÎF(;*Ÿ8£V`¹­ÔFèƒêìê‚3Ô‡$4Aõ´P´B"úçW:Ô/МdEòŽšÇšl|‡44(â«tK½üÅï@ùg½þË€þí§¶ þõëi,à`h5 `÷¥Ïàû,€ÝBú/É¿¯úž€X\àßg©9H0U¯\ú½¦tíÓV{…ñ²úN ðø“~©À š“³%˜$–D½ +Çyeý›¹Zn“½<8ðµOxÆbÂÆ,ËÅ£Ë p©•wTƒÕ[×wÚ±Ï05b¥·' ‚F°Vœí§û_ì³?P½¿¿Óâ‚u»"t=p §;×ÚÛ™‡Måƒ:¬lð7þ™:Õ  :ëÎïIÎ`ÿQmùáúNÏEØôÜ…ïÖÑ¡,û01Àrz]*9•ÚwØLG´yÔÍ‚*@¦ä ƒ^jšKWFã3ô¹¹~CB¿F‚ì +Ð/@ö½KÀ¸ø·°|ÿØ Ôn,bá_úPCê%0µï€m øKígL•³Ìmg®ºÃ/K™›[$Á1X + uP«aÅ¡æê™è;$âù̈ÿ³úß©^O»~öSf?þ~ýAÎÀÒFÆy±kŒŸœh +€£ƒ~€ƒí#Ôn|¶0· Õ + ³™ƒÌ·©ˆ€ÿ¨ ®%ÜAÀG«}òà.i‡ß'319…!±n¡DªÌBÿ¡~Í`ÖÅí¿˜m@7@Z¯5å¢'²‡¦·X %̉LªàD  ÑN®£•´8(z„ŠÏ’GäÍ™ïþSâ–×ëÿÒé? MóTÿtÑU£Ø{.j ƒfÀ xÆûº*zÕÙŒ¨5”oSÆ_ðW³Çæö­jl­«³k;W¬Û"Üe2{ëkçÕjÅÆ¥™^2i˜eWárr°î°ªÜðÅiBÚ[±O~¨uÔ’‡‡¸è¾ñÄ×LœÝV߈÷ú‘÷Ýð·ûß=bcŸ` cþ½,/7è—pƒ;Ýq”¬­úèP!ðA¹ÿÙW ÀbåKWk³Ý<,|‰£*!¾Æ´äÈé‰ç¡ï–††’;UÁ¿û­08ÿaÓ¶Á¿J+f˜æ{Ùˆ`:õM€ F+`ÑYZ†»kˤ jä;ÀνàY›H0@: upÏ{€ç{—4P:ÊëÙÜ\ŽAî0Iæ&Ó« B²†eJãF3 ûÀì|øålY«6?:ÃýL5Å–AχΞØ} r›~0€•Ç£Sc¢,"z’Œ°ÿ‹÷/:uÄáÝBô˸qú½<ȦüÁGö‚J4ƒÝ 5žKKë5¼¿Œ:â!^ºÃ‹s‚«Ä?Ö}Ïè#¾Å‘1ŽêêtI Sµ¥“wF¡CX¨~è“Ó‰¼'YXÒ€³©0÷¨^^{™)ÈõÙþøðÈaó"½ä"©s…(2²Éwƒ¬àœªÛ1€o¸Åò·-Õï¿Üjÿß}õêÕÅÅb­'`´ÛtZ}J‰„ûÓ ÀOUi Uðö½u­‚T ;ŠuþJÌ׆\;oü Ðò«ŒÉ(Jä2 Q0(ÛHßÝpØ +0¾ËmÕ_ü«0W4Çÿ–ÂàíE1€åÍÍW»°éi À‡ Ïc¾%ÕPÓ®ÜÍD}ž_”…Öß@RfËÝ1¤~ b¤EªÛÿ¾=Û׉Y\¦Z´Zx–˜ÅâÂPT ?Í­<öYà<ð D­}=ÕòÀÁâNGn P•%‘šNí¶W}¸íCGÓ³Dk‹ìI)bÿ°WÓ\œòq^ߟN9i­u£åS‡ŠW,½Ýr[ úü|žÕóé뙲ÛÉI)€¦còh±CØeÁÅP•­àÔ¶p²ä’[¤²‚èV5õÆ#½…„ý=~$PLGª:oÇ^.,þSt_f¶R­MUìlte¬xÍêÛTE-Ð4ÁÀ2±HªN©ˆON/|ÉÈ;¥¡á>_þ¢!ÿ??·@× +°ûRx'Ž€ƒV,½€ÜíFÛ› ±ë )¿ƒDÄ|ýìPÀã%*N}7x·˜a&ÕŠi*Éí VM+[—™¥l™$m×2Èkì/õfYçãQ( –—6ÇkãOjµø#Tm@¶¿¶ä`ßÿgâ“D±Úÿ4âµNú€Ó|9(fè¿¶OúoC„± øß˜Mþé `(C޲2Ä#“Øæ[ +Àr +Αø"†ø÷ñ¨èÖ×þUǬ{Â_…f¿&–’±[W×™2ÒDÖ€Ç2€®’jè.T‡œÀ ÷Vé OÉû8T©ûÎ<âüðVix}§Üb½áïÀ-üS±Â64òÞLÇ”ªM%«ÓÀ& Þø7£ºóŽ%šê)¨52Ú ÿ<ÛXïœýýͶñ¡{õ*Ý¢Nuâ« ðOÏ“ûï’††wÈ·¿lHï [@0yðÒ‡~ +Å%À @7~qy¡ÅP Ì*Aåoî?øÇkçÈx_ i Ü)31ŒÅ1+–†Xå÷ZEpn“€¼-2gP§Mjë«72€µ¼ÒJúmuµ44låV‘ä®L ¸“è×u†¥§/ðcAXõ•jExػ櫴Î@À¶?½ìÿÞ¾oËëûĵØW¯Ô;Èýh:qÎÓHGšë¼ÌoF:‡Ô1>HT @\ÁRTpTb.ÌÌè.p3çê2®<Ð¥&'è.-ᢡ$!°_èG´Ê¨°ÿä`nâ• xÓ3 Hß„JOÒ|™×ŽOÍ˳¼³ôæôM(À-5µT + íØKLÝ«W[Zx4Ã?]ýCWÜvOM(s²¬Ôºª ‰¢N¹±°*Çd•{ŒÛú‡HüŸ-Õ²¿¶($kþ[ d–CÕAñŸQñ®=˽ÓyCÃ=¢ÙÝ5èyûÚÅN$ˆØ +P.   |ºÈ +^²ý @Ä-øZ€@°1€4Ø0Èo*„‹0ð—Øf!éhÊl¿7€T +wJc] 9:+Wج”ùm{ëÅAn·­s…ýL–V1ß ˆý  UÄjì „„d¦×T:Ú€2VdW)?>ÚË|±cª}ľ‘••¥ôñË€òÐiaÑYößÑH ÐÛFø£¤åUl@‹éŒ0ç»õÙ§6d*i  Z2.††Ö·/<øwjî*50¤–º¦ñ¯3r»d 7šš-Nß4\ó«i”<šsL@«±â~ç‡Æ'9ƒm)‚Þ|ðC¢‰1ÿèɵÑÒxBÚççG†éÆôM€w0€öÛ@öšJ«W/q¨ì™f€·ÖÖ3yãCÉ ªÔ¸£°?#ÄY)°µ$Ü¿MEd¥ù%­ÏqTD”µ%=%LˆmêÐwŒ*I ðI>™{ÅÞ% ÷ Ðû³¾Åïã<ôÚpà§}ñÓü,mlE/†Ø°€Ø º6óÔ_„í¶„,† Pn+Ð2€-“Q ¤é¿‘€JYup @©$î’A € hÙ1#!Wf2bžóŸ_ëµrãYÄf@DZ Àd¢jV¤‚Ÿ_ƒ|tº-³&ÂŒróI°Pέ¾­.€ÚÚ¢ø¸ou­©Ø_=þ[qtÏuÿÅ'¸€¢ƒžc€-ì3ö4 ÃÇìDŸ7kú¸Q³¢è0(^Ò3O`=m€F¿7ÂåüT`ªwd00PÕn¹­öÚ­U]Š4Œ¬.>]h* g©õo.ìÆà‹Ç¸t³‘L5þpqû5˜OëyȰáÑ àPñ>@?âʶPÿ†ÒjÀêƽ™°™Üâ|3Í6ȆDtYhG몬)ƒà–Ô£T5À —‘…úx³|¶Åò°wÂÀB‘²TeœÌÚåÞék€÷{½øÈ¥/ºÅŽ|/P­\)Ð1$ðÚÜòý‚±«ý,€ÿö8pDàt“`íÒùë"`µ·¤áœí¾RIÜ%31ìm¯0÷â[¶tY’2fcèï 69ÈI5ë&Sáz$üßà”1±h23 r^}€cŸXÂ[IA)D*Â_þžýJqs¼ƒƒîÍrˆ€YÅR~„d€Õi@ÃDøbÔD®U‰À¤›ÁÃ6Æ`Þž '(ÀµÆÊ[M›[ÔÖp?ÜŽç´ [ƒg;IGirß $”òÓ0€9|Ý€ä!ÂîTó³ãÖ’’ K6iïˆô=iWÀµµ¸×wöˆ4ÜÞ/AøP̺Ùg*­êXçb­RaÅÏĽCÕÔêQ,‰uIU¦¡®YÆúUP·T!8õâ/ëZêŠJ´Y$÷µV²KÔTÇER¤hl@&û’$;¾KÚ ½Cvg@ÉëÏ?)ð¢ÀêöK²'ý·Ûf^0.Í7mÛ>¾S bÚE²yªC§ Û{§„TÎåïŒ •Æ2ŒX‹o‹Òü¥C֛Ю>È\ʰ&ÿ§`~Íñ€NÀHRº¦½í^¡m)Óf+Kº¶Öo  GïÍN82•?2eÂþ½,$<'4}*71úp€#ȉx·ˆ!<ò(€R0ºã<­»âóšòNTÏ·GðŠpÛr +Õ‹ŽWuáp'L|$!Vk¹ÓM÷‚ꪦãi(3¸Õ óÖì’†—« €CK$¼pO”g*¼3DãÓ€gæ(NCT×-iÀ½_n1€w(€ }¿»ã;0žc­4 €|5 ÕïOm`µ^^|Êz•G¬˜s\#m_@•¦UÀTàÍ¢¸æ¿Æ‚C¬/-£_Kîà,ûXÏ #äU:vÀd¨Aö¿G.¿ÎØÆpWìù¸So € +Àן¨„tzÃ@YI1)@)€àÙ18´ì¸úAëo+€ÿÛ€$ÐMÙßY%] àþ’DîÆ BZõš–Jò¶ÐZÊ 9f¹ÿìx¬ïŸG6˜~JØR¤°¢ÀM‡5a8¯©ßT†‰¹â·ÛW/]Vô‡âØ|øä¤Y^€† t þ?N6Z3@¥Ëúe:#¥°à=·ÓRt"»F¢Z?ƒêg Œ2Âl,àb½¬‹„²\%Äe?W šG曌§åh#f4›@ß ³ÊÅÊG’JOæù?Y¨žÉ}$q]‡NŒ#³á:“fœÞþ–ÜbÓŶ±ês-ÑsjïóÝçV¿(Û3dOŸ6ü ÿúm·ÕDÎ=¢, +þ™—º`rWUGX®¼H…É\‹H \¡S*µÊfëVJ7ÝJP“|ŽOêÃwu¼¡áÄ»W@ÿüó·Ððß3ß TÚ«ÀŸ2ÞJƒžðm!€`¯àrakoˆß`C”C²4ûö Àd¸’šL×=ûyæw2€{5€Nœ +`s(êDÝ!æP¢3–DÍ×—ê‹ëë9ýÚš +Í +Àñlã¾ +`Œb +7e™¢#Í7çFÙî™ÃÝŒP±\3ºA@·uÒÀˆÇ² 3WØ€žC€`áR1¤ýgxâLJGû>(0”guÔb8© ÐÅ|ü'c9R˜Š¦QŒãêê+6I«¼Êë:mc4ãp¼¾oˆ.<5òÆÇäc5AHŒ?àW ¨3…ëžìÙBRv˜ó&àB•:êªZ:° CïlŒ4øÞ'â}€~D}ЂѧZï>ßÿT)X€€¾ ЕÕN%(ëEôòÕëêÊ–Úq!­€W>¿Of1cj¶ž?l¢–YqàR2¦%œ±Œ!!5‰N£­NYF*‡wICÃ}ÉÞý‡:òÉëþò“¿ü¤Ú`!¯1¡¢ð8l  W³.Pì\åÉ¢ €®0€DV}ÏÐN·_@/@i)²ž9Zyg @q§ÛÒÇ‚ÊÊY±×UjeþôE¢°0Ë0uõ,®2ôî­ÍJ?µGާ˜•YÞµÿ)ŸV´l ÀæU'Ú«€¿Û9Ú·ðä/ÔÜ÷ûûÂ>Á úÃ>4ÐÐ@ž© SSê«E|µvZŽ«N;ˤš@|ËqB€’€züG¢‘(C:‹ïϘE©ÉL*>in„È,­ãá²½X&Ù?…˜ú¢Ÿ©rQq/<úƒtRÌ‹?ɘ”ç"G$Õ  kL‡÷³ƒ»:•4ß#·@þvK{Œ> @°Ø1뫃›ÉpýÃúg$´§³‚2·“.ÊSS-îÏåÿέ\Ì3dŒŒŸ²Ðà[I™ÅÔøÇö!°qPu…¢¾Ðø „Oάoþ.ih¸O0¹öKáÞäÓOÌ”Eü,|ü,Ïé´W/Ã6ÁoƒyÏJ-lï¼ê¶ 鴾닫h—óàPÏPB2>ÌZŠ*~Ô ;/¾†ܧZ €Ì¼G,™Ð,]€ªÉf<© ÛÐ=°;éF ø£åÑÖêoŠß +P¦MìÙÜ쯩ò‹ÿçêc¯@?÷ê·ø€° Àqº!ªK‚P€Ê%„b2Ú†Ígó>Ýë; ¥ê *^¶rhˆÍÕ §ðcœ ûDÔ…iˆ¸-2Qª£µN/HˆÌ7c”¾¨|R×..´ÿASØwê_±Ü¾ðõ™ä¡dÄ-ò%¤¢’¶ó©\sÿŽg¦Ò@|·Üfýß¶Çï~‡ÃØkøŸ3£òÈV77Ÿ‚ùåÅ…G?V³ÝÒ^ÛTTd”!T•™r}n{ßmþ• ?«RÛªùßɨC†ÛóÌ\g¹¯&¦TôÑâè€Éñx¿ -ÿN)0Ü+ì¿øUð~K@)€Bð+™¸Àwý  ¾×bJ¯{dgõ‡")ß´†ø®á¾ÀpA‚†!xeéÀÕóÎ’tnJ1€íÍÒ¬wM!YW•¢Hƒ8åŒÍ>lÙTp^®l |5åK1D»Ûôo:IKXÖV÷ƒµI ¬×›VHQÏ»…ꨇwÀ$Bÿ ÐbÙËýŤzEsz<֟ψ •Bˆ.¾¢uEªШ£§¨®Àj™Ð 9€>>¢‡~æMµ‡žkŸ} +d,Í&Þ,•»‘Œ —m7@¼dp/ö37ÿö†Ôžï 5’P˜†º2u[ ‘ ÈxyÈœ<¸'i8¾Sn1€éb¶cýõN5ý0æÎvñd>ÏŠá·9Ó;òug‹/N§v[M¬To®.|ÌI¤¦ðSÆäPH¢_MEÈfV$ws\³=ÂÙ¤ÜJ]‚°•”(ãj_Œ`¬äh¼—–¤ÞˆÜ- ÷ øú«!˜Š@¢?|°ë `3 €Œ X‘Õ…¼[h%Ê–.€°¸² èñ$«Ž0¸³tU€»´…¬þº’coHÅìzØÞùqK|Iè–“‘׆aJ‹È‹‹¹«Ÿøï?–Ù¥=1ÊÝ〾ՆŠ-bD×PxÀÀO¹é·…Øj °^gL@È»4;R + hÊ@G\3?¿¶·Ÿ7vÅ<3U#80IXQqAÇÇû#}úGÓÁÄÓ“x …—¾' ’(@úØÃA À9P1*ëì–éP7.Íð&–p!âdÈG+e½ÿ|9ÓúHF"ådÃ68À'QVàøh”H}(€ÑøÍÕ$×u¯4(ß%·@VöK¿ìP}*¯¿å$€Õ7ا€<]\FÀm˜Õw±›&¹½Ë3ûi‘+ÞQb§Ü ø×T‹ev‰A!g¯°õvüa7•@¾ÖB=˜¤¦¨ÌJtù`MÒ×;¡ Ø‚wKCÃ}<2í +<Ï>óƒ|ñ#ñ¨FT‰ ì7ÐÇT¦6dOkPàKdZ­çÑp³ƒz Ã?Ä2=à™¿&€˜À È †NHªàPÈ^?dµÁl«¦Þ—딹¬é6¸ötLÆ{>Ê–†0ж{¥+_t5ŧƾ¦èÂpá,µòœO' }é±þy,žõ)àh\þ +¶á‚ñ˜oFäXã8Õ¬l¼“­ÿÊÃlnî[ h4Í+]Šö´q/æ«iƾŒøÀ0£¾‚o>úÔ[Yrq~²GbIH’‘·Úpo¯º ™§‚¥opj"èÜÉxý@uq‚³l˜ñ†Ð$!Jè¨iPXØMú~ –ï”w3\}ÏT1jp4õí9”›qB€ûþ¥ÓïãT^RQ./Žñ¼ÔŠÜ[Bô¨„“Z‘ýØ“»BX{âÄôd +Abׄ Ô¥†58d¢8\ó½‰oô¡Þ% ÷ˆqö¿ àKù&# ù‘(ÇgiûØØ¬x>+ÅU¤1VM€/.€?­û YË: ¾hû–øÖ·P‡ øG-¼»@“–Â@ éÌ]ÀxÀò&¹;œÈ\sÞ ÷áwŸç©Ê:ÓÐrpPÐÇK  +àÛßR_«ˆá‰"”Ò6a)+Q“ÉÕÚ—9I3 зæç–òzp-`$° ôïïËöΈ¿MVæ™tÛØ|Þê%Á¬ X* ñÉ}I^Š À@PmºÁ²ïòò^#޶Ì㘟ž5ãÀbMÅ´K³'±¢£\ ÿS Ðò¼‘dŽG{èÂr£È4)•^u£` ñÈ.‰ œ†fìïa~§ÜfÝßDþE;¸Ï¤"¨5¨@(¿ß…h]þØÿG7]€øøÝý4øˆÍ$/ô‹ò(T* 1 ÖáÎ,ûD3¤ƒ*ÕÒå.ZTj¦„ p8Z?‰“ѪÐÝòu.ÀÖÖNkí‹TøOyûi·þÿÐÒW?ÜúMñ}5`³ßÜXÄÛ6½!Àx"@ÉtÌ}ЈXu$ 0ã†Sð…ÿ0€,°úëcH¥0ÀêFÏP.®ú šòïd°¹€Ï/eqD Å9eCÞŸŒpš×|§…›ñR¯+c·|,À'ûà `§dýol†-!úÑáù¥a¼x#! ZGºÎ±ÿ…ë&%¿Á땼$y!ñ$æðjÌÞd8°äE IBõá@ S à±bßQ³ÓxŒ‹QŽp €ÿÓwFïžGûú)ës*vÕmM›þÄÉ‘.¤fÏ0×¥ ‡ï–†÷[r?ØÕâ7{4Î@­AØŠ-à±x(Ñó/à¬îª*wè¦y;(Ú]ð£Ú¸uC*ˆF"u¤Y M?Ç^çM § :—x8éÎ þ ™OOFkG¬ä|°³óÝ»æbnF¼ýôÓÏjšr¿Ár³›({!€Nk¾e›-f¸ÁŒºœ`hgV“Yî«Ú¾ +éúÒ)þ±+€ë¿A ICÙì°ßO†$6ìó•îW©´Ì¦´t¶š¬NÁ9Å4‘Ó7|Ñãp¼þL.#ÌIT>€nP;¤9 ¶ó¶Ñ¦óÈ81…W"³÷‰œ5›ÇšWGJ/]6€CЕ·ØdŸÁABûÝäW3ŸUB·ºi¬í‘ØþþAÃÿ>Ç#·\€4 :üÐTjŒqæyDÉÀ—ýà,‹cxfO^?â›Y­ú™’}ˆþ + ÂÂÐ&Ét”j\.ÚìØ;%¯Î}/€Êû§Àý¶ˆ÷úõŸ°~—pûóK]#ðÒ[i⸼²À_¾EÚm5±*]å5fÇ'é<ä 7ÄÅT?¸½á=6^¾)¶Í©€=PLÂJ£ígËŸM{ eâ°¸i{K£ã¨þß/0€þ âæ\ €©mþî•Üd¨û¶ñQÁ)VÛ«µ»P×>UP +@ü³€ÍoA¹0€eª¥¿ ö¿’„TT‚ªçëcHK¤—†úÁ4˜ÅìZ*gfzîà¶ ì,1€ÛyèÙåÎ9Ž´/ÈYä½êݪ{y®ú×TMY°I9» fk×l>‡T €Zo¡*…_A€ˆ·¶~¬v^Sþ×À%m•Ñ_˜nyoOz÷”°·W`ö­˜òé€ãˆxׯhx櫓´ « WfXàŽcH2öøåø€^TŽšÛæÑÙ˜+‹€î£Hí4‹`ƒ©À'k`#hÈÞ™êw²?n–þ~iˆ¿!·@þbÿ«Ý?@™|Ð@¥dcw†3¸‘©xÌRýy<`¶D{rº MOÍ ^Ä€Ã1+ }OMãÆ jƒDj5@#êg‚™ +z»ƒSf=š\úæTYÄ}S= 6lwËìÅ`_ï|1ØçŸñÃ)¨ÀÚ2€H7H)òÕG0åêöSÝþw6ó’P8ðKjþÛša½ €^D©|£’Tz)¤ç„ƒß.& êÒô‡á'ëƒYê&9†cö@a[ ‹Ø(‡ @í5c; å–X Ũb±¦ó-ükÜd €.Àƒ¹y€µßë@ë¼®‹-ã2ñk#Ö”ûÄXãÇWøî±ŒÈc3L¼L½†ÓzIá}ä÷’þ@BŸ£ú·‚ ózPŒu”‹L#ŽH<|€G\–WÐqŒhè·pn spÖ÷u£„‰¡Ðj ;PüTO îpFæ_Ÿß|9è]"ÔoÉm¿b¾ciú7&€FØÝÚy*øãPåÓ +Pá€H…ð +Rk¦™ìöÛ˜çÞT<ꉿ…SOÜ:‚ßwŸïµfÆ$L)ɉkýwÏK†È%É’ùäÓ{ó£ ûL)ëÝ‚û,Üàü@_»ß-ïd†ÉýaCú=ò¾-”š ÷ñœ;Hƒk„¤|tgÊpÀW7øÝìy(¥QN9©ñÏ·‰M€Æß®@•˜=H2›¿Q @©„JΙJÔÿè£vÞI¥Œ0ã£t "à H©” `s™-=ÆÉÓT†.¦1xCb–¡Ç} [émG4´8GÇ¡¨§‹ÂX_ÇÁpÔÞ!"/j!±9> ò0^{ü($hÌNÌæý=£˜h®ÕPŸ¾#PðOzÒƒNúƆØü²û 'à¨L:÷Â9üD—°Ç@M¡b9¿}"PSç`?Ÿi À¾<[_Yók§'ÒWÛȈÓs»Ð¢¤ÇŽ +Ì…r i‚pÁÜã;¦»#÷ÄäúA¼ay€: Uq7¸o  Wˆ: uPˆÑÁ7Ò·ïOO}L+Öô¢(gAÍ õy(½(£ÌwLÕ©4M  ŽÙ %IÙš4?:M­eÇû§7àÂ.Nm=«}~©·½CVf̺;€ú!ïœÃ.çͶÇCžaG(#t€ì æoQR†ìÏÿ¨m´6ûÚ ¨SaÑ gö˜L +ÍÚú£“CGí…–W]DrÝ/Ú“ı†J$ø}ƒw0 =F¤APpˆÓ!œš€þø QñáýéÞÜ8{3h;¹»ãlÀ?üêv‡@Šcìq%¶6 J€"è}€¾>&k&ã¥5ûSv½©°igçTn|ÈÅ> ¶–$€¸º¾Ð¯þÈÏÊ-àº_wíþÌ¥þ’—YD/<ÇþOUY)€’…p€ÂÿÌÄÝ]¿9‡#8Ÿ†;ðU·š°SꆦŸåT,«J<€Ôžª7Í¥!°Ê²ýÌÉ1*ÒÑáxÝ~˜ŸJòî Ñâwœ¿êú`Eb;Û»ßþÑø"ÒÁ¾¦ŸÿÃ?üäÏzÀ¨T@1€Uà)V€îþFï¤Î…t© +Xð-(Øè€‡&úŸ´ ‰8V;£R)Íâ_ãœÅZšú¦šÖMÊ}Û.ƒ³  ~"ºWÕ`*ž‘³Þ +Ñ8³T³§‹É}~úÈYjàj[C] +cêõàÿì¬ðÒ2ÚQLr&`'åþÞ'‰€|`OàGŸB/øP G€ žD§|+ÈÑQ§Nį.C€R㎔ù/ö~øFWpAª HÅ£¢šŠñäG éq‚†m§¨á Ân®{3ùru:²-E S¶ÓŒqƒ|Í*Rô‘ Ï3öøÆ$;ïšül¼¿ñþûïo8{c›?HfSÉÚA»¨¿@êM1€­Øgù‘ÌÍ(Ãê€Î@OE¼Â|í‰æAÇ‚ù°É8;ñuê)¦¶Hâs°Ä Z¢Ì'ÿ×jŽ¥ÅÖ\䙲t(¡Øj2÷ ¿ÁëéÔñÀÃÊ>]ñA˜·ØÛÙýÞŸ}ïÃ_„|üñ~ò7×sý£|ôm ®efEø/bòÍ›ôñJ¥4`Òí¬ùËì Ó;§c6 ´}eLÛýJ‹)­\ß7 •V°^w±¾‰>rîZÇ.ÆCÐ#ã¸?`#m† ( q±,`½Ý޼Ƹ¦€-U‹ÕÍÖt O?Àô:¾<ñHY0={`¤ˆn6úúZ|l>À0h0’™y>|£B P#ëE–lRƒQs¥Ê©VJ„´±‡1ÿQyË—èom‡†âe˜°W(@ M½Œy/7g/)€ÄzšUÀ#L\&ª<™rFÝ]GÓ‘‡‚^à_œÛ|N÷FÔk#ß „Ó€kôõRðŽè$«:YvÖÔBì½@P “w@E/—_PÄ¿ÈEÓJtÝËs†ÖâæÌpoÌV`ëGz€f+“ v^Ù¼EVXeìhk”lÀuqþ–)€š¤²<Žá˜M¹Þ#À|ç•Q÷ÝïÚ—̳â¥ÿ¨0(Š r[ú‚>`²¹ @€¡0 ÀÈ¦Žˆq¤ùR)Ò˜ÙP `kC`#€@$妨Ô) õD}?€®€-ß8€˜RA=Ój[n³‚áÏo{ßYãdœp†X¦M¬À(ÆkO8b»4Zô²$ ]l?ïj34ÞãœRK?{€X[·×íCÛž°æG´¯N(€“0€‡ï©@›æMÓŒšŽ=Š*¤®Àp ÁgJ ŽÄzFþÖ!Vmê)!ý˜ñRJÈËðû;¯#Œ›´œs~øçpcòTD1¼]®Å+*±^ˆ™Æ›UQTD²†Ü%'ß\L8[ZŒ< Hd5z‘>@å÷×g{ë^÷»E\‡ö·³8T‘¦¶ß—ôkø5úi ú ÿ³Ж‘¦Sæ³BƒÚ³µy9>OÁíHñ¨€—ʘÉ͹º0dQjÀòùµÍH¬a/à‘N€Ùè“Eú( >†d47š´˜á»d GÈ|󥲿Úùn€?Hÿ~…eÝ|„k…»H,../t + gxÕ‘$¬·õº³ô9H¯[úW»> ÄÞÔ üUšZ~Cõ0Ð7gÞnþ °ÜóÃ|£ÍÓ +áÉ» rBr,ݳ‘9w›(ŠÃ ࣑À›1{e5³¨Pç–"%¨bfMZù`o˜7íµƒPø,€ø×P [÷ÄE¹+ ²î¯q§Ø†n31¦€ö¸’4!ò€DŠŠ(½&u’ƒá³68*ƒŒÖ«KnGðn|1Š'sÖàï‡ °SÎ0Pø§ªç.Ÿ.?}ºÊ | [§ýÒïj2z¼"€Ä´i[ÿÖ ™5\‚ƒªÑ'ˆUÕøièÖê‹ÿ?Éb¯0ÿÅêÿûïSáÊõ§¶³ûÿú[J€úžð³°ØtZÿE¬%(€5;‹–w£(ò1âUE¬y,|Ž ˆ­=þdЀXfV&Œ2µ€ÉäèÔ×K©N´z·hí‡&ôe­(ýBÍ@€ +@$`|fÁŸß…¸YV$¥–W;‡½2€€,Úoƒd‚WýD¸\"ò9¹D € è¡|ó€.…F¿A¿Åû;ÐýÉ<§ç€Žÿœ9ý3#CÀâzsyxèÃZ_Ê‚âüØzÕ?J›…ó4Eæœß¸·Öjíà:ÚÎy_Š%9(ÁÀ*€8¯´` ÔíÎÅθßêžz\»KU›ÈÜfÛ¹¾2ÿxnþ}처½ÏTT žZ‡8Œ×!5úÀ¡uõŠ_þè„xAxQ£T‘Ž(€³3 CçUA“ @|€d…þÒøÖdÍîTö°“ñÄ!M¬Ü¨€²pªN°/½ºÜÝÚ^Þáh픽¾@°î¿D¿«¨BµAP/Ð/ßøx¿Š ÿ’XÂh~u%u—¨§GÇûãurbÕƒI¼K0øVðÖÀÒ‹¬h"ô^~oW˜m´WuÐŽÀž© Ì'%%<Ë„¹’ÝsD¥P­¥üƒp š¿½»C3PD@úãæ¯`*êŒõGô¦¿Ä?Ñá$uOÑ{uZOšAn•¡ T°\2€‡¶ Tð­ü߯ûtû½±*œ]Šñ7 ‹àMïùÎŽÆ„LSºø:ù*€3GìAh‹}°Ü6³q’Ê’‹TA\Ëa0„f¨Û¸àKGlµÙ¨M¹Æ|ÀÒ°ÿÓÔï9µôb?–  f‘€HDÒB_À3À1¸¼Œÿ²`Íü#]ÆXÕeó+iï€Ï´\8;÷=dd—1î¨ÊCÏ¡ ÌÎöÖÎX÷Æ +ý2€ +À²®~|›Ås(ïVk°oKtY¬¿‘€Š0ÏM¥¸»í1µDǰ ï詨7nZC¡# gÈÎçØŒÀÜYt½ÊÎøûW@ „G¢téÐT¤Ñ·`>B!;x‡¼xä û¥®ƒ~¾YV¨÷[Ûßþv æ>¤3ˆ¨ð +Š ËiUC„y³ÖÔ›y°!ª©ö.Pè3ø:‡ +@OÄÁ{à_“GÔµ~©c;¸{&ÎX?í«åb’r2$—[`³g)Žšª”O@‘ ‘1|*wІ˜r0åÆÌÀ­UZ«fP„‚*õ x︪½) Ñ&H¯Z )€´õkÿrà¤Öµ\¸Ë: öÑÓ PŒ2ªA¡¡¹ +ÎÿS)@½¨Ðï¼UF+6ŸÓÑccÜ@-ŠÈ`z>5åÉÒ €“Ô€ “ý.6q,,Ö³  °>UåÔ¶-ãÏn + ¢5¼ßnmägd±ïÜ0ËþÄç +À’òö(^4€F<2ÝÉ +kMz ”iŸ4æá<9ƒ-L~b&È Ð#«Q•!+滄Jè;êâPˆ»ï}/ïÙt*}oà®áVPÏ1Ì,e «ì9 + =¸×ÉTIÜVH‚Á7 + ”ÿ4þ~ë8(GTï ýæ­9Tihg&Ö¹Xk3E¶Šÿç¶;UVn@ä LÎö@•¥ D@†à¥LRX‰äXbU¸¥ÜÕòÚÇØ`Àk,ÏÀ{péHÇ·W1Í@óàè:ÐúŒ÷÷0ÄŽ?ûäL¼hS¨6˜‡_êzóÕ=@ œh©«·¡ðTÇ €êggÿ¨F€¼0O%ðoçÁ(€48.§û*±„Ð{!s£#Ò>5JŒšç±ù²šà¿>æ†blä +ð`ˆ¨Öd3 bå2Øï®zL¡‘PÆÄ&º&÷O Owð?e¢¼WE²K~p<Š]¨böhp¿C¢Êî›øÞÃvOS©ªOD—’G‹†ò©8‘@óÎ’º@Ãn p›PçSÂWà« ¢+$îÃÁj{ÙÑáÞØÑNt9sÖû….ä­émqðw×¾{³ (üÍèËš+.6m>JϺV€ìÓK­l +@`$ ðóõâ»dcžŠ£ã†·ãìEÖ×¥~½°w»”†÷‚|"1úM †#BD”4Œä^r|’ssq‰ÿ¯ÉìƒÑÜJJ7ËF·£¿ÙÁb¥v;UIZm-ä/5ôDs§˜÷ÕšÁg¤€ t€Óñ’¡€Ó}—O‚kuÁ&¡LÔ°Ó“t6N$Ð~âeŸLž]c‘lE¦  €ö?-Ö_g_ÊR'’ò‚c{"Hj\#KÝ’€ßÕŽÔ” E̘¼b­…RMºðŽÂ%¤3v˜0°gÐ ÅÐΫ îúå†ï€> + $«zi.@Ö¢dÛüÝÜÀù—ÙÇ¿ï\ýL}1€G Õ˜iá±?힦ÂÍÚÓ•¹¥u¨›ïWðfÐ×äLpž/KA)~Íã|F’ ƒºÁb5‚ìs¦é.j9 ‹€z´—aåŽÑ žò]BO,•¨š/_¬²¡öÐGyø<R$.ÀŒô @!©ZëŸXÆ8«j@»«¦  8€Ã‰ç(_–_À7c9°#Åø‡ ýÐйÁqaúF zØŠ˜+ÐDZÃÀ›Éÿòh^ãupªë«(TËÀ(à› íÆ®èŠ µíp÷`6äÝ‚Ûx Œ)ëLaØîŒ%q2?÷Èn@±Æ”·1N€Ð§*Y™<øL/£ÐÓÜðÓS£G ¯œÄ ¸sIÐL@:fÄ„1ÕùO“ƒè¥.Þ€¤C-À,L¥ÙÒþÉi¢Ó-Ÿ:@«™ØY›*÷¨ád2âöðˆLñ@ë7™)]r¸UÎ$ɵ;Òhÿ$G 0ôÕéÖw#¶\ øƒî[­ˆp¯@°ÇfPß4ßéÄ?ñÀ·:ÕOCØTÄó™'PL.rƒ­\©éÊAÅm¦Ù@¤ e ù/ÝÂ,MŽóÐ/G±Ž9Û“DÿãÊʤ(ÈwM¼Øáúó·&[n0€rÄ|þÀ°»¾¡ç ®0è¸9ÍMfÀ|]ër1€X] ¸¦“Z À¦HÇE‹x:¨†4ÑÂ÷׉ÇMÅÔû6Ù%) Ý“\ý" +ÿ|8sšÂ8±1€©kƒ³tÝŽ@’’±ÜÔØ Ƥߖ»¢Ä †n)V+¶àОti¢wÌ~ëBÐϼ‘êÁ5 1À„ã0ÂZ_ŠzLª±“žÚ‡Í¨&䱪% +(ÑÈYF'>fgCD“œÉ›”Šø@=Ul½……˜z‡³JûÕ+TT—¥l;ò>ÒŸa~|’+ÈuœŸSÐéA ÆÉÔðíx!øÖ( žÇ•¶÷á ™B"A{4! +gvs¶ÁH|õ›9—jw¯tnMè'äOØP!”!æÇ-þ¶¶^ùR0€RÈ Ðx÷˜’o©dÜ´úYÜòÄÅš `?<°L@QhŒù÷ c9l ýcLP¼D4ÿ|J p^õ]Ï8ÕVÏôfÅ +]_„¼¦+ €…T]·P8ô-ûPÅÕVtè«;f<°[Faó"]ì——@÷ÈWs–OãèÙ‚ +b‘ës€†²°/ýøJ@”ª…¢¡Ž”‡.8Ã)›ÔI† À@:$þ¯Êáà­|šc»çóÃÕz,BŽó +rn&sâ;ûÛpPPÔ|×HìÃ2¦1òåêêr²®ŒÅE«ÍŠÓÔLp|œœòiÀSô¨ +@‚r§lƒí……Qü7ph.€ÂÆ.ÐÖ€v!ß´@äq–ŠÈùút¿ÃW7¹4s´‚Àc±-åPêFfVGsÎÌJ¡ê»éÖ‘¯@%rgÕ…emnFùɼØq¢,Þ4ó’ó-gï”÷7¶‡pïc5ÉÓo¶ˆ)@ó  V  ž¬)DV{™2“Ù…l.;Nx= ˜@ðUÃ&¢.‡g”Q €Kj¢:ÿ»Ee2+RO[€2ü5÷¼B±ü{½œÎQùÉ©QH³ ï¾:=šã½®€:ˆµúö4Æ¥ªH/õÊA†RzéÝ"9Ÿ›ûÖdžôFâ`yÀ¸$ÒX£­ÉÆÊ5 î”ý=@ îõq#ÂB¨:âöÜN3ÿ Òñó^~“"zhs +,ãþ'„Í'è”Âð«âÒŒòe€öœ$Øá5!Ë‹¨€gÀOÈ%ýßìR­‡c¬ArSçðN¼Ç3‘¢Ú[qŠý3;ží¸¶;Eø~“@Û¡ö(=£:€(‹_Ÿ)P— ðϧý¶º1t>E’»ÆØ›£PÔÖös¾8Ïû'©˜¤QÍjâ’Ëì‘ÜL†Zw(gªÖ¥OJ‘÷¥àIRŒN"¼Cr›ïŒ¾Ï÷2¼®`5@þúÃWA¼t8àb¸ÓÀJ©@@Úd–Ylù§ €2íiŸ_ÞÜõ傸éüÁÒ£9ì÷#ùèc†BHu÷Uß‹á>y²\WÒÈHI¹ûi{(úQ:À'”ë(o¸tž7\'ä¼E6‡­Ús +× wë²»ôõ”ѱì½¼¥‚ 8BÊ2W ½Ò‹â‚ ¢0ê~ÈjãÈÕÀy¬FòGU¤ŠLòƾ¤M…²rµÉ“DÑ` ©!ïÍ&Ô.+V»‡7?¢j:ðPºÚà»Âÿµ8àŸ£xœ9²±‚6²€-aÇV뺉bÖÕeñ_À©õ¨¾vÔ¬ëäb¼d”MTŒgà‡:~q®¾;±G'°'àDþH«àmÁÄE|m+uþÌÄ"Aüm10'äoHJ¼fùA|¼_þÆ•'œÃM™ýøa†ˆØÎ®î­Õv‰º’Fç˜ ˜cí•!*Ø\íIÑ*¶ +8•†€™÷+°#޼O’Ìz°¿¸ƒÜnÐ÷ "›‹¥á8 +¡àaV S@º¤$Ør9.cf× ’ˆr௠À–>ÝJØ/iÆ«H”-žûÝ‚"ñ"nJ®¶~T6¬ábbö›˜¶+X ‰å÷”ÌQDà  åeïì²Í"Ófñ潂€®P„…6U‚„†HO &‘­b*0…!4d¢@tªN²y0‰T>¡®P¯¨ì\ïRPâÓv@ÍçüãQ8pÄvk.I À~€¸ëãõ¼ÔP„uÒé#újÒUÃè ¨Ò%è üÐ?PôbÀ¾@ZN #ýÏdÞ(dÔuERVF(oM pîM$³NHÏÁÏP5ÑÀC¹5YÉAöÝ1€BöTD:µÀ¬ÔNïÛ|Q  —Áº÷pKÚ=M%Ãy8t¬ÎAÆV&Û4éØüìôý½¦6UçŸ &)2nÄ’)À×JÐQðˆZ)€p .{_Ýó0P2"S pw  kh1#ñþ”lýkÐJªÕïa7¥¢|h¹ücŸ ˆÉßÔ{M°ƒËyÀ» `ïŠòÅÓ +€¼Sl«Hî(›îŸ+€?ðÏ'‚Êö!žU0°SnŒW:ÊèD‹˜=ìþ'0ú'8£±µò’i +à÷­ÀÒ1•¾X¯B±Z²¨@€îƒ[öu[/N5 ¤êP˜–t8â í„á°Æ{0JûŸšÔYNN¼€=›×ðÀÓAâ›auNåÀŠO‹Mt4W4ÍZ!픆J üÃ47|Ù#bÏðêóK¸j=㨠ÏÌXÅíϸ`ïÔÞç5Dé-ÑÛaÀ³z(¸ÎD1gÙe¨uÌ õâ~àhûïÀÿ£V7†¢]·Ã‡¸ 4¦™g±©¼ýsðÚåƒ5¦Ùp€»9){ŒÈJ—˜!¦E)SD¼7¿2–X˜«wLÞ”YÀÝmNá~›»[ ¼;4|ˆ¼)¨V5-:3j?”ÐĤQÕóD@%°‹"¸eý·ý€?–[R~ÚbtÐ;ÄÕ¾ÅF¦RðçŸ~D•oD«/òõ¼\³½IuÛöÕ ôÎÎ'2+ô´€Á¢oÌUDc³‡qn¼7ã·Æo}hnþ$na'Á¥àH‡¬Á”ŒË&cŠƒf•ŽõJ} öAÜ”(øÇE/pâžU¯"í,Ðh(€êçàhÆ ¬p©ÁQ1gYuzª/cCCQ£S]ÔN—Ÿ: Póaƒ~dãµjô1^²¯Xòd‚žy‡jJ•Xi€-UðâÍéxelGŨµŽßÈ\P7Äw’=Tƒ@íôþrÚò#YÉx7§–©S)'P¼‡n£4TŸä]ž PQ ´! åˆå(3ÿìÐÆô°ªM60¢O,çzxÞn^¬¿Óð–2B²`èº ˜w­-Dv  a¥I®S.)¡Øó`çEµ¼ä¿ƒ•Øh1—W9Š#A~šýØY W¹š›qKLAer—äaÄ»pm÷‰y>;|¡$ÈÖL§¨`ÿkbƯÂ^ex dRç,Èf\€‰ÈÜÔj@c2 -qÜ)€ /€-‘ëð+eãCâ"ÎÊBB¦L1Ó:ÐÆè¨!ó£¯9”—ÔYf€ýÓÑÆ>Î-êO Es‹Þ¡:ëóP@"Ñue¬íy•Fµ>*ËY* ª¥!{.ŽçóH…OoȉsØZJòÆBö3"ˆÍ€×WŽt‡ ‹ÜмûiÀ|E„?Ã@íÂ| Ûß}øÚHÀß’vÏS‰?vbΣ¨`6£˜=Þxæf"°{ÙÿÀXËÀÖó÷ââÊ—L,"a‚”€þ×~¬·ŠÌN•ÉÜïûÜ_t 5ÝÉt…]ï,X‰ù•„lÈ¢€f@³«»>ÕMXŸ^vj @cÕ +@"v'0ú— A5@¡/£ft¯â] 'r Ò»änåÁÎ]¨&¡Î‘Òà;ÓXóNVŸÅpT@›ÊÊhXY˵©c +wÐÆÁB§Àܾͳ@k^œäÑ'E.§o´Æ±%Ò|jNÎç‡ô+sO‚¿!Baïøi¤¨ˆRíJr¤^=Ô:Öƒ6J9 ¶L@βRª*=>hÁ£G¨Úýtþ¶òÅŸUCà“´Ó¯-Íûb/Ìz©³œœ6”  ‹‰:Vóª}BÓ‚¡XHC`iX($ãá,ƒºÛ*á»øf°ÕÅ5@–ä bÍ>;=ø–=£Ä¾½¸Ñ´x²€qt¸ O¢ 0I÷Ê7ýs ½t@ÞÙwôÙmlé%J!è˜Æ²¦ß»™ÿLYòdç³ä÷Ñ£ìLŠÖ÷â`œ8.ŸMpf4&;eGêSÜEô‚ÒRxsqmð¨ËϦÔñQÁIžA¿¢b²ëtªÛ÷® 7dŽ¿6Ç;Ýf ö°úƒªoÖò¾‚ÁÛ£®g÷Ç +YØw‡!‰È_[á²gè@1cEš’DYªë¸Wêl÷3€¡Ȟݒóî7¢ö)èG 0¶X –œþÆÙÆ25|^I¶‘?ë÷šB©2„·^Fhßâ8G¬œr”G7)dNNŽNÀ¶m +ñÊ×n 4'T£ø=‹¬Ÿ‚J%ˆœ úL5<©+á<%Ñ5H× +ð@ +` P½vÔE›ó +ãp^¤´(”RçePÛ5òi :@ϹÅjJG„òÕ9çwX…ô§Â“*WÚ]|ˆuh}Ç?öR½¾l=%¦Ò€”ßpŸÚ/ö¿¹Yˬ$‘Æø£ñoSfa¹æõ¯N÷¾ù; °bP-*a¢hz`PßjDeª—P†D°K™w1*ÜX¼Ñ)ƒÉ›õí®êïû} ýL§èbyö8öøÏ3,º ù[Ê^v’㊴,>sÀâòöÎîV¬t1I$C »?¦ŸB>ô>ò(P: .ä–°¿G|Ð3€ÛRû)3KÎóé$ž?Ÿúñij­zbéÛ…q–'S(ppHYY`çÕÚ#5?Ïã ÜjG\õZÚÑqzYnØ!§'Çgo.T3+>rĪê/«qã +² •8?ꤊt‡ NÅyŒí£hÖìEGÕé¥ÔÌ©  Q]€ Än@¨o 5Ä)bNêUrÚËàwF Âe¥';£Xñ"¾T0ãÔæTi*u©ÑÜŸÀç4¢$§:GÇè6^"ÉXÛ›\Šü†Y±r©î7bUýï@ɺì2dMI–ú™üpËÈ”Ï2¾ƒ»ÎjU  ÀÊ ù¤½Õð_  Ž±#°?&% IT¥PȽK¤g·\€ºªì=»%gÝoI¡¾´@d6˜‘ÂŒ_ûœÖÙ€2ª-…c½N=Mª(3õA‚ž9•Ú11›±›ÇA“`.U¸X|êIµ$Ë¥ãˆP¤èñ÷©KÔÒMÌiRÃÐ’m‚ÁvèD!}¬›¸lžÆ4 ¨gó$€ Ó×%ñÎdœ ÷<áo5ÄP—E•z=M¼©GVó‘xÿ—Ì-¨®ä9ý<1•À2K „ÜYXWç6¸¿5öÝBÜ@ïßÜ àŠ +@àúU +˜à(ÒãÑã¥vO0€Bœpb²T"!‡&°«Q­£lÅÓP<—öy~tà˜ÚWíö6Ò¹ÅZW`émIDNa7*([´ÌœÁ3‚ÿsÖ«`ÐõXÓèDŽÞ¥ Ÿ©œ€ &ÓUFÍMÛ–,·ÄýiÿÕm¥¼È ±b~MЄ†#öÖ÷3,øu?hZIsnB–î pÝIûËÓ@K©Ög¾=Õqeôüüç8Ù“Ž°o éÀJ1€¸CPÕB€ °ªð#‘䃷c³“ë%ŸÖ.>Ò£ŽLƒ€lrL^“7“w©ÝœSEîè ¸sãYA¨ÀJì~~»?6&p§  —Âo/Ðü­ïÚ} LÀ¶9OÇ|4(VZaZÏØc]r”ks·¥ñåþÂöÚ_á§-äãÿ&uÂXk»)Ý mñ^WF{Ži]1ŠWë˜â‚ñ«òf IUšê,ˆ´½TjP“V@@ _v±ü4Þ/À>=PÉÚá(ú¢ÉV„DòêNê:DpRÝ´Ù§g†ÒUóóãS®â*gQ¢d˜ò4 >»” `3 è tõÓÉ“:²çpY#Ä]ON–’J B²º*««¢_°Ü35@ÛìË/¯.¯qtMø?ÕÚ{SUzü²îíwt°7rXpQÐMk:Kåþf1€"µ?Ìú€ëYU­¦è¡½xTa??.-¢âT"H»¹i àîV€Y:R Àÿnqᛵ8qGÄ]Þ\æ¢ëöâÖ´e×ʪ?àwoõÜÚùöL @盟þ<áßT»çC€\˜Žw Çà+4€ýÓÿ/ À¾8iP}løNÀÆ6lT¬Öúެª€]E%+<÷maC.ÛC|Ìà^©}ÛUõKÎÛ§ÉMBs££¥Qã'Ѐ_ìr#ª‰¶³ÅÍd@‘—ë׎åÍ!Ωó¶wýÎNad´î˜YG‡öŒ–»q$’¶6Eã$öhÕðœñ4Àð?ñÍq*€¹¹•*%µJeƒˆXÆôi@_ +d?€5›3¨Í›Rq 5¯K½°Fs+êªÓãƒè˜Ä¸N¢P¤'Àq  ) ^ähôXǾ2&‰¡vS¸§ÜàaÚ÷åÞž×Þ  Û©H× +ðG?€ns¥ÂO§rQÛÛ ÂÜî'b™s R[+€Ê;+ºÐ3ÇɹJ!  ÅªF•055dZú@1®˜ËàÂðòÛ2¹ã"“p +SìW `ûf @fÖ¿$ î¤ñ^ÕGŸ‘Ƥø!IÎòóÐ/.À4`2€zh·Žš9ŒHÚvùRFíf%Àïä]1õ÷Ý®ŠßZbîBS*Âø¿á ×í¥õР„–~Ù/¿–!ÅFÍ¥rC›íB  »Ä9U>3R(àƒ<¬sÌ<Ç”éB€04?õBSûƹežúÄ"uKEN©!hNÅÆè Ñåêù@" ð`>] T#€€Ïè +rRó©¼ÜŠj;•ue›QxÕêyy™nÀ±ÿQ±þN^@„}.N×8åºy(Õ ‡HÜV¢êD{M]¨¤¨³Ï´KW‚9ªtÍùý†ý"9€æ7cÕ +à²kk?lTÇõÝØ4eìÿM 8Xf§ej9ÒÖ1ß«ÔQi G¦K.öÿP^Û*6–˜//,ûw¸ÃPL¯.Ú;©Ùp9wèºDî`ö§3ý0„/Eû ……nžg6}¹^ »¸q“2Ù.d1E_°Æg‚eÍQï¾p¤@‚Šê‰’pˆ$„_ +RiÞ!Yi^@Kú ÒÛUõKÎ]¨5È-fÈÞ\^k}Ó‰ã…8ÀU¸TZp<ÐýÔïsµ{ëwŸ Wp©‚¨:mp¾úŒŽ5©HXbÌjäô;1=TɤyÜ9ö +J4Ÿ`Ÿ¾¥QœšOH»€@|¸¿—n:“RΑ¦fz ÃøB =ùA@P®ÉÉErGºÞ…ŒeÕš¢r Z$þ?S‚=˜›óJ3±³ +`i¾S [vœuÙN†6¹[Tµ‡‚ÈÏÔSÔŠnÏÏ=1€š\W?Ù¡ßF²*€a ÀYá¼Ã½ + –”~IÀŸv¶Èt±¢¥({á¾Xbþdá ?–U}‚îšÄbõýŸŸì7 «²¿Ê(`ÅþôO‚ŽhÿÅp&öÛœOá ĪV§@gwM&Àª‘-À6kœà@ìX =’U͈°¢ÿ¤†Ñ1€Ú6.¤-EÞðº:èO—˜»0Mú–:»ñ0Pª¯ñù÷F>ÈN@mƒ±œ->O¿ ëÞhEš²Ëvâ­<2 nÕ %Õ +p|zä¼Wv¼,Å¢ÈL[Ôë+¾¨9AVÉ|\WU:s®Ævz€øê,­ÀƒÖ +О¨sH}¥ûJ¢q.}ø£Š$nb@PO¤%Æw}-‘È`ÎfžSÔQcûw1¤iË^ps(€ô>p²ê+Žä‡h¡¿Y `¸?ÌrÔÝ  [—ÍaŠ)þ‰>@ÃwRŠˆ}Öå³üdŠÿZçÊ“d¹“~]fÂiÿ$ÿÀñòÀ½ €k`ªy.0?Qõ“…÷u‘W·Æؼ÷=}„Ó +¨í^„4 éÈ€vÙsòÛ\€<™‹˜Æ˜›d‡æxüq|Ç–€{b¥üF±õ1€;]€FrU.´ßºPænÏD³róYµ€ñë0]eMwP) °ë¶\¹Â,'&Pè»üj¾•V€ ›Äq¤l3û€§¼8£†•ÿ‰]€Æ¤ëôÇ9ôézÔ *ÁtÂ4=û¶Ò/MT½4ž1éc X}˨Ȫyþ\µCú:^"7ãyle@Ž} ˜Sàä \Wž^QQeþùš-%äÕéáÿV zƒ-`_ƒÆä:Cw2€Ví«–ga|Ýp¿…ÇÌ»Ãn÷ÈG;©WLH(ö‡ä¨Û )œG lM÷µT +€?½:A¦‹žÃYsÓx‚6ÈÑy-Avm×м:øì3ãë¿À2Sô‡ÜŒ4ˆÝ!1þ=ÈKƒgÄ&}¥V ÀìØ„Â^åQÒ0(@z9¬ÄKH|Ñgóùq•(ŽMŠým½›ˆð.‰n‰y>}Ò·]k}Q`4 ð¸Ø¹Ôœºk¥=3ÖGí"Áe$´äHͱËrìrÞw—@̪”>b¼wr|ÈÏFöʘy¶`ÖC’`€vqa• gP#øh°OЍC]H5ö×lm7à^%¥fº~Úpâß~@¾œÐn¹ØYn./·îoÞSGÁNßN£;³·¦ €êC•„þ;€=ʨy]w®$.€Íœf".@1Ÿi@ D c&7c¨)ü§b5Z=Ì +MjÕŒdÁ2ˆ$‘  ~³Èæ‹À8n&à\ÚlæÓatªXxò51€ibQ^’%ЫØŽÞìÞ¤»J§,«Ï\ÎÿþÏû­’ì1t.u:€z?Û °~§lÚ†ô{ÿ,@Þ1a%øïÀî¦M†œ ô?o ’PUT$ú‹ýJc>žUn  ’ì¦øÀßÑŽ5ò.qŸvp·äÜæ¥F<áŒÌ¸TrjáådôÀøµ&4óÔû(Ø… ·¹Vh3!ÎÆÎƒKÛ`øØMk=˜*ÁÊgí¶5$И‘åmMN3Y€|"l_´e&üÙ" @Í»ã@çq ù¹¥ULiø¯Ç•R€æ8Ö± à(½Oìæè5’pÎ≸ý[Ñe}?ÛʸJ›NÚgÀ£.@J=8úš[ò»\^Cú¢Ñ Íß!UÝý-0ŒXã[–]§$gõ×}¦1€¶ª6gB²àÈ‚ý9jûý;Zø›×óÿ¤I¿!Ë} `š^ûu©VgÍûº3 Ô.¤Rëv­)[üíÿæãÓI W¬ÛrÉV€‚úÝ‚µ¬à¸¬wuÿ‹ó¿@ +i»;«ËubA‚uõ²¾ÆB#$šÝJ¼ˆõ—“Û%!×Ô'Êö:Ž ý¼»Éq‘n‰ß&ù«ûÑöP‰gªÆ–«¼×Ö±¬$ÉbƒI`–^vP¬PÑÝ¢€Fh@wT€O¯ƒó@6& ­Ng>YÏYÒ`—¬º{’ɸ¨¿“«Ëó«Jª4Ý £¯€Z¨IhS¯Ò +P =3Œí1×Yo-ïÆ$ÜDö ͵9ìÐÒÃ}P*"ø‘¸ÁI× `íë¯Ò*l-!Oê˜jmgFc–ï”ðáþbíÌÙ£Î×¹‹Y5`ÍÞV*=i÷ÏŸØ0˯–ÄrcY‰ÜËêÈþx—¦«pF_¯'ç+oCu#:qLì¨g_à•ù¹ù¼?VÍ‘©åtf<› âoÿQ:žÐNl¦ìYíÐd?€Ð[Q4ɺשÎ2@34€µd¦þVÍMÝõGÀþ ü+üÏHª/9 IÜÈ9j‹âNíLn ­®€UàJ³/ò'*€vqíH炾»7@Ãÿ P°Ô. 2\jëÅP ø#ÀðÀ’º¼:$‹™þO½/¡žßfþI*¸WVL7ŸE.ª URÔ»Ãc€¿@=#ú77Š4 J%»5‘ê{ñÉš$Ø&Žé€’szQïQÎÁ7å¹gK†4ÀÚ[ `usîøø¸Õë0°ww¿‡€ËŽÄ4ÇHÖ®,â«„÷-`–DúèæWÀ³ ôÄ9Œ)|<Eo¿™ÿ´„¤õ´À-;Ãñ±g4Ÿqc!u‡”,éZôã¬Cl|üÆž@œ•»þ(ï ­›­R‹àD¤™.M£ ›:UÔ)€ ¤ç + ª­u·*u[ZVW¨¢ÂÏ-Ñ:ú +$ïŽÔº ¬üÄÚ*OåAL ny»@w’„—1ɳWUëôÿ—ãt —©ÐF׺Ԫšþ?1êç`ú+ȧ6ßwò]R™ÝÒD·ãÚþMűxøñ;Úí)Ø%ïi°Ì4À p÷À±x±£v`=)ª²[I³ÔF˜g¤æ7"ü/¶¿“¯‹˜@A¾—çβä‰ÒóèúCæ0…FžS³;Рyh/v x`.þgbÔ-—Bê>Ðì²®÷±]ëq4ìlx|hÓ!€ìZD^€sٙܞÇW¬¿bm¡ó\e¡Î0‚žVzÇÔºMÍôAÀ0€‘C‚­× é{d'‰(¤I‰‚ò(-É7“gŽ×VήJÿD’{ œKTm7v¬ÍÖܪÕõ3dµc™å»¤‘ª¯MvUGÌ“lIvmçŒÝÎîãaŲ®­WÚ•t8’Ä5Ì¡ò•JÛ²üäÉr?áë«rÒåh–ùij*|¢É`ñ_­ɸ,Ű' Lb$hRÙ+’Ë÷¸"ý:^s/ "%2Ý¢Õ½¤Q×~ ú…µ.À€lt.@Bz}°M}HÚì˜=—.@zÎÆD{B€2€ZS fÿpsvùš€ Ìh€Xþ¶,øõ‹Ø/•·ø?2g#\ž¡¾Ä^ÜÉÙˆ Ù¤n~›õ³_]/˜ß‹ë7§£ùõñžoRjÔ4¤ ·Àôë +°X=”iK„óè-p`°b·‚ìÉé8¡ `:€1€< ´·ïó‡ðŽ8J:+ Ý¹d§)¬²†©¶Ô§Ö{\ν½Ì@«uZ`B=@-ž< (è»C®’ã–=}Éô|7%Ñ ÏÝy™¥ƒÚ9a–r]µ£“ —8áÑKÌÿ­@{~;ß-Á¾8 Ák­C›;«@Ú3@;>ú_ÿmtÿí]yµ$”캹$PõZ¸PõUd@zÀ1îTò51aέÞ›åO¢~·¸®TYgšNÀ$⣪ïç‹Yv®’ ¤dÍî¯.´Ýñ<Ú#=Ø‘nµå6ô{¨Ç›Jà¨x&vg+pµ#Ð-à + í ƒÆÞ¨Pd"h?"3~v7BËH4Z_=Î}¸·>?·tŒŠ´4i1€z3 +`e °wà³Õû­£Ö’p0ó´0E·ÀN §X›_ŸäÝ…ÿË–yË«O©"Ó ˜¶¶ö>¨Z[Ÿ¬ÁÌ¥ \nâ?EL‡£E;´W¦fº®ƒú# 7Ù‚S·7Ûêên³6´Vø“Uê‚y2Ð7léÚüÿ‘“R: Þ@)î¦)€v +Û2»Øî!‹7 &Ù¨w¨ËôÞëÞx $ýëÚòT‚¤€ÿö¶ˆ`€¶{ñÉÀæv  ÃcL5®?°äŸæ™ƒÁnöÄæÛß¿î c„ b lrL%V‚Ø6ÿð[—Ý1€;]€àÞ´·²är¤­|\U”Š—«ûÈf1€L±† ‹V–²ÀW ¤ÕþºÎ–8䨎OìÇqÑ 9>ɰ»{„Ä@ó©m ‚ñ„SJ¡Þ‚®ÖÖ2Pž]“š¨ö§±ÁÀ³ÙèãSY‰´!ÒÎ2uª \€Ä‚n@. pt qw rE*´ÉÌÒúÉõ“=af ¹Hé@Œú Þ–S¹SÁ©ñ Ù¿Å +:.7iËÓUêÒ"’Z?ývðÈÖ.­Ú¨ñ†’‹³òþùßí—Ã<®‰«»cë¸Â!ëD¹Î}D•WwÝ©µ@M´C<ðà6µóò­Hw_ÙÓF‡v…9Ù`^: R—ì ¤*z/ö¸Ñ +~Êì ýwÂ_P1‚ôÍ€J7{<;·ðp¦ìP¨IÒxpEB5 ±Š–`YÓš2€våÈ;€¨o)Ô‰:e’„W7{3õÈTþ‘0€h€<ø', PTQ¬ÉR)€!`¶Õ7@ô„Ë94îÆ<ÈKAØÙh¼Á8±PòõÀe¯ ýÜqm.»öÕ?°ŸÞ+}’¡I®™Ž7ƒÙH°ßÞ ÎõžùÖo´"È!¸‚‹‰ÍÄQAä+ö5XO|ÙOøü“w¾hÈŒTín5¼Q6@ZÚöRdu Ê¿Á1âDÛêr¹é®l¿M‚ÒH’ŠàÈa}JÙ£ºï´}"D‘¶åÉп¤·Ÿ¿À?½ßh±H¸û¨&TñÎŘ®³‚vþòãyúȲ7×6=álN-E¸G.È]!2. nIuˆãl4ôÒ\°ä/?ßC\s[ +¿a‹=€Ôç}_JH«\.T€sznQ¯þàéÿ$ÂÑÙ‘e£ñ˹ž–`VÕøûd—wÆ:àwúƒ¸Äµ"CLÛ¿\Z`–”o +@]Rø£j+ó¦ +ШJ4 ëJe •àd¶‘?Ñ OŠx°.þY´7.&úâJg]¿}R<ÿØûí ˆ>A<ûaÁ¿ÕnxÞ7ƒ,Í‹;AâøB@ŠöÏçÌÑœ†“BDÔ/ˆc¼¶„   eœÂ¡¢PEÄ‚ç²j÷’:n¥®ŠÚý²  %U¼Ã 5kSwT­æG¤yp¿!8¨ƒœ»E£)Î\Yòd±#u"±U‰Ô§%ÏÜ#ËèºB¼»»­}Á¤§GkÍ(ÅýøtxÕCÈMðT&è¶nræž-tXA„ùƒbbQMäî"j´|¦²ñݪç½Àô5¬74ÒÇlPDjÕ@Ä>`!j€ä(óHK¥„½ŠHê×· +(¸Ñ$|ª±›K:0sSÌÎ0€;Fjšh(ÁRè’é”ÉNp¾Ú—Úc‘OÒÑL«ËsÀ $æ]„Ofcb©wj­‹7[ÄK@\÷r=áäÜCÑäƒVC65±“Aw`'eó"ßj  ¼):a +ioô܉ÐÍýÍ€—}?/Xéby3Ð’o³ÀŽ@v8FÏÉ$ðö+ê`À°#ÚÀh„±FnÖžúãÙÕF¢¨?ý4À9¢TT쩤…]æ©–Ø¢@…cÝê¸êG™î-j•å…'RÖ$f­û™¾î²` Ü’f§øŒÙö*¹¶CÀi €=Zëâi•ŽTOÀ æ õ<0—÷GTP÷¢µiØ3Àé ­ã¥5Îpum#„ cý¨À™ ƒ’øÆVèDÊ©óÛVnÿZ­¨í‹µº$&ò­}\ô(d’Õp +¥Bì˜C™œ±Õ/ô\_ƒ=+¹ÆÏ!+M Ä”“–›ù¯p {’ž©púªlNÔ³Tá’ @ +`ʹr¯%ÛÚµÕ*Ï›¶>Ukð‹ˆpc®1–!˜Nö·›ñ/öÚß’²þ5€ÛžUŠ«#y3˜È½g 8kƒäÚ-àÞ‹Õ¾':Ûï” 1³Ã•Bk®uº¶ÏÍÄ‹tÆ?òŽ@¥˜údbøŸúäªo²Œø2ËUG²‚¶ä¿.@“‚¶À¹LXHÖÅþ»¢)·kéy2øgµd€ý% +E +P%bß#Ô 92Gʰ' !y÷©×Ëk|sm}ýƒrÀHƒXq«ú9=±#Ð#€ü?(^²Ò1€j¨à¸õ>n¡G½ 0„ô9Ú($Wâ#‚¨îÅ®€ãS Æ”4 €^uýHýXe›"¨í7/諺Ì쯡 œ­áE‡1Qpv•ËÔý' èï˜d0á¾ü1IA“y— Kllf@¶¤¼*ñæÚì—?¹ÏŽX.`Z9ha!ÔÚ–k@úSãZuk{ù`Z^½Ú¯.Ð5¦íê,N?Oîe¹ÅNú@§ +t;ßɼIð?ƒœ’Î` ÷3’ÍaËmD a?€ö;² tÔ ¶[ ¶?ñ{—ð鯩Ï:Ò(We*ôOÀílhœN¤œ$-Œÿ;;O¹FÀ¯Fh²Jùåô +@øjšb1ì ¨:8±°ü¦_6)€?›N°¶Úáï_àÝA¿˜ÿ&˜ù³zàÐÓä¡C½q1®)kþúrY%:A¥!@{êKh=OØà6ÉÅù\ÿôIDAT!ýxö\ŠÈÃ@‡vqâ¹€é +OªÞ‘‹„ŒL.Îìjpx°¾6ÒžløïF*yì¾"ÊõYDQQ++©ÖÈf7ˆºüZRík³G>ÚV~ž,!€“Yöç|,åèJÏ…lí€ '©º*&Vä`öAüãÙ1gN³mÐô¬ÞéLÂÔjk/^ƒÉç*=‡){MÞA6°†%÷ÄÆbmÕ;»µ°Ÿ>¾5½ÌÃ}í +:ÉõÍ´Èû Blj³í?ý^M3"ˆ@pF çÒàøÛ©ÓèDšà«?íôW8¢ŽaB-é4@6¢Z«p“inN@[Q²‰ +6©*jBBI1) +Eô/?õÓvŒhR¬`yàˆr|–|uU°ìøÔyzöÜd]¾˜PÑ%>.æO^uäKð|”Î~>ª ·P kÎ}ÿo²IN®Á.&Øb¡ƒz{7' L¼À €ž¯/e<·u’›AÂÒ +° À§ï¡ö@Æñérþ†‰kâÔ6EúêxÞ XY?»ê½®€EÛ<€`?56"êb›½cö~`Ùtƒ ÆMddC~ Ââ Ð2Á&9®cî’}ØDœñe*¦#ŠsÜ-ÀF«– +¤_àr³‡{Z··~k‚Xc*Z³kö¨j\_ÝLY•`ýÙr…™!uzï»cÙxo À\ªÝ”üÕú·º™7sÄìÅ^û«p¹ÓV€F¶€û‡ýP ä–¤öºs–ÓØA)UÒD¨†P8çV)\ —È¿^ ².YÚIVeu¡¿c½l. ®b ^P’ÜåEBö<ÕúWCæs¦UƒšüÌ[Ä4ØÆŽÏs ø™|lÖ¥Ãz“¥_ÐàÄ +Þv +Ú³kvV[€jCm$&ßvÈŸ¨Ã}!§gçWo&£Ç+uäôäL'@Åa \‚~c2o‰@(ð×S(5‰Æ]O@-´³¤'`äA@BöæŽ9\¥£ûpá`}ž“øÃÅx|GX›_›¼¹Ækqg¤ðoF@q€ @{é•ܪœº{WUÑ1!’÷óŸ;ñm»gU‹¸Â™Øžœ¥T†;;©²GÔQ–M¾©ÜêÊè Yg¤îŇeyáÉbÚ¬AC¶éèyÖºÔ³ˆÁ'˜eÁëRËp´øU!ðuY‘À‹ÝÝêõšeÜ69l–Àw8¦É4À }5'ÎÐD«jbí/R/%PèeÞ |Øë€o "1+dÓLæ½—ð˧ŒoÒØJ^`Ðå˜cÿ Œ4ð_ÝÐubr{L´ç1ë†øÏ@%%=lEVÌùNà9üfÛ´À H¶àAF²+0  i€NæD¿åÐ*"½~»%1Ãr÷ÉêRµ‡ØïÖîìG'øÖ+Wîï©+|ì_"29™\¨æò^€´ÉÆóŒö8;³Ð%–?½€T¥$˜~€ƒÜ[ÇÎŽÙlþ’†ÿ~<€„Œú&Î}TŽcrNµHR3UN¬&а[ó…àL‡èÀ®kg\A¼Å,Õ&4ì H &>UXh[— U«e¢Û²ÁM0+ƒ¬+­þ9®€ª,¸–ÝÝ¿ÔÇ™@Ä„ +Ù ©1±]3±{S;aI, 4Ѐ‹Vý'¢ß¶Ø›ÍåNsXÝž`‹¬æ +gô²Z‚uKÎøë:—7žl¿ø ÉD˜z:¸Í +þÊ+Àà +j9IÍ´îý(¶m©Àý‡ ûÿå–Øøìz]×T +huÁì‘yIWÄwb^”àyU%ž&Y—kí$«2úg@r½‚°ê$76è0›!ìP ÀQRVP ùMæD¿ H†ïíígè|{Ìííì1î× +~öò+ÝÙ)]ëüúÃî‘Â,›uã«Ð0Øxê«ö&ã¹ùµñƸây‡Ü ø@Í÷kÁ»«PH€š !@û¦ÀÀÜÜJFÕ¿ÅúV€‡ÅÖÄK’¤ Œ|nab0nøæ× $ ®Joc8‡(r$æŸ,m>€Ðú™¥Ö:YsížØ4#½lË|1€Âˆ{±èž,‰~E¼˜ÍÁ eÀ²w-ènÖ‰owB)1£æúz«)q9Zâñê•C`¿B„œ»¥:`»²jສK¨k7õ™:¤ýß^]ÞáøY ìäè€Rh/+ç,ó\nV,ïšÀ ßäÐB @ŸŠ ÂÀJÅÇðÅèP ©ÀÌ´þv±g²ûÛN½TgPÝHA~ pÇØ¿Ü•è-xguw^Ë2 +äðw@Ù©ªàÙ-ºta¡ßÝõb9Gô^ÿwvd)óçæ~¼Ê^Æf•@`èY€ßÜR@ÐoÞ·@§”þž¹W€ºÐ\± džÂßUu…'öHoÅHa|(Sñgsy‹DFTà˜Ñ‹*¶Òî§)€1€ˆ{=£Lvw¶º@ÿÕMh¼™îÖ‹õLÙÉpZ7¬»CÛcF’jK¼ð¬ð½ÛËA±ÇþÿÆÞÁ¿Í}ר`{ÿ_¿ñ‘@DtÇLã¡,°;‘þùxOß×vôðŸ{1í”W¢´ÿ6xx˜LtĽo11!æ\ Â¥áf¬òbL.¹ÁÔÑN­è,à(dê£:x¶àÒšfU±®ÌÖ—Û¢áY]\ &.Ç´Ç,uU$3~°ú=öuåR€(+c®¾P0F_áoA¨ªîÖ6* ”Õ©*ÖU$&²ðzóìšÅ€O+[pï8×ð‡ºÍ-ooñjžh 1 ð䉇ð¿ªWqB?s Ÿ„¿5šéÕK®–}¾þ$0Û +19¢MÚ +®,) G…M»jûÃЂ(˜µPÄWìõ(F%ß\`’B¸{rž]Xö(×qØFÇr/fëͶÊ-sµž+˜wõ¦owS¶¶BõÜÓ &×9CÒJÛ¶½œ¤¤7pß„ƒ+P÷V2W0€p¼¾¶¾¦Œ1˜ëë#ækëãµµêG³fZ¶ógÄ®X.ŒØÏ-ùÁß& ö_7Ñ–~§ Öç—y}¶ +À†B€9ûùëé‹f|~~ñV脤§!оŽØ9BÈ.2Pi$~2`ëÅ@\H|›ì +ìÀ_6ªdFø=Ï(çœ/ãÈŽ€Ž`kD“Êy3±1€ß្£JPz[ÏwŸWÖ£x£JÔ‚…š¶\|ÌU‚Ü Mj}IÔµ +Àù£tß +äÑ>9›'D°ýÑyÑgúyhŬ«`?&øEY}[Ó1!í¶BjLKqT՚̀¿a€Ä²X»Ã¡­ò–4óoBÜ_ð +|¡ïWmó¿á¡¯>pÆäC37j6»ÁH¶¥meϧðÿ‡è†Â9½òáz°'ì§Ößå +Ô¬xZ`÷8G1­¿zëŠ2 ÞØ]`5=w0eƒ€CQq÷0õn¼•ÖÆØ×ʈX¾¥ÜçU1-Õ^º+ÙìÀMü+©†[;]+Àþ(}'Í•w +ï/ÿD T~¿†tÜìøûºX÷ø n?À[`2PÞBRt†0í+ \‹ØhW  Ö÷Ør‡îHšó4@ýì’½ïÄu9Ü[[‚ÜïÙ0ÞB¤€éëÁû1ÑA‰o”Ωȣ?Gë>ËÇö3@„8¸ÁÉÑáx}i¾†i*F BöE„”öStT“çÉøçìjl*‡ä“Õ”™AÔ(gm¡¾%šrq΂æÝBüOKxž)ü£"²ì~2€ÒBlWæßKÏ„ãRc­À½Ÿëjë•@%wU• ¦f½¬*ážtBÀu„¿‰l†èØ€(k¶»û‡÷ÕÎKHS·bfü7í®F3IPL=…_Üè00Ó¹h%J€{j˜ýº™Æ2úG´çηb¹¼Â¥y’Ÿ‘gÞÏ+.Á[1nQXŠãšƒæ^Í<:©ù©dáÙã²—»@ÛÄUx  IÂQ6(€ª_Ö¢’¹eDîÃq6²»,>ì,cÈ-p‰É¨öøgVÒö{ûÓàKŸœ9ȶ:»›HðeŸºü"í<ß©Ø?r\p›äíãƒND¸EøhâøÀWFé ^Wt|‚{¾6šNľ¦»¤xÆéižTlh=ÑR¶NØæiOÀºÄ°Nìµr‚ÌqV ®;&`®©=l`fºƒ–ÞÖóç»ÚÔbHî§MV»×@Öe}d°bÕ¶Û(šžˆhNð”ßtôbÙËêkŠ;ÀÞ©É©F(€ ÀPô @~Ê%Š[j×´‚u @eEa×`áùÅ4ŘV6Mÿt†f濲pŸð†ÖŸ?1~FÀÿKÏ¢×^ç-¤•xK_mõÒ€ÿww¾[ÓË.0b^e/úàžÕÑÞÉæ®d–Æ ¿” g-Ì#ûfcÑIt S ü?üp÷‹86aBê aß/™/–o0Gô좠ô£»º0§gðüCi›H@ ÀÂ]ø7SLiks¡”h“o¾0äÖÐç{9-Ö}%ˆ‹ÍŸŸ‘šÇtk¹‘ËËë˜ð¼Ö”*ñKûðiZQošï¥[+cÞ…¢ Øé¦Ò²Žá¹ø:èÑHpÏFKøç¬ÎsÃM˜¾À‡–|5 ÎH†‡Ûô(ÎØ9g°-Pà  .€#öÖ¾ð)Àä së„E›À hªÛ™¾4ïsöU¢ý`"wðJ‚¿Ö­é¶úä[gœ{ºb˱ÿaªu@¤×zÝ—w·¸¬~°0€­`½ûXR‰‚!êæã°Ÿ$ÁÏ¢@©@WÝôü3#oæ¶)à—û`$ï… ëÿ’eM› ¤—¤èøýü´ ÊUï¾ 7Àl  îÆó¶®j¨WÚ+šô ²ÕNÝ3WÁ¯‹MjÒ(ÄTL”½7 ÿ0ί1\Í¿]®2A°-à“{- g€>¥ê»Æ*{KyqÐM­´,lŒð-/ÞÞü`÷ƒÝïˆïªE€!…8žWT(a/^ä¿)€* 1#9-ó™V€¶OzÏ|, ÜZ±c3¹•§¹W%×ëÄÝn {4üøÇÏ6V¹ÆÚ9E»ýžÓ+Te[ïf»U‰¨Enï;9ìp%ÚKÛâéßÅÜ઱äT¨^f€ÕÜ—þ:üŽ8+ò˜ UÿâÊð|ð^¯.“«hÃöÚQçÍu‘ö+÷ãpwÒs.dv +ÀŽ@×o| ùÈ÷Æðq½w– !ÊÞrjOdÛÃÒx}<Þß;´€çLW Àž¨#êESÔ8=Ç'§vÏ?ÙHe¤¼±b[Éɾb…~Î#òó10´Û\€0€V` +U‚ã·°ÊÚSO\ÊB–ŸeC€•[,45°×ˆÐ$ø·`ñ1a*ÁŒK1€©èÀ®Þ}ƒ6s|N+ 5&¤Q¶ªpx‹Ç/$™jY  IÚÿ3ãîZ €›æSþQügËînåÖžãëfïN$¹acf2dÒ€o©pcRá"ÂDØ@›œ×ÍI{~9´poŽârz¸¥FXìÿUhLê¦ôð¿É ÄøÀ´sMÀû[3oÄÍ_¥ÊëHÒH.Øÿu½TŠˆ*ª%Ÿœ¹!6î°^ dNÓÙ&±àkê°æ1¬µ®fìàëq®ù—nzÙÓmbÕÃcºÝMä§ÏmW× šw ÎQºK£½¸B:xH¡Ý¢ä¾¯ x‡ °)N„€MôKGgœŠ÷ÒBӀ÷ñ dù¸‚J„kÑþKHûܰG!º†SÄÏà{£ÑÜÿz:Pc—-óɽåbݧ1&ÊêùnjÜêænÁ ê—Š±õœRê@[érÍúŸ‡ €Zé VŸÊ¨‡»ùµ ßÚ{Šÿ)è5€ö5ËÂ-xé«_Õ™˜áŽ,otÄ7jaa¹ÕÖ¾²ySªEªj<€º_VGôØJÊ9Ô™‰°a°Kž%WØ¥Ðb†Z3WÖ{È‘œŸ1M¼±À>_%¿uÃîíÜ,p§-sï³ÕÀËKPðÙ·ÿìÃ×úìNüïlþa7.ëUkøIñ’ùé¶€p[ò®ìQYmNl.6Õ[Rݼƒ“Ô´× ÀÝ–®É,S»-ÔEj#5Ί1#súÕmj&W0XÙ]ú¿óÇçq$ÉÕ&¨…fbtÙ•­Ù" ˆÍW}wSmì éÓ€gWoðÑçW2ú°æb‹%†Ž“6–Œ«h8›Ç_ÿãÃ,]tl¢³—Iø{’Þ˜2@ë´gG op@ôNéœR5ä@ú¨ƒ+·¯­ÌNÐb42¥~3S À£¹B¿`óE@ˆµPj¥«ºòõM…y–?›«Ï= _±Žè[< D@ PçkÐü=}%|Sþ=è4èz%}ÉÅhþ¬d. jkôaO^+.9Ýø€åÌîmŠ(ÓZËè{KòVÆ%¶7¿bMge“¤Å5«úô+æCˆ;£/“n‹M8]³^Úb~:.ë/Ýpü³‡š™t“ñ #ÏvÿâïþáË/þŰsü¬4È–p@€÷â àvãì¢ \gîÀܦŒ1÷©d’p‰”·šâ@jwwPé ¼LíF–(ª6êáâ‚ÕG‹ÒË\Z(‹å†u‹k€ ü}IŸ+ËE¯/:¬ðyFà⢗¶ÐG”Yf·>Ì#5".ÀÊ(ÂJÆØvÎ +Ñ%(öòšH‘œ]²]Þî˜#×9Zz4ò‰Þ+ìv‡Ï é@½Èþ +öJ£ä±A@Éç‚pJuˆ Fµ%C +px˜ŽG“ ¿å¬‚Ä(€`¢Ô´þ~±¥˜ùX•R]çPצ€ éÎnH©£„9óår¨ŸŽñài‚/#øCÜE`-*@õh  )¬++øH­]…ƒAÝî€ý ¬^àÓ/®RɌ⥲yXŒ®?ÎA:5ÒÛõÚÔμgK)Ql“>Ð`ƒG61!HÃRZe°ó1Ë9¤zOÃdMHEý"¡ikºô²¢~~-”\I¸K܃äJ%ƒã>ýèä'÷³ÿðþôíÛÏ›üüŸþ»Ý”duJÓž’¹óöô’K6»œ«ÈH}ç{ßÿÁþêáž²´A ¹î®Š—mžxY”e%ÚKÛß `&Kò‡[ô.©+Zß®uynJD8•?¤Rã1èâY+¬]ú×R„p`qvÜ!†ø äª(„0«„•K:üÛu/ /!Æ'—ØìÈùëuG&ªàÅËìàcºèŠ“Ó(€ù‡öô2T‘ÄéxííÀí™§Ÿ¤!¦sy™búsÝ`Eãã¾ôäèà`- +€û:R*4'v^õì˜þl½DZ PP³@Ű«OçÚàïw¬BÃ@ôø7Qà…—†VãÄPÔ\“{x” íîcÐjÏ(|Q4ÓyU¶öÐ`'\÷¦}ò(ÿSE;ý«ªï+À¼‰ TLNµ€ &÷'.æùÔVRòR¨Ö†Éº8@®šPv ÌJÀ6) ‚ä—çoƼIn¬ÝÝô&¥Ó^8ªÂ{÷’¸p“ûê€zÔÏÈ?þd`%–H›š×ß@RâòÅ÷÷¾÷½?cbþüÿüä'?ûûÿú_ÿé?_ÿàÏ4¹ÉNZ¢É¹Ì¹%ŠóÈNu€¡ÞÝ ¸)h5¨Éò0h[8j€“Íó[°ÀÆ'&XP.ÀðaêúøRÝø„Õ\!s†D +ÿgØ^µ§Þüh=.@šäôÇ9T&%| _˧JÁ:ÛR(l}kîùúhþÁh’Ëñ\Õå¤<Ù€ + Í€˜ÀöRœq^-üsÏ! ö<÷Y@Ÿ7Œ ]™P¤0«"oCðªõ×4«R’̪6öÐN%ÜUÜýÍÝÍç.¡!âB¸ùcP½êSx5K{@4O¤°©-âÄæÔï`^]€P;¯BAøoHkÎ9‰»÷ €mV ³¿¹—¼SKÔ ¾‰öÐ/ø Y»€Æ\Q1€„Ê™dÆr^t‚4àÅšh¶º{Bµ™ßKá[,yw|ó“==“WZ ¹öøö' ð·äç5í +؉ƴ“8q¯vK¡YÆ«Û/1÷?úÉõßýû¿»fú»ëëÿ³ÿòÏ¿þíï~÷?~ýÕüÑŸî>›e$ز–›Ñv¤ò,4ˋԾÎXiqÔq3Yâë‘®¨Õ$¦C€©`šy9h ŽÀœ¸ýã§ os¼@S¨²2Øsc@@ +ïÿúDJ8BÇ¥Ÿ8Ê[HE£Öׯ@Óô,¨OصòËÏÓB—¡:|`4ï‹;‹ŸçH÷0Д¤À’AÀtöáGûº>‡Äp&`s*†S@UqÀQÏÚ9")¹oFÎ0€j x/©²e¾v­¥q9«ŽS¤[1Sj"n˜¬¿~J²¾: †ø›"´«,¥­ÿP§b6ª…õ-•!ˆÀer™+áìcM+”deðoõMÔC›Âo×Gy<*æÛ_÷Œ‹Ÿ;ðÂÙ.ǰu 3ñ.”ºPD¼éÊŽh¥Z‡è2S‡£¶@}‚9ÄØÿ$¤zñJ’?ÌbëÑÍ (¦à½ÕS€MÆm>ûè§ î·åWï^³bžw⳿9€Ïþâòïþóù§ú対úê7¿þõ¯¿B~ýÛÿñ»ÿò»ß~õŸþêõ.L›ì¤%ŠTÑ$!x^ru Üýù4pÿŠMÒ|¦  Í˜† +@g[›Ží§A+pÆæ\þ•úã'Hâ¨`Ÿ 8¡µ³0m[ž;=9>A7ØN/8t@(¹ +O¥âžˆKË´äÙ_e€JÐ:ƒ\;éì5zÕŸ­c]?€z7Í€ãõ +œ¾À> P] hõ+y½ t5̳€0€‘çpLÀ‹7Åcì  + Aܽ 0³L_R±,i.FHŒe½èj•¤„?¢‡‰%êh$¶V36ÝjSž§ïðŸ @G\ëöÓãKØE#I1þh?1~Êüм\à×h üó*Xò&ê¶¼ÀT÷Q_·îîÆÚFdÆÛËÞ›fí:àÎäSh ÔVÛý;É>ô  ü¬NÂ.µŸÿ³Ž)y€Óþí¿,¬ÿô./à·_ýyÒ +E¶×Àe·øÇqþ·ÿÏÿò/ÿúËÿöå—_þâ«ß _ýêW¿ú×ȯþõW¿üÇ·ùá-ÐÄzPšÔFüdeÙš#Û¾ÎøWêØ"_²© `®¯¾¸|ƒ؃ ƒÈ :£ ðÐÀ ã[°t–‡ôÛjæšÎ:‚7 ß'{í.,†#…œæ NaÜÀ’#ƒ—`é;çj8Zx« H\ÀúÒ.ÔȱMô‰T A½éb½¨!j@±ð/ü‡þÞjˤ>Ll!IÙ_[ª@wmPP„üS¨šhÖŸïª ÄQ"xƒ)’0ÐXÛRÚ›µöMb»DJàÏ§Š³þ9*å×v. Pb™öø*­S¨'Àc& ê_„0‹Wøe’ÅvsOË…@RTRVB¡áVÕ +ãs%"Ë»“É›X@Ì‚bí49Ñ_BjÞ(S“ìÙ6s"]q«5 Š +ðL*€W;qøÓx á7Œ:í)«˜¹˜>iÅ$ëÍ\ËŒçòªÏ@.Ç¿ìÍõ~¿3ÿ?ýô ðÛ_Xé„<™Š € ÞÙ|öç?¸þÏÿ„±ÿ¿ùÕ—_xì_~ùßlLÈå §O?|VÙÙ¤%Š˜•/ñ©ò4€: ß;ÊFiæÎŒìz˜`uáq¯¨%޾<‡ÁëDTã²_d˜cò}$×M`Î:ÉyÀé6![FG œÉÄrÒ@ +˜2Ì­#öTPOA?ð‹î¬ê‘b¨ ü±q"’óッýñšô<êpÕ¤8È™ÒÇò0€O‚ÿ +†r ‹êÙ†v\4OPél_£ñHp„HŠ# qSÀ¯ÍrTÍ0ª*å–+HZYK`S¢X9©”Vàçâ ÂêôàâÐôÈÖί&Jƒ@?bùZÀþt1€Õ0€Î P +ÿ(NJJH_@[›…¶]ÊåÅÕØî;–W?ð¿]}´XपS¨ fë©ðÿ®* ¢µ9GñŸR™Ŀo_À»|' Áh®¤ýSÄuÀÝ ÄÕqÜ‘­Q½æ<²»ûýNäí§má³Ï>ë”Á/ûÿv¿‘tbÞ“Ê‹oŸ\þçþ5Dÿw¿mð¿OþæCãÄíf‘–¨7“Û‰ÁY]H¿OÁ—×߉·MþtÓ¬8€$ ¢(]0d’lˆýådo¼81䇾Ш B.°èjƒtúC9€žl7’|NNÖ æñé‰&™²sÀ’–9ýjÝ Ž ÿ·ÍŸhq ðiÁy€H€znk¤'ŠhÞ™Ž§ï° Ív<„qäùC>ö= +ç@ÇH9T<ú®F ©lhà:vÔ{)I) d_€ ´@•f*»®iÄ: X[!©RÄb!"|Ä‘(ÏÞìæZtOMH4€½¥!ž±qÔÅj%ÄaÀN$‘ŽòKŠ@C€e]ŸBÚ^ ¦,lb£Õ¢DÀâ&RÕøk*ttj«%¨ô¶\¼à ]Bu~³‡J!ÀÊP݈¹—pbÒ j€:{¦âåDïä·]×@Áðý£M~YØ®Œœø³†Kå3ÿ¼ýôS@‘/ïTH0å/Ùþj÷ÿÉßõ[¼üÿñ›_|YÞ+ÿéCÔ¬ÙÙ}™fZz +J±§•"žìî< + ý«KšJ‚Ê”Èê£B}µ§Þ̸ÔqTÀùÙx´w耧šd0!¶ÐoίÎeåšûxÿ×oì!œåØg¾ì&ÈOOŽöGã3ßïïö«ëLS€}m§w¤Î=)yà(ãHP(æDjSt€¢z‰  ÿósãÓ\ —UÒÀ´ðÁCÇH; ÏØ À0ªJ½b7”K¥¡“p 9Ëx}å‘ 4$’ž€E🮀ÝT + ²Y1€*Kª§ÅÀŸ‚ùoR®äËæ‚FÙ¥Ô`öe8\†ÆÚã“pª§ vN@ +i{7ÀðE XÉêTBŒt²Í²wÒ6:/žß5-xx,ª=<€ò9(7 ÈO; ‡pƒüe/ñØï„´ídPƒ i¬ˆäÊñûÙ x©Ã»‹Ž»Á/ÍÒI2³K·ß‚ÍÝÜ}¶+÷ö×0\™cw_7XF oß¾ýŒïÛÏ;6ð»¿hiL…ŒNÁºùê¯~öß±þ¿ûí¿þâÿûNëüüË·ù\•}çã¹f¦dˆUM‹ßBÀÑð6ήvPç³Ò|ò_·º—$óL Å¨%ºŠT§Ã‡@?¦üÍ›Éb‚Îb”€òŠÎÅÜãð[Qx³uÖ›fÇ »ê‚ÿƒñÊØônëÀY.ÀÉéÑ pN `eÍQÁ\§ÇÑè·'⨠’¾–fH 8Ú $›'Õsj/ý½ñ¨½Hí`cò¦áÿx¦ AÀÄÐÑ8œPuäÛPë¯îÉÓÆœ¢hÆáÞhôP–Žà-ú,@„Œt·€N@c‰…c)X‹ÝmSH0²êgŠD5øG½ß–Z1º™âbÕFÇ}k™ )¥Ùá¿U-¥.L‚.oä‚zÁôÛàÅ‹—œ@³ „{›ÃÕðõˆˆrL|)¦¦ùÃZëªJ" u„·êÍ*Ü?éJ"Ú}&Ò)ÏGØ¡§¼€-ûÛrŸhBÿšsª©&^t{ Qû:À ?íx…‹åb¼ò¶" +.Ы’!´MæÍ3.ëÙ³?zþGÒ÷P}ìþ¸áRyývJÞ~Ö4ÀoÏ*‰ôðW«“ï»?ü_ýæ·¿ùÕ/¾üyó.ùù?¾ ˜s£ê«€S‰¥l¡v + Œ“¨‡«*qÿ^æø›è7Ÿ7}<ÁG`TÌò€&Jàt¼²¶›lŒ,+1±:ãºó{ Õé˲@¦Vº «ñ,Pïí^Ÿ8Ê–ü Ò?¸ÀÊLà à1¹„\‡¨™>iq*éyaS 9—aäI€õøçÕŽ{4Ö + +¦$ÏHª'Pbˆt@Ÿ`û›–ó{q) á ²Œñhþq”ŒŠ¬š,K'–·ÍÔ·0 hÖ+5RóÃAU5 :6ì–XFVMëŸð¨=K¨§Y›žZ‘€Z@ôSœœ°søë‡­ðbgµ4RdÀ ÖNeä…O'ü*q™å¨®yjQÏ!º×x•EKÐj­{ÿ¹·¼1÷ +€?ØÙÖÌm¸Êd±ù\*yØbž®õâ[Gg€—ȱî)Éeq²Zh+sŸ;ÛÏ]ÂêCžáÈv‡ €¯Ú™}峊üæv; •¢ð—ÌöáÏþñ—÷‚ÿmü‰ixñç¿üœÑ©;¯­‰š>ø§¶=ŠÏG¹Ö‰Ú©Ía#Êþ˜?~g$‰<Û|>u䉹à§ËsŽ[Ó±ñŒý°Ì>7ˆ³ 1×$‡€á(´þ½ºXÆ8 £ o8WæWŽ’Õgk”"öâÃëŽ °Ô‚€'Ž(²#8$µ7—WáåEŒÔË.|“7)N|gß>þyWâXÞ„O`á‹øf<l  \½°ñj?0º¨ãLz=0X g9ܯÞ{8·äÓK>”䥸0@Áœ\t€ßŽÌ5ô[ âµ6 n¬šñPí,x¨æS€¤©j¬¬­7Hñå!7Ê"BeÈòt ×Âתb툥`§¤á7@"âÊ+ˆ‚jÀ)û_î°wR)DChÅ(Œq'µ€yɱ1±R ÑÖ„;Å­)IÚîó4ø+(uZS3Vç€Ûl4så€?À°€0€f4@'³O5¨ ¢¤8ÝJο̥p Ïs%)®õ{ –ÊÛïÞ@Û@û«¯þ¬%ÒK‰ÔÏæ³ÿãËŸßOü?ûìÓOýÔ¿·Ÿñ«:áz½Í’Ê)ĶŒ“2 ÀÂÕÛK-«3§2¥€ÛÁµz Ü—ÕekkuñQGŸBÿã ÇìdmÞ—ia2Wûol_™ YæAÌ…-ð£›ï‚ô|ß`;‚¸¹¹Ç˜÷–d‰Ãœù …Õ H·Í€|ÐI1\€sÃ3lƒ?—Nh±3Z§ÚM_€`ìR}áTj¦{ðÀfÀ0€<xˆfãDxzwö_‘ã«PFmÐA8L €„pŸ ¨, @àŸYO𻚫X Vyíc‹²n†ˆ md•9&Å—Ç/w €¤òjjR˜2œ„……E}<ÿ³v耇æ“D¢Š¼4°Öí¤%÷'ôr@¨7“¢´³žÐŽüÛô6²6Œ^„¡ ZšHTB>ÛIE{,ð†k78'—›nþ². `g7@5š çdùô ·û4én)ˆíY„pαÊÅ ³žq ^ÿÖG…ËÈ'·f€_¿~ýÓÏ[;À/~ýa”ú@Ì)s>9¶¹ùÿúÙ?fÏ»åíg?ý)àÓ$øâ«¾´F¤®(–+߯X¡J]s˜kAøÞò¢çm]©zåYárVQÜçê#€UÄ–#«Éâê\!6²2ZZZY¼ÖgÇÑ@ÛÄP‘h#¢tUñW|49€~É +ž³Ñ3¿CÉÿ›£€{€>,Ü%¹ÿ£²Ì>eg¤¡\€u@ÞÓá³ÀÀW3 °KÎ…7:€™¦:È´Ëàñáá”þ½XjâDlȘ`\ ýQy'¹1NÁ/«ý%ÆŠed< õÑ +`’èg”Sáß²QˆüÌfÁ„Qa§ бöYï`"‚ZéöÀÇÝ7PT*ð²é‚>€?–¥u‚Z÷”Š1enî€) @|¤@kdÙ ðI À¯ëðj_&–ŸÝ8/æ•ÚÝÍC]•á<[ä;$ÊPÂêìþµ Ë*Ãéå¢'¹Â—/­€Ë%ÿêƒuNYƒä¤'Å`į()’0Î"AÛîõwR»rwn¨yîag{ø À럆¼MÃÀëO»v€¯îað¶qñÏ¿šúÿÚz°þñ뾯°ð‰$€­*€_üöï?$+«ª V­&j÷Àÿ)U-!ž úäšvj„[­@ûÓªN‰Cˈÿ­g2,ƒ!X~:çØßMTL6®?l/Ôš‡Œ–V`ó VŠ[–æWòëüÃÖ¯0íóßòÈh€¥ 0^C„+²kŒïÅÅ +~a?€cÇç°QN4j†»A¾óÀ1¨ Ø·ÛIïâ€ýö6nÞá÷ò2 ŸŠÂéïFá$PšÏi/ :F-s29ÉhêÕ³9Tj$‹:ðS€ð› + o0€ðÔx½Í]­UqU О[L­sŒ +€5}+€:= À¯UJ·èûu‹äò:`Eåë³-”Ö Ð€\aÁ«Ô0ïd󕪃­UI-^_ö«*Çb+ƒÿlí¥S±ûb-ú­ý“Ål¬f îJ·.÷ÕKÔ&§f©ÓíÀfô—q ½Càu²±Ù®L•ÕÐàÍõ—V'_&ß»7Ïé6w +äe쾿@ùäãR_|þO·c%¥VŸ]}õ›©ý˜úÿõ_~òןðùë¿üøã×(Ï>5ÜhÓÂ/~û_ŠÒDœ·)P/A,Rиz·ÀV1€T,~()ÝM·¤®Èø8 ŒcJ~ñÿtùf ö|ô¸ [èo"³{akËx¿÷Õé‚«äƒwã€æãöxO“Üš‚ãqö4x)7ðnçD±—<]1ξ²ÇgÊðùá )8$ `žÀ ‡ïœøp¡Jå2„m¸ÐË9öÕcû*”Ìq5‚DÍ\\ˆ`Ú + xúÍW³·¸k¯Ä{ê^Ìÿ)¥› –Ѻˆ +ˆq“ŒbÐ + ±Ü(€åä|lçRn2€ +’§¤ªR…£H1€—Mð @„{±wà_œ°ÅóÖæÞÊò§¬nÝã¬p‚å –ïͱ›(kêÎQãs\âéå&¶‡EP:kßa> + -+¦Zâí¶•Ô#¦­¸Ó6zRÃÿ|Çîì˜K*PX®€?­žü´mÿéO»d:é°Ÿ»Ù|ö·¿þÍ´óOµ¾þþZ¼ýäõ÷Ø3€/ûÏ?ÚµR4)§¿&‡{Zl¯{Ðöw `ÖØZ^í,FjŽ¥ÈM{ë«ÏV7ÿúð|ë© ¨H´;ÅœCü7;j¶@½Õw6âË=0ßë°HB­êfõÂ÷@ÈñzùÑì{«Tò{{!0oø÷E:=^Š88>>¨gæVpÞœ;.B./V%€"Îkþ8EæY_ß­6ýTÀ•þnÐÁVÖhеŠÒÿ`ÙyAZÜG¯‹U§¥@2 `þ#SæH¥@oÇZ8½È +ð¤2€\;wâ£ËðüïŠÿW¢_½ æBM2;ª4Çàð&(.uƒÐ,‰¸ú¦{D&Ãü­·þ5‘¯¼à\¦ŠÔÜ|‘çE¿ ì©àâz1—KòpM[[¢êÉT®Ý0’(€ù; + HÆ„ò—o™ö,khFÞÀe)€ù5_'âKõ¼‘à_㊸´§Þƒôi ´‚=±îäÌÈ[ K +-0Ä/fMã(=í`€ìB +—7€ÒÞ äŶÇíä ‰CÕ<çF‰0ÈyZAÀ•œƒ­]OÀ歫䢭Hæ]GKgÅt_{ydAú±RáìÒá·czˆö| ò˜ƒëDB?#T¦X=ŠÈÚþ¹‚º· _”Tjeða%Ñ£ÕÅtRknÚ4D°ºù7áãCz85‹|Ó%Â?›g\ÿ^8e® ‡ˆªQØÙ÷Œ*Ürulé… |™aµª€3[UI޽•ÕGx¾µŠÐT@1€á¶^r‰ìÂõrR5Þæî=ßµW —´Ý1€XûRýCçŸàr >ÿ1gIZ½ôðw&˜*€·9èC?~ !°àíÛ×ßÿ±«T_üæ«¿µkc/ ÿÑOù3QúTjÍÂã……Gœµ8ååf‰OU€µÅª +x HeKòOç*b^F…ìx@ü÷ÜT»ˆíßóWT¡^Úµõù’PV°·¼ùáÜ<„»^ÜÒÇø;Ÿœg<À:<ª÷Ëd°Ÿi À§~£_íÿÏ‚CWw `uµ)€§0áïYæÄg,c^ó¿·$þeýý¾¯ ÆtHn1¨–-HÞ}‡XÞVo ü¢J@#Ö+]ÑæðqàKGìQ•‹0ø.åã~%<ýWâ2b±[lúœNõÒSMLG3âxöäfì¨ý?¶À€Ï£VT‰9ä4œÄûáŒ\C잨ˆ¸0€€³EÙȆÚx“T¹Ðî?Ʋ@ê xHZ¿ÌªÅ¢,à”)Sj +‡Ò´ªXÌuš7¥*¨} c4‘USÀåWß–b  ,Œˆà%€«Ptì3Ó¡®U᤹m.+Óä?f;›¾¾\Y¶í€ˆ E`ÊÆ¸|hH©€—;/|§Ø#Žà?Wš·rUGùÙûŠ¥ì¬dÄqvsÑ\ˆ—“+ì]õ^”ˆàŸj®òíNLE›@r¾[ÙÀåWùÛ×~öù§Ÿ¼õᢷ³Œ¨>¿©(Jm„ø/±ÞXüQÖM¡p¥@Jà's–ÐÖ«*²¥6QH¸„¿ŽÀ\A32Ž´¬k ·³6^TËäÇÓTAð?oþsƒk4âm»*€Ã€ +`ÿH»ŸAx•ã°nƒ€>ÂüÜ +@ á»0ºàXg<ο1·t8Jÿ» Pˆhžq&Ïb]è{¸+ð( @mÆaÇ :‘Höƒ~N¦GíÈEêÈÀs¨:`iO@NSô2ÅpRe À"+º–Cùçæø/øJ¦á½°¯néÅcE·è/ Pðϧ„“špZŠù£ÖÎÍ5xE.Å3 ž (Y§íŽ[>¨Üu#;¨1o$6Ѻ2W=°8kyXÇì6þ=Üë0ü!¾8Q~½2fÿGa"x@М«.3à¥c4ÄX°qã–€qxÙ]ÖÏHÝ^.H=ÁwÀ5¡¼›Íí¾Èü8ä?ò±ëe_þȾ!š~5qÔñÆæÅ¿É¢>þ>‰|úéOUSð‹ù³ +@Æ/øýV™ç Pj éÑŽísjßEÜ7QX¬›h½h @ì§š¡n*€££}Ì*pÁÕOÈ̘YpŽ`Y79ñQý¬6dŽ€«-³›ÂÝ{5àÍ= ¤Á]æ _0 •æ ÿº{ëÛ†fÒ;)EÅ5{¡Ž +‚ð‰€ïn>š‰ˆ~Û B]Ü·¿f…+ó¹¿\Y뾸¤ý÷Ƙz Ú?.”b»?ú°þU”ÉLeyƒ|—Zø›«'ÿ/7bQ¯e°ÿŸÆ@0ÿò¦HU­ÂêLfÔ¡Ÿ/ +‰[ñÿ’²úˆCÊr]õ«ÍÕ§x’±5V¯¸³ À§tŽO¨ðó¾IOJãÔŒs÷@<‹ Ä Xã€ù[Ï uçÇÙßG +JþAX:c¾˜Ý÷ÕÚÙ[€øÏ ß¼=ÏÒKç4ôö÷‹žÛO?íx‘›  `= Ü?LÏ#uŠ:ÆS“¾§! \ö°@0??vàQTRâÍi›P›ebßJÀÔŨVé¨m@~ú0€Âÿ!( “¦J}¤*X¼BŸ¯#§œçV<Öu +ÀY§‚Ö=xÁ‡Ê, °îgêÄ}«:ÙZàXoJåE Kõã˜ÆÒ~xS8VÅÀ.I¿cU{7Û-.b67·úç|"¥’íIæ:k¿»ó¾86$?e¡*éÚHÞÏJÔŸdŒ€OéxF0PKSÚ/4?}ýÑ'Ÿ|òQõÈš_Þ~P IHñ«4¿ý³_ý· Ø uòéÛ·ß7íOü)\€ï†Ni +૟9°$7`¢’9:ôG¯ÄË8 €Œ,«Þ>±àQa[q6зï7€ MP̦<Ëð ¹›Ô‹ŽXÆ9¡ýWçÀÛ4~úÉ_ÿø³Oá!!øù¯fc)éö¹!ÝÁ%Ó¦"™Åo¿QùCjÒ‚FÇ*ö©40caM4Š“ÉÑ·ì¡;ý¸öBZÈûÄÞ + <¡P¯Mká›*p“n@ '9oà´Uú°|ñ/øùåÙÿ‚ŠX«ض0‚¿ê/®Àµ‚Œ€Qu»žPùΞô¸ºxsmcA“ÊŸ±ÀŠñÆÐ®•kàj$"›sÊûsj%1+ºQÇ2ê`\’öê3Ï•-0„£a`ôÀ€ B¸3âS°@aˆ~¾ UËH³ýC bÑ¥* X’B~Ê óáŸ×fÍ@œç`óX]ÏÔ¦"üÇFƒ +,Ha$ƒ"ØØ¸Ö%Ô&Il¿–]hiYkˆf¾ô|#áAâëíÔĸ^iXùF)Óÿ\Á BàŽ| BÁ¿ šX—÷M¼PNû ú¹@“×€¦÷SýnoNÇh•ôjá—?0‰iOÈ@vá°@²þÝ?LŸ¬C!aðÿÏ~úöíg¯3òXi‡/n(€Û¸¿)ðVÌTªLwÍÁ]²,hᦞh¢;IÛסÏ,XKÈ9ˆkp|*Â4êuÇë]ãjÝpcìlnþ@´¦’Ñ“3íi½ <Í€íA÷»¢òçWx ²œo_NÂV`êã¾¢ÑuÒ‘ä%•A@‹Ó¯ÑN †JWqÁ\HÒAU=À[5€:WUqcõ^ ùÑYõpHUÚäzÌsq5&kA>”Î @˜…@¾kˆ +˜2a Ÿ¢Ÿí9x!íÀÁ¿`“VꜲÁ +/m © `lƒÚÐ4 MõÙÊ7Èçd6Ñ6{#ê±7O’ìV ÕáÎÝ÷ºU*œPÜ<áPA(ùW‡4  +Èß^p›^½z¹“Œd1ÀN¿»ê€¨]¶ïÀðqÀŒÆÝl£jøñÞ"ˆ³’»CTo\º¡ì®k·¢¶fúf Ï?ÿÇèÿOÛÿõÖ±­ç½ ÿÍ%‘f,q͵q/"eòжnN°žÐÛzßЉ>ô! ’ºìÝAb|!·Û@Œý|-¡ãà Ñm tl8ðeœ Nú²¿ç}«fMŠÒZ{Ù~kΚ5G5jŒ÷yßgü©ªå™ÍzÙß9þ½?þ³ˆõŸýÓŸAú#ø»53ðßedñþüß/”iåýŒÿP<¼¿@Í+¾.Z-`)ÝxÄ2ÊÊ>{› +þa@IÈõÕ°úæ|zfÁ„ƒdÆù€f ¾Ò äÖ·Œì[{÷v‹œ ¥…HÞýÑó¾}w½·±åË}üX&å‹Pª-©_ÏÆd2@Zƺ¾ý—ïÁçЋGÔ* A2 +`¯¦ÓzÐÜ÷3ÁcSd9Àm=\4#€_¬çõ£o}:aK6·€ŸˆÐGg]-3€• âÜe¼AuhÊ,+õÃZóRâqË àÈyÓ>eâ‰â¸–þKÌá+ѪËË =6U98˜z¡ÿ-I2…]×ñ¬÷?(Rj9þY^]ZŠp»Ä|ûÿ@qÈÞo•÷~õ"˜bë…ó_ý5üI8;]PŽ +ˆë°QÈ6 +‘x}ñüøK¾´»úEÏü[’?ù]2QètK¬‡°ÿ¬ÈôOþÕÿó?þ— ðóŸÿáOÿéO3øÿGÿî§éì.€?ú£ÿøoï6¾C¬w–çk€Ö”úlhļR6€vefn®?Œ•ý2ò(ºÅóô8cFVOóÜÞ0!ƒ'ÈA? ¾àûK°Ä -gœó`ˆe“_¯vÊõíÕ5xûðözwͦ†ó±´»q¾bQpëë€Þ|°'Àñ@½³Ö! ¤%qe}þ8óŠ)4:ïLZãÛ ÀQMšš³"#v;†ohmúxs +"]äͳ̬.ÀX‚êl 6c\@LЈÜa —&º±Á°Uª9,[Š[V‹sSk]“ÇýÑ÷ç< +€‡ôœž•Xvðx,¡¨t„ª ¿mЈ$oé\WTär¢ÕE–ù¿ƒÄGbÆœ$΂µN…ëÔuºÖb1J ¿aãŠ>?®ijÄ, @7Ýãà9…!/|3  Ò‘•ÈÆÞIÓîÇøÄìl±™‚«×6ðGÆÈY½„X Nea/&í×ÃaoÝ(¿øYÍ\;$¨w†Àb;:Æü§eðï°¿ûÓßþéÏþÍÏöÓZo©ÀýÑŸýë_ÑPÍV~> +U?jL8%@Ü—ÿÏý¿Íz·bÏ‘¹ÏÊJÀH–tüz|>Ø:¬n|9‡Nß#Òs`¯YYûÎ|ïÖyðêÍuJàë$»ë´Ø/÷ÏwOê™ÀÚÇ„ùÍ{Ð 0%ÝaÞ®ôÎÝA@¯/¯ÏÏ1´æ—Îå3~É] ðfÀ½<XN#a©>‡´Êê~zÓp¨ Jà³Þ½û矕è¦vW0ŠZP6`gÿ[@1|Vœ¿s;bªàm uX¿M7°Û5çV‹¤˜96’^À³àlÁtúþq2ãkçþ‘ C=µKQ×±  €çˆèÌEÔBÂÛº:{úM‡:?"‰åím‘ƒÏ40A#üÁ^‰Js +™6‘Ø‘l=1kJq. €7øI72 €p·œ¾üãWýA-€Ùþ±ò¯„ÒÎLGZÒ…%ò.^¡8ÇÙgPþ_‘Å,Ç7ƒtˆÿ¿¡?Ÿ>¾ëþèwäS¸ƒxTj •éã£ÿù÷Ù`8Úé??ÿݺøg¶*~ÑVüÊ €ßðGU¢Tƒø’:˜¾ö,—YdEoÚ‹O濹>×ø¤®3Ÿ-¢ËËû=\uÈ~ÚȘçä°Ý" t}-M¡ÐJŒƒ‘gñ_ŸŸÌwijHv9$ç\`}¬ïêy7i8CP'x?09½¹<óy][³Ù“³+ßhº* –U³±šqM§eº£™äR,Zñ¶žtÆ©46on°fÔyŽg>Á^½…ŒÄ(¥´2€íEŸž» €FV…6†¡þ‘ 3Æon!Œï'=ê*hÎŽt5þC‹º¦¶%:’€ ÒÊž4«Uêrêh ûµ9€,’È©Œº,þ'pTN°SŽ3¢ÁïàRP ÀNch¤d ê`–ÿ“> Ÿî40ØÅ&@›€—F˜0€°Ç6€s’˜HÎÎ*ù%UQïÕÅô>vÈgŽŽÿý§çõ'ÿòW p]’­€_Q¼ˆŸüþ/—ßßǘü›ŸýóŸý¬ü>Æ%<ù—?IGI‹ZòyAÅ®||¿Ø¶•8 +k'¢c±_)`# A¦/ õ…lØ7/Tºm/^\Ù—×€×å®?ÓfÝBˆ]° ó Ÿ»¿¯ˆ*»ö 1»»ON|þp €YЈÂ6 _+ðþ½mŸ-€‰à,K@v†»„Zª)â<@'8šQ/Ðä‘¥›ý·áa¦øa]€ºx¶±{cAóЧˆÂ¢›Þ.î’àø 8¶ƒí¥~¿ € Z_vOVÚfü³>ùâÁ‹´ÅhbÌ–˜™ÈÊ:h‰×QdA2HlRJ~¡Î)s–.K¯ò°óƒœ${Zš÷þ²aù±üÁoæRø^}Š`Y´›æïø'oùŸþ²Ÿ à H‚4M~ñGÿòÿ\Ð/Qs?/¥$%v£8þÖ¶]©DÝ ÷R=œp€i'`¼õÍå<·èœ8`ü‡¹vÞy}à/•ñrwð&®†—v¼/.@t÷µ#II{q›×Ÿc&ðÊ÷0€÷Sï­üàÓ:îgK£¶þ5Î>Ù{í}@ç¶T<]Ù»z©1& ïccÈ1»ë™€ó­ÙK±¸iµ“¬:è!`X2ƒMÜD¨šjif(½ž- @Œ³Ozõw!µímš™êã @@8~@óA €€Ú÷¦û×" û +û’ÕßñPd¾G/ŠýŠ’Çca@± k „>ªŽ%Û¢ ¬mã„¢T@“„¤€«3$݈•ɉ xõc ? ìm$0òÿi•RI«ï§¥ý…RMÔUì½* ÿhT–Z}ƒ¨ágeúzpáç}úö†,Û\ðâ[ŒÚNÇ3êÊm-°Y6CBí‹ÄBò15ä=¶}NÓE4DÐxpºjœ´¸ñƒXbl|Žì~Ž€ç>xÜ/rD£(M®Ä~;âúë%DÞuÓpcç§*|KADw«îlñí.|ÄZü?{Ñ×i‘*µÛÈaXeÊ~u}e °!ûßØÙ˜06Ñ/”³É^ª3=Àd„ÈD8%øÇ›'ŽCÁ1BöÐu§Þg @SîQ +÷j{9Ïñ»±d ´©ïû ?Pœ¡½OI™”4^–—õÍ–@äÀE—£9Kl¤ €J$R¨ðÎÿööy0 9ç°è+¡Éâ-Ö’ÓqR²O¦<Ùà'vA.R)<áøÿªqyWþµ£™Æ[’æþø¥Ø<%­ž“·¿üë¿úó"ƒ³·kaüåßü´ë)íýŒ¤jü¾Q,u£wFâí‘h’}Ê¡ âüc ì(@V6¼}c'` ÎÌË ?ˆ»CÐdm?€¾½îÔ°ºó8ýÝLغO7o|£†@ìiàc °âÊïçú°2Ð×É“À$¹¸lšÝ˜dUc–Ž¿L4$Y{2¯ÉMǰ”k_T¤qhi-î=•@?  °…ir«ð×møëÐw6¢À!릲½±&öuç›km €þ +‰YÁ1áK @ðŸSb\|î{ €{€|97³Å@ÇG0±A̲ð ×ZWÛÀEü—ÿ·œ8›DWþ?à="¡n[‘"ðxÐV‘“‘KÙÄÓ/ @¤ûÌ·s«CoŸ`!Žr6̽±Ógƒëòûak}~~(¢ôp±2€çG¿ùËû(ÀŸþéüv]G-K†02ò!.§'üu7Àÿbêùùù¯ÈÒ«ï'š±!åï]£¨6HYˆP€º@ô‡Ø[8mØ™~{ë“}ç'§¯ècÇ~ùl"‹OËc ¨E¼þ3¬@PÒ"®}§O2øØ÷€ãî ÿ¡ÀM€)Xô8î÷æý›ÙÊF_ÈÊ= àúê£>€¶b}Œ²!÷¬À€6Óq¥ù"ß\nf“ô;rªåÑ4iáÞØWAkæt`ˆõÁ·!(Šz–ë(bÏ.=UÀ&ÀØÐý²–>ùŠIÞÞ¤03äkj °µ²š-±¼¶™ÞÀ¬bºÉ¡Î•ê• à¼6`ެ ·—.À‡ä +t‚è2;Á~$H"› $9 Y1¾S탗DKs7 [&6Eßi€´Rþaœ`blph6'€ƒk¼M øÑ_3\…,šaû,Qçû¬agíÄt…ä³±½‰1 + Aë’" æÚ|ÿ“ÿÐÀåÏþê¿þò÷ž×Õ/ƒ‘-ÃJëÉ_¶þ§·ÿïÿòß|B¨°ÿø Èž_ÑØ¼G'üA1jšø]aG Í„6åö×bÔ–¥>”>|5ߨÑyß×s•):zC=4 ‘ƒÓ" QJ`Ú@|sî¢=É;;VæÄ·ÂAÝ €‹T€}SŒß9–7s¯å£>€OŽL»Öf_Ì?žm|Ñ 5˜¡dUËd€v£ @õr-Wo8M€½Ó+ùGžSX¢¾â<Ësƒ«E‹4ÈbQôT–  ªnsZãWî¯íX0ìB¶Ù·¦)Ò&?¾úÅ?ùxÇ -€ézo=¢v«ì&¾¹ùÔÑ1 Þk{ÁðÌøL²ðÞšŽaVkÆás¿ è'¸¸›OsÌâÀ©$ ³tð˶Cê>¢’*®j¡tÈaü‡–îN'D Íý£zQq‹‘+ÀðÀOIRÛ±"ä «h7‰åPÝ$,ä+w ¬~c¼'Pù“?ûó?ÿåÿã_ý¦Æcj¢ý¨6 »0›ØÞþGþóßüM,@qþÑð÷OÿôOþ¤Âñ+Úµg_µHï‡O%û”(‚îD¶3Õ´@¢}{{5_«A‘âØŸØ.œƒŒà`À›·@YkІ ôàæêò2Ïë³ ðøt*yN€ÿ÷yC€£õ€á‚~†ðG1{œè3}Aòr`ëñüÁÚçÇ`\`À28)€  Ÿ Hµœ)eFÐg›#m-üc´að~6ÂÖìœaÎ¥ «<ˆ!@61€ÿa3+PøoÜešî°9Áá„¡ÝiÚV–PN €˜Áµ7ün @±¥×=¿íØzZ¯ÈÃî’Ó†<µàÓR™s«tÚœ˜FDÜ¢û·à[ˆö`&ç ש?ãí“&?›Þ—°ñFgÖ¯pøÇš9ÿd9Ø[Ø `óaÞ³ÎY5hY‚àtéç2Ÿýô_ÿ·ùÿÙøƒó¯ÿõÿíÿò?a>ÝÕ<Å?ƒ„ô¥y‘\‘ÙB¼¶ÿíÿëÿþ7)Ðãëƒ}ÒþOÿé¯þê¯þòÏ*ü?[ÌCZ?-òzµ¦ÃÒ=飸«$î TBܶKp}iPºî ;f[€×5ùçRŸ´ãúí/¬ƒá˜6tÞ¦÷Öf5AÐx³þ^ݪ{At a§Â¤ ðQÀ†McرߩX[™}Ç(@,MÇŽdàÖlã7€³›Øî÷Žyð¢håŒM@_b4¼ûêcÐâ@Ò +Øû©.@ü» ]ÚÙÜXÀf¸^é< @ŒIáPõ‹“äÌì•lç°îð@Ñy­•mùPjX3éN€ù„”^GŠý‡XØfгþ–ž5#~9©±ªðsBÄp„„ø‰«Íñž-€Åv—üí’0"®WßjDúÿ\Pî%ï ðr8µ×ùœ?UâûY +Ãlȼ3‚l$ŸÏÑN]®R Ì÷ã'ÿëoÿ“ôO~ò›ÇÇÏø«õ IåHR €‘]2#9È øý_þ׿ùoÿŸøþ²¿øÅþâÏþò¯ÿæoþëßüÍßü÷ÿúWÿéÏþìßÒè‚RZ?-ö £A¶¤°ƒ—DGáþQŒè:.2€Œk•ÈßÜ^Î×çONO¼ïç„·§ÏhÆßã«oꂆC€?&A™>>À‰«+[—¡ÔŽ/dѵ¦ šSP}öÚÓ2ø’;™°ô¯ä#$r‡L›wÀº €(Ÿfièùcr?@ ÀÍÕ2XnPøBð•E •àáð«ã(@ïÛ\Œ3ýpé«k Ý_ÍH°.4eÕ0N&|¸Ûáá3ˆKý¡©£êíù^€ô¯˜B½qkIâè¹ Ç°Â±7ü«ðø%­æ…Äý«Å^&M™¸QÁV#æA$ü\]ܧä9¦ÉßÒi›’ˆ¯ôiIqy"Äýuˆ&çxÐP" Þ®0âàjiŸ€=á×ÁœPò¿ŸeþEöÁ!àórئ@E;gïç?92ˆ.;€lûö!] R6l j‘û“«0€æ-Ùr:À_ÿÍ_ýIð/áþ¿øÓ¿üoÿãÿ÷_ÿó_üç¿ùÿã¿ÿ—¿øãõ“TÄ ­ÀŸ*Ü™£éüþEz°^‚æ¨?~ˆdšSàë½0g"¥fÌëÄíñ»ÖËßܰÆ= +~=ûÍâÀ,€Ê´|œ¶hžÔÃ:Ä'É€âиÓ0›ÏfÀu¬ƒø©÷_Õl|”qéõŒ£€ôî,À: ànmo°° à'Ç1r“>_fŒŒ€¥²3}k ðÐ VݽöÅ`r×2V§w§„ØÜZg“1¶±)ëk›ÕH  € À¦ý70w&DrSBÀ: ÕÓuœc«>"ƒ>†ð5áÑC Õ±~£„¤¥PG¾d±Áí)¢({žjþy©ÇüUè"›°£‚˜MͶ8ß¼ˆèèÛ˜™÷sGâÒùÖ,)óÕ8¤ +Òµ—Ò*$éÁ±ÅdìM©xó˜‚þ#1JŒàª½´ÃcDF±èëòT2¡øë?ü ŸàOþü¯qýñÇþ÷¿øëÿú_þ_þ[ðoJƒ´Z€~ñúOu`ôq/øçz¾;h;ƒA¼ëýöí5À>@Gô@ª zùc üÑç»–ÿ þ: x5¯Ï_Ÿž¶Ðù=£|bè» _ĬÔÛÅZd–w•<žŽŒ}pÇ/ɳ@?; +&@3y¾–aÓ&À0 +°èÐc T·J·$ZQ’wV½x58­Ú_}+¹i¥Ÿa¡tí³ üKoñw‡˜T"Õ”O€¦¦€ Ô·ìä±ZÍ0oÿAéEj³dTL܉j2߸פ ë„sýþ,@°/Üâä­åwDÀ P2€ÛͱœzÕæŒýæxÏ.ø-Ñ?0€ß¢(Ó0Î<€\Wà'|?|‡•ç8>ðé˜û‡qæ)'M œ*ÐL¡rd  Ù*Ž8RXF,eÿÛ-Ôf]d„ªê¢AMv¶1°¿}ûÇþçéîÃü!<àOÿã_üñË¿÷¿þþ‡ÿ×/ùÇo;³ÆsL¤øÓâè_é^`Ý¡K’Þ"M€pÞ“Mþ”÷w™2€4ìðó+]eü$ÈפÉ,ÀIŠzCØdw[ƒL¡Íúõ֞ܨSDa"¡ðZ…jT€àöåbeÖ´zïȪ½áÿ[Žêif³ûGÞ-Óxü8 `Ñ ¯ipÀQK }‹&À}£â¿À§ ÀöN),mWýgíßyôhs2ãq´í5s`l ¢lÈÿÅýæÆê&TÕ8Û6dóu ®§úTÓø´˜ ]Zðﻉ 02€H+•¸ôùèy㟆öñqž¾Y îfu3ÇCK¦(:À +9$¡Ÿ‘jÕ,t”:b(5¤øÓb†ñ&. º?!x•€>›¬ËØ €Dµ[t€·W»Õ¸tÊ8‰°›_wož?Â^ê/öËÇshÌÄNpš©€Ï½×f½,CÀ>¿¾? øgó‹µÕ™µ3AðûT?)1áô…ä.¸C¼ ÐyK}\ÖÐP `@Ð}—×È®¥>'Â[ýÑ’¨I/ ÇÍ— +u÷àÑæ +„F„‚èØ›_: +k륞_®ÌÒ@Á´2mip\¥p9IµjA”Vøó‘Ô € ]VKÂÈ Jü|j2uŽ 2%m@.oTyÔL›ÈJºL¬ôü>ñÏWÿ´½QRý呤R2”î5™áýUîÙ‰¡åZälïÞÙÒýc+¡¬¯nLúî¶h6pÈ'çð?êøÜ(À;j]‹tM ƒªDà‹™ßBfznµµº¾¾¶ËY]ÛXѯ¦A¶µ¾µ¹Éçñæ&&oçqFÿ¢œl :ª¿Ê¶z8º*Z‚?·£ÜÁÃèË¢÷j,NíZiükä)Ú )‰qèDÊ•8kÖ›zÂèy¤¬\‰Ûÿ©…ñ#ê'’~¾œHÒ8ú&§ûJYCîóÿüYÇjy¹i£¶/X ^äÿà0ö2kðïÓàìyƒ¸JÛ‘¢ŠÕ9•dë7²Í‘ìkÒ:Ç„è¶7·å0-È„üäŸÿ|D?àçÿâw)ù”““–›,$ºò9©ë×¹ˆû¤4îk毈, ʆ߽…ìî•xJ;„6ßê2è®Å¿‚¸FÄH΢¿¹¾º¼¶´Ï1/{÷]± PF‚` + H×ÝâÓFO0ÃÿE¸B ñÖ×VWWW>Éà rgÀÝ>yÿˆ³ ð]£€ ˜ø€ × ²/*ÔÁL;73ı¶²Î–ïa_][­úõµµõÙúlÃݳu8ÐêŒÏê‹;}¬Ø`6Z'K2>ðÐÎè?YC4OɇŸ`!H°cœö~¤ ;2 Pê·eJYŒÏIL„¦-?1Êi*ÄXгEì²7iOÄ`‘µLúöØ'‚ØÛvc‚s>eFî’º"ê +ÿŸK=IðªÉ7rÈ!ZÀ€C‰*¦3î%O0Y¥^ƒ 5õÁ¿†–Œgî·Kãÿw_PÙ².Âþ—Ÿýüßý‘=Õðóù»?IËAðÃ@ ÀwâÑÄ +ÔZÐæ`© /zõÄ&À™¯ñ€ØhÓ_¯oW€›àpywûþíû‚F@LÝøP0ßÚpqû&oîûHdÄ Úµ×) +ç÷ÍçO|xr–RÖŽêj0 këÝЗ;éÙaø €ë¸Ënnh }wG°¸VûÝ{–ðãzîÌ5ê2ÕÜR2Ëium}ð“–õU® ›«ÁþÚÆšã «1íkë «¡Ð‘úAWÕÄVÎíbèkú + +¹Û…«ï R48µC~ÊQvá|hïnîw7@”·[O¸È{A"uº0ÚlzmJ¥?ˆÿpå4ç Õâõ.d®jñmp~êtÙ'ºs— É.xšÌzx¿$Ò¹òšˆ†àèˆ6€£2€´À@)Uꟕ)¸¢ 0a±{¦ôx¤É(@1²¸`Çÿó?›èsþÅO—ÀËÆ‚èú¼úûüêýÃÝÉúÛË'¾Õ 8 Ø^Ÿ'RÀæ@€0ñüpƒtf·7æÉàel¤“펈,ÀиýRܼïñöµDONl… ¯÷v}ÓЮ  +ýYß dÀº¹é‹eÁbî΀ӥ™KKæîë2p.æ%©ŒsÄ.)û£…Ç™ +¬`ñÈUñ¯@>60Áú~ @3‚Ö)œµð‚µHø÷Þ¡b¬j;¹W%þÓ²µ?Q÷¤K/?ÔB6Ò è49¸Á`DÛ«ãçòŠCcIšIYuwvm‰ +úh´;Hf?!ZOW’áÈû%Æ”¯çÒýò)`Û5 М  ~k`˜–åÄ^˜•g Hsæà¿€Ím2Ä–šX“y*ë &!üIO‹$2("àìæqÀ?߀¿à4xÆbƒÂ “¤@×O +ð‡a款ûÏ3id!Q°Ï‰Ù-?Þß!;d¬ÀhX6—úðoß^îÍœÇOÚß‚ÞEˆ-èÅŠ·èUßÛD¹¹I€cô¾·«Ÿ§›XKhkZB¶¶lÌç{y±Ãƒ2€s_:|òd7D+Q +AƒÛ´1½¶Az÷2€ïìˆ +Gn:{„o Ù˜£XåÙß)¿K½};Œm“¯·éØ&±â­;Ûãüß­ÕÙÆÎæ—9d%1öÚ"®66«±«fŠõîD—i“ À¾h‡Ú$úøŽSPíÝè«`Œï'aQ>¶"ö’,”üý”xïû»ÏÑØŸ”¸WLÞÖÕQ.¬Æ3#ëbÅ dcÞüý ~Ðxpì¬@ü,SÀÎC+R0R€Áù+ }óFîšxöR¾µhšØŒ(€„PŒ™rh€¯Hâêö·Õ¢€HÖ µà·DÓ>+•k@:è;D­]LÀ Ë}ïóHŒ›½Çý¤^’[t@xÚ·ZAèõ˜ñþºMBÞá9aç܈¨—jÖ‰\ÓPPôs%Á?çÖý¼2Ø÷ùfBþb°4 +úþÒHýúQ ®­¸¼è‹Ä>À»}“{>ÁúàOI•äÀÂ‘ÔøBPïLAÐúÖ‰[ùÒ¦ –å0ßþö]@5äï²¾¾¥ò¸O…å ¨il€Z¥¢GìÈÀ–]Që2q麽, +™‰PÝ”…xápš%^8 ”Ú#e¿GÄX.›SqHŸ€$râr¢ªÀN²ÐW0È HAI„Au¡Z½Z ýc>1BdJŠ­¤S15yGfEX¤E lô%]K.áL>àM`²š€Ã0òQº!Ê‚f‘J&÷u"qáëÖˆŠb¡•”¢}NÔ_…´ÎÖI§«ÅA„²Ÿ«'Ÿ8§fÛÿà$-`N$y¿ˆúX¿Õ¸u–ØY À%>UçzGVì*À_ä6Å?†ïƒ~ï÷c¾yOOáZ€ô¸¢] çÿð…'óºÚ’žw€W>éèc?%Úî”åÈÚ”¦ Ž•ý/­ØR0ŸÎfíS{ä/í½ü¬‰;¿œ­D刽½ž}QØÜBŒÄa¡ˆªcI6‚ð6P2èVzåf `{Ù<•¹¾‚…?ÇrèÈÀ“qzí +WØ Ý'9À'~^,ŠŒ?f’ªÃÞþ'ñä㉰yÅs!?îrÈñž¹jCa}˜íCòíœÀm€º_'Ú  pS Àwg'¯Gu³Ä3د%À¢KŽ´­ÐxÎNÅÆÐ¶Oc '6^ÂС`5¿?„˜í‚ð÷“Š§îæ :;íý[ûõÞãÝ“×ÎÎñïL !"ú«@и'ÄY³QÎóö6Ó¿ð½Úel$|Ô #e&,Àúþ}U˜×[{[AÚíPŠ“½=ÇÇ€`?“„ÿË‹ÝÝùn®³dÍ¡ÃïÑ0è#?'ÿI@Á +žˆ>R'ü{€·pg¼š‡˜{®·¼d@MV]ݘ©Ê®eê•Æ}´Œš÷^"àZ¿ž¢ªñ¡÷Äh‚¨]Ãy.™ÎD¬Áhœ˜û AR·ßú^§  í¯ð;€ŠÞ)‹OÛ\RnÜn€Œú׉3%±ž°•±X=?-$›&@õ² E˜ ˜¯Ì_#hcÀŽ| + Ò¡úÓ.qjý£d ¤A?Ø…ê5sÉn*Å_àOs³vŠþ¡È^Y‰2XµJ:Cîe€?ø§%`…T¡)ѯϊ:`ßþ­µuHÃ_ ¸1 +ìLÀwï4§g™”é}8{¬2Ño䩬­ù>’Á,Zðÿ''ðÀÏ.¾üúÂAç@*[´ ÷_ýð €±Áÿ“'ó 0ÑïÓ°`}àg„bl °aí Reé¶ÔA~K%Nªa4ˆ8Ü €öl¬æ1`û¸~ÿ:û'³Öwfk›6;µ +¨ãÃ<ˆÿMœ 8eà®à~Ÿ +¦¨>€–äñš€½þŒ€i #¨ +û1¼*ó!Áøn`ÀwH]¢k×Àê·N£³Âê&Àóƒ<”géÌÎHîšP6aîÖíYwâ¤e$½³JáÒY™ð öƒ<=ýV‚‰Ûÿ—ºã_…QæZGÖ7£ Jª#ä•Ш¼­fÝ þ××—@¥ðYÑpü +cÈQíU‰[– ¶ß½»Ù›ïù4‚ÐÜØÀçÛ=‚Õâw5b;,À½>CÜÖk{Öç×ï>¤‰½$ÉÇÄ â£{Ái^Þå+€jf#^]ilVœÀ¼¿WPÜ?7 ­…$\<<Ù}²²è X0€ÏÎÐv™Ç>ê;¤KÐÇù-I*XC¿èòöÛڈцCPŸ>€ýC¼; FMd¥Z­ÿT, F®ªu«úĽø’)avGG`JM::·ØŒb-É¿Ï jPø/@Ø~%"èåÔÄ"®z²Í½R/&~©kÝÏA»“þêÁº¢ @0¶±ÿÚ©†i$ì€ßÌT"ØiRk€u2sH j¿lQaf7A¦Ã:•ë<0G0©äáC§SQ˜®LXüEó~´«û@³í ?ƒÄRŒ`dÛ›>ÄäâÑ’ $èG³tÉ(ac?BøÈF)=TðLÐ\ÚØÊù„äÊ%âå÷J>žÉ;¡ÿy Ò'²ÅyòñBÒþŸR€dP†Qöq˜;êì^Çáñ‘€€ÎÞQ€ÀÒ|TÆÕtÑžà©Y‡þgE™sš ü ÝE÷o@ɺÿZ¬ì7ׯ©]aˆö×OŠ;Òi|VêÈÈßGƬeñÚó³4 +÷Ž89;÷ÙÙÀPwÏÇgrÄ‹°×ÎÁ ¼OÿÀ-‘n|”nÞ _òx†Ðn,wÎ3£e 0XmÀVn ÂK£6Ó‘Û[ßBv­ˆUymG@ü¯ýÿ€´4˜€LЧͰü<€»÷Œ G|§tù!Ë£Õhàb'«—ߪaúƒ0Ý‹žëè׿dså Sü|¶ˆ–l¬¦À¤»O?~}‚ÿèê„8 X „˜ £ƒ W¬‰ ,k`¿Œ]®„Y5·YgöZ‰ àÕh*-鿉}†”ÜÃ>m¼Ì±ÈÒ‘/þI®&é øl 0〡^ƒ%χüg+=ðqvP€Õ Âƒ?¢‚L¸¥FBV³À^Jö“Bp{,m,@Ú 8ƒ ò ° +¤µ<51¤ñï:† +é$>/¦PþU%¨oð»4ø•ù M €˜|>ûÇÎ~<¼®>ÿAºL±ýþ½Oîg1ÞM VX=}²5Û½¾IºuT‹­ô9â€X€™ø?Íàm~zí;H)âS„ìZ Ù=5¢û§ý¿¶aVcÄ¿X]^†<þN€Èªx¾‡Pj)÷åy4PÎRIJ^ÉPú<¼9Œpce-À(—æFöwªgT¹¶ Ý ˜Î¨:‰¤Tc™=ŠÃOeŽd·å¢4c>‚~t‹Cp«¾mûE7: o òUp§d÷‹; GÊœÿÓ  PJBžøûIÎ)„8³£–Í¤š„’ŒB(ÃW?Ž  ÌC:»W™‹‘`vòÔÔn žÚ±¼$+’¼÷jè$õœfj¬”;¥F"£ ¨Èà þ–gw²¾PíŽ9(‚7éÒ!±•Çïi4¢ø‡‰‡Ö²4Èn>ûêq 4èÁ¹À–°Óæ€ Ø¾]zNüg5 ×Ñã[µ16X6Îçu&üÌFÀhìþóÕ½yq¦ h4&Š9’ZhhìjÖû¡=Øøßÿa5á¬âïzùw Kæ;Å2¯roÈ©Q©¿-ä|Ê9ölàãcI¦MÂ/6¸rñb¾h)âúõÇðƒ’-3€YÐlƒÞS 0ý @%ûׂØK€Ú5HC7™ˆ³µïô:'ž¿Ø!G/›¨Äˆ+ωpP @·±w|ˆ’‰€GÄJÒ÷I_3â¾CÀ[¦ {@?Œ‹PûüÒö(†˜Êhôêo2òc€™\‹\»'« o(çö»m%mÇF¦p2˜¢­”#mE‡’°D9³ç!‰‹`Ÿ\ Š!<ù“ž™Nµ8S­Êÿë±/¿_  ¤ÿý +Â!}¡ß¥a©äÝ—o¯OvÏì¸{7Šðí–±lÔ``¢kòÁ@x€óÒð™@»×yÅÿ½`eå¢8€÷ô>öÙ`g¯/^ÛýG»_ã“>#òΡ¼¡ôâü"ÃZ€5û4Á€ÿ³ö5å|róÐw޼ÿžü_©bC2 +Pö_QìÈVQF ðmðô2äO°¿1[   à†Â<8÷Û~Ø™ `%»Ô¯³ÀU£8Ù´ ºý`Ô>€Ð øˆè/cdÕíœ r똻i¸Jªˆà( Äè,…õ"ù¥?9CËýô¿JÐ9Úï '5k  ñ†¿®Ò2·‹²Ædu?NËäSFÀÿÞ¯Oñ‡,šêH¥\gØööÿ*ˆ±8†"è¿ÈȤ*#pRÿ2Ð(´7”¿ÏBcã¡M‚íGmÌÛª“IÍíËýJä³B’ä¾ôðûI²2އo4,€Šs¿Ùs Ó¼3Æ™?1ò»ÌÞÔ õ5~4îÇYc.®DžwÌž\»G1ÊEné) +€«Ù»NØ}’gØò¢S­˜¦ ·vJèÕb0´¼“ôøß]± ø5Aù8ÿ^÷t)}/±à,ù“ÕÕ@³ãV¹o7·}ˆ»Î þ÷qô:øbþ +ûkÅP¹YfÉíl{Œø„h¶J|p…ˆ®TD¿'€BaÃþþ0äÔ!Ø‚bþ=^à—Ó0¸¶ºFOžîAótÿéh1"œnÈÅ!I‡ÿK8qŒåI®ÌRBï¨hý“Û£å­ÙKчŒgì‹uuàAXSŠo` Ï<©Ô"n=õÂS9mí(Ñ@Yð +(‰·'¬Á_Ãuž@ ŽÇwÖö# +/Lo2ÉRØy8SRù¬$áÞþ’“ï8\\Ê›%¥r¼4Èaýw·'ON âÅðöâÀ#ö +ô ÿù¶jd@ëñ¶€m€ó׎Îæ×Ä^Âÿ»‹ ïê)pqÂ/ö ê0ôSûÿ=/ØÌ=77o¯ñÑÕ a3 »k,àñ0z0ÁÿZŽ"8YVß= +Ðåô}dQìÃ(@¡¿ü®p)Ž£)>ÌGÅoÛp¸±ZóÐ@oúÓ…àú=8 `ÿðàp‡K `çê£ì+ÅA§‘ýƒ"²S ¨…¡ +9ß}‰ 8x Í~0ˆ/’†@z½£áJ¡©N@ç´›6Ž“£˜£oìÏS¾[7‘ç¢Âì,3€{Á_’ÖŒçô·Ã &š>ßP²xüp½¾kIIƹö™!eúŒuá%üåj´¿= +ОYÃ9Ü µ¸îÿé4I‚KÀZÒXö£àŸj G±žÀ5B ‡r´Ò>¶ +cÄ?Emisžè×çD³ò)+°Ô•‹äy,*éâ Ú‡…éï®O÷N€‰Ôï›WoŸÂß8z`,òß7€@ÛÀ†~ÛÆº½a»Wï|©ž=…-¾9L@¶ÖV6°g»üÛ³ÿ¬âœõø™~ð+ö†MŽ#Ù)‡dFP€˜¿þõÿþ“4üË`>{/@Ó÷—*u 6X€1÷÷fùj\î âSå0€uŽ<8ØÙw€Ày?;׃bh2;׿DèºÌ®>ÀØ€¦Pƒ³WÙÔÀðO:š‚ J´þ¿ä ïn\Dí^ÙߎƒÎÄ÷çw@Š €\ª\ÀeXˆé¿h»#ž«rq `ã7VÀ$"×Õ!Ä»Ãø­Q„=ÚEcÝÃ"Ñ:2"è¢_täcÒr ~ËŒ*O‡ O±Y§íĽÖaeÓN%ͪøÓ7Ì7ù$Üj´¯vçËü)1Ùb¾È% +öQÌœø¤Q¸ÔIK"9ò$5U±Ê¢dúrТë7§ON/®.ÒïV@îŸ&€ïœ-”Îó7ïÄ0TÀ&À¡å8àdï‰M €ô`ø½`>‡ ÿçsÇÿöNôÎ6óíøñ@ÓD›C€µ7’{«0{N?þOH/Ø' °¯Oý~v ‹éW•¡:Á=_±0ôMðíÑ#õK°3Ë3ïÙÆšÚ5Ëã=ú‡ãŸ±#ègh ZùlÂ*€iEŒ×wob¸Nà´pÀ+{©¨È}tÉÊ5éÛ*=ÆTXÚØ_Üe6`ÉG³óã?=fÁÆÏHã:?tüRÇjR‹¦„f)Òÿ“N•“‘;Í!b<—Ü×=бñܦ†3`÷¿`O«ðPN°9æ#»”´×J™“‡žà“Ô¬‘‡&¯!ìQi¥V¢µävIR­>€ti¶Ž}J*×Z€Ä+%Ãý °`S Yjà¡Á÷ Íñºè_&@ðëŠÁ|,û"_|û*ßDƒ.ÜÔ€]1€½k_ó©“mI?`K +°²6›Ãåç»NÿÇýãÿ±2~ŸEΩ’¸Àí»ÌIö½C$~åƒÀу]ñUþ¿Ç«ý?X€6ŸéHýY§¢,U–Pp‡Å>KÐ_& õü;ÐL`½ +z€Þa[€_1[™Å—¡"k_¢%(8ÅFÙë ®€PÛ{Ùö¸6lò ˆ„dÅ!¿ `ë¥m€0’è Š 7ñ8%Ž'&OxûçÃn_ôÛ_ˆÓ1;Ù!h Œ ø¤° 82€¾Ä‚ô%¡PZ€s+(mÂ'×kɘ@1Ë©–•³ “[áne‰ÔY#±èÛ´0©.ÇñMù]ï? rÒòåùÊ#Œ^Ù ¨^}‡ ¦«9Åø˜äBI&™MÒþÐ̓ê–eé½aö×g`åâR| :d>xÔÍ~Öø~½>ñý·¶œ#Kï; ÷úìäÉÖ“kv6ö#våÇ@HýÉIµÿpûbãßö¿¦Çsf‹Äon"ŒyÉÝÁp€ùë¿þàÿ#ìó©ßóO2€*³ 0ÅÖ½Ãü$È‚ÂÕ@º”ƒÜTv÷¨9 Û´çã±K €½6ü+‹ŒºŽ€l`ص“y%q=aÀC˜yr’G ²¿ãè½@ЍÁ¨±ZëOdÇ[µJ +àjÙß#ö{ô¦bbO¥±‡vHÆ3Þ+AÉØ~J€ØZ€ºh¤ÿ¨ìj4 „}’<}H“‚ë-º^­€’¥X50@ÚQ\¿…ŸæžÍô ˆ!²V¸Ø¬pɃÀÛ[’Tz¥nŸ_DKd‚ì:Üy¶óŒ£M1{¯^õ˜FkÙý¢­°' ÃR×IT’¹³ÊÍ{ hÄFÀûw7§{g`_œg‚‚ý¿~ßµMx}ð#P€’vØŽ|__4œô“ÙîU"åñ +>£üZï‹uüw/ígýksLIÀ_kYذs?ŠEÊsÇÏ½ßØ;ƒà»§WN¶K!3ÿ£XüÞ? ËìÈ`Ü#¶ô‚|5~Š…*f;é3 h'àŒ +>@spôNõǨJû[¾ñsßGVÌfϺ[¬F|ó‡ªã½ç±8Àu°ž§ HHxeæ-j¥V•ƒƒÊEÍEƬ Àåä }.šj¢#ˆ”{´Ü-¢Pb0J¥†1VÈ1Ÿ4¹ÚrîCê/^êÚ““©,LãðûãÁ¾dÐó[0Ãs‡]).ŽO{½êЊەuÕ¤jŒ‡u›*6ˆ|x.Ìå ÞM(úPå'Ð*­€Bú2ªé +°¯&ìT©PÞ€ùœköü½{%ºdÒ€@](ùIª\rÿzÓT—ÂB¦Ã€0u‡O÷lŽß\ámoßâ½á7SËãÇƒê¡ 0[Î’Zòô¼`¶wS†b9þ`fk¾»OüK8â—iohÞäöÃ°ŽœCà£HÚ†¼m€¾/â]*ü?hoØ/,«û@—Ù‘…çhQyôÑ¢*õ¡øÑx˜Õ«Áä÷³µuÀÜßÛ€ÃöŽ´ n +äÐôÛ¼oÅs…éª'Ñhv8±pµÆùC @ìÇtm+2€ÚJΜ @‡‘zE‡ª[о¼zyüòåKTSäkv‚»»2µzÁ¿†DBî÷ ^ÒóiìG:/–4ÈN‡ha—¥ õ¢ˆÈ>wk–@nÈ%#1$\CvKb£€ÅQ&€¢ìQ€”‡èç´m…Ü]6s'Ånš’ŠÒ‡Q¨°tâ&µtÐj|Né³H@]J0Z}$yº×æå €Ó•eËì&@6“6–þ»šoBíoÏö^ûÛ$>Ã_8¾OçœfâƒÍúšB£È÷µ à=<@ч‚Íwob/Fp¶°s @èO_OÇÿ8:ÆFÓb{¤^Úa³$¶'ÆÁÙA7$¯ 8ÙsžŸÏüàªWçb;ýÿØO6Yñsç^€*±&©f=˜7Q/×ùSÿh@D`@¯o`¶±‘{@zòý.æöë…D2–ÿ0„– µÞŽ­üx0@d¿T""¦¤“”|$Ó ’ªN/ÇBqðI#`žé Úe‰ž. €Y˜D ùøqÀÉÉb5͈åÂÏpFOÊ7wfjDìöÄ€h1!8Ï÷ŸR¢Hf3dËõr8¾2Á§É©qr@§irÊ­‹GˆÃeüâøÅ0*0<¦8¢ølðêà[A^Qx:=Rb#Œ0Z˜sV¤TÕ`¸ð.t‚Ž µs!ËOÜo®ià(AÈ•Coõ*°ÌýÃÉ‹ÇÀ9‘Ýt0 T{ ˆ 8§ °µwmÿàà¼oi†à|¾â @â˜clØÞˆËïßÊý“~2¢‰ñ>Áë€pš\ôlå1ø÷¨/`?rZ-1€Ï=úﻥx²*¡.Õ |‡Z¥Ô]‹ÙêÞXã8ûÓðîëk_ª û¶ng}È F=gÄ€­‡Ã8 ÉhÔb Ë€DvÀ¶MO5 !58C C{¾dv†‰@É` À BQt]]Þñrþ¾Øiå$u쒈Ŗb"-ø7ˆ£ý”2Þ'^fK‡ÐxU.‚ÎIäÇZÀ'瓹~ή3úñ«À RFË@ðgZŸÚ ó(‰‡GÊp1\g ”êJ<šÍñ^€ˆ) VZ½÷-¶™Xe¸x,€, /Ä2¢ Ð}Oke0xI1ªP€„Mˆý¹ŽÑÈ÷MÒM7d÷5â™KÞÛa÷þæô pÁ¢R}„bÑß ò6R|ý¶\Çêh½O~™€WÞ0v`b®¯NC<ÃÿÌLâ,œ"Çc®/hƒ¼¹áD„`obaœìlcšôöâþ7¼ê9-œûô¬ó¹ó«û<ð‡‹  n'wƒ¯U«©E­ö)ù—Þ deQe_z/€@p¯ÍØÜœÙØÿ {¬i*TöÐpZϤoàQÓžÔ¤—FOMS_UØA’‘hyþ²ZõAÇÀŒ‹~&%Sö³sÇT0ú?örøâž¸;^0bBò\ó=¥òYÒAZ@ý7VçEŠ$„'Á(h¾W8(½w@@°-Kª«QÜX±‘D(>ËCS3–as@Y;MÒˆbYÆn¤’¤ÖÓ²Ë)Z_Pâ¬Ámïü ð:”—aÝPÏ  7Ыñ1͆™Á¬úbïe÷5tü-±ooöžx/0s¢+v0Œãÿ ¸½ù` 5ï%è|ÓMŸVúÅë½½ÝÙ“ WÛÑhh¬aì8Á\ž_]ö€©‘¶M~, é€{¡ªò¤R '9%P +à;Há”÷Ö¹ü¿€¾€ût“•»&  jêÊCçb¥ô ýêG ïG-*¡Ô] [o9¥áŸ·{ ­_Àã{|/ÇÎÖ6P² nØ ÒíFN­kJ¨uÏ‚n`u0ë(‘‚tò¯ž|…QJ ¬pSí§”˜3`l“:~l —¾Œw†¨üuh¤“Yô×”bœ•™QCN|G’Ï’qÈ’KòÛ!HC²ÿ)Ú´HòÆÿ|§ ä¥}LT¦  Ä&€I$')KžK åà£=ƒÄšX;š»‰h,®¯ÀѾ³½îèŸÀNÀCíÚæþËøÿÃ<§(P}\v²]¹iQK8Y]¦…”« gÖYGßÏÐ Åc¯/Ë‹{ @c³H¿¿=yrz~þàðPàÂ_ÀÎ_ü®Þ~ð1"Ÿ$ ¥ÎÍû7×N׃`µ=„| àT·  ýoÇ\ØÆ8ˆx¬°#þã´×ççö ÂØÏY43—5Ѐ 8ñDÈìñéØÿ_K¦¿þ`º UõC%s1-ûFL}Úº“eâ$_f&à£âð\øLMÒhwú\MÕÆˆ‡‹ìì¯JW­î<ÄєР+ðw1Ŭª,éà€àútüêE–5üøÈH!û™ H ²¹¶ÀiOÀÁþ±;6ØŠè;Ó ˆ£!‰ûäÛÑL§˜­öPèßñ‰ÅC5«§=þ·ÓÙ•“¹ß¬øÔÏD“¼xi÷˜=d´²G­ý„°½ @û~ÎUÐJ<²Ø* TÒF)ºÃÛ›OñÉý_ €"`¼š¶y^w® òò¥&ÅÒ®à„]?]sæ“v÷¿%˜ßɽm,/—Ô­£à¥ˆ Ø~˜ZIù‚z’§l^~›ÇµÃ¡€Ôêuªušˆ:¢ pÞ׳ÁL€Vu©$«¥7UŽHý‡PMJ£dÚÈðþ‡+‚WNSèlÅÃÀ'8¤`SØxçýÕHdl€]tNŠxrù.øUàó¤Ä×{y“®#€¯õÉœ‡cEyÑÿ77ŽÑË+È„¤z0$7om,äæàË×p€½aFÁlþ}%,¥ªêʺÌWƒçŸ©·dEv½8¬÷"0à[4`›f²ÿV»¢ @õËkœ4$Câ9W®q0SÉuR…Ö•6´Ÿª9Нx¿ŒÈ‚AÊœyÊt¤v\ À$M³pXb+Ý](JaûšvŠçÀ¹ Ó@ͺr'iv)$3%j_ZÉ Å~±_e¦}!Çy¤eÎ÷;ú@’‡‚Ú+o?À•?îXê›1õ#Y¼½ÅnÕø˜€Ë4NŸìúD S|[ïÔûð¾ðVgø®ŽG†þûäôĘ\ú>ÎjS\ßB0h‹”™qTÒpÇδ·;Ÿ­®øBaŸè‚ãº>“-oä»Håÿ`ɤ;L€<|9œøWþÖ¢–‰Cv6ÖÒ°s˜G @ϵc' UütkmƒÊ£Îs§ âÑ}Ó°9‘Ûrˆóêé('¤1(ð°°chã@(õa”bå휀¨…è¢8j[!@39÷ËUµ˜8±§Lpþá?ò ezTïE:À\N @°Nž0q‹lÄ»±0‰ÄFÜåå™Ìa b(0m`Ënðéš“¬P£”¡åAÁh_}*Û⪠úÝEr–² RñŸN@)@NZã¬,[ðÛ;/¿=<|9)²h €ô¨$/˜ü´xºØtÁS¶„`ìþ´cRÂ\ùÈLËå~ B[4y$˜]óWå{uË:`x8¿_?RB ƒDA`Ý5ÐÌ\ÝÝùÆÜB´ÊÜ;ûö?‡ï|ˆø÷Ùƒinq'¼{ŸÌŠ£‚îñ™uvþÇJÔi4yÉŠ÷€îQ¼Oð#±×Ýïlö·óÿÞ[á@ͺ”D0Ôü,É·TŠ *zŒ‘οŒÑÖ&yÚüòÑ—;[³/¾ÿ j€aH]c$¬l*S4Àî?r`és£qÕ›G¾¤@¸I¨IÁm Â9fÚ$¬»êŒj{& +áò‰ê›!ÿÀô¨€N–ç¼I° õê¿%Ña2í¶nY×-¹°ÁI+rÔ3[JŸé€î vÄXÛy‚ÛJ"s±ÕËR(|·í(u©fT tè±¥º¾2òš +ä¼™dgý®h©2V*ÉB~ÉF̵ûì©ø€¼ieg_«„iÊuEd1z6;*˜ìŒBaбñ%ÍÌÿÀµ’±tÝhà]wêéèh2|‰ë›½­½“sŸËaÃÆ7³?¬;dƒø:±÷ìOÝíõ €¶ 7__ØTðÀH1€¹£{[}h @z8•ð·yAòD¶`[ãíõ5¡11BžÉÁÀz8@ú!˜›áyáÈ–ÖÀíú_ë/fóERõ?X¾NCÀOWE¤ð+•ò– ¶ÔŸƒ`?ÀÚ†¯ÐøXÃlAR4 ˆt…Lûocc¶¹µ¹å¹¶2å¨[(ª Óôü«Óèag±›Éç«hh'ÙP’ŸÒ‡…äyèLs^ÿ_ýþ$š(Ç´ ³tèd•îøÿøYÎû40LdÑ,eªé ѧGÕ¹•`w€)œï€~H#£¡3Ýꌱ”Ô ©YVÿ˜qlúºS9½›[°°”—›Û˜zRîÓÖž ß«òì11*…}’„[¤ÎÝ«¬È|$Áö¾¼$O)ìD“ÉôP|zmdaľ‹C?Ôo'¬G䜑ŠÍ…FÕ8iÕ{ê)¼¥ªWl¸,°ú÷iœ83G ·§ÎJ QÃyqŽ©†=)8k"Ò²Ö5Û=0Oæóõù•££è>€½½ÓÓ½Ç3ç\fÒ1'zë|¿¤Áàÿ9£Çðܼñ5$š ’¡™àÉÖÊlwÏIA¾(âû…³]ÿÇPo ÊVêþ‡Š0¬»<±»4 +˜qCSÁ ¤3ÈyyœùÂjuÿÏV±,Å †ßõµÕ™·¬ÌV}?°7PEâê2 +P @Ÿ–÷SL@<‰Kò€6Xã1€¯^”Î ‚çµßÿ˶ €x~þzâÆÂk)³©›™4ÃÏÎÓÀ$šÈùY–SG:``™MÿU¸À€~I23A!˜?øÉsðEäE:¹R&À9ÎÖ²6¥ú($"ÁW +ýb|eó©'«1MÃ"D# +xVL2 DLPåxTó¿Ì‘su^Y¬¦‰}²¹!›yúÂPg5ÛâÕñ@l€¯4°ˆ8u-M´ô5~¦¥Í}QU_鎲ÔpZ౯æO×\ü² þ#EûÝ +øuÉB܉z!ò8æK‡èÎNž|±1¿²«`˜ð”"§§§gggóÇO|°Ã6êiNˆs®NFÄ?$ýæêZâÎê 4'dÌJO9ž¯ÌöÎNOÎöNX²:É*KÔ~}Ë(?ѱïÏo?ŽI•àîê»d ÁòpóËmÛ#åÖqñ›[ O¯Óö…?†äÓjÁ¬ø2ᵕÕÊ„=qV2Ê€×促aÛ¾,-Ëw6Ýú²  ðr¢eÈ ¾ <Æ_áEGpæ#h1ñèU{-·âÅ¢ÅÕ0ß?H¾Ôlωä¨!>BªMB:À™1à5& „^=u#!¡^äî98¿@­OÓRÓ÷`¬5`à!ÈçxûVÈK3€Ál¯<,ûNª#âEY÷\/+€<<ø¸¹ÑVŸöÖ–Øðn€ÀK»&¼‚ˆ9„AŸØÝe¹8U ²`õ<š„5 PÒ±Õ ¨2 ¨› YšXaÜxÒÓ~3ˆÏåolØ (aÓn9¶Þ‹n‘%à•5×Þ¯[OîóÕ`vܾI'àû÷¯¡‰àc€9 fÆçkkpñ9ð÷†C›ššÌ.’¤!@`hI&Ú +°`cvb‡`%Ý¿ƒÔŽ;{Sõ?Pÿ¯Ûö´¨UVP¾V^IzQŽÒ… nå{sm¶þ¥s|jp?£ll³#·þlo?vÈ ä¶Ik5…h!<3£¦„ …zʼ,æ•Ë€âˆÕ„R±þ[°àçÕ]Üå( zÄO[€¹³™Üž·¥tŠL¿ˆòoL³é¯†H{mLfj5'‹‡œ€z 9%Æ_árqDâ˜JÁN‹Ä +ïl"áE:É_ 9k:2í¹Õ¹™Q€ôp4 ¢w$[Û+¶;LS›cHI Dào’…~…ôlPí1üœ”bˆÍòÎÎKü?&À{1à }hJÆþ“–¦&|¼®À‹ á´m€ŠLt«ëõ’­E“'Õ£zWåB– À[Hý›ß 9O/`žÌË7è×#û< ݾ•@ÖíȘàöúÂÇrœùPàz3Ð{ûóJpØŠ£ò»aN +Ø K`S€ôœó£™Ñ½I$Æ„´0EÚ @ÐÖX%ÑÜ à\?·jñ¿ëÉòÑKÄ5ÑýW‰oúˆµ<à¯ý€æÝÆy»½‰xGHqÁYÞ ¶ºIëWà €‡îlÎfÿ ¸Ùßß*«€Nx’L+c…zêêl J™"@-€‰?îà¯Šä °¡ ûÛÏ»ò[äú‹€} €6€ +ý2€Wq­Ç¹ª;bôÞ Ú9½Û®8À¼XRŸa-@”0íZ aÞy™IÿK @~à<’zÊžI:ƒ„ÛØË¤=gà¦×GŇâöÈâHÀúCv²»-D i±§ @@lŠþ‹’P$¸}„}qò÷3›Ù;ìèÃô+eœp8€Úˆ>:¸¾~Æ÷HcœlÁ,üe™>@:x¶‹C½ôޠ㔜4ûCÒ϶ƒ´ð Þ:îâò´œmsnï¼ï4ö`¼g·®ûü‰o LÀmÝtX=bÞ¼°Ê$$‘~‰eñ’ ë`Ÿ»dçg§óõù¨¿©ä¿SRï?Xl1–½ee™[÷¥&ÔHêH[]•7Èô™€4ï·w`û[´ü9hs;à@à yæèušæ9aTzU¸->­@MFÅx€ÌdØW-ÊìêRßL‡6äSïªOH¤û ÉCÃù: °Ì’§;üI*êšÑ+¨Oì§kýè¹Lä©·¿rR9j)È)  zwÿU8—«8Ü?NGбi`¡@è¢*ƒÈËôxŽfÔ_uªjÓd^½È´Ä=K ‹Ý!]ËÜŒ°xç6k¥  ÿ'Ek\y&Só ¼¬N@ðïÒ™L.í‘‘>YL9­Y<ó‰j)Í<-‚^•l<äŒý¹Åo‚ÇGO-r?ä5Å0•¥yö¿½½z²åL Ë‹z*ØÃÿæ7ЮY®]6ÀW@ÊÔíðöž×'{ó+ó+A­;ÜD$ý——¾~$³ò<Ì}A7ÖGsÃ_ нonñá·×WîÇÞHHS›‘“]q¦ùlv²YÈg±ŒŸÅR8þ¡E‰‰pÓj(ü÷+‚Õ¼…öy/oêÞ UTÎa|À8  @ Ø]ÅPóH3€ýú³Ôwnônqm;Ò ’’3€í‹} Qp£fªjÉGÀ‰Á‡FP `"Åÿ¿0¸Ñ_ ®‘Œã)§F 4IT”¦± 'ö¢’]üKhâxÔ˜…Ó.é¢ô¬¸é(À®x‰òØÃ©¬„áõTq:Håð>Ï_ŒðÈ LÁŽX²ø—ixRìû5J]U°0qÞ¾Ñ"h“"×·‘²³ø·ªXìé!¡jh¿ I$®*¬Ïä¾ú t# ¨© +á—#ªøÀ2€ß˜|– €òîúÉ,St™Ö6”ÛîøÁ‘güçO¦"i·öéËòO1[¾èœÁTçðÚ³|/öæ¹çðÊæ¿v¦<»Åf?`¦1‘èvÇü¤!el°DÙ—g§»³¹wÖ9¾Kã.#úüûp`kCÈ8 ž9@žHÞ ¤:V¶Æ–LyŽÕÊÇ$ìLZ£‹C™ö€S>×s @^Òø; Ðiˆ¯1@ /ëŸøáÛÁknÊsp>£ @$ö–ˆ•@ìͿڛ¿ö60 ÚF#UÎKxw{câ;JãÞ“ŽôC{Tp÷l1‰A6ÉH®¥¤þ/B +Å?\þG2æc5G T4ÈϨ|Um0€º-tÿY½P¸a;·g;h ‡É¼ ÐdêQÁHNÅwLЯ±K¢Ö!}¸G39á‚,Q¯d¤Ô@'ËÿRW¯Ž—@  „ô~^8Wÿ³¯6ŸÖ³Ç8ˆSszÏ¢S&£¶ +@ÉS.$1rðT¼„±Øž7ðBŒPE©½ËóN `4¶˜e¤Á·w׉ÔD œgg§*tŸ +Þ-ûàÚV@ +ÖÛvè‹£³Fùòµ~°)Q “ `ßûûK4ó0òiVͨYeŸÑó—rN-{V"é'l˜Ž<&'møË8ø¨)ì¯u=üÕsZf €²h4#Øû·W4žØA¯w†‰§ÿ]¬;}½,G ÙpS ‡àÛ,·pæ< ò*y6#B÷öúà à5þ4°>‘ÄT¡ºvoös<¢º°4‚ßœÈJw„\_†\B ÌÊgåopO[±_¯’yXf-»„w.СDÙmÈœæ»3 ØÜðÙ0€4ÂÔ…¡ `-‡¸™º&…G•RuX¡›œÚ>@ô.y)°ÓK\€ž¤m1UÇ¢ÖªÊ3ÿ7¶!4Cìë#Á`iÛÙðˆPaѯhšËV³Já +Ï;%‚J02ÕDäzÚP·ò“›C75n6`Ñ( Y0€AØÍ7Dýß0D²IL¾d´ )hì8€(€µb°Çur©¤½ž0æÜ0€ð˜´aê4”NÝR ÖËÔÀ»ô‰~<9ÍÎHòØH€¥Yh3ƒh×$*…d1VQ‰§õ‡d"Þ½-)â.ézpºãKÌ:» {¶Ûë02㋘8¤šÅˆ%§£æ b\\×4W£5POlA¦–u( ÿG‚_霓„ÄøxNË n Œßæoä£N@ ÀÆcïÓÍ\`äÖazïËÑI û ÕÅß‚ZËûâÙuÜ—°rÀÉžOê˜ LíC‰Çˆ{u¦pœ3ØJpéjPnÞ\ãüóàLäÓ\A#D2³Ânx>LÎõ%gó«”ÏK£ø‡KÙöTrs=$µM%[#ºU¦óYh_”<~üïøÄ_ @šÛëkÀ›&?  4 °U`ë>bññÆRZ¦TŠY`dR€Œð§úºC¸2}jB²™ìÁ´=& -ßÖŒjxSPü1€Ê”ž2wR`"L®T4Eëè,°Ô·"æ‡UüQLå!’„p%OD.ÉÃü×Äjþ› A22Žê™º®UÐyªN@¡è ìN1€‰´½”%a±†J[WÞ^À_ ½Å}>\1RÔ¢è¿Ò;h­Ã;ú°äFk ×t-Œ”H5¶÷óÐa‹ð'_P¦Zé/†ødkÁ`&µÐ˜ìDVp¼Ã"¸ŠìžØ Q3Šè¦ép +þÀlÍÞÃBø, ÀŒ pÀuÄØ9÷Vʉ‹ywuvz·Os ’ú¤l‹àÝ›+Gõë?Nì¹¾N »øÞbvÒ&Hàò|ok~¥ýàû)ÿ-dáþ ý³Œ¼+À Õo¢|ÊqÍÞ‘¤ Àælm¶spÃhhÔç¡Iݡʵ ¶ÿ« ÔIY(Ï¥šÄ,¡¿2€l©þzþ½xqô"ÏUß[.ÅÜÈgÒиSrœ¯î :ѹç}t<_·¨Z4œ» z8dª¤öË,>N‘w™ËTe¤8½—«vëþ»£4ú~xAì@êa~M€ô*zž¼{§ñ)°ÿÄ"- Wù´ «Xl0lbžMÔ(CfËXckíoçÑ|“â.¾˜ãnؼi`ê4îgJ†jáØ†”HQM¨Qµa¨z¥ ŸŒ3S‹¤Ž¨šœÊò(8y#ØõF]ŸœC£^’îÚ‘(T᫐ ¼q¼y{§Cñr€ºÀ;ôç—oo´k©Ó ·7§'çÎ5®{~Gˆii~aj|Z¼òfaÎjÿÄ»¼”øß ­’C{1º°e/⿠οĮ@éU·ÕÏ¢û¢ŽK#Ï{)ð^äÐÛ½—O\ó• 2€-u{?D@}š$¸Uo ²âQRj»v“‚ +y4Ü ”&@1€2J»Ü¤° ¹Êjþ ¯'(§QJ/ÂüÇOÝØ}"Þ(LÐoA¡b˜ÑÊ&nÚs¨ô!œÁçþ3ò"™……>“îâÃpA\…*Ì™“‚ªN˜ Ñ$ßÀhqÜ© +ðézhV,uˆ_zà€m€ëË«×ç´àwç[++ó+  +Þ¡ ¼½:™?9…b@t(!,€}¹Á@l;!À¤k2ß÷·ïÞÛ ˜·†Ø ±0 ¼w%þ?'…á¿X·-z~…ò.ü§À]5Ë‚Äk}›§; +x°3“X›ûû7fkèÆæöl‹ˆ€½ëè3àPeCñòÊ`E-‚ÿâ*S„èØßwN‹ƒU +GTߤJ |†jÏ/ûŸSQ7`¡“À€–f™Ä7æ`‡©Dð”&•«<:rú\Îyi¨ÿ/UÙR_ +{´ 1B»€aôvgÂ_T¢N”6÷Ÿ>õ݉š ˆ3‰#Û`=ìŒTžÆ>€@Q@R>Ñ©ÀXª^Wr›?¬Ë°#‘PÅòe ß1I@&µÔSšlâØ¸m3Ó±d&ÀæzÒಘ³ˆî?9wPéÇMИ%ó+ÈÃ@«-o@`*Ë}6دæ+[ó½ÓŒ‚gܺ&@ †ª‹dÓ§9p¯t\ +€G¾"¤{/ ò]!Dö1¦ÿî=„c+ sÜ€(9çåÖÄ{ê¹C÷Kƒøo#<öõý’ÿ†?RöœzAûTÃiµj×mÈò^›DßY›… ÒÆÛßÂyÁ± ¢­mbÉNeÁf«,6Ùönðpg3c&úƒBx¸§DØ0Z€4úaŠ#¤v+zü ë¹–öx]qFPÙàtüSBùU)Ùs‡h\ÊÀH +íÐa¿©*YÇÞqUiêw¸×ªCkhÌÃ(•§JPûK>ºËóíãy‘èD’}BR²$Õ3s¤÷’˜X(«†ÿÑÍE€Æ‹ï4ÏÃ.ŒŒPë:p—Î"’Rq§e?è_Ø0¯'ñ5¡•”èÀ™èϤÆI܇[ˆ”5¸Ç˜w@%¶¥&€Þýöb¾2wðüõåå³Ë=Þ~70ï}úzkŸÑU!6äÙºys¥Cæ(_Üå4§k/ ˜ñäoÞ^?ž=9óùÜÞ¾µ)a»¢úiä†Û|=*í¶%l:žh Ó¼¾¾8Ãä"Ÿ”ÆðßFþÀæYÀ? 0M™ß#5|çä ï¨&žDM †·Ê+cfÞîñe&ktë: ñ­½HÝ]ñ}×¥±-"Z¢[‘üŠ(ý™òâ´/õ`b%8ì?²ìî5/UW (oÄ4Ø +=‰&üû)ž˜3ÛU5ó3H’Vü#•g#} $}wŽºìR€HC©q:þÅ5éŒu‘3)>p™Hš,ÊT)x×É‘íuYH6‹Ò”X¾zsâ§pè$Ÿºã/“NF”ä†&'UK×R¥RUÇvlÀ ix§Ô<ËE(¡„ƒ$$,€5åËG3î.™ÜȲh7×ó•ÙãÝS{í°o¯GëÄ  Š‹ §Ñ óÖ.²Mrû <àP }$GzÔÕ|cÏ<ÌN@–8wV5·€‹ æ¿Õz ¢€¹€äéA!—gsßAhžî]Þýíûÿ"Åüààݘ[ÉÕ"jÙºáÓ»,zmÀ! __ÝØ?ÌÍ@>ôd¬ßç2*mšml•3œ0tÔªÍ(À£ ®äAcfDê-±@ÉJÔ«(W>‚6&[ˆšá(À(/ ü(ŒV€XÆoéý‘ƒ ·§É&t¢j0Bxþ-™Aêqm’|Ò÷ª9Â%½e†³÷¨ÂbïÐ@ää¿Èζrh,Ç}ˆWÝò’+]fÖbå剆VN&-Xª`‰¿2‰ž‹É®ZÚ°‰wˆ6D¨W‚"T’ßCSàa…ÿ‰¾X~ÝÙX˜mEeœœ¢cü%uh”Üqea˜ï\zúŽIޤ¿$Ko¡ïn/ç+ç€ _×c@‚ŸV|>õÕ÷Š8Ì:þ¡ãŠÀ7vÈÎí¯[€Ò&À㕽ó <©Üò·Ðgÿ‡Lp|áMM `m»Á«˜LDß|suyöä¤ßB|¿4€ÿÖ’ê h)ôš6@*Ô*K[t!ßÊlPi_n¬Ïüþ2·wf]ïoaJ7Œš +fQŨëGÍj·àjнÁêØí¤ê…”^)ùõ°8gägÄ×?šG¼0}"o”ÚéKRWœD6ö%A#‰; [¶iÞËy²þy”½÷$£S×ù…är½N§T)ë0cî¼c#‡&0 âr&åå«cа&b×<KlèZÍÉ])ù·(JÓ”=KIá»Ï¯¥lQ³õpaîâÿ“´&‚ó 5Ö¹Ñf¨,ˆ™ÄRañZj{*¡ÚÒÊZ…ó,8@Ûœ§V}ÞÈ:2«änšË  î·¡}>{ü$ì—£óÑÍÊôù ÄÏv@\:«7oòfo €O;?;9Ý›ûúßÙ•I®¿ðï]×óõ½ GÁgm÷_‹ÆÀ&}ßOÑ&d;´€,˜¬ÎÕÕë½=š–û–†ïß„ 3¹L[ß z$è¬w©JË^³pgscMO½‰ÇzÌÖ·¶¶hñÏ6o>ÞÞš}ùåΗójñ©¡½À9´8õS:YŒ„uF´ÊàL’‰þ+o‘» @AIm”#.qgá£ý3b i¥óœ0ÏáCŽbC?=‰€‰"ÍÎ Cƒ‘~@R9õbÛ&Àz€Å\ù cÎå²í¡©N®6ùiy…EÑVÛS €óIJYêô-ü¼| §)BóÅvŒ' ðr%ì$Þ`dÃ, ê¢L°B¼»ÏÅëåÐ9æbvö}rG‚:Fâ–é’æÁÁ³;Àþ´ PYbç‘HúŠäæŒ%Yº\e €j*º‹¤P#!‚|ÜAC2ï€3í8õiÝ0ßíåAã <Ç{À pešÒrW6âîÁº<Ÿ-ÿ±&„_{—äl\_]œíž^ûhÒJþ®4xÿN„ú¥Œô»¶CÀ5@åXAè^ùž’ª> @ú7×ÖÖVWêùÄ3Ÿ 8[Ÿ< 4ÏëíCV]èãCU„¨T\bt7:Ç–ÊÁ® "Ú00ÕÁ_#9|utÔ÷ý©Ø.y€€¸¸ô>ƒÚz¶§u XÔp +O’gZGÂ2ÃΣófŸê$;’bÚFˆ …pö×éÙî| M›ú•R üíW7f¬§ ¶Êðbÿ;æ2Œ*Ó9„̶S¬¨ Ê@IÞ @aVAHŽ €5†/ÆÏÂkþ…ÿŒ»ë1êX³”>õ%bÐ(Uxž-ù®@‹BìG’››xï2 +¾ßüðÁ¿ôlìÈøÁ ‹»—Fd÷vÎïå¥}>Ä–½$@ˆ³·¿ó†èZ× W,¯®Ïϱ{{ó- ÀìÒü4”: h[@'°&Èȳ*ük 0Ô?eì'ÐtÛCËtá¸yï0‡{–Ìß‘¤í?:þX @ +>µK½T¥Ý‘b™;Ïù.€ÙÊêê*LÀ§‹òÕ ~|7 õ‰ÕÙjž º²±2ËsA7VVW¢N € PO•fªŠ]R›jÉâ¾f ”ö߀ÐÚ!Ôú°˜€>8ïœðÔ#**¸‡fæÙ´œ“[¨h!CZ€H¢D4>Ñj~lì:#h±ŸäØÅk‹ÿÔàä ÅuXƒ6!¼ ±s¸WØòòežÈMê1 Wë0`½„bsIÙ0_AŠÕ•ç‡C5aé–Šah†h)‚䉌|ÄÊÞuŽ­Ê4ÎŽôØ…­±“J%xà ˜O("àÙÌŽ}u|̉½±ƒ“nÞaþ[z"Pܹ`kW 'ƒSÚ˜vêͽ?ÀVÁ­Íp[l¿ñF€Z éeã=Ù‚ðÍä +“„LêÚ]+š‡Ðd]Y•#ðÕÙç\}%¨ÿʨ{Æv{2Ô @“éI³§³ëÉrõ)àßK«3×ÚéL‡ý”˜>+B1XÚ”‰„ø‹å=8x™Å+MåÍ[ïÍ=· 0¯·vAÓ!ê2€+ÑÀåÞ¦ {샓/!—5ÐWc{—€¨JaòÃÛwWóÙY&K! +Ô™P «çÏ?»k?;ùãfY7cì¸8=»æo5–¥qûw'…þ¡`¨nÄ +e±º>–ž²a+÷ÿˆ +·13GöwfÖñÁ—üTÿžßzCÒ ¨ñJ"¥¬€›2õ˽µS$,t¸ %úql@ë—’|EF¶/bž;,¨I( ûÖ5ëâ“ÝùâàƒR4›æÁÛ­²þM3ž­‘ÿG<`ÂÐí¶½Ÿ7'-DˆÃu¹Uz n8e¶„KÙ€˜0sœý&í“HŸŒkòÕ›‰W @ +@y걇î“mY0Nv9Ïvæf["–H—‘¨ªá_wý~­ö7ú•d©@s‹‡òS#¸Ú\°y¬ŒûŸ8¹OmÅ*ž­FµbR'"–ož»ÀbZ$â(níøª±?³ºTeè?SÓmôI(m¬ý6gsñ™šHµˆ@¢n2ÒѸä9e¾Â#`03åÊFyñ"7Hœ9îè·„?K¬‚ŠiVÍC`iNÊ·f˜š\!úw‚8@Ñâm9¹ø\@4<,_ŠÅB¥ûäoÒ'fº÷ùNòhJ$Ά1¸šç" ø±)–˜ 2k|“ò7—œ3Eª€(1Á‰"½AH,%ê*±)ªMCœ¬»:æþ‚€I+ÊÝD¨T’!„¤²vmör…æ·jȽ‰hˆ+¯ÞD¢ƒä_\ËÀ4äœ ±˜¹\;Y¶÷3€€C3LDVÚ9G¼S÷êâ “àôuž¡ëCy´Äl o¿`h<œà*CñúõëÓ“½jÌ^‡¥ÇQ³ˆå&Ài&³$þûí‡öäÁ}fö”-à/ÄÁ=ZèЗWd’âÅÙEšX’å¥1ûw+º~>Uä%±¾èU¥DK†ÍT6 àp‡Àæaª|'÷ÐhÞŸ…º–@™œ`½!“a@ÿ!›¹±ÈЖPéjUÂÊ‹¯z5eâ¼ ™åWƒï¥pÒkuÓý±Êaîòtø•¾P[N!¤ +{Ûoݬ“(‰QÒ<™IWÞËÅ~JHzAnÈåo¹aŠî!ÁŽñh{2``^‚£>Y®”xìh`½V„¿îóG´þô÷àéÀò%¬j ¸'nìE @,‰ÙϘ\űìêÖÈ‘Zg€EEÊîÊ™^2=F$ç M|Å?«¦¤©Ä ¤—¯ú¸vT‚§@;¯“„ØÍßâƒxooÏkž¤P pmG€wÙÙ”uøþc%òc<º,À9àõ-€0€Ù9‡ØDpïuîØ ¸žo½N?‚€>rÐPqïÐ_o—øª’··o õ7#•|3`ÃÓ_ž_Ú‡X]iÄþ‹ Êºä‘öWLÚ¨SQ—%:ÚÀ{7ÖÖ—Í?ØéÛsôl–æ2€ +W›–š2z*œY±;;yÇ õŸhËÃu´Q]S80€Ò?3€"iœ~‹oî·Uhð¿B9t¯jZ?å¿@mëáI4>—Óö5©Ÿä +MÓý'À™Ù¬“”Dù9´1åFˆîÚXÓBÄóPÃi"lZÙÏ@r*¦Î›ü2 +0ô<Ä£r/8gj)@^¨¿hWéˆî3…g¹*ÔŠk>Z”†±êÈé쩜%ÿXÛvÓ×]ËâªÉÿR‹ªŒiš_3‹8Û¦º%L#)HMñùË!–#Z:)²SÔB_@ª^;‡8¯Û“¦‘áS›Ž|3±r8ebõööbõÆÏÏ웂mˆb~Ó+ð4"Л‹› "ù4 ×ç§'2€€ âÜØM)üƒÕëùã×ìI€ƒ ñö¾½€öÉæ€{Þ¾ü®ÁˆÐ,p~ zuqáØ Ìbºü}ðÿÈ„ú#Þ*~JÜšº#©` €7…<Û˜mlR§5L?•´?s]M0$ ÀZjܦžÿ| Õ­®Ò õÞÊŠ‹UõÇ6ýdùHð‹™æ[F!j¨¼´ï,ÙT?Ç9„è9žz·Q@|L.Ø+µGö8\2ÿ‰ê'Ùˆ&§ËŒ8! ±=ªž˜T€ÝúñEQQ…š¯¥F¤BL!4¼¤ãc³[{¢¹xsÕâÙ;×ìƒ8U>w¸ðŒDÌ?gLGIj¾H`è ›ƒ(@’ÉDÎ<5olëß\_žúL “Ó×ørðuucs]ìû« ñ²w ÃÍ>Þ;tqnà̉À»gP¬Ù šf‰|^ÿA wûy½·‡åÓÐÅKsí°w7ý›¡U9¤ûÜ\ÈìO\’Æëß½¤Ž#UÍnú(ÑÔòB 1Pü?£ÿ/ *Þ}6óï$6 ‚02\Õæ=‡Úmk!¾}êZ²0„ªèѱ§Î&Ýû°,¯ÔiœÙü·@ 7ÜH €P£ªBªTòã¡Q)jmîcêÙÒ®=?£˜¸')ÏîQ½Cå×(4H˜i'/íÓ#Á‰Ü!ý1ÆÑ÷œ)b€@×é­{Ô^ ªøïQ‹Ð‹rËí©'7oçY²+ðF,ÿ|SŒjÑ `'óŒçÃ;"•¡T²ÙÙÅ4x(‘†mS… +ÇË4vT«7\«Uëc@£#þÉ?¿) ¾Ä,ƒ«X¦MúÈí%`îTÀs_ÞËâó¹/®nh$ŠD ´üy€Ôù_^^ÚÿOæó/ÖVf»çZSŽ„˜ãW4.¡6:Üx\>ˆu}¾¸×4TÿÿÛ÷±Ï!Cç#9¹½º<'Ö›;Òhý{.êòþa¥A2€ÔÖDºC ;MUyàlÃ'RwÐîô°`ð ú¶·ŸN€ zGê*Su0Š«ó7šP;TQU7„ªöí°V=Ë]ö¸­ÖEd/„WŒR÷ÅE—k:T4 @ÌôeìYˆ¾œ¯Úˆpy5¨„ÇÆBúÉ<)Ec¿ÛÄ:ac¹6I‚²D‹ùô5h*‹dê¢Áÿ¿ÈØOM€K¼ùàòcØè £í<ˆzð¬„.ÿmû6 €ÍÃŒiAÅ0’¹JÁy”YÛñ 8#ä›<¦ +Ë‘(–æå ¢ÿGð,d¶TQàeHé` wö¡põ¶wJ!UÇ·ŸE´RžÍ Û¾¦ðºæ>ÆÕí¹“È4 ²ˆn–>yøÌÞ¼& þê Î]Ù"¸µ;øÃ-ÚþÖhÀmnA²O‚|œ_Üh'tû i´þ}…½ðþ@L'âmzTŠ5“‚]ˆšO¨=|6Ör÷?vá0}ÆŽ °ÀöÎ  k:@—•ºƕډx;pX瑨 +JTºV®ÚÁÔ¿QJ!u"¯PH!Xm% ÑbB*'¹ýÞz/)wË0|õ2›ªWOš|ƒÔO0Ø•“„^ešf/ ~«–Ä’èÊs¢,m†”Ї8Z`Ye ÔøíÜš6I¨ëéH‘€¼ƒ•Ÿ®ßÅyª)ó;§î›$ Àû:Â×3ƒX~Sxõ„„?õ‰>šOAI÷4`÷[Èé E%­€É(@KœÀæA…, ¹Ï¸F ++O“J´`Ÿóú˜!;‡v8¹':iÖT³çÑy¨shàD ÇÃø¬´s®ÅvüÕõëb{'P€3|:°áZ @C úm"ˆÀ®±° ÀWõç`g‰åä€Ä»ˆCgyŸyéð_xóŒø¹»bë¿ý`›?ï}P`íÖdðÀ™‹··¢Ë³×·Þ:ƒh±üO¾#õ¶°×ï;•Ü’OW²Ä‚­1>©ªƒC66fk_Z‹Xâš@¤ý™÷šaÊ¡mï?’%$1_ ñ§Úý¦²‘Ú§? I¥ÛÓ¡”Q>?…1+`­¨LæÔAÿÜø×0DSòjàb9"¯lâØ€?¯×÷Ç×x‘1rÔ’‹H,€—gz•ríÈ1$O¶c,$ ¬-¤ìçÊ ¸íØsÂÊH yö‘%é XÓ݃~Võ¦ÇÞìÈpŽÍ· åÊ%¹¹/ˆ…H‘>N}‘üg"‚Â(@v,Al7qÕ´C†ô»lâEYHc]Ѳ±tJø1EjÐ Ï[øÏ¹PzØÃ€C@êÀu*€ÏŠÎ¼%þüüêòõ|ãñ|¾·G#9-¼ùh úò>¾ÈFvÁ‡w†üŸ{€ó†ÐxÍÎ ¿¥œ³ àqæ@7òR@çˆmPK æÓîÿ€£¯mÄÞgH|O¡Cˆ?óõC>ùg”Fêß“`tûœ{ë(2Ѥã›z+±QšŠzæ† `±ãf€bèÐ:[ùa&v—X» +GÁú´( U7EvÔ²e@èOˆ D2âMkŽüS‹VgJËä§L)«j¤çÀ"s;hE+»øÙ¡1¦¤HD8@Ueñ‚È‹—"D=Üz_KËIK ÇZ0:7³>æ›@¦jv4ž;öe`äkŽärH²”À´ó³¢ën)_¼>C1·æ»Ožœì±8!€àöK48& (r‚ü%žøÇHÖì4 +‡™0K9çÛ·ï®°ïâúæÊ®üôа¶"_Î/°³ÀÌzïLç¥?P{a€ƒib\_œ=ÙóQ±-Ó¿7yäx¼%_f@ J‹À*¥rRq•ºÿì@ +px|0[Ûø2 àøÈá~k²u?sª&ú´èf¦Þ]y’© ldƒÚ&jT0+#T¼C 9©V£f„ ŽI°ó‚•)ÈZ †ö{FP@Jàc+ãÿeJZâ3{[!“ª¡YrSñÉ ÉÐ`ÆÓ×¹c!„£Û‚nÕµqÑGßý–„9ÞU]‹ÉÖY¸ì™R·;›=p¨¼ž hÙb‚ X€*lÊØD bQŠƒü<ý‘$jS úÀ>>reÈr³Ø¬s¬†ð­Ôù}Î.óÎ_¾‡XûFÏ’>e€4ôœ4í#*mXb&ÚÉš<Ÿ•Ʀ‹NľÞs¬ðÄ÷rì¥3°Èý)?XK B|`B}›OzjЩ&#qí8 ¡GêÕã½³ Ÿ8.еþÝðXñïm5(³€ß¾ÅÿW_ .ä¿ÇÙ(cÙc×G‡¥qú÷&¶ïäüU×`Gè¼=¾Š¾EmFhØ8ø÷èèpÒ`… à1 +>}9Þº¯ÚNÆ )5 + ”õÑOU+M 8Óˆöµ„%èÆYlTèG `R,§lÝÄâ|Ÿ’YÍH˘ÌBâ3K¢{DO>ÔÀEfOÜ÷•-1iЖ +{ÑÅìùÕk—¥ä|pãyhÙø‘^{Ÿ,M€0M¸ô ß™ÂRd)ã.@ †€Äí:­š1öÐ `d$iñë"‰Uד+Oåä÷`]Œ¥D¾ïcŠg•pP1õÐqÀ´2X¬Ñ.¦”9BkÞ 4ádß:‘|‚( ðDp²wЏ2pf«À5Þ>ÂÛà +ýßÛ¥ðx+ à¤ào”H1ð~íSsô¦b›¾Ȧ}°¯9(ù_à'äÀpþ”£óöFôßz»òE=ÐfÄ(Óï!››½ñ«IùŒf,üçOܳ•3:AÔ˜ê‡NÝLÀÚ—¾ ò¾â¦ šaTþ—4Lfè@=XS“¦¯d§X0ûÃÿfÄï7IòÅ+á7èT‹·¸%Ô‰•eݤƒÆÍ&BHWFãA¶ €»®†OG RŸ§l…ÖjŒ¥€­LðKfú Ùû2`Ÿ_¶+Óˆ €… +-@¦Õ'œÿ,E$ Y-2›\Z`ìlÞ™   «,»ôlT§Ê´dj"yA`µE]6í‡%Ä짬¨‘ìøxè§£ €€ã^ò9cK€x ’±Z€“ÓdÏþ½½SÍÀ©¯íÄ,Ä$Dl,Ô»¼vçsðHf{Ä",+5òæpzîĢϲqýÃAÕøö½¯qn Ë-›<¶Ì÷Ðü¯Û’ >ØI†£Ù@ +¥ßC¬¯Þü•DègúXjÚéùSs?šsÊzAål#ø|À&‘€nÝ/N1ÈÁ„”¢ÍèÕæ´x1éÒ¾QzN áÞXaå,¼c„•Ñi §ÈæÕ¥•1¹E,\âàÒ(Í÷öXJå½ü^ƒ§ª½ˆ%Úx°—cˆÓ‘‹ÈýŽ„y×뾜B>“q >^”&‹=`pÅ>ÀÑ„§ P°¶¢ŒcWŽöSƦÎ*ml+Í`'Z0VGã +“£‚Ù`éRêrsU Òa¯­Ò—øOs‘59äÄ$#û¯‹ 3lê$‘RÎíÀa›0€Ã ÿ»ÊÆáJcS¼ƒÞõ™ý€sšói +”ÞÖª!û4 <æÔ_ö–p@zf«++»•ê¸3ØFÞ_ïÍw÷hm\_×T`Ùa{¿|<«ÆtQ{ç ½‹©ÀJØÿwÒ¹ÀÈŽ ´4L¿SªÂúϯ$ïßK$–·”0¢ÇÔÔ3\Aýl`oàñÒ<+k™d gv½û¿IF¹ÊÈ¢@½1v¢’‡®?‘ø¡Aiòþ^µDLek°w €4ñr@e‚<Ñ>º}=yÍð ²oÉÅrêÈÒEe›ƒ*–ç I‘¼ˆÁb¸½;Ð]„²¯.%GøÏàFÚŸU²`A"5ǢسA“€ç”²•ê™…ßýÈÈb¬°Á€pXR/Íj€¹¸…t“m/Ê“Z)È0!¬%ØOR@]ÔÝ@¸ ø?£q ±ÒÃ/ Rôj©f.@%´ÍŒúÝŬ­Íf[ç44Oàõ1OvŸìˉ¨U@á`ÈÖþÞ°²êPb¤’"°Ãïß^_äõàW7ˆgÂ$úuÏo¢ød€€ß{mø§›‘’\ßfâÞÖ“ët,¤@úBu9yâ‡X€õþs{žÂun Z±)`¤LÀÁNFj"·Ü°Ì¾« v/™ ØÑW´C-@c‰'dÅŠ™¹Ó€¨%ÙÈ0€‰q?`q‚Œx>A€@Sà’+JK\X8‡âª×ÆBtu/¸”™º€‰ “h)ýE4A,e‰¸ŠÅé õ„Š&‡3Hý_èÿó†&@ü×w,Dˆ@·ï ê`[5=Á™DòµQCB$å3‰5à_1g^¼©UM—8äš /{Ä*W[‡Æ>ô£ V²Z‘t2 ËóÑÀTqq:¨G‚õ0  ³²tŽ— € xÀêã<ñß3ˆül«mV×üw1Oæ{ükÜãÌYZ¶ÿ+yxå<=F/ùÎïÞßœbê±€qÿ€;Pwÿ"eðêü³àž,ü¯‡8‘àòêâlok÷æí{È(žý{HЯôÿ_M‚þZFшÀþ2€ˆ=¶vÎÖÖv _ŽLç”ÀÎwôdß @Gˆªž ïÑWµG§ZT“Þ,à3¸Ê÷Çä…r*QDç×É\„~>2%it¢«AmFá8Sä¿„M¤²>ޛĢ`ª§?'€Õ£‚;}òoó¿É‡œ/øÇ¤aÔ°Í’õfŠ–{z;0~\(jÃS+¹¨œvD4Ãé÷³óU—¬L +6…MáTØÉg-’<Š ðcž•¾(£æê@¢&ÿDÊa¹0W :šWý<}Æ:H…ó-@o­ ++ tÇÕîÕUŒØ‚Ìý¶€ñ‰tx¸‚]ÿ¯‡×~Q;Git*W'»§ç¹· mú¼7Ð@<ÿ{ÞxûÁ™¿9ôßøóõ6DÌ€³/^Ÿ=™Íoà +bhÉé¿S¬®¶ò}e%,`ôþ@¡É$õcu¦^QÃ,~ÿðøàÐ>ì•“{ªºïö<^î0AWË œå½ @ )\äPœ +ÛÁW{IAÕ ˜é2êõx”I .0ñrúxšÅ<€ˆ§Ýwº 0J%TªÝÞbz`Ÿ@ï‰Ø'uÕñœÔ)ȃ?‘ +Mxõ:4ÐÿÉ^õD }k ©5‡ëÄ£ÅJåÙëÇ"<uvH´àçg€ä öÂØöò]2=ð +6,‰ÇÑÉ“#ü‰yI¾I2:ƒTˆX-û;œŒä2ƒÁíÑѪR òȇ)1ÿƒ8Úš»:ItÇ?®Ì ÀfzË©-{Gòpàè¦ÕßÛ³_¼(ÿ×6þ‰Û½£È‡¬ˆ‚dÃMäÉØ¨o÷vÏ 4âqä>:øímõõÈO0ïª>ï3WèM ÒdÈM„ÞŠtuu~v²‹€xà AéwÉÆÆ¤Ã¾¿hÖïO¬~SµcuªÑVˆU¥8>ÜÇ8Ö<ðW£Ÿê°–‡>kÚ¯.WEÅÇäöf$Qñ$EJ­ÆrÿS`¾Ù[ñnÉ=ÍE¡ÿSpL:v(>‘%P…½à; §ûÒj.5Ow¼pWz`"ºóE~} x~jlsÀÿ‰°{’RªS»Ï‹ @Š¼ÌŒì“`h¬cÂm´“±â\ÿf +gyÈuxÒ”ÒBÌöæC¬C€®& FÇÄkãaÄ\=öʹɈšaU!^u ñ¸úÔ:ü×mLuålª#€=â(T5T—ÔJ’,`Z6<¿…ZÏ W–n¶[íææöbž{Î^Ÿ_äF ¨z$÷û €›[_죂ó(°ìÃ×”`'ÔD Ž¾>»ÈeÑx{³7· pqþ¡ø4éññNv4Ð~@âð}óÞÞ½nÐTð)ÁNÊØáµÏ"xíkHç—i",¤AúY±l@‡~? ð†òuÊ þ%ù”¨R+.U[ð§bì¸gõyøð!Q/ít@Ëá*²•/µ6­o÷éˆÉLÀ% Rp˜1E„‰Çu.[‘o—Àq1nß/jŒ«áÌõßÄÂ&€Sßôtgç©äð¤óôüSU{OäŽ|ix2a² o©¼/$'ZˆoGÕ@j;Õò0ϵ0)×éaœäÄLç`?Ov’¨§â¬·–pób„ S®! %ë2Ι&€5”‰½òvÊ‘H-ƒ˜3.|ÿ”`哌·¥N§±E)e‰Ý@‚ÿb£jY ‚?çEš…Òuû2TÒëŸôøÒ‘oSKÏ„F#´¹Ïæ{§¯_ÛB/“€8[ßÙº‘`̵£sAgZò± —þ‰}ó×ptÌFÝ6€eö{½7râ È5'NÙÌ7g°Kðƒ£€é´{@Ž+xosØdéÖ‡`oæó«„/¤qú9É > à´bV,‘ŸŠ×þ[CÔQªÂ­Z —_€}ÿÃÍMou%ˆõ¨Ð¤ààb’hãɈ®F=ä¤ CØË©LÉ•$㨒õ¿oIéÍǃ¹ðxïŠ@¢ƒ‘4ýM(þÇʉ¹à|aôºªË^’}ñý-ÕþHjüoèN+áD½×ý#àƒçåS ‹ó[`^‡ÁÃ(@MÈ©ùpiÒcs¸¿è¨IÕ*ÊÂ-°îñ~ @[Y¯gY¶Ãj+*%T ¯•§¨ý^u<É„»’o‹§«Š|›qÝ7ñ¼ú>2é9àš«6*ØÁ³}ïFÒæ¨×L«G1sþÉÝ€Ô/˜ìœ=åï}AÞAyçÍ@ pé @ÞïìãöQ¸ì;ðÌ”<Ùø—Ÿ)÷Ñ XŸ rråãþ|$pÝ ¬¯G>ødðÛ½- ' ¡ð•·7XR&M‰Ð'qÏG³Ÿ€÷ïó‡“;l دo.í8y2_ùÊ·'G- ÒÏHðomýV€à/ü#˜ÈJHµSÙÖŽÅOUú•aÀÆÎ¡ö ô3yŒ_Ö]úRñõC7Ðý +?Tdp ÷HLMµàGiçPMáL W¯^N€Oï±êjIvìÄéûÃor½Üϲ$Ý CL}0B¡Ø« /è%©xåAozޝXä<W8• u²hÔš%/” S'û¦È©=@‰™sƒT؈/ òmä„+ñç½´Ô>ç_üç~xw„¹ïÝrȸ˜õμ€Ò޹ë¾ÿ÷Jbb¡ãÑ"×ÿïÞ\ímíîùı«‹25Ðè2è§² +¦DˆQmoØpuyv¶7ßò5ä•ÿAZa>)°¿GŦ€ïi¢–üó ù×êSUÛ”­ê7GŽì  `ÇQðÏImó!Ÿ0  QÙ¾} ’cÎÙ+ô+,Hâ<â$»P:Uâ0`G-P®­@õœ• 5¶äaaRr`“ÎêáÐÊRýðýJa^åfm¥ÀQò‹øö”ëÇBh(@¶J€ä´ŠEJÇÇ®©çy® Þ ÀÙ„N/p)oª±qËz™Üç#¶ŒM‘³/®ÒµŒE _øñªvä‡3i¹½¨f]Vâ›¶E`x§Ýí²¸sâê:*¥NµÈz3 @%DtþÄnè·d§Ù“y&s¶ÿãe’bå%YrµíìçÞ¼ÞØ{"*Ì'Z +Ji@™vAOÅ‚V[H +ÎôtÜæ.(1^ ÀnÀ¯|Àù`òø®Â>XL zü” ¿aËÏó;½“ëŠÆñ†Y ^€í Ó]t€ÿJŠ’³<‚S.ðŠHŽ,Øt^†à¦÷‰Û ø©"V*ƒ"å_•ŸÃ™€Mç˜å3aGûOä~$Š0æ!kJfúv`]ùÛÛ<„ s C/¯yÍÅÕë‡|¨É7.­r}3ÈÔØ€A(æ®//©ä<È>~âûG! ×·€Z³AÂw qLö@ããŸ:Ô¾È Qà@g0€ì×Dh-÷H´¬ð§ pÒS6Øè`„Q&­?õee.DôÇÎ6ÖvBýÅ¿ÝMs'@U×±$¢=ЗU@D‘ŽYÐÀ6Æiww$õ­üxè@#Èjm§ #2€š0‘ä%Þ_¯*)Ò1¦ +ªswŠbgûÀ¢üº~µ,€ºÛðG`1°(ô–û€Ùo”äTZ¨”W¤L@ð«6€ô9ˆØ ØñëZ€4ýVr±(K  Ðˆ˜¶!ÅQ¡ìîÇó$j§êã9& @“ŽÌ©9í–€’:zåU•©à MlݨóuŸtÑjIH…óg£°#j±TØ»ôzp{öÞÞ:­>xh’î¼(å&ýüÒdH?}fðtɾSz€ùРH´&%ŠÊ›+ø×VxŽ|‰ Üß¼uL€Èøtóƒc†øçø€–IfÀ¡—Î:ÀÌ/íœHtÇÕ]B()ôÈõ€²qÇ a|óé¤ÎOöDí ÈsB¬îTæ …ýüÚPÎßϯéûóý5€ȬØF%êb ”ÍØ öõjºk¥ÑŸ»nª½wWºâUÀxeôC@¥ˆ£¼ÓþÀ zW§s¾¼íü$6f¥ä9$íç~‡*º¿ySÊ(Þß´lÄ¿|GRÊÈbk}=€Is('J^*‡\× +𲟠ôÌgpÈ¢@(òÛ)ÔO#?‚E¸kˆÞ Á5 ÃĿiþ¥ +%§%\ôBÀ ¥1¥Q 5  @¬•e—x^+þ&}Ï›Çd§‚HÌÔìvõþ`¶3%Л͆%²lÞ8ïÞÖ=xË ==ïïcoép2ÞØPà[@¿vž›‚Ò6ý•ñ•b4Ò/}fX=q¤ÌÀû÷ŽëâpçÞIðöýÞÄéý«s¹ækóƒÐ´Pl 8 p•§‡.$-j%r£ÊJ/ó¬ËF?w,ÀTÓ:h!$vW2ª¬L @¡°G³ ñòáþöÄ LënÑ ìœKí#„¿ŽgC Ö7ø#*ËA:z>’Œ„ù-øä|”a&`FLÞTîiØë CÈu~Ê%:hÛçŽð÷ƒi>ûBþ¯~0Âð–ÍGFÐN>…ÿ‘Ô¾ª]"—L7Lêu=Ú˜22˜€ŒØËTÀÇ T€ü?|]Ì!äоi ÈðÍ4W/\ ŠðG‰é€ž=Ìé¼Ò0€N’ûú†°Í…'œ— @L»M@ ÊJ·¹­Q€PÂ4Å!™æNæ júÔjT}Ã<€œ~I¦àÖñy€Ò".Ù¾ÞË®~PúÖy¹ï1tŠŽ#wºçwouË’ÄóÝYî!àëÊ-—`ÓƒÞ½»Ùížž]æ~@¬‡/&Ftød!ÎÜ9Ávì½­ÉÁ·á1AvVÄl``ìÄ\³“¸cw¦¢’øÅÉZI1ÝÏÅ$lpÐb)’Å}aˆµÁφ•ÔµÒÀ÷§¿íü¥ýiôáKª¶»†J_¬éô¨óªÓîâ@F3ôIˆO”®ÚûD(`Òã ArAÕ‹,[€Ö;öïá¯EÆŽ^N?4ų˜MC¤šýÞ½2‰+dìÅF(DkFT u‹øŽ$¼Šºˆkòñ1ó9 92“þwæ…Àá(Ë+Ñ'ŽÈ”=+º+‹Ò±,õ·ñ›}sŽåô^ ¡I…Ë«+µŒB!Z‰'þåoûgd¥@æ³$çÂÞ&8f‚r¯’G’žb"Æ9F÷•iÕC€LtÑhYù}€4|A>-ô÷ooò&=:nVúŸ™€˜Çý4>¥œÁl5Ç2ŽàÕ}¨Ø}"®;®öfON^ŸsÓâüøp-‘FÂC %à½fÂH˜'OÊùÒ(©IÙ«ÀF©S÷4,åÔ}ð€% llŠd‡’b&2$YÚ¦ã Rám‚þoë'[Jà.ï/#°Ý[ú¬û®eO¨ýô,Ð LÕO¼?Ýt¯Èý  €GÈ™<[Žëy0*¥Éñ€©¬¬Øü÷ÌGGÞýì·tPOJZ,"þ]õÇß)õO$í°Õ@éa‚«»„ïŠ!ÙÍ· fž‚1ózl¤ÛÙˆ`½Ç´ašâI÷U€8jûë9?­Çÿ _¤é +À‡¢^»& ‘†”3r¥\…CAhê½tw#Ÿ¹ÐyXðš…ê©'[Vzª† +1¨/Æ“a‡`¯+«ƒƒ/=‹÷r!¦PÀ>€íÅ<€ @C¦Äq€Û·×¯OÎ`îö¤€¬ÜÀ5(ôö¼`_pÚ7`+Ûs!ü€ò~ÐÇøs³7?yýڡ±µ€| ˇÌI’Õcâ÷Yûd ÿ’› ¶L®.±'´&®Þúà ceyýPXsb6¢€:Ú¢×díQò³ýTK,úÃg̵Iš’êÿ&š¢ÄФÄ9ðÔE„ÜÜÃ@Èñ ƒ1ÁézÝ#Ÿ7éŽ70õ ªËŸtÎÅDøú`ŸÐsvê#Eo œÕ}ÅJðöp6{ðIw/äõö:|Ýþ`<®ÿÚ@‰€˜\Ñ€¬kØ=Jœƒoñ_hSI ŽÔÆÒ<ÿŒ píQ‚û§Œ‰æ·À_¢ê§¢ïïkšÈìûÓë;  ™@”?Ï4ðu/H@ ÕJ—š€yñòo;ÕpôFÌÒõ|§ ¶e05žµ @ÙÑíËœ§îT#(”àRƒf|P/, úCmæú€äù5:¬”ÿ ½)È¡ûŒw…()í¼¤ÝúÝðJø +„ÀmNãõ˜A›/¸ÀÇ/^¾”¥¹ï9Í“ö‰ßE _èËjmýÄ +°Pƒ$Hœ2û¸¤t-—[yQÈ+¥_6ˆˆÛqØ£ˆ$§ƒœyÚª$çTCç‡ìî<¢,9½éY…f8•lƒ£ï0QwK‚°w¾¿@ ,^=Ùz’{»C;ä€*qÀ:@ûðîƒ +˜¾yù8û±¹?çd7ÏÌÛÙü‹Ç?ØjòPÀç‚N@ö„” xÏ™>föÜe×1ã¢" KÜEtÆ%ª¶`I3€Š¬BÞgj'{åÙí|~‹¥ [G>:VȳÊ:þ_å£Îlÿ¨sÖœÀö'Õ_añ„ÚPÔÃp*]Øåœ{)11j;£A£ŒMÊ;þL.yðT}­ËBRI’‰ÿøP/KsfX?¢Æ5ºYëFýt_ËвïSÝ'UºHEå¡r"¤ 6Àì°ÈòlŸ6M†6ié˜}Ù±ÀžzïòÇã€}?¶þ³aáËòYàŸÀ®%ID|€  Ð_YA(Xj?$R…OnêslÐjçœöB¸¬VÍDŒ&–!{‘ºÔ*]%©5H\GºïÄjc*+Þ¥×Rpß¾½ÜÍ,=óÞ küè«íïi‹!Ý‚5 QpàõÙÞ“Ç3 2ßÛóa@óùcex ÈÇ @cÂÚ—ûÈÜ2âý À>€f·ÍVî2”°ËJq +¾SN¸OG `üq/PQ‡˜ Íl©&À«Ütó­ «á÷oU>ñÿk²~L€­l@¿RS kòB†N`ÃÀ<Ö0*‘݈:çIH*ÑpÊJTÛFûLȄղ»MÁD*¦sP¼€A¸È—Ç*bõö§Ý‹PíÐÜjY.æAcSº©-ŠzRžŸ÷—Q·±Pí®c¼nm€f  `ëPÜùpEPæ¿´SOš&@º%vJ°– 01ŲÂ`;éWгÊF€n>pFÙDÒ¯a=–:5£‡»wU–ÀÕS5A®Œ² z©Fb²U%à\àÅ£¸Ä«Îÿ0žÐOeúH°3ß·¨¯1ONN/.iT#zïH¼ì[¾‡R_¬¤oÀ1ñùÚ[ë½{>àôt/OY4   ðVßȪ@;Sö¦€Ñ—'k0.* šåºõJ¥Qo"¨•ÏþG%?­ŒÆÍA|+¸Ô/’]|’Í +ñ ¨fdÃç½,ªÞ6# × d7O+j¥uÏ*¤ÖÙ·£v§ÂÙ¶æ‰8ôtçBÙ{ýÿtçéˆz1™ <Ù¡¶— +ѹÌП‡›ZNñ ük*EdçàåKÕ0ºßnè¡£(]Ux‹õ(Uè)êZ•©[²)â{¥1ÏaÃ)ÂAò0É`q{ÿÙÎ!K7}ß}«‹½uc´¤þ4ൢÓö+c«?Ö$F`V´ŒhlÄ Œ’…mj#!šùø¿ð_¸–Ì!?NÀ*ÖÔå}ð êŽÞ*OúU ¬³7Šò°"ãø‰œ«' ÍÀ²¬l-dïüæ ß\øj°Ý½ÓSßö™‚œû~O].ŽÚ1z1é€áàtß\]éõE^r²·[ÏŸÍO|’ðÉhÊï¡pÑxS  ø>„åd'—@õœ~Ô0ûb¢w*V•/ÙS©e01u:VqZÿj‰Šú»uxøæ1€j Oí°é¿‰h²®š@ä|¥'-Ÿ@n¨ÐÙQøGõ£(.à Ô uGŠ:aE3ËÍ´ %S&Ѻâ{Äd[¸HÒ3ê —„X<)»”_|;eÂOü¼’‚Ï–£~)¯¬“¼%ûiéâ5q6¬ªÍuRB&tÙâT)ü‘¹ƒýg‚Á²…6`AkÁ_ +Ppw]€Vìç@(>]¾C6b— ¬Àbd¡¬Ï¶}$æ9XM$ÉYÐÇÚ b­¿VØäÛÍê¯X2ذB(b-WR0‚¡ÇûÏv†'ÔEWjP¼ºH~¤ËL`MÛšÊJØyIžÝy +~ïÆl6>ýo×gîž\Ù P3pÖÎÔ©Æ€}§U¶Ÿ‡úD°•‚´ˆãÀ؇?Œ¸…Û/à¾OõȦ}œçA ÷GJ{8Û>uƒo? Bª™ˆ­n½#ÿÐ×z*Qj#ç>6U3`(ëüF'Ð4-¿þ?f€ŸíÿèGH¾ä/YS›=Øgˆ`s#]yC‰‚þáú²ÿ|{ûi`_ ŠSÙY0ü= +'Ï*Ÿï¨>€“i€§_›arR$‘º»´à¨" ÌîXV“è*¥kÈDJcšH:#Ô±ÉJÛØìÏÞ_B¶­ru/¨üéX¸@Ï„µ¿öìGcò£E5g5xi÷ÕýU– VO>:–)ˆÜÃLõéú»W JvÇǜҵƒßËÝ”Œb¦ˆº$?!/ë_Å{ã!/‡ˆGrµã§ûà÷wð’öF^9/†¬[°dÙÊûÅ*à¸Ö¤{Ÿ X­þü,Пuâ´Ú””ŽÅ”Ó’tÄöÑaèü]¡žücOEi@Z„0ßÎÄÓ0‹a­Æ TC¨ÜLÝ,pŒåÏã±Ë2zie××€ìÖžm¡u „åõ ÐÅ«>¼M Þ‚%¨§÷(²Ucö i¯æÕC bðE-óÙ?-=xèǨÌ6V×4æÌ ÿ¬<ð$ D8fe–GuEßäµÙö±)ª«+o ž<ÔŸãÛ€ì‹Mˆv/‰hG–ÝpnÏf×öýgQ%ºc¨ê=žCÕùµT;"òc¨ëôà lt ÜOç/«Dñ(Œ£J÷Y ¨4)0€w£…FÙ +²T©×à4¾ªZü׸÷€l}/éƒ}¤ƒ'dþ%?AA::éD¹W^·}\x5ä))ší–¡P.ƒi”‡ ½þԤ̭ë/Ù À˜$$0É ÒZ`SÚ Âÿ&…-–ÙÑõŸŠ"’À÷sj„2!C…E ¦q“™•#e"¦v­Ø~ êHš€xñ‰œžìÍ7tÒxþn”ø*Þ0ÑÈVþ=ñ¥€Nü XшÌ}ÍH½QÈðà *qumM ýÿìÁÈİHvü_èùWÖVWØ»„¯ÕD£ýoæ_=ÐÄ6ou +Ó%¯H]lcü=P5}$…·Š¨‡Îg•Y-Â^àè8¸0û¶"eTflAˆ(»"mëš´BÄ+¤Þ7wôýhÐP›éÓ¯MmKù´qpÀh¡ÄÒÕ·…( Më/,êËâ“í£Wf¦NÓBXoøÄÞ$ñþß6@0ƒì[z”O_tTØ HÊ<Ò€5YwYЃ˜W…üQ <ö@xG|è:\ªd§Ãˆ¡°´Åv"IR–Ï[aÉ ÁÖjj¶‡$:Ö†1˹–´8(%U…éª0—ßçx‹n„ ü-l&v ‹’ÔLÔ†T"É–  ô óRÛ†§Œ†Hä€p~zJYßño€E7¦ þI2í;€Ã€šþ—¯(¬@iŰ,½ðì4/úû‡kÀWï/®ó^0 …»þÕù/c `WË7 +±SÀQ[4꽑“¶àÿÁÅôïK Á|Õ_ÜËÙ~Plçÿ”úÀ…1̾øj`óbeÂfeöemVÉ>Ì1Êj¶Ñ+ÜÄoé+!ÐuÔÙHe(t›YéݲÉi3`ÂâónÐ(ð듲¹`@?Õ­ (·`€šSI%qÞÚ¢ÑFÕIó úVd*^q§ÙT]2 Èî¥àÏÎúoê‚x²}“äÇe°&´2¿þטú¤}Z,&åW&“kîk@,H­Ú CP©Ç+tc(ìh`Œ-ëG4ÕŠ,è€&Sc¡= !a`v¸— â¬S!´P¼^î ´®­±E5å*y1¬ÈMá•r0k¸þR¼v?@€èÿ¥‰C9¿`I}'™2 ‰a!˜­^´¢ü¸4@¬feí©²è¤#°ÙÂfŠ’}Ùää½@%*GÒI +Ö³l‚ §†_ìsýÐ +y!x–×yã7Ÿ=üwã|àIšúµ=þNß +’7 úš°˜€™sgÖæ¾AÄ׃–hì€Õã¡Á¯ Þß• àë&qòõ!'`k«X|>–£öpÄø: {Vg_`,ܪò§\RÓ;eöqÛ;Ç2ï.F'}RMšSD¢*A|*Î +”ˆá Ä<è~*¼ÊÞ ¡b•FáÔ6ôÒi&ŠA½‹ÑvÿzN&{cQ)ø§—H@*Ý TÀ£Zñ»B‡XžÜ[‡âÍd¯¶:ûyŸ(:t亽KÀ«}þ €•ã‘2Ÿ”›%¦mÔ')f- b3€ÚcK‘b$…¢«DªÝ€÷‰dZjŽðUÝøÏHJÁ­ù›4†td˶x¥³)ü‘gMœú‡=J•{ýì« 7a–Š'}¦õlIh +8¦C@¢1ýy™ËËcíòð}º³½Rïö_¼È¿ ÀF¸íÀ:oö%@ýàz-ÐiÂ|s¸¯n£ÀZÀG]±ßWˆ»BÄÿƒêHdmd"ìt¾pþôøo?0€$˜¯Ì‰7ôxˆëDÃÌ„¤ ª^0Š ˆ9Œµ`QgMÔl"–±%ªn¬ÛXDí¨¿¨w×îXÁüKõ{·ªž£A¿Û:©aìs–3V‚bþëÚûQÝkG¡a„Ætp}•h®)¹â;z5#<“ç´I!"ú]Ÿ õuZH5"…òq4™ö»QªIR–•’ @QÓ…ñ3·ê©AhüK¹&>bÝíPC{ÌET`GÐüb3†'ò+&eÅTF¯Àã›K8B®!˜JQ–U{ÿÁõ÷€¬Š´€5ßöóñ@ÁÖ²3×ãš³TR,‰ôBÉi•{>òJ‰P`(_aš*¡ô)÷ý¨sfu€{"–¥@"}kåØôRäÜô´75òŠöú—eåÜÉ>ùžŸ¹Àÿ¾L´ƒa‰ìàôô Oî6þó¿+ZM–˜9—(†vñúuðŸ>á=0€‚¿ÀQ€f|‚_Ðß €&¹šû“ýDìŽÃbšäPMFcìï<ÓT1•x†*nïà‡lÃø§@QP‚J˦‚±wûûP:®>è¶^k¥ª~¸Œ¨BÀ_ 5*dR;KðÇÏPulYÏÕÂ_f "ª™¦$¼Gá:«q!X–ÄPýKÔ(~Ô‘ƒ<¬Rƒ æôeZ’¢bãâ-ùYßHþRN/PY¤ +ytt‹°P„B4Xj5%+ëƒoê…tp"á,ð4õ¶CËF`†×Åá(é‹B¼b.Ù1€…8¤gIrÆ ÿa 5Ì#[bîSæT`—ZjRP€c€¥òkBå¬dÂz¡¬0²„ÎÕ«Á\‚ÔØ€`ÚºI¤fœ–Æ$’ +‚TD¾†?KñçVÁ¯¥)U’M¦ÆsÝ2€<ÎÙýÅÜç þ%ã»ÎÇàÿOðíXA,„uåge X»¯ww4Œ@úgÀ¾G¬Æÿ¹-„<( Ð|0›ƒøÿPzGÜTÀ} [yB{n@ü‡èò3 À>À¯¿N¢BÒ40Ê|.’Ã(Àþ3šÿÅ(s‰)BQØ65Ó‰…IÄÞ"ÀZ^Ôo Ç[ù9W*]08ˆæ@_ÃΘj/ñh*‹°üqOœÕÈäÿüDˆ}Èf +„ßÚ³âÔ4Б$!Sõ—oÈwôÀŸ’ÄR„J @0zGˆ×+>¸bÿt‰T™LÅ¢PkKñëÈôì›; ËÎ.ŸŽQ•³`ö< ÉII,ͤ§p˜ÇßÕJyõê%¾dž?he݉Ê#¤K¬ÁZ[Â%ÙÀäÂuì±zšø,„ÕR%Û¹r +¦TLc¡¬–IDATEBû~¨Ç¡B¨’R´KÆäOª,‘L¢}Fkm—¨ÅW¢qHbž/I?÷¡À^;ñ±Ç“åðùônÀ+ŸãwyñzðØ!.ÏÂãÄ2šSK’¾€ºÆˆ`°ÝÔgø-YU$•aaü‘ E¬¤ÌAÚèar‚«˜sÍ>jšº âÝ‘ÂÍáìGCRÚIfbE‰â ¢±U»^{&ÚÈCpüªyà»d.}!ð9àGvÂèõî¯/ðò cY‚>W—>5ÀÇþ^¸_¶(7€_^j3.¾9ûÑÙ7_±&Fuß{ó¸÷ÍÙÙÞÙWúê3¾_ý³‹3œ8»çº{Úøÿ@ÏðñÄ!ÈÞ×EöÎæ¡÷ƒühï_°ÚÛ³s6ÿ³³ßaQbŽ'£2gD¤‡™ÒHi~rü+¨¦·rƨhE ™Êô$Ä«h¨µ(X–²ˆµ±Ê©ÉþW¶Ý•pÄî§ê#50@„ÜýK„Atqþúþ†ÿ`:ú+ÀE@!?gÊ9Q @Žƒñ± ÈçWÐÕf«t5£ôÿ‚wÄTHSHa=\ß z&NÄ~Jì?ÈÒgëd=îðlÐM$¹ã†ä„‘:we!Þ+þXšxr,€E30šÍÚHbC C ö62Y× 6,Ä Wr$”|• Á*ªaödaŸ¦F MME¨+Bâ0t\Ϥ[”vL€Âá‰ZFÂ9Ôl·^aDí@!Ô¥Ò§% X¯_—Àÿ§ƒßÿÚWpä< „h´ø›F[i¹ýØ€´æ[1{WÕ°@dã{s'èØfߛձ  §Î|þˆS†aÝ!P³4s6=xöÚŸA¤=øêkZœâ믄¡Ð΄ÿÇ4ìU½´p`À(Me¡_IŽEÓ‡ç‚hJJ'ºÖãæ•A…óçSbÍ ©Óº9Ï. ªß¥QþØõeÈÞA`qÿ1I¦í˜|5K €£rÒêtv%5Α@0àܰ¶Vœ{†=¾FD¢w”e+þaô /™Ô‚=Æ ¶²rwKRYéæþñ¡­6®¨CÍLê@°9íh©«ôbdj‘+ €öÅ÷¹9áȼ×7n*"±*:f °Ï7øŸþ-†VQ!ÕŒªgVÀЈ•àÎl¼þó´ö ¦úŽ®ˆHSs®bhg%e@®Ý  ›êѰ­\/äâÊ;ûšìÊÿA³Ì_tûñ‘ßy2ÁÇÿn| +¿Åõí8ñÝàeÎ` 4Äÿ8üzï«ÙÊš­ûùÞX z#¡ê |þ@“ Ø1¿Þáø™$€AøšVCuìÉ ¾øº …|ì¿ø]ŸÍ¾¢ °ª]pÉÊêË*}c¶Xïïÿ/éÛ„ª“J‘ßGûJÔ 9mË¥N—|­Z òêQüQ!µ]8Ô.käST:¡Ø+ -h#1h„‚¶@ý£ ¢DÛú‹¤¨K´sˆŠT”Wê¥z/ƒH¡] ÎWØe³ÔÙ¦¥2\ìŠN À¢ïÛÿÞ•¤âä|ýä7ô`¢Uô‰Œ€ÇÔ­ÝE %vñŠj´4 øO”¿zí€gÓë´'¾›P€Ÿ²$½ü¥„ú)ä2óaþШJô‚: L€yr31,gJ; àNu•ÏNµº¡°b!&‚}¬në+ÿA¯¯’r¢œ£ HN´–Ië¿(…22€©L €Þýê¦ À“€³ úÊF¿ÐÇwùù×ø³¶ -ð½à'§væ9pvjP“ð¹÷õWk«Žø?øê›ÇgD +<y@¸¿™3œ¾,Á³9ð>{@ã€ýìq7ß5àÏ_Î_#óÕÙã½ùlèÛ]8wTam¶ð mÚ®>€å hݺGt3qVýi¥U¢†qm£>w¤i¬EU ®«ªò‡¥*:þè¹Ê×#JX›‘ Cô¤ðßÿâépúLÐ2þêC-)¥-Õÿ­îˆ.Äu¾^I‚‚~V} +5sÇæ¿¡++Z(µ‘âR½RñîÆÓÅOïÎïGBÉpñ’~€5 c©«ò™UŠ¥ãË%½gz™=!ðùØ(çï +3ÐGô±„£P<•%«6 I$ÁnŒ‰4üGü |„*I0_6©.+n»ÖÔSÑPŽæ?eÿ$Óè—$_!¥ª×Ÿ†´³ï„O÷‡ïóý•Ü×_°onnÏçw+àô5M{›ù’ü¼ñCЃ † …°y§Ç¼Öì=ÙÍSgg)þ‹ÐÌw\O ŸÍÏ`e6yðÄ@ÀG¾°—O‹9È^v„°ÌmJ œ¤B÷±_}}6ÿFfAF¾üÈ:kŠLÅ H…K€:ž¥?¥h¥˜z›©‚Fÿ’âwfú]€TÀ½"©« +¡ªøX"3ô¯7Ç&€ c©âjÁEâ(&Ú¤dn/ëÿÓà™òõû£d’¬ÉáZ¼¯ÈíÚZïK&9LáÿÈÞ‰i ³°5lNÎárWr À&€µÕÁî”éÝÜÄ´YH)°M#W¶®uáRý&$  Î?M7@Í‘ Ô'¡á/e¼ÆkKrÀ°Ô›ÁrHùãQrq_Y€dJÓ3¨$´ë?N¾nÖR¨ÄÏ..’k0j€ƒ/޾Bôõ Ù{0×Ãpÿöþ +𣯿ڃCpp™Û«5Ø{‹1º“íÃô‹78h=Ì7¢F[QÕÖ½’GŠˆ>¥Ïw49a÷‰µ9 TÀkÛ­•tðÛë?[t‚cöU“ì‹Æ+1ü'¦þ?* -¨s¨ H ïQù-ÃÖ ÎÓÌ<ë:]çë•yy}3ØæâI£ÿ”¦(êú]*ÁØQ¹’½÷†T,WùMü©ü{í]ýœ¯C æ+—,š½ á"DZ3€< (×èu ãÿvÚhÀF`a¨áZ äüý;g†²w"†N¬eŽX/Mž×gµT•f#SÅEŽ »ÕP¿Äwá$œ‘|P]¦ÁÄ©óqÁŠïy8ö¶À>4ñXM;…ÿÍõŃ0€ôú˜?(4ø¿N@ˆ¿šŸ}õ Î× |i¶ã«ËØðU –â‹Lùß“é?Ï™@YyÄ_a"äøiüþ°€ ¯öHØðL=Zqn ·a>U{±¢±³à?®ÂMrIZùZ:ÉýÀ:¶½ÄãiŽ_¿LîÏzßQ—@1ʧÎÃilÈ{‚ݺ5 ïï·ËÁ-ñ?,ëMZ[à£Uú{"Ù¹Ž÷—–N\ˆÚ#•—!òÚ½b¯ö•6 ñŸX8»_ìc;ávôÁˆ¨ŸÔTÎÀ\Ò`õ÷o_@G#‹±€£´ãñOB–ÿ1ê§°Ò +ÖdÇÅ[¶z[`Ã#}èèOhk¨ã<ïÜ—šÜé(ds4eÂõZ³u/àå¤ § ÀÇÿÞÜžm­8R·wrêàÅåkH§_þÐW4øÏ5yH"Àmî_‚Úv¤@|"ipÑ?Ò‡ãÉô#À7ß|£‡vðw2 Xã¿>gû+)¾þ}ï›3‰hv¸P‡OD Áü È>GüèG¿³·GBg3þ³o~çŸÍ9€#Ýɲê­Å5ƒÐû ü ¨»½Q¬üÿ ¥vSè–Ú¶òEz‡2tÚh}^D­¿ŸªH‰÷ÇP®Ó@S"p“?ñèjÉXÑÊÂ$v)€€Pÿ‘³Ke„õ›rü×雀ꂃNV¹ ¯$E‚É©<…wîC(ÿ4 ¹wD ÌÀþ@ŸH£Àf>N<;9ÙÏÓ ô†µŒÌ/pÿ0õÍ,†·]€Í¯0ÿð׿:ÃÙ;kHÙûæw4Àð#[X‡=‡ý뀽½пùúwξÁœýÎï`¾ÁÐÖ7Âͧ¬®y{v€nmÊP§RÃRÅéϨËwÔsˆ…ް5X€ŽcŸZU#ô™¤ç¥Éß@'øP%Ô™fÝ9@éù+uÎj‹½2ëß¿A ¥ä7{j§¡Kâ+'Ž ÙÃ~Õ‘TLTaï¾JòªÐ™O.¨.µ/ÍÅÔõPí«8+äOeLCÔ¡$ò·’ä×rJwÉ`JˆU±IËæN1€É}š‰m¡‡ Vo,©\Š/x12€ãk=M¿mÐìä³^¬R>5sâyÙ¡/øú†g Q +žw,@°ðì íŒèýWŒ ßZ1V +Ö'¹C°BVܪDÊLT=æ½€5«*eQ "•Ë ½ðbÔì1à¥#^¤ ÅQ§¦à*Û<ßêQÀšó‹½¿Õßœ_Ÿž^\Ý\œŸž_†øQbØØ§©{Oº PG„$ÀÜ¿¨gzC dÜIý2ýç/á8Åg)1”_ÏýSñ6aÂÒ»ïü×Ï÷qD¤¤û'@à#«ì0þÚìÀÁ¥ô ú7~•V[%ŠÚù.éÈFÚ¢‚ûÛ +Õ¨#Ù}¯XEU Á£á§¯QH]VB½5LíÚQ- D²Šü’4h$j€RçV^¼p2Ыÿ€¥ @`šb1À+wéìÆxáD¡ €IO€*”U6§N?+¾m/“|R¸+9!€³„WhÒ+ ŒJoß bû\nÍ%   €1Yª ×v?€ðZ’E€•áÕem×z¹ÿfyúBÙ»¦’4†5BBÁ£Ö cQ";ƒêªstB&@Ãìì²FˆãôÄÊE–gšDôóÑÿ§,2Ðo"êNBå…Àg?v9p¶(À´ ·n^_ÌW6jÐÇïòÓˇðFþõí›k~ 6ì̘ ÀÉôæNÇÝz þµŠ÷€3F7ääBS»à3à<7Wí_Á.o瀺I¨äAž¦Qá'.?cŠlâü±ái äFAÄ2=<>8* ]Ȳ*FG•þßÒêE\ßx¨’+ÃÞ„ZÒš/€j€GÕØêUÑ„ áÆJk×*®`„?q&€¬ ÞSÁ¼,‚wbøã©{+ô_ NѦ؀ñúÓ¨¯Ò©ˆ† X'ÏdƒëÒR¤¸ªÌª8LËKÈ*¿&õ*®Ž=ÊÂú†SÝhð.@ƒºûq€kæä~¼¬T|>4 +ÿ/ 4\KPOHòF„Fòr€‚ïo÷¤¸&âA‘0€é\DÌÉTR/µN&É–Oå:JОªSê4Ö3a€êðˆìŒ» n’«&@e…R}¸h©YÕ±8#8’DÊõ­àóGys}ýö- ðØ€ØÏ‡Ï€?¾úÏM"__Ÿì]\±ë`LšÞä0ÀïüÂW°+äÁ¡»bàS`Ú®¼Ëו&``2uÜx,»» ÿ ‘ä «>^$Ó8ÊdeÍ}üÿÜo| ÏÎt ø¥HŽ[ûJò›,.Ä µÿ•$š+‘ÒÇ D§#­êî° +?!©Ë<Tö/©V¸}Œ¡†8í·$u^‡ E½(ý4´ö¥ðƒ8—LÝGH<ª–?X¡Þrœ¸ðèNÚp¡•)¨kÎ98 YsŠ8„g& æ ‹h>¦‹¤Ó’å®e}óÑ—2€ÁT䵪ë—PXQmQ®âû¬ãÆ]:A1¥å_þߎÀ +-ñ9J£ÄDOe°ùÙ|Ø0vê?¶d"&RëJÎh Ÿµ¿wðÕèGØô"j-€9r´@éZ®Ç¶(F•]|Ÿq©üÖGš¼À KàÖv¾ïê&@^š@ð«Øùw÷·©@ì³Ó3{ôðy- ï&†{¹!xËW œ^ ȃN|p` àíçÿÂqý|.à{½#R`W¾>¸íMBî˜ÿ$éèpç+™38Çó‡ÈýÓ(îÀ5˜WáQ…ýùXƾ𩢠¥‰Ó*955ù´h£ñûbPÔ[ýâ]Œ³dp[Ä·Ts ˆ®‘Ü*!|Œé +Å&@pQz8xKrKà5Ù þ¬sEáÒ㯲 +è=承ÙOb”‚²aQQ8µ(åÞ²/Ù¨>€¡ ¸Å8wXM]“W#Ò¹ž» `â{8Ù×ûg1…èÿý¦îq/ ð;0ñùY@JGÇõˆÞ`í¹ÃoJ´NC9Ö/?ä- · µ/Ù&÷58þß"ß|$¢8)‹R‰YáP?ÎIÕ¾Ü?xu· –:öÍÛK'Ù8Í]~ €ãýuógg¾)ô_ݼ!€VÂ7ˆëç&ìø wìÚ˜Ÿs¤=Šˆ|0üBõ‹_Ï<>hºy_Û18wâÎ7óLù·ÿÏ«'=³h¿à¯ƒöp{=›yËó†8Lr5@’ÿ…sÐà„ û¢r-ÐÚáQ)Ó ­aËBxÚ¿KRñ‘fòÿ†H«¶”W%Ý+ÕS#…“ +¯N-¢0>¹£·ùŰ%Ùh%Z„.¤*x”îp#ëq?éúCsù…RW üG›æÕŒ–`ʸ®½®[û•À.¡Aª|ÔÅR%å'vQïFí²ú*:ŸrçK±XtÐÀEüè½6­ñ_—Ãà…[ªTüE쨫$¥Ú’nCÈxü… ( |„Ã’RÕ‘§ß†ØÝõáƒzØÕÞ&eÐMô^¾)åò†ªÏóì‡)è)˱{f‚ÿ¸>1Ï €Ú’¥>ùn1NÈ< {úùwO~yvŠ¿óFÖOPÞÒé}~éäÃPÀ¼'èB@¿{aS¡'È_Èýñ÷ùƒ| ø•oö¾þúGNç=s¬ïcÙÛ:ë-ä«Lx°÷ëZ Îl7c lP¬¬™ô×_K!ÒújwЖ¨G“—ú±òó QW?ÞkXÔ¸^ ‚>ÆÅ•fçãóìÁtß·è­%üõügš«ûµ¬iU¡îM–tå÷¯ÕúH ­zå.ÈIš¸¨+/+뺔Zê’ S8y¤@íÀ´?*ª:È8µ_wUŠðÉ +À¿Ý¨Ø…~¾>FÀîUÚo? @秘[ç|g¯×±ÒýüYRp÷ÊÑþÓþiôOá¿P0Îs‰—¤ªg¨#gæs-®4=…Á½abåùS¶ùçý +ňÄÉ~#§Ø.”BÔT"ΦaÕ"²»ƒç3€ùÜÿ›Û7y5è<}€Îë¹¢Íþquqrü¿Á¥Ó€ +\c3®° +ÕIhs!àµÏ° ðà\ò`AàL[åR~¸p úÁÖ xoÏ›³Ï5‡äÏÄh%¼ûÏ0£:»Hq1IÈ2dú59ˆM{ E¼m„êDpø! E•Û§”/âî)À ØQÃA¡=¯ŸM‡q«’î_¨ ˆÃ‰6øuùUùÀÏ ÆÙûÕž;Ôu§«¸e™#Úq"v˜5 ëA©‹ƒvMðßnFÈÀ µòÀ.¿)öåÓŸ’”epW°£Þ´ÁûÉ´@ +¯®E\)תÖWâóŸó eH@/±uY%O³´@¨FÀ/öÁfdï¦&î¾ +–šø¨ŸãcðïŸz`1ŠçÍ=-€p"P›£Ö%&VÎðe¦È•lÐPuÉ."Dq¬ó _ pœ'•½¥‰@o±·—[NØ;;w"0ˆÎl?à}uµ¿¾}Kgä€Ûë›·×çgç€ËÌÀ8GèìŒ&ÀãÕ•­s$D¾˜uþ;økgï}½ç xòoöæ?"Vƒ?£ù{{‡ÈLA>{_gŠßW_9cÛaEØJûGOŽ,˜‡ðëùûǵËl†&¡Q¥YŸ’hì' €®H±-PF`Ôpç˜x‡Î' Šèü©^¶ü¡Î]ÞßzlƒÞ:DL5<› ˆ‹¹›<‘¿kx2eø7Þd RPyu”ì«Ru]º– +¨«E¢ æfì M€{ @—“qº`´+ôG{ï €Ã€K `=÷ZW)»ôeZR½¾b/^­An–KXùê¾–ÙB,ÂE@ˆ¡?¿£ð¯Ñë®ÉtMdrÎ$«:Û•(åå±[‰\…kuɺ R`gÈÂ~­œ“4˜%®%ÑU þÙ~åä詬øFÍ–4îߨ˜ÏOŠô=‡‹K쀴ŸÆ€‚_¿´õÇ÷¶h¤ðKqº7‡_Ï` ¡ȵY”Ú XCþAð¾þæ›eSÕìcqÊ_É×{ó³­Ì:Óùk\¾[gN)ÌÿÐÌ aÀöW¤úÍìw@?ü,$  µêÓRÚÛ¦¢"â(bø’ „äërÙ<]÷ÑB©‹ýcÓ_òoíúp/Q[°KÒN¤þ””V‰ƒ‰ì½¨xšý*ë˜Ýá|¹&¤€ž»ý|¤N¢ZrÔ¸®Ø\kø×åÓ‚ZxŸ.ÝbroäS€b|Æ©¸ þßRø'‡æ= @…'&ßÒmÚ3ay'˜OÀ3æÑ±PóÂ9zg˜ !«ËºGþÿ½]oY›žG‰¢D2DS|7Ii“E¶Iè¤uÔ° Àx9Ý#s´)q7@€üÒxŒ8öxþ@xxÇFa Ìð‰ÓøPü«\×ý¬ª]›"%ö<µw}¬ZµjÕªç~ž{}T ûpÿZúP¶—Wþ_Â^ÂòV @ñVd„tdÝPP{˜ÄhNâY”°…‡9°Ï:;¹_lø:¯BL.ÅÐ¥;”×Ö/)’bZÁޏ=¹*ÀõÕÍÕÍ9àùK € „Áù •þt:hØ‚ΨÜØ}¾¯.1h­€£§Kö`;b0ÚÃ@ã± ÜŒcw¤îî8ÝuTðd¼³»³ú'¬s2ž8TxwÇñ~Óщ/bÛvÜßèd—8Ú#±’Oáûˆ€@ïx ä³{ëÊÛw>¯…tÛÉwÎÉÓ”è8ÀE+F#EÄ¿',€<À\çbÏm´ 0ûá¯.­óÛLh[ }ÿö‚wGaòð ½·—ž,Œ¦úÿfD<¾}DºUyœ·ÌJð"N{ì†Äød¡o'9½ {Ịà8üTX'ŽîIKÐVRH¿GšR}MBî;õœ:•Qñï§BÛT3@Q·úßžÝ>Þžæ¸cÅ9ºÜD@Ô¨§·¿‹•ÃM¥ÜH67ÚÄ­H•I ؤ••2²t$mP€«‰µí„¼Þ˨˜¶A c®×”õGªâLbŽIvu%¤µt‰¢™øuD›X8˜= D°bŽJ¼*‹Ï«òúø7å–õ­Á–ýc–2¤X9u`V‚·DóX @Ô—hÊTG¦ÌÐJŸIqž»‚xz_ºp¤gd&͘ˆ¹ÁûÇûŠŽ$V»[‰`ÂÀ¬[1¥Lö(êI®·®žRHaȉædá +ÌwÓ  ãìtÀtš1ÀçÔâO§W—7úx«õÖ¬àð/¯<ê|zŽ9êé <Ë@€Ñã…çSŸ0>¿² +p.šáó§.?ùðáà LA§®°cõG úqò£A?N&'P¸ÀóO&î|sâ¥îŒ';'P“ñŽé¬¤6'X™QB«áб%0¦lgaWå7E=½×¸OQŸ¥Î‚ÊAcH)ÀR À›Š!@Zå u¯;QÓ[ˆ”µÐï¿©¯ó¬E«TøN|PAƒHà\bÔC4ÍÝJz–›è½kÙ„ôÍ„ÆC—Ÿ*@× @ `Ž:Šà”Eb‰´ò!}â»6£'jwPÎÖ¹80`i–"éÈ£ouüß¿Í0àtTC€WXF òoV‡þzŽ”Åm$À*@¿™€Â}g÷¸Ú‚ùüû5Îè­õäœ( ÀZ»J|º¿»³ˆk?ïopÞÎÔý% ›²Þ°RÔ .÷ +ýLyW4b[µ¤H¼âÜVñŸµÕËüÓ€×`|ú0~óf’§}ðìTþ1iõôø|h?€zAêöX€ë+#ÅÕs‡M[7Àˆ*€Ä¢g&ã­4¤6àÃ:¸ÿ<ÍŸÚÿ6Uÿˆs~þáúÂ{:ª÷Šä@þ9²ÿ`%À&€Í-(Àh‹#Æ;6V§£Íí½cY<5¥ºO,Ó€ÛÜ:iï¦Ö»5ýö§1à¶„|]¬½vMû:ûÜÝÎ déLi¢($ÜðϾYÖ•h“Ê>“½¼(C 4‘·‚¶)rª}Èï›/¶Þe­@³pC j©´Z?¿Ì @•]€ÍÌ’IñX,)¥~Û³Íû™Ü™6ðq›”‰zR¯Â¶€*¹èŠï[ÍfÆ,`­‹½^¸œ™Ì*ßS6í¥‹ +'·qI­¨¯¸üJªýgsw“Q†WjŸ~÷do@í­ëäðO{+¾î¹TŒ–ˆF• #åiÁd‡?Jƒ¢ðŠ‘ Þ:À] =àæ2m> ì }}÷Ô´_À®n®ÎÏpMTaÏÎQ×¾$‚Óà#Á~" ®m0ýÖš½-‚ŽÄĆDR~]w2³Þ¢?íÓœO´uXÉŒ¤Ð5–}ýs˜µ±RBZð+@)N©›ˆØÀ/m´á1°¤«´)J‹‚¨Âš½²ÝËœgºÿã/{ +œ‘[¯Ëø6ø½ï §puyvzÊW/Ðáõ—Ÿdþó½À.äa,C(ÁÙyžÐŒN!‡^Ö­“ǾÃÃÁöíåZ;NžSÝ·yP@>þ7ý±¹³‹?wÙ€¼M1ëü·N`6’Þ³§KÏÆ»FàpÛìA¼{jJu·”2.k^ï© Ť~;•†r½_‘4^—„Ìd¸%Ú³Œ +d5ƒH¢a¸]ImW`ï¶€€xÏf +’Õ"eSzo¡šÛ|錀RpE’€ +›Ó¸CŸŒ•G£j”²¶…£µlÓ@†q‡?òràKç @‡~“CQÈù-N{R¸–\+àxàf´^-“×”bjbYÌIÙ«&€åE¿1å`ê>,' ¤½ ¦–•¬ºä´ž¾ên¢íȭʤX~×?9ĉäóeJÄ»œ|×Ùò ÀƺϛÏ@߸‘‡û{ú–‹/üµ +à(€‡¯>· ðãÇ<åç‹€ ñ°\¾íÆ»ÑX é ¼¸ÆPˆó+(ÀÅyž~ÿ&`z~`¤m óó€ê1=_=‚ÖóO>Œ&6Ê€û–„½ÐwkëKy‹¸@¼Gb0 °M€1e¡ŠÏj{݈†ÆÇ~*û’Õ/ž]™“èß‚šv?¨·ç4ÿï2w|Ãè¸S8¤º­ÅfοDµˆ– 1 ÿ:éT©¶³ñþwÂaòc/Æ*[íNšY´ñ"@F£üÛ…l`|Ÿñâ2pðÂ1­ãGUÁ0€j´Ì,9g–aÊ‘mò¨êr,*S,@ÛÝÿe©,pv|࡬·Š»íÓ!Ç䃸¶ŽØ @þÓ Éj8”Gï|+—Ö@£YuU½ÜºS°pöíóƒùkl…îLØl À»ãå›b»í6¸Ub¯×döùU¥µ°V·{ïðו'2€6̨…×+lÝÞÛw$p³ÊÅ,·DV°73ðŽ¿­€È @7ѹ_]ŸÙðÒúµQzü‹‹ééÅ 5{l*°À–À©”àúÊQ>p!UÈç`¡ÀUµËkÚó€y&(•@€û/:–ý¿¨æb_¬'¶ÞŸ™ €z?T" `¤©z5 cð™ +ü®ê¹K­î’”-µüû+ñô2€NóÀ]n÷ãq ›óVïo³ r&Ü|Ý⥳‚«U±Ð µV¨ÐüK¯Ø­¶wÂqGüÅh"Tóæ†I¦É8Ñ¥Ø|0cÈÉwŒÍÄaª`‡p4ƒ6€Ì“xoeÓ­T÷‹ú3ϯU @·]¥]&@£ÜÊ|EÈS CdAFE ²átôÎ6À¼0×§?Ôè¶^€S,½ :nAQF-§¯ dkv&`e±1Ž0FîF7ÍV¨J@g;<¦ YJWgÄÞáO++DFƒö7ö_ÛšWåžX + @‘TqõÇÛêÛ3¯þè­Æðë àòF30²pü>ï¸ðTþ¯mÚ»¾ñ`e$Û!‚ׇê´àüÜÏ…Y=[xްëPpq!ëß Ï2 +Ï·ý?ßâv¼³¹3™Æ€K‘‹ß^gŽé逳ªðOH „¤ àØ‚]’·Ÿ°ßpßmÆ·/7µºC¢”®&à+/¥ fJ‚þ¤Oào€¬4ñÎI5EjÖá¾æCQAê—ä ° +ß)Z§ïɈaÑùöÖ騑wÒªþ¥+* çm ú5Óà_m{‡][€ïà2!]QÆ}¹ +Û=Lݯ·ŽUZn'rÍ*r ü±=ûG¯o1’AÈì“~kѨø®°…O3@®­€mì÷ø¡ ¨Fwο–F…øC¶|_ç¡ËV†´Ê‘4“R?µâ9=?«U…pûšx3ìjâÛs´/ `L½I~ `Ï×/:8²Š>¶•r¡tK)š“+¶þ¯ÀýßQppO“ì>Ym¿qÐù´Ü·Î~:½¾ùtpX6ø˜ö³óòü|zuG‚À¹oúø1CG§Í,0]^|·ôÝj>XZXz²´è¿ØÍfÂÎG‹F-(>Ó»ðhޏÆ|Ðß³P=Vf gÙÿdNjaiÞ`òçJI­1€Ú7ü)¶–;R§›jGC×V‚ô{¦Hkû¯Ûœ“xù,ѯ +ˆqÿq$êdÔFqOmÕBÓ„ýŽ4´¦ÅM´–b”KuœT,×6|¶§kû‡©ë(Q•—$S `1õô2”ËÜÔ-ªhúòQkKÚWJEþWHù@ÐVaW„âeÎW–ƒ~lE`«J+`Ý¿*ÿN"nYgžR&çCüSÆ¿^ˆ·O‰å…½‘ìÇ6dI¹!ß¡/À:%¸ŽpÇ1ìnSŠ¿ZõXÍoÿø`åÉ †^`z‡¯½ÆP…Gi§äÔÏ”KÒõœVЬ …¼-3€!¼cÀL®¯/®>Ýœ–ìÈ8 s{÷ÎqóW—§@Äc$ˆë?÷=‚ðp§/üŸM'S/_ÐÐê¢î—ûˆ +ebÞ±Væ!ÞÃÜKöößí¯,æÕźúJћ緅[‡aÚRØ–RÊP“5kŸ3rñe@±¡ƒî‡ @ýtm7àÈ^Ÿëû¶ë±çìT®o£ tþêÆVÀ뛫ªØ=Ì'`?€ïý8o¯.Î8ZôGÒ o%¿¹¾ód¿ôT &Kõl_æqǯÔË‚JŠØ#@¶üoÀêÀ–ƒ‡ò¯h=³nü«?…ÚR¬N:­­‚ ü)èn_v æ,U¥"Ö¯`C ®©Ê=R€ïzþ¿€´Eýˆ /€/k3PúcX¯=pt‡~'åIt €ýW+óì5–…"2Ò `EÀËX_Ù_Ï׺ý'.BäTž„„“£lÖå¬Em"¾YKfH /y;PØïþ+{‡>ΛÂN±ëmVóe.~ +¬ßcÝ5á©(ŸgÎü(•«ãa]Ñ*…ÜÂ~¢ €’[WRÆ!g”ĤX¢Þ9ƒê_‚ý± + (&GÄîþe£n‚Ë?‚Þc¸Ïî2gÏ袂ÿ’æ º^€FñâßrÙaNY¯6`þa f×£ÅÕ—oÞû6ðé©m²üËK6¯>ɰü°²ðBpæh!Ä|1ØÇS?üµø|ê`!ù¿äÆ88wÛx–{×$H囨Ú4”¿¯ +æó€; ü7ØúSÓpôŽmõh€OG0‚“üjxà‚ž‚írFË+¥¡mêÄbE¢dZXK8á³y¢¯¤WÊš–¨ÉýÕE:—5'ÞfgÎeíÖ£¥9ÌÛZÓ +)ÿÒ6ðƒM܈g¢òH\ êhº$fjZ }ûº¬®°²öve¾ +eô4DÓTß6S.­ÀjQ›;­ãfI´¯{¼3¡E™ì~‚Ø?ðõí&ÐÒÊÞôWBä"¶ p}2€ž ýHmSâ©X^JJ¯IÅè¥3‰z¯À8,6€¤d»;ÁÜbª¿&×Ú4MGÔÆoNmËË3>éçó½>7Ÿ¬ˆt* Ú; øü,þ?@לú4Às@Æ Ú;€Ä#€ÍúÔ·â(‡øùÒïÍMiàOE¾³gõ&õÞZ D5øæÏ<ðWVãÙezò¡«3dѯמèŽJ¹šX’UªÑÔÈL£ÔÝÌxDª8·u˜S–»„Õ¹¬ÛÂJ¨ íÑ%º[Ú›Á'ñJ¯S‘–R‰1øÝ_zû“j)mi˜ÊN©$Xü;÷B6þ80¶I¼ŠA!’‚ÒIg»ÇT²-jÓRK‰{@cC! Ñ`"d͇õV–v$Qü:+)ð'1qd>mUMNy†õÎ ;\€½æÜ2j2ñáÛH- @]ÿºs%€œŠ¢Ú¾½¤V-ìHˆxå]k €8MŒŸžý&a¯ßùå•1¸'{¶…T¹çÐu‹>r  ̠߀eEŒ àv1Î1€ ¼Ñø:€<Ö§ƒwÀÅåù4#~àô—×Z~ªR€«©éô™` €ïÑ4b ÈB¾©Œ^¬V¯à&(Æ&LG'vd|$tëÆãûŸb øßÊS?‰¢PlÌ[ÿòšjN-ý2ýeÊï ‡,8L°ÍXˆXJ- >©ã5‹°UůGTÞNÚjb—Fk%B¿•uîôÞ»¯ËQÿïpÿQ |Ý=Ö^†)2u$/6 ô,ñ3m*q»%¦¼& QÐQÉ Z“Ça“jŽ/)ƒç«xÛ)#Ç+ Õå"Ã0‚:“kÀO,À/²™R´”ªˆúÍ@WÚUV Y|?SQ€Z^µ¸¶N £{MÀ4’ GÛÌò3ÖÀ.‰²C¾™pº€îiÀH0¨ÕÅ{Y)Î*åÛ  ï 7@–Ñþ¾0m@BiX”Ýh¡‘<¯¨ –záNAÝîž%i9Ú;Úx²¸,p±­BÔÁ¢¯òÈJÏò¼0â¹øj¨.sÍ­Jæ™Ï½Ì*ÀåÙhéyš|ØjûúóØOýåµ Çý§QÐçÝK€`—\œN©ÄœÚ~¨i°ƒ! ªÏ&¾Ï§L&aºõaì÷|@¿¾q´àÓg~\ðìñ£8vþTcûß"Y@+XPø÷½¬`Æ~‰LýþSfùÉd‡[¯ò1ãL˜€¦Z³Y‚{"p„¨q~îl•¤p‡ ¾ò«’ûž¢fZ• )gj¬4€ÄÙGX}ß¾×›ZäଊùnŠü!i˜”×çKñ €í«ŽHºÇ«u€=Öðs®õCLd“hî^†$$'” % :eûkm,Òâo‰ù뤠>øµmÍ@5þHíõÎø0ö¢ŸÄ•ô[ˆQl¢7›°÷®1€ +’©Î#l%¾U‹Ä2ö¹­0'Uhm’†ýž¡io£k°ŒÃ*ñ +Œ³NMÙqë*”½Ú±Ú‚ºq2€w]ÌÊäù<›Qþ`Cm +‰Â°`-ã–®7R3—Ë0«‘ºæÃ¡À6ëáÌ·©ø6¿în¯_ž¸pÄÛ×Ö\]ø@³×9Ò*€CGSÃlHĈ\h$à2€ñh2^Õ—[)˜®žìîÀ\Ú¾P€§™PyZ¯ðBì!˜1þ¶!V!S¢­>1"'ßÌUýÜÿ¸3ù±ÀÏD6×ïEŠŸ¯"´«4©]VáGäX-Fû÷ÑÔæŽ( %–¾yú{åøîÚ¿úÐ4—í+k„fƺ¹êÚ[-@©‘’µj¸G*oqÛ"ßÄ¥úJ´5;£ÆžÆ3){Ge<,‰À'[úòÃêmsV:ó…å"ÅÞÊ,þ>p/¿_Êœ˜w=Yßpü6&u|Š~yQXÖd;›ÀT½ý¼;VùÕþ+¸¯ª/Ö ãèƒ7˘)1št HU0Bn$Å0„$˜çÊàŒ²¡šâgV%Æ x»ÞBí7Ì{Û éRö0ëa‘JR\{¶ô·(ÞÊËRãO‰U²•,Wá¿ÀÛØŠª›æº©àÌÎË7“‰.lÜÇ©CîÏ`ùvŠ)ãzÀ%ü4Ð¥ãþ5¶‚JÁÙ) CGSެã±i`Úœ£ñøÇÑ ¿ç5þ0šÂÊOü^ø8ï–'âºw§Û}Ç4ÎlóG%=ZÄ(~P<`4"¯—€’®_€òDQŸ¶@‹\SÃUÑü-Ï0ùöz3)äšòKÁG±øKŒr/¨Â7u€Ü«yñ^7ïö ÅÌÖE¿3ñ¯ç@jÞË­ÍŽÑ­Èç=¾¤bæÌý6F€ë‘$°Ø;àB5š\+Ñ2Å;exâØ&S] uZÙZ­Xj9 Þ«f­ªm£b1£\©íÌ÷,Úé ÁÁ‡†;Wæ£ÿûùÔYߎ„°³€îXІܖô Hzm¨OÍ»Gªá9¤õÝè,Å ˜-L¢Ìt·òÈ*@Niøë½|$°R<Þ¹ª€tÀŸ£Ès× +7’‚hzYeccY&Öæ€ÙǯMsðé7Ž€¤Ð÷þùªðës€ö€@›Átšló·ÖÞº¶²à[¦§ßËNmp  "ûWÀÿÓ§cßl¯Ž''ÓñÎ.fáÃè„°Ràˆ~Ð]àÙ³G}˜÷»Td~ €ƒŸ†tu€ÕÌ52›Éédg×ç‰c””§_ܧ *íj?µ,1 /*yÛukâX'5uö²íÚ;~÷•INV·l Þ~t²yÿÞ+fɼ286€¨þæävZÎÑÚ5.™¬·£]Æ EbWòª -ál¯­ìï«ku©j7ùlŽˆ|X’‹¶Ó=ˆ0 ÈÏb¶hUäne¶ê™áLû‡³*¿•ÿ" ðO~?CpÎ…ÿ&©"HÀ?»É¹—ÎõR"“dín!Š í‡X¦êd°Sü°×^€$È?I6xÆlâpr4Øp´ï=ñV÷´Âe#? €ÕL)Ä©t(æ» @ +¹– »‹T¦‹oãXûÂá €Æ¼\Ý~¯ÿ·Cß.<ܽßÿ®}ЇšÍÔ`ðâù²âU«ZÇ/Îì6°åàüî_¾=¼ÝN?½ù‹É‡é õßú`HÇì¤- ðïãÃUÈÍío¾¨*€R À*€R à;Àˆ«úåC°âo—y|z¹~(‘I µÐýT/ƒ:i `~ògD~¦§.­wÓ:÷uemˆ÷/&‡f¶щúã辚ЧvþÈÐi%µážY¤Žç3Â_®¹nr¤Ñ @K-ƒ‰ÓDÙ* +ÓÒ¨°$¯“ŸJ씀ùK8 âv+˦Q·é¢Ö+©Hv°`›U©7¯8a¸ÝA û* ¦¨z‰ ó¹@Dô#õ$`ª…a @lkAPFW*…Nú~€TÖôþZŽ _S¢Sw% ;¿÷+70S}£×©ež]ð¬šE=+{ ³>µÿÅõ#x@“JçõÁ÷¢á_'`¥=}ÿqòч„Î}õÏ™OþäKÁ~0ä;A €Ÿß¼Ù.к­½„ù Ï|ìÑ£X#> +àŽÿ̾À<ä£15÷Øg8Ï Î§€¨,’ÚÒêw‹vl>Û´UóÐüó³0QiÀú EF+¸SPËr†6={JúÖT³ha³‰ÚM*W§‡_‘v'"j‡ñë\ïLí¼QšIi0ç§eÅ¿ÉÔŸ %W ¿ä<¶¯Rup +Hû~é¦Ûk‡0€ÎmwŠ Œ•ì<”¤{¡eÙµÙV˜*±ªìw 3T+Ùz@´õ ¼¿- &ÐÒ0óínøk 8ÃK§ÿ¯$èGÜÃ?RÍ.dI”Ì©ÙLV½ÖÜÈ;n +ÿ¹Ö²&&hXÚe¹Ö´ºGP4cõ °ÙŠ0¥SeÙ-ÛJ6üùÿ»žÿ5QÀ¥âÍñ ¦jIêö4UÅÜDìÚa—E=7%À_3ªq=Gë?V`íw€¼ñIC)MÏIõÚŠ—0÷öΠuèN² 0siÖ+1$½ûÃtÂ•Ò €Z½†Hl¥©vµØHè…/¢liœr³Q·è—mÅ©e¢I\^¶gë\îSÃ0HÝž^ªÊÛê½üµ­lÑy{óͤ™€h¹X +(EvPlH“´‡èühäÕž zÎÎÄ®6€°ÿ˜ÄÈ@]ƒäŽ8ļPÀëÔ@¨õ[ó—~Qžh¶„[nS £™L„ jÿ>0‹#e¢äTÆEzüw @{˜‡Óð¥ 7WŽñÇø6Þ¼ Ãþ˜ŸON­ \\çé =:þâðSóÿ8ÅVdWhÀÙ©ŒòJ0+WW R2Ê·¬ó `ûõü†ÏæŽÈgOyÿV·¯9Gìlï¦&@¸ÇÚY°¹¹;žú~1ãfP\þæV¶¥aÓH›¿ýW¿œœœ|¨ Јò|L…¢ýꀊIZÂÝB¬Ù³p @Û•ÝÝÒãŸÉ»Ç?þÅz€øÔ$h´_â_x%§a‹üf%BQ‡MB=J*ÙšK'†£Ëò<ˆL¯0±±‡ J»)°Ý1¤nŠ¢¥ ¢!=aQJÕq0ÍŠ­_Yðtð tÿ€ xáÔ‡cf`–õk^š È dÆtà ßF¼¸p‹…§„(¨úyÜP vÇœÁØnóPëJ?y’äíe8Š+.ÃÆÈ”%¥­ÑÝ ‹ÔļÏ0€|åµÏsõm‰MI¥<2GRD°šBúž%EÀÚ;¿J4œ†møoìÀåX€øTûíÙó«À—×7Ÿ2]9ÿ”‘ƒŽ50¿„ø$p×øfp«¾&ÀŽ$ðôI?Ðy–­ècòN ˜ÂüƒÜ²[„ÍÍ£—?Ž@5ÕñßÙÙ=™s²39Ù­î¿üG2Ï<ÅÉxb'‚§a±õù³ `òaê¯÷ÝR¬õ0ª}Î:•è ×Å2µ†R_ý¿æâ^#’µê ð¦ª]3M¼_>}®éoµê"óщYÍ)º³Õ,Ý`ÁñOiŽøKjW„ÖUä‡$Å\¢yˆø’`Žö5³ÓnM$v@ìÐR_Uoei~šÙƒ~Å‹ðü¬Äïϼ¿äï"á˜u–¸³É€œdk¾ @Ÿ?#Rãæb¹¾2¸·,À¬ +`õ>m¢*¨7ÐEÎU-„­  õtR` ú9ŽóË8 N|À(p)@,w*}ÜGÖµûëaáInÈŒ­° gÒ,§÷^ XOšá47€ßÍõ9 àÍi}È7~x~ññrà#@‚þ +øû#ò' Ç}º†ö;$ÐÁÀvøi«yv° @œ²ý|š€ â{–Ñ}°öñøƒã…-~_ÿ=Ú"º•}ªú›Óñ˜zÀ–ÏÿîæM?&°3žüâ›Dˆ“þ<}†'äžC|ØÝ=±šÒðïß5TLGÕ(éÚå>!R’0î(`O@Ô²W> +Ü…i4ü»fsØ €µnzx¿tøÿôù³s©Àÿ&êhaÓΗõbTM@è›Ut9@ÙX#c3ñX1%mògÎ- _cÂqøËÌšòþAލ\ +ÊüËŸàÐ 0Ë}·§~Å"#¹ÎY—H˜’Aì5@ãçþ}ˆIÍÄœX/×Ä2kU…U‘P +ÓL@TRöÊ2q™©[!éK/@ª12ˆÐï@ @…{õ•Žoì¨Í¹u '`Ž[ïoKDî#…­þ)–ûÖ)‹•ש XOK:€$ÛàŸ²ž“v>¦Ã×äŠÌëûg àèÔ{t'ómzy«ïý2 ïÆ›;â/ïÞX„ö Ž>ïúsP5ý³ÏB2†³3›ÆÛK/§¾ ¨_mÛíÀy<½•w-ömŸå䋿§*¿½ØmN¶³O€¸É`üg5N0ïåØ –"6Fpóùj:ÙÙýåø/‡P`5+€ ð—H§¦êGb§[¯9¶ÔF46S)1K ŸjÃÃ@ Ï_3ðé“çUH4yäÖz¦Zxâœ6#a]é*üÈ2úÔh$Ëäª~ÆMI$’ÔÜÈ®Ä1ç8 b±&z5¸¨ïGO áñ‰4õ0Ig°g¤ûdÌpÚÊÒ ÏOkÐH3@†3U–#}ޱ„±‘æLÜ׳¯ˆÀù©€ºn@{²Mw7€¡ïÙÛù~mŒN9×!„lF¼ ˆu³@›Ìù¬Ÿ]Ø›48^:ÇEæ¦u¦¿À“}‡;{›+9~z‹éÒé $’RàŒB Þ¤EÔc›ówš7yõÏåËç/ý*ˆ¨ä[¯þ~øb“ß佋&¾;øt’ˆùj‡ù–0j¾èåêöYZ’º€Æ%ë¤7w¬ û¸À•íï Èu0Ñg Ͼà‹þ7„ÀvvŒS À&FÀ„ˆ³5æä¿|à¨Éä¤yôÎÊ+±¥&¢ÖöéQ*ÊR 4e²¬•Rà’¦‡9¢ŸáGc1îtƒùýÒ㿦˜ÏŸþö3ç&5sY·¶$çä!1ú¶À4"E›Ë0oñJZ"½ÌZ®ÞNqÇÞÄ8Ãz5:Ì24èm‰zž2óÐbÖÄŽýúßRbÍÓÚæÈØí þÝ"w «$n+‰† ÿ!®Í½ù&H0Ã,€aкX~â=²™#[ÿ5 «dà  óñ‘œEC£Wo  N芧fø3þž¬´jaa™#Ë3Ý,*_§›,76üÞ¯ Ep—‚z4is_ˆfSΜp¶Ø¥ºØ:e @Íßí¯åSçÝôjØ€P8¯n¿±¥ÿL·rS7°#ð#XŸ¼¿ÿæÍË—ã7ïǬj4 í ‹V¨6€S6á§.¶Ðœ1˜ûx<õƒ_­Ø¿ˆ`Y €€ @úwª +°»;eø)€ lnîÌÀÖÖå/—¿üâ×E&•;8· ãú ± hZoAÓDŠ?w#Æ™o­gJSÕl«¸™œÕ ÐLÀ@Ã}7u+Z‚ú†^»³äŽ3óܽp¹0M€°þü˜mÌrÝ s[ZHí\\̨t7_ž‹XµØHT“à íBÙÍy££:×´„TºwüƒêL9_E\ºÇܺNig—7¬> rп¨Ä½ÊÂì[…üíáàÞ 0·fÖ‚¨{d›+‹¹´²6`AgˆÎ} iÐ÷§P€Ï¯‘@W»üƒqÂÚ?•‰ã#,À“ +Ät>¿Ct'( `ýµ @ÙÏ~UýϽñV[òE•ˆbõÆbðs­¹~›BÚ·ÍWëp+Ã6_õ{óé|¼4zó&ïö“ßú½‚÷ûª/ßö7ý(@\uTÁ÷\Ûá°6_x¯Ø>…\¥špy±½¹mNZÿÝ3üvÀ® Ï]Ηî4 þí$ÄØ ¨±ØÙ‘h0|a˜éômöÿ5puù‹_› /…çVÈ`¿g`WË}Ú„¨Ÿ +–˜6p6XmsgV•¦†-õ¤âAHÀOÇÿôÞÿñO7äÛ4\|aß›ÔMÏÔΟœ"(E-øÅkCÜïIãIL‘€ h  z¢Îy€ê:{Ë™šîYS~Í×T´”í»ÿÌ«a¬_Võv.S†Á¾Ü«ŠÙë$IÕTmåûØßó“`QxXõ—ƒþï$OD]@³“5åÐ["ÐÇWº!~Ú{õ›Mht³Ú„[ž8ÿQF¢¶Kj1Ê¢7”ÉEo¡ &óZ“Áѱ0‰}HQyÎz%,§<ÊWÒ´oßa€¼TXH³óïÔœV}Ðá=öçáÓÖ}Gþè5¬L/Îâñqý—7 |•ͳ¼Ü@¯õ@./@:à°ã%`»…#ßšàÌåü@ûPñ›a,ÜÕ™îûƒ\›Œv³6ÖIZï¿{2Þùðá——¿\„ŒÕ¼msVÑÓÞg—]WéBºð*p•3ÁkU¥GmMEmšª:—–>wÀiåIÏþ¼yú{äú¦ß¦¿m+ùýí§Oí¶Þ%97goBNýG/¨ pƒmË[ó{Z-fvŸŽü…<òÚ7w²&X-iXlŸÞ”T«ˆ)15ÿDÖ¹îþ“ÓV\9(0¯Y¿’}ÌR5ð¦9X!™xtM º;A§çþ#P\l@Eí¤¥”©¼~çù;)йøg§w@9 Ip˜_fäâmÆáÈÌÈ¡¯y-á¾Å–v¢àâð$u{[CÇ$+md;ºÚJ¢KÂhd.Ä$ 1€˜ÃºØÞðͼº> t6Å—×ðžÈåu^xa·ž}}½ØÇÁçá4÷ûN° ¥bÇ­\çüƒ[Ÿ¥z} :Ù©'ùTòÌʼA¾)¬3X V+, ›;£ñNú z!åÞÀ)¯Jõóvo؉Jé°Ð³Yª­¶ac ÃZF5º•[Á11QÑhf»%lþJc³ÏŸl‚ªôzTáGÿ•éæÚ>Õ†~§n%¿ÏŸnrWï“v~Å“6`•6ž-Ò¢>X8Ä#ƒí™àÙ¹$®³&˜„SõûkIõUTÚH@7es×”‚ª)ÊÛI«ÿši \ëzL½2XÒi¾“(ìôÞ¹ØVþf Zƒ.·Züp¦/ jÙá¿3²†€¶ÝI;ÿb Ã)­6u‚Å¡nÒ3€=l¨ðßàØ&c/ÜË• jaycÝÒ@H„SPÄd6 ‡  _âÉ´P­Œ§¬ï¤úB` +E·¯!ϳ˜{àêúÓÕ•¿™äË€é¸Ò³g§-ü­Q/¨ö¥À¬2]\Ň8âÌFÀS_ ¼4ú¨=Ð`>‚Ñž°Ø•» <Gžg¾å£Cš‹b±L1’_ ‚=`¿ýÿÅÿÈp) `²SŤ9æT(Ž(I‰]”¶ +PVZEü™@(n””Ÿíí¦”Fy³/sÿÖ#Öóç»c‰þ¸…v3_¨…DÀr•¼ß+ž?b£†mtä'µQ«!8k-âC¥®V QXÈÔŶ/Éš¬Œr”„oJ@ @Í—¥3«dÛ¼ƒ÷\G]LÇn8½÷é>6Pxêæ€Ëqzq˨|¾†ð+äÖ‘|é +ðq!ÁÊ &â²B:)ô7 þ1©û7™IÀÚ2ç,5Ò¡c>)·Ú4^¿ÐøÀ¹ÓÞBÎ}Hhò~[@˜Bæla>ìlív 8Éyì× ¾ +ÞÃD²1¥ õ5°I^#ÔÀ‡0-À/'Œ*‰*ýAȧfo}u‰œ÷¦îÔÀî×:  @¬…o¤³R¬ èT31¢±¥Ï"?»$©•kªÐzÀí?6àó'+]s  m´5èÁõ×I@r¡ ÍžÙӶއ– Ø-ÞC%Úa­õD›ªt|nµ{ Í.¬šØGTv„øÂêøÀ*š»§¹’âl•÷æïÃø[Ÿ€VDI@Õ†ÏD’èRg– £þÒÿ´ôO¦ÀA1üÈhµth¸…üˆGÅ´í^rÖ•Ø],þ™$H‰~‰Çc£‘¨ä¬xcoX/ŽO) ÀESJ\]o8Îf@nËZºh1/) ‹aObÒÚRZwõe¢\.ÂbXÙP €ý€@›j}@ÞâhaGYß¿@w5ùÝ„!`ª’` `š×a²eÂ4 `VÐÃ+C b!V"R1ØÌ+ÄL-Ο¥6¢ ÀÉî‚þ_l˜––0—”*g}=õ88™·’òŠ›ÁH«Ú–²y÷îÝÑ>Êm{¡Ê[‚’vJ‰õ¬h)Є0€៛l› /Ðgê!2€ëÏÉ̽Ғ³›a|O þL-ÚCÅL[L`~/§d÷ý +îLç-®}X”MR òß«Wfê®)eUE%Ê é˲BúÕY·íÀ»3ß àÑþøgò“–ü´y ˜  û¯*€Í€š*ÙE|Ѓ¿_i  m5aSÌgáwZ €JRGœ Inò7y`o¥ŠñD îØã_>çÃÕY¸ÓRàbI»ê^¥¨É­Éé:p,Hq¤6T§ ö¹îy‘À€'ù.ÈÇéùTúŽO78 „¨,«>4ÌOÛ 79@ósé Âϧgù<ðóE @ÒÍ\ ;×þà +dL€N>Èß\}àèÕöä Ÿm‡Cÿš6óvÒJhŸ .P’€VÁ¨-Ü î­K-ëÎå¥nK¹Vd'Š8Úƒ€ÿn/·'ï£-µ-}-uf—Úêß;£n©0€Ÿþ‰=?½»õ÷€¼ˆÐ`_Ðo‹ÌeŸ¯ëî3Ñᦠ@ E™±-ÞCEüû:A“ò;>öÒ×Ô'ÄS(;õE,7Ö¦FÐJðöŸ RR)(¦èwrí6xwYeÙ`€Ýßñ¿”ï—àëÚ­+ÿgÃØ¿7ßÈ2?øà9= îd-ÀÅÚZG^LrÕÒ>ìVH®¤  ƒ ˆCi妕p½õ²c”[@>ažâÀlì3Tãlê ªY•ÂLº³q=hm™åj’¹\÷üH@ |ƒÇ=Æç~ü8ñ%`6ßÅÁ |Ðï3Ÿ|d(¨‡\úUvßÈÒ覧§€ÕGÏ?²ms¢¿NïÜh”Šº Rà¶¥¯ƒ¹xÑ›Ô4ã‘4!ûD?›’ †ZþÚ—2øÿñŽŸ 02¥¢–0ïÛŽ|º<¼òÙYŠL8€l8t.Ñð¯"Qr¾½/<˜Û£}®›ÒÄnYÛÕ ÷ «ç€óóû'?µu¼w-Æì{ü;à·Ž\~@5 °©ÓÛ²”>€X€ç¡%5‚`ñª‡‡?­‘ro(FŧtYp2MЂ‡´j’›wLfЩ¯–|ggLÛ²®è Ëlßzéî“M^1H©?6 ÜWÍ·‰RÏDz*@U¸(@€XP]®PH%_M¶d0@ØF~èy‹¿JG©P籜ºÚX±F -×¾îV­#Í“¬[@\#›)—ªYÜÍÒPÒ€6€JÑ;Š!5L© Ì¿¤^ ödéåxòÑÇ/ÆC¨v˜À *ËóOTt]ìûÐ?*@]?=öNÞäÛ€Õhâ9¾>c}ðÛ Žçw4@C³  YëlÀ íÙM²CˆÔN ×0§†Ü±5ÚYïNv Qa)H~ªR|‰äÕîàÒ6—ºÐW(Ýñr´iça àÔœ6þÃBä'ÁôÒ—;@$Ä–Nýט#Œß +a&É¥a7 Ÿ”@жÞ @ÖæñâV?÷»Ó3Ÿïqt¯í€X¼~=ˆV~¾’ž¢ 6 ÅìÇLØ-ØùŸ~|3~ùlaäãÔ!"ê§l–€«ÈwäO,à΀Ÿñ?˜‚Y›ÚözXKhkF¸{C6 uIÒúþHÀn=>`1*Åj¬=.ösj4A†¢Ù€BG3sÀBÐêGU}£ª¯g™É¿ïÍëQׯ4~&…¶ ³d½Þª7¿ 9ÀoÎü%£WT(ç¯VÈj“f‹$º5ZŒ‡JÓŸƒU÷ðð×ãEø$8É×Å$1/ ¤ÙT+ (ÔwK¦Ê¡¯0ž°B»¢±âÏŽZ°Œy•¶™ºÙ»Kª}_4ö~úøø-ÄW¿§ü£# à €ªý±Nt+2lÇ‹±Ù׬ñ‹ìÄ–ËòhÂý5XÐDàxˆåµÙ;F€ã[Ø@ +Q +P”Ÿ)Î_Óèe75ì ¨è³Æ¢e÷0bñ»ÍøC|ë‚3±6ß ÜœùmÀ7ö^ÐŒU€èû˜„¤_ÁX ›þ. g¯Ok..:pvV T|e@Y6uø¾<]ÄfÌ.a’ƒñ ›Íl—[×oM°£V|N€éÄG}…àîÖæ4/Àlhv`FQ°±)•U +¨>ÛõtٱȬÄBÌêÁ•saAàóËÿˆ*¯÷7Síêè[‚"VŠÑ™u<©¶¡ÀÞÕ~rõÏ[ ŸóWàÓ ~¿·®þm2* @rwJ/rÑ2öŸü¶8•èëjSZ„Úþô§C”ù¿zY™pyríCù¢<(¹—]Ø–³Vñ!ý29¤Ä¢Þ)8w$×%Ùèþβ>`_ôtb.™¡•­Ü±öQbVþÓ€ˆ×ï­„ÄT:vª.²€Ôr­séïÒØ@G– Pì“M¨QêèÃê +€=².ïÔîX,€^37êâ*€â%ÏÒ¦øËË|…»khµÿ@;³ÓÆÜ8åêÓùhaiä[à{á»Àõí˜ûúĹô_.à°¡0”Øo†¨;À·‚¿žŸQ-è4dZs_šh|h§CëøÅã7ñÍúhKtóÃ2íéöã—ð¿³3ù`ë^½A|ïè[±úÁ%á4Ê Æ>‰÷çW TF¸ô™"óë-j׎@ð#ú’·Ç­  î´ `høÇù·>ÝžÌÄî?é¿<_„wU€ß0=þed/DÀ—0LE²tŸ”–Äa6é2Û"+|Öœ?ö“ÀY[Є°í¼;¶#ŽH6›`ÇÂ`DY R>]Ãð`êŸÿrÿ¤  7’€X€¨Ý¶(¹V õ~¥?ý† •´“[–WV©4_Êç0ˆÂõgŠ;uŸ(r“< ¥í~¨¤°w`+5Ë£_@ü_üÝáÆáÏǪ6‚æ¦ + 1gÞÌÅA¸iÁ8’¥ +­fGÕõnîžäˆDï§:fýõkÎtû}3)ügªþߢ ¶ä!àNXÚ›‡!Þh~!©D&-ª0×ç%m"°40á(ÅXþ÷0€ §„Ty¨"ÉÌ»˜u.+!u…H°Ï„ðëaëÚùû á×1¿ +˜2ˆXñ•@õZ ùƒX‘¿¹Ö<ßöi€Sà þqî7——îÂûŸN|jvõÙŸ%æ{÷us“!„©ø P€³ðôü*c ”§Ï–ê`¾¿ÓÚ€£¿ÔIOÀ³(Ÿg~M(æ"ÿ²%°VIt3¤à='Ú-Ñ7/Z÷?Ãuâú‹P†·Çý2Úºåú `##» +€Ì£1€Àº±)›R;PykU€²sO»˜»EmP‹æH‰vmÿ%~ÆAÒhýþÑÏbýßüºÇÕÿ3«®H)„WFÙ¹Öœƒ«m  êE…V›³@ÑSp¥îÑòNê:•ïRáõ×pœÕ=’\5ºD¥°±ÅÞî € Ò»³ÒÚÂØe^µ¨Ïá3´;@•ØÔÐŒ»‹èkY%X% ¥®&‘âŽ3çümßùýÖ±ŸKOù(IÊ)ÅV– „²6¾lߢ¶¥¥ð !ó5p/œpÅy1á_`n$ rmÀêöË÷ï}3øø·à8àh¨Z­ÿ(­ÍT—> E½räpÞúq<=‡øí`‡+Ô±w? di4zºä }G£g›Ïbp¼¼O“•†ª8`AžÕŠÿÑÓ§«›Ï*»‚<}Š™‘]ôV#³GÑPÌ9h/| w ülñD: Ì·g kÆ·Ó~4ÍâË ÈO)ÁOŸ»Æ±sÞßz:`ןÂ: +`I³‹¼Úbð à?ºdFü³e»}í~¨¬øUÃëBÇÐþ½õ7Ñ뽿Ҏ1E›.ñ\ÑCŸS‘™Å‰b#•;¡oKÉ…wíEêjÖ H_ðyÝ‚¾õ¼pÅ)ñwm€"Ap·Pv•böʼn,@&?m= ñPý’b&ÀnñÝz,”ej€¹ø‡@‘ªÕ¡Ùò‰ME¤na&Wœ§1 b&ͧ¿è¡`¾¬"œ…‰‹­qžÉ7°°EÄ!Èâž4j~û}h!U€'«£1àã©À§¬è2ƒ +´7Ê[‹ +© H÷1ÓÓéäe ÀÒ™/½¨NÛñ·l§ó%[¾Ûkk<>YõÙÄ®€Í§\‚ðà gLÃ3?'¬}È3®yÀ¦ W}+€MÂ'ŒbVž=-‚P&„¥ùˆn^,r)^Ä@²‹¶v°üü)$@ðEÚ¼œƒZH·ôi| J»÷ÃýëÉ €¾? g± +0ß0ŸŸ´ZipÈÑëß#hƒjT´Dýw+Éׄ«°ÍÙmêý¨ËŸþÕ>øac퇿*iÚ¬"5wöåùtdQïÊ]³¹§Fr m6EkS潃š…t'ÔôáèúQÿB ì¨>À½W1¬x…œ3U€ AЦï÷^ÙFÏÏÆ´5ûóËvÔ… ýÍ`<­ÏP|¤U}0k>?)ú; Ày¥þ‡äŒø1 =¨¾ÏšZ ¸¨ê"øÓøókòZ€¶SaÝ_w*‡s:«qþÅ´;úýWÞ>×ç €u€ëéó|«Ïú!`ŸåÑ»§ùÌŒÿÍgB>³Vš +M*@÷©6L?ž¾·1ϧyŸˆFäârÉãÑx7c}G`[S"pÁ¿¤ýñB ûÌêźwŸ ò  «y“ðÓ¥ÑÒjûbë£Ñw««®?u‰òþÝd·¢9Ó³jÉšXåŽ{ aœ!ýôùºúçŒY­¢ ´ý¾ì£[ì5º5 +-'w¨6ÛÝËþ9pMR½”¡°×EËðõWx÷›2©ü%Ëó/þ¶ˆÍÆ-ŸSa<þ+;÷þ×Õÿ®¤©XÜQœQcÕ$˜õ¡$Sˆ+âžèp§(¬¹VrÔP|Ûä·m~!é&ø~¨ºo•˜Ù´Š ®­²°€þ0Ï k)¸6ÓOÇH2€Ôþ;d;£ +‘î[&ɹqÆ;ükƒŽ­YDrjËá~Ã|®Û%ÒJ¦Ö×#úÇfXæñC\Û§Øöோ|›-)@Úª5€MLÓ+îé+-×ÚÐRüøÙhaQTNlt\ã©ø¡ñúH•Õj¿Ú®» ÿW2pšŒF Ï?²íçµ è/&ãÑtw:~±Ó¶}Ýçädª!¥‹ âó©Ïª€t$OXiVǾ.xâWDüb¼£Y!‰Õ“­Éf¾;<'Âh6Oæ;Ö®]Íp¼³K~ UÀ–eo~³9ˆ« €Fdǘtðlq}.ÿ­p者JŒ°™u Æ"žç£ZÐnö½¢Jëb‹´Ç–Û¾ +èW8lqãxcíû?…òÿôW{+VR:V«‹e<ÇÁÞþkTóËó‘Re£Ð~‹ÌF£âÏ‹^Ú¦õ‡0ÛÍ^!¿‰PÀ +p–øÇ2i¬m @J®à×µ ¼ƒ*@Þùg<»¢ô+âܶŒÄ€x¼Qøw19±ª‡vP’-†íNHW +½4þÚØ—s!Z€ÜæÚ‡¬HÀæNÅî7ÜSœºæ ¢$ƒ Ø[p”~“ó´äÁ-Çï?žæ¥ È':€ÿ%Új%uü¬÷ÓèÿÌÞ{0o$ ~¸Þ)€ˆö]Ñ>Mvá;ÎP_0lsÀt4l>«F;ô–ºÖAêô£¥ï¾ËÛƒ‘ y ØG/¨=ø–ñ<&Db¼¹¹ùbu²e•!½—ì\ô·m.gRÊ€<ÛÙ þןñMðÛ<Hãö×9P"{jÂjJh`ÒØ3€ª ÇÔ 1’[mˆ’Ò¹OT^Ÿн”®Î«Ó7…Ú U¼ùÚÆñþÊÚþ_ÿº÷gÿá¯ýk À%yî÷ð@2©®7üSùl®¯ošªeå©´\ø Àl§Ò¨`™8Büó ° ß—ï <`$=µe„y«c$B0!¢à[ap”ÈÂ͛֬*0Û;íèÚr¼Ý`è#¾€æÉLØmqèäÒû‹¯Y/­ 8^×-ü«”çñß礉ùž1N«ó÷gÞM(Âbîi@a|u¶ê{ó@°o+¿{lî—¶ª—(dé§ºŽˆ pžÏú ½ùcªÕB;äEüæÎh +áw À–}³0abpÿÏüâ§ê—¨:äË?£]¼<c(ÀöjÆúXuý>[HjßaE¬Ø#`Ÿ€?xÂ8MkgAEÎmË úmfç +;0k˜1› ˜a‚]M`cƒ*@1aÛ€ÀÖm@ÌŽ @‰eç° +P«JŒlôÊð7 €¢N‹-$mAÒïj™hÙ»wxý?9>ðÓ¯‡{ÿymïøÇÆ? B­üNåÐ8 ×Ô×:ý$ É,m¢˜cî*‰êW†[ˆð_±¯ATÝË~8üáð™qVmq}™ƒTáí×õúT|€põ*"åÿ=< "ØZþÚ²´¡Ã> B-Ú:q<&v¡còµuªf5’§>|‹­9z›ž‰Úq˜bhÓB6ÙeÀW$§h1ÀÿašY2`Ÿ€¿€S+ìØ€jüŸ|ß!˜×þ¶v¶Å?V`{übõÇfQ0%ùÕ›ñŸB¦ã/^l€šÄ»“áßáŸ0 €˜¼Å~‹¯Fâ…á?úï”B€{ªe?U÷´*Æ}  õ$Ã<åÌÈ\‹JjîUêvß/A™èÂý§’i;&GïÞ½;Æ¡f‡ÿçkÿöŸïíý×ýµ^â – m€9Ã$•MßgenL 9ª\8/ìÿî6(âK  îw¨úÜÆý-?Æ·¾ƒÓt ´7‹Œ+Ϋ® + Ÿn’=K +ÏÕùyÈ#!AÕýZÔ㤎×hÀÆCÊdÆòZàb-«?»ê&ƒÕ˜R'Á?™o»ÀÅŠ•œ¼¸ +sµSÚZ¡8×(Í5Jõ›x9Îg¿ œn@u³´½4³Ô»p'°é2È—A?¾oÛ¢—F@[œp×yÞ¬ïê°Ç¾ôSÜj¶&€9Æ^|ñ_F`)ý[ø{ 0Y +À¥X‚]Ÿm&ÑØ‚ñÏÛ·Â?~D—F/¶_lo¿0罄Փoç-ȵ´gæJ€­ K°@d¤!v5/3àî4šÞÍoÍŠÈ÷‰>W\5ª’RþL*•ÑvÃïuº\(µ]”ôŸñC§T´£¿Û_ù›±·÷÷Gk{ÿü_d:h~¥{ € ä~*±mIÐ,D[ùúUð(ÃÜåa«âç:ÊŒ°,…'mwÞ%G<ÆCuKÅeÖŠ¹Tùý}râœñÛˆXX^ÁO‹)%0–—ëõ1žŸ€ŒÈ¡Jü¾£„ñþ°…0€bL¾jÜœ¦À׌ˆZ÷'‘È“  I(¶a?ÄU´ÒºO´$:@F[@Û³¸²wÔš_xÆ££ÔXI¹4.„°¶ø•0ý›³ç€ç/}Ð*@v©Ôáè?«£ÓXâ0é6d m»•< $ô§£z¶Ç¯ÿa¨ °ÜM·&› 3¾ì.°ê?M¡ {g³^ dЋ«}þOà3íîRØœ¦GÐn&3Ø~ñbÌûÅg»Ö»I,ZS/ƒÈŒˆ½T`Ö0Çäô]@ß3dXèÚbE!êà>õŠ\ )d­ ©*í–ß/"FðT@6¾¥Y·DàÐ…ÆŽþãÞÊßü{{ÿ÷áÆÆ¿þWÿÓ¿æ*íä+a ÿ­ @`ºƒ[Žo¡N¶b aoW +Ì¢{ßÝb^ŽãðªÚþR´ú¸áŸoÔH·±ÀP ŠŽÆ2r¯${˜ÀÏÚ²RÝ+Ã*€`Ö‡ÆV4h‡ T²Õà³¶•nÅ" à­ Ýò@6ǵ‹Ha}EÂØ‹ÈMR~ŭﲺÍ0Qý¿W_† E£XBµv¨˜IÌ@Àó—/ßüXÀq<1UЧ|ÄÚ+‰¾º¨G/.ü*ÈG_ l`uzuž®àß™|˜Ž·pã V + ðÅž¬S/`“s?-ÿùÁ¯g›ã§_Bl_–QD›“í‹m_P©øá‡éÖædÕ˜6V²sëÖÝ6qĺVÁ¨dõî6Ài€Àv¨ö;®üÞ6 F;0hpw×3àqÄ æ\@cX €éð#–ò×!=ܺÝv=Pþ)àÿ§Ç¾ºêøç•µ£¿Û[ùßþÃÞáùãÚÞÿõï3¥Ò¡}Ÿzè ÀëbªðÛï`«à.þúcº= G +9ȰåvxR³ÞkÞÀÇ*zšÖšþýu½ñå xjtôj„=6keQPÀgG€bü¸/žY +6ÖcöÃÖ‹„l˜¸G%ç0ÏÆ®vß_0h°ü"+$Æ-I_3!Á<7à×ÙYÁÌdþa MÀÙªÀ~ÀI>¬××É£‡®ˆŸCÍdöçvsug¦¶o§¡Ÿ +v ઠàÔ +DìÂ…€;yÏÇz~ ÙÚyž†Ã¥à¿—Tüq÷P½µµ»äpŒšì¾˜Ž« Àƒwí`ÐŒ|—Žt¿FàÅ 0ßO’î\D®€kµ÷·W {¿ÍRÕP @Rá^“Ô€w`n*.)p€çŽ‘è Ç5̳ cÃv3uË¿&ÂJI{¶ +Q–6Ü}:üg°ßw0€Ÿÿ¸÷—ÿù‡½ý¿ÿ¯ÿéïÿÓßÿW´œøú$<ÜLQg êi6:PÙAº|U @Ìv*låÄÈÍFèüª_hk;¿ýªu€£ÃJ©Éžj߉>0Oö cü48 ý¼¬çÂ?5ö5PhìÛ§ +àÑÿ“”#±`r‘Ÿ/(àxý†ÿÖqtü}…dÂ4ýeU¬MGþ$?+öeØN¬'™5ðiëó €ŸÏ”x39:ÀNêè +@!ñ¢Ç·X~ˆ“7‚!§~äÍË—ÔÖ¦iL/À•Ï퟈Xßè/öÇUÐ +läãMAÏaHÝ‹x6?ÍkÁÇ«iòüãÝ­ÉÉÎh²Ãš¼ÈÚÄ„TÂ"ãøþp€m±ÕOü@304ÑIßßЀÌz`yÜÉ€m’Ô¡÷ €€/!9å€T/€ +0žL“bí7>] +˜ë¸.Û®Š//¾Ú;ü +pôwÇ(óþßüÅÆÚ¿ü‘'›Öç8œ^5ÞGÿÐMt´qëîÌDjµÖ·{úr[¶(®v~ÿû~8<ú#à0ë*'*}©?à7X×­Hâam"Üzü`Yü¯8¨Ë÷¼øéüS[)ÀzÚÒ|Ø1~ •¶ø˜õpT»ˆoJkÐPUÃKŠwqÅ—ûzk-WND6swÖ8“WßΆXÙ§´µy š‹lûR°z0m*µAÏÕn"ŠB Òhg¾þÜ÷éÌÃü.û"ckéàYˆ[A_Z|Ç_òQ€Ñè; ¾i_ÿÒhˆÿtý廸õÝÕqFb&€ñË® +ïŒîø†Pªà³¶Ú8À‹à§‰—õçJR]³âømenpO¼:pΆÈgïý `нžrff Àì™5‚íƒMΣ +_“B•R +¦~ð¡±ã¶¿¶÷/ÿboï¿ÿ?þÅÞÆáÿƒÒD:Ñ57ˆÿbö?‚ÒÐ.?Y©† @€nhvšùúWTÒ0–_έ§öÜ!P¼v"È•4 +ùŒê³ÚÍñÕP$‡ 4@6M§ðï ô¤ÿO ÀŽtc6 +]šàä’ ÒZmbˆè­J›5`#DžÌer2ñà*@ßòþk€fÛÂ(nÛ©¹”¤ 0uKÚúÜw.e¤çº`øèýBx@`ü«’²hgyÐ%úiàÿÔ‡ý*@Ƕ]ú²Oñ 6Ùóh†žJþwKßrëxŸú0hÄ5-ÁÓ<0”º@ù‹°¹º´ä»@Ó:°K‚>Lˆõ†Ñ8ä?`ûs{Ò :]Ù{ðïEÝbr—U(G²¸ÍâÉË8_â],kLNLϵ¡ ÚçÚ8¬k¨-G+³$åÛ"¨A®Ú~¯èþíxµ·wôóÏßÿÇÿô×ÿå/öVö~ý—Mÿ¢cH¼QÓD$ !8/•p³Rp/àƒ‘'ËöSzdñö#j¢{u~ÿìªÌz`➦—qüõª†0+ô;Ãi×Ó€®H9ºã 8kó¤V¯+µ lHüöŸp ü9¶­×&Å$è,{`ª2m@@~œß¡ÀÍ'·blWõMiyl}UJ–ƒMŠy‹sIÁŸtµq–@,ƒPgíehüÆ?UÀÒèÍ›7¾ììüü2_øõ…aÑyTÝ«+5ü¯©Ã®‰˜6€“÷ï_Î @ç{¤@€r‚òóò} + €ÈÀ¿ã~¤Ep €ïK#Œ¡Zþ0 zAMÅG€Æ;9l‰èÌ|‚À·ÃÂÿË +q%"µ\°8çg–õËfÜ#„Å01~³ÓO6+€ý¸q eJ=žR(\[>D¡0@¸ñ…º‰uo1ˆËNOÎ^í¨Vô·<˜Hš7¡î âXÒ¤M"šÏß ŒRú‘™sþ="øou7GÇqÐ~ø+½ÉáŸ~(6oJ=°Ð_•TУã&4ô, ˆ»4`¦‹ÑKŨgjdÝPàX‰°Œ¦ïJ”;b5 ÖöË&:t¸º-ø~C€Ö‰‚þº2ö…Ë•ăr @ç.†ëtÁ¾é°?ú[2N7`Š„¢ò ŸôëH‡"ÊömˆÐ&<˜Xˆô¿àþ¡'Ü¥ã¼ò´I®ÁË ßÕ +Ø• fÂ|wÒÖ†ãüÚd,4Ó0žžOâëgÕv4VgãU =„†þû60é>Ì!ã€Àyz0 + D@îpÀŸIÿì©OòµÇŸ¶9Þl›Èx©!?, ³ìœ° §pͯƒYƒð!³O +¶¦ú°Éï…°êÄKà’¥ã^’>Ö*ûÞ°¶D© á©]tw¦A4DHÔÀ CÀÕoƒÙ§+7²­®iÜ6MÊ*YÌ©hŠr sJ¶$Q…¯ICÙ¼~èÿeá¿þÒ­ìÿôëaÃI)@ä h¥'Aù6ö^³mKX/v/®˜¡’òX‰YP„íå­D…£éyðÝ„¨pBÂ<«§=mŠzG@V-Û"Ò¢\} Ì%#r2CÒúÑQ€níÖH@þæú Ä÷i8ÇøN À”ÕYfÓu5Yü\¢ô‹óéùG_2=}ŒŸ?½¶ Ág„ÏÏ«½Îñ<ðÿ€>ôs$_¾è¿ûaóÃî~ll£“š>OÓ¾1›lM}ñ÷dó$='£ñ$݃ êäþ…}ó"üš4ß ­`ÿ–«vP3×ýlRÕwÄ~ø¨3Ô.¸%5K$%¡¤$ –&\SIÀd`ÍäçØ#ĺÂanÇF¤ U.Á? 2“ÊJ0·¨tákHf&€µß+?Yè€@€þúïP2‘‚DŸU¹¶RzÂìùºÈuÀœ¬uøï㸊ՙ»Ð ‘÷ç¬ÅXJèj]“í¤A:;dFK„V/ýº+úß4°Æ4Ç<ùšÙÂÄÁ9fÐÀ´ãážÕÔR7êŒë"Á ?³vdà~›Á‡‰YmR`cÿ€ÌmXàÞˆ~þÚ¿ò½ö='ÊÉÄ{U9zIÐín@¿ÞGOž:øãéÇS€ùòÆà8Êè|Øjø?¡Ÿn.Õ_£ù$ÀÙééûÉ›ª<ýh`š//¿ /ÈþÇòtÇïïäS¾»»“ñtp‹Vf»µ†ìÚC8¦¾_ƒ~íòkàGb|3ñSƒ¶ÆÈ.Jžõ-Zc$iÙ¹Žz@ÒDæ Ê“t\xíéðš ïýºB<¶bÎEõ° ”šw}zLIz¾IhRjûÆðp„Ó&E/ÛT‰S ×ìã€C e8<ÚåCÁÉ—'0ëŽùûRë2"Í<¡„¹Mk2€×~Ä¥Ä+Wö-O-w¬B´múŠS‹¡°®nE`:Zxö|»Ò°wíP`=SôÜÎou]WUcpòœ'ÎN'§> ´´ølrzuNªyœÈW‚…ÔÛ<°¨ ¨ý~~÷HvS¸–Èøž£©Çnn¿¨à?Œœ¸ÿC>´;µÆð‚ä¬b<ù%‘[& Dº¦B“°ÌõT@gÎàë¹Ô@Ö6‚ì‰Ñ ‰›ßZ5¨fž4b +’Ð샸SL­oA3I*V¬N´ˆ9kÖ5<-!yÐáö)eÏìa¥!ÿ` +Pm¸ÌŒ‚9|û§ýTUw½að妪3ÿž”F.îm †„ƒûh}{>Ê@ ¨ ¨²ÙwàP$úèl€„øò ôà Ëö¢ž´*€ ´‰ÒG‡hŸÔyiî•8;ý>ûÙd.Ä—‹ÿâóM` [è@á…ð\މI7ÄS‰½ÕМ´ö2ÞßY’$‡ÄˆK6Åš_‹‰"7®­PÁ'wÜJ®×…ÄÖýÅ=XJœ=U¥tV‘šù>ÝÜ„Â?§cqbášËÊüãÀ>Ò#“?/,-ùbðÓÖ¼%Ñm4Õ4¡¡ª?+‚—‡ø(Àû7¸ùÇ£sÎ÷Bäbm>³ `4:¤Å?óÝÉÎE@Æõi*ÚÓƒ¾,hÀâdâ¾LÀ䃟›ŒO<;@\cÙÆà;ÇbkþÌ“á&á32µp´`w´s™6ŒÒ`Hµ§;Z-¾ŽÔ(ˆg¶Pn\Žd0!Éô$âús+/+P¢düì»E¾H×Êš…¸ýô²¿¢þTè-óß-!Ǩ½pA•~õ@zµ½Ÿk×qP8üW–9Y1÷ì Xœ+d|ªŠˆ}=†íÕ¨ª¯X5Ú¬ÿZ(I$6@¤ÌPeòÂI€…øÇ.¸ÛÓ!è±€EïíÀøQ€ \T´¶Êa€¶gñþ¯Ø]­”G€LM`h%R'ótÎÀÂý†2KKc«i3ø/ÀAïè-«]&-"2¹ngÁz×Y¦òœT¬Wö7ž¤—ÔO[—hì9YÙ;zwdý_¾ÅNÙQAbƒBH“n%±f’c̵ÓPÚÒO {Î\fÂ9®5yÖØU»¢ò-ËlÀ ãHE«Ob¦<Ðà¼æ@™´î„†cl ðì¸ò„@:7ÖÖ-¦î¡ÆÇ¼Ê³KJNW$]k®;òIOß•‹RÑ"OÀ¿ñà° Þ?pÎ,%à•k€49U&•ƒ¢8C~2KŒ«²€<x:­6|QJ >ùR@ ˜Ëk­ದae£¥Eª ,p¹´ªc°»ºú\`¡¾êw àd7¿kïXZZ|´(Ö—ž,-,>no Cîç«B“ªË¤Së#ßü<+‚? höNäß68p±#À—p‘ÖvóÃõ ¶- ×ckü4‰ÙŸtÒ¢/†‘À˜°ÏÐùˊœ6F¹}“ÐxÆ$G1k?Ü'Áȉ4³¶±˜–Ç´«ÿš’zDÝBÓ·D…‰ŸÒï¡Ò‡Gÿû!ÄvÏf&Á¿¿ftI(½<ÀK(ºÛÏ-XËÐ…,Z¤NÌ´¹Íjm·„Ü$y¯Buo£(oÑãϬËtÆG埃ý.. +_ PiMÛl ¹fK¸î†ñ/;mHgD%$ï1:³–¦@ÈÐ/ü×Ó€9>5d±Mc&¥ @å#.vk2(Îg‘|†&°†¿'o\² Þö¡`\h¼¤££ÿä ¿%sUÔQÅõûÀ«ÛÛ¶Z§w$0{ÔC¢¢žzG{¨ 4ÀVAé¾5…œ•ÃÅ(B݈àÏŸî5µðvúˆo]‚Ôþ íÓAeÊõ{4‹çÏËØf­ @,€6@øtús‚T€çâúµâÑ®?°Çl\ æ%Ÿ®ì8àZ+ûGEq´™ +_œB¡ºd‹6j,cRUHÁz€¶@BàjÒgÕLV3k<äá ÀéV‡”ZÿðZ)ÀO‰J[õo"¨‚¸2ˆœµ…k¥Cq ÍjÁ¿=˜¼µ ¥?¨ÏyKª 8‹¯ÙñÅ…f ½žIïï"â=Í^v{ °ê ×áÃ9œý°ÖCA)¹£O‰"(ÀЦ"E°°*¤WÀÕ?ò·dˆÛî€bÝccc}ƒR0gUn% þ\|:œá@Sp_Óp! à–ÀþQlOl?/;¤å 0ß ZѲÖð&/pà…^̯£…`Õ˜ušv€ÉæC4Ûú‚€ãú.Ðå%ÎU}Ðêü‹íÔÐóÀϪOöQ‹ù’ïìsÓï^dð.RØùUa¨Q¾Ø‚¼êi4Ùò“â9Váh7ß:¦3~à§ï•Ùò­\Æ¥h“Ûs9β[+â0¸æ×nˆè @%öÚŽ² (=wŠSÖ“Û^¾vCä+¾VcÊÌb¶lRxü¼Eë ‰žl±p +Ã`gÓ†oJiN”§Ó ‡IiH € @-ýyoå(t>¨“hcjÓË~/=8íÖ ˜‹Zv 1Ú¼ ©£ºW€ù¯EŸá‹ÈÒŽØIJ\Ãì£ðüdó]A‰@½ 2 éÿþbÓ+ÛôëoIÉ‚7CCƒvŠŠ$eÚ¤éD&ŸÈ*|7B‰ÖÅCóʰÈiŽƒÈ†WbZª2€ƒý5¿-¸¾ç*Éœ/CŒ¡t" cB4v©r÷ÈV~’ä@¸F €/ §@l¹HaÝ–ùƒDç®Â xz:õÛ^öâÈÔd(óߨÈt㾡qå@}o·OƒæÃé_¼ºËÔyöø±oû/e¿øW¿}®!í©–ùzà¬) ±ß}û//"ÍüM q8ÐÖK6fè` ÞÙ#77A´°mÐò‚OÉ)³` ¿´Ñë³c +¼pösí&ྑœ¢I‚ú}âa$‰ŽÑñL>xiº¤)Ì eJj¯ŽÍF$x˜fL¿K¢ÝV4`µ}{`k\ShÑÒ¤Ÿ¡•3úóë¸wf.ÍPV”,“µDŠšû‹Ôj¥ñ¸G[ +?@8<ꪻ•EµV|D& ¯nÒÚÒàèL3@R¯Ê€Ñ0€Ž«ç€nÙDæN²îŽ5Ñ`= àà%°O }f1ð(CDV×ñèËDªpÜðú-GY¨­ËŸøòŒ|½sþ3±é”½=Sâfj«†ÿÛCUùú: #§§i€PAPUa¹±CáS“å(ààÑÕÙá'ïÇÛ«K‹V´ 5èÂQ»×Õ?mîÖÛ=²Š-p|ÈÍ +L£PF Í‚é…?vàñx¼ir¼Rûc§¼p¤%Ú‰9ìÈÅÚ ¡åUaÆ-"4ƒÕìγˆƒÎŽ\wÓ7¥ƒèh£x Ïò‰mMŒ¦¢°cAÙ +H©±‡ ó$Óx¼Ùóô$æá‘@â!¢Ò8ïf•R®W¾* ‰óR›T§&#‡ñ­ggš¨t{/úÅ€˜ÕbòzsCÒ¶×"e;¦` ¦¤˜°Yˆð¬6x æ•ůî @r_½ˆ’áµå® È)áFáÿh`@!ÇÔr`o¨,@é4Ôs÷ÚAàur,öO‰$~'F÷à œ"Ç‘¨Až·žq©d´7Ðâ ø•äqß±TÊë½ýƒ£Œ“Ò“J’ÜV¦ ¹°}ùUÊ —q[Ê;— iêš ¾Ÿ|<³àœ:€lW©ò;R¶¨CzëÙXuTž `€o‚¸ÿèn¡s ?Ã-OÞwKR5È7ÃÀ=ÜçC¿Ýg…ǶäKÀit ¨¯i ØÊh€£“ž4ÑfÍÄO™eè¿°Í.eÙl‰RöÅܵW×,ýxvë)¶µ!.8ûÍT/ÜÈ6ž¤€ùY£Oi' y}tÅ„ òd.ú}D+'Œº&e~ü;PøoTª©?kR1‚®f Ú^ó lRá´YŸ‰:ÜVŸ°"ð G¤m§£ ,ä öý¬:{Ïïø‚èyR/Àþ™ã屢ìPådÒn@iºSà?cù®'±á.n¼*ðcB‚ø†§•ewË º±zñOÝ ¢—ìo£Â\¢ ÝØÃñèdH+ç'Ô<ÒY&ðËÞñÃ#R€‘¯,Á:(c 9›Ì¬fÉONâKð1qe ‰¯YdðB©…ÁFª¢Ó +0µ„5y¦DÔŽìbƦ‘Ýʬ`Mz¾uÉX9¨âðãpkWì«Vä2JñP‰ýC @ÆÅ9Êíû@TŽRõîû³"¬À~1‰ÀÊ:*,ü³ßH^ßðëju@,Ž â˜ ñ¿Ó¢Þ¯ùE³/…À¼8 @ÕSóßoÕÿN¤"¨ü  +oíVÃu µ(:Á“ùÔá¨M—`Fdk˸õÎ`, #-es‹@ È@—¦m’¥ÞÝ,Ýj¨¥Yþ¶x𚣉7ú*û' û¢? ˆù‘C‡n3Bóå8ˆm±3çÏï–,¨—mB÷là*à;§R§r`!Úm°+@ßöãN°`"ç—P Î~®îr`D„b¶6§›0E#f›·NÀÀ†k;ÁÿÒh3½‚Ÿßã% ¿—þû¯aÌw¶¦cÇ&¬Û·•ôÒüú¹Cm€9Å÷úÓ닲]¹¯>[pQ{ÀªK  +C"!°ÎÊ0'²F²Q ø^5ÿf9{„®?\ ‹ñ<à ›Ìh:ÓR\\^Ÿ'ŽV½FÇ»i&…CÌ~Ü6¿bb×@E'-³N @àîX£’xº´ÙÝ75´J'考œ—oÖŠ‘8×áDøL’½´ä°òÇiÉüBÚG¦,%/v=ežV’ˆ ûYø&fEÿЯ Ï @¥Mι1^Ôìdæ¹ËòL†€1¨åù8€äKõsUɵÁ<=fŽMÅØw.U8…¿¸<;÷ã P€%ª¢EÛ¢²;|w2ÛÈÊæ ³`¼: `»ñF£éî.L~“ðåˆÝÍÑÖhWk`[ÀÓǰ€¥§ãÉÉÅÔ4q,ñÎd÷dwwº{2=™lN>ìN$ˆ$cîxä~R`ɵ ¿g`3g²X¸ ÔÄy'P5né ±mu/ó|7YÑPN¦£aH¤ºnÓ`a)æÚvhŽð»YÙ¡Ù( +búä2©yȃ@‡ýT¥ï}ŸîRº*²q"úÔ ¬ª-Av%¥JóÄGëìñá뎀ì]kv/6õâð÷µE*‘,¬v×V7ˆ>[ÆUÂ"„à0€Ü4øððÝÛ·ok3z/ TÕÍe/ilæ¢ÀU³Fâ¿c6­ÙLØRâ¶s`RÑ\Ün°¿ÁÓi¬VM.`Ö€ r^€ =”£È@_É’¶*eu¹yi"}²h™·É_}YsÂesÕnÍ„œ§ +ðª1-€fðËJÀ‚èîßCôú|\ƒ|#(Ýpø¿|+àL&ðÕ¬Æ?« ¶[©ž@þübz~:}ÿf<_ÄE–âÃ"›£6†oÕÆ>ßÛ§›Ïø=×¾s0àêêóÐ× ¨ocƒùšÈ#Ÿm¾òªàl5YÕŠŒ¶‡2C?pòý…Êç\²È–yå_[^ÎÕzz¼°, +!Öဵ>¡ä_àjU"DßXGãä ÌYm\e·F&ˆO,öæÍ +ž…Hçœ+c)ÎÏÛÕE‚ÒÅ'Ëë6mÏCDU×q®}¡jz:@®6·ôÄÐÝ«8s`d„@6UùÀêÚ CmßìDï0q3椾ֵpp¬öÄä™:£°_  Ið@‚Û`¬ÏÄv w(:é´YV‚1kÇûxð)ü[wÛx½ÄŠý161\<ÈKÍü;E=²IW§\Ò€¾ À*–Àé$æ•€?¦OÞo€$‰…Ô:seUy€!7ó¶,È3›t=y ÀG ÀÅÅY3îû¶6ຖÁjCú»PW1s>µ¸e¦¿ Ó)ôbg‚[ß>™L$~K×?™^üBðäÍó'ìOüêG¿᛾lpTࣥñt<Œý1ÖjÇQ?­_&ÆÛ¤CªC|ùGâõ™—_v3Þ$‚ClƒèΦ{5 "[¦ð—Q™‚ÔÆDý|Œ„1uÙ¢Á¿ËÜKáYãlè»V]ži_^Âv0Ÿ(„G¿·vé{Y”‹†ÓûEð÷¼qÇ´]ÑnÞØuÍJT{&Ùd¦¨æ«=•~€èœzoß¡*¶]ø¬_Ø‚)dá @Üʬäè¶]Éz Ë/Z@OÖ +å%MóÖ±\ axåbÿH4ÏÊ€$ã•nWØ÷êDS©4`°£}ýG§…ôók0~¹k:6Ex°"ÞI\ "9N* °c`aAâßW aÒš_Å‚úóK€—‰ +Bk!ÙÇ\rZÝ®üõF§—¹*À— ÀWz7`õ_àÙÐȪ9-‡tàœ#gàDÙ:ÙZzütäÿ>ã«lå}ýTâ'3G>'Kã¼ñWñ›ßK Kö$RQØÜôó¢/Æ$mƒßë’ÏZkpáNòWÈ$Ì&ý›â”\‹N×¼j ¶‚@A- /šÀN n<×ÅsÅ邨 h±!ù{`’n)xNæâÛSa=ùÊËÌ™ÉÈb +.Èlþ‘†Óû¤¹ÿ•øýIHyÛùiÊT³ Ób4[¤èîÔþØ àe—hªMæZ›Ü·©:Ü­QNPé!eDXåˆ;8Ìâ ,A§K×ï–à_ÇMîÛÏx^Äì†TºI¸¯¸qøÊ.4âË|¹ÐAJu1ǧµá4-w"h| +À)kAâ6ŸéÐX:MòœOÙOk=ö‹ØR)[aloHKÌŒõ àeÚóYÈä™kÒ 2èó ·d!£MÔæé‡ Ï£gŒ³/0¨ÈcPU`¶ù<è  >Þzºô Ìú5¯j¹OÃ3!»ã»?¾°X ¿ÞY+–FÓÕ©¯ÚmŠz )˜Ð¦iz»­€EÀ#ž²¼<÷{±"ñ «% eóü;ª2"1øuᬳ +`ų+iJàúLÅ@~’x™Q1!Ì•‹av²¦A5©::µKÀ®:/¡±××¾KÑL– (i8ýŠ ,6Ê5±)î÷05% @õŠ×ˆž”GTõ +÷-aQáµeÂâXÝí÷Y¤›ãŽº—Ö¸ãíZH6N¡%ŒÓ Àò"é¤ô=ùš—`?ϾZX§¿¾é®.$þ©ÇS*$ªˆªžKˆ\bT*Ë~‰q¸¶(öµŸ6ME@•…àUêßÄ$ñbÙ"~ðçŸR²°u¹q‹OÒªðkŒ€$CK3ÅŽöÿ‘…’0¢xùŽ ·†°£ÏIr<0ð+‚™ɺ*@k¸Ÿè Ñ_Ûîª\I ÀŽÀ7ùÿ°Ú—/p³Ó%˜Þ¬'šdt ày7.ÐA1yS½˜É.ƃÃcSÞ¸ì÷"ˆƒä’s ›t}^]ôw¯j´0f‰Y ê”»O[zA¹øÎ.f×ùRª/RÃ@xõ¤B@öp`3&¢ÐÖ“„™8â£âžc“]§o€ÒûÔ"”ÀÛ÷QI¢Ì(ŽÒÛt~³‰ÕIU'ãkƒXÑ÷s€eö©ˆ:†øÝF”`¤ZP‰%ÍEVø—îgg9XÅ$ò-Ä=øžß’°¦Ùâ¿á½Ä4Zù•XP@¡Ý s”—ÅÕ3ãÂÜòÿªªÉàúDÀ¬ÿaT¸v@\ €ðîÜTÊóÐ`%7ê9`¤™pog‰¸NìQ©y`ÖL;BN“lkðdž¯š![Žb€ZÜf3`'j7c™¾d€´´*@1€[@O]üx´7¿ßÌ@¶¦/Æ›£tŠýÖ˜Gf  ¾ÞÖ¢@’·ðc±þB~“@*3—"ªDo+ílbU¦ xŠSö©^O ÏÞb± Æ6У۬çO”è1¶æic<†“…(ň•“¸*Ðüƒ@GÖÓ«Ôö³ß"©©P¥Ó Ï¤N×6vÌLZІäÃnHNŠ ðô¾¼(Ç‹*âu _ŸcÒš@6ê×pð·+À̧›ƒ8Ý™mÄäe(Ùr'?®±£–Iϰâ6þuâþB¿‡š–hߨ8|w«8±ÊpNœΘr÷l·Ä^€Þ|µ  c½¸Õ ÐU‡Ãª +0×P>~È +¤ñÙ™±w+ àŽf€Í¥±_œ1€…0ªÿy[°4¿1ø¾ €Ô†”Ô”Vú®.­ˆ^A_䄸N¸‹ÚV0, ­*@êN·ñcLß=$ó0üù¦0m‚´ÅÜí9Nï•Ò–òÿŠøßXk; *m´ʼnZSS½$õWäS•Vç @|OÀÑÑ.ÐN4†‹ +vž4±jU©ƒð¡ ü‘¦·+3 € õßÛC¿ +~ñG½@›¦<Öðçì›A¸q ·ÔÌAxÇò—m}€ˆI* gd;§mÀÕA@ªžóÛ݀ѕ÷Cw3Ïà),*OÖ@â{:ÛZm­ €Ð‡µ ¥EiXÿ=Uѯ†Û Ö¨k_2c‰  €Ív,Ñ>{¤£|ÉTJ¹v—·¨ÑÙbGºèÄH·WŠ­îG“•¬Õ¦ÙÚÛÃ7ÃÎáçÕnžMcmÌbŠp¾â=9(\ý€°Ó}Î’dOÐøôþÚ¢çÈ.@× þ{iÀkÀ£I™ÉpJ¬IòDa"Å´ÞPÿµâ!¦…ô ãKˆ»âµ°H¬œ“Œì8ÀWÚ°w·Ì1ô0=ÿr@ð­® £~g ³°•^€ÛOó§pµkðÛ‚÷´ó· ànÁ\ÉŒS‹ÅY óÀoÖà\îñ‰Þ3€2Ž€Vs À¸ÿ`%@“2«h,Lªoð/¾ÆÜÖ %ò™ŒœýÛø®ô-Ž´· í|€¨¬hf:ÕÐ;€ÔBWÖ¢Dó  œ¹ ààPïß·$]z–‰Ý‹½­  ŽX®½àSÕi‡Õêðÿ¨vkb@r„€û)áÛbÎK°‹Žþ­€kmì v“J¨!-ßM¬Ûk €åapcVd†w–!o-ƒ¢Ø“©­…ƃís$'wr ‰b|‹?©Qð·ÚØ ~C@xá}–g’*€Sýf  Ú~O/€À›ÝÑ Èž‚P@m?#ý 0¸óØã!H@HÀw/íX-0ß0èhàa½‚,® )ðW $H¼Ç‰µÌ‚Ô‚4 öß7@ãq‹h ú^fj @›`:³*À¬ €òý€°  ³Áÿëâ »ü¯V IX“Ö $.†meTî¾ +à³iìnméèdE¼P£Ì@ð($m¨˜ +b¨Ó=`–E¤tò= ,U»(óŒÈª +@>ÅI®³¡ÔË +xÕ¶êX[ùÖäþ5¢ Ü{ÅXYöÃâì߇øQö(ð+ÓÌ"Ö Ø á³RX&øZ^,¬è$¨Žx(i!Õh’íïÂ[BÜ H€7,%½þÿGä/¤l#4÷IEND®B`‚#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +// NOTE: Render size values should be passed from code +const float renderWidth = 800.0; +const float renderHeight = 450.0; + +float radius = 250.0; +float angle = 0.8; + +uniform vec2 center; + +void main() +{ + vec2 texSize = vec2(renderWidth, renderHeight); + vec2 tc = fragTexCoord*texSize; + tc -= center; + + float dist = length(tc); + + if (dist < radius) + { + float percent = (radius - dist)/radius; + float theta = percent*percent*angle*8.0; + float s = sin(theta); + float c = cos(theta); + + tc = vec2(dot(tc, vec2(c, -s)), dot(tc, vec2(s, c))); + } + + tc += center; + vec4 color = texture2D(texture0, tc/texSize)*colDiffuse*fragColor;; + + gl_FragColor = vec4(color.rgb, 1.0);; +} diff --git a/examples/web/shaders/shaders_custom_uniform.html b/examples/web/shaders/shaders_custom_uniform.html new file mode 100644 index 0000000..51601a2 --- /dev/null +++ b/examples/web/shaders/shaders_custom_uniform.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shaders/shaders_custom_uniform.js b/examples/web/shaders/shaders_custom_uniform.js new file mode 100644 index 0000000..cd57d12 --- /dev/null +++ b/examples/web/shaders/shaders_custom_uniform.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="shaders/shaders_custom_uniform.data";var REMOTE_PACKAGE_BASE="shaders_custom_uniform.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","models",true,true);Module["FS_createPath"]("/resources","shaders",true,true);Module["FS_createPath"]("/resources/shaders","glsl100",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5280144,DYNAMICTOP_PTR=37232;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shaders_custom_uniform.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"Dc":___lock,"I":___setErrNo,"mb":___syscall140,"bb":___syscall145,"H":___syscall146,"t":___syscall221,"ya":___syscall5,"G":___syscall54,"da":___syscall6,"F":___unlock,"E":_eglGetProcAddress,"ca":_emscripten_exit_pointerlock,"Id":_emscripten_get_gamepad_status,"xd":_emscripten_get_heap_size,"md":_emscripten_get_num_gamepads,"ba":_emscripten_get_pointerlock_status,"Tc":_emscripten_glActiveTexture,"Jc":_emscripten_glAttachShader,"Cc":_emscripten_glBeginQueryEXT,"xc":_emscripten_glBindAttribLocation,"rc":_emscripten_glBindBuffer,"oc":_emscripten_glBindFramebuffer,"hc":_emscripten_glBindRenderbuffer,"bc":_emscripten_glBindTexture,"Yb":_emscripten_glBindVertexArrayOES,"Pb":_emscripten_glBlendColor,"Eb":_emscripten_glBlendEquation,"xb":_emscripten_glBlendEquationSeparate,"wb":_emscripten_glBlendFunc,"vb":_emscripten_glBlendFuncSeparate,"ub":_emscripten_glBufferData,"tb":_emscripten_glBufferSubData,"sb":_emscripten_glCheckFramebufferStatus,"rb":_emscripten_glClear,"qb":_emscripten_glClearColor,"pb":_emscripten_glClearDepthf,"ob":_emscripten_glClearStencil,"nb":_emscripten_glColorMask,"lb":_emscripten_glCompileShader,"kb":_emscripten_glCompressedTexImage2D,"jb":_emscripten_glCompressedTexSubImage2D,"ib":_emscripten_glCopyTexImage2D,"hb":_emscripten_glCopyTexSubImage2D,"gb":_emscripten_glCreateProgram,"fb":_emscripten_glCreateShader,"eb":_emscripten_glCullFace,"db":_emscripten_glDeleteBuffers,"cb":_emscripten_glDeleteFramebuffers,"ab":_emscripten_glDeleteProgram,"$a":_emscripten_glDeleteQueriesEXT,"_a":_emscripten_glDeleteRenderbuffers,"Za":_emscripten_glDeleteShader,"Ya":_emscripten_glDeleteTextures,"Xa":_emscripten_glDeleteVertexArraysOES,"Wa":_emscripten_glDepthFunc,"Va":_emscripten_glDepthMask,"Ua":_emscripten_glDepthRangef,"Ta":_emscripten_glDetachShader,"Sa":_emscripten_glDisable,"Ra":_emscripten_glDisableVertexAttribArray,"Qa":_emscripten_glDrawArrays,"Pa":_emscripten_glDrawArraysInstancedANGLE,"Oa":_emscripten_glDrawBuffersWEBGL,"Na":_emscripten_glDrawElements,"Ma":_emscripten_glDrawElementsInstancedANGLE,"La":_emscripten_glEnable,"Ka":_emscripten_glEnableVertexAttribArray,"Ja":_emscripten_glEndQueryEXT,"Ia":_emscripten_glFinish,"Ha":_emscripten_glFlush,"Ga":_emscripten_glFramebufferRenderbuffer,"Fa":_emscripten_glFramebufferTexture2D,"Ea":_emscripten_glFrontFace,"Da":_emscripten_glGenBuffers,"Ca":_emscripten_glGenFramebuffers,"Ba":_emscripten_glGenQueriesEXT,"Aa":_emscripten_glGenRenderbuffers,"za":_emscripten_glGenTextures,"xa":_emscripten_glGenVertexArraysOES,"wa":_emscripten_glGenerateMipmap,"va":_emscripten_glGetActiveAttrib,"ua":_emscripten_glGetActiveUniform,"ta":_emscripten_glGetAttachedShaders,"sa":_emscripten_glGetAttribLocation,"ra":_emscripten_glGetBooleanv,"qa":_emscripten_glGetBufferParameteriv,"pa":_emscripten_glGetError,"oa":_emscripten_glGetFloatv,"na":_emscripten_glGetFramebufferAttachmentParameteriv,"ma":_emscripten_glGetIntegerv,"la":_emscripten_glGetProgramInfoLog,"ka":_emscripten_glGetProgramiv,"ja":_emscripten_glGetQueryObjecti64vEXT,"ia":_emscripten_glGetQueryObjectivEXT,"ha":_emscripten_glGetQueryObjectui64vEXT,"ga":_emscripten_glGetQueryObjectuivEXT,"fa":_emscripten_glGetQueryivEXT,"ea":_emscripten_glGetRenderbufferParameteriv,"ue":_emscripten_glGetShaderInfoLog,"te":_emscripten_glGetShaderPrecisionFormat,"se":_emscripten_glGetShaderSource,"re":_emscripten_glGetShaderiv,"qe":_emscripten_glGetString,"pe":_emscripten_glGetTexParameterfv,"oe":_emscripten_glGetTexParameteriv,"ne":_emscripten_glGetUniformLocation,"me":_emscripten_glGetUniformfv,"le":_emscripten_glGetUniformiv,"ke":_emscripten_glGetVertexAttribPointerv,"je":_emscripten_glGetVertexAttribfv,"ie":_emscripten_glGetVertexAttribiv,"he":_emscripten_glHint,"ge":_emscripten_glIsBuffer,"fe":_emscripten_glIsEnabled,"ee":_emscripten_glIsFramebuffer,"de":_emscripten_glIsProgram,"ce":_emscripten_glIsQueryEXT,"be":_emscripten_glIsRenderbuffer,"ae":_emscripten_glIsShader,"$d":_emscripten_glIsTexture,"_d":_emscripten_glIsVertexArrayOES,"Zd":_emscripten_glLineWidth,"Yd":_emscripten_glLinkProgram,"Xd":_emscripten_glPixelStorei,"Wd":_emscripten_glPolygonOffset,"Vd":_emscripten_glQueryCounterEXT,"Ud":_emscripten_glReadPixels,"Td":_emscripten_glReleaseShaderCompiler,"Sd":_emscripten_glRenderbufferStorage,"Rd":_emscripten_glSampleCoverage,"Qd":_emscripten_glScissor,"Pd":_emscripten_glShaderBinary,"Od":_emscripten_glShaderSource,"Nd":_emscripten_glStencilFunc,"Md":_emscripten_glStencilFuncSeparate,"Ld":_emscripten_glStencilMask,"Kd":_emscripten_glStencilMaskSeparate,"Jd":_emscripten_glStencilOp,"Hd":_emscripten_glStencilOpSeparate,"Gd":_emscripten_glTexImage2D,"Fd":_emscripten_glTexParameterf,"Ed":_emscripten_glTexParameterfv,"Dd":_emscripten_glTexParameteri,"Cd":_emscripten_glTexParameteriv,"Bd":_emscripten_glTexSubImage2D,"Ad":_emscripten_glUniform1f,"zd":_emscripten_glUniform1fv,"yd":_emscripten_glUniform1i,"wd":_emscripten_glUniform1iv,"vd":_emscripten_glUniform2f,"ud":_emscripten_glUniform2fv,"td":_emscripten_glUniform2i,"sd":_emscripten_glUniform2iv,"rd":_emscripten_glUniform3f,"qd":_emscripten_glUniform3fv,"pd":_emscripten_glUniform3i,"od":_emscripten_glUniform3iv,"nd":_emscripten_glUniform4f,"ld":_emscripten_glUniform4fv,"kd":_emscripten_glUniform4i,"jd":_emscripten_glUniform4iv,"id":_emscripten_glUniformMatrix2fv,"hd":_emscripten_glUniformMatrix3fv,"gd":_emscripten_glUniformMatrix4fv,"fd":_emscripten_glUseProgram,"ed":_emscripten_glValidateProgram,"dd":_emscripten_glVertexAttrib1f,"cd":_emscripten_glVertexAttrib1fv,"bd":_emscripten_glVertexAttrib2f,"ad":_emscripten_glVertexAttrib2fv,"$c":_emscripten_glVertexAttrib3f,"_c":_emscripten_glVertexAttrib3fv,"Zc":_emscripten_glVertexAttrib4f,"Yc":_emscripten_glVertexAttrib4fv,"Xc":_emscripten_glVertexAttribDivisorANGLE,"Wc":_emscripten_glVertexAttribPointer,"Vc":_emscripten_glViewport,"Uc":_emscripten_memcpy_big,"Sc":_emscripten_request_pointerlock,"Rc":_emscripten_resize_heap,"aa":_emscripten_run_script,"Qc":_emscripten_sample_gamepad_data,"Pc":_emscripten_set_click_callback_on_thread,"Oc":_emscripten_set_fullscreenchange_callback_on_thread,"Nc":_emscripten_set_gamepadconnected_callback_on_thread,"Mc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Lc":_emscripten_set_keypress_callback_on_thread,"Kc":_emscripten_set_main_loop,"Ic":_emscripten_set_touchcancel_callback_on_thread,"Hc":_emscripten_set_touchend_callback_on_thread,"Gc":_emscripten_set_touchmove_callback_on_thread,"Fc":_emscripten_set_touchstart_callback_on_thread,"Ec":_exit,"D":_glActiveTexture,"$":_glAttachShader,"q":_glBindAttribLocation,"c":_glBindBuffer,"o":_glBindFramebuffer,"_":_glBindRenderbuffer,"k":_glBindTexture,"Bc":_glBlendFunc,"j":_glBufferData,"C":_glBufferSubData,"Ac":_glCheckFramebufferStatus,"Z":_glClear,"Y":_glClearColor,"zc":_glClearDepthf,"yc":_glCompileShader,"wc":_glCompressedTexImage2D,"vc":_glCreateProgram,"uc":_glCreateShader,"tc":_glCullFace,"s":_glDeleteBuffers,"B":_glDeleteProgram,"v":_glDeleteShader,"X":_glDeleteTextures,"sc":_glDepthFunc,"W":_glDetachShader,"V":_glDisable,"n":_glDisableVertexAttribArray,"U":_glDrawArrays,"T":_glDrawElements,"A":_glEnable,"f":_glEnableVertexAttribArray,"qc":_glFramebufferRenderbuffer,"S":_glFramebufferTexture2D,"pc":_glFrontFace,"i":_glGenBuffers,"nc":_glGenFramebuffers,"mc":_glGenRenderbuffers,"R":_glGenTextures,"lc":_glGetActiveUniform,"m":_glGetAttribLocation,"kc":_glGetFloatv,"jc":_glGetProgramInfoLog,"z":_glGetProgramiv,"ic":_glGetShaderInfoLog,"Q":_glGetShaderiv,"r":_glGetString,"h":_glGetUniformLocation,"gc":_glLinkProgram,"fc":_glPixelStorei,"ec":_glReadPixels,"dc":_glRenderbufferStorage,"cc":_glShaderSource,"P":_glTexImage2D,"l":_glTexParameteri,"O":_glUniform1i,"ac":_glUniform2fv,"y":_glUniform4f,"x":_glUniformMatrix4fv,"p":_glUseProgram,"$b":_glVertexAttrib2f,"_b":_glVertexAttrib3f,"w":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Zb":_glViewport,"N":_glfwCreateWindow,"Xb":_glfwDefaultWindowHints,"Wb":_glfwDestroyWindow,"Vb":_glfwGetCursorPos,"Ub":_glfwGetKey,"Tb":_glfwGetMouseButton,"M":_glfwGetPrimaryMonitor,"u":_glfwGetTime,"Sb":_glfwGetVideoModes,"Rb":_glfwInit,"Qb":_glfwMakeContextCurrent,"Ob":_glfwSetCharCallback,"Nb":_glfwSetCursorEnterCallback,"Mb":_glfwSetCursorPosCallback,"Lb":_glfwSetDropCallback,"Kb":_glfwSetErrorCallback,"Jb":_glfwSetKeyCallback,"Ib":_glfwSetMouseButtonCallback,"Hb":_glfwSetScrollCallback,"Gb":_glfwSetWindowIconifyCallback,"Fb":_glfwSetWindowShouldClose,"Db":_glfwSetWindowSizeCallback,"Cb":_glfwSwapBuffers,"Bb":_glfwSwapInterval,"L":_glfwTerminate,"g":_glfwWindowHint,"K":_llvm_stackrestore,"J":_llvm_stacksave,"Ab":_nanosleep,"zb":_time,"yb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["we"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Ke"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Le"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Me"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["De"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["He"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Ie"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Je"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shaders/shaders_custom_uniform.wasm b/examples/web/shaders/shaders_custom_uniform.wasm new file mode 100644 index 0000000..804a137 Binary files /dev/null and b/examples/web/shaders/shaders_custom_uniform.wasm differ diff --git a/examples/web/shaders/shaders_eratosthenes.c b/examples/web/shaders/shaders_eratosthenes.c index 374c9aa..0ceb4bf 100644 --- a/examples/web/shaders/shaders_eratosthenes.c +++ b/examples/web/shaders/shaders_eratosthenes.c @@ -38,8 +38,8 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) @@ -52,14 +52,14 @@ Shader shader = { 0 }; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [shaders] example - Sieve of Eratosthenes"); - + // Load Eratosthenes shader // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader shader = LoadShader(0, FormatText("resources/shaders/glsl%i/eratosthenes.fs", GLSL_VERSION)); @@ -72,7 +72,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { diff --git a/examples/web/shaders/shaders_julia_set.c b/examples/web/shaders/shaders_julia_set.c index f819e45..c1fecad 100644 --- a/examples/web/shaders/shaders_julia_set.c +++ b/examples/web/shaders/shaders_julia_set.c @@ -30,7 +30,7 @@ // A few good julia sets const float POINTS_OF_INTEREST[6][2] = -{ +{ { -0.348827, 0.607167 }, { -0.786268, 0.169728 }, { -0.8, 0.156 }, @@ -42,8 +42,8 @@ const float POINTS_OF_INTEREST[6][2] = //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) @@ -62,7 +62,7 @@ Vector2 offsetSpeed = { 0.0f, 0.0f }; int incrementSpeed = 0; // Multiplier of speed to change c value bool showControls = true; // Show controls -bool pause = false; // Pause animation +static bool pause = false; // Pause animation //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -70,9 +70,9 @@ bool pause = false; // Pause animation void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -81,11 +81,11 @@ int main() // Load julia set shader // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader shader = LoadShader(0, FormatText("resources/shaders/glsl%i/julia_set.fs", GLSL_VERSION)); - + // c constant to use in z^2 + c c[0] = POINTS_OF_INTEREST[0][0]; c[1] = POINTS_OF_INTEREST[0][1]; - + // Offset and zoom to draw the julia set at. (centered on screen and default size) offset[0] = -(float)screenWidth/2; offset[1] = -(float)screenHeight/2; @@ -99,7 +99,7 @@ int main() // Tell the shader what the screen dimensions, zoom, offset and c are float screenDims[2] = { (float)screenWidth, (float)screenHeight }; SetShaderValue(shader, GetShaderLocation(shader, "screenDims"), screenDims, UNIFORM_VEC2); - + SetShaderValue(shader, cLoc, c, UNIFORM_VEC2); SetShaderValue(shader, zoomLoc, &zoom, UNIFORM_FLOAT); SetShaderValue(shader, offsetLoc, offset, UNIFORM_VEC2); @@ -112,7 +112,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -140,11 +140,11 @@ void UpdateDrawFrame(void) //---------------------------------------------------------------------------------- // Press [1 - 6] to reset c to a point of interest - if (IsKeyPressed(KEY_ONE) || - IsKeyPressed(KEY_TWO) || - IsKeyPressed(KEY_THREE) || - IsKeyPressed(KEY_FOUR) || - IsKeyPressed(KEY_FIVE) || + if (IsKeyPressed(KEY_ONE) || + IsKeyPressed(KEY_TWO) || + IsKeyPressed(KEY_THREE) || + IsKeyPressed(KEY_FOUR) || + IsKeyPressed(KEY_FIVE) || IsKeyPressed(KEY_SIX)) { if (IsKeyPressed(KEY_ONE)) c[0] = POINTS_OF_INTEREST[0][0], c[1] = POINTS_OF_INTEREST[0][1]; @@ -159,7 +159,7 @@ void UpdateDrawFrame(void) if (IsKeyPressed(KEY_SPACE)) pause = !pause; // Pause animation (c change) if (IsKeyPressed(KEY_F1)) showControls = !showControls; // Toggle whether or not to show controls - + if (!pause) { if (IsKeyPressed(KEY_RIGHT)) incrementSpeed++; @@ -173,10 +173,10 @@ void UpdateDrawFrame(void) if (IsMouseButtonDown(MOUSE_RIGHT_BUTTON)) zoom -= zoom*0.003f; Vector2 mousePos = GetMousePosition(); - + offsetSpeed.x = mousePos.x -(float)screenWidth/2; offsetSpeed.y = mousePos.y -(float)screenHeight/2; - + // Slowly move camera to targetOffset offset[0] += GetFrameTime()*offsetSpeed.x*0.8f; offset[1] += GetFrameTime()*offsetSpeed.y*0.8f; @@ -200,7 +200,7 @@ void UpdateDrawFrame(void) BeginDrawing(); ClearBackground(BLACK); // Clear the screen of the previous frame. - + // Using a render texture to draw Julia set BeginTextureMode(target); // Enable drawing to texture ClearBackground(BLACK); // Clear the render texture @@ -217,7 +217,7 @@ void UpdateDrawFrame(void) BeginShaderMode(shader); DrawTexture(target.texture, 0, 0, WHITE); EndShaderMode(); - + if (showControls) { DrawText("Press Mouse buttons right/left to zoom in/out and move", 10, 15, 10, RAYWHITE); diff --git a/examples/web/shaders/shaders_julia_set.data b/examples/web/shaders/shaders_julia_set.data new file mode 100644 index 0000000..149a559 --- /dev/null +++ b/examples/web/shaders/shaders_julia_set.data @@ -0,0 +1,81 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +uniform vec2 screenDims; // Dimensions of the screen +uniform vec2 c; // c.x = real, c.y = imaginary component. Equation done is z^2 + c +uniform vec2 offset; // Offset of the scale. +uniform float zoom; // Zoom of the scale. + +const int MAX_ITERATIONS = 255; // Max iterations to do. + +// Square a complex number +vec2 ComplexSquare(vec2 z) +{ + return vec2( + z.x * z.x - z.y * z.y, + z.x * z.y * 2.0 + ); +} + +// Convert Hue Saturation Value (HSV) color into RGB +vec3 Hsv2rgb(vec3 c) +{ + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + + +void main() +{ + /********************************************************************************************** + Julia sets use a function z^2 + c, where c is a constant. + This function is iterated until the nature of the point is determined. + + If the magnitude of the number becomes greater than 2, then from that point onward + the number will get bigger and bigger, and will never get smaller (tends towards infinity). + 2^2 = 4, 4^2 = 8 and so on. + So at 2 we stop iterating. + + If the number is below 2, we keep iterating. + But when do we stop iterating if the number is always below 2 (it converges)? + That is what MAX_ITERATIONS is for. + Then we can divide the iterations by the MAX_ITERATIONS value to get a normalized value that we can + then map to a color. + + We use dot product (z.x * z.x + z.y * z.y) to determine the magnitude (length) squared. + And once the magnitude squared is > 4, then magnitude > 2 is also true (saves computational power). + *************************************************************************************************/ + + // The pixel coordinates are scaled so they are on the mandelbrot scale + // NOTE: fragTexCoord already comes as normalized screen coordinates but offset must be normalized before scaling and zoom + vec2 z = vec2((fragTexCoord.x + offset.x/screenDims.x)*2.5/zoom, (fragTexCoord.y + offset.y/screenDims.y)*1.5/zoom); + + int iterations = 0; + for (iterations = 0; iterations < MAX_ITERATIONS; iterations++) + { + z = ComplexSquare(z) + c; // Iterate function + + if (dot(z, z) > 4.0) break; + } + + // Another few iterations decreases errors in the smoothing calculation. + // See http://linas.org/art-gallery/escape/escape.html for more information. + z = ComplexSquare(z) + c; + z = ComplexSquare(z) + c; + + // This last part smooths the color (again see link above). + float smoothVal = float(iterations) + 1.0 - (log(log(length(z)))/log(2.0)); + + // Normalize the value so it is between 0 and 1. + float norm = smoothVal/float(MAX_ITERATIONS); + + // If in set, color black. 0.999 allows for some float accuracy error. + if (norm > 0.999) gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + else gl_FragColor = vec4(Hsv2rgb(vec3(norm, 1.0, 1.0)), 1.0); +} diff --git a/examples/web/shaders/shaders_julia_set.html b/examples/web/shaders/shaders_julia_set.html new file mode 100644 index 0000000..6ec71a5 --- /dev/null +++ b/examples/web/shaders/shaders_julia_set.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shaders/shaders_julia_set.js b/examples/web/shaders/shaders_julia_set.js new file mode 100644 index 0000000..15d84aa --- /dev/null +++ b/examples/web/shaders/shaders_julia_set.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="shaders/shaders_julia_set.data";var REMOTE_PACKAGE_BASE="shaders_julia_set.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","shaders",true,true);Module["FS_createPath"]("/resources/shaders","glsl100",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5271744,DYNAMICTOP_PTR=28832;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shaders_julia_set.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"Ec":___lock,"E":___setErrNo,"db":___syscall140,"Ua":___syscall145,"D":___syscall146,"o":___syscall221,"pa":___syscall5,"C":___syscall54,"W":___syscall6,"B":___unlock,"A":_eglGetProcAddress,"V":_emscripten_exit_pointerlock,"Kd":_emscripten_get_gamepad_status,"zd":_emscripten_get_heap_size,"od":_emscripten_get_num_gamepads,"U":_emscripten_get_pointerlock_status,"Vc":_emscripten_glActiveTexture,"Lc":_emscripten_glAttachShader,"Dc":_emscripten_glBeginQueryEXT,"yc":_emscripten_glBindAttribLocation,"rc":_emscripten_glBindBuffer,"lc":_emscripten_glBindFramebuffer,"ec":_emscripten_glBindRenderbuffer,"Zb":_emscripten_glBindTexture,"Qb":_emscripten_glBindVertexArrayOES,"Hb":_emscripten_glBlendColor,"xb":_emscripten_glBlendEquation,"qb":_emscripten_glBlendEquationSeparate,"nb":_emscripten_glBlendFunc,"mb":_emscripten_glBlendFuncSeparate,"lb":_emscripten_glBufferData,"kb":_emscripten_glBufferSubData,"jb":_emscripten_glCheckFramebufferStatus,"ib":_emscripten_glClear,"hb":_emscripten_glClearColor,"gb":_emscripten_glClearDepthf,"fb":_emscripten_glClearStencil,"eb":_emscripten_glColorMask,"cb":_emscripten_glCompileShader,"bb":_emscripten_glCompressedTexImage2D,"ab":_emscripten_glCompressedTexSubImage2D,"$a":_emscripten_glCopyTexImage2D,"_a":_emscripten_glCopyTexSubImage2D,"Za":_emscripten_glCreateProgram,"Ya":_emscripten_glCreateShader,"Xa":_emscripten_glCullFace,"Wa":_emscripten_glDeleteBuffers,"Va":_emscripten_glDeleteFramebuffers,"Ta":_emscripten_glDeleteProgram,"Sa":_emscripten_glDeleteQueriesEXT,"Ra":_emscripten_glDeleteRenderbuffers,"Qa":_emscripten_glDeleteShader,"Pa":_emscripten_glDeleteTextures,"Oa":_emscripten_glDeleteVertexArraysOES,"Na":_emscripten_glDepthFunc,"Ma":_emscripten_glDepthMask,"La":_emscripten_glDepthRangef,"Ka":_emscripten_glDetachShader,"Ja":_emscripten_glDisable,"Ia":_emscripten_glDisableVertexAttribArray,"Ha":_emscripten_glDrawArrays,"Ga":_emscripten_glDrawArraysInstancedANGLE,"Fa":_emscripten_glDrawBuffersWEBGL,"Ea":_emscripten_glDrawElements,"Da":_emscripten_glDrawElementsInstancedANGLE,"Ca":_emscripten_glEnable,"Ba":_emscripten_glEnableVertexAttribArray,"Aa":_emscripten_glEndQueryEXT,"za":_emscripten_glFinish,"ya":_emscripten_glFlush,"xa":_emscripten_glFramebufferRenderbuffer,"wa":_emscripten_glFramebufferTexture2D,"va":_emscripten_glFrontFace,"ua":_emscripten_glGenBuffers,"ta":_emscripten_glGenFramebuffers,"sa":_emscripten_glGenQueriesEXT,"ra":_emscripten_glGenRenderbuffers,"qa":_emscripten_glGenTextures,"oa":_emscripten_glGenVertexArraysOES,"na":_emscripten_glGenerateMipmap,"ma":_emscripten_glGetActiveAttrib,"la":_emscripten_glGetActiveUniform,"ka":_emscripten_glGetAttachedShaders,"ja":_emscripten_glGetAttribLocation,"ia":_emscripten_glGetBooleanv,"ha":_emscripten_glGetBufferParameteriv,"ga":_emscripten_glGetError,"fa":_emscripten_glGetFloatv,"ea":_emscripten_glGetFramebufferAttachmentParameteriv,"da":_emscripten_glGetIntegerv,"ca":_emscripten_glGetProgramInfoLog,"ba":_emscripten_glGetProgramiv,"aa":_emscripten_glGetQueryObjecti64vEXT,"$":_emscripten_glGetQueryObjectivEXT,"_":_emscripten_glGetQueryObjectui64vEXT,"Z":_emscripten_glGetQueryObjectuivEXT,"Y":_emscripten_glGetQueryivEXT,"X":_emscripten_glGetRenderbufferParameteriv,"we":_emscripten_glGetShaderInfoLog,"ve":_emscripten_glGetShaderPrecisionFormat,"ue":_emscripten_glGetShaderSource,"te":_emscripten_glGetShaderiv,"se":_emscripten_glGetString,"re":_emscripten_glGetTexParameterfv,"qe":_emscripten_glGetTexParameteriv,"pe":_emscripten_glGetUniformLocation,"oe":_emscripten_glGetUniformfv,"ne":_emscripten_glGetUniformiv,"me":_emscripten_glGetVertexAttribPointerv,"le":_emscripten_glGetVertexAttribfv,"ke":_emscripten_glGetVertexAttribiv,"je":_emscripten_glHint,"ie":_emscripten_glIsBuffer,"he":_emscripten_glIsEnabled,"ge":_emscripten_glIsFramebuffer,"fe":_emscripten_glIsProgram,"ee":_emscripten_glIsQueryEXT,"de":_emscripten_glIsRenderbuffer,"ce":_emscripten_glIsShader,"be":_emscripten_glIsTexture,"ae":_emscripten_glIsVertexArrayOES,"$d":_emscripten_glLineWidth,"_d":_emscripten_glLinkProgram,"Zd":_emscripten_glPixelStorei,"Yd":_emscripten_glPolygonOffset,"Xd":_emscripten_glQueryCounterEXT,"Wd":_emscripten_glReadPixels,"Vd":_emscripten_glReleaseShaderCompiler,"Ud":_emscripten_glRenderbufferStorage,"Td":_emscripten_glSampleCoverage,"Sd":_emscripten_glScissor,"Rd":_emscripten_glShaderBinary,"Qd":_emscripten_glShaderSource,"Pd":_emscripten_glStencilFunc,"Od":_emscripten_glStencilFuncSeparate,"Nd":_emscripten_glStencilMask,"Md":_emscripten_glStencilMaskSeparate,"Ld":_emscripten_glStencilOp,"Jd":_emscripten_glStencilOpSeparate,"Id":_emscripten_glTexImage2D,"Hd":_emscripten_glTexParameterf,"Gd":_emscripten_glTexParameterfv,"Fd":_emscripten_glTexParameteri,"Ed":_emscripten_glTexParameteriv,"Dd":_emscripten_glTexSubImage2D,"Cd":_emscripten_glUniform1f,"Bd":_emscripten_glUniform1fv,"Ad":_emscripten_glUniform1i,"yd":_emscripten_glUniform1iv,"xd":_emscripten_glUniform2f,"wd":_emscripten_glUniform2fv,"vd":_emscripten_glUniform2i,"ud":_emscripten_glUniform2iv,"td":_emscripten_glUniform3f,"sd":_emscripten_glUniform3fv,"rd":_emscripten_glUniform3i,"qd":_emscripten_glUniform3iv,"pd":_emscripten_glUniform4f,"nd":_emscripten_glUniform4fv,"md":_emscripten_glUniform4i,"ld":_emscripten_glUniform4iv,"kd":_emscripten_glUniformMatrix2fv,"jd":_emscripten_glUniformMatrix3fv,"id":_emscripten_glUniformMatrix4fv,"hd":_emscripten_glUseProgram,"gd":_emscripten_glValidateProgram,"fd":_emscripten_glVertexAttrib1f,"ed":_emscripten_glVertexAttrib1fv,"dd":_emscripten_glVertexAttrib2f,"cd":_emscripten_glVertexAttrib2fv,"bd":_emscripten_glVertexAttrib3f,"ad":_emscripten_glVertexAttrib3fv,"$c":_emscripten_glVertexAttrib4f,"_c":_emscripten_glVertexAttrib4fv,"Zc":_emscripten_glVertexAttribDivisorANGLE,"Yc":_emscripten_glVertexAttribPointer,"Xc":_emscripten_glViewport,"Wc":_emscripten_memcpy_big,"Uc":_emscripten_request_pointerlock,"Tc":_emscripten_resize_heap,"T":_emscripten_run_script,"Sc":_emscripten_sample_gamepad_data,"Rc":_emscripten_set_click_callback_on_thread,"Qc":_emscripten_set_fullscreenchange_callback_on_thread,"Pc":_emscripten_set_gamepadconnected_callback_on_thread,"Oc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Nc":_emscripten_set_keypress_callback_on_thread,"Mc":_emscripten_set_main_loop,"Kc":_emscripten_set_touchcancel_callback_on_thread,"Jc":_emscripten_set_touchend_callback_on_thread,"Ic":_emscripten_set_touchmove_callback_on_thread,"Hc":_emscripten_set_touchstart_callback_on_thread,"Gc":_exit,"Fc":_glActiveTexture,"S":_glAttachShader,"m":_glBindAttribLocation,"d":_glBindBuffer,"h":_glBindFramebuffer,"R":_glBindRenderbuffer,"j":_glBindTexture,"Cc":_glBlendFunc,"w":_glBufferData,"z":_glBufferSubData,"Bc":_glCheckFramebufferStatus,"Q":_glClear,"P":_glClearColor,"Ac":_glClearDepthf,"zc":_glCompileShader,"xc":_glCompressedTexImage2D,"wc":_glCreateProgram,"vc":_glCreateShader,"uc":_glCullFace,"v":_glDeleteBuffers,"tc":_glDeleteFramebuffers,"y":_glDeleteProgram,"sc":_glDeleteRenderbuffers,"u":_glDeleteShader,"t":_glDeleteTextures,"qc":_glDepthFunc,"O":_glDetachShader,"pc":_glDisable,"s":_glDisableVertexAttribArray,"oc":_glDrawArrays,"nc":_glDrawElements,"N":_glEnable,"l":_glEnableVertexAttribArray,"mc":_glFramebufferRenderbuffer,"M":_glFramebufferTexture2D,"kc":_glFrontFace,"r":_glGenBuffers,"jc":_glGenFramebuffers,"ic":_glGenRenderbuffers,"L":_glGenTextures,"hc":_glGetActiveUniform,"g":_glGetAttribLocation,"gc":_glGetFloatv,"fc":_glGetProgramInfoLog,"x":_glGetProgramiv,"dc":_glGetShaderInfoLog,"K":_glGetShaderiv,"n":_glGetString,"e":_glGetUniformLocation,"cc":_glLinkProgram,"bc":_glPixelStorei,"ac":_glReadPixels,"$b":_glRenderbufferStorage,"_b":_glShaderSource,"J":_glTexImage2D,"f":_glTexParameteri,"Yb":_glUniform1fv,"Xb":_glUniform1i,"I":_glUniform1iv,"Wb":_glUniform2fv,"Vb":_glUniform2iv,"Ub":_glUniform3fv,"Tb":_glUniform3iv,"Sb":_glUniform4f,"Rb":_glUniform4fv,"Pb":_glUniform4iv,"Ob":_glUniformMatrix4fv,"q":_glUseProgram,"k":_glVertexAttribPointer,"Nb":_glViewport,"Mb":_glfwCreateWindow,"Lb":_glfwDefaultWindowHints,"Kb":_glfwDestroyWindow,"Jb":_glfwGetCursorPos,"Ib":_glfwGetMouseButton,"p":_glfwGetTime,"Gb":_glfwInit,"Fb":_glfwMakeContextCurrent,"Eb":_glfwSetCharCallback,"Db":_glfwSetCursorEnterCallback,"Cb":_glfwSetCursorPosCallback,"Bb":_glfwSetDropCallback,"Ab":_glfwSetErrorCallback,"zb":_glfwSetKeyCallback,"yb":_glfwSetMouseButtonCallback,"wb":_glfwSetScrollCallback,"vb":_glfwSetWindowIconifyCallback,"ub":_glfwSetWindowShouldClose,"tb":_glfwSetWindowSizeCallback,"sb":_glfwSwapBuffers,"H":_glfwTerminate,"i":_glfwWindowHint,"G":_llvm_stackrestore,"F":_llvm_stacksave,"rb":_nanosleep,"pb":_time,"ob":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["De"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Me"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Ne"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Oe"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["He"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["Ie"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Je"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Ke"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Le"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shaders/shaders_julia_set.wasm b/examples/web/shaders/shaders_julia_set.wasm new file mode 100644 index 0000000..e8cddb5 Binary files /dev/null and b/examples/web/shaders/shaders_julia_set.wasm differ diff --git a/examples/web/shaders/shaders_model_shader.c b/examples/web/shaders/shaders_model_shader.c index 8e2d469..3f21205 100644 --- a/examples/web/shaders/shaders_model_shader.c +++ b/examples/web/shaders/shaders_model_shader.c @@ -22,18 +22,24 @@ #include #endif +#if defined(PLATFORM_DESKTOP) + #define GLSL_VERSION 330 +#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB + #define GLSL_VERSION 100 +#endif + //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world -Camera camera = {{ 3.0f, 3.0f, 3.0f }, { 0.0f, 1.5f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; +Camera camera = { 0 }; -Model dwarf; // OBJ model -Texture2D texture; // Model texture -Shader shader; // Postpro shader +Model model = { 0 }; // OBJ model +Texture2D texture = { 0 }; // Model texture +Shader shader = { 0 }; // Postpro shader Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position @@ -43,7 +49,7 @@ Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -52,13 +58,21 @@ int main(void) SetConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available) InitWindow(screenWidth, screenHeight, "raylib [shaders] example - model shader"); - dwarf = LoadModel("resources/model/dwarf.obj"); // Load OBJ model - texture = LoadTexture("resources/model/dwarf_diffuse.png"); // Load model texture - shader = LoadShader("resources/shaders/glsl100/base.vs", - "resources/shaders/glsl100/grayscale.fs"); // Load model shader + // Define the camera to look into our 3d world + camera.position = (Vector3){ 4.0f, 4.0f, 4.0f }; + camera.target = (Vector3){ 0.0f, 1.0f, -1.0f }; + camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; + camera.fovy = 45.0f; + camera.type = CAMERA_PERSPECTIVE; + model = LoadModel("resources/models/watermill.obj"); // Load OBJ model + texture = LoadTexture("resources/models/watermill_diffuse.png"); // Load model texture + + // Load shader for model + // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader + shader = LoadShader(0, FormatText("resources/shaders/glsl%i/grayscale.fs", GLSL_VERSION)); - dwarf.material.shader = shader; // Set shader effect to 3d model - dwarf.material.maps[MAP_DIFFUSE].texture = texture; // Bind texture to model + model.materials[0].shader = shader; // Set shader effect to 3d model + model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Bind texture to model // Setup orbital camera SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode @@ -68,7 +82,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -80,7 +94,7 @@ int main(void) //-------------------------------------------------------------------------------------- UnloadShader(shader); // Unload shader UnloadTexture(texture); // Unload texture - UnloadModel(dwarf); // Unload model + UnloadModel(model); // Unload model CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -104,15 +118,15 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - Begin3dMode(camera); + BeginMode3D(camera); - DrawModel(dwarf, position, 2.0f, WHITE); // Draw 3d model with texture + DrawModel(model, position, 0.2f, WHITE); // Draw 3d model with texture DrawGrid(10, 1.0f); // Draw a grid - End3dMode(); - - DrawText("(c) Dwarf 3D model by David Moreno", screenWidth - 200, screenHeight - 20, 10, GRAY); + EndMode3D(); + + DrawText("(c) Watermill 3D model by Alberto Cano", screenWidth - 210, screenHeight - 20, 10, GRAY); DrawFPS(10, 10); diff --git a/examples/web/shaders/shaders_model_shader.data b/examples/web/shaders/shaders_model_shader.data new file mode 100644 index 0000000..cb987c4 --- /dev/null +++ b/examples/web/shaders/shaders_model_shader.data @@ -0,0 +1,7680 @@ +# (c) 2018 Medieval Assets Pack by Alberto Cano +# Licensed as Creative Commons Attribution-NonCommercial 4.0 + +# +# object watermill +# + +v -13.1924 2.3021 -2.7990 +v -6.7437 5.5026 -2.5075 +v -6.9255 5.7207 -2.5075 +v -13.3742 2.5202 -2.7990 +v -13.1924 2.3021 -9.7624 +v -13.3742 2.5202 -9.7624 +v -6.9255 5.7207 -10.0539 +v -6.7437 5.5026 -10.0539 +v -12.6656 2.5635 -3.5030 +v -6.7437 5.5026 -3.5030 +v -6.9255 5.7207 -3.5030 +v -6.9255 5.7207 -9.0585 +v -12.6656 2.5635 -9.0585 +v -6.7437 5.5026 -9.0585 +v 10.7261 -0.0000 -2.3791 +v 10.7261 8.6527 -2.3791 +v -6.7437 8.6527 -2.3791 +v -6.7437 -0.0000 -2.3791 +v 10.7261 0.0000 -6.2807 +v 10.7261 13.1014 -6.2807 +v -6.7437 -0.0000 -10.1824 +v -6.7437 8.6527 -10.1824 +v 10.7261 8.6527 -10.1824 +v 10.7261 0.0000 -10.1824 +v 6.6390 8.4318 -1.8382 +v 7.3490 12.3719 -6.2807 +v 1.9912 11.9781 -6.2807 +v 1.9912 8.4318 -1.8381 +v 1.9912 8.0019 -1.8381 +v 6.6390 8.0019 -1.8382 +v 12.3149 8.4318 -11.0430 +v 12.5793 13.9616 -6.2807 +v 12.5793 13.3516 -6.2807 +v 12.3149 8.0019 -11.0430 +v 12.3150 8.4318 -1.5184 +v 12.3150 8.0019 -1.5184 +v 6.6390 8.4318 -10.7233 +v 1.9912 8.4318 -10.7233 +v 6.6390 8.0019 -10.7233 +v 1.9912 8.0019 -10.7233 +v -2.6566 8.4318 -1.8381 +v -3.3666 12.3719 -6.2807 +v -2.6566 8.0019 -1.8381 +v -8.5969 13.3516 -6.2807 +v -8.5969 13.9616 -6.2807 +v -8.3325 8.4318 -11.0430 +v -8.3325 8.0019 -11.0430 +v -8.3325 8.0019 -1.5184 +v -8.3325 8.4318 -1.5184 +v -2.6566 8.4318 -10.7233 +v -2.6566 8.0019 -10.7233 +v -3.3666 11.8666 -6.2807 +v 1.9912 11.4750 -6.2807 +v 7.3490 11.8666 -6.2807 +v -6.7437 -0.0000 -6.2807 +v -6.7437 13.1141 -6.2807 +v 8.9974 12.5399 -7.0188 +v 10.2888 12.8128 -7.0188 +v 10.3359 12.5903 -7.0188 +v 9.0444 12.3173 -7.0188 +v 8.9004 12.9984 -6.4117 +v 10.1919 13.2713 -6.4117 +v 8.9475 12.7759 -6.4117 +v 10.1888 13.2863 -6.2807 +v 8.8973 13.0134 -6.2807 +v 8.9443 12.7909 -6.2807 +v 10.3359 12.5903 -5.5426 +v 10.2888 12.8128 -5.5426 +v 8.9974 12.5399 -5.5426 +v 9.0444 12.3173 -5.5426 +v 10.1919 13.2713 -6.1497 +v 8.9004 12.9984 -6.1497 +v 8.9475 12.7759 -6.1497 +v 7.8352 12.2633 -7.0188 +v 9.1355 12.4905 -7.0188 +v 9.1747 12.2665 -7.0188 +v 7.8743 12.0393 -7.0188 +v 7.7545 12.7250 -6.4117 +v 9.0548 12.9522 -6.4117 +v 7.7937 12.5010 -6.4117 +v 9.0522 12.9673 -6.2807 +v 7.7519 12.7401 -6.2807 +v 7.7910 12.5161 -6.2807 +v 9.1747 12.2665 -5.5426 +v 9.1355 12.4905 -5.5426 +v 7.8352 12.2633 -5.5426 +v 7.8743 12.0393 -5.5426 +v 9.0548 12.9522 -6.1497 +v 7.7545 12.7250 -6.1497 +v 7.7937 12.5010 -6.1497 +v 6.6801 12.0216 -7.0188 +v 7.9904 12.1810 -7.0188 +v 8.0179 11.9552 -7.0188 +v 6.7075 11.7958 -7.0188 +v 6.6235 12.4869 -6.4117 +v 7.9338 12.6462 -6.4117 +v 6.6509 12.2611 -6.4117 +v 7.9320 12.6614 -6.2807 +v 6.6216 12.5021 -6.2807 +v 6.6491 12.2763 -6.2807 +v 8.0179 11.9552 -5.5426 +v 7.9904 12.1810 -5.5426 +v 6.6801 12.0216 -5.5426 +v 6.7075 11.7958 -5.5426 +v 7.9338 12.6462 -6.1497 +v 6.6235 12.4869 -6.1497 +v 6.6509 12.2611 -6.1497 +v 5.5013 11.7586 -7.0188 +v 6.8116 11.9180 -7.0188 +v 6.8391 11.6922 -7.0188 +v 5.5287 11.5329 -7.0188 +v 5.4447 12.2239 -6.4117 +v 6.7551 12.3832 -6.4117 +v 5.4722 11.9981 -6.4117 +v 6.7532 12.3984 -6.2807 +v 5.4429 12.2391 -6.2807 +v 5.4703 12.0133 -6.2807 +v 6.8391 11.6922 -5.5426 +v 6.8116 11.9180 -5.5426 +v 5.5013 11.7586 -5.5426 +v 5.5287 11.5329 -5.5426 +v 6.7551 12.3832 -6.1497 +v 5.4447 12.2239 -6.1497 +v 5.4722 11.9981 -6.1497 +v 4.2453 11.6604 -7.0188 +v 5.5556 11.8198 -7.0188 +v 5.5831 11.5940 -7.0188 +v 4.2727 11.4346 -7.0188 +v 4.1887 12.1257 -6.4117 +v 5.4991 12.2850 -6.4117 +v 4.2161 11.8999 -6.4117 +v 5.4972 12.3002 -6.2807 +v 4.1868 12.1409 -6.2807 +v 4.2143 11.9151 -6.2807 +v 5.5831 11.5940 -5.5426 +v 5.5556 11.8198 -5.5426 +v 4.2453 11.6604 -5.5426 +v 4.2727 11.4346 -5.5426 +v 5.4991 12.2850 -6.1497 +v 4.1887 12.1257 -6.1497 +v 4.2161 11.8999 -6.1497 +v 3.3182 11.6102 -7.0188 +v 4.6363 11.6808 -7.0188 +v 4.6485 11.4537 -7.0188 +v 3.3304 11.3830 -7.0188 +v 3.2931 12.0782 -6.4117 +v 4.6113 12.1488 -6.4117 +v 3.3053 11.8511 -6.4117 +v 4.6104 12.1641 -6.2807 +v 3.2923 12.0935 -6.2807 +v 3.3045 11.8664 -6.2807 +v 4.6485 11.4537 -5.5426 +v 4.6363 11.6808 -5.5426 +v 3.3182 11.6102 -5.5426 +v 3.3304 11.3830 -5.5426 +v 4.6113 12.1488 -6.1497 +v 3.2931 12.0782 -6.1497 +v 3.3053 11.8511 -6.1497 +v -4.9956 12.5685 -7.0188 +v -3.6852 12.4092 -7.0188 +v -3.7127 12.1834 -7.0188 +v -5.0230 12.3427 -7.0188 +v -3.6561 12.6486 -6.4117 +v -3.6286 12.8744 -6.4117 +v -4.9390 13.0337 -6.4117 +v -4.9664 12.8080 -6.4117 +v -3.6268 12.8896 -6.2807 +v -3.6542 12.6638 -6.2807 +v -4.9371 13.0489 -6.2807 +v -4.9646 12.8232 -6.2807 +v -3.7127 12.1834 -5.5426 +v -3.6852 12.4092 -5.5426 +v -4.9956 12.5685 -5.5426 +v -5.0230 12.3427 -5.5426 +v -3.6561 12.6486 -6.1497 +v -3.6286 12.8744 -6.1497 +v -4.9390 13.0337 -6.1497 +v -4.9664 12.8080 -6.1497 +v -3.8354 12.0721 -7.0188 +v -3.8277 12.2994 -7.0188 +v -2.5085 12.2548 -7.0188 +v -2.5161 12.0275 -7.0188 +v -2.4926 12.7232 -6.4117 +v -3.8119 12.7678 -6.4117 +v -2.5003 12.4959 -6.4117 +v -3.8114 12.7831 -6.2807 +v -2.4921 12.7386 -6.2807 +v -2.4998 12.5112 -6.2807 +v -2.5085 12.2548 -5.5426 +v -3.8277 12.2994 -5.5426 +v -3.8354 12.0721 -5.5426 +v -2.5161 12.0275 -5.5426 +v -2.4926 12.7232 -6.1497 +v -3.8119 12.7678 -6.1497 +v -2.5003 12.4959 -6.1497 +v -2.5604 11.9055 -7.0188 +v -2.5410 12.1322 -7.0188 +v -1.2258 12.0191 -7.0188 +v -1.2452 11.7925 -7.0188 +v -1.1857 12.4861 -6.4117 +v -2.5008 12.5991 -6.4117 +v -1.2051 12.2595 -6.4117 +v -2.4995 12.6144 -6.2807 +v -1.1844 12.5014 -6.2807 +v -1.2038 12.2748 -6.2807 +v -1.2258 12.0191 -5.5426 +v -2.5410 12.1322 -5.5426 +v -2.5604 11.9055 -5.5426 +v -1.2452 11.7925 -5.5426 +v -1.1857 12.4861 -6.1497 +v -2.5008 12.5991 -6.1497 +v -1.2051 12.2595 -6.1497 +v -1.4316 11.6943 -7.0188 +v -1.4041 11.9201 -7.0188 +v -0.0938 11.7608 -7.0188 +v -0.1212 11.5350 -7.0188 +v -0.0372 12.2260 -6.4117 +v -1.3476 12.3854 -6.4117 +v -0.0647 12.0003 -6.4117 +v -1.3457 12.4006 -6.2807 +v -0.0354 12.2412 -6.2807 +v -0.0628 12.0155 -6.2807 +v -0.0938 11.7608 -5.5426 +v -1.4041 11.9201 -5.5426 +v -1.4316 11.6943 -5.5426 +v -0.1212 11.5350 -5.5426 +v -0.0372 12.2260 -6.1497 +v -1.3476 12.3854 -6.1497 +v -0.0647 12.0003 -6.1497 +v -0.2528 11.4404 -7.0188 +v -0.2254 11.6662 -7.0188 +v 1.0850 11.5068 -7.0188 +v 1.0575 11.2811 -7.0188 +v 1.1416 11.9721 -6.4117 +v -0.1688 12.1314 -6.4117 +v 1.1141 11.7463 -6.4117 +v -0.1669 12.1466 -6.2807 +v 1.1434 11.9873 -6.2807 +v 1.1159 11.7615 -6.2807 +v 1.0850 11.5068 -5.5426 +v -0.2254 11.6662 -5.5426 +v -0.2528 11.4404 -5.5426 +v 1.0575 11.2811 -5.5426 +v 1.1416 11.9721 -6.1497 +v -0.1688 12.1314 -6.1497 +v 1.1141 11.7463 -6.1497 +v 1.0355 11.3300 -7.0188 +v 1.0432 11.5573 -7.0188 +v 2.3624 11.5128 -7.0188 +v 2.3548 11.2855 -7.0188 +v 2.3783 11.9812 -6.4117 +v 1.0590 12.0257 -6.4117 +v 2.3706 11.7539 -6.4117 +v 1.0595 12.0410 -6.2807 +v 2.3788 11.9965 -6.2807 +v 2.3711 11.7692 -6.2807 +v 2.3624 11.5128 -5.5426 +v 1.0432 11.5573 -5.5426 +v 1.0355 11.3300 -5.5426 +v 2.3548 11.2855 -5.5426 +v 2.3783 11.9812 -6.1497 +v 1.0590 12.0257 -6.1497 +v 2.3706 11.7539 -6.1497 +v 2.1005 11.2570 -7.0188 +v 2.0730 11.4827 -7.0188 +v 3.3834 11.6421 -7.0188 +v 3.4108 11.4163 -7.0188 +v 3.3268 12.1074 -6.4117 +v 2.0165 11.9480 -6.4117 +v 3.3543 11.8816 -6.4117 +v 2.0146 11.9632 -6.2807 +v 3.3250 12.1226 -6.2807 +v 3.3524 11.8968 -6.2807 +v 3.3834 11.6421 -5.5426 +v 2.0730 11.4827 -5.5426 +v 2.1005 11.2570 -5.5426 +v 3.4108 11.4163 -5.5426 +v 3.3268 12.1074 -6.1497 +v 2.0165 11.9480 -6.1497 +v 3.3543 11.8816 -6.1497 +v -6.2966 12.8862 -7.0188 +v -4.9862 12.7268 -7.0188 +v -5.0137 12.5011 -7.0188 +v -6.3240 12.6604 -7.0188 +v -4.9571 12.9663 -6.4117 +v -4.9296 13.1921 -6.4117 +v -6.2400 13.3514 -6.4117 +v -6.2674 13.1257 -6.4117 +v -4.9278 13.2073 -6.2807 +v -4.9552 12.9815 -6.2807 +v -6.2381 13.3666 -6.2807 +v -6.2656 13.1409 -6.2807 +v -5.0137 12.5011 -5.5426 +v -4.9862 12.7268 -5.5426 +v -6.2966 12.8862 -5.5426 +v -6.3240 12.6604 -5.5426 +v -4.9571 12.9663 -6.1497 +v -4.9296 13.1921 -6.1497 +v -6.2400 13.3514 -6.1497 +v -6.2674 13.1257 -6.1497 +v -8.5583 13.8088 -7.0188 +v -7.3338 13.3157 -7.0188 +v -7.4188 13.1048 -7.0188 +v -8.6432 13.5978 -7.0188 +v -7.2437 13.5395 -6.4117 +v -7.1587 13.7505 -6.4117 +v -8.3832 14.2435 -6.4117 +v -8.4682 14.0326 -6.4117 +v -7.1530 13.7647 -6.2807 +v -7.2380 13.5537 -6.2807 +v -8.3775 14.2577 -6.2807 +v -8.4625 14.0468 -6.2807 +v -7.4188 13.1048 -5.5426 +v -7.3338 13.3157 -5.5426 +v -8.5583 13.8088 -5.5426 +v -8.6432 13.5978 -5.5426 +v -7.2437 13.5395 -6.1497 +v -7.1587 13.7505 -6.1497 +v -8.3832 14.2435 -6.1497 +v -8.4682 14.0326 -6.1497 +v -7.4860 13.1990 -7.0188 +v -6.1757 13.0397 -7.0188 +v -6.2031 12.8139 -7.0188 +v -7.5135 12.9732 -7.0188 +v -6.1465 13.2792 -6.4117 +v -6.1191 13.5049 -6.4117 +v -7.4294 13.6643 -6.4117 +v -7.4569 13.4385 -6.4117 +v -6.1172 13.5201 -6.2807 +v -6.1447 13.2943 -6.2807 +v -7.4276 13.6795 -6.2807 +v -7.4550 13.4537 -6.2807 +v -6.2031 12.8139 -5.5426 +v -6.1757 13.0397 -5.5426 +v -7.4860 13.1990 -5.5426 +v -7.5135 12.9732 -5.5426 +v -6.1465 13.2792 -6.1497 +v -6.1191 13.5049 -6.1497 +v -7.4294 13.6643 -6.1497 +v -7.4569 13.4385 -6.1497 +v 11.5790 13.1102 -7.0188 +v 11.5127 13.3278 -7.0188 +v 12.7755 13.7122 -7.0188 +v 12.8418 13.4947 -7.0188 +v 11.4425 13.5586 -6.4117 +v 11.3762 13.7761 -6.4117 +v 12.6390 14.1606 -6.4117 +v 12.7053 13.9430 -6.4117 +v 11.4380 13.5732 -6.2807 +v 11.3718 13.7908 -6.2807 +v 12.6345 14.1752 -6.2807 +v 12.7008 13.9577 -6.2807 +v 12.7755 13.7122 -5.5426 +v 11.5127 13.3278 -5.5426 +v 11.5790 13.1102 -5.5426 +v 12.8418 13.4947 -5.5426 +v 11.3762 13.7761 -6.1497 +v 11.4425 13.5586 -6.1497 +v 12.6390 14.1606 -6.1497 +v 12.7053 13.9430 -6.1497 +v 10.2689 12.9589 -7.0188 +v 11.5604 13.2318 -7.0188 +v 11.6074 13.0093 -7.0188 +v 10.3159 12.7364 -7.0188 +v 10.1720 13.4174 -6.4117 +v 11.4635 13.6904 -6.4117 +v 10.2190 13.1949 -6.4117 +v 11.4603 13.7054 -6.2807 +v 10.1688 13.4324 -6.2807 +v 10.2158 13.2099 -6.2807 +v 11.6074 13.0093 -5.5426 +v 11.5604 13.2318 -5.5426 +v 10.2689 12.9589 -5.5426 +v 10.3159 12.7364 -5.5426 +v 11.4635 13.6904 -6.1497 +v 10.1720 13.4174 -6.1497 +v 10.2190 13.1949 -6.1497 +v 1.8981 10.8573 -2.0736 +v -0.8458 8.7261 -2.0736 +v -0.8458 8.7261 -0.1199 +v 1.8981 11.3885 0.1367 +v 4.6419 8.7261 -0.1199 +v 4.6419 8.7261 -2.0736 +v 1.8981 11.7860 2.3471 +v 1.8981 12.0145 2.3471 +v -0.8458 8.7261 1.8338 +v -0.8458 8.4976 1.8338 +v 4.6419 8.4976 1.8338 +v 4.6419 8.7261 1.8338 +v 4.6419 8.4976 -2.0736 +v 4.6419 8.4976 -0.1199 +v 1.8981 11.7860 -6.4944 +v 1.8981 12.0145 -6.4944 +v 4.6419 8.7261 -5.9811 +v 4.6419 8.4976 -5.9811 +v -0.8458 8.4976 -5.9811 +v -0.8458 8.7261 -5.9811 +v -0.8458 8.4976 -2.0736 +v -0.8458 8.7261 -4.0274 +v -0.8458 8.4976 -4.0274 +v 1.8981 10.6287 -2.0736 +v 1.8981 11.1600 0.1367 +v 1.8981 11.1600 -4.2840 +v 1.8981 11.3885 -4.2840 +v 4.6419 8.7261 -4.0274 +v 4.6419 8.4976 -4.0274 +v -0.8458 8.4976 -0.1199 +v 2.6362 10.8058 -1.0937 +v 2.6362 11.0788 0.1977 +v 2.6362 10.8562 0.2448 +v 2.6362 10.5833 -1.0467 +v 2.0290 11.2644 -1.1907 +v 2.0291 11.5373 0.1008 +v 2.0290 11.0419 -1.1436 +v 1.8981 11.5523 0.0977 +v 1.8981 11.2794 -1.1938 +v 1.8981 11.0568 -1.1468 +v 1.1600 10.8562 0.2448 +v 1.1600 11.0788 0.1977 +v 1.1600 10.8058 -1.0937 +v 1.1600 10.5833 -1.0467 +v 1.7671 11.5373 0.1008 +v 1.7671 11.2644 -1.1907 +v 1.7671 11.0418 -1.1436 +v 2.6362 10.5205 -1.9756 +v 2.6362 10.7478 -0.6753 +v 2.6362 10.5237 -0.6362 +v 2.6362 10.2965 -1.9365 +v 2.0290 10.9822 -2.0563 +v 2.0290 11.2094 -0.7560 +v 2.0290 10.7582 -2.0172 +v 1.8981 11.2245 -0.7586 +v 1.8981 10.9973 -2.0589 +v 1.8981 10.7733 -2.0198 +v 1.1600 10.5237 -0.6362 +v 1.1600 10.7478 -0.6753 +v 1.1600 10.5205 -1.9756 +v 1.1600 10.2965 -1.9365 +v 1.7671 11.2094 -0.7560 +v 1.7671 10.9822 -2.0563 +v 1.7671 10.7582 -2.0172 +v 1.1982 10.4359 -2.0215 +v 1.0834 10.7076 -3.3081 +v 1.0844 10.4851 -3.3552 +v 1.1993 10.2134 -2.0685 +v 1.8009 10.9081 -1.9756 +v 1.6860 11.1798 -3.2622 +v 1.8019 10.6856 -2.0226 +v 1.8164 11.1977 -3.2701 +v 1.9313 10.9261 -1.9834 +v 1.9323 10.7036 -2.0305 +v 2.5550 10.5184 -3.4794 +v 2.5540 10.7409 -3.4324 +v 2.6688 10.4692 -2.1457 +v 2.6699 10.2467 -2.1928 +v 1.9469 11.1857 -3.2843 +v 2.0618 10.9141 -1.9976 +v 2.0629 10.6915 -2.0447 +v 1.1600 10.7338 -3.2444 +v 1.1600 10.8931 -4.5548 +v 1.1600 10.6673 -4.5823 +v 1.1600 10.5080 -3.2719 +v 1.7671 11.1990 -3.1879 +v 1.7671 11.3584 -4.4982 +v 1.7671 10.9733 -3.2153 +v 1.8981 11.3736 -4.4964 +v 1.8981 11.2142 -3.1860 +v 1.8981 10.9885 -3.2135 +v 2.6362 10.6673 -4.5823 +v 2.6362 10.8931 -4.5548 +v 2.6362 10.7338 -3.2445 +v 2.6362 10.5080 -3.2719 +v 2.0290 11.3584 -4.4982 +v 2.0290 11.1990 -3.1879 +v 2.0290 10.9733 -3.2153 +v 2.6362 11.2196 1.1507 +v 2.6362 11.4422 1.1037 +v 2.6362 11.7151 2.3952 +v 2.6362 11.4926 2.4422 +v 2.0290 11.6782 1.0538 +v 2.0290 11.9007 1.0068 +v 2.0290 12.1736 2.2983 +v 2.0290 11.9511 2.3453 +v 1.8981 11.6932 1.0507 +v 1.8981 11.9157 1.0036 +v 1.8981 12.1886 2.2951 +v 1.8981 11.9661 2.3421 +v 1.1600 11.7151 2.3952 +v 1.1600 11.4422 1.1037 +v 1.1600 11.2196 1.1507 +v 1.1600 11.4926 2.4422 +v 1.7671 11.9007 1.0068 +v 1.7671 11.6782 1.0538 +v 1.7671 12.1736 2.2983 +v 1.7671 11.9511 2.3453 +v 2.6362 11.1887 0.1778 +v 2.6362 11.4617 1.4693 +v 2.6362 11.2391 1.5163 +v 2.6362 10.9662 0.2248 +v 2.0291 11.6473 0.0809 +v 2.0291 11.9202 1.3724 +v 2.0291 11.4248 0.1279 +v 1.8981 11.9352 1.3692 +v 1.8981 11.6623 0.0777 +v 1.8981 11.4397 0.1247 +v 1.1600 11.2391 1.5163 +v 1.1600 11.4617 1.4693 +v 1.1600 11.1887 0.1778 +v 1.1600 10.9662 0.2248 +v 1.7671 11.9202 1.3724 +v 1.7671 11.6473 0.0809 +v 1.7671 11.4248 0.1279 +v 1.1600 11.0324 -4.4912 +v 1.1599 11.1918 -5.8016 +v 1.1599 10.9660 -5.8291 +v 1.1600 10.8067 -4.5187 +v 1.7671 11.4977 -4.4347 +v 1.7671 11.6570 -5.7450 +v 1.7671 11.2719 -4.4621 +v 1.8981 11.6722 -5.7432 +v 1.8981 11.5129 -4.4328 +v 1.8981 11.2871 -4.4603 +v 2.6362 10.9660 -5.8291 +v 2.6362 11.1918 -5.8016 +v 2.6362 11.0324 -4.4913 +v 2.6362 10.8067 -4.5187 +v 2.0290 11.6570 -5.7450 +v 2.0290 11.4977 -4.4347 +v 2.0290 11.2719 -4.4621 +v 1.6385 11.2224 1.2384 +v 2.1576 11.2224 1.2384 +v 2.1576 10.7301 1.2384 +v 1.6385 10.7301 1.2384 +v 2.1576 11.1032 5.0371 +v 2.1576 11.5955 5.0371 +v 1.6385 11.5955 5.0371 +v 1.6385 11.1032 5.0371 +v 2.1576 10.7372 3.3072 +v 1.6385 10.7372 3.3072 +v 2.1576 11.2294 3.3072 +v 1.6385 11.2294 3.3072 +v -6.9438 6.4623 -6.2807 +v -6.9438 8.0396 -6.2807 +v -6.9438 7.6647 -6.7971 +v -6.9438 6.4930 -6.7971 +v -7.0316 6.3524 -7.2009 +v -7.0316 6.5211 -7.2009 +v -6.9131 6.5211 -7.2009 +v -6.9131 6.3524 -7.2009 +v -7.0316 7.7709 -7.0675 +v -7.0316 8.3162 -6.2807 +v -6.9131 8.3162 -6.2807 +v -6.9131 7.7709 -7.0675 +v -7.0316 6.5211 -5.3605 +v -7.0316 6.3524 -5.3605 +v -6.9131 6.3524 -5.3605 +v -6.9131 6.5211 -5.3605 +v -7.0316 6.3524 -5.4939 +v -7.0316 6.2936 -6.2807 +v -6.9131 6.2936 -6.2807 +v -6.9131 6.3524 -5.4939 +v -7.1616 6.3524 -7.0675 +v -7.1616 6.4929 -6.7971 +v -7.1616 6.5211 -7.0675 +v -7.0316 7.6647 -6.7971 +v -7.0316 8.0396 -6.2807 +v -7.1616 6.5211 -5.4939 +v -7.1616 6.5039 -5.7644 +v -7.1616 6.3524 -5.4939 +v -7.1616 6.4623 -6.2807 +v -7.1616 6.2936 -6.2807 +v -6.9438 6.5039 -5.7644 +v -6.9438 7.6647 -5.7644 +v -7.0316 7.7709 -5.4939 +v -6.9131 7.7709 -5.4939 +v -7.0316 6.3524 -7.0675 +v -6.9131 6.3524 -7.0675 +v -7.0316 7.6647 -5.7644 +v -7.0316 6.4930 -6.7971 +v -7.0316 6.5039 -5.7644 +v -7.0316 6.4623 -6.2807 +v -7.0316 6.5211 -5.4939 +v -6.9131 6.5211 -5.4939 +v -7.0316 6.5211 -7.0675 +v -6.9131 6.5211 -7.0675 +v -7.1616 6.3524 -7.2009 +v -7.1616 6.5211 -7.2009 +v -7.1616 6.5211 -5.3605 +v -7.1616 6.3524 -5.3605 +v -5.7067 3.0829 -13.9368 +v -0.3334 3.0829 -13.9368 +v -0.3334 3.7395 -10.2128 +v -5.7067 3.7395 -10.2128 +v -0.3334 3.9558 -10.2510 +v -0.3334 3.2991 -13.9749 +v -5.7067 3.2991 -13.9749 +v -5.7067 3.9558 -10.2510 +v -6.7437 -0.0000 -2.8264 +v -6.7437 5.5026 -2.8264 +v -12.6656 2.5635 -2.8264 +v -12.6656 -0.0000 -2.8264 +v -6.7437 -0.0000 -9.5914 +v -12.6656 -0.0000 -9.5914 +v -12.6656 2.5635 -9.5914 +v -6.7437 5.5026 -9.5914 +v 1.8981 6.1673 -1.1123 +v 1.8981 9.7710 -1.1123 +v -0.0020 8.2690 -1.1123 +v -0.0020 6.1673 -1.1123 +v 4.3370 6.1014 -5.3857 +v 4.3370 8.9071 -5.3857 +v 4.3370 8.9071 1.2384 +v 4.3370 6.1014 1.2384 +v -0.5409 6.1014 1.2384 +v -0.5409 8.9071 1.2384 +v -0.5409 8.9071 -5.3857 +v -0.5409 6.1014 -5.3857 +v 3.7981 6.1673 -1.1123 +v 3.7981 8.2690 -1.1123 +v 3.7981 8.2690 1.2384 +v 3.7981 6.1673 1.2384 +v 1.8981 11.5136 1.2384 +v 1.8981 9.7710 1.2384 +v -0.0020 8.2690 1.2384 +v -0.0020 6.1673 1.2384 +v 1.8981 6.1673 1.2384 +v -3.1730 6.7688 -10.1848 +v -2.6566 7.1437 -10.1848 +v -2.6566 5.5664 -10.1848 +v -3.1730 5.5971 -10.1848 +v -3.5768 5.6252 -10.1540 +v -3.5768 5.6252 -10.2725 +v -3.5768 5.4565 -10.2725 +v -3.5768 5.4565 -10.1540 +v -2.6566 7.4203 -10.1540 +v -2.6566 7.4203 -10.2725 +v -3.4434 6.8751 -10.2725 +v -3.4434 6.8751 -10.1540 +v -1.7364 5.4565 -10.1540 +v -1.7364 5.4565 -10.2725 +v -1.7364 5.6252 -10.2725 +v -1.7364 5.6252 -10.1540 +v -2.6566 5.3977 -10.1540 +v -2.6566 5.3977 -10.2725 +v -1.8698 5.4565 -10.2725 +v -1.8698 5.4565 -10.1540 +v -3.4434 5.4565 -10.4025 +v -3.4434 5.6252 -10.4025 +v -3.1730 5.5971 -10.4025 +v -2.6566 7.1437 -10.2725 +v -3.1730 6.7688 -10.2725 +v -1.8698 5.6252 -10.4025 +v -1.8698 5.4565 -10.4025 +v -2.1403 5.6080 -10.4025 +v -2.6566 5.3977 -10.4025 +v -2.6566 5.5664 -10.4025 +v -2.1403 6.7688 -10.1848 +v -2.1403 5.6080 -10.1848 +v -1.8698 6.8751 -10.1540 +v -1.8698 6.8751 -10.2725 +v -3.4434 5.4565 -10.1540 +v -3.4434 5.4565 -10.2725 +v -2.1403 6.7688 -10.2725 +v -3.1730 5.5971 -10.2725 +v -2.1403 5.6080 -10.2725 +v -2.6566 5.5664 -10.2725 +v -1.8698 5.6252 -10.2725 +v -1.8698 5.6252 -10.1540 +v -3.4434 5.6252 -10.2725 +v -3.4434 5.6252 -10.1540 +v -3.5768 5.6252 -10.4025 +v -3.5768 5.4565 -10.4025 +v -1.7364 5.4565 -10.4025 +v -1.7364 5.6252 -10.4025 +v 10.7400 7.6647 -6.7971 +v 10.7400 8.0396 -6.2807 +v 10.7400 6.4623 -6.2807 +v 10.7400 6.4930 -6.7971 +v 10.7092 6.5211 -7.2009 +v 10.8277 6.5211 -7.2009 +v 10.8277 6.3524 -7.2009 +v 10.7092 6.3524 -7.2009 +v 10.7092 8.3162 -6.2807 +v 10.8277 8.3162 -6.2807 +v 10.8277 7.7710 -7.0676 +v 10.7092 7.7710 -7.0676 +v 10.7092 6.3524 -5.3605 +v 10.8277 6.3524 -5.3605 +v 10.8277 6.5211 -5.3605 +v 10.7092 6.5211 -5.3605 +v 10.7092 6.2936 -6.2807 +v 10.8277 6.2936 -6.2807 +v 10.8277 6.3524 -5.4939 +v 10.7092 6.3524 -5.4939 +v 10.9577 6.3524 -7.0676 +v 10.9577 6.5211 -7.0676 +v 10.9577 6.4930 -6.7971 +v 10.8277 8.0396 -6.2807 +v 10.8277 7.6647 -6.7971 +v 10.9577 6.5211 -5.4939 +v 10.9577 6.3524 -5.4939 +v 10.9577 6.5039 -5.7644 +v 10.9577 6.2936 -6.2807 +v 10.9577 6.4623 -6.2807 +v 10.7400 7.6647 -5.7644 +v 10.7400 6.5039 -5.7644 +v 10.7092 7.7710 -5.4939 +v 10.8277 7.7710 -5.4939 +v 10.7092 6.3524 -7.0676 +v 10.8277 6.3524 -7.0676 +v 10.8277 7.6647 -5.7644 +v 10.8277 6.4930 -6.7971 +v 10.8277 6.5039 -5.7644 +v 10.8277 6.4623 -6.2807 +v 10.8277 6.5211 -5.4939 +v 10.7092 6.5211 -5.4939 +v 10.8277 6.5211 -7.0676 +v 10.7092 6.5211 -7.0676 +v 10.9577 6.5211 -7.2009 +v 10.9577 6.3524 -7.2009 +v 10.9577 6.3524 -5.3605 +v 10.9577 6.5211 -5.3605 +v 4.7721 3.0631 -10.1932 +v 4.7721 3.0631 -10.4264 +v 4.5257 3.0631 -10.4264 +v 4.5257 3.0631 -10.1932 +v 4.7721 -0.0000 -10.4264 +v 4.7721 -0.0000 -10.1932 +v 4.5257 -0.0000 -10.4264 +v 4.5257 -0.0000 -10.1932 +v 4.1057 2.8480 -10.5415 +v 6.5122 3.0489 -10.5415 +v 6.5122 3.0489 -10.1932 +v 4.1057 2.8480 -10.1932 +v 4.1057 3.1343 -10.5415 +v 6.5122 3.3352 -10.5415 +v 4.1057 3.1343 -10.1932 +v 6.5122 3.3352 -10.1932 +v 8.9187 3.1343 -10.1932 +v 8.9187 2.8480 -10.1932 +v 8.9187 2.8480 -10.5415 +v 8.9187 3.1343 -10.5415 +v 8.4489 3.0631 -10.1932 +v 8.4489 3.0631 -10.4264 +v 8.2024 3.0631 -10.4264 +v 8.2024 3.0631 -10.1932 +v 8.4489 -0.0000 -10.4264 +v 8.4489 -0.0000 -10.1932 +v 8.2024 -0.0000 -10.4264 +v 8.2024 -0.0000 -10.1932 +v 6.1227 6.7688 -10.1848 +v 6.6390 7.1438 -10.1848 +v 6.6390 5.5664 -10.1848 +v 6.1227 5.5971 -10.1848 +v 5.7188 5.6252 -10.1540 +v 5.7188 5.6252 -10.2725 +v 5.7188 5.4565 -10.2725 +v 5.7188 5.4565 -10.1540 +v 6.6390 7.4203 -10.1540 +v 6.6390 7.4203 -10.2725 +v 5.8522 6.8751 -10.2725 +v 5.8522 6.8751 -10.1540 +v 7.5592 5.4565 -10.1540 +v 7.5592 5.4565 -10.2725 +v 7.5592 5.6252 -10.2725 +v 7.5592 5.6252 -10.1540 +v 6.6390 5.3977 -10.1540 +v 6.6390 5.3977 -10.2725 +v 7.4258 5.4565 -10.2725 +v 7.4258 5.4565 -10.1540 +v 5.8522 5.4565 -10.4026 +v 5.8522 5.6252 -10.4026 +v 6.1227 5.5971 -10.4026 +v 6.6390 7.1438 -10.2725 +v 6.1227 6.7688 -10.2725 +v 7.4258 5.6252 -10.4026 +v 7.4258 5.4565 -10.4026 +v 7.1553 5.6080 -10.4026 +v 6.6390 5.3977 -10.4026 +v 6.6390 5.5664 -10.4026 +v 7.1553 6.7688 -10.1848 +v 7.1553 5.6080 -10.1848 +v 7.4258 6.8751 -10.1540 +v 7.4258 6.8751 -10.2725 +v 5.8522 5.4565 -10.1540 +v 5.8522 5.4565 -10.2725 +v 7.1553 6.7688 -10.2725 +v 6.1227 5.5971 -10.2725 +v 7.1553 5.6080 -10.2725 +v 6.6390 5.5664 -10.2725 +v 7.4258 5.6252 -10.2725 +v 7.4258 5.6252 -10.1540 +v 5.8522 5.6252 -10.2725 +v 5.8522 5.6252 -10.1540 +v 5.7188 5.6252 -10.4025 +v 5.7188 5.4565 -10.4025 +v 7.5592 5.4565 -10.4026 +v 7.5592 5.6252 -10.4026 +v -0.1257 8.5720 1.3493 +v -0.1257 8.1054 1.3493 +v 1.0004 8.9625 1.3394 +v 0.8976 9.3296 1.3394 +v -0.1257 8.1054 0.7798 +v 1.0004 8.9625 0.8269 +v -0.1257 8.5720 0.7798 +v 0.8976 9.3296 0.8269 +v 1.8981 9.3882 1.3493 +v 1.8981 10.1187 1.3493 +v 1.8981 9.3882 0.7798 +v 1.8981 10.1187 0.7798 +v 3.8743 8.5720 1.3493 +v 2.8985 9.3296 1.3393 +v 2.7958 8.9625 1.3393 +v 3.8743 8.1054 1.3493 +v 2.7958 8.9625 0.8269 +v 3.8743 8.1054 0.7798 +v 2.8985 9.3296 0.8269 +v 3.8743 8.5720 0.7798 +v 2.0446 9.7973 1.2384 +v 2.0904 10.0820 2.4593 +v 1.7058 10.0819 2.4593 +v 1.7515 9.7973 1.2384 +v 2.0446 10.1751 1.2384 +v 2.0904 10.4244 2.2498 +v 1.7515 10.1751 1.2384 +v 1.7058 10.4244 2.2498 +v 2.0739 10.7611 3.2159 +v 1.7223 10.7611 3.2159 +v 2.0739 10.7611 2.7627 +v 1.7223 10.7611 2.7627 +v -12.3257 0.0143 -9.8101 +v -12.8953 0.0143 -9.8101 +v -12.8432 1.4775 -9.6989 +v -12.3307 1.4775 -9.6989 +v -12.3257 0.0143 -9.2405 +v -12.3307 1.4775 -9.1865 +v -12.8432 1.4775 -9.1865 +v -12.8953 0.0143 -9.2405 +v -12.8953 2.5418 -9.6505 +v -12.3258 3.0013 -9.6505 +v -12.3258 3.0013 -9.0809 +v -12.8953 2.5418 -9.0809 +v -12.3257 0.0143 -2.6443 +v -12.3307 1.4775 -2.7554 +v -12.8432 1.4775 -2.7554 +v -12.8953 0.0143 -2.6443 +v -12.3257 0.0143 -3.2139 +v -12.3307 1.4775 -3.2679 +v -12.8953 0.0143 -3.2139 +v -12.8432 1.4775 -3.2679 +v -12.3258 3.0013 -2.8039 +v -12.8953 2.5418 -2.8039 +v -12.3258 3.0013 -3.3735 +v -12.8953 2.5418 -3.3735 +v -12.6547 0.4863 -2.8264 +v -12.6547 0.4863 -9.5914 +v -12.7857 0.4863 -9.5914 +v -12.7857 0.4863 -2.8264 +v -12.7857 -0.0000 -9.5914 +v -12.7857 -0.0000 -2.8264 +v -12.6656 0.4863 -9.5780 +v -6.8956 0.4863 -9.5780 +v -6.8956 0.4863 -9.7089 +v -12.6656 0.4863 -9.7089 +v -6.8956 -0.0000 -9.7089 +v -12.6656 -0.0000 -9.7089 +v -6.8956 0.4863 -2.7219 +v -6.8956 0.4863 -2.8528 +v -12.6656 0.4863 -2.8528 +v -12.6656 0.4863 -2.7219 +v -6.8956 -0.0000 -2.7219 +v -12.6656 -0.0000 -2.7219 +v -7.3871 0.3840 -2.7893 +v -7.3871 -0.2451 -2.7893 +v -7.3871 -0.2451 -1.9671 +v -7.3871 0.3840 -1.9671 +v 11.2820 -0.2451 -1.9671 +v 11.2820 -0.2451 -2.7893 +v 11.2820 0.3840 -2.7893 +v 11.2820 0.3840 -1.9671 +v 1.9475 -0.6210 -1.9671 +v 1.9475 0.0080 -1.9671 +v 1.9475 0.0080 -2.7893 +v -5.8918 -1.1745 -2.6535 +v -6.6824 -1.1745 -2.6535 +v -6.6781 -2.2343 -2.4061 +v -5.8875 -2.2343 -2.4061 +v -6.6824 -1.1745 -3.4441 +v -6.6781 -2.2343 -3.1967 +v -5.8918 -1.1745 -3.4441 +v -5.8875 -2.2343 -3.1967 +v -5.8875 -0.0000 -2.4061 +v -6.6781 -0.0000 -2.4061 +v -6.6781 -0.0000 -3.1967 +v -5.8875 -0.0000 -3.1967 +v -2.5347 -1.1745 -2.6535 +v -3.3252 -1.1745 -2.6535 +v -3.3210 -2.2343 -2.4061 +v -2.5304 -2.2343 -2.4061 +v -3.3252 -1.1745 -3.4441 +v -3.3210 -2.2343 -3.1967 +v -2.5347 -1.1745 -3.4441 +v -2.5304 -2.2343 -3.1967 +v -2.5304 -0.0000 -2.4061 +v -3.3210 -0.0000 -2.4061 +v -3.3210 -0.0000 -3.1967 +v -2.5304 -0.0000 -3.1967 +v 0.7326 -1.1745 -2.6535 +v -0.0579 -1.1745 -2.6535 +v -0.0537 -2.2343 -2.4061 +v 0.7369 -2.2343 -2.4061 +v -0.0579 -1.1745 -3.4441 +v -0.0537 -2.2343 -3.1967 +v 0.7326 -1.1745 -3.4441 +v 0.7369 -2.2343 -3.1967 +v 0.7369 -0.0000 -2.4061 +v -0.0537 -0.0000 -2.4061 +v -0.0537 -0.0000 -3.1967 +v 0.7369 -0.0000 -3.1967 +v 3.9780 -1.1745 -2.6535 +v 3.1874 -1.1745 -2.6535 +v 3.1917 -2.2343 -2.4061 +v 3.9823 -2.2343 -2.4061 +v 3.1874 -1.1745 -3.4441 +v 3.1917 -2.2343 -3.1967 +v 3.9780 -1.1745 -3.4441 +v 3.9823 -2.2343 -3.1967 +v 3.9823 -0.0000 -2.4061 +v 3.1917 -0.0000 -2.4061 +v 3.1917 -0.0000 -3.1967 +v 3.9823 -0.0000 -3.1967 +v 7.2583 -1.1745 -2.6535 +v 6.4678 -1.1745 -2.6535 +v 6.4720 -2.2343 -2.4061 +v 7.2626 -2.2343 -2.4061 +v 6.4678 -1.1745 -3.4441 +v 6.4720 -2.2343 -3.1967 +v 7.2583 -1.1745 -3.4441 +v 7.2626 -2.2343 -3.1967 +v 7.2626 -0.0000 -2.4061 +v 6.4720 -0.0000 -2.4061 +v 6.4720 -0.0000 -3.1967 +v 7.2626 -0.0000 -3.1967 +v 10.6465 -1.1745 -2.6535 +v 9.8559 -1.1745 -2.6535 +v 9.8602 -2.2343 -2.4061 +v 10.6508 -2.2343 -2.4061 +v 9.8559 -1.1745 -3.4441 +v 9.8602 -2.2343 -3.1967 +v 10.6465 -1.1745 -3.4441 +v 10.6508 -2.2343 -3.1967 +v 10.6508 -0.0000 -2.4061 +v 9.8602 -0.0000 -2.4061 +v 9.8602 -0.0000 -3.1967 +v 10.6508 -0.0000 -3.1967 +v 0.6510 3.2326 -2.3791 +v 0.5856 4.7686 0.0009 +v -0.1260 4.7686 0.0009 +v -0.1915 3.2326 -2.3791 +v 0.6510 4.1788 -2.3791 +v 0.5856 5.0694 -0.6441 +v -0.1915 4.1788 -2.3791 +v -0.1260 5.0694 -0.6441 +v 0.6510 6.1014 0.9746 +v -0.1915 6.1014 0.9746 +v 0.6510 6.1014 0.1321 +v -0.1915 6.1014 0.1321 +v 3.9760 3.2326 -2.3791 +v 3.9106 4.7686 0.0009 +v 3.1989 4.7686 0.0009 +v 3.1335 3.2326 -2.3791 +v 3.9760 4.1788 -2.3791 +v 3.9106 5.0694 -0.6441 +v 3.1335 4.1788 -2.3791 +v 3.1989 5.0694 -0.6441 +v 3.9760 6.1014 0.9746 +v 3.1335 6.1014 0.9746 +v 3.9760 6.1014 0.1321 +v 3.1335 6.1014 0.1321 +v 2.2664 3.2138 -2.3791 +v 2.2664 3.2138 10.8189 +v 2.5022 2.7597 10.8189 +v 2.5022 2.7597 -2.3791 +v 1.7553 3.2367 -2.3791 +v 1.7553 3.2367 10.8189 +v 1.4799 2.8055 -2.3791 +v 1.4799 2.8055 10.8189 +v 1.7156 2.3514 -2.3791 +v 1.7156 2.3514 10.8189 +v 2.2267 2.3285 -2.3791 +v 2.2267 2.3285 10.8189 +v -1.3164 -0.1528 3.8302 +v -0.9563 -0.5129 3.8301 +v -0.9563 -0.5129 4.4788 +v -1.3164 -0.1528 4.4788 +v 5.2683 5.7118 4.4788 +v 5.2683 5.7118 3.8302 +v 4.9082 6.0719 3.8302 +v 4.9082 6.0719 4.4788 +v -1.6452 3.1171 5.3292 +v -3.0426 3.1798 5.3292 +v -2.8677 3.1720 6.3959 +v -1.6452 3.1171 6.3959 +v -2.8767 2.9720 6.3959 +v -3.0516 2.9799 5.3292 +v -1.6542 2.9172 5.3292 +v -1.6542 2.9172 6.3959 +v -1.6452 3.1171 4.2626 +v -1.6542 2.9172 4.2626 +v -2.8766 2.9720 4.2626 +v -2.8677 3.1720 4.2626 +v 2.1926 7.6130 4.5971 +v 4.5802 6.8570 4.5971 +v 4.5802 6.8570 3.7993 +v 2.1926 7.6130 3.7993 +v 2.1622 6.9376 4.5971 +v 4.2163 6.2872 4.5971 +v 2.1622 6.9376 3.7993 +v 4.2163 6.2872 3.7993 +v 6.2701 5.0084 4.5971 +v 6.2701 5.0084 3.7993 +v 5.6700 4.6970 4.5971 +v 5.6700 4.6970 3.7993 +v 6.8092 2.5626 4.5971 +v 6.8092 2.5626 3.7993 +v 6.1338 2.5929 4.5971 +v 6.1338 2.5929 3.7993 +v 6.0532 0.1749 4.5971 +v 6.0532 0.1749 3.7993 +v 5.4834 0.5389 4.5971 +v 5.4834 0.5389 3.7993 +v 4.2046 -1.5149 4.5971 +v 4.2046 -1.5149 3.7993 +v 3.8931 -0.9148 4.5971 +v 3.8931 -0.9148 3.7993 +v 1.7588 -2.0540 4.5971 +v 1.7588 -2.0540 3.7993 +v 1.7891 -1.3786 4.5971 +v 1.7891 -1.3786 3.7993 +v -0.6289 -1.2980 4.5971 +v -0.6289 -1.2980 3.7993 +v -0.2650 -0.7282 4.5971 +v -0.2650 -0.7282 3.7993 +v -2.3187 0.5506 4.5971 +v -2.3187 0.5506 3.7993 +v -1.7186 0.8620 4.5971 +v -1.7186 0.8620 3.7993 +v -2.8579 2.9964 4.5971 +v -2.8579 2.9964 3.7994 +v -2.1824 2.9661 4.5971 +v -2.1824 2.9661 3.7993 +v -2.1018 5.3841 4.5971 +v -2.1018 5.3841 3.7993 +v -1.5320 5.0201 4.5971 +v -1.5320 5.0201 3.7993 +v -0.2533 7.0739 4.5971 +v -0.2533 7.0739 3.7993 +v 0.0582 6.4738 4.5971 +v 0.0582 6.4738 3.7993 +v 2.1926 7.6130 6.9501 +v 4.5802 6.8570 6.9501 +v 4.5802 6.8570 6.1523 +v 2.1926 7.6130 6.1523 +v 2.1623 6.9376 6.9501 +v 4.2163 6.2872 6.9501 +v 2.1623 6.9376 6.1523 +v 4.2163 6.2872 6.1523 +v 6.2701 5.0084 6.9501 +v 6.2701 5.0084 6.1523 +v 5.6700 4.6970 6.9501 +v 5.6700 4.6970 6.1523 +v 6.8092 2.5626 6.9501 +v 6.8092 2.5626 6.1523 +v 6.1338 2.5929 6.9501 +v 6.1338 2.5929 6.1523 +v 6.0532 0.1749 6.9501 +v 6.0532 0.1749 6.1523 +v 5.4834 0.5389 6.9501 +v 5.4834 0.5389 6.1523 +v 4.2046 -1.5149 6.9501 +v 4.2046 -1.5149 6.1523 +v 3.8931 -0.9148 6.9501 +v 3.8931 -0.9148 6.1523 +v 1.7588 -2.0540 6.9501 +v 1.7588 -2.0540 6.1523 +v 1.7891 -1.3786 6.9501 +v 1.7891 -1.3786 6.1523 +v -0.6289 -1.2980 6.9501 +v -0.6289 -1.2980 6.1523 +v -0.2650 -0.7282 6.9501 +v -0.2650 -0.7282 6.1523 +v -2.3187 0.5506 6.9501 +v -2.3187 0.5506 6.1523 +v -1.7186 0.8620 6.9501 +v -1.7186 0.8620 6.1523 +v -2.8579 2.9964 6.9501 +v -2.8579 2.9964 6.1523 +v -2.1824 2.9661 6.9501 +v -2.1824 2.9661 6.1523 +v -2.1018 5.3841 6.9501 +v -2.1019 5.3841 6.1523 +v -1.5320 5.0201 6.9501 +v -1.5320 5.0201 6.1523 +v -0.2533 7.0739 6.9501 +v -0.2533 7.0739 6.1523 +v 0.0582 6.4738 6.9501 +v 0.0582 6.4738 6.1523 +v -1.2551 4.4490 5.3292 +v -2.5273 5.0306 5.3292 +v -2.3680 4.9578 6.3959 +v -1.2551 4.4490 6.3959 +v -2.4512 4.7757 6.3959 +v -2.6105 4.8486 5.3292 +v -1.3383 4.2669 5.3292 +v -1.3383 4.2669 6.3959 +v -1.2551 4.4490 4.2626 +v -1.3383 4.2669 4.2626 +v -2.4512 4.7757 4.2626 +v -2.3680 4.9578 4.2626 +v 1.5088 1.8799 3.5739 +v 2.5213 1.9253 3.5739 +v 2.5213 1.9253 4.6569 +v 1.5088 1.8799 4.6569 +v 1.7612 2.3664 3.1911 +v 2.2262 2.3872 3.1911 +v 2.9882 2.8249 3.5739 +v 2.9882 2.8249 4.6569 +v 2.4406 2.8004 3.1911 +v 2.4426 3.6791 3.5739 +v 2.4426 3.6791 4.6569 +v 2.1901 3.1926 3.1911 +v 1.4300 3.6337 3.5739 +v 1.4300 3.6337 4.6569 +v 1.7251 3.1718 3.1911 +v 0.9631 2.7341 3.5739 +v 0.9631 2.7341 4.6569 +v 1.5107 2.7586 3.1911 +v -2.4255 3.0341 3.8302 +v -2.4255 2.5248 3.8302 +v -2.4255 2.5248 4.4788 +v -2.4255 3.0341 4.4788 +v 6.3774 2.5248 4.4788 +v 6.3774 2.5248 3.8302 +v 6.3774 3.0342 3.8302 +v 6.3774 3.0342 4.4788 +v -0.9563 6.0719 3.8301 +v -1.3165 5.7118 3.8302 +v -1.3164 5.7118 4.4788 +v -0.9563 6.0719 4.4788 +v 4.9082 -0.5129 4.4788 +v 4.9082 -0.5129 3.8302 +v 5.2683 -0.1528 3.8302 +v 5.2683 -0.1528 4.4788 +v -0.3944 5.5377 5.3292 +v -1.3561 6.5535 5.3292 +v -1.2357 6.4263 6.3959 +v -0.3944 5.5377 6.3959 +v -1.3810 6.2887 6.3959 +v -1.5015 6.4159 5.3292 +v -0.5398 5.4001 5.3292 +v -0.5398 5.4001 6.3959 +v -0.3944 5.5377 4.2625 +v -0.5398 5.4001 4.2625 +v -1.3810 6.2887 4.2625 +v -1.2357 6.4263 4.2625 +v 0.8114 6.2247 5.3292 +v 0.3003 7.5268 5.3292 +v 0.3643 7.3638 6.3959 +v 0.8114 6.2247 6.3959 +v 0.1779 7.2906 6.3959 +v 0.1140 7.4536 5.3292 +v 0.6250 6.1516 5.3292 +v 0.6250 6.1516 6.3959 +v 0.8114 6.2247 4.2625 +v 0.6250 6.1516 4.2625 +v 0.1779 7.2906 4.2625 +v 0.3643 7.3638 4.2625 +v 1.7213 -1.6220 3.8301 +v 2.2306 -1.6220 3.8301 +v 2.2306 -1.6220 4.4788 +v 1.7213 -1.6220 4.4788 +v 2.2306 7.1810 4.4788 +v 2.2306 7.1810 3.8302 +v 1.7213 7.1810 3.8302 +v 1.7213 7.1810 4.4788 +v 5.3781 4.0634 5.3292 +v 6.6616 4.6196 5.3292 +v 6.5009 4.5499 6.3959 +v 5.3781 4.0633 6.3959 +v 6.4213 4.7336 6.3959 +v 6.5820 4.8032 5.3292 +v 5.2985 4.2470 5.3292 +v 5.2985 4.2470 6.3959 +v 5.3781 4.0634 4.2626 +v 5.2985 4.2470 4.2626 +v 6.4213 4.7336 4.2626 +v 6.5009 4.5499 4.2626 +v 2.1867 6.4100 5.3292 +v 2.2006 7.8087 5.3292 +v 2.1989 7.6336 6.3959 +v 2.1867 6.4100 6.3959 +v 1.9987 7.6356 6.3959 +v 2.0005 7.8107 5.3292 +v 1.9866 6.4120 5.3292 +v 1.9866 6.4120 6.3959 +v 2.1867 6.4100 4.2625 +v 1.9866 6.4120 4.2625 +v 1.9987 7.6356 4.2625 +v 2.1989 7.6336 4.2625 +v 3.5314 6.0666 5.3292 +v 4.0682 7.3582 5.3292 +v 4.0010 7.1965 6.3959 +v 3.5314 6.0666 6.3959 +v 3.8162 7.2733 6.3959 +v 3.8834 7.4351 5.3292 +v 3.3466 6.1434 5.3292 +v 3.3465 6.1434 6.3959 +v 3.5314 6.0666 4.2625 +v 3.3466 6.1434 4.2625 +v 3.8162 7.2733 4.2626 +v 4.0010 7.1965 4.2626 +v 4.6494 5.2444 5.3292 +v 5.6311 6.2410 5.3292 +v 5.5082 6.1162 6.3959 +v 4.6494 5.2444 6.3959 +v 5.3656 6.2566 6.3959 +v 5.4885 6.3814 5.3292 +v 4.5069 5.3849 5.3292 +v 4.5069 5.3849 6.3959 +v 4.6494 5.2444 4.2626 +v 4.5069 5.3849 4.2626 +v 5.3656 6.2566 4.2626 +v 5.5082 6.1162 4.2626 +v 1.7213 -1.6220 6.3903 +v 2.2306 -1.6220 6.3903 +v 2.2306 -1.6220 7.0389 +v 1.7213 -1.6220 7.0389 +v 2.2306 7.1810 7.0389 +v 2.2306 7.1810 6.3903 +v 1.7213 7.1810 6.3903 +v 1.7213 7.1810 7.0389 +v -1.3164 -0.1528 6.3903 +v -0.9563 -0.5129 6.3903 +v -0.9563 -0.5129 7.0389 +v -1.3164 -0.1528 7.0389 +v 5.2683 5.7118 7.0390 +v 5.2683 5.7118 6.3903 +v 4.9082 6.0719 6.3903 +v 4.9082 6.0719 7.0389 +v -0.9563 6.0719 6.3903 +v -1.3164 5.7118 6.3903 +v -1.3164 5.7118 7.0389 +v -0.9563 6.0719 7.0389 +v 4.9082 -0.5129 7.0389 +v 4.9082 -0.5129 6.3903 +v 5.2683 -0.1528 6.3903 +v 5.2683 -0.1528 7.0389 +v 1.5088 3.6791 7.3165 +v 2.5213 3.6337 7.3165 +v 2.5213 3.6337 6.2335 +v 1.5088 3.6791 6.2335 +v 1.7612 3.1926 7.6994 +v 2.2262 3.1718 7.6994 +v 2.9883 2.7341 7.3165 +v 2.9882 2.7341 6.2335 +v 2.4407 2.7586 7.6994 +v 2.4426 1.8799 7.3165 +v 2.4426 1.8799 6.2335 +v 2.1901 2.3664 7.6993 +v 1.4301 1.9253 7.3165 +v 1.4300 1.9253 6.2335 +v 1.7251 2.3872 7.6993 +v 0.9631 2.8249 7.3165 +v 0.9631 2.8249 6.2335 +v 1.5107 2.8004 7.6994 +v -2.4255 3.0341 6.3903 +v -2.4255 2.5248 6.3903 +v -2.4255 2.5248 7.0389 +v -2.4255 3.0341 7.0389 +v 6.3774 2.5248 7.0390 +v 6.3774 2.5248 6.3903 +v 6.3774 3.0342 6.3903 +v 6.3774 3.0342 7.0390 +v 3.3775 -0.5761 5.3292 +v 3.9782 -1.8393 5.3292 +v 3.9029 -1.6812 6.3959 +v 3.3775 -0.5761 6.3959 +v 4.0837 -1.5952 6.3959 +v 4.1589 -1.7534 5.3292 +v 3.5582 -0.4901 5.3292 +v 3.5582 -0.4901 6.3959 +v 3.3775 -0.5761 4.2625 +v 3.5582 -0.4901 4.2625 +v 4.0837 -1.5952 4.2625 +v 3.9030 -1.6812 4.2625 +v -1.3290 1.2614 5.3292 +v -2.5705 0.6170 5.3292 +v -2.4150 0.6977 6.3959 +v -1.3290 1.2614 6.3959 +v -2.3228 0.5201 6.3959 +v -2.4783 0.4394 5.3292 +v -1.2368 1.0838 5.3292 +v -1.2368 1.0838 6.3959 +v -1.3290 1.2614 4.2626 +v -1.2368 1.0838 4.2626 +v -2.3228 0.5201 4.2626 +v -2.4150 0.6977 4.2626 +v -0.5196 0.1341 5.3292 +v -1.4294 -0.9285 5.3292 +v -1.3155 -0.7955 6.3959 +v -0.5196 0.1341 6.3959 +v -1.1634 -0.9256 6.3959 +v -1.2773 -1.0587 5.3292 +v -0.3676 0.0039 5.3292 +v -0.3676 0.0039 6.3959 +v -0.5196 0.1341 4.2625 +v -0.3676 0.0039 4.2625 +v -1.1634 -0.9256 4.2625 +v -1.3154 -0.7955 4.2625 +v 4.5324 0.1934 5.3292 +v 5.5626 -0.7529 5.3292 +v 5.4336 -0.6344 6.3959 +v 4.5324 0.1934 6.3959 +v 5.5690 -0.4870 6.3959 +v 5.6980 -0.6055 5.3292 +v 4.6678 0.3408 5.3292 +v 4.6678 0.3408 6.3959 +v 4.5324 0.1934 4.2625 +v 4.6678 0.3408 4.2625 +v 5.5690 -0.4870 4.2625 +v 5.4336 -0.6344 4.2625 +v 10.8807 3.4479 -2.2299 +v 10.3030 3.4479 -2.2299 +v 10.2904 -0.0000 -2.0822 +v 11.0330 -0.0000 -2.0822 +v 10.3030 3.4479 -2.8076 +v 10.2904 -0.0000 -2.8247 +v 10.8807 3.4479 -2.8076 +v 11.0330 -0.0000 -2.8247 +v 11.0330 8.5873 -2.0822 +v 10.2904 8.5873 -2.0822 +v 10.2904 9.1802 -2.8247 +v 11.0330 9.1802 -2.8247 +v 2.0184 -0.8569 5.3292 +v 2.1021 -2.2531 5.3292 +v 2.0916 -2.0783 6.3959 +v 2.0184 -0.8569 6.3959 +v 2.2914 -2.0664 6.3959 +v 2.3019 -2.2412 5.3292 +v 2.2181 -0.8449 5.3292 +v 2.2181 -0.8449 6.3959 +v 2.0184 -0.8569 4.2625 +v 2.2182 -0.8449 4.2625 +v 2.2914 -2.0664 4.2625 +v 2.0916 -2.0783 4.2625 +v 0.6531 -0.6081 5.3292 +v 0.2076 -1.9341 5.3292 +v 0.2634 -1.7680 6.3959 +v 0.6531 -0.6081 6.3959 +v 0.4531 -1.8318 6.3959 +v 0.3973 -1.9978 5.3292 +v 0.8428 -0.6718 5.3292 +v 0.8428 -0.6718 6.3959 +v 0.6531 -0.6081 4.2625 +v 0.8428 -0.6718 4.2625 +v 0.4531 -1.8318 4.2625 +v 0.2634 -1.7680 4.2625 +v 5.3150 1.3395 5.3292 +v 6.6246 0.8480 5.3292 +v 6.4607 0.9096 6.3959 +v 5.3150 1.3395 6.3959 +v 6.5310 1.0969 6.3959 +v 6.6950 1.0354 5.3292 +v 5.3853 1.5269 5.3292 +v 5.3853 1.5269 6.3959 +v 5.3150 1.3395 4.2626 +v 5.3853 1.5269 4.2626 +v 6.5310 1.0969 4.2626 +v 6.4607 0.9096 4.2626 +v 5.6113 2.6953 5.3292 +v 7.0097 2.7302 5.3292 +v 6.8346 2.7258 6.3959 +v 5.6113 2.6953 6.3959 +v 6.8296 2.9259 6.3959 +v 7.0047 2.9303 5.3292 +v 5.6063 2.8954 5.3292 +v 5.6063 2.8954 6.3959 +v 5.6113 2.6953 4.2626 +v 5.6063 2.8954 4.2626 +v 6.8296 2.9259 4.2626 +v 6.8346 2.7258 4.2626 +v 3.9105 6.3911 1.7275 +v 3.9105 5.8571 1.7275 +v 4.5186 5.8571 1.7275 +v 4.5186 6.3911 1.7275 +v 4.5186 5.6880 -0.9886 +v 4.5186 6.2220 -0.9886 +v 3.9105 5.6880 -0.9886 +v 3.9105 6.2220 -0.9886 +v 4.5186 5.8571 -3.7047 +v 4.5186 6.3911 -3.7047 +v 3.9105 5.8571 -3.7047 +v 3.9105 6.3911 -3.7047 +v 3.9168 6.1014 1.3850 +v 4.4864 6.1014 1.3850 +v 4.4343 7.5645 1.2739 +v 3.9218 7.5645 1.2739 +v 3.9168 6.1014 0.8154 +v 3.9218 7.5645 0.7614 +v 4.4343 7.5645 0.7614 +v 4.4864 6.1014 0.8154 +v 4.4864 8.7979 1.3850 +v 3.9168 9.2575 1.3850 +v 3.9168 9.2575 0.8154 +v 4.4864 8.7979 0.8154 +v -0.8180 6.3911 0.8068 +v -0.8180 5.8571 0.8068 +v -0.8180 5.8571 1.4149 +v -0.8180 6.3911 1.4149 +v 4.6141 5.8571 1.4149 +v 4.6141 5.8571 0.8068 +v 4.6141 6.3911 0.8068 +v 4.6141 6.3911 1.4149 +v 1.8981 5.6880 1.4149 +v 1.8981 6.2220 1.4149 +v 1.8981 5.6880 0.8068 +v 1.8981 6.2220 0.8068 +v -0.1207 6.1014 1.3850 +v -0.1257 7.5645 1.2739 +v -0.6382 7.5645 1.2739 +v -0.6903 6.1014 1.3850 +v -0.1207 6.1014 0.8154 +v -0.1257 7.5645 0.7614 +v -0.6903 6.1014 0.8154 +v -0.6382 7.5645 0.7614 +v -0.1207 9.2575 1.3850 +v -0.6903 8.7979 1.3850 +v -0.1207 9.2575 0.8154 +v -0.6903 8.7979 0.8154 +v 10.9958 3.4479 -10.3012 +v 11.1481 0.0000 -10.4490 +v 10.4056 0.0000 -10.4490 +v 10.4182 3.4479 -10.3012 +v 10.4056 0.0000 -9.7064 +v 10.4182 3.4479 -9.7236 +v 11.1481 0.0000 -9.7064 +v 10.9958 3.4479 -9.7236 +v 10.4056 8.5873 -10.4490 +v 11.1481 8.5873 -10.4490 +v 10.4056 9.1802 -9.7064 +v 11.1481 9.1802 -9.7064 +v 10.8526 3.9181 -9.9190 +v 10.8526 3.9181 -2.4672 +v 10.6571 3.9181 -2.4672 +v 10.6571 3.9181 -9.9190 +v 10.8526 4.5472 -9.9190 +v 10.8526 4.5472 -2.4672 +v 10.6571 4.5472 -9.9190 +v 10.6571 4.5472 -2.4672 +v 10.3781 3.9181 -2.2788 +v -6.5928 3.9181 -2.2788 +v -6.5928 3.9181 -2.4743 +v 10.3781 3.9181 -2.4743 +v 10.3781 4.5472 -2.2788 +v -6.5928 4.5471 -2.2788 +v 10.3781 4.5472 -2.4743 +v -6.5928 4.5471 -2.4743 +v -0.7627 6.3911 1.7275 +v -0.7627 5.8571 1.7275 +v -0.1547 5.8571 1.7275 +v -0.1547 6.3911 1.7275 +v -0.1547 5.6880 -0.9886 +v -0.1547 6.2220 -0.9886 +v -0.7627 5.6880 -0.9886 +v -0.7627 6.2220 -0.9886 +v -0.1547 5.8571 -3.7047 +v -0.1547 6.3911 -3.7047 +v -0.7627 5.8571 -3.7047 +v -0.7627 6.3911 -3.7047 +v -9.5780 13.2240 -5.7084 +v -9.5780 13.2240 -6.8530 +v -9.5780 12.0794 -6.8530 +v -9.5780 12.0794 -5.7084 +v -7.0316 12.1154 -5.8837 +v -7.0316 11.4287 -5.8837 +v -7.0316 12.1154 -6.6777 +v -7.0316 11.4287 -6.6777 +v 13.3742 12.0794 -6.8530 +v 13.3742 13.2240 -6.8530 +v 13.3742 13.2240 -5.7084 +v 13.3742 12.0794 -5.7084 +v 10.8277 12.1154 -5.8837 +v 10.8277 11.4287 -5.8837 +v 10.8277 12.1154 -6.6777 +v 10.8277 11.4287 -6.6777 +v 4.5500 0.4863 -10.2550 +v -6.4192 0.4863 -10.2550 +v -6.4192 0.4863 -10.1240 +v 4.5500 0.4863 -10.1240 +v 4.5500 -0.0000 -10.2550 +v -6.4192 -0.0000 -10.2550 +v 8.4124 0.4863 -10.1240 +v 10.6462 0.4863 -10.1240 +v 10.6462 0.4863 -10.2550 +v 8.4124 0.4863 -10.2550 +v 10.6462 0.0000 -10.2550 +v 8.4124 0.0000 -10.2550 +v 10.7255 0.4863 -10.0665 +v 10.7256 0.4863 -2.4950 +v 10.8565 0.4863 -2.4950 +v 10.8565 0.4863 -10.0665 +v 10.8565 -0.0000 -2.4950 +v 10.8565 0.0000 -10.0665 +v -0.5905 1.5860 -13.8366 +v -0.4251 0.0182 -14.0014 +v -0.9883 0.0182 -14.0014 +v -0.9242 1.5860 -13.8366 +v -0.9883 0.0182 -13.5140 +v -0.9242 1.5860 -13.5666 +v -0.4251 0.0182 -13.5140 +v -0.5905 1.5860 -13.5666 +v -0.9320 3.1539 -13.8763 +v -0.5124 3.1539 -13.8763 +v -0.9319 3.1539 -13.5649 +v -0.5124 3.1539 -13.5649 +v -5.5213 1.5860 -13.8366 +v -5.1876 1.5860 -13.8366 +v -5.1235 0.0182 -14.0014 +v -5.6866 0.0182 -14.0014 +v -5.1876 1.5860 -13.5666 +v -5.1235 0.0182 -13.5140 +v -5.5213 1.5860 -13.5666 +v -5.6866 0.0182 -13.5140 +v -5.5994 3.1539 -13.8763 +v -5.1798 3.1539 -13.8763 +v -5.1798 3.1539 -13.5649 +v -5.5994 3.1539 -13.5649 +v -6.8947 3.4479 -10.2905 +v -6.3171 3.4479 -10.2905 +v -6.3044 -0.0000 -10.4383 +v -7.0470 -0.0000 -10.4383 +v -6.3171 3.4479 -9.7129 +v -6.3044 -0.0000 -9.6957 +v -6.8947 3.4479 -9.7129 +v -7.0470 -0.0000 -9.6957 +v -7.0470 8.5873 -10.4383 +v -6.3045 8.5873 -10.4383 +v -6.3045 9.1801 -9.6957 +v -7.0470 9.1801 -9.6957 +v -6.4257 3.9181 -10.2572 +v 10.5452 3.9181 -10.2572 +v 10.5452 3.9181 -10.0617 +v -6.4257 3.9181 -10.0617 +v -6.4257 4.5471 -10.2572 +v 10.5452 4.5472 -10.2572 +v -6.4257 4.5471 -10.0617 +v 10.5452 4.5472 -10.0617 +v -6.9209 3.4479 -2.2090 +v -7.0732 -0.0000 -2.0613 +v -6.3306 -0.0000 -2.0613 +v -6.3433 3.4479 -2.2090 +v -6.3306 -0.0000 -2.8038 +v -6.3433 3.4479 -2.7867 +v -7.0732 -0.0000 -2.8038 +v -6.9209 3.4479 -2.7867 +v -6.3306 8.5873 -2.0613 +v -7.0732 8.5873 -2.0613 +v -6.3306 9.1801 -2.8038 +v -7.0732 9.1801 -2.8038 +v 1.5088 1.8799 10.4382 +v 2.5213 1.9253 10.4382 +v 2.5213 1.9253 11.5212 +v 1.5088 1.8799 11.5212 +v 1.7613 2.3664 10.0553 +v 2.2262 2.3872 10.0553 +v 2.9883 2.8249 10.4382 +v 2.9882 2.8249 11.5212 +v 2.4407 2.8004 10.0553 +v 2.4426 3.6791 10.4382 +v 2.4426 3.6791 11.5212 +v 2.1901 3.1926 10.0553 +v 1.4301 3.6337 10.4382 +v 1.4300 3.6337 11.5212 +v 1.7251 3.1718 10.0553 +v 0.9631 2.7341 10.4382 +v 0.9631 2.7341 11.5212 +v 1.5107 2.7586 10.0553 +v 2.9369 4.0367 13.6746 +v 2.9369 3.7386 10.6560 +v 0.7733 3.7386 10.6560 +v 0.7733 4.0367 13.6746 +v 4.3514 -0.1928 14.0014 +v -0.6387 -0.1928 14.0014 +v 4.5400 -0.1928 10.6142 +v -0.8273 -0.1928 10.6142 +# 1595 vertices + +vn -0.0324 -0.0266 0.9991 +vn -0.0324 -0.0265 0.9991 +vn -0.0324 -0.0266 -0.9991 +vn -0.0324 -0.0265 -0.9991 +vn -0.7683 -0.6401 -0.0000 +vn 0.4444 -0.8958 -0.0000 +vn -0.4452 0.8955 0.0000 +vn -0.4450 0.8955 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 1.0000 0.0000 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 0.0000 -1.0000 +vn -0.0317 0.7597 0.6495 +vn -0.1354 0.9908 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.7816 0.6238 +vn 0.9985 0.0000 -0.0553 +vn 0.9984 0.0000 -0.0557 +vn 0.9984 -0.0000 0.0557 +vn 0.9985 -0.0000 0.0553 +vn -0.1110 0.7057 0.6997 +vn -0.2907 0.9568 0.0000 +vn -0.1110 0.7058 -0.6997 +vn -0.0317 0.7599 -0.6493 +vn -0.0000 0.7816 -0.6237 +vn -0.0557 -0.0000 0.9984 +vn -0.0561 -0.0000 0.9984 +vn -0.0557 0.0000 -0.9984 +vn -0.0561 0.0000 -0.9984 +vn 0.0308 0.7597 0.6495 +vn 0.1345 0.9909 0.0000 +vn -0.9984 0.0000 -0.0557 +vn -0.9985 0.0000 -0.0553 +vn -0.9984 -0.0000 0.0557 +vn -0.9985 -0.0000 0.0553 +vn 0.2911 0.9567 0.0000 +vn 0.1112 0.7057 0.6997 +vn 0.1112 0.7058 -0.6997 +vn 0.0308 0.7599 -0.6493 +vn 0.0565 -0.0000 0.9984 +vn 0.0564 -0.0000 0.9984 +vn 0.0565 0.0000 -0.9984 +vn 0.0564 0.0000 -0.9984 +vn -0.0316 -0.7660 -0.6421 +vn -0.0948 -0.7275 -0.6795 +vn -0.0000 -0.7714 -0.6363 +vn -0.0000 -0.7877 -0.6161 +vn -0.0316 -0.7658 0.6424 +vn 0.0000 -0.7877 0.6161 +vn 0.0000 -0.7714 0.6363 +vn -0.0948 -0.7275 0.6795 +vn 0.0944 -0.7275 -0.6796 +vn 0.1869 -0.6585 -0.7290 +vn 0.1068 -0.7147 -0.6912 +vn 0.0317 -0.7660 -0.6421 +vn -0.1068 -0.7147 -0.6912 +vn -0.1865 -0.6584 -0.7292 +vn 0.0944 -0.7275 0.6796 +vn 0.0317 -0.7658 0.6424 +vn 0.1068 -0.7147 0.6912 +vn 0.1869 -0.6584 0.7291 +vn -0.1864 -0.6584 0.7292 +vn -0.1068 -0.7147 0.6912 +vn -1.0000 -0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.1637 0.7744 -0.6111 +vn -0.1638 0.7744 -0.6111 +vn -0.1640 0.7747 -0.6107 +vn -0.9784 -0.2067 0.0000 +vn -0.2053 0.9718 -0.1162 +vn -0.1636 0.7743 0.6113 +vn -0.1640 0.7747 0.6107 +vn -0.1637 0.7744 0.6111 +vn -0.1638 0.7743 0.6112 +vn -0.2053 0.9718 0.1162 +vn -0.2053 0.9718 0.1164 +vn -0.1364 0.7797 -0.6111 +vn -0.1362 0.7797 -0.6111 +vn -0.1366 0.7798 -0.6110 +vn -0.1366 0.7797 -0.6111 +vn -0.9851 -0.1720 0.0000 +vn -0.1707 0.9785 -0.1162 +vn -0.1711 0.9784 -0.1161 +vn -0.1364 0.7797 0.6111 +vn -0.1366 0.7797 0.6111 +vn -0.1366 0.7798 0.6110 +vn -0.1360 0.7797 0.6113 +vn -0.1711 0.9784 0.1161 +vn -0.1707 0.9785 0.1162 +vn -0.0956 0.7858 -0.6111 +vn -0.0948 0.7858 -0.6111 +vn -0.0956 0.7859 -0.6110 +vn -0.9927 -0.1209 0.0000 +vn -0.9927 -0.1205 0.0000 +vn -0.1200 0.9860 -0.1161 +vn -0.1196 0.9860 -0.1161 +vn -0.0956 0.7858 0.6111 +vn -0.0956 0.7859 0.6110 +vn -0.0948 0.7857 0.6112 +vn -0.1196 0.9860 0.1163 +vn -0.1200 0.9860 0.1161 +vn -0.1196 0.9860 0.1161 +vn -0.1203 0.9859 -0.1161 +vn -0.0948 0.7859 0.6110 +vn -0.1196 0.9860 0.1160 +vn -0.1203 0.9859 0.1161 +vn -0.0955 0.7858 -0.6111 +vn -0.0955 0.7859 -0.6110 +vn -0.0955 0.7858 0.6111 +vn -0.0422 0.7904 -0.6111 +vn -0.0422 0.7905 -0.6110 +vn -0.9986 -0.0534 0.0000 +vn -0.0534 0.9918 -0.1162 +vn -0.0542 0.9918 -0.1161 +vn -0.0421 0.7904 0.6111 +vn -0.0422 0.7904 0.6111 +vn -0.0422 0.7905 0.6110 +vn -0.0534 0.9918 0.1160 +vn -0.0542 0.9917 0.1163 +vn -0.0534 0.9918 0.1162 +vn 0.9927 -0.1205 -0.0000 +vn 0.9927 -0.1209 -0.0000 +vn 0.0948 0.7858 -0.6111 +vn 0.0955 0.7859 -0.6110 +vn 0.0955 0.7858 -0.6111 +vn 0.0956 0.7858 -0.6111 +vn -0.9927 0.1205 0.0000 +vn -0.9927 0.1209 0.0000 +vn 0.1196 0.9860 -0.1161 +vn 0.1196 0.9861 -0.1158 +vn 0.1203 0.9859 -0.1161 +vn 0.0948 0.7858 0.6111 +vn 0.0956 0.7858 0.6111 +vn 0.0955 0.7858 0.6111 +vn 0.1196 0.9860 0.1161 +vn 0.1196 0.9860 0.1163 +vn 0.1203 0.9859 0.1161 +vn 0.0271 0.7912 -0.6110 +vn 0.0271 0.7911 -0.6111 +vn 0.0263 0.7911 -0.6111 +vn 0.9994 -0.0339 -0.0000 +vn 0.9994 -0.0336 -0.0000 +vn 0.0339 0.9927 -0.1162 +vn 0.9994 -0.0339 0.0004 +vn 0.0271 0.7912 0.6110 +vn 0.0263 0.7911 0.6111 +vn 0.0271 0.7911 0.6111 +vn 0.0339 0.9927 0.1162 +vn 0.0339 0.9927 0.1160 +vn 0.9994 -0.0336 -0.0004 +vn 0.0677 0.7888 -0.6109 +vn 0.0677 0.7886 -0.6112 +vn 0.9963 -0.0858 -0.0000 +vn 0.9963 -0.0854 -0.0000 +vn 0.0850 0.9896 -0.1162 +vn 0.0842 0.9897 -0.1162 +vn 0.0677 0.7888 0.6109 +vn 0.0677 0.7886 0.6112 +vn 0.0677 0.7885 0.6113 +vn 0.0850 0.9896 0.1162 +vn 0.0842 0.9897 0.1160 +vn 0.0947 0.7858 -0.6111 +vn 0.1195 0.9860 -0.1161 +vn 0.0955 0.7859 0.6110 +vn 0.0947 0.7858 0.6112 +vn 0.1195 0.9860 0.1161 +vn 0.1195 0.9860 0.1163 +vn 0.0948 0.7859 -0.6110 +vn 0.0948 0.7859 0.6110 +vn 0.0263 0.7912 -0.6110 +vn 0.0338 0.9927 -0.1162 +vn 0.0331 0.9927 -0.1162 +vn 0.0338 0.9927 0.1162 +vn 0.0339 0.9926 0.1164 +vn 0.0331 0.9927 0.1162 +vn -0.0947 0.7858 -0.6111 +vn 0.9927 0.1205 -0.0000 +vn 0.9927 0.1209 -0.0000 +vn -0.1196 0.9861 -0.1158 +vn -0.1195 0.9861 -0.1158 +vn -0.1195 0.9860 -0.1161 +vn -0.0955 0.7859 0.6110 +vn -0.0947 0.7858 0.6112 +vn -0.1195 0.9860 0.1161 +vn 0.0956 0.7859 -0.6110 +vn 0.1203 0.9860 -0.1158 +vn 0.0956 0.7859 0.6110 +vn 0.1203 0.9859 0.1159 +vn 0.9277 -0.3734 -0.0000 +vn 0.9276 -0.3735 -0.0000 +vn 0.2962 0.7343 -0.6109 +vn 0.2962 0.7340 -0.6112 +vn -0.9277 0.3734 0.0000 +vn -0.9275 0.3738 0.0000 +vn 0.9277 -0.3734 0.0004 +vn 0.9275 -0.3738 0.0004 +vn 0.3708 0.9214 -0.1162 +vn 0.3714 0.9212 -0.1158 +vn 0.3707 0.9215 -0.1158 +vn -0.9276 0.3735 0.0000 +vn 0.2962 0.7343 0.6107 +vn 0.2962 0.7340 0.6112 +vn 0.2962 0.7343 0.6109 +vn 0.9275 -0.3738 -0.0000 +vn 0.9277 -0.3734 -0.0004 +vn 0.3708 0.9214 0.1162 +vn 0.3713 0.9212 0.1163 +vn 0.9927 -0.1205 0.0004 +vn 0.9927 -0.1205 -0.0004 +vn 0.1196 0.9860 0.1160 +vn -0.9567 -0.2911 0.0000 +vn -0.9566 -0.2914 0.0000 +vn -0.2304 0.7572 -0.6111 +vn -0.2304 0.7572 -0.6113 +vn 0.9567 0.2911 -0.0000 +vn -0.2892 0.9503 -0.1158 +vn -0.2895 0.9501 -0.1158 +vn -0.2891 0.9502 -0.1162 +vn 0.9566 0.2914 -0.0000 +vn -0.2304 0.7572 0.6111 +vn -0.2304 0.7572 0.6113 +vn -0.2304 0.7573 0.6110 +vn -0.2891 0.9502 0.1162 +vn -0.2895 0.9501 0.1160 +vn -0.2891 0.9502 0.1163 +vn -0.1640 0.7744 -0.6111 +vn -0.1640 0.7745 -0.6110 +vn -0.9785 -0.2064 0.0000 +vn -0.2048 0.9719 -0.1161 +vn -0.1640 0.7745 0.6110 +vn -0.1637 0.7745 0.6110 +vn -0.1640 0.7743 0.6112 +vn -0.2052 0.9718 0.1159 +vn -0.2048 0.9719 0.1161 +vn -0.6136 0.7897 0.0000 +vn -0.6676 0.7439 -0.0319 +vn -0.0000 0.9769 -0.2139 +vn 0.6676 0.7439 -0.0319 +vn 0.6135 0.7897 0.0000 +vn -0.1835 -0.0000 0.9830 +vn -0.1842 -0.0000 0.9829 +vn 0.1843 -0.0000 0.9829 +vn 0.1842 -0.0000 0.9829 +vn 0.1843 0.0000 -0.9829 +vn 0.1842 0.0000 -0.9829 +vn -0.1835 0.0000 -0.9830 +vn -0.1842 0.0000 -0.9829 +vn -0.6658 -0.7462 -0.0000 +vn -0.6135 -0.7897 -0.0000 +vn -0.6676 -0.7439 0.0319 +vn -0.7092 -0.6886 0.1512 +vn 0.6662 -0.7458 -0.0000 +vn 0.6131 -0.7900 -0.0000 +vn 0.6671 -0.7442 -0.0319 +vn 0.7097 -0.6882 -0.1508 +vn 0.0000 0.9768 0.2143 +vn 0.0000 0.9621 0.2726 +vn -0.7141 0.6975 0.0589 +vn -0.6675 0.7439 0.0323 +vn -0.7141 0.6975 -0.0590 +vn -0.0000 0.9621 -0.2726 +vn 0.7141 0.6975 0.0591 +vn 0.6676 0.7439 0.0323 +vn 0.7141 0.6975 -0.0590 +vn -0.7093 -0.6886 -0.1508 +vn -0.7406 -0.6466 -0.1831 +vn -0.7141 -0.6975 -0.0591 +vn -0.6676 -0.7439 -0.0319 +vn -0.7141 -0.6976 0.0594 +vn -0.7406 -0.6466 0.1831 +vn 0.7097 -0.6882 0.1511 +vn 0.7409 -0.6462 0.1830 +vn 0.7137 -0.6979 0.0594 +vn 0.6671 -0.7442 0.0319 +vn 0.7137 -0.6979 -0.0591 +vn 0.7409 -0.6462 -0.1829 +vn 0.6112 0.7744 -0.1635 +vn 0.6113 0.7743 -0.1635 +vn -0.0000 -0.2068 -0.9784 +vn 0.1166 0.9717 -0.2053 +vn 0.1158 0.9718 -0.2052 +vn 0.1166 0.9717 -0.2054 +vn -0.6112 0.7744 -0.1635 +vn -0.1166 0.9717 -0.2053 +vn -0.1158 0.9718 -0.2052 +vn 0.6112 0.7797 -0.1361 +vn 0.6112 0.7797 -0.1360 +vn -0.0000 -0.1720 -0.9851 +vn 0.1165 0.9784 -0.1710 +vn 0.1158 0.9785 -0.1707 +vn 0.1165 0.9783 -0.1711 +vn -0.0000 -0.1724 -0.9850 +vn -0.6112 0.7797 -0.1361 +vn -0.6112 0.7797 -0.1360 +vn -0.1165 0.9784 -0.1707 +vn -0.1158 0.9784 -0.1711 +vn -0.9962 -0.0225 0.0842 +vn -0.9962 -0.0225 0.0841 +vn -0.6126 0.7606 0.2149 +vn -0.6124 0.7607 0.2152 +vn -0.6128 0.7603 0.2154 +vn 0.0873 -0.2056 0.9747 +vn 0.0872 -0.2060 0.9747 +vn -0.1203 0.9691 0.2155 +vn -0.1203 0.9691 0.2156 +vn -0.1203 0.9690 0.2158 +vn 0.0865 -0.2060 0.9747 +vn 0.0873 -0.2060 0.9747 +vn 0.9962 0.0225 -0.0841 +vn 0.9962 0.0225 -0.0842 +vn 0.9962 0.0225 -0.0846 +vn 0.6052 0.7881 0.1124 +vn 0.6052 0.7881 0.1123 +vn 0.6053 0.7881 0.1124 +vn 0.0865 -0.2056 0.9748 +vn 0.1113 0.9743 0.1959 +vn 0.1120 0.9742 0.1959 +vn 0.1113 0.9744 0.1955 +vn -0.6111 0.7858 0.0955 +vn -0.6111 0.7858 0.0954 +vn 0.0000 -0.1209 0.9927 +vn 0.0000 -0.1205 0.9927 +vn -0.1158 0.9860 0.1200 +vn -0.1165 0.9859 0.1200 +vn 0.6111 0.7858 0.0955 +vn 0.6111 0.7858 0.0954 +vn 0.6111 0.7858 0.0956 +vn 0.1158 0.9860 0.1199 +vn 0.1158 0.9860 0.1200 +vn 0.1165 0.9859 0.1200 +vn 0.6112 0.7744 -0.1636 +vn 0.0000 0.2068 0.9784 +vn 0.1158 0.9718 -0.2053 +vn -0.6112 0.7744 -0.1636 +vn -0.1158 0.9718 -0.2053 +vn -0.1166 0.9717 -0.2054 +vn 0.0000 -0.1202 0.9928 +vn 0.0000 -1.0000 0.0037 +vn 0.0000 -0.9944 0.1060 +vn -0.0000 1.0000 -0.0033 +vn -0.0000 0.9944 -0.1057 +vn 0.0000 -0.9783 0.2071 +vn -0.0000 0.9783 -0.2071 +vn -0.0000 0.8219 -0.5696 +vn 0.0000 -0.9972 0.0744 +vn -0.0000 -1.0000 -0.0000 +vn 0.0000 0.8219 0.5696 +vn -0.0000 -0.9972 -0.0746 +vn 0.0000 -0.8093 0.5874 +vn 0.0000 -0.8091 0.5877 +vn -0.0000 -0.8094 -0.5873 +vn -0.0000 -0.8090 -0.5878 +vn -0.0000 0.9968 -0.0805 +vn -0.0000 0.9968 -0.0801 +vn 0.0000 0.9982 0.0593 +vn 0.0000 0.9983 0.0591 +vn 0.0000 0.9946 0.1034 +vn -0.0000 0.9980 -0.0635 +vn -0.0000 0.9980 -0.0637 +vn -0.0000 -0.9972 -0.0744 +vn 0.0000 -0.9848 0.1736 +vn 0.0000 -0.9849 0.1732 +vn -0.0000 0.9848 -0.1739 +vn -0.0000 0.9848 -0.1736 +vn -0.0000 -0.1737 -0.9848 +vn -1.0000 -0.0000 0.0001 +vn -1.0000 -0.0000 0.0002 +vn -0.0000 1.0000 0.0000 +vn -0.5699 0.8217 0.0000 +vn 0.0752 -0.9972 -0.0000 +vn 0.5699 0.8217 0.0000 +vn -0.0745 -0.9972 -0.0000 +vn 0.5874 -0.8093 -0.0000 +vn -0.5874 -0.8093 -0.0000 +vn -0.0805 0.9968 0.0000 +vn -0.0804 0.9968 0.0000 +vn 0.0594 0.9982 0.0000 +vn 0.1038 0.9946 0.0000 +vn -0.0632 0.9980 0.0000 +vn 0.0745 -0.9972 -0.0000 +vn -0.0752 -0.9972 -0.0000 +vn 0.0827 -0.9966 -0.0000 +vn -0.0834 0.9965 0.0000 +vn -0.0832 -0.9965 -0.0000 +vn 0.0832 0.9965 0.0000 +vn -0.5694 0.8221 0.0000 +vn 0.0744 -0.9972 -0.0000 +vn 0.5696 0.8219 0.0000 +vn -0.0736 -0.9973 -0.0000 +vn 0.5873 -0.8094 -0.0000 +vn -0.5879 -0.8090 -0.0000 +vn 0.0593 0.9982 0.0000 +vn 0.1030 0.9947 0.0000 +vn -0.0631 0.9980 0.0000 +vn 0.0736 -0.9973 -0.0000 +vn -0.0744 -0.9972 -0.0000 +vn 0.0083 0.0002 1.0000 +vn 0.0090 -0.0000 1.0000 +vn 0.0008 -0.0000 1.0000 +vn -0.0030 -0.0004 1.0000 +vn 0.6059 -0.7955 0.0000 +vn 0.6059 -0.7955 -0.0000 +vn 0.5195 -0.8545 -0.0000 +vn 0.5197 -0.8543 -0.0000 +vn 0.0414 0.0013 -0.9991 +vn -0.0143 -0.0015 -0.9999 +vn 0.0038 -0.0002 -1.0000 +vn 0.0421 0.0000 -0.9991 +vn -0.5949 0.8038 0.0000 +vn -0.6071 0.7946 0.0000 +vn 0.0000 -0.0008 1.0000 +vn -0.0000 -0.0027 -1.0000 +vn -0.0097 0.0002 1.0000 +vn 0.0031 -0.0004 1.0000 +vn -0.0008 -0.0000 1.0000 +vn -0.0097 -0.0000 1.0000 +vn -0.6220 -0.7830 0.0000 +vn -0.5287 -0.8488 -0.0000 +vn -0.5285 -0.8489 -0.0000 +vn -0.6220 -0.7830 -0.0000 +vn -0.0045 0.0000 -1.0000 +vn 0.0151 -0.0015 -0.9999 +vn -0.0428 0.0015 -0.9991 +vn -0.0436 0.0000 -0.9990 +vn 0.6165 0.7874 0.0000 +vn 0.6130 0.7901 0.0000 +vn 0.0000 -0.9739 0.2271 +vn 0.0000 -0.8861 0.4635 +vn 0.9991 -0.0050 -0.0421 +vn 0.9990 0.0000 -0.0447 +vn 1.0000 -0.0027 -0.0083 +vn 1.0000 -0.0004 -0.0072 +vn -0.0000 0.9710 -0.2393 +vn -0.0000 0.9163 -0.4005 +vn -0.9991 -0.0050 -0.0418 +vn -1.0000 -0.0004 -0.0072 +vn -1.0000 -0.0027 -0.0083 +vn -0.9990 0.0000 -0.0447 +vn 0.0000 -0.7442 0.6680 +vn 0.9997 0.0221 0.0049 +vn 0.9997 0.0244 -0.0000 +vn -0.0000 0.8358 -0.5490 +vn -0.9997 0.0244 0.0000 +vn -0.9997 0.0221 0.0049 +vn -0.0000 0.0757 -0.9971 +vn 1.0000 0.0034 -0.0000 +vn 0.0000 -0.0369 0.9993 +vn -0.9994 0.0356 0.0000 +vn -0.0158 0.0371 -0.9992 +vn 1.0000 -0.0032 -0.0000 +vn 0.0342 -0.0806 0.9962 +vn -0.9988 -0.0490 0.0000 +vn 0.0000 0.0757 0.9971 +vn -0.0000 -0.0369 -0.9993 +vn -0.0158 0.0371 0.9992 +vn 0.0342 -0.0806 -0.9962 +vn 0.0402 0.9992 0.0000 +vn -0.0402 0.9992 0.0000 +vn 0.0000 0.2273 0.9738 +vn -1.0000 -0.0040 0.0000 +vn -0.0000 -0.2273 -0.9738 +vn 1.0000 0.0040 -0.0000 +vn 0.0000 -0.2061 0.9785 +vn -1.0000 0.0036 0.0000 +vn -0.0000 0.2061 -0.9785 +vn 1.0000 -0.0036 -0.0000 +vn 0.0000 -0.8402 0.5423 +vn 0.9996 0.0126 0.0243 +vn -0.0000 0.8896 -0.4567 +vn -0.9996 0.0126 0.0244 +vn 0.0000 -0.5899 0.8075 +vn 0.9988 -0.0481 -0.0097 +vn -0.0000 0.6011 -0.7992 +vn -0.9988 -0.0481 -0.0097 +vn 0.9996 0.0126 0.0244 +vn -0.9996 0.0126 0.0243 +vn 0.8876 0.4607 0.0000 +vn 0.0448 0.9990 0.0000 +vn -0.8427 0.5383 0.0000 +vn -0.8876 -0.4607 -0.0000 +vn -0.0448 -0.9990 -0.0000 +vn 0.8427 -0.5383 -0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 0.7071 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn 0.7071 -0.7071 -0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.0448 0.9990 -0.0000 +vn -0.9858 0.0443 0.1620 +vn -0.9858 0.0442 -0.1620 +vn 0.3019 0.9534 -0.0000 +vn -0.3019 -0.9534 0.0000 +vn 0.0000 -0.0000 -1.0000 +vn 0.7381 0.6747 0.0000 +vn -0.0000 0.0000 1.0000 +vn -0.7381 -0.6747 -0.0000 +vn 0.9766 0.2153 0.0000 +vn -0.9766 -0.2153 -0.0000 +vn 0.9534 -0.3019 0.0000 +vn -0.9534 0.3018 -0.0000 +vn 0.6747 -0.7381 -0.0000 +vn 0.0000 0.0000 1.0000 +vn -0.6747 0.7381 -0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.2153 -0.9766 0.0000 +vn -0.2153 0.9766 -0.0000 +vn -0.3019 -0.9534 -0.0000 +vn 0.3019 0.9534 0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.9766 -0.2153 0.0000 +vn 0.9766 0.2153 -0.0000 +vn -0.9534 0.3019 -0.0000 +vn 0.6747 -0.7381 0.0000 +vn -0.2153 0.9766 0.0000 +vn 0.7381 0.6747 -0.0000 +vn -0.7381 -0.6747 0.0000 +vn 0.9534 -0.3019 -0.0000 +vn -0.9534 0.3019 0.0000 +vn -0.6747 0.7381 0.0000 +vn 0.2153 -0.9766 -0.0000 +vn 0.4158 0.9095 -0.0000 +vn -0.4158 -0.9095 -0.0000 +vn -0.8974 0.4104 0.1620 +vn 0.4158 0.9095 0.0000 +vn -0.8974 0.4103 -0.1621 +vn 0.0448 -0.9990 -0.0000 +vn 0.0281 -0.6272 -0.7784 +vn 0.8876 -0.4607 0.0000 +vn 0.5572 -0.2892 -0.7784 +vn 0.8427 0.5383 0.0000 +vn 0.5291 0.3380 -0.7784 +vn -0.0448 0.9990 0.0000 +vn -0.0281 0.6272 -0.7784 +vn -0.8876 0.4607 -0.0000 +vn -0.5572 0.2892 -0.7784 +vn -0.8427 -0.5383 -0.0000 +vn -0.5291 -0.3380 -0.7784 +vn 0.0000 -1.0000 -0.0000 +vn 0.7262 0.6875 -0.0000 +vn -0.7262 -0.6875 0.0000 +vn -0.6784 0.7166 0.1620 +vn 0.7262 0.6875 0.0000 +vn -0.7262 -0.6875 -0.0000 +vn -0.6784 0.7166 -0.1620 +vn 0.9309 0.3654 -0.0000 +vn -0.9309 -0.3654 -0.0000 +vn -0.3605 0.9186 0.1620 +vn 0.9309 0.3654 0.0000 +vn -0.9309 -0.3654 0.0000 +vn -0.3605 0.9186 -0.1620 +vn 0.0000 -1.0000 0.0000 +vn 0.3976 -0.9175 -0.0000 +vn -0.3976 0.9175 -0.0000 +vn 0.9054 0.3924 0.1620 +vn 0.3976 -0.9175 0.0000 +vn -0.3976 0.9175 0.0000 +vn 0.9054 0.3924 -0.1620 +vn 1.0000 -0.0100 0.0000 +vn -1.0000 0.0099 -0.0000 +vn 0.0098 0.9867 0.1620 +vn 1.0000 -0.0100 -0.0000 +vn -1.0000 0.0099 0.0000 +vn 0.0098 0.9867 -0.1620 +vn 0.9234 -0.3838 0.0000 +vn -0.9234 0.3838 -0.0000 +vn 0.3788 0.9112 0.1620 +vn 0.9234 -0.3838 -0.0000 +vn 0.3787 0.9112 -0.1620 +vn 0.7124 -0.7018 0.0000 +vn -0.7124 0.7018 0.0000 +vn 0.6925 0.7030 0.1620 +vn -0.7124 0.7018 -0.0000 +vn 0.6925 0.7030 -0.1620 +vn 0.0281 0.6272 0.7784 +vn 0.8876 0.4607 -0.0000 +vn 0.5572 0.2892 0.7784 +vn 0.5291 -0.3380 0.7784 +vn -0.0448 -0.9990 0.0000 +vn -0.0281 -0.6272 0.7784 +vn -0.8876 -0.4607 0.0000 +vn -0.5572 -0.2892 0.7784 +vn -0.5291 0.3380 0.7784 +vn -0.9031 -0.4294 -0.0000 +vn 0.9031 0.4294 0.0000 +vn 0.4238 -0.8912 0.1620 +vn 0.9031 0.4294 -0.0000 +vn 0.4238 -0.8912 -0.1620 +vn -0.4607 0.8876 0.0000 +vn 0.4607 -0.8876 -0.0000 +vn -0.8758 -0.4546 0.1620 +vn -0.4607 0.8876 -0.0000 +vn 0.4607 -0.8876 0.0000 +vn -0.8758 -0.4546 -0.1620 +vn -0.7596 0.6504 -0.0000 +vn 0.7596 -0.6504 0.0000 +vn -0.6417 -0.7496 0.1620 +vn -0.6418 -0.7496 -0.1620 +vn -0.6765 -0.7365 -0.0000 +vn 0.6765 0.7365 0.0000 +vn 0.7267 -0.6676 0.1620 +vn -0.6765 -0.7365 0.0000 +vn 0.6765 0.7365 -0.0000 +vn 0.7267 -0.6676 -0.1620 +vn 0.0000 0.0428 0.9991 +vn -1.0000 0.0037 0.0000 +vn -0.0000 0.0050 -1.0000 +vn 0.9990 0.0441 -0.0000 +vn 0.0000 -0.0287 0.9996 +vn -1.0000 -0.0023 -0.0010 +vn -0.0000 -0.0030 -1.0000 +vn 0.9995 -0.0278 -0.0125 +vn -0.9982 -0.0598 0.0000 +vn 0.9982 0.0599 0.0000 +vn 0.0590 -0.9850 0.1620 +vn -0.9982 -0.0598 -0.0000 +vn 0.9982 0.0598 0.0000 +vn 0.0591 -0.9850 -0.1620 +vn -0.9479 0.3184 0.0000 +vn 0.9479 -0.3185 0.0000 +vn -0.3143 -0.9354 0.1620 +vn -0.9479 0.3184 -0.0000 +vn 0.9479 -0.3185 -0.0000 +vn -0.3143 -0.9354 -0.1620 +vn -0.3513 -0.9363 0.0000 +vn 0.3513 0.9363 0.0000 +vn 0.9239 -0.3467 0.1620 +vn -0.3513 -0.9363 -0.0000 +vn 0.3513 0.9363 -0.0000 +vn 0.9239 -0.3467 -0.1620 +vn 0.0250 -0.9997 -0.0000 +vn -0.0250 0.9997 -0.0000 +vn 0.9865 0.0247 0.1620 +vn -0.0250 0.9997 0.0000 +vn 0.9865 0.0246 -0.1620 +vn 0.0000 -0.9981 0.0621 +vn -0.0000 0.9981 -0.0621 +vn 0.0000 -0.9981 -0.0621 +vn -0.0000 0.9981 0.0621 +vn -1.0000 0.0034 0.0000 +vn 0.9994 0.0356 -0.0000 +vn -0.0319 -0.0752 0.9967 +vn -1.0000 -0.0029 0.0000 +vn 0.0156 0.0366 -0.9992 +vn 0.9991 -0.0423 -0.0000 +vn -0.0621 -0.9981 -0.0000 +vn 0.0621 0.9981 0.0000 +vn 0.0621 -0.9981 -0.0000 +vn -0.0621 0.9981 0.0000 +vn 0.0319 -0.0752 0.9967 +vn 1.0000 -0.0029 -0.0000 +vn -0.0156 0.0366 -0.9992 +vn -0.9991 -0.0423 0.0000 +vn -0.0000 0.0428 -0.9991 +vn 0.0000 0.0050 1.0000 +vn -0.0000 -0.0287 -0.9996 +vn -1.0000 -0.0023 0.0010 +vn 0.0000 -0.0030 1.0000 +vn 0.9995 -0.0278 0.0125 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -0.9981 -0.0621 +vn 0.0000 0.9981 0.0621 +vn 0.0687 -0.0000 0.9976 +vn 0.3992 0.9169 0.0000 +vn 0.0687 -0.0000 -0.9976 +vn -0.2476 -0.9689 0.0000 +vn -0.0687 0.0000 0.9976 +vn -0.3992 0.9169 0.0000 +vn -0.0687 -0.0000 -0.9976 +vn 0.2476 -0.9689 -0.0000 +vn -0.0000 0.1045 -0.9945 +vn -0.9992 0.0409 0.0000 +vn 0.0000 0.0335 0.9994 +vn 0.9945 0.1049 -0.0000 +vn -0.0000 -0.0253 -0.9997 +vn -1.0000 -0.0049 0.0000 +vn 0.0000 -0.0011 1.0000 +vn 0.9988 -0.0497 -0.0000 +vn 0.9992 0.0409 -0.0000 +vn -0.9945 0.1049 0.0000 +vn 1.0000 -0.0049 -0.0000 +vn -0.9988 -0.0497 0.0000 +vn 1.0000 0.0037 -0.0000 +vn -0.9990 0.0441 0.0000 +vn 1.0000 -0.0023 0.0010 +vn -0.9995 -0.0278 0.0125 +vn 1.0000 -0.0023 -0.0010 +vn -0.9995 -0.0278 -0.0125 +vn -0.8427 -0.5383 0.0000 +vn -0.0000 0.9952 -0.0983 +vn -0.0000 0.0770 0.9970 +vn 0.9377 0.3472 0.0115 +vn 0.0000 0.0106 -0.9999 +vn -0.9379 0.3466 0.0115 +# 693 vertex normals + +vt 0.1884 0.3161 0.0000 +vt 0.1688 0.2372 0.0000 +vt 0.1720 0.2371 0.0000 +vt 0.1916 0.3161 0.0000 +vt 0.1897 0.3947 0.0000 +vt 0.1929 0.3947 0.0000 +vt 0.1761 0.4742 0.0000 +vt 0.1729 0.4743 0.0000 +vt 0.8659 0.5518 0.0000 +vt 0.8811 0.5518 0.0000 +vt 0.2678 0.4000 0.0000 +vt 0.3731 0.4000 0.0000 +vt 0.3775 0.5142 0.0000 +vt 0.3625 0.5142 0.0000 +vt 0.2785 0.5142 0.0000 +vt 0.2634 0.5142 0.0000 +vt 0.8659 0.7423 0.0000 +vt 0.8811 0.7423 0.0000 +vt 0.2378 0.6247 0.0000 +vt 0.2378 0.7564 0.0000 +vt 0.0073 0.7564 0.0000 +vt 0.0073 0.6247 0.0000 +vt 0.3222 0.6253 0.0000 +vt 0.3222 0.8615 0.0000 +vt 0.3859 0.7813 0.0000 +vt 0.3859 0.6253 0.0000 +vt 0.3977 0.6216 0.0000 +vt 0.3977 0.7587 0.0000 +vt 0.6692 0.7587 0.0000 +vt 0.6692 0.6216 0.0000 +vt 0.2584 0.6253 0.0000 +vt 0.2584 0.7813 0.0000 +vt 0.6393 0.8948 0.0000 +vt 0.6603 0.9912 0.0000 +vt 0.5682 0.9915 0.0000 +vt 0.5679 0.8988 0.0000 +vt 0.4652 0.3844 0.0000 +vt 0.3951 0.3844 0.0000 +vt 0.3951 0.3767 0.0000 +vt 0.4652 0.3767 0.0000 +vt 0.5293 0.8048 0.0000 +vt 0.6002 0.8912 0.0000 +vt 0.6002 0.8852 0.0000 +vt 0.5293 0.7988 0.0000 +vt 0.6712 0.8048 0.0000 +vt 0.6712 0.7988 0.0000 +vt 0.7279 0.8770 0.0000 +vt 0.7512 0.9909 0.0000 +vt 0.0986 0.9914 0.0000 +vt 0.0076 0.9910 0.0000 +vt 0.0312 0.8770 0.0000 +vt 0.1198 0.8951 0.0000 +vt 0.1907 0.9919 0.0000 +vt 0.1911 0.8992 0.0000 +vt 0.5509 0.3767 0.0000 +vt 0.5509 0.3844 0.0000 +vt 0.3047 0.3948 0.0000 +vt 0.2353 0.3943 0.0000 +vt 0.2353 0.3891 0.0000 +vt 0.3047 0.3895 0.0000 +vt 0.3615 0.3951 0.0000 +vt 0.3615 0.3898 0.0000 +vt 0.4965 0.8953 0.0000 +vt 0.4761 0.9918 0.0000 +vt 0.3250 0.3844 0.0000 +vt 0.3250 0.3767 0.0000 +vt 0.3852 0.9921 0.0000 +vt 0.4078 0.8780 0.0000 +vt 0.3512 0.8786 0.0000 +vt 0.3737 0.9928 0.0000 +vt 0.2827 0.9924 0.0000 +vt 0.2625 0.8958 0.0000 +vt 0.2393 0.3844 0.0000 +vt 0.2393 0.3767 0.0000 +vt 0.4877 0.3906 0.0000 +vt 0.4876 0.3958 0.0000 +vt 0.4182 0.3954 0.0000 +vt 0.4182 0.3902 0.0000 +vt 0.1962 0.8161 0.0000 +vt 0.2250 0.8102 0.0000 +vt 0.2249 0.8378 0.0000 +vt 0.1972 0.8377 0.0000 +vt 0.2537 0.8163 0.0000 +vt 0.2525 0.8379 0.0000 +vt 0.2248 0.8654 0.0000 +vt 0.2247 0.8925 0.0000 +vt 0.1909 0.8859 0.0000 +vt 0.1961 0.8592 0.0000 +vt 0.1913 0.7894 0.0000 +vt 0.2251 0.7831 0.0000 +vt 0.2535 0.8594 0.0000 +vt 0.2585 0.8862 0.0000 +vt 0.2588 0.7896 0.0000 +vt 0.7429 0.6168 0.0000 +vt 0.7429 0.8534 0.0000 +vt 0.6776 0.7729 0.0000 +vt 0.6776 0.6168 0.0000 +vt 0.8082 0.6168 0.0000 +vt 0.8082 0.7729 0.0000 +vt 0.9227 0.9895 0.0000 +vt 0.9227 0.9512 0.0000 +vt 0.9293 0.9512 0.0000 +vt 0.9293 0.9895 0.0000 +vt 0.9004 0.9895 0.0000 +vt 0.9005 0.9511 0.0000 +vt 0.9267 0.9948 0.0000 +vt 0.9044 0.9948 0.0000 +vt 0.8966 0.9511 0.0000 +vt 0.8966 0.9894 0.0000 +vt 0.8966 0.9959 0.0000 +vt 0.9005 0.9962 0.0000 +vt 0.8639 0.9512 0.0000 +vt 0.8705 0.9512 0.0000 +vt 0.8705 0.9895 0.0000 +vt 0.8639 0.9896 0.0000 +vt 0.8928 0.9511 0.0000 +vt 0.8928 0.9895 0.0000 +vt 0.8888 0.9948 0.0000 +vt 0.8665 0.9948 0.0000 +vt 0.8927 0.9962 0.0000 +vt 0.9864 0.9556 0.0000 +vt 0.9864 0.9896 0.0000 +vt 0.9923 0.9896 0.0000 +vt 0.9923 0.9556 0.0000 +vt 0.9699 0.9941 0.0000 +vt 0.9899 0.9944 0.0000 +vt 0.9668 0.9894 0.0000 +vt 0.9668 0.9558 0.0000 +vt 0.9699 0.9511 0.0000 +vt 0.9899 0.9508 0.0000 +vt 0.9636 0.9900 0.0000 +vt 0.9666 0.9954 0.0000 +vt 0.9636 0.9552 0.0000 +vt 0.9666 0.9497 0.0000 +vt 0.9349 0.9896 0.0000 +vt 0.9408 0.9896 0.0000 +vt 0.9408 0.9556 0.0000 +vt 0.9349 0.9556 0.0000 +vt 0.9373 0.9944 0.0000 +vt 0.9573 0.9941 0.0000 +vt 0.9604 0.9894 0.0000 +vt 0.9604 0.9558 0.0000 +vt 0.9573 0.9511 0.0000 +vt 0.9373 0.9508 0.0000 +vt 0.9606 0.9954 0.0000 +vt 0.9606 0.9497 0.0000 +vt 0.1239 0.8661 0.0000 +vt 0.1267 0.7769 0.0000 +vt 0.0818 0.7722 0.0000 +vt 0.0642 0.8658 0.0000 +vt 0.8811 0.6471 0.0000 +vt 0.8811 0.5994 0.0000 +vt 0.8735 0.7423 0.0000 +vt 0.8659 0.6471 0.0000 +vt 0.8659 0.6947 0.0000 +vt 0.8735 0.6471 0.0000 +vt 0.8735 0.5994 0.0000 +vt 0.8735 0.6947 0.0000 +vt 0.1822 0.8667 0.0000 +vt 0.1730 0.7754 0.0000 +vt 0.0351 0.7642 0.0000 +vt 0.0061 0.8654 0.0000 +vt 0.8811 0.6947 0.0000 +vt 0.8659 0.5994 0.0000 +vt 0.8735 0.5518 0.0000 +vt 0.6444 0.2297 0.0000 +vt 0.6444 0.2727 0.0000 +vt 0.5991 0.2727 0.0000 +vt 0.5991 0.2297 0.0000 +vt 0.4953 0.2059 0.0000 +vt 0.4953 0.0967 0.0000 +vt 0.4666 0.0967 0.0000 +vt 0.4666 0.2059 0.0000 +vt 0.5046 0.2222 0.0000 +vt 0.5145 0.1045 0.0000 +vt 0.5422 0.1069 0.0000 +vt 0.5323 0.2246 0.0000 +vt 0.4953 0.0054 0.0000 +vt 0.4666 0.0054 0.0000 +vt 0.5025 0.0043 0.0000 +vt 0.5302 0.0067 0.0000 +vt 0.9428 0.4005 0.0000 +vt 0.9431 0.4547 0.0000 +vt 0.9608 0.4418 0.0000 +vt 0.9606 0.4015 0.0000 +vt 0.9778 0.3925 0.0000 +vt 0.9778 0.4048 0.0000 +vt 0.9864 0.4048 0.0000 +vt 0.9864 0.3925 0.0000 +vt 0.8648 0.4175 0.0000 +vt 0.8648 0.4561 0.0000 +vt 0.8691 0.4561 0.0000 +vt 0.8691 0.4175 0.0000 +vt 0.9700 0.3925 0.0000 +vt 0.9700 0.4048 0.0000 +vt 0.9875 0.3622 0.0000 +vt 0.9713 0.3620 0.0000 +vt 0.9713 0.3644 0.0000 +vt 0.9874 0.3646 0.0000 +vt 0.9862 0.3834 0.0000 +vt 0.9757 0.3888 0.0000 +vt 0.9862 0.3899 0.0000 +vt 0.9623 0.4520 0.0000 +vt 0.9428 0.4662 0.0000 +vt 0.9428 0.4766 0.0000 +vt 0.9725 0.4560 0.0000 +vt 0.9252 0.3899 0.0000 +vt 0.9356 0.3892 0.0000 +vt 0.9252 0.3834 0.0000 +vt 0.9557 0.3876 0.0000 +vt 0.9557 0.3811 0.0000 +vt 0.9251 0.4021 0.0000 +vt 0.9253 0.4419 0.0000 +vt 0.8648 0.4948 0.0000 +vt 0.8691 0.4948 0.0000 +vt 0.9551 0.3618 0.0000 +vt 0.9551 0.3641 0.0000 +vt 0.9233 0.4520 0.0000 +vt 0.9131 0.4560 0.0000 +vt 0.8751 0.3692 0.0000 +vt 0.8751 0.4273 0.0000 +vt 0.8790 0.4273 0.0000 +vt 0.8790 0.3692 0.0000 +vt 0.8751 0.4589 0.0000 +vt 0.8790 0.4589 0.0000 +vt 0.8751 0.4906 0.0000 +vt 0.8790 0.4906 0.0000 +vt 0.8751 0.5481 0.0000 +vt 0.8790 0.5481 0.0000 +vt 0.9280 0.3763 0.0000 +vt 0.9513 0.3758 0.0000 +vt 0.9513 0.3736 0.0000 +vt 0.9279 0.3740 0.0000 +vt 0.9746 0.3753 0.0000 +vt 0.9746 0.3731 0.0000 +vt 0.9131 0.4088 0.0000 +vt 0.9233 0.4082 0.0000 +vt 0.8691 0.5453 0.0000 +vt 0.8648 0.5453 0.0000 +vt 0.8648 0.3670 0.0000 +vt 0.8691 0.3670 0.0000 +vt 0.9725 0.4088 0.0000 +vt 0.9623 0.4078 0.0000 +vt 0.9868 0.3695 0.0000 +vt 0.9745 0.3698 0.0000 +vt 0.9868 0.3728 0.0000 +vt 0.9512 0.3703 0.0000 +vt 0.9278 0.3707 0.0000 +vt 0.9156 0.3709 0.0000 +vt 0.9157 0.3743 0.0000 +vt 0.9875 0.3597 0.0000 +vt 0.9713 0.3594 0.0000 +vt 0.9552 0.3592 0.0000 +vt 0.9929 0.3757 0.0000 +vt 0.9929 0.3727 0.0000 +vt 0.9869 0.3759 0.0000 +vt 0.9928 0.3694 0.0000 +vt 0.9914 0.3899 0.0000 +vt 0.9914 0.3834 0.0000 +vt 0.9524 0.3592 0.0000 +vt 0.9524 0.3617 0.0000 +vt 0.9524 0.3641 0.0000 +vt 0.9902 0.3646 0.0000 +vt 0.9902 0.3623 0.0000 +vt 0.9902 0.3597 0.0000 +vt 0.9200 0.3834 0.0000 +vt 0.9200 0.3899 0.0000 +vt 0.9096 0.3711 0.0000 +vt 0.9097 0.3744 0.0000 +vt 0.9097 0.3774 0.0000 +vt 0.9157 0.3773 0.0000 +vt 0.1289 0.3537 0.0000 +vt 0.0137 0.3537 0.0000 +vt 0.0137 0.4382 0.0000 +vt 0.1289 0.4382 0.0000 +vt 0.4766 0.4518 0.0000 +vt 0.4766 0.4572 0.0000 +vt 0.3830 0.4573 0.0000 +vt 0.3830 0.4518 0.0000 +vt 0.6096 0.4518 0.0000 +vt 0.6096 0.4572 0.0000 +vt 0.7033 0.4518 0.0000 +vt 0.7033 0.4572 0.0000 +vt 0.5240 0.7648 0.0000 +vt 0.5240 0.8937 0.0000 +vt 0.3951 0.8248 0.0000 +vt 0.3951 0.7648 0.0000 +vt 0.1505 0.2812 0.0000 +vt 0.1505 0.3422 0.0000 +vt 0.0082 0.3422 0.0000 +vt 0.0082 0.2812 0.0000 +vt 0.0716 0.4485 0.0000 +vt 0.0716 0.5484 0.0000 +vt 0.0217 0.5068 0.0000 +vt 0.0217 0.4485 0.0000 +vt 0.8234 0.8593 0.0000 +vt 0.8234 0.9411 0.0000 +vt 0.9925 0.9411 0.0000 +vt 0.9925 0.8593 0.0000 +vt 0.1215 0.4485 0.0000 +vt 0.1215 0.5068 0.0000 +vt 0.8901 0.5180 0.0000 +vt 0.8901 0.7490 0.0000 +vt 0.9156 0.6965 0.0000 +vt 0.9156 0.5234 0.0000 +vt 0.2486 0.4756 0.0000 +vt 0.1896 0.5421 0.0000 +vt 0.1896 0.4976 0.0000 +vt 0.2355 0.4593 0.0000 +vt 0.1306 0.4756 0.0000 +vt 0.1436 0.4593 0.0000 +vt 0.6350 0.2846 0.0000 +vt 0.6350 0.3431 0.0000 +vt 0.5881 0.3431 0.0000 +vt 0.5881 0.2846 0.0000 +vt 0.6820 0.2846 0.0000 +vt 0.6820 0.3431 0.0000 +vt 0.9915 0.8501 0.0000 +vt 0.8954 0.8501 0.0000 +vt 0.8954 0.7507 0.0000 +vt 0.9915 0.7507 0.0000 +vt 0.3786 0.1451 0.0000 +vt 0.3786 0.3326 0.0000 +vt 0.3891 0.3326 0.0000 +vt 0.3891 0.1451 0.0000 +vt 0.7667 0.3346 0.0000 +vt 0.7673 0.4164 0.0000 +vt 0.7555 0.4165 0.0000 +vt 0.7548 0.3347 0.0000 +vt 0.4133 0.1416 0.0000 +vt 0.4006 0.2464 0.0000 +vt 0.4186 0.2464 0.0000 +vt 0.4313 0.1416 0.0000 +vt 0.2607 0.1423 0.0000 +vt 0.2607 0.2438 0.0000 +vt 0.2461 0.2438 0.0000 +vt 0.2461 0.1423 0.0000 +vt 0.2607 0.1303 0.0000 +vt 0.2461 0.1303 0.0000 +vt 0.2607 0.3453 0.0000 +vt 0.2607 0.3573 0.0000 +vt 0.2461 0.3573 0.0000 +vt 0.2461 0.3453 0.0000 +vt 0.7679 0.4982 0.0000 +vt 0.7561 0.4983 0.0000 +vt 0.4133 0.3512 0.0000 +vt 0.4313 0.3512 0.0000 +vt 0.4482 0.2391 0.0000 +vt 0.4482 0.2206 0.0000 +vt 0.4893 0.2545 0.0000 +vt 0.4855 0.2691 0.0000 +vt 0.9854 0.7385 0.0000 +vt 0.9580 0.7382 0.0000 +vt 0.9610 0.6700 0.0000 +vt 0.9857 0.6703 0.0000 +vt 0.9502 0.7399 0.0000 +vt 0.9501 0.6811 0.0000 +vt 0.9264 0.6809 0.0000 +vt 0.9239 0.7397 0.0000 +vt 0.5220 0.2714 0.0000 +vt 0.5220 0.3003 0.0000 +vt 0.9593 0.6220 0.0000 +vt 0.9868 0.6223 0.0000 +vt 0.9510 0.6222 0.0000 +vt 0.9246 0.6221 0.0000 +vt 0.5941 0.2391 0.0000 +vt 0.5585 0.2691 0.0000 +vt 0.5548 0.2545 0.0000 +vt 0.5941 0.2206 0.0000 +vt 0.9881 0.5079 0.0000 +vt 0.9869 0.5744 0.0000 +vt 0.9621 0.5741 0.0000 +vt 0.9607 0.5076 0.0000 +vt 0.9272 0.5632 0.0000 +vt 0.9509 0.5634 0.0000 +vt 0.9517 0.5063 0.0000 +vt 0.9254 0.5061 0.0000 +vt 0.4201 0.0039 0.0000 +vt 0.4228 0.0782 0.0000 +vt 0.4000 0.0782 0.0000 +vt 0.4027 0.0039 0.0000 +vt 0.5790 0.0082 0.0000 +vt 0.5482 0.0194 0.0000 +vt 0.5565 0.1052 0.0000 +vt 0.5903 0.1113 0.0000 +vt 0.4550 0.0050 0.0000 +vt 0.4584 0.0840 0.0000 +vt 0.4292 0.0840 0.0000 +vt 0.4327 0.0050 0.0000 +vt 0.4218 0.1384 0.0000 +vt 0.4010 0.1384 0.0000 +vt 0.5435 0.1550 0.0000 +vt 0.5563 0.1901 0.0000 +vt 0.4572 0.1306 0.0000 +vt 0.4305 0.1306 0.0000 +vt 0.8039 0.3638 0.0000 +vt 0.7807 0.3638 0.0000 +vt 0.7828 0.4242 0.0000 +vt 0.8037 0.4242 0.0000 +vt 0.8351 0.3650 0.0000 +vt 0.8563 0.3650 0.0000 +vt 0.8522 0.4238 0.0000 +vt 0.8331 0.4238 0.0000 +vt 0.8101 0.3656 0.0000 +vt 0.8081 0.4227 0.0000 +vt 0.8272 0.4227 0.0000 +vt 0.8313 0.3656 0.0000 +vt 0.7807 0.4750 0.0000 +vt 0.8039 0.4940 0.0000 +vt 0.8563 0.4919 0.0000 +vt 0.8351 0.4919 0.0000 +vt 0.8101 0.4708 0.0000 +vt 0.8313 0.4708 0.0000 +vt 0.5601 0.4797 0.0000 +vt 0.3807 0.4797 0.0000 +vt 0.3807 0.4762 0.0000 +vt 0.5601 0.4762 0.0000 +vt 0.3807 0.4633 0.0000 +vt 0.5601 0.4633 0.0000 +vt 0.5889 0.5255 0.0000 +vt 0.3840 0.5255 0.0000 +vt 0.3840 0.5208 0.0000 +vt 0.5889 0.5208 0.0000 +vt 0.3840 0.5035 0.0000 +vt 0.5889 0.5035 0.0000 +vt 0.5706 0.5490 0.0000 +vt 0.5706 0.5533 0.0000 +vt 0.3808 0.5541 0.0000 +vt 0.3807 0.5498 0.0000 +vt 0.5705 0.5330 0.0000 +vt 0.3807 0.5338 0.0000 +vt 0.5090 0.3650 0.0000 +vt 0.5148 0.3650 0.0000 +vt 0.5148 0.3726 0.0000 +vt 0.5090 0.3726 0.0000 +vt 0.3303 0.3726 0.0000 +vt 0.3303 0.3650 0.0000 +vt 0.3361 0.3650 0.0000 +vt 0.3361 0.3726 0.0000 +vt 0.3313 0.3566 0.0000 +vt 0.4236 0.3528 0.0000 +vt 0.4236 0.3590 0.0000 +vt 0.3313 0.3628 0.0000 +vt 0.4226 0.3726 0.0000 +vt 0.4226 0.3650 0.0000 +vt 0.5159 0.3564 0.0000 +vt 0.5159 0.3626 0.0000 +vt 0.2855 0.3255 0.0000 +vt 0.2635 0.3255 0.0000 +vt 0.2636 0.2915 0.0000 +vt 0.2856 0.2915 0.0000 +vt 0.3158 0.3260 0.0000 +vt 0.2915 0.3260 0.0000 +vt 0.2991 0.2927 0.0000 +vt 0.3234 0.2927 0.0000 +vt 0.2856 0.3631 0.0000 +vt 0.2636 0.3631 0.0000 +vt 0.3234 0.3630 0.0000 +vt 0.2991 0.3630 0.0000 +vt 0.6413 0.0064 0.0000 +vt 0.6382 0.1433 0.0000 +vt 0.6038 0.1433 0.0000 +vt 0.6006 0.0064 0.0000 +vt 0.8881 0.1417 0.0000 +vt 0.9069 0.2171 0.0000 +vt 0.9339 0.2250 0.0000 +vt 0.9181 0.1117 0.0000 +vt 0.3745 0.0027 0.0000 +vt 0.3762 0.0672 0.0000 +vt 0.3946 0.0672 0.0000 +vt 0.3963 0.0027 0.0000 +vt 0.6413 0.2231 0.0000 +vt 0.6006 0.2231 0.0000 +vt 0.8952 0.2709 0.0000 +vt 0.9181 0.2937 0.0000 +vt 0.3745 0.1420 0.0000 +vt 0.3963 0.1420 0.0000 +vt 0.2243 0.5355 0.0000 +vt 0.3737 0.5358 0.0000 +vt 0.3737 0.5416 0.0000 +vt 0.2243 0.5412 0.0000 +vt 0.2244 0.5297 0.0000 +vt 0.3737 0.5300 0.0000 +vt 0.2244 0.5239 0.0000 +vt 0.3737 0.5242 0.0000 +vt 0.2244 0.5181 0.0000 +vt 0.3738 0.5184 0.0000 +vt 0.2243 0.5470 0.0000 +vt 0.3737 0.5474 0.0000 +vt 0.3737 0.5532 0.0000 +vt 0.2243 0.5528 0.0000 +vt 0.9692 0.3535 0.0000 +vt 0.9522 0.3535 0.0000 +vt 0.9522 0.3319 0.0000 +vt 0.9692 0.3319 0.0000 +vt 0.9670 0.0975 0.0000 +vt 0.9670 0.3286 0.0000 +vt 0.9536 0.3286 0.0000 +vt 0.9536 0.0975 0.0000 +vt 0.9928 0.1002 0.0000 +vt 0.9928 0.3274 0.0000 +vt 0.9761 0.3274 0.0000 +vt 0.9761 0.1002 0.0000 +vt 0.9286 0.0130 0.0000 +vt 0.9286 0.0967 0.0000 +vt 0.9842 0.0862 0.0000 +vt 0.9842 0.0130 0.0000 +vt 0.9440 0.3357 0.0000 +vt 0.9446 0.3624 0.0000 +vt 0.7859 0.3613 0.0000 +vt 0.7853 0.3347 0.0000 +vt 0.8517 0.3105 0.0000 +vt 0.8517 0.3273 0.0000 +vt 0.7609 0.3271 0.0000 +vt 0.7609 0.3103 0.0000 +vt 0.8729 0.0130 0.0000 +vt 0.8729 0.0862 0.0000 +vt 0.9426 0.3107 0.0000 +vt 0.9425 0.3275 0.0000 +vt 0.0106 0.5607 0.0000 +vt 0.0693 0.5607 0.0000 +vt 0.0693 0.5818 0.0000 +vt 0.0106 0.5818 0.0000 +vt 0.1315 0.2244 0.0000 +vt 0.1820 0.2084 0.0000 +vt 0.1909 0.2224 0.0000 +vt 0.1322 0.2410 0.0000 +vt 0.0484 0.5931 0.0000 +vt 0.0985 0.5931 0.0000 +vt 0.0985 0.6094 0.0000 +vt 0.0484 0.6094 0.0000 +vt 0.1312 0.2169 0.0000 +vt 0.1779 0.2021 0.0000 +vt 0.1708 0.1910 0.0000 +vt 0.1306 0.2037 0.0000 +vt 0.1280 0.5607 0.0000 +vt 0.1280 0.5818 0.0000 +vt 0.2177 0.1694 0.0000 +vt 0.2324 0.1770 0.0000 +vt 0.1486 0.5931 0.0000 +vt 0.1486 0.6094 0.0000 +vt 0.2110 0.1659 0.0000 +vt 0.1993 0.1598 0.0000 +vt 0.1867 0.5607 0.0000 +vt 0.1867 0.5818 0.0000 +vt 0.2291 0.1177 0.0000 +vt 0.2457 0.1169 0.0000 +vt 0.1987 0.5931 0.0000 +vt 0.1987 0.6094 0.0000 +vt 0.2216 0.1180 0.0000 +vt 0.2084 0.1186 0.0000 +vt 0.2455 0.5607 0.0000 +vt 0.2455 0.5818 0.0000 +vt 0.2131 0.0672 0.0000 +vt 0.2271 0.0583 0.0000 +vt 0.2488 0.5931 0.0000 +vt 0.2488 0.6094 0.0000 +vt 0.2068 0.0712 0.0000 +vt 0.1956 0.0784 0.0000 +vt 0.3042 0.5607 0.0000 +vt 0.3042 0.5818 0.0000 +vt 0.1740 0.0315 0.0000 +vt 0.1817 0.0167 0.0000 +vt 0.2989 0.5931 0.0000 +vt 0.2989 0.6094 0.0000 +vt 0.1706 0.0381 0.0000 +vt 0.1645 0.0499 0.0000 +vt 0.3629 0.5607 0.0000 +vt 0.3629 0.5818 0.0000 +vt 0.1223 0.0201 0.0000 +vt 0.1216 0.0035 0.0000 +vt 0.3490 0.5931 0.0000 +vt 0.3490 0.6094 0.0000 +vt 0.1227 0.0276 0.0000 +vt 0.1233 0.0408 0.0000 +vt 0.4216 0.5607 0.0000 +vt 0.4216 0.5818 0.0000 +vt 0.0719 0.0361 0.0000 +vt 0.0629 0.0221 0.0000 +vt 0.3991 0.5931 0.0000 +vt 0.3991 0.6094 0.0000 +vt 0.0759 0.0424 0.0000 +vt 0.0830 0.0535 0.0000 +vt 0.4803 0.5607 0.0000 +vt 0.4803 0.5818 0.0000 +vt 0.0361 0.0751 0.0000 +vt 0.0214 0.0675 0.0000 +vt 0.4492 0.5931 0.0000 +vt 0.4492 0.6094 0.0000 +vt 0.0428 0.0786 0.0000 +vt 0.0545 0.0847 0.0000 +vt 0.5391 0.5607 0.0000 +vt 0.5391 0.5818 0.0000 +vt 0.0247 0.1268 0.0000 +vt 0.0082 0.1276 0.0000 +vt 0.4993 0.5931 0.0000 +vt 0.4993 0.6094 0.0000 +vt 0.0322 0.1265 0.0000 +vt 0.0455 0.1259 0.0000 +vt 0.5978 0.5607 0.0000 +vt 0.5978 0.5818 0.0000 +vt 0.0407 0.1773 0.0000 +vt 0.0267 0.1862 0.0000 +vt 0.5494 0.5931 0.0000 +vt 0.5494 0.6094 0.0000 +vt 0.0470 0.1733 0.0000 +vt 0.0582 0.1661 0.0000 +vt 0.6565 0.5607 0.0000 +vt 0.6565 0.5818 0.0000 +vt 0.0798 0.2130 0.0000 +vt 0.0721 0.2278 0.0000 +vt 0.5995 0.5931 0.0000 +vt 0.5995 0.6094 0.0000 +vt 0.0832 0.2064 0.0000 +vt 0.0893 0.1946 0.0000 +vt 0.7152 0.5607 0.0000 +vt 0.7152 0.5818 0.0000 +vt 0.6496 0.5931 0.0000 +vt 0.6496 0.6094 0.0000 +vt 0.6391 0.3731 0.0000 +vt 0.6137 0.3731 0.0000 +vt 0.6137 0.3482 0.0000 +vt 0.6391 0.3482 0.0000 +vt 0.4544 0.3169 0.0000 +vt 0.4656 0.3226 0.0000 +vt 0.4647 0.3407 0.0000 +vt 0.4403 0.3282 0.0000 +vt 0.5881 0.3731 0.0000 +vt 0.5881 0.3482 0.0000 +vt 0.4773 0.3180 0.0000 +vt 0.4902 0.3307 0.0000 +vt 0.5642 0.3731 0.0000 +vt 0.5642 0.3482 0.0000 +vt 0.4817 0.3062 0.0000 +vt 0.4997 0.3049 0.0000 +vt 0.5440 0.3731 0.0000 +vt 0.5440 0.3482 0.0000 +vt 0.4757 0.2951 0.0000 +vt 0.4867 0.2808 0.0000 +vt 0.6808 0.3731 0.0000 +vt 0.6620 0.3731 0.0000 +vt 0.6620 0.3482 0.0000 +vt 0.6808 0.3482 0.0000 +vt 0.4582 0.2943 0.0000 +vt 0.4512 0.3047 0.0000 +vt 0.4334 0.3017 0.0000 +vt 0.4486 0.2789 0.0000 +vt 0.3379 0.1155 0.0000 +vt 0.3193 0.1155 0.0000 +vt 0.3187 0.0046 0.0000 +vt 0.3426 0.0045 0.0000 +vt 0.3659 0.1098 0.0000 +vt 0.3482 0.1098 0.0000 +vt 0.3478 0.0045 0.0000 +vt 0.3705 0.0045 0.0000 +vt 0.2816 0.0051 0.0000 +vt 0.2837 0.1095 0.0000 +vt 0.2662 0.1099 0.0000 +vt 0.2591 0.0056 0.0000 +vt 0.3131 0.0039 0.0000 +vt 0.3125 0.1094 0.0000 +vt 0.2949 0.1093 0.0000 +vt 0.2904 0.0039 0.0000 +vt 0.3431 0.2807 0.0000 +vt 0.3192 0.2807 0.0000 +vt 0.3702 0.2668 0.0000 +vt 0.3475 0.2849 0.0000 +vt 0.2881 0.2831 0.0000 +vt 0.2657 0.2837 0.0000 +vt 0.3130 0.2846 0.0000 +vt 0.2903 0.2665 0.0000 +vt 0.2214 0.3548 0.0000 +vt 0.2214 0.3722 0.0000 +vt 0.2040 0.3722 0.0000 +vt 0.2040 0.3548 0.0000 +vt 0.2046 0.3497 0.0000 +vt 0.2004 0.2816 0.0000 +vt 0.2136 0.2816 0.0000 +vt 0.2178 0.3497 0.0000 +vt 0.2411 0.3544 0.0000 +vt 0.2411 0.2795 0.0000 +vt 0.2237 0.2795 0.0000 +vt 0.2237 0.3544 0.0000 +vt 0.2046 0.2135 0.0000 +vt 0.2178 0.2135 0.0000 +vt 0.2411 0.2046 0.0000 +vt 0.2237 0.2046 0.0000 +vt 0.7023 0.3783 0.0000 +vt 0.7023 0.1337 0.0000 +vt 0.6961 0.1337 0.0000 +vt 0.6961 0.3783 0.0000 +vt 0.7427 0.2621 0.0000 +vt 0.7427 0.4473 0.0000 +vt 0.7270 0.4473 0.0000 +vt 0.7270 0.2621 0.0000 +vt 0.6997 0.4149 0.0000 +vt 0.3834 0.4149 0.0000 +vt 0.3834 0.4193 0.0000 +vt 0.6997 0.4193 0.0000 +vt 0.6785 0.4123 0.0000 +vt 0.3903 0.4123 0.0000 +vt 0.3903 0.4016 0.0000 +vt 0.6785 0.4016 0.0000 +vt 0.8832 0.8218 0.0000 +vt 0.8832 0.8488 0.0000 +vt 0.8562 0.8488 0.0000 +vt 0.8562 0.8218 0.0000 +vt 0.8710 0.7512 0.0000 +vt 0.8917 0.8200 0.0000 +vt 0.8540 0.8099 0.0000 +vt 0.8484 0.7451 0.0000 +vt 0.8182 0.7463 0.0000 +vt 0.8124 0.8205 0.0000 +vt 0.8508 0.8205 0.0000 +vt 0.8449 0.7463 0.0000 +vt 0.3820 0.4953 0.0000 +vt 0.5991 0.4958 0.0000 +vt 0.5991 0.4984 0.0000 +vt 0.3820 0.4979 0.0000 +vt 0.3820 0.4857 0.0000 +vt 0.5991 0.4862 0.0000 +vt 0.7115 0.5479 0.0000 +vt 0.5941 0.5479 0.0000 +vt 0.5941 0.5410 0.0000 +vt 0.7115 0.5410 0.0000 +vt 0.5941 0.5155 0.0000 +vt 0.7115 0.5155 0.0000 +vt 0.7457 0.4780 0.0000 +vt 0.5660 0.4780 0.0000 +vt 0.5660 0.4749 0.0000 +vt 0.7457 0.4749 0.0000 +vt 0.5660 0.4633 0.0000 +vt 0.7457 0.4633 0.0000 +vt 0.8057 0.5298 0.0000 +vt 0.7294 0.5298 0.0000 +vt 0.7294 0.6060 0.0000 +vt 0.8057 0.6060 0.0000 +vt 0.6612 0.1309 0.0000 +vt 0.6485 0.0073 0.0000 +vt 0.6916 0.0073 0.0000 +vt 0.6867 0.1309 0.0000 +vt 0.7121 0.1290 0.0000 +vt 0.6986 0.0054 0.0000 +vt 0.7386 0.0054 0.0000 +vt 0.7343 0.1290 0.0000 +vt 0.6873 0.2545 0.0000 +vt 0.6552 0.2545 0.0000 +vt 0.7344 0.2526 0.0000 +vt 0.7088 0.2526 0.0000 +vt 0.8292 0.1250 0.0000 +vt 0.8097 0.1250 0.0000 +vt 0.8090 0.0084 0.0000 +vt 0.8341 0.0084 0.0000 +vt 0.8586 0.1191 0.0000 +vt 0.8400 0.1191 0.0000 +vt 0.8396 0.0083 0.0000 +vt 0.8634 0.0083 0.0000 +vt 0.7677 0.0047 0.0000 +vt 0.7698 0.1145 0.0000 +vt 0.7514 0.1150 0.0000 +vt 0.7440 0.0053 0.0000 +vt 0.8025 0.0059 0.0000 +vt 0.8019 0.1168 0.0000 +vt 0.7834 0.1168 0.0000 +vt 0.7786 0.0059 0.0000 +vt 0.8346 0.2987 0.0000 +vt 0.8096 0.2987 0.0000 +vt 0.8632 0.2841 0.0000 +vt 0.8394 0.3032 0.0000 +vt 0.7745 0.2971 0.0000 +vt 0.7509 0.2976 0.0000 +vt 0.8024 0.3010 0.0000 +vt 0.7786 0.2819 0.0000 +vt 0.6958 0.4416 0.0000 +vt 0.3795 0.4416 0.0000 +vt 0.3795 0.4460 0.0000 +vt 0.6958 0.4460 0.0000 +vt 0.6755 0.4344 0.0000 +vt 0.3873 0.4344 0.0000 +vt 0.3873 0.4237 0.0000 +vt 0.6755 0.4237 0.0000 +vt 0.0717 0.1664 0.0000 +vt 0.0717 0.1020 0.0000 +vt 0.1177 0.1020 0.0000 +vt 0.1177 0.1664 0.0000 +vt 0.1846 0.1339 0.0000 +vt 0.1642 0.1838 0.0000 +vt 0.1382 0.1821 0.0000 +vt 0.1245 0.1299 0.0000 +vt 0.0073 0.2189 0.0000 +vt 0.0078 0.2710 0.0000 +vt 0.0457 0.2750 0.0000 +vt 0.0498 0.2189 0.0000 +vt 0.1935 0.0540 0.0000 +vt 0.1671 0.1244 0.0000 +vt 0.1288 0.1255 0.0000 +vt 0.0985 0.0566 0.0000 +# 797 texture coords + +o watermill +g watermill +f 1/1/1 2/2/2 3/3/2 +f 3/3/2 4/4/1 1/1/1 +f 5/5/3 6/6/3 7/7/4 +f 7/7/4 8/8/4 5/5/3 +f 4/4/5 6/6/5 5/5/5 +f 5/5/5 1/1/5 4/4/5 +f 9/9/6 10/10/6 2/10/6 +f 2/10/6 1/9/6 9/9/6 +f 6/11/7 4/12/7 3/13/8 +f 6/11/7 3/13/8 11/14/8 +f 6/11/7 11/14/8 12/15/8 +f 6/11/7 12/15/8 7/16/8 +f 13/17/6 5/17/6 8/18/6 +f 8/18/6 14/18/6 13/17/6 +f 1/9/6 5/17/6 13/17/6 +f 13/17/6 9/9/6 1/9/6 +f 15/19/9 16/20/9 17/21/9 +f 17/21/9 18/22/9 15/19/9 +f 19/23/10 20/24/11 16/25/11 +f 16/25/11 15/26/10 19/23/10 +f 21/27/12 22/28/12 23/29/12 +f 23/29/12 24/30/12 21/27/12 +f 19/23/10 24/31/10 23/32/11 +f 23/32/11 20/24/11 19/23/10 +f 25/33/13 26/34/14 27/35/15 +f 27/35/15 28/36/16 25/33/13 +f 25/37/9 28/38/9 29/39/9 +f 29/39/9 30/40/9 25/37/9 +f 31/41/17 32/42/18 33/43/18 +f 33/43/18 34/44/17 31/41/17 +f 33/43/19 32/42/19 35/45/20 +f 35/45/20 36/46/20 33/43/19 +f 26/34/14 25/33/13 35/47/21 +f 35/47/21 32/48/22 26/34/14 +f 26/49/14 32/50/22 31/51/23 +f 31/51/23 37/52/24 26/49/14 +f 27/53/15 26/49/14 37/52/24 +f 37/52/24 38/54/25 27/53/15 +f 30/40/26 36/55/27 35/56/27 +f 35/56/27 25/37/26 30/40/26 +f 37/57/28 31/58/29 34/59/29 +f 34/59/29 39/60/28 37/57/28 +f 38/61/12 37/57/12 39/60/12 +f 39/60/12 40/62/12 38/61/12 +f 41/63/30 28/36/16 27/35/15 +f 27/35/15 42/64/31 41/63/30 +f 29/39/9 28/38/9 41/65/9 +f 41/65/9 43/66/9 29/39/9 +f 44/43/32 45/42/32 46/41/33 +f 46/41/33 47/44/33 44/43/32 +f 44/43/34 48/46/35 49/45/35 +f 49/45/35 45/42/34 44/43/34 +f 42/64/31 45/67/36 49/68/37 +f 49/68/37 41/63/30 42/64/31 +f 46/69/38 45/70/36 42/71/31 +f 42/71/31 50/72/39 46/69/38 +f 50/72/39 42/71/31 27/53/15 +f 27/53/15 38/54/25 50/72/39 +f 49/73/40 48/74/40 43/66/41 +f 43/66/41 41/65/41 49/73/40 +f 47/75/42 46/76/42 50/77/43 +f 50/77/43 51/78/43 47/75/42 +f 51/78/12 50/77/12 38/61/12 +f 38/61/12 40/62/12 51/78/12 +f 43/79/44 52/80/45 53/81/46 +f 53/81/46 29/82/47 43/79/44 +f 51/83/48 40/84/49 53/81/50 +f 53/81/50 52/80/51 51/83/48 +f 54/85/52 33/86/53 36/87/54 +f 36/87/54 30/88/55 54/85/52 +f 53/81/46 54/85/52 30/88/55 +f 30/88/55 29/82/47 53/81/46 +f 52/80/45 43/79/44 48/89/56 +f 48/89/56 44/90/57 52/80/45 +f 54/85/58 39/91/59 34/92/60 +f 34/92/60 33/86/61 54/85/58 +f 53/81/50 40/84/49 39/91/59 +f 39/91/59 54/85/58 53/81/50 +f 52/80/51 44/90/62 47/93/63 +f 47/93/63 51/83/48 52/80/51 +f 55/94/64 56/95/65 22/96/65 +f 22/96/65 21/97/64 55/94/64 +f 55/94/64 18/98/64 17/99/65 +f 17/99/65 56/95/65 55/94/64 +f 57/100/12 58/101/12 59/102/12 +f 59/102/12 60/103/12 57/100/12 +f 58/101/66 57/100/67 61/104/66 +f 61/104/66 62/105/68 58/101/66 +f 57/100/69 60/106/69 63/107/69 +f 63/107/69 61/104/69 57/100/69 +f 64/108/70 62/105/70 61/104/70 +f 61/104/70 65/109/70 64/108/70 +f 66/110/69 65/109/69 61/104/69 +f 61/104/69 63/111/69 66/110/69 +f 67/112/9 68/113/9 69/114/9 +f 69/114/9 70/115/9 67/112/9 +f 68/113/71 71/116/72 72/117/73 +f 72/117/73 69/114/74 68/113/71 +f 69/114/69 72/117/69 73/118/69 +f 73/118/69 70/119/69 69/114/69 +f 72/117/75 71/116/76 64/108/75 +f 64/108/75 65/109/75 72/117/75 +f 66/110/69 73/120/69 72/117/69 +f 72/117/69 65/109/69 66/110/69 +f 74/100/12 75/101/12 76/102/12 +f 76/102/12 77/103/12 74/100/12 +f 75/101/77 74/100/78 78/104/79 +f 78/104/79 79/105/80 75/101/77 +f 74/100/81 77/106/81 80/107/81 +f 80/107/81 78/104/81 74/100/81 +f 81/108/82 79/105/83 78/104/83 +f 78/104/83 82/109/83 81/108/82 +f 83/110/81 82/109/81 78/104/81 +f 78/104/81 80/111/81 83/110/81 +f 84/112/9 85/113/9 86/114/9 +f 86/114/9 87/115/9 84/112/9 +f 85/113/84 88/116/85 89/117/86 +f 89/117/86 86/114/87 85/113/84 +f 86/114/81 89/117/81 90/118/81 +f 90/118/81 87/119/81 86/114/81 +f 89/117/88 88/116/88 81/108/89 +f 81/108/89 82/109/88 89/117/88 +f 83/110/81 90/120/81 89/117/81 +f 89/117/81 82/109/81 83/110/81 +f 91/100/12 92/101/12 93/102/12 +f 93/102/12 94/103/12 91/100/12 +f 92/101/90 91/100/91 95/104/92 +f 95/104/92 96/105/92 92/101/90 +f 91/100/93 94/106/94 97/107/94 +f 97/107/94 95/104/93 91/100/93 +f 98/108/95 96/105/95 95/104/96 +f 95/104/96 99/109/96 98/108/95 +f 100/110/94 99/109/93 95/104/93 +f 95/104/93 97/111/94 100/110/94 +f 101/112/9 102/113/9 103/114/9 +f 103/114/9 104/115/9 101/112/9 +f 102/113/97 105/116/98 106/117/97 +f 106/117/97 103/114/99 102/113/97 +f 103/114/93 106/117/93 107/118/94 +f 107/118/94 104/119/94 103/114/93 +f 106/117/100 105/116/101 98/108/101 +f 98/108/101 99/109/102 106/117/100 +f 100/110/94 107/120/94 106/117/93 +f 106/117/93 99/109/93 100/110/94 +f 108/100/12 109/101/12 110/102/12 +f 110/102/12 111/103/12 108/100/12 +f 109/101/90 108/100/90 112/104/91 +f 112/104/91 113/105/92 109/101/90 +f 108/100/93 111/106/93 114/107/94 +f 114/107/94 112/104/93 108/100/93 +f 115/108/96 113/105/103 112/104/96 +f 112/104/96 116/109/103 115/108/96 +f 117/110/94 116/109/94 112/104/93 +f 112/104/93 114/111/94 117/110/94 +f 118/112/9 119/113/9 120/114/9 +f 120/114/9 121/115/9 118/112/9 +f 119/113/97 122/116/97 123/117/104 +f 123/117/104 120/114/97 119/113/97 +f 120/114/93 123/117/93 124/118/94 +f 124/118/94 121/119/93 120/114/93 +f 123/117/105 122/116/106 115/108/102 +f 115/108/102 116/109/106 123/117/105 +f 117/110/94 124/120/94 123/117/93 +f 123/117/93 116/109/94 117/110/94 +f 125/100/12 126/101/12 127/102/12 +f 127/102/12 128/103/12 125/100/12 +f 126/101/90 125/100/107 129/104/108 +f 129/104/108 130/105/91 126/101/90 +f 125/100/94 128/106/93 131/107/93 +f 131/107/93 129/104/94 125/100/94 +f 132/108/96 130/105/96 129/104/96 +f 129/104/96 133/109/96 132/108/96 +f 134/110/93 133/109/93 129/104/93 +f 129/104/93 131/111/93 134/110/93 +f 135/112/9 136/113/9 137/114/9 +f 137/114/9 138/115/9 135/112/9 +f 136/113/97 139/116/104 140/117/109 +f 140/117/109 137/114/109 136/113/97 +f 137/114/94 140/117/94 141/118/93 +f 141/118/93 138/119/93 137/114/94 +f 140/117/100 139/116/105 132/108/102 +f 132/108/102 133/109/102 140/117/100 +f 134/110/94 141/120/93 140/117/94 +f 140/117/94 133/109/93 134/110/94 +f 142/100/12 143/101/12 144/102/12 +f 144/102/12 145/103/12 142/100/12 +f 143/101/110 142/100/110 146/104/110 +f 146/104/110 147/105/111 143/101/110 +f 142/100/112 145/106/112 148/107/112 +f 148/107/112 146/104/112 142/100/112 +f 149/108/113 147/105/114 146/104/113 +f 146/104/113 150/109/113 149/108/113 +f 151/110/112 150/109/112 146/104/112 +f 146/104/112 148/111/112 151/110/112 +f 152/112/9 153/113/9 154/114/9 +f 154/114/9 155/115/9 152/112/9 +f 153/113/115 156/116/116 157/117/117 +f 157/117/117 154/114/115 153/113/115 +f 154/114/112 157/117/112 158/118/112 +f 158/118/112 155/119/112 154/114/112 +f 157/117/118 156/116/119 149/108/120 +f 149/108/120 150/109/120 157/117/118 +f 151/110/112 158/120/112 157/117/112 +f 157/117/112 150/109/112 151/110/112 +f 159/121/12 160/122/12 161/123/12 +f 161/123/12 162/124/12 159/121/12 +f 163/125/121 161/126/122 160/122/121 +f 160/122/121 164/127/121 163/125/121 +f 165/128/123 164/127/124 160/122/125 +f 160/122/125 159/121/126 165/128/123 +f 166/129/127 165/128/127 159/121/128 +f 159/121/128 162/130/127 166/129/127 +f 164/127/121 167/131/122 168/132/121 +f 168/132/121 163/125/121 164/127/121 +f 167/131/129 164/127/130 165/128/130 +f 165/128/130 169/133/131 167/131/129 +f 170/134/127 169/133/128 165/128/127 +f 165/128/127 166/129/127 170/134/127 +f 171/135/9 172/136/9 173/137/9 +f 173/137/9 174/138/9 171/135/9 +f 172/136/121 171/139/122 175/140/121 +f 175/140/121 176/141/121 172/136/121 +f 177/142/132 173/137/133 172/136/134 +f 172/136/134 176/141/134 177/142/132 +f 178/143/127 174/144/127 173/137/128 +f 173/137/128 177/142/127 178/143/127 +f 168/145/121 167/131/122 176/141/121 +f 176/141/121 175/140/121 168/145/121 +f 177/142/135 176/141/136 167/131/135 +f 167/131/135 169/133/137 177/142/135 +f 170/146/127 178/143/127 177/142/127 +f 177/142/127 169/133/128 170/146/127 +f 179/102/12 180/101/12 181/100/12 +f 181/100/12 182/103/12 179/102/12 +f 183/104/138 181/100/139 180/101/140 +f 180/101/140 184/105/138 183/104/138 +f 185/107/141 182/106/142 181/100/142 +f 181/100/142 183/104/142 185/107/141 +f 183/104/143 184/105/143 186/108/143 +f 186/108/143 187/109/143 183/104/143 +f 188/110/141 185/111/141 183/104/142 +f 183/104/142 187/109/144 188/110/141 +f 189/114/9 190/113/9 191/112/9 +f 191/112/9 192/115/9 189/114/9 +f 193/117/145 194/116/145 190/113/146 +f 190/113/146 189/114/147 193/117/145 +f 195/118/141 193/117/142 189/114/141 +f 189/114/141 192/119/142 195/118/141 +f 186/108/148 194/116/148 193/117/149 +f 193/117/149 187/109/148 186/108/148 +f 188/110/142 187/109/141 193/117/150 +f 193/117/150 195/120/141 188/110/142 +f 196/102/12 197/101/12 198/100/12 +f 198/100/12 199/103/12 196/102/12 +f 200/104/151 198/100/152 197/101/152 +f 197/101/152 201/105/151 200/104/151 +f 202/107/153 199/106/154 198/100/153 +f 198/100/153 200/104/154 202/107/153 +f 200/104/155 201/105/156 203/108/155 +f 203/108/155 204/109/155 200/104/155 +f 205/110/154 202/111/153 200/104/154 +f 200/104/154 204/109/154 205/110/154 +f 206/114/9 207/113/9 208/112/9 +f 208/112/9 209/115/9 206/114/9 +f 210/117/157 211/116/157 207/113/158 +f 207/113/158 206/114/159 210/117/157 +f 212/118/153 210/117/154 206/114/154 +f 206/114/154 209/119/154 212/118/153 +f 203/108/160 211/116/161 210/117/160 +f 210/117/160 204/109/160 203/108/160 +f 205/110/154 204/109/154 210/117/154 +f 210/117/154 212/120/153 205/110/154 +f 213/102/12 214/101/12 215/100/12 +f 215/100/12 216/103/12 213/102/12 +f 217/104/124 215/100/125 214/101/162 +f 214/101/162 218/105/124 217/104/124 +f 219/107/121 216/106/121 215/100/122 +f 215/100/122 217/104/122 219/107/121 +f 217/104/131 218/105/163 220/108/163 +f 220/108/163 221/109/131 217/104/131 +f 222/110/121 219/111/121 217/104/122 +f 217/104/122 221/109/121 222/110/121 +f 223/114/9 224/113/9 225/112/9 +f 225/112/9 226/115/9 223/114/9 +f 227/117/164 228/116/134 224/113/165 +f 224/113/165 223/114/134 227/117/164 +f 229/118/121 227/117/122 223/114/122 +f 223/114/122 226/119/121 229/118/121 +f 220/108/166 228/116/167 227/117/137 +f 227/117/137 221/109/137 220/108/166 +f 222/110/121 221/109/121 227/117/122 +f 227/117/122 229/120/121 222/110/121 +f 230/102/12 231/101/12 232/100/12 +f 232/100/12 233/103/12 230/102/12 +f 234/104/124 232/100/125 231/101/125 +f 231/101/125 235/105/168 234/104/124 +f 236/107/122 233/106/122 232/100/121 +f 232/100/121 234/104/122 236/107/122 +f 234/104/129 235/105/163 237/108/163 +f 237/108/163 238/109/129 234/104/129 +f 239/110/121 236/111/122 234/104/122 +f 234/104/122 238/109/122 239/110/121 +f 240/114/9 241/113/9 242/112/9 +f 242/112/9 243/115/9 240/114/9 +f 244/117/134 245/116/169 241/113/134 +f 241/113/134 240/114/134 244/117/134 +f 246/118/122 244/117/122 240/114/121 +f 240/114/121 243/119/122 246/118/122 +f 237/108/166 245/116/166 244/117/135 +f 244/117/135 238/109/135 237/108/166 +f 239/110/121 238/109/122 244/117/122 +f 244/117/122 246/120/122 239/110/121 +f 247/102/12 248/101/12 249/100/12 +f 249/100/12 250/103/12 247/102/12 +f 251/104/170 249/100/139 248/101/140 +f 248/101/140 252/105/138 251/104/170 +f 253/107/142 250/106/141 249/100/142 +f 249/100/142 251/104/142 253/107/142 +f 251/104/143 252/105/171 254/108/171 +f 254/108/171 255/109/172 251/104/143 +f 256/110/142 253/111/142 251/104/142 +f 251/104/142 255/109/141 256/110/142 +f 257/114/9 258/113/9 259/112/9 +f 259/112/9 260/115/9 257/114/9 +f 261/117/146 262/116/147 258/113/146 +f 258/113/146 257/114/147 261/117/146 +f 263/118/142 261/117/142 257/114/142 +f 257/114/142 260/119/141 263/118/142 +f 254/108/173 262/116/173 261/117/174 +f 261/117/174 255/109/175 254/108/173 +f 256/110/142 255/109/141 261/117/142 +f 261/117/142 263/120/142 256/110/142 +f 264/102/12 265/101/12 266/100/12 +f 266/100/12 267/103/12 264/102/12 +f 268/104/108 266/100/107 265/101/176 +f 265/101/176 269/105/108 268/104/108 +f 270/107/177 267/106/177 266/100/178 +f 266/100/178 268/104/177 270/107/177 +f 268/104/179 269/105/180 271/108/181 +f 271/108/181 272/109/96 268/104/179 +f 273/110/177 270/111/177 268/104/177 +f 268/104/177 272/109/177 273/110/177 +f 274/114/9 275/113/9 276/112/9 +f 276/112/9 277/115/9 274/114/9 +f 278/117/182 279/116/182 275/113/183 +f 275/113/183 274/114/109 278/117/182 +f 280/118/177 278/117/177 274/114/178 +f 274/114/178 277/119/177 280/118/177 +f 271/108/184 279/116/184 278/117/105 +f 278/117/105 272/109/102 271/108/184 +f 273/110/177 272/109/177 278/117/177 +f 278/117/177 280/120/177 273/110/177 +f 281/121/12 282/122/12 283/123/12 +f 283/123/12 284/124/12 281/121/12 +f 285/125/121 283/126/122 282/122/121 +f 282/122/121 286/127/122 285/125/121 +f 287/128/185 286/127/123 282/122/126 +f 282/122/126 281/121/126 287/128/185 +f 288/129/127 287/128/128 281/121/127 +f 281/121/127 284/130/127 288/129/127 +f 286/127/122 289/131/121 290/132/121 +f 290/132/121 285/125/121 286/127/122 +f 289/131/129 286/127/130 287/128/186 +f 287/128/186 291/133/131 289/131/129 +f 292/134/127 291/133/127 287/128/128 +f 287/128/128 288/129/127 292/134/127 +f 293/135/9 294/136/9 295/137/9 +f 295/137/9 296/138/9 293/135/9 +f 294/136/121 293/139/122 297/140/121 +f 297/140/121 298/141/122 294/136/121 +f 299/142/187 295/137/133 294/136/133 +f 294/136/133 298/141/132 299/142/187 +f 300/143/127 296/144/127 295/137/127 +f 295/137/127 299/142/128 300/143/127 +f 290/145/121 289/131/121 298/141/122 +f 298/141/122 297/140/121 290/145/121 +f 299/142/188 298/141/135 289/131/135 +f 289/131/135 291/133/137 299/142/188 +f 292/146/127 300/143/127 299/142/128 +f 299/142/128 291/133/127 292/146/127 +f 301/121/12 302/122/12 303/123/12 +f 303/123/12 304/124/12 301/121/12 +f 305/125/189 303/126/189 302/122/189 +f 302/122/189 306/127/190 305/125/189 +f 307/128/191 306/127/191 302/122/191 +f 302/122/191 301/121/192 307/128/191 +f 308/129/193 307/128/193 301/121/193 +f 301/121/193 304/130/194 308/129/193 +f 306/127/195 309/131/196 310/132/195 +f 310/132/195 305/125/189 306/127/195 +f 309/131/197 306/127/198 307/128/199 +f 307/128/199 311/133/197 309/131/197 +f 312/134/193 311/133/200 307/128/193 +f 307/128/193 308/129/193 312/134/193 +f 313/135/9 314/136/9 315/137/9 +f 315/137/9 316/138/9 313/135/9 +f 314/136/189 313/139/189 317/140/189 +f 317/140/189 318/141/190 314/136/189 +f 319/142/201 315/137/202 314/136/202 +f 314/136/202 318/141/203 319/142/201 +f 320/143/193 316/144/194 315/137/193 +f 315/137/193 319/142/193 320/143/193 +f 310/145/189 309/131/204 318/141/205 +f 318/141/205 317/140/189 310/145/189 +f 319/142/206 318/141/207 309/131/206 +f 309/131/206 311/133/206 319/142/206 +f 312/146/193 320/143/193 319/142/193 +f 319/142/193 311/133/200 312/146/193 +f 321/121/12 322/122/12 323/123/12 +f 323/123/12 324/124/12 321/121/12 +f 325/125/121 323/126/121 322/122/122 +f 322/122/122 326/127/121 325/125/121 +f 327/128/123 326/127/185 322/122/126 +f 322/122/126 321/121/126 327/128/123 +f 328/129/127 327/128/128 321/121/128 +f 321/121/128 324/130/127 328/129/127 +f 326/127/208 329/131/208 330/132/208 +f 330/132/208 325/125/121 326/127/208 +f 329/131/129 326/127/130 327/128/130 +f 327/128/130 331/133/129 329/131/129 +f 332/134/127 331/133/127 327/128/128 +f 327/128/128 328/129/127 332/134/127 +f 333/135/9 334/136/9 335/137/9 +f 335/137/9 336/138/9 333/135/9 +f 334/136/122 333/139/121 337/140/121 +f 337/140/121 338/141/121 334/136/122 +f 339/142/132 335/137/133 334/136/133 +f 334/136/133 338/141/187 339/142/132 +f 340/143/127 336/144/127 335/137/128 +f 335/137/128 339/142/128 340/143/127 +f 330/145/121 329/131/121 338/141/209 +f 338/141/209 337/140/121 330/145/121 +f 339/142/136 338/141/210 329/131/135 +f 329/131/135 331/133/135 339/142/136 +f 332/146/127 340/143/127 339/142/128 +f 339/142/128 331/133/127 332/146/127 +f 341/123/12 342/122/12 343/121/12 +f 343/121/12 344/124/12 341/123/12 +f 345/125/211 346/127/211 342/122/211 +f 342/122/211 341/126/212 345/125/211 +f 342/122/213 346/127/213 347/128/213 +f 347/128/213 343/121/214 342/122/213 +f 343/121/215 347/128/215 348/129/215 +f 348/129/215 344/130/215 343/121/215 +f 349/132/211 350/131/212 346/127/211 +f 346/127/211 345/125/211 349/132/211 +f 347/128/216 346/127/217 350/131/218 +f 350/131/218 351/133/218 347/128/216 +f 352/134/219 348/129/215 347/128/215 +f 347/128/215 351/133/215 352/134/219 +f 353/137/9 354/136/9 355/135/9 +f 355/135/9 356/138/9 353/137/9 +f 354/136/211 357/141/211 358/140/211 +f 358/140/211 355/139/212 354/136/211 +f 354/136/220 353/137/221 359/142/220 +f 359/142/220 357/141/222 354/136/220 +f 353/137/215 356/144/215 360/143/215 +f 360/143/215 359/142/215 353/137/215 +f 357/141/211 350/131/212 349/145/211 +f 349/145/211 358/140/211 357/141/211 +f 350/131/223 357/141/224 359/142/225 +f 359/142/225 351/133/223 350/131/223 +f 352/146/219 351/133/215 359/142/215 +f 359/142/215 360/143/215 352/146/219 +f 361/100/12 362/101/12 363/102/12 +f 363/102/12 364/103/12 361/100/12 +f 362/101/66 361/100/226 365/104/66 +f 365/104/66 366/105/227 362/101/66 +f 361/100/69 364/106/228 367/107/69 +f 367/107/69 365/104/69 361/100/69 +f 368/108/229 366/105/70 365/104/70 +f 365/104/70 369/109/70 368/108/229 +f 370/110/69 369/109/228 365/104/69 +f 365/104/69 367/111/69 370/110/69 +f 371/112/9 372/113/9 373/114/9 +f 373/114/9 374/115/9 371/112/9 +f 372/113/73 375/116/230 376/117/231 +f 376/117/231 373/114/232 372/113/73 +f 373/114/69 376/117/69 377/118/69 +f 377/118/69 374/119/228 373/114/69 +f 376/117/76 375/116/233 368/108/234 +f 368/108/234 369/109/75 376/117/76 +f 370/110/69 377/120/69 376/117/69 +f 376/117/69 369/109/228 370/110/69 +f 378/147/15 379/148/235 380/149/236 +f 380/149/236 381/150/237 378/147/15 +f 382/149/238 383/148/239 378/147/15 +f 378/147/15 381/150/237 382/149/238 +f 384/43/240 385/42/240 386/41/241 +f 386/41/241 387/44/241 384/43/240 +f 384/43/242 388/46/243 389/45/243 +f 389/45/243 385/42/242 384/43/242 +f 390/151/11 383/151/11 382/152/11 +f 382/152/11 391/152/11 390/151/11 +f 392/153/244 393/153/244 394/18/245 +f 394/18/245 395/18/245 392/153/244 +f 392/153/246 396/17/247 397/17/247 +f 397/17/247 393/153/246 392/153/246 +f 398/154/65 379/154/65 399/155/65 +f 399/155/65 400/155/65 398/154/65 +f 401/156/248 390/151/249 391/152/250 +f 391/152/250 402/157/251 401/156/248 +f 401/156/252 398/154/253 400/155/254 +f 400/155/254 403/158/255 401/156/252 +f 404/158/256 393/153/257 397/17/258 +f 397/17/258 399/155/259 404/158/256 +f 378/147/15 404/159/256 399/160/259 +f 399/160/259 379/148/235 378/147/15 +f 386/161/260 385/162/261 381/150/237 +f 381/150/237 380/149/236 386/161/260 +f 394/18/262 393/153/257 404/158/256 +f 404/158/256 405/163/263 394/18/262 +f 405/160/263 404/159/256 378/147/15 +f 378/147/15 383/148/239 405/160/263 +f 381/150/237 385/162/261 389/161/264 +f 389/161/264 382/149/238 381/150/237 +f 395/18/11 394/18/11 405/163/11 +f 405/163/11 406/163/11 395/18/11 +f 406/163/11 405/163/11 383/151/11 +f 383/151/11 390/151/11 406/163/11 +f 389/10/11 388/10/11 391/152/11 +f 391/152/11 382/152/11 389/10/11 +f 387/9/65 386/9/65 380/164/65 +f 380/164/65 407/164/65 387/9/65 +f 407/164/65 380/164/65 379/154/65 +f 379/154/65 398/154/65 407/164/65 +f 397/17/65 396/17/65 400/155/65 +f 400/155/65 399/155/65 397/17/65 +f 403/158/265 392/153/266 395/18/267 +f 395/18/267 406/163/268 403/158/265 +f 401/156/248 403/158/265 406/163/268 +f 406/163/268 390/151/249 401/156/248 +f 388/10/269 384/165/270 402/157/251 +f 402/157/251 391/152/250 388/10/269 +f 402/157/271 384/165/272 387/9/273 +f 387/9/273 407/164/274 402/157/271 +f 401/156/252 402/157/271 407/164/274 +f 407/164/274 398/154/253 401/156/252 +f 396/17/275 392/153/276 403/158/255 +f 403/158/255 400/155/254 396/17/275 +f 408/100/11 409/101/11 410/102/11 +f 410/102/11 411/103/10 408/100/11 +f 409/101/277 408/100/278 412/104/277 +f 412/104/277 413/105/277 409/101/277 +f 408/100/279 411/106/279 414/107/279 +f 414/107/279 412/104/279 408/100/279 +f 415/108/280 413/105/281 412/104/281 +f 412/104/281 416/109/282 415/108/280 +f 417/110/279 416/109/279 412/104/279 +f 412/104/279 414/111/279 417/110/279 +f 418/112/65 419/113/65 420/114/65 +f 420/114/65 421/115/64 418/112/65 +f 419/113/283 422/116/283 423/117/283 +f 423/117/283 420/114/283 419/113/283 +f 420/114/279 423/117/279 424/118/279 +f 424/118/279 421/119/279 420/114/279 +f 423/117/284 422/116/284 415/108/285 +f 415/108/285 416/109/285 423/117/284 +f 417/110/279 424/120/279 423/117/279 +f 423/117/279 416/109/279 417/110/279 +f 425/100/11 426/101/11 427/102/11 +f 427/102/11 428/103/11 425/100/11 +f 426/101/286 425/100/286 429/104/287 +f 429/104/287 430/105/286 426/101/286 +f 425/100/288 428/106/288 431/107/288 +f 431/107/288 429/104/288 425/100/288 +f 432/108/289 430/105/290 429/104/290 +f 429/104/290 433/109/291 432/108/289 +f 434/110/292 433/109/288 429/104/288 +f 429/104/288 431/111/288 434/110/292 +f 435/112/65 436/113/65 437/114/65 +f 437/114/65 438/115/65 435/112/65 +f 436/113/293 439/116/293 440/117/293 +f 440/117/293 437/114/294 436/113/293 +f 437/114/288 440/117/288 441/118/288 +f 441/118/288 438/119/288 437/114/288 +f 440/117/295 439/116/295 432/108/296 +f 432/108/296 433/109/296 440/117/295 +f 434/110/292 441/120/288 440/117/288 +f 440/117/288 433/109/288 434/110/292 +f 442/100/297 443/101/298 444/102/298 +f 444/102/298 445/103/297 442/100/297 +f 443/101/299 442/100/300 446/104/301 +f 446/104/301 447/105/300 443/101/299 +f 442/100/302 445/106/302 448/107/302 +f 448/107/302 446/104/303 442/100/302 +f 449/108/304 447/105/305 446/104/306 +f 446/104/306 450/109/304 449/108/304 +f 451/110/307 450/109/308 446/104/303 +f 446/104/303 448/111/308 451/110/307 +f 452/112/309 453/113/309 454/114/310 +f 454/114/310 455/115/311 452/112/309 +f 453/113/312 456/116/313 457/117/312 +f 457/117/312 454/114/314 453/113/312 +f 454/114/308 457/117/302 458/118/302 +f 458/118/302 455/119/315 454/114/308 +f 457/117/316 456/116/317 449/108/316 +f 449/108/316 450/109/318 457/117/316 +f 451/110/307 458/120/302 457/117/302 +f 457/117/302 450/109/308 451/110/307 +f 459/100/65 460/101/65 461/102/65 +f 461/102/65 462/103/65 459/100/65 +f 460/101/319 459/100/320 463/104/319 +f 463/104/319 464/105/319 460/101/319 +f 459/100/321 462/106/321 465/107/322 +f 465/107/322 463/104/321 459/100/321 +f 466/108/323 464/105/324 463/104/324 +f 463/104/324 467/109/323 466/108/323 +f 468/110/322 467/109/322 463/104/321 +f 463/104/321 465/111/322 468/110/322 +f 469/112/11 470/113/11 471/114/11 +f 471/114/11 472/115/11 469/112/11 +f 470/113/325 473/116/325 474/117/326 +f 474/117/326 471/114/327 470/113/325 +f 471/114/321 474/117/321 475/118/322 +f 475/118/322 472/119/321 471/114/321 +f 474/117/328 473/116/329 466/108/330 +f 466/108/330 467/109/330 474/117/328 +f 468/110/322 475/120/322 474/117/321 +f 474/117/321 467/109/322 468/110/322 +f 476/123/11 477/122/11 478/121/11 +f 478/121/11 479/124/11 476/123/11 +f 480/125/279 481/127/279 477/122/279 +f 477/122/279 476/126/279 480/125/279 +f 477/122/331 481/127/331 482/128/331 +f 482/128/331 478/121/278 477/122/331 +f 478/121/332 482/128/332 483/129/332 +f 483/129/332 479/130/332 478/121/332 +f 484/132/279 485/131/279 481/127/279 +f 481/127/279 480/125/279 484/132/279 +f 482/128/281 481/127/333 485/131/280 +f 485/131/280 486/133/282 482/128/281 +f 487/134/332 483/129/332 482/128/332 +f 482/128/332 486/133/332 487/134/332 +f 488/137/65 489/136/65 490/135/65 +f 490/135/65 491/138/65 488/137/65 +f 489/136/279 492/141/279 493/140/279 +f 493/140/279 490/139/279 489/136/279 +f 489/136/334 488/137/334 494/142/334 +f 494/142/334 492/141/334 489/136/334 +f 488/137/332 491/144/332 495/143/332 +f 495/143/332 494/142/332 488/137/332 +f 492/141/279 485/131/279 484/145/279 +f 484/145/279 493/140/279 492/141/279 +f 485/131/335 492/141/284 494/142/284 +f 494/142/284 486/133/285 485/131/335 +f 487/146/332 486/133/332 494/142/332 +f 494/142/332 495/143/332 487/146/332 +f 496/100/11 497/101/11 498/102/11 +f 498/102/11 499/103/11 496/100/11 +f 497/101/278 496/100/277 500/104/277 +f 500/104/277 501/105/331 497/101/278 +f 496/100/279 499/106/279 502/107/279 +f 502/107/279 500/104/279 496/100/279 +f 503/108/280 501/105/281 500/104/281 +f 500/104/281 504/109/280 503/108/280 +f 505/110/279 504/109/279 500/104/279 +f 500/104/279 502/111/279 505/110/279 +f 506/112/65 507/113/65 508/114/65 +f 508/114/65 509/115/65 506/112/65 +f 507/113/334 510/116/334 511/117/283 +f 511/117/283 508/114/283 507/113/334 +f 508/114/279 511/117/279 512/118/279 +f 512/118/279 509/119/279 508/114/279 +f 511/117/284 510/116/336 503/108/285 +f 503/108/285 504/109/285 511/117/284 +f 505/110/279 512/120/279 511/117/279 +f 511/117/279 504/109/279 505/110/279 +f 513/100/65 514/101/65 515/102/65 +f 515/102/65 516/103/65 513/100/65 +f 514/101/320 513/100/319 517/104/319 +f 517/104/319 518/105/319 514/101/320 +f 513/100/322 516/106/321 519/107/321 +f 519/107/321 517/104/321 513/100/322 +f 520/108/323 518/105/324 517/104/324 +f 517/104/324 521/109/323 520/108/323 +f 522/110/322 521/109/337 517/104/321 +f 517/104/321 519/111/321 522/110/322 +f 523/112/11 524/113/11 525/114/11 +f 525/114/11 526/115/11 523/112/11 +f 524/113/326 527/116/325 528/117/325 +f 528/117/325 525/114/325 524/113/326 +f 525/114/322 528/117/321 529/118/321 +f 529/118/321 526/119/322 525/114/322 +f 528/117/329 527/116/329 520/108/330 +f 520/108/330 521/109/330 528/117/329 +f 522/110/322 529/120/321 528/117/321 +f 528/117/321 521/109/337 522/110/322 +f 530/18/12 531/17/12 532/9/12 +f 532/9/12 533/10/12 530/18/12 +f 534/166/9 535/167/9 536/168/9 +f 536/168/9 537/169/9 534/166/9 +f 532/170/338 538/171/339 539/172/339 +f 539/172/339 533/173/338 532/170/338 +f 531/174/11 540/175/11 538/176/11 +f 538/176/11 532/177/11 531/174/11 +f 530/173/340 541/172/341 540/171/341 +f 540/171/341 531/170/340 530/173/340 +f 533/177/65 539/176/65 541/175/65 +f 541/175/65 530/174/65 533/177/65 +f 534/178/342 537/179/342 539/172/339 +f 539/172/339 538/171/339 534/178/342 +f 540/175/11 535/180/11 534/181/11 +f 534/181/11 538/176/11 540/175/11 +f 536/179/343 535/178/343 540/171/341 +f 540/171/341 541/172/341 536/179/343 +f 537/181/65 536/180/65 541/175/65 +f 541/175/65 539/176/65 537/181/65 +f 542/182/65 543/183/65 544/184/65 +f 544/184/65 545/185/65 542/182/65 +f 546/186/12 547/187/12 548/188/12 +f 548/188/12 549/189/12 546/186/12 +f 550/190/344 551/191/15 552/192/15 +f 552/192/15 553/193/344 550/190/344 +f 554/187/9 555/186/9 556/194/9 +f 556/194/9 557/195/9 554/187/9 +f 558/196/345 559/197/346 560/198/346 +f 560/198/346 561/199/345 558/196/345 +f 562/200/65 563/201/65 564/202/65 +f 565/203/65 566/204/65 551/205/65 +f 551/205/65 550/206/65 565/203/65 +f 567/207/65 568/208/65 569/209/65 +f 568/208/65 570/210/65 571/211/65 +f 571/211/65 569/209/65 568/208/65 +f 542/182/65 572/212/65 573/213/65 +f 573/213/65 543/183/65 542/182/65 +f 551/191/15 574/214/347 575/215/347 +f 575/215/347 552/192/15 551/191/15 +f 559/197/346 576/216/348 577/217/348 +f 577/217/348 560/198/346 559/197/346 +f 566/204/65 578/218/65 574/219/65 +f 574/219/65 551/205/65 566/204/65 +f 571/211/65 570/210/65 563/201/65 +f 563/201/65 562/200/65 571/211/65 +f 545/220/9 544/221/9 565/222/9 +f 565/222/9 579/223/9 545/220/9 +f 544/221/349 543/224/350 566/225/350 +f 566/225/350 565/222/349 544/221/349 +f 543/224/351 573/226/352 578/227/352 +f 578/227/352 566/225/351 543/224/351 +f 573/226/12 572/228/12 580/229/12 +f 580/229/12 578/227/12 573/226/12 +f 572/230/353 542/231/354 581/232/354 +f 581/232/354 580/233/353 572/230/353 +f 542/231/355 545/234/356 579/235/356 +f 579/235/356 581/232/355 542/231/355 +f 582/236/65 574/219/65 578/218/65 +f 578/218/65 580/237/65 582/236/65 +f 583/238/9 575/215/9 574/214/9 +f 574/214/9 582/239/9 583/238/9 +f 584/240/12 550/190/12 553/193/12 +f 553/193/12 585/241/12 584/240/12 +f 584/242/65 579/243/65 565/203/65 +f 565/203/65 550/206/65 584/242/65 +f 586/194/12 587/195/12 547/187/12 +f 547/187/12 546/186/12 586/194/12 +f 564/244/357 563/245/357 579/235/357 +f 579/235/357 584/246/357 564/244/357 +f 563/245/356 570/247/355 581/232/355 +f 581/232/355 579/235/356 563/245/356 +f 570/247/354 568/248/353 580/233/353 +f 580/233/353 581/232/354 570/247/354 +f 568/248/358 567/249/358 582/250/359 +f 582/250/359 580/233/359 568/248/358 +f 588/188/9 589/189/9 555/186/9 +f 555/186/9 554/187/9 588/188/9 +f 569/251/345 571/252/345 559/197/345 +f 559/197/345 558/196/345 569/251/345 +f 571/252/360 562/253/348 576/216/348 +f 576/216/348 559/197/360 571/252/360 +f 548/254/15 547/255/15 584/246/15 +f 584/246/15 585/256/15 548/254/15 +f 547/255/15 587/257/15 564/244/15 +f 564/244/15 584/246/15 547/255/15 +f 587/258/65 586/259/65 562/200/65 +f 562/200/65 564/202/65 587/258/65 +f 586/260/346 546/261/346 576/216/346 +f 576/216/346 562/253/346 586/260/346 +f 546/261/346 549/262/346 577/217/346 +f 577/217/346 576/216/346 546/261/346 +f 556/263/346 555/264/346 558/196/346 +f 558/196/346 561/199/346 556/263/346 +f 555/264/346 589/265/346 569/251/346 +f 569/251/346 558/196/346 555/264/346 +f 589/266/65 588/267/65 567/207/65 +f 567/207/65 569/209/65 589/266/65 +f 588/268/15 554/269/15 582/250/15 +f 582/250/15 567/249/15 588/268/15 +f 554/269/15 557/270/15 583/271/15 +f 583/271/15 582/250/15 554/269/15 +f 590/272/361 591/273/361 592/274/362 +f 592/274/362 593/275/361 590/272/361 +f 594/274/363 595/273/364 596/272/364 +f 596/272/364 597/275/364 594/274/363 +f 591/276/11 595/277/11 594/278/11 +f 594/278/11 592/279/11 591/276/11 +f 590/280/365 596/281/365 595/277/365 +f 595/277/365 591/276/365 590/280/365 +f 593/282/65 597/283/65 596/281/65 +f 596/281/65 590/280/65 593/282/65 +f 598/284/9 599/285/9 600/286/9 +f 600/286/9 601/287/9 598/284/9 +f 602/284/12 603/287/12 604/286/12 +f 604/286/12 605/285/12 602/284/12 +f 601/288/64 600/289/65 604/290/65 +f 604/290/65 603/291/64 601/288/64 +f 606/292/9 607/293/9 608/294/9 +f 608/294/9 609/295/9 606/292/9 +f 610/296/11 611/297/11 612/298/11 +f 612/298/11 613/299/11 610/296/11 +f 614/299/65 615/298/366 616/297/367 +f 616/297/367 617/296/65 614/299/65 +f 606/292/9 618/300/9 619/301/9 +f 619/301/9 607/293/9 606/292/9 +f 613/302/9 612/303/9 620/304/9 +f 620/304/9 621/305/9 613/302/9 +f 612/306/9 622/307/9 623/308/9 +f 623/308/9 620/309/9 612/306/9 +f 615/310/9 624/311/9 623/308/9 +f 623/308/9 622/307/9 615/310/9 +f 614/302/9 625/305/9 624/304/9 +f 624/304/9 615/303/9 614/302/9 +f 626/312/15 606/313/15 609/314/368 +f 609/314/368 625/315/368 626/312/15 +f 621/316/15 618/317/15 606/313/15 +f 606/313/15 626/312/15 621/316/15 +f 620/318/65 619/319/65 618/320/65 +f 618/320/65 621/321/65 620/318/65 +f 625/321/11 609/320/11 608/319/11 +f 608/319/11 624/318/11 625/321/11 +f 627/184/12 628/183/12 629/182/12 +f 629/182/12 630/185/12 627/184/12 +f 631/188/65 632/187/65 633/186/65 +f 633/186/65 634/189/65 631/188/65 +f 635/192/15 636/191/15 637/190/369 +f 637/190/369 638/193/369 635/192/15 +f 639/194/11 640/186/11 641/187/11 +f 641/187/11 642/195/11 639/194/11 +f 643/198/346 644/197/346 645/196/370 +f 645/196/370 646/199/370 643/198/346 +f 647/200/12 648/202/12 649/201/12 +f 636/205/12 650/204/12 651/203/12 +f 651/203/12 637/206/12 636/205/12 +f 652/207/12 653/209/12 654/208/12 +f 655/211/12 656/210/12 654/208/12 +f 654/208/12 653/209/12 655/211/12 +f 657/213/12 658/212/12 629/182/12 +f 629/182/12 628/183/12 657/213/12 +f 659/215/371 660/214/371 636/191/15 +f 636/191/15 635/192/15 659/215/371 +f 661/217/372 662/216/372 644/197/346 +f 644/197/346 643/198/346 661/217/372 +f 660/219/12 663/218/12 650/204/12 +f 650/204/12 636/205/12 660/219/12 +f 655/211/12 647/200/12 649/201/12 +f 649/201/12 656/210/12 655/211/12 +f 651/222/11 627/221/11 630/220/11 +f 630/220/11 664/223/11 651/222/11 +f 650/225/373 628/224/373 627/221/373 +f 627/221/373 651/222/373 650/225/373 +f 663/227/374 657/226/374 628/224/374 +f 628/224/374 650/225/374 663/227/374 +f 665/229/65 658/228/65 657/226/65 +f 657/226/65 663/227/65 665/229/65 +f 666/232/375 629/231/375 658/230/376 +f 658/230/376 665/233/376 666/232/375 +f 664/235/377 630/234/377 629/231/377 +f 629/231/377 666/232/377 664/235/377 +f 663/218/12 660/219/12 667/236/12 +f 667/236/12 665/237/12 663/218/12 +f 660/214/11 659/215/11 668/238/11 +f 668/238/11 667/239/11 660/214/11 +f 638/193/65 637/190/65 669/240/65 +f 669/240/65 670/241/65 638/193/65 +f 669/242/12 637/206/12 651/203/12 +f 651/203/12 664/243/12 669/242/12 +f 632/187/65 671/195/65 672/194/65 +f 672/194/65 633/186/65 632/187/65 +f 664/235/378 649/245/378 648/244/378 +f 648/244/378 669/246/378 664/235/378 +f 666/232/377 656/247/377 649/245/377 +f 649/245/377 664/235/377 666/232/377 +f 665/233/376 654/248/376 656/247/375 +f 656/247/375 666/232/375 665/233/376 +f 667/250/379 652/249/379 654/248/379 +f 654/248/379 665/233/379 667/250/379 +f 640/186/11 673/189/11 674/188/11 +f 674/188/11 641/187/11 640/186/11 +f 644/197/380 655/252/380 653/251/370 +f 653/251/370 645/196/370 644/197/380 +f 662/216/372 647/253/372 655/252/381 +f 655/252/381 644/197/381 662/216/372 +f 669/246/15 632/255/15 631/254/15 +f 631/254/15 670/256/15 669/246/15 +f 648/244/15 671/257/15 632/255/15 +f 632/255/15 669/246/15 648/244/15 +f 647/200/12 672/259/12 671/258/12 +f 671/258/12 648/202/12 647/200/12 +f 662/216/346 633/261/346 672/260/346 +f 672/260/346 647/253/346 662/216/346 +f 661/217/346 634/262/346 633/261/346 +f 633/261/346 662/216/346 661/217/346 +f 645/196/346 640/264/346 639/263/346 +f 639/263/346 646/199/346 645/196/346 +f 653/251/346 673/265/346 640/264/346 +f 640/264/346 645/196/346 653/251/346 +f 652/207/12 674/267/12 673/266/12 +f 673/266/12 653/209/12 652/207/12 +f 667/250/15 641/269/15 674/268/15 +f 674/268/15 652/249/15 667/250/15 +f 668/271/15 642/270/15 641/269/15 +f 641/269/15 667/250/15 668/271/15 +f 675/184/11 676/183/11 677/182/11 +f 677/182/11 678/185/11 675/184/11 +f 679/188/12 680/187/12 681/186/12 +f 681/186/12 682/189/12 679/188/12 +f 683/192/15 684/191/15 685/190/344 +f 685/190/344 686/193/344 683/192/15 +f 687/194/9 688/186/9 689/187/9 +f 689/187/9 690/195/9 687/194/9 +f 691/198/346 692/197/346 693/196/345 +f 693/196/345 694/199/345 691/198/346 +f 695/200/11 696/202/11 697/201/11 +f 684/205/11 698/204/11 699/203/11 +f 699/203/11 685/206/11 684/205/11 +f 700/207/11 701/209/11 702/208/11 +f 703/211/11 704/210/11 702/208/11 +f 702/208/11 701/209/11 703/211/11 +f 705/213/11 706/212/11 677/182/11 +f 677/182/11 676/183/11 705/213/11 +f 707/215/347 708/214/347 684/191/15 +f 684/191/15 683/192/15 707/215/347 +f 709/217/348 710/216/348 692/197/346 +f 692/197/346 691/198/346 709/217/348 +f 708/219/11 711/218/11 698/204/11 +f 698/204/11 684/205/11 708/219/11 +f 703/211/11 695/200/11 697/201/11 +f 697/201/11 704/210/11 703/211/11 +f 699/222/9 675/221/9 678/220/9 +f 678/220/9 712/223/9 699/222/9 +f 698/225/350 676/224/350 675/221/349 +f 675/221/349 699/222/349 698/225/350 +f 711/227/352 705/226/352 676/224/351 +f 676/224/351 698/225/351 711/227/352 +f 713/229/12 706/228/12 705/226/12 +f 705/226/12 711/227/12 713/229/12 +f 714/232/354 677/231/354 706/230/353 +f 706/230/353 713/233/353 714/232/354 +f 712/235/356 678/234/356 677/231/355 +f 677/231/355 714/232/355 712/235/356 +f 711/218/11 708/219/11 715/236/11 +f 715/236/11 713/237/11 711/218/11 +f 708/214/9 707/215/9 716/238/9 +f 716/238/9 715/239/9 708/214/9 +f 686/193/12 685/190/12 717/240/12 +f 717/240/12 718/241/12 686/193/12 +f 717/242/11 685/206/11 699/203/11 +f 699/203/11 712/243/11 717/242/11 +f 680/187/12 719/195/12 720/194/12 +f 720/194/12 681/186/12 680/187/12 +f 712/235/357 697/245/357 696/244/357 +f 696/244/357 717/246/357 712/235/357 +f 714/232/355 704/247/355 697/245/356 +f 697/245/356 712/235/356 714/232/355 +f 713/233/353 702/248/353 704/247/354 +f 704/247/354 714/232/354 713/233/353 +f 715/250/359 700/249/359 702/248/359 +f 702/248/359 713/233/359 715/250/359 +f 688/186/9 721/189/9 722/188/9 +f 722/188/9 689/187/9 688/186/9 +f 692/197/345 703/252/345 701/251/345 +f 701/251/345 693/196/345 692/197/345 +f 710/216/348 695/253/348 703/252/360 +f 703/252/360 692/197/360 710/216/348 +f 717/246/15 680/255/15 679/254/15 +f 679/254/15 718/256/15 717/246/15 +f 696/244/15 719/257/15 680/255/15 +f 680/255/15 717/246/15 696/244/15 +f 695/200/11 720/259/11 719/258/11 +f 719/258/11 696/202/11 695/200/11 +f 710/216/346 681/261/346 720/260/346 +f 720/260/346 695/253/346 710/216/346 +f 709/217/346 682/262/346 681/261/346 +f 681/261/346 710/216/346 709/217/346 +f 693/196/346 688/264/346 687/263/346 +f 687/263/346 694/199/346 693/196/346 +f 701/251/346 721/265/346 688/264/346 +f 688/264/346 693/196/346 701/251/346 +f 700/207/11 722/267/11 721/266/11 +f 721/266/11 701/209/11 700/207/11 +f 715/250/15 689/269/15 722/268/15 +f 722/268/15 700/249/15 715/250/15 +f 716/271/15 690/270/15 689/269/15 +f 689/269/15 715/250/15 716/271/15 +f 723/10/15 724/18/15 725/17/15 +f 725/17/15 726/9/15 723/10/15 +f 727/9/10 724/17/11 723/18/11 +f 723/18/11 728/10/10 727/9/10 +f 729/322/12 725/323/12 724/324/12 +f 724/324/12 727/325/12 729/322/12 +f 730/10/64 726/18/65 725/17/65 +f 725/17/65 729/9/64 730/10/64 +f 731/326/382 732/327/346 733/328/346 +f 733/328/346 734/329/382 731/326/382 +f 735/330/12 736/331/12 732/332/12 +f 732/332/12 731/333/12 735/330/12 +f 737/334/383 738/335/15 736/336/15 +f 736/336/15 735/337/383 737/334/383 +f 734/338/65 737/334/65 735/337/65 +f 735/337/65 731/339/65 734/338/65 +f 739/340/11 740/341/11 741/342/11 +f 741/342/11 742/343/11 739/340/11 +f 741/344/384 740/345/384 733/328/346 +f 733/328/346 732/327/346 741/344/384 +f 742/346/12 741/347/12 732/332/12 +f 732/332/12 736/331/12 742/346/12 +f 739/340/385 742/343/385 736/336/15 +f 736/336/15 738/335/15 739/340/385 +f 743/10/15 744/18/15 745/17/15 +f 745/17/15 746/9/15 743/10/15 +f 747/9/10 744/17/11 743/18/11 +f 743/18/11 748/10/10 747/9/10 +f 749/322/12 745/323/12 744/324/12 +f 744/324/12 747/325/12 749/322/12 +f 750/10/64 746/18/65 745/17/65 +f 745/17/65 749/9/64 750/10/64 +f 751/184/12 752/183/12 753/182/12 +f 753/182/12 754/185/12 751/184/12 +f 755/188/65 756/187/65 757/186/65 +f 757/186/65 758/189/65 755/188/65 +f 759/192/15 760/191/15 761/190/386 +f 761/190/386 762/193/386 759/192/15 +f 763/194/11 764/186/11 765/187/11 +f 765/187/11 766/195/11 763/194/11 +f 767/198/346 768/197/346 769/196/387 +f 769/196/387 770/199/387 767/198/346 +f 771/200/12 772/202/12 773/201/12 +f 760/205/12 774/204/12 775/203/12 +f 775/203/12 761/206/12 760/205/12 +f 776/207/12 777/209/12 778/208/12 +f 779/211/12 780/210/12 778/208/12 +f 778/208/12 777/209/12 779/211/12 +f 781/213/12 782/212/12 753/182/12 +f 753/182/12 752/183/12 781/213/12 +f 783/215/388 784/214/388 760/191/15 +f 760/191/15 759/192/15 783/215/388 +f 785/217/389 786/216/389 768/197/346 +f 768/197/346 767/198/346 785/217/389 +f 784/219/12 787/218/12 774/204/12 +f 774/204/12 760/205/12 784/219/12 +f 779/211/12 771/200/12 773/201/12 +f 773/201/12 780/210/12 779/211/12 +f 775/222/11 751/221/11 754/220/11 +f 754/220/11 788/223/11 775/222/11 +f 774/225/390 752/224/390 751/221/373 +f 751/221/373 775/222/373 774/225/390 +f 787/227/374 781/226/374 752/224/391 +f 752/224/391 774/225/391 787/227/374 +f 789/229/65 782/228/65 781/226/65 +f 781/226/65 787/227/65 789/229/65 +f 790/232/375 753/231/375 782/230/375 +f 782/230/375 789/233/375 790/232/375 +f 788/235/392 754/234/392 753/231/392 +f 753/231/392 790/232/392 788/235/392 +f 787/218/12 784/219/12 791/236/12 +f 791/236/12 789/237/12 787/218/12 +f 784/214/11 783/215/11 792/238/11 +f 792/238/11 791/239/11 784/214/11 +f 762/193/65 761/190/65 793/240/65 +f 793/240/65 794/241/65 762/193/65 +f 793/242/12 761/206/12 775/203/12 +f 775/203/12 788/243/12 793/242/12 +f 756/187/65 795/195/65 796/194/65 +f 796/194/65 757/186/65 756/187/65 +f 788/235/393 773/245/393 772/244/378 +f 772/244/378 793/246/378 788/235/393 +f 790/232/392 780/247/392 773/245/392 +f 773/245/392 788/235/392 790/232/392 +f 789/233/375 778/248/375 780/247/375 +f 780/247/375 790/232/375 789/233/375 +f 791/250/394 776/249/394 778/248/394 +f 778/248/394 789/233/394 791/250/394 +f 764/186/11 797/189/11 798/188/11 +f 798/188/11 765/187/11 764/186/11 +f 768/197/395 779/252/395 777/251/387 +f 777/251/387 769/196/387 768/197/395 +f 786/216/389 771/253/389 779/252/396 +f 779/252/396 768/197/396 786/216/389 +f 793/246/15 756/255/15 755/254/15 +f 755/254/15 794/256/15 793/246/15 +f 772/244/15 795/257/15 756/255/15 +f 756/255/15 793/246/15 772/244/15 +f 771/200/12 796/259/12 795/258/12 +f 795/258/12 772/202/12 771/200/12 +f 786/216/346 757/261/346 796/260/346 +f 796/260/346 771/253/346 786/216/346 +f 785/217/346 758/262/346 757/261/346 +f 757/261/346 786/216/346 785/217/346 +f 769/196/346 764/264/346 763/263/346 +f 763/263/346 770/199/346 769/196/346 +f 777/251/346 797/265/346 764/264/346 +f 764/264/346 769/196/346 777/251/346 +f 776/207/12 798/267/12 797/266/12 +f 797/266/12 777/209/12 776/207/12 +f 791/250/15 765/269/15 798/268/15 +f 798/268/15 776/249/15 791/250/15 +f 792/271/15 766/270/15 765/269/15 +f 765/269/15 791/250/15 792/271/15 +f 799/348/397 800/349/398 801/350/399 +f 801/350/399 802/351/400 799/348/397 +f 800/352/401 803/353/402 804/354/403 +f 804/354/403 801/355/404 800/352/401 +f 805/10/405 806/151/406 804/154/407 +f 804/154/407 803/9/408 805/10/405 +f 799/356/409 802/357/410 806/358/410 +f 806/358/410 805/359/409 799/356/409 +f 807/360/411 808/361/9 802/351/400 +f 802/351/400 801/350/399 807/360/411 +f 804/354/403 809/362/346 807/363/346 +f 807/363/346 801/355/404 804/354/403 +f 806/151/406 810/18/12 809/17/412 +f 809/17/412 804/154/407 806/151/406 +f 808/364/15 810/365/15 806/358/410 +f 806/358/410 802/357/410 808/364/15 +f 811/366/413 812/367/414 813/368/415 +f 813/368/415 814/369/416 811/366/413 +f 814/370/417 813/371/418 815/372/419 +f 815/372/419 816/373/420 814/370/417 +f 815/154/421 817/151/422 818/10/423 +f 818/10/423 816/9/424 815/154/421 +f 817/374/425 812/375/425 811/376/426 +f 811/376/426 818/377/426 817/374/425 +f 812/367/414 808/361/9 807/360/411 +f 807/360/411 813/368/415 812/367/414 +f 815/372/419 813/371/418 807/363/346 +f 807/363/346 809/362/346 815/372/419 +f 817/151/422 815/154/421 809/17/412 +f 809/17/412 810/18/12 817/151/422 +f 817/374/425 810/365/15 808/364/15 +f 808/364/15 812/375/425 817/374/425 +f 819/378/427 820/379/428 821/380/428 +f 821/380/428 822/381/427 819/378/427 +f 819/382/429 823/383/430 824/384/431 +f 824/384/431 820/385/432 819/382/429 +f 825/386/433 826/387/434 824/388/434 +f 824/388/434 823/389/433 825/386/433 +f 822/382/435 821/385/436 826/384/437 +f 826/384/437 825/383/438 822/382/435 +f 827/390/439 828/391/439 821/380/428 +f 821/380/428 820/379/428 827/390/439 +f 829/392/440 827/393/441 820/385/432 +f 820/385/432 824/384/431 829/392/440 +f 830/394/442 829/395/442 824/388/434 +f 824/388/434 826/387/434 830/394/442 +f 821/385/436 828/393/443 830/392/444 +f 830/392/444 826/384/437 821/385/436 +f 831/396/445 832/397/445 833/398/445 +f 833/398/445 834/399/445 831/396/445 +f 835/400/446 831/401/446 834/402/446 +f 834/402/446 836/403/446 835/400/446 +f 835/396/447 836/399/447 837/398/447 +f 837/398/447 838/397/447 835/396/447 +f 838/404/448 837/405/448 833/406/448 +f 833/406/448 832/407/448 838/404/448 +f 834/399/449 833/398/449 839/408/449 +f 839/408/449 840/409/449 834/399/449 +f 834/402/450 840/410/450 841/411/450 +f 841/411/450 836/403/450 834/402/450 +f 836/399/451 841/409/451 842/408/451 +f 842/408/451 837/398/451 836/399/451 +f 833/406/452 837/405/452 842/412/452 +f 842/412/452 839/413/452 833/406/452 +f 843/396/453 844/399/453 845/398/453 +f 845/398/453 846/397/453 843/396/453 +f 847/400/446 848/403/446 844/402/446 +f 844/402/446 843/401/446 847/400/446 +f 847/396/454 849/397/454 850/398/454 +f 850/398/454 848/399/454 847/396/454 +f 849/404/448 846/407/448 845/406/448 +f 845/406/448 850/405/448 849/404/448 +f 844/399/455 851/409/455 852/408/455 +f 852/408/455 845/398/455 844/399/455 +f 844/402/450 848/403/450 853/411/450 +f 853/411/450 851/410/450 844/402/450 +f 848/399/456 850/398/456 854/408/456 +f 854/408/456 853/409/456 848/399/456 +f 845/406/452 852/413/452 854/412/452 +f 854/412/452 850/405/452 845/406/452 +f 855/414/15 856/415/15 857/416/15 +f 857/416/15 858/417/15 855/414/15 +f 858/417/64 857/416/64 859/418/64 +f 859/418/64 860/419/64 858/417/64 +f 861/420/368 862/421/368 863/422/368 +f 863/422/368 864/423/368 861/420/368 +f 864/423/12 863/422/12 865/424/12 +f 865/424/12 866/425/12 864/423/12 +f 867/426/368 868/427/368 869/428/368 +f 869/428/368 870/429/368 867/426/368 +f 871/430/9 867/426/9 870/429/9 +f 870/429/9 872/431/9 871/430/9 +f 873/432/64 874/433/64 875/434/64 +f 875/434/64 876/435/64 873/432/64 +f 877/436/10 878/437/10 879/438/10 +f 879/438/10 880/439/10 877/436/10 +f 875/440/9 881/441/9 882/442/9 +f 882/442/9 876/443/9 875/440/9 +f 876/435/457 882/444/457 883/445/457 +f 883/445/457 873/432/457 876/435/457 +f 877/446/9 880/447/9 882/442/9 +f 882/442/9 881/441/9 877/446/9 +f 880/439/458 879/438/458 883/445/458 +f 883/445/458 882/444/458 880/439/458 +f 884/448/459 885/449/459 886/450/459 +f 886/450/459 887/451/459 884/448/459 +f 885/452/460 888/453/460 889/454/460 +f 889/454/460 886/455/460 885/452/460 +f 888/449/461 890/448/461 891/451/461 +f 891/451/461 889/450/461 888/449/461 +f 891/454/462 890/453/462 884/452/462 +f 884/452/462 887/455/462 891/454/462 +f 884/448/463 892/456/463 893/457/463 +f 893/457/463 885/449/463 884/448/463 +f 885/452/464 893/458/464 894/459/464 +f 894/459/464 888/453/464 885/452/464 +f 888/449/465 894/457/465 895/456/465 +f 895/456/465 890/448/465 888/449/465 +f 884/452/466 890/453/466 895/459/466 +f 895/459/466 892/458/466 884/452/466 +f 896/448/459 897/449/459 898/450/459 +f 898/450/459 899/451/459 896/448/459 +f 897/452/460 900/453/460 901/454/460 +f 901/454/460 898/455/460 897/452/460 +f 900/449/461 902/448/461 903/451/461 +f 903/451/461 901/450/461 900/449/461 +f 903/454/462 902/453/462 896/452/462 +f 896/452/462 899/455/462 903/454/462 +f 896/448/463 904/456/463 905/457/463 +f 905/457/463 897/449/463 896/448/463 +f 897/452/464 905/458/464 906/459/464 +f 906/459/464 900/453/464 897/452/464 +f 900/449/465 906/457/465 907/456/465 +f 907/456/465 902/448/465 900/449/465 +f 896/452/466 902/453/466 907/459/466 +f 907/459/466 904/458/466 896/452/466 +f 908/448/459 909/449/459 910/450/459 +f 910/450/459 911/451/459 908/448/459 +f 909/452/460 912/453/460 913/454/460 +f 913/454/460 910/455/460 909/452/460 +f 912/449/461 914/448/461 915/451/461 +f 915/451/461 913/450/461 912/449/461 +f 915/454/462 914/453/462 908/452/462 +f 908/452/462 911/455/462 915/454/462 +f 908/448/463 916/456/463 917/457/463 +f 917/457/463 909/449/463 908/448/463 +f 909/452/464 917/458/464 918/459/464 +f 918/459/464 912/453/464 909/452/464 +f 912/449/465 918/457/465 919/456/465 +f 919/456/465 914/448/465 912/449/465 +f 908/452/466 914/453/466 919/459/466 +f 919/459/466 916/458/466 908/452/466 +f 920/448/459 921/449/459 922/450/459 +f 922/450/459 923/451/459 920/448/459 +f 921/452/460 924/453/460 925/454/460 +f 925/454/460 922/455/460 921/452/460 +f 924/449/461 926/448/461 927/451/461 +f 927/451/461 925/450/461 924/449/461 +f 927/454/462 926/453/462 920/452/462 +f 920/452/462 923/455/462 927/454/462 +f 920/448/463 928/456/463 929/457/463 +f 929/457/463 921/449/463 920/448/463 +f 921/452/464 929/458/464 930/459/464 +f 930/459/464 924/453/464 921/452/464 +f 924/449/465 930/457/465 931/456/465 +f 931/456/465 926/448/465 924/449/465 +f 920/452/466 926/453/466 931/459/466 +f 931/459/466 928/458/466 920/452/466 +f 932/448/459 933/449/459 934/450/459 +f 934/450/459 935/451/459 932/448/459 +f 933/452/460 936/453/460 937/454/460 +f 937/454/460 934/455/460 933/452/460 +f 936/449/461 938/448/461 939/451/461 +f 939/451/461 937/450/461 936/449/461 +f 939/454/462 938/453/462 932/452/462 +f 932/452/462 935/455/462 939/454/462 +f 932/448/463 940/456/463 941/457/463 +f 941/457/463 933/449/463 932/448/463 +f 933/452/464 941/458/464 942/459/464 +f 942/459/464 936/453/464 933/452/464 +f 936/449/465 942/457/465 943/456/465 +f 943/456/465 938/448/465 936/449/465 +f 932/452/466 938/453/466 943/459/466 +f 943/459/466 940/458/466 932/452/466 +f 944/448/459 945/449/459 946/450/459 +f 946/450/459 947/451/459 944/448/459 +f 945/452/460 948/453/460 949/454/460 +f 949/454/460 946/455/460 945/452/460 +f 948/449/461 950/448/461 951/451/461 +f 951/451/461 949/450/461 948/449/461 +f 951/454/462 950/453/462 944/452/462 +f 944/452/462 947/455/462 951/454/462 +f 944/448/463 952/456/463 953/457/463 +f 953/457/463 945/449/463 944/448/463 +f 945/452/464 953/458/464 954/459/464 +f 954/459/464 948/453/464 945/452/464 +f 948/449/465 954/457/465 955/456/465 +f 955/456/465 950/448/465 948/449/465 +f 944/452/466 950/453/466 955/459/466 +f 955/459/466 952/458/466 944/452/466 +f 956/460/467 957/461/467 958/462/467 +f 958/462/467 959/463/467 956/460/467 +f 960/464/468 961/465/468 957/466/468 +f 957/466/468 956/467/468 960/464/468 +f 962/468/469 963/469/469 961/470/469 +f 961/470/469 960/471/469 962/468/469 +f 962/464/470 959/467/470 958/466/470 +f 958/466/470 963/465/470 962/464/470 +f 964/472/471 965/473/471 958/462/471 +f 958/462/471 957/461/471 964/472/471 +f 966/474/472 964/475/472 957/466/472 +f 957/466/472 961/465/472 966/474/472 +f 967/476/473 966/477/473 961/470/473 +f 961/470/473 963/469/473 967/476/473 +f 958/466/474 965/475/474 967/474/474 +f 967/474/474 963/465/474 958/466/474 +f 968/460/467 969/461/467 970/462/467 +f 970/462/467 971/463/467 968/460/467 +f 972/464/475 973/465/475 969/466/475 +f 969/466/475 968/467/475 972/464/475 +f 974/468/469 975/469/469 973/470/469 +f 973/470/469 972/471/469 974/468/469 +f 974/464/476 971/467/476 970/466/476 +f 970/466/476 975/465/476 974/464/476 +f 976/472/471 977/473/471 970/462/471 +f 970/462/471 969/461/471 976/472/471 +f 978/474/472 976/475/472 969/466/472 +f 969/466/472 973/465/472 978/474/472 +f 979/476/473 978/477/473 973/470/473 +f 973/470/473 975/469/473 979/476/473 +f 970/466/474 977/475/474 979/474/474 +f 979/474/474 975/465/474 970/466/474 +f 980/478/477 981/479/477 982/480/477 +f 982/480/477 983/481/477 980/478/477 +f 984/482/478 985/483/478 981/479/478 +f 981/479/478 980/478/478 984/482/478 +f 986/484/479 987/485/479 985/483/479 +f 985/483/479 984/482/479 986/484/479 +f 988/486/480 989/487/480 987/485/480 +f 987/485/480 986/484/480 988/486/480 +f 990/488/481 991/489/481 989/490/481 +f 989/490/481 988/491/481 990/488/481 +f 983/481/482 982/480/482 991/489/482 +f 991/489/482 990/488/482 983/481/482 +f 992/492/483 993/493/483 994/494/483 +f 994/494/483 995/495/483 992/492/483 +f 996/495/484 997/492/484 998/493/484 +f 998/493/484 999/494/484 996/495/484 +f 994/496/485 996/497/485 999/498/485 +f 999/498/485 995/499/485 994/496/485 +f 993/500/486 997/501/486 996/502/486 +f 996/502/486 994/503/486 993/500/486 +f 992/499/12 998/498/12 997/497/12 +f 997/497/12 993/496/12 992/499/12 +f 995/503/487 999/502/487 998/501/487 +f 998/501/487 992/500/487 995/503/487 +f 1000/504/488 1001/505/488 1002/506/488 +f 1002/506/488 1003/507/488 1000/504/488 +f 1004/506/481 1005/505/481 1006/504/481 +f 1006/504/481 1007/507/481 1004/506/481 +f 1002/508/9 1004/509/9 1007/510/9 +f 1007/510/9 1003/511/9 1002/508/9 +f 1001/512/489 1005/513/489 1004/514/489 +f 1004/514/489 1002/515/489 1001/512/489 +f 1008/511/12 1009/510/12 1010/509/12 +f 1010/509/12 1011/508/12 1008/511/12 +f 1000/504/478 1008/516/478 1011/517/478 +f 1011/517/478 1001/505/478 1000/504/478 +f 1010/517/481 1009/516/481 1006/504/481 +f 1006/504/481 1005/505/481 1010/517/481 +f 1011/518/490 1010/519/490 1005/513/490 +f 1005/513/490 1001/512/490 1011/518/490 +f 1012/520/491 1013/521/491 1014/522/491 +f 1014/522/491 1015/523/491 1012/520/491 +f 1016/524/9 1017/525/9 1013/526/9 +f 1013/526/9 1012/527/9 1016/524/9 +f 1018/528/492 1019/529/492 1017/530/492 +f 1017/530/492 1016/531/492 1018/528/492 +f 1015/532/493 1014/533/493 1019/534/493 +f 1019/534/493 1018/535/493 1015/532/493 +f 1013/521/494 1020/536/494 1021/537/494 +f 1021/537/494 1014/522/494 1013/521/494 +f 1017/525/495 1022/538/495 1020/539/495 +f 1020/539/495 1013/526/495 1017/525/495 +f 1019/529/496 1023/540/496 1022/541/496 +f 1022/541/496 1017/530/496 1019/529/496 +f 1014/533/493 1021/542/493 1023/543/493 +f 1023/543/493 1019/534/493 1014/533/493 +f 1020/536/497 1024/544/497 1025/545/497 +f 1025/545/497 1021/537/497 1020/536/497 +f 1022/538/485 1026/546/485 1024/547/485 +f 1024/547/485 1020/539/485 1022/538/485 +f 1023/540/498 1027/548/498 1026/549/498 +f 1026/549/498 1022/541/498 1023/540/498 +f 1021/542/12 1025/550/12 1027/551/12 +f 1027/551/12 1023/543/12 1021/542/12 +f 1024/544/499 1028/552/499 1029/553/499 +f 1029/553/499 1025/545/499 1024/544/499 +f 1026/546/485 1030/554/485 1028/555/485 +f 1028/555/485 1024/547/485 1026/546/485 +f 1027/548/500 1031/556/500 1030/557/500 +f 1030/557/500 1026/549/500 1027/548/500 +f 1025/550/12 1029/558/12 1031/559/12 +f 1031/559/12 1027/551/12 1025/550/12 +f 1028/552/501 1032/560/501 1033/561/501 +f 1033/561/501 1029/553/501 1028/552/501 +f 1030/554/502 1034/562/502 1032/563/502 +f 1032/563/502 1028/555/502 1030/554/502 +f 1031/556/503 1035/564/503 1034/565/503 +f 1034/565/503 1030/557/503 1031/556/503 +f 1029/558/504 1033/566/504 1035/567/504 +f 1035/567/504 1031/559/504 1029/558/504 +f 1032/560/505 1036/568/505 1037/569/505 +f 1037/569/505 1033/561/505 1032/560/505 +f 1034/562/485 1038/570/485 1036/571/485 +f 1036/571/485 1032/563/485 1034/562/485 +f 1035/564/506 1039/572/506 1038/573/506 +f 1038/573/506 1034/565/506 1035/564/506 +f 1033/566/504 1037/574/504 1039/575/504 +f 1039/575/504 1035/567/504 1033/566/504 +f 1036/568/507 1040/576/507 1041/577/507 +f 1041/577/507 1037/569/507 1036/568/507 +f 1038/570/502 1042/578/502 1040/579/502 +f 1040/579/502 1036/571/502 1038/570/502 +f 1039/572/508 1043/580/508 1042/581/508 +f 1042/581/508 1038/573/508 1039/572/508 +f 1037/574/509 1041/582/509 1043/583/509 +f 1043/583/509 1039/575/509 1037/574/509 +f 1040/576/496 1044/584/496 1045/585/496 +f 1045/585/496 1041/577/496 1040/576/496 +f 1042/578/485 1046/586/485 1044/587/485 +f 1044/587/485 1040/579/485 1042/578/485 +f 1043/580/494 1047/588/494 1046/589/494 +f 1046/589/494 1042/581/494 1043/580/494 +f 1041/582/12 1045/590/12 1047/591/12 +f 1047/591/12 1043/583/12 1041/582/12 +f 1044/584/510 1048/592/510 1049/593/510 +f 1049/593/510 1045/585/510 1044/584/510 +f 1046/586/9 1050/594/9 1048/595/9 +f 1048/595/9 1044/587/9 1046/586/9 +f 1047/588/511 1051/596/511 1050/597/511 +f 1050/597/511 1046/589/511 1047/588/511 +f 1045/590/12 1049/598/12 1051/599/12 +f 1051/599/12 1047/591/12 1045/590/12 +f 1048/592/512 1052/600/512 1053/601/512 +f 1053/601/512 1049/593/512 1048/592/512 +f 1050/594/9 1054/602/9 1052/603/9 +f 1052/603/9 1048/595/9 1050/594/9 +f 1051/596/499 1055/604/499 1054/605/499 +f 1054/605/499 1050/597/499 1051/596/499 +f 1049/598/12 1053/606/12 1055/607/12 +f 1055/607/12 1051/599/12 1049/598/12 +f 1052/600/503 1056/608/503 1057/609/503 +f 1057/609/503 1053/601/503 1052/600/503 +f 1054/602/502 1058/610/502 1056/611/502 +f 1056/611/502 1052/603/502 1054/602/502 +f 1055/604/513 1059/612/513 1058/613/513 +f 1058/613/513 1054/605/513 1055/604/513 +f 1053/606/509 1057/614/509 1059/615/509 +f 1059/615/509 1055/607/509 1053/606/509 +f 1056/608/514 1012/616/514 1015/617/514 +f 1015/617/514 1057/609/514 1056/608/514 +f 1058/610/485 1016/524/485 1012/527/485 +f 1012/527/485 1056/611/485 1058/610/485 +f 1059/612/505 1018/618/505 1016/619/505 +f 1016/619/505 1058/613/505 1059/612/505 +f 1057/614/504 1015/532/504 1018/535/504 +f 1018/535/504 1059/615/504 1057/614/504 +f 1060/520/491 1061/521/491 1062/522/491 +f 1062/522/491 1063/523/491 1060/520/491 +f 1064/524/9 1065/525/9 1061/526/9 +f 1061/526/9 1060/527/9 1064/524/9 +f 1066/528/507 1067/529/507 1065/530/507 +f 1065/530/507 1064/531/507 1066/528/507 +f 1063/532/504 1062/533/504 1067/534/504 +f 1067/534/504 1066/535/504 1063/532/504 +f 1061/521/515 1068/536/515 1069/537/515 +f 1069/537/515 1062/522/515 1061/521/515 +f 1065/525/495 1070/538/495 1068/539/495 +f 1068/539/495 1061/526/495 1065/525/495 +f 1067/529/516 1071/540/516 1070/541/516 +f 1070/541/516 1065/530/516 1067/529/516 +f 1062/533/509 1069/542/509 1071/543/509 +f 1071/543/509 1067/534/509 1062/533/509 +f 1068/536/511 1072/544/511 1073/545/511 +f 1073/545/511 1069/537/511 1068/536/511 +f 1070/538/9 1074/546/9 1072/547/9 +f 1072/547/9 1068/539/9 1070/538/9 +f 1071/540/510 1075/548/510 1074/549/510 +f 1074/549/510 1070/541/510 1071/540/510 +f 1069/542/509 1073/550/509 1075/551/509 +f 1075/551/509 1071/543/509 1069/542/509 +f 1072/544/517 1076/552/517 1077/553/517 +f 1077/553/517 1073/545/517 1072/544/517 +f 1074/546/9 1078/554/9 1076/555/9 +f 1076/555/9 1072/547/9 1074/546/9 +f 1075/548/518 1079/556/518 1078/557/518 +f 1078/557/518 1074/549/518 1075/548/518 +f 1073/550/12 1077/558/12 1079/559/12 +f 1079/559/12 1075/551/12 1073/550/12 +f 1076/552/501 1080/560/501 1081/561/501 +f 1081/561/501 1077/553/501 1076/552/501 +f 1078/554/485 1082/562/485 1080/563/485 +f 1080/563/485 1076/555/485 1078/554/485 +f 1079/556/519 1083/564/519 1082/565/519 +f 1082/565/519 1078/557/519 1079/556/519 +f 1077/558/504 1081/566/504 1083/567/504 +f 1083/567/504 1079/559/504 1077/558/504 +f 1080/560/520 1084/568/520 1085/569/520 +f 1085/569/520 1081/561/520 1080/560/520 +f 1082/562/502 1086/570/502 1084/571/502 +f 1084/571/502 1080/563/502 1082/562/502 +f 1083/564/514 1087/572/514 1086/573/514 +f 1086/573/514 1082/565/514 1083/564/514 +f 1081/566/504 1085/574/504 1087/575/504 +f 1087/575/504 1083/567/504 1081/566/504 +f 1084/568/492 1088/576/492 1089/577/492 +f 1089/577/492 1085/569/492 1084/568/492 +f 1086/570/495 1090/578/495 1088/579/495 +f 1088/579/495 1084/571/495 1086/570/495 +f 1087/572/491 1091/580/491 1090/581/491 +f 1090/581/491 1086/573/491 1087/572/491 +f 1085/574/493 1089/582/493 1091/583/493 +f 1091/583/493 1087/575/493 1085/574/493 +f 1088/576/516 1092/584/516 1093/585/516 +f 1093/585/516 1089/577/516 1088/576/516 +f 1090/578/485 1094/586/485 1092/587/485 +f 1092/587/485 1088/579/485 1090/578/485 +f 1091/580/515 1095/588/515 1094/589/515 +f 1094/589/515 1090/581/515 1091/580/515 +f 1089/582/504 1093/590/504 1095/591/504 +f 1095/591/504 1091/583/504 1089/582/504 +f 1092/584/510 1096/592/510 1097/593/510 +f 1097/593/510 1093/585/510 1092/584/510 +f 1094/586/485 1098/594/485 1096/595/485 +f 1096/595/485 1092/587/485 1094/586/485 +f 1095/588/511 1099/596/511 1098/597/511 +f 1098/597/511 1094/589/511 1095/588/511 +f 1093/590/12 1097/598/12 1099/599/12 +f 1099/599/12 1095/591/12 1093/590/12 +f 1096/592/518 1100/600/518 1101/601/518 +f 1101/601/518 1097/593/518 1096/592/518 +f 1098/594/502 1102/602/502 1100/603/502 +f 1100/603/502 1096/595/502 1098/594/502 +f 1099/596/517 1103/604/517 1102/605/517 +f 1102/605/517 1098/597/517 1099/596/517 +f 1097/598/12 1101/606/12 1103/607/12 +f 1103/607/12 1099/599/12 1097/598/12 +f 1100/600/519 1104/608/519 1105/609/519 +f 1105/609/519 1101/601/519 1100/600/519 +f 1102/602/9 1106/610/9 1104/611/9 +f 1104/611/9 1100/603/9 1102/602/9 +f 1103/604/501 1107/612/501 1106/613/501 +f 1106/613/501 1102/605/501 1103/604/501 +f 1101/606/509 1105/614/509 1107/615/509 +f 1107/615/509 1103/607/509 1101/606/509 +f 1104/608/514 1060/616/514 1063/617/514 +f 1063/617/514 1105/609/514 1104/608/514 +f 1106/610/485 1064/524/485 1060/527/485 +f 1060/527/485 1104/611/485 1106/610/485 +f 1107/612/520 1066/618/520 1064/619/520 +f 1064/619/520 1106/613/520 1107/612/520 +f 1105/614/504 1063/532/504 1066/535/504 +f 1066/535/504 1107/615/504 1105/614/504 +f 1108/504/521 1109/505/521 1110/506/521 +f 1110/506/521 1111/507/521 1108/504/521 +f 1112/506/522 1113/505/522 1114/504/522 +f 1114/504/522 1115/507/522 1112/506/522 +f 1110/508/502 1112/509/502 1115/510/502 +f 1115/510/502 1111/511/502 1110/508/502 +f 1109/512/523 1113/513/523 1112/514/523 +f 1112/514/523 1110/515/523 1109/512/523 +f 1116/511/509 1117/510/509 1118/509/509 +f 1118/509/509 1119/508/509 1116/511/509 +f 1108/504/524 1116/516/524 1119/517/524 +f 1119/517/524 1109/505/524 1108/504/524 +f 1118/517/522 1117/516/522 1114/504/522 +f 1114/504/522 1113/505/522 1118/517/522 +f 1119/518/525 1118/519/525 1113/513/525 +f 1113/513/525 1109/512/525 1119/518/525 +f 1120/620/526 1121/621/526 1122/622/526 +f 1122/622/526 1123/623/526 1120/620/526 +f 1124/624/527 1125/625/527 1121/626/527 +f 1121/626/527 1120/627/527 1124/624/527 +f 1121/621/528 1126/628/528 1127/629/528 +f 1127/629/528 1122/622/528 1121/621/528 +f 1125/625/529 1128/630/529 1126/631/529 +f 1126/631/529 1121/626/529 1125/625/529 +f 1126/628/530 1129/632/530 1130/633/530 +f 1130/633/530 1127/629/530 1126/628/530 +f 1128/630/531 1131/634/531 1129/635/531 +f 1129/635/531 1126/631/531 1128/630/531 +f 1129/632/532 1132/636/532 1133/637/532 +f 1133/637/532 1130/633/532 1129/632/532 +f 1131/634/533 1134/638/533 1132/639/533 +f 1132/639/533 1129/635/533 1131/634/533 +f 1132/640/534 1135/641/534 1136/642/534 +f 1136/642/534 1133/643/534 1132/640/534 +f 1134/644/535 1137/645/535 1135/646/535 +f 1135/646/535 1132/647/535 1134/644/535 +f 1135/641/536 1120/620/536 1123/623/536 +f 1123/623/536 1136/642/536 1135/641/536 +f 1137/645/537 1124/624/537 1120/627/537 +f 1120/627/537 1135/646/537 1137/645/537 +f 1138/492/65 1139/493/65 1140/494/65 +f 1140/494/65 1141/495/65 1138/492/65 +f 1142/495/11 1143/492/11 1144/493/11 +f 1144/493/11 1145/494/11 1142/495/11 +f 1140/496/495 1142/497/495 1145/498/495 +f 1145/498/495 1141/499/495 1140/496/495 +f 1139/500/538 1143/501/538 1142/502/538 +f 1142/502/538 1140/503/538 1139/500/538 +f 1138/499/509 1144/498/509 1143/497/509 +f 1143/497/509 1139/496/509 1138/499/509 +f 1141/503/368 1145/502/368 1144/501/368 +f 1144/501/368 1138/500/368 1141/503/368 +f 1146/492/487 1147/493/487 1148/494/487 +f 1148/494/487 1149/495/487 1146/492/487 +f 1150/495/486 1151/492/486 1152/493/486 +f 1152/493/486 1153/494/486 1150/495/486 +f 1148/496/502 1150/497/502 1153/498/502 +f 1153/498/502 1149/499/502 1148/496/502 +f 1147/500/483 1151/501/483 1150/502/483 +f 1150/502/483 1148/503/483 1147/500/483 +f 1146/499/509 1152/498/509 1151/497/509 +f 1151/497/509 1147/496/509 1146/499/509 +f 1149/503/484 1153/502/484 1152/501/484 +f 1152/501/484 1146/500/484 1149/503/484 +f 1154/504/539 1155/505/539 1156/506/539 +f 1156/506/539 1157/507/539 1154/504/539 +f 1158/506/540 1159/505/540 1160/504/540 +f 1160/504/540 1161/507/540 1158/506/540 +f 1156/508/9 1158/509/9 1161/510/9 +f 1161/510/9 1157/511/9 1156/508/9 +f 1155/512/541 1159/513/541 1158/514/541 +f 1158/514/541 1156/515/541 1155/512/541 +f 1162/511/12 1163/510/12 1164/509/12 +f 1164/509/12 1165/508/12 1162/511/12 +f 1154/504/542 1162/516/542 1165/517/542 +f 1165/517/542 1155/505/542 1154/504/542 +f 1164/517/543 1163/516/543 1160/504/543 +f 1160/504/543 1159/505/543 1164/517/543 +f 1165/518/544 1164/519/544 1159/513/544 +f 1159/513/544 1155/512/544 1165/518/544 +f 1166/504/545 1167/505/545 1168/506/545 +f 1168/506/545 1169/507/545 1166/504/545 +f 1170/506/546 1171/505/546 1172/504/546 +f 1172/504/546 1173/507/546 1170/506/546 +f 1168/508/485 1170/509/485 1173/510/485 +f 1173/510/485 1169/511/485 1168/508/485 +f 1167/512/547 1171/513/547 1170/514/547 +f 1170/514/547 1168/515/547 1167/512/547 +f 1174/511/12 1175/510/12 1176/509/12 +f 1176/509/12 1177/508/12 1174/511/12 +f 1166/504/548 1174/516/548 1177/517/548 +f 1177/517/548 1167/505/548 1166/504/548 +f 1176/517/549 1175/516/549 1172/504/549 +f 1172/504/549 1171/505/549 1176/517/549 +f 1177/518/550 1176/519/550 1171/513/550 +f 1171/513/550 1167/512/550 1177/518/550 +f 1178/492/551 1179/493/551 1180/494/551 +f 1180/494/551 1181/495/551 1178/492/551 +f 1182/495/368 1183/492/368 1184/493/368 +f 1184/493/368 1185/494/368 1182/495/368 +f 1180/496/485 1182/497/485 1185/498/485 +f 1185/498/485 1181/499/485 1180/496/485 +f 1179/500/10 1183/501/10 1182/502/10 +f 1182/502/10 1180/503/10 1179/500/10 +f 1178/499/504 1184/498/504 1183/497/504 +f 1183/497/504 1179/496/504 1178/499/504 +f 1181/503/64 1185/502/64 1184/501/64 +f 1184/501/64 1178/500/64 1181/503/64 +f 1186/504/552 1187/505/552 1188/506/552 +f 1188/506/552 1189/507/552 1186/504/552 +f 1190/506/553 1191/505/553 1192/504/553 +f 1192/504/553 1193/507/553 1190/506/553 +f 1188/508/485 1190/509/485 1193/510/485 +f 1193/510/485 1189/511/485 1188/508/485 +f 1187/512/554 1191/513/554 1190/514/554 +f 1190/514/554 1188/515/554 1187/512/554 +f 1194/511/504 1195/510/504 1196/509/504 +f 1196/509/504 1197/508/504 1194/511/504 +f 1186/504/555 1194/516/555 1197/517/555 +f 1197/517/555 1187/505/555 1186/504/555 +f 1196/517/556 1195/516/556 1192/504/556 +f 1192/504/556 1191/505/556 1196/517/556 +f 1197/518/557 1196/519/557 1191/513/557 +f 1191/513/557 1187/512/557 1197/518/557 +f 1198/504/558 1199/505/558 1200/506/558 +f 1200/506/558 1201/507/558 1198/504/558 +f 1202/506/559 1203/505/559 1204/504/559 +f 1204/504/559 1205/507/559 1202/506/559 +f 1200/508/9 1202/509/9 1205/510/9 +f 1205/510/9 1201/511/9 1200/508/9 +f 1199/512/560 1203/513/560 1202/514/560 +f 1202/514/560 1200/515/560 1199/512/560 +f 1206/511/12 1207/510/12 1208/509/12 +f 1208/509/12 1209/508/12 1206/511/12 +f 1198/504/561 1206/516/561 1209/517/561 +f 1209/517/561 1199/505/561 1198/504/561 +f 1208/517/562 1207/516/562 1204/504/562 +f 1204/504/562 1203/505/562 1208/517/562 +f 1209/518/563 1208/519/563 1203/513/563 +f 1203/513/563 1199/512/563 1209/518/563 +f 1210/504/564 1211/505/564 1212/506/564 +f 1212/506/564 1213/507/564 1210/504/564 +f 1214/506/565 1215/505/565 1216/504/565 +f 1216/504/565 1217/507/565 1214/506/565 +f 1212/508/9 1214/509/9 1217/510/9 +f 1217/510/9 1213/511/9 1212/508/9 +f 1211/512/566 1215/513/566 1214/514/566 +f 1214/514/566 1212/515/566 1211/512/566 +f 1218/511/504 1219/510/504 1220/509/504 +f 1220/509/504 1221/508/504 1218/511/504 +f 1210/504/567 1218/516/567 1221/517/567 +f 1221/517/567 1211/505/567 1210/504/567 +f 1220/517/565 1219/516/565 1216/504/565 +f 1216/504/565 1215/505/565 1220/517/565 +f 1221/518/568 1220/519/568 1215/513/568 +f 1215/513/568 1211/512/568 1221/518/568 +f 1222/504/569 1223/505/569 1224/506/569 +f 1224/506/569 1225/507/569 1222/504/569 +f 1226/506/570 1227/505/570 1228/504/570 +f 1228/504/570 1229/507/570 1226/506/570 +f 1224/508/485 1226/509/485 1229/510/485 +f 1229/510/485 1225/511/485 1224/508/485 +f 1223/512/571 1227/513/571 1226/514/571 +f 1226/514/571 1224/515/571 1223/512/571 +f 1230/511/504 1231/510/504 1232/509/504 +f 1232/509/504 1233/508/504 1230/511/504 +f 1222/504/569 1230/516/569 1233/517/569 +f 1233/517/569 1223/505/569 1222/504/569 +f 1232/517/572 1231/516/572 1228/504/572 +f 1228/504/572 1227/505/572 1232/517/572 +f 1233/518/573 1232/519/573 1227/513/573 +f 1227/513/573 1223/512/573 1233/518/573 +f 1234/492/551 1235/493/551 1236/494/551 +f 1236/494/551 1237/495/551 1234/492/551 +f 1238/495/368 1239/492/368 1240/493/368 +f 1240/493/368 1241/494/368 1238/495/368 +f 1236/496/485 1238/497/485 1241/498/485 +f 1241/498/485 1237/499/485 1236/496/485 +f 1235/500/10 1239/501/10 1238/502/10 +f 1238/502/10 1236/503/10 1235/500/10 +f 1234/499/504 1240/498/504 1239/497/504 +f 1239/497/504 1235/496/504 1234/499/504 +f 1237/503/64 1241/502/64 1240/501/64 +f 1240/501/64 1234/500/64 1237/503/64 +f 1242/492/483 1243/493/483 1244/494/483 +f 1244/494/483 1245/495/483 1242/492/483 +f 1246/495/484 1247/492/484 1248/493/484 +f 1248/493/484 1249/494/484 1246/495/484 +f 1244/496/495 1246/497/495 1249/498/495 +f 1249/498/495 1245/499/495 1244/496/495 +f 1243/500/486 1247/501/486 1246/502/486 +f 1246/502/486 1244/503/486 1243/500/486 +f 1242/499/12 1248/498/12 1247/497/12 +f 1247/497/12 1243/496/12 1242/499/12 +f 1245/503/487 1249/502/487 1248/501/487 +f 1248/501/487 1242/500/487 1245/503/487 +f 1250/492/487 1251/493/487 1252/494/487 +f 1252/494/487 1253/495/487 1250/492/487 +f 1254/495/486 1255/492/486 1256/493/486 +f 1256/493/486 1257/494/486 1254/495/486 +f 1252/496/502 1254/497/502 1257/498/502 +f 1257/498/502 1253/499/502 1252/496/502 +f 1251/500/483 1255/501/483 1254/502/483 +f 1254/502/483 1252/503/483 1251/500/483 +f 1250/499/509 1256/498/509 1255/497/509 +f 1255/497/509 1251/496/509 1250/499/509 +f 1253/503/484 1257/502/484 1256/501/484 +f 1256/501/484 1250/500/484 1253/503/484 +f 1258/620/478 1259/621/478 1260/622/478 +f 1260/622/478 1261/623/478 1258/620/478 +f 1262/624/574 1263/625/574 1259/626/574 +f 1259/626/574 1258/627/574 1262/624/574 +f 1259/621/575 1264/628/575 1265/629/575 +f 1265/629/575 1260/622/575 1259/621/575 +f 1263/625/576 1266/630/576 1264/631/576 +f 1264/631/576 1259/626/576 1263/625/576 +f 1264/628/482 1267/632/482 1268/633/482 +f 1268/633/482 1265/629/482 1264/628/482 +f 1266/630/577 1269/634/577 1267/635/577 +f 1267/635/577 1264/631/577 1266/630/577 +f 1267/632/578 1270/636/578 1271/637/578 +f 1271/637/578 1268/633/578 1267/632/578 +f 1269/634/579 1272/638/579 1270/639/579 +f 1270/639/579 1267/635/579 1269/634/579 +f 1270/640/580 1273/641/580 1274/642/580 +f 1274/642/580 1271/643/580 1270/640/580 +f 1272/644/581 1275/645/581 1273/646/581 +f 1273/646/581 1270/647/581 1272/644/581 +f 1273/641/479 1258/620/479 1261/623/479 +f 1261/623/479 1274/642/479 1273/641/479 +f 1275/645/582 1262/624/582 1258/627/582 +f 1258/627/582 1273/646/582 1275/645/582 +f 1276/492/64 1277/493/64 1278/494/64 +f 1278/494/64 1279/495/64 1276/492/64 +f 1280/495/10 1281/492/10 1282/493/10 +f 1282/493/10 1283/494/10 1280/495/10 +f 1278/496/485 1280/497/485 1283/498/485 +f 1283/498/485 1279/499/485 1278/496/485 +f 1277/500/538 1281/501/538 1280/502/538 +f 1280/502/538 1278/503/538 1277/500/538 +f 1276/499/504 1282/498/504 1281/497/504 +f 1281/497/504 1277/496/504 1276/499/504 +f 1279/503/368 1283/502/368 1282/501/368 +f 1282/501/368 1276/500/368 1279/503/368 +f 1284/504/583 1285/505/583 1286/506/583 +f 1286/506/583 1287/507/583 1284/504/583 +f 1288/506/584 1289/505/584 1290/504/584 +f 1290/504/584 1291/507/584 1288/506/584 +f 1286/508/502 1288/509/502 1291/510/502 +f 1291/510/502 1287/511/502 1286/508/502 +f 1285/512/585 1289/513/585 1288/514/585 +f 1288/514/585 1286/515/585 1285/512/585 +f 1292/511/509 1293/510/509 1294/509/509 +f 1294/509/509 1295/508/509 1292/511/509 +f 1284/504/583 1292/516/583 1295/517/583 +f 1295/517/583 1285/505/583 1284/504/583 +f 1294/517/586 1293/516/586 1290/504/586 +f 1290/504/586 1289/505/586 1294/517/586 +f 1295/518/587 1294/519/587 1289/513/587 +f 1289/513/587 1285/512/587 1295/518/587 +f 1296/504/588 1297/505/588 1298/506/588 +f 1298/506/588 1299/507/588 1296/504/588 +f 1300/506/589 1301/505/589 1302/504/589 +f 1302/504/589 1303/507/589 1300/506/589 +f 1298/508/485 1300/509/485 1303/510/485 +f 1303/510/485 1299/511/485 1298/508/485 +f 1297/512/590 1301/513/590 1300/514/590 +f 1300/514/590 1298/515/590 1297/512/590 +f 1304/511/12 1305/510/12 1306/509/12 +f 1306/509/12 1307/508/12 1304/511/12 +f 1296/504/591 1304/516/591 1307/517/591 +f 1307/517/591 1297/505/591 1296/504/591 +f 1306/517/592 1305/516/592 1302/504/592 +f 1302/504/592 1301/505/592 1306/517/592 +f 1307/518/593 1306/519/593 1301/513/593 +f 1301/513/593 1297/512/593 1307/518/593 +f 1308/504/594 1309/505/594 1310/506/594 +f 1310/506/594 1311/507/594 1308/504/594 +f 1312/506/595 1313/505/595 1314/504/595 +f 1314/504/595 1315/507/595 1312/506/595 +f 1310/508/495 1312/509/495 1315/510/495 +f 1315/510/495 1311/511/495 1310/508/495 +f 1309/512/596 1313/513/596 1312/514/596 +f 1312/514/596 1310/515/596 1309/512/596 +f 1316/511/12 1317/510/12 1318/509/12 +f 1318/509/12 1319/508/12 1316/511/12 +f 1308/504/594 1316/516/594 1319/517/594 +f 1319/517/594 1309/505/594 1308/504/594 +f 1318/517/595 1317/516/595 1314/504/595 +f 1314/504/595 1313/505/595 1318/517/595 +f 1319/518/597 1318/519/597 1313/513/597 +f 1313/513/597 1309/512/597 1319/518/597 +f 1320/504/598 1321/505/598 1322/506/598 +f 1322/506/598 1323/507/598 1320/504/598 +f 1324/506/599 1325/505/599 1326/504/599 +f 1326/504/599 1327/507/599 1324/506/599 +f 1322/508/9 1324/509/9 1327/510/9 +f 1327/510/9 1323/511/9 1322/508/9 +f 1321/512/600 1325/513/600 1324/514/600 +f 1324/514/600 1322/515/600 1321/512/600 +f 1328/511/504 1329/510/504 1330/509/504 +f 1330/509/504 1331/508/504 1328/511/504 +f 1320/504/601 1328/516/601 1331/517/601 +f 1331/517/601 1321/505/601 1320/504/601 +f 1330/517/602 1329/516/602 1326/504/602 +f 1326/504/602 1325/505/602 1330/517/602 +f 1331/518/603 1330/519/603 1325/513/603 +f 1325/513/603 1321/512/603 1331/518/603 +f 1332/648/604 1333/649/604 1334/650/604 +f 1334/650/604 1335/651/604 1332/648/604 +f 1333/652/605 1336/653/605 1337/654/605 +f 1337/654/605 1334/655/605 1333/652/605 +f 1337/656/606 1336/657/606 1338/658/606 +f 1338/658/606 1339/659/606 1337/656/606 +f 1339/660/607 1338/661/607 1332/662/607 +f 1332/662/607 1335/663/607 1339/660/607 +f 1332/648/608 1340/664/608 1341/665/608 +f 1341/665/608 1333/649/608 1332/648/608 +f 1336/653/609 1333/652/609 1341/666/609 +f 1341/666/609 1342/667/609 1336/653/609 +f 1336/657/610 1342/668/610 1343/669/610 +f 1343/669/610 1338/658/610 1336/657/610 +f 1338/661/611 1343/670/611 1340/671/611 +f 1340/671/611 1332/662/611 1338/661/611 +f 1344/504/612 1345/505/612 1346/506/612 +f 1346/506/612 1347/507/612 1344/504/612 +f 1348/506/613 1349/505/613 1350/504/613 +f 1350/504/613 1351/507/613 1348/506/613 +f 1346/508/502 1348/509/502 1351/510/502 +f 1351/510/502 1347/511/502 1346/508/502 +f 1345/512/614 1349/513/614 1348/514/614 +f 1348/514/614 1346/515/614 1345/512/614 +f 1352/511/12 1353/510/12 1354/509/12 +f 1354/509/12 1355/508/12 1352/511/12 +f 1344/504/615 1352/516/615 1355/517/615 +f 1355/517/615 1345/505/615 1344/504/615 +f 1354/517/616 1353/516/616 1350/504/616 +f 1350/504/616 1349/505/616 1354/517/616 +f 1355/518/617 1354/519/617 1349/513/617 +f 1349/513/617 1345/512/617 1355/518/617 +f 1356/504/618 1357/505/618 1358/506/618 +f 1358/506/618 1359/507/618 1356/504/618 +f 1360/506/619 1361/505/619 1362/504/619 +f 1362/504/619 1363/507/619 1360/506/619 +f 1358/508/502 1360/509/502 1363/510/502 +f 1363/510/502 1359/511/502 1358/508/502 +f 1357/512/620 1361/513/620 1360/514/620 +f 1360/514/620 1358/515/620 1357/512/620 +f 1364/511/12 1365/510/12 1366/509/12 +f 1366/509/12 1367/508/12 1364/511/12 +f 1356/504/621 1364/516/621 1367/517/621 +f 1367/517/621 1357/505/621 1356/504/621 +f 1366/517/622 1365/516/622 1362/504/622 +f 1362/504/622 1361/505/622 1366/517/622 +f 1367/518/623 1366/519/623 1361/513/623 +f 1361/513/623 1357/512/623 1367/518/623 +f 1368/504/624 1369/505/624 1370/506/624 +f 1370/506/624 1371/507/624 1368/504/624 +f 1372/506/625 1373/505/625 1374/504/625 +f 1374/504/625 1375/507/625 1372/506/625 +f 1370/508/502 1372/509/502 1375/510/502 +f 1375/510/502 1371/511/502 1370/508/502 +f 1369/512/626 1373/513/626 1372/514/626 +f 1372/514/626 1370/515/626 1369/512/626 +f 1376/511/509 1377/510/509 1378/509/509 +f 1378/509/509 1379/508/509 1376/511/509 +f 1368/504/627 1376/516/627 1379/517/627 +f 1379/517/627 1369/505/627 1368/504/627 +f 1378/517/628 1377/516/628 1374/504/628 +f 1374/504/628 1373/505/628 1378/517/628 +f 1379/518/629 1378/519/629 1373/513/629 +f 1373/513/629 1369/512/629 1379/518/629 +f 1380/504/630 1381/505/630 1382/506/630 +f 1382/506/630 1383/507/630 1380/504/630 +f 1384/506/631 1385/505/631 1386/504/631 +f 1386/504/631 1387/507/631 1384/506/631 +f 1382/508/9 1384/509/9 1387/510/9 +f 1387/510/9 1383/511/9 1382/508/9 +f 1381/512/632 1385/513/632 1384/514/632 +f 1384/514/632 1382/515/632 1381/512/632 +f 1388/511/12 1389/510/12 1390/509/12 +f 1390/509/12 1391/508/12 1388/511/12 +f 1380/504/630 1388/516/630 1391/517/630 +f 1391/517/630 1381/505/630 1380/504/630 +f 1390/517/633 1389/516/633 1386/504/633 +f 1386/504/633 1385/505/633 1390/517/633 +f 1391/518/634 1390/519/634 1385/513/634 +f 1385/513/634 1381/512/634 1391/518/634 +f 1392/672/9 1393/673/9 1394/674/9 +f 1394/674/9 1395/675/9 1392/672/9 +f 1394/676/11 1396/677/11 1397/678/11 +f 1397/678/11 1395/679/11 1394/676/11 +f 1393/680/635 1398/681/635 1396/682/635 +f 1396/682/635 1394/683/635 1393/680/635 +f 1393/676/64 1392/679/64 1399/678/64 +f 1399/678/64 1398/677/64 1393/676/64 +f 1395/683/636 1397/682/636 1399/681/636 +f 1399/681/636 1392/680/636 1395/683/636 +f 1400/684/11 1401/685/11 1397/678/11 +f 1397/678/11 1396/677/11 1400/684/11 +f 1402/686/637 1400/687/637 1396/682/637 +f 1396/682/637 1398/681/637 1402/686/637 +f 1399/678/65 1403/685/65 1402/684/65 +f 1402/684/65 1398/677/65 1399/678/65 +f 1401/687/638 1403/686/638 1399/681/638 +f 1399/681/638 1397/682/638 1401/687/638 +f 1404/396/453 1405/397/453 1406/398/453 +f 1406/398/453 1407/399/453 1404/396/453 +f 1408/400/639 1404/401/639 1407/402/639 +f 1407/402/639 1409/403/639 1408/400/639 +f 1408/396/454 1409/399/454 1410/398/454 +f 1410/398/454 1411/397/454 1408/396/454 +f 1411/404/640 1410/405/640 1406/406/640 +f 1406/406/640 1405/407/640 1411/404/640 +f 1407/399/641 1406/398/641 1412/408/641 +f 1412/408/641 1413/409/641 1407/399/641 +f 1407/402/642 1413/410/642 1414/411/642 +f 1414/411/642 1409/403/642 1407/402/642 +f 1409/399/643 1414/409/643 1415/408/643 +f 1415/408/643 1410/398/643 1409/399/643 +f 1406/406/644 1410/405/644 1415/412/644 +f 1415/412/644 1412/413/644 1406/406/644 +f 1416/672/64 1417/673/64 1418/674/64 +f 1418/674/64 1419/675/64 1416/672/64 +f 1420/675/10 1421/672/10 1422/673/10 +f 1422/673/10 1423/674/10 1420/675/10 +f 1418/676/9 1424/677/9 1425/678/9 +f 1425/678/9 1419/679/9 1418/676/9 +f 1417/680/645 1426/681/645 1424/682/645 +f 1424/682/645 1418/683/645 1417/680/645 +f 1417/676/509 1416/679/509 1427/678/509 +f 1427/678/509 1426/677/509 1417/676/509 +f 1419/683/646 1425/682/646 1427/681/646 +f 1427/681/646 1416/680/646 1419/683/646 +f 1420/684/9 1423/685/9 1425/678/9 +f 1425/678/9 1424/677/9 1420/684/9 +f 1421/686/647 1420/687/647 1424/682/647 +f 1424/682/647 1426/681/647 1421/686/647 +f 1427/678/509 1422/685/509 1421/684/509 +f 1421/684/509 1426/677/509 1427/678/509 +f 1423/687/648 1422/686/648 1427/681/648 +f 1427/681/648 1425/682/648 1423/687/648 +f 1428/396/453 1429/399/453 1430/398/453 +f 1430/398/453 1431/397/453 1428/396/453 +f 1432/400/446 1433/403/446 1429/402/446 +f 1429/402/446 1428/401/446 1432/400/446 +f 1432/396/454 1434/397/454 1435/398/454 +f 1435/398/454 1433/399/454 1432/396/454 +f 1434/404/448 1431/407/448 1430/406/448 +f 1430/406/448 1435/405/448 1434/404/448 +f 1429/399/649 1436/409/649 1437/408/649 +f 1437/408/649 1430/398/649 1429/399/649 +f 1429/402/650 1433/403/650 1438/411/650 +f 1438/411/650 1436/410/650 1429/402/650 +f 1433/399/651 1435/398/651 1439/408/651 +f 1439/408/651 1438/409/651 1433/399/651 +f 1430/406/652 1437/413/652 1439/412/652 +f 1439/412/652 1435/405/652 1430/406/652 +f 1440/648/653 1441/651/653 1442/650/653 +f 1442/650/653 1443/649/653 1440/648/653 +f 1443/652/605 1442/655/605 1444/654/605 +f 1444/654/605 1445/653/605 1443/652/605 +f 1444/656/654 1446/659/654 1447/658/654 +f 1447/658/654 1445/657/654 1444/656/654 +f 1446/660/607 1441/663/607 1440/662/607 +f 1440/662/607 1447/661/607 1446/660/607 +f 1440/648/655 1443/649/655 1448/665/655 +f 1448/665/655 1449/664/655 1440/648/655 +f 1445/653/656 1450/667/656 1448/666/656 +f 1448/666/656 1443/652/656 1445/653/656 +f 1445/657/657 1447/658/657 1451/669/657 +f 1451/669/657 1450/668/657 1445/657/657 +f 1447/661/658 1440/662/658 1449/671/658 +f 1449/671/658 1451/670/658 1447/661/658 +f 1452/688/538 1453/689/538 1454/690/538 +f 1454/690/538 1455/691/538 1452/688/538 +f 1456/692/10 1457/693/10 1453/694/10 +f 1453/694/10 1452/695/10 1456/692/10 +f 1458/691/368 1459/690/368 1457/689/368 +f 1457/689/368 1456/688/368 1458/691/368 +f 1460/696/551 1461/697/551 1462/698/551 +f 1462/698/551 1463/699/551 1460/696/551 +f 1464/700/9 1465/701/9 1461/702/9 +f 1461/702/9 1460/703/9 1464/700/9 +f 1466/699/659 1467/698/659 1465/697/659 +f 1465/697/659 1464/696/659 1466/699/659 +f 1468/672/9 1469/673/9 1470/674/9 +f 1470/674/9 1471/675/9 1468/672/9 +f 1470/676/10 1472/677/10 1473/678/10 +f 1473/678/10 1471/679/10 1470/676/10 +f 1469/680/635 1474/681/635 1472/682/635 +f 1472/682/635 1470/683/635 1469/680/635 +f 1469/676/64 1468/679/64 1475/678/64 +f 1475/678/64 1474/677/64 1469/676/64 +f 1471/683/636 1473/682/636 1475/681/636 +f 1475/681/636 1468/680/636 1471/683/636 +f 1476/684/10 1477/685/10 1473/678/10 +f 1473/678/10 1472/677/10 1476/684/10 +f 1478/686/660 1476/687/660 1472/682/660 +f 1472/682/660 1474/681/660 1478/686/660 +f 1475/678/64 1479/685/64 1478/684/64 +f 1478/684/64 1474/677/64 1475/678/64 +f 1477/687/661 1479/686/661 1475/681/661 +f 1475/681/661 1473/682/661 1477/687/661 +f 1480/704/64 1481/705/64 1482/706/64 +f 1482/706/64 1483/707/64 1480/704/64 +f 1484/708/662 1480/709/662 1483/710/662 +f 1483/710/662 1485/711/662 1484/708/662 +f 1486/712/663 1481/713/663 1480/714/663 +f 1480/714/663 1484/715/663 1486/712/663 +f 1486/708/664 1487/711/664 1482/710/664 +f 1482/710/664 1481/709/664 1486/708/664 +f 1485/715/665 1483/714/665 1482/713/665 +f 1482/713/665 1487/712/665 1485/715/665 +f 1488/706/10 1489/705/10 1490/704/10 +f 1490/704/10 1491/707/10 1488/706/10 +f 1491/706/666 1490/705/666 1492/704/666 +f 1492/704/666 1493/707/666 1491/706/666 +f 1490/706/667 1489/705/667 1494/704/667 +f 1494/704/667 1492/707/667 1490/706/667 +f 1494/707/668 1489/706/668 1488/705/668 +f 1488/705/668 1495/704/668 1494/707/668 +f 1488/706/669 1491/705/669 1493/704/669 +f 1493/704/669 1495/707/669 1488/706/669 +f 1496/716/368 1497/717/368 1498/718/368 +f 1498/718/368 1499/719/368 1496/716/368 +f 1500/720/12 1501/721/12 1497/717/12 +f 1497/717/12 1496/716/12 1500/720/12 +f 1502/722/368 1503/723/368 1504/724/368 +f 1504/724/368 1505/725/368 1502/722/368 +f 1505/725/12 1504/724/12 1506/726/12 +f 1506/726/12 1507/727/12 1505/725/12 +f 1508/728/368 1509/729/368 1510/730/368 +f 1510/730/368 1511/731/368 1508/728/368 +f 1511/731/10 1510/730/10 1512/732/10 +f 1512/732/10 1513/733/10 1511/731/10 +f 750/734/493 728/735/493 723/736/493 +f 723/736/493 746/737/493 750/734/493 +f 1514/738/670 1515/739/670 1516/740/670 +f 1516/740/670 1517/741/670 1514/738/670 +f 1517/742/671 1516/743/671 1518/744/671 +f 1518/744/671 1519/745/671 1517/742/671 +f 1518/740/672 1520/739/672 1521/738/672 +f 1521/738/672 1519/741/672 1518/740/672 +f 1520/744/673 1515/743/673 1514/742/673 +f 1514/742/673 1521/745/673 1520/744/673 +f 1514/738/674 1517/741/674 1522/746/674 +f 1522/746/674 1523/747/674 1514/738/674 +f 1517/742/675 1519/745/675 1524/748/675 +f 1524/748/675 1522/749/675 1517/742/675 +f 1521/738/676 1525/747/676 1524/746/676 +f 1524/746/676 1519/741/676 1521/738/676 +f 1521/745/677 1514/742/677 1523/749/677 +f 1523/749/677 1525/748/677 1521/745/677 +f 1526/738/670 1527/741/670 1528/740/670 +f 1528/740/670 1529/739/670 1526/738/670 +f 1527/742/678 1530/745/678 1531/744/678 +f 1531/744/678 1528/743/678 1527/742/678 +f 1531/740/672 1530/741/672 1532/738/672 +f 1532/738/672 1533/739/672 1531/740/672 +f 1533/744/679 1532/745/679 1526/742/679 +f 1526/742/679 1529/743/679 1533/744/679 +f 1526/738/674 1534/747/674 1535/746/674 +f 1535/746/674 1527/741/674 1526/738/674 +f 1527/742/680 1535/749/680 1536/748/680 +f 1536/748/680 1530/745/680 1527/742/680 +f 1532/738/676 1530/741/676 1536/746/676 +f 1536/746/676 1537/747/676 1532/738/676 +f 1532/745/681 1537/748/681 1534/749/681 +f 1534/749/681 1526/742/681 1532/745/681 +f 1538/750/653 1539/751/653 1540/752/653 +f 1540/752/653 1541/753/653 1538/750/653 +f 1539/754/682 1542/755/682 1543/756/682 +f 1543/756/682 1540/757/682 1539/754/682 +f 1543/758/654 1542/759/654 1544/760/654 +f 1544/760/654 1545/761/654 1543/758/654 +f 1545/762/683 1544/763/683 1538/764/683 +f 1538/764/683 1541/765/683 1545/762/683 +f 1538/750/655 1546/766/655 1547/767/655 +f 1547/767/655 1539/751/655 1538/750/655 +f 1542/755/684 1539/754/684 1547/768/684 +f 1547/768/684 1548/769/684 1542/755/684 +f 1542/759/657 1548/770/657 1549/771/657 +f 1549/771/657 1544/760/657 1542/759/657 +f 1544/763/685 1549/772/685 1546/773/685 +f 1546/773/685 1538/764/685 1544/763/685 +f 1550/774/538 1551/775/538 1552/776/538 +f 1552/776/538 1553/777/538 1550/774/538 +f 1554/778/12 1555/779/12 1551/780/12 +f 1551/780/12 1550/781/12 1554/778/12 +f 1556/777/368 1557/776/368 1555/775/368 +f 1555/775/368 1554/774/368 1556/777/368 +f 1558/750/604 1559/753/604 1560/752/604 +f 1560/752/604 1561/751/604 1558/750/604 +f 1561/754/682 1560/757/682 1562/756/682 +f 1562/756/682 1563/755/682 1561/754/682 +f 1562/758/606 1564/761/606 1565/760/606 +f 1565/760/606 1563/759/606 1562/758/606 +f 1564/762/683 1559/765/683 1558/764/683 +f 1558/764/683 1565/763/683 1564/762/683 +f 1558/750/608 1561/751/608 1566/767/608 +f 1566/767/608 1567/766/608 1558/750/608 +f 1563/755/686 1568/769/686 1566/768/686 +f 1566/768/686 1561/754/686 1563/755/686 +f 1563/759/610 1565/760/610 1569/771/610 +f 1569/771/610 1568/770/610 1563/759/610 +f 1565/763/687 1558/764/687 1567/773/687 +f 1567/773/687 1569/772/687 1565/763/687 +f 1570/620/526 1571/621/526 1572/622/526 +f 1572/622/526 1573/623/526 1570/620/526 +f 1574/624/527 1575/625/527 1571/626/527 +f 1571/626/527 1570/627/527 1574/624/527 +f 1571/621/528 1576/628/528 1577/629/528 +f 1577/629/528 1572/622/528 1571/621/528 +f 1575/625/529 1578/630/529 1576/631/529 +f 1576/631/529 1571/626/529 1575/625/529 +f 1576/628/530 1579/632/530 1580/633/530 +f 1580/633/530 1577/629/530 1576/628/530 +f 1578/630/531 1581/634/531 1579/635/531 +f 1579/635/531 1576/631/531 1578/630/531 +f 1579/632/532 1582/636/532 1583/637/532 +f 1583/637/532 1580/633/532 1579/632/532 +f 1581/634/533 1584/638/533 1582/639/533 +f 1582/639/533 1579/635/533 1581/634/533 +f 1582/640/534 1585/641/534 1586/642/534 +f 1586/642/534 1583/643/534 1582/640/534 +f 1584/644/535 1587/645/535 1585/646/535 +f 1585/646/535 1582/647/535 1584/644/535 +f 1585/641/688 1570/620/688 1573/623/688 +f 1573/623/688 1586/642/688 1585/641/688 +f 1587/645/537 1574/624/537 1570/627/537 +f 1570/627/537 1585/646/537 1587/645/537 +f 1588/782/689 1589/783/689 1590/784/689 +f 1590/784/689 1591/785/689 1588/782/689 +f 1592/786/690 1588/787/690 1591/788/690 +f 1591/788/690 1593/789/690 1592/786/690 +f 1594/790/691 1589/791/691 1588/792/691 +f 1588/792/691 1592/793/691 1594/790/691 +f 1595/794/692 1590/795/692 1589/796/692 +f 1589/796/692 1594/797/692 1595/794/692 +f 1593/793/693 1591/792/693 1590/791/693 +f 1590/791/693 1595/790/693 1593/793/693 +# 2214 faces + +‰PNG + + IHDRHÃÛ±sRGB®ÎégAMA± üaPLTE   + +     " + #&"*,! 1833;:  '# +# )!;"2.?184%#!%'(&(()&#('(+(%-+*./0.010'$0)&1.+41-83/333568688952878=95:;;r, y- r-x/u9 w1z2@?@IDVE \AEA=HC>TN [U#iB cBiWzEtJ~QzRb[&y^(kd+sl.vo1{s2CCCCGHEIIJEAHGHMIDJKKLNPNPNMQQPKFRNIUQKYTNSSSUWXWXWUXX[VP^XRZ[[\_`_`_^``a\Ud^Xf`Zjd]mh_abbdghfhilf`nhaijjnpprleunhvpizslrsswyy}vp~xpxxx€1ƒ4‡I M†U’]ˆ\ _ Œ`™c‰h)ƒ{6œi!žq/™|0¦j¤r±h²u¦i!®t!°s zs†~xÅlÍ{Ë ‹‚:œ†,•‡=¥‰³€©Š.°’.˜Ž@œ’B†€x¦šE·œK­¢J´©Mº¯P½²QɈ&É•!É«'ɯ7Ī@ʲL¶TÓ´B«««¸¸¸ÄÄÄIÇ¡BtRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿS÷% pHYs  ÒÝ~ütEXtSoftwarepaint.net 4.0.19ÔÖ²dûhIDATx^Ôý]‹\Y–¦‹*S•ªð„¸ˆÛÞ¨ “刺GÊ¡[æ¶l…7TŠâÔé0ˆYœÎìJ•)•眾‘~BƒÐ¹Ëoä7þQîà’ ÄÞ"úô¯8ÏóÎeþ%—B‘½woÎps³õ1×üsŒwŒ1×\s]˜.©j¦ÝlÖMç‹®«W§m[Õ£ÕÁpTÕÓº®ÇÓ¶ÕM3­«Ñ`8®ªºªÙ!QÓrÍ´Z¹4à ñ5jÛY;í¦Õ`0¹ºjªÕz>å`;ªñÌ„m;Tm[OÛzTMç]×ví‚ ê¶m: +µX³›ÖM=¤àqÅ¡þȸŽG5e°[U•ùåL]Û錖¸Ï–GÆ«WHAIÓùx<]×U5ªVW)™ +M)»mHÍ5-ÕäHGNªÇ4¢šœ%'RQšN4wJœæÐ˜Ži©GÇÕå•UÙFâñZá ü¸b6[Ën0š·S¶OÑxDM¦][ÏH3žŽ«áÊJ5Z¡l8œÃɵ©Èßßs¸A+Øžu-Ô®"hóÙ¬…‹íÙéþDÇS‘–=ŽMåù`eµ¢î#{Ç–Û_CŒFílnÁ2I„5)é;d×IJmDiŽÒš"ÇSê+ÇÆ«”3žµ³ª©i6Rº˜ÿõté„V.]„úc²ÆCdhìVð4y]ˆ<ü»üËè’_+«’2w’r4§s}¿ÝÓ0ë€i`@Ëø;€)xF(+×L«ËD‹):˜CEoû ò¬‡—*õ-¢‚µLz iÿGÐ+@¾CÂZb- ëh¿@.l`K]ÔëRÑp‘üTtvj:–Î'%@çs\»2­yªn#€kǵý=?8º‚Œ€Ë@u—dõdBm¨0j*z·[@5Z=+ÐÞ5`8×êií3ª‰¬­Ù°1ŠP@G§ÿÏôî¼ÏÅ /²!õ@ÀÏŠäåºóEO`FÑÿ••Ëþ]ò{å2´:8þ*ä”<ú힀ßÂ#þ—À7Àx€N(šxä åŽXìÀu»S¥°~ä(‘xã¥@ûŠzžï4ŘÖ×"†ö!‹Ÿð~{Æ8Ò$Jy¿Uö€€0æ +<€Ë N‹º÷"$Œ€Ô À¹J8òP9Žö ^è¨pÍø}=€hÖzóc õ:Ç ot¨x ýU{Vû  é¾éñªSÀ¬÷è°xßÀ€³À7üÏ9\×eùL@Ö¥€Þw¥Ç¡â zôø{0—šƒ£ñ¾YÀ‘pÍΨ%ØÇåbó©¯ÈvÒø`ý’°ÔùŸ¥ÀöI²ÆÍxý±éJÚX‰}ÿz@µ¾|äø½tN{ìe»'Ànäÿ¤PB€épu‡ÓùÇpʘ㬟õð×aí 1-€päL×Û¡º^ÏÌú`|- L7 ÂIu‹ i9ë "³o¨²j{Ò¬Áà«xˆÎ‘@ÂKi:ߘ{Ãs<€ñøjñ8LËí€`^ à„0nòј~#phééçx(õ àeñ(é´P +z‹``SßåPï‰8Õ{ÍqÐ{Ë ÷;ÿ¤°BØ ûÓâm@è€o†ñõ:Dµ<òûÔ.!Àš!€Àÿ•!@Qàå÷ àôÊúµ˜ý³‰‹þcõO{—cû ü¨0~s @Xz£Q„>€¼éØtMï¨Fg=úó´`‡¨™çysŠHY“äyû@o}C,Nd‘âÎzÝxíØ@ƱÞè xbÃiSW<ô&pìÔS¥Ž<€aØÃ¡‰z@Ŷ†n÷Ô¬ùyg˜ìV¯Z¯Ó!¨Ì»<€À(*uä€áÅhNœö`Á)@öžòà ÒÀ —^†rî€5;öæ‚Xï$ŽBô¿x§ÇÆe  jš>8é0XŸ.º^›ÿ +zÔ+â{’ú«Æ.57F<û'B€‹ñ¡¥ПJ²|ïè=€Ëçz¢„™œôÆã *ÍÉ xƒÞÐÇ:ãPÅ#àh @··èÂxãSÀøÌÀ´÷æ)–ü¨_ó>c3¼h’g €à‘#`zì8ðvà·çz¶˜æ@OzÕÒÐa8ϰ¦ ÎóÐþo#-=€÷@âhÏŽ@æiMùyÓø¦xÓó<€«‚ZñN¼·àÐ mŽPŸÔxËÀµ.cñ¨ØåxôîQðÎ1ଥ¡âаÞ(c†xßôÚüÓéÑ£Ÿˆ=5.P¶éâEôVü¢—‡ÃrŒ~=áô€ ý_zQèXûA€+"À»=Åâ‚ø[9z®€µ”•‡Óc + ;ïò„…sÆÖÎŽ¨™çܘz1´ÅúõØ8  „ÿGŒ°ÛË1€Òº7=€ÓckÇw8 Ž=«Y<€Ñ_ë Ùý•cÔó(°J½ÐÄ€/çy½Ðàïô€ä䀭+À©»g<$Bèïóôÿ´ðæ]€3cñ†x%˜:åœ +þGÆÐÿ¿Ôbqå"!@¿¿$=ŽèÉëÏŸE‡ž.ö>@Uôÿx €KVñâ@ÃQï¼e ÙØ‘§<€þ.@<´Ì^YÀé»§Ç~Ô ?ûÛ€½à]:äÜ1€ùôx   Ï8åäL?Pôõ¬@ûNŽâ'Ý8ßPéNyc4UAÞðû?a €¾à…'=² ˜gýλíYeœ +çÜ4GÙé=õÛ>è=€£»'=€å@ØàÇÆ‚+ÀÉÀ€Ú’²Ú«P-=€”Ø{¤Ô8üŒþ: ¨½Jìö ›ÎvÎø¥ŽæÈùô ý÷ïòªÖ?w0üÀ9š⸉Tü K@: àÄ]l3}_ Œ¼ý.Ài5z·°~¾p40E(þ›ztí]óŠ&}ãÉ2@ =ëœÐè€zŸôÈôì]ƒÝ´îM   =òTÙhE[,ð5Ñï ¿l†~Š`çлòÊfZ<,b <’£çŒä.gÎxhÿ±pv  (¿í9òØ98×XÞ,ÀŽÐÁêÕßNÜ83Ð{Ã¥pÎÀ‘»Ó¿Šþÿµ€j/õÿ4E7uë1åÙ,t).è@$]]U·WýÅúÇæ_¡£è¿÷Á›Í.²ƒàºî1€wÜÐñŠô,=€ãy?êtO?ÐþÈ€Š­àS¿ùd0¶.H Bl•ëx\„T! 6BKdý°~%§Ôÿºº|a¥ÖÊ£EÑÐH8à=p¦Q i‡ÐrN1”­5¡X2¢Q¡åצxœ­"ÜxêKÒ"¸”$,ŒqņC”¦"§%ÚC‰ ž£(ÖZ‚ÇH5ªE»gs•¤Ü‹+c@&cðE£yhM±T$ÔQž8ãˆRcègTÅ8—þÁ9$GàþÝP$ៅÓð]Ÿ½ár¶©÷NŽœw@x÷ÀÙÛ€ï*ú1*…mëÇNÜ(!¶ªÀÉ»½@Îø» Ы¿ÔëäO$BÌ} îFÆï.»Ó†¡g=žD=$´ÜA•UÃܪòt^"­Õë‰P\áÈOÑýÐ…ô"Á2j CÚö›Å"c8ì\4*ÃÙör=jî²RÓE3ñª¼˜#ô—ÐuäCÁÁ o×c»¬y`ZÓ¥CôÖø¥¸ +ߺÓÄQhÛÆh1Ïä¬qH¨@ KVÙP2³TŽ"¤ÕSšú£S4¹%z^HB 5Ê:­s7_´æ­”D²CR FÉj«U³œ9iYã nJ† PÍRÎP§$e` ¥ÈƒË— £¤z´¢ᜠÎÁyÐ]6s² ºYSkj“f` +ˆ 0ê`¢@c©ˆËª އ­¶d5½L¸7ê–^£šòжè@L¢˜`º9šØrÔ€IŽP<.ð´³4#ÞP×Wèà¡wäynŽxk”š“:sopâmQ8Üw³]“tù´ÅéC¶ô.pwÀïv±`»j|…ã£U¢&²«ÀaG`ÕZLÇ“z8×?«[›„S%àRÜ&D—úS)"3,ƒ™ÝvJ‘¾Íx +`YHô¡Ý_y WþPú'Rù2õ¤eÑR±Úì_­J„¶æI¡[Ðjöy½‡¥°¼’Ø«‘àJÍ¡ýh¸—9 +ö\NWbÔüžJ ‘½™¶ÑAÌÔªÐKÙ|‚µG¨€¢t4¾»Œàí3T}ÓD*Wâª~ ¬h0!@ô+Ù¢Q³uªX³ð0"l» Ï€ü èÆAJ·zõ`´ +ȑ۸dê ¬ ©• +.Ô +©±0J¤n´È +JÆÈ-'þ -¯«\.\á+"‡¹¤­šÏlŽôÐðÞxVƒø|ðJšñ¤ê…ªÒÃã"É!„¦ëð̦+—PR/Eê +Î t=@³éz7*‡ö–—FÁw›c»9ˆÖ ]ªúO“Xb.Sòjc¿Z£‰¥Àg õTB#´lÚúN0“o†‚LÊÖk;\¿Å_Z:뤵ážR#{éZª®þã§èd»+Ë<ŠxŒêÎû;³KmüTö Ykr}:ûº ÈîÉAÔ8'»+¼Ý6jEè‰àU¸UŽ ílÂêDáÓŽ,©~d‰Íþ"º&æ_¡Cœ€Ò§zö$Žî& Œ¦¾¿‚zÕï©èôO#ÔxeÞ§%Õx:AÔ"­±øûí A™¥ø'=€«J†A¨×Òa™™Û!X/÷Ñ<ÊiZ:¤&Ü%«%]Ðw‚%³*„/<†Wkºf¦é!žÚq¶ºë âQ6‚ïWM¦ßG7öb¦ãÝÎõŒµ¦XaP¬:Ž}*eO”a£fzj-8‚¡B:¼y[0o¨*£àia:<‚I:œb +0Ah¨·N¬c«+B  Ê'þ¬+ /U~þÓþ5ÜÁ—ãÇ6ZƒuªAjÊ HDÒõ–€6QEWÓÉtÔÔ×À®†ú™JÀœ¡¡C‘@€ƒ†àpÓ5R£€3%q:¦áDÂ~Kë$áRÂ‚Š¦Ñ4d=ˆ€ú«”IŠ%À¡˜  €¥T†¨¶ÚÏå8Ü€R 8àÑŒ¥§š õ5þgSØ +v#n¢< ànqߪÚ9ÁšÂvöÑA\HŽQŒµƒ0ÂÀ‘R @®Œ…wŽÇHá–+WñÜ3ƒ€êàVRÓªZ›u_O÷M’‘‡òöP‹9â‡ÁËñH/gNçÍ7” 9ËÈu„âRfK¨,€Kf¸ºSäšnÅÆ <·Š3ˆØÑiS5„ºÉ_½âQ¯Ô?â lœ%ÆAÄ©xå°³ÂMï¡F+Ša¼K>HÙØ‘¼c`4ºzUÈ(Àe!{2ý•>ÄÌDájdàev^*@гžÂ Ô°›ã2Ï3ÈŠš›{ÝLF@S…s4Ρ%%NbFÁ(U:e†£ßÖ£Ùl¬fu— +¢,ò¹+tã­8­‘¯ð4y,çj%ø°ƒLààÎBl¼¼¡œÕ!úŸˆB¡ŸLm¼–û„º4¶ªÖCJ ÁF×#~j‡Á€Á@a…E˜Šö¶H舠ëˆ.Ì…ñ£xS € +aJ+4Â@”,²käRV€ã€ÝBÏ­:x¡„Ä £4oJZÕÚ:w÷#Eôâ`ù#Ââ`U¯ª(qÐÛŒ®Q¸m´«Õ +|n;ŸÆY1!Xã`Á` ÐÞÄJvMÓÎa"(òGïÀxÞŽÂP©p†M€A3¾ºªú+d‡YB RC«3œbÁœ šÀ,B-êBfݬE´Š ùí£“U Ä/€kcÃVðdT‰…0< DÙ DÏa¾GPwÉ +@„›«Ëa]®{ßA˜*ÂЈÈÀ´(ôO¥^ï©hõO!³¥Ø +·J’jK!­r;š{P&Û%Õµ`C€¥ e€Ï0ÄLàDn-¹_g4––õcÚÌYz 9Š„h1Êgé@Õ¼[GóHàTFÍ»´Ô8\ñ8§p˜]×7„'A:8@% ý.y†8$­—Dð :t òÈ#Ù„±‡  ëiP{ÊÃ?q°@ù3*m0½ô„½CÉQލBÚ¸ ´5^)• ¨Çбél}}6rΜ·ï—@“°Å@œ¢Òæîm@'ý8Øîqµˆ< yu4!2š®Ù@ªª7Ø%þIav㔢לQ_Ç^eRG¯Ó„yG°(‡9ÜÅði +à=¯©þP<ê.ÃP]ò¯GH-\ƒ=d>rÈLI‘s3”ßaÂŬ4.¸ýóØ~¡+NXw¿Ë=J‘¸ £Ñ|þ[.Ý”ÚÒ ê8Q f¬ Ù‚/6µ•T‰8¼‚À;†@‡“Ä´Ìù-  );G»5:=÷=ìÕþ­~Rÿ/!B +†#.mv"N4ôõ^J„ËãVŸ$—§ôÀaeQ´éb¾„ò›Eù&c˜Cäy`ÔÇNØé ÃÒð+Nø¼}°€oè¤à ®±™¦wï£a¨¶ãÌv¢Ü©¬V½Õ%ŒÃ‘µÕè¦t³®Â¸&° ž£0yt%°­S¨[ jLŸ¢ˆ]YI”OhDI eòF/©@qY3_8*$›ÙxX@ÕoÇë8ÂzʃÕs+Tåô+F«½FP’VYÏ …¨ß%þ’†—¤¨Üé/Í:Û㕌aI4”T^“ÖCZ9[v€”âsØ5E¬(€©¥ß©"<¼|i…,Umºº€OU`ƒ]®ÄÃÊ@e,„†qTxÕÝAÖ‰ÑTFŽ:ús³Þ6ØÁEäN9ø¾õÇb›+ EÕ0Âf­H§óÀ•ñÈÙ5º è[ö^"Vjf1Fþ+XŒƒN"s–O%ëÍjéípôµjåòh^Wö=eÂw¼8Ú ª»@ì¡ceÁP¯æ±öºœ`®6+ë¬QQY ïåØh +ÇãsxCöp°—ذé2à§Ñ£Ç½ÖŸ¤å÷&Õÿâ¥Ë0Ûγƒ"YÏ—ð[²…°/&X9#A…-»té‚+a ìG4«Xs®(V=$J/ ‰ô2ª5¼:º*C†z5AÇóû€"ŠC~ôÀèÿ%Ž©™M°àMøvëûÈŠˆÆËÛ=hFU«¾„D/ˆ€Cnx ÈÀ1 ™œiÀ͆÷£Õ± Œ¡8J"Ìʌã¢v¢QÁzÏs‡æ€ÒDß w]䣀҆)†€¼âûÄœvûêÒ*:EÊVÝÇKòfà'3ç èÐLvñÄO̦L°ÀÌ¡ÀxêŒP'_J £¦0(ÑJMÁö«V(rïðjÐÄÀ OëS"æ'ó©äÝÛȺˆæ]2àÐ|Š,Ñ/Ø.4EòTÞKè8ÚÓ ¬Ï̈ëÈmŒîÓÛ] þkP<2N†íÞK  +øV§¥”9jMæNB¥®yÇ¿&\•gQÿ–˜R›³ˆ …ã N+'D9_´c€?«íò©7Ž`šVÂ[©Rº\¢™T9àÚˆYrÌÊq VDÂÛ'O‡¶ÇÍ}D7XRÍP +.¬µkXxÂ{/ƃ•º[,è!úZ@G´§¢ÛïE½ÊŸ!uú'’A%F@é¢"s¶?½Šàˆ~š~Ðô DB<¨E=‘¶ä”œÎÅáZù7€[Óje¢„°SQÓèÛSk—‰ìÌ»tÆÐ›ÎN­pìé5=®œÔõíkç×HéÈÂhÕ9ˆ¹Ì‰Ìäg´À…R~Fã¶£l¬)y¨õôþ=Õçì pF6æó’ Þ[‹Ù"ÁêЛ˜D¨dêˆiÝÜuòªÆöxFÇy)2ÖÓnÄÁGIÆCÁÑÉuz_7q0è(oÒ[€ëDƒœïêD䇡½Z +Ğwi ¦"ØAÍÔÄŒ®àg²T +Glµl›K—.g @`Çß L§À™w(h7né`ÔÝWÇBq$<œ’QF;Fbõ,-« å$.Êš›¾!ý /ð&)=;!¥ —(é(öÒ!uo¹‚‘Ä”ÊèàMC‰ºÎ±Ë¹T¨»‘mŸ4•3´Hg’°âãÑG}`´Ç5¸&ºtÑ}Uf³jeÙ^.ºé]@´±Z‡²§åVÓÄ7®=èc|†å±»FÅ:2Øw46ººæZå³c”MRlìç]ŠÐXŸ®QíQõËéƒû°‚|hö¼DÇÔ÷ÂÐ9€ô°Øö÷$Ôÿâ¥UäZ­¦Îé*zD±Aot€Ayù&úqOŠT#BÇñ.Ô×jÚ®v©îNãâ'ªn—Ý@€Ö¶lzûð£Ø«0ùŽ–Ð’ê¡ëîxІ áU©Õëÿ4¢w§c:_ë?™8Ð[¨9…'À(£Ý24ƒ^BDè?¢‰j<;ò«õÅðë´OŒ²©'â8#g„À®Ñ˜•#7ö7ÚãÄı³‘jäÂËT.£À„‚ìùeÉ~ X´Ô]Ã_‡#Òvëáëhu‡«kãÃAëá :¨wmíK»iÍp¤|ÝÅðs1ÆzrMŸ)zk²)E´Ü}ëÐ!qY& K§ë €¦u„kŽl‡ìýÉÑ;òV‡Ã•‹—Ô´zŒò‚p$ð‹håŽê€³ýˆ·Ð@¶:&pžRu½ù¦+ïH}sÅ©½ÇiSÀ„‰ +‡ JelWÝy3®Æï霊H­GÕ•eëÒÑÈ +•àBƒ´%"pdpɹ! 1h£w‚³»à$|¾†ìÓt¼R”µNë)k0D63ÎÁ±ùd.R š0œú¢äÖÛSHh€Ò²‹èƒÚå…7ô0þh‚J¸˜Sí€3r„–÷šÿ“è¼zü“¢€ÀeÕÌ^Ðë§ýãšnÑ[ƒY8âj™š ƒk|–Žñ.­Ä¸àpe4ÑãÎAߩ쾦ÀÐáMàˆzè÷씃n5Gœ‹0ýCd( +qó + TP&Ôp†J³¡þ«Ï’*£uãib{­dE¿¬Dl“ŸÒà²?¦UØá8ƒÞ`¿½4ÒÆ5¥E J ;—åR²Ïç!ö&k3AN¬hÒ[e’[Ÿ$Ч.j`Ž<-¢© `¥ž+}âRx‘²Í„Òù¡ò›‹uhW.S(äm2|—¶¹†vË?ÄÛ€¢'®Ð|â<;ýBF…(L}ÕVXÝU‚@YvÅ:È®¢Ò4fHJ]ô #åtÕ:ȃ1ã5%Š„}v€g×ÓÐI¶œ )5šÈdœ?¬ ½®&‚¼$OÙ¦2ð¶÷©4[àÃXáB*$Þ2.à»Í&ëkM‡ø™Ñ@_±EÎD§A6â¦9üI2n‹•xyáàŒ…fƒBu.MªÈÉÑEÉãfn&¥»ìóÔ½rh Wë÷¦^ßÏ¡‡ñëß@¬„¬·" +fx¦$¸ sK—®QùÊqå#½eá +'ЉÂlµ”n…–j€á'g/ÊQ\²uÖ9æ× ÷Õ;0Ó-Ëñ`‰VW”kÅ^õKö¦9öìãêↄW—.YW®# ­+Š~™˜yplFÙNd©>õ™R×d#7d!*Ëê•V˜Vm†’•í^*[ô_ „Þc¥pÙÀ*°j˜ÐD¯èS*Ó(‚U·-"UÁoõÉ«!ûkVs-“ºÉ +æ­äga² çÿˆ™G>ùd€t1V«I¹ @½lùäZÛG Ãý@ ދ짦~T.˜_ÿü‘"!W5>—C«È'GmZ5NøÏÓº–æ 0£|¦#%Jr¥î_d¿W.^\±ék²Çv{˜–³(+j8&X-êo¡è “…¨8Ι\˜QAÇ‚d©­‹ìêw¦p‘“ƒ4c†ÙX}±#Þ¥©ì†TÂû‚PgÔ“cT/ÓElÇj?ZvŠz'õª~>í¾°éïA½Àåh¼Ê”:>r2 –±ñ0 VX{Ïà ®ó‘ (—z¾"KúÒº´Ð!Dã]`4_ !ê¦~ çÊÅЕÍ$ù¦Gd£Í;zÛÕIz€Ã3;e6­x щ¾Vó —ùàý¦´EíÖ~IÑ»æÿdNøiÓñh)XP÷[…Sù-]oo‹†Í*Á9XQ½:ùt†‰©±5º–$æ[~ûˆ®l+q´ÙS<™Â!$ÿjLcÔ_c&T+›Þ +½NGØrêOÃ=èÝ åÒ\¨'™¸_Œr°@š3zZ#•ðåà'Ñkº‹ãUþNšBáL»‚×`à€¹Ærõ¦Gd´ç­ˆE¦®¶Óú[Ýw«Î§‡Þg*“©®ÙZÒMˆ±"j\iOaM`°šj\¯òh³îGL”\ÎÅÑaøªCR‹KTUå‚4¬dN4¬±BWyú¥Ü Ö0#NøUF%@¤ °©Rý8 ð8Ò€ŠNƒ±°Î‹S÷á +å­Ñaœh;›E9ÞCÍÂíÆ©&üùÏP¯èçÐÐÎáËWpö=ˆðˆ þ±¤0¨àrX0Ðe§™ê>­ô×D¦.]ÆÂäAt`@H^<€°BßÊ¡èÔ›ÊgDáEÕ™[Q.†  +ð $WN/ó‚Ö[ú™ß‹‚´:g¯•Ûʉ÷GËõTs +æ—N£†lûœ uj¸žÈÅsvn4…• òç-4zœ>³ÚމÈ`ÂÑË—VW€›*?>ÐoÎoÃñA½K2ÑÍø03š˜ 8ˆXhOBjGºDHË`¯AQ¸_hëJ8ËPÖ·ÄPVŽ8òÏiÚ[oj¯™ªäæÿZ0sGØÔȱVºiÕvMÔWÎ…ÝÇ4kæ€Ò +ÿh°ê†I“ÆÑÚŒ‚dؾ’9XRl_ôƒRKä—'‘¿«®O7qh@æ|ÖÊcù˜FÜ×ÞÛ@)i]ã l¢g¾ £ùJÙsô!IW‘¶ŸØ´kWVHæi6 UÓQY¥* QØí….™ïjqõ˜É8X·Í¬owfdš(½’ö"¹wPe«'-ùgË |•:Ã^f9¼ê³y¨pÌ´x>D"eùwL½Ê¿Iï + +¼’‘?J£àj2…õôˆHžþ–:<ïÔ(.ìSýÈÍyT¹è1êŸ(Ü}5ÿÜBäš‹ñÄí/ÁZýg%Æ C´lMÓÞu‰AÆf½®š‘θÈ>_«d>2O‡(LþºòTMc1©¡DÙ4ÅãƒÈ¨µCæë™! ÌñÎ.fà:.hTÈÿHâbšÈŸ„)o—\"ß_zÄÈ‘¿Ý=øˆ4°ÄÔ¨*gÀ*‡ +ˆcÍòXàtds`¸mÝÑ$"¢ƒM àÒmjP錧cb@²ã@¢vˆâ=¤•V|#°tZò?&ŒVÝ$E;ñÙ.Ë«Ãj2ºì8œÀøx@ +ŽVˆ*vIɺ5öºn¤7ÁSr)ÜlùõÊ*ãm[]òÝ+ÃáêÊÐ"ƒ’«ËEfèˆ00*¯2ÛWª*ò( ”&ù%³D©ú«¸<‹QسÇ\K:sXÒ/Ís%+â˜-Å)E|2ÁP‡D–ÐD™–J L(’AnE±®õD䉸8®±Y3ýÚBWN ¸/aIï½¢¿‡õ£¤"û uõc§¹1Â1sÛ~³st1Ûš\ç«=V5éwÿ%e3ôEö|ïO;^£Œ5íi×÷ J- ~°¶BµbGÞ“]Í_ +–LëGÞ€›šl­®8¬½¬ÀhœŒ]¡ G:"Wž +}@»yëÓ5ÓûóLíéÈ.)T$¸®9-¸)*”+Æ£K«Ê2gU6}Q줲Õ'¤ÂŽÙGÒÈÖxÁí¡“´Ãýål›U|eºÇÓ™— +L/f7yÒ«È"œÜù£ª±êžuJ„…©-þ[8—•k….Αer‚ó& °§ ØL󅃦ZÕÈÇ:ãD³Ih`ÒÆ|›‹Ï¤ÓŽ5²ïµæf6Æ9È¿^¸]ªÒN¸Š\'ð€±>I²q8‚_ï‹Á`2/*ŸR]]ŽRtÄÚfxÔ!G…à7m0P &Þ§ª3˜ƒÃ(%W2€—°ÍN4Ï%V)¼¡piÕª=ȉ^ÿ/‚ëj ÊfªÂÀ¢pÌ36ƒÃäNbKzˆN”’è~d^MЏ„&ŽwQkô<~ Ùq”¢¸’ŸR߈ÑÐ蔓œrtØ´Ê­òZ´=&­¢`¥œƒÞðz5;õÀþœ÷‡V_¹„×Dui·=Rë¯UNœ»í¼%NhˆP%ÒúfÛ…qìë8 >"BÀeØýyJÒ@ÐxPè<À-éìðH°"ê&=0ªÀ(­Áxî¬$ö­‘÷Ù†  MrG£F몡dçxØ‹!Žk”MŽZÊêy¬=â/é‚é¹|ªÜ8kp3ìDø%<ìþ/‡¹Ípµ”¢¢(Ù1@r“’,Oâ¸M#{eueû­xʳø\ì»Ò¦ñ€F+ Ÿa†Ì¾LMœ¸C*]5Y¯F¢æ¤µ##`þË™Hi‚€Âæ£ØdÕðËUÇêŸ\ú#­¶2ñ’O¬A¬êx´Bþ€|JÈ +Þ‘ÎHVÞZÒ +þ¹Â{ëŸêÒ»­¹qHÎx©Hœ€Ò-Òƒ6yBðm3pƒè •j’ÁôaŸæ—‹KƒÎ瀢òæÊÅkð+7â¸Hþ þÔˆsh¡vM)Ü3À»Ø^a&ÄX¾|þ‰Æ§Ñ•‹”6¢ØüÇf@¹Ž}r_Ê=ú“¸å,§¡ýçˆNZÿ ЫùÛiéì½tDí]$ ð‚ÚÐ"Cj樹‚/*hï–6[ñœe$|$4»B(B•Ñ»)¦žo®Öès®»†O wæm{ê y3×ËçT@Ë“È&j@T5%늋¨ˆÿe€¦ú9OݬP’¹Šb˜¬ˆúØêx¼(—F›±O„¹`S”^"í`ˆY…J­„Äxp99fd ئS/'>“æ0ø$ð˜ë9åõ¥úpJ8îŦesزáåU'Lyâë*Ê4#ëÐ?OAnÂ%ŸPòá7ò¥šÍ¼Ç‘Â-|7.÷6B¬–(Rëb™R1„t0<¦ yþ!õ*$çóùöÛoµÜ>ô}<Ò.±]k†G(-rN€ ðÚ ûŠU$º€Ä.¶Øla @B^3ª(yÂ6®³òK©K½ZtQš¹€c[î|l‘ň C·á]Ž\¸p µóÔL2KøG¸>ThâsÔmŹÅ!LÓ^#ÌÁ-flh–¼«XÁŒà– Ìcð ß¶ YÎÄŽóœOØu_ ×òwБðâÐÖ¿ƒ¨Mžœ dƒ‰§½4Ií¦óq§ïŠòýã4 €“×¶“VÌ%??ú𦻖ŕ#w=¢’Í|ÚM2%nMÕE­ñPô¿·ÎÞ¤¦FmCº$œjo4¬èFtÞíÔ§º•òÁöZÕ³òYp­Ž&±.Àˆ~7Àéšh”„è=n+Î\‰KKáJ®¸©(›5éçMÞ$¢Sm¿FœZøpò(ÑPSe^A‹fä +†„Qžš”+êv´*ÈÌ'”“ÇÚ¬ñ‹‰á¬®¥Åª>î4 <v;‰Ãúј’Ý$}RÑ%mƒŠÔGD&$r6âÚØ›*¸AKVx­˜}gr ~†á‰èÑÊ¥p´›f“;`3'±dÓ 'ÉÚI6.›Im Ы¼†¸ŠØ×Ý”BEtìàûØfÛJ·SxÕ釧džhº¦9¾Ü«?ê€ŽÎØ)i“z ×Fj"ú¤¿È83}nœúèÇrˆ¯‚>pËP9O¦ +·š¡ø¨„Î9Ò:¤³0[–Oôˆ¥“It!¼t ÕÍkt)ëzÐù3-ÌGyí?G‡ +ôz-y/÷-åí¤*¯^6” ,!¶„‰Ní”…ý`}2aP¯ä'•"šôùÔ9 +ìÓïùÌmˆODÅþ#&‹–¬½7T0>Xt‹BvŽ¡Žä³)n+¶ä +¸Ìf31¾®ú²Ùtéq=0l?ö Þœ +ƒfù€®Ò@Ñ;HƒÑ»*¯6M'D£àj]lცW€k"¸2‚×y a 6²Ðï‘“ÍÃKS&Pª@53E!ÒÝêPÉ<€8ÙÇO!}u¢¼©¦ó¾‰ï´ ¾bFY«²¶å5[›‰j/Náê}_8Ë—¬Ð¸"Ú\/Ãv€ôõºï ²Ç02¹+Š\´Öû²™ ·;[wºOFˆïqË%x“Â.`·±¢ˆ„ÊA©4Ú0-IXCiqŽšdË}nŽÆÐQ†‰ö×\äóÉ2ÎÐDM¥ß+ïøPÐ¥^û¡‹dF‡—éN5|S9éMÀ‰2@#°…¦Ö.hìîý!bîmKJjœå8´j +—L]óßꤾ_tÜ»µò^è[Ê[qö¹Žøs€’“ Ù `6èQZC‘co;'"ðR;%QëJ]ìÝò9B>öÈiê•ü]tÂØ©°¿õMö®ª´t„½§\UÒéf¥…d²x–›ô:¦À²;]tèKŒžËÙÓkÈO&ÿ`œ¾ë†K}t8þÈvá…óW>hÿX4½šè ×îŠîLAˆï¼kFJ,Uç{¬Øpô‚cá½L·z0Õ½áÁ±¶ÞÓ)´ŒïñSùÀ7î_”GAéÜacÇ’H† ¹†޵vì2“—èÈfðZ°†¾Y'ù™k,£4,ïþ#t €rµƒÂIFûJá’te-¶ ’[݈í£´…ÛvôqŒ)jI¬ó`ãRgi¢ád°6ËÌ?G:H“FQô*')„ÂS: ?"êyDö«ö^ÛrDmT$Ç>=.–P.­° +z¥áäNuP—´Ü9"¤K™p&-O=ŽZαk¤H¼îq;Ån ñ“!Žuð^´X.‹ÔƒkÖ‹ÂØ¥êÕàØþCв#Ô–h^îê%ðã6Åææoa{FçõCÃ2V³§ssÐÿm„~d0à” J!ÐÂóãXˆcHr]ƒ“‡%Íš´'ZN*ªuÌvW×K{ÙT³•ýXÿùPèÏ@½’¿‹Nz/Uз¥Ë +ÚíîÐZ¤š* \A·Û#‚Ímö@ZÃÏ}HÅÖõûó}l—OÛûÈûÜ9J+ˆ¸îšÊŠÿ¹Ã®å¶Ù ˆþ/:8ßJ)‰¥ + +ÒºÃpçNgéÙkŠ­ðWí)Auu&ï3´ÞÊ Í´WŒ> ‚®øˆg‘IoÙØ#¤Ëè€r±: ¬Ü·ö)äY‘ýH$J9¦¬4¥"–aÉž¬«](eK¶ÇZ)wŽ®ó)µ,Éâ­# +ìc?QáÆ  bñÆÙ¢8i¹†r¡ ŸŽ‡W1ãiJÿ‘4cõë–ouin©yOa[!’;^-Ë£DèŒB9/#Éò +ù°g⯅#<¾Ǧôl]ÙæË†Ã¸¨‚”¾ JžöÛÓ8E£øå:§eS\Ẵ’ÇØ<À0t(Òel©ÀÂ' +wí [æñ°­üR²5Ûuloiq +×ΔÂázér7û.çJœ”5œûœŠŠµå?ƒ×s7ÒÌå¿´`ˆTfO£Üêyt]?‰‚B½’¿‹Ny‡ïD€³SÀ4T qŒP€ñ\ЃB +'lqZƒ;– ä3‰O¯Ã†ª¨íÄñô)1ž«"t‹û÷÷»ûD”ò-Š{D¢ýã‰Ïô¤gN[²vQÓ²•>PvíUe†}“J^®$âµg_ë;¦Â´ }ô lç™à¾ü˜1yDme*à}T%E!+©²ÓFJu¼Tà«L3€,‹®ròK…êN¦-b‚¿fÉI¾#vR ɘ$•Do&È’JoÙW0ÃÏ¢QŽbDZÀ0…Scên.ùJqΓ®ª^N“d|“ß”Ð'·!ÉGòl!³ dèK#¦*•HÙìZÝh7ñ@ßôàótº–×·Üo¶uרÛûÌùE5r5_ÖÑX`Ÿâã …‹O}á©§…[QôËá?ìgð’V¸’ÀöVW1É^:Àþ̽šqFÿi]j*‰Â©IÒL% +ç;…g—V_ «À`¯°úfLgq¬þ§¤0ÓBí*n¥‹³p¶JÃËQõ^ªÿ}‚ +ï£ÿg<€Ãƒd÷Âw»|…²S¡è¶  ¡¨;¶QÆÒY‹m„VšÄå~ øjÓé-º¨±6G©1A÷M\5 _‹yg ÎD÷Cº ¡ÝøZ]_˺"pIÛ“àÐb©Ÿ£ +FQÙ0WŒÇ½OÐ÷caûjVWC$qé»L¿Ñ;y +åÉ8²!íç®\kµ’Mvú=±Ù|±Gä=iá|—Ë,¼'².Ýljõc5 €GÖ|¸Éá"ÕÃѤoÑÀ€‘qbÉ='9QT%ê /?Z˜ŒÇ%ÏÚ×>)],p5ÅS¸‹²x”ܡC…ÌëÔäøò6e˜û²ç!Ïð^\MF¨ººÞëu^ø’°V÷€tfF…aÓàDËó5#_õQ²TA G„XëœÂ­•«««>#xjºè—$D³)šŠ8èߨ]ruþ_ôYÊö+eúp½¥d !¤åü¦pÿئåÖÍóÆ_Åõ™NGã¯a»yÙrMÐZD9Õ(½ä·9Ž +/~DÑóþËïcp0£©{'ñ¶“Ùy„¾"½Àœ ±Ùdº½ñ)&¢Gž]ÖÑ#ÇÃÒp; la;VÐ|L£·®pä¶Þ³NgÞ Ñ²3mïwsôVž#½Kº0¹Æ_ÖÙëåP))|ÞҒؤ·ž*t᥌›‹g„ŠLlQʸÊ%˜ Ö­^jºÈÍúpŠW }êÅìÌ+’²«+žƒ4Ô³ð:³Ö|Š¢XŽOÄ"8V¿¡P)‡­7 duúzçPR²  Xs©#Î;cÎòȾ¤Âë%1dÉĤX0BU’*…t@ãƒR½̲Àª·?"¥fa¦´Ãñ°¨ +ÄoΈ~Y” ͬT¹/_(›ãj‚ŠÚû EP f®Öâ›N³Y^ä$2«g=Cl4ƒâlQJuB$¬p¢‡hlêŸJpŽ•|/Ì\\ZAxOÒE…9¾¿<ôS¸ÍQ³)Z$ðö_Ô<”ÃÞ?´·Ê䥊Â5žô@HM®'>Î"k€ZK·†Ýkª58½VËÁª.Ð8ë¥wf×Z ¡$Gz†œ$Õ(Èï@@àÝOõtÆ8Ü~ësÀúj w^JIjìÿÅɧނ8di¿)¾¿Lñ5 Õ'ŒÔ”ntƒk{Ð. Ç iA8—\‚!|Žè'”"€²Ä äm2¾aòü5?À4W¶…‡¸ß…“VÁ2Ât<€Öž/ÆðOåfŠo­èÅ!}ÂÆ´—¯ÔUÉSlhž ¥ê© +¤rf>I† ùC6J]ñVË\•^`Ã;€œ\¤ì±€æò¨Ëk½õ5Qg3 lƒÝÔÓ]ÿlàåø· ýä :hç(ŒœBÓ|nh×)…ò´¦påÒ!½(¥‰©¶¾=˜0ªºzõª~D0u<u&VõöfHa»Eaïá´ƒŒÖ6Cg´-ï‹>”£œÎ;€j ÕÏ•ÆÚþ:õì¨ýÍ€ ˜(yÖ!Ä*p½ºFÿ}f7Ë’˜PèR¹ˆyÒñQh"¤ár¹lé'ð‘ùýñ„ø¶ƒØð!{qÿúDP*]ü²g°ÜzpxŒÁ1¡ÿ_ñƒä†â(;ÈBVq°Ìt–,ÝÍw!ÙžùmϾ¯ð¦p¸Œ“ˆ£V²°–P8Ði +‡ÓËõFwBŽ^¨ÅIo%.bÒŸ÷ÚtÛr¨l“Â’(jiê8>È%¹¸ð„n•°Wm {ý7_ëê¹V&‡k¥¸ÀÁ}c0Ë{=Rb„Øþ ãÄyWÌ×!梂tÐ0“ +&Gí®z ¼/hŠŽó¤wØfRšb5ŽæÆUH¸*®tMr¯jýZ¤'Çâcdf9ŠZ †j}rCÇAâäNáø)ÓÛ„jT–²$ÛÑ·òlú¸íCŒà•7³\1ÀÂ%½PçñH‰*‰– ä+{Ã!йæá/_™¹WÏSÁÙ†Âe·Š(qeD>[ŽPœë:½ÑÇEƒíwðí‘uQÿcEÌ÷Údõ(31&ÝêM½~mr˜C Aoï:–gUL Ó}Ùg2aÛ Wü%•Ç[ìÃá³§“¿ÌÕ¶y99—…kÉsƒþÃöM6[ÕL\¤u¦ö*f P~W“af‚r)êôåÍ�­•nºY^DWÉu8ÄG®™ÓjòqRvz;ÍêËH¢#*º/eë½€7ÆvviĹ'ôÃ*4y5C©Ðèª!|²º¤2! V|ŽšOŸl|u€'l5KÓcsfKø7EþsÏ@©K::ä¨õPV÷”Ä¥ôDmU £fÞÅå¢yV+q7¿E2x·ˆ^|5QÛâ¬' Óöê8ž4ÐÑ+­ ßœŒ2Ä^„ƒ§·ñ‹ö;¢‘²}¨“´SG?4éG›ìjàâºÃf=k©ú0<6˜ÂýA\ÝZD>ÖTƒ?q À¬,–öS9•÷ +µ®Š`M­9Dçe’ €9S >òä˜ÌrÁ §ñY8HüaáEµoáXZeO^Õ2m§'x™'AsÛ+7r±Ž$d/Ö“_ÃɈSÆ>f¢OSùJf +\ƒÓíÂ\×ʈ¦õÖ9ñ5^5‚é«"7ü†Á¾ å Û©?PH:Ìd:øºjˆ,Àý3À_eË3ÿïíöÉ#.Ur€í"‰ó¯Æ vv‡O¬»°9’7ÍËß’”<í07Èa4ÄÌ8Ç™«O; [¹&ó <(M€ S‡…oqÜ,œÇíèC~ ²Q>Ç»úòVz÷B K:Çx±“ìÞ$gó8˜rD¢@FVsσ¶÷Øà¹K…H´¸bøh·Q͸R²CêEL…Z’ƒ¶XEõh¶ €ºp ’‚^@ØÁD’’=¶U€mJŸLÃUHÕÁ yªV:îcDÐ5†g¾†Ž€‹áÚŒg°E &~0ŠdÚ@$ƒ„·?מé{‰1_öâ»)6•7mÁ%a²ž<£@;k×H8[Wê¨5ÞHt ?j‚<ʘ ^¸Z&ɇ@ÕÑÑ<“¦f‚$ržÅd:ðæ83§½)ÛAX…áÆ@õlõ\ݵ&‘Ó>ñ/'öô` öÓ—1ýþ9s§­m¯¬ÅýÐÃTNp§à[‰?èSÔ‡]EÏۆƵïË@ "¶ ü¯µ5'”ÑdTÐïɪ¸K´ŠlÔpë(¢Bªf‘žÙÑò;º/FyÀ>u tXÐŒÅ7KaÚ® ÎòÚþ\-PÙŽ’¤öIgÝÅ&òP·.\Ù»^Guì$§HHÕ¼[FÇ&Õt  ñYËmLˆ°ªC@=Hki)<`)Iz)ùÎ]’tr7(ð×{»Û¹'zæïjÔ[G£W\êÛeõ àÃÆ56õ/(àÜaBÕ"B©MQZá÷²ær >É÷xrLñ÷˜º +;µw|.ôz¿¤4 +ŠвÇbÄv9 )C_þ ¡®Ë<í’©½äìÕõ1@›q@¬VÛ醷`í·b +!dj8$“ò¸›Æ9wÖßpŽùÑ¥X®XD…©7ÂV?Ñ<ä$„l€èÓM§Þ P{| u.‘pžpˆ¡ïÓþÈ.μFÝù|ÌÑ ’ù’d|ÜNG©äg˜J“Z»%ná+¡õëc¾[Áv®ÍÚomñtíˆý-Ï]€Ú 9á=ÉlpˆöÊׄ—"²ôŠ˜gWÛ8*.ilÍ|æë…ß™à#úÌòÎVôÀ! O­ÃxÇS” µÀD2¨¯Ï„Ó®S{ÓWáY.À2 +Œ¶}ø¦þ_¸DúµÕÌÕœ3¦íh ì $2Òfg¹ds¢XEÁÂ&t¤Šæ^ì:y‚0xÛ ‰SàSç‘M$S8¤ª^ëNS~ûׯù ¶ÓS†àƒ¹JÃ58°8š/„c| +{ú7–ô~À¹Àîö!ÓÙ?%úV©åC—ùÐ`GëOÑÔ;àÊ)/ú>[y0×¹” +Wí!þdoúÈ=O¡Ûõ„iíÀ7­"LMd¬0…3¡ÓÀ¹ŒèWèº7‹ó„)Ñ[W±‡© +c´?å{ßÜiRUøÜøn±^e²<=>:Û@­½ÈžˆÀ¾u–½Ð¤p |¡£Š¶tŽ‚j¨,ŮË +¸ø™´®šüâÄ«¶®-HGŨzžJ™Q!¥ò%Ù:Õ"((Rݵš€é¼Cm^Þ8kð#€D¨0Û²=n©žj:%Å÷H?B˜IèÓ)žF~]„Ú‡›ÞèiÍ‘;àJ œš‚>8Y2GÐ5Xöv» “jç +.æ¾ +±ªõ¿h4\œáûðy½ d–޾§;±ƒ06Ø»“lhcš¹è'«éB 0ÉëˆL‘[TŠ×À•þFg(“«™ÏŠëìÀ~ÊP>`·Ý·Ÿ"YÉ<4›s€þ]Éu˜32AyÉuñC•òÎH)­DÞÀÝu`¨ã@ð~zÕ~·éƨæA×Wü]DyƒÔþ‚˽¥/öä_z?à-Àîüä¿7QéöÜr”n¤?Òn tB ^>».~éÒå¡IðrÌåâ/]J:¿`E:(f¾ì…ÇàÈŽXõÖv̱–"³ùœ´Ÿ/g¡Ö˜kƒ2»ŒØæoJº y¦#ÆÊ;Á‚j_žé(´‚Ï ‹Íú‚®l§ƒ‘µ˜^­69QLqðÕySbÃ5 ‡ÎsÓÝ·%”éÛ|æwQu]mª£òMô€Q¯[h,|󇿯(Ô" HA3ÐÖÜ/…AªB}­_Q¼(Á×.Ç“6¨F]ãÄxE:´飃EW¨»j³HJ6í¨Ù6D­g¥i÷lVÍf +èÖKÐbÁM>4#½¤^õ ¡xö(0A&T1nNH™U?}ñÆp±±™~G™ø>5ñÇl­¬v×úŽW™ìpj:-L½ `=®ñc£ìR[‹úô#}LI-Q4U9ODý)ÕB¥•,΀KF3NÕ±˜{Y)Ó—(Jð [€¿wÂǼ@Hü¡Î´±¥ÀRA%u5?À=Ð'¶*Ã\Ò-Ö.BBóB+:{LÅIAà¥O‘' ±&TŸÎó©‚d×ÂL©UÑÿ£Oþ-®IøêüÇè|`wÿàRyÐñ¿ïK(ã÷~•qzG··X„¥Ž“€ÇïªlH Ø%ô.^¼˜zFñSÇ´‡&ŠsrÍèðV®ïÝÓN†j½\µi~–Ð _eFò‘…H"@½ÞrUëkœÍQÖ¡"Jï P1™ˆœ‹|g‹ +‚Æv…ßÔ« ‡Z@/j’éß¹/È¢ö1 d+Tk”Gsu…´¸ :†v¶¾A–ʃ%b¾ù±D7Ì™uÒ?>†±NÀqXE Á>oÅ#(ÖGÃwKU‚`HäIöӻ\£Ëá«üÐÞæÊ¤¹–4r&ÎpUÂ_Ï©&ÕBq|þ“ß %´á@Ÿ€°ˆ(ÒqPÓGih“Þí)œ?¢e5)œ9p?àEç>i­©/-ŸÞׯ„óët}Tî;¨xöµ¥vV'àiVUëràÖæsØ÷‚9Â3¦Õì€Ýgœlú•Äô*‹ÄL—¶èìM@)£€†f?b»AÍæÐ\AA;Ú"ÞÓû>âQ#=œ/m§ðfž[d¢´Y06¢s¹+`ÚÞWŽiØØ"p +ŒÌÐ@∜’$¶¯a9¾­€ÃGd×{°Ê÷Yõ/a'emîõûGé|`o[…=ùñáü0ÓqÊ(¥y „êjmà,úûF¨Uƒ„!P`&—|?8]“4T3­L·ÒJ^%©uæ…B͞ϑE +5Ýå#ôr×SàÚ±pŸU²TöFG–qÍÇ µ#L÷:qÉÇŽ¾Cç€3î4(€S‡Æ:(¤wçbèCeû¶ ºO³•MÃpŸ&™SɉÂEŒžÝÉõøÓ 0ÂÑÆ‡¼ä;§5ýh¢AZjy´{®9pE0ÑX>|j ^ìdº:Ùë2 ÃÉu×§í`nà >èŸQ‹ù‚²/®ót³hÿy6Ÿ·óI½ÞâcBa¸Ê…)ŸÏPê×&dè5Ê/É÷í |Õ¦ÆÍ+ ±µ#¥ ¹4Á 9îÉtºXø¢k¼–þW4ƒ–…P–œ +JçPoù\µõj”¸C]l8þíÐd/':êsÚý¼àE<’G ˆZÏÑh5Þ¡z˜DÄè¿r‰Å€•´åš£*²T¦×&§ÃîÓ«cŸ›Öp8à2q¼2ŒêœúáèGxEúÿ7±‡{(øJ\äã›X#ï½ ls òF©S<[#Iª¢†Ÿ¡cä·€@¯ß?Joóö·wÎx ró_7@û¯°éˆlPi8U†öƒ.¯\º¼:à`ÈJ Œ½æ ¥ÄÙ0x…vì˜LtTÉP¾{Ħ•>ňÜIÁ¹…vO*_ªˆ)jƒ¼h½mGláœ!uŽÁ‘k=©DHŠ] ™°iOr>2£856ÀO ` "Á ¦bÔC]rÖ¢arÕ-‚TMê®ÓŠ6¸ƒˆ´§Crݺ…+4×|±ªe/1@Ö£=©„²áæ¼N*3pKí}qØ›ö2ÓF6påOQ!§ÒM뜡Âð!l‡\×çÕ*~Wû:Pjè«îVµ]ŽZEãÑAj‹›”ª)6¶ª>)–é|ý¿pч'2­óqN䯸#ºÏÏC`Û`ŠÇ(9`ÜÜï´uáèŸ Y5€Ý Wìó‰0±Ë©šýD‹Ãv„áéªv1¯Râž4”Éb;øžîƒ5óé¡é¥ßß3t¤ìòõ~³€ ·Œ»;šìþÏÏ%Üúâ8«GPÆtümá¤ÉWüVލý<>~äÍ'Ú¤Œ¦ŠBvïx´:k”h¹ñk ÙCxé`”y’…Á•Btñ±wL‡|kº.¯^§*–GÌGoNލ¤uX.h‚Är¹fÏ¡eJÇ7ëŠæûZ]€"žˆ£o|æ!îP ‘È»wq*îS)jußU['œQö)\%#°3í/M' Ê‡n§%„%ZÄj`ÖH’/öô˜ØÐ\@Ñ bûNª¦n¡ÊñìuTñ:Í©uÞ¿ ÷Â72ËírÈ_‚váLîšð›¡”øÖ4 ï€ü§Í5šNË­Å1 dÒdÞ,ð] J±`ªm‡ñ32ø)…ûyY è#€w1‚è9A°qà–£®ò¢Î›ZMuškxa»+Hˆ#wçÝ5y$Þ6ݘ£*ò4¼µÇ­´zÎ-€ÐÅ!1‚7º° +Ó2ÿ\ÄÚÛci9l·D}!½¶7R(z⦰_´!ýeÍ8 ixjY/ZN +1X÷ù™ÃT°”ÃÂz^¤‰µÐetÅ}Ð;— +ô@9Ðë÷Ò[<€ƒýí½çGúŸ £4$a¿QÇ€mV@œ«ž†ú†NÈÀËÞÀ÷*À¥KÊÀÐÙñaEXD.\Z{7¶£b´Ùۀ­²£ò0= ¦ÿ˜~ß^Ö’ÒÊ¡£Þ£sÛˆðY1špE…·úÃÐ÷§-w H臖rÔ3/3GðæsÁ˜Ð6í¥–l¶¹ßÖC9^‡ ¯ä!A+ e 9HJyªÝü’Õáj„,ÿ°Þ×S>*Ô0€ÍÝyœü´œd® L¸‚};§ÏAÇ-)a¨Sûd¼å{ÊÑigãé4w]Z€d¹†ó¥»•ê“Ôîøã”l³5Ë…´œ +Ø+ª€PœòÀ¨jËv‹°P}Š¿kÕ/V௄wn¥ºÕâ/\è{ËIŽÂ;í§p*9‘Ã6Üak¥s9wåôs@'è²bßj´¡okÃSmÚt ±ý +Ÿ4÷…x +;ÁNŠrÛ=•ï·è{åÆX»¨É’íló´{wçuWØù“²SÂ5äCEìÓqçSÌ?¾zõþqz»°³ó|ëÊÇAí*æ`iÚ‘9¿T—ò'kìH€ h>‚M;V}7hA.§¥ŒÜñã r‡; q—ˆûêê°"&CØk1JK.q/@¿Ç?‡(?ñ¦•˜†í?5—Ù¥C¼€0ŽÄ =åªú]X¯S½Yà˜-;æÖ5]ȹµq•W-‡êØ/ƒ+É•ä*ˆpy™³ ¼+W’‚#«~‘6Üþ4'X¥Òedƒ‹Ì=™¸ëÃZ9Ž'hV<%3(…G4,ÜF;áuT­œ-·l7ñ€¬ç @$ši»á/Ùp+áiwBÇÖ¨~].’G'©¹ \÷DÇÙrŠLᩜ„dôN¿Š‰­´pù®YgÊ0ûR‡}eƒ…Ï–U¶iyRARõQŽ%š và i®D•ÃõÁ*’–J 25í-€¤§:ôNè¡—K[­Ž%[3ò&Ï+ ™…—]˸\Ÿê¨áþp^¶sÔtžµ HŒœÉó0²´\7ÿ1BKËïÒÎN§¾>´\kMfyÚ.™Ç[è':ïö¶·Ÿ÷P>y•¿ªm1ÄIíèh¹ Ô ~  ÷€@zÊ-"o1>¿™kY + +K€"~÷Ä…ÊF8g>üË÷Ã;c#{=³ÜÊvÔAÓRÐR !ª Y²(W$Éz˜ ç¿¶ Çø¸eNÖÀ Õ‘¶PõîW§l7S¸j¦è+Ü%éâH¹Ð²£ëtýšwSS™ÊƒnÝ" «WÊvNeÙ"s~tb’Kò4çINO}àç0Gʶ݈Qf¡ +ëÉ Ï2›¶5dm ¡÷X~ÿñÍ](~ÌÉå1.•2z°dk¦lqZ$ƒÛÓµµðÍ+dç²VHö…:ÎÀppÁM›FŽ´½ßw­ƒìó)|¿UL‚Qœ€^ÙÏ%|ÛÌsÕ\“·Æãvf} Û³åT6¥G„Ÿ–.¿&8µžã¥åž·×û´;Žâ—æ+à˜.÷ºÈÛÔ'½žÂÍÂÖåIÎ÷#1 Wï§wzÀvA€òÉšàïöox`ué\Æè@àj/Þ![ñOI¾ð]­¯òJ„ðÒÌlúWÕ:@ÞrË~(B¨pœ>pnÏóaDÇ9ç¹ól©}ïLká· ™×˜A¼®™Å•S¥B” +Œ›,…YǯiÒQÉv\íÝV¯yj£{ÁñRžYfsN¹-f”"Ķ ~XxR•S@‰¤Sõ Gßω`Ò;ú'ùã" èJ!Õ5o¢¿-·ƒ6î@Äj§@ô#vÉV4$jÇkëèàq]%¹ÅôÓhHÄleŠ˜ d_–wVä­Wÿ¨1p-(9óªÂSo’Ðøg¾y„ƒD‘·ÂGCZÓ‹ +(|4RR÷£^»ßƒ~ÔØüÿny—°³° N[i”ly_ÀË¡â8‘^æ°WÏ|”§´Ù…GŽ<ïµ§]èØ(ÇBÞ£‚“®;ɈTéϘ!jà3xHX—ÂÔA€I´_(þ· +=6Ú>ð`>N€™Ž3e‚Ã(€Ê„À +£ÀPdAÅjê+Í$°]˜Ô£‰2V§g©bçÊÜT¿y‰>QþºìtªCÒñ²¢ž¯2!‡úåbÆàL‘İÁšÒòZˆ Kéô¨1Ž¢ó5ÃUµgsï£ÕŒw88zØ[èh¡Gm{ÕÒW¥lꦃ>q…{äÝÒé­‚>.” óéüI¢1ýM•Ÿ¬@¾†.'Ïz^Zk­9ÕfÏ{C§rySEbÉÎ'+óùÝ6¯ºøqêµû=èG=€gO776NxØx âm]Þé¼9°³§b¦“ ^& +ª–ö_ãëHŸ(ÉU~©x¦^~&šwï›rm=h®‹•.%ãF8R$e¦âÖ¶¨Á7ú„HÙæÑþФÖõ}j2k½)“bÊ'â( ×è`o ñÞ­r¨ÍÂÑšÚ™ùø¸æÊ¶¯«Á!væt2ÞŸªÓØåH±àÒMuëM K ,Π§¶Ì~–;£0e‚VÃ4߉>)çr_¸Q"ô¶o‡ô„™\ $>HÀ±±71?äG@‘÷çzÓ|"ûùxÊPªÖ3ý†Paf­u¤Â§à3˜˜±Q6|,ÞöTÔ]ê\;H>.í}VT§g:›5Ð×xC ދÜšwãŽS×ÍCiyØÌìr ©n|îÒípë1Á"ÓKY¼Q¦£w’ï½þó¡€vzumaÙ•Ë–XIoŠhÐ"pÚ×>Æîq0×bérú6È^ú “÷ï +¤uæ S鸩KÊbïÂË»tñý´ÃÈ@\/©èÚ»¨×î÷ õÐÓÇÒ£{wîݾ}çö­[7o~uãúõϯßÚ~uøúÅ+èðpóÖõÏ®_ÿòÆ[·nß¹wïá£'Ï67Ÿ=ßÙÙÙÞÛQv÷v^îîî²¹íýðòÕÞëC¸ðyEƒ_¿úþóÛÛß~vïáΫ^½8|uøC¯þ@øâÌŒåMDr´Õ°uäTŸ,g«gAG9àUÌ!­¿™á›Êô9@<2`.v$Ms%ýŒ²g·´DÂ]ë4{HQà˜ó¦½>δ7² Å 9wP³‹T;v„ñý-rl1j9e—NW$T)j‘4\aM’éà;±¤Nɉ…‡So¼!‰ +'G•¯fHøA“KÂn¬„[Kú†³FKÓ/EïÔúÜ,g³Ìz²ÖÎÒcS›Ö´N@<Q-<€°Ãòíy1^§p’ži¸‹O¡^:=¶òÛfà u0cS–>]sB_cBLù#@'Và[ÀtE”NÏ–íò6¬âÅÙµlãWÒ¡Vuäì«“êªðc“¸P;bß,¬=}!O;˜ +sá'HØáéàŽ•f;5mê]¼Ãt)]•²7OϼH¿•zí~z?`cãÙÓ'Køµð››7o_8|õ…}|.|õ›[wîÜ{øøÑS`cã9yíìíïïnïíî¾88€½ƒÃƒÃ^½z8^°·»…ö¢þox/€×¯Ñzàøþ¿ ðòõ«—‡/Oy±úKó/Çnhƒæ•¯È¤ßa»~9Ÿva¨ó ¿¹í2ŸLsÇþø®Cý¢þsÅa}Id×\3¢@çöF…#ÃB‰h€•ø¢fê3ÚAt0¢ÂWží[@üÁõ– +¡ˆÝ³ÈÈ©¶ŠQÃ…aƒÇ‹,Œqg²™—gÞDžåÁýðýÔgŽ‚P- Ïų±Ð—Šü(†j}^OÿdY.lH¡@ž-'Y[ÙH’“Ôc%Z%Ê/UÀÊÀØ[ŒÞ뺖zNûl¡@FDOyˆÊx×—­ùwÎC,Sb„†´8¯·ØS2 • ¥ñ†áºÔù÷j“Îu·Ð^=Œ5Nè‘­GªÍT _í#€…\0ÌÄÞ)¡õ)ÂegÁ{uÊÀÉõ!¬ lŸaq¬(ñÇÔñG /l³i´( Û{.羫«ŸØÊ\'[»¯‘Îj{`l¸eÿ̪Lÿ–HéÞÎqú5èS>Ǥ¤Ÿ¥^»ßƒþZ8€7<€¿>ålmïîâôð6àû¿Âd*Ey BÏ®ë´N|a)¥ìÖ×èèŒÌóõ9H¢^>½î‚ím÷Ÿ]‘DONv9c°è}1ƒ¼YÏ>/0°W'H#Æ X/g²¸¢éÚØå…šÙƒv±¾îÛøs²p+ÝúOA‰o +·ò×°T‰"ã}âë.ÎmÒDý=ãs£^–šªkl»¤ãÑ\…Þg¥íÉ„×ò…ë–4ÕéU/”­ûަèÈ%-ó +tªç¢°ùõ†ÿˆ¨:¸¦õBwaÉ¿¨¿C$(žDÞÿŒ÷a¨Qûà;teSΦað™ú 4t,õ£´¸]³1‘~0Ê–ã¡ÌâN›‹^°Ö¢óÎ efÑxxv%Àsé2¼1Ðe832×V¨ïÉ–TCê¹f}f>¬ŠW=q |—‘×Iƒÿ†5h½Q›j‚j¶]‰~ã²(3éû§?ÁãjTBW ÏŠˆìÜøOkkÑ£~½Ò¿jý êµû=è'{ý@ôpÆøê¯ñÔú¥ðê}<€â(M€Ë®/#Çëa‹‚‚bÀ`~×!‰®¤Q’9ƒ +¹Õ$G«”Gú¨û®Ã·§Fðô¤ÍýÆÏ„µ:ÑÜÆC +4GízçV„CŸ¸©?.âân}r¢ƒ–gáY(„MÜÖTWOϱ:®ý“dz$zR¤bÈÓxœ‡j=x•k”ÇÆ¼ +ôi)2¼ +Lh$ÖTúzÑâSXe>®ID}m¢Õ± |ûŸQÊ»Y24¥ë“ú„ÚlųÔë}OZhýZN½Ä‘nýë.k“#×@Ûcþ2Ú÷ÊcÌ?‹õI¨QðP¨ôEB¼Ê]bñ5m1:h[Ì`!î6t¸c.@ŸâYÐòY 9û“þ£þ¡ÇÍS‡áØ–Ô}:õ§Þ€m±W(¼[÷‘ªnµjˆ8‚9v›‹« ¿¢•Di‹-' òY…SÉ9üÝÂX0¾šŽg”„™oÙ€|¶¿Ë®0©þ)Wà„/Ðk÷{Ð_íœâ¼<ònܸQÆþëi`ÿÝÀëŸà(bKÍïÉ·…Á©ÖÕ”¢ƒì=[ÐUô-{ñŒ½ãdOÕ¾ÍØy,Ÿÿ«^¸çÑëynЀ3¿ ‡ tH™E¤0Бtnç;‘¢ÙÌéOTðkG —D¤HŸØÓöÞ$âÓ=@ªÛÑØ:Q(ÕÁø´8“kVª®ºÐÄT3ÿ·ýŒÉ­ "P8Y9­gŽ[ð5L™: 8‹œP¿bQq+àÞ>xàMðƒc´Édê •tW冢ù=Å/äeµ‘õÑà_A ï–Ñ`²Õ§-F-ˆ&ÁÉv!;ü+ìó‰&¶(ü;¶¢™O œQŽß3" PO„3­U5óÉ[u5ë +ùT´À<«ÔÌQÁ·>Øÿ.é"B’A~˜å"ó õ‡Û6B#<ÔwYCP|T:Ksb„ÃnSïÒàúØ#Ð*q >Ùœûô²6za_>øv>ï\JÀ6ú¨}B{ $eè£þÓÅpa>ï7Âè#àh£'’QÁ÷¥'Ïžm<ÝÚÜàçÙ³g›Ïž=y¸ñôÙÆãgŸT;¨‘r´"A먟ª¬2އyq6ùÔZw1S½%;Ÿ*ç"[î:#³o×gB%Øjíy\pµÍËuÊE‘éŸÎ/s“¢l}øÚŒ(¸bzOäV¨¨þp¨à‡Úà.5˜5ãnýÛõN;ˆ¶‚‘®ÖGd+Κèe3!§ð¬AÖÄu°Ýüϱ®ñCj_vøžv„çCÇUØ6îYw5%=€µð8×|¯Y <ïËëóæ¡üo‚wLõôç‡>é“Ó„VZÌ/)Uí×3öi5ü§zIm;4úkÝŽÈDú½£ÑÉÁ.µ·ëé×*;g3·‘0Ï™€kšyõ?O™¡3rq—; þ iT§]0ðñûÓgKú”¿Ï>ûäSèèÓ?áïãëO¶ÐÈÍgèAÀ£GÀ½Ûw~sû7·€/¿øüúÍÇû¯1à?¨Ä{Oo–QÀÛ¿!Ù#®x¶ñUÞÞDÿ±Ý{û/vv÷÷ö@€W¸/^½8|ùâåáÁÁáömjñé§Ÿöùç¥JŸ|úÉG|ðÉg9°<€ˆöÆíf^¯-|*Ûœ£ž.Öÿu!4( vEteÓqEò±£¤fÞýoZßÓ.Àô¾W\â{z¿q¹[°☾^­:Hàë<¶;ŸÏ1×Þ40í̉Kþ#ìì5e¾™ÓÝ’塆’¶"Ãóÿ;6e> B±¿ü1Œ)ꮓ‰¶` š;N-€¾E‰†¼©µf MQ÷5>Aš—–x„h5×;hPP7óöÁÿöç¹ÙBqô>¼/Qaæ¬]WÊÖ÷¿€p~IÎÛuÅ%Ö-fð>ˆ„ml‡­q¬Köx>=à)ï ~÷]׈>Å1Xúv€ŽU—åvq“±³­ó¯J?ÓfDpˆ;jÀµµ1î^DbêL@Ç‚Ggºõ÷àXÑl£\ÀÜt`ÿ·œwÄWaP¸ ʼne ·€ºr–˜/c e´¶Ý͆€‡‚çžá£Ðuó6«Å)øî;NûäªiÈ+þeT–µ«’™kkMyдxW U|N©~¿Õ7ì}>?BÞ|üøáC”™Èÿö[|ñëÖW7¾¼ñþÿg€ÅÇ_>y¾¹ƒ‘ßÚÞ|þøúÇŸ|úÅ7o|ùåW8 ÒÃ{7ž<Až=ÅÉMpûùÖsw·žoã‰<ü¸/ôG æ,IO,ï +Õ#“w|»<•wß…Å|Š~|4rî:<¸ê¥7 Ä{î‚<.%é̘î;öç#üî¸$М8æÚÝÀÓ!æÝI¢v ½N§bÞ²¤)§ã…)08á(Ãúâë…¯íFVu´”RÞýù}êK÷Óiþ_mw¿Ãý ïÑÊ@Û\À&ŸuÒáå:)÷ÃÓx»óZÓ(N§wQò¹âBÑOq(gF>r®ÍÍÌ8ä´¿±–ŠâÑ~ËÂõ €ˆ¦šµüQöño{Í/~©ó_Ÿ¤®Uk*£±Çt}4QOWi™w¯²mCÈŽcpLȤ2ÍüODo÷éŒÖôƒesß̺Ùh±p¢Ãx*ú =UÔÓïyÙ¬91—ËôÓìñl ÷I‚ÿï­…êŒþGîUÿrøÔÉ•A\PÃWBÊhœ½Õ+OÈm/¿­ÔZ ïlWbñåÔ”ŽX€»³®ryW˜@á@žÁ +{]¿¶Ï¿“ ãñýô‰d:úË‚ Àe2Èyê¯Pïðw•% ?êþò¿oÎÿôQü„>þèÃ?úèÃ?üàƒüÿàƒ_|ð‹_E/ÄF_ÿü³ëŸþùÇ\¸ð‹O?¿Á ?úËÍo"ŸO‹ŸÁ„©çëS¾?½îþ{ëÿ¾;I°2k)`þ0o•TÆgë.±ƒq[Ð/$B¼DïùÍ8ø­@ƒõX%ñ¡š."ŸœC¥ÌÒ ±†r%ÒÖð##޶Óe.+:ŸÕJu‰?”Z¤›Š0¾F]¦Û;tíí ò£0o‰ƒW3ªŽìß]ƒârê:íº¾¦î‡!öÁ‰@”ŽsŽœP8V‡Äx6zcßî‡S@kŸÌ°Ó„GáprÄJI_Hc¬6£EØyöG$2!5¨¨ADEÚh,‘2é‹þ×_;ûvöÍÑɳœ·K?¨}°ŽØøV b(s»X§¶NO`…b{¯Œ¡ŽØ+·  ù|Ñ¿ºèJ‡?Ä3‡8Ñÿéø»*° ¹TÅ AM;&¸H ×1<©ân#µ~²“ßc*£üsYG› +çÛ¡:çÌubÓë×ÎÖÛLÄÍ‘]õ¬[à‹<00龥ׯ4íÈâkuô8r$ ”[ü`þ¬Y¸zʸ¦áa;ø-Ó»mst}&ø!4Æ{Û=ùšËâà +èðÑ×YÞ!úæü_E|òÉGýæÿ9tF÷CqâZâÞ"ÔÝ:Šó]õgLó×ßpÈÎuLG–vvǾ†t¤ñ #5U`· +Ò`„}1ÅOÅ}×d¥ÕÇ×nþ :E>@ðb•|P/PW"ái&Hc#U<“ïþòQˆ"3—:ÕpnŸžÂŒÜÆí}ÚÔ9ŒñËe§q¾†$!Ž÷§Óÿb"„ ÃYcÄ|`Äÿ/˜H0h½Í+§¡ˆÒ;|È4Ç,Љr6Ú ÁÈ ûój±0rš®»„õzTŸÿÀ€#íG¦¦pè»ê/ó–ó¾pJãCÃÐ’?¡=Q¢…[ ?äk˜:ÔÔàþ¢C €&ͪãi¾K5pÀQäúKÕþEÖ:o©:ûw*åÍ:ß<žšxFßÏ¡Uo£:ì9pdu7ú&?À‘Ó(¼šŽT…= Uïþ ˆž`¸Ã®†}N2:IÅ(1O?‘'¡‹l П½ßçÿ?©×ùDg –ίF„„ñxÆ]÷_Fÿ;Hû‡œ€”.Èpš»tª§r72Ü-êA?c>ñÉ;¤ ó °¿î@±5V ˆ`”šÎÅÀ´ ¼êêÿÓ¹¨‡f«Û÷?zŒG™²JiÎÑÅô”Ç—‚Aa]ÝýŤxžul£vPÇ?¨@”ƒÓaz§5Œ°IèM÷]õ€²¥´‰òÍ=UÔ<.9w¯lõíVŒFY+åO.uHûµ¶þGýcÁ°ÿåÄ(D½þ‰ÁïOÿ‹ Çu%;˜.{KËM —íå8µCºRIéG-‡æxRäŠÛäå-Fõ¨Æ¢æóÙtÑL¿Æeá¤éüè³Þý‰SÕ}ЦÍÐéGçÌ,0°ü?C«Q̪ê7‚båÄjOFu={dÇýiMPh¥¥Î[ù­÷g¢8 ¯óÑj›'•4}ËÙHS#©9Õ'á_®‹0Mõ§„˜ ‰3 `d¿„Ó)*®@_ׄ+ÀvP Wíÿæ¿ìðóó²±<-Ññ©ÓÛÿs¨TÖr{­?¢5©°¤çŒñëX“±Ò=ÀO+z ð…ÛjœwX´e|£:wbu0W?êœjÔÞ×y6°?º6°‘‚€‰+Î@1K~L<qÑ ×êDió”­Ò-E&VF-¢H ·.:†T§ø˜$4ÏñèAï}Í2…W` îJQ>‚‚‰K©(M*1ÈjÓhN­§h8EŽI§–ÛH )Êliyxaü\$”]d‰ˆÄÂq„B4fažG€%ò‹‹ß ÷Òò%ú¶Æâ½ÔúXŽ +Asë¿Ô“3ä#£Pmµ1>Ž€o€­¯&S_;JÿúªY›ZfÁ‰«Ž&‹ y¦|tö]@*ÿE)¿ 8E>Ýæª´õ]•ÑW2âº7xSßFîäÂá [¤ª~Ô\LÁì~Ýܬ÷… {\)bË/tÛQд³ðY@ý…)I'—`\ÔÍòŽøE>àò–‰¿Ñúâ.üìâÏöÁÏ.|ðcß>øŸ>øÙß\üà‚?ó¿ÐÏö7\üàçìñG:ÿ>¸ð ÓF qá~ÆfÙ“uÙúqJ²Ÿçgù—ÈŽ¿¡ª%ö,s³F?·’?øào~áçdüIY\“·"hä#ÝÂΗcÎ-ü/,‡ÕöŒ:¨ì9îª +p´Î}ÿ2Í1åѬ³QÞÝù]B¶ZŒðŽûhcd0þõØ×y’MœElˆSolye¼ÙtÄÖðĶª]‘±Ì"$›pÃâ- ‹ï˜œï`)ÙQ5WYd¥äPùC(ö}vÒBrë¿ü –Í&šƒã了–,¾0ÖL¾Ún å@àÈû"ļ…)é*€CôgGÌ]ÑùR\FIc¸[Nˉ1̉,òº±†HVƒÀj¸ÚKQ¡Xýè¾(ý3pÀ_.€úf’Ñ8O}‘±lÏ¢!•7£ËT˜Âû8 —ÑñÝxCi‹,æ7à ›œ.–îÑò^àštFú9rÌœ¼)!TYÆ&IÎ!JŽ+À'®À ©ßã£B÷t¼õ&‘°ßê‰K9 +j~~c=OS4ùçü}¼ˆ#fwQ}æÿÿ§j±Ìó?»ð7\Ùï-éC?G`¼Ù“ Ë)/åaïaÊÐ1îºâ¢d)ø +#‡£öG9;„#l:+™€?òpLIö£z +˜\Ä A£5ÃSxï䥣úþÜWRZÔWÖ¢Šƒõqz¹òHœÿÊ'R4U=+E#‡yêE²ÛþµõóÃ1MÅ¢ÖŽZ'YÉ϶ id•Ì}X o¸­TCV"gÀ™ÚY ¥T>€)+%”R¬yÁÝ{QΣ6‚ÒTzOáa¹…$[KGÍ8¿d{©¬µô‘ ²ËŽíº¢ÊÍ•œ.lŸ¢6–WدâˆÿÏ™Ûê·ß@€•‘|K9¨5šëŠäéª_)D³ ö(p¥®á³U²ý6=éd+d×Êm»^RÙÈ¡ ·™:b¶œ³ž"­Ë´ ‹¼Ã ³éú$ZïÏÛ×ò 8‚!{my/úð£>þˆÿ2Ôÿч~üѸÉ×Ç|¡pl@R~ô!É8Â1Rårþ£¿¨*ªZÚnI³~BÁ!¯.וïl‘sÙJ¾Ùƒ~xÀ*~ü±Ó¼¡ð±@,G¡Ê—>†¹ô¼T˜`ty£fÜ-ûBDË ¾J²]% yIE0ÇE—ÈþVãµj|E9SýíóÙ×Þs\³p'xÈOòB/È!£˜rÒU® +ä`‘k™±9M„3lƒ¦Ï‚(·/œ< Ç€mH¦ÞRx‘ NZ¿)]ùqX#:gelwæ0»é7%Çòpyiz®²6`^¥(6‹dƒÃ§È„¦†—E”u¢”Ð5I +ç#°PRê•Z•ùa“•PoÈ-l/÷ +Èæ²åIÊ5¥ +ý?Lwø]8«Ýîý—Ü.’·jÎ"ô}Ö:y}¦}=¤eá²ÎÂåOÄ„ªdEÕ¤£ñ¶[Þ‘ÆÖ¥[¼.!ÛÉ 3+ј`tÙò™MNs]e4(pE xÇâ`º•šò¾¤By‡îÓO½I§–eŸÍþÖ]þ9Ëÿýá+еdÃû}êëÇëÐÿüb }ègq +yS𣮠‘s¿a¡%_7>ú´”ð±7Ýçßšy«0tæ÷º/ùSÞ¨íÝ>%׃ÁeÊ©JÈ;¡°6Ä»ÝØ;3ø fP¾È .µƒMhg@µï¦‹5üER['qÂZV.@§¡xԴ¶ˆxÐIÈú>Ka¥)fê ø®y€R©ó©×“÷£ëŸ—ûñׯ;ÙîóëŸ}ö©÷ôäã­zO”¡Ï=ÈNîÞgÚ`™8¨žâ-\¸ø35ÞùòT·@îï F£È^ã&ý}úy¶’­¿Ÿ;+àÓR'>-,ïÓÏS3¾ ]Pç£öùã#óBåÕYÊ‚£ÃHՀ߈Y£~Ø[ã‘ð`*P [¤äÄ<l&Gp™r˜^ŒjE óäYô-ªITaȆD¢ýoªA$ÀþŒŒøƒŸN¹9æ­D²æ8:õOJQI®F LØ]€/[‘B(Û ÛÔupîn(å˜MòX¹Þ'¬GPe²W[Zîª$…ð œDœ"ê5üÙx‡K ›Oûfg¦È¶-w£|¥_(Ǻ”꘱åRÍž…>6ÏrÿM¤@—8+GÉ“h'žËv¾KÑgIiá…+¢¿ÏS™á©e@Tõ%¹DUOåxŸºèÐAïz÷òÛL±Ô¥àW +§r´‹¤BzcËe,¦†v¨@Þ¼ÀÊšG<\9½(0))ç\@æ,ÅXÙ–æ 8@IT’­·@™åÿžôå—7n|ñåõ/¾äûË/²ï‡¯/¯—/¾ø’Sìúõß$ÿüKúüú€EÐ!` €Æ£ì~œ  ;ìö:ÚdÂׂ0äsÝLSüäìäÂël_§rÿì³?±8è+ê‘“RñüœR~çš9Ã¥¢oPíÌŸyPÆë rê¨/‹Nîd"'”(‡ÑF€Tf‡ØÛìTW¢˜l›C¡ºö…þòß—c쨰}ÍŽx-N½…«öV¤bëQãT(wÞ©Ь¥‚¤°pvVГ0/³(”ÇV¬PŒcH×GiMªSÒüøÜ± ¬#gÍi4ÏkˆRë0»ÈL µ‘Þd ø,Në~ˆC%G¨©}· ÛH¶Ó=JŠ?a™ÎNÚMá8™wAñÞËǰä²0 Å«©§×\h/cáÇíæ<ŘF=- `Ç;õðÒIý‡z•/«ÓõPžô.®ˆêë º¼ ì“í|R²žXÏÙ˜é”ú +`/òÂÿ'E¨óœ{I»}>%,‚™"%o\5q–J!½èÊð Ыö{ÑM諯~ãóý7oÞ¸ù?·nþ櫯nܺõ•çnÝôÇt_ÝøêfÞ¸yã+®ôÿ†Ú +è$|öɧ¡ÿŽ"è²Dhüñìµç‚Åç¤û"#èX˜YõåWAùþ|e ~sãÿÆO2ÿôsNQö­[·o“¼§¥P”?Âåǯb„á,\2[ÊÙn’QÕ|ãI:Rëãõ@8»t‚Î]ÈŽð˜käýIP6Tɨ¡ßî‘¢¥ïUWû0šláJƸ.Ë~˜»@É) •ʆßDÉI›YÄ®Ž'LIÁ€›VÃ\BKM–\TkݯtžMª™ç<ÖóÏOê’ÓÊÙ´§/uêz' ÿyƒhwÊêsÅ,j Ó¿¬¶²Œ5r¬°™ž(,v棌ð”*”±%q¢†ÃäÙsžØ1⪯f(ø:ÄÙ×ö/Õ¿Ç€NÐÅU'ýEm—½ã#ÿNâ¥r uDÞÐ`»|ÉeˆS^È1™y3 d»´Jõç›þq]!²Lw§Mô…”'éJQþ~@²š'èÎO¢¿¿-ݹsïöÿ>nÝù5úVžû÷ãÓ¿ù¿%NøPÐÝ ¾ÒuÐwж€@ÞHû-äáUû~ã˯¾DñA'$Ÿ›·îÜfûöm~-‰Ü)>OÞ¼}óæ—Ÿ~ë׿¹ã³…÷îý:•“ŠîȪòq¯øSÒæÒú,Ù5ýÄèep×$á<žïS¯ç”NB%—ì/¿qÝè4oS…jàV³" éºrf³ÅBhËÜ£Õ@mô\’ªƒšw“{ è°ªá,¾Ä)OŒP¥4$•Å-Æ ±¶=R—Ö8Gmʇ+fÉ¡£ѯ.¿LJƒúí|·^âeË€£ +÷‰#$VŒœ-U?ê@dÕ_~´q€3´šyÔòˆí9š7¬úsOå˜-×?>ãzŠÊF2³ò¨í¸"%#lÐÑÐ5>O@úää?ê/õ C—T~sŒîƒýõ„Â)@o`©þò:~$Ò¶áét{¶/;—lœìàœDé96öþ>'KoG@èˆẗeèÁR)zƒÊ€ÀQ4p|pÿ}é!ôè¡ÏëܹóÇ?²qÇgþxçÎã{Ñ:öÔ>ÿH‘Í?þ•Da}(@“{W€ÞýâãO| ðs|xO@àáæoH­®ßF·óGŠûµóð̩Ľ‡ÀϽ?Rèkqç! ¿úìËÛ÷îݾG==æXOЬÈN™ãÖ’¢ƒ_tp†65pYŒ-*)é9¬SÇÃß9¹é|rʶõ‚ùèÃ+§-Çø±ÄRŠeúêàI¦¹ñË9¾ ˆ<í×’Žà¨*Ê”],]S ¯áÈ—ë +98qTe Te·mG„lÛNšb>Ë•E7<®$–S³ø:΄ƒÄÌ(¥¥ÓøTd`p4 ø÷jyQý“$& âÃ]ÌÍ[rD·ÉTrñßXúžÅþ[#ù(Ùlá[sMè /–ÄÙjcJ{Hªêð.RïÐK‘DŸ_!‹ãÆy¡“:‹Ï¡2.Ø{G PTû=éÉ>žlf •{¸ñÄçø>| @üñ!¡?ú”?jŠ2÷nÿæ&ÃM¼w¼€OüÿàãÏqô¿üâÆŸ|ôñ§Ÿaý 2´õ.p‹ !³½s<Á™{‘ûÓGo<¤p*ôè¿Zؽ;·¾øòáC*Q-….Èóp&¬="j bƒË$¯©v"Gìo$[ÈÆWpÄÙ¾Hà› = ´ª„×;5¦Í@»þêQaÈâ`šy"=l'GÔÚ:é<:ëÓNuW„¶OÙ§ç€çͻˑLÁñŽ?¥SI`=ëΑ‹ÇH}â)úg­f™©Çâ—'ÿ)ÜÁ4‹ChS~ +5Ôh |w¡2(í]j”ûà ßí<ˆ´,þ˜Ôý.@Q~¾ +QFžS¦£IsÍ­I®ÔáU ô æóâ¥4Ó¡;D І¸7Ž„õåZª^ì­HNCS{3WÕ,mÀ9°2Ñ•Ádtr•Zúÿ—–o«†Ê™ã!É[æÈwô߯‘?²‚ÓIÉjêCµ|vLáËí %î’2—pœvÓÆ^”¼Ïbt?íæHÇ’˜É'Øš&üWãÏ£Ü890¨Â¼?m<¶ñôɳç>ñÿì)ªöìÑÓ§OoøüKwnÞøìãÏ\üR³%¿§¡?¾îüWžâƒ=Ï6\mäé³'³€€µxô„2nÞv!*ðüÙ%+t!-_g¨÷è«~P¸ì  :Hj</‰bæ${rººÝqŒÚåª2ÃßhDuº?Òã¸qÏgˆA9êÐG,ð)¡^”)éàP©M²±œ’Q_zko’EŸæÐQá¦E¬«ir ŸÜ<Ê^Yˆ\ÓŠj„>eÕr’ #›K[”©nü˜B@âÀ˜Ÿ¤(êw\~ð€¯¢ÿJ_À/)ÑM2K zd—Ⓨ°k“ªf¶ø€ åú-9 +É]~¸¸\OƒñÚàJɯ*;¸8„n¨^”Š 'ÃQ=8y Î?Ô«üIõï#é$dÈßÖٛɖOn[ºü˜ûªpØNk£Ï7w3¾ôo_]ßUMsäqZÜ7vÈðøÉAÁ=—~)ÓéÇÁ€·‚€7 \ÍŸ@Ïžm=ß|îæó-`àÙ³çÏQÈ Nl>}öŒÏ³§›  +Ph¡µ‡áªõ¯ Üú5nþõñÕ­¯nÝüêúgŸ}‰ï#~;á…Žª/€»«´ïä%\U×õ|Ä×ǯÑ:¯™wYÀŠDé•Ò…íxæ¢8öÏòJâ:ÔQjûjýë`îÙX ²,:<Ï „ø¸“*WCÐk5sÃOo¸ÊžqL¸äËqº(Ê15îãúxÁ¨„’ˆíô•9A ¾¤YëcèhÈ¥!,ÐâPZìŽ2»ôMn–¥»tÀH}Ò·’Zé¿ji¼„†¶jà±’­h‹ :øŒ‘m¡DØãa?(CðÛwÅ1Õ“c_¸Z¹Úç"cT”µü©I4¤Y9 +ÔëZ^LÔ_XaóØ€úK KμTÕ¿ñxúhÆmzZ f„#c_hEµôéàÁÔ”=» !ÞîÃØü°/øÔuzC{Jò¥Ól§„ê¤Öÿ +ìüÚ~¾ëŠ}϶ww6·wÙÞz¾½û§ž£Ÿ›ÏøÝ|¢Ÿðä‰>ÃÆæSö¸ób@¹_pëÖ­/?*Ó€?øìË›·nßúòóë8¿¹ó÷Ž<Ôâ£ÿh6€²ý|“’ž ×›Æ×³ÝíÍ­íígžÃ3x +ÈÜü{RRŽïlo-é<À©×iÖ W\Ä) uCÀ`bSä] k§Í08Vϵ(Ç­SôéÈ鋿aŠ‚ÏÒÊGIµ*|xžèà:ñ9Ç‹`W[JÜ +òÕcGÓ\½×xû:× = ºé"Á‚Ú‡é#óbÿÖ¢úAɈ„q +¹h0¬TÊ(å#ÔˆÛƒÀ–KÙ¦½¤îHKPnr°õ™ëÐ)…®¦ H"¥v³*é +wôz½Ï— +”4$°p]p*Þ3šÿ2O4ח¨nç+ÚJKBHPàȉ Ý`»ƒ9%?8:k×Ó$u” +ˆFñH2OªyÃPÑ/ç­¿¼ ’ú|Ñ%°Æ,¥xþH€™ðy±–.·w "€Á°PÛL¯ØK¥)bb–,t!Jm£’Š?rAùÉùŸamØËY»ˆ”0ÜÕ[¢õ…R©ã­7¨Wí÷#ßÙ³·»·µ½µ·³½»½¦ílqhØÙÝÙÝBÿ¶Ÿ›Û˜k¼õg›Øp|ƒ§ˆÓŸÅ–cÐ +¸ ü¸së77>¾ðÁ…Ÿ_>øòÖÛ_^ÿê+B=…¸þOˆñ1ý›;ÏPö=l;¹î³ôÕÊ}À#\ŸÏ«Ì?P‰ïC?ñ`;Žþ¥¥á_½¼ê—(p¹€%ôqÙjUy÷q¿3y\õ”ZªÒ.v‚ 9ÙºÒ<„Nàm$ÔUI°éi~ƒ×ÂqWºùý¡L¿5)]œ­€rFØé’Ž5þ¼­žö~"íò¨ÕßUõö°úÛ»‡{{Ïw¶öw÷vñ\ïÚÚÝzº½ùpñ§OžðàÎÛ÷îܾYfI~vëö/¿ºyû×÷îx›Ñ1~\ý-”?ž¯Ýíç;Ï÷q0(gïð`W$žïGá·66ß~øPÚ}±ïKSYé­0Ϩ,Ø\¬=f‡ öÍqPºCS>ž»€]Þ¿x~¡›í¢~÷§ÓŠzŽ„ã4]¥*ÎN®¹K "6AN§"}«R82Á€GvPœH˜‹#&è•¢ç‹yò·èLïwó®»1ÀPb”J ¤Ýl“¡„˜ÚÂ&¥ëør:c+ÀIôn‚ÐYo.G—¢†óº”×ð)OT#¡?nÎüAµ Ô¿Dµ¶M¿æˆ+ªQš‹r¢†®Glù8Âw†ŠÆŸ"¼sëoôÞ ÃtYb|‘y"¯…-ž.<èN¼^¯¥y–ß5‚±µœ¡50Ý¿#ÁØjÒ”“ŒÕ7wgvo´”œæ¿Þi•Ø®rÛѸ5ôy,OMiǸs…Çîþ_ìùÝüÏ4¨›Þ×@¶èØ»éÏ9¸V"/„‡>‹ù?"Ýsuÿxë§*ˆþù.öÔ½ýÝÃCµÓ1Ãíý˜¯}gwwË‚ç„O777Œ +žPŒÝ¬Áær%=£õÁ£.$6_t “ ašlFêr8[‡.j97þH鉥Kï×ó‘ž«bî +¨4š<z¦ÙUºQŠéoÑ”Ð4> dPP¸JR3šV÷]+Fël±ƒ¦Q¸²âT&CôAi‡8¼V¿")P­˜ï0zgšLômÐE±) ÇGT»J ìÁäw–TÅS¤pRx4ÓZ zOíE_wB' +OÎáºOȱ ò¡ó4"øP5°,XJ¹7­ðÍΊZàåÑk# ïóæ¾]ÜvŽyò! ¾>ÿ:¨}ùÃXÕ ðD¯)—^*Ë€xg)OGcxØÐJœª˜Vv°[‰¨TŽ ¹ÞÜKýà’&¢¥s|’êÒÑeÅUælt/o¤ì\°•«=ËEþdswIòù(Pû=Ie{©qEï0²*áA|òç{[êçö&ñÀîscMl +lØÿÉ—·o9±÷ñC‘Âé[Ä[;[yUàÞs ?þ>¾}àèЃ¦ã€8þhÜñlãνç{{¯^¾xuˆÐÓÛÇêên:ˆ°PŸ™rE)oäÐG¹œ(:Æ|§3°ê€;çA_œ—£Ç¦ê¤Óéa}¾Xäöî†Ùj€ø÷<®ºCjÅ…+ ýa( +G~ØJE©¢`/Ænû|Ï©’!t¥w8ç÷Õ +E@ÄDC°yIò6'ßa£ý®£]<{𒌄ى8m%W§BòÌ%ðK/bäÒ˜ãnA„TtsIEÇ¥´I²Ä#ºßÝW›‘] +G-ÕÙ^Z®Šú“ZÇOªµ±'ŽJ†|O¼° æöÀvg³iBÏPª.+jÁU–ÚHg?×'(.@P@…Æ_Ž€í/»Ñü³tq5·G` º†ý‘±¶MS¨¨ø6 ’j‹wÎýHed«d:t 8EbJ¯Sw‚–l§˜Û0Q^G„ÊÝ~‚Þ½£ü~ôò‡íy€ÞcgÆ_xĨ`HÀ2b˜±þ›{8â€Áîs‡ìwTiéÙÆ3´ÿÉ0àög:eõžÏ>»ñUüÿ‡OœË·ñdss“˸öù.ZŽÅß¡ ŠÛÙfvö^R/qúÛÙÛzüÇG[¾KôððÕÞ+kWèÐ!Ç$`Û1v|Kè x³²ðz`_ØtÈ’š+t7"„Ø®{ì Æ9]ÌgŠ.J>5G4DJÇjÂ9fÿòkÿº;ÌÃ8¥X+`áy_¦€SÆëCõØÇ¹$ª.þ$a`C¨“]»4qòK]É<΋ ¥A™§(ùÀf)²åÖ”šLþ¤ìÀàš[i¹µEøˆòý&- :ïl@²0lOáP²³ì°mÊ@1,8 »Ðnå[¦§pÎ%R@ðøÝ>Ö&ÇkãkÕpVe?Óå3îÄ:€q +%.$ú ôD@ 8r K¾¥»Éò’âf\ÆÂŸðÔÅ ”®ží¢•áˆÕ,iú–g]–ˆdi¹Ôúp€b¤%ÛzäKäh7gpà­a$3ehöÛâ¼Û(*óžôâÕ‹¾°ý:Ø^bk_¼ÜÛ×;@ K¾ÞÚ|¾³O„ž;òÏ7vw·|‘ ðlÓY‚O6î=zò÷À‡>ôÉçŸ]¿ñU?çÿ±³Š[˜±„ݽçºó{Ûûû;»;ñ7¶wØx(˜Jìî‰<}rïáÞÞ+êÁ1ªµ¤%ȶ3Ïcd¢ßtY5p‰Éo{Ä7m£n~Ù …“Í Z$x·'ù¦P.Ř£_Ðh@e¥¯éR7Šf•‡TAúÃñhÓÙ·ùÕ&ho)ß +YX¾êA™Âhpr:Íš¹¬|Inv¶ƒcä…³=œô0”í…çêBÚJ= êËu)7„ŽÃé&ÿŽ¡Z!¶SÖÇæ<оŸÚ0öHá°½/ÜŸpÅÞ&¥eB•äX!Þzå°ì”hóÐ-¾”âÍA7óòŒŒ„†®Ì¤Üsz8¤ØÀå“f\Šƒßk¿±ÿàòàòeR®\r0Pwê½€€F!WeníêÑâ6‹PúttE̲zÖŠS‹aT8M—8CS0i™Õ>"ZnÐ/•£¶I¯€ô¹|’±ðž"!Î$18  +@ÔèÅûÿ½zéèêÏ×Þ+´ÏWöâþøÏhßζ£pÛ¹Wn8,°EœþüÙóg¾:ýÆ ¸÷9€öÿ³Ï¿øòæÍÛ÷î%@9Ø zÂÞ³$#d”ýŸÒ-Cç¨m²êHšjàÚl¨fKz›§lä»Ð•ðÛ›;‘LÊ7ü/úã77ïÜûû{?Õ=x¶õlks[ÿàà`‹`o›"ÐtTþàÅHðòÅîËàœŽçÏ7ï=ÞVãA€—TÒ—‰ûw¡gÅi*ò,ÚJö>¦ðø è!Ii8éFej):9Ϧs./UJóä Di¸î@¨×øÔk}$/1s 7U"TÎwKÝÕµšÓ<á¥@Íýáˉ4Hµó+­Šmu°ßN[&‚ØâjG| 8u?Sáߘõv°ÿŒþãþû›»ÇÀþò•!™cU]_p-7ä= ä—¾€ÁÖCOÇ3‘È—¶…\±…„œ€ã™ Ä1ë”ägŽàt)“žóÏG›ÓòåáÈÂHÙ9CžéÏñš³®¾¼ç&WÄø^xùBÀñW _æ¶€¯ô v½Y¿Íñý­¼èûù +ºµùÅÞØ"&Ø|ötãÞõ²€ËzÝüõíÛåoøpÁ³MàC¿‹éwx|y©ý÷-áM!þ;âpøbïžÂÖ³;)Ñ`ä%U|¹¤7 ´½B£$ÏaRªº‰è¦VQ„õ>“æ‰Â8þþÚ©v†'…ó¯Ó!È ·ƒüä›å‡ßY}¥¯œ~†P¾í\L°k‡a÷ÙƒãTs³ïãEßíü£#’K|DÜí³W‰RßQ®,ŠhÓ+ŠMIÓgKs­»Rdn¦s(½9S)Ág(G¹àŒ/ðê¦ýúü~ÿ¯^ïýÛ>PÁ?4ñ.Àá¾£¨æ«h)û8âNÓö÷÷÷ 6 pž +6þþ:À§Ÿ~~ýË/oÞºõëòôï#€Íç¸ +[{ÏH±§ùß>ØßÌxù’š ãÚ{\W/¼#¸½ñLJ;¯^¾#^¼dáI’›‘²º¥÷Fàdº¨÷ºñ÷.>ˆÝ†ï=5WḢ?=¾Õ”tˆçÕíÚ<ÑŠàGf³õ5Œ=©,)=i>1ÂÉËdžÓÖu„Ë,ÅP’6ƒêAöHl ì yžRB=§û£5,`]8ã 2$càýPs󄇽7šûà3Å«M|êYÛ^ÞbÂR2ô2ÝX¸ÊuDÑøc:­û!®ÆT‚>–i…dÒx± °,„h}8Ò·Ê•ý¶ÒlùŽ ø²Ýp=5²*%B³Ù‰ìÏTK@1­Û Žêã¥À‹þ°ñZÂÿè?qB@`‡Áa€Ü€€‹NŒ^Š0¬\`L)Ò«§¢Ø ÍHˆn½Jí}˜Ð×Ö»ƒÎBœq ÝÛTCNÍÚ#¶Ã¯vä’¥å´Úä4ïÊR³…õ7(ÐàÙÞ¨MÒ{ü¾Öîcp_죀è<>úþì«–hç.ª‡á×Zïíì;<°»Cð3î{Á7Ÿ;»ß'øž<ºþ‘þV¸uÛÇ>zøøÞRm;p5P³M,€±wˆoÿ¥Ú-ú¼p„W{»»O>Ú† QöNŽ”¦¿©û…¹ò)÷ö‘k糖>ºu•ãz¤’·¹$Ù4¸_Z¼ƒè&Á×LðÍ2íÓcjžŸ†ÌÊ$ݲՇö—ýoàC@.$?éð{‡BPJHñZ‘¦Žþ„ÈçUKÍÐAóA¨ …Ó Ó¦ +©™u¤Ô‘( Z2ÅéhËB¨h^2Ý9‰0—qÌŽN”k’ØŸy½JF}fZ¾£?©(¿rúéeÐ<Ü@_2ô¡¨Â:^¥Š™Bç\¥áû6Åi¹šæí¢á²ËG:e;jU,eïz[ 'dWj5òýÇ/U‡‹þ_BÁÎþ1ÞWïÕ!`¸ºâÆâô.ÀÊé»IëK8Wñ²$ˆúFPçY—5~èÑ(*oY›±g# ó!S;ÚÎ +ãs¾}»°a¦Ê‘xÈ¥|ÌQ¤[®qÑSÿ,‘u´g`6ÅD¾*–ò½~_ýðÃá«ïQ+áß*ã÷ì@@toÿ C»ÎÜÓs?ØßÝÞA…·ñvwv7·Ÿé ll>þ"×?ÿâ«ßY=Àe2@PŸa„ý½»¸øš~d1¾AQp Àbvw6>ÜM¤òj(u†€Â7I¡†êy´XvWø\I´v€yKY½ ¯ F£ïÊfß~i„K‡˜¯‹’ JMp礻p†®<Ç6{ݬŒl%¸öH95¨‡žbO—RjÚfúdWYÒsd«G2³B¢Êù×AHÅü^¯¯P+)W8•¼£ƒì¥1Q.¤ÕNU0Y)Íp`NðÓû>&¶>HgâñlÒN#€ÒyPîÒ†j §[ +7;Ô½¡Â”&ô+® ê ø$hD ú—=È=Œ£Ke‹ÿyà]ã2;ø–ù6p¢õ£§€TãbÿµýÁoþ}«ZÆöVò®¯An âd°0ÀÒ(+W—½GË}ß‚ÀhE}4ÉVK²î£2\m÷K¼îœ3®cTRÙøÙuR¢ˆeK‚Ëu÷,ÐÆž€Jÿ¸¸èÐû’j /¿ù"Zˆc 7n à8Ž9†zûÅÁž÷œ9¼‹'°›‡÷¶ŸÇx¶k@ðpÿ/q|8àÞcWÙxºùlÓ`ÅîÎöÞ¹’ï ‡øÑËÀÿH¨ïð_êpèDá­'wn§FPÜ„Bo™T„°È‹“ßä3téˆ8åóm@™‹Û&·qÂæm3 ¿‹x9W¸H¾^8»æšÛgl§‘ÀbôÈö[{ÉTÈ» +Ül/oq¥JЬkðyµh¨OÅa@2Áô±JcrÓb„1~º +1¯ +YáÃkKá¹o‰¦"¥Eð‘%o"¤9%ÎÁ™}ô8¥w)µ ÏÐÑ$NIüÌ– üØþÚ¿ü ·©¸ÙŒå© ÞÉ +op™Å?§ÈÑ:Êe»iˆTi7Mk…8 }2–34<î0·Q"£«9íøŠ.ESî(`? ‘|@ÿõ2@ü«òh?¾+ýÃÁàòJ pâp IªÑb5œ¨;ÁµÒJ«N„ÅV„í…»PÇñ®j|È47b!Ï7ͼ|í—K=›ðBÅ—€P£Nxxå€Tú7©®{…yOúÿׯ_¾úþÕkÍþÁË^ý°7Mü7Gå÷ÐGïÄ¡ÿ»Þ2ô.Ýáþþ–³ƒThôßû(÷Æ—.xýú7| +ø¶“€=ÝxþtssÓèß'|¶€KȆ¬ ^ ^áVP£ï½+6lmÞ{²<ýÛá«j¹¤·Ï,Ü¥œ)Ÿ<€ÞÔ.;Ñt:¼_·èÝÕ W‹¤ŒÍŠ+ïšôÏûÓ)ê†]u…î)þÜ5MÂnШì¦Zb ö +ºå q ðÁÜéù¥\~Ô@+ƒ«ãjÅÔ‹½½¯]¯Ú,­js&pkæ´=Û¢Š>y2¯Ðw/ ;zšèµìóUØ>Ÿ{[SÖÈS[4 ¶ÞB½ÚŸ$u÷ýé5zÿЇÁ×ð^í¿F#_¿>8|íÿÞ)zêÿAæ øßÍó¹ŽæíùÐðóm¼û'7üýÿê¶«€9Apãñæ“gÞ0|¾KÊÝÝ=\ûÎî矿¯ˆ^íêhzèà€7ÏîÝÛ66xùñù‡Î@Béþ þUƒÆ)ã!¬[:ÓÁÓ™<ú¢²yfⲈÁuÝC(7šç7\gß_¹k¯¸´GéL¥W÷Õa0ñb‰mqfª6{’÷Ï»ÉÀà<©J}©PµjàîM¤¢ò +¾ÀYç˜ÚKæÝ87R'Çü¹V·bP/§÷H(\þº”A!ŒØdPápEÊ7²¢pò\6}I'ô¿÷r¸lödØp{³î­s5`®xÿA/Ü}_S"C霃CÎ0+ù é%ÚïCr#ÙQ˶Œ&IrŽœ9=\- ÀÀ ÷$Ôߨ~D`Ï5zp:@Ñÿâ=\Òp €"øƒT7“Ó 0!Gt/þaÚ%Dû»ð)Ÿ«Û'¢£ƒ’iiíwÊ ˜Ñ³UЇKbU(Ï£¢øKêµä}é¿ëì«|¯ö^¾Ääªï¯~ð`æùÙßF)ÕK¬6.;aÀáîΖセÎíßÙ|¾»·õì‹?ùôº ‚Þ¼}ëÞ=Õßµ>Ÿº†À&(áã…{; I< +Ì:QE”mw´áåƒQ²÷òpçÙ‡eh cýÀ˗lj+‚Z¶¢b°Î…üæ*ÀÈû°E´ýGjÃ}ÐJŒ”ù¼ÌÏøÚ¬¸ã+^¸@2m:dö5êF§¶vuÑ‘ WÁÙ¶¹VœðQŒpºíÕÆøŠ>>G$x˜©0ÐÌç]}Eå@ÂUŸœó{Õ¡&ŠÈÅ`Ö¡Á©2õdïk/˜-êv.¤pœòò= 4CâWeê‹ÎÉŠÓx_Œ‚x^Š*¹˜Oì”wâ2Ìô9C¹VV>^öÀ1• À6”âõ4ó!Ø®þÛò7M}¥ÌB:‘îG€†§Q´|}©}>³oòð©üŒ¹KÔ§¬Þ/¦ú/̹ùï$í?@¡€­¬ tâ|€¥pÒ¸4ð=C6™b(~¼îÓØô|UÍË»e¨{]͆Áfz/‘Á64]5õñ{Æ&‰mc(™–“L¾G6#ìÙ…ó€u<€“T®8zõÿ©úr½ô®áá!@ »ÍŠî ¡ÃWøÂc®!œ„íW¨îÎîþ¶ñ:z¼Nïïìnonïoíìlm|é=€/o|ù• Þ¹÷ð±O f}Ñç›ØÛÛÝÞßÛ@Œ.p(jx‘™q.ð(ìðûW»û/ðîÜÑþ¾Fë½'ÑS ’§„䇎øFÖ.É!¹Ög4FªA òrZɶÞ$EôHÛâ~›dZÅŠ+¦«Õ„\íŒ@ê ý]1° L7x†ö='|3 ?íIKUpðHpæÓ*¢i +\6æ];0þÈEØêÌƮӥ¼èIbÚA›j¸ð +ËŸe]*¶õhîÆTŠ(…äêY?ÁWS™zåÆjÑ?œapJ º2¿§†ú ØX¶ZÜØ´pø<Â* eKRý³6`>TÇÄfå@Ö9°6"£ì2þèŠW ä^…÷À…ô!BÝ®ƒ¸\©h;†ãø>©2Fº\­Ü«pâÏèòÀ|U*_+ƒ±S‡âè\^¹|éâJY:p9 +pq@`QVÜm­m²= z¤Ïà/ gF¶`A>Žæ“MÀÒ%ÓÀsaÑ#©‰nfÍ à®Ì‘µB_×\-Ô#€ä%ç•ÜÚþ„Ï+MýëEõ‚—¯Ø;Œê¿>8úòÕþþ!@œÃóùÅßu¡Ž}œú=gøìl|ipý«›_}•uÀú–×ÜÜÜÞ"Øw2ÑË}<:|¹÷}œ ¥¯Á–°f×qöHÿäÎÃÝ—¯Ñý×$û¡W@YƒíEùÙü†­òŒ„lC°°[M –Y±Ñ¯¬Jç̦ƒ®Bne‹8…ò"W²q€ÒÆ!zÕ˜uëÞ‰Ó2šxà+Šêu$µÂ3eo^?ТµÎÅIX«„«·@5Ïš<âÁ) &;ƒAÁ ëùm?ÀÂQ²µðy5ÊpbKð„ã5 + Ý×Âk/Ñ~ȡ̱µAü³¯²«–Áz¸CÙŽ0ŒD\çC7ÔÀ0¼ÏÖÖ{uY‹p<õ {¢4 +H ›åÓÙ¨AÜ`Л–>ÕO-»z0Š;Ÿ<F ÛÛ€òÛvp B½ŽGxOÂ+‰¶åJdÉßRzèu6ÔzóP9šŸ'‡¢ù|»ÂPå~à€ '€(`U €Wõ‚™\ òl  ~Ð3dµFlˆÈÉSŸDï|$¼^ô´[>9溨GU[Ep=¼–I˜« ½Ìèï4‘ 4ïPCga@†GèSÆñßó}+#? ìþ¢ø?üðÊ|¿úaïå‹}ôþ%êÊïËL vÐá®ÕGPdMÑŽÞ¸áB`ï<€‡y +èùæS' 0l;áÿà`wÿðØqÌ6/_¼~õÃþáNF"üçûàpgûé{;¯^ïÐè‡%]@\"wåAõßúeÓó•ú|”JmkæzúßË!˜ˆýpNÇÑ*"ÿ¨Fw>ºB8ÔŒ*ÑnJq·žâ€p2›‡ê?%;¯¥j\óbV9ìFÜŒûmÛ R-sJáõ7Äç6:~¿Ž µñ‘áù|0"hP`\u’s34ÁyÈHÏ:¥aüDƒog¾`ŠL»iFÎÄ¡;ò£3ëÖØ¡ŒÃ‘¥¨Fºy³‹º»ï³öÆ=â`Û^äM®§ù¨šÐGð³žñϧNÓñáÙÂ–ä ˜Þˆµá‡.óýº½¿˜ûˆ±l§÷ËÀwúL¨”…¢þE÷5•¦²àgyÓ­ÉÝŽ録8Ope°ÚFû£ÿÀ¾W—”ßXÞñ|Ük®Y]u%íòÀäýÕß»% +V8áS¬O;çRÒAø.¥c!ýAŽçÈöt7¸‚uóQCë. wÓ4¯I÷h®Z¼xQI—›‹n„€¥ê'|9¢”}š¢ÔïOÞu +Dÿæp €v¿L'Ì´m5:ë„ ÿ_àì9Yˆ]­¿‹ymïlo|qýÆÍ.òøáÃGž>yâšß.5J¼†ýƒC >‘¾º€ÿ`qÐáËݽï½Ïà# øÏŸÜ{¼‡/@¥Ê ‚žâ ˜aùã÷ €ZÒ)Ä]A§UðrW>ãŒ"ØÈÎ|1Ò•ÞPª}®ÏžâR)Dùè{Cp¦)¡ÚVkXÉß0œî3,Ÿ‘+e¯Q@;½2%_§¢Í•ªý kçN +±xä_1! , Ž˜½ŽB»pbp¥m&j  mšu„[lå~;ëôÑ;çØÜu@ýñ*=Rx¨Œ‹éøˆ.Ɔ,‰ È6iÒ¹;¿¡ þlÑ|~ø"øÁ²:Ê¥@†t÷ãÇ=T_å_Èn6ÊBm&Ä.µ€ŒáÊË’ß)ÝS¨1zª>!§ŒLÚ†H·pßYp¶r± ¶]%§bêq»˜­T™‡««ËµÀKøMÖ³GµÇ+ÃÑx0ª« )Õ}«"Œ‹PîfR`ñNxW. Ϊð_²bO[]C*Ô^øe7,|xjÙxåj.XòùÂùè¾&Q)s“¼l¹Q— sú=D4å.Àt&æÏËÛ/áB.®V¸"A™ Ó“ºú(¥ûÿƒ–W ,ÿÝäè>n÷+Lþ+…Ãר;V¥P[|< $ù«1ÂÓöþlq¿[`Þ€õöψÃ( q½ÿ Q<EE±A5]=¤ <Îè $4æ[šs€iÀêÜ窙ëÑP¸ÓL9‰Ðu +йVØxÀ¸.*-oP+Ïé–VÓTd0?lø‹+ìBh¬žù+^èìîmÇ@¯÷y¨o½ýðáãgx¾ócsëùóí}ç +9ò˜;Æåy#Ÿ÷?xùò{ã}]hgãÞC°áoZþ’.”a?þüðåwá¡{«ñZÎÑÕþ[á2Éì{_{Áqüú0šd\)-¤â+8±nÐê>ý鬮h‹(¢{F '<4™#$K „¿EL,ñ¬@ÕâÌçÇ;'=€õÀµÞp@¯K”ÙD‚ÔcšGqòiD€Tê/´=fÇ2’z&H¢EiyZ­Vfõžj,@áÐYRùaC¯ù|õÇͰ²áøåá \×à}ø'I”Àú¡ù)|à6ˆ³XjÈ®[8>1N¿ ´{ÀÏhÞyÀ…x*2!ÀÊ`U`|®àmÀ¼V3!@ï;¤³@ýŒ‡zE•¢ôµKDq‚fZœX é‹z’ÿl÷YãB=+À]Ž–ÕÑõ +̤ú/‘àÄ–¿?9ª÷ÊáþŽ´/àðÕj!Ž@_pEe/÷ò¨q¦³ç“‚»˜ôƒ,çµ÷ì«O?¿®pp- '›®üŒ ÌÜu¥‘\‰—/õ‰Ç_ð…ûáXvÈqw{óÎÃb ç—ä  bá­¿H{øyDã¯gkéŽ)ÌÖ¸Q$P ‰žåã:zÙì»®tUFbR#Õ&•l(Èäøsš¢Å× óÒg=€Å±0<ĸf÷e À‚çz„ñ~õ«_]¹véÒß¹+tñoÿöo)`f`2Œß{Uèöj„“a¥Ä›G؃yQEšæ8I¿þ_ê¥ú ·F>ů†*¶ÃÕ¡üz;!¤Ñþ€`ÞCaå¸^óå,îëØ'ãd‡çrIP¢p¹N†Î—l„¢•§*êSü ûNÐrÖ…Ôãù½¿VU½г«ÐÒ¸ ¬^ŽƒÞæôƒ€Øÿw{èbñ\ô$ˆe²3FàÖ` ðFËÏðÄÖÎkï °©L˜0òéâ)- ’íº^#8çqK€ÉA`ûú5°[{»;¤tòo.^¾~±õ/µˆ¹ÉÏÞöÞ³‡wA'Ïå†dOd·ºzƒŠØúM;›ýëÌ¥=8‘Þ蟼C<›v]Ùu|«)v’Ëú¡z¹é(@é/!ÀüìÀbqb  xK8ãX¿öwÐ?ùõ»ßýËèW£+÷·{dÈ Dù—û‡ßý?÷;êt<  ÅPÿiÀk,ÑwùSå¯g@›ÆÅ9Pø¨8âö²ùÊ-¿#—:qK} ]ý&¾¤’zIºþªÄ;"^>}ñÓé×_Ï\” ºÔ-Rá‰iùsüœxŒ®>ãµ¾X m>°´x@–N8:ØÌgª3@Ï«c:éŒVÑü œçÄ8öVb ÖÆV–@€önçÍ¢€Õ«F³™Ó"­š …_;R¤ iËFÁzz0éò=NÍ0Aæ¶»þhxï𮎔þ>Tÿ ®‚½•|orM€CàÕ®‚¦ýðÚÛ¯8æä ¢ó=•GÝ'øœX|t~ö‰Ú}¨wÿ`ß;†_ܸuóÎ_~Ï©ÀO@€ç®úlkÇGHë-Ä)ê¼Ûü¼|m@ U?Ø;ØÝÚ¸óÛOýÀÉžz@ÞžG(s‘Âþîr:Æ%j9Ðßï +úôI‘IÜmÒÑ©qñ³^bV:×tÖÈ=ô@  3€`Ndè¢8|…—þ)ÊŸ¯ßÿK<€¿;ãüòÒ?ýá¿ÿOÿéWÿž4øÝ¿üÇÿø<ªPÀE8ÚD‰ §_¯OǾ"œ†£845vx$–ñR?S9(@>H#†y…¯®öKJJ ,‰Ë·ŽìI ²ÄZ×® 0ÍÇ`[”a5 q Ødê²r ¦•œTú5ëø~×€J€D'<æm”géÈXäE .ÇæÛ;<’-=€¡çHc]̬ºxÖà($åå[4Âl•‘–²f½E×}ö@a$ìX¤S> ¬¦+[.ôNXúWÑãö÷ÿSù)šøâåßçF`>õ¸³ð4Ì? —¨®~û+ø=çí8•ÏÈàÀ‰B{Oo|úÙõ/¾ºapçá‡÷møðg>.¼½µ³ï¼A@À †~‘þÄk±‡Js®p¸·õœ`d(“’)³§ v̹Ó 8ù–Ñ1³ôvß<$ô¾SöL®f+ ;@…-Ê»ð—!æé´0?ò¼ó(,Ǻ·xjû’üûó/¿Óø»wÆøÛÒøÇk×HòÏÿòÏþô‡ßô¨¿czES0_. BC¼R2Ïåô ç¢øŸê ¢á¤Ç;OEÆOa@^”?³ð_r)lçZÇçœà| 3“Û¶ƒí#?%,¨tÒÁ€ï‚·zªJè@,€ÃG@3«?þøç~Þ³ê$éhɽ °ôÞ6P<€‹ãñPðf«ª¥ ÐppUVĈÎCnð=›ùz0æ7ÀZNbžNéšIÔ|èÇA ÷´Ý?‰TkÝU0ø¯üÃ+GÞ³\ÐyÜG…QÐÖí“$0\÷kïå¿îîì¿|vÓ1€_9ˆú;èñÆß ²ùü¹÷<Øß{q°W/TÑ_¿ú·—?<*¾Æþß^¾ØÝ=<ØÙÝÜxødÇÉ U8¢ ³Yö4•Þ€2³TöY„Z‚lÔÞ÷3º«j¼/™K7DŒÝÊ›ÝÊQÈWõbWK',àí€cñÈÌ ãDyC¿ç¿÷üþý¿üþßÿjô«¿ûwg<€_ÅøÇ_ý{á€àÒß³-ÕýûâàÀȰ{œñÈ!Ŷë´\ENÕó`Rš™ÙÆ¥å>?qãÓ ‚9㟷U¤¥îŸvdYIç5"{¢$\‹ÍÕºù}ò4 ÑOöR¼™˜¢=¾#pô ­Úº›Ö{ìô^øàÂ9pä$ÈâÁõäì<€#@å×а!A’YhTæ@`¾¤¨çvùv6h;RéqYô¯o—¿ìÓ`@þq/Êù'”b‚F·¡k§XpÉÔ¤Hï}hÿÞ¤þÃ/´l÷úÕkôð‡ï™»—©@ÚÞ=cÃX¾øþåî6P¡ðÛ€A?xéÒ^÷­›ÞpÐ?Þ»wïÎ=Ày@[Ïžon9p§ÿfî÷œLe5nÄÀ³xþäáã­rœ¿cp"Œ9¦èÀ’&¥J*ÒŒ(7ƒcyô²‹ø]ö'ßü4GÀ?’’˜LÊ\cè¤PzâìÀâ1ˆ ¥ý½XqTÿOxÿ>ÀI¸xéoõGÕÿ ðOÿòÏ@ÿÿùŸs©àe¶YYzÑþTv6]oLûÊÌ êòÞ©ÊAŒj¼OY† z(4[_/U ¹Þy\¤uIá)‡º*€2t†çŽcd§hC®Ô_ÈÌ‹ô›€ù³p=—×ì :ò>ûìcè#¡¿ð‹Ÿ——ÒŸ¢ÞÀv_¾<¸2¸¦æ¿‡ž† +XdE,4ʘ~íÝó=«æÕ&ø©œÒ£Õ`ÑiUßVZjûŽÐJ˜„ú.bŽúòØBI—¯åPÀ@¯#?Ðxp@=‡Ðjö] ì“ì€7 q×q|lçàåž·¾‰6¿Ø;ÜV¥·wŸÜ*Àonaÿ]ðñÓg¾d{s{Ç;>;°³·{pàd W{ßkÖ] +DGààðÝrt<²·õìáã½Ä!ìSƒ%•™€Š ?EѹÂIÎ#Pp¹Õs_L¤²¹YÞ‡CÎÈ:â~ñ†ÕÒø&ôwÞô€å<€# Å̺hî’~""À?¡ÊøÃ®ýè³tñÒ/ÿÝ?ýÿð/¿Sÿÿã?Çøý¢þü§Ñ²BmÒ u|ñY =¥ù°·{ áå9IÉ×GwÅPkICÞ9lÑ}q`\`€e-õÿ Å»¥\üÀýðM•çìÊ=Ï©6µš·ƒfé.N«ö\d¤Ì–þp]ðè§Ÿ|üi€>üà£?ºà+©{vQñÄ®ç.@]ãŒß:àH¥õÊ­<@ÄU*Þ)À÷…†ÒÀÒÆòMƒì§ Ìp7[§|%ì)”qX”æÏ¦ók#â|Îyšà€c´5û³5~D·Ý!½ÔœŸBjÛëׄñN ÒÀ @áŠÖyÎ;ô½#€›~°w€·¿‹Î´Àým µ½aý˽[Ÿ¹àÍ›·o?ôaÀ'Ïž<Û|ºùÜg¶¶}˜«𳯅÷ÏqŽ<´÷Êé@.IìèþÅþöÖ³'OF(úÀ‰#Z>u?Kr +Ø-, Wéì¶sAVz(sðTúExȽ&ÈNjòwˆcz£µ¸ +dèìÀ‘°x»½/¤€ ÿ§ßý£jü|ÿþ?ýîïFW~Ù ±D0û«ø'â~uíÿð‡ßý³@qþ{ @€µ)U¥V4_~qÈ­Aï¤å™¯v p ¼ÝTíì9GEÒ@ÿh¦(ˆ½Ñz“d¼¬3êãƤ¼ùÜúDå%Á¢1`ŒÊ§ËŽÀ®“ó'`6ýäSè“ÏzÀøðƒ_üââ€3èCç¼ë.ÀÒðÖ]‰f@@pI@ÇXÎŽÀBçäÝqмSV8a<€¾ôK2(\>²e»¥£ 7ƒPéš7@à¿ÿDR³qìqþý 2òïÌ;þ°ôèäKŸÜ{‰ûÿ½t(­?øeiÜ'ó[x> póvFî=~Œû¿¹ñÌ— +nû À–Ïíõ÷3«Èœý|Ïyç„£{;ÏŸ?Æ8ÜËÓ@Æ =­Ðëü *Çk¥®.Ûšv¨¸ó/ëU[½0ð™Ã/[ÎêùÎ}Ò#ä•ñ n‡Çô.À‘pr Àÿèí1ýþŸÿ;€Ô àëw¿ÿÇ¿»råW¿ú_OyÿöÊßý‡üÇÿðÛ_ý +WÁ¿Œü.ÄÿÑ„8½J–šN»#€– ZWbÇ5=o(Ð>|ÛÈ«±»=ˆ„Iò&iå—ÿ®¼¥?S†)¨Ç8_Ì"¶p¬`o°{\12Ǩª_>þð£ +øàƒ,ëié¬ôÀµ·Ï@õË}À‚ZLUì¨rú»ȦòŸpÆâÀ5…À™êMŒ¼ÙTax2*nX¾lvëû¬íJ× £òßo•_»ÅþxþÛO$´=ÚµGÏÜÉò`Ò‹ÃW/^¾v´ïß2ÇAõŽŠîáðÉ‹½Ñ\Ÿ¾é£@_ù(À½{w>zôЙÀ›[Û›Ïqöìm‹»{ÞADÌH¿wà<§`µU^œƒÝ/û5Â|ͧoÝô•€7oÝþ³îü5ëDê|—dJÔÃùRxöŒüš€… ÷û­E•üŒ´@Ývs{BA­‰|ë7¥@v‘Zß eìÁÖ^h_üÁ],u—Ýø­Û~Ï¥˜i+6Z&qþx&<ľÐý·%ÀÝ;wîòïBÔŸ}zÈ&“À¯T¡ôe€D2€zƒíîšàÏs?¿¼h‡Qo´& ðS½ñÜ+—B€è 0ÿ½_Äòð?¿> Iò˳nZ–X³o EÀwlšÇKÐo>ú¢PZ$p°—9Éßmh;þ£x%œ;3@ 3:?“Äâ8ácƒ}â{ðÔëÇÙô¸uàzxÜ8˜¶Ðä€`úíî¾3—\G¸àü¡:<ª5CgùuDÀÅQC ö‡Ž\HµïdƒÒÁîní°9É&™µ€«Ãe/:,ŸM’›wy±ðî]?ÔÍEG¯cÀ rm€ 4ž 6ByªÈd ¸Ü +Ü»s™h÷Àf3Oß² ü Ýa@ßÀƒû·›}PÑÿ7oßN0p¿'öi~2àI‹@¢J¿Bþ¨†ë ÝÀ.a†Õ˜çlËϯ½[³¾[¾0›Ökh€øÁÜñÍýàçNQà;É<÷%“Xß-ôÎ;$ÈžV\YŸÉÉFÓi濚7Sœ$}Á6¤€w/Àm p÷žO¹óàªþ@)FbW*€@·Ï»`p6οíÿýõy›\›9€ì¦H—)ž4€›âZ5kïæý&‹x.à)O$o +5ÆbOÃ`LÍyâbvX†úö“ôÊRY´ÓýÞ¾.ü²V´âðœ8Z”ݧÎÇ©R'PPª ÏÓJÄëX׌±1IPaâÞÃGã“Àá€{»û…"" hWàjÝå@ Àç‹pn?2ßö@½;á£Úa¹´¿½wH0À¹PÆ +ÉÚ +€+ש¢ÿdŒ¥¤¾ù·°þ¯ý6§¶a–^)<.½’¶jÖîôŒ‹‹»‡¾f§ÖÏä]cXZg+@"€+@G`>j—‰kQ= ùäAn€­}·Ž~ãÆÍÛ÷ àøÿüúÏlíéyà.a±w!ŽƒP f:€O¾]èVüœ°¦ðNÅãÚà€fA©Tk?ð“cÜ5B˜ˆ6ÿC¸š²LIT¿Ëæùµ…wýWâGÄq’Ø܃mÃ!ósî_(€åÁåò ™ß÷„–Žðçï¿wK€»n~4Œ>Í0ßmæn‹ë8àÌ{ý|šr}lþº§çvb}»P׸çÍøÑ‹=nëÏå’ˆ·1¿wú÷ {¥š×Å×áž©Ž\÷ ;ª˜>jÄçñ/ì/R;ÍþG‡ïd¹ìËfI6Ÿ4_‰~ñPÏÿ€uÃ~»Ûý” H¦*øpÀÛ8Ÿ àÀyé¡)°¹aÒ®~è‚âG…ɇã1#hL ¸ŠÅ âh€rÅyÕ†-‰ÇÇBýépè°@aJ±Þh8QÙñQ­R*lí–9S¤â{$ëPùyG¬ |ëÿ^mê™ÕÚ‹aüë¿þu±?#€Ì$€–Rž9síFùTÍVê þ›=Úå@SDàÖ­—ßeÖ!>ð0„ÂÏF:o™çO¸O¶ü¿ ,! †ú¨Š·ôý¼Ë›¯W¡…ûÿ{¶çȃ¯¾zЦƒdü`[8µUÐoú­9€ø2‰¬/ñ²‹fçø½üÀ¶øAÝŸõ?*w¬;.ÆÅáÐ\„Pµ¨œÙ2¢ë\÷¿þŸïæûBaÌ;&»I"B4e_Ç$?ïñÓ÷Ë@áÉö1çž~4:úhxt˜]îÞùìÊÁh€hh@·H›øÇ¾L`ZWqbøçË÷Ä|Â1­x'Ä5I5#=aC\‰(…¸XQï‚Òo³<œÏeš:hÊßzè±â²çr½ ²}ã@Wš—/îç3ôþ2ôþ^3¹ŽÐ'ÚÇÍ þs{æügtâ%üpAºÐ·õð;üÀÖÛ§OЦ–ü“2ðplŒà±Ó‚»2_j¿Xt6 » µj½àóŠâÿ“ãßÌØ‰B¨ÕOlX°ð êðaŒsúuúÀ_Öc˜®ö—ä~’‚+ž_[Ïs¬¾ PÝ03OÁGKs„é„^8­Œ£ƒLX° ½·ˆÊ{¬IÆk1˜‡¿6ˆßP98­àJe?ÏI×ø +¼†.1À³ÿÖ÷ àÿ^AÊÿ¸ñzãÙÐÒêÆêR_/5ñöýû`|ydhicÓŽ@Ñ +ðúõë7o~\†>ÿè2#Îu‘ÿ…ùoÍð"3«JzµD|3Uy`nN˜±éÜ9ô¼õ‡ÀýÞ£.|Ÿ:Æa­Eý»d $ÙÚ»u'óìµîCÅd j6É`‚ÒGò9 +!ûêX“޼Cü÷÷¾¸ËVÍØØ0{jüd ÿ… %¿ÓÀ½I@(à윀ÿ<Ò*Âÿ!À[u@ýü„8/ï`þн€#õ¯Š÷Dã©í +<<c¶¶§w·÷vööö +…ƒÊ~Œ¬âÎ+õ†:À¥†«€ìãxcs€tη²O±V8Ø:0qx䚤í@wOû—ø¿{§¦£‰2)¨õõ^ø—C87ƒv*‡R‰˜¬¶ø`lÃÜ´OoÏ”$zÊ^Ô_U¿kÏÝj*€ÙL¬¯Íôμ¯f9i@(ªõì³ ÿ·µ›×oö=ÃíoDû>°ùòùˆ°2Ô×{¿çþ}"€åÕP?ƒ|€{`•ˆÿó›×¯ßþüöƒ?<øãƒìï>½Y9iÊÄ/IF}IOÚ1©e1e×àü\(€À?¿;U°dð@ØC§dé÷©Ž'‹KØe¹¼={fž†€ ,¶B€T»ã;˜Í9Þ8 >~X¤wKÀñæÑÔd®irb!0<|÷³?d€ÏšcÔCYOÀÙù–_S‹ç&P¸Ô>Ó7Cx.; ‰z{¾ìÀ¿ûS;d + ]õìÚ§Cû†²§ãr7ÀÂü÷FV1*âœäÓó¥`•4‹™‹ýb‰¡ÒA»,ŸY†ÿ4 Æ?«yo‘ ˆ1@¼‚ +L œ›#ˆµõÑÿµca\­Õ«Uü²ãûëGÇ ˆaœbz”Ùh{gggww¯T¬‹µJ¹Z#jp¡ + ®78¨>ESøñÿ*Γ&«ìLïFÿÁjÆ9tò±°÷WØÿ%3®©¥Ók¯@KUXíZ!@"/¬å)çôgÌ&¥ç]2&ðîl(%Yÿ—¨ôœ*€,H + ¿?  + …¡f”Ø ÿæÍ›7þpô_¿výöˆíø¡6 €ŸŸÏ>÷õ³\ŸðÕÈÈêÊÒÐÒOâþçLl¢Fܾ~c`Éù¤‡`ÕkçÂÚ + ÿósñ;:ð¥Ëa§*6;;”=b耔PÀ¦MqõÞ³àõE[e +@E– ÐÏ]v™ñÔl®©ï%€+$Õ øÛÎ4=õøÉôÔÔôäø8 ððƒ + ÐãhÀPvö—A>-@yng]@íõ~IíÉõËè#×%Z§:ðßa™Ђ%­—Z*ñŸ®wì•NÇ‹<¤Håàó.8Ä—šéQxñfúJƒyXÈ'é«EEå>ŽœYød-üÿƒAÀéùÅÑ™ýÿUb-p~t³ƒš$°Ñ?{ W^sR CHØò†ËV(< €¢!ØÝÛ…Š…b¥TÕæëå*‡©9›x ÜŸ£µ‡‚E -À¾Z,¦·ËxÿC”C©Ö°7aØ +f çÌ©–¡Kª%øµ “¾7O–ü¾>ñXŽZºnKTš@#ýê] +àú/Ùj¶<@„ +À ªµ9€¶ è­ñN3ã\3>^»öE~Ä/_"ó_­Œ¬ØÏïYßý>àÁÀ³ï¼Þ| ü²ù·ÍW&ÿx Ðôÿ(³Yôôßšð·fF•LøoæLÂU?5€Â‡/ ö‡"hÏÁjøö5®?[0“)³‚M Ä]2.T|*}m0ôÃó_–Î8=<>11õdjzêíÖÖ[d&`lŒî^Ý –CÿãýQs³yIï=° ±PÆþ½ÎŠ*µ[íüŸ ¡¦ÿç›Ç]ü.|\v¯7žËtT <¾o.Ä|8Í!@(Ï;§ˆÁˆñPžØw¼±—÷¾çÑ3°7­ÿY¿ßgFýÐÿ&"TpÁà³Ô ¢À@¯¯wF“㱈òRˆ«5êÀ´8ÙYzjjkû­“‚a%W/•Š¥2‚£¼ê¨¯ ,°£ú ÄÒ°QÀåFê•r­¼·µ]°‹A͈£;qØ%åäÍ„÷o[oÀ  +àŸ#³6fµ?®$—YPÌš±uz}¦‹.+€™” :P,óŠÙ¤RÀÔAï%ÐÑ +À)Q sýôíÚõÏFll(óW––qñ+½FP«(Þxµùzi)À« b€‘ûŸG‘î±ÿ{’ +X_è"€¸i0+má*«]O¦¬‹V¶ ‚)`UN ½Ò¼ô‰°¤ÀS"‚Ò±üªîTæÃéŽI]@ï?NO¿%ÄÜÚÝÚÞÝBLŒMŒß»“¡ý*k*Ü0žý®f€Þ/t øßèè*¢¦D;🌯ø#âÎç-À–øÍ¾AfªvéÜ !‡ÉqW˜Z¦g8oj¾Hø·"ÆŒ@ï°Nüÿc1á~Ã1<=öÕ>ßì¿ÄÀCìà ÑZm~WM“ü»Ø¸-kÚ¨­Æï C¡¦§wbVÀ½ýýƒb¡P*„` ÄçmC€;*U3ÇUèÀC9aHýeP©”J•Baj«äŠ‚±á~¹i—€!À»^œíþ±xÊ×_÷çú{‘‰Ì¶BÛ\(VYÜ‚J[D3wÀÕ +àÚž¯%¼H«@ Ô/çÚ­”ªp››iáŸÿ·C¼4 øbveÓÁþ#=(”ýò2ð¨ +àW F`Âÿó¸Å“ÛŸÃYôôßšH?Xý7¬#PǤä}¦‚¼jQ‰ôC‰šxI–|ÙU&~$~òÓ™§™ º'0$ô‡cŒãDC``‡×¿ZX³FG .]rj{kg;(`{kzrŒ€áÞgد´fë—ªg2@ö“<»¸öÎ%B©AæC©Fƒƒ·¸" þÿ–ÿO¿&»ÞW)€´‡›1ߎsñüŸ©´\“t¿×œ @ü?u²ÐÞ”‰|_ fHoYþa÷。¹Ó  Ô'X—ò/NÎÏÏÐv v´@ý78(ð¡Rµ,°k¥Ðlásv8 Q‘ýH©áñKå½ý©íb­PâÃÅRq¿Ð´+Àâ\3fH ƒ¹6€E…å#7@dÇ[Ý +à2\¡Ì¤$`~ˆJÜÙ +àáû?Ü + ûS-’é~Ýž>#ËΠ½ÚÜ\YQ¬Ž€ÿ¾¾¶€Z­^–ÿ‘Ïor»}3q@Ð@³ +zCüÓe,]‡°L`™|K­¢JííóOõÚÙššœ{xïÊÎÀ-K­ÂV `7dHà}À\ ôÖ-Ãô?€jä”A¼í•”¿?"~“/4.»×?4žÇÙ[ÜÒ™¢ÍÉJsŠù¥¸Üf’ˆ}<³ô“¦gææ©ãäï¹ÿKø/L›Éÿ½yûÚœ\Ÿ;ä?6Ø+ƒðwvJ«ÕJ¹ZªU]é¯P*ÖöµZ^ã¦(ÆL00ý“nSN6 pÿö t™À/L"ÔjDõ’ó…6ªpH%Â4 °·õøÉAyßiÅŠ…Ý÷  ©Ì¨ðdþ¯ ÿ1Š,®Ø¿,à¯1âpá|Îk + ªyF¡žZCÿ®øò’H9€÷@WaÇæ¹¹¡¹9Ôýý¯¼³¡à(_™]Ý|½ñ: ¥ˆ +‚F^þú·¿%`C@¢‘/ ÜNd X9ç·—râ¿ÉØ~X‡€ Pâ¿EB= â/xHÒ@TÓ÷-®|S ’è²cÐZœÐøß +üJ Ñá €ÔÏ$€÷!F‡G‡mô›~²÷ßÚÛ.ìÚ¼ ìnooOOMŒŽßûôƒÍa _¤}Í]?‘¡" 1@ü¾èé¹€gvˆ øÏõ܆V„À?‡‰©Sb”TX\Vj÷úÇ!-ƒP@ôà?NDEäi\/•gæb€xÛ;®cÀ»¤2˜wX7þ§§·2lÿ.ÃÁ›è㾡çÇR6ðÜ4 ÑèèЙêà·`,(,îìö+¥ÊT€0(UŠ®üÐ –›œ–¬÷ ë½­ÝýâÁA©´_,ÖjEE½ˆÊ•ÃjÅ:ºÂBlw±R$ w »S)iàîÞÁnË®V³½s\ë¿$Àù÷÷S®opÀçÎ"ÀŽž*nN7›®RðïGN¤»@p9ÐÑ +`€ÚˆÜèd?@0.ü_Ê›+C+ùÏr÷{úîßÏZÚ +à—_6_½yózuuåÏ^þs꼌üM`ŒZ¤Кì§%ìgv°ß¥¬qühŒWŽÌáÇ Ÿ=Zú¾yíµ¼—#¢ÔlÈ ¹Mÿ›1Ž>YH€f ¥"ï­~•T¨­Ý½ÂþU}ow(`krrbxøî÷w¼y Þgí¡[Ž!¸ÕÆÿ—·T ~:q„ì‰ÿø5^Úd +Àÿ<Š}¢ñ$Îg‰D‘K ÐcŸEßN +`sü ÿqò™÷Ä?Ö…ÿÂôÛo¦§uë¿ÓÎÏðøY€ê„ýŸÂ6á½ Û@q‡ ¿-Ç cÎ_¡„âîØ8E7a3í7S;8ç¢ Š±JÈþ>±}­Š@Làøá‚a„ÓÕk¦ù$’Âå[`çí'S[Ðüô6güwÈ>³K +@0Ы'{g§­@âÃ&•îËeׂ@Jføà—݃Ýéé±I$޴ͽÓYÇí’ˆ~k‹ó†ÀbÌÁ€×¦ z‰æÒ 0^Yã|`Óÿ9>:;ŸåºZ.÷èÎð…ˆfçþ82ðGÑø_ý)›ðçW/66Cá÷õô|u¿o`dÅž€ÀË €¿™Ü$H@8.Ø¡ÁŽäîÏ `Eó_ðOñ=Âeˆ¿dðò• + Á=î}’^`)3p…E…ÖúÄFÞŠœ@èÝf ÀÿâìØXBþOÝY€Œ\fbjzK¿_,ÿ´X< 6ÅÚó[SoÇF‡ýÝ€Ÿ?·üã·‰hñßd™“ÿhj€,üOoàßš;Ø#¥ÄX´ûDú‹ÍroG7€W^€Œ•ã\¼Zpýêl]‘dF- ¢É>QM Àé3wY7þuÿÊý÷Þ\(Bb>Nn8qvâÈàôè·££ÒÞÖô¤‹þM>±ÆÔ „Lòm¿%.´Óßݹ{—B4ˆMCÛÛÓ²Æî.ôAEÛ+ $" J¼†Î¡€=˜AF@ö³¯Éymõ™œ˜˜ŸkÚe`À `Ù5˧@Ù±gà߇¤"ø_QY?€¿Ó +`Ÿ¶®±ÜÏÌ«fD÷Éu¯®¾nÎj °ùÒYB’èûj„ü,¼Y€?/¯x(`…»Çx E°¢â9€¸LÉfç¹Säß³½½+@rûÉá·ï}"%¼oú5ÐAœ­/Kg7hfŽðEÛ'hâÿr`ôÑpŒ.ßšÞÛŇ ?Ë6*ûT‰ˆ{±%pôѽôÂüùÜlu³¡(¢€N ¿'~¶†0èïòÿ¼?C…é‹1æi†n&v¢ +¶þÍ Oã÷R‘öS¸O¢:§Å){Ú!@ À_h€+áß ïd¼˜þ}fkß<@Ìtv|q½ļÆ[ìpv)ÔK;Fgýš˜´½?B³´ ®zòÞgŸÝ¹c"pxìÑèäÑÙÔÖäô–ª·¶‰ß + v"¶§P‘¨üøC]L¿åwpÌÉqÁ˜õ@iH…Hv•È’€(ÊÆòÑg'äÍîIÀü¿OpݯP=ÑXÐÌtµ|d,g7 lvN &#Ø„䀗¯6_¾|©Xi…(€¼\Zùå׿ÙàÍÀŸ¥aï} ?È€çÖ¯…ÅK9Я}€öøÛâ þ[ cMÌó/1Â÷,ªsf¶$ДTxáàÆ,G»ŒLü÷€—Ȳ`*Ú¤ÕÉ § â,—+€¿PÞWSî~ƒzbG€»'€(g8;’XD‘ hýôFXŠTMÿïûüåúçüß" 5Ê¿€m¢¯OÀ~ìÆò8ßa¿¦ÓêP­6€Ìp?ý}R€j€ ã—¬ÿ—â\‘ï§ê×íö+¦\àÅÑyÚrz ?p«Õ‹`rjê­h×ý }ûb@Ü䂉±;Ÿ|öÉgw¾¸g9F2p|b’¿éoøÀ[v'xˆ º¯£7I ÉÓȹí)\þ˜cb ¹™pà'§9HË®Êàh› +@oKÐVp¬µ0Åœ-ð¿œ¸Þøp+À¥Àü2{Nµ `åÇ7›ˆÿ°Í—›?#VV7T}¶4€$Àæ+5Xÿ³¨çN ÀC4À¹#øÖ*˜L•ìJØClmML̵ñï•iºý„ùÖC"‚¬¦¶-ƒ~2AÞè ‚ǵf ðð¤‡Î,*r|âÉõ7ï¯mK.•«¶#•K€½]*Ì4?nôï(QgI£Éùi)?¥ÍéWgpëvøÿô>ÿMp˜?W‰b­©,ó˜ŸÐÚ½¾ÕÜS#@¦œ¾8˜$S™õ÷f ¿dÝþPÆz<ÓOŸünKÓÿØàì‰@Pÿ1#h¨€³ó‹‹ìlGuÇôVl¤¯Vªö¬ÔÌåO ËÚŽÊþÌ Z?½s'M×@y†ÛŽhÀ9B¶¶¡·[»o  ¤ +4bTA!NMÃ"ÒzÎÞßýâ³O>Þ¯Uëõj­^!òKö{îÚ"×7`±e +àýV€o/5^hjçÚ­ @(¡æf“³ÿ+«o@t¸ìçW€ÈänßÐT+mð·È¼z±ÄY€GnM ûHYàõo1š-C}ÛÀÿ¾øÇ¬nQ#ùÄÜ·þD]í°¨Ì-3èLt„£Ñ´§…Àû·B€Ž,€¯Ià]\}Ì*þ‹€¿V*‰K%5ã.õ~rlôá#!*rUmùfÀ(€×Á +øØÚ45@ÿß«‚s¬ëÿUÿ|&¿åþµØ€ùÆïµ4ü±õ6Šh=a? ÿß^•€zFísHbúûü»ñoø °©ÉÉ'¼ÿ¾áïC8€}x}†Ï¿8¿0pγH žE÷ AX=½<¾8=©o?AêkÓ'ï~òé§ÎÖüŽÂ ÇRó""pÇ©é'„ö”î~'`ªM€|1© 3˜ðãÓvwþð¨’T’JöwrItäTl 0”)*@êìAy-Â#k³9¼&bš¦Ì,Ý/¿´1@Í>oPbáʇôX_[XË÷P%„|/oŠxް¦ÿÖ» à}?ß@øŽÓ^^q„_pÀO/_½D ¬l¬>ëëéëëS¬, $øÀÿg +@¥ï1|"I,"‚å.`0ŠF |kï1@þƒR•ô‹Z“pßúK駱ڲ øM Ù‘h†Fràù$ƒ?6AÜ6µ úa]øç½6pqšÐa™ðº´-Pß²þ¾Ë +€¿¶†´‹TN—ûId €j~ø!8ùÍ–]}÷ ¾Z*–«ÅZ‰§øç—&(ììîêñÆFï}ñQþÁÁ^~¾Z§€×³a ±±mý@²?û™¾¶®8‡à_ožáŸ‹Ñòÿÿ`“88/fU +ã[`†D + "€¶˜µ PêðA÷߉ÿføÏ?áóÔã'OìO÷»ìôô?åO8c*~$ä3ÿ^ÄÜül‰í®ÄËè3à6WîóÚ”èŸ|2ùø AþNa{çƒ~°ö$,ð2Þ?Pûzó—–ЂV–P÷@++Ï‚ø[zŽÿÅþ¯~Š ,;Nç£ øÿäØ  øÊÀuãŸÒ™JuRp$ìƒøÎ¿DÝ=3à·-p0Ç;­$€!aôîë’0€¨ÿï‘ *Ám‚Žñù!ÜÄñ—•ž<”\uá8916|ïcÃMÙµ@>çò&m Àe +ˆþ?­í–`€«…ÿj,q@–ÈÜ~4¸eèÿV/‡†çh+#€L„9˜=ëPÈ@~Ùºüþƒ <žJ9þßah1ï¬@™Ê·IP<ÖÈf6èÿ ö ðæb÷ás ÓÆÇÚäC£º ‹oúíÞ.î-¥¸å˜À‚+Je{#çˆä +år¹Ò0°«©)âp¹Ô`¥°·=9qoP—œ¦Q‡Z+À½JkïœÓ/Ÿëíשk3.Liþ-G¸>3è’P31Ô²#ÚŸu‚^M'|‰Õs?À毛¿þ²¹Ú1™x$ö2Azàïî_ü!)€N0ݤQ¾}þLÝM Ü ´­©Ru Ë@ßi\눬ÐóÙº—.I€è `À?"àoNN~ßíÀN¡`dX®×¢ã8JÀÜ3qb0€Y£‰‰G?ª0õ`8fX:hç¨m [‰2ëÄ?eçZ€1Ù$iúÿlÌZþ?/_D?@¼Š.?åâš…Ðÿ¯q^®Tœª³£‚R›ú{·3„¿oøo‡ÿ[„ÿÁ““_Ü ÔüëƒóøÀ1D€/ŽAl8½8tÂ@—2-„`C!ÜàžG¾]™‡¿¿A¾©àv÷öö))(€R¬×Gõ“cžœžžqöÏ€ûÅ!€GäŒ<…œ" ZØ{;9öp¢§‡ ’]3¨ú^úÍʬ¸{<4òL›‰>yê…ííUºQs³1¥}~æŠ^¨þy™@Ê8Õ[L‘>ø¬ù0Jš­#*Þ!s„×oøÙÜàSgаƒM +X®÷Ö­N"œÔEŽÈÒñnvÍÅ$³SäFðàéÖT¡~~µñêç — ê½ÿU_„#‘„^,­üí×ç¯þ† øs†þÌšèOØ÷éZS|( 6þ#9蟺{—vøž´þZÀkœ,ûQ];€y}¡/þ‰.Ic€f€]O>Ú¼R.–‹U@_uþDÀ¡#ÒªegŒ,¢öö¶øM†ï}¸@`0® ·­ožÁÁ0€~Vÿùñ +èx­| üóÛÛøkàçÂk·áþ1ƒ à§$@s$€É#k_f† +ÀaÏÈ/[ÿ]áòÿ(€;w~7èæÃ™@õ¼’ßÖÁ³‹@º‹5®â8ƒÔû¸a|®ƒÿôIDAT·ïë¸ÍrˆÓ£ò|>>þJ2¡OõÚ-Á9`½tTu:0nè†CP~òÛ‘ +„ÏA&qZÔˆ’4{µrp°=59:Ua× œäþ±kr°ðl%¬¹´àX Xp鉗<†T ÿ‰ýQoÙ ovçI|6PëÒ0²Y¤óÚô¼{¨×Çbx‡xÔl€“Ž"ßÙ.JsþÆûN ++0 ãj¹r +ööö¨%Žú°î™O@ +È/:é^}˜?w‰€øu¾‚9t6k‘^[z¿iž!³ì“içËG} †¦ÀJg2h6øÀ?ðÇ>Àþ¿3üÏðÿ…¹÷Lâÿ=3½“'@ãƒ.#œ\8ë÷ù陫‡±÷ïùä +›x­[؃ª%ÇûHN xÈÑ!Žäd¿þ €ó P“¦Û@Ò´kqÑ´^.*%…ÊUÖâ,N>]X0wŸ3ŸÒÛÛ‡˜§Ü¸Ü”;EŠ}žŸò…¬Ñ\z +‹côǽÐÿ|Èiàø@oÏ-€ëMrP?b]p˜‰,"ܺõ¥êß…I   ù}©˜cŒbüVÇ <[…²~@Ms½À‘¾Ô ¸²:›)€_^/­lþ²ðæÏvðöàÁW_ñèèbçùêA[`MÐÅð2€u'áŸ7:ý?ûK¨.Mp@Óš Ý0C|·ÅX0îT‘×oJ€f7ÿ–°!`<À#{ý© V,DãÐn õR­æúóˆÈªSÓ”1„l·PØ-ìmOOŒÝûâÿ–Áý=s`I„nj~<`B¸Å4ŸâþmóÉðï]øOé€?LÛ°ÅEÅ¿ÖlŒ¡4áÿ^0“› øcÛÛ1æ®ÛÚøßê +ÿ3 ü± á7a+$Þ¨ú”ïK `ó‘Q@‡øŒÙå粨ÕTÇI4\TÌu@8SÀ;M8l@‡¸šR†EÇ/hð¬ ÏÆü_3O€b4-00×»[âðAìi~€X5?;?gÇîù™œud6À?hwA¶ÆrDfý½_ª¾ÿˆ «Gà¤ÌÂFÈYX³9’ àWšjV«°Ï?ÿüöÍÏnß~°üSŒÿ5ó˜0ÔÓgÀÁ@99°¹´ò+!€³‚¬¸*€·ûD +Â>À ÄÆ2üc™èb€ÉDS“"^A0IÐØŒÿÇÿ¡>½óÙg-¼g¾øÅ¾ÿ(€€{šÎ'úö þÛ›:³IÀã“ß¼uܧ³¿”M—ËDýUð~|DÔߨ;—œ¬`³³Ý‹…݃];|0 È—4s @ôÚ@QoG}À‚x£|Ñtÿ<ÿ&8€ïjîýÇ2ˈ# hEàÄfë« +à¤mÐjx:c1|Œ:ðßþOeþ?ÀÄ?nÇ*€ŽàìÄÙÁUð¦8ëVªƒÀø@¹­ €*€£+@gÍ ½Hl`²~° lÊçjêåçuùVeÀ93ùÎûj% €ç!> Ø%è#€},³~œ|0àúµk·üp§dc Â#SGfzn fLJÌÎ.<å¾'ÂãPñ½(ìóÕ4ÅG¬ˆAöêþ‘L~–¾WŒÀ?ŽÜ磙èËÀW÷ûô¹©ï«ûeðÇrÆM +€" ˜Euûdªíÿ3ü«>ý,Yü¾æ_°O$ú1>›á½ÛÆ'²Ì>ÕAì' ‚€+%ðÑÖ[*ÌSÆý—kàÿð¸Þh4ªÔ¿lâx'’2ˆ6B©x°³µ»5õd|ìч'‰¶ý…0 +°ÆPÒA*8‹%D@B­f)ÅCrÿÔ’ðÿé-SÅ>ËPÞ-ÿ3ükÑÿqm­ÙÀMž9À ¥:¢°É&ÀÝÐ…ÿVøo!fþÿVgÀ}‡°yÿJð3p…(^¥Z9; uåþ®Àµ÷÷ 2‘KÕäº.®Kèiö–ùõ¿.PÜx_®êü`O?œÏ.ƒ |vxëÜ4Ð*@![:™‚ˆ®¼1;.'àHƒó3‰œòKçøÒð¿Ÿøƒ³ÎÌqHx@šqF¹/=SJó% ‰Í 4-ÕLg½¿üˆo™ã|W–Ÿ-å T«&ÿ“x¶ò˯³¿üºÚ“&¿øŠPá>ÐïCd<íd€„ÿ.ÐïOŒÞùä“/9à’MáÿÇÆ2üÿáŸ6ñÿÙg¸l~iXSþ¥‡»{M ˜GD?11ŠªG×ÇüÞ™ˆV~qß–ŒMÀ>ÖôÝ Ox{¯V]&¡ÂmP%\.¢qrR¯:?4ÊÀ1ÁŽ(ó׌=ú`3  LÍü îdûd™°i¶ƒ:À˦À¸ÿ ÿÙv~?\Ѷwmü7Äám-o¦š:íÀ6{dÊ£#Hà›œ¸šZøÇõëýSø?õäIøÿðýA_<Ê0þqÀï+À}I\Êœ_œ}þ¸Cw*€ÃÃã¿§ýE:»@Œg­”æçÿ:ˆ°§n–žRü½¹¹ÙwV]8`nvQöÍÍHVèTÈ8ž@óâw¬÷8bÐ2“(="€\`¯Ç%å{{“¦›™ql_›1øòVnfVâd^0×;˜Ï¿{Ÿ´›#?‚ø–EgÞgÏFðç†Ë«„þ-`&póו›Ù‡1~ÀÞ[èð`u0Àgm¸×ɾà·|r/ÜN…ÿkúÿ?|Òÿ°äú±¡&þíò1>žÁ?†ñH0Ò ÀÆ;%@0@—P!“ÓÎ3qp°çw Yë FuqÕHàäð¸&8}t½V©•*1qxØÝÞšœx4üðÎÕ«^˼tÒm ¨ñŽH ùšuè ês¡Úøg¯Ù9›xînü¿‡ÿøøÓ™´Jb2]A|Þ*‘ Cèÿ¿ì‰ÅPûɺ4@)0uá_ ñg×?¢¸ÇO&“ï÷þÞðï%Ï_·8ù@s¹FsÉ„ÏŃ5Š…ƒƒ¢üTJ•b­ÅÛé·V†Ék§ 7˜C!ðç,ìTÜý÷½ªOÏ ŠXð$[0 C?Á6Å‚/Í=!ÀìÚP/E:8cç€EúhÍ]ŸíÉÙj /îÏ-„ÿ'´·ô© ù¹¨ É3ä8èÂÓ"u ¨¨ ¹þ €[6!D7ÑìÔöÅ•Æzoõ¨5æ×ÖÿÅ\©H¸CX_S!d–ª¦vsd¥£QùÙòÒòòÒÒÈþ?r««KÍÀ3°ÿj ° \ý×ðÜÏÀý1Òþx þc +OîŒfùÿ‰ñ«ðo­LæQGGe„þqn“ÿûÿä ]ÀV@¾ÎôîînÉ>åJ‘šQ©ã&êueõðÔõ( 66LÔŽœ9Ö °¿ë¬€(›€4e¯h3€egÏŒÄÔ”GŸ'sÄg;ÿŸmÿæìäˆ=yw…ÿkùlqM©[ÃtNkœ¯èþ^änÀÅ· Q@ÿ ä'xb×?þ?EÿP€<û»àê@¦RR*f¬Þ\Zqfªï©/‘­¯Â$á/ 7'§>I€n¨%€zF ʱ 5ÔjZ©Z(îîì'€\OÀ>_­½6èiFqi£[óÏõWç׿zy:øt ~;?c‡/b´¹ÞÜüìºB±0Ÿ«\úù^qmî?ÏÍÏâ¶ó„Æký‘é3ôWPøHŸpýK›s9ÁO±ÎÎq¿;ôÞúRªY[{7ïÐÄÉüâ'_Ë¿[¤Ú4-«›ØM`?0­y1M`´°)žÓpÀ¥´"XR›KK›¿.ßÿ˜k ă7@0@DÞÚÐÁ ­š çŸÜ5þ'&héÿ+ñøµGvÝ ðkH€±H€&Ú;$@ +º$ÀøÄä7SÓ®!W(” üy¶D5Àÿ‚w(à­èìñ±áø¨lˆX¯ÀÀao ¨|8€ŸÏ:PWôw0@JX}@¶MDA™c—T†Yþß þÙ@ìæ;ð/šÓ'ùǵš@MõóŽÿl‹@V¾äª@°é:gè×.1@ÂëÆ?P3£“uÿL¾ß{'Uú]œ\°MID ƒ¿}T^Qó††6^½‚`ƒŸ7^¼H°ù2ÁNÜR…–èV´Àn§à¡­4 Ê-,¡ì®S¤ƒ@~pÖᆘ)þžþü ¯‰Ô:Ÿè~6òºYøä!IÐßOYÊ÷MÄëíÕåÚ5ÀÀ2uN˜Aל ¦Iˆ¢ÅuÇ‚û½žüžÁüïÖ¨cMKuS»~ÿ÷?Ç„»3ŒŒ ¹>¨k®¬:`ððC“„ÿ•F@Étˆ€Ï>Ë-P¯°˜@Õü_®}òÅö{ñò59`Ò™š2ü¿'.gøJllKLjnMmíî:Y\©pP+7ê —ªºÒdäŠÔÿ®H äA>ž?f§®ëu*R¡LÝŠ~c\ĘDz£„Bd €½ù@ÙËÿ@±öÔÙB@{ÄÿiSþ£­ß5icÚ?-á_»ÿ2@Z‘:- €ˆ“Ä¥ó +qUøOàS«u2€=„ÿ¼y‡þŸŠÖ¿L$üÿøp+@†~ìå†íÐIdÐV/73üÿÿUü{S@'ü]R©Ðì ¨Q°†t ø‡}:8ÎðÿIÿQ'“eàÇ’ûw4§€«ÿ ˆî}Ý €šé‡OLooïP©K…š]~«Ö|»¸¯z›‰çujéq޵e Q‰ì’‰¢©é'®˜ýšK¶¨4z¤ `Ÿ  %: ™˜Ø + ÿ¼øîÖü¿½ÀèMüc¸€–ü“ñNTYÜä=•—í!·Œ´ ýÕÁæ<þ-ü5vAÀÉù{w¯‰ÿßAÀ äówYdà×¢¦ÂëD@¿S”ëT캤vT€B:<ûçï€W2ò]Œ¾8@Þ–?°%Hÿ†×q8œp~~«Ä)t Àf@ÊÐ:b¥ÂÁ"zXÁŒ_?>=ÚúÍåÏôX©zz¤‚õCôà TÛó(€#6" ©ÀÁÞ\hÀ(ò¸5Ã÷ë„«ª~!-܉€ˆôÝ¿}¿oàÙòêëŸ~ú))GJ?Þþ8D´®}4œ@7<žhM  °éÞ?‚ÿd|LŒ¾—€•d%À£‰‰'·¶·öö÷ØcâÏäëÅ™s‚¸?AðóŸf¦§¦×Ù£Zo4JÔb†ÒÞö–9€±Ñôˆ¶ÿ–*‰2€ÀË$0ÞI1@0€Öjÿ‹W¾-þï<¥Ì[þ¿…˜Ãœs~,A_‹ï‘- ½rƒ‚TðcÜG` àO ¦ÇlM;}–;ð¯ëŸR4?ò?âÿdÌ?bÆðï+€“ ûÉ^§ÀÀßQ„ÿ +À ï=°Û©(ûK + Àÿ=øçò[ýº˜ÍcVa£__ÿËü_’´Ã…Ïô×µÙu[ƒþ•1¿ ŸÓÿ;•0P]œ[Ì-Îç×Ö# +.®Sy” ¡n¹Vt/”"ü© +€9@^ôÜê½uãËAÄÇ;û$À lG,òE©X™5áo`Ù¼÷oÞ¾}Ãõ‚‚úB|Þã²!«?müòëæs àûï7Ýø¨¯Áqw%Œ=ºó‡Oþ·$œMûúÑâßvúÌöúƒ>&Àú% `A àdŸSÓ[{NöW¨ñW‰ +«5[†Àú±kÑ!ú«SAëÇ._?ŠžäRC P++åƒbÁ!¡µXE¢ˆÂH8À› É‰BÈðƒMøwáßüõèÿHLÔƒâ?醸ñ™`Š Я5À½‡w³4Àe 0.LO™,MÎ5á¤eáþ3ÐöÿX†òØ•9€ ø™5ÀÐßɸœÓxÀ?fÞFÄx@"—"ÊűÀ…"º­X®”{µæAp9ʯT«R(es@åÂ>4êµÊñI½zTmÔÍ ¢ý° à…ÿ¿wNô×wQÑÔbÿ`<ïúú¿.þ5JuþéS ›Ëç×çÖÀ)¥îÀ`“({±¿¶H‘,.®S-\T`pm‘zb07ã¸x%º ðü7¨U×oô[ðê¦ Ý›ƒ…ÍÜRü•"Î/ÌâuìØ;]x?³¨›Aׯ5²ºüÌýÂúF’@·?·på5þ?À +°±´ôê×7U© +e + ›²^ÁŸÜ¹óé'²O¢€O>ù¯Ÿ~Æ–nüßMÇÑÚøñ™H“Nö@­k20oK€÷û`XvjúíöÓÁ]+aúk€w( ÞP™‚u>ÿ‡3 àðèøX¨Qbõ¨B©XØÙ³àÃI@ð·k!’@¡å)px@hižS6@YÏ©ýÏýµÀ¿µ,ð?çøîÅ4;¸ÝÊ3Ñà)Ì7- ß! @í‹K‘Ì :À‹$€Mòcã`ý!â~Œ øÇõÛýç³$þ;ÃÿÌ2˜Ø®ÊdÀoø i¢àÕ÷/ºZ^nfõë `”^—¨v ZpÿØÁ¾Í»ÎPp|§ëÅâ@°xÃI«åz­êRÃ<õr¥æ"‚0Gi_šwv BjôMvËö5\¯Ë´-.þ°3€ð?=ôò¸àÁuŠT ïí# ÿ7öw¦ ü:)Ð`nŠ–½xžù€^€ªáx¿4x`ßÍ;·oþÚõ~>ïHc+Šð‡"˜ÈÝêÿòVï,ÿ ßÇ1I‹|jŽQ3Æ0Ü”vX €oHâÿöíû###+«*€_[ð‹!ÀG,ó"™p~V@Ÿ}öi0€½|µÿúɵÿíÚáþ:/7ô{ñÿ8€ßüÿ˜ pIðÆžPÁ·v÷ œ`v¤x=|OÂù£þÎÎÎü1|€þªÎŸ¨À¹b\GºXuª‚S‚Á@£ï iÞ3ªˆ"]‚¶xžT,pÙ¥xžðq€Í;-üShmüóT™Gqr߉¬CÿÇ’eàýaF)¨L¤òk3@h€?O j‹Ã¥â¦Òú¡>˲áf+++Ò¯6 ör Ã}Ë~ÞxùŠš—zþrs3f±ûyã9¬ m¾Ìª×.ßIß0Àa€«üìì¹Hø~©@Äï È>”ÿ!ο¡ú+Wb©Ñz€j5Gz:U8ÄÞ®¡дkü Xš˜B“çó <Ÿïyùõ¿¬Î#õUçX¿¹ù¹¼íö|„G! þ‰Ú(ù……§OÙ-xmÇüöôô8ÈæÇðòVÔ«ë=P‡“ð^Ž +ÀûŸËõÄBrùÁÞÞ5TJ•9É÷Šé 2ó‰®_»¹lGàåe +@_Ü¿ßs›{Àêꛟ¸â¿üúëJJnüºøÉ+oºÛ¨D™èb€þ'ñô4ŒWŸÂ Z†ÿ»müG?Ýd©Úâó'½o@3 pµ°?`·Åû¿%BÜ; Š·´íôsŒâ?ŠF?›ùœ2"jæ:Àž ¾ËÕ+Ñ4PŠû¥2U+B€±GÃW*€èíG€-j`Nˆˆ˜ßš›íÔr~â¤5A•.éÿlêÜùáEbLj®Ä¿ýÐ[ÖÄD€=¼WÞâàÈ“?ýÅûÙ]tE¤­óçïøÏ@gøŸ,ú—~„ŽßÏd°oÛË—?Ûþ?04ô|có— àÊuÎÉ@d÷ééí"€½ÂÞž +€`Ÿ ì¤®Ä°÷1ïÏa¥á¢ 5jA¤ëåªK–Ë¡°ÒþþÁÎÜ?&¯dÒ×)¸^çx Œ oC±§¦{ÁÚŸ‹u—ûy"fÙ;ÅÁ;Ùþ<‚÷Þœ£~‚,ÜÜÿwe0í–ŠðÙ™ Â…ž˜¿¥çö—ý=·`‡Þ Àsô9¾Rœ›ÓÚ…CV ÄP—û\]þüÆMGA7oÞ¸™Ú7^üúë‹•_}¹´´òëjGOÀ÷,­ªÖf€‡MçÜÅp7ïwÞ¾wç‹Ï>·~þ]ÈG[€/› 1Ÿé”ÎôÕ–>JÝþ¢×Ÿ“Kƒÿ*Õàð¨~bÒßùe°Æ±óÍž œ!üÝ„289:'þ¯8 Aé$ÁASH€+[¨&I¥…ÀB ÎÍ}èìÒÖ¦@¿Wã¿ý4ªFæÿE¿Ôrþ­-Sþ7-C© ) +¥yíÑú Æ}víûäÚ®}6³æ‡ÿ×ùOMÞ¡43ðžÿo€–!þ’ɳÝ9€ õ†ØüõåÈàЀ}R^m¼zùêç++/ƒ:À=j _Ʋƒ2!À¶à +  ˆÊ.%\¬ÔŠ¥Š#ªÅ4»x­rX+£ê5A ¨V!‹{áb‡Òþ3…¦[«0L‡9˜Ã ¬9œºOŒåÍj2}7orGmÀŒfúc}D;›JÀf‚ðÍ‘ýL4Çs]€ë7’0àn_ãô{n¹º»+Jݸqãú­/¿D?ôçzœÜUíõ™üƒžþéOÀ5N°¼<00ð@Šá$œåþƒ‘•£€xñQˆzÕÔ‘W0wÚöá˜t×3ÿã£÷dßKðÿ8þ%€I±/üí ø±,@ +šàÑøÄ“­·Ñžå˜ç÷´o:¿n¢ÏÁ!§Ç +S;…Ûñôøèäüüè óÅÖP +‡‡V›ryßÑ€»¸Â±á{_dW Ópþö†Ðà&ˆ)ÌH`N†Ð:5@b€DQ­´Kþ?3߀å[;‚ÿ¶ÿO³„uúàßAï'º4Át¢€ñá;Foþáë‡[þß¾ÿŸ…ö×ý¿ïÿ; @ËPßi—sù.{‰Ø “^â^©^þ¤m¼IUë‹/" 81“#¶v"pa_'w‹y‹û•jÙ5@ÍüWJ1Í‹]» ýÍò5j¦vª…(÷/•¨&([|ºrmãšzýåöÞY;ðQ$XuwvçÃ@_zðIÞ´ mPöïõ~2þ98íÿ2}@­ Ž…ï—ׯrãálh0Ø/î=A·¾äMHðã ù¶*úŒÿ\.zðµ@¬êz@1ÕßÈíë7ðÿׯ_G<[Ùx½al¸8ès s,ÀeKõ*#€NH€·Ðî™­ÝÚÙÞÚÙÚ~ûvzü^Ô¡&ü[øOãô’¥k±ÎCÒÉ>*&LÊ£ÎöùxÊ?ØÜ,pý£ïuþ1:Tm~çÔÍ#ë$Ž¿~ͶÙXLX©:l¸t°¿÷vpuG »ìÌ›ôÏç×zò=B¬ÉßÂÝ ÿ¼n¾ã©oI)ÙŽ|°íÿ×;ðßéÿÿЄPd LŽìŸüW5w&šþ¿Ù÷/²WøÿË eÀoÚ¥@Â|·ýü3¡´8?¥KؽzùbåÅFÀæOÖ þS¦8hgo{7ÖÞuÑOz©€üçÄCá9váúyIpvpØE¢…bà—$ ž°wfmÑ£{/1÷L ÷³$æm˜ïuVÏ(Ò˜’½ùC ¸ úðIÎEñ +XÏ—½i,<{zìéÅÁãä%€'ëÑÍǺ~öá×læ.>w+æ›B„;$ká¿E˜€yÐ700r_}p?"€7„¿ 6\peiã×S"âJ˪USd]‚LD]ù⋇ø‡ßø‡†žxtW°*Y’é“À?σ&SIžXÿ¢_’Nù‡gà›Øïgï`ß–?ó<@¿f‹íÐv?sþNíÿé!Ÿ6žëûOOϳAøè°~rÒ8<¬5‹@&T±éé‰Ñ+ À²^¤R¤0 ÓÑ¢ àðX§HíµmèÄ—ÿ§š¡£ò©«ý¿3´,á¿‹.%’èb€ééÑ»¨³Œ°Ïî^i/Ö1<ÀËH€ø[áä'HKøïõM?æg<¸·h¯KvíÆêæëìJol,¯<²gЃ›×®ß|`#Àë ®(€U àû*€¬Raö¶Ó:`˜Rúâî÷îÞ›0ßÙÛÚÞÙÝÛÛž½Ì +2}ΔîÕø`ò±™ÀL|TüiB 01 Dƒ®íQŽxÏV}þÌïw}üyøóQpzúÛ!õ’7Î'¿ d‚ÁãJåÀVœä8‘Æý¢Üe€  žˆU*I`‘X]ЩR—­«ð½Ã|üëi±AoÊ!ºG˜£=¥Ž¦eàÇ®]»±ü·—¯7Qú˜QÀ’cFnß¼qûA(.~ä6V¸S¼þp3`V§0—dèd€H4áb €ÝýÈÒìËScﺬ³íP-üú~,;f¶%K hf®–ãÙ:áÍQÆEå£Þ(ƒã@<ÊàäÔ‡è}@ï²ôÔMH἟œÖØšZ +¸Ù‰¬jª¨r°ë¼àOP_\ÑЂo1(Dõãh X—º5€ÙäŒ:@?Øž÷Ûwpÿ³ƒ?,";þ›íÿÎ6”Ù`GüŸ¡“0;,« + 4@›ÆîðÏ>»óé§Ÿ~vç³O…ý{…øÿ„ÿ+ýÿØXÂû{&`ÏŸ/-= ߨXêZÉžvÛϯMþmyÀ®€›/^llÄ?ÇB­V€»ÃÄãÑxrzú›íí·»[{»…ý]9 P,š(󬿬îµJÙ´µ$—7 þíÞMX=ê®y‚À=@õ(9ÿ0xDÙHºñ|v~0?Ó?gF±ˆx<=r/rÉÝg–ìëQ|¹~wLoÆ$¡b¸ööÎø^D'ËÐlXNŸGÁï@h‘틼Co.÷µŸè'ìÏÀ¤Ofè×®ýÁi¿76^¾ñbs]Ÿ<°@j~C@[ù~eó#ЮYã­0 ÍI8Mçä´Ù³Ý½Ý}'Õšp57÷7U¯ñ±÷ñŸ½Êð?i€¤Z ÀStfÆFÇ8ï·_)Õ{þatø=>6¹ºñò¼ü B@ªý¡ *ˆøà¨~ŸP7ÔŽÍá +ûÐØÖcç¸û~ð?˜Àæ€ô¡¹eHž›²)Ø¥(K+ÙŽïùêÙì ôà;ýÿBš{DãQAÃöø,] Є}ÑÄÓ÷îÜåeÀÝÎ( 2ùáÿÓÒ[Wãÿc@]{þüù÷KÏ4K½C>¼o/7žmü í™Þ¼ÀõGEÝxùóÏf#¹„ñ-¨)6¶¼u˜Ç1Ú~Þ?(Šêÿb±° ì©Ô'~1TEúS%ˆjU~£!þÇô/ Msˆ7fAÌy3Öô½î¶„5¤—…˜€–“`uÓp +vƒ +$‡ÜÌS^õö~=c0 ÞãAg~+Òwš·i¡¿¿çËÐù‚[Éo^‡H8Ôœ¿³‡Øö¨ØÈ‚&hø1øFg½R8PÀ€c¢#àk#Àæ +4°òýóc@ÂUÖ]³$êBb—p 0(Ã[ÿã 2ðcöµw¦2ÀpH€ˆ‚®¶y—?ýqyïEÊ&kÿÝþm‘™ÇMxÏr·/) À¹¯^q[‰…é—†¾7x©X^Ù—µÑN†jDL¢½`ö¯ììÎcC`ÙΛö6ûWÖÝWj‡•ú¡ó¾î7b@P½q¤Ó¯ò£{õ%õÎìZÌôwÏþUv–H¯%a×@½p¿ +€ØÀ¿05]úƒZøBO + ìêÿÒÒvȯoóÜÌÀ—éX< m¨]1>!š{î¡ûgr=!‰dNnº_Ô{hq´ÑIׯÝ\ùåçM +€K ld + FŽ„ˆ@ð<’€K/W?¨¬Xíš5aë›F½¢Nˆè{cS[;ûû.¹ïHÜÝ© u‚šó»ñßÑø 061:ñø«‚sÃaöô@ò!æÊàó”HôèäüØì¿9ÿ 7¢úÃpκP ÇÇG'<ªÖÊ¥b©\,îïmïØh˜&»m£^¤"i2@옥­òWk€yÀñOU4…¸•Žš–àß…ÿŽø?þö—P^±‹ 6ì|ˆ`õýC$Ù=ö£Ñ‡ +:I¨ðãþ»üÿ%üÿ}ð¼SPß.ß6Vp=*€ÜÐÒæÏÿ¡~Šf€W þ~“€Ðý“ »íììî퀥T²E¿X²¥_a_ª–à[t%ŒjQÃë×k.cb–·“0€çß¡-»&ìøc¹]žšp Àlæ)o±,˜Ký;ã?Þ ½N’€Oph~î²E#ùom$œëð!|ºŽŸ¨Ÿóx.÷ÌõJCƒ³kìŽ|}r3sx …ÝEFp@GpíÚõå¿m¾\Y"º’VCöx8xõµ!øo*€¥¿CÝ+Dˆv¨ÖDÔ +6LLQ(û…ݽ¢$ðÍ0`Ì=Ûø÷!Ó†þ'[­­,@Æ!Fù'öW +Ë¥B¥†ô·¯‡Á|4ö‚ìãSxà,æ…uÞ©h—>½ ˆ”¯]¼òÌØÀ,£I!¼Já` 0)Ü{o]€^0@K„·Öd€–È·5Àâ\`? œw€þþ=r ÿXxñŸu²æÄ©´ úaïÖ×C\*¨6Øe‚k˜à.e=>ž­£=1Îç`ˆ!òâî*ÿŸŽù»sIß#ð;°ŸÝ†žá„–††–^m¸ÇÆêʳf Õè ûyóM'žL>&°‘IüÛ§×®€®è q«¥ÈÇÀã5¼¾‰`œ P9ûøý#ž±$AP­TKÕJ +hÚµ¦ëŸËÿ ü¹ÂÂÙÑyßNhŸµ/ßÒq\o¸ïÁEç±–x KëvûÁ‡§µ„¾vß™Y +È"{è‘æËÍô pìAŸw /z£¯Y~1£ü'îò œŠÀA½€t…7—Ùüy)·òX]Yyþÿþç÷ïßîy0²¼Ü¡b›/––6V>D©ZaYñ‹Í–nr¯ÑÉ­Ýýâ.’ 7Z(LOùÞ~Ü|ÿãð›ö8#OzIp¤±ñÉéíÝ ¾Ÿ²mÀö§Á½îÿ˜»hŠrbø£Ós_§h!ß;w·º‰v¶MP@Ý(AæÞôvtz? ˜°G[ÈÁ ëNÒ’¶¿§²Ö€ ЉÿËÜŠÿ³£!<×»ðolZ}ìß €–ø(„0üÈQ¶8Öf7Û©ñ±G‘<€.ügNËù¿ ÒäÔ ­¼Ù\Ê<Ï-™þcç•çIh~èÑONþÉ‘‹lïºÆ›Ó=ÙØ1”[ÕñÀ•r¹R/–JŽh¸J ~Þl€ý‚l + "ˆþAU¸^mà¸Á¦]£ÄžùǵÍ€y?Bç±8Þ™y]¼3r»Áòð6¸NéIp¸daíx73ûtÛtàË×½¨:=iC6j°çìåÏáMìq46øv(€¹˜ÄF>O‹ô&í!u "—H C¿†øusc)·Ä¥\%²Zy6òlÀQAvб@ +`céû—’a>3 €8úãO¦&¦&ÇžìJ©wV¡¸·÷vjr|œ‚“’§ëñàAâI²ËøÇ8‡gieZ @4ødz{û`ŸÈ¯$úë ÇùàÂA<¿ÕOOpÀ9ÎÏNÎŽbvÙ „ œÙH.8sɸSd CS+qYÙÔ!Ì÷€ŽdZÜ`€”ï`€¶ȇH‰€„~ìƒø÷?¸fþ/å>ó®ÿQêÙ{Ýø÷ ÐTf€Àµø·ÿ$WÝ^Áo··M­Mo}óØ(àáÝ» ÿÍþWàÿT$æÜÔ­0°üæÍ³¥gCR>iõyK´“€vâœvUžžÜšš~»µKìw°·{€»Ù?(íÙ +P:(9—ð‡L ÕËhtÄñ¤ ªUçDTêåC€†Ã“¡(®l +(ªzý®öB‰K o+À|tÃ4á/ E뺢 ': ¯9?ðÌìü»X9fÐ5ÿ9JF%€“¿%VaÅ*𣋯;är©‚ð[ägæÜMÀÖÙù^^Æ']–Hè›Oúa) <ÛxÍ•_^Žù8íçõA¯› °ù‚»ß¿²ü!hU¬­&6ǰÄl~fkjÊd·öeÉll¹X9Ø™–¦q1Äo*Ìÿü75gÍ$€A¬” |oïØþ[uFÿz-òNêÇgñ3¨éÎ6}zvrto?=?=>¿8S\¤õi¡ Û¨ëÄѵXETÊðI¹²_r j=üâòÚ€= Ég±Âù5ßf€à€À´&þS& ¥²wº‚5úºŒÿ™õà?æ¦Kþa€wëÊøÌÒõͬ…àè±a£ìCcþ±±'Û»öÛàŽgAµÁ'²Ï´ñŸMÎïÛ¼Ðaîé >êùÀÀêÆóþ»çßea5Ã?@É)'Ʀ£¯2_õßw¶ ¸·³·oO`[Š…Šé›P÷,×ÑûŽ Œ  ± !òãý‰ *&ñQúa×ð¶úg̓7ÄÞëvÁ¢X)nvÂÕëÃí*@¨æ@^#z]º`çOƒVô;!gž²»d0Ó;ë<îú +ßtúO?LùŠeÀ•™¹µ5(‰J @ÈÈégV=Ì„‰îÌxú,:Z/E?À•|ÿM;ßPØ š£`ƒû×KK$ИU«ñ¶pŽÃË““oßnm½žÚÚ=(@¿”A©XÙ?À­¸¢;Ü`ÇÓæg/ãü*ücqŽŽ, 0:ŠößFü©ûJ¢ä"óŽ÷W?=m˜ï;9¯+OÏÎO£K +Â_õÖMžÚÈÇ‹ú‰Cl'4z Æ(9®c¶ßº2Ðûjæz.QÄ&{íÐÁïi€@p6Ò,{£Ë(OëH4dIøŸYœ_Løþmü›Køç/ådmªÖº@÷®w›|»»»¯˜.€);n9¥’ý9®òÿÙ±´ñ‰ Ä—ì­+‘À–Ò²ÕÕ¡¾‘Õ7K}#Ë-X^Zz8÷ø¤ã=¦Élz{g{{¯ó!ʶÅ” ÅjÙN@ˆ€ZÂëÕÚá‘6ïá,bTС*Göàï4 rOè§@r +ôxêROÈ +iÑNÁÄä†ÜÿfãŠÞGnž%…@Ç)ãÓgðÛNe’Çî@¶—zƒt 9|¸ÀgxBètr‘ÁÙPÔ +Õ'ŸAd'䟣Ú·¨ -Ù|ƒZY]`‹£±8 Àw+ß¿üyà=ŒY½2 ÈpœìÚEÛ‚±°@¹ì²ÍóÁš7£·kÄGßÿíyWZìÎ9›`øÑÄôôÎÞ^LóoÐvèˆþÈ­Õœã TÛ¸§¸Wßg“=™ýCHgõzÄ'Gµ#סFóÔÑ\ÊîÞ[D.@ å³.ŸR0 ©Ð!Rk@àÿ*ù?‹ÿ'þÏ‘ðΟ…×BìQ2kãÿßþmý/ëïþ_†\­1@Æ2@¸ÿXoëíþãêí¹EYMMŽ/ m¥Ý¯Ä?43)œß·(yÓD +L6ÿVW¨oFr#+C9{ª¹zÅŽèDc…çĉ±ìî™ÿþ»Eè«T,T*…𫾗*Ñá•©þÃLTŽŒP€½êÕè\u–x[u³‰Añ¾ù4½×^0SÖC¶ñÚó"py;{èÙ¥ÏÔ|. +ç6û›¢‡$ŒéùËç’·O›Ù9PlÜï†Þ^t`Ž“F.!›ŽÓ{ Dž<ç¸c{ÿðgâ0»eU¤û/Œô ,o,ßô¸qó6vóvÀëŸ6_gIþQ?@ìõþ-À˜Õ«nµa&º•º`Ó.j’š´µ·µ¿·c ½ÝýmœÌîöÎ"sr*|ú‡ñÿ>Ä©ZY€á±I +¿LÛ›‹€Wyÿ qœÖ’áîüè‚п^GðŸ¹â¬ˆÎOÿçol­pàñ [„t.YŒÈrookzb|ôas’æÍî–ÅÖŽ+κÍ8ÏÎôi­Ê¶vøšá¯c†tHvõ&ˆ¼eï}Û…±oðôÿxøpT@qݧ€PÑaµv«ßÝÛwäq0ŸuòãiócÙa4Î0ùÀ>¤d€¶­.P;_ô-ñdiè//÷ld‰Wa‡• ÿŽt8 g&0 h?3»š"ýe0Gô97•µÝòk‡ÀPþõ²N‚\ +à—}§fGA¢À–]³l,¡˜0šûD¼W~p&ß‹²Œõ¥gæîÍÝQúmÁÿ„ý¡æ‚Ú´¬Žb¡Þ¼ÙxÖ×7â¤`ê‚7b>gоÀ?mÈØÆ÷ÏŸ?û¼õí›!>–ª¦ ÈjÂØÔô{gmÛA[°»ƒ3ÙÝ– v·('^m®¹ØþÛibÌ‰ËøÇ˧ÃöK-š'ò”H€»ãSÓ»”8aÊß1‡µ†ëÁ7ô/ ããìÙpnçŸs½¾ÝÓ£y@µÏ}è„ßÀ½SA"ĦŒêŽ ) (¾²M›—oÜ:aÑAð–w7¼§¬^ÙÆ¶™úÿpÿî>ã[pn\U¢)'NF7îöPiæj%Ø6µÜ&KÇ# œœ|"Îß·+€ßµly97[Z! °ŸÚwß-q¿¼òç`€ ÿ(ó•Q §&”8Ý]*•÷N ˆê$(TÑ…õJIáïì  =t4 *gßp4°ŒÈèF§ƒLM€ ô¿Oòß ®_p;É7$ îM¼ã³R‰žþQ6¨u0)XPQ|< Ç¿á¿?ƒ·€õŒËþ+¸e«ç…‘Çò¾5;ïÊîMø7-×{«•7H–ÕÑd×^¯þHTvý¶C€Uÿà»}ûs']qZ`ðoÛ„³Ÿ]­‰XªV˜µ êÂèû[[8ÇåïË`ÞB Ù/Øyvßî¹MQ¿ZI„+ð„“7ðF“oíõëHnäÿa£FÁêõß§ºr;ù7xqa‹ÿéE,íS´¾/`È~vŽ1¦ÍÂÇ…¸Š]†sÙ"êDÄ:G-£j€ÀÌ-¨(¸Œ€löŽ<‘áËòŽt.‘n³–„¸„k!øOæ9Ò[ß¶ý^ÿΟ‡ü,!Y'´®uXL™š>¹Ó± Y{¿P<(•JÅ‚­jÓè¹Iˆc2vjãßÎW™!ÅÅÿÿ¢x±ñbÅæè0—ª þ7Ð7ò›Ä?ÛW þœá_àÛ$˜ÜšÄ‘ü;:S…©p4â¿P®+Ä5;…TêÐ×ÏôFå(Ò~΂Àﻬ¤P7{Tk™ +€KzÀ5=™ÍGd/ôaµ€ýrPû}r³Ž<HԷϺˆWáÏÌÚ +èêBMLî)ßÁ™˜ñ3œ¼Çüšr6` ^Å9döœìIAGôFôôöÙ‰8çh䯳[‡À®?X^]]º„¯ß¼®ö©Áû`WycãU—Xznp…Å…×R­ÂPáD&GæÄ«È,“½ƒ}ˆ`yÂ¥V,ò%`h…©¦2MðbÙ±cËUÉÏCu…¶¶ö]Ü߆Ãzã(&õ‹Á~ˆùãäõå‚ßx +àïOÒ6(€{—£ñÈÿL ÔÙ`C’:l1Æ[8\ÜY'·p‡î]"1 ùŸñ!xki€NèÔŠ€¤œ`²ËRã?ÅßÊþaq$Ì:¥y’ôÎeü'ýÿŸE ʺ ƒ2ÄS ˜˜šÚ‰µQ›ÿBA Ý®Ðñÿ¿”ˆÛƆH×–Ÿ ¸Nm_ßÐÈ@ïB5V¯¢n†¥.I_ܹ7,PÛøÆ)Ÿ‘æ¾ Ö‚ÁöÕ_.—JÜÙ)´\®VKÀ»Ú F¤LUü抑ýôGå±Âa%tßqË¢t1/v\ñp÷ñ‚È/×£ÿþºÿk€šŸX}v¦·?šä,/¶³ë׳TU¢i»è@éòbÁ)|•þ¼±`!ÛƒñE¿ vˆ"‡m<6`–­‘QˆÌ¢R@ÐÛ#q°¯3Ë*i²ë7¿Z^v½ï›ø~_߃‘˜üþçüñիׯ¢@‹V€ËǡأR`Dz…¯yböï›­Ü>eQŒ©xžä‚‚#¶±yPplýö¿oI¶¬iÖ®ÑÉ'ÍC§-W€y€Iâ‡É©õCÙÖêãF ·Fàô£UL›ÚSDbßž?Îýq~do è3Àzw9w† “z,OÕ¨TK5{–šašž|26úðR? ¨ ÀP ÌMÞÉá˜E¨µ Kí·òÎ!ÐaC~FÐvÿ;N”á?jAòÿÀÿ2þƒÖmÁüv»úàýù‹pú1Ì] (=ƒœ’²gwËB§ 'üGçëÌÀ?eÄ> þN+@(€Í…ªúzÀ~Ïø—¼üþ¯ÄˆÇ$<}Ä©©Î :õ ø'ÂTošPîÛðsWø!u×€¶³¿· &µ?&QDó±=š“E鯵Ž+8Ò‘|óN»§_ƒ‘Õs_Û÷';¯Ïá„s_ÍÎÌçœ;€ê%(Û<Ïfó`XZÈ Ê·KØ´ÁSª +ÛúgPœc®¿?÷µˆõ4=ðÃ×¼Vànb>’ñÇ×3sO¨ƒY% #äÿ|$ÿ\LôÇa1(R›¯^n´À%Hò_³à3,v1€éñ1ÊÁÌüL\¤JðÔ{…}{ñ°WpG×Vã{8^ÂÿÔŸºñe €Åy¦§Jå¢s}ÆLŸ‡§'Çvå%äÇw;Ó€vºðGЄ—OnŸ €æxïÜA‚ÛIËÝ(~*GåÐy¤ù;»ðaɽϺ¦T¶`‘Ò±ÙÈÂhi€¸Zd¯Ã†¨dCúˆ™àŸºÆI,n¶ç;ðŸoéÿ¿¬¿‹î+ó¥ø¿Äm +à +9âßquü¼­=h»Ò—ÌWÌÕ¸ʤ³rá?ÚŽäÌ\|þCàïåT°@†  ¯¯ç>* ß”¬µŠ{ÛdiÇ…GÃÃc£*€ig¨É½ß‚¯ìw†„ÙÛ/VK&þb,PµêÄŽåjY¼Wªõä3õ°¯Õ5^Ù'˜7² v­ ý ;îææ½º8á9ûÞõ Ò°9J׬|ª3kóÑ;4?G¹9‘¸Y +%ª¤°8Ø;K19É·½Qk`áÏ¥ÝffæìåòA¤…›rs''Ñý'@œÀ; +„XNvnŽO~ÝÜçüüÆ ˆU°ÖÚ€ŽxýêõËü¼ôýF‹x€A¸iQöe€DârjkwzgŸË_(#$S¶“­CË\Ú%Е6vlµu +’Àþ$õD •[> ,î½ Ô] ¤žà±¹'p¢ßýCëg­þâY„#ïÏ]ÿ‡ 'ÆûÇF~<´€ƒA'g‡¶Øð?â\qÎ4ËŒ>ìîÓ~`Âÿu›†£é˜zs•èb€”XK‹~$£ þ)ßl÷°&ü[þŸ?=Fþ}üg +ÀëÜÌû½ÏA¹ÉFÇžL¿}k“¬­¶„Ðv¥%ä¡ìÏ +`kjjëíÔ㊥ÿÄbÎ$þ_Ýà£9nI¼x!Îñù÷{î÷Üîéy0Ðw»o *iTÕdy@ã»LØè7' DS¤áz{v`× 4 *F`~¸Rª•C”ôûÕŠÑ]Ö¿h!ÄëóDÍG…b[f×:Ñ/þ)KÔ¿å ”Å ¨ü:7çî‹sýxx(‚R[ÌÆÁøŸÍå×(çxæуåçjþ³²ƒÇÒãÏægf¾âÓ†“qX)TóˆÈÍùõaq¦wΩ8=š?ªÅÌÓ™9¾‘=Cd {0t, xíúíX ¬ÏŽÿIX ¥µ]1P•eWà—Íà` 6ü»–¡QxbÅŠ²°‰`Ûïï Xub6T@©°_Áµ8I‹Ó/Æ{¨µÂîð"`\ÿÿ>þGÇŒ.ÛñDqo{§Pmÿ‹`c÷sTû¡Ãúpç‘ÒK~žè^Ýí~Hb B€ÜxjGà ãß;<9k4"Z„ +Uç›ßÛٚ ^š,½b^r×ðú^| ­,¶Ìº"þ¤²XtþSd;'ëÀÆ÷섎œoã°éÿƒ2B𗛝d€&LŒ?Žš«ºµ»·…PÃqÚ}^m…Z;@ð6J z·Å¦ÝV`PÀøÕ]?ª þ_€k'U±çöíž¾÷­­ŠTÁü·è<QÀ5'•n2rNo‰ Ç9³/Žþ:H,V¶ AyôêlT©2Î]r†8°ŽÄ‹õl„NjG,€]kã__®Ãŧu¢„{‘ú_›¢ÿZ¯›ò¸uõ¬Îh;cР~œCÈîaû ïÌ8-ÌLï¬#Œù‹êÁ»ó3O¿øÖ ”ˆöò ´„ÉÄs +ù`Ä>o/Ìà +9ÔƒŸL–ÕRíúí¦PYMI¥=‹áÀ±0ÐêëŸ7_;-k"€×Jü› + Yþ àEŒÅö]baœ—¼`·7B¬â¢üs¥Z­ Øúµå¢Û@ÿŸò<¡ßöÁ½+Œ°¢\)în—Œàpä‡''ëõ Bög÷б}êü“#"zBà ÷0ýëÜNÀ¶øŸœœ]Ãìsz||†ã?:¦jœàœ)¢V­TL£U~Ò™Ìå”tN ~~~ý]h€ áN ð!ˆÙsð/íS軿çÿ¿ìÿšx‘z³pÿþwsx¢¨%³¡ÎÚ ´šyDDXS¸Ï-ûÒlï!öafŠÌeJN©YØÛÞOñ5û´ñ/{öý÷€éKöwÀ +OâùF(€(€ÛH€=À€A*€£…5Ó€cm A€=ζvb4€,)€pÿ{årªWÑóp¼ýa­^ôÐÛÂ{xèä@.ÿÙG¿€ãC³‚-sª—Ž[” —z~ú]ìQä¾f»k;Íæíé?@8»ñ1£ý €Ø]¼æçÿç·w¯g?öÐ]燨E‹‘B´#ø ƒÜ bf.®c9Gƒhú9R„œ"¢– ¢ºe–USíFÏÀÀòê6°üyuyùÙ³¥¥¥gK@¦VU/_ot´l¬š2¼¬² +ÐÍc*{dìì»2CàȾdz‰ÊT¶1Æq5.ÙPpæý‚­‚x—©é'R¹z³fµñ?6Q\6Ë´ZÙÝ-RnNð“õÞ?þíPýßðóáÕyÎk÷áxzzñ¾c »??#pl `Àq'PÈa 9Hµ!ʨ‰†Á€9€îù@pò-0m¨Pq!®Ö­™ÿ4%@ö4‚¿pþþ7­yð¦ÿ·y';ãÂB¿•²ÿ£A$£t‹ÒyàXžÛMø ñ³þßfZˆÕÁ”øO"{ñÛtûÖ²žuþoÑï\ñ<óÌÚìâ·ï¾]0€>XœŸY7¨SòGá·=Ú|ží³‹ïÞQæ¹Ù5ØÁ7dsCDs 6'gËL; á½42óÎbçì³óëóƒ±xdçóRÓÂz¾—Ý;l€*³¡ €Í• €t1W–Í€ì‘l:hðÿ-SlXµ™À±ƒé602b±¿ÇA°}'ä² ÌãE ¿œ‡-:_+°êðaå°JXm‚ PâCíPB¾‰UTQ5ÀXdcºÌùzµíí¢ýôêIÓ»ÂWôå9¯ãâÝ„]ž³9FüŸÅì?ÑH†àA}€% yÄ\jAã΂‹ˆÁ@ºD;šó-%€Î`}}o—œ@i`î‡æ‡Tæã®Ö—( sþÞ:,ËðoÂWý/úÁÿ»õŵ\GüŸà;ÄM +ÈJ'9ý6xÏ£…†ö7ûgMGÑ9uSµ„ß4|+”Qi…¾½8öQ@[Žäœz2&›ðñäþ„“RL]Õ` ­`ß÷åxøýi#(€o\º144˜> ÷Ϧ ˆ¥£+ f ¦ CÏlZ†Í\€(“_ã²@zˆÃ/Uj‡UuÝÞ?U§}kHº|0ÛëÇ¿%ðk*€À?¨oÙâ⬃ƒ‰µAqn–—óëÎÙÊÝ·†N⊽ö÷î8è~óe ?/þÏ¿ð°#€Íƒ”¢+K Îü+o¢œðÃ…e•ýÒ:E~毖fý‰lÝWàò…uà'úôC ¦úyê_³oPð‚lmRäˆ'†„ÑPqtL¡`¦|zr|øÞ'Ѷ¶¾¾¶f ´F‘‹>)€ +¡€èÔW‹è>œ·üç`™eøoêáþ×!œLÓÿ[—Ä¾ß >Þ$€`€Î(À>𿵽¯nŽœ¬¹3Ø»bP‚¢ —òŒn{û +¶Œ|BÿÀ?ÐWLL=™ºb@ÐRÏÀÊ*Èí$€¥¾¾ï%€¸áþ³Íî> J!€¡åÌGa­=–W–mtö" @)35õ„Ÿ1½À‰LÌB; i'QUóååH<çê`Q÷ì`ÀáÁ¸)$¥uÓÁŽ ÄW5-BÇmûæÍ?°šŸYœŸ]·äx¹h6&¿Nt°0ß;Ÿÿ·uªƒù] +äi^q˜[[3×$ +x‡ëXÏçPÔ{A°ÆÚÌS8…c/8Õjqîëþ\?Õ&”Â|žrwÚ™ùœÈ:µø°øíú·æÒ,`ÿÁfg*Þ{)f]Ÿ’¼§~Vü‚€Ü-@‡µjT<¦*Mo9íïÞÞ®µóuÙŽÕê,œ*WøíuT=æêQÎÒPŽ‚BD‚Í [¿uüØädý·K·Pï•ííªž[óÜ'&÷x7<:˜vÊ©áL¼_¸,OPF¾åÒàvBö˶p€ÃcTKíê@E©¡½ðï[S“cîv(€µÄ&^(H'MèË`H ƇÀ}¦ºÌã… ÿ ÿT…€¿øÿ—"úÌÍ,¦ø_æ ü§›-H ›ž~âˆíÂ.ðvèŸý¶+UÈÛ)´LàšËý*@v®ƒvÏÅiÆüÅ?ð·AÀX`ò'üt÷mE@UKàtÔ/–zƒÄ¿ØÆ¬#NŠ€’÷AàÌ`¯[Ÿ÷< ›š‚ëy,˜ÅTËììÚH™ +8(«GÍ<×l…²-*ð#ÅOQGÁ=Ñ?ú”Wm»¦Ã¯Ÿ3!°š×EƒNü²ˆ÷ÿëš2óùþ™Áõw?ؼ»8·¶¸ÈÛ ëe“üCsFS¬[ƒÖõù1Ùûú ÚÞî@‹óøÁ™…üLŸ3Œÿy»†:Üâ ¤±H˜€ºŒ7Ög×ß-δV×T¡Û¥þg—V~ùese)@\p `à +àÏ­òÿ—_~Ýx¶ôâ×ÍUvè¶ÿgÔ§`€DƒÓÓ»h0tâ5ÆY9A¸rßÌ +€‡VëßËæXì‡ÍµÖ*µ"2³¸_ÜÛÙÛz»¼Æü[þ?ªØ¤Zì²ÕO*»Ûp¹“wŸœó/|“Kßg¼å!¨s÷½¦ò·ƒÐÑáðx|Ævtæ¢Ç§ ó +|„/{\?ªºš\µWííOŒw€ýx’°iÈtV§# °5 C¿æÆdþ‘†C ÿÿ‘ý ÿŸ¹ðO8ø-ìC¥y·>'mž;áßVÀ¦yYSk@0þË.´Ÿ-ì(—]T_p”ª€ÓèÔR«hc@ž„j»öˆÞc…¿@ü°7Wðê¶ €¶^Ìv)€&D¤°„È¡6†¿Ûxa¢ê9ÿAîÂ1¢#àÝ»N>kUA8šN@4eÚp?–ú.ìKaf ªÕ¼n¿V+GtÃ\*Ô<`ä\ÿÎ?ìZÓï·( l=Mù–\_œ]\”‹ÿsðßÕñ/óOí²—¡!þý_ß­SERw=ç8/”Ž1\~懿Hà8Ÿ—œEèH÷;ëgô!^Ÿÿÿ ô! wp‘çŸ.æ×ÿçì_`DÈlO÷jžý €P³/6Ù|1®=]p§¶'PSlrþù‰2Ük¤ÚƒÅ*S Ÿk¿g‚qAŒÝÉlnõʇ¨€XuÅ]-”˜ó´Ù=¸¨¶t:j–¢.á0þHüONúÁÎú袲»UªÕ”êÇFî@}Xçý Çr0‚ï¯sÏ&ë§çHÃ~øÀ\¡Ÿ>ä#'¨ à NA,h°WqªÿÞöÞV,üE»å 0k‘'H“w7ÿCÈs1÷Ó„w²€? +@ñï­Ã2ðcÖ Ÿü‚æÿ]m8†“š„æ–a¿eqõ2‹+;1•ÀÀ´Ù6øGå U;l• T…r¹R²Ãl¬•W,UË0óYÈÛ[ÎŽÝ5Àÿ¤½ +ÕáèÀ'ŸdHmÛòíHô$°:Òׇ±Ñ¥œ4À»KCÏS}¾œæ]x©pþÒèà™SW`û({JH¹o6Sà§8CImS0hâÏlT¹^.šŸÆ?YS³æ–|Ú´ködf::—ËŽŠŸ¾]_ü¿Á&n>o§} ÷,èãéSü …$ÇÇ–YßàiJÙõZÄÕô¯!fíplß\n®üÛîÛ %8¦Sôæ$î×ÿ:øñ![„odU3YôøÕÐùÜÏŽi@,½1Àò³%C€®V +`ɽW: @¡­åý“˜ÛæñoŽUÅ5t襓qœpmaÖúÑ11äê4l ]k…ŠUG-Ø`k×þÝ·°yTR‹3ȈMfm2-«Ÿž¡ +ðúÜ?OI}öù¹½ÿ.¢`D§‡6ú‹EÁL êÓ›l??³!LÁAìèO°ÙX5ƒ_tqp|ßÔd׌`bWˆÒl3€ôì?ªЭ.S@R]–°¯5áï_'þñÿ*jP'þ½ÅÙÛ)€°¸¶O&ÇíqMÙá6‰þ÷ŠûÎÚhÚ°8pz6ªq”uâˆA­¶O„gÀrjûÿèóäñÔðÿxƒ +Ôy[yÞcÂOä>ÑÁ+)ØxŽÿ7 À?©†œ·À‡ñ>׸’Ñ£HD:…†ÿ°¿(rدø!vD!Á#Õ"´‰@NpÈ–¹I€:áª3ÇBúøWt8þ0.ùSÊ/EuŽÕ§ˆÞåñÎx‚< ÌKÓ^þ(šw6ü´…U{nÖÀ¶`±£ÈÎåæÿ-OšYŸ›qBb‰àýlêÎê õ}¨§ cÌ®“¬-Î÷f53³„Ù €¤\weuv©M+Km°áÚì?olš°Ðìʯ‹ÅþèŸ#‡R5jÖ(ï§bRÎhC²Ýˆù0\¬£ {s>öÇÓÓvÛÚÞ+8s†Ù1Bc~D†Ý6í åº* +Ú4A©`*Ä(À6›äÿm‰Ç÷OMrO4°ß•ݰ}}*€ +ÀV€%žE + ¨~Z¡š!–6^…X}.<.Àq¼”ˆ9Š ÆÇL>¨ÿQfø];ve,Ù‘‰€¦†„)Ê•œ½ÿŠ„§ÐÜ¡mö ª”ñQÑh½µ¯pËB$ËÊC“žšöAƒ?î:„ âBÐá[ÚH} ìfë)¶qGѬù~”³-¼ 9ßïÜ"‡òáñûäNõõ+G,±0<íJèçTbÚSù—ë}o%Ï ðxŽxkÏÀ‹•åe.yßý¯ž­DO@À/S¸0Я›¼¡ ßÚ©a©FQúŽÀàÅ%­ÄÕmÈG“£çØZ žØÇÊÓÃÃ*±˜Ò ¾(;ÿÄAaogkû­âÒôÿÄxkB@Ü®Àì0}öQ}o¯Ò¨œ¢'üÿÔ÷Çq@¾ÆpåCDç¶ œ!" ßèÄI,ø.¿‰Ã“³c¿$Ç99&V¬ÖÐåÒA¼ ºf§ôxáÝ °–pÍþØ óM³^dÖÂ?ç±Ñø'ü§ƒdþ_ðŒ~¡8@üu5dQtN¥ k;x~OÝOœlbö°áyfÐgг^;B9£¤í X*í:ª{ïÀÆ@{nŽÅpñÀÝãúKì¿$r_Y^y¶²|IÈKáãS3@Fî.Ä šXy³±4ð|eø?þÝwß­@ +„ÕL|áúòŽŽøcjÚYhßBi0 +=êödFÝ”¢¿ µÙžÃË +á€2§ŠÎq"pÛ,]%èð°Ò9ðøü”^Û׿*Þ§XÞÕ;D}* +½3ekŠ8ÞM}ƒ0÷1`Œ^E±5(Ú‚ ²‰GqÿTpø* Nmç Y¿M؃ùiþû»ã-_ƒú‚€>Áý{ + ƘP˜Lý…Þ Ì!>y þa€¬ap¿à¤2v9ŒV ü§äm ³3—â-뻃 Ø(7˜)€ï_þÂe_…‚³fÀȬÚMhsƒ]¼­Œ,½Þ|cpÀ@øÿ‘”¥O6noÐo lx%†,Á«øó¨u‡GÄô‰ø£Sø5ž6P§õúI¥qHÕ«Ëû.Tpþàß"ž ÿßÖÿ–sFÈ™©îOŽökÎßí@@ÂbNw¡¤ÆG1ño‚ø‰}ÙúcŽððúlW0@|à<Ø‚{°#3–ö?B—Ë5“»Û[ø¼ÑÑ{-ŠÜžZòsv›²NyVƒÔ +àjà{eÏÂâ¸É²ðß›à€øÏ>oÈ*–ª\ú Ë”–À¬’yw÷ÀÁó„ø1_¦ÑNrõÃRíø°‘ºo7N?ÜÁ¥âNÁ>om +hã1 þ'þôÞa@R/TPÀó\ïÐ eñïû)׿<442dGáÕ¡¾%¶°õûï–b}$€ ð™v/ºFÐ ¦‚œ Ùþ>lµGÈ‚ãøÜŠ¥Zü‡Y_@™/úIöW‹F#û—7­9áS7ø±Ù|?þœkL™Çuw‡˜»?ÿ(œ4E444˜3PT1ä)/µo熨)8ÌìÂìfE1%àT_õT»f‘þ4f -± ]p¶™«VòxðÇIÂ?èë»ÑGY$€oo*€¥èýB¼rm Mû }€Tÿ™Ý0>žœHØUÉ•dö"‘ÄUŽÖLò™I=9Ö¹Ú­ò$&êb›Ø¬œp…Oê§(-“.Ųk•†kÙK=ÍZúÿÉ“Çâÿrw`{´¿W­7ê‘ÕWZ¸Í ‚€MNÿ=»°—À1¡¾ez9¸s#qD¢,2vPLàô~':0~¿p`#À„³‚g7)€5»ùC˧‹Ö‚ø§$Ã"°›Ìñ­OOc-*D²–üOøÏ@ÿÍø?³ìZbÑÞ"KÌÇȘÙiÖ™šl¶©âõ’ÈP—9?.ôZsPŒJ"ˆŽsÀgi›áî`›v´–ÿ›ÿ›|oV€¬Ûo‡xŽxáâ¿+-à´¿†(€ÀO®°äÕh!Ôÿ¯®¤®€p4˜žzl+ [(û6Ø+­¸_<8Àÿ»JþUO¥ë™Þ¬5 "Ó6°ÙÞ@=$€÷ÀŸ®t$ý@¨84ÆgGè ×Bq”CtàCºÃºïEÌqÄÁÝâà œað@>?ërãls'äÚupn°7æÑíÇiã¹À‘%÷¾Úÿ_»vý~²ÏhíFßÒ~ÀÊ+š +iÿ¹ +`eõuRÑ `㻡7H³äÁçGùüóQ9>ÓÓ6%Ùí2:\—ùS©RQN¨-'ÔçÃã‹c[Ü.̱+µOëÄag¦í͘sBl×Ð2u 7»·ëp“oœ+Ü•i›øÿSW pƒ"Ø.QQ•~ôüajÚãÆ¹¤j³ƒ€ÜÂbH€=œù?Ò~_ôóÙáâ ’8vÔBƒ—ú„z‰ø¤X(¡Nœllt¸5%`”r”“OÐ ø_ø>¾¢¥ ¿ÿ¡ÚP?˜¾›ê\'þ“óçØÄöšNªù*3Ããn˜x"iÇ:º{%ûm9áI <¤¸Í¬Íi½q|fdÊάŸ:é‚!QÌ© _”èB\„kS8„Ìÿ§i°„üÌR›Êú°è ÄóPiKé  ýWFr#ßÙ ¥m. 2’À_Ü%È~ž9@üÿ‡“líØ¸¿»gú ì€¦B±`*ÇfÁRÁ$€ã‚œ[¶ZïÕF1€K‚ìز(Œìš·ŒâÍççzð=¸|v[Âókù’<`Ê[ÑElv1Ÿ§¬bQa÷#ä7Ο]3Ü_`5›ãÙ<ÛÐ ‰K#j +0“œ"ÍÁ\®¿'xÄ/³ðø_sÀl¯›7®ß_²§_"W‘X‘ lŒ$  +àoiFÀ7««Ë÷?ÏŽpà¢y©¸ì +.®´mCÕz%:T7Ž«¸ãßÄ”®õüBïkì´ê¸c4€·ÂÉàl!Þ’Ÿ6æ‚+ð8¶ƒÊñ¿ÕÖ +ÖÕ¸×v·Ëp7ÈáõÙ*À ..Ô ö¤…”ô;?X£C\\8Ø}R›¡ý‡¼s¶X¾ÜAõ°±QMøVû»Û<ì ÒÒ‘Qø`6Ë^ÁB•›9€Høÿ3S`ÍsŸ'p7ÐÏð ü»ðŸNêyÓ]ë¡e\º.àßö?.p´ÿ"K‘ãZ™¦LA<’ÍîR²ê©81åê1±Ð¡i‚ä öŠûÎâ!\’(t±‰XüwÀ€xÄÛ‡P åúfzõ’¸ ­ž=# + 0ðleyu€*þȩ듩2ÈÖ3‡&'2 ³Mãþ O ¸ú¿°­þÇ +•rÉÏœè Zj”ìT*ÕìT7úoÄ ¯:˜·!»eÎú»}ó2Ké½øn Ö׊ìà–ÐòâWo7/%ÂìZ~‘ʾ=j}Ï¿W¬åm °9В̛݋I€{9ièKÀÌ Z ×é„ãkÀòÿ(€?ÜŒU@µ7ú–76ßüŸ 4sjO=Ñ[@H„l(ÀÒÆ¦!ÀýñùPÎÞ/Œ›ÿwø…°8õš €Ô¤jÕåùÔáB€¤qjn?s¾~ùÓ«ø¾$€o±· ^F]–JE3Ó[O&s*«Sª`]I€hÀ«lãŽTn1‚w„¿aÇéÉqê妛æjÆvGøÆ.€žˆrÊð?ÙÑ®s#1®·©TþC¹ÜÐÆ«—Ï›ÃG\ø«VñD/Ô+àν{÷FcZ`3L ð…v¨“Ö.ÿ6à*UjTW¢)Ú$èuB²Ë9O@M€œ®Òá8€Ë ø/2Ááz®/×ß—ºô ÂHäqæ€ P峘ÿ¡¸(ùP3ÌÏ;¸{@4Øz€Àå'DßäéÌL,$žØÇøãÒ`§íNÓ€_»v#ÀëÙZàC˯7/º  çþ}@+B|˜…£„â2zGKÀ–žÉ™ÎöñþvT+íáX 0‰0ÑH˜rÕeObâਾȡªcSí xÈuiZ"Åw”/¼¾Ÿ ¼?׺?¢ýe +yÍ$ ¸ õ}} ésùE)aý¸¹óZþ/H"ˆÈ#$ô;t±h.Ð-0 °8Ó/ôíaœ3x긳H+Äš¼,‚ÂVÒ|À˜‹ßXyófCØXÚüÅYÖ)•å•g#÷{"ðçÕ_&ˆ¡K+¯ VGܾÙL&ÞWìÉÂ~ëäkNÀet€y"5cæ=ŽÍ§Q«S¸-̓p®¾Tûa“  ÇbOU8°› E•)âño8C?ÝzëÓÓPs ˆ_ëý{BN ¦R=FÁ^œþ1ÏÎ 8'ï©J€díäü¶ÇÅ*Ž`r–h{*áжPR»&¦:“€M0 ¡Ef[ÀûÀ²šNu³—@0×% %÷ï_TİìD–¿'ƾ‰¢/EM86ÀÄ-à€´)0q{vö®Z‡6Ÿž;|Ë t~|.^P’&D%v‡]Ô]XÇîÛ¥}<ëþ>G´uô #;¡J@ à×RG>Ô~´ù½Úxù<—È­t)€°å•å¡P<p»Ïû[ \à+ÿ› +à‹{_8ptsHÒÔäÔô”³•Ű@Ó€û’ÀÁîÞ*¹ƒç/ò} e(Á©JÕrÕ)yä ÄGÿ ”Ô2ÀåîMðgÐ}kø.?T€÷­Ò‰Ö=Ôþúl~mq~m}þÝëkqÎw‚Ý ¼¡¹Ò€aAh€ùÙõ™E€s:Xòÿ(€˜#ØÐyÞë w49€«¾rÿ«¯¾ºÿÕçÑ +°üzUÛX]‚VC„ÖŠåÁ¹ú+©+ êàÍëå¡%â…Õå÷oß~˶q 8‚ÚWûný¯ïÖ×Ö¿Ÿý·y;‡vÈÿ`'ñÎɾ)Lçæ_-Á9zñòó¹C ;ä×ó.EÁGgß˨ö±XÄ|{彜 øzO\XÍv ø;HLÅŽ¾rJ 7oÑø2Ð'øó‰ùw÷Ñ£Gc“ãT%e ÀU,R¸hÕóÜfêU;£þ¨¬øMgä ¯§‡5óMTB»™àoKTuµ çvžÞšzŒnÅÿ%üg¤Œña¢€Ý­}B8 Ò#<:†ù)îÎå !œÚÑâÄÉÂø*ç®%kGðU~cï_ …Ó£ªO 3‚½ÇJÕƒ=G¡JF=¼ó_³kYðZ´XêÞ7{w3_Š '@â¦K­ïåš&$ìkýt kúýKþ>ÚÈ&ƒ¸N— àµ.[\ê]/Ö!!ÅÁ¥¢HÒTª©¥FJ´ôÌïÈòLJN¬¯%.ŠÉܦ§¦›çâQüw1@W¼|µ2Xy$00ä¬õT¸ž¾ùîß‚€†üÌ>ù4ì‹;÷†abñ¯º™~òÖ€þß®@1²tw¿øß³{‰@I šm „b®—‚s8•Ôì`Ö ³¿w~ ä{ÏŸØL‘>…¼>o;ÿ"Ja-7¿ÎV° ¦MúC†û©YïŽ_[3™Çf§d—uŸü€¿?úþÀƒ%˜;DÁŒŒÜ¿ßsWx46ùØÞäÿît’P(—Ï•ê&ƒêÒáñ™u\AK9ãÁœ à¸V7+³±”« TÊO¦ÇÞöSe–Þ.ký«€p®Ê±Éc(‡oð$®Qo]‡¢áÆ“sÄ 0FÙëbãZqÏ鸷¾I§ù ÿ™üǾAt¶ÀKH`eh 7ô`³í€ÿï kYTLª],êÒ`¸0Ÿ±·oßÿêþýÏ î>¤NŒº| þ‚(ä-?1Z¦„wrLÐ6" HáíÛÈ¿óÎPœö vöÚ˜* Œrñ·Š3¢ÖN‰_»æP„z}¿whÿÌB¯Ï€áEp¾¾†O¶!”çóNL¿ÿßâ½v¤D ~\]vLÆÊRZ £6ÎOïíï8–ŒÊTqp%ÎÄöЃ>·>Ÿã–õr©&­•CòáHB”qÇn:\>d“ïdìX‹wm916ÚÆÿd,XªnM`f¯êçÇŽóá¨øûûyýþ /ÌnÛ(AZ,ø:|À±C_ª| X01ÉA¢‰¬V­!v÷$ÛÓS²QçÒ€X¾0ªE†ÑüͯÁ/Ç ©­/]9€hø@ e-ü7ßòø<ôf@pº>$À7Ó;[»;¸. |ë çü8D÷ŸƒðCçmQDyIø&õ4Šëf÷ƒ¤øî'§—׬qab+;àŠK‰†&þ'Æ2ÿÈ¥ù<"ÿ/7–‚LØ;ص€b€¾Û÷Mù¡Koãð…ÿÍ›7n\¿vƒ{h ÿI€‡Qc±à™?0Zíœü6rÄö +v@°Ã÷´ÐÙ +ÄûÄ™Ñ8È+ôk¥¨à2d_lÄR6™] ǯë' úZ²ÀÍÙó7{û‡x[}/ž¸ˆ¿RçÀT‚s}v¶OÄ€y@õ›ýÿ¶DÌ?8›_“uú (ý"&˜Ó\339®K—u‚_ø¯ãÿÍ›g¹Û˯Q\jƒ®u€ö1$€hiùóŸÿ¼üãÊ2ÊMöPB¬n|w_`ü-Œ/q)i‚ÿZ8J;Š„<©Óx^ö†£ŠáŠOìªÃk.ú7Ÿ£šØ×¤´oÖ}Ǿ·NÁ•ðo5n3Lr^ßýf¿B´n¤*¾/çàÄg¸Ü“óóòÇ{!xð¯ÿ•‡x­Vës•ˆîÙÍ<êþë'Ρ³³' ‘$ŽnÒe:— ‹‚íh ð®Å“oà ä)¾õs-K.$Ý’}ì}èoSÀÃñq§TDÅÇv”›z+*\.£€[+WìÓÓ°‘¯aöÄ$ÿiê¬;ÌÊ ³¦{9ìE—‰ê&P jvž³á¦â.‡o¤Ñ[mü>Êà ÅB ßÇ"`/_¾ÜÜXÊÙ¸a`cuÕAÁ)ËLå»»üãû‘ü€]YRµEûFŒøì3—•RÀéI9¿iÀ-( ²€8Q;ËÕØ`—@€§ef!`›`I +@rÍ8zAR°WPŒNv-RÂ4Y VK@ŸM‰ßÞ~ܺïéýōн—; ÌfÄ0ó½ƒïR)ÆVÇøk?—ñ†Ž¨;ægÐhÑ“Üø2ƒìÉGÝ|y/ð›&ü_{÷fóõw÷WÞH`zuyÅQ~2Àí¶¸výæý?êü! >·:´M”÷ß™Œ‡÷îŽloíÚ‘ÂÄpíð¨!€ûx¢¾PÅCRS‰¨÷<3Á.L¹·º§¥<ŽlnÃý‹âc4·ƒ²+N|°³ãÀÀñ±ÀÀr2rü˜‰„‹£­é] +Ëì!±92'Kt£ƒ=[¼4Zˆ€$‚ªàÑÓJ²÷u„ˆ‘îìqb\ ôíZ³#@ɑʑ~x§;³# @*,×À¿?<)ëRœ·#àÆ&|DhY‰ZâÒ9›ÖÔÿ\/$ø°7… €4n‹R£¼ª‡NÙ~rxHÉ:jƒ0ßk_/ã׿*Æ—öªž@QTǦyì)‡âƒÀÿ¾ó9§ŒÍ丄£¡ÍâÖ °¤~Ú0pF9:˜û»k‚ß¿|~çß® (€Œl„Ò¬ ãæC8ÑÙô[i@ýh‹'Šg©¯‚ƒ $“Ží<ˆ–xåî‹vh±‹€IA2k)€ ú˜ènš]qì hs39纊ÀÿÙùÐÊ6v`k*¤(ÁÜ`,"eQFYzßç]60‚}<¬0“M7Ù‡èb/@ÎØÿcê;,S¯!€¥•Í7¼x^}et +àþaÂÊñ‘7ß9°óÆêsð¯ÒÂ:Ÿü.@±à>Ü‚ž’8Ш=;1±$õÇ4 á„©\Tw=²ïEk  x*–u‹Ã!.K{q³NN n–Àã…Ù§¶5½S,™–2»~,%Ê=ª~Eˆþ¼a‡cÙs¿ m©Š³›OÎ>'ørhç<6J8¦Hv÷v¶PÓc u˜ÅØ4í‘NsIH—[>šhY ýóÿ÷¼ÊÜKLBÔiõ|4@0ÀDt‘ÝÛÙç—8 ÖÉpêcÓ®¨…“ð÷Çs)øš^³ԑ" ++Ó3¥ŸâFàȺJq×åB”GŽ +À có¶Š~ß§Ù« Ÿ Àfc€$@_î¸'ø×óƒÿ¯n߸ý9ê¿þZ†ÿÏbZàG]F@LL<™šžœ~òÄYA²¦€i\ìTptðþ^!u– Tˆ:îí+\¨Ø0Z²€s†:@ eIdÐÇ<5^D/ žÚ ÃŽ:)Õo¶žwÙ¶¸>?ÓëXå~FØ"Î\°Ž¤Ô€Oûù4¥¸€06ˆcäz$°¯*0ÀA‡ ³¼×8C}‡üÅð›Í¥ç«›?mll¾~=# è"ûûDo>ôÓææÊ³Ô_]U½A£÷Ž: Ðn,ä„y wB@Y?ÿÏÔª’’ZX 4:õéâL‘îHaCê!(®ÅÏ8o8‡AYÚC³\€e¶¶@Ü0Â2c€lJÀc!ur´=µ],ëȺ" F 6¡gJ›Çó˜ \®a‹Öðœ'|+¨0g0?«×"¦%46‘Ö8;û‘¢÷¶ñ1c£÷î¼$£DS[@Âèì<7Øø˜øÈX€ZÔ–ˆ7šÖþ¬ÿŸ1Ó„K÷¤¶€ignÞÛ+Ú®’zmx¥OP:Ç1àß ¡×*'¯«ß×p+ÅW^1˜šØ¡âÐo»m” ­ ;»Žßššz«&ü· 7$Ä“É1õï[ \CÈ#áù#÷ãÆûø¿–µ~zç. +eø(x.Æ#¦%‚E¶¦¾á×Ú%0¢€½ý}Ûp‰¶ +Ð|+!" Šse—DvÒP"û}#º@B¾&*Ãâ%í½®À7÷‹ñÀ2o¯;wpo,Ù¨TXHÓÇpG + }ØQÄìÝ«bpë¼ D`p6×kãŸØWD°Á>}þ=ÿßÂÿ TSvã†Øx³ü](€Xc=æZ]u +&.÷ÍŽŽÄ×o@?"ûß¼±GÐÊÒK$C(€@ê96üpô‰ K±—qµÊ¡CÅ ##²'°šÄ_@Ÿ*ä „l pãr¬_ÈOÓGE“VëÎTUæd#ÓTå¨Ôv7mŽâ§'µiC€ÆáIü5>ûâô7¿„ï¹PmmÔ:·û žžÇ<¥Ô¶Üñ¢`Öù—*ïðD k*Õ†‰Ž¢£«l²kiÀK¥ÅJú½(ž†S~L¤V€¿Ÿhçpù{ýÿ$‚t¥d„“ 0J|Œ$_;Áâý+¦ñ(4§l“ð²ó:q¬JðºörRF +8S)|ÝC¸ÚÓl$‚bÑuÓÙÄär(€diäßË—+ Èúø\°ô‚g€ýý µ?âÿú {°g¿¸iŸ5› àx áa×tvRG§ÿé©­m‡©CHT=ðn‡ ó@»û|Õýe@D°Ü9ÎË)ÏÑTèR¥ ¿¸¡ÌbÒ‡°ýþ`y3¾èÞÙ˜¡%6Zæçß­¯IkH^ÍDù„AI­7Æ Üy8s±ƒ' @¸ß“åÁ>wÄ ßΘx¿ÿ_0èóy;ðúÍÒÒ÷(—jÙ´7`*eÀÍÎãüpV`ÿÓ4€X]^ÙøÎ>—SÔ¬‡ãÓÛNºÌ%«ºÈÒaBÂ¥RÛñ&Çg¢Ú8çáöh3ã_}†{¤bŵaâÐÙÙ .ͺU ëmbBb<êô“)¾@¦ÇGå­é}ØÚñ€Çfëjhé%’ +V]ª-®Õ¬€ÝxÙ`ü/_/z'QÉùÖǺdB>â¶þ[ý8::XþЕ ÑÛé'ÎöAhRÅÉ/CëpŠ+€¿3àƒÆIZýÿR¥ŠÊ%E»NF0ÀCÀ$9NÑrÔ}¢]û¼9ýŸ£°Aþ¡â?0~zèwâ ñ¥â‰ßÚ‹t~£¦à.'yG¯Q¶\gÖ-WO_.¡Žöì‡o"0ÃÿX´Øç_Ÿ àRB ¬üŒÿ«‰d€Û7nÞ¾ÿ9ê?jpös[–EŸÝ±0úŽŽæà?Ñý+@¾ífÓÌ {;Ûû.ÌóB¡`.0úˆç¡ýö¶€+@¸~H†~,#ñˆÅóýæcd÷Ö쵓›Ic2¬®Õ…¯ŸY$`ËÂb8ùÅÙ\î_U‹²F:ØŒ¤0›wÈÛìö7ÿtf úÍü ~=;çÁÅoçûfºõ?×É?PØ[@\míÍw¡\¬é•I@ +ƒ€½²ƒh×o?x`ÊßAƒ›oÞ ”]äxǹ¾O=›xKu23ªT½\¸K*9u!>UˆêNi›[tÑ`‚WñnB¢LñÇ~§ W\Ö«¥}T·sp CÔj¿å+0©€6^W +„ G5*±9öèÞöêàW'ãg†ˆþG_°ûý9€–)#­d©|®béšXçGŒ[lÄÊMU"¿ØÉI|;j3¾eç-äßÎŽ2ë/Ÿ»K*À«éK;n٠̱ÁÒ…=' uõä ð?žz÷ WF0›ýS,ÿôre o°ØwXúýϯߴgúÍ?\æ€O2³'Ðw‡‡‡?øW<™r}ÂééÇÎz‚÷ÿÄIÊ€BØG·ƒÜ$F©@èÊ„3v hÙµÿêÔo¢´ƒĨ·€«ÀýÚ¼+…ø3„àÛsè€Ø7|a>ŸÏI ±3·AÇ/Î÷àôcã|øüù§ó¹Pýýý½¼µ6;»¸8¿ø/ ýF¢ôZäoܸÕiÂ_ @,×jÐTîßEŸ-ѧ¸Þ8l81A#æõ×)¶Þúy ÙoÖa‘'5Â[¯Ø±¹~ä"ñ•jÃ!/6 -ÄõØè£»Ÿ}\€q|>¿ïwçd…0ж üa  Ç!¾<×™p¸4Äï\q~º}°-®(0Ó"ªþxŠ€+÷v¡†¢€Ü›ëMlÄ%´—$!æíÇ,Á¦‰3üýihhÖ?'ø× û¼ZÍB´@.7¢Gúöù é]¶O3ðÙ§_|q×<à0ðd;î“>~bŸg¶§¶b‚m|¯‰ʹPÕŽùÿ=dld í-Ì+Xl`B°mœµIþúãQ,k¾@Õ;'×Tùš]û×òùÞ˜ìËOÅ{‹ëvùïƒJˆ÷®gnŽ— Æ +ÊþèFÔo?ÂÁÞþÞþ™ù…ÇY_ìéy_`üo´n·¡–Ú + 1…‘À­®« +àb+·P«ß˜SÁ\hg‹ˆ|j{o¿H`ìºìC`G\1¢™j£d ‡rJ4®g¯sîìV"€Gd(ÅfðFƒÜÑ&®hçÌí½­'£cßìA=iz€ÉDÀ|NMLïºÙ¡²=ª9-I]ó“WH^ª,ß±~ÌÛª€j,ã»ò†ñAL•˜J8t™HÏŽ¦-•Õ†Iá‚ÃçP<€Éè”Ð^ôJãw4Àù‡s‰»[þ±Àñ»k û™$Ɔï Sà… +,”-ˆè¦Þ8á´ª™èÙ˜Ÿïü`Îmü$JÑ-(¥èEIK²\@0c¸e€­©'6?þÇÆVV¾‹¿Ì’x•)€¡´@n`Äm=˜øÿüó›A×ÿ@…¦B¦ßÚ²Ìÿ«Ì ?zh`C f`§Iƒ ÞúÄEÓFà ŽÿÀAƒö¤Œ Ðyª_e Løˆ}ï`jë3Îä¹¶Ž›'àu¼­Í.,æ× Âb¤÷xŒá?¹Üº Àù™˜:€GÜ{n?;&â0:ô÷Ø ˜ëÏÍÌ,Ê ëÝ-€Mì_òñ×eMðÝÒÒP†ÿv@ÆèR×>ÿ£ k0à>ünÔ.tÔþö# €òvF{ÊH)ÃF-9<·yGí§ªƒv« ¯¬dNžZÜ­þ€ ª=[ˆN~ÃሠÁì¤^¯jf»»SSƶ#p+¾ÃséšJirlk»`ê¦Z¬R¹kvÅgNñVOc:ýŽ®ûà¤O6Z•k¼“Ûëê—-üÛ~ˆgÜÏÈÆ„°]Eê²o·rªÑcÍèÇ_\ +Ðm:}}¾9~ãßSÿÈX€– ûK×%³ €Œxuoxb*MÜróÞù uÝ^ü£*_KÝvìêÊžÿ<(T1gGÜŠN©Ùä‚OEý?— JÐ\*–íL)—'üONì[–RTB`?„Xyµ±Òç|a«Ÿßþ\`ßçŸ3¡e?°m™ÿÇ" àh€G££ãc£üð'Ó“Ó.^l; ±€©@ÇAîØ-À1BfÌ ì8e˜Úñþ%‹»˜ÈŒ³ÂøüeÀÖó‡UH@Ä"Àõìb¾Ÿ¨ßwïÛ8€˜ï]_tôžá;Ÿpý€ÅµúsvâtߌRf!Š‚'x:?ßÛ£ ÈϬϯÿ+gß/ÓÅ‹üŸ´±Ÿ„€mðÝ€—þ'À?AÙ’¡ €×¯_þ¤€Þ¸ê27̼ÊÞÖ(Uj{·G~‰é`ª +š wntMà•ü$Öä XÁxƒèòœê$XÙOD…Ò5òoÂ?!ÇM.•‹ú”Q`Ή3H‘™¸‹{£SÛ[öï(ìQTöHq’»y¢ÛÀ4rN0;)d¡â8¸ra÷ ;• ð‹¦ r¡´Ï/ÚGÆ‚'ŽÛå€Åv&p4§4i^ibllôáG[¯ñ³“ •åì‡ø{@xÜ@HAÿ¥›2 +È`âÑð„ÿf¯WäŽÓ66¹Ô2-g=V˜ñ=£h¢‚ bg“¢ß ¡Ã?tNŽíFèôYEYÔž÷v].P8‚ÿHEdÐo[Ì ˆM +`ã;›V7VýaTä$üq—-kÀdïA@ÔõêˆSöEP¯¦€øSma%ÀŽ=–÷÷¶U*A»»;;ÞGÀÃÖ¸òÀ1™eð—2´&äs'øq賃‹„ùŽêíŸ]½ìãß쌃|çskëNüí˜P‡ÿð,×Ë#þÞãÚçA¾ýxiöÀ›œŸa?¸ ¿ßàÂúº*b¦=˜9’„~=yˆþ6úÃnÈ] + ¥2€`¸DT¼ä3l¾ ú4‘‚!Ÿv €±iž9¯Š‹ªÃæÖΧÑtî²[±ö¶ãÉŸáà`†“ûĠÀ“†óoňM˜«–OUêèôã˜yy¾_À÷ŽO§é'Ãöµ6# †>7â‹tï.…l¶Ç¯í·Ð=äNå§RJõ»{xqÞÅ•ïúDÏàZäJC@§ª|³ÊE­ù÷ìŒ[“f—'¦Æ'Æ©ïݽóéGàè?ÿAõhÀ?–HZ °Þ¶<™žôwâÞ +åÁNê3éDLOÎ7<;3q¬œ”¼d¶ßò’¯ø¢|q¿£…éð 3)6&DqX[ÐàS[JG£ÇXà¿›^¼x®;‚B H¹!W ìߌ‰)PÔæ°øuöé'ŸdÜsJ»Ûá1æ&T¯š +”±þ7¦}ÁÃ[ë°ÕØH Fyº»ï* øŽx H`Àï0'g% Ì¹ÏÀøøƒé<*„¿[\[\ÏÍ:%ðŽ€î'Öÿíëîá®ókïÖ!`@þp@1ÀŸëÌÏÏ,~ëžÚpvf&gfÐ.€.7¶¸tMâ5þ*ÿxó_~ùe†ý$’h)€ÕåJc5 €÷Àdýÿ¢Á›¶»}PÜ41mw +û ³•h’·ŸuÛzœªŠ•ÌL½¢zü'T*Hr)ì@‚'¨ZfÝY·jµ2±·=9<ºã¨€@æ–ñìùílУw?»cȆ sAhÁÿâÿ#gŠÐùïԑƤ°a|l2yÌG¬=ãéÞ÷G'Æ9Ð#eì£qžòÔãiîý;€Ë®Õ–°- üýË\Õ +ðåšè÷>C~ÓœžG>~òøÑ(zØa0DÑÈ¢:Ehy¾¤» @µªD¥o¹ñuB˜ËäkIl¶Ðx¦Âá‰yîÍ©”K.·eèLÄ6ýdt&üg°“¬<Ç‚Fr#I<Ïñ”ˆ4€ùg§0p¥háÿ“ˆîÝq¢%Ŭ`Úe¶&ƒxiAî­ÁÐýÎn¨̓øÿÝm[övaqª*xf"?Á ·ŸH@çúó‹‹ùÙÿsýÝ¿­ƒña€Àý3@}a}í]4é ff”ƒƒsƒN)¾s ¬åó?àþ9P/{Í/|»>;?ÃñqüüKƒN/§@Oçû»æù7®Þ3ôk¡B8- +à§Èl¼ø1SïãßµÄ ¼þ¹™ÜL KÆ5*÷ÆM>Æ¥ Ãáÿ2h5ÑW×ÇY1¨+Êþ'L azb¾9–›­;û_°ƒa;ë9Œ8¥ž)òŠJµV,÷¶§F'¶âÿ_æþuÅ­lÛóEÓ3MÍ™™ v@Ú.œD®° Ï! ˆø°¤ 2Ì\5k-°Ó»Ò”Y»vÅñ¤*“ wPÞA!n„û´×v¥Œ“ „Mwݼ€€•À]£€X n½^ÿM _¢ïð5*Š\G'®€þ|”è$$s6æûêÔhø×ºe̦kiZíÖ1½øö»oÕÿÿ÷wúŸ@pzàû÷IýE:ú(ÚÍÓ]¦š>IQ#Ôè?À?ììGä Ûyâ[ïÓK  v(:ª$EP.Åž(.’5üŸÄ]wñº–yô3ÙþhøóC§öú—ý×o¾2Þ—fÿëŸÿý¿}#p±p”9Fø°a'?GúípÌ¿ÿû¿;öŸ#øéáÝ;ÿü§?ýó¿üëÿËQFHiýA\ ¼‚ ¥MÅ„’Á¿8ðé§w.ÀEÚ0Š^ÐtH àÓwà/úß?¹’(ª|2hí¶ú'Æs—U\Ì]D§¿^:¸WáG@°iÌùjŽ0-YwŠ‘àPPC×ÓÙûjàµú€L)U¶5à š&xP œMàAEtzw<·H2 (§ Ô :}§xˆQ\†óñJbŒj¯ˆNoNõ„íóÓ%®ù“uD¶š¸0¶;qaÁ3Ûª¢œºbîÔ6ˆÂ¹³äƒ¸Š'ø”Øþöö‡¬t–ßdŒ¼Óôb*>ÿý€jÝÞI·µßn÷³õåT—ìL|µx׫ùr¾Z…á7“ÖӨà +\Ív:G«øþÈË÷EÍ™0_¼¶É¶ÔØ#ÜÆ³ðì*žÔŸ¤¨É¾ûVàÇÐÿG€€.À# +Þ°SãÕ’šG»’í7Åœ Î +bS ‚܆à­q[Ñ>˜€¥õÇpP0Ùã`ÇOÂõ f«ÇØ€Ч®€dýM—úŸ’ÚÿŸ7¶ÿ_ÓäþOÑkïáÃÿ†FøãoþU¶ÏŸôè1üÿDìV´#íÇŸw€¿G}óð+›ü¿ùЀ±À†|õ3 Ùà’|/;þð醄ý@jxnà= àôÿª/”eFJ&C\Ü&<+ÞV¶Õbv¶^¾Ölhôµ"†põñð—¨ü0Oµ¥íP*·zÎaH;•31@ÀXÍV¶äCfc'8iï sÛn¤)¥ ë¼×3%C‡ðcOù‚yCÉ̠§.¨ãDD&TR^(£’¸³­ÝÊ÷Ù)j@O–ëJ«<[@›Á q ?èµÞ$% +àW3uíj à7hRj4…Þ_¦D}SȯJ[ä`Û¢šÍæŽx´ä,*JÍ´Dø“šJø>FžgüìÌ +>DÔ1Ǧ]1‚«!33w­ñAF´Ñ4t/RëÅs™¤ÿÇwè¼ý7 àåw€G’îGj´ÿÀ&}žÚ·oooomïïíBpßpàÿ $‰dáë#hXvÉQ—·ÒŠÐOƒþ‰ã‡Á,O$¾Aô‹ÄmÕ}þø/øíaûUÜHúOÐfÃOã÷m à7-¾JqøD¹ú‹ D¾Ù øçþ悘.×3 ¸(š(&õ_]¿`W^‘Ú[ H` @TnbÍ¥6IðàKÔ +ð£1’+É.TÅ‘êº6T0loToes¤)&1ôyGDò"•3YÔãQUºlÀ:BËÆ’؈³¿³ùïtY—õ|idÙ(À sÐæÆ˜S.<—„^-æ]¬[}B|En]ØP÷óðt•rç¼°){«¢ O|r–ªÈ™~GMÕGö"ß«õZÏx8®_ç…óÇ ûÎ º÷ v¼Ã~}?€p™~[ à +x°½~ÏˆÍ †½8±‰åA–ùüÜö›T ño98PTŠr!_T¢ÈæœÉ|H8.¹+ 0—uÁ´$^ãþI¿{pÈ{/@«í¤´˜þoŸŠº±ØyðI”aþcί†„qkží"] àDp{kw{oo÷`_G-Ö Kë!¤ÚjþåaP8îuñ Dpà„œê¾[p¹@LIÅ¿ÿ›$÷OZÙ$UZå?¶¾ù +k¯»/ãGçíÙƒ®ÿ«x üùŸÑ{¼a¤ßüóE ÀôUÀWM àÏb_\eo¾>´·›ƒMT@Ø0í‡4û/R¢ÿãû^ýØp Ë”C·ûí½N¯Ÿ áÜê™Ú¥ÑU••åýôoZ<ä'ƒÜaŒÜœ©\eÖŸ£yK“„i\Ô]pU¯¯í]\‹jê|3ƒÎ~;ƒÛÏ$YP¿Pä²ÛîsŽÕ&%CÛ$˜€šXŸ©1Ð×ê“ûÈÙ…æ—³YŠ{®Gr*¾2Xâæ@A3ȳ÷»­ƒw¦L)ü›Àß? Ñþ Hz‘ºÝá ‹9îGÓ¼Âë± °5Þê¯@í£®dF±3žŸÒÀàz ‹Ž¿l$€äTÚ+1F³EYWÕ¤†&K°U£ ±¾ý6±Ç£u^#‚&ÞWH©BWÍ«b‹òv‚òiŠ=Ãi[`ôkWë°®H±0³Âô"§ñ©£ Éd»6èÃÍ„ˆm°®tvžú¼²ÃqAìÓÉHàÙQd(8Ø/“ Ì¿>ð&`'é×ÇÐú¤øW9€±ÑˤYd.dÒdâô¯æ³%ÈJþLÙ{[È‹2,, CÝyúõ|.Õç7€"#Ë<’µ¼<;[êp¤ TV56h2Zð2ÔeÃòvp? +ÿðòÕ/e‚¸rèÝG@hÿð>ûíÚÇé“7?¿i €tH]‚í ð5ÀwÔ5¬3¤#`™tzÑ9ðë€c AÿäDNQ¾¥¶d9À&m¨?ÿ—¥*Ù(&Zúçÿ¤íOªíX¿»š|7U‡º±A +2 @í¯0€6\a¿€`÷?ÌÖ«  Á­ßšŒ›]M¹S¦Ž[{­~<UÕÜV½PæeÌ*…¨(Öréä)Ö gXÈTq>CLð8ëa8©æ3ŽG)5/HÀb6ÇF;ÿlš°f^OìªÓ;hÛw'ŸD€‘*«QGZë~k.UÁÚyÓï@Õ4¯˜_dØ‹’%ì››Zd±‰-~‹Þ-îCOƒÙ +\ë8ïÔ1qN +*@ûKãˆ`Ñ |€Ûïaæ_ã +G äñ2 +p- ØEŠù¯‡û\gnt¿y0Jˆ2ŠÖÛ¨)c²|9wç"”Ó~©ü1^‚cç°2˃3ãQpl FŠ@›vìlxu"Jö»í#pºïô)_Ãô?Ÿ& yùìð¾V€ßx“\»öäXË–®l6Ú~Z +¼¬fÕ²Â}7ãó§É~ù<œÀ©u}ªëµœ×¥ÓýÀÞ(÷Ä"¡œb-3ž’çjªç….å´ÊÇ(T«ÓÏF£D°û}Ôÿ±ðô;1àù €kLaö<`ºR€¦ @ À;éúë¿çŸ.àÔ ÛÛ Øß‹qÁÿC»yØMû@‡àky[úFlÙSH<ˆÈ€~ö øæÊMŠ€Àý)î‹¿Ð~SÃôC·ÿåßÿõ«‡ÿŠ·çþŸm$  ÒAM àáŸÞbèÿ.À›1€÷´ õbš™¿‹Ä3þžÿdr/’}É«ñ×{‡½á`’aϱ(æ ‡Yn-ãFÌQ'îìœÅ$/".°œWÄŠsÖçÕ 7v:*‚*Çœ#€ŽÈEÆÂfèÙ<·[þää¸Õ™%Ö%µË"xʦ|]Z'‰ ض¨pÔqüÉè€Ô&q߯úoÔ¨)÷¤¡ºùª?êmg=LûŸÿÛ¾ûð¿¡Åÿþ¿£ÇiЏ‚— ÀÉ>.€1à7ÄDÍ÷2ÄKj÷+À›r”¾úöѵFå6)¦Ç™4AÀ¼žU󥡥þÃxŸÏ\Ÿ__Rµ¯§Ãl6ÇÓd—Ãj†“lb'R¨f1„V-×1%/F0È -J•ÐfyGœôÛ“†iâ'RÌø½èãßb£¬V*¯óîü®šÅÑrÿ}Ù8 *rãsô±æ;‡ S%gd‚,àkòðÔn|þ‰ vÚÛÛ=+ç?ô>b‚x$*?joÁ×cøG_;kº¯^¢¸H×>¦\SCÀ…}¦`Á¿ñÿoÿzßæ?ŠÜ0€ÿ½±üÐÄ®0€˜üÇÀ?§€í¯HF1Ã7¦f\§¾*sµÀeÙ]•¹Û>ÜÛÚÞo½Å”dݹ®ïßÉϲÙ¤²*Õäh¿Ýï²lj“RŒñ Û¢­ê Œˆ¿­.ÆT|…ÜUÙ(Ë‹"Ëœ„VËmº‹õbh0jË‘è¸eLƒâ4=(^6è´:¹{š©šg‘F”¥7š”NSÅâ™ùãÊ'ÀCvcÈŠûôJÜ´ÑÒ³k‹ˆ{£ŸhÀ¹€°þ«ñb<À) §h¿t Ôhl½ \*nöwö¸€ßÒ +ð†8úýúµ¦ñÚéo ;¦ðúC§í’ÏZûø¶ã©Ãˆu@–bi múÜñ‘GáüϪ²²…¦ÃÇÑ䘣ÝðA–µ°·‚%ˆu1)\/¼Õåcçã š?ט{ªxõ—çìxú|ÃR+@ãHÚÿŽý8˜Êu¢àÌ`) +`çm»ˆrÿÅ€a E °÷1d  %©ÁÀ¸ÀÑQëk8BŠl’7.ÀejÔ_xèÂßüç?£Â2ûþÂþ÷+ À5\bÛ· ð§м–ˆxí`x{lÍ”Ö(ti¿˜ÙlQÖüZæÑ#ŵªÒ@·?tLì¤âlázepíÌHø¯a老ƒ·ÆùoRaϺIg_›2-ÈR‰:#*ù™¢Ö»Cñgc΃`gp ±žå¤˜UÓ<›”EïjñzqvjGF7ñÛUƒ³¹ûÖ«Ùr1[ÎêI1ìtsŒÑfž6®ìŹF]ŒN™Í€è˜¾—JÿŽlS†åAèšd,DÝOl—‘Jn«ê‡.¢R‚À +c`0ÀÆñÌõ”œOm‰p’â½[Ÿ_Nn÷að+û˜)Îø 1€‹*cãÊökxߦá‰kbOGø»Ãl\M¸m&T"_vº0jA™c¨ŠAÛÚ>øúTëbá0i{|ðvâ9pšôöÈ-'jÍוóŠÌ+Gåã~§ýù˜äNÁIJðâÙS¼hÀóW±.سgž_ÄdꀄoÀïnèýóÏFtТG04`[W$°%`¿Õæ3r¡þ­vtVÝ ˆû„Cü-‡ig°„MJ¶Ó…}Qàoº¼œý®2Ô> ¶†ƒ'mÉë7>ßmõŽ‘aûØSÌh‰0Ûj XÉØuÁœ{%1€VÀ“·@€eû{@<^óœÀ«i6çr0€l‚²æAQ>B‘•o¥ùè—b±^VÃþ(Gª\=¤ÌãI(Dø£àDê*N¾E¿ñ’ýTìdžzG˜à9¶(RüÚÀðd(p¨êä”I7Ø¡£æéÆ€)ç&™£ùï€mF<.ÀIÑ+8`ÿÖ'—rò÷3€¿w,@J—ùHé÷¼ + ¿5)²ÖAÏ‘ÍS-tÌv¾\,Ïø×b9ãædŒ`p–vz¤¨5H:Ž}‰ÂAuÝ(tꚇâ$  ,õJ]âØöΞ:ì¶'ºK "=ráïgÏŸÙðü9 à¥#ž… €ðèþ½6ÿëàÒ^ix'±÷†Ö‹|ãÆÍO¢7 #¶E +Ž Û?ÜoÙ-Èáa±:‚æßÍ£€Q]çÅêž6Sâd MBÉ«þ‰˜®–zÒÿG @Ûåþ‰|#ø— €®8¾uêzªƒãöî­߸ t‘ááèM@™¾~›T €øé’»LïßÍÞNê§Ç¬ÞHh¬èì¶{Ü«€@ {B²¬ÀçŸ{+Ì‹Ùê뜌úy^cÍ! ³r”K’-ŠÊõVAFçᯇ…Q‘R´w¹¬Š¼Ê³~ë¸t….noRX9Pl»Â\ PÁT¦ù·³Ÿ àÔ J®êÈë¢AÀéÀX‚o1€+°wë²@”±¬9ç·ÅÞdú> ð[{^‘Æ>"PBʧд¬ÕîÆÐµì^; p§ø É–¹Õ—G¹—•ó1:ÏO°XDxЙÐðz½”¬ðQ”T ã1X-õ5÷¿nu†Hãdœò¢ãò?úøÙ³çOqìüÇŽg"ܹð®ÿá© ÿw!àw¿¿†õš®@’€¦? ¼œ ýw^RyÀÞþ.n[Ðäà¸ZjËùCÜ—€?~Vÿ#r<`“‚4Ú6¯ýÿ€ýÿÏþ/— à! `\Éš]£Õ@9EF øø à5bþ6@ʧõÿ÷ +8¹do» €úú%Àc\¡”6ÇøÛ›-g¹1€á8@Þ,ˆ5 +¤MÓ°ÙX±XLŒ9Í«é8˱6Ô³¢à :‰ûˆ-í ùŽqT;Ø^Í—«Öh.ÿeýýΡ,C7Iz‡ v|ú¿a¨9‡^€€·À_߀_b›fï9áÆÿk1€ß6`SA—M’\‹ÆR×Àœ•Ã¥†Y–½µ“¨YeºýÿÅBJÜöÒÀ+G`õ×ÎSNålL`ÅŽª¬@ }4.ú¨‚Áù84@B!lÓñ ßîŽ +§S +[5†à?}úìYbß~ûòåó¸ýÏž>ŠÕç¿}|÷΃äþǼö›Ž@ïcÚùý¿þ1NÀ'®bo€[[·í°… /°·çð — Øßue´GvcùÙ6*p€ÍWý!NâË!z/aØçÐCg3pôø&q_ô'þ> G€˜Æ¿‰4{¯]ßêŒSgtÓâÛ0Ô·aÀßË®Ÿü_Æ>Jóïmj¸,:û^Ÿìº$r£0(ù‘Z§éUû• +¥¯§æLëÇãÔ8Ò +¦5·pÂ+${³†EÆYÖøR«;å¹6IÑ[˜Ñ¿;]ßêesŠˆ[÷W‘ëè C…%¼à+T™#Ô¤*q2ÜþŠØÎÈŸeÍžÿÅ~dàï p©ÿ…þÿþzr&v{š·[0€¢œV³Ðšð•“ÿºNš•%!`'F'ðHQ4f@!I±ðÁ¨•^·.Õ/`€HÄTËzxã± ¨åEér TàéÓo_¼xúàþΣçÀ@„?¸{ç~b¶imbBÀ;é#TðÆï""Ÿ‚ŸëpdpJÛŽ@‚}€S<Äüé  Bn$»Á »ú²†ýƒ˜f°IIó“ö_éuueëéw·€F®ÑÃ÷0€ß@ØKAÀŸc üŠÀÛÂwwÅîdû›ë_W]‡àæ…mÅ>«Æ@(¡ñ4;ÐgÞPöUt$a_]À í-7°oÈÁ¡«™=‰¼@¼£,‚ªƒ/n‹µ‡c~óQï°³s0™-Ò/VÀÓï¶zã ¨^9Jð´~ççp ‚Mæhm03éj#ê­ÌÁ?x»@€ßxÏãtø¨‰Ü¦ÞçMŽÅ€œiÉP>@”ÀF ¯Þó4VÈþoé +öÚ,K9?“7Rô°¾«Ev—X4+Å©R7ݺ—eývoê(l|“–Ûþø¯ÏìÜðG@xÊ߃†ˆ×á tbïb@b^ˆóGÌ·n.¼µátB°çt/{ºáØN€ÑÇÌ«ðþ–ÔÜDÑ€àbg•‘Ä/‘š6€ DúU²÷+Àoˆè8ûâû€Kõ¿Ëš à/1€·Ÿer¾óŸfáO© ?³¢sÐ9Œ¦SòéD ‹×öÄW?øÃ´¡É2¶˜—UĉçÎC£1­9|M!:$ÎA¤ßÈ¥˜…’ðœ=›;”¨^`Eú­ÎDûFR6¤ºïdýצ7@äÚZr’-¨Ñ¼‘iãÇw€3éýø•ýØIú_¨ P€ÔXRÕ®q™uÙ¸ˆa@ÈE]ØucQ¢±ÜÏÁæÓùêÊ™‚©‘3ÊT`©¦Æp||ý|A@!VíÍ/»-ÈÓhÿeyÿ’øý2øP àC wÉ"ø àWÄLï< ;Ò_,rq‘ì—°®pp9$q†þG‡rŸQgŸêƒúΧrrvºâÙPfÒj6ç.9Œkè¸â‡þá= ú§œËÙ©:®:„ÇFéq·Õ-´1HŸiIÆÌÚÕ\_d8ýýBz‹؃Hó­:K¡pú6¹dì>[9–Æüÿ À§1Q³e àÊÆæÅ÷ß± hªæE§=˜ÀÆ‹9> Ì òÁ–¹Inn›‹À È6ðÆÂïQ"øü>¿­‚…ˆáæQ¹î¥Ä8‰S1ÉÝþtV–®³mŠŽ@àú¦çÏßи6 @ R @õþ Ý+ñÈA>ˆQv °c`D]90Á€N(ÐÜ‹Æ +Ø£8vß) Ú¶v=ÀÙ¯šäýP K¸Z?—þÏȪ« ‚€?ø• àÝçá{ìŠÏÆøGÒÿ[­=²ìŒÀ³åÌÙ{°}J“=€µ{<®òŽ˜Ïåú +KU*_6¢Ýu1EÌØª *R~>ä1‡¼ƒa5ËaæY¿ÕwøÚEÀl]¸ê’ý–´;ªæçög"¹»  Ì EvFßœ›w‡é­`“#‹”a•X‚ IÔïÁƉ†Êt&<Ê–Š'ªCé…ØgøÁ£Ô;>kyƪþŠ˜Ïýö³7ß?ByI8Œ˜¼×êgyY±@ÂjÅ ÞŠ½æ<½&ÿ¯m‰N@y½´×S6ƈN¼@7 qTÙy¨˜S˜Ó4Pȳ0\Rˆb<¶{ãbæª +ÑqËn€|ûØàýÏ€GÏLvPùõ×øÇß{RêöøÆï$6Äá&Ã1<0µÜÞÀ•ß”Z„]~Žx¡_õn~rsÏeT]Öa^/Z0#Å=õÿMâö~ à p¥Àßxßãl$kóß(]¤åz¶^”íƒÎ““I^ÕNÞ!ø7OëÓ³¢–óռ𭰤gH_™fÆ‹ié +:6~I>$ךåâžÜ)pàMYLƒVOý£Sºqƒêÿè +"G"³é/þ>ݤ¼)F×™“*V‚š@Xq[1[ÓŠ½YLt넺ÊGcVÛªÈ nyú¤Ì`¼åÄ©Ã<ǹ‚½¼âx +X×XÄ)y*`ãÓѸ¢ª¸£ Ñòë[Ëy1fÇ8Ï{7›l¾®>Øæq?J±ëãßÿÞbÁ“ðâ]õäÉa? ª/¡m¥tÖ(ðs8~‰Ã¶Ù”æ3{m¹ŒpeøOòuz†''Rzvü +€õİ[%|­tðV¯ÔÏ(K=€I€ÐÿÇ¿}öàþÎŽä$xðø[Ò>Ž€õ®Sß<ªµÎS~ AÀ'Ñpëæmã18 µ½ßf S¿¾ñÕ@![¼qà­›Ÿü‰a¿V´ź"—Ɍ܀Yqß«g¡7ÿ¡t;£ðpÊÇx‹Æ(v“~'™¿é”­ƒX­,wzº¢ª]¸ÍÕmðÏð‚ñ¼0ÿÐ,›­SWwqù’±“Xwm’ºuÐëõú#»}ÎãÖÅŒmÔï9u~¾ªû·š ½?ÅS\}”æÑÒÇ<ùÝ‘–:ö8Ú³„ÛàÒz+Õ»‘¬BYŒ`‰˜» Ø'd‘K$ U²Ï-¥ádBš¿ùy³R£ûìKâ, ©ÌóQ¯Ý­ª+ƃ‚ÿˆ@ª’b´&j¶#ëùº½‹€ØsL1P6|s[«€ÝIQ~´ñÃÇòÎÉ¥’?¤#›B͵:ÊX\1º¨yUwazÒ5 Vq°Ö‡mÏ Ÿµ¹æ­÷X¿†ë„§—k‹øÅƒ¢ _ÿ=ÑeÃá<óÙ<ÿº=OòÒN€&Y;% {‘¥©ËTÁr5Cý¡”¿ý{Šj*GÞ&c$ÊJ>Õ 2Êå[`BrÎ^-€ ûVÙÆkgÀQ¯Ó›.g6#EývBýMöüÝÑÀxþØÆþ‚\èÿ•À)v^çY­ì¬~Ipãs[ƒè ÑAXHnAª¨MÅYM`êÿÉkŸ¸¼€SŠ´EÔ9º2ªªéyð»ßQ¸QÖ¤¦2~!Ý<ΰ  +Ü¡íãá8 OºöQêO~c+ÜŽn¯çì-i"¢1£,?ɲ|šMÃyÊ3~vY³ÁO.zÓ›uÚûÛ7nìµÚÇOý‘eÎýäªÝ˜&[bb^ˬûaHÏðÆ“¨FÞ5DÉí>F²Æ'íÝNo8ŠiëRa‡æâéÎô—!µžƒÅ˜W¬؇Ylè/4'H™c»HÃvH @ËÂÉüŸ­2e32hwJ¨ò™•¾I±JßG]Ot0‰ÄïeèAzŒÄ•ŸòëìÿV)ô¼Ñù?‚‡ÞøÈ‘°©â8PG%žš°NÍÅ5_kÉÎB¬ë³6¸ëï…ß?ÃI…Øu»šÁò/8ÓôãÇìè<~ü\$xü,…_š“ZþNrÿ®ÁõM)¨þÂÀÍä nËR'aøÌ@”mÙ¤ìGû ôÿc4Qä8áþáAؼH”ìï¸ÉÇñž*¤y)_¾>˜ŒF„î½¥ –äÈŠ*³gCÌl’’Y"ßfN€â”ȸ=ý*ZݺÇ%|l*Ûò°lu\D< a‰´N[Û7ß.Î+OÑ|ibêñBu‘ _&T»ÂŒ2]šÿKà¥8aR° FóCçÐ_ÈÀébæ@ÔÅÌf(ìüسÎð‚@ +Å˳9QƒÄ5^sEËÐÖª®&ý£îtµ€ð™Ðþ(r)äÿ2ñ×}ói®Ô „¾À¼Á‡¿ú™Ò›ß~Kò¢WÎvó}ûÀ šÝAd€+J ƒxÊtSæ?vÌ{ÓÇùQHq€ +ôD%;­þŸô„ÀÁî#K¡Ÿ…ßFá³ ˜SÈãÂ~=3}šÇÁUÕæ«Zû~;1‚]7d +Ž˜¯íYlâv5wŽºã +š`§"ÓŽœßῨí÷Ml xîÓ…ù'Q +ïµÿÍîôKôˆ6HŸ8Mø'7)xº*%¨1¼ÝB³Ä‚…Db7ªÿì-ˆ™”0Í-vÐJ#MW ûyo㣨òÀ›m¯l¥ÅÿÙ e¿x‹ü‚fjûGI¼03ÉŽ¼•pâUéô2ð;í²J‡óÙ½‡ýân::C¨ÐW ¢vŠ×?žsà<æ£,ª1ÌÑvfüz +Ñ+ïŒ×b~ÆôMë%ÈdüS«WkeæM,ÒÊ$þîÚïAÑ„¡¶ +ä¡^A…xLÞ©áý÷j_£Mð<~ˆçøü‘u~ 'PÚG6‡³+¾lJã=ÖÒô&þǹ*ssÜÇÚ¿üN¾ò;¿ýž/ÐKñ ÞÓÇeJOÃãÜøÄôÅSò¾¦5¹¨!öˆ™ +‚"9B7¼Yyë!þÿ–.ºO_‘Ô”ÝͶé÷Æ9ì]q5…b_¤ÕÙºlïuŽ0„þ³hÈÆäÛp&û_œGèh]ד¼^¿– +L*<~4‰œ—ÙÈáþ+ÇDˆ€3¼hŒZGë™Á$ +~±Z.&Óq·Ó/ §ª8I®d§\rl_PR‚ª5ª¶Iìò«5ˆÆX™:Yw¦æãצ‹Ãß:ï¢]zÿ]Ó^Ë=T9ÉèF 7‘”áÍóÞ¼éY6„GJ†ͦëÎQ<)qÈQ~t4fMÏ]@u“Ñd—c›Kã4 ¨Y®éŸ¸<~${¨Ši“@Â"8P·µÔ+9µ¢W¡šõ2ª"Ϻ_wshVÏ‚ˆÜÿò>ÆÕÿ pÿŽïÀ(÷[ à½)CÑX3Ý»¦9¬çE JlÆ[”"©)¿´ ŠÆ)¡¬×>º˜_0Þw÷bJ‘x]‹“š„ÅÝÀâD9¼Èemú¿7I”× Í ëûvâ lYààëazÂ:{¿`ÒâöæÍ´¹b|ò»!0,UØ¡xûýïßkPø§Ó¶d,ÕÆ˜^$j÷2a:VU{?ŒJàëúa㣻 ªDœ;5Grñ19ÒƒìSè [(ýlVgðpð¡—óˆbL¢g ïF¡l_ã"¯¹ÌšÃ)úÍ~S« ªló¯£*Ø…húÆO:‰€¾ybw;…#wwˆu—U§Ý£º0yJ?*¢åúžBïRæ¾ÄÓÒÙ§Ú îÅ´(XM©- ?Nã²€óÒPtt"€ØA¸J``ÿ©KGzäê«#jp³E÷|yÿËÔ?`çŽ<@xð8iþ&!Éï ÀÎŽ?4 `£HÊëG‡#D<ôâLõçÔeloÊ;¶é?/¯uS¡IeKÚÞ3¯ÃkÚS¸çbm\çÖç¶:X[| J×úD¥bGØÿ/ù„ˆ[)5»ßN@Ù¤·¿_&ËCòþûá¡ñ©(H›8ÙáÿBÐ’L^IŠÛç Ìç!S ñß(]$«{]tö»ƒqîìþBB8ðü²Ô¶,`wâkx±IÒ5ûŸ(ìa”ô Ķ2Þ¿jC?Ì#.ýG7ª°Q0^‡×Üa²F¶oc¬x¾S{¶&EòFå7&bl0¥ŠÄB/”Y[¾ùÈßÍÑŠÜL­)Ï PÜÚÀ{lý‡}áqÚ Üš@¹tWSd ºRMVc:u¶"ãÈ úÁ·°#·Œ„\IŒ7‰º>_çG{í~–—Ų浊é65ýpLá†1Îpêbb~¼Ïq†,±U …³"s¨§y…¢¯±üv"Òî/Î MŸ#F 9a‚&¶œé4Ù°¯6ÉÝ»ÖGÄoÓø ›rœr?"º6ìÞÎ^ô +u[Ùtsá?lºˆ¡Sá Fßjç[£˜Îîvôõó'.áÉ*¨cѹôÞ.¹ñ73ƥ͇7p·ˆ›5¿Ç–{C{£›Š;œÅLÇCÅùfñ¶ìñÁ£;»Ý½ðùÍ=¼™P_™;%µêuN&híw ³®:Zn*éÔÐ €°œUyQ.ç î"j + +Pöì-§³ù /¡œF×"}{ªˆX‚ñ(A¬xc7•n§7õKÓ fê¿¡_Þ¹s÷Þ}ÿþg0÷ðšO +ÿ¶ö'ý—ÄÏ|ç_åÑŽJ‹Œ]Xö0vIKÜJÊâ?•¶ðDïñ&Àhôÿààõ)Õ:¼rƒÈM+TûT¦$+þùr;T.ÂM „£>¾SO*wöů¡Šé;‰¯ñ-ýή[ÉÛu“=PŒöÿ!áBœÅ >(,‘ÒE$sæ‰ìº#%6ãçíí[7?ùøž¨>‘Rñ”ìÓ°.ZÝA–Û H ;±\:R">¤I·39Ï0 ó";¶Ä9þÄé8àÔb2F–ì'±p2 °ŠŠ8œ²Ë—³I~ÒêÖr{Ô™Zÿ¯˜Ãáàæç·wcHÄß9]Z.Aŵã €´ú ˆæVhŒ ·ß¿´]K +eâ䃶õí¥Ð6ËT»}®%ܰÛ/pÈyÑ`ì=Ãk;¶,Æ—ñ¼ Qûé˜è_B~<%‰OîçÈ›—Žì»ŸçëÕ)ÖÛi=‹º0T[­°ûŽ .fi60 {^­S\„’# #¸öÓFtöj@`U— WQZ̨ÖA{PF¿£uø"sÕÞÿ/ãýÎ{w€{ŸÉ|5´?Tÿ ýÿôîÝ„@üƒùJaÕ¿›\—¿Ã.b‡×¢PIlSkè!Ú¢ p‚4–ð!ðßáÇ ÀÙ´ ›Ž€…¤’[‘ÿ```‹4%ž£1‰ô¡—Bm‰û¥CöÉA\ìßúüc#Ã:‰7%¸j³ä@Š34$a^Ð’ddüæã}É¿bË=”Ÿï)ÞWR£t)¡£ëº»ßäN1·û]ENfpfW€s½µ_+1ŸM³±ËÑ8DÜÁƒø–%>âxПE9+cš ,…Òˆ~Ëø8ÅÀLù¶Â¿œM‹¼ßîÎüžò°^;ZÃäämí[Ÿl£*ª‰½¸c’·#;ZDŸn¿:éÛ×G1ï [G®coOowù³û·‹I{±#'‹S·ŽøôïZ^§ß[㩜ôõÑ×ìæfq`§ó57è¥ñ޼)ç8í_í²ái¼±Õ:2fÆcÜɶfÏKq÷ÅÁžÜíÅÂì=êH7Nná í¶ºÝ㸨ªžh‹²ëÄéÓrA}Q'b6¿-ëÓÓÕúµ­®x8pöþG“€=+ìY3›ò‹éÜÁÒnå|17ffÇÊ€. õ–»tëpý~±âþ Lh¸)úÀüA€/ƒ)…R‡yORwvî¡ÿFšô‡XÐ&ȯýUšh¶(ÀÿÏ3€‹í8(èxЉ·bN^‡×¨…H1»h+†Þ@7ð .(Ô›S9ëP®Üd°Çoa@´¨´h$V9úÝø|WÌG½›°‡ÜÂ;ˆèí8Upñ][á»K¡š‰}ݼ`Š/yjœËQœW6s›ÉNbÔSØ6¸;Îc²C;òÉÍfLÄEjÜÿH¨öùºî¶]\q‘&”<[žž:8œt£CÚñzžú“2Ÿd“á`œåv”¤»½q1åûpd ÚžC1šÈ@‚WB–ç‹ÆÊ¹EæåxÐêÎŒ*V‡IØ.û5ÇÇn×U‰Õ•œÙ´ƒ‡UàZh­ â{Æí±6ʯ!v¼VX…K&cH¾<¿›ñWï‡ä~°¿}óÖA·ó$´IÔðE +3]v÷ºý¡}K‹PW;û¥ñ,XpZœâlΫ"ïgÓ2 ÐÔ“‘ÅÔ™¶ËŠŒ³™L;[œCþí=07$ Ó Ùr]Uu9q,€­ƒp…x%1﹆ãIwwŒCáÔÅþ°ïrl †Üìdh÷H»PNbØÁñ‰sUó-õô<é‡'ý.þÔ 2׃âþOœsuè2‘ô³ï¶çyáfÙ¨Þ`0²ëf b†VŽŽú^œ<Äm8ñ"ëÅÓ’ÔýÏo^½ÇÅÚƒB½Wæ“7{‚Mqo1–±Æ5ø+@~¯ÓÚÝ"%°ü櫪×~âŽ. c²j9@€û‰>(.u!ó7•žê-ªO 6Pp˜Ü4Ïí\ìêö队®Ït ×ë×v&#Ù Ý]fülãÐ*tüp÷çÀŸþô§ÍœùÁ¾ÚùG)@Bˆë¼Žþÿñ³Ôèú•Võ_ðøùô&øøã÷1€=Œ£Ž—  )VŠüî ÿ‡*|_ôîÓþ$pó‚ûˆFÔ ›ü–þ´akÐ3lñ!¬WýæÛ`WÁht:\Ôæ ÈÙϱ|ü9]ó#ìs“8Ló²MŽ]+ÏE¯½@ÿ'­Qä'ò6è:ˆ™Ä†¸(š¿j ú'?›o²Ð>ܽµÕæaì¹IÕ„jžž•GûN2Íðú¢úI¤ÉÀúÌŽá•3ÒÇE>èC0€¤0€p‘} D>ì·;òÄÑ_qF ›1((µ)ŽZ¹ØŒ3Íô<71€QJˆt÷¶]Œš-õíÈFüÅ”8ªÖØÎÕÙ0S¹NúYèt2dƒý#˜‰—±ËE <ß%ˆGCG\rï°óèÌ^Úüœñ7e£ÑdÈ1#»n9›Ž¢/7¿Ä%&c´œƒýÉÎÜ#®Í-È;¸ûÉk8±Ó»Ž@¢A–˜±CÆB×Ù=’u3æ\qœ¤ÈÆ'žîôÇ}&‰ž‹ÅkÔvµÎ»­Áh<)PûÅÚÅܬ³Èž;¢/ÀRýFuqå!ò3´"á¯fµN›ì¾† @æ0ñ¸eg€<ÿ• Œ;W€d`é /y^ûG'3û7¦FË€þ _^ľDÿCñ¯èÿÃ4aö݇_]0 ŽAÿÿ€öÿñ3’öÿV€Pð_L`ЈÈýû÷ø')‘Åû\Ö]$Ã;ÿ$8¼fQGríðÔ  õìŸðmèrâÖµŠ]ô1ñMð¦êÝÍ»g 5Û{è0ä[Ÿ²uÔë@òPó¶(ÔÕS‡'§¸Fÿ§žS “hi³%Âü¸‡Ý¿ËZµD%±FµÇ¨av4u}åqpâ Íœ7r¹/ p=28ÂNz£>Y;¸½×IOt‘–Ôãæ#[«.7Îí[¢ÑÑD)Á°À8@„æ ||Hð˜Ã¦\0Ûo=ꎊºg½n6‰®eçÎpÊ%j,?@07؈àØom6+µ(¹¾Æ¹Å<̺»GݼÍ3ª5ãIŒˆpj*”0›L\É%åృøTO5Îc8`Ž;‚Vñë´?š°#›ÀOÆÞÀOÉÕ2ád2žæ ÀÀÁ#.‹RŠ©[ÙÈñb +<ŽâÆjû st–³r.—e+¹×ȼ¡?;cŽ3¦“k΋…±qŸ”H à³wc(uRýô)û‡˜<†Àg ì™{Ñ +Ðè÷/¦{wî÷E0 Ñ²(ýñ³ˆ½÷ïÿÇÒ…ÇvmæX´¬GØ­vKŠ–c,2l ò¸¡IФPo%ùM:ñ…¡«ÓºìíÞ¾õùö±ö$ D’É;Äc·â*PÏÜi€;æ| ÚÜÂæ {8=4øI¿«0Œ0oˆ$wÖZ‡Š Ÿˆ­6Š]aé”C³:¢=ho=œ€í½.Ãí/’&÷"©ÜUg¿ÛGzËÚA=šå…+/×g®½mÿ²3T¹Z̰;%r‚ÉPŠ$‡u=g«(;I5óhPé• Õ™þƒ÷Bì¸!æy¿Õ­$j¿¯¦>Pçl »€4QÊ£ÉhœMyܘˆª0øàà^¾LÕi$sX:ŠO‚ùö«tŽþ5é.ÞBéàÅCÝ\Ò5Þxt¤ÇùÄfR`H@³  Vo‹9-ež;½r=ŸáDFHjù{c¿TïÅnRè> `ç៾‚Üýô©9 t_íçuïîÙé^Ðh÷/'sÀÿ]u\ðÿØ À—ºŸ…îo@ÀŠ—RN= ò=§þ d ºÌq +M£šœñ!fdµŠBD¨F«Í8ö}hÌ·‹ÉÞßݺ¹7œJñ¼@|PÜ|PÖh§ØŽ¡R9,X^0ó¬]ЬãÁ®í6´DÊo69Íì!bœcë6MÉ4“a®Ä,m z°T³†ð úí½Ã¾§_I¸ýÍ cŽ=/Ú{mn“kT Ï—ߨm”8Ö[áfÎ+x±jdô¤š;Ë4®ýâ´8¶EË8Et 2tùcV=Ù„¯hN Cq›T:_ÕÑÉdaú|Ê ôdóTM1ÅO ¬qÊsžÛº­.¢3•fŽƒ(”¼ kíÎNÅÂ_=å7~p&+¤KÏòzV¸ !ì€3ùC9ÒÊj.áVv˜A_fsήbÌŠ}ö}¨µîs.…³³t]ƒ[Õ1Íx •ÇÇM™¢ýA·{2à*heê5§:¢VÈ7j å-æü©©\ ž"äÑ;M)ù±*à¸3X/JîšEZÎ9Ö1}8ºí#Ç–Gë±ÍÌ®n9Ìš¼ÅïÈI!›þñhó‚ž w æ3° ‡”«ûÔ?5\,„ùÃT*8껇žd‹­<](zÝ>‡ëØþ ¬åg‹wÞÇfI¹uH• xMÂ?Ò*!õ˜²§M‘W~>#½„QÀ)xÞùli¥VyÖkurªÏ!å„ð&hbü%íOéšêŸ’Kçw]ê6¥tÈþ( ÿwî©þà ðq£Ü¿&5 @3ÿV ‚€*}@@û dÀ³é¤åÊÀa-‰º%­¤LT{Œ‚ƒ¨ÐøÕ_Ë;ñ?ÊN{ s7â&lß>Và‡ÚŒ¾½‚Ï8ÓÃb…p‡Gj®1¸¬2€·cýÔû¤Û€HôûjÇÀOï|ñEЀO<œ¤òcýáÿ¡ÿ¡¨nÿª”À{Z"ø™v?^aÿïß»\O°ž¢½@e¦Q§^Ñ\êªF'á~ˆ\š>¹DöfT–2ìuÂãÂôlhímß:H=ÃFa‘Ñwl7W³ì: Nnì¥\Ø]²g¼ó†ÄUÓ¡ËØ8rX9­™“ø{c­ah¿½:8 ·3Mõf/]EÌÙÆš Œý  i.RS›tºžu)=\®aàßi$Ò¤¤Ô/˜ž|ViK 9FûEßþ,6s  ¬Fœ°‘¶%­¦*Z|O’ÃeÔ£|ÔéØBRSjrƳŠÈ—âÜjr®šØ +! üBAP„³UÌXƒOò~SF=š9Ç á†¹(Ê!¿]i´¹ÕRCëMmç6(©Àãa,¹:g¨×«°¤à‡Öž#¬óÐÁMT +E¤âx¼K¼—¢À¡ü6Çd½ +~ÚëB0¡|ü–j‚¥Ü|.ªÔçCá4Ö»hq§ã?k¸©>s]/ò¾Át‚H$õaa'öúohZ@…EÁ-ã¡ ZFˆy Æ$ nȧ`_(Uö Á„Á•½ˆf<ÆøhwêÐô ˆtÁ6­—ý’òGºÖxû‘Â÷¿ó)ê‡m^é˜?|†ãþ«üI‹QÖF·UJ àÞ]ÕE¿Œ¹ä|¯æãbZL( µ2 àÓÅ„úF£…Äù«)l»=³—k,úF¹½(–=(‹ÕÖÛGÿmv?ܽ}ë u–ñÑ2ÁU…h*¨8Þ¡ø-פnƒ£ê“ Úœqgÿ }„C=˜åÓR7±.Tzª§,ŒÎK‹•¾H9U4ˆ µG"†0œ<;é´Ç"Ù•”Æß¤„ÍX.&ÝÃî´‚7âG15ù˜þóóSîð ,9üA¤0!vÈlÏðQäù-ù[GïÁ³3‡â>œ€À*¼¬½‰°ÈÙ°Ó«£}šRSŠo5nïÆ#Y‹ºÎ[ÍY”¿Ö™g¶æ<5‡zGùG˜JŸ’ßpú'Nø9á+%í‰r}€-f»KŠeñæaßDVÛúY€*ÈÅ +ök9~oµ¬5µ|¥€mÌó¤\Ê,|¨0l“?Qc7?æ1òYÍ&ýþÀÀ6«œN íLJä‚j²m á® ÇZBíj'‰tûÐnòCJ¬›ÜpBÞk Ak+€Àëðaìó»\«ý–xRVÆÂUT–mÙÞÆ\Y]°Æ±-¸§˜3ÊG8áSRq'ä@fíku'ò¹Ã<6é pH ÃßP4þ+Õþ+?Rð/iÿ¾6 @ËŸRcÄÿà ä”6 @à3®M>ßH#LÃ~æ+<*Šb1(nV‹OŒÍÀ÷ÅA¡ÉŸ’#y£²Ð¾éEµ-°×iã޵b`º.ÆI£oÔ7¶S¦p=0çÔ48@y‹ú[ÄÜ(&í½V»ÛQÛôˆI "*µJ´LAM¬ Öø’Õg×0dáH+oëINÄ+©ñÿMj÷ùº†ôG"—1‚ç~ð/ÕeYL€Ókú:H’ ›#"q#ù ÎcN¢x´þª¿-ˆÎÐOiÎÖê0$'´{¥}VÌj¡FBÁ«zÒnõ2ü%U š/Ëh?àWv`¡¬žø‚»Îñ³ÉÄØç¯J,Õdÿ?YOš+‹©RTß$YG‰ì’$ ƒ*µÕîr £è,Óæh÷¬D d?õ’µÙÇç‰Ì«zÙ§Tk¶*„E3œgÃi±„ì k*}IBí¨udV-×À…â㬤MZÄ‘8G-%p>'ijP`FNÀÏq§ÝÃE¢¶ôŒì4©œ¢„ÂÖÈ- þáwÚ4c³'Žn©B5EsÛN'Ó,ÚLÒ’á°¹Gó)E.À%ä%å(ëuzc‡"‘ûè +¯Ù{cÑ +tßôÕÎW—)Ôßt狯î~!¤ICþðǤüI¨¿8ð[@€´ÿ~ÜìÁ}x…QÉ7Òµˆ¬’‡å²Ócä‡zV(D+^`¤`õª 즰•PÕRAö !\øIÇ9ýFò`ó21Ê;€Èè4  +u¬¿ØJ!±W•Ü›zÇÀ¸ÃðÐ^vpk›"m„Ä‹à@•aãTÕH)ULQúªÎƈúÒÚ“I+Ž[LÝ)4ºÑýH>^JN(}º>›w:ºï˜+È/ôÝ©%,½€Ðe{ xcÎ!’Ys„Öc(>}JF7Ô>® +ÿô¼׈ö*DЀTbO5‰³/RÑmFÓœû¨SÞ°QdgºxJãSÜ]ÇÕ½^æýN\8jyÜî Œhr ¾X[xf"2ïøS^Ãhš¾s\J›,DDOÚ) =)HvÉ +Û8!‡ú8ž§÷ $óN™ãYQðq›ª÷zFTf¥ HU¾6BªøÚkrÝìT΀Œ¶%~‰°ˆáÅppÔ•¬(;M§f‹Iç0@˜/&¦€ì ³9Eœ™ÁINh´¡4ºÓ€¡ŸsˆS!•Ô°Iò#$ˆªD ¨¹‘ñ pl^œnôjJàr,ÀƸ´ÿ×›?)¸ƒæCîøy…üGµ^ËŸÀý߯6¿°³óø¹3“þ?'+xšÞ <Ž€ ”95hŠÃ§-N# ¨&ÃúR*Ë©-à«ú[ ¤LXoØE=nïG +”Òµ¼ƒØPR !²BK—"ö°*·åY‚€ +åø³ƒèfÛë`3ÀlÃý6É„­ÀŒ*¢äÆI 'Ä)t¤íй‰ç—¹œŒ[Ý’=ÍGR/’Œ½èµ:'ÙXŒá¥¶“b¬.JëTs8 ê »<‘OXCî’“rP<Ê´ñTÿty¦õ—IK~æ"Ézš»=còƒx™cÓéÍÛ‡ýa;Òð‚p(qÒ^{#Ú­†‡:¥­·„kzÜŠy5êºÄ±D>ï÷l£²64LŽ®z’)¥FõJ0Äã/ê»P ^ñÜBOŽ€ÂÙ7õüŒ·SÀ]Ÿ½ÖNR2<¹ÈRÃ~w€7UY¿ÝïO¹Ø¼ô2çäB×£¯…¥äœêdÇ®¡$SKàƒãÙeÃãþÔ‡6yk“ú>µ×F´#IìSì~©#ïÙDsŽ÷ˆþÛ»)ƒ®êuR[°P=Pî±ÔŸËËOµ®Œšbª*H?ÿ +̦K8C·Õ+DÈ ®Ö¤ p5Ѐ„éoÒNãÐ ¸{'é?ÂtZþDpÔCºóÙgw>»ƒýw‰¢ÎPþØÕI?‚°C>p5],Ž…³÷Ê\j1PöÃÄS'2»]Ùص¤u§"UÅbŠ®ÁÇéw:»·÷³²ÒdÛ°ƒúkpm|ÆC5ªJ ðs‰Íôlf4ZX;ûÆû}²ep?¢Þä)â/Öw!0F™£È ižÙƒ,júÀª»Ê°ûÉ +žs%ñ˜›—Ò~º.lÌÀÔØI¢Q^g9wöOáâ4ºìÙBüzé@2äÁwú0ž?h±‚ȵx¼u}zê„  F8ghYd‹oõbšÀD²5hAJÉEpé+€vœÄ䆋}š_íµ5¥¸³)„xÌæºÎŒb®„ñ’wL¹â&¡Ò^ƒ›sIv:–ÃÞõ j#«Óè ç¤ÙT¹¾4wI–Yóÿ%˜Gô†åt†å^óõÜÄ(L®ªjó“£¯Çø +Ç L2îøî„)ò +n©1v¬PÄ‚bR¸Ï»§ùBó„‘8 9ž/§Ývï÷KÆëWAÍõ^c¼o2ù†kE1Lÿ|‘èw5Ÿå2ZŽ®æÓ +óNN¥¨Ô¾Í‡¹MXþÒ`‡c¦ Â»°ßL p5€¾mÌÿ[úOŠx€êÿ•0ðÅÝë.ÜÿòËdùeaÈØ‹@ÿÍσg²àÙãGüföòËtªÍº Æ@d )v@ ]‘ö¢Ô¼˜­,R†€Â~S\U^å¶­màpHÙáȪü˜w·õóÃÀkÒ€ Ê-¸æ 8¶æ¤3ØÌ.ëì¶í€@S#ªW2f{šDx…ªÌqËÃìDßo…ÒÉó9Wø"w‹*sewôC’°y¿HˆâyÙÝï2\¿©n36{óÃÙGÆøÇù|WW¼B4#Dˆ$'¨UúN®Ò–Œ¾¦~}~ñµå\ßBÀtGÆ'íÎ,|‹”‰ ps~rØÛȪ¼A‹ytÓ>¨Ö§Æè›ÃëI·‡¼CœNQ‚KkMBZæg)‚ˇÂϼ¿?,9[Öå×d^â‡Õ"~Zû(¶»Pz’¨ÈÞxP—Rb[7Á1¿øÅ\Ñ!4îˆç“߸ˆ–‚#8OÄð§ í'ÅÕ¼#ÜF´™kY¸¥P'°òLäDòÐíêÆÙÞ„Äq0¢I÷ ?Mléø&‚„ÙŸ"ecI)âA~0 ŒOÀ…ýJ¶l4Æ/H­§e>¶UZÄ©M£Ú†¤ :!¥.ld‡S—ë’ÙË€/¼€ËV€Ô 1€À€Fë/ÒŸ" (|ñðî ø@øþÉúÇ«Qî_“¢IQàK™ý¼‹Gï¤Ëf@%j>îEL±pCUPTœÜBvM]¯çüc2åÅÀ%¼mB 9TÅf€n§½¿}ûà¤,íe…¾SŒ¢4ª®ÌóÙRª + Ì×”µ ý“lÕ«ðø'ã¶ â€ã¸3¨öLÒõD’ÈÄk̰&*)'%ã!äáöbÏàÒ3ªnÐ6€‰ºòÚttö(u°nïá>O±%ᜦÇ6©ýâ…}‚8ÆDÁ‚aͽiŽÚ‹—ªÄ)‡pï3—¨0›ž‘FçŽ.µ‚˜ô¤Ô竦 %¡c«I·=ÈXl×æÙ°Ö oœ=Á0·§*lŸÓÉd¬;"äÃ!eQôºù¼~]ÀÔ«Ð*œsžÍ_W¨ñꌬǭëÅëÈžw\œr§DØÅ‰\S~„šOÊUÝï á1ú€ }>èeÅqgj¸ÎŠäŸ7Ü"Q&P…ŒéyàØR9Žº07PB°TåÝ–ó7E_•2õ 3ð„ç€É¶«Ì}2¶+õh8¦@$"㓱ƒÇ®Ÿ6Î3{ŠF¯iap@^¡šœ­² µ¥iOäq6Ƽu{…˜¿ Ÿ¯Å¼aˆ~¤÷òÒûwwŒBþø{wAÿõëÏëA£Ü¿&|æÉ‘=õþ_nþj>ÊìY]Uˆ.5:‡"g[ÇXR#‹˜ØÖÚÕYkʆUѬO+Çz9’;ZF€¯=Víõi40ùïÀ€®;÷êg››eFý¢Ö8Åa-e>v:ýáp2‚~á£á´qVáêMBš±|mU(‘d(š¤”'Ì{³?„‹‚ƒ<9iµ!Ûa@6)={Jp<ð΀•d‚t\"Þ à¥+âø.°î|×[F&1Ç(ƒêÄÍ´[¸H^¾ì;_ŸÛyÍ|ðMÀÆ8r*xÌòÉ Û €Ø0€0s˜u¤‰ ÐËÆ $¤×¾”>øð\îŒÇF5ßQ˜UãL©ô†°Ö^«Õí—˺8:ÈgÎòpŸÚ®ìF5ÜbÓŸ‘â@þ}Îä"™·Ïâlº~Žk /0_>¿;¿†ÁÜÉcx[Cìü¢ì¶OÊ ‘ýi˜Örܽ&)<\€>’P^–çA÷ŠñÉ×}]û+‰êBæÆƒcRDî:3šH%dÁ›bëÂ6:É×CX}ô³þ°7²Yƒ}±÷©ëb€ìƒíšsx™–i8 :Ý©.Oؽ·Ò‡cªº¤ÿâÕ˜RŠ\2´ß¾º÷6Ú¯'ß(÷¯I) Š—”ÌÍ;üŸtᬡ^»?*aJEâbΫˆ `og®wgÝœ!Ê1o…’þbp¤dªí>9ßÌá`W`íºÀ)º>Ó°ÍYƒf¯ Ï «†Ñ ü–SnTöß-úíýƒ£¯»ï› qNpñê:þÎ"/úŸ +Þ'2£éÇUý+‚A‘¬¹%¢0´:9Φ‡o’2¾ù—‡¯«îa‡ƒGÑÕµ@-šßÎΗçN8í£sW^( +&p'ÝVs NJ T ŽL}üùâñl¨DñU•oê˜MœfBÍÎÖE×E +Œ+ +¿œsz~f¼hQApx¼¸™[ÕÅ`T‚£þÄø€W+™/Ûí¬ c›Ü +$â\Ä$ú|ã:A­Ù‚S‘‰˜bßû¤{ù#Ï Á‚ÄIض­áeY3ÍÆèæoÔÞÛ¡EõúuÝmÂÓ+~n/×g¡˜óš·àU°ùi>ès»H¥¡¥Yç°/ˆ Œ=¬6RN ñ0>OgÅd’M¥¦ƒ˜l¤ÃCq,³$æ'áåà[™ì‡®(âÀ$¦4¬ó‰½’s#ÑýãVwRΧdNSùVzs,€ 1€¤êW“m‚¡úñçÿî)l¼ÿ&lßh÷¯HŽ,à’›fãt- +Õ´X»4öÈ–r-‰±$Àúáÿü †˜ä¥W:>æá×3¬}»Jeöv8à®se9øÌµ©Ï–ÿ¢0¯V^Ÿó3H-–0Ùb{¨c¸ mSjÂ… à@ —ôœÂ1‰©¹"³À‡LšÐÂ:Öáô+YtAˆÕÊ«Nû0vâ­ñÿ<àF´6<ói÷ [YZàYˆåê 3Gù£€wÕíü…ìCwÕªå驞‡9ñŠ6ûCûEJÜxd@Iç@¹Imp\Í9ßHv“¤ ëª×‚ŽHwQŠsÀŒƒÉ¯Ðf.ôL` ÓþHeõ3ÅíCÝêÏ^g’`69¿rt™˜m£­í¶ÎU‘e­½V§ÛؽE0çeÏ…à†\µÁCfŒ^Åoΰ›ftR–”J,cUN†í.bÄY˜áô¯J_&©ììãrdyZ{ŠÇâIôTRŠ=áÉ †J$#f¦BéÁIUœ]"¦sÐã쯑%µÊ³ÐÛPÙÅžQd£NWF©ÉLlO{­“ñÔvÅ5U§ö~f«„÷µSA'7²²#©µ‚/øÀø2ÓV‡k/k¶uãÏ¡P@`T</P“öH âQ¼…ë@\€=“£",ê©æG‰Ήç +rc?|HL5 ëÓuƒêQŽ8j‚Ám&ÞKŦ{-M#C¢8Ü-ð-çë (਱¦œìG–Wyû Ûdg”雿p=‰€6Çî ¥: ûËaÄY! ØÿÁhèdhvîmõ6°ÿôIDATfÐK`&FšêJÀ%òÚTH­cÇ(FÉ.ÂxŒq{’ÙKÎQ“ïIoõÐþÛæ÷nb_XÓ=¿ ö?i?×û \€{÷í €¤~Áž¾õwÉV‹ +È»©hOĪ’»ëZë‘°ƒ©Êœ*éÙæ‹¾(ÏôðäI·}x°}sWtÎ…©ö$µ§Î¢ÄŠV\’QJ—•*ŒñåTcÆßÀ™~ â¯Mr3ί¡øœ‹À1YŸêk“„Kº¯ˆ†#2rh+BYXøD§âØÐýx®7“b.tûY‘ãÀšîy’~„“ó¼h ïëõ.RSî* `çXE@ḠzÛM‰À’‚bas(ņÃ3êØí…3"¥Ìs‘U}¶˜õÚƒÜØð +Xš  › +‘r¬\¿rŽï…Î׬-´Œ­9¼'‡{×Óv{Ì5¸ßY²åfW8áÃÕtÙs\0ÔüœZåúšs ‡søI²aµ s À“QqA°álü\|µ28îgz`ãaø‰3¹C=˧økÓNg$&PVÀpZ€3®DâÄy82†5"Qd½!š*,n´À8³\Ÿ '–v,²£J þM©>ÛÿðÿðG!ÃLÑÿ!n€êÏËùÍœvbèÔkNLá0wGŽÙmtœÛlXÍl¯¶ ±¢Øã6˜C§ãt©©ì=éÍö?þ{;Ý}øpgç¡a€qà‹ \øXo;]¨ÿãGzÿrºˆlxn'€„°ùï0M© …(Ú{ø¿i¹ ª¡¶ÀOõ¤ÃÚó‡ËË~k!L¿²ª’°ooéì¨n`ûæV5æ +¼R53»ñi«Ðb£ úzV|ê àYUM@ð"ÁþqÙ†ý݃vW(ÈÇœ¬i +-C0C’qB9“€„!¹DF±á™íÉ Àd°ß®ÐRžÓÿ•¤A+º»OND' WCjn¡²i|ØjÊBÖÊ-"Hz¿„ëÏy…T¯ÏÎ)Cì«S3†Þ±#f àgW×E7²¬†ÝÞ, óY¢bMx’3VçU°g¾3ÛRRÞ›ë«@ö¢IaºzQf´¬J·í'' Î+ûÏTíVî „<J«"ñ$.VÆåøî…ÙX‘AŸ0.,¾ôèÓ¶‡º¤Yå:ú5ì̸ÈÊÖ 3lÄ +˜ ˜ä†,ŠÁεM*!„ŠÆ&.ªZ·ÛyªÁÑã-ï&eðÂaXìÉ0·7áP¶Â=6 *Qä“Iç ˆ$Žðéþ9ªkAƒvÚmo‚eÂÐǤVCD˸»øâlR¹Gè}‰ âª3•°=\€ULÆÙ Mäeê“üNš¿H6þ¶ßH~@3!Èî|ùåg÷` ûõ'5êýËIõ¿+èìS¥‹F2 >`•±|çP­6h,2öz3ŽgWJ(©Ià9+%gþq·šúXò|6A­æòdAÙF¨º9y>&ä’§Ô³Ò•J±¶ø^GÄyär ÜáÿÌ‚”|&É +¤KÑ Éù_=Í£9ß… ¸oAöˆ %%¢*Kp–Åp@Í'còäÕ×°1Ô«QaGuÞ¨BM«#B¸<.аà)å—0ÈQP—"5zN¸Ó‚ÛG|ZÎù[:«ojr²v— s"hfK"×åížÆåù½ ás<ˆ°8…Œ2XAÞiO£Û†çǽ_s¯åÝÔZœ¯¤ó%uEÊ6Y‹³ÎOÿÊQŸè%Â~»OðLXŽ1¼¨ý—1ÞCKú#ä¢ÎFÆ18iå„ÛeÁ ën{2Ù}"S§h>91®ãÉ$¯¿´ip…pMºNÄ÷mb¥!Áéuì LAÎ+„6ZFªßV`pÙ!—sy úøÍ#: :`®ìsÊ{(ü@±Ô8É~–\‰”‹8N!:°pñºÊ³a÷¤´0WBÅûÓe?€ëJwî„ßÞÖÿ³{Rø¯±þ‘ýþÅØxê¯þƒþ§æË¥ 0‡*îvÆÓ([«!TŠ¿Ä “Óäÿ#.² rÆè•[Ä| }L÷ÁîÖÍÛ-gîõ á9«*Gt!0¯¹…­Lë•Nùj¶\Ö™DAlpKIô:­ƒÝƒN×IÊÆFx€º6wŠ)—BÜp³ÍP ×fÿT”ã7¬“x!ü‹e9+²hÁU¯¦„%¤Ðª³{œeø|Ü'u™{ðäNøF›™œÕËããíc×ÑŽ F4¼’˜g.-§eÀ–Q¹z Ä,§“iÖµc ‡6àsùcW‹~oœ‡­‘,óZªrT òí0n÷OP²Å_ ´‹>KDŒ+:íqxo)%P²è@G¡‡L«\QÖo_ô $<0wA–s/ùjBR…(4 0ÅCLÜ5È "Û¥}Ï+@ÝÎY(³È”O곺x‚5¿qŽâ@,ûšÇà3™Žû'rNRÒ1, ¿–Ý6ž»ãA=šs!/¨ °"ؤ"KmÍz†±Y¡èS4tEÉ!£­1/>(ïéÙ\Æ 1n/,~s€]“‹2,LG²|0]Ä`ùH¡ÿ_ÜùÊ9!ü%pÀÞ@€Ê†õÔè÷ûR³ÐPJ¶þKv8àñó— ž5ðvºdg‹i{¯›É奘ø{ç˜5Šbyæ‡ÜN3Á5a°X @êm{’/Ûɶ?g½~§}Ø:ØjÊ:ëuûlËé]K|k»ÏS#ZûÍ!s“.m´ÁÄOÐöA¯Ý5‹r8»Voà0ËÜFcïÀkޤ,"€Ö9¤®lª×®ë„H׫sûå‚-“›ž6¦ ¥H Uª»‡ƒU£ãm’nÒܦÀ³0aÚ#épú¸¿ïž¨á/üÅqÃ#b¿ðd¦MB&œ©;(’^½™<¼ì÷²1æŠoh´Êáqœêã¡•"Ÿ`¬ WxÿÔ[–•ÜyEÆgp[έºí1Ö ·™ÝûP‰qËð3øw—èüb¸bý·È¤O¥†Âã& öqT<#d‰à*p +¥5ç~@Ù³o0òØ|Ré´iÏy˜¼D ]€Ÿ +•q_Ü‚²< %(nA.§Óa731@MS.$-‹n'›†öb³Y§ZâbäÈ’²&ÌíöÀU¤X,Xz!l ,Ÿ]PU Æ“ ÞÙ&Jp+¹9è|µ¨–óbz€±Ó§}šN›µ¿Úy_ü?RÓ  þÒ€ÔðéäÿË.”_ÍmôûÓý»¼6 `çñËä`îß§þW€*(ZÛát6;•–(EjbNu £K¸'¨ÿ7J„ß!ÊI/N¸W[æx^y>Þ’‡­nû°[ ‚ÝV·‡IÍu¯æKæF(OõL#ü€ðÝðÊ +ܳ~wñ8]½®]¼ˆ^ž|”ÁNB}8+jÙ™ uRœ[#_5fPMå™'À/tÙ®"~¹LpE.i“—’X9`dã檎ީgÚ‹™ÁÑ? ‡‹æ+‹ÎßA5>F]bN 0PÀ[`síe̷Ä8cõ訟 +$ý´I”;jÒížàÜZºÑËÉgâ'®Âm PHó°Äëy1è×ë¢È±ª‰ ¢>pÖ´ÝõrÝ’›Û¨`>˺ŽÖ2I©™ã ¼öè¦Ç¥3¢ðÁ½ßÙi +sÈt¼"û£u=£ì-¶¹v5ȸà ÿ-œz®@¹æÑ)°Û¡ÄöߊC¹àÄ©è!ñêPrxÌWâo\¤#>uœ×Ê»#ÀÚiUî -VO× wdÚqJÎÈxL’»è + ϧ^<¯"ç~Ä.Î,i)–ˆÒ6cT"§LÇ#\6»›Ù.ð¡TN#p¿Qö÷¥þerö»wbÏgvºüÿ +¨¾~“Þ0øï|½ßL$à +ÿöòÅóR€¾Lï— `}^î òùLºF%Ÿë‘EóŸ-¥lŠÄ U@X´_5m¼É `™'.–Õj÷ŽÛÇÓùVщÎZøY³z©Gh0Ÿ“ñK*Øv½9Ub»ÍÌ9#bfá½6( W÷Àg˜:šK_‰ÓêoW:ÍÿæÃ-áÒ +Ê„wS­@ ÕÀ“ô8ùïæu%…VýÎ0jȤ\È¡eôv9ÙÐ%Ñh¾JÂÞ(‡(¤V4Í\?áÀò´Ž™‘Cô>®&x®½é°…âÆÑ)ý-¥PŒbÐS0k”<4ÇžP°x^µÕLÚ3uVždØÅb€#°Œî2Œ²˜ŸŸU] ‚¾x|d˜K-íÍ(à¾T¸¼Ç£ÊÄ×¾û~e¯#€xXƒÿºûë¿rûp‹ÖäXÁ/2Ÿhîøï áÙu6*¢YŸš\åãzõzÚéäÀ”•æõ#+¼;¶ÄܱK÷ŠÊæüùtØï—æÔ«ƒŒr.}ê8% –BÚ¹)0$²L~UaÎA6RK­˜Ø%Šæ÷¨5«9Yþ|\Îô'ážÊåM˜ã³r5¯WÔÜÏ¥Oï?ø ý7…ýGóe±y÷ÓÏÒë¾xL.Ô?6BÕm Í¿~¹ 4꟮ñô…ú<’Î4Xpшªs{N#šG)b=ífaYŒQúQÛ|P¦H„~¶êaÁ,ð®5´È5;€þ ŸUë¥q…ãáЖUGøPt¥x13PÃå,p«!%~·X!»­èŽ<˺v÷Ép0ÍàŽº(­¶$.c(1™D‚í¦ùVÕÌ,õÄ6è|Œû7önt?N½’Ô§õ¬sØ=™”“iJ­TiJFCï•*/ºoè•r"[JMSB¡7éƒ?ž“wÔº#o2rgW3'2ø)y²I_:ÃÂ`t\sý$‘% ‚Y![<^Ž’xÝØªä¶â««“UíÖ¨p--Îµ× ˆšm4%ž[Hƒ)ËÄ3ð Š!@s¤ŽOA¹àgébGcuGÑ7¤Õ9VY³j:T6});Uñ f‚ü`º*þ3)º\ 1€Ï âÝkÂ*>JéÒHÚ~ +®¦xôø€<‹k]ª~z»Ú +0iï¶p+l3Pký-Ëèäi9¢tQ¤¤(aÎqÓ¢ªËåÜF˜ªÈ\ .fÖOëõrz¸8þZfj‰j +)€—ò‡ Ñ0ÏFãA§µ×BŒ©¸I† p|2¸U¸]ˆ4µÁý¸†&ˆ«(:.ºrÇ/x +mP–0H"ƒ ‘çÃv¯¿·ÍëjR þºh< aÎd-¦Ýqwz Ï"È‹ñ"J€Œ8·Gb*Rü€Ãïż³{t²ù@ÐÃÎ#q¯Q(4ž‚U'í~޽DöRj™²ArûÇ“Iéøg® ³üUÃóZiõa)~Ìžr>è²å]`ìdíü¨“ ÏQà ÇœWS•j-Zb®o˜UK-Zz"׉Ý%À ò¶ +'úüo>,ÇÊsb ‰=)HÒ™Þy]–à Û_ÂàÊz6sÈw=«]Ìs–·Û©†,Q0qæ_y›×ˆ&ŠÇÛs™Ñ`¤ËäRâ£Ö¾k]Þ¼ññ'·¶nooïíà™;hYàqŒÖ$¡5£¡ýւؾ'Ž‘$Ä[HHLj=çγÂQ/°>Ÿ­‹ÎîÖöÖöíÛ7o}þÉí­Û[[_7šþt_üW$WJTAÍ¿sçSàþ—°ÿ»ßX>7ߨü‹í+0s©þ‘žýÛ‹—álÀÛéÎ΀ôˆШNÎ~ZG”«ÁCÌì «Ëøiƶ‹9œ¬(ÆÀd·Ý êó¸µkg€ñ´t¦|¯Ôà·2¢Äk›èÖ¶Ø»R¯*ϲ“¨±Ùºu:Ýð1èBpV´/™¡¨²¿Z¹ˆÍ©=ÑžøÂ†umNÑB*ŽÃ|ä ¡ºšÔ MòŒóºwàýl«©ƒÁCrEDó®bðLËañeˆ;fKU·C«T?NUk1d^–X-v’÷ªÐóEµ´ƒ2 €Ò¤´®&ŠÒé9Žå 9Ý ‘„wE嫸º¤LûýIY—}'žQs<*›¹q«[ÐmJÈñäuº¾È°wóª˜OËÀCx£xþ.‹J +äóÄ͉ªïR@6¹ŒÖ×g¶J©\ìp„‹>íõ'U… è¼,Õt’UEÀÝ=Ð"ô4”‰üy{¶±*ƒ! èo–O?¸ÙÈ{“nÜnOãbüKkš¶!)ò ñØÍÝp,ìLÃ7³ž¨]+Æé’Ä ¡ðÛJbû¤~H¶{íwÍ­Rº~«•rò¡Ý|îðÏYÁÂx >sRÏû›æ¿dý¡¨Øj´üŠ¢_¨ÿ[)ÔH àÙËWÿö +ðTx+]k¤_¼œFWàà?!Üìõm…‚FéÛüÅVT„³EÒ® ¿èpQùðS§ïâ({~¸ßéöÆ#9ö/3uäFŽolk&{42RŽ'ãA¯É ÎfÞ„âåÎ'¬* oÑ£4„º¡Ð™A_dL¶È$™îZBàŽz•U|I¸7Ó¬{pÎNú`ù¨Õ`²ešj;™°ûAT †8"­ ƒEJåMY°$S;Rk÷óf½,κyk÷ ;®æxdKÝ3À [>„–,‘×wÿ¨ë×–))Jà,ªGXõ¡Œx³ögŨßÞ¾-ˆ¤ëŸlí6šþ”´ïŸ?EK€ …¸s¿apÿêû‡®n4ÿBïãcóÖ$ÿü¿¿ó˜¯^}ÿÛÿâÅ·Ïž>~ôìÅ·o¥  B€^¦öáy|Þ©¥Q²O!Ä*±ÇBFCu,(”Á¹ÁJ§뻤s«Õ>jµŽzý“²èx ‡jêžrUåèlš…é‚x¹C´ìØnÆX`§’s²!€#‚¸6ð)~GFÁ'„;¤3r<¯É¯;EqA'ƒVà‚½¼? ÷«ÒiÁ³¬( Ü 0¤\”NS… …­°C””ö¨O" ¥ÇoÚöA˜ì± +—%º³óiô‚CHˆ®í”RWÓ1Pzº71E¤ éýÛül]Ÿt²q]¯Ü‡kéøóˆÊ*Y³O‘¯i5ì´†x_£žë¤ÇJ\ƒ~§;ÌF½íí'Yáä—‚#gÌm‰ ‹ + «­êQ«–…ûœ°˜C¹¹DÑoqÛÐN¡ä8¦ÜÅ naà˜§¼ßn›™k»œ1Öeh÷÷{cGf˜R5îpnK¬’ˆþ¹7¶al'§¤¬ØÞJpýÆOnÞÚÚÇé,Rx‰“ΰڊBÊÙzK-šw]Dî¤`ƒ[å}„ýú Fd%)x\ “êw÷··nÞü€r9Ûû­FÓ?PóôzïßWwïëÄêÀ;6ÜIw÷ïÜ»wÿÎÝ0ÿªß|ø´ª8oÚßl_Aµß>÷_|ÿý÷/í<{ùüé³gO=µEðtÙ`½ž¶özCÄ>ŠÇXY)¤! +ßPì¢ÔOÝ´:šÉ9Béžéãáäû½öÁÞÖÖîö>úEž]gÁ‰ÞÃÖ…QõLM­» a»’Wž ~ê÷;ûÛ··noï;8ßAZôaÙ]‡ÉC´NFÎx ·ßŠ%ù‘ˆ=ÆAþ‚s^]:¹4’îÝ7))[JKç¼´a,'ãý/튣²p}ˆÑLO;U(šM²,A¡+õa¸ÏEr¹z6¡ç8ßJÑœËéýXæ¡éJ’»Ø$%À5SŠÌ“4^ó“Þ¨˜ê»£–½Cí DF¹­ƒèÐ"£Ù ƒbåÃ^g8ÌúÝ67õ»}—¿kµ:ƒb +ˆŠRÂÔ¦’xm7%äž*Qçç?tÙã©õP‹’T…TS/¢½çyhÜœP}ó¹\‹²Ž`%ÓáIß”žt:ǃ píÅQ§ÝN)ÓõÜ “ü’+ùÇuÄl“qKQ4÷/»'8<ؽðñç7oÞÞÝ=l¹¦]ô+£(9õÌ“g>žkÌÉ,Ÿ5LaA F¡ õ9æ†>Ÿ-•"¾7 +ÿJáX YéÁÞöÖ­›7oÜøÝõ7o奈|05TÿC ½ßá Øô Jpïîý{2;ï‡â¿‡ÄûFë/·Rú2ì? àÑóG½ž?¸xöâÅÓ¯«—1€³Eu°ÿS®£E!’®Ö@*x“[ʲ!0¤±a”æòÑÿª‚æ û'݃ƒƒý½VÀ…˜bB|?CZ3å]槉ÕFÇ B“ G'ǽNkw×Ù@Ld¬*gvã-û¯z‹CŠ­‚ÇåÈ]XdñÜÎÀ;EkQLcÂüEJÏž’õ>›´¶c• #¶KÎå-F/øˆ8ÏP:Õ”óƹn¿;PdSç¸43ŠªŽz׎'s ÏæøǛ̦®UãJf¹=Ÿ½VgTEÈ1%Ë™÷:[Ôvv†F{cñ8ìV‹C“-¼Ð6~©§“TÝΩv»Æ÷Þ?èNœÓ~òu1l·©€Bm=YhÔ@ÄïBî­TKÏM{;í~µDÓŸù¢®Ãñ‹, + é]]u&*dåN‡ý‰s°Qål–w÷\Fu‘OøºšY§m[KT©‘eN¶Í–;ìîuUâUæÇƒÆmàà`ïöÍOpÈoܼ¹µµ¿×ÆéäÑÁ4ávžú)¡à2Ä^ó«ãª8IªÃŒX®Ì&…ÁGüñª×ý|1›TÙH·tw{[øXŸãöþ/„:¢(ÅÊ€@SÇñݹ¯þkú¿MªÿÓÇþ_jüå·+`øÏ×ýg/ï<}õý¿½z±sÿñKLÿ‹Ç›n~iÞ/&¡¨ó£ý®3xòäÔ*Å ;³Ì"ă¾Å¿[]A°ÎÏq¹¬nÛ´l¨ë±ëä¸8$¾-!…ú¡PTû•ââhÆ|é쑪–C‰îP-çnŽG½˜W¢Û9h MÂMТ®—ºV5h¨Ö*‹ 87ªèE=òåºçœZL³˜$~Ù¤F÷#Á`ŠÉ`÷¶¤ÅÎÇãÌácNeÅu,ÊÆ<Í( jSgŒuå²ö<±A“Ë®‡ÜÃíõöA3ž/Ÿ:ÿÜÄ ¦†ƒÞѳþ8mJMÎâË>j\Vñé‰0Ñ¡ˆõkÅ 9Ĭl1;ƒ`LÊź‚u÷¦À2&¦V[­¬pV=[*>/ûu„gð¯m ÚY -ºÉwJ,6dSEÅq:aX X×"?À†Ì“…)Ýžzr2Wåúl©«²,ûíN¿^ÊV¸A] c&Nþ®/!(}f†›Ûw¨˜åý­5».\›|¸qskwÿà Ó=É1êÙÙú´è>S”S:MÆŽ¶ÅHÙåŽ\Ö_Hî“ñ“eÀÕ.  +NFø­ƒ½½] øüööÞ!Âùs©Qô&€jÿi¬" Ðp¹#ž&ð­Q˜@èy£ïNpõûEz=aO_<~¼úþù΀ô—À„î_¼_0¿líwÆ¢Âo'£Â­ ’tZ€TÝ#à›æÐ¤0S¡ÔÖL°%À‰Ázåà”K(<~êt«E>/Ê9οL«p¹‹Å¼˜Íg®¼VMÐl|2¦á@m8#›y^L —×JpÔªâµþ«EÙÓP8š…¬á(:(¾ óß)6R碵{¸Ø½ËÄï¯å_ïh jFÖyëuŽhIŽPŠ ¥H_úñϾîq÷¸wÜë=ñï ÇA¾{?Åá½N¿÷uÏŽÙÍq!NðÝV§½{k·mgGçì059SQäŽó3¨`{ž‚ǵ—–¤Ý‰Ï‘QUgQ原p ;ÜÛ7ÕA êõrÒmµz™ØkœÂ"£TV†—n‰óÔdèƒ-œúýç TÉ‚‚A%³E–ŒÄKÆ—¢v¤¨ í…ùv§n<@åC€Ø_×SÕݼŸ/Në“V»Ÿ×f=ø¤:­G»(ZÁ^ƒ7˜S9í;@´p€½m[nn£‹­N«7mYó8Êðþ2FƒÊmãDÏçŠ>ÝÅc¸×‡³PfÑ ÁAÞG¡‚œÖój^×àû ß9‚vìïm üüÖÖA«}ô³/ûgÒþÕû;1!Ÿðþû_î¸fï{1“Zÿí·¡üIýßKºZ/¤­ôº„ƒÿ¦g/ðùeÏïßùæåË/_<’¼¡þW\ºlíJ¥TVA2í !d”`"º£I«¢ßè,•bü‡«ëZÐöЙVTç\a'ãr꼿(½Ëóp²+¯{Žò¬š†•Å´F°ˆ“Q—ÀuÛyÜ—Ñ\AŠk¿"»B;;BQøFv¬HÄJš{ϺýE}ÚxüM:½|AÆÃÎöÍ]g"vêH¼Õš›ÅšÔ;Á£A—Ox2vº8{ƒÁOqà‰1ä<þúegH>q1Έ{ø÷­½­ý'–RÖh~“Ä®ÕbÐà”Édx ùEÜÌÛNgÈx>Š£Ÿ€êÔ?'³ŒI,J<« À~2²ƒ €¥5d§‚ :yXnÿñ›(´9µláQ¦¡ )±B|?¾Ÿ!2Dͽ9e'åÒÀ—Õ +ÔšN~r.¢j>›éá¶ôâ‰ðÓΡ]E|nî—Ti vt¨Ž€Ã¿Ô”+ÆÝ!ê TÄM—ŸnííÞþØÝEÛ,‹«ó|ÖyˆßiìK<>¿yk{¿ý éùŠ¿ãß1#À§Ÿ~ñEÒ[‡òÜ¿ÿØá;¤Ôÿ{÷ïmt>Ô¿Ñ|_¾]¤tXÀó—Ï=“¼xx<ØyLàjºŒ¬“ö~×`‘µëõ2³1ëxv>§|j?’iІ²´ê(Ì |/œJysM»†jœ ‡ÎéŸe£<ƒLq˺„) Hoé¸g¯UÅ]Ìbv’¡XhP/:|ŽË¼,I`°€ZwBÑÓÌ–¢·»­8¾S·æß¾®9_;°ív‰IŽ»šüý"á‹ÌŠÖ®á³ÉQµÑºŠØ\5sù3Øö¬rèií<ãzòe!>0ŸœMŒU,C¢¤G€?=A<ŠRí´½´óT“¬§·^Aƒ”·+I]ª½Œ™-%˜D˜!ÊÝqÐÆzQñÈð®‰`s9ñÝOB•P389Œà(pñ*Íõ,°Ïœq”+[tê:BB—Ë•£ü’™Œ Áð¢Èù§Ô WäÏÒ§ÂaÀêNÕÈ=\ƒJTÿØÅ¢²‘ ‰D ‡æ‘z=9ÉÇ n4×o“‰GDÃÇôA% À®Wº bÙ"“¤Êõ§aÀmô¿%Ñ´û&UÒ#‹J°”,ú_ýæ#ÄÓò J/»ü͇„·Ä•E ï pÔuQN&CòÜ…àlêülJýz>˜\Üyî|¡õçïNôÜyàHÞ»÷Ÿ>þícßšÀãh"ÜXüPÿ¤û¾âï"…à¥^¼|þøéKàÅÎýG¨ÿ  iý•tÉ0€½^f”+Fa(üYF’·æ¡d±²“D× «{ ƒBÄg15;©ï“cݬ:&ºœ–¦P#ÕFc„èjêX5€Ÿ]YÛ%[' öžNª˜R”WóMËÊ…rbVpGÌ¿µw¶Š6e*ò‰ÏjUç“noµ~™6Óû¿ü¿ÍºýÑ…‚JûÐÎz½cNe•Ȉ¾7=ÕT ŸcÕí°éÀ]dÍèæš=X8.â}Õ§äT…œ­À†©ýC&›ÔPn]ôzùT¯ß渶öøy®e-ÖêÉ(Có¥%h©Ý=‚C=цDZì>ƒ +Í3çz‹jTþ±€Ü…゚ëÁ8›K:' žÅŒt<¤¹ã(<‚9ó\çºVp›Õ̯_M +Û„‡ð¸¾¤VýQf̾š]ð9 Ø7Þ& +^‚É;8¾†U`§©—t€Nçà`wû&pÐnuzLL;ñW¯†‚ŒsµFb'‰šàuÆyu†ãxî¦KTÜšÓ<ÅÎjÑV;MF?u¿î8EÕö-’!€&Ø÷¡ôþg^ê?ê)ôöAÌç¿óL€ùçx䲞öØh¼êßlÇwÞ.RÀˆ ðÎÿìe0€» A0€ ¸š.'¡¾:{ý¼tA@Ÿ?$ I-ÕâGt¯WDo¿Ç;ò ª°tŽß.¨÷Q6 +{4F~>rñ콘ÉjOáÚÖ k§éצ“IÌÝ8@h }§lä¬0¤eeH«¨˜&êØŽë(%Þ?6È „y¥’Oõ2LfßCqðÓ°›x)ùeóÏ#Ÿ®ç±¬æuÿêíF ÁD=t7¢d”€e—G^¼Wpa³&Ôõ´%Š,y‚: g÷”˜1ýÃÑZ-ÊrÔí–!€!Êg$®y¶.ú½áTCD H¡¯Õ}¾SrЊߨ]õÊq §ííýÁ'l0eö¿‘uEm8C^ËžñzÀ§6üçØÌ°Y@`|0§øx<<;-ôä æJYáp÷ðg‘pÍÕÒaŸ¿IF}Z±d.hÇ.„6rª CŠ'7SdN°Ù ÂgËeYOúƒèÃi +ó +Àµdã×nlºzäOƒ~–MË)–…‚EoíէŲ‰ODQhÝô"ióbýúÔ‰Ñ^šiLñ©>)_êÉeF‘ÏItNÁñh·woß¼u{kÿàŠ®¿÷Åߟ¡ÿ0´çîËD€ä‰30x*…™:Ólã¹P[dÛœÊæÉ)nze7kQ-å¢^…KÉŠ´ÁÔZÊ%ïêÃKJÏ݇öÒuÿ:1€nؾuíú–úod\‰Â,­ZòÎñK2F‰†ˆ’¼à#j.ì,Ì:R‹'IxHó`þõkç\u‚D€`oûÖÖíÝ_ê´é øá„â‡òëDJí€÷]ÏWÝ úÛ?ØYÆ×ìû¿yH;^¼zùøé«¿À/_¾‡+`Ú|^ŽiScØxx½¥0Pœ`ߢEa_ŠÙÌ5R\e±ž9Ñ* G ¹:=+WdXࢶ‡LjGHƒCs-vÚdÎ-)H»˜e‡†ë—“TÔÓ3È<u´“/À á[t¬â4ÞB«N-ŠØ¡Ñçó8,æ.{ LÚDÀ€fÖÏDÄÎÁi\ÎH® 2>‰9¸íjq©ÓÕ¸uíÆvË*3Ê¡šëà9<.5¯<‹s1S+C.>Ì17:Mƒ4Ïÿf ¬¢³gS0!Ç/Œâ`é[[·¶w÷Z­NÓñÿÃI•ÿ@. àŠ Ð0€o# ܹ÷™ê+ †®ƒl$ÕO—éA0€^¾zùôÙ«W?üðòÑÎÎÓW¯6 @g@õOŸ—p¶žìu†Ú ÛÍ-=dV¾hù + ´ùcƒO…S‡Ã`’ôF)|•ƒ>±?<ooprÒçm8Ö•¯œf]§;0E6ÂÔîƒÑLŽçÏ¡ÿ#ãµêš "€¨1CP̲…*!Ö‘½}Ò˜4KUËV4IE0'è\]Ãv?*ýJJF7%®€%p¢é *9¯O „x)ŸkÜ_1Ò_Åžûµ7úË]¼Do¹ø4«O!Ðò鈡'©ó?ÌrÜëçînÀ Æ¥¸äÊÁ@S]wñOv\_DU!k^•‹rŽYµ¥t2qêË<•S\çP¨˜ÔZäÔ-G›*5†z-…¯@Ö˜e ØD¬Ù(Ó˜e+˜N€ÊH'ÄÌHºOñÈÓSi!eÄI\áá–Þ¡šÍfÅ 8¨ êêöKmŸ\/HA!qÞ‰ªµ}-JÄ)‚Áˆb:îŽuÙÕÿUb6Êíoãì'¬ âL£" ^ŒÄUºD‘’Mžµ•Ð/c«EÞÚëK~) @Ô¤„,ꂪZ;$NŠºJm-c¾„¡ä+ö VН]âìçY1²£ìÿäøØF©ÁÉw^ ^©Õšå“€“bÉǰØÖž2|Œ?öL +ËŸ+ÜjOœÐm-8ä`à]Ô·ÏÎbÄÐ +‘«Í.{×6æ´º¯¤ˆ+7Éîk‹¢»×â¨j.O±S¶šià‹I Ýe§¦¿AˆX™ +‘Ê„ NV”ãDOÇ_bä2hÎR7™¶LMn Î-ê^7Cìü +3s*ÚýK5¡÷±àº˜kc)zþøTÓj‚úÏ +×Ys25±þA ¸/˜ Ùc—Öz~æ’_‘}-§¼ù t3ž8ðL\³ ì·ã>Çλ“+óÎÔ6ËMEÇ`&: ‰ä^ÔËéù,:"ÆÅìàɘ”@³@JÞ¸Ìt”fÅ!Àn§{doàk7ºX‹ñhŒ 鳊,1¦ñX."¬]?[ÿÕ§:K½N‘c2Í ¸‰ÁAs`MzkÝgäË’2Æb•ΔÙ{£Û>¶~‰¨Õ?›Ôû¯ìüElo€Ýî>}þø/Ñ 4úŸßüo”?m^$Õ_Àø£æ¯¾äþßÿ*@Ãý7Ÿ×ê×éEÁMZûÝ|j\i¦ÑŒêõߢ”©ähšbm­ðOfÂÃáð™ý 3­ÐÜÑd2°ýw(\÷»Ð´“Ñp‚7¥ošÚÑHû ‚ +ÑpËJ±ÖŽMØ €=Ê©í%´.¬U*˜/Š ‚•¦%މy¤ˆ¨í²vé2‰¸E€9"èì{^uii#)›¤•?+z‡½~VÂVÑ“õ¼ N|­µ ¤B`¨•Ÿ`HDÅŽY6tŠØ‹ô†¥î5$ÃYhI¸»)©u1ì +í^³“§ˆ†¹:îM\­>+ìD‹¶ºl5š‹Eáù&ØWÚ8'¶sU¢ûÆüœŒÃ¹Ø¨© ¯p–á@ûkH–Q·êzË «8d)ªœ ›Vq +pøà¦$Á5Ê$-Âjáp8OI¹ƒ˜JjÙ~¼4†F1…Éç&(¢ÔD@(Á™Bª¬Sl8uõq«,(WU²êÉ0fŽ*C2LF÷¶®ß80`§mך9Êiõ,³ùæ3š/,a™ãY„1âr¼A"xÈ7Õãm'­z.DÞ¥K,‚@“~À ÿdwk{o¿óóÝŽ›¿LÉð»Ñ¤ªÿLûý^ßTw4Á™€€Mü­ P'€€Ýðs9~j×ËYÀ‡Eš.“Öš,ÃÕrɢ弜¸Í†~L5¦E¢ŒpàViªc–u¯]¡|ô õɈ +³uYŽO%¢nÑÖ¼NcI½ùÊ£¥nqO-¿’BîŠé`¨•‰”ìk¿ßéìïßþÝÖñ sÖx0/ÂWʪXåŠCÀš3 P/Ö +¨*8OD*dÃÖ F,@Ðkð>r´šáv*pƵ‘él‚øb v··ö\óæçSRó'l>öçîÃè +LÂí'9¡Ïýg/žÃþŸ}ûâùw À½´N˜BÒ÷& 4©Ñ~’ö^ýð½ çÿ‚Ãxõ’?_Í'.€ã(éõøp·—Mí¦§·8{mW}ù祊phy,¢ƒ¬,aq: …¾’b6ƒÊÇ‚åÉðDFùÛ‡¨4fý¤o‡ ~ÙñQå^~›­FÆ 9ºÓ:t €Ôe û„úu.èrRa¼  è&ø4¯s®,Ä`]Œ›6ÆYǺfN1£7[ŽãB&ƒv/Ÿ³ºL!RM +P·»Ü2Ì£ wŠÒ€Pð¡#hÃ)æþcƒþkYá€_¶7`¢dkÁ©FÅ&)]®‹"œXXû¨g— )%ÀБI·=ÊÇh=O!fòŸ«½.‡S üЧt°ü0©)¿ .†)4“±ka•®oé², *?Rˆ…qè¸í0n´^Q€dh‰ÑTË$8Ïoð‹ÓÙ9ïÄÕÓ¤ó,ºfó³%8{JÅØ ˆìëjpëeƽø´Oe8¬0Qš=å'Í[®(×øAÀÊÀ‚Ø“þÈá‘’z9XìpïÖõ›PÅÌX‘úÏ)ŽºÖFÙá<‡/†^„mݰ¶•àÛü"¨Ó¦®‚ÙQ¯3Pj­I +¶¨SômˆÖÇŸKž0ÿø±)€úÿÁ·l={ö¿=}ñÝ·ß}—Ú$÷-À4Êoj F¿’àü ¯žÞ‡ øo¤ @Å v·Z6‚çz‹‘ƒ›c¡y›ê¨7Î +va¸³±Ý$]ÒÛ©ÚÇ“!n;n¼M~íxïëvëà`ÿ Õ6d¢+`¿xÜ)|ª; òáñ)­ö÷öZÝÎ]N¯|20–0êëèQ œ\h÷Ÿñ^N]ÜyZ`2ääê®ä°iÁƒÙ‘G½V{âdµWRTz“œ—~6íÚ +ÀUø?WÏWâ©$é—#šöý ¾dðã;âO"Bq†É P ƒ—rú +©bgbðA…F±ÐDð«H›œ¡üÖð¨<ÇɆ°BY<8ÏAˆ <ÐöÑxâ4`²Š Ìå£|bDE`  S½p+ +††HA ÇK¶ô6ªÙ-ŒÙ°£^8£S¢!‰}  ØŠØÅS‘ +ÛøE6a9db,²¡&ìöùNå8˜š«³ø¥šãİ讦P[õÉ€×¶ÂyÃB‚3Pl}ÉɪjåŽâÄ µvwƒ4Šþ¡”ÔüçÒÃ?}õ¿º»Ó̘à1€GÕùßž>ýöÅw ÀS Ôÿ.À¥Í¿S£ý$Žâe à%øáÅ£°ýïï¼0ã‘êzкõù6ƺÝ^QVþž;²íɱh×G%ùÒët0’ÝÔ(JâQûœàн§òÙ²Ë4Š|¸p°·¿»»MñÚÛßG³Û‡‡mÐ@@h·0õ£hO=<&8Þ6–­íí]Î'ì·HA 8ì„ðŽdí8ʸŖÃkz'½#2á½'c A'~ïGíƒm{}%Yá›D]ãënïw0*ã|p8ÖW8qÉÓ@m-°¢¸F¶u¢–ª‘#|ù!hM'­NgD|SõS=ÑITM_ DÝV7C=‚º˜šÜÀJçy¯ã8׾̆|tû£èè·2\2´Ç´oŽ;rÒÀ1ˆz2ìóKf8¥Ï6‡e£Ñ{iÃ,gkÎqÁ1v×Èø}]·ÉüÀ!Yã!Xü‚ùƒ¶lȵa&c§ãŸ9Ä^^¾Är²Æõ9nÀ©còd–áu©#Ø OèmÈ —êg'˜ ò0äÊ2EâV>˜Al ‡ä'xw¿ÓêöÇA+VkÇžÅÝVkÿöÇŸwú†ÿë©]‹¤¥z`@ô.Ðé¸ûᢠ"< µ“ÛiùÃ#S tùŒuØlœЬo ŽAm1o]G"ï;(dðƒ©Ñò§»;>LWÀ§ô|d=@€GèuRöx¿‚Wõÿ‚„ðêÕ_pøÆ%Ý}ð¡#­ËQûÖ'Ûªt¿wâ8>$®{¢ï¡ÊWÌúÇÚö¨GÂÆöð>>>FÍzǨ**ÝQq§o¾uë¶m§0 uoµaPÎסÐÔn·Ý@ˆmµ§åÖö.ê(T$ò€Zsà Ç}´ÿÄûòÐ#À À Û{â¯æ…æZ=ð(ÞºâXû`ï`,ͼ’sÉøÅødÏÙ¥z(&Š‹ø¡¤è¾Ì)Fì­˜#à˜X¨ßÐxÛ ƒg Àìòlç¢#|Å ]ñL=ñà@£­à£Ë8=Ü KÙd©IÒxÐnY¾ƒPòaÿ‰citC©;þ‡[>+<Ql󓿪ÝCŠè¸!Hx<‰*s—amôÕÎ*o>}DxÅXº%×ó©|tžX09ÉNÐvôÓr¡¨xNh†åÅ™ƒ“N”á>ä‰$Ä@æÞ÷á8¡9á+[¼‰(¹2à Ê©%)³¨M¿ßêŽ&ºt$•˸2åø¤k{»ö¼ƒ#p>”e'ª Sï2ëøZk›õ-pÐÜ­¥Ç%úkèV^u¨Ée—O×±Èèb¶,$u8K0#¾ßµ#ÀÞ!Èœrò¡JýáôÕ]'ù +ðÛ^*=Zꔞ1vç»§ß¾ýöÛ§_ÞƒÈ.‚€Mz/ˆæDý^ð)<}j‡ÀwÀŽtºïoµ‡¸–À®e°;£ÉèÏ/“³÷ h!´/Å2ÇŦÀaIËü`JˆŒ Vº}¸»½ ¨ÿG0‡>B1ÚI´ÐîˆFa〄V €`q4ßuiaf$ÓÄ·5à]”e,0°ˆîÜyäÒFrÙÂm#äbhpŒe!Ë êZÈ|ñõ ¥^4~užs3ÊÄîøé`­¼OùBŽùãUYG{¾g@ ÕÑ_‘‰1ØÛàRŠ ±Âç¨s\&W½ˆARyu€`ŒATk‹² tµ’ \ŽÀ¤bwÇé… g°{U¨J­^qxeß+.lF£Ð(5Ë” ÕÌÏ7g†îCzåüàŠz¾¶A_ïi¯=g” +Îg¯¾S¥û`}–¤WÉ+éFè:PYÒ|$Y^ÓTz£úìDhOõîxPP*QMa{€yà`ëúÍ#ÁØàSœ+ý±Faæ†h óhß1ÿÁt÷Ù%àP$ÀIN±üú ÆnÑ8µIf<°Q©nȘÖkcÔö[‡X›ŸM¡æNèýûp.ÀkðâE€Æ ÔV14Ùaý½'èôÖM¬úÖnëkìŽSéÀ Ð‡zîÀØ¢qò»½ÖÞ–C-nom°ŽÂ\"+Ɖ¸C½ž¬L=kØ€å‘àŸÈsx|ìŸâÒ©HÖp<‹"0«gùqonÿÝ+)rݤ0eg¿ÝÂ)ÑI»ÍTe˜žË^æ‹©F8¦ë§±s 0:™™2½¤À|!/sG±Æñø¸J2ªdQ0ê…ÚD© ÒdÔéåê—-¾6iNaOû}pƒ6,–ÙÛké*h9„ ©W0¦°°™bFëN@ŽN€Í9H!nàÔ„ÓÄ‹W)0œÔ°MsºÒa0!NhJ@éR÷96£y“4tÊÁ´ão9Ÿ¯ÕL~õTÏO“Æ•|Kÿ$GY¤OB9maYq²ËŒ—ѰBjô+âE[¿ûÄ ‡æjQ•Uâžm6¹^¢’• ;;Ïýá\‹Ýhàuæv㳞™ÏO#8iûw(ßåm”!þÈîöÞÁ?…ÿpJzþÁñÿæîŸcñÐôž”þñFïbüáŒ&]ûFÝ“å—\¸é*@€WÏ|óè·±{ð[é’¬O«ÎÞ fišÛ3XábhÂQ£Üì´ ,À([‹2æp¡üŒ¾TNï5ET¥K½~ç`û¦3ªrs;ºN ©˜ýZš1Ã:Îf¶ä:ŸP÷ÎÁÖÍ7>ÿäÆç·ö[ðÖñIÆ•,j#Ú¡ÁhîʲãzÝ‘-rÐdfqf×%›äΣB³8m›²*7iÛ£ÜV¬‹WEÀýþûB¢£á¨žÙ=>Áykï¢þ×?þØy)4G‚glaÅÑa,0 +mè¸s°‹þs(év«‹¼b¨¤šÙ +Š£ë½%ÿ†jex憜úñ«¹Q.9൵œ–ÂX¬ñ²^ \¾RhzQËeÕmõ6¢[ï2Y®‡åB¼ @˾þ圛!ô¡ïþ§N‰ +o ú%2Óö)‰ÚUåﵿŠ«D OúCέN›‰‰âJ$.¶(»ÝŒŒkªó±=" âéZ³5ˆêPù!5h€^̹‘¢„„?ÔñçxÀ 9¨˜Øp…`$H:†ÛLªÝ–ef)'£¬p[>)pû<5?sÕ øííYr6¥¼ÌàR”÷*5 zuŽ£ ãáäØÈÛ>ñÚiˆCG½ôⵕêÕÙµBžòјc¬Èõú$®xçpÿö›={—€5F=¯ÄOÿ¹Ã’¬ ÏVÂ×Dž·„Zò‘N£™7 Úê,&5Y„D»À‰Šh¾ô–W̦3G¬fCÄtQŽóÏ$§ýù™ôðáÝ»_ÙÀ逜Tò +xþ­ðÝ·Wz>h´½1üï$xüýÚÿWöx‘vÉâ&/@Ð*%R´SD=YÚTþlª(‘ÜI‘8¿Rt–-{8*0Ôæ¯•¼Wß2ûÞÅNםߨjcÕGCtÚéét6GõóÁžÂ¬úÇ.öÐ}íæA×hòdŒ{Y@¡aH¤Í1Wþ#$ÊwÖ‚%J#‡ÂÎp–뢚ôŽÑþæyßMqzÙi÷Æc`pærÇvMeñl1h¯Æšç¼¯¹°yjçrN)o² ì*âiµŒJ€RFœºBëð& öYoŸ#¾›J>É<¯Jg¦,‹²Ìsí½J®2G¤ŸÍåæP+¾âó÷cN’ÀG×éÈøÉ@Ÿ_Á_57ÔàÊ Øsà—‹y×Åê”;k}­^2öX¾”ò5pÆÒß”àŦ׈ +ˆ£<‡/Ñë.ÕŽós”“Ⱥ—f÷j~ânÌ.n!n€ã¶Èª»ê1îS=ÍÆ Dªºx|{Œ´[‡[ßìK6kûGÛ¶$Æ…çÌ '„ãºÙo1±ÀŸô#¿ç1b|ãy/Â'ù»¦™A‹ÒÖV` `´üçÒ§_üÂˤå¿sçÓhÔÀH1¨:ÊÏ÷ï¢'àƒ÷îÄšAêÞl\¤FoH‰*\0€è ôôÑã§;°ƒo¦Ë…AÖ«ªP„V…ó³Q42¨è1¥|;RÃß}£Ž9‚/gVG*èP&‰e1ÁÈ z6šîîím§ÿV¯<Îp?KPÓ*§öÔ:0ÜßÞÛÛÝÛÞæ­Õéœxj„OBŽ©ŒÎ%yª1ÊmÞ.òáÉ£•k¡€<…¹ Â:Lº}M·ß6©yø”¤ E¯ÝsvI”"~•ý!5.èç%ýÐz £.ÙíÕÂPnãx(%8þÚ¯å‰Í1ÚôàP›û ¬ˆUÞÓ1á+GšâèHõzÚ‡T¨i>ͦºöƒÁ1ªÍ'ƒ®0ÐušB¬º» þG1z]AØç/ Ø8î;Ã)H0Æxa{dKFÈMe“ËÍÿ(ÀØξ#$)uL¨ù Ð)‹ø´¡Í3Ä@JÓ=g EÃ3€Ê¹Þœ%ßR€ôÊëÏ‹"8pۜHÙÌp},¡ ªñ €Y§‹¸ö)“¦UŸ¹Ð$>r¨,ĤÈb YŠ2ç!ƒ +r ÂEW¬D¹”öß_ wF̹˜c¶²a÷p{oÿ`Á~8}ñóéŽí +ìÌâÀ¦pÿA¢ê$ÜÀýûŸýñ³?ò×h{²üWQ Ñ~RX{8ÿ«Bÿõýß§( ƒ‚S7Àæõê…=S¢BêöAoáwÞåT¬‹&Êß"µ’(Ñ3ý¸ô˹cY¢ ¸Âàa];ÙÝ(ëw;(ñ4ËÇÑK§ßvî¶l¬VWÅÔ^íwmȶáóKtèO§CN娩sóy® §¬Ewå*Œ;÷tRfîºÐW>ä*Vz–Èþ¢ÀÛFÚR5¿/qÁ³ÚuM³‰ÁëymOo‘|Ø„û®! ¿6ðD¶ØmQ,*óÇOþ…qxÈ`e¿3DÉ…Eu/Òë4%…Çð=’W˜¢óö¡q°4Dÿøx€Ýqšb½`›`CÁÑøn·£¢;ˆ¢‹Š«û!Ÿ"D×y‰9ÐvTÎðg5ÈîXS$ðY)aîàP–&ã f9; `ðö;dÿÌïQ° ¹›.‘|ãi½›5¡=¢p‡iX¬‘=°ñ̼]Ý=hu{YÆ8Á¥f¹> ïCAHϦ‰³˜ÄMWóÁ0NüBþ¨G9£ÂH®fù´×¯‚É\¦¸Ê•´¨{­þSMyxÄŸÎëe½›Åà®°Eá¹áª"€rÃ+ ¥²tR. 0‡ZiD).°v¨YõO +„.Ž4 &°Ë×À–l‚…|:C‚?üwC}Nµ0èØâg,@§ÀŽ˜ƒÑH–Ì!ÐíçÓÆ lëeܯ + +€ú«3r4Ÿƒì©Tv¶ˆ)În˜yÚsè´8Á39­¤×ÈnÐ>è +öŒ£ƒÓfw`žh9Ãʃ}@tåâÙ·¤äNaWÈÚœ;:Jã^QÇ|ã&Æã‹,·ê#"vÖþÖõ›ÇÍ`‰Ü 0³ØåV‰£d$7—'ÒÛöŠ6>‚€øƒ?›ö»ÿ·´Ù2¬ï¶ŽDàŸKѶÿáIõ^i}Àdòïܽï~ŽÚy Èîýãï¬@÷î]h{ÚhÒÞËì1àá#û_Õ¾\Æ(hcšªFá†sYh–‚Š"4P,¡ÐÌirø‹N#¦šHøÀä¼°×Y·…u³èq¨êu)èegËóIYUѯnd[U¿×9èUŽà Xä½vw0Á lu.¬\v› îMµì±'gÀ5 O†tÙoÍRrS«Q‹Ã;Žd§_¿¥óä&‘KÌû¬ß’àr˜Ò!Ü)DÃÁsò¼3þ‚D4aáÚh{ +p¸yˆSüÎæAá’Æ˜T9Ì`]Lzƒ) Ž´ÉŽzSõûcÜŸ¢vQ¢OÀ&[¼q² Y³qÅÛÚ§1`j(«= ì½ÈâdñlÃÞül«DaÝ `ߨ8ïl!+ æ.4Ám^p¬Ø©nUAXŠ vHÖƒŒiyËxLþŠ|-mÓçAIÑÚ°tMEì»l¡Êìûo½rf 0EWe!“îe :¹ޏi*¸€|ÝÚß¾q³g“-úÏ–•Ez&Á8š¼#ÆÉÖ› wÙ×ã.Â8Wåþ`wì°ÓÅî.…qpœ!†šv[ûû­v;yULêøÏý›’þì¸1¹—OuvðÕÁ€Wß=úö»o¿{üÙ6úßÀÏ2€&\h À?þð£a@À#UþÍtí"¾ZO[ûƒ‘‚H5Í¢S{*×(9Š‚šÄbÓÎ`ÃqA|Ý^t”W +K{ÑáÖwö;N\³RôvìCˆ£ô§‹æjìÌÎ?©WÐD]LÚ{mJ1›Ž8ì\ˆ0q8Ø‚]ÆbEbQUÎrG›ίÎn4¶`'nõlýŒëØU€ M.uI ¸†ÿªÌÉÍx8¬V6ë’Ðhݾq«ŸW¹ ‚¨þ\ÂpmèxíÜBÑ Gá«ÿVŒN6À›ôžºàC»1£Vø!œ5ý_ϰq–£—gŽc5Çé°×Þß;lµ:¿(öÛ:õŸô•½Hwœø‹;Ô}ñâibšçW¯¾}ðÔ~Ÿ]ÿì3§ '5Úþ6üñ€²'ðÃ?Ø#‚½¿H—ýV‹ñÁ^oœãž‡xùÔ“cQWTt&SÅÉA¶¼"d6ÃRÝ%'M+×ÿBýGøJ=HZ7³ùÔN,E1<ÚuÉLŸD–¡l^z®ÝƒýöÐð`UL@¬å€Ëâ?™:ÑçkÚª:/±~v­›ÔN0hNÝ)ùˆH BXTö¼!_ds¦ÔÙ ¶1vžLâߟBª 4œäÔw,(‹d#Ú"Z/›ä]ÍG dñE•pɬÆ):•ŽÈ[øÙ“A›§bn#§ä¨Êa·_É‘88™0©runDbpòSïk[» U9¸iïC9üs„•JÈyv¢0ÍGy9-³ v ½óãx³1:00k{Îrà7aIqFv 42;çޱ‹¢ðѬ7 +˜mÜ:§Ð«çÆ¥s:ð6‰uÎRŸÆ‰£ì*O†ãiôì%G|çþ¸ö`šz_†üij8ET>žØgDz,¹Ð˜œ)>Ä1êbØëÚV)@¿{Ü9<ØýøVo*zHa‚b€k½Û²£f¤«ÀBų+˜ßÏÂÒý ¢ö©?ët€ØÄ” 1½°XÛó ¹Ÿ úí}W­„Íþl + ÿðÿŽê¿qR3`¤o æ¿ ÿüÕÓûO¿ûöÛGÿHúßÀÏ2€§O¿yúôé£G/þgBõÿÇ„o^þ÷\M€Äå‡ûOFȪlç_ô>Ð:×4ðY3°Ö.Ñ6LÛ³(JË)æçÎ`œå9 Nû =âPÔ¯ª&uÖ>hÅX#{¨;4¸—VÒºn·öGð}Ç­NËjÒÞu¼•]Y“P»¤þÆN,ëµr’ÏÊj6.ÝDz±•p`ÑlNNgm(à•6e“ÐܳYûàÉpÌÊhäĈ‡sQ DAî5#Úx._OG;¨¡Ö˜¨çW>! W5¦¼)À›ÉÄI\C“™Oúý`©@C¤ægÃ&õ¸Ûékí:ºCèÍ_>pï^¿Þ.ÁüÌþölò?é;HÁÞ¾vÿ±8¶ Ops28™dcöÛ_h4šœô!²ÑsßîYh*êæ˜9Qæâ±Uc tÛªÉ3àâQ´ NtËm¤p„æò*8F¥G›í ˜3¼9£Ž¨½á‡ñH½¶GgEogvE›r¬Ëb€˜fšã¦NŽ{ùd¶š¿~ýzÞèóOÛ7n¨rÝ8(ÝF£ù2[·b„µ‰¶SEl¯¢JœíÀ„×ÂѼø¾ñ츜]<œ™RÄ\¿n:8>:h#úÙ¤fÿlBùCýïÜujÐ;w.`çÑwè_½z|ðôñgÀ—‘B×ßeo@B€äÀþòÃ?ÚøÁ#ƒ€o¥K°\LÛ‡'#x$¬ÀA D”Eó6AÀîÂ8IÖØ_à>úEg!ZK!ú•ˆŠý¦ûíÖÑÔ*hU¯ +]€ÞOÎVïä?Ño%Ò òŒgÕáXWºZt:À>>‚QpTÊL py>P4u„4â +,_[GKl§[Ù¥Àü;S‰ÚìX€n·²]óJj”.Ò©°>>8@~0*œQ.ãœe´'iÝùþZçДf¿:GY•'”ˆÀ¨/L¿Á-ç'ÇuøÚîvºGÇNÌÂe@L1H¨á†KQ¢p¨à|<º=›јågÃ`žÓ}Ü×’|3Y88£‹ù„$€ \©,ícãg]Õ1•Øx4<·IÓÙ"¦(Ð\ö‰ðŒI’ªÿˆc ¸Ù8"¤¤þ>aû0ÈñmôEpûŒÂXYÈ„ëº-¢ ùg7bm–X}h™\Ð`HÄkðÈÅù)þO€ÂZoR7OÐKò?îµtxös)”üW¥ûö¸{'éë·îîÜTß`ß=} ðå—|…ñWÿ¯ºN,ôí·Ï½HÍ€¯¾ÿËùñÕ3ÀÓÿþ\ô€¡tà >;ÜË'êµ³¶Ö:G©Xñðý¤$!Æž7ÙM¦vâ7µÑ¦]uÿ‹Ûïvsœ0;ê¤èµðë6Ò*±aœÚAcŽpÆ)+x/.9Õêc¿ãáŽz*R³Š,âjGË?4Ž•5c½,oÕn2è¾t ŽÞ@g¶Ù))]Jñ²p”!‡e<*,ÒNÏœMÆÇój¸›Þ!h½šÍf\U[à ‘°þ +§GI°$ î® 'Ú+àZUUÖë—ü?™8©IËUÑwÑ[hó°ÿ“àìor‚…v«+Š0òåà°ut°pxèØéGbv\ÌÒÉ«ýã@‡W·÷à[œn?‚¡+jŽÚqd|† ¤b@DUãL[–µ¾säÏn€EÎÜ0Â1ÊN¢ +͹J¨ÜP‰ùœrœ>#µ«êãs낼ªf!Æ PÕêu]ŒÆúãDg(਽¿}c«?ž:M¢a¦l‡p$€«Š¥8,Ž'ñ¯|òá4pËðÊøÐ0’5°SQÁ.¥§¾N¶PùšO'c»·8šU0ýpj´ûé«;;Œƒ€wó/ ôÔ à«¿|·³óÝKÀ½Ï.æKúÿ&üýlMxµOúo[€A€ 6»7é²`qžÛ°¶c{8!ÉX))&ÐF,¤_Vl⌫L‰êQb!lÿ]ÌJÂA×ñw’i©ë^«Ó;9ÙXìÕþ¬®ÿÁG óÚ)cf”÷ºz™«=BD–fPÏ» çs «õ³ô–`9’Í…Æ›UÅIµþ+Ûä¬a$+w}™3é2yÈ&¹ôáyÝiõYL/ë_ÑîApæó “òG›ñùBª.@rC”˜o«VR…ŠŒÅÑÉÐ.‘O4"ë ”Ì PHœ§êuìa?þnçpOÞ·¯¯Ý½mþyù±Íoìrò…½Ý-ÙÞßßÝÛÛßß²g•¿ðÓöî–ï{Ì ì•1pÚp­w*¡ ÚK‚u<’Ñðå tÁ~žÈ½¨¿c*föhZà|‘c…ÃBòCç³bœ£ê‹Q8ò¸ °~—GŸÂû À õ$,?º•^ÊQHÚÏû)h>ËǹÓy† ~:D çÆFŸ)Z„A0J*Îá-ª€Ñ`èìCÿù5(\ð³›JŒ8I"í(UÚû»íVëúG#ß“cMÆw¢Càݤ/Âxù¾ÝyðâÕ‹§î}vÿê´Àü Hê©a¼_¿–®óê高ø!=xs7–“®5Îð)b^´÷‡yÙ ÕBóvAÄå:Éy`-Xp†í—$,£M>J %ÇåÊ?)š±ÈTy„0œ$Þ‹lŽñ DQ@Ç ¨~ ’H÷,ÐDäæŽÊ¯òInQÊÓ.‚€F˜`È)À˨¿*žòÎuk7@€,G-ú§Á³z¬v¤²GÄšþ%19hª’óÙÌ<8ºˆÖxØÝß=t*›èïó¡tJýá´iv®º/üú$xƒb8`L –ôüúÇî“þÀvì”®óêÅ÷Fxõ—¿èüø +ð :½™.ÀùYy$@¤˜­Ç¥Ô)QTÖiQ6( Íq…v ü E‹¯Ás`:tzÒ¤užçx²Cª=³‘i’!@]Qç­éôà iiNçU¯ÕçSçyæ.ú÷ènµÕºr ô §‘PûÜGÒ´bt«Õ¶™poÝáRóð)ñDçÜ·;ê¡ÎTcž¹"-BrîPU¥ç4f·,xê×È»½sYCîB¾,V˜†‡ky°‚…)?°“s1Ž)Á<>¥ n‚HƒþhšçxÀCÀ·œ4i_ÅÞ?ÀŒƒ2§NJ "f¤€(ðáþÀAüÆO¾»'84Š5b[u¾Wº·Ô“ð$´‘Mõ]ƒiÑ +«â(ßTãÌõÓ—v/(œÝ=¦$tÐì87öhçeð]OcÐ{BGÔ=  ±@¤a$/`jÀEŠ]‹ù äKïؘ'ÈÛFù4±7t¬u°uãöì“ãÔØŽ‘ü¯Œè(½20ÊŸ_¯ èmI vlŠ*O’Ë#òÀàbÆoqÿÍE#^×óS£"³º‚Œíï´;G?øå àCÇÖUðòÁý—õ2= *fNúŸF†p•\Æøüñ‡H^+®BúÞ( ð¾€Eél=kï¦1õ« ÇR.çM÷+eyqfH„ħ%‰»ŧU;Gt-1ËÑ6nçÈÈÇNæÈ‘z‹ÙÌ(u>4D}‚DàÏ’’TdÃQÿ¸h—1SÑ{2s S®œ.®Mµ,#ǵ©Ô#U„þE}™ø:Ÿæ>ñõ¨IPi5ŸÚàö3 Y8¯:öШxÎUÔ#.Ìc½8W 5{»ø@gÀv[.l¦ŸP}˜²m†öŸŠ<*K©L´,¸OÊ:ý"ž(µÿC88§'Б ºá°¿n¯^W¾å;ž>>º¼·‹¯£¿/³7à»ý~ȯû`‡S´E0ÀiW°`ø:C”ÕéKlÜã9”øàßr|ž!pMfÌNž!fןjÆÖÈ¡‡â÷ÏË +г›èÇkØÿ‰ZUz‘ìõÚ_íºn§Í}Qà4š BàÊ1¢Âg•c˜”8ˆug¤t4®‚†â²}gx²+ðmײò…€T]|PÖg”xiˆµäŸ=ŠGSIŒìØxŽs=½9@8æ/õä0ª¤Ghª€6xÚnÛ0ós)Qý&˜ÿ?þã?ÆäàÍ` ¤«/‚¼xù¼zõ??Ø™@g©8ªJ¯ú팰c›U}!Ù«ã¸ýµQKçz$·dºŽ á '‚ü:xr—#û}‡,ö]Dʉè“DÙÔb®Â0[R>ï¿Üëta·úеœÃÓ s»2šK±›{°ËóȰyæÓ.¤º‘6¶ØŠË‘|zÒA+‚ýÒÄÔç©ù §ž)¤².lØÞku;Ç Š>”ša¿J6Š’ÿÔ()$.ÀÎÎcÃÿãÕÓûº/yoC6S‚ÉÒÀ  üxÃH‰üðý_R_‚¿¼âJ?þøÀCƒ^úÊë²á—à„ëôñ]{`¬‹b⛥sªLX.FddÓQ# ákYTK— Áz3-àw±Ýb>³}'Ë¢¹1Á"Ø.Õm÷;Ð9ô<Ží2DÍ#ŽËNèŠ,56›, Ì6¢[§븫Z£y×@ÛeÃ,SÛÖ¾„Á†;-™`ƒ@c|j­ã*¬×Рç–FNî`mÚ¹^|Ë5›è1·½íÍbaƒ+I¨pNï âI¶×–wã¸yÿê A&'nf À‘cJ!µ¨Žåênì¥op#›@ øJZY™þMXöØ:C â\ ×qp°#øí`ötvw¶Ö¼=NCÖ’œ Fø§ÈÕ¡OHq51@žŒÀY@¬®ñ¿ ÷§o ÌD +îeõÊ`åƒóÈᙳp~åyÇ‹þgOžO½u1¯>ðr}òN«íM¼§Šíf3¨Ò¢I öâmã!4ÁƶÑß|g2UBìVþÁnÈîàL7¼¥ãBRŵ͕Uþóù /¸ÁدOO..{cÜ6~ne}iÕ…«. 9Ø÷ǃԆ”æÏvÙÞ›ï_æéÙv°Èº~‹gzE¤W Ê¢¢ +Dª0Ùa¼ý1"AÝ™›ZbÂëR=¯«Ç=̬Ã(’î„’ðG¡O~å>€eUð@Y ü5Cƒ>Ã07Ržê=;ìà± #øÿîB> +þ.ï˘?­’s:g)ñë7¯öÔ"úWŠ›b¤ø«½Þº{óæí;ع8úeÈ›~Ÿò + (’¥À½uCÃ5€/e€é“€Ÿ…þgÎ÷楿Ï}A¼`ІЂï. iÚc-Z_[‹Ðe€‹WÆÁù¥âVÍÕkWTºþÝfÝ=ðî2„<joß×¹"dÃÕ¢ë^è±ú¢õùøÄ–+ÎèÝN‡ÞŸüfy•èÊ…#«kíµ-ÌÆÖÖÞ6„¾Â‘˜œ¬ô‰_ý#ÀiJéLëAþÀÎÊ–În{uê…7ïª@‹Ô¸;MØž›\^ÛÚjÃ+uïÔµäO-eö~±MJò;WÂÛFdïAd§ÉÐDàšÜgÉIÓ^j)÷à­ÛB å²V¢4ºR™à ½<µL‹yÛ”-ŸTRï¸ü[ÌÈ–À[…Àë¿Á*èF[K‹^2€ä‡·ïË0Wb,­®nx‹ÿMo¹š'jrúïv¼¦S`´én°Èù³Å´â˜ZËû,‰ øÅ²¸€¥¬¼à$ëÛN€~ á>Ú°ãòÞíÝö¶&Õ‹2¼f€†ëlaâeAgN½‚ùöâÔòÖ–èÇ釸ëìn¾XÛËÑ‚aS±©É1!’lMÑBè5M€ÑšÂ>'-’PrÒÆÁÙ7´´39v¨+I°Mô ÍÌËK÷ª¨˜lÞ·7WZÿËÛcïz,Àâÿ—S_ÿ’¡@˜ÀÕO>¹h>$x´07{ãÆètylÈl=H?_†ÿsçÎcøŸ9óôa^0Ç„¿³>ôí;‚ÍÍ5yÁ‹¶&n.®×{‚Ñ$ø"¦lÚ&ÉŸöĦ@Ãm%Ô\½¶ÕƒÍ@<ÐètøN÷ùR^¾“›Z¯z§‰ñÉLÈå™ñuü×êRb„, YßÜBûÀàš8Nƒ¾U¯D÷÷ÐQ]—}Äi3XIÒ$3hàìØßÛ}ã}gv7×'±ëùU¢#U¼Þk— /mf@wC¯°ST3cÆRû7o´x ñXÏ‹JóöÊ‹Vѱ×{¹.cÀAîÔJÁó-(¹ðK»º×nÓ‹Û¯pWÍ…I^ʈ°{woóÅâ^ÑË|ñÕÈÊÚ ïô¿’µÔ¹,h5K*„ÿËYXåXüÒêÒÊÒ⢗Z›t©µ²ìõBË/Øíx«·ÒÜtÍàôŠmëaßô8‘¡·¤Ëm–¨ðŸÓ¨˜ÃW™æ°ìÚoBý‹­öž÷,ô™bK‹ëÛ;(CZåý×n«ONMŽÜwØNÒZÝH<îí£ð7›”pÌonbÚS“Kë›ézŸïá‚ lÆZkY‘9":599xÑÞzùJ°W–§¢ŠôNÊè +âŽÒɪ²*cW!ü°Û$‰T˸»`,“Y'Í·¶Àd¹‰(Þ& À˯8]Šs?E ü¡ÿ2ððáC,`ø«0€û2B€{†ÕTÐÃ2þþÿÁ¹¾.TP¦ÿsé1Ò7°÷rsòvk½y¶©÷?¡ÌÅ +"âÉæSO°i¡GÛ¹G—ªš2&¯'lïtvð5íoHï$Àâ7“KÞx GâxýÎòäâòJžð¶ÙvÌ…ß3„¤#vÂE½Ó‡½ˆi±,Juj™·‹BÀùbI¢ª,ß_`ö77'[Jê“̽WqUÑ^gêöÔòÀHH¼Þí•ædÈyPm+^ÜLÀò²³c«ðWîyIžo}qB–†âr¢Zˆ®SfWØq¾ek}y²Õ6°JýBp7»û{í%<*&q³³Á‡íñ¦Ê>~Çuu¼çª¾UWÆzÇ àùæ—|¦Vžú…Ëw=Þ‹%çêø½¶þ×7|8ÃVOOyU·ÉŒc÷%Vö_{b©¶>¶+ÿ6¬hÑCom¬M}ÓÙóšFìÉ”1Ëq…£ Í• —'¸\Á¥ |ŒÝ_\Ã8OLD½±Öššh9™g ´§ˆ6%¡ût}îŸúr§½¹òbÛµŠþ!²™ÿøìOZP˜—»(‚¤ôXµáÃÜm|Ãý*+ sŠ›_X²,öÆHð Gbÿ©Àaj†”¨1)ùàß‹^° ÛÛ«ŸOݹå:ªw V˜Ÿ*ÀþÂÅ«åþ À?2§¸ÔÞÆ<„`¦óððcÖ|€¸­˜€.þsS¡\ôpá1 àêÈœƒý¹+0 @+tèöÄí_êË‹zU|½Ú +ÓÇG…Ý;LL¿¼î¼~³³«qÐÞþ¡%Qd5xko¿Ó†áá Ö·7;>â’X Ä/̉øÒ‘Ê.AI7]–ŽòxÉ_öàøjç#Å;ûêæ5ÏfÁ~ÊŸ_X{SÑáru|”F¬ضÕ^l¡íüêIɱ~w>ÿ|yÍÈôý« 9À<©±ã}TT«÷ªÜEÖ|ÙßQÿÐ5Ñ,à…|U 0 ›2ÎrVÔn×Kc°~œŠL‡h@‹èGÛKS@U&ƒ†?yÑ¿×Ù¯—ËpWW0üpÜÔ;­md‘­Ëo½w•m.ÀUØøâÔË+ö}Þ—\Ùt`¦æÍ´÷v2+ ~CY«å.ÔG¼²ÉÁÕÙÞ^{ñ –{u|Ì)È+?½é\¤àp8bÉËIŸ¤- È…LNJÀLŒXtÔrbâÎí+O-~>qëNk³³½´¸ì,@µÿ2!Ûiu¥\é‡|ûm‹— É&&n~x¹µNƒ†Š¥géê±P•‚–µéùùv=†Š£¶&ÄÁui®US§®t•+;à ”(y¤D;ÞÙò¶~ǵ@ïZ ØÄ |ä4à£ÈÂhYèÁC#_:—AÀCcŽ– Ìž?ûÁq Œÿ¡?_Ì$@ñý•À¿B ´=y§µæe08)ÇÆËÜÊ«ýƒò¸þG¢eãŽVJó¥e#yyá®|ž0 ½½é=íV[-4‡#4.«.¯®ç¡²üyç§!¡ƒŠvС­û³‹w± jq¼»;Ûœ£6,yÍ¿ˆt à ³M¨±í€BŸT¾ñ÷ËöonOµ\ç˜=>ÝÒÝsJB¹¥µ7‹"›Bç+‰dŒOù°/‚ãuç*iýânÛz»{Ðél®N-n{÷ ³QÐ~%´[S^ì²…¿ôv^Mô¾¶îlêºàç kàÐ +ï¾¾N|Àï½á +Û%¶zYþ†ÏZ)öÂŒI¬·7¼ÿG£DÀ›*Ó ÕN‰ Ô-ªýú=[¬e¢ ŒF z“—,/o®o.ÝúÉíÛw>þá‡?½y÷Xžçè¥bÈÞʆ^“hÀ§ÈÞ'|àö•Ÿ\þ©K¯|<Ù¢x/¼Ô R\}o3B®ÚK+|õܯ_:·YlaoÊ: +î &%2f)lJ‚¢r¨„üôןÙNÏiÜ­>é=t}v æÝ£=ʱA:ÄYÁ×¶ µ¦MÈÔ;‚¬%Ÿpió)ò"£|'K®D. ð9àm‚ƒÿÇs0€BÕîßüxa02zˆ`2xNðÁÙóçΟkàßÏ2øü¡ó€aŽ-‚ÿxþ¼ËŠÛ¡ò¯^vîÞYZE÷ev¸nÉþç-¸f íI“9@ƒ>$EÇv¶•Ù¨ŽØûÎmÍyïy>¶¶Öµ+ÄoK$‡q›ö ƒ½\w{5ˆ„åc»Ì,í$l†ÇaF~sÆìŒ×å *¤ßܵ4°87ŒÞrÙ·¸nÒînuÖ¦¦Ú嘮¾+äB,ÞY|±êT4!*JÅ9…r–@‘†N¼¬1'$9OTO“Æ™´¡„¢ÈÓ¨t9GŠè©ö1nÚ¹öòÄäNFÄjG¸ß_Žv´—~³ºæ N@qŽO¨[sM…÷âðZ{GóVÖWŒ|\X[ââs+ïƒ×—½_íž{køL öaNÚÞÌ™q ˆ=ÚwÒƒ-:yªf!´¼î|ãCVÜ‚ÅZÆ7Ä臘d˜ž¥Ïǯܼ;9qçòå›wîÀšrɺ‹þ]îë EËá /_ò¯“®T˜ù·á ^c7EðB¼³ïx`Æöhl 3A "¿çCN/ޏùáO_ÀbØŠÝr(Õ²c¯KÉ}×X±{ß Þ¼üþåŸ3òLw¤8ľ%¥3Kè‰Þ„„‰âYøéÜ“‘*~öqη?¾91õÃ=E*ÐOÇý®þâÓbü+ÓwsÓý—88?7ì: þ1€Â"…3°0ïäâã…‡€ÁA/(ŽßõE‘ùޓ޼ܚ¼³Ô^GO¶˜Š¹#¦^¾Ú}éïèA5ØÈ NZ´´u5¯Çx'-¯ÎÓøÙ\0ºµ ou!ðä»m°¥Þ¿ÞÛY[œ‚¶¶W777IÕÞ“`ÓÑH„0Ì™[ºÔ¸ÞH‹ä=•Þ†ôX`–î´8QÁ)<…îö&!€G¥/ÝåÃ.øfrqbüÖÇc‹Ë­E×À¾(¢+“½çÄònïla¾2-§dN15ywüæ——´¢DìQWJ'¡hNz…nȱNó© +TÃ-tNY½éw U°Î. HµÉAN b`£½N~{g}ejâæÍ;ãSÞfå4ùÅ'§½ŠûúôB€ò½gŠ˜Ÿž{Ì' `tf¶Ÿôf!ÿ¼ëxö(/×È>x¾0\€nø7ŸÝDoOÜi•…Xø”Paù0úëKÜÍw¹ o .cpU#‡j^éws—ðï4Ûôw±DGyÛÄaL/Û»$vogÉ…©pÕ­­m/Û‚Œ; ¦¿—DhŽÄæ@^â t:ÅmœËûë½Ü÷>öÒzpÿU–âOÀPã!ÀÒD«M‰Ýq¬˜ëîÔØç‹«NCJÂ_yÕ¡¹íeM +©í3¼ $‚¤,2Q׊ˆî€†Ö ¶“º¾!¬¦NýLõ^îmo­·¦Û´q¨Bh0…¢ð½5µºíL™·d„-8ÐÎ!íöÆ6omÀ ‘Ïԉç^Ž‹Ø68ߨÇT7Àýæv¬Å&¿¶Ä¾¶Ä«ðw]-ÁõÊ£¿[9z“òѮڀLòØV„fÔ-Ö’RB,Èv{eù…·(ùfmµuûã»0|<>HnûçÃÝ6½›çno¹Úk-w3Ühc–V—^,ºeyø{Ãè-ºœpe‚c¶ûÞ[byI&OUðï³ÁîŒüÓ€Ä B[µô…“±˜Oïકµ[Ú«—×DsÙ,]t?u#ÀÃF°ƒ4Ž4½±×9H"Ò9ØÖÚݽuóöø¤«®N“Ló,H0UŠ˜+c„þs£##3–Y€é{ý à왬ýQ2ðÁùó}  J¹Hq ÐiÀé%ô÷òÙ»+𛃠`Åå›^iO‘H¬âEÁfVÅÓh¶—Ì‹R'öòí)³·@ÍÁ÷`Ÿ;{[{|”oEN´6Úvj¿=5v×Çñm­£’-þBÐry%D,ŠŸñõnñô®á“R<ùF¼² -DEâfJì?€ÃÎìm-O.¶wéí>1×Fd‹o:ÞˆÄÕw»>ÅÆ"’jÃs†ä_ÞÙ¦Z¹Ï"QÛDc©å»´*W¢aüJÿCcvP쯎”ïl,N` óø½"Mih„ƒíßhŒ:¹EsG(yä–÷ÑÉ  +R޹±½åÃ]Ní-¶6;z[ïÁµkèloo®³3·ßÞÊý®´‚(³„f;"Ñœ»’•.í8cæM¹Ë… 8‡Ùæk¸†jg[R·8qwysóŸkä_spï,â²µa×àµ;.ñÜô¡ß†%&x Àf{mjrŠ íÄ%œ÷ῌ¾Óyñ¢Í)ÝQ¯ô†“†K[Þ6ׯ°Ý‹!¼å·öŒ"«'©™:„ZÙõt’ú‚’«Ò|ÅÊ{¨É2|ceóË–èì¿Ü¡ÝW¿×LÝÍãïO–ðüSdè—ô3€çÿW À  ýÏ.ðÆž 0£3÷îG +èòÀAñ/ô>‰ø}aœôšä© `¦ {ßý|0ׄÍoOÜ^\ßÞÆÜÛh¬~ýWyÕršAÛɯÜ: 8ÚB¦êµ^ µü´ Àœ1îx4w} ò7µ²Íaôðnkâ\nÌkð´\L䤮K’èÚô”Þ‰^° ²ÉA1¥gýÍF‹‚M²”îÓ>ÙuNjíu6–ïNÁv£p@WH»û²=9†XßÄçz¡€5²¾ÂÙÊç‡g%=îÒæ±ÊžïÅe‡Mà\’íÂÛFá{Ø” -o¦(ööÚíe@¼šV^UüÝ^j­9)޶nïxoSñ‹WwøÞ›$omf¸Aé}Y%û®»*÷ÙÍMû:8_ŽÜÉÃ-0ñ ŒP/öÕ¡¼]ZOÃʇ œx˜š¤Å­Tó!§á‹3XtÍÔncuq|’Àicâ¶k}T…îôB:f´!ç~pê6:¿¹¾ÒjMOÁ ×'[Ë«íÜâ“Vâ*HÛR½õÖ +.¾4¥C€NwNf ÀAÀ]¬©°gúFËåE‹Iîæ×¯ °ìb @îö!Ç$e®mÔÁÕäþš9¸k»ÑÇd‰6ëÿ¶_înl­­NaˆV~óŽ•@ÕÓŸ$Ÿf!paÅ<~ü0ï­»dóÞÉ[à,À¨·ùSâðcÊ(  àì¹óårÀb2ðϿõbd5 >ÖšRø7.¼¤7Ó^¤~—áÖ½—2Ð}(ùÚV{Ö[^’ÎçzvëÅ99‹E7Ât‡ÍpìØÆš3]ó¦­% /ÀÎÀh‹t&{Ôcy5Ž@)!@«õÍÔÄØ-À–Dóé?jç5š©K â-»5L*:Ð5v:@—|¢lh˜%æ=àÓ"Tó€^D©1j€1ïÆ4‘kœO‘O‡@ùÉÆWùw ßÌOçv öþÈð¨T~nÚiÀ†èôƒüÊ\ Ô] ˆäž€ÕtåñÂï öe¥ÿýÒ¼\¿ÝÚ\/+Cñá¶Âkyޝ@’fµÕØ’5W%*Û'ØBíPÄõÕµå. »swjéŲÓÓ.•âÊr鳎ë}ÐNN™œr?ò­þ,ïñÊ„Úv7F÷t¡¤¯–Éâ¨a“x8Qïöä-W%®y)’jjFR¨ "ö³þ/ƒ€³háÑÓ§ÓC3oã¿g¨ðöÝ[/Ö¶³¢ZX¥Qh¢ÎΫ7:wz1 ñm@wb2vXÛ¸1´Ñÿ’…ª#ÙÅ7{£¸êÚòÒjËÇðöíòòªsWŽæî·idŽAkgª˜~ƒv’ÍËÓ™3gõy’œMÝLŸA Ęg7º™Rq€s\Õ È6~¬O̧¿½W©ÛŸO­Â¦UXëüŒ;ª4(ìÐ{ÎhS +·é0ò6àäú>ë3JÙ)#'‹ +¦qÊÀºëJV—î.–Õ pí†)ÛöÒÔ*þœa”fô6+8>ïÆ…Åt9pÂÀ<¾l‚ø-í© ýe^ÞõŽ@ààí6ö÷KÞ§AádD î;ÆW®üôߢ< +n#jif™WéqM”Ó¤‹±Y]ž\jïmoLŒ-.¯m:l’}F'ãô®ÅÞÙñÙÑ(ÐþNvAé JÚÞ;ãAõ ›Û[$ÍÝCû-ÔÞÆÒª>]° …œÃ,nª±X¤ÚpÕÀrù`Ù”¦g»pFYÒ]Ò¸tUF•`&a«÷¢d>1~v½Asîmmn¬¶îܺ9~wâ]}ú‹¡_|úɉŸüâ€O‡>jðÿIa®•¿kîÃææ§sC°Â€üçÎ}öëP@ F €ßP_@½ððáóçÓ#eð«C¯ ''nO­l¶}’¡EÓp(:Ys¸ßÉÕÿñëra¨ƒš]0f‹¹zX«‘¦Ã&Æy!¸öÜ'‰mûd*/ø‡ö» syõEVµæÂtüƒýÖ ÅÐ5;nœ“Œ€½å-€¢$gM¶ +ÛShbJ=5rÁ.O-}:p¿×ë—ÛS·'ÆÞÞ,6Yˆ¼y½ï8ÊãXÀkFQ‰^êE,“Å)JHÑ«;!q±N†|§Œ~ªÛëߌ/z“ã¢îGd·e‡¿ã¡ÀÙi"Þƒ¶û&€-ÛØ‚6œÀ•×®hÜÙÑ HÂñø;¹A3¶•ãÑàýmì¢DT›ï¾&O¦ŠJ?/ÔUPbwQmVÐe¯†›xû×íõ•©¹z3wo,M‘ˆøvpòä¼ï€ºçÜuIGËi;•µüÀ²†ii…òb8l¾Ò"6Ü>UÚl-m窤L.µ&§&ï¸Ö°‡ÆÚ¢p„”4ííúlx«0·ì: Ì×§²ØœšÚÀÔ[¾@æT¦]› h7­b6~ÒkÞÀþÖØÄØä;ÅÍŸ,2 àSÂ"Å,Œô1€{O fºwœžÎ Ÿ¯×d Є|úXpþææ}¾¨ +ððéóéÑàÿËû‡^=Ðy³‰Xk;m˜h·]L+ZkJcÚx °_\ ¤H«3zp ++ìÉè»A«A/Þö)S«këË«+ËKk«K>_ªº…~¢¤˜zs%øäøtÙ@Ó!{{Y„—A_t6a¢ë’/r(•Í!š/¦Äx2^θ/µv1îE,dŸ¼ÙëLÝ™h­mlmf,Q*ë.NeD¿@öXÊáB’}‡”ÙŸ³Z¬:OË`4J\`¡‚€×0ôö¦S¢[BŒÄßHA¬^hgijem æô«ç +šÒáR^ߥˆì£å­» vCÏhºÇìüqùöþugWgê@¾ã5,릜Ÿ²AÙ¿Ó”[¢ê"mh°ÿ®Œãå:E +IÄêïµU¼øîË­É»­¥Í Jâ˼«™´FD)¸¦ÏI~ÎìÂF/dnÃq`…˜ï—ì¸Ä—øP@lÖŒ!R‘‚—O¸èóuzjÇ–©”Áî¶ÄDCiJ{àÀ˜†4RíÛôýV ÍÕþ“½ÜŽ˜äÓqŽtªQ䡺ðÈ<hüÝûô@ÌOxw@!¨ßž?ÿ#¯¬4jxøOw€ë~ ò€X#Pï ˜wà¯ûÇÔGŒ"ô!æ¾úòЫ»€Nmÿ®lÐÒÒX¶€2ÔjïÐJ9-±ûÚç(¥)ÙéðQÜÉhÉÒ¦h–ÍNŠ?ÖxKCåÛÙÚÜZ'öì­¯y)Ëz–Þ‹}H)}àìI‡a$Ü4Z€Î 8©÷ñ¤œ9¶ +j'=ˆmHYèN\´#Hv7Z¸³ß^[þÍäT¯_ÊøO ŠõIV0f{Þ¬ƒ:b(T¹-‰’+PPôGU ~ +Ÿ¢=¼ ù""Sþ|ªVž4µè™´²ýÂþ×/ÛKŸ{“6l§é&ÁžÈ]÷ +=¡\ Híó‘‘OîÐ)䝯(Xª—exZ€E t Àû$wÂf§4+ÆTNPp€Å¤ª˜Îâ45|ÚÛÀ‹J‰¨ô‹g…˯®N­lûP÷ ¼9ÔÞóPNQª_ì²æçeyÞrb| V`•åu5¢¦{/¿ã(¸ÞÖîN{}quïå÷´³“Õ.l\ê¨aÄ\yCŸR65yÛGƒ½ã~ ­‚ꥀ„eðâÿùÂ2GîçF†ç>~ˆÈ AŠÈ c€.üµçÏõ<ÿXÐ/ˆ-xÆç£2ðå—3ý¯é3ªˆ/ekâV à¨ËëU<‚x„öEhŸ„¶i,=D´>z£Ó×þfºæúK'õ÷wÛ^Û½‹Znûdáug®½¾m ÷Ï6ǧww2ÿK„ PE›Zäeg꜋íQ<άæ49·´í•V–À€=î§8ö?=ÇWé2Õv ¾OHÖ•Ô§396¹L +’ZfOõ±’YV0Ã&´å„ì÷ª²²D϶4Ip\+–á`›*ÂO] ÔÞÜ^kM¶ÚŽq˜V©ƒ€d ¬§´Èx^—okC*è2f)°Ù@"=»©ˆÔ¤\¸`C’Ú3”†¸Àôà +ÜÆ™å(ç£AcÖ-;BU +Ç“·dÍî,Þì‚Wœpgw·½ºº´¼õj¯ýÍ©õUÐìMa3ÿã#9/Jë½u8ibƒ¸ÃVgm©õù’ÆiiÙçÀät¤¾Ú§¤ŒÖRs5ps9°³ãW>¸<•‹%‹ù´6ÎåZTÎíµ¸dØ-û’ФüTΫÞ¼üÞÄ:°ƒ?ï}¯Ö‘:ÖN;žž¡°1µ›>îÊ'MN.z½ÓÉRp~¢øTþ‡.d @© `tØ1€Â¦û9:<Ø€ò_W& ¨èG<À;xCÄ7ó)Ò‡~^ýÓ€/×'1Þ 10ôô¸P]åóõî+m§-[8àÒc ›×f6¶ ‰üñløñƒ]zô~Œx‹=BC\¾†ãõ âmìÎ!,™ÐÎßÙø€‚ªœ‚>rKì±é/Ê—¸Í7i«¦Ê½X´ˆPGŸ2á6Õ¶X}Rí@„L^î9ðÂõhPæ FP› ÚzçSà% JL¯¢qZ0„‰ AðQ1’ÒâEÂ81”ÇÊ©S6ŠÖq€^  E¨bC"$'ÑbK8e@QS(õEY;gÐÞ‘ü†ŸÞ¾$팙uq¬(cogGÇ© À&¸ÏbÍAjU§YìTb ¾P°+K¬õ³J¸Bm“a»É4'ê쬯·–·_¾Ü¾{gi­•—0ƒxƬ΢}9 r™åAÛ›l¾˜šZj³ÇËq÷jŠ—Nø8Æ} zàx+pšâƒÊ àâÔàÊÙË‹ëÎtv^q +ëFcYlKkõy•J§6T-Íïv–,òÓ¼½A™ù0äá§÷ˆÍ/†î ³³íB ±[·ˆ¼æá49:ï×ý«ÿæ1.(Kƒþø'-„ßàѽ‘áY×cú3 ;øó瀊~¤2€ŒÌ7á€#Áÿôô—½×—ÓÓgèb_¯¾õrküö”“*:0[¢SblÛME¡Ïß €FuwÄ¢%M#ò_4&¬Ji»‰Äïø¢-'ìÝÝÞñæ/;lª»pxÛ¹GɯÃ7‚c¿Täèúù ÄœmôDæ®¶’}éÐ$v° ½Öá´xb·‚åÈæÊäb›TîEB*«¨ùøÜÛã­åUÜŠw›ŽÑ2{¼»A¯ç°rÚ ÝXI}…%¡4S¦=à04Ì»èV…˜©È€íÀµÞ¥|«K“SÛi¾Z ,+¯˜ÔNgÉ{g¤)Ò ö¸É•–^ÿð +šœËf0˜n£ñ€Hà)9½²£‡$”ˆ +ì–Àêõ«”ˆÍâ£éUÁn+“ÓVö“—Ž`”Þé€×¯B~X_m­î¼Ú[Ÿky[ŠNî¼8 j[DmÒЯ®ƒÞ/·¼/r ¡‡8*IéÔ;Ún»³öÂç'–+¹ Á^lyÒ?¼¼¸¹E;²¶I¤ÀEl>Ødéã8èó¨ib³ý´÷½­j}LlåÕ%»“®ÐtÙ{Fiº¯õåwo»pb*÷a=Y† ùÇþ•O?½zÔc†¸ 0€OëÝ»ï ¹ðüa]Ð,ø.þ+ø¼Í*ó7p8Qqi¡2èû¤7H…·ÆoM­â•;mh#tm!ÞCü5ÜyRí‡ßï¶2f7¬ÍPmÜ |†š\õW2ŠÄ'²1ÛÛÛÛíöÎæz{{Ï[éþa1ÿ Á™Z æé€’“ß2E!ÝoX¯æöœ‹Ýo\¹Çw4¾d'zÔÙ\žš2à ]±¼¿ñÛw_,­yŸœ0…žhæ4åÜE81ªŒBªDƃ£á¦(gVq(O)&Õv°O0€oZ£ÓÙXßX›Âa“KµI$¨B†­oVâRCÊ +%ÞÛõþ—Þ¨oŸìpíV¶€‡äj—¢ùø‰Aü.eÁ8Ð"1„ÁM¯|¼¥,ÝæÄœ¼Æù–ÃjкÚ’St¸Õ”1ptGèˆ7oh¯,/úüÞÜQb­ƒ-Ç;»¹óOÅQ™/;Ôdÿ»¬7Å,ûì ìaoueÕe½ŽÚV)­ì}Ó–½%ÖY) Ë\°¸¹¢Áø|ó(\ìK¨ŒêÃ&üH±s4¶-nÊLLèêÑXö…ËÚ‰p/év¶y) 1”·?˜¿uûλo +ø/ÿòÅ åcè À§CW/^ð®`H🠌LŒÀðÛÓC2€r1î^àêŸ +AAE?bP@pA€+ø¯c¢¾¾ @¡T¿3qsÑKIhŽAw•™g ]ÞÇ6û…®´!m/cµ)ýŽr%'qï”™-Êo5FECië2i½—Åà`rÃé¹­¶A‚V<Î+|èvçÞ8J–>— (»®ƒ ¨–¨è¸ÅB-·Æ'7Ì6ŽÞR(j,IÛ€uŸ¾)ËIþ~øne“+ m¦j!Oü±×[»—8ŸÍÖìMGúìgº©ÔÊŒxOgñ’©µÒ–×Z¥šå)^y¼%ÅyO¬ùÆúòâ²ß\äõ‰Öƒêò⌠+yjz«œ¥¸ƒí ÈÃÔ2¥ÝY]Z-Šˆ=ËÌ1ç€în­/.Ófe‘dð~w0“뮆ä‰@%€{™*æŸSiâ÷œÔÈÀâô£2yž³]ƒÝæ«Ý̬•Ù²E—&Rì* À¯´çöàEÑ&J5ê´W_LLéž$Ô÷åË­©[ã€-Î8W­1£Ffcð/^\J¤øÑ#G—SèRæTÚ+fHãÓË„e†ò´w77Ö§Æ&6½ÛMI摃7Öâê&á² üÈÀ>1ÂÈYýã 4[˦æ\0[Ì5††&È Ž;,iÐGñJcðSxÒ¢ÚS¶bÎb/ü &è:1ÂáÖ†"g¼À¤–Šm~“Ú;šo·m®¥¿Ù^œ˜ZÚÞ!*(Öãoœ6‘Ü,Ò+éŸíÜÛ›K­Å¥mZßIªúò" CC”0õÂÜb§ x1µø›»w®œ½<µÒÞîl{ëÛ¡Fœ!}…y²ÈQo∑Hÿ¤h" QCÛ'Ä€]*6 A{°-Zï,aÚ5XY»ýñ;DuÉß RQ~šTäçkwÀÈÈàt®†ÜóS0:]®¼Wܽ^¿â¿ù¬èGóøùy(À£™™…ÇÏ +¬àËé™é™{õÅ÷Þ `Ì`S´ \>-B­ÀP#/êàˆ__rx€W´øö*‹Ý’ËnÐëS!hÕ$Co5åàÑ%©™[çßé[ÿ>ìwÞ¢eè1^uÀ'ªŒšñ…«÷âÙíªZ&ÑcÑÉgõJ2HƒdH_f›÷4ÇKm´Æ§¼+pÆÚ«„TV¥{mÀÔò´„¢t\óä„?øÙ‡¤£bj“Õ¦vlvxÓ;ª.² ‘D¿ma±)°û¥%dkø‹ÂRÙ­½-‚絩;ëd ¢•WÛ‹yHAÀ‹Lð3{Ò‚CdWtéW9_‚„ ¹µ+éqmκ´¤¤Èpe¿YŸ×™ˆ$%‡ò–;””_Ànþü±ïEtîáu Ø‚ãeŸ»x°;5ÑZÙÜk㎭4'×ÄxrÑFýiúØŒík-ÇÚú‹Öâ²³kKZõ&¬NêZÎæòçKæPÆ—¦¦&~“Y€µ¬wÂ3•Á=­­wó¤#¬<¡­&•²PQëi]P+ñJ‘»'…Ãþš(6ºÊ°Ö7õ‹ ·6WÇ?¾9vgêóoêhÄ ˆŸ,A~À€Ô1€Ñ‘¡‘ºì{Þ˜àA@Á¿×4®¿'Š~ÄcÅ;&€Ïé™GO3Ð0€Ùézw1„u€/_®O·–Ûëy*NñEh‘ª 2U¸ ›æôéjlzÞ,¦òñ¸ö[5áñ0¡W|sÎ | +¶h‚Ó§ý2ި͗Û{ÛœVª=†PòOœŒSÒižÆº~ºwõÊa+¾`^§>§1#­¡àÎÖÖÊÊÒøÔz×»ij_ZÙ´–7ˆÀ$Á7®7ˆs;<T’˜BŠjt&Úb](rðÁ²M¹ŽÂBÙbšE¹ÆŽì§Ý^ßXnML¶UÛLÛ™ª2í´&—76]¼k4³ímqTr‡ö(ˆŽÍRÐd~å¸è/F©‹“Ãl¬®KHá¸ÂŽwõ!)00)_rDÎÁ¬Š/íIæà é_ÂI<y[°ý½­íµÖ*Ö¾³86µ´Nô„úð‚Œá2Ì–ö îlÅл+ótLg»M L-QÿÝUËn˜®f/Øy÷‹Öî~ ÞŠhµ'&nß<óCŒ‡­¹g7…â;Œ¶Ð†–&K•Ù4U£»îÒ̤2éµWY.¨PÄÆîcòñthš; p§ ¶¦>?íuuðÔ×aÁÔY!@˜­ `xtºÌÞ/à/£ùÚHE?"Ú%ÉçôÌÂÓ\Xðõð½ûl@*ˆy[†ý +X=ôN.³$ν;ÅÐd%ê¥qŒ¾ùE +Jåñ6¾llwýfL;k×3ò HZ·Ââ[BŽNÏÌf)B@«B’‘Ãx²R~ãïõÁ³Í~ »±›;ñå¡6¥IÊn(5õ1ûNgÐ&IuþÎÐ}™þeg +´ì£-ˆSÊ•¬]¦o^»”Ž4X…y³—·˜:vQu¯bÓ›=,‘ 8ð³dކðÍ¥ Öߪn¡þK”ª³í" OdŸç1áÔIJ³2ÄEÅRa‡"UÛЂtKA¿%ã›AJæ?rO·b©hûÀ´Æ"~Ñ.é%Îlð”ºPù¿»SãÔ0=` %9’fÑc¾æ#ÅÛïlo¯¯·V(Ëæ".Ä'uìîš+eÀ–ÇIÐ& ,)Ì {íØ‚£ K­)@üfw¹µŽÎ¸‡ìmtc§½¾ÚZÊŒRáßšš÷b ©ÍÍ ½ DE}·Ki"ê­M4n±Ó¬QZ+B­øý*s&:2Õ÷Á¥ü }ýI¶¤0ÙÚqåæ×Ü}×Õ€õŸ“¤™ýïIaìgsÅt€Ã~¼E*ø—•U@as™SDŠx‹”väU¯åò*Ý—[.ˉcƒëÑ A@E E(¾³%Ño¸ {|rxZ9öÙ i?6²w×)Zk „h瘌µg[ …³…:{²­Ï BÔéDD¾ýèpÅùÞ•^|GâqÈ@>º+mT9ʹ¶xUÜ`Rka@݈ÑnóJa;^ à Av½Q o ¢G$,¨Cc~8Š$Ö™³9 ím¥,v–ä¥9´E¾meJQ›‡¯ÃŸlµ×^LLmyI_S.*(ìëƒÅ‰¥¶K¨CˆÔC}ߥcހĄ‘' Äʤlþ, +Oy9B÷hÕ-”3T×ü°Wì,«Ø´;¿ÌLQŽRòºRíHŠh_±ÕÙØh­±}{j|qicg;Å-™“N KaR”÷X[²ØÝÞZõr` óRk}{#E3gEèßÝ­ÍÕÅ;ëJy6è²w»˜ÚØÜ"¬€@’Úóæií$¥ å%õ¼QØõ×ÖuÌИ€ÿ œÄ–Wíþ.åd]Å6úÏ{XœÎÖæÊÒÄ8 àÎøÄ»î XÖ÷$å¶àJw!Пpã‹Äð _Ž M7c„!íMܯ4_+úŸüãÓ?øãèéÙܸù7Ò?€nì·³¼D€ƒjïµ)Êâ­; +ij¸i]”ÒËüiå§y´ci8Û.}·ëååxM5OËa $ÕBT‡œÓcf!Óp%âÈ’¡»ë´5ææ‚vª@¡üâÐœÌ WOi‰×|VßñmÿåwŽ%€0`¸ë£o½÷Þöúd{““Ÿ$(Jçu{êöÝ%ŸtáÅIÑ\Í ßP휧ÖTHH¬a‹+Ї]B9h7p¢Ä×…^ÐZ6Öw´•åØéxOXóVÖAì)C]ob=¶Z/Ö\×~èÀ95ÿ"[jBÊDŠX~¨ªè6ß=ä{O¥oyqÁb“¤Ü4°/µ_”$ö f¬d:Ú\dsn ©H,GVøê€ËînY¬ co­´½©—^ߨÉCPVÎiÓÙ(~AðÜû’!ÀË­åÖê–…‰‰¡ÀöîÞ+çJ6–'[;ØßäRCìÉÉÉ»ãW>üáÄz;󤿹ãËÁ¥î6:Ñ5Ò1î1‰hµ¦ò>õ̳iU,w[MJH+¤¨®FÖü¡Vüòz•-ïßàŧJõô'ŠaÀ¡HðøOÏFË#A¾ñáÀNpÄñw¥‚_íÁ{(ÀôÜs{2ß0€™/3é@,Àï#¥t J—§6ÚÞ‡šîéx«%tok@Ðpbc+}XP:ѹྼUwP8 Àg:U…+!ÀÒâÔÔo&>>syqu³c8@ð´x#¨ðï)&e0 pe¯ Í:Z}(¿"»Ô”Ó9›bѬ÷«Ü'Œã)6TvÁ/íî{çÍB€›7Ç0wËE?'IÅùIrÕ‚”HÀ^à? À'ÙG0¼wcPW5üJa†asõr€‚ÿ0€¯f¾šáï+mÁ¬[^Û.Âê´–Ç:ÜOŽÎزÛÀ•þ +°ŠáiÓ¢h ’oÀÙ ?io]£qɇ‰øÃHËôíFTC·ä¤Š°‹ÖÓÄh‹„ÀgŠàÿE1»ABY±,”Aµ!¿—[ÑÜ)H„PòõF”- ÀÕÎÖ_!B-—›õI +ˆéìmNÜž˜ZZoo¹ÄÜØÙé°ì@% ¦ˆTHpË/87E1Ëgç¢Þ®ù”^J%v"‰ªö“EÿäÅqεWW[w¦ÖÑ,§Ä#ñÿ¨é>ZÙY‘«ë±4xo–<h‰E^q6ðˆ®£·ôŒK²Wx}où*Ý¡¤ +|„Úƒ{0ÀNŒE>|M& „èAÁñ$5Œˆ%9mÛ¡qbÕqŒk/wœX\_¥Gêò2ñ`*#/Òx$_–d{§Ý^i-ºˆèå–12ÜyéóÛÒЮf¢ý·×W'[š”tS ZS“Sw>þÀ€øŽF§²–Ó·œU ˜èÖ³ÇÞÁ«ûÂAg|†Tjž4†F¶*;8I5-†¾L’ºµ·ÛÞZ[œÃÜ×MA+Õ?I¤þå2àOóþüãÑOGʳA§‡°ÄsÓ£p2PО›‚– +~%ƒ÷r;€é¹r{0ƒäc‘ÔÈÓ¸‚“¥Å5Ÿ5ÑÙj;AÇ $d¥^ÐöÉ= ÃÙ¼Îk”sÇUŒÐV‚+k‚ih‰YiTÔþµióçÙ ŽÞÁBä²íõv Ëá9ùrÐy•q=·ùGÄàÄÉ Ñ9ƒwÄ\qsìÕxÕ±†ˆ3àS\z”æ/Þ߀ +TÊIWI¶›ã·&¦Z+ë^£¬‹§vd@mÀ³§Û‰aÐ8-`ÌæõØî¶\¸B +ò‹£Z5>°{î‚þnÀnïŒ{CÔí­Í"µ4Ñ×Ý©‰û¶mÁ¿êšQ@Pb´¸ |ûÈjôå6 +zM£;`L‘.&ŸŒ‘áE6`Ýã]‘ÒÃE~/Ô +*<‰¡X™Iähx>âÀì`׫¥:Ó/-± ÐZÙØ–1Q’4 çÿ³–ÀÒQÔr/U:kË–-o°ÑšÊÿ—×V·Ûô!-H!Ô€? Ÿ®m˜(ô¥“gØR/¤I¯ l‰í ΀Ã÷÷w;> ƒoîpá5ï/³>F€mØßÞ§Œð ‚ïý}Þsw;a~Â@;šâh›ì­ÝÜß‹6Qѵ¥)È6f¡_¢RU´JÛkM-ù„ÍÍíÎÖAî¶Gy¼•-çÞÛ‚±¸D€áÝáçMÔï`»C˜áÖܤžC ÷6âΛ]TdÃPYÛŠ2ºv¥ãÓ>WÖ¿Á¬lm¬­¯n©¥É[gjÊ›^‚2š&üÂQyþi*ù ˜qHšR·eXêùk,•_î7À¬–,¨í轡“Í“-ùÇo8OÆ]ŒðŽ £cM–Àåà`ÍZÑЛËSKpžíÉñ¥õ­í Ô$€ó/4„&2D|圢£#":¶iuœùÒ6teiuÌ„\p¨`|÷¼zlÉŽQh¥€¥©©ñ;Ÿýá7Ëíu$•mRªíŸS¢:¹£Ì +|3Ö`ùr½_¹×ä:e”å‰LœgÙoxÍþî6{ù7wnùüÓw] T©þI‚Ë, ÁRo 6=4*u_˜†\Î$à'¦ÉC ¤¬¯}Äœ3h͹ßYßhµî¶Ú˜Ö5¯DE¡â+ÌÁ;D`$ÚõÅV‡`=R›©µ8‘iÀɵµö.¡j¢I§ñŽoj¿(¬'ä° [\ˆÄ™ÝkÛéñ5t¯^Áš$ $"YV>ø§­ØH•‘t²rëÅÝ;C|<ð©R~’àûƒ{>1N ðhz˜°ÌÞút¦Ëî}epÿœ¹H3ö}T`¿âð¿Pø¿2‡™mÆ03}f«Ê:ZëÓY––×}¢$ÎS]ílxe<ÄÔ;yN5²Ë ”¿öÐÇBîèš‹£Û`Ú"·­Ò^€cºÇÓè Ù¾³½}‰ZŠ/ß5¦”*`]¶µ7Þ"N/ã½ôª›fhW³Ç3—ìâ{Wo»å—8Xð ±ÞÜôºcGÇ_kòÖî¢ßlÙÅd¡gëÖ•Û‹­¥+Ë tec}ž¾º²æ­Kyç{¿Ë2ÝXÁL¬múüËìÞííõõÍuŽ\7ÝÊúÊú2û‘õöæÚê²ÌãÃG÷/¯¬ø”Ä;7o{{¹2¶… “¾›­ÖÄ2F%@ JKè|ºjÍ·Dêü£Ñj³¿rœoB›/lƒ¯ÖÉù‡Â››;sGÀ(Ο„þþ$@¬à„“š‹™ëò±,¡ò¤ñ–]&ßÛÞÞð‚Ýö˽õÏ'Wà\pí×5Ò¹¼Ù·~u¾X‘pò»ØxLárë›[d¸ÚZÝÒƒXSïx‰¼ÁeF«0Ï©TüO¹àã3?µÚöžIþH-¬–ÊçÉSxëø&Ül§—¯wLbMʲÓzDš]{Åf ÃÙÒbh£'‡jn®­´&ocîÜùÍÿØ,@þ_F”ÁbÏù°• ŒxKÀ2(ìßöÿ‡€Ãÿ#…çÆÕ*Ì4³ÇB;,»¾‹rëÃ|Ž#Ÿë>qfcs‹0u£½‰=öJ>/øÀz'_oA­w–h+°›ôãîöðÒ ;G‡ÓµÔ^*…æ·°uâ Œ‚ $#tÆ$Ä·wÚbÒ£ÂÈçê£p`q»0–v{]5¢l;;Û;›ºà- ×ÖÆÖúÖ&ΙXÞ'T®ƒ·¥Å»7ï¬nŠÔ®¬:ªÔÙn¯·î\¹u·5µ´´FiLþFÌšïœa«ícnWÖÚ¸¬M¶øpÎÍmŸÖÍfvåýù¶é3¼uòk›+˜ŸÞ»¾š7 Ç: W×—ZSãc7ïL|óùäojè8U.ÍP!ßìm/N.[7µÕ»¤ÀQƒ¥¸ÕXÊ¢¤ŠBˆšÆqí7oþ,í…z-v k‰ÏàQz>±‚Òl÷þlJL Yi"È' sà@#ˆ—Ä,Z`0^¤ïºB°³ÿr{qbqÍáWó!9˜4ÖÐË5Êé±ZX4< 6k-N-ï½élÑ(t)z±ÿòñ¥.ÁÐÏ•€Kð òŠÔÀ•€wnýáäªnÄ»¨T)Þžë4-a9lܤNÀ_šÌùÁøRã˜Êb R¾!¶rm¸ƒ1!Þˆlmn®z9ð•[w&ÞuK  údñny8ÐUWxÀbžÏÈ0CC#Ó`ïs÷†‡GñþJ8,üJAzf™Ÿû*<´ÀY€êwZ«kËø¥ññť߼¶Œ±[_^]E…W×ÚíÕh60Ø’Poøðºðÿ}T ÀÂôt÷¹áaï$†Ü¨1€>&P±IB¢ý:ðäaVøWÎM‰xC°¯¦çÎT$x…õÒââ8p«õ¸²†×\i-/­.­ñ}Xõ¡Ï0⸵ÍUœá¶÷ô¤ åë[Ú†öª$¢áã:mAëÊú ‡ñ[Ä·é[!Öö~öB™cùã0, +;¶; [àrù­yvrZˆý&á +n×'Pó %EßXÁµS<ÿ–×–Æ[~±¶BV¨Ø{pn_¨ŠÝÞH”¢3qk²…S©µ@#7‡{㜠J/¤T¢@Xš¡&Ðáö –ãDX«+×ÄY\°yQ4JÕB¥¨zž5y{òîíÛcwnñ Ä¥j““ËDfÀ³aL‹ÇwFú¦ÎwûÞL¨é;L71ܳû]€àÉÁw¹XŠ‹^ Ǭêâhþá¸xc~;ìõq7rÀy BÖ4ÕtîÐ 8ÐXd÷;ŒÞÓðÚö1 }iñûv¿qƒÈf+m¬2­è½ï¥foÐØÙiû„˜UNÐYZÍó qç¯waÞ6,ÞÖúšO‘ÚsKßø`ÿþî gœV¶LœÖ»±€iÏ“%Ñv@ú…î‰aÌ@€Y¿ÉƒE°ÄCWrÖ½Wº:8±…•ÛBð–é¯+WnÞº}{büT1À?M„ ?àUy9p1÷ï/<€½Ã†z `Öø}v®âým©àWª( À%…@¶NãõgõþD³Ž”iÕ/|ÐÂÔÄM¸÷;½‹˜ZZlM}C÷´pš­eŒÀ*voºÂ—5ŸïÁ/6®màpÁ#„9žæë}µqÇüé’6æ!1·ö ½mÇ_BìlÁäíxG·ðæÀ±ë$6øXßįɯi}Nº¾º¹JÔGtma–µI”†Kü%Ÿµ¼Be^øð¨ö©©Åo¨™+Ç/ÿtâoS-Q¿r?8WD ";…K¢h„ÊãC‚ea#èu¼ R§™8Ûä3ƒ>¢^RqóÐÆñºÛ('í¥©Û7q)W~úñ•òJJÃAû[Sã°G^öö'Àèx$ÆÉÉØŽ?ªäŠ ¼¸Ì +oo/„ÃcœÌͧ\KòÆðÚU`‚cɯ ¶˜ˆ”üð@Ô܃™Ôqß^Gÿ,É.MpàugñN b㡈Æð[}NB!i‘ðG4„;;»›„“K7û[+^ØÇ)·öŒî,ÄäeÀë~Þræ ³v;²H—NÜ<ó!1ÇævY ÄY°Éå>ß~w†CüY–˜¾ ?Úƒ´oéDÅt À\ÑÏÞ,ûÞ/×sÒü{/Û[Ž&­´&n^ùéÍ›·ÆÇïNžöª8?IòD°O.\àëGX‚òd°§X×ìÈ\ð°0€QïéT¸iî |˜t @ ¤®`ÃW€~næË¯$2€/禿ê2½ä·‹·~z_4qçθ‹™¦&îj€ï`i‘Ï¥¢ +p-c­åå•eˆÂò + İD®à›3l0æÂ+[>º~ÓBã7;[P>p ›ß e"×¶ü¾¶Ä Û£7V• øp@-Ãgœa½µä¸9ey±º˜˜°õ¹÷gÀZYFJ½89 EŸñããwÆïܹuó§—¡÷Î ÷¤ô#hNçîÍ»‹Ë«.BI£äê–úƒ¶Èͱ@†M`Ÿ?wó_\žSѪ}"G•è1˜ ê1 ‰ q¬ ÍñÒÕÖÔ—•ŒãO(%¯Y«¾¿·;È3³µëë¾9H“6£h»ÍD?;[›>.XÂÅ^)×Ζ "B‚coìhUmrm É0»  ëø²µÇ¿¬Ë‡ù³™>ê@áÄàöú†7l!H‘ˆÏûï´·àeøÃ]‡`àb²x@ÜJàÊEÐÀˆPUR18Öß¶+HÜÅ>aO°h[ë­Éß,ï¿loâqVÖ¶-ÅP +§I6ѧ“.IÁ¬ìíå“ÆÇ®œýp¼µÂ]ubàò‰ è·K$bÙ®ÉæÓ~Bð|ãÝ[èN¯˜F+…ÆQªÌ€™©äk¤Áì9Zœ@‘®||ë]vÚ«ýd) {  âÿùŸ²ˆg.@>7©€[*ø•’2 Ð/Rót®ÌÌÍu×`Dw÷Önÿä'¸¢›dt ;@¬£AðHw'îþ/ãÆ«“üMM}žÛ¢–G$‚ÂÖ"D¿•¥xcl‚®y»€—^‹;³æˆºókû•ŸkŽ£­·a›‘íËËk+ »02^&&Á›ÃG¤#°xOF¨²øÍ7­Ið> è'{BéJÌÄÓØÍÛ·oߺ}óö­+ãc/ÿä㉠‡ú$½_Å»]vÖsgª©AÝ`¡†ÑZ¯„‰^ "ª“àÆÎŠ»OŽq»ŠcÚ)?g¯(ºˆRi% ß=ø®ÓÞïl.¯LM¬uàMa>jž¥Ð8°·?Ó˜µZ+­¥eÿø—èаKË‹/hèÛÜ—–Ç›[Lûi#¿yAß|K$·h3ú8¦UÌ5Ir\hÔJ²ôÍ0'²ä§,’h•’óÁ÷Ö䛄ӳޏ8õíÒâÔø[Ë„ìßL,cÉ©x¢!Ò¾ÑF4"±‘O›bñN~¶²ÕÙX5SFkö85¡¼­‹«/Q³‰[·§^,¯:ï³£¹ŒÃÅÏüp|yU«V(€´Ý“z]ám‹±Ñµ6=_4ãhì‘øç7¶:àÆW1ö|7–c¯ªtöv±}Ä—‹·~ú“Ÿþ®ÔÀÞ³x69¾´Û‘ +u_E0#u/®¾4JØîÀç6±âS‹[Ôxjl1·Tw0Q“F +MÛ¶ƒ(¯½ºB\ít\ÐÚ~µß†ƒ¬®eÞ—ôÜàm›ûÄäÅMÄq¶–uw>†´ò4;;MFþ¾%&È[õìM°mïÏ)×ËW¹lÅUO;ù?ÛQYia— ^ àˆ ` póò/_ùéÇ·¢„'JúIò©Ÿ ]ÕH`Z€'D0{¤;Ð/ü +îÿ>& ®P°õR€:Ø'}7ŧuVñ~ê‚£8…Å•J¤á¼çæŠ/ÆÃ ® ßöYšÒŽO…–ûVü±àž\äó®G†eÈÜ +s‚ヒ/`¸¡ü°|³$ÿo8´¼q”ÓfØ…ñE/ÚKù_î¾ö¥v-†áü{§ð—û…íÍ–÷´"=©^7âÀùËÎÝ;Ý뮌Þe#È(‘(• a\™üÙDöû¹“¿ë”°8ß…€êÎn̆ÇÊ9Ýëë%ðÅ2ùÀ2Ô`´'dqÐ^œx±"ÑTσ+ó|ÉЛÖŸJÊýWÀÛ[Ñ]ÎiQˆŽSYãÌv¢ð3ÛxAvË':)èn bá­ªl…¬99\”ì¼ÙEø…ÅÐ.ìÅ-.î¶>o­m¬ ª=Ú=MC^o\œì×€ªŽP ò6×—¿™ô†_g§I¥ú'‰Á”hàêÕŠV@ÆïŽ0€B*Ü»r¦~ö0Žøy0 þ < +Ý‚ëtÖÀ?½`oä»uw÷Í«<¨•Ÿ4”ã¸>ïk¿ä¨­4¡ø¡Í "™æ÷¦Ùë,O8¦àÀ©0†Sïxóq˜Òø˜› ·oÝ2Í­y_Áø(`§½çpÝ᪠üÏÜÊ—û77¶3C , Óí[dÏÛbÈßíì,ìÞkïuÖ×î¶¶´_'Hˆ|{ +°áƒÁ\¤øò;u!n=FUhÎã|’zS®¦ƒ)êc¢=yóˆÓ ÿã¤@iCǽÐÅ%˜¥ÉÅM6ÿcRä{OÅAÛK“KÞŸPâJ|ÞÉ}^ÃÎ7ýž…SA=‡s4F.Ã-§ÑD( Nm)~ ¾wpà=5K×ÏYnvS²“£t‡½6ÁÁk/ò&YN#ª®ËÚ\]\¥¶µÀØîø4-ådƒBvV—ñ=™Yp©’Ž:×¶Q¯å©–wR²0o +þ‰‡îNŒ]9ó÷wWW]¬Îah°moé±Ì!ji6tS!‹à.“ZÆýi$R…ðñM®âŽ4È›]È”ä +=_[nÝúá‡þð‡—zåT©@?M41ùõøáÇü/À¼#ÐÜ``?[áÞHðï[Å~dnv櫘 ÀüÜüÓ‡™܇ÿ³Çñ€îÿ™ªýQƒ½Õõ-Øô¾wWÅãw^c l’ר-´JGhA©>@o9öÕ댛êƒTOQòjÿs°9ññZëc‡ânÞüzdÀÀ ÿøöMpë&” +>å +–•´ãë™—"[]Z\è7å°çø¥Ê–‘•Ù¿,N¡Ø¨®Oa¦Ãö;ûÛ+kß,ñÝîI&–ª¤ß·¾™ZYÃÂx¹UÀGâ±ä³œW”Ó>+™Få)RÀc²7¯ðþóìàLl'S´ŒÍÉÝâ©l|P ,Ìv{kƒ°½ã¼½é•ë͸ +ÀnM´6¼Ž°³å`£p¦ä'ü´qâMƒ¶tyçtX-¾¨èù£ìt±mf%ƒÒ9©éfRêLKÒ¬Ḏ¥ànÔœf q·Œ&ç7ÚÛÛÚ‚:R¢öÔøâj{KÕÚz³Û^]Z7/šüZMe.Ù\#H°)•jZ°ÆÛWÎþýäR{cS{Ø=¸^¥@ñäËSrŸ7ùåuÇH›GÚTÚ(æa_VÂ6p~k›’ÒûûNT´5qó‡`._þÉ©¯\ów²øhPX€¯â½|y=®!ÀÜðp½#Ðìð0þ|¤çúý+ϯ’%ÿ\øznznái"C ›A~ï¿Ëâ÷V4ûê^îåsTuŽ€±€4NªV¨|öµCb.¨ˆøI×84g ôƒ €Žÿ¶S«ß$I ÀÇ}òâÓèt ÀkG(CFévÑ3»ë•]¢±mÏ[<@‰Á]cÂ9·W×5Žk¤@¿ˆõj Àv À«ýÆP• @¿ð¸°Â¸ ½¦µÆ†rz”õ{½¿û&KÙ…ä¤^‰V.EWÑ(¥K«XÞä|H¬ÈËíÅ»+.±¶A©.š¬vÚXÏQt;ÙŠ‚°¿‹7óÈGnèšTÉÆå§àê¸W ør~Y/0÷þŸv(¥-$ÂzÑ×q˜¦F 'y…ì¹p[Ýþ|biÅõüú^zH£C"Þtœ1:à;Y8)º·Û&œ_Ù¡Üë-*ÈI÷\ì1œí`ow߇ƒ¶ÚØ¢t™–czŽ|懓˫á¡9ËP¿¦tt> á¼Ãç}󪣕KgØ&apÔµ¢ÄŽ=TÖÛ„:ÈÈ„©È/½¸t»Ý~Ñš¸õ÷g>D0§ÉЧ¿8í5„ øL@üûxzÃñÃÛ‚ëÑuE}}ßüõäžúÝŸóªà¹‘é§Ï}Tp,àèÀ\Ãl¬Æüµ €„t›-F£¿î1à? € àv1Ž&^9ŽðÏÉ÷ìS²õÔvJT9çâ?ÐõO@WÂÞa^¿yuؼÅðøæ”‚ð¿à» @,‡à£U5¡eÑû €  göû @ŽPø¾»4éMAµu™a Á=ºdA!¬vỪÌ÷Ò.FAB–®@ϹIG<ç‡f+ +îIÌHïè9b6ŠÍ`c +ïýÙ[6jɨ®¸pdÍZ媱Áoïa¸Õv!/Eðú_ޱu%„á» NU4”|ÝשּׂyK0ºn}.E!¥o”St\¾³²¸´ÝLÙ@0ø°¾é#×i)Ñ®7󡜤Åù' Pb|2Žax«ÝK K¹Ô-Y.¤ eîVG»PèÜ“Þ%[€Û?)@Býå†ù§¼dŸþË'™Ȱ`ƒïJÌ~x¸>@ p»  `>_ +ö€é{¼¦ggççž,ÌbCž>yRÇïgv°Oz €Šeѹw0šýmÀ»¯¹:‰ûÇ`º àæ± À)ŠðS ý„ëª À·ÂÀîQ@Ò¿’,¾“ˆ ^2€ pÖ# àe— GÞÈœ¼Iw*°­"&U8°¸²±õ’ôõ÷B&¥¨Ù‘¹P4¥ +]ãWÑV”ž¢‘ËÉû(å;M$ƒ—z9éOZÚ•Û}Sìöd$·R*êJJ­KðÁwÇ5Œ6ÖÉ©óbq½]0Å1xróÌ4®ùå ,F?2êyØvîrwgk}}[ZÎQ•ÄÓ–°„ƒƒöÆòçÍù_–i@‡–ïŽßüð‡Sky’³Wëç ¯AÌ`?ìáXɽÖȉ?©+çg³Åt¼½é÷^ìceÙ&S±–…ÔRÝNg}훉1ǪÆ3}ŠÔ'  @>ù/°‘¸ 2Çc@>àèýÌÛ! 2Àæ½¹!À×’ûn?: xˆÐÚ‡]ùNÀ‘o3›üTPçóúÀIcêÍþq eQ_gѶ§¼›¼Bñ¶á£ïÇÐ4P `ïaàŽÂŠÎþ% (êçî’×%x]Ñ«Œ,Ýì8)§OT1Ô€²|Ùº•é]ºCEÞe§ñ›ý–ðÏô8Ài brýÕd·€°°úó¡¡7+6X¤V’W°£ÀÓ7€ƒNîücrOQGÕ±þêåN À ÀË­õíÝý܉ýõëïØÇi^y˘ýbªª `͵ÀãW>¸<µÚÞDc©¡…¡À„7”-U+($ŠT[Vá.µ*o +M“6gÑvª“ª•H‚4¦ržp拾ßXiMŽå~ >›äù¦Æú'ÉÐUï>tõ‚7ÕTðøa3 0x¨€ŒÜËÅsíþ]ôe‘28=<2÷´ÌptFªço¤Çý# À ¡é¾xµ:øÖÀÛ àä1€>@þ2€ÑÑ‚ýˆõzŸ1x´¯Â<ŠBžÎþ’1SFŠXÔìf€5JZ À°tJ/òª(ã{êrx:9JIZÀ÷1To1€LŒ±ÃƒÝÕc©…,ý—  ÿ;ͤŠäÌ]àI‹8Â0‚‘âõ;YYLMúd ©åöŽ àPNšÈÓ9˜óæZŽWl·Ÿl12` úI¤ÿ½ýã?eb­JÙ¬—k˜Øjb Š.yà.µÙZ_iMü/·nßÍ4÷iR~’ˆû¡ Þ0œ À…ó©aŒ’~ÅqBø;•C½ÓjuÄ·o­{ܾ319Õªk/O• +ô“D0Døo0”-e   Æx1У…¹ÀðÌ,þ{f¸ûW0_í@ùÚ“€{#`¼¯àSç4ÁŒAO@Ý»ƒ€]@»Ò6hÆÞŸœ8@¶èþ¿9­ÒÄÖë½Æô™V˜Ìßh¹H÷^c¦ŒÐ7๱n}àmàYÙÐÏtÅä´IÚ0€Üˆ²ùÓ1Ø8êÑ5¤>ÂÀPx¿1€÷fÞtQaôÜq À[¬¬­mxÑÃÔØ‡—WÛÜ;Œ.–΀k›Åâ!œœóÙQÖÑ )GýjåD½í—¦2YÚ¯åYh ¼^Ú¥'íÕÖÄ;S­ÖZ FN’€údù$ ‡¼¨®* @PV0<2ýøùƒé2€<¸ ø*±å­+Å8°ð0Z V à×~é­2ÿ¿cÿô!££3üðo5ÐÇŠÎÆW6'1€Ñ ðc:¸tPcÄ®§‹adÝq,pvì/ð´ä]  €#cÇ1 ÀÊ·‡@ç8`¹=u°›ë«ËKw~reqyÍ…R{;é}[¸4‚¾œ誨 ß1n´š}hÐSAÓëýr\l$cQ©ß«˜C2#!'Ø=8ØÙ^_[^ÌâÕÖÒr1E'Ihý''¼IÀ§Ÿ^½x¡‘ŠÈG0o ü% àžæf‡‡gf ð÷îîÁ¿oA~‘ +~eúËéû:{¯š™{úô©v%à(8Ø$‡@)8zéüù‹×®]»qcx8eëÌÌ´ßFFØØ/Iå'ÿ£7nxÜŒÅxòôùó§ ³×Éi4ÉF0Žz·‚™™|Ì’åììôLN™™MÂQ²½víâÅó×FÖˆmcçèÅó›’xR.:,9 òYÞSìäwipÔ 1Ó0ó3×.^*)œvvtÖÛ3öKíI©§U¤d—È‹€«,˜½F›¥ªIT  ¶ZîÑ”7·¨ H1G@LÏ_?ðxk à ùg‚0€ãÇv,Æû3÷{c•`GaÕx]Þ·c—¯,®¬ù ›ƒNßgøÁ¹\wô +³ÌGט‰— »,(kÆÞ²'ÆsE[Çß.i1f»ÛëëË‹.aǬT¤Ÿ ÅÑŸ(¢ÿ“O‡®z!ðG‘¨]8@ÖLÀüUÆòl  +ûC3PÁ¯xÙÀWú£g÷ sOŸ?Ö¬,d vàÐë/a>³Àì<à7/:#Ð +®¢àÃÃC7†ò9ä+&f1O`&ÏŸ>Á$§dp@¶²%ëzb­Lκoܼv H3ñŸ…’³ÃÂì’¥n²êo¢HÙgš¦Ô\`(ƒÚÙJïnÀO9š´£#~ä­O49V³LÓä KÁÿ\Œ&àpÉl¸¼øšº• ØýËÆ„™ {‹`ËcNë$ègûW0ð[©Oe0( ³Ç2êù½í“÷€9ÌðM>•þÐ4 «¶È•·Â,‰é5Š9Îö’3:‘X @ÉŒ¼ +ÀÈ~ón°º^xý)2ä5Á®~ô‘7XxêšÝ'u!Γ07/Àփő +~%WùÆP³t{ò•f¥ð"°p“K‚¶a£š¦j™b›(Oµ]pD¬i¡•Tp" ?+d½¬ß» +ÉðâµYÉêpozz˜ŠSÇ.ÇA8CÊfû$Â{Ã4xíÚÀÅóç.Þà7æyhˆ¿¡kÞXæÜÅ‹Rºš#eIN?q‡Ò”=Æ[7ÈÉ)š]0ÖÔä2:z$®[´¾Ž”×u»¡4šµ +kâå"vzbþ-÷`ú@¢¾ãÀ«w3€Ì–ºçàß@+û—3€Õ +ó“d K€/ä~ ÙP.z‚ß¶-F>•äZ€ƒÃ´—RàŒ ¨àW4÷2¸ð0<ý¦Ý'¥…›×{3€ÚmÊ!¡/Q´J¦‹ÜPÅé}‘ÐÑñhB€ªdA¥‰²ñ°¨‰3ÔTEÖ4•ün~_¯Ü/Ù•$E Ìd ÖVª €œ’Êrpö¤Çá¿Ôý80w”¤ºVeŒ@ÕdsHD0›±X°“iy ö—LÌ&Õ™û½u²Íò»‚6øÇ´X0ZD@ÁÎ]Œ‰þl<—gMa€nLÍeQJ}¶³Ç)¾}`oæ²3«:?73½ wöZ2±ÙJÁ¬bÍ +ÉÖ"´YÍ6«kÔÍÍ¿¹ÃcÅýW@Ðco€·v€-} @·fzõ;Çõ€+ÿz°º¾º¾VP}²ä& Þ ,’ + ø’ßfo\®Ïô?‰o`#>jô¹vD¸«ÙGä=ÇÊé«Ãì袽ñÿÈP÷ñý~’8–¾0ñ_@×Ѫ¨†š£ qjtOmˆ¨2 PWÀ?z€šŸgSêç³YIQŠà¤k£7bŠ•P}ug~oÔph `DpP[3:¨ˉ ÀÑ`ÝŽaÌ { `tz˜ì/ÊŠý¥B¿o@·¾El“j°Äý ø‹ÿÁ!¢&ô§apÍäaYj³Ú$;|« `¿R´# àR°=¤´w:2™–2–žtT׽М'JÍ?= 0×ϰöoÁÊ¥Àa¯¸çàÀ_ʰï4øýÜ `࣡²ÁîU04âsØ™© `Ïûa©àW’p:  ÞXð¹_O÷cé±®bU kBu-ºõÀ•žÂÔ•… Â©†jPOË–h  JÐdž?#IÔ0zWîw•rª`a¹)s—4v¤ä”ïȱ!@†Åi à:96ÜĪhá1€·-@ @ ˆýµŠŠÕù}e–ÄVsçYÐÇÒ3a¼®]¨  ‰E1³«™5MÖ°>$%»^@êYu, ¤…ÉÄïG@“cªh£]J›éþc5íWÀ|o  KÞx'8Øû|¿çÀÿðÖw2ïùsò+1@¡ÿ‡‚¾È†G2 0o°ÇN Ç1AæHÂèÂÓçÞ<­j†‡ä½ÆÊÉ»R€ºÜÀƒÞ¬¾¹Ž4 €w¿°)‰ˆ%Q¢(¾£´*Ž–€/=µ"ñ˜ð:4PJöÔ3l´8Ò€¬ QÐT?ÛÏŽŒXœò½X–cÄ +—ŒŽ0€¾1€¤i2°¦ø@땺õðß k*n¯ÇT ¯ìŽX¡ßøÝV«[¡Ö1šåà @ópÃàí1€ti¤‡ÏP$©>·Ç1?©ÌD#WŠæ—C ©*>$½Yî?ÿsó¿Ï¹ÎonVÐ%ÇÌœÎ@à9ÇYªÐž"4JEi²Ö¦ûqîâ¹z๠6ßµ ×]¼h›)ó‡…âÁúÑ~Ì«¢^9bÂ0™À”k|s1б –_é€ù…§ó3>l¼Ž¨AQ¢*O|½¨=Ö•·ÇÐ[¦ €è²|TÒË7÷‰Ž·@“SÕ0PõEr @+ή;nŸ@Eíp”Ì8ªŒTmnΤ¢v-Š%+³4Α1àUP€£À̬æq  Íbë„G¢Û7ëC à-©¦é¸1€Â¬VÀ?Ö_³³Äе%k2¥XÇ ÑK†Ý1€Â(ŒEºöÄÜ‘nŸ[WÛì­1€:¤“®ë5›­ÞדЛ•n£9PôÔFã? `~¾Žˆü¿ŠT<Ÿ=w‰& ð¯  T À™‹ Mª )ˆòïìÅ ´kç.œ»F1’ØP À9aX Xa_Eÿ/x×  ¨8:€ Ì ó_оå1Á3aø·ÞåÀoI _¤ß,Üšžþ4 @ÃÚˆà¼Ç@í­žT]Ž +ýEyP†Êè— ¨$þ •y{ )(ê"*ò/ ²¡žØ“Tˆ|V @?ðÀ¾1€Š²­çÇŠ$‹š X€Àìbÿ:€f  ˆ‡X(%Yþ‡ÆØšz¦`§ÎÔ›kì™õJÝŽ‰J||Q˜Y¬Ì}ÆJ•ù0›ïëü®B­püWO`4-—ü§öÖ 8–”\ó)o)E1£š_7G‚ëx-½i£i„¿ø§kçgç èúÿ¿l °Î› óÞÏh”sïÝ„å ?wpcð⹋ƒ–qàbôl@¿ˆ‘ÂTŸ(ŸJþ#Ÿ–ϨðÕƒŒ4wÂŒz%ÿ̉÷ ò«Ì|å‹>Á<)OˆÿP‡âøÝòž ={HF/žm˜¶êi?*öjôX'Õ'6DT™³ž¾ÈlâÙ>QúPH!¯.øã{ŠÆœ¿V®“ |¦ï ×’aQ>«¶ !¨\D}V'cö$ˆ ¶5·ˆÆ„‚Y´C5à°Æ÷ÏX¬úÛWà§¼8ZLñý{4ˆ%;—¢]/‘S²,(¹”W#½H›,ÍðmVLÀ¼mv‰¬ë‹©‘¢J°*9A GVš&¤îÇœŸKÉš§îÂnÕoµœ!ÌÊ +¤®¥d TÌ6½©Z(ž;ÎþÞoÇHͳ[2k‰Æ“UA>ùþ^C07ç@ý•¼ç,€ð¨aøzóÀ_³Þý ôëð¾x~`pcpÀ£Å7@HS¬@Ðÿÿ^ OÉÀ§u@D_- - Ü0ûOçþ¢È2Ÿ6><÷Ð…€dT(ò~ À1€ÚUý‚@e´£Ì]!v·]b‚ª3Í;ý þk7GægP†ÙTéé…_p’ùï³ÿ€s*3ç©  ³À¶¯XúV‹13Ï °Tˆ°Å9^ hË0ªyŘ 6õ,ÒÌj”lßné²_…ŠPq"£¦dæœ5ÞÛ¿iÅOZ•†f—²Å4U¦CòßMv5C]#õkµ'ýV3‹ÎŸ¥ý½G„/dôÒÙó”~Cg¿U¶àÖÍ +nß"‘mbMÏ_så(5/{³tf“Õ[bnéà^‘Í+Y#Љ5±Õ2¯S ¶  Ïü HT0×1Ï;P.øo€"ðé!° n ÈÀi,€ ‹|¥~+þ_P@}²ôwiR!Ó§ú0E6:7J“Òn2€,@ +ÛHžüÿ¥ýá Fg†?{œK ä= ÐÈ»@:àˆ Ì4ƒ ¡vcúµ”ÎŽâE•…QÀq͈]O!ñ?êÌõ2¦mE=ŠäGͬ+æWãÙ‹5Öø`[2´9°íÓg…\°¶‹ˆ"&2C±ÑÏ0sڒ‹#õÌ}ø¼,[òÌf+)þcšRÏYÉ<#kꚦÿý‚èŠ(sÊ„³#Çhšl­xÃj4SÃZŽmš¨fCvšÍüýO%-Y ÉÜ×só¨%ƒ6•Þ¬ö„F·Ì»¯3ë—zÚ%;G'(VþtŠ9ǶFêa§ u,9aš(™MVûó°8Ø5ï;ðÆð?àÏ  õ1ž¯ cMªú­þ<{‘àøš!ÊËÁ—1€bDý@ +è‡ö±2ô‰.‘È@unzîܽ€éÁáQŸå77s"¨àWz `þ¡ž{^=Ô7 Päc_Ôøð_ÃTå¢2µzãEå­¨eQ†t´­ŸÉž®ÔÅ£xíIÕ¿~5$7T&œñœ~–sEcff†Ï‡ÔÉè·2,ÃUÈ +Tá':8Xè,µ¬%#v®PËa‘zP#eî(u¤R0€4]Š—’iÔ9 f›”ƒºÒ3ñ²ì‡|vãÆõBŽ…Fù#Ònûv.Uªÿ®2:úÜè¸ Y½6úÈ–üÛ›qÜå¬éÍb:´½b!½6H'Ähü+c0)X“<Ÿ9¢þ8*é‰ëê…%KV´[™é¢ß¿÷ÅÙàóœŠQò_|:¦Ê«|ä'.]#@£Â.B2˜„þ—¿òQ¿¬¾+¨Óÿ‘A@/™› ¸‡¥ž¹vm˜08"Ø“RüHÒÁ¤€‘¹à~þUNÑ'§3B0‚°Ì2õ½ofŠwI¨¯*~Qµ"ô=Þ,cQ£Ï9!‰øPeŠò%£Ìß ÒdÈ:Ó…YƒþC €îŠ‘iW™Ä)â`Î@ÊÔ«'Ãë'_ ZÊ× Ûõð_ÏíGŸ*§TÂÄ}äU‹JÉ +ügGcš +so²K&5ÃHùâN¥|)Mv¾k4i²ùâg)–95íO;ðQ4Ò<%3'ÛÏ_*µ´L’‘ÄìØ÷ûEšbç{&0šòJÛe]`£y^þs\ù뉿é&Û^ðA1çi³š¢_ú Àû2ðЇ„°º‹×øW@4/-‚*|§ú!N“ÿ…`Γ&Ù—¿òá?ÎPŸ"Yþ£hf ½0] À}ýö¨ƒ€õ¡þ¥|ýr® Hö$ Üèáó?.Œ ÍÕ•@ +þË `ó +(¹10“²‘ ¸¼õÿž'ˆ2—ãšž-Ý|¨‡•²M‡†6cêìÑ5ÂLeîÖô|W±ùÝ=¨iˆqa¢? +Ë; â_"Ž}àÛo~6’Žä“ÄyS5 +Ì(×ül…YEë[ÒlB6I +GÊjãЋÃÅ S²Ã0+è(ä)™>»š$¼S±q±çÔá&ç„Yµ¶FÌNªÁ®ÈP™‚‘ÂØîér›±ðá&&r+%øÇji“ÏêÜãg¾b\£ØH5+‰±©×Éw†6%lJ©ÃF™™é3ï9P!Qà!, ß!9x#›óW¿b¸Ï{lÝRs ØË‹-Ýo¾òÍ+~O“O>ÊMA´YPA‡h¦æçïffÁu)CŸœ£û>8dÄ!@aš¯ ÀÁ•Œû‘3jGy : æ# z¢†éûÿ0×N‚êÏD+_Ú÷~1gÏäQq¡5åjÆVãÒ#Nü9aeÐOU @íä2Ô¦2wñ¸ÏFüä¸hy·Õ/&2ŽžÆD(ô ˆ¶ÅR™+<Š$MÿIrö6öh­¨Ì¹s¥Ï yE™ƒ ï!x@´ûÆõ½Ðm]E·‚7®]×ccLª?U؟щê·É®@"Èrƒ‰j^)RÒ”š¿ÜbPü,5ÌéËl¼á¿Ù×lz³å§µdLSYOzóZÓ›Y +0`ï¥|õ0Ä*—òØHÙH†‰vˆÛËÂ#¶ÞÐhÆž7¥8*¥úöRÛ  „ÔLjȯ6à}@ÅC¿ˆ–c¤àÕ9,±‚L‡_E#ðnøc®~t꫘>ºp‘7‘U§5s³C#ÎŽj¬ fë£ àüù,IO°YÑ®žÓªÌƒÿ-W©Œ%†-d» iqS¸xþ$I}#qgµ8öQZ.Í£­.¶yk'ꌾ)# “ÓÇà"Ô—Ò]OfgißvÍTÿ¡Ï §Bv‚¹Z Àß‚Ù}2€àÿÚ%GM(Õ)Düî趉3^rèÕÍen"ã9†atÞ5ò,ß‘_?:Oªi]Æ‚<ÊÚ™Çxçïñs×ÒSšùІÃB·Â}ÍY´ÛEÔ”ˆ[ÊvŠ1¨R³;E*ÎO½þÕ>úäÂŒ7è2€'Ž\…bÇŽ fç/ +PO«ÿøò0€§³Þ„l?ÛG,ÀI ÀF-bïô‘Fs¸êþ5kª„¹Ä΀QKˆaʈœ(Âmò…¥mikr2­)Õ,jj6‚ ‚iªä¥ïn܆P1³ê·¢À×.+‹wPAr4C’úº1ˆvšž¬ñ>|˜UýIŽhðuѵk?U¸~­©Z@àŒ%Ô¾xû@ Ф%­§+U²H°àÖÁRDÛ$eJŒcLe2Ýy€RëçÓ¤\©ảàî¶W|«©(@ôUûDz‰8:84nÕ|i¤”µ9èâÅ¢Ii6²+¥PJIØ~Ic(#RH_°çÅœ“Œ¬$ÍM¥¥0)‰mϼLrý:ÛÙF³Ò€–C@…|9䜋œ½1,½N­Pâ'˜­À#´û±WÍj={ä´ç5 ‡„ŠRÆ&Ê“÷Ô‡$ÍR }ý(?Gxïa*ÎOˆ¿³0çø+p+lÝë´» Kc\Òg  OŸ?.ÀY€Ø“|ïÊ»É?8{þ^½÷rnJehôÅÞŒºØÕXuªæŒ +&ö¶íNãŸG‰$ÜÍQQzs1Ü i¹<ÝꙈ"%§äQ³…*ª²Æø–¨ª¥JmNeGÑHÄŒ­?wŽì¢†‚\/]‚ªš(Y¤8)çï xITH&Î0‡Þ¬xké'R,ðGà7PKu3¦¨ç3'$gö›’·s™{É"žK›C†°9Äö)ça7ø;,¤#/ëíÇt#ÅrLOJ]&çŸSH¹‡ùZ×A"tVIhÃÑÂʼ¬l)]¿$+9-B&jÏ ]7OMhƒ|ú1Q6I¿Î^ûl> àÆè?ÂæÃúôkÕsÀS,AoeOŸW<ô‰zkóŸQ#2 ™¬CÅŸ´½MTí† W3¦Ïm:5ÊWA¯)ø]&¨ -î~4ªQ;ò)h„½ÎÌ$æU«h†ìGÔd»'ãŸd"k¶öZPiú*+óò£—Î<ë{’•“Y¥¸–Þ™(ÎÁ¡†(òõÁÏd©î"-©’qYÎ׊ã<%ƒÙÐÙäS,Ó9C`¹T¸4G̉mj@NÐsA{ýzNÑH)WáÙñ²74ô%/)´ (~òò”­ŒîkyšMUJÓ¦qhéÇ3™Oôgi7#•õ(©Ó[Ýá±êô‹bî¥Ë©¥ŠH^BÿüY2tâI“ éÉ˜Ê ñ<þ9ˆÓu§,²ÖP¿”K›~Xl}À×Ã?tÀC€†àxþ–H´L}Ô¼ ¾+:Wä’ß©dŠ® ¨9ž,_?éOðûæÓùC‚5 H5R€ûâV0ü6°Ù/ýœ’üüÒ™š•LJcósW…àÕ½È8‘@¿œÂÄ"”|k×øßhtgj¾]Mƒ]+CL¶3ûó2aÑ…ªÖÄÜ:ÂÅë&ðMuÀç™—–ϼЍZ¥ŸM"=½JfM£DýcJf¤ Ó>{QB\rJF`KC`Ž!ü®áÀ‹¢ÔPµ [D³S†pmôë³Ò…¤@B´Méù.B”¬ÞÕBÙ\Ö³6Â7÷v^ߦLNfR­R‘Ϥْ—jû«æ`§éþ£¡gήq¾f@Ÿ‚làêàÕÚÃ¥ÕÒþ¥7‹Ò{Lº!=šâ!9¨ŒpHÔý5šQv“ß €@¸Ÿo —È o¤‹6±384˜Ad~¨…åzË9ƒiÀS--þs_ô+=à#°žõ1€c,€n¼æX>i$ÔP" I–4 ÝèJ *& ´Þib–§‰ð‡ĸ°™DÀh ¼xþ €Jeâÿ³?Ãò~væÜqyÐ0€l˾ž¼8Ìì릛у‚¦bìÕ/Àôì @}QS”~ü‹FÊ¥uýrIOPÕnDÇfÀgþe"ÎBësš"æE>M§a¨VZÅry^3l4Yõ"¡+R* +åY"Ýü4âëq½€VÒ!‘žùþÉ(Øuù® l‚4™g? ´ÍKË¥¦xyjX €~yP£RêxÝóÅ\cJj[Y&(J™wÈ[òЫÓ¾–ש¢²ê0R|ÒÙ‹ñ®(«ˆ«zVÅdÍg ˜ìKhʵÁÀ¶f[ñ_Š’þ¤ñoŒŽÜ°§HàZ,@ºÓ$Òœ8u[¤—gªg»xîñÎ÷Óûj”2²£¡€°”Ë‚EÑŽ€¹¯GG¯  …–Íf €·Äí? +xôø(xö–(3]ñ"MÒk4By,Xù¢+ÀæHóÕO”8õS$ŽŸòéÀŸ|â*ÖtÀó#ƒ™ÆTp„€ÿ3??æìg—ø?ëd`W*´õã ‰ê `ÆØ6ýå!9ŽôK,BTÔ°üÑŒú\Ú¥jKQü Dݰ¬¦‹ ž˜w¾E©Jº\[ØÝ5¥8d…ÔžÙsçÌçü’®ÒHe©9s·Ñ0‹ÓbÕÙÑŸgRu#ÏÂ1 À×`ÏŽX€˜$ç²Ñ9;þ'Åè¹ÿ¬1¡ÍùGõ²]òbKQBþ©nÍðdÑÅŸöº:0ä@ `è“úlÀ•™ŸoB€a €+ ;ÂP‡ó—Μÿwg~þïÎ~væÐ<à܃¼Ì6˜­Ó€± +€Ãr Hþ_Å©ƒÁ~ê­ÒÏj´µhF#h> 1¾6cqªA¤(TUh•)jŒ¾c’Ì„~ÞÀS8*5ô¥Ä58 ZÁ™Í¢7ƒ€ž/ sÆ e•RÁ%BÿÍH^‹®Gv7™~ jÇÁ—  &É@á57›œ¼J³eî,¶Éz¸˜Á@Ÿ ÏN^)) I1M¢¤ÓhQY¼«MoNf4xc(zŠæÒœqJ1„݋]‹¨å@¯¢ÄQÚË2j3È×xÚ’S§ñ<9Y]¤í²œX¼–jð†”ñ!K…ûëéÔO ](v9õ¾×®ÊwÄ©‡ð2£R®²«ˆ ˜/ceaG8ùªK_À»^J©ŸÖ +P&[ÃÚ¢óɱH¨œ"ÕÑŸ(¹v <Ü7*Zã0]e€9 @𺬙Q[Nqœêßýû3—~~æÆ¥³ƒT¬žV Òå ŠNÏ–1£Àay?àBOræ¤Å i +n‘ 7Šû£¨–u¶ëk»bBÞùv˜8ºlº’IÐVg›®ë²¥Çr² $;Ç«L€C Õ)…3aÉ€SÀž­à¬WtïcP(4™jáRü²¿Hø£ñÛ.ø« —)T‚[¯h5-  nè+~Æ}åINNY÷[U©‰ÙXäã€ðP£Â]›(ã\ ».rÕ`¹l[ p!øWƒÏJµÙA#bœ;¥làìÖÄ ÞlAÑ™¥¶¶=Ç7Ë)IÁ[ðO!Å[±=äW€9ÇïŠ7NdEú€Ö8¯àŸ°þç7æüøG‡„ +òØóñöìðLD4RôÖÓRÒö¶f$„>¥N«¥¢lµp”ek V7H8åÏ®9Mºƒ€õ² fPA@ À§]02:=ã˦SÎ]Œ¸†û?{–èð-P¢ù§ÏŸÎk2²üçæ+ð9‰ô ÆÃk4KÕñ¡6¨Ì]/Z|dÃtƒiÀFŠNóÅæ6|¦›QWÊx=:›ù†nfä!p92€Ò.ê±zªš±'ÍÀÓ£¬9›Ö*X+§MÁ‚Cv“éùÂØæîŒ”49%.ÑÍ$$ÓZìYÇÎgÕ+\Ì«€_ä‘J¤h¢,’$} €blÊ{NÙÏJË'#;ŒÏœC @uŽW)éú€}É!–ÑMƒtˆÿôIDATäkvj‚çÍɵ¶ç!`f©/…RÄú~@l:ÇtÌÆå”¦Mµ àKºª‰ÌÒSÛhdTLk•×EÕüGò›þìëáëêéÛ³'0€CÀëÉÓ"¼ç­'$SV~:uÁx9 –ÇRRdwÊ_oÑïñ¯\ Àà“„ý `¡0oèY Àps*[.2xöÌ¥/ú?;söÆÛ sþäæ=F€`Âùé/½Na‰z € È<–¯XÒø%ô¤MNms Ú·@TÊ[7¸W› ÓÕèHÉã8@ýÕ= +¨VV@¬ãU=@ èq9'y¡^fàÂÙZ*·þf_Šn†‡Ù4 @ÿÙQðsÎ^€âõkæô™ÓûZ ‹aMßðìV±;PCs +þ-.Ü)¥·$×OÐq–¨Ž8^ÕeCy¿Z®ˆìZ€¢¿ôfL…õåŒÑ(“÷Úr2€ãÆìM»rvu­'§ÔðFê2ÊÞ0ðx  $9´Í.•\º¨ëRÿ¾ž)  Ìࣺë3€î@f`ý Ùâòí‰cñŸ²Xè-óç€7@ª°”iÂҎǽƒéÓ_ˆc´†Ž\mV>¡¶„e@ +`ÓE.~pæú¿?{éÆg”UN[D07—ÛnÁfFæhR0Úÿ÷Þ 077cþª!­6DMê’“â×N( +C‚¢Tè‰jÌ—jv#’Gš ŽTÕÔióF‰ãŽÕw2  +“ê⟄9£ d»Œ­bqtá)˜;°Í•‡Ç*°  U.B²ža3¯*©BZ,Ïæ×äTTX·ÒR~I‹ö/s2#Çz:ó'¢³ìúÐÀ5,@ƒqhât% "0É×l{K(}§³ÈJàg=±RªÁ»ýI%ÉÏ +[ݤþ½1OÍ_xúXqz+°Tj¹dÈs¹k! ³Ã׆çž>ûÛ¯Ÿz"pÝü³wŒ¢åž`¾2€®”’òÆuJ ³˜=?o\£èî +')ÀÎ0ËÞó¼ÏSD ¸0XF`_ÏûÌ0W ˜‰ ` :ÒtÊ¥ëü93ð'tq§l¤€ÂžÓPæZ ÀÓ£}ï= þÞ¦{z @Üײ9þ%i:žD§Þf …O÷×\DS9DÀh'$ Ϧstð¥2“I¡…€«SÎ)„ +… ¬–*¾Vç/ÞJá3@º)¾{9Â>#!™¦ˆâ¿\E_\;Lýürt  )Õu‘S€_Ò¥T% ÀÜTLv:@_÷3Z=Ö:ö…s4–1¤ÀÌŽ¤TGÇþ§ç \ +0ÿõÂ׳£?wpý=J€<Ê—·Æê,À¡Q³µ@‡ÅÓ§VÎFMµ4üò§Û.†ÔA€& Çß«Ÿ?ñ5à,&àBn ”ê60ç:øùžJ¥?bt÷y¨ÈóçOŸÎ Í=ŒIÀ"'2€ðÿ*] ¸1\.Hu*ÌkS÷*MrM…câh ùÑܰ%åââ(…ß<ÀäxiÊg£s_?yòõïÁ@²í_³LαKæœBxÝòüÂ,_¦ï%Þ1»2ôÑ'°r +1,š÷ùj˜|C†<™ðõâUn;û{Ê;˜¡Å“gM~aî€-º3;3í0‡¹_‹8‚~ÎS €ê¢°¼³jûTalO$i-±‹MO¸\eh € À`7=-¾`è¦Ñ/zŸ> €U+ ‘>;p2¨²œg†2ø€¶ô§!¬Rš†l{×Þĺ³s_Ï=YxüHÿñ!¹Æ~A×ù0#Ô2ÍÕLOÏ|5ûÀG.5òôù³gÏŸhÈ{4OÝ(H{òìÉ“â:ôw¿]?~ÆÑO1Ož?2;û{]/…ÃùB¾¨Àþœ½§ÄŒFAîÝKÿP;ÖVhq]ĵóŸÎÝðŠˆß£Ož>Náÿô‡¼[tc¤Çh—RŠ.8~  Îð*°"8Ë# ^?v ü߸Â#úÉ <0€D—¢ÒÍô„÷ +ô%+±.|taàïQÑ'yÑ:)ÀÐ=:®ÀËî/æ8óÆÆ FNUÔ}ôØÆÉÀÐ,vÔFWëÌ|ñÌèîú€šo¶t\\Y£K¦U• ·,(É•Ÿÿ”¨0€I­zL¾h*¨ƒ?É’Ï$óWŽQ#Š£d÷ýôÐU±˜Š „}ÖBPÜFók©¬[eC]þy+ã1£_ŒÄkžÉj¼OŸ `†f( QÞá_02<ò¥ß{ 5Š XxÐmnŠ‘%”0¼¢ŠÛõô!Ø{þü±¦©aàŸ\ …è!´P_ÍP<ÍEÜg±Ïâéçq¡Ѓ—w0v?ÎðñSÌ]—Ø+±¡_E}Â#5ªG¨÷0|•dÓ×4•è{*þ{Ý£6af†Ä6Wð§ü)•|­¹€<…¸ 2MÀ³wÍ<8*,Ï5@Ï_ _¾äO ⃇Pæ¡ÕE'HÈCžæzÒ»+ß)ç>ä¿Ü¤ kF07 ÃÃ÷øQ‹ð+çnœ9s‰O€nHQŸg¾š!«2 0üÕÂÃ8ºn¿U³­ü%³è¹w'* €n¦#ÈÕž4šW]¾qcÞ~,•hš²"QE W!~@ƒ æõ¨÷‚$í>¹¹›÷~ *‡ð¥0«§ZE(ÄÌè f4ù†hZ¢½”)>)&U¨ukÀE™,ÀUl@@ÃTp> ~?ã#rN ð‡)ø01ÁöÕÄÚl³·0 +ét—&Óq!Mð% €×ÞÑk 2€ÈnNf ìïç¾~À0¨q½þ~Kóz„£³d +˜ûÚô¶aÕŸ>€š`PâÖ£  ×Iª“à³¹‡„•< xúÇç€ñÞÇÀôõÞ,@—°÷08|-@À‡Tˆá ¾üûWÁï7¡N[ +ùü Hð›!ÀÅ“à=ÀG㧈I>òŽ ’×;ù© |nÓ!pØdäß…æ˜~å´EjçØF2€im¢®¨¿z@PÒǼPç §;‹«y´º (zŸ# þ+ÐSãdFGï™m1=z’Ì÷3c¸à‘•$OóÊ{Ÿä^Ý1eyEi`Îï¨ca^|t1+i ¸:4ôiüëÈ2ŠÞc6IÚâézÒc³se à-4Ølo3€„¿¯ `^,– ¾œ¾Ÿ.Ãd  2€P@!€æÂ#€@|‚‹Èæ>}k àmP®p `´Y@Ñ-ý{Œt‘éÈcЯÐÁÕëWìç÷á„Z€Èðà@"€à½@œú)öù¿àà€ ¨PQGèŽÏn¾G›ÎfàèàgÊ„•¿8e#8%ù=ñÑ _Á’ÒäÇ€Ô<òÎYGöpL=à9—D]ÃÐ ¨Ó[ †@‹"°y©ù@#Ç¢§ÅI’«9:XÆ×0€( © ÀF‰‚ù—·ò#B!ùfpš2ÿÚ}’µµ4b¯70ù… …|¡‡õØ>ÀOÝ;.& 1}àþÌôÈ(F“bõä䱄i2_)1˜0˜/c³ó_?B0óeøb”²8Dt­a(ȰC=И€c@(  gÞ–GX€…Âj0ûu’÷1€J%€µ[a½1;Î +§¾Uht5„ ;`±š1€¿èÔËJÀ0JAâ’Rúåäue é3¢ýä½ö6øo@Ùy€$ˆàÝ  8ùÓ䣀?øÏA(HãÀèÒ¡¡ižÀ¼à àwçðá|ˆƒöÈž> ñUÛN1×dèåñ*€̸í¥ó¯€iÁC÷’˜ 5üsïá’å›:3qyRÜytÂÊFâádZpÔ¯›){ÕÓ‚ÿ™݇D‡¨4¨-ep R‡ºð½~ÌäñóÇ´RÓ¢@ÏŸ8C„¾ÚÍ ÉûOÏ3:ÅX”ó_G‡kqÝ1‹ø^G»c3SxѺÛëéx­”åšN{2'c)η¨_Ì7BCaÛI»0§q“`QùR¼"OKk¤E`1Ç8Úf'‰.uáqÔùšÊÞ˜³ ŒŒÒno Ý„šÎ~VZ¼H%°ìŸŒÆ½ÇËç[ ïÒŒ.Ì´ d„à?ëÈÕ|Oz¯Óý'Š®+5@™ +H¢t–m:<88ÍÏ™QŒÐqàšëÅ¿Â×Fz yþdndZ/Œ­GqŽ úD†V¾-ij$õñ,šw£DZ€¤¡ìåÓ/ÅZÜpÜöù³yÔ$ +Z|:R7âÙØçƒªÓiÍ `Ù{H[™ç ez>]!´{ªŸC;4²ß{ÖµÖñ¹+å›Ü©^iߘAöváI’GÏŸ=‘ fïOŸç +;* +òG†F>!<Òh0œdðÒ5B•Ñ jºö±O³TÅp®b 2üÕÇ1ÎUþÐDÞ(w´¤&Zø:¸'‰ÍXMn0>Àåq â÷~ñ|k@,AeÏyÕ’‡ü0‡þ‚ÿ2800OÆ `CŽB<ŒRðÿ8[nÐUÎZŇ󗺣=s#: òoŸ¯wi¤`oJO):爡XÅ6¨4- @]¦k{ îŠ¿Ÿ¶¡ ²R'ž¾7])²ÛÞqPGÚ}$EbÎŽ~p\9Û½8Oƒº7‚¾¢Ïx+ ‰Š•òÒ*Ž–ÅªtåñÂ3H€ß\€‰ÚDStÛÀ`tš€dÔ ‚8á° `îÁ̵‹‰ûÒɰ'vÍÜì½{£ÃÔuvá Fz–QpY¸YOž"¾¦Ü×0øúdA»X²Âä=yL)µé¾ÙÿêŒåÑslŸ¯G‚2q}Wq~àŸ/囨&ý:DºÜuìòùÀeðZYðNPa~ŠçÿIVxU€:ûµL”÷GŸF}¶ÿÜW0€‹ `ð +Ú«8 + à”øh@$íƒÌ OóY0E$pø~„ÔµyÉLW43D•ÏÒ(½†|2€U@Æiò©3»æ ÚÜ—ÓZÖª5"@ ×„EdÃä ¨…)f¥à©ÉZðþ<¹¸Ü.GF\Ù‚»zŒþ?{öD@!‚¤ø‚¬EpgWÔÛd9«ï‚r¥x#ÐWT]W—·úQW¼xö,ÉGhµÂd Sq˜/9§Ñb°Ž:À©u-‹<«ôžî‘bÁ +hß<}ú0/j2ô¦/@;3€u@7)­¡ç'©7Ç(Ç6bÌêÌ»¹žjS (8tÔÓ;÷pC)¿r´ÏŸ&·ôºF P{&=ÄI2;-˜{, ®(Ò“§Oõÿ±ÈµGK±ŒÀàÆÜ³GaF•É-<…à Œ;caâZ£€òB¥Ä—7o]ü× _Çü»ÖqXÛÇŽA@ €+/ßc ºõ“ÅáðÀþÇÌb÷F½G—B«¼ 4Ú òÏ@¼:+P$§-âÓAe1†Oð™ÈËf›.{ëkî µmþìdt—.Ë€MQÐXƒ¸yw +E‘\Cú¿_Òc*ÏŸ!Æ2¢ ø=AMÓò™‘tSwN œ7 ’RSÎâpÌëQi,ò '²€ë€‡$¿r zsäÔseP]Ñ¿âÙîCéó¸ŠÞ_ªû©©ø—õœU%H+ýþöR³í™HS^E†¨oŒƒFM#MA|òÜ WŠª]Rû’qO¾¨Å‰P†LN‘j&-V»÷äXÓ‡¾ 7pÞ ÕÄùˆÃ>9s¯OD^ÐÓ.ú Óèśщَâ¿t[&ˆðdˆC¨*óT9Ø'äÆ<—8­Ot‡³3PG¯GM¾oz¼gœÔC†g©aUÁãåéÂ׿wbí’óL@/Úôå–° +ÞÔÒêÖ-°ö6›@ÿhu»Žxõd˜P¸¦±ùÔ\yhG ù¿ÿÿ™+uÉNÒVsQ N)Âôô `¦õS8§÷õ6¨¡{hŒ"%`AZ³§"(½á2ºÒbGö°À²õÎïİÔ̤{/¾áŸÎ9"™)º:Rå©  ªS¦òR ‡ þy¨½Í ¤Ú¤;Áâ^R™¬ÁÃî¾£B ¤®®?-zÂ/û§M´,"§œŸÓ +ÑÂA€„ûÁ;­÷Ï‚‚ë¿@ÙôK4|4 +ÞÍΔÈþÄ—w¹ê½¥¼æ¾ÆÃÚ(ô戅¡U 3³. i¦ +Øó~öâyÎsŒˆò}yï àÙÂó'³C#´ +­ +è“æÚÁFÄÿ[ VïiG誫?E•ŽCj‰}ïƒi‚<U²P÷½%9‡é ä›Sõ²Æ²Ä¸<¡>ÅÓ¨ù!ËäÞ–F; Ô¢–Z^´E¬¡ìUDi™X§´^¹V|:/ؽï~™ÆË» Á(:iMXà#Æ„¼bV¢€^ŠwmH7^ÏÉ_ çÚňÞ¶°>½€:§Ä"±íA£iÞÊšN—(×éð×—ÚܸìGÝ•4:zšÜØÔâC¯WRƒ’*&Ÿ¬³¦LôNV ÇJè.åO(þ¯zªÉsŽÞ‰È´ÑD0Öõ‰$‹Žxîb%’ÓŠš›w@² +˜’…d >¿þõ _zÒp“—h [ueÄð>+}ðßÉ"è?ù4CŸ|âcÂ>ºê|Ú×é¢ù94ñꦎ_h𠀕P‰n PË÷œµJ ÀÜ}1ÜÃ…9Bœ©#o1€ ° +½YÞû%ØoþåDªex78=^¨ ì_Äõ7‹ºXðpî‘b\¶ãºúønÎò†nvuE+Í­Õë勵¡‹ù‚Žxc0mªzÂQ嘢$Oz³g`|±¼;¾à# (cå!‘¶ +<ÿ®pðê§ŸÀŠ|tuî÷4Z@0?+úP`BŸ0K0s¸È÷“B€{0šíª  Ìö¡Ÿ×™¸ýæe)êâ—|ã­×—ŬÒU•ðéüè*ÆWï!QŒ¯¬ª Ò”Uì×ÃRH@/ݨ›t6·,èúG©°¾§JîŠúe Dÿ=M'ÿÓ#£hqTØE=ìR¯Šƒ~}vðq<ô~J‚¤~šE c·"|IkÔŸE̹·`¨™4ßÑp|`†­©ÿžg] ²µlµÃv° ¢ä³n"©ML#×ß½‘’b—›B÷¤ÏDÈ R[¸yuå‘ãáš Ï«L7fÁë#²dóñó'YͰðÔá scŸ3cð<Æè]¤@"’,,|]¼ÂS§ŽŸ<}œ¨³È®Ç˜: ø@•˜:>Cø!†Ï±¤”–÷gÒÄ«jú¥€1ÏA»ÈÐ~ä[6Á[àO «ÀñóàòP)Àû1€Šó04ð/CŸä~@¡O~?÷ûßõÏÌþ^  bDm  sóæOLÇ|9ýãè¨Ûœ¤£ƒOeý!‰¾óŸ?¿7ÚÕýìé[“DEêÚù®ÃRTëâ$#æDÊâcß{jÿ8ú8tWEHÞQÌ(Òñ:þW‰‚ñâÔ¾/'Ã|êŽñæRóO 5דÙ@81ü ÀýObBù§§FÊi–¦ BHpŽþÅÊç>ágÝч¿ºÅ~‰¨ª^¿B±ÒÊ6ßià\璉D¬˜?ž7˜W%¿Ø‹!IL‘ž–R’·L@ÊQ^MÈдÃçtxü#¢]ÜËRêøìaå,šåôW¿ÐoÙ©È,÷S§¬ÒÏÕCpðxõô§SêÜTT¡!tû®°ýð¨r€%¤QÀøjÎy•‡O–., ÀI>¤| ü±Ã£Ø€2нè}@Åù‰‚øtà_À}^ȧ³ÎüÞgLÍÍŽ ^€H ‰ý«QÂfÖiÀœµJ&øg¾‚dNenKµÒ|Ó}èçu&­y¼¼¥@ýbkwåácúJ ðôÙª˜9 +G¾)3_ü"¤žs”é]B„îÒPÑ_u²(ÖSýå£'p!OКŠ«µTEÊCâÅsþ:-èÁxqøàÞ·Äí õÑc B®œxK‚ÿò% îâÚ/)ï!ÉR¿’@ékLÕU‘àØHò¦ªÉùÂ{ Édv1DÖî÷2*’¸øÐÆš}ÀvÈéÃ2£ÞHÙZ¬.s1žP#ºŒº8FµËÇà°¬u&Aâ\®Â(î«)Àšd"¡]ÈÿÃǼò;–>o:øgÕ¥ÓJ‹:5âmd-*äïlqÉæ!I4ï'¾ñÕ\–È}—?í¸„¿¸§X„|ƒþ“6¡~ÐÖ’š_Þ/׬Xù7p¢!j« ð.öû¤Üo7šéÉÄܺ»zõ­ßRÙ˜ƒ¢·‡Eõ͵| "k›õ5­`®¾Qø6€ *·—NÙ]Ïž9‘RDêá–X"ßJî94ðÆ‘¸ñç% ¨AÎW_i)²@Éà©lߨжEeT¥¹È¶äxX0ëD^T0›B¼Õ€ZÛˆÁTì&e/4T,þl8@ BxÃܸîÜRq¯ßï}« ôÇç~6œËƒùy òàì³¹ Áú ¯Šó¥NäŠ ~ ‚ÿ€ÃâHÌ‹¬ÍÝ¿³ç?ð†ÿýøË £hËçóÃ#_ôǶàp£û:£4/µ¡4.‚Þ¾M×gp˜XÆç(rµ¸X3ëÎméöð–#Óñ!Ë‘¢‡¤H)>Êâ¡HG¬˜šõè`ŠGsø®‚ôª£):ª5âå´<Ä +öW™WÈ’•8Vêf@NŠÃà§9úÚƒ•ña=a[)ªIuÜ”™·g΢5‚ýƧ™™VÏ\Švãäò«'MÚ!B'>±ñéÍ´ÿ'Ï~6Ù/Ý (˜ “~cŸd)é°åìIÀù‹øùêö þ{"(nõå +2 ð]Ëâì²0yž,ñð§É… hÊCF¿¦mŠˆ¸ÑýÍq`Bij¢¸xöL½7Ñ!ü×1€¯\€`hÞÂ4…·uå8PÕR%>¤È*¯L õ€œ‚V8ãcXµýq /ï¹Ð­+: ’ÿéùñ,^}¯Çîw/®=é—@Gà”"œ&º´!§È±²”rõ£dðø7Öû2×îDoÌ¿JBÿsQYðŽ1(_|iì€AþÜÂý¼h¨#M¥f¦ â+uVO­‰ƒ¥H]ñkNÐ¥å«?šs”YÐ’ ?O€½&û4Lx‰%ú’·Ç÷ Q(’)Y_²Êʪ¹¼woºYB5}oÎíG…VI;ÙT¥-¡ù•[¤Ð´YLQ–=ݧ$¶Mýz˜8ûíºxwtŸ !¼ßð (ÊâpnŸCàt Ž@ðî1ŸRsÚëܹôÿ€rÝPŸýÇóý!ÀyXKJÕ,kögÏç†@ùzÈ8 ¹¤˜_x>_wÍç:pÊÿñ Š¥z ,z§ +ÖFµ©íú…¯s.cÿbÚèšz§Pô¼Ç6dØÎ«`4Y¨Øí„¾,SM‡$}Þ¨À ,‘ëE’IåÊAžó"O‡Šë~6>¸ï86báû¼15Le{ˆãK~ýRÞ5¨”Ô%ø¤FÙд’¢"*¡%Ñ×-QuÏÉYêŽcåøv *ÎPw›.ÿk8`d¦·§1òû¿R¸G@ö+‡Öm–:5¦',®®Be(ªˆ7˜owgé¯G‡Ç‡ìcWT¨Ç¶MªogÏ¿&è ò‘ü 7+̸ûàµëRÁ&¸(x÷@Ö]ðÉâ ‚ ڋȰ@~Ã]º-ÉPdaÿg/öæå^†eî=qM`näÓ2ÀŒ  ÿ# @è &M#Fµ=MíûÖ5WDå¼Ã7ÐdÎi6ß§™)âãÓ˜ˆ°…„á Þi³(G!ýqB4W ¶‘zÚè‚?ó|Ç_4‡(õ{ä!›LœÿCÀZϰ–X†FøÝ˜$è}åÕÀy”¼iØü|pÿþ¿Ö¬’ñÄ;cå³oW•œàm±tîªÅ=UúíxIX\ú& “‡õæçNzúFúäØ# ±NàÿGÒC‡RÊàKOVk^ªj=äí™xþäp×StXЕ¾!hñÌÈËb}þ MS|‡TäAý=¯Ï2èt൬*ëÎÕY€äyÂë¨CW/xÝ€ ˆÏ›w¥sýÿèààÈè¥óT*Æs†êàÙêvE~ï¾w‘8Øelõ}rFŠØH×;ØøÑÆèm£|o§‘t¢¦Fí•b">…t4„ïþâþB5GD#Tˆ¶Ö]‰‡Pâ´ÇŠ£‚ + ë…¦M%þµ)$Ä$ÿ0ƒC8;t¢Òê–W_­y{K¿”åte@=ÇWðǬT[qœ°#ç­§/«ðqT·Œ†Ðž'5â[âÀ f ëØ»küÞCúL@õù_ºù‚óS%),iÏP鮲±Oê.#Ô¼H^àÄ@¼gÀ‘=¾ü#]åoÀg£‘ç倆|æiìay;öõ.9WVÇ$øˆqG –‰/ƒ%·Vç&¸`õçº78„ÿ3€úKm1¿ðxnddFàx$`¶ßÿèC!¢h;ª‹Sƒäh•!(;%_ˆ(µR°U€‘\šð¿mêJ±º]òBÇÚµ¨-÷Nq´`éÿKGÕ}‘<”¸;ƒ#TKÔÈ!mËWçD tRN‚<:TÞwøH_$Çû*ˆ4ç pãÅ߃ÿ ‡o2€êle"`àŸ$×òvœt ÁI¯s^Üe¼Ÿ.Éi-Åáçà@Ž› ¤9-ýçɧJNZd® ôƒbN<œþÊç,ÌjT¥C³ÕùG Å"6¨ê­Öñ–†µ§âAiF ÓOü‰ ’ãXýo@u¯££‡ohS¤Ù44­ø¿«JýR†/Œv˜7ÒǪ¤è]© +){h¬XÔR‰R é:F}ÚÔt¥ ­]XøÏ¾å?èÑ2VØWÁò{KÏÿkòòÖkóú*o½­}CH-ÍÛÒßO'‹°ó?<\pxhð§ž©A>úFøÞŸtMÅÓÂ\¦ ? ù +h£TÙÖûá*¡+IJ‡fÄX Ð/•Ç6þ¿a¾5 ÀQ!áÜ!È@^aÛR€\G.`‹ €Äu ˆkr=öå@ÿ©ráª×`‡\puÀçTçÁ×ÌÌ Wÿ`nÜ( @é +ðó×ÿ33s3üÍf`NPbó8ØücŽe6wW«žÑ HÓEª hz(pü&[_ä©_Œâÿc}&¡†‡mÀÿMøjŠÒØå=y'øC@Žçhöbÿº úšÊPá-ÇFhœýçü»©ˆQRŧy½CšQ¥Ÿäx$™%·fËai,@=y#=3Õ•C}ôN‰øëí[-€c¸]\ÿ°€ëq±ÃÑr¿U°þxáYÃó#øñE8¾¼ +,+¸Ë,@Åü5 ÀQ0p1Œ¿ è/Ä„`de°æz¼dmÏ)¯Œ\õ ÁŸ|rÁ-W9]Á¿× p2ç0<Î@ø€xe°æ®‰) àÿ¨ŠUÀü `Z0ç]yæÀ}ÿë8ðì4Ð×+ó"";ò* ÀSGÕ+ˆHú-ÀQ2P€]iF™Þ9P%…ïJÕGǪõx˜¹„¦ÿÚeQŒTPªTPå[ñù„ü*-Á{°WÛÇO+üéOsˆxüçwÇÆÆÆ?ÿŸþûØØ­Ë~ø÷—/ÿä§W>àóßôÄ{0ªWþÞ-& +þ=ÈÀ‘å—'JaÁBM@ÝõnéK)pree¬¯yù×ûêÙþ!àl4·2]9‰ø~x àšw«Êï_ØF øe†ãu^3»Üe@“kýrôåß©ò)îß;`®Š}WݸñÙ0àâà€7ÞrBfJ=¡Â)ûæ½nŽHíù{R À“.Èý( +èÉé  è]ôž@Ò =iÊö‰È.ÖÇYž: +pì `]y"¹¬î“w3€ÄÿZú,£(štKåí2\p¿¢&TF(¶ +àÝú®åYÓÓ^«Ñ¬ÍBØŸ½™ÕpÆ8;ëÉI“W<É5ïšG3Ž`~ù«oÿ§oÇ~ù³|øá‡—/_¾råã[ÝR~ùë_ÿó¯ï~;öíïîÞ½õË[c¿¼û_õ«_a2~y÷öÝÿxûöm¾ŽýêWwÇ~ý«o{÷îûV{òŸîŽ}뎱[ÿQ£òáþ«üàÃ\þÐmÊßÖ3ž¹Ìÿ™¿9ó·ûáßð_÷¸ñoÎðÆ>÷ž(µÝÿyúXßï$~eG¼yÔJ)Û5VOºcÈ_Ê0È ÛŒˆ_ ¶òFï ”á¶t`È8Q86aÀ[‚pðÀ@³¨äz{=ÛŠÒËÛ@üR–çʃœ˜w„‹ ^¼qÉgšÊTº  Z‘Ÿ/‡ @ðÚuÿ€†äaA|é—Ó@\ŽogSjúähP,€ñ@TT¾ŒÄž-‡Çþô¿ÔÅü—2 €Ê»ò¾ @‹Ý3Ø¢™Ùb”2\¡4Ÿ=iŠoé’Ák—Pg3È£gÊ}¿ð—ôìììÌçÒgä÷îy‡vŸq[ò2–¸6=£•ÿŸÿúW¿ë2(À•ËWþáÖ?ŒÝú‡[?Óü¶€_ýÓ/ÿiì×ߎÿ_þrì.¯ÿxû?bî²½¿ûíÝþ|ìÛ_c0*1ÿôO·ÉóobÄòß|øƒüð/&àÌß~ø·Ççßþ I.ûëoÏ|p†_˜~ðaª¿Ñ<˜X p² (Mþ.9Ê\¾Ð0€>9ü+’`åmP÷V9ÊRÂû¹s—n\/—€û~À»q½¥g?Ãÿò‡¡þÌi¨¿c|d ›kÉø­—ÿô×ÐÐPnzu ŒTè+:‘‹š"C €*•Rö‡¼ü«6 îP¼ uPò¡ÿ¹=ø_ÁN¨”¸kÂðªGÆ'þÊÛc‡¤ àÁÿññŸÿÁï“÷dA¿£(%Byú @·¸ÍgWÊM:ˆ×F]NdHÙ›}>8µ2€ò¶>þ„y¨Úµk} Ë†üWŽ·2€ÿÓØÏÀÿÏb~ý߯~ø§[ÿ4vë.Ãbüòî»À¿2€_ýú×€»¿Ã°! Àd·Æþ¡Ÿýb¤ÅÏk΀îÊØô7óAް,Z ,ÙA~ÿIV 6ý{K™è1€`¼«PÍ·òÝc€c@ެæ‹ä@^µh@üŸ×‰‹wƒêkbº€7¡7˜ûØz~;°D‹2 pp¾ ¸ ¯~?$…çŸ,8þ_ü¢Þ¨ŒtÈþŸøP¸Èµ ƒ¬Rs¯çµN¼aU׾ `a”À;Ç”[óJèûþÿâ1€>i¦V"KEÄNÿ,¢ûw®­'ÇüoŽæïÏÿðøù Ìy?PápC<Ýc_Õ`î~F.´ýÒÞÈ%?¬E#> u+–+9ù’¨QcsïžfÎ6ÆÄ˜º†2€ÕÀ~Õc€]¹"øY ~ûëß‚kð—T€ø§±±_ƒõ_÷¿º à—·ÈSƒf};xÿA—üíß°•=¼‡˜.<Á¯nÿÛËàÝÐ3ÇH½Êo#ÿíÛÿþ»ßýÎ*þïßþîÖå¸ü÷—oýóö³ŸÝúõ˜Õø-5¡Ðw•¹ûÏß~®%ëÊoI0þùíoïÞýüÛo÷»ßþö󻿾û»ß~ûßþÛÿûÎí±ÿ§ÜçŸïƈÒÿéóßþ·ñÿžVýüóòpð@E°x;ºª€=üãÃàŸÏ@Ïi¿ô©WÕQAÀ…‹× ôî[  ‡ÇÞëÓwÈÐ'W?Õ8P–sòŠ~þ.œÃÐ\ ñ¸f0勃]PÎÒEÿ! P05ôËð{âÕ-lªˆí“÷˜8e €+k¢©`iì¥f  síµ`Çʱc!ÿ¼ýñ¿8W y/Pѯ ycÛÿÏGƒ€.h¿(C³aúxð?rˆhz `¤2Ïu +ÐÓ07†üìÇ?¾rëò•_¹üƒøWQ‰þ»Ë—pùGìûåÿáÖåŸýÃpùGÒƒ]þQ>ÿþgnBHsåGW.ß"‹ŸýðÖå_þÙ•Ÿ\ùq #Íf‹@>ü»Ôß¼± Àœ“ÃØÓ@ ˆ] 8ˆç?ÞùW©ßÀÿ·¿ýöÛÿÇïþÓ·`ñîÿþ»ßýìï®üèßܢ¸WŒl´n·0|1­_)1ßþöŸƒý_ÿZpßÕ Ý^Ô`M~ãðío÷íûÿÜþŸÇ1¿&ÍïHô+ÈP1 _Ÿ¨0¹'`@øt À5ÿ0¢qðÿÙkØ€0ÇÂTƒþY€òzK*ÎO”¡¡O>ýT"€Èhr]“äý‡$šÀÅ‹—ŽcÍ©P€¢•Ãy2·S§Ó#÷d÷rQÐQùcA~µ þWÖ×WSÿcñ¨T Ypd Ì8Àü6þß‹ìGš ·«àB¯¬âŸ›ûÏÙà[ŸÔÂ;‚ ćÊÓø…5À5¤iåDú|Þ¼t~`t–€ôâyw²Qpnö«™îåR6QÀ¨íûàAé?|xåò心|§tÃ÷¿¨—hü°üàìå8ï¹ °?ü»³ùªýÀäÇOLÒ$”ðó–ÜêuÏΜù›0MJ @1¬üóž··¥´~E?"øO¿ûüŸ?¿ûÿú]À‡0€aˆlþágÿtëg0€ÆÁ€}™_ýª2€æõkL £p„Œýóï~û_aÄ?1lûg(Ä?ý²Ëbþ €|t@ÐÎÞf¦kq¾a Ï‡f @7,þôðèË·"îoËÐ'€¡O®a®#”æ:8ÇÄ\Äp¾‹® ¢xG @÷”º +ù„sÅy €Zùá‡ÿ‡òq ¨Ø‡D‰JñïÃì þ©ãý…û1s‡î˪ á#2r¹¡·Åá'Êý<<-æaøâùKYÅ=ãÝÝæe]ž«ä¥5‰p:Éçè{jÝàåË·>þ—A%à×'øáYðò~ ¨qÚ":Û‹ä»Tþüß~ùÃÿ¾õÉõ¾ßì0åwŸ\þÛØœµE9·I~„ýðSÓ𷘧 +ücѯØöüJø¶a?ª €àŸ +øu—üº Ž2€ÿô?b€ßýWBÀ¯œ&‘ŒuC€†üÐ)€è_´±Ã ä‡ÉŦӅŽ€@AfÀÿµKÎtÒ½¥Â¾'…ü"×_¼:°Xå×5>Ks5p~@ÅsàP +ÕZåkOòx»¡¡™ŒÎ=}2;=÷0í½•ûyýÕ³ëkëëÕ”Šÿõuð¯,…O ~÷ÀÿzxPYà,Àñ •<ë«ùø0…ïÊžŸ?­ö¯4 ÝK§jš§ÖS;¾ñ™À øÖ7'à/kDZôƒáÿ>Wt”Ý„lù}ñ<;ó­<ŒtÎG‘y²‘2šY@yä@B†éé1ä—c?ùÿpåÊ?üÓ•_þðïþ>œ€˜À÷_a g ó‡éËëù¸¢½ kˆü’€M·þÏú“[?ó¸+ÿð³$Ž\ùû0pp«»~vå.1ƒÙJü¸¤»õ÷5»rêŸýègä9öä,ÙþãË„ 1P‚b ŠpÀ '‡ðß0€ÿs  + –ó×?#hÀÈïc ú!Àá1€ÿúÛÿúí?Â~ýÿåío»ÚJÓ4QÐ6aüJ.»Žl,;€(œPB80=!£`CzËÉÚrð’Æ&œdE“nV/ÖquÖTÍ|qLBæÔL¯U«ºk#™íœʶ€ÃIåÈì³Ö̇ùÖ?¡ç|™^½ªÃ\×ý<[Úàpf5÷ÖË~}´º®ûºïç-RËÿ¶‚?+ +€j›‘v½PŽžmßg+€«m ÌSÌàõ€Êí*ì©wÿC>MÃßSzïÎ ¤À¯ìÔ©SçAXc p¿aMúüÚ‡¨¼ÖL¾ÀÂBÿ_}535Ã`V à·?­ÀÁßÀÿôÿ´µ<¤€JÐÿÿ@ pH@€mN¾`k@|±KÖ&Ñ¥*„åÛ;øîêþ•öþ\9_KÜ›ÚÙ¦q.F] ^øP†»§Ïƨ=Í(Ÿ E +劀¢ð/kc4 Ó}¢E’u‹.ëä¿?¡³p"§ÔЄ¡.˜m»ò3N¥ŸQ 7"#vŠ€üþ1ŒŽp˜™2ÙÅD¿aõ1óõ¡a«k8¿˜3¢nŸ*.:°ß°lÝ*WÂ×ÛV‘5‡,Œ†O€Ù](.1m[v:F<>Öj8Qì½20€+INž©rL~oG™PÿmúÊêr‘“ ð“V—E0 x€þ ÿšhÈð›æ¾3¼€(VzÔ)Ü€)¢tÅ*@äø›ûدGÒ€Pò¯b2ž¹Ž(LbŸ(–ê½4<𢬺¯ÁDü…Þ µµŸë Ø?ú?Ø'à¬$LŸ ã‡`Ó»´©_Uhz~ÿÞÔW_+˜â¸+_{ãyyËŸ’¨Tý5 Pàð¿BüKPX!þa$¶µ{cЫØ_  A´¶^º„Ÿ`cUHeõ¦¾½|šÂ¿ÀŸoJ³÷¦¦ïß¿‡Ø\£¼ÚÀgzZ¿û¦€^bV`{ªEv¡8Ï4A4~ø5u¶Â=0ÔÄ~sTFI bî—êf@eVŠu˼efËø­¦Òi§h #¶SÅÕ”û›Ùs±x:UtV±™ÂB\Ù)¢À¹‰cËn.—N§l{ÎöÙêêÿÓ4»–·êX@žeçrN.QNá\IK;ÎóenË.”†³,«|ý‰Ï-»é´Í|5Î¥ÝÝ.Ãr„r†Ó$'(#r!xBò…ø¶G©¨ +ª ï¯jU0ò¢ª$@Mù>”ÿPÀA +÷·Ò$Ç@ÓHáÿÅ˰U ¬­N +z:f y¼â?{Ž_·P9ÝHp­À½ïá¨Zõ˜gM´^WÆßL‘€&¼œ?Ý„°2}2Ëò-õ ¾§§gú˯f§zû@³_Ë÷Èøëuöµõ9³RPÓ`€õ•¥•5…À +SÊV ô¾e-@C_66°nK£?¸Ôªào!€7ýí= +¾ÔR@wÝ?Eüë‘­aPû HÿªÓ÷Œ$@ñĶägñþÿaòR«mgqÇðÉœVP¸ô!0ÎÚÿ+_ÕPãÓÓ"tµ¡Û4¿‚¥hgçeÙ);pdYÛ)ºå²ãdݧnÑqÇqÝÝüj¹\„ÙØ.ºná©›wÍò·ß‹e·Œ}–[Ä Ï÷f¾èÚηŒK'‘}Vv¿s¸l¹øÔqñIß‹»8Å-;β ÃÇäÍré;”õ¥%L'_,:iÛ¹™x +rvœaˆìHÐ`ä~ñ¢—‚ËŠX†€áTܱMs`u,'gŸã ¯â²1ŒoÿÔqì|´GYüsØIÃq‹ÅŽD“®=”°R9R´Õ]Ž‘Î´ÉF œjá_^|>0}€À?b\5`ø‡@8ÀêœÜ¥®Bg¼ìx¦Wë÷ÈC Ž”¿:}þ|Ëybÿ”<™ 8Õð@ŸÌ|KÝGÔj˜ÿëýRÀìTHvÁësoùãÀºà~ @€ ÍúE*•àýáÿMkkHƒà ェê$À/ÙXZ* íúúú€0À;âúãú¿j8W€ï3Du4Âòeüƒ{U ^„ TÀgSdä*\É´üGoë¤ëÀE¦£C?uº“Þž½·ñãá / ™Éjce,‡}EqÌ)vÞÃ_Ö³gî³Ýo]g¹ì×¶1N<°[¶­¤eÅ%{· Kî:îSÇ~šHØO³V2!`Í›+E·`¯ ¼ hQv>É)OónÞIÚ go>q»åÝbÉEq΢zB¼¸O€ý,®´?ÛÉÙ(°è&l îv9bŒ@ PXGÀ·À¹ææsz 4Ë™UËö9ÎÇ@i¶uù&.`¹¼Ár‚7¬F˵ˆ{ ÂèêŠXQ'í¤œHÎÀ­Z3"Ѩmݶ†¬(EML‹mº–ÃÈ1 Äd(-†Ó«VE ^KãO…hß§$“ÚwáhU÷Çq@øëÀ +ëÙà4u^=ê|&»Õ1ùTmug@Êæ§AU§Oƒ®ÎCXrk 4ßR¯4¨îú½½¢à}˜”Q‚êíÈ67©úyaX•¸‘ϯþ×}ø/¬m®¬¬­Àü#Gkóí9(ð“€-Uð¯cüöŽKÎZwÏÕÙii¥Cü+Ù d«î8¬ûM 3 ¨Zðˆ©‹y~ ûj©'¼À2õåWÓ¡öÞ…/gû+ð€ƒ„ø3oÎÐùÄ¿€™ ¸'ˆP À PØ ìIy…ÿßà’µµM $¡ ~yí|u€4é TSþ°0ûßtÌÿõ%/­P_g§;z¦á9ßê}¶Ð#åÛI5 ‘¯7ñxÀÁB`ª" §h;Õ¢¢öé©ÕÔG¶@$8~i(  ÛMÝWqþúÊû³“'{   Ü“¿ñL +–!xÉ Þ%ìÞ̱Œ2“Æ•]£lâTUIF +€•³Î®æjºè8(oÛ)ÇSñžNu}‰*Žïv1Á¸Á26 ›G¤8kW}8fq!ºfŠÎ¸q#rùò•ËÀó™È i‚ç¼v­ .ý’·\ºtXôÕêP*AÓªÒ@›„ i‚ÌUßBÓmåˆî„€õT›Ið… +DoàÍgÇØÚÏ—Bø#Ðÿñ@»€ÚâƒÃÿ‹þßg]@ðÏ–A’ÄŠüÛ°¢À?ÚÎóCõ†˜F¸2Bž¿Yalq[LŸ\Å?¿”z¯ÑßêœZøò~¨³wöË驇ŸÂMõ„fþ$ðð¡ÀF î76•ØØ()X_)ä ë¥Âú€M´(à +…ÿ•õ.Õ€ßo)•Tµ`|5ÿ: p +@}q¿}ðÁ§ÿÿó=V”v _sÊbÏ$ί3UøsÝ@C×ÂèèE U™ˆ_Š'Ô1ºå€#0pÕ Y>ƒžÀ~êK†*ð ¢™Šƒ#·Œ‘x +ž I -Õ+0¯ˆÿ,„±ãÇŽ‚&°*ªáXAÚ7ãRm (¥ra 5Rܦ&TÀyÿQt÷§N1 Û²«ƒ¡ŒâS ao@f½€gjÝÿ +“¼ÈÃ{‘WyobXáÞCÆ*€yøâùäšPy€&§êkd‘mU¨gôÿ=!Î <ÝÌôÓÍôSü)µà\ð lñÂx'ˆ¿gõߦ’ÿù*þ×ÜüÓ÷ƒsŒÿë4€ê, + ùÈq,2@3öWÍs’ù«=ÏúË~þ£[®Îþíç\ô"1éžïõÏg`V×ÿ¤&ð‰qé“п©ì•ܾ€"`SØ=(~Á8LøôÁ}²0îÅK*à*ôÄ¡€<{ĉ¹JæS›[1•Ö2›9€ؤ:§Éµ«†#Aµüol ‡®H-Ë)nQª ´J€wÓ,&6Pã[·m¡f¬{~† Xàõ#W(ýO67\!Ð)ბˆÒÚ‡X$¹c‹æÀÉ#'_¤hjù `à + +U„Q³`ಖúUcõAµéCàBD¯³¨“(! ‚‹£GØdÁÏ¿ÐHᯂÂ[b~Àž 9²¶§$×O‚—€Rï+À$ Ÿø¢×øŠ§xfõÐ/þå”´ÁJÕÀaÇày½ŒùÀš6]"M¤Þ|å(€Ç½Ù¯¦B= €©ÙYiðÍ=¥ì‡j˜Ò«1=:ƒ‰tx~¼Öq ´´VX‘À@ °Vñ †¨úƒr £‚Aÿ œ;sœ}QðÐø÷3€þÚ>£Ð°ªuªâÄû¿ú‚¹¯ßñ*þ›Â~•OˆÃ_à).BŠàÑ«m’¨a³-ÕhŠÙÆ{ € +àÞT¯*Í#€=.Ý6P;<4<‚<—ÌÅGÀ +‡ò +ÄÚfQP +ÀhJÞ(ÚV\‰€Üç Ø +Qâ€tz¤ÈzF]ŽÊ硸aÛvT ‹³¬U9òÌÎ뵬tqôÿÀÐÀÀÀÈH#rù"Ö "C‘>nkcB®fÏ"Eio0d ë©ØfH“„á|šPÌ Žv`àUrxVÔíÓ #bŒØx3†œA6R`ÉÃ.õ’…óœÜÀ+îŽýpXòbúG!8aõ,é`ÆYÑFÜ‹rS +@@šqH-@Cþ¿XÀv0‹K¡™@²†[yç ÈÁ¦ÓÒLNÕ¦ÿÏ«F9…»k—y¦.“ýò&ïU£¶€˜úòËéÀÂt?›Ïôë–€~ÿÿ +@ÐO«cÉýlT6×J+8a£"©@œÈ·ÍßÀÿãÜýø/‰†Ð°÷¬V Pg­‚€sçÎ9ù¨Úh¨2À9Ù«Œþ_k¥¨ªÆ + (wzñžÙ/fú{Y3)ðeéñc°#¶ðpáçÂjx“ûÚÍ“=ÔOED$ñ/UŠš$@€uª–€÷tíÿù§äâÙ4¢lRÀ*ì…³ì8®sRqösCÌî&V%qNl:TõN¾ùÉÍ]iUƒÍ´å‹¸Ìvò/Eǎ㬴ãnÙî³â3ÇÎ=³Ó9ìI;9<ÊŽûܵ9\Kc OìÄ“DÖ|.Ø·œ²‹Ï·ì-Ç}%€ý©8ëÓÓ5‡´Þ¸ÂÔ= 6ƒ.3 p2€pbˆ zj‹†ª-ßáæÜ\Ê^Ž[Í÷ˆ1ŒÛÀ°­BwøÜMº9iÞïŻZÁªù2í ¶Ébçþ ü®©\ù‰›†>Jñ»Ë9Ü3 +g» ‰Upƒ gyXš±)¬P€çÿŠ5¶>wðµýpøôôtÿj“3qKþûüÏ{ +@cÎ[ã‹ooÕ|«5;Ò"=GõÙr;4zÞ˜´à{ª“•yߪ¶GLå{îÍ~y¯‡9€{xBLõöNs¾þz{ƒØXaõž²PA R(mTJ%¬–*›Â|½´¶F`þ߇äjjˆðrþj@Õ ð'œaÂçØ‘¦£ Pÿkðóíý÷¯úL«´ü_ûÏwÀQwL½àMZ|ÿbRAQL!uVÞ„Ô$­„x› ý0ÈdžÀGYÑ€‚úÏ3×ÀøŸ…zÕœ“AS€D ¼àª Ñ´°€™f¶±Ä å‘¾¾Á¨1x=a',ÓŽEiƒ±DÂJ˜Ñ›×cQ çÆ’l7`Åì›Ñ˜5˜ˆ¢Û4͘a#Zˆ™fÖΚ8? hðr3j&Iì6®só&?ÒŒþÄŒ Z8bÚIÇÉš>,•¡mF \4¢ðƆѽtɈ0æ¿d]`k ¹éL ««+ÂÖŒ×ôÒÅ/Tµhâ:n=Ë›3£Á3KQ#fD>|97ƒºná»øLÞ\ßßá'7£f4fà®ñ]˜eóÈÍD4i%“ÆMÃ4mܪapG4í³¬HŠðGçŽ UŸ!桃 ‚‚óXðL4A'ÇþC@À9¡˜ña ð¤&U‘žùÈu×CM`FnŠçã…¿1ØììÏf§ñóèŸf‹1ÞWs^‰^ùê]_«Þ«&pôôLÍ~9‚ןåÐúC½÷¾ªvâ×v˜—½²¢ñ_cÄùÌÃd€õMî)UàÖ+û›[xÙ ‹×þ_¯%øaAàr> …j @ƒà`sþ02€ÊUEàŒúÎ4~¾ã!lZ³÷ÙRïêøÿT;ú¿b"@¼?~OS½5§õ®:mVÜy>žƒxÖ÷ÙQ¼¿ÿþ4ù£îèìÌ}¬0À›ý_Å?§S¤‚™Dº•«÷³N9[tŸ>-Ý嫸Ì-ºÖs¼äÜåݼ›Ïww_ºîoòÉòóB–-|§è¸ÎÓl¼4‚—ÄRŽ•Ù$ŸWÝß`G±¸šÀÁçN.çîºY×ùíînÑ-–Mr]|&‹Ëò +Û:YË.8‹\§:pžem+oá¬0<` B¿Ù° àí2Ö œ£š*KÙÑŸø7k9ϳŽ]rQ\08ÐeE8¸N”ÖG¸S÷™cánðUœ2nÄy^Þ-㮲Ùrßõ¹ú®+E|S'‘pì„ )“wä¦ß˜ÅÛßâ;gQ6qÆ@äL’§jüMh|(À‘ýè€ðŸ= ùôK +¨o  Vê’€Þ*ß«»\·é +N} 'ãmúgÓ³x~ý·_ýÅl€xÐB(ß;Å ²Z àA^ŒÜT¥TM¥Bý ûC €{R € çÞÂÛÕT{Hœ¿ ô³êþ¿´Y)TT66 Ø(m(ÿ¯ðO:PÅÿ$QÒb ÌSuIzø€&0€ÊðYe€:ÿ¯Œ„²¿aÖœ`5rùâ…“A†ì Þùä¸9è[lÖ/I&Ó6‚'ƒ­‘k2È Ãr†SíCqÛå÷’Ö ¬Ám²Þ¢( “­|pC\‡É>Ü,ߘÔt¢)“ý%p–m€’˜àÎY ¢LFÀÒÔ·W;en@_ ›D}'!ÏÁyO… pn0¼38¯€€N!Ï?µû‡¬…áß´œ->õτë1355óÅL/•|¦?XsÙ°ê'È;ר +ê€îÞ™O{CýÓRýpf¶7ÔÓ¯F ò/û!+h¥ÊtäÀ9¡oŽ]@ÿ6à_@çÿë‚^§J#þ« +@+ @} +°õR° €ø£ø²Íšüß[€ÀÇ…|vüìswþ?>ïïþ©´PÁ¨úó‡lð$¸—Wy +`M 1.€\à^÷”u‚þüêù–ó=SÓ8&`; àÿÕÂgŸq0k˜žÀÿé{lØÑã ¿eÃDØKCÓòǰZ#©A§“bu¾£ -5††YÄ&Â-i¤lŠ'4Šñ\!=ð·s¶‹âì4ŠKƒNÒ9;å¤ÓÄ“m «ÑxX€é\ÏX>·±ÛµÙÆ.±ì+—øŸzgfz;C½ø*Ï>é_øráá§þe¶A±Zmkû`SG…ƒÿRi«´±µQZß‚àæ4Aa­„Hà`ü{ +@Z(¬/-ú€—¸téà`Ÿ œ€ãR 8§¥€àŸÃÙÁ´hRÖÔñ?ÒçþÇ_ÿ»¯‰þ ”— +ž2ø?èz¶ ]‹|‰P€óœ2‘(Iý,²ÿ¼(ÁC¼% ¸Þ^š +t0å—³ãÃCCi&ô]›UrâÃàûY—§kQ*@¬€€–Œ¨ €dw¸F@wàýGâi6¨ÏÅV0ô¢‡å›•Äù†"©^o_wYlÞ/ÃyÖØÆÈ€m\¹r9xãbàdó…føzPÀå‹‹C†tìÈ «ð}! «¸fO €Ò‹i:+Ç/èfGàϹ†;“ïÊ;9C‚˵0€;LÐ@l áXøÃÆð0$J°™-«YHúYö®!Ò©åñN ^]ü¿ä©ë üñ?ÂO +€‡ª +€I€Ú¨7o¿r;‡[‹üú¼ûâCýØâ勇Z„{z?œ>ÿÏÆ"eË'Ðx½`ã tzå9Âñ± tµøè˜e0  Uð„Õîì¯\†|ç° ¨(€ "€þ+ÍÇØÿ¤¨¸¼Þ¦`1¬##Ð L°ÿ.îÍft/³•¢eƒžÀNø®ŽcZ›8( WÉÍÌ"`‘{¥bÀaÃŽ²®Äß͸±¥\­_†fZGQ@ ~Wý¬e|ð J©ÀT؈Ùÿ@äeK—â¾À·hsì“)cÖ@‚ÿ¡€•.Ÿs°“çX¤; läÅ|£{WµÄVV$pR_S@O³€¨@U°— 'øå{mM?<¤²´¼Y| x¨@sÑN>]¾Šw~â>÷èïíìì™b€ +à#ƒÞY_ ?û# ‹ `?òà‡`cÚ~}£R)•v*;Œúw*[Û›Œ¶l°0„ +Nܨ€/x…à_+)ŠFü{ +øOÄ`¬o:Œø+;rôx0‚ séðW§òÿôÿ¶ðß@9ìþ?£0ÉêUKÀé™YÀg³~ñŒ„IÅd¥ü³iú?w°±õ„5¾´Nrp';Äq _šÓøÑù€>ŽÐ#ñGú—q:åO&ïŽã‚ëN 0 —DN5ÿH6±ŽXP³ùìv×Ĩž×°ék#ýøð¸‚ë¸.¼7™>gqò@ zKôúàu“+1Hµ3GÎàÿDØÅ?9úc3:Øw}дLD/&ÿ—†Á¹o^šÑ›7ÍAfA"Qi*‰°%YÑhŸ™ÀÙ(=aQþDÍH_Wßõ¾®`k õ\ è%HiÀ>;Ôp\-N²+Д°¸¾ª¨ÿ¥+€Ú) J`M%^UH5¾¬ Oþ5õðaýÀ!~púÇ)¦~vZªö¹Uc¢ øï õ⽟à§M¡4„žIîvd0Q¯ÞÄëÂk…âþíH€í­ €gk/;ðù•-¼W6%4`ã`P†àßS‚}¨@°Oü'n%òÓ t)üÂüiîdM³_Q»”iÿÓÒŸÖqõ½¶Qø‡üŸºw 0­'{°ðó…ŸÃñãuaVj`*‚"báäâ÷@¨‡âäù'”ƒýªŽàgÓ?ëïf?›ýÙ̧³_~U›o藦Ŀ\Ñÿ¥ srþ\j°'àÛn’b?&Ø$"±ÆA0{ÜUcòq› ó8ˆ\ {±Ÿ€e!B êÂã„~€³à$–‚ýï°8>¥<ÐÈB!ø î"/©R¢áäãr@ ðÌuÝ4b™½DÙÍCâ8AŽ ¡¼ˆ;ËŽË¡ûœå”]^Í‹¹»1f±Ç…ŠÉÞN¤ØÁqìÛe®&^¼P££ÙNy…#¹¹§<y tFŠi…%û?²q…²ãUpšèd×€Äõõ +@<½œ…9k¾æÄ«$à)ðÆ9€‡gžÑÐzð §C…¸%¼ðoì{ý†2Ü,«zdøª)ꦴЎŸµ^3\?28¨4€Æÿ2ü?”€Â÷fekoNÚ¿‚…ÙÀíííÝÞÚ„ öWøø×ã_©<_=õgŸßÍö¿'Ÿø™Àù½óïÍ~ýÕW_M¿'Ëã +i ¤ì3)úÿ‰û<„ÑqU>¦ÿqžRêIÄó…,à ™¡ÀFL‹OÀ:Çä“avx¢ˆ#/0$çð äÊw!@:zœøF™ÒÓž{y©à·éÕ‚* — ,~ŠœÎ…;ª·§nP Ü¡J?I2ÓÄãåÁ"böæ8,yäÆ#Œ!ó‰SâqÇËþ©>;Ÿ`Jb„q>cžr±Ká bW´½T€$p&_ ‡YÅ6T¾}øå ^@‡2€­˜f¶ê]/6øommRó òw*{*À<°:ØÞ-l*@ì  á +ʨá_©âò_rƒ}od6û!°©šœë4±Dc–Ñ×ܤà_óÿ õ§…×,Jª—ioÿÔ=i¨Ë†zÊÿ‹Œ>ò5'$ÿk¶ÉüšˆþjöS@ý_³W§¿œýráÓ¯f¯’f°ûS,³ÓŸòàù¦ZØ@ AЙöcÎM€ÀëüÇ ’D@¡LÿãÄ€&e²"S"€Hä– xœü²éùjunGŽõOÃ^1 Šwîc õTSàƒ_çérXVÀ¸"ÌFà(·‚{P 1–/jC€JÙñ”e+sõݶ­ LLp€Íö¾íJ3·'}¥3q s“1 +|ƒ$]i¥áòãV¼h±mö9Ò3ZjaÙÄЛ*\\4˜NÔ¦ð9H@+€VôþQ9óíC&îRø—×&i +ýÉѯ@ _<Ä%ô`¦×S2©™þ3×™ü4Õ¿³I@ñEJLá× +›™Å'Áïá… £/°²ŸÖ5¬!¤Ô7áâáß±Rïß©ìì±6¶Syµ·ÅA W–˜.LK€ߥT 9€A@< +¨2€ˆp@ÞÜÜt.Ä%f á!§ÔÄÞs €*þ/ÔŸVìþŠœ{ÿB!È^R"õj®Œø§ úRÀ§àK*€?ïìiÓì*ÚßÏÞâÁ©®ž? 9‰T \T$‘hz} ð'-ȯ¨­åt[L™”é×ÿ8ŸTŠè陹E ®x `,P&eT^OÐÓŸK zœ´'È +O–{Ôo^ÀOÉ!9€“ËŽŒëk=79D!ðz%¸¼¹!ö†ÜÑÏ1 U¥ž8rÚ·YÖJöjTó§I!‚”Ë•bžÒŸ9N¡}ݰc .œ ú›[@ØqÉ ¬‹Óǘ€ëbZTk´À9=WÿÈZóC­c–£l럦˜ü’JÉ<¬*€‡=ð^¬¤f¬EÐgøÌšñËÁtv ôƒ˜à4Áb è`ŸØÏ%0 è…—g¯xþ-`Š¿Å¿·õ`»Ryý̰ójo{›Ý6J[•Ç ÷r~ü«Œ9Ü àpˆ€q0À¹¨Áì5^bf4üƒ(ü_’VÂê/L‘ó¿Ë¿ $Ò>XVm¢Áø®‚aK Ù%¸zþüûýýx`]¨`‹S€§›N©æZ¬/æA˜„Ÿ}VŒe©Z@6(iéÐóÔ)¡®€¥œ?·©Þ,V²3ÝqäG„©à]ÍÖñpè|Á9*  Fãâ%0z{œgr/½5öñŠbvRf"“½r¸¼ñ)ð«Q®wGR{ÆÝòÒ#'šðÉpĹgìW-ûi,`Û#’¸Œ®1 ­_ŒBX¾H&f96Š5ÿ øæÀr V$Üí´c§WWsNÚb¯E(^FÀ“„Ûq¾£ 1T­¦Gb‡)æö+€ÎF€ÿ¶ßßû×ÔCãüP{O~kê—yüt¼Ék› ðןS̱½ PàÎgõWöYô•ñ7cƒ*»¦õ^ õBÁJè䫇&€†L`•è´= °¶¶^ØØØæ¬=?€Á>¶¼ÞÜÛØz½½ýC››8£R*áBÀÎŒÿ |Ïý/.Òù3À8”Z‰qòì\s ‹ ü Ãì 4ó¼¾4ºt‰TÑàO=TE·‘€'¦Èȼ¥ðÑX¡'®zk&ûõšç¶ñ›i;ÝÒs¯ÿûò½L y&о¥cúË/g¦;ZÞc;lâÿÓ/k9@ +ä’~ƒü|އþÇi“ šî—º^¼-휲¬(Le2Ú&½jÊ>S èÅþÖåÌÉßJmãM®äлÜÂ_ƦýêäxpØ.ìbir”¥¡Œ“ÜÃyƒò!ø(ìïàÑd‚£'Ô]š%×w£X|ñÜ-—‹ù¬Sd¯cû +üÿ ËpM7aÚ‰²»Zä`æE§àpøYöòųà:yW&.`GçŸ8y§l;»»/WYˆ-·ø g=É;œ7Š ÁÄ!{/°Gà€]p]ïQ8E 9*aD) ëbZ”ÐÕ€^@Æ'ÞÕÿ¦ç‡ZE¸´ð &9€‡B½½S ÷tœÂÏ—øg@ýDö>³fíÞxõímÒ-U%®¥)0ýS?ÃÂM‡i ü/Ö €íÍ-Äù¥ +ä?°¿]y½ ×Ïä?ð_ØÛÙ)ílîmƒàÿ¥³ K©Ç-  +ÿšÞ¬nñï­cp0ap°¯’?ˆýÁK8~©§áŒK­œh…Æ;aÇ?›äñëSçÊ8yAu6C9‡¯øç‡”Ë>ÅqYJOt" Åà+ZÞ|ùÕtÇi† +ü³³"á˯ ¾ú +ð‚µ/gæ@ÏWlùYÍ4€kj>G$¸A„ÎX¹Ìù"Á+AöÄåt¢2¯NÄ8Pq|ºVŽÇ…“øgc£[ü.G8ŒO€Ç€ÊÖK‘k‘`×™`ñ2wÑ!ã8Î5 Í¯DÎ#(N.F©ìýÏqýðñ€ôÀ• . ¶â°þ ì€ÛÄmqpùH#@ùmŽ’>9™I±œMñ&8ʤËxb;î²ãæYÕÍçSÙ¼í$Ì'" ›xRü øBÍuP(º1›ír»îó›Ù«–³î·…|ª\tyÀÞŠZNÖAPCFðGû Ø j°C@C-sâéå¬Z-€´Ô +À)€¶6 ôÃL%€5þOsÑø—T+€žž Sª€ ðÞ!9€FƒPèP ÐÖ)*z{Bý³ Ÿõðü@¿24è<ÀÊ ün®Ãý‹wÚ·+›@ú+°ÀökðÁö¼zµWA@.VÂ&ØtWª¢ªKþW<÷¿x+! +ÿ®ØGÖÈ»º€ù¢¦Çç!9Hü‹JMhüÿï ü?ù”Ã"â{ãûõÿ'xT§ G gЈníåO·q¤/DÓ2bA>ó©N¼ßy^Í|•}ÔA”ïUÐÓKL!N=ÿ^ÇÕYþ³aÏáL9À%d648nýBä¢!_pçœnk,5<–y‡-CfÒ²âéÜ*$6À°YûÿYl¿Ëî¶ÑÃi›m䆇WÍãÆ‡ƒœ9‡áòu¶¾MÇÙ —í‡Ø0¥Ac¯š(ÎJA’§R#Å´ ¾gDØ%'ÙñaN]fÙ®aÜä1ºåD¢Ž=<<|åÊ0›èb•¥AÍÃO?£[¶]¶e*ç²x _÷C’pMøïD¿aAíÛ»×áÕÓn.ÍáÒm6J!À7}ñòÏw{sËÅßbUƒ€¸…{0˜¼úÑ”½)€M®‹íWÕv ‡?B´uœlßd”ߊNãΰpÞM.üAx9€^!2ÀùI¼§ ¾Ïð™5këlëäÜumLEáwÕÊT Ô¯š# ÆßáìÏàV  > +¨2ÑÏ'Å| o•5[üÃûoíúþí½ÊÎæÖ£ƒW•WPÿ;¬#¨TÖ77× +ëÌ!¬PV ÿ€?€øU ïBãÿP¸„íKìîUGÁ3’ÄNò€Pe•N×îO‚w© BuÎA‡þö¯ùKòÓ©¿_þí×û·_õõç 2ˆªJH /•7õ³ÌL +øÏ>ütöSU ÐrþêûüÕ´œîøsEPZ5€ þ¥Ò-Ï_ùœ³œñ9~àÄE|Ixl\¸x1h´c›ÞxÉ&Œ¸5œJÇ"3òÃŽ þW£géFëÚÛÀð0žx¤SìcY®e!TÂÚr<žz5Ëø20g\gŽ"šþ_º&k›“pºÖ&‹AˆÍ}–4OÓdí¼ÅîÖ°ÍÙJv“ÑÜÎ6F8!/‡fq*H‡š˜Ž/'l|Ï‹$•¡¡aoΛ‹.³¿a±g€m;YÛáWKÛ,‚­Qv*Λ+FÙÃÙbi駬5”ëa캄ϗZ@¨iÊX5ó +@¼ú!9Ð|MH€sQÄ)€¶D of€÷jФ€4ûâ !€Ãàao¸§G€ ‹ ñ7ûšµqBKÜ-‚Q¸‘ ©µôÿL>V#€ú( Ö!ä Ò€Ža?нµ³Uö·w^Øè'ìí¼ìñøÖÆV©Ä©ƒÖÖ È ƒ +ÿTÿÄÿR"q‹9}Ò@ÙÁ ìêêêÃÂ]2(0 ð÷uEx¦>[E +ÐÁ þƒãˆ*=9HàÞ Dù×@ù›ì—$©ü\Iؾw^µõ›™æÌq\“¡þh¥Ø˜]øWŸÑ-<ÀÿCR +çeL@rQ0x‘3v/_€`ì £ÕŠ\¾†¿À€·ZL¸.gÉ@œ7ƬØjÎp™-cwljÒ#Ï@©:CVâ#PÈP ØA¼§Ý½ìw#p¬ÏÒ):\+tòÛUrƒ&ädô83p:Õ¾ÌO·¬TâÙ §¾ˆ}ÇœCpB„°êŽç2µÇ_ÒÓÛ·ÙœŹQ#pQÂeŽ<´kî@§Â3éôË|ñ7Ñ8·Lˆ þyü®éAÞÙÉY¶MÝYÆ®ñaF5—ñgD¤Ú!+3(Øð€6¹.¦€¯@@Ûþ¾oTÀ?Îz3\õ©ñ/ +€À‡Iôç €hvh!*¹w…ð0!Zg{gˆ¿C’€(>úŸyÀYÕÍÏyÖ$~×7V è+%VþonU*¯ýׯ^ïm÷Û¯··|¿õêõ«W;¯~ìI°¡+ y ÿ>üC¼‰€ô. ûõ¾K8€PŸAwc?ˆ€\€P@Í Š‹ô\r€$VÌ>ûê+qÿ‡Ú/Á”ˆÜ>Å_í<øtº‡µ‚~1•8/øïQ‚à°D^ +ûz Ò/ÏÐr•³5¾ÐÖvV}¿`ðˆ.\¸i RF|Néý,‘ËbÀ5T8~úGO¿\uÍeg•¨…ÏÆnà]ãðÄ%DÐSÓvTŸt<],?K|GXÛTRG¡x¾kõö2û 9 ª\®Wæ‚?X²m'‡m+r*ïÚìj4a…ž:†u6Ä+B]äR¤Õ¨l¾€€í€`à xfêz"0! âñ]Ç-ªáË,‡ô„ãrƒÐ7/Iv(˜uiÛÍôø®¸CÆDÃ*T‘`äLÁ€Ì5¬“àí@C;O0|KÐÖü·Q±sŽßÃì=oV€R>ìs¾@ +•ôSU´¼÷–àÈY˜Œ +€R9.~u!!ü–5¨4€ŸêÚøˆehyèÿuŠÿMDúøúïÁ{•=¢þÕ6Üÿk€×¯w6El–¶¥×ðfe£²ÎbÖØ¸ø×ðg  [ÌèχuÌ`_$*Ç¢‘>(dÈ~•l[Á•<_WhüWøW5B_~¦@Ã<j$Re ØhvZÀŸkø›Cpãg +ÿýøIµhÀö¢$8@Ü#þñï¼:ýõÂÂg§Þ}·MK€Ë̵ƒ8v~$hµ~ø!ÀÀpÑrFð£§sº}*^æ–Ùá + ðЬŒZ@æý’ÉF¡Ú ûgeçYò…ÃIHöC±ë‹FÒgì†Hdä-*'ËžC:‘sí’•%¡ ¸¢õ"]ŽIçý+”P=oÙ'Ù' àu$•²›öeÖ܈°w!€_„7çÄŠÑ'6û3Æí—ÎjºXähàˆtlÄ~Ør•CM(8®À)Á¿6*€‡ÌB÷N…ø‰À?hè° @ƒá[ð‹ð;2%Þ®vXàÁŸ5up €~_çÞØ,¬°ðÆæ[þ0Èßyµ·ØcªîÿõÞkf·¶^m³ðæ6ÓÛ¥ÍõÍu0ÀZaBü£`ÿâ¢tòáh&Äa ¯ÏÞ}]Qöè‹tE™ à »‚€x:Vøþ»þëÀ´§üƒÃB¡Pww¨½=<j ‡C¡pèNïÑÑp(œÁ³»»­o8ÀW¼Ài‘l9›ÄY¾òÄø‹Éä³g±ïÔÙ³§Î¶ÃÚÚBwxU7–ÀËÃmíïBa¾Û"ói¯›©Ú·`ðF«atõÌ»Ü5]îq"VAŒ +`µìè_;`ÿNŽçQ˜ÀiA!'Ù×pœ#鲓ƒ¸ßÅétî#å°ŸàËe—£ó` Çm·ÌÁú€/î@ôOIŽÕpïØ?ÇŸ-–ô óy§E® F¦ÕŽSGœ'8„Æ|€“pn€å‚2û‡ì¥a͉:OÌÄm+mÙåh:†=£™–€lH„B ñì…«¿+‹ûQG+CŠpœ½0r#ø¡u·_³ìÛÖàX«ðåü½ßT ÷ßü‹(w€]•$³€VžS +€wñÁ$©Ðÿ!£úÇ·Ú‰ +@@¨­gš£öÂòVOþL`^3Âöµµ•µÍœ7óÿðÿ¬÷— RùžaÿÞkßÁ›v¶÷pP©lBô³s0‰• °‰à_ÅÿÌÂÿëü¿'‡>˜Hââ¥`Ô Ø)ö[±à ÎÅåQ<ûúPLÔkHŒâ<âÿˆ¿EMÔ €P;ð|¶‡ë™ðÑÞpwx4þ‹P÷»g±‹ÄÐ-€“Ûá¾ß}÷ݳXhmgOa`Ç.šz=ÕFh·;ƒ«qà/ºÃ¡¿ÀÀOð.ˆLæÕ;©kóŶFÉvY«Îj?úøj^GêÀ&@dÚî™õÄtì$=}Üe¯Øežs¦O¢P.rn& àîîîËh1•.&ÿ°€@A8Ó„ C¼ˆçLN4 +ggö‚m6Ê¡‘MÚà3Ë"[.ïÊ'~g¾À A@i 8-bg³Îo((¤µŸc/+0 ›)SÀfñßÓŽ»Â¯ˆÐÁ>§9åWà8«E÷f^D¿X‘•~N öÿ+F0ÈÚÙÛµ§ üÿ 픾o¥~Q8‰§¶œ—ßöÞl•t-À>À¦€S[*xÿ°)èè @ðÓ¦û;AÌ@‰ògø/+ à׊ò‹…üÚÊ +‡ö^[/U6€û­ÊæTýve§´óê¹²AÀö«×[¯™€2x½ u°µ]ÚÚØ`kÀÍõÒÚÆ:Ê¢XYóuþØ?”ú€üAøýAÖþóÁýÁ`ë%f‚] ÃTz¡ó„(L€ZM*ÐHâ›»»ÃTa­2£™ÑÑÑvüEø/ºÛÚ„„þ‚¾ +€€ žM +˜oܱWÐßvöÝSx€ª +€ð¸ÅËg‰hS!À• çÚü±i5®¶ÑõaÔpãƒÒ*‡.¦:ƺLÿ·Jøéô–¶ËÁáÖ‰zI1¬dÍÛ¶»5-3¶‹órO^Ê^%ô3ˆþô.‡Ùƒ2ÈÙnšÈ•ÀNb'Ë亙µœ’{ÝJX‹eÜO1VÑ En€$K§ŠƒÓ’•±åf´`»@ÖÃ?Êö®Ñ +·H€¸_+„¸Ó:ðLÔŽRІ† ¶y¸4b×õö#…~v2üçäöõ8X0ü‡ó—E--øØýKS“OèZ€:ð5{¦.ˆ@AçÿH ú¡4þa €Ÿ1f¥ã§¤<``‘ _Zɯ”–V6J¥µÍÍí-8sÀ!€`¯÷ *Û{¯÷öv~ðƒD |¿¹É*‚ÍD  ™`s¯,©&€´,¿ÿ§ûö@S@¸ +ŒšpðQ¾âpW°õœ0@4B]0ÈáíëdÁ¿Ç +ÿ* èå|FdÂ¥·wwæ `4ÌáUÝö6îGð®ìêæ&/^ @PS`p¬ã¬’À –v¾µô`–QÑá0‰‚!¾cärðÆeN™É¤FäÊVÛˆ˜ Ëpàè€÷²ã²\ÜvÜܲ“rœezîxú¹ý"&Mc¡ß—snâ…›váCÙ:Ʊ ÎÉåØÅ|1‘u +öâKDÙ6N,?sXåf»«€[Ž‹»E{7á.£¸ôòjúyÂ]uœK“â8 )öÈuNÞµŸ}g¯¦Sé—`k‘kõ™WœL’}òä9Ð ×)N +p °ËPÄ¡ü +@*)AU`¤˜Œˆî ýÛr\;$Ð!íé‡O·Èà»WÙm\™®Øßà@à…ÿŒ” Uøp_]ؘÞ]ðï)€: @ð¯k +€@¡û-Œ2D/øÍúRÞðå­=ÛG¾( üÓÖW6Ø´£²Éaÿàú·67¶w^Qñ¿âUæÿûWþˆ€ ^ãdÈ¡ƒH” ++kyŽ’¯â€þTmõ¡ UÞ4p®ËNæû­`2vÆÌA§(ä°*p°øw5  ÀüîÙºp`2Œ1ñޔʷÔÀ1Þ¹' à5ðß•p_vÓÈ(Ýí$†ü¼º­=ÔÖÝ=¦€®ÀγäªعãG›ØŒ”Ö׊oéê3¢çv‚Cþ$¢QÓ0ø M3„;4D–³yYywqÎ"bœû›hD£7ù5c ó&d{”ýkø„|O Ì(J‘в„eÇL¸ãÈûQ3+axâ' 3‰â,ÖÔPv7Y\âæ-\s3šµ[+é8QNÿ[æàb0+‰ù'?y€s¨¨.ƒ"‘Eˆ¢ÁýjÀ9ΩœÃÀ³âS¥°êò)é @ r7˜èáÆ´اFÆàx'ðø{À?Z-0¿YHøÏ +¯€„@P¯-lüµFä1}± ìÂ6¨½Ä? +Òè~ ÓØ“öoÊ h°ýP‹TPÀÚúúÊZuëë›[¥­íuVö³óÿ«="Hßù<ÿÎ÷¯_o¿Þ! (x½³µóº‚@+­o”VÖJùµ5øÿBA +€õgzF¨W@Q€bþ#Þ?†ß²ô`¼@üŸ;h 2ð‡™QüôY,„@TƒÊº`:pˆ¼ÂÁµäbëTúmtá„0v¨ód]”v‚W 䥌¸üîPÛYq÷< ÊáÝœ +¢àÞn ¿­1dG‚Í~¾ÆÐH~Üü•óÅvžÁ‰;ùrÑvn;†üv±˜°‹ßºe›ƒh±=üîÿÐËØXá6GÍrŠ8êî~—+C¼pÝg¿)Ú%ÇÍo-\wµð”3s!lpÊy»n¹\ÈâÍ.ïîÚn¾\Z.&v—Q°ÃѹòΞ‹î.î„Mûw'ø §/c…'œ`̺a$p7¶›uËYçÓ²U€¯PU €Ãsi•ا„?àÜ PQÉPô…²6µ¼/ ЃŽsb~Q€~•ððr:PÂþ@@Ô©ðŸ àå@mÄxÝevLÑaKícg…&¯)€àÿP’Z(l¿• òµQÐØø¤ï>BPvT(…þ_)à¥PZãð~lÄQJ¯*LûÓÓ¿Þyµõ{‘ýPÀ<ÐÿýÎ+ñÁvesk§²±É ƒ(Ö +K+kkÿ·¤ÿŸßˆƒC {'ü“xÞb'@à¿«õ+Η‚ìeUr‚Séƒè T ˆ¬¾! ;K 3¿G£ßæV›NÚË“gÚŠ´ /,Ú˜æ ãBI÷ó=Ü}V%°Æ€Dg…7À,¿°Àü7Ÿ`CÀÈ€0YՖÆÀjÌ?lðgŽ/:¤\­TŒH_[Ìyþ]—ïØ‹'@Ë­–]%ÉůÆm«l€Edx]–© +‡«NòJ”ÅÈ!Ç–¶X}á¤Q,ÛHi÷e¾MãEvŽ-yQNä›àòaÞ\=8NÞ§Äp¶—Hy9|´Ü)ó>{®s¢ÌDE0äóÅS¶íS„½´¦÷?Hh"¸zU€×@ÁULVð¢wÐùë +úßj@3@£uôð¥ÖÅýÓ4öŘxÈß«Ro[@ëD˜Ê.¯2,¡O“–€ý&>;ˆt@”BäWÖ¤ /ûv¶·J;[{[{l´Èþø=½?ƒlìü^Õàà+ðÀÖFec{³°±¶rÖó+ùŬÎ@^Õú: +`ðù ïO÷žHÄ’œ<ÖŒöE‚3MÇŽonv‘&”B°nÆ@13Å®*þa}}ü{ú€W (î]¬½EáxÅ;Ë—v<¹ªátòWáç;IØC,·¿Ëóäl] +t¾€Çô!. …3” +J>P1ýâ™d%à•Èp„“ò óŰ Ž­Mf“Wàb0Œ¬*ñ`>«»Å«p2H8ö#vjÕqÙæ<{ÄN¸¶´R&÷™,Í’}·9s èf·*S +°Q +@!©æ2‰5U'àF”5lD‚—‰F B@Z¼M«Eøs +à‰? !ÀÛæØ@ã¿–0ª +@9Y³³¢˜ léˆ >ý±b@_$ds€o¨Øã%IÀξ/”ê>g%!SœZ@TB‚`Ð`ž@LÊcmaŸ_(ü 0µ`þD1žQê¬Ìb˜`nÔáI‚Ÿ—X…8úÑXx”{õþP /æQE$†QM|¿¹|™p™lv!È>ó‘acˆ£ñÇsi+î¸Q€”$Àžxòc‡^Πcß&Y àäÒ˹ò‹òj:gÅ'žPQÏÙêçäVtqµ:¦ÙÁS–û˜bQ9p#Š~°/Ù¯–Ÿ½m`€ +€Þ_¹~ª€GòÊQO§\!ø”pÁ¡ +@Z…vm²Âd p§ß—D€×øg@ÚÈI>k9Pø@’€”¬ÔÈ~[ã¼@Ò쵪øFÀ7|+@›@D˜M¯+Û7ÖJkë¬ÒcÃ^Æa@u©öÛùþ{àA‚‚ïÿêû=&öv^WØ#$°¹¾Q(= ++y–L˜ Ö×5ø«gÖðÓ­ÿ à8?3Òw©k?4ðA4ØÚ’ CàA@ÀE†ª4Á?C‚Z-ñ?>>>Vµ0 3:¡  ÈÒ_†ÚÙ€HÍd°"õ±LxŒ»y®\@þøè#ž2J˜ó‘io g¸Æ"°©8R›¢prä +»öCȨ‚‘ˆ€øÇÏ›Ä8|ÆþÀ#Á?b¨yÆ÷Ò€ŽÛÙ}ÁQÿ•ÂWš? gÄãÏ8'@ÎR­ý`#lVh¤Ø—ãð9ëDÏeq"V~Ç>ƒðü8[ 8b»ƒ/åŒöÙÍ¥Ëѧ¼›boFìpŒ[ãýÊëü*} +àÆ›sN5P§Ré\ñË(×/è üµîê•û'¼IP3hœW­a +@ü>cõRÍ´± +´ÔrÊù‹ùZÉ„ÒL@Èßï0 ŸüÒ¨: Zþüêû¬¬>ŽˆÜoÑ(· +ó+KyH€ÂÛõmTv*[{lý¡ÿ°ß{½õ=€@âDRK°ÉÞAÌT80à+ +$€|>»˜„w®úûšõ±yŸZó1@4jäI;ù¤”¼ÅƒÑ®ÖÖ.3¿RX4Ø÷'Bü#pAè’Ì&’6V,|Œ*N៯òÞçõ„˜›Ÿ¬Y¸í`ŒHj ΰ€]! APÞA(-žª /ûÃÝíðÿMrO(ÑL¦» „1ЇÀ3Ãáɶv^L‚a[#ü‚vhþÀ‰ D–éK‡Gâ–Ëi|ÒV¢žŽøíÀ+ÃǧŸ[.+çe¼¸ÎrÚ]攫«Ï¸‡\œj9n±œsÓËØñr5‡ÁÄ^yÐã)ClÁߺùåUV÷c;¾ìæÜ¢ý¢¸ºêâdŸ‹•ôËÄ®ã¦rnnõ_Ò×óv¶âÐßçéÄݰY¯gzx3pÀÖxí @þ9ít@°¯€zµuæÃÄÚýsûÍ +€çxO^Ç·* p[ûýZ"À—€hiÑçzÖ"Z­«!Á¸°rQ%ÀÏE„þh`ÊBÞÕZ¶ð@C õÏû •±¾D °´‚(¾PÙÜZ¯l•ØxûÕö&ƒ~„$ßïüÛ•ß#øýëW{¯Ø˜m…÷*<³RÚXÛ`uBt‚ I ñ^¿Pì{" Æ}pÿ€?îl”Íg“‹7 /h&9ÖÇ +öAà–™¿Dèò§ÇÅØteIïš×p~®ÎÂm™ÌØè€;¦œ=@ +mjà83* )ÃĹPY/Ý*höój„r©ºü#œ…ÂÚÛY ®a˜–|„IM(€KÁ൮(›=Dà÷#F̲cÑèAɃ¬u—JÖÍ[fÒÎÞ|âä©§ÁãÉš|h×y’µA˜™ÓÂAP"¼¾°LÀs‘uø×£øf-h¥$[ $bIÓÆ0_Ä_›jÊ4q™¸ÎÑ|²ˆ»ð°¬[<9öà3‘À‰V¨MtY×£†É–X¬H0Mh¶-6%¡á ø Þª€Ìþ@xsê_BÁ~U†Êýã¡Ý¿T¼Q¼G@ã•|QëzKm{Î_d@­/€ÄA›4ðÙ +@Ö= `[ÀÞ^…ê?ÂzB"Ô¡4y°Ÿ4-Øg "Þfe`ž‰@väÇ£´±¹%M·÷mÉûK;àž "»~ÿû=DRÈÂ!6×+¥ü:b‰¸ÿEâ—m~ôGU°ßÇQÛ£_‡z¸‰l×}—Îë+›••䥿K}€Š$.²ÉG‹K‹ðž\ôIƒ|%ÿ×øY}} þïwçæ&'ïÖasllb, ü+ ž!؉uÀŸrkãáöññIœ4Æ=Ðõ8™DÐ ˆCÀÓì‚ùP[xW‡x`®­—R?tsï¨ñ¡a°w µõî% ²ÕìbÔŠþ¤ë:H¢¾Rà¯r[€0Í‚ýÔþD1@þV çûY œ‘È>!ܼŽ?+NgR0FÀ—Ä!$›¢ø‚0“Ñu{ÅYÄõ8ÓBY<ÿf6‰+¶¸u=zÓ¸ýƸ¥Kqâýáþiÿ£ìåðæZ€j_€Ô! +`_ ¡ –£ß×5"èñµ÷' H&ïØ~“˜ +X«Ö°  ~_¤€`Ÿ8(@ +€iø× *õüc ꂃóh´óM)‹Q€ZúÈxZû `1$ãÆªÀBúŸÝú¡ã···¶y¸ø=V~eç³€¯8&ØëWøÃëïÿðû=HÊÖ[nomnn”X¸üÁÙG·’pÌQöÛõ/ +ö`-Û…"ÌþÀ?ÕãÛ 8Y*¬¯¯m²}ç—ú¢ptT ÒÖçƒð#Ç')üã•ï„?9Ÿ÷·Tý>øOÞ ·104S¿ëtÞáÐ:& Ó&ÜçdC€0ä¾@ŸÏ öèc“áxfì#  B ’ÂØ(B .CÑ0éß@8ÃñMp‡Š-ƒúÇŽšÑŸPõ + Fàx +^{ˆ½eºI×q²YxÇ­@L@ÂÉ‚A·  l¥lÊRdA7…ØþP+”®¸E5pSþ xub·®'®GM3ú¡([ ‘5=÷_Ä?ìíÚ¨¼¾o‘ ê©ùù¬)…2,ÚýƒH?Xó + ž×W¯j[ûýóðP +@…€¿4Ö'kój`r?²xëŠt=À/dz`¿”_‘Ö†ð»I¯@JãvM៟7ÿ‹ÿ1ŠØ6IN@R @Ø­Xƒ¿Gð— …à±ÇtàD²ä B!¹\’°ñq† mwð³Å@ 0„“¼|¼›øÏÀÏ3è:·_˜PÆ-(bÌè…| +ÀqÐD¸v¾¦äTó€E”;JÜÂéDµR ¨$°U +àz1á6(€[?¡€ÃÓ +ÿ8*|Bö²³„>L¥4þaÿÉõÚ÷+2¸ 6¢Ó—X[»nP¼Y  +âNÅô–ÚÖ~_'r|©^¦ +@oèr4a +z€?!€IàWþ€Ú£íý#­»ÞÂÍ<¢O]ZZ*VDÿ—v*Nøzo¯åO @¤#ìÿÃëí?`ó÷ °Â«WÛl(®# +(¬¬¬Â1[DeäZ¿ù@( ¨¤>0Oñ@ HQ#z)ÐeÊ0e[[1Ž2‰3 +`Š 40)¡õ?ü¿ZþQþü$ÿÊ~l|lbB²€‚ëÑññÑî;@rxüñÌxhÚ }tì.€=¯€¨œ¸`Á1À~tlnT¨da¡ë&'Û»A“áqÜÖåˆ 5 .Fàæl¸9fÚõh û'¿‘¹g*Çn»QXX©e„ƃ6ƒk‡©|ì~RØâaÞà¼2Ó29’îQ6jm>ÒtähÓ;x}‡°mn>òŽÌp¤ùWÞÄ3Þy‡£;r¬é5U+³›ñw°ðÕgŠ`Uÿ/vpÀk Ðð­û°€rúð lD#Úg^ô¯Èà +@´Î¥~Ó~ŸU$úÀÁ +Z­ËýÔ=Eþþ„v• ü9 t-ÀÕþ🤅Ӏ‘(H™-áNWÖ8­¯ŒPÚª ø'úwàç+;¬då?E?«_oI‡À率ÐV…#UÖ×7B¬D–hsø¡˜Áºû:Tz @o‹ÂI*’ƒQØC€€¶T€8.llmmm—VÀ)ø10Q°èH?Fò³…¢7P¬öÿ\ÓøïëSxôY¦}n(ÊÇ2ðßÔöãP\ÍŒgÀðìã ˜brçÌ3Ä“ ùðøØäh;7¹ob"óÎhÏMRH€m$7ØÈox˜£óZ&‡åQˆµ£ey'b ¢i·Ý¨W£7Â÷€= æðjb ®“0" €ØÈ††,,Æ5™êG&$òeÖ¯fl'Ú±œ>I¥ +ŸÛáðü;.ðvYƒ:H*““à‰ &@Ýc󨇮€‰ˆ+0LÀ¯œ¦»õø't¤A°(5­?%ƒ•ÊÅã9OŒÄYgMQ3ËDÁ³Û€O3-ž3Pø8Îáâøå×e*0Î)ÈÙÈd: AaF žŒ“–òÙG`G‹I[õ 컘Ôñ¿À¿«O×þU-Ó>Î7 ]š3˜ wgæî ÐA›i¿Dæ0 øÇ%Š ñÙ¶.tlrç*vÞö6L*0Š˜$«Œ‹°‡d¤\¢ë~å0=ª7ðý“z B€‘š ³÷ €W+NCü2U§:·¦L­Nn¡ð)õÏyÖÄMUâœL+%xôØ‘âø¹WP¯°¦Y¯œ×¤ÞêÀþ¾o›8°/€R0pÛŠóžå^ø„ø§ÏWJ@ÓÀ›€ tŸ¥>Ó~ÿÀvb çû @ß‚”)§iVXàŸï·«œøÀûýï÷àqXðRß`4v“ºš1ëï ãKæó8ÒëÙ˜è‡Ëýý6S†{àˆƒÎÎóÕD¡ëÄ.ŒI|ÎÎÌœvýÊu Ð' €åé” +È瓈éx_)¬‘²ÙXl‘J`½°¶¾‹F­dÞYY\!gdÁ9@9Æ`„‰Fý +ÿWðlÈγƺýœÿøü<\÷øäh7X!œ Oއç€icãwBóó“tò“ÀØ…æÇù“(ëñ$^ÇP& € 19†paþîäÄ݉ÉñönÎg„`Áü|¡ÿ‰ÿ¸õ”cñlzpúBkÙä.Ç⥠Ӆ£6{F2cŸÊW;»1\o¹8ÐŽ«GðîXeR¦P®e%\*ƒÆưÎJàÜ$? +4ÿ¨ùGXÃ?¸å CÀÉ‹xÑ(¾9'ûĸv!¨WšO¨iÈNž†‡ Ë5†Œ{ÊO@mxÈŠâè0A'*„c”JL"ªdØæÜ¿\µºì.¶mºÌOj0:ææc .°457yG¶¹÷$‰Cìè="UFss€§×Læ+ÄÂÙOá–¨èœÞtì&)Ô„¦ï@Tåȱf8~ L”€¼3 + è·:ŒÖA_1Ú¡ý~­C€/ VGMMg;ÛÛ;Û«eó¨ÿ©ßþd¾µª + Ê‡Vö1g"¢f:pÆ©ÁJ%jjà-üÍI@82€Ÿ¹€×;{ xO¦ Aœ€@`±C¥°Á‘诙˜KÀe5V@s(LVŸ€ÏÄÚÐÐÿÇòུÆiÇ ü1Ün‹³l®ÅúúIðÅR~iEð¿”em—%Ü}ñÿnw5ðµÍÏ©ž¿áp{7û³‘/ÛêQâÃñ‡! +Æ)̃%Ø!X­ ÜarR]C“Öá¹ùɹù¹9è‰Qˆ Àr®,rg<ƒS._ ^Þ0ìœãfm`×-ãOe;O¦å– n¹XtfÖAH B,~ë`OÙ)¸%ÇÉßtìÄr©ìf—œ4ïÉ·Åd¹ì³î2‡ðpì¢ë¸Ï³…'Ù'Žk‹nQfÜLp&>' §‹³œ"_ð¡OòvâI"MÜEy5ÇBpúoRÅâ~vñ fF?b³¿pèƒÎÏdî|ÂW"\À¯êB{øC£¬Bô?×2L@Ì?žÍd 3ÔÙ<7z#úa u(b»)ǵÿ£[þ®ì,—áòb4ï<Û-ŸOŸ:97û°Ut-NŸ¥šæg¦í柗Yà=û¤è–Ëåß\O<1eLž•ß®î~÷,¨â ã$ž:åÝgŽóÌÉK_ÛùÐÊÎÙ§(-kg-Ó^qóOÜb–ŠÃ)qv_×´VÑÉ»÷‹ß}çøçA)»»$ƒ» .rÝß 4Ü:‚ú„ÙÕÊ­Ö@/À"é¶á”9¿0s‰€9ÂM8ªìÈ1€ü8•Ø úi>pL—PûG8Y1 fê€+þb" +4À|¦r`€;H¤7 Ÿ›Úï3ø9u§8âTVôÞCLüÇ›ô>°% (_ °/=«ýkáM‘àù¥5HÎ Râx•í- Ž ÿõÖ6+ý8,øöÎÖØ €IÖr$œÃ ®\[Ëþ+Ù$Ûæ°^”Óøø–} 1$ÉO_YC|Ï^É‹I„±õJeQEAZ‚bÀ?Bˆi”E¢Ñd"»´’/@9 J@ ‘„P ‚<üSy"Ú÷‹×2Ó÷Äåõ€ññOæ þ {i¾ï9~©`K 6 ©€×£6 Œ}ĺùA.íeÓaey4íºÂÙ{U*‹=µ,C~B¡ç¯/«¡|´Yö²™{!ê=®ÆôHXCÌÄéWS|ö.G +–ž¾¸š=ûUq#Y™÷‹%¦âxµnÛå›6Sn8ÌyBðñ¦…°w‘&Bñ¸]T={tqNΑ{¹œÀ£j)œ"àðDr©„‘`à¾#úÚDrD@Q`Ч( ?á…Ði”ùÇOòT©ˆä¡:ð£w8±*®@à¹âîaª1ƒ&ìB„Ð`ǵ`@|% Çê@ꃾbµCû}‘òò†ÊÓ€Õ7S€ ùO°ž«õµ4-Ý¿âÃj.õI%| z=›\Y\ãàà€ý9ç¤ØasŽ &Ý^ÿqÀÖÎÞVE† +}ÍyÁ¨À`€õûäó‹Ø['38ƒbš„€Òh”}‘™3àBàÆI#Í€ûõÍ-ñú%Hà¿T‚(ÙÁ ›+dû.E¬d2_XbóEâ? ÙašQލð"üƒ€öÿ +ÈôÙx ¤££âá‰1íæÛÃãPÜFÁ½ŒþÇ õ$ @O¯Vp½vþcØ®cá9Ê^¨§†ï°™ðØn$`E^6'ìÔl;uUøMÛiàôCïkPT€PV þMfÔ¡d’àõÂ:ÂùÊz©Äq~€ð=Š€W‚½mÖþ¿~U‘áÀöv þ Êm`¡:<6b€%ñÅã|Y@2€§ÀvDJ<€Á0VúåíD2Ïöˆ[dpkg®ž @^üW¶¶·9ùz¥°Á`!zYä³kû‚8ˆ€€Rÿ‚ÿÂα?>~‡ˆ¤M<^Ãâç'æOŽMLáx ·ÎC(/ß{‡À"h<†SÂaJØ.°³Ý Óóª]ccwBB‘7ÎHÚ~P“=ì´Ë^þPÙÄà›[]¥ xfnY)8ÙÕœ –UÀ"@þ2šaËÏ×,2ãÃ` FcqÜ ãG<[ÍáxŠsó;À¬‹3äŒßQZ*Ý(ζ9@ÖMŒðZ„÷ª´tŸŸ}ÎâF8‘誌šNyN<ÇAqÈ2® À‘š©ÊÀj(Bš! h‚T€ ácÇŽCø+@ð*ãIµÀû(ÖEœ V 'PÀqìô(@à(èƒÈ«-Ô-çÏ¿Çz€Ú²,/1öÝ­7øzµ0àô×Ü?¬Aœjky·å¬|0?»Áj»ä޳>'û“—}èÍ9˜G‡%9ÂûáJ÷š•ìâšôÚ(­}LÜ€ýΫ­m8{ø~Dà€­½íí½=ŽD? hn l(@©ÇlÌ MCÀæùú£`²ZÓà?÷O忘d"ýz’‹;;[¥­Ê6H@k…¿²ñŠ#Ž6’(wckÅ%áAN÷¶©á3ð·‚aHúI@}Œû±LÎÍc“"`’@î ÏM>&È'2J,àŠ9¬qE³ÎtT‘ŸŸ›œƒàIá±QÈH9 +³ÝîåLЀ÷Lšlçs;+9ôe;aç9Z–Y5¦ì±;ËI>áÈ];AŒ ‹}ò\7qÝLØë®c%¬l6ºè8n‚‡iÅÁe'œÓÉ’1r+‰‹—³Ej”,ØÌÜ®H$\7o^G©Eׯ 剧,ÁJò íkóWV +yg)1[ߨÞÚ„è`7ãŠ6ÿ€ýÖöis'mn-ÅÙ—¹°ÂAMWòÙ¤D‘hÄ›6Tág²*žØÔ VÐ>Î|À$ðÏM:òÉL¸{t|òУؗÉÌñªñ9†©kÁòžÉ°¶ÔæËàm~~ ¢áûñArÖØØ'Ý$“4 N¼CÔØnÖÞå@ý´âírÑ-”wpë·y<ÿÄ.=5D4NÍÇ  Vº9ÙŸØÙl"ë,&þ£óøg]{R¸»+rºãæËnáÛ]ðH>•Í: 'QÊG];iã†@´Ã±ƒÑ|>†² ôÄ-;yÞ_v9o~·ZÆ'óSY‹X(îÞ°Yþm'ÿÄ)d ¤cƒ$æ \VßDY3ꜰ « +!zœ t-@S3ÛÔ‹eÈfÕˆ·S§N·œm9U]`‚Ãã|žzNO½ȵ ÿ¾J_1B'P8IñÎMß\½äë²Hàí’í™é7·€©«@À¡8Ò '»²Äá@ +k6·ÙXß*Tè‰ÙÞ3¿z½Wù|µWÚÙãhÀ8&]7€0@달±ƒ+Ï&Ù,ψúëø.€Cü›á³2<øÒ«¬E*­H_¯€ PÅ?G*dó#~òÎæ&¾YZ\,° +c%ÏœR„óûñ+6=›£â·KϾ‰¹»óˆH5“€s¿˜ç9 æIsó£Â9ϘCpŸ™œœ˜cY8stìî]Û úÙHEhÀe™`á?$7ÂjÖ×Á/Sß# à´ÙÖ®ùJjiœ½}‡Mƒ³sKŽfÙ;–Ã!úM7íŒpÀ0XÚ±òÑç9DÔ÷ñ¶¼³¬‚#)¾!÷$ÆöµClóc=½ÎOAqÅDÙ¶Ü›O-Û,ãžnóvì?·…Ê‘f†öm`¹f Jƒ`RR œ°ŒËÁÀEU½!Æ©‰á#>Àå8«M öÀ« +½Öxà“€¢ö«S„þIœ%TpÑøAÇ¢À@Ô8\3qÅÔòDsÿ„®`¶j€þ>S(÷™'<Óy1~’$ ôö›Lß^Í<ŒkäËf ÿÜf;â™ýít-@M¼A lŠ«êâàHU ZÚDDOÀ•J{"À +>? ´d!°¿l®*›kL°Pó¸eÞŠ "W0¤IM 0A°5Ø¥F#dþŸƒ’³g2aÄòìö»³³‡'Êö3€à¿üïáã· EppûÕÖNi‘ƒ±”±bgÁ=ÒÁÿƒ£6·¶d%è™uùÐXäÀ/Ør‡~{¬™ÿÅ_b“•ã úñ9îcóáÖøC>ØsÌd¤§1Ä?$” ‡@“‘+‘+7âœ2Á8áO ü œgöL,ïdó2ÑvÌ|’¸ù-ðdcz›@|ÅGœì3Àͼ•ø‰‹Ë b@¥E‹îdÀ/Ëqº&Ö!XYË_ưõÔÊ ðÒ¢¹+`Ú7Ë)U\ʶ9>x1ŠÂÝ0!(îÜüÖÅ V ¥°@CþAI+¹¸xCʤ{û: ‘¾´””Dµìà&WÄñ{µžá$Ä +J:H@Ðω Õ­Q˜‚/À=À#€§c9y$p†›U\ý5@;½oTqý¦ü¾Zhº +PLèA_ìÙ)mmo¡Búö<Õßh +ü²-{¦ÿÙÙ…™…Yó†€? î°`_W”1;ãsTüâ߬¬olÀ§p››ëëÌõ)Hîlol ˜ÜÙÛÛf#Á +\+vl‚86J¬„ÿg;@(IÇûC€`/SÄ?{ôå×Xû3cIõa¤â_@`7SÃÿÖ+Î\ÊžHÛ;ëI¦Aˆ`ðÙ+N2d‹@~´Æy¿p‡ÛY}76à²í.€!@;û_QÐ2Lîa ¸²@yu(€I6ždwњȸ.œa Ñsa|øÜˆG Tòêׄ+ÞAÄXŽSw ††ž$¿eÂûSÐÙØ0S,+0X„Ç>ÉÍ£ À2Ηm¹50äˆàl®å^ç þ<±hUÀ ¦ö©E´„@Il| Šso~K³8„ŒVä+«WLéíϾo:ITJx°?4k ûØu,€2ü +àXóñcGàÿ1ÀÊláDH$«9¥NÖi‘õ®\oˆ8¨Àz þ.ÔðOdSÈ¥~R‰\ë3Ö¾`·a€ý‰˜¹¾B»zѦ҂ ³`¼bǧêþv4°‡€ÎŠì‹'Y€|~Øg5›·8zÈ}8QÀœ3{¤¡‚ó@aîe‰•€”jŒžh_´Krÿ4€ßcŽòoÈÒŸº²˜0#ƒ €œÀ*†züsœ"Þâá œ··]ÊFQ›@Mä³yŽÂèóð/_d«‹ÀU&?ԯϾ|ÞE|41‘ ·e&Çež•¿ƒÿ%Ø" ¯ŽS û!xˆ¯aÈ|j†|Ìß½ûxb~l."ÚD~`7›E®\9XÎ:U`RX]H „g« +à[­Ì} + Ä€þEJ@~ÄSñFcq˸ʧ4;9fA&c+¥˜þð!@DZÖEBù"ç« ‚:^y ! j˜P9€šÂUpT{ä¾0žà¥/€T/06ØŸÀÕ²Ç3âŸÉ;mÄ?õRÁ£Í<Ts‡¬Ml“:9ØÂÀ¢–TDÐÙvPg ëþå1³0óP®ÀxÅjÀð mºAú:9p8tõ1 €0úÛ°:ŽAð_(q\ÄÚÇ+;¥Mæ;•M!-η=8V C^Ž—òqtŽ[1Ãè‹Fúj¬ Áë €0pÆJa%›Í&Ìd‰‘‚JDöÿ\ÏDq°'þa;¬–x ZK²Ùa–êciqi1¹˜4£liØUÅ¥éêÒè*3cã¬ùµC¦NHA¦ò¤MP¸m@Ÿœ“¼ß8 ×q*{¸| +?®cÆeá\æy0?“™Ð$ë +À2™qäÎ+‘ª`'=¥ˆW¾îW7] ð€à<¯–¸é²×O¨æ°Â¢/p‹ +€ý~r‰e!ºöšø³®(þU­’j~§©¹ëÇ]]ˆ»PRTÝœVRƒ! +€ Àõ +ØO4(.T`•¸Ä¾ƒrù7æ| +  ²ˆ8 +çN`eÝ=O>Z`Ÿ\«ÀÉZŒM¸I ªÁZð àV㟞½öxx¸ÐAׯ <àQx¥®+Kjélk ЯðO @üâáŸVåzm IÌBè]4¥¤@"–dg€ˆŒHI0f!¶Èå +k¥J‰¶ +±¿es{Ýþ¡÷·66¶¶J›ˆJ[ ´°’__aO ¸v¶`3€¾ N7pLÍ´Ou¤þ_É?ÂéÌ=ì{@ô+6;ò$n Jl‚XÃ?ÎQTö¶®¬¯'ŒD6¿ÄÒðEì[Ѿ Ø'VÃ?B2€ÒÀõcÀ\¸¯£“ó¿HZ`lâî\¸=3 Ÿ5ÿ?ÿW-ö¼2“€D0ãúÉñ Q?o.—æøÇÙñoÜÉP+LŽÍÏó¸êñüã»ì +8?‘É„¤k`aÀø<Ûfðg¶¤™2@ÞÜÜtð£s­]­]×(u]ú1ñÿã®ÈŸEû~Ü LÒ~Üev™?ævõEoqè“[$|Eœ²@¬Õ÷ãë(9úcóÃX_”ã’º®cíZ—ÁT¯_‹^‹D~Œÿ†y e’>ü´ž;×zîG¸;Q@̰®ƒ"@ÿÉ“ƒ‹‹¥ðö mDítÃGñR!l+WíSâÖ©ØÌ_jö礴Æv>pBr,ˆMeõ(nÂk ¨k$ +àQ•8Ñ8#h† òÏkë`:øÆk’ðUÿ/¾Ý{À׊˜]ðµüA$€ƒtþÀ?›òr)ƒ‰?2"1þFëïÏôû¢ 3üø¯™ÿBÔÿ¢êmö•äTW±ÃjZñ{‌Çìa¿R`Ó»<¤ý6‡Ûªllln#ê‡ê€  ÖlIs}Z ÀõB¾P€_Ê>â œŒ¹x~šhA0ØÕ{DÊÉ.fóÌÁÁÅÒ&Ëç¸#gH`¯‘vÍà¿‚ˆ|ÁÅveIÄìâÊ%g 6L<²8-!Nºº®qXm¬¹›ÿËph’­þòñØ( HºÃíãs9Sd6‘ùI¼Áã‡Ù¶ŸØOhtŒ3ƒ…Bcs8q# +¶&|<ÇsØê°‡`à("íÝíí í³k +àÀ¡º‚PH`€w]kíwE>À‡@ìu¥>¼Þu=ú¡Éì») +€ž +póøcß§A>ð(öã1È‘—A’°œÇ†á‡ú®)€sPG« +À¢¸½œ¼p2À÷5ÀÂ!…ü&l ‚ÄZ@V}d‹žïµàÊí| +@ÕŽR=NÈãƒj9Í8¥1m¦4€VT{Í8£—ì8ÝÛÓ#&šìk´=P +`fA»„j+€‡&R€( 8,°¬½Áz3½½: €<#º(@^3€2®h÷ßHÄÿìg _}¥¯³‡VB<ʈ|nSª¬qhàÍ|is½èîPÀÖÖ[ÿqþŸí“%¼– +Òc qÃÐ_Èý‹Ù„ Ô}¿v ^ƒ_Œ ÐeK6>@¬¾”•|Y° $àüŠã8V‡,Ú„ŽGðšJ¥°K@U@ƒpd€X$Âé²6bÀ?ác*N»û1Mžƒkž„—:;Qüc™ö ìÒms|±ð(‡çÚD&<úS„ dv÷AI|á|à܇ÕÑQN(kÃS:wwwÿPѾëZœQ öŒpLÀùg¸Ûè5è¿.ðæÎ›×ª +¸‡0?L`¸…׿ÆpÁ¯PÑ5€#ø\9§•ðcò‰&€Pþ °)¥ÀM_‹F©pé/ dN¤qMÚðx +`_V +¾Z¶}I@Ø%òC@Õ¨£|pïD+‰h¢xý1PàD@ã_Z¯*kÓ‰|ˆž«-„¯xtu¢÷˜b´Í$àÏxËb" ødC¼þ§Nñ.ü–«W¯þ`pª?Ó;U Àþ€ÞÞ[ñT ¢ÿ ðÙÂgŸ-|¹° ØWµ:æo4üèú@Q6 zH+K Î¬Ó»o¯oJÿÀ­ÒÛ±ïÿfe*›<²Î€ˆ½—VØpqRBå!}í€Ä$±”HÂç'  Ø“1#:˜-m&¶`O£=2Ðß]‡ÿöö½FüK¼°«ì½ÚƒlæMn„b1™°6sÖPDÌ +ÿ×°H[^y ±ŽŽ=õˆ±ÁíP¨½Sí•¥ ixuæ$S0:z÷§|S{ÇFy"ßÅ8;(^ÛÛQœ*v”Ÿ­HäZ08 òg‹õ™@+»dpP® ¬(Å˵@$ä8J×̈qí²ì‹ÈŽ`àÓ§ ؼ F×ÔpK‰À‡ú²àµk‘sêdœz︟áH$F l¯L¸¼Ê—›#j4°`“à§âŽ[#7Œ7€Åš ˆT¿ëáØ—ð<»(qÈÜ¢2§¨ËЃKíÀ´ÀÎ:zül +ìÕ( ÷¤Чc9Ù„w-l+ÿÌ7‘ÞA @$ÛãV¸î·€6­f>÷1®cÌÀY(ñÌUYì[èC©ÚBo¦¿ß—˜yªiÈÒ< (A2ûÜ÷Ù _|˜šRø?<R›‡Ô%ØŽ°ÄšHz7ÃüõRiÀƒÃßÄ +3€¬WA”J…õuVä!ø^ãÅINÕ: "Ü"®¤iÀç±P":ˆ=‘Íg±fd7ù-„týÄ4ðOè×´]пÿ¯^½Þzµ·õª²³¹ÎÎÀâ +™UŒ²&† „¾ °Ïž¼x !xgg>…sNð È­D­0‚ ìò’Q‚\€>1qw"<:æ¾Dþl? ‘ &&p&G € Ï„°Ê"ñdŠH»@·µ<>q®6\¹Œ`[FÞ4/z8ŠŸZ‘åb$x1iàFàJÀó$g›/Ë;K»|åaS•¼xñ‚^;SíE\Á¡ ¸¬>DpžUw wËÍ#D¿OÐÕwŒ޲nŸÎ˜Ö +ÀË „]Ï7çÞ¦\>nè˜jÈu}{ø•8~Ÿh°í3ÁºÒZ¡îóÛƒµx(£x/Ìè0r†gˆû©¤Ú +à-r_|Ö ø#4¢€™FüW¿6âŸ-Hrü?Ñ¿ðÙ½{=½=½‡)D†åg[ 6V‰¼üúâÊzaÒ¾ÀJ>è|8Ø­5¶ù©T68RÇæÖfiCPZç0>»si‘)=À?†òLèÎ>€ú Mœ ‹ B%ÀbÑ`d©´]aå"‰ÿüÔð[þ9ñûþ5®Û¬¬o.Âå›2QÌ0ob8¹¨`_Q€xgZX¥»f‡n \ÛéÂ¥?Çü`w^B8ŒÓ}zw%îNfFïÞå,!ó¯3“"¹‚«€w)±[7 ŸÁ&òÖ𑲢Î/q‰†ˆž#í stàTÎzf3Æç.{xxˆkö m D?ÄÚðeXCC¬ëKEcØÊuÙ#<ùFd 20±ú,©ohh¥Ås#.Ki†…O—µbÄ28KÑÐð0J¶â#Ökp`¡tÄAäFïoDŒRŸ8»H \iްY a€ÉBý¢€ÏpãEô@Õ‚úýNÀ¯T§wàTÆŸ<^Ý¥ ʼn€]ìm¾BQYOâC9Æx6ÆHƒSXVÓ´g‡gçÞ±IújJ‚1:nNÊ.¼dúm@f,Ü @W5à°O²®_máeîßÎOPè¶ÂRâÊ‚1”ˆ`§4؉Ç]ÇrÓËt«4kùM6¹·âÎr.—~–Ë­"€;±6FÒxÖGÒ–jÃV:)Vû¯.§ØÃ7Ζ<à6Ð39×]œeÙË,.—sígz—mƒP›ù¡Øe5è®ÇÞ½Ï9’Ðî ƒSV¯;ñ4$xYjõ‡8²€4"þ/\¸Üdá‰_â +œ¸ˆ¿«ü˜ÔŸ84®\ o@£0´@@"íAQ@¼\a›¨+W$øð @^("Lçáˆàè „9—½‰aT;ŒapÂe¼\ÁI²ŸR¤YßÎ@+HöF$¢ÑFÄ puï¼àŸ pšÝTH ñÏq?¸|þ¹O€>ÇúÃ9 ø×ü@Ÿüâ)Xï?Ä ×?‡—îõj(XPÅ¿gŠÿtÿwÑû±€ÇÔ=‚?Œ¥·÷ðñ@“9E0ñrØšf¥°²¶Ä!¾áã×K2g0~©PPí~ýÒÆ›þA&°Ñ +®€ÿ—jÄì¢ „³/ 3ÏA?ôq²Ä-M4 +ÉaFMŽ@P¡Ó—é†Ï@4XþkþŸ¢áG-e}àbôRÔäL!fÌ~ĹIpƒªùA°&FAÀ줸k,2àJ½®Ìˆw‡y•¼±ÍÏÄhxþ..‘c“ÿ–ïBJ0¶à® …3½ä’gÝÚʱb:gâ“a‚FÍ#m§Òéç± œ(¸ã=v܉iÌÚ#n. ˆáPÎqÜtŽ`BDZXR +/ÏlWç%³…±Ù±m³«±2°-PEÊ~ £®v,#rE\–Å"gI- 7pKMš"7¨&¨SlyrCÆ(Á¾¡Çp@b<ÈoË79Õ‚ÖáÀèËF +’h:Ç0x1K‹¦äT¬Q0Éèñ¨qÂV“iê”Uqv?×Å©”†S(xà§ Ü`qCCŽÁá—GFHetòuø§µ´²C™ ÓÄ?ÁÏ×#¬Ý9` ˆ095o2y Aù⢌µ @\#¼Ç ~!_ÚØäpœ3ˆ–Ö×Klý+Jýâ0ÿHÐÇàû’/èãè# Qш hšÖ76Ù æ #Š4Ü äòá—øñýÀ¶ +›;ÿ‰XÒŠF“L1ÄLÃ(#¨ÕⓜćÙþ±y‚;Ãöz„>^Ç Àá;2¨8¾LL>&Úãw©È£cØ%R „#x}p !™x|¼=<.{É[#eë)±¹ÁO‹Y¦ô°‰±ñ‘tzÕbW@ŽãkºD³“x*p4±”`§Váö‹V§æÓñtN &Íÿ×…+HöH<½œ]M«æÂü¼¡P»8(ÀóA#N*ç¤Ó߈Ê}®A€€Ûã)±Û2ì"ô#0dÀ˽³“’pÊ·rÊ_øš0.¹ìh³íå´Üœ&;¹¹8îŽX=-£°g2âwźžÎ­ 9ú m¿H§ÕX"È©}W).«úHrdô8ÿ€#Ïãà‰á¡ËÃüʶ]ä°‰O¼ùËÅØÐ3…MFïr„TP=HðþhP0Âó!á/ø°ã•èW ;ñ8ÝæS>ÔW—¦&zk@¶VàiØA ø'Ê÷ã_ €/Xâg Ÿ@ÿ+øÓŽøQï[΃0,²?ëÑ™t€çµuÒ ¬Óÿþu‹Ï¿+®sŽ“Ý}þâå‹ß½¼]çHEi'õldØàc¿+§¿+?bî³]k×M7Œ8‹ãàS¼å®]üÍ‹¢›+rƃ]wõå‹´³æwü®îê³—¸”£ší>wŠÅg®ÃYø]Ÿ_â».»®á¾q&4»ëË¿[}Ž»vìb¹øüåïþÑ4³e†î2'.q¶³[v_Úeü}pTø®e§è,§x|ä'au–9ÚÒöÍå§X–:žÕOlëC056€ŒÆŽ>b@Z½ Ik=à¿ÆʰÉOBù8͹»|-øºgSÓÇSÓ_H•Ýg*€ÞPèªH€Àî?¼¹BýhÀŒÂ‚Îÿ öiá7T}ÐËìãm!t†Çä/•™@€|Áý"PN6(ÑïsđڜJØg<(AbQ’ûÔœ§€Îðoe³KK++ÙD_k_l¥TÚy½Y©Ëœr@1Àë׺°»½êù½w¬úÁÿ÷ß³)Á(\1û‚Ñ,›&¬-.&m¤ ±õ³¹Å}fa< ›ÃøÁ$ŠÇsžR¾[¨€c}òíñO9‚0;NÌ‹â'L0JÈ„P„b¨‰ErPw4$­Ÿ€j'me3ÝÁØ'‘¸iÜÄN{5Û+ü'Xf‚Mpe?_¢®½žuòQ›QÈi;똉›‰ìͨi&kàÚ¨ÉQÃðfZf Wár;‹˜Ú¿$YÅ?™ÂòG48)ʾàv"–ݲ9Oi_×¥Kƒƒf6ŸTÅÁxnî¦c™ÁÖˆêA„]r¿“-8Y§¡8œm;öM+‘}Ä sÑÁ] Ætòv±¦º#ŠOzŠ‹-ßÕú O–ïû7[x’Ïß´cò]ü®v´ú]o3¸ÄÕø®y^”Pßuß5‘á«sª gZåÎ`±¼˜à‘‹dúèb¹Êš¸‡-€`mûÔŒn ì~¢NÑë+}&¸Ö pújO6ôÎ}öñÔƒ©û„?`Û ÔNéš‚2Àô@ íÌŠémϸKš.|ö‰äÿ«Æ€ÍN°s­—‚]—8<ܶàk“‹¤I»×¯äó’ã— @&êƒ àðýì-´–/0îÇeÝ?U~mflP𽻤¥›,·À +ÿ 3–d‚äÿzN5¤('ÔC¡nÁ<Ñï½ÓêñPøÿ;[Ûl®´µ¹YH^êz”ç@…`€GŠºšJÎÑ[CéKß(öÜ|‰~æìpò=3öW’äGÈð7ówïNŽÂÿÏ3÷7¡À({ü©”NÃÛ!œ`E!}˜,º¿}¶ZvËË6\,'ã)—LÞËøE¨ä¢ýŸ¾+>ßMü'÷¹C—F`=Í»Îìew‹E¸y·\ÜuGþ…¸ågeÇ}ºú²XÞu²¥å"N(ÀOfíDÁqþÓnquwåwü ¸VÇå‹îSŠÝÙ}Yt¾+ã‚¢ûÝs·ø¬X†çµÔÅßâ“L§ÈIÁ`üûÙEg÷»rΊ@&ظÛ'OlÎæüÆuž˃î>y·è–ʸ}~¥­ÕbùÙ‹âs¨˜âoË/ÊE“Óá|x6k9ù,¾kñ•õ¸5~×|*ïX®SxæWŸ[ø®ørOÝòê.¿668oÙ |×¢‹]årÖÆ‡È¼Hò]¿uœï^à“lDøíá‹R*¨\Wð¨?þë @t@ÈÔ?ÊØŒ.°Çƒ€$ÀÀC€¾°ÞˆlµvJ:å)øóô†åÔ)àÿÁÔ´’S¬ ÈH€ ¦ÑЦɠ4v: ÿ³ª  øUý§^ß°q¾ô4ÌÐ#†·Ì€@KjþgÜ\~¤àâJ<@À‡àÅ¢ò…Ìý1Ù–|ô + ©oÊ€ Ò8à}Ô-åÿI ëëÙd¡´ó +‚}[5ÿ©1€V0Æâ0®ú ßÿŠÂ?Ç {Å6JëI™Lً¢f]‚”ú˜~ÄÀu&Ì®|c“!ìÊȤ€ xî‰y9<67>6ªzûÏýåßùósã8ÄK&ïÞý»¹Š3Qªº‰Lxn¬…QpZ°°¤ÓñÈ c¿è´]69è>~½L“›æ)ãlo¥zÌì´ÿù.›’¹>€—Ò€ç°Â§)»hƒ˜ cžœ +ØÀ!†’ôcqAä»y€å¥§œTyîq 78i‰›`ƒícéÆaf­–1úRe²(Áïåm +…”“«,‡y=}s¸É´½km•À§ø®(Ô.ß”‘ÌüßÅý§ ’/›Ú-:);5Òø]Kv\%רïÊ;ã G"W‚WŒêwL +ë@ø +é診~&û¤ÈC½:}ž“€èë4hlÞ?,£yáB,’ÍçM„ÇæϳfPà_r´€Å] d>#Ž'!:9¬¿žê‡Èô¾¶"@½­cáW\5¢ÿÛ|òØå¡ùߘAÊ–«‹#˜k„K±¨+Ö¤Uà*ã÷0¸€;ÆÌ ‡ANò¹ªÅÇ]rs"Å`$ 5w4SÀk[߯–ãÒrö,*5¼S"7àwdQ|×!shȲ.¿«ºm/µ8™9ë.p{©KÃ| J’à$%¸9ùŽ0¾S¦<±¬ÒŽ%âˆÜ]­€ ñ]»Zône§5ôÅ:I á32 M +%¦ÏÈB#ôøs  ñÿ`jŠ­¾øxªx €§_ðª´0îy + ÎˆÕÀ«ÿ÷BeGšÏ¸@´v±79þc^­Gô"Çö‡ƒÏ/.á ü3#ÀêAnp7âÍKµ!‡ÿ‰¤Å&ˆÿMCææàp@çÎQË™*þ×Yc°¶¹ ½NŸ¯5€J†CÝž©` jÿØð¯0Üáäæ+è|C4€ÇºeD%Â~ q?Ç÷Â:•G(ÜŽ;ÐBЮî‚Õºßï‹SÐæÇ úÇÆÇÇæÂ£Òº˜)… 5 «0ºÛAcã½ãw ÔQªÀlkÀaSý´•³Š‚s¿ öÍ~ñ\ç%ðáëöm÷¦‹ß?ë½íÔólŽà•ê3<ÒibÄŽ‹ (ü‚Ì+ Ê-”£ºF°ÍÅiéYÐ «æ°ÉÛ¾|…7ú²†KmC$€áa)ße¢h0Ý»º»ˆu”Çù +‰[¨u#éD޵‘uf¶Yû®·™àtXÅrBP ßÕ~‘¢Rß•îß%ÙÅÂpŸ£`'p‹7‚0‹þ®b‚G1B¯èbMJøù¾w}ì´ âÀmOgOoÏi†09Ȫðßgžx0=%µ÷SSU Кhß›Q#„Òçßç¹ÌîSL °Àg¬ÿƒ)à×(à$à¹æ@+[³1b2i(S…J?Äô@ø’$|É Rù+:à1¼üÉÄ-€ŸÞ%±PT&k øø¦†ÿdri“ +Âÿ¿¦¨i ~1¡˜~¾g4ükø¯ÔáŸSW6 ”0ÙuiË(ðÈÖeyFgÎÞ~ÝÄ8A> +äºÝíÌAÀ ÚÉxH÷! мËÇF?›Á¿æFAê:†R6Y•©«3€„8Qˆ_{ÜbkX:>ÇvèÚägÌÖ>óõ2D§À‰Ð0×ãgÀÀ|†sX\PÌ®Ú#i Oî”Äô¶O˽íÓ¤Õ>в-KS`Çö?ŒŠ@Ïf9À±k#:`FØ †Ù‡áÈ… bžJS÷§nÎø° kðãó6 ü¢¸æ Üù-­lâQËv ßmǯ×7'ß6d:·À]¸ Üç'*JšÀ.ZËøP‘Ô.?Ù!Áq|”ú®v:î슺btq$€Û#ÃC7"ƒL&ßU¾€rÊ‚ºÃsŠÞSÐyµSÐ{¨Mõ³n€°|@ >èýx¦ßbTŸrZ€j@>¹ÑX –)0â÷/¦îgªÝ§.|2s¯¦îߟ‰ðöÜ“Ý0…ÿ/¾`þÏóúÚD +Z p.p)È>ÁQi ÄjD’É#H,°˜\´Y7è¨Tÿ"gßQIÂ$l€S“µ?éƒ<¢[±#Ç—ñþKÒùQ¼§D(ä‹ ‚h>ðóýŽf€ÃðÏ,àÖÇ&¤ð1€*Í3àxŒ£÷(ß?9ý?׉ؚx,ÜNb?¬F… ã!i.Z àšÌØ(dpÄèĄܺœÁc,—çâw ‹°ë~½Er™+òó•&ýXbo–Àê6~àCÖ3üÒG¬4€NZÀ“U +:pÉ&ÁE™¡·*N€ù1ë6´·ì$úê•pT –jpQ€|šW"µ;·!°&èJ«¦l2 (gk@ÙD,"w°““¥ [øÈn(kr:2?EËÙNŠÖSQ¸»œuSø®ÂNê»R€~/Eq’[À8›3@CL؃¿’ܾ†œvþµX_U@§àž Àµ €ûðÆ̧îß'ô>hr¶A Ùç «âÿÁý§§¤ßh¥W$@¨¿.ÔGàž˜¹÷± p–Õ„^ú_FPý´ç¯ùÿÞ°€…:c=`k0È™º¥Û E€ÔäÁ§Ó¯ãEÅö2l°vø:æ) @ljÃ.Å$ø6bü/Uçš5Ùœ9SÃÿÊÊÊú›î¤àëü@ˆ{cD½~¾gî(hÄÿve‹øç„%[[¥Óu °¯š +òÃÝ +ü„?ÞÛøÑ¬È.€^†û‡ñ2[ÖÇÆBx +O±Ò‚qÁäèGó?å6ÂÍsu,Ôµ ~‡Ôç„„¥ wl÷yESr +±&€'PÐU +<§`ÿ=Oc)ÛE\Œ£,q¿@ €ÝX£+g“]"Nì[( 3¥nt´1} +€§í'¿HQ·-„êb¢pïò‡Ñ +€ßûP ß•µ)‡)€Äà + `D¾+?Ò¶«q8Âv?h0‹±÷¾¸}¶ßEð +@Æé„Ýc;ES’6€É MGŽkàÆVÅÿÔÇSOO3`ž ô?$À|RS³S8 qÀN ¸§‚øgK˜¾†?ì08ƒ€£tp˜ÎÁè`@³*/a $0½G‡ÏØ„ðˆ p ô'XyÈ‹HôýÐÿt# ÿUÓøüW€~š0€€äö«âa÷,u +€~µÿÏÿo¡,úÿà?è2=ŒM†Bwˆˆ~½{Cíˆçùi€.ðË.}LJ]Ÿ€šu‡2mØd…]âíU[Á¹Ñ±»’+`Ë` +¶èþÇðC‚<>¡ÀjM OðÖ\©W3¤,Àµ„OXÜ‹·QøD¿€‹6‡ž4*~×€†Ó’W¿«V$õ]`fC ›Р¬¸àOÄçÚI+Ó®š*]Gì4¢d@SP%€1|ï%Á§¼€ +€ý‰a‚ùš8ĪøW0M/L},1B€†¢.h³3Sƒ ¦%Û?+0-­…"`€×ÿ¯{¶ð8T4³&0ìëê# BCá_,­y…تérAöT|¿0‚¢À9B1+aÆ "" ç П#&ø'ü=ü72€ý£à¿ +~é¨K;ÿÛlRDÿO@üïc–QgDk{¦ê÷)Ö‰äIÍ=`ñpx|œ!À¤Ö\Æ9ÐØ<‡#ð÷c·ÀGóŒH ¼³Ìööv*þ4ð£ã¤Òïuˆ¯a ÏÞ~©g†ü«Ú½iòýÇÓ÷§Üg”ù`ª¿W¦‚Ńã¼ôâ +}*ýÇýùâwø€?}àPãiüÝò¢,½v9_eØi½!;pOãïÓØÀ;ÖàýäÀƒ™õI²%§Ê«XuEL¶Ôgòê8¿éi|ã{¼3yÁ_BŒcYÀˆ"ºd„›£p~$† +À´ÁNC6(€8«¬zü³«¿<üš<èÑ@Vù?“ %½§Þe³I¾ lº¦úÛx:LÜKʪ¢ºG ýjÏ—v¼R pïÁ=¯`áÁ=Ã}Qâüñ™pÝŸÕúÿñµÈ®#DZs’ã! Ö°%¯@Ÿ  Ÿ ¤Kû#BÊ€‚Šü ¬÷c‹b3áäül jaC ~Ú~üï’j  ¡é™T§‰É&a¥ì ÿ@ÿJø7} ü66>>—igE#)Gb}`*~ ‚Âãü±óû¬Ê—¹B渘Ùÿ¹Lè7€~eó&&ƨ#F¥0ÀØØp7ÇU? -?å÷Å©]i½j^Ç¢Åd’( è>±zÿ¤aO¯Â˜øïÍÔNð±Â3Œ0YTµ^ý®dñçï3¹º +bN;ÀøY‚}1ÿ9ÕuY‘¢T™Dû>ÓÄ×û3’ÜÂS&LRÄCðÏp˜w±2‡´¢ñ) w`TJÐ ¼¿°M ¨^à¯ñ1üÝ€ ùÑ<ót dƒüïdK¯ÌÜûDB€)0.<ñƒÞ)*e‚ù:Ð,S÷ða_–éé/¾^x0ÕÓêlï!´ñç!þIï¿ÿþ0ÝGg/U„4¶IÄÖ µñh5" F¢d®>Τ5é‹r”pCOK2%H-> øMRÄÛ ˆâ‡ÏgÈÀ'™#ÊÖª‰®¾Ö@ àŒÆ¾2…6ܧ¿&(Ø#,}bt|ü“qz¿Õáî_€øÿŽ\Lø×3À:½ºo—(~4„ÂÃLúýxf€ñÑ|6~&ó˜í{˜×°û'ç$`á±¹ ElC€{Å:Îá@⣣1%ÈAÐ]%æšU²I~m"èíú{áä5`÷ˆÕ©ûD"%uÄW9дR}öÇ0…9Wà¦aËrøÔ» €:ñqœp›&ÿ²õù–S m6Ä›t$¢±«ã§Õ·ÓI@e +ó(ñ½«ï½½À¿û³¯f@øô^6=&7ªdÿûïÿ‹þ>ø€þ_\>pÏÝ>$#|ñ…×þ¯1€aÇ‘¦æ—ãÍl¡à´4]Ràl¡pè¬$´9s`"fZ·бnaÅd‹6ù5 Ó€h0€^KçùÏÑÀ©Î4ƒdjæÃÍj  Pï{ÿñ ¦áOسýŸ$”ÿߦð(ÀcÄLâû– "t<‚Àïîö)øéÉ'&€jlcÊþ_AÍ‹Çû_r>` ZT +Á†Æ>gàŒÌ6>»Ëö¿:KÈ{Ý€Új +€!@ç{ÊÙˆÑ×íWŸ|‚=ð¡}1Ci$ü‡ä[;½‘ª¾”ËX Ĉÿý +àçFõöáFð6&E©2±ªß}æ#¡«:øã/ÁαPFJt*§¬ €Cð‹ ÷×HË?(€ÛÕÄi¾1?ü³yrü.(ù<|˜bgùX~nçU²6ÿqjŒUôü&UðñÌÔ>ð¿Ï|Ø÷–…Ͼš½ßÛÞÙêÀòñ1ÿïÿ ÀP°gŸSŸÈkjù?xtÀ1[XŽAP´¶^âLá .x FáÑñ×d7aV € €_Ú €Tƒ®€(Ø9 ¾_ðßÅÖ?¬ÿcsZlˆ„èÅ€>Â?ãÎÏûð¯€öÿœÆÐS>¸;Y¿ÌÖ“sãÝðÏÝÝaUË OÀϵëÖû4œ†»aºG€z•݇ý+¾tsϘQ/L@%H+#Æ,¡@gпZ  ¢eòo¢ +¨c²öïPx!zÎ6×ÞÖÖÖ‰ n3c„À´“«¦¦îûà Ær¥lj êᆯo¨ÛøÓ?feØ¨Æ X…üÿámÝçŠ$Ò + Ä$€BŒß-€pÀ! +ÀhÈ(¸‰É?À×ÙO鈴å> ŠLþ5XÇŒ¿¹(˜Ä#\¹ÚÉFz¬œVyºÀyž)‚_ˆß|¸÷Äý¬윚—±LaùæWÀ¿&€DþsŠ¢‡`N•üòë…) ue5"P/GŽÃ°pz*œ^ÂñÞd¼€ˆiD¤‚]t€Ÿ GD¤ÛÁÏùéx=çûˆPxþ…4êi¬ ÜUQ€Â¿@_à¥Mƒ^›@ÿ±˜ÿJÔûÿ*x 0ÑhÌèÍuOBý³Çßä]Îó‡]óØ AÀÏ  U€Ÿœe„ÀŒÿøØÄÿyl|R’€r*#Ž27Š‚Ô.|•ѱ@™Œ pª~Õ*(þÈð®rñ/Â×çÙÅ b°á–xF`¡€¯ºŽ¨Ù*;Ûá; {‰m‚–°•B<“­!~˜ 14À¦v^’F÷Ûýûƒ)=$þi®â +èñûÅýÃN5ùsâ +?_è?Õ9-, (—] úlš¤|ø÷@¿ü3ú yDb¼‘ž«mrGjž¤à_)PÛá +1À!øomW¿LÍü!€væ%Üÿdfê—ß|óHEг—€ +`Š+°¯¿®ÖhGŽ6½sàY~†œ£Ž›ýúú¢ãgDõÒKêR€°t²·™0ä: Øï‹öÉL”%8úß%øÿsçˆÿæfß§½ÓäÃ?ѯ²4€ŸF`}&#ПÿK,e p€ÿÔü?M3€†}Õd,¹px"b7ôáüÄã»scíàu'ˆÆõj˜ô +eT’ÿ-È`¼®ŸvÈd&&ÇÁ¢È]¼w‚œÚ Éi$“F’Bpáò³’°Æ€½V À#Ì´÷Wçg÷Å ze€ð +Io¤O€ÕpÊwn vajze£éJ8èO“|{£¸7-Ÿá¿¼À_ã_ð†?ðÊ?ñ÷¯t€§}µdNµO-|þ9  W¡£Ê§´PØSå£9 @ÀãÉ˨I6Õ~mê”þ¯™¾V3½ðÕÕ†@UP +«ûMjZꟙ™…¯¿\èÇ— M±zŸ‘þ¯¿ùÕ7ßüê>ýà׿–.ÁˆHqX‡øÚŸÜoGä¦8œ{â"t2@àI€µ—.q(6 à„tKt€à€3‰E#ƒƒ} ÉÀdä1Î/øþŸ!üÏ4Ç·çtMúéî5ôS((ÕYÕóÓë+ôk¨ùÿm½?P  øÃ÷˜˜6çF»'þ83èüÄO?¾+UTô“sÌåI£™îŸ@Žú)Ö&ÿÍä$çýæ^ñÕ±ÉÑI6Ž3…˜?ËÌ`ÝÝúß.MQÕ¯O(@…Ä?E€R 3"+S3%è“Ò5ƒŽ&Z¸ôôfîãT ²ŠÞC\ W7~¾^ã5ä|‚ÂðŸfúÎÅ@W33÷>©¦ȃtÿò}hLÊŸLë!W@ÆêüCœ°IMUÔIÅÀU«–ãðÊãƒqz®vhÔßÇ?¥³Gª*ŸÉ®{|Ñ÷7¬Þ{?~8ŦÀø„úà0 .«³Þûü&½ 즦¤}ß§ß|ókàÿ›>€ÀëŸ~óë_ÿš°ÇÙø†J|ýå´Bú!&ÐÒòΑÆEÅÍ&@Lƒ8P aàM–Œ„/ð  }  fý‚Lû·r‚Iعs(Qç…ª-MGñb +üžÀ+ñs€)ô ô½,™ ñ/îàõk”Aüúuð‡‘Hwý±¹‰ „ü(=ž‘€`bn’~=¾;ÖMÏ= èNâr´B&Ÿì1Mmáµ 6õñ¿ùòáø;€¾ùæÓoþî× ¾ùõßýݯ¿ùôâ 0;;ÓŸñ¾ ¾íL€H“w|Ï£GšD€Î1€ðŠÕœžªz€`ç#xI|ìäCøóg€8(û5øÕxÃ,”þnÿ8™FžG}@óHæ'Öþ‰Á‘Î{ª_ðÏ•;½wÄ·zùÿÊûÿø3 aàn£X&Yi??L€ÏMLü +žÃƒ“¬=à4àcl@)€à2¨d??!uãc“a1ŽâæeT®5€(V4*2€(ÖÞy  0ª 8%z¹‘D‡Bàj)%Ü›Ñ ×(óÁY¡™Gü'Ô[Ýé°ºóÈ!ðvþTãm{•‚Üœ¾7£€T‡R ñ+Ñq+ÀÙxk +@½„¾Â?@gF€§<ü+%Ϋ=;}\-, +@™(€ž¶~6oozª§Ÿí~§%V¹þ£«az¦>æ«((™<¼¾À#¹[ߢoÎolABa€_Büú¿þÕ¯~ý÷ÿþþá߃|ó ü?Ï…Jxøåçýbõ pL3À¹æsg(˜ºo•^‘•Çö¥0`|Ðu :Ÿ;'ñ]4\'FôãU¢ÿæãïkÂÇ•ÉÚäyþ¼Æ;Lœ¶¬ìÊ+±´ÏD÷‹þÛ~ ¯ýÿ+)Há¿PÔÛ„À™8eBOì1GøyLÀçŽÏ!¢—3ÄæÇFáði$477ÿ7ÿ¯¿š›Ï„Æç@W<ƒ^—L†Ïck|ü§¼O˜@ÐÞefFý +Ø@ùÿΫÕ€f +MUƒ¯`§_¸rTäYoLâjf¡n*…óý†XS tJM(Sï-ÿl0óóF€²ð1µL‚þ*„P5‰óWøÇ¢ áWUS°¯3vb8æ#X'  _àþTO/h pz +ðG¸BàuÖ “±Æ¾ó<çi9Ÿ:­I8øÐh_µo‘ÑGØ6ÜÃ÷‹æÿ»¿ÿ‡ÿò¿ý—ÿü/ðÿõß~Ö°® +àü­70@LªguNWé(ðþU GÄ+°sE€G|Uî_¨žŸ€œBñÍò8vD’8D»6!€]xX«"ó9×ùyøý^úiPÔÐÿÀ>ŸÀ:°¿Yª4R€.Ðgô@óG@vfì.Àä$>`r44Æ9&çÏñ¬ùIÜÇc “8ø'+€O¼ÅÇãa\ÅÚ‚»Ç@ +“aìb»ÀpHázª÷ªÂ=~üyóǶl&Õâ<[ÿ32 N¹êlçdlxPgò‹buÔxUƒ Ô®†«Ú8ycU£â(,r•^Xý¨c`Hˆ­Øiò[ÛoRfG!.e·…z•ýDª9|F:$üœ¥‹©¹šP,ÐÔ¤Á¯ð°¼Átö|- ¨@SÓq ”µŠ fgfAýj ®û÷™ó‡T;ëùÿ¿4MG:z®öWgn¤€/¿Þ·Ì(èíìîlïü½H€_ÿýø‡ÿü_þ¿ÿõ¿‚þýßÿÂÿ7¿’¯F +Xøüë¯ïó¿_5ßoEVýÐ"®ŸOPÀqé%p\Å’` ¾À¥€G€: €ž_­ îý}@Íà…þB*ÿ“™`5 ÿ ÇÍÊi+ðÓ42Çþ¥~ȨûôÏêÏèϰŒT©Ðÿ«Âèü½?Msˆßã9ôχÇ9ÍÇØü/XÑ7ñø§“£Ý’æ÷5?)úÊê±!» +ŽgƱž›Ÿ‡.xL†€ÍC@I€ d81HÄljÐÝP¿"ü®z{ˆhÉ)i8„¤R€—óå…ÿUeúoâ43³q€´¨Ã²ìS÷ +üòÂæòÞpLƒTtJ¨7Dü³îQ®ãå!„>Èð(?¼ ?« ïÞC ÃÓÖrá~Uá황O +@¯ÔÅôþLš° +¾‡ +@@s@ú²œàÉ\ÀÕzX1ñþ§ÉGMM-=÷$»§  ¥òƒqþý)æä±6}Ÿ}¥òºqTž‡T ÐÔñ> +Sp‡yw¡–¦óå¾EÀŒêôàWŒèýÿ·ÿúßþÛ#üÃßÿýß)ø•§| º«- ¡ü«ýu @÷Ï׿c* P§˜Ë«'€7+4Ô+€sÍÍM‚}a,-:@‚ P× +@Ù.¢e…}eÎ0Vs7€_£Ÿ]véÿ·Äÿ (ìk à7_ oaÖ6öx,<Î:€É‰ÿKø1^ïÎÏgT·õéüœ‰»wç{û`ª¿’j? Ãí€(FÃsãœj üoYÌØØ¿gg&¨¼K¤Aˆc÷~뇚:K_™ßÅpŒçñ])€F$·óC}P}Ç«˜ì‚©ªDŸµœ•7ÖU†µèå|^ëéÕÆíY>J~hõ÷–Aü»T5ü‹€ AàKK]Á¨³W{Ž=U õ}…Ou +@Ÿ¬+JiZ¨ gºÿ3üÄOÇÙ¶~°4îköþ° +îJ(5Pß_Rf¦¦pJ1…ÿ#G¤"ÁCœúb¿Í°R `~ ýÿïÿá¿ýÿôOÿ$ðŸÿÃßÿú›o~‰ø€çŠøú¯¿¾/ÿ~½àW·Z¯`¸5˜;Büÿï¯T cMÇ)ÈÇŽý^!)࡟)_ +pâcI«)#ºL`¨_+[”ã!¿ü0Áê¾EÀ +NÎß…§þEøo ô! XqOÃMÀñQca›Š„õ’ðû<Æ3##á<Õx4„ì06™™Ïdî@ºÌOŽße; ¥ð Qyõï¡x#0O?(ÿË7*œ‡CUÐq˜èª_B¢6•¨¥Plj¸_@Ô‡=üQôø "…±8*š*¼½!€Ru ¡üaûçž«!O°Ù@†#ú™ 'íeÿôIDAT°ka¡FBr´ö‡Ê4µô÷OËßS +¯üV³LrnhHRÁ5ˆ$Ø\Ô€`ª¿“3ŽÂü¡ú{Þ× o×÷\ørßðµV €~ +øûÿðŸáýÿéŸþûÿï EÀ¯ð+Uˆïp_ýRÔS|¿ouª‘ZZ~ ÌÙ ö¿³€g ?åØH@Ÿ9¼ÕD€@W¢€±±á7ñd”-Þ¦W3ÇÚBü«BP þÿãí_cäJï3O›…%U ‰»T(3éL;"U (P¦h dTåÅŠ¼0• ²²³ÜL’)‚j +ì¡XÖp[°F²äfӳˋg–”Û¼ØrÀbõ¶˜q/vV Ì`+è‹Áíf±FÏ|Ùç÷üÿç‘‘É’=»Ï‰8÷ûyŸç}ÞËyOúÿ¡d@*Ëäèi³Ÿö@Nμ;Kéù¹«[ó|!ˆ“ð±a¸,¿¶`&Â䳓Ea¦Ö¢P Cõ@ 2°AÂÆÜ·y¹`…‘àC'Ë +4mÚ›?²Ìf¢w@î‘ DÂp^ä½a%xy –åÊ‚véMˆ«á*€•fmb ³.©˜€úúÃuêÙH´ÆÆí*bNìÍó½L“€ÈÙ#gdá8‹1ÍB‹{ak ª¿¿ð]ñ•8pl2÷§ JJäwO]÷e*‰òä´âOWã¿þ“ìJ …8€ýR^–`”Ô'P±ý:™­kŠù×u¹”.s§ èA4É%ÿÉ,“ðßàoDu"ÂrŠQ$zÚôaÓ +™P{$&s˜@œ¼‰÷Èö:ö-Îú'ñaŸ!çÈa­A>û@56”«B±’ŽQž&»ò~}ô×ùÿyÀd†Næåîf¬­Òl]PP(Ò% äàV–†@¿·Ôj­û=<|>Οôœï±W¥´ @*—®€ãíi¾ ”H(þÛø,©ÙDpTúùî÷ˆþéèÿßý»g8'€ÂŸ«쬕 ÓæýO;€bt„ø»›Çý*ëO0Cˆ8Ýî>ˆ¤®q/˜Í†$³½¢K  Íd¾ÿL0Àx‹ZpÊÌ/_ÖÁ+ ¶K÷a?#ÅhçE0êö)n–C¡#oTë‘󘈭K6·Mò¢ó6ê24XüÝ%Veˆ ° ‡êÔ÷´X%ã-™óå¶ÐÖáÄy—þ Óÿ]ê‡ç0ÄÓ‰³¨Óh(q¯Q[?i‚œ½×ô9ù%`Æù° ýP,ȦZ»1¯%$Ø4²2{`f&Â0ÕQá qL+xBG, Ô¶ˆÍýÏ=Ó5øHµ=ì9&ðÈ >uáÓð²</÷XÎrµj:Wf˘ËFbè4bƒb$÷Ëœ´"Ì:ŒÕ¹è 9Û¸áï9Œ@[±itA~vTLådÀ{×ì+•¢Zì#‘æhHâ—ß?i‘7Œ=_Älêu÷ß{óvÑóÈ(Ô_!¶d¹!{-æ{ÿt¼Wòw€Q@|×½ý-ÇŽ¾, ¯©_0?zîbu9Q¿EÂ:KŠŠÐL¡x{mÙõ +ÍLâ`ÖõžILE›,F°P + =Xœ!ˆ$€…¤&†XÉéîq'X’—×R^Ñ(ñÂìô{ër?øÁ÷~øcùÿ¤!†æüõ¯d~ïÃvkE[]Üý°áuVõ"óQÎà…àÀX NÐ@Z<$φÑê›ÑA}k,Ô7ÏõXÌ‚˜ÅßrI Nì©ÎœBlÌÛˆévþ{kæj{á¿b¼Ø:W|ÐO3¸í‹ìYª÷‚ 2¨è£ ç¶æ7òÃáQmˆ/‰ÎuÈ2. ˜™Kà|¦3”;\&ÿøë¶z´B¿‡5þç‘«Àn’,š*WMh&d>¢¥ö93VõáqÞ\?õ4Q˜¯ä~,dœYž—àþòðƒ§{uï¡/zÞŸg.“#×qØQuÓÓ“GǨOFëd‘ÑZìÅWìà¨HKÝx%zrð?óš©VQ +P€5'º5·»tŽfL ö«7T¨þu`¡¸–zƒ°ØüPø™ü¿òþV€¿ý[‘ŸQ¥ÈøÑï}oº½"=ÚÙݽ¬ƒ;À´wR€¾êý½@ŒÀÝ‚ÿNüÃÿ±pDï¶õ¬”´m<ãb|:”€[hB€(sŸš<aÞü `îC£àâÌÏft­C3MÞ¡90·®ÃR‘õ,þްÁLÎ+Š3\”(äçƒh\ó£›iÄpŽlL¤Ñ|xÇrñÒá£*uhC¶fûJ ¼7UðöåŠmj€ÑJÈI´ZÝÎRó˜Í”6Å’b¾þ> §3rþH BöVì§ìÅŸ^]Äpô¨é]ð²‹YLDרÕÅ+3¢›¬2Ó™€¶6ì”öÝ×ÄÎ ‹¬Ð©Xö`„°ä¡ äU=ìoy týnw}§¿IÀÏþ£ýÜûÓGÁ( ð½ïµ›8€þînÂ;/Òù‘ú)ý_˜Ö‹@dè¾¾ã~6œ~€ù¢µ—Õ(ÙÙ1ƒbE9fy€ö¡¿¥F¼é£ÐO5Z(À¾üA'ÄjÅþ$D÷lïÃ~]£L˜©gÐhpìr~C3°ûHGε( œ²„[`Øðœší¶žÛŽ ~.;8p±uÏ?²°÷Å-i¸å^^ìe,à‘bbróÄФ«EC#ÝÕUõ„«,£+@]ÆTCq­Æ¨£§yñsµ(cb …YŠGeÃû£N÷„ˆªD1]×d,C]Ö]®wJôŽOµ–ÅH1'ëóÕææ ‚bØ€ð›¾++Ú®¼Ê~ÿ}Ç÷¢}O°&%Øä¼uèÏkÁ@¢!+ Ÿkz‚€x½(ÎßÌIþò™×±ŒØÄüüç@À¿þ·óoéÀ0‰ø+ @“€D= ]»~î?ÍFqdÝÚ–”`d ^ð2Y•å€b XžhYŽûÅ´ç¯øýP®d»à±øXÇÇ’ë#az€ —ÿ ¿2¹Ò(¸@xÉ}Ì&'ÄØ±Ú„vä>¯ä¾F™£êG† Ë9?¿È‹ù¶úkÙ|kfƒ×Ý<žŠ±"¥¿,ìeXTè€ôêÔæÔ÷´ÇkX ¢Šç¥TšB6b³/r5ïfu%Zèp Jþ'3¦8¯èMOÓb_ƒ7ö5dD”WÖ‹5‡ê>¬¡Ÿ$@?æò+àZ!…¬!EÕ¦ä +b„ȳ™€TÖËZ5˜G­B]òt(À/ÿK’þÚ°õ êÚB‘s™ìÿ5”@ãËôÀB !ïñz·)‘ð„þXŠ.v4%5,8€ÿø¿t^Äÿ[!e@@AÀÏp:5ÞÞqîGHÿÈ`Œ¤€$ u( +=ªnÅ´89€õJY ¾HÎâ4ÓÚkÄÁcâ<{Ѷ¹öH$×G¡Ìf^¿%í³Â…}ºÌ{ã‡ÊÌo¸€|@×ï[tä.Ÿ@r£Èи¹ Ùåâ;X„™O&HÁPl9µ +þO¿.¸pÁ€Öë–u7Å3aF*@•¨?¢ûAp´)-Y”Íæ3 ít®Ø´»øI$ "TW â}Ñ\„WLÿEk –jÀcp>kõ–Âg—@ +P‚ø‹Ã +ÁaTµsÐë¯w§ÝȧïùƒåNÄ9G\ +PÒQäpîÚmø¯»ÆóY[Õ^×ì”,ð— " €ŒF»Km<. `ˆ~’A`;À/~ñãÿœ2ñ¿tÿê¡kðËŸý€Rm%°Ã#âÒó£ŠY‡"5^uÔ®#üp+ÈšE-g‚éé'<ŸÙló÷F’}LÕ‘HîI÷¬¥ÀLß·sÚܰ ö*­/XœàkD»z~"8Eþ: 23çÛ‹òŠü%lÁÎ4Ê«@ÎA ˜Ÿ—ªÈ8·‘@ܧFx0?Ãr ÿÿre ŽH KæÚïC|ñß}ÏI@S§èü§ 9ZÈ6ÚT‰íI +`à[R8€Ì¼g”žiãÀ^·nÝßÔÙܬ_iÁ> #ÙzœXŒ*£¿ P8€®ÙoÐf‘î__튚ku°´¢4ùÅ}; @6¦.^0ÎCÃyÜó‰ `•z@é*û/”ðW€–RÿÒîNýu`›€@%ÓêH:'Ê´ZV/uâMü–œi,>cQ,1Ø"öÁ(c¹‰»Gß{¸A$Û‡a¢ ‘*Ú× Ú§ñ/GÇÿppÔÿ\äõQíG3ó Sþ, Ê£* °¸…%Ëç-¹ÎÖÜâÖFcc‘’¿¹¹-’[Z}c±aöë'!(¶/Z–Ä˦íö䤋oËýxlW~ ƘUØådQ‚|ñÔ½B LÒ.< Îé‘TÈõ/àMÕÌ9m¢j €¸M€ÃŒSûË @[§DýZ!@*˜þ…¨•bŸ…É3: ïÓ@·L@wk-.¾™vXçUö22fÉáã• k–à =Ù‰t›E±¾Î“œC­À€¹ ˆüÏH…D*€þHùêRØI;’R€¿‰!.ø™€|>D1‰<' Р+äh9çP<—=ˆ‡dG‹Çç¡®#fĈ/ìÓÀ{Œ>[gÿ`$ãk ú}tCHÊ!½ÿý{‘` ‡ÌCLiŒ+‘Йߘß:9³õNQˆD8wï¤þ¦¾LŽ‹ˆ~f^½y ÃÑÿ¼ ®€/†€èÏ+Y0C##ʪWV*¸(ÿÖ§øÎ¶|Ü׿¯îú®u@Î ÍÀÞÖG×z¢»Ù/mëj¨O­®Š wRÇ9í²ëU!¸'Ð)@XJÖŠØCO÷Zªàˆú¨+›ý~¯þ¤¼£ X\TU,O]>¤`Ñí{³¤ë9êß)ôQtL €œ3¥QÉo–³ìÌnl} ¦#sÎظ:—;|Ï…1‘^ü¿¾ÝžB ºÛyý;Ž›Û›K®ÿ÷·»­É©¥Ýt \¢"# ò·ûCþýܹ"P²I¿§6MñI¢Ðbœ—Ÿåºd$tÏ­®ùó!‘Ðsxm#M¿å%{F¬Áëä Gƒ—÷D߇¨ 8`9€¤¿yg*ȬöuNä¼ÒÄyT)^ [þ0Ê2ÖŽN¯é‚É«-Z]ëH ´Ë(ÁuÒà³”'K-îwFøJà<êƒˆÄØ@çÏýâ?ÿùH=€*ö¡ä”5}rÇ?dš€"Ñ3ìjw ./Ãqã½ü«ßch9(ÑŽfãÜŧ¹å ¬g˜¨åÅìªrkd>ž@ÞÁ"‹@>>©Þ€â33'i»‹ˆÞ´f–:¸d÷;7Ò¥{‰eŠñ‰ýCv$ +Tò;Í2r ípž¤CÂݤX¿¹»Û%Ú“\ÿËíUE7Ký~oY]QÍîõïÿw»dô>T2awg×uúÔÚu‹·Â`Ê`#ôA³”¢]×`mµ›õDÈj L.ñ'ÎÌ•…5Ò´FQP01 £þœÛƒ‹QvÇF›çÄ<õÕ1ñr±Û×$ ËH)À÷k¯öó{Q@ ^@ç@U!Àä$Í/T€Ë] V]qM¬_¶X ƒ”²§çï„E}éL°‡2ÏḠΓ ß #Îft&  ÛüH9€õóŸ<×LЗmˆ:¼rw'RëJŒ"¨.¹ç¢Ìúåäþzoå=ZDåEýº( ­ GTPšÈ»}„½â¾ê‰IrÖ$¦ý3ûéÊx¿DdâÈMCYŠßïç7MÓ™ÙèÞàÅ}fºr Ñ{gvan–ƒ›½>Šeg±3á,~Ôv8®EÄöìAéö– õì-Ú·%mâ €v§»Œt§§¦-¿ÿßõWZÍîʇJ(|àšA;;ÛÛ—éù‘Ë›†äFÀo,­Ô³6ÉÑb$Þ’‰àá96Ÿ TWàóÚjÅ… KçÈ¢‹ÆuþëGf¿ µDÍ~‰æ¬JÊüm§pO¸dÄ”ÇHKy°õhpÞü@Áw¨æõr.ˆ\8¤0ÿAá¬4_r°íŠ”úÛ= @:ݤ˜»s˜ºþÎð×aêñÿäd$ˆžý.AÛÚ¨?AþG‘¨.ƒæ›Ãy|KС‚ÇÈ€ÌI¢ÓÊ ®Æ£Dûöwg-ì÷ÓzŽÖaª@´Vl¯¹Šú‰Ó¡óââI¿üÇXèðŽ@gbÁÍj6o`ý7H+X¤XÕ’1;7?ÓˆÕ ó_°°õU%À÷íÚ#@ÔÜÝ=ï²è÷X÷q‹)A%ãôàÙ%ÓÎïõ¯Ê„s¤*FŠÍG@»r`)Æ=s/ žù§³G-Á`|Ðl÷7•~î†p™g‹(·¨TsÁGé<…oiȯ‹–µ+!èI üJ;å†sË—ä”t£ô£>† U¾¾P:’Ѳš»h“q”p«áŠªÀó7É}ƒ—ÿöo¢"_-vöð…2W²Z‡ ö@çªØqwD™$_H=2¢lñuÑfy\?UϺ^C“Ö~®)þ»p4L¢°ì$߬ÐÝüÂÉÆÉ ¾¤gü‹sæiÙó[;óçæ÷ûÙKˆê6 +JÚK Daˆêj€ž¿±±H-@7@5ÀÈxXœ›™ê\ud?§4„w¡U&8l‘5‘­ÍP Ðr"ø&‹ÿÓS$Ÿ•üŸ&…U¼55ÕÞþ§ÿíûýÿ[slrªýÿ~§Û,¾°ébó©i=ì‹—v?¼ÿ%}ê ®œ_yÏy2K£²]wf .¨Žš +01îG-úó›òÁüäQ ÓUrnEÁ;hJ™P©¢ºÙéÙ“º$…xUk€z• ò%í=á_ÌŽžb‚M8}PÀQêyñ  ¾tÙé×kMP +à<€¾_´ÒÜ #ÈT@ GDzÀ7Ú +ÍPRi!B¿üI8*8üw¥b‡GÉ,Þöʃ>îŒϣ”íìÜ"Àþ­‹ŠL†Äÿ[Õ\ásò»ÞpÉ~á¼ÖEÐWS|ʼnÀ6´´Û‚ì Kâ× Ú*€Þ? @ð^Мbª®»$ñMÚKû–¼Fà ñ‚Ký”7ïËž_ê«V؃LLh%o‰'8Œ§½DtFœÝ‡5óйÅÅw&f¿ÍŒ%¼6ñ=™€šE–†± €f˜þ50eó;ð:_ k¸%øîö?ýï$ÓccÀw€L Sb>©¹r~øP +ðá‡çy,š÷žseɬ­kíQÃ<¨ù_ûrd™IÜ÷;e­»ÖÎ~­‚ÿM@ô) UÐ_ý2ó`¥\Àn’µü/ZÜᨲ#“^¼IŸIDÌæ¥¥Ââ+ `Vë6$ø‚!ÅÑ ¿Nr­§'%Ò «QŸw¨=ŠH9nì¾è%åKð) +ÁËIá +¢<¬«^8^ÛGÕuÐ!"Àsp³‹ß^˜Ûš;IÝCªÿ%´é|gbf+ZŽùê-vÆÙnÖßq ûhÌlPŸ(ÎO\ŽßÑHâFÿ¯‹äõ{©GÇ^V§U&ϯ/Ëžz% 9íÜÑ@‘¡£_tczjú„ˆÁ“¹Ëv3“ŽaŒ£#õ0èh°N99b/›†ßñ¤‘â½²cºÀ¢3‰’I…Däüám1RNÖࣛ’öJöÓ‰ðrM €¢R¿ö Ðz±¿Í–‰ÁËótÜ €œ*áÔâ£? 0LÀÅFæ˜*"Ì’(‹p]n>&"x~¼öÝ[ãfn#fß¡‘àØ tµå®ëüˆVÁýU0$bþ7äFAÃô×/^ &•¨Ó_s+ˆËK(— ;ƒ¤¡b£=¢mÒý\s€QÃp)‹Öm°|pC¸Zƒ¥¥L°›ê<÷í꤯J5þh°þ$à@Üïï«Wç@ì\o‹‹óNPihV|ß JàD¾·ç½ñ:ÀUéGckqÎ-»Š¿–-Ê'œ,¾¼p~f¤/3´â‚ïQÈ(˜u†Â­þÅz„:i~£}œDµÆ±éI³‹Üó\¸4$¼|ŒŒõ†à3 KxBSfUÑÏe¿6 T1Œ.'w?f1ôòX’Ýþði ¢Îç4'ì6íÔ5g§¿Û7é…Bg©$ò4œK¨{ß*·ƒ!Üý£þôú~À + ²ÔòhX…I—Òûn9ºüòÃQ[ ¡Žãt—Z©ŸýÌ­§$ðè@%MÊæ \=GX ¿€Ót/râÅ[àºÞhw†ƒPl +pT2|G\°„àštž÷ë`?îñ•úµ‹[‹&n &?²;:&®e"Jæ6:#Ú`/â³ð™™… Þæ¥AТp(%uQI€-™ˆÎâ {…EIÀTãª÷.ä—€gÆeD:$€¬Ay9r + „ö·"¤><9¥_IƒÉɱÖtÒR‰–æv>ü²wgÀ‘½A¹ÁGˆ9uXP` –—«ÄîŒê¬5âkôÐå‚1™3†àå1(ayÌ +uþCø5 €‚TfìJ¨àŸÀ¦†7¢+ò¸ô±ff^;§ÜnÈÅ“@»f¿¢¿írän¡Š=)áËë ˆZqþsALŠ.øƒœ´¦ +(è´/ñ׿Š$@3²ëÅÅ‹™ˆÐ{€˜º‚.:Çû..òJŒÇ+?FÖÒRŸtq¼.“>bÀ6Ü®HåÐkÔu“ì{pÕ€FIÞ%ùS¾ ?}ý\Æ.Îæÿ¨\ `læçæ&hÛÃ;€æ…y€(ŸÃ[lÌm9 @ÆÇ£’°v1;®„°n‘jˆ€­ÙYÉZÄ(ôìKV),ÄL@‹KÆÇZhÖ8r¼]4\ï0S -g1;…A³êïÏãlˆ9¹–Ùï-·.¡ÙÅ’j4ƒ7»òYŠq ƒ„ µõò½<QsSŸqìUÚƒAþ÷·×S‘ÐCv) «€vŒïÈßÐN€‹#›Õ` >6›ý÷©UÌÛÖvLÕ’v”€1..t-*Bžû$Ÿíˆ2=âaÔ™ŸÙeBŒ["pþüêç€Ä)K’ú†nur"ÎvqÞ…‚§ë0åÉp¡¨óIˆ ¨g}$ë|Ð ßXµ +зU’ˆP@ªã°¶×ßÍäû ò½!œ¨“˜ŠüÊNÝb 0[´ëË2²At.ˆÀ‘\ˆú}±ÞÜš›ùÍðrÝýœ\Á;¨dºû5 EêDQa™ ¸µ5K Í @˜’W +&cÇŽÝÞݽ´¢'?9>ÕZùËó—ßQ@ãîéÙUI%NŒSxr†Ù䤒Þ$ÿópb¨3 ÉAÈ,|?"=oœÛO±¹n7ñrÃbK£á6%ØÎ'F`BòWüR¬GsVFÅô§ƒ?¥^ܯòìuã†P²Ÿ®î,ýí 8€ÜZ`Æ‹åK¸Ô¾KÝ¢دDÀæ:¥ÿ´¦Ij질‹Öê~H®´¤èþWÀªwÿGžÜ`Ç>Û­©ññÿøGþ40 +ß“û øOàÃ×£qžö`ðû…QM‚™ÅFwG/¸Ä_Æ»”°ÑlÎ8Th%!ÒB~”rùÜmD2Àþ‡Äï3{j_$åK`ú+`Ãð=h_Á”êšÉA_úvç×fl ¶ ²Ðé\Õ$±¼¢  4è5³¥•h  ÞÖ.ç~7 ëklqfx÷kÞõVX*@öïÊr»É+¯i½Öû€Vs|rª½þ—ÿæ¿ùŽîÜšÝe2ËOV7Ê +ˆ¡úq |Jö7š´ÖËcvñMÈ£Ùç Â`r÷s/á{ÙÞùî„ärS¶¨Ã–V€hC‚|«¢Ãò=ÂJ/6rÆþ’€ê¼Ç0+â&=ŸGÒ¾Bÿä¤Ð=…{r|v×¹ü|!v vMλ—¸. ÏAñ?%-שL°­(ö¬3ä,—ºbM<$@ña|Ö•ŒRnôPôÑÔ#ûñø£Ÿ[þš&€kûIüüGßû==î»P€$}‡\±ºþ <]rj‚OÝ´Þº0Þ>‹Ë6àyÄøŽî™”eÀ)l€òŠ$#±?’÷ I_/ïì¤¿É´× l‚Æì\vÊs5ú-ñY»[ýüE  ;\žÛX˜_”‰Wúccë[[Ò€­E7"?21Á^½{©ò"ЙŸ]\øÚÖÂÜÖï¢(s—|TÍ@ô?·¤è}zºÕ^¡5ÒQ8€÷ê§šïýå¿ù¯ÿ©Zø§ ¾‘Åbݘ2ÿÝ… Ð2/üŸ<>Åg ó8€:žµ~8oÃ@)75qbK€¬œd}ÍìAÿ kð.åEKHüÌ~J¿£+çkç_I䈺4vD1€¸B1`å Tÿ£J ™€û +€ø¯£dǸ~y#ëà‰H·Ç^~™oþptàà¾á—õóŸýðÃïR—¡’`ySèPòߨ› X¼õÔnwºúQ¡¿¾é„=q{€Ô=o‘Õ/€Äœ¯‚CÐa|$”õ@ìÇ}põ[ßò;;{£~AĂЦ~Dþ¡e)€@i*8ú_œ›ŸW,½±8+rOPdG >7$¢kã[³3í°¶,þÌìÜüÆTƒTE8ZÖº  ’ý[sïn…ãÐÄÌ G–0"P(:¬öÚÍ•JT·¯ ëp¼wýü§›qShØVqs^ÈX8… +”‚£KG¢¯ÞGÅ{ÎÊŒBA(rTò¡.ÞЛy½à*73e M|áE8ðu†nk*ÊAÎ!i_ºþêyÎ@¶ûìê‰ÿ‘èfLhÀû€ø/[$5ôžy»PWæ'¦¦ß%_Qñ}„˜ZÑ)D!dݘþœ½ÈÍÇ^>úÃþ  †R +~õË_þBðÝïNfùð‰îëO&ç^ì€x`ÅÌH½Ü Çækëú¦Ÿ¾†ëõB÷÷cOóï_Ä~aîolÍÍÿaÀ2ÃÔ·¨—U)€`ÖtêSö[[ÎÖÖÖÕ­oQ™×Ä¥!Ïù­«sW·txاç!cJÀÿyýu0ÒïŒÏS…XÐ×å(: [W£•`f„6Øq3;í©)§«"šÙwv/)"ùÎý¿SŒ\—“ *’®évÂþƒ ¨HEÍ1fi¸°ñ°Å@€hÜT&²óvôKáð–âÿñ1­‰†vX:äŠxß`(~_X(¤ãÍDÚ%Ûäå—¢3¶¬w…°M‡6 N¥Ž ¦ÆvÐ\eW¢¥êå襞 <’€€¯‡L@Ø/òéÞ] +ÊFŒ˜™(€$ØœÐ?@@'Àk:Z"W€/xL'úƒ|ï?þÙÏñ‹¿úå/Q+üÿ%£ÀøÝß’†%íIÜr´ŽCÐ´Ö kUÎÏ%¡çá&gø ½Íµo¬}C‘ÿ}ñݼç Y5Ìôœeãå§oåüVÖŠVSöGÒ}p90Ès;°Zã?k3‰Z)€ÀÖLî³€Hï|ÌÌ*‰ñ52'äd÷ñ‹Ý"¿öbÎÏŠÙú#-ò Ø™m tj’„™‰ñùÎ|gîêU¢ü-j ËÌÍ|kqk+Ø/;v48†ën¸Úµ|4? +Yxví¿?C>ëÔIªgN4ÈŸMB(Òoe:.‰]#t!Ä/Ó„bÒBg«Ÿo–·&A›Üýy:·÷¿¹V >Å€ßû½ïýèÇ?–„ˆõ¿ÐˆÆÜÿùÏþà‡ßûîoý–Iðß@5§Ñ#4 +qAùÀt}k(@>Šjàµò åÜ…Œ™£mh—RcÕ†¡öbú($í èi‚f´Fù‚`®XõÌüÁRÀÄl«è:üfÄ`%(¼'Ÿn–ì?³~Â/ j7¼ë‡Ž`ãÝ€ÛúÔ¢PˆÎìÉ ©‹~hÉÉ r¶¾¦c-PƒHQÿVGòP¥Tæ¨y¿ÆÔøËŠåa>ïdE™Ë O¼§ß]{Þ—X^ þ+äšÅ6¤¦Î 3  U öV ­cÛ,>¨#ÓSÎjÌd@h§U8€'îÌü {BŒ†°–!@5 p&y_"i_aU \»¾Üß¾¨žÉe°3SeÔ?g ¥Plî;C¯‰Sq”×Uf¯œ¡wïu¹sÜs^ Z‘°Wût€3Œ(ØÏP-ä»Â÷~ðÃ?ø1ø™ícèþÏ~üà …ðVJÜ¡#°Ÿ”7}y¡z^Œ0Ó1(00ñ÷Dû0öÆ?Y]æ—Q¿Áòb5¯©Íë¥Î”ísÈMCƒï– ¥J¢é¹ $@=¿áç&$ÎÎçæ“ é4&æ\.©£ÊJLœ|wöÝYÚcEòá?^"~?~S¼}c/€PÞªt…pL•÷×HEüý%Àd„Æ„Þ(•‰9ÝÎ,0¥(C¡?ófrZÆb Ÿ*72“v-.-Šàß)ùo¬®±I NŠÐ3lb,a.ÿ¸èÕ%ÚN®!)“´¯´¯ÐmL‘ÐNív܃ $µȹðÿp|ÆIËË"†‹T¯NO§*د°¦µÓ(ãPä€Üi:íÛê5Œ\«Bð_Rÿ­‚|€ð–‰§~üãÉüæë¿ùúë¼ÿÁ%?¦šðk8çò£½¸F]] rÞÿ"ð^B=Þ7‹á¯9\Gíïe¬ë˜ÜS +`Ðò°´AÄ_;È컿û» ¼ ÀÊÐÝå¢ùUvÙ„Ú³7šoœäUA‰oÿÈ½ËøÏø­FrD~ý„8¨ñÀìËÈïqÚbšáøë,gÜQ:÷A€&´yËg9m øôæxZ€RbÑfs:¼ƒdbÈß7À +é(6"¬ÀàjàÚö Ã…P g^¢,[¡À ÷VÙõp&y_ Y_C×@;%poï ;À ‚éò¸ÂAŸòl»"`Î.ŠžKqšÃªòkæ¿+./€t¼ +°Žñ‡ÁvŠÙ…óßý½ï‘ðá?üÑüÁüø~ô£ýP¿’ý…´49´Oë.óš”vŒâ;Ó0iê§!øº…œrÆrá^äòýW(Ý̪à¯ÇèˆxºF|Á›Ur«ž÷°§À Åüá^%ÿ½¢¢wÇðâý„sÝæ¦æuè Eã©P ¤¼…€h1 + Ð@SfOòê  ,Ã)hVNEÀiýƒþ¨?€¡¼¾ÚäÀŠäÇuœz@ºÈÉ'!”¦ÇWi¹ÆhM*˜àåÄ÷‚“Ò†ãcÚNÔæ{&:,¿&í‰ ‘}àãzìÑ'!Ä+;לÁij"ÁM¨J¦Lò¾D²¾€…Øé÷wͪ@áˆþ…œ»¯€Ú›OpsÓupš"—€¬B]˜þ4|Õ]i+èýZ ù4ø|÷»†üà{ßéøž&?üîo½þúo¼þ¿á—A9æAàâ .Cç +¤À÷”¼|ÅœÈy=/*aþÞ§üsÁ +’%fý:`²TKYk~žŸ'ê=ïho)@¶øU‚\òàø›½ú{|ç[¾žX͉j>úµž€·5³ÚjFDz>¹ €hPŒ…d HfXèHÊ<—Xœ àü>!¨ šumõÚꢮd˜­P£@0®ä¡ Ü¤M<îˆ<Ë2.ω,ŒæLr¸7t圚ÐÁXgÆÑcÝ!Ä¡ëì/y_"C—ƒY·Õ˜£MÁ:àL?‘¤¯C ë|,‡í¿ +0" p¹k¯p\…oƒ!þÛ#sf¼aGV,¬+ àÖ+ýÏå) PTÂÍ£… Ðúž_z%ÿ3@ø½¿û½ï÷¾÷{¿÷¡F?dú»Jÿÿ¦Ø/d’æ`à&å*\ع|Y·'\ÀœEcN€Ÿu‚>³ +ø9q[ªQŸ,wWÑPý˳=ƒ›³æª`À¬5gý߃¨ë±ŠûŠþù±t°7²`@4:/Í{¤xQC´_ð<ýElZ%ñf^CMž;9÷g}fÞZþ@¢àqýµ&¥q@¾9ÖÙH²ÍÎvÆŸ yºAÜò¼‰* +Ô +Ú-,¡à@†¿í~ƒvË-û‘Geþµ`OÜÈÛû“ Çpi´K„Á1§VBöÂç£^žzœf^p¸9Žrû¼ŽâÓ¬cÿG ÀT‡JkÚíítÉGñÿü€/2ë'ÔËùä»>6¥hˆ»úȉO\ç¨ ùuÇ,Šüµ‘{€ÍyßÈõ)†¹Vàÿ±c¿™HB Îküüùßú.ƒ˜£ø_ø×_v15ˆaú|}ÖY$¶JS}ÊÅ%ª9!’o2šº9 +mר†ÁoÃ0_ò7WáÕlGþÜOÓj½d7ý@KDX~ó“³Úg¦!/^œ×ȼë +eô/?!@®B4 +çtR|Z\>ÇJùXœU²Â‚¡”Àl§(QÐ*Bœ´â9|öøÔ…4Ë«›EÐ7E*Àð! ˆè³@0Í ë-dí™ÏÓ‘069M ×£UbGƒù.È­æ?y€Ô4õ®õ—ûh54ÓÖ+бö‘ëRœiœn^ˆ¯—í-ƒ:b!‡­ßãU‰I·Ru{@r¾ŽîÔ”ÄT;sðå`ͨp‘ŀǦ¹¢"ÿ?àz®yŠ„ð×…ý[Êo`¬ p°ž\hˆûñËC"ùm|÷üw ¾W @)€×K0f02°7€²´1„†þNÉ&U(¸Ÿ4¨T¢ ¾—Ũ`C6a↽Á’=X,*ð;6G¸ï¼6s>6/öÁzAèá<€XÉ8‡h˜2ÿNl*€ëÚÂÉ¥ìR„y@©~²Blø/H)4Ô6ï: @@}KÒÆÖ×åtbmF@SlæéWu˜?ÉÜÊú'©O”Ìnu2#?@ðp¹â+— +y€ãÇå2‘×–…І›‘ôô9z äõ€‚ÿ…˜øê¢Ç@ap³puþ£ÉüD„ÊA´&]L»ßpBýœí<€cSYhÈæÕßÏ<?(VÔ +º ¥„ FŽ}ŽÉˆ@nx”´Aÿc¿•ñ¿ üOÀÔ ,(@¼ú[w„ì-ûßAÄã¸qVM¥ApcªƒI@vXÁU½¸%Üò n±:àu~ ˜}ƒ0ñ ˆUó×¹o˜Ó°Ž.‡û•x©f¯jl~@bÙ¹mg~QIÛ)@†àà8V:€ù¼›ÀßíÌ5$ì½Ãg àj•ØÜ,üw^@Ò»@E*ÀÂ\.#šÌ‡Îr²°yÀd…ý._&rR~Ø”(À”L±¶H èh òéˆ.Rü©Q>'[ídóz@ð´ ö§“ÃnŽ×¸XSCÇAôiœ}(HšÕ]¸@ìÎidqbjJ¿é©ÁŠ@ºÄë!qs\ë×'È)cÓÎõ\;“0?ÞÄ#0¥½›ŒÉ´RD áCª~º†Ã5ª+¢—Dt? a +°ÿ(€õLàYïu“íöð»0n»Ï§ÌÕ$¼nßô.à;jÂCùÒ/Xš\<%ýñúËÚ¿`Û |Z˜U%’õ58QHâ€Ôf°GüSOTcG£€–(6¯’™` ¸|¤ Pw¤" 0à¾.¹I…á¤ù-€Ž1Ïñtb +$>_]òÜÖÕ« ì×ηçfhWdk‘ãófÁÖÆ"ÅÜ—êº;³óêmÉ_øÔ¢‘¢¯jQ•ˆ*ÄcãÇ(Ÿr»=ÍÇÒÈud¼ÏH…à¾1Ì3^]Õ+5ëì§h Ãç,d§8P¥ØIv)~€ÄïÄô‰ú'S3À`8úæx7í×";]ˆÖd)ÀŠDÐ]iýëybÔgä©ôëÀç·ºÖ-€™.þÃöœ€Ë%5Àå™ÿ„¼ç7ªÀöî…Ý &w âwd“'àäÏKñR\p>àÒ‹ÆûƒŠ¼éÔ±ÜßÙ½^( ™ŸYÃt³¬SûÔæÌ oæÖÖ|}¯ =V×°îf(É ˜;GsÆ"Ö,ˆ¦•yAàêM{PGsD-QŽü²C¨jÌÌÉwø#F²DëQ§ˆ„æ}”È@ÄÅ…­ÅùtZ{C ùÀòRä.¶þÉà7 -; f·:³W7øFAGÓç´³R:ï ”’Öf?\"ôu21F8€y8a€ÿá(`#z€dAy”î +ýCo† À€€’ÿêöÉ 3q¯Ã(@†*øO=¾ ß +vÀ}¿>WR$€î‡H ü/“ÆZ×Ղ܆NРހ]ƒ1eú8€ò«#À€ðâ¶­&ÅIíŸÇz0 @fÎ;nàTNt¦»5,®dÆ_H__"›÷ g>—àR]¥z”þ™8׉*¢ƒÔ‚®ø@”,ˆ$Ë@ÈÝÖð*‰ ~À¬‡Fîià^=KwVYЙßÚ8·13#ÇÄʈï% ß^ôK¢sB:"·#G¯ó|ïÌœÔÁçß™çw:ïp€YÅÃqV\\¸ºØiÌ;p®;€w|¾:ÔÜÖ?¹ºprØ,ÌH¤Sr»€š˜·Ð€:öc õdG€q€( ”Éäy€“"ƒ$Í÷ã.K´!¾=ô¢§VJ€ùA’ÿƒP€øæÿþyêZ½^ùŽ@†Ø¤l:"+Àn™Ûæ(ð›ú'S‹<_½£v¿\?=í ™gˆplèÑë"ËKíɦ[Èï:‰„HæNËw`ûA ’{|/qú™°ŸÀÿRäxÁX +——h@;IbýW€\âþœö;ÎÔ“ˆs©Á¡A~]¶^ ã>qƲRNÞOÜû+Õ}ßNÁxЊ¡{Äúù ¯ Ÿ½’.ö:+CGñq:­8Yµº¦®þ£‚ˆ§Ã@3µ!ezbõ;¥ÐîÂ(íO«Aƒ€æFê@«Ê˸=²Qàª@êÐ@Б°ØT€ð§ +”v(€öQwñ4÷ɨ 2q“ŠæýÐV{° UÕJ¨Ã +ä/†¦~ ø_)@=#ûæè4{ë¼òîŽøe!ÎË.ø¿ËçÁ#@T#†¤PÝÔÔ‰RìB&ÃXê`³|ƒö︲ª6€ølù€â¾»ÜëdK0ÒX™|‹†á×mq:þææ¾ðzòúv\"PÄÿÔÓDF%*`Søä¤d€Ÿ…Tîç`Ô­GD(Òƒ]Sb?MùÑ{!³¡âs“›KÛK²»ê‚ï€X„tcK6ü¯!¤ºšCÑˉºÈ<€pìÐ`þS:€…ÕY€7´íj €¥Qbxžy$Ç•4XìLh$Ñ9'ö>wnnÆ γ³¡ÓY¸úíoG£ÒEþ‹R$éÐÌ C[vffi…p¶Ñ˜Ñá¬=:—5h™w½0[T_ŸÖø!È# ¾^æ­ÄtÙ¼z)€ó†s +À€‰àÿ(P£T€ýóI›•7å‘à\(€À±ÃÇŽúÉèQH¦y`|Šª €ÝäöVËWèSt§¬SS¦¿”@¬Ó?wZÔ€ìüèª^ #ÿ€n›f[st-Û.d“£Þ”þ±CQ«5Þìî~¸Ûß)`rÌ@£êÅÅ‘FòÎx1,¡¾¹ÛÒƒB¶õ|ª Ó|R ¯™þ$} ëÎ +Q^ˆˆ¶¨UcÌÒ5Í6x];‡çü-ˆ„b ÆX»·:3’E®[ óó³óä̉n"à?¹º…hÎÖâ×íé÷.væœÚ•''³ó|¼Ñ˜˜øòø„‡³ìJ€ÄvòŠÐ© xŸÃSÈk~Æ- +-vÞì’ž«ß¦ùã‰--Õ4Ímù§”¿W€ƒ7f& ™Æ'ŠƒŸœ·Ñà"9X a/±¸puák‹JD¡uñUî‚¶0+×Ò¡”Õ2È\Ý¿¥ÓvEJ_^ÁïyƒüO; 0aØáÃý$?þ¿ÐŒÊðqaÐ,ПIˆ@ZÔ÷U?j=Œdê€`ö(,@ž*¡]ƒ%u€Ö˜B&དྷ !¼g%æ^CÂíÃwÿƒøù|‡†@åpÚƒ²\ÿ[ýÝv7%¹ì°ßWê|¼µJN›õt[87ÔïvèQy5£å3ž7õEûHËó1ÚüEZŽKÒÄ”å …r†®GO^—´|@·–I€ŒÖ ä{5ŒÌ1»(ð:²º3²AyB.Á¾˜»d‰7ÄGÍ\èœS„ù–'P2ú܆¬úÖ9ýíË(‰-¯@~àììÉ)¦±óâ  s-›a!ÊC7N:Æ îMLœ<Ùð'}Ròú²ã¦ÑÒBKÚZº È~þœNkãœ|¼xºuUg"ÈßK( î»:øÆ· ÿÔߨXØúÖF¼Pè#K%7¼hÐAw¦NêèœÃø8nDç3Î ^[`ØZPov†tBTk.U0÷)Ìô¦Ì=‰¢4êU%ãŠÿkyµ‚ÞЀTÜ7†ø_â›ÿûäDDRwcÇÍùô›) € ­ø(¹€C@Äö³NLcÁA:XOí] RŸÝäž[¥Ñ³Î^˜…ÓÓÁüÉñBýã½k°ipŒÏ/zµñÃ#@÷mЬKF8 ÀåË—û¸€‹³pî»»¼ªt€€ëæ/ŸO£ÌÏå~E៖ýKØÕíD®:AR…œƒ€g«ÇX>À!¸DÈ@ûb„è¿pDþôÚ ¹‡œ7€Åꋊlç”'žŸoÌŠYç42§9ó9hW1ê´RŠ^Ç|T;oðJO?Šõ ½"Ç””aØ)× +¢’ó&²66fÅäÅ-%BfNÊä›ç” heY{‚wb?¢µÌ½hxàéiv„ãÒçÒu"š¯ƒŸŒ ŠFBWlàϧPBMª H¶¾& ÛP:€¨Vå¸~af¤ šòIu"yðÜI)@‘ÐV3V€ÐB’ü À€úî©‘€ýwS8€IÿGX€ø:xâÌjãËÔSÓdÖ3e$ŽõÇljÛÝf²~ÚÉvž"ççø# ¬&ÞOMV`ÄN%"l/Ø^DüEìÀ2à{4€9€åNÍìöÃ=Œ¸~}g µØ½àSä Êêޙɘ•ö`Z/µ¢@n’Û|J(äþúè‘ ÑêN4¢QÑÄ)¥pÛnšcñê¢èT¨7ÛÃÄϼãñ˜ê¯‹p’€ µˆÖ¡¯ä?ì'Ú…@䢬uÇ{¾ v'õ™Á l]UR^îCÆ^ËÉ:L=Ó~ O )Úcƒè|£æ&÷ +@éîÂ\Œ÷ñø[LRñ ˆÌA: À¤Àä˜_‡"z¼#Nôœ ˆ~¯‹è^0-N*fnÕ4dêÍšÀœW(8ë“úCò™ÙλŠöM®R]‹nÔ¡0HdžàY¨;˜íllÍ`õ!Ãç®eOéó?V–hÚØöc„ìïN6¦ø0¡Xk o0-€“"‘ðµ…­¯/ì“€íØë + >@HjXå8ƒ` ?Ìg4% É‚ÿ{Ó„Ê*på˜úú·«<<€á­BfêdWaÎp»yÛÜ1 JBe +Àyâtsz|Œ¨ÝÐýp~:c.ŽÑ•_áC ¬Ñœ–')ÐÄĆÁÿc“Ël^#:Žy‚{¾M@³ÕrUäï_¾¬‘ÍVwû: + @jýƒÊ´‰é]PRýØßß”"HR-ê:áƒùHî=á;‘B†&Ö××[nœ¦É p²¨®šw Ç8œéLYb×;@¾ÙG‘c̰àH¥˜å$8Ž1èN*Öæ7IÎÀG ƒÜH­@©%öËèhf‡šÏû8€ÀßR`¼tÎ Î7è_ô„$?(ø_ˆ@rÞ#1F˜Ì€ÿF§Ýzë $ïKl6§¦€Ànðp„’À£® \€ÃGÜÙ•Æ’Ä¡ì&š½“hw{çVüU‡¥s+^,ÍPÌ?56uF¼aP:€€Ó9§Z7*Ám£Ì1Àn¿5ìª<y€Êlð@_àƒ.Z1uÏZÝC\Býoè>'ù`è äì+çh‰\ï X`bÅÜè (TعÀP7¨¥í<€î¥ CYBåj{JÑ7lƒ·(•[\˜Ûšu.½˜©Í-Šƒ†«ëãž\¢¾ õ½^‰ùÎÄ¢¢SQÒžÄ2Œ¿<11þå—þ²óÅìñqøyrfÂ/“))ÌLPÂ÷5_Â<¬Í5S²2K|‹öP¾p²1ñòË +–‡¾üòøøDº­åRJ +/a¬¸JY%µ—ýþâ‚F ± ÅE]äl” þA 1áÊ1$Œêò™#·LC¸¸ép¤°)åšžóë=á ªœá‰4ÌƵØÍŒ…ýcþ¬¸©oÖ{õ<€=ÀÅ€ +pކ.×€Iî’r<Wµ`ìK H¬@ØÆ oíå• +À± +°¤ÀQ{í~jZ™›‚ê…—®áÎ1W щÈ6S@7D—@ca*€ãIý༞ <7É/ˆÿÝtºQ[®ŠwZk¾®þZ«•ybúå]×½íµ4#àú®8Dd_þIdí! ¶b +òÇFê¼me´j®¬‰wûˆåvhý +4»~OËym9€KC +à•BÚ8ˆ­ÅE9E…@8 €|!°# @@y¾‰¨@ØòÀås'g¾\sÔGBæÃü. âÛÌhfg ôãÜtGL޾üåtx€âz ¥š8€ùÒ,p\·ìÆÉºÀû¨ÿwÍX¦Âû°˜V×<{^ €8\:ñ\ áÍ×jf…جÀq;*ç¿\s¶F»Ó¨ _Æüú3´ š(€ãxøO€¶Ìà É}ãØ$ê†Àlq› º’ý|û›5-`1Kà.hLƒ`R:`ÐÐìB „i‡È` Hê[@°¶p!vbt»H¬¶[ãÂì츨n½µ°»Öß½ÞßÞQ:¡À!èYþÝíCÖ˜]¬ów¢tjqä nSãSÁŒ=s³ï*Ê, -@àâźä6âœ"LEëžØZüZÍ,à‚€H8bÍÌ‚t_—ˆ(nh•Â$Ã|9€ã욣͢t t’€OëØ[8‰'€›²ŸP ž°°p5JöË@&÷uËÑN^Íà|§›¯#’€h ³p`»™ZÇä 6·8* ¨9`0 Wî7­Õ QupPÖ(€û[Áœ“c/{‘.Q;`I¨Ã›ú ÝõZ!Sc/#†S8ÒD~ÉhȘêÁ÷ñl#% ÙïlT'Öx­QqûTÐë( €¿Þ>×jMµÎ¹fÜw|¯.»€º¨ÑßÜÅINpÈMA{"ú_ oZ‚ƒUy`ÅAÂd ­F8òÝK.öë WOOžÜrÍ<^ÊQR,nÍ:-XÈѳèÌ“&ЊŽðg·6:™EÞ Üò°:• :Å…¯ÉO#â/GlLH +0üoÌ}yœeäDˆºÚ^ÿÅ™‰w´³M˜úl?+ðµ‰E~gBžœ˜‘ˆ¼ïÒT,ûRŠL¥l75{`ÃAí9€³£q—ËŒq`aaCŽ'¼8ÇG€6Ѐū €ÁŽ1!çÜ€A¼Ô"Y°¸EÂyíÁsA§!³-À¨ ,rNKÇ¿ì<€‰“ÿç<3;öeŸÐÌÉ)Z +ÍØl¦17Oz„+²ÌÎÈõz¥ÎäC#ãì$) +v(8™€Zçd!PšD8g¸¨ýói®c‚ÚÕŒi½éÞÂ?RO‘½6¸*²óEd+ÖùpÁ¾"æÎË’È…dדíåd^èLÔAÒ)@4RäàêyX‚“{g³– WèÉ”@‹î ô?ªÔÄÌ£™AÿMÐ`ïQ9Yc²ûà(`¼û“ ËÒïFéêuÖXIÞÃ1Ì@¡z[P™ú é%÷9uý¾T­¥tÍî®Rþ]Þßë÷©•©¿p»î À¦¨AM|ý‰òÄîþ[Ø‹±­„F=‡ÒR“‚Ø7« `‘wÜ/æ8fSç6ãvnø?»\¿ïs`÷Îüü?¹Ó +õ<€Â\ÄÀˆ +[dš» ¾•• +à•ÿΔæ-þ#³Gpì<×9Ù™§2°Ý†~ÚÓFçä¼¶ác5ÌÏϘýòÍ®¼g 0þòøÉ/‡‘ÿáÌ?œé8€&d@ ›È¹13¡cw(ÿ¯íç´ÆL*€Ä@IY™—'ȈBq¯¡d»áø:k¸..ϸ%s¢ÿòkä[r$ú…¾SŠñ‘ r‹™`H6”Þ·X,º3ÒœŸy­9̱@3xsþS9€Brf‰Ø¬@8¾T/@Ò´[›á¢€Ý9î)Ñ›©9€]<€:ŠÏ_«é’Œ¥µµgé8EM·øã7¥¦£¥%kçÊÎ?%X$J>8‰¡®!ÈGª ùÅ‚¡FÍ4-JÔw{râ,qk/ Ê„Rdvw·wÖùÐ_›Òn“öî²WP;"nø.ÆË¬cÛ€E3X™'ëõËT¾_Ò½W·¿Öuœ¬'åJb/ú$` „»ƒ~®‡…á<€Kô.µ,4·81%V@Йލ¬øÿêÖ‚ãni”ýb/4¦$@x`ÍX[4ðeÒjÔÇ'Þd0³H\û.›å^U¾ºxm-ÓÃ\n©zle@¦BÜ.³3ëï“ò÷»/ûä4£à…y¬R€Äæéø :€õRáøXYÿÄr΂Ú)^È-s}¶@3KRZHUP¥^ЄÀe;ò÷Uû²yYHï•RMtÂã‘÷—s è½ßÛ f̓éÅÐàaNˆúT¥¨9€u®»ÿ ’ví½^ál$5  Њ}îùêƒh-õz"zåJÀÔvÈˆãØ +&oRš¹nÎÆîê¯Ù|LÜ#rÛÎ-ðSéôs«ƒW*y¢ùŸpâô¯{ûà¸×h9{¡–P:€K·û᪅¯mm‘g…çf$¢*°Ñ™ƒH† I@”2+æH)Ï(ÚWÒ|këëÏ8‹wfµ¢+ö†Àç˯+Ñî ¬£'5ï²d\$4©±èFŒŸ9ùŽHG>£V#ú•ŒÌ4&:¼dÃÛ7ã—L" JtìæÞ¢û,ËF£!îsnhÚÂ×P€…¹©™¹Å«¾rù'®~›V %‹:u.XË š.6îí  V³:&-]^;ÀTy¢ðA@ö RöC +8ÒMP/@H W@˜r|ØQ˜ïì”p4Ë8šarL‰VuÇŽ¥Äi³–üMLh˜fY{ MÈñæÃÉE›B +@†ÅÎ9ŒÅb ¨- ø\sZKWŸu dbØÌô"C㘖òdíCé¼aœÇ à|Æð‚µ€ÖƒþæÚªÒ|ËŽA“ÖSnÔò‡LÄ{X»ÃÌ÷r|8(€2nú€<€²@)€‹1ÀÑÍ-\ýšëX;f76¶¾}uÃUâ:S‹ö,%^ï4xQoî+‹¯‹­ùùùNcþ/RuŽùЏ5BN¦Às"ç Ùô/9r°OŠý¢ò»%.fN’àP³l…X\œßË‚ˆiTY’è¼S¼ö/¦“˜i|¹AyùËÚ÷É )‚øOžƒÈí›1+ÃPÔmÈRøš¯’׿0÷5ýulTŠ&‘pR­«‹3š^Ôµ¢) €->~Üѵ‡ÎnI sBÔéôGÊ<€ÄàN»ÇŒr»„ãTòF8€D:âÿ–d~b­QKÈZŠV P)€¨avÅ?à0ŸSõ¨ÀѠ̀œO…âcc…é*ø~¹–GMIá¿I¿;½ÿŠ!iÅÓž™ÈsñB 4d&à+F9¢§IÖçÃZ‡ðß³‡À„ÏÈžFÔcÞA0y Úf1“ºáN³L{) Å :¿Âr6œdÕ˜@ +XËp)`[À:±%€' €¯{kãë‹ ÿh®3¡qîëJ‰k%ýµßy€IZáÂÏÏŠ¦³Å q 0h›T«Ï.¾«‘N4`°ð2EyÒ ÀIZ’qŸ˜Q*øšÀ”ØJƒ ónÓS.€B €¼¿V%¢·˜Á°»ÊØsÈ(©ö˜ô¢ñ¢<¼ÏeXü] Àï"_[èèB:[$|¯n]Õ!t ºTm$×Ð+àËgäýù…©¹-i“Ž9áï¾íë¨P伨T¼R€ ûå„P0\`LpUdÑ™p4Ãä(€<¢Ÿ‡Ú·N!Öó%°ÌKôP(*ŒY,IvT +j@(Øè!4¶,^T…ÿF®œ@;ö\l·.äQ$é’?r8Ò%4šLT—½Í~A|¡–.ȵԱ†™™Í{ +•÷A¹ÀÒ’ã%häì Náò@ÌùsúE†p= î.Õ`ÀÌlllÈll-lÈvhWVQœEÂP‡—uÅû}ÀI”é´¾£d%–t$ÀgåN†vê7¾ÿ­P/@S ÈïþêtõçvPP÷cºh$Ûkssï‚éh¢ZDU‘ˆ3 5`‚¿éŸ‹’öÐsŒQpD3´Šw‹(é"Ž+¹:âo´óÍ5 üR’H^ÓÕ£®^)‘4ˆ˜?c¥$ìoý æ¬GúáE£¿?UvÔÍ”z À¶zû8€ùI€«_ßP`ÀDrØz éÊlDÀ€àŽÓ•ù­õ´¤ô`·ˆ}¦+¡”ç#[pƒ‰ ýøqEwšå#1N‘óìþ ¥5J”Ä_£µõÕËÙAA­Þ¤V »=.2üàè.--‰ÿ|Û1ø¿Ç¤:Q +XÕHp•ê¾)æNF¿.Aü +e€ø?àÆýmd\À^Ï®;ਘÌœPÌI+H?‚"¢JìøØQK–þØt6íOÌ—Úª(r¥»âSF §i Èu„¦üJ€îTÄÌÇýUfï|ÐVžAGàl`¸ >'ʨ͈ Ÿ2àm=j›RÂËÆ>¯[¬¥¹ŠÙïËÕ>Q|™>­–†À‰ˆÞ_óe[Ô–ézuvµ¿_˜LHiCÜ>c¨é˜ûûbä÷«p©^`(`C`c‘LÀ½y¥Ô€ópÔá´`n.NX7$š­@u…q^\VCÓ=Â0S‚Aj0>~|¬¡=‹=Í×ëx+­‚Æ™,þZ-'¼@æ¡'â_ó“âðòz8€u)™€®ÝXËP\ÇÇ®qŠö­8€ªÀ¾ÀÂÈ Âä™âDÓ –ŒãúÔµ;{€]~Ñ ä”¹ÑÉ;q<Lç瞥us¹Ùœ’Iw[AÅ›««k…ÅÕäÁéFè¶4§B؃Æâ8cÞS»‚L8xÜ~ƒ± µIî¼&uÂL›íb¹¯?ç‘5yüØç튕à¿ú¦L…’(¼YoxdOt-Î;UÏMˆõF ßg\&`at‹²¼àÅU•ìüT ú— õ.€«oWi€0“¥Jìë ?³F8€0Ë$PÁÈãè-¦¨Ásœž%JƒãÁÏJF°Á^óô‰ŽôÈcPUÿý¡Ã%ÇDZ9€ž„  ¡î¯¼ò6ñ_i-GþÞ£û'DzYí?I\\V ^V«kA)¤ '“2bc¬¬ßÝJÔØ¯Ô~w¢î +_àXÞL‘²”Ïð]âÌQÓµ»ÔœjK—VVšâÖQ.?Ôx)( WgÖžÕ(Ú?P¨.T@*Ð æ3O Ã3x,1HöFAóµ”ÇI†dá1Ì„1XÎ*üXËórPTÀñÄTú’! QSL ¹]ÀR‘›I¯Ý“Ìõ~q0T™¸¬âš|}âûÂ+{=oʳµ8y$D>#ð2oðqùáÃQ×§è"`¸ :Wu4êc¢.ø ;±O øúR·9Þ^Y"Õ/8zŒFÌ;€ü>¸l°†ùç u“š€•¶@ܵ8ܱijÊ$ï Lûþ‘õ^ø„ÄdNÏï, +š®¥!¿Ú©‡äHºypí;ÎBnIã*ÂÏÛñ<Š4¼(Ù^­àÌgäŒ~U5I© 2”ãs/%Ñ÷Ã\ändÐ$ ¿Þå#$%±ß<Ö˜«ÂHà+\£Â˜.Ó­=y7/ÚdEý™±ÒoúV[‰!¯CåçÌÌ®<:ŸÑ‘¸ú¡*Ý>ˆI' ŠÙuØÚ• ðÏc~ÖÚcåå‡7Ž=FZ£z­ø¹Ç.Ž:n„ùêq.É?Y²aà(^Àåãl#|äy;ì³5)ó.ʳ€$þúŽ’%SSJ$ÄDÙñª­’8I=>ÓY™ ÓÕ¤j´P^#2©ÛÌÜ*PÄòîú8€½a7·Ä+.$Eó8¥ tDŸéDæ¶R@rm­+(€R¸‘B¼ +w†À¸"µ’ Îí¨³b¼€D‚ÛyÀ|4C|1Á#8N˜Gg åò%ðßåF µ¢ú'&k["g$ö€YεøÊÜ'r¼u™U­rÞÈfA@eåOƒ—>÷ÒçjUøFÀÅW€J¤©t$@b»ÔÖ¤%@Ã5¨çØðìt©…H ¸tmºÝ#ùBíÆE>j¬ô¦”ð\’õm·ýJ†ïÍö/O$ºAÅdáq$lRÀÑgf4Ig,óžY—wMy…‚O†'&&e*A1­ÑÊS+8.®%ÝòÅñɉqmêK„”Ei:*æxŒo¸psAhuŽt嘃£ƒ3¶¸®¬º®píe]ÍgF5Õ§qMÿ£½Ò%óýóýõ•xŸ.AŠ 3g;<– +]¥%Ãàn% ÁPîS7FjMf¦^¶×æ¹--5&Õã Û\>oå˜'ýµ¦¤åýxüÞ·/TÐ5àýµÅ’´‹¹@ÜmH2?Уá@„ » Iö•Ãz¥S+@3´Í »f¨cäU>Tidt‘= +éÝãútYóA¤ùMÏÐ!hqMÊ©ylé=¼ðÿ… @ü§kµ{â{·Ñj6f†@a†Àê‹ X#¤§É5Û4Ô5s78Ê~Ò°·D7m€˜¯˜AcПð`ÐÄB®”(Ž£€ZÖ%tߪ´S›‘"„ž„0L™¢Ñ˜ŠH¼QÌÓ°áÜGí¬Y/b9ñŸF$J¤ Ùù.¥ðúFH P¬'káÀjL9Dþ€/¯„où`ävcsqûâîåË/kpIÛ¸»¸Û£ãG7‰-òoò8á™+É7®ÀN¿;>Õò½@°@€Wºï[8ŽÃð%÷’P7Ís— ccÅ( 0ÓR@Þ—)2½õœ,dz%ΩNÇÈIêýõÎîL3ÃÖ@c@C=¹t&<ø€m÷8€ËCxQŒNœïø?j(:/æÐüx?(ãùËz”l*{ÊA!=£:±ÿs/©—L" € k¯‹¨m;€5Rÿ.¸té⥋eU€…-B³3¨¹—ÇŽ9(ª;ÈÌÀÿKýK²u´e`•Ò + `Ð7\Ý£+ûLKùÁ_°:Ä‚Aø°#öj\à3VB +Di +µ­Õ}Z„"à^FÆ_V€TT¸±;PG­ï“@\£k/--;º¯bú®³×ÖÞ)yÆ{Q,I—Y¿X€ý´Ê²˜„(¯à׺ Š09yL´¯AëWY@§’Õb,WL'(ºb@̾`¯„Ÿç(ŸÂñâœy^k §¦sû…õ.$Ó m¸älûf+é…Ì0n(QŒ˜ç)vvtxÔ›óª%䀎ÝüÉ?ûÉOnüä'ÿü'ôÇÿòßÿOÿÓÿü?ÿ³ …_sy#jˆ/{½Z ï;0C!–€Ýë–ÃsýŠ0€qzå`$’þ/°ó)t­ÞÅ‹=9€V£Ñ“  +?@a÷Êʺ¢g=]ŠÊ­†º•~Pϰ)Àót «À¥õK˜H€¿ý¾Çô3°‹öQ¤½¶ÚækRd"™û”¡íC†â8°ú„-v ‚… ºm~-·]«¯¢|é‰àYSš½` uˆ†RïSãÇÆ¦Sc®ŠR¹k6¹ûá:¦{"Y ÎÔ'<ˆ¼ ÕˆE#Ë÷_¡BÜŒŸP +:ubPIºã-b£”×\U@ÄÿÁÿ“ÎÁ9 À Û[‚š:v\¼`­ò3 xZИj+)³²B‚°}y;ÀXÕd w;€. ëÈ_\Òs +hˆBGS àØ?»ù‡ÿìÆOþùþä~’×ÑPƒÿïÿ½7áüÂŽ‚3ç´»{)oX ºâ¡'«à^‡‚#y¢…øã ÍQ +Áïb‡È‹ß/ ŸÆ|+[@‘&…MQ™.#pé¢àJ{å½uJ§%äÌíÒÈAj7ëvâÿÞ<€íí¼Š&[Ý%…wfy…‚óºD*Fs÷q”Úk¥„]éÀîÆEþâÁ°™vñQ¯sýca'Ñu¾‚BØTsÊiçØŸw_ +€äqe Pœî ÁmÝy·*ä|nc/¼§¡ÝQ„ééaP8ÈNw°;>ÞÚt£9º©ÚK WÅHc”ÍýŠÿO¸E—´¢€Ä±½²„±žŠKÓNfºÚ«¯Uû&ú÷›² üÞ| ­‡ô/n_v3À)‡#@ÿø³É1 á\cGò‡7þù?ûßÜÐïŸýÑOKðï 󿔀Cy +%üä£ïÇ\ÝnŽÐÞo}…½3ˆŠŒµ +5à= +hƒ˜:ÿsÎ$×G"@ZÃVwýÒ%—N5z»õ<€©Ét”SOº÷X:€£~š…èõ¾a!·¤hÎ4•`G.í¬l9 æëv î*ÁÇ#9¤wÜ +‡8…šíËá‚üi´ºöÜ¢><±ß|Ý +Çî‘l¨ˆ¾/$,è·«SŒfä`ž'v°–1j-nK 9wj» ÿ@†M €“ÀEWФïUw|¬µiwKŠ¢È`4 QÈPDý¦?ñœ• [! VrEü,Žðì0jE° ñðtýÝþeE®y7Kp¯ÃÔ’Ñß è/ d܃;èþHô¿qãŸÿá?üÕпr¥HÔg~Ð#!Cë@Ó‚ÜõPµº¦€\5XD-êEV—Ã`+|fƒVÄv”¨%ác€âýÈ Yþ£P€ƒ?Q¡¢é.ydSM;€àÿÅ~{j¼Ý>¬¸ð©t¾ë®}ÀLðß@;ꑤð°×88P â\„to°?y™ƒˆL÷4È] +ÀÚ¿~霪58–îy+· ¤›9§ÄÀz/ÄÿÉàå ºD‡ý‚ˆž¬9±¼èÇH9pôAä’lá]1ŽØr4=¦8®ÐOú#c‡ð +|vG°dz&~.Û€—[½/ö–›‹CÑ!µ@~Eû¢Æ0©‰ÌgcÊØ)¬= +|Pͺyqû@)€Ö¯—„À(½fà)’Á €tôÀ* pãŸÿäþèÿ«)üW¿ü—ÿú_ÿk&1ý¯þÏôÿõ¾ €µæ &ÑŸhÕ̶·×3Šg•ÆŸ´g®é¸¢"¢˜” -™¢‘R.U<©à‹ßEôŸð¹—¢ºï(Ä'ïæçu*N¡»Þw-€&€¨ßô¿Ä—©’±òžÒ"™À TÏA­¿Öœ@ˆ$ä^´§H\¼¨€f4qT“¸(atDŒÛÞ‰6Ô?ào]Å-cc§*Åä{öi {šcK9ü_y 9*úäÁlª#Ø^ŒædÌ¡Ïä)Žá%Ŧ±.#¾ÍÑ÷HMSDk7ý( þ=šk$ºSG›½pq°™ü7•°‚H¬ŽØ $ùAÄÄÁyÊñruˆY€»¤äÝ;b¸°sùÂåíí‹hÑö§pµ<I€@T*é\†› þוßþÏnÿn[À믩?þ?ÞÑÿpï§òÓ#êè!(F!5hN—î^ýÕž°kkùò™è,¤ÜOŽ+óSºêòŠ0­KÝÙ½ìHD”T‚,„`Ždú?¢¬€ßøù›u†õÜœ`½çZÍõ’ÿ}jc‘°òžÀÊ€pÎËa+@fú +2Ø­iOŠÿgø´vtAŠ0ÞÂÏéÒµs…tun­Sì«X™8žî¡jܨ¤¾|“F?E”½}™¦Þê¸\v¿&2DÈó­£Ô%dª+*¯v¹P‹k÷ƒÎ­Lîu´yÅ0øi#­®ÚÍ^˜} ùúØ‘xhÄ‹ñJöK݉£ÍÍpÀÏ¥h”Ë ôÒ´cÁü¬÷ÿ9–ÉÏ(#>º]È4®9€ ´Aèì‡]9Tdd¨»LØé-/KÀÌgÎCÌ禬B°±žnLVyyâÁîŸÞûÏÿø¿¸—ô?ùó +E+cE'žC{„¦á·n¾^åG¥gÄ%_áE!ø}0c²ˆÎ¢$@`¯¥•¹öËþvaέc÷ÐØ_ˆ€Ç?—4ß 7¢+(ö—ã € %œŒ´Ó@`å½õ÷Ú"-Àà0³ï¦ã>Ü×Ö€Ðl](NX׎»~7f9²ê*ðiÀ­Ú7D·¯ˆù}ëbô`© (@MW†$&ž ’–¼ñÃÈS€œ»ЉtF¸_ ¦MôÞ￟c^A«ð–©ÃQ"„ÅáËûö¾bWyàÄÐ$u›ük·‡.D WHt'7z¤`h™Ò;çŸ`—¢;z  ?ÔḎDÔO,À6"lÀ±Ã‡OÈvì\ê_’P8Ô êõøãCƒíM·˜ÛˆLLØïÝLºm¥`½®1ÒÍÒDùšbùzƒÿ?ýé¿pÿðÏÿüáOÿäáOjZDç? +‡(?ªuØjšèœ‚I@ ýdt×t;jøà¨“÷¢¸xÿ!¡ŠàeÎ_'»‰Ú_‡Lý$?c¸€¤ûd -ô–ú+ºq:å©»óó‚$À{mÀ2Ïj @]P¢…l:Â*¡- E¥‰{€%Þdq¦ÈÀ\@v†Ž­t_â² óüÌi—þP´¥~½ e\"vÑÑ¥u>¦>uüŸëïÄ”û5p¼þª€àë¯x¿ö>ü9].4v?XØE€\'/Ÿ[á$ÇX ±Úb0ÀÅ]`æÐoWr|Äy¡¶ÿ·èÿ£€ûw9Dw}‰<ÌVs¼m  í<€¢ÀÊr{E"«;-åtUk;¥$™pQï9ÔµZ.ƒã4gÉe{ZÁ·‹—a­¸ÜVˆ¸(ïk¯?Õb žH„ ƒT.ªØlmòe^­Ú²ƒË†‘‹ë&J.‹P(¦qpŽ6 +©j{$wBò‹CJÂ6.ètžƒWD<úä 'ú­1 @ÍprGù9î‡ôäþÇoòÄÊ{ˆÿ ˜‚‚"ç×ÛÓT â;¨L àX‘8:¹wÚ@>2Èj,±î—œR¨§f`÷y@ƒb5”h+À&l\0Ýr3šÃhÞD@¤ÿEüࡺ:öÀžÇ§Ð­a¤ryw ¯+$ ö [àT€­ú}@üäpXKü·D‚ß2qþ Z¼ +(t{Q +Ø’{Â{í® øÞÊùž-–,€”@™õº }‚ÄdçBÃw]U`iÕ¹Ô–)®ÈüWÇ¥ Ü–»(˜6 ^¿DÎ|ØÙ0|“˽yµ÷DÉ×̸„W>— +¹á ´KL"y×›Y-¬úìî ¼^Žï… ž$groà3tÓ8Zq’ºXÏH8šßŠ,ôr…D¿‹¥ Óƒ÷OgsÃÞD2¾@‘'*¬9|¢:ÿϵKÙ½d +àÈáI%Dÿþ¥ yþa†ØâŸ:ïìÃõ¬ïã³'£‰Âøh–VVº¼Ä¿™Ç0ûÇK|VÓ“¼R0F“ Þ¤ÝV´ÿ/ +Úÿ©Óý3<ÄC‚ïz@\vˆG9Rt^±Pß±n M]è“ 2rÓÀvººþ¢ÿÒ¡Ï>ô™pð¾ðÿôC•dܳާ]:/À¨Ày¾ ™À£T2®½²Ì3÷£Ò4ÿÃ4ºd/¡Ú\ϹÓý/\¸ V„PÀÏî¹ì"|ÿ}«xƒÍ7&™<¿€×/‘3;ðí%¦w~AxˆÑÈ µ)ÙèÕž™5JªRBo%ä‚apì:¸:]’Æ._µO߈Üuq0 ƒn]‘Œ×-„æ^‘ KÜÿbö‚ÛÇ÷=ɹ ?\°7 P¯6ü,ÈÂ(øÏ4âGÜ«.óß Ó¾„L@{å?ÈcJÀ·,Èà?)€ÏÇ9=r¼½"ß'.–ê#Ш *g1œ§âWäb#0·;n­ÐU P9ç ƒi€€ GÎ ¤?Pr^¡ì*7 mú»)— …_î>ü@wÀå^åïȑß9ôRæ„óWŸ†Šû£¥ +|€þÑg4ÀÈÿ; àÔâxÇ'á{ð›z~$¢& R~bjJ‹§Å=¬@S{É…ím¢8A|ñO{ 8'™ð „®K*îAN¦22C$‰ÕCEt9W¸•Üzà‰ý«iÛƒ hZÜ}ƒ5@N¾;ºÝOTVÄÁ™—;ÛCSñNà®õ· ÿååÜ"ÐÑ+îgyBÅmÌUïýÛãr…ÀöŽ€§©„F™ØÜtÔâ! +Ù +,— €È_”ˆÿü-æ¿à;|ìøô:ȾƒÔ/¡ž¯!ei²+þ[ªR€ßTèýtp$HàìAq½q¸1^Y”'±ÐÌšJú?äÿŸ‹jÜþä-ãfáxõ¤ô<óéæ5~Ø òì”V.:Á@Ä0dƒj +àBo‰@ý_?rè¥ÏÊD)@Äýp?DÀi€Õ9Z¹7ï…“ÿÝèÿ#ýîL«á%^¸Ô_wr͘š¤"U—ÚKKÒY*prëˆÿ‡Ã´Ö¨ùçfd5l/êW9$îoO\ßÞ<nAB±`q 9ׄ%²/vðáÑ[ÑêjW§Ó]ãÖ̽ËÚ8joç.c§uæäì`øt>.ûÊÅ­þ6’ ¿_ù®íL ÞàŒÆœ§•­éF"‚—`2¬C®<ö©:'íú.sñ#]!¿üqS +èæ[tXËPð_à°¤ P5ù*Ôþ‰÷* L9 ¨p¢¨ „DªÄ‘É÷tÒøë~ø!ü¯9…~Rº’Ò–°˜~½ ¹:61—Ï轕õõu®8ѽÁŠ-+€&¨D ©…øÓ?XpßǵIüZ +‡Ç‹ÜÅÁpâ€àW]‚¨þ®ûj 8+H!ýCJþú¥ña>Bà)Ña>¢ýÕl¸ž>õé2ü ÍæŒ@'|ŸÆ-øÍæ$Å€2Š,ô õÐjÀYAv&76~ýPÑê²/y÷B]@0ꆰ<Æå•J(p™q/à j«yq9W;Pô9¬bõë¶óŸÎ{÷Y‹€½Œb #§ÿîpH¦> -‘T©[gSÄá”ËCGô¼”ª:Ëð9©H¯kñðêrùíì‰bDˆï4ú¾â;ÛÝ©©5ž…]¡‡õàù™z´:Hœ€kUþ_DÀ@‰iÿÕ¥8# ThIË=‡© `âK®>ø@ý¨>ÈC¿­À»ç§t–=°3²8 ñ@'ëçéÙ˜úqÖ¬Ü^Y"dOþA71r »æ¼ð/È ü/K0Õ†$ o™Cv„ ˆzVyûxz‡ÂìçGWL)€ƒ€øè¥Ãr.€ûÐ>\Ós n˜Ú3"3ŠysYhÍ4€MŽH6íëHéôø¤%×£tËÚ)ÖÔüÈ<€f×V5þ@ÿœûê¢"ÇR¾€Hüöú߈ûTRÛw ¼U!Ü‘O+VÀÒ:r¶ÀÚ{ùgÔ©9Åœ±sB·€ìŠÜ§w:,Üûÿ…€#cùüœ§KØF4ñ]±‡â4uQžeU€©§!—Œø™¢v\ Àüó¶]&"âuŸ£¸¡ÛÝÆÔª†ƒ +6fp tq2ÂMФCŒ¢"“5pxr]·Ô ó"Àqwüã¶­O³²¨Ì~cúõi¬T àtzï‰û=Ñ¿¯?­ ûœMÿ㓤mu¦x€éZ@¢Œ,H’ü ÂJ¡MÀAÀ=®:~öÏ€üḠ®ŒõÒK‡Ê<óÞ”À +PôÒ ð)#SN4#  #^ðÓiêŽNŽS°ŠpGNLþÇc" € u'…‡ݵUw¢‹£0¤¸Ÿ•"Àô'”â\`u#|?…p£µr¡xjØ€”\až‰@f¾kŽ”€²6pç¶úS‘™ÿÚ¶’™páÂ%?š˜•ÁÓâv83×OÙ +Z8€£ŠŒÜKÈŒî^ïÂÎýt ¨$W* ÐàîÄ ²xŒ‹Œ¥Î +r¥&r¶R¬_syôµ$Þ/@éÌÿ*à…0ÂŒä#´d¦+"v`#ËÜdSþ£òúé!W›èp£j*k U½›¯_¶ÎŠÿþQÿ%5 Ýiû×êšÿîh.TÏ2Ì·º¼æÄ¶ßÚ'DÚIøÙÊX‡ÅZ‡ +CŒ[ÎïO¤±!'à2:¸öºØlš |óÿøqNE8"°¢ ¾P”:IdpŠÛþÁ.0F@{ & ¦Õñß{Ïyë=ÜúŸïŸ÷wPšD€œmÈõkàæ’õiÿ£_ Àùî¼%DDq’[¤¾~àðgÑ lâ±Ï0®ù¬|Dþì¡#»‹½jûÏhÅ—>{äÈáCŸ=üؘe왽Êó§0ó3:DQÀ?K% ?„ÿÈ‚ ¿£ ¹€^¿Õ •6EÛýËñºØ‰ÿ uþƸµqWÛíßp Ï ýÐYW “ ad3)˜&‚®/ã\Xa«†ÔÂd”4Ÿ„kÂO½Žœ/¾Ê%× n(Ü*\#ï¬p‘  ãÐ!À¦X +@‘(9c¢²â§ŸiœT®$ÂKˆÔ€6C>€Ç¨€£æt£ˆÀÇn¬º ³Ž›™0ÿÝœAÎÀùÈK °¾~‘·QÔy¤/Â?Œfÿ©ÍÈ}V,ÍÛûƒ¶.—5YU}V«ÅÑC‡hÁg? ‹µ&‹4›ÌÖàÐgKØ-Éz²ö_b-6Ó>kjpDcR‘ϰ ëÿ5°ÐH0~e«À ñ$¾mëroHì?ææ’'§Rü”Y 8ÞñÏ—É^¼Bê§ÇF.ò ÓH4×1÷ ¤ 8{KÁ|f5sMp`¯#çkÛËðžõFk¥w3 ÐU’$@*‡­+/ñ£3| öë8‘và™ébi‚H[ÓboX¦ÔO€l„h†w à§-ÂôøØ‹c{<@ZvL¡¿±²¢8( +âò’ÛýÖDwöyí༠ˆp>Àþ`DZ BÀàÿ© DÆó b¹P€#ÇŽ>î&AöC$²& ó´ À@!ÀÊygnÒ4zÿ¼è|ñâ{m§4Jôá¸z¬÷/*´®gwq][¡~ †š€ÇED,hÔ?ÅçÐ9¤A× Öÿ¬âr¸îT»9NΚ‡?«8]¨­•Y—î%‹ÃKqD{±ð3XAà38S¾PЀ|ïw‹‹ù6 ¸Oñsi¹9ÕXÖ­p£ë‘'{ÔÉü¸Ã¼dñº Z~÷ƒr…P9 ùOÑ+RD.ÉÅ] îÚÍÖ4G«Å"Ó¾Ôˆjs9=d¡&û$´Z0ßý‡U² @Ñ`ä¸Q¦B´bîÛ UÅ ·Dâ MåeîÈžL€8*ȃ°³WÜ]û%‘‰ÐK>ÉYEÝÐÆÇóäq'¾ð¹/|á‹Æ+_ü’ð +½/}éÕW4òê+ _yåU¦˜ø’ÖÑz_dMõ¾øÅ/|QÛ¿ôƒÍf€aq…rr¢¿± €1ˆ€Ú‹†ŸnOa0è_,8?XWƒcýë ÌÿÉ ú.;ÿ‹` M\Äç òD<3=4=Èòd¼Úã I^„?Ââlò¢÷óâ5-\ƒóíŽÒBqŽ{ÞP »”õ€0ñ¯ ++f. »9rŠ’™<üÒaÊè•+†ËÄò,„ÞŸì{âyDÀÀAš ×/?!ßp„˜ÿ> •Àšƒñ°`ôðg´µKཀྵJ ~Fùƒ˜Ýþ/F£×F·=5Acì½â¿ubrcç˜d=Ë´äàfíýœ¢`³·êä¿F"Œ$wv‚À6±úšD$ÎPÄü8 ¨žŒò–y)´S À0r¾V«ø?ÿSµn ) b€Õ Ìqo…»Y^[^Y +0Rรöêçü+i@•”ÌÔšŠ·¥‚ž$Sfï+Ÿb!f>Ä7÷KøRÀk hÓÏ}pð’v¨ô%‹€ûè½{yïK´'ºnÌ+ÿ£I°h\îUôŸ9Ir³2ê¸sh*+˜ÿpY¡Ž´åX;‹/tÔ"4A‡ÝDr9š¬ª j`K>9é*}‘§¿Ä§Fz½óŠÑ/ž— +¼wâØç­>eÞ3ªrÇ­w°þüAM ¯nhÂÏï åÅãÏ8–'RÍ0à0 :#ÚÉfCuÔ@¼†ûô¥qy`#ÊÁª†ÝƒŽœ¡Æ"`Ñ·¼ô¹dø ffffÝå{á“Íæø¸Kü[öN(ä˜yÈu<'¾RE8qrÍÀm™þ)ÃH>0sD¾µ¿+@K‡õ\fþ¦?(òbñHPÀ—@åãÖx›ìÇ‚ûô9‘š()õË{µv‘ÀÏ W¢®PŒ,U`ÀH–ž!qø<3êp,O¼NÞñƒê(„püŸO9çIèkøBáö€W,¢¾ºšø\8€#‡Šñ‚>ëk5Â8þ·øÞ×Еd Ü:“ÎüGp˜yÿb§†Ù/Ú#¬éÿ²€ƒ”Àd˜D,〗Ð9dXÐMÿW[Vkêå8P€z³` +ÍÞµÂ6í÷±õ”9#—4Œ}^ÕÏ©}¬‘ç_§l^„ÂE¿FT½O´$>&D:¨*z' ¿Í½o´G舯õC>ë<€\ÆÏÙwJÈ*x*{aæ%Ê8yëayléŠ8®ä­ím˜ûê[fL—!Ìð6]ðj˜ +™&ðÇò­œdM¯á˜üÐ<;5õp’ûDþõÇWôÌœÎZkEa¡«®Š«É x¸E!€ŸÕ+ ²ââü›Æ*š2ÙéÛWôM±~ÿIAÏM1¹ØO%:4€þ+Þy¾úg€­p@šÄg1ÌçkŒôµüÅ€¤82PýÂÐÕ È?¼¡Çø™xœŸ9üY‡­|~/pIVѺѯ;ÁÒO]UÂycŸè_¿¼÷%ºS­l¨|¶U=€L*"¥ iöóý¥ñɉ©âkpBÃRКb›¨È,ø,{k|Tn©»lÕZö¼4KKÐ?êµ+PÄœT7ÒD–œly°<²L\âtÏýì?0ÉõÓãÖÌ–pØ.ØVP ¾ƒâTnAoé. s´uÀ}‡œÔø½ß!ø=@«(ÂT·«û³¢ºK¥IWü?¿ÒšÕV.®àÛÈ ;Œ§%Ô@<,ÿÝimt+˜ËˆÄzt½vËYñ·‰ -¦ ˆÑ»Š¨ƒk&[p_¿F3ÀZM»ä+SÒŸFEý€Ëj8€´Ð(دž1CMe FùÈ*žÀü· E€Fä œÓ ‚ãÚ?~šË5Ú +(éŸ@" £Bæù2‹ûDó_zUxÃ7ÞxåÕ×^cøÆê½&°Ð3±h›êÏnR´oೕðÕ@òy¶tÇûï÷¿Qû÷»ã­M>{¡uK0é€Â@jõ‹þÓ“ë¼4F‹ÞÔ» Ôì¿PÆþþ’iØÊôÿE¨Dé±é®Õ/³tV»ù­ˆ߯iÍÈðòØËÑ&0» ÎOŽ+akä@0°ÍQê(ú×åÑd§÷¾+5à_M„#úWLÄ¿…‘7%‰Ì5óˆ’`šà¯µ5)¥Q¦ÉßIÿ\.®3í=W^ÅÚU¤Ó `,ÌûÞóçüÐÕ‹( {×t4 jèŽqÓš½µf£Í}.Skj·ï¦‚ú»I°…qòóò&Å“¢& ¡"BG©î$@Qˆž_·ÑU8 +3 H„P?åÇ ÷ÉЪ•ȨßôO0@*€Eü_ƒk: ÀªŸ5Š_¬€-Õ÷Ï|2æ¿ÖÉSÚ+ŽëƒòÕ/æz,¯ËÏšRS)C‡$?'×î˜ÿ _tdåEö×^{ãÍ7ß|#hóß|í”æ¼õæo¼éNs´åÈ„O€@>G¸QÀS:|„ë +¬œ øOÏÓ`„˜hÉó %ÿËAhCLà8ÊàôWÔ/Qyï=ý©agRü*`!V€OylHОáè*3·7×ôÌ(Ët+{¢aK?Úø *;ýÏÎDò¬Ñ‹×rÕª÷¸]@ÎÜpêK:¼{¡oЃvËH@8„:/é¾ð_„ ÿWš"áõ…XÀ +áÂrÍzÆ‘A[¬ZbhÍÂÄžñfr=h—ˆ"jxåÕ™ÎÞ®S´-£5ú=*cõÔë­+U¤ÇÎm–œoÊå…?ÃîåÃJpØ^ß)øïp3$—Äë(j¡BNå‚ý‰ý@ +PO;¼#•´¯$À`BÉŠpt>j!…l긅Î IÙƒë@3DEÿp5P¤RRâüëžãJp¬_t5 (Àõˆš=£ù„ qÿ•W¾ø +<~Ėû¯½ùÆ[ožRçß’¼yêíSo½õ†~§Þ:uŠ‘·Þ|K*€ÈÈ(8ÉE"΃zé0—jP.î§)};öù¡w„µ©ÖOP·ÖZ(€øOê åùÕé6’ 7iÙ¼ ÀFYªðÝ.4À  +`÷cí*þ'˜£èºÀ›j'ìR¨Ïk +ëaú¹ù6@$ióÆű%L. —=Ê.§  @Òˈ›ûÅ/aþQ0r«»ÍðKzŠ^^X¹ÓˆgáÓ˜Á¬˜ÏÃ'÷æ Ÿó„v¥Ž%L ±…Ëw€c æ*¦P8Á à×f[ï´†ÿý ¾yc@³A%YÈ«8ÚwÄàÜåÖ§iöÁO†‡E!Z€–äƒñÄÑω͞î©~z~ýÞ¦öÖ%9k¯ŸT(HaZHê)ç” ™_пp]ñ¾rù븽êš@f2XÅÕiöŠ,@Ò=,€Çb` ] €‚ÿÖŸ–Ͻ.‡7¶Ëw6€z)@I;ÿý“t1ä\OÖYê­ÇGäo²Edóœó-ñ]£§Þ>}ú+~E$@º RÌR$äbXHè q‘BåıãÇÉℌÕ ½FS@v)×(€£Qr’xÔìᾩS @òм/ãä"  @‘ Á0à( +p¼Ý_÷)ÀþZFÐwvvô¾³-ùÔuSq"ÍévÙ ÏIôÞSäNÊV{»@U ’ÿǽ'= +ž‡¬e ¬F©á âVÁVKI´/ñà‚‡R\Íz+íFÖ¬¤¥"ón<ëK¯z%§ÔX ±Gv/Ö-‹sœ·KÞŽ;³GûWŸÝ¸Ä—ǪC+¬¼òÚ+Š%(ö¢U÷þÙ%ýKhnöx8@S¼U\¼Ôê¶{~\lplÌOIÀÛ8|ÿFüºú&÷V”6©{h@ +@ *æ 1“¬ ² óJÚ»çñÈhi¿¥–c“ +p5V(´”Œ×—ÁhÌ\”E)€èºÝ¸¾:" Rë’g$ :çu +é>KbgÿÅÒ FzÜáöß|M|Þ>õöWÞVáW¾òÖ[âýiM½¥^zŠÑ·Q§ø½é\‡E"NdúXëzd)šÓÎü—øüØç‡ëˆ½fkµpéò‚{É©I±¥íÄtÄüe\Ìîß½" û­.s"PEÀ!ëðñnØÿà¿U‡5²"Òè`åq-Bz JL +€X¼YîˆÇ>‡NW@ÊJP€ö!©lB·¼"{%:òÈô#+FwLÛŽIÊy˜žPïÕ7B@4bh7N¸ÅL­¬qÏP¤ŽÈx¦~âù«¹­ŽÀƒý‚dýKZòæ©·¾òö™Ó_=#¨W õ§Ðán>¾¼¸ø2E'Jl®5b‘9y­®rCÛ¾]Ùøõi @å|çpŠþ%Š}†© +—¨¯°A ÙÂefRD‡ëëkÄ¡âžÒD‰ê•ö?“›zjÔµ¬øOUàà?ÏŸ@a&ý÷û‘Ù(vk™Ñ ¥¢5Éùf?ˆÍµ+öçê'Ç&›Ë½u‚¤°'€‚%¥+ÛΚbS ‹Ã¬â±rÕµ<ÃÏøP¦T°e×ò/ôØÇøžƒ³§ßþÊiuo(ÁÎ#_EnÓYM?õPn¥ß$Éz$(†t¥¶‘ó +;õæ¹Ìz“'¨×säÙ+å§åÕþD’óÅ—¾ð¦¢3:™+#‘•ÿoà€@¯E]}±Ø78€®¶/ X¢òx÷ݹ¹áÿbj€Èÿ²º±F¿O + +ûÛ\Z·×£ñåJ\hK€ŸÿÑÃÝîTË Xš€ÞK +€Ç7k sáúu/K"BàµvuÚWR0Êh´”€JJP(@„ˆÊDüÀª¨‚8OÝá.!—JÀ) U +€Ø_û\s§ŸO;7ëƒó/r#J€>÷R’¯*.1 ~ðg#yGœVO[~W®|óÊY@X<û;g V_uÀ!¹pê+¸J–( ;ô(¿`q7¨ 8ü6`¿ÿ¾‚õ´ý\y²9€ÜÞñÿû(@–¹óìø@O8¡mŽÂ 5Jþ`%éoùéë +0ä"1Y ?kèï'\sXÉÛ :#j&䔤Q0ÒÜ(ð‘n½âØk_ýÒ_}ó”OH²À£ÐˆŒÕ™+oóÄ$"¹—žÖo+ÊæyAÞXO½ßFÉÕÅ´V÷Ú‰+gµœÕ´{RZðm%ó¾øêÛg¯|tíìÙnÜ…Œô`ûÆšÃú«­nàF#œëïçÅÓžÿáÃG:­‰Â8xÄßQ…ø+HˆAB 5àƒLÊmGn@Ð"HâÐj‘ñA{ãûåÔ/€w}\  rù°~ý{ELÄ|­GÛÑËRˆåe „¤ªDìBÐÉ,gu‡@é‚ó\[V  ÂS^ Èÿ$åkâ?ñö›Äâ0{÷Û€ÂÏBÞÙ+×n\;{Eá +!t„ ¥p–$/‘€W^%°8JÜbáÒúôQ=[;zc¥ýÏ$oJA7ª:#øPP±‰zC +Ax€”3Q÷Ö,ÃÀ~ò)@éÆŽÇû%)¥Ø,›<¥`H{áR´í°ùºv.­ñ!uðÂȬ[ +€ä?LWˆ.ílJŒtɬ›7o|tíæ5Ýú3¯}é·¤»g®œáAèI\»òÍô×3Òàì•o^»r†™×Îê¯-x”Ì’xõ+×~G˾ɣýmÅC½¢)m¦ÙWÎjZMûã§Zˆñ² J|á•3]ÑÉܾqû£QÈüþÈg|  =õŒ}‡B/­ðɰÝÝž›]0à]„v{J[›ÿ°$`-ps’@I*(½¥‘ÍÝëÉAÏÒyAz"@ëîšýêøæbôr|Už£;Þók Ž[Ô‡¯8À9:D8º1Þb°ähß ‚€zì﨟.â3Dõ=yf½Õuc%¯*ˆÿ#ËNiÉ/½Þ8¥€Îg~ú[N4tß<{Mì¿qãÊGš¯å×´áƒÔ)V‘Ä'9ÕRx]Þ^Ý`»;Sß½A`X]³ÿy°E˜ÿPk+ä` $ÀUoÝ(?Ô)@™¨€T€0•a¬–PUÈa%H€°)@;äÿ7íâ->F +A+á#z 7ªË0¢ófƒ€Î¿C·K\³ Ü<ûÆ+o½}ÞëAÈè±Ð—:üäæk7%Ó74µ¾ví#-Enj³ßÔó¼ñ‘¦ô¿¢E}­ûKYUZ;¼ÂÚÌ;×Sדÿæ5Y¿+zÖ§ß~ó ¯ž½ñÑG€›·îŽBp}ó9€Á’€±¶{Q oBî^êvZ…ÐýÀðûiùÖé99 p´ÕjࢼÌá$BÉ&M‹l[=€äN¿Õà­š¤…¾óDŸYÒÑhδfôǫ?Ó`¤ƒ5¡;QÕèõßç©sð˜ QлKk8H@äÔàç›ã%¬þ$ à-ö'ê/ØB1…½yQ- ÔÀ+ø`ÿ_úœ Ào¼êœáSxy©¼xýͳ¿-^;bQ¤ÿÑ ÆÌŠ4F r '€ Š8ݠ⥂o¾ñ%Þð;"BÞaÉ3€Ðž½1q¥êÀæšnp?ê¤ô +à¬þoüG)"$øi¸þWì®ß¿O[îN8Ƴ„Oƒ(áל¬S’–zÉî´ï÷{ñQÕæšÉ±6½'TÃ7˜«äIà ÿK >„à³—ñå›ýòî¸uGü¿uëÆ•Soœ’™?+Æ‹½]»qëæÛz8‡·>º ± ·n^¹q‹54Ó:@Ç6ZxûΛwîÜ’×Ú7oݾ…ÜøèСܾyûÖ5±ÇágÎÎeΞ>õÊß¼ùÑÝ;·ïÞ¹uo‚ëƒ(šðõÊ(n.|¼ïÐúùþy9€–3‡€é¯ŸÀá£-›b@=‚._¨À‹ä|ÊÜ7{“üdÚ–ØÙ¤¼Aˆg?ˆhŸ3ðÚi¶ø¢%-«ýbÀW¶» ÙD3€uŸãÆ @ +@§H + »‚û(ƒÑ[ªÅþZ–û8S+À£òÒ„Ô%ÀiþaH(ÿ£þ¿ýU‰¼ Íÿ¹C±\ÿæ-=z¸¯ƒxFAEnQ.°½òU%å(6üÊ[T~Š#_Hþ®ÌçÞq«z5øZjPœÎõePßü‡þ +,!ñ'®-P®L­à/»d=F’æðü ö{T'¢îýþ7t&}³}Rÿ÷凞`{˜ ýŠý&Àá±¶¾ÉSMÆ€8„8†ÐÓGV»•׳ïaþEt@sºwÐüÁ"Bä*xö]›·>F §8ŸHž£ÅXþéáh aþÛ¤¨çlJÚK‚U?áoiI·[‹ýsç‚N42Ô–w'ÅêyÉ|÷âo$‡ð €ø%?NTþŽ þµ³ÉûIþ‰!ôWœpG=EטJÒvWärp¾ñÛ§(i~ÍÅ_Hð`è.PÇCÏ0>õƒý5;¢ã—´îgÐÐi³Þ”fÅ`gÿ^W}Ö¼›÷µf>ädXpí¾ ¹_ÓßpÌ®ôž¾ö } "ÿ÷×6m@µxàÔâ‚|a €À‘=|¼©ô. €‘°_=€%îݾ{ûîÝ;€3b£<ø"r‘ÿÞ1úÞm¨-êŠé·nÞºqÊß¾/yÐz·îßS´}ûÎý[·oß½§ám¶F:îiÓû÷µÒí›úkWˆÂí[ìòÖ»÷u¸;÷îß½© E§OKîß×!?x”g5ˆŒô0›ðòËG_Æ•Ðöóòí!Ô7§É™™j6'×s;Ž„DzMàkÇ·Û81 `Æ£7d ´o’¼ZŽ4«êü´‡áTðè8JÖ¨hpðê„Âdü¿ºê€þŠÒC ?c.Z€õ–‚Ò”ˆØßû5¸UN¦âFyóÔ ¢üä<-ý¥däïÞn‚÷Þxó·ÄþÓ§¿rúô•³¿-Àá“”‡Ä.ÚQJð•·¥·oª§T RŒ…k2 W¾yå›dø +寝½úÚ© +ˆ7«©ü¾~Tàb0åØw‰’É’Ã|3BŠßô8¯³N`‹PÃä#@„ï¸sxþAY…o8^W* ³·ÇȬ­ÛôìêøÇÖuùµÇìÌ~0Fü¿D[ý-#@2ëÁƒ‡î?¼{ûÁ½›o¿uæšžÃÛŠqÀxQ\ö@¼¼+•PÿÎíû7ÅïûHÆÝ;÷ïÊ:Ü¿ýàþ½{"ú½Û·µ/6ÉÜ×܇ZO}iÁmÖpçÁÝ»÷o‹ú·îJ +î‰ïîßUpW‰€·ß|ëæƒÛ÷ܽÿäIœÕ’냸ºeP P„–’ ×©N­¤‘âŠhDug÷ 9Ò”ØðV‹4@R°tõ:ºç;$d„·¸À›_-uU¿ãtÉŽrXŒé‚RÌ`œ;„Çÿ+"² `iEÄOH,éѧHQ öÏý +Ü'è¯ÈŸÄèÔÄøäøäÔ¸XO”_匬Qñ|îK_”ˆz¾Q$òÛú‹ûß¼Blãöm¥e-«ÜF™ˆùÒ€83™m©&pZfâu]w<¬v#Pwñ:°ž+€F&j`ñ4Ïñ|[]Õ/æÐ­+jRçP Ný€æÑþOÙXWî#@pÏXYYÖåë+¥ŸVÀõ„H",KV´oñ1m/]ÒÆ>J¨£Â?õ+Ñî¿‘û!{G-K@Å;žþ°xXà‘îýîž9-%µï?¼/wþà1LøèÑãÇ$?”È<ÉEäG"½øþð჻Dø½Gš'I¸ÿèÁ]­%žkLÂðøþCí—4…L‚fÊWh¡ÌÅ]ÍW0¸vúµÓw={üøé³ÇÏ$GC°ðîÞ.}À"e5tdÿ—Ül’ëR‘;J­ @Þšp& îÞá¶€âÅÿl@ìœÝ‹…ìऽº°6äx"ö¶Ù~’ë*hV„¡R$€ùÏךÔóŠ*_ö=(_«E95ï˜Sˆ¯wݼ=•Lü•Òüë”3îošükú5 +05^H@:€õ2"…/½òÊko¼ýÖ[$Îò6Ç7¯}ûíÖm‰À %?ºyç®’Žr€2–N"ÞEn‘< ‡ 0û« +¿õÖ©7_{ãÕâåÕ/~v‡ðKð8jXß\ƒH𠆹´'Pîe ¯ÁŒ7”~}úø“Q  a̾ª5 ¥Î):L¯x‰3 9M¥¿PF7¹P”Ù %ÓÜæÞ€p‹•ªãÖKÚS®R‚,dzà¡Xî™ï®³¼5ÓÕç¡Ty…BŠ€hïà«®H Ú’ü§%ì-Íὕ‰Iõ¨Ã¤ÜíŽçq³é:BîiKÚ¢˜@€©à|°?Õ -Àñÿ‹_’xË=O>CÜ/BÃéÝT$¯˜þÆM²€ã£”!7oß‘àl$gI P'àì™Ó§Þ¦(ðµWyûÜÝΟk¹ðb È^ü’•Ó…Cv<€cþ:ò®³=+€öåT¸ §¬ŸRõzv$éh¾\j«ÕµV’ÿ ˜ï±«ýáà»Ê‘‘ˆtO$2 ŽiP¤“ˆk"éÃÇž<8sæÊÍÛŠ¡É†{ôø)ÔýE]QYà‘­ Ï‹ÀDü'RЧÝ& WXH'eKRd i¿O< ðô‰¶Ò&â¾ÔCy,S x_Ý+§ÎÜQäÿP‡yšª4ˆ“#Й“"ÔþÃá\±b|É©IHžn7Çu‹‚ÿvæé\ +`е¨+·€ ØÒpggM›ç§m ¸¨þÐ#„ ÷„÷C©¼`#O pdþEC`ͨH=—)Šü“㊽'àÿÄøØø¸&ÇÆ§ZÕm)$ Šû¡Dþ”FO5µ!ûŸT2 $ À`)€$ ÊŒW¨SîÚ¿oŸ¦¢¯Óÿòþ7®‰Ù·ïÞ½oß¾ï¶þ +wïˆùôokDŽÀ*@FŒ€6£Ö0ù€o¹Ý Þ \HìD@ ù +ˆë¦¯óÌ|¸ï~üqÓkà9èß{ÿ}ùƒLC—±M¾¦×Ößÿ†”á}‘ßd­ƒ€6|ßÃa7>¯¹zÀ!HGatˆu gc[píæØ¾J@v7+KÂá­J<|úñãg²æw%¸·îo‹ÆŠíå ¤ Oß?”H@o‘Z\¹I`cÅí§Úâ‘xÿøÙS/xôøÉ³ûž‰örôZ_–ࡎ Q%ž>ÖŽµÍ“'OÄvò¤7¯¼ýUíæñ3mñ0ãüA$ç0›¥®e×h4—JW‡3v!€$`Jq"FÀµ#á< ß”Èȸ°ÊKºD¯×rû’;;ÝVs â#Y¤xj<6†üÆ^Ž&¿ìÁ`Ÿ¿_%‡sµºg*3OA#ŽûM¡×“v8ÛCPÚ'’@ÂäT£ÅÍð| SMÅÿ‘Lˆ?ÈÈíÐ1œö·`/vã6üǧ&EvÀ‡UŽ  þ—QñžŽB@9vèOð³WÄýÛ˜€Û·ïÞ¸¡ÔŸàyLø¿{.nÒ¸<ÀíÛ×îÞ½§…·)}ý©pöŠ‹h8èM² K;S :®®Èöuíf<3_ò§^€{>´¸š¯±ÍµM +ër;C mû¾n¯A †zâ}ûz}ù½ŸÁŒ„’ÿ;qÑáÚÍI…é¨ã`þW€\`s"<À¡g>ÿŸ>yöìÁ+×n‰ÿÄýà½ÆH“ÃYQŸùH‚’êOM“`üìÙ“§²û¬õìÙÓÇO5åß3Åûž<{üõ>{&3!±ÐÚò OÍ–d<¶7¸ûðîg¾y÷ãgϤ$Ï?Ic2ˆäüfRÌþf£µp.îÅöÊàœÑB׬ûý Ñ,Ç2í€B€Ÿt Ýé]^&pû]Òƒ._"ÔÍ׃"ZÃÀ³‡ÿQó`°ï1!Š&*DP‹~€IY…‰ó`¼‰ß7ã'ääø[²Ìá[)x„v{iÉQX~¬CS¤÷Ãô6½—Â(ÀcAJ@ìwöá ÿþøÒkoȬåoøŸ>}– +_úß¾AE°Ûd(‡òä5käÞýûwïßS’"grîܤ2™Ò T 8KÅ ÓgΜz›Êßàu€ÀåÀÅíä2îˆrõNl—ô²€„Ï Ç„ÿf<Ѿ€AÌŒŠ˜©]Ä-®A>?…bZ˜c‚ÏA) +ŸJ΋ ÂÔOÿw" ǦÓQÅÙˆà4&è-‘ @ +T 6>WêûñÃ+gn‘k÷H4}€*<~ðñãÇÏDüO|,ºj‚H]|üDl¹áË*<{ò\òèñÇh‰"xò bÑó'ð]»Æg<}ü\¢Á´Ü‹å'¤ yô7Oó¾„ãÑógŸÄ9 ¡Ó!‘?„ÎÜœ°ŸWkÈÈ 1·ÅÿÛú)Tófõ4y"&=ü¯2¥–ÇÈPÚÞ¥€k¤€›¬Û­»ïüV‰öq¼"¬~,Ñ òÇÐ +ÿãH1¨÷A•©à³d|1• Ÿg’zùD›i^\¡¾‘\€.:çf:A±}T7àά3ÙtäÀ;”jLyØ(a1) Ù/êãè%÷…-ÀWÿ•šýQƒP½ì&¥É”“ ¬øÿ5¿î?¼ÿ ¸÷€ªc·µÞMªŽÝºB•ѳg¿éwƒhGŒ–A +£Á)Ȭ[?… +v×¢Ó®ÉU0¬˜ˆ!ˆI2õÕ«‘ÜÂkä c°$ÄÆî¹NžEÍ¿yæÆ-2öÉ©ï?|þäã{ž>{úôcõ½/ …xN^ŸŽ([ñŒ{]¹vWöA&áÙã?Ñ%ÿ ;^~3óó´ 4 ¢C¾enÕõ¼€„p»YsBŒY.±à¢J—<@Šyι@ü/àºý¾>,=Ûü½IP ý”Ô1ÇS¢Ó í)±Œx·„©ñKJ @$ç^ç3.¯„^{­ÛÐ Šùiœ /Àé› ¿Á~BnÜÓ"€ªá¤­–n‘@ä/ 4ß24îÉë|¼öSý“³ë6C(Rªð>yÉ÷íçþø9Ñîã{×Îܹ':BêGÏ?Žì´À“ÇŸ<ýXqþSh®Eêil»Fµ¯'ìééãLjEÿÒ„Ï?‘'ßxðTÉö§Õ=Ö“ððÑÛg¯<Ð Â'2{‘Ü7x €,€‰Ž›ÜØH@*ž;é<ýܲ{o) }\ p& [o±Z’t:r¬ÛíÓÑ¿àGHpA xØÔŠÍ‹¿žƒäù¾0y©4¸ò¢aÄ@â?2q˜rv]¾kh&½Åû©Ö @ÂÏ"EX@$„ø ²ÿJìuJ´02ù&÷í^#ð+nK‚€,À Þ#!“Ÿ:á]Ýûžk‘PÈtïá݇JP:|7*‰8þ¿qóÊ5I€,€[¡8}Šæå^{å7(û¥W¢PÝÞ<€ˆAó/@6\¯¿#RqµEç[\‚›P ¤f.óBh^'¤ T-6ˆc*½ˆÍÂìÙåÐzT ô›õc´öÀÑ=Æÿ°‚¶b“cñ–óá°úÓ'Êc D¿Ê(>W*àñ'®½2Sx/‹¡?wªüù³G"¬V…ëZ¦´ºÙ.øäcõi ±Z2 d¿ð xþñãÇd# (Œ¹ •ÄþGòTáîý[ù{Ú¥’Ï%G{1§´þ HD óìÖuŸ}£}³zï­#I|éš?™€¸nJ"·tÝ!#ï¾èÆN•ð6ˆoèÐôªë1ï× 6#¯^)jׯ‹áà6,ò†òäÒd + MÀÚ²ßùâÔ÷Y^ÆÌH ? ›%Õ®9¨½æ¶¦ó/ÑTüO`8@ +Ьø/rµqßIÁý:RoHäÝÏêÉòâ§Sÿ·oÝ»u[Ÿ +¤Ä4Äú%\GTžàá½»b¾L€‚Ä-ªˆ~„œ¡àô™3d ˜ˆÐ/ì®7‡€8c*úŸ ¢J§.69K\ë¨=‘wF·cÚÄ`gÞ)pQ^1Q‡’X‘DmÈŒ¥=:?ׂ7…•ú¨2|^¹÷yñB›ŸÛšÌœíB¦ÉØ‹CY¾ö‰Òÿ‹{Ÿ<ºvíU|I ž= +ž?ùøcÇöŸ|üäÑ%ð?~òP¼ÕÒ§Ï?yþŒÿ'Ï?þD«ò‰ÏžJ,ž?z¬½i ¤åãÇãõñ Ÿ<®õýc.×SÌøì)Ñ¿ÜÞµ3×ÑŽG ©žärE£€¥Xú‡lž—ÈKZ€£áÄี@Jh°»»);¿‘UÂL€¸¯)$íôZÍUѲ¸óàÁ­»T»'Çp[ÿPí„æANÓVøkX#K._Þ~°/WO©¸"€Ã@4¡ó¦˜Ü@ÓÑ1ÓQ2ó¨8 ´£ÖUú«@TR© +©hB±@-³QÞýò3/gèˆ ¥àˆö9&˜Ïà˜@i}Ñ]7áØa¾c@–)Íð*i„CVàãOž‰bŠßo^Óãyøè¡hýˆh_üA%ÙÅíOƒ+z†Û˜üOCy¥Ù¥kM1Â?%?@+¢-ˆ¹1Þ–HÈ:ø3ôà‘Ÿü@é=ý{7¯H° ÿJZ4 +) @ gPÀ€÷ùâ û¾(UüÞ{ç—”n÷”>þ ê?TÈï—° +×2$LäL°Dz@k>ˆÙ_tü¼v… ûúÙ8óâÝu~ì ¯€ áÄåà1õü€®zËR€&¹i¸ía­-§¡ÔBì²@\$ìW§ä¿’!éz€ºñ‰f¦ÿÝ'd&Y~^÷~[ü¿rãÚO>ºyE†þöûTü¿ÇKdyƒŒ¢¨S¦øŸú¤²ŸwµôÞ­y÷Ö]m"ñP:€f§HÐ0HU î¿núnHˆ«ëÖZ]ÓzØñ’ÑqýC@,ªXž|@ÈI|öW²°€‹ý±¿V³AvëI?[Ñ>ÈOEi©n¯BiËÕ+Ø`íŒá"G™(–€ü8hÕ%£:æöË\Þ4ñzûõæô …v^“ÎÕU€Ýþ“'÷ïܺvSɳ'²’¢ïZ&P.Ÿ ¹¢½ðäc™~æ…ÏøQ ³wæÆA¢!]¤z ÀL'&"ú·(ªËy €ó$ç‹$€PäáŽSzÝ1üZ7"Š"€Àc×"@Àq…9Þ +f8Ð “DĪ®èxmRµª.ž| Ï¡€pQ¡/£qñ?Ó´Z Ëm\ã˜kÐ<µ$ZûF¡Þs°¿çªNMM::j;0 bGi·“€àÕ7dH\£2$@qË[~#ôÖ]*…Ð …’ƒîË >zx_Ž’ZbZðèч÷£N4qƒŒ@²Nå+§¨ +˜p  pqDUà Hüõ4õphÆéÿ“Mbv1?6FBbUOl·æcÉü‰¿¹§úÄz)À7T8¡@Þ×Ú±‰à§@q\%ÉýIúÈÓ¯KêKà3†tÓŠï˜Î»“¨Þx¦HùéóÇWÞ>{íÖÝGŸ; P1¸ ‚>ÿWæúÇA«?Wį>Q½<»ÕCúá>á_9þ— Häù] ͬh¿Pï +ñD†@û’axÈ[ƒ÷äó>ö¯žþË÷bžÏ c†Z s_g¥Ÿ€ïŸ9r¾×œj.!“ÿ£ ^ð}£äxW DnóªînµC4Öà@¥^·ÑÎQ°?ø>Ýç|ü%C]´UB ê8‹„îóИ”Éü $ ó¥¼½a·þ(À‹ú¹vÕ@´N¦ýÒ{çD}ñŸÜ&þW¨@W翜R@FóûãÕWßt-ÚŽ¥å?'î|tëέûw<öb÷E}ªš=’Û|xÿÉÓO>”x|ÿï“Ò.ܽ{·oºæð[7®]!C‘¦EßÊÊqÿ%»À@èÖ¢Î~Ñ ÑŒ»aÞo]B„/¹^cû0`¿ÐWÌ õ›Íþ~˜%:Îsõ­†íìÒwüS3?™¶ ²"Ú<ÏÎ;ô2#¯àñ4ÇgRŽó!S9€6Í*¬“ù_C-P‰ùO>yðög®Ü‘S˜÷ì±¢b˜¬?6þãçdÌQÿÉ3 £Eðç0øXŒ— ÀêO4Nªá Åäh±ÿùÓ¿@1žÿ™dB"C*áÏžë`îܹsãÚ r ?þD«d¤_áù3%ôiû+™Ÿhˆý Ð.Àªçùõó"þJkªÙÕïHé.ðYø€Ï8POÖ%½®Ü=,ö媀ZœI¯ˆèÄÈ~1¿áçR0;ƒrmw (‚BYæ¿9z +Ùyš-pðXG¹–W)Я¼œ‚ÖYr¾aYzhúPi*Hñ—œ’b­Âû¯ôÿ@üŸü±¼úÆѨÿY€½¢XœV`\ÓÿÞû¼ÂkdT“xÂ[& +@¼jòðá}ƒHÈܾñÑ$ñjðéÓ´Z @€Ýá<ñƒPt<§~«µy¢Üx²º1ÎH°Ú§€Ý_ÀϽ Ã; ô˺¿Åñ$rM g_n9 +^.éˆlÊUÈ\§Dñ„`þÏï +Pñ§üF%‡’]â×SQöÙƒÓo¼}í&ï䊰2î?z‚m¢YLu±ÿÇÏþâ_‰èŽÄŸ?{¨‡&Ð\j‘løXѾ”’ße<úü9eˆJ;h®€Täñs=÷'JäÅ’§~ƒü¾,Âý‡·ïݽIñü?‡^ùæZ;uê­*0o·nøÅ½`Èt«µ¶»{™‡Vðÿ@ÀÓ¶ ˆ@ ˜õ ¥Þˆüý5’q4+PºÐCM»¹¯IÌoZ7 8­¡¨ßûV"_£„üK7 „ƒ2HÊŸ özµ  ²™B||¶ DåðûÏ>ytú3×îÜ'gæ™ÒðÏŸý™¢k1UѶsþÉ „Àˆ :ð9v_TFG€6PÜ/Ö#RŒOž<– ¸¾‘´âùCy=pëÅÓ'îÝ»yãìGžjSª$kþ0&&Š€S,'–bÿi~í ­¼¼‰@.Yÿ|o©ÙvbÙÀ>H7cœ<ù¡p… ¬½Í–ì}Ý8øÛ`´*Él ÀŒ ”5+a ™ÈÐ(_?´Ì+ú:/)AB£@¡B¥Y +(&ëúp÷Ë´|àEËå9Wü§d‘éô…öÀ´•Önw)¦fÓäGÊö&¨£Pñ þ’‚ûâ7ß<õöÛgÎ^¹öÍ+Ý ‰Y^ÿ¿¯ˆýî]74Amsê›P<Ä¢ŠýŸ<}t_Ú@Í Gø€GwoÝ»Ç[Á4xíÊ™¯ž–¥øÊ›¯–Å€yÏí8¸Óo7Vi×É ¢ÓϼÎ4ÕÀcžw2Ý`´š À·É ÛÂÊ8 Pm-­Y+€߀ÿƒñø0"8æß§œO”­,!¡ ã2„Ôƒ š¿âv¥ÔÉîöü‰(.×ÿÉ_˜Ó,‘r?yŽí$ xŠ/­Õ×v"¿DãcÊI)<׫ÀÓ?C ´¡3’G:Ždÿɳ‡÷°yd >Özv +CpiJ]ÎÍÏo4fëÏH2  ˜>h»IVž@Óç—Zd¬·']QÚs'Òa*à¦ö{J3Ä Ï;®ÐC‹ <Í=zÂ2”€ò¬!òƒ v4kçºË¢¥ù‹ +èï UM…€” OGLް­ˆ'Ïn››¹äŸi‘K=¡¸T½ßÔz¬*ú·ÚŽ(ü_ +ö›]ù*£™Üo HC@.¸y‹¶_ïÞ»‡¾âþû0þÞƒ‡Oþ by²žŠÆDd-À:Ð׸XuÅyÛb{,‚f|¢¨]^@úà¢í^ªaUÐ3ªGÿàáÝ›×®iâ/XÕF(D`qq+šš‘ 4I4§šÜ!ý%¶ç4<¯nýüf/ªÀd& à ‰ø8 ËF â<§HtmòÆ/u:Jîm‹Û•`~%é’ò0óŽíGam)“âf„8Tq•œÀ\=n[ˆV3>%ê{5‡­KÍ4¢õˆãù mÉ€•€D€óH”ïÔã® Îÿv»••þ÷Á+¯½yŠ©ÂKCŸ7”¸yWô¿O}?y*+åGæÑ#Y@2ê?”D…àû4rÀ”!œ¡ÀÛ4 0Â\œô].‘w°€ÀuñM ˜ù£@Éò¤}Áþ³P,žFž0Q´–ùlÄ^aÀTI~²õL  •øÿòöï½q]Y–/*@ÐÈQMܪ(2TAdv„Ί®›€ZÊꤚÓ”’…t&nƒŠhÇQ§ˆ¼‚±„þçøÏĵóÚJÓeKVŸ²Õ§e¹|ŽÕðãÂþ¾_à|Š;~cÎý’rfU9kîxîØ±kÍ1æ˜k¯½¶>†;¦3ð«ç‡e¼—Îg,̈/„ø/^!€ã P»ð›/¿Ô/_ZýíÃ÷?ýH•#™No½ÏÉ÷~RDÿò³o>ÌÆ¹ú_I öOùÆ2šO@’±É€H@é‚&- BÂÑŸ³¨}­ÿ‹§¸ Âý‡$ß|}j@¢?ÍCËÿ:6LN­z¥&‹/šE!Ënë=ʼnÿNû÷ä߃®\æîœ`ðo‰HWŸ?|Ÿ!|q™À§Ï>z&áÿá“ß§}ðÉSå +ß÷¸\Fü6ÃÁœøó509FÆae*J®ßùþN´Çñù¶Zf~fVÈ/¬d€´‰ÊËï¯ðS‘‹ßóÙ%nFç/©uO)€´o¡€ÿ¬[40ŒQÒôÊ©‡ÚÊHòÂb,Üþ_g=•F_€¸è¬fg¾)Œ¨ûÍWOVxïõ©‡† ‚{Rz°Mïž/>ÿÚ˜ÿÜ^dà_Yæ ±…hýO£ÿçœûö•à­ ?é ÿèi€'Þqåõµ.‰€Sìg ý”ùÿòW¿ú• @®LDSËF@U¯MÑ,èßž˜h0æ•Hø£ P ?{Ì Ä|VZ î/­ÙœÏàZ ÿên9%úeé‹…eÄ?n£MA{ÚØ•0rr'ø©ÞT@دÎbΜ]ÿ²H8³g³‡ ðçÿì=#‚ +€çíqdÒÙ 4a°AÁœÿ˜ õçØŸ…xQ~ßþí{Œþõàý‡ é¦þ'\þìɳ§rž/>“&`L9F¢ýX?}úô}Æ©ÿàí÷JxX°{«+Ë+ËÜ!ì”`|B¨,Нn4šPþ~NâjßHÄ÷?¦ +ˆ—ɤ1¿0§×Ešç Â†Úøî–’ÏÃÄB¨r,Nµ¡ª=™jpôþƒ‰Â˜¦ép¿òk¥ü‚ÿR7Úy­¦Ì]‚&+«] ` ÿÑÕK/¾Í¾dcîØ£," ÿJXÕwŸªäðœ Þñ3Äóªl‚ö?Ô¾Ö¬¥i=ÔL}!køì³¯´ImÄ‚æ†?úøÉï½~õ{Ë¿þŸ}“kæûM“€±oS “û¢ +åž ü Ì*`[XHà^ÓŒæjÏJË %„ÙQøvoYиœ@òØÕ¶RÂÿ°Ïe©56uã§ZMÙ‡ÙeÒØ…4z3UlÔ%qÉsþtÇß{½]; PÂß& m½õ8IÒEäY€Ez”ÖãÿT¢“H?Ýþô{ßûáåË— ìuÁ—¹ÃŒ@øèéû’™Œ<ç‹Ã>æ¢0Nýn†¦O°èÝÀ5Ä\üwË«J. ÿyª¡pû¸8µ  ·ž@Åê9ç®`>ÂY¨@~¢T©ÓæÊùv~&lnžSkr–œ÷,¹Äzg þ)Ã*  Ù˜cH^­Vøç²\Õâñ6=Äÿ €e@AÐëHËj‘ù&¦a9§2šâ¢Óx_jV]­Ê¿þøêW^—N{JÃìÇŸ=ùL˜ÿ˜‹Bæë• 8=`bË\ M¯¥?ÿìkeóœ×ûò+–Ò ýK¢áS8ÁkxÆ91…û ªÂiLPå?}úé“>üàý{W¿ù#­OIBæý5 Àþ‹‹ëå5*õu¹±$€Aiõú£)@6hœS½ÀÏR4€œ£J9™«ÿ÷” …r’ÄÿhwrüËøÝ[à.ÄÈH"( Q_³ôÅʼG'­÷Ü6Yl>,-.$!#ˆ›‚¬+ ˆ«~µ”Ã?¦f– +W(?à×q10˜`GBAùÿ¬öm¼×íúb€òn'@ÁþÏ{•¥¡¾è ´,Ñ΀ÀŒÊݦ>ä^2Ü æ}Õ9WI÷‹JOù¡fD+W¤r}Àƒï¿ý¡ïß¿÷w +ȽAʳ€žðü¯Üö©²SÛ|ø(U0ÚÊ~ >F¹Äœ”"­et¡òTpÀdâ°Aèp‚]zA?ˆºRÿ›àb«½Y*€¦3¹”v$.Ë?+BšRŠß +àµ,þ¤Á^‚év?(ÿu‚IµMYÎÆâfæö=U +@¦ÜýéÕ^¥À‡O>}f2Ü2 w~·JPÚ.VøBY§Â*JÁM,éæ{åö´|ÆÉNù‰Ü>ë@÷sÎA™¿û*ÐDßOÞ¿·üÃe®@úêã/¿>a‰þ4À/‹«‚äÂrsiÑw( «iëöX‘MeF +0(Îðþ¡ÄÒÜO.š¢³Å°³Ø\ì!qÊ{Kî£d_ÈJš ä§´hAp3mþëIãV}ÓÆ®µn+@~ß0lô²+ £{þ¤=v„—§ £›«AÝÀÁ»ÃÌl÷eý&ȳÊÿË@å3ÿY»s€úõÿÇ'F¿ru…þ»¯r@î÷×ùôÄ#ÄǨP)5=„Ðÿ¡²€'~àøÏýeÞ׿޻ÿÛ¸9½âÿ•KW~øÃ?/ ´/P; :%ì× šžt×·HåBÚ)˜÷¸⌒Â9T "@¯Æ¿—ÀU €P Ç@UZd +°ŽhJÌ—ñÿŒ^ù\W÷iŸþ«@¡Øì{v½0?—ôM mÝA‡±å/Ó8Œu³IÐõ&  VHðýò™O>|òÁ‡èç>µ×ø“½+x“Hëú9ÿ1“ÂÏžÚô”i±„ñ…Ò:­nPÖ ü_ J¹Å€4ÈÀ÷#TÀ +(HH wѺ:´ìÒP¥¦CKô0ÿ +1D™³ŠÙ"zÛiÀBhCNY0}Ž*®·ôúŠ}žú}a]n.«ã¿?ðÅfàßY€ŒöMU +ðŠü³—xõÞCÆòg€0Á”õáS²z¡Øñœæ;Úù˜‹~C|ú©O÷‹Ã}sÂçÊþÑy€ðþ¹Grºì"ù÷LYàgR}ïøú½å-?­è?èŽi{é—¿|É$PÚâ¯éô ©š¸qóNS +À 0QÈÇÅ1 +üO)Ub XpʆLk8êµ›Ü#´kâ`ļN¶Àp |à,@B¿¿þ~X7mÌ>f›©òjPÕb“þO(€0€=¸ÔuPó pþ³‰öü{¬4 @a {øŒ–wK €b<×(ã÷±ã ùo™B` ÃÓí{ßÿÑ._ºre™1Á_ÿíÛôzÜ N)ŸRùŒè¹)ÅÓ§‚šû©wxÿÁoï¿÷ú{Ü*øïV¯®FðýïFûRu3`*SAúb Ý‰F#P©h¨€á/ÓK _fg! À¬.ÀH@M¸ @áÅÃr%ügæ¬ÁYchÿÞ6@‡£¿Øc<«èß]*þû@Ÿ¤ôã`ôò8çØ+Ln ,¦ÚÆÏ>ûàê÷Wïßÿ€K5$ÐÆK´üñ3g=n¸[d\¸I°O0‹<¾xJ‡_Ñʾ 1(àKäs³ÍùìSÆ„óŸ2 Wñäég B +ððÁý/ÿpYtBkâIûåK/‰’L?P +F`ôf‹O[;qšG%!üKÝ&µDóQýª9€¯°ÐcS P4L\X’;zW +àøyOG¬ Šÿ³m^­~Ø‘¿Æ§°²_4aƒQß]äVÿ 3õ  Šì¾`Šü>®Q…`·… ?ïˆ&·{Ýv£©ücøwüŸÆ¿^¡Ùÿò|ãöàßû¾8à‡W./ûî ä xÿ·þà!÷ðÔtûãÉíeÝUH2Û†¾~ÿÁë¯sw`…~_VpéÊåKÜüÏþ4î@üoþMÂß + o‚‘F%LÛΤ³>Þ1PK[®~Kë ºRUèÿ^æúÈs‰ÿh`ÀX)€vM4!<Ë-1W +}jSù¿2¼S\HpÒäˆcB€ ,o3¥Z-@HOPA·—¾ž@Ys4@ŸGZEÊÄJƒ¿þþu— ÎÓ2ZÓg¾cçGZHè¥÷§Îþ¹Šƒæ‚'¾¡çgô첕Ûab½>yö=¾ÄZå3Õ3¼”þ‰cûYÍÓ%ûžy?ýè£?øàÁü£÷}R‘ï50ØË‡OXš›…} ìïÓ”>üÑ÷àý÷¼ÿ·+—¿ù>Á öiÚ^zé%úþ ¼ô’€Î@?çJ€Í,ž‰@œšË1;­pÀË.–AuPðgH°…< }&Øá /'šíƒ¯óšÀ=‘˜’¼Q¸U:Ûätp(ü;»g˜œÀ~Lì€ÞÒôS,Á—±ûzl¿Q_k ;q¡ÿBÈTJM£Ñ­èÐE˜|•¨Ü|†näãÛ½öB£ÃøBòùŒÿÐþé˜}úT;#”þÛóoÐé ("ø!ÏýèGÊ +|¡àÕ•Wè)(cà@úùöÕeð~…—”ñKòÿû 2¨Àÿç´:þ/çÎ=WXÂw÷µ1é]ͨ„ãÖ[×K©8­G•pÂîìÙ9‘^¡üðÓ + Wì `¯L$›ÆÍ8߯Åã2€¿‘eNá_ƘßþÍL5ûi¡ŒïšAã±*ÚaOœ +€ú›²3ÊÀ„ñ÷ÞþàõËßWÂFÇMå_\»ýÞ{ܹóƒ·~øä}›]¸£ã“‡úýí‡Ü×YÏ÷Þðð½¢î‡ÄpWýý}Ã7†wÖ*<û=f) Ô—÷é¦ IìÑÑ“;¾¸üÃïýèu.e´ÈcF ÿ¹D€à/àj õÄxÀ?ÿùKTÖ“¹Ï¾X9EøR€l4„PÝèΞ£Ã†;G›•P©ƒÄ’ƒHlk’@Õ/;»¯²Uä%d‰úšyk§J€×äëáü‹-ȼÒü,«8BÇø/Lð.Ò|À?¥0ÑCoƒb•[{4øC¸£ö‹v1Àh²Ao ^ŸnÓ±ÛÇðï×Ò2ÚŸfÿÖÐ÷?º¤L@ù;]}·Àÿ´òŸ|Çp²Eù¿c¼Ÿ×¹ ïººÂe¾!øÊÕ+—¯0¼ø´­‰[H”–ð—ÏuÅWmò1S§P56áÖ‰ö×ÿ\[„9I²â鯡‚ðüF°R™/µÄ‚1ÔnÝX&:™ËŒÿÈ„ÿè‹GÙ)„?§@ÖžÍÖÀðÛ­ÕyÄeÝÓ6’äXè;š—‰`Taig^a÷ÖîÝ{ûÅïýù9s#õ¥Ä‹dm/Þû;zb©Šô䢬×ïÓ$KÃì뿽·¦ïÝç, ž¾Ïü{zhQ)9Mþêß5cíïôšË'áߩү®,_úó?ýþÕ·9ã#^8få·œÈ +MöbÚàZ…MÕä^Ùh0@¡Œ”̨©sâ8¾/@?1+m­² €cP@a¬›Œ*¿ ´L,kÉÀΔy³²øsÝÀoõ¸#1i¼-U›Ãª,!Ñ_þZ´úöÍÇÎÀxÁùEq_&àòIúK ) Î̶—º(À`Ðnœÿõšßlq›þSÌM€—åÑüŒô•ÊÝ? +~þ’¼ruÀÇÏ>଀&'ÿiþò!qã!7þ­ï(/Óª<,°Aaû9½&@¥—*á¸M)€Mu ÙÐ'Ð1::xZÿ—  eUV “ßeÀ;A_7òš—Sœ«â?#õ_þÁßÔØ¥E‡]¸©Æè×^qiì4¼u^7"Éh<¸=²Û«Â…|Oœ"Tu±QWbØ™…Ý b~ûÞ÷¿w‰!\îq'úÛq&çp¡y£CÇÛ¯sÛFÎì¾ýößÅ›—£™WßÀ¼þIµ±ôý÷ûöoùÛîôkyýE^!~ì¾>Ý[ýO+—¾ÿ§ß¿÷wŽË½ª™„~2€ ü¿ôó 0¹»Ó¨ÕlÝfœ<ž‰ÛK¿6¬Âš8Öô?ç €úá?V[ ޳˜)À«+BVDdÿPÀ® hŽÉ·3g÷¥y[Ô©ªÛÐ + ¼ý„,i»l%N?Ç—ÐÑ冩ÿä°˜-«•GÀ!þ»KRL2¹Ûü‚œyFyðx2€zƒ®Ç× þç%¥á=de€eŸÜöý)‚¿¸zÏ×¾ÿáý~¬ìñãž={ö„“H_|úùgŒ#%ûü+zš<û‚³ÈzpS9½<ýì©>q‡é?x資øÌ=e—.•ƒø?8¡jÌsâ]Ž[ +@‡NO@lb5¯%á>@øŸŒ{ü“âÄBÁZVàušÄùsÍ«.€¢ }‚À¿~QqâŽÄÝl ¬L3ƒ|±zɲ¸Ý Ï~ÌÕzì!œÛnƒÿ—Óh,"§pÊ +<£>LE®Bÿàêåï½ý@Y¹Êþé§sÃðgœ¡¡“&öì#nçóñ§OhÝ׋›ý>zöäó¿  çg~rKq30ÆøŒ‹Šž=ÑT½´ûi&ê}éôÉ@oßñê—jþGùF‚S&Ô ù% ($¸x°Q»Ùbøº51$D/mY“³qêGŸ• +€6ÍÅfkÝ` ðëµd¯IßS›û‡ÝWÕô7=p»Neø¤L›ò¿êÆ]Jë#ø‡å/Ç€bÊ„œÁÏUë12@¼€,ñÏRÜp\2À¤)w“ÃYhßæ–º£}Àb»;jÏÊÿSø÷É¿)S†~ª}ïÒ%úÿ–l’^À>yÊE>8‡…p'#žNbzû’ä_r98g9õñG44$áðÞ¹YJàů,_úQ²L9$ؾÀŒ #ÐÄÃ'êÓbønÕËfA.d6aV1íMºÑ˜PC…ЛVÊí›Ü‘Æ(ÿK(À©øÏpݶiÐlRÎÁ¸gM°S2ôè=¤)P•Œ‹W¯Ü¾aÃØ§;„q‡©v-€;ë>}ñò‹o?xBç®ö9ý/¿áǯ¾ùR4}C>NÓóõgŸ}ó…çy PÖñùüÃW}Î?¸¬ïk¾}ý5ÿZÿÑ~PßYÊ!Rø”³¿÷—/½øä˯¾ü拯èGTŸ>sÌ7 $ üòçÑ”=Eë˜ÙŠ Ñ„˜›ƒšÿ¹U@Ñm²n(?$P@§ÀÿæžÞã¡ßÂø…iKÞð) ГkÒ™!­Â¸ÈŸ°J  €­Ûp7 hÔÁ–ËøðþÊøÌ,P- €»…vw°?ê4›­¾ÀìÜyâyœUŸOP@Bñ¸}ÿÒòòꪇ•¨ûð½÷Ÿ*Ð?ý˜ë~¸T< Nú¨–?–û|L7ù’g>{ê?_y>s¿úò .dm^¯Ö#zøâKîþÙÓ§ïÝ_½´ò!×&¡L™U¿LøÓÿ¿úy뢧VË•‹{ÍVOŽ­cŸ¸ÀÇ_˜r£yüÏr~WÿÌYðiy.×¾3â,@«ùí + à7ý®¨rÀµ^töÖ”>+M³÷<‡Ä8·”ÔWm€åÙ~R™\È6,@æcû7EÂàÃvk©d–àUûƒ-")oEÀY˜k´{(€–R‘%;¼PŒ)ÃrRŽÇÑßíõ¾—XCÏsðÇŸ}þÍ_sõ—„è~æþ%d›¢§H= ”܃~”øÿa‰ÿ@}õšü‰‡Š’/f€‘†¼ ÎIP£t … ÿä2@Æ0 \h(¯ò_áK 3€ +ü±óÇA¿ßh K§iÉ–ˆÿà—u=Э,ÙÝoªq§ƒÔx|Ç + ¿¦UC‚}.uþõOW—_øô#æÉu½Âê炵è~–4G (d+[øìºùåÿï:ïkÆ7 "ðzl- ŽÝfA hmŸëý™æ²1ãiY(à™Dá‡Ü_ýÑÕØð7’Ç,±Ÿvë—·þ«H Jr;™„ðw[œá|é‘ @\ŽƒS¾gg­ÕTS3V4rpZT¡“µ •xÑÂ46€;¾à»½.0ExO‰ÿ“­Ÿ{st«°@¿lJˆ*¬Ìún@ô/zøa +ß´„Ø´_¢u@á¸?ÙÞŽ^Íòùè Å X_‘KŃ—Ë}_i/§%O*‚Ê Ì~´Ìm¥îs+ '=}Jß/ßUVÞ}=Mî<޳péé—_?e¬‰¤õI ~DsÑGÄX¢ï½ Ð/è°ñ- +€±:ö‘øƒjŸÆªP +°·7ê +@j‰–2I$@ÅÕÎ*~®Q| sç-ìqœ (ñïøO‘Æ«^RŒË Ô³€< çÛ +ø ü\úŸT©Çú6üR@Oè÷Tbeµ@`—{ñò½·ßúìÉg_Q-„hYHò/ÈúÉÑ<‹úªäÏú±ÁÏÝ?ø¦%$ ”ü³­ôcI‚‚JÜôàVÂ'ß¿·vyõ Ju0m\ò“àû寙õ³u)€8Rbܤßjö'ã=}‹šô#€( θ6ô(ð +@353 ÷¢yÁÖsíWÙ€ —g¬²€¤ÜA‹²x´(¸'ƒn«"€à>8šmæØU¾1ªÊ_l~Y63”üã<`¯Â?à_˜™ö ˆ§ÚµJ­t¡¿hàJ Ìø/€î¡þkcé|8'Oï.)àâµ€6u +þ}»Á„ü´¡^wðöÞÿЗ˜~Ì-ç>SlW¬g0…r9†½å›Ï¾þš¦b®)ùøÙç_<ûôÍÁ’\¨àþ{Ü' p)À°îIug#€ñÀ×—PB—ñEÅÐy4’ Š‚åvè(7†þŸw eõ{@€”q…º—K‰jù?V¼·‘êf€Ó5@£«ýmGäýÝõþÛpµ:Ø—oàŸ+`õbÃÿ(À”U ˜«éÙ‹W_ïáG4ï+þþåWB§A Êj¤i´ë…A3| 'ýÉâüæ†>ýá+çΔú³º/ŸiÝ D&9(¥÷™¤ÞûoÿÝå«Oµü×JŽhÇþ/½ô3Iÿ‹?Ó$puÊÆ“^«)Ð`áí& ÌmDÕ½J—3-P¼…ÞYX˜0;CeAœ=gÅà_ñÓæÕã:ns6P°ÚÆxðr»Ý°ØX© ÷)ñ¯ÍóÕVëØÃ°?~i†M_ ý`œ¡Ó!éo5…~RôR˜´ó/Í_ûût[/- @&C +ÈqQr†r<{| +üÿq±²I®nÑÀ5À>TÝÒïŸóCä\ùÿ1áOa¬ ¹ž%ÏðL-À%£øÅ§ŸA>}Êÿé<üúoï½þ¢r€´DÿÁÁvçtà3þU–”$—WØ„-:AR3VÊö7heO° `üËk¤ÿå3oYÖðs hÌ"¢úg=wf:ÿ×3ßÄÒÏÓŽRóíÍ=Ü>FƒÃ- øÚ›üuOÅW)€ êVœˆüù³¯Ü{ðáÓ'”þ4Š‹vaö›ÿ[ßa -ª:’œÿüc¢»Ûû¸ÊW9„&òƒ_1øæ‹Ï?Wþ Å|¡„‚wªþkÕ8¬Ïˆ"Ÿ18Ôû÷__^}b"qbÝÿ6 ý ükòF¥JtãÈ©÷¸$< dΓ¢ @ » @EÍBÐ5Ðw÷¯¯Z©/#¥±oücƒñ˪Å)P2ÿ0ô12Jg…%Ô  0ûjú«`Xk(Ä„~M ÞßémÀ&1€IÐ"üÀÿ¶â¿Àbøoj°ˆ„~œRihn·­¤ »Ð5­EN°&§íòê=À÷¹ ÀÜùóc=¸Dìw€Wâøéçâþ¯>þœð!O¡MPl yöéWÏ>/‡ +ŸËÇ>xúÁCú¾Ç•q‡PÛþþþkzîì´€Žx‹ÄÐÇ{FI2[o2ªc ¨ø¤Jü»kD)¤ÿ… —‚^.âZŽ×iƒæÎGóò¬)€–Tì¯â¿-¾°;0WcŸÐì_£»áóø±ú®Þ|ó‘³>Їúªç¤`ñË/ŸÞ»úöÃ÷•¦é3)½¢¾Ì/P´„MÖ÷_˜1ïøŸ}°Wõ}M¶ÿå×¢/Ð 0d¾–ˆÓ€H~)½!¾Òb¬Z.!9(÷áÃ×—_|úõ—Ÿ²È1Kì§ùZ ÿ`´mÒo/v4Á‚¬$Ð?u¥È(QªSµê€j’P‘æTn¡„£TÖœe†;p®%Ð*„Fϡ߅â§ -Vl+@þtì6!ÞõѨ긷•ðçj#÷Ëx‚2Hø›ÿüòdooo2þp€(@ø÷~ëUøçš¹¸l‘4 'ÈãÙí…2+þ¦‰ÓÑݶB‘ŽK‰ÿ,Y·À¿Äë˃„ü”]v +€xðàƒ‡ß÷€Žü¢ú†x9+åŸü¹ž~&?S”QTÀ1žˆ¥ #ôðí‡÷ïÿöÞêâö¶ƒƒýmŽh"˜›û“rš è¿bV40 +Üç n"êÛŠO5.[ÈB] ‡TW!P&•‹£ +p-ÓÀW½Ù¬æ +Иp¶QÅÿªÐáZjJ¥%°Ôn—˜¤æ—šÚ'v¹f>®„½ß´½³-|Gî0Øèº£h-¨¥ ýËÏÞ~ñõž0â—·êCóŸ}öÊûá ‡%Ò5COô¿Â¾Ò}°Î"‚±þÎ_¡Á]_™¡''4}ñÑDcðGï¿wÿê‹~þ)«MÜ—Fßÿºýìgñ.ü×`<è,t⸩÷Úi@@Ñ ,†íÔ²*ï,pB¨Z¢|½V~Ì›«˜ø˜=e/O(€Šf•¦áR ý0¯¹nNW}“è) ð¤à”øß¢þ¥ÿýÓ®àmû`Êjå×õJËŸLon2?ØV®‚';¾GT(|±»ÔzŽ€ +3 §áÃÞuº¸ryåï^¿ÿ^IO“èY<“jT xFùÊ€|¥ÊÐÒ‰¤ÿM¹Uðáýß¾þâÕ«)¤öPú-Ô§Èîez‹^Ó%óøL +ƒB©RÎÎKlOÀ~àÄ/Te,üid¬ývÛþ"SW呂˜ €…óúÕ?_À<ÿr._¢dIÞOÕÚjÔ+cŸÄÇÔk¼qXc¥•þµâÁFÏ +à9F¿úìÙý{ï?yúù§`Va^¡]ÂÞòÝ Ž§²ôoµD[„øg€ßiá“ÉsîPïÜNÄŸà-þõ—¢ øEKÒämï³O?}öôÉûï­Þ{ÊÂt&˜6®þ™"Ÿ +´Õ `( R(š»SàÂIç +PB§Ú§h!€³¾©åZ´¨­èY¥õ1¨¸&—º¢†D€Ä<«QA Ýórª @&ÿ üøþr +_ÊU<Ž› ÀÁ?<ÕŸäÅÙî—`üû÷ÑdßG«·=«€$€&»,¯6ü…©Ãƒ=@éƒA~¿àœ”ÿy®V!Ϭ‘DeÿG¤=bÈ}ݤþîÀåâ©”dÒÝ ªÀ?ž¦>,Àƒß¢¸=@˜àïÃÙ›ôevçg6û™D§šA°­ºmcÄ‘€–~c•_OÙwKêvÜ ŠŸ´&VŒ&@–QþúxK07# wÌ…;œÕ +ÐñZ|¢pc¯þ”Ðoª‚ôJ ‰Â¼Cu{{ëöVñ&7å4`Ô»•.P +°Áý"üªºxTC‚9Šùéƒû>bìNÅ(_çl?7x¿²¤×LPÝö`†6€ý‰Ž´#¨„ÏŸ?_#!’S2n³ÑîF÷ GϦóãìY¡zIÿÑ?ÏÏжœ ¨b¯ ûä 5Àh,§h †SzO¦Lu+oÁ9ý¦‚Œ  ºP=­º¦ü:M_ù™àÉSQ/'gE +Ù§†úÇ皣_¾Pò_œ`„ÓŒ(ô»I@€»>|þéç"K…¯Ÿ}ýyÀ矊î?äÞ@Ï!_4ÈOãøâÀÝŒ§ @a®ãß»ó´éPãØµ/ ü×UŸú>×f¸MJ×éäíj9)€Ð@”¦(öeMÇÚDò ùJÿ[°5vgÚâ0££V“!pâi`i­üH.úVRp¹?»oøÿÙD¢Ü¸Õ0ªzˆƒÿŽˆ¬Û\h¶}©V!è÷Néÿ£‰3€_töò)À)Ào¿¥ €fæºøÔ +@ß¿Ukp{&6ñ=jÓ´ †"P ¹vêåì|O +ÊMíŒ0Ýéàú‚ë)R@W9‘õ8×çw9RÍ©Ò 4œŸk4s$ ˜~óuAnuæ]/*PHø”vI€lÐн©Yøó‡ û9S@IîIü‡ÛŠúãåLÙÕþ¸¼E’êÀŸž>ÇÀç&€/¾ùœÛýŸ¦¾ÒW¯T +€Râ}þÊ +@B|˜ +àËož#€o~þ‹_öMŒPYgØF{Z üͪíÞmIwžn?žÀn´ø%¨"4/€³¶âênoÄu·±*½ù·01€Bÿ @eÔÞIha{‹,û÷·nÅé@™ÏWcú,à8ß[ è§y®¬Ä¿–ãƦ·hžv<àOüŸ@f¦³=î $€ÓÃ…9ÓïF ÜîI81bÀO¹L˜ñ¿úÇÁ|Áe¾²hœVŸ<¯ @ + Ú>û'¶$üƒ¢fc:>"P¢Þ&Y\¦o*“Š9» `Âm¤ÔKzȨvû­h¢Œÿ”Šê4àý¡z1éÈmàsª¥8Õ´5¯ôx;@“óÉ·%ÕŒÝAÞõ~KÈ;_oÝžLn«ª}š†60Õ(°qWUn@#œB9 +à™`Jâ¿E¸ +à› +€¾À_L+€¯iüìÙ?Güâ碀$8@ßK ø9- ½ö¢¤Ô@àòHÐÁ£T ˆÚz³$9Y$QÑ*4;#ü7åã½þ†$îޘܚ•ñlÁ>å +®˜cÚ´)@2€áo¹qælÙ  ~õ©ðW€€óî”HÐ|-»Ö§L,(™€ÆÿœÆã}i€ÞR“+J‰åáä¿ÝÑmúAvÜo¤ÙjõSÑ[3ã¿§ìHà—ƒÿ“ à6^)¡ºvàÔ6€SÏ<· `7N‡·!€(t@ +€4•mKåŸT{e +pvf¾¯ruÚ:4+<‚|$ZÿÁÝ®}©˜¡JõŠpLÚiIÿ’P&ÑXZš?î53øMÇÚ–ºœ30( —,Œ}á¢DWf½@Ñȉ_lq­˜“V«#«]h2°0˜¾ª@@´¬qK¶Õå#ì8L&¾] Á‰ƒáõ›ã¿ñ¯/+ +@È£Ð=2P/BØ×$jغ­À¡p×n)Ào:"h­z{m)`£Õ\¢¯¯BG§X(ÞÉÿ%ý9 HâåœÈO»|Yðæ: +@à=sYz,½ï¼ºc°å ±Aþ(î†3þm>±6B”¦lkʸ ;%4ÙÝ™š`·HLöE"í©¨êÌJ5Û•ˆ¹qÕD|ˆw“Œ.Õú{®±ÔýV¨ðO…Ù_¥Lœ LkžØ–$@-‹À¿ªU }¿³Þc`ü¾êSŸ: œYûiN"€µÕwÿwÀMÀß}ô¡¬¥X^=ºo8šR‚ï¨høç)€_ýê7†P@0àÀ¦ƒtìïÅ?FýbéTk0 Ucu`R`ÆB›‘º§ +à?ªhðï*ø€VÊ:q3òÿ¸4üÌ™é$Àà( {æð„ËakQ Pp€Œðï.®8vÁ,ÌËDø×2 ÿ¶3˜Û´b(}Þgˆð¾ÔÖïÇh‚½þx¯ß +0ØCôT¶!œ)؈ÿðËú °ÏÊÓúaW÷(•ûI`f€vz‘€y‰Ý$F¿· €íç4îBÀ/!Q¾0ß= èSú"eUh@s³À=&Qæj»‰Œšv@¡¬Ê› ,¢@ïSþ,f>ÁÚ +ú‹E{CdP'}¬?Î$ô“² ½¸ ü ° è¶—”J÷1±?2t>ú”–]½{â~¼cœœÒ‹Ï´:qΧ¢€3×׊imå +à¿§XùÍá»ÿOÀ;÷ °º\´½|¿øŽÚ~õ+áÿÉÿ¯RÀfõºЕÖê`‹kë üÅ*.ü» ¢=Õ_*€ÈÚÀªk8M„þ·¨.¢VŸg$mKI5l(6¥Š?íL`8ñ„èî8ɰXp€b·ˆþ~âßÀÿ…JèhÏ·Ä +·É +ۣ̓Ûûòöv“6¾^ŸŸïö…{ZUz"€~AÆ=‹ôÿU–ôÿ‘  €‚×c0ÕÀ¥HºÛ~ êׄðûÚ¼ª4+€œü`G+ë÷†ýžh`¸Áf|ì•pZè(×{VID=ÿÑy2³p~† л*Úé¡ëÜWd<èsMï…é{àßèçB :Í…EÈÆO^š\ŸQâßÛ—™Ú^Qz ô— +£jd]ÆzEÀUv¦Â¿À‹G7•„¸¾rãÁ'ŸZ¼ytxíÑïÝ;úÝáïÞ¼¯éw‡ÿºm~4@@4d°îã‹Ç`ÜË ÿô˳WÊx‘®íê+×DPoœR© +T÷íÞè–o¦føë©‡k6L¿_ÐZx!7Äv-0m/ëç+`KbU)@À%À‡& +€EøÄ +¸¬¯Úã$†Ö@ÿЂ$&"€n»¥ÜÀ™Fw¿?Þè°¢;¡¸‘?Á½®B);rþOøgR˜¡œü†ÿi +@; +@ÇS(€l(%@¡ôøö6€I• cnüSÐzPõ•%ÈL^þ4_*NÌ6è N\'Òñ&ú1@‹ž{:ÖçgÎCtjHóKñeæŠPúÒmu_{N d½±àš €¥9¥ `Þ/…2¼­u{½"x1l£ ÖXY¥n¸ àæÍPÿý浕•ëׯ?ºüÎÊÊÊòÊ—õ\YÓç•ý"ûWm¸xñâ/}=~ù+>üʧЦZä9¸`OÙ÷øiQ£Qbð}¨¥ÂW,ÍõdV¶” +@êã¯@?-«ñ9Ʋôåò?-h4þ¿Eäd0+ìD6Ÿ§I@ø×2ÇðËÿSi¶û·n+ñŸÜNØ'0H1IÝ]˜€QA[Ä¡1£cˆ€K½kA†Ï–P•R¥I—}tÿ‚?Tz/€v-J“z“Ø]ïx($@¥ôø¶6€XQa%ÌãTPÆö:‚ íÀ…˜kö'{“^›ðOðÄrGÿ¨FmÕêy.œ†ÐKK¥ï²–\—W¸âk¯¼œ=–èAaJ4ëÃxv›çµ…ä€Êtät¾{£½d™ÞÍ®•0°qœ +ü[¬ݼùÖ»oÝ|üÎÍÃë++k×®]ºÞ——¯è©¥nÐZÈëµÅ6.ýÅ¿þù¯±ÿª‡ü@–CL›J´­@Á`23mþh_ m*áÔùÿ|Ü߇Q‘§˜+Ø E³+®ÀÙ¢¡ +ĵ¥%x mèáɨ¬®Ä²ö5ðÊú}úõi‚ä ra€ýÛ“±€A•+ÁzM0ï |úŸ@ÂR•Á© úŒ'%ϧ²Œ—Ná°Çi@íW¡ ‡ª @?dðç…诽 ŸßàÕTVSÁÜlºxa@Ë(|iÓþ¹w`Ppn <9‰ÂÀ8þCvk "KQ€×¤5œ—ôo#ñMŸ´7äõÀ©Åú{*~+'^ +üSW2Þì®@®&€†ö§z ôiu έ©Ž²úY€µµÕwoÜ|÷›oݼyãpÍ‘þðRDýå+WþFo×V®••?H|'m‰Yëb ýçÿUök¿Ž#,,@z?,ºs€¯ìÎåiÀJà+nÐÕWÌâR ÀÀLáßKÿŠLzÏÇÍuˤÅEZ­õç›òwN2'Î]_5›jàFÝuv‚{|,>i‰ô5ü³Ó´‚ Rõ\)r{o„°àECË÷‘¡ŠJï÷­&= E–¢s¡˜Ã„n‡V&ò7DO ô4-Q⿲ƒ7^E˜™bŽâ?ŸvwߨéµDn°¡ Mwôñym¬Äú7'‘;ÀŸŸãt),«K`•Ŭá¿P •—€zÝõ®Ô= ~·È>þÓåþûr¤°E2~­²½¤Ê°XñƼO€Z²éÛ‡T/gcѺQšf£Åh¾i½^sŽŽÓÖi“ö3U†Õ̵â6@qŠ/ÿ’Êêpípíèôß¼¹v {|5$ˆÏi‡ÿZm þÂÖ;댘 +à×ÿÕ˜Öï‹èÃÊ `9G–| ˜;[ÜBÖHFð2’ÍQΆGè+ +€èV#€Ä¿@˜¶;a4fz/ð]T2€±ÆŠèdâÕ‡ 5+ Îv:°|¯E $´h öÕG¹³H¿Ð䇤ã{ãñmš÷Ñ".'à¦A¼:îÚ¥| ÄdCG·¡ Ô»${ò%ý+Úõ¯(¢ +ÿ,Cy…i[¶7èÝWÇT*>Y@Z èw ø[ y#D«à‹ûø•üë6ì6fæÄ,.˜Ÿˆ•9—/ªî/KK–tZC£!쉬º=®ã;¿ ¦—©²é–@ˆËî¿×£‹yØTaË\?i ×ÈÏúá/ûñ,^egÎÊ™‚ª£êUaËs¯H´œÞ+óÁíÎøöÖx¤§^Ó ðÞ:ú ÚÇ4…¬jPðæêá[oÞ¼qsí¦¾ áË++, ÿñò•þïÞ»÷(€ï  ÀcMY‹‘€e'€IÅM×U¼µ4ß%ÈQÀ DâÇ€<"R€0ü ž¨€ø_šêP•KõúYà;M¾‡ûè_ÑàT.À–cýÓØÇJüƒ +¥Çb®j¶š?Hì› šäkøöÅ|z3„PøŸìIˆÆû“}Ú:›ƒèSPã‘€G'ãt†Û"€¼SAOoý^›‹ŒH/#ý÷K8Z¤Úý7^ÅÞPÜOoLRÿb£TRM+ðO +`8Žá€À=  ~RnX=ìÑ*ø­Y;i$l€Yõ¦8µG`¥¶D(V0aÎÏ™½ U¡EÖ¦ÉÏøVr¦7€*†å(u½‰v"ì6gí"X†òý ‹O +ú«/Ä’Ó²7})É\ ÐÏ;=Œi4ýMÙXw£…V¤°3×V®_ [[;ºz("Ýþ£©ïñÊ#¿¯,/¯üÍã£Àÿ›{‡÷~#3¾ß?f#1øÏé& Ç8V*ÆQêÅõ¥osõ6@Iõ»?×ÌÙYHaÎ7‹ƒ!¦€åœÿ“ìá*ýBIF5úa3¼ó’/€vEÁ%°F p>Å[ø³À°ØÚê5ÛÚ‰]S€ðÿƒÅô~~Ða •(€`€nGùÿ}Æèÿww²·O€h·}•°¸}*gc¥¥8t:ë±ày™;ñé®MЃU¥Wk°*â<¾†h·DàKÕüPKªøôYå0zJYLOàÀ…X*õ 1RwÐkÿ… @ȵÿ¼+»­ºðY€½+p{€0" ^øÊUíZ•$Ðe7Ö®­)óG x¦ý•OVýãÊÊ•LîøõÆôÇoø&À_ïŒV3ª# ¤·iŒÁ ý }¦ÂÄ í €B¤˜RÎ +™ÃiÀ0¹‹ÿ‰"hzœÂgŠ:­L5í«€geä\s‰SB‘pQ@A^bò.8 _˜’“Qo¡ÃNXhªd€r€½¦âÍeá$`$_ÅO:Ÿû'üïIÿs@ +àµQ¯ãc”ˆ…rp‚´O0j5;m+€€„Â?—FôÚm)ˆ Á†Ðïã¡×ßÌs Ñ1moLîB +R 5€ à]7Öº¿âÇ +€¸ pw?© +l~VûP=8Åû'ª9²^NôL‚ÕÖwv]Fß6ª»TÑ 'ðF¨éfÀmT}Qd8ëWïÜT ßV-LÝÛ@ Â×*üŸáõ§JTV*Eº1è5Ú\“¡ØßwÝm—'aƒ  $ãl 8V +@øg =+À‰À£Gk7×Ö®ß\;Ú% Öï/¯Þ\ûÍšÀ¿öè­ëk¿ùÐïேz +ßõ± àç?Ÿ¿_×ã{ZfÌ/À›þ +âýÉEÀ™®n[Ù>¸;7{@z@êŸz‘X(Ày:†t6€SÙ`ý¯ô‘Nø—¸ZmT-ë*à±<ýÆ¢ Q,¡)öâ3þ¬Jűˆ-.f/:…H€ +ôú¼´pÏðP“@´òµrÿ}qÀm~û‚8“PÄùÁØø•¶éG¤ïùËF8PbÀÙgÌÐg‡ñSÇ+I€“v\TýzRAu…™^‘P‘þ­Jì§q/·ÒFÝ¡‹ÆÀ“׸lYt7ÿNËd»cèÿ^ï/îó4ñûüŸa­ˆ+O:Fø[‡1™c €piÿè@-®¹F„p=Èì¹tÓ€W^¡ßæšl±³VÚLÁ«IÜ6‡ +€P0©šŒh€‘kæ‘8ôÇÎù­jùÿ~røîáá#þ÷>z÷ñá …ÿ5AíÞÑê'ÿxíP¼ð¦ž6>¼yôÖÑ®þémôôuwߊ~ö3}׌õŸþÇ `éäAÖLÕPÑ*œõoUæ6€œ§:âVQv|ù¾t¡àøŠºÑi\À‡Úy²vPí•Ó€¤% 8NÚ@xf(€|‚«e¾MF&ý†Š3 |–x$ú͸- ЇÂÿ$4À xM¿4­þzDs“þW €öd"¬÷섚ÛŠ»‹’Aü™Gÿ…8W°¯™£›Á–¬b¹„ÜШ‡ä‚k£ÀÿI@]R7a[¥°1ËG•¦ Oà9æïŠ(aêˆuҰឌ,V€Íx‹þ7ÀZUÁ=†æ‚Zœ3’ŽÿžÚ­¥–ªJœ0ƒßÀBÕšos‡›&½´˜úÜŸ¦ßnq‘’W^(º3„ZÜíùDÿ¦J*³ßËDB"€ðÚ|èy†“~¶µëk7ßÞe+G—n\£oPØu¥‡—ÖŽ´ ' ¢¡Pb‰ëk¼6€ÿ¼d·_8àgµ€ªê¸¨Y(€™sDês Á9ð/0„ÏÎÀ Ù,Œp`ŒAvpÅ¿ oÈU’Oe=†éÏÁ*LRK¹ÀŒ“ÈOýaÔþiáÄ@³ 0^âŸKüûD]Á&ZÁce¢€ÁØÐ¿ËuÊzÑà=p[H€Jtî0 Er©FÇ!W/—øWþþÁNÿ¤Ø ­…ävwv:œâ(S€MÎÐXÄÿ`€SÚ¬ætXo~&Ïè%fy÷0Ê8ÊYsw´s9Â#ÕÝè’qm›¢Ðøw‹¾jôŠÓ€à4, +Þ£®–“(ðÔIö¶ðß2|žŽîçµ¼¹“cz}º?-0*ûAÿÞ=Ý"Øí +ÿ + Õ¨ðÏŽ1€w$¬9×,†w÷ßE U +píÚõëð€?ý•Û|vðæÚÍÉ€Kk‡úõæÍ7ncè]Ÿýú/nètNUÖú{žLAu{饗âàl*)€8>Üfž« +À­0Ùë/¼)€¬‘ @Rpv®Ãý÷pSy ûé ¹>[¬Ã™/QÂ`ߟgqmØí€Z{96\Ï,|” ÖL3¤ZÜ%t=ƒ¿_âŸCú÷z"¯¢pÉà’f ƒØÛ÷Æ£À]àà`g:úá1)ô¹.ä䀟áäí\^À™š«åoµøo  •õuÛÝÙ1¶‰ŽÇ®ãÛÝ@Bdg|À×з(¥j.ŠIû’]çé(5lÛa+e± +€€Q]¡„¾¹a?[7{›I8UšÑ“½Ì‰ÔãAk®é>“R]¥Cz +€ €.W„HÎ"àäš)>qçÆo/~Š7Àì9~€ÐUÀ?wöÜYBt¥:Ü´W¶3ÙÙm,¹?Gu¯ÇŒ?”¦5˜J.\ð|Uˆ–Ñ«L_ŸßàvO8iaŒijΨ_WͼP·cЗ۶ÛÙ ±:HÜÞÛuÆà>€äw;öðqVÀßʀ̴ ?èk³ü}*0NÔô¿%€¶}°W›doˆF·zVŽÿ:.(Ð%u-  PÁŸX0€@"–J Pj€QOBÞíŠÿCÆýÂv|(*Óxøþàúîe1­%NÒ +¸^¤‹*É2à¯wT +ÀÇ Ð¤Ú 0ÊÅ* =nÏ@Bt.~.Röø¸Yúµƒ·ÑjR ^%«’¥å¥E ƒ{ƒ?¬Ç2üѯz².ד_õÈ1w&æ‡þÛ5°&ýóæ›7o½õÖÚ£åÃk"áÑ»ïðã£KG+‡‡Ïe€BÞpÀܜͥU³"tˆýAEðç«>ÅÁa>6Åû¥%@/™Óæ35†å¯iÎÄÝ‘û¶¬ÿB„JçR .%bÈSPœ –QhÆ}½¬Â´áë@ô‘‡å—6ˆZ^_…ßfó„°ÙyzÂI±-mY3'£60êpöï¤h†¿šPhW4À-AR& 0HÐûo¬÷×^; #ð¾>íOômø˜Àó@ +”f@/"ÿê.r +)¸µþß hãb+€@4*ŒëŽÿX©6M~‰ÿRDaN+€) 2§É%J*úÈ8X!,à"uñN+€iü§ IŸ©b¤›@S2¹4ãº'M%3àz-'#¸¹§YÂj¶MÐêÿIt»VìïI¹£1cw*ù·íim¡}RV  š!ÿ%øi@7ó¦]%¥ý{§ìig|uØÊÚáÛ‡k+kWWÖîÿÕOï­½NëßÊòÊòêÑÚÕ£Ÿ¼¸rueuíÞs¦ßÛðš‚@º‚l¢é@Ζm¥Õý¦‚? ç=b¿^ÿ Wú‹¾"õñÒ[RNúXiBÀQX0 @]Ø»J%h®ç‘„p@ø}ÿX/±\¦µUwZõ¿ +ó¥áççèüK³ ²fóؘÁ8&þɆ€„'oÛ­€œ¼§þÁü”¨1 +€$ ²¤#=!€¸`Üì½öšR·îp+œS$Ÿk€€šé…Æ£!)‹Pœv2E@+•ïVýƒ»å„ÖxµTqØ:ÄÝ­^Ó€‰þR”9T0@´›Ÿ›qw‹B·8¥+ñO#Àì|r & +`¯±(æ˜Çö+ ¤˜lõB8 +Áp4º {ô¤ô$ØöÀ=b “ +`ÔëD€*Ãø§ó@›ä€Ö§SÿŒ›F¿iñ4 VÏ×cªþÆÜÑGé—8Fj‡ÃzÒ"\¶Üëê £†à¤¨M¹¼¬Ý˜“×á/xônLÿ»ÃG«GÿýñýµÃÃûG‡Ž?züÉ'êËêßÝ_{ü»ÿ¨o¿;>] ;]¸˜í€G œ¦ê`Ô÷üÆ?/¿þõ¯¡€_lš €—)6ï/p…—¿´—D +¼Ût̾[à6€;Î¥”‘€o` (^—›ó¸äËåÙí/õˆN昄B hÉ‚Ø:äÃ^Ñ‹è„(ð_MrQ9鎞Dg²Õn ­¸.€uÀ‡ÅÈ?\·bú•µºczÿðé—ÏÝth Ü—,Ðß´õi  [×Jt;„@0íÔèTb©ŽK ÈøJ†¿L+£=pgwÒÛ„þ2„M€Q¦ÏW™ BİœÜ,CkÖöÒ¶Føþ ²nÖ•mÕMX‰Ò·4þ¥š9&mªE¹§*}¶@šÂtÇ'L$ÑBŒ¤´Xi3í½<XЭEõ‡¿7!ø3fS|wc(&VO H¾)€j¹023߸ªfˆ‰€¾þ‡Å¢vY§+DagÜŽ'»ymemùèéþµëפýW—ix´úÈýÿ~ü㕕߬.½ÓúWþƒž—¯ÔÀ7píÖ“D€_Š3üsÆå[ÀÁÅçü}酪NQgçºq6Ìnªÿ²^¨‹ Ÿóî÷É‚qô®Ÿ½±lÜVdÁß ‡¥Dü¬'™q`îõô$Pì(9¾«Íc÷–¯@L<Œÿi€ +p p + ÂÝÓc£7‹îF $@Óæ§$À1fü·Lî +;œ|mCyªË¢¦ŽIÈl“K'䡘»»³uG3ê=ó$`ÔÆ”˜’"ò4 ’Œ÷(týÉì|”¡÷ +Ð& ð_R + W"ó¬F¦å/›*BN6(ëè}›î)@ ÆW”ƒì‰®¤TÚ…T,* + +¶[R*O€žáÚEsZeúNÐ÷iZm}®Uzä}­¼?‚Æ; ªœn +ûòANÙ$òÓÐÔ9 Àšäz/ ~åK ç%QA?pTœ¹¾RLk‡W ê4ö3°_[;úßWºÊÇÃÕ•Cƒ>ÍC² õþ¯Áö£[Ê×»Ýu¼$ÑMµÈñàZóYÍjNúÿ(èþ‡Š`}ýg¿øÅ/þK¹¿Þ¼pWelýÊÅ­Ë/\HüÇᶨîúq&  ðUNÑ`]`P€à¸ i™€x—ŽÎo¹/Ô¤ñ¸0€7>°P10D²@lÁf°íÈô,€¼j L+€`ƒä€Ø3€öÊ=Ô`)¹ÂX +`bîÝÛèŽbw³`[«?.tÜõ+/ÀWmÏêŽ>Eø›ÿ(–ˆÂ¨À þàI&,Žb€Ó‚thRê»;“1 òü£p ýjPœÈnDaÿÅY™¶3­dµ@Ls:ŽH†^•Ò!æå˜Pë츋B…Ñé{‚œ@W0DtÖU < ŒÈ‚b@ê8¤) è;»>+jPhÁ«µ; -k~Šè6ÎËh¹^q¬Âع`½Êäzx˜ÍÑÊžŠ åq†ÓüžÖV¸蚯’ ì×suõšomõpuyõŠb}Q?->þ½Rɧ¥;b€ Á/“àQÍ­èg—kaÇ£Fà¿4Þè_³Ÿ7.(÷U—ÎÅuîâãÙ2¦w·Xœañ¬ÿiþ‰EN´“8ÆÿTE½¾Ö¬Ÿƒaø­-éØîþ?iw%ôK;Z@Åè°5P +À­Á£ñ]Ùäàn©z­¶°B×€}N<ªf< @äóŒû!~oƒpDц à”V€©Sq‘€ ü«¢(þFeQ)€n‡ÍT†ö uÇh?`€J˜ Ú]…àS ýVÏu 0ügçÜ/.í(§(-U3¾Ï4ºìÿ‘€eÿ•é¨|ig‹,À —DXˆ#a”@ MWhqWD·‡C´EîHqvöœ¶› ¯[`2¸%¤j¹ ‹ 8ç H Ðï :-;Ÿ]g§­ºy~`vJžÝ¿ou&.ì“=:ú¿®þæñãÿñɣǟüÏžuøîáƒÿöè¿=¾ÿhõðÑ£Ç×W“-Ž›j7ëÙ +`ÄýUì(‰~,ÚÊ€Sm”.¦ÂÍŸdV­‹?¸øï”Àß +î»~œ² Óægg<.LiŽ%½îy‡^bï¾FNY)7#0Ë + :…(ño0«4Éåq±èl ×c*r` uìò/€`ÉJb@€À¿Þ‚­DÆ–€ÒI Bì´ÖåàŠËA4µ3Àtæ-3ôº ‘FBœpÉ›p]}.NhÒ¿´\%¾EÔZ¸Â˜ù mл%ܧàh;œp¦Y¨D‹ã”«'"»;ñ–¶¢¹H(À1JvA²-tœÞ +³ hˆÌßÚÐÞ]0ÀX±µü¨»TܼAË~½ùßè·Y™›ºìUMøÖVt¾S&Dë`l €ˆP•ˆ£UJÑÁ~4‚IŽ¡ÚBÿtVšz¢ˆü‹  ?ް¹`E1ØÅ7¸^»»¨úT9‹úi±?¥ÙëL´ÉôûQŒ² z¨–÷ÿKÍ3?I[^¾ü“KÿQÏËõ“åÕŸ\^þÉ¥+ËË?YY~Q?-¯Ý{qyuuUŸ.k‘KzÆ/—.qOz*9À­M +íØ‰@CC¥¡µö¦SnþÈj¼®ÿßµþÝR ˆåÿ­„¾ò«Msœjq9Ý; ¨Œ19ž0ßY€,8ÑÄ©¡‰Á-E¯rÕ»eWoÔ¿eÉ¿Y€u!•ˆ};$€fv8g˜Ö^Ê=H‹J“)ÒËûØ\*…FQ€Â& +@áe+€Ÿ2è0-ôuûÝæ‚/S‘Éý:·ü 0º]Hãÿ„xN €ðߪZh¹†´zG•H*ðBàíuc£Øîd‡Ûÿûuð)OÆëôÅÓ"Àÿ•!8@¸®?—Wféo\AŸmD^q²ß¿VÁ ÿfËY6ÀÌB–ürÄW{úX´¹ºIˆÎøÏš³ã à–Ž\ +`2¸Ø”ÜB Ä÷ëœÔnôÆûÜ•ÀþC¿^û< €Å….ì}Ë + PÞEd¨œå\Ìó®¨ô9w¨'£*°›!Š›SPk8AN‡‘U +ø›ûÿÁêc}~çKÿ?yëÝ£Oè øøèÆ£Gÿã>ù‡;ษúj + {ˆq“„¿  ÿ+4€2€@ÅòŸø Kpðƒ(¸Ø ˆ.¶3Hø» RÃxÊ)"1TaëkaÕÏ…P¾¯’(€€²Š„¥À(b‚Ôð×Q®ª[ÊY-_ð…x:~Ç8/ËØ-ÎL^~ùefúOi¾¡Äh0&̕رÊÖ›\ (^ì•m¶Ú~´Z±?h€à€ô‚|Ra{Þª~¸€ ]Åe+À Ðìœ&À¿€w)ñÏšB”’ýk‡”pH¥Š +º] Šì*ÆO+‚>tçî@^4h¶~'ö Pt²ç^˜K»€Cc*jJ[¸$äâ +ÿR‚¹,¦šõo6ÿ1M¾233`Ów7ÂMwªÚdß4ãh“ô~«/öZ‹±åù +Ü_ؾÝÖ·vo¢€›Ò‰"S=f‹ ÐþS,¨YŸ@úPQ€û^´©¶±oð[ðW/,;¨ÈñB¨ •7|s¯ß«®Lû›µåǤÿ²5nòփõ•þêÑAbü°c¶Ç éA«£ö]EÅ¡\ýdW @‘XL€ŽK[¦²ÍßþI?ÀÀ~ Xœ +ÿ2{Fe î¢â‚—ELÉ ¢ îeB ªfŒFŸlVýTˆT¼]k¢`]ºmbN˜>( RÛ)€Ûx.#Å"m%dåØp6¯0” +`ë˜ÿôšë&€ik&ˆ\äÑPA“Çö=„.)pì¤B?¦W{¯ +¸hp§L-‡#‡“ßžÞÐl-—ÐCSÚ³ÇèXúHü øSówë + ÍÀ1J …™ÑÃÕ#íº—x¿ &þUÉò_á{! Àø—á—1?š€Á|¼†åÊ +³̳ڷÉÁ0üº³€Q©[2+å5Þó$}q@[tkÐÜ*˜9RHV” + ýqÚÁzµp¡³?·”_LL# ½®Ê¹×^h#@ü®3;AÍàaS€}NGM#¸DTfKNuàæ_ÂùòáÊÚOi ¼ñÖ;o½õ×®_[½v}åúafüÇ §‡Ý ܺ'€À1À‰€z; À]³dšŽ9Á +€)î+ øÁ~ö³Ÿ‰õ°ù +SnêŒò‘¹Že¡…>1øPˆpõ“ÆY+æHØCÃ\²0#4e¹9‡êÚUNµièÅ11„ÂŒžÊ­Ý¡4ö4<žðGüWVŒÐ8&=År‰Vk Øç«RÜ©¢ • `Oí¶"ÐÖµV†Ž ü[$d+Àk¢ïyÁh.íý1@HLà«*fV +`8Üý"»QŸ àå~@GD¡iGÛõ)ÍT>d^¡·­­;Cn‚ÌO“;#7޶\Œ¨.Δéå°¯§Ñ/¦_j`ãæ (ªUB×íàõÎup5óÓ\ý‘HÜ-À +Àå øÉôYìå"1”§s©®\ #p9ÐHO°®èŽö·ÇýÆ9ãß»wÜ*X4Ü1Ö6€]T²ôÅBÈûZ>¹ƒßé‰7` ÿP%¦âºpuì«%\:iÓpU/k—¯\;¼¶vøæ[oÝ|ë­Ã7Ý\c|Pƹ^&¨2vTÍv/+¥.§ôPì¡  ”…(@G™?ÅjòcÅ$‹r~ ô³Ÿý-4P Û—ÚÝ`Ú4Ƈó­,[àxÕ7ľç +@±ðœ™9ÑuÆ`Œ+ÌsDk7=ì¢døˆª¨¾›bG›‘w,,Ü¿7jJ˜|=RÕþÁƒOˆ0$Ñqk2l­ë­êûùîúÆŠ–Àhƒ·ËÊQšöUÂôP./öa=!€qÑ +@•”€¢©Ìkóq*þ3ñ_@É…Ví3pØP…B›ôhзPmè©J6š¨æï"ðuxš8V¤W[›ÿæf¯ +À‹è‘ºô‚¯¤öiH€˜æ‚Piš² ÀÑàl7ÿ¸‡Ñ1¿0ÿ±0BÀ¼ K{:Ù­+®¿q“'䢛Ç€’Au2jr£FŽÌ @º§è1†2 Šö.ë˜5ÿÜŽ¡4ñÉ@Ø×Fôy£GË×’è ìÿÚ‘t‚07ÁÖMr8›NL3â1@AD5XŽaÿ—ÇÛƒƒ\¿qóæÑ»"ãžÙ§ð—¸ +XO÷(@R + Ö€2‹l%þk +XøÁâ›?øÛÎßv‚tˆÿ^‡Ì}Z]nÔê?Ú™IDO*·féØ2U<%@õsÀ + æI,T +À+¸t-+2j/cÏA^Ÿ[c®EZ¡“·¨Éàá´)Àl4:Ä + {Ü^ +£à@äÊ}APò™ÏÓMÞ'[Ñ ÐQ–"©h:~,núÇÐ&€ã'²dŽYé±ã_ÎWâcè!C{´Š¶;ý€Ž·?ØÄ†D(Næ#Í(€×ÞsÎÅM­õΠ‡¥˜Àƒ;þym%ÑÜq]oÎ¥¿ãBìo®ŠË…Ú4ʺY–~pÆ>}ò +3ð Cø,;µs (Þn·Ž)½êˆÖU‘±ë±Má_6€Z>¨8Mo±@W€ð콃½É€àÛ÷+Oìcà_~#r ‡Š- _y«×jt |\-88ŽhÊ|àa¹ ¹5ž'§ƒ†Êó "€¸@®-?¦`MØWпyxôøæõkâƒÓðï@Õáž`r·Rî °~¢'™`êPø ¤\JuM ùåààüù„?¤²Ÿ)üÿ¬®báAg¤×»â#òÔ½É<'‡=V'VܘK¦£ÏF@"ÝÎ=þ<ƒzxm„0PF•H‘)&È¡"Ñp ð›A¤ ´)ï^b€É¾kJ Ø#8µ#ÃþT¿Ê”ü+Î{cb€$€T +‰Ã–J2OÌ$À†ÓRÔ@;€ÛèG@d5 P;p0Éb9Õ´ó ûéÀì}Uül6†ÑŸ­Ýî‹U%ô”òQ';~°HíL¤]ÿí!d{‡ùüd§õå—/,Ñ“=¤@aΤh؉}"Æ¢8RFâ=inÄOs½Fý£Ø·Éä®@|QÂC@¨4苤ôÿã + 'åÃÙ"n—Æ|΄P ÄiÀ Êë¸ *gd–yN-§±~V& 81*i)_è(ÂlpŠ©byx5sð®)·Ð˜ŸÏä3/š«: ÞH€+GW?Ñg®¦Éoíæ£Ç7}nRÏ ~L8£  ¦¤FœJ=yA @HNY©ì˜g§Uø?8ø nÒèôÞ¢LXÇ +€øŸKjÛ>£¿“ mâ> GŒO–éèU,.9Nü,‹y0 + €ÙŒ3ô+Ñ5`4¦Ê@ò@èµ[íî†øPØRò‡¡¸Ë[·Ùò$²s¡ð9¾O€• +@Øç ÀžÛ €ž ÂeÇ%úeUfh9ó#\õû­øË.¬¢À , àý*Od™<߇5üãxö¿ÿ£ "ÕPXбro+‚nråB,ØÖf8ð])&[¯cP™« Ĉ´¤G<{Á’>ð/h.]˜;ã“ú±S“Tvþf-ÆY‰(+™ë=m–ŽŒÀ.´GJÝU¼pkCÑWåü©f/%ÏPxQD:¹YÊȧíd½‹,L# ñÑqÙ¤À, + ÔäÉ< û4­DUcos£É†ÊtSsÛ ŒàÚkg÷/ÃÛ @×ôN”U63ê™w#¡?BigŽÞõtô÷„ýÃëGVƒo}½Ü<|äBé+ÌE¶„¾M%¯z»[õÐã–ÊÅ9“+&á/ @B4€ò*(Dk¨Ã_€?Ï‹ªjQI@kñAÍ"òË}îî¨ +@YÉd²íÑ<i%=*{ºCƒ´ί@fTêsM(å +¥'CüËÜïuCþAS#ÅÏ+µÆÈÍ=Ñõ`2¢¥O +€ñ¶´}pÆÿ©ø%NTB7~ 4:€ÿe;Ú —h&Åšˆ^¦@2@(Gºöb[!Å{)>6,¦4;f ÿ}D…2 hàŸ‚±)2¦)&ä`L#€›MØ¡Îh÷`WÀóÆ™ÖGà¿¥«…t¼p!óïL|ƒmB¿<úÅY\Äb# @À?A¥ ÒÖQ +Óræ4Pÿçh4L»T +@;Õjuܪâ”7sf`÷·F{•€”Ï +i÷m½v‡6@l#2€îHÜ'àF@»#P˜‘oìÙll¨¹C:FѨ +€…ÂûôûTÒì/4ãô©O~ä1Ê +ߟɞ2Xu_€£Cûþç{tÿñ›ï0CéÿÑá£O>ùDôà~oÒ?àÆ^¼4<ÂŽZœ(ÀÉ1гIû¹‰Ë +SÂómSpþ/Œþ¿à†­˜± ,.zmÄÚ”²‘ìܥзõt:Ô–/Ò/¿¸1ˆÁGÏhŸ0þ½^îö^4¦H‚QòzUÓõf=kHæ½——¹é±'ÝGÖ«]šìSZÒ ˆâ†¥ÖŸÄƽÁT“Éf4¦Õà/Hl9E.øx¥Ïð1|¹0ZºHVà/¾Ø‘÷°H»b´X èþC¬™øGÿëÀ?g±P¤¼ûS»£²¢W §MzëBÏæ„³l±O÷ëM‡¨]Ó±´;›--’ +@/²ƒÿ !öM^íøfÿ^BȼW‘ȱ}œ¾[ÕE«˜v#aïlü¯0‘=m›q0J¸³Ïp«€2•²jŽƒõ&õ®yÜÁ]ïúrk4r¾ 7$"Xï+Ò ÊsôË~Ô°o·*œk,¡ÄJ¡e"@O aÇc…ñ›¥§~Di¤ÑezNì©·"ÑÇìõ®G¼Ï‡Œ¡_ÚO.]Y½wHw¿åå+Ë—.]¾ü“埮Þ£uàÒêÊòò%ÍþIâ¾0—ç—=ô w c?x¬ €®Ê$ws¶Ö0­”T Ͱøƒ¸/.8PòŒÇÉp®ð(¯•ߺC&Èí  zÁ¸HXߨ— +"ÀNwÌf®ì¨—àÔRªô.ÃoÓÀ92ð+êMÌA[¬Û±@ƒ¢•ðßÚò©3oV  ,s ÈÓ ¨`–û#ÖŒkR}}ª TG3L VFí7ºî‰¬ +Ü™0R9 +@/F¸Ðï×ìý[,‡?…àÜTZO,0Tõ[ÍvGÜb€vÇñ¶"@'uüë¤Qløù`§Ñ‘Q‹ÜÚÓ +€ùü´1õaŠúØ<0.ÁGìÖeZ¡DÿTü›DLÀ¿†,°ƶPRÆìgZ&€¿_"_HÀ•Ë­îf‡ñOÿ˜ÌU!úÔ)À¯K ¥ÇÛ‚|1­áøR%NQж“+>Íáp¡ÛA„©ÊïrÇrú±¨Û·n‰=øP€Ï +j!s—‰p³'…¶yKøïÉ Tý‘ÎÆ¹Ä{[(Ñ> +àyg¬ ³“¦FõÅ °a`ñßk+öH˜P·À_¯¹›$­Ò#Jl)Ü<mV)gV" …Õ®\»~ãæ›ï¬þÃM÷”ýøÊ•åš׎~rtÝn¬›´Ö Sü֮ljÀc€ ÀàîTð—íîîf$òO(€»wiø‹¿XÐÄAX5OFÓ +`gvv'I8+ ;z5úcœŸE.à»Íÿn@HÜáÿB¿&á×¶¥òÔEº=¿Ñ[ƒÏãmµº +Ù:N`ë¶ÿ¦%´t_y[“ä* <=_DP#€-ÀxƒR +ˆf€ê¶nÊ|i&–Ð>vÂKØ-í€a#CØÒþIÆ ?uüsXþ £@ô#@é¸VJÖêl +ðhÒ^‰A [Æßo @¤©dÚU îÌ̓Z‡ülæj7è¸Q*AŒº4è ö‘}’Q ƒÁ°'ÏÉÕž>Î6´ÓA20ìs‡©l¼mv×ãh½IÎllB ª~¡±TI&‘îÄ +@ÚSÛzŽèË´fž?øÇ„òPßs + #â^‹>aŠþbL1@öuHOìiF~RÀõ˜dŒï¿v´ö¸ù—|eyyeåæãËïÆ‚ò‡Ò|œ˜›aìW`×;ωÀãR¯úŠ  +Ýå²Ý]}·ÅŽÛ®Ã?¿0ø… (bìhÿ³ªØ3ÜÝáÌD˜Ês\*÷ÈžŸ÷ +ÎÏäY@< ŠcîüLäÌX(.‰#ËoÆ1l¯¹ÐñõÃú£> OžA + ¦;P4!Úæ‚»càr¶ðv¹Š¶Ä»-‡³Jàò§0Ù˜ÖTˆÂÓjÖ^¤Ýàù4U +€0ëŒ  Šÿé ÿD3þuÈz-ã¿1^¼ós—Sbb$Í ´´ÚÀ”€ R´[½¡ €ó¡a…HÀ–½˜ôËRc¦®6BÀ ¢B•¨!í i:»ÇŸ†þkt;Ún<ÙUŠE.vè铯¹=w²åÐc“Ú€à»HJ @4¬W + -õ†ˆÀæ)–»z„Ÿ[*<ÍfÐA;_W #bb¡ˆý¼nlø 5ª„`€Xµý¬l +ÀÎ$þQìñá¡P~…á?dW®®üøÇb€G+‡×é(1`Ü—F•an¨$€À—d¿€ø/åö÷÷³÷¸IȾpÿ|»{°³»ƒÿf€³ÀÇ>cX8¤·d % Æ{(„X(î#c(Ú”—K¨Š¢aP + }Ñ +jI5ÛZhgd•ù’ÀPÃÉî«?ºý‰¸I¢?Åÿ8(°@ ¤6g‹ñ“VˆÇ˜ d¡¼i¾‡[dU +@‡\ÊÖ#ÃÔ¬Õðþ”qÓ1Ü‚ôÙ[I‘€šÒþÉfüpP‰ÿýåý¨=SºDsYÎl×@¼PzÚ+Qʦ©äe³Çm»iÿ»3êÙÆüÀÁ?^mB¾Ûºõû a¡JT•©¸šzî—c¨2Aï=“¬Œê_@PNZ“âÍîº@Kåðø¯/ëZ„ Óâ +üPÀFAS)@w½ÝéŽ&Û:.7>Ÿ´OX`?ñ¯ ÀWà^*ï^s±=Tðié5@XÅafºMp @—eÒsdÕÍA¹+صëŸݼNç º-/?^¾¡øÏg˜¢²hhÇhHŽA‡%¼À/ŒÓÂn–“Ñœ2ùV küÎÎBä aQî AÐ0jYÜ¥k’w‹rårz¶” + dÑÜùTü(€è)Í\Ú¤‚ä©Nÿq{Ö6žl´§€+ÌžFD“ö–³Lèo§òBà£ôCsQ€¿¥àlÄmÉ7R~ª|¹Hèî×ú*Ø“ + µØFj¾@?¦UB”ƒ°‹‚¡) H_øg˜ A•ÆZ}Ð òüÀÏÝÎhBŸÔøQpï˜ ý m=Ü+8€¬S*aMè‘Æ’¥©"f(kí‘ÿw0Q+žŒè¤¬£í.ÞüðŸµ]½—Í;2—Œ“' $¬qþ+ pæÂòèðÍÃG‡÷þÏÇGï<:|´¶öàèèpí­G¿ùÍã£{ËßY;:<<|üø¯M›ÔV­‰Wná‹*8&À çrJw¬ø}¥¦ž ªÇ¼©²L8£R‰ñ/ äs¾@Û1&C$Á ˜,¡•–èuG>8ˆx4hŠÉ+3ÏkóD{LèWhÖŒèDLXèFL¶WDu„7EyõgÝúBšB—y¿×ÛAåh‡ð6-É_'\(ÜÒðm:G~ ¶Æó]Fbl`w-ðO…fÊy:žP&s·<8è`g²I릎2Øþ_½"ü økwê± +þ£0ºúrþ F®JÀ(B°¬¶«Žîiü0zºЋjÔé +à¢=mšˆ^%:¥hþúülœªò×»ÞüöFGÕ´>ÞVÁÇ4À´(L;OÿJ¦ÍN“qþ ÿ?Cï¤ü9Q6¶vÛÛIuWšæÄ#CùÚÚ•K—èp鯖—/+ÐëÓeæ¬./¯¬^^¾ä_ré'—Y¨°Vks¸›–6€Z c(¹æKæWn¤¾Ôl--!leí2žmxuqRñîÁ.íùŽýVtñ·{€>úÑx0¼X*˜B%þDèËžRúc‰œ. +ìáãÙÙ•[cÉ3QªjVÓÚ²l<Þvê +ïïß’gè@¥ï¤gP˜ 8@>* ? +€ ûB6Åu€6å©2Þ+ +‘ò.}‘´GIW‰$ŒðÒ6–=˜|× +€]õù+NUk} „Y:Á?×(qØå§°àa l8÷p¿žP:²¨1'qÕ_"­ÕîM6][ˆ(ÕÖV¸ë"0càá.AYjÙÐ'D8Ga©Js¢øÓ¨ÚªeäÌÛ-‚Q]ÜÒÑnFOÀ\Lï¸u€ÀM@½Þ>Mÿ=¤Zo|§£WnŒiV³ØÇ S.°ÐÙ OnBì)yA KV€¾´ ô”$–€è[±€©@/ú3G÷~ç磛‡k‡GÿpôøhíMáèèÆÛkoÞ¤ÀÕGk"‚߬ ×jG­aŽÌöyG¾üfJˆîaîU‘Mó¸L;(Æz +ì øˆ +.‰Ó ðç%spO8Á›ˆ$q í¶žÃJð÷ÉUÇÀì¬>€k`Í"|x‘ Ñ €\n42èÓèÔ„ê—ý38BwI›_gâäqä¾0ípíúÊuAühMo7npVð:·§qàð1ƒqF0"ÿ•˜äЕn•pÿvÛž –ª3ÒŠ“í%@Tq—[b_^”ûCž‘ +ÀU+õáO0Aq ý®ä²ÀžÉÃQ,Ûdãî‚À737#¦¬„ÿs\ DW*æ…À¼%Ì|U@ÛÛgò/² tzÃílð*Œ ýoCrÇ +ÀDÌ2Ùl“ðp,+͇7Q¢…[šˆ)¥á5k-6[Dˆ>R´£¼®ÇÇ çw dìtöy+€“ü¤¦(Ä^´PU’;> +@@צÍT#À_KÜ©Ÿì<ºFðŸJ¢Ø¤¨W¡Qk:î]çÈuöÕQc€(~[@Ú¼`ü.çÿ¾ü&­«Ë +ÀzŽÑ8òë)! fÐ&‹ÿ$ƒ0›ý[ÎÀlyÊp4©¾R8pÀxÒMËÙ´ ,Ë˨qäØX°B×R·ÝPRÕŽƒ²3nð÷óÀß8äVœ¼~㦾¾ÉeÁ7AW¼œ÷5þW®qƒïº +¨8N$ï(@Ûvw`ÇQwiI` 3t“Uëë õ_höK¡0¼(ë@ŸU8…àDÀ¶¦.)Y(€¢ À5n0_0À mn’Ь² €õë!c%~Ûu›-öÀƒ1r«Þäe¡Ö7 öˆZ´¢6ZÜ`·›S¸òAô:4¦Ð/ÞõÉþØî0ï¸(O +`Châ*U9ˆ€&1@êVK€ñ¿ÄX“ŽW¢b ð¯Xžsd:‚²+€ +P_Ž+R‹å†-rDb?ø‡Â2üËbd/þ&#ÆRª·nÝJº±þy¦‚4ÁÀÕºº¢šõ³³4¸‹NÃ|¼Ò¬Ä+Õò›VU +MÿÉݽI .(È6íê´ðwì·]ð–K³Óðâ~€n`Í-š6Ç=® RfËb¹–Âb+..ŽZéSZíÆBS/¾Ê*Ú ¹1ÈÊõk×Ä×òïÆÍÃÕ#nrý:§Þºyó­CÍ_{]ð7WÜ5ðÊUÙ};Q"7÷¨i€ºIÁknÑÑgÚtÝÆ®‘&ãû®ÛA"N0Q’ HÇŒ@ˆoòg¥ë0¸mÎXv‡ÆG@‹)ñ`tö¬qYQJ|‡\p· r…¸VnéÆ:"’s“¢Xþ¦=Ç´Kâ}w$ïnp„‚ð(½$d€}/@ÀIÓ }Š€ú_ä"5›§«×ëÆÊAé,Žñ‹öÏîªÇwÿe úc¢ÕìÐ>IÁÄ"ÀV¯ëF@+xJ¼ªkM·XŶä¤ýA´uǧ €ÙxvÎëÙ×s¬¹Á¾‰ì¸òDá—ׇ`åêãQº  oóH©8R[Ѳe° LcŒo#m4Îúb[±RÅínç²@Ai"€¶@´y«×ï¹ Äè’lëø_ÿ\£8޵ÿþi¤ìv Ò ˜ F@2БR;{-8Ók!¸ØÅ”§ ƒ\õ¨ ãþ‘ÖŽ ¬PÞê¶’x£=ÊÞà׺µ‹1iTþÌ\3{Z‚`íVÇgÜ +°‰Üéoöõs¬ËŸÖLL£…¨»_ôV@Þí¤NšXWb¾fóè@ +€.}Å f<Ž÷k4èç£[Ë‘ž¯w%\-ä¤ @üôûêáµëׯ üô ¾!)påÚÊå#¢¿–ñKÜN<À6àdœ¯àÎÀÏz÷×äÒnsiÄ\P©©Ru$ù_þ€ŸìºSæß ±Ä$0‘m4;²b­š3æ¯V«ïƒ}WyÒ±^¡L.Pµ¤¨67 ö¼™Œ àÍÞbX-¿½+8w:}®{ÒñÒ/ÜÞÉ©EÞ<»Áì´þoW,òµÒð¯š-6é,^0€³š|¶°?Úð$€ÿÅv¢ýßø¯«´iœ2Ú+GûE„î\ÝlÓV/7ejû²Q.Ãr±—äí¦rü¶;(½óœ>âØ +@k˜(¶¸¾ ßTšT]˜ª¸2UÇ9@ì­j§ +@j(€ÍÁÀ|§‚­+‘±@€`´t‡¾2Ý ý“w%öúùHÄO›¶ÄMÜà¯}¯+w5ÞrQ](Ä–4Û¥Ø=p3Ð) ÀÒiÛÛC¹Ô¬€7¢ôUÿÑ*¦+Ó¢z:Æ^˜Æÿq·ËW’R8 à™Èý®,qŸo²ˆÿî¦èï0sP€‡¶è¶`Y +€®}‘XP„®×Q{©•Yª½98N`Dg·µûè¡P”⼈½gÞ¾E¨îKݺnlŸÖYl +ü=.ÑÓ»7ç +°°ñ + F¸ñFpFCË€Pó¥É>Œ‡Ê,#×Jà4o¦±= Ò”°9£׊$úQ¶*džíåÀÊÍrD G‡÷ÖV?:úàèèÑ£5ßhåðpmíÁÚÑ£å{k‡+÷~zxÿÁá£Ç…E?—`€š ûù餿¨\\uþâ¢RmJ<ªÀÝóèå”!ËLÕÄCø/À¦Gß¹C)×cÐ ¨?ª+‹}Xz@¥æ8Q ï =ôFlÄŒ9¥?Ù Käi;;±éWñþ4‡Ž`7ºxDCØîþ°Ýi3ûÀfçX§ö¾µ×MI0‡¤ƒ´†Ù‚zŒô?e:4ÀU<¸[˜ªß ×µ ¨ý.Í~惶Eü§‰|­"Âÿ10¡œ äÛKÝ •PqDÝüz´* Øà?A}ä€ @¥Å„€\lwé¼]¶1ɦ5Ë?,*õ”öF#ÎM´T­V}‚f@€Ì¾–gc’‰v&\apsàÎVø€Às@€t¼Ð߯?ºU´¸#P*x’ø4Y.…u”1©ˆÅý8 þóô€¿øÞ€šÊ[ƒÝ;:Z{]°ü?þ‡X@lpOÏõ߬¬ÝÜ?\][Õ»æ= +«ÎøûXÓTßáqi‚<#¤É?+“@V½RsAüÐ\¼ÿÞÜR(þT3êx"ÿ¬“RЙØ:LñoÄ;£žR€J(ñRÀ=ƒBˆRę³ó&rŒ€¸Ø·çâæLß" +€ý±ÕÍ[$=šs÷`g¨ãí혆¦Jgû@Á°5—mÖ¬l›Â³ÂÄ2ýú + _é-t‚¦mK°£f€[¡6Æß¥ò¯ÙüUëU ¢¿‚=F½ÅkJbÓ1 +€?õ[‹m± €¹ `vî¬@Uòå–=º«ÿ¦…Q44XÐPB夠†´5T±×.¤Üq«` ¶´7ÑrÕ$KPïÓêÔÀÐ + @ñÊìk"€Rh +À˜À¾ ÈI;A©¢ðøäuʾ6/”°€¢½  Cè’— ‡‚‘Š—' *i]ýOÓ#G)t!ŠKI$.p‚ îšÀT€„ÿ›JþoÒ°výšRþµ•ëG«kË+Ë |Í9ÀÑ£Õk+?ešør·Ââ"ÿhòR<«‰U¾iç(ŒìÊU§ß×{œ˜%z¨¼ÛâYƒŠ}›$ˆÐ½¼FË&n,A|'ÃHvœëû…HÄûyÀ.P#ÏQG@´Ëfö=Å‹L»ãqÁM-\ P´Àä"ñÌF \½ãOi)Ų¨(¾v“Q£Uì©°3ϽÈ@ÄŒ ðÎÍnõ“­­¬Òð¯w1„Þå¸_º¸Lð¢¥H‹è…ñcŒpIâ<»›æÚY@¥ÓPεykD“·]€†ˆ}05™F§~åké< +àU@„´ë”LåvBpÇðh0Þm‚³©pÄœ³Ê¦´V@l…ã¼S¸»©96»yKU‚oìĈ9@Ú}‘Ü!Ià@ˆmW=õôŽ›¼©Òò£ aG‡¤e¶†bH&¿gq–Díô«+ÑoCæ™äùñ?Í¡\8€(#í`ÛƒvúÎUXÛªë„óH¾4øùMK·J(Rÿ+€JïA¬DÆä·ÃJ¸üýØþìÌ{ŽÈ/Œž€Rÿ[ôþ¡Žd:*…™}­$€`ÍMUÔD l—›¹N¶¤Ù­Ø‡$€ùzدOeôg +ôKý+nöó,€Çxr€ `ƒýໞý1)*FO>Ê”@éÁ' íþ¹ÏhÉ¢ƒ’ÀÚõ•›G‡À¿~sÙpà\á»ÈS¼úÆЉQ +Ä~ï/vk¸éš­éa?uû*¥!B|YÏEºn›XÒ2ØûõÎzxáéâŽu ’ýiäÉÊ…Ø„zóöƒ#Xµ°¹JÌÛh<'yt¡Ts¸#‘ŸMký(opgw«K?€Â†Ã;ŠÚ/b60ä>w.í‚À¯‡Ø" À + 0Žq_Ói>x—ÃîLÐKðïV7.ͺ‰´·Ñ@ý£õP˜°ÉW Ó¨&Ò67 ·–y¼ÂAuÓôDºnvU~GíÁº£² €Á=k€µ6€W”*¡0Ë)€.§™©-Ç&rYlš¨ó˜x0HóBzÚrÇJy©oÿà³€KÖS)€Ä¿5 + Þ(7ü°)àë¼%Êì{KZ³øDágÜEèn’¢ïGeŒYåÐ뙼^=µJ߯¡4<óbzޏY)€ë?Õû£$o + ð†à¯ø/}J+?Ý!¦"¿vBÁõîbR`SI0d±Rð íÑËÝ.44›K@Á&§w?í>æ2wi`Á ±¨ÑCI¥xcÒÛÜ¥èwû·ú}ïD_EÀ·-#¡ð›L8#³¤‚†´™l?uTþ¸”¯ÈÚQe¿2–÷Ùeò÷݃@»Wô"øïîNîJWP2@ìøI &q+À–2‘ëõ¤HíZx°-‹³f M@õŸ(ý#š·FÒCþ¿J"þ+ù)`,BÜã«gqa«œÏÍx¶¥)€™huI‹¿Éºe`mP F_¡%Õ S^ 4«MŒGÜzà‹Tm&Æ®dÚKôøGVì4þ‡nŽFôG=šÔ|ON3Pj_‹Àx»Ÿ +Ú†£ |wkÂpÕ}©p±ÓÌÛ ŽxÐÉØ×{r=”WŽ×ƒ´ ` + â9SÛ£1úLÞÈcç$¸”#51¶½E@XMøÄ(}¸võ˜Ð,}ȀݒźåœàËOö®01Ù»{Qo=‰ì¹ó ½e˜o¼ &’pÑÄí –Úpfdû/±ÇSfnÐá²s+@q£ýh¯Ú)¾äÐŒ°@”; À½Ãfi™“hÒ]B àÓ€^¥WªõkF]^“¨ë°ô…lØÝNÁÇ‚&Û;ww'ûÛ¯),µçÎp1 vô´ -JßçãÖ=ô‚¦ðxA:ŒÍŽ ¿ß)âc&p'Hÿ˜æ‚±IØéAç ã_6µÝ¥^å!$ ùâä£,huÑ®ï)PF­ì:Ðô+ym×K¸<<+€9FZmmO6=ÀÈž¢…5Ù `¬(&»€'¡ØáØmÇsgoÔÏ6€Nǿ䡛¬ópö A•TÝŸTƒNÖ!€šx®ðv+sË?O¯“~ŒÈhã(ø'Ô®(Ýwþï©Õ'â›ãÛ£ÛQ6²½=íY|Œ$Æ&¨+€¡HþFp_Y¹qªˆSúÇÌ‘_GQ¬sݺœByÐÜÙÙQr«·Ô&Çnÿ´F†/R€ì¡¤:]’ ôz°ËàË£–ñEØ>,ÆiZ+€»ípq*x›8 ?©3@‘pç0¾Ë¢@£¹)ÀÙ+€¤Ö"©Ny‹†@FáS@Ü_ÀÁÎ}ôØ>xc{½—·&áàe>² €þÙ&ýH¸'T·ÎEƒ²$ç1€$@Bôl®•ªRŸ*×·2þvnJ(tù+‚A15@X–O4æÎrâµ(l?öƒóZi=Åÿ︛íXµú–eU(ú媜F½ñ®²ï€¿^|:žKÄ<ûþ¥ˆ«ÅŽãÏtkQ +0d$P1ªÕ€B¯Óél>³ùЇCú4 dk‹ê@‡Úû’è¨wÚd‘>m\ˆð=¥AIþµ˜Â@.6žpJ%§v/†¡füÚ±ÀAÄ’… CVÖ;¦ÈÎûÇÀµ5ÀsÚÞy°Bø7Ôšúe*@er+J„£ïеËWógDçl¹óšPª®y:Ú€„½XFð§-(BA!jWVˆ9—-–óKÛÝÝVŠÞPØW + +¾£ ~ÇbL@¶«‰ÎV4 4!B.¸'дH…1$U—‰¤ÆN!-F ï˜lk:˜ìïòýµƒ^ž`ã¶&¢ù8КŹmfquÑhÂUîqj”¿¹ÙÂâbôlª*; ªÙµ=ÿ$aÙ €Xž(|S²:0 Œeœ¡'£`:½ÚS°¶h» @Ñ‚­‚Aúõ) +L +ÀÒj¶ËÌÉîÖpËm0Jê.BœKÄb2öq½Zˆ}‚ºxÔtCÖbÔ¨,pGsœ¦¬sÿaO:»nu®½”FÀ &(ôýÏÁ*ÇI@ð9ȸ£t’¿Û–ášC Óš±—/ÓÔ…©nOÆ{t¶WA(ÒN@Z­ àÆ»U@©4?€ûý¨²§­ýV²Ä§£ÊœÐÞÎMK¸ +‰[··,rß›Uq;ÀSþ¢KK €÷“¾T2oiþ¦yIqeÂ`¤I[(†%ÁŸP»èžBÈ\îÊA¢'€`æìl\KͯúÞˆNŸ> ìN6DBlíÄ®H£Ý2žã˜Ù‚v·wÅ4A¼±ßëu­ØÆ)¸Kãûˆ +»c:àGúìt:?k²é„úÿS  ³ýcƒÊèA]A _>t¯ò)ñ//Íø±Ýî'`‚>%¦ƒ’ªÐ–è—‘Ô¦\Øà³á°§¿q÷Q̃ˆÜ±–ç3aÝŒ^#»»wW¾€MÀ ÿzÔ€öi+€nôKá,@À 6¬ê_eÁ\Èõ1Âå–ˆìì +ÀvŠþa¹î0Ú=û£á`C+Vèçç.ª¤£åD‘„µûãÉmr|NbŒmB"´+îéIƒœÔÚÖ8 p¢ Àäµ×œäÔ ügà÷nYd +¥ªÈô:´y¨â†ÇrÄÿ©¯%íô¼‚¢›Gœ´_0üùŸÔ”¿ ðØ©&z3ü^ˆôV(FåÔú£¸F@·÷]î‘€³QÌòžÍÄYã_¢ò›ì*Äy{(€nŽÞ/ƒd™®pÅ1[o&™DÀ;S*‚͈‘RCùÖ†³éóÎŽ´ pÅ#‡’“.åc–8ý£X‚_UeVÿ?Y;Yâ_þõài Y¸¤^àc“Û6… +€ŒÿÓ ü{i‚¿²½»±1ð9íèt£Jî- fgI:’ÿRÞwÔSŒ1Ë­·cJô«"øËÙsgg²­ïzo½gÒ&ç»òrsàŠ…“ìúñ`ÆzÇľÞåÉŽ€[ºN5¯3†½ÂP£>mÖþ^7F£ãÐdP@H˜gS.ãXÎ$¶lÑ©xÉÕ€ÌÕÅ??åY €Öï-hæ9I·È<#S€Àf7 ßÞ•;¬‡€„“`q\+\Ž!™  {í@¼)‡%s +7ÀK ðÛ¤8ÿ£OŒPXãˆ0êá˜%T¿kKÜïªUi0€¢ÕXàŸAˆ…}ÿ-ϱ›¨/kü˺ †g<]´œÊ6Ô'éØ"pѹ7‰Ì…@/Z´»»‹3Piý ÿÀY÷8¡:©†½Ö"úOÁ‡Òþs”e +üõ& ÌŸ³Ý®(ZELhõ&CQ=Wöÿk°ltÐXÛøË¥pB<¯Ç @ž°5P–Q©šç¢§¸é®v" šÜìásIM“JÄa: Μ +À~â6@+ŸT ³SÌžÛˆSñç‡Ìý-L¨»;wN*€W†´ÓÁ;»;Üè®N»$õ7FÇÛ„k­>_ÒÈwþß~„pÇc+€)³”³»×-û]Z⾿ª"þÛº]€}G;ãÜþ¸ìK0V5Ÿ0c-c¨Šy9A|Ãâ&(X{c\ð„Àä|@7zõäè“ñ+“­×k@O¼Yá2)î;YL®âPÆ¿e­]Ç=ðßìE­f›ûÁú,@AbS +€‡[Å„Aæèd`gØ›ŒEÏWóá§X!l¸¶vFIÀhøž÷E>ËŸñ½ä°ðΊ$ú&¤–¡‘P?s¥b*tþÜîöˆËú¾Tˆ9• 9GwÝNÑóP4ª¥~î{p× + ÷’™nˆîö?š&¼P€ü椠wŽoh%y#Õ£ãîîÎVK!F?»†IÃ;#1€€¹{°³¹µ[Œ„í{d´7Þ˜ vκ«¡ £‡À®mT€H³hÑOàtpŒHß©Nã>Á¯©Yÿd¥%y]ÿQÿñïßg±öXõ¨"ø‚.~’Œ ¤¸eÐK¥H»ÃpÆnшEki˜ +6*¡š +ìó¤æÏÌNìûRx +@)@à¿7ì5Rà„R!´R +CÓ +@àǼ]+mxyÉ +À08Ųeá¸Ñ)²ë†£ñF»½mÚ :Š‚úaB9Ýþ­¶¤¶ng‰)ƒ_h¢¶§­Lª6€ëkG‡e?GA{¡\À4y6޽§~ã@±:4>0;W4ñ%\pป¸Q,azÔµè ^謖i –¬AkîvE9 +ÿ>v™ROúÕE5 êÛÛè}E}áÓ¶@ã¼ @ÑW5.ÓF)T +nsöœÝb=6ðUàÔ³oÍFßÖCr4iúxrvâ=©. ¸ùö+J?‡=®ó¹ 6Üd\؈ 1`€Ò¼¤áwâ&IýM¶ƒ-.6šÎÀ ЗXlJå¸OPiîú®Ÿ Àe0Q•\ pLâ4ú +(š@RE[ã-Wmî\ä¦MVsžÌ)@¥ÜP] à£0ü 0\·Ó<êÞÅ9¶[ˆó6b]M¨šøtèA~î‚Ï3À¹9é-Q(ã~‰Wó"ÐH€í·%p“V×dÚþd϶½¿M °sâ½Ð)¢…íÝý‰ØÓmv¾BÄ~à3ç '+Í™I@lØ4 &›( ~Y€ÂøÑVÌã2’¬”,m» @$Äveú!㸘ü’b‡Æ‡$}KcGøV'€„Øwh%ŸôHßÉàoðóÒHô\¼Ç°Î‘Sþv™*ÜN!ÍçrÇD?¶ÿ–Í­Ùîˆø0@(€Š€ér‘ö¬+€ ê2ÈV@²ÿ=?½dagggÎD +0¸5èKÈvRZO(€þF¯¹@Oý\3i?~-€ýÀøO h॓õÎx¼ä£æpO±8>ð\åØ`ä3ý å?ÚCܤÓÎáù‹?Dèëtúeþrõþ0Ñ-GWù³!D¸‘Gœ¨+€µk ¼víªŽÁ^†•IÀD%°©*hÓâHU Âõº.zÚ<¸Ëèë à8 ¤Àˆèoì9ò¦𠻘©ŸùsèA‘ð°$Ž`èyýÄ@g/ЬXÇ¿4]”Wî$jüMcñöfÒ I‹Ÿ@î…Phs¢´Y\Ó +€ñ¤&4¸¹ • +g"°eŃeÏÒ¢tý¨ÀïþÆô˜á”‡Mk.ÜEï¼…9ÿLjnœU4Èê + j§Æ ÚïÖŒú@~|¦àBàÞŸ’”½…7ÊÇÖÛ‚lò¡^?Ø…mî†'Ð'ÚÞeŠtƒ[~„ €l¤´T|ÅYÿò޳CØÈ]aëæ%K«)·&ƒjº6k[Àz¯?êh÷è¨8¥¸¦¦ôAÀUêÍv/¶{»\*×í + œü„á܇i`O:¾÷¨¶É ®FNùɼdƒ‹'•Wܶàˆr òk)¹\¹f€“ýœÜX“\Æ-‹2¤3Qa´ëu½H ËU.>ítÿ•ÿûÆä.Dôx»y~6ÙÏèÆx^Âb¿±DàŠ3V4èG9Ë rUÆBÖäÁþþþÞäöˆ®*‹ñd_¨›lßþ_{µ8«¢ +ŒÝåŒë΄¹¬ŠÀ0dóš'ÌO+•@Ѱ{°»«ªÐá v"€öú) +€ŠªßåŒ]Š6€ý2‹#üåx +àS¡D-òƒ&ÂèúP2@ö;µˆþ*.=ýÐT >ßãcÔ˜°³À­^O1Q·2C7û3®·Q*S(!dˆøµffëL9rM¤(„ 2ú`ã^4îÎX˜ŠT2]ŽÊ›PgðÈÒ¢  Cs0€Œ Å˨×\ÔžÔ€+Îð7” + ro¶×¾¨Ä˜ëRÖ9 ðí +ÀPNHËPñzÀ?ÞAömøl v€e\.µNX[ +@ÿt(Vè¤bŒõLÂTe‚Y³gD•X¹y„ìM #á´ ÿíÆÒh< bøq—­õ²Nå ÀÈèE¾÷¾9ø|¥¾—QáK@ZØ?6šìÿ—ysóÚH„ÿkÕt$ð oÈ)ä"ë¶â–QÜC+p¹Sè«ÚÙ0)hAûÜ´ì€ð+" +&’poÀº‹6Ž< R|Á¢âÿ €t½mè¡i à?fÒX‘Hü¿´EÌ/]Ú)§?þ ÈðïÏ*£´¤?©SñçÞX`½øP7Qû´Á~¸ûþnÉ/ÄG€€A¥Ê~¦ È»ì LûiÔBÙ +à%Óœœœ¥Ç‘€êÄ¥õÿ…À×âH£Zœ‹¬ÿÿ(åé/ò€‡‰õi@ÜœÏ'§À¾ÁkçEÇM`tºÝuÛòçQ_Gq°ÿg0}[€™Æ€ÀÜՇƅ¿TÅÖœ›[ žª92€S€² Ûýà0@±Æß  ´DþB{¼M…XtËɵÌ8ª8V›gðÛsí~·hä Êó{:lôýl(ãW*- ©ÿ]èþu×W ° „ czƒ<ŸÖâî`ÿµ®ØAŶ'Ý‚âþ;ʽ°}ÚBpå1õ ÏÀÀüÓú쳤H¤©´ˆ@¦Ìµ-Ô£ ÐäN“™¨z»Ô©ÃßJ +@ÅÌÉeþtL˜HXOçâwžfVìMÓÿ*®Jî˪ŠàŸÂó—S ‹èkV*®…ìëÆ?)]†ÄÆBŒz ѨèöÆ”KA—£Q‘œ¢¸Ð +@ˆ7äÒÐ]@K$†„¨l§X€?üÀgè àR€Ý»I@ÀQðä$æÑáq…T¬=_8bèÂoœ äràä^G Ÿ4éKZÕí™ìò–å/` +å›ÞOôðŽãƃ5@-•bŽVÞhtÇÒØ‚“öho›ñ÷w'^ï ±^ðO %Ž*§ù*b +xG'sc­ˆ)‘E̱·s¤è2-%…©ÿê¹Ðl€ýÚj.´“»û{ƒ%šÛô¹üÿŽJ^–mVÞ«8áçSXØ‹)5ïy(Äy˜rBP‰Tý¢âÁ,Hs ¿šáwJLh|mrLØX¶lå³ñ1®$'úñijú#â?pŸ÷0èyIMÇ·Z̺å½=O·\¬ÊfÁ±Ä]<^µç¨O# Å£<¶úÑ@)Àq@5úŽ¢rbÉ¢y²Ù!rö77 X ˲žèf]›ë4[Z‚6€0Ç„¡Pð/lÿ‚¯éÀÐpr<À辜f¾˜Ð+/ж:B7y( Iè™ üœò0„{\û/ú מŸÏ‚•Æ¢••]¦]²é³œ`çS™ ÎÆóB×)Õý œp‘Äfh,ãh®­T­Ä2ÉtÇM¤å>F`Ž<%*: æ +æõó’/Ö÷5[gg<˜ˆh€õt:ä{(Lé$•HûZ@_ÙAžKà6€Q¿}-Î(’h²âßhdå¬3.UTê±À}P€”J•/êhCÐ@‰>*~x'Á¥WPŽædà7&9"« )2Æ)PŽ ” +À}‡þõÕ4IÄ~×د›ë&Lµ¡ßÚRfg;ͺÕÝ}[_N%Ó2åÔvÀq(üÞ˜Z’¦y¾š +pL@¯‰â$ÜêËEJüO)ùV¶È|5P¬7-Nx£ZB§|>À^üµ<0EœôHprÎRœj¥ÿLÐöŠK  £¦?P‘`;la4X£É/ À§Îš ¦%œU()€ðO£']ipbù¢V ÷2—ºúÝù ݑⲠ@3àݻѰkQý€¥­nÂsã{€~fþݺà52=ù? A{=õÿú‰Dà/c% ¹G»Ù\ökrKN»9w¾ÀKÆ?'`ª6€~¡ø³Mø é‰vÛËXˆG R‡+ +àúçLšŠCÅô8vg@Y¸uq§Kî~-Ý¥9a£K#z·¨¾ e +°ªÒ÷˜}!HÍ…t0t˜Â{£=Ú•#Ò/ß½ŒF㉢i¬°4Çx€4G˜ϿDù Væ*åì¶~Ónå•ÀſݕH¤Ã¿£Я&m4ú‹«–|«øHïg´t€ºª  ß•ÐB¡A¼ì„™à]cg su9Ö@·®\çZ6 h¡°t8ñ“TU + qª6g¨´ýnƒL´"ŸÐÊh} ñצ!^ÎLOD0mQ¹ù^ä*]rÝpMÏ©“òç—_F1ˆ÷ñ}ÍÐÀÓƒüB©PB„qé €ƒc§gýÅ)€Ë%LeœŒFü?8PD)Lõ.Šƒ|š]–ÄBkõÚ!½K4š½Q1A?taÄÿ + ÅœdL‡QbE(¹Õ·€-ñü·S3PÐÉ NŒú×x: &x€¾ rcœ9q6²vé‚jƒúйóóqðé0ã@K ©o0€J’&@ú7ýñäîÁÝ»:®¦êr—saÓô„%b¿[;ÿz Rô$·ºpÁX?ÕÐ1haÉ)j&m'ôóLâQrÑ®p¡o‘T +`A±\ +€ÀUÒ°¾pV8ªÂ‹¦A"€èg# êÔjªw¶Ø“Xl’¬ÀU²1^a0ôõtðL¢&9-¿PzUO@Ü++¿2·rp”Ø T:@m0Ú6R z­æ&ªÖðçeêæàÊ`³%M€ñ;¾yZXùLvRð_GTÏ Ÿ4¨(÷&JúÛèÿ÷rU)NT}7ÈöÆ +C!j^`øšC‡?` 9rÍMÀüÿú3©9¬`ù u|`Ÿÿ7•o¾ \£Ùvò×emlrei[Y"ó +üïînR– l*ö=ôn˜ìúºP(n¨&U„"šþ!ÃÉΖûè'·É¹Êÿ@W¯a¯h +«€Û\í2Æ⟔¶ =,ЯUÝÉ ³¥U˜¤TþÅTZ ö»2Îüùý8¸jã%ÌèÏò¤Q%/â9ñŒt‚}~#±&7Gë +i99Ž»`pD# œ©¯wß5Óu^@¯nÍQâîi“1™8CÅ–Ý{âBLТi¯ê–<@(“žB;.‡”ÿQ¶°›½:à NDª7ú­_ ˆ}÷Ä›&±G=â5Y@$ Bë•Í«<‚&ã +€ó•#Ÿ%ôÂáÇ•…ˆž›‹˜ì£+ê³´˜«ùÈÿ.WÔ¨ðEt•°ãË’0Z9Ï.säS«æ©Îµ­¿á `K¾ +@‡h. p†°ŽÜ +À%ÃŽ»ýÏM€ZB>uÛ(¼Îm :LTbß}jL£©0¦ãÝ݃=®SÌ!•Ñ \•=ÉÀ€?‡;0_ßÀƒ Dʨk¢J»¦:½;L6Z(}•`/ñà9 + ¨­Zœ%Ø¿ñ”=XÃ+&€QAÞ$Æ*+ËŠýn-½¤²(×/bd°o@H”¾ÓL06”V‡?ç÷ì‚ÕäôßV(Isks¡aЇ"%¸8FŒøŒYÐ#ž‹"Ó•}Þ¾ÊÝǤàè6€àw\F›h„øïöÛ…H³PÜ7þQSàšÜê´NU7e +€Á€§46Á5¼5P™Àp*…3¦2 ÃBp¢yq€¯¦ÆBSi¾à17g„´£!'+ô¤Iýs?—zÖÛh  °HHàŠßlÛƒÁ2c{óB³y,£á +ân"µ2ß×}ð¬È (˜YfýeÁ ‚µoÚ©¥(몕ÓÁ½@·²ò¹²Sð«ªáWö%5÷^ãv%˜°€Ö8 @ë¿Ý–GÕˆ˜ÑüyŸо +ÿ&Õ¤J°"Ôk%xÕVWÎR(×Ú* ûFyŸpg NЄÑ>ýœ6s#àd²Ùâ¢À7Éê¦-ëó;±Ò] úº¹ +ƒè+à!PV&÷;þ\jõné½oû™ ÀŽž“þ”¦`^WZ²/äoÈó“ç'[Ñ  i°³s—Á`©0>AØt,†=>œ™mvÚ&€­‘,< AVáíŦ UØØ2ôý„¤Jà]ê(e`+`øOá߯4Í›i^† +€ò@óU âÀx£é‘¿þÌ8Ö¬6„§çð=ìŒö’Èo À­Ýk@Á~$ðEû°Ô1*‡æ¡hMHW>•ŠÒ= /ý4Û€‘âÈ àñ ý†w ~yk Ìk·^1þK.PZCZa.ëÔöêžôÆàv|vü'pþeJä²b(MöÚRúäßÙW%¥Ø’à5 +À1.ØAc®rð†’ì”JRT +ÀãPõ6ˆ5qo®uôgÚÚû©"v†­öP¹¤6k:Ųj¿+³¿Túÿ\¾ +ôõ€b¤@£8/pÁ†uûɧBò8Ô?Í 4ßrx?â{L(®xHÈÍQ»IâÎê\)¿‘ +`2È«ÿèà®k®.Ú•0vE> {šÿù`*P¾¿k3[Àf¥dJIÍ…V¿/¨†1äv6ʬj5Ùi^loOzíÑ€À@Qµw"öøU×¶„ÚŽV/DG6@ÑH€t§màw¥&*•‰)`4Nä‡IŠkMЏs >¯š)€Ìõ–sd"™¶á ëÅÓíÄ>`ÀgT€Ww˜ggGI–òs@o„ú Là¯G\i  Ï•`9½‚°àD 8úŸÀwíÖ<Š… xõ5üÿe¼iž–3ÄÂÆÝ ò®ù² ÿxG r2Ái)$vƒ×ø?;{N;È +Y# +ÍcP ñâÎÅL7wèä5ºFwFw\ç#6P›Ø( à`ÒÁéj +€†' à× ü¿"c{íÖæî«(€-HÀfÎ,~RwSM¥þ§àðtç©F‡^¹3XñšÂàÀŽžÆÝD¢C/n1kòéýÇâþЦè ÀøŽò»B´=v‡T9è.'Gc2±7”” ÀqåS/z›mÑТ×;°)TV + Ãð ‚ B|¶ÉÝ& ?ž€S‡ €ˆš(€Þö¶@;À,ƒá šµiNOo€ 1Á0.úvò[; ‚)S€%§@ÿTÐlÒ[¾»äË/´6ŽÐæjµå ,@¦ Ä6Ú‰²>¬™·¶ê{àŸÄ»ô¾¿Ðx¨ú$é$Â’ õ'Ú ¢¸f”AB€£íÜßýýßÿý»ï¼ûÎÑòÎ¥Ui…,űhZR_ж'eÚ rÁ=wKØu/h—èÀa´œKý'öml]«Ámñ\í­ì¦\G;¨•jú*¢£a_ÿWümáRZƒœÍm¨ÖG};þ¦K›)à¸ØEœUaQbss*åRTÿÄîÿþ4Ù•¡Oé¿dü/\…†²s +—³Ó)…Xp€ƒ€û +§LíÞø6 [éIiÅw+™*Ûá_“þ’%H4å¢ ŸFÀ·Ìlÿ;[%4õÀ÷Îì²Ï¤Ð–æ~fínË—Ò«²-8±”ðçÙ\Xl´ % 0ÚX|€…öÐÇ“qg‘zÛÞ™ô.‘Êòt<;¼Î6ßh5Es²`yZ¶ŠðúÖZý0'™ðŸ*à˜Y¤´”¡Tq28ŽJÅv!|fΞɘ†Ñ ‡òBÈ#}º“X(UCKs në¢_\XšxìÕ}Šð0‹ô§ÀœÍjžñÏ¡8°¼ ôß=zçÁÑÑOÖÞ8<|ä“+€ €RèïÅ +¼Ù`aH +%š)ö”¦”5ƒÔŠšhŸð$þCHœ³à4 +À0œÜi· hPX`A˜rÎ÷ +Ź5ì“ÑsJo¯îtUtÖŠ‰›µ” +`ŠÜ¢m;»[tAðjA)Ç,+÷»²h72<ÜW>Ô²Üz ›‰UX1‘¢ð¿€ðN=ÝÀ&—&lÉ@¯£:¸Á<À/ðß‹ñ’ +ÿÔaà:©€ÄšÃ­ÀJüsI†@¢_æ#KãO"€uÆ2êM+ h,YEÐ*¬þ ÙAgT†±Méãlì +@A ?å¾Çg(4ÿ…~SêfÔ!Q,wü @ƒ}Êe<}@I@·û׊ÔôµU}à“ÍzÕ'Þv†}½ÅPåõv¥¦ z\‹Ï)Sý +ì}•Ç’¶ 0å¹D.$qšÿø5‘Çn;zøîƒw=|ôæ›7n>z÷è:×&^¿~UPN±Râ~>§­Î3¬ *x<Ѿ-)‰¢s"¶ÃÐ`Îÿ+üK¨Œh.ÕN°*Vc0cwF—…HPÀ |eq@kLë½³ug‹fŸ!öKGP*ù¢ß;TEàE¦-äY@6ã÷4ý=€x@ + ÕÙyµXÇIÓb†íwer{ŠÀ•Ë˹Ùઉu˜ŠÊÑŸ},šÇ†üIëŽ÷Šx_~|&©'ÌÉ—ÿ=­å¢þÆmCèÚ6†ŠÓÈÿÞéSætúÕäÑž0\:óƒ(·bK›µšª^/-e‚Ò^¨Ö”Ø×S»¥vÁ§2¡ŒQp«1A׻ʸ3êVz‹Íöæîöd¯×îy0:€É/þ€7ZŒ}¤ƒmµ•3x“ +ûN¸"‚@E²1¥ + +àáÒ/Í€ÝmÎÌŒ°³MÑ>½†ÿ Yì0¦-ïÆƒ´nN`ÐÏ¢V¢¯œ I¨wÎ 5.h‰ÙÙnûzû +UÄm~- Ù;Gï¼#üW +àï›àÚ5nG²r}eeâà2#Kþ¬Ý`£J¨•.G˜'þ«Pj¯aߎ²Ë>X@X˜…YÑ9¹8 +7ÖŒ šMÂàÐ=Üô/Úe|d¯™SuÜ,B +`ggÓÈO €–ðÚnWƒ‚bÁ«^R+ò{ØÉŠLtGTÝ!Ø=àDGmÊÅ¿Sþ ?ü…rá ºc¾¥6}µ¤ð0IŸ“4§ XFOÄ-ù2€E# b;¡ÎOÅ~¼Ð,F'xþ$ à>  ‡&ã¿R¬eÓ͵wÿ“è†Y³è2€©6°…v¯s±c—)®G + Ó®ƒ; ççZ ¸#Oi1îÅX™H  |¡ €ר0<¹ PLRÊ9¡ó*3§2O!á­Ý> +(  < ¦Âqù—††UTnΜ ~¤aT*vªóÔ8 : Fã…lf,@À%¾r‰úÇ€=¢ƒB¸€¼Cñan–FÞcø Kü//¿ûPøð»7#x÷­#N`¬¬èú «–%ü¹Ø¨ Uì|ÄÿÈç(ýuØŽÿ‡iGÿZ® 5XXè{À0[¨"¢”UììÜ¡„†w†wF[Êô†;;νI"x²·'Û5à´…'Û(`ZÀzñíwG›ë»o(™a¯JÊzŠÅl»ß½À[ +(Lû +ˆhž†˜HÀMw'¦ÞxÄÎI î^åzÁ¾-%h(þ1ø=ª™B<µn &4Õ  Pøôå¶ÿc²æ]¯l¡)¥¡½T§JŠ}Ç–æfηÝo; é– +@ÖÚaœB,S€æ"0¹»ÑÆp´ÁÊ2ëS³¹Ø”ß-¡ôÎùF|n$ðßÕî™ñ*¦õM™2rm~f†“ñKF +¦£üðxÔ™íŒ8®à°i +ÐÁO›b<1€pÂêÎÎÐ!—v¥ˆ%DC Ðå<‘y4ðS%}ëø— (À›JÞá&%×­®­\»výñã¦TE˜sŽin©kOÐ*1y”ÏþÜ=ع qþ8 Á$bñÚ¼*­ >sO +3@¥@Uõ@aßñ„{õ„púïF@¹Ž€æå©û4@1H©ÞÞ¨€6;?E>Î胯ýè€Ïì"dA¿ÿ‚âØ©„î¿Øø™Hñ˜s¨#/à•ãj{¾Ëbº’Oü×SA/Qs±þÞ­€öK×£pÜyJ?(@o"¢8=Õ§l£'L1$^0þƒ(‚QIð”ÍÝmqµë‰*÷%PãaÔöLù!Àß +;ô~¬9wV€î§uDã <Ñëmp7ŒÍѨÓÚ¬€¶]!¥ÝÛ™Ülf +@•kŠötÏ9î? x´¶„ ì?zGPxX´¨ ZS +@0m‘vf®IO¹¶7a®ÐþÚÂÎhõ û¤@~qþÖÈ—Q +Þµv‡ô^@Éáµ¹öF´£# Ê—œ´¹ àóþÅúi©K¸  ä›ôþøñcÿËV VøÜ6þ•À ÿƒê~èªxªž'ïxJîi€Þ¼ª(—s3œ(ÎT +€6•C«#ÿðjDstVЧÜÿ‡ÃPøEaæT`7pÖÕσmÔ1߯ÁßM°ÚÞÖä €ƒW«ØÐǶ¿k@MÿUøW‰ë@âd(I€~G«Ÿœ¡k¶p£Âª¿Ë³D¸/ÎË1#Ôè ÇgLKd€ñ#2€3züEìAGTµ>mø,OíδRV – +`×ç„ÝH`Þó4HCX×ÞÊÿQ6£?ü~©ÝP¨#)¦®¼Q2_#j£ `Ônm”à:\äžhwû-åEÈ—ËùM_þ†8À4äH–Hèx\¶;öºRšwB¸Ð+S + `Iº€æ¹nW¢<[z ÿv¦#~6 œÔ1¾áqkµ»îëÃe3´žœYPÄo5=Ò3`çÒ¼6—þDÛäÌ)ø§Ç¿á¯·fh'ømV÷² ࣿ¿¼²– +àºñÿøÿ`¥XÿYŸ&¤]rfFžØíÆ>„nw]nîäá¦#FŠtZÈÂaeD¸)`WÈI•ˆøÜHäUM:sß«”#U÷w +ÐE—À0†,Tþ©Õ¤  #P<¢H½ä‰6æ + ÕV +Àá¿?ãŸÑá-¡û/4¢~©ôBü·Å»ö5(`4Þ(Îûùvˆ4 oìðÎ*¤×û~ÖÙöƽŽ\9%@ŸÑï*s0ÿ> `À†½–’u}‘ø&þ›\h’Hn!MhÓ +€þê*(0_Çÿ €y`â  ¶ÔZœo³Å®l ·h÷c ,ú{¶XŒ'b«VW»A€À¬AoR4¡ŒÞ“]†¸$PYâãýA»í\W+í÷4´=8þS3!L´A?,#›BÍA5ü7΀}Xš Ràr“¸Õ~/ƒè\ÝBÝÈQ©s™q·Ý@E  |ÝX¿àþôŸPÕÔzÚ+k«?]â1@(·¼ó“£5nI.»fü?^»gêÈ  õ4(,íø÷ÝŒʟ*ö›÷w i¨XY˜‰kÞMš©¶E˜ +ȼ:a}Áp‡bë ·vKPOŽ+€ƒJ°a¯;<¸td[üP¸òPQï ;¹áÏÇ‘ÐǾ»êø×+Õ[™÷‰¸0Ü´û•øOß³#Ÿfü¢>z)€ñM +™ì¹ ¡ k{Ù07ÿ… YG 9ÚËýç<$Þp£jÌ2Äð¿xÓdŠÛÞ5D¯0`›+‚·ww ü4XƒSmªJ´;ò3öå^t9iΉ ¥’­0U ]µ¯›áo[f·Jh‰ê-jïõ¾×«€…EW=)³Eåͨ€†_›íf_ñ@Üüw{J;!€n³µ!=e3háéI0*»]9¹ý\ŽMäa‹ús/Hú'u%ê°¾VëL3Å¥¿0«ã¸ +®ñÉ´‚¼‰¸‘¡‚uô³³o½øèæuEt>L`ÿéêÚÊjÉ¥  àÁå£G‡o*8” þ÷îÝ[‹Ñfµ%¥:ÈÍ&Ä£•³9Çÿ}UºÀ¹»»{·Ä¿ßŠ YŸ&@ŹÙsú. —à/Êö¶¬ÜȶÞ4ŒI“.:^líÜ^W¾ü¼PA¡T©¢t#jFì·ØUàÜy•uLÜò‡à/ôMâ÷_nÂ}¯úÃbom=nøføúë à¬_;Ri{RcÅÊp]zoÒçVÖ£­ÛÀJKÔ  G.¼Ô¢I¼m!÷»­ß)d8TýĬ¢Ø +_é ’ºëV@Jžü?›L‹aŠ%vgˆ«rRƒph Àœ[›D¾¦Ù[.Ds*€ÅÎVÜ*(ý$€v£§”>Ài¥&3öy4ÛÝÝÿe‚¥Ñ%Ð hÒÿ±à€ñôÁm³Î• ¬€ æzÊqÁÁ?×ëăF@wr;©âŒßg‡ Ñ<'d«5PæÜºC›Ÿ¡ÓHô„殯­Ý¸¹vmíæ[«ïÞTD¿~S|Üuœö=I•UÀåKõýÿxéÒò_]ºô——ÿŠY—°åKË÷ÖÖî­Ý“¨B¶hÇ' T¬AjK$KÌÓû]à_9€/^×Î!ø‹Õ<Üz 4% +“&¾ç—üY” +€ªÕÇ÷h3 )Àº`k8­rgÀ?ðÚ7AýÛðàZḆ_ùWƒ-ßc’ùZG´p,Å‘}‡mÙôW˜Ë¹´q‚Èen7»ú¥2:f{“ñ¨ßî çm*Åž B*Ô=õ/b?-brÿ:ôZ3-ÅY@Þ£F¡T/2²p½ZLÊ6€\TNŒ0-†ö¨…06i˜o¶}hPî›ãҾò Þ‡RÿÍ^ör +P€@?R€Óñ_– ДgëÖ¡+B¿Óêr£t:õz¢ ‚Lƒ§ª‡I Ûn.úDÂË®$Ð~A tW.¯Ü·°3 NŒ'W:À TA»‰Ûeˆ*®–³ p¶Ðç`©dý¾´v oXY»ñÖZ(Ì'ù4Ó4pmuåÆá£O–­*æy:üÝÑá› +ÿ¿;| ð¯Ý;<,K{‚Kü»‚/ñiöˆ·2†,гÀ"Ý'8ªôU­4ùÕÀìlœeð×ì (hé}<”š•(@¯¹Žpž˜)ÀΰK +p\„Yh×^=è©t¢' àRmÇS àì_3|pgÄýîé‘Àúðâ€?mª´Dð¿Ô`S€” + +ÀE-Ïå¡]M +àêNãôOÃ_6}ÝoÚ¾$ÀXÉð„× ÷&JtØ1èï± ·„Àó;Ôt¡¼{Íó‹=-.ð…Kʲ¤PQâ"ÐÝɞʞ›DD€‹ ó’iª‘Yå’ˆ<Îôs®AÓ†ÀÄDN-ŸLuq *0ˆ¶º­ÎÄœ°™~2l‰À8)5ˆÀp?i —À¨ iA´Ò¨šu‚MßÈR¸ÁDAP¿pº4åíw”QKaÇ‚ô-쌃CæÒe“@꤭E/©œLoúE€Øª  ½€ÏlƒÑ;»Â¥š•«^$¿v¸~ýÆ[«ÿ @pýÚµGIÿ_[Y•€Vü£••£ÿx¸¼¶úè­Ã Žµ58ƒ<à7¯¿~XàßÉ‹rض„Ž µÑlDíÇ¥`ý»šŒ#¨eIO(Šò .”Vä-”)<À9^GMЀ¸¨ ~lvDw†±@a»‘€ßžîUÑ[zbäFÀÞP +‚ë%" Hè‡~ÿ¥êÿ4VP¸¶Ùy‘–c®)@åΧ¡¿Ù,Óä)ÛßOFŠòª‡tºÛí+¶‹¸³Ìq€ôuì›Vçyìp#c’Ì6™ôó,€‹ù ªT¶:pˆaÑEnv¡Iôì™iz +õJø%+yòŒÀÍNJgè͆³ €6ŽMÕ”a¤&Z2Ì£N7nLš±~¬ÆRQ(<y²€v ZàY2p޽nؾˆK‹K1€Ô°9Ÿ$0Wv÷¶ÖÔ£Òš”‚ùÛ”mmqjÑWÌëÅïF?™ PÓ‚ï•Gkþ(V + @hB\¿Îp$ û«NÖŽ^<¼¶²¼¶v_¼°vóÆ!amí-ýaíÁo_?<¼yxXà áÑýjEa]5-lîªÞc-¨Á„.&ž(»w_³Èµ¬¢8 ЧhÄx¼R6¡b-ÜÔ +€q‚&wz@‘[+Ú„WÀ«VP@¬Ü¹•j!þb @€Œìb‘PÀ_5Ò]§^x ÿKMiüŸ=G`¤ÕzåD‰¦ÐÝ ±ßˆ!¦Ó]k†,£:fû{´‹wzbfOö'ÜÅÊ9ŽBzÿÙÏ&‰P®s£5³H'm)Ÿ¥Â("™€zœõµQâm뤻ûˆAÙ”ÈÕYòœ9;+¶:4/d0À ³^ðjÍ fÔþ™(Ð;,{÷B”ŒÚ­&7”¬³wȨ“V´ýËjüû_hXÝ> +€†AÎh•hM£ÓâC˜5»ó˜AA‡Âá°Í‚ÿ4P?~8@@ +@™/›1†óΠÕjZŒä S‘LÕZ}4þÛ +@ ,ƒlyf@ȦՑ|‰ÝìsÒš½É8}b`B°šYÈëƒè0[LS +ÀðwÓj4ûq(|Ù¨@R™ +¼ö㚘µÎËIíÕÕB± +sNoàÿ1G¨ÝÁÌ Ômw»¢^>?ªÐÀ¸âˆÔâÃï’äQ(aŸ“Œ…ÅÚ‡å8€Nïq9G +@'X²\‘("_ïwTíu“[E>ÿ¬Ù(\|>ÀœzH†ù/ƒ_À‘W#÷× F¥;àiUäÿÚ+„½íÉŸ÷z…×-ò{¹¼T?¦"£vý’Cìú\ ytq»oI Ïî'èWÒ *ªm€  EG`À‰ês ÊWÁÉ;­žýß pDQË´÷Óñ–˜š“ÿWé[ô´CB:2ÂÊÊœ)Q“~>R) +\î´®Õv‹³Í(€Haê¸#[õ&L)ó7W¦H€ÀiQ¡¢ñ7øêxã ˜ôóN»Û®/xŽ@+€4_(«¼¡êA + –¸…ð¤L£‘ÿ€âTyÒÛkçÇoŒhÊ|Ø`-Û|%µ/¼¡èp $ÿ.¹ÿpøÑ×z—åÍÁižýmó+;{† 0p:ÐHþïÉÈÂûËÀ +%@RëûS‚ ¦y˜ÈS— æU½;³àn€ +€nÿ‰‹£SsKœ  ÂxD4@@¡Aä \ÿqòÿÄI(PPÈ æ˜Â¡F@ +@¿NY«‹°ßku$ˆÉPœ™HÓïöï7’aþ A-ÊÿI¬0ÔÿCjw¥‹BÖ¶·eÌôʨÂ\q—äþýÞžü44ùä‚òïho;OžÚÿ»ýmÎØ±òSѨno·êŒB즰BÐÃvõÒœ¼”ß.’¶³-p-N»ÈJ°ßQµ(‘jPépKþ)à„ßs`kŸUÁ(Þ 3¼Ã(€¾Úfþ¿9€–ô<O»jÅ­0µ±›ïñ@․TÄ%ƒƒ®Uå‰Ûõ–¼ÿ߯é?R\ça—jòUõãÒ`ø¿2sP©¤7ÑêÅ»âEÏSYþËÕð¸yÉn C lÆrÖ&€10– àÞ°Ì«Y3ÆúÑÇŸ é1Ü<ýe¾ù›³õ̰‘mžˆ²lõWëvþl}}}ÕþïÚ¦…ò®¹M; Þcùÿ>}¿G]ºSªssóSjWê +ïôóëŒ + xEø?gêÐtžíG¼¹È™é#PL€+Ò (¨9¸ÿØ +À®ïPKROÉÚÙ Q‘WÓ¾ûŸ»»ð·‹!ऄÀÑóž¥_‹¹qh 1@½O†ù/D‘û·uF +À%Ęu6Ë™±¶„M +l¼pÿ#þ™ÏúÍ%)€Zçà  †qËgßr×;ÀÖÖÇÿ&‡ûÇЊn»"€P¤Ã8ƒº­4'`|H%‘ ~&òtÁ‡W0Öcþ”izã­Ò0 1±Ó —•O¿ˆŽ@AÅ8€Žï‰ À¥ÊM%[<ú.p½»KRU¢GcóŽi}¦'Ö~ª1ªTÑ„  làIrL!,"Ô˜ÑíŸVé™ÃÞ1Uâæãþß“9ãñ,z޽¾Y’gö’"ËÑ0;hž­¿RÌ~ç¾Ñ V¬7娝_2à»ß|w:þec08|7øöôÛÁðlxòu~ïk‰„õõìžVîY‚\žl9R€¦Žïýÿœ¨ÿ©ZUKÁKåŸþ韸¡Ÿ`™˜V4Qö  `Á^ÿY›Kv1 û¨¿û¡s¡Åýƒ^¯‚ ŒB¸ÏŽäŠ)gýO@«}‹`0âÁÁ.ù¤}€š~²ä-²’É`q1æ¿SØy…๠] D³¶vL©ª'€(Ûû«õ?¤£Jå&·>·t“¨vž$Ð2ˆxoŸ—«8ôÀu¿JòÙ­Í^S3íb;Gj#X³b´”ªî=À‹Èˆˆ™'æÍ°°è)?ØÁ¾/`€@ÉÞ—1ä1=ý£¸6 u¦HMáúˆ"`c+uŸ¹d÷/ ' xfÏ6žš€ ›^=Éýé³d˜¤¨à‚^‘´žk­ng¯³çÿ;⟛­ÄeKÄœ€TX8|¸:/&á(‰q÷ç´fÝç8%`vv¨þl} O¿  ]0ž(€b€`N÷ûšÓÿ^‹²¤ÎUÏäþ—¤‹\¬äOUÅÌç€MÞ²-b€ÄîúÁýƒTÿ"€k­D.’nµ$9eRæ¿ðk=U0Þ¤¾eö1#œÚ¡ê +4oôH÷&p¥•¶þ_{Òïí,– +€²ètª×*×T:5Ë(ÖyñXÜÜËP€ +P#Noý/¯v«]*€s €Ú[P*fQmÛEë…Ä*‰Oå´àTvvû7Pìü$hðÿ·+÷”9€ï!t8Í776ó¯EÙà“kÙú~l‰:!Ó¨E Ê¡Bµ +ùN¯‹ dTl–ÿ$Àÿ§IOˆÑåþ×U83³qÖHS‹’ŽÑ@)Wæ*ÌñEì  Ï´C‹U9,™¿ñE%`Ðr"lµt@èîöÎö6sü>à¾Åè ’0„X¤ÓUpM"b·+/k‡³]¨¨*bÿÙþÁ~ä˜J%fÑC:öS—¬$ûDt²ÔÇ€³/¹](ÀTRÉýk&€ÝÅÅ’Dç—“êàL»Ñ +·/Á@@¶`ÿçŽ-ËŠiûq{†[©é¡`%kéQ ÉýÏ€±ªâZc¡)õÏŸÄÌBebÁó†#'ÚmzÆ9€2‹ò££bÈr÷ç/›„ËòþßI”ãF½k¯ùe€ßËý×2E››ÃõlmðéË“ì4ëëÉý_¿Ön¸ýT`n÷åú¢K[¬jk~ö¿þŸþëé2—ÆÿõÅÿ÷¿ÿ™ÚÐîþÇ¿ÿÏÿpQ@–¶V\œ¼kc/!J ·=§…ÐÇ|Þï˜PaïöYÝ]˜O€4_Ø ·dCß—˜ôÿôÞ@Ǧ¸ 'ÿ¯àgø}ù,ù÷Fò@y²[öw¢ü\¸‘zû·¤…°8F”™ôvž@ûcY"$ObÏžX@§U—0IÄÒÙÙÚ–;%ЂJH€Ì×v{]®ÀQ(~Œ+™-ã´<Ûààðˆ©‚ö/H’{/@]Õ]¯,x  :“¥ÅÞ2 + ¶ŽÏïV'CU —E‡*Õ¤ì>ñ7ÆÕëfQÀvª§›ŠÜTPµï¦Ú¨Œ7 @M¿$@ +ú}i³-F éR®#ðÓvû§¼c>ýª$°ZrÜmàÎF s i¼_ø}r#`gæ×œ:ç÷²lõ$?999>ËòÁæÚFZÀráþBÑþ3Q4\~þ†«ðf$€j¦Riíÿ?ÿ^ø?´Ûþÿð÷ÿY‹"nü:Z|§b(p¡L}ûûØwÛÑæŽZ/J†ÒðXÝD| Ïe|l .•ïBGOyvÝ pÔš±š „Øñ@ ó + Nd@;ÞŠVщ@à[Z’%ÿþHîªÔ(”iÒ €…*ŸÍÏo·´wëLŸ€býk1Ý·ÕÂD;â“Õc¿ß½ýë!¡í¬†Ûx­dkw—ÚÜ;ÆÄQÀînRs‹jÿQ¢Å–OB‘ü¿èx!P { ’€Ú{8F+S“>®ÄzX %5®da;ŒW$°»(=äÏG92–n[qùeF”¾3‚ÜŸˆ´B¿4+€ÆÌMvø¹ž£€ñ¦À÷ ´POöû1à\‚?çCÿI%5Æ™_²Aöûè™Y> µ¡|÷Iöú“ÚöÍÍW§ԟɧ³>XmÞ[E¬m(¦o2Üy• ÿY’7Ë¿—62V÷úöggÇ«;}•ljÁÍ»ùp˜þ0 Rûoÿ_ø7K×ñ+‡iñ•ŠGÅÙ:øÙ/]îþlw{÷ÿøüùÏXhþ¹%ÿÊ  +âmôl»Hb–“b\ +$)€`ƒNë«Æß€Ÿî +‹W@Ð#ìig7­–T*±×˜ïGɳ ÷÷4I¾’°Ë§[BëŸ;÷ÇùqÒþŠú™.„n,vÛÄè­ZêÀ€Ztî1µ?Þït´öÃ'«sôo‚ ÚyšàAêÄNûEV±Œ¯@N¹Û—gQÛ‹³×äfý^÷‘Ï&€1cΩ]oBj8§ü +¤ƒ/15«xÝ +@:G-ˆ£À¥) Ô=®:»£nÀØ´:§uÛ•ZtRbkç ““ÐcH=ЪzìíþˆœÄ+Ä>•° Ž¡ÚJƒƒ«… ­W Uçëõ‡ZßOàƒ‡|¬»g´ üøŒá€Ë€.,0Ž2Nû.\žý*á»Onß}-‡Í6O^ -òA¾ùúØÓû«­WÛžml6¿Û$Ì!9ôë“Á‰Bÿ{Ys¸ñJzbØ8>†N6N7¿Í½º“ü4ûÖ¿•÷ÍiZÿhÿÚí¢rD¶wŽa ô>ßÝn‘3îüÿ›‘ëbæ¨\Á9@ÛλiÊBýS + nÕ¹9€m;¢‡â .¹‹’èǬŒ×Ý„€ü”Bù½Ìxò¤=ça<‰ô¯ƒÑþïuXxÛ‚Œ÷œðô2ÄdÊ¿78tƒ=ºQ¿1?§–IFwÃmÓ¼JAS•¯DžE6U!ÉÝ®ÉýûËýv…ðÃ{ï¹÷ÑCäâ’—«…ÇÉHÿ{‘¢.xælÀ8åX5Ùð®H(ÊüÔ€€K ÿçDéØKL3 ßÝ€Ì8nMÁA[›ËŒfhPœ }3ÃÿÍU¡zÌÿQ@ÄDR + +:íîÖb]ôÄÀÊ7ÁàzÊ÷ëV«Q•¯Ëçá1A"·à1šm6Á1T·úª„tÓ“n_u&àôVz¥ˆ@<äeýíýø$t«#$Eéd¢‡€ÀƒAf ›~óê›W¯†Ãaã“áñq–õm>Ìó ½Êýíà<ȃüLr^ËÙë—ß}…¿*Ø©‡ßœ ‡Ìÿ÷úlxöí·ß7~gÙéW¯ó׃<;¾—ξüF1@¸¿àÁÿo´íø#ÌøjòÛùùÝý¿ÿÅ‘í§Óÿÿü;V×uàhZp’ç¾S-8ÐËPjšÒ‡â8Ø}¤˜O¯)6´ãÍ~«§Ðá4ÿ…÷òüÄ)À‘ (»4¶.2ŽXƒŸPÞ6¡’ðß“&Sþ½Ř@ËÏ`±…¾Ü‚3ÇR*(at~ÒªD’»­ˆ“½©nãþò~í|¶d›\rùèðÙA$* +@1Öþ"ÁáZ@\šc¢ð^÷±O†0M+€Ð§Év{I(à|È[ À + ½I÷8,Ÿwϧí"`jÊ%?Ây°¥õ„PxÔÙVq]v½¿79î•ò¥õ¡>^¨«`y|"€Š>Ô[ïÔl‚c¨¶D³¸F¦­ÕùªÚ}JJž_à'·ø_€ üB¸½+ZZHÀû?KZ ×_¾d Þ§YóSú—Yž >4šÙzÞ<¾Ûô@¾õõ,ÿúeþÒcÿY² ²ýëúü¸‘KççŒ +Îb‚—/õññ½Lÿjp:p~LI€˜/]EÁ¹ðí­Ú0jüI@qÖep€e@”_F¼V qÌ3ž†[_`XSÊý¯¿ùU,›ÌûKwß&³vzÞT°q'2øÍÆòJ³Aá‰(¢„ 0¸·–åþóiã,ÛØdmã«Û¬¿Ê: ßoÞ!/Pú?ó5Àφz&ΦŠCSm¦—òWÝg5]—Y' NVµÌL3í„J¡ è”§¤<qU˜GÈ~)€ûõûõ”8è?>8PQÑèûÇn¿a;¸ÀS½îªèŠ <ÈßOncç7ŽZô#@ëCÏÛ +Œ-É”o„éÑÎô«á&Èȸ长Tñ)zt@Ê:P8.R¼4ÿŠå)+}7ü‚Ôƒ[ +cTOTª,å¨o¤< Ƥ$u aŸt ñS¥óû´ÿ¿Ä?¤Ó Þ£ƒâ¢qe éØKLÏ% Bûâ;N«µ'•9• +P{Ð;@; «Y¬„`Zž…YLÔkÑ£ë߯£ìÇ¡€ãÒ\œÖí}(€jev1œ_Ÿúó%:†Åjç°—W1=í?å”`UW + Æ® +ðÕXàbÄQ3FÉ'+ù\|;^èäýûÙæ†Ö6䰛ǃSù©‡ñy8ÏJãîJsýåÀ]€‚][mýFÖ¼4ÍZà sr ¹Êz²¦>ÓÚ6³Óõo7Ãý›Œ%8;;c~­ÔþË“ÁÉ¿DHÙ…G­#H¦ÊZˆ®W,ø]Ž0~i0`×F lŽnÈu3#ô®§ÿôj£€oÕÒï&çç¦ù¶—üzØGhõT½àp¢×9JÓðÑô'ìCތ֧ÊÆçÇbùgqg,"D„S…Š÷D.l¡hÇŠ`©D¸ÿ®¯››¼¶<Ÿ™Ù\d *L‰S€Àçöô‘\è©HÇF¹àqeAoDzae«Ræçjeq¸Ø[‚Wb‘@.©èTáOñÿo#_ÞJtvØíD¯¢4X°HíDb€´›áÿØC§?Fb0-t‰¤àä.(<_5DžÂñKÙVÔðëOŒPÍ8PñÉ|çpD)« žÂ¿íN÷aç¡@œKP¢ðû¢¥ÔkR¹‘brV×/´.5«éÀUR×*×<ÈCqrEô^ì»áÒŒçÐí÷{ý¢Ÿ¡ü++æÊ—c + ` —Ïšú±×08~ÍG‰Wõ›ë_yˆ‘ÇûZAæ ’û3¤GÁ¿|ß5´ÌïÃÛ>øâ õK¬å îbŽ@ñ_¶Ô›2¨­2´Q§+°Û} ˆ=¥;*­žÃùeý8?9|’")€Îü»ø?·Ëi븄AZÅ…¤ó„ƒýšÍo"øçç +ÿw™EãïsÅoè<\žå¶PØn×TÀ’ áÿ(€ªµo¸ø¿ð4ÞøRû\d¹¶ØR“|è‹MðÃU¬ýr›\è“Xôæ«z`ˆ·"Û0ýœÄ¬ãÿgGDo fèpP¶´à `vzN±" P&£Ø[i£ô1  +@ûæéëà}»|P€© àL/°0?}I¾Ž×Ó`ÿçåBàfƒvõ1,V»RµZ½˜`O +@l]—ì—ð·öO°¿E¸dãÈ­*NrrFž­f«–knþÅjÖ¿SX Ö$ßm.7_–P««ÍáÝ×(‘@€ÖdG×·nþ77×Ù@ª€‹Š4íþB0€œø‚û;ÂZ8úüE—.‰ë/¾ø"âï?þûÿËÿùg=ó{M àK';@PD3Ó³“ +In¨~´ûص¬¦Ëe給P|<¦hüåûE ðôiÿÐ9»¿63KfQ¼¡&P@l¦¿' žC2åïC `»²§Xèa’PÐoÔ*j~ÔL„µ¨©˜w +ÐßsÒ€Œ«º˜Úþ¶š=ýN, ` ñ‹E¯· R!€gÏ‚ÏôY§G@iÃ¥>5Ê j‰“™wŸOän#  à3Ð Œ0øaB\,Òõ« +­ßᦥ `ßG%`;InPЮ-€ë•*¸VŽ ,2¸˜‰y…¿OøSÝìÿ[S}Ü VBˆQø>/u/´@}±Ö=dÚ½L B¦)`°œ‚ÁA +Œ2b0ÕŒnúR¯Lqèzf¬ròÿlždDí_©½–ˆ' ÈONóáæš/î/7¾§‡õ&'ô¯¿Ì7c±÷ƒfó×ÙoôϦ§<ûùëÍÍÓ ­ê öß)ÁüøTÎâ?°æ@N|]•Å9@n›ºÏë–÷b}ðùç_üÃÿðûâQ«&‹5iV“ÿ `Ë™™ñ~;](€”,%5,ÿW€;º¤’ˆ•³{v9l¸²8#d€¾S<¦µ‹î µ¥³ñ? Ú€ÿU }fì÷Æ@_^ð&:É”/B¿ç- Ä?‘{«0¥~R)€:{"€‡V ž­U‘ÿøýÜ_wA/àö…ÿ« žÚRƒ¬Ãxâò€ Œ!J½D_[!ùÏK•úîc±Í'”9@Ròdzdñ|@î/0†tì%<x±~Øi·˜l•hï—Ué!¦Ô‡µÏ+€+¦ß“D¹V5!•{_ [¤¡¸4o2‰’xJ e­–¨Rìð&ÑDm¶Ž›g‡»)8êsFc%‰0Τ’Pù1§àDó¯wïÈ=JÁ¼¿ñB¥á=—WÄÑ¿#€0_¦%?2‰Ïpý$9`2¼Ñüù'ùƒ—ãO³ãÏò—÷9n|–ÜQ°~OKörý¬Áß$$²|ÍJ¿ÌG ëÇæË†^䃯 ïGLM]öü´u?¨½JÆ0c…Ïqîìî¨ì櫵V›Ëõ>=ÿç'røâ\€105[w8+ËŒ* +•Ø,÷ìŠîõöǾ +Ëø +@àÉ“§2t‰Þn›ëXæájO­šÁ.„Âÿ K†]€dÊç`ž«xxƒìû‚å&EHpªÕ6×¢®ÊVœUUÊHíÿþ§»G€ õïGØÿÇAaª¯Ö˜¡ç‰„Q€þƒ+ÆáC*¡?·[i÷EÊŒ'¦­ö»Î.þ }¸“ÿKVHf¸ €4àó *‘޽‘­@ëÐI@7}Ö89€9a¯VŸ ü_LŒ‡,:sN§èÔä»ä/‘Jd«\€pÿ ‚ÙËÚÐô¥Èaé¨TäDgBen^5€â£2 Óº)8:äì¡j½#÷?>H +`¶¾‹Ë4£21R yÑÉýûEúFâ|ßwÚgMé ºÿžô÷$ºÝ‰!±j'¶&Z|‚Ña¢YA ÀÓ'àþÜ-=ÛñÁØ%°\ ä÷œ.&×íve^¾á¤³epAr|EÍx¶˜‚öÏGü;h¿Á*™£~½ú! ÓtÀê­ +@ô ŽÐë~_M-èì$p£RtLiK’g +Ëöû>›!Ø’1@:ö3N¶µÖ­Ä©PQY˜‹€-Ã9§Ptÿá;Åd„üç `ñÚbXÈ’Q´¬áJ[ï×]jÜÀÙµ¸|uä €äþ(€ITè¥6­rÞëyf0jø½ð0hZ° =òüó7eÀØ7A.BcIÓE¸Ì\´äÂÉz å²Ó\½¹–srþ-Y2h2X¢ÿì#ýðn ý¡™Ýæb@+ÍFƒ Il61]¨ggkÙjs#6VcÒ€p"ˆs  –ŒJÚ3ïù”Iý«õîÓÏñ‹_|þüÙ]C +h0‘(`Z +`]+é*KV d#´þÔÈ9¤/p|5dK÷ç9 0Í +Z€k»ÿÞ骑±&æHp%z:é”A~¥§@$È£'¡×IíûøMw|Ý€Š›[ÿ¢ðà‡ïoí©Ù20ïŒÍãÓ›r€ú]ÇI@PmÑW®æ_{dpžTVÚyNTí>}úD´¦w ã(ÊpžG6:רàE¿[“²Ö¡³…GÄU¢X¬Tœøü²BYbj÷¥â%ÓàÛëGÜ|ÞŸîÑþ;pÄP@½DÈVöPX\™] +@uóPu#H ¼sp%Ãñ@€ñ6ÀWý +Ȧ/ÉË’ +ƒlÃ×øÍÕVÓ @BÐÔ#®ç¾±¹±‘o–K¦(Ð8û(kÜq?¡8€6Ö‡Í{¼ßÈ›«YNv0¬o4µ–ð§Œq*)Nk¼ÂÁ=mw>ÿïñÅçŸÓ˜’v“Hã€Î)€"05[mm«¨pZhŠTɦ€žß¸jH|…ÿ"üœ( ¿‚(èPëuHŸl(€´øïÝZu·ô‡1ïתzH$FkiÇ7 Ûå÷Bu–^G*9ûÿBÍQ"gXÈñO9û%¤BMV& £gNŸ¼Ÿ¿€>‘h1³ªÏÐãúà.A}Ÿö^E }Ûºæ$ ¾éט†@Ÿ¤-%— Ífx\+ªð ÿ™þ·æ¤žJ¯@ +d(ûœl&Øÿ%D»r-v¸ª½JÙcÇB¸Êz[¾¶V9¢‡¸—I4ÌYøG@u3Oüžoü\“ïûì_t' +€žÔ€¹§†G°Xï º©¤ÀC€PÊvU;ËRœ îÒz) ¼ÅdrfΛŸ™¹4Íi}cZîLzôÁ×·ó•åÆòòrz¿–5Žõ”¯åÙ)ç¯1Ï@68†Ö´~‰ÿ Ö5"lÔ­?gÛ¹,/«Ê~¾øâ‹¿ÿû/ÂÚóîS]én0ÊøURÕzk÷bP@6æ"B¦ŠÎƒÂý¥¤AcJ .I5tLÐN©!¯É)¼ +Ö‹~91 ÇÕU5ª±ÉùC„až‡¨ͪmÆEÛôŸú«xN(¨iú ðÉ"£Ù €º ˆQ@äùR¡­»™îÂCßånû“_âõc ·ïèIKf(PHd`$€Š‘ÒÕ?R¹±Ž1XƒEèõ(°Ÿ,,\ö!鈴>•97ýŸ3'œž^$ß7’ßH9€-1ºÝØýƒ*N +ÀˆßhGuWýi‡w¯IÄ1Œ@O +@»FNÞÆ:Î4a2^ T‹èUz…ö2é™¶~ (€§(€: "~BÓµ§¦§][PE¨á÷Bb¥ $P꤉^Œ#6(!p¾Nw40þ +¢ëasC+8Uëœm 'úFî¿!8Ý<9‘ÈóÆg„ËZâŸÂ/?:fÒŸrâ/Ãfsu°ÉÐÀµUé‡5üg -%ÿ Ú9­òMUãR¦ùçf_Ápäk®ŠÃMú}®Žû¿™ð;Õ•¬|»Óî> óM +àmü£°ÔGV;¡è»ò’¥r8v ºÊ}é×küØ÷€Y'\ßÐG¥@Ñöw! ó8ª”±Iˆy¿ù&n3Ôn€Ä"í„îjæUår ›Vu¢P·=‡ÚQ„Q:?ÖÅÓä’’S-®®â³£KÉC ØÿßN-.µï“»uFÜèçñE1[­…Ad’ í뽘ìLŽ_"zÚÏ:[(sŽo dÀD!€½ÓRÓÏÓÄ© zmÎ +@Çg@0y£L^ÏêýÈYXæõŠu*SݰR8¡ã!=ËÓñöT)Ó P‡/…ç{zìî1+©ä +t{GñpçI,Kº—šéCnÔ«ÎI0€ûÝ/sàÎÞ—§rýNµÓrY:î9£6éÜ|uº±ù•ÄýæíAsyÌÕ…Æðö`eåÓ~­yäÐró8Wcª•iuŠ/6>@klC’"Z{G +ÿ·I»Ã*ì`<È_8kçãðÀ?3@T€n`ú×Ù +€v[ð_U‘½G)ÀüÜÔ” ×ÔWÍzí—, +àHU!/àtZmˆº×;Ôk©A9¿`vî†ïzýç…à±pz¡|‡ðŠc óâ•[¢<†ÈÉkõ6]F² ùµ¯C·Èh3¥J;hh×·¤fôÏ\äš5Ú…Ôö'DÁP[/§'aþ”Ë$¥@ +‡}  ’€ð„B{ìãˤdçfˆœ{1¨ì Ìùßûö= +€Ô¢va4!"€^€’Œ@H-OÖÙ#€XLJ•¹J +€@ª†Ñm¼g# +8"@…vÌqÀü„ÏÃÞ_‚Ÿ›^R¾L»P«Å†B.z¶¨5j]’QvïPD6RÀ›óPaY\{kI¸ñ gëYs3‚äøz»qz²™ ?Éãòžò_bv}‘5‡$›+Ëw–G!Àð#Úv€y& _;Îî­­Èë77õ¶)ý@@ð_¬Î@°aªÝ.ܘ·ŸP©˜}S1nM…tÊŠÐ¥`jZ V­ðÿDjªc‡nˆã+¯àæ_ðsŠŠ@-§'I‹,ZB€|0b6<–pÕA…×ø5öù\£g›˜³ÑÅå)‰@n.óÐnB\~’سÊDó‰ UÓA‘XDÔ“˜„×4¤@çÀ¾Ÿzú]€Ê†lÅ(@ë‡  +ú&à4û> +Q¸ÿÔä)ÁÑï1Øí¾Ì8µÿ_Èÿ¿øüõ†`JÀJ­óLÑq䯇§ ¶’$@ø¿vfW»S¥5WA“ +@6¥BçFÝÇc˜Ý$¨†ó¦dFXÌ^Dj÷}Õšoä¬kuÚ9áðéá^OU÷î퇢w±ªf€`œRŠ€sC‘`0UŽcº|™”|àl½™ËK7Ö6ðóåW¸ìéÇóçvœSV¡ƒ c8ô_ÕÂôRñ²@,á%çÌ@ý)Û€²¯X݉¯:Öøov4C¸zó¦ê‹„ ö3Á%GG 0©¨©5Ùy(€þÿÛ5T—ÝGrò€<ÔX|'û–<Âûùàß"" JÞkï¡B)+ðTûi·êÕûãÀ”š-àCŸ–9}T“Hú&¢d¢ÌvÓLq=Bjÿ…–D@WÆâþ÷¤Zr~À¸€2U¡Zèîw¯+ lñ?λ:•á¡À¾Žä0…4.díEã=};R½ÚŸ8 0ÆaÌL'_~KçgÙ~!€µ#¤ŸP¿Pà}… æÆ€l@ ½€Ú s +`ñÚ9í!µî½G­ˆUŽ ·@è~—:}V +SÂjÇQK¾/çÇÿ­ÊÓ•ç×*bwYÕCëN „_ðêiáû 2__4mÄlׯâ¤^ðúx08œœ9¦ O¿k¼>Ý<ÍOóÓÁ«ü„À=ÞγããüX¿øýgga~"6Ðß^ñßÁËá ?Õít@0TÔvz–¥•jÕÚÞL¢’4`ÜiFKKÕ]žu`9Îxœ8¾Ìa!9ׇÁÿ úÇæ!€4š²Œ@8Tuðg øs.ãØa( *ÀÿÖÈtàGÝý^§^wg•ÍÀ 5ÿ÷¾@ø˜ö)¶ª)«‰þ3-Ú,Ë–LÞê9ÈNÃË'>rÁôÍ,SŽý6Œp©¹Îž3\áW!€Ý‘€²Þ²ÿzF À©(ÚÕî#‹œ¼€÷CB>ì¹@­ãéQúž#A‡Sœ (¤ÆßðŠÆÐÛ‚¢Äk + Ÿ*ÏCèú„SÅÔýþ3qoijîàí?1€Ý~ ³s×t0½ý‹À‚ôûœ ¶ðÿi™F êù¢ &.¢Ã‚æ§I~ê'zâ‰G²–B:‚ÀÈw+¢~éHHŽ(¾O Àõ¢ +Üç¤ë2 `P‘÷“¢yÈX®áÀ¼ÉFƒ’b ÀªG& +œãúø“w×›ë3{÷òíæÝõÆ'·o7³¿ÈÖï6·µÜåñöíõF³ñÑÇwõ +@ÃáÝFã.?¹ýI£q[B`ùîúíÆòq³±|W¿þ¸q÷î]Vwœe F}üñ²¶Ã!vÿfS…„i¾ûÊrì÷Ãè`ÓçŸ;à +  + ࿪jLÄ¢UßR«Nÿ¸Š£¾ðT fïÇù à•§ +”i(ô£Ãvý:‘ªóZä´ór75‹£€*¿ŠûËÿ;œp˜>ïD€i_(d£Úñ>ãpyÀ~'p°Ñ¾HÍÿ–ü-@ç°·§êA½€šFÌÙÅ))T믾«Zµ²°ô~}²•ZŸ½ybê_‡S|ÍóÛ€Ï.€è•ô™¾šÌpƒ\-û‡®j€»R?Àº'¿/0¥¢£ÿb@7 ÊÌ^;3óî‹dБ·íraˆj98¦(h-νS(€^(€†R³šô€÷O€Ÿ­TQd´Õ8¼…ùKž®%Á{¦ç±aÀ¤¤óUJRnbq®J¶ÛãAVª&{¿ŠM¥G ›Œ8à"òù¼„rý`ëVð“Á—gy®}8Ȫ7<~3üÍë3Ýò!Cóá¯Ôò3¶w ÿ»³oô8ȳ³ã_þ*ä¿ú*dÒg9c€‡›ƒ—L¦Ûëÿí¯ó7¯‡9S‡mŒ¸¨Ì%mÆ~ Íþ޲ðùçÚyƒûýåQú")R2‰™y2â©e.)@My ˜k_®¢Öÿ1,¯íHøµ%@aš‰æ)¯ÀÜB`Y0@¯µXï%Gù„èv·w;ýGIJ´ìúT£Rœ§€9ÄüÜP”‹å9°)MÖ¶h«i°™CîïÓwà‡(O °  èVn§͵#ñÂîoù„ ŽL³P.Y¹=¬ú&ŽãûÑo›ü»1Ðç,<ñ“ü­jw‚T#‡ÏÂÿÕö3!P¼¦ýÿ÷o(€9)€k55×V†G +<¢| Ì‘ƒÜ·`z¨’˜&â~]ð¡8ÿ/sZÅe_y5Ö–¼ßOaƒzÖ{+´¨Ÿ`Ë,ãµ;^0]UzM>ï" . +¨¶ú‡]rœ;%¤ê´ ²¨/½gD0ù€D‚ õ"¼àjbªôô •À{ÄÉùANîßçîfÙàŒ¡@zŽÁ:Dù+ÍÕæÚðvÆyÁgóûAä~žmžžfôðŸ5ÎV›ëŒ¼GG_3c@A¶–7¾Òj´ZýJ«#Çpw9&izZaœØ @¹›Ä>ÒzU‰ù=/\ÿP'I&ð\;op›˜f”· ^hIfdd]­xRD>2?)€ÖŽÚg®S*·Öݤèòìí=Dô‹£=¬«‘Ò¦Äÿ$w æ ÕVIÿUØÖêwû—˜—f3+€i’ĶG5£Û8ÊOdH–ò Ée1@wïðP²wØm×Û¾ØךüXÍ@•À–X€Q(Ù–ÿ]z¸¿À&X@oè¸8u8½CÀw²'é`8M€âŒ–êaCx\©ü[n=.Z.+ϰp +À>OéÇ‹Éï Lùš¼ã +À!@ánj}“Àg§¦ß% („ +íÐ2Ü—ÁØ—v·Žß¯ÌNS³³kQ3ƒHÞo¤'(@› ¤•A_÷V©5k5úÚ­2˜¯¸@÷¸ \»¢[_  üÕþwû{Š÷#Ðqð?ÀÑQìr Ê3Au„rš­«®oÐIL6Ð6cà?x{ rw$ñ嫺êõL¯ÝÉ&YA°:¸½N`ŽONV¿ÙG¬Éß¿‘°7rܽy/Þdùmq4âú.Ö&x:Ñßü&@”Õ•`8’>ÛÆEâ°35£´¤ý§Vò†4P#„˜b$ †)î`@Nè‘@¡èE´[Ô0Õ,—ØuÛ÷­O ßaL¸6ÀFB¨ÕŽ´mK€…š¶ÒëIh3lT;áIÈØ ou—æ8pÖá>âtSÓɹh\(ú€)çÆ`k§ýÈle4‡Ý½ÞáSú)Aq@L÷î/¸ º%QYåü’äî%”ﵫEÛKÿ‰ÖØ#*$UÅé›ó_Hv#бãq2sÒ*(-´ÂºµD*ÖÙ"µšNÄÀÝGîÝ€o( +@0R²¤äetNÇ5°­pU9?Ðv vE;QeÄkµÊô«t ¼1М?EÌo @l¡Ì1’Ñ•MKaTf/‘z£‘‹»+‘än G Æ$¸ Ú=ŸØE£o}éúyØn¿ãq’i¯Ón‹EühÚ?:bG“©0máô†É|ÈÕ«Ínf«÷òõÁ†Ïó— =G¸Á~”©é–pÓŸñv¹~3¿;ÔÓ=µô89Z‚ÇæðöëXÈ‚­ð1ç¿~ýë¿•û 5’%L®j`«H`ï—CÊNŒ + +Ài@K¼_P-Âôlœ¢'0x@hNºåñïlpœ¦ã‘@¥ÿ}ÆÓQ?æd3¡TËjl»… Ê°¥®[A@Þ F7ŽKÓ¥`…j&nTC¼ˆ©?KØP‡GOÛ­6#J$'£Ììþº“”ÐÒ¨ÉQÓ/”îÏX‚Âócé?cN°n„ЀéŒfJç@ PÜôZÿF;ˆ3ð3:Þõéö„Øõte@åL)ìw¸'ð‹‹s&ð<¯ìdzÒ#a“W®z“³¾;å<Ÿ@uS­Tjú36aØDs̱Iû zr@+ð-Ýñz\¿„[À‡"UË“`N.r£J1rX‰ÇPÿܹÉÿEÝñ ÿÐs‚ÉõE›N –Ûs‡¬>g˜ôH´8aS~3é‘ ª{jfGæƒW–ÀÿåÜ8hŽöOë3ˆ¡¹¦¶<ö]ga˜`³¹‘¯­}¥ @AÃWd‘C¸au5ÓÇöà(.t õÿ»¿ SçÉ;˜À T¶ˆ~÷~m±ríÚ¢~Ð)Òñrz^ ÉpŽB¨îE°<*ÞÝ +âo +@fx´o€fgÄ>±»Vn[ +´dÿ×Àò;‰ÎõAðýòÿé2@”Í¿n©$Ò“!à™% +¸í·“÷ß0‡Œ@ʨ)€LM +€ ê*•V´%[…Ó¹KMP4ѱ—?b^Ÿ2¡"­áã±¥ºAÁê›Þô$ý[•8³Nì×ZtÇû.• +ø¬·kâCÈ›’^ÄSÀà‹äø¦ªŠ<Åñ(þNwil( á@¤%“Z¬|ˆUŒÜ¿ €kÓs-L¨ðÍ÷XW耩©w-¬ˆ@T€ˆ îºÝP  ù_(€û"1ºü­(VRÿáC)’€NþÃP þ+‘Ædm3 ´üŸCäÇeÀÃÿøÄÜ„'ûòČޯ_}õí+.ãsš‡Ã{Ÿ 6ô•výlè‰ýmäùÉééé0ÿîï¸àÇo^šÃáàÛÁë¿ùvðm>æ¯^Ãáq¾þ¿µ¶³×g''ó<{™çgZ÷ßÚù"ÿŠÊ&Ü©€¤MŸlÃ"=|Gå!àÄí¾(@¿Ë¤p€8L +€?0h%å€>J +@…Éò»°8Ú€H&ÿO +à¹ÀóG‰Tùzˆý½§@?R˜Ñc)€°sqÁAO ºa[‰y E§“ +þÃf¹q”#ç—x'„›‹¹¥Úé›-AÎOÚ¿Õê’7~*hmÓŽþ«hÐ@» ƒ`€nPä4úë¸ûë[[\ÎT¤U.dbE1èPÞÏGI¼Iñiñ†fŸyQuð}¸@(€S3ukE=©büÏsU€åúI¼¡ªÕp¨‘U,€Ë³T³¸ª\Ö¿“ ôz;‹ +âÄðA•©kî¹ÀúŠ@BzeÇg}¡ôMÌL“'‡ì3IÁ ù$¿w' Ùzÿ 1@ôÐïÿPºŸáSPa%XXž"@®>{öìéÓ§‹ ÏvUÒÍ ¡%øt ë¯gÛßþøãõfv—©þïòiããÆ'ßýèözãnóø£FãÓfón#‹¿ä'yžsB@Þü¹Aã“Æº~ßÎÖ×·õÉí>jÞþ4³\hÞ]ÿD_ÒX¦;‘3Ró/ò¡8pö0d¼ Ÿ­®ÚßmÕ?\¬~Èq‘WúCz95_÷Lœ’'ð” + åi¼V}Ê7|­ïô–_ÛýE/èT¡Ò +‰ž…0‡4-úpúP'ûÄnìõ“€Èø>¡2'ΘŽ*-$|~t Ç3g +™Üù˜Ó:ðM~Í„š?5ÛO‰ú€Ö·ôm»£_ëý•KL1epe±îTR\lf¬íG2èA +€iý‹E.ÙÃPI^ß%˜À$à‹ôRÐkEÚÕB‚á„B:¸§Péqçñ… + ²qÀH\¨®¡8–4 `Lˆ©E³@½ÙS™-G*@›iAãÍ¿ "*Ó•–|_ÇÈÃaþt‹';>®Ï:ßõ`¤Ø¢Ôþra>=Úh’卲տËéûÚ¢žvQK©D!Éå ǵþ@@ªÐý¹cÕÄ û?Úåõȶ‹×ó¤ðî1*‡<ËÖ6N_½úÍWÇŠï9—èds¸ÌµB›«\^h•4ÀZÃ#çpq +¯Û' ¢ö +&À°ª²ßñ9³R¿PSô¬ãkزÜ5ÖàÍÎ0oŒ›7U(AXX’Ú$5xµVÑÆêpüGáþ?™ø@a;€Ó&— +˜Ÿ‹³{ä;É8äŵŽÚþëiw«c@À*!)ýça[ÄÂ)ôzE³¶Ø=»¿v8)€äùaŠ*™#É +(U-“KSŸ«ÜôZM{+)ú@Ú£„~ÿAU^¯²*)\>4èN7‰äØ9ÐÊ]ð¸;®ƒ±€ÉñKTJP¤è,@N°‚aêÈ^Ë| ;Š˜ŸÈ Ç÷£ž}.@eZîhìD¤!H +ÜŸö¿xÂLÁªT# = :_»¢È*½ØZ8&ºÿÉLÊðN\5aOÃ÷©ž££b4‚{Ú"#%NŸtàÄéýÕlý³fsyùN³±FGÞ˳»ƒÕl-…ë þismóÕ«Wßý’ ƒ²““ÍÍÍámúWI(¦Ÿl’üW ðq®µqÂÀÚf¶yöñÇgß~þÿ-iÒb)^¡B ¡×sûè&x¤ôFŽw®È XGxD˜y¤š|ç–Èd±?NÏÕöH¿8z*—$#¬¿ÐO<ïâHˆªÚW‹.9 =Ùýµ‡ÚoÜvkuqW`qô€éúÃûI‡µq’ö¨µ¼­J0 +ÀWñ Ðë<‚‰%»+ žìÿI„Ë£^P v~ü¾À”@§³³S®­Ç‹¢¦b(°jÉþØii³=ôHÍfñ¦˜%« èu•³•½†qD‹/§Ñ·ß‡÷k°Gmͦ.‡_æCÈVX,:œtJ WRÒâöŸ®…œ¨§åçâÈg^ŠsdµO¸ªýS½èR ²'m¬„´æ + ‹Ñ=îçêy5“o¬xìÏÚæðì€^­n2¥GI›¯¤†Ù:§ýg›y#k.û”@QŠžèþóê²O¾ÖêÜ‹ 9±þkœ_8“ÛŸóþ950‚å?öaÿ‡ÆtD£ à)€2 pÐ/b3½;ʼ>—µaËþ(…öÿBpc9:jKXÖ¹{7)›†·ë$ ûé8T¶è|³`ªVSåµý§“È9€1À¬Òé–&ú- –çš +” +@VÒªwd:@KZRA¼?€˜¨`Z·çÒ &)í¹9`kK¥BæÒÍ +àÉaÇKÐ¥ÜüºMŽs´DëõEÑvi; ¨÷"€ÄVò”Œc·ûó7n¸»}ŸÝoæ¤*sNzï ”?Ð3 •Ûéäþî +ÖÞ\«(Ö¡æÓ…ÿ·*—äªËªëø\bÏ0™àÿ<"pÎjÐKÛCØEú­â \ÆëÁvjª=4Ä®JBT£õ7'¼£ÀÒ9Ì_yxxˆ<íKù;ž!`·0€øHÏvà1'ù«ñïþÕ`ý8k4–0ž¼näŒÒ666Êñ<ÀWCæÿ`àÀF6XÎr{9¡ ‘ç|}ØÈWï./kõÙðÓÒûõð†ëÇ{מ-%KKðHFG¥, ƒ +05[ïÀ°à¸˜sýFE°5[íš7Š €Z ÄýÎ( X¤BSïL™lAð*tòÏ@ú›1wa`ÔMc$°P¯èËôÆÐY³ï­z÷)³—<}úB + ßm™PúºX¥ h‹ +€ .¯ÙÂóyeÇhmáÓ*t( b€ƒNgŸ“›q ¯|¹#^à×Z܈ñ3'KÀdÛ‚ÙÁ + «Z©Ð4i P}#ÿçd n_bj¡¶tß• + ²¨“ +Ý.…ÏÙ€rýÚµk­½6¨~DAI´¡àFÝk˜@êHŽ?òý3 ègúée(Û~OèïšäÐïXèpR `Bß" +€ +xÊ\íÌ"æ„îQ¿h±ÎÂD\FEm÷A^ËŒòXFðêƒì8pö\xãÛ—_mž5^!VW› ŠÁüòåͯ^eÇ"€{túsaÀá+}ŽnXF¬nøŒàfs°>üäåz(€o׿ ÷wPxü$8‰òze\(6å +À!€ÆÝ€:<ù? ð®jY!?ð„äK´ñª[=:ÂûMjˆ‚d& à¹{è°ˆmp"Å+#@˜RÉ´N9a[¾5È4é˜=—@ˆ€ô2 Àéaç6¹X<ùª9@È-½uB};b€ºg +ª,bRØÓ6åT Žo6$(€t4¯ŸvcªÊ  âê÷[•¤YcÁÿy ð‹N-uŠÅ™B­P,ô>f P0@áÿR1/b€g,™@ûØS õEºEå¥Ìp€väÒtI4Zë©t.@«Æ%@µ;z½ý†¨TèM v¦IøÙzâѾï`¼ù÷.9UÀl:@ U²ÀHra3)êO  +ÿ)UÆ‚ÖßiµÌºÙR¸~ㆼ°é +¹ùÒÎùOÃx²,o~–ÿEþz88»=ÜÜ|½Îùÿ¢FönnJÖèÕ7ky¾.gÑê ñJÐ\1ŸL|¶A€ø+I)€»ÚÆ7ë)ü÷“ÊâzLQƒûŒâU Ðq `E8¸ñ!Å ¡øñ¹§åìrµ×søÿHÈ*õ–gàgZ\¨t¼H`e˜öNÀ8 +zF(à—ýlÓ¸MÀ¬›ÉäAú›!pQ €|u‘ÔÝœÇK¯ö}¡-ë—« *Dø*S ÛäþXÏ¢»=P ý%d_Iž0€oÞ}¦q„dàâú^Gö¬Ôo]«•Þ¯%ñ5ÿ÷Ã2銣êßþÿ``Ä +ô•¼Ü``Œ H yY©…­*¹<€T—3x%8 h×C ×©xms±·+ÿבøüBÔ$g´øBÛ[*ó…Êeywø±¬|Ž>sŠœŸ{±K‚ °P3Á /ÜPÉëÇ è1[›öÊy÷Ò@5À¸Ž~ª'rf*JÉã…§‡ÌIìõ“ÿ¿Ë¾ôCûeGò%,ä±râúÍõããÆÝáð£ãFÞx½™m¾nJ0 7†óC‹þÓWÃ(2Ï"03óGi÷pâqо«ÌQ»ô-ÓÛ½ÝZ¬)šFñøOµ ¬ÌTt­”‘êK æ“pø$ lÒZ²„§G‡‡ +^uú/:(E“¶‘’HõOúææc±Úü‚ôݘûwD©´ñv´W:Ð뎕ñr¿ß™$€£Ã££Ãg‡‘0L°Í¥A!ÎxéxF‘x¬j‘÷ |èOÀõõÀP¼4.̈Үq¡C˜7`ŠP+ +  +觪TZ\¥@!•9‡Ëp• àÊ…ªr7ýv"­ËÏr|+ßÒîàüñ’€AΡ¼ò(\•tàÊ lQe ©âÇ0"€@½V™«s n8ý#ìæ!g¡ ´ËÞo=άûº~iy9ÈÿêÞ±šù—Çëß >ýj˜ÿ2{9_ r5ð/ó³õŒ†/.â8þ옡?™Úò¥æòÆÒÒŸ.ݺ¹ôþ•üÁÀ•}KðpsiùÎÊÊò²¤Àj³‘ß+À§8?@ï'ZJˆrs©lˆàsÿ £ã¡9r“>R4Éú-̦*žTü2Ü›¦È>‚èíîP´$ô;p äÒt¼<°жÐp œØ»:‹Pƒáu»•“&eB»¨ârL¯"äãt4'$ŠR{!û£>ñv÷O¹ g8h ­ÕxÀPÝ£ÃþSÑ•C +@+Ùíã²+ÛŒÖõУ‰„©²@éþ1§"^Σ|–w%p~=¸‹ ØY\Dß8 Qx¢—}§*Ða k?€ë‚™©ùã,ø”[(Æ·:û¢å¹Ú~!ü¬„®û•ùÅ­‹B÷%s2ËXE«öa&®éÒª^[t†àjS4àÒçÔ<žÌÕ ¡¨ªô¨¹ÿWnâcnlщç鎱…F\žÛ­_C}Œ ú§C¸ýoÎ1@I>äJuvð8?yŸ¸ÌBÅÌ¥øùg9#\¶¥NÙr€o»p‰0;°U•R—<Œ³ÀC¤Û*ÒZ&Ocöâé–B)…»¸¿Œ+Ö(,Ì©]¬Ôê&Ï(ZõEË ¯Õ7x¼\Z%_døù€»Nèï·\¨ (€g‡"g!P»é2ª÷Q"à´Ë2Œœ/.·8""ÿ”ßrP¸ °°%°¸}QP@(ÜU•ä&ÚÞÖ"£!EÎ •@ +˜„-È €,‘5nA‹ç p8`”ÿcã][6¯xÃÈóËÿowjó‹–‘±qè_œí ¼N¢ €b§¹Œ©LŸˆÆe@-—2ôdWùLÍøhùîÔ9îé\àáúë|¯Æ[ÜÞô0¡/Öpÿ?…n.-}pëÖÍ÷¯àý¥¸úÞHèkÍ_ŸýÍÙ¯¥î®ø6ô¿#S + \šÁ zÁÒnïÊ0¤Øë  ªÀûü·Dô`lç  ¢§¦ÕÜ;9'ýBVZ¼$9?:Tè2!ˆ«Î—V“<æçS-O€•¬6ت©í“„˜.sëw"W§k+L/guÛ$ 0+6˜•OAdß#A_<ïowŽ<ßV§¿åÐRÊ2Ðx þmØÚB5¸Efˆÿ; pè+€ê"]€y(6ì èy½äPóhÿøHÕ!#ÿG7ÿï¿ Pm·çƒ +÷MVâl@_OU„•l/Î][$€ô)€b fUsiÇH@×q (ÐÆ›Ò¾hoJ +HÀ¯'9@Eª°eüŽpWÉ׿¤Î\+®+}ô$p©Û e*ðçVmavÒ¤k +Úº›Aø‰B>ݳo_mžDPË3ƒ×ÙSýd'ƒÕµAö›üL^¯Ÿ4ô¸Fô¿¼ŒÿC·—–Þ¿µtóê{?øÁB#pséÏ­[ôÝß¼þ›×ëÍ¿l¬4²o¤œ€ÜöÃ:4 •ñLwýa§ëyÊÓ}…Ïõö¸]¸^ƒ7âµ@ä +<}`'HÊû“à¡çÿï™ÉS'ƒ€ptô¤[_¸L­Rwáò¾B3ÏÔ;¾T×ìÄŸ¥Ž@;ÙÉ[ác—á©ò% dÝtI¸–#ÄÅ œ'²õ –ÎÎn»¥)àÅ>IÀR¸ µ +€ã +PG붪R0@áþím|,2Ð €Å©ˆ“`¨_]Àæ)j“vÔÀ%9#Zh-nËåT.7U*.rz«*r  + z8.qA …Pq—IÀäü‚t¯CirñLÜ3åM‹4$b Mý9ÐnsÖ˜TB àÔVž„ÿÛýHX–°ýT“ü1×·ï10»mo×›” Q@¡püPôÕê;­T"ÆÑa·­@¬mSþ\Ml§MÆÆõ:¼Äp&¯Äß½Ê7騷ÿ¯­Ê¿OÖ_s1´Ààtóô×Ç_ûKáÖò­å¥?ýÓåÛ…ÿW?X^þ@N/Ç¿*Üùà=¾FX^ဵækµÿëÌܼۜ ¨@{6ºÆ•óÛ{½þ^wO _bQÀ3‡²ºg€6H Ÿwß_•LQÏV™”ó  ªCì¹À?÷¯øPÀc‚>!|rØeZˆ‚æº\*ˆ‡M«v9„Xï®)eWQ¸vÅ&g$Ky+ +ÓªíÄá÷â¬l¢ÕÚ¶PŒ¥œŽwK-éN}›¡xK¿-À†Ôò:F”~Ið…YJiëƒdhµªÌ.4¨Õ˜£6ÁIÿ1pH<ô:ˆü£dÔGÀ÷½ˆŸø¤[ÅA¡ Fí“exŠn)9¾€) ßS‡p"À'eFÀ÷)µž©zÇ€ôªç´PÅá…¸Æx(‡(1­]äÂíÏcÒý£íO áwd´ürl(Qm±ñ´%¨Eð¡dšêL +`ÁSüê;EXžõ»íúüBÇýלºrYZ?BÈK29œ$aøWZ†•îßnn¤ÀÖükÙ°ùéõßà|¿ÍÓ|sý++p‰_-$÷EÍ?Ëþüƒ«ïýpé¿n7o6—Ö–oÝÔ›÷¥èøîL­ÿÝõ¿¼»ÞXo*øÎ!Y€1ß/ÑÞ PI:ü‡öÐ]X¨ïÅ9º–¶G+Ÿ=‘@ñøÂVå(@ + ’€œU¨O ã©°øj»-ÀÓþ9Ì‹þôjõZ§Kc°k€ý®2`„e…û+3£Ók:@—[ ,FC¯uT:HÏzÔ!£>˜ÿsºz/à -?£†“Ø¥*\z*ý?^ô{Ï÷Çd@tœü¿äá@Œ²yZ¢~@¡‚¢Ç€Â®žh¡†Ú?ìì ‚ê¡’ÛvONû¡=±ÿ{‰'žÁEþÿ= ’¯\RýÔÂþªóó Lí-ï/.ò¹¸<œ¡:RùvD]Öó-þ‘mÔ40‚¿G’Çý›á|=d.ÿ—ƒ|™–g/‡Ã|pöËðz˜­²>È_~ý×¼ÍuE yž-5›7o.-7WšËK+ËŽ"–²Í“<ËV0¾pýÓHû'ï'"pÀi€t„ *ÒˆZ`VÈzzúè(µ+‹3bÆôzUC:F’W©O«·á +‡Y.ͱ€À<ŠÑÀ €ÜÞÝ 0Röáé“î^Wä4S@Úžà1^áÿÚô,±æÃæ´F® €–mëwôÿwìÿÌÔʼn´4ù° +Ñ#Sì¢zí›V[p€ø Vï>Q“ûâÅ‘·ZÞz«æÔ …Pd=@µþÐÀ룡%Ì*,Ù±åÖ¿†û/ŽÀù, b³ +„éçc*Êts™%ˆÔê/¶º" +Ê ÂØV³«E‚žpüÂÿ]%*}s—y; cK¤R*0UÙj/^c(¢Öþ?®˜°qLG脲ŠbÀînÛ‚J ƒ°¸( [M»«Ûé ÿ·ÁÁþ~dd*³jÀ0¤1 +˜Ÿ[tcü«è›¦]wæL­?1òÕðüu@¤û\wûyI þˆ“éÜÿ/Ý_ ¥ÈóÁ—ƒA>¬7ó³ãüätpvöò³\o2qÂ×ÇëÇëÌçs|ÝiÞÑ_ÍìöŸ#–ó,ÏVô¬@àªZ|tÄòÒÕ%qÂÒ’ôD¶qŒzà¶vgcm­yÇ!ÀðllЋZ{P™žýIX¨ÎΈh'0Jl¦)ô×JÝ +@Fo›u»#©»§Ê–áñµGÛUÓeé„ÿÓ’éû=ùNÙ JS€DBþTAÍhU&½ƒkkÚ˜v$õà¤ÉXÞ…@Z¶¶åà®%ù9wêmº–¯oJx¿€Ð~¿x® ܯAÌÀKIPƲ*"ãêV‡‹F@Þ‰'}îÿ¦ˆù€½–—j“\{¡ÿL!À8l‘Qp<÷êUy½À•K0 ñ‰È×' ‹-õSG²²p9|µ%R)°HZžhb\ÐÆøŠÈ×b + @ïû¢Rý()dG Œl×¾7»1¶ð7¿ºÉå'A U¸”ð$TEU¹2gÀ%c¿|ù•˾§¼Ùß§fDé—ç»a»|n_i3výëfIÿòÍ͵¯Èðœ7_ÿ6|•å_m~÷-!ÁZv’}Æ àS}ïÍ•[K?n^%xëÖÒÒW¯þðêÕ®6õæ–©à½^U°²|ü2Y„åÿkbÖм3O·d*IÁ^Dñ¤VUoa: =ŸÆL" +#À*Tì3¦ÁqóŸ@JR®ì €Ï?¶·î>âÔ•R8PkÊù5ݽ¾ªæò›!Àe€Õàì¸ ÇEl¹Ý"®ÅÉZÞŽd 4ðÕEµ -Îí`Vxq‚Úè-rœô¥§äÿÁä,\^<—'½8pÀ<’ˆØC8…€›‡cð°³p)€Ã´D¼U@/µqºž:ýãþá3)€k,醿Ajõ«\?Í-{Eï].ã~W€Óïôoºåïd„òl€  ]‹$ *ÖÈ@¡l3Ói I‹ŒðFXÄ£Îî£Ô­"–uÀ­®ÿª?R£×i'ÂÕqv=¦—ŇßC©’'°å:š›³ûO(… E9 îÌÌ;…÷§I¯HSÍûÚ6VÀP…húíÿ ã#³Ó<[Ë——ïº#€¾ÿ¬ñjsóìÕéæ7_½ÂïWײü%… ´¢ûò²ÀN~S>® `éƒ÷¯þð½÷þðÊÕ+KKô\!9 ]°¶š‹Dî8©¨ÖŸEôq§9;¯ö[{–ü7ü¨ðüôÙeޱxý……6§ºr–ØÒ¯ þ,7œ‘ºWˆò¢º¦`ƒã»GâýðbЭUJ ZMÌ:~å¹é’Xq(mKÖÍfŒd.oG²í<ßéHd®_½ÝÚÞÚŠÐÀÇ&”þ¯[›y»¥ÿp)€ç}¦›U쿾»Ï@0Î;˜c¢!6p^¤çî¯6àNÀðx¯„Oühûýg$h8ÝÏþä‡BO¤FB$¨«]ô–û> +œžïÓ52† Ÿ±¢Q0•RNÀBØ“Íï»9B)ÌJUx›»V ÀK% (ð¹‘Z×ön]!€M’[ Ü{Îo—ûèB¸ŽÏA2_nJ7­üâ<²þª4æ„—«„‚w’£ËÿcÄKWôQ(ÀÙruîF4ýéÉé¾ùé†'0ø`£1Ì6Éÿonžnø}èoúKP«ëʯ,ÝZzÿý«ï_½ò‡ðƒüÁüàêÕ÷ßÿéÿ«Wþà½÷o‰V›™¸%+Z)€Fc~à“`R±¦VÁ†  (û툰¾£rZõþ?5³ PVr/ Àr¡°4Àî¨{EÇ@Ú€PY(€Oà b¾¤½Õ~óqI­G¦›Ø”¬;úïH°VºU«ŠÉ=üÁ  ð °uáïÆRþÑQ§VoõÛŒDÔÿ÷û•je¡Jÿ¥žê{ãmÿx¾I­=G>•.̘tΞzæ 9€1¤rK¡ +`è ³1¸< +¸ŠÂ÷ÏÑ +`äÿo@‡$ä6ž¬öZõØÚõR—¬ìÄ0Àô»® B¦W#l·líèF ]»|>ì Ä>„³û1yýø« ‘Ê{ô4ɤ¸”°ánÿªžú|á:ÛEg&$ÀR±U‘@§^7•&àÿ,oJpo]¾#þ8/ÿç¬>¹¾–ÍÍÕUÒw/_êÁ3}€-jÿßÿ࿹yåý%:ÿÝ÷ÿÃ÷®\ýW7y%XºyåÊ{޲»jøiýÝî{i4š+ úÒ“ð£‰Õäê«)è£ùËÑ-´ª\ñOH‡—àß%¨j`€™ªûÊU ÑNÆ ^™Àצ,ò‘g9OO(ÄêV+£D¶‰u‘~àãéYlŽõk­¢S€X†ml.¿ v~ÚùN§VÕq‹Äfz×Þ~  ‹ßm@Ÿñ À Ý¡µ==eyê5N.O/?¶ÞïqäÑü³pAŸ¨ÕÖ&».›Ž¼Þà‡TnžwîW™mQEÔÝNÀk¹`Rø¥q”Š)¨Í/zDškJüœˆn@DÓV&€R”c +€)Æxá áø ü~valá!ü3è îo"÷9ÌÓ§­–>úÂ`æj w•£\—É9Òß ™*àxIH„ítP`LˆT„j}¡že?O 1@¶¶)×o6¥Ô!€lðÉkéÁ€Pƒ3þñ‚±<ôùß"è_þWzýþÕ÷Þ»º¼zgeåŽ<|ipKï¨@à&ÌðÁ­•åæòé&ÿsR€b ì±PZ,¥ Ê e§;»ðØ1}€^DÓ€U²L.)<œ7ø?2Fa–AžHŒ!Ä?£D þíþ)°x¨ÌÍ\ÒÞ¦“Mè¼ðÕ§w¸Þë·eÉà €ÅþVDóO%¶«µ¶"ùv—Ù"Él‰Ùœ8´4¿ê­ÞAÿà9Ý€¡Ä­ZRƒTØftº lÿùÌih1@˜Nòþî¤0 +àY¡ªâ =VÎÀçGºçDQ!C×ZŽHý?ê”KTQ<üÓ`2xÁ ©˜L…PS®6{BÌ…XzÿÊ{ï/ÝZ]^ÞÀõSäoïÇÿ›q˜jìã–†l_æJF%ŒU¯Eú?lFH?3ôçP¸f*·ÑFåvG2AŽC±:»«Àš + ß @ׯ’€¡œœžA»˜»´mÕ,ùdÛ¡Üå(í›vöwT¸u8µÀÓ÷ZxjÑNg;¹{‚åÿ=¢:€œ¦ß.€àÉ)ðƒ¾JÕþÏ©e1½Àyà<€@X +à°·7îûÀþ=¸X bð à¼ø¼×ªµzû,àIAíÿ +¹‹%ü¾p~àŽ+^¿`lÀó‹€l£Lá¿‘H +@]æP×*Œ‘ОŒYÄ. ¨üå¹ÕRÑn• + yüyDS ¼õïù$ù|^Ü]Þç±à½äB&Ft2øWöQ&&–0NODð¦%;‰ö_/ºæöDȽRX>ËÒ™@ÙñÆg««›Í;C&üVÐ\ÝÈ·)öˆÎ V¿I€»Ë+û»*µyUíý¿þÁ••lusðÏ›+™àêK7ß¿ò‡W—–o‰3p}ÀÊ]ñ‰ÄÕÕÁ S@ Ì2ÒË”@…E5Ub;I› Ä +¨brñxìT¡€~[(€û©®eƒòÙŒSo=ÆÔ-«Ž¤ÂðBȤü‘–Q`NÆ^k˺¹²ÙUµj)èŒN~Ã"~+ÒoÙùZ½Û®Õ@•êøµ$`#!_õ†«Ë)8: + ¢8~æŠ~b€S” +@(ÛÿF`o缿ïW‡ûO¬|IJA*·„ÏF ÿ¶®ÕMb€4' Ð¥èÉ–Ežà9³ õ A$fßPÝNû©ÞÄáü‚Z¿¤Ü•1;^„: +þ–ö¸kuëç×¢TÚ5¹e:ßô"„¯û1yzì×ø{?ú–îï\}©2f9yý•¿_ž]Ps-(h71¨i›y7VnØõ YÀ™! =§©àÀjøUÝ„B~ìå³ü³ÏŽÉÒŸl2c¿ÿªT~;÷)?h>¥qOb`¥Ù ·¼wµùãìÇWÿõÕ<Ûlráz®ßýð½«R·–®^ùá7oåáüÖý»x³Éh";m y=ÔW ²Çÿçç©€mÕW{›Ç àß&¸VéqÁœP¸M2Ýprzêߣ˜)>€àNŠi–[ÕʨÐþÏþqª;ì¾ ‘ªVþofaý~¥‘ªîípåÁ\ ß ÔvÔ +ól3>`6â@»^í0ˆù û/žJ?Èù90n¸EµÞv°Î0»ÁóÕ¹1Þ>’€ÖÚÒï|è¬Ð#E6†Ïé€(é~kÞ +èú?¥FÐ:ýO+F‡Hîþ&±©÷äç¶ô˜h |é¹M Á,Q]`ò±"Þ˜µÓZÀCAŽnÓ*Y +`äŸÊ‡ñ?#]9?òA­¾H¹¦á€ÁPË«¯_}ýõ/ÿ*ˆóÁàlp:ÈóÁÉ`ø›ìì³üäd *œ½~ÍÄ ë/õU>8ξþå×krÞlueùæÒò7–—®./mäƒWgCý,ÿõË“,,Ëÿ›·šwnþùÊÍ|˜iM›9²¿±²ÂpÜÿ<sDÔÀíE +qkœoþí¼"€b¨ƒ€˜]`€se…Ð]Á4Ð%ã{úÎfðÈóÜ–‰•£OÍH€îáS5scÝ€\™È…^‹ìC +¤î·v‡o¦€Œ=ø+lö·À¿äòuæ÷'Šç@8]¬¥[©'6PY°Ë£€î>~8à .¡}¦iÒ…ñÌ}¾RLR‡«v´°.E\ß  +€~}˜PŒã ôk`®Ö{!À£¤ÿu ^u‰U®.Ùa >60R1%˜*‘Hþ?¦Ê‘€µóÛÿ…ùöøM˼Xí¨Â¸>¸îY Cý³ÖŒ4 à´é +Apt¤ºdT7ÚŸg µ @È?[ÿïn“ÿ£™>Îóáðåñúúzv|÷xý¸‘½ÌŽI2Ix£±®ß+2`€"ý«jÿ|åê•æzöóõÁzs¹ÁEžýñ•«WÿtéÏH\]Ñz×Ñýr~ÚþÂý/$€êŽÛÊým÷O ê˜™™«3þÞz“6TŽÝ%¡äÛ÷G`AwB“ +€@L®#¨=Tÿ¹f0­Jå: [Æ:Ò™H„¬Ì¾é׬\vRÕ½þ¥ý¿Ó² p2£=ÚžÐBÎY­_-- ðâØ"x(ˆQ@„í½R +e @C1WÌ>«\²¦`žMl^åB_­ò'•Ebjm‹$ðHã¡vjœ ä’&àë3ÝGò¹X¼æûûÚyAáUì3* ¬¤bJHðý +€Áš +ÕŒ@Ê`_ü +£èQR;;;jqh|¶:uqÈŒ$ù…ÀAq^Ê ìé`ÞO›'§¯N77òlí¿¾‘ñÚg~Æt' šôþ¹‰à½eyözCO„ «y£¹tõæò­›ËK?¼ºtg-;Ñ_VW‰'Fî?¤Î¾7a÷jh¨¢ ' ÇÕOùíðôåš À©?+€ðÿD + `€¤$ôæÑã pŸöŸJÌ9äcj˜’dŽÖE -°H3´R/ÀöŽLK;#ø=gÃÛµï(€:96 +@F¹]vŒ‚dñ;|Øæd{êþ…§ëoWk®8@NÊE#žöSðÆÉf…uÐå,±XN?£æ?µø%Å;Ô•·ÏËg ’ó›* ˜´èèÄ8€¹Z?®É€·qU-ÑûR@u¥@ôëÁ’Mñ^HÅ”0Um¿¡’ãàXùÿÔ%I3€wœ]&ÐaèÚ÷Õ`¡Ôö?ˆó:µËü79ü9ÄFŠNEV¸|ìš6>ŠOyïNØ.·ëó×gùG:_¨0öÿúÂõËçÿXk*Àþ«Ý/Ç®$D5&Œ߯’7z!ïÿR"·Î2NøcüQÿ½ŒË|ú%“äœ)<Þÿ‡ÿ¿õ½«+«Ùj>0™@'kËùûW?ø@ßÞ¼råƒ[wLÞâ˜û7›r.ž>ÔH%ÈÐ’YdÓC¬ ®ÅNÇÞŸŠ0À|(€°S¼È<{N.ÈYJÿÿ^€ÿ«}¹ ™Ìì»r~d€œ Å9Q´%@ôÑÜw³tã ë‚½»©ߎD,Ûj¢L¼—Ûn!°]/‚Àîm®À£KÊJÖJôŽäù5Œ@Ì(àìñW®8‘€'Ñ@’þž9¿äþ#0‚d¼À2ÁéÖÖ|ºïn‡K<<öð‹1@4ýæ+€ý ËNÅ”0µÐéoS#,Ræ&ÕQtŽ) g¢žp Ì ß)€?Ð H?‰°Ò¤ð«‡í6NΣ7ºë>:a\¦/Ý2üãvˆyq©¦Ë—µïEÀ­$…œð +J0•—vè'“Á^b•ùþbÉÍa.7·PCíÉÿiÓ©wdk››¼ÊsÆõ6ï,ßZúá—>XzŸ$à2kIýðÄ—ß»ú>#‚鸵£;ˆƒäûxóΛ|g¨AŒ:òÿÚØ`4RÀö#ðZaVѸYÌÆT¹EKÕ/€š ýGþ8N…`jÈGÎŒWØÿà„ä£nÍ +@HP’:míÿ!¢*R®;)€GÞ§NÏ&ûÛ€» Xk»ß%wˆÿ‡jq~Q‰äÿP @9O¶> (¯çUðVr}7ô]nĪ ó‹|!¨Cð¢ðÿôœ¶ÏëC€|ÿš\n¤ +lqUÑR(@„ï?êö¤¼ÔxòWÔÕAœ$ ž%ð"n©˜.Ì;s¥ùÙKS€Uü„ˆn@›“ÊOaˆv6Æ °… +H¬õùïíHv€ˆçÂMõž¿µRñŽM,éžÖp~P±=%8†ô!ÐÈ/-(`SÔ¦^ÕC”°ç“vòý~½¦¸O­Ž›‡vû§¸9™X€ù,çææ˜§³XòÓµ]XËÿ·¹±ÆÇëòêU}¤ONèÈÖ××éÒ»sçÖÍ«ïÝ\z_ ™¯¦ýy5݆k¯N³+RWQïÿá•¥•m ]@ò°ô~Å rX®V¨ãq@áÿô]Tjµjm[3q–]+~Ô_ôÀy’I%úKp^Ð,Sã`\ÈÆ@òÿ¤ž>ÈÿÿÈ~îZ…÷ Lì*ÔBRIƨWIÿ‹¾R;v‹=Ègj¾$—è€Î'åý‰Ú­zmWûíÄ™D´@ŒLÀ%ð‹…ú¿Á<"ľÌWw!P9—  €Wa&HTD‡¤?æb6ß§ìÔMV;óU¦UјÌåµHoS’ß›8Ç%ÀÁˆ`^rKÅ”PæT¿Éÿ[:ÊEî¸fœ D"`BÔµ»s‹\…;0c³ñ~ßþϪü3çØáÏ!ήµp Z݃(ˆÊ˜ïÛõY\ª[Eû/-ßüÛÀ´]è>ïÖÛOUSÛ>#Í5ŽšI Å• xW«·Ù7áF$n,Tåþ” ²uRüù˯ÇÍÁ0ÿêõàlð*¾ÒWœ¶Ï5^ Nõa>Jä§§w6Iè~󃥮®¿Ê´ ‡ÿæÊÕ˜ pmùÊ•;ÙÁ«ÍüUNú`äýÍ;Mü? ”àá5~V°*>‹ËÜk©1Ì„Á­c?M`E#àf‹Åí¿¬+çèú(ß=² ˜PŸ$ õ:3…—ëFÿ 5??w©T¦†‚õ™vTñzʰÓÛìo _çI +€Þ:EX¬±€üKrß·ÎýRÈÿÕhn/Ö¥ +˜ ÁÎ_IÆJç,6€À€âCoìõÆ Û¦*üi§ÝÑ \ßxþâùóB˜èèw8íÎ2"”ô”, ‡ݘ À': k ‰[*¦„™Rˆ Ãÿw«| о45}ÉP**]ÑÎFå\ v @óo ߤ‚ÏCõn¿2P`nÝ* u¡7öüp}ž\ê®P©ÊÕß-n‚~f)0Ž™…½çÝVçi«Új?ä"“cà(àC\†IBOËL¯ÙH=îV7?ĘÞXÃã»÷Ž%Öóf–¯ç³_ šwõö8kçÇÃ_ ïæÍãããAÞÈÖïgÇ}zûvcyiéêí?ýÓ«µ¿ò§ÍæúG÷Ž?ù¬±Þ8Înÿ±¢‚?_úóÛKºtµÙ¸;4—ëMQÍÈûó›X@®;Š*×çfg/©t+óŒ.1Î\¸V£mª)8þR€ÒJ +€3µYq> Mæ¨{µ×òX½„Ð…ÿëD•™wãÂ@Rò"HÕ +€ôCʈ´*w+¡èib—ÙVíÛá4˜Þ$€D{{tÔ‘ü“§ùõÁ“'OŸîr…™ÚîÓ#¯P°,f·m‡²Xz‰àøŠbíõr™9³Ì¹·99®ö…r‚TÙ­Œ“åÌQú°USåHØ©¼KÔ†›Žöƒv檑 ¥ã®uÙÿCè†pö€~rEZ;Š)avL¨^½@rœú„cN(z§Ùf¯¦]cü  ° +Jîì”ýÏß§0¹äÿQ¦*²¶$@›xˆS.…Zòÿ4Ù‚„ü¨ýo·µ¶›À ‘=Ù†4P‘˜­t_ô¹ô{«VmŸ¨ÕkÁJÀDós4©zìúrm¿µLÿÆ [Í §ÍÆ +qýÙÐ9<^ÞÎÿìØ}ËKW¯þ±³€W®6_ß=Ë>;–‹¿\^#\åL`W¯.//g\,ÌãˆFÞ/¸å·à1 ãË“/]šåtT™&͉JÑ6#È£ã Z‘(>“j4#Quº¶ ÷Ç ñJëqw”~)ÿ÷ØŠ`Bë3Å×’ŸÁ=•ÏÎ>§s¥øþÓ'Û*®Z‡Æ7` =§©²É24ÔE€`~6)€êžü³ÛQó…ðލh;m¡EI; ˜Àù`b‘-`j|$¹5‚ƒXü(þUiÇ(àÔ p$Õr^¨¾!†[‰Ú:ÄEk4Ý0=Ç@À¤ÞuE ®@³â$ ³lgGäpØæ°)%&>Å­÷Ì[¨€¯*hOóèO¬ TÖ Æ}Š!G ‡5‚f®ï=?lu·ª€\uº+àQ¦‰¿O"í³bù³“Mg;¼ütØ8ãº?äîï­:³‡,ò‚îüÛëŸ-1̳€¯.-“¼òžd„~™ÿE¾²¾¼$÷×w7—>xË4›§Šì÷q+@~ÖÞwµü V›—F`q-äÀnCh$Ôœâw샡JBSsBuÚÐÂÿ;e÷I²€Œª:záù€_pB!ÀQ‡@Ú‚–0.ŠqöÒÈéa˜¾Vç€L“ .ý»å|dø[xÛn½sÈÉ@(}¤½÷¾TÐ>¶ªÕÎ>#5<9Úo1°ÞyvǺ»‹p†…ÌŸ,ο_zÀI 0a€›¯Z¿·§½èíu½÷}»ÎÖŽç&ÒÚ +÷ŸT$óƒ’h]«ºdx7g*HzùQåÔGpLG‘,Š)05[U™HÈ­ÓaîîZ vð*ùJ(©·8P;ÜGø ÿ ÆÈt£-¤Zs4ËÉÆÎÀÿ PG ’ kEð%ØF NOEe‹©Xéàút4ŸS3•®TTÿÅÓ­Z­ÝæHã@àîKi¸ßªTæ®ÑöãZb‡…ÑÅÁÖßœp²ß]k5óÃÆß’´ó•B>uïçA+ŒâZ\léƒ÷—–ÕÌ_å2 Æ +eùqs½ñþ¥ +Þ_ú€‰Â?Xºuœ-Çõ‚Ï#†¥ùhµb1ŠLËiKí¨¹K·dµo‡ý^ÇÀ]&à^¸ˆÆ~fè£h;Ùッg‡½m‘ì¤ +:àSd±&P1B¥Úû={ºwB%ê-· ÌȾ;Þx +0HöIÓ.G' ¸øˆ$ gKà¶_??## ¨ÆþðÁLøÿ90 +€ÝDpÉOAŠ(!+€©NeÞµ¨ê8(@I.ºPï^Ð &g#x<õ‚Y + %ºVU¬ÑúÇeìü ® +©št×—t7B5çÀÂÞó§m@»¦ßèx.Å’ÀG\R€­ ±ÙíËr¦15S£Põ¬€Ütÿ¤Ptþ¯­ +ÿ_ p"ð /ž€þ%Ƽ¿¼Ìh€«Woý«›â‚ÛKÙíåõ?_zŸ17?àT ›·–³õ•7pú¬I ÜŸ³êËT)ÑùÝ]Y†A`ÀÞžù=ãn×åD nàƒï¢ýÐöJKjPÛPF|Ù{1@š`!€Hà)“-ˆIª¹l ÌùÂþd1Âý¯˜p‚1¦°Ú¼ßG8гl5Ä€V(+ŸT½ägÂPæ¬ô–kǨ´¼OÅY²>+Ÿ'ì× ! ƒ ¹t8r}Y©àêÚ ¹EFÀí=>ò`+HrñBÉý+•Q\"'f¿d—Rvt…UJC…=Ú~û¿ùˆ¿B $_©”¦.×Q\qŒÀݰãë}ΜTÚ‚–9À%ƒã¤qíV™èYœg€dr6‚hT¦*ɇx¶»’°p»ï÷â€RÔé«hWçÓÛP8‚@þ.1ÀB÷ó'»‰Ú —h4Á;8=¾/ìxJ +8ÊÈ ¼Í¨ÙØÑâ†Hî/ð×"9:½}¡L(€5ËÀgVËYvÿ—Ëõo.­(Ì¿uóêͫ˜LçߟgW—ÜxsIíÿòÊÍeý铬xX’ß‹V–þ[©€«W®\¹ºüÇÍ«7iÿo.}ðÁÕ›wHÊù9#8匓üdð2=W_Óó¤}õîIÓqÆÕ†,Îç;зõ$Lèß…àÊu^lVúý÷)3ÝŠÈDöN@}ê$`„ÚÄ噑¨„˜`€´j­“¡ÀŒ(‹Í¿‡Àåì +°;OƒØïPÛµ10F)08„gíZç ¦ýˆöUëcW•¹?ÓÌØ(/ÜRÈÿÕ2‘/ÀÛÙëÞž£\];¤yÐÙjsÆWcÏz­Åk¢€k P´œìÔsÎL„J0#è}Np+˜:eÅ% +÷ë(@Ù àk…h®‡ƒ¿ÒWà‰Wïp ®ÿµv[Í»ÁÕ;KÍì—šL~óêoÑð¯fùíl3ldyîkŽŸp‚S)€ÜþËǨ4JÞo–cPS­¦wžâÔ'!úRLqÍ‘‚+Æ`©ø5-'{1XÄ`ôw㪖#àd€Ì +Žƒi‰ÔŠ` +.O¡2i6J5,°ÞG»Çžù*`WÖ ~7Ðí)z‘AÓæ& ã¼ ÞÆ°€¥ûíwj*ˆ^íþÑá‘¥4ÁáÿÒ Ãh™ +˽QÚ0@ +XÔ~¨Pz=¸ò„à€ÎöÅ%# €AÀé†Ï8{.à 5€„ I@•õîâ[€ `€ÿß—xæW •R +€À®Š¬ …öŸçylI0ï€&vÚŠ’) ®y"A˜TŠqBôDå\ã›Aèk{w½ýS÷&PsùÚ ÝúsOîŸ@›9ÕÛ-±i¡HЦ+2j@E + HŽÇ«” |“!IÑ|`»àÈRøÝ—-‰PZ>ùë¢ À7Ÿ|÷f€§¦( S p{½Ù¸½ôgv{yùÇzåÊíåõ¥¥_]+,}°üã?^¾½ÌT W¥–oëKŸH¼ü±ÖÑh4Ôøç/ó/7óÍM·ùÜEÔ¥ Ô­Úýt4´q¼í¶S›&ãÆ=@ôX:Ë<ÊcÐÇ#ΉÃD2D)€"H§ZS’/¤$­û€ã“‚Tɲ+ëêøØûË÷¼±`YÂï‘°Ë ÚíV—FÇâØݼØ#‚˜¸|±Ö‰^¡¿[ëôëVQ={¿û:€qÐÝè,°À@î… `«fÌaÎLíŠÞ£ÿÓM!´±³+•1öï×EVŠŠªrU—õ8pýÀ3;¿ű1#À³´¤RJ˜J½plAî,r€32¥Ylx#hðw º¤˜EPô¯Ò¢O`€”»ýÈŒ!Ü'`Cöd@E},`Ýý€2«ð!¼_ˆG÷´ 060Þ@`·Ì¤ö_ +€Vß7±ÀçGŽcëúÈtl"RŸ¤µ–ný“ +ÀI@⻾š¹>õ0 æÙàõÙ«ÁépÈ™ÂÍa¶|ûO¼œqY <[½_dF6Ș&4_ ò“ãæKFç÷òA><£ñ0ߨîž¡оBU)2WPJg«¾´ôK÷OyÕMy.†É…º¯;çP>ñØüp.L!€A/6MüK_u«Óï†@„ì–RÛŒbõ´Òÿ÷ˆŒ‚vÖ0 +~·“´Ï´ÿò3„îíîSÜ©­™TÞ=3€âk)€],â© ÔßÖ/ïo㟱6w/³³Úo_bަ?4€½ŸEM'ƒGÝž¢íu°“X`v12ï´r®aVø$¤j­•)¨"®IôIŠŒ#•8Ø?Ú?xÚ0(ù¿À³·+€k +€ÖŸD h€N†•^SΜÓoI/€ÿ@›`ÿ×r–íÝ"—Ñk‰9ÆÅ8‚ Ò€¯ Û{õm•ÃBáð*T P(=Õ}i®Õ?å—-ÎÈ¢ý™Vÿý +@áN!çþÜkå–©¬‡f¢€Æ¹À›½vÿ`¦ü0MÈçW2Úú÷®xEÿr~ge¥™7×V–Þ»òAósB…@󘳌äþ&à]šc¶Ê¹øÀ"  €T€‡×L@moyãä|+€HâE @6tÿ@&W*=é¦w6?~Ó{$Kw80FŒD' 6ˆ¡Ã0.U!À[.’€”ª6¾Ûér6@I´}F²Ú·£ã’ Ù=äXô4»Rëè‹[¸s‹In/-}p³ùc}óCŒúÌñçÐ^$˜šõ< E1h笩Æ7–9ÀjzŽZÂëã Ð «¦R<Ž3€Z rœ1¶#Àû›¿RÛ¤_N*€t6Ú _L1µBO ¥âŒÚP%Wx– nÀÿgåî’¸Z•ÆŽ“Ij^´¬öíÕA´Gθá +Ð +vc‘?¼pwÅ 5ú­E ððTÐï× ïGΩ´ÒÞ{ÎÉtÁédjáúœ¿×š +ÿW‹¯£â2º"´h`LŒ7æ…aV*wz1ßHL€ÄÂ7z1áÿE½¤RJ ¾Eµã + Éಎ1P¹V(¦2*€ )€^¯Tv¡éK®í.´BÈgIýITæË^Zõj}k4C7ꕚG¿dŸ‹G>¨§óx~´pýzº´—÷àã0ÜÜã…u²g-í£Z¨ ¤üax˜.ÀXðžîqkÃ<—>0è[ÅýnÇá‚å;Í|½É˜5þï¿¿ôÁÕ¥[7?øàýå÷?XZʼÙ\ÛdÀmùs¹iÄ,KÎbL3‘CåŠ8”Éì,UíÊWóìój|ˆ:HÎuä8õтԬoã +`ž™^ñìUÖ›cÑíõ¤Õ&GóÅçõ°ûHnªûxí¿ @­ 0¦*³ ›Q_‰T32$]tÀÈb¬¬öíÃp¹N¿×êº×C¬ ÇN­VD§2™HPûýj„±ûRÒÿ(À ^E +ÒÞ±FFƒ™2E¬÷Õüóg+»¿À Àmüß!€×]³ï3 YûÈ!)€')3ë=õÀy0Aœú—"øCÁÿþ3ÕŠ3› •RÂt…q„ôóÔü'U%sÁÐG¡ZR×&€jˆ¦À[ @mI ]Zºÿ9P*û¬5@W-¼šõ € Ï0pOR@ Gœà=ùÖ/PWrž +àã(½ßð†Œœ’íôT‘Ö¨…âɨV§)p® ÌÄÕƒ‰L„Vÿ+wšMýk™(À¸¹´|kEíýZãæÍ“ÿ6kÞYËé/lÊÿ›Ḛ̈ÊdC<ÄTÁIó´ÛTµ|Fà€…6KëìÖjjé ~º©´Cxá(†ÛN1ÛWy¸^U4@5¯Ú‰Ü_EEí %p/L°ÅepESHAmeä&jO]¼.àyRÎ*t­X™Œ `Ål+YíÛa³óÁúotúE€¹~K¨€žë¦‡ý¾J¦$‹¸Çÿ‘Úk^& `ÁŒÿ—ÇÆÐ¢GÈ@GqÛmoïš¼^¤I©þ¤¢–'Ù"ªæ;@òOæK<ÏÉ÷{«Èé…ûSûZÅ~ÿè™+EH¥” ÂO@±ð‚6|~¤ Z +à@±&lz3°2ÚW•1 …GãeØýÓai'`.I‚pÒ¯¯`kW÷–¸–ëtf{N?ÑN´bè W6ì«Dv=b€Íùn€TÛ@{Ë”üµTœËPß“(~Œt)B[š€ª_«ÌYÈGèv ” +@¿q{ÓSÀP`Fˆ>¸zgx?ü‘"d‹ø{ý?Ôçé‰ÈJÐWÌÏ_÷oóËD}{lÀºøD˨àæ?‰ð{‹ýz¿G3ŽƒJçØ-þçªj:åýUºÚKÿŸèÈ +`_¶û' +  —ÇÂw²†~5ÈòU."¸Ö476óaÖhpÞ@¶vº6¸C ‘åÃÓ³×9WZµÿ盜T¶žåk‘}ùr2€‰Î ¤æ@<«:•L£Âuº»e¡V•ýÝ“{‘<—Ø—‹>*ÀÏ<˜ Q¾° úGOÚ³ž° $ÊÁ_p¢°t&)Ç’;î¶Ðm§“vôÆ  –|"v²ÓªÖvp™ýƒ'ý`2à,© +‚&ö]âEöËY6¨p~=¦£™ÇóSû¯…‹& +`Ô Ð­Ç” ºÕåü\B{דË—Õ:{† ²+b3RJ%¢žÚïƒÏŸ÷éA  + %H¥”0SI#å…óâJ@Ç6Ï”À’ˆë(€Šqn¤vNè' + …jþaøT:Lœ =‚JÍÿaaàa¾rn{¶=ß ýçQ_ÌÍWë?m·RJ˜´*)Фäô7xˆ›>øO€½Áû-pTiçÇaßšŽr`@½¶â~ö1ÿoŒð‰¿Ífcù®9 +È9{ž¿[¬ßÍŽ3Ý>äŠî=<2P䯇ãlùöÇËÙS}ü±B€ìÓl¸¾¾žq£ëAÞÏ’¶mhw‚`€dí%Ô2ûâýE‘ Hª0¢3€5LÏJ¦^Ë ^uy TNº‘ÊϯEò'ßÈy¼°÷É¥Úä´ Î +ˆFSVP:Íe@ïQ³7è*"—&«};Øgw®“ɶx _] Pýdhµš|BNòùüj|¡í¼ÛýDbÊ•ÈmjïõbÌýQcã€\ÈBP€Â)Â®Š¶³½Õá,­:çhÑ/â:‹(€z‹Î(B5ãò`wÚ»( j¡»û˜·%’ïä˜âš¾{’8x›˜]PÅ~Ÿ€RÖ>Dð˜èTC(–- X6†OÉ.Ò@ ¸£XÛ8®ËÞ¨Àü 0O °P©AcAÀ1×i†$æüµ÷˜‰ŒÃÿiþ=H›?"€ÄºC +“ +€Jà9Q@:Mh§#õ'ç—å,T8ïæ ÿ÷,¡âl@¦þ +ˆ €_ÿæìåàUŽË#Ãõ,φzÙøÒWó‡Ë¯óáà,Ë7à +>ʇ\Sl=on ‡gz‘ ¾làý+ËË*¾´ý´7ª"3€Ü½Xèœ{DíÈ­—$`ÄÀÆÌ +ô¥~GÛ”º€”¹‹ÆÝ€‚Ê*¾sÐQäî7ÉÎÒéÀÄ£þüÉ~ûYø¿ÜD.MNåV%hgµÏz›zµtÆ~²Ú·Ãû $úÚíÚúæ«N[ÿÿp±öaÚU@ß@/žÑ“Æ& À;‚-ÁÂüœL­L`“"³= üA + ½½](Pää:¹¿nòý:P«ßàcw1H˜¾€žÆZÀ®Ÿ Ÿ¢Z°¯ø>0»°Õq¥ñÃ’f·q)€NíÚ\\\ ?‡#QîþPzÍÙ[îÔƒÀÌ´Svx´…iPz.EºÿÝåYûk$´Ôè¾A‚4@…+µ2Ïo»2·P†žÈ˜Q+| JÁéyP»ÿ#'uŒ)œ¿¯ÊVUq8áü;Zô¸#ÿ—Á²ŒIZ”ˆy³ýבÁŽZD ²xkúF 1@) ÿ™LÔß6›ùíæÊr|ºyûÔßë×kz&a€òÿ¶1<ÍõNÀ…ü¿ÑXwÂ(Ï2&'Ÿî®W÷’0ZÁôK¡„ʳpnªÃg,÷’pDê´?žé-ÀV¢P’ÑG8+l…Þ2£¥ð&µ2ÜY“ÖÅ^k3ܨmþÙþ³ß,«1ÄØìá®ÈGÏO:-‰5Ÿr|µþº/VÃiÀ +@ͧ\½!×éŸq¬W= +.)VˆØVåGó?Rçöï*AÚ=5XC˜8ï2y‚Œ½53#Õ­¿" _W`Òÿ=V¨pÀÿ ŸŒT€§óç_ærj¸€ÙÁ˜éϯéBX È'éWò׬Öü{°âë¯,7pqhÚöiØåy1ŽÔ¬»”*5ÄVyS³õýÔ @uw::×§$ ƒ?¼#ëÅþÆ€á(˜ >Å‘ê3R—‰Š³iÿÃil†wQë + ÈŒzZ­/ÿ–¬öí¿g§yv€ ì£è`D,r¯~èï@¶!½f†{ÜlÖ;GysöR"­…9@J0Çáã"Ðe:°PŒ$H7 @ê0Œ)y G0€¯ ªùªTÏe“óJŸnàf`ß«ª[ä € @EíÝ,EûF€ÈâßtúõPf+T&#~Š ˜Ýv +€Aè5‰b«yEïf€zûáìl»¥Jp•%Àbôn•`PJ˜/Sð'E 5ø :Á°½n!üÞ¨\¯ˆ*"ïÁÚ=ËÇ}#M¿Ìï‡¨Ì JàMÿWxSŒ„#ÕΫÅö}B4wïÊÕÉå{Ú ay%†æÍ‡éÓÕ¼9TÓïï!®;¶ÆU† N$0è9XÉsל¨ÇƒhÆ1ƒÝÚo&“E# lµ(#êXµÄõ§ÃsTe§SÝpHŸLó¯×þ9&¯Ô -ígÿî€aî0È+ë)0{9M€p + Àûç,@"ÕN§_­ýî +€…à0žé{ ¼Û?PkÜZ$C`±*±°€äqGô[;4 ŒV¶µ†ju‰]'˜ICÑÔg´ÿ¼Rä¿aU*@Àugd\¢¦”)š!†¥ +LX&  _Jƒ’QH :¸ÚÑ}‚ Àì+0}ð6ÌqX¶ bxÁ¿áOÖNDQíêðäÿ´þtªIã„("VŠZsÁÖõ‡õË3ÅPÀ…YµîîÛK®_à'¤!*X(r…ã»]1$k­Û¡.ÔýGª¿ëï-€ +àÿáûfV‹¢µ¨Šñþsúj,ÜŸ£ÒaÊ_ÃýÁˆš+j¶Ô»{@M=~ìWÍ“åáhªŸõ3“‚€û‹¸ž>~eYÐ\ae+M¹¿ `”>ƒ¥ãùò<Å–a10pj¤@*¢BILÍÔ!q×e@+ÓR‹^BÎTCÚyü(í“£’hw<ÄNþï€IPö¤M$ljÐ?`€céöj +Lû‡Éjߎ0El3xL|ðÄ#‘´»ªìíª/–ìFIOÈYô£Ò¡X’AÜšK!Àu·4J¸½>õ‘è!-¾c€ßv;Ûœ-#'P(Úà¤øã»!ÀçGûУ¢W=œ£þRp€^É÷ǵ££°óƒTJ ¡'€Ž& †Àu˜8\@§ßZèØô¦TX¶áÖGªí> +ÀŒ‚Zì/=F `¦L¼W}y†¡€œãSQð-sPsO³ï¹×ˆô`‡1(É4˜TK„iiê ¬{y¿§4!ÑVÀ—H@£õ'>¶ûOø?F+Pé¥'×ß|CÜ圾lÃí»ô¡/¸<¼ûÚß «yö7œD°|G?ZSó¿¹)ÿß\ûò³Þ¥(AÂÿóh‹ +ÏIЇ:¿†gXà01…d5¶Ú1Ȧ9€éYÕYÂÌQ ’|ÔA!ÅÌòN¬ ÓS=Ë”ý`>µCj‚h„øœ1 + +­‡ç˜laåQ¤ÝÛí?@Ÿá½ÃýÃß5 è}Æú| "Ò|»ý#퇬]m¿{Œí%™†Zkÿó£')ÈFG%¡šŽ%W¦€ŠJ»ô +rf4´…Yµ;\ Tõ9€í¶{Zí"ZáLĄؚ9 À‘À ò•´îq¢$¯DúK”¿Ç™¢V‡‚1ƒTJ I,>˜ž9ìsЀ ­ôí¨vN7&•ã“Bp}é¸g Ÿ•“ÁÓk A¨·oÌÎÔ÷ˆñëõ¹Yµîòç7’)çïÕ«ôŒ@P±Ö¦uÿ´ãŸ?TE´;îµ¶÷ÒòðÙ^¡ žuIŽü?é8 JÂ#í|ü#ÍÿhÖp»¿8=µ÷ÎdÙñj~¼ž¿Íò¬™g§ùàìõàtCáÿog›y–½ÒOó3’þÓ<ßøF¿Ë7NOONóA68Õ[ñÃgƒuý lØUPØâf“4S~Ì(ª D-OM«­MœçÀ•¤àJŠ +Ðóã.i@~c ?ï?H§›°ë1 J)a¶êqrå‘-s60p‰Ù€8,lCÀ\q@"€Y)\°a툪٠à_ÀÀª»ÖœêÜ'€í–2 í-&ùïtU2íöö–ÀÖ\­KT»íÊü×â“  .šxt÷E»UÚVb€PbxA2%­­Þí2{ïðpO pc#F p vúhÿy ª5^®o÷.ÝNžoHàKn󃯧‰´$ +8 ¯_4Èš÷Ž¿<¿äÇôï_Þ~™7ÇÌø3¨ùϾ<>S[œ½Ì/gÃ!=rÝÐüd08ùZê`xškíŒN²-‘ŽÝ5â#¢&d!:4Îw‰kj¯cÃǼëH 0"t\œ„Öw…HÄi““wè½Ç%GjqÕü;P0Ò&{]0ÀHôº0JìѪý +@.¡Åýz–Øýg‡0@GRZɉl Þ]1€ZG)úîO(€– +êg:<î)àBr) —gݱ¸A +ÏçXô€eSH V)  lí&Ðé0½]p-'ò1¶e¿£ø>6¿'¤ßÔÄÑó~ Ð!S[ú•+æ<ÌWÕBžSª9T@„&€HÐNÅá0È +@ÿ/Åæû?&g+ã“BZm-¸¿}«®zئDª8–6Dæoj`È·µV1[¾>Rþ¨2]hG­?áìÄ.݇ª©Àîo'€8v(–~Mßàž8ô´û¥ÿGú2¢#ÚB-$ "H:@o²lp›Sú˜ +¨±¼Ü`ª¿fcp;k¬4ÙC|/dwõ£ÆÊÊJ³¹z²š“1XÛ¼dp–­­m䛫\‚h³©Ú(&÷å@ •ËÍIõ¾ÛNÚzNoÝO‡)Ižè4 c™– ÉÀ>`BÄÊåúÌ¢¼ßLÐP„R‚{=ð‰  SsÀŠqi€È”HV­=|q%"«×~€wð/zÂþá³£CÆôºû»º8ÖHh[­®G.X¨Ø|”öÿŸ9Ÿ Tȱ§)¹:,Ò·àÜ¿Íé™>óÓŽáì@ŒЭZY|ÒG2i‘ò—«!9–bs/9F²‹ça*f@‡qÀVGAúܵò&l¡&rˆé¨ž ŽS@Ì( Ž©´æô/W¼-Ç*¸ÿYUÐmqe [œÁlHºáËÏÃöv½JŠ@EºPÿÑìôýüsŒq¡õggäÿéÛåUßœB:<"ÈóvBÃ=š™¯ïuc.–ß®R¸¯*d™‡"(ÀK«5æÿ ¦P¸xÿÌ ùùéW¥ +€Nx‘ÉsOÖÝ Ïˆôzeø‘{õÛÓpöŸnAz²µ“¬¹æ,`öj}ƒ«m8#˜mæZQ̯bLѽjÆœ›ŸçüÆZݧõÃÆÐñ®t—4 -€ÕNq+˜‘$„ FÀ¨F +ÀE3R2ͤYP‹pŠÓPO8»ˆ#rÜ\§‘ÀYðê Øýû1zã +‹ªý> +ÀmÑþ@ÿHŸmW¯U®Å ò²ØW«©L9í<¤6˜uè>¡hÍØQ=TÄ($@áû‚Ý€qC–(€èt7 Z3)O]œmPæú;>˜YAíתDÌ”¹’ðh1ä… èH9 å¤vwpGê ¤RJ˜g„×9yO0gvÃ6dáü›mI))”–ß§m£µ¸Î(:>i[`\ÿסãþA.%€ 1°0û. +@!½ÜÚ ù:»BßÀOÈŠ+ÀËùô¯F °!ŸæÔíjíÝÃ~OaÀ9”`ç—Usx{ÂèåvqFÐtDø[zíÿLe¾Z¯ÒRŸW›y¶±¹™72â‘Ãà Ì}­Îú×­Ù\o@C †S²þY¾±¶™ Dœa˜­i5›ùêjóòåñ|$vðáhÊ@:ÎIØçÇ@/©ÖC|­i"b}&y©ÌÙî#£rPM ¯~ãέ`}¨ öÚ`bÕ´=H[În_–NТ¿Ê~kjlŒ$«};L!£Ž#­ŽÌ|Ù ÷y0Sv…dm€rÖæõ÷Äqœ»:RUƒÞwûÛóæL— + Ýæ + E ‘Þn‰BܘŸ*ïÈÏoÌéÑ`3ô)aëÝ ½¨Ò `÷€G¨ä»Ý=š½þ^ßþϋî'±Aó»}!ðÿݾW¯õ{ìídûÏ0I†Ôªó•™äÿB¡2F÷®eÃhÇýƒœüYæ)¿äÿ1Χyü‘¿”>í|s9× +6†9s ’ l.ϱY!öJe>•ö:Z/óEé3ÃãÿÇQk›šÝRMŽ5Q³;æ ±àdälUž<ôg„H½GGÏŒ ¬(ªs½ìüh00΋Ë9ÈxÐÙ¥ŸJHVûv`“=.­ƒõÅ‘<{vtŸt;Ša@UÇÈÉL­ÞÑ‹Ïû’“t:Ñþ{áA€|Uú×o®L»?-›=?1-c0@g»mà@¡*Úœiˆ¯ðâçÏ÷M}hí>¢hT ÞÃU¬hI¯8 Cóï“è{ÄÿGH¥” àqÒi;µ¹ ‹DÕêÜ¥YùG>åÀáe½Óß[dÊÔDÞ4 Èz$@*ü˜ãÎÿ‘?ŽRê¶K°°ph/0Æ] +`Á +€ÓüÉõ!©)qé€HÁå®]ÕÆ¤V €=—þ^÷açïÊõ÷˜FOï`ÊÚr^oã+Áø+.¥¯=#ú’lÒÓSÄ#âÌÊÌ ƒõ +XÈuWõÙÚ™€Ðø¹œ_½óŠ ÿ™0T®ÍøŸ|“3‹¹Ô8 +@’ÿ4Wô/ÿß ÿÏêVWf¦L™:\Çÿð$…o׃mpHW|'ðÓ‘÷k™¿ŽQK´˜ý‹ßŽŠW™Pf‰¼~@€‚:G +@ª: Ç&™8¢D٩μß#ÍžÚëD»ýÅ߃üOVÂ? çÑÑSiê}…;2î¾°áJ”ð¹œÆW(ÖÕó+ÀŒµ“Ûî©0´C$ˆIP>@ ÈG4@*µ‚ÔŠ¨ ë¨ÝGÝÝ ÀzüȆÀ õ­½;J)A +@Ç}­‚p¨º¹hœ¨ÊÆÃä1vŒüÝ©w# x_à©Dõ'½UY'ØÛ¥£c yS,•á43É™ó´=õ6Ì/\¿,*¨ÿ {bî¹Päì`‰~R¿9Á™ƒE[âfÌi€üâ‘ë3ÉëIvöü»|18ˆ“0©r k_b3†Ó ÚÚHû"TæõîSšvØl|3ätÿÁà#ù6מý:žž ƒüoÖ‡ƒÁËœ€¯_ó›×ùë³áÙwùWƒá€ëêß½z=üö«áÙðd¿zu²ÁÜ"YEÞÀÿGÐx×qÕF²TœÂ2ŽÖ55ÛfЉ‹À ^÷¥ôLHn” +Àά|ˆi‹R\^! ¬p(TFr^›4U W»½‹Îèv“Õ¾üχŒ¼ŽCØ—è·jýgþQ§Ê™]_´·r5Œ¤ïs°BRZz(·,é˜áüQÀ˜„)`÷p~Ó À®À¶ÚÁ ì³€n©Ô^õÜ ðBɹJ€öÀ„ +€Ôñ¦@\GjíôwvðQÿ,!•R‚€ R¹OõÒ` ò5€+Çþo!€@§Ra/ì'1q”­%ŠL¦‡óËäºIL£’Uõv{ÃáÔ>æ|YÀ )m…ι- * â÷¥~ø‹³Ú-Ý(€€w4úå!« j`ïa‡È¿·×=”óö ðñ·€"Ö4{"°™‘ÐNse.HЉv±îÙõl½ÄÙòíÆÇÿÙÝÛßfLðíÛq·±þɧŸfƱâ··›±Þhdë/˜gwËM¦ l6Ö—?¾ýq£¹¾~|¬pà®Þè÷ËÆ_|¼ÄU[ØZDÄÑr©ÖL ‚Ê$:&9à:ór«šÚç;¦°C=¹ž“ûCú Ið<%r …“ +€­²ç£.Afhó1¸K°+Éjßö…cŒgãP~(8ìŠ>”÷ë®o´ç2]É–ç:š d³@»€ŒŠñ%-8IÊ4`&ðŒ ²îvXL W¬Oö`p>I(€M.¹R?K +  €8ÈE * N`ƒÀ;ž@èg›÷3òævzÛ‹‘£MVûvØõ_œ+ˆhÉ +@°?6'`i´(€Þ÷)í¿@ •x¸¿J]Ѫ]¿0¾¨‰@8ÿ>ûã€IÊ<Õ „÷ Àø°§ôv«à9°¿Û-fc þ_*€DÏ:\Þ¸tÀù ¬Ên;)ÈðM0Ï•Á9¹"Õæq>¹|'2³z „ðûf·~?]¸ ÿ´ö„‚ð»ëV ?èn#·W™Gû»MF+—¨Ù÷×VzJÆd¯ÔVDTRô¿ªÈ÷öR¶×î>LÍQç·Æ·ÝÆyäM¶‚ÐìPlÈþ–¦fæç™.¨ðÿÙLþÏì}P€óûÍ{ƒÛÏ|“ÝÓóºü]ËÚàÔ|pöÉP_Ý#  8­ÉIâ‚Ó寲Í|3Î/>q¿`ã.«¬7W>æº@¦¢%öI6E¢‰Vt&¤ƒÂ'p>¹½x3æ´TÑ ÔÚ\SÈe`Èwäà¡Lö2>Öl“ ïE@éóD'ÀÓLWtX¸P¢œj£]°ó²ÃÞÀŽÿ ³ûÏ!ï~:’ÃþÑ3.õÕï?kUé¢j’¸èt +HÞU(Ùz(ê–»C:`fg.£ ©&®þgÈøÆý_H£á}qPâ”n$¸Ì„çIè¥*@;ÃHÀP»T@±‡vÑ¥tvÔïéŸÏu¨¥æ‹XŒTJ (€Î÷(€ú( K—¹û-UGQu!£bý©ôµKVR"7¹E”žgI+§«‘ÜH`=;Pë](€J(ý€€Ÿ^šZ€Ü¸A¶€Î˜pKy¥ÃÌ©wE»ˆ/b,s°ñÓôüpiq\€pžÄ®µ0WŽI"'d×"ÿçC½|OîzoýÞ§ŒÞI©ý³Ûë˸®Ia½yüiÌB«/X6|íÿ{L*–­6WÉ®fkƒÛ¹'$ퟭmnú/Â걄óÚxhµž²;LÊ =G‡èõåðé’ P‚t­Ç<™$ã¢u`=qVšM.¾ø¡Ïæ)õâL°ø†p~')G@Ÿ¦Ígg[¿Ç¬)u.7]mÙª’Õ¾¬_³÷q ‡ºí3ͦЪÆå ihwe®EÀINXxê!tTÊÉŠKÿ'P‹¥}vÌ2'C¢€´ º¼°B"€ðz¶=+°LhKLƒmÄ4ŠÏõð¤$¯Oò„Œà²IcYÀð[-Ñ?ë÷ù_(B€¢:ƒR)¦ÈôÎ+œÓóôËÃR€æ =`€©6½vª„v½MîÏZ(|A[µÛbÀšþ)f"œ{ÎÉÿ}Õ¯5gb€D—K°ðÞH5„Ð;}9/ ³rnžõ©èC—³§î A%¿‡ÛÿT[áaKwžß¦(Ó6èØÿÒª¹n·ðÕµ7„ÿ{ü/ã("ìcÞí¼ôußYåaøQ.) ÆŸ¶¼ÙÌ×?Cpû*onr ¾ÈNÅ̶*¸·š >~í Ì9°É*33I &mx–%•E kÿkyCT‹áÒw»Ÿž‰ ÀÖ3wçôõ‘ª5¦èš\ÇÉý·¢‘(E/`‘è; h3(ÆŠÌLä.+ˆ…Ãè°¡Ë~ðá–·³å§ß±À¨¿ñ‡ÂöûûG‡­êƒ~ç™"ŠÉHßy߃vP>ËQ@Pr¹¾ö™bN4`0 ùUt) ¥Y‘¥ö_ +˜É <^íh; +jc9@Ο ùîxZÅ ­«‚)x\0U²è@ôV«ðÿµ¢ƒÞoSóµè¨é[hD·ðZZºâBY˱v"N‚þ'€M' +H¥¯]³éЊ9 `·¯Ðïƒ ÝCµ…Ȉ.óêFûå|‰q²ùù Òl84ûNPrö`…ƒIP/¡ÈÄ0#ó¯¶òÀOxøm9‡ó68Îÿú¥þöÙ`ýuþåpp2øz¨/ÇŸeZ[>øzðòÞp˜e*UÈ´vdv¶¾Õ’ÞK6 À®k§›*òÈØÒ!{±, §RmJxvZáÑî£äýÂã¾\>’€$(S²2×p@ŠVÿ÷" ð[á=+µž +Qé/OfûvØÿeõ˜{é(û$w:âVyùÝôàj:"€]^ì*ŒÐEY¨ˆµÛq§î h@»ŒåQ|*@ZÊèˆJÍ¿`ÿ)1 +ÀM‰PrþèH—qS(ÐIã /¼¼oŸ?RÁÄl} ¿Ô|¹S„„¾+Š¢XR)%0#a€“©pâ ¬9 »Ôf‘`›Ut™žeRiÓ@Ì Ï`€PI0“èÒ«¤ôd HûD3¡ˆT’³—"`gê ´[ˆn5sj«8cA¯Ó9YZ—ü_Û±•YøÛÁ—/øóú`pr:üöõp°î‰ôvøº1žÉÕ•›Ù×/õæløWCý¯1Èóã/_ææá@ÿ>ÓêZ¢É`€ÙjM ÐvÒñ +À¸ˆús#FéI…8˜š®êhÇ üU`ø€„`8?©?9>ÙÞ) Ô?Ã`ú­¹Q +`&©ÌB$Ð;dVxìÿtzùadµoGÚñ1`·Ø¯Ñå ¤ý?Oúªtz€œd×Þi»ø¿}\:€¦M°IFmÌ%ï‚èô‚¿K0'  À–UÃÿ™«LÛ‚¬¢7ÿ¨ï€DeŸ€b°G\¸¡M¼ vV;ÏÑX@ܦ‹Ñ’J)€èô¶E¬'îäYjd£]õÑ€ü|±B£ €MGÜ`Ö³ŽåM¯Sw€ÖÅ+Ñêh$‹ÂT±yö>ϹÅ¥ôò: €>"ý`A?ÿÈdnX1ˆ¦çæ# ½“{?©¼r:)€½ÎCÀCýᆘBwò±\Lc–ª)üŸ¾¾õ¡ýT{úÅ> ÿסI³ÜiÞmÞÅýï1 p6hüå0ßÜ|•ollHÍç T4õêÛ¿ûŽ4 ´ÿF~:h¾~EޝÙ\&XËNO}2p6X?Ó‡N"r°×·éÈ¿ÚÔÁÏ«Jffkµ: wg‘q‡ó'„½!Â~RzNOÌ  +Ô +*7ëg‘Ûø¿vž•×+0Nø?Œ?¬0uïÝ»w›ÙéZ¶ùzý6NºÉ ýkgós©ðMÅÿßy`À=zû6Ï>þŽ“Ýo@ÎÏçÿqAÑÓ»ƒæ]w(æ›úûฑóï 禧f[ôBFr ¸Éæ.…²$ +¼I  €0Ž”€x +ÿ/ ^ÅHÀ~Ïî_@§s¿2AªKxàöß÷¤¶ËÀ9y¿§Ÿüg+Ô÷ÅÕ÷ÏSišöwMñ×Gö@šÖÖö+ƒ¦¶¥¦õ =`±À¾£ZtŠ `€ Gj!ƒp.€à\~€K¨ð­zœi+Ÿ‚ÒÿS¼³/£ÿ}^([° •R`j¾|xa:.Àˆ|ü* Í’v) :ÔOz]ö­S}Pí Šª,+¿Q0 +`f6ÀD—´},ë”—Ík“ß/Ì^šž—. - 2ÀšK 3£»Â½õ­Ÿè÷òÊ”zÐÏ@i.jz`[h¬ŒMRvÅZ`šiÚQL›6íö__.ÌÏ5ïÞ]i6ïܹÛÌ76¿½û›ÿio÷"Ùšù$ÇI%CÝ;2RÌq‚q¬ 3ÝÂ-úc8nòÂ7‘áN7®„9QDvW2w'/m˜Iù¸- g$hÑ hÐ ð•þ‡i ,ËFø²ÁŒ°nüø÷{Ö»wDdfå©ö¬ˆØñµcÇû±Ö³žµÞw¿ûG¿úðòÿÀ³|µñ/~üÇþ§ÿëŸÿëH°ÿo¾ÉŠA™À³\Côû?øæŸþÉ÷¿ë<>ùñÿòOþâ_³Äà‡_Ь©S«Q³8ža–ôxPZ¯Øˆ•„3¨â‰{%i¼]wÆ®‹ðH€G…ov …w^œîº€ë"(á|ðrìÌXt¬³ÿÀ0™t±œËÞ9HSÛçE·CÚÞš`ù€å‡àoH‘ß.(Ö/ãïâ/†í~… UN Ü’ÖèÈÅ ˜ÓGZ\~¨UA fµTqÇ$ñï—ílÀú€l9€Å—o®új!š¾ @·½ƒäD b¦ì通“’‹hVœÕ3ÈôÄßnr[1U,À×™ s)‰ËTêOp|C€0€a`o,¨åHŠ|æúÿ^ðËŸ|60ý»5à<Î~€£î>þCyõPñtq©f'gy˜-ûÇÿ[˜`W³ÿàYAÑïAÙ¿ûûXñ?ü7?úó_~ï—šì÷¨K!ÿ{^ëÿW¿úÕŸý©îJÿå7ßûâ‹ïÀ ø vúžàó7ßûÑ÷Åw¾óû^`ì‡ù'üË_f@á‰dÍó‹©-£¹W©Ñoóø@)þ9f¤¶§@ë[ìO½š÷F´b#yUƒ ?ϱs eƒf/Ô<€¯@€(Rý2àÛy@2–jÅ5ØjB€}íî‡Uàwg2€Åòì·™d©5»jc(oW³`äf1¦tFûFYwËÀ½—æ#úU'¥»HÔØ5d(õ.ÀRÊXõû`ÿð€,žSë˜; +0›Çý#W³QÙ¿ˆ +{>bo\sc¼4ýí*ý'~Ã<­oÙÿ0šŸa¨ŽèNˆéY-.§ÔR-YƒŠËÚÛš€üá|’ É¢aý{b²çDC€Ù€~ß@~¬ÆF#i“ÙðÕhd`ÿL·åðßÀ+„})͸B' :ƒý}Ì/Å›Ì(@̼À'Åü´û÷<€^Yšýïˆç+L]Â0{h*eþsì?‘Mùÿ(Cr‡ßý}0à»_ö£?ÿã€xžoGðñ?þÕÿø—ÿöûD_üÀ €ýß|S~Ñò3Èçïýžùæû™Kø—ÿâ—ßüÅ ßyŽá)霶˜Î2éäuxs'Oaàž¬ˆª¼àmæQØI{³p2zìXÀ¦bÿNÊþ ²Ï·¥ý°Š±ZÍ*8£+‰ðþ´cÍü»€[»À ^MÓUšÚ>/è°y}ö¥ÔC=C¡ÁíE€„¬ ”¯;‰ÊôBï׺ ‡aB›Ê våk"à©C“I¥ÿžœ&ÈéÀ'€@¿"¶õ€´Q€$±1}nneüÞdk¸N£ÿüVø0Íé€eÿΈÅÁ2 ûiþÝuøËyÇÒ–â–@·É $I@dß „¿ìÄ…3Z=†ôj\ àF{ørP3,¤«'³×°x´°ïÌ@J +5´¹H"M Šˆ¡€Ï`rW>ÌvíŸÆœq¨ àš&]MçÚÿp¬›‡/ûw*«öŸ’ ‡˜¦í6ptx÷«õÍ/ÿ;ÿÏ4tàŸöð ÷._øÎ÷¾ûÅþϾøÞ?æ“ßû½_ýã?ýáMø{íÿ‹*ë¹`nòõìÚ¿² Ù ý´$[ZPHPôôÒ`[R ËbVüY ¤¬ÿ:+dP˜€Kj ù]c¼•Èñh©ŽN`Òì>àÖÝ1çÿR¯s‡Ï€ßv*pþÑÉK¹äp2[:È”f@~XLgÅ¢Êüðæhö%BcIô°%eú%a?÷««Z{^×”ðh9€ÍŠ`˜þÓ àÍjùå"nèŠßÛ¿ÎIîä£À쌙1)?ËØ:¦é$M^Rñ0€ô¼½qn`°ò4„ +–Œ½´¡nÜsqa Ïûù¸º]¨èß•—‡À–­VÆ.$¥Eu§}çdB«öPÌb?ž} tŠRö¿1ü&âÕE#ÓùéLûçïñÿM©;ûG( öpˆ-‡T =Áo1€/~ü§?þñ/ÿm¦þ†|o ÄÀ÷¿ó{ߥ‚‰ƒ¬mÄYQ ö_Ý!ø<€!4J¤ ?¼| ×Òî„hÒsR…=$£[¢ýEïû\ƒÀÝ-jØÑölpdi» áVʺÀÝ]1g‘D€\À S èlyÖÔöyQ‰Uuí¿PK‘L0þùô´Óô|^ba‰N€÷k…úôëfþÛ`~Ie¦ÅÊþ¹=s}Eö€È~†5˜{ïsO35hë•Á­©ICßÝ@h³]ó»@n‘ÖJ%€Ð:mƃ›Œ^¾|0ðâÀ©úX$3ƒ_» @ZÊ€Yíâ—‹Ùp¯FJü0th•PÖ-À˜œàÿ3 +(¡&êªg–ãj9€ +]1~v0ÁW, `oï“ñmý–|¢Íïȇ@K<=´£ O!ñ$²9dr‚ý ’ö^Ð&ᜠ+FAø“ßÿþ~°Ívð§üÍ/ÿŒ`—ðu€#?øþwûóKvÅý(ðd‹Ø +¼-[‰Àˆ³)hP˜•š@Pþ pw¯—Tru ’DÚü­SÛ¿»•˜Üš ”%ÁÎåt@¿Ò5úαs+à-CWÌåØþk‡“/^»dÖÏ­©íó’:ç/K¥Ùòf-@$¶@¯±®ê)Ó´¥c„µÕ€Ý€J´4à6T¿NT¾&D5 ÝgÚÿ¹ àvµšÅü7 à-ÍÞ@Ñ)›@³àýw@«MÁ,ÝÔŠà0ë^ à­µR“ñi1€­ÊQ2ôÂøÀ«¤d›œÌi%COI\µ±AçÕÂIô +Ð@Ì?þÙ€Nzöê@Ï}pÐr€{8ÍÊ¿Ï0ÀdæÕ€%&x+À¾!@¹D´(ùýê€0Ê)øÏBLxÌÙÛ.û5‚éf9ÓŒÓ*mK 9›T²e§º¿qVøv  ¥øÂþÕ/ÿK~À~ðûßm Àc?¼ bd4ò_|a/P ƒ€*¸KzPÎ6öU `’³ó€ÂÍÿyŸÞ.P¥ÒöL¬ŸMN[Áî°þ5iƯäb8¡ÿv×jéK€w«Ÿi3 €V—¿æñþþí"9Ð7òæŠð xCæL@‡ëØkç¹ +â±k‚+ló]¡oˆÖJ%Å®QïLê˽¬ßù5ûíd@tYu5==O £n] 쿹Y½uQs‡sÀÃÀO „°N€&™ iÈá+ ØÛ8O:›Pë-A¿ò™9H6¯Fá£nnn$ à“ý=hfÆfŸñÕÇ1‹Üì_}ãE –gšV­¤¼^Î_FñÿŽl¼`„n/…à‚`,)Q]Š } h Ie‘CÁÒ_þ§<å`µ=¡åá°•3kBP5iÃeJ[˰Ép^ukHÈx1€Ð§ÒÁN`ñ¸öÍéý ýoo.³ÕýgE ¢¸9«õÆ€ééåÉà(=“ºÐ+†±ÿ ꇣ”óÂó\¬ýì5ϳÑT—yvÑÔöy©¢‰Vv_IKNN/?…tª^¢ih/«ù§ÀÝ €Ñ­¿¾Ÿ[¦Bð¨®Bö?¡å$#X`½¶$¦_²ÍLÎÎ]Àõ|gÒÌEA' ùo`«ÅòîiÅÆ(nå®ß¸b²ûeæÅí†ø! Ày@Û À/üÊ×ÜZ+•tóŽFØršâzE·icpzà¸ÖÆEÍ£æi^ýÎÜQŽÞ3€@c%‹åù¼fÊìs£Ò @BÛÅQtbh†×=f·á¹ûð•&Ÿ¿ï€gͅꤑ]°aÜ“àþ°}{ Ÿei…bÙZÍÿàòØ^Ç͸üx~æÜ…Ø¿ÿ\zb¿«$¶’ÿi¨ÛößÄ"Rô #Tì°I!ØÖð2x’ÃñWܳ—˜çªÈ‡ÃvY»véÅ“.Zm,èl8€ön> Ypê@@‚Ø> C“Ÿªåe#ˆ; à!€çþ-Þ\…f›¼¿š*GÃýO4 [CÔÉìƒ U*ÜŽSÆs³óNÒdàt4… €aMmŸ—ÀIªúU:jíZ`Åz²›’¡¤¼t°' +{߸z0À¿_ O(^tlÿý¿›O`ªÅŒd`è¶ö¯æqßH3~=¯i^©’6Õé–ú ˜¿—çì@“ÛûÕyr÷,å7k€g¬Ýµ~$û#A`¾n“7’ô‡~Q¤µR pŽÆÎ.ÁÂ4²ñh€¶ ²ú *¬^÷ @Âyz%Ñ +Kê Õ´¦:ϧ2ZZíU„m´@B€WœFõ”€COïÙÛÇ!І÷bó^'Ì’9‚„µ%P‡¢;G¡*p`6û] Àäøã¦61ÿøÿ¼O~Íìÿd8œ ŽÞbþ£éDûߢîJuùð}³‡êmÙÞâMlêÍâ¾Ý(ÓÖûLƒç²ÿ˜‰óFóш#ž$‰C£a?RYð4Hüˆ†ÿ‣€ê/7í2¹‘h’^¥I5@dù&Àwðƒæóïîz ïRª$„'dcÄΡf±­"ãc×5Tpþ37™2;;j‹x4µ}^jWù?ÿŒö+Xöý) ` ò ˜ÆK‡,V—N¾¿qY ÕÝ_ßÎF=f¦;mzK °ƒúÿfü›NÖò›˜î*÷/|“@€0€d˜ÅîoÃî¿TbÇ=Ðã¦ÌI¼´jXß\ƒb™ ¬ð+[€/zi­TpD@ÖKã±4Ùb…V +WçcçaÉD?Ô†NSô8Ôë" À$` Ã÷÷[£ÌdF8 +°@øûâ`xlþ×ô ¢'ø(Bí]…u­’aÏ2òžr +žØÎá%Ä ÂËé oœÎüƒ ˜›_†…bðC4B’ºÉt2Ÿík®N”ˆû–tš`s…Ì&¾D[¶@Qv8ÀF¼zÀl-î©Æm՟ת_' Àr:=I8O¦Ó97t(…Mu§8@Ü>Šö%¾8 +º zû—Ü&»²k·’€o¾É¿»Ålj®â= À×yO ™ñß«‹“Á¨rA;þѼ­˜þk"'ò¯kç!gö  Þ5µ}^æ§Þ Ö=ÈÓMÀåtz©³Bz4£^€ùÔExn./€_ÿýŸ:ÁïÉö¹ Ä*Ø?J=x“×ñø" à@ @®~v5›àøLrzbP +óÒë0€àè½33£¥ ­g¢EÊÝ$´¾Y-ßµ`‡ô(ÐZ©do<ŸóÍt”q@z˜½šý;Û¶%Û< «Î=m†iœØ»â?‹ù +!W&Ê©; +§‹Û0€´Ä•Í qˆ¯»ÂªÅÆc‡yÒþ€u¡C|”€ât;Exfã™:úC€og±xk³ñÿòÿKo©G.@¢aÔØö¢…§ä†‡3ŠŽuÓVQJ\'9lÙvâðiÊ–À2ŸuL¸Ú›ßOÎβøwcÌ ›N 9ðå F&D ¾t9»Ižâ•ós"Púâʺ; Éü{—¥¬ùçö½¼è¼–ƒÞݬ¦o´~íŸúö«z-t¢;ˆXìkй¤CƒšªÑXíÞ^f€8]cn+‹ï6°«AÞh?u`Î|ü¶‘6¤%ð‰„ü‡"Ç2èíY÷Øè+<½Ž7L¿§ Ñä ¨¼Q!Á×,bz`>ÈD@Xö‡sQ¥y|í?â;ì?^3ÊH@4$ÀÿS$° î6ZÜDûÔÀE ÿÑÀ“Î14Ñ¿?f¨MÁ[0ü,«ás v´¿§º´nFKC°HºÆê²·ŸMO"€µ¡gåPî4ƒ»™À}­KÛT<¯+ ¯HŒª…´£»»ëaçýýWènÇ©ƒ‘÷Àƒˆòyõ©ÁQ^²féH×Ï X·Ô|t ·AÄ€4úL8?#Љ¾4µ}^2T#£Í±±.^ÈaÀ¬¡Ë€-MÃX—Ó½uaÀ_Ü_Ì–ÿûo~ó›ÿÀã7¿‰æÒ!Å|i ÀQA@e{KJ¿sÓý«èXÃ>ÿ§KâG'ÊâÅa¡® |(K3î0Z>Ãé‹0^gâe¾óÌËž°upÝ19òs7.oVÒZ©p&ŒŽ²Äw$ ¥Ý: DÅÕϨ4 ÐàÛ8™Ñ²¼LûÞ­Wàûéj ÊYG ®üÿ˜й›@‚]xBBÿãW¯f0<|!‹b”ùÇÿ³Åþ à»ù¸³})P‚Óþè÷“,äZ#d—”>{ßø*ªÿ—ª½6Œ0¶iù€Hôa¶Ó°]3¸Ù¿ó¨¤6ñmÎ_0P8ΠôBˆ’#ì;îá®~_à èƒS<‡–ŠdíÍ_!8¤ +8€kÄöœ pqgÿEVR Ë>îï¼aX¤Ÿ†€ŒEýbH·×Ó©Ùs—3(½ƒú; àíÍÛ„„üoæ9¨™š‚V„˜Dµÿz +àÂ.–3€Û¾wµeÖÔöy !¡iú +¬~Î''Ÿ:pQæçL%cÓã@.­ù¿±ý«¿ùûßüßÞþþ7*ŒçªùLǤÇ"éÛtX@©¸Béµ}Ó:+ 0Ys¢óo9“b˜K`dÀà$!€žÜ,Lºb­õË®¯¿„8éF¶Å/ù 1êyí$$çdÙ‡«ëõúêôiÀ:†Ð~§’ Ù5“€iU €'Ù½=¨¿Sæ'Gu–/ÓHµÎÏ{l\0ú<€ì¿Š+þÁO†{/öQM5E€ù›6æ•óWñ#T· ó€Ñà—ÎË„JÐ#tM;ãŒ}8 ß –JÄøcV‘h·þ?ò €&4pìÓ¸ÿHR•Ña@UÐ}£&ðâ^t$JÒéIí¡ Lµ°/ªT_ Æ!\pÔÓiÀš äT9: (€ðÏ¢E–Ž‚9@vyÄ4ü–J¡å|Y8*¨Ñû¥ _1`Ji½¬ä™¨ƒT{îî\cã&QÂuˆ½E.´A4 ç<AOûw@s0$˜1Ëëφíh—Écý4¼€ÓÔöy‘(³Z|TU `m¢mî‚@)™ÍÈtQáô{¯Æw{ÿ‹ŸÏ—·w?[|ý·«Õ?ÿÍßÿæ7ÿ7ÿIûÇàKbýHêÍ”òE¦„*ºàBàžú7嵓 –ç3@ñlÀž8øjvœ•Œ.½@ ŒÊž°å=åשÂ97 ´™Ÿÿ¬êG óI¾XPÍHk¤&0€„hL°BoŽ´¹$Ÿ:½ÍºÓ1€¿"QÒLlDˆi&›Ás,Ò¦:HGÒ·F`îtàÕù³W³?œ@Gž0šˆÄú·€ þh1{¸Ó?ªØªÊæ>·€=õ@¶@ÓgŸøÿ €T }T±FZc4uñ¸ÿÀj«þòpÖ~ìׯJ ÿ¥ªØ„IcÊ"8s(ÂoƒAñö` ñÙ4ÀŸ`ÿÍ +‘Źޟʣb¼ãàûHCÆ÷cüæXýÌDŠ@¸õjã-öŒA¯>ðÑž}úÞ$à !Àtõ\½Y,×(e³ÿ[烸®6¢G0 `ÎÜÚh. l¾Èèx/)·A;l]ž¨$ï¸7µ}^LƒœœÌ)ü†è¡.''ÓK‚þZŠÿ„7 o©Ëq®æË_ÿÀ_ý»ùë×ÿÕ øéÄN4úô¨°íûÚí²NÊö#“ÙE- „G¤b?ÅÚ‡Ú ù’0 `ËëLJ¦† ó“Ëe€0îÝÍ=·|[Ölμâ¨ß\¯Ÿ€Õé ì6•8…Trí\‚Ë4­vCû&Žòó¦é þ=€"9}§—2æ1Í(2@^8ªn"ÿp8»™¸¤‰ì—d&àáqŒ[¤ŽÕ!ÿ‚­s38Þ«¢p4}çöbÓf©BÙ$¯Ûøry±„L¨AÁZãl7r ð÷¥Ä- ãż+‡¯ïˆAÝ&õïåE0r ãU‘!,ǘÎ|YP+EdRü?í !©ó/D€)å ÃD¶ ¡¨’ÖÑüµ @ZíÅ~ æÇ!·÷ÅnzÐøír%I@€ì`~F~úöíÊKîú·Îu=Š É™Ò0ô—=¤¤zP9íŸÀ¸ÚV‘zy%YuÓÛg%#j“sú•ª™ fÀûc Í@Úá b4ü|¾þëÛñtù·¿öÛ³3P i¾òBæÆ³€äUr"Û‡ E¹H8!@Œ#3|Oóm1ÊŠ1á÷´ÕVÓÑœÖÖæT u¬Ÿ[gý>Wí ºÈD¤5R“=gŽm@\yc†ÅL®C£²H ˜ã!—W1FRÒ&çºùŠ¨Ø +:æËS +BCf50”ÀÔ +Îÿ'3ˆdŸv‰7Å3@ã¡>o‡¬Z$ D—}Tö?u}(V)ƒ÷¾ëÿéžœ‚æ5´ÿ#S|êíÀÁ¶Ëؘˆý[ŒAì7¶Û¥E€æ$ˆu·XÆøIÖ÷|é(B\1âN¢Éd€Bi8Ö2‘ BÎeóîÜ+Eà e.«Ù @‚~[Ñæ¬W…¬eÿ&KBõ:u™smZ_6 ¡øª C?w·×ža'6Nß Mea5W”M@@/Të%a’ÕRŹñ+“G3\­ßÀGQ€Øæ¶W¿fCÙe‹ +™*õ0m àýý5ÁÿÞ¯.ÿÝ¿¿N–ÿW ¢õ’q€îäÞGÑrS·cýH3~徟yµJý•'ßv @оp<©1]c‚8§ß3¸>!\÷ +m%0Ë[û¤Éº€»› ÜÐ3a€s?/À»{³Ï΢¼Ú” à!dÖ¼íûFDÒþ·ÀìÈ:f*n”›;Ðù>a‘ì£í'ü“kïÕh¾@0ð@gþŽZ… Ø&ƒ­ö–û…`Ô$š¶ˆ¡sõ?,Ö)ýȦÄ7*sÎ×D.Ëÿ ¼)G®-µt²Z›\sy9Oh*Œ˜;¤¾€Ï¥/û§d…ŽsVP{” ç])Ó!þ}ÄÝc€ÿ¸™gÀ|#À‚ÅG¥D€Ê¤BH‡ÕˆeôiÑÖ¬!Jþ% `àR•%èÆ-.ýý=ž¾7¯í‹ùJȨ̈§ J´ÚbJ´Z@=jÔÌ© {Ni¨:C} +2x„ñ·jÉfNuø-@…(3î_Õ6 ô `U‡Çõ àv +ÓrqÿsÐ|õÿþS*J)~$“?yÖøÓË*7 GÓÙ|ÁvEÍo2š6Pª3MákgN¢¶Ó@v™]°t`†\-]¯@ªssS ÚMc7éc 9ÐÏ ÐJk¤&{)Ø$ ±ydd)£€¥ýw@o³ u–“˜·X«›±Ç5'xPû,×ý¥Ëˆù‡ƒkž6h•ÄIšÔqÜ÷hp{œÓ{ñôu@¦ämE)àáKÓ‰¯NŒ†ñÇ9öÓRµ-Ó÷ö þ¿˜_êþ½&XgÿÄÖæ—U‰ºG 1ÆùütdCð϶!Àh šÄx@³íìÝÖ¸‹#ðC¨Ýº£LF£:È0ÿi+³Yœ_.Z "40Ð@‡:þ +ê:Ð…)ÖÞ^ј¦Jue½ŽÐëI;õ `æB›4Óe@ç”®:È\3<Á6àèðb…1t§Ê@¿±‘H€™ÀÖwÏI¸4&…®ÎµÌ«õ9À@Ð3¿÷Ø.iÍ[€ÍýòÍýðóð2P%Mó©jf³qn°„þÛ?ÙFö÷YÚc4ñ4eù:ÊqÌ2Pp1ŸœÌ1xJs=4I +à+ó¶^ÀFÞ5¸»ñ€Nà n0»µR“ÀÄ}#1ÿÀ¾£€H×]ÕÕ¤Ž(¥k](£’«‚T?̰FBdàï“H#6û¯×–ƒ&=:0îpƒÿªŒg£WÇø~sJSZ|Ï6ŸòmÃO‰·lð<¤²V¦³ÿHÞ ÌgÀWÌmãÿް{G?è¥7Au4¡m©öÞá`LbÝͼ;÷¯¨#Ô¹& +•[ôûá+¯*e‚¼os +ŸD­6)•ÂË󹩊ö¶_ƒ¡ÏXÞ&A€´W¨¿FosV£"í)Ô`Þ®Ž\÷€—€÷©Rj O7_Ý|…‡ª„¨¸è8’»ØÅüBW§ð¦W­1`ÎfR\tήƒ¹ƒ¤'8Þ“ÑÌ×ÔË–Íeܶ¾{N´XC *b@ØmÀ5þf2?5ø…N7ø#¨÷ýíh8ùù?œÇøÕ¾ ªC "-°&Ýã¦3í+ XºF­sôÑìâJ '8›Œ@ í?ç \€¥«¦ oˆj+ €]£õjVÓ)Œ”[Ø’½,.ï1ÔáÕhK¤f— ¾•D¶@'ZÉèdf É•pdªå“ùÄLï@9¯- Ð8> ÀhFvKbþww7|ä­} 6éµÅ†8ßñ# Ì?PÓJo;ûï`sÁ¦¦ 2 uº˜Ž'ûওåÂÛ>Ið5‰õû,8…ÇE@TC'þÌþ›á¡_MóuŠš›y€QrùbtlžPÕq¥`gÞäj-IjuÇJtÿñ÷"@“¼‡þŸ5°ÿkÿ®PSÒ¦¦näÕy¬yÙ?¦L|¥ÒW°aÀ¾Àw•%àuvqمؿu øY€“ÉAg÷>‰;Â/«ð‹l;hQÀ‘SßêˆÝ»Ù’6ºäMPpúyNp•\U©€ŒëÙr|ïÓŽdþÙÌ›ö/xŒb¸®Éàødà 6O_92B’f!n¾8;ÔP Ç]%Ô­ëž•²ÙFiéÎŽ8 +@ùœçS’ïQw/pÖÀýýÞ¾žßýõÕ¸8ï8@Ô¨¤SZjÈû²ø¢59Sò6€žù)ï8àE!„Á4€l1°“" )èúz +|É|Èi€`hò€ ¹}˜¬–]Ö4ÒŠ=!¤TÆfhÕk'–—b© oTÊLgÅþ=3m0™ íº¿&U0IæŽx +½OD{hƒ6š½ÎþœÍàÆú±ÿ’®p-àcŸ ðÒQ€WIVVÛJ®á ‘þÇâ½ïøÿ³žlùÿÑtC;Åøe¤È)O:~3T³™þ?TXÛ\ðß +ã¦fÀߎ¼Ä²m΄2€"š~3£áÚ53àöeïeé1ø<Ú‹ÍS‹:ðÔ€ö ²¨DšÑo jËËÏÂ$sbâzHsPè*¨íÇ!~W zà…;¤D(Ê|‚M×ÅS¯Ø"ÿY¡Â$Ó +`%“Óiëºg÷š¹PQh´éåi(´!å[Ï/c··öý5í´òF‹ ßùZ4[ýúS ÁŒféQÕÒÎøµ„\šg>“ÖDvÀF†Æ3.}SB[e"€  ýËœŠç_•ùË@MÏK˜v!Àr2º„Ëä$¦Ø¿×2‰Ø YŠ«Ahðîö–C4@ÜA‹*í¡«õr²H[˜À²‚&6Rû½¸MDßâºÿ×K/Vè $˜DÕR®I% k @?§I¤é"…¢YöÊ©@#Oò9<žÿÿË + ù—ûÏ €óqÆ^ð‡ Bdp/FŒR‰ÏÆé~7©ÀøçNÒ’ìÄÿÓ˳˘: Í H}jÞ8@@`Ap&©âÊyút gý0`èG ‚Ùqqϯ9 ½ï/4Ðàý¬>®¯æ}<€¡ðIû` ÿkÛ^;píºYÓ·Y3F¤ŽòPüé²Ñ xØ]8ϬÑùò²í±J0Ÿ¾âïéë ÁÝ>: ý7 êÔºîYI`tIò7 ãŠ?·—ó„BjÑ1Êþ3¢Øû¿þédù7ô¿ü5·?ú£?Òöt°—ñåOâ½bðrm‹ŠÚdp` –˜ú‘ ]öÀ´@B€j^ŠD£É­zÈi÷¾ lÒÏÜ WÖï€,ã ¦C¼µVjÒàÀþ?K+îÄ98o!Àµ ÿ-yBH™ZBÕrGᣩ1|™þ_Ï×n€è¹o£î¼¼ØbúÄÎãÃW£Àÿ}ì\ÕÎÿ;îG½ G78®<2 øêeF•:·pmi•} 6GÚéýÿµv†Ì/Fߨ?üÿL£G+›`è¼Ó?µ:QùK–TìkJ/µu“7MÀÛbÚ|8@QSþ›L¾l½l¿,ÎWõE“mhQÓÞî^<×î•0Q¨{‡àVéÀÎV¥º àRˆ# n¶àj±<½<ÿ49€VÕmRÇþõ25Iðh0`42€.ú×ø•ÖuÏŠþ?Ðçÿ«¢"åu@†²{ÿÐ +àJW×ïïï—§óë»_üb:¿þ‡ÿGaó‘T™Ô(U×;¢óŠì"@L¿Û¦^À‰“ô '^Ã&ÓA’€™HcßÀ2t‹¬Aà0³€Øº½²E2;xðâæÖ¡Í€0·Ñöj¤N¾,P€X9@àdv”Ñ®é ÀV Í›@šÎ†… =œ<ް(Y ­ƒhÕt E] d¸ð¿œè;^‡³/‡zM>àÑ(ÅR!\'@ì4pÜrÀ@¨ä†<éþ´II^ëw@€%`aÇþõüX|±ü§¥·ÆmÆåWI€(ÊÕ5(*T  íÒl4 œïë±ê0H[¶Ÿ?‰ðr‘÷°%_We¶¢€IÇh$WÝÌÙvl{“­`çìµ$ Ê´Þ- У²ü €}~«‘Öº¬ š +ï0¨J`°ÀÖ¤ùLÝ2\KjÀ'¬_0+ëëŸÎ&ªÖÇ…Z²€¹ÂŸþïªcTÁù?eÿ]pŽ¥P‘06®@|{ÿëŸ9‚¢ÕЋèg!@n»Âû:A¸Nšª*ƒ•È@ É@n4ÿ ãÈH@1€ @•iNô§îÀääÒPÛ9×|ÌŠ€ëÕ»ä¬_'ïâ¬ÑðÖJMöììÛ%J;Š,)±‹ÄMÆÃ—5M+Á4ºÑ!@” @€ÌS {sóÖM²¯ À)³jº ¢5s¨2ŠšþGlDv8~|©¸ŠçìçãÃÁýÃ=G7 €ãAN 0>7$€£„8G•Š €…n•} 1ýGþ¾¼€Ì¯wãÿYh¿Rû6QÓÕñz±+Ù ¼¦R:þŒïaåm¶¯ž€Qs‹|& ÚAcâ9Œ’we¡ñ´üÈc€´l¢Ø~L¾½Ù~{9}2h§…Äþ ´d +Ö BµPËÙ€-¸4ÓúçŽd& UÕÌíûˆÓ?Û1°’, 亇Jëºgåh4<Úgˤ25•ß¿N4ö.€É€OËù%U €•`ù·‹S-ï_;A¿I¹ÿfÿ¼Ø@7;pK¼’|“Á ewuš ÌŒöwÀÑdbØ‚Xb$@[.gÅÞ¬è3+°•°.¼K¤PýÐtÞ~ˆ¬n»$ xWgÖjŠ=B•Êþ_lFË6Y½m wf0l@r@“ñûLø÷@½ØbÚÃÊŽ±ˆsµÀsS÷=ÑÀOß» èïä0eþa™ 8œ}.à G q›ÉÿŽÇ`@;k:ýAHs ¾¹Äþ5þKÃÿmþïdíS€þ¿öïÄ6«­/<šõ?øå‹Uïà•¤øm¯7’HP{œ•’ÇÄ¿Uœ–(ìp€ÊŒŽZ"Ð<öFKå–7P^R&mÐîÀ_ÅÈ›>E¹p«P/õœIS´‰@À:5@ù)µ¡H‹€X¼ãGˆbü…ÙÒ ÈIŒ¦{]i]÷¬äç¦Å„"¸4ŠÁ²°ï€ËË颀b‡Àô–·«û_Ÿ…rDÊü›ý«­[Ò>1žÛ–XzÃב‰hùX¸X;ºbï'“ác äbeùèzzâj@²1w°å1€|å>a «wKi}ô“wêÚZ©‰Ð@õ,L#6†i¡¤(ì1Oÿoe£M¸Í ›ŠžŽ¾.¯Vo¯¦®FSuÍŠe¶2ýýž¿ƒ’Þ1€!1ÀÁl~x8ùjöj8<Ÿ¼üîÿà ~Îû÷P<ôÿþDZç ëÌ’:sÜß¶Ã@çôÒcÑ\5ÖÞÿÆ—¸ÿ× ÀCÿíÇþ÷,ߎظ>ÕÝ 7[þŸ—ó)  óÿ©p,ÞÖýhþt‚×€½]½=3Â×úñ³5{Ä`´·IÔm ½è¤z¯/2/J0¯†Èj¤ËŒN¤J×XÀÑ´[iX)û·s=k®]J›tÞÀSPÑ{ÕrXe}øåYŠØ‡t>÷ ð]¤´¡c#X¤ù5*jÅj]÷¬8æòò0 @þͧ¼À„(ÆUkRìÛõ»wïÖkÔêà·t­îþîÊF‰4ûWù¹)ݳ/:8ècdj¹™ÿ$$_íËz\Ìp÷£ÑÌœétqq2l3J´ œ®Û’`o¦¯ rãÅÿÇڹטb²„ê£ð€ ­•šT°ZêWH{£úÓ¦ún*–FÈz™ <-Áʧ¢^­¨ë†dáÄè2#ÿa‘êeu­é‚ßë^?ÛßÍ4Ÿ°EF¿øï<#Ø c:í/ à_|6êÀg3£Ä/Ç^­÷¥€ÿF|iµÝ•2¦-ÿ??[šý7°kÿÅ’ýsÏÞþE×Öjz:¡¤¨X =À~|ÉëõÙë³ST°5ƃ—˜¦_µ *oÄBz€ö\¯}kG{ø-À›´o!@ï‘T€˜H?k~PrnëÕb’Eãü ßF¢yw÷k€rœÎ/Á-© B)Îæ‹‹éh`ºMJŸ7ë7pömmšn$A2ªY$HSH^Ì~0š.1¬cV `}Ièªx€û±0¯¨E@ÎK‚F eQ—:ëGòÓˆí÷Wú䓟ˆÁ¾Jàìx>š†ÎtüˆJz¢äCp{9_9  gW'ÎmÜa€»ª º×u5+ @ŸÕôÜ7%UN +æ'Ó®Zƒ]Ô´Šaoõö_«.//ÎÏgü€\p¿º:ÇþOZìÖO$‚ûüNÃôÐÙVëQ ^g‡{Ž`ë?¼&8ýŸo&.ìËïÇö‹Ðž€ÏO A:öáð€ý!±-¢R·’?Œ© m”©?an¶í?Ô;ÿ×Ù?¿ª&Cê"tMÊ1Ò%>œ”õî]1€ €6r<À„ GQ½Æ!·ŽèéáÑñyßîÁîRø—N"Ñþ¤Ï?–8èÝ)4®VH¡ƒÏkßà@ëÚåHã,¦XÜÞ{ÖcJ¾þu'ª}S¡zò}á@ÞS“€^Î…?Ù;øDûÇ"ŒÂÎ>÷5àD É`x$´Ù óÑàÄÓ¼í²óåÍÝê´…|´˜œúE D°]@ Ð„Û Ëi´Îá§<û&5èeob옜¶ß ³â³°Àýy¤ÐŽÐx–ƒÝRbhcøÃÄûë¶TÚ'â¨O?îã‰{áNî<è³ìÞì_®bÿWokG’8<ž}þùlvây”VªáùÀ&´2ÀtiÀ§ÀÖPôÿø}é?T2³cÿ•üãþ þO[ñîÒÕæ‰ ‚N>uNpÞ*õÕi¡äÙÙkÞS/]Á;j +±Œ'S”átÖ°¦VÀ|nÂbyöÕõù6P.Ïw(€.ý Ðq€±Mu0x9˜¥r½©—0°öt°->…å`û4 .a‰R-¡- 8ØÏ¤‰ŸÃÍ_ú·v¶yAóè÷ó(á}ëºg3ò.¸]ÍfY‹^¶·¼ê§Ù²HuÐÔaÀ»»À5 Îpêèy·"ÒŽÛ¤³û^§¬D'–±@O/fŸŸ¹FFûbHàD “œašQæLuaH`5¿^Sü MÚ1Šõ&W ˜Æ(`åZ©ñÔöœÊê? ËÕÏ–“~Øôh|lì.aß¶ÿVåx:ÇKõè•Õ!ÞãD°9g"þº&´¤¹ø=¯òŠà*¦‚ @1ÀÄ .?»Œ ÅoÆŸ@ÄùløÒ‰Æ³ñï„H ØÉ¬EBêr­üUò]Ùöÿ—ÈþûŠ÷ç[ö_ @qWÛgêç^+ÔÕ>mªÔÄÔU È ¸–ØÉˆ='Ÿš%¼Só¶Þ™ê_Ö-ïÌÁÚc×ÚC¬PY<@€ê“ +›h Œ>|9Š*ÄíoI1ôMCÃâC×^z"®³`vzí52óDù]ø ߺ*°ZPWN¨M1À€àÐ3%ÏÙ´®{VbþœÚb>2€ÕêòÜJñ¹…ZÐK@—X¹¶Á,ã­ŠU;QM©Ú«Ô%î¿€³ÿ±vBü. ˆÁ[©dý¸4~¾81(‘Ú!·2 +CñŒ¹üÈÙW˜¾¥ +D‚ÂTOBΨ£ÇÈcÚ#ñîIØŸ^ݬ—s ±’óD0¿ôÎ.ÿG45œ.×9÷x^Ò*ÒÅ4|­áb_Fî’_ùõÀÉëtöam•‹ È£ "ˆ@ çoFÂ.>Çûó± 6Ðð…ŸE€ +`¶ +¿%¶FùxÿüòŒþXèýNð©á¿Çþÿ]üµÂ öbîìÝŸÐ$Xžoi£^ðïå!œ»+ãd.˜ÁÀ–ðÆ÷;Ÿ•8uä´C€P,` €[èî½$ }8ÈxÿêÖÙdÞšÌOF‹hºO£¨x¸!çÓ0üi ø0 è·óx›6K§D¥"~PÐá€W[5º·+­ëž[ц,0r:BFb1É,7É­Ú®¥+uL-°ô<ÌÞè¥÷ ‰VQ‡Ú6ÉYê(À-æîé€áÈ(oIžUžÓs˱u-÷–&]®oánÓ¥PŒ_L†·§ +>mؤì_XÇø9вŸLNuž€CèÞ»@¿ñyîÚÍ–´ ±êëœãƒ‘‚÷Ë«« ¯£O‰Õ¨Zׯõg~%”hÞ*œîÙ¹»Ã@Nᛣã«8ÜÛŒµ…Î7úJØhÎÌ…?"MßaÀ$/1K°uÑü¿¼úïg0€­ñÿYâ+%o•¦Dh¦ŸŸBì5u¿{,êÖ–|ª%*€!ýÉŸLGЕ R£ ç"‡ßM<‘¸¶¨j5öß y€Ëís¾e±¥\Ñ’. \*ù=çùöD`‹h>k]g1þÇ‹ð¦G0€å9Zoïcå; €¾oÙ¡Îþ8 +Á뺼ƒûñÛ •rn<‰ÙbÛ¨ë§Òsw‚ÂM N§—xÿÌh&v®Z͇µOJ;î–¨>ýu¨—àÕ) Žš¥FœY‘w¨k!M¾mœ# õ£óƒ@×%ȵœNfD-”¦àËŠÐÒïsMv„ž¸y·Í¨ñõÕ©ý¢P›§À?U€Wð…áññŒÈ_Aûù*?œý$02ÔŒ½(oˆ4Ò¾Q‘!Âiú±1òm ÀÑÿ³Ënþ_²çû‡ õ à‘ÿÇuDüŽm.G—²¡áÿn>NJ@€ýCª¾G3‡W‡­ÖÿyÛ”×QÝédt4?-WµlSã9979vhP—#f ñµ +U!4a!J‡ýg Ðûr5àN»Ð@Ñ(.d§nªCi…]O èS HÞú5R¯'ãÖuÏŠú‡LL5z*ÀÏЃv)è›C—±¦Q7=8%¢Y+v´ã>!Ùד/Z¥d±~d|˜ób• ZÇzAÛG„Š +ÿWX¬o„—€N¡~^Wß3€»Û÷éŠ6âÔêªñëI½KÀT./ïe8£•–óO€µ¨ÊdÇ-Z^åÄTŒZHz‹_e"°ÚÆw•ëœø%յߡûšv×ïœ,Ãp|\ÿËÿ¬&ȯM@Æ?‘F6b›e±ÀÆò}å2û\9<4ql6±€â?º—ÿwØOúï«3¶[öo8Ÿ@³&›Ògé]TX‹?$Ð#ÙB/‰ýO°ûOó¢ÝõK Âp4ó8âÏjy–3ÃòîúúÊ®k4ðY¹¡‡E€Ùà1ØBÏI2C´Cê»\½]¯î¨þEX ß”Âpnoßã:××hÚ¥‰ÀtQ@…rد1Õ‹‡¡¦'Öúü ²gÿyUJÅ axy7þЬè0*&€8MÂI$ˆ†Ÿð®“ÖwÏI6‚W÷ŠÀ‹ccÞŒàŒáfN^‚GSlLha¿âjÓ5´¬mÛŽû„D«ª"»B_÷ˆÓÂð‰õ} µ"j /+’²†×œ‘¼YñzáàDºXª±i_¿xÏDnº:÷‡ +\{švNóCˆ’‚w²È™ž'›¥ 5²NF™½®ªšNU©]Orý%Ëì0¥`ZŸ7Ñd(È| g9„–£lÚ¿ß(ÿåpÒ€¡Áx<ªøþsO÷¡õbÝH͘}Ž­×8ŠoÀ&„#ŽàL²Áq $¹mÑ[…·¶¶ÏYÆþœú'ðš&öOør|Èÿëïý> €[ø€_>u(öĶ}tqØÚ€*eõÁz–>àeÿOs›ðÙ{…2€1qPÌRÑ\`>Jg(íÛûJúÝ8øÒy@QIÀQ€R) `xúCþåà°™7eçâÍ™(õ +Ó¡‰6sÊ·ôÜóÒê>ŸßœŸœ$»Õq*±À`½ö4nh!ÕÊ£Òöw:°÷‘ôJå Êí‹vÿ ×ÔÝeÍoF¥°„™è£wíŒê ²¤·ƒL.¹ël~ðõËëÕ½‰×b5â€%H¾ 6YƒþéÔÁ¥\Äž€ÕêR°u")G’• ²dÖÍŒ"ÀQƒ9\Ɇ¬0¦Êdd¯†ÇE˧èh›˜+|Ÿ÷•<ðÃñÅ…ÃBãñO/JCÏ,,Ps=ciíë>cÖœfÇâ}  Ô-uî6š¾Žð:þÿ|:=`ÿØ·Þ[^…xÀÿ‹°ñ[ »ù%­ÜÙùcIßbÿN\h¦i­˜ÎD.ÏUÝKí°#±EÛmŽ>´±€@ hÌ–¨†üÐ&°SSÝz1P •È”÷)@èL‘g§¼MV+!ÀšÎćiÿÛ‹Ã?í? $£×þ;±ó¾E¼ 8u¿\b"2€,eX –YìÄP¹I¶ÆsxïåÂN@_­]›vÜ'¤éRUe[ÔÑNŽQ|5·™Ÿ ¡±÷òfBÚZ/ó—0€»[ó®N3Â(ÒÜ“o ŠUc§Ó_æÖgŒ1ú§%TaZà)÷Ñf`U!¼öÏ#,P£2´12!‚Pá#šOÙE¹æï(È|X  saÞèÛÁ¾ `Œù‹/éàñµ«ˆ+‡Ã‹¥Æÿî4¼.HÉ>Ÿñë4˜º‹VÈ"p4¨T qFWòê¨îæÝYÿIÿÉr€ãÿDÿ™ýW^ýCñ»T…_ó•´ˆž²Ü-É JˆŽÇ-á‡xý:+g<͹¤¡MÓ¾hceÿ ÚœÀ쟆RÊÚŸ¸w € ¬3ɸ2RHÿŽFžZ†o2óÿÉ·÷5õ6gÀÊ'µ š8ç5/¨g(°gÔÀ(6Õ KEj¤Ì }šžPô÷Y Àà[Ã÷8yjÇý D¡R“þn¢º»’ªÃè-Ȧ†úvÈ,ÙÀ—àDþ®¥ù×®êô««Õ>¥ +lîµt +lð® -xgΖŠFG¢NY© à˜O3-ØE ö•LbÌÆ@ +â<±-°ukW@Ò%ü'áÉ`ÛÒ €}i3л°>ʤ] @ ˆ¸‚ SØÙ»Æˆ˜…“²¨ÆZÀ}À—_Q ¡ÑƒÄë$ À}ssãÚ?Jþ_c*Äÿáÿqþ-®ïŒÈ–ó™ZÅþ©ml1€û +>)&¬H/þ¾¾¶$È]â[;Õ¦à¹[—°G† ò6½LÑ)Œd†šyY-¼ö¥Äß…i |&ŒÌQ€0€¦}ŽË*‚ ö4¬®–§Û£€[ I—Šƒ(ûßW»k× øQ: ÔØoš7Àw0€DtØ:í0þ,öO€Ç£ñ…q:‡¯yMl@ŒßOÿEK7VC±>wI°I€0v‰#°(..D$0ÙÐA×NEÑÌüëüçÔÿcþGLzÃÊ„Ú?6¯æÔ÷®Ì[¿Î™<=f.W+/’Vê ÁkÝfZ“L.ò¯·Ç|7–Øù²~æíƒâÝ|€]h²ŒŠ5QýÔ@¶4W03Û0€ À8§£FÝørûÓÕBWÚ<ºÖQ ½ÞÖ´ŒF +0pÕd™ Àl’Ùe Ú˜¶ÓÛ÷è÷ +hË…%$@êÏŠP¨¸Y4è€Ara€rj7 +˜TU$p°‘vàoªÐÕà…|•[\¼g¶¨Ä²W_Ìf'|gçÛ ¼E](æÝ=æ|-½dúVð·1öðâAilA ý¿[×Ä-ÛžVGu.s«€ ¤•¶d4ƒx¹òÎ¥ô¨ÆFl1€X`K™$’ï2€åÀu@í«ðærÆ#ìÿx°ÿ²À†ˆþÍáØS©uÔÖ3Þ§Í’èÖL`|R§ +o3€Ã‘g4yÀÄÕ/ý-÷ÊüÏ_cýYÿ¯âÿ$ë¹Å«« V¯™uŠýóeÒ@pB¶6ï¯BÙºFEûú$ ?Oáó_ÈÙYΪ^,^7Ózè WI¬’ÔÁ+ +p,V»çíªY–QË¢xþ»‰6Jû¦ƒ5³QÀÊ!´Hý%Z’5£:ð“qðÉ™È/îu6™yëTäV}[ÎQ¨›ÕòUØ@'Íös‹„ô[$‰‰×,ù-ÀW7—] ë _—õûÔn´ l §s`ŒÆhçö!hå­ç?š…Ęmgô6žÏ›œ”öö,ÞnAì"¶‘X.E§•i°é `mðË%(°¸¾¹÷j­‰ÖDd"*ůRY[]àòýh à)ž ÓéP“”* £.Ðþ÷)cÛW°Zx¹¸4åiÇÂDÔÍ–ÈbЉ¸p4ÀK«lÀg’}€Ê-Êksúûèðç[!€íš]d†þX¿ €\ïÍé€ÓôV‘Oþ)ÿŸø?οm4µßfó™*iÿNÚcÓ13|j‹wþ_ƒ‰Æ‰ +m±‹šçy"õ vâÊ‚Þ—Ë HZÚ²é£Ö_›±Ë·í6W ÓÅUüͬo|Õåy¹@ÃXü!Ê8r|ДêÖôO§³VWV¹BjfÎ] öÅCØ–˜ÒÐ…ÊJÚ䑸íÿcÀ?T ‰ñóI×r¶&Ï ¬U$/;·*V^"¤¿ÀÿöµJøþrœ­£‘@Z.åóEÎG_]ÌFý5 |JÒß޲™ëµ˜éÞšT+=ÅŠ°hËд³‹Zp}×1€+¸Ôº1€0­ÜÚ‘jÔ^•tÀ¦J[ªëØtª„æC}y¢µµ«|FoHìnö©]‹q ' ;ìûfu%ª2 +/¨”«}PøYæ«è‘M‚ ðaÞ? ήÏçÓ“M·¤ÙKT ' hÿÛ `4·‘ẨÍÅyÇX«yÃL߀ʤIh?òQ2”o‹$ 1nM! £(žŸßçÙáÕÏ,¤­¹•0ÞàvsvN»³ÑïËÌTüicËm£íEy›éQ¡øÿ¸}~@íš cŠ]ÕàUF»5w'Q´"|±õ¤ÔßõöŸL×¹—û5­´‰‘M€#wöß8À%öcï-€êñÊOÒ²m¤¤&¨SS,ЉûN¦ø È8 ~s1™v¿BWu¡A(K,X//&ã¬þò ˆPžVhWÌ7Pò“HÛãY©ÓW(M×bÍøÀeFÕ–¡ +®ÂI¡»–Ž´C?+ûßkPÒ†¤iq3_¾¢Ý¥²¾^¶ÓjÇPwÂhÑÁÈ”d(À—oØÞ粟¨ÀjRúäjU£ª¥¸®-«Ñu*ÒJ[²?º@Óv@3—+…„`l8@l•Úw2Øb'šAÇR_‡P»bØ0pl`Øå<õh“xå”0 zê-mÓ©DöìóÙˆû¯ÏRÛr›ŒÌ xÀb½åw÷Ætÿ]ü[7šOHÿÁüŸ;%þ*ÿ篨g·¢'­S÷ @$¶ w,ûUºÉx `Šd¶‘Mt¨±€n6@q€ù¢ùyÛÈVâ ŸlÀ˜ˆË–•ä…ggøÿ%,ØA1îþYd5Í\àÛÛŸk)hœ®æº¬F¸$H˜lB€9ŬҥÀUJÓAö¤E¦a3?&Å/i{<+6Ž7™ÌÍâÓÉe ìßÁuŭŃø k@hK@°Ðnº[;ôŽ B»Ò!VÜHf¥:œ¦+E€¯¹‡ø†Omy—¾7:¦PjΆw-Þ …_.¯ × °õ)þº€Ø?BŸ ©Ÿí»äQ @Í{¼T~Ù-#ÒÌßK‚½v@Ê­~`–fŠm‘Úà›@<¢Ë–[†.)ØbéX¬ßYzàá†l˜€Œf?¡Û›ù7õöbۥŖ/£ lQã9€‡£Û€`ü?8/o1D½á•—ÿŸzs@eLø÷Ù0€ x™¨ý©ò©PWåþA÷ô37îG3úÆMu\ ‰P`9êóÚMí¤q€Ñc°xﻡYë›´ª Òä˜ûlõó›Ë@¤þqA)3 ~RDÛü‚—wF¢2Ôa ,¡  ÝgUÚõòúêb¬9¶ßðI±¿cmxRúפíñ¬¤Ä°†¸ ˜hŠÛ‹§Á…Üv0›_ÝߦӨÁæÖ޽# ³oV¡àxtìEÙ±#`Ï‹Vó5Íòy?ó_Éœ’¾ûrõÆAŸdeþÕ-ûGr1hÀ캀ðèàŸÐ}Mšù›,€~Ä]›‘Í4îC”Ú=ß®NŽžf]ðˆd\o<©Ëùâ¯+°3 +€ã72H`‹èø[ šœ€I@?o ±Í>4 +°ußšÿoüM÷ •¨3;jÓùo¼xJ0È—qüÕu³íy‡ÄÉûÇñMzYÃðá—MËv¤¨¤C€Ú©Ÿçø¥Ò-p +¶ìpGûŸo|ž9Ð D]¾½™Ÿ>ÿq::’#Î:,ƒŠçé?0ç­™:ôW«š„˜Â¥Ä)$Ê5Q‰^Ò+MŸ{Íi:N:4½Ø¤íñ¬øÏˆ `}óÆÓéj`S÷R²œžLÂz ß‰ª-´õëoíØÛòÀþwŽ«>fÉÕ0*$²íL32€—-¢+ðF:ÿ傸JÐåÀ;ðÙøÛ³žÝêiZf{Ãhüèd~ݯüÐìßåJ`'¨IÌ›ò|ÑÃýÃ}]»¶y›À `; Â¥¦éÕžîŽÌŒˆ1ü2nŸŒx ºær¦ÚËGÂhvÚÊTæÕƒïä¶î/.Ïr€ñÿÔôÏžñÿ@„-p.ÒͰ5`kSý²Ï˜xÏxYð©çoJæ·¾¨×"E@b€;›ìŸÃÄȶÇzûæ=`6‰½»AêŸe ¥]2š\­n.gä¿þ€-a%™‰‚ú±Š×åVÓá6°ˆiöˤ@ÞðGß +tÛ@ 9X´´]ž“´.,?Èb5Ëb@eï+hïlß>" ÐŒßû ÏDé0g_1"‚'À àH°¸þ°øV‹×î”dûN·;êgJ³ÀlÞ1àH`ÿ˜`߯4äÊr@¯å÷ä<€\<þ!ˆž–$ЀZœVŒlÀàI°ƒIÿéÿ‰ÿ wbÞâá‡ì¿|?_· @ÐÃGh“¨{ìŸ'MœÉÿÕËHS­z×ÞD +èµìÂ*KöhNoœ‚È[öi­‰½»é¿I +™r7Nw€ÿ¹¾šÂ÷–€ÒðÕûž$è¥LÉRÜ:- gχY/J”¿—P²&m—çÄr)|:}Îrï,¤àf‹`Z2€SB Zxskß:Ô^u²A€Ç9€Æ”ে`ëÅd(€ý£‹_6PgýQ‚Þª"èb€0¯tE-¾• ó'O1´§…Zk1€ý0€C•[™µQÿ!°›(7N½vr0¼~õpËT jVËDo±u7 +¶]Ϫ±ÇuŠÙå¤rv÷¼30½Äÿçä_3z@Ô ²9+×Çÿ@„¯x&à ÏîÖ"Õ¥Ì_óäY×Z:P«ax : ¾ô·yÌ:Èy•ãÔÑ:` ·×fé¬$öî¦ÿÆçb´YÀۛŇ€^gÃ(ƒš÷!À¯,\JŒù¿åmÏšþ=-)‹@qþcÀs1dÃèºgskGÿ°lìÿ…—]CŠTPý >Ь:ðfùaЪІß|„œ?ÁZa›<Çfó3œÛS àÀ"&0ü-@¬?uå€Ì<š Èý3§°ðãÏP[® ðÙG1€æõÛÝ£¨5¦\kÁ×þ±h•¶,®·ÿŠþ¹WÜ?=Í€1ÁlJ·uî?/ù O¨[ @óöÕp}EãxW¢c‘.ØèÀÛŽyÊ?Ô†§d èÀö‰±w{wÓã³  9€ÕÀe|Ìj Ê=à7)WŠkùÆÏÛqÏ B6ÒvyN,ÒàÓ½PV<Í 0 ½è¡”ñ«^êb<Ëèæ`†]«7W«Årñæé@«F1€ŸayVeûP •µIË8¡ç8Ûf*HŸj×~€÷am@C€'r1gÓ¡;9€ÃݯwfrÓöÑÔºûùCÐlÏࣰÉü¿9F#ý/ˆQØàÁ9€Ù«€°! dÿšõŽÐ>Ô¶˜@TO´ÿåU>Ux)Ú»Qxá]iÐÛÿ&h;dGáqZ_Ðî• ì9Àyfk߉½»é¿ñY00ïÖÀsO2÷{‚XŸ.EbxÛÀó@(Ý&à9(þÿ?øxÜßÕ(¾Ù›ÛC +ð6ö¿3Ð1€¨ýo; +0\áÿÍ~,P>˜h…mòðÒå•|Èö[;Ø¿Å>bÀÚªzð;jggÿcp¡~ÙôD +Pîó­9€Þþ_ì½øÿÍŸ-ÂÅŽ¾#IEND®B`‚#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture2D(texture0, fragTexCoord)*colDiffuse*fragColor; + + // Convert texel color to grayscale using NTSC conversion weights + float gray = dot(texelColor.rgb, vec3(0.299, 0.587, 0.114)); + + // Calculate final fragment color + gl_FragColor = vec4(gray, gray, gray, texelColor.a); +} \ No newline at end of file diff --git a/examples/web/shaders/shaders_model_shader.html b/examples/web/shaders/shaders_model_shader.html new file mode 100644 index 0000000..f8e9d1a --- /dev/null +++ b/examples/web/shaders/shaders_model_shader.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shaders/shaders_model_shader.js b/examples/web/shaders/shaders_model_shader.js new file mode 100644 index 0000000..66e45b6 --- /dev/null +++ b/examples/web/shaders/shaders_model_shader.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="shaders/shaders_model_shader.data";var REMOTE_PACKAGE_BASE="shaders_model_shader.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","models",true,true);Module["FS_createPath"]("/resources","shaders",true,true);Module["FS_createPath"]("/resources/shaders","glsl100",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5279648,DYNAMICTOP_PTR=36736;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shaders_model_shader.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"uc":___lock,"H":___setErrNo,"hb":___syscall140,"Ya":___syscall145,"G":___syscall146,"s":___syscall221,"ta":___syscall5,"F":___syscall54,"_":___syscall6,"E":___unlock,"D":_eglGetProcAddress,"Z":_emscripten_exit_pointerlock,"zd":_emscripten_get_gamepad_status,"od":_emscripten_get_heap_size,"dd":_emscripten_get_num_gamepads,"Y":_emscripten_get_pointerlock_status,"Kc":_emscripten_glActiveTexture,"Ac":_emscripten_glAttachShader,"tc":_emscripten_glBeginQueryEXT,"mc":_emscripten_glBindAttribLocation,"jc":_emscripten_glBindBuffer,"dc":_emscripten_glBindFramebuffer,"Yb":_emscripten_glBindRenderbuffer,"Ub":_emscripten_glBindTexture,"Mb":_emscripten_glBindVertexArrayOES,"Bb":_emscripten_glBlendColor,"ub":_emscripten_glBlendEquation,"sb":_emscripten_glBlendEquationSeparate,"rb":_emscripten_glBlendFunc,"qb":_emscripten_glBlendFuncSeparate,"pb":_emscripten_glBufferData,"ob":_emscripten_glBufferSubData,"nb":_emscripten_glCheckFramebufferStatus,"mb":_emscripten_glClear,"lb":_emscripten_glClearColor,"kb":_emscripten_glClearDepthf,"jb":_emscripten_glClearStencil,"ib":_emscripten_glColorMask,"gb":_emscripten_glCompileShader,"fb":_emscripten_glCompressedTexImage2D,"eb":_emscripten_glCompressedTexSubImage2D,"db":_emscripten_glCopyTexImage2D,"cb":_emscripten_glCopyTexSubImage2D,"bb":_emscripten_glCreateProgram,"ab":_emscripten_glCreateShader,"$a":_emscripten_glCullFace,"_a":_emscripten_glDeleteBuffers,"Za":_emscripten_glDeleteFramebuffers,"Xa":_emscripten_glDeleteProgram,"Wa":_emscripten_glDeleteQueriesEXT,"Va":_emscripten_glDeleteRenderbuffers,"Ua":_emscripten_glDeleteShader,"Ta":_emscripten_glDeleteTextures,"Sa":_emscripten_glDeleteVertexArraysOES,"Ra":_emscripten_glDepthFunc,"Qa":_emscripten_glDepthMask,"Pa":_emscripten_glDepthRangef,"Oa":_emscripten_glDetachShader,"Na":_emscripten_glDisable,"Ma":_emscripten_glDisableVertexAttribArray,"La":_emscripten_glDrawArrays,"Ka":_emscripten_glDrawArraysInstancedANGLE,"Ja":_emscripten_glDrawBuffersWEBGL,"Ia":_emscripten_glDrawElements,"Ha":_emscripten_glDrawElementsInstancedANGLE,"Ga":_emscripten_glEnable,"Fa":_emscripten_glEnableVertexAttribArray,"Ea":_emscripten_glEndQueryEXT,"Da":_emscripten_glFinish,"Ca":_emscripten_glFlush,"Ba":_emscripten_glFramebufferRenderbuffer,"Aa":_emscripten_glFramebufferTexture2D,"za":_emscripten_glFrontFace,"ya":_emscripten_glGenBuffers,"xa":_emscripten_glGenFramebuffers,"wa":_emscripten_glGenQueriesEXT,"va":_emscripten_glGenRenderbuffers,"ua":_emscripten_glGenTextures,"sa":_emscripten_glGenVertexArraysOES,"ra":_emscripten_glGenerateMipmap,"qa":_emscripten_glGetActiveAttrib,"pa":_emscripten_glGetActiveUniform,"oa":_emscripten_glGetAttachedShaders,"na":_emscripten_glGetAttribLocation,"ma":_emscripten_glGetBooleanv,"la":_emscripten_glGetBufferParameteriv,"ka":_emscripten_glGetError,"ja":_emscripten_glGetFloatv,"ia":_emscripten_glGetFramebufferAttachmentParameteriv,"ha":_emscripten_glGetIntegerv,"ga":_emscripten_glGetProgramInfoLog,"fa":_emscripten_glGetProgramiv,"ea":_emscripten_glGetQueryObjecti64vEXT,"da":_emscripten_glGetQueryObjectivEXT,"ca":_emscripten_glGetQueryObjectui64vEXT,"ba":_emscripten_glGetQueryObjectuivEXT,"aa":_emscripten_glGetQueryivEXT,"$":_emscripten_glGetRenderbufferParameteriv,"le":_emscripten_glGetShaderInfoLog,"ke":_emscripten_glGetShaderPrecisionFormat,"je":_emscripten_glGetShaderSource,"ie":_emscripten_glGetShaderiv,"he":_emscripten_glGetString,"ge":_emscripten_glGetTexParameterfv,"fe":_emscripten_glGetTexParameteriv,"ee":_emscripten_glGetUniformLocation,"de":_emscripten_glGetUniformfv,"ce":_emscripten_glGetUniformiv,"be":_emscripten_glGetVertexAttribPointerv,"ae":_emscripten_glGetVertexAttribfv,"$d":_emscripten_glGetVertexAttribiv,"_d":_emscripten_glHint,"Zd":_emscripten_glIsBuffer,"Yd":_emscripten_glIsEnabled,"Xd":_emscripten_glIsFramebuffer,"Wd":_emscripten_glIsProgram,"Vd":_emscripten_glIsQueryEXT,"Ud":_emscripten_glIsRenderbuffer,"Td":_emscripten_glIsShader,"Sd":_emscripten_glIsTexture,"Rd":_emscripten_glIsVertexArrayOES,"Qd":_emscripten_glLineWidth,"Pd":_emscripten_glLinkProgram,"Od":_emscripten_glPixelStorei,"Nd":_emscripten_glPolygonOffset,"Md":_emscripten_glQueryCounterEXT,"Ld":_emscripten_glReadPixels,"Kd":_emscripten_glReleaseShaderCompiler,"Jd":_emscripten_glRenderbufferStorage,"Id":_emscripten_glSampleCoverage,"Hd":_emscripten_glScissor,"Gd":_emscripten_glShaderBinary,"Fd":_emscripten_glShaderSource,"Ed":_emscripten_glStencilFunc,"Dd":_emscripten_glStencilFuncSeparate,"Cd":_emscripten_glStencilMask,"Bd":_emscripten_glStencilMaskSeparate,"Ad":_emscripten_glStencilOp,"yd":_emscripten_glStencilOpSeparate,"xd":_emscripten_glTexImage2D,"wd":_emscripten_glTexParameterf,"vd":_emscripten_glTexParameterfv,"ud":_emscripten_glTexParameteri,"td":_emscripten_glTexParameteriv,"sd":_emscripten_glTexSubImage2D,"rd":_emscripten_glUniform1f,"qd":_emscripten_glUniform1fv,"pd":_emscripten_glUniform1i,"nd":_emscripten_glUniform1iv,"md":_emscripten_glUniform2f,"ld":_emscripten_glUniform2fv,"kd":_emscripten_glUniform2i,"jd":_emscripten_glUniform2iv,"id":_emscripten_glUniform3f,"hd":_emscripten_glUniform3fv,"gd":_emscripten_glUniform3i,"fd":_emscripten_glUniform3iv,"ed":_emscripten_glUniform4f,"cd":_emscripten_glUniform4fv,"bd":_emscripten_glUniform4i,"ad":_emscripten_glUniform4iv,"$c":_emscripten_glUniformMatrix2fv,"_c":_emscripten_glUniformMatrix3fv,"Zc":_emscripten_glUniformMatrix4fv,"Yc":_emscripten_glUseProgram,"Xc":_emscripten_glValidateProgram,"Wc":_emscripten_glVertexAttrib1f,"Vc":_emscripten_glVertexAttrib1fv,"Uc":_emscripten_glVertexAttrib2f,"Tc":_emscripten_glVertexAttrib2fv,"Sc":_emscripten_glVertexAttrib3f,"Rc":_emscripten_glVertexAttrib3fv,"Qc":_emscripten_glVertexAttrib4f,"Pc":_emscripten_glVertexAttrib4fv,"Oc":_emscripten_glVertexAttribDivisorANGLE,"Nc":_emscripten_glVertexAttribPointer,"Mc":_emscripten_glViewport,"Lc":_emscripten_memcpy_big,"Jc":_emscripten_request_pointerlock,"Ic":_emscripten_resize_heap,"X":_emscripten_run_script,"Hc":_emscripten_sample_gamepad_data,"Gc":_emscripten_set_click_callback_on_thread,"Fc":_emscripten_set_fullscreenchange_callback_on_thread,"Ec":_emscripten_set_gamepadconnected_callback_on_thread,"Dc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Cc":_emscripten_set_keypress_callback_on_thread,"Bc":_emscripten_set_main_loop,"zc":_emscripten_set_touchcancel_callback_on_thread,"yc":_emscripten_set_touchend_callback_on_thread,"xc":_emscripten_set_touchmove_callback_on_thread,"wc":_emscripten_set_touchstart_callback_on_thread,"vc":_exit,"C":_glActiveTexture,"W":_glAttachShader,"p":_glBindAttribLocation,"c":_glBindBuffer,"m":_glBindTexture,"sc":_glBlendFunc,"j":_glBufferData,"B":_glBufferSubData,"V":_glClear,"U":_glClearColor,"rc":_glClearDepthf,"qc":_glCompileShader,"pc":_glCompressedTexImage2D,"oc":_glCreateProgram,"nc":_glCreateShader,"lc":_glCullFace,"r":_glDeleteBuffers,"A":_glDeleteProgram,"u":_glDeleteShader,"T":_glDeleteTextures,"kc":_glDepthFunc,"S":_glDetachShader,"R":_glDisable,"l":_glDisableVertexAttribArray,"Q":_glDrawArrays,"P":_glDrawElements,"z":_glEnable,"f":_glEnableVertexAttribArray,"ic":_glFrontFace,"i":_glGenBuffers,"hc":_glGenTextures,"gc":_glGetActiveUniform,"k":_glGetAttribLocation,"fc":_glGetFloatv,"ec":_glGetProgramInfoLog,"y":_glGetProgramiv,"cc":_glGetShaderInfoLog,"O":_glGetShaderiv,"q":_glGetString,"h":_glGetUniformLocation,"bc":_glLinkProgram,"ac":_glPixelStorei,"$b":_glReadPixels,"_b":_glShaderSource,"Zb":_glTexImage2D,"o":_glTexParameteri,"N":_glUniform1i,"x":_glUniform4f,"w":_glUniformMatrix4fv,"n":_glUseProgram,"Xb":_glVertexAttrib2f,"Wb":_glVertexAttrib3f,"v":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Vb":_glViewport,"M":_glfwCreateWindow,"Tb":_glfwDefaultWindowHints,"Sb":_glfwDestroyWindow,"Rb":_glfwGetCursorPos,"Qb":_glfwGetKey,"Pb":_glfwGetMouseButton,"L":_glfwGetPrimaryMonitor,"t":_glfwGetTime,"Ob":_glfwGetVideoModes,"Nb":_glfwInit,"Lb":_glfwMakeContextCurrent,"Kb":_glfwSetCharCallback,"Jb":_glfwSetCursorEnterCallback,"Ib":_glfwSetCursorPosCallback,"Hb":_glfwSetDropCallback,"Gb":_glfwSetErrorCallback,"Fb":_glfwSetKeyCallback,"Eb":_glfwSetMouseButtonCallback,"Db":_glfwSetScrollCallback,"Cb":_glfwSetWindowIconifyCallback,"Ab":_glfwSetWindowShouldClose,"zb":_glfwSetWindowSizeCallback,"yb":_glfwSwapBuffers,"xb":_glfwSwapInterval,"K":_glfwTerminate,"g":_glfwWindowHint,"J":_llvm_stackrestore,"I":_llvm_stacksave,"wb":_nanosleep,"vb":_time,"tb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["De"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shaders/shaders_model_shader.wasm b/examples/web/shaders/shaders_model_shader.wasm new file mode 100644 index 0000000..d31eb93 Binary files /dev/null and b/examples/web/shaders/shaders_model_shader.wasm differ diff --git a/examples/web/shaders/shaders_palette_switch.c b/examples/web/shaders/shaders_palette_switch.c index 5dbe40a..6998c9c 100644 --- a/examples/web/shaders/shaders_palette_switch.c +++ b/examples/web/shaders/shaders_palette_switch.c @@ -76,8 +76,8 @@ static const char *paletteText[] = { //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) @@ -93,14 +93,14 @@ int lineHeight = 0; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; + const int screenWidth = 800; + const int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [shaders] example - color palette switch"); @@ -120,7 +120,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -164,7 +164,7 @@ void UpdateDrawFrame(void) BeginShaderMode(shader); - for (int i = 0; i < COLORS_PER_PALETTE; i++) + for (int i = 0; i < COLORS_PER_PALETTE; i++) { // Draw horizontal screen-wide rectangles with increasing "palette index" // The used palette index is encoded in the RGB components of the pixel @@ -176,7 +176,7 @@ void UpdateDrawFrame(void) DrawText("< >", 10, 10, 30, DARKBLUE); DrawText("CURRENT PALETTE:", 60, 15, 20, RAYWHITE); DrawText(paletteText[currentPalette], 300, 15, 20, RED); - + DrawFPS(700, 15); EndDrawing(); diff --git a/examples/web/shaders/shaders_palette_switch.data b/examples/web/shaders/shaders_palette_switch.data new file mode 100644 index 0000000..3861d4c --- /dev/null +++ b/examples/web/shaders/shaders_palette_switch.data @@ -0,0 +1,29 @@ +#version 100 + +precision mediump float; + +const int colors = 8; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform ivec3 palette[colors]; + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture2D(texture0, fragTexCoord) * fragColor; + + // Convert the (normalized) texel color RED component (GB would work, too) + // to the palette index by scaling up from [0, 1] to [0, 255]. + int index = int(texelColor.r * 255.0); + ivec3 color = palette[index]; + + // Calculate final fragment color. Note that the palette color components + // are defined in the range [0, 255] and need to be normalized to [0, 1] + // for OpenGL to work. + gl_FragColor = vec4(color / 255.0, texelColor.a); +} diff --git a/examples/web/shaders/shaders_palette_switch.html b/examples/web/shaders/shaders_palette_switch.html new file mode 100644 index 0000000..01c7c91 --- /dev/null +++ b/examples/web/shaders/shaders_palette_switch.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shaders/shaders_palette_switch.js b/examples/web/shaders/shaders_palette_switch.js new file mode 100644 index 0000000..8d7bd53 --- /dev/null +++ b/examples/web/shaders/shaders_palette_switch.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="shaders/shaders_palette_switch.data";var REMOTE_PACKAGE_BASE="shaders_palette_switch.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","shaders",true,true);Module["FS_createPath"]("/resources/shaders","glsl100",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5271552,DYNAMICTOP_PTR=28640;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shaders_palette_switch.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2,value+count*12>>2))}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"mc":___lock,"C":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"B":___syscall146,"n":___syscall221,"ja":___syscall5,"A":___syscall54,"Q":___syscall6,"z":___unlock,"y":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"sd":_emscripten_get_gamepad_status,"hd":_emscripten_get_heap_size,"Yc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Dc":_emscripten_glActiveTexture,"tc":_emscripten_glAttachShader,"lc":_emscripten_glBeginQueryEXT,"ec":_emscripten_glBindAttribLocation,"$b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Fb":_emscripten_glBindTexture,"vb":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ee":_emscripten_glGetShaderInfoLog,"de":_emscripten_glGetShaderPrecisionFormat,"ce":_emscripten_glGetShaderSource,"be":_emscripten_glGetShaderiv,"ae":_emscripten_glGetString,"$d":_emscripten_glGetTexParameterfv,"_d":_emscripten_glGetTexParameteriv,"Zd":_emscripten_glGetUniformLocation,"Yd":_emscripten_glGetUniformfv,"Xd":_emscripten_glGetUniformiv,"Wd":_emscripten_glGetVertexAttribPointerv,"Vd":_emscripten_glGetVertexAttribfv,"Ud":_emscripten_glGetVertexAttribiv,"Td":_emscripten_glHint,"Sd":_emscripten_glIsBuffer,"Rd":_emscripten_glIsEnabled,"Qd":_emscripten_glIsFramebuffer,"Pd":_emscripten_glIsProgram,"Od":_emscripten_glIsQueryEXT,"Nd":_emscripten_glIsRenderbuffer,"Md":_emscripten_glIsShader,"Ld":_emscripten_glIsTexture,"Kd":_emscripten_glIsVertexArrayOES,"Jd":_emscripten_glLineWidth,"Id":_emscripten_glLinkProgram,"Hd":_emscripten_glPixelStorei,"Gd":_emscripten_glPolygonOffset,"Fd":_emscripten_glQueryCounterEXT,"Ed":_emscripten_glReadPixels,"Dd":_emscripten_glReleaseShaderCompiler,"Cd":_emscripten_glRenderbufferStorage,"Bd":_emscripten_glSampleCoverage,"Ad":_emscripten_glScissor,"zd":_emscripten_glShaderBinary,"yd":_emscripten_glShaderSource,"xd":_emscripten_glStencilFunc,"wd":_emscripten_glStencilFuncSeparate,"vd":_emscripten_glStencilMask,"ud":_emscripten_glStencilMaskSeparate,"td":_emscripten_glStencilOp,"rd":_emscripten_glStencilOpSeparate,"qd":_emscripten_glTexImage2D,"pd":_emscripten_glTexParameterf,"od":_emscripten_glTexParameterfv,"nd":_emscripten_glTexParameteri,"md":_emscripten_glTexParameteriv,"ld":_emscripten_glTexSubImage2D,"kd":_emscripten_glUniform1f,"jd":_emscripten_glUniform1fv,"id":_emscripten_glUniform1i,"gd":_emscripten_glUniform1iv,"fd":_emscripten_glUniform2f,"ed":_emscripten_glUniform2fv,"dd":_emscripten_glUniform2i,"cd":_emscripten_glUniform2iv,"bd":_emscripten_glUniform3f,"ad":_emscripten_glUniform3fv,"$c":_emscripten_glUniform3i,"_c":_emscripten_glUniform3iv,"Zc":_emscripten_glUniform4f,"Xc":_emscripten_glUniform4fv,"Wc":_emscripten_glUniform4i,"Vc":_emscripten_glUniform4iv,"Uc":_emscripten_glUniformMatrix2fv,"Tc":_emscripten_glUniformMatrix3fv,"Sc":_emscripten_glUniformMatrix4fv,"Rc":_emscripten_glUseProgram,"Qc":_emscripten_glValidateProgram,"Pc":_emscripten_glVertexAttrib1f,"Oc":_emscripten_glVertexAttrib1fv,"Nc":_emscripten_glVertexAttrib2f,"Mc":_emscripten_glVertexAttrib2fv,"Lc":_emscripten_glVertexAttrib3f,"Kc":_emscripten_glVertexAttrib3fv,"Jc":_emscripten_glVertexAttrib4f,"Ic":_emscripten_glVertexAttrib4fv,"Hc":_emscripten_glVertexAttribDivisorANGLE,"Gc":_emscripten_glVertexAttribPointer,"Fc":_emscripten_glViewport,"Ec":_emscripten_memcpy_big,"Cc":_emscripten_request_pointerlock,"Bc":_emscripten_resize_heap,"N":_emscripten_run_script,"Ac":_emscripten_sample_gamepad_data,"zc":_emscripten_set_click_callback_on_thread,"yc":_emscripten_set_fullscreenchange_callback_on_thread,"xc":_emscripten_set_gamepadconnected_callback_on_thread,"wc":_emscripten_set_gamepaddisconnected_callback_on_thread,"vc":_emscripten_set_keypress_callback_on_thread,"uc":_emscripten_set_main_loop,"sc":_emscripten_set_touchcancel_callback_on_thread,"rc":_emscripten_set_touchend_callback_on_thread,"qc":_emscripten_set_touchmove_callback_on_thread,"pc":_emscripten_set_touchstart_callback_on_thread,"oc":_exit,"nc":_glActiveTexture,"M":_glAttachShader,"k":_glBindAttribLocation,"d":_glBindBuffer,"m":_glBindTexture,"kc":_glBlendFunc,"u":_glBufferData,"x":_glBufferSubData,"L":_glClear,"K":_glClearColor,"jc":_glClearDepthf,"ic":_glCompileShader,"hc":_glCompressedTexImage2D,"gc":_glCreateProgram,"fc":_glCreateShader,"dc":_glCullFace,"t":_glDeleteBuffers,"w":_glDeleteProgram,"s":_glDeleteShader,"J":_glDeleteTextures,"cc":_glDepthFunc,"I":_glDetachShader,"bc":_glDisable,"r":_glDisableVertexAttribArray,"ac":_glDrawArrays,"_b":_glDrawElements,"H":_glEnable,"j":_glEnableVertexAttribArray,"Zb":_glFrontFace,"q":_glGenBuffers,"Yb":_glGenTextures,"Xb":_glGetActiveUniform,"f":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"v":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"G":_glGetShaderiv,"l":_glGetString,"e":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"i":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform3iv,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"p":_glUseProgram,"h":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Eb":_glfwDestroyWindow,"Db":_glfwGetCursorPos,"o":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"ub":_glfwSetKeyCallback,"tb":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"F":_glfwTerminate,"g":_glfwWindowHint,"E":_llvm_stackrestore,"D":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["le"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shaders/shaders_palette_switch.wasm b/examples/web/shaders/shaders_palette_switch.wasm new file mode 100644 index 0000000..2a9c96a Binary files /dev/null and b/examples/web/shaders/shaders_palette_switch.wasm differ diff --git a/examples/web/shaders/shaders_postprocessing.c b/examples/web/shaders/shaders_postprocessing.c index 5b5aec2..10ce35d 100644 --- a/examples/web/shaders/shaders_postprocessing.c +++ b/examples/web/shaders/shaders_postprocessing.c @@ -24,10 +24,8 @@ #if defined(PLATFORM_DESKTOP) #define GLSL_VERSION 330 - #define DEFAULT_VERTEX_SHADER "resources/shaders/glsl330/base.vs" #else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB #define GLSL_VERSION 100 - #define DEFAULT_VERTEX_SHADER "resources/shaders/glsl100/base.vs" #endif #define MAX_POSTPRO_SHADERS 12 @@ -67,21 +65,21 @@ static const char *postproShaderText[] = { //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Define the camera to look into our 3d world Camera camera = {{ 3.0f, 3.0f, 3.0f }, { 0.0f, 1.5f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; -Model dwarf; // OBJ model -Texture2D texture; // Model texture +Model model = { 0 }; // OBJ model +Texture2D texture = { 0 }; // Model texture -Shader shaders[MAX_POSTPRO_SHADERS]; // Postpro shaders -int currentShader = FX_GRAYSCALE; // Current shader selected +Shader shaders[MAX_POSTPRO_SHADERS] = { 0 }; // Postpro shaders +int currentShader = FX_GRAYSCALE = { 0 }; // Current shader selected -Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position +Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position -RenderTexture2D target; +RenderTexture2D target = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -89,7 +87,7 @@ RenderTexture2D target; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -98,29 +96,29 @@ int main(void) SetConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available) InitWindow(screenWidth, screenHeight, "raylib [shaders] example - postprocessing shader"); - dwarf = LoadModel("resources/model/dwarf.obj"); // Load OBJ model - texture = LoadTexture("resources/model/dwarf_diffuse.png"); // Load model texture - dwarf.material.maps[MAP_DIFFUSE].texture = texture; // Set dwarf model diffuse texture + model = LoadModel("resources/models/church.obj"); // Load OBJ model + texture = LoadTexture("resources/models/church_diffuse.png"); // Load model texture + model.materials[0].maps[MAP_DIFFUSE].texture = texture; // Set model diffuse texture // Load all postpro shaders // NOTE 1: All postpro shader use the base vertex shader (DEFAULT_VERTEX_SHADER) // NOTE 2: We load the correct shader depending on GLSL version - shaders[FX_GRAYSCALE] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/grayscale.fs", GLSL_VERSION)); - shaders[FX_POSTERIZATION] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/posterization.fs", GLSL_VERSION)); - shaders[FX_DREAM_VISION] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/dream_vision.fs", GLSL_VERSION)); - shaders[FX_PIXELIZER] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/pixelizer.fs", GLSL_VERSION)); - shaders[FX_CROSS_HATCHING] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/cross_hatching.fs", GLSL_VERSION)); - shaders[FX_CROSS_STITCHING] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/cross_stitching.fs", GLSL_VERSION)); - shaders[FX_PREDATOR_VIEW] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/predator.fs", GLSL_VERSION)); - shaders[FX_SCANLINES] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/scanlines.fs", GLSL_VERSION)); - shaders[FX_FISHEYE] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/fisheye.fs", GLSL_VERSION)); - shaders[FX_SOBEL] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/sobel.fs", GLSL_VERSION)); - shaders[FX_BLOOM] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/bloom.fs", GLSL_VERSION)); - shaders[FX_BLUR] = LoadShader(DEFAULT_VERTEX_SHADER, FormatText("resources/shaders/glsl%i/blur.fs", GLSL_VERSION)); + shaders[FX_GRAYSCALE] = LoadShader(0, FormatText("resources/shaders/glsl%i/grayscale.fs", GLSL_VERSION)); + shaders[FX_POSTERIZATION] = LoadShader(0, FormatText("resources/shaders/glsl%i/posterization.fs", GLSL_VERSION)); + shaders[FX_DREAM_VISION] = LoadShader(0, FormatText("resources/shaders/glsl%i/dream_vision.fs", GLSL_VERSION)); + shaders[FX_PIXELIZER] = LoadShader(0, FormatText("resources/shaders/glsl%i/pixelizer.fs", GLSL_VERSION)); + shaders[FX_CROSS_HATCHING] = LoadShader(0, FormatText("resources/shaders/glsl%i/cross_hatching.fs", GLSL_VERSION)); + shaders[FX_CROSS_STITCHING] = LoadShader(0, FormatText("resources/shaders/glsl%i/cross_stitching.fs", GLSL_VERSION)); + shaders[FX_PREDATOR_VIEW] = LoadShader(0, FormatText("resources/shaders/glsl%i/predator.fs", GLSL_VERSION)); + shaders[FX_SCANLINES] = LoadShader(0, FormatText("resources/shaders/glsl%i/scanlines.fs", GLSL_VERSION)); + shaders[FX_FISHEYE] = LoadShader(0, FormatText("resources/shaders/glsl%i/fisheye.fs", GLSL_VERSION)); + shaders[FX_SOBEL] = LoadShader(0, FormatText("resources/shaders/glsl%i/sobel.fs", GLSL_VERSION)); + shaders[FX_BLOOM] = LoadShader(0, FormatText("resources/shaders/glsl%i/bloom.fs", GLSL_VERSION)); + shaders[FX_BLUR] = LoadShader(0, FormatText("resources/shaders/glsl%i/blur.fs", GLSL_VERSION)); // Create a RenderTexture2D to be used for render to texture target = LoadRenderTexture(screenWidth, screenHeight); - + // Setup orbital camera SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode @@ -129,7 +127,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -139,12 +137,12 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - + // Unload all postpro shaders for (int i = 0; i < MAX_POSTPRO_SHADERS; i++) UnloadShader(shaders[i]); - + UnloadTexture(texture); // Unload texture - UnloadModel(dwarf); // Unload model + UnloadModel(model); // Unload model CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -160,10 +158,10 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update internal camera and our camera - + if (IsKeyPressed(KEY_RIGHT)) currentShader++; else if (IsKeyPressed(KEY_LEFT)) currentShader--; - + if (currentShader >= MAX_POSTPRO_SHADERS) currentShader = 0; else if (currentShader < 0) currentShader = MAX_POSTPRO_SHADERS - 1; //---------------------------------------------------------------------------------- @@ -174,34 +172,37 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - BeginTextureMode(target); // Enable drawing to texture + BeginTextureMode(target); // Enable drawing to texture - Begin3dMode(camera); + ClearBackground(RAYWHITE); // Clear texture background - DrawModel(dwarf, position, 2.0f, WHITE); // Draw 3d model with texture + BeginMode3D(camera); // Begin 3d mode drawing + + DrawModel(model, position, 0.1f, WHITE); // Draw 3d model with texture DrawGrid(10, 1.0f); // Draw a grid - End3dMode(); - + EndMode3D(); // End 3d mode drawing, returns to orthographic 2d mode + EndTextureMode(); // End drawing to texture (now we have a texture available for next passes) - + // Render previously generated texture using selected postpro shader BeginShaderMode(shaders[currentShader]); - + // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom) DrawTextureRec(target.texture, (Rectangle){ 0, 0, target.texture.width, -target.texture.height }, (Vector2){ 0, 0 }, WHITE); - + EndShaderMode(); - + + // Draw 2d shapes and text over drawn texture DrawRectangle(0, 9, 580, 30, Fade(LIGHTGRAY, 0.7f)); - - DrawText("(c) Dwarf 3D model by David Moreno", screenWidth - 200, screenHeight - 20, 10, DARKGRAY); - + + DrawText("(c) Church 3D model by Alberto Cano", screenWidth - 200, screenHeight - 20, 10, GRAY); + DrawText("CURRENT POSTPRO SHADER:", 10, 15, 20, BLACK); DrawText(postproShaderText[currentShader], 330, 15, 20, RED); DrawText("< >", 540, 10, 30, DARKBLUE); - + DrawFPS(700, 15); EndDrawing(); diff --git a/examples/web/shaders/shaders_postprocessing.data b/examples/web/shaders/shaders_postprocessing.data new file mode 100644 index 0000000..0943ddd --- /dev/null +++ b/examples/web/shaders/shaders_postprocessing.data @@ -0,0 +1,8145 @@ +# (c) 2018 Medieval Assets Pack by Alberto Cano +# Licensed as Creative Commons Attribution-NonCommercial 4.0 + +# +# object church +# + +v 4.672987 1.366374 3.687210 +v 4.749157 3.915673 3.641246 +v 4.749157 3.915673 3.108021 +v 4.672987 1.366374 2.958931 +v 4.671515 6.920380 3.688683 +v 4.756666 9.021092 3.633739 +v 4.756666 9.021092 3.115528 +v 4.671515 6.920380 2.957458 +v 5.401266 1.366374 3.687210 +v 5.282382 3.915673 3.641246 +v 5.402740 6.920380 3.688683 +v 5.274876 9.021092 3.633739 +v 5.401266 1.366374 2.958931 +v 5.282382 3.915673 3.108021 +v 5.402740 6.920380 2.957458 +v 5.274876 9.021092 3.115528 +v 4.770980 11.140738 3.629622 +v 4.770384 11.093080 2.940483 +v 5.461159 11.111799 3.631026 +v 5.460562 11.064143 2.941886 +v 4.896648 12.594810 3.494706 +v 4.896199 12.558983 2.976627 +v 5.415511 12.573055 3.495761 +v 5.415061 12.537227 2.977682 +v 4.900036 14.058286 3.421423 +v 4.899451 14.011499 2.744879 +v 5.577600 14.029880 3.422802 +v 5.577015 13.983093 2.746257 +v 2.816255 3.971905 3.105294 +v 2.816255 3.971905 3.638519 +v 2.892425 1.422606 3.684482 +v 2.892425 1.422606 2.956204 +v 2.622373 9.077326 3.099698 +v 2.622373 9.077326 3.617908 +v 2.893899 6.976612 3.685956 +v 2.893899 6.976612 2.954731 +v 2.283030 3.971905 3.638519 +v 2.164147 1.422606 3.684483 +v 2.104162 9.077326 3.617908 +v 2.162674 6.976612 3.685956 +v 2.283030 3.971905 3.105293 +v 2.164147 1.422606 2.956204 +v 2.104162 9.077326 3.099698 +v 2.162674 6.976612 2.954730 +v 2.795031 11.149311 2.937756 +v 2.794435 11.196969 3.626895 +v 2.104256 11.168032 3.628299 +v 2.104853 11.120375 2.939159 +v 2.669216 12.615214 2.973899 +v 2.668766 12.651041 3.491978 +v 2.149904 12.629287 3.493033 +v 2.150354 12.593460 2.974954 +v 2.665964 14.067732 2.742152 +v 2.665379 14.114518 3.418696 +v 1.987815 14.086112 3.420074 +v 1.988400 14.039326 2.743530 +v -8.203741 1.267261 4.004546 +v -8.203739 4.908214 4.004546 +v -8.203739 4.908214 0.802546 +v -8.203741 1.267261 0.802546 +v -3.030087 1.267261 7.206547 +v -3.030086 4.908213 7.206547 +v -8.203740 4.908214 7.206547 +v -8.203741 1.267261 7.206547 +v 2.143568 1.259508 0.802546 +v 2.143569 4.895408 0.802546 +v 7.977185 4.887452 0.802547 +v 7.977185 1.239670 0.802547 +v 7.977185 1.239670 7.206548 +v 7.977185 4.887452 7.206548 +v 2.143569 4.908213 7.206547 +v 2.143568 1.267260 7.206547 +v -3.030086 4.895409 0.802546 +v -3.030086 1.259509 0.802546 +v -8.203739 10.730635 4.004546 +v -8.203739 5.665551 0.802546 +v -3.030086 5.665551 7.206547 +v -8.203740 5.665551 7.206547 +v 2.143569 5.665550 0.802546 +v 7.977185 5.644517 0.802547 +v 7.977186 5.654397 7.206548 +v 2.143569 5.665550 7.206547 +v -3.030086 5.665551 0.802546 +v 7.977187 10.730632 4.004547 +v 7.977186 5.718971 4.004547 +v 7.977186 4.866691 4.004547 +v 7.977186 1.212080 4.004547 +v -3.030086 5.359768 -2.546745 +v -0.443258 8.104138 -2.546745 +v -0.443259 1.251756 -2.546746 +v -3.030086 1.259509 -2.546746 +v 2.143569 5.359767 -2.546745 +v 2.143569 1.259508 -2.546746 +v -8.714131 5.502876 0.667329 +v -8.925464 11.117952 4.004546 +v -8.925464 11.472882 4.004546 +v -8.713030 5.806002 0.574254 +v -8.714132 5.502876 7.341763 +v -8.713031 5.806002 7.434839 +v -3.030086 5.435468 7.397793 +v -3.030086 5.738945 7.490578 +v 2.142987 5.435467 7.397793 +v 2.143709 5.738945 7.490578 +v 8.617522 5.747605 7.341550 +v 8.617887 6.050475 7.434840 +v 8.829270 11.117949 4.004547 +v 8.829270 11.472879 4.004460 +v 8.617038 5.479570 0.667705 +v 8.618862 5.782260 0.574270 +v 2.142472 5.435469 0.611300 +v 2.143834 5.738945 0.518517 +v -3.030086 5.435468 0.611301 +v -3.030086 5.738945 0.518516 +v -3.030086 9.579156 4.004547 +v 2.143569 9.579155 4.004547 +v -0.443258 8.104138 -3.207969 +v -0.443258 7.168501 0.117055 +v -3.213754 4.686915 0.117055 +v -3.779471 4.686916 -3.207970 +v 2.892955 4.686915 -3.207969 +v 2.327237 4.686915 0.117055 +v -3.213754 5.170498 0.117055 +v -0.443258 7.700984 0.117055 +v -0.443258 8.636621 -3.207969 +v -3.779471 5.170498 -3.207970 +v 2.327237 5.170497 0.117055 +v 2.892955 5.170497 -3.207969 +v 2.520533 5.170497 2.329992 +v 2.520532 4.686915 2.329992 +v -3.407049 5.170498 2.329992 +v -0.443258 8.653279 3.336201 +v -3.407049 4.686916 2.329992 +v -3.224798 1.267537 -2.724316 +v -3.084860 3.428520 -2.599412 +v -2.647470 3.428521 -2.599412 +v -2.623512 1.267537 -2.724316 +v -3.157254 5.298322 -2.724316 +v -2.623511 6.106331 -2.724316 +v -2.647470 3.428521 -2.162023 +v -2.623512 1.267537 -2.123031 +v -2.623511 6.106331 -2.123031 +v -3.084860 3.428520 -2.162023 +v -3.224798 1.267537 -2.123032 +v -3.157254 5.298322 -2.123032 +v 5.234885 8.894447 3.493170 +v 2.152004 8.894447 3.493169 +v 2.152004 7.017791 3.493169 +v 5.234885 7.017790 3.493170 +v 5.234885 8.894447 0.286462 +v 5.234885 7.017790 0.286462 +v 2.152004 8.894447 0.286462 +v 2.152004 7.017791 0.286462 +v 5.952550 15.008949 3.864073 +v 5.919468 14.222457 3.918490 +v 5.915528 13.907810 -0.631487 +v 5.948610 14.694304 -0.685903 +v 1.914264 14.863439 -0.694107 +v 1.881181 14.076944 -0.639690 +v 1.885121 14.391590 3.910287 +v 1.918204 15.178086 3.855870 +v 5.474879 14.982239 3.187648 +v 5.472109 14.761015 -0.011418 +v 2.391937 14.890150 -0.017681 +v 2.394707 15.111373 3.181385 +v 2.217420 10.741338 0.269374 +v 5.297592 10.612206 0.275636 +v 2.333891 13.665580 3.281420 +v 5.414063 13.536447 3.287683 +v 5.411294 13.315219 0.088616 +v 2.331121 13.444352 0.082352 +v 5.486740 10.843854 3.738632 +v 5.515079 11.517557 3.692019 +v 2.062607 11.662299 3.684999 +v 2.034268 10.988593 3.731612 +v 1.965690 7.017790 3.757348 +v 1.965690 6.341883 3.757348 +v 5.421199 6.341884 3.757348 +v 5.421199 7.017790 3.757348 +v 5.511854 11.259878 -0.034147 +v 5.483515 10.586176 0.012467 +v 5.421198 6.341883 0.022284 +v 5.421199 7.017789 0.022284 +v 2.059381 11.404618 -0.041167 +v 2.031041 10.730916 0.005447 +v 1.965690 6.341884 0.022284 +v 1.965690 7.017791 0.022284 +v 5.328701 11.507136 3.428090 +v 2.248529 11.636267 3.421828 +v 5.325932 11.285909 0.229024 +v 2.245759 11.415044 0.222760 +v 5.234885 1.267260 3.493170 +v 5.234885 1.267260 0.286462 +v 5.234884 6.341884 0.286462 +v 5.234885 6.341884 3.493170 +v 2.152003 1.267260 0.286462 +v 2.152003 1.267260 3.493169 +v 2.152004 6.341884 3.493169 +v 2.152004 6.341884 0.286462 +v 5.300362 10.833432 3.474704 +v 2.220190 10.962566 3.468441 +v 5.488289 18.351477 3.106055 +v 5.432454 17.024092 3.197897 +v 4.727269 17.622326 3.157138 +v 4.759225 18.382044 3.104573 +v 2.572030 18.473740 3.100126 +v 2.516194 17.146355 3.191967 +v 2.536664 17.653803 2.280275 +v 2.568621 18.413523 2.227710 +v 5.484882 18.291260 2.233640 +v 5.452925 17.531544 2.286205 +v 2.558395 18.232864 -0.389533 +v 2.502560 16.905474 -0.297690 +v 3.255504 17.442579 -0.335485 +v 3.287461 18.202299 -0.388049 +v 2.540192 17.758495 1.396451 +v 2.529847 17.533363 0.535445 +v 2.561804 18.293085 0.482883 +v 2.565212 18.353300 1.355296 +v 5.478065 18.170820 0.488811 +v 5.446108 17.411100 0.541375 +v 5.456454 17.636234 1.402380 +v 5.481473 18.231041 1.361226 +v 4.005140 17.817806 3.144246 +v 3.269139 17.683460 3.154172 +v 3.301096 18.443176 3.101608 +v 4.030159 18.412611 3.103090 +v 3.991506 17.576929 -0.345412 +v 4.713634 17.381447 -0.332521 +v 4.745591 18.141167 -0.385084 +v 4.016526 18.171734 -0.386568 +v 5.474657 18.110600 -0.383604 +v 5.418821 16.783216 -0.291762 +v 3.997826 16.598362 1.977675 +v 3.994203 16.949141 1.871554 +v 3.789942 16.880709 1.870981 +v 3.665688 16.619816 1.866170 +v 4.328650 16.625895 1.863629 +v 4.199675 16.884468 1.869411 +v 3.991053 17.170544 1.579510 +v 3.660552 17.059816 1.578584 +v 3.459630 16.623966 1.570518 +v 4.532324 16.633802 1.566407 +v 4.323511 17.065897 1.576043 +v 3.989580 17.178001 1.213095 +v 3.659078 17.067278 1.212169 +v 3.458157 16.631430 1.204104 +v 4.530852 16.641268 1.199993 +v 4.322040 17.073357 1.209629 +v 3.990347 16.968672 0.912267 +v 3.786086 16.900236 0.911694 +v 3.661832 16.639343 0.906882 +v 4.324994 16.623236 0.903889 +v 4.195817 16.903996 0.910123 +v 3.993060 16.622505 0.791931 +v 3.671349 15.997251 1.853473 +v 4.003486 15.975796 1.964978 +v 4.334309 16.003332 1.850932 +v 3.465291 16.001406 1.557822 +v 4.537985 16.011242 1.553711 +v 3.463817 16.008863 1.191407 +v 4.536512 16.018700 1.187296 +v 3.667492 16.016775 0.894185 +v 4.330656 16.000673 0.891191 +v 3.998720 15.999939 0.779234 +v 3.580832 15.762773 1.983916 +v 4.006256 15.741533 2.126885 +v 4.430108 15.770563 1.980661 +v 3.316867 15.768097 1.605178 +v 4.691021 15.780697 1.599911 +v 3.314979 15.777655 1.135790 +v 4.689136 15.790258 1.130522 +v 3.575893 15.787792 0.755039 +v 4.425369 15.773392 0.751331 +v 4.000150 15.772456 0.607910 +v 4.167738 17.082762 1.436337 +v 4.095740 17.077181 1.311860 +v 4.061117 17.358999 1.372744 +v 4.086811 17.360991 1.417166 +v 3.951960 17.083208 1.311568 +v 4.009803 17.361153 1.372640 +v 3.880177 17.094818 1.435752 +v 3.984187 17.365295 1.416957 +v 3.952176 17.100401 1.560228 +v 4.009881 17.367289 1.461380 +v 4.095956 17.094372 1.560521 +v 4.061193 17.365131 1.461485 +v 4.558943 27.996582 0.730314 +v 4.537374 27.918690 0.756207 +v 4.568421 27.933918 0.755143 +v 4.573010 27.905622 0.715098 +v 4.537475 27.912605 0.718652 +v 1.614795 18.854746 4.138235 +v 1.414524 18.344713 4.508417 +v 6.716858 18.122417 4.519198 +v 6.561485 18.647366 4.148293 +v 6.711414 17.687864 -1.764677 +v 6.556619 18.258890 -1.469291 +v 1.409083 17.910166 -1.775456 +v 1.609931 18.466276 -1.479349 +v 6.093621 18.893530 3.795330 +v 2.103048 19.060829 3.787216 +v 2.098763 18.718649 -1.160881 +v 6.089338 18.551348 -1.152767 +v -8.713030 1.267262 7.639588 +v -3.030087 1.267261 7.639588 +v -3.407052 1.267261 -0.038095 +v -8.713031 1.267262 -0.038094 +v 2.520563 1.267260 -0.038094 +v 2.520563 1.267260 7.639587 +v 8.698908 1.267259 7.639589 +v 8.698908 1.267259 -0.038093 +v -9.071366 -0.000000 -0.523111 +v -9.071365 -0.000000 8.126415 +v -3.030088 -0.000001 8.126415 +v 2.520563 -0.000001 8.126415 +v 9.071366 -0.000002 8.126415 +v 9.071366 -0.000002 -0.523110 +v 2.520565 -0.000001 -0.523111 +v -3.407052 -0.000001 -0.523112 +v 2.520564 1.267260 -2.724314 +v -3.407051 1.267261 -2.724315 +v 2.520564 -0.000001 -2.724314 +v -3.407050 -0.000001 -2.724315 +v 1.736992 0.241523 -6.928524 +v 1.736992 -0.033319 -6.928524 +v -2.623513 -0.033318 -6.928524 +v -2.623513 0.241524 -6.928524 +v -2.623513 0.241524 -6.420866 +v 1.736992 0.241523 -6.420866 +v 1.736992 0.504688 -6.420866 +v -2.623513 0.504689 -6.420866 +v -2.623513 0.505858 -5.913212 +v 1.736992 0.504688 -5.913212 +v 1.736992 0.767854 -5.913212 +v -2.623513 0.769023 -5.913212 +v -2.623513 0.769023 -5.405557 +v 1.736992 0.769022 -5.405555 +v 1.736992 1.032188 -5.405555 +v -2.623513 1.032188 -5.405557 +v -2.623513 1.032188 -4.897901 +v 1.736992 1.032188 -4.897901 +v 1.736992 1.267537 -4.897901 +v -2.623513 1.267537 -4.897901 +v -2.623513 1.267537 -4.390244 +v 1.736992 1.267537 -4.390244 +v -2.623513 1.267537 -2.724316 +v 1.736991 1.267537 -2.724316 +v -3.407050 1.735000 -4.234435 +v -2.623512 1.734999 -4.234435 +v -2.623512 0.994722 -5.744554 +v -3.407050 0.994722 -5.744554 +v -3.407050 -0.000001 -4.234435 +v -3.407050 -0.000001 -5.744554 +v -3.407050 -0.000001 -2.724316 +v -2.623512 -0.000001 -2.724315 +v -2.623512 1.734999 -2.724315 +v -3.407050 1.734999 -2.724316 +v -2.623512 -0.000001 -5.744554 +v -2.623512 -0.000001 -4.234435 +v -2.623512 -0.000001 -8.126418 +v -3.407050 -0.000001 -8.126418 +v -3.407050 0.632338 -8.126418 +v -2.623512 0.632338 -8.126418 +v -2.623512 0.632338 -7.254672 +v -3.407050 0.632338 -7.254672 +v -3.407050 -0.000001 -7.254672 +v -2.623512 -0.000001 -7.254672 +v -3.407050 1.109609 -7.254672 +v -2.623512 1.109609 -7.254672 +v -2.623512 1.109609 -8.126418 +v -3.407050 1.109609 -8.126418 +v 1.736992 0.994721 -5.744554 +v 1.736992 1.734999 -4.234435 +v 2.520530 1.734999 -4.234435 +v 2.520530 0.994721 -5.744554 +v 2.520530 -0.000001 -4.234435 +v 2.520530 -0.000001 -5.744554 +v 2.520530 -0.000001 -2.724315 +v 2.520530 1.734999 -2.724315 +v 1.736992 1.734999 -2.724315 +v 1.736992 -0.000001 -2.724315 +v 1.736992 -0.000001 -5.744554 +v 1.736992 -0.000001 -4.234435 +v 1.736992 -0.000001 -8.126418 +v 1.736992 0.632338 -8.126418 +v 2.520530 0.632338 -8.126418 +v 2.520530 -0.000001 -8.126418 +v 2.520530 0.632338 -7.254672 +v 1.736992 0.632338 -7.254672 +v 2.520530 -0.000001 -7.254672 +v 1.736992 -0.000001 -7.254672 +v 2.520530 1.109609 -7.254672 +v 2.520530 1.109609 -8.126418 +v 1.736992 1.109609 -8.126418 +v 1.736992 1.109609 -7.254672 +v -1.410326 3.088244 -2.720418 +v -1.410326 3.088244 -2.538141 +v -1.140453 3.592780 -2.538141 +v -1.140452 3.592780 -2.720418 +v -1.221802 3.088244 -2.619900 +v -1.221802 3.088244 -2.720418 +v -1.004539 3.477115 -2.720418 +v -1.004539 3.477115 -2.619900 +v -0.443259 4.069920 -2.538140 +v -0.443259 4.069920 -2.720418 +v -0.443259 3.875959 -2.720418 +v -0.443259 3.875959 -2.619900 +v 0.253934 3.592780 -2.538140 +v 0.253934 3.592780 -2.720418 +v 0.118021 3.477115 -2.720418 +v 0.118021 3.477115 -2.619900 +v 0.523807 3.088244 -2.538140 +v 0.523807 3.088244 -2.720418 +v 0.335284 3.088244 -2.720418 +v 0.335284 3.088244 -2.619900 +v -1.410326 1.267537 -2.720418 +v -1.410326 1.267537 -2.538140 +v -1.221803 1.267537 -2.619900 +v -1.221803 1.267537 -2.720418 +v 0.523807 1.267537 -2.538140 +v 0.523807 1.267537 -2.720418 +v 0.335284 1.267537 -2.720418 +v 0.335284 1.267537 -2.619900 +v -5.806923 3.909048 0.771220 +v -5.485344 4.409725 0.771220 +v -5.485344 2.303240 0.771220 +v -5.806923 2.344218 0.771220 +v -6.058448 2.381772 0.790385 +v -6.058448 2.381772 0.716560 +v -6.058448 2.156472 0.716560 +v -6.058448 2.156473 0.790385 +v -5.485344 4.779102 0.790385 +v -5.485344 4.779102 0.716560 +v -5.975380 4.050927 0.716560 +v -5.975380 4.050927 0.790385 +v -4.912240 2.156472 0.790385 +v -4.912240 2.156472 0.716560 +v -4.912240 2.381772 0.716560 +v -4.912240 2.381772 0.790385 +v -5.485344 2.077940 0.790385 +v -5.485344 2.077940 0.716562 +v -4.995306 2.156472 0.716560 +v -4.995306 2.156472 0.790385 +v -5.975381 2.156472 0.635584 +v -5.975381 2.381772 0.635584 +v -5.806923 2.344218 0.635584 +v -5.485344 4.409725 0.716562 +v -5.806923 3.909048 0.716560 +v -4.995306 2.381772 0.635584 +v -4.995306 2.156472 0.635584 +v -5.163763 2.358823 0.635584 +v -5.485344 2.077940 0.635584 +v -5.485344 2.303240 0.635584 +v -5.163763 3.909048 0.771220 +v -5.163763 2.358823 0.771220 +v -4.995306 4.050928 0.790385 +v -4.995306 4.050928 0.716560 +v -5.975381 2.156473 0.790385 +v -5.975381 2.156472 0.716560 +v -5.163763 3.909048 0.716560 +v -5.806923 2.344218 0.716560 +v -5.163763 2.358823 0.716560 +v -5.485344 2.303239 0.716560 +v -4.995306 2.381772 0.716560 +v -4.995306 2.381772 0.790385 +v -5.975381 2.381772 0.716560 +v -5.975381 2.381772 0.790385 +v -6.058448 2.381772 0.635584 +v -6.058448 2.156472 0.635584 +v -4.912240 2.156472 0.635584 +v -4.912240 2.381772 0.635584 +v 6.141209 3.909047 0.771221 +v 6.462788 4.409724 0.771221 +v 6.462787 2.303238 0.771221 +v 6.141208 2.344216 0.771221 +v 5.889685 2.381771 0.790385 +v 5.889685 2.381771 0.716561 +v 5.889685 2.156471 0.716561 +v 5.889685 2.156471 0.790385 +v 6.462788 4.779100 0.790385 +v 6.462788 4.779100 0.716561 +v 5.972752 4.050926 0.716561 +v 5.972752 4.050926 0.790386 +v 7.035892 2.156471 0.790385 +v 7.035892 2.156471 0.716561 +v 7.035892 2.381771 0.716561 +v 7.035892 2.381771 0.790385 +v 6.462787 2.077938 0.790386 +v 6.462787 2.077938 0.716562 +v 6.952826 2.156471 0.716561 +v 6.952826 2.156471 0.790385 +v 5.972751 2.156471 0.635585 +v 5.972751 2.381771 0.635585 +v 6.141208 2.344216 0.635585 +v 6.462788 4.409724 0.716562 +v 6.141209 3.909047 0.716561 +v 6.952826 2.381771 0.635585 +v 6.952826 2.156471 0.635585 +v 6.784369 2.358821 0.635585 +v 6.462787 2.077938 0.635585 +v 6.462787 2.303238 0.635585 +v 6.784369 3.909047 0.771221 +v 6.784369 2.358821 0.771221 +v 6.952826 4.050926 0.790386 +v 6.952826 4.050926 0.716561 +v 5.972751 2.156471 0.790385 +v 5.972751 2.156471 0.716561 +v 6.784369 3.909047 0.716561 +v 6.141208 2.344216 0.716561 +v 6.784369 2.358821 0.716561 +v 6.462787 2.303238 0.716561 +v 6.952826 2.381771 0.716561 +v 6.952826 2.381771 0.790385 +v 5.972751 2.381771 0.716561 +v 5.972751 2.381771 0.790385 +v 5.889685 2.381771 0.635585 +v 5.889685 2.156471 0.635585 +v 7.035892 2.156471 0.635585 +v 7.035892 2.381771 0.635585 +v -8.175412 8.783850 4.004546 +v -8.306676 8.783850 4.004546 +v -8.306676 8.517238 4.737058 +v -8.175412 8.517238 4.737058 +v -8.230400 8.702679 4.004546 +v -8.230400 7.644264 4.004546 +v -8.230400 8.455057 4.684882 +v -8.306676 7.842151 5.126819 +v -8.175412 7.842151 5.126819 +v -8.230400 7.828055 5.046881 +v -8.306676 7.074471 4.991457 +v -8.175412 7.074471 4.991457 +v -8.230400 7.115057 4.921160 +v -8.306676 6.573403 4.394308 +v -8.175412 6.573403 4.394308 +v -8.230400 6.649680 4.366545 +v -8.306675 6.573403 3.614785 +v -8.175411 6.573404 3.614785 +v -8.230399 6.649680 3.642547 +v -8.306675 7.074471 3.017636 +v -8.175411 7.074471 3.017636 +v -8.230399 7.115057 3.087933 +v -8.306675 7.842151 2.882273 +v -8.175411 7.842151 2.882274 +v -8.230399 7.828057 2.962212 +v -8.306676 8.517239 3.272035 +v -8.175412 8.517239 3.272035 +v -8.230400 8.455057 3.324211 +v -8.306676 8.702679 4.004546 +v -8.306676 8.455057 4.684882 +v -8.306676 8.455057 3.324211 +v -8.306675 7.828057 2.962212 +v -8.306675 7.115057 3.087933 +v -8.306675 6.649680 3.642547 +v -8.306676 6.649680 4.366545 +v -8.306676 7.115057 4.921160 +v -8.306676 7.828055 5.046881 +v 0.032073 2.303239 7.208142 +v 0.032074 4.409725 7.208142 +v -0.289506 3.909048 7.208142 +v -0.289506 2.344217 7.208142 +v -0.541030 2.156472 7.262802 +v -0.541030 2.381772 7.262802 +v -0.541030 2.381772 7.188977 +v -0.541030 2.156472 7.188977 +v -0.457963 4.050927 7.262802 +v 0.032074 4.779101 7.262802 +v 0.032074 4.779101 7.188977 +v -0.457963 4.050927 7.188977 +v 0.605178 2.381771 7.262802 +v 0.605178 2.156471 7.262802 +v 0.605178 2.156472 7.188977 +v 0.605178 2.381771 7.188977 +v 0.522112 2.156471 7.262802 +v 0.032073 2.077939 7.262800 +v 0.032073 2.077939 7.188977 +v 0.522112 2.156472 7.188977 +v -0.457963 2.156472 7.343778 +v -0.289506 2.344217 7.343778 +v -0.457963 2.381772 7.343778 +v -0.289506 3.909048 7.262802 +v 0.032074 4.409725 7.262800 +v 0.522112 2.381771 7.343778 +v 0.353654 2.358822 7.343778 +v 0.522112 2.156471 7.343778 +v 0.032073 2.303239 7.343778 +v 0.032073 2.077939 7.343778 +v 0.353654 2.358822 7.208142 +v 0.353655 3.909048 7.208142 +v 0.522112 4.050927 7.262802 +v 0.522112 4.050927 7.188977 +v -0.457963 2.156472 7.262802 +v -0.457963 2.156472 7.188977 +v 0.353655 3.909048 7.262802 +v -0.289506 2.344217 7.262802 +v 0.353654 2.358822 7.262802 +v 0.032073 2.303238 7.262802 +v 0.522112 2.381771 7.262802 +v 0.522112 2.381771 7.188977 +v -0.457963 2.381772 7.262802 +v -0.457963 2.381772 7.188977 +v -0.541030 2.156472 7.343778 +v -0.541030 2.381772 7.343778 +v 0.605178 2.381771 7.343778 +v 0.605178 2.156471 7.343778 +v -5.485344 2.303240 7.221334 +v -5.485344 4.409725 7.221334 +v -5.806924 3.909048 7.221334 +v -5.806924 2.344218 7.221334 +v -6.058448 2.156472 7.275995 +v -6.058448 2.381772 7.275995 +v -6.058448 2.381772 7.202170 +v -6.058448 2.156473 7.202170 +v -5.975380 4.050927 7.275995 +v -5.485344 4.779102 7.275995 +v -5.485344 4.779102 7.202170 +v -5.975380 4.050927 7.202169 +v -4.912241 2.381772 7.275996 +v -4.912241 2.156472 7.275996 +v -4.912241 2.156472 7.202171 +v -4.912241 2.381772 7.202171 +v -4.995306 2.156472 7.275996 +v -5.485344 2.077940 7.275994 +v -5.485344 2.077940 7.202169 +v -4.995306 2.156472 7.202171 +v -5.975381 2.156472 7.356970 +v -5.806924 2.344218 7.356970 +v -5.975381 2.381772 7.356970 +v -5.806924 3.909048 7.275995 +v -5.485344 4.409725 7.275994 +v -4.995306 2.381772 7.356971 +v -5.163763 2.358823 7.356971 +v -4.995306 2.156472 7.356971 +v -5.485344 2.303240 7.356970 +v -5.485344 2.077940 7.356970 +v -5.163763 2.358823 7.221335 +v -5.163763 3.909048 7.221335 +v -4.995306 4.050928 7.275996 +v -4.995306 4.050928 7.202170 +v -5.975381 2.156472 7.275995 +v -5.975381 2.156473 7.202170 +v -5.163763 3.909048 7.275996 +v -5.806924 2.344218 7.275995 +v -5.163763 2.358823 7.275996 +v -5.485344 2.303239 7.275995 +v -4.995306 2.381772 7.275996 +v -4.995306 2.381772 7.202171 +v -5.975381 2.381772 7.275995 +v -5.975381 2.381772 7.202170 +v -6.058448 2.156472 7.356970 +v -6.058448 2.381772 7.356970 +v -4.912241 2.381772 7.356971 +v -4.912241 2.156472 7.356971 +v 6.462788 2.303238 7.217344 +v 6.462788 4.409724 7.217344 +v 6.141209 3.909047 7.217344 +v 6.141208 2.344216 7.217344 +v 5.889684 2.156471 7.272005 +v 5.889684 2.381771 7.272005 +v 5.889684 2.381771 7.198180 +v 5.889684 2.156471 7.198180 +v 5.972752 4.050926 7.272005 +v 6.462788 4.779101 7.272005 +v 6.462788 4.779101 7.198180 +v 5.972752 4.050926 7.198179 +v 7.035892 2.381771 7.272005 +v 7.035892 2.156471 7.272005 +v 7.035892 2.156471 7.198180 +v 7.035892 2.381771 7.198180 +v 6.952826 2.156471 7.272005 +v 6.462788 2.077938 7.272003 +v 6.462788 2.077938 7.198179 +v 6.952826 2.156471 7.198180 +v 5.972751 2.156471 7.352980 +v 6.141208 2.344216 7.352980 +v 5.972751 2.381771 7.352980 +v 6.141209 3.909047 7.272005 +v 6.462788 4.409724 7.272003 +v 6.952826 2.381771 7.352980 +v 6.784369 2.358821 7.352980 +v 6.952826 2.156471 7.352980 +v 6.462788 2.303238 7.352980 +v 6.462788 2.077938 7.352980 +v 6.784369 2.358821 7.217344 +v 6.784369 3.909047 7.217344 +v 6.952826 4.050926 7.272005 +v 6.952826 4.050926 7.198179 +v 5.972751 2.156471 7.272005 +v 5.972751 2.156471 7.198180 +v 6.784369 3.909047 7.272005 +v 6.141208 2.344216 7.272005 +v 6.784369 2.358821 7.272005 +v 6.462788 2.303238 7.272005 +v 6.952826 2.381771 7.272005 +v 6.952826 2.381771 7.198180 +v 5.972751 2.381771 7.272005 +v 5.972751 2.381771 7.198180 +v 5.889684 2.156471 7.352980 +v 5.889684 2.381771 7.352980 +v 7.035892 2.381771 7.352980 +v 7.035892 2.156471 7.352980 +v 7.989504 2.303238 4.004544 +v 7.989505 4.409724 4.004544 +v 7.989505 3.909046 4.326124 +v 7.989504 2.344216 4.326124 +v 8.044166 2.156471 4.577648 +v 8.044166 2.381770 4.577648 +v 7.970341 2.381771 4.577648 +v 7.970341 2.156471 4.577648 +v 8.044167 4.050926 4.494581 +v 8.044167 4.779100 4.004544 +v 7.970342 4.779100 4.004544 +v 7.970340 4.050926 4.494581 +v 8.044166 2.381770 3.431440 +v 8.044166 2.156471 3.431440 +v 7.970341 2.156471 3.431440 +v 7.970341 2.381771 3.431440 +v 8.044166 2.156471 3.514506 +v 8.044165 2.077938 4.004544 +v 7.970340 2.077938 4.004544 +v 7.970341 2.156471 3.514506 +v 8.125142 2.156471 4.494581 +v 8.125142 2.344216 4.326124 +v 8.125142 2.381770 4.494581 +v 8.044167 3.909046 4.326124 +v 8.044165 4.409724 4.004544 +v 8.125142 2.381770 3.514506 +v 8.125142 2.358821 3.682963 +v 8.125142 2.156471 3.514506 +v 8.125142 2.303238 4.004544 +v 8.125142 2.077938 4.004544 +v 7.989504 2.358821 3.682963 +v 7.989505 3.909046 3.682963 +v 8.044167 4.050926 3.514506 +v 7.970340 4.050926 3.514506 +v 8.044166 2.156471 4.494581 +v 7.970341 2.156471 4.494581 +v 8.044167 3.909046 3.682963 +v 8.044166 2.344216 4.326124 +v 8.044166 2.358821 3.682963 +v 8.044166 2.303237 4.004544 +v 8.044166 2.381770 3.514506 +v 7.970341 2.381771 3.514506 +v 8.044166 2.381770 4.494581 +v 7.970341 2.381771 4.494581 +v 8.125142 2.156471 4.577648 +v 8.125142 2.381770 4.577648 +v 8.125142 2.381770 3.431440 +v 8.125142 2.156471 3.431440 +v 4.175653 23.253054 1.207701 +v 4.483004 23.283512 1.216166 +v 4.533489 23.226915 0.793925 +v 4.182594 23.240883 0.830203 +v 4.671747 1.267260 0.817280 +v 4.747917 3.816559 0.771316 +v 4.747917 3.816559 0.238091 +v 4.671747 1.267260 0.089002 +v 4.670274 6.821266 0.818753 +v 4.755424 8.921979 0.763809 +v 4.755424 8.921979 0.245598 +v 4.670274 6.821266 0.087529 +v 5.400025 1.267260 0.817280 +v 5.281142 3.816559 0.771317 +v 5.401499 6.821266 0.818754 +v 5.273635 8.921979 0.763809 +v 5.400025 1.267260 0.089002 +v 5.281142 3.816559 0.238091 +v 5.401499 6.821266 0.087528 +v 5.273635 8.921979 0.245599 +v 4.769739 11.041625 0.759693 +v 4.769143 10.993966 0.070554 +v 5.459918 11.012686 0.761097 +v 5.459321 10.965030 0.071956 +v 4.895408 12.495696 0.624777 +v 4.894958 12.459869 0.106697 +v 5.414269 12.473943 0.625831 +v 5.413820 12.438114 0.107753 +v 4.898796 13.959171 0.551494 +v 4.898210 13.912385 -0.125050 +v 5.576359 13.930765 0.552872 +v 5.575775 13.883979 -0.123673 +v 2.338280 1.267536 -2.724316 +v 1.736995 1.267536 -2.724316 +v 1.760954 3.428520 -2.599412 +v 2.198343 3.428520 -2.599412 +v 1.736995 6.106330 -2.724316 +v 2.270738 5.298322 -2.724316 +v 1.736994 1.267536 -2.123031 +v 1.760954 3.428520 -2.162023 +v 1.736995 6.106330 -2.123031 +v 2.338280 1.267536 -2.123031 +v 2.198343 3.428520 -2.162023 +v 2.270738 5.298322 -2.123031 +v 2.815015 3.872790 0.235364 +v 2.815015 3.872790 0.768590 +v 2.891185 1.323491 0.814553 +v 2.891185 1.323491 0.086274 +v 2.633949 8.978212 0.242871 +v 2.633949 8.978212 0.761081 +v 2.892659 6.877498 0.816026 +v 2.892659 6.877498 0.084801 +v 2.281790 3.872790 0.768590 +v 2.162907 1.323491 0.814553 +v 2.115738 8.978212 0.761081 +v 2.161434 6.877498 0.816027 +v 2.281790 3.872790 0.235364 +v 2.162907 1.323491 0.086275 +v 2.115738 8.978212 0.242871 +v 2.161434 6.877498 0.084801 +v 2.793791 11.050198 0.067826 +v 2.793195 11.097857 0.756965 +v 2.103016 11.068916 0.758370 +v 2.103613 11.021260 0.069229 +v 2.667976 12.516101 0.103970 +v 2.667526 12.551928 0.622049 +v 2.148664 12.530173 0.623104 +v 2.149114 12.494345 0.105025 +v 2.664724 13.968618 -0.127777 +v 2.664139 14.015405 0.548767 +v 1.986575 13.986998 0.550145 +v 1.987160 13.940212 -0.126399 +v -0.927404 6.114937 -2.576771 +v -0.443259 6.846743 -2.576771 +v -0.443259 4.995204 -2.576771 +v -0.927404 4.995204 -2.576771 +v -1.026729 4.941527 -2.511324 +v -1.026729 6.124244 -2.511324 +v -1.026729 6.124244 -2.623685 +v -1.026729 4.941527 -2.623685 +v -0.443259 7.006183 -2.511324 +v -0.443259 7.006183 -2.623685 +v 0.140211 6.124244 -2.511324 +v 0.140211 4.941527 -2.511324 +v 0.140211 4.941527 -2.623685 +v 0.140211 6.124244 -2.623685 +v -0.443259 4.941527 -2.511324 +v -0.443259 4.941527 -2.623685 +v 0.040887 6.114937 -2.576771 +v 0.040887 4.995204 -2.576771 +v -0.927404 6.114937 -2.623685 +v -0.927404 4.995204 -2.623685 +v -0.443259 6.846743 -2.623685 +v 0.040887 6.114937 -2.623685 +v 0.040887 4.995204 -2.623685 +v -0.443259 4.995204 -2.623685 +v -7.676232 1.226863 0.579004 +v -7.820205 3.717741 0.740305 +v -7.820205 3.717741 1.244465 +v -7.676232 1.226863 1.272082 +v -7.676232 5.872984 0.656859 +v -7.676232 6.804344 1.272082 +v -8.324365 3.717741 1.244465 +v -8.369309 1.226863 1.272081 +v -8.369308 6.804344 1.272081 +v -8.324365 3.717741 0.740305 +v -8.369309 1.226863 0.579004 +v -8.369308 5.872984 0.656858 +v -8.369309 1.226863 7.430092 +v -8.225338 3.717741 7.268791 +v -8.225337 3.717741 6.764630 +v -8.369309 1.226863 6.737015 +v -8.369309 5.872984 7.352238 +v -8.369309 6.804344 6.737015 +v -7.721177 3.717741 6.764631 +v -7.676233 1.226863 6.737015 +v -7.676232 6.804344 6.737015 +v -7.721177 3.717741 7.268792 +v -7.676233 1.226863 7.430092 +v -7.676232 5.872984 7.352238 +v 0.125889 8.220344 -3.247035 +v 0.125889 8.388115 -3.195977 +v 0.125889 8.091660 -2.222249 +v 0.125889 7.923891 -2.273325 +v -0.342264 8.269616 -2.168066 +v -0.342264 8.437381 -2.116987 +v -0.342264 8.733835 -3.090707 +v -0.342264 8.566062 -3.141786 +v -0.443258 8.448682 -2.113552 +v -0.443258 8.280909 -2.164633 +v -0.443257 8.745133 -3.087272 +v -0.443257 8.577360 -3.138354 +v -1.012404 8.220344 -3.247035 +v -1.012405 7.923891 -2.273325 +v -1.012405 8.091661 -2.222249 +v -1.012404 8.388114 -3.195960 +v -0.544251 8.437383 -2.116987 +v -0.544251 8.733835 -3.090707 +v -0.544251 8.566062 -3.141786 +v -0.544251 8.269616 -2.168066 +v 0.125888 7.964036 2.305606 +v 0.125889 8.134858 2.265937 +v 0.125889 8.364986 3.257439 +v 0.125889 8.194155 3.297090 +v -0.342264 8.546191 3.215383 +v -0.342264 8.717019 3.175738 +v -0.342264 8.486897 2.184243 +v -0.342264 8.316061 2.223894 +v -0.443258 8.728525 3.173060 +v -0.443258 8.557688 3.212710 +v -0.443258 8.498399 2.181570 +v -0.443258 8.327562 2.221221 +v -1.012405 7.964036 2.305606 +v -1.012405 8.194155 3.297090 +v -1.012405 8.364986 3.257439 +v -1.012405 8.134868 2.265952 +v -0.544251 8.546191 3.215383 +v -0.544251 8.717019 3.175738 +v -0.544252 8.486897 2.184243 +v -0.544252 8.316061 2.223894 +v 0.125888 7.729860 1.719361 +v 0.125888 7.900682 1.679691 +v 0.125889 8.130809 2.671193 +v 0.125889 7.959977 2.710845 +v -0.342264 8.252721 1.597998 +v -0.342264 8.482843 2.589495 +v -0.342264 8.081886 1.637649 +v -0.443258 8.264222 1.595326 +v -0.443258 8.494348 2.586816 +v -0.443258 8.093387 1.634976 +v -1.012405 7.729860 1.719361 +v -1.012405 7.959979 2.710845 +v -1.012405 8.130811 2.671193 +v -1.012405 7.900692 1.679708 +v -0.544251 8.482843 2.589495 +v -0.544252 8.252721 1.597998 +v -0.544252 8.081886 1.637649 +v 0.125888 7.490499 0.975419 +v 0.125888 7.661322 0.935747 +v 0.125889 7.891449 1.927253 +v 0.125889 7.720617 1.966902 +v -0.342264 8.013359 0.854055 +v -0.342265 8.243484 1.845551 +v -0.342264 7.842525 0.893705 +v -0.443258 8.024862 0.851382 +v -0.443258 8.254988 1.842874 +v -0.443258 7.854025 0.891033 +v -1.012405 7.490499 0.975419 +v -1.012405 7.720617 1.966902 +v -1.012405 7.891449 1.927253 +v -1.012405 7.661330 0.935764 +v -0.544251 8.243484 1.845551 +v -0.544252 8.013359 0.854055 +v -0.544252 7.842525 0.893705 +v 0.125888 7.219489 0.257531 +v 0.125888 7.390311 0.217859 +v 0.125889 7.620439 1.209362 +v 0.125889 7.449607 1.249013 +v -0.342264 7.742350 0.136167 +v -0.342265 7.972472 1.127663 +v -0.342264 7.571515 0.175817 +v -0.443258 7.753851 0.133495 +v -0.443258 7.983978 1.124985 +v -0.443258 7.583015 0.173146 +v -1.012405 7.219489 0.257531 +v -1.012405 7.449607 1.249013 +v -1.012405 7.620439 1.209362 +v -1.012405 7.390321 0.217876 +v -0.544251 7.972472 1.127663 +v -0.544252 7.742350 0.136167 +v -0.544252 7.571515 0.175817 +v 0.125888 7.426631 -0.952069 +v 0.125889 7.598213 -0.915829 +v 0.125889 7.387752 0.080035 +v 0.125889 7.216172 0.043773 +v -0.342265 7.569754 0.118501 +v -0.342265 7.741333 0.154765 +v -0.342264 7.951793 -0.841090 +v -0.443258 7.752889 0.157200 +v -0.443258 7.581305 0.120936 +v -0.443258 7.963347 -0.838653 +v -1.012405 7.426631 -0.952069 +v -1.012405 7.216172 0.043773 +v -1.012405 7.387752 0.080035 +v -1.012405 7.598215 -0.915812 +v -0.544252 7.569755 0.118501 +v -0.544252 7.741333 0.154765 +v -0.544252 7.951794 -0.841090 +v 0.125888 7.548561 -1.378403 +v 0.125889 7.720144 -1.342160 +v 0.125889 7.509683 -0.346299 +v 0.125889 7.338101 -0.382559 +v -0.342265 7.691683 -0.307832 +v -0.342264 7.863263 -0.271568 +v -0.342264 8.073722 -1.267423 +v -0.443258 7.874820 -0.269133 +v -0.443258 7.703234 -0.305397 +v -0.443258 8.085277 -1.264985 +v -1.012405 7.548561 -1.378403 +v -1.012405 7.338101 -0.382559 +v -1.012405 7.509683 -0.346299 +v -1.012405 7.720146 -1.342143 +v -0.544251 7.691683 -0.307832 +v -0.544251 7.863263 -0.271568 +v -0.544252 8.073724 -1.267423 +v 0.125888 7.832724 -2.270370 +v 0.125889 8.004307 -2.234131 +v 0.125889 7.793845 -1.238266 +v 0.125889 7.622263 -1.274529 +v -0.342264 7.975846 -1.199801 +v -0.342264 8.147426 -1.163537 +v -0.342264 8.357885 -2.159392 +v -0.443258 8.158981 -1.161102 +v -0.443258 7.987396 -1.197366 +v -0.443257 8.369440 -2.156955 +v -1.012405 7.832724 -2.270370 +v -1.012405 7.622263 -1.274529 +v -1.012405 7.793846 -1.238266 +v -1.012404 8.004307 -2.234112 +v -0.544251 7.975846 -1.199801 +v -0.544251 8.147426 -1.163537 +v -0.544251 8.357885 -2.159392 +v -8.912474 11.031324 3.435404 +v -8.846989 11.194007 3.435404 +v -7.902801 10.813814 3.435403 +v -7.968303 10.651135 3.435403 +v -7.833316 10.986370 3.903557 +v -7.767808 11.149046 3.903557 +v -8.711987 11.529237 3.903556 +v -8.777492 11.366553 3.903556 +v -7.763401 11.160003 4.004550 +v -7.828911 10.997322 4.004550 +v -8.707580 11.540192 4.004550 +v -8.773089 11.377510 4.004550 +v -8.912474 11.031324 4.573697 +v -7.968303 10.651135 4.573697 +v -7.902801 10.813814 4.573697 +v -8.846970 11.194004 4.573697 +v -7.833316 10.986370 4.105544 +v -7.767808 11.149046 4.105544 +v -8.711987 11.529237 4.105544 +v -8.777492 11.366553 4.105544 +v -4.525187 9.604162 3.435403 +v -5.521032 9.814617 3.435403 +v -5.484768 9.986203 3.435403 +v -4.488920 9.775745 3.435403 +v -5.410044 10.339779 3.903555 +v -4.414185 10.129323 3.903555 +v -4.450459 9.957743 3.903555 +v -4.411753 10.140882 4.004549 +v -5.407596 10.351342 4.004549 +v -4.448018 9.969293 4.004549 +v -4.525187 9.604162 4.573696 +v -4.488922 9.775754 4.573696 +v -5.484768 9.986203 4.573695 +v -5.521032 9.814617 4.573695 +v -4.414185 10.129323 4.105543 +v -5.410044 10.339779 4.105543 +v -4.450459 9.957743 4.105543 +v -3.725210 9.404657 3.435403 +v -4.727868 9.579854 3.435403 +v -4.697678 9.752620 3.435403 +v -3.695029 9.577415 3.435403 +v -4.635478 10.108606 3.903555 +v -3.632823 9.933414 3.903555 +v -3.663011 9.760663 3.903555 +v -3.630792 9.945055 4.004549 +v -4.633441 10.120243 4.004549 +v -3.660975 9.772294 4.004549 +v -3.725210 9.404657 4.573696 +v -3.695029 9.577424 4.573696 +v -4.697678 9.752620 4.573696 +v -4.727868 9.579854 4.573696 +v -3.632823 9.933414 4.105543 +v -4.635478 10.108606 4.105543 +v -3.663011 9.760663 4.105543 +v -2.825487 9.253774 3.435403 +v -3.835884 9.376645 3.435403 +v -3.814717 9.550737 3.435403 +v -2.804317 9.427873 3.435403 +v -3.771090 9.909484 3.903555 +v -2.760688 9.786617 3.903555 +v -2.781863 9.612530 3.903555 +v -2.759268 9.798346 4.004549 +v -3.769664 9.921204 4.004549 +v -2.780437 9.624252 4.004549 +v -2.825487 9.253774 4.573696 +v -2.804320 9.427876 4.573696 +v -3.814718 9.550737 4.573696 +v -3.835882 9.376645 4.573696 +v -2.760688 9.786617 4.105543 +v -3.771090 9.909484 4.105543 +v -2.781864 9.612530 4.105543 +v -1.916558 9.099153 3.435403 +v -2.926955 9.222018 3.435403 +v -2.905781 9.396115 3.435403 +v -1.895385 9.273246 3.435403 +v -2.862163 9.754860 3.903555 +v -1.851764 9.631997 3.903556 +v -1.872930 9.457903 3.903556 +v -1.850336 9.643720 4.004549 +v -2.860733 9.766582 4.004549 +v -1.871507 9.469625 4.004549 +v -1.916558 9.099153 4.573696 +v -1.895386 9.273250 4.573696 +v -2.905782 9.396115 4.573696 +v -2.926952 9.222018 4.573696 +v -1.851764 9.631997 4.105543 +v -2.862163 9.754860 4.105543 +v -1.872930 9.457903 4.105543 +v -0.916265 9.037489 3.435403 +v -1.933530 9.071821 3.435403 +v -1.927615 9.247103 3.435403 +v -0.910350 9.212770 3.435403 +v -1.915416 9.608285 3.903556 +v -0.898164 9.573951 3.903556 +v -0.904077 9.398677 3.903556 +v -0.897761 9.585756 4.004549 +v -1.915027 9.620090 4.004549 +v -0.903672 9.410481 4.004550 +v -0.916265 9.037489 4.573696 +v -0.910350 9.212770 4.573696 +v -1.927615 9.247103 4.573696 +v -1.933530 9.071821 4.573696 +v -0.898164 9.573951 4.105543 +v -1.915416 9.608285 4.105543 +v -0.904077 9.398677 4.105543 +v 0.098525 9.003066 3.435403 +v -0.917858 9.057508 3.435403 +v -0.908479 9.232633 3.435403 +v 0.107901 9.178195 3.435403 +v -0.889152 9.593499 3.903556 +v 0.127235 9.539063 3.903556 +v 0.117852 9.363945 3.903556 +v 0.127864 9.550862 4.004550 +v -0.888523 9.605289 4.004550 +v 0.118487 9.375740 4.004550 +v 0.098525 9.003066 4.573697 +v 0.107898 9.178195 4.573697 +v -0.908477 9.232633 4.573697 +v -0.917858 9.057508 4.573697 +v 0.127235 9.539063 4.105543 +v -0.889152 9.593499 4.105544 +v 0.117852 9.363945 4.105543 +v -7.140497 10.367755 3.435403 +v -8.136342 10.578209 3.435403 +v -8.100086 10.749797 3.435403 +v -7.104231 10.539337 3.435402 +v -8.025360 11.103369 3.903555 +v -7.029497 10.892917 3.903555 +v -7.065768 10.721334 3.903555 +v -7.027062 10.904475 4.004548 +v -8.022904 11.114935 4.004548 +v -7.063326 10.732885 4.004549 +v -7.140497 10.367755 4.573695 +v -7.104231 10.539345 4.573695 +v -8.100086 10.749797 4.573695 +v -8.136342 10.578209 4.573695 +v -7.029497 10.892917 4.105542 +v -8.025360 11.103369 4.105542 +v -7.065768 10.721334 4.105542 +v -6.225498 10.090338 3.435403 +v -7.221344 10.300794 3.435403 +v -7.185081 10.472381 3.435403 +v -6.189229 10.261920 3.435403 +v -7.110355 10.825954 3.903555 +v -6.114499 10.615499 3.903555 +v -6.150771 10.443917 3.903555 +v -6.112064 10.627060 4.004549 +v -7.107907 10.837520 4.004548 +v -6.148331 10.455468 4.004549 +v -6.225498 10.090338 4.573695 +v -6.189230 10.261928 4.573695 +v -7.185081 10.472381 4.573695 +v -7.221344 10.300794 4.573695 +v -6.114499 10.615499 4.105542 +v -7.110355 10.825954 4.105542 +v -6.150771 10.443917 4.105542 +v -5.302460 9.829968 3.435403 +v -6.298305 10.040421 3.435403 +v -6.262042 10.212009 3.435403 +v -5.266192 10.001551 3.435403 +v -6.187316 10.565583 3.903555 +v -5.191457 10.355129 3.903555 +v -5.227733 10.183548 3.903555 +v -5.189027 10.366690 4.004549 +v -6.184870 10.577147 4.004548 +v -5.225292 10.195098 4.004549 +v -5.302460 9.829968 4.573696 +v -5.266193 10.001559 4.573696 +v -6.262042 10.212009 4.573695 +v -6.298305 10.040421 4.573695 +v -5.191457 10.355129 4.105543 +v -6.187316 10.565583 4.105542 +v -5.227733 10.183548 4.105543 +v 8.751835 11.073284 3.435406 +v 7.807665 10.693095 3.435405 +v 7.742163 10.855774 3.435405 +v 8.686349 11.235967 3.435405 +v 7.672678 11.028330 3.903558 +v 7.607171 11.191006 3.903558 +v 8.551349 11.571197 3.903558 +v 8.616853 11.408513 3.903558 +v 7.668272 11.039282 4.004552 +v 7.602763 11.201962 4.004552 +v 8.546941 11.582151 4.004552 +v 8.612451 11.419469 4.004552 +v 8.751835 11.073284 4.573699 +v 8.686330 11.235964 4.573699 +v 7.742163 10.855774 4.573699 +v 7.807665 10.693095 4.573699 +v 7.607171 11.191006 4.105546 +v 7.672678 11.028330 4.105546 +v 8.551349 11.571197 4.105546 +v 8.616853 11.408513 4.105546 +v 4.364550 9.646123 3.435404 +v 4.328283 9.817705 3.435404 +v 5.324131 10.028165 3.435404 +v 5.360395 9.856579 3.435404 +v 5.249407 10.381739 3.903557 +v 4.253548 10.171285 3.903557 +v 4.289822 9.999702 3.903557 +v 4.251115 10.182843 4.004550 +v 5.246959 10.393303 4.004550 +v 4.287380 10.011253 4.004550 +v 4.364550 9.646123 4.573697 +v 5.360395 9.856579 4.573697 +v 5.324131 10.028165 4.573697 +v 4.328284 9.817715 4.573697 +v 5.249407 10.381739 4.105544 +v 4.253548 10.171285 4.105544 +v 4.289822 9.999702 4.105544 +v 3.564572 9.446617 3.435404 +v 3.534391 9.619375 3.435404 +v 4.537041 9.794579 3.435404 +v 4.567231 9.621816 3.435404 +v 4.474841 10.150567 3.903557 +v 3.472185 9.975375 3.903557 +v 3.502373 9.802625 3.903557 +v 3.470154 9.987017 4.004550 +v 4.472804 10.162204 4.004550 +v 3.500337 9.814256 4.004550 +v 3.564572 9.446617 4.573697 +v 4.567231 9.621816 4.573697 +v 4.537041 9.794579 4.573697 +v 3.534391 9.619385 4.573697 +v 4.474841 10.150567 4.105544 +v 3.472185 9.975375 4.105544 +v 3.502373 9.802625 4.105544 +v 2.664850 9.295735 3.435404 +v 2.643680 9.469832 3.435404 +v 3.654080 9.592699 3.435404 +v 3.675246 9.418605 3.435404 +v 3.610452 9.951445 3.903557 +v 2.600050 9.828578 3.903557 +v 2.621226 9.654490 3.903557 +v 2.598630 9.840306 4.004550 +v 3.609026 9.963165 4.004550 +v 2.619799 9.666214 4.004550 +v 2.664849 9.295735 4.573697 +v 3.675245 9.418605 4.573697 +v 3.654080 9.592699 4.573697 +v 2.643682 9.469836 4.573697 +v 3.610452 9.951445 4.105544 +v 2.600050 9.828578 4.105544 +v 2.621225 9.654490 4.105544 +v 1.755920 9.141115 3.435405 +v 1.734747 9.315207 3.435405 +v 2.745144 9.438076 3.435405 +v 2.766317 9.263979 3.435405 +v 2.701525 9.796821 3.903557 +v 1.691126 9.673960 3.903557 +v 1.712292 9.499866 3.903557 +v 1.689698 9.685682 4.004550 +v 2.700094 9.808544 4.004550 +v 1.710869 9.511588 4.004550 +v 1.755920 9.141115 4.573697 +v 2.766314 9.263979 4.573697 +v 2.745143 9.438076 4.573697 +v 1.734749 9.315212 4.573697 +v 2.701525 9.796821 4.105544 +v 1.691126 9.673960 4.105544 +v 1.712292 9.499866 4.105544 +v 0.755627 9.079452 3.435405 +v 0.749712 9.254731 3.435405 +v 1.766977 9.289065 3.435405 +v 1.772892 9.113784 3.435405 +v 1.754778 9.650248 3.903557 +v 0.737526 9.615912 3.903557 +v 0.743439 9.440639 3.903557 +v 0.737123 9.627718 4.004551 +v 1.754389 9.662052 4.004550 +v 0.743034 9.452444 4.004551 +v 0.755627 9.079452 4.573698 +v 1.772892 9.113784 4.573697 +v 1.766977 9.289065 4.573697 +v 0.749712 9.254731 4.573698 +v 1.754778 9.650248 4.105544 +v 0.737526 9.615912 4.105544 +v 0.743439 9.440639 4.105544 +v -0.259163 9.045029 3.435405 +v -0.268539 9.220156 3.435405 +v 0.747841 9.274595 3.435405 +v 0.757220 9.099471 3.435405 +v 0.728514 9.635462 3.903558 +v -0.287873 9.581025 3.903558 +v -0.278490 9.405908 3.903558 +v -0.288501 9.592824 4.004551 +v 0.727885 9.647251 4.004551 +v -0.279125 9.417702 4.004551 +v -0.259163 9.045029 4.573698 +v 0.757220 9.099471 4.573698 +v 0.747839 9.274595 4.573698 +v -0.268536 9.220156 4.573698 +v 0.728514 9.635462 4.105545 +v -0.287873 9.581025 4.105545 +v -0.278490 9.405908 4.105545 +v 6.979859 10.409715 3.435404 +v 6.943593 10.581297 3.435404 +v 7.939448 10.791757 3.435404 +v 7.975703 10.620169 3.435404 +v 7.864722 11.145329 3.903557 +v 6.868859 10.934876 3.903557 +v 6.905130 10.763294 3.903557 +v 6.866425 10.946435 4.004550 +v 7.862266 11.156895 4.004550 +v 6.902688 10.774845 4.004550 +v 6.979859 10.409715 4.573698 +v 7.975703 10.620169 4.573698 +v 7.939448 10.791757 4.573698 +v 6.943593 10.581305 4.573698 +v 7.864722 11.145329 4.105545 +v 6.868859 10.934876 4.105545 +v 6.905130 10.763294 4.105545 +v 6.064860 10.132298 3.435404 +v 6.028591 10.303881 3.435404 +v 7.024443 10.514339 3.435404 +v 7.060706 10.342753 3.435404 +v 6.949717 10.867913 3.903557 +v 5.953861 10.657460 3.903557 +v 5.990133 10.485878 3.903557 +v 5.951426 10.669021 4.004550 +v 6.947268 10.879478 4.004550 +v 5.987692 10.497428 4.004550 +v 6.064860 10.132298 4.573698 +v 7.060706 10.342753 4.573698 +v 7.024443 10.514339 4.573698 +v 6.028593 10.303889 4.573698 +v 6.949717 10.867913 4.105545 +v 5.953861 10.657460 4.105545 +v 5.990133 10.485878 4.105545 +v 5.141823 9.871928 3.435404 +v 5.105555 10.043512 3.435404 +v 6.101403 10.253970 3.435404 +v 6.137667 10.082383 3.435404 +v 6.026678 10.607544 3.903557 +v 5.030820 10.397090 3.903557 +v 5.067095 10.225510 3.903557 +v 5.028390 10.408650 4.004550 +v 6.024232 10.619107 4.004550 +v 5.064654 10.237059 4.004550 +v 5.141823 9.871928 4.573697 +v 6.137667 10.082383 4.573698 +v 6.101403 10.253970 4.573698 +v 5.105556 10.043520 4.573697 +v 6.026678 10.607544 4.105545 +v 5.030820 10.397090 4.105544 +v 5.067095 10.225510 4.105544 +v 2.417334 14.879411 -0.157506 +v 1.994648 16.926769 -0.298724 +v 1.909423 14.900703 -0.158539 +v 2.416871 14.842373 -0.693086 +v 2.502082 16.867332 -0.849278 +v 1.908945 14.862559 -0.710127 +v 1.994170 16.888626 -0.850310 +v 2.431423 15.156576 3.856914 +v 2.516649 17.182642 3.716730 +v 2.008737 17.203936 3.715697 +v 1.923512 15.177868 3.855881 +v 2.430969 15.120289 3.332151 +v 1.923057 15.141580 3.331118 +v 2.008282 17.167650 3.190934 +v 5.957858 15.008731 3.864084 +v 6.043084 17.034801 3.723900 +v 5.432909 17.060381 3.722659 +v 5.347682 15.034313 3.862843 +v 5.957404 14.972442 3.339320 +v 6.042629 16.998512 3.199137 +v 5.347229 14.998023 3.338081 +v 5.943770 14.731565 -0.150338 +v 6.028995 16.757635 -0.290521 +v 5.333596 14.757145 -0.151578 +v 5.943306 14.694530 -0.685914 +v 6.028533 16.720596 -0.826100 +v 5.333131 14.720112 -0.687156 +v 5.418357 16.746176 -0.827341 +v 2.050006 18.216015 -0.942151 +v 2.557918 18.194719 -0.941118 +v 2.050484 18.254158 -0.390564 +v 2.572484 18.510031 3.624888 +v 2.064573 18.531321 3.623855 +v 2.064118 18.495035 3.099093 +v 6.098918 18.362185 3.632058 +v 5.488744 18.387768 3.630818 +v 6.098464 18.325901 3.107296 +v 6.084368 18.047983 -0.917941 +v 6.084832 18.085020 -0.382363 +v 5.474193 18.073565 -0.919182 +v 3.269593 17.719748 3.678935 +v 3.301549 18.479464 3.626372 +v 2.060710 18.434816 2.226678 +v 2.028753 17.675097 2.279243 +v 6.088240 18.145241 0.490052 +v 6.056282 17.385523 0.542615 +v 4.713170 17.344410 -0.868099 +v 4.745127 18.104128 -0.920664 +v 2.053892 18.314373 0.481849 +v 2.021935 17.554659 0.534413 +v 2.032281 17.779789 1.395418 +v 2.057301 18.374592 1.354263 +v 6.095054 18.265676 2.234881 +v 6.063099 17.505959 2.287445 +v 6.066626 17.610653 1.403620 +v 6.091649 18.205460 1.362466 +v 4.005594 17.854092 3.669007 +v 4.727724 17.658613 3.681900 +v 4.759680 18.418335 3.629336 +v 4.030614 18.448900 3.627853 +v 3.991043 17.539890 -0.880991 +v 3.255026 17.404434 -0.887071 +v 3.286984 18.164152 -0.939638 +v 4.016048 18.133589 -0.938154 +v 8.254710 1.226861 0.591258 +v 8.110739 3.717739 0.752560 +v 8.110739 3.717739 1.256720 +v 8.254710 1.226861 1.284336 +v 8.254711 5.872983 0.669113 +v 8.254711 6.804342 1.284336 +v 7.606578 3.717739 1.256720 +v 7.561633 1.226862 1.284336 +v 7.561633 6.804342 1.284336 +v 7.606578 3.717739 0.752560 +v 7.561633 1.226862 0.591258 +v 7.561633 5.872983 0.669112 +v 7.472826 1.226862 7.432425 +v 7.616798 3.717739 7.271124 +v 7.616798 3.717739 6.766964 +v 7.472826 1.226862 6.739347 +v 7.472826 5.872983 7.354571 +v 7.472826 6.804342 6.739347 +v 8.120959 3.717739 6.766964 +v 8.165903 1.226861 6.739347 +v 8.165903 6.804342 6.739347 +v 8.120958 3.717739 7.271124 +v 8.165903 1.226861 7.432425 +v 8.165903 5.872983 7.354571 +# 1444 vertices + +vn -0.999554 0.029865 -0.000000 +vn -0.999998 0.002037 -0.000000 +vn -0.999998 0.002089 -0.000000 +vn -0.999974 0.007228 -0.000000 +vn -0.999718 0.023752 0.000114 +vn -0.999722 0.023555 0.000115 +vn -0.999975 0.007064 -0.000000 +vn -0.000000 0.018027 0.999837 +vn -0.000000 0.001155 0.999999 +vn -0.000000 0.001142 0.999999 +vn -0.000000 0.018027 0.999838 +vn -0.000000 0.005038 0.999987 +vn -0.000566 0.013807 0.999904 +vn -0.000553 0.014094 0.999900 +vn -0.000000 0.005081 0.999987 +vn 0.998914 0.046583 -0.000000 +vn 0.999994 0.003393 -0.000000 +vn 0.999994 0.003313 -0.000000 +vn 0.999950 0.009961 -0.000000 +vn 0.999892 -0.014626 0.001529 +vn 0.999904 -0.013758 0.001511 +vn 0.999948 0.010210 -0.000000 +vn 0.000000 0.058383 -0.998294 +vn 0.000000 0.004243 -0.999991 +vn 0.000000 0.004284 -0.999991 +vn -0.000000 0.012221 -0.999925 +vn -0.000427 -0.003510 -0.999994 +vn -0.000437 -0.005415 -0.999985 +vn -0.000000 0.012093 -0.999927 +vn -0.998903 0.046770 -0.002455 +vn -0.998976 0.045185 -0.002349 +vn 0.000347 0.046611 0.998913 +vn 0.000356 0.046871 0.998901 +vn 0.999523 -0.030871 0.000094 +vn 0.999595 -0.028451 -0.000027 +vn 0.001092 -0.030196 -0.999543 +vn 0.001081 -0.030485 -0.999535 +vn -0.999025 0.044088 -0.002184 +vn -0.999025 0.044085 -0.002184 +vn 0.000955 0.071164 0.997464 +vn 0.000955 0.071165 0.997464 +vn 0.999211 -0.039658 0.001877 +vn 0.999212 -0.039653 0.001877 +vn -0.000770 -0.066737 -0.997770 +vn -0.000770 -0.066739 -0.997770 +vn -0.999997 0.002351 0.000703 +vn 0.000066 0.050011 0.998749 +vn 0.993882 -0.110243 0.006764 +vn -0.004598 -0.157544 -0.987501 +vn 0.999998 0.002089 0.000000 +vn 0.999998 0.002037 0.000000 +vn 0.999554 0.029865 0.000000 +vn 0.999734 0.023007 0.001877 +vn 0.999705 0.024236 0.001855 +vn 0.998703 0.050923 0.000000 +vn 0.998706 0.050864 0.000000 +vn 0.000000 0.001142 0.999999 +vn 0.000000 0.001155 0.999999 +vn 0.000000 0.018027 0.999837 +vn 0.000628 0.014125 0.999900 +vn 0.000643 0.013698 0.999906 +vn 0.000000 0.008820 0.999961 +vn 0.000000 0.007470 0.999972 +vn -0.999994 0.003313 -0.000001 +vn -0.999994 0.003394 -0.000001 +vn -0.998914 0.046583 -0.000001 +vn -0.999902 -0.013957 -0.000249 +vn -0.999905 -0.013796 -0.000251 +vn -0.999423 -0.033972 -0.000000 +vn -0.999423 -0.033966 -0.000000 +vn -0.000000 0.004284 -0.999991 +vn -0.000000 0.004243 -0.999991 +vn -0.000000 0.058383 -0.998294 +vn 0.000361 -0.005318 -0.999986 +vn 0.000353 -0.003672 -0.999993 +vn 0.000000 0.007374 -0.999973 +vn 0.000000 0.010706 -0.999943 +vn 1.000000 -0.000423 -0.000549 +vn 0.999994 0.003281 -0.000743 +vn -0.000326 0.045127 0.998981 +vn -0.000227 0.042047 0.999115 +vn -0.999873 0.015817 -0.001775 +vn -0.999884 0.015136 -0.001720 +vn -0.001102 -0.028818 -0.999584 +vn -0.001224 -0.025521 -0.999673 +vn 0.999025 0.044085 -0.002184 +vn 0.999025 0.044088 -0.002184 +vn -0.000955 0.071165 0.997464 +vn -0.000955 0.071164 0.997464 +vn -0.999212 -0.039653 0.001876 +vn -0.999211 -0.039658 0.001877 +vn 0.000770 -0.066739 -0.997770 +vn 0.000770 -0.066737 -0.997770 +vn 0.999997 0.002350 0.000704 +vn -0.000066 0.050011 0.998749 +vn -0.993882 -0.110243 0.006763 +vn 0.004598 -0.157544 -0.987501 +vn -1.000000 0.000000 -0.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 -0.000000 -0.000000 +vn 1.000000 -0.000000 0.000000 +vn 1.000000 0.000000 -0.000000 +vn -0.000000 0.000000 -1.000000 +vn -0.998585 -0.005804 -0.052854 +vn -0.998585 -0.005804 0.052854 +vn -0.012865 -0.292908 0.956054 +vn -0.000000 -0.292378 0.956303 +vn 0.022394 -0.293337 0.955747 +vn 0.998709 -0.007669 0.050213 +vn 0.998867 -0.009404 -0.046641 +vn 0.010261 -0.293697 -0.955844 +vn 0.000000 -0.292377 -0.956303 +vn -0.012865 -0.292906 -0.956055 +vn -0.185816 -0.515752 0.836345 +vn -0.185816 -0.515752 -0.836345 +vn -0.185816 -0.515751 -0.836345 +vn 0.241136 -0.518426 -0.820419 +vn 0.153141 -0.516646 0.842392 +vn 0.095537 0.586991 -0.803937 +vn 0.051136 0.628276 -0.776308 +vn 0.047656 0.631386 -0.774003 +vn 0.095537 0.586991 -0.803936 +vn -0.044076 0.628164 -0.776832 +vn -0.041412 0.630921 -0.774741 +vn -0.082915 0.586497 -0.805696 +vn -0.082915 0.586497 -0.805697 +vn -0.096650 0.596920 0.796458 +vn 0.095537 0.586991 0.803936 +vn 0.000000 0.672137 0.740426 +vn -0.000000 -0.976053 -0.217533 +vn 0.686000 -0.710178 -0.158277 +vn -0.686000 -0.710177 -0.158277 +vn -0.705809 0.708353 0.008360 +vn 0.000000 0.999973 0.007343 +vn 0.000000 0.975770 0.218799 +vn -0.691847 0.704549 0.157982 +vn 0.705809 0.708353 0.008360 +vn 0.691847 0.704549 0.157983 +vn -0.999172 -0.000000 0.040688 +vn -0.985833 -0.000000 0.167729 +vn 0.999172 -0.000000 0.040688 +vn 0.996207 -0.000000 -0.087016 +vn -0.703444 0.695396 -0.146941 +vn 0.000000 0.978396 -0.206740 +vn 0.703444 0.695396 -0.146941 +vn -0.996207 -0.000000 -0.087016 +vn -0.996207 -0.000000 -0.087017 +vn 0.985833 -0.000000 0.167729 +vn 0.000000 0.057703 -0.998334 +vn 0.022455 0.002147 -0.999745 +vn 0.022621 0.001736 -0.999743 +vn 0.045190 -0.054313 -0.997501 +vn 0.999938 0.011086 0.000000 +vn 0.999999 0.001104 0.000000 +vn 0.999999 0.001081 0.000000 +vn 0.999939 0.011086 0.000000 +vn 0.999960 -0.008947 0.000000 +vn -0.000000 0.018041 0.999837 +vn 0.007066 0.000536 0.999975 +vn 0.007014 0.000664 0.999975 +vn 0.014139 -0.016993 0.999756 +vn -0.997910 0.064621 -0.000000 +vn -0.999916 0.012938 -0.000000 +vn -0.999917 0.012841 -0.000000 +vn -0.999251 -0.038689 -0.000000 +vn -0.000399 0.005460 0.999985 +vn -0.000391 0.005345 0.999986 +vn 0.999846 -0.017551 0.000390 +vn 0.999847 -0.017463 0.000388 +vn -0.999856 0.016986 -0.000371 +vn -0.999854 0.017101 -0.000374 +vn -1.000000 0.000000 0.000000 +vn 0.999120 -0.041885 0.002031 +vn -0.999120 0.041887 -0.002031 +vn 0.041928 0.996738 -0.068963 +vn 0.000431 -0.003976 -0.999992 +vn 0.000421 -0.003886 -0.999992 +vn 0.000851 -0.007861 -0.999969 +vn 0.000864 0.068989 0.997617 +vn -0.000864 -0.068988 -0.997617 +vn 0.041927 0.996738 -0.068964 +vn 0.041928 0.996738 -0.068966 +vn 0.041928 0.996737 -0.068966 +vn 0.041925 0.996738 -0.068964 +vn 0.041928 0.996737 -0.068967 +vn -0.029387 -0.664760 0.746478 +vn 0.785550 -0.617370 0.042013 +vn -0.030594 -0.761180 -0.647818 +vn -0.030594 -0.761181 -0.647818 +vn -0.834630 -0.549448 0.038719 +vn 0.999120 -0.041887 0.002032 +vn -0.000864 -0.068989 -0.997617 +vn -0.041924 -0.996738 0.068964 +vn -0.041927 -0.996738 0.068963 +vn -0.041919 -0.996738 0.068964 +vn -0.041927 -0.996738 0.068960 +vn 0.041923 0.996738 -0.068964 +vn 0.041927 0.996737 -0.068973 +vn 0.041931 0.996737 -0.068965 +vn 0.041927 0.996737 -0.068968 +vn -0.000002 1.000000 0.000000 +vn 0.000000 1.000000 -0.000001 +vn 0.000002 1.000000 -0.000000 +vn 0.000000 1.000000 0.000001 +vn -0.000002 -1.000000 0.000000 +vn -0.000000 -1.000000 0.000001 +vn 0.000004 -1.000000 -0.000000 +vn 0.000000 -1.000000 -0.000003 +vn -0.000790 0.010805 0.999941 +vn 0.999386 -0.035026 0.000778 +vn -0.999418 0.034098 -0.000745 +vn 0.999113 -0.042096 -0.000998 +vn -0.999113 0.042096 0.000996 +vn -0.999113 0.042096 0.000997 +vn 0.000863 0.068989 0.997617 +vn -0.999113 0.042096 0.000998 +vn -0.999113 0.042095 0.000998 +vn 0.000864 0.068988 0.997617 +vn 0.000864 0.068987 0.997617 +vn 0.000865 0.068987 0.997617 +vn 0.003029 0.086035 0.996287 +vn -0.002550 0.609183 0.793026 +vn -0.425768 0.455283 0.781945 +vn -0.616656 0.126337 0.777029 +vn 0.620173 0.137676 0.772289 +vn 0.423329 0.463070 0.778690 +vn -0.007517 0.950080 0.311916 +vn -0.634637 0.710693 0.303563 +vn -0.937738 0.189764 0.290924 +vn 0.936303 0.206948 0.283742 +vn 0.623805 0.722234 0.298739 +vn -0.009867 0.961986 -0.272922 +vn -0.636938 0.722357 -0.269277 +vn -0.940015 0.201295 -0.275414 +vn 0.933279 0.219492 -0.284277 +vn 0.622277 0.732187 -0.276900 +vn -0.008821 0.640957 -0.767526 +vn -0.431962 0.486657 -0.759324 +vn -0.622857 0.157753 -0.766265 +vn 0.613295 0.157703 -0.773950 +vn 0.420238 0.490248 -0.763581 +vn -0.003692 0.127027 -0.991892 +vn -0.566625 0.297364 0.768447 +vn 0.000723 0.317426 0.948283 +vn 0.566950 0.307758 0.764102 +vn -0.908330 0.300469 0.290954 +vn 0.904870 0.317099 0.284005 +vn -0.910589 0.311916 -0.271174 +vn 0.901315 0.324511 -0.286921 +vn -0.572732 0.328305 -0.751128 +vn 0.558652 0.347419 -0.753132 +vn 0.003194 0.351418 -0.936213 +vn -0.474948 0.563099 0.676272 +vn -0.002007 0.563939 0.825814 +vn 0.469712 0.571762 0.672650 +vn -0.789424 0.555310 0.261610 +vn 0.781089 0.569713 0.255591 +vn -0.791408 0.565372 -0.232438 +vn 0.771590 0.582525 -0.255566 +vn -0.480274 0.590081 -0.648954 +vn 0.467557 0.594236 -0.654426 +vn 0.010773 0.599402 -0.800376 +vn 0.960382 0.277963 -0.020043 +vn 0.486168 0.241186 -0.839923 +vn 0.486157 0.241186 -0.839929 +vn 0.960383 0.277962 -0.020062 +vn -0.460862 0.280888 -0.841848 +vn -0.460864 0.280888 -0.841847 +vn -0.933659 0.357366 -0.023898 +vn -0.933659 0.357365 -0.023902 +vn -0.459434 0.394146 0.795971 +vn -0.459451 0.394146 0.795961 +vn 0.487583 0.354444 0.797892 +vn 0.487575 0.354445 0.797897 +vn -0.138249 0.346685 0.927737 +vn -0.065922 0.173150 0.982687 +vn -0.101006 0.257400 0.961011 +vn 0.988384 0.151858 0.005960 +vn 0.994413 0.094040 0.047938 +vn 0.995334 0.035884 0.089566 +vn -0.068252 0.154321 -0.985660 +vn -0.089341 0.053897 -0.994542 +vn -0.085707 0.071566 -0.993747 +vn -0.966451 0.253119 -0.043631 +vn -0.987884 0.152192 -0.030391 +vn -0.986268 0.162080 -0.031693 +vn 0.022720 0.581381 0.813314 +vn 0.962377 0.271010 -0.019575 +vn 0.962378 0.271010 -0.019575 +vn 0.021249 0.463891 -0.885637 +vn -0.936228 0.350611 -0.023435 +vn 0.034133 0.840407 0.540880 +vn -0.425650 0.902757 -0.062060 +vn 0.033101 0.757959 -0.651461 +vn 0.499962 0.863954 -0.060179 +vn 0.000000 1.000000 0.000000 +vn -0.962270 0.272095 0.000000 +vn 0.000000 0.358606 0.933489 +vn 0.000000 0.358607 0.933489 +vn -0.000000 0.358607 0.933489 +vn 0.959420 0.281982 0.000000 +vn 0.000000 0.357443 -0.933935 +vn -0.000000 0.357444 -0.933935 +vn 1.000000 0.000001 0.000000 +vn 0.000134 0.999999 -0.001151 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 0.974144 -0.225925 +vn 0.000000 0.974145 -0.225925 +vn 0.000000 0.940855 -0.338810 +vn -1.000000 0.000001 -0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.972394 -0.233346 +vn 1.000000 -0.000001 0.000000 +vn -1.000000 -0.000000 -0.000000 +vn -0.000000 0.974144 -0.225925 +vn -0.000000 1.000000 0.000000 +vn -0.000000 1.000000 -0.000000 +vn -0.881781 0.471659 -0.000000 +vn -0.744571 0.667543 0.000000 +vn 0.872989 -0.487741 0.000000 +vn 0.744342 -0.667798 0.000000 +vn -0.000000 -1.000000 -0.000000 +vn 0.744571 0.667543 0.000001 +vn -0.744342 -0.667798 -0.000000 +vn 0.881781 0.471659 0.000000 +vn -0.872988 -0.487741 -0.000000 +vn -0.000001 1.000000 -0.000000 +vn -0.829630 0.558313 -0.000000 +vn -0.000000 -1.000000 0.000002 +vn 0.158239 -0.987401 0.000002 +vn 0.000004 -0.000001 -1.000000 +vn 0.829630 0.558314 0.000000 +vn -0.158240 -0.987401 0.000002 +vn -0.000004 -0.000001 -1.000000 +vn 0.841396 -0.540419 0.000000 +vn -0.841394 -0.540422 -0.000000 +vn -0.170318 0.985389 -0.000006 +vn 0.126406 0.991979 -0.000006 +vn 0.217590 0.976040 0.000000 +vn 0.126406 0.991979 0.000004 +vn -0.170318 0.985389 0.000004 +vn -0.134986 0.990847 -0.000000 +vn 0.158239 -0.987401 0.000000 +vn -0.158240 -0.987401 -0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 -1.000000 0.000005 +vn 0.829629 0.558315 0.000000 +vn -0.170318 0.985389 -0.000008 +vn 0.126405 0.991979 -0.000008 +vn 0.217591 0.976040 0.000000 +vn 0.126405 0.991979 0.000005 +vn -0.170318 0.985389 0.000005 +vn -0.134987 0.990847 -0.000000 +vn 0.000002 1.000000 0.000000 +vn -0.000002 -1.000000 0.000005 +vn -0.000002 -1.000000 -0.000000 +vn -0.000000 1.000000 0.000001 +vn -0.000000 0.766045 0.642787 +vn -1.000000 0.000001 0.000000 +vn -0.000000 0.173648 0.984808 +vn -1.000000 0.000000 0.000001 +vn -0.000000 -0.500000 0.866025 +vn 0.000001 -0.939693 0.342020 +vn 0.000003 -0.939693 -0.342020 +vn 0.000003 -0.939692 -0.342021 +vn 0.000001 -0.500000 -0.866025 +vn 0.000000 0.173648 -0.984808 +vn -1.000000 0.000001 -0.000001 +vn -0.000000 0.766045 -0.642787 +vn -1.000000 0.000000 -0.000001 +vn 0.000000 -0.939693 -0.342020 +vn 0.000000 -0.939693 0.342020 +vn -0.000000 0.766044 0.642788 +vn -0.000000 0.766044 -0.642788 +vn 0.000000 0.173649 -0.984808 +vn 0.000000 -0.499999 -0.866026 +vn 0.158239 -0.987401 -0.000002 +vn -0.000000 -1.000000 -0.000002 +vn 0.000006 -0.000002 1.000000 +vn -0.158240 -0.987401 -0.000002 +vn -0.000006 -0.000002 1.000000 +vn -0.841395 -0.540421 -0.000000 +vn -0.170318 0.985389 0.000009 +vn 0.126405 0.991979 0.000009 +vn 0.217593 0.976040 0.000000 +vn 0.126405 0.991979 -0.000006 +vn 0.000000 -1.000000 -0.000005 +vn -0.829631 0.558313 -0.000000 +vn 0.000004 -0.000001 1.000000 +vn -0.000004 -0.000001 1.000000 +vn 0.841395 -0.540420 0.000000 +vn -0.170318 0.985389 0.000006 +vn 0.126405 0.991979 0.000006 +vn 0.126405 0.991979 -0.000004 +vn -0.170318 0.985389 -0.000004 +vn 0.158240 -0.987401 -0.000002 +vn -0.841394 -0.540421 -0.000000 +vn -0.170318 0.985389 0.000008 +vn 0.126405 0.991979 0.000008 +vn 0.217592 0.976040 0.000000 +vn 0.126405 0.991979 -0.000005 +vn -0.170318 0.985389 -0.000005 +vn -0.000002 -1.000000 -0.000005 +vn -0.000000 0.558313 0.829630 +vn -0.000002 -0.987401 -0.158239 +vn 1.000000 -0.000001 -0.000004 +vn 0.000000 0.558314 -0.829630 +vn -0.000002 -0.987401 0.158240 +vn 1.000000 -0.000001 0.000004 +vn 0.000000 -0.540419 -0.841396 +vn -0.000000 -0.540421 0.841395 +vn 0.000011 0.985389 0.170318 +vn 0.000011 0.991979 -0.126405 +vn -0.000000 0.976040 -0.217591 +vn -0.000006 0.991979 -0.126405 +vn -0.000006 0.985389 0.170318 +vn -0.000000 0.990847 0.134986 +vn 0.000000 -0.987401 -0.158239 +vn 0.000000 -0.987401 0.158240 +vn -0.000005 -1.000000 -0.000000 +vn -0.006697 0.353906 0.935257 +vn 0.013078 0.514621 0.857318 +vn -0.010448 0.321920 0.946709 +vn 0.982803 0.178718 0.046448 +vn 0.944296 0.328693 -0.016283 +vn 0.979997 0.194992 0.039803 +vn -0.040836 0.217230 -0.975266 +vn 0.010446 0.393041 -0.919461 +vn -0.041468 0.214980 -0.975738 +vn -0.902971 0.428723 -0.028976 +vn -0.958504 0.283917 -0.025700 +vn -0.960518 0.277042 -0.025533 +vn -0.000001 0.005038 0.999987 +vn -0.000001 0.005081 0.999987 +vn 0.000347 0.046610 0.998913 +vn 0.999212 -0.039653 0.001876 +vn -0.999997 0.002351 0.000704 +vn 0.993882 -0.110244 0.006763 +vn 0.993881 -0.110244 0.006763 +vn -0.004597 -0.157544 -0.987501 +vn -0.022621 0.001736 -0.999743 +vn -0.022455 0.002147 -0.999745 +vn -0.045190 -0.054313 -0.997501 +vn -0.999938 0.011086 -0.000000 +vn -0.999939 0.011086 -0.000000 +vn -0.999999 0.001081 -0.000000 +vn -0.999999 0.001104 -0.000000 +vn -0.999960 -0.008947 -0.000000 +vn -0.007014 0.000664 0.999975 +vn -0.007066 0.000536 0.999975 +vn -0.014139 -0.016993 0.999756 +vn 0.997910 0.064621 0.000000 +vn 0.999917 0.012840 -0.000000 +vn 0.999916 0.012937 -0.000000 +vn 0.999251 -0.038689 -0.000000 +vn 0.999732 0.023065 0.001755 +vn 0.999705 0.024228 0.001735 +vn 0.998843 0.048088 0.000000 +vn 0.998860 0.047729 0.000000 +vn 0.000554 0.014040 0.999901 +vn 0.000567 0.013756 0.999905 +vn 0.000000 0.005596 0.999984 +vn 0.000000 0.004504 0.999990 +vn -0.999903 -0.013953 -0.000127 +vn -0.999904 -0.013862 -0.000129 +vn -0.999520 -0.030963 -0.000000 +vn -0.999522 -0.030917 -0.000000 +vn 0.000438 -0.005436 -0.999985 +vn 0.000428 -0.003641 -0.999993 +vn 0.000000 0.010501 -0.999945 +vn 0.000000 0.013756 -0.999905 +vn 0.999996 0.002869 -0.000680 +vn 0.999981 0.006111 -0.000852 +vn -0.000395 0.048066 0.998844 +vn -0.000307 0.045364 0.998970 +vn -0.999918 0.012734 -0.001652 +vn -0.999927 0.011992 -0.001597 +vn -0.001027 -0.031991 -0.999488 +vn -0.001145 -0.028713 -0.999587 +vn 0.999025 0.044085 -0.002183 +vn 0.999025 0.044088 -0.002183 +vn -0.999212 -0.039653 0.001877 +vn -0.999212 -0.039658 0.001877 +vn 0.999997 0.002351 0.000704 +vn -1.000000 -0.000000 0.000000 +vn -0.834004 0.551758 -0.000000 +vn 0.834004 0.551758 0.000000 +vn 0.834004 -0.551758 0.000000 +vn -0.834005 -0.551757 -0.000000 +vn 0.998334 0.057704 0.000000 +vn 0.999745 0.002147 0.022456 +vn 0.999743 0.001736 0.022621 +vn 0.997501 -0.054314 0.045191 +vn -0.000001 0.011086 0.999938 +vn -0.000001 0.001104 0.999999 +vn -0.000001 0.001081 0.999999 +vn -0.000001 0.011086 0.999939 +vn -0.000001 -0.008947 0.999960 +vn -0.999837 0.018041 -0.000000 +vn -0.999975 0.000536 0.007066 +vn -0.999975 0.000664 0.007014 +vn -0.999756 -0.016993 0.014139 +vn 0.000000 0.064621 -0.997910 +vn 0.000000 0.012937 -0.999916 +vn 0.000000 0.012840 -0.999917 +vn 0.000001 -0.038689 -0.999251 +vn -0.998334 0.057704 -0.000000 +vn -0.999745 0.002147 -0.022455 +vn -0.999743 0.001736 -0.022621 +vn -0.997501 -0.054313 -0.045190 +vn 0.000001 0.011086 -0.999938 +vn 0.000001 0.001104 -0.999999 +vn 0.000001 0.001081 -0.999999 +vn 0.000001 -0.008947 -0.999960 +vn 0.999837 0.018041 0.000000 +vn 0.999975 0.000535 -0.007066 +vn 0.999975 0.000664 -0.007014 +vn 0.999756 -0.016994 -0.014139 +vn -0.000001 0.064621 0.997910 +vn -0.000001 0.012937 0.999916 +vn -0.000001 0.012840 0.999918 +vn -0.000001 -0.038689 0.999251 +vn 1.000000 -0.000001 -0.000001 +vn 0.000005 -0.291256 0.956645 +vn 0.611063 0.757263 0.230552 +vn -0.000053 0.291199 -0.956662 +vn -0.000054 -0.291265 0.956642 +vn 0.116145 0.950171 0.289283 +vn 0.000060 0.291261 -0.956644 +vn -0.611061 0.757265 0.230553 +vn -0.000001 0.291245 -0.956648 +vn 0.000051 -0.291264 0.956643 +vn -0.116138 0.950172 0.289283 +vn -0.000060 0.291261 -0.956644 +vn 1.000000 -0.000001 -0.000000 +vn -0.000000 0.226080 0.974109 +vn 0.611062 0.771086 -0.178968 +vn 0.611063 0.771086 -0.178968 +vn -0.000055 -0.226150 -0.974092 +vn -0.000055 -0.226150 -0.974093 +vn -0.000062 0.226071 0.974111 +vn 0.116153 0.967513 -0.224559 +vn 0.000036 -0.226091 -0.974106 +vn 0.000000 0.226080 0.974109 +vn -0.611059 0.771089 -0.178966 +vn -0.000001 -0.226102 -0.974104 +vn 0.000062 0.226071 0.974111 +vn -0.116153 0.967513 -0.224559 +vn -0.000035 -0.226091 -0.974106 +vn 0.611063 0.771085 -0.178967 +vn -0.000056 -0.226150 -0.974092 +vn 0.116145 0.967514 -0.224558 +vn 0.000029 -0.226087 -0.974107 +vn -0.000005 -0.226098 -0.974104 +vn -0.116145 0.967514 -0.224558 +vn -0.000029 -0.226087 -0.974107 +vn 0.116151 0.967513 -0.224559 +vn 0.116151 0.967514 -0.224559 +vn 0.000026 -0.226086 -0.974107 +vn -0.611060 0.771088 -0.178966 +vn -0.116151 0.967513 -0.224559 +vn -0.000026 -0.226086 -0.974107 +vn 0.000028 -0.226086 -0.974107 +vn -0.000028 -0.226086 -0.974107 +vn -0.000002 -0.206781 0.978387 +vn 0.611063 0.774475 0.163674 +vn -0.000065 -0.206784 0.978386 +vn -0.000065 -0.206784 0.978387 +vn 0.116142 0.971769 0.205369 +vn 0.000002 -0.206782 0.978387 +vn -0.611061 0.774477 0.163677 +vn 0.000064 -0.206785 0.978386 +vn -0.116136 0.971769 0.205370 +vn 1.000000 -0.000000 -0.000001 +vn 0.000004 -0.206776 0.978388 +vn 0.000004 -0.206777 0.978388 +vn 0.611062 0.774477 0.163675 +vn 0.611062 0.774476 0.163675 +vn -0.000066 -0.206783 0.978387 +vn 0.116148 0.971768 0.205368 +vn 0.116149 0.971768 0.205368 +vn -0.000004 -0.206776 0.978388 +vn -0.611060 0.774478 0.163677 +vn 0.000066 -0.206783 0.978387 +vn -0.116142 0.971769 0.205369 +vn -0.000001 -0.206780 0.978387 +vn 0.611063 0.774476 0.163675 +vn -0.000063 -0.206783 0.978387 +vn 0.000000 -0.206779 0.978388 +vn -0.611060 0.774478 0.163676 +vn 0.000063 -0.206783 0.978387 +vn -0.000001 0.000000 -1.000000 +vn 0.927622 -0.373520 -0.000006 +vn 0.295674 0.734288 -0.611063 +vn -0.927645 0.373463 0.000060 +vn 0.927614 -0.373539 0.000043 +vn 0.370995 0.921344 -0.116140 +vn -0.927620 0.373524 -0.000059 +vn 0.927622 -0.373520 0.000006 +vn 0.295676 0.734289 0.611060 +vn -0.927625 0.373512 0.000001 +vn 0.927614 -0.373539 -0.000043 +vn 0.370995 0.921344 0.116139 +vn -0.927620 0.373524 0.000059 +vn 0.163673 0.774479 -0.611059 +vn 0.978379 -0.206820 0.000025 +vn 0.205367 0.971762 -0.116202 +vn 0.978381 -0.206808 0.000049 +vn 0.163671 0.774483 0.611054 +vn 0.978381 -0.206811 -0.000015 +vn 0.205367 0.971762 0.116202 +vn 0.978381 -0.206808 -0.000049 +vn 0.136253 0.779771 -0.611058 +vn 0.985077 -0.172116 -0.000001 +vn 0.170952 0.978403 -0.116198 +vn 0.985076 -0.172122 0.000000 +vn 0.136250 0.779776 0.611053 +vn 0.985077 -0.172111 0.000007 +vn 0.170952 0.978403 0.116198 +vn 0.985076 -0.172122 -0.000000 +vn 0.095554 0.785796 -0.611060 +vn 0.992685 -0.120729 0.000008 +vn 0.992686 -0.120729 0.000008 +vn 0.119892 0.985969 -0.116149 +vn 0.992686 -0.120727 0.000027 +vn -0.000000 0.000001 1.000000 +vn 0.095553 0.785797 0.611058 +vn 0.095553 0.785797 0.611059 +vn 0.992687 -0.120720 0.000002 +vn 0.119892 0.985969 0.116149 +vn 0.992686 -0.120727 -0.000027 +vn 0.095554 0.785794 -0.611062 +vn 0.992688 -0.120710 -0.000002 +vn 0.119892 0.985970 -0.116144 +vn 0.992688 -0.120705 0.000001 +vn 0.000000 0.000002 1.000000 +vn 0.095553 0.785796 0.611060 +vn 0.992688 -0.120705 0.000008 +vn 0.119892 0.985970 0.116143 +vn 0.992688 -0.120705 -0.000001 +vn 0.026702 0.791134 -0.611060 +vn 0.999431 -0.033724 0.000000 +vn 0.033504 0.992665 -0.116161 +vn 0.999431 -0.033713 -0.000060 +vn 0.026701 0.791135 0.611058 +vn 0.999431 -0.033724 -0.000000 +vn 0.033504 0.992665 0.116161 +vn 0.999431 -0.033713 0.000060 +vn 0.999432 -0.033713 0.000060 +vn 0.042337 0.790455 -0.611056 +vn 0.042337 0.790455 -0.611055 +vn 0.998569 -0.053480 -0.000007 +vn 0.053116 0.991809 -0.116160 +vn 0.998569 -0.053484 0.000002 +vn 0.042337 0.790455 0.611055 +vn 0.998569 -0.053472 0.000016 +vn 0.053116 0.991809 0.116160 +vn 0.998569 -0.053484 -0.000002 +vn -0.000000 -0.000001 -1.000000 +vn 0.163672 0.774480 -0.611058 +vn 0.978381 -0.206808 0.000015 +vn 0.205365 0.971760 -0.116225 +vn 0.978384 -0.206796 0.000039 +vn 0.163670 0.774484 0.611054 +vn 0.978382 -0.206804 -0.000010 +vn 0.205365 0.971760 0.116224 +vn 0.978384 -0.206796 -0.000039 +vn 0.163674 0.774479 -0.611059 +vn 0.978379 -0.206818 0.000029 +vn 0.205367 0.971760 -0.116218 +vn 0.978382 -0.206807 0.000049 +vn 0.163672 0.774483 0.611054 +vn 0.978381 -0.206811 -0.000021 +vn 0.205367 0.971760 0.116217 +vn 0.978382 -0.206807 -0.000049 +vn 0.163673 0.774480 -0.611058 +vn 0.163673 0.774480 -0.611059 +vn 0.978377 -0.206828 0.000032 +vn 0.205365 0.971761 -0.116211 +vn 0.978381 -0.206811 0.000068 +vn 0.978379 -0.206819 -0.000022 +vn 0.205365 0.971761 0.116210 +vn 0.978381 -0.206811 -0.000068 +vn 0.000001 -0.000001 -1.000000 +vn -0.927621 -0.373522 -0.000006 +vn -0.295674 0.734288 -0.611063 +vn 0.927644 0.373464 0.000060 +vn -0.927614 -0.373539 0.000043 +vn -0.370995 0.921344 -0.116139 +vn 0.927621 0.373523 -0.000056 +vn -0.927621 -0.373522 0.000006 +vn -0.295677 0.734289 0.611061 +vn -0.295677 0.734289 0.611060 +vn 0.927624 0.373514 0.000002 +vn -0.927614 -0.373539 -0.000043 +vn -0.370995 0.921344 0.116139 +vn 0.927621 0.373523 0.000056 +vn -0.163673 0.774479 -0.611059 +vn -0.978379 -0.206820 0.000025 +vn -0.205366 0.971761 -0.116209 +vn -0.978382 -0.206807 0.000047 +vn -0.163671 0.774484 0.611054 +vn -0.978381 -0.206810 -0.000015 +vn -0.205366 0.971761 0.116208 +vn -0.978382 -0.206808 -0.000047 +vn -0.978382 -0.206807 -0.000047 +vn -0.136252 0.779771 -0.611059 +vn -0.985077 -0.172116 -0.000002 +vn -0.170952 0.978403 -0.116199 +vn -0.985076 -0.172122 0.000000 +vn -0.136250 0.779775 0.611054 +vn -0.985078 -0.172111 0.000007 +vn -0.170952 0.978403 0.116198 +vn -0.985076 -0.172122 -0.000000 +vn -0.095554 0.785795 -0.611061 +vn -0.992685 -0.120729 0.000008 +vn -0.119892 0.985969 -0.116150 +vn -0.992686 -0.120726 0.000026 +vn 0.000000 0.000000 1.000000 +vn -0.095553 0.785797 0.611059 +vn -0.992686 -0.120720 0.000001 +vn -0.992687 -0.120720 0.000001 +vn -0.119892 0.985969 0.116149 +vn -0.992686 -0.120726 -0.000026 +vn -0.095553 0.785794 -0.611062 +vn -0.992688 -0.120708 -0.000003 +vn -0.119891 0.985970 -0.116144 +vn -0.992688 -0.120704 0.000000 +vn -0.095552 0.785796 0.611060 +vn -0.095552 0.785796 0.611059 +vn -0.992689 -0.120703 0.000009 +vn -0.119891 0.985970 0.116143 +vn -0.992688 -0.120704 -0.000000 +vn -0.026702 0.791135 -0.611059 +vn -0.026702 0.791134 -0.611059 +vn -0.999431 -0.033723 -0.000000 +vn -0.033505 0.992664 -0.116168 +vn -0.999431 -0.033712 -0.000060 +vn -0.999432 -0.033712 -0.000060 +vn -0.026702 0.791135 0.611058 +vn -0.999431 -0.033723 0.000000 +vn -0.033504 0.992664 0.116167 +vn -0.999432 -0.033712 0.000060 +vn -0.999431 -0.033712 0.000060 +vn -0.042337 0.790454 -0.611056 +vn -0.998569 -0.053480 -0.000007 +vn -0.053116 0.991809 -0.116160 +vn -0.998569 -0.053484 0.000002 +vn 0.000001 0.000000 1.000000 +vn -0.042337 0.790454 0.611056 +vn -0.998569 -0.053472 0.000016 +vn -0.053116 0.991809 0.116160 +vn -0.998569 -0.053484 -0.000002 +vn -0.163672 0.774480 -0.611058 +vn -0.978381 -0.206809 0.000015 +vn -0.205365 0.971760 -0.116226 +vn -0.978384 -0.206796 0.000039 +vn -0.163670 0.774484 0.611054 +vn -0.978382 -0.206804 -0.000010 +vn -0.205365 0.971760 0.116225 +vn -0.978384 -0.206796 -0.000039 +vn -0.978379 -0.206818 0.000029 +vn -0.205365 0.971760 -0.116224 +vn -0.978382 -0.206806 0.000047 +vn -0.163670 0.774483 0.611054 +vn -0.978381 -0.206809 -0.000019 +vn -0.205365 0.971760 0.116223 +vn -0.978382 -0.206806 -0.000047 +vn -0.000000 -0.000000 -1.000000 +vn -0.163673 0.774480 -0.611058 +vn -0.978378 -0.206827 0.000031 +vn -0.978377 -0.206827 0.000031 +vn -0.205365 0.971762 -0.116204 +vn -0.978381 -0.206811 0.000068 +vn -0.163671 0.774483 0.611054 +vn -0.978379 -0.206819 -0.000021 +vn -0.205365 0.971762 0.116204 +vn -0.978381 -0.206811 -0.000068 +vn 0.000862 0.068989 0.997617 +vn 0.014737 -0.073574 -0.997181 +vn 0.006937 -0.071283 -0.997432 +vn 0.999120 -0.041887 0.002031 +vn -0.000863 -0.068989 -0.997617 +vn 0.999120 -0.041886 0.002031 +vn -0.000865 -0.068989 -0.997617 +vn -0.999120 0.041887 -0.002033 +vn -0.000862 -0.068990 -0.997617 +vn -0.999120 0.041887 -0.002030 +vn -0.000863 -0.068988 -0.997617 +vn 0.999113 -0.042097 -0.000997 +vn 0.999113 -0.042098 -0.000996 +vn 0.002580 -0.073569 -0.997287 +vn 0.003711 -0.075073 -0.997171 +vn 0.999113 -0.042095 -0.000998 +vn 0.999113 -0.042098 -0.000997 +vn 0.000863 0.068988 0.997617 +vn 0.009625 -0.081209 -0.996651 +vn 0.003587 -0.073611 -0.997281 +vn 0.005050 -0.075129 -0.997161 +vn 0.009626 -0.081209 -0.996651 +vn 0.998334 0.057703 0.000000 +vn 0.999745 0.002147 0.022455 +vn 0.997501 -0.054313 0.045190 +vn -0.000000 0.011086 0.999939 +vn -0.000000 0.001104 0.999999 +vn -0.000000 0.001081 0.999999 +vn -0.000000 0.011086 0.999938 +vn -0.000000 -0.008947 0.999960 +vn -0.999756 -0.016994 0.014139 +vn 0.000000 0.011086 -0.999938 +vn 0.000000 0.001104 -0.999999 +vn 0.000000 0.001081 -0.999999 +vn 0.000000 -0.008947 -0.999960 +vn -0.000000 0.064621 0.997910 +vn -0.000000 0.012937 0.999916 +vn -0.000000 0.012840 0.999918 +vn -0.000000 -0.038689 0.999251 +# 818 vertex normals + +vt 0.012654 0.016752 0.000000 +vt 0.015619 0.138501 0.000000 +vt 0.043488 0.139032 0.000000 +vt 0.050718 0.017477 0.000000 +vt 0.012572 0.283086 0.000000 +vt 0.016071 0.383270 0.000000 +vt 0.043156 0.383786 0.000000 +vt 0.050790 0.283815 0.000000 +vt 0.306432 0.349196 0.000000 +vt 0.301565 0.462757 0.000000 +vt 0.279736 0.462757 0.000000 +vt 0.276617 0.349196 0.000000 +vt 0.306492 0.596584 0.000000 +vt 0.301257 0.690228 0.000000 +vt 0.280042 0.690228 0.000000 +vt 0.276557 0.596584 0.000000 +vt 0.154007 0.443754 0.000000 +vt 0.139840 0.553525 0.000000 +vt 0.114834 0.553187 0.000000 +vt 0.119853 0.443293 0.000000 +vt 0.138443 0.683100 0.000000 +vt 0.125112 0.773560 0.000000 +vt 0.100810 0.773226 0.000000 +vt 0.104151 0.682633 0.000000 +vt 0.264590 0.346411 0.000000 +vt 0.261105 0.459646 0.000000 +vt 0.236710 0.459646 0.000000 +vt 0.231271 0.346411 0.000000 +vt 0.264658 0.592874 0.000000 +vt 0.260763 0.686591 0.000000 +vt 0.237054 0.686588 0.000000 +vt 0.231204 0.592874 0.000000 +vt 0.016394 0.484813 0.000000 +vt 0.052407 0.483219 0.000000 +vt 0.308880 0.783296 0.000000 +vt 0.280626 0.784595 0.000000 +vt 0.127489 0.861824 0.000000 +vt 0.095037 0.863425 0.000000 +vt 0.260064 0.779286 0.000000 +vt 0.228487 0.778003 0.000000 +vt 0.024370 0.553781 0.000000 +vt 0.051444 0.552583 0.000000 +vt 0.307118 0.849434 0.000000 +vt 0.285877 0.850413 0.000000 +vt 0.121656 0.925271 0.000000 +vt 0.097260 0.926474 0.000000 +vt 0.254255 0.844051 0.000000 +vt 0.230518 0.843067 0.000000 +vt 0.028226 0.624007 0.000000 +vt 0.063581 0.622442 0.000000 +vt 0.313756 0.914610 0.000000 +vt 0.286017 0.915881 0.000000 +vt 0.128424 0.987856 0.000000 +vt 0.096565 0.989425 0.000000 +vt 0.253591 0.911283 0.000000 +vt 0.222598 0.909968 0.000000 +vt 0.598216 0.822103 0.000000 +vt 0.598216 0.887276 0.000000 +vt 0.542564 0.887276 0.000000 +vt 0.542564 0.822103 0.000000 +vt 0.159201 0.432211 0.000000 +vt 0.211562 0.432211 0.000000 +vt 0.211562 0.360839 0.000000 +vt 0.159201 0.360839 0.000000 +vt 0.380910 0.380190 0.000000 +vt 0.380910 0.426720 0.000000 +vt 0.311123 0.426618 0.000000 +vt 0.311123 0.379936 0.000000 +vt 0.653868 0.822103 0.000000 +vt 0.653868 0.887276 0.000000 +vt 0.158804 0.584058 0.000000 +vt 0.211263 0.584058 0.000000 +vt 0.211562 0.503582 0.000000 +vt 0.159201 0.503582 0.000000 +vt 0.845303 0.426501 0.000000 +vt 0.845303 0.490898 0.000000 +vt 0.759763 0.490671 0.000000 +vt 0.759763 0.426364 0.000000 +vt 0.598216 0.991496 0.000000 +vt 0.542564 0.900832 0.000000 +vt 0.222453 0.432211 0.000000 +vt 0.222453 0.360839 0.000000 +vt 0.380910 0.436575 0.000000 +vt 0.311123 0.436306 0.000000 +vt 0.653868 0.900832 0.000000 +vt 0.222293 0.584058 0.000000 +vt 0.222453 0.503582 0.000000 +vt 0.845303 0.504293 0.000000 +vt 0.759763 0.504293 0.000000 +vt 0.479696 0.989375 0.000000 +vt 0.479696 0.902035 0.000000 +vt 0.428608 0.900737 0.000000 +vt 0.530784 0.900909 0.000000 +vt 0.479696 0.887182 0.000000 +vt 0.428608 0.887543 0.000000 +vt 0.530784 0.887543 0.000000 +vt 0.479696 0.823491 0.000000 +vt 0.428608 0.823972 0.000000 +vt 0.530784 0.823972 0.000000 +vt 0.074071 0.768585 0.000000 +vt 0.040225 0.803286 0.000000 +vt 0.040225 0.716642 0.000000 +vt 0.074071 0.716740 0.000000 +vt 0.006380 0.768585 0.000000 +vt 0.006380 0.716740 0.000000 +vt 0.649273 0.544755 0.000000 +vt 0.704771 0.651648 0.000000 +vt 0.704771 0.658405 0.000000 +vt 0.647725 0.550526 0.000000 +vt 0.760270 0.544755 0.000000 +vt 0.761818 0.550526 0.000000 +vt 0.682519 0.517566 0.000000 +vt 0.683102 0.476980 0.000000 +vt 0.680476 0.476980 0.000000 +vt 0.679896 0.517558 0.000000 +vt 0.683102 0.440043 0.000000 +vt 0.680476 0.440038 0.000000 +vt 0.682626 0.393813 0.000000 +vt 0.680005 0.393810 0.000000 +vt 0.760266 0.544520 0.000000 +vt 0.704770 0.658405 0.000000 +vt 0.761818 0.550286 0.000000 +vt 0.649279 0.544312 0.000000 +vt 0.647725 0.550074 0.000000 +vt 0.676633 0.392784 0.000000 +vt 0.677001 0.437206 0.000000 +vt 0.674473 0.437196 0.000000 +vt 0.674113 0.392771 0.000000 +vt 0.677001 0.472695 0.000000 +vt 0.674473 0.472695 0.000000 +vt 0.676439 0.511693 0.000000 +vt 0.673915 0.511685 0.000000 +vt 0.880490 0.265007 0.000000 +vt 0.875035 0.421400 0.000000 +vt 0.851796 0.425875 0.000000 +vt 0.865906 0.258865 0.000000 +vt 0.563428 0.166591 0.000000 +vt 0.420693 0.148576 0.000000 +vt 0.421709 0.006334 0.000000 +vt 0.557908 0.007751 0.000000 +vt 0.304001 0.148362 0.000000 +vt 0.305082 0.006132 0.000000 +vt 0.144407 0.165881 0.000000 +vt 0.144465 0.006815 0.000000 +vt 0.834700 0.160504 0.000000 +vt 0.839679 0.007073 0.000000 +vt 0.983625 0.009514 0.000000 +vt 0.994303 0.181157 0.000000 +vt 0.717472 0.159443 0.000000 +vt 0.573324 0.177295 0.000000 +vt 0.583421 0.006146 0.000000 +vt 0.722519 0.006002 0.000000 +vt 0.071790 0.704248 0.000000 +vt 0.071790 0.631420 0.000000 +vt 0.006608 0.631420 0.000000 +vt 0.006608 0.713549 0.000000 +vt 0.825580 0.588546 0.000000 +vt 0.825923 0.543295 0.000000 +vt 0.870063 0.540987 0.000000 +vt 0.884018 0.585390 0.000000 +vt 0.767192 0.585203 0.000000 +vt 0.781820 0.540845 0.000000 +vt 0.241745 0.180801 0.000000 +vt 0.242412 0.314925 0.000000 +vt 0.137253 0.345905 0.000000 +vt 0.152192 0.173809 0.000000 +vt 0.350255 0.176300 0.000000 +vt 0.351367 0.353486 0.000000 +vt 0.794937 0.518783 0.000000 +vt 0.794937 0.532460 0.000000 +vt 0.677625 0.532460 0.000000 +vt 0.677625 0.518783 0.000000 +vt 0.873013 0.532460 0.000000 +vt 0.873013 0.518783 0.000000 +vt 0.409725 0.580382 0.000000 +vt 0.468744 0.682506 0.000000 +vt 0.468744 0.698419 0.000000 +vt 0.409725 0.594834 0.000000 +vt 0.527763 0.580382 0.000000 +vt 0.527763 0.594834 0.000000 +vt 0.608578 0.643922 0.000000 +vt 0.613396 0.718112 0.000000 +vt 0.628458 0.718112 0.000000 +vt 0.629283 0.643922 0.000000 +vt 0.610904 0.782131 0.000000 +vt 0.629283 0.809836 0.000000 +vt 0.581721 0.644497 0.000000 +vt 0.586133 0.718594 0.000000 +vt 0.601582 0.718594 0.000000 +vt 0.602960 0.644497 0.000000 +vt 0.581721 0.810411 0.000000 +vt 0.602960 0.810411 0.000000 +vt 0.632638 0.641697 0.000000 +vt 0.633549 0.719692 0.000000 +vt 0.650190 0.719692 0.000000 +vt 0.655514 0.641697 0.000000 +vt 0.632638 0.816339 0.000000 +vt 0.652944 0.787177 0.000000 +vt 0.550433 0.645429 0.000000 +vt 0.552106 0.730829 0.000000 +vt 0.570873 0.730829 0.000000 +vt 0.576232 0.645429 0.000000 +vt 0.550433 0.804685 0.000000 +vt 0.576232 0.804685 0.000000 +vt 0.773557 0.867934 0.000000 +vt 0.840422 0.867934 0.000000 +vt 0.840422 0.826098 0.000000 +vt 0.773557 0.826098 0.000000 +vt 0.891346 0.603267 0.000000 +vt 0.990701 0.603267 0.000000 +vt 0.990701 0.541171 0.000000 +vt 0.891346 0.541171 0.000000 +vt 0.992386 0.740190 0.000000 +vt 0.887207 0.740190 0.000000 +vt 0.887207 0.676957 0.000000 +vt 0.992386 0.676957 0.000000 +vt 0.553286 0.299789 0.000000 +vt 0.553286 0.265645 0.000000 +vt 0.737493 0.265645 0.000000 +vt 0.737493 0.299789 0.000000 +vt 0.388378 0.615284 0.000000 +vt 0.327459 0.615225 0.000000 +vt 0.327340 0.549019 0.000000 +vt 0.388258 0.549079 0.000000 +vt 0.785189 0.740342 0.000000 +vt 0.876932 0.740372 0.000000 +vt 0.874984 0.800315 0.000000 +vt 0.783322 0.796078 0.000000 +vt 0.314459 0.538752 0.000000 +vt 0.401102 0.538836 0.000000 +vt 0.314615 0.625467 0.000000 +vt 0.401258 0.625551 0.000000 +vt 0.509781 0.206548 0.000000 +vt 0.357211 0.205633 0.000000 +vt 0.377797 0.165799 0.000000 +vt 0.494283 0.166497 0.000000 +vt 0.693759 0.181598 0.000000 +vt 0.693759 0.215435 0.000000 +vt 0.515102 0.215435 0.000000 +vt 0.515102 0.181598 0.000000 +vt 0.553844 0.261520 0.000000 +vt 0.553844 0.221410 0.000000 +vt 0.718262 0.221410 0.000000 +vt 0.718262 0.261520 0.000000 +vt 0.851109 0.817325 0.000000 +vt 0.852945 0.909014 0.000000 +vt 0.993694 0.906713 0.000000 +vt 0.991859 0.815024 0.000000 +vt 0.928227 0.913432 0.000000 +vt 0.881093 0.913432 0.000000 +vt 0.881093 0.993091 0.000000 +vt 0.928227 0.993091 0.000000 +vt 0.938580 0.912794 0.000000 +vt 0.989721 0.912794 0.000000 +vt 0.989721 0.995932 0.000000 +vt 0.938580 0.995932 0.000000 +vt 0.661001 0.668572 0.000000 +vt 0.760821 0.668572 0.000000 +vt 0.760821 0.823572 0.000000 +vt 0.661001 0.823572 0.000000 +vt 0.450275 0.711749 0.000000 +vt 0.530937 0.712014 0.000000 +vt 0.537699 0.707113 0.000000 +vt 0.443746 0.706804 0.000000 +vt 0.529009 0.793474 0.000000 +vt 0.535537 0.798418 0.000000 +vt 0.448346 0.793209 0.000000 +vt 0.441585 0.798110 0.000000 +vt 0.316679 0.520855 0.000000 +vt 0.391288 0.521632 0.000000 +vt 0.397322 0.526228 0.000000 +vt 0.310420 0.525323 0.000000 +vt 0.393156 0.446644 0.000000 +vt 0.399416 0.442177 0.000000 +vt 0.318547 0.445867 0.000000 +vt 0.312514 0.441272 0.000000 +vt 0.772137 0.911161 0.000000 +vt 0.838943 0.914039 0.000000 +vt 0.891011 0.660106 0.000000 +vt 0.990129 0.667426 0.000000 +vt 0.991575 0.809874 0.000000 +vt 0.886646 0.802420 0.000000 +vt 0.785189 0.679488 0.000000 +vt 0.876932 0.679518 0.000000 +vt 0.748662 0.658551 0.000000 +vt 0.747808 0.590020 0.000000 +vt 0.781400 0.619258 0.000000 +vt 0.781889 0.658481 0.000000 +vt 0.881570 0.658273 0.000000 +vt 0.880715 0.589743 0.000000 +vt 0.847854 0.619120 0.000000 +vt 0.848343 0.658343 0.000000 +vt 0.814733 0.627703 0.000000 +vt 0.815116 0.658412 0.000000 +vt 0.880576 0.589867 0.000000 +vt 0.986675 0.334672 0.000000 +vt 0.979742 0.358697 0.000000 +vt 0.972902 0.349958 0.000000 +vt 0.973024 0.331887 0.000000 +vt 0.902677 0.327736 0.000000 +vt 0.920954 0.326430 0.000000 +vt 0.920822 0.344541 0.000000 +vt 0.909314 0.353106 0.000000 +vt 0.957160 0.373699 0.000000 +vt 0.956701 0.358251 0.000000 +vt 0.956901 0.327704 0.000000 +vt 0.937242 0.325641 0.000000 +vt 0.937032 0.356202 0.000000 +vt 0.936115 0.371536 0.000000 +vt 0.974496 0.289445 0.000000 +vt 0.988547 0.292644 0.000000 +vt 0.901255 0.285624 0.000000 +vt 0.919933 0.283913 0.000000 +vt 0.957520 0.285542 0.000000 +vt 0.937042 0.283448 0.000000 +vt 0.937043 0.283448 0.000000 +vt 0.981229 0.271638 0.000000 +vt 0.997045 0.276516 0.000000 +vt 0.892894 0.267828 0.000000 +vt 0.913436 0.264758 0.000000 +vt 0.960239 0.268701 0.000000 +vt 0.934572 0.266051 0.000000 +vt 0.015551 0.792427 0.000000 +vt 0.023494 0.796012 0.000000 +vt 0.015618 0.803217 0.000000 +vt 0.012784 0.801938 0.000000 +vt 0.025262 0.798531 0.000000 +vt 0.016249 0.804116 0.000000 +vt 0.026392 0.807158 0.000000 +vt 0.016653 0.807195 0.000000 +vt 0.027028 0.815850 0.000000 +vt 0.016879 0.810297 0.000000 +vt 0.025423 0.818476 0.000000 +vt 0.016307 0.811234 0.000000 +vt 0.017230 0.821408 0.000000 +vt 0.013383 0.812281 0.000000 +vt 0.950316 0.244776 0.000000 +vt 0.926254 0.196651 0.000000 +vt 0.974379 0.196651 0.000000 +vt 0.942154 0.196651 0.000000 +vt 0.990279 0.196651 0.000000 +vt 0.703969 0.202333 0.000000 +vt 0.697153 0.177971 0.000000 +vt 0.907151 0.179861 0.000000 +vt 0.899881 0.204096 0.000000 +vt 0.880852 0.215670 0.000000 +vt 0.722807 0.214248 0.000000 +vt 0.084867 0.833080 0.000000 +vt 0.084867 0.885652 0.000000 +vt 0.005583 0.882165 0.000000 +vt 0.005583 0.833080 0.000000 +vt 0.005583 0.937001 0.000000 +vt 0.084867 0.937001 0.000000 +vt 0.084867 0.994156 0.000000 +vt 0.005583 0.994156 0.000000 +vt 0.365766 0.294652 0.000000 +vt 0.354834 0.263612 0.000000 +vt 0.549777 0.263612 0.000000 +vt 0.538805 0.294652 0.000000 +vt 0.745197 0.306229 0.000000 +vt 0.631636 0.306229 0.000000 +vt 0.631636 0.336052 0.000000 +vt 0.738461 0.336052 0.000000 +vt 0.527297 0.336052 0.000000 +vt 0.527297 0.306229 0.000000 +vt 0.404158 0.306229 0.000000 +vt 0.411159 0.336052 0.000000 +vt 0.522137 0.259512 0.000000 +vt 0.532271 0.218463 0.000000 +vt 0.372073 0.218463 0.000000 +vt 0.372073 0.259512 0.000000 +vt 0.111379 0.354608 0.000000 +vt 0.111379 0.482986 0.000000 +vt 0.061331 0.482986 0.000000 +vt 0.061331 0.354608 0.000000 +vt 0.589293 0.386857 0.000000 +vt 0.577062 0.354081 0.000000 +vt 0.521553 0.354081 0.000000 +vt 0.521553 0.386857 0.000000 +vt 0.532188 0.405203 0.000000 +vt 0.532188 0.396280 0.000000 +vt 0.668419 0.396280 0.000000 +vt 0.668419 0.405203 0.000000 +vt 0.226251 0.593539 0.000000 +vt 0.226251 0.687977 0.000000 +vt 0.216792 0.687977 0.000000 +vt 0.216792 0.593539 0.000000 +vt 0.207334 0.687977 0.000000 +vt 0.207334 0.593539 0.000000 +vt 0.197876 0.687977 0.000000 +vt 0.197876 0.593539 0.000000 +vt 0.188417 0.687977 0.000000 +vt 0.188417 0.593539 0.000000 +vt 0.178959 0.687977 0.000000 +vt 0.178959 0.593539 0.000000 +vt 0.668419 0.413746 0.000000 +vt 0.532188 0.413746 0.000000 +vt 0.668419 0.413784 0.000000 +vt 0.668419 0.422328 0.000000 +vt 0.532188 0.422290 0.000000 +vt 0.532188 0.422328 0.000000 +vt 0.668419 0.430871 0.000000 +vt 0.532188 0.430871 0.000000 +vt 0.668419 0.438512 0.000000 +vt 0.532188 0.438512 0.000000 +vt 0.147921 0.687977 0.000000 +vt 0.147921 0.593539 0.000000 +vt 0.656788 0.499130 0.000000 +vt 0.656788 0.506294 0.000000 +vt 0.641636 0.506294 0.000000 +vt 0.641636 0.499130 0.000000 +vt 0.483471 0.354081 0.000000 +vt 0.483471 0.398954 0.000000 +vt 0.445389 0.379808 0.000000 +vt 0.445389 0.354081 0.000000 +vt 0.971480 0.382404 0.000000 +vt 0.992499 0.382404 0.000000 +vt 0.992499 0.432430 0.000000 +vt 0.971480 0.432430 0.000000 +vt 0.663376 0.353810 0.000000 +vt 0.663376 0.381263 0.000000 +vt 0.708301 0.401693 0.000000 +vt 0.708301 0.353810 0.000000 +vt 0.609076 0.496745 0.000000 +vt 0.614053 0.496745 0.000000 +vt 0.614053 0.501251 0.000000 +vt 0.609076 0.501251 0.000000 +vt 0.671939 0.499130 0.000000 +vt 0.671939 0.506294 0.000000 +vt 0.626484 0.506294 0.000000 +vt 0.626484 0.499130 0.000000 +vt 0.521553 0.398954 0.000000 +vt 0.407308 0.370435 0.000000 +vt 0.407308 0.354081 0.000000 +vt 0.618451 0.353810 0.000000 +vt 0.618451 0.371261 0.000000 +vt 0.753225 0.401693 0.000000 +vt 0.753225 0.353810 0.000000 +vt 0.385324 0.370435 0.000000 +vt 0.385324 0.354081 0.000000 +vt 0.617737 0.506294 0.000000 +vt 0.617737 0.499130 0.000000 +vt 0.592518 0.353810 0.000000 +vt 0.592518 0.371261 0.000000 +vt 0.208022 0.723085 0.000000 +vt 0.147200 0.723085 0.000000 +vt 0.147200 0.761660 0.000000 +vt 0.208022 0.761660 0.000000 +vt 0.592518 0.384433 0.000000 +vt 0.618451 0.384433 0.000000 +vt 0.614053 0.504652 0.000000 +vt 0.609076 0.504652 0.000000 +vt 0.407308 0.382779 0.000000 +vt 0.385324 0.382779 0.000000 +vt 0.560023 0.509239 0.000000 +vt 0.565549 0.509234 0.000000 +vt 0.565552 0.528147 0.000000 +vt 0.560026 0.528151 0.000000 +vt 0.555594 0.557173 0.000000 +vt 0.550396 0.557173 0.000000 +vt 0.550396 0.578514 0.000000 +vt 0.555594 0.578514 0.000000 +vt 0.410936 0.740343 0.000000 +vt 0.421208 0.740343 0.000000 +vt 0.406503 0.769423 0.000000 +vt 0.399096 0.762757 0.000000 +vt 0.565556 0.553898 0.000000 +vt 0.560030 0.553902 0.000000 +vt 0.550396 0.600403 0.000000 +vt 0.555594 0.600403 0.000000 +vt 0.368512 0.796925 0.000000 +vt 0.368512 0.785745 0.000000 +vt 0.330521 0.769423 0.000000 +vt 0.337927 0.762757 0.000000 +vt 0.315815 0.740343 0.000000 +vt 0.326088 0.740343 0.000000 +vt 0.560011 0.459369 0.000000 +vt 0.565538 0.459365 0.000000 +vt 0.555594 0.457250 0.000000 +vt 0.550396 0.457250 0.000000 +vt 0.410936 0.635400 0.000000 +vt 0.421208 0.635400 0.000000 +vt 0.315815 0.635400 0.000000 +vt 0.326088 0.635400 0.000000 +vt 0.332052 0.648468 0.000000 +vt 0.400478 0.648468 0.000000 +vt 0.400478 0.733099 0.000000 +vt 0.332052 0.733099 0.000000 +vt 0.390930 0.751175 0.000000 +vt 0.341600 0.751175 0.000000 +vt 0.602906 0.554954 0.000000 +vt 0.591929 0.572188 0.000000 +vt 0.591753 0.500200 0.000000 +vt 0.602776 0.501478 0.000000 +vt 0.596456 0.495586 0.000000 +vt 0.583391 0.495586 0.000000 +vt 0.583391 0.455565 0.000000 +vt 0.596456 0.455565 0.000000 +vt 0.636479 0.572732 0.000000 +vt 0.635085 0.572732 0.000000 +vt 0.635085 0.545743 0.000000 +vt 0.636479 0.545743 0.000000 +vt 0.571480 0.455566 0.000000 +vt 0.571480 0.495586 0.000000 +vt 0.619447 0.466800 0.000000 +vt 0.619458 0.461970 0.000000 +vt 0.634974 0.462453 0.000000 +vt 0.634962 0.467284 0.000000 +vt 0.635032 0.487322 0.000000 +vt 0.635032 0.494721 0.000000 +vt 0.629485 0.493488 0.000000 +vt 0.591712 0.601289 0.000000 +vt 0.591712 0.587412 0.000000 +vt 0.603827 0.568601 0.000000 +vt 0.610173 0.573931 0.000000 +vt 0.602761 0.494721 0.000000 +vt 0.602761 0.487322 0.000000 +vt 0.608308 0.493967 0.000000 +vt 0.618896 0.484744 0.000000 +vt 0.618896 0.492142 0.000000 +vt 0.580867 0.555200 0.000000 +vt 0.580738 0.502223 0.000000 +vt 0.636479 0.599721 0.000000 +vt 0.635085 0.599721 0.000000 +vt 0.603932 0.466323 0.000000 +vt 0.603943 0.461492 0.000000 +vt 0.573251 0.573931 0.000000 +vt 0.579597 0.568601 0.000000 +vt 0.639689 0.512074 0.000000 +vt 0.639689 0.552623 0.000000 +vt 0.638434 0.552623 0.000000 +vt 0.638435 0.512074 0.000000 +vt 0.639689 0.574705 0.000000 +vt 0.638434 0.574705 0.000000 +vt 0.639689 0.596786 0.000000 +vt 0.638434 0.596786 0.000000 +vt 0.639688 0.636957 0.000000 +vt 0.638434 0.636957 0.000000 +vt 0.609435 0.478820 0.000000 +vt 0.623688 0.478221 0.000000 +vt 0.623715 0.481135 0.000000 +vt 0.609462 0.481735 0.000000 +vt 0.637919 0.477613 0.000000 +vt 0.637946 0.480528 0.000000 +vt 0.579597 0.510357 0.000000 +vt 0.573251 0.511220 0.000000 +vt 0.635085 0.634959 0.000000 +vt 0.636478 0.634959 0.000000 +vt 0.635085 0.510506 0.000000 +vt 0.636478 0.510506 0.000000 +vt 0.610173 0.511219 0.000000 +vt 0.603827 0.509808 0.000000 +vt 0.645402 0.477287 0.000000 +vt 0.637879 0.473296 0.000000 +vt 0.645360 0.472969 0.000000 +vt 0.623648 0.473903 0.000000 +vt 0.609396 0.474502 0.000000 +vt 0.601977 0.479126 0.000000 +vt 0.601939 0.474808 0.000000 +vt 0.619470 0.456671 0.000000 +vt 0.634986 0.457154 0.000000 +vt 0.603955 0.456193 0.000000 +vt 0.645440 0.481223 0.000000 +vt 0.649071 0.477125 0.000000 +vt 0.649109 0.481061 0.000000 +vt 0.649030 0.472807 0.000000 +vt 0.637767 0.487322 0.000000 +vt 0.637767 0.494721 0.000000 +vt 0.601320 0.461412 0.000000 +vt 0.601332 0.456113 0.000000 +vt 0.601309 0.466242 0.000000 +vt 0.637596 0.462535 0.000000 +vt 0.637585 0.467366 0.000000 +vt 0.637609 0.457236 0.000000 +vt 0.600026 0.494721 0.000000 +vt 0.600026 0.487322 0.000000 +vt 0.598308 0.479275 0.000000 +vt 0.598269 0.474957 0.000000 +vt 0.602012 0.483062 0.000000 +vt 0.598343 0.483211 0.000000 +vt 0.884496 0.219498 0.000000 +vt 0.888541 0.219498 0.000000 +vt 0.888541 0.241973 0.000000 +vt 0.884496 0.241973 0.000000 +vt 0.924947 0.535069 0.000000 +vt 0.924947 0.477954 0.000000 +vt 0.961102 0.521707 0.000000 +vt 0.888541 0.264448 0.000000 +vt 0.884496 0.264448 0.000000 +vt 0.980339 0.487872 0.000000 +vt 0.888541 0.286923 0.000000 +vt 0.884496 0.286923 0.000000 +vt 0.973658 0.449397 0.000000 +vt 0.888541 0.309398 0.000000 +vt 0.884496 0.309398 0.000000 +vt 0.944184 0.424284 0.000000 +vt 0.888541 0.331873 0.000000 +vt 0.884496 0.331873 0.000000 +vt 0.905709 0.424284 0.000000 +vt 0.888541 0.354348 0.000000 +vt 0.884496 0.354348 0.000000 +vt 0.876235 0.449397 0.000000 +vt 0.888541 0.376823 0.000000 +vt 0.884496 0.376823 0.000000 +vt 0.869554 0.487872 0.000000 +vt 0.888541 0.399298 0.000000 +vt 0.884496 0.399298 0.000000 +vt 0.888792 0.521707 0.000000 +vt 0.888541 0.421773 0.000000 +vt 0.884496 0.421773 0.000000 +vt 0.963875 0.525062 0.000000 +vt 0.924947 0.539449 0.000000 +vt 0.886019 0.525062 0.000000 +vt 0.865306 0.488633 0.000000 +vt 0.872500 0.447207 0.000000 +vt 0.904234 0.420168 0.000000 +vt 0.945660 0.420168 0.000000 +vt 0.977394 0.447207 0.000000 +vt 0.984588 0.488633 0.000000 +vt 0.401014 0.341234 0.000000 +vt 0.447104 0.341234 0.000000 +vt 0.447104 0.345197 0.000000 +vt 0.401014 0.345197 0.000000 +vt 0.493194 0.341234 0.000000 +vt 0.493194 0.345197 0.000000 +vt 0.539486 0.341234 0.000000 +vt 0.539486 0.345197 0.000000 +vt 0.585100 0.341234 0.000000 +vt 0.585100 0.345197 0.000000 +vt 0.629242 0.341234 0.000000 +vt 0.629242 0.345197 0.000000 +vt 0.672616 0.341234 0.000000 +vt 0.672616 0.345197 0.000000 +vt 0.716758 0.341234 0.000000 +vt 0.716758 0.345197 0.000000 +vt 0.762371 0.341234 0.000000 +vt 0.762371 0.345197 0.000000 +vt 0.354722 0.341234 0.000000 +vt 0.354722 0.345197 0.000000 +vt 0.790019 0.413304 0.000000 +vt 0.803916 0.413397 0.000000 +vt 0.119499 0.326743 0.000000 +vt 0.130081 0.007811 0.000000 +vt 0.096761 0.006483 0.000000 +vt 0.116257 0.328175 0.000000 +vt 0.119470 0.326596 0.000000 +vt 0.498268 0.533072 0.000000 +vt 0.470453 0.570431 0.000000 +vt 0.470453 0.475910 0.000000 +vt 0.498268 0.475910 0.000000 +vt 0.522481 0.428644 0.000000 +vt 0.522481 0.515713 0.000000 +vt 0.515700 0.515713 0.000000 +vt 0.515700 0.428644 0.000000 +vt 0.522481 0.580639 0.000000 +vt 0.515700 0.580639 0.000000 +vt 0.466087 0.450004 0.000000 +vt 0.466087 0.460441 0.000000 +vt 0.420424 0.460441 0.000000 +vt 0.420424 0.450004 0.000000 +vt 0.442637 0.533072 0.000000 +vt 0.442637 0.475910 0.000000 +vt 0.511751 0.450004 0.000000 +vt 0.511751 0.460441 0.000000 +vt 0.508683 0.468273 0.000000 +vt 0.508683 0.538480 0.000000 +vt 0.502048 0.537927 0.000000 +vt 0.502048 0.471459 0.000000 +vt 0.469704 0.590832 0.000000 +vt 0.469704 0.581367 0.000000 +vt 0.430725 0.538480 0.000000 +vt 0.437360 0.537927 0.000000 +vt 0.430725 0.468273 0.000000 +vt 0.437360 0.471459 0.000000 +vt 0.469704 0.468273 0.000000 +vt 0.469704 0.471459 0.000000 +vt 0.539319 0.451928 0.000000 +vt 0.539319 0.542477 0.000000 +vt 0.543092 0.542477 0.000000 +vt 0.543092 0.451928 0.000000 +vt 0.539319 0.601655 0.000000 +vt 0.543092 0.601655 0.000000 +vt 0.526992 0.576193 0.000000 +vt 0.526992 0.514563 0.000000 +vt 0.532984 0.514563 0.000000 +vt 0.532984 0.576193 0.000000 +vt 0.526992 0.452933 0.000000 +vt 0.532984 0.452933 0.000000 +vt 0.790647 0.935920 0.000000 +vt 0.782447 0.935886 0.000000 +vt 0.782447 0.983549 0.000000 +vt 0.790648 0.983515 0.000000 +vt 0.759349 0.989810 0.000000 +vt 0.787288 0.990184 0.000000 +vt 0.754938 0.983231 0.000000 +vt 0.754937 0.936204 0.000000 +vt 0.787287 0.929251 0.000000 +vt 0.759348 0.929626 0.000000 +vt 0.750508 0.984014 0.000000 +vt 0.754669 0.991672 0.000000 +vt 0.750507 0.935422 0.000000 +vt 0.754669 0.927764 0.000000 +vt 0.710367 0.935921 0.000000 +vt 0.710368 0.983515 0.000000 +vt 0.718568 0.983550 0.000000 +vt 0.718568 0.935886 0.000000 +vt 0.746078 0.983231 0.000000 +vt 0.746077 0.936204 0.000000 +vt 0.741666 0.929625 0.000000 +vt 0.713727 0.929251 0.000000 +vt 0.741667 0.989810 0.000000 +vt 0.746347 0.991672 0.000000 +vt 0.746346 0.927763 0.000000 +vt 0.713728 0.990185 0.000000 +vt 0.757808 0.910781 0.000000 +vt 0.757875 0.862545 0.000000 +vt 0.749564 0.862534 0.000000 +vt 0.749497 0.910769 0.000000 +vt 0.721537 0.862463 0.000000 +vt 0.721470 0.910762 0.000000 +vt 0.726547 0.917343 0.000000 +vt 0.754574 0.917349 0.000000 +vt 0.716707 0.910532 0.000000 +vt 0.716705 0.862426 0.000000 +vt 0.716707 0.918714 0.000000 +vt 0.721574 0.919201 0.000000 +vt 0.675605 0.910783 0.000000 +vt 0.683916 0.910771 0.000000 +vt 0.683846 0.862536 0.000000 +vt 0.675535 0.862548 0.000000 +vt 0.711943 0.910762 0.000000 +vt 0.711873 0.862463 0.000000 +vt 0.678840 0.917351 0.000000 +vt 0.706867 0.917343 0.000000 +vt 0.711839 0.919201 0.000000 +vt 0.417124 0.887121 0.000000 +vt 0.417124 0.992542 0.000000 +vt 0.391801 0.992542 0.000000 +vt 0.391801 0.887121 0.000000 +vt 0.374133 0.805636 0.000000 +vt 0.377162 0.912849 0.000000 +vt 0.353026 0.912595 0.000000 +vt 0.349996 0.805381 0.000000 +vt 0.189495 0.803714 0.000000 +vt 0.192525 0.910927 0.000000 +vt 0.167881 0.910314 0.000000 +vt 0.164862 0.803454 0.000000 +vt 0.167891 0.910667 0.000000 +vt 0.379147 0.983090 0.000000 +vt 0.355011 0.982836 0.000000 +vt 0.194509 0.981168 0.000000 +vt 0.169876 0.980909 0.000000 +vt 0.233499 0.941383 0.000000 +vt 0.234635 0.981585 0.000000 +vt 0.314885 0.982419 0.000000 +vt 0.313749 0.942217 0.000000 +vt 0.273870 0.950527 0.000000 +vt 0.274760 0.982002 0.000000 +# 758 texture coords + +o church +g church +f 1/1/1 2/2/2 3/3/3 +f 3/3/3 4/4/1 1/1/1 +f 5/5/4 6/6/5 7/7/6 +f 7/7/6 8/8/7 5/5/4 +f 9/9/8 10/10/9 2/11/10 +f 2/11/10 1/12/11 9/9/8 +f 11/13/12 12/14/13 6/15/14 +f 6/15/14 5/16/15 11/13/12 +f 13/17/16 14/18/17 10/19/18 +f 10/19/18 9/20/16 13/17/16 +f 15/21/19 16/22/20 12/23/21 +f 12/23/21 11/24/22 15/21/19 +f 4/25/23 3/26/24 14/27/25 +f 14/27/25 13/28/23 4/25/23 +f 8/29/26 7/30/27 16/31/28 +f 16/31/28 15/32/29 8/29/26 +f 5/5/4 8/8/7 3/3/3 +f 3/3/3 2/2/2 5/5/4 +f 17/33/30 18/34/31 7/7/6 +f 7/7/6 6/6/5 17/33/30 +f 11/13/12 5/16/15 2/11/10 +f 2/11/10 10/10/9 11/13/12 +f 19/35/32 17/36/33 6/15/14 +f 6/15/14 12/14/13 19/35/32 +f 15/21/19 11/24/22 10/19/18 +f 10/19/18 14/18/17 15/21/19 +f 20/37/34 19/38/35 12/23/21 +f 12/23/21 16/22/20 20/37/34 +f 8/29/26 15/32/29 14/27/25 +f 14/27/25 3/26/24 8/29/26 +f 18/39/36 20/40/37 16/31/28 +f 16/31/28 7/30/27 18/39/36 +f 21/41/38 22/42/39 18/34/31 +f 18/34/31 17/33/30 21/41/38 +f 23/43/40 21/44/41 17/36/33 +f 17/36/33 19/35/32 23/43/40 +f 24/45/42 23/46/43 19/38/35 +f 19/38/35 20/37/34 24/45/42 +f 22/47/44 24/48/45 20/40/37 +f 20/40/37 18/39/36 22/47/44 +f 25/49/46 26/50/46 22/42/39 +f 22/42/39 21/41/38 25/49/46 +f 27/51/47 25/52/47 21/44/41 +f 21/44/41 23/43/40 27/51/47 +f 28/53/48 27/54/48 23/46/43 +f 23/46/43 24/45/42 28/53/48 +f 26/55/49 28/56/49 24/48/45 +f 24/48/45 22/47/44 26/55/49 +f 29/3/50 30/2/51 31/1/52 +f 31/1/52 32/4/52 29/3/50 +f 33/7/53 34/6/54 35/5/55 +f 35/5/55 36/8/56 33/7/53 +f 30/11/57 37/10/58 38/9/59 +f 38/9/59 31/12/59 30/11/57 +f 34/15/60 39/14/61 40/13/62 +f 40/13/62 35/16/63 34/15/60 +f 37/19/64 41/18/65 42/17/66 +f 42/17/66 38/20/66 37/19/64 +f 39/23/67 43/22/68 44/21/69 +f 44/21/69 40/24/70 39/23/67 +f 41/27/71 29/26/72 32/25/73 +f 32/25/73 42/28/73 41/27/71 +f 43/31/74 33/30/75 36/29/76 +f 36/29/76 44/32/77 43/31/74 +f 29/3/50 36/8/56 35/5/55 +f 35/5/55 30/2/51 29/3/50 +f 33/7/53 45/34/78 46/33/79 +f 46/33/79 34/6/54 33/7/53 +f 30/11/57 35/16/63 40/13/62 +f 40/13/62 37/10/58 30/11/57 +f 34/15/60 46/36/80 47/35/81 +f 47/35/81 39/14/61 34/15/60 +f 37/19/64 40/24/70 44/21/69 +f 44/21/69 41/18/65 37/19/64 +f 39/23/67 47/38/82 48/37/83 +f 48/37/83 43/22/68 39/23/67 +f 41/27/71 44/32/77 36/29/76 +f 36/29/76 29/26/72 41/27/71 +f 43/31/74 48/40/84 45/39/85 +f 45/39/85 33/30/75 43/31/74 +f 45/34/78 49/42/86 50/41/87 +f 50/41/87 46/33/79 45/34/78 +f 46/36/80 50/44/88 51/43/89 +f 51/43/89 47/35/81 46/36/80 +f 47/38/82 51/46/90 52/45/91 +f 52/45/91 48/37/83 47/38/82 +f 48/40/84 52/48/92 49/47/93 +f 49/47/93 45/39/85 48/40/84 +f 49/42/86 53/50/94 54/49/94 +f 54/49/94 50/41/87 49/42/86 +f 50/44/88 54/52/95 55/51/95 +f 55/51/95 51/43/89 50/44/88 +f 51/46/90 55/54/96 56/53/96 +f 56/53/96 52/45/91 51/46/90 +f 52/48/92 56/56/97 53/55/97 +f 53/55/97 49/47/93 52/48/92 +f 57/57/98 58/58/98 59/59/98 +f 59/59/98 60/60/98 57/57/98 +f 61/61/99 62/62/99 63/63/99 +f 63/63/99 64/64/99 61/61/99 +f 65/65/100 66/66/100 67/67/100 +f 67/67/100 68/68/100 65/65/100 +f 57/57/98 64/69/98 63/70/98 +f 63/70/98 58/58/98 57/57/98 +f 69/71/99 70/72/99 71/73/99 +f 71/73/99 72/74/99 69/71/99 +f 60/75/100 59/76/100 73/77/100 +f 73/77/100 74/78/100 60/75/100 +f 58/58/98 75/79/98 76/80/98 +f 76/80/98 59/59/98 58/58/98 +f 77/81/99 78/82/99 63/63/99 +f 63/63/99 62/62/99 77/81/99 +f 79/83/100 80/84/100 67/67/100 +f 67/67/100 66/66/100 79/83/100 +f 78/85/98 75/79/98 58/58/98 +f 58/58/98 63/70/98 78/85/98 +f 81/86/99 82/87/99 71/73/99 +f 71/73/99 70/72/99 81/86/99 +f 82/87/99 77/81/99 62/62/99 +f 62/62/99 71/73/99 82/87/99 +f 76/88/100 83/89/100 73/77/100 +f 73/77/100 59/76/100 76/88/100 +f 84/90/101 85/91/101 80/92/101 +f 84/90/102 81/93/102 85/91/102 +f 80/92/103 85/91/103 86/94/103 +f 86/94/103 67/95/103 80/92/103 +f 85/91/102 81/93/102 70/96/102 +f 70/96/102 86/94/102 85/91/102 +f 67/95/101 86/94/101 87/97/101 +f 87/97/101 68/98/101 67/95/101 +f 86/94/102 70/96/102 69/99/102 +f 69/99/102 87/97/102 86/94/102 +f 62/62/99 61/61/99 72/74/99 +f 72/74/99 71/73/99 62/62/99 +f 88/100/104 89/101/104 90/102/104 +f 90/102/104 91/103/104 88/100/104 +f 89/101/100 92/104/100 93/105/100 +f 93/105/100 90/102/100 89/101/100 +f 94/106/105 95/107/105 96/108/105 +f 96/108/105 97/109/105 94/106/105 +f 95/107/106 98/110/106 99/111/106 +f 99/111/106 96/108/106 95/107/106 +f 98/112/107 100/113/107 101/114/107 +f 101/114/107 99/115/107 98/112/107 +f 102/116/108 103/117/108 101/114/108 +f 101/114/108 100/113/108 102/116/108 +f 102/116/109 104/118/109 105/119/109 +f 105/119/109 103/117/109 102/116/109 +f 104/120/110 106/107/110 107/121/110 +f 107/121/110 105/122/110 104/120/110 +f 106/107/111 108/123/111 109/124/111 +f 109/124/111 107/121/111 106/107/111 +f 108/125/112 110/126/112 111/127/112 +f 111/127/112 109/128/112 108/125/112 +f 112/129/113 113/130/113 111/127/113 +f 111/127/113 110/126/113 112/129/113 +f 112/129/114 94/131/114 97/132/114 +f 97/132/114 113/130/114 112/129/114 +f 76/133/115 75/134/115 95/135/115 +f 95/135/115 94/136/115 76/133/115 +f 75/134/116 78/133/117 98/136/117 +f 98/136/117 95/135/116 75/134/116 +f 81/133/118 84/134/118 106/135/118 +f 106/135/118 104/136/118 81/133/118 +f 84/134/119 80/133/119 108/136/119 +f 108/136/119 106/135/119 84/134/119 +f 96/137/120 114/138/121 113/139/122 +f 113/139/122 97/140/123 96/137/120 +f 115/141/124 111/142/125 113/139/122 +f 113/139/122 114/138/121 115/141/124 +f 107/143/126 109/144/127 111/142/125 +f 111/142/125 115/141/124 107/143/126 +f 115/145/128 103/146/128 105/147/128 +f 105/147/128 107/148/128 115/145/128 +f 114/149/129 96/150/129 99/151/129 +f 99/151/129 101/152/129 114/149/129 +f 66/153/102 65/154/102 93/155/102 +f 93/155/102 92/156/102 66/153/102 +f 74/154/98 73/153/98 88/156/98 +f 88/156/98 91/155/98 74/154/98 +f 115/145/130 114/149/130 101/152/130 +f 101/152/130 103/146/130 115/145/130 +f 116/157/131 117/158/131 118/159/132 +f 118/159/132 119/160/132 116/157/131 +f 120/161/133 121/162/133 117/158/131 +f 117/158/131 116/157/131 120/161/133 +f 122/163/134 123/164/135 124/165/136 +f 124/165/136 125/166/137 122/163/134 +f 123/164/135 126/163/138 127/167/139 +f 127/167/139 124/168/136 123/164/135 +f 118/169/140 122/170/140 125/171/141 +f 125/171/141 119/172/141 118/169/140 +f 121/169/142 126/170/142 128/173/143 +f 128/173/143 129/174/143 121/169/142 +f 120/175/100 116/176/100 124/177/100 +f 124/177/100 127/178/100 120/175/100 +f 116/176/100 119/179/100 125/180/100 +f 125/180/100 124/177/100 116/176/100 +f 130/167/144 131/168/145 123/164/135 +f 123/164/135 122/163/134 130/167/144 +f 131/165/145 128/166/146 126/163/138 +f 126/163/138 123/164/135 131/165/145 +f 132/174/147 130/173/148 122/170/140 +f 122/170/140 118/169/140 132/174/147 +f 120/172/149 127/171/149 126/170/142 +f 126/170/142 121/169/142 120/172/149 +f 133/181/150 134/182/151 135/183/152 +f 135/183/152 136/184/150 133/181/150 +f 134/182/151 137/185/153 138/186/153 +f 138/186/153 135/183/152 134/182/151 +f 136/187/154 135/188/155 139/189/156 +f 139/189/156 140/190/157 136/187/154 +f 135/188/155 138/191/158 141/192/158 +f 141/192/158 139/189/156 135/188/155 +f 140/193/159 139/194/160 142/195/161 +f 142/195/161 143/196/159 140/193/159 +f 139/194/160 141/197/162 144/198/162 +f 144/198/162 142/195/161 139/194/160 +f 143/199/163 142/200/164 134/201/165 +f 134/201/165 133/202/163 143/199/163 +f 142/200/164 144/203/166 137/204/166 +f 137/204/166 134/201/165 142/200/164 +f 145/205/167 146/206/168 147/207/99 +f 147/207/99 148/208/99 145/205/167 +f 149/209/169 145/210/170 148/211/102 +f 148/211/102 150/212/102 149/209/169 +f 146/213/171 151/214/172 152/215/173 +f 152/215/173 147/216/173 146/213/171 +f 153/217/174 154/218/174 155/219/174 +f 155/219/174 156/220/174 153/217/174 +f 157/217/175 158/218/175 159/219/175 +f 159/219/175 160/220/175 157/217/175 +f 161/221/176 162/222/176 163/223/176 +f 163/223/176 164/224/176 161/221/176 +f 149/225/177 151/226/178 165/227/179 +f 165/227/179 166/228/179 149/225/177 +f 153/220/180 160/217/180 159/218/180 +f 159/218/180 154/219/180 153/220/180 +f 157/220/181 156/217/181 155/218/181 +f 155/218/181 158/219/181 157/220/181 +f 164/224/182 163/223/182 157/229/182 +f 157/229/182 160/230/182 164/224/182 +f 163/223/183 162/222/183 156/231/183 +f 156/231/183 157/229/184 163/223/183 +f 162/222/185 161/221/185 153/232/185 +f 153/232/185 156/231/185 162/222/185 +f 164/224/186 160/230/186 153/232/186 +f 153/232/186 161/221/186 164/224/186 +f 154/233/187 159/234/187 167/235/187 +f 167/235/187 168/236/187 154/233/187 +f 168/235/188 169/236/188 155/233/188 +f 155/233/188 154/234/188 168/235/188 +f 170/236/189 158/233/190 155/234/189 +f 155/234/189 169/235/189 170/236/189 +f 170/235/191 167/236/191 159/233/191 +f 159/233/191 158/234/191 170/235/191 +f 171/237/180 172/238/180 173/239/180 +f 173/239/180 174/240/180 171/237/180 +f 175/241/99 176/242/99 177/243/99 +f 177/243/99 178/244/99 175/241/99 +f 179/238/192 172/239/192 171/240/192 +f 171/240/192 180/237/192 179/238/192 +f 177/242/101 181/243/101 182/244/101 +f 182/244/101 178/241/101 177/242/101 +f 173/238/175 183/239/175 184/240/175 +f 184/240/175 174/237/175 173/238/175 +f 185/242/173 176/243/173 175/244/173 +f 175/244/173 186/241/173 185/242/173 +f 182/241/100 181/242/100 185/243/100 +f 185/243/100 186/244/100 182/241/100 +f 184/237/193 183/238/193 179/239/193 +f 179/239/193 180/240/193 184/237/193 +f 187/245/180 168/246/180 167/247/180 +f 167/247/180 188/248/180 187/245/180 +f 169/246/192 168/247/192 187/248/192 +f 187/248/192 189/245/192 169/246/192 +f 167/247/175 170/246/175 190/245/175 +f 190/245/175 188/248/175 167/247/175 +f 170/247/193 169/246/193 189/245/193 +f 189/245/193 190/248/193 170/247/193 +f 191/249/101 192/250/101 193/251/101 +f 193/251/101 194/252/101 191/249/101 +f 195/253/173 196/254/173 197/255/173 +f 197/255/173 198/256/173 195/253/173 +f 192/257/100 195/258/100 198/259/100 +f 198/259/100 193/260/100 192/257/100 +f 199/261/194 166/262/194 180/263/194 +f 180/263/194 171/264/194 199/261/194 +f 166/262/195 165/265/195 184/266/195 +f 184/266/195 180/263/195 166/262/195 +f 165/265/196 200/267/196 174/268/196 +f 174/268/196 184/266/196 165/265/196 +f 200/267/197 199/261/197 171/264/197 +f 171/264/197 174/268/197 200/267/197 +f 188/267/198 190/265/198 183/266/198 +f 183/266/198 173/268/198 188/267/198 +f 190/265/199 189/262/199 179/263/199 +f 179/263/199 183/266/199 190/265/199 +f 189/262/200 187/261/200 172/264/200 +f 172/264/200 179/263/200 189/262/200 +f 187/261/201 188/267/201 173/268/201 +f 173/268/201 172/264/201 187/261/201 +f 147/269/202 152/270/202 186/271/202 +f 186/271/202 175/272/202 147/269/202 +f 152/270/203 150/273/203 182/274/203 +f 182/274/203 186/271/203 152/270/203 +f 150/273/204 148/275/204 178/276/204 +f 178/276/204 182/274/204 150/273/204 +f 148/275/205 147/269/205 175/272/205 +f 175/272/205 178/276/205 148/275/205 +f 194/275/206 193/273/206 181/274/206 +f 181/274/206 177/276/206 194/275/206 +f 193/273/207 198/270/207 185/271/207 +f 185/271/207 181/274/207 193/273/207 +f 198/270/208 197/269/208 176/272/208 +f 176/272/208 185/271/208 198/270/208 +f 197/269/209 194/275/209 177/276/209 +f 177/276/209 176/272/209 197/269/209 +f 199/277/210 200/278/210 146/206/168 +f 146/206/168 145/205/167 199/277/210 +f 166/279/211 199/280/211 145/210/170 +f 145/210/170 149/209/169 166/279/211 +f 200/281/212 165/282/212 151/214/172 +f 151/214/172 146/213/171 200/281/212 +f 150/283/100 152/284/100 151/226/178 +f 151/226/178 149/225/177 150/283/100 +f 201/285/193 202/286/193 203/287/193 +f 203/287/193 204/288/193 201/285/193 +f 205/289/213 206/290/213 207/291/213 +f 207/291/213 208/292/213 205/289/213 +f 201/285/214 209/288/215 210/287/215 +f 210/287/215 202/286/214 201/285/214 +f 211/289/216 212/290/216 213/291/180 +f 213/291/180 214/292/180 211/289/216 +f 215/293/213 216/287/213 217/288/213 +f 217/288/213 218/294/213 215/293/213 +f 219/292/217 220/291/217 221/293/218 +f 221/293/218 222/294/218 219/292/217 +f 223/293/193 224/291/193 225/292/193 +f 225/292/193 226/294/193 223/293/193 +f 227/293/219 228/287/220 229/288/220 +f 229/288/220 230/294/219 227/293/219 +f 223/293/193 226/294/193 204/288/193 +f 204/288/193 203/287/193 223/293/193 +f 215/293/213 218/294/213 208/292/213 +f 208/292/213 207/291/213 215/293/213 +f 209/288/215 222/294/218 221/293/218 +f 221/293/218 210/287/215 209/288/215 +f 227/293/219 230/294/219 214/292/180 +f 214/292/180 213/291/180 227/293/219 +f 216/287/213 212/286/213 211/285/213 +f 211/285/213 217/288/213 216/287/213 +f 231/289/217 232/290/217 220/291/217 +f 220/291/217 219/292/217 231/289/217 +f 224/291/193 206/295/193 205/289/193 +f 205/289/193 225/292/193 224/291/193 +f 228/287/220 232/286/221 231/285/221 +f 231/285/221 229/288/220 228/287/220 +f 233/296/222 234/297/223 235/298/224 +f 233/296/222 235/298/224 236/299/225 +f 233/300/222 237/301/226 238/302/227 +f 233/300/222 238/302/227 234/303/223 +f 234/297/223 239/304/228 240/305/229 +f 240/305/229 235/298/224 234/297/223 +f 235/298/224 240/305/229 241/306/230 +f 241/306/230 236/299/225 235/298/224 +f 237/301/226 242/307/231 243/308/232 +f 243/308/232 238/302/227 237/301/226 +f 238/302/227 243/308/232 239/309/228 +f 239/309/228 234/303/223 238/302/227 +f 239/304/228 244/309/233 245/308/234 +f 245/308/234 240/305/229 239/304/228 +f 240/305/229 245/308/234 246/307/235 +f 246/307/235 241/306/230 240/305/229 +f 242/307/231 247/306/236 248/305/237 +f 248/305/237 243/308/232 242/307/231 +f 243/308/232 248/305/237 244/304/233 +f 244/304/233 239/309/228 243/308/232 +f 244/309/233 249/303/238 250/302/239 +f 250/302/239 245/308/234 244/309/233 +f 245/308/234 250/302/239 251/301/240 +f 251/301/240 246/307/235 245/308/234 +f 247/306/236 252/299/241 253/298/242 +f 253/298/242 248/305/237 247/306/236 +f 248/305/237 253/298/242 249/297/238 +f 249/297/238 244/304/233 248/305/237 +f 254/300/243 250/302/239 249/303/238 +f 254/300/243 251/301/240 250/302/239 +f 254/296/243 253/298/242 252/299/241 +f 254/296/243 249/297/238 253/298/242 +f 233/296/222 236/299/225 255/310/244 +f 255/310/244 256/311/245 233/296/222 +f 237/301/226 233/300/222 256/312/245 +f 256/312/245 257/313/246 237/301/226 +f 236/299/225 241/306/230 258/314/247 +f 258/314/247 255/310/244 236/299/225 +f 242/307/231 237/301/226 257/313/246 +f 257/313/246 259/315/248 242/307/231 +f 241/306/230 246/307/235 260/316/249 +f 260/316/249 258/314/247 241/306/230 +f 247/306/236 242/307/231 259/315/248 +f 259/315/248 261/314/250 247/306/236 +f 246/307/235 251/301/240 262/313/251 +f 262/313/251 260/316/249 246/307/235 +f 252/299/241 247/306/236 261/314/250 +f 261/314/250 263/310/252 252/299/241 +f 251/301/240 254/300/243 264/312/253 +f 264/312/253 262/313/251 251/301/240 +f 254/296/243 252/299/241 263/310/252 +f 263/310/252 264/311/253 254/296/243 +f 256/311/245 255/310/244 265/317/254 +f 265/317/254 266/318/255 256/311/245 +f 257/313/246 256/312/245 266/319/255 +f 266/319/255 267/320/256 257/313/246 +f 255/310/244 258/314/247 268/321/257 +f 268/321/257 265/317/254 255/310/244 +f 259/315/248 257/313/246 267/320/256 +f 267/320/256 269/322/258 259/315/248 +f 258/314/247 260/316/249 270/322/259 +f 270/322/259 268/321/257 258/314/247 +f 261/314/250 259/315/248 269/322/258 +f 269/322/258 271/321/260 261/314/250 +f 260/316/249 262/313/251 272/320/261 +f 272/320/261 270/322/259 260/316/249 +f 263/310/252 261/314/250 271/321/260 +f 271/321/260 273/317/262 263/310/252 +f 262/313/251 264/312/253 274/319/263 +f 274/319/263 272/320/261 262/313/251 +f 264/311/253 263/310/252 273/317/262 +f 273/317/262 274/318/263 264/311/253 +f 275/323/264 276/324/265 277/325/266 +f 277/325/266 278/326/267 275/323/264 +f 276/324/265 279/327/268 280/328/269 +f 280/328/269 277/325/266 276/324/265 +f 279/327/268 281/329/270 282/330/271 +f 282/330/271 280/328/269 279/327/268 +f 281/329/270 283/331/272 284/332/273 +f 284/332/273 282/330/271 281/329/270 +f 283/331/272 285/333/274 286/334/275 +f 286/334/275 284/332/273 283/331/272 +f 285/333/274 275/335/264 278/336/267 +f 278/336/267 286/334/275 285/333/274 +f 287/337/276 288/338/277 289/339/278 +f 287/337/279 289/340/280 290/341/281 +f 287/337/282 290/338/283 291/339/284 +f 287/337/285 291/340/286 288/341/287 +f 292/342/288 293/343/288 294/344/288 +f 294/344/288 295/345/288 292/342/288 +f 295/342/289 294/343/289 296/344/290 +f 296/344/290 297/345/289 295/342/289 +f 297/342/291 296/343/291 298/344/291 +f 298/344/291 299/345/291 297/342/291 +f 299/342/292 298/343/292 293/344/292 +f 293/344/292 292/345/292 299/342/292 +f 300/346/293 301/347/293 292/342/293 +f 292/342/293 295/345/293 300/346/293 +f 301/346/294 302/347/294 299/342/294 +f 299/342/294 292/345/294 301/346/294 +f 302/346/295 303/347/295 297/342/295 +f 297/342/295 299/345/295 302/346/295 +f 303/346/296 300/347/296 295/342/296 +f 295/342/296 297/345/296 303/346/296 +f 304/348/297 305/349/297 306/350/297 +f 306/350/297 307/351/297 304/348/297 +f 308/352/297 309/353/297 310/354/297 +f 310/354/297 311/355/297 308/352/297 +f 307/356/298 312/357/298 313/358/298 +f 313/358/298 304/359/298 307/356/298 +f 313/360/299 314/361/299 305/362/299 +f 305/362/299 304/363/299 313/360/299 +f 309/364/300 315/365/300 316/366/301 +f 316/366/301 310/367/301 309/364/300 +f 310/359/302 316/358/302 317/357/302 +f 317/357/302 311/356/302 310/359/302 +f 311/368/303 317/369/303 318/370/303 +f 318/370/303 308/371/303 311/368/303 +f 309/353/297 308/352/297 306/350/297 +f 306/350/297 305/349/297 309/353/297 +f 315/365/300 309/364/300 305/362/299 +f 305/362/299 314/361/299 315/365/300 +f 312/369/304 307/368/304 306/371/304 +f 306/371/304 319/370/304 312/369/304 +f 306/372/297 308/373/297 320/374/297 +f 320/374/297 321/375/297 306/372/297 +f 308/376/305 318/377/305 322/378/305 +f 322/378/305 320/379/305 308/376/305 +f 319/377/98 306/376/98 321/379/98 +f 321/379/98 323/378/98 319/377/98 +f 324/380/100 325/381/100 326/382/100 +f 326/382/100 327/383/100 324/380/100 +f 324/384/297 327/385/297 328/386/297 +f 328/386/297 329/387/297 324/384/297 +f 330/387/306 331/386/306 332/388/306 +f 332/388/306 333/389/306 330/387/306 +f 334/389/306 335/388/306 336/390/306 +f 336/390/306 337/391/306 334/389/306 +f 338/391/297 339/390/297 340/392/297 +f 340/392/297 341/393/297 338/391/297 +f 342/393/297 343/392/297 344/394/297 +f 344/394/297 345/395/297 342/393/297 +f 329/380/100 328/383/100 331/396/100 +f 331/396/100 330/397/100 329/380/100 +f 333/397/100 332/398/100 335/399/100 +f 335/399/100 334/400/100 333/397/100 +f 337/401/307 336/399/307 339/402/307 +f 339/402/307 338/403/307 337/401/307 +f 341/403/100 340/402/100 343/404/100 +f 343/404/100 342/405/100 341/403/100 +f 345/395/297 344/394/297 346/406/297 +f 346/406/297 347/407/297 345/395/297 +f 348/408/308 349/409/309 350/410/310 +f 350/410/310 351/411/310 348/408/308 +f 352/412/98 348/413/98 351/414/311 +f 351/414/311 353/415/311 352/412/98 +f 354/416/99 355/417/99 356/418/99 +f 356/418/99 357/419/99 354/416/99 +f 358/420/103 350/421/103 349/422/312 +f 349/422/312 359/423/312 358/420/103 +f 360/424/100 361/425/100 362/426/100 +f 362/426/100 363/427/100 360/424/100 +f 357/428/297 356/429/297 349/409/309 +f 349/409/309 348/408/308 357/428/297 +f 364/430/313 365/431/313 351/411/310 +f 351/411/310 350/410/310 364/430/313 +f 354/378/98 357/432/98 348/413/98 +f 348/413/98 352/412/98 354/378/98 +f 365/433/311 366/434/311 353/415/311 +f 353/415/311 351/414/311 365/433/311 +f 367/435/103 364/436/103 350/421/103 +f 350/421/103 358/420/103 367/435/103 +f 356/437/312 355/438/312 359/423/312 +f 359/423/312 349/422/312 356/437/312 +f 366/434/311 365/433/311 362/439/311 +f 362/439/311 361/440/311 366/434/311 +f 368/431/297 369/430/297 370/441/297 +f 370/441/297 371/442/297 368/431/297 +f 364/436/305 367/435/305 360/443/305 +f 360/443/305 363/444/305 364/436/305 +f 365/445/99 364/446/99 369/447/99 +f 369/447/99 368/448/99 365/445/99 +f 364/436/314 363/444/314 370/449/314 +f 370/449/314 369/450/314 364/436/314 +f 363/427/100 362/426/100 371/451/100 +f 371/451/100 370/452/100 363/427/100 +f 362/439/315 365/433/315 368/453/315 +f 368/453/315 371/454/315 362/439/315 +f 372/411/310 373/408/316 374/409/316 +f 374/409/316 375/410/310 372/411/310 +f 375/414/103 374/413/102 376/412/102 +f 376/412/102 377/415/103 375/414/103 +f 378/416/99 379/419/99 380/418/99 +f 380/418/99 381/417/99 378/416/99 +f 373/422/98 372/421/98 382/420/98 +f 382/420/98 383/423/98 373/422/98 +f 384/425/100 385/426/100 386/427/100 +f 386/427/100 387/424/100 384/425/100 +f 373/408/316 380/428/317 379/429/317 +f 379/429/317 374/409/316 373/408/316 +f 375/410/310 388/430/313 389/431/313 +f 389/431/313 372/411/310 375/410/310 +f 374/413/102 379/432/102 378/378/102 +f 378/378/102 376/412/102 374/413/102 +f 377/415/103 390/434/103 388/433/103 +f 388/433/103 375/414/103 377/415/103 +f 372/421/98 389/436/98 391/435/98 +f 391/435/98 382/420/98 372/421/98 +f 383/423/98 381/438/173 380/437/173 +f 380/437/173 373/422/98 383/423/98 +f 390/434/305 387/440/305 386/439/305 +f 386/439/305 388/433/305 390/434/305 +f 392/430/318 393/441/318 394/442/318 +f 394/442/318 395/431/318 392/430/318 +f 389/436/98 385/444/98 384/443/98 +f 384/443/98 391/435/98 389/436/98 +f 388/446/99 392/447/99 395/448/99 +f 395/448/99 389/445/99 388/446/99 +f 389/436/98 395/450/98 394/449/98 +f 394/449/98 385/444/98 389/436/98 +f 385/426/100 394/451/100 393/452/100 +f 393/452/100 386/427/100 385/426/100 +f 386/439/102 393/454/102 392/453/102 +f 392/453/102 388/433/102 386/439/102 +f 396/455/319 397/456/319 398/457/320 +f 398/457/320 399/458/320 396/455/319 +f 400/459/321 401/460/321 402/461/322 +f 402/461/322 403/462/322 400/459/321 +f 401/463/100 396/464/100 399/465/100 +f 399/465/100 402/466/100 401/463/100 +f 399/458/320 398/457/320 404/467/205 +f 404/467/205 405/468/205 399/458/320 +f 403/462/322 402/461/322 406/469/323 +f 406/469/323 407/470/323 403/462/322 +f 402/466/100 399/465/100 405/471/100 +f 405/471/100 406/472/100 402/466/100 +f 405/467/205 404/468/205 408/458/324 +f 408/458/324 409/457/324 405/467/205 +f 407/470/323 406/469/323 410/461/325 +f 410/461/325 411/462/325 407/470/323 +f 406/472/100 405/471/100 409/473/100 +f 409/473/100 410/474/100 406/472/100 +f 409/457/324 408/458/324 412/455/326 +f 412/455/326 413/456/326 409/457/324 +f 411/462/325 410/461/325 414/460/327 +f 414/460/327 415/459/327 411/462/325 +f 410/474/100 409/473/100 413/475/100 +f 413/475/100 414/476/100 410/474/100 +f 397/456/98 396/455/98 416/477/98 +f 416/477/98 417/478/98 397/456/98 +f 401/460/102 400/459/102 418/479/102 +f 418/479/102 419/480/102 401/460/102 +f 396/464/100 401/463/100 419/481/100 +f 419/481/100 416/482/100 396/464/100 +f 413/456/102 412/455/102 420/477/102 +f 420/477/102 421/478/102 413/456/102 +f 415/459/98 414/460/98 422/480/98 +f 422/480/98 423/479/98 415/459/98 +f 414/476/100 413/475/100 421/483/100 +f 421/483/100 422/484/100 414/476/100 +f 423/485/100 418/486/100 400/487/100 +f 400/487/100 415/488/100 423/485/100 +f 415/488/100 400/487/100 403/489/100 +f 403/489/100 411/490/100 415/488/100 +f 424/491/100 425/492/100 426/493/100 +f 426/493/100 427/494/100 424/491/100 +f 428/495/315 429/496/315 430/497/315 +f 430/497/315 431/498/315 428/495/315 +f 432/499/328 433/500/328 434/501/329 +f 434/501/329 435/502/329 432/499/328 +f 436/503/312 437/497/312 438/496/312 +f 438/496/312 439/504/312 436/503/312 +f 440/505/330 441/506/330 442/507/331 +f 442/507/331 443/508/331 440/505/330 +f 444/509/100 445/510/100 446/511/100 +f 433/512/332 447/513/332 448/514/332 +f 448/514/332 434/515/332 433/512/332 +f 449/516/100 450/517/100 451/518/100 +f 452/519/100 453/520/100 451/518/100 +f 451/518/100 450/517/100 452/519/100 +f 454/521/100 455/522/100 426/493/100 +f 426/493/100 425/492/100 454/521/100 +f 456/523/333 457/524/333 433/500/328 +f 433/500/328 432/499/328 456/523/333 +f 458/525/334 459/526/334 441/506/330 +f 441/506/330 440/505/330 458/525/334 +f 433/512/335 457/527/335 460/528/335 +f 460/528/335 447/513/335 433/512/335 +f 452/519/100 444/509/100 446/511/100 +f 446/511/100 453/520/100 452/519/100 +f 461/529/102 448/530/102 424/531/102 +f 424/531/102 427/532/102 461/529/102 +f 448/530/336 447/533/336 425/534/336 +f 425/534/336 424/531/336 448/530/336 +f 447/533/337 460/535/337 454/536/337 +f 454/536/337 425/534/337 447/533/337 +f 460/535/98 462/537/98 455/538/98 +f 455/538/98 454/536/98 460/535/98 +f 462/539/338 463/540/338 426/541/338 +f 426/541/338 455/542/338 462/539/338 +f 463/540/339 461/543/339 427/544/339 +f 427/544/339 426/541/339 463/540/339 +f 462/545/100 460/528/100 457/527/100 +f 457/527/100 464/546/100 462/545/100 +f 464/547/102 457/524/102 456/523/102 +f 456/523/102 465/548/102 464/547/102 +f 435/502/98 434/501/98 466/549/98 +f 466/549/98 467/550/98 435/502/98 +f 466/551/100 434/515/100 448/514/100 +f 448/514/100 461/552/100 466/551/100 +f 430/497/315 429/496/315 468/504/315 +f 468/504/315 469/503/315 430/497/315 +f 466/553/340 461/543/340 446/554/340 +f 446/554/340 445/555/340 466/553/340 +f 461/543/341 463/540/341 453/556/341 +f 453/556/341 446/554/341 461/543/341 +f 463/540/342 462/539/342 451/557/342 +f 451/557/342 453/556/342 463/540/342 +f 462/539/343 464/558/343 449/559/343 +f 449/559/343 451/557/343 462/539/343 +f 438/496/312 437/497/312 470/498/312 +f 470/498/312 471/495/312 438/496/312 +f 442/507/344 441/506/344 452/560/344 +f 452/560/344 450/561/344 442/507/344 +f 441/506/345 459/526/345 444/562/345 +f 444/562/345 452/560/345 441/506/345 +f 467/563/318 466/553/318 429/564/318 +f 429/564/318 428/565/318 467/563/318 +f 466/553/318 445/555/318 468/566/318 +f 468/566/318 429/564/318 466/553/318 +f 445/510/100 444/509/100 469/567/100 +f 469/567/100 468/568/100 445/510/100 +f 444/562/346 459/526/346 430/569/346 +f 430/569/346 469/570/346 444/562/346 +f 459/526/347 458/525/347 431/571/347 +f 431/571/347 430/569/347 459/526/347 +f 443/508/347 442/507/347 437/572/347 +f 437/572/347 436/573/347 443/508/347 +f 442/507/346 450/561/346 470/574/346 +f 470/574/346 437/572/346 442/507/346 +f 450/517/100 449/516/100 471/575/100 +f 471/575/100 470/576/100 450/517/100 +f 449/559/318 464/558/318 438/577/318 +f 438/577/318 471/578/318 449/559/318 +f 464/558/318 465/579/318 439/580/318 +f 439/580/318 438/577/318 464/558/318 +f 472/491/100 473/492/100 474/493/100 +f 474/493/100 475/494/100 472/491/100 +f 476/495/315 477/496/315 478/497/315 +f 478/497/315 479/498/315 476/495/315 +f 480/499/328 481/500/328 482/501/329 +f 482/501/329 483/502/329 480/499/328 +f 484/503/312 485/497/312 486/496/312 +f 486/496/312 487/504/312 484/503/312 +f 488/505/330 489/506/330 490/507/331 +f 490/507/331 491/508/331 488/505/330 +f 492/509/100 493/510/100 494/511/100 +f 481/512/332 495/513/332 496/514/332 +f 496/514/332 482/515/332 481/512/332 +f 497/516/100 498/517/100 499/518/100 +f 500/519/100 501/520/100 499/518/100 +f 499/518/100 498/517/100 500/519/100 +f 502/521/100 503/522/100 474/493/100 +f 474/493/100 473/492/100 502/521/100 +f 504/523/348 505/524/348 481/500/328 +f 481/500/328 480/499/328 504/523/348 +f 506/525/334 507/526/334 489/506/330 +f 489/506/330 488/505/330 506/525/334 +f 481/512/335 505/527/335 508/528/335 +f 508/528/335 495/513/335 481/512/335 +f 500/519/100 492/509/100 494/511/100 +f 494/511/100 501/520/100 500/519/100 +f 509/529/102 496/530/102 472/531/102 +f 472/531/102 475/532/102 509/529/102 +f 496/530/336 495/533/336 473/534/336 +f 473/534/336 472/531/336 496/530/336 +f 495/533/337 508/535/337 502/536/337 +f 502/536/337 473/534/337 495/533/337 +f 508/535/98 510/537/98 503/538/98 +f 503/538/98 502/536/98 508/535/98 +f 510/539/349 511/540/349 474/541/349 +f 474/541/349 503/542/349 510/539/349 +f 511/540/350 509/543/350 475/544/350 +f 475/544/350 474/541/350 511/540/350 +f 510/545/100 508/528/100 505/527/100 +f 505/527/100 512/546/100 510/545/100 +f 512/547/102 505/524/102 504/523/102 +f 504/523/102 513/548/102 512/547/102 +f 483/502/98 482/501/98 514/549/98 +f 514/549/98 515/550/98 483/502/98 +f 514/551/100 482/515/100 496/514/100 +f 496/514/100 509/552/100 514/551/100 +f 478/497/315 477/496/315 516/504/315 +f 516/504/315 517/503/315 478/497/315 +f 514/553/351 509/543/351 494/554/351 +f 494/554/351 493/555/351 514/553/351 +f 509/543/352 511/540/352 501/556/352 +f 501/556/352 494/554/352 509/543/352 +f 511/540/353 510/539/353 499/557/353 +f 499/557/353 501/556/353 511/540/353 +f 510/539/354 512/558/354 497/559/354 +f 497/559/354 499/557/354 510/539/354 +f 486/496/312 485/497/312 518/498/312 +f 518/498/312 519/495/312 486/496/312 +f 490/507/344 489/506/344 500/560/344 +f 500/560/344 498/561/344 490/507/344 +f 489/506/345 507/526/345 492/562/345 +f 492/562/345 500/560/345 489/506/345 +f 515/563/355 514/553/355 477/564/355 +f 477/564/355 476/565/355 515/563/355 +f 514/553/355 493/555/355 516/566/355 +f 516/566/355 477/564/355 514/553/355 +f 493/510/100 492/509/100 517/567/100 +f 517/567/100 516/568/100 493/510/100 +f 492/562/346 507/526/346 478/569/346 +f 478/569/346 517/570/346 492/562/346 +f 507/526/347 506/525/347 479/571/347 +f 479/571/347 478/569/347 507/526/347 +f 491/508/356 490/507/356 485/572/356 +f 485/572/356 484/573/356 491/508/356 +f 490/507/357 498/561/357 518/574/357 +f 518/574/357 485/572/357 490/507/357 +f 498/517/100 497/516/100 519/575/100 +f 519/575/100 518/576/100 498/517/100 +f 497/559/318 512/558/318 486/577/318 +f 486/577/318 519/578/318 497/559/318 +f 512/558/318 513/579/318 487/580/318 +f 487/580/318 486/577/318 512/558/318 +f 520/581/358 521/582/358 522/583/359 +f 522/583/359 523/584/359 520/581/358 +f 524/585/360 525/586/360 526/587/360 +f 523/584/359 522/583/359 527/588/361 +f 527/588/361 528/589/361 523/584/359 +f 526/587/362 525/586/362 529/590/362 +f 528/589/361 527/588/361 530/591/363 +f 530/591/363 531/592/363 528/589/361 +f 529/590/360 525/586/360 532/593/360 +f 531/592/363 530/591/363 533/594/364 +f 533/594/364 534/595/364 531/592/363 +f 532/593/315 525/586/315 535/596/315 +f 534/595/364 533/594/364 536/597/365 +f 536/597/365 537/598/366 534/595/364 +f 535/596/315 525/586/315 538/599/315 +f 537/598/366 536/597/365 539/600/367 +f 539/600/367 540/601/367 537/598/366 +f 538/599/315 525/586/315 541/602/315 +f 540/601/367 539/600/367 542/603/368 +f 542/603/368 543/604/368 540/601/367 +f 541/602/369 525/586/369 544/605/369 +f 543/604/368 542/603/368 545/606/370 +f 545/606/370 546/607/370 543/604/368 +f 544/605/371 525/586/371 547/608/371 +f 546/607/370 545/606/370 521/609/358 +f 521/609/358 520/610/358 546/607/370 +f 547/608/311 525/586/311 524/585/311 +f 522/611/315 521/612/315 548/585/315 +f 548/585/315 549/587/315 522/611/315 +f 521/612/315 545/613/315 550/608/315 +f 550/608/315 548/585/315 521/612/315 +f 545/613/315 542/614/315 551/605/315 +f 551/605/315 550/608/315 545/613/315 +f 542/614/311 539/615/311 552/602/311 +f 552/602/311 551/605/311 542/614/311 +f 539/615/315 536/616/315 553/599/315 +f 553/599/315 552/602/315 539/615/315 +f 536/616/315 533/617/315 554/596/315 +f 554/596/315 553/599/315 536/616/315 +f 533/617/315 530/618/315 555/593/315 +f 555/593/315 554/596/315 533/617/315 +f 530/618/360 527/619/360 556/590/360 +f 556/590/360 555/593/360 530/618/360 +f 527/619/315 522/611/315 549/587/315 +f 549/587/315 556/590/315 527/619/315 +f 549/620/372 548/621/372 524/622/372 +f 524/622/372 526/623/372 549/620/372 +f 548/621/373 550/624/373 547/625/373 +f 547/625/373 524/622/373 548/621/373 +f 550/624/363 551/626/363 544/627/363 +f 544/627/363 547/625/363 550/624/363 +f 551/626/361 552/628/361 541/629/361 +f 541/629/361 544/627/361 551/626/361 +f 552/628/374 553/630/374 538/631/374 +f 538/631/374 541/629/374 552/628/374 +f 553/630/318 554/632/318 535/633/318 +f 535/633/318 538/631/318 553/630/318 +f 554/632/375 555/634/375 532/635/375 +f 532/635/375 535/633/375 554/632/375 +f 555/634/376 556/636/376 529/637/376 +f 529/637/376 532/635/376 555/634/376 +f 556/638/377 549/620/377 526/623/377 +f 526/623/377 529/639/377 556/638/377 +f 557/493/99 558/492/99 559/491/99 +f 559/491/99 560/494/99 557/493/99 +f 561/497/98 562/496/98 563/495/98 +f 563/495/98 564/498/98 561/497/98 +f 565/501/329 566/500/328 567/499/328 +f 567/499/328 568/502/329 565/501/329 +f 569/496/312 570/497/312 571/503/312 +f 571/503/312 572/504/312 569/496/312 +f 573/507/378 574/506/379 575/505/379 +f 575/505/379 576/508/378 573/507/378 +f 577/509/99 578/511/99 579/510/99 +f 580/514/380 581/513/380 566/512/380 +f 566/512/380 565/515/380 580/514/380 +f 582/516/99 583/518/99 584/517/99 +f 583/518/99 585/520/99 586/519/99 +f 586/519/99 584/517/99 583/518/99 +f 557/493/99 587/522/99 588/521/99 +f 588/521/99 558/492/99 557/493/99 +f 566/500/328 589/524/333 590/523/333 +f 590/523/333 567/499/328 566/500/328 +f 574/506/379 591/526/381 592/525/381 +f 592/525/381 575/505/379 574/506/379 +f 566/512/382 581/513/382 593/528/382 +f 593/528/382 589/527/382 566/512/382 +f 586/519/99 585/520/99 578/511/99 +f 578/511/99 577/509/99 586/519/99 +f 594/529/102 560/532/102 559/531/102 +f 559/531/102 580/530/102 594/529/102 +f 580/530/336 559/531/336 558/534/336 +f 558/534/336 581/533/336 580/530/336 +f 581/533/383 558/534/383 588/536/383 +f 588/536/383 593/535/383 581/533/383 +f 593/535/98 588/536/98 587/538/98 +f 587/538/98 595/537/98 593/535/98 +f 595/539/384 587/542/384 557/541/384 +f 557/541/384 596/540/384 595/539/384 +f 596/540/385 557/541/385 560/544/385 +f 560/544/385 594/543/385 596/540/385 +f 595/545/99 597/546/99 589/527/99 +f 589/527/99 593/528/99 595/545/99 +f 597/547/102 598/548/102 590/523/102 +f 590/523/102 589/524/102 597/547/102 +f 599/549/98 565/501/98 568/502/98 +f 568/502/98 600/550/98 599/549/98 +f 599/551/99 594/552/99 580/514/99 +f 580/514/99 565/515/99 599/551/99 +f 561/497/98 601/503/98 602/504/98 +f 602/504/98 562/496/98 561/497/98 +f 599/553/386 579/555/386 578/554/386 +f 578/554/386 594/543/386 599/553/386 +f 594/543/387 578/554/387 585/556/387 +f 585/556/387 596/540/387 594/543/387 +f 596/540/338 585/556/338 583/557/338 +f 583/557/338 595/539/338 596/540/338 +f 595/539/343 583/557/343 582/559/343 +f 582/559/343 597/558/343 595/539/343 +f 569/496/312 603/495/312 604/498/312 +f 604/498/312 570/497/312 569/496/312 +f 573/507/344 584/561/344 586/560/344 +f 586/560/344 574/506/344 573/507/344 +f 574/506/345 586/560/345 577/562/345 +f 577/562/345 591/526/345 574/506/345 +f 600/563/318 563/565/318 562/564/318 +f 562/564/318 599/553/318 600/563/318 +f 599/553/318 562/564/318 602/566/318 +f 602/566/318 579/555/318 599/553/318 +f 579/510/99 602/568/99 601/567/99 +f 601/567/99 577/509/99 579/510/99 +f 577/562/346 601/570/346 561/569/346 +f 561/569/346 591/526/346 577/562/346 +f 591/526/388 561/569/388 564/571/388 +f 564/571/388 592/525/388 591/526/388 +f 576/508/388 571/573/388 570/572/388 +f 570/572/388 573/507/388 576/508/388 +f 573/507/346 570/572/346 604/574/346 +f 604/574/346 584/561/346 573/507/346 +f 584/517/99 604/576/99 603/575/99 +f 603/575/99 582/516/99 584/517/99 +f 582/559/318 603/578/318 569/577/318 +f 569/577/318 597/558/318 582/559/318 +f 597/558/318 569/577/318 572/580/318 +f 572/580/318 598/579/318 597/558/318 +f 605/493/99 606/492/99 607/491/99 +f 607/491/99 608/494/99 605/493/99 +f 609/497/315 610/496/315 611/495/315 +f 611/495/315 612/498/315 609/497/315 +f 613/501/389 614/500/328 615/499/328 +f 615/499/328 616/502/389 613/501/389 +f 617/496/312 618/497/312 619/503/312 +f 619/503/312 620/504/312 617/496/312 +f 621/507/378 622/506/379 623/505/379 +f 623/505/379 624/508/378 621/507/378 +f 625/509/99 626/511/99 627/510/99 +f 628/514/390 629/513/390 614/512/390 +f 614/512/390 613/515/390 628/514/390 +f 630/516/99 631/518/99 632/517/99 +f 631/518/99 633/520/99 634/519/99 +f 634/519/99 632/517/99 631/518/99 +f 605/493/99 635/522/99 636/521/99 +f 636/521/99 606/492/99 605/493/99 +f 614/500/328 637/524/333 638/523/333 +f 638/523/333 615/499/328 614/500/328 +f 622/506/379 639/526/381 640/525/381 +f 640/525/381 623/505/379 622/506/379 +f 614/512/391 629/513/391 641/528/391 +f 641/528/391 637/527/391 614/512/391 +f 634/519/99 633/520/99 626/511/99 +f 626/511/99 625/509/99 634/519/99 +f 642/529/312 608/532/312 607/531/312 +f 607/531/312 628/530/312 642/529/312 +f 628/530/392 607/531/392 606/534/392 +f 606/534/392 629/533/392 628/530/392 +f 629/533/337 606/534/337 636/536/337 +f 636/536/337 641/535/337 629/533/337 +f 641/535/98 636/536/98 635/538/98 +f 635/538/98 643/537/98 641/535/98 +f 643/539/393 635/542/393 605/541/393 +f 605/541/393 644/540/393 643/539/393 +f 644/540/394 605/541/394 608/544/394 +f 608/544/394 642/543/394 644/540/394 +f 643/545/99 645/546/99 637/527/99 +f 637/527/99 641/528/99 643/545/99 +f 645/547/102 646/548/102 638/523/102 +f 638/523/102 637/524/102 645/547/102 +f 647/549/98 613/501/98 616/502/98 +f 616/502/98 648/550/98 647/549/98 +f 647/551/99 642/552/99 628/514/99 +f 628/514/99 613/515/99 647/551/99 +f 609/497/315 649/503/315 650/504/315 +f 650/504/315 610/496/315 609/497/315 +f 647/553/351 627/555/351 626/554/351 +f 626/554/351 642/543/351 647/553/351 +f 642/543/395 626/554/395 633/556/395 +f 633/556/395 644/540/395 642/543/395 +f 644/540/396 633/556/396 631/557/396 +f 631/557/396 643/539/396 644/540/396 +f 643/539/343 631/557/343 630/559/343 +f 630/559/343 645/558/343 643/539/343 +f 617/496/312 651/495/312 652/498/312 +f 652/498/312 618/497/312 617/496/312 +f 621/507/344 632/561/344 634/560/344 +f 634/560/344 622/506/344 621/507/344 +f 622/506/345 634/560/345 625/562/345 +f 625/562/345 639/526/345 622/506/345 +f 648/563/318 611/565/318 610/564/318 +f 610/564/318 647/553/318 648/563/318 +f 647/553/318 610/564/318 650/566/318 +f 650/566/318 627/555/318 647/553/318 +f 627/510/99 650/568/99 649/567/99 +f 649/567/99 625/509/99 627/510/99 +f 625/562/346 649/570/346 609/569/346 +f 609/569/346 639/526/346 625/562/346 +f 639/526/388 609/569/388 612/571/388 +f 612/571/388 640/525/388 639/526/388 +f 624/508/388 619/573/388 618/572/388 +f 618/572/388 621/507/388 624/508/388 +f 621/507/346 618/572/346 652/574/346 +f 652/574/346 632/561/346 621/507/346 +f 632/517/99 652/576/99 651/575/99 +f 651/575/99 630/516/99 632/517/99 +f 630/559/318 651/578/318 617/577/318 +f 617/577/318 645/558/318 630/559/318 +f 645/558/318 617/577/318 620/580/318 +f 620/580/318 646/579/318 645/558/318 +f 653/493/99 654/492/99 655/491/99 +f 655/491/99 656/494/99 653/493/99 +f 657/497/315 658/496/315 659/495/315 +f 659/495/315 660/498/315 657/497/315 +f 661/501/389 662/500/328 663/499/328 +f 663/499/328 664/502/389 661/501/389 +f 665/496/312 666/497/312 667/503/312 +f 667/503/312 668/504/312 665/496/312 +f 669/507/397 670/506/379 671/505/379 +f 671/505/379 672/508/397 669/507/397 +f 673/509/99 674/511/99 675/510/99 +f 676/514/380 677/513/380 662/512/380 +f 662/512/380 661/515/380 676/514/380 +f 678/516/99 679/518/99 680/517/99 +f 679/518/99 681/520/99 682/519/99 +f 682/519/99 680/517/99 679/518/99 +f 653/493/99 683/522/99 684/521/99 +f 684/521/99 654/492/99 653/493/99 +f 662/500/328 685/524/333 686/523/333 +f 686/523/333 663/499/328 662/500/328 +f 670/506/379 687/526/381 688/525/381 +f 688/525/381 671/505/379 670/506/379 +f 662/512/382 677/513/382 689/528/382 +f 689/528/382 685/527/382 662/512/382 +f 682/519/99 681/520/99 674/511/99 +f 674/511/99 673/509/99 682/519/99 +f 690/529/102 656/532/102 655/531/102 +f 655/531/102 676/530/102 690/529/102 +f 676/530/392 655/531/392 654/534/392 +f 654/534/392 677/533/392 676/530/392 +f 677/533/383 654/534/383 684/536/383 +f 684/536/383 689/535/398 677/533/383 +f 689/535/98 684/536/98 683/538/98 +f 683/538/98 691/537/98 689/535/98 +f 691/539/399 683/542/399 653/541/399 +f 653/541/399 692/540/399 691/539/399 +f 692/540/400 653/541/400 656/544/400 +f 656/544/400 690/543/400 692/540/400 +f 691/545/99 693/546/99 685/527/99 +f 685/527/99 689/528/99 691/545/99 +f 693/547/102 694/548/102 686/523/102 +f 686/523/102 685/524/102 693/547/102 +f 695/549/98 661/501/98 664/502/98 +f 664/502/98 696/550/98 695/549/98 +f 695/551/99 690/552/99 676/514/99 +f 676/514/99 661/515/99 695/551/99 +f 657/497/315 697/503/315 698/504/315 +f 698/504/315 658/496/315 657/497/315 +f 695/553/401 675/555/401 674/554/401 +f 674/554/401 690/543/401 695/553/401 +f 690/543/402 674/554/402 681/556/402 +f 681/556/402 692/540/402 690/543/402 +f 692/540/403 681/556/403 679/557/403 +f 679/557/403 691/539/403 692/540/403 +f 691/539/354 679/557/354 678/559/354 +f 678/559/354 693/558/354 691/539/354 +f 665/496/312 699/495/312 700/498/312 +f 700/498/312 666/497/312 665/496/312 +f 669/507/344 680/561/344 682/560/344 +f 682/560/344 670/506/344 669/507/344 +f 670/506/345 682/560/345 673/562/345 +f 673/562/345 687/526/345 670/506/345 +f 696/563/355 659/565/355 658/564/355 +f 658/564/355 695/553/355 696/563/355 +f 695/553/355 658/564/355 698/566/355 +f 698/566/355 675/555/355 695/553/355 +f 675/510/99 698/568/99 697/567/99 +f 697/567/99 673/509/99 675/510/99 +f 673/562/346 697/570/346 657/569/346 +f 657/569/346 687/526/346 673/562/346 +f 687/526/388 657/569/388 660/571/388 +f 660/571/388 688/525/388 687/526/388 +f 672/508/404 667/573/404 666/572/404 +f 666/572/404 669/507/404 672/508/404 +f 669/507/357 666/572/357 700/574/357 +f 700/574/357 680/561/357 669/507/357 +f 680/517/99 700/576/99 699/575/99 +f 699/575/99 678/516/99 680/517/99 +f 678/559/318 699/578/318 665/577/318 +f 665/577/318 693/558/318 678/559/318 +f 693/558/318 665/577/318 668/580/318 +f 668/580/318 694/579/318 693/558/318 +f 701/493/102 702/492/102 703/491/101 +f 703/491/101 704/494/101 701/493/102 +f 705/497/99 706/496/99 707/495/99 +f 707/495/99 708/498/99 705/497/99 +f 709/501/405 710/500/358 711/499/358 +f 711/499/358 712/502/405 709/501/405 +f 713/496/100 714/497/100 715/503/100 +f 715/503/100 716/504/100 713/496/100 +f 717/507/406 718/506/206 719/505/206 +f 719/505/206 720/508/406 717/507/406 +f 721/509/312 722/511/312 723/510/312 +f 724/514/407 725/513/407 710/512/407 +f 710/512/407 709/515/407 724/514/407 +f 726/516/312 727/518/312 728/517/312 +f 727/518/312 729/520/312 730/519/312 +f 730/519/312 728/517/312 727/518/312 +f 701/493/102 731/522/102 732/521/102 +f 732/521/102 702/492/102 701/493/102 +f 710/500/358 733/524/408 734/523/408 +f 734/523/408 711/499/358 710/500/358 +f 718/506/206 735/526/409 736/525/409 +f 736/525/409 719/505/206 718/506/206 +f 710/512/410 725/513/410 737/528/410 +f 737/528/410 733/527/410 710/512/410 +f 730/519/312 729/520/312 722/511/312 +f 722/511/312 721/509/312 730/519/312 +f 738/529/100 704/532/100 703/531/100 +f 703/531/100 724/530/100 738/529/100 +f 724/530/411 703/531/411 702/534/411 +f 702/534/411 725/533/411 724/530/411 +f 725/533/412 702/534/412 732/536/412 +f 732/536/412 737/535/412 725/533/412 +f 737/535/99 732/536/99 731/538/99 +f 731/538/99 739/537/99 737/535/99 +f 739/539/413 731/542/413 701/541/413 +f 701/541/413 740/540/413 739/539/413 +f 740/540/414 701/541/414 704/544/414 +f 704/544/414 738/543/414 740/540/414 +f 739/545/101 741/546/101 733/527/101 +f 733/527/101 737/528/101 739/545/101 +f 741/547/100 742/548/100 734/523/100 +f 734/523/100 733/524/100 741/547/100 +f 743/549/99 709/501/99 712/502/99 +f 712/502/99 744/550/99 743/549/99 +f 743/551/102 738/552/102 724/514/102 +f 724/514/102 709/515/102 743/551/102 +f 705/497/99 745/503/99 746/504/99 +f 746/504/99 706/496/99 705/497/99 +f 743/553/415 723/555/415 722/554/415 +f 722/554/415 738/543/415 743/553/415 +f 738/543/416 722/554/416 729/556/416 +f 729/556/416 740/540/416 738/543/416 +f 740/540/417 729/556/417 727/557/417 +f 727/557/417 739/539/417 740/540/417 +f 739/539/418 727/557/418 726/559/418 +f 726/559/418 741/558/418 739/539/418 +f 713/496/100 747/495/100 748/498/100 +f 748/498/100 714/497/100 713/496/100 +f 717/507/419 728/561/419 730/560/419 +f 730/560/419 718/506/419 717/507/419 +f 718/506/420 730/560/420 721/562/420 +f 721/562/420 735/526/420 718/506/420 +f 744/563/355 707/565/355 706/564/355 +f 706/564/355 743/553/355 744/563/355 +f 743/553/318 706/564/318 746/566/318 +f 746/566/318 723/555/318 743/553/318 +f 723/510/312 746/568/312 745/567/312 +f 745/567/312 721/509/312 723/510/312 +f 721/562/346 745/570/346 705/569/346 +f 705/569/346 735/526/346 721/562/346 +f 735/526/421 705/569/421 708/571/421 +f 708/571/421 736/525/421 735/526/421 +f 720/508/421 715/573/421 714/572/421 +f 714/572/421 717/507/421 720/508/421 +f 717/507/346 714/572/346 748/574/346 +f 748/574/346 728/561/346 717/507/346 +f 728/517/312 748/576/312 747/575/312 +f 747/575/312 726/516/312 728/517/312 +f 726/559/318 747/578/318 713/577/318 +f 713/577/318 741/558/318 726/559/318 +f 741/558/355 713/577/355 716/580/355 +f 716/580/355 742/579/355 741/558/355 +f 749/640/422 301/347/423 300/346/423 +f 300/346/423 750/641/424 749/640/422 +f 750/640/425 300/347/426 303/346/426 +f 303/346/426 751/641/427 750/640/425 +f 751/640/428 303/347/429 302/346/429 +f 302/346/429 752/641/430 751/640/428 +f 302/347/431 301/346/431 749/641/432 +f 749/641/432 752/640/433 302/347/431 +f 288/642/277 749/643/422 750/644/424 +f 750/644/424 289/645/278 288/642/277 +f 289/645/280 750/644/425 751/643/427 +f 751/643/427 290/642/281 289/645/280 +f 290/645/283 751/644/428 752/643/430 +f 752/643/430 291/646/284 290/645/283 +f 752/644/433 749/643/432 288/642/287 +f 288/642/287 291/645/286 752/644/433 +f 753/1/1 754/2/2 755/3/3 +f 755/3/3 756/4/1 753/1/1 +f 757/5/4 758/6/5 759/7/6 +f 759/7/6 760/8/7 757/5/4 +f 761/9/8 762/10/9 754/11/10 +f 754/11/10 753/12/8 761/9/8 +f 763/13/434 764/14/13 758/15/14 +f 758/15/14 757/16/435 763/13/434 +f 765/17/16 766/18/17 762/19/18 +f 762/19/18 761/20/16 765/17/16 +f 767/21/19 768/22/20 764/23/21 +f 764/23/21 763/24/22 767/21/19 +f 756/25/23 755/26/72 766/27/71 +f 766/27/71 765/28/23 756/25/23 +f 760/29/26 759/30/27 768/31/28 +f 768/31/28 767/32/29 760/29/26 +f 757/5/4 760/8/7 755/3/3 +f 755/3/3 754/2/2 757/5/4 +f 769/33/30 770/34/31 759/7/6 +f 759/7/6 758/6/5 769/33/30 +f 763/13/434 757/16/435 754/11/10 +f 754/11/10 762/10/9 763/13/434 +f 771/35/436 769/36/33 758/15/14 +f 758/15/14 764/14/13 771/35/436 +f 767/21/19 763/24/22 762/19/18 +f 762/19/18 766/18/17 767/21/19 +f 772/37/34 771/38/35 764/23/21 +f 764/23/21 768/22/20 772/37/34 +f 760/29/26 767/32/29 766/27/71 +f 766/27/71 755/26/72 760/29/26 +f 770/39/36 772/40/37 768/31/28 +f 768/31/28 759/30/27 770/39/36 +f 773/41/38 774/42/39 770/34/31 +f 770/34/31 769/33/30 773/41/38 +f 775/43/40 773/44/41 769/36/33 +f 769/36/33 771/35/436 775/43/40 +f 776/45/42 775/46/437 771/38/35 +f 771/38/35 772/37/34 776/45/42 +f 774/47/44 776/48/45 772/40/37 +f 772/40/37 770/39/36 774/47/44 +f 777/49/438 778/50/438 774/42/39 +f 774/42/39 773/41/38 777/49/438 +f 779/51/47 777/52/47 773/44/41 +f 773/44/41 775/43/40 779/51/47 +f 780/53/439 779/54/440 775/46/437 +f 775/46/437 776/45/42 780/53/439 +f 778/55/441 780/56/441 776/48/45 +f 776/48/45 774/47/44 778/55/441 +f 781/181/150 782/184/150 783/183/442 +f 783/183/442 784/182/443 781/181/150 +f 784/182/443 783/183/442 785/186/444 +f 785/186/444 786/185/444 784/182/443 +f 782/187/445 787/190/446 788/189/447 +f 788/189/447 783/188/448 782/187/445 +f 783/188/448 788/189/447 789/192/449 +f 789/192/449 785/191/449 783/188/448 +f 787/193/159 790/196/159 791/195/450 +f 791/195/450 788/194/451 787/193/159 +f 788/194/451 791/195/450 792/198/452 +f 792/198/452 789/197/452 788/194/451 +f 790/199/453 781/202/453 784/201/454 +f 784/201/454 791/200/455 790/199/453 +f 791/200/455 784/201/454 786/204/456 +f 786/204/456 792/203/456 791/200/455 +f 793/3/50 794/2/51 795/1/52 +f 795/1/52 796/4/52 793/3/50 +f 797/7/457 798/6/458 799/5/459 +f 799/5/459 800/8/460 797/7/457 +f 794/11/57 801/10/58 802/9/59 +f 802/9/59 795/12/59 794/11/57 +f 798/15/461 803/14/462 804/13/463 +f 804/13/463 799/16/464 798/15/461 +f 801/19/64 805/18/65 806/17/66 +f 806/17/66 802/20/66 801/19/64 +f 803/23/465 807/22/466 808/21/467 +f 808/21/467 804/24/468 803/23/465 +f 805/27/71 793/26/72 796/25/73 +f 796/25/73 806/28/73 805/27/71 +f 807/31/469 797/30/470 800/29/471 +f 800/29/471 808/32/472 807/31/469 +f 793/3/50 800/8/460 799/5/459 +f 799/5/459 794/2/51 793/3/50 +f 797/7/457 809/34/473 810/33/474 +f 810/33/474 798/6/458 797/7/457 +f 794/11/57 799/16/464 804/13/463 +f 804/13/463 801/10/58 794/11/57 +f 798/15/461 810/36/475 811/35/476 +f 811/35/476 803/14/462 798/15/461 +f 801/19/64 804/24/468 808/21/467 +f 808/21/467 805/18/65 801/19/64 +f 803/23/465 811/38/477 812/37/478 +f 812/37/478 807/22/466 803/23/465 +f 805/27/71 808/32/472 800/29/471 +f 800/29/471 793/26/72 805/27/71 +f 807/31/469 812/40/479 809/39/480 +f 809/39/480 797/30/470 807/31/469 +f 809/34/473 813/42/481 814/41/482 +f 814/41/482 810/33/474 809/34/473 +f 810/36/475 814/44/88 815/43/89 +f 815/43/89 811/35/476 810/36/475 +f 811/38/477 815/46/483 816/45/484 +f 816/45/484 812/37/478 811/38/477 +f 812/40/479 816/48/92 813/47/93 +f 813/47/93 809/39/480 812/40/479 +f 813/42/481 817/50/485 818/49/485 +f 818/49/485 814/41/482 813/42/481 +f 814/44/88 818/52/95 819/51/95 +f 819/51/95 815/43/89 814/44/88 +f 815/46/483 819/54/96 820/53/96 +f 820/53/96 816/45/484 815/46/483 +f 816/48/92 820/56/97 817/55/97 +f 817/55/97 813/47/93 816/48/92 +f 821/647/100 822/648/100 823/649/100 +f 823/649/100 824/650/100 821/647/100 +f 825/651/486 826/652/486 827/653/486 +f 827/653/486 828/654/486 825/651/486 +f 829/655/297 830/656/297 827/653/487 +f 827/653/487 826/652/487 829/655/297 +f 831/652/102 832/651/102 833/654/102 +f 833/654/102 834/653/102 831/652/102 +f 835/657/346 836/658/346 833/659/346 +f 833/659/346 832/660/346 835/657/346 +f 837/661/100 838/662/100 823/649/100 +f 823/649/100 822/648/100 837/661/100 +f 831/652/488 834/653/488 830/656/297 +f 830/656/297 829/655/297 831/652/488 +f 825/663/346 828/664/346 836/658/346 +f 836/658/346 835/657/346 825/663/346 +f 828/665/100 827/666/100 839/667/100 +f 839/667/100 840/668/100 828/665/100 +f 827/666/100 830/669/100 841/670/100 +f 841/670/100 839/667/100 827/666/100 +f 830/669/100 834/671/100 842/672/100 +f 842/672/100 841/670/100 830/669/100 +f 834/671/100 833/673/100 843/674/100 +f 843/674/100 842/672/100 834/671/100 +f 833/673/100 836/675/100 844/676/100 +f 844/676/100 843/674/100 833/673/100 +f 836/675/100 828/665/100 840/668/100 +f 840/668/100 844/676/100 836/675/100 +f 840/677/312 839/678/312 821/679/312 +f 821/679/312 824/680/312 840/677/312 +f 839/678/489 841/681/489 822/682/489 +f 822/682/489 821/679/489 839/678/489 +f 841/681/490 842/678/490 837/679/490 +f 837/679/490 822/682/490 841/681/490 +f 842/678/98 843/677/98 838/680/98 +f 838/680/98 837/679/98 842/678/98 +f 843/683/318 844/684/318 823/685/318 +f 823/685/318 838/686/318 843/683/318 +f 844/684/318 840/687/318 824/688/318 +f 824/688/318 823/685/318 844/684/318 +f 845/181/491 846/182/492 847/183/493 +f 847/183/493 848/184/491 845/181/491 +f 846/182/492 849/185/494 850/186/494 +f 850/186/494 847/183/493 846/182/492 +f 848/187/495 847/188/496 851/189/497 +f 851/189/497 852/190/498 848/187/495 +f 847/188/496 850/191/499 853/192/499 +f 853/192/499 851/189/497 847/188/496 +f 852/193/500 851/194/501 854/195/502 +f 854/195/502 855/196/500 852/193/500 +f 851/194/501 853/197/503 856/198/503 +f 856/198/503 854/195/502 851/194/501 +f 855/199/504 854/200/505 846/201/506 +f 846/201/506 845/202/504 855/199/504 +f 854/200/505 856/203/507 849/204/507 +f 849/204/507 846/201/506 854/200/505 +f 857/181/508 858/182/509 859/183/510 +f 859/183/510 860/184/508 857/181/508 +f 858/182/509 861/185/511 862/186/511 +f 862/186/511 859/183/510 858/182/509 +f 860/187/512 859/188/513 863/189/514 +f 863/189/514 864/190/512 860/187/512 +f 859/188/513 862/191/515 865/192/515 +f 865/192/515 863/189/514 859/188/513 +f 864/193/516 863/194/517 866/195/518 +f 866/195/518 867/196/516 864/193/516 +f 863/194/517 865/197/519 868/198/519 +f 868/198/519 866/195/518 863/194/517 +f 867/199/520 866/200/521 858/201/522 +f 858/201/522 857/202/520 867/199/520 +f 866/200/521 868/203/523 861/204/523 +f 861/204/523 858/201/522 866/200/521 +f 869/689/524 870/690/524 871/691/524 +f 871/691/524 872/692/524 869/689/524 +f 873/693/525 872/694/525 871/691/525 +f 871/691/525 874/695/525 873/693/525 +f 870/690/526 875/696/526 874/695/526 +f 874/695/526 871/691/526 870/690/526 +f 869/697/527 876/698/527 875/696/527 +f 875/696/527 870/690/527 869/697/527 +f 873/693/528 874/695/528 877/699/528 +f 877/699/528 878/700/528 873/693/528 +f 879/701/529 877/699/529 874/695/529 +f 874/695/529 875/696/529 879/701/529 +f 880/702/530 879/701/530 875/696/530 +f 875/696/530 876/698/530 880/702/530 +f 881/703/311 882/704/311 883/705/311 +f 883/705/311 884/706/311 881/703/311 +f 885/707/531 886/708/531 884/706/531 +f 884/706/531 883/705/531 885/707/531 +f 886/708/532 887/709/532 881/710/532 +f 881/710/532 884/706/532 886/708/532 +f 888/711/533 878/712/533 877/699/533 +f 877/699/533 885/707/533 888/711/533 +f 879/701/534 886/708/534 885/707/534 +f 885/707/534 877/699/534 879/701/534 +f 880/713/535 887/709/535 886/708/535 +f 886/708/535 879/701/535 880/713/535 +f 889/689/536 890/690/536 891/691/536 +f 891/691/536 892/692/536 889/689/536 +f 893/693/537 892/694/537 891/691/537 +f 891/691/537 894/695/537 893/693/537 +f 890/690/538 895/696/539 894/695/538 +f 894/695/538 891/691/539 890/690/538 +f 889/697/540 896/698/541 895/696/541 +f 895/696/541 890/690/541 889/697/540 +f 893/693/542 894/695/542 897/699/542 +f 897/699/542 898/700/542 893/693/542 +f 899/701/543 897/699/543 894/695/543 +f 894/695/543 895/696/543 899/701/543 +f 900/702/544 899/701/544 895/696/544 +f 895/696/544 896/698/544 900/702/544 +f 901/703/98 902/704/98 903/705/98 +f 903/705/98 904/706/98 901/703/98 +f 903/705/545 902/714/545 905/711/545 +f 905/711/545 906/707/545 903/705/545 +f 906/707/546 907/708/546 904/706/546 +f 904/706/546 903/705/546 906/707/546 +f 907/708/547 908/709/547 901/710/547 +f 901/710/547 904/706/547 907/708/547 +f 905/711/548 898/712/548 897/699/548 +f 897/699/548 906/707/548 905/711/548 +f 899/701/549 907/708/549 906/707/549 +f 906/707/549 897/699/549 899/701/549 +f 900/713/550 908/709/550 907/708/550 +f 907/708/550 899/701/550 900/713/550 +f 909/689/536 910/690/536 911/691/536 +f 911/691/536 912/692/536 909/689/536 +f 910/690/551 913/696/551 914/695/551 +f 914/695/551 911/691/551 910/690/551 +f 909/697/552 915/698/552 913/696/552 +f 913/696/552 910/690/552 909/697/552 +f 916/701/553 917/699/553 914/695/553 +f 914/695/553 913/696/553 916/701/553 +f 918/702/554 916/701/554 913/696/554 +f 913/696/554 915/698/554 918/702/554 +f 919/703/311 920/704/311 921/705/311 +f 921/705/311 922/706/311 919/703/311 +f 923/707/546 924/708/546 922/706/546 +f 922/706/546 921/705/546 923/707/546 +f 924/708/555 925/709/555 919/710/555 +f 919/710/555 922/706/555 924/708/555 +f 916/701/556 924/708/556 923/707/556 +f 923/707/556 917/699/556 916/701/556 +f 918/713/557 925/709/557 924/708/557 +f 924/708/557 916/701/557 918/713/557 +f 926/689/536 927/690/536 928/691/536 +f 928/691/536 929/692/536 926/689/536 +f 927/690/539 930/696/539 931/695/539 +f 931/695/539 928/691/539 927/690/539 +f 926/697/541 932/698/540 930/696/540 +f 930/696/540 927/690/541 926/697/541 +f 933/701/558 934/699/558 931/695/559 +f 931/695/559 930/696/558 933/701/558 +f 935/702/560 933/701/560 930/696/560 +f 930/696/560 932/698/560 935/702/560 +f 936/703/98 937/704/98 938/705/98 +f 938/705/98 939/706/98 936/703/98 +f 940/707/561 941/708/561 939/706/561 +f 939/706/561 938/705/561 940/707/561 +f 941/708/555 942/709/555 936/710/555 +f 936/710/555 939/706/555 941/708/555 +f 933/701/562 941/708/562 940/707/562 +f 940/707/562 934/699/562 933/701/562 +f 935/713/563 942/709/563 941/708/563 +f 941/708/563 933/701/563 935/713/563 +f 943/689/536 944/690/536 945/691/536 +f 945/691/536 946/692/536 943/689/536 +f 944/690/538 947/696/538 948/695/538 +f 948/695/538 945/691/538 944/690/538 +f 943/697/552 949/698/552 947/696/552 +f 947/696/552 944/690/552 943/697/552 +f 950/701/543 951/699/543 948/695/543 +f 948/695/543 947/696/543 950/701/543 +f 952/702/564 950/701/564 947/696/564 +f 947/696/564 949/698/564 952/702/564 +f 953/703/98 954/704/98 955/705/98 +f 955/705/98 956/706/98 953/703/98 +f 957/707/546 958/708/546 956/706/546 +f 956/706/546 955/705/546 957/707/546 +f 958/708/555 959/709/555 953/710/555 +f 953/710/555 956/706/555 958/708/555 +f 950/701/549 958/708/549 957/707/549 +f 957/707/549 951/699/549 950/701/549 +f 952/713/565 959/709/565 958/708/565 +f 958/708/565 950/701/565 952/713/565 +f 960/689/524 961/690/524 962/691/524 +f 962/691/524 963/692/524 960/689/524 +f 964/693/566 963/694/566 962/691/566 +f 962/691/566 965/695/566 964/693/566 +f 961/690/567 966/696/567 965/695/567 +f 965/695/567 962/691/567 961/690/567 +f 964/693/568 965/695/569 967/699/568 +f 967/699/568 968/700/568 964/693/568 +f 969/701/570 967/699/570 965/695/570 +f 965/695/570 966/696/570 969/701/570 +f 970/703/311 971/704/311 972/705/311 +f 972/705/311 973/706/311 970/703/311 +f 972/705/571 971/714/571 974/711/571 +f 974/711/571 975/707/571 972/705/571 +f 975/707/572 976/708/572 973/706/572 +f 973/706/572 972/705/572 975/707/572 +f 974/711/573 968/712/573 967/699/573 +f 967/699/573 975/707/573 974/711/573 +f 969/701/574 976/708/574 975/707/574 +f 975/707/574 967/699/574 969/701/574 +f 977/689/575 978/690/575 979/691/575 +f 979/691/575 980/692/575 977/689/575 +f 981/693/576 980/694/576 979/691/577 +f 979/691/577 982/695/576 981/693/576 +f 978/690/578 983/696/579 982/695/579 +f 982/695/579 979/691/579 978/690/578 +f 981/693/580 982/695/580 984/699/580 +f 984/699/580 985/700/580 981/693/580 +f 986/701/581 984/699/581 982/695/582 +f 982/695/582 983/696/581 986/701/581 +f 987/703/311 988/704/311 989/705/311 +f 989/705/311 990/706/311 987/703/311 +f 989/705/583 988/714/583 991/711/583 +f 991/711/583 992/707/583 989/705/583 +f 992/707/584 993/708/584 990/706/584 +f 990/706/584 989/705/584 992/707/584 +f 991/711/585 985/712/585 984/699/585 +f 984/699/585 992/707/585 991/711/585 +f 986/701/586 993/708/586 992/707/586 +f 992/707/586 984/699/586 986/701/586 +f 994/689/524 995/690/524 996/691/524 +f 996/691/524 997/692/524 994/689/524 +f 998/693/587 997/694/587 996/691/587 +f 996/691/587 999/695/587 998/693/587 +f 995/690/588 1000/696/588 999/695/588 +f 999/695/588 996/691/588 995/690/588 +f 998/693/589 999/695/589 1001/699/589 +f 1001/699/589 1002/700/589 998/693/589 +f 1003/701/570 1001/699/570 999/695/570 +f 999/695/570 1000/696/570 1003/701/570 +f 1004/703/311 1005/704/311 1006/705/311 +f 1006/705/311 1007/706/311 1004/703/311 +f 1006/705/590 1005/714/590 1008/711/590 +f 1008/711/590 1009/707/590 1006/705/590 +f 1009/707/591 1010/708/591 1007/706/591 +f 1007/706/591 1006/705/591 1009/707/591 +f 1008/711/592 1002/712/592 1001/699/592 +f 1001/699/592 1009/707/592 1008/711/592 +f 1003/701/586 1010/708/586 1009/707/586 +f 1009/707/586 1001/699/586 1003/701/586 +f 1011/689/593 1012/690/593 1013/691/593 +f 1013/691/593 1014/692/593 1011/689/593 +f 1015/693/594 1014/694/594 1013/691/594 +f 1013/691/594 1016/695/594 1015/693/594 +f 1012/690/595 1017/696/595 1016/695/595 +f 1016/695/595 1013/691/595 1012/690/595 +f 1011/697/596 1018/698/596 1017/696/596 +f 1017/696/596 1012/690/596 1011/697/596 +f 1015/693/597 1016/695/597 1019/699/597 +f 1019/699/597 1020/700/597 1015/693/597 +f 1021/701/598 1019/699/598 1016/695/598 +f 1016/695/598 1017/696/598 1021/701/598 +f 1022/702/599 1021/701/599 1017/696/599 +f 1017/696/599 1018/698/599 1022/702/599 +f 1023/703/99 1024/704/99 1025/705/99 +f 1025/705/99 1026/706/99 1023/703/99 +f 1025/705/600 1024/714/600 1027/711/600 +f 1027/711/600 1028/707/600 1025/705/600 +f 1028/707/601 1029/708/601 1026/706/601 +f 1026/706/601 1025/705/601 1028/707/601 +f 1029/708/602 1030/709/602 1023/710/602 +f 1023/710/602 1026/706/602 1029/708/602 +f 1027/711/603 1020/712/603 1019/699/603 +f 1019/699/603 1028/707/603 1027/711/603 +f 1021/701/604 1029/708/604 1028/707/604 +f 1028/707/604 1019/699/604 1021/701/604 +f 1022/713/605 1030/709/605 1029/708/605 +f 1029/708/605 1021/701/605 1022/713/605 +f 1031/715/100 1032/716/100 1033/717/100 +f 1033/717/100 1034/718/100 1031/715/100 +f 1035/719/606 1036/720/606 1034/718/606 +f 1034/718/606 1033/717/606 1035/719/606 +f 1036/720/607 1037/721/607 1031/722/607 +f 1031/722/607 1034/718/607 1036/720/607 +f 1038/723/608 1036/720/608 1035/719/608 +f 1035/719/608 1039/724/608 1038/723/608 +f 1040/725/609 1037/726/609 1036/720/609 +f 1036/720/609 1038/723/609 1040/725/609 +f 1041/727/99 1042/728/99 1043/729/99 +f 1043/729/99 1044/730/99 1041/727/99 +f 1042/728/610 1045/731/610 1046/732/610 +f 1046/732/610 1043/729/610 1042/728/610 +f 1041/733/611 1047/734/611 1045/731/611 +f 1045/731/611 1042/728/611 1041/733/611 +f 1038/723/612 1039/724/612 1046/732/612 +f 1046/732/612 1045/731/612 1038/723/612 +f 1040/725/613 1038/723/613 1045/731/613 +f 1045/731/613 1047/735/613 1040/725/613 +f 1048/715/100 1049/716/100 1050/717/100 +f 1050/717/100 1051/718/100 1048/715/100 +f 1052/719/614 1053/720/614 1051/718/614 +f 1051/718/614 1050/717/614 1052/719/614 +f 1053/720/615 1054/721/615 1048/722/615 +f 1048/722/615 1051/718/615 1053/720/615 +f 1055/723/616 1053/720/616 1052/719/616 +f 1052/719/616 1056/724/616 1055/723/616 +f 1057/725/617 1054/726/617 1053/720/617 +f 1053/720/617 1055/723/617 1057/725/617 +f 1058/727/99 1059/728/99 1060/729/99 +f 1060/729/99 1061/730/99 1058/727/99 +f 1059/728/618 1062/731/618 1063/732/618 +f 1063/732/618 1060/729/618 1059/728/618 +f 1058/733/619 1064/734/619 1062/731/619 +f 1062/731/619 1059/728/619 1058/733/619 +f 1055/723/620 1056/724/620 1063/732/620 +f 1063/732/620 1062/731/620 1055/723/620 +f 1057/725/621 1055/723/621 1062/731/621 +f 1062/731/621 1064/735/621 1057/725/621 +f 1065/715/100 1066/716/100 1067/717/100 +f 1067/717/100 1068/718/100 1065/715/100 +f 1069/719/622 1070/720/622 1068/718/622 +f 1068/718/622 1067/717/622 1069/719/622 +f 1070/720/623 1071/721/623 1065/722/624 +f 1065/722/624 1068/718/623 1070/720/623 +f 1072/723/625 1070/720/625 1069/719/625 +f 1069/719/625 1073/724/625 1072/723/625 +f 1074/725/626 1071/726/626 1070/720/626 +f 1070/720/626 1072/723/626 1074/725/626 +f 1075/727/627 1076/728/627 1077/729/627 +f 1077/729/627 1078/730/627 1075/727/627 +f 1076/728/628 1079/731/628 1080/732/629 +f 1080/732/629 1077/729/628 1076/728/628 +f 1075/733/630 1081/734/630 1079/731/630 +f 1079/731/630 1076/728/630 1075/733/630 +f 1072/723/631 1073/724/631 1080/732/631 +f 1080/732/631 1079/731/631 1072/723/631 +f 1074/725/632 1072/723/632 1079/731/632 +f 1079/731/632 1081/735/632 1074/725/632 +f 1082/715/100 1083/716/100 1084/717/100 +f 1084/717/100 1085/718/100 1082/715/100 +f 1086/719/633 1087/720/633 1085/718/633 +f 1085/718/633 1084/717/633 1086/719/633 +f 1087/720/634 1088/721/634 1082/722/634 +f 1082/722/634 1085/718/634 1087/720/634 +f 1089/723/635 1087/720/635 1086/719/635 +f 1086/719/635 1090/724/635 1089/723/635 +f 1091/725/636 1088/726/636 1087/720/636 +f 1087/720/636 1089/723/636 1091/725/636 +f 1092/727/637 1093/728/637 1094/729/637 +f 1094/729/637 1095/730/637 1092/727/637 +f 1093/728/638 1096/731/638 1097/732/638 +f 1097/732/638 1094/729/638 1093/728/638 +f 1092/733/639 1098/734/639 1096/731/639 +f 1096/731/639 1093/728/639 1092/733/639 +f 1089/723/640 1090/724/640 1097/732/640 +f 1097/732/640 1096/731/640 1089/723/640 +f 1091/725/641 1089/723/641 1096/731/641 +f 1096/731/641 1098/735/641 1091/725/641 +f 1099/715/100 1100/716/100 1101/717/100 +f 1101/717/100 1102/718/100 1099/715/100 +f 1103/719/642 1104/720/642 1102/718/642 +f 1102/718/642 1101/717/642 1103/719/642 +f 1104/720/643 1105/721/643 1099/722/643 +f 1099/722/643 1102/718/643 1104/720/643 +f 1106/723/644 1104/720/644 1103/719/644 +f 1103/719/644 1107/724/644 1106/723/644 +f 1108/725/645 1105/726/645 1104/720/645 +f 1104/720/645 1106/723/645 1108/725/645 +f 1109/727/99 1110/728/99 1111/729/99 +f 1111/729/99 1112/730/99 1109/727/99 +f 1110/728/646 1113/731/646 1114/732/646 +f 1114/732/646 1111/729/646 1110/728/646 +f 1109/733/647 1115/734/647 1113/731/647 +f 1113/731/647 1110/728/647 1109/733/647 +f 1106/723/648 1107/724/648 1114/732/648 +f 1114/732/648 1113/731/648 1106/723/648 +f 1108/725/649 1106/723/650 1113/731/649 +f 1113/731/649 1115/735/649 1108/725/649 +f 1116/715/100 1117/716/100 1118/717/100 +f 1118/717/100 1119/718/100 1116/715/100 +f 1120/719/651 1121/720/652 1119/718/651 +f 1119/718/651 1118/717/651 1120/719/651 +f 1121/720/653 1122/721/653 1116/722/653 +f 1116/722/653 1119/718/653 1121/720/653 +f 1123/723/654 1121/720/654 1120/719/654 +f 1120/719/654 1124/724/654 1123/723/654 +f 1125/725/655 1122/726/655 1121/720/655 +f 1121/720/655 1123/723/655 1125/725/655 +f 1126/727/99 1127/728/99 1128/729/99 +f 1128/729/99 1129/730/99 1126/727/99 +f 1127/728/656 1130/731/656 1131/732/656 +f 1131/732/656 1128/729/656 1127/728/656 +f 1126/733/657 1132/734/657 1130/731/657 +f 1130/731/657 1127/728/657 1126/733/657 +f 1123/723/658 1124/724/658 1131/732/658 +f 1131/732/658 1130/731/658 1123/723/658 +f 1125/725/659 1123/723/659 1130/731/659 +f 1130/731/659 1132/735/659 1125/725/659 +f 1133/715/660 1134/716/660 1135/717/660 +f 1135/717/660 1136/718/660 1133/715/660 +f 1137/719/661 1138/720/661 1136/718/661 +f 1136/718/661 1135/717/661 1137/719/661 +f 1138/720/662 1139/721/662 1133/722/662 +f 1133/722/662 1136/718/662 1138/720/662 +f 1140/723/663 1138/720/663 1137/719/663 +f 1137/719/663 1141/724/663 1140/723/663 +f 1142/725/664 1139/726/664 1138/720/664 +f 1138/720/664 1140/723/664 1142/725/664 +f 1143/727/99 1144/728/99 1145/729/99 +f 1145/729/99 1146/730/99 1143/727/99 +f 1144/728/665 1147/731/665 1148/732/665 +f 1148/732/665 1145/729/665 1144/728/665 +f 1143/733/666 1149/734/666 1147/731/666 +f 1147/731/666 1144/728/666 1143/733/666 +f 1140/723/667 1141/724/667 1148/732/667 +f 1148/732/667 1147/731/667 1140/723/667 +f 1142/725/668 1140/723/668 1147/731/668 +f 1147/731/668 1149/735/668 1142/725/668 +f 1150/715/100 1151/716/100 1152/717/100 +f 1152/717/100 1153/718/100 1150/715/100 +f 1154/719/669 1155/720/669 1153/718/669 +f 1153/718/669 1152/717/669 1154/719/669 +f 1155/720/670 1156/721/670 1150/722/670 +f 1150/722/670 1153/718/670 1155/720/670 +f 1157/723/671 1155/720/671 1154/719/671 +f 1154/719/671 1158/724/671 1157/723/671 +f 1159/725/672 1156/726/672 1155/720/672 +f 1155/720/672 1157/723/672 1159/725/672 +f 1160/727/99 1161/728/99 1162/729/99 +f 1162/729/99 1163/730/99 1160/727/99 +f 1161/728/673 1164/731/673 1165/732/673 +f 1165/732/673 1162/729/673 1161/728/673 +f 1160/733/674 1166/734/674 1164/731/674 +f 1164/731/674 1161/728/674 1160/733/674 +f 1157/723/675 1158/724/675 1165/732/675 +f 1165/732/675 1164/731/675 1157/723/675 +f 1159/725/676 1157/723/676 1164/731/676 +f 1164/731/676 1166/735/676 1159/725/676 +f 1167/715/100 1168/716/100 1169/717/100 +f 1169/717/100 1170/718/100 1167/715/100 +f 1171/719/677 1172/720/677 1170/718/678 +f 1170/718/678 1169/717/677 1171/719/677 +f 1172/720/679 1173/721/679 1167/722/679 +f 1167/722/679 1170/718/679 1172/720/679 +f 1174/723/680 1172/720/680 1171/719/680 +f 1171/719/680 1175/724/680 1174/723/680 +f 1176/725/681 1173/726/681 1172/720/681 +f 1172/720/681 1174/723/681 1176/725/681 +f 1177/727/99 1178/728/99 1179/729/99 +f 1179/729/99 1180/730/99 1177/727/99 +f 1178/728/665 1181/731/665 1182/732/665 +f 1182/732/665 1179/729/665 1178/728/665 +f 1177/733/682 1183/734/682 1181/731/682 +f 1181/731/682 1178/728/682 1177/733/682 +f 1174/723/683 1175/724/683 1182/732/683 +f 1182/732/683 1181/731/683 1174/723/683 +f 1176/725/684 1174/723/684 1181/731/684 +f 1181/731/684 1183/735/684 1176/725/684 +f 1184/689/685 1185/692/685 1186/691/685 +f 1186/691/685 1187/690/685 1184/689/685 +f 1188/693/686 1189/695/686 1186/691/686 +f 1186/691/686 1185/694/686 1188/693/686 +f 1187/690/687 1186/691/687 1189/695/687 +f 1189/695/687 1190/696/687 1187/690/687 +f 1184/697/688 1187/690/688 1190/696/688 +f 1190/696/688 1191/698/688 1184/697/688 +f 1188/693/689 1192/700/689 1193/699/689 +f 1193/699/689 1189/695/689 1188/693/689 +f 1194/701/690 1190/696/690 1189/695/690 +f 1189/695/690 1193/699/690 1194/701/690 +f 1195/702/691 1191/698/691 1190/696/691 +f 1190/696/691 1194/701/691 1195/702/691 +f 1196/703/99 1197/706/99 1198/705/99 +f 1198/705/99 1199/704/99 1196/703/99 +f 1198/705/692 1200/707/692 1201/711/692 +f 1201/711/692 1199/714/692 1198/705/692 +f 1200/707/693 1198/705/693 1197/706/694 +f 1197/706/694 1202/708/694 1200/707/693 +f 1202/708/695 1197/706/695 1196/710/695 +f 1196/710/695 1203/709/695 1202/708/695 +f 1201/711/696 1200/707/696 1193/699/696 +f 1193/699/696 1192/712/696 1201/711/696 +f 1194/701/697 1193/699/697 1200/707/697 +f 1200/707/697 1202/708/697 1194/701/697 +f 1195/713/698 1194/701/698 1202/708/698 +f 1202/708/698 1203/709/698 1195/713/698 +f 1204/715/100 1205/718/100 1206/717/100 +f 1206/717/100 1207/716/100 1204/715/100 +f 1208/719/699 1206/717/699 1205/718/699 +f 1205/718/699 1209/720/699 1208/719/699 +f 1209/720/700 1205/718/700 1204/722/700 +f 1204/722/700 1210/721/700 1209/720/700 +f 1211/723/701 1212/724/701 1208/719/701 +f 1208/719/701 1209/720/701 1211/723/701 +f 1213/725/702 1211/723/702 1209/720/702 +f 1209/720/702 1210/726/702 1213/725/702 +f 1214/727/99 1215/730/99 1216/729/99 +f 1216/729/99 1217/728/99 1214/727/99 +f 1217/728/703 1216/729/703 1218/732/703 +f 1218/732/703 1219/731/703 1217/728/703 +f 1214/733/704 1217/728/704 1219/731/704 +f 1219/731/704 1220/734/704 1214/733/704 +f 1211/723/705 1219/731/705 1218/732/705 +f 1218/732/705 1212/724/705 1211/723/705 +f 1213/725/706 1220/735/707 1219/731/706 +f 1219/731/706 1211/723/706 1213/725/706 +f 1221/715/100 1222/718/100 1223/717/100 +f 1223/717/100 1224/716/100 1221/715/100 +f 1225/719/708 1223/717/708 1222/718/708 +f 1222/718/708 1226/720/708 1225/719/708 +f 1226/720/709 1222/718/709 1221/722/709 +f 1221/722/709 1227/721/709 1226/720/709 +f 1228/723/710 1229/724/710 1225/719/710 +f 1225/719/710 1226/720/710 1228/723/710 +f 1230/725/711 1228/723/711 1226/720/711 +f 1226/720/711 1227/726/711 1230/725/711 +f 1231/727/99 1232/730/99 1233/729/99 +f 1233/729/99 1234/728/99 1231/727/99 +f 1234/728/712 1233/729/712 1235/732/712 +f 1235/732/712 1236/731/712 1234/728/712 +f 1231/733/713 1234/728/713 1236/731/713 +f 1236/731/713 1237/734/713 1231/733/713 +f 1228/723/714 1236/731/714 1235/732/714 +f 1235/732/714 1229/724/714 1228/723/714 +f 1230/725/715 1237/735/715 1236/731/715 +f 1236/731/715 1228/723/715 1230/725/715 +f 1238/715/100 1239/718/100 1240/717/100 +f 1240/717/100 1241/716/100 1238/715/100 +f 1242/719/716 1240/717/716 1239/718/716 +f 1239/718/716 1243/720/716 1242/719/716 +f 1243/720/717 1239/718/717 1238/722/717 +f 1238/722/717 1244/721/717 1243/720/717 +f 1245/723/718 1246/724/718 1242/719/718 +f 1242/719/718 1243/720/718 1245/723/718 +f 1247/725/719 1245/723/719 1243/720/719 +f 1243/720/719 1244/726/719 1247/725/719 +f 1248/727/720 1249/730/720 1250/729/720 +f 1250/729/720 1251/728/720 1248/727/720 +f 1251/728/721 1250/729/721 1252/732/721 +f 1252/732/721 1253/731/721 1251/728/721 +f 1248/733/722 1251/728/723 1253/731/723 +f 1253/731/723 1254/734/723 1248/733/722 +f 1245/723/724 1253/731/724 1252/732/724 +f 1252/732/724 1246/724/724 1245/723/724 +f 1247/725/725 1254/735/725 1253/731/725 +f 1253/731/725 1245/723/725 1247/725/725 +f 1255/715/100 1256/718/100 1257/717/100 +f 1257/717/100 1258/716/100 1255/715/100 +f 1259/719/726 1257/717/726 1256/718/726 +f 1256/718/726 1260/720/726 1259/719/726 +f 1260/720/727 1256/718/727 1255/722/727 +f 1255/722/727 1261/721/727 1260/720/727 +f 1262/723/728 1263/724/728 1259/719/728 +f 1259/719/728 1260/720/728 1262/723/728 +f 1264/725/729 1262/723/729 1260/720/729 +f 1260/720/729 1261/726/729 1264/725/729 +f 1265/727/99 1266/730/99 1267/729/99 +f 1267/729/99 1268/728/99 1265/727/99 +f 1268/728/730 1267/729/730 1269/732/730 +f 1269/732/730 1270/731/731 1268/728/730 +f 1265/733/732 1268/728/732 1270/731/732 +f 1270/731/732 1271/734/732 1265/733/732 +f 1262/723/733 1270/731/733 1269/732/733 +f 1269/732/733 1263/724/733 1262/723/733 +f 1264/725/734 1271/735/734 1270/731/734 +f 1270/731/734 1262/723/734 1264/725/734 +f 1272/715/100 1273/718/100 1274/717/100 +f 1274/717/100 1275/716/100 1272/715/100 +f 1276/719/735 1274/717/735 1273/718/736 +f 1273/718/736 1277/720/735 1276/719/735 +f 1277/720/737 1273/718/737 1272/722/737 +f 1272/722/737 1278/721/737 1277/720/737 +f 1279/723/738 1280/724/738 1276/719/738 +f 1276/719/738 1277/720/738 1279/723/738 +f 1281/725/739 1279/723/740 1277/720/740 +f 1277/720/740 1278/726/739 1281/725/739 +f 1282/727/720 1283/730/720 1284/729/720 +f 1284/729/720 1285/728/720 1282/727/720 +f 1285/728/741 1284/729/741 1286/732/741 +f 1286/732/741 1287/731/741 1285/728/741 +f 1282/733/742 1285/728/742 1287/731/742 +f 1287/731/742 1288/734/742 1282/733/742 +f 1279/723/743 1287/731/743 1286/732/743 +f 1286/732/743 1280/724/743 1279/723/743 +f 1281/725/744 1288/735/745 1287/731/744 +f 1287/731/744 1279/723/744 1281/725/744 +f 1289/715/100 1290/718/100 1291/717/100 +f 1291/717/100 1292/716/100 1289/715/100 +f 1293/719/746 1291/717/746 1290/718/746 +f 1290/718/746 1294/720/746 1293/719/746 +f 1294/720/747 1290/718/747 1289/722/747 +f 1289/722/747 1295/721/747 1294/720/747 +f 1296/723/748 1297/724/748 1293/719/748 +f 1293/719/748 1294/720/748 1296/723/748 +f 1298/725/749 1296/723/749 1294/720/749 +f 1294/720/749 1295/726/749 1298/725/749 +f 1299/727/750 1300/730/750 1301/729/750 +f 1301/729/750 1302/728/750 1299/727/750 +f 1302/728/751 1301/729/751 1303/732/751 +f 1303/732/751 1304/731/751 1302/728/751 +f 1299/733/752 1302/728/752 1304/731/752 +f 1304/731/752 1305/734/752 1299/733/752 +f 1296/723/753 1304/731/753 1303/732/753 +f 1303/732/753 1297/724/753 1296/723/753 +f 1298/725/754 1305/735/754 1304/731/754 +f 1304/731/754 1296/723/754 1298/725/754 +f 1306/715/100 1307/718/100 1308/717/100 +f 1308/717/100 1309/716/100 1306/715/100 +f 1310/719/755 1308/717/755 1307/718/755 +f 1307/718/755 1311/720/755 1310/719/755 +f 1311/720/756 1307/718/756 1306/722/756 +f 1306/722/756 1312/721/756 1311/720/756 +f 1313/723/757 1314/724/757 1310/719/757 +f 1310/719/757 1311/720/757 1313/723/757 +f 1315/725/758 1313/723/758 1311/720/758 +f 1311/720/758 1312/726/758 1315/725/758 +f 1316/727/99 1317/730/99 1318/729/99 +f 1318/729/99 1319/728/99 1316/727/99 +f 1319/728/759 1318/729/759 1320/732/759 +f 1320/732/759 1321/731/759 1319/728/759 +f 1316/733/760 1319/728/760 1321/731/760 +f 1321/731/760 1322/734/760 1316/733/760 +f 1313/723/761 1321/731/761 1320/732/761 +f 1320/732/761 1314/724/761 1313/723/761 +f 1315/725/762 1322/735/762 1321/731/762 +f 1321/731/762 1313/723/762 1315/725/762 +f 1323/715/100 1324/718/100 1325/717/100 +f 1325/717/100 1326/716/100 1323/715/100 +f 1327/719/755 1325/717/755 1324/718/755 +f 1324/718/755 1328/720/755 1327/719/755 +f 1328/720/763 1324/718/763 1323/722/763 +f 1323/722/763 1329/721/763 1328/720/763 +f 1330/723/764 1331/724/764 1327/719/764 +f 1327/719/764 1328/720/764 1330/723/764 +f 1332/725/765 1330/723/765 1328/720/765 +f 1328/720/765 1329/726/765 1332/725/765 +f 1333/727/99 1334/730/99 1335/729/99 +f 1335/729/99 1336/728/99 1333/727/99 +f 1336/728/766 1335/729/766 1337/732/766 +f 1337/732/766 1338/731/766 1336/728/766 +f 1333/733/767 1336/728/767 1338/731/767 +f 1338/731/767 1339/734/767 1333/733/767 +f 1330/723/768 1338/731/768 1337/732/768 +f 1337/732/768 1331/724/768 1330/723/768 +f 1332/725/769 1339/735/769 1338/731/769 +f 1338/731/769 1330/723/769 1332/725/769 +f 1340/715/770 1341/718/770 1342/717/770 +f 1342/717/770 1343/716/770 1340/715/770 +f 1344/719/771 1342/717/771 1341/718/771 +f 1341/718/771 1345/720/771 1344/719/771 +f 1345/720/772 1341/718/773 1340/722/772 +f 1340/722/772 1346/721/773 1345/720/772 +f 1347/723/774 1348/724/774 1344/719/774 +f 1344/719/774 1345/720/774 1347/723/774 +f 1349/725/775 1347/723/775 1345/720/775 +f 1345/720/775 1346/726/775 1349/725/775 +f 1350/727/99 1351/730/99 1352/729/99 +f 1352/729/99 1353/728/99 1350/727/99 +f 1353/728/703 1352/729/703 1354/732/703 +f 1354/732/703 1355/731/776 1353/728/703 +f 1350/733/777 1353/728/777 1355/731/777 +f 1355/731/777 1356/734/777 1350/733/777 +f 1347/723/778 1355/731/778 1354/732/778 +f 1354/732/778 1348/724/778 1347/723/778 +f 1349/725/779 1356/735/779 1355/731/779 +f 1355/731/779 1347/723/779 1349/725/779 +f 1357/736/780 212/737/780 1358/738/780 +f 1358/738/780 1359/739/780 1357/736/780 +f 1360/736/192 1361/737/192 212/738/192 +f 212/738/192 1357/739/192 1360/736/192 +f 1362/740/781 1363/741/782 1361/742/782 +f 1361/742/782 1360/743/781 1362/740/781 +f 1359/744/175 1358/745/175 1363/746/175 +f 1363/746/175 1362/747/175 1359/744/175 +f 1364/744/216 1365/745/216 1366/748/216 +f 1366/748/216 1367/747/216 1364/744/216 +f 1368/736/783 206/737/783 1365/738/783 +f 1365/738/783 1364/739/783 1368/736/783 +f 1369/736/784 1370/737/784 206/738/784 +f 206/738/784 1368/739/784 1369/736/784 +f 1367/740/175 1366/741/175 1370/742/175 +f 1370/742/175 1369/743/175 1367/740/175 +f 1371/740/180 1372/741/180 1373/742/180 +f 1373/742/180 1374/743/180 1371/740/180 +f 1375/743/783 1376/742/785 1372/741/785 +f 1372/741/785 1371/740/783 1375/743/783 +f 1377/736/786 202/737/786 1376/738/786 +f 1376/738/786 1375/739/786 1377/736/786 +f 1374/736/787 1373/737/787 202/738/787 +f 202/738/787 1377/739/787 1374/736/787 +f 1378/736/180 1379/737/180 232/738/180 +f 232/738/180 1380/739/180 1378/736/180 +f 1381/747/783 1382/748/783 1379/745/783 +f 1379/745/783 1378/744/783 1381/747/783 +f 1383/744/788 1384/745/784 1382/748/784 +f 1382/748/784 1381/747/788 1383/744/788 +f 1380/736/789 232/737/789 1384/738/789 +f 1384/738/789 1383/739/789 1380/736/789 +f 1385/749/181 1386/750/181 1361/742/782 +f 1361/742/782 1363/741/782 1385/749/181 +f 1387/751/175 1385/752/175 1363/746/175 +f 1363/746/175 1358/745/175 1387/751/175 +f 1388/751/216 1389/752/216 1366/748/216 +f 1366/748/216 1365/745/216 1388/751/216 +f 1389/749/175 1390/750/175 1370/742/175 +f 1370/742/175 1366/741/175 1389/749/175 +f 1391/749/180 1392/750/180 1373/742/180 +f 1373/742/180 1372/741/180 1391/749/180 +f 1393/750/785 1391/749/785 1372/741/785 +f 1372/741/785 1376/742/785 1393/750/785 +f 1394/752/783 1395/751/783 1379/745/783 +f 1379/745/783 1382/748/783 1394/752/783 +f 1396/751/790 1394/752/790 1382/748/784 +f 1382/748/784 1384/745/784 1396/751/790 +f 1388/751/219 1365/745/219 1397/753/219 +f 1397/753/219 1398/754/219 1388/751/219 +f 1390/750/217 1399/755/217 1400/756/217 +f 1400/756/217 1370/742/217 1390/750/217 +f 1395/751/791 1401/754/792 1402/753/792 +f 1402/753/792 1379/745/791 1395/751/791 +f 1396/751/181 1384/745/181 1403/753/793 +f 1403/753/793 1404/754/794 1396/751/181 +f 1405/754/217 1406/753/217 1407/757/217 +f 1407/757/217 1408/758/217 1405/754/217 +f 1409/755/795 1410/756/795 1411/757/796 +f 1411/757/796 1412/758/796 1409/755/795 +f 1413/757/220 1414/756/797 1415/755/797 +f 1415/755/797 1416/758/220 1413/757/220 +f 1417/757/798 1418/756/799 1419/755/800 +f 1419/755/800 1420/758/801 1417/757/798 +f 1413/757/220 1416/758/220 1398/754/219 +f 1398/754/219 1397/753/219 1413/757/220 +f 1399/755/217 1408/758/217 1407/757/217 +f 1407/757/217 1400/756/217 1399/755/217 +f 1401/754/792 1412/758/796 1411/757/796 +f 1411/757/796 1402/753/792 1401/754/792 +f 1417/757/798 1420/758/801 1404/754/794 +f 1404/754/794 1403/753/793 1417/757/798 +f 1387/751/217 1358/745/217 1406/753/217 +f 1406/753/217 1405/754/217 1387/751/217 +f 1393/750/795 1376/742/795 1410/756/795 +f 1410/756/795 1409/755/795 1393/750/795 +f 1414/756/797 1373/742/797 1392/750/797 +f 1392/750/797 1415/755/797 1414/756/797 +f 1418/756/799 1361/742/786 1386/750/786 +f 1386/750/786 1419/755/800 1418/756/799 +f 1421/181/802 1422/182/803 1423/183/493 +f 1423/183/493 1424/184/802 1421/181/802 +f 1422/182/803 1425/185/804 1426/186/804 +f 1426/186/804 1423/183/493 1422/182/803 +f 1424/187/805 1423/188/806 1427/189/807 +f 1427/189/807 1428/190/808 1424/187/805 +f 1423/188/806 1426/191/809 1429/192/809 +f 1429/192/809 1427/189/807 1423/188/806 +f 1428/193/500 1427/194/501 1430/195/502 +f 1430/195/502 1431/196/500 1428/193/500 +f 1427/194/501 1429/197/810 1432/198/810 +f 1432/198/810 1430/195/502 1427/194/501 +f 1431/199/504 1430/200/505 1422/201/506 +f 1422/201/506 1421/202/504 1431/199/504 +f 1430/200/505 1432/203/507 1425/204/507 +f 1425/204/507 1422/201/506 1430/200/505 +f 1433/181/508 1434/182/509 1435/183/510 +f 1435/183/510 1436/184/508 1433/181/508 +f 1434/182/509 1437/185/511 1438/186/511 +f 1438/186/511 1435/183/510 1434/182/509 +f 1436/187/811 1435/188/812 1439/189/813 +f 1439/189/813 1440/190/811 1436/187/811 +f 1435/188/812 1438/191/814 1441/192/814 +f 1441/192/814 1439/189/813 1435/188/812 +f 1440/193/516 1439/194/517 1442/195/518 +f 1442/195/518 1443/196/516 1440/193/516 +f 1439/194/517 1441/197/519 1444/198/519 +f 1444/198/519 1442/195/518 1439/194/517 +f 1443/199/815 1442/200/816 1434/201/817 +f 1434/201/817 1433/202/815 1443/199/815 +f 1442/200/816 1444/203/818 1437/204/818 +f 1437/204/818 1434/201/817 1442/200/816 +# 2079 faces + +‰PNG + + IHDRHÃÛ±sRGB®ÎégAMA± üaPLTE  +  $ 7+'9+3 $5.%1+' +%!;"5'<2:3)'%,,1/0/.011-)3,362-776En'G$O( s88D72o=AA4Pk?b|GH)F(N1 K5P. T$T4 [;A=7pd;p5,E_C8JD9sa?k[BHC”k-²] +ÂJ;ÄgÎs-Ì}+âPL‰TH°Ps˜Es¨iViQ²nk’vp¬WKÏ_PàW{ÍnXÎhZæsfÑthèQ‰µvŠŠj‘«|§²WÏ^šàfÖk’áj©Õm¯äuÂÛyÄ⊌/†1$¶ ±/ «3(´/OŠOˆQ.Žl Šp/°L®O-©u®r0ŽUJŽtT„{o±TK­pM¯ogÇ Ó0Ï0&ã7 à6(ÓUÏQ2ÚdÐs0åVìV*çi +íp.ÑSGÒmOÉvkáYOîuJ‚<؈8éX‡T²„{’‡t²¥Mª¥s´ˆKØ’LêŠnÓuè¢VÈ¥Zö±q̱móÚkˆÀÝÃuù–† •‡5±‹¯0·£»¥7’ŒO„w¬Q«l¯©T±­kѓϑ-׫Ò«/âšìŒ2ä­ê´(ÑMÑm̯PѲmìOë•jî®Qì°oÛÃÚÅ4àÁëÇ/ñá7ÕÉRÑÌpïÒLëÒnóæVñìq–Œ‰´’¨¨¥™µº¹ƒ°°°”Ë—‡è”¶Ì—¸æ¦•Ô¥Œì­¨Ô³­ç“ÂÐ’Ïç—äï²ÌϬÒí²éëÀ¾†ä–‹åŠ§ï«‹Á‡ÜÑ‹óÁ¸ÇƵëè©Þò©äÕÓŠïÓ‚ñï‹óó£ÍÍÍÓÍíÌéëæÛöéçôø8`ÆtRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿS÷% pHYs  ÒÝ~ütEXtSoftwarepaint.net 4.0.19ÔÖ²dûhIDATx^¬½ínÜH¶¥-Ûí¬cYP܃”%+û À>j-(Àòé¶Gyóû½_R]J]ÎûB‘o­£ƒSVñáó‡—œM +¡Ôw•ÿ”Ȫ ± Ìa⬂ì-‰_{xø†œŸ?žÿX*ðô¦(òsªf|·‹:4;—ËT÷ç8 +ž.þú*óÀòt†´³Z®æÈÕÑrZ,è8Ü?ëÙ½˜ª~þËϱ÷oàQЀûØ_Âó gÿSŽOŸ.ŽÎ®Ö÷â›Îu¼…>ƒ î]]z_ûú6öÎ^Ÿ²*`<”?€ãðúDb,_/VÇ-rDppÄ‘ÅòˆÝjq’dË£ýˆ‹£ýƒý¤Á iðo!„­Ö|úà’¦ÍŸ +ÈÀ6_“MâÀ0"d¡" 0¨õáûÑ©ÃÉw8‰ ð†¬l![I©7H½rqB•Éúîí›7»iëØYÏÛ7H:j˜Ðj>~p©SyûÞB”A;H9º©Êòß“”©ègh>]öÇ&ml»Ñ¹ÈÚÿç4lP`ÎùÝí¨~ŸÖ¢*œˆVH+T<Ðx'Åô'& Þö¥ÖXoßÛŠ›ø‡ÚZTÄ-l-kO2y¥Ž`”üW)¬$Ò¯¢Hœ b¶æ~`<ë»Îw©ÀérÀßù³¥Ø ?} ±æ*Û¹gdcsÝ¡?mãŠÃ³ìZIc9¤duqÅ,˜Ü>„29 Æg¯lwº©šÊÎö›æ?d¼ÍvÂøÎ šÿÛÔñÍ2£;Û/¿ìïï?ÿÏgûÏï8?j?Ê Må×ðΫöõmÔ÷ˆQœÂÃð87ç´,€U_e±wºâBŸ­Îå/6Ü‘zþ•Àñ’¶p|Ø]€ÜÀ!à; ÑúÃ88( À{ܲ as‡”¢, Ѐ?´L­& A¦5٢ߔÀ•¹°&õˆû-”@ šSh dûw,2÷üBÅÓ( À’µê׃¤dSÿ#,äò¦=5pú—ÿëÝûi%™…Å'›'a—ˆ‚Ÿb°Ðõ®:ù¹k³ˆ\²cWûŸFËóVs#àú:¢a²@Ñ]°›Vy¯€7MíðÈòn¥Mêµä‡X ›ú.déÌ™# µõóý„úHC §–*bg£Vø¿¿áï:ù uáFàËtìX.ó¡»6€ÀÈo‘Áx¼‡œ÷ÞjÜ2x½z}fภ¬°ÄЖ_œ/ª ÑÀJ*ÒiÜ3ðkyke«æOó´ «?ŒøôC À”ôB©‚„tœ,Tx,€P8ˆËâOL°k|l "R&ùcTAMj‘pãcïIè T¦J« b± ¹ðq¨{“š^û¿ÏN3ÿðÍ%Ùü•oQõ½ºPVç›[Š€o*‘PØ•¶¤’ÿ©ë]Å4O¦¶¸g3Ý…žT?ˆ'´ÜéäèUK¡@¹šú3 ë#OK{­þi]ÝJ®h`¡?²òÖ*²kÿ ¡|ç-¦tåQl[QÐË/ÿñ íð¸ßé_ñ`Äx¼x\]˜/ÝÃú–²Úƒƒ/'ù”pGÚî-WØHù«×Ð/ Žg  ºÞ;€ƒ±ö±®´¤<Ç´r‡p ÿ!¥#z°ÖÀÿ¶ÐÕ¨mÔ±—o¦}bÔªò*küɰ;À‘ª<Àxð€œž!'ΪèÙI{šœÌÇ÷ïr4€|§¢x›_ŸSáüý‘Ù+Ãø!µ’ê> €Ý7E€ú·)(“¹cP<ªþ>—MZÅpϺ=Š"|/yc+®{$à,•§©ßÓ`¬A9`ÿ¿ôþ ÑRŽ–c5·Ðu+|(ö¡€èæ~?&n"äê³ÿÄUôÁôá+Œý/¿ýˆüŠ¿/7¦-€0=Ý€X-ˆ)0dCŸÌŸÂ›dWØj³e‹ÀéÜØ?:XLc¯«Ó²ˆßZ>@aŽ=p¼µèÞéÑ¡WÐÀ&*[k `kŒ1Zw¶—% +ˆÑþ¹Ôš¥ò©€a +;xÄ^Þ4þÂR¢…ÿfP@É„S[`í'WÒB à §¯˜[UÉÇ@ƒ—“ÀÂ/ðg¸¾ÃÖ××ÕAí²×°]¾=+þ·s„–ªþ€;5SþÑÿÜ®¹.Žú—‚¥ˆÇ‘# Rž)rr_ÚÛ˘„A:ÿ4¥Ð¿F¤vd@Õjášßù9_³ý +€dzöìY,€Dæ˜|ó#~yñ<ôOÿîNýއƒ‹ïS€Xšù?= ¯0°ëÕ¯ÿñÔ™ý K.·Â£L ‹Ëz›»^]ü¦€J÷F-£è‰Ðö‡ÙAñ¯V˜ÿÞÅ}"V‹Ôw8p_Û!ã>Ô¶ïãÂþA Í…Ú*Æ»@1?Nö½„øÑîjD2hŽBÄ–øïX ZE4D@ÍXMøœØV¤LVuw ó™°OÓÓ¡²”|ï§£ÀTþrVÔ®å_€~‹O6 °5öw7ÏÖ úp‹‚1Œ®çöGçï x—ª÷?Á!ânŒ¢¸7‰€bg°b)O³¿`ÂÕ™å¤ú¥ý}k‰îWvÔ?Ké£âÿ`ý„‰ýÔ`%áéÃÐ>(êiïB ybÌ@Çá‰Åɾýxþƒ,ÉJûáîB ÊC¡ì”dZ°4c²]ŠBuµ¿ô/ÑÍåqδÜàéÞÂ'j{šþÿÒ¡E˺ß67› {§¯_/_#ïm;¹e`¹øõ»%ó}2Ž,Ÿ.d·“`”‹¬„ûQ)XyMK›§m8À‡O6ë`f¼ ýUýåÿ!ìsÉ:¼ÅºÉ˜Æ&ž>p €ÞqFr¹IÇÆ¹Tù¡d°-|£òŸ>>kO:)þKmézÿÀ;b† D…^éÇ(HIpw € +nSlƒÿg´#(CC5p«üÇ¿]„€áCûwS 9ü‹ ÞTL酊Ћ€D³VÕTî‘̤I?`áù¸,_Q^èO]UhP•§†pßS¡öCÑD S‡{/ÆLÖHTˆmîŽkYìûïï«åkDì8ϟ˧CÙË[<Ù[œ­JOÇH__Âk|Sƒó¯o “ñðÝE<}Lài­Æëp»'þ߬¥ÿì¿Ù°sÝìõ)¬°ÚCßÅÞ#œXùd±ø•«C‹å£ÕA±¼°|÷ËR,AÝçƒaÌŸ@ (˜¶Í™ é]D“3XT—ñ%_ "T´²×Uø+åR%µê%PgºÆBŠ`}×ÖCd3$À‡ùgQXTz@†9%28’˜fEÿ áSJbÿöÒ<ÀaÁXÖt{ ýã”ÀP—” ˆ‡»¡âwÌ_÷‰wiÛõ¯ý-íoO±).ÃÇ.½¡E€Ø Hÿ©:ÀèAÀƒCŽäiôÐþ- ²¯ºGß#R@Q„ghçaÂDåfò„²p‘¿ôÁYš‰ñzŸÀ³ù–î +ȸBý¦‡ãT™¹x|¨ƒëó~±¾) @ïàÛ7ȟзo0üIÑ?«=»’#Œå~Ÿ®äð}³a“ý^]vú “i!þ^ÅËÞßö2jô·½ýÅãG‹ÇË=i®),Ž]Š=ì䬠åÙÖmî´O)§jÿ0¥§Æë–ê7TaH!£Šù.ÑŽ"þh àÏ,€z 8Æ"Cª æûÏø/¬ùMN%™5„þ¦úÙÀaMªp[ÖKfy‰ûîRiÒü¿¤àËK,€–4w1N R‹9hqO†¿&€üók-í?çÿ–€Y®ú›÷‚qtn˜­D€ô·hmC¡;þŽ#Åúõ‹ù8UïßuFÁžÄ@“ûa C_\ÕÉþù1ýýÂ’˜Ä•·ÖÞÇùgEñ°>þÂî€væú_øtyx°\5Q›®QÒí»¹Y_Ÿ^a¿{1póMzkã{Ž({(¿÷Ò»Ç +H¬=€§‹Óâÿææûwhÿý÷& @U¡o,—¯´ÿ_%æ`yø4ÇWO1ôƒ²| ØÄÞ"ÏâŠÿ·,)˜ÆÍ™ ã3þßaIÁ:˜_¡äË<€ÿg€Ê´Ðf`ÔXøhhxÎʪ9I3y2Ka¿»÷)À»Ã¶8%õ±+KûûDg hº÷¾ÜXr©2áŽB@öÐûhÿpë_kÐÑ´ð¶÷OÊ;ÿÙ’‰?Š€]@õ_fÀîPVRº +¶Í «M×q¶d é‹þTˆ[žª\æ—šÐÔþ hâþH€ð?R 3LÙ¶Á±áì ý· ºßöý‡ið—Àõõ™|;»ó弚àSqon¾]Ÿžê2æ+¢ñÙÒÿWó{¶‰óèÉâP@¿[Ú÷þOÀ}i_‚÷OŒ;Y¯×z|Jè(ÁšÅøããW¯–Ç''ëE/œ²½"ÿcb h`0Ì@t.ç/!c@u²Ï @Âl2#@<4ô“ú?h;«i×øœ1€²R¦ÙÃàú‚©\1Yð#¿25yÙyDiøkî8¤[Pö‰Nó\ˆb³ìúü/•ZI'à{Nµ,ÿxñ&“ˆ 8rì͉Êd‡þéRݲþ›|Ó~ËJUó.Ka‹Ä'eP‰¤M†ÿP*9K;ÛÓ¥Ò(ÁÄýËâav`ã¿‹‰ß[ámðvB"0þ3änÅ?dê>’`r‚ã/C‹«µ¢›.ÕCz-t$«š»À^éÐç&TõÒ]oo"þ§û}óû﬷±÷+w‰í ûðo™| ‡ÏaùÉêü|¹F"àY¾^¯.Ög_VD$=ÙD,(4?I_Ù[ f%ѧÂÜø¬Š+h‹÷‘š ÿ¡%°cûˆÎLÆXà"$ ñ%iÀ,€Û§f.ÒÇ Ã@ÎBìH€¶8œ¼§a2Ï.çle;cARº½¡`X —Ä3H%>’Ì¢»øÈ/5Ù¶g –ß‘%" â°ììü»4Hp»ó/ÃÁÐ:\.÷ìôjuÏH@l‰­(2SÓ–9bí¬tûKP•Kõñ±Õ9Lì3álõð™sÀá9ïP:èîýrÌ'ÿ2?:>“ä~ö3³$r¿yý`\_rÑ®0Õåzë~ñ;&»{ÀÍ·³3EBGü>#;NÖyÄÀâèz}Cž¦ü- €ËÏ}UoÛ•‡ÕÇpúo‹Õò¢_¬.–ĬVk”ÿzµ<ÄIø„eµÚð;G°ZýzH û Cž5>m^hÈÍnØrñ£GÂyHVœH‚æüîbF S÷þ»c“ÀÊlnÃ(rÎÿ©`0YÖ¼;3+ +Gpö÷ŽðÛvŸL€§aëjé•,‘ eè××_åOÿ^¼ +ZÔXÀòHÅŸçþÃø?¸KÿÝÎ?š×`Eb×GAwá…èeÂ4g툙ž›k¢¿>KM݃ÿÕ˜Á“xà\ÀÛHëÿ³‡§³¤·s½øå?JÏ·¢ï¾À؃í(@"!†ÏìÿÂÂåÈ~Éßì‡çðµø®)°YŸ]Ý4qEŸÜŸáñòúÛèøÿ£öèhô«ôë[µ|ŠÀX¬°$øêëú)Àl€%» RÄ   ­±^Ñן·_äZQ½Xc€iÛÐqìotÿã"ä^ï:Û’ý»;€ønÿ«€ìJ¡”NN6Ö_¨ +)‚•øäœFÒeïÉPYJ¾û@Š¿9Ì‚¦ò¨÷ÍéÖÃ~ÀZg!@§â²*RV„ü‘í¼…ÿ`yšÉõÃÒÐþåÁòp¢ÿ=Ú6þæÖŽXw£îSzcH„­PF€ƒJŒT(@÷«àð$¹ð0¸ªÊGEY¶PȬþA€DÎCürÜí Ý ßwUú±s¶LoÅ/0æÚg ‘>º¿þ+ËÕÙõÍÍzÃ?~Ñ?®Z[ÃàÛÙ ++¾$nŸl0Óø·ñôŠR-© +J¡Ó²‡¬!¾æ׈þ –€]|ÿr ¦Î_ž_¬¾D(ÇúÚ×,Ԯة·Ð;ÜŽy_°„Ø­ð·Š> ïì`Æê™ýÃä&äÇws3¨/ÕYªß¾ÁXW×7F„ƶè týßsŒAÀŒî›ú1RàøÐ±€c:ôÅÃjuŽþ_Ý¬Ðø'R¤ p´ÑóÚÎO—'<öáOžÿ„ý€Öû2 +ц-‘¢‰«ukÀŒh,ì‰Qì*'”PPÑë»kzðã·Ý x&‚¢gØZ•7èdoßÁFÊà·ýè]7Ž$<,h﯊0€þy0`ZÍÿìËSˆ€ë=’6ëÜñÜ«ý›Ã².”Ó?ÉXžD.·L€­˜É +À0— `Ù/ú ¥ÀUóßJÈkž*¡ T¨"‹ÿöyñbÿ—GÏ_¼@$ì?Ës?˜ï +~Ag¿P¸$¨Á€Æ7=y»ý_öŸµÂg7Sô;Á`„ö¥ôÃAê+ï#ð;4׉ÊÇ·ùv}½¥ÿÏ€¯ÿEþÊn™Úú·°-öÐÿ.eTçÝÙýë;GÈôãõòt}q¾¢G€-pŽOœ¯¾.7˜iZËõòøÜ7ƒ2w`oñøñã4~ðNõîä>yJ›n—ΰ­ÛÎFÇY#`8Ò*ÜûòI×Éc[šÆh§pÛð]HÌð?ܬs‘ØÿK6 ´ñøí1€:½”£ð³1€i„ªUìU€{X_O=ZÀ :igò4#–§‡Ö»L3º¸/ðßKÿÖ¿8a ÷V6FËÊë«ëRØvØïI™Ô,á+yÇñôí-'îjRÿ“¨™ƒ²Z `<ÿOÔë6Üñ÷GžËñýGûˆ}Ö(õ­â'±YLmŸHñË‹g¡ÿ~¬ˆ[ +ßÒÜE¿tëÐþ¾suذ–påw@®¯,âãÂOéŠÎ7ÊÇW +€¦ònà˜7c:Á$1*ç,˜1€àÌÇùõÿÀÁľ@é®\¯0ÿL ¸¸¸ ?Àá/K4~",Ï•¾hoäÖcÀK´;ºïe7þ:e 0äR~»ƒ²^¾‡ Ä= îs@[pòçÀ- Çr²-ŽrEßЍ§þ¤ùS3´>ç +˜ ^“eü°æ?À–ÿ-´ÜßAÇÊL%@»áY`D^ÒÉœûûµQ°Pd¬…»ž·Æª lèúÛÏŠû,mÔ¼À:䨀&Á”ÇÁøŸ«ëßü«ò®}cçÏ·0xÚ?Ê,_ €} JHw9Oø‘:üÅ/HRãÆ¬ðÿ™IYÉ®å`z¨oÁðŒÝˆOL‡28ö õKxÕÖkzúR_‹ß= Û ÛÀÀ„¯¨?~ÇÌŽ¡íƒVµýìÃNóÁBeÉÎè_[ÿÁÞò×#W‹Ru;/L›ÿ·“ÕÉù…Ã{'ËãÕêè5Ä?9C|Y¯¿æÄ‘ë¯g +%@ÆVy1ð±Óÿí)V@·|8ñ2:·Ì_Y÷ódñ'ò—R„ºÍ‘p=Ô‡?2Ž˜-M20‚ŽËy6êßH ¨2`ËÿŠß10hÈo¤µ‹œÞ°DitaòE »‰kPü°ò¨ÍßéYL²Æù@;)ž_zÿ·f€ƒt%Ò¸Õ pN’ÊÉ»ôê·7´? > lls¿–£X ²KìH€)CøO¸ªŸ™ÿÉÓ°ó¿S¸º +§‚‰‹¥Ïa5äU§=P@ÚÇó‹V@¼ìÝë7!© $)PÚ?˜<…Ý`…æã{?_Ê©+ŒAc›·þ‡û%V€Ø&s]P_ˆ¢wQMøc'ëóİ„ǤöÿÐGþZ·€]Ìv?ÖMŠ£ùéØÓ€ç§Çë£ëÕÜWl¾~]o|*à«Äµ^œŸ J|œ``;€¦½ˆ—†tü]´œŸ–Zå ú7½gùCÐØ*NÜo¨™»Z§ «ÁQã”a™)¯¥4{‹¥Í`*rf´óä}”߀ð1_›Ÿ‰§¬`Ö²#”õ»*3Jÿ²|ʈ±’" $üí.€•Kªæº`n$–½D†’·éïB[‚ò· jÖký¦[äÉ )‰…XM¡¨£u›n@gå>TU•ÍÕ´ÿ<âßP¨¹%1Ün!Pœ×2hÖãÃo/ÁD€çêñ$Ç[RCç¯ÀßþW0@ W'ÜmQðízm`(siòk0§ÿH¾ +UÎ4~û&ì¡|   p¬Ña×ÿ `}rRü_­^Ÿ¬W4®Õ+uþ‰R‚.3…ü¦àzùš´DcÔÄNjnÈ0à:Ý\4 %>: ØMø^©d#.šè%SÆ ÚK‰”é”P”¼c_@Eô€o–04|dO4{Õoå™À ,öDÀVú[GÀ}9%Áz_aù TÀò‚¢:2õàN@U$à¤NbL“w4À庙‹ßXoÙô+Ì'ËCÎ~xY‡‡/=‘’}ެI¤|ЇžXåžy Ì{Οt +¡ü„¼´‹b¿ 9—<€ð>%t õñVÛdž`mÙ&ôIE6ص#!Š|îDõ㳤ÇõŸ-Pú(ŸT;€ø…*¤D@kÿjç±"ª¢*Áj²ál‘컳‘ÏòX£ÿÔ»d–ÂRÚÈtžOœÂ×óÓÐ0àYŸÛHOà/B^;èÏÝZ¹d\S(¾N\ ‘¿ßpÿˆÇØgñ‘±•m‹dȾ“'¤'åÞâpq¸ŸW6ŸìHw£e~²:¹XpЇNö?~…p¾?]ƒìÖ_«å™â;!™NÐüõ4áñ¢[¾£€´ü7Q~‰ƒJã#ñ»(þ·(ZÜZ$Y GÔÂÆD6¶Oºªø´Ü'äàcJœ"áp xF7À‰MhX ±…?G@åA’³ø‘@Ížy^ΚŸQFˆKÕa G|\c +jýé±_üµ²©3‹wÅÏ¿/3ÆPQ3 0:ÆJ?—UH.u¥^õ_Ú¿:sŽì$»eŒ±€“ZmâyuU EoÕÿàÿœþ+rÂþÔ=l}&@Ðò˜ûž•þÆ@ÀA­Ëo }ÔÏ(à/Ž–àGè=(/´!þºàw‡áÿŸ\ÿ±?ák.eÞªgön®*zÍúv³Y‹¨Ñ=ö»O¬J]ߨâ¤[­ï…[½€1pø+Œ}´XüªAptºR™Ó @å9@ÙádWèý×5 ûÏ/.V7gëk,€S„¶€3ȃúì+M>¨1€—é©Û²Ë¶ìûQ¼ ÕGAÖ¾²VܯêZ$’î©é €¸¤+‰€û)H?( q‡@ @·x‰É—$FΑÓ®‹É©Œr¦1«ßžŠýŽ~#ÚäžexU×m`Lÿó£À¡>é+P‚àíeÈ+íŠrTš' Â}š› gõ‚&dñ¯˜Ÿ`J!ªÈþψ^™»Œ["€J¥u$ {ªƒø=ÌMýR;}]`=µÍ´½™r[$üïX±ðtÿ_ΡÍOLT}–ŒÚ`EÐ_( a—Àÿ›o¤}ØâµŽíS‚üÈ/¤‡äK;EíVê- jû~óm½Ý|ñ¾MõIñ>ÒÒ Àû 欟EÛå}¼vô.ïˆÓÓóãž ¸\]cã#Œ^¶ÿIvñåìú„þÛ±¯¬OÎé:„üµt3–*miZHf¤uOØÑÿ27D ÿã%â•êdçÓø$ìr)v(¾ +¦‚“@@ò ðÒ‰i­ƒ÷U~ùÑäÆU±U"O+à®ð>ùŒË¯#îû«<‰ð¿Ç5$|NÄk×dgi4ýß^†»¡’žõúiV݈èáŠLòk—â-$”Ž®.¡–wÙ 2Ͷر`²Kúõ7ç·aØàsv•µøß)õ<Å-*ÍÙ¿3 +P6€BºJ~¶Øóp_AWÝ00ì$Q#áü÷ÞT•Ãࡾ¡z€Ú_ЖÇjœ€¥,€GIÍŸRXž# ¼<ÿëßpðôÚY;XOŒmhîCÈimþï¿ki]]yý>Èî8€""bÂmßk@cz ¸ÿálüêýWìñ}Áâ_)hÄf‰îG\\` ÖËkGÏ4NO×¾#HI”S" rYð + 3­iãßÃ\(fѼažˆ€ÐDâ…~Êv•h ÆâÛJJÓ_âGáPýÿt÷‹žY\|!tY’O¤Ì„hòâ¿ép²rÄA@F[žÄtH§7Z-F˜¿XA,€p¾E€¾({ ™šø Gñ·(x{.³H)ÿàf¨Tär¿IH“áx¨Vì“­Ò8Eˆâ¾ê_•] gŽ X°Î8¾Eôq©ÕGÒ " 6€yÌP§¼…"c'BTÊ,áó_@O€ð0ZM/^ìoGäúó°þâv-%Æ@RDÿ³9lùóeî½å/¯àÈ.ÀF…»£ôåºôÍÞç€ß†e üÌ“_Ï_,® +ÑïÈí;€<)" .⣱;àÑâÀ?ôB\8¶(8Ÿ‰>¬'~M vƒo ãæ!Â1@ `uò*ÔwY ß`_‰€ …ªmXüÍ~‚y10Ì +Kâ ÉêÚÊá¿Èv09ZYfcÞS¤7\õXÍvøQçÃḠМ€ÙÎË­‘¥t…=‰ø“à1„i=Q~|Ž1€Iý?˜w"y8‹ì"â<-÷¿ÊBɸ,ê|Hi]hW|‰>V•"†Y¢…oèˆÇØ¡(W ÖÄ9ÆHJ[Í€:äÀíæ·¸YSù:Eiv+h1²£þ 'Ö¤Ù(ê:Új+Ôéz¡'^¬ýXYHä³#» @J¡î¯ý_D®y/3/‹öØäory…ìÄž{‹æÍc[¼å:"J*¬Y¿#?Ò‚Èw"&×"<4a€âÿc?æ-¡ýü¿Óú.ë|ã?8>ù:ÆV«óóÕ¹f¿OéCè?]¿vèТ‚é)Àû—/}AfVŠO>G™Ñ¾é¼¯TsGÀBºòKg'ëPÀ¸Ž©ã7vF϶v$< ñ¡x -²…zõ)uŠÐ‰7HSªì^æ=„’žž +£æ=ñÉȉ(byhö6[‰¼ü2FKÂêyŸõ!~9ÅûŠÁ-ÞÁ‰ư€«kÿnV3\ àxsŒ€p,É´±G–¢?À‘þá5GlœÈC[L ÕnE@ºvð –E<Öo;/Ë~K~Ï¢N gÖ'U…“ä/>¦{^ö‘õÊ€Hâ|ä‡à `Ñ^sÀD¿<Ëc@ ¦”ç,å>tÍì,3/Ë®<¨X]id dR ‘c4™UÞ»ïÝü±Ùr;…*G•º!MÊžà 8qà±3üÈ¿ü¯¿ú@°ÿûá<€“@^¸8_Ây ' .‘ ˜Ñýû”4Yª`úëoÞÒëï(;êÝ_Pc¥ýYéÛG9Æ ËŠ'aYÛxCO^,[ ™tcE»YÓH"åGè>IÏ#)-?©¼ƒÖ?ͰÆI±´$ùhçíÛðÿ³VÎÌÈD Ž0C¬«²ÂQC àoï‹þz­€P·mÝæ| ¥k“ˆ•¹#ñéŒÃÈ´¸â˜éZbH7Aä\ýS»˜ö»"ê +‚QaÁˆ©V'¦ú ;¥€-=õYlN¡Ïa‹:«Ùò—Ÿ Â錿xƾgù‰ðÚÉ? äÀ?öÿ¡€C=Èj Ô×èÁ½âßø& Ý,ºù@ ¾®]VìGÊÊO’Û€qÀ|n^ÚËýxR€ßxÅgù6àþíÈ>”?88X-Î þÏ/"àøâ0S5Ò X/óÁßꄤ5 \ˆ¨/…tC†éûjá„ÃåÍÛng@B膡Hó«ÜòJ²²20Å5ÐëV³#(&þrµë3„æ¿gDát‰Cºµüd”KÕxs,gà©’+ÇOó1€È+ð郣&›òÄS¿¢0YÐ[ÄÕ)ÆKúíÎ¥X' Š=ié …* +&FõÛ AûÈ.‹ 2G”ëøqø¶ˆ (ú'E¥ÚU­ö@ *§b—™Ê0ߎõßi¶ gùüÅÂׇn>Ù‡ÂìíH÷@‘?7H?Y±ž¿xö˳²"ˆ2ZóþÊïƒP¬þ àJ8‡zÈ5µÝòo2ÇŠjêszç1û)OÃÝ®Û.Àc¿$Ú. :‚`¾z²ÌW]µ ç‹süóîÔ€ýbH?#D ›«š2-^Ó1¾Üµ>B4©‚d(7= Ð…ªvy¨“` ²–ÀNfš,Œ—nw,€°M X(@F-€"l“ÔÀ€žTÃ’!ëð6Tò¸Š…‘v¤§phþRðáã'‚ÛŸìÉ €|fÀ!cå®D÷Zaz¯Êÿv²lií ¹7é‰GÇÒ ©“£`¨ÿ-›Ýwjx}[”H_@¡3A(vÔÿBö«º&€óòܬÎrKÌ$ÔPv_ᢌ"Ý3hø íY¦ñEÍÿ£žäã Íÿá~ÿQù¬ð<©ÊO¦gÿùË~ þ$K†¿n”mß2ón'h,ýtÆ}vlÓN #‚¦~A  ^ÈÂŽÒ¨ý@ùý#×E¾†¢X,Æþ,ŽN¶ +÷«®‡'Ëcµ}@­Nῃ1"òà`jË—¼yÛÿ ^( @Ê{ʤ ÀfP>ØøÃŽBùbÞa¼l  5¼È@ñ§Lt8JKÊâ-©MJÅ%¨ZclÙY©u½|ã!N+çf +Ÿ-¨-kÛÊ-°E¨Â“ÇÒ •ˆ3Èe és˜ŽÒ@b*p›ÿ`Gñ¿úâ!aýÇT(³†–O¾hå¨ÿŽ‹;‰  •?ò»¦òÎâ3ÀÐßôoþ+"I °%Y”>! …÷³v¢ÃpÀ#HýhxbŒÛ‘DtÀ$…ÉüÀE`ìÌàÔ¿-´„n!w„.ÀÆÁÿb«´•À9^\äCŠù£o[ƒÿa»¾”×#‡,‘0Á‚¾bõ! ÅH\ øæýò)~âm@žû¥€H€óz +‡ÇN&ödIâП- Z¼ËëÀÑÑ[H£ò·0>Rá^¦D `ô°.ÝÉ@YbGɶÐuÛrX¯ŒL"-€$ “@zøj6Ëã5{Kμ,›¨\é“ÿŸ|ÜÉyt Æø…¦QÌ`ùU3è©ÀQîIàçT†Ë)Ogï‚ ôÁ«º‘ˆÅˆ(-‰+½šU°Uÿ ó—¢îñp×h`Hkv@£ƒZ«^ü7äG¯hë“ö÷Bøê´šÿé¡$|¶jÝúäCëÇŒ‡Ôvö›ÄD:áž>{ñè”O”³ƒü@b %È9D‰'ÿðì?¨{«Û#pùÙîk)Àð6Îëv¤°ÙäÍ:Ù§Ñ}?^JÝ÷ü‘L5Pè³+€0¨|šÛE XV)õü;zœƒ{KÿN"sûì,|: ž/øQPµÿ±ã€§~+è伺+ÀZ¸øø b¿ß±`¨ ü¥ãÿ0æ*d“äAâ©Uº[\¨ÂÈ3•œ1ZÐÇò0©"Ô†A3úƒÏ異©q,6¯úß]¶ˆ«èc• g‹Ó-.€‚h{~X oÒ[¹(†Åʨ÷§,€:ê¹¼<ô{c!üØý(&ï ;Žm-V¸,t½IWÜ—\•/Ä‹FÈ·¨eÐÌŒ½0p׈ Р'Ïɘþ i_µF(¢ì@òQâb®þ«ê,½KBO*CôZL £‘ÿùb¿ïE-»‹LÈãA<­®Íðè—GÈ@Aë!´'ö?}rð×0ˆ-ù¥íkÁlÇ5¨y_…0ñ7°‡ïl}Dág±’)û|ý/ý*®íŠ’ü¾—¿o:Ú÷;>Y´\ì¯üãOŒþéAXb8`à$aüé`õûy«‹@I€ÅeþÓÞ' gˆÎ…ôÕ° pˆ40 › P,ÄÒŸ¶‘ÕWùkuÂãb6k[M÷y*&©ŒRLQTí¬(QàJhBr¼NDt®LöIæ0W)àù†Ä”…’ç$j 0@›™7> ±ÿ\˜Y1RyÕþ¨~ëð¿‘„ +õÁØ 4Cæ€5²)–¸T”}0ñd,;<-®{ì!^”¿­01M»éÀ`a ÿY:T( €X@ZÃxOÉžìnì‚ |ªb™¾‹²8ZñsØt-Ì(>êõ¯à™´ÐøYúòì W¬ÿ \oúô·ƒÌ(iAôêó` ÿÆ àê4c7Ø9I€ðY5Α=D¨©_È `!?)–Õƒ- z`Ð@þ4ÆWx îÁ¿êÉ-Va¾8;Y­N +>>öE!…€`ýÊw#ò‚À‰ïìcìϺ±üPC: ˆä÷ï€Zô€$‘ë°J[9TȾ àÝáKÉ-gCá@ ÍKáÆ%šz"ff¸êy‚L ©#8ZĤŽx­9‡:9i¦AÀžiH¬)áA>ö÷€z üÿ„tâ’ª~š(å ñ}¾— +&¦kèøã-îâìDÓ)ìP\kbéWÊ8óq4*m%\Q¥û=`$›ëdáP}WHÔÈ$/þ§ÆÍ÷Q±û1 +<9c+HÝH ÿ“${*mŠþe¨Üå|ù&(FÌ‹ìÆa ð%.ò±ò>M뇃ßX@õÙCáDŃy¿é‡û–.Ç<솣´ˆâOòlrt yU×à0 óÿŽŽö—þ;*ÿèÀI€Áz‘ùËãÕ‰–ÿÅz¹ÁwšN_ôéà+{ þ› +R=)%TŠv„ EÌX5K€Þ@± ¥T”ªÞöw,9k c¤Ð+±]b|rþdp„ù ‹‘'‡ +2´féAjø @y#3#tP¶V;€3}iHÜJ‘³#Ưx~c`ØC±<¤RZ˜ÇL6— »—À«æùdȽÿí‹Ï,qwp³ô°i +¥þC·QÜ6Úý¬“/ìÜ +˜ø€ˆ¡û¯ ˜0N`˜Enk0ÀƪÎÞÏ)êZ`PöÏ— ³ˆì¦CñwÔ<Èö —ýËῌ¦õƒÁç‚ú~P¶,€ 1ù… G*&ä8Ú|×Jð0â£v濱;ñBÆ?ö/…£ù yÕã®ÎW_Ö‡«|$le¬œ)@øËéÌþWe ¬Ö'>È<²Ú#F  ô¢ktÀ|‰*R·¢`aˆž°c²ÞÈËOÁ°×bŠ+ÆôØæ(Áâ(>€ô‹È9؈l¨´Îöõ ˆqÍIæ=öQ¯³Æ¼D?îœ~$ÉfÂI‰AI€Xx<ðfjñÒMTüÕC³jS¼˜/ %!T CÁ‚ŸóiT\³7ì£ÁiA0:<¥fÌ GY©-ìVlýöH¨\†¯ú‹# +˜TÿôCô7ýAóó!(>?{ôv÷ ®¸±Íùoø?ð"pX! *ïÏ×l hý@àè ±‰šGuo%@Ûó@^;6 =_æûGëÁó‚ CwmÿÙ±öÒñÏaýž'ÿÉ¡ïЃñ¾'xàc~tüf(@8ò¯pµþ;ÑËWvÎ'õß  a U} _à Â>9ótð)Å([¸N<‰a%gÈB"õ¦DÉM~-€€ª¥dAú‡“Îʱ‚Ù°È©(ñ¤LIE2:5Rµ&^ôLÀ`kT¢Ï”dQ¾íâÖ‰•ñÙ1Ò%—Éê'5ÚÈÓ}OÄûäÚ½›ªƒrg@ý«‰‹†’oâazêa®³ËAÉä8Žk3°‹°ÿÎó­+F”ÕÎëNK _H˜ê F•âW8èW¨@ŒiøgkoºõD_Lq½†¬…í¡†Á?Ñù¯£Xý `½ûü^3‹Ôƒ»òŒ`S¿°¨o}Œc“®[Co¤GƒŒhL€&ÀcuüÊI¿'~àâp}|°¿¤›ï ß9àîkøà…_ʈ ¢À>À‰ .‡P%¾ Í’ÒQñhû¨~E@yŒYÇ2óTqR-ßï‚9²e*¹-€”M}F—,¨.@ø¯w–£@*¥^©-zf×vÿ°€ÌU,å M…ÕOÀ.@ñ_ úZòW9cùEñ”Rh  äŒÇ +9¡AŽ@– Ø;BWôô5÷Cʼný¬ˆ€íh|œÊ`F×B´s©èë!vDÀ S¶5î`G#:ß·€êt=QuCí‡üÓHTW,æþÙŠ#qCávžÅ3£ŽþÍÀñŸíw±¬Áý/þì³¶&º–§(a<,€Š€¹lMýB= ¿qKûW˜Í2Z4Tü¿à¶Ê}\ºîþÉOþ†_,.ìó¿Â p²þõ$ƒ¯úA@žýû‚ˆ? jÜrñÈ’Rª,φͮ@'xN»L™±qK}túÿå Õ{m'»Vøe¤'ùR(n·@òª |;d H˜1ħwß@½Þ¬%ã}ûRWϰp"<;u9QÚœE~Žò§èO]¯€¬5'¥vÎaÈý­ àû¿%†òg?­oËJnêÏád\Õí`¿ƒË¢X¨Àê É“udG Øï·*&t2ágbîö2˜Š3ø  Rܬ•…oß(’óž`õò>ÜwŸîdý‹U(ú€'.K‘[úÇ_GãóÕ}ö5k 'ïGG§^·¿ë•ä8,ÝÊ"çÐ MýÂa½ P ›ì M# GËÛhmy€vñWýËeTþêð¢†ýˆß÷CüXë?À"Xùqà+òàä¡1³hé*Q9õ†~õŒÿäÊçûÓ¼Ñû4g-ÿ<HPJ…UúË5&»”¢ ++ˆ¯ +ÖÁÈ?@yç +ŠÄ ÀnØgåD$»ÅŽrÙ¨5õšò݈ >Òù ã"rz¡21tòuñ D| HÇ3€å³&¿·òÕƒ@«(Äô1÷ ›4ð-E€cg)—j»B95oówØðÆÀĉÿýgóÒ¿Üp2$¯ŒÀl‰Q,(â§á5E'÷tH¹“±Gí ŸlÝ\¯Ê) Šî,¬åeÌ€?Mº>`Åa§A ž¡ñŰoŠ—ÏÙ¢E©sô>¤°‡­þËÒþ×ÃÁ¯¯yôÑp&@´6d VwÞ@¡©_Xܘ¸$©Ãý•º¢ÛßônÏ9ôò3 nô?Y®]®cدϱNœ̺\ÕÏÊ|Yovûç +‚ã…Ÿ/ƒlÌÆÏáÎ8ÕŸ^?+bÀyñ½|SŒªmë„‹”7¬ò rÛWýëq# S¡þÚ›2LT$¾ Q Qq"•BîŠÏPuk”Ú7I¾ (ÔÝu†%>0,Ðí±ÌGêQª®ï?Gä%cÕAÀ@óBAcÊJ@Jÿ#¶ü—4Š€h̉ÎxÇ ŒßÜЮbL íý#7”…[üçxžòOH Á]#`ð߯5ªòc¬Ý$šõÐW!œõOˆCÅÖ X¯á_½ù¹½ßt6QÑ?@úFt¢Bb²àzt´<:=ýûdßÿÉâꃑåÑÕ7nTD–µátxœW}5웸"œ8DÔS€Ja å›åˆ8±ûà"b@íÌþÇOà×>þÅÁ…F¿o’n¹Zþút‘ óÏ–+ÿ2œT¾¸ià'ÁbÞ– Vm¢‰°±g͇ÿêý~òŠúí )áWïÔ¿]`9NòË÷ÆáO(˜ªÊ×0Êì#¢žNn-™×åzêÅÒ@Ž‹—ʳÀtÓ©õ¹ŠÊ `U\£>bä—%É¥]*J4ûcò™R1\ž»KHWF@AjhØÿÅɦP'‡ÿë¹þ%5ÌãÑ ýkp6ÅŒñ·$@‹â èõL¾c8<Ø–Ajîþqº*#ƒ™ÔÁp‰-ÿ0ì&,à¬çúKf§úN¼´Ü²ë¥¸‘æÏÝü›@ίþþd!—£}Û + ÀÞ±*äpb]šú…euLZ(’ô% ÆCBœ)ÑÔ@i?~üèñºç ß瀓ÿðäÄ€à +«ÿâLÙ¾Ùà×ÈŸ…ý†08¿p*°æž´rcwxø&@‘M¶•ë#·è~Öž°Ãÿ„3a>¨›T–üÖ@aX¤ä`ˆW€£Møp±2 {аvž9@( âåäÜá‰P‡·ò©3ø¿ÖBÅg?C àSuZ˜ØŒãJœ¸¼ôD2PàÄÚ˜1¿–·£ÛÌ2P´j&Fã»ÙzØbd a^Ô­¤ÉÄ\ûg‘‹?e”ŸÜ%xtÖ˜ßè|pV€v€Ÿ&iSÀ!È.=µÆ;º3FvE¢ÎP †=H +-~,vNvï–Jì_ü" Ÿ+öæàر„ýÓ¾?qóß|tŽNÿÎÅx +€Ã«oÞ"™.{‹éEÖP¸ML)ïÝA@ŸÈq'qq|d¡€ÞO`¡áþx¡89>Ï÷=Ú;?Z-‘Ž8À¾Z^Eï„~õ ÕêÚ.}…|=|}°0m Ýy@Õ+Ä#öó{U½Cõ 02ÀV¾kÌQ*Ó'öž½Çh€•D— 4Âw“VPÜ¢·¥YÉd@NÊ*‚úÉàxÞå‹@ñy°N-(ªkäçZQ,¡P¨ª#ͨ&¢¤Ç@ä@¥tÐTÈç²¼¬n¿$.#Þ5Êõ®ªeƒüiR…¬é7Ÿˆ“õ/ý‡ú· ýw$ÀL :„9 ¹cñ#a8N¢ †žoœ>[}Þ:°pªÖ­ìÒŸó 9tkèþgØæ†º'¢:rÕ£;@ ºVÀ}ùEÉÖùÿèÖ¯pûO–õÿö*qÁbø=ß]³”^p+Ãè„ïXòžã82d0^ö'§Ht +eÀcÀÞ"ÿíõ*]ù±>\1l€•_ õIàò51'hÿåo§çÈ…¿Ñ‘± àä"û†@:†À y”1€Rü/}  ô¿Î¡¾Ud8>€œk‡ÙDæà;§úB.6Aj<ÏRó c,IѪޙÍz@+mS”_hIѧF¢>¬à(cÞ¿5øŸdÔD¦µû ?Ø>xùP ¬‹vÔjoYF2|ŸlÿéQ€6€TU°±ùßôïRY¸ù”»c¨úÎ +ÊûA%w,Ö®?„ç¨)õ) p¯N‘´|Û|N»ù_?ƒµæ¯ ú·!áV+Ú¹D”¦÷­îo¯€‘ ¯•ö/™ švÿé8L„£{ÑEL¡¿†å"ÿË¿\ž:ð÷\ÈŸÁë÷Š ºÊÁj²Oè_¶;è=²Õâó>”óMpva<Ž¡˜ÎTà©Iì=ÒðsÇ«‹p±>Xc(ÀñÅúÈB§Ç§'g˜ç~/Øcï·ƒëãÁçËE^&vdA 2-ÖI‚Œ¨íÙ" Ò¬&Bža8g¿X*Ÿ‹eä¶àW&:•½HJRÕ©L -€|¬r%÷® Ï À‰‚àïFÀƒmlO†R^æý£]|üü9)átªŒþïîÚˆØZ €Œ×ÝÊ·¥÷Ë…" Õl)ÿ@Ö³Ñ$J +¤SÀá2|Ñó!¿Ç^D`S¯›þÙ³gé*ÜÏw{ý‘Ð?ÅÑÖ8B<èY€WC àèÌo~j)*âiÒrÛ”¿3€ o¬€Î£`%ƒY*J¤ô ºëÜ×ðµº8½€Îç¾ðÿÅaA?ˆ|:YýññäõŸ“‹c€à\òŸ®«•ÿFèÔaocÐzmürPF¥1ç@õ~Yx3T~?T™5gO9 ð–L‰ñýjªi)"¦QV˜'i§IIµ‘OéL2PùÓ@õÔõåMÞ Œ=1JD|F9ÌAЪSqêŠ;@“Þ*ªä -â[Úã]€üÅœ!V!âdÀÁÂæw_7 ÿed™Al²ý”®"‰‡(x3%Cɦf<3€ @”;ªÞ¹ª—[µ?‚Œ ~Ó¾ÐÜHTW¾š:ðFV8|ˆ?°}Ð]{[4R ûJ,ï?Õ]Bg8¬2ÏG¿°ñ×W~ÄŸâã£ÕêTOf¯Ö_ùBèêü|}N¦ó|p’Žh‡êc Àáñ°Áv^@Ô==€ Ôs€X½S=ãƒg±ÔæÐ£Æ3ñ诤¾^· šU×âLM¹ZàÃâ% +ì]˜²-€íÑéÔuI  B²T:@¨'L¤W~UÐO \ øÌÈ+–w\(—âÌÖô_êY¼³ñíQÒfÒnhVzÔ.¸B`Àƒü“öOLt¿ô»² Ãö]#`+àgõ;®×W€Ø¾¿Î9DèD 8"h­é |N­)ç}~J ò‹bôñnë!õ=ktx­„Ÿ?{¾oPê?Cë +€šlp߯˜ ïö)C=#D~¬¯‚Ú¦Y M @â d[õÞG~‡Á{X‹P=@•™/I™ìÔïÅ*ÿý`o$Ëxÿø>  @¡e\¦‰šj†öl©ÔC/Óó;@‰}C·û.b~&Õd ÀST¨ÝA¥¢ä™¼óñt¿—m‚ÓŽ¢ù·KÉ‚¦^‹µ'>¸K‹R4ÓU(,6*ÿw&Q¾¤«^&€Yjá~Êb)ØžÅÑ3#@kå$ϳ~Š©§Qÿ6JÈÏf•ÞÜÐâà,=iɽ5ºTPJ?‡Ãþ ” °7}¾ŠØ÷KÞÑÝ>ú½ÉÏÑX/êóÝNP´ °_C‡æ´oPyü0 ÿ'ôgPÿFœ.ÿ®@ükŒk+ö'”€o\úE /X®šW¬ M›óí¹‡Ê}±Þ2ÜéC(t9ðÎìýí©Ë¢ +yìß+½Tæùç2Ü!þzÄÚG,ý£`–ü@zZ ƒÕ&³‡bQ„ÿ‹°Bõ>ª34‚@•­ #çÙüzhâì ì.BÅüîeMÈÑ´ÆFf*ª"*Já„+NR@uX (ÜJTç\~'Eœþ4¨tŠŒ>w9%1L­Ç¡Îþ5aeÂêC„“PÆþ%]üœ-ÿk³ª£œ½Lªž¸]n)H‹°l´(cÒŽ$#2…­â—ôîŠþa]鿆íVßß2:–æ¬b§1+WR75â¸×‰ ÎëÓÓ<% áa£)Ö…‚3{,Í~øg/÷OOz³Ó¯@Ð:P`€Ÿÿ^ç—Dš9 +¸ü5Çó¿A«ãÕÙúð‹CÎ΋A±ü´@-ù//š¸*ìJvXeiÃSõ½ª­\‘Ñ@w8ÆÌ7P¥•)NÊæ[H\,“šðÌ3ìHdÆæ€i %‚L›'ZVRôvà ù¯cUŸ"d;àqÏ,@"cP˜¬Uÿ]  êÌ©JXÂ~4ÿe®ÉÖÈ €GJÚ š7AÌäþC.@ qn¼7ŸæA£âöWc(Qö¡}µBï¸9ý Àþ±Ä˜)ë<<»*þCïSå[EÄUÚªS1À^Âv@Û…µ‹Øö±èãœžÒÆÕýµèoÚýEùXAüì¹3¬þ/h¸oØîZbƒ˜DäП¡øt8,€!™ßZkmHKái"bø.@[NAo¹gîˆøÉÿ8à±O’”“ôuû»ØûÇòYìhw$Ðvòó4À1?Í|ÇdÅÉúè«ýþ˜ëÓ×ôXÚ®4Þ¨GÕru»cØüѰcдÐÏhô¥ÞDhÜ[GÉž—¥ªóhæPPÊ”c!÷g +v)¾Ë‡Â=&LK5sÓpb#H9i'|X„¨Ôèé!@j![$€?4©ƒ¨ø>¥ªœmÖèO#h!u%ý€+c% r&0®Œ†àI‘)@Æà2(mSÒßnq3ö¸ùzFÿÁýú‹•Ý×£˜ss;X¯óÿèh~¤rêÝ6E€zÈ(¥‚€¢ËØUÿe¬ ž +ÇJí7ÊÛÄû¢ñáí:0¹Ÿö×@[xL=O +I " ŠþËåAvé0å9 "@€Ÿê–9RÙÖ™dŽ¢ÿÄ»U,¼_^8ýÿ|@®ÂÀ¡]€J\’#T7{/åÞ•½ÅÞ⑟ö|@°¢×A0½ X“ûV˜ìÔÿŠ„“s¿pŽù¿>¿øº:];¨°ï¿ +! ÃYáS€¹à üpj<2€µ7}B¡½¡’ÙRZÎcX¢åHßqÉ_Ô«}¶NJQ¸áz­± ã<¿¨s¢Ë²{X–»þ}³cRªÎ[v,€[à„@}déjø™þVOgâzÀ–ý%!_J•d.ÛÄAkò³ºÿ4€ï6™É1E„=qÛfÓ?| çvaÁõ,€c $À\t€‚Ôhy¥% ÌGõªyRï7;($LÃ÷Ü»‘¡ŒðŸ:á4NÒÏ,€ˆy·øÅµwíËp•ò;ãxDø-`ù_ @³¿8®²—î +É_ן#ô‡°>Ä·ðwi³\æ +ÿ™Ð W/öšwÌë—øû Çs! ^ƒ @’s 4ÇÀ§Êp_áv{ž ú!Ò8€ÜÈt{L‹ã…ÿ€8¹8ÔøÈWÂê¯ÂÊðÑOO~[È1…Å"ô—>;,ÂÅM+·I§uëhø×#< è°K'>K kÕ”î)ȇRáÃ'Å€)øø^¡“c¦uåP$wEJe£ ¨ÿáeÈì"9[Rl-Lñ1ã…C¤@¥9¥1À.Àߢ Iþ–4ÿ52Ä1·u ÄØkìJ€XÍ(øŸÉ÷BÆÙ¢ª¨Ž €ÃvE‰¯¾­À ‰‡‘ŒàãPŒ ÿ1à#À´à®—J©6bÇX'¦ó‘ˆ³Gg)ÓTÿeʆ¼‰Èñjå[´hþÖ®}n¿,duÈ¢‰”¿¸P>d†]œÊ„?Íþ#4_ždh4P jêÿ×¾UqÚ¦—ÍåEs1T’É*äB jäÖz¸ÿ”@sí«(‰ çã½'PŸýã½ú@>*ÿWË£U‚ÿ{|²^û²ðqžä+ ëE} Øÿ +SœcœÔ‡…²¤™BøèÌ9¨ ò– iðŸäkè>œjÜÃ% +oL€X +ÙJㆲZñŠ’e±jµˆ?M®´ÆpJ4K—aáDÃ@,˜È)†šÖ©žþ hô·AÚò7(¡1J¶øŒàÌü1ƒ¬QI“JÝ( €”iL@¡öÍ@w½h8Lp›ô«DDMËC"Þ ±#Êܾ£üÅ–X°•Æ +ˆ@}ÑÜì2§ü˜÷ÔnC´2•WÅñ€Ï +8Q„OL‹ †ú—ÿ¾à<:×ÿ.…"ñ½Ÿkì.̆z°"rþºK†b»º?-ן!ä/øçšedŠLåã­M·{€k°<õÒ /U]-ÜbµÜ¥ PR¡Ð¡°Ð8à:—°¨ OÆ‘XO +±¨Òõïõñ#,‡0VKŒyçú­׎ú;*àT€õ¡ƒ€&( `}¤ú/€XÖ7]!ή@Û‡§ZÆ„wœ C†@KÏ‚:ÄÎ' àåý½+YQO*yê²fVyÀ€Av9W +'Ý»ËÉP«³¤S_ ÝÎ3"ÂÄÊŒ9ÿë”t¬WÛŸa%‘0TSìßæºÌ4‡9‰€}AÚ#qІ3Äïi8R_"Òh¼×݈¶G  ´®z÷Rjô±îéY=ˆ@ÕõÚ Ãò[ܵu[E5Ân‹¸FÓ(=;GÊü@öÌèO-YCÿ*G˨'I¨óHñŒý¨P»lì”a“£Òô“Æ/̯ŧ!¤Í÷“€7Ç«ÅõÚl¼s¹n^Ûº†• /Aaa YxñIÝo0‘À›‘صµß­B2~¿Ü_/O/œð¿\]-."2ÈçÍ`_Âìß`­`8¿87‰#~¸øÿ4€tõ1 jØþx ‰J4ä`µjzÔ5øXþz¡BP3"e¤Li#½ðY’Ïw,€™Á;'}ª"°kÔ ¤4ªP„ÏÆ¿s†PÒ>:y±¼!| ýFÔ0úCøÂ(Z—Aæ$%…ù2‘ù]ðg×oöò]¾¬ÿûíC€P$p<_M\Àö³w[džU­Â4È +ûäÑÃ÷Xÿ]¬  ìÚŒ¬ô$€Ý€çüØÎljis6GÅ‘•¦'{S†Š£v-2ê_­oEZÿþ.W·å †×JxҲ̨\†›ÿÖ@žtt§°Ïoš8ðž8w’Ÿë0ƒc˜ÑþQ—%NÓÝíÛ«Ëe@_(VºMýt^Æ\M6þ„C^Íó=·Ø}Õ ›Ç¢ê¾'aƒœXþö„ø`ôñ¡=¶¿ +už?Gå'èBµÿ¿®Âo°Ì„ú ˆ@¤ñ»€FucB5þÎB»‡cP?PýOÆÁÜ(„à¸F~þ ÐˆÈzêpѳÛK`lI™»*¿R_'ó{“ ÿk@ËùH‚?õcK€þµe›xbw¶Q%¬}Î% ¿ô‰?iÝb\¾ýg6ö¯BÍ`š¸±2 äV{Ï¥aÑ_¤ñШ²Å@ÿŒþ@j”¡@m¶n倇Ri:–sÝ][`Õ«9Ð1Ë_ 1¥XCûåô!~L-V:èŸy€sýê· hÞÆ/ûÏʃ8˜Sx€í àþsÿA°…?ºîÉMLÉ”{Áµ÷a?p€@ˆÿwG4ð«÷‚²JvçJmd,Ũ;üÞPoÜfW,òÞExNZ½% +yçsåÝåNl¡Ý?è$nºø«“Œõ£ò—ùî¿þWëÅòœæWAÏ3EøØ â<ßSF`Dÿ‹pL@Ðúï +€Bx`žb>[4T¡Ô ËH_Ù ¡—ŇÐÍ2 Þ?}»‚ŒDdºNU¥©v,«¼exN5 ÿ-Î4ØòXGUkvêûDbNmnLô×þwɧƒ‡ ßîå{)ëÿ«ãÿÉb6à‰Dq€Š¸íȺë’P¯ Aþe‹2›&@ÂDE õ= §;˜Àt<¾Ý¬ÏPu)Ù–—Ê­9§Qñôd3`Œ ·†z0Ð Uåg˜…[ëߤ¹Û¨ ÿ®H ¼è™@,޲ÏCÃ2ð´p?ö½Í}yr^Ò:rœd«øÇ2y躑Îþ[ß™ïQú¹Q^9c|‹â&ºÝØ[àWº&rÍe.×Ëïuß(È“Ø:÷€³x—\À²Zž/òß·ƒ ¿Xƒ~(ýžè»ÈƒõEÍ,¤±ÚÓm€îŰ­‡’?DñÝ­ºÁ5¯Dñi0ÿqáWT´Ò#UD˜ ³ š:ÉÔ϶QþÐÉà®sòHPÊ—Œ +ªöMêÔ8-~FNŒƒ²ÿ.Ðüþ{ˆï à%—O‰Ë?‡åÈ ðÓg€ÅÿØ‘Ümî|ìðð¾4Ar8ͨ´ðm Ð¥6”/:ˆ€B†þ0hØéHÿgy JòDhØr©-5*"§È“@ZPõú5ý‹þGþ¦mÎõÿDÿò4w~»‹.Ç™}¤7{ +ÀÁý_Ý›ŒTòÝp¼fåPõ%,óøDæÏ,Õ}uÂü <Ú ²Ï–­—+Nª³úˆ ¯ïO.ät³¸R¸ ùí\TÅ„‡+QR˜$R;"BeÀªÀþ²>üŽOüg EÀ‰úÖ›%6Àm_ô?ß~àüb½z½öÀªÉ/$†ˆcŠžrðž.ÀÅD>»z6¸°³]€±aeèe±æE}¢gU¢tÓó÷\TÞD3A˜'F@Ô>Ñ&š[box´ NÖ‹5¡fÿ:,ðÕ׆“¾\ç•Á‹ ,€zx¿¦OÀ;X48«å^Ü‹¢~œÉT‚²§øÓ…ᚃ ÕÞ@ ¯[Tá$ÊÁxÉöç€-|H%vйü¯uË|UG*¥ð±:'ž¶ÕTÁ•ŸZ.ÿééd àð cu¼~Xþ˜ô.ídúŒìhàO šHÛ‘xjßâb»2ÑaÁ ×ùsš2(-¼›p%›’±ÖEbkvHzqóÍ7Zýˆ„¯*7VhXùc­„E ªÛ§à–ËTÅ©§é¯¸ ÏçÀ\èoBÎ ûƒÙ/Z<î›CB¾³axTCÁ”Ð)~ 8¿+úî`²ìÌ,€Xz½:­î{7÷Ú "iáäJn±UØ7~iÁÛ¼sõó z^?LJSlBî´ë´MØsæŸúâï-j +Ïã¥>?†0Ê8ø|@?“ÿÐù¾¾,xîGAí¤°>ó•ó‹Õ¾ `Û• ±` ÍÛO²üÔø0g~õ:œâ†à@óKBéLc5™ßGÿ!äÍø„§)È‘’ôVW<'m<Ü@†LPIË}ãS +öÍÿœSÀnÛ`«s + Y¡§Õc©d¨ÿ÷ÿÔàw•¨ó…ÝX‡Ú¢÷[¢4ê%€²!ë&K»b¿/“é($¦A<¦dƒ„d„…!v7Ãõõ‘ò%|#OWñ½¾–ÿÕÚ|³Àò¨Z)C=Äò/µš>}]ëÎ@ @FÿKôt5Ššœ@î€`­fä!néoÙ­V—Ôññ†Sï î;"ðèùsùï·#,|qPÁBL”¤»Ø¯“½÷)@1߇ì ô²´hÒïxù¡û©¯e®›÷Ñ«i×ium` záÈ¡zQs¸Sjü{ößÁ²¾àQÀ$hÅ¿|²=°\¾Zÿº>ñC3ôçÄÿ³<t2 EœæßÁ¦§"ôwÜ^p ¢ýªío¹qä õk7{xaF|òçþ1G?ŽÿÒüðñÓGÇnI€+à–@6<ôfÌL[8À)}`k@wy7ý{o©ÔŠØÅ6É…\½=ää\ß_bø6 ‹TÕYÐa1Š]Co˜&` mñµ®|峓þÙé–n ¹h†÷0Õ\«€xÚrD€Ä´É·¨£Vµeµ4q¼ú(ØšA„5vý›o¾}”Þ6W²Dhý(ÞŠÆi]TߪÿiP‡š”wÿoµ“Éп%ôß‹²×Ø{D’¿I~¿”ø’)æ^î‘VXBá}ضOþ®î×ä +Ýx‰ñÀ—À5E‘í4À‹Ò$Ž[·Ô+å‡Öƒp»~~C Ò«Úy’¬‹%ò¿slÂÞ굯õ¬^l©Ž¶¯ÐÉÔðÝž%Ü÷ÁÃã5€Óƒìd"€_=õuà5à1™éUP ¸T$ ¸Z}>—›Æ?¾Ôyäa?›Ý]»çp½E)ØÛ•°è,È"?]æ•¢˜Ú æ@øXá–x¶@TGùëÌ©˜(TµdLžÎø?ÐR ÀCI©äìb@àñ2Iœ$ø-ðOÀøÅÅzbžì¾ 0ÿ€”RqBÍ=†g¬!ºœ—{³ª”Mb±!8 + ÚaÄ + E/û¹<[PÚ³#ÒÈØn8µº§`¿«Ëip:ô8¼>[:Ú%Ì¢øYOÚ¿¤Ì©ò@z³ZÇg˜dÀ‹Rß"´ürZþk„ç«ÈûÀ Æœµ×Ór«é1îCeË“ÿnôe“…f\ßàWEC;éüB¨»kÄWK#Ñì9øµ¶õ8Eß’ý”ãY°»¥ÿ]ƒ±×g©ÓJØ}ò]€7ü‚CÁ)U¼óñ¾}üîðó£å~é{¢Zû7$Æ@‰€1Räåe¢šxÈ=ñ{\ @ú pWû§Å¦‰/“œ’”5öÊê¨Æfó…5NcõS~jÉ™$@¤Ïò?¸ÉÀšqÀæʇþÖUsæ ¦—î¯E$jlò·©¹ËÿI´0aR—ÿÒÿ×üo@et…Ä øô~ Æ×«Ï2P¿•%õø¡€ƒàz–¨ëã5D7íôlû›£7¹‹t*KAÒÅM¨&IÂÆžó÷.Ú;¨7~ÅÅ¡À×ù£#tì_®_EÄÖ÷{>Hàú‹.’äÂ.@Ñtä m:oÀô?û+äÅýÈ›6þä.Œ7…ÌY}ÅBó‹-4f—ÈJH!uœ¼» ‡Ù·ðÁù)1ñ9i_ ®þ6N>Öçßñ;ð`¿8± ào‹Ìí•Ãb õ½5¥k €pº É?oÿË +‡ÓËÀˆ·€'ü˜í¤õpÃE´nó¾»ÿåÅGHªr°I8 +à?T\Ù¶£©DìØ£#âÊÈšã1ªÆ(›<âÓ¾ÿžgYSS “@w¬Ó'‡íp©b±õ5ÀRþò4ãg¸Án6_&  þ¨è_‚ ºÈ>b à `.”Sœ¯çø£§œvÏòÚåÚ¸ÝDãß?xypès@®†w‘­¯k1¬¯9ÎÞ‹&ú—“ŒØÎ; ^#ºŠîmïµÓzóGûžéÅÉÉññÅQ +„Ìl¹àK‚_–ùêW=ô×tX =ŠøH…|@8ŸÀrv ]¢æÔµïhÚr!œijÜE²Ô—c€èιÙåzkïðŸŒøÊsó"àçz­ )«Ò*Šóy57Gts(zÀî®mèj,".)ÐÉ·{ð ¶o=YcS³U¿Á¤  ӥŠ;[  ©×(ö‘AzÍP_ŽÝ« m³ÿ¹ÐH'àòçÛu÷)€ŒV|Úf%ŽXLl€Ôlr¬•~2XBþO|bj±½_R@·,€6<ù|µGò>yò$ŠŸè"zsXhÊÕ7,€œE¿ã‚42ÁW”90qŸ}TT¢ßBŒ]@#ByäÞ†X!¼4—}­û á”q`²JSí¡>è_×6)õcØýwŒ +T'!&ébuض©P}nA´°¶c‰¡Â ÕQ-öè÷¯“%BÀÔ‡lÇcÿ¢æÞcSk£,—&+(þ–ð™^Èúÿ«ÿoEüe +l-€ýgð=ì?Ï×ÄDQ"êO|q:]%gõJÜÜ(6êgN; :ÀðæŠrr€²Õ§$u͸?GGÚ[9ú—Ò¨„:…×¡ŽŸé9V€jÿøäbqä§ŽW¿.WËeþ(´^ÿ=k…~us}D.ßnøE _\ú81c¾¨æÞ8Ÿ¶-hMŠ÷ ³Ý¬–3øä\ÏÞ’ä¿,ƒÜNÛ‘5Ë{ÿúgྀ(þ'SÈ™³©™†éϦ˹¶ üºÌcD¾<ÜC<1Ÿ´Ÿ¶(°g1JŽœñGÔxhY*÷À*S_[õyä(þX Š‚¶.íÐð¶"`š(›¥[qŸ­é/Ý˧(þ’2¼Õ§%6ýe¾°uJx™¨r«®º™yœeû®’|Z¥ÿ{œ!µm l"È{9\fŽùôñéb±?” ÊL7<¢7»§e ýÄì ù ûe ½?iÿÊžÃ:±º àY´8ᜂŽôS€ˆɯÈÏôÞäb•Õ£¬X+o£+÷£ ¹±Æ]_¶lµ ÛOLÙKÎ5ÙZt踷ȵ{ë}ùºþºö#à'ÇùÞž÷<\õa9¼:Ù8êŸ޾öá¿׫Ós_Î÷iÓ ,€è½ŒÈá‡X÷#€¢î±!b>|VVhõ›Rê9ˆE¿@|š[©t2XUIد3Ƨ_?ˆÒÊ"ÌèßðÔºx}~è°Æ2Å  öÿÇ@À{µ}@YÚ±Æ,€Iô'9!–4ÖÓ}¶›¤ ¿Ì l ic6Ñ_&¢§hðliÓT©®&xÝS"BtKŠŠ¢ÑH9 ¹¯°ñœ¨…†é|¶üžÉIa2`àR“²†S`¥™&“Žî(âdðÖi„°CìXC ˆÑ1³¢ì“=è"0ü9OïB˜¯êçòÔS€°'W+A£”õ2Ó=º!£r‰7yìI,Žü`:ŽàZ5qå.êKìÌÛ\Bà–ðÔ¿c’âf2s<ÞTaòDUn/{ëÍú_ë¯_¥´Ì®yA¯µ ë[ú- ¤ïá·*ŸÃW«ó€\Œ¾rÌ D›³ˆàó?,€tJù3îAg»Z0ÒB2@H²b~xî[·=Œ¦gàüaب,Zøà£!p@˜¯ (@ìÌÈIìX b-üŸ ½%_ Y¿Mn{Â)§J F§¥-€¶õË †pYqÃzÿ—»D|ÍÍm&*Ô»²¾ˆÞ[~£¡^ R³ÚB¢†å}èó߯™96ô³3›?Ú­úyh>µ›Œ¶Gù9‘*± NE¸R@á@ÓŠœJõU¹‰KXIÁJáOÔëÑ/¡øÎ²Eù¥¯vPA¢!ð®°ƒÎuk `n4<µcNޓܱPàx¦§Ž8þŸg^¡\‘º^wFù½G‡‹Å}Ÿ«¸FD›ã“õôÐ|ëBþÆý–ß=°àé*)T6ƒ¸>%WEEŒmoóÕSÛIJWdLÿI•¡û¢Þ÷pX]|9ÆXð?¶/ëÓÓÃåÆy€¾|±± ÒpúàãÇ“¨‡ÝªmmgÜH€"Ä}èl÷ cî*yåS‹$ƒ„ÊÒi|RãË4Y% ±(Ö »cÎ’% |F(ëÝœÇ9°Hö»@$À$f°ž*6u}úÈù‘•ó -…;í¯@5cb¼ÜZþûÛÿùò¿jðíPüÒ„öèøR ÜJ™Õå«¥¯7(€p €f ì´ÝØ ÈûW1­HvÚšUiú6Õ®U¢[]ïC€jç–;èýOj€ÇH:ž†ë'ý»b€–r].ád·ó–s D¾#:ò?<CÌ-€-òµ?ÉÝØ±–±ú)€V‚Ñmøûs9êj±aU9ÚÙ_? Dç{±8̨~ƒÃ,{+²Á@$ĺO¿ð0p“H{@O$€1 ¸Ï[ì}_¾öœ¿zEO`µf#â|u˜¯}èúÁ}@h}½<Åî\CþHˆó͹Êq§ñ£E5h)h Ï;µùSiÌ®˜q*×½˜Ï¸cè‡^H€Ïê{Y<ªÓ÷®Ç>%‹ç€[€Ñû“PüŸ,¿ œ“¸m(n“ Šv÷áã§|«¿Á Ex‘êä¸~¾Z¿@L~ äÿçKVtE+]œÁã°ZmB}–€A}BŒ˜ú\$ïw2b#Ò Öê#[¡¯§Ð2«µûÁJe€F@5oê¾*ú§a[\VœÈèžÌá4ý€zže;ôUë5ñ:%Êú¤Qî„Yâù³gÎà-gìuASyÆh1Òÿ£€fÌŸ,P;ö} €;Ošÿó§j~C„÷ +€\±o¹}[ØÀxå­„ìNæºg¶°¢!G¹T9’Óx,­<öβÌ`®J1ÇÞ¿þõå_ÿúJW¾ŸèGHzù¿>9ûB¢/¨}±Aé#·Ð ‚Kà‹Ay+ˆ¤k?z¸äg`Žø±aÖ4iðî¼,?é]Ê/Œ¸…ŸY>v¶ûŒe8#Ï"É&¡²C¸\B°P›ùœ¨çè¼ÿd>Çn[J†Dµ ïkPg; Ùﳦq€ ‘ŸüU@<“Y”õ²¦ä“?/} Ø@búrp|@¹ ³°vÓQ§ã¨amCƒUP +'Ô/ñ[ó—qТAÎê$[$@,íÿ MɪÊÖ,3Ëk7€æXOfélQÊøzUýôAš½§'´@Iî9FT³Ø@§TK Ûòÿ¨žàuSnQºHª‡ô Ùþ•S°µü ÈÞÞŽ>yºX`ý´ðÃ1t¥òúhÁ(-ê=€ú‰nå²Ú‹ +ô˜xA5Ëžz Šì¿¹ïQ*ôÀ®Øã`2%©×²öºO‰ggÝ[¯ÿÅ‚]_–<¼×ðq¿ ´:\åÇy?–NV\Ùeø‚Ï~½¢ïw.ì¬Cr¼¶óï·EY¥h +À‰áG1Aêúüéó‡ÏŸ:Û=€4eȨ¹PÜM u_ã~¸Î>Õáýd$KÉd€‚Àì®3 "€ÃÐëéߵʸcPjÕ•ýÇúm +€ºT’®J†"q¢ï3øïCù_€ÜÿŸ/è-¦y Ç6yW¬ÉXÔŠí½×ËÁ +ÂÀdÑ‘žQÃöœŠ[Í\X‹”L”ý€£ªT‚¡ST•±5ôµl ”Nžø¹"ŽSwg±êš!£v©®u@ì×üš©akAÚf_ôqwFù’ò‡¨ä(ÁÓ'OÁ“…îÓJ1áöáAT¼—!¸3Àq<ÛwHš™@5P¼÷r•psãE°ÀëÂzýâóŽW×ÓÜŒ:zGìb”À>n•“ŒîzÝûú/ ‘oú9#@ÝŸÏ{º[ârvWÎóYýFÎBC‹`¹ùb¾í Xe ëv O»3>!?;QûPÿSÉ€ý/ú÷"Zó¥…;@X–ž?VB€•ðòÍ `g À}²åâ·SJz;Àο×صZ伬K¿xç!~ÈX„5ä<»¯|Ù_þkñ—10,€Â[¬ÑƒÃ´B}ñ6€„S+ —eñ|÷¢Ù—)8;N_Ùlœˆ´Gã5þ»©·¤¡%×ÙïÈ`Ekò§æ¨ujt(¶ëû«Ž&ÔºÞ|×fÈaSRoVmåš¶6k¦®†ÃœþÅwÆðº±ƒÁü¢zØ_r`Ânº{|¦BåÓz÷?ò-اiÅ{~)C @ç~˜}Qv-€ƒ¥Àö)À5þKÿ’zü•ä?ÀBƒ\2yìJUÛXQg?0¤ÃÞÊ =µ³¬-ÆÛ€éן¼:Y½Š5ÿÛÊÿ@µ/‰W Í¿\¯ìõË}>Ë×Í«Hy_!2Zp²|¼÷èéãÅ#»UÓÌÕaZvÑiù´ýL“p>šŸÝg}¬í1Caì®R2ôýË7T+m°î—pÜ·Æj0€øÐ¦d@¼*ûн{?°j pŸçràsÍ3NÀŸ’Ò¬Rþ¿Šö +€VûÃ;@oÔ‰–Õý"—#»6¬YV…öa8|g—P‚éÞ°qÙ%l£„…´Õ•&lZ¹Öª Uþ³¶Õas–ÄžÙ¥D…ÉúÚ>D4¦»Ìsç˜I»~¨¿Qv„öÖ(TkžÑ¡³‚þØä»F@à®¶¢úp +»þ•âÑÞ³g/öÑú5ž¢9¤M«mï,©]åîS€¶j ¯ÔíïOÌÏ ûk²¿O÷¨4û +\Ÿ r"Œõjq°yçä&œ]çs‘Mô¢zöEüZçØ«sêÀ]úÕ™ó}0b,ׯ= +Å— +¥ƒ=~ ֯˓WÞZ9QöúÃ"à™g ø›¶ú˜òuÿásT¿;Í€Ÿ?ÿx ÀçÓSÇØÏ,€Ä‚¤}âÌ‹ûKþ•$»cJÉÿ)úŸ`²Kü’lc  Î-€­ °Õÿ©!g¯€ÓþLDI3_{`•þTÄNú‰ûÿ> pX#R±zãÐN2—Ö¡x»,EÍŠdŸ‘ÍþÀ×xÒyDÃoÙŸó¹ÓÅÿæ ©- ¯ESªq*ôÎäà:–œB¥Þä(L Íp˜ÿ¡?ØÇpÝ1v©=^·þ…‡H€$¢—ñ|õÿÄçWàßæ—p»n8@Çlû`2& ý%/Yd€N2 +*?<š>ðz”òŒ«Zg?à›Î'°÷˜N×íÔ½þm}ý롯ý²ô7[DV¬¯+°Ú¬^;dp ßšæÐöÓ¤e@ì0öCk~$.!§ñ„~÷­ÉÈáª4r[ ã3L2sü§ô£5o €¹ÀÒ&À'yá½ú?;òÕ@ꓺ?²Úh10u.¬Ã ûÏ0|Œð‹bÖVô¯— +dü]Y·€ íP FËßãwi~­OŠN$­p†LžÜiÑ“ 6YAJ^@ë³S>¬«U߇þ³²3 ,¶ž2×7üaÊ$ód:VX¹¦k1ªé_èÀÖB ¶Û4'|ÿ{´NÌ#?ôÈ P,’æ)ÔÞGê–ЗÆ+¢6åŠë€}©üuðdH{/0×¢}:Ö3–Ç©ÉÌN!bUØ–À¡˜m ‡¬}™s›pØ™Ú"7'A¾”BtÞNêÜ{W¿¹\Û}/þ³ø-3ÿð­×G‡P/,ßø°p,_¾c÷‹@'«eYeTÛ–µ6i)ßqäCi~ŒúþšEGÊᆉn»ôÐÎïŠÑXÒÈR‹eq+Š´>]+P€u›Ô£;ïTnº“³áüÌ µ9Šx£÷-ÀîÒÜw§þÇð¤ªZ„§sùinøÐ?cp[o!{bJì€WÜKô?6éÁ²ã¶@X®}ˆ˜ýð‚€ylPՌɟÇñjájÑþö!mæ-hŒN<˜øï¬~KJ¹ƒþnV,½«x뙎‘Ì£ o¬Ÿ%|Pú\…ÿ6øe´¿+Š?kÏ÷»ÑÍòý@þG{1àÿ#úâ4a¬Ô°9sJ‡ð³HyØÅŸ5 Ø¾ åd]]%/n¸Ÿ:,€H€t7°ÿ÷¨qqh&ª°§£K&ÊcPL^Þhèw1;°ÙL/…ÿ™ÓsÃßYлÉÏ—¯a¸îLÀõzÿaþÁLf[¿>¶-€h׉>(LDˆ¨GàXÑü>æÁÖñs·¼ïß^Ê- À¢ ÈH›ÃÿvضOº °ó.Àhš|%z `»€Cåǘ³Ÿ…È–Zÿmÿ÷Y@¸‘óãdtáÜð¼=ågý/]Øa|:ÚL£Ä¨Gi`ò-lšXN0c€¥pY+¾] ^&sš§“È®Ãwµ+óK¸«qG›u³ÛŠ»N@ÀS¾îØ·¨“è|CúP;•¯–h:Ú©•5Šû“À^+@ ¿ËþìþŠ$°›@¹ÓËCÒÞQ@Çã” ßCÊS¤mâ!âŽA›P?.üå'_œuد ÀúPÖPBÆR)p€I d—_0AÛá(ÓEΉrm&l—H­™ƒCOJ >‡»ç™ ¯ÑûÎêÕXŸ¾æÿÄJWŸ:ùèæØ—ªëðåìÚ…^.ù?ÀÖ@»ªE‰“&eqÛ1v/%øüác‘½œÉeÙà† +¥¶cáVãÝcíúKôíá›·õNž¼ïˆ'Œ­§±ýµ²íŒx"øõÀÿ[ˆ àfiXuNVšßû9+zÿùÅ @Òãp¥žñKí Àpö¹ÿ6;î¡]ÿŽ7/ÞläšFµ+ôrο<Óàn¯±ú<>(I|2öüÛj‘†l»¶a³m‡(‰¼&R5Ƴa±¦q€dVêÑ: O4nª\g¨1Ö € Üßì~™xŽgÆùö>Èü7™“~ò²PðÄ>@,%ÌÄŸð¦fúÅ@5ËPO@Ï:¬ÌËÒ ³¨vÚ(Þâ·àå¾¶„ÀÞÓÔD ÐÝ žHÿWP; ]‰p×{`äò»¯D¡ˆžÜ|ÁäWH”Õ}·ÎfiëmÀz0¨©n²ÎæO«‡VâÚþÓ'ø_@ `„bæöšÿím EÅØ‘Æ!èj«7uz `kÜ(öá~«–|kG3&*„Äs‡ÿ{šBöO'Õq‘væÄä!3Hù²‹Ð¼Y¨þK0lË3nÊ+@Ya"är ¼†a’L%¯ðØXŠ¢îCBC!bMR-Œr³ïo;Å´>=5î»Ö|)P§Ë´â S]u©¤§“ä´Œ rÙáSú4ïT8pzúl<PDÔ_4xØÞö@¤AŽèý˜=ó~ï±2 ‘ìФ°JÉ”‹Àeð ¹>±;•ŸÕ^Á¸`×ÞD3K]V¾Ëúá‹ãàùµ"&€§ U¸µä.§``ÐXI£e@FîÀ·ù %èA¸+y±tØ â·r`©%Ó§4u¾„óçù¶Ÿ–ýoò^àÏò5‚í•ÿþýÿa˜ +('.þï+_LXö¯WÇtOOÿ|w `X,(?'þúA{ÿí„ý8a˜ýÉeËŠÖ¥”²ÞAìp½i6 þ}ÓýÏþM%ÿè  €Óß;‡ú ¸ŸíÃV¦HM ÷Eøù÷€½êØùï'Ÿ@Õ¯èpÅõBr’·ÆoõÝŸ¸BµˆR:õ¹J.FÙŠ¢—œ‹ð{&͈IB\Ã$‹uÓ"àà7ÿ#@í?µæþT`ÿêì´ÞHr,Ã)¯j ÖÀ®HEëüÃî‚ßµ€Œð!„m|®þ @R×ýr¯sÎn¦í>zñè?ŸUhDÅüT +Ôìßù™Àá>&óâ +ÿP…]ÿòx©=;ý*ý"ÿ˜[—Xx§A†D–T8ßX$|ÖÚŠøÛ1€oHïa:r¢Ò$Ð1=šÝØëöÏTX72+Ðáì8m¨;õb7Æ€ó€Që°%¯¥_¤^Çð‚Ê+™ú¼òõà¼>Êx½Ô@žiÙ3 ~Es*´ÒïïÞ¿Ì× Ð¹,¡ÐègE`èU RF툸-B¹Pe@ €øŒýyÐADÓ)²wì¿ÙodŸ÷fÒâ/§‘ûÝH ²¬]þc|, Àè˜AH@a¾ä÷_5h %@ @<é%Ô?]jyÒQÎßrå^ÊB/$@ˆ. ㄊµ'ÆÔîÉþV ùÖÖ Pq-`üæWÞù-‹#]3u7† ”>Åz÷qûÍ„Êæ)LmR›ølýj[šo´€æÏ~ùåÅþ‹_þñìÅ//úo?ž×[ÁŸJ€G˜þ¬/& àÅ~kù³åÀ9§àü¨\]¯J~rŒ].¯à™dûŠža>˜|%ñ,5é×üv–BÑ»2à×SQÅëì;ÌÖ%&<íMhZÎT¹å¨ð£ }Fðå_¾¯Ó °°>_æçëóÓ¥ãQù™¯'~×.Z¤Æ­þœ[ohúÑã±0¢ôe¿B "A–G·|z$ºŠØœ2•`“Ä;€ÿƒ-å\JG@)þ—% BÐ’øPÚŸ³}–â»È™´ðÚ=|rŸPXý›9ýáÏŸ3Qº,,€¬yü/¶ü‡û/Ùžö/R Gÿ;¨ÀýÞHú±…b@r1 +XÁqT±ÐbÂläs¥mf2Ðõ•Jm&bâJÇe&§i¤ýPB2º¯µkI=–ŸýX;0P'9âšö¹þv}ºìÚ&¬ÎŠ¡ 56šÖ¿ÀóB/èÉ?¢PŸþÈHAwú¦Ü‡Gþ[HžþM€¬WDDöœbÿkƒ¬¼Euíû¿5=zÑg‹eqyËŨý!bó+£³û÷r9“I\Äϸ;…,x;¤¯ +"߬b}žˆÇ:¡’:²ÃÿÉeµï÷ÕŸ÷/ì@?Uî'@ŽYNœ¨AÀZ”oPŸ¾úršyÇ +€atÛ®—ÞµŸ‡kÞ§ÑýÑúZeôCrW©_þ ²„À›—aV,r¡ñÞõcùÂÞáËK½}óÎηÖ÷| à£Ì,¥]Ëþ·x{˜ÿ¿t0íýòé@¦ÿXаx¬Œ¾ Â1ƒ(ÛÁ +€ÿþOÀé4ýK¤1–Gjn*·²‰ØÜ“^½•8Úš]sbÓ% k$-GÀfSì´ @Cò@ê4=Xgö–•â¢Þƒz 1…ÏÏ‘pNxó»ÿkeõ߾Ѡg„‚ÐÿjÕõ/Dsçî ýi<×&€ÐŽéeÀ° €Ÿ[&ÝZ%Â~®p΀^ð"³‘úJH}\YâkägQœ-ò"¡?gÆÿ Ñ98Rܤ `þ䪬c:¶Hžï-mÓm[‘PnA @P …¤Då\‚=ŸX^oÂî‹ÍWÀ‚-VQòÿL²;J¬5wûW\,³íŽØa–:@; iÃ(GÅKí—hú£%· “ùj#×°d‘E;ý?|hæOÀàP,‰‰ åñ +™Zâ û>¨Y@c¡dë*AÀ.p`7¥]h^Hõ[@æ|üüÉŠGàP‚¿ªÊÒh„ó·ð?f š)̸ºòn+7Ÿ{ +±†Ÿ~@(èÚÔO„áïy/—‘êáM € Î ÄðM]’1V(a“%åt]XìVˆ?R{UØ©Œè<9 ÿù%ß®—§öZ[âd¨ýì*Šz@žû'~™¼÷Œn€=‚D°J”%~ ‡LŽðï]4¬„î’àgk´ú—ÿ¾V‹Ñ%éÿ]ý¦ê]²¦±7Å»â2P!Ãù,XhŠ×_°€¨ô‘J:ro“˜hÝT`´È§€+O<]¨ç§ªøÄ=:ÕR R|R[ÿú.ŸŸ¯N.οú¢Ÿøvýëz}ˆGàÕ‰_®×“?°Æ>¨o)Ö«ÓtÇx„c7Uy™i5‚FSÇŬQý¾P¯hD|¼7iíJÍì-,ʨиÐ" y¿ZW à½ÂE3$Éd~íñ4û3)È“ÞAŸE €æ,ŒÄ¸O¤Ø¤ÜO83Ï_¤C$ Ñy@yÜ÷?Bi>ë ø+Ü¢ým¤WΙQyäö‡…M(ö»$hDEÊÑbŸÜë1¨aYM›ñ-Ô!Øû•´°ÿŒd Þ†HÚïõø@¤äF΢|ý +b9DæÀ8·éXʲjV¬ßPie¤ýŒšñ¾·ÏþâÅ‹ç/°÷±Ü98àw|!#Šþ?µ”~ÙOÊ‚Ã~ÕÇUVñŸaôKú(êk_Ço}ïËõÒ6A#2x!é¸QÙYq +ƒw¹t‰uŸ +Q”´!WñIç}M‰Ð“|íë}ü Ç_‚"hº+¨¸˜œY%©j¼ÍYö<'{™ü[´~lþ¯þ H«|M~¢Çpásg Ç¿ZŸ¾ÎL@_¦xüt‘‚ÀÐ˲¸'ƒœX##ZõÇ € ¸´ÏŸq@™ïÎî@žŒ3¾Ä%¤ü2ØIü—"y¯ËÞn»Ï-ðÞµÂýª±Püw…€%Ü':¤ìœûü–—õÞB®(æßêøà)Ñ44µÓÒoòú´.-À æÓØáêé8PÄKÖ±AB‡òÂD@¿Ô™~6úRzùLÝ€¶õ´@+%#õZ Ũë·ôž OuÛdÀ1DO^@Ã]ŸÒÌ|1½Ë#Šx§.~ €}˜_]ùÌ!Gõ5šÒ}OîƒO ž+$ôgÝ›ž–E(ƒ–‹tjüóBÕËV(«‡‹/û#¸~µ7 # ¹¤@ùæÎÁìk§µUÝúN\»lUÐäcåµ/ñɘx÷p(šÔþ£€‰\+u¶½õô?*_^·ÀÂg^_Ÿæ`‡Ž ¯Ž7G¾'TW óÒu8ñ@>$èÔ‰E ÐÂmÛe Ö–+m}*¦þ—øØ>|.âg  ¸_š_¶õ.RÄ¢óˆ°h\(P¬o¨QŸfàà37'¹û¡ý"Rþïl9ãßû€B¼t (ößžÝ]|PdÒP°]ú½òC—3H|ßÁÂí¸^c´–L Ó€BA×0 Ne?ïw—o +Ï7É%bµÐ€L(ý 0‚–ßÚÊ­ØhGJ§ƒa±™}Ð4×7ÎcDÔŠãIt ª%ÚæÚoߢNÕÁv^³¬Âû»ùPÓ ý¯ð¢FôÇÇ7AúžÜnçû=I®fýiøàT( ý€ˆG5«Ä-þ«Â¯¯®–~¶éØü’€ìkQ4ríòcqü›$ŠˆWGf=JO!ÆÓÎ,Œ×ù7ºÎ/ÀÔóOÊäbÛ[oòE­€¡¿9î±ÿóÌô9_Á0"@Yüh|´m`Ÿªéõ«¼ ðö?þ[æÄÚOó–óx Ê&¨º«õYå=âð™Pé!ååx¤€ÚðÓ>)®ŠßBfm-€‰5àåûtÔÂï±FJ—ë^‡Í÷¡‡õð>«Žõt õÜNý¯ˆþŸyKtÒ-"V2Ï1'øÉ°?‹s)ÿ߼̓ÒI<ÍRèß"#AFŽ JuÇY¿«HÃ(×ö¸·ý3µÛhB"@̰Q’Ðfhåªâª +ÝÖü¯Ñ*@š®ÊìnÔ6T?ኪ瀽NÀH¯ØDÿGúð[%$~óÿjn8f7uÃGìûL€­@l?áp븯Xºìg*êÌ/u.=-‰3@cHS€þvKà—xÅFßÐ.xm½S9ÖïGyë´Œ3ÚprÖá„Ýו™PMëJ#]BÉÕG<Ïl#g  ¯}¥ VCÿ“åñf)ÁÕ—êôÓüDðÐø9æø¿óöèÄX<Í7U4pZ9Jó–©p צ¦ŽM÷ NFÀ7§P Dï™@æ×(Û_íìèZ–°‹-äŒÉ^^’ á’Gñ$³×Ôvט/9gg.½(P„ë;´/o–.g»vùà€?¹*² ÷ùlÉÎÐ_:Ì/Ïø%!$Εï +ªØbº…ÌHÕįð%îÉ<ã¨dMãØ)ÆOzRj·ñ´ùÇ–ˆµ‘‘m[a——j¬ì*‹¿@ŒIrxï™xzÄlÊü°‚Jô1#uFý×àÙ*l€âÏ ZüJý:>xöçÀ=pZ.¨éùN¬_.ç M¼$@#JZ\1”èi‡r[°e?Ö]]b»†µE©mQÍØ©Ï”î+Öã¬ðÒ· ôP•„Û³´O°N·f'ðuýõ_8c>ŸöÜ`Ô€¬ÏðŸ@z:žGëõæuY`sLKÌQŽŸ®W¯Éí<€Ì¢^ìiÿׇ÷ÿ‹4ÒBÚˆÐÇ á %x´,€òâȯ&yTDªõÀ/lŸhdH°Ò²f_JÙŧž5«ìWîPÇ;N™ê<^ÚõEx×xz™Ê `'ÿ­×jY8 Ë.xÆ XþÄa?Ùyn€±†l+‚v×€Ûê£ÕgpÄjZâ‘yeÆ7™•66TFJÕ†[ª¦fŽ˜‹"döT.ב69Vý‰èsiD(ÔI×)¥YÞ|;»ò÷QS)ÓBs_hóÿBw?@€¤ñ\¯!ãÿްWt4È”6]ÇòHsä*Ïíb zD :-Š.e€ö.®S¯Øäd곿uyä0¿5×¹"ãK:=‰­PæJTY[T®$ôîE¤4W ¸^•Pi)c*'ó®uTí°ÃóUñËÿfuæ›Át +côëÕéruz²^]þv¶¤K°ô¡éé‘™O@ŽÂÿ='…¥eHÉ`{/F乘cõþÿ"îòÒwLT ²ï°²¤€³ [ÖPÍ ’–°‹˜Ø/_–p9,O!lL]>¬/ø ç5\côkÞE®€æÿ}°´¥«ªçþj+¡ïo¡ Î®Ç ëŸº+!ÿŸ>iyPw°ï-m1#FÜL¸. †M¤”ùAÈ801/ Q¶ Ê-±B ‘Úß1'¿Gj$Uè3@0¤ÔB™® +Œ)-þD›ÔB©ƒÕzê'Nhò‹GÝýÿGÖ²†4˜0@èüSÜM)ðôñcM§ô ¾¦ ò²ŸÈx@,G-ÒˆôÑNMÚåBãçZ£šÉm²`ì*÷•ˆº.{û–c†Ü—“<\¼<U«L³[s–ïß÷|†çD ²4–çëU ÄN?ìÏ4@ÄÆ  Õéëã‹‹ÍÕzóÅ/„gâÀ]€Xj­€E”'ÐnFóŠŸ?_K +"¡V1,{i#Ü7?ÃöäßZÉËø-,w÷Eácv²_*>£zGZÝ™P.…:Û¯¬}O«Ÿ6äì´ +ò@‘«ö·Kï˜Wœ•È ‘"©"éC}œá×)Pž'OŸ<á.zïr‹oò_q IÇðMšCõB¸ÒÑL¡w¤IÌØëM)Ú~ºÅè)ØÆh_Ø©ôD›× ¨ÊØsȹ̨1AþMŠH1Öð}óíê*úkÔ^›­ë庽~]€a q ?²â¯[3xlÄ-z.P†€ƒῈt–§Žõn#.ŒóÇ•oDÜ 4%¸Úüä07O²BeŒ§œïŽùý~‹â{^¦H\Ûåµ{tF¥”*© +ÞÆwé¾½£xQó%ÖÚHà À—¿;'èõ©©òŸ +^ù8`ýe³>¤—pú ê?¢ÕÌc5„g›ÈèÜ M©~E€ŒÖ’šAÊ ÇJ)©tñàK½m8϶ÚÞ">nÇ +䙞è:‘’ÿœUYÍ,7dü’ÞÚ¶ÅZ¢¨ñ§7üù¾Q±pž¾ø?Y²Þ§˜0_úðæn.–ù Ÿ­eèÿð +b±oÖéÊ®x¥\Žã¢”‘m;¶lÆ´£$cI‹´QücØÁ#á­%»oŽש²Î‰ g”3§YYñS…N*‚Ii¿Ô1[`òXë¿_žm%À‹}‰¿ÿâ™S„ÞCLÑÿÏùo +¶Zo#Ÿ~ü8`q ¾€RÀ×¥·/LJ?¦šÁ—iˆ0§?~EyǺùþ zÉ0,³«G#Lwì žÁšøšŠÃ;Œ\íx +ß÷6(p0,­ø|(¸ÈȾ¯–æ÷ÓÀ*x}Ì™àÜc„–ªþFèâH`hcå-ŒU¹†Ÿ>8姤BÖH6é#ÜËéòK¢·é##K9m¾kÈXÕ¶ãl¾‰ÿáóû¶ +¡iœi +¸ïF¾²LÞÅ4‰`˜÷‚[ô²×ßâ.ƒžnªywø2¿¦ ¹çjßJd=´éo¹ ¼MÉ´‹¥ @cIÛJÄ@'øÝ[W"¼aóHUe^9mlšƒ•J?Ñ  €í)Zb+€?iÖJEÈ¿ƒpýÙ³îë·T`ïÚqNîìLúãÔôÊ Èˆ 2À¯9SÁ: +„ÓÃ¥/QØP +(Ö×^±)Òãð×á½Y^Õƒã“@9áñ‚¾Û&¨hÜö4$±ÔÍïø:ŠÈ” àjŒÚ˜»NÀ¾û ¨WúüîÇéë³ßüDàÀ ,¿ÈC5)J +àžo¤}¿D´^.³4;\ììK™Ìh]z‰Æ÷Ù ˆd6‰–~€žû@A¨|™ÿù֢ȓx5¨U" äOløÆÛ"…^^š(OrxŽY BeZt"rjø'þG%ZüØø@ÿÃB]®N®ómà£?÷p?3…ÖØ+%J +|¹^Ÿ÷‚Vçf¢¤ã}ÿBA,÷µ a-Ì•‘u*£Ô|E 5kh] ŒMŠÛˆºÏÁX +€Û‰‡¡}K»òšoÿé1ÎÆç Fãš&KRW.…Ô dI½a3ý/3}BÏÀÞ-€<‚(x–±ZÌTÀb,(‚`†)@eußêþÝ\ûÜ™û.²…G3Ll«©¹[òú>¥wOs¬’o6è IâvQ•Øb ln• >o†×kÀñõlë}´w%eh N¹!¯1ÍêÈõ|)þRýÙU¬‡'ð3j›ÊãÂþÆbÏ¿ YøÍ L,)P¯-Ÿž¢ÿÆ”a  €¨+çÛÔš{—p…˜F궪¨Õ䉩ÍLÉÐ.{¯~…Ýio bR.üÏ­¢¿—\u³˜ï{¾t‘‚¶ðmŒÕÒ¬OÏ×ë¯ùs`œ¯?úZý_}„› –ñ°>=˳ÃW¾ XxNãÔ@ô§ÃëRY𢏡ôÛwé¡wÚ(Ü]RO(0YlåLhF >ñÚ1€.5Þþ31ʧî%hPÍ-XYdÏÛË—ò+Ä0×kýq Ïÿ@™y3z+R€çÃè¿ïðîÿ¾Áжƒ?EÞâŠm¡Z¡dÁ7q²{ßTÿ·BG|£Ù_G¶ † é°FÂMMáñÖ·Í[»lXO¼¸Ö[g˜œ›t@Ïú =‡†~&4ÝaÉ€e+<€Ø£þ+”Ž!P_ D +øúàr±ÈðàV¯Sà%ÎU+êåh|«g®¹šI"}YË©Ä0I¹\Àöe3ZTĈô¿ù.U(Q9¤g†=­ûßV«Ÿú°zÝŠQ`_`ú,P?4‡}ÿtêe@’žÞ¬ÎŽ_g& OX£ñ%6”{r(‘Òä C©H©dÈ]x@ñÆÕ|¶ ;'  PKü°[ãòय़¸¼,pù_µ›#EÍPç]Þ¶æc3<=”éŸ>±ô¹NcéD”q‘­é¯£ùŸHܸ}aãõ*G‚|§}e×<ÂÚÖ/H\Ø0é¤Ý`b!%£4Öh 8(˜x‹Éö-cQÑæõT*Q¥™ñUvÏ">Ö ¡:«äÈḢ +±Ñb°¦T¢¶ÇwÍ£úŸÕÇ?ž!ŠþC Í& |.ÈæH€-àÇ8ñöïøIÕL¼ºêó^¯ · ¿“ßKwgú¦—4kC? ;Vòi JL%ú`våp9ídØ66¹ªÖô#ÇöýÚd¹‡§ëÕ±Ì÷ÍS,'B¯®Tû-!0*´÷ ÆX¯Î7é7œù`X yÓüGéFÛiÄp—¥™{¦ ×” gJD¨©õ­Â®I¾ƒ·—.a\’Ä ®%À]Dëo@= Ô‡@ÓÙ/„­8ØÍÚÏý£þ,Ÿõ÷ýÒè€Â%ËìF”Y` 5SU"dßmL5 Y\‹S¢yU¦€žÞ›²Ç€" òMeØd蹘hRƒI­H¥–ixJ0ê*à‘pÞ`’ug„0äÔ¶xAý7ëØœ/òºn‡ý¥ò÷}èÑ#ß®Ø-ʵFoŽ=Œý38IàÉôtÀ^ïdX@à³B½§ýÃd½«ôô×mÆår¹îËÓW¢¸M[~¿ÙâÅ!Ð^÷I¯¬àxâ Ú,>ÕuL'¥({ê4j™> –žüÅêÔ9@Ë«Õy8¿Z;ª)6ûìœÃ_} +bïçpyzxâ @àbå v#ÊðmÀú*0*æi„øÒ_© äb^†sÉ~@†Ü…Ù·@Œò€`^Y[„¾—oQýÝ@õRAsý^$ß UÏ»X1DˆºÝ+ØÅøˆægÇÓ_ 0Æüáìø +Nç¢JƒîU ¡‚Its +A6ÈaŠíɨ&IšZùHe¤Ä«#aaû@xi:ºŽŽtú¤&Í)I;š2-'Ï÷²rŸS—QÆQæB¥›Ð$©ÞÚï =GÈï¬àýýgöú}Ac‡€ÖÍíó»Tš§ºN\ì=ÉËÁSä_è±AÁéÙ¸E`°aÇo•›ßk&€ó+ˆ+Í,C+­±‰$‹˜Í5J_%q‡RHENª«IRi·ØŒ—^ÿê´Â«õ‘Æþú`òŸl–Nú+ü¶¦×à³qõåÂ~ƒÞåâÑdØ¿éÃÍè,ÂÏtúGÜùhæ7B¶; ™œOy¡c¼ñ‡)ÔrÃÙZtà/"d>|zÿÏXÈð`œh/!(%XZ=€ˆÅHù½?™ìÄÀó¦|mEýõ¢s9˜,€·]®‡ô¥ø•£¾ŠîWm*!n»a‰%­`[« MzÉóNP¦áNÔ7Œð¨âL[0Ž%6«•Ž zRBÿ›0òd Ñ8Åù`{¸òè±Dš¬ ~Æl ³kUÏg'Ó3íçÙ£gX™Pr ø `Kï{ø=;p÷àƒ¡1€HÏ`q˜ç„ð»-K~i.5ÌËxGì/%6@zÒ5ôd’šv³Ñ.ð +“{LŒÙ,f¤I0 +c¢(&ÀsƒÀΰj +¶,ÒN@ø±‹†?¨GþëÓ×òÞÏ€.ׯ20Á|Sa&ë¶VÊð›!mŠÛÈ@fä” ¤Dh à6dÈ]˜mf२!k,ô`#e,>~Oñµº¹‡®õòp¼L‰Ú÷X˜íå+™`l.¿GD™Ü¦ÌP`£„°{×ö–Ëã`y°¿Xì/—'þ)øY)v? ÆÎ7‚Ãóµï ̰>Âx]ï +l®NëŸÆd@™î¾É`ÿið#wÙÒÛ¾[@{%fCzáºFõkçëŠK"ÉR¥¹8ö ²ÌSx…`¢i£ôØü—aø¯ÑÿÁ}…1¶°äZÚ°dZS‘>[-åÓíWd©Ç€´›jõX÷´´mÜ}ÚéúxíD·S±á±ÍÜk„ R8•UÁd€´ Ô~ÖÁý F5g? «TÏjû¼¹¾¦¥váŠÑ¿øY@ +ø†Ðþèø¥¯ cÒº¶-Áãk§ã·ÿ{Ø }þÜ-~Ÿì ¹%ahÍå,‹Š^ÖÚ 2™Îc^‹ð`®A“pª@=÷RVþ*øzU&v™ÅL9nq¬“¶® °$²Š]¿>¥? ¿Å‰A?~$ô·Õñ ÝRoÎÏ00yÚP„éJï  1Q²äãáYeȨîÇÀxpÎÿ Tì]Xa¾¢ Ó½ФŸÃèÛ°"g*Z!ÏÑv²àð‰6þj<šìÙüèŒR øñÍ~–²D—MKÒÛü¯H¬{áÍû;«2®»)Ø©±ËÂ:ަ‰mHKs LšÎ'¢œÓš6îl„À>ìyB1îKH²JoPM®åA1Gr†]uþAýQ‘Eè‚Æÿ£ç8_ ðâ…Ã[ Àü݈joŸnQ=ndiçÿ ôü¢€ ?(­ü:D¸7q067Ô-4çžy) 1ÂSs…¼]IŠk´GWÇ™€6³oꆹš€%Ÿîƒ±ë=èE$€‚û’ÿr}²ôoKœûOa3|ó]!€p‚¤8_¾Î¿‡ýlõ¡{Œ|•&{ß?Ô‰ƒî…RÅ|oM(•?Gzã@µßºóŽð3øIÀ².?¼Ó€þÎᾓj¤ó¨d Ùº‹ziï‰:lÊû°×a(â(«>àS‰^»Þû ”ïÉž·Ñè-OBPl*7áh\ÅæFy‘fP‘ÅÀDç¨,€©Æmþp €DœÆ”"е»u0©Fºô[k P¦»~ +pÅè éø @¿ êK€yGX FÀdÀi™½]åÓ ñÛ·÷höMÀü/ಪ¯].?‘;àñúAG;qy‹ÕÍE‡’¤¯¼§›0bÍ’«k¤}FZ +P®(ù}ÐA@{‰S€Ú:lxìÿ·°Z•÷ö èôLÀ =„Ì ò¯Ç–ðÿÕ°Rhý­¥Œ¦õÖ_\¼Í´›¹þŸ£Y?ƒÏàä¿^î½ÀðÆE ¨Ž7÷Ù¢õçè¼½kIáøö¿tМ7ëÿ–è1º.¹4Mâ¦sr=¢ßH[Q×Ð›Ä KÎê°u1Ñü}›À Øé(ÛãŒÜب©ÝÉ‘‹¼½æÛ.€ÿMºwà_£(.4üèßWÌúH¬ ðe 9þàU†WZkz~L À/, º´‡ÿ +€|•#vé·9”oã¿áühû€²œÌ_àÁ¹œþE÷ÏŒ<ÈHm>ÐŒ€ŽÅÈ{ãµ|˜ÇNˆðc`“p[¼“絟K¯díûª`@–°½ŸÍ›mXØ|àî‹<¶˜}%*"hC‰Íë>c,´†¤6ÁF6âç©âŸiöÝ=ðˆª?{«L0ؤ‰“Zû#ž>P(F¨G¾åv_—Ö[гLkd@ö¬|Ô”z7þÍÕÿ+ .WÊ5? G‚·¹V”¶Ž}ÀT*B1¼É£¨34 ±•R¿›“¦í€ÜZX¬NcÂ/±ûÈ,{yžoWß¿^œÂþ“³%=ãe ÖQñ¯#ÿ-¢üN ZúÏ éQ¸>ÿ\”ÓçmÂòüÝÍýÈdù’áJR@–¿`8z—^vºI¾²4þ™ð}ÿ6¬ á“GÍÆá³v ×µØbÄ©‡/8tDÞÌÀ  –¬l]_ß¶F5Û‡wt{WmÛ Ç¿Ñ£[ý‘ægÐ)‰²õØ”H~SORLP"BÊëD jJeoTŠBòoÊ +LPåÔ‹o§’hÚ­µçø|‘ÈBÿû,€ ŠJ×Lov'àâª'¡ŽŠû(;çRÕÿ{ÖgGgK‰ün¸™â!²?ê{,€ ãÈPiœd¢rÔ=1N2À´Iˆç9fJ½D¤¸+ð)€]€*l$µÓííí/N""èÎ;pqžïúÚß:[qÄ ‚ë=I€TG¿¾:Õ¨oªþE}Z±Ïë—®Ðÿ‡üwpâ~–¬y†(Û6÷K€Îµö&V¨|«/ !./óÄpg1úÖò^té9Dœ BÞ‡X>, ÇÏ$8úT¬Øé¼—èdOÑú[TlûmAÔ¬€»hH”øÃ'³uHuÛŠý@šÂïßuFÚ°®Ò ÞÑ4"c¢6AŘǀ¶Ä©£ºfHå½à$z¬Š@•°ÙÌoñ¦ÙA1º ùÊÿÙó€ŒÈþý×€!õŒù.[O{]'Ô‰ò+6×g××(ȃÃÓ¨‚,+vóÇyq××5Èñ넞¦ÆíÛ‡ûhü–gÈ(‹5aRUŒéú~e’Y/…Oˆ g@ `霞¼#¤Í­}Óáxõ娞 ØÎ/üKðz-H àõúxy¼\>Ú{õúI”æÔÉHàå‡^FÔø_?p{s¨e¿³ôšh@t§Ä®*~ŽKÿœÚ ãþ“Ò½ç ì,qŽ<°¯1€|èÇÈ€:W8ˆæ§O $È´àøÇŽèìá|¾'ÿaˆ+Üឯ}Ï»Z ºO*m¡+-Œa½Áº§E䀇Ì`K*¦ñØdb(Jº=YA%§ÉÙ;¶RÕ¯vr·|4²ìêyK ¢d@ÊÊ_Êuo#ýyE$.éÓK4ÿŠ_£€òÿù³[ØMÈVüîmP¿=刳3d—“ó}‹5"Cúß“$òs¹rYÚêùë<·Äˆ\ÓÔ™_é= Ó‘uÙI’ã^ç&2ˆ¶T¶¶Èj$Ñ&"¾°÷êÕ ëÉr_  }Í?ƒ€XÇ'Ëc˜}vFpíÇ#.Î×ë£pø:ÀÙzõšü&ôÀûtÛÙ'0öÄOÇ] ߸׏oXt Á~DÄêÛ%+¨À»Ã—ƒ:Qí?™A W Ø­  °)N˜mIµ»tíâÏ-€e8èˆ2è³/µð±-€z©q`ŒXt¼[Ç=« dôG}èÁ{߀leW7Õ¸×þq ÂâÚÏÓÙÛ̳8YEl¶Îo["¨X+Q@$ËßQ`¦dŸ¨ë!Ù¾Ðf¾õò¨Â«"©%‡SEZ®Ÿ9É'Q “? ˆ|þâÅ/ÏÚ˜þL†CøÚß^t*zZ»¶ '®G½r+Ÿ ì?ܨQÀ*KäçåZ–+jPÝAÉ™¹zpÝçj—O³~Ü(ã<±>Vu„æÝ(žžÔi¨¢Š+ ÀCy„€—ý!8Zþ‹3‚<®°|å?…M!ü>@{É”.À*ÿ Ô(ý,ghìã+;Žé¯€‰*üØQÿ˜ˆC$G%Þ.-:ØÁçHá÷ ÛgEæðÌ-€7~D?[küÍ–ïbœÐø Tôtýóü?äWäÕ ¢(?5; A·[O²·l‘ú’>a÷·]ßÌåv¦eã j>jrÀ±µo7740ºï +t³ Å·õzÄF¨\@"§¬xªÚÔÞdõ¨);EÜQR\P¢%>ˆ¦H¦ÔÝ›C8ð Àï‚ ükÐ6&Hò™;ÖZ¶(×–_§ü¾ñ}½?XËäß°ú‡…zþà­ãÊo¯ÿ°äh*×ßÔaW–\ Ú¹ê-Y0ÐÅ¿*”Ã}¤0uì²ï=^žd&`d"àZ•OÜòµàÌÇ~Ó¿+$6¿fL Ãôè0`(,üjBÅAx{¸g÷;ü­’}@Jv…À[T?þ—% ÞfâÝî¢nQæí.€(†ßÉZ4¤Î÷%r"¤Üøg âbÞ +Ün͸iÌ”Aó§€#½û“€ Ð@jÆxÙÅ7Þ•d)Æ7ûãsõÿ5©ÓLG‘ÚâѲ‡QŸÓ´1ô˜|‚hå´ ˜‚)½)ÂQIíëÀ½%n¨zÞP}X¹²Õÿ¯ôko“EÌ7BÏì.þ?w&³Ïüg°ê(LÕR U|ï¦uëÔ·kgÎåpªNØU§ƒwu¸8‚-„÷'ðñóü¸(m¼ ÌÏ&B'©ÜyÙêëÇ«›ÌR!8¦K‰ÎÅ©.@¦§LB4J`tàÄ'zM:?G‡ýš€ONý*p,Ø,ú=Õê¸,€ÕéÒwüS€Gþ3í:œi “qä¦OÆ%[ýEþ—!awiÉÁ‘ `‚;PNèLèyx.ë)€´&¾ÇëöŽ~Á=ø`÷ßñÇ–Bþ <ôP€ö´ ,þ;PÛç¶¥aö–-Mÿ¬‘»€öùÇS om³h´]±Ùäû=¿ÓofµÉ%=­( qQå·QùÐàº[È ¾ d»-+]€3S6]i1»½3ÞG©ŽT3¬¿Oo€QI2! øåJ!0€OöŸg €ZlËñ‰âYÓ+è¸FäU:sbtmI=˜ä˜êÍõC%¿’ßY¿˜M&rñs!¹¹;Å]Ëßp“’$î⫝̸IËn“lƘ®#­„ý¦dƒ‰ìÑ]]aûåPzµ“ü÷ïÃ\÷9àbïàØÑ·?YÛÀXú WvV¯Ê¨×€‚óõÑoŽf&Àújy¡pê÷üS_‘,„3R¶Xì1óþ-”¯ÐÒ@ +ÓPm ÞúBïÙmü(•ìwAÝØLœ6Þ#p ²[”„ÌLlÁ +Si"д£>Vu‡ëÉQ¤ló¨dË,UUYÇâ­¤o6YZh6XPmä3nô1€6Áp~@@Ys¢ëŽ˜)4¼¢*.ä„j°.³'g\~††×ô§#ð"Ÿ2¯9»˨ˆ<–‘õ +^÷97LNêZ’,[²šÜx×Îè…²†¤«`Ýy@e3ºÒšÔÃÛ1ðè±Óþ2©žCë‹õòËz±^ûb3Æ@ÀPÿ_Ò3œ‹åò¬žäeˆÇOå`  Ã`÷0 £8ÿ;T C-‚CÈ&‹C–ÐØ}¢{ÀOP‚çý¥ùKÈî²òR@¾*,ÿˆ™Á1Á(êo ,ý´èô÷ ¦€ýæÀ=þ¨Û( †(q`›ÙÐ.@t“÷•uFªb ·˜þŸZÀ;.±­Æ“¿r"O1öÓ8Ý86àçÁÂû|4éqOÏcÔË@XÑâçeéôð7 ¬Ê  }ƒ0~«ý#Ȩ²‡ì‘íX„YI´CTýƒÀÙQe²¸ |¸ä,Šïˆ#õq²™¯s¶o„v1$ ´üd}†ýû9 »z +pŸ°» )ÙŠóÓ‚0Ý®-ÂòêDcаi¦Ùiu›ßoœŽU·¡üaS.Æéä¶45‡áo¿ 6–ƒ€‰ÌnÝ9!Ö4ä)#äöhm¸I:Ð'a¡ºå眛 …‘µ Ànm|?¤$è1¿_^ÔÐ@-…Áõi×Kùµ‹®/g’³«/÷K%Cã{N’8/ˆqî7› 0·ú^í îsuðÔýv‡çMö‘¨Æœ]o#±±¹ïÖ- á¶Õè£Q–˜’ä€Ç’/¥QÄàHu‰aMiî+\‘ªùJ:9‰)µ="¹#¿¿Ã'DŸ0˜ÑÝû.¾-ñÅà»þz¶)ªÓNÈ ˆüX0&E€‚>õÂF6”²]]댓 n$Mys3Љìå56>+OzŠOµåL;=æÑ×÷?qîÛõÄ +Š¡õéêÆÃæ9åÆÞ¯‹åþQî=ÂxªW±s¸oý ÿ‰€ý±£þù޾/Þo–_”ç„/¾žžú`Yÿì7Ó}P-i&§i,©`ÐÞ¥æÆ†øñíÂŒ²&ÿÜøP¦~qm‚vˆ|·Úøý-l¾ú'üÉ€ü/ >LéÿÙ·íPxÁßN‘/•Ž=:ë®зjÞÉÌ€ŒÕJÃØÙH+€=¿Ê  aƒGMŸ£3xØö̾…L=--‹<L|EdOÚ>Þ!!wGPÞ*d*;0ΘÄÚ¤ÓLmÇJ›næ¡þÄöhrÈÜÞB“üOp(yS'þ€W¯Ï¼~»Dd/ãyâÞ7£ÎÝ]ÃŒ«™3 BÙ•.nxŸDI\78lN¨Äg¢dÖWg˜rÉl¼çX9+3V4ûþ™{~¶Ðï|ÇX,_Ñ÷~}¶çÀú8ÿ+È·#ª1€Í×ÿävewÁ×1‹ž-;— +¹— ×kçý7åUýpÍávú;ˆ\0¯¯Kߊ©Ê“¸ +o7ò ¢ô —‹Š‰¹ËÙ2pÙ¿åOžDï+ìh` ò*àdd$¿ºÏGcDle@ݲۨ;Þó$Ž÷–VÛwÏ*€ß¿û?;þa”Çi¡i0")pâkuU™ihëõ¦c +©%qÖi) ÒvjOAÏPînq=!ÞºÐa XðÆH<ÍCœ?~/êÊîï?ÿŠ‚ùã×íeb{ …Š)/˜› u>lu:xéÖg  Ž”±–ë<¦k]+Õ²ä˜hO2ãÇŒÈÍ1C-IÜÁ”’;lD%¬Pv¢»ßäDÌaÀ8.dF&|it¤7ót~…þ‡Çc àUºú§çŽòùoÁD-O¿\clêA5 +€PÓX 'ý€%Ÿ€3*ÎFD@ø$÷b¼|ûæMX³¿™®ª—sa_Ð9ɦ°¥nS~ +Œµ¸6@6Åñz ãÈ,lZ.ÇÄ€ú6Þ;÷'’À9AŽú1ª1×oçGþŠ˜Ÿñ¿šç†þ½í§(2Fܹ¿ð/„¢%Ü\Ó$cTÓ&LK6|îٺŖ}jKÎ[FTq…¤s¦žå·Ôˆ ÌŸ­õ7œˆÇªˆH„&y¡ó&NŸÉS*g9£È@8ßÐxöË£g-žíÿ#&ªŽêˆ³ç$Ÿ ã³™µ~§ðä<®FHÊYÕ*x¨M&wžõææÛõÙ™,ô7„ñt€ oB3U …“o“F¤û®FÆë³ÌŠMÖŽÍoNÕ#Ö`"Ü®½ŒV ë7Ÿ¨1gð+°V¯—'õ:0ÐpðßæïëõÙò¨ÿG¼œoüfhýGÐêtõzíaJ:88Ø?8]Bæv¤q‘Ûÿåø¥Zßò?T‡Ñøñé>DìZø²ÈÆZÇRÎÁåJ<><Ç\ÿÏf÷Ïù“1€XþZé8þ_Cð/È»ZŸŒLexr‰(( ¹³ÝX-ì‰éV‘Q·[ÐoìÒ HÆêc`n{ZIgW%–—®l ²Mß‚.@=TêjúpïÒ¬ˆçHWGÊß‘’~7×ð˜³ìÔsÈê([ûýЋg/^üÃ÷ôÂ7ƒòl ¤nA°Å–ù?@*C>áõe`ω³ÈëSÍI†KR +¢ùÞÝÙ¤k“^do¸bãL‰ÄåþT‚:˜Cf3„Ç«ÁåNŠˆN‘`À µÌñ¥‘Lׯ‘az“[l¥s'"࿯kœ-_EÝÃhµ|ºÁæâÐQM @üÅæc12á7ÍL’dð‰_D-ºöíÏ*$À¡„ ëg ÿ +’oe@Ó_&;7'~¡o +³kQ­a¶– ä·;žÈ{aac!4Yù-5ðCÍï@F †AŽFÅÜ~pÔÁâM¼¹÷%64Ÿ¾™Û;«ß÷ßo´‘`g4k ±õái2ߦ2mXýYÍtZžT.êC¤t‘FHšdg’[±&˜RZŠL.Î@¯~bw,à$@eÀ‹|ˆÀ _v&ÏD³ür?÷÷nKOh OÂQ]e/§IË…ð¼Ýâšâ›/÷&I_Ÿdhgáçåéÿ–I©'k]†”‘ú­ ˆW‘nm ëä^àp¤“ bôüÍ+6£þß÷ŽÏŽéùo-_ÎgÅ×åÍ®Ï ˜DÀùÉfùu}…,8ƒûW~5äTS¿L ùƒò†þ¬RK&¾qÜOExk‰ú7~÷.J€b‡¯ÑÈ¥šÊqã™Öu`(þòtì}ü𻿶÷6¨Tž:° ð3 À?¶ZÊ©ÀÜøˆ0½Òx/”Þ¢4œÛkÝÉÍúJ­ÍÍ-5¤q¸× MÙ IÛG«1VB³q¯‹Àymúuc2 ›3õ›Z™Pý÷‘£Ï¯0Ô儜’áZûTN õçÈ”6(F¶ÿâ¹"?÷ï"j"P%kbß&úеa­ßòÆŽ¿?[ë䓎Km×É«”l»§OL‡+î»ú¼ù-(tåѯ¯òUÎÄuúø#*e©þäÜÈôˆsC5ƒ»œKÎgg*°31øýÐOñ|­)'>üzŽÉ²Ó|i`SÞå‰ ù?ʈ€åþ‘oã·B`×UZ²ÊûrYTú‰(ÀE©#lo"ARŠGG˜ÝXCµ “€öõ?ÂÞú?A÷ + ÖÏæ®ÓD(ýiÀA¿íÆâD\øOTÆb¼¬iI?Æ=ówñG&m¸áÆÖ-+øNè›SS6ŠÛƒ­†­ÑÄA7­4'³Ä¨öºÓf-Û†e í« ýd")Žj¼Ó–‰‘¸QÊØJ+ÑÙð|ÿÝnÍ8« 2~¢º›[p}f ªàd7I[ÖÀ8ÈÚµ~L~Ùõ!µ>¾¼Å°ùisÙÚrJ.מ#ÁXÙ¸ŽòTýÉ +·&?Øßdq +Î(¤r–æå®v‚IQ¦KzïWĒų ~7©…Äü{%|í}ìá€e oú¯öãs_Êg.ο–X®NÏy}`uB1àq> ¸%ÿÄýÚ;µÓùë³ Òñ×btHuÙ{È#•›?Eê‰ïÎÚ1Ép¦ð‡ž„HCNIð3 ïý&¸¼O/ !]¥U:%@  ‹ýêŽý7™Àm÷VJȶ«ÓRâMc ‹i+õH–,¬™$nÉPy4—ÑtA{ÝÑzò.€þ*&ñulu>»ýWmŸŽ2¢ 0‚¨ +ÑňgâN Ÿ`ª»(üÉø @81p$’Ò…És ·ã»¶‰éÀyQ3 àõó\Ç5¬=Ǽï/MDº¶¸&_œ2§¼º1}¬Âõ§ÎÀƒRžséÜ×õpy¢‰¤lßìHÖ ÒT>0ÀñþQÞè?÷{y!Èþ€ÿëÃÀ~­ë¯Ë/×'ðIÇa}¦h8¿8ÙêÛÀð¿ÿxŽ!Ò¾CÉÈ©½Õÿò<Ö?Qeÿ»‘CKA5\%l©«O¾€ë]ÄÈ‘ËH‚·ïÓ-¯\A=št àg€oÀv· ¡²>æÄv4~¨¼~ò}Ëû¾G÷"ä  ¦Y·×ÙImò@ù0•@·3l¹Z-̽í¬,+ å«Òÿ ¡;¯€‚’Ã2Ø:Éäè0 (1}xÀ’ݤñÒ•®7,l 9= ³ÁÖøG€C‚?µîнMY´g2Ч™éVõãú¤*ÚPÎßkÆ¥¥¯Ý× t"P§Ï/ÚÆ¸ñK7î`õ.¦Rëè”ÝË0Ù¢N¢Ò¸*Ö —l72Eß‘áwè[n~ÜSàÈ/‚<Â89^¨Ìý& ö<ò@‘ð«=‚¼$ðuýuó¯/”é››3’¼VÔ8Aì©ý•;䯾@K_¿•Z¬¾(0–¹Þ—kž÷NïijoYä…ÃòxèûßEY¤§Þa|ú”"ˆwÕø¡€à±þ}P‹”W|øô™ÓçL|4àS€.öG°eä6Þ·xû6õ·½³qüno™®‚ìÒ6+‰­$É;±Ž 3#w’•c6åÉÈØÉ* ‡3½šQ¢+ÚãI€Š˜NGTÒroý ›ðV]82ƒ„nÈk ûÛÈ_ƒM€cEþÛŒ¿3Ø ØÅ×?T”ž§â6Ó79éœgÃÈÊiº÷)@¿~H]Ÿ±™kmA¹<5ÀÈEW†xÔèª#eg)gU¬ ¨:Ú‰-6áâE!£]¹g Øå”@ä[¾šíX¡»_÷òoA꣠> t(àÕék‚¿9ÐO»«é?'›õÅÉêôõê ×LÛ.€Žti”0ÿAÚ7LˆP l˜,€ÈˆÒüztY‰GŒIÅÍþ „AGHñòÝFM|F|øçÛËôÆ“swù†POè~„÷!Ðú½•Dø„Ñ¿ øÑ/‚•û!ÞÕý-hwÉÿdcËÅÞcî~èdó0…^çH)ŽÓˆÓ‚€»EÄéÖJˆæØ ˜¤¥‚oþ{oŠ Xel%HTèm¨ +šR¶ðÀÍž£úh¸ÖNT$uCÆ‚­0ÆþÄhÿŸþ’“éÀ¸i‰—órM‚,—ÓTóø+sœ Ȱ¡„Ü«ÄZyjŽʷФd×—?þÊ H–˜”@‘仩“c³¸ÄxRt`|?ÁC•15OMhoþ¤ž"VNìÍSM§û"A±>Äqºß+ŸÚ%@H$?~»Ä½¢+ÑÀ\Y&³„°èä·ùX½ìg†PÌ']ûØK‰ãlþÈáâqÐá»( €ƒŸß¾ýD§œˆcú_ù_ë]dÌ/B 6ÂÝ€ùž¾À'Ç”ƒÃð¹»¼¿K€»ðŸó¦g­ #±n2y×F±©†•†`Ž‘%1£›f©÷$M]™0áTG1% +@ïáï­0Ω[wçÑbrXD‡VÍTÌ Ý×@0ƈú©0yîb~¨ë +ò«8 (”~–[Ôc@ WÀ«¡™Õº6¿¥’úwG'‹—­H©mÙu5KBlL×é#sÔœ&$À±ä3ME¦<–‡ßX;øú&åi瑼 +hŒ.ÀêäÌ/£ÞUùYë‹åúü_«Ó €õ‰òu³þò/N{½þ²1]Y Éä;'0ÿ±c€Oÿ Tùk cÀ~ÿ1ÌÏ‚+Þh„÷.Ã÷Ž3¬€AaÀ€VŒÀýœ†öïòß\?`ˆ‚ÌŽÊG6ÜBg˜Ã¸Ë22@îGÜìK' ·Þåe@Œ÷y0àO¯Ëð#¼ûé€wô·Û›mû(´â¬  ¿`žÑ\t 9Éb®ëKÁ +û²“tض†„HVó$pࡼs7Ð+%êÌ´®-†¨t?ºx˜“ÌËÈw0ží™ fÀ bþÄð‘ÿ10›àá®JÔ™y^m¦‡^Dl¶?9A/+^Üä½{9VBM#{º„^¯^Ib.½=—sc¡IQÅ[ Nò¥¬vø¯Hð¬L®;òEºä”4Kês (›<•°> vè×Lž.?ÙûÛQ¤Áéò¼(oÀ@ÅÏ׿Òõ·ó›‚´í _=GœŸÐ™ˆù/—¼w«Õ–ê9Ö ·„@TY(–·Ñ›FÚR^Ò.³»—ÕDkùs¬-œÈƒ»¨bg1ù)=0˜Ÿ@ûÅG'ýDí×a>ÁŽðîÍî߂܃ܬÁûíŸV„ÚƒÒFöÎnx@ƼㇾgW‰ÓFã6ša£-’‹^EŸm¤Ë¾´³bº‹ +ž%Q=^‡\ŽwÆÚ0¸Ã\¨„dtA^Ù?ƈúw-€ªÊœ(gGƒÏû¹F¹ŽÓÕ2¥t­i®d|#«0 á {º^ÌhmH›xת SÕµJl¶ˆ mÈ×Qà}ÅŸ@ ÿ¿]û.`J«sg*-?÷~=‚°GËÕëõëÓÓÕµ”÷ŸA–ëÍòëf㨟J_ ÞËþ Ôýæø·k¿~â"òß§,¾êæ¿Éù`ˆ€´o˜ ÎÛxë[A„ñ¿Éx€C~ù1´ ICvÿég(F`ðu‹âµäe(è”?Ht‘yEéå40Q§ý¬¾Žm£àS-€·ïÌOØÚü·—Ÿ +€Ü½údõÆ–ã}÷¸GÒÒ6ßVvìšÚâÒšl6&L ;4|°Í¥ÝmÕ1 +!kJ1:¾®4(ë¿.Å”î£ü“‘ÛËùŽ|#–‘(×¹€Ð`kä)À¿?0â«Ö Vú•+OÁ¨iÍy%>­,-Î|û£#+©Qþ îUýÊÊ^øފíëêᤙ*`³¤ð½Kê”)“Ã]ÄÈçq…ÒÍúúô¬®§ñ•7n–½ÕëÀÏ(€/üEß»åe wËWù8ÀÉòôèËÅ×b¿³Hì³åñòälµ:Õ  àŒ„ÿØ¥€–»Ô¯Å–óÐÂÑýå–0ˆ N? ×ïV2\:Ÿ‚F€%èjö¦rü÷b­vHÏñECÏ}—Ûí<èeæuÙ‹®gqøªë‹ŸÊ>~~ÿò ç`È_ò±‹½ïþdìñßåë‹Þ{šTl6¦-ذª…™*Iå: ÑY§ â¾l}¼šòl…™½fújy¦JzR”§¿‚K4iÈ^³Ì`<ÉèáŒý&q›¡×™×@00ôs À÷wÑ ÜU ÏŒó* €S‚\ŸpØhOݽDÛxÙ Ú•žèLΆ©¼²…*FWILÙ¾\m!lš[$¼ÔIïíJ}檣¹O– À0‡Ñ˜jñ¤¾ûç¦Xsý•¢FÊh?€D÷IÞÂÿ[,_Ÿçuàû~xý4‡ß +§Z_Tÿ‰9]+N—‡ +é&œœ„ÿàñ‡ù€vÑ?&@Ó÷ÃgÔà%â}|yè¦àÄyö¾B×GÁ\Yû¹ýìf±!ü+ð(ÿCœ—÷˜o/{À¿ )²ë{µ•ÖÏÚý¥÷±ì(” >}®¿%ìw¦_ñÔ}½ÞíïtòÉz[‡˜7²§•ddº4Øw܆cš†­Ét¶CwÆ—‡ÃÛ?I7v6Xo$y¥Ê.êÞ’+܇lÇÃﮨ?°MH, §ñ»M–¸² ¬fZ¥u ³ÁÖxÈS€;ÓþÅŽ@ð½^ZVïPUl ©RB"¹eÜ„*²£‰qõƒ€5;±Ñ…L˜€”ýÿYû»=’+K 1‡l`‡#R=!eLÄUA© ›$ Iõ!ÎŒ_U=}5üIùS²ªKwsÓ·u©éS8ϳÖ6w#‚)•ª–»››››Û×»×¶mæ¯ +ÀÛ}¿þ‹Ûßæ ï<ü»ÿã]¨¼Âݧ‹ÿý÷?üðÃïdùÿhè,P'pÚŸUÅò×á.ã=ò®ìÇ ›í7·IÀ‡T€ØC‡Ò§ÈsŽÇc‰+‹ÿ#‚âßk 4!u°|ï—&ßwgööšÙTãÏã>ÿ÷š\üKÀ/ü Î@,€H‹¿¬á.·±Þá(c7²Öè‘+¥1{¯‹0)4ߣ€¾ÌŠsÅÈQò z!™ëOIĵèOü†íûøn9§)‹‰¼V ¯…„ `îüïÉáót›^ÚYò”ÞSS¼:)÷‡«+b4L{È¡ËÞt6¶Ô7.¿X†™(ÿ“ä¤ÞßÔ´Òm\¯÷ ?›Ç‰l\wI¤>ËOç¼0qš×-Ðo±PŽvMª’zx TcüÅ»“Ù¶ì€C’ôÖ*OY-¨%ÞJm«~þÌh›é(ðI ^kûáiuoý}ÖÒ“FRoÏQOéM<âç¸n×o:‘ø¥÷gqötÐ9:ðžÒŸCfŸÿÚ×À¨_|Ê_õ ÷ü?]ü¿wyíG„üd¸Ÿýí=!±ïŸ Ýüóó—ÏwÀy·_ï‡í÷Ë ÍÖ|á¾d„OýšžyqG†—åqá7âåO àíÛP1CŠ;pxÕýG±Œ6Œ‘kls.£ß›™„óÉy^ßè¤Åà†üj߆?%ƒÎˆ&?dƒ·þö áÔ­Cÿ0ðÕpE‰q‰Hìk{8.0†ŒL¼y0&’$”ñx ˆ¼o—åû%{KÚpǤ‹¶:LZåªÆÖ‘Ù' +à_uà¾>èÄŽÜGó]/Y´»L·æظ™Ï3@ìÄO,ÚÚ ©aÖ üåbâ·²Ô<à¶Hf]ºÆ—3‰ÆÒ}’J{q©~~Áx)‘?5Àë4ºþÁRyàìIÆ¿¿ÊǾýŸ`ÇõŽìcøO@á~à]€gÞð//~ûûsÀÓA>q÷<÷3 ¯arìùÍÍð½æÙù ák-ómñÀw|qâz0èùPwBœŠ{ûòù²òNάcó;@P?k·Á `õüG +À7ÿg]þy2(o!œ?G0xí ¿Œù†¿}Àh€ü®®K ü™-úl¢©¶Ê)‹1‰^¡D)Èå]¸’ÐÀ]´wJ¬\îI}9˜‘ {šý¤4^ƒÇriµúÎݬ>*€íÀ·ž¶(§¨õžÖqök©<7K>O5‹%ÛàšÏ[ rP%‚ëSŸ֮•ET;Ûø`Rl*Ùy‡_É ‰çC  ®+Ì‚ÓjZÒBͳ ž[މÌr–7æ]ïß=Å€êp2cÔçFào9ÒPp2&‡™¼¾"Þoøáï..þ‹§Oû$0xô}zy(#é!Nè?j€W7šáø¡Ì !Eî"l@P–Ç]„߈?œ?Áû?fþb|ôÉœ×~â'“—²þÂ’âá.\ã÷ýørç?VnÄpóÞæb¼ÿñµßøeäýòcn +€_äÓ3î#N‘J†fŸÒÏø7ùÚs ÚFËÜ•Ç +Å­¯µz”SÂXFì‚Pìr01æ|Hᑞ©~„5 Ì£¥™)ÛÄð3¦{,¯ÊZHmÉìn·þÊ»›:¸û€)‡­)lwǃLÔA¦ÔÇðÙ±á'í™Ó^PMf,ÛËÈúz©ñ’º†7ý3þ¹ -—§A®É6I§wJÝï3©çk2þâ:³|qxE0cÂ3_DU€Ë'ÿ뵟„ÿ>;`‘}ÛW€òêæä6à‰sú%öû(ƒèß°Þ¼ÊG}4÷€—7x™¹8öû¬âôßL=D¾÷$àB|ÓëËz=y ‹÷'|HÐïü[ø óþjî"ñ“²FB W4Ä +ñnˆŸU ¯ *sʉñFŽÂ?‚U‰`jA$¨ zþÑ/1*p†fmÄxi7Jå%"±öÁ±±ÍË`wvЦœ4îcñ¨þ•À=$¼¥éºv“;;IÀæÝƒHieáOÀh»/1qçf4„gÀ9ao +[Ž´½`cå©ß˜I/ùš”§rÚ³„š?‡·9Ìé{µ“¿Þ™˜ß‘4Le +18sÆÑ¼sPgZгž¥ +À§üœ€ð矼Õ×€ÇZ²ßiÀó§šÿ$© +x4l?`´Wõføƒ˜X§2ï_g,E^l,€?¼Á$yþæG,¬Œ¸ëw¼?´ß±R|Øènye¾ƒÿèôþq±’5-9€÷oþ²àoþ-ôW¿ºJwîoß_u~ÙÛ Óz­õÿåˇÜp" ŸJ#×m]¢_9Š(Âo69µƒ"Ðg¹«@É…Ã'×y ÷\Ö)LRz²ìÞTÍòå0¡wqªNïü’°»Ä˜„ïaô@ÌtlÏÒS,ê=û2ímg›·î ðjNjŒH%¹Â*âÍõ8UšiΙÜÀdµ±šSS1½ÆcõУEr,çƒÀ{qÎ{}. ¶—z°Æû çè£Àr¼øáúïú_€óÐõßÝ>ûôÉ g½áÅ*€¼ +„ +.cDü_oÄøk-€Îœ àÍK'œ +¤¤v ¢Ãû sj)€Ev×lËã.ÄÏìÿôþcøðÆ@ü-eá§/×±8¼U®”ƒîu¤ÒÞ4§3EÅØÚYö\ä%"Ñ×^ŸÓkTTb\ý=ƯNñ —ê}ÿ[Ž•°‰aŽ×ˆDU Ï$Ø+sÞ Ù{ÊG—<•dïãâÙ…fé„ÕùÓsÿØá›·È¦äÆ ˆÀúDO$ûÉÙã³Çë â· Ô¥dNÔÑ`*Z«ai&ÏYv£ÜŠ}¾Ý å+ˆ-©´qL'i;ŒË Çl¸¤ÍxIbÒÓC@rö€}ޏ ÑâÏ1 ºþM>›äŠc–L:ÅÇàý)}ÿïl¾ëïóÿïï¼E;à“2zú-€Oy•XøÏO®MËYãs½§LÑvëÄpIjQåyÈ8-Ñ\1Ûf\KàúpøâÉÿʨþ’®½þÙû€Þ0ÂB>ÈI þûGO~øýßýðäÈ.½}'vJ÷¸|ôÓ¸>è¾nâÜŸy=C€;}'Ô'nörŒ5A›@Éׯvà_[¬Y<ÞoðÚgŸËó}cýxt·>ߺ ›º úxCÇï@> –cÕ<´ü’À/œˆlú›gí¦°Àh€™­;AëÃüJˆNRòêvdDs i®såMY‹Г +e‚ ÷TÅK9c±sÏiR«ºqA¢º[—&„TQWï4ZM¬kzš+lY DŸþ>ä÷ì’OÏéÜ04蜪Æ"øNçñC6@JíF/ý.­[ È Bu)«þT^kàŸpCýD0 j˜VtmZÆåˆ&09vø1š8 åL¯j;âØH¹öÖ´=›ÌD"¶¥é§NÍÆçåj•ÌúI8/5FN9ë6à§ß_ #Ÿbå;çO£œÛÎ×—éòÃ~OÛ—Âí~û[uÀSÀïQ,ÕRUæîô¢™¡ã°@Æ¿Xï-WÞ[% ½§ÂíÍ·}ò˜ÎÈHþ< Q÷&*È-ÏlËJr,€ïú¯=³–ùõàÚÿ¯€KýùG!ðß@Φþ? ~ÍoÁ__üúò] H-HH¥Dƒ øìßÔ¿c¬Àpàêê +LF5‘ ";†Tj2Kì ÅÈ'ãær¥-²ñŠl!œúrlð¸Ç˜J.>åµ—zYËýåöÓÕõí +Ý÷ZëØwOÿ¿?;r…ÔDˆ[Ο=BØûÇÐüŸ]ép +KKÆ_ä(N‘§¢eL•i³/Ÿ?Œå‰ÛÖðˆ\Ì.¬ì×ôï®>ô9##ØkÁˆqŒdL#ÍÇaô¼»¯ÉLO#&rËä`ŽÜÈŠ89Oé[übY>Ãëc€Ú™ ìtàů2±W\`|ï±Oùßù±~òèû³ÇggOP"sN} ûC¥"ü¡bÀÛr>¼ßw±î¯’X;À¤†"¿ âKøÝ Þ,€7ß`z‹U¤€éù×X`Û,x^Ê&ˆ3žÎøgâÖ—ÿe€íü…ó  ô ðÐâÏø‹ø|õ ëtÙ ‘†ìå36f M;v|—‰&rèªÎXÁDÂèë:‰ˆd%èSо¦;"  ÀU¿º›è{OSq”I/â€hù²ž$3ø2ÄÕxú”Ñ}_5°;ǵcb¤ðôûgCùÇ p@È"o)ö…Ú §v>má8Ý2[)V6O§"Ô+Íö) +À‚4r±˜°´^ ­µ–aÇO“•k«&}£§1ÆŸph²ÛiK7{˜HñÌ@‘Qb¶ph•¼ÚÝ*å®~ïß;õÏžÀä3oè¡1ŸæÖ Þ_©h/éž“Þ0$Æ#ìáÞú3´zcfµ÷rLj•mcÌ,ࢾ[ž ’ñw)HZ%j˜SÀ«‡€Ó›#ä㛥´Ä±VÁ\í{Ã÷Q€½óE)Ö3Çéîuº¸f<às@ó2€À[tßsýå!€¿ÜC[ñéꢓÓ#‹ú"P:òÆÂYUú"*c.ÁÓ£,¬>/tÏcb ‚æïH"á=÷ë«ÌQnåPE­åm ‡(D0ª'ê$šg Mêù†]¼ž>,¾yZ»Sôz ae¼ +Ánl…Ø÷#ÖñF"ÏÍMÔAæiÿÆîÉÝa“©·îöö7[mâ–2{ÏfÐ-ÓÓÌŸÞ]^{{”•Ó^h3¤ID/ÎÚ_Ëô°..«Â é ã˜Lâz‘a³–mNzäâ¡_£"p;@ï}¥<î£ØÜ'‚8ó«^,¿ÿáwOðF€~ÔîÙnp"¶Úੱqsõ#¬']ÄtÝa„ªW*ú‰Þ¼[lñLæ:Ç»kßÿ°0Œ¿³äÄÒ'€ýrÀó—> +|¼çàóÿ5[n2¸!Çæ,z•±h¿±?ŽÇ¾ à _Î×Ó‘Àû|}ì½Ïè€=}œûË_¶>]=»Æ ÷Y²ÂÀÐXñrÈWÄaÛø¿b»âíhNío +…2$n¥w†œ +"xìCÙ® НÊÀ„÷2ÇÈg½»2c‚Nàw'ÂjÙ»ÎðCîÍȹÍ7À÷xÑþ´‹ÒxòR‹BŸ|Z(ÖϹٚ"µÀžò„6HJ Ù.[nVÎmkj6Nº~ƒl[wXŸ>dŠa®V7nö6¾µ68{Óñtv?ášr®±åž–9j`¼·_Ïì€ÏüÃ[šDž?®xúý…¤Nà¯tlð.¾ëwDâg“þìiu׋‹Ð½³v"4Ö vpŠÄ¼³@áÌä| ,ÆßY€W$ÂæØûjøXá6€Ñ»Y}0;/†ÿ£r ~t@A|µìÂþPšµ8¼ù°Ï|“ÿ¯oüɾ 9‹È$2¬õpþ71Š2_f‡ýÑ9˜xœW„&bƒ]‘$À&Q"äuL1RZátm4ÝÜ~à˜µäŸƒ@ï +[ì3¤Ð÷åÓåU>’sŠËgùv w—ž;üP}Û5V¼µØé”nÏDhÂâÆ*Àœ[¹s¯…Ö¡h–/%Mõ÷2ÛXÞ]¤Ü°Pó€h€\²5,Iuà#i®«ÒMÈWÿÚݬµ‘ KLšsä!-™/$F.gûêo‚ +ëdS?üðûÌßÉæG¿ àâÉc=aøãá¹3~ycÀçh¸¥vS!qŒvaO +uk Òz;“ÿ&ŸÇt +nãºQÜͱ뾙ô($,#‹ó'KN,=0N¡@|üéø(ð‹u“ÒAÿnH|'7þOóóÕዸ+À'íöû@Cà}J“!€ +@ Àv°=tØÞHÑ_D€Ä.‡ôút¤{H¿kј¸Kb¢E¢ð}þLJ9ŠU Àà$žÈZÄ+Lî!¶€‡z‰ÓМ <æh['¨ÙxE¸d,/2¾ ¯ö¦C€gOñ/³ãXßåŠ6w`f6)ž£™ôi‡±g“׆àóõeÇY9)æîO£ca1ëtþ”{E‰:†ëZ±üë×ÏŒ¦û›dX• Ä¡î1‚z¸š–šÖÑÝ~'6ÃQ&É\‘ø³28Ëg~ðÛß=mNÇžO„Ñßw`Ïn‹Ï ÉÍæìÿUUC±, zˆ†ú‡²P»‡èÿÝÿå‹sŽ’e§“aù…kì,ÃÀ°q°q=AøïàíB˜Ÿæ;wøá\ßÁXH8n.ß,€Þ,ïôììgúž ¿ª…¼ˆè“€´й¿½ô'üÖ"‹¡Ê³+gõp…È8îKûØþº²¼×’P‰aZщÏ16øU’3âD.*Z¹¸Ä TÝ„*“#¥•»ñFV9Ð= sŸ°>ÕŒè)qaÿ¿Í°(ޱ\\ä¬DÀESôY@˜.ç7€ý¯V¨pW„¥ØHW3NŸy*iE[\7[ȉÖmakŠ­±LÓ3 ý‚¨ +Oê‰1&B²iô^àyw=|)H|žñÀbõA`ƒE®©³c³.°2 ‘°‚ï/ð×Å l^,€ïÝÿ+jY Û½ïíýË‚PòZ*€ðNÿih°¤s¯1ìJïø¢/yñl!¡jÄ´Øgq}’ó†Ž9³€oÎ3 +I×¾Ya}]0¹©Œvß`¿ÎÒãw‹ÓÛNxª€ÈÞû\°ïÈr¸çÞöæõÎA—åŸãtÕç×ï cè= ªoÔó­þ®¸êDUÔûÉï.é󼃔¼\Eä +çó»¼ÀR±uõd5Ú:Œ¼mÁË)V´š¿ÍÀ ¡½”H‡¨ðR_^\†ØªÌÈmÉ>„g³ë©oÜXç1‚ïNn<ŽEÿÇ8;K968"B#]] I=²îÓ(þø¦áˆ³*Ñ +¿ôÕ[{<ˆ•óùj†9麜ƉJ4ÐÔ¹4’í’3?è»ÎKË”î( €e´ ±±Âîe€ôíU³?\xßÀX lË0ŽNäi–48vØÏ»çNÁ½é‰»ìöâx³œå9¦¹_—8ZCAc/l|¿·¸ž  + ïå@JŠ":ߨËÿÀÿÀ§Š*ŸZá~x +¹^ÖÏ3€]cõ×8í«Áµ’æC‹¦Nèªlöû>\<¹|‡…­8âNÔ"š>b´\ix•€'âr<›—œ Bÿg~À>´–ñé{2ë?TŸ]ôÁ‰€d>Å­p×— +pï€jðÿ¨h¹ÍzõL–Ú8†«1§uô§ÿ÷+ÁÕi^ëšú‹Ö;¾Œvô`\ÑêD [ +ÑhAæc{dm®9vÁ“€}çÄŽMÉXîâºVÉž7{ƒ±`ÿßý𻱞<}4·úg «ÃlÆüaö÷j^-€ïŒ·,€ÌÄ àââ7w""Óé9ÄÍkxvÂaÖ]h04î<ÙÇü*0€ ÞÁÎø;‹ë€žó4Ð(€¤+Ýð;* žQ?/žÙBY߉€Þ@áD稀ü©ÿOÄQ,JððâÚß&‚6{EnCØwH÷6€V@¸Ûü¥´b5P œ Ë{r²˜¢;6Ö««g¦^i–,ʸE¨oah:-¼Á¡tœøÙ8Ãé ־ѶD×Á¡ïž]6 íPl]NiÍnÍè7Ü3ìzÀÇ4‚íIÀ‡úÞ|Tàì¬õeîi´O -[ÄÀnE|þïrGv;“¨Aª²ª[*vïîóµ + u7"xÃÒFq—Ø"ºŸDg‚ÄM[«º(Å•ª‰å™Án…x0À§~÷û~÷ƒ ~„ðøq-ÿÝ ~•–‹ðôéS箟®Ûl~ Ô'9r `¼Ðv)-€ØÈ6½|,€·¾÷üŽßÉ…è·Ô@¿hÜØRo¤è/âúüɳKïÍ>`íÿZD3lðˆ¤Þ½»|ö¬)­ó#_¥é'gÅíí 4e·ù\Å@¼®zñxÚpOT9 ýé2½L±Ø}²Ã•X¹0°W ^—‡çê&J`²è} O¢bh¨ÆXCb0U·=vu…J,z‚67 Î 7O©0Ö¥&Bs@Àð&†å>ù›œXÆJÛØ&ž^U‡ Fä@_¯=˜ú]ZX½)ÿiK#xÅÚ%Õ…Íø!Ÿó±‰h×Üøž!À6 qŸ§l^Ôê÷¾6øÛ´á`"Še ÄöùéøcD Ù(zÞøÝ€#l-Fèø±œ<·Çü7[ðúôß^¾|{óÐ{ùCý…Í2ð +ŸÊX: ûêÿDº¯Qø-ÑòF¼Î«ÁyðÀk'^Ž= %ðÊÆöé^•ìWÄÃéD8àpœÈDJÔ® 㿺¼8ÿ£×(ƒJ P¬T†àce3°>‡lFÊš3žì鄬€ØÒ Ÿ³„{rƒÛTDHÏ–€`÷9€‡Þ ÿ?` =—ôDR/ à,-!Òª®OÎ0!ÒÌ——mí««‹ø²áxƒâÜ_b¿–ž½yEY­ ©€ÆÖj5Ä®!4ò2"Ц’S9½híÅQ¸nù)¢».¼e›xæZäšâhüöwÏþáÿñç?¡óÅ<ûŸ_wòñÐδ!AÇ +‰éð_ PöýÙÙ×xóæã ¼¶7jBÆkx‡.Ó/ñBgR* ÿF € €e8(ŸÓ ´æ‘™è6ä_Ð=¨mä« †¥L `ê^ÆŸ,ôÿ™¹VÒ~H0‚n×ÈADvÜî—ŒŽD*¬—ì//"µž˜ð:‚pèÉ“-@8æ/sŇËô†¤Ë;…Ç//þйp|‡¹ŽÁqŸÒý+¶í{gP÷ÀÿMÈspågnÎrgÛÛD,‡m•ù‚U~ J£®â4ðêêZþ_G‹Ù#;¾Q©…Ù)qøT­U§¾9†¹@« Bg/•»:^¥°Ž³KÚ9š Ü‘bfæ…ƒ²_7ËfüöŸþáO?ÿéþé~†ÿ*€þçþóÿó©"?ôñÎü€BDùþÔxzñ¿p:ì×Ù÷s€íGyôM@8Ësx__؃҈@LÌ_àÿôÚ;»¸vÏ?ÚŸk“?¿W†áÿá!ÆÛ77ÞÂC›Q¦ÝØAW,û|Ó‡÷™ˆÂqÞ¿ -? ÀQû÷BQ’ãoÀ[ÞŠæw4·#aƒº+BŠcv†MD@@ÄxÎ)Ý=ðšüy/ðÒá‚4Åš Óñ+»éé0&'üK[ã¦SNyÐ?zdÒ’T˜v‚ág]FXt‹Ù!€ß%*Òð:ÉoMZ/Î~O“ÝQÀÒï|W 6šŒ2üÁ϶ÿôIDATÚí³©í¢T¿“›½w¶¦»ÿ*L[!y·ÔB´‚¬Ï¾ËÙ§°]º«œ¬0Œþ_òבÜ(ÐX30Ï´ÇÈWk'%SþqVÿ_æ#Ö‘mŸ‰}iףУÂ6‘ +Â=[^×Ã(gb€!ùò<°p6œ?"!?Âÿ>`€i Þ¾v™ƒ…·cÈYKI)Æ8)‚¼kDŸ/Ü£iTfdÄH$†óíååCs }èm,€ÌÖmßEó€-ç _ à=‰ç `ÅN <¹¤_á/¥áÁXú\3ÈiCŒžWQ+†å"ÓóZóÛ,–g—í¬Ò[¹_’Ëõ’ +H“`;»Óa;'à"…µjÑr37Deg9CˆÛºV{yöœqVFI)ì”=¾Mö»ÉGB£‡jµ,˜ž{´ÓÒެi€Ü6^Àuž·€$f",j5ÂÕj‡èž©ja]s&“5§÷kîã,dÏœ­€ø§Þ<éÿYþŸÿAIóXwœPXtlÙe\ÜÄ܇øì³¹ˆŽdÕë Àçý¢F ¤î UQ‰ïW´êÇÊÝpýÁ%*à€hßDôÝ|GµöH!æ¸1Þ +Ãâh¹À÷h€ñãe‹ÐÑ¿3¯hþ¨ÝfÒ1“ÆßYÞÜ„|§Ë¶CÉ>0@˜ÊÁŠß þnÆäGtdS‰¥s2` åºPÞ#W^/c/ìÈ Š&p“ãÔ¸2B£¿çsÍ•ºÂsžåØ´ÆèÑo.c±:€;vÌ×O(OÐ Ä9¡W«aîªê†0¦¾ûpñ¹„*µEæ©@BWår¾?h[XKÖ¹óiùF‹[‹Žß×A—ŒUDÛÙÉjI¡=!9ˆöÁþwUŸèí)£ + Ý¿ˆ •ä‹%¢‘ÃMáÔe‹'ëÔÖ*ûèD¸ebTR ÀKÚîò7E~U+šÕƵ²Î¾3Ûòèûs~NOäªDéõ›;^óL s¶/ÙQ¦ZŸ³_‘¡… ’ü…üG@lÿÜXÄwÑð"Åí³¾ pÿ9€ð_‰ï—"p@Xø¯ +ÀKÿ­EÏp8 ÆÑ5*«sþhÿ×'ÿ»ðyÇÉÝ€oˆþ;ï –äýŒààæe,ï]Hö’>Äù=fGÒÞfÌâ§€9ŠK*TŽ-™i‡4LËù“…p~Æ;˜`üZyÊeBGf¶x ˜#P©é  xÚ¯æ5®÷ÌA/¬»Ñ!’ãwv•*UÀ¢<áðÀƒþ€(7õkÀA_î’/ÄE/(ƒ\ã$`ú²þ” Á&wÙÇVó¬»: ;ðéÝojÿWàä1—œ?áQÐ?w½Yµ|²ÿ"ƒT€.VZç2µÊ´ $AE=;ô],¹f¥YR<ëL-l ¹õ@¼c›{{u)Žeæ¡v3?¤¶œ.î5ëB‘]R«·m$6UÅÓ¿B1Óü^ï#ˆ¨Õ×Âéá©3û_ìC€™þ¼..®ŸüOÑZ)}€`3ü;OE= €Ærüüœ`Јjƒ8C£`›d0ÿÊßÁöÀ7A$zøH™è…'p¾ï±P=pdâw7€ñ‘6Àôÿ?Ö¨«ˆS¹MCü2þîrs`{aú?¿ú Ï®Ó{ô ˜3:MÌŠ b‰ÇÛ\ƒ5àØ-›1´­@xÄ¿ä—ýîCýnTtê<Ï› ’ëŠãÀ…ò, ðf,i%¡ƒQzÔŸ/}CŸ~B ’ø‰´b&$jÀEM`·ÿášRçÆX êÌ‚LD~Ž¢Æ6XÐVH¿»[´Ô÷4á©x7 ~Óô +›ðÇŽ}O¾© c_º‡ÜðøeäËóo*Oôæ1´QLÇ?ÿ-LزüP‘Y“€‹÷'̇óÞgÔñqù¯`ÅÝ, €ºJó’}y¶EÇÈŸs-ÁÚ9¸ë]~Ò{ãF¥$‡ˆ…úuYŒ€ã£&–¿k#%Yìû(8Mg³mæ×GÊúñ=fuØéÿúõÁx¹,öÑ2KñPBóG:Œni.$¼´—õÃýñ~fT’7a¹ìòH˜*Áઈ(pÙIC¬M‚C€b,Y¼Y”ŠNÙV°ëçp·Ôš4Õ‰ÐVÅÍ¥ìàÝf˜Ik!Ý(Š˜½ + ·ò“$‘¸ü’=HÀ¦†â1Fµ‚ÅÒ{´¼"ó<ÑR(‚ø‹û + øç> Pößëÿµ½°°ÅVÿÀd$О~aó¥_¿0{dÈ®°\XjÁ}¹º³¼ÆŽ|‘ÎSC ü + â, ԇͰóå[¬íçw²¨¢¸ð&Ï.Á +.Û€Ô¯/ï8þÿ¨ ã@[Àçwï|’`›%ŽÅ9êòcào;»ãsé4*,Á~a„¦Ð7qºêwçÀ>¨!:ÃDC7±¾´%v¼…ú÷òuêËO²Øïï5Ï;ø{ ù«ì[5ÉÕ¤Ö/©ápÎO}ù,dø ¼¨4ÀO·_¿\?»ÎK6Ãøh†|c¯ +!Í;ALh¯ðƒ§Î:P ô&Ùðø`ÀÒ΄ñ¥ž||`Àé”4'>:Ð&œ6/ñÒž<0»tþpImn¸Wå20¡•˜;œòžàîp–*Àq‡ðè ñè1ÈOx}MÅMÄkÄ·@,€`úÿ£ åëËÏÙZ*-øŸÎlÃüª°ÝŸ»TÏÎ!@lúœ¾㸠8ºÜÐu"H'À õÈ7P²?€œÓøÑ¼E„åünèóx6U‚¡¹² +qÎà`üc¨ÈE ÙÙ]ÒáE-Gžë¤Ñl¶ê€l9©”ìK°v +¤}ÃG*?r"mñâa7ºyÂXöÿOŸb¼cÏX¿B5}~®ðXê‘:eÞU ö«j»»æ:nb4…û¸¨HÕ.®'4óøaŒó¶ÂD?_?뇴ª‹ôýÑ +ݪ"²ÿÝÕÅÕ§±2-€@¼;™ˆa[þÓ™?Ͱ@'ÿ0Lë$ ì—uj zvÂhHdçO¥¯!¥­ì.}-€„Íôhqµ.ƒ€ïpÎ-F†‘ºΪk ÏØŸR'7]€øy¢„“~ûgmï|7éÓºN|Cx+p¼ ÿá²ÃƤÿ/ÿA²È÷”ji¿q_ÐqˆèC'Ø¿¸pe~Ù¿|oòîÐ<ðZÎ÷ ×#úñÁÿ—±`zúþ@Îo‡äëÒçÞ¾R’2œ!@–ÝY;'ü´ûÝÓ-jýkoPRåÝy„óþÍ©¢Ÿ, MNzpmªܹ _yí""áfðxèúï+qðL÷4µ#÷tÜ6åkÍ=a¿+•  m6ô/¬_À²,‚8kv/Téó»j‚êa@7Ž ‡ßÎ÷_HÔû§Uê `UWg0Š;“€bšA£ó'O¡µ|š÷ôï1þF].‘Â}î|‡üé[ÍïvϘ!@Ò«Ë8©– ü¹Câh%wÆPÑDAxž´É'e"mÏåĵíC!%ÿ¦øÓŸþiW4ìÑÐþÏü«üukð¿Ý¿lîçWù™—ßóX>ã‹ð·¿»<ï žXßž|ã>ÿéÞ‘Ý”ÃÍ‹óh’k7t;~q´¸nYQ¥»Žëæ?ƒôšÃQ¬ÈX%£@ýmKøìf«ÈÁém€S,ò?ží|ãìêºÿvl—°6hФI\øEò¡sð>ìŸmiwì÷ÃÿóxlÄ¢5]¢Ñ'>Õóä7â6È4ÿgªf0œGÄPVYs®Ü'V@¿“Ë “¹à8@`MÚ»iéܱkV   0¬s:œsÁ@+B%`<hÞïóûå9€5`(ð +ú…h©§‹OB=áÎñG •UyæFŒ´=ùä)÷ó.ËðîiÕVµÀC +`¨°ÉwØ÷wüo˶}ÏFñû诜óÙ)4° .DnþÐwú4 #7¦€ô(ƒÿ$îb¼ùø£t‡àþ#HþàhÄ ÷ÏÀб Y([ +Xã]ÿ~öC +gÌ×^=sª¸H~Ú…Mϰ½<ù$Hň5”|Ì"=á?ž7,êëÛ €{&@ßÁV |œ9€€Š ðæ8æCüÒÿ9I©" +zD£jŸÃdu~nÚ#pEþq´n«¸ð?!õêì ì£ÊPËà«]Žc±ÊvÆöŽþéúC{ÿ¼;×ò‚ó|öŠÞYÇ!À#uDßaµ "¡O5¾oWO׫Z0RfU€7ü=¶“ß2ð(ëW5±‹Ëp–’d øAÛsX µ4 <çJ-›XìZ>ô|úx28ó«B¦¯{€}"Ø1­š–ßí?mºÓßÖþ)¿v0\þÊÄÄÏí¬>ÀÈÍ_„#&ƒ²#‡ãNš÷Q‰êv3ÞôVoÌò•ן?‡Ø¥¾¬? +Ä;so; Da íw¿sRŸN¿F€º õVÖ;ŒQèCô^ïvÐÍïr¨XtYÐCÒë‹ñ|÷ïj¤R£VN¶ÃBt-€Ž@;ÿ8ZþØ”÷®Aho$‘ªØdéý_˜×û7ýWÝd W% àOì•ô#¤ –W%€¼Æȇ²?|qÁÇt¼+®3ÀÀ>‡Déüõ<;{”7`¾?—sv­²+,—nyÚí§Ÿ:âO’bþ˜T…aóý€»àgÏÒ‹›¦ŠcEó‹ƒZžä9m|"±9aà‰Ë¼ßpepNº'Ó¨…¼'àsOÇw”Ïd|‰_òƒ<\¯øRÍZlãÿ4>Nöþ!ÙO_û+>ˆH÷‚ü·;Õ¢Ïrï¡ïÒÝ…ìH#¨O +ì¾}izóæ;7†ýY¸ˆ‘|r·Ž?He4˜Ý†ùkÀ5m°Í¤f{ûAÐ +;bôó?QѧS€ÞSi»vü¿Ûÿ1¿FÏÒþó+>äõ3#øÃ_úR9yCùSôÁÐFæ2Ü”Æß«<¾Sïôïo^åÁŸºßïG@w ¥Y=ü(ÙŸ= PÞx,b| å>„°ST¨RÐ’¾w>6 À »úp¾ÜÏâi#y/°¼À{åÍ6_ž°5ê(¾ ’ÊJf35N4Hïï¢ð£O>êçn*€ÿ e¡u/ª Z6½?©ª]Òóá}ÌÿX·üë2;!Ì‚Ûüq$´*‰Ôç: "ý¿/¡°2`ÑàÁåè†iíÑ3 è$ßc4€Š àY§a½¼$7¦‹6ýÝâ0Ï`†kè^ÈåîQ%XôâM3FGÎYžätGœ0Î÷{ôð«÷5hìì%ŸxV=uŸE `˜¿´€ô?Lª>Û®íÿ·ù¿Ñ®44-Ípû ÀÏ×®þ#“ ÿz àµä ¨¡¬Dìþ‚ð +®Óï×p‰ ¡éÑÙžgüÙÛQPªœ¨`'ž³w,€»ˆùŸ®Ÿ5‡~8:Ð9€tŒQÝB…fébKÍi/šy€ªÃ¼õ@øÏ6lý÷̯‰Û¬‚¶k@u>K;iŽ€Z:€ê¦&wøï—Uç?£Œ$ˆñ»ˆsVšŸ5)Wè‚tü›2øòN‘^C€HggÂûj€üaqaDÖOï‡wy@ضWÌÀ8wÿ:!¿æäŶYû0/J €dU8 Ëì¿Kx•ª ÀÛ·a3×'ÖŽ0ZJ‡ÍÜ$ΣþÎsÒ×2‡þqa»wöó™jaU¢ÍBõ‚ ëËþÑŠ[ž†8âLâ»TèAüã? æ! Øûmäöÿ*Ó4ëôÿ63F:¿´r]¿¿ñÛ÷þøáykætùøñ¿ÜYþø÷Œ€ð$-™L‚éX†ý6[úïôáà%úÀqþ+ö¯’;v‚ò+ ì¯"z%tŒ`7§¨ÛI_T0ÁW 2ú÷ÀÜôž9õ–Õ1m›$y•õÙp-©§]5oËžÊ÷~y|ÿŽsIaKfÏÊ‚ ¼ ð£Í’¦¡ØR¿ðwÍÏ-¢ò¤÷^^Ò)÷­pbQEÏûËâV©°¼~óÓÏ?ÍúP3ÐÙ > ˜>5ƒÒi¯ï"2`ß#a¯ÊKÙß~~:Ê‹á?$u™/.4ï‡ßy¼Æq5fw§¶9€ZÄwß¹9§ ¬úX“€進ܻü,Ãp-€ÜSD%¸H/Oî[̤|;úh1Éž¡ãô¦~©ð'Í%»n@2uÀ×Z:ÿ½6ÀŸ¼ðóÏÿ¨XÿîÿÙÒÿã«t<g{~œtmþÉO,€›SØáÿçÃöñïÙÞä“pBÀuì¿©´ÜÂ[†Q Ðî9ãÐÿôïÏŸ7‰_åþ'¯Æÿe `fþcÌJ‹ÃnÙ@ñ£ \¢X7 ëC›ð?¡óm0ɳÑ=GúŸ?þ÷œù¥T@ò+l– ÓKKÖÌ`ÉÕ˜£}vò[?i2RÊìªY‰´©Ì¢Ç¾èÍðˆ¶!Òwø T zwÿtCvõ_Þ={×› Š!ÖBª‹lª¸,KŽÄ;=d¿/¤ËÔè–¡;†˜"ó™8ÿßÌ<Í@lv-€F õ×ÅN8?Wû@ÝòØ!@ÏÔ7X>µÉþòµšþÃÌßYÜðjËo9oÿNýÂóÖN¦Ö§zÓZ*ù£ c|ùl#µÿ¯ P ðÏòÁ±þåÏÛ…ù'7R=éÿAøß†¾ý…i@èð?¢>ü¥KH¼ÿøÇÿóã?þ×ÝÇù/Π1:ø‹ÀÍ^ÒÅgÅ»ošlvô6¯Xæ“AØ`ž…eCH3pøÑnœtÕdU¥úbK‰ÒóïˆYòkàɽ @#äñÒµ‹t]£,º'ÍÞ%>ÃWç¿qþÈËÂ2¤)Í¿ ©Ó¤£Êµcñ +ÛÂÉâ`ŒùVJð·¶¹kH¬ÅRsO7¦©û‡H*€þ¦¶ÅK$4€Ïò¼€äX>ăÐy·ÏH`'¢&ŒŸp¥9UX#òtþõ¹ôp‘BÊ‘r(ºa BSç`vîË?>{”<—ü*Zy‚šˆöîÄÂ[°[E`ªËÐ@8¹ PÆo°›§Hþ?“o*KxËŠ[ÚËô®:/t~Þ°¡¹±¨žLôÅ aŒú`›úÙþä÷€œÈl:ß¹0çIÿØÿ§¡Wÿÿõ+ÂûWi)Ò+8̓ϯ߾×èoï±6-€?¦ÓÇðwûñ?ÿñw—¨Ø}s’ÿe½F½ÛË?¤‡üøŸçãÃùú…Ý~(Ø2§LÐX C„¬,téº9Tˆî?3€TÆ)AôÁܰî>Ë`·(ó]ôÉ÷a|éQäNnaá_ÿšÈúïü$`éÐ ƒ4F@uÞÌ`ÿÇ·±ä¨­¿^½zv~hR!%´Ûã¦@µ¨¤µ3Z’ïƒ!Ž.ªù^žÜ´s‡ãqn¯/GYèqæk6Ѿ(‚-ê«–ˆÐà âXÝd¿€m—ôÏ;†˜ÿ‘ ý!xº÷³Gþ Xeé°÷9Œ§ +CmçùŸúê};z“xüøÑ²ÜV·œ„ƪû.ÿ6ì×^¡ÀàöõAtZ*&à`HŸª¶¾9K•?xV*‡¶ql—³ùøpàÿ?þüóšøPw~þäãd=Ð4²#~û<6u~¼‡ P”NDø )·óÝpjò§×¯û÷ñ"È("" ¸Iýb¾³ µÙÇ÷òù+–ßhŠ{ô JDÖéËÓ7!² +m$öaHzõ…]Þd SBkyn§.7r>tª‘,=Ͳ|‰ó&<Ô)ãÓ3áØÆÝÀ!7@îÿùó±úsYzÔû¹U´òÓ ++ꠧ錛úˆÐ¿q›þó Úʱ|¤{!ûúég§ðÞ¾cX‹hj _5ûU _g8€$j ¨”ÒH«T@‚?9Ð8Þ¨%ÕÞ]]úVÞ¾ 1út蛀Cùy0ßõ:XPàìÿ¹€~?sY½ÆÙC‚V‚›_aBñôñ-R.¼}‡'\ÝËoÝT¯uœ`t×±w:íDµM¢ݰÒýËþ ÿÿô§úùçøóÿøÿE$.ôù)çÎÿ ÍÛþ¿ûŸ4\f·<ˆ²ò¤O¨ððÀûšÿE÷?küý_û¥p.QjFƒ|‹ÿ™Áwßb9×}wâ×øÝnBEÖ1o3ŽïŸ ±wïlOä N¨bŒŒtKþ¶HSÏ sc=Q-asa@‘õÏá²­ÃÖT…ÔÐm6Q6SÈb+6zŽñ{”·(§ý½ã³6ë¿”‹\ l€´%»<u†q¨Þã¬ú!´2Ûõ§Ÿã ØqIöü­BÆœˆld?=¨€ÏÚÕ ÷‡ÿÛ߇Þî^ø$8ÿ½&@ø" {‡º»@?1¾Ç8×ÈüßJ +þs©Ïì~÷»‹ßùláƒ()Ö« 'ôÄÃ>ÝlCÆ“‘X\±Þ}ÊH)gh´‘XwÊ~Öú‡ü‡Ÿÿ‰@ 3@‡0pb8¢íáÕ)ä—þ_e«›iÀØp:›øKÛŸñË*߈?p¾È#v nL€ þq£ +þ?ÿZ  SxÑ8¯-ŸBqɧû<ó šžl™¦ÊæŽ\´œõ.‹3ð‹¦sÝZ»L·•Áez©—’¶ª+MP¦Þj¤yrRÈ7b¼yoÙ‘íÅIï\r-îþ͘‹Ù?fÖ¶:U¤àü^ËðçË@W™ýšÖ°!—ýä´e«óºiG¾Ün"f²©:¤*€á~v˜=›®(Ü請@+Xõî2_€eôŒòÿƒÏÎ]Øí0¤ ´0œ× +ÆhÿÀ¿±ž:Ìwpï †ÿ8ê§p3xöÄI½™åË\ûÄÎUŠÖ‘;ÝlöŸ¿|º²¨6<†`²;µi…Bºjýîsr(&„ž«0§v­°$¡÷çøÙ×þŸðÿÿúJ +NäùBÔQ®YY˜m+§¹Ñ!¼Äñ¸Cökü½ `çZÒßAiçÿàÀÉ]ô­9€ úŸ¿Ú¬GvåH4Û=w¡ìeþŸí¦¯+8 è]{犬úH%¢w<ÏðŸž?¶¿×ùyÜãR»jM¦·•7@ö{ʽ>´üÇ6>Rÿàu¿Õd8ö·Õq&ëw2 ãbaì£wAGÏoh“hìwsòM€]D‰=œ)ìõÕ~U¸Úa­K†©·1¤s ±CîìnUбãPa`Å‘âˆòcÁ,y  üRèõÕÕ³ò~C˜?È[}ôùÚøÑ< Óþ": ÀùÎY.¶ï(Áñܵçc_ÈuÌA¶çÐì€W`-U ™Mºu‹3AÐ=tÝ+®’€¾Ÿh®„¶³&,휕ø]üS€Þ€ýÂë/Ÿ}x¸¶(IÕ„ØÒÿã1ÞWü_¿–ýl?ú ïðgV¬ãáXþúo‚Ó-n,€²>®{,€ç/þÊ»o_¾úÒJ@çæ&ÒLOƒ‘Oç¯\?ÿ5{ãîû•A.Keµ¹¥UÎ.tË<´@vV F@Æ$Gÿ/r¹=üj†¡6Ái¨¥*å>‰:‘ÆUÆ×ƒ‰V Ä‹Ê‹Ï !s¢»Yº°!iúÔag‹)´ôß|L“¸žèüH«Éý´•¹cœoZ¤B4@šrLÅðî–ÐÂÇ…àÎ8$­ª{ÖE _!¡·•_Öléc?|À’M¿êx;Cgï(€¡¾·Û7{!·Ggße„oß®a<çø#e<ð ÜkþðÁx>­Cˆ…Ö³+Âû> ¿|f £Uâ·ìz2Î}¿¾±Äëf_úSíOï.®V³Èksy€8˜âŸÿüçÿîÿòçÿ+Òÿ‹XK4]šHnà¾þ/óÃÝ’ „Û½¹:9@‡‰ÖoN<@Æ{÷/p÷÷ÿ‹Ïï°_Ô¹‹LùkäÖ_îöÕ ð> ½ºïöŸ¿¼y¥vîÛÿ—¬°ÿ¹E)ä©nÇÿ"Ü÷5VÁ± 316oâYçXž,Ï™ôï¾ à@v3¦ÿ§ôÑShÏO)Û\}güCÑvÿŠ„][<ì2 |äæÐÇNŸíï?þW¹ß9Ivw ‰ß…‰è.o¤Ï>’c¿ÌŠØEßÄÔ{ªd~žT|¹ÌnÜq|茡El£Ò󻪞‡·/?: è–ɇ€a”´À-˜ÂY„œ–õ9ãÞ€Äá, ß ‡¾ ÀÈïŽr;œ^ËÁË’³Ë)æ„é¥54Ô2‡á{,4bš]þ|UÅF’üᵚ€þsS +û1[¸ÖËI#­2Àf¬ð!,«?å„·l€Z1vs¦'Ø!’+›nxX7€9 ®ò—ÙhXjo}x$³àÚ‹ï°×’÷óÒü¿¢[—æÅ"zÉ-U ý£ƒ(YÿEä÷Þ: + XRàÛÏï(iè–zıÕ­+‹á½.˜ëõmð>àå»9%Áb²Á] À¾ÿÏh€?ÿùêûôx©H”ÕÜ4í|‚9´Ï'9 ídSó«Í€ã¢XûÃNïà]zóo @þŸÿOH`GÈ/ÌLÀnûˆ¼²Â†Îå ê%ÎÐí @öË@2ß~dk6ü§Ë‚ðÓóK}Uʼ~]à£<°Úåôä!óí÷rŒ¦¥l%"Ñt\²,™YzúéåÙN•ÂÃå—ƒwE3ÀŸSBÕG tö9ʬ–£!£[û}Ö¿o¨®vÑ7%¹œØU*9/ˆ ŽdéCi"Ôõø;:%ç£:¿Jˆx"á³z4²¾4dƒ‡ÎØWžU—OèõŸ]=³çwë©®³ÁdŸb߀aw<éÕÓ±§[¯GâÌëwÞk¬(Û/P¾ ]j˜àóβŒê$œê¬Ú&ˆ0QRåe-T×yš?a+Üfù¢8"ü.à86±ÖÖ&·N©é»–ÖDRX3rÛøÿå‹orþ¨Ø7ÁÏéæ'¿m¼ö@û?²|Ì#,™ø«,€&so ±@3à=‚×À”b·œo{*¼Ñ$?r!ªÄŒYq +)_-°-Ïý@§v€äYCújS`EûMA[hµ€É/þë•*oèþ3P…žÝÂÓ[!o)|ÀлgyX\³Õ ª<öã¬-¨ˆ©µMmB@î¤=m*kÍý±; !Áj’€­bÓ¨òœFÀw˜_6ÅÂWe]v³ +v·?Ý:ÅøýáïBˆ\†÷r¡‹Óã,Bîa<ø=p¥YqÆvgðÄÉ8FìŽÚIýåwñáþ£º€P¦g’¡Ôt¼ ›Gr‰MN˜Ð´Tö+°Z^eÒ-õ±’:Y]"_Áfï9¯ AÙ-AÉÏŸ.ßEŒ$¼6 à€týàŸŸ¡Ñê9ÕåÀêRéÏI̶ió$Xþ©ð‘ߨí}DcÉ·ôW8|z$ì÷xó³ÿ¿¦ï÷Y ô@ç¤ì UöÄ|“Ê}|Œ Ü²=?ZÇ!À ÌÐHçìØÿÿˆÐßTjÉZyÖãß¹órþ5ž÷˜ •ƒžëªò=Û`•Ó$dëLÔªI£X2ø¯à¿´Ô]þz n˜/.›ËÁ;uø»6ùw‚”ÙÖç‡å·úñ-?%õðùÇcõDëùÅwjÏbj£æjÅòÿ—О¿&RïÁrj 8WäCþ®_J ¤QÖ +H”D‹§!й‚]&JCéÝÞ 8`€Y¯ —Ž;¿ÉûŒ> ÷_IÚ»÷d=Uh8ÜÈô}në y>\?»ÊÝ<×cI±(Øâ?Å •‹[@÷m¥tÕt‚£¶ˆÕOµa¡ l«¸ÉZ + YíÙòÿ6?)äœç%ºF5¦>£¢Ñ2]]d¦[…2üÿò¹J>wp²*0ke‚¥’½OÝÿ¨)œðm €¿ÞhàĈ‹\3 +à$†k ûqµ~”ÎŽ{¹ +‚*âŽùcóGÄøgO¡=M[ã5µð[ І „òlùGâmœ-kâ §ûaáƒp„^Æ.oÐ:¯åàe™Ì™sœSÒ`Yjš]˜ªø¤{·^-GT85OÃ*ß<E ¦†´Oš¸x}˜y1Pð®“QÊá_#üqÍGÉ,3?çc•G–½ÁM_çG3¢Êú¶„¿’Z6Ó›>»„ÿzC÷žót ¯£ëu[ä·‹*€)ÓË„Øì úò! +°BK~jœuöÔÔë `5¦:Á ðÒ¬Qzfçaaª]Ž + ý¿Ž¦Jpb´„Ò£:ôR+Z‡ñ9³Ã=ØÿV”ß÷£w±´œ=sàï­ˆG (±†)8ý—áÿ< ü÷¯¤ÚÁ@Ê4-îc¹Þ¸ÒNuboS‘¶0¬Ló›Î ¶È&ç@,€— ÷ÖA˜ïgJCýxÝ ^ØéÓˆ €<·wçJ“§ª]HY«Ù$-QB{N7‚öÑÖýaúCˆx!þP¾þåÛvg°ÎLz r3 (3͇NLß>Ï·óÖãGÊ-©_Ó8õ%±Ç&²®¦î´‹µöפjSeÖñyÌ#áN‘ï3@H6òŽÐ°cUìÔ ò"Tˆð˃r‚óĉ¤"ëÕ9€¼ `oÑéñögWþÝx©_(È”Õ&àã9ϘaPa^¥€~|½jQ7WŒò JÉbÍd¦ô†½ï®U‰‚[+WÈ|sB¯—D ÀîvªŽÕ‚ˆÿÖÛ[¾`)€ô  ½¿é}t¥ÖIL›Y[M§‹Õí”ÿ_>Éü5X›?´Š] °[åâ=€€þüÏ1èR ¨ÅõÄB¶L÷šÆCÀ°óo® ÖÝM0Ó¡6ÆGRä¿· 7–ô땊¬"m]¦ìÇ9ÖZÒ×92ÿØð¤- È¡©¤ ~*¤’a¼øHÂ'îRª ¡â/A²—Åôn¤vi¬.®Ùê9ãHüñÂÞªr úõÒ—ç§þnþÒœ¯@}Ô•&·{ÀKY‰=n›©­hf€Ö4bY—åñ°¸ûàÓ|²(ÔGË ¼aA|åO™O—l>Äž‚ä.€LÑûíèñùÝz_ÜULäê‚~QýÓãP<9”f(êÙò'nfã ŽS¼žU¬þÚJ¤ØT @½ãK*êéTÖ]êÛz»Qï•’§™Ô­3ù6¤7–Ø-€ÿÛ ó„Cô\ Õ×h6‘dle·cÿ± 1íÜqï!J¾@¬>¤‚|ìäQH‰“½Ç™ù@ à÷BXè£È‚½éÞCxôϺ>¢O'CÄõ°P%u”˜yX —Ö!ýóü_I1l"®”*9ã[ë òH&-g!îp{çrœãbÈ~°;ƒ¾¥·ÃB‚êÊŒE©ÃùX:¹êñ«ì­ô¦MrejNûG’Žñ€ +€ê9STNóHy·Ÿü@äy#À§ˆ¥sv ÂɪðÒë+ʘ±ÎÄÀ¢ý||_{÷€\[.™FŸÐ‡ú[Úyݰ¾9ŽOxy?0þp6¾§[Ò<p©UpÇz‹šƒz­UB\Hà\lLÕB®Hè¸ìHÒÇ +°:uÏ)•¡ Å8ó¤gðÿÏöÉ&–+¬ÿh€T3*ÎÚJ}çÓŠ–Ì +4QœT„ÿ_Jg7xSR+þª1÷$„k”ðbù²‡9øÇÀý¯~ìåó|Ј¢ùW*€<œ;ÐRçòIBô¿ÈûOäå¿ëÍ¿xMJ×Ƚj`uù!þxªQ,o4ÄÍG-‡<k½á·F‚“5ý§aæÉµò”£ È,Ïø¿õÅw±1uˆ»cèmP÷£!ÖÒ(ã ÛMK¹jÀ–Ÿ¼÷y *Óó3©Çh™Z‹A“‹ˆF:¤ö‡6ãC + "¿ág…þö« +@ñUì•÷Р´Ð“ ÎF4t׊® +`Æöš²yóùþ|ué´àlÞ—]ºš“.^,‰+™^„T9™]r"†k‚ÕsÿpýásJfDS–ÙXzj𨨥Kr0{/õ0Þîâ›`=úSr¨éÀUfMÈT)ΙÏ9Ù߇úz|ªÑikÙ!-BÝhºŒ`H0M÷)µüÚ$m`Ï„ÿ_¾H4úY؆ëÀ[ñW®gS0¸µŽ:à Á ý TãÛ€y@ùƒŒÍ <“ÀxãLž—ò5Ýl0ãùÎí§ã/ð¾u:ï•ϼíenDÈíã¸I†Ñê)4€&@m]iÍ•”/€ìúhŠbŒ¨t™pDâ5ê“V׿-pZ^°<±vk9x]º«HhOÕ»ƒ2Î@‚ò;jKY—>ÂﱩY}m˜*ºePÐ^k¬xôˆM%Æн§ä}XQðEjĨ-!dM¥ÿ+ûÊ~¤3B. `‚«à¿ý íÉ7³Ö´7¨+ˆ»RIÏ¿Ž[qó`MÆÞÀò0¨Çž)¯ï=ª`½;n@»(Õ¤PŸËiQιA”>»RHXÖ%Òþ+ݘó*€®sÆäJ +í_ÞFbÃýÙ³±&Ùy(z  ÍANéÖóÍ+k  }$‹‹¼c6—ÿYœÈ#€G¼x&ÝÅPwÇ‘ÎCãîîxW„#ާYް”QVÈRòKÙš”º«ô©~,–D°ÆþÚ½ ¼ìCO\õÞç¢Ro~MÆ 6`f;¢ž'Z \ÿôõgE|fº?»Æ s„=Ð# B ã šò¿âéƒ@ÎlÑS-àT7ÔS’¸Ûÿþò)¿DvP(çø™—¾—ø:uœh ë€=R`_ðòÕùÙùó7ïoо èƒ(®gŸ”•—ØŽ}¡ P>'$T^UZ’ļ´¤j‡æáþņ7>òj7Ž„‡“\uàY\Åù µÙ2dqt™ŽH+ø>Ъ‚uH5¡Y LvƒÒÚå‡Å‹/_o½þ¾òzcíŽ-0þñ.O—®‰Q$¸)6í m)¦‚mO[%UÇâÃhÁ˜¢z¡¿®@¿XäUþ=s"O—`CÑ 7üäù£0ÿ̆­b>²þ³ª £c¤."?§=Ÿ=§¡C|Þ@—€KÐÒ!Û™T\]cûðÁ¯òpŠNÎÝ;åzÖ¤`b¦Š´¿Ca”GaR}ɧäKÄÛÄÁ@Î…!·!¢+‰[èÀã=þúE}‘´åw®_3J¨-d"“P”Д2xiø: TÂøg¾£´i€Ípü¿ì]£6)üiÊ-Ñ;üÏ5_Ñéûük<é†(Œ¾Ç7Òïãc*ˆÎ)Fž?¿A"Î߼鱼‡/wá›$X˜Ëø– @¦™sŸ$Ï[Ë@ˆcÈæÕ÷PÚÿUØß¾Î£ªDÃ{wÑ(¨Ô&6@N© ¼@…€Ý<ö³ ¶>>$÷åŒê!ÿmøÖ‡3™}"ýe ™Ën¶°ºËÁ›ÅuA—¯sõÌ~Ђ¸³=mË]üØO$ÂÔfž7o_ú' 'ÕõE-Ú0ƒ~DmM.?p +ñþãØNXùŽÈ‹Ð$+Û-ü³o +d¿.’‰H¯I@»°ï¼ pñuÁù ×!î¬Y¤”îí—ÃÇH 7Žv}`jÔOJbYŒ•˜!ɘ1)(gzöLeBñ¯ÞëphÑ £f·¶^Br<'=& ™:n0ïдHqæœß]À¯Œgð—í Ö/•HÝ ¢ÑLõÞøŸ‹noýC|†Xˆá?4ý£?·´@&°$ßbL?D~P@bœß¤ãT”ä÷íµüÌG¾¥È2Œc73£Z° Üd@ ±UÔ×Aîù}§ + 6€“˜ï4›òÚŠ˜¯Ý¼æ£˯¾¤[uŒ@Q¡SþÛlo¶Ž^ÑíR~…Ü“Aˆ,‹Ý¯åèu› žƒIßRÙ$o(~Æ/cøãªÔù”¥M¸Y5¾“蹿j+Ñö/_ßhiäe €!FÅÇ8>ôsé/0ŽÃÿȼTb7.L@ðÁ׈¿t‹ÄWD«4ìþ3 ×CÜß=9{š×ü‹ó\9k’Jú&ÿ…!@mãœsÍ)³Ìz…mVˆø  ñ­GâR+£Ö«C¦’ÉU)dó0e™ ëï™ñ³™¥ …ƒжHhV€/)ØéÿÓý{Å\`Š^ ½„7Ù$ÖÆMÿoÓ³={o¥Gœù…£ï%‚d©ÔL¯qÃÀ©pvþXK1hW/ð†uàe+x’:Ù}T,õ +z-J’ Ñ¡‰eKñ6Œ´No§ p¢-  ‡~~ÞIŒQ/o^GTØò™L{5ŠqR\ŠB²œìIÄÁtOØÿ– _­|ŒU½-ù*xé{!wÎ.R/Ï(×&Àó9< ù‹ü€ïmÀ~œr¢Ôùóí¢4¡¿;€ÚsýwðåéóÔËàZjœàüŒ^ª0ùÿf Cx2O–àÜJ?n:­€¨•Ñm¥Û1,^dþÂ'Þ¯žP×üU?Ë£³GM£þI5ôüÂøX˜}øÎ‰®"9Ä eÄDµZ–¶dž˜)ùëЛæc$Ò3‡\u‹*LÝyÅm¬Ü-×™Æ?m‹xôŸ9à¿<±࿚ÇHÄÉMQ}©Þ§OÔÞ+­ ɦ€ÆµE³OÜ~îØéÂá™@üÇx~nrò?4Ç=ZJ’±3?È×0«àI·ã»ëL<ûé gcz7Œ„,'€ÏŒcPêȶÄÝmÿ™ Ðx~n¬>Èm’á@ƒza£l0ÙCK£Ô§MαÚg +è°wÿÿ'øÍôù§Ë ýwÿ°8»ø³oÿ7æ-à7„ïü®±|• +kîcnù¤B~¸)ñT´ÙÙØ(4Èü,Ct°6!@‘•ûÔšß‹ˆˆï¤T” ”"ã3 +L ô"®é´r{«€ïù^\\\1xröøÉöBðãGMzÐD 2a_E&wˆF&fØ• CFƒJDKE JAî ÑØT§`|£u¯žÈLך霧&aC$AÏe•­”0€•êKS +åÃÞÍ9ó3'6ÀÖÿ{Ú×GÛ™Iu>‘-}~æCå}ù˨çÛ +fÀM>ù®8¨©ö- `ñÿhxˆ ÑË+#¥ý¯ãÆÃZ  ƒIí²³@k—2ì€nºocî¸éƒÞäi¦(•W„”ü6þW¼ÄÒ^]wÃþGºJꪇҞð÷/ý³Ã @¢|ó±Dtü_øN]W?Ó‘eÓ‹ÇŸ7¢Ã2»íXïáŠ;àô†)€õ§ˆï×=[…AŒŸB|?€_{4¢ÊìhLKq6a7VF~’Å{6k£„ÿ*¬ÿî„‘Œä×ɉCÚÉ}¡ÝľC„–ë«j\½»ð£À«ûg1µ ¦Ý LoM’g`\b¸¶,„°L¸1 Jþ I°¥ªVxêìÆ5­z/i¯áìjŒ‡Ò~4@îÿeú¯‘o¿¨L/9~a(±ìˆ¦áé(ÖèÂWƉEàÐÞCVlÀ–`¹³ËÁï!EØô GôÊr @¤¾bÏØ_‡ýò?ßUìŸ90½¿«Énبj¾ˆdÇ|«¶!ׄ“½qtzØØ_-Ñ$(…°ŸÄ›2vFÓíˆØ9­@¦:¹Š£•ù~Eòó »‚Àª¹ÅPS…IýÛ'8³ö¢÷vûŸ¬äô%IØÌgu ÇIËæä‚Ìäšœ(üýf +4Ò(wç ± ‘òw,zÂþãêâwC ß“óÜ6 îOÜÓaæ_cÄüÔâ…S ¬×‰xAi3xQ[¡ +À?ú¡JÛ‡fp²¼f`×^ØZé]=7g÷ñ°ºÿŽ t½‡ð\׉g?¨ywÌaãí˜Pʶ@ËM­¸¶È{…hZÿ¨˜“s×C‰@OÜhéK{,€4¯­ _ˆ¸ÇöÇ +;ÜRd-Ò®…f¡Th€ãŠÎ$À}VÞ;ˆþ×ð½ ºÇï‚/N¦î.ùÜæ%]9q5FO7ðV}di)~C,M ^™È-õÀ +²[Éèjk4I$§öÏá#·$J&“=—éPmù?Ïïä †ÿîž]^^^ï6€üŸ®Üĸ}ù¹éÚ¦3³º·EJÉÿ91§noµá: -¯<ä)š;ᲓåÐ,€;s÷,€ 'scܳ“{‹P”äž Rœ,–9!R-p +ÇóÓ§Z˜Ã(€›ÌÔˆÐLðæX{ÿO ]ò4 ‡¹_PÇÿÂ6q¡ã-àâø¨t=u²éïqöëPïŠÙ¸¢Ô‡oŽy—nÞ’ó£àWÏÀf€›ZfÌ œïBü•¥!ä:Bªh¥æðç@J¹ ØTÉE^ÿt›oõ’{ÃÌ5'Üy‹’5Qs2Þ¦$°éò]ŠzÛ$ 0!×’©A$Òó$g-—«j^ä°×˜mX>@Aá3f§pÏà}fÿÑ}Ð8\l ’Ú»wÈÍã/ŸI3kW`øŠƒl;Ôàì˜þÜjeŸ3š€¡V$¥ @b†OaùnDž¿cïàä»9aú;*‘fë¥$» ³‹»- +á~±êçq• Hì Çô×{€ + 5Ž ðš±¶=8“‚‚Ô|Ð’½Ï3ƒÁ©ý/ýCúYv¶®uwCgvp\ê$Î aÛ>Ä0ù‹)Sžh³8N²Rf™½Õ)@ò ýÏŸyúÍKLöÎ'`ø”¤wÒímüHüÎÿ._syKÐm+£áE|·eCº½‘ÕH¾“€ô‹à |¯®žÙí=rÒóÞ{²òK}Ä>Ò.Þ˜ûB¢驉’•A˜WF˜Köë6|ÍNÜ~ð–ûdrê,×T£uôqœãj;J½3È/>Ǩ àÎ&ýo)pRúàaÒös€ì¬´ûI=Ä»Èo+àí ²ðº@æÞ¾ÐH¬vª¡ :´:Zö"RN?Xcýø±X=úßëæ>m·ôtœÐx;6a¦ /(Žýø¿©€¿£€ö†»àÅÑÖÛžŸàsvHûôñÓA™õÖääñ?xý +eæ¿ó€Õ¡Øâ¬ë8ÛŽå4|-¡z<[ȱü—ýº§%±Mæ—SÌßú¾¡È´ì +À9€1,5îùóÑ/_«^c&Æà÷@O¬`”ˆâýÊ`Z9E•ĹÆI((£Üàu³®ú6àåÕeþïý€$'sã4ñìü$y ^¼d•̧PòÏ%,åº%,GS¸wõîKâ7|Usl~–Ô*€¨¹•F®‰V!WÖŸ§öa¿'-ëÔv¯·õž§Ï?Kx·Oi‰ 6¶C¢Åÿ$j’ó iSJÏÅ4à”žh€x…! åþ,È­?7aþÀôˆO-€öýv$î‡Ne9»5ã>°ÇfÜ=é`Œ`JæiðœÕSqMžÑDT‡ÑHï_ ºÀ×»=ùy+âKò—¤¬g’rÇ@rC6ýƒÇ%|^òœ‡n°£üœ„‹ÍÀŸ>?JGzØëU ?«ôŒoQ¾2Ìh$,Öä·¾÷ÇǘϾ‘û™xùºß4%Køâ|çQ¢|„G9}güÏkùÜËÌ´8³Ž³vºÆz—œÍõ÷Àª&äu#˜Ê ÷,7Æ;µù\ƒ`5· +«@R±¸èŋ̲ú{ôe€¥”ß”áÅ"›#UETàD§C'B!PQUR_Yuõ‰€±./žÚ$ÙY’šYS€¯ó±n²”)Œ§@ö:+€‰Á5Z¨ÈÅtòïHè`j8ÉfЋü*&½VµÍŽ¢Zm©ìPEðùÝ¥ +€V+õgÞÐbø¯nÜ€YØš‹ê†ý4ô—ÏÉ€üªÍ5‚RÍ„å 6¹‰¾·Ï¥3Ô€FÊLÄdÉJ¹ ü(€{w^ÖÞ›ç`œhS^‹k9äü„"üþõy‡Àó‰“2mØNªËz`ÀZS€zþx´œëÚë h† +ƒd° ³RŠ™<­eg1åø&$´*@–݇ŵ‘êNhŠè˜)…¥<)×{ ;OJu(Ïðnk»ƒ0#€±¨ÞsçHë%O•Û–Ë}€×÷PÀ[祈¨#a†EP¥ Gú5M THá9¹Ï–Pbµ|ñ×¼x–9€ÂɵÐITò¢¼MÞÉŸµ‡lå¯þ*^hAO‘L& +mˆ9u¦£G£’úXR ›ÀâþìÁTûÝoœ©ÏdJÀõó'_ + ?ÇÔÌ4­^òRÌ8ÄäÕ*ì[¯T)94©&ºmŸöÞŸ%wyÂýØw€òê€P¿P:ö»":’ß)TkôÂ(†Ççù?@@ p&?{–H0ZÈoÃ,éßù¿¹¹½cÆñÆÿÝcµZAÿŽðþÇQ 1òu„Ĩ  Š°³kÇos“Tä=áüY_¿‘ étù%„åmyr°ŸT‹ÄI@B†þËø.™»LûŠß΂ÞH>&GÒqqoiR]™k}·­3Ÿ?`h«Krj-àúé,ŠU(û?ç¶£-·ÒÏ{WQCIÄØ[ƒ¯èØD5¼éÅ Ø·OÞÛ]ËË›ÌØæ÷E æ¿àw”ûBé¿g 9ÿ1º”çAþô?Êaþå7ì¯ +èý¹:…íJðû—ÏUfÊbqÛãÉèP„;#ýaÎIî€ÎÎ3ˆ(£2 Q¼ðÚÞ,¿@~@;֔侀7+N™tŠÅæoÁY6Ëq—8l š`…ê×YÀ,Öb +XVS@ À—8å†vÞøc`·ì’íÅÁ™´¡ gNK àå;¸æ“§Q™ÕpÑ 9ÏRaø ‘S§ºó, ÀUþ¼ûâÉLÿ¯-i,4ýÌÍ“®ÿI`å:‰±á\ yIåÖ4™R“åŒZcŽ6ä§·oSsç ,‰çÜH.K_<<´¨:^mþu&Û~ÎOÊ»„ ÁÙì3Eh”\m%Lž´Œ+¿>Èós†ÅlÍÏ8n¸¾ sË,* ?ÉP„eäâ¨pô¿\ꙕÀOŸœ0œlÂzuLMåBRI™5¼L¥7DPë܈ Þª>kΪóé,äæ„[]íg6$|ëø^pa(ÞÏyîv³¸¾­{ÄÑ€÷±¤@¡\èœ"Ô/ˆŽ{o€ÞwaÓ÷,€b”ÄG)Ô¸¹QR—RÊP!Ϥ å#Œ¨¡Œc´'–˜Ýšhå^xó/ÀÒ1´Ê\ÒA/r”´Âñ˜´N,€}°óLÊʵA¬áì”ê€ ÏrGûžw0]Ro&Ã}pRr©ìtçû·?ú$Àó±Zµ³Él8µ¢KP¯ZN ¦Ñh$­‚—ÛÀ»ÝR&‚·Q/ñO{ˆߦo’ÿå~¹`_ Pú÷“@™|Ò!Àãîî d_2(€ôË$‹Üp©—“áFv†ᤇ10ìÏÌLè”=‡+ù\˜c¿{DNÁ°žÕ1 /ÕÃ{+ ; °\Ö¹õ¶Ê¬¾ Ä`§ýø¨€ÐZçLâ ¿öI«rùJÝõëO”9ÿÂ"4Âı‘Íbm]r iŠü Êà‡÷%Uý;æOb…Âo @-ùv Àë¢#±8k—¡üÑÁIŠSž" +À‡© ç4b Cðyï¯Õ*^CxÀ¦|Hîý[ûþù (é¤m:9Ú Ãph¤ÿmÿGt³ÊÿEº‡',É7Ñ“¡}œåÅÝ×S_½Iy”æwCÌ—Tâ¨(¨»¿È8:¹:L¿ÃÿïûûÇ&¼yKÃΕH‡f©°åo*ê¢ ÐS¡ü¤°W 大ŒÉ |0 p"­ÂÙî·#Ô` à$ÀųtýÏÑûw°Ie9ÁúLGó^NœD&|TC ȰŸÔ%Êcëû'>hun?ik´ ½ÄˆìMKO臧}òíP¿§º‹”’W @žüöƒMx‘³›¤f1H0i»÷> +ãVN'ï9áÎìrù] p›Ÿò5ü¦çÏ‘ö°kC¸_ s¸§Ï ƒÏo†à!úÝ9€uX:ÿ!½ÌgiÂI4nŽ˜âʺVŒe7.îóÊñ"‰‘¶¿ŠðgpÐïQ ìé9=,ë“d«¶hhõÞ'…Þ€»üxPºžðû°”Ëõv7^×Ýw<¨#ÒôBZº8fŸÒXp-€U¸¾ì@cĈp`KBdà,Ç šj® ›`ÚiB‘3e>¢¶˜ñÓW:"%° cmߥHÚ;­>Qñé´+ì§$È$ÀÕÕÅ“pßÏÐýã3Õ ¤ZŽš[ïÎ'«Ÿ¾®¡¹åp—Xî-hbôÐs)NÀoàDÀä1à`@ИÉÅÊeKÙ¨:4\›µm…CÉöü×¢õ¬¸·?‹íËèIˆ ›¥Y5Ëq©c²L†Ñ:Ʊ¹vævÀ6ø]ïX÷oÞ³PÞû;÷a¾{Œpyf¨=¾‡,€ÄBt—P˜0"Œ)<ý¦<eqTd7 )WÎà&Vñ²/0/ßÖ,öQÈ„˜Î(ËH1Ø“Íôÿ$R0zá”ý`˜tB¬–G¸;ÝæT<=êÒuíï¬u +m€Ý8L_XBʾ +ºYQÑ0}YPäªÌàë•cÄDÊ ñVñð¡sçít‘êÕ[L%Tï× *˜ìêMÈŸ&ø6@§ù5 'Q*¤y¿Úc6ó„~™¤\C¢Ü”É#6˜EY>|j! Éue~€C‰½’?g ‘ã8ՠߌVzI5»TÒ~zÕv¶Tzþ !c€J¯Ø€épÁJÝ´-Ôdd¶ÅÙA`ôZ®¿‹5«¶p¢Þˆ¸Ö៨ßÁÐôí±»¾B„­”ý¸ÏcÄúO Êâ¤OÚ!ÃŒ„@ÆÂ}ràœ`®Ó1]£cÒ†!áÈûy 'Žóa¹¸4£âò_¹ûÀ7MÍ’¥ï ° P&Å ÿ_¢Ú«J­Ù m¥ìm_<•ýælÇ®kXqº3e¹8ø—ýwæ(÷VÐVp´Î;XÊÄ‘'©ù= êD% <ägX’¶˜!‘”ÔHÞHc䆔 Ivò©LoÈê´=\X !\àÝÕ6x¤ àq¿Étº¯™Ý~¸¶Ÿ4'cÏ3JÛ£zž¯Êp±\f)€œ8àä`à8ëØ4š¼ÉX;Sß#«i—\Þ ©ã>VµÍÍÏ1|Æîg½Þå'¯2?Mžf­RJ6É’–ìk9HHïSÝàÓX~é—ª§ÿϼç`ÿøY'óÐÉ¢ÎJ €¡§["xŠ‹¡él(q¶ÅŸxÇÁ8@ʰBËýc¹Ç¯O €ò;nUÀc,€¹ 8J`i’E_5KÈF?B³+N©²kä‚ó{ÁÍa,%9.$¯°#Ó‰£@ä}ŠÐ ÿ“T»ýðÿŽÐtÓÿÃ#»D‹0\Z˜×‰wŠò=ëéþè4¨Ë¶¼kÝÕùõqè¯! k_kÑP&¥ÅÓ b8ÃÒ{Ÿ€ÓÇçLóÜAWõ.€ãv¾ø)ì_é)`ŠÛcIõõË2¤%†¶q%!µ‰#™Š´Œ(%¤ø:8¸ÿ/.ž|÷ø ½ÿà‰L^Ëp”ØÿœI@ÒðO™<=.xZ¸é= 4ºeÒ ܸөãÌ•A¯ÌeXª¹ ‘’–‰ZEv6ݯtëΙ:ÐêâÈþ(;ª:Vüvñì¢k;&k†\â!ÇéÙ“oõä:AŠ“œ‰¼ +;@6§Y4>Þ9€üÖYoü¶ÿîpýòù"Znô.¯‡ÝqŠïïÿ +@pÏà&k´Æ|—/_­ÃÐÿT!s>à‰ìÀ¤$aµ›`­ß„ |ÞK´,@Ëà‘ZXÏï¾s-†W’.Ev¯´(Ó¬»Ïµ9XÞC\ƒNŽ8gXv: Å¢1“uu@@†4§“€¾å’§E‚5`ZMô±Õ¢æùû7¤çŽc.Ì¡2‘S‡!€h— *ªyŒ¿‰8êæ¹D6]N„ësr¨Pvþß1 +ÐóÐÀÊê‹è6ñ›e™¬Ï€ºò¯¬á4±-ÝW—m¦ÁÚZ=ŸtòL€W5§$šcƒ•ìm•ÝŽTØOŒ€ˆÖñ¿5¾Xï^ä™ÇISm™„-Ö×Ô¯™8GîqR}#^[Ü'ˆx‡öÙN¬oùèÚ%;ÄÎjœÞRw,€óç¯#>}¦—R¥\={>jXÖǺ#…… ìeˆžBö˜R9Y¹D¯`¨‚@Š2?Rº)%nCõý_pBRh+Sþ“@ÕÉCsÝC~ûJø‘2«¨Fr'Ò-MI¹¶àÀc—ÃAY·ûÆ»¯Û¾k|ÛÞæé‰*€!v»Ìõ½.ÊŸÛ~QUèÙU$¤dz®*¶Î¤V´2Ñ|…0%É/RY +7":…܃žØ`Ð-rKÄ0bX1ô Ìý°|LúW<{B·ÏØ_+àÉã'šÞLê¤Ï D0“žÙ +Q²³uk¢  EùôÙÀœÃ Œ›øÄãþ+9u0ÔKRæ'×S?Vp›cRžºŠÔ”Í;÷Žüõ¼c 0ÖØz»\oªŽ£š‘Ý©¶´ ªôI(WKD›X 4ëtüÛÂ!=7({ Yo×[â9P6t‡[Q¤—L°Â(Áãí†@Hs7 (ýñ³RX P‹ï”¡ïŸ¬ dQ .¹ &.Çw‹Ð{þtø*‹t~=DÒÏ,Äh€ +ön¨YM’8S¹IóE/ Bx¶Í„~q'b°®ZüʲûXN-ìî:X¾ìMwePþÏb_=ŠIÀÞÿYbSdø, `$éúPÙ†ò¦²f<’ú¦†GÞ\G"¿Ž<Æ_Ö‚#½#¤I˜ ÷)ù}H5`è$ ¯ž?þ•Ôr¦`$4š›)wŸ¬ò$ Òb=‘8>• -, »×&¨z•‘VÙAU@Cãëq`Ïä*3nrj»[¢°†}ƒ²¿3E€ï{P_-ŸþêöÖƒ‰s­ýÁ×°ŸôI‘ähFU_óv—H‘hs´]ûÓOÃü}Ùá·¶obïçÒ#WH¹[x×™ñ·«ÖaC#L¬#›3äÔ jÁ†þòÿ »U’®ŠKºr”{ oß/:(,† +í s)ƒ€ðê±M±LvÛ0Ë÷ )UCZ@xµ“«ŒÍºó{_ïñ­ÍÝ_I„›ágúº)Ø—ã‹`dú¢/ë.€Hbg±ý¹J’“ÝA-M›m³F˜F°`âJ'ì o„ +:ÊräC¢Û†vþ¹Öþðƒ³€ÞÐhï `ÄÛܶLÂX?Óa.†žäPR?ÃEdwÑ[€`Wºf¯ìr9ÌeQ TOP>r`ÎMº¥šAëÈW´ï¿u–”î_‹§Îd§¾{vuíÞeíÉÒ™5­¥ÕHЄ“µÚ†‚z:‘<<©N  Y”êH6ð«ðò° ±å?¨-?Œ?÷…€(€0;ÔÞŒ€µEhD!èÀŒ¸'C€éPˆ,} â:`¢‹E»Ò›óøQOüîÇ>ù7À›jÎu`£?¸kܹ @‰ûÊ|#[Ú(€ñ ÷âZ‚UŠ­4á÷,]Ç›O÷¯G®(’ó¬”ëµ4ãWÊe!û}¨áþÀžOßäÙ¿Íb•¸Dœœ,œ Ììà'X2&IÕ•_‰  *ŠŠ2Ç>÷Sú,—EjØ‹©ä¿»ü¸Ÿ·žžÀü¥L;$H.Âì=ø‚%mærüCÙF*k"¯9‹¦\”€ŸcB³e1Ô'Jö“æ;±“œk:ûÀ„R1·[kÙ‡SÏÔô ¦Fª[`¿ÿý +¢#4 +À¢áP)’I!Ì ½cFôþ~ÈŸ3ä×2¹ åêUD†Aøuª ` C†W ,€¬P|†üЕr°¸b–óÇ¿F¬$Ð`"ºžg€¹€ ¥ ÉÎ>(ÌRæÞ5ø!€&A}wRHÿ?øÇ €j¡$™ƒgù/r¹™ÙMƆ L¢j€%;­Š–£äÓ3ÑŽØþW,A®Ø°]¿|³?`/BîŽ[ø6¤ Fø:x|0™H“_%ªOžS³×ôÄÊŒ@«Ç®ü_ M±ðÃçÓΆ-(ÇÙÝÚUŽEì¦ù1@Ìaç¦G„ ~ø‰üG Hÿûs‚Ü`ô—×x‹`–„ôë£ÿÔÛÒœQ2Q–9 +ˆ#ÙY‚ Üæ/9ˆ³F?&`B¶ªRÅÒ^‡}T]oJ~È @Ô]?„>8VÇnV®TÒÓfy‡IƒBÕ;„“ˆZIáˆü’GÚ°Ía±ß%üÏrä³.NY-©Û½/Ž"söãøû9~5Ñ-“}1WHúÊ¡¾ÌœªŒDíÁ¹"»Ê²0Rþg ì ßö›‡»s½¹&’&¥yŒÀÑéÀ|}GvX8“„&CŽî'Þ7»–ut\ê9Ú°®Ú|³š…MΚþºåXxŸ¹ß¨2óŽçÓ|bµÖJP‹\ô63ùc¸k£ÐN£F˜"˜ñ(t +:þv,Ù‹<ÂËŠn¤´[ ý÷ž]î³›À &€îX;v¿}—!@æç–À},8¨gâ=”ˆka\ö'C·Øë.À žVUæ‰[Ñ(¹ fºÆ¿¬ýÜg€|ìÉ®_%`ÿïö+`y`ËÑ*ÞÒxîÙ NÓíÛt·^N ¶ú‰‚rj4Óp;Â_²?çÚ#í:^ùšÝ‘ñêÜaÿh€ýéDCŽÐZ×ÉÑ22vN ×oâlD +•Ô Ê¢H®2‡K1»²²ß¥‚ÈÂH÷hôkØŒ³Yw!~¹´¢yLÇzëõ€:[ßIÕáxéßæ²¨l%á²ìîÝL/þWa~z‘G:¾œrÄÜ¡zÊU Ï,¦6¯û“½ùÝ9€IŠ]æb*e²~ŒUIÒÝ,€%[C2-€Hhió5}þ[á¦T†Ù)ÀˆnÆÄ./rC¬€sâXðþˆds‚ˆ¸¬ë[úŠ|úú°6·§<ÁøR$aî8 +GáaH§IKP|Â’ŒšbêgSI«W  z.Uµ®0èßGžÊûÿü èàd7öFs34&¥ˆÇ cÌsP«X‡:­âÿôs~Ýû¼ßz«¨b]ö»,ö¹@âÎî—ðC ¾¶Ñy5¨GËeØò3ÄlŸÃF˜"HIh5À¾ÏEúô µÚ^I3{ï¤ ú©4“sJ€Ä¢ŸiRÒ*ZÎðbºÌ„U‘Hˆ)"•ʳ¡H–Ÿ?ýæÒ‡ÊÿŒ°¾£Û·÷7ÉôÅÏ_¶u‘÷&í&l° ùY +¯Þ¦h£ºre;þI·á¦à®C€ášÁõ&Ä´ÝY7w¶HV–O£ë2ügQÕùÈ#µõ +@ Ðå XnMVE1Uë òPÁmr# 7‘R,KZ‡1qÁ6pDu¾²­­W®T×*€ï¿}-³ÝÃ’|ñŸ=!eÿÆÿ‰1Š%àK¹‘1 °Ó‰={ÄH®H9wXä3@zkâ&ºxûòy¸ðâùêŸåÿ\˜Y»ýïl +už)V€V³IË}HEqTGî‹7’Ó5œîî¯B9z»× 1¸F!¥k¤§€•˜é<ØÿÂo‚œX&$E[‚ÊÒQhÝ×öÇHh¡“G•²ˆ¦<Úð€œt‘J­K±:Fâ—dí³À(Fÿ!‡§ßøÙN–ºÝúù «;åÛ\!³r6Sû–š#H˜eØLë¤ÿ<ܺ6‘uq²³­aþ@ò‡ÿª€ÑtÎþ©ë.¯.| +ðÙðÿ¢O +ó1© écÿ;åi©íöõ# + 1纯¹$1 ïî”Fj€Wpk=…·a±8í'óår9 (Öñ‘MÃÂy¥ËØUûÙBû’_Çyf„K¡Sn«"ÎاÏBÌR8®Ý–¯E c›°Qcdl›2ŠMÔíP§ŸËm¿2èâi-…h€¹–R¥ !é–xÝ0[ç%ø_€ñJëÙ‡“]»,ŸŽG T¡³ +èõ{ÛoÝ7'TWtþÒÿA `í ÀöÉm@’ɸ' ¿­,… 8hÓ£"‚#uA½FÄ‘„Éœ%´°Jølý˜Çp`,ã«*€³ÞX: ) ‡ãé͹æÖ°Íü¥”ã™Âj+Èßðß:¤Nœ;0¬¹¥.³6VO4™áþ‚ƒ"ɇZ~ŠˆáŽÆF;—˜GQ“ªé§à¸–#y~þôî£.Q1äDþÙ¿Íå÷kTA9AÙpsóo¸¿õ=›;ˆ±Ï@I.1Ò?FšBoCz6A‰6À¦”£¨€QÒJ¡ãx@%÷ˆÿï¿a˜xÜè$üþÇ÷ßšœ½ _ÿ¶Gm’ˇS€?&sþZeg’"6ÀÒ-yù¶\à|ˆ7,k¸õWc8­.Ãï-+LÇ5Íl³?®ýÆÞ³^LéB~X1N-€¦Í m°%çh‚C,kœêEžè½é:„q“¾Ê_dPšI&‰§˜®ÑGã×ú,@ îÏ˜æŽæ$5¿öA 3_Á‚SÃö Þv”Ò˜ˆ¤üÎ6 +JQ­1Ðfîq_µâg³^®GàÁ­¿ì¤£f ùgþ/ + Õô¦_Þzp@îG<Ûß´p¦Ÿ¼-)¦ÿW§¶™èùÚ2¥0­q®£R Ûá¯{éêÒõ½Ù^Í;š@»!sADoÉ`¶Ù•(­ÚA ËhÖµ´¯«Hᕯ­ÓÑ|•nY^¿¾ùè=²,  ãøQZæÇ¦ŒÄüý¾úMsÓPºRfƒésµŸéx/,3&™¢ + îÄ È@Gµ€5J"[U÷ÃØ}éz¸Ås'ø¸¬°µk©RóOAœ*è›Øj‹Æwvܬ*MŠg±rMZÕ¯)Ø ­fêšG”Š[„“C… Ó?¡#¸R‚·H£1\ƒ£ú§sô&@²â @‹rC2]‹é7y™+ï*$Μ¼{ +ãßdÉííçü3@¼º×ÉU€ñ'/"þY#ñÝ.ºfª‰P_ œþK×oM½Ù‹Óù«|óùâü™¨"Øßz0‹mé’“sþm¸æ’ìðçYPk#O5N0q€åô‰ª€¥ŽXô÷é?‰1=~—帲)‘k!ôA³Zì*¯x=Š…—Uv2²ŸŽ;­Ïo ï÷sþlóE²_(¶»°`,€<Ü8ù÷U*‡ŒxKà)Ìg‚©,ŒÙt ‡­‹jÒÒ©´[’BB0¡^¾lœqÁ°ë!NØ\÷ýÞ‚Zè>;€J%—)ƒ¨HyôhøêBføs`·¦½¶TmO['°îcT¯AÙÓp+;¥³ÃpÄÆ”OJpÅP©dCR7ŠTŒ„Ò¢CÇ×¾ +€áÿè°˜ÒÚ™ù³ÏÈ©äeNz˜Ý†ð:|ÓØR¡`_6· $ 9y6s­9šgjæ>dw*˜eF9íúeÿ‚Sò?fÿÅÅ“ÚZÉذ$ÝmƒNñŽŸj%Y$W³ðö„;ã$fŠhÛœ¢¿î»8T??·ÌO¿³«8Z!bg׎ô”ö$ÿ"  +WYGp¶‡¹O?¢X \ +¯È®|DÚæ–[—ßký»y` +™Ez¹µRøèËðêzZ!­nEÜ\oÌ•üR3òö&@½Æ0«¾Õ’dC°ƒ >Âk¸1R}=¢Ü +źÞ÷M¼®P½gN—Cüî JK A)BÊ•òu<Ÿ±Üþ7ØCÀJu¿ PýÊàE ¹Ï’_!ؤó¤YŒÕ9!IŽêÈ$G•Ù~%'ý­b]Ð7ª=~ä[]î|´Ù“¤ùhÂ7 wœ*Ñ'ÅÁ—˜úŒ“È9þ +“?¿ûp;F:"%õô=ü‚¥½×&q<,í­’Û $M÷ú[I†NèO-ýûO*Šðôü Uß»w(K^•E’–±YH}U›fe šû*…)”zv•ùˆHôquŠÏÿµVHÀàßø±!بÄïï)&0ªà,”í¿R;ÿ|´FˆõÑq¹Cì8Ì Ànïý”,‡'Plw `‰é›·‘÷¼ ƒ*ˆ"¢ +@ •ÍÕ2—-çœ6s$ì 'Aæ›8Åoò/ @Z¨¨œLÜÞXûòµëzêK̵o,#ÿ%wåC ¢,‰-fG/:¦!æK~ý»€˜ö2O5°V7Ò½Šþ68þB!‹œµc²NWâv±Ã';"ÅîÙÝÆÈ§ØØÆN2ú‡ð ¤gìä_gAS^ÛÑ—Çsn!É +È.%KSJv–9;ƒ$U"~ýòéúÝ—Dvl0×m dvN¦N2Ð[h¦ +Ð ¸’Ñêu_òëôþ¿j)ù3à¸ÿÙŘ ,û€”I’|-¹éúÞ’oS-²Óœ Ç*U'׿²\x‚ÌjŸ¬Ü»èÈý+éÿ‡Sö»~7€Øéº¯ôúç8Þh¹‚\¥ËWgDŒsßQj°ÿÙÅì]Øî¯ ~]@nWØŠò߀Db¯•á4 ¥¡À_ÛÒ©ã)  +à7Vνûç @hq¢úÌÀ¯jh4r³ ùŽ;‡Vx£°±ß£ˆÑÑPÄ Ä-ÓPEœ'.R‹øªv `Ê©˜sݰ¢ô÷áaïzßd(üÒ\¡¿Õ}~“[äT@ì¿M$sË[¯ræ£ÕKç-3›]?i©@ß`Üiƒ°kø}tº?FO}¿ŒD˜ë,MššÐP»˜j€ÞPe,€õ;š›ohx ÎpmFþ È¡Å"W‰Ãzëèx±ElGz*“‘YwJ­ôw +@Ë_ËXöË<³,€³}k뀦ì ~ôA ä´h+$ï»Å2çdJ=íNëOÐ=Y2$ëOn$:AéoÙQ•ÔnAÎG¹t´YN«85L1òÐùµs‹ ûGA¿:íŸêN6ýÃoF¤Ä·É=~ÿ<ÀiÀÉ ÁÓ§@–OáÝA@¸Ÿ‡NèÿÒ¿‡ .ºÙGx¾M¾$<ý?ûp°ûÈà‰ ÛÉ ^Jb¦]v'ôç6DÒ2²µ¨Êÿi†tÑÊ«Wù½ýµÝ ¢³Çà5éÝl3$rÖ,Iæ´®—MòÔË §o Ô$o4Ø%QG[ÈÐqw'îºÙz¯ªìh´“ȃj¡$ƒ&÷²T  Jï] Àt¦0Õ$ÄÍÏpZZÍVï“€JTè”þUy ÝX§ë0W¹,W"ÏaI†«Œqœ'P±ÐµT5Ç¥I»÷£ %£yž Ì7fJ +ŒSÿWM +orhryQI9^‰õA–™5Ÿa[IÆ*ÔÊCöÚ7©›St¬£¿»ºö©?éÿÔþ?9ûs$¨ ¥&ìFI“1Ÿ½%¹Ùùês¢—LÉN å»e­dûccù£ª¢ˆ $ +KíûzŠÍL¤þæ¸FŒŽ2†€ÕÜGæ‡æìHíRC¼Åÿðñ¢ÅÄÏoô$Œ6×|¤|Y3Õ¥gYRåµmô´ +†\–*©½:“`„jˆ×xóò?Õjñ› §MJ‡bq¶Ý‘Âë¨'qó…ó_©EÚ21Ñg‡gÊiÅìÎ%ó©°2ÌÂÈ+¶m¤ÝœQÀþ=öæMï!NJk¸$KÂp¨”ÉÙÄPð”UC”Lõ@‡Êvoö‘› z¨£üÈ“_y3KÀtvˆús¾° +ü%ù ¢¨r]ã¦D)’^ÐðÄJ¹S ƒã¡ý ˆƒÂ$h-’è^âSµ˜6²¿*`U0&€ô“>öÀþÿT$qr´†ÍqµØæáW#è‹ÂAÙ(¤q‚Û çm×Ú½Ù—y 0ºá€ÝPð¤Ò¿éõkÔ óA€Šb,ŒK;y„×I@鄸M`–Ä.ÂÝ”±]…+ŽWüø¾SÉûü×ÑxÏ¡;É/ Ï ¼ƒ¹ÆWèOúšöÑäP-³ZM÷F~ܨ<Í2+É%Ú¾[Ä«§±²74 î/¡ƒ)~ y—´7õ¤Féø£×ºÝ›0“Èüè¬õijÎpH¢¦l5G¬ÿÎþ…jtU}FN©“;Qƒ”d…S(´CÿÜÐø—'ªúÇ>ÿøÌ/‚bøZàÙés* Ô¾¢¾¢&ëÉž%¢ÞÔ·ãk’\ééu¾Yìèµ,™$š5?A©b½&!…ZÀÇ„£›è4\¾üå,G&3þOê6ëfxD# È‚ëmÅ}]ì +ÐM=‘"¢mSÌS„ú ì÷`~äðˆ¾O ´/fF "ܧû†á;hd¯ +!úИ»€/É{è'Ãÿ8üÏúcX…Lá¶ìÃï\¡nñd'ç5^yÓC ”M:Ä»yÉšD´¶9€"FÔ˜ª{RbMRŠõŸ¶›Jf Óè!˜³í–oaóΩxY,þ³L!‚4šã(÷ûïfiU à•¿có›RQ÷\Qö%„KùM¬"Ø,€²"Ïȸ ób +@”áÊ”zÙƒ(ºWZYb…*v–rRÈ:Ç1ò2 +Àÿñý&è'MŽ„ÓŸß^_Ñ3šE2èGId—ËbO ½.¢ &t"ª`4q’Mâ{GjÝ~ð+rU>N5R%µ‚‡þ­ç°ÿ“ +nÌÿÞæÿÞpüÿÛè–…}tMfR¶¥ˆkÊ©FòÈT„[®2”ùb<•möš³ò@ÐN.|ç¿«w$¯2xÀ&µq‹5±Ô$Ð×#‰±”Út1RÉûÑú7·¥ö¿]ØÜ°„-å*\a–+Lücg3˜‚{·Ãž}0Èg ›HùÆls7ÚE1f41O,6"Û|‰p@èU¢ytXrvÚl…à†ù½ à™oB%“%eTk²!<èL€O`~|SEÞÜ-dæŒóºÿ”¨8bФ¸£€½p»Ê¯?e:7Aë\ŽåÍôIНPLÞLýÑIú]°*€w×——WÌ €·séCõgÿ<)OV€œëÕ“¨@»s5~‚2{9ç[`ÿph¿0yk¾ôµ#ކ•!¡í¬R•Z%áf U@*çÏò€«·i™Éìÿ 0¬L6é›ÊʨùZŒdÄÆè"¹U¹‹pÄN}¡—ß<4’ùÅwB±Èpa9MDb#G›ÄV¦âݡր÷j|ya÷®€ˆ!jpWúZ”öc;¶7Ù´ö,¥t,€äàÉÒ’À+*ƒ®{ Éí×cÀ^QðB·Â«ƒ÷¶@Úa·}rþÐW¦<ÄB LŒ"m’eCÚËÅÓ‰tl¬ž¦‰Ÿ§ÚbNuI Š ¨J÷©^ì×ø¨ºMò3¤ÉF¯ÚÏh¥ûÀfP(dÿ¨0r„3·þIu¹2§âjÉ·ô¶xn#¶ÑXɲ#oÅKì ßeðø‘·¾Ë„ÝýwàR;ÉßúïÀz£dv$(V@ãíçôMi3°Þ˜ïΤYTg˜®‡?1Ð.ùHhº ç¦VÀÙÍToèÛÚ•ÿ™|†ýO2.v@‚ÞEˆ‡dó?¦ñpÜFŒPÃ,0H”€b–Ü :*G²"]~lÏéêÉ!RQ@É@Ñ©S{„©Aã$lC,hI¤ÔF+‰îÓågḚ +`_»áZ6㽦dŤQ‚4(­>Ζpªä$àÛ>êRE/nüG¡^ð1°=0¸[I伄Ù‚ˆÖ{-CäàèOÙoÑu%VCîmî:P $ÛŠZµéZ"þ›ýè<65œn,€Qg€ +å«À3 c{n@ìè&tB mxÊ™9[b¹9 +°óW ƒé)KQ#ËÿN>ö£€qj”´ÙL· ÿ$-«}&<å‹Ù¾—¡´ö ÇñRíêDÊÕ˦™óÆ3mùÿõ§ ,Ö#Þ½×Íf¥œ”–½  iS5€‚‹Xü¿¸ôå"`æ (w¬ÿå6 ›I–ðF½l™o£Ü~ößQr&A‰2-}@Y/ªü͇K@üŸûo Õ®bñ?=`gI#N¤§ûȦKSØûçÚ8‘¤ 3  —þÿ¨Ftň¨ì/(Üžcƒ&iûA„ŸàL Í´¼hÇŽ°S;â’dª­P ùLBÛ¡é/ðb"œ`b¶ÉƒhëÝk£¶#žÃ“@mà“íôÂÉ8ð6Š-ȾU/æ^ ÿú²Y¿ž_) êÚ yñ?-ˆv´ #]C@ÈO´úšGdæXì§ ]ô ùåL²@ ;Ȳ„#ä™ÿ +þ¢çìþ7emsŒÐ—©eÞocº^ý£5(VÏxœâ8°Îñ„fÊFâdÎUÂÁ—wïZ…¬žª';¹·øi—öZA¸î-€ ûò#áÉ3@ÈoS#=‡á³pœŸw zv":7 À¬«04>Ü·l;BîÊóðÜy@÷7Þü¬˜3ÝòòA ¼u)Œ8®ÅµÎœŒ—Ý r1Žýþ¾ø.€ÝŒ‚fïN'Ý‚¼– +nmÙôu°›ôE’#®>—ð_Û§à-€Z\‰÷ítûÐ=ŸÆÕ›\ð6 ±rÞëc¶ ´ê¢ó &Кèë= Æ.&ã MW3Š%·þÃý(AM}e›LžÍí»~8eª Œ…ÐIÀ´h-€7CI¿Ø¢#läÜO;t£ eƒ|\Ø‘4œ‰ôF˜a‰²‹/’\÷> ³0ÿ=ùîÑ“‡þHÞ63{KÙ?%šïýÄ£|F¶+˜k(EžlÈeLÔ•Z€Û;ïµêȘf!T- ³³k~í43€­Ú-o0þ·AÈú$ï3¯p]øª2û± +Jïæòåóõµ»œñºƒƒÓ1€ +C|¡?Þ鿦´ï ÔƒÛfŒÜ•ÙY":ã[aÛÉY@%i¡@ú.û™9Dø¯³"¸{> K(п̕ʽù‘>½”m/é÷óã9~`Ýæ§x¯l†(€ª€œ?Ì,ÀšóÒ(m¢l³¶UºÐ¸7W}‡+[‚ í'Wi/«nÍ×ê“/6 འ+ ù¥L¤3À$& *õ†$“¶A›P²¯žökžD½#É=ùUÂ…lÙ2a‰¼GteI¶±‘/b¸=NïZ¤WÎâüŒú IËó 퀺ØåÌåõþù§/Úýs]w@}V:à™¿ !ÄJ¤6ø¦>¡þ«Ñ´kjÚdúú{ Pú;¸‚Ȥ´å<8‹ÖöþP~¸Œƒ ÝYd:v2Ry~ùôîÊfLþU¸=8@~+ËšýAß=¶ÿËWy0GQédŸ¯ùædÁqëÛ‘£ub–»X}¿‹Àˆ‹äÖ`‘ýÊr—n1 +ZF ¬þ ¼–À±ˆå§Ìà.Õ¹ “MáÍ i#ÛC  ÏÀèed`ØÖÞܼrðÒùCòè¿ûð%fK +[àŽrÙ-t'2 ß“ûTF¤ëuqÚZÚ'ËLïlP+'7µþ1næ €O/C—ä ÔQèCµ@ztšçÊŠ]ˆ^v«¢>¿»ÊÕä–§\×ê/òÇ_ú¿|ùù¡¨{ØÍ®r!ÿ±”—Èßæã5Âa?"vÖ…JÒB> ¦Ôf ÿݱ?`$WTF—@DŠh.öÐÃ0aŸ^÷­V³¤ž¯œ gg e,UóóãѰ â àõ ÅÃl -bä^fVXŠØuzf&é§±N±7ÊÝvIî(€ÄÍ)w"QÖb! =-eµÐ˜6j±ôÀùöÀG yž?ÏD¨|/l@BHÏ”–R#¦¡‹[GÑeÔ’ãOþ„D2HNTú#¬Ê°ôˆ°GôK¹3°ÖÜœÛ0©Ö¬÷9į_8G0scý2PRŒ\ÂyÙ•DlŠa·šS8½0…\ðZ»|®!úµã稈æ õr¾šJ}úc鯺]\\œ_<¹bàå¤n® ±Ø lš†ÍD Rþû1É)JÂxN–´NA{ìm¡ ÝÚªq‹ à5‡.)å ,e‡}[WèôÿG `Ÿh HôyÍ¡í1¹ÎÐ!?I~Ÿ;@¨²ã«C€Jrº–Ë"mĈùÌèÌD@é&{pžÜ 7ÓóÛjÂ¥«ÈcH&?yõL3¤z8‡ŽØÂ¾ä/v¾ÚÅ7eÏ%‘ ú"„7Æ—«+_ȵü«"CzÝyüGöÃ57ª”ñl€éþ3½x @Ý“òg^p-ZƒTzä÷IÖVRˆ4[úû(£š«­ØÖ¬é± `ºýøj”îXÿ1¬W´¨ ±ö·Øp"¥w0çFj+hT’v ÿ%¿2¬‹ºmÁ#Ù3€ÊµÂ>Y $€éª0ÎdÞƒ¤ä*yåJ:¹$ŸZA@.%‰·ß‰Ù„ÂÓþçVµVxâ‡vÚ3»>Ð@¥[–”øˆi­\ÚØƒ9Àü"jK±°,€hümÇ×›ðþýû¶ãÇ·Ús[–îÖ@¨.ltBTζI˜.¸ÂSÛnÖOÒÈ!o4 `ËÐÉ}y#a†-*…YQU–a Ýd,€¾ +˜ÀcÉ"ê’ÐäcÎÁPçäñ–>È `/UÊ(ÆçOW ŠÚÈðÝrÆúú1¹ý|•ÿ Ú €*¢àšþßZ…Škàô¿£f—>pþÔGH3¥"—ä¦â9¶z͇«+\gIÒ6Wïd{tA’7ýž¼Â€ + Kç”Y/L& `±,€-:Fš%&Y4±c‚˜Y",´âG”qsZOÖ==HeŽÈ¹äqãhåÉ8H R/®c[0Àó®û»›´Í  •ZHã10ðnI~–(Z¿‚ +W K†àê,Ÿ‘ÓwÄ9GÙ•œaŽVsÜ*€Èë’f¼Ž”c&Oí†ã޹žÿO?;™`!¹ÛDíî„þ)Q,BˆÊu ^˜z€[KÝ Ž/}è˜â»µÖÃUî—ú*VþgnÃZiÚX±+_xöôêÚÇ› ‹ëàŒ8è µ…ú‚ ¥ÿ(€Ì“ª$¾)ÇÜ7ÆÕ%¤7 ±ýÀPVLŽÃr¤}5€äòÿåËWy +€à à¹9ù7À«´ +›Âu„ü‰u¯7Ùœ&ÂìÅz‰Í~,€$ü]ABŒÓ/uù$°s\³æŒ@õ À–ÀxÞ-€Dºá¤wj˜Îâÿ>p€1Žhg·–åÜANZ‡ûª¶‘9&Ë2µìõm ¹ù)RR%Kš mÔ|¾ú=ô~ áÉùßDsĤ‡:É7 “#Âå³Z ®×Wç¾@ÜçeŠøø‰CùÿqŠ—Ï_Å`ÄÛä‘0?Äߥl-÷,¥«„¤Ë~Î×xKßÿãF±£–°¦OáLº²º[>ÉÓ~;ÏÀ‡¡¶\ªI°+€e¬ÔUûü?¸k8\Z‹fö)ÒaÜìHñ­Å½!˜ÇÝèT/ÒfiE9ký‹ÎTøšå2>fдLgZ4VÊ_"ÙÏÛŒ ÿÁé³ÊÝ(ˆa0d ƒt£Øî7òƒ2GŽ ÅåËH³/^úÀ°?î½'In›Š€šÞR“?”†|(Ô ZŠÂ²µ@¬SŒÏ2z;xý×éâS^ÖããvŒÒïÚ]ÕX!åó­OÍq5;°ÉàÒ{xÞ}  $@if¨dæ©sðH]€ ¨>ž=“ûš÷“hÜXúWþÁpÍŒ<}ò¸ò”¸¾ïÎñAµ@:¶ƒ +PÒ&Ê&ÇIìoE Qq»k¤ÓRÄ‹·$Z"¿ýñ{8X#ý»@ò•V®ÈÀ +àT|Ü9*$ß›†)SyîÍLÚ7/ß08G3þ:€Im2t:§·­Î),âòÕ™‚'Lσ§7ö¯ €.“± Þ´Ö›´—uøM]çÔ{Ñ’;îšPž8]s«~ö©¿û“uñZ‹î·4†@L€þwnnÀê°­ÿ„ƒi??¬²ý¨Í¬Èªµ`^K"zQÊ(" E¬á #Ú Æ”ÅU¸A`q@(PÖt Û˜¸h€‹ü=hkß]Ò="Ù›ÕÏZšæäJ`3%Ø¢¤ ‰…Çõpì[ý仂¦Î +H‚ÅgŒãÑÍ.* Uu—e À>þ#õÑh©Ž}u†53ð ú|uÕçl™qƒÔvÃ#4Àù÷aõ3Fñè}¤$×]r‚„?~ú4F{ü°°,€Eýµ¾#ήs(ù㌰L*g#mZ:²2ò«Ñ]çÁñ•Ѐs¦ + b|æu&ÓˆÎÜøM`-€|ß-ö@Œöû L‹ä ô~ã3@øç.@’ZbXâkªãÂÎ^0íתãº>€œ6ÆfÎÜgð°Ÿe2BÔXni€Æ †ÿoýä½ dŠƒЊ.¨¾^C.S¬P •†=~-ÀѨÍ19 w¤” *†7ÌP¤€sL[ºË‹»jð@,6ä{XæÐò°µ¥aë€ýÏ–4…ù²Þ$–¶1 I)CyðeðoPƒ¹K-t>Ùù‡þ:ÎXÖ²¿æÆÿ¹þ­’ü“i0õ]xôøÉ“§pÚ9¼'16”üì)ÈTß3Ì{ÿÇOæâ»Ù=¿{)úo +`W#²“Æß†ÈÙÚUw¤Ç*û7׿ÞW¢‹ƒ0¹ã8@PÛ!+V@8™·a¬~žÚk,ê¿,€1úÓ&;^@+…ØG°è¨Óé£÷­~šó°®POÛûŒ³ýϹësŒÚ eicV¢géÑÕ†ïœoMy³–nŒ`§öh*Ñ#c¸2]pºÝ¥D ¥ðˆ¯1Õíì<¯ìK›¸²Ä€<¨ÀÅýçŽhðûšÜMÐþ´g>þ1r”kpËØá“Ê`]¸U‰¾æX ²Xöh¿¯h-d?5ñ€X4@þ˜þŸkÈùó»¼=Ñg²ýé0 (©à÷Ó'  + ý?8zþôIïôT°Œ§;¨änÜõ è"{# g¢<9¢òo@ål‰»¢tDäËes&dÇÄwæ6  àº"}xhmNžˆ G¼xùV’ƒ\·êÞ›Žù PéP/hb°uõ.€Ý¿ìJ–[<ÎeåÚ©Ë= ¢XªØïåÕR’ûi; +VC¦ Õ¢¬ùËÔ;@ç¬zÎú"”ŸßâŽ[p `ü·®b…Ãu¸„«(ãto$¼’>Grº¼{W{¹wÒ_æmÀÕ¾lé³™¶¯"ù@¯m3}_éè'ΠeåØÂ¤w‡®‰Ñšü?µÜ¥zr_T öûêߨ© 63ú—þÿç `éÿ½Ü±… +DÞg¦)¦¾¼ˆ  €ouûïÅvÿœðõ ÿ·Àâ|w ¥ýÀ£nY W%åß‚ÊYù€Ê¬Ü­+A¦÷È#6 3a ,WÜÈ@ªÈ¡µyn‡ßŽ. + :$6èq|Õ à×i†l!·4  è“÷rÔhé£ë]˜H[×'‚µ˜ý]챎ù."ÓiOZˆ%*à¥ùkmÑ|Åû-€QUI—Ô«öê‘Ôýy²`ÈÐ +>›Þè¹ãY„[6ä‰_ßÓK*y>Cïô1¶Pºøá'hz ¦«[ÊöM„äìL¿l.C0¼Å +Ÿó•­9­ãU7É å7+ ¾n kï/먄£¡=Ó@ï—½Yš4«ÙR¤Éìµ\–ˆ^r³Ý·bœ¿†çO3ø¶àßüÔ ªBwñòË `?;$-bò7£r–Dî¿ +Þ 9k/¦ÄaÀ—übb‚Ͱf÷°îöªvêòóE  üÌ‘Büšç¾ù"¬7ˆv @N˹‰ó;a‚ð=J ôOô áú¬`µPXy6œ×Õ]H16ØNRÞÆÓPØbVBH_hýñGÆ*I%¶‰‰ç›€1ƒšøËw$©v ÿIÿn ÃF|UŽ"Ðæœåd¤|õþ]K¡é>g€îÓ—æX;aþË +À{rÀ7©œ@JTæ‹)hÉm0[.’¾ŸÞ}âŠá=.…u¡Ð· Ò_}!¶ e·øñ¨Rƒ®Ñc²ßÍÞßñ¿ +à‚ñ?‰™2éêN^Ø+ߣ `-¦BÊeé +ÿE,ÿXÒ;:x‚™€–p²à,€ »Êò2ÿ&€g²Ž¤üíˆäFz°$}˜Ñ‘átb vH…Û òUÀPL€þºÈ½}Ýw}€ +…ï(‡â¯T tîç¨tûtŽŒŸ ¡žÌ,àŠéñ2͉£ð’\VXÆ4ÁÉÚeNËÆ‡îäBO-ŠC`ßO+ºÔ˜-íùÚNÝv|ÿÞo‚.4Ýûw”€¯‚Žo0¬ÞhtßÚéEª•Õ†j‹‡jV5 +Pª¥ ›/¹ÉŸôœc<08AÈ¡VÉQíd-¥¶ +—’b¥X†x„³0˜íù€1]Àº|›˜½´ ïSø™ÁûÝõ) Õ€ÀÊ8´q`¾Àøÿ]n*x­Žú…R¤Uô ö²DŸÜ|dh«í€#"=a ãkä%Ã_¶DؾÁ»ÊžÿküP9‹¬Ý7Þ*ºöý«ûJ¯§óS¼õ$XÂúÚžk +ç]€Bú/žSvØèƒÎÖD°@f6›"4N½Aü†¼!DoGô¤åYK°ˆð>¯ †˜h½`Áú»~mÏ·2'èÙFœDÃ(›¶‹¹®&=4šjA­ Àá’);:&gÚ({ýü&Ë8> 4ò¨p~¡»Ëgy"Ê JW›³9¾Í¹E(Iô)_ƒ*W½(û£ ÍÉ»ií0ïd +€DÍzÊ$z>^5@æ )AnòRì5¸]dè¨ËÓ¡ûìã·ÿÂ5@ȯÞ3¦èd¦üGÔÈ€ÿ'-Û"Å…ÔÓ(“+8k®‚¼>7.ñ(ßm5ž)iÒ‰=s߸ àú0žÓA>ÿM€„ó%„Ûƒbù×£'By +dÕ×Nb¨ Fä *n”ÜÂXÁƾZÅ©\#øò1o¢*0ô_ÅXW#ó¾ñJ7 ¡ P¿xÎ&&‚Q{ƒ k—Ìb÷OŽÆ"ï]¬Èr\sÜ=ž½6’HdoY`3³È9¿i€é¼C·í|P À‡‹S²d©hpIkU˜Ãù$ÂŽ}¶ÿÈÂèŠê¹íGi•ghŸÐž5æ&êˆé¬TѾåZ +À^óf*¾#™î åØÇÙ:0õži©g¥}üºê$ÈŽû2°uÂZH1µjq[d=ÙåHàjñ­ÃFÿ˜ÿ×X3>Áçƒ<Ïž]™eìõx<²YÒ@ÎŒ-°ñ]®ÕX–«Åk%ÁJ§ÅQ‘‚è«Ëiº J$b©dž "SÑ*Ëü¬k¹/•ÿ +T¸#nÊÑ f¾±·­èJ}åMUð °,€N|AÐ7¾‡?ùÜtÚØßKÚ7»à½o¿ ŠOþ +«¨ 0˜TÂeι%rJ±i"…˜«w6­ þ%L„­µZ¯&œç’,ÆÀf“ÿìÐuk3ý„½ñE +ðñÇ·'YqdBÇäL{檎IN ¢ ç†T?+rÇ»Îk…çC@ØEBÖž;ˆ+†3ÄAZíAÝh€>4{·3·É$}'݇(³H8lùâX\1¥Òg ~’ÿŸ.?X4Opuv‚á½0…ÅÍšî?ãoüé•ú14cFhÉøDS'¯?¹ú­±Z °=2`öÅÔwÃÔ£:Æœ4Vu²,ùꇫïÏŸQ}íލ¹ŒÐmB¬äc„sÅ{´ÁA[WÍý›õ:°…Í/ýÊßRo¨Z¾Nr¢‚/L=yò@åFP—¤ÉF¸ï™Á¯çpWÓ +,jZ»°€s4h–iºšŒ§b€÷o·¼ÿ×ÀžœÖÅq€¶šË‘½h€lCª¯*€ù*èiOéW-èál$ÕþT7ìAdx猥 +à/Íæãn&ͽ'×ê‚åœ {Õ\þ€BöÌW [ȧEy=îBzw¥ò6÷AuÛýGÄŽ‰ +¸¼º”þÏž]ø@+ ²)´e©…ä2õÝ‘©ÿó™ö—j +›–P/e’Rtäqe¶d<÷ ~IÐÿ+Ìíߢ‚]ª§< 6É¿?N¿M5\•àaÏ*ÔB±,€\¬ˆ˜ `ß_ÐqÃ,¿}îa냂üUP ¶êÊ_ýÁkiµ,þK•uI\÷‹™¸zþwCžÊÏòk3™¼A›æ»IãmüÏ0Èp:üÿx´l6Ö$D²M +Xü ÞÆ|ˆ* Œˆ1«G ‹¯_Þõ ÷[é¤hÚA¥ó¥Œ®W\¥’\‚€ö™°´]Ûwvà|yq×0Ù&Ø5Ic9äI O$㜡œk°rŠ@Š7å1úÀ»/Æ5^â@)j$ÞÂÊùlð¾Žüw0¬“{ÆL5æþ¶¼çÞ%ir:k:Ð"ßJêäí6õýž0 HTEiŠ&“$k‡¨E5<®ž=yöôÙÓ§çÏòôÀÓsß¾‡éRd<äG¨tÔLþŒ }wæÃj‡E‰¬8¬"kHªÀ>ÇƒÄ ˆÌ»ø0ùf,„ <ÅR @Ýæ¿üÐãǵD Ú~óǯ‹¤3§exü†ÜÜp aC€çþñ W­«Å^×$¶+þ½AÊ£ }SyݦŽ Ên·>bDP¾þ0´]ënrúð+&Ô$w±ßî\_’.NÆ +{š5|‹lC=å•­ÒZy•CŸ><ÃÈMÏ©6ÈàI@= ”‘ئÐÏ ŠÆS–‚H»:è¦rÏŽ2`}|èUSXË:ð´dMIÃ9ÝEý¸î4ÿKþôÿUbU׌:ÿÿ -0Þk’q»·EÒH–¢ðå‡ùêC€Ì¹£¥¯U§^©›þ“»&ÀùÓ<(øì§¢îcø¿D7Ò{°;˜2üëA‹³siÔª, ²«à†ÿÓçânxØXrÌ!žN~›x~óÊ;¸ ìðI $&`jZ‚›Ò6 h2bTú‡4“FóÃF#2«6Ã7€apzò`)p¢ëàŽáÓ;fAòª96„}ýÚ?= a NIáÍøñí ’Çü8UxQ’¡ÃYøÑSØ4³kùûÿ¥àD%9\rÑÆéÄã¶û°Ï¼ôƒ¶> èós><ðþ@RdË?9N6ÑäžrµhxîkAÄ2`®õq$òÇúpp.%G…Íb1u3ø÷óŽ߉ÿr?ÅOé}¬Ù:¼»î(¼÷ÿŸ=É)aôÀømˆdféΞ`9º=ö{ˆSû50KË@‘úRuZðwdìM§OŸ<•ü.§ùw ÀAkÀÆþºGLÎÿz„üz†Ñr?‹@´^ŸŸ#aJñÖ…í"ÌéÄ ¦C[¬¯sBˆÄU΀Ìont±Þx=g©dRô´16ô % Ò,¦ô%‚ŒW7X–\â§ñÚrsÁ)vB÷µñá¸âx¡pЖˆ\FÔ­œ ÜéöGÀÿvýn}ŽYM05H%`ÇtðòC¦ L.À©€¨ò!ÃC~(‰ïâ?£ïoõ=¤ +¶ç}€1˜­8V”3™;ÐðAÁ3…’ߵ붥?Sl³0¬LÀ7`®Í¼à æÊ£Gøï@.ßÅlÇÖéï ˆ±xøo_£ÄÆ?§Oqπϣp«NÕ€¢N Ÿ¿b@_¯SͨқW/øL½~«Ù'¥­Ò9€bÚç…\O+¿Z4 Ô4¡¹àˆ„Ù‹Ÿrþ„ã]wÀX.QP¶XW‰_ï´- ù €ü> Ô·ý𓊋ÿ÷&#zò+{4ˆsá„q"æ„l(HŒXË# dpÅ»¤ò1¶¾ôóþY @AŸÞÄv~` ¹vYT&w©{Ëep“T ìFöòÜ£éõL‚ˆ(é6¿ÀŽW,ëR”î¥}”@-~IF žî_½ }忨ýþäÒáQÊ×ÚëL3Lnkü Ð5€ïåûÈþWÚ·†g¯l?ÕP-€(†§à<9¾Ë7óÊ‘&¥6‚ œÃzfÏ“! d–°ÛŸ¦‹&Ø4@¦CYw ๓€Í·üßæÜŠEHÁ„óLЉ°f]b¨Bþtið©¾%À O‹JJ)¯µ´bÛ{µïœ_taò Ș´Ùä+¤ý’?Ð!ÝdÞsátÊÒ-#F®i1| hfÕh&`SH™KI-ó'©Ÿ‰6 Ÿ½Ü!îÓûÇ A‰Í ÀàZݱ4Àò¦¼)Q2tl=÷Å>¸#ËXàŒ1<ð¯§i˜ùf ± /ú§óÿÞ§…Ù.øMù]»êäVÏ…óÊÕ7Aìæ£Ó¼ŸDNs÷l$³€´_üWž7èõ–XÀ&ªÄ^!&mŽ$bÃ! l¹¹ñu€e=½œ‡cpÝTfIbC^I3(½h Áf`Œ÷ÄÑ–å¾»_àÿÂÐýø~ªݶˆ®Im£‰±28¹qÒ“Žæ—I@ÒÕ°Ýò.H¥¬KÚá»s(z„«£…cá™N<þG¿Ãcè"È·z –RIò+ú.·ÒJÚc@ éB#»rçâÎW­&Û &Ζ‚ܾ»ÎdØl7ÞäKà ÀFå“WP ? ÞVl@‘^?*KOö’?zËTÚó {ÿë¾ÐØçΟ\Ð-[ßT»ÌOý-ß-ùék ãž9hp¦/³O½ ò9€;@! ìV—*8×™Ô+ôOø`"ÙžÆXk÷üÈ'©:íûç”ÑÛÿ“Ó“³_­üèÜ“=xŒðˆu¬ Œ-ˆã¥SŸ®}ú÷±b{Ó1À+eWŒ ¤.0Jð@‚çúI°Î„ø(©ß#j|ó&ˆ Z¯@é0{wÙþE„ƒ6tìb¸olÛq®Øñ?ë8ôË.Û·5Àý9*“ßÉü¬¢ìŽ›9ñ´õ•¶K îs`4g,[ð†ç/_û®Ä] 9•vÎêaó6 C5€*õÆ5úÈzàˀʘ¤ðé +@"É¢k€Ï\>»3HBYêÈS÷’÷‹Ò5C·WûH¯zSF~𛍳™¢à”g¬•=øÐ¾÷Ú%~v”|&Xíÿ7ó_+¦óÿŸHͪöv´UƵÈqÎ.üÈÚ£ +Â=ñC@ú;ùŸ!¿#‹ûxv½ÔÀÓ'èàÓgCú®³i´K)JÏõ¬;°øÖ(D:cú‡ý3€ê4–º!žã×ÉÆiÍ¡Ü,¨¹…‡w,€ô½œÕVŒ;Üë5¹°M^>•ÿÌ1ªÐ^´Æ6 hÐ} `šŒÀüzru¶pó>ÿaÿøÿ!%~}BùÅ 6ý wÙ›Í,į“ÖÀŽ?ÖSš.wá96í¬h€±štøÏ¾Í©[!àºLÎ’D~„Ó»ò+,“<ï.1§íßÊ#…šS!#ˈ;KFÿ6€xµZ²íý¿Ô£øGþ[U.j)½š`W«û_ðAUȆÐПãì¿‹›[‚U +Þê»PPJÑ»OqŸºC \<+ßuó]ð—ðaÿ2&¨ò¡Ÿ¢V½íõ=üU&¥²šSÚõQƒzµ°³BNk°ú¥ +m‰jz,%v—a„ïÕ[V#ëY`ð<”!]9œ€%Ç`·r€ÞŸ…½çàÑÜ “•ûð+úâE˜l¤#ŸÏˆáRÆÝ'–ñên,À}ñ?››U s'^ðPØ*“ꨄv„õ*€, ¶¤zpx8ÈàØh/Ó¤ƒS €‹Oï(·ŽÆ%ÕO_Þ=sB]q/=q®Щ¸Gðå$‹>½ûÍ¥shñ; ˆè+ëÏž)gkÉ@²/•½¼ù9q +Rõ°2ÄÕg¢ªz +'Rˆí¿ó´tž f÷Uⵯ»¦ÿTY›ã €î  @Ñ—€ CžþÿÚ‚YߨÔy1ß] +œ9(6 ®/áÿòçÖâµÿÖÄý*è‚_.ÿµ°?ò™?$Y"¸Gæëº‚!|€Bàð¨$XÊ\~ŠƒbÖæguŠBà‹]4Þ@œ +jˆ$ +¯l' ý²^ßø‰ïþ…9‚þéÛ}mÏHžšó9ç3N¯¸\F #áR[ÿ5t2ÍÔßy¡¨½Qr„ s' ƒ€Gê½Î ‰a~ -;UPž¯máä²{‡ e´¤[ý‹4i,}fæ¬ZÕÎ*ÿ7 ð·`€F³ºIŒä¿;¿AäF ‰;¸cì¸  Â¬[²“¶xíP`×!–œï€Šì¾»ÊË@÷,€#HÐôH<ÜõÏñÍÝ ’ó-ÍvBPø¾àŸ‚øÎœÍÉ\?(]?YJœôûZÊQûп¥NÁÃþÿkÂ\œïàÆ®-`…A”AV2‹ÍÒ,“¹Û™÷I˃èÉ“ ¿öŸo€;]Š—Ó‰Ax̰kÎ^S)Šú ¦ÁSŸ"®GS˜ßüt/Ëeÿ¦ê©•€Ÿ( óGuÇÐÿDöë}ô«'(ÙžÝPß½9€ìÂpEùÊ$ |WTG5"¬åíÍ[¿ñû*Âx«œR—ˆ «"Ûy)È9¨h-ú{_¹OJ*™ü<Ï`%œˆa +Í0¨7×ÈN º›ï‹ü¸Zá’òœ6Ñ#NîŽ:àbí6Ør£â'ùbZs×o_nC€Q>0­3¦ <ç‰`£¿ûY†óáÞWœÐëËõ(EØñªìâ¼d@)…¸^^æY–1¦‘u «¨Ì(/Mt V³ˆ/ªŸ™À‘Ξ¤(ÆÀñDT‚ÉÞç½7Ù b·ÒLO•XAú|éŸ2;õöSàܾ´Ô¡f0°¯_sªåÀš„šµ /73¶tÎl….$ýîüÉeízÇc¾zãOP\vŇŒCµëªàÁ¸Žðød¼û%ÉáÿÆ÷¸û©ŒÜË[±¿hÉè¼hP¶GÊe;*d‹Œs;.ÜW`£6þ¿¦óûÊï|ûw>Ê'ËŠk€øBÑâì}K¿œém‡ÿ„«$2àl:Ô¿ q,ËŒ$³÷çú§aŒ’tµˆ<Ë®2¾ûþ{5@”ÀÿŒ`ŒÌé#ÃO¹z.PeWœò¿mw“‰ÀþÓ`o_þÁ;4_ÀzÈÌ28“€Âfiƒ·Z¦”£:ëM„6üûYr‰¯?Ý^…‚_üÒ5'%ÕW¨”S +¸ËÙI —°..J§7•I¡ò«°lHF`èJ¯SæÎAŽoÓÏG°F°÷DoüÂÿ*€œðšD9Üžó³ÎýH¼¸Sj°èš}þÿY”bTF,•‰]Ö’_4ë gI\ROϱë Pñ¡‡Ì?…Ña$Õ²P;}ûýnçOí‘üÉ×6;Ì€þ1þ×1g·e~!çËdçbÌ€Só5"œu›¥PÇð•àÊíÛ×v7› +6ö¿~£õ.ÿ}•op”ÅUJ”‰Ù"Ç‘åÖ4güÔÕçX)Ϙ"äõ/tG˜‚)²ÄÖdÀ´ˆ +€³\â_ï=×%7SKòþ¿ÀAüÿyû»ßJ²,Ë»t¯'=Hæõ #ê^¿ ^ïŒdpIrˆŒ„“Yy³Ò›D¡”ªUA¨º„ô'HO1QR6äÔ¨‡úa„~˜¡ @RJšh²>0i@‚Ð=Ð1ÿ‚Öo­}Ìì’ôˆÈˆ¨^öuìØç9g¯½÷9v̬¨d:]NtwxbC ÊGèC î ‹pßC8×àjtd5”@rÖá(€x†›SH–e枀Ççgy +@‘håR¡Ëò\ý‡ZY½9˜æe“Pì ÙÞ˜‰ +~ay÷š`fy’ÜòË;"ËR@/-§þ[¿hyÃëôT|žD†Ìætv粂—ZãNÅ~ îçÜÛÚîMä©¿=ÚÓ꺂n¦Zh7\8÷Â3Läј¶Á Zú Ü€C¾*÷ç{Õ Áq1”)W»;rÌöBµÊîKÜ÷ªoLpò¬À}€¤Æ“›þN¾ã¶€ða=BmÖ¨¿>ì8ðlÞ׈ÚÈSyûãs0XÞ¨çxÔ¿¹£ÀäÅ™ì ‚Æh^ñÚâìQùf¯ˆO%½±Äˆ3¢ ÍI%ýö^ºùÏÍü…­žu{©[ð2¬£‰Ó|гßüÇh;˜÷̽söç$Þö3– +ØzLHèÒ9g‡A°áŽ‚0VÒ¬J•BMxý¾†¡ÌóORº@k¨+YXä +K2âä¼êx«-øß\cñ_„Zì‹‚H6-R¹Ps$Ûô«¹¦Hÿ-ÌÀl]]ìb¿Ë’áð=€;À#þ àëÕ`˜é·:éê'uÎ=óœÇ%à¶BH¹|­Ê>Ë`/º+PnÙÌ·é¥)´ƒó¹a³ŸOÙüçùE5ÿ‰x(qÞªƒ¹ùßi?îÖ÷Âää# y1úfyÅÿ¹²ÕϤ»ªF‰hNì›c{¼Q=ÆüÇà1Àî.eŽ iõEU“÷-‘ æU1iÏÅn‚\ڲͫ1à-€OÑ7äGΠ¾­u*  âí -ÒÚ…çA(!@ÁÀò™†?®hõDZ ‘ß['Zç„ðÙ¼…ÙD„Ëh÷† { + Ã½CíÆÂwÀ…²¢ëšývš°óa¢Ìÿ í‹Q§îp/¢åÆ#»þSnWqîÊ1ž|8€àÙø£tÊÊ-’®9jæüúT·çà¬ój.jvs F¦M 4äŒs«ØÁÄ0YA¤ƒ…`ºÙxÅÀ…¶ØtBv4pr_Ýìy½Ø]¤ ‚ð ´è/-è@Íl…!×Åôàõ`ë +LÀ6éVm–5IÑ`ûc¦á?÷€—ÿUÿŸÈöæC'a_ )·àn²gˆ‘w+¼^N§ôrDeä6愚yÁ¹ú^¹Anˆ,tÓO¹ø¿ëB7Üú×­JÞ46ÓŸˆ¸‚Öº¨ü£dúÝ` ÅElP ¹L=HŽñœár†øiÆ2²lË“Iè=dµg€êçö¢u×°Ú`)°89þqáùöæuðBð 2g ¬™sB€þÌlÿû¢D|$+Ú­#æ[À¶Ÿôhïc5êÊ]ÁÜËz;m+àÒVRwQüõWøŸ$i==ª”%}Zd”`­WçRrQ¨VÎdw,ŽK)7¼é¬ñ­<_Q02ÚOÝ´Õe½Q Áf©•´N÷%³&¿‰´ ð^@NÒf¦²OˆÉ~}Ao;3«W€=¼ ¶À?T>xþ zƒî³6 -N5œp|rÝ¨Æøÿ¹m´–½ÝÃ;“ñæ +°ómÖÂX¿VÈ"—K3dÝ¥0â À7R¨6@T"9^ ͸k‡Øªû$UÎI݈'`l7 ô¢¶Š·ÅUP·yÏøÄõ5©{kð¦ +T ÂÄoÈ95Þ«µœå¯¡¿qÇ(°¥Œ´m/7Ø&7r7~{‹Ÿîà(Mµ“°bžCZnÅÇ*`;À,%3öa7G„¥&>Qõ¤¬¿@h+*@²°ÞÓ1>87žAšî•Œ*e{PüU:€¦@{¼ pÂÛ@(ácÀš»ú$ÞWöàìɆ²*Ñ);ÂÇ@ D ÜÈS• #ÏoâøCxëæšy´ÈjŠÈš…W‹xf“U€¢¡š139 †sf©³‰Úûò“C +N^Û˜½)G`ˆH>Ø=ànì0Õ½±¡tƒpo-íÅ1Œ¿+0_w\Z+ö_†êM§ã©ZshR`aþ›Õ¾ [ä¦F¾<àV–|k­î‰ DøÐÚ¦ëJÔt[|ŠÌ€àÎ@škæ²F¢z™B¦;a¼ºçb(ˆà)Íy ¨ˆ5lÿk]€õ‚Æë ‡4ãì•Å6H€½4Ó ¦“P¡ÈJB£À¤ïÖbÊŠ{Pv³¬N(Žà…@-|Øêâp¸#˜i%Á–i"¿gò¬hž@]ŸÇ†¯=†óÏ£À–"âpÿH¸¢ÐêÁÿÁPDE?Pþˆt(uÔ´õä­ržâ€ê h¿ К’©½tç^*¤¼|Õ{œŠÇˆÂ›ÞÄ·‰7|já’IÉ2qò"ÐÌ4Gr-¯ñÀűÁ¼WàB|‚`˜®ªHï ðÈ—1¬VBjŸ—*À”ŠrÒЇVÁ>f¹¼àOýœÈTòmÕB ¥{„÷ ¹G(¦€GÈoþûã_V]bšx0U¥$¤ô™Xÿ¹83®’1ùT°¯Óp³<àbÞ)ój¤ðmgrr| ]F·¥B aÿ&šùÍáÔð=t•ýo‚*<€(ŽhЖ‡<€Ö hâ7Ô9dþù±ˆ€œ•ФÚòù7AÐ@¦í20%›³™‘¬fâ¤4õàïg&VœÂì„Ì +ñ}?g¨, ûmóµ4U¸°‡ÉäñãÇkOÖÃøÆ~¦æðÖ?µ€ci?eDþ(%%<äWFÕ$þkºûâ´Ÿ¡æ•Šcsžs—úï=”KTÁäøúú´ +µ|~öŠPÿk (î€È~s¡Z¸<Zâ3†ö +HÒÀ,‘…ñð¬M. ¯Û!‘¥¡ŽÖ¹êD&§Û×ò?ìÿº0DÎöÆ2¯{"¶èÊR5õäÂQ‡š™´OÚÔcT5+Ïß +!Á(;°@ü§Pî ?d_Π…€ÕÜ7ý}5ߨTJgª-\ð-QíH†¢ú¼‰E…؋ޅ$‰‹´FêFT ™ð· “zÈŠQ]ö6KÈQp íFí[Et÷dÀ/ÀxTýYá[]>V3« Nù»xȯ&L–åzภÌpyõB,öÝ 0ß3¡ãx’a÷^Ò ‘¦Ðq> dzª%{z££<ÏÖ®Ù4™Ânµ§O¥}˜|¤f[ãh€' €°ýdË^¹¹ïÿIŸN‘zÀÂ9@Fy¬L+͉ãä m1Äû@×ï}j»€RxdÚ( RM3ÓƒÌÿÎÕ€/nS>îm±¾µ×-M­_³4vU„ÖÍÚâÐÅÅ®jðP4¥_ø]˜{mC˜¶Œ^YLloC­YXã]jé}k;¶XLysËÞÛ¨U»C¥˜÷¸U–¹M߯M­éï +¿çwÝ…ú¿üÿ0Þ‡BÌœä}oÜZ—Ž ý [n¤‚ëd¹s×ÙË*›róò©]Ä·¦,”ë/”ÿŸF@ñûÎ(8!k”°W„ÚC -|0Ùm+ºÁP\ݸo’»‘xsÑ=T¯Q€(7Ú{™=ÏÌS°Ùn4VPœãtæŠÙèGÙ硞€u<™Aû½Éj–ËÕØBYÐq–!.mÌv“šiG ó +‡zÌ®x¾^²]“w¬Ô”­&K¸âLóŽÙÌ´éO&OÓÞ/àÇ︠…ª4Øù‡ô4qÊÎòTCJ`ò"çï—¶âˆæCò÷ó +Úþ+¿œiÑ‚k"¿¦—ètŸŒ/1ô@Û]ÙsüJU€ê x2ðÌkÄ0 rÂ’yK¢â³ @3{B@¢ª 3+0VòŠ]¸Ó¦’ë™Ìf"©±çýƒÝý]–UTí¥œË#8]v©(ÔŽMX-Åàsi=\¥‰Ð€ïÊw >‹8ÿöóoþû¥.ác­™Ðq9³¾½e”€òYH”²P‹«E·É5.7kÚ mp÷œMJ6¢Dyÿ?Ö‚{lƒ 3PÁL‰ÌRލ"èø›Š¿‚ð]*`ç;ë¼ ¤@cxt6ìì¤(i* *“ôfPcU$ÃEÄ9gÜõ ƒÈYôÙ#ÅC5s©æ” Pï_Ñ=“Ñ¥´F¿>3Æp0»™a9ºN¢ÅöóíçO£7' -(óÈæŸDŸžòycØ/ Ñﬨ€U˜ã50«0°e€Ÿ›k€\¬j8ëßÿµtnøëSúfó@ Ý.…Á@b‡ìÙ +Iò²v»<à[’BK¯%3âiñD7I†l¦€ÅÕ=M?  Ð]iî´˜7ÈK¼‡Øl¾ý]9 f›¶‰ÅøÃ»‚×Ý¡„Lh1—Ý9OíÛíaò qisË¡´ýG_ñî‚î¸>ÿOs[{¬Iý¡‰ +ðíiÈÝ“ Q‡Î’†®Ó³óöæŠß (Hm‹¬Nã«æD®hŸZIÓÉÅÜÍ +Âï6j°²{–‰!̯yi+Œvä­L¾K(­7ÞÙòšw#@•!^ÁTÕèïú<ò ¬-Áb7‡ñ=¸/ѵ +T[Ü +1òèk–ÄžŸ¼”i{ùrÈj›v€œ+™þ‚ÆÞŽªm¸@ çG‚.3ì§€ =Šg†÷…ìÏÓâ·UNÀ“¨Úìp)T:ÉPOþ€bÎNs¥‘güýÐÖã”:à€dn†²Ö™D~Â¥_ŠÉ4þ¡”\¨rB;ù6¤*T˜Ÿ¼Ò)ïD”À H„Ò6‰çUÔ¨;–‘]òD úv†!ÇòŠoø)ä²ÀþË]y +0 +w˹½iÂ9Ít2= FáˆÌ~똬fNRõHE}° ‹©?÷J¸Û +xÎ’z¿ÿPXûÀ:€ïx¡‹ŒþHnLc®S5ÙI±ÿ¡l ëòåßÜ,/TxS¾¿ó¼Á+>–ì5ê +ºG{ùˆ¸#@ã½™^BŒ Ð èhÏÙy • ÃN›þøÑßú‚ÚðÛ˜n<ãIx”Ë¡c`ùÎÖ<ªƒÝÈSƒÀL¡°!ÂAz¿øœšöâ-BKÐþ¿k®¤I¯ˆCZkUà ZeïDtÇyϦ +Þ¬|ˆ©m7æ=r|;Ì\?ì½€z`€F@ô¾µI ?ý(à…éO§y\ ¡+t`ò(ùƒ®¬0ÙƒæTâ< + ÓD?*©I9þ7`΀5²Á +`ïäøòòšì¥YF…ÃmÙP@"ˆf~,eQ¦ê +sL2I|$›`â¨üGT-©Ä ™ÏªÚ‘[;ÔÈÑäŽM^h•€ ÍúbW^·\P4›˜ ¯á#Rw$ÆD^¤¯ÕïÙ¹¿‡Fÿ…t¸ï;5ý£±PZˆ¿Ô™Y;"w”““Fn¥1Þ n g<ô}y¾rkàMù[D²å–0d°K€£™¡Y”ú&;ùÐÎt‹‡€2Ï4˜àȲGÍ„¨ÃAbQZÖàoa©×ã¶ÃÜ5Ñr J´.2/(·é–y/…0¥ÀÛv(ø¥¯œáŒMdû(€â¾'¡òÍè ûáD¬5á H5Hpóoå!J%)@Çù¶…sÒ› ŽlU óÌvËÖZö؃åb»|€çñðÞybÿ_uiøŸtaÿíûk÷Ýì=í{¬4(c`;>Ñm"Úé0é8×¢‹yµÞu4há îGâµj²ÀÎã‘$hWßA<~éEØW±í÷ç»p±%Ö»Ó…_ÎÏ©}¼ÏH"™£l¬ü<ð#àüñÐUÐ_Ü,­ÞÐÒêÉÔG7D#ÍFÎà6GªUnHÝOW&Ó_„Ö(›¯z±In€©4ò]ì‡ü Xí‘<ÿ±»üŒ¦ð>O±ùÒ|oh:>šÎæ3-ÙmÌCQ}gÌȹ|8/m¡óäØ`ï…«À?øïg™å-€á¦y„ÙqYÃV5a¾¹íNêÒ ¨<ðNÞ ‹@¬W*’ÝSðn\…­ÞØ/'“wÄvwüÑöÓòä¤[ Â¢‘ý~¥T6Z!9vþmjÃ]!WZ]Ç× æ^ßïœÓR‡3½ˆàH+€Þª[@°€V#âœ__ÿüZ;ÿߎyBÑžøs>wI\/{ÿBÔª+á|¬Ü˜]™dz­…¡—I›òEì²»Ã!Ԋ˰XŒ×ùn–TÖYTebáí^ 9(ØÇÐrßqŽw [s0ÈqŽÇéç +µßãù†x†••&R¬†&ô@ýRéÌ…`Ç¿À¶ÛÁòõ  + éV +ƒï^¦?3Í•ÿÞ‹œ¦³…p:ί”ÀàºýÏLa=ó\xa~ní ´½¬¨ü‹»âïtgC@˜ŽsÑ7cº0×0{+ Ú‚UÄÔ€|i ¶z‡@‚Å£pIêé劀U †ý†eµV‡kÂDÓP'ŸyC,[£†¤¯`ì°®+Δ‡Õ›¿~è¸ +€vS^üwâa¾Ò+6÷ŽÏ%%@U×í„óÝ P޵Üéøos®³W¼*gøR]W`•‡ gÌ€ÔÄ+žúííEpxç4`ª£0óby<€øÞK«Æh€4}Ý ò °@² +K°­8ÔÞIµ5˜slyá ‹ý]ÞKŸL'5«o%ž?sdï©wu`ÿ}芆gìê´fä:ð} ´OWwàËq2ŸL•ùmo¸ð)4Ú-@ÉŽbðÚ“˜~«ª‚ý|‚7R\P˜]R HàJètñ°ÿ¼ŸÈóAÛüxÀìö<–>*‰@Â-{Þ&úkÄžChfëÔv8”É;RK…çs<´ U‚xGvš-']@ݕؠ[L‘-S?*@ ‹[ã?ð ¿Ü|‡Ä`\ZgQá2wºKß„Ÿ ³ÑÌï R|µÂ#ÈŸvþ»€ýòbòŸ?M[€Ö>b}kÃ/ M+‚F¥Ïþ¹ìäú½ÛËU/Àd 0ÍÔ@çCð ûq¬€ éå@VkÊç©v¿>W–\ƒ½Ééé‹úPCøzAàšý—u‚ã„$ݘ2=Ì×û¤Ì n$|Ð+æ»OM€³qÞ)Þõî?kÑÁÁ¦1‚¦JìÀ$ÝMÔ *À—ùØÂؾôg Ëì{.E@ë+‘ +8ï+«[¶ÒŸJ÷]©þûÛÀw\_ƒ™ÑØ“{x²`M ý5P&è@fº¬ìšÎ–“Ãé|6ŸÏÌp¢¶6Æë¼Œ¸˜É -`:&­Àá(6íD4%¨õ nl€ÞƯöjµ¬Ú`ÙÐÜw®±~öfÛ8%/PÂÑV‚@©½ûʳÎp¶ÔÆûû5‡ô¨€íÊ >xþÃíçrä@4%~Úù¯Š?ü*˜ÿ8.+œxȳðŠ¢Lt²Ü­Œàå‰Fƒÿ(øœB@;iÿãë%ùìü¥_¤L817U€e ¹CôŠè·þÓ¶ì—4€t€FDÒ-þ®å"¡¿cäê"ìˆ*d@þå&‡þͽéЃ)üßtßéùày&£‚ÊÈ'ŽÃ²G>—¹±Î!Ž·1·­S2Š7ÕAή327&,ù 6ä…xŸUä“f(Å`…` bšoauPèÛßH]Bw޼•3`ê{†Pìw»Šujµ h¦%ؘ—8hÏ C¨OrÇþ8 æ?n<Ö¡IÞ||û¥Îm'`¶œ.G‹Å‚.[ÞúhíÑTn¿vSîÈÞϧ3U"6¶¼‚˜N-š–ÔØÀp_Ñ©º.O®¥¨¹c£˜Â}¹ +˘ŠÁ¾{[yë€Ò„üœ‘=ÇiG¶ö~w å£å™¿ÀNƒ£V ªG(` €°õN‚½ð‚Gmî ÿiƒ¢?¡ºê×ðËÜ4€øšUÏ‚ÎÀ:yy, í¢ª@“{DÑŠ:¹¾&Z¹¾>S±è´œ+/¢]Ž-nŸ‡~^/ø-4¢HãÖÒ´‡î–L(ûþöÿ¡¿ìþ¾Å߀m¥M5F¢ˆß`žz–¥f«@Ÿ!–%ì¡€–^Ï +Å€¿Ìµ{<;ÌÚÉbãÍc¶3H8!{ŠkÝ‘_Ð"×lTÈÖ-(Â7MËkNrCk7*ªü¾X®€&Û|{þ4 àûãIͨád°5€rRzN–edzI>´ ¯7„ëE{Ï"ÍMð¾V­îŽPB÷Uç_,ɲ™†¹À¡è¿pÀü‡ì,åø£<àû|gL¯!Ú áÿ΄?ÆWÍÇg±d¶f5£Ù/tlþ3òèU بt¬6Á½$ ¦µ\Wˆ¦Å€» ©œ=Wà}ásÈ’·é >y\^À;òýM{€¦º¢xUæû_€qéÁ£”ŵ/hšÈ4FT§ÎqÊ÷•ꆈäSh¸ÿi èß ýGé |UIø@²öøú³É:”w7¬Î8‹‡Ýu7é#z0™ÞxÞêï€0ÿi¡,\ûÿñ²áU›¡ªX„ ñÂûÂWFh6YƒÿqœYÏv ÃhÍigqÙ©hñì`ÂÀhNTÐ:C¯tµ‹óÏÿ»âQp-ŽðžœRa.àÓ£|ß“à,¢ÿ@µ„ÿ_Üð%ñ>k_|Yaô€Ý7À~óß*@9k`*žMø3r¯–bªüÍšIŒt¬ùU€<ʾڃvÏÿ°ýãÝ­éâb:›L©÷Ãÿ +@ô_^ÐÈo æRª-‹õG°ùV +œEÇK(Æ6E +@‡ÁƒúcœžÿQÅ}l•…U¶_AXœ›—m7¥9ö·÷hHW@¶jògCØÇðnÈ’‡Ñå™sF³\ç>hòãë¿< +x§:ɈK  â6€Ë3?úÃòwÕvlÈ‚J÷ù¥iÿû*•q´u´4Þñøö*@ +³Ò¥” ÎÜÉYúS ¼ ´.€ÛÁhÂql˜Èi@Lýg:m°b ʤo;d‰ +ÀQ°à™ºÕÕa€‰mL¨"~ä);í¤jÃOžWÚP%&®w1 !%q´‚šk=1œ9üOûi΂‡ éUÔ?€çü æ[”`Ï`­ê- »ZÎ_)Öé>6Ÿv6nŠðdº#FWÑCmF†ö¥6Ü2ìmuË «ß•¾2´˜ÉæË­§é6?’p‹€ +N@µâ`çgnP@Áñ£‘Š—ç†xS™t‰‚j1“Ôf°?ÜóŸz¾/ Þ{‰”j +óÑHªnšÌ@n†ýIƒ«öDr x9Ú<¤ÿªXQtšl€ó¥âïþ ¨ã­Ç7Ÿ<^{¼öކ'ÛÛ¢©îâ…Ò†Ïì›~Ñí’Ÿx€ø÷_5Øÿ ò$Ð/Úüç7ªäÙIã¿ò°SI9A¦ò}Vï¯Iµ>ÝŠÏâsº°Žá° B{±5]‰srdÌtƒEx_ri«OY€™’«ºK'>3Aº@ÀT™Ná}‡FÌp˜J¦§¤3ìÓ1l$ò…ÕlpŒ÷wÿxâ5ÎÉJ€÷â¤}ŽÑˆ‚ht®Ã9³<[³À/;ÇòA8&GÔÕrø+N ÿylIºµ$„‹ƒÅ°#ŸÄçGˆõVVÑÒ/,Z×Ui’Jm úw_ :HÈoÁF” ,ëòÖxÓOy¬|“Ø‘ç Àrº˜-çóÙ|úl¾œãР¢ÂXRcG­®Ùë×F¿Î9¦øŠÃRÆÀÃDˆcÉ\÷´ôˆ 5€9¯‰¢JM`*€~×d;æÄÜ€Xºk‹—µ_‚Acv†ç¥,Yœ1«ÚaˆR¨€Ö°ödMü—FxòŽgyòA@.Ãô‡ý1ý l2÷Þ>$×€y*œÀ~àì2ü …jT§Z¢¢¼›BŸ}ö™rÅ +`}b—¤€®tzfFÓàG3ÐÊë%/õ¡@˜ï X{ïöGa?ß®ÜÝåKºæ¿x#šP¯ÆœñÌÓ6„U°Hâå^ðÚAdxË–Zgo­˜‚¾B=¸ã´ç:á¾yì£ HÄ9 tÀVçØðäFMa¾ÏÅœ;öm33åãQ]€ ~ËÉŠ*`ÕƒCŠCGtM©$wu]Ü·+h™Ê@zsxëy$H;†f®À{O`Â'¾]Å‘ó2ð‹ÝýÅb>YÎóù‚Aö!¿?ÝM·¦ó¹ ¾²Øm…‹é#€ë +:¶¿ÁŸ«ÅpÇ8[/ nýÓzÉ¿‹dþ{P<ß³íœîx›ÊØ{O¶ŸV@¯«¿C%µEþŽÇ0UÈ/†· èoD¼Ã?A¶PÒke–ð{Ì|SËè*ÿ¯¨o¿ª¤¥9Ö÷mÿ +EVÞ70*»Ž÷h À7P;À¡I¢Bÿ=ÝÕäZ +@Yw||þÙgR—Õ øZT2‹È&7KMû“)ŽlT€-^u/}qÞÐ.åñ ¢üÅaºŠ*’V¤Œ?`ï;„—"”ĆÉd +µwé™^ìR »V-Œc.Š 6Ú®—j+Õ¶sd•ózä¾|"f1ÓÅÜÀk¶Ü±oÙ·À~™yON skÍ×áô&?̀ʾ~BF´Y €ùî§²ýnõï£ñÌÿ¸ÿ®ðp%*À€sr)ô€¨²ÑkÕx@i¤ý~*úoíLçè>U`¹8\,ŽŽ–ÓÛ™£Äúél¡°TßF“БÊk* º‹Þ`±â­•=·1Å`ÚE¤ÙÝ÷ÐpÞ-!­¹{é0†ý€h”ļXíHŸµÚyÀf%ÚëY(;+-œ¨²æ)€­'›´<ÞB0¢âLøó®’8H¥M-¾;_ß+æÌñ¯lýËhæ¿ +' Ï¯ãÿA™ØD-iê<€ó³õÉñgÚM'и§×<·ô)Íÿ3(}SI¿d[Þ,oÚ ²C0棠½% ý0A¤ ó\YIñEkHªLÎ= ëÍ ³H|2Y9Œæ|ýÆaÒM9-MWí]$ÞœôCñò|]m¯²gàø ¦2À¤ÖZ5«Ù)xT4x_ÉA_×'³“aW‡[OWÖ+SDÛaÀlwO@¯°Þ¶ÿZÞú{©¤å•ìG*äìÊ@#€ +¼éþ®5'€­ºgÐÀh˜Ðþg ¯ý +þb,oGŽÀby¤a¹üåMo糩|ºñH;©^àFÀÅSÒ¾,€nBøÿ†Ÿ í®­úÑ•í¿«³ˆÛÀPŒÙÏ£@+ ’m…Å`B’ 3¯‰YÇqm"A€®ZôMìæ•"4©- )®œ‘ŽáD¢Ê`ŸûðËÿˆò,ä­ÅàÞ'“Æy`Ó¯AÕ~4@%¼`½øUƒéϳe|)Sy¹LË/ñ_.€Ô…‚dHòNP¥_&_¡ßüæ7ÚñìútýøÚ0Ýâ9õ•³SWÅ^™åæµdW”‚}1kh…g}‚DÙLcW_®@È`Rû«Ìs”IƒÄJ òÃ>è< =9µâìpë +ꢚó| €.ìÄ£,8Æ °Z +e³ˆà©ÍËüK ѺmÝóð)@ÍXåÜ6A.åó´»8ÞÂx£rmÅxî®ÀÑÝ ú´¦ 5ذà)€ì®²Ås–¶îEömë°vµ ‰‚Ã…dçhülg±‘7¨ìƒ£ƒÅrz¸|†»?ÅxF“Zµ8:\®«*°#õ°˜ÑE@¹Þ|€È·$ÕBël ,,p çeü5³Ñgγ4-Äw÷4ökÒ>Qf®²˜0]yXÐi€$ÿÚÌÊ ©@"Z–x6ÔE´Iኽ1ÞÄïáuÌ¿¿òä‰î7Ýsí4tοÃÉ–—×Δ¯š:@TþÄðz²Ë“†O¤EûϨZ7RÞΰãËséÐk>ôŸýÕg´SðIëkNïSúj%¶á±`LaÌóqonhò °Ö¡„ µRˆdÁ¢Ãj «¤FkòéÉë!TœÇ¥ &˜’ò6 aíùÌ⬛àSšøXçv|ÁGn@=° ÇøÄf¬fŒ|wëJ5çt­Z×¥§mçVu@®äÓóÖA—@s]¾Çxw+Ï"ƪ¾¬mÈ †mòóox°©„/eÅ`åpK#?¸¹¡åå5oÒ¸ÂÓ)QvRU¨¬ñ¨X/,ü=ÿჾu°µ#u=†åÆbŠõ· À3þá̦ËÙŽë tЖN˜Ïå&,¹”ÐÓ¿)Id,ò,Qfm äŽF~á=s –od[²+wѲÜ=é ca;Ç5úwþ}Ò\!”@­ ¡‰¯Úƒ³´ib7ßÄoˆà +Ëw¨ÿ‹ýR]t²5TÍ6ý•b寰ò.«Íó·-ëêÊ:¿Ð/ :’GÆËãOŽ?pD’ÑŠ™TÙ8¾>Fà\__k¿3zw +@—R `fh&©FDÜ5wS£»Ê A”öȇ# $¿ nÈÑ„úÐßí».w¸ +AEWQÚÔè ýà¿h¼Ú@œáXLdÈè èV{¬2¢|¨fY6 fžÓÃF^íx²µƒÕ¶Ÿ-F×#”–+Àòê˜v,30äñ¸ AãÆ° ÀOü=€ü‡]ë߀ۼ Ü)‹‡T®p|Ù|TAˆ÷Mìù3o +„©0àLÜ©õ‰¼ÿÅLŒ?\-5ÑýoqH?i„Ù|<¢‰àwk}ºñËu?¦!K6­‡ÿq"âö€Ÿþg”_ÚãT­ ~æñI<€@!„65jûç’ã¡€é†7ø1Ìò¢Šý +ÆäÇØ+µ^Ë@dqÛ<ñU’3>8*¢M̰ñ«*€°bRÐèïjKþ¼ÝòÓø¯Ð +T)àã|"Ÿ}ýšÝY– +(ηê4hMcЏ‰Bœ½RÚ&×|.á³ÏèxöóóÉz)Zk­œKÈ-ÚY™“±8Zµš÷~‚±÷âÝDbPŒRæ„€ô+¨¿z²ÒââÖ8îŸSÔ -~ˆÊÔcí@‡húFáâë„&ü•?£›o/JØÆ†ü~y±\^wú¯mV $Û©•æ‘ÚA$†¦)«`euG¡TýAÓ£u <!— öãT€€Òj²Ï–:vа”— 3̳١4Èáâ•+»Ê|sa¶™©g” qŠéŠ93P€JK +f9îÌ{o0Aƒ +öÞ½@Ù @†½',!_$‹ä”ã5^ü ѬYmO°þÚ³Sz²ü ×Òôü;¿\©ÿ_^Ÿ_¿’P&8'jÞÖœ9Ze ÑžÇòü*ñT‘ ¤o¢»oÔ¤Ë +@¡ôÉ÷ŸL>ûì3Àõ%3Î"=Ü´ bU°¥ó|òˆODàà ®’C~ 7_늖Iz$øÚ›yø¯IäeÊýÚÉP¼ŒN¢äJE0ØJd¤c:°ý! Ô‚ÏI®hÇ\)&fSËSÁóÏÂÉ#·5سe‹”ƒv±pBI¦4„°; í?@s¿~@*Iª=”eb\+ ÀWvF0ݯÁõ|$”ÿ²t‚æ4à´*@Ìú[¸O\?á z-1´wù›2‰R( ±&×lM:À- +Ó-?ò?¤éoq¤…<€¹ ýd1ý0 +@U¬¹\)€õ™Ûþ—T¦G<0äf”-Ï òw%ï"ƒ/Ö[š-ä&†ËÌ ‹¹•¿JŒâ¢b¨)ô„=¬€7õØJ¢×©÷[ŠÝm¡ˆrr ŸÊà8¶ä¸v¦µÇkkå ½\k€ÇxÕ XZðäŸé^å_™sM%@ynÄf)WP‘0’ìâñ c”m~ÀÉ® Hb*M$ùRt›žü•*)ÕÎÐçç\–ωpaÁ‚Ž„àa¸ŒžŒTÉ·DŽï¿ £4Eò ~‚gPøÜTåuÁ%iMÖ˜­tv¤4wU²óq G{½Á÷ð†z Êc‘jZv9–ÌH4Tø_Ôn +Hµ7¤Úvv\µÕ&oÓ”*€y&`ìœqíƒ|Râ¢õzÀ9e€ X9$~½ólñßȦãXhŒ`M þ»Àƒ€Û×< ÀݬýÀ—««êbªôð}Þ*ñÌ‚t€²¼V +ÖÍ>Ï–¬ûΕ´˜Íí¸'Àrz8}¶Ø§vÝÅÑâ™VýŽfRs©ÕÐS†èO 7 +ଙ3I·à§O Åþ4«œ¼ àn@è-ß$Åæ(?Ö¦œA´|BÅc 0¿F¯³ÑOGÿ»Ÿƒ 0·Á蜀N@~Ö­|€Po@Ã~¬¿‡ÕÆÿËËW¯Dÿkñÿ•ùîg£žGY:¬…? |#üEòl8›ŒOöü&tkhP¢H€øNÝ@Ëßg×Ç““y¹>‰å§w‘PWÒá¥ÊUG@älM_QÅÁ‰ ñªÿËØ ²³ä¿ZÄŠõGª•ã +›ÿ½àþcJ‚Ö`¡1*Y(JZÕ1¬ ^Ñš_7çÀBi†z-ì¿Oµ¨ëJ.c ^Û±]•`5Ò|èmB Ax¸@žÀ~öp +cð­$í ¶¬”-š7ÈøR€ÝW–2ò6úõoKà ð½å4Ò ^²¯BS§û<¢–P6»}?ʿӂX_Æß¸«dýùàøíÓñÒOOð÷çËù!U€ÅB +àb1Ý—*Ø©¦7—Ùß!›¦³Åº4‡ø¿\<ÛÒYä,¨#Hq æxØ­æ êØFW= +Ù%(Œ)Àà ÐÕHñõ€Û–¢ÎÀhµ„æ×Mã¢?C jGB>O—59ÐSæ€Í¡iWÍmþíä«`´ücÿï´ý«ê/Õx‰ zÒuž÷Zj¬o$˜š°¿Ã™[±•w¼^ùfd…ÄDšôå±Â{¿ G?“8ž\þ˳uˆ/Ø(„ä|FVve^_äL«4óg SõH—égB¡|ÐT&FÞ€=€^PØ”°*û;\,Z1û‰òƼÚ\‰g½WÞRð£QÇ~¢½È!ö@%œçh€U€TÈÀ» d›“JÊã(¾šIžTŸÜ§”s¸•€¬RÀ¶a$þáúÕ…-¼}~óßÜ'èWnhý3ÿQË×¢?€F_uG*Ù PTðTƒ%¡J€©“ò‚?˜ÓP¥XnñŽ1Äž.EeU4. ÓýgkÄS@¼’Çÿ‡¨ùÓNÈ Ðª;ÐvaWæÇ´©04 ÿÅèMqzª¡EÏÂ’¢ólÌ·•ˆŠ*®Šû´zŠ+Pƒϲ^I¦ 4Ï9X%Rþ¿øo%`¯?äw°½Ð{f¿›°þ¯ÎDõÀ{4€FÚäþÃ? õqŸ ñ”‘FVYäSÿYôÕ6€$ŠÜ<æk“_¿ù—¿ù_ïM~þWœ£ˆ/½ÒT€…H`%½nyðœ'*ølön Ø¡ ýÁÑAdG²låÿÚîØï{¥|á0wHb2qܧo‡4`÷‹áÅø½|sµS¸ÞEü§ +@; ¿‹ò)]Š!‰„F˜0ÝMCßÀE•Ã~ñÜžB÷€”kÔZž'ÐHXû`&ü¡Ñ휩 Óþ) ·Ë l¼¬=.@WЀ¼˜]@öß}´á¿îZª¸-”¯”·'“"̸bt|¤zÊ3N·³!G€ATøé|tD_À%Oùg‹Å3ü~À\õýu|ÁùT´gi€Dmðü ¢.£hó§ + Òc@Ã# +=Væ^ª|Y \|¼65-KJ…˜n'@üÍ´€çf¹mÔÂ3óœQû8ÎçiYãã8@ðÎ^A„ÿ×¶Åö¡Ø* `óŸ—ŸUýmÿ{€Þ@—_õ£kÓ¿)€ ˜Þq¿Â-×€w¼Î-£>›ü¤wXø£ô Ú“  *Ï>ÿÍ_Lö~óŸI5ûÄv7ì¡yM‚®ò‡á¡8RÊ<ÏTÂvvw]éå …^ôèZsOÊW¹h­”á¿‹U UaCv^o"(Æ“—ÅvÛýªð¶¥Þƒ ¥Éþ”`­æ6ÄHØ(EZUxŽøÌnU6Þð¾•@·M)„ù†XŸƒüŽ“‚ )öÕÒ‚uÆ…ÕJÏÿý^ØÌãÜ4“äØxÃATƒ5@ö/FÑ¡{RõK¹ND€=18»^…ż¶zÉ7S\| '̬¨í«no󮼪®Àvò=zdOo„HÐdÀç9ÏACçìÙòÃ}Ù¸âÿ%…ÊÀßw- …Œ& È…CBŠO€Ù¦v ;rU|‡½Çj¬5/<êˆ;§œÝ{$4Y¼iP`»«µð‘nñ0ýEýk™7†Pžÿåeè¾¢¾©ªk²ÜK²yù±2-A<€¾Ì“(„ïøåd”/‚Hiõ7!’OcºD ÀfKÇPÏâÅ GÓ8-òò=dð»§€y Upº]߸„ ë”s&ß”÷ @¯ +Ç$þEb/u¤W„äͤg/=#4¶RlÖãÈ—_Ó¶nÐÚ4Êˇåæq\áYhvá>Ћ«öÕ£ÔÏ•5û"Í…»M³·âº¡ï + Ño¯¯eÿEw¯âP7`+ìï´ oc·Ç€Tÿýö¬(M)yæá¶ÙáY€D‘™&‘_>@Î5žñ2OyÅìñr6“-wÀd©åþbº3ÚÚٙɘ©Péö/·@ÇÚ8òc@mÆü ;®> Wz³Ø´f€)%ïe8o²#ƒÚ–ò!?3¢¤¥§ƒ¶tº ëUØ\ö˜p·Æ.•+Ê-Èù™e0ÛKØ0û™°ù—ÃSÀý¿Æ(`ý©þÓò'=ÈPf| ÜÍPÆøU`rƒ,K61/Е·Ò–¼Ü;Ûm¼úC,0­××{{.œ:ïÀé cc2²"ÀL¦–¯âxÚ[ÿ(€­´Iõ°ã°õ÷pCÜ1Ÿn©¦ˆ×u(„€Ûñ‚ç)º½æèT€­åÈyTŒÎF4ðöÎpEàøýãŽ?i@$HâAyšÓ¶Ï©åC+;+6óŽÂ¤‡ðò»ù°™n(X5ò¬/å;ZGí/Ê—2yES_òø×B<Ûþò¤!P ¨"´ÒÀ5ø$ 4­ ¬¿Ÿj°àÒö<]r­E…ºån“QYñ ÿŸÿ fôü‘­·1_Ný8°óÇ÷ÿ´×lþ! +€¸#¾À¡<<éõ¦‚”ùwÀC1CEGAS¬‘…‚%ƒrªÕƒàâ+ökòà$@YÖ(Z¶™ÓmÝ¡bûS±>àÓXF+ä5/à»Pü¼õ$_Šü€þ?ý¥ÿnõ_U¯ÊúÓ@CD÷ë QçëßÌ¡„Pyóù$’º[2dÈÿ¤gï=`}²÷‹ë?dÿãëÓɹÜPê =ì1Ü´Mßžíòôû@Ù¹ @nÄð­.Q—nEPΙtH¤w#±ù.dÈš±äÀ¢ª Àà³RŒ æ¿<è3_`_¦š>¸kb{2»5óÓ­†¬uqÚƒ7¥t² ŽÐ +.€‡† ÃïÜ~q#-ÅY¥;@mÁök†õO€×†qè Ã;RV´1ÿóu¼nøæÐ±ôZ[_Ƽ€ýw€<ýÙB#=ç¬WW`+ï:–W€ð–¼!´Ø™.ŽèÔªgñßMÙ¢¿+š¦u—n<€@Raa¶P8X«ÌvBÞ°²kÀ`³ÒÎv˜ßâ{ÑŸFHœ=€»C±½y]@(ö íé?}þªþÍþ—õ§òßÕý¯¥smƒù^ÅGw­ß'¨³§É PuÙLgñßHð2À-U~sß ý€¡¿­¿½>à¡ýLÙKÛ?Ù¬AžÙ¸ÿï>wôhcËí€;³±¿Jàr±œÁùQ|Dv_ +€&þ¢ýi&œO—– i€%å.Í!ê?{Æ£‚½l½ûÿu +€‡*­´ Ë©  ¼T¨¶ga·І¤A)Ç䳩< ÛFz?ËW±™³µ®«äôýPT/Pð¿À +Åÿ(€2ÿ,“±þ]ã_믉õWóÛ†H¾B‚­à< ýÁ{˜õÌ4OÒúÈŸõueëOͤï|…šyuàP7V«t‘¶¢û]<Ù” +ØÚª6{þ,F.ƒöýÇu¡5D¹×]¨¢o0±­û|ƒBç°ôÁ=´Û¤(ý àøøò/F£4@J´X.@}"O÷U-‡öÍÊ{áÉë~ y§Äø¯“ÉÓ/…‚p€| ö°ôš ûíâ@ǧòí¥Šún°ˆð-ĸrÃ߯ßJ€ †ßú~ø£ vTd¢6mtðåK "ÿb:ûV@ž+ôÞþxÎs:¥0§ñ¤h:°ìSÛ§÷QÀ±ÀÅ…^åDñ{V Y^e(8 uG!n­Ï3Û‡4Wé½â̺NߎîÆbzáŽÐi€0ßèèßÜ-¯//_…ýX*ÿð`ñpZJ¶#ê’jÖ&ôŽSž8C\û)äÝ)t€À²ó¤ .KŸñY°ÉDµ‰ä.Wh—Þ{¯Œ?N€üKø¬*¾X^Œ_Á¦†dÄ6;‚ôèÛ¦™iÔå9y®ë¹5iãÂÌIe’+†ÛÐÌ“£Kxû`^r_à“úSœF]ØPNq/BYÔ¢. á` +ÿó$ÏLu10Aþ8«˜æDhƒ×´—ÍGD˜õŒTT;à{^æ_Ã=9Ö,ÙD„ø° +à +Ö29£<ñ¿÷ý{¸ÜDЦ¿µ³³ó)Ø,òó)pª +` 0£+p÷õŸÃÙl&%`Ù Å­À‘öÿ…È= + ø/ëoM bC3! Oš¹¬Õ,ˆ°ù=¤ + P¢òüqLW£+ë¯E¥)€jSô™æŸà9býðC"ñdÙˆÜKðìcçHÏ~`Î…wNUÛc}Ρ>Âê\­S9½Î\Ëæø°n ñ£(¿±ßüçÉÛCÙ¬›È"¹Kù)Z%QHr`µær€ÂÉ"Cu2%PÏ3jÍáRn8Qý_Þ¥‹jÞœCÁœ5± 0¯Ûi~°/â6®‡æ°0@¨`¸© åÀèˆOÛ!¾€ÈJûïÁ-#˜ ½M÷›+W`½'Í\5È.mý­lÿ£RT¡ØW‰ÔÓêß©t•7ü{Ãü_ã4RøsL¸ùϦ´‘,Wò¤eÙGþ،ǀìJ#mrv—|@…ç±ÿ½ Æ—ßz† +ˆÀÍà’rÐ`5± DŠyóÒ““ÙâÁ5VÂoA‰ä>‰‘õÒ1žµàã¶ËxÜ?À}©´–àÿk&òû•€¤òA(Ííp„¯ÿ±^±º9gˆ&g‚•”h`\eX…ù‘zeqøïÜo… Àæ_£Û ÿ= °¹µ­¼ˆ.4ÿå!¸ +à~ujt¦–:òÕ0Ä7™á°iî7løè6xNÔÁ=¼l¿ù¯=pŽyEÂ¥*P–DîÉÄèå…¬w‹a€„"¹éÎHÀëìÁ ¤‘Î}uQ¬Üó5ø[KõÀ¶ž§ûRøBfVV¸¾h´ŒÏžïQûÝØÒÁ¥þûãÑÚÆÚ†<N¹§]˜NýZÀò—·š-—¿R‰F@×´7_ Ÿ-]XðAÇ¡ø˜ð,¢/:Àz å)ä_a?ÕÙˆ eŽu©µæMb$2ĶS’½´‡º±ù­ŒpØÍ»Z&Ûʳ¬x5mmý`{@øòî©€ÆÿAÏ¿Thüëéó/ú»ðê×à²üà:%ì|2jZ{‚U“fN¤W”qÞi}ã*£bœÏJîæœ‰!è€=”ÀøÑ¨ñÿ¾€÷Ÿ?¥mo;â‰põÜ„,n6×Ì`]^sinKN?kÚ¨ qŽÓýËE–¡»ÎéË_RRý9™ ©áª.̂٠¿`ºÉü† ò÷#x÷†¹+âæ¡'­:˜qVðÓö_“ªé2û2¸:à±@U<Às9û‹4¢nS€ö¨€[·øtv€µ‹Nž*€ÉO×K/2PÔßcœÿôt7 èÏ¿Dóé‡ZY.þhwAï&¦º/WaüH›gÒ[Ϩ/jý?8°€ð OÂpûËàYà©"R”Á)Ñ T$ÃpÉu›¶kf!R–°7ÉzÞdt0"é°—ŽêÀªPrâ e‚ß›Eø'¼à®0ûïzÿFã¿Í~šÿhH§ Õ’ä·€ HÀMÖ ø‚nλ+t8Þ%Ç vˆ#ã¬óU–ëþŸzËé\Á«u)бý·à· ?þAš˜»7Tøï8õ=Ômی䦆À ñå$ @*¼±yÚRôó­)°þ‰ád, ïxÂçQñ>In’ÌS˜ăeðXŒ×4S¥¼êøŽc«ça¤9é8“Ÿy@5"VZn:mÿÝ @„]x`eõ¿on¤¸”Vìú3ç:¾-Ξ1Õ“xþ"˜ý½à²þýaþËÓo¿³3/hæGÈøS×ßölÊw–·ºþ€&XðÈï&ÿÅrôh}¼5™n©ÄÇ : ~ž&ÿôt O±ÏÎèã%hƒ•!%TWÒס"ÙZì”·’¬D4ê¦Ë©§ŠéÄÏC?Ë¡þ$uL„´=³Œo>Ž +Ø~¼&ê?y¢µ;à®õp:ûýóàÏÆ_µó_ú!É}+Z–$3X ‹ ³s„Áý!©iPº\ã¤] êÄî›×­ÕB¨68M÷§RqÄþmfÅþý…M×ÿ}5r .E®Ñ…m»íëØ²K&`¹äÄÑ{/dóµUñŠðx?<…(“ÍÜþ/“C_€ã—•cu]n ( +ãnkïdõ/ø :AÈî­5ײF·ÉÇ‹6Ñâ¿?Û­Ú=À0]‡h +À~€WºçE8äÆ83ççÄt´RÁˆó5¢úÖmt¢ €öýùx™Ìÿb6¥ÿßbqKƒàáÑb¶5z–*ÀÌ=§ôJï?* 3¹#®8hW¿ @¤·0Ýí¬b F'~MÖy}D+6b¶cw£!Dº 4³nÅ2cÓCárTѾ]E³ôù• +À ¨Ë0áïjÞý[…+BO? 9ÞŸ¿Ê‹_é˜0Húº-/|‡TvÂ~…*)BKœÓPI"SÃÒ'葼îgÙn`òK ¼­þ`SìÿŽÑ=ú߀ï»Hз0HÅÊæ:(q0‘½ÕÚ€×EÂnC;§-ò Pb:[mÒ*Áô÷a~Äë|äSò¡UÂ記w¶Ù?¿eÑ ™ž˜çÿe½±{µpPÏhùO‡Ãˆð9YãÁ¾öÙq ¸±Zñ©­è`€6€Và«$æ¾}›«Ëú÷G¶ý÷ÇGü Œo|ÓùE€{ÿËéÊÅ?šïúÍÀ1òäÜŒvÜ.è‡ã™;\\-®/ä»  5ùž@þÓÓëðxÌ)  4Ñ3ôè(d§™2 @%¢ m©ËÁjöÎ\`{Ô‰ïa­þx{SZPw4@{ô7„]€Žôÿtÿó™.KÔ•B’Mh/ÈÝ,Z¶9(TRPä}"¢'à1ÊdŸ, +æ-˜îÖwÏ­Jà ¦¿€ó—Ë'“½t£¾  µ +*ëÆ$d›™©žö„‰ö>ìî5Þ$@ŠØ¨H9þG´6%ŒÒ Y.›pþñTHžïq²I¦V²_)Ø UÍ~–²Ï8bh<€ýÝ©}êÀA^ª+Ò(jÙpŒº á~ÚQ/îš`€SÒ  « à²þ–Øñ9Ïy‹#¿û¿8Üß—"ùw?€?ò>óá»ö´U—¶×à?Éþ«V€»p(¹Nù³…›Ny+X€¯ô«CKIGDH—‘‹¸3Õý ‘®šu«»¶¸·’Y9 Þ‘ÓoHè÷p QC `Æw ÿOyßN¿Û€ô¯ø€"üí´ºÒ× ½n¶WQi@‘N¸Ç¡{t“êZ:p?p§ãÿÀ ðº2CU!ï€Ìmìœö +·¢“ÖéU¸”nxJAK`2Û4“¥‡ðZÐò‡°8†¶gOÁ:ÁQî|òÁ'üÀiîèËÓ íÞ,í¼µ—/eüa¦9êw²(”𣺃Ýi÷»$h9 +}x}0¥ + +rj šÿV/̺Æ >e¾ÕÒÙªº\Šú[`wkg—¿ ,dÈù«ÊÖDµy>ý6YÔ ¤ ¦¿ýq ø"h4ß’.à-`q€n‚ÎÕ +Ð{±öghw¢Äâ”|hž|ìå¨&§’Ô;ì¬D” 9"‚žïM5¶™çÝJÁ§w5€…Þ·É3 ˆsÔàa@ØÞ!¯C ß´w%€ÖXÿÐÿ«êf¸ èQ‰$«¥k˜@r˜dff/ ê Ó Áº?†ÞÛÿU/€Õ(‚ûà|/ݨA@ûFQôUà¢(œDi‰„¨1š—E¬"¼…¿ %PPÌ´• äø“òP WHé \Cï<ƒÜPïF†;&™-°Þ* ÄÔ’‚ðÕÒPJ eý{C‡?âÃ- ¾ :›ÈäËŠÓÉë½rìy-pyà/„ãìŒù$B6¦nð[êØÞ˜»Еêÿ‚ëý”ä— +|}ª "´Ñ§œ¼ÌB¨PÙƒOù+’/‹K ¿ç²(ô²Ÿµ¸¯ß‡ 7ÉUè^ nQž ¡;è­¿çeöÍ~žû_»W®èÿU +Àê1l° #Ü´å9"q™™®ƒJH*Úäéò¬Õ±$„™¬Cfë€C/À“Ã=³dn„|¹¿è0¥îd¸´“@6ùóÊJ‘-½Éoþ£&H)O °ÿÉ^Øc¨H™´5ÑI6؇ËbwS|y{ Õ߈ýQ&v ^a3Ôü ÷MSw&¶°?ET ›ªÈð¹=àçì£p°õ¾Îé+pRÎJ­Xè”îï.‰÷™iA ø£à9)ÿ0™…Cwô•ýŸé +|t¸<’ 7áÈ +€Ú€5w@½ÀÀ‚À“ééU(L¼V=Á¥ï!è\E¸À„»ä• +,E‹”1º˜Kû!cfm[¶ÏÝ ñÁÒ|Ìž_0óK˜ÊÖ¿¯Ä0 ?À%Sp]É¿?ÀäºØ!D Ú4wKÓºf%œøKA¥ $]ðN;JÃCÙ+çgSôW’K„ìNyÍß +çòpdft…›rwRLmà;QJf¬{™z®x•}x2P9‚†ð\ñôÿ¥€Ö˜‚òZ +¹—r¿âöø¥â˜¡âb9Öæ§õóè€R4ÓÃÔ<ÿ;ØÝ÷{@°Õ5ö]ÅCG£¨øD@Õ B™Yµ¸wϬâìú§cš22s·«o÷|¤½h¬*€;Φ3ÿšaZ•€!×x±AÜ·>Åÿæ¸î?P²ôÀô·é÷ÀäÃC¾mˆRôWöy#5ÞxV¬äî‰ÙC•ªeTJœ6¯$•NmÛZ[j^»Œ\Vnœßl?F}P øÔ«#çVÑ<Ã4…æ(B‚â: +°Øo P€œ­pQdN¹ÿJ?QF +€ÎñÑ­tJ@Î>¤Æ‰±J`£˜Ï ¾2z°*ÜQO …¬õ¦^ðM ^2ækBtÛ`dn›ß]ÇHs´¸!p)Üà¡¿5À‚^@:ãØÿô§òîï,çsËßá¿ìÿÖ®<ùðªÛó&°»¸I Þ”°ãwè+Œ¶˜>›¨ +à×ê AþÆA-’sÿKìñbp‡j*ªÇ@DÞóÇÿ;)m ÂZɨˆš;À¬íìFM™{ÑÁ±œ=gñ #H7úú—dOš`-Ð)ÿ!±jÿ–ŸŽ?éÿ[[ ’çžöý$¶´[ü xPc ¥V<¾ öÞ«$JN—4Ö49u‰KBkÁ¼E£ w<€déΓP–⛹œNÔuN1Q¥Û +Øì4I FÑ6!Eùa¿ylÚ›þä ,÷Ë5j¨9E`šhô5¸l®¾>¢KÛr ½MîØÿ7Rx²øp=P¸–"¥¢ÙG ØÊbÌkv–Ó}Ùê…̵*ì¢ëà•ÝQ´„yË1i`æS¢P´ÆÛI:g{¸hà…4 +¿áMëGë_Ê 0þ¶þ?Z{äwdÌçØpšñ÷?\ò°éâP™%p¸X¢øð|º£Jƒ4ƒ6.Ü  +@^Ê1(ÈÎ×÷šæyX +€*Å šé¸šÇB…*.ÉPP3¯Ö–š•èuƒÇÄjž¨BEkÉ¡ £õ­wÑÀ2ïQ¡È- NWËÿÜ~øÿs蟆÷”ĹÄé¥Ü`iy·ìÃ,¾_vQ<«oñ4Uš‚$„@%°fŒ$:Ȳ_#ä„J×^ ¶ü€×îbó1}„žäÒƒÑWRq>è`ìÍìHDÈnÓ/TõŸ ‡‚kÆ¡Š3ù™”3Ç/_ž¼<éšl^|ᨀ¡ˆµ7ÿ5«?u°¢¹Ý‚Ö>û +ÌÑ8êKYë|¶s±¿¿À_?Àà#ûØGw©žŽÂgÏ`üM÷ò!Sˆó9!ûî5ö¿è¿;ÙÚô¸þ°ßž4þ–С:>  `&6ûQÞrAŸ¿RþÔÿt:ÚûµUÖ~c±Eo¡Åxkg¼ÃŠ[ûýÜPÚ*IBqÜÐÙ)¯hV |Œ””ƒCþ#ËÆN{JK­Ç{5±Ä{«mÉÜ‹6KdÁÛ<øLÝŠû“w7åøÓWZ“”[t³òî8ƒ·€;÷?{ÜQ¶‹ôÿôIDATjLc–ð@‚moà5Wïk@9z§ @y· €”$K –•¾¶UCfmÅ!'Tã= (Äóšu¨×Ÿ§sJAw¸êˆöJŸÒŒ0(ul@h†mg‘­2ûÂgJC87¼—Σª(ûñÞD·Òh]­ªë-Ô§²ïOñüÀ]óx -V¡¿W´¡°jýá¿ Qe¨íð! )„ t¿9ÏEmÖ"·´%B|­Åô³Ûs7ò5P7ìÈV»ÎÏü O*ßü»Æ1OóÝÀ}BçC÷ï=:ò?‚§K:÷*j4ÝÉ»>ãñ(»Nå;¸ +¯*f€yI¤Ê"°÷rÚ{¶ÿ)î` üdº 2óÂ¥Kj'§%\ý‹Z­¡› vö,C ùµQQV[›ž×›ï¨L#d(úƒ¢òtöã!¿;ÙE¸ïþ ——–hMY{þ,„«F|¼çîm‚¿ 8yÈÈ·z•(­T"³:@[K|’ í*À!€"\¥ÿpµr4£§îJÜdî“yèÔ*]IuøÝ¯BpÞÔš9¯ÝXë‘©<>÷ÈGËP¹Ü„òæ¿@›ÜÙŸg( +±?ôÇ ý½÷ñåíÿ:/Ÿì9ÀH _§ëŽæûÓ‘5„  yw¾?Öœ)U|ÏXR§Ð ³ñL‘ó¸à?XåYÔ׿-ÿGk<ð¯A5òE 7ã»æÏLì?:ºõ—~ÝH>‚ ¼À‘iïÏ‚ËË‘°Åw)7Â" ÏeþñxXUõ•“6P¿#HùôX1_ѲTfDyÙÖˆÏ̱ T(1mÔD¬W<Z|w† ôô©Ç|Oz ÐÁäǸkÿÝÙWFŸ€ýš ?xEWUlÛ b/,ð6oßòÐΖ÷·µ$IA2ƇYPP‚Sè­™µ•ì7ªiïºPyA +ÿ{뜣mÌL€†€ÉHra~‡±wâ©ìwÙÀîJ7ydM©HåB”€ ]â  ™íç ÷ +€ÓæMùa¿l;¿Ù~¬?öŸ•[3±—­?0“Ã}WÕiˆÇߟ–;-:ïá7Ÿ'(ƒ¯sèT +3´syò)U©'ãüd™!€á[Bnß‘ñ§'M¸T€«K~ 2?œò2Í…â÷Q}„׸?à)2åï LK &kX<à”"Ãþ#ìC4ë0l+.w ©[xˆ€ Ö˜1® Ã…÷®™w4¼– [ŒÈ_üwŸ¿ÇÝÇÀŠ †u€<€!¹ùÿï+º¨þ}~ŒFx h'4º™ð9¦-âð@{ü^mN Ï>ed8·†h«Þ9®?ôw:ã°’ €M¦ÿ昃'ο6¶ËgXjúsë +Y‡‘VZA:öW6h£‚0;¦£ØÏaòçRù$m†sà + /T$aí/}o¾øò_α ‹‹yÿ›?ÿ_cyoLüLi¬×ðÚ?ïª*€(@—>ªÀ“eµ]ƒ€ßÔ¾„¬ VÚ‡û•¢³íèL¼„»ï±_:ü­à^ôæc˜NÓ`>?Z,ùÝßZ,§¿ÂìóMÀ-Õ÷Ÿ© + #¡Ù4_¢áÝTÕ‚Ål63ÿ©pO£På( +™Fè‘’òœ¾*^´h1rñY¨b¶«Uwe´“Vš–ØÝ’â*ðGŸ^¨ªƒð‡§õ’ïÝvŒGò5uMÿŒñ¹ù"´Ûü°ÿdÿápà‡ª¯µÙÆ + qï–Öˆ¾$º)T{ÊÇ<7¤<àžÑˆÇµÐÞs•ÓlºZvh«$><Vs$”¶Â‚Òÿàk@…íí–‰5rFzt *Ï®hMR›wê=(‘ô€ õPyaÐN]${ƒ<±$xr¢M/i{ŽP:÷€ßðó³øâ{æÂv‘ݤ÷s?ènG Uâ7”`Û]¬ff}wlûŸÙîÈsA[íÔïïjÉA²òø† ªmàâ«…ãïê¿éÏ@Jr`õ¿‹Ðyã-)«YL¸˜=“ º¼zþÒ·P¼ðû˜}U–òtƒpžmÎY$K`ÛS€xÐ^1.O× +ÕéîÏŠ]Çõ-A%I½¶>Úÿ×—»®¦è>G‡Rp^rN‡*4òèØ4>å&w6øæ‘=€ÅâSå3çõi%9­WFOžlñ%\O$ò&}N€[ÉÐi0½±þ´øCÿúÊäL wO€»à£ éá¶ŒÃzgŽÖý4JŸ¤À‹‰²÷á6zO`¹'1ûûV­jld‹2f¶H‚3cß¶ÿãó{nÀÔ"ÇgîÐÛ@޵Ll£Ï +[‰È€ªÚ$Ȳ³JØÔ‡ö–·ÐC€Øâû0e’jH +*{>ðç@Ó ˆä„ÿÆÐ¸eŸ˜ýiD3 °øö:À»XÙ~|êðñêSa·Õ£SRn¤jP?&ꆩ&©¶kæ +ÄÔ}  : Ùþ]=Ÿu¼Ã·¾ÆÓ#>ô'.KF¢ÜˆÿÅUÆ~ `@¶ÞŸÇtŒ ½†€·â°ª¤ ku•šd¡cºÊÿÀH¼æM4=ÔÈ4“W+q^Ž}—ñ¥²À,Ú`*ùJ¬<þy´<º½¸ZðìV>ç3|Ï×G|æRàÉ¿|7BOc`×0X€Æò.ó’ÿåõ™*ÿa?úï­mî:ðJ*ÿî„Ù?­€cîdï´xéž‚v#ò¾à§w“[)¢ Á‡Ì¨Š©Ÿ¬6“Íþ(Ri°û‡ØÜTU@k2Òcf†5@“”$ÖZ–¤À”h µ†ø°¿Å‰e@ÿŸ“—Yz7k ÿ|ý_ú {ájßôtŠ@Q&ë·ÿû=Wÿiàk~fç:€4Ü€Õžäo*…b›À—VvÝ¡g¢}îi +±¾â܉¨a#M~ß?PXï§ãÅÓg²ëyqß®óbßý)ÿÅþÇÁ³æüŠ.Nö´È‰ŸÙsñ|{‹^€íMy›V’òÖ`Àz@Dæ¡ß«W´ýCxQ“4šŸ¬ßç=&¤É@>€%Ü„Üza¡—¶d…S9|r‚T‡ÿXÿÞÈ»y£u“ýA8ÕmÈL—ÐJ¥4µ©€8@ô'²"ý©tÅ” `ˆ[‘ +Ör0ÕºŽT9Z€M÷0Ö»’`[ÏZösŽ8V(`&@tƒOëF¾‚äË ´`¯9ŸêñSÑœu¨ïJ€•Z«`óÏC»8Õa7­wâ>ÝñïUp7À6ô +½ûðËUª÷1õžM[Ë¡‚cúvÆ_Õ¾áçRýž _>¶Æ»ÏÆãÞö•¯/©àÏÀ¢Óárñ+w>\Ìè3×íÌýñ@<€-Sê)ýˆh!ÐAB„Òåøk&lJ¡ÿàµ1¼D" ”‚ã²Qó’OæºsÏÓ]Ý-?1\,« @“«ö¤ËÐ ¨‡i°·²³3=XS œn/>ÐjB]Ds¹ú4>Þη/$³),7 ¶Q=|áóå¥T€œ'’_!œŸÉ'PLû†åw€–ÇZ…ˆ¬FiäÝe“å…Ú<€c¿ xÇàgS )Xä•CnÉ‘Â#`•Þà† ùaó*¤HºU@EY9jù¤Úÿ‹ü€Œd©‘r-X·9q^íPY[è)€6°3ÀqÙu@ˆ¹€j”@~å¬f¿Àµ£r#Ð`ì Áë+žV¬µÔ׺bJ@hü·ÿï€=€jà5 ¼··»K?¹hió›{òDû‰6 44îïs„Ï_°â’0ÿéñ£{ÿ^ùßé$žîˆM~¯O6\Ž¿Ý~¤E¦UNµhDšOÓ@;í]ÀÈQ‹TùctA¯(2•¨ÖOh`8$ó£3߳Ɇ¤÷(‚ä×[ìR%q#àrê6´–ìõÏ®ì.¤ žIäNé·ÐžàÈÍ1’%ŸkÈ6°p„x#qßÄÜÙê{8Ÿˆû8ÿ<ý¿æ‡I<üG5àã‡õ ¥.ì@ÿsÿ¯SY‚´+Å{_kî74÷Û€{§Ö½ xß™õWG‡WKåãÕÑ>ÞÑᕼFå§yÑAŸjÏoTV}¥˜aüÑ€U¥!ý···œÝèÓR°)ÚÀÊ¢¢¹„Æk¢Iº¶°t˜ì @¾Î"2„XeKóTˆà6€À ˜OÕîÓðæ=SŸ8פ¾@)@~óÿ_£ÝÈ_Ï]ýomn¹7ƒßì:¶‰ö;8tÁ-{Ï'X0–€=•âh§° -ðýj7Âk<ùýñBõiw’xÈ>J\LåIË¡æ»ß3ž!Ï}¸Ã¯Àgª}»#P̪îQô§çö–`±´ÈÛ¬aï¤,‹âæx +Ê"¢a£´BÍ8ïr9YîË!‘º‰˜NŽä<£>¯¤xìÐÐ=hÍ“¦¿Àºªö® þ¸ €ô#¨ìúH½ŸÈÕaûö“­ÍwŸHâÝ/XlÐf¼‡¿™ÝÏ_ôošOü„é| „§+€Í¿Œÿõ¹ö3./Í›~É.âK6Á|E”°÷ONüð¾߯TˆW*Ç¥¿ÚvA½î_fER/nw{ {š/:ÀO>ÉÖ Ð1°˜o(ªã~ehÞJ¾Áô·Wï5¨^“ N}†æ@qÓÝ{’ ^r„`€VҜب ¹{ø6õ¦{Bb²M}­[ Äô»!°øïyygǶßZ@ô§ `ß@Úíü—!—ÈBy<o+‰Ôª&š‹Oœlñ7Ès +€ýß«X{ÄÿùûêK"¦û˜ Õg ‡»‹M£±<~ÝoÐà'×;ªEèhL/ÿyiú÷mx|´W ¦ŸæšÞHó2Z$k€ "Óx÷¬WãC4V<·X{Ýy +`€6ÐmªÂBSÅÆÕyJeóª Ë·ð5ò–϶ä[µ|~!>¯?”aG ±¬Éõǰõ/(Á2ïõ: ý;Äü+æòU£?@ÐM +É? eRd¼‰8«ôxáß=Ø`µ´“‘§3×–߆Ÿ¹rDµñŸê@#ƒÑU¹o* «Ï8?ýQ8K Ž*æ×èóºt]¶ ÅÓØê,gC{à‹_cÅàYp„+IîDþÈPŽÕ«@y%ÀMh2ýCsÞðS€÷$Ð4*îx]@ûiÊ‘¿jqÿóྞÛu@dkUäÆ·×š–쪻vŽ2¬ ð´5Gh_¿þ}{|H'VýŸƒ¨Î"ÿc±Ø_Ldö5b#—‹[‡yPô’ÍÔMA»Ù∧hU¯EÈ9Þ·p´,±$1ªà@WÀÁS™êˆRAyÅqñÖ±ïœ{¼œÊ˜­x3yƒ6ºÖ@{fçp“’J?€´\ô@µ0C¢z×7Âî l·½³?ܼ€xªê‹Ï6ÿ§f;øé ÄCÀóoë?©(Ãõ~ÄWŽd{InI¾ýÏ Á€½‡Ÿˆ! ¿ÊÄs9ý*)‚O«f'À@ΔIûc9}×>°Õ*ÿVú+èSO{ú·žVÅÚ¤Â\,¹×µÐf7h¯ºxˆ2`+€sÖø8ÇROÈ?r0š$>€nd}$Ò3†ÿÑoP¢¹-ižØ)ˆåS "` :óaÿ/®Ä~ñÇ + /îj¬š?"[À¼Û¿w§¾yIŒ9ã yVM½ÉuŠ¿gÀïé>¨h¶ÐmÏde,Í'™£ÛÙòWî =·”,A‰Áº +¤F³£'°QE ½TÀ&ª€€ v*_Þí¤h4`âmðMzÊÉÑýL€TÀ¡<€©Ø¬;pæÅŽ=€g\xØ@¥ÅO¬â|@xº#Ÿ@7KýöŸZð4‰ËÀ @ãDȲ/Þ— KÛŸèH ÈúË'(öÓ!¸÷°ÿr Îq*ª!”Ü–à[ qç^úLøçš2ø6€U`´¾ü‹¯¡t€²GŠüB(gœ«0Cƒ€z ðmxþC/ Ñ_m¥á¿#åò5„ÿ”nùt¤ÚÉåÞÍ\Ò­…bXj#™À“©vÒz"µšÀG8dÃÏ‹À‡Óúl—¸¼U’†P_¯F_ܾFÐ €>ðL‹òUM®Ð Àö_ãÕòçiTõŸN4LøÚ®\Zp›'£ÒÄÉħ @… +NSˆŽtræ:@H^ÆïUÀßñ£©Àä‡RG"‰êÊRdþe<å‚§]}º#j-ÜH_@znÌè`«²°XÒ%k€³Óã“S˳Àc@T"PÔ°–9ø¸{GˉØtÇÀYm@¬ñdô‡m~YÉU€é¸µ\\ =k€Ñãíç¹N%@Ï© ÛÛ~·ˆ{z¼ÅCA>ò›Ä[ÿ8ÿ&¿nBÁ+UþÏɃZ/`Ð%»õH¶K¹%À½G>´êÀCOîx_Ü€á ]ðéÑeÅáÒ™?HhçüT€5]ú={­s‰âüo‘m•AAˆ/„x ÜcÁ*µa3ÌOéÆTh¯Þ±¢ÂÎòÄûePúU âÎ'Ô¥IŸ&³Þk€ü¥^ßÈèK`ôá?#ÌgêÛûñxþ/ð0€;òAþtÀÆwähÌlà vü +îîÄ% +¢Êí>*2™ºmoxbfˆ$%O¿ð=ßÒxkgÎS¼ÉX.¶Ø® +µ¨,.- +¿ èÆ?í®Æ6͇2 sªl4 IJÏ'M” –Ǽ¦wèoàˆÄiˆnÐà[9rÀRLn +G_‘‡ËCè¯j~‹v½XHSûÚ:9,ÀìŸò%#Ý®¶IÛ-–ŸÊH2Ó¸tåß*À:€*€BMÔù-ø¶h°Í°“L¨€ÇO¶;ú+±§g4ñ :6\R¸d׊(ø‰!Å‚ÀÃÁr­e 5 ]Þx°Àðs@¼üйÒ@» R’‡r\!-@D#©SºÙë€üH°ÚÛr'V½Ÿ`²kù½)¤ð|ûy?‹œ›²UA3&)ôV +MmÊé€ôÀôk­tDvÒ”á4ä :Q!9Hé)áßs# ½€: ß‚h¯ +ô—'à§ââ­V¥ · ÜÇ÷÷öxÿ±ÿù ¬{kœúû…x‚<€Ý]Všÿ/¬zgTôH!¦Ò©'‰,÷Ž«h¿ð2p«›ˆOÇæp~$‡Ú4’u¸}F ß°ÐÎ%3Â0i@1ŠO +.¢á|qNûwçð§bükpÝN³2ð ’ Pͳ¥mÂSÕMŽà4 +€–ËO.ç‹é§¢øî²º.è^%Òº!WÜÆ•ªƒnYÐ=înùoæÚöáâBò¯=¥,®ÌS]<<ºÝq=qñl:r{Ÿ=€ÑŒÈhøÐ‰¢Ý.0³§ðòìäåñùj€6À¨AisC·IŸi’Ó׊‡ÌˆÆË’2šRÁÐ]òGSl87,à–ÙD¯$8"*7‹ÿ‚°¾jŒ£s»ÜWug&M@Áb±/1ïT€„øñšZ±–ñK¼Ù`Z0‹0ò|¼¯ˆþ¨òZ LѹJÆ ;$® ûÌð?ýÊÐ1½PïäãHÖ‰&ÿ𾬠X·¦Ld]Ño6+Å$pà8D':^»ôô×öçhÍÂsE…þ&‰W…; ÌnÓ¹÷Ò Ä2(3©3:s¤!Bèä#)’³2àoÔµ}}@˜©%|§ @”·Ù¯@ª¨¡¾n à.€´Øû>€ntäR>¾¸~pû%¾ü‘µ °1à¿Ê6%IPÉ8CÍ“!!¾–î8—To*Àw“›ÚÙâw@»[˜Èù25yÕ»ç|„°Üm^ýSÚž‰ì¼7D¯«Œå¡¼ÉéÖDuì4ÌÏi¬Ä²è5ÉlçÐÂA-y­§ÛŸæ.&æ.®™OÖtC9úWîÆ®{Yã¹£=€ùtöl&¾¹Ð÷*¸ À +@·ùËÉBÕ2¿$(…¤\;aþ5ì?Ûvp€fY èÑ~¬ýx =ð£ç®é¯‚Êd(à‰Í¿Æüx`ýï¼(¦ŸðJT­EÿUþ—€< h€2ObŽàdWxuþêÕùÀ»!¼ÐŒ|Ü.ÈVe«B†ð_©‡Õ› +èðü“TÛ zú“aÖÒÐ_9cÞ÷Z@€®Ã6À¦BnD? ±Þ`Ý5€nµ?Îb%¾ÿ‚ŠË/Ô]`Å9‰6åNà~÷ÀZ@T÷c@‡Ì{/oíhnò£´†®'Ði€«|Ä/ÑñôJj„ËøR’9¨¦i2Ýÿ'+ôWa6 +ÀÚy¢ Ê‡6$q¤¶Jø;‚íx`gá·y¨À,y•Žõ˜ÐÛj.@ _Ö^0Q‡) ¢)N!9 ÂÏÏ¥ª wøCxÀ[/vq)•ÆóÎÒÌ‚ÝÝ÷¥4§+£jûy·MzçÙ³£‰ª¾º¿g²Xü +£ÏhOeº$mîsºN›‡…_-öå(%¼2ä€%9*ÄØzþ#Ûy‹u¹Os =)ƒgûÅü`hûèJ6dÍèè?¬IºCÜ ãi0ÐàãÎèmXzæÕy;‹©î™ÕÀp4ïé`M€ðdþÛ%…›¥š3`/à]¶¬=^¥¿tá!.Î?P¾è˜ÿRl´×I•fÚêM–v¨î9Aó¼¬(íù üðþÀÀÝh–ßôvÀÛ€77P?N:ÎãPÀþÿË   €úQtØŸîÒχvÿékÜÌ¿ç1·ÀÎ*ÿ{ܾˆ!S’t ÉVî­ÕñwĘž€üÞo‹¾}cº÷Œ©(‘æóå‡ñf´¸î¯ÅHõ}m>„öPNq:Ì׈èo~FG NÐ)˜ê¿Ä^jÍšš2uá˜ø.œöÀ«3çõâ©ü›HÿåÐ( σǀ ¾ilû®L;-ÿtm”;G$ŠÌºNà½ì,æ¼,LU`º(i¶ ÜÛ]ày\}‹v£?(°U5žíwÀ¸CÆýÿýWùß)€¿QIðî5ø¸M p¦p=ƒgê?ö^£í¿›Ý‘*/`…þäÎóQ p¤s…»7㜠+Ã¥9\^±ã–"ä=À'P¤£4(¦ †Ð"õ¨`§FâtvèFà?€ŸoÑÀME~Û³¿³ÿ†M¿¿gõ×€dÝÇLTtîŸy<ûÛ®pËC@™Î8=³“Œ`íÆÜš/®Ž{†[¾¸QÉu{BEÑÉ„0Žöå'lSª +0›Oå4,Rä:Š››Ž@1¾ypNW'§k į)(q¸ÔV?ÁnðZWr|dõÃ%-¬ÜËØ˜Æ“-ª"ÓÙl@ òùmôµëtþ!÷ä6©¤à/±W¶<«±ïk‰¶ à™û¼nÿÈ®~©Úÿü”€%¢ŽŸ³·'Ó¿òàÿúCÙó³½N4êgªr)$åó­ÖG6ü5ø8y¯¨ØŠé‡+Z :`¨ 4ö«Nw@å§\y‘¿9†‚iŽaMú`ûð•)Ož¼£˜vÏÌ!žŠSdTBRå\­I¬Y¾Àäk¬GY÷€>pÛ8?€ýô²yÙ{Yç£+`íR’äÛYçOý¼hË_“l|uŠÀ `&ãÿ{@ã²wþýéÎú °jûû´@oaÿ†“uè<€¼% QïËúc' +ꮩ) +$à(ÙÒŠ(ÁïCðQÐGØnc<ÈÎèïŽ>óÙ‚f2+€|ÄÀ#>+©­KòðüÙÖŽ?®I3 &: Ì/E@€¤œRœ”e‚¢aî@·¦©EhändÉ/4“å¯Ñ-Y•-߯ŒüÑŽ$Y"lú£–ƒƒ9i¡EÐ_°À²<€Å’åyϨô* : Õ"úŠJˆý<¡—`šö­öÿý1Vɯð +ýï8¥zòg)pަ|¬À¥lÿyÄè>‡¦ö€Ý„ja­9ƒ×˜”@žï—ðßI¢­þ°c°b¶Ü ÒkþÛïþÈòdKì·ŠðMkˆâ@ù§ +€@Ûh#ëÞÇÙŠ  ÞP óšS âÓ&¢Óù»‰ ­¾¶Á%Eõú*8AùôøúpæßÂ~1ØöǨ +@=èÞlñg¨è×ÇÇ€ê¦Á¦þ¦©Û—Àm{ËߟÔò¯dfivüÎ*€®À~¡ËŸe¡ ½ëcHéx·tåzF½{Ç]×b>åGލèÚví æ'/Ï^ò @7T§`ÜñS*æº×zå…º2ºU]@^‹n!ªK×?Üÿ¨ºø¾éÀSîLêA[µWur# ª,4'ذª+%ã%÷ +!Em›þ¨¥‡ÿQY‹ûÂCä/ºê€^™ªXœð„4´¥þ|,m¨€h +šÒCøÆö>܆R +‡J¨{8–XÛþè‡öoKl¯ªñÜ¡ŽþÛ¿³©ƒâþ <È…@1Ð7ØR¯KÊ PCdìgÅ»ÀÐi9‰Âö;ļ#'ÈvIVj•‰fµiŽí9¿TØ_gßÐúÿðšïÏÂuÏáç\iŒýǰØÍ+|âÓ-ÁŠÀß…è–ÈSG“´.…ž+éž48Aß´ºPñÎ|‚áš5hÃÊó@\Š`ƱØâÙßt<×qÓg<|„â°˜ÎI7X/ÓÀÍWý†ÙiÑy(§ßÁ,; Ân¡Ó½ðÈáh1¦í[¨&?F@âÒíá…j'ºý‰júÏtƒU ˜¯+ s|}ˆ 56Z¢%Ýe÷$Ý–fû÷U; /yUIE0¥zú3­âº–°BýLU, •tÄZ-è.î_jȱ‚œª\S®‡k«4ïì}ïX3tkGK:6Â%]ÎØ¢YOÔÞVà«^@‚fzöyüΖÆ-Ì? k|ÓÝT¤Ã*@)Û{<qÖU}¢ <¾¾¤ÕÐ?ØJ’Àå×€* Ε=Ëè$I÷!Àu€"&”_.£mÅ ækûê{Aû?/°P€&€â¿é¿¿Ï·€ww&wìÿj¸ Ôx§NÝ Àm2õ¤7 š &yh‰CWk¾ƒ «?g!V"?C<\#ïÌÆsQŠ–uíSQçÃ|tz_€ÝLi‚ޏ\qIûÓRØá¿BXܰ?€Ê%€ÝÜ>I4ÿ_øF)·ù—HJ s .w%²}g4ÖÑN—‹eØTä*Øí|½­Ý¹DþVN)ƒþf;*àñÖfºÚ&) °ªÐ¾ŒF'tWl‚ï#ûüxr굞úžªH:$ñ "¸Yh@RbÿëØ<ð5QôCм#vHÞÚ*½˜²¶<"åQ¤8`kûG;•ÀN fzÑŸÃ’)þOê9` ‚5~êòc¡u«Y̽b¼È^ÄUl"l)qýuðKåÿ'Õ6 D~‡›$%ûŽ@â¹õ€ûšõ:›úÇû7ÿ5Åý÷Kþ + +@þ¿Û/ü& ?›ìÿsji–:`Øý§ÖÑXQŠ:¡–€#Y4 8κÀҮň„?#©å_×b¼±ÆH¿8fGØÔÅbrxt€óÿ Oúð–OÌ%~ +àïÿHÉ–=]Ê+«Ï à¾5€ìÿyª‚Õ÷=–šýÜ[• $O¸‹é7€nJ÷b°fP‚`‘p–T¶ a%ÚíᣀªºWjJíˆÌ¦Cùîúÿ +…^¸£>±Z;ùD‰ãVÀñƒÜ0à\šÄúßS•r³‡Õ,À€ÿ:¶]Í:À#1š 9ôÆÕq0¶¿Ú¼Í#οG¶#qb³5WúÉeΊ +€èõ²foIY’yô@î>‰0Tª@i4 P%U Ép‰µ…ûBL¿B{XEªˆ/¾¦e™½Áy›tå~R(ö¿ñ+A_˜ß¦ªæ·î˜€(=`´*€=€Ö@´#`|pÃɹD‡Þ°DÞjüäl¥ à…¥WI÷›ÏMº-ÉQÌy®úð@^Ë(ÇzÉ*âÉþk0ýEˆñR +€Ç{¢Yu-–¿bF˜6€¼ˆÊî H@Õk+ËÿBæØ${þõ7KnÓŽ•‚$¢ç¦Vx\+Áÿ;㎖´D<|VŸ¸ ¶µ{H¦ìììl)Í®•ƒS¿`Ó¯º•Mã©w àP8{9¢4ì…÷PŒ•ð‚6€Ð·£ÿ[€Ãž—¸ã°æ§rü[ÃcT@£½mÈšw–GN)+=` :»ÄOS h* §?ûÃøä•ý»V@f€rä~C8ZÐúúÇ̓ïÂíÃO´†ü'†cxHó¿²ßŸZaÞ½ $#×±ív÷C~ÓÔ?ü6퉾­ƒVBø/êÓ ¯ð&ªõ3*Ô žDÅ´¡ó"†«8•üœúmÖ^¬¶4¥‡é·€l{£3b}CÎóýIzö=2SYpò2C9Ìø9(÷…i×lágäTš§‡"ćðâðVÞþí­äÀÔü•><YÍ¥bìH=ð¹*겫ó—öÂ~s#·+(}r耔‹ ûU!©pú¨èä³éÑdávþ™´•O@3°N¨²~D¯ljù°·G*F¶ä¹´ëw³$ØÈ®å[\ØÚ¶\õlbMM¤-oè)©–b£{È·øê%ý!³:¤ÿ[jÅ ÏY23å9¼ÚDûëj @œßå>îË6ë–Ë¥ÓY€•Àczü­É¸¯)ñ¡þæz/àë¿õÔ')ú?ì¸äú[óB¬¹i۷̯ª€n;ƒŠøª`'ÅŸtÑAVš\q£PÞÐ +ãÍk(Ÿ¦?¨Ï¢§>ˆñ· +XºP3Wx€nth€]÷ôUt ¼ € Yá帻Ãñ©4€<dI 8MWàæ¾–CtOÝ@ü žªÜèý ,à,tÀë5@S@öÌKJÂÎ.Mê¢5ÿ?œÒu–^¿~ +p8ŸKhfîD-a´õÈ;òwà]í4[̶¦>œjÀôì¥Ûÿê¢ØG@”â_^åìB1lBÜÎt>žIG…< +×ùñUxh+báV‹ñtãÑtkjR!£Ûªôû“?È·ªrâèÕ<-Jè\øþvuº6†|36)ÚÑÑÿ+›¸ÁZ²°ði~¿m–R—¯Ž!vkòë^)Ê7ê{)ÀPÊ“D/Ðè€Rqx`zÏú?Etü×Üpr¨Ð™OûúÌzx+¦Ÿ’{ÖF­É‰P”Ö(‡—{{'´d { !ã‚€%#ù& ¤4xPô|óæõk‘ÞÑ̬ + +¹ P£ÀR3»ÿWƒjÌ—@'«<pÕ¢C<€Ó!ëƒgµÕíA¶Ÿtû9 Cš±"{g@ÝiØèBŠÂ"+““ÿ:€;“Qõo~0û‹zj>ç€ÕœÎ£·ü2è +@lçõR³U õîYúÆošøx· ÆTÿå(°¼I@¾ À]öyà>€7t,ð¹{À2qß@ ܲZ[@çàd%†V@üg«ï7ê8ÄÄ'ÔñŸ/%+_xHŠ–$㼧SÝXôçe:öøGZ@ÞÀl9Ígä§[£ñ,¹ ×M}óåÑx‡þ6¥ðt0Ÿ>ƒñ¸(ìkIÑ+²º»€ +ç.J~r?ëðV÷¨+ÉñÞ +e'<8÷=t€¡3<é‘õñ:Í€þòúÅÿ͵5i‚zÎß¼‡{8…nãüD§Óû~z„ÕÆþæó¸ÿzÇ0\/̉N28‹ì¿;\ž¿rºá¼šL7öWä`Ȭ’X(ëŸÑ´Ž + vdûÿƒÍÎú—í7ýÝ@‡ÃþÍ•BijCi€”¤€X˜ÞŠs4;±ž­FÈÞ DÙî¾ÀžþAX{°š}w¾Ï]°C I¤¯6ˆ^ßÒþÏèÊ¿&(€ú(öazvåNÀi^è €4†èš†8N™ ´Ð8€›=F |Ò|ïÅÞÀ¥*%С@~Èç +’ºðŽœìÉt÷SHoæ/óÏ­Ãépª;ãGð¦óå˜7"jªL4jƒ.„²¡Žù˜mBŒJ¯ߘ°Jy¤{U 4é‰àvJ4€î¨à •<_ÇŽýÒ­*„¼SÜÿÜÌÜ.¯ +¸C€!‘Ç éŽO¬,ÎC/òKè„è“Ö °Å­CÓ+ô?ÃúSrÅÿ€›ºß¯»²€ÔkѼ Ô¯©—húJ HíI¦´~F›¿ô9Ô'H Cã§îzÀéÌlз ãf»Ù\(Uð£ÖV4€(Xå.„úÈhB†¤é@p]0úí]'ª< BÄŒ3vnR¬° Œ,J +!*ÿ·€ÐyÿÒݨyØþ4Èø×[€t¨·¦|ÇŸ·9_ûñxÃH÷WÞþ©lýOÎ*´rÌgó%ÁÔ€ï¢IfÐzEýÒ^KJ`Fc°–(ötn$CC1 LùׇE2Yñ£9o5O¦OwYÒÃwé®ÀÞcº6^ok~pš žÑ/P—ò_l‹Çß]µzþãH2š¬GLòŒ…‹,OÜ÷ß„=š»ÔÕo.å"Xh5Vßs\ +x7°·˜Éÿ÷ë„þxˆŽ/²øOîh€Î €:G˜ï@µAWb3P^vtÿ÷dþíX°ô9¾©€×¹‚:¹-¿fRe„5Bq[³Fö6Äð‡iÔ2‰»ûø½zÐY·ý >8¯²c•_’c³HMì =–ÐÖÈ@díÒ«SÕš[Ä”ß'{/³' Cs„@DÞ5Õ]p+Ø~†ÞP½ãN€qþ3…þVðúû5 ØåOóÀÕø +Àxcš·¥K¾ô‡ +#Ô2÷e= :=û #+8­’&ŠÍJôi¾ +ìP…N¼a½ž(á´¼¯D£bÁº0 ño Ö ~QÅ–ÁPÅßߘä“Gî1l²ÈàûR #Þ%¦ÿŸªi¡ßáI!—)jFrtG½èļ‘ñ¬UdÍxj»}¤Sˆ ÕQŸ^f…~ˆ¸x+ ²Ü›”ˆûÿÍ» +À”–oؽ½¹½™ßÞ˜ÿ©”H4ü'-RnêÈ8L0P*áà€þeý_yUôqÿ½ŽÊ§¿²%FÑuNsßgR@¸TŠ%F»'@†¡ÿ?úY÷nÈë+ ^±Ú˜ÇþŽOÝßxLŸéìu§PË$A„ÖmåV1¼ÀN€;êðxqO3ÌIi +ÁÁ_B«DˆË»fÉHè©)é¬ D}Ùx ç_1rˆ*þ{a ô· +p éTM€c WðÙ}Ê7oäàæk5 ÀEå¥k™³~Ü5»*•Èó¡˜cá³[¥lËâ sÖ1. #OqÞy·Fôo‰Ðb¹PÌÇô  ÙÍ/Ñz4^ßá šyýL6y'cwµ0ƒŠk))4~×ý¸|Z‰Ö0•Ï>[L¤kf¼~¶*iñw֔ɖ¨ÅÏ” +ð@ˆ0©c‹èMÐ °Ó¿ øèј÷ÿQ|N€WÏèù#¢®7Èú¹õî^T~54¸dtSíÖ +YÓÀ·¿fËñÂ= k}¶í\dP8CíØpù˜]Ó ™ÑydÿÅþÞÔJ#Éåèob4  M\gA¸-*ŠÔU:‡ôw/Îõ"¬ý8èæJ6ÜõRˈ£ÒÖµ-vÞ>~?X ¸Ï¸|+ÿ2ÆÔ/Ä ˆý·nð^‚l—ÿÝ’ÒJPI1meâÑ-ȰdkQÇ&"›;1rŒÎåèĺîï]¼Õ?EŸxk54  ‚6=ßÜòk@»b¿g°ßÉC4@kðK@V¼À%?|d²¿¸zmæCþò1y*lhÎ,O(ýH«„Èk"Å|¾qNw€rñÉ9¾¢«XÕ"3Úó+<€ð?ˆ– šâ?ŸL# –•ßBðuPë€9(ï +²¯mh^¯ÙWÔU‰úé—÷ñðât_ÜZÏðîÆî¢ÛȭаÌ+Ç‹¹¿{° †îd¤•)ó´8‚õ Á|öŒ3¶Ï„6íf<€MÚ::¸Y@( °µé3Xû”èÞügîÁIL¸%£>ïRÖ¿ µ‚㻯j:K‡Sj@'‹jKºɇ$±ù ±çòÄnø]‹h€Z k•¤;Å÷q× À htïè/ûïu©H±?_Râ7á„·a+ÄeQôíö!#èìSPœÄG íÅ*qd·«Æ9…sÿxïƒN§1¼çÿzÿA⩟H˜ñ¦¿õ@ X¼¾¹]ú7 ØûÐ_c:úßÞ¢‡6Ð “êä+ +À܇üš2o34­Òà9y@XËT•ý–ITB›vàzÆ;ƒ*ù€^ö Ê€ð£!Õø*ÀV«Ä£ &TlÚ?DPË—ðWxDöºBÛì($m'‘o ÜaçqÖ¬4ƒéOÂú!²®P[M|ÆÅLÃtwqû?_KbŸô€{ÆéG‰ +2ûn @£*ëñ*Z‚É^€?"`èÔ_·%ÝþNÅ™Z) °‰€é²0: Òî‚Ú»Ie§Šäaýö€ÊÖ©ïAd€s"ùã@ã~iŸ‹Ô*cq{¨úUGµMIèŠ +è© ÕïhÇU@y3FK£,BHAƒÝëbÙ#|µ¬X¨DÂÔöŠÐofkylc$ûÈ{… ñƒ* ïãÃ|äbQÒ]`*\½å•­jv«J<ü·2@ ØvÜP5€EõÈÏ€Tÿ-EB‡"‘ßïõH€xò·AE&êSv͈¸žC|<î;O6’§F©ªF‡¸_¶ž#û@eøíö—Á6¨x ©­Üò޳,`Ga:Þ±G7Ìt$´ +HcBûÇùÞsª™Vÿ¯*èö" +]T‹g4GyO©ø`£.3O3gܤJ@ÁÔ4ÓçÜb'è8Þ`P– Ó×yÒÇ÷m{6(v»ZtRÙöP)Õ˜$³&Ñ÷’·:îXÐÚ^ð˜§Ò_è +ްç•!§g§¦·Iî… ú>}Éÿ›f Àün\¯Àj» K€¤ó­¸ëµMý‰Q^‘œj{»¥£÷FÊ"-”ièÇ“ݼbùƒ ÞÆFöR´Žr¾ëlÕ2ëv7G¸ K”9ذðú +So›öÅ0õÝþ—&À®³ýO`<Þ}sµÿëìCtOâù+ÈZ-ª)ð • ‘àw/~? +øÜ¼”€œF’ThœïGËJ&=o¿û^“ÀXŸipsæjÀ +@l¡™ïÑ;Š•µ‡ìRÒ :Ò{Ž©KŒ¬BT¥P®ÃÎÀ4m8¡Ý[¥U÷n€1PÈ‘L2ŽÜ0]R(à“âzcì­B1õä£Nñ\ðÀmøÙ½ï†§•¼é$¥Bó¢‚jø³ßZÝ}†N@cÆã-¥Ž3 hhÖé2"l%u•:½Ôè/ÜÕ—ô‹ð«*S§¿ƒ² pT^ä$¶¿R«™(oïŸSr‰nÛ‰¸ÝTÀ0ÐBt€F»8  CÜqL™~¬¿Â-FqdìG•æÞÊ”¸I^‘eˆ„·kÖg ·k+_%à­ ‘‡š¡DöüR°c™åÁ9_îA7Ó˜ÿšDxþüZ¤7õ5k*ÀÏšõïªõ;p^<ào ûûü h<Ù¿@Üè”6ÿ¹F~Ø¿"¼E¦4ÌñèpÍ¥l½tÇǧ{wÙÜÁj€¡È_Cmý½À§A­Älˆü(.‚Ø´ N·h„â£GÚ Ý 0²3Ÿç% +o€amà +À&²˜BZ3“Xž‹44hðoÀãÈ5,/éŽðÔíÌ–“(€Å|±€ûè’}ªûšlý*y½J;±š]¸øÉ’ŸƒZ Z„™-ÒkÖóKB¼ê8ü8ÂÕ¥ ãŸ~Dz“ÅÍxq¼—"¿gûþnà…*x$¸GÄÕù’\È’&€h€òBui¬¿/Cz“  XߨN@!Mmˆ/  KjŸä{:Ígé»XÖE²Ï™%•Qé¸GÓÒÆßù–õÕv“ßD/ª·H« a¾â9‹wRkC×ÈN쩚'a2pèø‰ÝÚþüsÐ"¿ô€Û¨_ +€/ñ°Üÿ|A@ºú-ÀgªE؈faƉ‚4šm™k*Q¸†rÐ:²k)º÷ Ÿ»Ð>ûómA%>³ÑšÛóêŸ!S¾Ÿ§:¬×´÷ØûHp ûUˆáÑH%úÒ ã°¤¥Ô˪½yN©¿ˆl׬Pjã`~¸³¤§±[a?OaµÄÜçØ} ö·UíÆ€¢pÍáääåD.ÛS•>Å”±µû*Xt1bñê‚V"W$ÆŒ§«£’¦1ñš(¹À ¼…þâëö9Ö©ïÒ”вA §O†ÆrÔAèõ·Fh° Ï™÷³á(“ÎJk-bÎï ×Ñ[bx„š¬ÓŠß*Úaµï\L¾uZÓ@}(ä…Øw@ç 8س›öÞO ÇW³SïØ6kЧÎS)¾ xcÖGÄø{AÀ.€Á›@¶ÿÑ| +\üçK ûx Wù`Î]äö A?AwûnøC±3ÇH;CN¿NŒFßúFly2`o@ƒlzPÛTѯ ­)Ø`G"b°ô·³NÎ_Jì©"K¼pµ×Ò¸7¯@ÝŠ<õùüÈÀáßSfA|Ì<3äýü´ÓHûѵ¯Ž9?Ãôï\ñ¶£UÊ"½üL~qĸ«+#IJ>€µ`Y¸ö¤=vùy”üž[&wžFZ•/Îg„ÖøOP@äáŸé_Q…žåmЫïEÑõ ê­%ÕËLJh*€°Ÿû7tô:£è¯]*Ò¿å€ðB·Ÿ3Ò6£ ¶ºý½tq:KóìàxÁþ֥ܠÁÕøF,}[±øRòЊ‚ø¶ý¦¿ùÏGƒñþåÿW`Z$CûÓý| h〽Ý 3vJ 0¢î_ ݂ⷄÚýgŽù÷Úù• Ëÿ?6:þ:ÀL +@•{×pêi߯¬(p¹ÙÀ¨¸þ<*Ôþ}`l# ¾K$JF_Hâ)°ãcÄÚrí@ÀJÖȃ‚W2iÌ¡ð_µÅ$þkŠ~ñzm~ Pü_ d%Ó²˜è[¬¾o ëŸ¶: ´jú·\kUªJ@•Õd[Ç~â±×üûØRÑ&¾"âÇ„ ŒN„ìNv¦7€wÊ!BÝÇú€™ÕL»ó_ª¦?³ Vxÿ®ðø¸ÌZip àôêöÍÍk+€Õê¿1ê(ï'~ÒY„úÚæÒ:>ußpÖ¹ãÿH +ÀX¶†>-Ué—ͧ6PÛËìk…6?‡ŽSXEì[ îc¥Â>É(%EOFmÔI¡•@ÁD´#¹ý‹ùòéÒßü–;°€ú||ذ…/—ŸêT¹ÈlẮ˜ý( +Æcq^gZ.>Äà”ˆ*ˆPu<€UàTˆ wFÁÜ +à;éÛB}f2ú¢6ÄGhÂø§ðþë3‚ØOÀÁu€<Ø_Þܼ¹Y^Ô/A{%ŒDtì>ÂÝQ ¶ê¿¶°&™ð«Üù4ÐØÝæ0~lnã äè×V¶kÂG¨¨'$@™È$¾p*%Pq'g/%´$ÍE?ôz$êføéG~þ§Jû³ùB€D]n€ÞªØ?„èÛÉØ&'`ÎÉ-Ö[ÛøÁ µþEhæµMßt'³b¸ÉZó(5# ÔŒ~&ê +.U#@)t€&ÒÙ'¼„µS„y8gˆ|\X§K>ôy!¹:nCõAÔêÒ©-âK*Þ¹ïXo :úGaŠö›<Ô´ýDtU:<õ>9E1 +È{”§vR6ö©Ùê½J=Ä(µàœFÂ"†€–x#hgœ¡V²ÒžùT®ø55¦ßä7ýµŒÀS€«z.@öÿ@ôÇ8¸ù‚‡ þ §]Uò ¼‡0¿t€g©°‡7:+–B’{’‘D°-¸€·˜=Œh€æ(ƒµ‘sH °•³óc /ìá:"iŒ×o `¾³ôßEú7~XÖà¿]€tv7€ö/Àôäo€æÿÆþ Gɸ¡}Á݇5y'?9Õ¨ î{®Bg“rHý‹¯ª|ŦßÅéâ±­ @ôwÀZ#9Q^à +(è£ê8ðh”¢ƒ÷* M¢k<.—ýgÏ)!Uv@¥´|MjDQ<€42èT%è–y3B¨˜'ä©[Èa‡¼®óñ¡ œø?_˜Võ€cïØ6I©î™D‘¶À+ÀÝ +ŽPü‰?Uðònß,ÞÚçNµ»Ò @"j Ï†¢Œ"ˆ«iýòZǵô")œHãµ<€•&€Ðßè©n²ékòxä$¯x+àAà8`Òã#90 ¿|Ÿ†dÄ´›ÿü²Êl%’‹ZBU¶zC«V l*"{k{BP¼ÌÍe÷­Ü0€Œ©µßÊM~L½ï~õº<ÿ~Qö߸BèŒÀwÀv¤èI¬c^\܈ú÷Òè-P)¥«Â*VIèý" +ÝXQßH²dÂn2F·ÜRнÔÐy4·_:‰w¢¿äÙ +]Z)'Ïöæa ‘Û¢È×z=Ü%òÂZCY»öšØ¯Íösaò—…fg/9ÍbùËŸ<õcSàaðr ÂýŽ é2"Wòu”Nâ,¾BqïåK„/ÏW©èÑîÞäÝÕª±¯•­BFÅeä¥ÿ$7@ +€Ghhü§GD8Õ3ÏJq {p¶W ¦z… Ž*úßqþWðäqy¢ŸM7œF¾+ß’f»Ðv ³×ƒ¨‘´½A*¨0fÿ¤)€÷³µìç¢Ç°?&Kmi¿¹ºZÚäKüEdšC}Ì?ôŒ§€<pÀƒÝétgWöé—‰å(ØxPÐÔû‚!ßöwÐK±ž–ké …$HÙÿ£Â)·È—‘*{Äjò*ÿòËö£7¢:Û­'êð%÷m‚§tyK†5ÈpB»½¤4m ®¾:…Ë_þÑò—ò$¶dS¹ºÀ8V4°àTiµßVM:Ô +@êäÀÏ„¢ÀU°W`'A*î;i H›‘”;íšH.ü'æNõ>@ ´àÁe\p(hkY\^^ÓŸ iá%*ÑÐ5 +v*øI`q=„oüï'<×€ +¸K`ºWØp„颿OÃ>? +À9$b"ÜÎÇÊD“\qfxËðŸ-ÙH¸ÏNm¦s¬gÖS€ã?èKˆÒZY+)F~™ÁØ›«‹¦dÇ¥âÀý%ô§ |ÿæ`þ5ÖW&Ó¥O¥ý—öŒâH ¼ @ó÷¡2×”»qù«°úx<À ðG-|›p/â;€äÕr’¦v—MNJ³ó›ò²Ñ ÃÝŸsßÔŠIo6È‹{[“Ôõ¿t6Ù½âk…Êõˆs +ȸݧ°^gUVäŸö?ì'@8´ãO?N,ô0ã +P=Z[””ª ¤ÒaÍpì?É¥Ó¡ª=2ÿÄW*VÑNãnÑ“éÐ{å$2ãúD@ê²úää±ÿ£ ˜Šþ+üWœYÞÈN.@áoøpZá9Ë»0ã+,tôg›í˩ϰýd“?¬DX(Û4+J»ò 2Q2ãÄðFVŠþ5³£8Çx K͵âÂÑ QYÂkuI .vN²ëÀ­€e_ Jà@kÿò20ÏDÿÖà€)O8úbyÑ¿ 4 Lžü„/ÖFF‘¦8þÑŸ_ÿýUp(›2«„¡0Æš}w8­à@hUÍ;ÀsöÐè¬×Î_–H¹:·ã|R61íøÿ{T¤u—‹ÉŒ/”/ö?\ìë`óÙ=Où‡6¯³„Li°ÿou`ÒþhQXÌ·7!¿à··’ä|ËnM^@Á\Є¢Þ“Ö½›°¤ 8±ÖËüËÿç̬¹@Ú+@ÔÇük¡óœXènâ{Ý£f×Ú‘º'‘a ª»1`ÓŸ–'þ4$|[bü½ŽòÐÎxþ<Ê/‘oWõ¿_÷¯ƒ’u +À}ﻦ„âÆ¤›¡c1x‹`~4@E¬‚s½ç3æäïiá/p\Æ"És@d8Rs¥öãþñ¾YÿVà`yí `× ßæD7KZMÑ¡Œ$ŸœËøk<;U>@i¶Ú;>?¡õsF‘å)y@+{Ïîâ¨ßJ¿Rp¼ž « +Œ¦N¯eÁ¼Kg|E4­‰!Âóº\ó΢üAÝÂ×C|•埆ÿ‹ùáQ `Å:²‚~åyjâì/XxÆùä,–¿tÆÅÑÖÖæ“w7oʳ]{>p¶Kp<Ó u€(Ú癆EX—9wýÿ„xb&Ö때‡%:þ]G 8À ¦kO7I¼IZAë 8¬8+NÛ?Ã}Æ´ýñÝw>ýn²@ŒJybÛr«€æü¿¥î_Š€Y© +fäHØHîAHS±ÅéFnÑ\ÃêëC­3¿P1¯j_¿õ—¯_;Øá=_²á¸^q]p{{± :€gVâ¾5@}Äî¿]„þxôäoxiúìýÒàm@DOTERÓÙ'8xZØ7¥ Àü@z E$)è0~7˜ú™QωtžX™ « ²ûߣ_[ñ`‹g0¢˜Ï¥ì:ð5€í–S9킨{XÇT…Åòû!ˆÃÐÀßA ¿ àäPä—ð¡(Qàu@Iõ° źã ylãtI¢|uk;¤Ù馀UŽZaýx¢U¯W:€Œ:vÝaóÜ!“ß>Q‰Ë/Ïâ`ø•ygþ€›Jlþ-]Ç“Ð~hþ®˜Ë£ºêáI4Àä8ð•*ÀYõÖ_ÁèRª +å-¼³E¾ ­¿Éo˜ì$ZÐ?_æ›eÿ;%!h_â}ˆOêWp.åË2aoé Œé–ó{qÁ#°¦ÜøÇdßò'ìÿÔ_Ý™¸ |Ña2 aNË7 €JqÐ ŸŽ"Èâñù]-³¤¢RÁÅb"B*wIJϬ“‡¿'À÷ByÎAÉ Åû~®-;æ°¿C¢ß¼qvÛGhyÒƒûoà„wJ£îákQ +`É÷{d®€œ)²ibeвS!Å€‚è¯ó,Ÿù»ÀªÌíïoA~ÞuwUÀrûx­µ„ýºíPŽ{Ñë·˜±Jž’jeSuKÐÿä+êþ¸SŠ–n¨×ÜQå. Håä…RÛ|€a>q9¼Øk–¿ÈoëŸ:€æækáÒ®”÷: ñ©íø•ÖßoR5úç´r°”/(Ï€g•¾“PÞÄϟl:Þ·§€O€Žw@ ­5äšÂÝAÒ+ÑWàJÆÞ4ñ{ ÓÏ„`ë/P¨ +Àti G\0'rÞ!FÒ×¶>y{T†^>?­æ=ÁÞÁɺã& KzñôÝ¡—ðfyAgG¥Úùàx%ÎjÀI Ù4g[½;6$¯ýEÐ{~ Y*ÎÄa¬{øZä±½? +º˜Ëzw +@Z…¬#Ѭ¡~”LC™_ÔàQ$ +`. x^Y~ŠÀï$Ñ?ÐòñfÉ,?ÁBv –:ÍpHa¥Ö‰Iº]ýW؆úTä‡þªâU:¾.a&F£Œ¢ÂrIŸ9¿tªý§±jè=èïÇI§ükz21ÓûA£È”ùÐÀ²CUᇥûÞ®nùOHÁ))=c#™V(ö‹Ûš¹áñÛ0Øäl•hŽÏFÙÿï?+¹„Õ.ka¿­×~€¨{°oÙóÑ¥pꀟHð`úØü·>°„Çh¯ 0 +²ŠÍþã 0Lw'U…ê8ÒÛIÃÝ1Ëï¡­±˜L§ªÞ\ð¶£²CPX”JHvùé‰ÀF²Çpõˆ’X‡‚fèi¥¦õ8y©:²üæÀ¡ßÝáO¥\ÍPžõå-÷öø²“ Íó­ûEÚË@¿¢ Õ‚^yüî¦<€¼Çª!2«ùómR†@]ÿ¦b”6—àû" Q³O§D«xÏÎ*!_‡èA+lÍ‹ä0[—TRLïhÕ7‚;Íc⽃æ:8*`_¡m˜)R0"ONœÍüŠñ¦ôÔ6ßum ¤V“*þÅv%‡%çÐYTNø%$¤ý†n˜o@d<ùÆ.@-44dU£Éopiµ®‹×ý±ÿÎ /´åÔ÷̽ËÔ›ùåõ/W(Ô…<©£E>æ_è6Øß - éýmý­;5âQhTÈÚ•:VˆÜÌ´S¨Ô’wôÞV”“µ•…—#eØeì iŽrWâU<'¹q¬+Õ%4ú²²<€z +Àš<€©ê¿xÈ:@î‰y}ÃW€ò%p¦ƒ}:Ó0žL¯nÐ$æ?Ó9E~w‘í{ÔK2hãkxa@Ö_ èÍÈ.w#¡Z¯‰Å÷ÒXãÁî4– ¸4Y?¦Ax7— ØnIc”€AKt¸ëh&?JºJÔÑ}©BÁKfƒÆº‡¯âºø£]D–ÖûåBW›¥Ü ðŽs%zâŒçYû@‚Ð$ò#ö¥æ‹gû‹ÙÁì@uÿ­ÍMI+¿¾Gl#Ât”‚K¢²ðt ÏÊ3çŸ:MÐæ¦¿¸Ï+ßTÕaê+ö'†¡Øtá³ËÓ8#¢ÍáG=ýIÒ﯅i¡|HÊu£/&¡ó”}‡Ò|W<þ¸ZÐõ·T@Sc–J;?GøZ@d£¬?Ô×ÂôoÞÀ¦éÿä‰3 +"¾—š{’KÞéÆé«Pžy€ñð‘FÛ"¶xƒ¦½É e4"añâ œP§Üó%œŸ©DXpK X¿(o7Zý¨ý§þŸ‡€ð‘—ø¸ì¿[tÀíÜӤƩVÆaâ“<×8x¨o´£îÛƒSà1‹„YýÎ@Í)±,ä‰þ&4ÀÊ+£œO$þk®ü"do€1{”"¸¹þæ§T\Ÿ¸iÌF‘¯øPBÖu_ ˆ$ƒÿ/Ó=]¬0¾"èˆø_ÇÇöûy« ¾3ì!¢Šðxó]ä×üß²Ú| !Ok°Ÿ4² +ÐJ6ºÈ%EZΉ¶WJ¾)ÐoCÖµ(ò?ÿ·C£{xñÓO?úèÝ0ü©p3,Cÿ¦äð Dã…æ›Û›ÛMt€áð5^¤oô/ëÏ‘E!k:].Ó[ÚüJ†×ÉCênŠŽtØÑªBvV‘°ÅæŸÜUf¨|møú$Çi"/”ù•­…÷êƒH±y«éŒ«C´`¢ÿ¿ÆVÈk€þèÎd¼ôçD: ð3tÿ̲ÜõJ y‚Uÿ=S †ä‘Z~nÞš×–ß•ZpµõwÈj°éIb=|—*ðT +ÁHh_#i +ùžªôR ¹€<Ô-|=ì­.xfσÀùmퟮ GS:•0”Aôhû¯k$_u¡^hkyÆÆ½>˜òÀ.€†h‚zXc!/Ò0åW@ãzþbu2èu¾ ÜavÀ +J°À ˜ -”'x&æ]*Z:²þÝ¡o£' ÒÿšÏ<*ZPP| Ëy¼Kó¿ ‚°bü%ð>K4ß0_N?L?\tŒæÙ&¶¹ý<£Þïoù(U´HÔ&Ç»ïq“R.8<øouœœÐ +ե킯rf(öe^‘üùG‡´>zúô£ç?ýô§¤ÒPÅ­ÅD^7õÖOV,‹ÿkkâûjPföÝ~=ýW­Èöcøðž¡¿<Ûþ$°Õö¤Þ9–Û·. )co4qØÁ™+ áUìÄZëÈÏ©zF]!‹Ñn ½&Àþî¢U$ûÖŸî— pqÀ‡@ܸ;ï<ó3?aö@›‹ ¼Þ— -ºŽ@=ó­XSi*JÏ‹@Á))÷=‰øѲ@ŠðªúBP—þöˆœ¶,¼Ÿ&> è/oœIk¾œàB€Gò ‚¿‡0é—OåûËvÁYÅ“Ó5…qÌ÷.GG}Mà%æß ÓèÎn(€ÈÊ\¹7€[ùÌû (•X=ˆ¦Íá½?Ø}ï=ñÿþ„$r jÿöu¿Dû + ШK¹‚V3 À%m×¼49ü'Ï?úøp´öÑG?ûÙO?­$‹ÿ´‚äw#}?´…h[ +`m›tßWñ\¶lÓp °2°þ @ V%Vš6®¤®Oº„F"a™ñ­“ó²8»ç óϤ€€Õx)·ç u ÍëZ¼Ë‘mB}³¿{!¢Çò[0Ú° +ÀXä3@ò¢º~ÿh{‹ ì¢HÁ ´LVzF•5¼ðOä‘fÉ©ÄFéÖÝ“¢ÜµKß–$8Ûˆ¬ô|G¹ *Œ9ïÖLxn×%Øáõ’&SöÕ2 B~©/ÞäöèM=OÊ^CuÌê ¬Ö-|=LN<1–G‚ü82 X H´:€éÞÉZFHÙ €—€—Ó}y(ZhHo””¹Þ^W´æÖdD½÷Þî¼÷êN>8yå²Õ-qevàÖ$’æm¥å>éRuá‚„jÝçŽ_œù üñ>~þ'žüì§ U{h&е¹<÷Yæ~81×L m*€*0¯ñÆŠ`¿¾_ +@^•–€ 0+ Ðýz”Ý’q&`jX­ºæÀh•š·YC$VÓiÑ? +À}¢‹HŸìÑ p%·’U{ÿ—» 꼨÷B2ýî$ä(`¼‹ÿ©ç77ÚÉÍcDÝÁªxA'5îØí…a pNŸ )8’L#`+}Ê52ŽÈ¶á{@å ®c£Ïï P¤]hׯ•¶[Õ´Ÿ©ä V{šQ´wÑÚ|¥š2VØøæ37?—^ÞŸñ&Ì6•i< \ë—ß]« +(ˆÑ÷2à)¢!²Ïg3þ €ë¯±ù^nn¾kãeÊ›ë+ƒ +M3*7à=a÷¿xv]¦\•«'¶ÿ¿§Pz4Åì¢ÎIŒxRò'üO>þ³_ÿÙúÓOúé;ïTÒ•¡?TRªÊí ¸ >lë@ë…ÁpTÐ2ÁÖ ¤_€v±à§âè…¾å8ïXk«Zêpó?Ë-¤ø® Ó{,¶1Ù&4Àê^¬nŒQ¬2—&ª~N2Ûˆ…EŒ‚JÐNßò6²n@þúèÁ.}¡¾›ìð @"/ãH`úÓ0uƒUaÑÁgZ^\á‡lí±ªЦéÝ?ââ’Ãàf<îX™”œÊP¢ÑÖ¾3H~6?¡5“µôŒ ‹˜{E dI’©E%•TÚ‹[šy¨ø=ÍA…à꾩¥oÉpóA 9ÉD–^tü''iXj@LŸL­|fY²XÈþÓgµ²Øø¯UÉšß ôîH +`4zt% €l¾òZÒûÞ‰â]ô¥ØÊTs@8QDä,†=ñÿRÀÇÿɯý럭?€÷Døuó€3½¾:pÀn€¢î)€ß·Å6–*òƒ` ð­wCµö=À7ïÁoº„ß^PðÝãã[­)¬„òébÉ:ÇWK€aÑÅëO›€4Þ›¼÷žËШ[øzðÙ®gG»R¶Ùù$@6h÷uÎ9{´ºXÝ´ˆ<û£Åtöl®úÀ|úìÙŒ9A¼°‚°»Ò~k€ÅzñäÝwG£ë?¼~¥Û|oW³I|’V oö_åé¤<„AQ¶'x›·ç4àR÷qv)àã?aøý³_ÿ‹_¯ÞyççÏ`<€´NäÅÅ=̾ÆÖòßvæ·üòãü÷«Ðfq¸ +ÊèûУW,æëI|ñ—CLþÆy/+ˆN(ÞºœW+Mˆsƒù~†XøÖÅDȱ§0]ÀP4ìÎS|zŠ1UšÑ»(m=·l䟋‚/ÄÌ bÀ4i¹œŽ÷/ðomúÍ~€»¢Z  €]È-ÌsM²‘7¯¯ö¯nŭ„\¥ðV€À`HwYˆy +ðI.Ñ-WVÕE·ö¡ä7Ä@ì¨BCC€4€ÙOR¥ÜX…÷r’n¥’^'7/=È —r¥Dü½÷4¼I¨[øzXxµ{1Sö‹¼`Ëð0òâŸõÔatžÍiäãSi—9D~žhf‚¯ 4Œ2õÝNýî»h€>ÿío>ÿC7jR™óUs±²ÿ®Ü:) +Æv_e¿†<€Ë +àŸýú×ÿâ_l­ÿåÇ?þƒrè&ȇ †£'Ídþ­ äšÛ6ãlÒrË:`¥SP UǰU›« +ð:›þ¦ºÆšÌ~Çlo4@9Û[Jéuª &þIoáq³˜¬RTºPÛ]šô}Pú •m®äz®‰83H€z¼[yïû“é‚þ>vÿcþµLó?Ÿ£pA àü „Óp&ÑGU€…"[D8Óáí +@wnù”Ð Åw~¬z^<€š*TÒÐß’ ¹04X“-hÑHgà–a"ˆºõÝŽÊ:³æàò[Àû‚JÕê †º…¯ÇüÙ³ù|9‘Ï.‚ÒfWy7„¿¸Ââ«a«"ë¿¿¿8œÍ¤ lûéd@ÒÚs2/ÅdO€Sá;¹¾~ž˜‚Cûÿv…×ùÁ­L5ýáaÅxq|v~ùêóEûùáŸýñ?úÁ»?xžî€x„ûúæ¾k‡›¦¤8)6óVª +»*pGÐ9p,š QÕ`·'ïZ>0–ƒ .Ô¯“¦ ÕDXr +MŽÇU° Ÿ¸ýÿÑ#¯__L/nË$Z7 ðÍ<É‹ª_ÊM?€–I}~ÙÖ¾8ýK# ¢ƒ‹ÛªÖsÖ—¢º3K£›•PNÜÿòz €•÷r€÷)ÛBÝÂ׃6ª¦n§óᜈü*M mÃÍ£ÙᔯˡÐÅúP»A•4¥(Õß}÷¹†~üt„ ¼·»‹g`ûÿÒ¶ ÓU©Y…˱ʳ…™­x¬™ûàR'TàüóÏON~þ_ý?ÿ›õÉëÉßüñÿÉsÁlÀçq¢˜ï±÷º‰—´®mó5d<`E°|²÷%ËhmxÚñ‹ûªB›zïŸϹœ›ïb²gæ*›œõ‚ST—n8ã;™lV  ÛýÜO >MO@½Q h‚nà8“±u…H=vìöõÁô@Ò/ÞGàýGHÐè>€~ pÊg@%ø® ×Bg‘ã,`Áê«øjàVc{´ßÒ¥ñø¼·¾oÏû™#¿3’  +ൟ\]ÝÞ\T‹>fÚÁaùTŽ#œL§¶)7’Ôaÿ5€YC¹}r!;x‚Vù:ÔZDÈ=NçsªSúïíHÌžq4\¶IæŒP»ã:‘XÔa‡²‡û²ƒËå‚_Oݱèêl\§ƒ"t">. g“KAøÿã?_¿þ»ÿûoû›Ï¯?o÷½-•&´—ЦU'‰’œ»è +’B%¨Òî)ƒaöYÎ|ýù~þÛ¿ÿûÿzôßýo'ÿg\)€Ÿ CÚhE`H¸V‰ßÿl3ŒÔ\æ<*/ ྰ=ôú6íÎVÅ—ÐölÉÙ…º QÍ Hj“nCÕ@ò*U€Þ­Esç#í¯QBç8“ñØUk>Ð<@°Èü"Â¥näç« +ÐÜ+Ø”Ðõà3`–y ýt€9"àÎA°¢û|váyJÇK•ž"^žœoÜH~5‘`ü^ ,¨AU©=’ò@…wÞ›ù +Z¸ÕrzÈÆjîèS ›àÆ?ÍaªxšŸìí}Pÿ Úêr(#rØ@/ öºG<ÿÙt9ÞŸã°fB$ÄÐY\SO¸Õ$ ƒU )wº5/¦GÍé_¼—÷ jÄ7Æé&q>úñOÿô¿üpãßÿ½|€ß|þ‹ÑHÒ}ö’n€’Às>€ÄîX¯·¼ýD +«@]¨5ëÙ¯5A™úGœ]_KÝüæoÿîÿ;ºøþ“?“ø'ò$CÖfEp‚AÓm¹l$í*À«­9pEØxòP@¶›ýÚCS±<¨ê ÀÀ¶S9„2ˆ/d*s÷°à‚b\";æ‘ü¨Ší)@ŽK\iΰ’çÊSóĵ­wã•ø£ò +}€´jú/ø€k(€Ýý+‰¿Dý <ˆý‡$òx6Pd°ŠèñMÚ4ÏSk„úŒÁH `ÑøÎpúƒ8ýÎ 9•$?PêH¥•¥V +ìÜÿö`ÀAt{0 (½Ÿð/ý@¿Ûî[%Ƚ0šÏüx~"Þîhʘ{Êlo‹»·äàtw¬¥*³BÊÁÜ#\oƒ®ª +(mæÿÏ>’øñŸþ§¾þýÿý¿ÿ»ßþ?Æðÿ‡‡i„£JWv‹#öTŒ­S®-Ðk€`£×xg(€ßþîïÿ«Ññ¯ÿÕäÏ~üÇ?¦ð³ŸÄ´ð pXßñÞad¦ÅI*çb󨩀m*«^@W€à´d+@ÛhùïXßÌÃüpBðK”½ <®¶©X]íBb…ÆÁßÑ'Š—Ã\?ÀîRj èL¶m’y=Ÿ*@®"v¶ÿS·Éìà ¡¼aœÎD›: ýQ+øf€›ŒT›QÄ˰\ Då;ƒ{ÒèÜXú=‡|&™:• ¢¾vr"CÿaJyh Lf\ +à}þ¦/öC¤»üW,„÷1í‹1Öˆ¼ò£-íð_ +À縃²oƒ¯c@¸?YLçÏÜöï¡ í#Kíôu *ÀnLÒy<ú)¯á‰ÿRÿ\üÜýÅÿÍ/FÛ³í­Ý E ‡ùݧº2}ˆg¨‹×§¼‹ÈVäC¸KæóÙõo~÷»·þŸüõ_ÿõä£?þci€ÿìgå¬Ò›÷E³Ÿ~Àf¢‰±/þ w½€fâÓÐ<€Õ6cÛ"Œ/x¥bêbÆ“'JÖ +døQ"r}ÐË®…²³.›¨Œ‡çK ¶» `谆ϥÐuúDÚ0k‘vûµ·¥RÈÛ?8à ŸîLvù + 1蜀»^@º|M@Á1Á×)è ÷€&ç•…#!e6ýŽð Ï}MrÀ6Ø©ÝöæeLtÀ=@²[ƒÉ³EþõE× +(%Yääÿ×gÀTkt€×·–}yƒÖqNÄK}£ÎABFÜŽÆÜû +$Eòb'H•¡“·x=¾nû7„ï>°P$g/"ÜskM&A”A%Sœ¯†“åØþ×çW…÷Bïš`þ•<lZ•îòZ @¹G×æË±€XŠ×.Fqˆ•À7A*œÑC®ÆöùÑFùsjŸÝ×â&óK 9ÄøÿŸ&£õ‹ÿð»ßþæç£Ãç OG¨$Þ–IãíAN!Óô¬À¤o…ÉJ" +m;üWþXØi8>ÿåüíäù×ÿû¿þëÿä©<€?¶à;x¡¿§hþ… .‹™æ¦U@§¢ð`|™øÕ§÷Û2lùÇàWxû¹‡Fÿ'ß©$7àœÓÀZ\9ï:Ê=³e¥sߥB¤fæÕà)¦ÀïK;P§o€´†Ä·EÓ´\D,¯ê Ù¯ñ Ðl4–мFu`Ü™¬E4ÿåB¸yŒ,¢u@ÉC©“}i.E9^â"î;ÞVøÞRJ85¥Ç™"8tûRsJ#+¬Þúÿ`Je(/h—® À x¿C èCM@Õþxƒ`þkóÐ{¼6ž{47g‡ª­olh>û°Ž¡o,^i +¬SO&4%è”h¡Ì¿Ç >íàÔ<\U ]?þ§º±Ÿâÿÿøv1ùÍﮯþýïþó÷Ö××?® +î²èö:À9 åË·j6÷Ž2ã¡ @¹±Q.€Nzvvý™À?œ­ÿ¿þú_ýëý¿šü³ÿX`ýIüG¢ðÊì× þ-×pçMQórÛxO¶Cù°øëÚS¾§>ÐÙÍ}þ=Îá>O¥´!_Ãv–“éåƒ)'¡¿¬yJÏQ µ|AÛÙàž`§1³Ê$mϹÊ#‹°!ç  ÅSw±ïÿâ`ñþU£÷GÀþ˜?<ÙïÓ ^@è!ŠùÏy^Óˆ ÀQo´ N 0ò2¢4¥•À Ò€ [ ­Þø?êÏ>IŸ‚ÖŠIŽ Ù+ÌSY|o +ü6 ùOKžÆts1ÿ”äùï«l½h£ËLÿ:Tè€øªº¿ô/-‹ÅÅ2çÄB¼M(þÞ& ˆ°§íìlMÇ£µõõ1ÃÈó,G9Xúƒ§ý>Øï+ + +éÖ>þøãúO/Ö?úó?ÿÓ?ýÙä÷»ßþþ·¿ûûÿ°~¸õHì=­‹òn€ÿ{4 ªIPÁÉÓ,¼Ï£_ +@ðF‡T%G„RןÿçÿW“ÉÏÿ‹óoþÍÿfò78“‰èŸŸ]zÇà¼ú0´£Ø^5 gS ª®xÝS€Ú‚Uî :sL¿]«´Ç@f‚àPDž„üæÿY¤aiP$Sz&2Á£òî4»Ä䛸Ò&?àß@&¾À­üÀíÿÓÝ]ì¿HQÕ{ÈÛu2N²äZêÚD4Z Çª€¾cnÙP<1šýGSè³BªºmF¢±ÿ+hàý×oB=/m æ¿÷¢ööÞiü·¨õÒ-J:Öò×Nòø­é:ÝXŸŽwvÆZÙÚì°Øa1¡³{fºÏy˜¼ðkxñåbý¿üOÿôÏ'?ÿûßýíß®«Bþw¿XÿåÇÿò—óÑè™ì=*Ý‚‰ù?!" ZA¥Ò¬gžÉûO@µRã==‘øÝÍä¯>?ž\üïþ‡ÿnòü›ÿÅß¼øð/¥\€:׿¨_Ïà¡Æ'æüP4'@–kýƒðø›µÀ~Ç6% ³6ú?áµa.ÉEïºx"‚J>Yž<´ìàt@SûŠÃΫ@67àìÙ:ÓBzàn[š½`êø×ªÄñw ìOÿŸýúÈxBý¿©½`–øZ"¼ Æ p×p@“̸(QZÿ&mßPa5àúBÔ›€Ÿ3Ô™wT^ñ·O¼ +â8ü™ ·ßÿ ¹ÿaâ»hÕ@ç<€ºÇÐ^Öyüh´öh<ÞÙ­“æ<œ°Ð„§ÃÝ_hogw* }‚J¡iw¼ÃWÞw5ïn}JMÝ­2ùu0Í ‡?–øåÿüÿ÷tòÏÿ'ë“÷÷÷w;ù¯ÿíÿÿ9~çãù·¿üáŸÂz7kKvá¿4üêoB]ÄšAò SQQYCV€ zyùùÏ'ŸÿÛø‡ßü|òâç“¿ù›Ÿ½¸øñq<€p ûËè”À¡@‡°Yðš5€Ùë/¤oÛÞÞ ”WÅÁ + H݈òï˜÷ù|€”@’Üà§g§ÿö ²ÞD·0Ë]ô‰ÕÄ1ªóh¤÷£uà©lL¾P”@ß<þŠñ/óßTýÿÜxº¡ýa¼«Ü|gM'±Ho‰Xî{ÌXQ¢òE­ÉÀ¾ðMÓ—_õà{E"†åÅ’–>n^w¯ د/øû'ZÕ̇Ûzûo‡>&^hžÛûÇ|BH£–Ù^t¦ÀãØ¨<ÿ¥~4’¨6€1µòø ¨21¥ká‡y¬PÏØ»)Ž!Í`¿–V“ËË~üñŸýú×9yúá‹ßþÝïþîoÿáìÿö¿ÿw뇿üX[·8{:Ýæ!É“4ºw0 `Ž³è–Ž5ÚÖ¬I;†ÛR+2o×g£¿úÝûÿí?üîw×¢/>ùä/ýññûÐ¥¦@–Qpä“P~¥"?—Ñ/ <€¯jèø¯³ ¬ÿ;Šá ôÔ9î<ÀT:/ÌmW\ *Ý,†-JÒ«¦?.RÅ£ÀƒµÓÓ©“:{CñQ€ø¨‰¼ø/û½¿O_ ZqóŸp UÐutÍ3ð"Àë!çé‡ßæÄwÁЊÆ(¥©$áu¯m­@ + =°îÍíc÷ý¬y†G©zí4{?lRq~¢mq€r05‘ò*f¡eÁ”÷sg;ëÑ 'ål%{ë,üü]çÃf±>ÞáýŸåbÁ˜÷b4ão|+;bgñÓ%ü@pÎÿ?q_WuŸ £[>Ö;²º…D8²d»ö‘ Ù‘„2ökÙø0R\'“ÈLš‘S%Ætú¦ir'nÉ€¡Ü$$q ØM‡æN¹—Ø“po“B‹ËžÞšL3mß¹sgú{‰Ó¤ïï>Ïóÿ¯}öÑ· Í<{Ÿµ×^û󬵞ÿzÖÇÞ~(ÓÞÞÞUóçmݾu÷–8Þ7|òÉáááëúÆNãî C4…E5 ³"» Å~ë˜ò¿D¸}S1o0ºkvx½‰Âï¸"Îì=õÔS°ÃqÃWŸ>¼êʲ(óßžÐÿóþVÐÈ–áD… p“¬Øî+ÚÑÀtm¦]¶h!Îäôgé¯ãà¡kð?íȰÿ+¥ÒP+õ”ò!í§ÔÜä ¾öüƒÀä gþpŠú,V±<7þS ä§#þ[ù_·€ÿ,YÌËÐo.Ýï“YF ÂL76 w®Fd*B¯3 +™âŸ¸;Ü*gƒ”ȱþ qšÌÞo? ìVZw’áÀýû“À¦ô*Y¤WÃUj@ú±? ÀèŒ% 9#@k`·hmŬ=¾Ïê{6WÛ–kæÓ<_^äОF~< $F€mhïXÏ•–æÆÅ0#@>Êekx ‚W‹¸X“Ïq\Ç5 pM7Ls@‹ÒqÛm½½×öfêvnݳgWk ž¾3z"“y°4¿®Tjm]zyTS·ld~n0 ½:YáéØd«d<ÿ¿qŸˆÙHŠÌ.Q´î؉±ññQJ€;ã¯>øðö—äö +ÐéôOfDe²—d$³Y7&ÀÊÿJp)m—-€©2þ〪ù">‡ Û¥ˆ‰€uù²±MŸèª sþ³¤Dœ†M +BÙ—‘;0IG“«F~ üéßØÇ—‚Q÷Ó˜øwþ«0®á;@œöâ?y/‡gÂ9PèшY9ÜìS„ÿ†'Ƨg€ÅïÿEMF\íœv$àÛÝ© ^Þ?yN.‡Ÿô·Rž6Á=üZ¥ЮXÓ?°²_üg:² @]\ë ·8DªÁOÚD榊g ÇÆõàùjO~5°8pó72¶<=fÝ ùB±¹˜oYÂþêõolʰþ PÌ÷ëkŒ€h‡w‰tQñ~˜Ù# ¼×p-@ïÞ8~×®]ÛbÃÇP†}d¨ÔZÊ”v” +QÍæÖÖÍ­<†éÉg¨ðóÿDX{1¯u÷$@ëpD²_¿»3¯;öòøÅ‹ã/œ¾5þÁßû•x>¬vIYSöçÂÿÄlã|Á_RÓM€³:aô"¾¹BÌð,€ÁÛô¶0ø¼ô7S €å‚ù˜áLê䟣Åä=ýHІòä>væƳéi$'+”pa²1?œ8S´äAú¤ò¯€l°€ú\ $ÉqòšŸQ,@_ë•MÐV„¸À-É>%`›LžLº’«ø#]ÿ+ª¬Äðï‰ýP¢tàµÁ´ +_ûÄ]Ñ—µ6J° n€w’øXbbb†ÌæÚä…®b3¿ P6¹\[Ž/õkâ¨~*Z5ÓÄ…¼É~/W,ØûþôÆŸ\n>ßéÀà +Íü$d%üÊ•OËÆÝ_‡F,ÀïÝñ•;ââk»ölÍ ?I >r"Êß1´¦µT¨Ê DU›õº®0j0]+‘aáùùZÿO R¬ÊŒ§âœ Ú«Ì)0$üŒ^ÜÞwüø#wvõ<ðÀ`îÈL­H~±>µHhkÀM€Ú|ÀF@o´‹€ÙÚ¤x`xY0-‡YÀ׎,˜h8¨ Vn§ÙøÏt00)l;ÓG¯þ2Û`%ª¦8š¬Œì€-TpSócn®ÏApÜ:þ5Ûø>”­‡”$×¥’õ §a膖l"lA]‘LT˜uw´v«À*ü_ü?ÜoJðÉè_š{ "*¤r´Â™|&ÃùëÙ1àch,D'Ù?  ˜H(±ÀÌ€À›€+±®c¸0¢@¯ë¶oÊÌ›—­©Å²Mb« +À-MJU=ç«Tì H7Ödò¹6üãX"(€&~ÌŽƒ6à÷ó‹[`7,a̘0 ¿ñO45EÑÝwßö¹¯>sWuq×®­™gYþ¿¼>ÿKW·¢Pe·nå{[—AÀf0;²ÁJÉìJäö…fM¶Ç¡P[åP@ž€è\ôŽBëšo\ݬx^ÿâ‹/>ÿÌW?·NÕI%剽N{9œØæA¶Œ¡‰ +ðPÀTEÀ´ãPôûÙûB±>_gõÕô§]]ˆ4…²HÚŒúä,·{ï7Ø›‹s¤<À¿ä¾ñ_ [ߢÝe1¬áÀ¦2úp ƒ}_ˆsyÌÓ9[ºè>yçí0yÌH6oàKy +Àˆ êj€F’Û$7™z“áþ ÜS`¿Û‚Ü5 à +À’­³¡a%7‰Ä‰d׬øÏÞàq@’ÍÙvçU€F>ÍÏïz‚ÉõEäkŠ&µé5Ç*€$€ ØÍÅlEÈ« A'¤¤àÃKòKš—ð„9¾mˆ¥vȃ€,O™¨ eVö­oÎÏ}ú…gg£hÇP~ÍšRk!Ú˰yó²Öå¿Êà˜ÄHYûO R¬§ëÁV¸ÀêQZ,jlm:¿f¨u¨µ°œ;ÇW®\y•~{Ì„…½¨à\HR‚¼ô ´uþ¿…6>ÄŠÅ¿ô +8‹þj4 :0ö ÀõFóÌIÌ/Úhü·!ð|4ùO”!R]€'4ù«æßÒgkƒïõð_3¸çPügãÅØ›öÇñà»<’DOvÎq]†EºÂ7 Q—wTáv©ä}ïV‰ø'²ìÝÿŠ*ÿ/Ø (ª'þ+êöóî~8ð9å}0môdhb¾ÜÖA¡þÁsŽä²{ÙžªþÊèüb€yÿÍŠ1øÊgø`jÕÀ„°d§ih+P'Øžà|¾¯ñÏO!HÓAƒÑ”k˨°)OÀý›óM-|A ­É’¼>÷Ãì‡ü''Àp;MM‹~åW¯¬QãÛGïÃ=þ—(j<74ÔZÊvÁl…(,+à]+Ym'qÙdÿ ðÿW³Mÿÿ +c(WPV,_Ô:T¤Å\3TŠ®¾úW 5¨kN£8ÙlßO+@ô'*øo…þ”½3¶¤€ªýR¶½Œþ_™˜2™ P: æB6R°|PaÇ6ÚÇf•…°T°Šÿ“ €êö^Ëo‘â·W}´´pDH.æWÿ,TïWá/`7ktƒ‘‚I™Ð"¶k;Å¡Ä=y)$F'‡pÐÀ ÊC¨ +€PþùP@Lt6Ìý³¿ØÞ¯™/ðF á»-œó6 „³&) ×`”æÌÒ<|&›p•Ï’{©`ó;™d©Øà0¤ÒŠÕyÚ¶ _ë›AZ…­çBPhƒ ü§Ðçû?š³¹yYh}Ê~hl ްó"?r3—9¶d  Ý•®~ßûþÕo}üãŸøä'þæ·o1£êWþñç?ÿùßí¨‰ëŠCC;¢­0Ûº¹uéòÖ¥­ |ÍK7Í»ø?… ËÓ éõæôirßбhQëšÁù_Â%3ÿøÇ~ëã¿õ›W+›uU(û2˜/+`å1ï< ýË"ÝV\K À,mA, y€áÀ‘¾9ÿ»ª §$½Ì6ôÛ;J_’“˜§°u’ ੺‘hbÖÈ.4·4×7s”ìé—®„ÖsqM}Ì%­Wk‚Eàž< û²eP?jxê)ª³™j“:),¿  mÍõW–€Ll¹ÀŠþn ³k¥õXÿ¯Qöe ,9…òœ€³7ÿ» 0ÐkôçŠY /Ô1#ײügBéÇ&¦*¿Ùdu~~;`†ŽE»ŠuP¶ÙkÁþúBŽOõƒÆõÈØ@Á,v­‡,` è¯F@£x®‘/oâ0 ò¢O ÌT »•÷2ž±xëu‹¢èW~å}ÿê_ý& À'?þWÿósqtÃßþ_?ÿùÏþîïþæcßyu&ÈE»_eàC›[—/E­ô”'iõ§h0¢»×šGTræ9T)`Z¡þ[‡Ö@²Ÿú8   ìSPe;à«ÎÀ) Àd0ë³é^n €k+P5q, ;J½\—Í%;° ¹±¸’«¦nD°ê¬9 ï@tqà%ðS;@Ê0…žå=‘­ž—±Í864‹ µ²Õ|:uš)£#ˆ´Pˆ¢y°v>œ ²Ÿ‚ `ÁO ò?™pß|Z”ö ¬þ—€¢u€ÿb6ÙlÌöhÿÄåN¶âÀí§@ }¯4Ó ê‹YTsÒ9ÆLp²?;/[[›kËÅEëÈcÔjI~òÒ¿m’@&!¬È. ìg¡PÔà%HÏx‰ê°/rlrÂ[.dS}ú5t,/ðM6¿ú¯~ó7AÿO}êÙ?ýí_ÿüçÿ×ýן†xÇ;Y x/Û[Kƾé•V~¢°b^+©$—ÿê+€ÑŸè¨ª*´ R´®)ÕþÎïÐ|äꆾ—CÞÒÙmó­ ΄¢[&À}TþÐKjHõPP;ØÖìm¨´4jЃ"2À"µJwTÜ VÄs*nàQõT +in6ÀØ,º’¯p8Ðtž¸Ôǵõ³À™ö@G™ pÚcA;"¿,Š%ÛK[LÐ +@ˆî)`S`<þÃJüSlò¸„·æÿb0òz#,€×ýAmRÜ|jõsK@æ›HØï}úO"–ƒ€d<ÙXù'•~ ³ôÍç7æzÀ~D0“(—+äøšpn âo#ñÉc ­@@þ³Uà†6I|Ôr˜‹Õ ÔD3+€dÖ“#KE¯¡áW—Ò~“åÿÿþ“mQî¿üüï£Wþúïþúw?ñ1€à/£õÏlˆ¢¥[÷ìB% ªªTjÕ›;40mBæ¤Hèïb=Cð³ ÝÐEÿCk6·–Z‡r…ßù8LÀ'ÿwWúnÈa Êû9¹9p.–1‘ÿÆù¹= PØÀ}h:ÊPo#Ï k +@Ño@¶‘ `«Ó(íâGñ/#VN«ÄR ï‰Í“­®ŽLîƒÇv $ ^Ï«ž-Àz‚•ë<È‘Ÿ+´¦xz¬Ë +Ôç®L,@yÀ +@wŽ +@gw§™8}ä,dnÈö”yþ +Õ@ÂqõõT§`Ù.$ +€-yú3z(I6¡C/™»` >_ºR„Ï™¨…§h5¶ w@K0Pkü§Àñü(GÃd›ph¡ØÐCPº>ýS±Ÿ9Œ¹ÌP(,/,-EW“þóJm4ð·?ÿûòêÿõïšøØ'~³1ŠÖ¼÷ôñú(÷ïÎEYŽ lemXéüŸJÀ§9ItR0ŸTr[ @`ÍÐæÒÐàЃ™«?õ;Ÿúñ_Yu4twR¸묷Æc¿ùÚœŽÓƒ +àÒÇ”{¼ ÀŽ$p$ûé¦E@0ííq"ž0QC¤À +ªŽÊP–‡\°ôŸ¬,’šDhá.ÉÕøiÄ_úÀTSYh¶ÅñT~… NÚБ… °£dD|-t +ú¥ªY¹÷µÔɵSs= ïTÜ7ÓÅBß²òFP¸~êÖÿYÁ_àûl(“¿ðÓxjSáb¹VèãæÐB"¤l\Ũ^ €*€0Í[r'C,G]¾'¿„-2P¨4’â¬å³ÂO¹O `UÔÿ© š&*€Æb–¶£'(°¾â§³ÒŽ¿H6aéÒå…BáÆè#Ÿøä_ÝE¯üíßÿýü©_]ø]àŸøøÇ>64?*^ˆzÜ÷ì /<ÖÞ_A }Y¡éܱ*XÿWNxÒ›®øl@[¸®5jËØ@wG>Ÿÿ‡@ÿ¡ç3ùÔ§þúßEQñ† œý‚‘“-Ú’•)4@%¦ª—ØÀØOþÓ`É¿(¨ +è3Lh jí±»m€1/ÍOˆXÚEGX,eG‰ŒÖ e‹,€ +jã°<4l•c!Ý `ŒäIQ§’¢ÐÒ*²$´BŒz¿viÑž*ÿsÐl˜ºqv㎑7|w>ù»æÿLðâP/@‚Ñ®7ºûö°Êeð‡7‚¨À²coùT? qŒÂtÍ\ùOA׏<ª¨”™h±Y@íµ­–×]ðõß|€ + ‚ÜßLPÿEò]fŸ3Í€˜-*,-ZwDù—}Q…ÿßÿýý÷ŸúC‹ÿîï~ìæ}ì73ÑÀÞÈöÞwèÐÓO>}ð™úøÂ¹Í­­Ë[—2oZ +§ @Bo£¼»ÞWœÿŒÕtÀÀ™’èp!zå¢ìùÛÿý†«ØÖ€¼ŸFxÖ)¸™€ +îN†ºô6¸³)+þed +".á +10ÔÂdÞAËb"ƒ—Z´°JÖA|­¶-ªYˆÛÍ2ÝÂ[MÝ ~©L¢®ñq„(…ùaÁŒZº PÐW6¦Nlw°â~ñ¿šm´-€ÉO«çKA‰ ÂÒ†({ðGñ¡õ†_ÿË Ÿ +€ôlPŠã”¦>ü¶šÞƒõ8`µ`ù5(ÚpQß4€ßÀìpš÷ òÞÜä + Ÿ«ñ*€µ¨¼×jE# )€|¤ê4´«‹ù%PõÅRñ#ÒnÏxOˆùH¦ò4ÀÐîgàþÿ×ÿû÷?þd–~âw?ñ‘ùÑÀ…óçÏïˆV:xèàS÷5ø ÌuâA467'm…\}±< ´x€ +€­‚X¥` øoUä})€ÐÈú¿9zJQÄ÷ò_쇻†EM¡Ð˜ùwÿøãÿøßŸü/mQfxôXT{õeQéÂCC¥yQ1zæàÁCOò +Å5…å…Ò¶è#Ÿ$~ç“÷7`ÿ¢x퉑‘«¢(waçÐÐo/ˆ +ç.D^}zô…C蟞ãx ¥K;ÚÙ `•ÿO䵨O†3µå0Üo©/tw¶¶îˆ›_{mçöíçÏ_Öö©ÿ©O}ò“¿õ[S(€†°œE?“M@[±™S´\ê³3(,øö¡2áåÃ?ÖzXåÌ03¦Lð–¤h IüFàò–µÇw!,j»º»˜¼àja€ÏÚå0³f’-]Úº¹8æDƒ=tØw®añ_½é6)€Ü•Xƒ àb¢‡ë|fÈgdw:Bfø%@„çdÝ€üèšHsŠ'6g1K¸ég„ÙXåŸMVÿŒÁ8ßp•\Òªò«M3ÃÛšsùÆÅI@œj`€C`Êm~ð HØÏòÿú"ÒAwGÍ78¥Õ¥Õ…E…ˢߒøÛ²Ñ¯\ÝZÊì99ÝÝí*5FU¥ÒЃ¥èô™ÓÏ~nC}óùR&ʗڔ˓€ñ<¬Ù:zµ€x­.7vuÔ-gä.9w®€ëþÖ§€Oþ îéR¨Æ¦&R]¿i•%xÞjÀL½Æ3pæ\ˆéSò_ªªòûÅd»q:´0ÈÀ +€»¬¬XR™Að;F@ê3)Óš­|ëÛæÖÍìH`í‘«ôÖA26B¼ åRhPí@ ®O«t¾²`“µá—Ú`üØß§oõ£úÞÓMˆ-ÇŸúuS¸Ï üÊA =‡IÈ@ Ž ‚°‘€€ßÀìÐÞŠ);m™5o®·ú¿!ûr9Л¤;Œ™Ë Ùy°ÿ"—á¸ÿ¡R):1<òè¹ÔgKQÔZBØŽ :+0ð¯ŸßZˆ¢ÆÆFžÌœ`ìŸødƒÍÁ”óOâ>Ñ"¢ï¹Ó¯Œ3U…ÖBô‘O}ê#M™ÚR—±wb$h¨(ðÝ›òÍÐ0Å8€ + vyÁ똵 Xy&)QÝnf|TäuZX@Yûµ“î +Ž €íìîî"í:»¼Fú ïݼ‚ñ¿ Ut·¶J–ìÛ£ü§ßŒ«èRMµ„á@ì`-!¡LIÍ8¥–®,‹á„T¬oâ—’^?~U“ÿ"¶µ$ÄwׇþVÂuªªû[~M@òj0Ç5 ïDø Ì +BCÂÖÅpn§ÇÛ6ÿAÀ\Cæ#¥•æeÇ>0±bé¦-»—G¹(»ãÂ…¡ÖRiG®cxø©¾+ÿûzp’(ÿ Q¡uË®íZQû¯îÙ³g¨P5>Î +ZŠÿ©*€³[g[·möµ—ü´}i°ví·ûÑñÌà¦Múz)j‚½ù«ó¥škð<& + Lw9Ö  +—‰ø¿0ù<8Ã!ÅI8‘Ë€‡×ÔZ‡Øs­N{\”ù/¦`ä—ƒ …›ä°j?}É + €NªÍVú÷µ9¥$€Ê~7âèR ò5$ñŠÖe`ýŠ/¶yóæ÷ n^SÚ1Ð:êEO¾qÌé/7@eñ,GJ€ñ¬p) p¥Uô½¨Î–4=‚g1  eHƒì®ìñKÛ(Ê€ª¨`·*@ +\I ´–?Ù ¥ÿEDPÒ p ~~³Áz ì4vZò$PåmÃõ|ˆÓ®ýàZPݺšËVlÚ²}MtnçÎCW£x¸:ºýäðhtû +ÑŽäÿP1ÚõÑ]Dt`×ÖÍC7”x³ÂØb<ÿ©.Ÿ!ûª@·†¹¼síÚ}ÇŽØmÙôk[>´{(*ÃÕ Èã·Ýì·’tᆸÍOâÃG¯ÛĹ Ÿ –­ /( öƒ\j0’ƒo `È8™@~ìBBRp³j$¾QŸŽÖÙwgÌ×OÔÇÿׂޖb¿–,èq¥¥Fg-Èp^Ë@Í)^_w©—™·ÆùoÔE@­öYQf¯Ž†÷¶.[ÚºbÊþ¥¸â¼Í[(º‹H„fò\ûâà²À22ëG¸p3Ð,öÓ +¤Ú˜•y˜[h)ßTVqxPé?íüö€ªß€@}@ôgÁï€ô檌VlsŠõ)/óiYØß¹‚qLæ ²*Tç¡ÁÕj`0 Þ¶((–”;Êôk3í2~~gÓ¦ú¿¤ñ£'O>}õþ¾¨µuQö¯vœ?7TŠZ?|ôC»¢*€­Cmy(óvküb2ñÆnýý›àÑ´ù&´ Z»nß±‘³}ó~í×6ýî©0Ÿ©°È_ ¦6 3_ e`dO|pøSaå[ÂH((ñBy/u6y]¥‚–}pýX¡OÂÀí +ùŸ´ä¾øÏúK÷Às¹€±>íàêº 2zÑ‚¼×dd 6¨8.»ìrØ/øu»`¾Ã€æèõ±¸q¦u_á‡xo+këÖ;Ͻ2þ¡¡5È¿Ü9áwÇ5"02'Ï@ª»à``ÕØàùÈ ̆’ÊÀnSJý_ +Pä£ÜǬF@)ò%ÁÒü²ôŠêòk4˜YË +Àž0ÀÂÙr® +ÀÌk€”°‘ãŸ%†œ4H +še­8.¿ü²Ë—B­Q©Ô:4„_UÏÈS'×5ß ‚5*4^xãBgÙrÓMýÐGwµ.~ãüž=;w „ç¨è¯ñ?Ÿ¡×èï›ù“5oà“…ëhƲK߃‚äÉa„ÔÔÐÝÍÒÿ€ù¬£ÁºLpi¬w'LÆ”ÊYE7ÊS2^%¼ø_ƒÊ;àÀGíc,3c ‡^¯ÀNòçÀAðŸ + üÀ¨^¶Ô +XI‚a2x+¸5Z!œdÁ~¿Чe €›  +Øöˆ»S8´Á‚w\¶?¥£ ›ÆÑ ÀàŠ¥¿ +ñïìï¦÷¾·Ì´îÙsþÜy&ok¡u«ò`""¿ÿ6žWt6`mÁàg +À³–ÀƒÌr¤ ÐþK{`Š@y /‚?ÊÉŠxðœŒ7Î3¤ÌwvV<ì@6-ÓT´lÔ3¶ÌÝØ¸!ž*¼+Ddùg1DH$-Ê:†–-Û6mª«;ÚþÕC­ÑwX¸ûùöùþ;Îøå‚;‡×FC¯ô£7}tKtáß8ÿ`Açµ¢™Ð…ýò)»é`yÖªtü*¶&ÀûîÈéhé{~MxÏòø|éj7]«_F8*áC™otG€­OÉ3 |‹‡û2V¹&ÇY¸²@&ç¥ ¶µk¨ ˆìƒk¥3(: ”°"Îv0<ùÿZZ¸ëÞvàÀ=pÅ×Iöò•*®É•ž’@gG÷Êî  +lñýß›Âv¾® pîüùW¸DU`hp3]pIJ ÉK @È’4d?ô?«z ¡~9 @oV{þ9²÷”`™/lÔÃ@þPP9¼úÃhúO,í±ÝªÚN`¹5 (–ߕ퀀ßÀ,@ļ;›ðFÁòöÂËüPôÓ5¼ ô_ +þügE¦t~¹¡½0zætôâW#¶þ]]:õ=ííJG?´ë£7shðùQóUWñ &‡¨§_ dÿÂ鎿cô›ì/j“[UVïyH‰ëÖ}›¥¿€M™Â9S(ÛP½µháö¡Ì/¶%~[A÷TÙo?8 YŸ§è—úVƒ[P¬’z,ŠYØ"„œ×ZÍX€E¬ü«QnJí²0VšœPƒóÜä:éM°ð@TçA<‰1Ÿ>®X.ºÜ×Sg~ã­ƒ2©ƒÕúLôŽ‚¤ÿ{ß»å½[ßûÞ‰þp·®Æsç.,ÉDUl € `¯ÀÒÖ­–7Ôi«ø7&{») êÿ•öK+n§HlGV*Pjr$à/ Æ~è~«Ø'ŽËtÅS¿/ ï¤#¯&e[–øwA„@~³;z# =bhg6b¼í`"xúñ}¥£¥ÄŠeª¼gÙ²Ë3;>‚jÀ‚ì™±ñþy‡ÛQE„=,DcãGwž¸øx¦n×®~´µðç÷´F6là‰¦PöW&þ ³p¸œÙ¬RMÐÙy ?¡§6€á‘—3[ ÿi”–-[Zø•Ž+yuoûÛÚC±Ÿ”ÿeÀ‰sý e2ëÜ%ýÙAà3Å»ˆï +@‚†3½4¾ÀLê{“<ŽS£ 33M÷Dð#±‚Üxø0?;ÃDà˜ä(/¹ ÝÝÝ 0ÏšÉdK;Á|Pþ½»¶ìúЇÀþÁ=z¾„­Y˜Ìè¿}'LÀ Þð°¹Uíöª=ØggŒÿ†ö˜O ˜òW-ÀJrR +~6†"Ç ²;SßfÞã4îÛÀƒùqP®˜Þ7n¢=üZµ%P?Ðx¡´UPvõÌÍL›ô0²*M€ßÀ,Юiö§áû¼mP:I8+1ð é¶fpÍšVTV€ÿË–Í/œÚÁ Ľ¥¡R©¦úGcãÇ£GhªvïúОè®Q߆}0*š+ €Å—Éd­À%(¤ Vaêìܰa߉OD»wÿÚ&ÿïÁ]-Ìž/pª*™PÆ êŒæéV~MKó·aµ˜;'€|W1*«é3ÊÑhÀ#Ò£ÖϹ¥¸´8O!#Ps9XY¯]YÜcJ“×ü¶ +˜ •Ÿy\XT5xR¬Úq•uüäf0”ܧûpÊ\¢7.žÛºuˇø&·]‚ ö¼z­7@qÏ®­[wÁ¨(ÐÔexäé2õUüc•8ÞU>`0Pf,k8Ä,«M¡,—Ovß&¨ü'íõF þ²_5#4‘ÔõmQþhÊL„Ý™_9YÎf̘ЫAôTõ~³€§H½(4l|[cHø„t±0n­[³bÓ2°•€¡…¨åÝŸ]ÿÙw¯wT:7TÚ|uk´î¥“ãã¢—ÇÆ^®ÏìüЇ¢K™¨~m_ÏÕYiìOÍÓÄÃ,H{¨ømöÄZý;Ÿë‹2…í›Q)Ø´"³ºµÎž ùÛI~Ú€Ð;]æ“þŶ>,l’ehË7‘©þ³£@¤—GÆ:ô#áÓ»R ¨Žm€0Ká×0c!éh¬Ljsàå<ì@B|¹öL€óá_!àç*¯àƒ6HkÀ™oÃñã*`¾Â¤t¦T@|ÁUž›-°RÜR]pœÂe<¥¾ÓKµ^PÌ ¢¸ø¯ÉI¸³Ù‹t\Fm ã~¥àè‡0YLâ¾I€†»Ö­íÛ@EÛŽüiË©Gv裂 @ím×M7ß|ô >ú‰jÀŽ »woýTÀ®­[¶n¤ ¨CâÔûáj™_Ø×ÓÅá´ +@ ðòeðX=kLê›Yø_Ö gÔ  gËEz ~bûíËä~¹¹Ð €füTú»`dÄð˜Ú•´Ç™T:œ*o/˜ (⧬Áºu·®[·®#ƒ"w÷M»7m‰¢/ÞÏ—î¹çž/|é¿e»»/ŽsK¢ññQàL®óÄÉÑqÏ™Ìs÷Þqkoo/Oä`‚P|‰äʹ$Á?ÎÇó…¿|j­½5ؾá;ïìÍdêxO¿¶)ŠÚ¯QSƒ)ÕÚc”ýä½*ûøò«ùä4K̰}ùüß—W×Údˆâ`Ùne¾,€zùìi{~JШ,}*‡YO˜ +I°S[@ç4ý}ƒÈMÀØ@TUá¦øl€ÂÂF.QM«]¤?8)õ,nÃÞuë6ÿO™‰ +ùO«ÁºLéÈÍ7ßðQ”ÿýèGoºùuç?0p~×Ö][wïÙó±][ßû^Ô†v0M–ZIarM{C¬§‰Hô®Î0NbÝ + ·˜Iç5¹H·`&»oŒÿ>ÀÐîXñ^îð d×BŸ L`fAÍ6+8QF/tмµ6€+X}ˆ¯à™í Þö˜HzO7ÍëÖ®]wë­w[‡{X³{EUt÷—¾ü¥/} +àžÏF/>øùÇÞ•É\{á©§FO½™Y72|gœ=}:úþ3wì½öÚ^ža¢p €ÿˆýþ!ûÙ&óÚž>v'h¿öÚ8snG¼nøàðð°K«w.Œz®í4öƒù¬À!×Qö³½¼ + ¯G¨Ûúò}…|“@Lž’±¤˜µÕ|Ót² Òžãù€â5öU§)¡ž¿Êm^ÖËaÄøª­Ë˜ Çqêkd„ÄfË$Ã.Àj¦àçà>“@* ãðÿöïPpÀíö#_?² 9+Êýæ›n>z3ŠÿÞñ¿kÝÂέ»vï¹y4‚Õþ¢ˆ|^³@…?--±ŠäGú°’Ö±ªË:Ø`Ì/ÃîrL‡å5e4dt)¦| +¶:Ù}[`e>íY¾í/ðšËàw  þyµ'׉°bq‚|‹?LB¥R6À¯? t´l*ô¿j¤ÍÛJ–$5lÅ^ôº}w;1|'³DO!ú +ùÏ—î¿'Ú{à>àÐxì…“»×í‹ú/ŽŸéëyîs{{÷^Ë“L­ð/ìŸøÏaƒÍÜOV‚!ÿtudâ¨Ôz®Ÿ>6ÝsÏ}÷Ýß}2ßåÇÂOŽ?ª~ôâøØøÑcÝÖ‹ªRv`L÷Õ쎭š—€á³œƒ¼¥Qé¥ÂÐÍW¬Û÷Øéá'ŸÍDçÎ ]•â[ÝqŒ²ß±G +€oMÑë©þ{èwÏWDØ@Ú4XèËHTU-¬ºl¾z +d +Äy•Òl¢³ãñKæ¡×ö D× é [Ѫ‚<!8Wüð2¾—&×õ㸂… ©dt[Ò›ŽFø¼Â^A®•inV€€b`¿ ~¬ èèäPémü¿åÿ[j`Æ7еÀè/x¤ü°ãƒ‹eBýÀ},ÌÇ .Úyî܃qöÂùóCCC…èÚOÿG €ûîùù Š6lxüñ'N™Ó£'ÆÆ^y4zìö[o»µ…q—wèj€þƒý ³v ºq^Ê'Î0[¶Š¯m¿6hÝöyíƒqæ¯ÎŸ/µ¶"Ÿ³“€E دÚ)Ÿ R¥¿PìSË¿ÛGKKK¿_®’+/ŒvM‰DÐ H`ÂΨ #P<“Ÿ‰€­˜ç«¾“‚ÑZ®O„,€mU‡#§&£îsS¨T~¨ãÎ[»:,Vo|èÈë7"Z·>täè‘£¯Q[àT0Iÿ÷$ÿ?ƒ:@ZŸé=jK;>p¡ˆ¸]^¨_Ùó‡d£=ï;ûËof›Ò0™ìõbà~;èÏY ðŸŽ<)_yYöüb°ò_Ÿ·Fî”+9€¥³\«Z÷Ÿ…@àïðK®¦Pqÿƒ¨„_ ¥hÖaÂÜŔș_ðÿÛávšá áY¡ Õñz›7oÙºç\æµ7~üŸž‹z¢½÷øÀ=qÔ7vvüìØ(Üèå‘“##Ã'NgÖß½~ýzü[)VÐu`QþHø;v>%~€–Ïo‡ÑÛ~í§ãºÒÎxë‡víÚóZæOß8Rººµ°¨ƒŸÕÑSj½4:¬þSö÷±õ/ÆæÅ—ÿ›ò䔣ܬ&2S(eYÐfmÏJà`‰Ÿ¬AaÏÅø„å6Ù‚³~¶gfQnh&p„ìEÅ@¯jô¤X¼uûö#¯!†Ö|ppÓö£G_ýFZ€Ò…7þágÆÿ`ž~úˆºÒ…; +u²ÃH°xõОóAª±ò®£KÅ¿d¿€Jö€©{:X0 š“ 7G˜ ¤=åLE5V7ùEÁÒU€¬¨ä‡³ÉoôEå}`¾‚°êéÓÂm²ÑΆèQ  &À¯? ãT²Ý½]e bã-‡:Çl!W©e¼7òÃ5OMM]ÍæÍ[wíζ¼¾sh¨uMë¢èÌð#ë¢ÌÞ{¾ô¥û ü?]רØèèÉ“O=•9~Ë'†[2·ß¶~=Ï0Aà0jpQ›d^®È,(Ôþ+²öƽ„|rmû§¯Íœ+f9|å¦Bta'?¼tAƒ4‚r‘Á‡õ„Š?ØÎf©€–¦–|I +€oXæ»–Ë`±*¦%ÜM+k¨Q€+‘œûÓtpEÎ<â7_ë¶Ïf ¯ `d·@…*¨Žój¤á¥µ üw6Z¦³è¬ÜúMÖ¡¶oÙD ðÐöóÁéæsÿp#wÿ©`°öÊù;>2T*ÕYZà·šýq]a9,@Ûf:;õ˜¦Jþ–…Däâ L'f°ÄQC @ÈåLPö–—úœÉÛPôÏ ôû8€4ýÍÓþa#‚BóÁ?‰í˜ˆhrÆ·éV¿þ,PŒCز 0€ü ø…DmðC0!Äx:ðk$ÿ_E°b›ÞCnWž|êä±¾¨ýžûî»%ŠÎŒ>½Lú?µ¶ÿÔÉ“££OøŸ¤Â›¨%HkÝo"}#fÜÌчŕS†vïÚµû<„+ŸW-ª°™ù)Lr_‡šþÙîš×æjüÊ/½|k*Œ©/‡ˆ… ÉGÒ/­ÀemÄ^(hE=Ò\‡p_R]¼ %¾*ÿÿUIo#¹M†§Xnžý“p@ +ÀEÎÅ»œ¤*ÛØ þ“‘Ì”À»>ó}DÍšÁ½õƒ[ ×ìÞ¼ÓæÁ÷ó]ÀìŒbðÿÀ}‡=õôÓw!Ο߹sßWÚÖˆ#û ‰³‹Ð×Ð×PÖ—ÙÀX:¤Á¶Zl€ÍµH7Zv7©Œ@(#8ܯEÖ^­ð_¤?E ,YLZ÷EîÐËO¨Ë¿¼É òÊ¢zzÇòmÿ›ÒðëϤ³Ìÿ`€T̼MPj¹ p¸ÛÎm;6oÝ}>.î䛸[‡Zã c£O†Ì¯zïÈÔÿdttìx<üÊÿá‘uNŒŒŒ}'ŠïêÚÚÚxܹ2_ +ŒH‰éÿÃ<–Äå`ýU¶Æã¾€|×µ>ŽÎïºùæW{b»§ÖB•+­39ÌyYUòf!× À*@¹  ©ldøc Kö‘Ëe`Ö 0± `ÚHvcº6™W ÷ +$¶˜^6Î~ ä‚y"ÜlÍÜ@ ¨fôGZ"Fã½ð•¯~q¿ +`ûöíÐýñv€Mƒܲe«ü; ÿ1Oߣ.œÚ±Sïwú««›q³L#öR«ü—ö‡èèL‘ŸˆØéÀ°]{‡^@Úæ š)ž?.ˆ$òÆ50µHEý" ÿYêûúà A(’¾ÌòàÓ&®¨QÀmAÚR©^ö¾å*@ƒÇ ôÏAÿÄLÅkëæ­çâó;[KC¥¡«‡â»Ç!ž~jôÔ>¤ÇÅ3'GŸ:Ó·Žü^×wvøÄÚhÝÁ½ÑÀŽG !Ð)À;WÜT›0GÿG›èÚ:\ΈØ·¥¨ñ¥±ûŽ8vÝüê…y³õê50‘Ω’‰³Þ&t0»Ø$ çÛøâ +ß{ÈÿFØRž0«• +€UAj%¿bäD÷Æÿ˪`zúúŠÊš~ä·$Ãaf^Êàs'ÊåAg–ïöïïï/¶ôõ{]rÓOuR: qïÞÏ|æ‹_ýoG+V nÙ¾}÷DÖ¿\°…ؾ{»Tþc¨ÓÝwà>H€C£ë‘oœÚ9Tjm½z&`ÍК„#Û`hp~õþ™­ €%ÀL žÿ +˜Ðn`€Þ9dVÅ‘òVøsµ®²|ƒá/•ÿˆÿü0_ ¦q@¡qÊ{wLøËIÙ +¤ðWø/˜q-Ÿ ¯~ýY€ÜŽö(s0‰€Š¹d8ͽHŠPú'*@žkxÄÐÎ×â%|òw¨´f¨Ôñ昕ö#/}/Õ?~FÀö± +0|"¿-<|àÉõÑ¿¸újžbª6¦u˜RwĦ…þ­SôZÈx÷~ùxfçÑ ùxÇPëÐTL +¶ùO#À«™èìÌæšLöעܨA¾i.楒^˜X€” œMà“\ÙžCpc¯”`!íК~b~UOKOK>©iÀéÏwPsAÀhA‡]O\Q–L;Âôô§C')Æ; €”üÌï}ú³ø•?ú³0šÞ¿iÅöÝÑ0@½éiË–îFÀƒˆ»»_8tL-Àá3=q”úˆ^øXZSjµW¿n\­>–¸çšž»cr_¥?ÕÆ$t–«f€@]X²ü—«¤c—‘Z $WP›EB²kË[´×Ó€ò¦l-¹” V™ŽÔR¶q5m%” È¨ÊÆê$øJ€JðÖ-€Â}—·ï°sѱKŽrªqg)F!Àg[KÅö‹¨ï£Æò©}Q Š«yzôÔè³ñ“¨ G}ÕëŸ?pðÉgŽGW› ÿÕÀÛæå+¨Ыûñð²®fÞ;TðCÔ^AɬíÚ÷äð“Ϯϟ‹·¡`‚(°/¬Ï‹ÉãJè ÈòÕlM=À@>W,´ä–4/ibãÀ€¾¬®6€\“õ’AV¬:Èí´@YÏýªæ/˜Ô à̸`å#R´Ì|ìx¶LGÀe +¦¸É&¦€µ@CT´(åZ€Î†øÝ{?û¹Ïß½¾™9gÍ Àqµ|Ó¦ÍàÿÑmˆéç^8|è¾CЇ=õÂ6{à{à}ƒj (Ũ¹oü³Ï}î¶½½, È}+ÍCíß«4 •U€`VQÈdp$Q¥`0‡ 'Yr0äHM8z±‡¾EÐ4Ìz'¨‘ZÐ’ôÆ ê±ÝVd +ôœš×4é¯úiJØågs;‡Kxì9È-¾ÏÜbR?rÌN\K² +æ;nß°aC¦7¶^Ý:ô>”­«ã‹§ØÒräÑññµ«?ß5<6>zêx7èðÉLô|þÙgîŽn¸ážÍ«`üê¬D"^’[` ÍÜAw#Ÿ`ÀëÖ­Û÷ȉ'Ï›3(û× hj-P½Â[Ì·Õçrùb}Ïy*€æ\ËâÊ^~?-d4r ”±]ЕX8q$  !Wl’˜ß“ïé¡èÉSôQ €"ó1Ѹ``yƒrŸ @P–ýè–€ÒÍ¡‚¹G™Òb5:rä¡í„8úú¶L\€:ÀÑ£«y/>ýô!Ô¨ž~‘ZÚ “Oé_‚6—JuqÜþ®?ûêýÁg~ïڽȟ¬€òjÓK€Úžªª1x'@º ÀïÒÒßWlÆoEÑÏ~%«é³´ÇÆ 2“Ä#<‰ó‰v9À÷QüÓ6¼Â*¿•ù¸SZ¾f@ô¿Ò_óçןÌùPb« ÷}æ +#“<:±ÿìr;Ø\χù:mºôÊ\µöªµ¸ú"o©õšžñ±áwî[—Éœ¾8v{tôÿñÚ3W<6~±ßðÁá—£¯„„|áÙçÖGù<XèîzW¹ +À˜Ñ é$>º¾âS2£X‚ÿëö{üåÓ±KØQÒZX¨}hhi<®„ŽZ*> –s=-õÅBscó’ÅMå^µòƒ‹9ˆ@ܨšÜ ßa Hú² _ìXø·´ÿ®6òx +ê« +À|DÊi$Y”s£6¨ +à +@YO­ÓØÂû†é2ê•¡G¨ˆ¦¿8zäÈîí´¯!F—¿óàà·Ã<Üez^x^€m‡ïªŽ2%vlxß \€?ûê-À§¯½­§c%¯–¾¢•ÿj ¼ä @ÒTV P†˜¨Éåjë½  †½þ…Za’|' d€€± Ý¯ÈÆl‘Î¥’©œ ¯Äuÿ3+CêQ^–ÿ0_B àןV¤!žR¼7`“ï3'™|¡ °;´5:^òûcÀ¾&Dó¢èºï¬­yë€;K¬òÖ¢èâÉÑSOV¹ &àÚ8s|¼oìÉá;£ÏÝýîõ~ik\¤@ªwóBº l#6úÅ9»ƒ…BÌË5Æ‚Ì)Q½–¸îÎG6DÑíß[g!K`J­VtÐx­¢µÑåL¨ +Óx \S±.?@МË-†¨è`3 *Rö“PÑÀ@U ¤Pŧ-ãI®˜3_ÊŸ¥h °GU€D ~™Bh ×ÃBÀ«Œü6ÑpõR„,ˆ¦ê²B!“¹ñõ£G2 °¤[±iÓà–í»¿~ôµ(ßþ€u:tRŠÍ¾¨û­)µ–@þÁ«[Ú‘þßÿê½÷Àìýôï±î.åÊŸ ¼×m„6€JtÄíj9óùzqU`ÁCÒO 6çæjkêÙP*Àâ\®¦Ö·½%ˆüRÅÓ#X€éŠc@±ÍÖ€$¼œ*¶P©l3€<ë¹Ð_4Ìù@Ö¢K+0Kw'ó+€,€Ê_ôŸ ÝTàL̦۠òùl↴@€Ot­Ñ`<·NL¨j,`)× FqÝë=²] ÿ"¦W€ÿ¬<¼ñü}€ÃÝ}è¾C‡×#Í_cýß<­¥5ÌΟ½ÿ€à÷ ad+忪A°»/ÔˆT@#q‹nÌŽOÊüÔ`U€Å¬ øÖ·¤ &ZæýÄÇßôŠRK÷14SÈúæT”Vl³BþeÉe@ +Àº¤ÿaüò3Ãìb†MÀ%XíiŒ +k¢•Ïë¶•n‚Ѿl̬‹Û×Ç™Â_í|­}Ûö-Gv¿Ë‘Áø§£§NÆ¥7øÉëÿçÿëÝѼ Ç£V½aîÕóÎE}4Vu­JÚ‚™ä=é¶,Ô.åçÂo“·ˆCÞyÕ;¯xç;ßYu®Ã-»._g ”øtÚ¢:'íeà5Nä—| +z +}~™ßF.äšs‹[Z  \äùušyj$ +å~ò,Ø^ÑàôÇ,áI& Ü &À d”* €/!$ÙbÙ0ià*~n0‰÷¢^Ù4D5Ë Jì0Í^;r +`Ûà¶íÛÑ1 À€rî‹Ï˼ðâáC÷ÝGð3x5¤Öfð¿a}_%ÿez3úòCRøcyMrm:‘ß S"ÔP¦i vaùÏú?mÎ>~ñîxÇÐŽÝ{Þø§ø?ÿ¿3™ÂM»ø}°=¯]ø‹hCßœ*¦è~»•¾¤2€nųNrèõMºK»Y†h€ënÝ··}|_'„GMf9Ù] @­áúŸèÈÎC©1Ф֞äÿê|}}_ìA>_ì)X/ü¬ ?eÅqV¥ö)TTì‘Ý+ È¥ÊÿŠ)¥,»€,'mŸTPÐÄ • + p_Ò tØ.Oþc-ªúUñÿê5­W¯Y³ÜsãÔák :úú’8ºòÌ O:|è…ŸœyñÀw`¯ž5¥5œ× ­j*½¯À€Äÿ_‚øL/NÁ&£4tXˆ÷ïD¢UÁD +¨ €Aªýð!9gÊ×)~¤e=»skÙP ðÖ[I~ €¢Z-”Š[êš8VÐÓ±˜æ–8tE¨•¨ ÃT  x #•Lêù‚’˜€K²"T ˜-yR6Q½xÓLŒ©±ïÛ°0ÏOŒAðïkhíè–-›6}`Ë–º gÇ/^üi1Ü ²Bs½ºëf*€Ý¯ýÏ"«X8 8I [À%ñÏlÍo.å¸ÐÏ! à¾úª4D™«6¬[·®³:³„`¡¾ 0QtÌËfóTŽù\ssK\,6cΊ-4yÑ?Ÿ_ŒÜÔXgU°ÓLDÙ¤ž¨ZPå¼—XÚðãqZþ*þ1Ii¢¨Ñ ¾‡Â¸¯üÅÉ¥§­xþ’ÈLç2ø!Taò4ÈŠœÕ +(W)Fæ‘…ôQTh-\ݺå7*(eÿÔ^̪ŒóÂöÝGŽ~iÒÿâóîøÜúõ}Ìz¨ì·—v´¶®¹š"2 4X@`û¨ôniÇ b>†•hñÞïe~¤º¾üÚÀò_ +`•™ïPâO vûËÖk@S®¦¶¶æ­·º00ÀäU¶XVüÚ’i`‰`†À,¹’´A¬ZÖf¤‚Y&á Æ{Õ¿üÌ p *ND`g÷½fE§\Lxúf«`a(f2@u_|bx”ïü‰·½~ôèöMïÝ´)^öìÅ‹oF:üìsÏ=sk/8+мñ®Žâ,ÈŠ˜ýfTа[’pŸ ýì@€ ˆêùžµk×U×ê–×Õ雓@”+fÁsjÿ¸¬ 4çŠìýã+ù:Žbù’G~ÒG?È÷É'¸ Û*Æ$ +€ÿ¬ú§€|fu3¸l6Àà^­z-@y³¶šèA6ÅFÏHHQ +zÛJ]µ¢ú/þ—J­¥*ñž)oQª¸®û×GŽ>ÈP•ælåÕ3TjıCk6oÆö½N~à–[x’:CPÿãšÆv £»³ +€^6dÁá’ +€Å>\€ +wŒY£‹<LF6ÊÔÂDSÔ°€ÅbT`Þr-À«’fJF®E3¹ÏôPäÖ+-B”Kø‚"–qêYyÕÈ«‚Ä|˜€9÷¨â H1²Ú¤”ÃYË‚xFðV|²U.©)D{ž0œœ©Q6Ç)|Èܯ~zô©Ñ3ë{þ,ÀÑí[~-^wöìø|xôÐ}‡žf³ñÁhÃcQáÕ£¯Ý˜‰ÚÿðsïÆµp‚ ºtm^žÿI÷¯Ûã®òúmòÇ¿Ld ¤ª®n@‚¨Ž2ïlè€XŸYX¨ƒP.zÜd³K² :è^h†Èç Phbµ £(»·¬À?2É8Ð|Êqɳªð'7›‰@C”3–(‚w* …”;ŒÇho¸Ì.úv‡X¨"ñ\þ³+¯lÖã¾}ë6ܾáÄ˧OŸ¿ø¦Þ¯>Âa@,ö!ÏÉEñ U·cˆc-õMøf¬ºç§?p )Ê¥‡ØÎËò§Zh`8¹ê +€!´oÙŠ;åoÞQ +ŸiD§—¬ +ð–kH³e`QIGt—?8‰±eXXÒHPqÂëö%®¬\Õ½b~ù™QVÉi3*2¾ß àh™žÞœÑßotz À¼{źøØS|Üwtì‰ö×_? +Ð7>þxÔÿDÔ pð „@G4~âv~/<þ}âZ\'p4ª gK‰îÇÃÜOø »Wݤ{õ÷Ù¢´víUó2ÕlTA} :[Xº|Ñr½ +,X›Àÿ¶g‹äyS¾Ä’?o‘/ ¥I€°‰™‰Fà²*½Ggj”«þ,ÀeU ìÉáDÿ!ð*}Nôm¤àX`= .'˜”ÃØ»¬¢Årž¼p˜ÑàeÝ¿ß ÷ ™Ñ€xeb«È9d!D£zJ1]½mGâõô©a¾¾}l|ü,qžÈ2Ÿ(wI÷¯jï©Ûxã¶|“%~œéûË7 JW_à€Ø©o€È,_‘¡ÍAñ/’c!Ow_ÑDàm$lGXŸ6qðìKk€+lAË£*žu9Z*€lÕ6€˜Ë4—ˆÖÌØ< ì/{eMwÁ[ôÒõˆÖ8`óro-UûÂM›ð⊙©Pn$üò³@Ç(B”í5UÀ÷›eb•¡Û+³JðT˜ p]u÷ððɧŸzêäØÅ¸ôêðGTo¸Ø=rjìt}üÌ¡º5>=:|b_Tõ•{¾@ðiÜ#_mœDÀ¨^îÐJzáS98Üjr¯¨VkòÚŒ@gÇ;M  + B‹Ûåhɲ¬$ú›ÀHþ%Kò…"êp‹«iW¹%Íj˜j H= ®WŽ ¸¬J„ð¼"ìgIcC•ÝdŒü¶›g(Â,&cþâR¡°¥x¤²^#@0VÁ¨ªúJÉ·íÄZÏØ0ÔÜ©±±³Pp´ûi7€ºÕÛV¯ØùÍ##_?räu døÆsCCC¾B+ñ•/ñð{‘­+æs‰Šy²\gÔ³×/Õ …–¨þs¼AtÊÅ…ÚSV€0Ü€ú~6ªf§Ù8WX°Sà-ÖHBß`·ŠRBqN»l1N„È÷¥Á·'ažEÿbk ,HÃ/? |g?ÇTð/v›•PBLÔ²;×eî~’ƒÿOŽŽ¶hwd†LO_üì©ÑѱñµÕ_xá…'ãÛù,Àð­ÑW¿xÏ=ä?.…H•›Àap’›×ª/ÝÏí¶w +$*ˆË ó(òSW·•_]½¼Z¢:jêës1ߦäz8è‡ +  à€e°`ñŸ@½b=wœÏw“ù +€´žŒþ¾fH€‘ÙT àènÈjËES"½ Ä(ö° Àòk +³HÏno;bòè%ßZÒGÝîR*A`6pñÍ2}À‡ƒw=rôá‡å{‚øÌ0âµø.°`¾ûKÀ}_Òw!€^\iSë;p1¶Žëållë+·€ì&´ŠD"ª¸>}ÐÔ"ЪV9h2À¡À3[UÀr{`Ù‚ Lx~˜ˆb ó € ’Ÿ%M*'YNc¸rWåæÿP=}j+°Àå5Çut|fo"ñÜš«K;ÏÛyþ Äzý8Ú|jr*`ìÔ)TÆù1€M˜V¬ܺ}ëÖ£âÿ‘׿¹&æ·Xââ•X]ÿ<Ø/€M¨Û¾b9’ûˤ·Êµø€  kMµ8`Èvº*ó“?²U€lmhðq¡@ æ-YÖÿ5s|&keŠFF*#Y+Çe ˜,lRf @TFÀ/? ¦4¾ë ‹&@7—ûaò”˜ rë12{ø©õõ\¼x‘¬Ç´¾oü,$Àè©uQ߆ãÑ:Y€L߸6âs;z-x‡çq$ .•RNópd·ÂÅüÜ (ÈÁÝœ¬]Õ‚î®VH}3*‡ŽÌG5еŠm€• +À:\èíÆôéVÙ*(€Ê^€iù϶{–5ö< ™Ie›™£Äy@Àç6A.­Á~6*ôÙ0±„rßªŽ¸w/Geï(•wüö¹óçÏaåøÅq%%'¤: U˜Ø°iËàv>¼fûîÝÛ¼Qu+žòûQ€ €ýoˆWoY±|¡ZÈpD¸"½³se:£U,ú™ ]òñÕÁ|·;& TÿfŒ.¶ÀL²“Ýìög/@xÀ{Ô&¨å¥[õÎrŒ6ÇÐêÊØš›$‚ ~D¯v{œJ£?iȰì¾7À‡ÉÀL€ï9 Ø@¢ýg€ï;&¹Ï×-LÄqÞ<&Cû¯½óØð±}zAßO/rDŸ>?GïèU™7ÇOŒEëGPCà#ÁÇ¢WFëîÜ @ww÷»X$—0Òyín*pl•®n­Ã&÷kSQZ¡ØVÑÏ6hæ4f>Ù·A¨°T´n@ü¤Xþ' +`QÝTse@JH@X>š +Qâ¨@€DHX†b&Ó–ÈzÆr¹röCðEÖ}ÚŸ;$¨P(NW¶÷¾û6€ÒКlðü_/båÍ‹ã'dˆ“RÐ|¶Êø¯iÅîí ÷òí+V,[qôá×ÖÿqüÕûï‘øg-€àßxdK«$ÀÊ@Å8í@W´Š‰€r_ä7€ {% `ü·¦@*òDtá¤9[­"¹CûŸ)>Ú̓¾Sù™p‰pà™ À¨·”±¶xׂ[µLŒÛ<úC# nåœKÙ€€+æh/³šß¹Æ£Ij…ë +›Jˆ©p-ОYÛ‰ÓÖßzàë³0(öùЧÖ]9úÔɧë3ÇFNœ|!º•S£|1à­Qæ{ÃÇÀÿ[!ó¼О g-JÂf»7x~òø½Ñ º¨p2(¨ÏîNÔ¨:ôšJË„f, + f€À ð*Iû:LÓB +Àž¨ZÈuɸ0M?%@Û<{œ­€§]™ë’,å,ÈO­1“ii~Òßß ,¨ëÙ™ö[_º!·wuܶþ³›…¡¡¡;/\ è»xqü”ñ_¯t`2ž»G¨ìßLwÅŠíuà?–ïY6xô諯YXþìVõg@†`/®òŸvo\ƒt`ûž³ž&@+˜£ÎUŒ|KxÙ ~²Š5ùÊe\°‡ÙwL@ÜÍciA < ¨gjr¨·%mµ5ô2 ]¼ °‰B €4@\2RýÇèõQ€” +R +é-Mœm/ƒecJÿr; Š}süò³À¢Æã§Œ SœÌoCK»! Jfp“›0ûé&ãÓD&êÙðÌó÷xþî(ºH`oÎÜùÔ#Q=}£ãuÈH¨TŽŽŒŒdNŸ¹sßuRê™+íi@Þ3¨ª@O2Ûd 0°Šð͘’Ul4Ð ƒœ·¥a +æ@%(³ß„6l%…iÊ€Æd'µ°™ýÅžµ7Y}“Cä#å¦$;‰ïÉ’Œ—09@Ãa€+<œ»ÿ Pb8ºûs{LhJ;†vì(ÖÀûjpgMè­.²£ã÷ÇuKÖläã›–D™%ƒË–-{ϲeGŽ=ú:AæÏÐC@À—øEvdª<´}ëà| ýÔý]+ƒ-P/g .™4ˆüàCŽV¦F*’iúÇÕàÿ¡@%©X²ÊË!{Sƒü¿6ºëé{ù²¸»£ÞÌ£!k†?µ>Ó›éCn:5~1»á,?0vjlôåÌÿqúGÇÀÿëx†®ÞîîUïÒ+Ápy)DŒÝ©…è¾l½¼×à;@ØK€¡4y‘¤·rHÆå“å?äÀiÚH’˜Ã¨ô±œj¦ëkLLh`å~ZiÔ@Å)Í9 §àžË”ålNü–÷`KŠX&Û ‹1ŸˆNŠNFºb¸ïôÅq²£?  u1Ø ù¿iÓ²e[)h¾zø~•ü,ÿÕÐÇóÙ>4¸<Í—@´“ø¢?t@wgDÌ.?˜^.ƒð¤ÚþüÑ,À“°y{^4Ï$@T]³X½Éû`4Àºaê/ùÙ`ç? @Q‚Œ:*È/¹JqÜãžIcŸ *@»ÊŒ° @ÀÙ*øågA0ŒŠNa<¾:ñtN's¦š/öÄY×™ +4íÕ÷àSâ]™?Ø_…4:<<2ÈOÅ€½,ùI~Ä;küTÒ€]´ÆZ"ø3; Ìš®Þ@C_š+Ѽªjr] + žÿÂhA­ç˜áKóß_‚D`[¦§C9 ”PfÌ›@™Ñ`Ô7ö«-³RøÕg"°8âÒÄ–ÅZâú$Å÷†©ŒÊZ5O>%h2ëo¹ãÀ{VE÷Ü’ÙõÃ<5<2:~:óØØøUQuÏñGÇ/>½³óR;zÆ Ï>óÈdîöGôÃÍYÌpk‘£• +p‹£|³ +³ :±-€J @;ì ¯©RH…øO› ^(Ïy~~Ò2´PüÝ`9mÀôo†(·´ðõ|H@ùI@¢¯OÏld+€ò›™Ñž@ +ÂÌ8Ê>Õl÷þâFÛ=iÈ”¢dâ7£™+ ®Xñ¿½º¹Ÿ‰oçP ƒfFØr{¦áçþôÆ{Úß%À¸ëVl¦Ø´uÏÑ£üÈý÷ƒ÷*þ9ÓÄQéÈ‘Ý[[çG™š˜Ÿg$ùñì`šÓñTèb#Àª.üp´´,Œ“p-,ÿ#5ª ÀŸ$ãù8 _ô€3^€˜§¤#Ø/ËáÀz¼·T€C?<²Î–Ú’V\‰ú·è¯P$Œí€^ +ª¡@6ûÕg"†8NÈ5úËoárýÂ8!îб‰³ÿ¸ TÙïEýTÐ=wÜrËöè–{2}ãß‹NQ8‚ÿOœßm,i´¹iäJ”ÓQ?wàŽÞöUJd5`âÅu‹¡ + Ûñ¥ùË>úµ>B ¶Œ`Ò¾»kë‘0f‚ŒÂÓHp-@§7„6–üŽE‹–ªº?#jìY;˜ €–––fÀ\ž"´b@}ÎE¯  Ü¶Ÿõ{X®*'"»%9Ž­P¯°Tâ^ý§PÌ |"š_H·B¼uÛöA”ã+–#’>÷ÌžþÅG”Ù-@ü{û¼ñÆÿðÆÏÞ¸ðÚŽKÍà;âõšmƒ›–­`% @â{€¸åÓ8ÑÎ#{öl\ލ¬nó©üIv3|)('Øì‰ ú›‡üOkeç¨ÿ³€½µÖ¦Wt",tr@0±”d˜Õ°QgzÌ{ü3A±ôšàŠ% +fHP.¤¬ Vf~àñSÆ„U ò…&[(ùã²p…ë'š ü+×gâ;þ =ú³/µg ÿ×f/‚ÿ£§ã'Æ 6Ô?X:cæÑêõ0T•×E^ßqÇÞ½½ŸæÔØ-¨4ü†ý¶¸þ4lËDøîö“‹Uä-)ÔøP03œå;T)ÙàðÓ;Xü7±/+Z€µÀq`¤Ÿ-|; ›ÔX`ä3€9e޼•æ™Ê¬³&û_’†(„ÌÑ®A5| +xpó ø»l Às<üàÏúeØØ°nßäÿÈÉ“§žcz¼vþµó`Þ¸pþÜùs­‹˜+¼mÅŠÍGŽ­‹3½_–ú'ýoùôµ²1™ ÀC^(4 š)ûí+¹ÂÊò+Á,1+û½ ÀéÏrÌרh¨¢@‘jóc€ »zrVÞ'€ÞPC- Ý-]çöÚ@ ¤‡Úè2¢“`܇øwÖ38$ûíᘔôV±L 6 üF ¿ú,`\H·N‹.ƒƒÄ5Öˆ$½p4fwÐÛ{mï§?ͽ~pxoôæøøÙ±¸5Gèÿá§NŽœÚPÏws_ÈG§Ÿ«ï~jääȉLfûƒqÇ{¯½¶—/ÿõªN» \^Ñn— Û„˜Wà½2:+ë+úSp|3,@HÎñ>1´™ù¥z•A,r Géå¿ãg.#ŸW>À?4+Rm<¼>WŸËÕÏ€æ¾ÀÚ Tçd‘£e9þý¨áÃgª&ÙÎ4(Œ„+€ôNü"“¬vTUX±fó¦ñ›e^|àyh€çðývÆœb¹sݱGFF7È$€÷þŸ?nçΡ5­kVóí?H÷ÕGŽ9G™ßõÜòéÞv„Yk¢~û–­[woß2ˆ“-âG­ܗ è‚cU€Jð6½î3¬@Äœ¢jµr®­NÆ$½ð7V¶dkÔp @#zòÞ ÀX1Ï…’…~:Á +Øã@êdzØ6YQù”¢º¬T-6£æOÏÙùõ¾…$¢0'«td;1ë#†X4aò`Û„·_pgP Ž€ïßOô(ÀÙ±g3ûXþŸÙOŽõ7\½¦uÛŽ(Z;rº¯á{£#£Wdêß±e[Ô¾¦Ã €jÞˆK +vÃîZ–t¸ Ü—Ýo +Ü»(Îþ¯ìZ©6*Ò^uËõ(BíäàgôÊ@íÞÁn›YåWH#ù±!L3 Ç +€+€¤ ™Žg‚âFA¨ 0×Y– ™L9»Á…ýðPæSS˲éÕ-_ѺbéŠð7"žþû‹?xþþû¼{ Édt{¼zçùó‚ÿ¿½sè#¥ÖÖÒÐÎ?ÕwÃclÙÎëåë?<õÔÒˆÕÈ¿epÓŠ%QTžÖýã²p§6]|tÀL€²±åb-Y­5tÌ++€Z€R?õV`«˜  ¨¯û/IèU-H>£‰¤`Ô3I,–Ùˆ– PTs6e ­Ž°6+¦ì'ú» €QS@~õY éd”`Z©¿Î†k°¼¦a¥V‘ ÇLÆTLœ/rÊÞ„ôåbúW­2pË-ï®»·ºo|œƒÇOõgž«¿û…“'GF^:u<3Ô:4¯Ù–í«~üÉÎøÙ;âm[nÌÀôò¡ÿ ·‚_h`&Ý åÉ +0H7«uaع ¹óÖ*VVvñDe?BM‚²¼—©ø9óÆr~Ѽö™ïd[¿6 ™ƒ`á?cùÍ--t¦¡€f$”ß|‰º=‰½Ÿ“À`V¶`h(¸âVÀ ŒB ,Ö,_ºtÙ2TV¬hE|ý?€xàû¿tßW‘ì¹<¤þð‹–Ï=;Þ7´ãÜù;Q¥ã;Ävî|ã\‘ÛUä#Å” :"nïÙ¸£Ä„?¸{Ë PŠ¢U¼Kð8êÕ>K„4t‹b?r¯å]‡€5¡PÍ©6€šz +̬„F@ÀLý¨:ÌÔdÛôm0¾®Í 0 &Fó€ydñHK”˜G;ŒVäp‹´c¾Ã¯> ¨ÿ[˜ùák‚Ö@¡ ŠF­IhŒÑdô_«šxì}¼òHŸnîyæÊ(º86~Š£ý.VgúGOj<ÐèñÌÎÂ…|Ýàî¸{xøb?Î=ûÂÊÌàöÿ„@oZT´(ÀîÍá;9üvÅ,`ú3¾Ðcb(:»»Qà…:bä/ö>É +ttRXÿÓ\ €ømc‚Ê`áeìLKxËmà¿îb&4·Ø×ÁøJä75*sŒÆü±^ ?Mƒs»2)ï1öÃh‹~‡þŸÑ´³`°•Cú@ÿ›VàO~î0ÀáÃ÷þA1Åo¼ºgëÎÿÿúáo¢°Û× í„þß1 põà¶CçÏï\r²Åx”i.mûÓóÀƒžk†:8ÊÀà¶(ªf“+£œ‘½rUwÇÊUö4à„ P;€lóŒ€Ìx ®¬€m6PV€!@SÀ6 +ÀXÀÜ é¯†OzR“+¨ar¹Î‘[ˆ|L4Ç–¯xä–EQ,þMXà-´02§,äDœb¯ÓªZ3ö3?\Ôh!Ñ3‚Ó” +@Ití§{¯Ý»wï=_}&zn|”ô{‡>rq|”o ã(ò(³}Ó‘íñ±“ãë£åG¢»Ÿ{&Z>¸&jo×wº×º°s àÿ’$×½úPöúÿˆû…%3~dW--€% úi‡cJŸr*ñ¢¾ºöDò0;õez«¼ @ôgÀŒ3ªzPcÀà€ýlü“‘Ãú¹D6ÓV~bÇ“ƒJ 7ãYÄfÑöÁÖåà?$À¦Áíø“pßý÷Ýÿý?xñûXºù£7¿úú?ûÙ…W‡k¾ñð7þóÔž®Y ꥡҶì­CÛÎÕID™%«KkΟúí;ÏÛ±cè5¾1dçC»·5òSÁˆ¢¿£»Ü×Y2ìAÅd96ø`mú4Èfçg«aª±2¿,GCYé§´ç[f. zqì2 €4ÙÆ"â½_ƒ´Ôüfç?VýþÒÿŸŽ£òìÎ}rÞØm„Ÿ Õ@ dhσ§¹¾™´O `mÈlÿšÈP™,eؾ‡€ýûÙ€ ÖÕ\nh&`öÓ02?0k>|ÔñÛ±b¹¦+6o>‚ÿø+þo/ö€(oÜ ¼ñÆÏþéŸ.À¼nûú׿ñ¯ßØŽRy5ßB\½¹´ÙlÁÐ…óKh¢˜Ÿ å"ùâÜ9d¢Õ섹×ðKð›í¯Ý°Ð×t¦ú²RPC`¢´y›®è_Öj¨TWeÈuxä–Q«hlC6{ Úß!ý @rÓþ‹4ÇEvÖr6 #@ÀD¨qq­tñäá +þ¨RÛ"(€ ˜<¿úÌ@R²÷P‡&“-’5_ò”bƒå{ûÍ Ò_]6MÝ $‚€¸å–[îçÀÑÑog6ðÁàê+Žã‡Žl¹éH]ÝöÝÛ21ljîº÷¹háP„¼È4MÚŒˆ¸2aÿR°{N¼¶ÔÆŠ6…ƒ8éËžàê€oT0=êËJ8ùkXÍW=¿fAª¬Ÿ5 k ¬€·ÉK{9åUÌõõͰÊU0VÞ €äÈPÈrôXè=0 Ê· X:Ÿ¹ÍÊ9û`?ÌGÇi[BùdÝҥ˷Á ®`#ýçþû‹ÏÃü÷?ÃÿÝ~t×®›nºéè?ýÓ?Cjü¿þú×¾öµo<¸ª}Ìy©õêÖRë8àøàû††ÞØ!Éd‹|¨hhM‰df+áPeÈv`[©š‹ €XÕuÖi”*\‚m3ú ˆñ^°®Ü:E€% öl+÷ßHñ«^ %7Λ7úàM€^Û Û,ÿûøš,µÚM6€µ™°Õ$‚âž` {ù4 "‰ £e‚øŸHÕüê3C1BS©³Ìœ’ÙÝó»¼òk=xÊhw˜LRHœôì°6€½·Üó•êGN Ÿ8ñòñLÿ‰‘áá;ï슎¿¼>Þ¾uûà–Á‡²…Á#qTxn{]û½Ïð A¸sdPáúvÓú“ÆG†º·ØàÿÇ,ÍÏÝË+™L‘/ü’ÏâÂV¸ƒ\m ʾ4Œý)`Õ9> °£5ñ͵Ø0™ŠJLàð^P›í€ûå6ä*øÄòdÔ™–j$@ÆÓà d¢° eRpéÒÁíGŽl_±iÅ þã÷_|ñîÿ/6GQáæ›wí¾y×Í7½úOÿ´Iñ?¾õõ¯}øO¾þ­ÿ'[ÜÌP  Q ž¿Ðc F)¼cç¾ Û ¾&°yÛЃkØd%²ï4 +À뵉°ê ³–4D–­XVa€ëjꟗEm ¡ü%—þ„†iJl¤Í-ö@À£¦‹p& zt?•Â~oðÊé’*£P`• +l-®0öÏu$ ›SøcÄ8E kZ‚ÿF¦ålPÙo·h˸š¦ÆXŸ¸æ!â^X€W®}òرFë>vçw¼staaçVp~Åàö jýuƒ­Ë–®X±vçuQß±;÷í{ä.¸·âÏ mDUsh[´ºî_.[¾l)Gž^g– í£½*ÿ§TÞ”{'AG”M€QÙµ +h '“KÇA¿ýÒç “3¿ŒK1Ò÷t&zl.‡ZQãÀøÏ'²Ž²3›÷‘™±T؈ò¦15ÕšÌ#± e<ªü`±ËÖ×¥—í|ðêd›¶Ãàîðýàÿ=øëu»Ù@ç¦×ÿ/‹ùà×?ø_ÿÀCÿc#Ÿ%Z£†þCC¿¹í×x¾7/^¼xÜŒöŽsA4*)ƒ€)ã½[Ìf,OÈÊÊb®ÕÊ9›'Àj–ö¡¤gƒm€ÂçÍãΆKg?@ù/ n€þ-=ýý=-Öãi‚‰°ê?‚„›ˆ¯vÀr òhȦ¦ÔÝMö úSÖàWŸŠ’´S@™Xàæ›^æWLLˆ@{·Žw—¿cá|œ9Þ·om´vß­ûn½õ‘ï<öuQÔêÊ|áòš%|­äR`ÙòB&³fÅòw¼ci¤\§ € ØF +èV-ïБG(û;F×H©°âõ¥ÄðütÍk+epÕN ojR2™˜+Äm9=6—C[ø8ÀƾÈmª(cÑ _qp/Lå'·¸ðeP +¨\rãd>å?¨¯™é¹pþ’Õ«wìl]Ѻÿ÷@ÿûïÙ‹?¿u×M´ÄÑÿ‰]ßO@¼ÿ×ÿó·öS?”ÎïÇÙà74´é?z‘|¾ÙÏ™(OûP*æ+NÛÍ”çQV1‘ûš0˼‹Ž»ÿ,X`,y¥Ÿ0ö»QÐiûxÔÖ‡U…ŒÁ[Cb˜ ö¹…¾Æ2c—ÑÌ(ç ì@YÖßWTk ¶ª€{Š +/èB`JÌÍØqðà eS€, (' òV8•K(·a‰…E:0ß}—ï­×,‰®ê‹úø¥ }û¾óøñ«¢ª¥K£knû½žwAUïàØ€ÈÊÿ¥KQ«ä+zºù6žpkögüVm;›á–S€û[Oñ†âõa+×íûìÉWÚ+ ³M +'ç+À§~çøs€Ú ö™ÝŒÿ,aXÚ o!/)L¥ —â7K~e3lu{ÀÝ´ÔZ‹XRŽ]üÈs€°Úº µLÀMoüvEÑÿ~Lxÿûý¡?ô¯Ùè´ñ CCï[3´óüP3 BÏÅ‹c£§ÆÇ/>Þ§ilÚQ ôÏô|æ‹øùøø¹±^n°‘e¢Ä-ç®) ¢Ží‚n\°V>úÀu[¡ƒ™ª8d .Å`u€bK _ÛBþ3’E|7²ýj$Ü_ìÓ8LýRi¨ap`E@šÞ’à±ÄE’y”…CžÖ¡rËÎÄ¥ïZ ¥@PižL¶þ³\_º¦uöU÷}{$À¾ã?.é¹í¶î•28/ ,ÀŠBæ_ÿ—âx½¥säE*7òi] ¿õÉàQ€ål_©.]}1e—'¶Cð:í¸hMÅààÁò†´Çf_!’6ã?5 +sÔÎ÷³ Q/?˜¹ÒYÌøÏŒ7 0Š×€¾4:‰ÔLf=[ø†Àó{øñV €›¶ö×YøËüú¯øÃòÍhˆž çYüok–žxó'§NÒ ÄQ`„e-ò>ûÿèþø?‹³ðƒm ÿ§iLp"sÅK}ÿÊÚ€îÈfóµ¹\[n^_ &›ð«Íåù57‚1ñ‘Âf8Å>Ûhšñ±Ñßê°s,p?A¹‰Ú?Š‘~ñ™áüÀ2÷Ë@Jˆ Z$§Ü3aÉ'Ctwâ—œ©Èë5Ë£•}™É +à6)žtþÒå0P+h–£.ª.¨¾Émº!-ÉV»· ÐmëáÚI“¯B ]ÂØÍ°€òfEÒ§æªèò¹ö,\èÅûà€Ìl"? ~JG6,ó%_Èê `ž£Ì¤/C92˰ˆ5 â9v—“Åcü܇¿‚•ŸÝ¼û&çÿÍ?[’ÉÔý† þíëßøæêööö+Q (-qÛ?6z’à",êµqfãùË_þŠ€êɽR.úÝM# I긴ž«Ý7øŸËæsMM9–ø5b¾©­ßs.æø¥§ðFw}Þ‘–ðcg‡ñߪý¥úzý0Œj—`ú0­”jReɃ,ŸB +H¤ ‹~ü¸ô‹Ï D‡O¢ÿdêÛ*.–ÊæžÜ|ZM-Í3+”Î}[¢ª†eW—ÕgHh˜¢ÐžcGu½«»»··—/¥h_%ùo +`U¯ÎI)ÞŽÝ–ÝÚ`pÒ èàîªKED{zÛšüU3Óƒœ¯˜P²/¸ln“³{hCaXÍ”üGV‚”ï+ÚƒÀ4 pddˆý©Ì}:N-€((^v¨7Ä¥;Ï»±P:Ç‚|öùýXüãÏ^u p†a…¸oø?ùÚ7¾ñoýo<Çj¤:“Š- +§GO޲pñ§ÿŸl€úÿãÿøå/|ñËPŸÇi9p +Ì <ßX¾ + +Ù=ˆœ”ÈÖÔë‰mñ¿©)ßVù›ðË·5Að¥Î0Ô6w QÞ 0Ð×?Г×ÛAÆ5¿¥?Òˆ«¤zý!‰L ²S½RþÓæk"¬ú;,F :,AÙtXÿ?~)” +Ò,2¸w*0Ô/–Ú4Rч"X(Ã`ì·~°~¯£8¯Âþ |7Žio·Ö:;r-áy`ä7ä3Î0ûõF@™d´J r^ü§‡ÛÙ#ÅÃXKÃãÛP(ì*iä~©¦"j¹R½qÇ_f£¨çÐü ñá¯}íë_û_¯C´¿8z%ÿÉG\·Ÿc@Ê|ìÿý/üþïÿÑç?ÛLà—­ÄL +Àm2Vƒàö3†2Krq±ÐV,@ œÙÛòyŽý. ×7çŠÅ6H'üŠE„ðýލ4ú¡³#ÏOƒ…7õo,û©ð­ÕóX¾‚4BâÐ*`)ƒ`Ú7s"ü—(‹Á¹/øÅg†Œ†s ;‹\¨ å]fi’A“Ö  „í¬n ·lÇ–(J>È Nw‘Ë€6Ðòð›.0 Øè +K?¿²€d +V¤Ü¨³¥ €]]Ë©¡íó#(šzßqvø•ð7}êu ˜í•඘åWS“*âgžrÍü=?ì€?+þÁx”è0jä9M‚Ê@’Ëš u2k¦!ÎttÅ…B£v×´¶ ÎêgßÚ†‰½ä7~+áÿ¿ÅâÃÿ–Í€D¤ÄããgÏžÕë_û­Oœ½òÿôÍ7ß<ýèz¤á§YüÓ|-c;ÿôIDATæ?Û“ña@“0­`€[oLñŸ Jíâ/F!ÏÖ½Åyÿ|_¾Ç +þ%Í0m?SP,¢Zß’KPjäÔ3«ú=&ÝòÓ¡E†i†1¢ Û ËK´2a +w ~ñ™á‡iÂÊ/'p"§ýX‡¸ÂPmÓšBª+Á#n ©¨T¯lP=ÀvQ…ŸÑß‚ÌÐj´wõ*¸°» ÿ,Ew^7µ:©¿à ›Âzî:~ìˆ +òiÛ‹PÀOQâOüùPà¹Lõ6ꀯ¦•™¥P@‰®F °ègOç1l§+¾³Ä‘‰˜Ší€¥KeJ­­Y¤ú›ãc£'Ož~ó‰þµ©Žò÷ÿ+ªþðŸ|ýë_ÿÖT¡ŽƒþgÏò¥/cÏ"’Þyû†žz~"Ø’/þ}Z€Ïüáö€ç—®1Ê ŽÜJP™¬sŸˆ!þ«Y˯ÏÅœêÀöÕØ>³Á~Üìp À¹_ïl§¦™E¼‹è4¸Pÿpìý–Áü*ˆbËOˆ"J¢+ÿüâ3C‡ +~¾0qÆ/ädÑÀ§TÄ¥Âͱ¦I + uú&d8¸¬mmL,UEì tPä}X¦Û`(\¬âux<ªx©Ûå•Ëk“¡; °µt ÀÜ“¼â@ƒÑ>øOf'U‚™~—¤ZZúЦ($hHúVëØÊ×£¬±þ&ËqÜd&‚-Œt„ÓÙ… +caø5@‘v|ü¬Úòϰÿôã×­µ8[ñëlÿ7  aˆ¤˜å?ªý£¨Œ÷3Ã)˜Úe ~ÿÓ¿÷n(€Pᮎ Á&®¤Î?Ù¬Þ +„š}¾ uf}Òà—]Ú°–/®Îi…Õ€<|m~èì0þ«iÑ?€Ô±g0ÈhF.G+k ˜ cè•`2l@Ùš½M +`"H¡)RYÚ5U4k—°’V¾_­xÊÐÛYÀ,‹{’ÿfTVÆ)„ãÔ¼ÿÕ¯ëàUµ–„L€nKqk·j:WõJ(ßu.à1iXÛ¿\`>~Þ8¤9>ãÔì#­`€L¦ @Þs  Gy91]Ô+‚,È<˜~ X¼SGg¼tÑRX€Ö«[Y§OŒÀ`;;~ +Â~lìô¨:Íÿ ©Ï@Ð÷×a¾õ­ÿ ‘{pjô‡##?<…J?£É–€ø‚øô§QxË +€]ÿ*a,m&c^΀Æ\6óó‹¬éçPÓgçˆÿb¾±±Ißx%üÐÙÁn¾¥%´Ê(QýœçtÅ|`½?™ ˜U&<7Y  Hê…¿àÜüâ3Ã’Â?qù¥ÑÀ'ΆTˆ{lEZEо&­`FÒ¨`G‘ÎWm–^€WÿC _`éßëmA¬êÒiuw3ÁÀÛxåòÚ°Ó!t}²sf2Ùºì/bHzÒÎ|Ñÿ’æøLS}½Þ@ùχ<«û‘³@ý¾>Tëž“õ¯pÀ€w(Ÿ)Wr ;Ð6ØÓhÜ?ü¤ÊXÛ¾†˜ +€3bêø™“OToþI}ÜùäK§FÇùz°o~ëß~àÃÀŸˆÿ3%NŸ:ÅÀK/ýð¥Žü¨9¦gýÝßæ®{ï=|øù¯`õóÖ ð*€¸ã#¼°¶3ü0翜0aN(¤2´k˜–P<Âí4á¾É&ÎŽpö°I»ë_ Ñ«¥ç?ƒà‰ðh÷$`"tSòswν Æwü8Çü…|mÀB½øÒlÇùÏå§wò%S4RÊnf\ ËÁEÖâ€`NÈc€2ö´µòV¹¯úŒ3HU P( Úê/ž}ì?u–6àÔÉ— Nž:ȸñ[ßøÚ¿ý€Æ³þ +Àˆ¡u/ý襱S§F~øC˜€ŽìC¢½ø“_<üÂO~ò“Çím{̰ +ð.”—¦ Ð@ aI3Ù&¶ñØ#ÅzòŸ#ÿç òù\®P„` G +6ù¡³# ˜ŒÁ¥Ó±n?F{°Ú˜ÞC›tËâ¿RàŸ~ Àd¤³°¨àg‡Lò!œu’ô*|!€SÅImv_yâ>æ‘.w°ätû[Ø€{i=VpøèêW>/Š~î`Ç9ìUŸzɧÍ.îç–ísùÕÛKY`yÀØÏZ&-Ÿ3A(³ŸÉ~óÊ`ÌbÊy!ãYQÅ ¤3ÚÀr_e—´˜©å?ÄâîñQ~º}tœÍzP/½pêÌZÔþÇ·¾ÆÇ>øáÝ4ßxøa>ú=rŠ8 òSŒCŠ=seÿ‹Ï?ÿô¡C‡@à¡úOþæ³0Wò¢S`Zpð/0m`^ ?¤!û»¸@ý¯‘üÃA T„(@Õ IÝs7`?l£”)âQiTg›/Iü8“óZ‡F`ñY™ItåCM€˜ïð‹Ï ?N%þD0÷'ù?›+T¹–‚k'Ð^~´<¾já>ÙQäÂNŒ)ÙË×´b»Ùš¢ßŽ1¿ €¥·öÐ’Ó Ð‘ü”ÚNg'£Ë¯E]’°³8.³rŸo½l>-€{®˜ª´Ÿêg +€ï4@ºƒýÌ=ÞÈw [™ À’ !÷)ûYÆ£õð,šF¢D>øôO#Æuö‰±3c¨ýCœbÛ>`u€ÿü­¯¡ðAÕh¶!lí)˜ ‰S/¼Äo>"ÕöÂ~¿ûï;t_{_Kúá–ÿðÙw³¹§“ﯲæG›„iD?©ÏåÞРqŠ‚RK¸7»˜ÍþÐÿd7¸®¢_f ‘õþ6V–`›Œ@>¯7ÒÏ ,þi•e¨¼”ŒZ‹^øËm/ñ Üç‚©gðüäl+çÊ + müâ3ƒÇ€üSÑß²½!ÐÀ#-Á„ÕJØ)Â29=Ì0<Ò‚‚ ]m“/ÌïÎÜÙN¤%½nZtp{¶ØbZ„3h¡Ê1èuñ¾ãœáÇ–‡N`¾šøç€©é>ù§‘€R} hÝfè °ú(kø”ùÈ“!§ÊjX ‹òÀr.LΓû«8StrD þ"Ûz³§ÇÇl$Ï©QLfF/bËšo@¼Ÿ¯{è!ÖêÍ/_56þ„?ô÷¿Ó&TÈÿ‡ëò&õÿ©—ØVøû^z\ÙZ)×»÷Àûžÿï}qæÝ_¼ç _øüFlè^å’¿üFP³Ó´x@K’Ÿ“e¦°&¾óK¯ÿ¬Ígóµ¹B¾E{SS{É}ö¹Åͬ°  )ßS°˜^š&LÄ«%ˆ3ú¸þýf4Â÷äÉѱ±³õQ´ü‡øà×aXk8}êŠÌ/þ°?Z‹ÜüØã·£ÔwIЏƒ†ÛÿÅÏ|>žeº»É}Îä½-M '³`¨¸HªLb:b?ßóW Pl,f‹¤2ûøødä>2ŸDâ£jp‰U€Š@û-úë$:¹0ÎÅúW|@9àaœl £H6àíðžóÜ•ê Èd½xñ§ÇGÍœ:5:Öˆ¨[¾âƒüàCòÐ×)z8@%?*\¬Eší‡Õ8;öæ[˜Å±~ñþQ3|—w›°6À•€@ûZ’Ÿ +l0Ðá +€éª“óíßÙ¦b.nl«WùäÛÚÚŠm7Pð³/@c€ ,ûÁþ\Scã%È{7 "éÁÒ¨µR_1]N„ ¸ŽÙWD‹±_À ¥Ó £¾Á¯= t.èe¾§¹ÑÔ®÷1r˜íôY&‹<Êk@ØÇÒfÿÀg³~æh|åÍp¸Lvðõ©cí²XN6šÈÛ¶7ý–×}A 0÷'@ˈõI'|·ÎïYáôžTì@ùÏü&z°ÈÓ?a€0¾P«Ìo4ž·Ø:m%½°¯‡($TiA惘b+þgï½Ï<–Éôèå{Š?ýéOÏŽ¢ˆ=9zê̺$æë +Û>øÐ×WÃN<åÿÑ—Ø +¼tjróÝÏž=ûçgÇ/þtìÔO¬7{‹¤„[µô+ûm63VSÀ—ÊÈåÊš8ýl¾XçšsE0] @²7²ÈoâóÀP”Á››øm0XeØdZ^ÅqˆTkùs#`‹„íªp?‰ƒ—ýr«ËoppÉ9Ìtêÿ9iÕ—‚4%üxì zmé«Égý„d…{V"ìvÁÏNaB`( ¡OtìÒâÿ0x gÂîÃn^9sRüÈû+dðá +V°þ1747[7€LGž©¼§ +€  aÏm‘ðrÆ2f`¯8iz6Ñ)âÞvï³}™ÌûÜÊ„h~sœ€#ý/žVùŸÂ|ÄS|ñ$»þOžAéòä™ Èƒ}ã¬7cãgOýô§ß|¢?ëQzùR(ðÝ©?ILë¦ÀÿŽvp¢Ãžÿµ¤eºrp‡xBÜ×ç³úþ[žOÿóGPlãKŠ7Ð)KˆXŠê€Klh¡ ˆ‡°GTÂ#nóWÉ~î’~ ×1¥¾ ΋¹Î~À¨oðkÏ ) “33£¨Œ$Þ8¸CyMðRûë4‘ß•ÁØ©Ÿƒöo”lf´z’㸰`nÁaJlßàš¸ m¼P¾[ÿçÉ*]zÀ®KWÕ0fœò .i( —ï³€#ùFÀ~þ@sõ’@_ßJçk2 +Xc SÙp?É?À5äTûŒ­Š+Õ!8Ëá@ ›T XÕY„zûsÏeâU¸ïÞ•Œ¯ã/€ÇÀEµ F·Þ¹¡ü>XˆG/Ž[ßßÈø?ÆQÀ+Çþ||üÏÿü%š`ü§oþôMX%AáK;ºC¹o–‡óô + ”þf”g*§ðpU6×V_l.[ØàÇ·ò@zó-«—°I´@@ BŠ«¹Ø™ Ø@MÆÈ$‘á\2ÖõNF‰ÿ¾—Þ X®°!ОLYÀáמüøPþ“Œ_1>$°C•k€G-÷³ãìLL”¡W™—o'ÀM¹¯zd¬½£{wu¢8rtvÚui.Áø­†?(7 ²ß\À„بÎÎ70¹Ì¹ìàçæîsA½}¸è_ò:U‰Ï·Q   ¹,PÄÒr›r ñÙGiOvY# F„k4 玘mzÇŸë‹â;`zž/ŽŠ?á€7ûèo8pß᧸ãÖU!†úÆÇOýð‡4'GN|ñÛpâÿÏOý9û‰ãgÆÇO¿ü„²%²h§Þùff‡×uÐÙYùnÛ(üUôÿ)ðcÚz* U~,Ò›€4Û@ù–ä[80_lÌ·åZ»˜Ø.«›ûûaÔàüýÙ$·`qL\ôå­¤=Võ00@Þ,-+¸/s_ðkÏ 8Y{̶%Àã ¿2|â옰jÐ^„ùìÓi%\zA 1ÔšQð)p"ÞÁoTuuw4 3$@~à•¥`ü–æÞ¤îìÿÁ&ÎýÒ@¦:›ÍäÃg$ª¦©Ì ç?ä4ˆ`c?žÐ0Ûªô… Î*çM—2Ë‘úÖ`Àˆ0\[™Ké§c¥?gÆ<ŸÑÜ{÷ã )øpèÐÊOüô¢†D·¾ð"ï;„ +¬@ï•Œ× gÿœ ø99Ìô:1~úÿ¥?GØ©þˆM‡§Ïž~ùå—û° ©¯´W¾ÐøåUÿàù-í'¹I9Œ¹ +€—÷e‰ª‰ÏÿQ ò(ùRÕ€ë‹Å~†ä–(ìzø±o[_Û%(Z ¶X¬3’ij±ÔD€á)Î+ª±IbÄuL*ÿ½œ†0þË¥#æ;üÚ³A±á[eç¬9AÊ« Ò~‡Žõµ3g] Uа`êÈ‘Ðÿ„;ù{Ì[ä<„Ë`¥l:S +àRbÁïSÿ>ºšÜÃÀwŸ8Ö‘ÉrR  +`² Â{ÿg›œÞ³ƒØ`ÝÌs4=6ô«uÒ@ÁX3†Ó 0Sbe€‡ñåuÊ{Ì –SéXù¯™OscõOñ£¨¿õÀ<ÀçxDÌ~’$sÀ,h °¼+ÎTGOŒAœ|éäÈØËW Þž@¡ÿð#¨ðòYL/?ººQí§ÍÑ3€}ÜÏ? Uÿ1ñíR”,0àK§2~f›³[úÙø×ThS3@“ÞÈ%*mmøs-|9ˆ…¨¢pÉãØ‹g3¢ElLZØOZŸaX±™!Ü¢ö¯¦æ;,ÓüÚ³ÀÏÖ€HíêJW,ž|;— Д¤G8È&Í–, ŒéJÎÿB•pöé„;•èìdÒB·ÀÄ̈0¼Kkð;šv—Zèh_Q€Âˆ\ãÜ»ãšêLULV óæe#ïý¿tPŽÎ ¨èq@¶Ê¨€?¸‹=-üÂù…ýÒ¨ç3K*G"ãqÁA˜ôúÚ”†•ÿŠnVhñ7àOßqàÉgîÇT5€Xè°øO›î»ïàó/>Á Oü€S/]¼Ø„?>~öG?€ +î¸Åz¾çÑ*`‘¤­žÿ~¬¡rÍö³I»X’¤ ”}f²0‰8Röñyítñã?îOƒ +Àª«*€½Ä ÀLÑÀ9›å늪¡Óëx£ÉŸ \'Òª|à—<âl¶~>œÐ®T›R +`V‹œÏ— /ßçv²ÍI/$ÏQ樼¡7öõôû¹ õ€V +@|WÞcÑÄ Jð+•Ø8"½‘ß|]ÞØ²þ®{Ÿ|æÉçŸ9ž£ g'«Ÿ;sˆöÂ܇@Eàé3w3J_9yjü"[ ?5òCL|(hxfàG£§N½ü£}ï{}س÷Ú¸£{ @§¬r+ø?…`Fbéïyäog&›NdI ÿ×Rü7Püsu`1„?6ækt;ýâs€+Kq›uÙV³d{ùû nä n0ÆQ8ÒÿÈæ°[‹"X©‡Ã0:æ­á~-5ÙÆê<ß$ÁÝÔfkª« .øÑY¢äÀÅ}dÏ¥¾`®È5çePþKð ¡,vT¤“ót1 j&äo€@9 À +ØŠyVpèD@æó‡zx¢_F&ÅýúÇžyî¹çÎ<÷“ŸœyþùãQ¦ïâ™±ž>xðÐÁƒj¤ ^xú€u¨ˆÿ‡ž:x9N$€ø‡ ÿÏœ~|-í1Ãuð!(€îµV PE ‚ÿSV þ˜“h ”ÃÌðÞ,‹kQ–cûÅü2ý­ùÏ]VÔA`»°à ÊøªF¯ Áé@zÁL€q…v€¼ +4HúóÖM$êß`9ÞàמpJãˆ%KŸm*{Ä3Åæd(¼JˆÀz>òœÚÃù˜V ²–ô¦â&@ +€¦!ôX¯cwTÖFvCó"1,j³¨›b”ÊÙì|Óâ)‹y~¾’e?ƒkëí}q2ÿj¨a³&Û/ä'Ô.b6ÂȰ€• SªˆT€9"[×Îiâ;Á’‘jì3w#jþädçÃ܆®$f@Vƒö¢¥ÇÆ00 ù6_]f +ؤ¨N¡üÅ`¬0À*q'‰iuìÉá'GùhÐð±cÇðûî˧û5ÊiyÕíú­LïZjý™t!%þd° +@ÖË«\¤]'y3ÊxQU±@½ùü¿L¹.æ‹ûpTpÛÀ—°À¯>;X`@1=@J;«UÔ‡ +?K~¤ ^Bþlã+Š©tôB€” )0æ;üÚ³@çÂ$0N,t2§vž¾¹ '¿\8nšé5¾»½ +ëèœvÒ 3Ý à‰‹_Y¸ÈF5` @–¢zN©Îrµ:±˜†„¯§VG1__ zN˜­Ð—¨^lU 9h†t€ z£ì<õÐ0ŸÍ£ 0J— €dú ÐÙg Xb•6ðË¡ ©Ù5È¥#Œb®‚ -@x±ØÒÂÚ2mÅÄ_œgʨ=žu(óŽ(¾¶·÷ÖÇ»ó‘ÇO£r÷Eðÿ…ѧÉxo” 0pè1ä¼(ºå>ø?vv žïyvÃJ²L¦eý¾G¸R+»{]L²3S+ä*d$Ï<ÊgX@VXnàS²°n¶%}r¿)OÕï½ >@‘ƒƒøˆ–þtýê³£%Ï÷´°¹ÕG]‘Ú©'|€¤ Ùƒô´Á€b¹ ,ÏÛ›ýÚ³Àª8TKr?ÍÎ%[ÀoA!P&|2’í)(! Elp†šþ%œ›k`Æ6lJzÝœ®ŒàÉ€ ó¢zrsxÏæzþêU`€ØŒ©¼¦¨q€­¨àƒçXëkÀ~hþ°ØXÓ"c Qãß–0ÄUÕ,_2yø±Ñz¬)rÁTë… úg‚fE6®å<ó”­çý«À:Ô@–;ï7Y7 ¬H´“,€IF€{¡Š*ý•gSPŒ{¤SþS€uÑtuìí…Øwç#Ï>{æ (€3/޽ð‚Þðkì÷6ÑÿСÑ[ ý0è?Žù̾û ê7\wøß©O@À´wv®U;€oOCw2,H¼‡Y™ ¾Î‰¯ºÀ±¨–UEÙ\Ûõj嘿> ÐV¼á††è¡8¹B‘ODƒ`Ÿ!®%T\×Aõ2Óe|c¹=пÂW‚‰÷4¡à/×Ê/Ÿ«ýeÊ& Ðß#I­ü7:d¦ØQ)á°dAúÈg©€BÛ}—ÎN +}ó§ÁAûžêHnP³YÃäy@–Ç*k«ŒTÔÕ ` T Ÿ½ +@æK$m¹é¯ýàÁ¶ê9T.x.kv,+UhTöWUU]~Ù‚Ëe ܙˆÔÖ°Ob¦‘k–à ¨4SáÿQâÃôôäó=(„¼ê¥.mQ,ö4·`Mu† `:‘ÿ˜GT]Õ÷ö®Û÷Èã¿ü&@ÿ™Î@<ÿ4M€øpðà¡çÁöwÒŒñ« o>¾ÁR+º¢ÿøwÖ­»îN$-OK ÐÐÐÉvß¡¼™‰`ò³ˆ —k ëd7` +~8€:V.®©ÙŒŠe=WÙçÃ1ØˆÑæ|sÌjŸÚ:Û^2×,` ‡É °[… 6¸O—üÞ¯°Ó'€8¦—Nb) Tþ¦ÄûÀ|ÿsbüê³@éY¡ÀÝ2Ó¦ D‡ ´S& =@<Õl5(NÚ²ø§9ïäµ*+þµêàv”úlhÂŽÕp¸cª €§†à#~o¦B˜ €¿ç”Ü~ÚY×2»ZG &¾€MPP(†4@•k( u°"_Â?lékfÀV+Aþw¡ˆ]ÕÅvš +€®^–ÔñºuûŽ?þøã×ãO®g'øÿ”5X#-»GŸÁNw;1~qü̳ý3ÑžxâñÛ¯[wX‹ú>ùßÝ…LÑÞiÛ'Ã2E%,_!ø—V# ¹3¥Øô À|¡(Í_€€@`Ñ +þÕ9=$hBŸ °Æ-Í©ô”<Îi™Ô{€’pó ØÇnØ@ æ% ±F}ƒ_~È +•a‡‡ÉÎaã}Íì¼2Ù\ ³ 2 ro™ö]ùÇi(% Æü>–H®°ªG·åE €¿%_%4@#¹ À 8ýåNVVî“¥óÅ~À6¶‡k¼nO ¶=‘]U€²` +(nx0·°£@<½€Ð °,¸æ„6Ïâ}óg. Yçhpw(Øß4Tø!ɨ6riO  \ +ðÚ-¿/< ¼÷PÿgÙÄ`ùß«Ê:ÒqÆ |0˜÷œ5>ý¹oäÿAáÃO_eP¿øæñ«x8¹þÛÇŽÛwݺuëx*š€^˜rJ`ljð*&Ï¡Œ¦egCu’/•Y²…<_÷Ê}¾ÑšúP Ðà_Ëâ@ŽÝ€¨ ôä l/(à×6—VVÈœÿV×òV@'zÚ@ÂË—Äçê+^ @áoM2•ôO¨¿þ,°«óŠÒy~+f8v,e¢l3’Y‘¡"‚²¹~Jll˜.–¾³'+„fTÜz˜ ¸¦RU†S + Õòõ/ÙyµQŽ\œÏ +AuËbÉVÙ?ýü“OƒòTýø€•ž~á…3g–8 3ÅÓ/|÷Ä÷Ž}ûÛß¾níÚµ(ÿ;aaìÌ–´ß”ðëNÊSá§6fŽ€$Uª¤ì Ôúÿ`wA¯ÝQ@€Æ˜pØ L'?¡&P½ 3HÆ™/`p‚Ó(Tt rkX· +À+¯ö6Kò¿Âõ ~ ³ÀNŽëBðÓ6éz24ŠŠ`2à±:׬?¡Ò‚ÍÃÔ +€°(®DBlzhBK ƒ’6R;(€9= `ÄõÍDˆ›J¦ŽÃO9ΟÜl#‰ žÓ/æbÕ÷y9 ŸÞˆ¶‚Œ—"¨®åþÕö¬ H 4œY§ÆÎ0$#`¨ÿ¹)²XüïéËCȇK7 Ág9¸¹…_£´zDz²¯æ¿„ð°fh!( Œßæà‡}ó-Y¾ +×78ü/$0  òÕtÜAð}û®Ãö¾çž½÷À´ú‰ø¶ðü‹gž³ÓõÇ_>1òÝcßýöuÄ lX`ÿN®ÿSW¬4ñá&–ƒ¨ÒÓGöÈ·äŠßSd[@[ÑÞ²S p0@1¦P(BšÚšh¨ü SÂâ? +‹ã*¨¯É3£?eÎSЄ¦ÙY%è¾ÿQÌUJç¾à÷0 x­=¼+xíîÀB¾l²9½Õ`µp€y©¯ošF@&ØP*8›± ý±¨T,¸“Œ4£½ùâ~ø9ÿ'D˜ :š—¼$±58¡ @ÉMº’îN[lóÅd,ô,±vâîÏcW2Ö¹ =tÔ(haöÈ:ö^°™'c?A>÷TóæÄáRþÄ‹û‚ÈQ `*€§àYdä¡.°-,éé,ö¹j¦¶=—­7[a6€“ÿƒ4\ÿwõ†òŸ@’»õ:Tªï:Hú‹ñ”‰ 8pàн/<÷"[.‡©ç;/?þ½ï‚ýß}'‹³rˆ‘•ÿLÓ,€_µ(!˜›lÅ` +€§³…¥ &ßœ/r|/Š|j|þPûõÛ¨öÛÚ¼ +Ф&{DȤ€ÝÂT  N Ž¡À¹ì¥@€Æûˆv ÙÝÑ:w¶¥£¢pb7à[5p€[Ó¥ôƒÍÔ„)PŸgžQ…‘íz¬,?°$›O@ô×’>yÃ8ê¶DLßÀaÞêà‰ízž´r¨p¢”¨RJ“•^¹'ÙÙˆhÜTÓ.×€™SR¬8·y0ΫÆB„18œºF»Ú©e.Ò±$i×Ëø™À'Åð9–gÕqIu®cÁuÜwÚð%ön€ˆÇÖdà‡E€—äç¯ÖÜ\ßLëÀ ÿŽÒxÊ _ç¾}ë°±÷®;î¸Ã‹|@ž;¨ xþÙŸ«/[±lÓR;SÏãO|çÛ×}[£}“JN¦êôð«V€e#å¶kHåL?œ…«ù%ù¦"Ÿÿ£ 5ÐM@¾X¬3 (P{ñçç˜„Š¸‡~c‹* ˆ–¨~€òÛ×öÓËæ@_ùiÜ,÷eÄÖtÓ0êü.fdO<Àaâ¼&/«6@5¢–*ùPìý±J`Ú*bÖ£x<5,9X†cÑÊ ü§É6à¹C³%®B\ø„ä2™È+3Q–­öÙÚZví×ÔCÅ×åêËÍåv¾€œö8*(À:èÉðÖøÁ©æöšÚÅÕ?h›qv/*þçT@¾!ÿ”XˆÀ$¥* þÓB!™@&€O:ŽG#?ò—@!‚] ð¿…'ДšðǦkž2†Uƒ†c×aÿàÀAüœõáÇÚ[ÜûÌs/>†ƒ—.{Ϧ÷lºÜÎtÕ†ã/¿smg×*¾ïÓ^üÁä´t~ÕTrÀX^Rƒ°“ñ|\xLFU¹|3„=ªø¤;TÇüb•ŸX)¨·6© æDi0mg £< ”&Xþ³ˆ5žߢŸJ~{ =ú¥:p㉘¢ ¿Y@ÖïE„ǵ9I!”(ªç£ +Î*$aè6Þ¨&¤ + rØ·5¦@Âìþ• +€©–ôÌ6ÀÚÿ-I=i-‘!%aw‡»'æe5šÔ®ËÕæóìÞ¯ç¾ù6vÿÃÔ4Æ k} ‚ójès °¶&§fA L±š=ï5 ˆí9=J³Sc7œº©ÖÎÃBV\Ì®TúЦHàjêyÖÚPMÀ……@ž@Ä”õÍõ-´yÍ 3Õ€™z[ZúØL(Ãà痣͵ÖÒÒ\ŸKÚ´gß ŒRõÀÔwÇ·9no¯)µ„ð\ vX¶bÙŠ÷¬X±ÌMÀëûÓC?Ýà?³ “î´P®™8+ß„¼ca hç2àPKWFoi|“9¾DmÔû@FAü‹)-@Þ†‰O’;Î4£?”¨2?!¸l`Ù…Ý·$@BÿŒú¿Y º[ \€‡RY°%¶8вÍ0(øE̪æ *¨Ï(gu£“¤~(Âè!‘ø˜pÜâA3*náIýZZ˜—gOE«¤¡*ü$#ç`Ÿ|u>×Dº’æY–¥?Vs;ÂêrÖOÓ€ð6~5ÞäAM nÛ›A¸=Q8?Ì<ùLS®Q‹XРBЗ-X`/™â~bDFP¹šÌ +_ò™›á Ž‚Phn¡—½ƒ\Uäò!•–f¾+>F˜ûs l„,†qË»Ÿž2„Q¯|CøUÑ·ÿò€àËh–­X±b)£§:ü_% PNW^ej0¿TÎp”¯t+\ø,@Ú(ÙX;½|­ÿFj)€&(¶ +ÀÍÝ`M€ ½ía»Ùä÷‘“«HHI®F³Ø­™(—ù² ô¤öe@hœ¢Àò¼Áodøi)úAzÞŠýàÇÍRåçs‰“°±¯'(Ä‚‰Å‘:Úœ‰“á)’ÄRªB0áðG|—éŸÀn퉠³r¿ì°°"ªPF¢ÒbB  î©º&£÷õBÁ7±PçÈ>éd%ªøÈX•‚AcT´à¨@™s©p.* ,²Õ85€S˲hPh +\¦á=³*c~0ÊBù>æZ;`þrÌŒÀQíï1'{ VcâËîAñ(Žk¬{ f `/ÿ±ì:Sì¶YíI¸<V©È<¨O¦Îg +@Q–]\\âb_M|¤:QàÀÅ«´0ì -ÀR3vö;q0¡&ÀÀ~0MÔ6Z‹~Xg¹Ïr7¬Ë$Èë?öpbéoÐë*áC€ ~+³@Påwæã—€þt3ª|¸Œ*FZ ¯8ý³©xNÁS°ÂÝ þD4”ÀômØÍø¦ðNRfé‘Òê«£è#mAR6^D‹ùÀ½ä¥‘ª§dƒ*v•z Äu) 6À `Êà ›k3,äQÇfŽ-â%4ƈ•sÝ òX0à A²}=2i`UHrž¥|¾_U?,8Ìwð—CÝ¥¶6¶˜‘Î`*L‚ˆZøJ}m=åK&ì© 9Eë €"¢Öɵä‘r«hÅU†C¬ï… èÅ´~ÃúõëWAÒù!‚¸\~Ùå—ãŽëîèZE À:€7(}ý€)`yÂJ •õ˜‘öX ãÂFžG9D`)ÀôÉ¢®Ÿç#>mþȯ?ø[äsAmÅÒ@éúÜ@‰áÉ–‰ð[PþW jäW°\8ÖSKÌf¬pÖ}à +¸ü{ªì|àÙep“0VÑGŸcýÔàÂ,@êY‰Ð½N„ÒÁè¯Lb &ð`å¿‘˜I´û‚!`VI€ßJ‚y4ò¨º†’ð0¤?w‡> Š™Dcù„±‡À±Ó°qÕŸ\Tƒ@†èÔÜ‘Û +Tÿ®ÿ½´ŸŒlÖ@0¦0³E/<3ï°sË¥Ìá¸Þ>A6£D‡ €Oì§DÇ’O¼Ú +àTG`m=vSýA2 +­WÔΜS.ߨB·«+éկ츬Ÿ†ÁU(ù/¿œ‘q¹ì¿ºMÀXz*E}ÿ©€r„y†ʳä|È<lï/Wn™pJÔ‹ +Kò9~Xo‚Ë5rX #Qž/Ä}öi@XøbL[ú™Ñ_M©ÉÐ °p¥ ©å¦ûè ¢ðÛ +=Ú´?ù0 À@¹`™Þà73 t~Ü /Á´Ä?E>@_JHÅp ô¿$@º ` +øV@ XÂà>åÒ»á±$«`Õ-~¥¶¸M™£<¥‘(¿“2ÄY’…6æÕdiQ_• +eÁnÌ´¿Æp‚×OÄüì\-r´lö0`»äêC$O ¥ÀŽRK Ä~€‰‰`êÒ¾+Eé2™Î0xTü¯ÒìµKÏ$Y§²’2‘½F&ü…cMl9qÈðUÙ&°Zïým+°Âð­?¸4ýÏ7ªú Z–Ç8ïúÓÀ“T`’¢ÝÔ½ùåbI)Î¥ýös\pØö( +}ð^í€|ÐjÕÔŠå¿›Y  pbýv=ñûaÔÝφþr# {XúÓ2è}óØš/?-8%Ï`B–Jœ°Tê„q´áÊ*Ûê­#&$’Ás†¦4‚ð»HÁ()ŽR¦süÝ9Q `n³nH0˜®û¤=ü4zÊH{ÛùåÁvY u¸˜Á}$¾±_À3ǵ@Lšœ_·¤‘(Åý­æµ$;x öK¨T±“ž´“w”mO~‘)€])4aP¶;ýWÑzn|zÉŒÐ8æ8_³³O¯Ð~ØD à£Í™Ü_e ³çò‚ðµéÞ”åöüN³±o ŸÐx?¬—ó w±Ý'Â> Ò êC5‹Mª-€qÚªÞÕ熠r)¿m'üÆ9 +` +ðV`€ïÙ `/r$P¢ØŽa5–ÿÛg6“-€%ˆ’ +3KO£©p}Lkì±/äi‰ñCRøI eMœ~6Û³n,æª5ϵòÛªšþ l:Ã+ôþÝ ß†ÕP[íp¨ç'àa€Pa|(àe5Ó´èè¤è7W +À2’^2m-Dù¼ðñ2)àlæ¬vW4ð‰àÜ/ƒÿµ‡´ `a3ƒ`…‚€|¦®©©Iôÿýä4™NÂwÄ4Hn™òfA;r•V€nWß ôœá²‚²‘&µõ±1êãZZw˜° Ÿ¥ ÍxS`¾Þšìù?c>„Ì€Ö¸«lilZÒ´ÞÅtü=Á–>€˜ouzú +ŠsPÍJu*{y”Ä Û¯7±‹ý,š…° €ª«5(ÕÀ<Ÿ€ÿtvøy)ÿi–ôLŸàç"¨ÊíüqszÔHë  +ÂLm‚ÝlžL+ÙdüTõO“Ž ª¤h‚¨¯×#e° àú;¤h fdøÎyzÚ ÚÎÀø¬÷±?–¢|·GöʃŒ/ÔhˆÁ¼ê*¾v Nm™ ³ÁÊÿªª…Óñ_cýùÁ098ž#x tʲ p¡j ³ZYÖ`Ø €[­U£ Kkä«¶p²Ó@$ + Yf-*q8Äs ô¯Á¯‰%dà¿€Ëz˜Z)™õ°á_3¬…‚«1i™-÷&ÓÍ +Xùá¬WÖJ0QX² •T¤Ã v€_ËiT~‰qàǘé¦CS>”ÿ6Ȳ¬Ð€ÞF6c¹q;ѶJ}Zw3 ÂþPþ³ +À˜ïð¸™:5¯à÷Êì×sË(ã9 ˜ôôgó=làlÐ3¤37ü†(!Ì™RÄí q¹†…²>‡:@…`_ކͅ|1\ÀÌ€Öà 2üú´ï6PdÑGm]~š€yµ5üÀAÒï±1iã‘­YÌs1„R— ý:“S}‚Mxª7‚² pá”Uœ(€`ŸPˆ {%%LKKªá°óC€ý~ƒ1¿' )./X°hÁ¢E5‹Øùˆ+cyÙ‚d·fÒß}`?G8VgõZLÀRÈjÐÓRúŸ{ª ³óß‹QZGéÃ'@­ÏwåŽ4\ú™ga? ,d¼7; ¼å™¬Ó<‚µýBU·l²>!{€m ¼úöÑŠÞ  9Læ6üš“FZšµ¨ôg Ÿ@^0ÐLŒðz$8ì—ì»fë8Ü#©\7P8÷‹šÙÝa‘Íæ»7Âð}`¸aP¼B˜ã€&xhf«Šì2”JžJ•½ŒrıL-´d±çâ àö×B0]°_B|>¿z€óäÇ̼l”S#¾JnÓàŒØO†×S’^Æ!#2O=å¶)7¿KÂ1FÜÊg«kªQ㨮auœE?‹»°`A ,€s>éÿù +@`‡mR•-¢—[ì§LÎMnBã±i¾ \bÿqÍž`ÑR¶<ð¸¾pXŸσÜWOÿ_2®Mjnýa¦%£“ºõå ò]Àè/zKPtñ»nì)@°+¯.pióN!X÷ÉÀ¾ê:–C`¡ä§[Fj³‰R…Svq oÅÜêPÞÓu0i· `:M= @ @J‹qrD~,ú*Öä×òÑýLµº YV@pêJúZÔÆÒ€m%Hí·XäyÍ „žªsBIÉ}6ƒ¹00 ´Æ`„slüóØñ'IO®“[~’ »ë‘`𞣌Y»Ð¶lTÍS0wÙéÒd.¬Y8eÀŸöRûY½4@zúI\F‚P½ +¼_ ŒHÀàê5 ?Œÿò ñàQ8 +€uz"aÅB#§)àÃP^²˜bé{WõfXÒƒã(ûC€Š~N5éß*~f„±Çð¤¿"õ +€µ² Ìb–C,G2)m¢h”Ý +%y!Ï×€*·úúW® Ì'ûTP-ùM% ¢—‘\ë¶Ò+Ë`ë²ß+TùR o½Ð,¦þ"ë'”÷ýûe6óAäCX/€ý` +`梻e‡Òƒôg“ˆZß (—0þ75¢׳s& Xù¯§àÜG&—P +OG 2T y™øz{/¨ÊúÄ2[>p‰»‘þÖ|X™ =€˜?Å=Ú®«hÖ%*a#/«!'BÄ%H|c¿ €g"ö@PâÇü¹ÜâúzSÉEøDµÅõPvbòŸ×3p$ˆÖ¬ìׄb\Cæ©&† Î,ý91óù…&D± €z7±I,/—-W©HÆI +€{KÀü‘B*s_ÁÏø‚ÚHyS*Rè´STH(åýøB'Ùo8žÛÄñ"ô&Ûòêö+XËûmìÅׇŸMæƒë©4@*’ߺیÑI`à?d¡€és®k €Jrßì±,3m¡bV O—Y ³»¥Á½‹lôŽ~£x0µI'7r3shóŒãÊà};<1˜2¸OŽhnF´óë×_½È¯¤Émr ·'³ë@|ËNðm LØ3ï3ñHQEŽŠiÖÓUf+?„ÒÏÿy”ó,äù(¶EóPJ›ÇKyÊŽ@kÚ}"Ø@Gåñ„I…?5€Á=å6Ô¨š›ÉNÓìvb»ªØ¯ú ô×ýÌA€üä?=üþ¸Œ°†ž‚å¨ÿHþÄÿŠXÎñ9hH>S•‡ÈuÒ€Êýdµ©üŠ^rB@[h.d°{—åc‡ +X9nüš½Íi`2@y‹>ÊzR +3 ¥¤l{~5²”÷üçíż> ļf@LÉß4ðG§'OHHvÒT4`>­€žÌ·¾3˜…J"D~åq> + €ª?«4‰3O—Y ³ªM’4ä>‡Ó€ðe‘_ooSñOúKô´ÔÚÖY¡»Îdhß%“y:Ð×§˜FÕží®$6e0…ÈSX/@†¡ ´Àù<¹ot"ÄD«úÓ¯U¦½ +pe*°áðCOséлº›l¢A¬gÍ¡KaŽ‚åµÌ…ÓiÜP¤?f²qâ„ÓëyCµúi ¡À`KO +@u6í'É£UMû$Š!­ÄÿäÿFX +âƒì2®|€2té±T´äô+Ør ‘€MMOÛ˜c™N‚ @~³˜mZM+í«ÂŸˆò¤öᎆNê„>kÀ€þ +¯ÖifT¥pT*€¤;>ã:}ˆÿ©SIã’¦%¹<ÛZšóõùwÁlnn޹CŒ]±äl¹eÆOœdÄR.̪ ˆàüy <ÜXì'Ü9“@é¿ ð±ôË€×’0гb?~2Ad¥Ø:`»úR¯ Ÿ 4ïfáÍ€ÜKTí*¬Fœ²&O0P²*–)’V€w´6ÉW50`ª¯¶‰ÖFI'§x äæYO;ý(› óø/¤|#v©§à®9{ÞÈéí?ô¨e¡ìdÛ!Ž–mÑue |€0Z.ªK¹à]øº˜üÁXé¯^*¶4i!õÁ?žœ½Õ¼´4«:±@VVû—þ*&—6Ȉÿðš·hD[«?$0òp‡Ó/ÎÁ4æºEe&vø‰þ ¥ØÇ”XMÚ”;d°÷‹ÍP`¥s% ÀÊŽ•,ñwPá/"_'_Ãñ¤pEw-þgp³†,²²Ðõ(UØØ„ÜUB ƒ\F 0P⢹ +U%M±¯„¢‚%çGyèö”VS#ùNPŠcþ~>t/ò XJŠ»ŸNØT†E?¡ò?(XÆŸÄÏfO—Y ³òJ¼¯àÙàOõð}’j”CPœ[#  “pW-ÆzrZ€u$‚"S…»ÕššÚ(PÂä˽¬”Ö5zkª75òq<’_5u{¶Få$ˆë/ò`F^WH,@=Êe>cƒ¢;c ìö6`‡ÔÖ` €ˆ¯bKر_°ûðFÀË.£ ‰:_z 6°ßÛìi@Ú¶ `œ5`}ü²s´¬¨©æÆøOöW(òá¯.ý•忲|,€)èx> ÀÛÇš²XÊq@ÑñD0k,ýù£‹")Íô›¹ +Æ›蜢@ÃŽ€ßÈ,BAÊwvw‚Ï+@àć¹"PàE\àSïljiQtS¾­™ +yMÜη…©‹C¯™J§©Ð×cÃhYäKx”Þ& +8Iع=Zñ]ù¤‡%I0¦d ÿk³€çÖ™ql„àí˜à‹`aüT9~KÒH>+d[gbŸ´7ösi .ŒÊBÞ%ûöK×üªì·™@p-ØdZTÞ €*€Œ²)‚›l\ã{™Œ•ÿ?m·\·‘¥í¢’eQM}”>ºéŠ=ù;«ƒÁVËZ£"Q¬ƒI±>ó*öA¯û(…}Av9ú¸¢/¡êzßÃ~žwŒ0IJ¶¿½ö L ‘™ÈÄDæ;ÆÈTñÒ÷XRÙY³{« gZ»(¶=_ü£ßê‰Ó2} p¸sœ /×yöWù‰¶ÒT¨Ü¸€» ªyï+-É;ªûÀ:½±|Q‡Àû>ÄÇyп¯{w7ìrl ØÝ•þ%| =Pÿ{äG1%ýKÌ ¯C£öbPá"¶X”û—aÚÿâH0м>tÿrÀÊp×Èf-Þ½~+ý_¿{ûº¯ôŠþYuz¼çÄwo»á°ü‚”W>ŠæÑ«C¨í~©pâXú·{}¾ÉwC}p}|VÊŒGö§éñ¬#M÷P}·šÚa<¶€¢@wH.튌v + ºÿ¤« ¿ÜvAIÀ;œøÚÿ«k$@ð[@YüHýg@ S|´‘ÉÑAÓl_‚`PüæQíÿ!jyíýDÔžæÇHß^L€–£àx»`“>U¾¡ÛR’2 3ž jLiJ>M¯>ë^7¶¡ŸïöKe*”~¯/€!B²CÀˆ’G«È•Lj? ÎAĺߌSÕ€T‹诃—õ4<‚ž ó‡èZTý›ZöÝí“¿Ó•Yr)±žî=ÿÂÁ-€m3 Z®Òÿœ­!° à|_È¿(~m!•oöÈ™ûÒÀPè +*yó(@Þûi8¿ZkÉYü»¬ Àw¨ô×ï4ÜbÜ72 +HüB¹"g8q#J +4(-*cÙùª_…¼4›Fºtd€š–›s•OÆ Î為‡44­C0ùÒ·€”("²öüœ°?ž®³Pܱª°\lúßý +*@ⱜãƒËë„àR|Ì<8zMá·YÜûQºíh FçWëS$ÀeÔú‡ÍÍhHîºý™8 ܈ˆpŽg­õ¡ Zù4e¥`÷ÜË'/Ódñî#À1À£ÇO3¤ïL|ü’(NEʾÄÇÕôg§ Ľck!`aòžøÿ(srl‡?W!/àé"ò¦ô>h5(£"l¤ÎrEa?‹ÍdVÄóÈ'í:íП̯]2þ·o°ýÿç7NI˜¡aÉT`+Ò]XóJ` „I‚½×œ>€%ºÄ•âÎ(DßîpëŽE–-ö÷¿E‹£ùƒwê92À5@sžMqß­¬oÓ¡€& çˆÇ+•‘Ruã&-O+_ ƒ5ÕïT `¤Šï)| ¸þ´Zy¶-ÒeýG„L<ÐÁz‹vŽHœ ¸bDŒ>€ÖýP?›ß*’gòP*9˜++ @Š/>ýqàûâÍ0Ð&ÀåÉo°Ÿ*Ð%ÛK´ôi[\çšTmÛ›Ûn”~çwì@ÀþÁ¢€Xó(­6د(®>|sê Pe=±0¨iz²”Ú+aùÁø,/¥6’ sÕãÊ¥sþö8Å!§‘Ê{ÜDC¯5É!"2xô÷Çíö¾BùŽžÅ‡,+—/qUÄ€°S'ÌÇpÿ²Ú‰EŠ€ÇÈ€ô;* Ø*{öö^Â~»—üß{fjIâ‹b|*Y©ÍT6k`6-üÓ¾{ˆ¦S >p ®Q€‡fZ7ôx;ëþà­e2™Éþ×”Nó_ýÿûF@²ýþjÃÖkˆ‚Ṛ¾¼³òY€–F(СŸAs?›iá^_Ð8:Užž_j ÊÓº  zÏx €ß1ª`} á« ÃÐCûAtþwPú¼hžcUxvy)ˆ}ùZ z(<ç¡u5Ôq)-bù{`w€‘ +ŒvÎÛ_(NÞmL O[ñ  zk& |'2€F{ºîá-ípwñ’<{þåîc8¾KvÒ¿P¢¡ú'$Ž)ѨºUè©æl­|´?áQ0hä·ö“wfÎHY»fsgànqªr`¼Eñ¿um€*MC>ÜGl`¼¥ž“’K[ƒõ¥ò= ¥iCŸ9!–M–©lX‘vLcP‡Bêböæ`E5àºRaÞç×ñJ +8HûÀ¯žoPŸÚÖýn²6«" a‘2K¹ +}ÛÅÌ“`ùü~ @(fÊʨي˜#êx€ŸFÎ4¤~iL•ýS°î-¯›Ù¹wëõÉÉU1¹ætxµòDÀÁÔ `'`FÃ>€É@*àËY9¯¯`‰½òÒÍò>£2¶£8VGyÂñ/}Y~ëÃQ$†cðøëÉNŸx—oö[ð™œÏ![÷4ž:¾ ­‰?±Ñ`ûßf@÷`¬öïYÊ@µ­÷Tý-ª5ðì¹Ý>°«i°»»ë»gþ§oÉ.&kWêZL€ÌJR‰5p>`!²@Nç—j0¸½c¸éƒz!(¿aókèõ®M€²Ê¨>€’%^ùJ²@WP£^°—T9­4}"@BCñ£¹~:Gøvóþ`³9Z­ÏV« +ª@£·S+¦?ñ w`F®ìÚqäÕ™º¯hÛUG¤´% +[ýÇ@X4–@L€b~¶u÷«0íd¤Üш( @†Cñéi@GbÅDp)Æ¿–‘å ç³™nµõ,&@¤@`¨ÿ.®dîïHª}ÇmGg à&À]4YÛUî徨<ûp?OžÅû*ÖçЄ‡…Ë>Ú¾²§M€X’’Öi&àåÙºøŸ>ÈæÜ½’öj€H ØûÒ1þ»E8y 1ú žíï¥^ýk–¨–®a³è÷Ò´.Õv  ’`ØAYùèþÑ <ÈÒÀT=à¾ö>¿ú^:G„ÿïÞå±ÑWß~ýídÜ•`tr2¼_Ê ÂR 8ƒq}´r“gðYhœ§ p@eóM›Aû/‡e™BúdÕíì·W£_|µP/-_~0ÌV¶l 3•læ6€—Ý"@ËLÀÞQ€QT¿Qø0 Ék÷£ö% +ÔñÕÊŸÞ ¸ß7!@!QcgG[µÿ>¸õÞùÞLËëîáÏíÈBªínß@•»çÞ.{& @5¯`§€ÀÑdÿK 03ýòÂ6=À‚½o¢Xõ9Í~wñL¬—£àë/¬à‡5:hA="TÎ錣óбÚvÉ}óÍù¿eýåÿô))&«'Õ ’8ÈVö?@ž¨É;\ÊÔú/aR˜EÀÌî†ã ÈþñpÒƒVú,U«ò“JŽ?+Ø¥ÿýzBAÝK†N¥¿Eînx 3Õôw-€Ô˜þAŽö±‘ñÈ À‚Û±ÿ½°Ñà«k¯ ð9#=¾}Íñ¦ŸÌ³‰ ¯Ã¤•/áïa³O[ïŸPMWh™ýEûãO Ê1€èÑñ²+<’JePË«ïoÕÂJ©öË{(Zˆšüm(•-*¡H€{OÃ~¦”²ÞQ€Iø¸ß¢ °s!Ö—Š 0=*ô Xì`ð~ZBÒ˜é‡gZ_Ó\5ûõ÷1òV·& ½ˆ‰ëZüo¤@‡ÊÇ×·WYàb}¶Y]èpëáEÕÀÙÙSÂ(‡c{…þ;ñÖHLLkŒn“[ï_¨ADm‰µ³F5;·f¤£È·€¥q¾|úò¥Ü-Lª¿¶J€î(3À&@}ã:í­dÀK3)©µ¤ø@ú'ÀAøoHù PàVP e<}Ä®ªb(Ŧ/[Ö;+ØÁDþŽ3«,þT‚²¦Q·r^îoYÄðýÝ+]ZyͰª?üÿó;¨­À ˜Gƾ›17EÇv†ü¹êˆÿè—”1…F¥K*H:^Ÿ8C`}¾Ïfs±rîäÀ41­dQP9>UX -xsu%óýA;ˆ¹‘Å;[â´³ *Ýßìœ6\ø–ˆ`Y(®-¨AÿßÕ`Ú^ŽÃ€ÊWYÇ1Pæ·#Ū @ÿ„ÐÏ|@¤$Rè£p{áVq¿Ò¼ÐÈË~¢Þ•x1±= ¢Œ&Àö(€§Œ³ÖkËX”f…ŠëÍááñjs¸b °£OV6)"ztpV„ú™—¨¿Æ5AŠ£õ‡<¼dÈíû´?6œhÇdrÁÆùêÅa|$ÃS¡úB°"Zfã¸SW¾|út¯œÜÌr ÔÐègæ>)?™Šü•¶(ËðçÈ@slo¡Ky€‰þQ¹¬jn«V]´JbÅZâF—0ËÁž“þ)r ©( €í] ÒÁ˜áñ>f€Ó~¨HJ„âYV.•ý×Zó×úmö…²9˜)×:-ÑýéþýbÇâYžÚ t'Ò„ÍÎæüð”Â\Xè·77Ûë´ÿ¤ pÕƒè¾i;ºu¶·¾m[Ý[ú7ܼé0èx\´§l²gi +þ +*YU¾WòýÕ•mÑð«ÞÙôNÀ•3i¢ô•âÆ>ø¬ÐÅPœßZàh±ôÌáW­ªs.k:à͇›êˆ”%¢E°AOW/@žà'CMÆ"™,Õ!úB¾¨™}4²W;6õΑø‡ëýÃ]‡«À‰ óxM'kxvºÆâóÛñ&Jæ×g··ÔóäZÈu³:9•å«k.ÇibœÂå°æã‘=ö©l_ȼ•ûR®=ßûò¹:>‡5DNà,S€Ý5ÀQNÑÂÙÆ²¿[d—… |a´/ @ú°d?(Ò»¸ŸÌ¶T:KúƒÌ™r€¥.¥–½ü—] ŠþpR¶+ÜÝé˜èF%²ûåÿ­Ýû¸0ŸÿÉÃ@ãã@Ú¯I1—‹D ¼í¨•šÁA DïSδç¨VUõ"òÀÊæ×ÑB?¯Iú4šî š÷€³Ëï!Úæ{§…ý!ìCíÎÍ‚˜Á?>þÃ5ý\9·>OŒX?äw]õ •‡©öµÈ;Ðã|‹ïLVL,€Ìœ>ú¸ýÆí§å•õ g®3@~Ao©íýÃa×– ps1½²zp ‘F›š¦F]\ï 5ëe9 Ÿ­ÿr²>xß~²¥´•)¬ï5/tØ·¨qq³?ýé„P.`;®NWW4Q"®Žµñ;&dßó͈[UxüeøÏïÙ—Ï¿d}þŒ&èS|Õ HÔÍôe æ¿JdjÔ(@uð³°æ»ÐêëEú&4xùiè•Áê(°=ÂüVÿÖ/ë;›TÀâ~@Ç—o£Eß%.ìº ‡w-‚‰]ñ¿-/͇ÿF@·þ‹üAG ú¯>€Z”NãíYB댲ŽV}êWa³o=Øœýeà[óoÒ]M]ÅkêÀí&dö ‡9”mõõÑÈ’Áÿèahe€‡5@·Ä]K à_ìÂüÞX\MÂ_ƒ©Ú ‘ôéÈ{AµA ¸*~~ü/é4jõLc൅ (Ô*ÙyAù{wåéÙñIIÝós”š_`ð¶Þt/€è7÷  +¬Q€+yÕoúÄ(€fËN=ðCC}gƒñ¿Ž8زƒ¥Ò>ê\Uo3Ðf^)rX™²¹ÍãaZ€êwΰ¾`ù£ð±uh±XƒÒÆXb9nÎu;5LøœÖxt®6ySЕ«½§ãSë/» €Ì-þ³‹õŸ ÙåÅ™®± ‡ïÊ€ù"}‚Ïv‘ñöBîAr=€R6€Ð<›.ž¦S•{<´ÿrÙ©jŽÃÉåL@ëÆ= $ÏÒ«@¿Âø <*î£ù#@·^›Yð­Y½- `ZºnØX©FbS +kÒR/²^_SGÞCþÄ9ÇDýþÃÍÍ÷×·7ßÐñë_¯ÛÍ'›¥=µœOξ¿¥1-‹ä?T‡oìTÁHhu )ýf¿äyL¨^Z“ˆ]¦tö7Ð,ü5t}5vPœœà4 õ4Õ¯,hÀ&ÀÔ@¸ »e£dçåuÚÔ’*÷Iz¸G'ÜâE/1ÂçŠ~/€º~1€ð;£¦ÊiU”ç]Ä;‡ +Ú×€ãÕ ÔôêÙ#q䘾å +6µa}~¼ÞÜb8(:ˆŒ„*ÉÄé4‘b›•b%]ëM…ãxáâøÐnÂt:¬Vƒ† ÙÆ¥­Òøä©ÝfZ«Ë™ø¨‹¯ ½" €tê[¿h~9¶ï +óë5 =Pb†­îhÿ„DàÿùEþ¨W¾nµjܶ Ð7Zø˜d~óA1•/ϵzÐ:ò&䎊ÏÒ+tÿ:‡ïþÌ9 –ë>õóõ×ÕÔÌ‘õ>-×Ó<û4>ÂüÒ¢,déOݶà)T‹XªTL+†{^rfÕdO›±lÔOÀ)-«-OªUÏÎh\ÆØW˳¸~Ô +pU #âÓ³å?.~òŸ_,€Á~Ûbl)ö®ÅÂ_…Eðx=ß_]q‰qªéù?Wg'ƒáZ%ÅDþÊbŒàØr=æXÅýZ칓©Ò}¼>¡ik @Cª®ˆZfx£Âß#£"ŒÄ&€‹üRR±ÃZSo6mãɨ Q¯7R#.VŽçHP톛°üüˆ­i’䂸¤ûU+ +fi®œ¢°ƒ|ÚŒß9I#;6ipNއ䜉‚eu)Ÿ?ÿr﹆³#„=~êè™Æ‚ñbÍ~_-Û"À·R¨þ5ÿa>»ƒb1(@nÉs÷ÙóÇP^þ‹ÇNFîˆ 8OñES~ T³b~õÌüÇà&—ð XÚÊœLÀ²j?NJ'àŸúøZ4#öù=¢æÃy„L­yP a|!€0«Wol»Ôâf‰‚sÃ-}é‹=VûÞÞt¯O6gÞtsÏ1¼b}Å1/øÙ=“[«>gמœaÔŒ›¯¬o÷i‰£zuêÑÚ9kÁ«öêë…€é–NFnKüf €´Í;´þž«ÄQ×颊ïˆvøWÉCŒD Vé§š}ËÅZë´@Ÿ(o˜D`}vZĪW­ý“^.eHL€M¾eãÚE±‡G5ƒ÷ö÷=:È÷¯S†§RR-aß^$ÀÕ)«Ååå¡Ògsb6›£è}óBœcÍMØÜÖ%à¥Ä@fœçÙ¯\ 6ÿ¡E1 „‚޲Çf`wØÉ¹ÕË]_Å£Eþ8œ|œJ.í€+|2>êñ$ü§.A{mÿmüóÇN2þg Týßmz/ õ|Ò(a@Î€Ž³€ööv›ó ¤ªY×°â9#½%„Bý×4ëOÀ’WÍÃÑîxÀP½?äÅk,€?ýÑ&H@ûïyÑýc À5€ëTø­r²ž”¿KkMûtóçõÞ/ ‹R"¥IïC§|ÖH ‹kZ +¶Ÿ¥Îæò’&@¿`‚}påÀGíƒÎÌ €f?(r•Ðäÿ×¶°ŒÊ ø­Ï<2Ë4l“üåìŒÿòÇÞÁ=;’2}ý'Òø>!Òê’ë–Pd;ë´Ø +­c`eÐè¹—™ç_Ó…ä,ƒ^€p§½1)8Áµ]xÍå1•Røÿxg½s† Îz¾ƒñoªÇ¨é£#(s?Í>}Åã¶rW4o®ë@™ ÿ;ò‰+«GÅIàŸ²Ù’éÑýçÇG´v‡ä¯Uüî9?Ãn÷×{ƾÀT~ySAý¿zYàìLÃ? tñþ£é÷•|R«^¸\šËÛ@Ðü—úÝðø± +X")•W‘~ U-Û…0Ænsf[|öÉQlÎÃö¹à—%Bî Á àí«öqÀÆ¿€˜ÿÕúÏh`~Bc²^SñÊpèÊŠèJ÷Í’NŸÛ“”×^ßÞR5"Ù‘ù>nš8µu¥M²ëy“ÏmU' v>$OÿŸô—øÿA{àÇwíØzHÄðò52h´ ~Ÿûmm|¯ê‡ñ›|ð ûQñW“ðÔç rP  8û„ð¢ªpã›ø½|Gêi¥K+ïzìl-€Lôqÿ˜Þqc•­Àæ$$t§ÁÎ?ì™™ÇAÛ×a *˜'k™R-×_b«È­« ëX#@õlk @6oŽI’¶IÜ~0ɈËÍmDÐûi¨2ÃÁ¡À5ø¢ÓA° ’´£f¶Ú\pŽb vfD15›pù¥oZ£Áw´÷Uþ¶ùí÷Séûa…ºb¨æå=Kî³<}ÚŸɡ‡Ïò¶ç[`"¿»… `꽈8 æ±fB°õQ @ 0fP>ˆXTˆÌø[3þ—Ÿ³ýÏ_þþËþ£Rø÷ å©¥?‚@­ïLà~ @ÑgºœEX×¼o ƒS& ÀÕö €/­RÓŽÀEd +¹êûèê">Ö‚ø[ |‚x¸g4ßïc²œÄ^_åž­¼ÿ˜…ip«V.γÿÇô®À¢üø­¿ö¯i—i–uùTiUÔ_…Ùk|äÒ¼À´ØGÁÛ Øµ¦?QüGH<Ü ¨Õ t/àRÈï²ë½¡Üt·³ €¸EO½YGip³%ÜŒz‡Ë±%G2§ØâgGgöÉ5b<ÚY?]Ó@\Ø0Eˆêûë9ˆicÔYZæRφ­ó¹÷üð°gègÍ ›^22À&@[ë£ãã -€c'ú®ö^’i“³uÚp¿D@( uHûkÂ|¯q–¼ ÖÏ„ó¾¿|lI#= w éoÿ_ú\i<›À¬ûËç…&€uiZÜ„ûÀÚlŠÊ}áÿxôY `g§¬üWû?Hú¿ü•åç¿ýQýÝýòËߢÞïA``X|×êߪ^œ/½ÏÖæÇV<ê`Z6H_‚P2 "ËÇ2PŒ pvHh=lm€‹‹kªœe­n¨šH›•ªF,ÍW5 +gñ£Ú•µöìÈ,:lU›÷šøEq¿ÅQÍqÃtG 1|lùJİ!VÊ?KJé7wFÚ`~@l j¨ßoµÏÌzîH 3µ´¦AÂ%¸&nz|i(~gþkØŠ]ö”ÖF~žœ\ÎÓû~sã•],–F…žºç‘ +c§ø@¿³c–£³Ç1hìilv,+8Ù' ¹µÚ7‡¶,d3E¾e¬±’å¦è¯cSvP ™£jî+ìÐæ7‹Ã²Ö/ý8¿å2 + Ù\Ÿó‡ü@ `£à©Æ¾æ~ô½Ü×Õv?ºúÏü—õò>úß÷iàÏ2`w7š? ÚþWàçD€æÿ !Î]«Ò\§êguÓ”ù™Nµ)ú4¨Kúøë/ÿöño?ïh àŸþþŽ øùÇ­ó·ñfÿë4þÿXÀ5 €Å©Ày`‚ÎH'’CT|•+®xZ"°âá3U¢^û3€°ß¬>¤\qW¥µ|ép;{ÜÚwj¦¯~)-¯£ýNÁU'ë.oœ8ôÃ×Ëö¤ÿ¯ø0ÖH¡„ù)«ßÕ   fG§Kïj’ ©¸êÅh8 +`¸Ïß°ðd4¤fÔ-ÇðŽ ïýÌÿ7o¤··‘ÄÎã(cêÕ@ót@n»ö-wí\ŸßÊ¿†“y ‡ª~“Róžò[ž°‘NÚë'k?tõ2}œ @vrt× Ç­]ú…óm c—€ëTo„Éè¨î…¶a—>,€½ƒíIú{0Î(¥ì©xäŠp¡N¿à?TOßA½ý;=~§ü¼ìñ>; ídîi§„%tN’?æ†}94ÌyØ¢\lž§ÝGK€–¨üv¾ô»¨÷»#· סÿl >.,œö¿øéo?ÿ1Fþ6 6¾þÓŸ§>T{y#G”“`Àh^jºœ ŽøÏM_ݨߕÚmÒCµÈP9Èø«ÖkC7zãÚ»¶÷ïò cK¸¥Á àoI'àDijµÜ=À+÷âs€½±”LµRDR˯Bº+ž°éa·~µø;Úø]z^¥ ,Žvî52ûr²°Èd}Q¿œÝуªîÝê¬ësM€ž˜¹Æ1-1n½>%ªhØ•°í–¢£ðŽ"tž9?()q&ÿ°§ï‹›Õ&“ÿÉ‘¬é[±?:¾Xí­W{ðññ#üºà’()r…ÅV— àµÚ` ûp¨>€£=-€Eÿ\kíǨìÇOSirä3„¬Ûœw¿s~%}: +h÷÷çÀ|h$@Ñ_ÔtùÏ/€ÇχHà‹=ßJH © ÿJLæ§„Šà¸z_ÙÀà?ªþøÈ^7¿ÐþïØÿT|üáç~nŠ/ñFð§wD¼ýã»wÂàBÔ@éKùêŒÙ¼æœ¶ªGpËàz¸Új"bаCõûÞ/ßh<Õ0°Ùœä]ÕºUG©OŸÀgû$7\CÑJ1m}›è÷líÔwp9øçxùe`lõ%œ#~ \⚪UïÔöòìä`¥ßærup¦ `7!±ñ@übKØÆ‹ph§ bf¿–€dÖà†jPEwó;óŽ_ö\€­^E@îzøv{ü^¯´ª Ö0ù©öujîju›îÄš/@¦7u˜Çx–#""™Ð(©„8mO°³v¿æµ' PÀ¡J½~õúí«÷1õï^aØj8Å0È0`™Š€É°½¡€`y¹óôI3Ì¡ûẌ€tC©Ák? ›ù¾Ÿ¥¿7Íñi@}_X¨Úט]à‹G±ú'Ùèü³KÀµŸÈkIt ‚ªHC£ô2Ñ8 rB•QŸA¸ŽÎÿ‘–ÿO¿ÀtXâ=A›àã=j àíŸ9þÓ;êXÍèw¦À-–@›y Øh[?  M€ºã;;vSR«õQ&§kJ²¯A;¡–d,ŠXê +jÓÃË•ÙfÿXº õûê“@,í"½b@åïžciþkøÿc‘S€Ó¸ÿÃÀ"o[DÙý. ×T¦½ÄW\Iu|8ËeoNN|¯‘Ü·­` À iVÏÕ•1*@Ö{Mó¾-€E€;)!‹6Ui~¹+ÿ¹ÅÛÓs×}?˜·=üW»Få:P§U:m$唋Oæm–Ö‡–Ø7ß_sˆ õ€²ÕGÀT^•ÿÃîåñêåKjÈãkÏþëwJˆïÖwU €o«Zm̹úÚø£ÀaÀPîñ»pN±åŽOü¨‹yEóãˆÊ `´3º„/_®ŽÏWû+À·¯¾,€7oóZjß4ïÞT¼ú.†cÏ0¹µ Ó<€ªüjû—+ ôÇãóýð?¯ µú%Þø†J*‘©@©ž¥wZ`%)\äA´y¹Nµì£ÐæÔ<™¯½“ÿVµ^ìÎV5ñM@g”`ú+îYr>Â9úw +€¿ø–‚T(Úø¡vU+»VÚt½ƒ„*-¬s—듃—;h)ôQ[§á¸×¤ È( ûÁÿ7¯¹ƒ©¶²%7TâŸPT/À‡ë[ ¯˜Ôñ½ØÔ]çNûT° v=À¹”˜i€$þÇ·‡>´“¼dz ·úl®8¬&ú¿,OϬý³‹C-€4´Â•Ê…Ú) €JíßÅpG’€ï’¬>€¹¥^t·­‰hÁbGàÒô4o%|¹Ê3«èšëa.°žXQ438”Õþ#uH„BCÊ.¿ç>V>}à @¨…/ãŸÃþ )ê G +{ÏŠìA^ 4ÚÕã€Õ L1¨?;p¿üõ'ÍûÿÇh@±ß€}oÿ/yïö­àÍþ+m¸†×A,µ¾¶0F”ÙÇb‹ +å’½¤” _õ`å@Ùl¥¨ôȺÖl.nn¯‰®y]1œ(œjðßÇU¾ì,ßXúû¥xCmì|ü$ À4ȯ~}ý^‹NþN¹f €Õzõ½½ÃùðŸcñ—«Ñvö¬[¹Bœ”¨Ÿ€š_›”6@ ÑïXÉÄ~–ªß Ó*Bï(sÔ~j¿ øjs»9¿!¼ëÜöõ¾_®€ùßµðšУ;Ûóå}¶ìTôOv¾¤ Ë©Õx´ƒáP5Ž àʆª‰(û©/Ùç(Õ'Ôw£A9YKÀk‰/»ËÀ[{Ÿ6Âã² ¨v@s?xQOäE@¥Vj/RÍ€*H2õ)6ÀçF¤xáç¿¡úÿê º~tØ(~JÇÀ/¿héÏÐø#ü/ @à(¾­aÀ(~*Û–@iQUÒ Ú+aQ]v€ ^i¹••2†¤A;yŽ’§v]óÓpòÖC‹}ÕÍz¹]˜UüDüÞ/D‚ý‡a@M€o* Ð…Óî×`­“ñÕê/õl®Ðÿ¶ñwªð +Q€µßÀíƒ<>áD +ØýíQ½\&þn%,”-¹½"ÚÞchPpÏYOBlI½éÛÎu`!„¥!ìú½7.Q~ž*©WF¿‘SÎßÜ\D–ÂXІ‹|H†öµ×puðMõ¼a'u–V÷rê@ðƒðo‹ü%\}¡¼Ü¯çüCû§¾øò‹§‘!ð•7 íˆ!°±øÑýT–,r?Àyb‘ þ® x,ýù±Êùi$ wŠeƒÏ¥Ï¯CfØ/øb7¬¿ ¼RÉÆ\ âT é_±Bïà‡Ÿ à8à/?þ­;äH`7õ ZÒÐð‰À7Í~€0z'æ)°Dñq`@ Ð(‘åòÅ£§ýñúìxµÞ÷Ñm{Xœ„ÁÞ§÷7«“ž­Êá?kн´Va7˜»ÕAºü¶zë(ÄÉD XtªuJ¸ +·€€s&¼»lr««  ,€æÿÔ PìWÔ?ýUÈí˜óvS,ÕÂ_•Ø+ŸIÝ\í£¶>Û`¥ÃþËÕ™sÓ| á/ÿËÈ-—ÿc¿ùÿ†›èD€Àͬ +?¹Ô|æåœ¿ß .íG«›Vk»À´,né~h[“eâHŸç]¹ÑØöôjÚÓ˜)/Hädí;ÞB6ËÙ2L ÖÌZçìBÏ'ù@@þÊl¼¡UikRÃA0I_~3ë~Ï/”ÐaË °zTï e™ñò WáQòÇW¥&RIùO­‰àAvB67ÿë±£AqQF@vO€žMþb?6ƒ£¢Eÿ#"ì݈ÀmxhE±‡éÁO?Úþÿå—n î· P3ì\Ú0{Ù 8¼€Â£þƒúc ÈÁ±pÍT ðh'ª†jy^_mX}0Èùm°ýËOï¼ì6›;Î"Ï@ø/õíáŸÌÚÖÏ®&Jp À‰J€Y¤X~ŸЗw—Á°­‚°‚Ýö7—b?ˆdX릧Ñ(Wà^ëÿ§Þò…` [-4Ô¹•±  mØÎ‹K¾x}‹ÿáú¶Æîí7Œ]/¾¿¾Ý ”|› „Ú%®¹¿úÝbcp‚/ð²5@³ £z ük¬H\gL‘÷¦¢Œ.ÞøfºXÒÞöïì¿{åÃüÞAu_Iúaý nÀ—ÚT;¾ॗw5 ;/’‹UÿÿƒíÇj,Rú1ÂüAþ…hßìpqMK`Á™/ùŸï¾(  $Äö<Ú(Hëê'›J‘>ú‡\€¨É?ýò7à?»àã_ ?m¼ýV  €üÍrǰj'Šÿ”Õ»~#Àh¤Ò+´=yì¤ /pxì  ãMzaW‡®Tˆ€€öÿõ%ÕÕšxýÁÆ‚cçýP¹­ÁದÿÕÞi½/à6úßR\»ÐÓú APWÏõÇö‘“üW@'î¯c4Y¢~|ê¤îG>}ºÃñ¥D º:6í„8Ôš*´/¤ÿ›îÏ€PßñAõÿqô¾5»h@ψ¶÷ýx²Ù¬n1ÖiòþßÞÄr,s?Bƒsyu›}yvus àç>ÉåXâúü˜yÚª#xi‘‹—>‰ÿ#}gOÁf«½º¨<¬~›¦ûä?­€ì_e”~¥0õ¸góÅwÝü|48q¨y Þž÷7\·õ$EÿÑEÅï> ¯ƒ°¿úã½×Àgi1°ŽGÅÛPì^ì•H`‹ý(ÿzaqqýP¿l8ÐQ€RK‘pŸDT{s<î°~„èÝ ùï¯{°~üya@éwò²Þ¤–eÔË—R (=Õ®!ÜpÕΞª2ñà ¾Á©^ |A°SËR ×v͸ÿ°ù€ÀªúXÈcQ¥ºäË@4ÖRJ+¥k·¥/ô®.–²·VÃÇ}§½í‘nZT“,‚¹¤³ÿô7 tÛáe¶ÕÒ +î $‡ïDIOHûêø_íû›Ì@{ú¨õ|òï>ÊB¯Ð 7Õnr c¡[÷ËX r7™«s£À1Î7û~§EYGB¤{ÉçtÊ+aÒÎH{#r!8G:pt¬¯"WôHIPñêæ/¸½Öžô&‰(´ÿ;?U;áà`ïåôY?±‹õ½=\£qìs ¾±r¦UíØàu³ò_Sò²\Ã_¾Ë{Ö® +E÷b<¾%pºƒ½JÌÿg»Òí»5m_B`iìå'ìùá’¦ûʨ"ö”ðviVGÝÏš¿–Ù¾ÀÏ?:ào´¦†Á?Ó.R 4ûÁ[ûF`¶²}_; ˜‡z»´Þ8 °œ^dNñ _F” ptŠ˜ +ä¤@moø¥Ys'ô,2ãF€6€…%ÿå{É€…¨!Àö-”ÃH”€÷NÃÿã ~ŸðDÒKn[ ¾dR‹^‡,—á6ê +Zü8ýüWï·š‹«yèÒÖs[€Ô‡ÿ>XvRY+¨ImçFföU¦Cã÷óE;!~êÐPzrs±z¯áàñj}è›{}” ü':Ë­^É-JD˜º+­œÍ±‡(Ó¯O^R+¤ª·”ú´_êg& ¦À +EÄZjP" tŸ=zä›ÅRÝljdÚrnuêXÀÿ ¸SOÜX#ÂzjMsÞ +¤þÅo‚={~{Pº§m³|2°žG<ïNÀ&~«M…‡@¡´Œl¤^ÖÛÌ ]5f¼„Ùéß/®ƒLøñgm€à¿«à§”/zÇmÎ àÍd߯°åOœý5Î"³¿FL|½eä’•XöZ>Æ$;^¿<~é›ÀYÜÎãJÝI]Q­¤jåçxEe­Â‘5N5OÙÓ‹¡€ác'`šÀÒK©–Íû'¶/ˆª'€Øíéµ{ñe”àl €ßcp¢ÀŽMûÀ4û9TÈñêÓÐWOd¹ßŽ Ò¾¯MÀþ €„‡èJeÕ¦Ÿz©y­ÿáœ7”ûä#–›ƒ‹óãX«38y¨ŸàðÀlyב.¹õ..ö‹Ûž¢ìÒ(Hë dÂññæàÜH&è?%áã9Š ¾hø¿PÿO÷_<~š™&Ö%jÝkÿ‘UÊ9ÀXT9¸ðŠèܘ¹ÎÛåÕG2?Äw£€¶4ìHÿ¿ˆÒùJ±èͨ"V+á(~»´ýípªXoÖ‘‡¹ÎüȧÍúÒ¿œR—íÕ ˜ +#Ûñ ÑC} í{)÷ÇZ–‡Úöø&„Ê>†@µ^ìù>ŠTÄ϶¹žb2° –¥€e0Ê?›A€aô;0þ³†Ù6øgqðƒÝÕ1àLàêøë?aŒöÂ0^}ýæ~@£;k2ô÷'b¼!LuÔ Èï%Ç£ÞæÛ€Zq/W´Ç”LJ”L«”Ç$Råü¨XV¦vŒm¸_oh@€RŠíÖ v} Í„›º¿ +íiJ€²J°¿ËïmP^„wÑœDF~—ˆÎWD@öˆK±,eDÚ/}*­ìƒÉ°´12ðêM¾ÇÈ=®ŒO–W¯gÉâN٢ +GÝqלpN°Án+òaÜu÷u—é  OÐ8Iy圜~¸>B|Û†à0hÛb”ìõ >[ó³°¨ÊW;NP+ €še­³0„ÿ}/œ´Ý°Êw‡ âwq üëêmæ:"ø¸8£ÍúJUCqKöÚU=`AôÌ+Q Æȶ$t^õ‘åùÞ.‡Ï°üÇÓ@F¾I/`ëÿ%ûKJô_¼+“5KMDå b2QYŠÿ,“ë`o?,‡üË~€ŸK˳àŸ5à—¿b8I ÑàžPãûÑî¾.¥¯À妦¾ymD¯ôÛ}¬~ …€åB\¦]À°@i("R‘Ö7Z¢ÅÔjŒM¶9*—€Ÿ&€=¶J€”cFSÄ´ü}(îxyà2À¦ G¢èPòj¤ °Åÿíd¡×ÙÏàœŠº¿  P€£Ñ `êÀǪžR}mìD.ú#û÷Z`X¡¹Ißj|Q©;  UÎ×ûvì¬Ðv‘—,{}˯þÅ”Ÿ‚ß!$÷¨™#/ç$Wæžß®ýNÁ¦ê‚;4ÝZ‰ªF”ƒ Ø¥/åUòc–[…|Ç(¥¿çëp|Sä_Ð? Û8wÖBÕ0Øïã©’Ó°º(*“(ôçÆ¼Œ`/À‚Ø s~úY€1(ào-¹PXÛ}Î(0,Iÿ­clF'€…棔¡À>€\®K åXz¹x[*/µþ£( ª-~85ðؙެ$¬í•_ þ‡–Ñ H‰Aÿ”dxmêÌ< »ø2QuüÀ‰bK4¯gPT“0Ä@,€Ž8,€¡þµä8šÍÛÒ‹Mݼx·ìƒaô#Á­çÓ8³hîXÜR‰ì=²5†³Ã€ +­«‡(à¦oPèÆMþ€öÙ )솱5ÐïØðÕ– (=™µ¹:pî_:×R2ÓÎíæȰÏZƒïpµW" õ 9K«¦$õ©Úö8îÏZlP,ú çz·/1!À£jþ£iØ[Ó¬o®Øÿdž~&.gîC.)ç?¯Q!‹¿Vk.íüÐ>" ÂÀ4ÞwÿÇÞÞÿpºŸ6¿z¿úþ!ün·Pü•ãµ`ý‰×ôÿmÕ/BÍ¿Èöë†Von\«8¥cýoI€eŸ¯ÊT€¿þõ¯4 –Ñ~Ýüv¦RïÂùX\+bƒ£¶j)þså +.þåSŠ‘¶ ÂY‹2¢`|ãã…£ü”MÙü ,½›Ÿ®®¿ñr`]µw–½ÏoX\6†ÀŠÂÿã“~–l»!Wíµ÷(àý‰@@’giô„¯‚˾,€Š6÷(bD× U§ŒZÀþËŒn½\eࣧ¾uõ•y!Igfã, ÷2€ø›´ôíGùïD‹oЂÅÿIasŸóÈO¸¯FW¢8ÆØC§ë£dVE §7Î>')œÓ©e‚\`PZH“CŸ×SâcÙä=Ñ[5¯…ÅÆaUí„ÿõ ‹ûˆX£Q„áX'.€Ü¤uùÔd¢_´,”0Ô±ã—;-€¼+¨®j4RlpÑüÎ-óTÔ; [«Æ@vqÄK…RգᇟíÚãëQì^ŽK{E^l¾ñ¥€.Kd:@¸Tm™ÐôTœE@øTÿ{»ÈJsšŠÂÏ&Õêç"¿=™ÿ7ðs^ PXvÆ9ã~Àô,€WÝß“²”Ö°t¾«‡Æ²Äü¶áÎŽºŸê`E¢!I]¡HjÌÙz3êß§—>šé´0åd9¦4ùªþ¨`áÆß]VÁ…úÀÒðx!ävýÂÿµ+`,kÀ>€¶œ%bÐÈ(@[Êô +Åe85ÚýÜíhú·éYZ ðÆbПÛí—9@¾eêÇtWÎÈ—áãþÒDˆ¢Êæó ÓÞ _®Ä=ôÙœËÕꌶÁñ©¯p„ðŠé Eú½.%ü¹WÅ^ Àÿµ¶Jcx€À·õ®©Xü#j€%dÈi~ʃ»¡8Tá{SV™k +˜“é]ʬƒõê ×rA¶ÝÑ[þèÅùæäÄ7¥ÈSòÓllÖ¢vЧ´H<§%¬†×ع=~ÆóÇJ€oXÐþùB©x˜þXþɱúÇX̶ø¥Zú·­ ²%Áµ–°ýÊgþºWÿ>jìä@±þº5eh,¦/,ás‘¿æ9ˆS3¹¶-€%ìðeçb(¡å?Ec[UÝîâq>eó)4ÛïÃ^Àï30OKµŠ¯ŠzpÄ F +Y[¡‘«æÚUýÿ2xæ±úðŒÆßþÈ+"<ÂáëýXQüÅÿ¥À’Q€²|CMøÏFª<õýi¾°0ÆÞŒ‡ìЇôyž¿‹JßìßÈm{ó°S*íx-;›¡¡o}ʤ€N€ +S°æ)üN1 Ž4np;¦˜‡ÿŒr±ï± Pþ’’µÉY㓺ðJYŸÊ„tàëwêÿXû¶kMÀµ€9éû¾’BàS\AŒj–2§>i[ú¾mØXëëËõzjÊéTŽ:N½ÉfÖ”üâ¿ÇÚ¡@ ”¾C_ [À^ÀD•úþ¶éw×—`Tž‚5'(µÏz‰É#Âù¬ó'®Â_þ‡4@ià$Ámø +Á_~)0÷XÓXÙøú[­LO…”ý6Â> χӕ±$½„S´¸z .^î³)`{8I +!á÷åï.‡©k’)ßmËRû?®O (@o%ziäx`±VY‹M NåJó†>ÀOY9ï>M -OvGäÐà  ûÊ@„ái W2Äègªàõí|-€šØw<¥€€ÞÕ¦ßhùkØ{+§ûŠPˆH˜[úD8߬nËí¦h2u`t"U"Î!â‚MöÎöu¢àé ø'óÍÜYÈßßGz´Ä)ìCËÓº ¶¥Í*Q?h¢b!¸é1Âà¥èÚŸ3U …X"$2ÀxùÑáÊe}Ð×Êõðל©ì‘ €«öÆXR ¬£^ä(Ô¯cœÚZÓâÓÿwK4f¢#4üÓDç§(¾+lAÿá¶²€â¾ä*— ”­ÖÃTËúïÚ9wà´^ €Ñ °ß üý?ÿþËëÐض~úÅWÚ[øó/[@ýZð6Q´šÿ´Ùˆ˜^é¹@qUr`šg!õAàÐæ~Rº]]_Yݬ¤Ôã|ªFW‡.Ø¢~g0¯lШ¶@ +Î"x¥¨¥$€ä¯îå>€Y?,j~° „OÑEÔ-ö!¿¼ÿÿð€«àÁyé àf÷tèArÕÐoø™çn|ÙnÐÀ¡¶/[@èeÁÛHÜ®n9P`pnw)ƒË —à*‘M^ÝmtÓŽ9@™š<ò"Èì#w"+¿ ì€O%¡–ó&šÔïûyC_k•"ÀA '•ý¯eI ±¤9ù\ "“VÕP DlØ ³üǺÖÕûª[÷þ9µÌ¿ç_]A…ÿä:TCph!LËs˜ ¡wßCý4šù9Ò{‰êõ›è¿°æJ3Wž µF½Òh8 ÷c=Ý_³^‡Ó|=nt@FƒÐ[RüXÀ pòÒ”MY"²/”€øFùj¸Þáÿ±5ƒJæ?°öQaûæÃõÍ­mׄSB©2ŸAñãAœœØ Ù( +²›E„ï }}ÈK^²p©‘]‘Õ?,‚QR¾Ð!GyugT!ö¯FX},(£ÕàÜŽH×ÎA‰€€²¨÷Nÿ™L€ˆåXÝ øæ•/ôH½¾¹½½¶ÖSËoQñ7y¹ +”•¢”Þibâ§ ë³S„Å-…Qâƒ"8©'ç$ÿe,1!H¥>cwE¼|Ô~qcãŸ3kу0QM ™ºÎú2@U·‰J•­Šçì÷1,<¿Æ®§ýRC  +xW¨TiÄxô2(!t­¿ÏÅCá4]0;þx]äFZKrÍ«[1zß0}Ñ#Ö€æüó½ÇJð¾8>œù=N(ˆàÃòµ€P^wÑÿ™o0n¶ReÚm½±aiUJµ¤)èƒ 6Ÿ— €}ªñfu™ó ß 8 ÀvÀÏ?lYj~D€³‰kîð;»š¬iþòVà<|g2 ô×@4`É)5ºPxÉ3R“Wû_=¡¹ìïù"VÊÓ 0®Þúdè~9\¾‚ ‹íÁÁc‚B”i0ëÊñ>Št!à‹5ç;7i @桺VBÞʱY׳DTp¢•rÑ^}·ük"€ŽÏ0½8˜R³ì<.Ø “+ @þ‡ £4ü[áÚñàn—íïÒícî~[o¹mÞK°Þ¡Ù£hÂzÿTÑ#zgï~¦cýdÿ˜íAÇw›ÝWÜtŠƒ)M,þàŽâÙÿj¿ŠfBòÆ·°¿¢ÔÑú_å¯híÔKúlÂàÇuýÖ¨ý˜˜ãO9º”âµ²äì'ßïÁ¶ñêP›ÊŠ•¬¹×§ûõ'«Š•w&Ämž ÷›íµF,L«Æb9§¥™]ËŒ2v€ ¿3;°Ì…ù ÷ìßÛƒþ¸ç·¸¬7ÚŸT¤2žÐòÓ S{¸—Ãè}è‹Ð}{°yÑË÷ÓVŸ €;=žÎæG?"ĆÐ|Y(WhpIßòË#-DÕA.½,€z耇döû¬Õú*Fy\O‘G`×vµ®ƒ€hå¸6IR”6Ñ +œø”ÀÕ•?ø\<ä¾/v‹Âo(§¸Òéˆq•ó“ ‚š4 +ø¨0µb Äæ·óÇG%¡&x õN@.)DŸ{Àk¥¶ŽÑ0,€À‚€õÇgû~J2Ó5œ P¤vP +XPâøx³ÆÖq€c~ÄÊpÛUñÿñã²ñïúË{©¾(ÁF?ï7üa£ç(¸ø¶ì Œ:H òFˆ©ß:>c6ÊpUnEhôßJÛQ("b¤ýú÷bÀ"ÐböæSòR8¼Ÿ:ïDøò¹¸€½©û9’.žâÊYõ/G $P.èY+{ŒGð”PNÇN: WGÙ¹‚<@Pü¯q@ªÌ·à‹ðX™ª½b¡ýï“€.œF¹÷û};ž‡ >ev@$‹;ÿBÉŽGë«òÏ~BR×Iä}óÛ`ý¥  U9¶Ë–,ß ŠÔ{ÏÇc€¸l@úmúío¬æüÌþFÕkxô¤4S2DÍl:\K`Ø®ÿùοŸ„÷iõÿ(ÿi´”ø{Ößì;üáç 1G^M¥R–P4×ï×ÔFûÀ4 ˜5Ô/Dí_¬÷¾È4fmv ¤dÅa%ÂÃífo«yº@óãñx"¨á<`©À%£Sr);E;ÛÚáÙ;ã½}êqà’ayO½[t9&@b PvuÊ]ð'Âÿ¶öçu’ý·Ä†W€þë? ©ü­ ò€¶AÝ97¾èS§ìÓÃg2 4 7Êá]'ªt×ã|³³)Æ6a$ +r#îŒ(Úͧš'xP>,`4Štu¨ðTÿ›C%¸*ü J»éïæQU#û—¨W˜“¨Ì€ e‰P©4b8Øuòb¬X€Õž7»ó32‡jÿüäÑê¶ÿïøßîùgA£FXSÊÊŸ`•›x/Â~FËûð_cjøf€ñ›%V‚HßS€wŠþ™:ÀZú¿M€jÄúÑ  +Y‘ÊàBï¸ÊDÈCßⶔ͗€£×'-`|ü!Úÿ¯ÿªµð³Ÿ è@Näd[¬=fà.ý‚@<Êøç~]·À1›·iÀíÛˆPô ,ªÆÎ"|íC ZoZmù”lA9€º–GÄí°SDÜ]š [ìw‡5ò)®)E‡njý†áÆ+ÜOúÛ ù mÈïˆàx“ýŒPV[ÃSa¹Ú +p=;H¥yüø‘ ÿÕ6üËXèø·[ òÀä)‚Ù¨7 LîŒîstƒk«+R@g¸\:òê«&{è%—cœfF]N!¬›É?äJ›Ü¶ò륚¶`mÒd2_Íà‘Îuù©NÖ -€×o¿‹ˆ¶±v¬WTœ  ºùKÉ&mIå̃´JmŽ« 0¤U]¢Èß8¯¢O¶ ãèm· ê ÷üWÙÏfEȦ:ù%u”ÿxú„ŸT? ¨Ø_@æ‹¥  RížÔ7·½¶–8Öêï1ühòhïP{Ë ÝÿñoO{úÅR@dÀGÕù¶<î´Ød*°<§±Ö¦@•Z[\,îÒ†ëÚ}X»q²øÕ ´ºpRºÓ6ã;ùªxvcmbMù-\úaÌx‹Ž¥–÷àŠ ²Ÿð'V²ýÇôVpꇺøQ2xËëÝ Là MܬOáUšÔþu ÿTcé€òvõ-–îðÓ€1À@ƒ:ï›´¢æ2a`}Ò¯bLË¿ÙlCsù²tà„¦lNaRNtæ@lƒDô3aKH8Ÿðˆiç´»C§yÚ òRk³äM€jr¯^ R¨^Z¾¸ü¬Uaøþ^€µa¨þp'$%ÿ÷b}²ïýóê6›ãsÌ¡þç\B_ëôÏSèy0Dê‡ýÝP°`á .T·½?Ú°;>n[8C8’ß$ñµ† (îï½À[æò— ÿc Xg¬ŠÖÄXe,Ÿ£ÐLÅh`øù¯y40Qbç+ *jæ ŒAÄŸHú›äÚv|L@‹ÌM-ˆ€¯5ü‚‹m<†(þˆ.¬ åÝî 4æ¾xƒ0a~*vÆÂ›…~àb‰€°  5˜võv fúäÊ•JÜʰëïQ Âcm»÷)#áûÿºˆ”$:<»‚}+Š ÃÔœgüc«¤¯UÔŽÀ‹«s-~X¿üM½Ë¨& ¡¾jÖ¦ºCal€›IÂ,aø¯= _üç@ü ñ,ý›3ì +'Úxhô¸ +sÂ2—þÍ5{äW*áH w¦ou²ËÕÈèxû6/²V}ýu”ûË}Nœ§Ç(ëæ“SÍ''¶iX²GPmŽýÌq[15ÝLœÏ5c@UÊ‚3Õ…JÁ¢ ¨jÃEbP†º)NŽwá´<@ÿb,¹ßÖæ +ôÂZ¨jR‹R{¬›CGÞpþ›Köð9ú@Ò:#°šîwÁ:B ¼P»ÇÑNOõL…IúmѼST±rJã¿õZR^ïòæ&Úog @!eB +­Ôc¶ž²Iëîåοò¶•€iàט{áüÑS6PZ‰M:œñW¥¶@,^¬íŽm`˜ þ?]X)‹c -ŠÛS„¢9û' ót[úºÙ­‡Â3-T@#€ºP)h!P×\`ù‹ØÿÖƒR–oÞ80ç$žÀ µÞù.7¾dAœ\^ÇuFfüuÃ)œ11ŽVŽ“9•¦¯kL󾿽8‰ïM2ñ Ó' SÄÿ{Rû°Þ?$uOÊT¤ŒÁ9'.0ÖÕ—GWÀ°lD¦ÉÚ8éPzA«—v"ÒA ûl“¢¥Fõq®WgÉœËÕû|ss¾ÞwÜoþçÊ9|üÓ·ŠÝ¢¯çBÚHûÑ&dc¸fŸŸ×+"ËkøÍly(´&¿›ÿÂ*Ô‚Aþ2ªQU˪X!¶Y_]\:ãéüê¢(Ü&@\Zï}PlvëDaT9A†:Î,00 +¾£°Óú·)£Â/ ü„}ðñ‡G*}g´ú·p"²mTœ-€â(6ý à­{vB¡I1!cü‹5³}Ú œüQ´ýÄGŸÕ"Ÿ7f:HN™ºÊð°+FëÑÎ øùZ0=SL֯ψdˆ_\À¾!À°ª p¯ ¤ÀÅúŠÂ~›Ž?~îóƒ,ödâL[7¬y>û=ßEwprâ“ìc4;½ªqvt†¯Ïê‹õ¾ó{œ„€ÅïÈ4'Ÿ}e +†ÕT¾œ3"O=ãp¿¦Ù‰‹ Õm†â`ϧOwž~Ù÷X‹5¹äµã€ïØú @¼¿Þ{¹¿³Úy‚Nxâë‘Ó+’±³;xùÕ>éæŸ³ùŠ>_Ñ÷dõUÜ'\éÁWó¯~ƒ*~Q»T÷h…öqgµI}iÈÚrÚµÝëKøª DIÜÉ A¦QS„ðjÖ/Pv€•(ëh³¨þ¯b hü]ÕàhoW˜\ +>øi¼4Mû«‘¿–î>O­5@3Ak!&…†…½”a}I–Øë×ßaµq©>4[eÜ‘NûÐ|S´0`1M¼>*…ÿÀ¯¼²ç·sÿ™K `«å6Hnêž,€[ô QWš ¹ùáw„ű e„å“8ž€ŸD—ýUhd{Ê;&À°`º€g­ö½a®¾WÑoA !òxó&_î@±ÑÈ?Y­ß_¡úÞŸ­/iÿ¯K-{ƒÙ_Ù%èè+¹/`'…éë‚ü¸ÿöƒíô)ˆˆÊ¡ÂÉÙæÊ*¨›´ý†¸ì}¢Ñ†À¾/àYŸˆï 0 Ä +Ô†üÓ/ž>»4*¿®‡ÐÐ|(²æ«¼IæÜC’£¹ÏUøž¥#ÿSeî׊̈– ÿüD“Åkë@~WüÍüÛÿùõÕ ¢ÀÁÆãö«;'”;‹æ~37ì—#ÕÇ€+ ºP½~FÛ´ÝTüú« äÏW-² +Y‘ÄÚqþ0íʉå|_ÃìÁåp;j}àòCéô÷¹ ù‰j°±¡|ÎòÄô*xÖO¶þ†\x„ÍÏRóÓØg' uÐò›;ƒŠNÝðë + ºI¸ãË&hñ§­pÍŠ¶õ¿ÛX=¹Ó2›,€tö¥«§dy¶MüÑ<Wþ€ Æ‘2h}ÞÜ0–0‚{C[Û³›N®ÙSKÚýþü_Ô˜úGe€¢ ˜ùTüXþcI' %Á­÷@¼µ­ 1.6ÿË>'à­7ï©#¾p}sé£E[ j¨à—~.óa?ë‘PØpt*¿ÎÖÇ·'rÄSr ¬Ïÿk³/¥£x à´}_ÂÆv’Sp(26ï ÿÊtí;<Þ¢}®î„.xúe.^hTÚ ¾³_YPÑ$ÿ!Rƒ³žöÊéñóO:oA;8¾9ÿñ€?ÇᩨJ®ÔþþwÚ$šÎyb½QŒêŽ—HÅø‡í€´ƒ®ŒžD@Úñ·÷U­(Ò#Ø?÷uAìê‡} ù3fPBAºoc²ªÊY¹¨ºfz‹Û‹LPï³K#Ÿ}±¸Ìý¡»Çéãû«‘G@ †D‰Ϩ}; +’õÊNÎ;Æ´†ö«øÿJ‹-€VHœßMäÇÕt +Blu9R ¨.p®œã¼æ¬ŽÄ^îí9–xÚ/y€[–µü×òmY€Ç} €¿PÿÂmÑiÐ…1cðZ–·à3Ä®ºôзDIöû0¾,öÖ€ @è¿´†žu—Í…M€i) àÛú˜^µzðMŸ²nsµŸÞ€?³†XÊbÏò¥þÒô°™{õ57ûëÌŸŸª»×'$š÷¶ø¨öêø¾ã»Rft'œ™ËøuŽ °:ÃH«C› GlmÃîù6 Ê÷Kì;ëÿàMϤ)êeÚ›y@M|ôèd£4((o42ÝÀÌmßG2dÀGuZ*ѪßÌCãÄžòn~ƒ®UŠï“8ÐßÐZÂÙˆ÷Eáì`ô Ä»KY"ýÿi wRòC>B÷%™¤"¡YÃöŸ¬×Gy³²LþŸoì°×÷¨þ°¤;>?ÿø“rGd@‚2 +CBœüŸ®¾z•PEõ-B¬x`¤`^zÀþ×o¿£Ð^§Eð6 7[€ÒÅøü | +ö ¿ò†ˆŸüÓë!î³Çý@ À^òYÿ×ïnÀ(¾*i QÖ×Zˆç¨Êº¯HW~8šÐ˜}Ü ½Êh„#),5{ÿ;d±<Ù㢭"òŸ_$@uÔHࢠðÌVÞúâJÕ»Þ,ø¯0H€ +“CÀÛWusè+\Ÿ†zšÉ° ˜®õh8dÇ›ÕÅmèàL€"†»šAx½Rdè_¬ÎVX $0° +’ÖÊi6 +€$,3êžlþ{¸Z55¬Žœ£Wm€ ðh zñ"}ãë€ù,hyc8}ȇIB}SâÇm9DÊ8ìÏk¤2_oV—~b–kñŸ{¹8É_ÿÜÙA_T 5¡,€1nÄ6öÀŒ(g'î[Šîr@ÙÂlÀ®=Ým±½â´HžóG—k£jYÛA‹dÓ†›~ªnvÞ©°ÙHq[ôx;>à;  …ú?©ÿ9øRÀŽ>_ ®ÔPõ½Ï^ѳ :kªåOQyl©‚´ÞyˆN}à! ðÅ{á6 ÏwÂXwyÂ;«äLd«‡¿ájZlAúDóø¬Ï  K-oçÐ"Ÿ,€[6©A_+´o  Lˆœ_Šclâ5Ö‚j?²Ú¥ý–óû=‘±”‹¹@ƒüºò]n-€K…ýº˜ÑHàÛ¼€¡,€i˜Nù==>SïW—4ÂÂR…ªÀb‰<Ùl†ê.³Óh—þ+ÎEÓ¯ý4 öôþWγ³ îY1.ÞûÎ1ûös>‚*”\ab›¹]ê^g9ãpuá,p-€î^zý5ä[{&0k¦¬VOü$Nñ?]d~}Þà$ÿÁ—“hÙ¬ìx ßSg5HúzÙàmNŒä¿×§Á¬"¥ã]çyÊÜXk ËRœ-L]ûîø…ü +xJP@ðÜáA×{É~^ æUJÕ<*—u©lÈ79í¸¥ÆíÞ  Jgþ¦o(~TñùP€?¤GêyM~µ½ŠßDØþÏ6 +° ©y¹ºÚ·@aÙ0úp¿«Q©ÐljÈ|É_[@±pÑú×’ +¢(ðÐS0£ûÇæ^@Q­vþ訵ã„qÐ*Z°“áªuMJ£Ùï¶bg„÷Æ®× áÞZ(l®Ø +Rm§ÔÔ\çÜǸr +ns¿°ï{ôf àÍ«·5ÆFoª¹]qû›÷èAÌÅh?}“hÓÀðp£BŠþÒW óàÆüïŒïùæFûRY/Α/„JG®Õ ‡ž³ßyO _,\oæ±ñ±ö¸ÃCUƒ´Oáo~§«§/}€Â?tî‰Æü8Þxɘë›ÜD–àlý‡kÕ¾òoþä¸^g €n̪¿LA+EàCB9ªxÃY¤-¤ÝïY®—vï&m=,îŠ^Ì×k†ÑþD¨üRw\½hçv”iãËqÅ€{U<ÜÎ>†Az pc´ÌñÁª7Ô/ÁðŸ~ùéGûí(ƒÛÁgˆsh"£¤"œÜ+,±ïÞ¾«·7c8ˆó Ã|~Ð9ÌÏ×Ö¾—ƒÄÈqÈ_ràÌ &þÇøD%h9§)Ì:ÔÇÔÐ+êxýa±üoµÏNžëð¯劬à@½œ@e°fX'Êp.5¡ÿVàÒQÀs?¬}¥,˜»êM ¯ößþq«Àê%4z1—áàdØ…ì?ª¦»ˆàI¥£¥ËÓA .…ZéÅ;¹ˆÐ +'#Õ'ž“Lò!œ¦p|®Inæ>Œ?òÒ*X + ×eèkÖèxýêM÷XÍJäX7ž¾Ì˜:ßÅY†^{{ø×™õoæëÍWþ]®~’|ÆÆ¿®fs~p›ÿe= Ü©ÛÀš’ÙämDâ´Š¤Žt@s¿‰=9%?œ·O7/ Ö3|ß&ýÉ/B¬ÅâZ 5J¡šØÏ6½ÿé}Š_bû… (÷j|Dçg ö@w÷Lôý†0z?ažÍáO ´ðåÁi ÔÃ@¶;³™,Š À0<¦>€‚ûLôÃúNÅ‹íeð³ PŠ_ÍO°;›ýžÊÖñâ¦Å$üy^ìŸ,€EåÛ@ÊÖ’eŸµK•ã—üõ?"BìÄ0?VÀ À8‘)«Ä¥6‚¦žpÙ%ÀÔ°‘8Ûÿüµëjÿ‹ËõZß°`i¼zõZ-¨¾r4o}zr(‡ËHûWe egC8úZý.5ZOº…`òåè:ÀñIž9#ñÌèüSí§  T0N¥ÈþôýS›Zépl àð0 /²p×k¯Ý0[ ? ]c~LJO°¨0(ò*É4Hy³vr3Ù]{™v=”À¥iýxe¥þ‡»ÖƒØü 5§0YUUâüùçõZ‚ µyí£Ø'úëh Àæ^Ä~…}‹ # ȯÊç©p@tŽ5(WM!V @¡mÏ«óí ä0OAÙ˜nꙞ¶„zÞ†=δï ÕdÀÖÿIogäãaéüsM“„ONÞ§@ /VÕþÅÅ•ÀDo³~Ïá±=†Xˆ,€ÌXñ¼ÉxÙo¯?™ËÔ _ †°Ru/ €î/c<ñÝÀ‡4ŽîZŽm6«ïÏ̉µÙ×ò÷ýÇ}]>D›«Õ¶POÅ( Àq¸?¦Šèæ´—Ÿ˜¥d_b_¥ìЮÅì‡"îÁàÆ7wM€²Ò°¢µ9é(€Põ—`€ •øNÞj‡î‘yÍ阶ò +F•øð^ýŽ?aY~Ò øHÒ¾ü4/òF KÉk[Xõ0`[8ß½š,€ÚQЮAé÷H0ýe àØÜOýtÀ4ÐÏŒ}¢`H€ŸùPÀ ÖÛ³u À°¾ÈüƒÈ au—Hví?0G½§üEÊš:  zF ¯‘ž@¨Æ§Š_ºuÈçJcöj½N  ?ÛZ@Ïr†˜•Ãan,öCíèßîHSD6 òâÿXªa ª«`” +½)hõ¯à}ti¦§Î,ݼ·ðø¥vLÒÅrÐ8ò+”÷£/ž&Hþº°^=}º‡a¨[ý_@г=Þ‘ ÙÙ³‡ç‘½k@—@&*´»®z€®©ºsØM€xHHF%Ñšš +,õ)â¨üÇù˜Í=ý#†™ AÊíŽK´í.‘«æ_5ûjZ~ª¹ÑÙR[’G™‡Ýéñ'>kà7ˆY@,‰_V€ó~À›d”*˜e˜t[õÃíÜ6–Â@D{fÛd +‘}¼Ì÷[®ð° Ý­ݯÀÐ]ÌØF(TôÏ|ùüËg¶R‚¥õ' @0FúBgŒË¯[„ÿÙ—$X†Â|-€*±e„”9åïµZbTS€+o 9G5Fa•pqqi½£>Ÿ#œ`C}¾¼ô]ì0`±’?ç±»Ìb­½xßµ¿y.¢µ <±Þ tžù@Êœ– Ñ”ÂT®2ü¼9OÓ¤"ê õD!fRµ=b2¬™¶BL¹f–üf¼ïÂVfæê×KîD"€:ß$ô%•ßJ±šR“„qÏX\×…·-©p³¼áþµü=O+grl„È”Xž° Ã}ŠÓ­¥¬`q—Ðâ]>&TøæÅÿ|±»ûx÷þgÂÕÿŠ”ÍÔ¡DÞ”ƒÄâöí7×ÕþQïZÈXqËøb& ¤Ó?ãý¿üø“b@›ÀÓ’N£pŠ‘{ Ü®¯½Àw²ß™€o¿»gÌ€„.ŽûPMðZ‡zP”@-Œ²ûBQ.L5é„Ýp´ ÉK @t@_â6J|åÜÅý~ýc‹ª„„ç–Ih á"qp‰ÔŸ… @°I%ó£{Wn©¾ÔHõöæJÛžu’_ã2••lØô­Hv$RåMª(]Ôˆ·á>làzqE„+ŒJvJÈ +ÉèDžDÖØã>!u*î@³ç +f:a…³Œïb—&©+ +b_(ì¸0(™_5 ¹òJ +z®€K¼Z_"Í„3çä¹ï=οläL³7B.ÂRxï-Aà˜S¡L.¶þ1ů×Cû`*i…Ùhô˜ÿcMôiAÐ @ +]Ddc%(¿Ä¨ZÛOÎH h Àú4™A€@ííð=´G{Ǹ/Õ¾VÀ 1œýCèÕò -€îH§ b§„ÆèõY·,÷ðîÝÛ×,ÍüÞô”­>€²÷3@‡tzPB Øóû¹ñ¢ü$ŽhÇcT¿ž£e`y¤c}Ÿ°âñ9þ·-°…¢xœ iøÝêxËœJàÕ¡(tœìÒûÇÅÆ`)ŠZuÕ:W˜ÕVÂTKY¤.¯JÞuW-­†G3\•v ˤ´ÕË­únF*8?¹‰û=<£ö“~:fú›xÃÖ¤TU9Êu©½ëzÜÕÅ“—§Î¿¸¼"ùuñÞ«¯ÅËɉþÃÅ%˜¿P\d\*1§ÇuȾ¤x1%Y°ãÄÜ•]…ÿËeå*9Žâç0‘;3o¾S[C"}U»4álö»ßÛUÿû$÷›€–ö‹]Žbãƒf½ØkOTÿx}xX?£ø¯¨ÞçÂe®n(l¬~¨ ÙUä¸%7¤—ÅšðÙ(Ôøî‰úÑ7sž½þÕ}`cÁ‘¤@F ñÍi8Û¨VÀßÚ@‹íkç¥a²øx:W»¥ø‰Ä(1ÈwÙTmÿ±ôÕQôÔí·† pÏ=\øD¹ +£ð|/*XµÊè+¼‹6î €bú] °ˆô´DÀäÃ…t ²<{L½ ÞЂÀ:”Õ]cUÕPÛaÀÅÕ{IëÛš“ çð }UP8Ùß-•¼j8a—ÃÐaÔËzJwée°QÔÒÕ(Þx‚^ò$'âÝZŠ×¥órH‰ÇCaSg¨„ü\̸”Ä5¬O)‰ÃÐ +0b@¢xy{¦Óü¯èóú§‘dyEªÔ†Û#ÓÈŸ­[¢=  ÄS»#×U† §(½®¾ŽÐ­ŸµµM7ñ +€o¾¡¬ûx Qž?ßÕ a?` (ÚˆPu-e’&Àu=æ¶¡ge,DmƆôJe½øµ*q÷o?—àt„;cj¤O¡ÒbËÚ@ˆ_‚@çþ+tŸ>€ ´à†Ÿkô?›êèŸÈoÜ«§Çi„ÿj6ÅüÚß·õmSãçr'ñFžÚž‚VU™ã¢Ú³g­ð·-€ü#<¿‹m ÿj Åq—ÿ"´ïÎBÐ'ÕƒL©l4œù#¼¦Ýñþ(þ@Õ0ê­#Å„‹Ë(CÔ*j(ÊUFZ1Õx©¾Ö\+µÊÛÅ@ÔvéX¾€Î9Sª˜A*½±<ñBE­-ÑÐHáš@ +YEY‡™Áé¡Q¡Èd^êW•F„xå‘uµ\Ñ[xQ¦cÒîØæs#:ÜÓêd¶†‰`ôþ[$WÿÛˆn% +sæ3J–!(mp™EÝÆìp¤9–„Å•ò«ýà>… pþ/ÏRÜ~=,enG°ôY(h» Yª ¿€ +uXÿŸ¼÷Á+@^êe>NØCYGÛÓŸVüG9ì¬Þ‡¡ÕIá‹€=GYPñKfd«Ë{Ëâj³ßNÀš˜žN@@Áº_?8TÝÅ~×Ñ X’ `ÕT>r?Ì/9ßAß·ÒúÏ?ûRöÇGäíì{áwÛîš–´{ʉÇ%" ”¹º0ƒÉ3b¿‘fÿ©@V{%1¬"\Æ9´.àÔ¤‚…tTRdu.@8šZ\URmY¼a¿uŸTóÒþh9ˆNLèØ°Åhà©Âd *ähƒõ7êNÎLˆœÈÉzVöWXÎO°--—½œf²˜Aº +HÔóbd1©’žêqù™´ùy&2/ý’B‰§Ñ_2£Î"¬Ì¯/¯¤RÜ2ÿÞv $Ms@p̉Žìyüä2+Ò*vP@ú2R,‚’̘_ d·øf<¹–êÉ/ʾ6A¹ì +övïw€ÒÿÝ èϦËV@¦é`h÷g´Äþ1„NgGR| Åp{Œ‘©À±ì4j;A ¼Ï–E Þ§ €ñ¿¯ð“ne¤â»)G>€"øãÒ÷Ýð… …†¿ öH€»¯ +úÖ±/ ìAâ>†H™¤•ã!Ú*Ð÷™Ö€£u}aH€ñ—&T‰Ü‘Di `Œص†@íÈ{bÈܺÂUrQ'9Î×$€õ =k9kbTK1ý¬‹íÎcðVÚR +µéít0æÄŒÒQÃufF ͦ²~í+L­Øzoµ=sz».ËY^Æ×1åW˜"ÇUÁî+ùœGŸR]QÜ×zƘh¿)An<ùœ‹ ÙëÂ;‘3c‚Êo\E¡B@æXHxr‰œ€äÏzžo‘ß-íúÝ¡öóÝðÔB+bªíÐþ»»¾U¼8? ÃblY—ê.äú̾̾†%w1lÖÿ`ÿ¾k =E÷4ý¥»»°›Ö¾ùŸ~ùù§?eš€ç$L1\Ÿ´ò, ¶ŠŸxw +÷C€ßsÒJï8ÓOº/Fj@-ø¦à‹t8'D^lá‘ÏZ¥'=@«K"ù?’©È„/ø?<ñ®ÀPx-¸~»ðäÑblàKs¡±—çýK`ö• [þ§*6 òªPNÖ>k8 +ÐNöª„ñ`©M×Fº&·9P[¤š›€ò¬3Uá‰¢Ä •ÔÜñˆö©À>#'éôëdyZqÊgZ]\ó+ȶv}Ê$Òrϰš¶À¸;åëÆ› ñ¢[tÙYáuBíjéD:\qs)ÞncgSîrõ±¯ÇKÛ#ïÑ7º­E>‚˜§€íò‰ŸÛríbìåCb®Òþ.Jý· (” no½ÞÌf@È©æNÇ?ìÅ£Ë:}Üß¶ý6ôñ1€è}L;c3dÂÉ +a`i¤Å¯Åoïÿwo_+© ¾M€Ř¢¿FÕÂý¸§yÅÿa|ñú•Ï…½}óæ•VôÖ2ZO¡7[ÇÿuÛÂÃô2ð_¶† nã“`ü‹mâP,o‹ŠD‹ðùã/Í7¹h Âÿ’\V~‡tÛ-̵y=] SãªÖu훫á\(¨*<žqM1Êo,´˺¨üC¿Õ)Y{“`¨¯Ú~³víˆ+î¢Mìò‘†ÃÝ&ãH?—ß>a^æC#G¥Ç»2«µ]A®Õîm)Á ŒbýëóðLáý¦SFðX{Ã…»Ø®5§Òw¶Ÿ°ôêcà]½º•@ÀcK>zȺGTÐÞîóú–à½N€ÖÿbÔ·'¾Ž!Wºñ3¯ˆë¦'°Eo¯>œGíÛ4PûÓÔ¯®üâuAÝïn`ä[ø"ÊoÙÀ/oÊU5ýËÐxÍ.ޤ ô/ò„He žg*0ûŒLóò$Šÿµà ÿ_ùlH4ÿœ;»ä$BýOÀ¢ € ºó0ñ¿¢¦ñ½÷"—÷êºóŠÝÛÌoŒ¤‹õeë%·°§2}•_"¶pY[3R ø}™ª¸£ÞuUÃ'Z-ÇÙ5D*h»jõ(ÛÞ›úk;!y»;Ž?V´+[á¨>lË1âÕÞÍÄ<ÛÐq¹­µ7Æ.¯iCòÐi‘lN½ëñl¡ã +I³»­â-á²Iy’£‰0»zWs¬žrî¦XånOò¼â:¤ÌÿêËK):ÅŠ6ê .½ƒš|´Œ­^â—jÂ}«8‘û¡·M€OƒúKH€¦¨*;­œy¿¯†€<–Ú :/y`'A¢¦#°ý‹ÃGšÿÓʺCv,•þd`Ì£YÃ~—î(–W'`ÞóÌñjçéQ<"!ؼzûúÍ+Tÿ°Þ¼)½¿\¶ “S¥û¶H'Áßœ p—ý‚¨=}(~!àɰ ÀÄ—Úe.Eý»ªä‹ðùa=nÑÀÆ/ßøî[-n^-õ¡n}6ÜAÅh‘ûn¡3ÿ¹ÑÍËQ¯ˆó¢úÃÈÕç¿ LÔïDŠº Í¥ü:È‹6Zi àà¥í/ ³1‘¢Cž=S‰mU=+_ŸTý +ÊZU">ýp/Ë1jÊ*o%ÏÄ÷›Õ)Mn8tËö¸žà=ræîññ!çmœÿŸI<ÎfºmΈ`|mðÚoVPÞ·Ÿæ¡ GòæbÏ®/®±]#L®¹2²fíÇÖ‡›¸}è{G8(•y_¸¹8Ÿ3_ ^~sôâðøðôاÛS T¼lÖg×ëãóÍŽ´µ—/×m¿Ï3™òʇ„žäíÀ‚.®{}M;n.û>´fYf–cÊ×@EÒ,š¢;Ej;Q =Àjÿ1¨”U-­¬ äjÓ"|þtXeßÐúÿÀš>À%ªá^„‡Î1 ñÄžaw§©ý(‹  +JÇ~©ƒñûòØ ü¿k¸Ûø¤ (_üŸç<ªy¼zõökùcÄ•£0dFî]qJÞ¸Ÿ{)›e‘„§œ¦[ÓAŽ­­Îç+Þ…—Ÿ}ÿƒ;ØR‰*aHp¦¾ª/¬Y€þ'И¶ ì!ðªôñÂúâž¹÷üK/õùžeL=“éa{Ö®óam«Jèjv6°›‹ëú6ÎíWgÅÁ[UØúŒß‰˜àËÃÐ@ÞJñ€ÕíDŠøÚu®ÂgÍ Zó¹°`g¾uø$—Ü›IN²wüUÞJ 7ó6†³ò6ëÛ! â×ÎóÍ -”ü“£¼wx@c^ùú{?ä‰zÔ!çÎüt½ÙñÞ4ˆ’{cæk/uj+™Xíùϵ¦È Å)G²Ù]š¡ì ½$O +×¹Ÿ}Xâ¥üýïY4ºe]€X\žo9Fûgm𔲶÷Ï€Ù|òÝØ¿8‚1„(ÿ©ë fÖ†]oPúeäRµØqÍøiÛr ,~Nû+d¯ãg§ø^¼O GZ’cüÜ•cƒq‹^ndÓs%nèÊòJw9^Ó-^6œ’²?„\ÿ– ˆ4î›l5€û: :‚kgý#J ¢ý¹˜ç;x-‰_ì®ÚוÐÄVxj)Jõ4Ká8 öÐ@q|üýJ~ȶàÀ rG枨‡ë3_™ Ó³“¹G$íuLç»m¢êy Œú··÷EUrœâ ±1÷­eƒãMzË÷EúþF Í‚Y"p’§5ïS@}£êÉ“²ø&|Cg´õŸ±?HýkÚF "ÚP<„X Ø ˜@µ"Ø …?Ðüñç³MúzHŽ|-øÙcœP]þóSè„úéxÅ]à™›½òÉÛWd´F¯ç»±/å<¡‚G€eVàæ§ 'L‡¨Kýý7Ë„Aoj)´ %f ìçÊrXÞžbãÎV¤—eå°†(ʰ>¤ºQÄ%ñu¹õÐÃÚZ#¨–!Áêd½º&­¾®Äñ¾à_U3Þ0G²WSž¨-K‡‰>  ´&¨Vư Ú Œ9>;9³àììÚÌY¹ìÎ!1éìÕåOû¯3ÐÁî›.}]¤¿ÀõÅÎêËÕÓèúh}ß’`鯸’¥î•wVR½¹á’¬€”ÃÝâ ¢â|"^öxÜü¯ça~AþW¶Ûi*äQ¤X lÅ·Àã’¶$À³»P)Ê7—VÚð~áxö¬è+á]æuèõáaÀãB×Xê,Ñd:4@Å_wo7, îu±EKÜvðÕ-”‰Ï€‹Ê\•Í>Pªr²§ù‡ÎEæÇpj®ŠÌGW»ÂçbsÓTUüÐú¸Øfîèó—²¥íþÒäÌsÓnói²Û õw¸#Sæˆn§–O0!ê7Oa“wßjëÝ + ·h +sX:_¤Û¯Žî¥3€£Nûö0µdœ{¿0´Rýµê-áŠtàž ŠÉŽÞ{à.ZD I‘O´û.ªÐV?—U—f{?ŸpëÀþ¾/ëK-­Y˼Eùú<ØÂX}÷:*RcÿÑÿá~ üàEß)ð<ÏTíbs…h¶¨ûn²¨O'æ¥w¦‚掾ø¤ €`z‡=ÛÝݵ¤ñ¬X’2‰pÇà'¥Å£êL†o]×Èi^)ÇŠp>׫ؚÿÕEþ¤"O0U#çctýû÷—çÚö†v¶¦Ô©ÿ÷ÅÉ>,HHô ÞE˜ÍtÔ-áãäjsÛ\8¾%¾§Ma ›é0_ @¶¹±Ìœc„Àÿ½>Ûß|Õ=‰æ}qsQšÜ­×~{¨i>rÇeâ™ðº&sCÌ|$7úˆÓXêòhü…«Ì±|0;°|Ê×¼ñ&_rFôEnžßrÝsæFãgæ¹›y +¨ÿ‰©)'7QHugqQz³Ð%9Š”úAç' ü¨c´G÷5%z¿ ÐD›¦9 ,€Ì¼7LÜVÀ}ügïïB{a¨ÿ‡lܳÆÏ0àlØ!À®™þ”®ö¸Ãxº3³Ýv@Ûý%  €7¯Â”|JÇ[ªº\€©¯+pØQàHD¶ µ&P–™¢ÅßîÊ·Q0¸žÑæ`/·üâL†Ê=¡ ³.˜¬"‹4p›­À±«ö?×þQ9çcB¯®ð ©¹üäµ_½Üœßâºù¿onþã=x¸¯/±>äÛÞ·9× ºäÃõ‡þ¨ø]ÜÞ ¬oè+©¸çºoOV·ÔH3ûxn7èûë‹dîéd¾^8i}Î\Véø•î›Í?ν¸»¸%±‹eæÊ˜)s tÌ“Ãd~sûá?LËdhwæ··ÿqs’ON™“^ä”ëÕõí-‘ÿÁ0Æ>|Ÿ ½sKT Ò(¹¬(ÛŸzVû ½*>_{ˆßb[/§¯ a¿ÈL€H9Æ Tÿ»49—wä¿[ø{ïïÂÄ¿ýø©ÀèÈ@`‹øMðúµ@.õÛ¸ï[óHù»3¥w“])P¶@ ËóMteC}¦)]Ý †Hl‹v@+wáYû$:…’â©1€© AñB$ ¿<íS&@"Ìàа–”6ñ°"1Ë;%ð¿qÝf=!U×êÄíAÿ*ìÜw×\æh±ô\žÑ²£ºà¥Î8/½ë™mDŸžØÆãŠ&@ôx¹ +0á*Éë³›­,U³CÕ^¡„ßÃ/ø[Ýæ^Ý9É&s£““—³Ù\fÚA2Oíö¬ù7«sÎ+ó)yªùù§3ßx¶]—›kŽ»0Oÿù ™”±q|±¹¼ô°Ï Và„;äh:iÞÔÀ)·qëŸç9Ëä)òìýÅ‹gÿb™¤°tH^u¾­Bwz5ë«{§'ç`iêð”.eëp1vMhàÃ@Åœî¨ëz¨P8¤W¸;ÿWåÿ÷‡,€Ç—@ÀDõ»rà‹±V±÷‹îÅy6qð ûk“›_àæÚ¢^*áâ.ë¶Ð·¬w9ŸòÓ,Ç Ä7&…šDôÿÒÀ|šãK€B¯ûÍ@Ðü7mí=CF[x¥»ÿb'r`˜GéܪÐ]!£ûFÕ,>´›æn:Ûk–Oà  +nau"çÆÙ›|kçÕùúœøöÝ“³³Údæûƒ‹G§«P×ÅÞ·“ÈB¹7!ÁƯ‹›¾\R?IO^ËÌW#ó««÷Ë̉ç‹ýÃÝ…`¨ÉŸ˜Øå ɼ÷Õát¿å— ntÆSæÙcùç÷¥,2_“97…Ä;ó²kq£ÙÇdï*“m +:SÜ/ÒÂwo‰jÅ®[T<ýøy¦§W +n–hz   »ùܶƒîN 2 _Ãwm€Òýÿ¼ß +øQà3Ÿb?Ø\p@Y…¯_ý»»\éDöåoýB€ž XƒÿRCûëÆ>@‘‡(ÒøÂE)È TðÆŽqù0¸x («YË·ð9ÜÈ9á(…´++õð¸ì6I™£å£Ñp„1©‡ìú°IVzKg—µÛMÁœ²…ÝgÿcÉö8ÿK&ô+x!AW~ÙߨeÖRK®Ï>ZW8!w¬ÚÛÍõ÷˜Ù+¨#èׄµö4mÍ›ÕK¹â½Ï6p¾áíÍ_pÝÚ>5+2û‡.*lN~ óëï×§ù|ÿõ÷\ä'3×"ùk ñycœÙ•9©ÝÍ|œ[ Á›ØQõ†ÝÍ<- 3ϵl´ &ÌÍÎç)Ù¶ëóÀÉ®ÇWä±# +%" 4K'¼ØÝP}Í*þÏy™'éhr~ÐyÉèÿÒøgËÿ¼ÓÈðß=‘±À «¹K à­;^l¿ÿ›\¥ùCÿæ¿#“ö—íãaÖ,/Y “T Õ{ó‰A8Â9¶8w+Êóçм¼$ƒ-„´†PAʳÒG¿¤¿1  3ìÏoó˜™vˆ›@!•ÃÞÅÐûV¤\ 1– B˜ÝupIý Ø/wº¦7jÃV²¤ïý|í›®Ò¹å6}^9`ë„~\ñòôÃõñÉaÔ ‰æÍI9]qýBÿ4x..7W«áDÖH'žÒ*×2²uK>Sæü6gÉÜù燇Ò¯V~ØÈцKþ æ‡ÿ§ã¿êZ4àù›•nRrÖ>Æ@Ôç^õ·6¾ƒ8©¯Ö‡§ù¡ïGOÊMò…Ÿ–!¬¥dË$é’;ƒçµ>úRÖ>hL‘õºû‰ÀÐJí?$€×R“®EÄXàŸKîo›¾èsúÿa  ú¾›, ·¡ø’öÓo¬là~üU>y‚GtS B@òË~¿†ÁZÛ3ï<ÄzõZJi%ÿ¹§ìÂ9·Ðh«Ttô/Q¼ñZ=0€‘w}ßK¥QdUšWNDŽÀÞÓfþa†\‡ú£ý*Që”—;®Ï–dÕ¢ªÚ©|UÇRk3i-Zaå6HB^™§·-ÜT|™%rVö 池꜇ +‡puº>¬.û|ð£†s›ÿ0ÅÌ65(O^•›äÛÇŸh…kœ¡ÛCòÉ<9§írrè¸þ‰úÙDé.ŒJø0íö2ö+sÿfŽL²¹G×7…¼GæÞþÖ9fÔ±ƒú;'§$_*óqÓ-‹X`UôÚê!SbÕΟ €8ãg Ї…ª‡ÛÊÄùYPï˜÷-€˜Tøÿ‰N@ùÚÝåéü;š÷,Ú%“У€C´Лž×xÉ}¿ (ù%xm‹û!¾ÇRŸ byÍý‹÷œ;¯à¦Êñ&‘·5n9'ó†/h=nN#Ûðê0ÐÒØÝ£inŠ«øŒ^c NËçF%¯™ÑB¶ëKt ÃGøþ¨J$æÆ®Òí.v˜êœŸ*@©Ô[2àüÖY9Tv+·l±¿x}³±îW ƒš!‰ó‹«k¿´>>:GþÛã“$ztvä—ˆVgÇH#…D­ +2‰/) ½)ÔؘAÄ€/à †êzÜÁªŠjÑ7±ªGÓHˆ¥é5V…þC\ø¢U`{êacþ.‘¡ý÷ÿùw,ÿŽç6Ò ðiÕ^ýB xÈ…ïQžF¯¢…¡ €ÏÚ¨jU•Fdžù¯b'ÝõÈ|D aøuK.70;áŽÌ30‡Lw^°i®Ží˜KÖФ[•§‚cûò`kç½¶âxÎÛÔ7ëÃ2}F–øåd}Fæ7'Ü5åyõsÇr_;À§òñÏíO™Ê ¸žû†Gª!WMüð0çì²l…åL!ÇYžš ‰Ãò"íþí%ºvž +˜N ëöN<Ø Dùo©s,~™ÿOÝ‚ûvÀÏãýŸ0¶DàtÀ¹ƒÀ-䯏Cøû+­€=õ)ÿâÆû\0às„rÜ”Þ:ÉýB#g«]B`²Þ¥ž>²KÇÜÎ'–¯åc¿÷ÂÞ»6ô·8]Qç1Ö•ü ïÈ‚NL*äÓdÂFo¥V:‚× ¼\õ\ëL~¨E5m^÷Û~õö«÷­-‹*¹©òuˆ+ö ÚQ¥é\\x$\0b ‡QÈ„ëI»”ïd$uHrvM~壗\Ý&ËÎhÅA=+s(ü¯¬*õÕêÁƒR óŒRünÍŸçDIŸ4ð0óõmþxe>çͱ™“ê}u­¯;¹—‚ñá Wë£ÓÃÜïÍfö?Š G i_åI´/°×+SH)~MÅ'“Hm^|ÂH/€xäýª!ÀÏ ŸÚ†ì{—ÿÊÑ5ðÓ¸odvüÿ÷…yv׿A ðhç%ÍÿO!Íð>›H„7Í ÁÍ’O4Öë¥juo ðIÊ…}!^QÝÜÇF‡\$¢«;F±ìRÄ“Ð3ý¼•¯'KgÀ2OGôZvh¥‘´³ñZ -D"ø3eyj éçvõÕÁV«?¬ZÿK%êy¬&ŠL¨µÂ­ø©üÍ „UêA_2=ò'¬÷(^ñ>iC60•ùüš$J8eæcœOÀ7.ó:üÔ,û!¦‡|M¦·ý¼!WwuHÄÃjàûIâÕéêTp'kcŽÿ‰)3Aøg´-nÜ8ònÇ”¹×r±9™2ÉÝ?œ#Ú>\Ë7[\lZI¾«5OUCÙýbo7µÉ"yS(Õ´´}dD”qà½iÔY¾ Ž[mѦWÐÀ¾Ÿ™˜,î׃ðë£K„þ1ÿ'õ¿%ú5¿µ`Rú8ë… A¹ ·€p"àÉ£OÓ?ÈgbCý’¯ÞMïWßy´½êžÍÒ—¼!^~r«Kè•;ŸIœ¹;,€p“¥º=»él™îþ‹"ÔÊ__c¹W–”70)O0Äsk犿 ן¸Õü©Š˜xÞÅî³TA +>ëùæàà'è)qrà[ý³\oNCöö”êžøÒŒºaÖñ-¿D€*A¡òQËé- ƒê:¦O4Žõ$µïÁaH]×êû„‚AVáÌ‚Ê^ZßßúÚŸF;×gŠs::öCåD6QUu’·}À?™³ÏCKãGÒ×ÓsLžV.¶ÉàÀCÑ7ò$Ára™yÚ?'èo:¨¢(S­ŸÃ[J¶ŽµF‹ç‚ªå–òV×?Ö™B·¬ÃöŠÔŠÒ+ÌïxÚ¯›~Tõ`< Ðäüm(Þ+øy°mØyøà“À4€ã2BîÚÌhÞû›wMôÏ šµgñž5¸aNÔµ#­EîÄ6 Õü±AŒÆ¶j;T$.À4,œSÛÀùxœ±Åÿ¤¡ °—IIºN§1˜üêÆ¡= +í' à) u"ù뉑‡:hÙ[÷eþVû°;à€ƒÔ\4îô {Q€k«z3% eÓˆî¬ò$m¡“ŽP à@KÝÓg#†jÛ'‹êdŸ37ßj³iìñd®„çœók)„”;K`dÞ&—t:e.IQ÷qð¿½D&L™»Kæ±~DÕ·"°±î¹@*ÂR”ú—Rµ\Oæd`ñNà_Çß±üùý·‚ š[HÛÿÓÀ}P|OÀlè;,y^DŸÔ~Ö±k³üó°/°ZoÞô½j„ðÞUï6·5\ Ýqÿ›ÍBM„è\ÈÎY–éÔ Š§LKüÓ¢7¶ŽCŽ€GP-wÒ÷|ƒrÉtfÆ0@Wµ%¢ +ªÿÀÑSq4“êåÿxÿ2 €ÍÅKø¿Ï9l°=À€#·*a{ÊÔüÊŠ5^Æ•âl©ø1æå`¥wu?D'ã/ ÐÐV{~~’'8ܬÖv;Wê66ˆº³åõÛܦ»Qg.Òo7%à:Yâ€næ"÷:ó[<ï[¤f+½€šùÁ¹õ,ÇdNj·7& ŸÏ\ô?_d¾®fŽƒSÌwd.Èœ?±¹™pJ‚Ë««êôWû]Ô‚tÔªo¬†¸¨IR9ü® *K«©e«¡?`Ë3ÈBë •4½&„U‹q@®ŽÒ½¶Ø0šœàíù¿·öW´WPÌ¿Ûq°œ+à[—‹—ô­@½  `?ö¿D|Ÿöà ÿ×`' -…2¼£¹±!5|Ê”Šº¡ ‚6ÔÐÐ1$÷… ÈÑPR/%A¾$TzÞ@LÄc†Ç˜héJ=Msa;ÝTfà‰@èb­ ] °²Dð ~@#ùïî-Ù@¹è(ÕÿWhý¯öW_iü!†ÀUzõÞÞ!*6µ>µ¼©/ðþ6µäùöÐá»Ysn…ˆõÉÙÕ±Üïã`—jp†š\¸TÅkÛý&Iæ¾EãÃyÖ´ºdä‰çÔ¹úP2WÍ_¬O¶2?s6ÌëãàKãTÞó?Äõ÷äm>yØÌiàµa[øÏQÛg(®¿çÈ\c€Ì7‡«Ì§kp/jÆtæ&Ö—û{û/ùí6³A,Kõÿo= + dê!Á¥›¨ºç)fN÷!V= ²#;¡ÐÄEªhÕE€÷p“Q€‡‡ wùÿŸÿOXï‹øÿ=Z¿Ÿ´}¢lµãÌöi½/ÿy(ÊQ@î}ý¤“JÓw±èßÄyà¦xÈ&œÏñà¹hÆ5ñ|¢eô °¼vÿÇ´"(Kë@%UÁòzù‚èÊ-\9ÎL*fOEPŠ´V±J=ŒÔL4÷ùzµpŸ;-?|[ìëížvØpŒ_ôØï##¸û*Zî=.p” Vû'{ûx°Ê–ý^Ev5Î8+yp˜…„Îø_qYÉëä,§ Ow;µ«L’Ž)KÀ‹­¾ \½üªbƒÃøìsú8%¹ÁxV ¹5¥­ìk<­Ìs'Z‡šùÉÁWÆay¹_<¦šÉ\ûÁÿL5 ©_ÐpLƒt€øÖÓ 7OÖ °JÍ êlW8€‚)z «¶,€0ˆ­ûà^ÏþBü1øïJ€¼GðxHÀüW_¿~5.Sóßó€‚A÷iœ½k-ÿ9È~-€ *¾QèòcË DzÖÍö&si¤;ͪngnïry)f¨Ïƒ:sœ7ømØ{a ¾8Žÿ#J’« Fh¾{NÇeGÐd2ísm•D¼-H§‘ûïÀ¿}óoÿ¿åöÿ(þ—Yj(KÍuy¹YŸ®ÐŠQ\–™£„¹ÐÛïMô,º».»"U,´|ö·\]=ßÿÆ"óØÚK$‡)ó\}N÷1á4¦ê‚Nê´$Ÿç<ËÀÊñú™sss‹ñµ›"u­ðoçßœ[ Kå-_¼·BVT +˜™"O±×¾ë€û® e_6¿TlÕÿ{ )°irŸ§è^¶ÿkÜC¨ÿ{:' oˆ Ó·-€Å®q…ØŸG ÄÅšû[o¸}êx£ó“†–ƒAM»Üå [ô· *dÞ +É›I˜“-†¼€L€enÁ¯AJk¼&Iä•(;Ü÷ézëË•³óOù†ÜOû\ÇZíö‡ƒ?¸‹Zd¥º&ø Ãúø°¢VËö¢^øW €UVÐ&üË:ìÈ”-cÄ„•6uz̨oçõæÌããÕ!?»ËNç7®/}§pcš¥Ï‡v'pe lĘyr;^fžæ¹ t/ÌÉúSæãA¿CÏ^™×0g¾^d~œo ØÈ¡G%̉ \µS…’yn 9õ$¤ËK<øï´êû­²f{–ÄÍt½k ¥d üæ›ÿ‰Ú}ñ?ð¤Ùõï Ã;b!VªEÝÅ?` 6"ÛYüj«°z&P üÓhrþ +¢ö3(ó•8|.xÑÆÿL÷_áa Ç«É(x•aÿ]¶÷:ù°¶–ÿ20&€bÀûTÀ¦’EÓ­öþg¯ÃÛ «Še3JÍOLOÜÒ8øCìVªú©#sg«£³îÀoø°_vj¯N}Í5Õ¼™]`DZäé«]öqè–HÕIî²­ÈÄw +¯OÃQÏOOôŸÉI6yŽ83÷<ñXÊ_lŽÉ¡2'Jþ“üËn¾A|_fHÜÃÕ±£‡Žšy|¥è‰ÿ|}zzr¢ï>GLbß¡ ;ä{`$]ݤ^ä¡zU«Š|¸nã>½~‘QîvuçéI+ Õ°;ø¾aIÕPÆ7(씽(Ç¢©Š_¢ èÏ + ¯( ›&gáW[¬RŸ5C‘óYŸy@Üêzwüz.p5ÜÍáwÓ¼w}0öîäõ¯@P&€RÀ»¯îæ­úÒ©[÷ܶ@ Zïj¢4ðÈV›…q\Šw} £úŸfª Ü}h(ŽàåáÊ7îψöðÄ|$œJöÂï$<4rê¿H¯¸,p¬@Uh¥3*xurDòPððä1q9-éÕ)ž +öyßgÃyâàŠŽl¾’¤/í3¥€SN^šfÉÑ”9"B ÀÜIÃÄÙ$óPúdý@òV8ÿsÇ#&ÎŽNׇsæ%ÈíÆ¯ÄiÞùûyÌ%WG‚¦›.­ü*2ËŽÒ‹ëÅønÉQ%Sò!ãYÎË~ƒ0þ õ¯À·ï _ +Í +e¸'ríO3çöÎ3}ŸBL€ ñÝÆØz&à“öÿßMà! €ëCýO" £€Eófú|´ ¯ŽÿùÝC{_§Ñßæöy«U³é¼C¤ x×Úïh¹Ý)Ÿn´ЈÏà¿ET…٨تê…¾ã2,W¥@¼;CÏiwE‰³Pîþ[[xVï°Xàà!°~ÿþrES`ßaÏÐ@JL«›XHà|}ª®ô¹hÐ6°rÀªïp}<ä„5_.Êy*Ô”ÇwvàÊçv”5g=Q¨,ÃðŒ¬‚n rðЉ5f¯ÊÖXŸçë$æAÚfañÁ20ïôäWæ:|ëI“þËVÂe1ö= Ä@PqTäýg àáÇ®>3¸‘ Áeh +䥼}o- Öøn7u+$n|ÒžOPK€#þ,*‘Šï¾¼”÷°ŸŸ­ø‘®ÛÌr?Á<œˆ¤«=–èd“…Ù¹œôWô¬ª¥»à×åùÕûË+åÀ¥B€ÊNDÔ£€I<° ¬nÝïãUQ?áZÑýµYR$.ÀM•ÂŒøvÌFEò„GanÅo÷ÿc(<µ'˜Ì´ Äs‚çx…u¡½æçÇÂëÕ ª†…VPÿö¿¿Â…@¼nwô|ăúïk·‹¨Íÿ„R½KÍQÅÇ#á@xg3Š–n³¦AXw–î?Ûày)šýp}º9=0ó|žc\ª.>É—>É»™ƒRôù°@øŠw…ŒÌ# êÚÍœ©ýÉȬ5+HW à0Ó?7¹ô7¬®ãæï$si¿¦í£Û¿¹9$óôòÏ;sòöG"Éœ°ïSU>`·OÏ:±ô +ìµP[:$ +ÍC÷ÕOÔd×dÍ+FcŒöÖ£…Ðh °é©9jgžæýÜ{ªO.‡þŽ”Ƕö¿{†ãEçn[Ewv<4 ünšß_†£z÷œä÷ 1ÐcÕ À&™0Ó†¥ Á/ÿlqÐ3 êCPNnxNȹƒ›‰Éñˆ>À2c†Í °´!?[„÷ˆ²…aAˆÊgá1#Rù/A-¦ÖjŽªa7+,ýq©a€¬›€ZïΦk¼’.Û— ªPæ ¿›9º²Ë¯ŽãÁ2YøEü¦~-1÷¸yë-l„}Þçmâ4Ÿ¶PQ*·œ[_%ØÀƒxer`èeNcâ¿ .åÉ~o·3Á‰RÑrÂì¿„Ö¾Q>½“{Ýê;êý ü‡øYuýÐçøÒ7A+ *TG‘Úê-ú üÍ|>Àa³ ãž‡G›Õÿ"Ϙ¬ÇÈ#ƒmØÿJ´¿ïÚ]\j"]ÄY¦„ ƒ)s2„€ÍAöiwle޽ñdÖˆ=¤M."?pz–>þyzJN|¯ÏfåÌ>.tdNŽ`¸iÚ\†ä^q:ó)ÛzÙøt42àP²[Î0×W;¾ØÍSìÉ›]° mØYìÎI¨ö)QêDµ¹~…°Jha‡T³0ž´ PóÂg~Ÿ‡Ã(þðÞ–@‹xNضþŽmA`§ÿÏ-  .*;޶(07tÕ&ëöR¦½~¢~[åj@5Xs'QBo¦Ð¨#"¡ú4ú‘k'Ž"`AÙÄí(xzé!n|â;à-Pòí*H£õáƒÉæ‹ì³ûâ_U>¹-¾ñÎ}s.ñbxßxmì©×Vr’BâJm÷彉ÛQj[-rÓ"ßhÒj…ë‰(h3ãÔ½@…’7¼y¯ÎÖß—0M¸l²Éü¸XŽùq: s®¦wgž®M®‚ŸØÁï% ¢û²4ìtÄ 9ñ³Ÿsæ„Ôa2Ÿÿ¹:ÔL–}ö?¯>RÒ>>´w£ÜkêÉ—XÔûœ~ +—qg/©ƒ*<â ðª¦~Ë5x^w5< fÞ³4ÕjPÕ +ì¨&€ײ¸é|²+0\þåŸj~€ Ç8ëA,C°e”ÊÀ"`Aq¯9þàòÐÚ^W€(¿H nÙ´ÔZ·"t–WíÛk–x×韩F\Î(T„øEg—Èé `ßh…nÜe3:Bñ¿L©£²Ê/éPkÚLv~ìä¼ß@Û:Vù弬6‡¾Î ›|©Á1Õ¼žê±ÖSÇÓÑGû[·8XÍpaí/ôc?V}€à'éÞ/1Q OÍ'+Ó×¾g߬f“DCÂò§!ÞÒç˜?˜¬¥sOc½2¿HűiÛ4ܺ¬\K,öGæÝ—+ìÿDÃgrRÎ&§f&„> +€>…c2 êGÂe’ÓöHÕ +ù[`ßû„hs»Å@A‚Ç5à,ÕXû€h~ ÆtÉþY„U­ÿ'jI"qy~©à<àÍÍx(L¾ËØ„‚},óÐ>€[ôÿ¬$h`ôMWåÎ+Õ€÷½0“|²î.®Xí–Û~0BàíÄïh‘ÈMÈ?vºXaWQG:b(ônzvçà¿aúÔ/± +²Z¿…¯®‘ Áiä]%ùyª>9)e¾jžœL×çVÖ›ÓÅØvÈ+¬»§ °. àÄ×w»•˜µ—ZÌYv©¥rKø%p"kNÐgæ^•±^·}mˆýÄs±hœ§S@ñS„V ÞjxáÉŒK€ÌmxlΦ *Fe^>fN#]héãǹRÑD@IKbgúÙ È<¤æàz¿É”²d¾mxµÉ¼ÿyuF[¦ ") …c¤©ßÌr@ìæ•T>!š#2woèŸ~þÁvªéû‰¾÷|Gßç5ð“hšpéZT Öÿé"‡ýÝí x‡ñ8–Ïþ·Bà·Í#$þRÕ^ål„ý> (šèµéƒåâú9  ý^7ó«𪩓_Ñ'cm¡Paø[JuÜNÏèXÆ@Ûs ];t”sˆ[ÿ¤'Ô™Ðà·‘M¿<çÀ)ͱOT#×sŒr¨·ÝÁU‰l[&—Ý”³ôªaµ Ü ¦gp_ÿ!´Îò>oc Äàíè¦z³i ÀˆY‹¿¡l X||Wg`€3à8¼(5_¢jœœ†&X§w¦âÉô›ý•d§  X9:W–aI½åàñ‘D¾8ô©”‘²<ÅÛ8=J‡dyŒ3LüJÒM®iô@l[‘ñõϵˆ@ûÃjÁ¯©Kñdçš"+9®Yð"ª9KÌ–B,þtñÕs`:¾étÃ@h$Œ™‘Ŭé•`O¸ª²œ0? É?Ïe…ƒù‘>ŸÆoé(Á”Kr" û¯¿þÃÜ g&¢×¦–‹ëg,€á‡Æ@½ìí뢘„)*qÇ¥O±(~9˜í鈿®é«|ö^Gœ/‘`©)½¦€¤7CþÏ]Af´\˜-€ŽTü—tò£|ø‡}òJ¤ª†M`³º²ãîôòT#÷²ú¤ÀÙéʈ#<}£ Ð4èfø°‚DhD6§HႵŸ¡E¨¦þñd(™–qoRˆ¯³-8·ûÕëWß}çw¥ÅëW¯_¿yýº"¹±ó.¨·oßá +òê <ñ*$,ûÛGåÙaï¾ãœïÞ½}Í!;~ï:|tT´·oËÈý„¡JñTõâ¢Ø)üHîçNú# +t'Ò.ܧHó¬ú ‡ŠSÓÂóNÃtkI ‰Ê³ø¿=¸0$ÀSÇ&i,¦üJƒŠÇèa=VmÄA<`7ÜEY^‘Û(¡~]%”Ù¦zmï/¿Á`êgó*sÉš7aR|㎫}¢Ìi +Ñ•@)’} c&ÆRèßè˜B ¢¿Njß»¸Ë"zNŽçIÕi\‰”ñ|Ûþ²w;Ýõ4õµ" Þ¥R@ ú¥º‚Vµ0Ô2Ç*W;â´°?"!ü-ÎfžNØ_zÐÄè°¯]þãU×ÄV%,MÆÅ»añŽ2¬¥;tà¸b@ò§\«ä·A×·Æzåg¨| 5ÇTHèÐu,¿ïþ½¿ +ÿùú8½Å’XËnëá¿s¾B_H^ºTCžÎã2¿¬“‘фЧŒ+*mÈßÏF `ÿÉ%% @ÐÜœñ*O?¿ÜOã?ÜõŸåx Gá~_­ÿ8ªà<R X3ѼÈ?.Џ*Hiû¢~Ü“_¯êµÀ¬r8?yä]ލ•LåSLËW¸•]H5 Ÿ÷[=z¹e³H +"#ÁÕF±,§Ã1Ç,j¤ SM©.L‡À>%÷Ô*ÙÏ +Ïæ>€"*ŽÍꢆî2›½û ãñé4?ä`¯Ãmy[y+E’0³ð¤ÙðŒ|®‡£Ãi¼ÿ šé†x–öù0ÝÖR.éÜf]ÌôðŒ3ˆHX@Ä“€ñYó'HÚÞÜÜK»±ˆ»ë#A8!ºþ–«/ÇA%\u€E'`v©zü¦ÙÀÍ10µ(+û>8à3/º‹t¤@Ò×dà>ø˜š¡ü¸®8°'ÔEB™™ä"ûÙËÅãG£È)û`vO~8ªr°¢*½ü¤+º4w:N÷ ÒUûq¨G…·ÝU/žËEIZ!”qE›õÀt¦ûJ4§=sÇ ŒãŠyWLYŒ#AÂ{eæ]c,›õE哹Àùml3}Å $FMñI{zfã4~o`:kBÙT² Už‹E³o3ÿ÷ÆŠð¨Ì£(×yÿ†üÅk‹­ q±XŠøÇýey•wꀂ"Þü”ߢÿ¿ ÿÿ°~VëP]@bÜ/žc¹ÙÐ'/œ]‚‰Ò H+. äAj›A½ö?'ÆW-B,€èÙFˆ5ø¿ÿä=…ËM.¨ª·ûñb´c~e´àP@ü+ô<àé0 —ÕÚ_äÈ ­>€Öÿ¬ÍšÂ‚î[ˆD°>t f÷äÇP“î¸rkã%ejc°!Ktì±Kh sl¯é~ód¯·¯Õüx°‘þ3›÷ñ0â‚éì6aó@§Ò±t:¬ƒ +3 €<íõA ³>„’aéÀ+µž>|ä sf‹ŒC¨ÈK•? 6×û·’÷)Niõ ~’ÇÉņ˜ø‹_$OrV€ÃÛW}£zZ‡¸YãØZ(H¥@DÌ»*÷Š< Ð>Ý[P½€?¶ôÿÿc~áÝÛ‰°hÕxšÚö-G:'åž²ˆ¥à‰4¥Ða¾€ŽÐŸýx vÕ>ü¸¸\Hõ8Œ®Ýgò!¤÷ÙÒ +ø»-:õ>î5y1 +¦Ú ¶9œ^R—ØTßRõYK{"p/üZgDØ =Üä—›(›Ú_—ïëé–0NN*ŽáÀ}Ÿ&ïtŠ˜ç)¿­NÀœdÛ qŒì~P~ì)èÞžà¤S^dçII"§Hˆ‚Ÿ=¡‰‘F€/O|v‚í„âàél„z>è‚0ˆ®•ÆTÒÅðóõ‡ƒ› µ'ÐÍV¬ y”¯3׈œpbÕoò2ÿ¯Õ——U̬´ÜþBhßìâ^4 þD¥©ÒÐa5)Xf +»Ô'ŠM=žêd¿@í)Qûâk4ÔºÈÎ2R¡L…JÝ©@3·òB€ý'Wc"­›ÁÙ‚ÍúÞº?‘†ŽÏ>ƒˆ‹™À±Ê9á‘t繚¾ª8s‘5 ë$Äà¾ëâõDzÿÊR»h$Á›ðfî#Û­Xö~S8 sKY¤0:ª$׃sxBܾX-ül,”Ï"¨¤È‘0·D@´¸#Ì”-Ûû› ý +€îDáJìpr‚ÿJò—˜Æ·bèà  H ñÏK æÀº€_ ‹PƒÚ wÁfspÓœÍ/q¶ºï-€Óå³È­÷#„ÝŠ>A0,€ãïO6ßsѾ«Fó>ki”êïAÓ{›úl]¸DŽºq`ÄíÐ;¨´zûÇÙÈ`•š2—r³¬3Ç7@$2Ž<w|5jª *™ä×BÈHlµ=¿4:G•À„PMåZLËdÀR¯ +îÉh–.^ïñ™ýôùU»³¡Nw.  0øß&€—kœ>ØÀ »º~^sXKbºü:ÿcÑ$³;¥ÎùÞHˆuŽExØ0Ü툆£,€t$„ ¨GÄÄQÔ߉ûìù— ¬„+h è–‹“ìø¥€›Ü$¿‹ Ç»Jý+¶ <ôkÙ0¾‚%ÊîwþKQ®”°¤GÄ•&y €sDB t¶çøþðtä°ãÌhi‘>€:3@p‚ùѯ!+bÊÿHŸzðÐF‚ëÝëP©9&|¼Óæ¿Aù}RpZ–AËß‚û"Àcè]"mÇ©Xwý–°šå²ò¦jy6añÉ^yªëŽQ——q”z–º6Pqó)›{{_•ÿ©Ù/ŠZýB ý'—ï¯Ê°P>Ï,†ûŸf´/ûÿ?r;ñJÜÇR6AšµÆ(ú炦=—¸Õ0ó í™Æá‡CJvQB¬+ äš¡¤m´k³p6쉑5}OâC@šèúl["™i"dò Üçç2¡2Éc!èúz<ÄpÉ¿5dz+!‰Î†* @Ô#f$°W³€ëÍéauÄ5{A,€u8xq¾YûŽ­ëÁA€¬”ÔÊ„»ÜXbÈ6‚@4Ù ç +€EÀ0&üR`¹Ê°Í±Ñ‚8¾Ym®oÒ{±Ùt¹Íœ¬´D·HOM9 =œ“óH”OAv7úÜ)ûOŸXQû´%:ÄZ"ªºØ\W½SšÅî–’:"ŸhèsK´@,…-þOu¡Í¶PÔ¯í@xóÄ"ë6@¿à?K›ƒÞo¹/¡ P@!Éì7H*£i1géËå®PÞ}‰ +¨Opb¸öNûpfûÃËÄý ²…âÛt¡I]v™fHÖì (‡ÎÒéZež’¥Ð{cö¥ÇPüã!aØqƒòœR-<K0TgMò¡¢–qvó2SÒ7‹Ýƒƒ“zg=Œ^ZÅç»}R}¶Ú¼¯Nþ:!ô&êÊoÇ_œ“Žo8‡Ìë §ôùCY5 +`Î À¦‹h•)]Dû4) þÇIYŠÔosÀè6 +9sÂ(¹†ébê7-÷Qþaäcdï(€`¼!¸ô»N€¥«°Hë%¢9²EË©õ@uI:ýÓÂ/lls«©µŸ™€Ë&À°ZcØýµ>ÛíØzHòÖç¡´¨Ë g–ÀÛ€ú ·‹E,¿\´”!ÍŒzOWÐÔ ß(…Ù²-CM]q”Y®ú‡nÃS/Y[$o†‹°•$i/TºQÿµ›’ˆÎ×çÜp«Àc{¯…Šd,,ƒç~†Œ³©$ŽI*’¨ +88`½½õ“ÿNGÓ«ë±¶aZ>—%áà8Õ…{ó!ŸÝ øÖHÛ@¤—°4²a³YEI{J­±6DÎ> odø¼>;;_û†¬dþ^šÛ h[$R’ùÍ'‘Æíô"Àÿüîzˆ™K¾-yWLþs»"6ú¬>šQñ‚öÙòÓŠ¸“GšøúÕo^wÓ'¥pØ™A +Pj‡ÙYýº1æôÅ0Jülj PÊ‹êd²!í’&‡V±ŠYƒ7 +€”p&´Þj?$Jžˆ~@õÞ/øeë­€ŸÃЦ¥S!µ¸HѬ)D8äê Ä•]Í ±ä~-ñ-ü_o]%Õ„Ð-|!\*ßr…šÁt8‚ÜÁè´×’ÒHG Ÿu» `Ù°ûÅÿÎ)‰'Ù¾ÓC€ˆuÅÃB +¤g˜ó¿‰Q+LŠÃWá•(jõû@ž »:\ŸœàS_ ^­ÖûxžÖ÷nòí€|Ç7 ïù…“ÂâT†#Ó|„ì>8ù4ßß©œŽ×«£+¼™b/\ld16lžìw„ØÚ¸šò‚˜EûëºôÿÁœŽs@:"ù ºÏà~v¡f¨]FJS\öò–róUáø–P6={-™žFÀõ-s2ulb…"¿hj Î(¡»`²d±¬þl@"*ÒW8̆ºƒm©PÉÞi€\š&À¿ãê6@“»1®ÚM…ÔR+Ë«w[ ÿÚp€$ ÃB L«På#¹›q·‘܉xÖ½¥¿„1ÂôÀ`ÏÀ1¨/j@Ç®(ºÑß^Tú½¢G*…H|.*S ðõúŒ«f æp¦–åTQžø1,pŠjhêëïo¯[ ßø]›ÔÃnømnÕÖ~ï&ßÝÄ=7øæzsåÉ*ûj\íIl>ÜÞ~ ­ó…Ý®!à'þ¢ï±õ§ÌÙÖ7ƒp¢òý~fþdžçSØû5ŸÛz®÷âÏjrÏŽ€£ö¨ÝŸX4þˆîŸZ ÕGaeÿ&º6ô[¥QÈT£¹‡±ˆÿê[êè·,udh%·@yÌË(Ê' +‰J¢q_ ¸¥:1ëÊ“R& +× +€J'œÕü÷WhöƒÐj2¦&@/£Ãëubæòg Ï˜÷÷§éÛ!-þµvæk,” hq0ÈïFLGås¿ ðk <Ãi›=·½z• µ¦ñ¬tŸj‡¤Î:öIÁ†{"ÔyQóΊ_$µ…ÈYl©ÖçٸГª0•l]qz”r½öùQMŒóbw·û"Š3 ¾kaK*Þ¥¨µ ÷znþO?^µ9‹ ŽvH$bÝœßÒrŸ:3žoK?ÉÇcmxû×LJ‡ëC_ŽÉÏG‚ÎÏoW°ÀÁÿØœmòö›<ôkt‰}1>T#:ŽtýùîÜõQÞô¾8lÛ?=ÁfèÌÉÔþ„­Ìåúÿ©ø)L0£EÅÅ…Ó÷iÖ°Qñ~;æó6s[,š¬³ÉðÇ?ÿÑ6Cżƒ‡}ÁsŒº/„æµßÂBÂLx;ˆîDí  |ÀQõcÍ‹ãü + xξÎ+º½Ÿí×îÊS±Y<'ò?°&dyg­¦KmûÝéT %‚Ýÿм¾¼ºòA[ý=ʶP\Û| ,1A›à›õɇÍê¨'ò,Gø}ÕæÀñæÒçêÓ]Ç œ(µo×›“¼«Ã¤¤}rGülgþu™yK pNÝõéýW_ûO«.¼z$xõîUQíOX4hÌÔþÓ»?ý)¦ ðÃÜi©Ý kjGHžXÁHñ!ÔyêÀ»ð“Ò³¨„NÊtæ¼o30€"ÝUHi¥®I·ë@„èg߀»ÿf`œµ ýü©/…2“àR/þíí}%¨àˆAÐaâ‡2ÿç)ÁËÀû}Á¸ÆBq{ÛµðêMûƒWŸ.O!Lk”-ŠÍ€œåYlxHY;pÊ·bfoˆüC‚EüóYªné=ø?çFù—½‡[ë¾f{¹«ÊÀqJ?zHT&ʼnR…pqFý•¾(*¿xþ«“­¡´ööææâææâÂ×þå ÷úàê8S–ð¬#¿É¥Óê*dú¿Ç‡•&•ku}…!ï9ˆâ'õ¶ò^ë¡™ð+?-Ò¶h¼zíóþéiVš¦Ä«+ÎÆ¸¯½ÉÁ«·ïþ¯pšõ»œa ÞÓ;hÚ“˜-ޙģO`šyHpÄD9¨¼ëÔ±c‘À–[ÀÖ…É¥rÜ;µ Áž‰6 +„~À8(”„­‰¥Óã/Ÿ!×Âp:`Ýf‹„[ /·[ðÌë©ù&p™ +ÿü»ƒJŽŸëÅÀw¾@¢ÿõËÖ˜0±>Ø’½©_‡ô­ÿ=ðû°Œ Zt6ÃÉê‡Ó¯—¢nÖJÝé g¹Õpt—˜Å€‘H2s¿lYñˆx»Õ娂žàó öˆ#{:óå¸o¾¡îP+vGŸ€ ¢,ª‘2ƒkÿ—‹‹ÛÛÿ7[ÏOÚ_J¿¨Ëö”­L£ý}K´â æ{^ºï7}׫|•£å@œÎàAªÄ Ž=“ßQ¾ös„ 9¯W·~;—y‹¾¨øŠ2 ’ÑS™+|ÒAîYÚŠG©·c‰?¾›ºå¾o]¾¶wnŸc×߆îÒ£¥áãÂo o øˆ3â¤7Á–LÈI-0úøí[ÊC `á” ·H)®]Š´l¤~¹Ó¯Q$²^WxÆ’ˆ Z÷d«h‰P€8= °ÿ¤>»F3M!ý •¬3|}wu`õÏJzŒ¸ð÷OXÿÚ iŽƒ‹lÙ0û•{üæ€ÌüØõEL½x#tV·ûPÕÒÀ¶6¼)J'tDšû½†­BÿÚ-,Ó¨tb׫ÜUà +Ð9Mí>ê[¥bµ6d—3†`åʸÍÅuÕaµLÜR¿¾¢G@VL¾lµjè' óYŒŠšðœ¼ÊÇö‡œvâ‰tþý>¤…œÀxøåŸ€ôŽ+ ¯k1»‹s>f ¥¤‡l— +C¦AGƒ8€puƒÃ§öí½džöYÛCج¯>ì‡a$ý–½Ùf+_PvuzâOçŸÁ,T‘ä0Õ,«f<{ñ?Ò7X*%>Áîns(Óú¤VAå^®b°\T ; (Þ@¢n",œÈ»ß Ö¼îàÄj boVë÷›“ÃU½Q”7/oIõ°ìŽ=‰€¤‘mLƒdÞÙÕOÿÆ +Y¯µ¿KgMsJ½~ûúõÂö&\.Š¢µ6ÕÿÛ,wðæµ¯ì; >5šìŠúéîbŽ„7û!¿ÃË`ŠÁ:Òñùsm‘" « °÷M´5ÍŽýXð +€¨óˆˆâ²ûá +¬ŸñA°1Ù +ßû·½+Gz[ ¶¤PïG¿¸b¹¨g~;2ô?cyðña#À(˜ v|ª`!—8µž èê¿–/‹üàÖp×{ѳÍ+<”KZB"ÇñÓ8K+. šÕ3)5}‹Õ 1‘ì×K¢ð¶ °Ä‹@0ÔØþ¢’ +*Rˆ¦´¾åOJ»Ø”\™Âãùs‰%nÖëÛše_°á×NÈ–ÀVhTlb)|ñu(W¿YŸéÇØœhø–q"p:„Fÿ›$`æ¼rÁÌ“k5,ˆ›ÌoV¿8`æî່WoŠl%'ä ãsÿ{€Ë•¨iFžTêÅä^ä¸Z_û>kË‚ŠØ+¿˜/6[H`Rèd=ö—@ÉG ™(„+÷CôÄ.·³†ˆ_ZÑ­6Ïõ5­½ÉSäУXù(K,€u‘tÂçÛÅçû˜Zþ[¢ ý„žû àâr…Ígö.ƒÿÝWµèî¨xàª{ü»Ð*Xµ‚lÇ\6ò²‰·„Ù÷ió~¸:B=¨448hp„ %ZŒ©}½Ý±vµå£­7Š)ÓI´ArÄàD…;;ݳڹ!ùŠõ†ÖthU¬¦øB&èuóábs‰ž8˜îúÍÚyb•WŠŽ'{ûtŽô>¿<Ýpöþ‰‡¦¾¹9Èøÿ‡õåõdrTF‹|…×C`½9©/ˆéÉÂõZÆBÍ"%«ôl^º÷ßþw _“X’›–^+ãø˜“¯™¿ %@.¤ÏÈY½©bKiQœ¥·‘é)®ôpXbÀá_\Œvg5¨°²ô­ Ù Ë­'&§ö8ñM˜,€°…ÀÿäWëœp¿-ð Vým°ùA€ùø`ì¦?.€£óÒ"J@i €»(¯9`:÷Ç(ž5PœÙG«?öy:•éd2O»'¤ñÚ¶Ç|qkÍÔ¢&vJË}؉›ÉP^/"wr F´\SâýKY•ü”[è&ÿÜa@k‚UÃjõ"l(âñÙ> e߆¸D Ý‹ƒ ïzA@P÷ë[µöæüXþ/ž)lt ÀO{nÖûkgÿqÂõåúû¤º¾øpQs V½™¿4dî[ÉæÌKûƒMÔí¤YkQ”Ÿ¼ëQÁ¿WxÊàìpr`Ò®ºj¼]’ÝRÜÔ©m2t$õCT1}9u¥*D87 2¡ilóNæ«Éê]Øî¦‚¯ƒlsl2‰­T@{€4!ÙÈý TQˆ#g_¯¹årqôsXôçû$@˜Ü¯¬)Á üíÇû§Þ‹â?¿O4ÊÞ_°~ÙÀÙd7BÄXEMÇ]ŸÁ½qÂÝ¢cežw0\âFz[ïò=„ž<'ÇTF3æ3cÄ*·³ØCðYm)%'Ë1ÁÉzü´ÜkÕYžUä´påUDÁ³/}²ÐSê05ÁIJûļ»Ý\ùà~tªœƒÎuØZ–]¢Á¶÷ RGœÒ£ à#Å¥9 ìÓ‡PszˆpâÔߛ͇«ƒÊåv½ù@òSÜd.û›á5Q9±”>™)`Ðfn™.™ä;«œN–בrXê¹ÆyJ‰å"…ÛÛäÃÝáÒJ»ÀBÈ8í>*oOÌÞÈ9àÐÒIßPì>‹8åUòÓßG~jL°Aq7•¬ÀR»™u˜•"ÇH‡Š:z6TŽg{PükGþ?]úNæBs4xðÁþ-„þ£ðË/ÿ°“yÖÏšŽÄ `k ¾þW$TH ríž¶/1Géûÿ{ÐÜÞ½¾‡ÙNwqFÖ<Ø:ð¹ï *Ñ‚r5=Úna6‰s^…“µ×b z”’ÂfCGÙµ_¢®GX¾¬žKjĨQ©;´Kážßœ£Ç'Æ…ì¶Ê lŸò"ZFóËüŽì àüÜøùé¬ÖÚh-}ºß¼ §û«“ÕÉÙÙmf§wïNN¦;ûàÏ}àÄ䒷ш±q®Z¨ZçJBçK¹ÃºtANq›X r†ÅåW‡4Ï+ZŽîióÚ²!Ì5YijK¹¿øo‰ùøsE¶e1‚êÒr¯\¢µ1µ!‘)\ö–»&¤¾]WsÊ‘Ê#·V5s˜'UP˜™°Â¨»ÿ €%æ¡ÿô„Ø[@Ꭸ·)+>g,Iÿ@' ¨(“ è3¦Ù*ú({6[Jÿ3@Ý8{ø(Zýš»¿Ó,Ø:X¢LÉçù•Oôþlï%1Âí¨¶¢‡Ú“Ô¥ Hÿ˜Ôô,§I"ù´Ù8ɾȚc)ñ&ì/nŽ×ézøf"Pæøëp~>DŸú‚Y¯sÚ…Íú«“õEæÙX š›êÝÌ‘ëãÛ%W’¹ã›ËËË.²%ÓaañšÑ2°*ÊÈiéµ²xŠ?b듸®ÏÃD›g2Ýòtê@MOuz¹ d¾l¬eN¡g“ž‹JDÑ–nmziï©lìKô0ÖD!‘c?Eâú‘Àæ?_\Oˆu'@QTz.ê€ÔÂAÀ¨ò‰ý¡õ]Ëa9¨RÊ«ƒA÷dÓŽàëùÉ€ºD€‡‘ºP(Pü¿'˜Ùÿ)È»ºý@ù‰Or|œò;ôïa;‡”2QE7îÒ ðÊ¢RÒ˜ÀC €UϬV0ÆÁ~Vãä_ôj#ÚYÒI9p³Ä/9o8§ÜTD~¸ÂYãij· }峄Æ`{x ‰9‰ôn|0ðNæ9W’Ì1Ž+s=ÍŒ«^Ÿ_^¾ï"›Qª=ˆ&öhÞ–x€¥µ{'Ýe8*PGÖ…{›êææqf<ˆžLt)=ÊïË”€½_Vq¹Öt´ª:\Ë ‘ãÈ$Ë=çZðiãW—REÆ7‹)3FdS:Ó3@þ·0ŸØûÉ™ó¼~ßóØ` „ÑôÿöÁ¾œˆóäluæ«=Ök22«ù]#Ã5N›127á)óãÕê+3礃¼dàtÝ%ö+X´¶™-‘ïs½4|s¾|ʃ>Õû÷¾v¢ÑƒP*l*"³¾m %ÙÅei)È)iŠJµà"×›ÒUâqïRî”3Ô~žîcÊZþG$¥æúHÖ^&RiÏb[á–ÀÞê¥ü_#~óû¼`½}.Õ©Ï&­{VÀvÀ– `äXCu=¸¾…þøíà]^ýš·ÕK̸Çÿ-d\•K6ÿ¨:tµ^Î áºô¡k¨8‡°—ËŸ½°ÄÕÓ¿XxÔ{Ù¤€æ5R‘ò¤Jìr9±ÿŸÙ¬¤B-€çV=x^÷Ú—~ùö§ëÌ|½ +5ü>áï£×ÑпQ½Úí·Œ×‡\oN´åAÎ)§û«ë~uþ¥ò[á>…T™£ÕÑçuv2ÇIüè}ö·«Nó/Ùn¾ï—–ü¯Ó“õi—د#_´.xö³±Q&ÂâSöƒ"ĸc}¯>i ÜŸxØM€Èe +ÆâÒ„ïòÒ3O{QävI‡º€`6TƒÝsd0¾A!§[:H”H ÀQ­ì"žàåjç%ÀáúVJå6~Íð}A6ç9…5윆g(hd<ì¯y}Cì;H¡Ⱥ¥¿]”¢Ä@ñÖþ.w “ÓƒçÆ-k—µh§Ö|2ü*F\îℼujüZ°'ª«¥É6=º‰e¼¸E»M&AmW‹ØcŸ1N, ÊÙÁ™¼XeŸ¯t`‹Ó¨vÉžœži¹®F7p ÁóÍÊx`{¼wìÏó.R±!íý2p¾ñ‰BÛ×?ßœýÊž½s’ lœG ÒïwLžðà@ûøÐðø^Àæ«M=Ypž‡tH\¯ÏÎÖGp4sCÔAbR~&¾»p¹Üñ;=k³pÖ.}®ÕŸÏ=èk¾ + ÔûŒÑ1 ýïžXåë/Q^% +Z¤´R¤ã… Êqw8Âv÷ÿcÇ„ÂÇGNIõH»ßÁ =\½€\zõéSûv°°Î†5¸›dÀ}--¢üátå[âX@ `aÌ9ø^oÈ]ä/’·3é#~«0^ý¾ yI€9qOv-" +íäU;ܸ­ &TÄ +¬“=N@\ZñUÄ? e/WP»ÞxVm1{Nb[@Ê—&£u¡†.rn ¥&û»FíIS¿>ÍÂyZ7»3ŸØ9^ŸÚBP8§»…¤¡€…7cæÀ +=A2£'ÚEp»9E¥;´·§?<Òð½ÄÀÉÂug«Óã“ÕÙÙz³3ÅÃ:Èð¡‡æž"|²P²M –xc›ÝìÎÑtÜ›-ßÄ©TX¤y>ˆÄ6Bž*o½–ø—ù{L€®t3®îk å·†Í(ŠÉ¿8e ó8ŽúM(g»‰«Œ9yÀþ4ßæ ¥+-1öºêDŒÀ9#×)G\–5ª§éT_¿Ô¨T j1`÷bOþÀè‹“ê×k„ƒ>˧Â]­O±Îí'¸,e iUØöŠRúç7g> Ú¦œ•xë‹›‹£›‹W8ÙLfEpèãÄÇÇÇ=õøÈ÷ŒŸ¢†Ö>r$×FKœ ÚÝ‹n5¦ð0¢›ÙI_Í7¥Íû¸µ‰·‹{S^.®ŸÃo‰Ó˜ª@Ëk‹±‹‹5Ö ƒ3ËׇA#^<Þû&ñ­~O¸Ngoå0ÉT”²€¢þÓ  ðô‰Z×&ÀÎÎÎË—Z‡!5ÈF|ªG Oó˜ýÿ]´OûþAƒa‘ü£» úO­ü›-€nþgSÀ±Eùô#¥…˜òݨòñæÉ¬"–kúåš‰Ž¬&toc%¼¢Õ+)œ`\¹]±×4Έä¬@8…œ4ø<Í +ª-Åijå}* žJ Ê™–¤²~!ªBèµ÷"ök³Ÿ8+ëIÝÃzuÇéñ&jBj­7ke6<.3 :ÝG‚œJPŒ$Zéò‚c +d‰‘h«CÎwraEò¬³ó&‹Õ‘Ó +uj†b‹ŒÌ;z2Ž@~œ¯»œ >ëï³~Í- ÃÆÏa¦ëqã,)ÐöD|pV££ÝÅ$Brzûe}U?ÜP>]\á¹j]<§yo]2,eÓ@RW´]À®Ïq hÐ/ÝaŽ}Àáîë¯_käî!”O1vh¬NCé"r3¸€mÿúPÚþìÝ´fß>ïþ«‘2 +Ðć㣰¿ÿ¯Z +ÙÇýŠ’G Dý·{2ú·ðŽÛ-ñ$V +)ÀU…¦WæßÆÓbJ@ù/¢t؈–¥ø¯_XlkÀ‡bÕë;ÏçJ ½ŒŸ öÊJ‘­¿xP•¥PÊZSÇ"·ÞìaÀ ó‹ÿ(Ðç´_’ËÄzy¸s|W›Ó‰«™ˆW"ÀDô¾9Q”rÇtõÚ" ÎÊ •¹àáúüãáâö<&D‹ üf,Õ›þi ”(”¹|Û›M—ó=´,À:@دõ´¸0n½>(§Å9DIWŒbtÌ; _ß-2¿¢è(©áúÌÅUåõÂZ `€*S-€¥åýÜBhN´â³ ›}’1ã š†YahjôQÅüúëÿW·žÆø¶ £4²ù3ož!ñ#,diý²ºð[@ù¼OìY¼¾&ýïãÿ˜°¤yŽÈz?¯†ô]qÕhõ_:·^üÂÝ*1¶Mä:®Aœ–ZÇq§O·þ-Â>Éq9J^Šã¦Œll¡â™›É ð¬0¶þI,¬v¶¨SÉH?½SgRÞ–ø\£ö¢A7›jUi'ùNëm]9êQÕèàÓCØ$T71BÂu>ÜÑÔ+e„:ßp£ªüY õ°Ùܤý‘|œFìÚ™÷[Ì]鳚’®Ìe€<ß?–ÂÃ<ÿßAHnµÿ`êhüÉ?Ïý€â² +ÊéÅ‹¯^øOŠk± ·/ +sÛŸ~Š{7|Æá/Ñ…i•P~•¾“yŸÐ®`JмšEÉ„’dCòÿ¥â— ! W.âó ´2‡ßòªâ‘£¸á£È5 "(s˳ ¬ ,œóÜ^‚Ú8L:ÛF4›i€ÿ(Óž>…ÿû%^¾”š²3ûO#ýJï— üÝðæŽÀ!YƇ}§%F‰àúÒù7I€B·FÀô[ Y^›BI€9  _ø£@K€G¾²ßÂÉ·µÂßll¸‡×ŒQ§€Ù•ÓqliÉ“‚Yª¦›¸ÙvÌJ;ÝzìÚHWnÌâL/}2ÕçyùŸ]Ò/`U¨T”FÓçÖç{Ni€ÃÂ#ÚÞ¡ tŒn |uD#àp³zßÃ|C«…'ƒüØ7†Ž&€©JÛWHVœ™Œ_ë5Ê=±W´A8ÇIœÜ;óCG0?÷3oœß¦ ïCºG@Œ—€@ÊÁÎ%ŒÚt–âpÛç$4l/w"—{ô<új¡4"0ëÈ.(APë°D5ÿ¬–”`/¿S\á¶( (NÉJnŠ~BÐþß8h‚%î\†ã9áÅèì\ZêØb[52ÐÄwóiíoHÇßÓˆ¿Zgüõe,]Nxôò×«à‹®ù`OÔ6ˆnÖíâ&óÿòsS~zÜ‹«±ÜÙÈGx¤Ä)y½RÖ”á”$J¿ÿ‰_çŽÝH<½þž™{c€Xò'ùªš•–uµ‚âàÅf½ò=5î67œÌ>­p\›³«……„}ù_Ÿ¥Àµ­){â;E{¶Afö#@~«3Û>"ÓÜ[·2t 1{è¢ÐŸBÔMp5´à쨪,“ #D}a´”-ÕÀ3ܤx ǨN“µŽXMP,U©^¼Øø½M»âN6ô.lÙgÊÞ•ïìúþúæv}ž×ßl>øq~öNÞ·ºnψqþ?(˾§šøõ­Õ”@‚ò4àí5.D˧2ÏÙç¾®ÐÌO/’9¿›ïIdΥЭ¸âÛélsP‡Lï–Cvÿ_âþv׎#KÓÅEêP<ª£$«q(R"‘B2(%)@ÁB…€ÔuÌニêÎA50@ÝÍ î¬.ôÏ®¾ˆ¾„¹ˆyŸç]æîûðPRdGä,÷mnË>—½Ë–›ûÞ{<‡§üò•™Ô`[íð_Î-0Æ+¿Ÿz'0™åØ/ëÓ_ÒrCoâ׊ ªpÆtùFÝó#ïå:gm?Ò鞀@"cIÑœqD + +`=q œÀàÿÅçŸg\ˆßH*}cø ßŒX7€¿FÀf ÄpŸáš€£Vr`½¦` ñ––· †r}¬(ëÛ¹¨ñ½Øÿ-6q¿ðw~àÁð‚ånø{<Ũ,ÌU£ãT“°|k,àŸ÷"¯0E(²` ÷¡)É„äÐÿ¹ò€ àÌr¸­X„ €ç¾_ʲýõ^ÆÍªüãüç>ðËú¸åП®~úó?þtà&âǼú™gþÉ+ Ì?™òÓW$&I˜’þ§8?GŒÚ°?ý?ùþáŸsÓð½5Nå1 + >_•ߟþé멜êä¬6ùéÏþsÒ‹+ÌF°‡›¿K2$ÔƒO4*"x©=D§ý7R2ñ§¹»`÷áeî3&áHÜUI¼ÇÞ É ëàÛ¨‘>0—uÄ#dÖ&@ÞOîܺsçÁçŸc„Æ ¸‘x5°›„Yö7  MÔÀuúëþhÈ_$\$‚ÑË(¢qƧ¿!<ÇÏ– àøÒšC›°ß 8z‚;'ŸÝ0¢©x!ü'^¹ÀeVg].‰DD<ÞØç²tƒEë[ž*‘[šé‘I3sÇ|•ýÜ0Ÿj ì¿GÔU]T–ðG,€@NX¹zƒ]88ÏýS`Æ÷ø–Ÿ¯~b#ÿ§Ÿ„ë矲Bc„Ö2Ý/€Ñ?Sx‚kxòe¾úž^ò†àP+Y¹+ü7ÿÈ£‚Ôô¨À?&D©‰ê×ÿli•b|«ËÁ9Nã\¡,ÌKt•&‚³Ø\Çéµ gw¡¯úùÆ_ßü+ƒ÷ÿ”H¢ØùT¨}¤ã¶¾òB\ $¨°ÉìñÇø%0ÑÏ)€#u²ÇÃüYp¯ÇÔö@òÔhÆnÜ&û-¨‰ð‰&ÀËÏ/ð/ðà{øë~À¯€à<Òû_Ј9½P ,ôÿq´µ‡”ËŠ]—zmR-Ð¥ã59ãìàÏ¡” B"üø ’*‹i:½4uÀtB½T£ ÜÜå}^t”,#Æ8ñk (U3ÀÀ8u–f””šr¸\giÞ,€ËËË;;¶ßç—÷|žðãÇÏs'þè¯ä}ñå7 uÀ[ý8܃ç–ý›«ÇÜÑÃÿ †ýñÓ¯ýeÀ¯Ë”ä/AuAH®üÁ@J6ûûçüppnù¿üòËd~ä£HþXŒåáÕc-Ì4À1 +À?}øù§B[ì£ÌûvG‚ÚÝPà/®=jH¯ÆR$Çd_ ½™r~gìë>Z`hÀ¿«€mýßI–üÝËþî‹ââË PDóû±Weæ[¢¾éþ…í¹yÎïòkaA?YÃ?‰N#I^‰$f +?“ÀÃM€(€ù:Ð'¡;¿»•‰IÏý 3¾aß©û_»î× ¦'ýÊ&@‹¸Éðí$É(A½ÇÊ¡ƒÂèçx||Á¯'}ùWþ˜©ô%®ÿž;n…1ç|_¿´|½Lˆô²åŠ1Æ&àY¬u–êXg¨wïr”z×=ãðüͪÃa^9ëDXâ 5ZJŲ́™1Ÿƒ¨çQ.—=èwÿ÷âÁý„Ü9/}-ïò18-hÙÞËÇýÐ7W|×Çg1êy—ÇýŸ P@˜E>z ozøˆ/ü_Ý÷ûFP2øíÙ1Äü`BÓóSåϱF"=¢ºf\ÅhhÜ\®Q˜c˜» •À=Aqz h„èÍœo_½þvÓª€#þ/x·Èbø …ŠÖŽÌ…#k¼ËüAT©'® +€¥œ[z,d—sˆ!=Ê]j⚃zšHmÉy/ú»uýîwŸt kÁ瘅ç/ ÿÇùÏÀž?õW¾Æ¸žùýÏÿå_ÖË€ûó+¹Á8ìúùkÄ0-"t÷Ш>³è‡r­rðÀ;ò9Á@Œ”´­%B8ó!Ag€ƒo<å’e‘H­‘`d€¡>è]¬[Ë ³#“ Fß­xMM)cgdZÄ­  +`Y1õ¢†>ÿü~ €ÏâãÇåãGß§u@ü{BQ!ƒÿo¾ä™þ«ÜX´€bí'c]£Ñ®ŠÿÜÿ£pˆ¦Š;„´ +@qý»óóç<ÐWÄ: ñÈ3éááCüxÝ N¢~ 6´ô… + u‡’p,ÀÀG¿ËJð‘Ïý;Ñ0g×ÿ¿²È÷ænÄô²Þ§“;˜þë©Ì?f¥?.öKüvŠÌ™ˆ~>B߈Iœw<@1Ì9È–5¢8qœF4kR"ÓÆ°úu¿ä‰,ª"ZÀ;¥mÔ²î¦1aåmÑäiFAÍ•ÈHY `–”Ì‚Þ +܉» ý¸UÀoƒs  ÐW|ÔŠÌ’ðŸ'û?óbÍõØP§Éëà§?ëþôÍ7?ÂÙ‚¾¹º˜—|’åëTdN +ç5%UÃãÜ`äHÀ~òçê…‚Êò”4ês×iIû„\ù×=ŸÛ€b»QüSš ¾Ncçþ¥6r J+.¬@å¥!‰} ‹üMõÇáŒì3Mªà$‡€É³`B  &rñ‘– + Í¢åíwA>¥¨€Xƒ¿þ£@øcô Ö-R¯Û׉›…͘3TÜ`2C\—ÿFZ€/ʜΫĦXø×=Ü…làl ×!wãvZ¡É<üád›Çr^„q_s;—%=))Û„ÉP²:„ù÷Ïܬí•>gœH—š˜Ýü}V˜[]Ï àùUÌ ÏÎO‰ÁyÔõ?ôøê_fáF'Ñ€´Ïõ]â³ÀkýÒãÀŸ¨¨—˜2ìNY°$.¾yžòøK¡'üuèè;ßx?ÅžF\þˆéÿØþk ûÆÜ§ßÝÄWt/ŠßÕ€^9Œ3ð>-¿D]N¹%ãJ‰T(ÊqiÆ).÷ùkè´B¼ Š`t>¨öœ¨{÷`äêÜ8Ò3Kê<øh®Í°‘-¾xÈJû +€×bÜǤ7Òz °Kýÿׯõ{@`:Ç @÷ÿOÞò+×öêú2*ì_ƒÿo  æ;ô'ªŸqAýÛ˜ÿ~|à Diá‡$6$2Â+LÄNnYšLp˜ê"óD«ŠAoô‚·®õ‘”¼Íâˈ2¡ö“ü,º.£JçýÕ7VJ]ZB™—^ÏÀèI,ÑàëRîýˆ{Ôå?tõàÉ7Ѽ̪¼ÀÏÿüéÕ;˽PöØñÁyÖp°ÿ1LzâR‚ÜÏ“Øoü|õdá?I0Uãÿ—þý÷ý¹¨pĆ@ëuðAs½¨Oþ‚ë-¾|¸Õzr+àÊà†Òß{Wø&Zh‡6ÀÅËÊväÑ".¶v*®ûÑqj…Å +°å0KðLR`„³W%\6wʪBfF„L±#‡éî]šòà£ß}´Í„ÒƒÒÑ`¼«ü¬þ¨-€F_Ûü_ýY ýÀf=½íà³?W<ü @1èoŸ8ªõà‡woÞ¼ öóy÷.±þg òB`\ÆI`ù¸„ä+Å;ªc"'Â,µûµDåÁW„ýh ‰©+~³ôU¤Öœ›Q™'ðÌu~K[ÂåÞ½ßO:÷øf@å~î&`àÞ÷MÀèþw¢ŽÒ#~ä{6ýó¿õ®7éƒÔâßPU€ŸPt¸(ö!C)©õ'a\`Ãñ9¿¤BøñÁƒOü9À§>øs,6ß{ò~À)w,å§èÇÊcg€³¾Iø¥œÔÑbßSákÀüü_ ¸I/ˆyVØX\‰!d<ï·åú&ôL„ýPÉ Ý½«‚'.çFg .[ Η¾v’¡]“$›ªƒÅäìnM€ßýNôÄ‹GŸ7Óá-ÁÿºYoÿA“úÞÜhÜDQÿ×{ +@ÈûõM€¥B‚û7"¤?»èLJ¥ÿ>i¸xÂ@—‘ëàí×CL<ôE îèoËQ@%âˆV@woËô>Ušf0þÖ>>~8:À_¦D¢¸•€œw§ŸP†©ô§,ºÝY·~îÜá©@(×§ìð<àé㯾ÔXØÏõꛋ«À5÷óÜ@1*üIÅôà.€”hò>~”õþ˰^¸{ÿVìkwRPJÊÇ Å««—ÿž0ý:çìð0€}6lu‰÷rŠø®á'„À#`Ô»Ô ¾}"lDvÊÞ÷¿FÑF‹éF5pBŠ=²SŠ«ÞgÏžG@µäbê áDiûë¶]ÖCIa•˜iºw›ßbzp«É“fbS-ïÊ?Ôü´èáÅ'¢ÿ–w'4(}Ÿ‚þyo¾3ÜŸÐ;6ºá`è}aÿŸàÿÛ-€t$Ìåø‰£ôÝxóú—þL þe¾OBj…Eèfš¤;TÈ7b‹^×è4òÞíëÙŽæV¾‡Ä;ÊS™rÍ2Â_ÌbLäÂ<éNvF)fŒã±ñ&ÔC#ëÐ%o€äto çÓ§_\þéò+Öã€Öïíðñ_‚r pÁ¶Þcñ¯bL‡ÐQ~h‚õh’¯Ü?H Ã%¿ ˜kó{ûÁ&ÀÕƒO¿úúé“Xü·@÷xî&äY‹µØuÜ^ñ¢·> @Ú×inû¹¼ÙË/ðÒž×Pâ5Êò—X¿^ÄHsÚDz›–ȧžÊ*B$òœm#÷ÿø°¼ Æmƒ{>ñ†= @﬈ɾ°—Ì +º}ÿÞmv;œ1NšóiäG¨Ni zÕp¡ÏêÿVôkbWCoe9ÐûorÓp³€–0:à—÷ýŽTˆWö‡Ï>h*—·YøƒÿXïbôêÀŽ.£gôæ=¥pá’'Ûξ|¼KdpÏŸ ;RyöŒ‘ï(óˆš9”‰à¥¿1kÎ29x5T†L(Ö¦ +*Â3 Èù]‘±ðÑ'~Ÿóð‡›‚ÏÜ¿äç!c“?x—ôz¸Î㺠ü~²‹[õ§æ[{ë XþæêÉep¯=€Æè£Ó³ä?¿º¸Š†ˆ÷+¢¾&.F@î6ñ›tè€TðàéW_=yôóƒ%îü|Å}Ñ»Ö~Ý\ç²4€‚Æ’Ýí{¿ü D–ß`7þÙ÷ß#¼ùOAqMá[½›C‚ŠëÌ—úƒf„ÂÓ<ñ„QYç±JH³þææ\è ÔM_Ø'{V +eÍl¿”(nà!(wì¼o|PdÙ @M0FVG½È’Þ¾=š;úß ¼¾ Xðìþ’àü D hK/ÇO÷ÜŒðÃÛ0Þn낺Žnq¸"^ÚfÀŽtȇ,¾¡˜Ã»TÀàûW ¬ƒóÓON©hã<xóCTx-h? ÐC»ï”†åüg#м Ñ Q$‹ˆ²ïþ¨)(€!DÊ>R"S„…(ÎM¦”Aˆˆ=rh·BšÐ lpýòêòÉl†X«yNÏ‹}ÔüÇüpŸö¼‘’ÊàêßÿX•°«†ÑX_l_õeoñËþ48 ê„>¼üã÷üž0XôSïÿ<&@ÎÔb6N‚Ü€¬gé£óõ}ÂüôÇ ¿^¸/^„e¿‰H9ÖRÐï4 ý†þã±ÖûÒqðáCÿÍ©*y(úAaœt'ºîšó1í„@8vÍ/ùüOÒ– +Ð(PKðwdþÌŒtÿÜ=€ßÅ|ßø°`ÃÚ–ÿ×BýЦ²ò_¿ ˆøês 0ÒàûW‰ª©ÿ”Ú¤ê‚*,€Üýgñÿám-€÷ŽÐ\Ƴ;r0µâw¬þJÛ¸»_»ì3Ä?²VЦ5µ;1~txB(î +Ñ“-,eeæØ•GâÀ³GÎí¾OìúÐ#Ìû,¿ð° _~hÝ׬±Àýó§yÀ÷|mó‰b \]òïÃ0Œ»Á?óþ 0üQB•HIΫ«'ÛŸ† }«{}ñØ"œuEì8lħ4a7(çüš(PŸr4>@Å~ ^¤ï1sˆçs ð +¨œ”NÉYq5 +™â]é¥Ù* ‚W¬,ónþì„](þ» òï= F€,ÐÙYæPÖþZ3Nhú>¹ ðb<—ÀÖ\—hœ#jŽèô wù96âu€h€žÐàûWIt òãQÔ‡LÀpÀ=€œ?œ¾À#€ Œ»ÑI@’i2ˆÀ~—¿–wsUsdê§®´ç7[9&$âä­¡¤!Ï„M6;N&Sd,cg‹ã@.´stûþ˫܃'*ø-Ÿ_ôy=@ô{{ß\ùżÒåÜú㢠È}ðóåÏ<´OxÈç—ÂB>"ˆ×ÐÓoü?"~_Œ`Èwž_œÂÿÑÓ' +ïFŠ<™n8eeŠ‚¯}Þ®T\sL¾›I­Bxoõ?¡쀃pªB‘ rD`H+É .¨‘ýw‡3~ÛfD :<¹ðÝ¡‘±KxAÿ®X)nß;Ϥøa Qì4ŸºÜV €½Àß®Ü,ÞÛ#©ðZè!Ýô*ê¯aøüZéNƒï\§ŸJm{½»åÏù6¦ÖþYuÆ]ýëú>Þ$l|% +€g~ ¼Nf„z]¬¨×l@ÆÃÇu(Ú©¡ùE··¨tÀŒ3sʉ¸c–ŸyÓù¶ÓWsOïñÕ×5û|#÷ó¬½ç—Eþå“\bŸóÅÁo¾0ü3èäùßOW_ýÜï愈¹I ‘ÂÏÿsËðüj6õB?åü(0·ýq`ˆ”(¾’¼)^$ØÀå£G¾üòkfÓÍG ¡B9ûºÑêýªG¹U @¼¿GƒÓS +úÿ¯ÿò†á<ƒ©2xãïH–ØøÏó(`ÔÁÿù_þ/¼ð_Lèô`ð ÕÛùŒ +}lµûä°Ë饋€wÿ>ˆðî= `yÖÅÏr?Dj€²—ôÝžíþEJ‘™ík>Ä÷سÃB¢¨¯Èk9¨ ( wΈ|’L,3ƒ¯5Å =xà69\ÞaÄîÜùh=üü"æÀE’ï\^\^Ä?;Éñå×ü!èl ¬m»¬Ô¼Uðô飾Bò80þ£·õ_Í…òï¡I{Bþ1çòòkÿ:ôÁƒ'O¤ˆ/QA¥©îÁœÁþW_>ýòë/¿þ…8Múø£üí=;JwzÏêû>B<±ªa¬Xã°MÖ©ÔKJDFonE(öÊ=‰|Ç(gƒ¸0™Ë¸¡YX¥Ë;÷Ùò¿Ó5Ÿ¿{ÌÏy6zþ˜ûæ1+ûüÑ÷¾8ÿÄW{YÔK¬âüP¿» …?áý¼Ð":¿26þùóÇ«'~óˆ}Æ«?ò£B¡¯¿|òu°ÿ%úæËÝÉ™WoHE°8'4\PMÅ[jž/¸÷x$VzŽuPéà½x ø9£‚¼óósÑ^@‚ßnWoëv_¾F@õÁ¤P¸®ú=Ê'NÔÇ=‡Î ‰ºÒ€ …·ÿNð~rúˆhzJ/_\éSCŠAtTOy§É?Ä{ëÀé9€ÿ˜Ÿ*:@‡–ƒ¿AcŒ@¤ˆ%pz¿·½Ø_ÈÀ<؃ףè>õ ”ú½(Å_4‡èŽüÝÕþ^8¼îÙ6¾ˆSÆ ñ÷ý"¡ä˜ée8Wß9ÏTÊÙÈRVÕîæÓïwYó?^»ü&iœ¬Æ¹-€xœõÄô¾ßŒEÏa úÙîcW¼#øæy÷_=yÃóçßü‰Û{bá3Ë÷³%à÷ +ŒÀ±Î/Ÿ^~ÆÆCE÷«Tô^;ê ug 1LÞ0ÌÍlKœ‡ú ¬î'd„kþR(4B×(Z€%9‹sõ²xç¼{¶‰ yU\HŸ*ðÇõÎ…žéƒX5MÒ€Æà†?q·)íø?Q÷yÈ1ß ½N7Øô7‚ñL›€Âw ¬´‡ö;=ÂËOD}ã,7u¤T­Ñ =ƒ~. 'ÆoäÆ=€Þ¾ ìŽÇÑk`ðßP“ߣ±š^†kö÷-Ã0ËÁ‚8°Ñúâ+aT@¨âaär6· +¾ÈZ]ÀG9£1d"jæFé’_á ~ödzðÑÓ; ò0ø÷ñÀ(‚§<¥g»ÊÒ °”•ßí?ìá—TFŠê«§}ù×íEè·°çß|ó§Ë+GâF@ýÃÐǹïü¡çß¿†œ~ö÷nøy¬C<<%Þ"ºv0ð/þáëµÜkÄ˸cøJîØ]²q­Ö@´âzô>(üþ’›€XX}÷ï|ò9ßJÿÏ+þøówþg7¼ðs.Á¹ðÏ-Q?.ÔÏÏA5òYеžþì›|q»Ä-†Ý·‡¦¶/û÷…‚Ÿì•ݯÒFà\œoP |l{ ï»C¯ß*t…‡ϼ €.ˆR÷kÞ ì6À!Oá8 +~}=O)rB(Ð\ ^[ÌÞ»å.?gÒ|$þ*Ä“4:ù$´;e­rÕ(€„ú×^,ñrúc‚CYüF tÿóÎ ðæÿ¹RüŸXŽóø)?¾ùpIiÿçGWC¼ x¤Aû†ô‰¼~|D;”?@ª Ú5¨ö­7ÜÄåß3LL{ˆõu€àj€-⺳Ӗ¡ s9¡‰AšÕóz…¿ñ`?<ú!– +dôCÀ<\.(ýÜå÷&Õü$8ü% ßñs'îóùàúð÷ó;?Fô¼ +èÍA(K¿LYú÷¿P…¸Üß\=è?¥&Åþ¾'@èùÓ?ý‘/ûºuJ"ɼXä/ <ùêêiå•MJÞz0 Üo&åÏ„”bø³ÙÏ»u¾·_Ìo,²ñG¬_ýº‰¢ +öVÿvÁ]hCbטù +Ô[¹Zw¨I!îøâ'ˆGt€ß~Bò@ß›¼{gs¯ßµ½¿­öÞkî ^TMX¶¸;]üùRß yÿ GÁŸåßñìpTä0øæÝÄ¯Ï %bI#¬òñ¾ù/Q›BåÆ?—¶ÛIü³üPÐëø˜ ý}ê¡ ø‰$à @ZÒåŸ3,… -‹ßG+@º 4b‹:xŽ×Sˆ¤1ëŠXÔüÉØè¡ˆ4bÆÌÏ:¯º÷¿É2:±˜UkEñßFÀ¹ fÁN,ò_>zü(æþ#÷y£žú0=íÁ—¾ ìçWß<`õÞ€ì“ÿË8 ²p¹C±êeÉÅŸHšB’ûÞ@íŠ@‡Îû ”þ±¨öO¿Í()|ä¤"ãw?û¢P +¼ž)ÑÀI­¯öŸ©:afð‘°i£.”‘GNฃœ„UpŠˆy)k§o¬½85¢E"ûÞþWò)†rÀ=3ËB¡à?®6 ÆAuÁ½ÛÇÿþÝ ÜO±ïÉgðbP:*?»¹lÂéˆ __ —ÀÒ¹oÞ|´Z¯l€㪀S $áxtÁ¹è¾ØÏ™˜ñçŠrÀè¯ð–ˆoŒ¼ ìæT ̱N¢w9^†VÊpÎå”VD嶦Àß”@x&º„¤#7–‚Ì$Ìd‰QÕKð!üg´¶ÿP¿N™'DY;ü¿ð _ôÿgæï¬e×(p€åÌ\Ñ«² nïç]óõæ(Î¥òÄ]ù§Û—ÿØjäÅÿ/¨'1(€$Z?4ÒšNžÜ÷ià’ï„àêÛ<ü[`F¶cJà5ÿ•àá ¬ï°JE¡¹ª tÓ×1\ŽZî':r½ Ëëë@CÁ·ñ¤,g÷÷#-€iN>›·)>µ~Ðü‡ +ûÿÀ~ü»WÚ<¥-v¥äsà=P÷*~þЫØúêð+ýE[÷œ=Ä„q[RrLr2eÍÿwDGÊѹ|•PÖwü'ØRzõÉ'ßùˆ†á?¾0öòÎE¸xèÎÅ1xuè"gb¾à…žË¯¾zê—Ÿ^øªOÒ/î‡ÕL—__úЃ¯×Û=O™œæ¤ñÑÅå‰{òÀï­Ô\\Ü ü}‚ˆ¨èþTñJZ¿¤~˜·ÛÕ£,ãÕ›o3mâoøu‚ßò“àqþ-Pì;‡\ù9BAeU€\@ +~Ñú!$E(‚E¦jy@{  ÿøTì,­‘¹À•Çåì` ’qá½Á½{,!s-€> æÅðO>¹=ÿôœÏ—×é©÷¹hd£ãŠwñMàí|óâÍë’Kš|)è ê“74¯"è±ù1¬ñ,ð8Xú5¶âøµ\JÁkQΗ³Ÿò›¨£gq·dœa˜ËæA–‘zå: +`4,]…¯:}jˆm%¿ Ú‚™IŠÜùn¹c”¯£ßú"~ôäÉý _à ܴôõ€Ûucþ5`?ðÊÇZ¿ú€7ø¥ýûAÒ6!•õû€7 ÷7“å[÷²ò×`£€[Þâ‡8ÿ°æoiC?. +Êðó“~ +Hâ^ŠqaÜÇf#¸¦×I15¯&[áÏy÷ø»@DDÐZ©jß8—› ÀèÊûЃû—îÍ~ÿòs=Yûsõ·¢î_:ˆC:c“q|ù¶õÃXÀ\û¢ðõ›—„õÆðU ¾“…*éàÕÀè× ˆKƒCâÿ„ Zm^´[Ѩ’ZmËYü¥¢^*pç\<†BFâÙiâÇmòƽ¹‰ì¹@®³è!Å›ëv0V@§3E¨Ð`.u>!ÈBeªÅU°:B·/ºóÑ­O~wçówýOî| þ¡þ.×¾¸Ñ7?þ)}þ}î‚ò(ñ›.¹sçß|¢žsWŸˆ+<¨ nûÃÂ-FnìÿüÚ;ü)üyn<®®.ºMàC +IDrºIè4bÚhæPR’=hfË:Ä×ý¡CÀ9,îsrßE¼|Ù»fí þO 9AZþü·Ï¶Â³”GXg¬š÷QãAvfâ\ó 3¥›?!xÔlïB™D ó{p`>¢ö ¥ô(ŠKDnäOD€û&þïh€åü<—ÿR‚Ç‘æÒrððå‹×ŒW“N¨#?þèE±ó!wòUŒóÉ-@¢¶…ž£çñÀ±ÌSa¯^êæÖÿH`<øä¬§¾Âxüëà\ zÆm¸ñ²ãNšŸå¢ú£„+BÞüú½ðOÜn¼à5ùø@Uý¥¨Pîa\"n%€Æ9îŸH%_‹è£è?Ž¸Ãƒ¤þ(ªàÑE`â5€`õOÜɇÁæÕÕ×Iúæçµa×_DdÏ/?(Èׇ?þéÁ£úÓ§_ó›À<|tñǨ Œõé‰"y¢Ú(½ãÁí"^ሌ×u#¥ ňUÀÏð$ÏÿóiÂ0î”›Aw×ô@éõëoyþõF¸ç`åà €ª *áá«?¼|ùï« ®ÓüR#/nF“ƒÑ‚7`®¬ ©îŠ'¤¸Ïâ¾Ë– ’<ùÜãçш:î³ZH}W®¹Ö`‚â^·¦zÀ,¨øµøµúÇå†þ˜*àf ™àŽo"Êjyó@Ç „Ϲ5äëbàÏih­v2­¹fÿ×ÇÃ?{°¨/q-ä…ðŠð€â.oa»âÍàuX&bw7 Í<&@‹ñ­[g®3 X"=dòWËiføPÊ_›’ù€²_Çý{€zQàŸ›ÿ[—w>ùäûK½DVhð(0¨L€Ÿp=¿Ì½Àó÷ÉY÷³Ô‹l öõ&_4ÄÆ•Æ—Ò¾Š7–ßxúèÑÓÜôó£ÀWÏ\þø'<Ê] 3# +¡YK7màÿ­0×1æ*à¾ãã3*~íãáz»'>b s4÷‡Éß#xõæõ«Axò‰þX_=üïòyùðM?¡óOŠbAräô©P\òBݳeƒ´+ÊEg] @vs„Gí¹Ÿa˜?òg ópv½‡ +ÿ|,¹c>D"Bø£xà¿ö_˜ÌEõƒš ¯8’¸84†^\lÀ¤CF|ñ¾åï7b€U¿÷¹¨*«`ÙßÕRtÂAœ^v/؞⥓À„téÏ‘VQ~¸âÄ[d£ éhã¹rÊÑsÆ_éDYî—È¥>úÁ/ÒsQ©“mÃ?‘µ˜>:q)Ü[Õ>R:¨·óë÷ñãË.Kô1À±_^~éâSœ…ù«Ë,ï|Ýï‰Vþ`þ›ØéëÕ>þûëêË`ýù$–¾ò›Æ¼N˜ÅþlˆÒ¯ðG c%¤¶?ò]ä]‰@#¦Ý_í;¼Í÷?ó+w™þ8PÐ @™©'‹s0a¬„)zѫԂà¿/äì€oÉ9Ç×ÿ~p¿RB  ðl·ð¨°D\Qöðö¯…—Éñ)âG¨ç÷?C€üûóðX +çû‹@L10ÎR㲑œgŸ¥ŠÌ&…ð¿ÎBó·€Já$¶C#áudr}ù°H?$7ƒq1ßíë?IX˜Mqjþlj€Øç1 ¾¸cåϹ>žëš[ ˆ óSüC+šï „¥G_O |Ž”—'Ô¤•#Áæ8в°Ã°Ì”qa? 8Þð)EÒ`›-ŸL¦¥BþùKRº4T(ýÞ°=Èe#P鎿ùñÇüGHh”ÿç¼%øôAÿÐW†²f÷m¾xàKÞ +ÚÚ‡+ž øÂÐ)dà!‘ˆ«?r‡Ïzfñïó‚±`~nTM Ô>@A÷ –Ž8Cýl~êç@‡y +ózÑW{A½1>èc¥Çˆ +HÎx_}ûæ[ŒP%ò>eÿÝÅÅßE0ÿg( ë4šZЇ‚Zï5Ø–rôm€îÝFÛ Ã)ðKþŰHŸ ¨È¿w  !%ð3@™g&’èï¿Ã}² ¸3~ÆA¯/^è!Ø$‰@ÇÜ»ÿqhd 2|ñª-ï=N`]:Õ/i뜢¡/ïk‚“¦¾îϳä÷²ùë)x×éµ—âô¼êÕƒWB*3ˆÚÚCðìnîÏçŽÕ½2DùóšÿNµ¼ctŠU ¨Lî¥$˜†øhÖÿ>ïó¿¸Á¿áF ð˜—þ¹­ Ÿ¤Øß_^=ÉŠÏÎ_ b€·þðÆ0î”°ñŸ>¾zÎ/†_=§8(Ì—ßwýçBüòaΫ«¯x=¨Jçè÷Oæ`©p_¯ðóHR®LEvØ.ˆ¾ôç^Á\ØQXÁÐ;§æËí›ÿïü  SSÂÜ× Ä-À·ÌÝØ}0tñwj€882X‹4”m)aE̦ërˆ+ÚC|ÁgL¦A®ÜÆÁ,¼o¾ „@N ?×€|2yÔ{JÊrùˆVIiù#€`%ŸM,2>£ícÀ /"â‰Ï»p~¦mÑb>ÊH¹ìwÜ4Ä”&Ά!þžp mÞMœ~)ƒNÈ e;í`õ²|ï“ ã¬„ÝÔs–ˆ–„2"pë§‚Uèe­pœõQåéV¬L–{þÜ3¦U¹ÂåS&· +àâW‚œOGâ«vs>ðùÛÍú¿îñ"`r^ýgA÷;¿üU0`ä¥ÚmûoxJŠã†€* ·ùÄId!§ß+ èGgÄ xÂíÃÕ¿;tù¤·$O¿ÖL0ýò繃ú%6áb€÷x…-ùÞ¿0×®Iõ— fŸùó>X£:…¿í1 †úí~Žj…5a½Ê¹EìÄKÀŒú—-ñˆÒyå/¢» (kD^Ÿòãî9x¦³»Ÿ%QU03$ŽžrS1J!-€Ô“É¢iÀt`êð÷ÒÑ>€‡)uüGõßßÐ~ÃQ¼26x;P^b¼d'v¢þ/A<¡où"Æ ÕÈÈyæpoÈ?xÏuúò.õNÑ¿Bh€­©Ò«¹»×HP‰áz¡-¸â„w(“«ƒÆC<ÆÉ±D¦<ï~wœ34V@µ\#I¦GÔ8L€}¶˜%%ÏNôÌ#*6ú䎿Œû ûÿ)~ˆ;Aw‚#ñXë1úYΫ«/âÿúñ“G¿fã>ðü9 `†°žG·þþ·™|ç­M‰ç,ñß_ý\Ö¯=™? +îƒÇç©ðóŸÝU4w €ë›Åër7ôê|Öì•÷„x&ôܹ3|7ïdÍÒÂàހ̈́Ú×I”¿RdvÕÁ}†€rw¨B¿sçö¬òàl¸F,™3k–Hõ'Úë)é­Æù¢ÀŠ€CqÜð¡ aAîXÜîÝt<ò-Æ5Ÿ5†%ðÝ@îËLx‚¸ÑÇÃ=€*SÍ©ƒ +ÓÑ@[ºaà³>­û7P¦Ìø†ë¯PQ׳ȮM¤¾•àu +}"%å +-I†Ì†s‘#Éûúµ@¢L¥[ì(Ð +›…­%Ògˆ@á×fˆKÿWºO?¾ö-ÐËÌ‚àŸo?Í}~îêÈ öâ1œñ£«Ÿ/¯~æ¹P‰íŸ »ƒ „…z7þ)„¬^®.Ÿ÷_Çcüñê;‡_]ò­ÿL¿'—_Á˜óê›ËŸfK¡EýüÓÏ? I€¾>§ä|ú äÔ{Ÿ‚øãžO¬ )ÉŸ äLˆˆ÷ôÀ×ßFdòîû'ö¥ + ë¸Ö\”[;½!oÙ¯Û¿¼œú`ûˆìuXGˆ˜OÜ ~Ýa2!ÀfNÕ“Š|þò@8ÃÿàóhÿÈýË~Kì½ãËËŽ/CÒO†/^h0´êžì«²›Ð©µòMÀSbØx +¢ù×€x÷*Å{é7jŠþEêÀÞTé[ û—õÒ«4/õè–ôuJ2m±H åä¶>ÈvzëÛj_‰G‹ýw?×°æÊWÌRžpyr¨¡ËöõŸ¯\DDðk ÝðëüSP™¥?ç£~•çgÞö D=¹ÿç1ÀcКÛú ÿýQi”ÀÕƒíianÿc<úòé“Ç_ÿ_iÀôøñ7©¼øOðÿôó?+¯ÃG BHï7Óš¹¿N‡ï gò’›UîVíZ Óö%¯ßY<Öÿ¤+(à!EXKnd}ŠtäõÈÌëJ6sænz@ÃbÁÔÉÊ2 9øc8ÿ×<{}ÿÿÛ¸;|s Ý´À+„³ô“ø¯÷ÿö#«îŒÑ‘þO8àžõ¾G£Á‰jí¿ÒªþúóßÌßB"»¸^h^1ýœÐ°y ÞF:›”®%Ö€*¼Úoûø û"bzî×Xºsç£KßÇøï“ ûìð Æ:[Ѿ•Ã{ö¥Þo¾ù1&ü|û7ø¿ŠÛ7wƒñZê‹„–ò Ò¸x~5›—̰èŠ(€ÄWQŒH +ÿœë žEûT›¹ô›©øÞs¿‡8¥þ{ìýé¢ Þ#­Ø:‹°c®žf„âÓÏ€Øó"èvÀäËòðÝwe©ùþ¯Ñ›‹Àh0=V€àÞ`-Ø/Š¿QSôo ~Ú€_‡Èá¿Ë°¿™ +õ ðzVÜ`þHM7+bÁøºuí‚•âø!eTáN¸1È šÄ2í ‹`+c ÅPßèó;uÿï¾æŽìúsaW÷ÙF€úäKöùøo ¾³÷ý“¾ èÇûÿàŸ×ž>ÿÉ{¾÷+ñ"ð¢Ç¼ðÍSÿò+bi +´€¯VM<ÇÀøÿãAðÿžùøR§b‚ y?üí\C¯y +Øãå^~Û€ã6@æðß僖¸B÷îó[pϤË€›,ãs¾L:!ÿß'¨Ž¹ÏwKH‚YA¯@øÀ®-L}á_ÈÇ.T ÍÏïø5,uïû”Ø ¹Ð>|öÑÌçÅM€ÉÝþþ›|<^_\|ôIÿððaë?>xH `„æžOkÿ ô `iù«$°Œ½LŒžå½™\ÿe2ô½à™U^’:"䂯’k¤ ½­[¬¤­kâd“±ˆõw3í‚}¶ü‚¿?ya‡/ÀU;\dÁÿñ¯~ü:~þúù§ÿá竟®~þ&ŒýÆ.ßîoþ „oñK¡~­÷ç‰þùçoæ À~Aøž–ößÖû3ß ÚŸ¸¿ø)‘—ü´ð?¦¾}œãéñ²ç ~!>iC mžW€þ[^ཿĽzõ-Ôb|Ë·^=|ùïYü£ + +~V=ˆB7[ó•Mc纑l­G©¿Xa0VßL©š&Ìoˆ»ÃL6ÑûÞ¾Ðï•Eˆ·Q./ïGó °kçÝ»¾¾ûž +`ˆæ:OÂAXꀮÿÍr¤‹‹"ù”\ô1盀‹§Ÿ&¼©€¿Ì YüŸÜ¿ÚØ<ããÚc…6oc9~7éGÌmA”yïÙfÄKäXy!LÔš‘^nîH ž¤Å!³ç–TЦß(ø¿ÍM®Ÿ_t¸¼üçÑÓçw®ž~ýõ“¯ÿ„Eÿµ¿Ï•u>Äøq€+6ó} wõ}È!¯ÃÊB°Ÿ Y¾¾äå?ÞxúôûÑ8_åàêêO ò'ä—üg|_}õ§/Rg¦õYÚû€oú”xßgbo LAçå:úè: ¯^ó´‘s}ðU_öŽàÿû0wß>üvÀ?úÿNÐaÿØkGœ’rSd#:œ +Ó|CÄùi.X(Òd1ox¨ÜU;…“ÉFƒÎ¸àáOÄòô˯ædgÓ ÁQΰ\W«|¶¯· ¥Àaý/ç~¸™ +nwšÐGXYðOA9@¿ù£µÿeÐP°¯À¡¿…„3Î È÷¨FOÒ†!ß>¹ˆ¾ ‘ ¼+4d¬Rh¸œÆ°Mè®Iæ1Õt¢qJ—ü;GéòÎGüX! àÓú#øý:¼í¯¾òŸ½¹o×@ø>`OvµøÄ‡Ñî¿~P¹Ÿ|Ÿð÷ܤˆ?ñu"yQÑ)ßQ +ß÷ßS€'RËüÏ+Ø0èMårr@J.G<sí­hðììÜèæþkÄ,ÍÚÿæ%/³ô­?‘/ͯ€@X7ÿ|! ËŸ€R%2â LìJ-™$›¡¸ø´¥Æ Àµéq‰gc„Œî&cx²Ú[j+i9Ì4TR,¤vÉ¿/ÙõÌ3D#†íp.Gw^þ5²Õ,¯&åãDšfüÔÀ¡E êZQ¹ÆaôRÜHìw·¦ävÍ ++µå”|L³+8©ùl¾ŠbŽ»Á,ßÜçs•{~Ì^õŽ+ø»ú3Æ&w£Zûü”æ{ÿ‡Ÿ.掠ԟ ø~Ý&H±Jd5!ùŸ~sõãÏ?ç>¡· ­‰— bPˆ z*Â+¹\ÄöÊ©¹¥â=#èà4ÿ%DÎWjŽ?ÿ¹ à%àe÷‡ðeýÿÀ÷j~ à]ü]7Eå¡Dκ‡Œ®|pTlZd’©†zUH£Ø 8d +%4›ž¤YÔ–üŸßÊ4àáÏ£Çý+†/yyôø2ÍuÖ8˜P8î0r(€FbÀ»Öÿx{Ñ úó)²Kâ×+ðЈ9ʸŽã%'uÿ:ÙÄ·ýk–§Ì¯?<ë4bw¦†_![½ZªŒO¾ ôÛIP÷s ƒ§ñ{(nE‚ñ˜ + î;#¹P`›xàÞLÞð&“®äK_÷EVÑõø1ð÷=°Ïýæ_T~•€Ïþ™¼ù?Ðs~ºðÓ£Ÿ½ûO†?šÊÀ“>KzôôêI ¼@›-pù3¯6:Çs~ü¯ðç`þp諯žôu%Íü‚|H0€W±`Ø(2Î(3ñ/ Îoã|ûæÛ—|ý'KØ@_ú6 çCŸ +æ5ðßüÍ ˜/@Ê#´ôÀf 5|º,eJ2#C®IÙ…q3-Ø ÂŒ‡Žì™\Õ4©n+ÈÄÖ°óݽwv++‘/€>Fnýߘø'ñìS~¥,+LG3tªz‰»öD}9ÆÐþ—§ÇwŽŒ{Å}|\ ´!Iïÿ-ƒÇñ’ÓVþ*¥ |ð„Dço¤ Ê¥ñpYqcÔݼ¬þ‘€‹?ÎL€H´ +3`„*¶oÄ?_b6¡ørÇ|q¼’eºìB† ê#à ó'O¢øA ûY²rÿ³èGKiF,€ M;~m¨Þá}ºt-¼ƒoFüL)ó× +;— 3àïF ´^½?ß Tr—9A¤›K´t˜Œ?‘îF¬û;½ÿèWO¿ÒaøúOñÿèÑãç—O®x1 Ë%ñ^ àêêÏ_ÿ¼TÀß»€ó3?~÷?fÃáÀ=öþüÍ7þñêñÏüü8I-b,žõ˧«î ;Ÿ÷¡jò–Êœ»f,xô…ôX/ü¾/q脉—>Ž¢ÈD¶pO+–Úñ_âÕw¹x`= +ìÀCÀ¾hÐŒœ‘7âRêÔ·H"ü+ßÁh,ÉËXκl5kD†îó/T‹ˆáã=df¡¿6€ð ` +ejy†õhćNU@üü$*Pc¥w$÷¼à?¤j~ñÐÁúâˆo?´îÊ·Ÿë³¼:¶ëÏRÄç\98ýí´¾}ólÞÓ ¯§2aàÿ +/Í –:Ê`6q’0Ø.ñ³±£Ø G¼|(‰)UaãnOƒÖwÁK™Êj€GéX—|ô9èç›ZÿÄ-kÁåW<žß €yþ8fàO&1šâ«§—|·¼Ë€ÆøæÏÉ{À7þÂ;*D ,Ôjøõ~—ˆÈkCÞuJÒ–:¢ÄèšÏ鲯×ßëQ1ü¿èwJ©Ú¹|³„þÕ{;¦Vxâyyò"€·þ÷ù…?i“J¯ˆ¿Rß(‰½Üʼˆì4Ö|2'6¶En H‘£›…™‡§‰Éee¶ìÎf¡s,~ŠéöA(‘ñfý·ØÙÐôZuÀ/ø‘m¶þ»îχ”r…›#&B†WqdÔ»ê +ü^‚a\ÑÜËPA·žS_/u¬išVϵ`É«;ŠñÕ¿ÎøuÚYw|m3„*Ôƒ0"ø”Ñ뎠û /¿ß í·j!Êö_;û²Kr>µî_^žX1Ÿ£°xdYÚkà§“=ß=yü¤°ŽŠÙ-€ÇO¿Â*ôÿÑþ&@æ°l,„€„FFß½zµáÿôEFçlË|Ã^ßÌüN5~AmBK>ê`8œ‰ìø‡€C/^¤D´ +H=€5‚é®ÀNƒþ‡ÈHÚ~úkaJÊPVü᢫ü·ÈŠÓo…¬HˉwÍŒh‚=Ö ^£ÊŸaêNü‚vh’ø ¢´=K]h¨æîÀgC³…f€Qzñ +)äð5€ˆ¥Î(ØQüßt;îë-¤¡uÝžÀ§w¿"ꨥC©œ¯!mç +ôî&x¤W4áoOè&ÃÉ,éψhÞí„bû3ö쌜½#K²kzâ"²Ze¸&Ý”ÕçpKLgWØï«ÇlÞ¹óùƒÏc°PÀ§zryõ5 k¹[ñ‹¶=€+ž”x +øÐüøëäò8±¾ì€@™R0¢"®ž_1gÖ4ùWæú]¿¦°ùëJ¦‚ Fnù£²ús-äë²%ð‚?%§F‡9vÊŒ‰@ ¨T-{â¾{ý-€oi¯ç6üðA¯GÜ\ˆTîCªÙØ÷õ0#ËËý¾ +¸²C›‡ #WÈ2¢ +wœaÃ5qâCüByJeñKa£Lbú1áh@ÎtÏñÕ¾¡¹ñ{?°ªf4FØxJŠWüW>jX11ègÑ̹p^4'Õ°—†Ö9N%²ˆEÞ3NªÃF™ö àÿ{ÿJª5p°rat ¢@7ÒìKÚP’ΣÀwÀ ˆ/xcÂåšBˆGRæÉÇ; õÃ"²òU`ñ {¹!þáæ„®Gì/¿…ú8;ñSnlØþ2±?îcóМC#çÉ.¤ßN¶!d-ㇶ¯¶–4úU öÃ⣠7 < qDÐDæÌF œñ;]ö«q :øîå9¿â€¾E ¡{Øp Tè(X;È}ù’ OŽ]LLûEø&??DÉÚü"5+ öa|3ͪaÑoYYÎ3ÙTPi6›ðiTÂÙ§¿ƒ1§pDsÖºF¼}÷æÅ댞¯²Ö{™!ÄE)([Mò̪€ºÁq> 䋌«ãaêñ\ÎÈå„PLUØH‹Ÿ'ѰQ² cê=@G_Éàæ +T#­ìÛ;cjÄë~±Ìs·Æ7:±ç ~þ¬LÊ´RÅBÈÇBC_È­ýÏÒõš¡è ôë­ èE¸¡WÁ #·}¶y­R´ª€žÛç=b &GÀ *!'Šà_så/%Û°‘1×¾?|BSWo!Ìô;1ç€^Ðg—¾êÓíL€…y®^p´µ¼3Sþ‘ <‘z|ýs+?¿æxIHÐd®\f[g²· ÿ€‰²ßÈ›ä/XR4ñ› ‘À‚¡ÏɆÀì™FïíäI™=Ûÿ¸¹yŽ äâ¾|øo`^\ðnU˜j&5ªàN’¨ùÁ¯¾`X÷HÛc@?×üë‡6ü2µ9ä¿™Ðuÿ@{UsO(RW"(¤Àéñ[(È'1H)XFx‰8gªhuâ GJZ?‡}°X#°ôÚ3“ôé0pçU÷¦š’s&y•À0ïôb÷#Þ7ÿ!2²™ãÜ\C‰¿ÝëqRøù îÄìÜ¡ú>ýRZitX,€Ñ¹¬ +†¿š ׄ q¬2ÎmeÊ&zÅEL¡¥!/EÏ’Lë/ØGûß_ÀFñjN¶Dàï(Õç¯FXiÂXÔ·Cšì ¥… ÚæMQþÇêÎG>ÑÔ›×/¾ûáÃÄf€/^*ÛýæÀ…,Dò ~/Áq>שñòlhoÂ:碬>@™v9iÒióK)ÿ¯Bï~Qˆ¤Ãõ¢?v"³*O GX¨¢u¥ÊÐm2ZJ¡N´ÿÇÿƸøkÈŠfô@Á,ÐOp…ŸXYV4Ó=Dp~2s‘ñÂm ä ú£>Øéðæ{5€éQAÄYº‰@ÛM”æ Ç_LVÃÐM‡¶°óôH­erô¶ŸKêeøhÓw/çÿ±¾@¨# ™%,Æw®Èýºpþˆ.âœÔ +—oüÜ“Àö‘ë4UxPŠÇÿF°LÙá:ë>D¢½Õ´mY^:{Μ|4¥HdS©Â³Ðs(ҩԠܼ|÷î» RÀ,¦CÊ+fÌqXuÅ7 ƹF¾$Ê{YçÒÛyó-ÀNXŸmOÄv°L8ùfÒߌÀÿÈ–—ãÈÙIodÀ¤@z‘Æd•¶e“"²+ao nÝÚþQ"q!,Cæ,_Ày~Ž1_µî×´å+­'`†ŒˆÃC“_½üçfè%šá¿SµÀ‰TŒt³uî@L'~çב´¼¯W]C‚¿ú¸F¿I ´.Îø­ +8è—ý@§nâÂC:˜S[*mËo$)þ« R d„rŪ‹¸D—’þáÅ o@¢Nha|.¾ÿ±a9E[Óï=þ.ÔIt½$šR_ªéSî™0ÉFöh•OùÃBôM2S£æÐn* .#™óåÅwoÞU´ß¹pªàé‘qô·ÚÍ¿,|s‚äkdœ< ë=ß (¹_ /ý5»a#øwÓ.H=à©öã¯dâ0Æ£pòaýGJHôú·¯Þ09‘Ûzðjð)@ºÒ ñÓÀðO *à‹sV,æ+}öp ö×ÀJ¨wÙoºoêA',ÿÀU¯1G!³þŸÂþ:© ï–P"к†`ÑxGϳn—’Y޾ýÁ‹¢­§”¢/Rœü ¡š°3‡›¬4®èš@#ü¬‘áSðQÉÅPß¼ÃÍU àÚ-Àë7oç¾ +õCK RáÝÈ( +šècêîÀ¯XZ(©6Ö^:@Lf”;¿mÈß–æ.@‘hŒëø+*¦BÄP fú°ÈzîÛ ×0%޼ZƒPT2…âkíL[ €,è¬v8  pÃ5RŽ\Ë(Æ¿e2)¦ó2ý!|†ö¨®¨/}êN6¦@‰_œB.жÇfKÞÓþ¹{ˆ*‘µÝŠ—Ã9kxxBtíU']£f¡ŒC¹‹ˆ¦F¸,O¼0âŒÖGŠ—úZiYÄ÷¯²ÞÁR¢ÁÎ`œ#9ù_ (ƒ”/‹9åOPUÄö1j¢3 ¢Žñ’'m£9 DÕß’_ $üïÞÀ–:ªŠÍxö^¾ÀÓÕïüžeF¤²5Ž€K)$^¸{,Šà="èÀ0Œ§~)ñ ”»”©Þg<}Œ•5@ÿ%PáÆE<„²&lâ Ð!ÖôJÿ’È”`¥8ÿÝïYÒÅ¿+Šž/1íÈ›p êŠÜ õüÁ»æx¾ãÀñA_Pî†àÒîÛ¼ËèqÐïÑö^N&ÀgÄ ÙܰÜ!„•ÏØl*’ wl€.ÕCɇº£¿V*ÖþˆÀUF{TÍÔƒ„¡‡„¬3¥¼GÉCIýéF›!Ęg•”1b3\V&A5{8ƒ>DÜ`ø6üg&ä2ÏžMT«Íß ZÑÄäeˆ2¡êJJ™ü%å@KÚ*&Û¤ùNM‰ã%øÏµ’ó=€X ÅCo»)€ +6¹ùç-!bÖñþ€ÎN®ý8‰ÜQ¾Ñî_j`dòAºèË ÎwÜû³ˆ0/ò±{ÿŽêfÚ€ð€ 8¥º«„˜³¤ü»DdNñlÏéâkœ¬BÀOʳN=Ýœô™å,Ø` ä+,¹Ëïé(z ·1”Ø:âk#õ„L|îfò ÀzJÎ.Ì<õ ¹a1Æ€ÔÔ˜lË?gšÂªÏ@ñïlE9ù×ë.´ G`\#*Iƒ“Æ×‡WšË ¸ôŽmIàî¹ÎV Åhò>x½{ñBDès"x~'‹ÖP÷î>óA”§ °„åÁr*”ý.·‰I…Mb /»ÅQ9Ç5†|‰ägñ7OH{ÍcFu#³¬ýX;4’¼iÀ탄o°8—úðÔ³»¿ô«µlO-äíË™ÿF{Âæe„C*ÅâvFÜÌ€R‘þžéä´BÃϼ!ˆÝvÏý~&\Cnœó[¶VuúÎ%ø}sXã¥x^½zíÿn¿û8©`+j3‚·òM:Ïß %kËx;g Ö^ŠÞí?ÈÁ\R83A@rJY`×n„p÷XWü´Ê\©uÊ¥¾½j4È<ùGD¼ÿ…S‰æjêæ¹‰@tHÔUèàû¿G@—ЮÐîEÆ€0ÊÑ¢»ÕôP +#¤b‚VÞë a]äþ\×ÑœŸSU’S…ôj‚”söY"R) +à¶ +ÀÆu>Q>SrCÿÝ{²¯t2šx–ÔjÄEÆdjT¹4åùn",Ç¢Dƒ˜ïe®ƒç&%4±ÇÄÝŸ\†*ÝS-¿ +ðú-ß]Biuuú·y + 1Q"‰eœ(EŽ@sÇ®[@¦I’žÝ\%d;§rF¾È44ˆÇÔâÿD¡¾ûC·ðÀCr’&ú#œŸ×oÞ¾e-ò¥Q¿D…. + 3 ä\p„êùá]gɆ/df‹Y„¼úQÐXTo…yso×RJž÷W$Š^ý§DÊM‘ƒñ¼W ‹ÛÔÀuM€ø"È€™ÖˆáwÏ eüˆ"qiGðþï¹­}ç§"¹hŽÉúÌU:Åb½'‚$.2s¸çÏüãèÔÀQ xó}J¢VÓ“Ü’¢P¹Ù;U«‚[ÐxXÀíêž!d0+Ñ—ü_0 +s΋*C~â÷Á|½r<‹Šüº$È Û0|Ðo²x-˜Ù‘¦L¬ê/þYà-±é΂2’ 5nìµNÂ,,XL¨Ì»Ì¨žÊ_xð˜u#8|$ßù9Kñë?€(¡=û{;¸Ü„"µÀ?Súá^ù, RcÃô»Wÿ¦¾ø+è”6ä_Ã?2N“kØvR4Øs¢íDÇ\þQ{œoÔ ~÷æ¿]ñ–? NùaLW7l÷*Õwïµ@ŽRú‡u„¥¾¾‡¾~†ÅB ÊåÙ=oª$äcÖoxÑþQE°d< +¾Le –¥g½@&ø?äÍûìYŠjŠiN©7Á|îߺMªµkQ¤]üÅ‘Î2LœG+ «Ø"”2gTÊ•îÃk@]Ìïf&V_¦þ†ázäÒ Œ€‰ÞRC»ß¼¹vJ|˜Ž{?ðœû@ñ߆n}$صýÿ¼ïãXƒz¥ƒðϽðçÔx~÷.ÒF´ÚŒŠð\Ã3‚ã9º°|‘(ü.ÿ! Ûc±» .’QœZ âyÅ ýÛù—ùßþÓÿüÏܼ‰J0ïMÈç + úÞýôR¾¹3 ˆc"HÈdhóÝæ£«}×È…¿Éú¯¿ú.70)Û4û\²¦¥n: B”2¸Ç«þ‰škwª{[¿ ôúµÒsG] /ĵöljâ+‰ZuU±`¯¸`ÃZ€Y»)sáÏb#XÆ”Ãb.ô›ûIÂÄ'fSg·"qiGk–˜=‰Ç(I¼óçÞ§‡ŸN¡ggwéª:€ï×ÌèõÂXfí‘…øgt„#Þ æPDÎ#8BuŒ<€>ðÅÓ…~ƒ>D€OùØOý¥_³¸/m«"7y$jþ7",€ <ÀÏÇ&ŒZ!ú!¹hlKʽ»ç±Î?¯@¸ÝàqRf‚4%ÂTȰz,2bø–ð×o¾eQ|ûÏÿK —ßz«Î«r¿L7i€"W€ŽØ+†œ+½ó¯‚­ŸÞÄŸ+) ¥ðñ•9לBÁßšKÒ(”LÙ¢{>¤•ÁöÐÑÖ Kj3û T¸·ÈŠ»ï»w?ˆÅ6äŠÒæŽ\’†xª"®³@¶ÞH[aŠ$+Ãþá㨇 “âx{÷ì<Ž©Ï0úùÙÞ@[ö°7ÄåÖÝÌŽÔïܰþ÷ÃoÑ òêÁ4RDv–ÿïæ¹ Ãü–/›4rMT@s“§pôX^pä«ðÿãù'~³æâbðÁ“v¶î®>Äì4ø›˜ŽÆ¾µÐ.ù k硌Pà:ëIä›ò^nîÎÿü³%ÎÜåÝrӇ邸ýïΞ墬¥tš_´LOý‘?8*¡pFæÛ—_ÿóë^ÿòßÞ¢ ^¾{þ`ÌÒÊø(¬b{žñê$ðó+Äì[Ô©ØRsèS„ äCn ‰&Øi+¥0—\ô‡‚|‰¢RJôÇ1ûõ†&mO`BlÈ qÝ?ÿûÄü^qí r$«M|² „“„m‡òÎéSÁÙ0äïÃEýËœòX´1ÃÇ1yÈ•àþß°ÛÂJo—ɘÆu Á¤P3Qr̽ð9Òu.ÊУˆž~G.¦¿ôòÂñª„C>$k¼ÍHä¾Ðcs©ªL#i ?¸¿Ÿ-üàù]ôMøÿ¯U°*€ø{iVr]3 /QÊm_é|ú<‹˜²*Ä^‹ôTâp²Øg&=WpÆ õ-Òm†~ÃÒ÷çÔ +¦Ìþ·o¾}ó?½{xñOÿôOÿñ_þåŸþC4Ào¾M^n¢3z~¿ÎßB)’u¹h/HšIÀ "tàÎ!Mmnÿ3u)×@ìÿ©,Ç«f›Z!¦¦z7J€Õ+%\S ”Ý6P«„D‘Y0¡ªÁv® )¨Œ¡Þ”G\Qp‘˜pÉÚ2IâxêÁj &ÃF¿9ÉOÐ_‡šKå¦+;žpG­úì¿l¢Ã…ï;¾HŽÉŒ#‚ù’à÷,Õ-€Paßàò7l9L§ÇÑýî»î°6зѴâ߀‚|HQEÕ0Q¼Î7¢øÎÈ…}†ãŸ7–Rdà»õÀwn´ðf€é8 ú``2‰°7®^CÅþ˜M—!q|šsù¡>^EsÍe‰)G/ßÍ-@bizÚ{ pøoFÊÁÕT¿Î.!'oïc±0«ÄH á©ø¥°ùìÛtþD†føìï« † h€ßøûàwæsÓÿêáÿò.þ—ÿö/ïþÛËhà—oßAìôñz 7Çoþãüõ] |ª¡ºb%ÕƒüSB‹ÏPÀ;SÎrŸ‘•hÁ¨\Ñfz`Äç^&1¢w¡”ôMìMTà·Úí8õ®ªðr=ëwèDuFŸ›Ü MM»MXâ1<ú´Ü*.´û&®AQ}€efrâܾÅøîݾûž?Øé;rØ£“Ç¢lY­ #·4A7'}!BœÇļ5c^‰(#p´d÷ÝÃXo経îp `"¼øÞÆúj‚œq +¼ƒ¯T%í€Iõ”kù¦Ôžû‘;7¼TÜl¼äîüpü-É‘e_·u¥BÀ|Ìñô¾o&ÐNØŽ*é¤öÝíIpj!¹|b¸!½ üº y v>Q¡ëzà_éøÃëzxñðÝ?¿ùøâí?ý‡p‘¤JÎñð¯cD즀Ÿ¡.E6 Þ´€´PX*‘kÔ_Wtàk¦ghy¹ŽK.øL×!—}>¥ã‹Cß’Ðè„ð³>hµÄ¡ä3øü#wK:©GýÍBÎâÏB»oÄäí}`ÆÝÿ]¿.&qÀ {Ö„°Xü‘Ð=*€ûüô4{ ŸÂr-ê%›”Ƹì[±öÊý¬ùXþ¹jÈï(T/o´^¿ýÁMàÝxe:T¦$LœÑþ"°ç,н”˜f^6 Pî¾À_~躰NÌï¤+7(€ +e'`ù7¢–¯"¾®ˆÞ¾¼ÁwB®Sg3£3*”à$ÞÊhÏøhDªR/-øA"/+y•À[ÁÆ–%ªáÍ»7/ÿÃÿÇqyý/ÿûÿ¦àßh ê—ïÞòcð7QÊdñŸÐ ]'¸a¼@á‰,b–ï[ñ/"'àÇŒ‹»Í¼Â_"dŒÐdÉm¦f¶¯Dèù ™Qg‹3f+jµ¤±Ì$¦jòGbl˜ް‚p„¢¤Š×&'qyOqyÖ +€LJû”ز BŸ-Ç^§ñ˜ØßÎÄɆ}bÕ·Ü +´jw˜zèü±/ÒÄ[·c0´ô;Qð +!>›Ð-ÔedÌIs€ã{ûÁ=€‚žs®`ú°ü"H +îö)ð—¿aJõìÃÊíÀ±c¤´e:5Ç{ +úÛX€|ˆ@ãš¹ eœŒôæ/çm¾ºS&Ô0v®Ô/¿’Æ.¸_pÏ]>«p@-½…ýº ô*ªááë7ß>|ù¿ü·ÿ-Çÿò“ïÝÿè½ÿÿôîÝz÷?ý3^^~˜e½¹v²±ŸÛ…Ö¿BlÐm¿Ê™ÙÓÉÆÜÄÝF+& †]ŠÓ‘l6µÅé5²:”•öRã:HJ|g¾ òé&rš–£Î vG^2ˆt Xñhi¤r“( q¿áÁŸtžöñ@Nm‘®\ûQ!{g×,4gŠS€é5r¬b´jc²ê3?ØO.þ}¥ WšÉïSæ¢zj²YEôÑxá÷7 J´8Cƒüu†fý‡ðG‘¾Nù”>làøB;mÈ‘~Ðt·}üA‡›Èöý•)âžÒw£.X`¥* &Ð= B¨Üv"¨ö³²ÓE‡ë uywä_¿þö÷òz‰Pª¯‚’ …fÑ.û/PÝYéÿS¿Àƒ€àÇžßò¾ðÿëÝÛÿø½mú€ÜGš[ˆÒ ’}ÞÞp +±œHf-܂ٗóX ~PH*ûýƽ‡oú\Ëoqd ޤ>UÌaâdÍÑX‚DŒZX)a;Ù.‡Áÿ‰¸D¡b‰Â†i` ЈkV"VA¸Å!Ø´o‹Ž{ï|ù™nv8¡aÎ…ßµzSâ¸ÔËÁÅ|£œYüSëmœÕUzí”U¢ EŒÝˆø ÷òç3ÇNêÍhJÜžuöL”Jý–~8p¸n{>mÑÐ &ø¼|=ÒÛYŒW*>ë§ŸÂö/ ²“óMÄ¡f\Ž™#éRü¹Ì"¹‡sDèEá¯ÏÖ îà‡²Þ=ü$Æ÷D8>Rt,€‹‡/_¿{ó0#ÿð廸£#’ÊØH4õå¿ÑuWz1ö ³„V¾‘SMLžÔ(eËUP,®Ádæ)m#µA®d¤,’Ç­—eN׃Óüc•„0r Z*‹JŠ ßåÖ="êÏtå,âòºq!(œøY¼)Åå=>ÀŸjLÌA,ÐFÖå 2äŽÄJp– 3? +H,» +¼øOƒݦð ÇeùOëRà64q;a +*°Åâþ*€w§€L_‰gô² +`Î ÷byËQ´Ëáeü¥±¦ +VsLuUþ –n¢l ÓeM{}¤}\Ž”aß)CÑûÛh²¨=ŽÔðÔ‘aÇS¹K]¶/ü±³‹w4¿„·“­Ìì§‹¢“PÌ}–ù(€‰Ø¨÷ìZ¤wá{÷î_Þ½›ø_'4éÿîJ/^¼lfY“U@‰8Q w¶íÄÉ!3‘)aסY¯ëˆ{˜›焦$hÔÑK ofå·)²z®Ëu:ˆk’»a}¡@"0n¼Ã"P & ‡]JZéirË ´«(-*"®Ú£Q¼FPs8†¸!˜ùaV• 1›éA9s¯µ&ŒŽ¸?Ýfx8œ2qŠþÐz +àµXùª}ÄCšò‰ïºÏ]&ûøÀPø˜ºoÍýQ +¥ÎÓ=€ø¹àW ¥n§àjÛFŒÀ¡£QZ^®›Kýˬ€-OrÍ·žxH޶a§Š¹ë$ÕY€Ö§-H•É“­•…:ð[€—pBÝ·‹n`~ýîí»ÿÄK?¿ÿ!ž²òÞþƒ2 Å£@„Y®áâkØ¥©¾À»@.Ò–6.œ’åà’½‡ÔðâÚ¯2‰Ë—ÔmË‘„×4Šç#°Dä''ÁupúÙ=CB&Ô]Y>€+Ã_üqÛŸâ +ž›Nü ‘xuC¢o±ä6ÑZ@.œ”¥Z6 ~Í9 ìe¹Ï=|”€\–O.Lœz5H&ØYeÜ5éŒ þ±$Fn¸Lšb«ˆî€¿ +|}@&èú@º™jíœùÔí…¹Ãôqqšpr½B«:®ÇcS¹é„#ýHD4Õ %;ÙÆ¡ƒ?íl×h[ÔÿH;÷âŸL+wÆ=I ÿ !7Hñʼn)‰ä+ó’ +@q—5÷‚¶XÇÁéÝ·ê'Ÿ7„Å0à¿NÛN¬þ ¦MõÊVXjiÜ ¦ò#ðý /B ,$K‚ÝÊÞ£¤ ìñ^Ÿ,­ÖƒF„VÀœ©×ò>9ꔜÐQh»¸âÃï-@€]‰È&õÚ0ó¥ 0Y(UI`Óž²QÍo1N€dò `‰7Ã!AÕpÁ–éヂօ',ª>R_ jv;­#Èâ3|já§OàCzó¦¿{NœÙžNöBÔãdÿói¢É=÷@Îv àÚ£›7„\‰=¥4ìv2Ÿ´µŸ}Ü~ìˆ. ßu±?¤•cxå>zVíÛeŠ’ÉOV•D'œÏÒàL"Ff~Ÿ'™½¿íêÃw €à4êðtf©/rÖòüêïå|˜’ +CjJá³Ù¡&€¿çT/Æ|¸ì¨7Î)XJŽ_j¯ù½ Øäëº>‡pÞˆ’ˆ{ÒF2’L µ Ö3¥E˜ +À‘®?NaIUdD%è*+ì³`·j€×¿dÊhG®–!ë,ÏPxΣ+xv™J‚¨%­àÉÞÄê–mÔRʵ‰N«´‘›-@U;ú!úlÇ™2âJˆçÃâþîóe{€‰lY´'5­ +1õ ÂÝaÌuÃ}/9ËQžkœX}·£­Û¯Z ÀŸ.:­:´”ÒV"tõ"«.RQ] ÿ*É îW®ñÝ=c"Øëk“X "=Åtïž0®€L”‡—?³0(J§·‚¶ŸdvEÿ«?<œÌC#†eä¼H ÍÏçŸÒ©ÅmAl#žJ’ +€»€Sù ” Gž í$,´ƒ1$ÿ_ÔYKêðý"-N sÂ7hfã9çÓ£§IõµeB +žÊ'2l¹›²46h Ÿâ‚*. žÂ²èwan¾ð< 3Ð"9¡sÒs¶"æ#Ù³ø} ŠbråÚú[6 Th0ü¾ÄûÀ|\36ô‡0ÁÞ˜¡ýêLæN6å[åŸD½oÄ"ya¹`þdƒ?3ez’Ö¹rpnÀqÀÇŸ9ÊÜ à‘tÀæ–Šœ¸M< † _:µàüA:ánFl2SGÒ?$´“)rÌ™D_cj LçŽ`$=Š>ƒOM¼ëꟕ8·êç¥f·N§s¼³p#Ý”À;õómšE¨þ'ÿ“?™ÊÞèõ¦à{ï ë+Ô›u½Y†'ùH×ãPsMÇ:o¤Afƒ{ÎE54«8¨[†—XˆëDZ¼¨¡¸J|ÈTxáR\›ÌðV¦N“…¢™â(è”å}$ +Ææ‰k¡aòÝþ¤, ÐÂÅú§9©‰éD*Ð Å3|a9ϪrvæW9Plá9û¹ä–Õ‹fR;í¢^”dXDA;•ͳN˯%¥—æeß!âÂKÐÉ¥¶-Ÿ$cîÑ)J§Ë¿:ØU :b%Q—©?ÀBúŽø)…ë䪮’á ¹@ƪ¨Òy•[€OƸQ×ø…üB$z¤öãa¡P€ª„Mü¿A–à!ü¡|2¤•‘çÕ9(CŸÏ½û·‹-(áL#ÞòqåŠ4—¸¤ŠËMÀÙů<]\ËdYC…5zÅ5!!¡ž,8þTfSL°(£¨‰IsË·Žö)…—ì\ù“c_¶€Oã$ÅêÌy«ßW¤»¹IcVϘá9“”_˜ùUÄñΤ Ÿ0>¹tMwáÔq0ŒœÔž{ ç/ïà|wña"ÃLþ뛀6½-+ÑÆˆ´¿FC`‹+‰p:ŧ—b{m&²™ M„E+ŽèÔÊÈAö’ åþIuÐ%&…òÛÜ>t¦Õùdb†¼¦ 6s bèzÆGל¯’, Ì›àÉ>bµÉD/ªP(€×üö(ЧÂäãmƒO"W?лŽ÷ï+n"˜° øá¾]+ü é O¾zÓû@€åy‘ˆKµ2@\‰ +î˜1ÈEI)bR¡"¾F'™,D’³¦Uø/°$mxºÎ÷‡HhXÝb?nù,“ØP”U›<XÔòçþ’6¤,ÖþÜð€ô)˜Ný \ýv+½NûìÝÌè$·²¥Í¤™`œ#âPÆ T@› Ôo „e&2p?9–³žD†Õ'ÔFÒÂͧÈl­6] lÝèg €ØèÔ?ØÖ9QÝ}¡Tqض)‚ÚfTàO¢Ò +k„°fT(³fž˜˜{€W/¿}õê[ÞïQ±b[;b‹°ª\–¿}µÿyX¯¢~ùqÞ° Ši¼O¹9(C¹ÉŠ½ßŸãßh€þЖßÀ©íÃôë¡®û®ÿË`Æ,¤3ÁyÔ¯¸@*Xˆ +žü“žÀÙ-¤lØÓæ«÷}a‚o@ÿ'úìVÂ3ënÜQHbÍGÙíSà‰ äå i$è-Çî¯ã&#kÌ€L6•ØT˜Ì/p†Ò,{bIíVBèœæÃ ßÀøpA0?sÚ+3u)‰Ã±{{‰ë ÷Û±9ÎwDx£Àè„ø"teR ½ÒfÚÚ:Á9|~‡ðßcK‚meiÂ\š¦?„ú-)úJPyÇ“˜Z +„&•£B‡G!&º´µ.ƒêØJ’àwöÿu/>‰q¾ß€ïWÑøúÏaCš¢7´¾tB©dÕÃÜÐG “1‘ÔJ´ùcÞCA!ü…<âð­‚”wòÇgù>LšýõáïSm&ú1(,®HKÅ$*.âæÕ›‚.EšÓ§€·|È܉šd +•[³º·“QJ>Ý|ø_®&É7ì$5ÒÛ•á€ð7W<§×~¿Ø§ò´ÀÐ>ãaú&“4G€;âµ`‰°ßdœ,ìG{`¿. +`¥–a²êÇ7G"§VÀr^g–ñq¾ÿƒ´¶îš¥tBé!þéF?CByƒñv-¦óÙ“&ÃPâ8êôÃðdÀ:œ,#)gÓ*3J¡Â0ƒ;l²“Æ-¯ ˜ÿ`¿´ÝÀ2ÔÿahT` ó#0-NYÖ"Ò³Ì[ÑFü‡±Üå áExO">L2ÅQÉ„R~¼viÞó7Ñ)ŸË~ÏqÐ3ÓBN‡XåŽ4âÊèoòZÞM\IAް*E_J„ñ2_e!’ÝÞ@ó|wßü!¹¯µàÞ\¡dfoÐ\ ‹R’…yMÃâ¤Ø–wš½ði’ü’Ä´â2@Îò9‹¿[á¼y@0o— 0u\ûwÏ1Ýãš7®²Ø@_2°9¾ ¨“²[0~÷­{Ÿ6q¤Éîа#h§›Ä00!ñ¿axóN¤¥„KMÑ#LÏt˜cÜ•ûˆ) +ØŽKœÊ^ ±áUûÚ^)ž—¨´”@–JuÀ2Fó¨"‚€0ÿÁîB×¢ã¾ÜÐ "¤0Ë€eR@-“è½%ü§õ}Ož¸O& +Š+ÝŒú‰ý *a½sgy_’ƒ¼ñn6J;pH9€à ¶"Hr¨éðõ‡B»gëà$VДÁÐvS‚ +lØ +SçáÄ¢„y䜢P\Б¨À ɶ?×ó‰œÕJüYn;ƒ§<“ʉŸ”sz6ó9L,_L§TÛZ¤ÈR{ ïÇXUÕ§oœ¸¾<$挣/g¤û\%øúÍo9àÀ¾{Ï84”¾ÆµÍvt¢§ûõ9ès¨hÞ<[PîuȪ‡ª¸ùr2eJ!…œ˜È%%ÒàY1!F›GÀˆ˜Í›©$Þº(í›ÚÌíëôÐ1­]Àê­ÂB ¡X j7tÙìO‚• ºÝêK„w]þKÑÞnð¼+fÀC4ÒFñÿ`:bK*}þlj:PêoVC¸ue¤¬¥ 8™:#‹oÓ+$‘•/@yHV±ªðwv)Ã®Æ ++ˆ¤„[Ýpãý[„XŸÓ·DÞâßae7%sÃʪüw’)™“µ ™Ø^%*è%Wf]¹1Ñy^B7aÒŸX~±¹m,—÷DÓÇäw+zû™‹øK™íÅîñ’c@/ü—gOå8xsL1Jc} hH3Ë}Œ€L³yFðö‡7?$´žò~ÀX:-tËí×-XVC…. È¥‰-äQ?ÔÝÝ‘Èî 5¤Bô1C_!'®‚aF‡ê%6S"û[eImb;ïô%p›‰üú#À.€O´Øÿ@öFpª>@Ü6PZâ§TU‘+-ù„ºÜ @ èW‘_¢gŒX.Œ3=dº³úLj†èÞ)Ô:à@×ÕÁB?ûÇ'@ŠeðëYÀug6¤ò‚ÒŒ8K%Ñh>ámícÀ÷-ÊòßÅŠ\äN!ؼÀ áÄbäjvõÐ{Æ%Ê[½^Hf͹–ðX©pèÞÝÏÁúßAõ +ÔÓizæ<$)“8i÷Øö´Nxg:“©4@.ŠsÅxãÿdÛ pÐ9®yõìT¬ÀáKpñ°“à›w™ù Ÿó} `kå5ßÈŽŽ›Ð1`tÁÒŠlÇeyw’1GRêÓ@ÜdÌzϸªÂnN3#cˆib"ÐP(®xÑîvZ£Ä—a^¿ŠX»€¬ØU›g÷‚§»¹Ý6ˆ‰ùØ1ŸMJ*°dåÁÒÝ~ý& Ç/ÐÖ¿™‡`0gº'B-ÚÑÍø¨0V qΣÑ_'QŸCËfK8ðZà6åÇÍ'@yKüŠö&?m ôH{ßo"Ñ$‰(¢)7N¸€=•§œ•^’)™—*¸¶Ð +Ÿ±hrZáÒ".þðY¸¶)•HG2è'Ï ÃÛ{ Æ c®Îú‘1G˜„½ôšcƒ}]<+i;–góïÀ‰"(þ¹ö;Éâ?—7ïÞ!B#°¦i7P{ËíÖÅuq$ ‘kÏ…8b½Â2‘CMÕ]¾‰(jH…èj&•’".¡Œk*§ª7Ñ\+çZhÁýò!˯“{_Âë{Ý ËÐÂ5®Wh,×ÒuŒqã0ªœw¥Œ÷¸ëñ¡Ãg´ÿ ÀnµÂÏ9̤£ï™Œ!à ˙‘“XWÉõ™Ù*Ùvê„–ÝïÌÁ9À­c(…[ª‘ÍŽ%Ü`P +€<”Ĥ´èV$—ajÿÕ=€N—E)èƒ +o&a;“]é~e&äØfº2ôôlBÀ£jiEçŽ{‰ö-I~6èŽãDüɼ +¸«‚IÜåÙÞÛ˜ ¿Ø8„EOð6€ñ½Ð½¡tÀRTõÆÍi޽çr¤ƒX— ÚÇÄa—äèQî¿Ôvƒ°îøñ©Â—@›ˆÌÇ‹&B(œ8c°»Ü3g’ïÄ-@÷J ×MÌ1à?xõï,½¬)l¢¡{2âü˜˜š ba€lÇý¯é½ÊÔ ¥ë|ì{â2Ü‘šîø€… ýpöÀYŸ9æ!£ipáÜ”ÁR“g,$”P>R>@Š°æ½ ·"üWYä %òÚÀá`e°-+½dödNV>h¤òyÊϾ†Ë­õâÔs²Á¬,öÔ@ÇC±°2—-'Ÿ.Vt*Éj9>Án¡»9U;ìëÆyÿ7DúÙ××;Á8+º€ïpbD|‘â© CóCMsic§É»@ÏÇéH ~7ˆ—{æ€VlÉxxzíefèU6Œ.CçˆBŽëu ²!ô¾²½A 3ºì½qâ 5^|´v +„¿´ÀÞOx¥oÞõ( À©H•!ŒÔM+ÿ κŽüf:úÙööMJgH†2R*€¦;p@†8Á{ç±iù)<ã—š +>»ÿ‹¨¼ÿöª¦‚{`²dhɨ䲄G"–e°@I +ÙÄö‡²NöÒ’¤‚íOgÀ"&3ºÃ|kº04v–±­œ ·iÂÓ0uì Ä~Ö—Ïàp ×í%L¿H‚MIDB±R1ó9=ì1Õ…î|rÌyx`©‚¦ÏqðöÀòC¢¿Á8§€"|ƒp iR ¨lvÇc(ûˆ3‘Ç)‚Â^‘]jjcMTåÓ€n°ØhBÕÔ·z·ï ”e=4pkå`QÐ}€´¼ àÃ:¾h!û$j;8U +ã&UÔF|»Àò8QU@Zü0èF÷nû[¤ã黫éŽÚ-Éù»A滳.q¦æLbÂucB™’ÞæšƒˆP{–Å™èH!D­ÁÍLž]p›ÀÎYBùgT¾)€_°ˆQ×üæ=€D,“ÆÉ©ì—öHbiÝpdšÜÊIKdšÃ,¤Q¶—‘[£»7ûуÚë— +rÑ|Òq?Cƒ¡‹¿sà“]P}ÏÀ7Õ¯oÝÎêÿ"¶GÚ™¹˜ßýìv.¹Ó¤?YÑ ÌîüyVÎNgº4 ˜îƒE1Át4æ § +Àµ–Y˜fh­¯Än +`fóÿM `Ðú[÷b0$ l‡MÀ÷èŸ=AÝØl1ÈcÀ¬Ì„§T.““H&bËÔÌKǘtkì§„t› j˜‰‹Ò´u9CXiARæ?Œ%±[g>+b0*`,€ö'fòCx'x°¼x@è¨^M“BL+ûР›±©¿Ñ²c@¾pι ¬Pù!Yö£Y²rùûðï[À-€N4"o.z˜ögš90ôNvH û¤^zÙQß^щ!°ð\`oxÉ*ºG¥´´¥e 8¤š¡–ßžÈÜfÏTepi´³Þ?ÛQ†j+W•ƒ¢ÈôîÀ@ —§ p×t£_—Ê–JD¨õD4Bˆ<´3ÖU cÀk(UÔ@H åsj°¥þK@p†¬RRj±o7îÀœH䞈f¥qÂÒ ií gxRrƒ{P°î@:g>ÚOí›—nÑy‰X9·~Q ±D'£m'nj†%*2)å“@B±{ý8X9Äÿâë‰B˜Ð:>ø&`OœZìæ&pb´Õ%E<:£T•°ª zæXÔ!§S'd²(“QC+eãÁ)ðw¼¨ð`Xy'Æq€VE$‰…Òâë€çÝ[›ñ²ú)¨uØC‚Ÿ{óІë\xd_@ïø5麣Ü8ìÌ¥´Þbì;ˆ @ˆñçÇv5af73Ÿƒ'³V:•ÌC‚‚AvæAŽLâ˜ôsÞ$i,¢ÎÀL^-€Ï¨Dô¬ŒiÂh§~¸UÂNª‚èÀ€¢È’nÁI4iñPZcp'â˜0‰vOJñMušl ûpõ(Z}ƒ`¡d ôÏöÝk÷Ð*ê :Ü(&©èH,¬”êD„•rŠ$*#‘fÔÄ àÄP< ýãªæèyÌ4ǯ[þGyVwpN-€6h¨ð£è®hûÊ8 ¶®ÙCGy#:Z_âÓæñc¤1åOÊx¸ÖÈ”TSþ .#Ã!ÌzÒ(ÚÔëÍà_8¾µ2æ› +Øïø…7èž(ó|˜,"Åy ðË_ă€Òë´Š®%+‹-s&Sµ¢èöS8„Hè×™l0Àç‚IRO½~–ÕÞRK^ +ë´OLà{ïºû†Õªs ¹"&´ú'ì@*zfsØÕ&âšÌBMÖ¿ ­¤qYw'˜t?øÍH uÄjxŸÄâÌéIic@0DL‡“‘L¯[L,É9ÓPùQº ÄR®HÏåEå‰ö—©‰†ÇvÔªE3°ÔHœja†¡&‚–ÓvPÜÏxv0³ ÈL¬)Ÿ,¤qê¹~ÔøEªàñËMõ¨ÀC³Åªßrb``…6©‡D§ÄrÙqô–ˆ¢âLÞP„!G´Ìáu&9ÓÏ5 €èN,€-îÀ×þ!ßÜð¿QÓÖê¾Öø›hKY¿ê ”,“wS(Gód ï}–é +îB jêÅÌë¸Ë ‰NAüƒµ"¢ûs£ô2PÌ=æb")&DJæÌd&åzχ–Ì€‰É@dÉaoc‚b€„ùR +íP”²Ò)–›—8}~ çcó§ +³íDOÔA¤‹UP|ÍNdhäw¡?O-KN 9¹šµY’™IÄ”ñrÆ,.£h¿©“¼‹Xr2”–€•(X{%rtÊŒaîÒ +Æë‰9Î@íZÑ…0Øö*æýH(€ßîÙœÁò‡iöú'_2VêHδxf +”ÅM'Ò‹¢“£ƒÌ‚èz§ç!âaп‰`n†æà_cðñ¢G;C<¯Áz=ø_òäÎWÿn‡ÿà½Ëÿ¢“'vbÿ¢ÊO:QÚþ¡SÖÖÑõ íþÌ©ÚQ …»v(éÞPÓ/èg¨PÔƒìYÊzö XÞõ¯Rù¬ûŒÙÊk*L<*•"ÆH&VCÿ#)G ü6éf 6wú„ìV½¶9¾FE¨&˜Ù‚29½fNäïÆ +Ò68Eì(#HcœN…5œéC¬&OúzPé®Cg‰äŽ6clF„’¸ŽO +€¥¥JáDÿÙöÔDT’( ×RçAÊìm Dyd¦ yiðÏ%ä&`ˆ ¥"†î§Î`ùH ¨b¬…7×,€´tÈnt3”†¦_,ŒlR·ó‚1¬ +¡þ¿RonhNêÝ-"BE7ƒÊ¤<±Lø p|ø·ÔçÂ0;€K€zñm* øÏ¸¦6)†N_ñõu„‡Á? wº»P;”=Ý·³†ãeÒ¨6 €’£®KðpVrpº%~žR2ÿwó.Â3ùÂà +V&²Ld²£p•ûÒ5i)£M$Sÿ5 à€)—¢;gnÝú]Sìi< +t’{¼.§€qÒ€Þ4OˆÚœöí= š«…R!ÙÏïb|¥Dë=(ß ¶µÆ;¥.ij?)´Œ)¿¤¾f¬É!ÑÒ»Q§ æôÂO‚õcè‡g±Þ|ã¿@|8 +€9 ñU €˜OŒWinÐb£U/l.z¹ }dºü…ÿ¿N)ÃV €õÿ—-€Ã‡¸3ÄS—„|—}qOÜ?ä‰ +ˆ°™¢~п}@A_e­w£JPUñ0%0—ÀXû÷´nMÙ»·>»ÇˆƒO¢Ó7!¶YJ†©é¼ubAIòH¿¹Ê$c ÍBÒ˜¥¤S]2cïÒF¾Ìt C3ðìÙ=,@²%s> ;q,ºáÅ ˆš’“vûVL–wBDÆßfo›,ô‘(¸$=°6³?´Ùi +Â>Zd¤1N¦B"f87 ÝQ¤7t"mNãu+·@^Šš5pÌ[ÉüiŒ¥h´@þQ|Ž‚q¯*„JœÉïbI eŠ›œ &íˆÃ`r0µó|zæ³A¿àç0?zOý ·/âÆ0ðÎ +žƒîïdSm0”>q¡SiýRL$GÞa^4ÃÙ©°9U¢¢;C皀¤#‚  ­b² ñPá?PÐ. æá'‡‡€¥âSïÐûÀ{øGV!¼Q¾F-zq!þi8Ãé ÍP¦oÚnã™p†\ü;ó@kR$„s fô̵{dQj=q‘ãDfy+Ø•Á7* a6X•šgT@&2Yk(ñ_šéÁ€$E×êiòÄ¥Ð+ r­«É§{FB7ZÛ€%3Ýnh7-u>tB«l#è[ô#ºBͺád,´æÃ¨7ªÒ…—3e; σõt±TÂPžÒÀxUÀGm¸göTüåšÀñó[ö_ûôZÁü›nÞ)bÚN+éŒ~ú42f‡'ÃÆ,XB_2­_Ð#ο6mÍØ©í.ž^Û©'ÂÉ I¼pøŸXs¸ ø ›§Ûÿ~æ"]³@yeÖ¨¡ÇíÿhŒš¸´+äÚܧÁaf¸{η„ךìüu:1;m!„$•-™”g•B^¾èÚùm …8ù0»á²Š¸¤ ùpÃÆzÙ™ƒqZ( p§¨-6g,€ ïáÕ ÍÞÎd¹Mk¦•%ò–‰,ûÀ ÏR7ZþFoÙ­…: + MÁXtKå}9h¥.;Ý©Xv= ÏÝ3ñ k.Ä@¬X÷‰M;ˆŒ8P•)‚&%‚H3š«-„2^¢y0í53ÆyꌊgcðËs<~ƒðZã^Eõ)ÀfЉýg¼ÒLï~HúÅÀ,àáÍp—Í/©1Ê|Ç?Ÿ¿&­fìD{8BWÇž–ö@Ë,ÝIÌÝüQèá/úCûÀ }p´tÕ;©6ü'½2¬JàEÿiÆ­{`#=莋Z²ÛHòŸ3, ®8L¡kÔÞB!`ãØyð›(Ça“™ƒj±”<$[22¶òÂÎ iFðþÚÔSbVhxPÓ–;Ġ߽̀ÃGô²ÎâP°qUÖM]¤ÔoÕq–¦šä¡_±(¥¼¶g’÷ü«™Ûȵ6½˜Œ#1v+¤‡)„s¾ä¡™3Ìmn˜“?”mCö ¦ä@*H¡w²gêž»“ÏÇ1CG 8§Šùmµw?p„õ/RÿüuÔÀ¼llèÍ{ÿ ºÜz$;_Yvˆ3Þ ÍhBñŽÄ +}ο2M;6¢N”£ +€8V1ç"ªšµÂ†Wô@ƒúQ„ìŒþ*`»Hp^'du$ÆÀM=¿Pr!Lã*ÉëgºeG˜tηôÀ>ÇN“ã”ìu½”C€"¼RUÔq~“ê4݈ʌöDàZË¡3ÜVÄ!’<) D“x­ÃÛù¤:Ê#Rà{ß§§Y½§¦!꜃̇=€ý9@dêàÝü ùP +_¥MÁ+Ú„`UÌ"’ ¹ë^ZÍ£ü°ÐOÛoÈœä5whÅ„( ‘qáUÀdl 26Ëî/w[°åÌ<Ó‚¸×žÅ¼Äuðz˜s>†Ì"6þPß-€¦E%úŸÏr ë 5ÒÓ½žt¥B‡:°õ+TéårÿJD©C«E6Öö2%w,¤ºYa¹ßõ^Ø ÿ…~è!ßà‡öÇ€âþ½=€þ›á㋎ t=!I iDÛ”º;@ UÜÄM¿6N{0Q6ÛÁ%2~ŸH‘n° ŠDìV„m)˜ÉЀþÐD2*r$׎+…ð|ê§F’¯Û*‚t<¡©¸ÙÙéÏ¥ JDK-”Þ³0.É +cëíÕ䵞4¹NèF @ïXS¦„Â¥dªNÓ-%Š7ª&¨¥'IYƒ‚^›L únÀ’‡4Å­¸uÝiÄE¬i[bp+ô›0ûü¨Z Xr쾆ˀĀÀ‡@)áè»P:LP”%^ɱ8å¨óW¥“JCŒºGVšEØvdº«"Ò£À\ÔsV l: ¸ž>¼ÐÏË‹ausï Øsæ%äƒN²MIX +`ÝÐè}¾ff­¨]ÅÄÞ£á?’‰^CL6Äå4^"mа‚€T—(n„iu%œƒ¥E`¨Ä(܉jíCÖ•)Ã0 j,¨ÙÇm‰·+|‰lÉ^̓ƶ[äNÜPâPk‰C!í»ç0á{tT¿x@¹-£ÍÁ¿ÚĤ"=ÞF¬’Ç:'‡C4^¹ñÁ]vhóH2Ë™~­9¥Úóæ@¹êCcÈ Ëòž9Ê¿F›ðöøpš +uØñŽY.ÔÅ‘±š$‚‘k”‰sq@Öù×'Ê=%êõ¼WE5 an'ÄÜN/˜j÷húÀã–:âÚòÀ@>$Þø‡/;ÝJ”$\iõqíA[J#h“u;9ˆ.“ì¶Ìhjwã²0Ò¡'÷û´‹ ·ûP½`¿øˆw ꑎ9®¹¦ˆ°áI†¥.¬Q½µÇèd–0gâu$ä[Ccɸ’¦"zNÆpí%ÊdbÞ%"S=9±ÕÕY ÜÄË‘&«q°ë‰ Á;lm‘ÍÍC©1S,Ät’Qÿ$»«LZr .U³eoó“„d»èàñøÄ œ×$¡¥ š<Çœ›c ükÄ·ø«ÐÜL 4-zΜQ¨ó\§K¡8t$cà 7†AÃSJüœqþÊd‰SÏ-²e!F¿í`;ÅÞ³˜Õ¹k‹3YÀð°¢$Äÿ£ðʦkT˜Ö8BÄôÙ¸Dp*›L‰mŒ3ê”uJö”Wí@¬*KÆP¦[b©"QÄÒbÊ*•½dÓ))RHú…2‹¨VHBØlÛ7"žî¦‡sâp‚Sz85 #( ýÎáJ`Ja[86)-Eد•›€'…£ V#Ólz^q(Ö4\iÐ,€YCIs˜;LÖfÝçFÛº5Í£ £˜¼Œ Yˆ"]NDŰÉŽr‡Y3+cu˜:´´Ó_`Û¸µî㨈–íÃÇ@ùWˆþÌŸÛiZJ?øuS™1¥»V56”ÁëîËDÖØ[¦$þ-ðh†Æƒ(t"'r”hg|¢#€ÈI)!ňýðpÿ: +À,ˆKâ ¬‰L·RLDe¦ïò&G”;7B›¹)€A[ê߆_œ5!Ñáìì%«±ôÀˆö©=„“‰Š™}«š´¡„—f:´8(_ò+-6Ô +TiS2Ð7ÄK’dÙF”Û”‰½DQ.¦àÕ/âš}S˜ÆM ÊÑnYG£ù”a(‰Œ9áŒ?ûuh1 æöÝFóúoØÝÅQNŽÔ­æCšÓðŽü6ÆÄdæ¦HÆ69ºU{ø%\Ÿ5Q@Ëb,—ž'LËL"WBûR"n¾??£¤ª‚ R› «ì*Œ9ð”™ø `^``ûíðX¶V¢»Lnh– ‹© `HÒ¼èËÀûsù«’Ò9ƒÜVAU&8ò |À׉@¦ÕgD\)3_œR3ÝÚÅÍàyUꌫÁJK)õÈ|›XÊœâGÑRš…2)ã·¦™E,ç3­§MµG¢0MCIJÊ\#?ÙRꦄt(LFµÿSÙ‚²Lú=ž`„܆ñýáð"÷ Q¶?ä8­¡6>¼d$mš•ÝœeƒËâioç¡i´ƒXýÕ~Sd)tåL ÑÁk~(¹”9Þ)å6-eàCtÄk™Z“ +Œ‡#ñ,ˆój˜ èÝžC*Q4³ˆFN‹K¾;vÄë‚»ã?4wǦŠû­€Áò¯P_æ ànÒÂôØáºŸ ÄÞ—ŒÎÜz…¡âD zRw1Ÿ$¿6Q"uÈfs9ÝPÂIÊÈgôÓd½ Gd&\·œG!K>#ÇC. %²Ôh ¸’ÓI4Li-û(*€ ¡iF;û]‡†:˜4e +˜“‘ÊC«•át963Ö$6wb÷¹i¹}°sxˆ·Â—œ°´5ÉâŸ"-£í(#¬ù¤Þ÷k!¶FN&AùB• |*ŒÏ2HOâÛ*-Ü­ëÓ)kƒ‡‘Ÿü«%¸øŽ%`?¸_À0Ý|4u üAò9`vµ>ô]€(VÛOKh}‡Ý¢t—ñèàqWlŠ1ƒ}@œ¿.¥ø|¦žƒ<­‚ªH :’e rMìo·¾OÛd¢ìv6´)[s›£¬×àÔ 0„ñ6v¦E*°Ì{ÁU9êD‚ Beµ[¶Œ¨EFª”-‰(6:™vm'éíQç¼%§ó“…ÍRR,¼Þ!ÙHã)?iäÞäN·Ðމ¦"³£Vëi@™±&ã-Í&'UËh^°]']ñM˜îý=þûv4ÍnÁÜ‘« ESJ˜¶©–æ%–×É©ÛÁX &#?‚RF„‘)ÃÛ"‰@Ѧ,®~éÐþà%À›×oßúÃß1.!ÚJ3ÓpÚ +@’Àìmï“„ã˜0L )9Xº•aZðÿÕáÑèÉêqh­JûˆV8ÌÓø˜z#Èô)©'zݲ”Ž“ƒ.wYßÖ§¥µ¦ + +9SaRº´—Î7*´5Ö|UkšiÏm¤Ýbô k®©”Éݸ8T+'Žã_Öô‹nº @O'ÒÊ¡„§Ìé·9’hý4ÞôœDÚÙïß{†°5'¾{nÃÛ 3$•Rª¿-•^wȬŠìD¦é£|-±¿o;½Å!‰(Y?冚\:‚y$ìÄ;¥¦•§\»r-„èð‡œµfà ÈŸÏšt“ ãÎð;ñãS¬ñ´+©.ÒבÜ«þÀRÄ Ó6›ÁÓ"Ò E“[a[û¯¶Tm”Í$ò•¢lƒ³º52FÃG‰¨àæMÊjÛ(“bÏD£™ +XÓg㥬Ld [ 4»–É‹miéyÚÈ+-”ÎN9š‘¸PʵóC°ZÌ2¢ƒœä0Ò +Jì›%…P´´ FŠ·’¡…¦ ÎIc¨H§g|Ç3ĸ(V\M±z&–•µÙ´ÑØ–”C’Ç×î–—:ì?#«¸w?Öš£1&\<°1Opè9âÂ×m«­ŸVPUÙsªÚ¸‰‰kšah±@Ž3 /þóñœ=€2Õ5¼ù¹æ<`ýƃ÷sÝ,€(€E/‘îPÛëw=q*h,Jg¢ àe˜˜ +Œ(âcÒ0¡=þÚd™ÖµW7î8ø¶ÙF€ž¿j T4f©t§ ˜TR 5…ð2›?»@öyEÁ&’†-yÈKUÌ£_Ë´jG>59ãQ®DJÓ$(! /yBæ ¥Ù¾¤÷Ö­gf Ž‘çF¶Ároù ·Ei3­Uº!b'¥Û‹6)—‚ÕRæ6b†tSÐ L¢ÞZÐ š˜ÄûgkÑíЄà§ÈˆÓ¼–K·-ÃrÍÙ<ÖÔ•ÓÒŒÕÿ‹(ÞM  +Ú»ZZf%ùhhM«ïߟß-‚!GC ³%~ãK6 ‡”Û§Š",é#btſږrèG•1K©ž‡3|鍸ðì~\ÚíÀñÄx«0èñr}5M²ŸS +,0£°.Ó7ûˆ\éK89#Eç740¥qpÐC´ašÑA·•B¹8õ†¥"~ß0ÏHH±¯þö: +rIÝà3fS!ÒŒêT‹ß”=6#+7ƒió¬?>øÈ@áºÛ;«!P°¿Â*Y]ˆÔꀈEÁQ ýIG­Ë²K~UØÎ‡èr +°~ +L.X©ÜIÌ¿m¡YNß’PÛÖZ•R+}Ï$‰´Rf|ákùÉ–AœöDm¿Æ«$jSíYÛBÎr+7M--j2Ÿl¹Ø´h[Š/-ÊÙ‰¾–•r©‹%L»Ã7Üf óµ Í×þ£êL 5šÈ@J™Ëµ`Þ-æ‰þœEù°ú™+bð¿hÃýµ#@L-~çEÿæ¥m,‰íP<̧Hº“Rb\˜t»‚LŒ'rnL$üuþêôAüÇA®Î¥„…#!…o£;»nÞ09™èo(ýÇèÉìHeJ²fP¶Íoó\çâŸ8§FçÙ—8&~ÂìL#†µÓ¢ä`Ún-‰2Ú Z0í<»ÇùT²håè [>cØ×Íq²›±o»/jÓ¨QÁ“º#ôÔà +5¯Í²]t„¦Q ™)gkÈNJ{›¬«„5o¦A¡"…¡nHæ])Ëí4¿üœ!‡n£#ͥ؇jaã˾’ +€xštÿ6iæ‡è(­š¬všrw²A­;Lö‰¦Ür™Ö.’ž{2 +Rac+2"Ó¤›ÆV« GZάÌJ"*#¥…@35 GvPA· +”ä³ûÈ*ÂHt³Ìú˜¡Ä33Œ 9¢ñó‹ÚLEfY%ªê £-ç/Rc!¤B%4§M -Ó_FúÁ¹Þ„ì6ó6 “Í9ïÛ ÏÛ/€êø”Ÿç¾ÔA+Ã͸Ñòðá/Å&ˆãýùXÎÊž*BQXd—„iAÒèhˆLŒvjr+®±)êì@ÅW3­ +nûEä4‘`S–‚ciÊ dè-€Ð¨ƒ(Öeòrˆ¸ßHà?' +€Ë¦^^<|È¿ÑEØ<‰Î0Ð OÄlëïž *:ò¥hTXø8zÒÄ¿2½¯hNÆÙ¹íœ`±¤;Æóå;’Ià.BMzfmgÒ)Tae‰d˜C•¯•á™9bÖÃ?ù)ಶiD12:›=µ4{¢Ò>8³Ž±_ƒ k8YÛMKA ²Ã ¤†’ÀΨL¨é^Y…JÛÚ¸*Ž#÷VœJË}Šôº…kyßøÀdr¶cö‹²e’"‹ø¨ÉˆL<Ž 19-;#&¤IáTYÀÜñ¥‰ÔOd¢élN¸©œÒl´âJt;¯ÜqmMì ‘ä¶±-ƒŽµåâ6c““DÇ-Š<úäJ*šrˆ.[‹ˆÌZFí(D©R¦òüÁ þ€þ `]ëÛ<¿öÈÇÀX +à¢àg#À–•hÚ̱8N½¨Èxûr0c‰ØBégz®Lu3Âô·T«Yd é\hŸQ!Ú/Æ¿“*1°à²jŽèÌ'7ýNïα朕Œ‚ë¨]¦:èÌŒ-×È}žS[‚8+“ÓÒx‡ÕQ^O[Ù‰*œš3oàõ¦r²-Vªƒ˜qâž~a Ð@4›3“ùj¾6º + © cãé+…EÓ!¾do+ÒžT•uª<ŽMÎx©jZ›‹µ%DMdç¦$A¸ÀK(Á´Œ†z}u'u±i q¸´½e¥¸…ž G–ÍFO øÃ6ýj.‹³õ|lÖ{‰ÞV\¬ö§}dU)¢ÃÂC>šf|{t’ì”HÒ ˜ `Ó¾00ÇÙÜ£ç-é»×¯Àÿ‰ðB 7 ÀqJòÉx"]»º¤lz}iÅrùSð·R–kE^À“¨¢QLbˆJ?z‘’Ö–Ò-€Ì:%eÇ’ÚUÇpºÈ\ O";ãÌl§© US¢¶–íôI.‡‡ªsbt²ˆ”2:›:KH4ç¼q½Ñ6û7f6S,Ø«vÞæÑÐWT:å2Û(Å®8÷ŒJ¨›€)î.ß{tR‡’’®›Øpðæ RFr;Æé±ô+I¥”À¯}XÕƒ–SlÛW³ç¨„*€) +ÊHKÇYð³}aiìºÚ‹ÉÙ2gLr )×-7xm5ãs%Û: “–3!Zñt6<é—1¥)&¬DÇ‹‚EIE¹R“ ¢Ýè*3 9Àãe* ûS `ðUh,œ/¶-¢çoø.¯üaìÀ‹þZ½{Ó¤ÐÞ™QŒÆìi(zËH1¾ F‡‘%"a)þÿf€µlÔÚkš”6dî/¦¶Q—)¾ˆÊÅ6E¢ˆŠ^Â=TÌ33øZ(ãAÖÎþRg„å&”p3<ÂB5äuá.:‰†ˆoªzuF5!CÌ){ã̯hö Q=è—†MJ$uiXúÅÍ)­æ’âÓZ¯t‰^à…ã,@2_hò¯1 èÌP9­DœÍHQóŠRÁ'•ò*¦)e¢9‰5ÒÛJÜ“ŠÍ1¹¨xÑ„hP;̹B‚‡Ê%Z Á›ÄdH:‹=ÛñŒIXZ©ââZàð´:«Ïˆ6Ü)#ch>ó¤I«>èðdz,€Yý]þ«¹g™W`ó Ì?LlöU ÿ ô’ uÀ‹‹iRÈ‘ÑE° %£z–AMÏ«è%\ w2H´ˆ ÷¨þ6:  Љ$Z}š£0Ž_×XÂns Ðì[NÊQ‰ÿëk}pB…hËE´±ñ˜k™ÖÎÂe\FÚ°Äa428ÍìHÎŒ2"WÇ3>‰k(!gÑ®rZzˆ».r®3•ÍL<Ë–[E÷ÂJnÓx’8°°tŒ&¢r2|øøºÅÔá8Õ¾ JCé¶uâ3ëpSIbˆIbâq ¬¾écedw¼&ÜT¤œ3¢ô -¥LÒ©µ­ŽOMCW¦8ÔÞâLa"sçqÊïV-<ë¡ ”k›IÅDéA\+ºC”Œ”@$AÔÞ—ãeKÊ v{¬K<;öǼ‹m<ëâ90ÿ uÀfxó¿^`¼J324:Ýû"ºš5ƒåìITˆàAêU02ºƒ õ¿ ¥pŽV)º6d& Ÿz™àJ’('9Þ¥ÒÁÈEÑX”}·÷É&'÷ªæ7™!ç"ÄÙ¢à^rïÎiqái¡g#iRGó‹q +º{îöK./‚¶½×höòY + l«À)D«ÃCéÆS=¦ZUÙŒ­söêÀ¸XÉI“· +(¬kp,t¬ý_ü<Ô¸˜Ca DhN£KñH…ž(ÄEÝàŠ\&"8&-”ÀùZ<åÑ),~H&‹Cƒ%“9?j·ä¡YôA×YHÓ±i‰M‘‰o0wÅ/9ÅÈÓ UÕ'¶›ñ¯gL€â¾$úkŒ8œÇÐàüÃúÝä'Áb¼}›ÿâÿ`Ì¢A)\ÕóÎ(S2Ggœ†°öT#9‰ +àø›P« X3rŽ2ºÂŽlcÌ:Ö ÓéÐEûå·K7}ˆD‰œ®âR¶¤7Õ'ä|cŒ˜"¬ì‰OT†.5çBÙ 3 ÐççüÍlßÚ%šo †iqì}jÞøR×Ê0DkBxXèoI“uE!Ì´:î 50ÍâÙºpŠo¿¯nµJ:–((=œ¦¦ «¥¡²0>±±D ”ò(¶kìÆîxÙLº=2 QvC-A´²W$c$aWi5¡„i&Þ¤jº"±éxú@¿ÎùöfQ‰¸B¶ÙQnña3?~käg¿ Wù•i¨Ål µ GŽZiŽÁn¯þ— pÝ€s÷®³(ÿ0ñCØ<XßXïÅàI`Ñ‹Lÿé×n–Ÿ?sF¿õdÔ}Æõ#œ¡BÿogûP*i æ úBúi"óÛø`¼U¡[&½I$ +€ÓÃv7¬ü4 Î xܨ†ƒ›ë£ +ê ˜P'Õl3ŠÒ:n™˜ôE£S%3Jg<#‹•‘ºø¶[½«ª¥01gêQ™Q”c2N>ôMFˆV'äSkÜ4‹¿¿ +K+®…bóªRPÈ&[KÃÓ†ó/èÖäH9l%ÐŒ„³W“iN£‡¨Úî§¾Šk¸Ãš•šSŽp?¦‰K|†Œ«I¦¨ô,SAÞð-vW5(¥ÊD§˜¤[¼U•Bµóû¿ŸØ8ê#¼ðóT`GC¸›PNš’â8~`¿@¿Ô€±†¦Í·>è[Ç~é•ÈŸÛ5ÀÛ—î¾p#àðÀFÖ<ÍIgŽwZmTæA³ŽÅ œ+ø‡,Õq1_–æ_Ql è­ä™@ ÄCêG·ø“ýþ_ÓRwá\°{É”ie¿ì$h·˜¬L“Ì 9Lf¾¯iI)jâ˜QêãàÁ¯1ó½fÉRòÃt!¶¡gQ©ß¥K"žÆ”+Ô-ª]„Ï"¼ x²+LHßô´dvþ­³cgEŒ7yãigÛ‘%ÔfXzNëc’•ñA1¤Á[«åÌé¥5ÌY¢æ”ëô (ìk¦"{c)©Ÿ+Fúi52H”ž€/òþ¿‰žˆ3Ìб*K&9éðY%æ¼)ô‹‹‡p¼;uÀeEÙfJ&… F]‡/ó¸ÀwéOâ†ÆØñ/ÿ~žN¿ ¸_zͧkÿ©Àk€< <±¦;¸h:e'ëÿ³´;xáèHÐÍœŒjd’1 ™V‹tïÖÿdœC/_&&mP$J·¢1~8g²œŸÿý9÷Ýþ + ›ÿr˜>ÊŠøR¾W¼~â|ÆF÷T•êo;l!&93B „:¿;¨žÌ(âsÍ©€à”&**Ÿ*¢I).™ùÙ“îﳚGh«3ÉÑê¨V Q• TW5JoƒqœúƒÎ´`xhÙJ´]¡”W,Û÷(ÛD„Â"„´PEe‡Îd [m¡z³T\°f"µNÄ¡¤ZkÕMæ@…cn‚)ÁÛ©X›¸Ú³¤V\´wšßÖì”b{ Í`¨äIå$¥T›CtÅ+íHq)‰Zèÿàün8Ö»ÖÿAÿöÀÆÛ1³Ÿc¿ôʧø÷R ðòá<|%`ãO‰Ìû,#M‰g°3~¸ã–qw€ DÿV7SÇRmG|TŒ4^ÚŠì?ôÑ­,½ ò™+ƒ½ƒ¥GÏ>åew:議銞B•>SŠuî’7©Ì$†My“¹ës"ÃÓ™¢MÊ8Îl!”b2|R‰ÄuW;MeB_ .Úϵâ“Õè„Ó/¢íÏ¢²‡‘Kûe"Q b(3Ü‘b¦s×ä°¤Ÿðñi5^zÀfBʳœIrÒ. É¢­«ªnQFŒwºee“3y9Zòè¾u0€±ÚÒîŠ 9Ò‹¿—å>úÕk;¢ë{ôó^.:b +âb$ uÄP<-Âg߉J~4[z·ÿ;0îdB…þÐÑظN•'û{<ì÷³_êÃ×õY¯±Ð¸/éBÏvÜ1Î@¢ž¥<Òvbð\çqþÐG‡=!ú·‚È*†'MHûó4ÂnÌM` úžþ¬‘Dœõ^wõÁ(Žô4^KH·¬…g¾dˆ4QÄ‘'”‰’öõ³²FÚò¤,†7~Â+o(Ùó!ìŒâºEHQ25 +àFqÑtpDW~—q°3¹ÁÇÌ`úe®³“]_×8‘âO©0å= +˜´·D§ëæ0QÅ(gZúEK O†°ÿ»ãwâÀö‘HFtP˜øoq W(†Mz.gþÍPü†âóB·Ò¯dò“™6pñÕMT„ŒžÒSa\(ʧ*`^'µ¤"S–žªhqDéQ ‰‚V9²|;™E¨0® ÐOm‚¾Ø @ΓóZD€>K=4—P}±4‚ø{[Ÿð@º>gmo¼7åš0èHã0€¸7Ñõh°ú7¡)?„0 uG9m¦¡´r@n™²XþÇ­?¢¤½ÄÎGªÇ}‚UAÏ`pµB§J”{ö©­`ú å{¨xP¢f²0äI”œÎD£¨ÑâÍÁ‡Œ;Pž'’-¼£µ”Ò$‡uyìלgÜïæj¸èÊÁÜ´nsQeü"›fÑ/*l‹á³Í®`÷ý€SJ2¦—‰ã0ŠõDšÓ[Šâuscâ¶JB©‹‚¸XŸ-æ¤H/RŽ¢°Ë!<Έ›|–nù)3 Òµ4+L¬@ð6m¢jmºÕ®#Šæ&ÞFO¹wÀ©ÃúÒ­¬­óüü÷8—ù’ßìÈÓÑcºsÒ†ý©†e?¯Gô×=Xì»àsôÍ_Þ|ï)øŸÛ›¼ÈîõÒàÝße"ñ”Š‘\£Ÿô;¡¼:´m¼`ù °bþZÔòB­®µöÖÌ?ÚD,räbo˜I ‡š€¸d)fÝ n~gªIt 2àè­Ûô³óàì3Ìp%=n±Î̉?%™Ÿäœ‰È‡pü]É´ƒÝ{w¸Ù/jÔùùgl8 +[òM$%."G‚tIÙƒ.ùõPJ‚ÿ™‘™Kº“Ò+;– +ÓPW…$Ò¹`Sµ—aM­w9¥esäFï2T6峓d"Õ“?øD#c$DÉ”–áð·iSÛ݇. Óè\7óÔª Ok 4iPbÐm +7'z,uóü"c Ùtæ%Â%sÃFد–ÄM© 8å¦pëšø¡À6GÏuí¾‹ÿïk€kK”@¾[€ClÎ À²r ÀÊà…– µ‡xèÎ . ‰ÚןT~ò®ÿÚ:‹g¼Á¨P-5(eÊ“l ž´Û_¯™ÔæWü.$¬é•/‡Ç.43bk‰Š`é­?@LÎŽLMù‰ò¬ +TP7ãæ¯ñ€Ÿš˜Ëø\)g–têd`¸‡Ë7®IïŒáLéxØR´r¨Ù!vblŸSYOšÔ0»s¥•$@X¹“•ˆ=­Ji·lD[âË'Qµ" „¿ +#Ii½½å×’’– …SÔ=ÿ-]bDLî'%¥b|˜á¦Yi;ê`©pbM™k>,å9¹-À@*ølá񮄱61l÷âJGðhß͘¾»IÒ¢nQ!Þ‘§²Ä8˜g‹˜Ìß8\Šë’FÀèUĉ¢¸úøãÂ;g©à‡XûµL×x €›¾cšÙBfvü5®À.ѯ„ÒIG¯cš=€÷ïü)îŠ(úËIï¥èÞ­5¥î>sž)ç¶õ”Œãv¬}k_XÞ2m#ܾi2Ö7OX¦¬° 0!x…jÄÒÊï˜Å?Oæ˜K¼]IƒX;Æüχx!’¾Ì’úùvmº R*Ñ3%âÊ¢ýŸ„ÐiN9â[Y…N‘õ²j˜Rû W.†t’^" D…úF™]ô+QH,‰¨‡PYé/+IaÑ&×T¢æp +…ºr$Æ«edÊ9á©Mé<¨ñf~ÑFØZ)MÁ¹›é±Q9V9‚oh‹‰)—z­å ¶‰Bv'YËOÁibG¤Ìå¥'UD‚a6õhu¨ÉËdÀ1žè°¤œ˜Høm-}c*ÅIWRYI³IëÇÚ™#d,mq0MØV"tÛ»©'‘Žª4y§[a÷ËÁô e—XÈhè¡?ëʾeÎ[A3c‘ÓN‘†¡‡'â²q߈˜ÆäIjºç ¡¬ŽÂf°„±(ÞTȇjü÷bÚÎö~>¡>×7®žÄêåI@Âëe\<ä pšz2¿ÌmäÉøÅIG•ÍÌ­#zÑE”Rì/03‹‡à`רUMÆ8Ó„5χhJ]5pRÚœ©šåÊeŒëè…ˆÙö¥ +‡Ÿ™_+MèiXW敳)ÆC¯§›$Ö”„«Ñ+Ýz²´V0ed²Î˜(ζN³•0ZMq8›=íàZÂ'Eˆ7·*8Ê‘9$B)“´Ô)N%-†€uç(ÝÉ„O3äVö,d31¬nS«3›¢Âh·BVs7 ôD~³Jaðô‰j’  ã— +hA>\àÌ´²Þ­ õ”d¡µ¥9 áʰøSý‚]4ÅxL+]ªÓì8}I×hoÄEcéï]§í¡I]–ü’K©Ž,ylSü̃®¸ˆ£j Ÿ2ç蛀;†9Àÿ¦ ‹õ›€7Än½´@?ÞùÌY €Ç€X<þ_ÐÍ!Ç2§ R¼´>³?½àA:ÃF"3ºzJ;R!8•KSª!Ÿ‚p¸Y†Äõ±€ÛkËž²)åþ?Å€ýÜ€Ù2D›Æ‡ƒâ%îݦÎì£Ó¾$ ÆÐ $Ç%Çp¦åL^¼úOÍ¥í Å“‡9• +SÒ š9C–=·WR&G2·TÄ$å•uý®0­ÿ&ZÙÛ.˜Ò¸Xé“l)é |«´Èè4!QÉ•8XË`ËâM€&ÚNR,Šn΂!ÄèA>ÉèáXågî°â·–Ÿ„6%dEÓ¹@V°ÚL<Ò¶äJ?§Å%”ÒRP¸©Ò‚™á˜öåê$Aš’  ˜~Á %Á_3råÁ$Q¡A5¸I~‹ A´*4ÊÚs¶!RỜYmä5ý{=jÎùLD?sa_ì‹÷ÝÙây3 à;÷ÿcø];Vê³£ÕM.fã´šÑàXÝ%) 3i²/¥ZLM1þà¡a9-Éì²®è\7: N2Ýæt +Ý\{Êôwú’§eçH¨t™J00G’èf“ÀøD°Í˺ÃiFŠé6uJN4/R”:†èÄQă—¦Ù¬”€—fZ­&¿­§!¤ÙA‰‚TV© MÎøB›L·$|”–ʨiï—tÐ\£_¶€z¦[6Á-æÎÉ7Ïr=›cCo­›‰ú¡Ýè&àÉA?žûS€졃ØŽ×þ3`@ßP¦ž™wé{:à}#ímÇô4¼Qfœä r90ìPg L“C>“Õéb9×hÀÞ§¢Fv#ËÑrHhA¬V"†_•zº’V’jÎýB¶gLn¾›¤k>:ÚÎ:ï\R¸¹·ãd$‘™g:ñ9T†‰kÙ¶%>2P !ŸÁá3$ôׄJgY¸SârdàÄÚ®ï‘s||zý¨¯‰ yŸ«u'Àḛ ±ðõú-sBI0˜5™§Õté¯Ù‡g:jÐŽQ`*ŠcòYG(QܲuxÜß³\ô¤bŠ #I_Nó‡Â b¨¢IŒO +Øïhóíï(¶&%žÙ3ý’Kg}}`z¥[JÑô*PI4å1|Ý °p½txî³i( à/øÛõÁ?¾…tÎ^® ë›»ë|†êÙ-±üOŠü´jÃKõ#÷¤ô í‰wr/øó u$8¬Ð—+Yã8ðCeðÁ»ßAÔm¹S©27'™£`C  ˜ $/jÛUΑ=³ É5EH”XüaR†ÛŒbJ…#s&é‰oË!¼kj¦S»ÝZÝߛެB«i ¯5H2µ%¤l+†,ø ¶¯»…Mì1¥áñm v1çPò¦A…S.M¶792¬íCkÏÕ“ˆ~xTÎ0ó+£§d¿ŠÿTDi~¸PçrŒÇ—r¦-mM‡¶ŽŒ»3@|øRà8‹ØÍ· DÓÿ|SÆ\?¹ã"ä”Ky¦Smxˆ¸ÒŽæ•¨Lå5~ÔÑ~Y!Ri ­,Ð9?üŸº,ùº[Œô5ªÊôá£Oó'Ðßâ8z. àE°¯ýŸkz8”~Øh/ +Ÿ+ý´îe¤œLŽH²N(¦Ð²\ÄJÜ«§(¯ ¶¤–Îaþ–0è‡a®fË4uáwÓ´ò§„™—Å£ä*—Ž8¿R0œY×=eºœæÁ²Å9jYN«¸2š?÷ž)ÎiF.>ô +›K +–ÖTÅë‹« +å Dâ /CE¿Ì´ò¨ S«×øzqºÛŽá¥Õ­®bfHänÏ`ª V”E)t¶½ E0<ܘ)#°Þwõ&~€â´j1¥Í‡À¡º`1.urJ®ÇÄ|Z Í*Ï=öé§ 0#q&Ë$SŽÌÚHüœ¦S‚qÊ8}3WÅ_š.FƒI¤Hó`6S>E¸äè°6H8u¨"k¢L´ÇÉt2¡PXátºc5dܦԺ–Šÿ]^­‚«âÂo)9éó™SûEu>ßm"i©<—è¤T†dF÷á“,,3ÜÀ¬”‹¶òèYêaÐ&²±xíQ»åŠkí‰OÛ‘!‰íà–gAÎK"1Æ”ÛÖCiPÊÄ "›UðY㩞¥sE»Ò¡´~ú%Ÿ£ÓNYKpØ—Ž²#3Ùâ7NoœH¡¡fa¯ÏK{h÷ºÇîËÑËÇ`\ˆÖ¯¹M‹Ã›€šñŸœÜ¬ñ•V`:bg™+‘NGˆíÒJ} rBr›ðÛ\âp„ÜŽÅcQ–£[¯Xoêåü½ /,yä éûüßû„í@LMsiÆ‘T. +jÌp’äDJçÉžÉNBf@vLúåLINÛà¬Ð¨­¼>qÈF¤Ä„цÁhœ—j¬jQñ/Qº,+p¤JCô5I´µeL¿ä¥_|^$–R`„Ognˆ¦ ûÕÁfÄÆ°»ö©D!ùðcáíσ¦(›B;xV +e¨Vc`·ÚÐa!+#ààà¡Yu ¶:ÚàiL‘cȶ'¦ùI„“¾‘òW2WÊA`Ó¯%-”5ßäŽ-ÍIî0$šò(6EY£bbxîû†–U‰ø:މˆ»ã·L¿†þp sè:îëŠ~}×,•À qÔ9Ñø()¯†BvíÊí+oJD‚Loï “¼ê àÊ00c# CX7%äš‹K„‰ÃAÐR¶ XâñÉŠ†ºàZ¦Ä"ÚéÈoE°’p*3Y¹Dv¤ÑO/çi¬1)©B-ºAß¹˜€p-FOÊ&Š50aâÛ°NuI)i_ŽÌ¦ÄîD0à ƒP%ñÛt‰™NÍîÄPP†DJ“—RS/ Q|c+' +! fµ+-ÆK ¢4ù”d¶þK ±ôœ‰»^£K_)µþð9IrÑHë[qˆ7ùri‡ŒÅ;™X¼[ÇK³Ž4¸±A‡,žxÞßç„IHCruˆi[啾’bŒl§%¾»¾(I1‘¢@°xÓ­ˆÉiXu͘ó@ïg<;0±rÏÁYnß(í¾Sš]6_ó"àØ;€“MÀv@ã+Ô¡œ@ÒT£Ǧ$üù”f™–†Ç,I"—%°‰‘`šAÊ01äÈ'Ò"M*Q…®£4­ .áÛØP}v¯’N¿` §™ÍÌH³3|ÊyÕ…#àèÔ!SˆêãZ<®íÒ' &0ZStL PFYFőӜ µ-øCrÙ’!®Œœéf)ô'¡æb2®~%%寓r8Ze£¡"!êÀY Ý¢/‰™n +‚¢c!1¢,J‹X¸^P‘Òàm·,R&GyëÛaSÈË4Ü÷6Æ×ÂðXZ0–µš½Ê9’R‘=Ÿô¢šÖž$íñù“HC£à¶rZ-7ÍCƒéW)ŠêÂ¥X¸SÌY:æg³Š}} ¹ÖþžÇ=€=7àö:\çÓ +à&Àìÿñç'ov@Ÿ§{íÆ,2íp¤œD¦” o²Í§ÅѨ‰M9ÆÄLòzMWâg¼¡N© +ò|ÄÙ¸‹°Ãß«õÏNÓHÞÙ’Eb¾Šé#6úÚ¥2‰€yD¬Øgz†%…¡ÌÎr³fÓ×@ñþ¤$Ð)tLÎÅ$6oÃp°¢Œà;©&@lK¦µÌJfél+×iFýˆ +Ð-ÀM ç÷jÁèÛýi_Y ‡%Ä1ÉcÀxé¯nİVúéu1¼”ŠÖ¥Ž–KÆ ´3ùInQŒ0â°>Ø™l)¦:1ùlo3ãUlk$âKÛÒ«—JÕ7UB‰D*¡Š>„ÊJýäC¿`µq¡‘£ÃdMÒÈ8Í«¿šÆ9DÖÅ0‘˜8ÜX‘r¥˜Œ ÃâÔ‚ b±_p ›w'´y|A^g\iE¨!¸è€·ÿýaÀ£à\ÁYÓ¨¤?“¥3%} ·ct3 ȾpöÑ£€]çM’š!7•R'T©¥è7øÎéƒfˆ©Õ¢7 @ÍXˆ­‰Ü®:Ó úsele[™,®*²ÐÛPÆT0Y)3\.)®,9Y)ãe>Q”«;5š“lC—”kù­rôèp3Øñ§ÇÎà­QÒÌͲ‘’³ùØ¥Lm(­‰; ?‘ÀŸÈ©0* ýökÊI¬ßM˜4«¥ãH¥#š€3<Å8"ð‘jÿSa¨·ñ¤3¹Î ФZ,:k¦¡=™Ô¶ _ÅÕLd‹C£·kÅ@Ð ™DÊjKr ¶n…Ëv;ÉìVel{"hYÚ©¡î:†ƒH~ ˆm‚0†£2Kͤ7\¡¢9«=…Fo@&<¸ú=T ‹G¾u]g.ÎOÀ„OöÆÐð.d uÄÓ)‡Yš!çÃøðÐI@˜ÈPröS ¥ ×à’Ìl€gÀ)Bxú> ³2Peãbm©ßr'>´öV(åPƒo>ˆŠh3ïaML¦ +~©iHÞ]?FÓ/XÁ™Xý!0°˜WEŽ™~ ÎÄÌÊm|>DÒÔ¹’é$63©@ ˆarÍ0àJð#›M\›/Üñj§Q°¦´Ê7Í_ Dºö‹Ô­¯ê™ÉM¿f6·${•q«ü›a拟4~Ê Qo4³×Tî, ? ¶[¨€­IÆpÚó)Í"®‡–Q •¡¯ULX§IžJ2Œþ4ÍIL3W_ÃAæ¸IW*Ö/CâYÙ\Ë-æF;x·ÝÈB>‰ÑÉXE <Œ›¸¬¯?5¸ÓÂn¢P õF È6îáÚ‹‡0_(ïe4Bƒq&a,€7ü90«TÀÉ«ÀöÍÖ3ôi¹`ˆŸƒŽÜçæ‹q-Í~F€Ü-ªà@,xR4—|6Ó¡W +‰èr³Ü¹ +uò1ø(ý¬ž*•]„ gÏç…†œ©ií&ÈšºèWDuž–H‰HŸ Ó™/rG¯30ðŠ›–—62$–±æ +ldeù‰ûAŠ)"\¿}¤ÜTG=ñóoW”Bɤ•qã—l\Î8Š 1‘îÄÚº$0é¿I©=ÑŸä”_`wI¤qh(¨Ü–KÓ-Û< dÈΠh;mgbíP(ÜÉŸSu”ÜÑn÷?µØ WVܨ mˆÖ·|ûQOÄ¥—Ì4Ù¡]éC”XU’†ëZC«a¨ŠL>W£íI*S>*ã©~³ëZ•‹ ¯Í©­n—³âBMÜR§Ïg¿G/K€yÁ¿á9½ž„¡"~Àžþ-rÂ*…£Ð_ÎY$Iö(f¶¿¯¡íÐlNb,€\ü€lS7X€ƒ¹Œ]e¦Cg@Â"…ŽEÐÂ0˜9y µc?4À^”!P¤˜ø’=0eee&§—‰g¦ËSpÛ¯¯äX•âaAo\ãb”`$o5Ñ/€Úß”~õJÊJ1"Ö»CΜñh#nœ öL³¥áÎ ¡©¥%²UMÎìïœlÓÓÔÇËn¦>î’áȃKXèK9aJ>ðFÖø O“” ]cpMm¶ÑÂJSŠ-ÎYòŠª1>»çxÎßi˜µ© ÈQ„íj·÷NÇU¤£Æð‡‘öàǵIp%g¼¹¦&¡ŸŒÌM k•!ǃZéVâÚ"C@I–ÏÓ³4Çx œ0MÚWú5ü~ÿs©TÖ£TùÈäçÒ«nâ|`.bß ¾¥¾ó·ÀXþO÷Ƙ¢74´T¯ã s£ãÀgô’ÁÊ ³)e)€ªÍ1Ãç¥3/1¾CrNa*G1ñ”­°ô@ë6ÓVÚnÐd ‰ÎÌ©`¸˜6%RxáK‚åŒÉ èãÊÕ@:޾,î]R“Õ„h‚™L6y§˜@Á¥´þ©>%M™ŠÍ§UYBòX×F‚šðN–q™B¿)bg£¾*z¿ÚJ­4–ÞµF¡Fªšf·’ªõ£Wf¿íÒLÖ•ëNÄÒqÖþˆR ¯ÄÆ|N­Þ‘°A)ìØàå‚IL#¬Ÿ-BŽ!_×@vFs0/’â8’À5—´é¤4%…HÑXh   +9@•I +·Á‰Ëź&š±¢ñ‰ìdªbãÚƒi,ì9{ÓºCûÀì‹ãÈ)Äç;ø7Ô{áÜöÞ~×-à²pÆðh¯¾´ñ\2`é8Sœu|Ò%á)‘T@JǪ‚˜IÔAÆåx;С}ý•™¶ÄÐvÛÅïøW¹˜„G~¹tŽ”ŒqŠ!?%Æt$ZV›Â$CÝh@Άèj„E¼¸a>ww‘¸6f¨)ÀË-@üŽK–oFn­/LÄÌög¨–ÆtLĘ̂ +#ΙX·"•Ò„K„òÉ©&gÊm±‘ƒ³–ñˆkiM–—‚aÈ¥ÍXø2ˆdxl ÁF–‚@i­€-„ÄÓ'KH¿èpñ$% Gƒ¶uÜtÈ9”CNˆv3DÑ ç¬ã®¼S;<2Þ?ÿ,r`’`¯fš!Aæ%3 ÕYe“á@48Œ\&&„¸©ª9LUpËȩ̈×:Å~¯z`Ö1uyzåß õzVpELtïÞ¼y÷? Ô/¾ôۀŲLi<£TNÏrÉ8ðkŠa±Ó¼É߃¤¨‹tI´ÁX…`Ã3¡ÂÀþ >oSIV‹,v’»eŠ.ü‡ÂÑ +Èx¤­BË(ƒzêäè¯Ð¥+iKÌ f„½dfê¥Ç`v†K¤18ÄòH 7¹(3»’j5Ò‹“" 8±PzPRÔ“ ÈÑMëÉ]"s†RPº¡ìÂ-Qx)ÑÌõ–Àø%õZHZhOä§o"2aB ä"x±Æ9†¸(S!Ñ'+±ô‹º(0ݪŒ…Ó4Z—Kz¡© 3i.Aê%Ê~AŒÚ: NCû‡£‡~L9L$u±ø)úÅÅÙQ®ifZœŒ°ÏN{ª‰Å€§,+h›§åI¢'´¡ã7‘ŽV(B (´ß×@zÔ½ØS¾eXmj†˜imš ¢_ ¶º³³ÏÎ"4¦™M XrÓE2¶¶°/ùȱ‚(†²´®ÁĵP2iiÅ6¶ó‹tKŶ@Aí1þÑÁüÑ8‚^ž“+Çà»h¨oÞ|zð ác¼}íâ?j`ÀÊà1dŽ›ÝñB/¸ÒM†C}ˆ÷¢T_5€ˆ27C„ªdø &(SP¯·MaLF«j! g„H©j™¡°'Â÷ +ÂàP¦ņ<âYìµõYâè¡eÝ⯎ì›ÌšrWIÞЙ†»íMã2!Ó׃ĥ• QU&„í%–fÅc{Ô/p&ëjlÊ!žØgéWD•³öÑð{HüÏ54°Ö€ªšV5Pw¿r ¾¯¡Ü|ªÜ à»Yüû¿ }[y¸œ?ûû.9¬Ò céxâoÆ Þ…§4—Y°wœ˜…'ZÑÉ.'1™ ãɸû– ñ¯(╱oRÃVŽ+ú“͆²ø)y› W§+l”=¼ð7¹(”ZɇCÄ¢©ç}"î±¥{ò0YÎT>ô ÐYây óϦ$Z»>Åä¦Ñ…‹ ¦¸ëDj>Ê)EpMýј1y¦{Wi W›ÏyBÊËÐC¹QÊôƒž0ÑéCº*T¬Á¶õ@Œñ™CíJ8ü‹2ª%$Ãüæe¥> 1¹å‘fßäB€˜r‡-Z1[‡tN¨ýâƒc ÂrÉ·Î¥ì—xŠQ?-±[iSõ5sl°^žiM ´,á?WΥ诀3I°y-­+tÀú|6Ô{îawÆèúòuàÊIšQÑY;ÌðÆà^^\œëƒ,@4ÑP¥£Ï»ÍÔR 0àißɨ@ªmrÄc†Üâã´È¶¢êùxY;{IDp–C_$k-f·Aªj%Yÿµ½ÝnG²µmmè‰4‰‘Ÿì3ŸX0ÐÑÀ÷[ßzž™UÕ$eo̼«««ò'22"2"3«ºÙä"^/J! G_wnßõ( ň!w¹XÙC`æ,5ϸ—ï¬k@ƒøhûokü¯Å,XÀÔˆ”¬òM*RsÙ¨"/0µÔ+'¢¢²“ÏÙƒA‹UCGšÁ¢`@)FV gnA£ØÍÞ{+¶þ7ç¡:lÖu„Õ†A3dð\.Öø½ª¨M}XjòðÅÓØá8\œéì†~W’PÉÒ•+ ÿæ|ýŸ``chÕ‹„8F\0ðýF ç= 2Ì`½WÛì+/üò^h~½r¬@îÿùï þk€šŒjh=·©>ÙéZ Þ]~r'yŒÌµQ>‘Ù5zÃ*j¦‘çÞ‘i|Æ?¸Ó?œ Ø$#1UÚS¢øGw‹+3R¨Ú’Þ ÅÕ,íKt U±*6¤"Ûñ•…ó°¿t3ÕΑ÷c—”Ç{ÌHB/aAÉ…ÏhŒBJâ)Þ0%ˇ²A˜Šg_ï>Ì?ÖP)ü>4a°E;ÇËØ‰ “]¡¾ùnKÓÛ¬áÁ: Ö?;©ù˜FÕ‹ÈozâÄq³»èÅ^A½¢²ü•¥'Æ==Ó\ÐñzêàÈlùΗŒQ:¡â4\r•ÞH€Ã[îs PͰ~^A†èÃÊ™i>MPk»a \!Ÿº;›ÊŽ:nuah4ö abº—úû@ý×b]Áêç7i¦9Îÿçço]þóÎ4€l=b„×n<0Õ\¼ÁŒÖ{Я3Œ~'¥Ò,Ãþnª==~Œ»gÇæl’“ϰÌ#[L{35äµøÏ Iˈ«ç)¹Eʧ¾—êê’d½åB-/J-7Ä˳(ûÊl×Óܸ×%œâg\Æ£²óïrÉ Ÿ-•mÎq(´§ÞNì‡ä-F2P*Ãý¤ƒŒ‹áò9‘À; ^É ‚È”øsM­MF¯ÊîÙU³º¥µ‹7ÄA*û츓v§ftEréÑŒõ¦K]rÉ/¡_(5-!³98 *ÆlãRÃï; 4s&ãt´¶ópñF¯èdz&Ã1ÃÃ+÷ˆLGv0-s”k_†}O3 üN ùbM^Ûh]yM o@ÌO®sÀ1|ÿó[×þÌ9FLP±+>à2¤ø+—ÞL¢(P#Òd‰± ›,Ôb胎ŽË»T53[-W>L›$»±˜:!cûaÁ}ƒ&å¹âß’¹^1=\q.¤Qò®øqÁ\¢Z)»JÕ¯ƒ¶¸z&yGš6­‰çQÆØ_ŠéQ“± ýÐ, m0†h‹[‰"S’µá*}Q3IÒˆàÏÕ’‹¯`/mKéA0 Tº00{ +H–:UŒËØ“æê£Æšw<Êq^´œËõEØ_2vv4ÓíÎó»Ää}¯óüŠqš¹ÁÖé.`GϦޮ؟¤Aïè2¡ñîPØ-ò¨ |ï¦D =‰ØƒŽÞBÄœ?d5>©çS‹Â µv°@V|ÿ‹ï'@îd6@Ά+…†;‚^™Ù“°a"ÕÐâHs´¨¯ç`.bøß<’‰À¨&æâ4Í9²ÞÒP«6ïøANºç‡¾qžœòúÆ ÀO‚ýùgÿ7X> áDªKƒÈ^ÅQ"Vžò‹JAôAw¬°à 0³êZfaG똎F—&JDRM/ã .%—²t°96dL«æÇn¶›–áÙòÁ¢‹Œ®¸ÄCލ¿œ‚²{©Âç²µ’K$ñ"ÔŠ^hÍñã þ†?§ó¸p"øÁ ƒ ôÁ‘jø³ô;tpøÎÊï7r‘Š(½•jàG”°ðPÑ!püš„Ï9þžr ƒ“ÑÁfr礡Xö0üš#Bu>—¨=Ø_g8ûºBN4"=슫RË`½,4îïÝtÈ-‰âI’Ôö° +^Ž5?bR,áZòx™¶2P`ù€“Ü¬Ó 7Ù×...h#äÉðP¼ª> êv\WñêÊ™ Ÿ&½”SñŽÕMP‡×èV‡ˆþb!bp]<·éØ«–Ì%5pJ dZ‹2¸™õ½Ý0]Qfù¢©ÍÑ ¡].È +¦AõrŠÀÇre +@Jtt|^_¥¶^xk§ßÔ€J’Ùq-/2y?IDATÓ±ÿL€Îã>óIGœ~dÞÐý;ü怵ŽÄ¿­ûZ!ýAg/™xðå÷oݰþû à"›zŒªj¯T`4h«jÞÛ|Zjƒ¸÷$øBÆ:åóŽJ±,<–‹[sL R^„¾¨R5²2JÑÁöÝP¾ZðŽëê-¸I1nCDEýÈ‘¢0 +ÙJw‡®›š” ÀXB'€ÇtŠ“7A#mÐkhp]Eûø›ùV Èih_ÂâжK“ÝÔ1 ä­°ˆ6_§òJÚ9áz´FÕ!£]S8I h†t fÉV¯Ý¢·I ©³RE±Îéí4­ïxôÓt;’r-"+ŽUòF|†iôâG™×7¥MÏè•Τ{¸œv<õª -U F-Êe SÞ$,\Ëòöž€!»{o£fB•–‘g™¤Š-¸—•&yàÍ`5Ù¯ öc0ì›ãú?˜¿xþò)[þ=ðƈ$ª]5KËÚ³ÇKU‡LÞõŸïÄVŽ) ?¢ðÁ¾X|Zn›¤´b^\šÛ¨qáXæÐoèjó"iƒdª×ê1%°¹í,¥"ô¬F`"s2 ù€•²Á44td —IüÀjY:cqHÇ‹Ç>Y-`C›wÿàÃH¦nŒûú°TÀa‘\6-v‘Ë‹³á¿dNie6þsŒœ÷)¤Óš.¬ÔÓ†c: +½½¡×QVÔÛ—ú¹jBº§?/™)úmB3ƒ¥ “é¡O`ÊF’n‚bÑ´Nµ§ÀY‚  4Ž}±*—FÅ’jù¢Ni»>µ`èÓY˜!¥è…¤0úW„P*ÓW”*•jÁu‰Ûäîk Õ5]Þ-Bf«$¢_†k2!Ö/œ‡—¢… 3‰œa@ô›pÔØà$Q䉨Når‚!ï›K¯+Ôwð{:íJÃËÓ~í¨ï,·‡9Ž™(ðK€ßØ|ýúí[ö™F$s#¬»+T›½—6W_2æZn0À|uƨð‹P’„> ÉÆL8ÜÀï†÷ÐÜ"5ƒþ-@zxý :d¤s:M?¯gÙ@• ë&…jUg@W\aÜ$®—¤™€ ôü1R¯º8 cB'‰4'@Ä$K #èq¨I"f.ê;ŽÆ±È{¡Iˆ÷><éìÒž® º2µã¿#ÕaD+HŒw°©·‘ÿ!Z¥ð°´`˜ià…MSœDH0ÎhV낦Qyø”Ù"1¸çn‰k±fNW¬(.똤±1ü‚ÉWb‚D¾1qu‘aÛbhEÞr·7¤6›Öê)Fki.x»C€µ¦5žPl8#…›JZø&øa£…4ÏúÕMt“SjT•ÞØ;,Í” +õŒQér +Õi¸õšE¬ZN ­-F¤ZêÞýæÞ}Æ‹'“[±ö€<îGŠ´C•´£Þõ?`¸L$ÿ · ³À¯Ósn`s>mHp¦”ŠF»ÇååCÀüJ™Û3Bâœ3Á·ï_³ûÿóû§ß]ü=î%¢À¸ƒ–ÇtI–DS¥<îÙñ +p…wÞsJrBÏ( ´Š$4–sa÷‚ð“«–/פ(¶K1öû/À¬¬9óÑÚèîvoŠ`ÔÙY!ü+P»û¹~‰:Ê~ßµ8‹¤Ï(Pçm£^䊖Ý EnÊmÖޏ˜| +×”ÇÇdußzæë¹G¶Ã<]Ò§9ˆ¶•?Rê8$¦ nª¢¸‡F +è 2&Åé3 +¹i­B2öÛ›~r‘–)[ˆp@"ÁC@®å ¡*äžFܯå¥ÄÓTë +Ÿµãb§£>6`(Jr¶!tj€Wv¨øvîf¸R•“C±{†Æ!c¶Ö‹ÁÉmxž#7Ë`}&gÝ\þ 4Rs=½æ ïçlN {¦‚{æ~ùóÛ/ì:\&gÇXß!Ê[O¨A~’7£!JîBë¾È‹¸†’˜ƒÒŒaÏ༄ÛÚÔTò3'fû/•è /èÁºmeªD¤Âyûr.k`ì{ºcýWsW„‚Æ(ÿy&€,yÂ$Ó€Â1ÜTK½!O!·f^"Ak¶¼c!ò1BMg<£9Kñ¨SžœTˆT±F ŠÃpäÒ KíX™O¾#³ŽzEê±V­RÕ)e¸”³lƒÕ6|ÜPTÅìÆ‚1su/ V³¨BEzÙ(O²aÒ rpÛ}¢;†+Wxõð säX¥Ê™ÉÈäiÐú_Rk ÝᲤ]°ÈÇyb ù ÎæÃ0¸¼ñný"àÜ÷šýÇÀŠJÓëéÅ€oÈϵ—&³þsäýõÛŸü[Àç +±XÂæ<6Æò¹wCy4‰š8̸Úµ/Ó†^tr +`tq„Z~ü™ÖšJ +bZÖbä-Õ¶XMeÙÐ>cu­S;AÞ¶ŒK‰™½H7!H"È€pq½rŠLaÃ4²©X)”ª:ТՊšÒô«äé7K ×»8 Lµya%ºðQɱî- HGbv„ˆ’7LmÀiu}‰šÏKlãaXäÂ>“ v·™JdžÔ9P‚KŠîÙÙ„9(‡™¡R +8å@wiA« …‚ BóœÜ0'YæÄÕ"…®÷ÎkRñž)5B-™‘hf4^vÆŒ¥YÒ¤â4\ +Ù Ÿ¶”À#é´Ù¾)uˆ )QwŸ!3M¤76è=û&Âs1ÑÏ¥5â|=Þ»?G³œ½äÅ€øÏà—Lß~?MŠ(tõÑþ¨s µ90΂Fº Ë1›Â\Œ~¢I“¦|ˆ ¯¹0~NyÉ ¹N/£çFëê[1æã;#{Á>çìÄ5x@UË ÀJ?Ö¿Æé voFÔ wj4£›Î²*[>wðCÁÙHq¥dI’}1þþqVÑTa‡òF*š etÓŒ„¬Æ4»¼L¬€/³ÄÜÀðSé·zI¼Ê÷üº!Ò8øµÆ%RH˜pmR>™ü´Lk$;ÊvÆÉ¢é¨sš+D0‘¿õ|Bš =–®­ÓÙô1b¢6ͪ—MU +åiîÕq'眞æ[‹UF®? +ï½w`hHó¨+®…î‚)â<ç‰|ßL37Hǹ×ã½¢¼‘>—#cè;€Ü|ûvÞœf€ r"m.Ñ4ºŒGi›>Å#ôC†É„Òù«€ .È–@Ã_$Ñ`„ùC£wÑ…õ(ºÁˆX>cEήñpWB×-Æ”œI®DP¢a˜ÌãL$4…ø5Z•†ÓiI9{äñ|,)¸Ó¦õ¬’îGjøNXFôÃÆ7¢r<+‚:¦º¢bjÄÂâèQId4Ї‡Ÿsºã”RøFžÅ9]˜É4Dr&6j`•¡@¯ÔUMO¥´S{H¦ÆÊ©P?;ù´ gÚb0A+s;­Í%†µk2è3â@$-+¸â``× Ð_êä㬫¨¥ ™M•)c¸´ªåz.SÔÑZ^p"Ÿò=±X´-#þ$z×±¢¬9 '.+þ§Å¾Î;;€ú¯ùЯ}ûöÝ ÀI SB?¬x„aђݬEø¶tñÎ΄¦õÓ>Ãn‚`Bø°¼×›Û‰@€Ñ(ÌèðÀ0zZh¼™ŠïÙ±¦ +ŽvaüŠvÏØî(MXu¤Ëznà#­6T†9)  ‹/ ùŒÝFdªl°ð V„LIR]¤PŒ ?Ep <@"(u%VPJíØºo(cŠØH¦Ò\wǼciäÏí½ŒcÐ\V%T»Y¤ö’›eó§Z +ÒÒ[€Ì÷QsµV™óSTŸŠÚ-UA­"…; úø¯v!Ù`ü̾zÛµ{Ì"Ÿªaš«7‡l ,Yr Øwºèpuÿ_"G¡IlçÃÈÒif®ë$‚EƒšEʺa‹ÌCÁ™n‘6/TêØ‡× ;êûôi7"nW0/æ +6ܬšã˜¬ï`¶ýo¾xàhÿ÷—ßóbØŸ~U&°”É™ ¢Ç¨j¿*RBŒÔ‹ nÂóŠÆ+p¤#îky¬àÓÒÚK)NÉK“DŒHi?t| ïÍ{c÷ »F”‘F +wÌ/r³u²‘Hñi‚ü àìÎM¦ ÊÍÉDÌ ´ÖÒ©êµT¡¹Û,Pr*ö-@H’Ì«^®¨‘žŒÜº‡¨Ž4Xþ¹½LC-'§ª8Uư\Kî1?,0FbIIÂlÓbÄA÷”§3«—lÏÙ –-‡œ×ì+œÓÂ*•Ú¼Tá\>%eL¢°lP +1BW•6J{û¬Q—q4ú1ipc –æBj¨–rHWUÀp©úx +ÜŒM/½‰ Ö\lŽ}ý ¸qàÊß+H¢ïÚß—;€R¿…Æyƒý8vŠÈO¬'™ Ï-Àþ0é)=M`Y^22ËòÚe2(D®VÄf_n¨I[Æ> îÓ +Ùf$Œ0À9sìXŒ¦Ô;Æ?R´ã”Ð÷cï&¸oáðÑ 9ä&Á¤’±`h B¿g&$zd3B”àvx[ëeƒ¼á×Õ½5ÅJ@;¸3ú­—±Žtö&€ƒÆ…ÎÈgW‚}R—–Ò“Éá*8Ä€KM¬f–€GºkÀlŠ’¨ÿÜ»ó#Üp²xƒdwä`•KlÖg¥èŒN\çDye,QLŠ|Ƨ¨¡J!<ýVtê£9ô‚K9ÌiË1›ž[{©Nf¯ÙÊÜ×»Á%ï¹h3†kúöÝù:Ê›­0¾ÃÅ€Yµü•Ë™ ¯hp ß{8á¼xÄþõHpóšËñ à›ßäO€º€æëW„(㘚 ¥ÉbOŠª_lêi¶(—Á7sÓ#–Ǭ9ø ´èòŠÅ ø¤àq)à…¾36ÍËòvQÃÀôAaW{¬:r‹+‘rEå'þ¸´ñX+å†Rt8sŽ\Ê\÷¬”:AÂ9Ñ)ZmÜ0! ´Ú+½'Ç‚0XKJÑæ"„8ÕÉ5âÒYé@ùz8t– ue¯Ñ‹ªÌUÎ9:W-hNª‡‚ÕÀšÊÂÆ(2íä€léÁËY.o%š„}ÚI†sØ)ªóA +‡íN©Í‰’Î׋s̤ªWÅAæicÙðZ—ÎYIîNˆH-C+u¸l‘º³]³d÷q2šq ÜxE5î€tÃ~¶w°"¿W/,÷”påæŸÅžgÏ©ägºößì”–3C…ì ˆw|fL÷³¹à¿Ë²D _rŠ‹~—gßw¬£¤8‰X“sÍíCÁðZ%nFYÿû•*nÉW™ž '»Ú°1â"±•ÐE8›uèšù-Ú}X4²-ŠqR€îÒ"À2‡\+"ŒO¥ÙNWNšFx>´°oÚc'a@Ñaf#|*e*·n–† Õ®‘ê)õõ_!{6ªN®VÝ^¼RîÝ ”5ò ˆü_—eèì;ÅíÜh4An i´a­¾Úž Ò#/4³I@§›-:r";³Ýe‚è¤àãpY?‘?é2ÈU‘ÏåŒóð ¢üÑT‹Í@8P®Ì=Þq ר_hœ;œàðà uÆþžLˆ$Þîr³ß à;Oø.@'ó‹èW+ÄbÑk`ù$½ZBÀ&­©FQÒ„S«!ª€S–6éBCʼn˜31ÜŽFLjK,ÜaH7¶¦5>½g^±“ìš³rXÍ 13 ê%Ø‘1¼¥/T„”žŠ €±Ñ\‰ !bX•Téx©\H¸PM.PÀ#@ÞÓ R'à¦/;@÷ +£RŽf>U‚l¡ÍÅÃÃG>.Ë•te@ÌçJ Ø€×Þœ Kõöß½Rz¦ +¢zøH”õÎÏçÿðð¿|ô¡$E #»+"$^€÷ÊŽŠùÀ‰+\–¢º<Ñg‰´íὓ€Ã•J‡ ù‘Ðm:\ XçhºÄÈz.ú¶çbRØÇæLßñª¼õë™±/ 3\{¾> ôcÑØ6öŠ„=;€Å¿åTù¯Áˆwã߉À"#½Oûø=€?¾ü¯0,ŒLч¿Ø",jÇlZµSÄ^lçi/Q—›¸ØÕðkH%ö&úY¯eœÒ°Æ8œ,stÈšTaQ‘U^KÉÐF{iVWtÜî ™Ïò«/ ºµÆM’\™|,Œ^² 7Ü*MPÆHU•ZЃýÖš;ëuú¾L°W/èEÊvbZ(sjbÐö¢ðé8y‡‹.2\­‚{ +ù‚oŠû©§ê5ö¡0çŽ\Ùä41“@ÒøA V4'²ýyQX*p„~[p=…û¤Î¯îýÿ\ž¿Y;€ççïö5b H[£i-ߢ*‹û´Ñ‘haŒ2Óá žVDþ±pª€"ãÏ˨j ËTjû¸e ø MÒ!£‰Q"¼_ÆÿîžþGàó‰EøŠaäé¾Þ+QÛtÒî3žHŠòH†êÄÈXà`Äm§Bºs‚¨´ Zlít»LX”¼…”hç.;A¼¤á¦ÊÙ&'ì, ¾Õ,øÈo©´0×0jÆ ÀÂi丟'€u äû¦2;ÖH.{Õ^«,œàmä]‘ð¡€]‚“zͤÊPå²vÃêèWi¦?Ã>‡`½¹Ð%íÓ@K©¦‰,cW¶‡‹2Íž³SÖ+;€IÉãbç¤x™ßù?FB|`¢#h“ Îú¬ûn®;ƒßo“¹æ`ÖúÞòÏ«ެÿÎày?80j¤çŠCÇ8Zž|m€}b©ÆQ¢„ #üÁxZàN)áŸxoÌtÏ_Ý <„×äÂÍ‚b0ÁÐÆoMçÉØ÷åÀN s„òþ[€¤£PöbÞ|àˆÈ8]Ž¡j{áԖ᜿p{¿>Œ#¨½Òp¿ÎÌÖúœ–Š©²\¬wÓ¸ZÅ‚Z.†¦ÿ|"Mu®žšxßâf\°j銧׸,òY¥È)ž¶³RæÔBNŠxnˆónpÄ»ÞVíÑ9”¶ô•¿™¥Ï'žjšJ Ÿ—KÒlÜ(­áÙ5@ŽK¯$-£·>¼eÔ`‡ˆy˜­P,å­ ’H†‚åÒëáþ_È@%-( 4e®>3˜YÂášvH½L$«ò, >Ï­€èaý3ómN7]EÒ¢bªBDƒõÆ/˜0oðÝìø·šcN­àµ"ýô:’<è€[€ìûÝ|ùrÜœŸ,gP™g¨"´u¬çZ&”¢À0âhLùk jVÝTÓ ž…‰¶WÏØpIC-ž¤-]¦S¦béøp…ÿô:§%AÞÇÀ±H·hry'¶l+‘Mw,Ä(føÁΡåv…sŽä™ ”: ‰õ‡:Nvår|+ýÔz4OéLÿ’ï4*Ÿ"ÜZ5’ VÓÎ$éb£u ¬ 8^.ëVZN¼Š0BD)¨ÍቱN)jlÙ.L˜ 1Ž !¥'H—^Ÿ×<ƉRÌZ:¼F-ifHÐäM|bg?EO%&œ0OÁøÀRѧ5lØÊ€Ø65MÒ =DsîÝׂ‚ 5¶YØ k ÔjãBªe¸–>Q&{¸ð+lÑ<õ„¾ÿýõißœ`<ç=ëÿÚäºb7™´Èuûñê%ߨË6ßxðé÷O»$ ##©¨·¨v$æ^¹£‘Œ$LžîÝ¢(„;ÎpàD1žI؇<ÑÍÿðð¾LX콤ýÚõ’³‰V͇¤£!Ç"»Wh½ Ñ1°ñÇô‚n¼•Hé"” +&93ë0|:”¿#P–G¡=ç%R’ˆGY¼Ž”upãÐ’tÃrц(sò¨&R šÉ¦Çkäˆd]d•$¯"²1uБ  Æ>¡z/Å0£²83—L6Si…”1Ÿk%%©YÀ …Ú¬þf8™dÏmÎeš¼*‡Ÿ÷‘ÐÇ®!A—gü¥b¡ºŒÈÄ&6„„v j²ë‘ Ö•UžK‡KºÖì9&Ã$.hé¢d–b¹RØo†¼ô8O£>Ü䯄¹ILÆàç0vÅ5QNò„c0d¤J·R-k¸ï°Ÿk?E ÿF»ŸdpðõÙ2QõN[ÅìõÇÄ@üýóq·L¸BÈÃjô7ü³ ¡Õ :áÏ&"&ê v×±,)¹‡ào2½³¿È$á +†œ¡kü¯) ݹƒÆÎSŸ"š«T¼Žî"IDŽ‹J&©ÿpçÒ‘š6› +¼¯úž9º|iïýêX$U÷ÐB¥ÀáQSŒ($)”M²|‚-E®éÞL¼1ÌM¢= †,"$¹Hns ÅP•O"ŠYÔs4¤Y¹·¤ìÒÌpsÚHnŰØæØ”Ek! è8¥:èt2ÃRàé$s„M +FÒkÞ—|®¼î€]È„K4dž,jRRC&ìWwMæ‚ Óx!µ™k*²„ð2' ˆZ4 {êï­)Àи…nä¯÷1ìSgƒIµl…ºGÓ3 4µ6¹|ÿÖ.;€ +h˜(Ì6©FõÛLΑú¤¥è¼Lðà yFUƒÔ) $ ]jº±gÀÀ[à^ýª<£a~p’È€b¾#T^t„¡}L_ô‹€nBÓò2»yÇÅ3 I;BÒÄux´é8¢4;½Õ@±DÕ¹üü/>-º¯GEÊd ¸V”©HÒ”9!ÃIiG`>J¢;9–¸@æ¾H3\FY†ë¡yï…ö‘ÙÞÞÒ Ë»•ô%mgßèHrf^“_OLººû?ÚYQ:_ +¼Ž}žø Dê¡ÇqœÐ jòiuÀ}ƒˆ¿(_'²™Áyb&!WiÓS¨£’SÒS—å08¶«^DUV·Ô±€çR¬$ÊW¡Œ,+Í«™lê\p“? ‡*•q9P8­˜v†D¦­FnÞÊj²Øíüþ9ôX€ÂiœôÊF\öt¤cÏœf6l=ÊlàAåP~9:\‹µS÷Ýø"™ ¡ßè7ü¨ZT-Ú/¿ìß` þc8í|ÀWù' îM@='bkyŒd¯ðè~’›WïeˆÌ$þœ(d0 WxöI„uÀ àNxC³ºìŠO=H©ùÈ3°ƒfË_ÀƒB’EÚêP4ÇÅ2ŽÎÈ*“+”£ŒôÑ@©õeaT‘?`-Úul>÷áZkÂ’K2™8íÛ,KÓì:>“@"¥ò$° ]ÃhMa| ­4pG‚is¥²O£hVÜ{”/¸«Õ{~‹‚ž<£ÿgöÿC{ܺÃ&EWü럫%€úp]jegNz1(÷Aä£$‰V-2ax]Ê…_ÏsŸð”ÍJEÚªå°Ëû÷3_·Ø”;¶5\¡Ÿ!9}—ñêf •«Ç^ï]ȸᗨòD¡èYôá+éœtTìõžüõuD{N;íDTWÿà«;þøf€}EÊh¬Í—Úìˆõi®Em>è8$AدØÔ¾ç¿ØÆ1‰UXãM:2üdÏèð*£×qÀùØĨp\¯†z¢ Ï S ƒ|Th—÷ “Jÿ%~ɼF¯«Ä%Ūùô« xZ^]3OïïM]šÓê„Ŭ-ƒ›ESïr/.9(â——ØnñQ.'ýÖ~^0D&Ö"ñãÓ¯‹(c“3¹‹tŠÑžc=% î߯¤U®ÜèL4é@1_ÃÛ-G‘уÃL ô^åJ,rýÇÆ+Jq I„ܶïpyжtu÷øu£Ú¦å» v¼±EÛ?Œ›²¼ÊÓ‡Yf9üž&能¸®úç´/}…û¼;ôh˜»øþèçk§Àˆf´ذ²W5Êãp!á]$– (°§€”KŽø@­æiÎc¥dã~½ãNQ?/ì”1ä’õ"—Íu…­ý­Àfì4ÀÏ] +×+>¤-y±›SJC †-“¸u•)ÎÅ5ç^ˆä÷Ù<Öv< +­ïî>¢^dè$„!V+ÖÄ\7|7;|O/Ë‹-KcÚ=ÎŽínBEFé€ JRÈoL¸Ð<*C»Æ}U­õŒËðƒ+ne³ ¹Ú©;€tÌ]\3¥kmõj‚&CŒðÍÚóËꪲºC +5ê† ,:ÜÐ6‘N† µ†’0à\„„ÿÚe—ð«>ˆÅ»×Y…èõ1T1f ÐÊc´RÎôFÏ{^KhI…µvÿP‡5P“ÆãÅgËNÂПóª%û•žX7ô9Ö›é`;€ìøsàLNi ¢¼¸KFÚñ¥1b5©:í1(–e¹*1!ÙˆÌkÍ)Ë2Ö©Q60Š;¹º>µkŠiþ:ìÉzÙæUÀ}¯° §¨3ã•ù ·7>ò͵:¡ V‘™9.E‡ov§×~ÒO¦?®Mf ͺßÎr’ÁâHóÚ!\,Ž#¥Œg‘z  ºÏ„¥ŠÉž Y›„ì¤ö=i@Ä¥Ó¸*1P’b$ut·OÀ'Ô„SÂäÜ댗ÍÓ>I9ó,-@õ¢ž‚°B/Ž$ [äJÙ6Y€›3¸•¾lJƒ }L\§9zuŠ A…hÆ·ëIÕé°£µ;v¸ˆízº¨V}Üm™ÓPZ %c¬¤ð¢×†Æ]Ø $øO_HAßë<¯=þ·‰~7óJnªgðõÓï잟¹I(FB”2Š(S%ónbôG]#Ä–¨­æç(4@{Xp¨‚MhS|rc*N,7Ê”ËªÎ¥Ç TFÎÄ>‹b¶»eÿáÃÿ¤rô©#~OÖPŒX–¸,«?Dܹ&í@ãV:°`NŒK Ž‚·°V±Rmʾâ¾xLkbÞ¶K•„»JŠ—@$çÌ [€2”³ NMNôðÀâD˜¬ÙÀcG;t`õàœ+¶ lP³*õNFS½Ãð^zµQdÉ‘|ÞÌB(¥`íu%qÏF€¢Ê˜ö•”3¾“ÎdÄÄ–Íhg¤+!õ(¦Éc>Û@£L(m˜Eï¶YÜTHˆ[ š¤Å°îp‘ÜÖH ˜<ºð™BˆØÜ"1†½˜ÒN04® ̺ôÏÅ Àø?¿z´ø§ŸÚD÷šŒüî xý1ÅÔû €À×ïNôª)0 ’X±Ãà›3b"ÞLÛÎñŸØ„׸à•fW\‚zSÞ­%õ +èsG=K›3(õR_§ø¥MòÆqÖèÏæŽ0È:p—g¡Ks—ƒÅp_R¯É%997:Œq¢»vƒ Çû¸Q‹ðQV›’8Rùltÿ™ûz'ØnçGh7­¢ß¶í†åp_IRȇc‘ÜKrl½¼67œtn,Òg¨ª@hH«!s^C eóŠáSíÍpL\&Æ ù>¹iÑTB“ñ’wN¹Oç gê" jðz/M˜ØÚK1é» wèN}a4l ¨Î`ôâ•ù ÷3Bù\ÐØ¸ÁÌŠNè{™iÀP¿Á¹€Ð6þi€07þ™ „sŸüÂà+¼^#ŠnœóN‚ù-`¢™ûi teÊ.ͪ%±‰Zà)za“â\ ãɧ›&di“ãÒŒr4zâ_’E©%w™Ò0:NØS;:Œi†ÔÏ«L†¤nå‘6SãWt˜ò‡±¢“äFXu·éÉ›¤ì@<†%…MV ŒúzÎä +:Ìç:`›½’DJ©ðY„‚‰ÔJÒ¾ƒplH)¦"¨i¥^©j0ЩjíîI„æäK^až"å/à +Ò—Ñz›ÅÔœI.½nra$Oz ÒÜ>²!™ìŠô”³Î4- #d$ÛN”xi¦^é59Ê.{aú—S5L÷»«Êì.ku²T‰a½Üø +õS wè-€Å¥èU²f÷Ó Ð9`MÖÎ²àŸ¿3?xÇpìP ÝHäŸÄÀ^1<:åìÇÞúÐê —…èqh˜|*qZu¹¸‘ë|§¡µ­÷šC†Fº§) ËãfñŒ$2£ÃˆÍ(žT€²-™ÄsÒS)O‡»ã\÷£Ç#dܬÊvÃ{ñˆðú†¥<>Ƙµ§¼IÂ7D\T Ò†»<Š0Ñ é™Õ&/ª/%c°à*ov>ç&îaN_¼WàÙ=qiB Ûœ;ÉgPqJˆŒ†f¬f$—Ø"€8K/ͼf&CÕˆÏtß%§IÇl)®&îgHŽ` '¤Q«4Af[¹=!GÞ¾–^ý3Òt·°""‡l0Lá„HbÚÌpÁjJ!ñ¶õ×ÑØ¸€¸&Òÿ?ƒ:XÏ­hÑë Â/ñßW§€càWù¿ ü&ðó3ßÈBˆô~€è€äêmu¨(®êL½¦ÔL*°–hõJO[¼Â8µý¾Orô:ufœ~(âψZ ORüŸ,íÀcD):Võ:=ªb«ßˆ¾º +¶¼“‡®46ÞS= +¶\×(cëkgÛƒ]i³Pù2Ñf:¸„‚6e‡±H÷)Ç£hM+øå6ó ¤+¢¤¡Vád9v°ýùˆaÜ3'é³Ñº½xNÓ¶I_É䮂þ•a Vv‘} +¦/¦ÚŠû,ܨ…;¡ Wn$-/$ÆùZ‰4h’ÀùÈG/Ì,è^µ£×‚ë ×µ°äà1ó+¢18ŽÔÒ Aà—®ÙV’` z´Û2 ½m½JÐ*ž0™:¦yÏÙи ñO ÏÚßó߈ÿWv};þ¿%‘’ïìü9ïüHP§Å±üaXT`&ŒâØÓ9õb¤Ú +9sÆèIAÊvø{ÆbqU¬sy#/³4l!å-ÖpF¼Ÿ\«…Ì7""Îu_¯C'´Ò£tI,ú¤ÉTè$fâØúCÛÚ¦CŒ5&‘” ®ÛæI¶k|ˆhÇÁ–éEêáæ§m])§iò§ l›ú‡ÙžOH>•K¨LCöÓ'j¸õ"½™\D$Kâ9B¡ßH¶jÐFj£¨Ú@É»ú&Y•ËÑœØhJc´J§#&,¡d‰ÆÉiÅÀár“Ce¶ëaUbú“È¡–í.GÖ)‹Uûm뤱«ÜÒ&郎ËGÛ¡U+Ë~|dŸ¸m¥q¸IÆ¥,÷à`HúÂq·¨>vÊ(Þñ!z,cQ‡c-¤r.ÁÆ%g¢ÑJI JÑp°Š+†éK×?í¨\̇µ|çb)§rdµv÷8*há«ä‚­¡lÂñÍðá¡1@ ‰Ñ>HÀà Mï õr +‰CîßÙØ·÷‚Z$Á‘Ä@¹Åe›ð}'*a ñ› 3ÄHÏP´m{â©y„…Êg“0Oj®Q®Az÷QDË#­ƒo²*"CIÿ!†\‚$Â6cà}pB¤Ø§ß2„’Œ#NË åg-‘J2ÂJÂɶ«#%aú©ö‹}õ]&ÉÅ;¶¶•·¡|e«^ŒšJ`¯V)åZÒÓè…b|›µj]È3ûáZúeAPß 3Àiàâÿwwo#ÀÚ8?óUà?02E¸ +BkL¸£´¨#†›94UÚsÛ csf€€"Lä%¦¥EÒ°I²)— ç;òfÓ ´6À±“@s½.ª,YFpÄ}’½z9xpú@RæÛ¤¼xD)\¦>AÓåQZÁÂdñ€á$˜~<ðâ¿Ö,ø”"Ž5870R˜n +ØÈþ„†w„}ú³÷<Ò³;šÛ‰ïP¥{wïåK­ iKÄ@6I¡lÌJ³’ Ù`==›¤D¾õT %ß±ëá[½¦Q™¥Ôq ®="ä —*@¹çµ æW¾t&éôïÀ )ÆvµK;AÎv½­[ôÚ&L=\äúubc\ƒ×^Â&¸£ ™ ÑØ8ƒà÷zñÿ²ô ðWaøÏ 7î>}á`nþ—@¿®‰3t*•Y;û<ÁÂQ5qC£M«œˆÀ;þÐýÕï>á ýÞP0…½Zž6Íi±6eÎd1šÂ©cþ ™;¿[†üé6ê¢Nºòt°góà_ 'M2ÎpÃc„s¸çȾ#i¨äSépi/)ÅË£ Ûfm}Mï·Q3ƒõ(þP7TÛ¡Þltlµ÷«ô¯@6D*×H¹EJ~¢4)E¦c ƒTØ"—Еr9Ì\¨† ¤(Ýqç7jQæ7 sa’]Šu÷“ÍJ'Ò®£™&ìQëClÏFòY@91d"ÚL¡=É…ƒ¾H(¨Œ[àÜEî ØÙȃ€H%4%Ð2° +Írg¿$E…]ãÅࢱqEo&¨ƒÿÆ €¹èÿ ä§€Ï_ý§@L¯ZÈ_µŠG|4j°Àa|•fDOá4þ«e² -Ë´C›Ô®TÓp˜[€fNe™7ë9ïÝ2Ieê×2™RµüM30q§\peB ò .ÙDIÜÅ¿Q )Уd3>Á‰jM•Ã{åc<Ê}¯ ðþ×z°iGEEF²’RÇ£/ˆ¿ËÃ/X˜ÙHcöâY>í6§lI(-hz~OMγHO*$óI9¤À:ÍWuA.N¬ÛÉÝW¯KÙ»¨Öú°;ƒëЮ 6fqè«§ÂZnf—f?vÖÇÓXPCG]üÂV¸¼’$Wñõ©­ÍÑ V3h=,Ê©l£ "òb7ð³×&€ÙLLOäÿÇÏ|öOü³ÿÏ Àà÷/<|þÒèÏ$‘¤·0„Ž’?ÞÅ/ùݵ»Ë­u®1ƒ®0 %§…ì ¦LàÔi?ɼ¶ÚÄ´E^¥ñhº†‹ë•ûB‚[€=äÅ’òkô"®Ð¥£š Fë6£+äAô‹–yc ÿá ¼;¶‡ïÁÞà¦"Li‘JÚÔgÔnÖäI)0¼ˆ Ò9…þPGŠCZꀿB=$I¤´V¸ãD²¡XË&â°€Uƒê‹œz¯ÜŠ´®õP±œÃ­$÷OôMø…OŸ¿ë 0j«ÇãÇßPlìtI©Ö~Ó䞆’ø@vI(Äë€ñ?sS;„ìp2[1­¹ì²‰m³7€eªànn'ËÄD¢?'dîã)õbh(p²W=þP;ÙÐ0Ñ— 2PyîJ&HæÌµƒ 邏é3€Öé!p×’:ï”ètÆDjæ€ð“f<Êø§˜%%—.þ7[;à/Ù“Œ­R´×xz$Ïkâäj*'U¡:¼ØÞ¸bâàöé4K¤´­µ z¥Ö´4±æ¥'Áu$‘=DþY!óuîùVs®I“p2h¿)‡EúnAÀ§Ö^;PÏ¡LíF‡^.ª —" 3q ÒµŸGܼÅ”"§môr¸¦ž9 !ÍÎtã fpŠtÃÿ?Ýð=€„?×/ó)À'vß×àz €è±|5ëÉŸÐPsñáºCÈXrq˜øiF^¢²ñO˺§ÆXRFÙe,“2Z‘?¹Êq…¼ÜJÚvÞÚãqJ2¾n*ÚQGŠÛD +ÆS·³!p›Jrí΀ +RX‹8ÄM¤‹¦å¹a´ÄϹa ð¬šÎmËă]w!z¹$#I;O›"+ç0˜;Ðþ|máè®w+u_¸x6ˆ„²xÏ“K2-*B’1Âêš{.Ó–çšFuñúM”šßôN5tc½$TœÖòvФF÷lØþÕf¨.4];ë&]`I!fþ%už>Ó2)Žì™Oh·•›ó1æL6˃´ípžª•lv`e†ËæëÀ†Ž|ÅËÏYýÿÀÔ)À;€ßÙü›? tý¿Ü`ù'n¿0…¢'¹,s2_劮”g1UyuÐ@\ª$4›ÆäsšÄN–ˆ7wƒò´r}ŸæÀâ?~ñRâÀˆ/ï@µh3cÙO¨é1\”%ÁÀ¤±­Rshš÷Ú]6ÞLhs1,ʈVy'߃‡\ðˆå -…a‘ †ÛºÏæ‘„©¼"á÷$WžY%P2h­25C\\N§^ìQ’œ5·äI,b¤í&=1ׄ”0¡Îj@<Òhê:ôçB>ÃÊhº[wl"Ý}©’˜ym!j,â »¤F¢iHŶLŠÒÈG}¸F(ÕªV•%©Œ~\¢¦6+ à +Gå‰ÈŒ¦¶ERT:@°?A7¾ÁË[€ÿ|ÀW}‰ÿLlø{àlöà÷O¿ç h +ü÷éWn¿ÆqŸ¤Ó#K +î rÎâÔGôf§#sK_ç¡{®ÂkÛÊ…£©4=Zî‡u™77Ù´eÀˆ2dx~Bz<*R£˶% /Ýwµ-âò^­)^j36axñ"’µ´xÌ3Ý´Æ*Ò†¾çtgtã&ip•g7-L>ÖèKû)€ ˜Ú(;Ã)œrØÜ?Ý9ÛÓ±Áȇ‚TEqK§àÖ¨ƒ^Ý+é2²;ç¾ÓkLGsuŽuýì(¯(ÐÙ…yT½R.Q¨þ7ïÔ¦´ÜXbø%­‡‡'~{X¹Y'ƒ$¸ÛªfZ …]¼ígN.N†wÆs2Pº±É»ë[צєà6Ðäd¬SŒ‡én´=f€ö–Ú¥·4:ƒ ~›P?oþÞàû‹×W¾ðKüܰøÄàùû—ßý¿üþ)ñÓC÷åÃUCt œ%E£\ìA)¯*›p!ô +Ø pésh‚´'¸“°Õœz«Š\Þizb{@Þ›u¯G7áa˜±`Tèbg£Z3†Œ0¥¯JÀÛ‰”Ê!öÊ‘PØÆÉLZv€yë® x.,¥5^òá­®¤Ð/’d—ŽÌ³T‡·V],C³¹ÁËO;X÷C4úžO/fŸ°à!à÷gvÔeðK¶¿ä p +VþÔô!æïìâ+)©ç*3:…jhY@B‹$iž­ú4ËÕ—Ù2ú©—b3bÉßS ¦±S¹ç¦Ï“ü\¼Ð)JG1,ÄX¦ +¾ÊáדË$eñ°œîŒ1;Ã=Ý!áx—•äBMJ`’œÖò Òô­i}+LÝ«-ñàˆGÑk™)ÅýÃg¤ÚháNÇec$N ¬¦`vVH©ÄÓÆeÈ%*xûÎRÙ§Å´lÇ^Q«ÑžÈ+¥‘¬Ñ¨‚¹ ĉ;Y•ŸDþ<@Þý€ï2`…qCü/½!J*wSÅnÙ¶$Ù @Êr¤Tiæ骀´ñ>gHƒV&ê•Þ·pL9Y™†X#ôêÓøßéN!J.V;×½Åó€ÕŸÀøgàÀ¤Ÿ¿õÿòã€I}âˆÉ'†ón¿²)Ѹ°Š›Ý3ÀìøEPþ€ÿ\^j‚ÅÅL<é©2¦2‚¦,'äÝï+ÔLzs(¨a‘D +¦y\ž,Õ1sO©h‚ ÈÿøoqAšÅ~U¯ .K-ï:x“Z (ælK’K“îÇ:o¶)~HmjHAd‹Z· RIì”ZÔêzfgžüßÅLT€ï»‚0\ÑkÙ~4mŠ RŠ`‡^éÉáR$ +©â3 E³ ¥>Ü»0ªo0&ª‹õ·oÌÿôÃù’àÏRÄÇ€ì˜Ä1p«Ç¦¾9Cà”à5eÌv?„º@šGèÉ`+0%}ªÔa±ØñÈÛ\戃¿<â©£Õ'€Œ¢c˜ +«÷|°‘Þ«evHÂíŠíéÐ +ÇÚÅ’%"Õ{ž¼H±»z ³ÞIkÈ-›j!ÿ9Nr<ÌUL¤éS·¾hª«'ÏitwR+*»·‚²A5ËÉ®@ÚS}âˆ4„‹eøÔ÷Aò‹’ kO Õ%'6`á©«\kr‹î£aŸÊdËØûR‚Y+^ò¾Ѩãp±#t¡€„ì¬ÃUYå]V ó69¥á¢ë”fcã4|n}‹S¨{CÀe& 4ðŒõWÑ”ÄÜ´„ÀŸ‰ÓO‚¡šÊéµIú÷¸=Ú¢sd_^Sñç½ÈŠÃ^Oq{¤³V{GÉ:HÎ#/ŽÂÜ$20çŒùOŒsq<»Qã¼»ËÞ”$_\¢^5âÓ';R¾5æ‹_¹ „û< ]ÄL+L.Ü<¤‚R,’÷L;¬N€A€+$Ç"ê¾ J‰•†Å5§%ùë‰ :惕Åà芊N™ 4-]ö¨nâö@!ÿƒÉÍh½À˜OF¢ÜÒZöVD‹ìóf¸rA9‘ Ël.êÀ7¸Ä:{€¤oo.ÁO&ï‰ãWðüuv|Ø_â×¾ó³ sE¯Cö‡°J¢ëK¥ „¬¯)0ÓÓàÍ Å&Í˦^­'¿ËOHndþ7¾€:êu¥@«W=³Ù8;ÞÔñ—ðï@Ð;¥î)OUñ1©!¥"/p0æD;¨¡çÄZ#šnJD6ßýü±¿Y'+-@|Bs’E£Dol|¤l~XI=Ð…ÈÍÔ9,„äÿ„$I©¬Ëÿt¢„¦‘66‘áÿ mŠÓí^fyôÚ½X–÷Ôu"€5÷ç»w•¸~öÄe›˜2ï«ùK¼¾‰söì1Y1›Yhó× 6 +º2\-+Vª“Kw2¬!Y-Ü-ßsû)»MÒKÁ®iØq²o>i éйZá™)mphF¦Eü` +ÜÖõ@$´ ÏH¯üìJI´ ŒCò +(5–œ{Öêi÷Är®!d,Ý!‹õB3Í ¸Á‹‚¬Úd³¿Q‹[D…‰ÄábŽúc†ý®A3NÞ¸¹t¸fƒ‚ÄܽF1ƒ{ÅŠõ‰{Žì,¤hb~œzů‚€üçϸȔÀ÷€øMЄ?€o‡€ÕwÞSf÷T-1d¹ÃЉD 3 L§•ëa—¡xSiª¹¼äPØÅ§óAlã×€^KzÃçâÙR³@¡¼7ó¤ã4U‘jç¿Ä}î ñ7ù!ÀZþs]Rûÿ¢}0^8¥˜?²ÅIÕÒ;¢ÀHl£³Àô+WËh¤ [_›–ã.é±kx‘p.Û&v)Èkn|ÉÞúÔø0™~‚;õØÀ/–¸29¼Ó0Fº…ÇÐøõ”[E%’ð#]ºHe)[šE2lòœì)èy0ªÐob q|`B/ªº¨ ´8`9¥™n€60£BVä ·5\ø‚ÔÃ玓 )%L2„Ll£ª§²6Imdj¿€»{!ù– +ÐÓªb’¨Ñ<­ÓdÃÒúðë0Ö¯Iâý|\SÞä¿/¿÷ü$S;€uÿëË2j;6`·X.ïøŸu&€ú®QÚ ÉFoO'ç^ “çrÉÚÔv6Í»™]3T½0á*fÚ{áäù ç9YÏfÒ:›ä.­üw1_¸#Ëø?|ÈVy¯*—dºE‘BÝ#¼/sj€ù¸äŒê,8¨kZœ>Ð@˜eHájÉIdú~ßYÙ:T–R!8’؇ό”Uº\>W-‹bËÕª!WUä ×d"ÍVK¤Â €>CN Òt€^á#z°“ê½"olf¤â\4Eˆh†ªØ!%°’=f@ƒ]V’ß>w"îK¢óT™Þ¶Øžq.–v; " É²KˆÝT)üäaJõö9Q.ô}õxý`¯ú;™ôþ"Pûy’yñÐh¾ÀOø ;€$þÍÇ€§¯0T;²MaÿØÁ鹡ÙòY‰ý4@è©\ñ¿bòº‚]sÚÃ.£åø•…9‹{]Ä“®è¸f-Œ½Éô¼ ÍJ W•¡†Ù-@ÇV'¡·ð¥œçxTŸˆ¸FêëDžpœá]6ˆ§PyLÅXÙ.“ε;Ìšu +[POÆbœ¶À5æTcmÞØGGAÒ©²^ÿ䓃Ó.¦>Õ¨ÂÀ=¶@Àµ €+¢À\iÎPeÏdØLE¯Ø‡?ÁHÒ°,ФÝٸ髈ÅGùî“Û^hàS» Ù¨ÝQ^]Ü 2µVÖ9ÜÍÜE„ôt524ë7½Ò%çøRÈÓ„o£…[//.jBЧ%‹m®ºð86$›&q +y'„yÍP4®7˜Rö•åŸ àÏÙ¬ÕDî[¿-O|µ,®ü1Z“Œ¹/º`’^XAÚäB‹¶èµ$Ú ÇÑxpæ6¯’r bºîÍÐÅ$ñKvMŒg›*ì¿;ž6§„ `tIÆ£Nw•'‚D·„…’„‚xK^¯Nµ!^¡J ô㢗ÀÝ$ãǰºç;26q:á”×uÜ’C­r!N^Ù8yÆ_CpŠ +¿b±ÑTqâ.ØVÙÕëøjKz…Ò2®í0qóÞn8/æÕ¯FAY©ÒòHØ¥f¶Ó¶ ‘H^>|—3U½HEy‹­jÊ3­ò4hÆû‹‘WYQ"ä™òdYÖçë–~"hoÉF¤z[]0^|Á„=!¿“„}SFýK¦hBÿÀ6ÈÀç€ý0 ~ pí:|gÐ!‰`•5ÀÌw†TÔ Ì¶ÙÍi;=,$“P40s&yÁÔïSa;N)+#¼¯0?'¨O'Úæq£ÝHÞ—ú¼€EŽYÍV‹ž ¥è›kôÖ£ê=xTSxTèpÑ=®.? ã“NZäÝhWeG>Ò¹â¥Vñ(ʆû‰ß0Z>Î9E#|ûÖ{M`øùP¡¹49íÐÎÓ30‡È-:@P½fÞzR|kñ&P˜²Ûħ¶U¶–é›t?‰Lô`‰]…ÙR$sßb 9w>]Ï;ɸaÍà’sÀòœq§ ™6R¦LÛ-&T!^tÉ'ž5ùðt#‘måÉi{.wÿç@#ÝY ¯Òü·¿0¸³ôw0¾>¿¶@!îÑ.¨•1'w¤±%h×@À2„LFÇs %NMLÈŒÖ!và… +’­^¯ë*/YOi:¡{+3˜‚Œ/»¤UÆá#š/ª¨CŠÕ/•£³¶Ôñ¼/qˆ¹OxÀ»ðN–/c`v¸ì‘pÀ¡lVÒ¡ü}ô‘‘ÝÁ*{\tàï˜Ùx¾Ù„ =ùªìbKá`ï[xØ®Î_hõóoSôè\Ó4p YðD +šˆ^ìœdò¶Cûo 4ÖÒj2¢CôJ ¿\èO2~å¡î뽌¨0‘ Ê¢+ìÆ ):Qj¯LcA®¢ÃŸöA­]æê_kÞFCû#Ñnó>† µ¨ŠÌVjIoÚ]™ZR0òx¹~ Ç€0¿y°Ñ¬s ðb0¸÷À§ó1àŸüZ˜p@>eVCÇ‘4¡ÈÏø&¨3Ä¢Vh¬4²„Ha&(Œ\^G¤vÕ+0ÚâõflÜÓ (è»dRñFÊÈ•3CäßùÇû¤}Î IÕLT0°BDÅ>N –¡œ/à)6Rš3¾‹5R{O6ÄJtÜ$“‰úZk•Äþ TJé@8êR”§Œï×Ç&•½²kÊølÂû}†)(&€!aNç&Õó[ÎugKhÈb:™€îêÂ42Ò“6nâ-/"äwŽŒi»‹0é‹@ñ㪘k“‚LY)½û™Î``„“ ½æba3k¡C+NZ$O؈éE> `2æâö\ø|–×Oy»Þ;€Z‰ Ùq'ò™€.7©‹‘o0.üfh OÚ¸§à(l2;€„üuý'—w‚;ÀzÀ_þöS€Ä¿_cˆ¼¨Sõ§#È$³pîàAk¤!Ð L_·Ø5¯ã§2°e ß‚,òÞ”øÐŠd†Ça‹øHo¡09ßÛâtŸ¯õmâ‘2t*aÀ`ÅC<ƒºWƘK%eRX"IÇ|‘/{Êpžà-4ˆÍWëQúîC¶òQ¥‹áo>¨ÞkM%’ÑppøÌ°…/@àæ•K´nÒž@s& Ñ +”œ³°!¢Ù(K ’´—Q+O‡åT¾ +jರtêŒÒ!¦Ð‡€i‘á’ HKJø©;„nLB‚{Fp“’H‘ùˆ:P÷…Ãêˆi-9Ùœº¼UIZž±,½èL"dOÉ2\ü —eNjŒ¿â|á6ÖþS1„s pŠ÷×õ=€?œæo¸8σ¦iÑØ3Æg˜ùîš'ü9&–ÕªYiØ%$RXx{`H‚W¸ÑZØŽ³ÇÞ×ÒM›704}¥=ã®±YN;¦ž£€‡þÚ .ÐóGó¢Úáðh”„Á‹=0…›Ìn3Ñ3;€ñ)¬6Ì}±k¾›©©Y^JÜFsÆõïÒ×?l‡—âXô,è-¥¬"ß®ÎyƒT¦!þ';%™··Â$X™˜ê¾u¨ÉõŸ:“ã7-&0C¹éæg½ºÀÝù!ö€Òð'nÕÌ®à™ó;ÿðnYCs¦o.9øD¶iFKH챓—yøä‚š¡—@ +Ç_X¯€úÞT$%0-ÒDä>“(OzHZ؆(’„o`×ÊÂ;P>úMgHNƒœb ãïâÿ“#Úû²x•‘|ù)ÀBVü¹0wú"ÐzP ÐøjÓt,ë³L8 &LŠ©M‰Kâ¯<8ÇÿëÑ›*ŽH/­€U9ü0ü¡*ú¢!Vb†±´°¶x|*ŸkZÜ寓áÉpª6gä¸P)w §“#Ž•ñç¨]—¢'k`¤Ð4€®%F8–ß„q:Ô“8qÀΠãPøKÊÙ3ßBÚ‰‰¬âµ¬ü N•¹š$Ó#§4>í¸æ€©ì±Uc£CÓ(ª¹éµ•#ÑžàìjQ+÷”v9¥ [i#îC&Ö¹º•3S´B>J¥±‡žÙ0D˜}NÞÎì»±SÚ-¡ð¾%±‡K„¶ï(žÖK¯Š,R7´;Å|zƒ<Édc©‰‰ú¡ãÇo`O{XÑŸ—%T³Ê` wwð`ïŽÏ l"Bæš æ +ôD›ÿ9{ÝßåŽ,º°íb„Ðk"e±Éñ +&h¯ 0òjq«=O›W@DÒ9D6½.ƒ‘1d±¢¤dMB3yŸ¨eÈã¹÷¸[|ŽÖ  ÔHøÁ×3” ß™MoX,:7!`Á Ã%Vuc{\ŠÐ $bÚ‰AýÇëÉuõ½ PÑo@’eû”è„´C =1¬mI[†k¾ì+Eja ’³€o6éûˆc¢Ùáb +œžéèÔ?ÊIIßy3¯AT­ÂÞÄjJd!Á-±—žì»VȘ-Í|v"=\Yñåå}‹Ir–0fíTűÜw‹¨ Dé]`ýsbF$ÓÓ™Ssü˜ZÍÄBz #þP+¥.1:‘"Lêÿ°XÉý²x•9 L¸¿ÁÍ€?šüÐ[€0ˆ²j¡“EsŒ9¡Æ‚Ríî_½©›1‹»²úw0Aù*¬;† ídð¢1?ìÿŒš‡Äqa4#dÎ,Úª”S}ÖàÌ- êE£ºK‰93\øˆãF{\*$uO +t¤Aî8Á¯†(L°ÛùÁ}Þì â8rBb~,_Zd$šg©³³Y¤:# Ã6"À=ÕR•o™ûi³X£ '¯t¡¶ÈÓòunrvïA +¶ÒÒé2ô8†#‡Ö„„|ƒQ µá@uæcF% iš†SºIg8ä*À¦HCó0«Ð“ ºê3í¡V.ëS[I’Í>nÃ~0½ʳa« QÐ6n2«ä»õ‹’þ´YÚ+!ÄÌ™¢rÎtI„ó-„nù5ñÿú `I#?/* öר^ 9€ ;þ3Xðê3]ðTt"lÙ5À(OzÓŒõŠ›e~ L\¾ÂSµÐ¾”n’¡§\†ìmœ‚ŸWF¾¬Î ây°5àġÙÊ;±>¦FAr•d*SëÙPÎѱcY[%»ä’&Œ{Wˆ3¤–o—àìr‰?1î"-°¦¾M|$"ûq™{óF—²7äÅÀ1t³!ͨe‘1J¥³'Öw™…¢ëÍÔƒdì(5”û |T"Q.ÈHq`̧6"¦I„\BØYÊܾ5ÉÅËãÃÏÒ(mۼ˒ò3fÁªVs¦È§{–D¯¤\Y$ííñ×þƒì8>íD5f «f|àtŒ ¦KO̲dZF}‘ƒìl2¨Î×…w%ùÚœ·Vé1òâÛå¤éå‚8Ôøñ_€0Ÿ `¢?/‹¹š%9áþ‰í?~a`.¿ ¾&€F®e5¹~42qG‹Ðß7®m–©aæ³¶wï ‘È| œAëð_³Á„ÿX€Ru€EäËÈÄ‹"r¼"<œÛPÉ›’d";z2@¬@I8~Ѱ$|½àþ!j1f˜€ùµáôsî B `‡Z''ˆ»ÄÍð¨JSûJBW“Ц$]èªFJ'„JoÊa6é*­Îã‰8DüÀT9Li ‹ù÷"¦‘lgæ4ñ‘ªtâ¶•ÜÌJ‚.t .PVÄ B°|KF--#3zí^[Ú//µ "$ÊßqûåMS¦! Iä€g–èÃNVò~£©ìsfè]΀Ñj#Ƕ½õí²óu¢ØÆUˆÀ’Bã´aÔRÈ^.z±ôçå9ýRVóu vxØè‚ñâ¿ÄŠÿÓ `W³$ ï×ðí>üúÇ|àë3ÿìùûÍ  zÁ‡wµ|ÔÉ­U4©ªØ$åšRÍRõÿƒ¡C~ç½rÔ"ÐÈœˆÍ×а•ð‚4^ß +hý£€ê™)rŃ2F¼qC=Š/ v’fùÊoRôXmVÕsìþÉÿçA+åm0Ó0)è • k¿yÃó«¤]JÃ_ÛAN^&Yl Hİq8Hˆ¸Ü1âeô/³™tV0ag[üÕ`  $-U‚»®+-¹*±Ä¥·ÐEóôyy|zFÔÀÑœ›Â2ȯàš|ˆèÔ^aËK»)%•­#]0iÙÆ_ÎÆwã‘ÓL —…Èö£ø D›(I^?ÀA”WÚ* Ã™!OhÅâDÞÌÆ/=pÍ"ÀØÚŠÑÊ€V‹Á“@4“†G<ÜL[·~÷ü}°Ž•2¢UP/ðð$^¤ÛѶ>\it“Ôê,pK»{þÈpl&é38B Ò8”Öž1.%äÎHÉ‚;á·§vï[±—ôžVa²þ«©i߀G…¢"':ˆLüF?NÁ–e*Œf®v³_ç®eÛäíOf¡$ü÷ÖàbÚ*¢ú†á‡ÜlÓ ó¶b@sÆoÙþã¸*7:ˆ¡Z÷þú)ÍÈãÓŒ’f‘HË0fpì—þ®Q+`g’Ö(…ø¼;×áÂHÏpÑÀpÕ¦õ “ÛÝÝãÇ}øŒ®ñ‚„™&ÖêீàþÂîO‚reÀW/@NÕƒHžD̉V,‚DKÖ©èÆ :gfŒ1 À]y´Dˆ4 b½=\a0¦ƒTLó íc¨ !ÙŒ2¹îdܘӑ°$|Û*5ÑJÌðE7% M†|¾í`$ÚãQ8RàM¶®€Äã$PHÞ³°Å••1ý`ëÕÓGHachÈg1—j¥€òÆý%„m:Kd´ÄÈ!øÏdëôYþ1–È;g§‹$Ìñ;'CÏN**Gèúy–J4LaºfulO V¦ hßç Ž¨K r³Ë0ëÏ;?9«ÐW¸R‰$¡0tùâRØ«& é:Hsú\í¸™ªªÊvx´|’èL¸q‰sq€³!b9^ÇÂ7Eœ¯¢ õ09f`\ùë(ÿ’*£Æ?.$ºˆ¹ +YÀSy9ØY¸qnp÷?».=范°–=ë Êâ«é·Éä;Àñ:T&û¤X-pöWZ7fÖ´øJBHÑãQOO¿ê1Ù P‹Ç„SdfbcPÎèÚXÀìè–³*h1º£DäÈÉ‹-ÁÜ=«áL*å¿Mj“j–<Á”òXâ£ë ÄüÂ݃2t¹·ö¦¨ll+—£Åõ…±¬h ÁjSTÑ9¿Ô‹"_¶S8˾۠$áFH"8EŸg¼¢ C½ˆ} ˜¯‰ßŸY°½ÈÇ cú+q»Ý4§Ž$ ±è•4-Ûu™Œ#ÿ5þÎðé ¯úü—¸>x üÓ4Ðÿúuâ?hawÿf¸½@¬3Ø‹csL2E¶ùDB¡>%˜hÚÔ]¤‹dÏøÉ·8XdÔzLM +ìc* ˜†…°6½ãÞ‘ï_[|”«ƒõ'ƒêÊdŸÁe«í?´I–bðÀ1´‰ò‡¹ùÄ£˜ 2/H0Ÿ`Ž[?Ü&‰½bÅ„‹>MË"Nˆ«Ù2vDLɶxsP]âòM°Z}q `è'ùKfƒ ç ï™ØðWÀÇ€GÁ·/†!¡FÈ×DÌZZRßvÐöPôùYAøš Éž·Fî% +ÍYÞÓàZwEéJñC¼JG•ˆc¶£ñÞ*„È¡8µE‡CQˆ24i³n¬§=¯smÄiØM•Ý2 Õú Ñ×D0¤MîD_Ð-ž²Ç5spÓ0G¶ „M–ï6q[ídÖÁÃ;ÈòÃO—Ú°‡&-¹Ø³¤Ó”Ú¦Z±Š±m°hlaÒm3„f¹šË Ná“k"öÍèÕ Mlàý7Oeâò±QNý/É)é Ní®­ÚÒzò-™: mÛzkK1Ién1>ü—ø;S@£9 SÁÞ­Àï¿åÞô€o÷S€©)Nÿ|+"Ö@¥µ.®ÆºÀ‚JJ9ÁSX?ʈÂF⦲za +¬¾Te……NجÏ8V…zÚÅ ªÛÔÉ5Düˆ…´%P€¯ÿa#íŠeF‘=Ñ`ÁÂé% AÀñ)ÕS{J,*Ù7ÍßÌ5ü@z«Ðç(LÜyqPkH—¬„÷÷ïg¥ÝýPH›ähÏ?œNSþN=7mšÍªØ¢Í)S[ÔJ ò–ï·ÍË•‹{ªæiŸLƒäàÆQ ÐbšÓ¸SA$Ü•­@ÐyNwUlM#üc…J@qÎfZ†x3±È„Ëb…éàjUnk¸®¶J{ƒ_~ï`nÿ»êƒýqÀÞð À¾¸ìr“Àëu +Fº>Ô-¸bYì/a×ÅŽVJ–Ëà¯Í‰˜§t +§XÓËj¼Ë{YhŠ¢¿ƒT[N0²;˜‚,nš™gÝ<ÊÛ˜OXK +Äu(]pAW&PdÙ¦›OR<ª½Q#妘VVxdãb §áÊ2¸]œSôCŽÎIÐSTå4€‘4ŒíƶÎGï£\ˆG„¨„–«$o§îþi6O|ÊéÐk‘IR²” )%bÂĉ ù Ç +iʘëh…}l5 ”Íý £•AÛFÓ +m‘"Ó¬U\Ln‘ Õš¬’[…¥›ŽòÓëÿÁ`æ€c&pxN”÷#Àµà¿¯ÀzNØPÊáîint‚ÓÀ®Ù*c_¿†]P­*oo´¨èÌG}ah›™+§Ö§ŠSi1ô«Ï·Ý ôÕ+`­Ã(Öh6T½$AfJ…m¹H¤ŒaðAP´)!p´±ì¢ñ¨£„ÄÈ`a[X¾iÞ€U°@qÐÊÑk­ÊæN9+eŽ^$§>[A&€„…šU§N3Ùy+T“KX¥.Ò=öcµê *'*Qý6ã¢O”\"%ùc¬£Žô'Tmtäò¹µéÓŒ#[6rèuÈë+Ÿó6¡ +@iÁÁà‚qâ¿@ÂÿoÌF?»€ó“’ëQßL²øÊ™òyíÀ¡Xç€ÑŠ©=¸Ë“•2æcôYÎ qLGÏaÓ¨ñ¦„hÅ÷”\Ót›^›÷rué¶W,~¹vÒo Bqÿ¬‹&öð ü笎|š§¸P忆 »èÊX w¢ŒDK@XÜL«)69û…'€Xµ*Yœúžµ~³`¿Ä]øÍcP„‰šLòq™VG „“Árâs–ÊUÅJ›Jãè|Ânna‹K5lxÒ‰ò*ÒÓ¼×¥ +¼ã/R’\윶>ŠW+xT0„L-Â*SÞEDÄŒir’AàЪUð/@¯á +åèv²ƒöŠ€œ›Z¬•93b—fȪÕ@𼯇ÿspÎ6 áOüs à†Àg_÷Ì0/…zJ9 s6q +Ð6ô$•­J7e QHwcìR_1Â\p%³m.(¶}ˆ\t,i9«XNW,g±UvÇ|ù$eZ¨Ž–S,3-q–ym7ì¦1dtIS£ ·´z8`QÑÀ#œ¤ã‚š„@¸æ’G5´I²JÀ-€_ZªªsÞ}ï‡,Œˆ‘{°äî…OèljmÒX©Ã[ïÑt΃>cÂD?ÇxB<êsXu&™&Õèq«¼ãä¬pøe'€ñ9{kÿ»ã3èá„)Å5í™u™@¢iJ‰ ½14=r +¡ã[3¤½ø®J9’«Z¡Ž€kÙXPÞ(•B6|CF¢‹"ç´l õ‹SAÐ2w@Š‹¼8Ï.÷b0¿› ŠjCœ›ŠFþ‹ÄQ!°8§¥»áG«õ,q;å©¡’Ë‘ÜͯþKüÀþU4ü ñ/ppìˆÿœŠ˜| lÌo¨3güz'æŽ2¾àzâwÚ×øw{’Å„0aù¦k¤ƒúÙ;5‰ú +õ)8ê,‚_ù¿Ù[¤ðÔ[8h›wôsCÿˆ ô…*44Õ‚³°s€ãl²z˜¬è'=»àN©›Yò:»±—ˆ Ñ…d÷ÛÂ3ìùÊäEØs7ÛˆH ©“"IÕL*s„»óÑÄTVº¾³rw€¢hj˜ÓP¬ªub»‘N™»zÂÚH¹ª ÅÖÍ'O³ÐÅJjñ0ÂR¯yS§¨ +Ï7Ì¥»°Šô²9MzRÑ ÷‘(ZôÀÆæ4lfï*o/‚ö0åsô"ÖõãÇ…ÿhà#>Nf˜Ød8vE¯¨¢±BNÕÎñ¥,Žmù“ë˜(rìãa¤P3/vÌQ>˜Èµ†y·hBû†uc{…ºåÀÈNæ=!Å \‹Vî†Ð–„€Þµ€ã,–jHº‰ J`¸¦Áñ2p €+ø®Cáqc,ÿâüÝ»§óíór™Qýúí„ò‰Sá@ÜGºû¹ÓuFq&«Â +óY&h2¬-Vt®”óåœÓ9nŽÎÔ©5ÚGÿ”'æ¯çÕ¿º†Iqˆ XšüBŒ(›6v×9 ©¥t´ ã€Gœ(vš"rSè‹—;€÷Ø;¢0 âf4¼‚´¿ëEÊçèåG7þ+ü¯O´k*ðšŸöé“À÷î¬Ç#€wwÜödî­úa;hf_ìúŽºyÝﯭŸ°µ†¼[µb2˜$jæ°i3Sy”e§¹—Í_ÀnÛ,Š ehl®SpÏÀF³E…WÉÇCºþÄ`?ÏÀÇÊ©õ]‡j Ô¿øëvƒr +9iGÐÜûU:Óç*$ð¦ô +%æÇù³}xØ{réï’a·û\B`!o˜å6¦~©Ýèðž €Îù›wÕÊ­ê¹"`ÝDô–Æ_ùÒŠ9®Ï¶êÁJ˜®¹Ý5Œ¤J†5è&Dˆœ>«ˆ#@Ü §&Q½:£ñkp§tM1ɞėï>:Ž&%•ô=B!Ì_íÉ[Œÿ°¢Ýë‘âÄòOœ›=vß~ø ÀQ‹÷³@¹ºÚÚ8ç3þÔè “–…¡j°rÒ)ç8} +¼8Â$çAc(§¬h¡°ž†{™ÿ6Á+;€è…~º>ÃU]¨_=™V®€±…qôÖ£ºL 1ë³fvó÷ó‹ÙÇ„~B“V×Jõ2¤û/Ô7”±ù]œ‘™]§ðذ¸3§‰ƒÀ8 +wÉÖ@+L{ðٽʒxÇJ ['€4‹i¢@…®Fk:»‹©œið¥Qk —òMŽìuPµtÃ1Ðe0âøfÊÈuýºˆœ%"Ù[½·wtcט;ÒìgbKеþß=ø€‰üàH b¼+=™½x~¾ypÚhèXájy¿)Òlw±ÈÏŒ|LŸÛÞê’yÃ0®58YÓ*ƒÚÓ¬¨Ÿ¶G ©3d'óžìû-[Í7Á…ÑhÎè×£p6šmšÕÑ@Y;€¸NÜ5 Þܼÿ2x pwþ toïßÕ¾±°ç5)œqןş@¦ïtdïÉ¥ÿ™ƒ .¾qàóšÙ’Lþ`ÝÑ0üå†>Lj ­¨¥Q“Œ!鬑vá÷ƒïÆquo²g°”ƒC嘜€’LÅ"bJõæ3 ùNEµZÔ3ˆPa€ý½¨Å¿š”öÔÃqâÿŒú›Óœû?¤àØd8Çÿ«Ÿ`ùÙäb©2;€ ©ƒÔ1Ñ`¤ù«ñ¤rÇiÙö–ú&}ƒ뽈V¡°¼<µ7ü^r,D¯=`çq.àª.ÖOy¬ŒWá-÷?Û˜ÀLS #ì„%çÀM,gJMqîàâ˜08ûeígâ™9Ñu +jE¶–ÆQ¸K–x‡aD?ïre¥äƒy¶ÐÔ£ša„ĉ1 VÊZ9?²Ì•€_šòQçrñ@ˆmÝÔ¦ºaïuE…7vN¯?P»p}kÀlÝ®³Y{Çd¦Ô‘ ÑNƒl/ž@0©`üø/ð÷4â$Ïÿý`àÔ Ž@ª>Ƥ@Ë7;ÏbÎZ 4Xå] åÁ;KaMbe#|‚’Ë%>ÁÑÔ*,š–e'_SHq†m,›Ö[¸}ˆ—‚½$u}whΉ¼U~ïrׄó¼ö 9£¤þÅ/Ì0$ʩߴ`À¼/vÊËe¼ì@:`Prd#Àc\×A|94¤¹XÈ~u@ð8øabŸÐ)œò®Zñ„Ä jíOÔŸán²VÌféˆru9°ÒL,éYÝi3’*šk5"üÅ`)ÇL@)ð`žD5ð  ‘žÒ·žŸ¤qznÁô*8¨|òÕ‹úWG¯#yŇÿ?:ƒs¢ˆóÀÙIEND®B`‚#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables +uniform vec2 resolution = vec2(800, 450); + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture2D(texture0, fragTexCoord); + + // NOTE: Implement here your fragment shader code + + gl_FragColor = texelColor*colDiffuse; +}#version 100 + +// Input vertex attributes +attribute vec3 vertexPosition; +attribute vec2 vertexTexCoord; +attribute vec3 vertexNormal; +attribute vec4 vertexColor; + +// Input uniform values +uniform mat4 mvp; + +// Output vertex attributes (to fragment shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// NOTE: Add here your custom variables + +void main() +{ + // Send vertex attributes to fragment shader + fragTexCoord = vertexTexCoord; + fragColor = vertexColor; + + // Calculate final vertex position + gl_Position = mvp*vec4(vertexPosition, 1.0); +}#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +const vec2 size = vec2(800, 450); // render size +const float samples = 5.0; // pixels per axis; higher = bigger glow, worse performance +const float quality = 2.5; // lower = smaller glow, better quality + +void main() +{ + vec4 sum = vec4(0); + vec2 sizeFactor = vec2(1)/size*quality; + + // Texel color fetching from texture sampler + vec4 source = texture2D(texture0, fragTexCoord); + + const int range = 2; // should be = (samples - 1)/2; + + for (int x = -range; x <= range; x++) + { + for (int y = -range; y <= range; y++) + { + sum += texture2D(texture0, fragTexCoord + vec2(x, y)*sizeFactor); + } + } + + // Calculate final fragment color + gl_FragColor = ((sum/(samples*samples)) + source)*colDiffuse; +}#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +// NOTE: Render size values must be passed from code +const float renderWidth = 800.0; +const float renderHeight = 450.0; + +vec3 offset = vec3(0.0, 1.3846153846, 3.2307692308); +vec3 weight = vec3(0.2270270270, 0.3162162162, 0.0702702703); + +void main() +{ + // Texel color fetching from texture sampler + vec3 tc = texture2D(texture0, fragTexCoord).rgb*weight.x; + + tc += texture2D(texture0, fragTexCoord + vec2(offset.y)/renderWidth, 0.0).rgb*weight.y; + tc += texture2D(texture0, fragTexCoord - vec2(offset.y)/renderWidth, 0.0).rgb*weight.y; + + tc += texture2D(texture0, fragTexCoord + vec2(offset.z)/renderWidth, 0.0).rgb*weight.z; + tc += texture2D(texture0, fragTexCoord - vec2(offset.z)/renderWidth, 0.0).rgb*weight.z; + + gl_FragColor = vec4(tc, 1.0); +}# version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +float hatchOffsetY = 5.0; +float lumThreshold01 = 0.9; +float lumThreshold02 = 0.7; +float lumThreshold03 = 0.5; +float lumThreshold04 = 0.3; + +void main() +{ + vec3 tc = vec3(1.0, 1.0, 1.0); + float lum = length(texture2D(texture0, fragTexCoord).rgb); + + if (lum < lumThreshold01) + { + if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + if (lum < lumThreshold02) + { + if (mod(gl_FragCoord .x - gl_FragCoord .y, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + if (lum < lumThreshold03) + { + if (mod(gl_FragCoord .x + gl_FragCoord .y - hatchOffsetY, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + if (lum < lumThreshold04) + { + if (mod(gl_FragCoord .x - gl_FragCoord .y - hatchOffsetY, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + gl_FragColor = vec4(tc, 1.0); +}# version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +// NOTE: Render size values must be passed from code +const float renderWidth = 800.0; +const float renderHeight = 450.0; + +float stitchingSize = 6.0; +int invert = 0; + +vec4 PostFX(sampler2D tex, vec2 uv) +{ + vec4 c = vec4(0.0); + float size = stitchingSize; + vec2 cPos = uv * vec2(renderWidth, renderHeight); + vec2 tlPos = floor(cPos / vec2(size, size)); + tlPos *= size; + + int remX = int(mod(cPos.x, size)); + int remY = int(mod(cPos.y, size)); + + if (remX == 0 && remY == 0) tlPos = cPos; + + vec2 blPos = tlPos; + blPos.y += (size - 1.0); + + if ((remX == remY) || (((int(cPos.x) - int(blPos.x)) == (int(blPos.y) - int(cPos.y))))) + { + if (invert == 1) c = vec4(0.2, 0.15, 0.05, 1.0); + else c = texture2D(tex, tlPos * vec2(1.0/renderWidth, 1.0/renderHeight)) * 1.4; + } + else + { + if (invert == 1) c = texture2D(tex, tlPos * vec2(1.0/renderWidth, 1.0/renderHeight)) * 1.4; + else c = vec4(0.0, 0.0, 0.0, 1.0); + } + + return c; +} + +void main() +{ + vec3 tc = PostFX(texture0, fragTexCoord).rgb; + + gl_FragColor = vec4(tc, 1.0); +}#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; + +// Input uniform values +uniform sampler2D texture0; + +// NOTE: Default parameters for Oculus Rift DK2 device +const vec2 LeftLensCenter = vec2(0.2863248, 0.5); +const vec2 RightLensCenter = vec2(0.7136753, 0.5); +const vec2 LeftScreenCenter = vec2(0.25, 0.5); +const vec2 RightScreenCenter = vec2(0.75, 0.5); +const vec2 Scale = vec2(0.25, 0.45); +const vec2 ScaleIn = vec2(4.0, 2.5); +const vec4 HmdWarpParam = vec4(1.0, 0.22, 0.24, 0.0); +const vec4 ChromaAbParam = vec4(0.996, -0.004, 1.014, 0.0); + +void main() +{ + // The following two variables need to be set per eye + vec2 LensCenter = fragTexCoord.x < 0.5 ? LeftLensCenter : RightLensCenter; + vec2 ScreenCenter = fragTexCoord.x < 0.5 ? LeftScreenCenter : RightScreenCenter; + + // Scales input texture coordinates for distortion: vec2 HmdWarp(vec2 fragTexCoord, vec2 LensCenter) + vec2 theta = (fragTexCoord - LensCenter)*ScaleIn; // Scales to [-1, 1] + float rSq = theta.x*theta.x + theta.y*theta.y; + vec2 theta1 = theta*(HmdWarpParam.x + HmdWarpParam.y*rSq + HmdWarpParam.z*rSq*rSq + HmdWarpParam.w*rSq*rSq*rSq); + //vec2 tc = LensCenter + Scale*theta1; + + // Detect whether blue texture coordinates are out of range since these will scaled out the furthest + vec2 thetaBlue = theta1*(ChromaAbParam.z + ChromaAbParam.w*rSq); + vec2 tcBlue = LensCenter + Scale*thetaBlue; + + if (any(bvec2(clamp(tcBlue, ScreenCenter - vec2(0.25, 0.5), ScreenCenter + vec2(0.25, 0.5)) - tcBlue))) gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + else + { + // Do blue texture lookup + float blue = texture2D(texture0, tcBlue).b; + + // Do green lookup (no scaling) + vec2 tcGreen = LensCenter + Scale*theta1; + float green = texture2D(texture0, tcGreen).g; + + // Do red scale and lookup + vec2 thetaRed = theta1*(ChromaAbParam.x + ChromaAbParam.y*rSq); + vec2 tcRed = LensCenter + Scale*thetaRed; + float red = texture2D(texture0, tcRed).r; + + gl_FragColor = vec4(red, green, blue, 1.0); + } +} +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +void main() +{ + vec4 color = texture2D(texture0, fragTexCoord); + + color += texture2D(texture0, fragTexCoord + 0.001); + color += texture2D(texture0, fragTexCoord + 0.003); + color += texture2D(texture0, fragTexCoord + 0.005); + color += texture2D(texture0, fragTexCoord + 0.007); + color += texture2D(texture0, fragTexCoord + 0.009); + color += texture2D(texture0, fragTexCoord + 0.011); + + color += texture2D(texture0, fragTexCoord - 0.001); + color += texture2D(texture0, fragTexCoord - 0.003); + color += texture2D(texture0, fragTexCoord - 0.005); + color += texture2D(texture0, fragTexCoord - 0.007); + color += texture2D(texture0, fragTexCoord - 0.009); + color += texture2D(texture0, fragTexCoord - 0.011); + + color.rgb = vec3((color.r + color.g + color.b)/3.0); + color = color/9.5; + + gl_FragColor = color; +} #version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +const float PI = 3.1415926535; + +void main() +{ + float aperture = 178.0; + float apertureHalf = 0.5 * aperture * (PI / 180.0); + float maxFactor = sin(apertureHalf); + + vec2 uv = vec2(0.0); + vec2 xy = 2.0 * fragTexCoord.xy - 1.0; + float d = length(xy); + + if (d < (2.0 - maxFactor)) + { + d = length(xy * maxFactor); + float z = sqrt(1.0 - d * d); + float r = atan(d, z) / PI; + float phi = atan(xy.y, xy.x); + + uv.x = r * cos(phi) + 0.5; + uv.y = r * sin(phi) + 0.5; + } + else + { + uv = fragTexCoord.xy; + } + + gl_FragColor = texture2D(texture0, uv); +}#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture2D(texture0, fragTexCoord)*colDiffuse*fragColor; + + // Convert texel color to grayscale using NTSC conversion weights + float gray = dot(texelColor.rgb, vec3(0.299, 0.587, 0.114)); + + // Calculate final fragment color + gl_FragColor = vec4(gray, gray, gray, texelColor.a); +}#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +// NOTE: Render size values must be passed from code +const float renderWidth = 800.0; +const float renderHeight = 450.0; + +float pixelWidth = 5.0; +float pixelHeight = 5.0; + +void main() +{ + float dx = pixelWidth*(1.0/renderWidth); + float dy = pixelHeight*(1.0/renderHeight); + + vec2 coord = vec2(dx*floor(fragTexCoord.x/dx), dy*floor(fragTexCoord.y/dy)); + + vec3 tc = texture2D(texture0, coord).rgb; + + gl_FragColor = vec4(tc, 1.0); +}#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +float gamma = 0.6; +float numColors = 8.0; + +void main() +{ + vec3 color = texture2D(texture0, fragTexCoord.xy).rgb; + + color = pow(color, vec3(gamma, gamma, gamma)); + color = color*numColors; + color = floor(color); + color = color/numColors; + color = pow(color, vec3(1.0/gamma)); + + gl_FragColor = vec4(color, 1.0); +}#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +void main() +{ + vec3 color = texture2D(texture0, fragTexCoord).rgb; + vec3 colors[3]; + colors[0] = vec3(0.0, 0.0, 1.0); + colors[1] = vec3(1.0, 1.0, 0.0); + colors[2] = vec3(1.0, 0.0, 0.0); + + float lum = (color.r + color.g + color.b)/3.0; + + vec3 tc = vec3(0.0, 0.0, 0.0); + + if (lum < 0.5) tc = mix(colors[0], colors[1], lum/0.5); + else tc = mix(colors[1], colors[2], (lum - 0.5)/0.5); + + gl_FragColor = vec4(tc, 1.0); +}#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +float offset = 0.0; +float frequency = 450.0/3.0; + +uniform float time; + +void main() +{ +/* + // Scanlines method 1 + float tval = 0; //time + vec2 uv = 0.5 + (fragTexCoord - 0.5)*(0.9 + 0.01*sin(0.5*tval)); + + vec4 color = texture2D(texture0, fragTexCoord); + + color = clamp(color*0.5 + 0.5*color*color*1.2, 0.0, 1.0); + color *= 0.5 + 0.5*16.0*uv.x*uv.y*(1.0 - uv.x)*(1.0 - uv.y); + color *= vec4(0.8, 1.0, 0.7, 1); + color *= 0.9 + 0.1*sin(10.0*tval + uv.y*1000.0); + color *= 0.97 + 0.03*sin(110.0*tval); + + fragColor = color; +*/ + // Scanlines method 2 + float globalPos = (fragTexCoord.y + offset) * frequency; + float wavePos = cos((fract(globalPos) - 0.5)*3.14); + + vec4 color = texture2D(texture0, fragTexCoord); + + gl_FragColor = mix(vec4(0.0, 0.3, 0.0, 0.0), color, wavePos); +}#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables +vec2 resolution = vec2(800.0, 450.0); + +void main() +{ + float x = 1.0/resolution.x; + float y = 1.0/resolution.y; + + vec4 horizEdge = vec4(0.0); + horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0; + horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y ))*2.0; + horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0; + horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0; + horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y ))*2.0; + horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0; + + vec4 vertEdge = vec4(0.0); + vertEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0; + vertEdge -= texture2D(texture0, vec2(fragTexCoord.x , fragTexCoord.y - y))*2.0; + vertEdge -= texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0; + vertEdge += texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0; + vertEdge += texture2D(texture0, vec2(fragTexCoord.x , fragTexCoord.y + y))*2.0; + vertEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0; + + vec3 edge = sqrt((horizEdge.rgb*horizEdge.rgb) + (vertEdge.rgb*vertEdge.rgb)); + + gl_FragColor = vec4(edge, texture2D(texture0, fragTexCoord).a); +}#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Custom variables +#define PI 3.14159265358979323846 +uniform float uTime = 0.0; + +float divisions = 5.0; +float angle = 0.0; + +vec2 VectorRotateTime(vec2 v, float speed) +{ + float time = uTime*speed; + float localTime = fract(time); // The time domain this works on is 1 sec. + + if ((localTime >= 0.0) && (localTime < 0.25)) angle = 0.0; + else if ((localTime >= 0.25) && (localTime < 0.50)) angle = PI/4*sin(2*PI*localTime - PI/2); + else if ((localTime >= 0.50) && (localTime < 0.75)) angle = PI*0.25; + else if ((localTime >= 0.75) && (localTime < 1.00)) angle = PI/4*sin(2*PI*localTime); + + // Rotate vector by angle + v -= 0.5; + v = mat2(cos(angle), -sin(angle), sin(angle), cos(angle))*v; + v += 0.5; + + return v; +} + +float Rectangle(in vec2 st, in float size, in float fill) +{ + float roundSize = 0.5 - size/2.0; + float left = step(roundSize, st.x); + float top = step(roundSize, st.y); + float bottom = step(roundSize, 1.0 - st.y); + float right = step(roundSize, 1.0 - st.x); + + return (left*bottom*right*top)*fill; +} + +void main() +{ + vec2 fragPos = fragTexCoord; + fragPos.xy += uTime/9.0; + + fragPos *= divisions; + vec2 ipos = floor(fragPos); // Get the integer coords + vec2 fpos = fract(fragPos); // Get the fractional coords + + fpos = VectorRotateTime(fpos, 0.2); + + float alpha = Rectangle(fpos, 0.216, 1.0); + vec3 color = vec3(0.3, 0.3, 0.3); + + gl_FragColor = vec4(color, alpha); +}#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; // Depth texture +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +void main() +{ + float zNear = 0.01; // camera z near + float zFar = 10.0; // camera z far + float z = texture2D(texture0, fragTexCoord).x; + + // Linearize depth value + float depth = (2.0*zNear)/(zFar + zNear - z*(zFar - zNear)); + + // Calculate final fragment color + gl_FragColor = vec4(depth, depth, depth, 1.0f); +}#version 100 + +precision mediump float; + +/************************************************************************************* + + The Sieve of Eratosthenes -- a simple shader by ProfJski + An early prime number sieve: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes + + The screen is divided into a square grid of boxes, each representing an integer value. + Each integer is tested to see if it is a prime number. Primes are colored white. + Non-primes are colored with a color that indicates the smallest factor which evenly divdes our integer. + + You can change the scale variable to make a larger or smaller grid. + Total number of integers displayed = scale squared, so scale = 100 tests the first 10,000 integers. + + WARNING: If you make scale too large, your GPU may bog down! + +***************************************************************************************/ + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Make a nice spectrum of colors based on counter and maxSize +vec4 Colorizer(float counter, float maxSize) +{ + float red = 0.0, green = 0.0, blue = 0.0; + float normsize = counter/maxSize; + + red = smoothstep(0.3, 0.7, normsize); + green = sin(3.14159*normsize); + blue = 1.0 - smoothstep(0.0, 0.4, normsize); + + return vec4(0.8*red, 0.8*green, 0.8*blue, 1.0); +} + +void main() +{ + vec4 color = vec4(1.0); + float scale = 1000.0; // Makes 100x100 square grid. Change this variable to make a smaller or larger grid. + int value = int(scale*floor(fragTexCoord.y*scale) + floor(fragTexCoord.x*scale)); // Group pixels into boxes representing integer values + + if ((value == 0) || (value == 1) || (value == 2)) gl_FragColor = vec4(1.0); + else + { + for (int i = 2; (i < max(2, sqrt(value) + 1)); i++) + { + if ((value - i*floor(value/i)) == 0) + { + color = Colorizer(float(i), scale); + //break; // Uncomment to color by the largest factor instead + } + } + + gl_FragColor = color; + } +} +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +uniform vec2 screenDims; // Dimensions of the screen +uniform vec2 c; // c.x = real, c.y = imaginary component. Equation done is z^2 + c +uniform vec2 offset; // Offset of the scale. +uniform float zoom; // Zoom of the scale. + +const int MAX_ITERATIONS = 255; // Max iterations to do. + +// Square a complex number +vec2 ComplexSquare(vec2 z) +{ + return vec2( + z.x * z.x - z.y * z.y, + z.x * z.y * 2.0 + ); +} + +// Convert Hue Saturation Value (HSV) color into RGB +vec3 Hsv2rgb(vec3 c) +{ + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + + +void main() +{ + /********************************************************************************************** + Julia sets use a function z^2 + c, where c is a constant. + This function is iterated until the nature of the point is determined. + + If the magnitude of the number becomes greater than 2, then from that point onward + the number will get bigger and bigger, and will never get smaller (tends towards infinity). + 2^2 = 4, 4^2 = 8 and so on. + So at 2 we stop iterating. + + If the number is below 2, we keep iterating. + But when do we stop iterating if the number is always below 2 (it converges)? + That is what MAX_ITERATIONS is for. + Then we can divide the iterations by the MAX_ITERATIONS value to get a normalized value that we can + then map to a color. + + We use dot product (z.x * z.x + z.y * z.y) to determine the magnitude (length) squared. + And once the magnitude squared is > 4, then magnitude > 2 is also true (saves computational power). + *************************************************************************************************/ + + // The pixel coordinates are scaled so they are on the mandelbrot scale + // NOTE: fragTexCoord already comes as normalized screen coordinates but offset must be normalized before scaling and zoom + vec2 z = vec2((fragTexCoord.x + offset.x/screenDims.x)*2.5/zoom, (fragTexCoord.y + offset.y/screenDims.y)*1.5/zoom); + + int iterations = 0; + for (iterations = 0; iterations < MAX_ITERATIONS; iterations++) + { + z = ComplexSquare(z) + c; // Iterate function + + if (dot(z, z) > 4.0) break; + } + + // Another few iterations decreases errors in the smoothing calculation. + // See http://linas.org/art-gallery/escape/escape.html for more information. + z = ComplexSquare(z) + c; + z = ComplexSquare(z) + c; + + // This last part smooths the color (again see link above). + float smoothVal = float(iterations) + 1.0 - (log(log(length(z)))/log(2.0)); + + // Normalize the value so it is between 0 and 1. + float norm = smoothVal/float(MAX_ITERATIONS); + + // If in set, color black. 0.999 allows for some float accuracy error. + if (norm > 0.999) gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + else gl_FragColor = vec4(Hsv2rgb(vec3(norm, 1.0, 1.0)), 1.0); +} +#version 100 + +precision mediump float; + +const int colors = 8; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform ivec3 palette[colors]; + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture2D(texture0, fragTexCoord) * fragColor; + + // Convert the (normalized) texel color RED component (GB would work, too) + // to the palette index by scaling up from [0, 1] to [0, 255]. + int index = int(texelColor.r * 255.0); + ivec3 color = palette[index]; + + // Calculate final fragment color. Note that the palette color components + // are defined in the range [0, 255] and need to be normalized to [0, 1] + // for OpenGL to work. + gl_FragColor = vec4(color / 255.0, texelColor.a); +} +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +uniform vec3 viewEye; +uniform vec3 viewCenter; +uniform vec3 viewUp; +uniform float deltaTime; +uniform float runTime; +uniform vec2 resolution; + +// The MIT License +// Copyright © 2013 Inigo Quilez +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +// A list of useful distance function to simple primitives, and an example on how to +// do some interesting boolean operations, repetition and displacement. +// +// More info here: http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm + +#define AA 1 // make this 1 is your machine is too slow + +//------------------------------------------------------------------ + +float sdPlane( vec3 p ) +{ + return p.y; +} + +float sdSphere( vec3 p, float s ) +{ + return length(p)-s; +} + +float sdBox( vec3 p, vec3 b ) +{ + vec3 d = abs(p) - b; + return min(max(d.x,max(d.y,d.z)),0.0) + length(max(d,0.0)); +} + +float sdEllipsoid( in vec3 p, in vec3 r ) +{ + return (length( p/r ) - 1.0) * min(min(r.x,r.y),r.z); +} + +float udRoundBox( vec3 p, vec3 b, float r ) +{ + return length(max(abs(p)-b,0.0))-r; +} + +float sdTorus( vec3 p, vec2 t ) +{ + return length( vec2(length(p.xz)-t.x,p.y) )-t.y; +} + +float sdHexPrism( vec3 p, vec2 h ) +{ + vec3 q = abs(p); +#if 0 + return max(q.z-h.y,max((q.x*0.866025+q.y*0.5),q.y)-h.x); +#else + float d1 = q.z-h.y; + float d2 = max((q.x*0.866025+q.y*0.5),q.y)-h.x; + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +#endif +} + +float sdCapsule( vec3 p, vec3 a, vec3 b, float r ) +{ + vec3 pa = p-a, ba = b-a; + float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 ); + return length( pa - ba*h ) - r; +} + +float sdEquilateralTriangle( in vec2 p ) +{ + const float k = sqrt(3.0); + p.x = abs(p.x) - 1.0; + p.y = p.y + 1.0/k; + if( p.x + k*p.y > 0.0 ) p = vec2( p.x - k*p.y, -k*p.x - p.y )/2.0; + p.x += 2.0 - 2.0*clamp( (p.x+2.0)/2.0, 0.0, 1.0 ); + return -length(p)*sign(p.y); +} + +float sdTriPrism( vec3 p, vec2 h ) +{ + vec3 q = abs(p); + float d1 = q.z-h.y; +#if 1 + // distance bound + float d2 = max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5; +#else + // correct distance + h.x *= 0.866025; + float d2 = sdEquilateralTriangle(p.xy/h.x)*h.x; +#endif + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +} + +float sdCylinder( vec3 p, vec2 h ) +{ + vec2 d = abs(vec2(length(p.xz),p.y)) - h; + return min(max(d.x,d.y),0.0) + length(max(d,0.0)); +} + +float sdCone( in vec3 p, in vec3 c ) +{ + vec2 q = vec2( length(p.xz), p.y ); + float d1 = -q.y-c.z; + float d2 = max( dot(q,c.xy), q.y); + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +} + +float sdConeSection( in vec3 p, in float h, in float r1, in float r2 ) +{ + float d1 = -p.y - h; + float q = p.y - h; + float si = 0.5*(r1-r2)/h; + float d2 = max( sqrt( dot(p.xz,p.xz)*(1.0-si*si)) + q*si - r2, q ); + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +} + +float sdPryamid4(vec3 p, vec3 h ) // h = { cos a, sin a, height } +{ + // Tetrahedron = Octahedron - Cube + float box = sdBox( p - vec3(0,-2.0*h.z,0), vec3(2.0*h.z) ); + + float d = 0.0; + d = max( d, abs( dot(p, vec3( -h.x, h.y, 0 )) )); + d = max( d, abs( dot(p, vec3( h.x, h.y, 0 )) )); + d = max( d, abs( dot(p, vec3( 0, h.y, h.x )) )); + d = max( d, abs( dot(p, vec3( 0, h.y,-h.x )) )); + float octa = d - h.z; + return max(-box,octa); // Subtraction + } + +float length2( vec2 p ) +{ + return sqrt( p.x*p.x + p.y*p.y ); +} + +float length6( vec2 p ) +{ + p = p*p*p; p = p*p; + return pow( p.x + p.y, 1.0/6.0 ); +} + +float length8( vec2 p ) +{ + p = p*p; p = p*p; p = p*p; + return pow( p.x + p.y, 1.0/8.0 ); +} + +float sdTorus82( vec3 p, vec2 t ) +{ + vec2 q = vec2(length2(p.xz)-t.x,p.y); + return length8(q)-t.y; +} + +float sdTorus88( vec3 p, vec2 t ) +{ + vec2 q = vec2(length8(p.xz)-t.x,p.y); + return length8(q)-t.y; +} + +float sdCylinder6( vec3 p, vec2 h ) +{ + return max( length6(p.xz)-h.x, abs(p.y)-h.y ); +} + +//------------------------------------------------------------------ + +float opS( float d1, float d2 ) +{ + return max(-d2,d1); +} + +vec2 opU( vec2 d1, vec2 d2 ) +{ + return (d1.x0.0 ) tmax = min( tmax, tp1 ); + float tp2 = (1.6-ro.y)/rd.y; if( tp2>0.0 ) { if( ro.y>1.6 ) tmin = max( tmin, tp2 ); + else tmax = min( tmax, tp2 ); } +#endif + + float t = tmin; + float m = -1.0; + for( int i=0; i<64; i++ ) + { + float precis = 0.0005*t; + vec2 res = map( ro+rd*t ); + if( res.xtmax ) break; + t += res.x; + m = res.y; + } + + if( t>tmax ) m=-1.0; + return vec2( t, m ); +} + + +float calcSoftshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax ) +{ + float res = 1.0; + float t = mint; + for( int i=0; i<16; i++ ) + { + float h = map( ro + rd*t ).x; + res = min( res, 8.0*h/t ); + t += clamp( h, 0.02, 0.10 ); + if( h<0.001 || t>tmax ) break; + } + return clamp( res, 0.0, 1.0 ); +} + +vec3 calcNormal( in vec3 pos ) +{ + vec2 e = vec2(1.0,-1.0)*0.5773*0.0005; + return normalize( e.xyy*map( pos + e.xyy ).x + + e.yyx*map( pos + e.yyx ).x + + e.yxy*map( pos + e.yxy ).x + + e.xxx*map( pos + e.xxx ).x ); + /* + vec3 eps = vec3( 0.0005, 0.0, 0.0 ); + vec3 nor = vec3( + map(pos+eps.xyy).x - map(pos-eps.xyy).x, + map(pos+eps.yxy).x - map(pos-eps.yxy).x, + map(pos+eps.yyx).x - map(pos-eps.yyx).x ); + return normalize(nor); + */ +} + +float calcAO( in vec3 pos, in vec3 nor ) +{ + float occ = 0.0; + float sca = 1.0; + for( int i=0; i<5; i++ ) + { + float hr = 0.01 + 0.12*float(i)/4.0; + vec3 aopos = nor * hr + pos; + float dd = map( aopos ).x; + occ += -(dd-hr)*sca; + sca *= 0.95; + } + return clamp( 1.0 - 3.0*occ, 0.0, 1.0 ); +} + +// http://iquilezles.org/www/articles/checkerfiltering/checkerfiltering.htm +float checkersGradBox( in vec2 p ) +{ + // filter kernel + vec2 w = fwidth(p) + 0.001; + // analytical integral (box filter) + vec2 i = 2.0*(abs(fract((p-0.5*w)*0.5)-0.5)-abs(fract((p+0.5*w)*0.5)-0.5))/w; + // xor pattern + return 0.5 - 0.5*i.x*i.y; +} + +vec3 render( in vec3 ro, in vec3 rd ) +{ + vec3 col = vec3(0.7, 0.9, 1.0) +rd.y*0.8; + vec2 res = castRay(ro,rd); + float t = res.x; + float m = res.y; + if( m>-0.5 ) + { + vec3 pos = ro + t*rd; + vec3 nor = calcNormal( pos ); + vec3 ref = reflect( rd, nor ); + + // material + col = 0.45 + 0.35*sin( vec3(0.05,0.08,0.10)*(m-1.0) ); + if( m<1.5 ) + { + + float f = checkersGradBox( 5.0*pos.xz ); + col = 0.3 + f*vec3(0.1); + } + + // lighting + float occ = calcAO( pos, nor ); + vec3 lig = normalize( vec3(cos(-0.4 * runTime), sin(0.7 * runTime), -0.6) ); + vec3 hal = normalize( lig-rd ); + float amb = clamp( 0.5+0.5*nor.y, 0.0, 1.0 ); + float dif = clamp( dot( nor, lig ), 0.0, 1.0 ); + float bac = clamp( dot( nor, normalize(vec3(-lig.x,0.0,-lig.z))), 0.0, 1.0 )*clamp( 1.0-pos.y,0.0,1.0); + float dom = smoothstep( -0.1, 0.1, ref.y ); + float fre = pow( clamp(1.0+dot(nor,rd),0.0,1.0), 2.0 ); + + dif *= calcSoftshadow( pos, lig, 0.02, 2.5 ); + dom *= calcSoftshadow( pos, ref, 0.02, 2.5 ); + + float spe = pow( clamp( dot( nor, hal ), 0.0, 1.0 ),16.0)* + dif * + (0.04 + 0.96*pow( clamp(1.0+dot(hal,rd),0.0,1.0), 5.0 )); + + vec3 lin = vec3(0.0); + lin += 1.30*dif*vec3(1.00,0.80,0.55); + lin += 0.40*amb*vec3(0.40,0.60,1.00)*occ; + lin += 0.50*dom*vec3(0.40,0.60,1.00)*occ; + lin += 0.50*bac*vec3(0.25,0.25,0.25)*occ; + lin += 0.25*fre*vec3(1.00,1.00,1.00)*occ; + col = col*lin; + col += 10.00*spe*vec3(1.00,0.90,0.70); + + col = mix( col, vec3(0.8,0.9,1.0), 1.0-exp( -0.0002*t*t*t ) ); + } + + return vec3( clamp(col,0.0,1.0) ); +} + +mat3 setCamera( in vec3 ro, in vec3 ta, float cr ) +{ + vec3 cw = normalize(ta-ro); + vec3 cp = vec3(sin(cr), cos(cr),0.0); + vec3 cu = normalize( cross(cw,cp) ); + vec3 cv = normalize( cross(cu,cw) ); + return mat3( cu, cv, cw ); +} + +void main() +{ + vec3 tot = vec3(0.0); +#if AA>1 + for( int m=0; m1 + } + tot /= float(AA*AA); +#endif + + gl_FragColor = vec4( tot, 1.0 ); +}#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +// NOTE: Render size values should be passed from code +const float renderWidth = 800.0; +const float renderHeight = 450.0; + +float radius = 250.0; +float angle = 0.8; + +uniform vec2 center; + +void main() +{ + vec2 texSize = vec2(renderWidth, renderHeight); + vec2 tc = fragTexCoord*texSize; + tc -= center; + + float dist = length(tc); + + if (dist < radius) + { + float percent = (radius - dist)/radius; + float theta = percent*percent*angle*8.0; + float s = sin(theta); + float c = cos(theta); + + tc = vec2(dot(tc, vec2(c, -s)), dot(tc, vec2(s, c))); + } + + tc += center; + vec4 color = texture2D(texture0, tc/texSize)*colDiffuse*fragColor;; + + gl_FragColor = vec4(color.rgb, 1.0);; +} +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +uniform float secondes; + +uniform vec2 size; + +uniform float freqX; +uniform float freqY; +uniform float ampX; +uniform float ampY; +uniform float speedX; +uniform float speedY; + +void main() { + float pixelWidth = 1.0 / size.x; + float pixelHeight = 1.0 / size.y; + float aspect = pixelHeight / pixelWidth; + float boxLeft = 0.0; + float boxTop = 0.0; + + vec2 p = fragTexCoord; + p.x += cos((fragTexCoord.y - boxTop) * freqX / ( pixelWidth * 750.0) + (secondes * speedX)) * ampX * pixelWidth; + p.y += sin((fragTexCoord.x - boxLeft) * freqY * aspect / ( pixelHeight * 750.0) + (secondes * speedY)) * ampY * pixelHeight; + + gl_FragColor = texture2D(texture0, p)*colDiffuse*fragColor; +} diff --git a/examples/web/shaders/shaders_postprocessing.html b/examples/web/shaders/shaders_postprocessing.html new file mode 100644 index 0000000..501c5a1 --- /dev/null +++ b/examples/web/shaders/shaders_postprocessing.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shaders/shaders_postprocessing.js b/examples/web/shaders/shaders_postprocessing.js new file mode 100644 index 0000000..d80715e --- /dev/null +++ b/examples/web/shaders/shaders_postprocessing.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="shaders/shaders_postprocessing.data";var REMOTE_PACKAGE_BASE="shaders_postprocessing.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","models",true,true);Module["FS_createPath"]("/resources","shaders",true,true);Module["FS_createPath"]("/resources/shaders","glsl100",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5283040,DYNAMICTOP_PTR=40128;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shaders_postprocessing.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"d":abort,"b":___assert_fail,"Cc":___lock,"I":___setErrNo,"mb":___syscall140,"bb":___syscall145,"H":___syscall146,"t":___syscall221,"ya":___syscall5,"G":___syscall54,"da":___syscall6,"F":___unlock,"E":_eglGetProcAddress,"ca":_emscripten_exit_pointerlock,"Hd":_emscripten_get_gamepad_status,"wd":_emscripten_get_heap_size,"ld":_emscripten_get_num_gamepads,"ba":_emscripten_get_pointerlock_status,"Sc":_emscripten_glActiveTexture,"Ic":_emscripten_glAttachShader,"Bc":_emscripten_glBeginQueryEXT,"wc":_emscripten_glBindAttribLocation,"qc":_emscripten_glBindBuffer,"nc":_emscripten_glBindFramebuffer,"gc":_emscripten_glBindRenderbuffer,"ac":_emscripten_glBindTexture,"Xb":_emscripten_glBindVertexArrayOES,"Ob":_emscripten_glBlendColor,"Db":_emscripten_glBlendEquation,"xb":_emscripten_glBlendEquationSeparate,"wb":_emscripten_glBlendFunc,"vb":_emscripten_glBlendFuncSeparate,"ub":_emscripten_glBufferData,"tb":_emscripten_glBufferSubData,"sb":_emscripten_glCheckFramebufferStatus,"rb":_emscripten_glClear,"qb":_emscripten_glClearColor,"pb":_emscripten_glClearDepthf,"ob":_emscripten_glClearStencil,"nb":_emscripten_glColorMask,"lb":_emscripten_glCompileShader,"kb":_emscripten_glCompressedTexImage2D,"jb":_emscripten_glCompressedTexSubImage2D,"ib":_emscripten_glCopyTexImage2D,"hb":_emscripten_glCopyTexSubImage2D,"gb":_emscripten_glCreateProgram,"fb":_emscripten_glCreateShader,"eb":_emscripten_glCullFace,"db":_emscripten_glDeleteBuffers,"cb":_emscripten_glDeleteFramebuffers,"ab":_emscripten_glDeleteProgram,"$a":_emscripten_glDeleteQueriesEXT,"_a":_emscripten_glDeleteRenderbuffers,"Za":_emscripten_glDeleteShader,"Ya":_emscripten_glDeleteTextures,"Xa":_emscripten_glDeleteVertexArraysOES,"Wa":_emscripten_glDepthFunc,"Va":_emscripten_glDepthMask,"Ua":_emscripten_glDepthRangef,"Ta":_emscripten_glDetachShader,"Sa":_emscripten_glDisable,"Ra":_emscripten_glDisableVertexAttribArray,"Qa":_emscripten_glDrawArrays,"Pa":_emscripten_glDrawArraysInstancedANGLE,"Oa":_emscripten_glDrawBuffersWEBGL,"Na":_emscripten_glDrawElements,"Ma":_emscripten_glDrawElementsInstancedANGLE,"La":_emscripten_glEnable,"Ka":_emscripten_glEnableVertexAttribArray,"Ja":_emscripten_glEndQueryEXT,"Ia":_emscripten_glFinish,"Ha":_emscripten_glFlush,"Ga":_emscripten_glFramebufferRenderbuffer,"Fa":_emscripten_glFramebufferTexture2D,"Ea":_emscripten_glFrontFace,"Da":_emscripten_glGenBuffers,"Ca":_emscripten_glGenFramebuffers,"Ba":_emscripten_glGenQueriesEXT,"Aa":_emscripten_glGenRenderbuffers,"za":_emscripten_glGenTextures,"xa":_emscripten_glGenVertexArraysOES,"wa":_emscripten_glGenerateMipmap,"va":_emscripten_glGetActiveAttrib,"ua":_emscripten_glGetActiveUniform,"ta":_emscripten_glGetAttachedShaders,"sa":_emscripten_glGetAttribLocation,"ra":_emscripten_glGetBooleanv,"qa":_emscripten_glGetBufferParameteriv,"pa":_emscripten_glGetError,"oa":_emscripten_glGetFloatv,"na":_emscripten_glGetFramebufferAttachmentParameteriv,"ma":_emscripten_glGetIntegerv,"la":_emscripten_glGetProgramInfoLog,"ka":_emscripten_glGetProgramiv,"ja":_emscripten_glGetQueryObjecti64vEXT,"ia":_emscripten_glGetQueryObjectivEXT,"ha":_emscripten_glGetQueryObjectui64vEXT,"ga":_emscripten_glGetQueryObjectuivEXT,"fa":_emscripten_glGetQueryivEXT,"ea":_emscripten_glGetRenderbufferParameteriv,"te":_emscripten_glGetShaderInfoLog,"se":_emscripten_glGetShaderPrecisionFormat,"re":_emscripten_glGetShaderSource,"qe":_emscripten_glGetShaderiv,"pe":_emscripten_glGetString,"oe":_emscripten_glGetTexParameterfv,"ne":_emscripten_glGetTexParameteriv,"me":_emscripten_glGetUniformLocation,"le":_emscripten_glGetUniformfv,"ke":_emscripten_glGetUniformiv,"je":_emscripten_glGetVertexAttribPointerv,"ie":_emscripten_glGetVertexAttribfv,"he":_emscripten_glGetVertexAttribiv,"ge":_emscripten_glHint,"fe":_emscripten_glIsBuffer,"ee":_emscripten_glIsEnabled,"de":_emscripten_glIsFramebuffer,"ce":_emscripten_glIsProgram,"be":_emscripten_glIsQueryEXT,"ae":_emscripten_glIsRenderbuffer,"$d":_emscripten_glIsShader,"_d":_emscripten_glIsTexture,"Zd":_emscripten_glIsVertexArrayOES,"Yd":_emscripten_glLineWidth,"Xd":_emscripten_glLinkProgram,"Wd":_emscripten_glPixelStorei,"Vd":_emscripten_glPolygonOffset,"Ud":_emscripten_glQueryCounterEXT,"Td":_emscripten_glReadPixels,"Sd":_emscripten_glReleaseShaderCompiler,"Rd":_emscripten_glRenderbufferStorage,"Qd":_emscripten_glSampleCoverage,"Pd":_emscripten_glScissor,"Od":_emscripten_glShaderBinary,"Nd":_emscripten_glShaderSource,"Md":_emscripten_glStencilFunc,"Ld":_emscripten_glStencilFuncSeparate,"Kd":_emscripten_glStencilMask,"Jd":_emscripten_glStencilMaskSeparate,"Id":_emscripten_glStencilOp,"Gd":_emscripten_glStencilOpSeparate,"Fd":_emscripten_glTexImage2D,"Ed":_emscripten_glTexParameterf,"Dd":_emscripten_glTexParameterfv,"Cd":_emscripten_glTexParameteri,"Bd":_emscripten_glTexParameteriv,"Ad":_emscripten_glTexSubImage2D,"zd":_emscripten_glUniform1f,"yd":_emscripten_glUniform1fv,"xd":_emscripten_glUniform1i,"vd":_emscripten_glUniform1iv,"ud":_emscripten_glUniform2f,"td":_emscripten_glUniform2fv,"sd":_emscripten_glUniform2i,"rd":_emscripten_glUniform2iv,"qd":_emscripten_glUniform3f,"pd":_emscripten_glUniform3fv,"od":_emscripten_glUniform3i,"nd":_emscripten_glUniform3iv,"md":_emscripten_glUniform4f,"kd":_emscripten_glUniform4fv,"jd":_emscripten_glUniform4i,"id":_emscripten_glUniform4iv,"hd":_emscripten_glUniformMatrix2fv,"gd":_emscripten_glUniformMatrix3fv,"fd":_emscripten_glUniformMatrix4fv,"ed":_emscripten_glUseProgram,"dd":_emscripten_glValidateProgram,"cd":_emscripten_glVertexAttrib1f,"bd":_emscripten_glVertexAttrib1fv,"ad":_emscripten_glVertexAttrib2f,"$c":_emscripten_glVertexAttrib2fv,"_c":_emscripten_glVertexAttrib3f,"Zc":_emscripten_glVertexAttrib3fv,"Yc":_emscripten_glVertexAttrib4f,"Xc":_emscripten_glVertexAttrib4fv,"Wc":_emscripten_glVertexAttribDivisorANGLE,"Vc":_emscripten_glVertexAttribPointer,"Uc":_emscripten_glViewport,"Tc":_emscripten_memcpy_big,"Rc":_emscripten_request_pointerlock,"Qc":_emscripten_resize_heap,"aa":_emscripten_run_script,"Pc":_emscripten_sample_gamepad_data,"Oc":_emscripten_set_click_callback_on_thread,"Nc":_emscripten_set_fullscreenchange_callback_on_thread,"Mc":_emscripten_set_gamepadconnected_callback_on_thread,"Lc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Kc":_emscripten_set_keypress_callback_on_thread,"Jc":_emscripten_set_main_loop,"Hc":_emscripten_set_touchcancel_callback_on_thread,"Gc":_emscripten_set_touchend_callback_on_thread,"Fc":_emscripten_set_touchmove_callback_on_thread,"Ec":_emscripten_set_touchstart_callback_on_thread,"Dc":_exit,"D":_glActiveTexture,"$":_glAttachShader,"q":_glBindAttribLocation,"c":_glBindBuffer,"o":_glBindFramebuffer,"_":_glBindRenderbuffer,"k":_glBindTexture,"Ac":_glBlendFunc,"j":_glBufferData,"C":_glBufferSubData,"zc":_glCheckFramebufferStatus,"Z":_glClear,"Y":_glClearColor,"yc":_glClearDepthf,"xc":_glCompileShader,"vc":_glCompressedTexImage2D,"uc":_glCreateProgram,"tc":_glCreateShader,"sc":_glCullFace,"s":_glDeleteBuffers,"B":_glDeleteProgram,"v":_glDeleteShader,"X":_glDeleteTextures,"rc":_glDepthFunc,"W":_glDetachShader,"V":_glDisable,"n":_glDisableVertexAttribArray,"U":_glDrawArrays,"T":_glDrawElements,"A":_glEnable,"f":_glEnableVertexAttribArray,"pc":_glFramebufferRenderbuffer,"S":_glFramebufferTexture2D,"oc":_glFrontFace,"i":_glGenBuffers,"mc":_glGenFramebuffers,"lc":_glGenRenderbuffers,"R":_glGenTextures,"kc":_glGetActiveUniform,"m":_glGetAttribLocation,"jc":_glGetFloatv,"ic":_glGetProgramInfoLog,"z":_glGetProgramiv,"hc":_glGetShaderInfoLog,"Q":_glGetShaderiv,"r":_glGetString,"h":_glGetUniformLocation,"fc":_glLinkProgram,"ec":_glPixelStorei,"dc":_glReadPixels,"cc":_glRenderbufferStorage,"bc":_glShaderSource,"P":_glTexImage2D,"l":_glTexParameteri,"O":_glUniform1i,"y":_glUniform4f,"x":_glUniformMatrix4fv,"p":_glUseProgram,"$b":_glVertexAttrib2f,"_b":_glVertexAttrib3f,"w":_glVertexAttrib4f,"e":_glVertexAttribPointer,"Zb":_glViewport,"N":_glfwCreateWindow,"Yb":_glfwDefaultWindowHints,"Wb":_glfwDestroyWindow,"Vb":_glfwGetCursorPos,"Ub":_glfwGetKey,"Tb":_glfwGetMouseButton,"M":_glfwGetPrimaryMonitor,"u":_glfwGetTime,"Sb":_glfwGetVideoModes,"Rb":_glfwInit,"Qb":_glfwMakeContextCurrent,"Pb":_glfwSetCharCallback,"Nb":_glfwSetCursorEnterCallback,"Mb":_glfwSetCursorPosCallback,"Lb":_glfwSetDropCallback,"Kb":_glfwSetErrorCallback,"Jb":_glfwSetKeyCallback,"Ib":_glfwSetMouseButtonCallback,"Hb":_glfwSetScrollCallback,"Gb":_glfwSetWindowIconifyCallback,"Fb":_glfwSetWindowShouldClose,"Eb":_glfwSetWindowSizeCallback,"Cb":_glfwSwapBuffers,"Bb":_glfwSwapInterval,"L":_glfwTerminate,"g":_glfwWindowHint,"K":_llvm_stackrestore,"J":_llvm_stacksave,"Ab":_nanosleep,"zb":_time,"yb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["we"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Je"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Ke"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Le"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["De"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["He"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Ie"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shaders/shaders_postprocessing.wasm b/examples/web/shaders/shaders_postprocessing.wasm new file mode 100644 index 0000000..ca2b32f Binary files /dev/null and b/examples/web/shaders/shaders_postprocessing.wasm differ diff --git a/examples/web/shaders/shaders_raymarching.c b/examples/web/shaders/shaders_raymarching.c index 5845674..818e826 100644 --- a/examples/web/shaders/shaders_raymarching.c +++ b/examples/web/shaders/shaders_raymarching.c @@ -31,8 +31,8 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) @@ -55,15 +55,15 @@ float runTime = 0.0f; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; - + const int screenWidth = 800; + const int screenHeight = 450; + InitWindow(screenWidth, screenHeight, "raylib [shaders] example - raymarching shapes"); camera.position = (Vector3){ 2.5f, 2.5f, 3.0f }; // Camera position @@ -76,7 +76,7 @@ int main() // Load raymarching shader // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader shader = LoadShader(0, FormatText("resources/shaders/glsl%i/raymarching.fs", GLSL_VERSION)); - + // Get shader locations for required uniforms viewEyeLoc = GetShaderLocation(shader, "viewEye"); viewCenterLoc = GetShaderLocation(shader, "viewCenter"); @@ -93,7 +93,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -124,7 +124,7 @@ void UpdateDrawFrame(void) float cameraTarget[3] = { camera.target.x, camera.target.y, camera.target.z }; float cameraUp[3] = { camera.up.x, camera.up.y, camera.up.z }; - float deltaTime = GetFrameTime(); + float deltaTime = GetFrameTime(); runTime += deltaTime; // Set shader required uniform values diff --git a/examples/web/shaders/shaders_raymarching.data b/examples/web/shaders/shaders_raymarching.data new file mode 100644 index 0000000..4ae7129 --- /dev/null +++ b/examples/web/shaders/shaders_raymarching.data @@ -0,0 +1,431 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +uniform vec3 viewEye; +uniform vec3 viewCenter; +uniform vec3 viewUp; +uniform float deltaTime; +uniform float runTime; +uniform vec2 resolution; + +// The MIT License +// Copyright © 2013 Inigo Quilez +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +// A list of useful distance function to simple primitives, and an example on how to +// do some interesting boolean operations, repetition and displacement. +// +// More info here: http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm + +#define AA 1 // make this 1 is your machine is too slow + +//------------------------------------------------------------------ + +float sdPlane( vec3 p ) +{ + return p.y; +} + +float sdSphere( vec3 p, float s ) +{ + return length(p)-s; +} + +float sdBox( vec3 p, vec3 b ) +{ + vec3 d = abs(p) - b; + return min(max(d.x,max(d.y,d.z)),0.0) + length(max(d,0.0)); +} + +float sdEllipsoid( in vec3 p, in vec3 r ) +{ + return (length( p/r ) - 1.0) * min(min(r.x,r.y),r.z); +} + +float udRoundBox( vec3 p, vec3 b, float r ) +{ + return length(max(abs(p)-b,0.0))-r; +} + +float sdTorus( vec3 p, vec2 t ) +{ + return length( vec2(length(p.xz)-t.x,p.y) )-t.y; +} + +float sdHexPrism( vec3 p, vec2 h ) +{ + vec3 q = abs(p); +#if 0 + return max(q.z-h.y,max((q.x*0.866025+q.y*0.5),q.y)-h.x); +#else + float d1 = q.z-h.y; + float d2 = max((q.x*0.866025+q.y*0.5),q.y)-h.x; + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +#endif +} + +float sdCapsule( vec3 p, vec3 a, vec3 b, float r ) +{ + vec3 pa = p-a, ba = b-a; + float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 ); + return length( pa - ba*h ) - r; +} + +float sdEquilateralTriangle( in vec2 p ) +{ + const float k = sqrt(3.0); + p.x = abs(p.x) - 1.0; + p.y = p.y + 1.0/k; + if( p.x + k*p.y > 0.0 ) p = vec2( p.x - k*p.y, -k*p.x - p.y )/2.0; + p.x += 2.0 - 2.0*clamp( (p.x+2.0)/2.0, 0.0, 1.0 ); + return -length(p)*sign(p.y); +} + +float sdTriPrism( vec3 p, vec2 h ) +{ + vec3 q = abs(p); + float d1 = q.z-h.y; +#if 1 + // distance bound + float d2 = max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5; +#else + // correct distance + h.x *= 0.866025; + float d2 = sdEquilateralTriangle(p.xy/h.x)*h.x; +#endif + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +} + +float sdCylinder( vec3 p, vec2 h ) +{ + vec2 d = abs(vec2(length(p.xz),p.y)) - h; + return min(max(d.x,d.y),0.0) + length(max(d,0.0)); +} + +float sdCone( in vec3 p, in vec3 c ) +{ + vec2 q = vec2( length(p.xz), p.y ); + float d1 = -q.y-c.z; + float d2 = max( dot(q,c.xy), q.y); + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +} + +float sdConeSection( in vec3 p, in float h, in float r1, in float r2 ) +{ + float d1 = -p.y - h; + float q = p.y - h; + float si = 0.5*(r1-r2)/h; + float d2 = max( sqrt( dot(p.xz,p.xz)*(1.0-si*si)) + q*si - r2, q ); + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +} + +float sdPryamid4(vec3 p, vec3 h ) // h = { cos a, sin a, height } +{ + // Tetrahedron = Octahedron - Cube + float box = sdBox( p - vec3(0,-2.0*h.z,0), vec3(2.0*h.z) ); + + float d = 0.0; + d = max( d, abs( dot(p, vec3( -h.x, h.y, 0 )) )); + d = max( d, abs( dot(p, vec3( h.x, h.y, 0 )) )); + d = max( d, abs( dot(p, vec3( 0, h.y, h.x )) )); + d = max( d, abs( dot(p, vec3( 0, h.y,-h.x )) )); + float octa = d - h.z; + return max(-box,octa); // Subtraction + } + +float length2( vec2 p ) +{ + return sqrt( p.x*p.x + p.y*p.y ); +} + +float length6( vec2 p ) +{ + p = p*p*p; p = p*p; + return pow( p.x + p.y, 1.0/6.0 ); +} + +float length8( vec2 p ) +{ + p = p*p; p = p*p; p = p*p; + return pow( p.x + p.y, 1.0/8.0 ); +} + +float sdTorus82( vec3 p, vec2 t ) +{ + vec2 q = vec2(length2(p.xz)-t.x,p.y); + return length8(q)-t.y; +} + +float sdTorus88( vec3 p, vec2 t ) +{ + vec2 q = vec2(length8(p.xz)-t.x,p.y); + return length8(q)-t.y; +} + +float sdCylinder6( vec3 p, vec2 h ) +{ + return max( length6(p.xz)-h.x, abs(p.y)-h.y ); +} + +//------------------------------------------------------------------ + +float opS( float d1, float d2 ) +{ + return max(-d2,d1); +} + +vec2 opU( vec2 d1, vec2 d2 ) +{ + return (d1.x0.0 ) tmax = min( tmax, tp1 ); + float tp2 = (1.6-ro.y)/rd.y; if( tp2>0.0 ) { if( ro.y>1.6 ) tmin = max( tmin, tp2 ); + else tmax = min( tmax, tp2 ); } +#endif + + float t = tmin; + float m = -1.0; + for( int i=0; i<64; i++ ) + { + float precis = 0.0005*t; + vec2 res = map( ro+rd*t ); + if( res.xtmax ) break; + t += res.x; + m = res.y; + } + + if( t>tmax ) m=-1.0; + return vec2( t, m ); +} + + +float calcSoftshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax ) +{ + float res = 1.0; + float t = mint; + for( int i=0; i<16; i++ ) + { + float h = map( ro + rd*t ).x; + res = min( res, 8.0*h/t ); + t += clamp( h, 0.02, 0.10 ); + if( h<0.001 || t>tmax ) break; + } + return clamp( res, 0.0, 1.0 ); +} + +vec3 calcNormal( in vec3 pos ) +{ + vec2 e = vec2(1.0,-1.0)*0.5773*0.0005; + return normalize( e.xyy*map( pos + e.xyy ).x + + e.yyx*map( pos + e.yyx ).x + + e.yxy*map( pos + e.yxy ).x + + e.xxx*map( pos + e.xxx ).x ); + /* + vec3 eps = vec3( 0.0005, 0.0, 0.0 ); + vec3 nor = vec3( + map(pos+eps.xyy).x - map(pos-eps.xyy).x, + map(pos+eps.yxy).x - map(pos-eps.yxy).x, + map(pos+eps.yyx).x - map(pos-eps.yyx).x ); + return normalize(nor); + */ +} + +float calcAO( in vec3 pos, in vec3 nor ) +{ + float occ = 0.0; + float sca = 1.0; + for( int i=0; i<5; i++ ) + { + float hr = 0.01 + 0.12*float(i)/4.0; + vec3 aopos = nor * hr + pos; + float dd = map( aopos ).x; + occ += -(dd-hr)*sca; + sca *= 0.95; + } + return clamp( 1.0 - 3.0*occ, 0.0, 1.0 ); +} + +// http://iquilezles.org/www/articles/checkerfiltering/checkerfiltering.htm +float checkersGradBox( in vec2 p ) +{ + // filter kernel + vec2 w = fwidth(p) + 0.001; + // analytical integral (box filter) + vec2 i = 2.0*(abs(fract((p-0.5*w)*0.5)-0.5)-abs(fract((p+0.5*w)*0.5)-0.5))/w; + // xor pattern + return 0.5 - 0.5*i.x*i.y; +} + +vec3 render( in vec3 ro, in vec3 rd ) +{ + vec3 col = vec3(0.7, 0.9, 1.0) +rd.y*0.8; + vec2 res = castRay(ro,rd); + float t = res.x; + float m = res.y; + if( m>-0.5 ) + { + vec3 pos = ro + t*rd; + vec3 nor = calcNormal( pos ); + vec3 ref = reflect( rd, nor ); + + // material + col = 0.45 + 0.35*sin( vec3(0.05,0.08,0.10)*(m-1.0) ); + if( m<1.5 ) + { + + float f = checkersGradBox( 5.0*pos.xz ); + col = 0.3 + f*vec3(0.1); + } + + // lighting + float occ = calcAO( pos, nor ); + vec3 lig = normalize( vec3(cos(-0.4 * runTime), sin(0.7 * runTime), -0.6) ); + vec3 hal = normalize( lig-rd ); + float amb = clamp( 0.5+0.5*nor.y, 0.0, 1.0 ); + float dif = clamp( dot( nor, lig ), 0.0, 1.0 ); + float bac = clamp( dot( nor, normalize(vec3(-lig.x,0.0,-lig.z))), 0.0, 1.0 )*clamp( 1.0-pos.y,0.0,1.0); + float dom = smoothstep( -0.1, 0.1, ref.y ); + float fre = pow( clamp(1.0+dot(nor,rd),0.0,1.0), 2.0 ); + + dif *= calcSoftshadow( pos, lig, 0.02, 2.5 ); + dom *= calcSoftshadow( pos, ref, 0.02, 2.5 ); + + float spe = pow( clamp( dot( nor, hal ), 0.0, 1.0 ),16.0)* + dif * + (0.04 + 0.96*pow( clamp(1.0+dot(hal,rd),0.0,1.0), 5.0 )); + + vec3 lin = vec3(0.0); + lin += 1.30*dif*vec3(1.00,0.80,0.55); + lin += 0.40*amb*vec3(0.40,0.60,1.00)*occ; + lin += 0.50*dom*vec3(0.40,0.60,1.00)*occ; + lin += 0.50*bac*vec3(0.25,0.25,0.25)*occ; + lin += 0.25*fre*vec3(1.00,1.00,1.00)*occ; + col = col*lin; + col += 10.00*spe*vec3(1.00,0.90,0.70); + + col = mix( col, vec3(0.8,0.9,1.0), 1.0-exp( -0.0002*t*t*t ) ); + } + + return vec3( clamp(col,0.0,1.0) ); +} + +mat3 setCamera( in vec3 ro, in vec3 ta, float cr ) +{ + vec3 cw = normalize(ta-ro); + vec3 cp = vec3(sin(cr), cos(cr),0.0); + vec3 cu = normalize( cross(cw,cp) ); + vec3 cv = normalize( cross(cu,cw) ); + return mat3( cu, cv, cw ); +} + +void main() +{ + vec3 tot = vec3(0.0); +#if AA>1 + for( int m=0; m1 + } + tot /= float(AA*AA); +#endif + + gl_FragColor = vec4( tot, 1.0 ); +} \ No newline at end of file diff --git a/examples/web/shaders/shaders_raymarching.html b/examples/web/shaders/shaders_raymarching.html new file mode 100644 index 0000000..170d4bb --- /dev/null +++ b/examples/web/shaders/shaders_raymarching.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shaders/shaders_raymarching.js b/examples/web/shaders/shaders_raymarching.js new file mode 100644 index 0000000..253efca --- /dev/null +++ b/examples/web/shaders/shaders_raymarching.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="shaders/shaders_raymarching.data";var REMOTE_PACKAGE_BASE="shaders_raymarching.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","shaders",true,true);Module["FS_createPath"]("/resources/shaders","glsl100",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5270320,DYNAMICTOP_PTR=27408;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shaders_raymarching.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"vc":___lock,"C":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"B":___syscall146,"n":___syscall221,"ka":___syscall5,"A":___syscall54,"R":___syscall6,"z":___unlock,"y":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"Bd":_emscripten_get_gamepad_status,"qd":_emscripten_get_heap_size,"fd":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Mc":_emscripten_glActiveTexture,"Cc":_emscripten_glAttachShader,"uc":_emscripten_glBeginQueryEXT,"nc":_emscripten_glBindAttribLocation,"ic":_emscripten_glBindBuffer,"bc":_emscripten_glBindFramebuffer,"Wb":_emscripten_glBindRenderbuffer,"Nb":_emscripten_glBindTexture,"Eb":_emscripten_glBindVertexArrayOES,"ub":_emscripten_glBlendColor,"nb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ne":_emscripten_glGetShaderInfoLog,"me":_emscripten_glGetShaderPrecisionFormat,"le":_emscripten_glGetShaderSource,"ke":_emscripten_glGetShaderiv,"je":_emscripten_glGetString,"ie":_emscripten_glGetTexParameterfv,"he":_emscripten_glGetTexParameteriv,"ge":_emscripten_glGetUniformLocation,"fe":_emscripten_glGetUniformfv,"ee":_emscripten_glGetUniformiv,"de":_emscripten_glGetVertexAttribPointerv,"ce":_emscripten_glGetVertexAttribfv,"be":_emscripten_glGetVertexAttribiv,"ae":_emscripten_glHint,"$d":_emscripten_glIsBuffer,"_d":_emscripten_glIsEnabled,"Zd":_emscripten_glIsFramebuffer,"Yd":_emscripten_glIsProgram,"Xd":_emscripten_glIsQueryEXT,"Wd":_emscripten_glIsRenderbuffer,"Vd":_emscripten_glIsShader,"Ud":_emscripten_glIsTexture,"Td":_emscripten_glIsVertexArrayOES,"Sd":_emscripten_glLineWidth,"Rd":_emscripten_glLinkProgram,"Qd":_emscripten_glPixelStorei,"Pd":_emscripten_glPolygonOffset,"Od":_emscripten_glQueryCounterEXT,"Nd":_emscripten_glReadPixels,"Md":_emscripten_glReleaseShaderCompiler,"Ld":_emscripten_glRenderbufferStorage,"Kd":_emscripten_glSampleCoverage,"Jd":_emscripten_glScissor,"Id":_emscripten_glShaderBinary,"Hd":_emscripten_glShaderSource,"Gd":_emscripten_glStencilFunc,"Fd":_emscripten_glStencilFuncSeparate,"Ed":_emscripten_glStencilMask,"Dd":_emscripten_glStencilMaskSeparate,"Cd":_emscripten_glStencilOp,"Ad":_emscripten_glStencilOpSeparate,"zd":_emscripten_glTexImage2D,"yd":_emscripten_glTexParameterf,"xd":_emscripten_glTexParameterfv,"wd":_emscripten_glTexParameteri,"vd":_emscripten_glTexParameteriv,"ud":_emscripten_glTexSubImage2D,"td":_emscripten_glUniform1f,"sd":_emscripten_glUniform1fv,"rd":_emscripten_glUniform1i,"pd":_emscripten_glUniform1iv,"od":_emscripten_glUniform2f,"nd":_emscripten_glUniform2fv,"md":_emscripten_glUniform2i,"ld":_emscripten_glUniform2iv,"kd":_emscripten_glUniform3f,"jd":_emscripten_glUniform3fv,"id":_emscripten_glUniform3i,"hd":_emscripten_glUniform3iv,"gd":_emscripten_glUniform4f,"ed":_emscripten_glUniform4fv,"dd":_emscripten_glUniform4i,"cd":_emscripten_glUniform4iv,"bd":_emscripten_glUniformMatrix2fv,"ad":_emscripten_glUniformMatrix3fv,"$c":_emscripten_glUniformMatrix4fv,"_c":_emscripten_glUseProgram,"Zc":_emscripten_glValidateProgram,"Yc":_emscripten_glVertexAttrib1f,"Xc":_emscripten_glVertexAttrib1fv,"Wc":_emscripten_glVertexAttrib2f,"Vc":_emscripten_glVertexAttrib2fv,"Uc":_emscripten_glVertexAttrib3f,"Tc":_emscripten_glVertexAttrib3fv,"Sc":_emscripten_glVertexAttrib4f,"Rc":_emscripten_glVertexAttrib4fv,"Qc":_emscripten_glVertexAttribDivisorANGLE,"Pc":_emscripten_glVertexAttribPointer,"Oc":_emscripten_glViewport,"Nc":_emscripten_memcpy_big,"Lc":_emscripten_request_pointerlock,"Kc":_emscripten_resize_heap,"O":_emscripten_run_script,"Jc":_emscripten_sample_gamepad_data,"Ic":_emscripten_set_click_callback_on_thread,"Hc":_emscripten_set_fullscreenchange_callback_on_thread,"Gc":_emscripten_set_gamepadconnected_callback_on_thread,"Fc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Ec":_emscripten_set_keypress_callback_on_thread,"Dc":_emscripten_set_main_loop,"Bc":_emscripten_set_touchcancel_callback_on_thread,"Ac":_emscripten_set_touchend_callback_on_thread,"zc":_emscripten_set_touchmove_callback_on_thread,"yc":_emscripten_set_touchstart_callback_on_thread,"xc":_exit,"wc":_glActiveTexture,"N":_glAttachShader,"k":_glBindAttribLocation,"d":_glBindBuffer,"m":_glBindTexture,"tc":_glBlendFunc,"u":_glBufferData,"x":_glBufferSubData,"M":_glClear,"L":_glClearColor,"sc":_glClearDepthf,"rc":_glCompileShader,"qc":_glCompressedTexImage2D,"pc":_glCreateProgram,"oc":_glCreateShader,"mc":_glCullFace,"t":_glDeleteBuffers,"w":_glDeleteProgram,"s":_glDeleteShader,"K":_glDeleteTextures,"lc":_glDepthFunc,"J":_glDetachShader,"kc":_glDisable,"r":_glDisableVertexAttribArray,"jc":_glDrawArrays,"hc":_glDrawElements,"I":_glEnable,"j":_glEnableVertexAttribArray,"gc":_glFrontFace,"q":_glGenBuffers,"fc":_glGenTextures,"ec":_glGetActiveUniform,"f":_glGetAttribLocation,"dc":_glGetFloatv,"cc":_glGetProgramInfoLog,"v":_glGetProgramiv,"ac":_glGetShaderInfoLog,"H":_glGetShaderiv,"l":_glGetString,"e":_glGetUniformLocation,"$b":_glLinkProgram,"_b":_glPixelStorei,"Zb":_glReadPixels,"Yb":_glShaderSource,"Xb":_glTexImage2D,"i":_glTexParameteri,"Vb":_glUniform1fv,"Ub":_glUniform1i,"G":_glUniform1iv,"Tb":_glUniform2fv,"Sb":_glUniform2iv,"Rb":_glUniform3fv,"Qb":_glUniform3iv,"Pb":_glUniform4f,"Ob":_glUniform4fv,"Mb":_glUniform4iv,"Lb":_glUniformMatrix4fv,"p":_glUseProgram,"h":_glVertexAttribPointer,"Kb":_glViewport,"Jb":_glfwCreateWindow,"Ib":_glfwDefaultWindowHints,"Hb":_glfwDestroyWindow,"Gb":_glfwGetCursorPos,"Fb":_glfwGetKey,"Db":_glfwGetMouseButton,"o":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"tb":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"F":_glfwTerminate,"g":_glfwWindowHint,"E":_llvm_stackrestore,"D":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["De"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shaders/shaders_raymarching.wasm b/examples/web/shaders/shaders_raymarching.wasm new file mode 100644 index 0000000..271e9e9 Binary files /dev/null and b/examples/web/shaders/shaders_raymarching.wasm differ diff --git a/examples/web/shaders/shaders_shapes_textures.c b/examples/web/shaders/shaders_shapes_textures.c index 1e2c669..8fa97e6 100644 --- a/examples/web/shaders/shaders_shapes_textures.c +++ b/examples/web/shaders/shaders_shapes_textures.c @@ -9,7 +9,7 @@ * on OpenGL ES 2.0 platforms (Android, Raspberry Pi, HTML5), use #version 100 shaders * raylib comes with shaders ready for both versions, check raylib/shaders install folder * -* This example has been created using raylib 1.3 (www.raylib.com) +* This example has been created using raylib 1.7 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * * Copyright (c) 2015 Ramon Santamaria (@raysan5) @@ -22,14 +22,20 @@ #include #endif +#if defined(PLATFORM_DESKTOP) + #define GLSL_VERSION 330 +#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB + #define GLSL_VERSION 100 +#endif + //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; -Texture2D fudesumi; -Shader shader; +Texture2D fudesumi = { 0 }; +Shader shader = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -37,7 +43,7 @@ Shader shader; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -47,18 +53,19 @@ int main(void) fudesumi = LoadTexture("resources/fudesumi.png"); - // NOTE: Using GLSL 330 shader version, on OpenGL ES 2.0 use GLSL 100 shader version - shader = LoadShader("resources/shaders/glsl100/base.vs", - "resources/shaders/glsl100/grayscale.fs"); - + // Load shader to be used on some parts drawing + // NOTE 1: Using GLSL 330 shader version, on OpenGL ES 2.0 use GLSL 100 shader version + // NOTE 2: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader + shader = LoadShader(0, FormatText("resources/shaders/glsl%i/grayscale.fs", GLSL_VERSION)); + // Shader usage is also different than models/postprocessing, shader is just activated when required - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -70,7 +77,7 @@ int main(void) //-------------------------------------------------------------------------------------- UnloadShader(shader); // Unload shader UnloadTexture(fudesumi); // Unload texture - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -92,19 +99,19 @@ void UpdateDrawFrame(void) BeginDrawing(); ClearBackground(RAYWHITE); - + // Start drawing with default shader DrawText("USING DEFAULT SHADER", 20, 40, 10, RED); - + DrawCircle(80, 120, 35, DARKBLUE); DrawCircleGradient(80, 220, 60, GREEN, SKYBLUE); DrawCircleLines(80, 340, 80, DARKBLUE); - + // Activate our custom shader to be applied on next shapes/textures drawings BeginShaderMode(shader); - + DrawText("USING CUSTOM SHADER", 190, 40, 10, RED); DrawRectangle(250 - 60, 90, 120, 60, RED); @@ -113,27 +120,28 @@ void UpdateDrawFrame(void) // Activate our default shader for next drawings EndShaderMode(); - + DrawText("USING DEFAULT SHADER", 370, 40, 10, RED); - + DrawTriangle((Vector2){430, 80}, (Vector2){430 - 60, 150}, (Vector2){430 + 60, 150}, VIOLET); - + DrawTriangleLines((Vector2){430, 160}, (Vector2){430 - 20, 230}, (Vector2){430 + 20, 230}, DARKBLUE); DrawPoly((Vector2){430, 320}, 6, 80, 0, BROWN); - + // Activate our custom shader to be applied on next shapes/textures drawings BeginShaderMode(shader); DrawTexture(fudesumi, 500, -30, WHITE); // Using custom shader - + // Activate our default shader for next drawings EndShaderMode(); - + + DrawText("(c) Fudesumi sprite by Eiden Marsal", 380, screenHeight - 20, 10, GRAY); EndDrawing(); //---------------------------------------------------------------------------------- } \ No newline at end of file diff --git a/examples/web/shaders/shaders_shapes_textures.data b/examples/web/shaders/shaders_shapes_textures.data new file mode 100644 index 0000000..0ff2eeb Binary files /dev/null and b/examples/web/shaders/shaders_shapes_textures.data differ diff --git a/examples/web/shaders/shaders_shapes_textures.html b/examples/web/shaders/shaders_shapes_textures.html new file mode 100644 index 0000000..34a34b4 --- /dev/null +++ b/examples/web/shaders/shaders_shapes_textures.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shaders/shaders_shapes_textures.js b/examples/web/shaders/shaders_shapes_textures.js new file mode 100644 index 0000000..a2dcf97 --- /dev/null +++ b/examples/web/shaders/shaders_shapes_textures.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="shaders/shaders_shapes_textures.data";var REMOTE_PACKAGE_BASE="shaders_shapes_textures.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","shaders",true,true);Module["FS_createPath"]("/resources/shaders","glsl100",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273424,DYNAMICTOP_PTR=30512;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shaders_shapes_textures.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"C":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"B":___syscall146,"n":___syscall221,"ja":___syscall5,"A":___syscall54,"Q":___syscall6,"z":___unlock,"y":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"N":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"M":_glAttachShader,"k":_glBindAttribLocation,"d":_glBindBuffer,"m":_glBindTexture,"jc":_glBlendFunc,"t":_glBufferData,"x":_glBufferSubData,"L":_glClear,"K":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"s":_glDeleteBuffers,"w":_glDeleteProgram,"r":_glDeleteShader,"J":_glDeleteTextures,"bc":_glDepthFunc,"I":_glDetachShader,"ac":_glDisable,"q":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"H":_glEnable,"j":_glEnableVertexAttribArray,"Yb":_glFrontFace,"p":_glGenBuffers,"Xb":_glGenTextures,"Wb":_glGetActiveUniform,"f":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"v":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"G":_glGetShaderiv,"l":_glGetString,"e":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"i":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"u":_glUseProgram,"h":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Db":_glfwGetCursorPos,"o":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"tb":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"F":_glfwTerminate,"g":_glfwWindowHint,"E":_llvm_stackrestore,"D":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shaders/shaders_shapes_textures.wasm b/examples/web/shaders/shaders_shapes_textures.wasm new file mode 100644 index 0000000..023efbe Binary files /dev/null and b/examples/web/shaders/shaders_shapes_textures.wasm differ diff --git a/examples/web/shaders/shaders_texture_drawing.c b/examples/web/shaders/shaders_texture_drawing.c index 53569c6..0e70af4 100644 --- a/examples/web/shaders/shaders_texture_drawing.c +++ b/examples/web/shaders/shaders_texture_drawing.c @@ -28,8 +28,8 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) @@ -45,9 +45,9 @@ int timeLoc = 0; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -68,14 +68,14 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { UpdateDrawFrame(); } #endif - + // De-Initialization //-------------------------------------------------------------------------------------- UnloadShader(shader); @@ -96,7 +96,7 @@ void UpdateDrawFrame(void) time = GetTime(); SetShaderValue(shader, timeLoc, &time, UNIFORM_FLOAT); //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); diff --git a/examples/web/shaders/shaders_texture_drawing.data b/examples/web/shaders/shaders_texture_drawing.data new file mode 100644 index 0000000..1b1ab15 --- /dev/null +++ b/examples/web/shaders/shaders_texture_drawing.data @@ -0,0 +1,60 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Custom variables +#define PI 3.14159265358979323846 +uniform float uTime = 0.0; + +float divisions = 5.0; +float angle = 0.0; + +vec2 VectorRotateTime(vec2 v, float speed) +{ + float time = uTime*speed; + float localTime = fract(time); // The time domain this works on is 1 sec. + + if ((localTime >= 0.0) && (localTime < 0.25)) angle = 0.0; + else if ((localTime >= 0.25) && (localTime < 0.50)) angle = PI/4*sin(2*PI*localTime - PI/2); + else if ((localTime >= 0.50) && (localTime < 0.75)) angle = PI*0.25; + else if ((localTime >= 0.75) && (localTime < 1.00)) angle = PI/4*sin(2*PI*localTime); + + // Rotate vector by angle + v -= 0.5; + v = mat2(cos(angle), -sin(angle), sin(angle), cos(angle))*v; + v += 0.5; + + return v; +} + +float Rectangle(in vec2 st, in float size, in float fill) +{ + float roundSize = 0.5 - size/2.0; + float left = step(roundSize, st.x); + float top = step(roundSize, st.y); + float bottom = step(roundSize, 1.0 - st.y); + float right = step(roundSize, 1.0 - st.x); + + return (left*bottom*right*top)*fill; +} + +void main() +{ + vec2 fragPos = fragTexCoord; + fragPos.xy += uTime/9.0; + + fragPos *= divisions; + vec2 ipos = floor(fragPos); // Get the integer coords + vec2 fpos = fract(fragPos); // Get the fractional coords + + fpos = VectorRotateTime(fpos, 0.2); + + float alpha = Rectangle(fpos, 0.216, 1.0); + vec3 color = vec3(0.3, 0.3, 0.3); + + gl_FragColor = vec4(color, alpha); +} \ No newline at end of file diff --git a/examples/web/shaders/shaders_texture_drawing.html b/examples/web/shaders/shaders_texture_drawing.html new file mode 100644 index 0000000..c6b17d5 --- /dev/null +++ b/examples/web/shaders/shaders_texture_drawing.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shaders/shaders_texture_drawing.js b/examples/web/shaders/shaders_texture_drawing.js new file mode 100644 index 0000000..f8ade0f --- /dev/null +++ b/examples/web/shaders/shaders_texture_drawing.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="shaders/shaders_texture_drawing.data";var REMOTE_PACKAGE_BASE="shaders_texture_drawing.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","shaders",true,true);Module["FS_createPath"]("/resources/shaders","glsl100",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5270176,DYNAMICTOP_PTR=27264;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shaders_texture_drawing.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"mc":___lock,"C":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"B":___syscall146,"o":___syscall221,"ja":___syscall5,"A":___syscall54,"Q":___syscall6,"z":___unlock,"y":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"sd":_emscripten_get_gamepad_status,"hd":_emscripten_get_heap_size,"Yc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Dc":_emscripten_glActiveTexture,"tc":_emscripten_glAttachShader,"lc":_emscripten_glBeginQueryEXT,"ec":_emscripten_glBindAttribLocation,"$b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Fb":_emscripten_glBindTexture,"vb":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ee":_emscripten_glGetShaderInfoLog,"de":_emscripten_glGetShaderPrecisionFormat,"ce":_emscripten_glGetShaderSource,"be":_emscripten_glGetShaderiv,"ae":_emscripten_glGetString,"$d":_emscripten_glGetTexParameterfv,"_d":_emscripten_glGetTexParameteriv,"Zd":_emscripten_glGetUniformLocation,"Yd":_emscripten_glGetUniformfv,"Xd":_emscripten_glGetUniformiv,"Wd":_emscripten_glGetVertexAttribPointerv,"Vd":_emscripten_glGetVertexAttribfv,"Ud":_emscripten_glGetVertexAttribiv,"Td":_emscripten_glHint,"Sd":_emscripten_glIsBuffer,"Rd":_emscripten_glIsEnabled,"Qd":_emscripten_glIsFramebuffer,"Pd":_emscripten_glIsProgram,"Od":_emscripten_glIsQueryEXT,"Nd":_emscripten_glIsRenderbuffer,"Md":_emscripten_glIsShader,"Ld":_emscripten_glIsTexture,"Kd":_emscripten_glIsVertexArrayOES,"Jd":_emscripten_glLineWidth,"Id":_emscripten_glLinkProgram,"Hd":_emscripten_glPixelStorei,"Gd":_emscripten_glPolygonOffset,"Fd":_emscripten_glQueryCounterEXT,"Ed":_emscripten_glReadPixels,"Dd":_emscripten_glReleaseShaderCompiler,"Cd":_emscripten_glRenderbufferStorage,"Bd":_emscripten_glSampleCoverage,"Ad":_emscripten_glScissor,"zd":_emscripten_glShaderBinary,"yd":_emscripten_glShaderSource,"xd":_emscripten_glStencilFunc,"wd":_emscripten_glStencilFuncSeparate,"vd":_emscripten_glStencilMask,"ud":_emscripten_glStencilMaskSeparate,"td":_emscripten_glStencilOp,"rd":_emscripten_glStencilOpSeparate,"qd":_emscripten_glTexImage2D,"pd":_emscripten_glTexParameterf,"od":_emscripten_glTexParameterfv,"nd":_emscripten_glTexParameteri,"md":_emscripten_glTexParameteriv,"ld":_emscripten_glTexSubImage2D,"kd":_emscripten_glUniform1f,"jd":_emscripten_glUniform1fv,"id":_emscripten_glUniform1i,"gd":_emscripten_glUniform1iv,"fd":_emscripten_glUniform2f,"ed":_emscripten_glUniform2fv,"dd":_emscripten_glUniform2i,"cd":_emscripten_glUniform2iv,"bd":_emscripten_glUniform3f,"ad":_emscripten_glUniform3fv,"$c":_emscripten_glUniform3i,"_c":_emscripten_glUniform3iv,"Zc":_emscripten_glUniform4f,"Xc":_emscripten_glUniform4fv,"Wc":_emscripten_glUniform4i,"Vc":_emscripten_glUniform4iv,"Uc":_emscripten_glUniformMatrix2fv,"Tc":_emscripten_glUniformMatrix3fv,"Sc":_emscripten_glUniformMatrix4fv,"Rc":_emscripten_glUseProgram,"Qc":_emscripten_glValidateProgram,"Pc":_emscripten_glVertexAttrib1f,"Oc":_emscripten_glVertexAttrib1fv,"Nc":_emscripten_glVertexAttrib2f,"Mc":_emscripten_glVertexAttrib2fv,"Lc":_emscripten_glVertexAttrib3f,"Kc":_emscripten_glVertexAttrib3fv,"Jc":_emscripten_glVertexAttrib4f,"Ic":_emscripten_glVertexAttrib4fv,"Hc":_emscripten_glVertexAttribDivisorANGLE,"Gc":_emscripten_glVertexAttribPointer,"Fc":_emscripten_glViewport,"Ec":_emscripten_memcpy_big,"Cc":_emscripten_request_pointerlock,"Bc":_emscripten_resize_heap,"N":_emscripten_run_script,"Ac":_emscripten_sample_gamepad_data,"zc":_emscripten_set_click_callback_on_thread,"yc":_emscripten_set_fullscreenchange_callback_on_thread,"xc":_emscripten_set_gamepadconnected_callback_on_thread,"wc":_emscripten_set_gamepaddisconnected_callback_on_thread,"vc":_emscripten_set_keypress_callback_on_thread,"uc":_emscripten_set_main_loop,"sc":_emscripten_set_touchcancel_callback_on_thread,"rc":_emscripten_set_touchend_callback_on_thread,"qc":_emscripten_set_touchmove_callback_on_thread,"pc":_emscripten_set_touchstart_callback_on_thread,"oc":_exit,"nc":_glActiveTexture,"M":_glAttachShader,"k":_glBindAttribLocation,"d":_glBindBuffer,"n":_glBindTexture,"kc":_glBlendFunc,"u":_glBufferData,"x":_glBufferSubData,"L":_glClear,"K":_glClearColor,"jc":_glClearDepthf,"ic":_glCompileShader,"hc":_glCompressedTexImage2D,"gc":_glCreateProgram,"fc":_glCreateShader,"dc":_glCullFace,"t":_glDeleteBuffers,"w":_glDeleteProgram,"s":_glDeleteShader,"J":_glDeleteTextures,"cc":_glDepthFunc,"I":_glDetachShader,"bc":_glDisable,"r":_glDisableVertexAttribArray,"ac":_glDrawArrays,"_b":_glDrawElements,"H":_glEnable,"j":_glEnableVertexAttribArray,"Zb":_glFrontFace,"q":_glGenBuffers,"Yb":_glGenTextures,"Xb":_glGetActiveUniform,"f":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"v":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"G":_glGetShaderiv,"m":_glGetString,"e":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"i":_glTexParameteri,"Mb":_glUniform1fv,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"p":_glUseProgram,"h":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Eb":_glfwDestroyWindow,"Db":_glfwGetCursorPos,"l":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"ub":_glfwSetKeyCallback,"tb":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"F":_glfwTerminate,"g":_glfwWindowHint,"E":_llvm_stackrestore,"D":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["le"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shaders/shaders_texture_drawing.wasm b/examples/web/shaders/shaders_texture_drawing.wasm new file mode 100644 index 0000000..fde6d6b Binary files /dev/null and b/examples/web/shaders/shaders_texture_drawing.wasm differ diff --git a/examples/web/shaders/shaders_texture_waves.c b/examples/web/shaders/shaders_texture_waves.c index af8130a..2c53772 100644 --- a/examples/web/shaders/shaders_texture_waves.c +++ b/examples/web/shaders/shaders_texture_waves.c @@ -33,8 +33,8 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) @@ -65,43 +65,43 @@ float seconds = 0.0f; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - texture waves"); - + InitWindow(screenWidth, screenHeight, "raylib [shaders] example - texture waves"); + // Load space texture to apply shaders - texture = LoadTexture("resources/space.png"); - + texture = LoadTexture("resources/space.png"); + // Load shader and setup location points and values shader = LoadShader(0, FormatText("resources/shaders/glsl%i/wave.fs", GLSL_VERSION)); - secondsLoc = GetShaderLocation(shader, "secondes"); - freqXLoc = GetShaderLocation(shader, "freqX"); - freqYLoc = GetShaderLocation(shader, "freqY"); - ampXLoc = GetShaderLocation(shader, "ampX"); - ampYLoc = GetShaderLocation(shader, "ampY"); - speedXLoc = GetShaderLocation(shader, "speedX"); - speedYLoc = GetShaderLocation(shader, "speedY"); + secondsLoc = GetShaderLocation(shader, "secondes"); + freqXLoc = GetShaderLocation(shader, "freqX"); + freqYLoc = GetShaderLocation(shader, "freqY"); + ampXLoc = GetShaderLocation(shader, "ampX"); + ampYLoc = GetShaderLocation(shader, "ampY"); + speedXLoc = GetShaderLocation(shader, "speedX"); + speedYLoc = GetShaderLocation(shader, "speedY"); float screenSize[2] = { (float)GetScreenWidth(), (float)GetScreenHeight() }; - SetShaderValue(shader, GetShaderLocation(shader, "size"), &screenSize, UNIFORM_VEC2); - SetShaderValue(shader, freqXLoc, &freqX, UNIFORM_FLOAT); - SetShaderValue(shader, freqYLoc, &freqY, UNIFORM_FLOAT); - SetShaderValue(shader, ampXLoc, &X, UNIFORM_FLOAT); - SetShaderValue(shader, ampYLoc, &Y, UNIFORM_FLOAT); - SetShaderValue(shader, speedXLoc, &speedX, UNIFORM_FLOAT); - SetShaderValue(shader, speedYLoc, &speedY, UNIFORM_FLOAT); - + SetShaderValue(shader, GetShaderLocation(shader, "size"), &screenSize, UNIFORM_VEC2); + SetShaderValue(shader, freqXLoc, &freqX, UNIFORM_FLOAT); + SetShaderValue(shader, freqYLoc, &freqY, UNIFORM_FLOAT); + SetShaderValue(shader, ampXLoc, &X, UNIFORM_FLOAT); + SetShaderValue(shader, ampYLoc, &Y, UNIFORM_FLOAT); + SetShaderValue(shader, speedXLoc, &speedX, UNIFORM_FLOAT); + SetShaderValue(shader, speedYLoc, &speedY, UNIFORM_FLOAT); + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -113,11 +113,11 @@ int main() //-------------------------------------------------------------------------------------- UnloadShader(shader); // Unload shader UnloadTexture(texture); // Unload texture - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- - return 0; + return 0; } //---------------------------------------------------------------------------------- @@ -128,7 +128,7 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- seconds += GetFrameTime(); - + SetShaderValue(shader, secondsLoc, &seconds, UNIFORM_FLOAT); //---------------------------------------------------------------------------------- @@ -139,10 +139,10 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); BeginShaderMode(shader); - + DrawTexture(texture, 0, 0, WHITE); DrawTexture(texture, texture.width, 0, WHITE); - + EndShaderMode(); EndDrawing(); diff --git a/examples/web/shaders/shaders_texture_waves.data b/examples/web/shaders/shaders_texture_waves.data new file mode 100644 index 0000000..92aaa66 Binary files /dev/null and b/examples/web/shaders/shaders_texture_waves.data differ diff --git a/examples/web/shaders/shaders_texture_waves.html b/examples/web/shaders/shaders_texture_waves.html new file mode 100644 index 0000000..10a4729 --- /dev/null +++ b/examples/web/shaders/shaders_texture_waves.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shaders/shaders_texture_waves.js b/examples/web/shaders/shaders_texture_waves.js new file mode 100644 index 0000000..a7fdcdc --- /dev/null +++ b/examples/web/shaders/shaders_texture_waves.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="shaders/shaders_texture_waves.data";var REMOTE_PACKAGE_BASE="shaders_texture_waves.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","shaders",true,true);Module["FS_createPath"]("/resources/shaders","glsl100",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273584,DYNAMICTOP_PTR=30672;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shaders_texture_waves.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"tc":___lock,"C":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"B":___syscall146,"n":___syscall221,"ka":___syscall5,"A":___syscall54,"R":___syscall6,"z":___unlock,"y":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"zd":_emscripten_get_gamepad_status,"od":_emscripten_get_heap_size,"dd":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Kc":_emscripten_glActiveTexture,"Ac":_emscripten_glAttachShader,"sc":_emscripten_glBeginQueryEXT,"lc":_emscripten_glBindAttribLocation,"gc":_emscripten_glBindBuffer,"$b":_emscripten_glBindFramebuffer,"Ub":_emscripten_glBindRenderbuffer,"Lb":_emscripten_glBindTexture,"Db":_emscripten_glBindVertexArrayOES,"sb":_emscripten_glBlendColor,"lb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"le":_emscripten_glGetShaderInfoLog,"ke":_emscripten_glGetShaderPrecisionFormat,"je":_emscripten_glGetShaderSource,"ie":_emscripten_glGetShaderiv,"he":_emscripten_glGetString,"ge":_emscripten_glGetTexParameterfv,"fe":_emscripten_glGetTexParameteriv,"ee":_emscripten_glGetUniformLocation,"de":_emscripten_glGetUniformfv,"ce":_emscripten_glGetUniformiv,"be":_emscripten_glGetVertexAttribPointerv,"ae":_emscripten_glGetVertexAttribfv,"$d":_emscripten_glGetVertexAttribiv,"_d":_emscripten_glHint,"Zd":_emscripten_glIsBuffer,"Yd":_emscripten_glIsEnabled,"Xd":_emscripten_glIsFramebuffer,"Wd":_emscripten_glIsProgram,"Vd":_emscripten_glIsQueryEXT,"Ud":_emscripten_glIsRenderbuffer,"Td":_emscripten_glIsShader,"Sd":_emscripten_glIsTexture,"Rd":_emscripten_glIsVertexArrayOES,"Qd":_emscripten_glLineWidth,"Pd":_emscripten_glLinkProgram,"Od":_emscripten_glPixelStorei,"Nd":_emscripten_glPolygonOffset,"Md":_emscripten_glQueryCounterEXT,"Ld":_emscripten_glReadPixels,"Kd":_emscripten_glReleaseShaderCompiler,"Jd":_emscripten_glRenderbufferStorage,"Id":_emscripten_glSampleCoverage,"Hd":_emscripten_glScissor,"Gd":_emscripten_glShaderBinary,"Fd":_emscripten_glShaderSource,"Ed":_emscripten_glStencilFunc,"Dd":_emscripten_glStencilFuncSeparate,"Cd":_emscripten_glStencilMask,"Bd":_emscripten_glStencilMaskSeparate,"Ad":_emscripten_glStencilOp,"yd":_emscripten_glStencilOpSeparate,"xd":_emscripten_glTexImage2D,"wd":_emscripten_glTexParameterf,"vd":_emscripten_glTexParameterfv,"ud":_emscripten_glTexParameteri,"td":_emscripten_glTexParameteriv,"sd":_emscripten_glTexSubImage2D,"rd":_emscripten_glUniform1f,"qd":_emscripten_glUniform1fv,"pd":_emscripten_glUniform1i,"nd":_emscripten_glUniform1iv,"md":_emscripten_glUniform2f,"ld":_emscripten_glUniform2fv,"kd":_emscripten_glUniform2i,"jd":_emscripten_glUniform2iv,"id":_emscripten_glUniform3f,"hd":_emscripten_glUniform3fv,"gd":_emscripten_glUniform3i,"fd":_emscripten_glUniform3iv,"ed":_emscripten_glUniform4f,"cd":_emscripten_glUniform4fv,"bd":_emscripten_glUniform4i,"ad":_emscripten_glUniform4iv,"$c":_emscripten_glUniformMatrix2fv,"_c":_emscripten_glUniformMatrix3fv,"Zc":_emscripten_glUniformMatrix4fv,"Yc":_emscripten_glUseProgram,"Xc":_emscripten_glValidateProgram,"Wc":_emscripten_glVertexAttrib1f,"Vc":_emscripten_glVertexAttrib1fv,"Uc":_emscripten_glVertexAttrib2f,"Tc":_emscripten_glVertexAttrib2fv,"Sc":_emscripten_glVertexAttrib3f,"Rc":_emscripten_glVertexAttrib3fv,"Qc":_emscripten_glVertexAttrib4f,"Pc":_emscripten_glVertexAttrib4fv,"Oc":_emscripten_glVertexAttribDivisorANGLE,"Nc":_emscripten_glVertexAttribPointer,"Mc":_emscripten_glViewport,"Lc":_emscripten_memcpy_big,"Jc":_emscripten_request_pointerlock,"Ic":_emscripten_resize_heap,"O":_emscripten_run_script,"Hc":_emscripten_sample_gamepad_data,"Gc":_emscripten_set_click_callback_on_thread,"Fc":_emscripten_set_fullscreenchange_callback_on_thread,"Ec":_emscripten_set_gamepadconnected_callback_on_thread,"Dc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Cc":_emscripten_set_keypress_callback_on_thread,"Bc":_emscripten_set_main_loop,"zc":_emscripten_set_touchcancel_callback_on_thread,"yc":_emscripten_set_touchend_callback_on_thread,"xc":_emscripten_set_touchmove_callback_on_thread,"wc":_emscripten_set_touchstart_callback_on_thread,"vc":_exit,"uc":_glActiveTexture,"N":_glAttachShader,"k":_glBindAttribLocation,"d":_glBindBuffer,"m":_glBindTexture,"rc":_glBlendFunc,"u":_glBufferData,"x":_glBufferSubData,"M":_glClear,"L":_glClearColor,"qc":_glClearDepthf,"pc":_glCompileShader,"oc":_glCompressedTexImage2D,"nc":_glCreateProgram,"mc":_glCreateShader,"kc":_glCullFace,"t":_glDeleteBuffers,"w":_glDeleteProgram,"s":_glDeleteShader,"K":_glDeleteTextures,"jc":_glDepthFunc,"J":_glDetachShader,"ic":_glDisable,"r":_glDisableVertexAttribArray,"hc":_glDrawArrays,"fc":_glDrawElements,"I":_glEnable,"j":_glEnableVertexAttribArray,"ec":_glFrontFace,"q":_glGenBuffers,"dc":_glGenTextures,"cc":_glGetActiveUniform,"f":_glGetAttribLocation,"bc":_glGetFloatv,"ac":_glGetProgramInfoLog,"v":_glGetProgramiv,"_b":_glGetShaderInfoLog,"H":_glGetShaderiv,"l":_glGetString,"e":_glGetUniformLocation,"Zb":_glLinkProgram,"Yb":_glPixelStorei,"Xb":_glReadPixels,"Wb":_glShaderSource,"Vb":_glTexImage2D,"i":_glTexParameteri,"Tb":_glUniform1fv,"Sb":_glUniform1i,"G":_glUniform1iv,"Rb":_glUniform2fv,"Qb":_glUniform2iv,"Pb":_glUniform3fv,"Ob":_glUniform3iv,"Nb":_glUniform4f,"Mb":_glUniform4fv,"Kb":_glUniform4iv,"Jb":_glUniformMatrix4fv,"p":_glUseProgram,"h":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"o":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"F":_glfwTerminate,"g":_glfwWindowHint,"E":_llvm_stackrestore,"D":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["De"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shaders/shaders_texture_waves.wasm b/examples/web/shaders/shaders_texture_waves.wasm new file mode 100644 index 0000000..74e69ba Binary files /dev/null and b/examples/web/shaders/shaders_texture_waves.wasm differ diff --git a/examples/web/shapes/raygui.h b/examples/web/shapes/raygui.h index 3277d7e..9f907f6 100644 --- a/examples/web/shapes/raygui.h +++ b/examples/web/shapes/raygui.h @@ -108,6 +108,7 @@ #define RAYGUI_H #define RAYGUI_VERSION "2.0-dev" +#define RAYGUI_RICONS_SUPPORT #if !defined(RAYGUI_STANDALONE) #include "raylib.h" @@ -138,7 +139,7 @@ #define TEXTEDIT_CURSOR_BLINK_FRAMES 20 // Text edit controls cursor blink timming -#define NUM_CONTROLS 13 // Number of standard controls +#define NUM_CONTROLS 16 // Number of standard controls #define NUM_PROPS_DEFAULT 16 // Number of standard properties #define NUM_PROPS_EXTENDED 8 // Number of extended properties @@ -182,10 +183,10 @@ int width; int height; } Rectangle; - + // Texture2D type typedef struct Texture2D { } Texture2D; - + // Font type typedef struct Font { } Font; #endif @@ -216,10 +217,13 @@ typedef enum { CHECKBOX, COMBOBOX, DROPDOWNBOX, - TEXTBOX, // VALUEBOX, SPINNER, TEXTBOXMULTI -> TODO: Probably they should not be dependant on TEXTBOX style! + TEXTBOX, // TEXTBOXMULTI + VALUEBOX, + SPINNER, LISTVIEW, COLORPICKER, - SCROLLBAR + SCROLLBAR, + RESERVED } GuiControlStandard; // Gui default properties for every control @@ -277,11 +281,14 @@ typedef enum { // TextBox / TextBoxMulti / ValueBox / Spinner typedef enum { MULTILINE_PADDING = 16, - SPINNER_BUTTON_WIDTH, - SPINNER_BUTTON_PADDING, - SPINNER_BUTTON_BORDER_WIDTH } GuiTextBoxProperty; +typedef enum { + SELECT_BUTTON_WIDTH = 16, + SELECT_BUTTON_PADDING, + SELECT_BUTTON_BORDER_WIDTH +} GuiSpinnerProperty; + // CheckBox typedef enum { CHECK_TEXT_PADDING = 16 @@ -417,7 +424,7 @@ RAYGUIDEF const char *GuiIconText(int iconId, const char *text); // Get text wit #if defined(RAYGUI_STANDALONE) #define RICONS_STANDALONE #endif - + #define RICONS_IMPLEMENTATION #include "ricons.h" // Required for: raygui icons #endif @@ -573,8 +580,9 @@ static Rectangle GetTextBounds(int control, Rectangle bounds) case CHECKBOX: bounds.x += (bounds.width + GuiGetStyle(control, CHECK_TEXT_PADDING)); break; default: break; } - // TODO: Special cases: COMBOBOX, DROPDOWNBOX, SPINNER, LISTVIEW (scrollbar?) - // More special cases: CHECKBOX, SLIDER + + // TODO: Special cases (no label): COMBOBOX, DROPDOWNBOX, SPINNER, LISTVIEW (scrollbar?) + // More special cases (label side): CHECKBOX, SLIDER return textBounds; } @@ -635,7 +643,6 @@ static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color if ((text != NULL) && (text[0] != '\0')) textWidth += ICON_TEXT_PADDING; } #endif - // Check guiTextAlign global variables switch (alignment) { @@ -705,12 +712,6 @@ RAYGUIDEF void GuiFont(Font font) { guiFont = font; GuiSetStyle(DEFAULT, TEXT_SIZE, font.baseSize); - - // Populate all controls with new font size - for (int i = 1; i < NUM_CONTROLS; i++) GuiSetStyle(i, TEXT_SIZE, GuiGetStyle(DEFAULT, TEXT_SIZE)); - - // NOTE: Loaded font spacing must be set manually - //GuiSetStyle(DEFAULT, TEXT_SPACING, 1); } } @@ -775,8 +776,8 @@ RAYGUIDEF bool GuiWindowBox(Rectangle bounds, const char *text) GuiSetStyle(DEFAULT, TEXT_ALIGNMENT, defaultTextAlign); // Draw window close button - int buttonBorder = GuiGetStyle(BUTTON, BORDER_WIDTH); - int buttonTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); + int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH); + int tempTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); GuiSetStyle(BUTTON, BORDER_WIDTH, 1); GuiSetStyle(BUTTON, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); #if defined(RAYGUI_RICONS_SUPPORT) @@ -784,8 +785,8 @@ RAYGUIDEF bool GuiWindowBox(Rectangle bounds, const char *text) #else clicked = GuiButton(buttonRec, "x"); #endif - GuiSetStyle(BUTTON, BORDER_WIDTH, buttonBorder); - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, buttonTextAlignment); + GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth); + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, tempTextAlignment); //-------------------------------------------------------------------- return clicked; @@ -912,7 +913,7 @@ RAYGUIDEF Rectangle GuiScrollPanel(Rectangle bounds, Rectangle content, Vector2 if (IsKeyDown(KEY_DOWN)) scrollPos.y -= GuiGetStyle(SCROLLBAR, SCROLL_SPEED); if (IsKeyDown(KEY_UP)) scrollPos.y += GuiGetStyle(SCROLLBAR, SCROLL_SPEED); } - + scrollPos.y += GetMouseWheelMove()*20; } } @@ -946,14 +947,14 @@ RAYGUIDEF Rectangle GuiScrollPanel(Rectangle bounds, Rectangle content, Vector2 GuiSetStyle(SCROLLBAR, SLIDER_SIZE, ((bounds.height - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth)/content.height)* (bounds.height - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth)); scrollPos.y = -GuiScrollBar(verticalScrollBar, -scrollPos.y, verticalMin, verticalMax); } - + // Draw detail corner rectangle if both scroll bars are visible - if (hasHorizontalScrollBar && hasVerticalScrollBar) + if (hasHorizontalScrollBar && hasVerticalScrollBar) { // TODO: Consider scroll bars side - DrawRectangle(horizontalScrollBar.x + horizontalScrollBar.width + 2, - verticalScrollBar.y + verticalScrollBar.height + 2, - horizontalScrollBarWidth - 4, verticalScrollBarWidth - 4, + DrawRectangle(horizontalScrollBar.x + horizontalScrollBar.width + 2, + verticalScrollBar.y + verticalScrollBar.height + 2, + horizontalScrollBarWidth - 4, verticalScrollBarWidth - 4, Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT + (state*3))), guiAlpha)); } @@ -1258,14 +1259,15 @@ RAYGUIDEF int GuiComboBox(Rectangle bounds, const char *text, int active) // Draw selector using a custom button // NOTE: BORDER_WIDTH and TEXT_ALIGNMENT forced values - GuiSetStyle(BUTTON, BORDER_WIDTH, 1); + int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH); int tempTextAlign = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); + GuiSetStyle(BUTTON, BORDER_WIDTH, 1); GuiSetStyle(BUTTON, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); GuiButton(selector, TextFormat("%i/%i", active + 1, elementsCount)); GuiSetStyle(BUTTON, TEXT_ALIGNMENT, tempTextAlign); - GuiSetStyle(BUTTON, BORDER_WIDTH, 2); + GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth); //-------------------------------------------------------------------- return active; @@ -1325,7 +1327,7 @@ RAYGUIDEF bool GuiDropdownBox(Rectangle bounds, const char *text, int *active, b // Draw control //-------------------------------------------------------------------- - // TODO: Review this ugly hack... DROPDOWNBOX depends on GiListElement() that uses DEFAULT_TEXT_ALIGNMENT + // TODO: Review this ugly hack... DROPDOWNBOX depends on GuiListElement() that uses DEFAULT_TEXT_ALIGNMENT int tempTextAlign = GuiGetStyle(DEFAULT, TEXT_ALIGNMENT); GuiSetStyle(DEFAULT, TEXT_ALIGNMENT, GuiGetStyle(DROPDOWNBOX, TEXT_ALIGNMENT)); @@ -1355,14 +1357,14 @@ RAYGUIDEF bool GuiDropdownBox(Rectangle bounds, const char *text, int *active, b { if (i == auxActive && editMode) { - if (GuiListElement((Rectangle){ bounds.x, bounds.y + bounds.height*(i + 1) + GuiGetStyle(DROPDOWNBOX, INNER_PADDING), - bounds.width, bounds.height - GuiGetStyle(DROPDOWNBOX, INNER_PADDING) }, + if (GuiListElement((Rectangle){ bounds.x, bounds.y + bounds.height*(i + 1) + GuiGetStyle(DROPDOWNBOX, INNER_PADDING), + bounds.width, bounds.height - GuiGetStyle(DROPDOWNBOX, INNER_PADDING) }, elementsPtrs[i], true, true) == false) pressed = true; } else { - if (GuiListElement((Rectangle){ bounds.x, bounds.y + bounds.height*(i+1) + GuiGetStyle(DROPDOWNBOX, INNER_PADDING), - bounds.width, bounds.height - GuiGetStyle(DROPDOWNBOX, INNER_PADDING) }, + if (GuiListElement((Rectangle){ bounds.x, bounds.y + bounds.height*(i+1) + GuiGetStyle(DROPDOWNBOX, INNER_PADDING), + bounds.width, bounds.height - GuiGetStyle(DROPDOWNBOX, INNER_PADDING) }, elementsPtrs[i], false, true)) { auxActive = i; @@ -1386,7 +1388,7 @@ RAYGUIDEF bool GuiDropdownBox(Rectangle bounds, const char *text, int *active, b DrawTriangle((Vector2){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_RIGHT_PADDING), bounds.y + bounds.height/2 - 2 }, (Vector2){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_RIGHT_PADDING) + 5, bounds.y + bounds.height/2 - 2 + 5 }, - (Vector2){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_RIGHT_PADDING) + 10, bounds.y + bounds.height/2 - 2 }, + (Vector2){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_RIGHT_PADDING) + 10, bounds.y + bounds.height/2 - 2 }, Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3))), guiAlpha)); //-------------------------------------------------------------------- @@ -1401,10 +1403,10 @@ RAYGUIDEF bool GuiSpinner(Rectangle bounds, int *value, int minValue, int maxVal bool pressed = false; int tempValue = *value; - Rectangle spinner = { bounds.x + GuiGetStyle(TEXTBOX, SPINNER_BUTTON_WIDTH) + GuiGetStyle(TEXTBOX, SPINNER_BUTTON_PADDING), bounds.y, - bounds.width - 2*(GuiGetStyle(TEXTBOX, SPINNER_BUTTON_WIDTH) + GuiGetStyle(TEXTBOX, SPINNER_BUTTON_PADDING)), bounds.height }; - Rectangle leftButtonBound = { bounds.x, bounds.y, GuiGetStyle(TEXTBOX, SPINNER_BUTTON_WIDTH), bounds.height }; - Rectangle rightButtonBound = { bounds.x + bounds.width - GuiGetStyle(TEXTBOX, SPINNER_BUTTON_WIDTH), bounds.y, GuiGetStyle(TEXTBOX, SPINNER_BUTTON_WIDTH), bounds.height }; + Rectangle spinner = { bounds.x + GuiGetStyle(SPINNER, SELECT_BUTTON_WIDTH) + GuiGetStyle(SPINNER, SELECT_BUTTON_PADDING), bounds.y, + bounds.width - 2*(GuiGetStyle(SPINNER, SELECT_BUTTON_WIDTH) + GuiGetStyle(SPINNER, SELECT_BUTTON_PADDING)), bounds.height }; + Rectangle leftButtonBound = { bounds.x, bounds.y, GuiGetStyle(SPINNER, SELECT_BUTTON_WIDTH), bounds.height }; + Rectangle rightButtonBound = { bounds.x + bounds.width - GuiGetStyle(SPINNER, SELECT_BUTTON_WIDTH), bounds.y, GuiGetStyle(SPINNER, SELECT_BUTTON_WIDTH), bounds.height }; // Update control //-------------------------------------------------------------------- @@ -1417,12 +1419,13 @@ RAYGUIDEF bool GuiSpinner(Rectangle bounds, int *value, int minValue, int maxVal // Draw control //-------------------------------------------------------------------- + // TODO: Set Spinner properties for ValueBox pressed = GuiValueBox(spinner, &tempValue, minValue, maxValue, editMode); // Draw value selector custom buttons // NOTE: BORDER_WIDTH and TEXT_ALIGNMENT forced values int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH); - GuiSetStyle(BUTTON, BORDER_WIDTH, GuiGetStyle(TEXTBOX, SPINNER_BUTTON_BORDER_WIDTH)); + GuiSetStyle(BUTTON, BORDER_WIDTH, GuiGetStyle(SPINNER, BORDER_WIDTH)); int tempTextAlign = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); GuiSetStyle(BUTTON, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); @@ -1476,7 +1479,7 @@ RAYGUIDEF bool GuiValueBox(Rectangle bounds, int *value, int minValue, int maxVa // Only allow keys in range [48..57] if (keyCount < VALUEBOX_MAX_CHARS) { - int maxWidth = (bounds.width - (GuiGetStyle(DEFAULT, INNER_PADDING)*2)); + int maxWidth = (bounds.width - (GuiGetStyle(VALUEBOX, INNER_PADDING)*2)); if (GetTextWidth(text) < maxWidth) { int key = GetKeyPressed(); @@ -1536,19 +1539,19 @@ RAYGUIDEF bool GuiValueBox(Rectangle bounds, int *value, int minValue, int maxVa // Draw control //-------------------------------------------------------------------- - DrawRectangleLinesEx(bounds, GuiGetStyle(TEXTBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER + (state*3))), guiAlpha)); + DrawRectangleLinesEx(bounds, GuiGetStyle(VALUEBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(VALUEBOX, BORDER + (state*3))), guiAlpha)); if (state == GUI_STATE_PRESSED) { - DrawRectangle(bounds.x + GuiGetStyle(TEXTBOX, BORDER_WIDTH), bounds.y + GuiGetStyle(TEXTBOX, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(TEXTBOX, BORDER_WIDTH), bounds.height - 2*GuiGetStyle(TEXTBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TEXTBOX, BASE_COLOR_FOCUSED)), guiAlpha)); - if (editMode && ((framesCounter/20)%2 == 0)) DrawRectangle(bounds.x + GetTextWidth(text)/2 + bounds.width/2 + 2, bounds.y + GuiGetStyle(TEXTBOX, INNER_PADDING), 1, bounds.height - GuiGetStyle(TEXTBOX, INNER_PADDING)*2, Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER_COLOR_FOCUSED)), guiAlpha)); + DrawRectangle(bounds.x + GuiGetStyle(VALUEBOX, BORDER_WIDTH), bounds.y + GuiGetStyle(VALUEBOX, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(VALUEBOX, BORDER_WIDTH), bounds.height - 2*GuiGetStyle(VALUEBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(VALUEBOX, BASE_COLOR_FOCUSED)), guiAlpha)); + if (editMode && ((framesCounter/20)%2 == 0)) DrawRectangle(bounds.x + GetTextWidth(text)/2 + bounds.width/2 + 2, bounds.y + GuiGetStyle(VALUEBOX, INNER_PADDING), 1, bounds.height - GuiGetStyle(VALUEBOX, INNER_PADDING)*2, Fade(GetColor(GuiGetStyle(VALUEBOX, BORDER_COLOR_FOCUSED)), guiAlpha)); } else if (state == GUI_STATE_DISABLED) { - DrawRectangle(bounds.x + GuiGetStyle(TEXTBOX, BORDER_WIDTH), bounds.y + GuiGetStyle(TEXTBOX, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(TEXTBOX, BORDER_WIDTH), bounds.height - 2*GuiGetStyle(TEXTBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TEXTBOX, BASE_COLOR_DISABLED)), guiAlpha)); + DrawRectangle(bounds.x + GuiGetStyle(VALUEBOX, BORDER_WIDTH), bounds.y + GuiGetStyle(VALUEBOX, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(VALUEBOX, BORDER_WIDTH), bounds.height - 2*GuiGetStyle(VALUEBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(VALUEBOX, BASE_COLOR_DISABLED)), guiAlpha)); } - GuiDrawText(text, GetTextBounds(TEXTBOX, bounds), GuiGetStyle(TEXTBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(TEXTBOX, TEXT + (state*3))), guiAlpha)); + GuiDrawText(text, GetTextBounds(VALUEBOX, bounds), GuiGetStyle(VALUEBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(VALUEBOX, TEXT + (state*3))), guiAlpha)); //-------------------------------------------------------------------- return pressed; @@ -1637,10 +1640,9 @@ RAYGUIDEF bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editM if (state == GUI_STATE_PRESSED) { DrawRectangle(bounds.x + GuiGetStyle(TEXTBOX, BORDER_WIDTH), bounds.y + GuiGetStyle(TEXTBOX, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(TEXTBOX, BORDER_WIDTH), bounds.height - 2*GuiGetStyle(TEXTBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TEXTBOX, BASE_COLOR_FOCUSED)), guiAlpha)); - + // Draw blinking cursor - // TODO: Consider TEXTBOX TEXT_ALIGNMENT - if (editMode && ((framesCounter/20)%2 == 0)) DrawRectangle(bounds.x + GuiGetStyle(TEXTBOX, INNER_PADDING) + GetTextWidth(text) + 2, bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE), 1, GuiGetStyle(DEFAULT, TEXT_SIZE)*2, Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER_COLOR_PRESSED)), guiAlpha)); + if (editMode && ((framesCounter/20)%2 == 0)) DrawRectangle(bounds.x + GuiGetStyle(TEXTBOX, INNER_PADDING) + GetTextWidth(text) + 2 + bounds.width/2*GuiGetStyle(TEXTBOX, TEXT_ALIGNMENT), bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE), 1, GuiGetStyle(DEFAULT, TEXT_SIZE)*2, Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER_COLOR_PRESSED)), guiAlpha)); } else if (state == GUI_STATE_DISABLED) { @@ -1908,7 +1910,7 @@ RAYGUIDEF float GuiSliderPro(Rectangle bounds, const char *text, float value, fl if (value > maxValue) value = maxValue; else if (value < minValue) value = minValue; } - + // Bar limits check if (sliderWidth > 0) // Slider { @@ -1932,7 +1934,7 @@ RAYGUIDEF float GuiSliderPro(Rectangle bounds, const char *text, float value, fl // TODO: Review showValue parameter, really ugly... if (showValue) GuiDrawText(TextFormat("%.02f", value), (Rectangle){ bounds.x + bounds.width + GuiGetStyle(SLIDER, TEXT_PADDING), bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2 + GuiGetStyle(SLIDER, INNER_PADDING), - GuiGetStyle(DEFAULT, TEXT_SIZE), GuiGetStyle(DEFAULT, TEXT_SIZE) }, GUI_TEXT_ALIGN_LEFT, + GuiGetStyle(DEFAULT, TEXT_SIZE), GuiGetStyle(DEFAULT, TEXT_SIZE) }, GUI_TEXT_ALIGN_LEFT, Fade(GetColor(GuiGetStyle(SLIDER, TEXT + (state*3))), guiAlpha)); //-------------------------------------------------------------------- @@ -2043,7 +2045,7 @@ RAYGUIDEF int GuiScrollBar(Rectangle bounds, int value, int minValue, int maxVal const int range = maxValue - minValue; int sliderSize = GuiGetStyle(SCROLLBAR, SLIDER_SIZE); - + // Calculate rectangles for all of the components spinnerUpLeft = (Rectangle){ bounds.x + GuiGetStyle(SCROLLBAR, BORDER_WIDTH), bounds.y + GuiGetStyle(SCROLLBAR, BORDER_WIDTH), spinnerSize, spinnerSize }; @@ -2397,7 +2399,7 @@ RAYGUIDEF bool GuiListViewEx(Rectangle bounds, const char **text, int count, int } const int slider = GuiGetStyle(SCROLLBAR, SLIDER_SIZE); // Save default slider size - + // Calculate percentage of visible elements and apply same percentage to scrollbar if (useScrollBar) { @@ -2754,12 +2756,12 @@ RAYGUIDEF int GuiMessageBox(Rectangle bounds, const char *windowTitle, const cha #define MESSAGEBOX_BUTTON_PADDING 10 int clicked = -1; // Returns clicked button from buttons list, 0 refers to closed window button - + int buttonsCount = 0; const char **buttonsText = GuiTextSplit(buttons, &buttonsCount, NULL); Vector2 textSize = MeasureTextEx(guiFont, message, GuiGetStyle(DEFAULT, TEXT_SIZE), 1); - + Rectangle textBounds = { 0 }; textBounds.x = bounds.x + bounds.width/2 - textSize.x/2; textBounds.y = bounds.y + WINDOW_STATUSBAR_HEIGHT + (bounds.height - WINDOW_STATUSBAR_HEIGHT)/4 - textSize.y/2; @@ -2775,7 +2777,7 @@ RAYGUIDEF int GuiMessageBox(Rectangle bounds, const char *windowTitle, const cha // Draw control //-------------------------------------------------------------------- if (GuiWindowBox(bounds, windowTitle)) clicked = 0; - + int prevTextAlignment = GuiGetStyle(LABEL, TEXT_ALIGNMENT); GuiSetStyle(LABEL, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); GuiLabel(textBounds, message); @@ -2783,13 +2785,13 @@ RAYGUIDEF int GuiMessageBox(Rectangle bounds, const char *windowTitle, const cha prevTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); GuiSetStyle(BUTTON, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); - + for (int i = 0; i < buttonsCount; i++) { if (GuiButton(buttonBounds, buttonsText[i])) clicked = i + 1; buttonBounds.x += (buttonBounds.width + MESSAGEBOX_BUTTON_PADDING); } - + GuiSetStyle(BUTTON, TEXT_ALIGNMENT, prevTextAlignment); //-------------------------------------------------------------------- @@ -2889,7 +2891,7 @@ RAYGUIDEF void GuiLoadStyle(const char *fileName) // Font loading is highly dependant on raylib API to load font data and image // TODO: Find some mechanism to support it in standalone mode - + #if !defined(RAYGUI_STANDALONE) // Load custom font if available int fontDataSize = 0; @@ -2944,7 +2946,7 @@ RAYGUIDEF void GuiLoadStyle(const char *fileName) } #endif } - + fclose(rgsFile); } } @@ -2958,7 +2960,7 @@ RAYGUIDEF void GuiLoadStyleProps(const int *props, int count) // Load style palette values from array (complete property sets) for (int i = 0; i < completeSets; i++) { - for (int j = 0; j < (NUM_PROPS_DEFAULT + NUM_PROPS_EXTENDED); i++) GuiSetStyle(i, j, props[i]); + for (int j = 0; j < (NUM_PROPS_DEFAULT + NUM_PROPS_EXTENDED); j++) GuiSetStyle(i, j, props[i]); } // Load style palette values from array (uncomplete property set) @@ -3015,10 +3017,10 @@ RAYGUIDEF void GuiLoadStyleDefault(void) GuiSetStyle(TEXTBOX, INNER_PADDING, 4); GuiSetStyle(TEXTBOX, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_LEFT); GuiSetStyle(TEXTBOX, MULTILINE_PADDING, 5); - GuiSetStyle(TEXTBOX, SPINNER_BUTTON_WIDTH, 20); // SPINNER specific property - GuiSetStyle(TEXTBOX, SPINNER_BUTTON_PADDING, 2); // SPINNER specific property - GuiSetStyle(TEXTBOX, SPINNER_BUTTON_BORDER_WIDTH, 1); // SPINNER specific property - //GuiSetStyle(VALUEBOX, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); // TODO. + GuiSetStyle(VALUEBOX, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); + GuiSetStyle(SPINNER, SELECT_BUTTON_WIDTH, 20); + GuiSetStyle(SPINNER, SELECT_BUTTON_PADDING, 2); + GuiSetStyle(SPINNER, SELECT_BUTTON_BORDER_WIDTH, 1); GuiSetStyle(COLORPICKER, COLOR_SELECTOR_SIZE, 6); GuiSetStyle(COLORPICKER, BAR_WIDTH, 0x14); GuiSetStyle(COLORPICKER, BAR_PADDING, 0xa); @@ -3049,15 +3051,15 @@ RAYGUIDEF void GuiUpdateStyleComplete(void) } // Get text with icon id prepended -// NOTE: Useful to add icons by name id (enum) instead of +// NOTE: Useful to add icons by name id (enum) instead of // a number that can change between ricon versions RAYGUIDEF const char *GuiIconText(int iconId, const char *text) { static char buffer[1024] = { 0 }; memset(buffer, 0, 1024); - + sprintf(buffer, "#%03i#", iconId); - + if (text != NULL) { for (int i = 5; i < 1024; i++) @@ -3066,7 +3068,7 @@ RAYGUIDEF const char *GuiIconText(int iconId, const char *text) if (text[i - 5] == '\0') break; } } - + return buffer; } diff --git a/examples/web/shapes/shapes_basic_shapes.c b/examples/web/shapes/shapes_basic_shapes.c index 673875a..826d6dd 100644 --- a/examples/web/shapes/shapes_basic_shapes.c +++ b/examples/web/shapes/shapes_basic_shapes.c @@ -29,20 +29,20 @@ const int screenHeight = 450; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [shapes] example - basic shapes drawing"); - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { diff --git a/examples/web/shapes/shapes_basic_shapes.html b/examples/web/shapes/shapes_basic_shapes.html new file mode 100644 index 0000000..2cbdc5e --- /dev/null +++ b/examples/web/shapes/shapes_basic_shapes.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_basic_shapes.js b/examples/web/shapes/shapes_basic_shapes.js new file mode 100644 index 0000000..06db6fb --- /dev/null +++ b/examples/web/shapes/shapes_basic_shapes.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269600,DYNAMICTOP_PTR=26688;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_basic_shapes.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_basic_shapes.wasm b/examples/web/shapes/shapes_basic_shapes.wasm new file mode 100644 index 0000000..050a227 Binary files /dev/null and b/examples/web/shapes/shapes_basic_shapes.wasm differ diff --git a/examples/web/shapes/shapes_bouncing_ball.c b/examples/web/shapes/shapes_bouncing_ball.c index 8f5ebbb..cd416ae 100644 --- a/examples/web/shapes/shapes_bouncing_ball.c +++ b/examples/web/shapes/shapes_bouncing_ball.c @@ -28,7 +28,7 @@ Vector2 ballPosition = { 0.0f }; Vector2 ballSpeed = { 5.0f, 4.0f }; int ballRadius = 20; -bool pause = 0; +static bool pause = 0; int framesCounter = 0; //---------------------------------------------------------------------------------- @@ -37,22 +37,22 @@ int framesCounter = 0; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //--------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [shapes] example - bouncing ball"); - - ballPosition = (Vector2){ GetScreenWidth()/2, GetScreenHeight()/2 }; + + ballPosition = (Vector2){ GetScreenWidth()/2, GetScreenHeight()/2 }; #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -64,7 +64,7 @@ int main() //--------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //---------------------------------------------------------- - + return 0; } @@ -76,33 +76,33 @@ void UpdateDrawFrame(void) // Update //----------------------------------------------------- if (IsKeyPressed(KEY_SPACE)) pause = !pause; - + if (!pause) { ballPosition.x += ballSpeed.x; ballPosition.y += ballSpeed.y; - + // Check walls collision for bouncing if ((ballPosition.x >= (GetScreenWidth() - ballRadius)) || (ballPosition.x <= ballRadius)) ballSpeed.x *= -1.0f; if ((ballPosition.y >= (GetScreenHeight() - ballRadius)) || (ballPosition.y <= ballRadius)) ballSpeed.y *= -1.0f; } else framesCounter++; //----------------------------------------------------- - + // Draw //----------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + DrawCircleV(ballPosition, ballRadius, MAROON); DrawText("PRESS SPACE to PAUSE BALL MOVEMENT", 10, GetScreenHeight() - 25, 20, LIGHTGRAY); - + // On pause, we draw a blinking message if (pause && ((framesCounter/30)%2)) DrawText("PAUSED", 350, 200, 30, GRAY); DrawFPS(10, 10); - + EndDrawing(); //----------------------------------------------------- } diff --git a/examples/web/shapes/shapes_bouncing_ball.html b/examples/web/shapes/shapes_bouncing_ball.html new file mode 100644 index 0000000..a743950 --- /dev/null +++ b/examples/web/shapes/shapes_bouncing_ball.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_bouncing_ball.js b/examples/web/shapes/shapes_bouncing_ball.js new file mode 100644 index 0000000..6243642 --- /dev/null +++ b/examples/web/shapes/shapes_bouncing_ball.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5270672,DYNAMICTOP_PTR=27760;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_bouncing_ball.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_bouncing_ball.wasm b/examples/web/shapes/shapes_bouncing_ball.wasm new file mode 100644 index 0000000..f5bca3a Binary files /dev/null and b/examples/web/shapes/shapes_bouncing_ball.wasm differ diff --git a/examples/web/shapes/shapes_collision_area.c b/examples/web/shapes/shapes_collision_area.c index e2cc80f..f2386d7 100644 --- a/examples/web/shapes/shapes_collision_area.c +++ b/examples/web/shapes/shapes_collision_area.c @@ -25,14 +25,14 @@ const int screenHeight = 450; Rectangle boxA = { 0 }; Rectangle boxB = { 0 }; - + int boxASpeedX = 4; Rectangle boxCollision = { 0 }; // Collision rectangle int screenUpperLimit = 40; // Top menu limits -bool pause = false; // Movement pause +static bool pause = false; // Movement pause bool collision = false; // Collision detection //---------------------------------------------------------------------------------- @@ -41,26 +41,26 @@ bool collision = false; // Collision detection void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //--------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [shapes] example - collision area"); - + // Box A: Moving box boxA = (Rectangle){ 10, GetScreenHeight()/2 - 50, 200, 100 }; - + // Box B: Mouse moved box boxB = (Rectangle){ GetScreenWidth()/2 - 30, GetScreenHeight()/2 - 30, 60, 60 }; - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -72,7 +72,7 @@ int main() //--------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //---------------------------------------------------------- - + return 0; } @@ -85,56 +85,56 @@ void UpdateDrawFrame(void) //----------------------------------------------------- // Move box if not paused if (!pause) boxA.x += boxASpeedX; - + // Bounce box on x screen limits if (((boxA.x + boxA.width) >= GetScreenWidth()) || (boxA.x <= 0)) boxASpeedX *= -1; - + // Update player-controlled-box (box02) boxB.x = GetMouseX() - boxB.width/2; boxB.y = GetMouseY() - boxB.height/2; - + // Make sure Box B does not go out of move area limits if ((boxB.x + boxB.width) >= GetScreenWidth()) boxB.x = GetScreenWidth() - boxB.width; else if (boxB.x <= 0) boxB.x = 0; - + if ((boxB.y + boxB.height) >= GetScreenHeight()) boxB.y = GetScreenHeight() - boxB.height; else if (boxB.y <= screenUpperLimit) boxB.y = screenUpperLimit; - + // Check boxes collision collision = CheckCollisionRecs(boxA, boxB); - + // Get collision rectangle (only on collision) if (collision) boxCollision = GetCollisionRec(boxA, boxB); - + // Pause Box A movement if (IsKeyPressed(KEY_SPACE)) pause = !pause; //----------------------------------------------------- - + // Draw //----------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + DrawRectangle(0, 0, screenWidth, screenUpperLimit, collision? RED : BLACK); DrawRectangleRec(boxA, GOLD); DrawRectangleRec(boxB, BLUE); - + if (collision) { // Draw collision area DrawRectangleRec(boxCollision, LIME); - + // Draw collision message DrawText("COLLISION!", GetScreenWidth()/2 - MeasureText("COLLISION!", 20)/2, screenUpperLimit/2 - 10, 20, BLACK); - + // Draw collision area DrawText(FormatText("Collision Area: %i", (int)boxCollision.width*(int)boxCollision.height), GetScreenWidth()/2 - 100, screenUpperLimit + 10, 20, BLACK); - } + } DrawFPS(10, 10); - + EndDrawing(); //----------------------------------------------------- } diff --git a/examples/web/shapes/shapes_collision_area.html b/examples/web/shapes/shapes_collision_area.html new file mode 100644 index 0000000..b57ef4f --- /dev/null +++ b/examples/web/shapes/shapes_collision_area.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_collision_area.js b/examples/web/shapes/shapes_collision_area.js new file mode 100644 index 0000000..a260655 --- /dev/null +++ b/examples/web/shapes/shapes_collision_area.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5270688,DYNAMICTOP_PTR=27776;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_collision_area.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_collision_area.wasm b/examples/web/shapes/shapes_collision_area.wasm new file mode 100644 index 0000000..a9e857a Binary files /dev/null and b/examples/web/shapes/shapes_collision_area.wasm differ diff --git a/examples/web/shapes/shapes_colors_palette.c b/examples/web/shapes/shapes_colors_palette.c index bbb0200..daff399 100644 --- a/examples/web/shapes/shapes_colors_palette.c +++ b/examples/web/shapes/shapes_colors_palette.c @@ -25,14 +25,14 @@ const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) -const Color colors[MAX_COLORS_COUNT] = { +const Color colors[MAX_COLORS_COUNT] = { DARKGRAY, MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, DARKBROWN, GRAY, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK, YELLOW, GREEN, SKYBLUE, PURPLE, BEIGE }; - -const char *colorNames[MAX_COLORS_COUNT] = { - "DARKGRAY", "MAROON", "ORANGE", "DARKGREEN", "DARKBLUE", "DARKPURPLE", - "DARKBROWN", "GRAY", "RED", "GOLD", "LIME", "BLUE", "VIOLET", "BROWN", + +const char *colorNames[MAX_COLORS_COUNT] = { + "DARKGRAY", "MAROON", "ORANGE", "DARKGREEN", "DARKBLUE", "DARKPURPLE", + "DARKBROWN", "GRAY", "RED", "GOLD", "LIME", "BLUE", "VIOLET", "BROWN", "LIGHTGRAY", "PINK", "YELLOW", "GREEN", "SKYBLUE", "PURPLE", "BEIGE" }; Rectangle colorsRecs[MAX_COLORS_COUNT] = { 0 }; // Rectangles array @@ -47,9 +47,9 @@ Vector2 mousePoint = { 0.0f }; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -69,7 +69,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -106,19 +106,19 @@ void UpdateDrawFrame(void) BeginDrawing(); ClearBackground(RAYWHITE); - + DrawText("raylib colors palette", 28, 42, 20, BLACK); DrawText("press SPACE to see all colors", GetScreenWidth() - 180, GetScreenHeight() - 40, 10, GRAY); for (int i = 0; i < MAX_COLORS_COUNT; i++) // Draw all rectangles { DrawRectangleRec(colorsRecs[i], Fade(colors[i], colorState[i]? 0.6f : 1.0f)); - - if (IsKeyDown(KEY_SPACE) || colorState[i]) + + if (IsKeyDown(KEY_SPACE) || colorState[i]) { DrawRectangle(colorsRecs[i].x, colorsRecs[i].y + colorsRecs[i].height - 26, colorsRecs[i].width, 20, BLACK); DrawRectangleLinesEx(colorsRecs[i], 6, Fade(BLACK, 0.3f)); - DrawText(colorNames[i], colorsRecs[i].x + colorsRecs[i].width - MeasureText(colorNames[i], 10) - 12, + DrawText(colorNames[i], colorsRecs[i].x + colorsRecs[i].width - MeasureText(colorNames[i], 10) - 12, colorsRecs[i].y + colorsRecs[i].height - 20, 10, colors[i]); } } diff --git a/examples/web/shapes/shapes_colors_palette.html b/examples/web/shapes/shapes_colors_palette.html new file mode 100644 index 0000000..362c8d7 --- /dev/null +++ b/examples/web/shapes/shapes_colors_palette.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_colors_palette.js b/examples/web/shapes/shapes_colors_palette.js new file mode 100644 index 0000000..fa3ce13 --- /dev/null +++ b/examples/web/shapes/shapes_colors_palette.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5270400,DYNAMICTOP_PTR=27488;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_colors_palette.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"N":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"jc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"bc":_glDepthFunc,"G":_glDetachShader,"ac":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"E":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"Db":_glfwGetKey,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"tb":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_colors_palette.wasm b/examples/web/shapes/shapes_colors_palette.wasm new file mode 100644 index 0000000..fd4fb81 Binary files /dev/null and b/examples/web/shapes/shapes_colors_palette.wasm differ diff --git a/examples/web/shapes/shapes_draw_circle_sector.c b/examples/web/shapes/shapes_draw_circle_sector.c index b3c498c..68f56a4 100644 --- a/examples/web/shapes/shapes_draw_circle_sector.c +++ b/examples/web/shapes/shapes_draw_circle_sector.c @@ -41,9 +41,9 @@ int segments = 0; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -59,7 +59,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -68,7 +68,7 @@ int main() #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -84,32 +84,32 @@ void UpdateDrawFrame(void) //---------------------------------------------------------------------------------- // NOTE: All variables update happens inside GUI control functions //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + DrawLine(500, 0, 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.6f)); DrawRectangle(500, 0, GetScreenWidth() - 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.3f)); DrawCircleSector(center, outerRadius, startAngle, endAngle, segments, Fade(MAROON, 0.3)); DrawCircleSectorLines(center, outerRadius, startAngle, endAngle, segments, Fade(MAROON, 0.6)); - + // Draw GUI controls //------------------------------------------------------------------------------ startAngle = GuiSliderBar((Rectangle){ 600, 40, 120, 20}, "StartAngle", startAngle, 0, 720, true ); endAngle = GuiSliderBar((Rectangle){ 600, 70, 120, 20}, "EndAngle", endAngle, 0, 720, true); - + outerRadius = GuiSliderBar((Rectangle){ 600, 140, 120, 20}, "Radius", outerRadius, 0, 200, true); segments = GuiSliderBar((Rectangle){ 600, 170, 120, 20}, "Segments", segments, 0, 100, true); //------------------------------------------------------------------------------ - + DrawText(FormatText("MODE: %s", (segments >= 4)? "MANUAL" : "AUTO"), 600, 200, 10, (segments >= 4)? MAROON : DARKGRAY); - + DrawFPS(10, 10); - + EndDrawing(); //---------------------------------------------------------------------------------- } diff --git a/examples/web/shapes/shapes_draw_circle_sector.html b/examples/web/shapes/shapes_draw_circle_sector.html new file mode 100644 index 0000000..53d930a --- /dev/null +++ b/examples/web/shapes/shapes_draw_circle_sector.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_draw_circle_sector.js b/examples/web/shapes/shapes_draw_circle_sector.js new file mode 100644 index 0000000..f68d85a --- /dev/null +++ b/examples/web/shapes/shapes_draw_circle_sector.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5270960,DYNAMICTOP_PTR=28048;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_draw_circle_sector.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"N":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"jc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"bc":_glDepthFunc,"G":_glDetachShader,"ac":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"E":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"Db":_glfwGetMouseButton,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"tb":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_draw_circle_sector.wasm b/examples/web/shapes/shapes_draw_circle_sector.wasm new file mode 100644 index 0000000..72ce610 Binary files /dev/null and b/examples/web/shapes/shapes_draw_circle_sector.wasm differ diff --git a/examples/web/shapes/shapes_draw_rectangle_rounded.c b/examples/web/shapes/shapes_draw_rectangle_rounded.c index 6cf0f20..1bbcbd3 100644 --- a/examples/web/shapes/shapes_draw_rectangle_rounded.c +++ b/examples/web/shapes/shapes_draw_rectangle_rounded.c @@ -44,7 +44,7 @@ bool drawRoundedLines = false; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -57,7 +57,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -66,7 +66,7 @@ int main(void) #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -82,20 +82,20 @@ void UpdateDrawFrame(void) //---------------------------------------------------------------------------------- Rectangle rec = { (GetScreenWidth() - width - 250)/2, (GetScreenHeight() - height)/2, width, height }; //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + DrawLine(560, 0, 560, GetScreenHeight(), Fade(LIGHTGRAY, 0.6f)); DrawRectangle(560, 0, GetScreenWidth() - 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.3f)); if (drawRect) DrawRectangleRec(rec, Fade(GOLD, 0.6)); if (drawRoundedRect) DrawRectangleRounded(rec, roundness, segments, Fade(MAROON, 0.2)); if (drawRoundedLines) DrawRectangleRoundedLines(rec,roundness, segments, lineThick, Fade(MAROON, 0.4)); - + // Draw GUI controls //------------------------------------------------------------------------------ width = GuiSliderBar((Rectangle){ 640, 40, 105, 20 }, "Width", width, 0, GetScreenWidth() - 300, true ); @@ -103,16 +103,16 @@ void UpdateDrawFrame(void) roundness = GuiSliderBar((Rectangle){ 640, 140, 105, 20 }, "Roundness", roundness, 0.0f, 1.0f, true); lineThick = GuiSliderBar((Rectangle){ 640, 170, 105, 20 }, "Thickness", lineThick, 0, 20, true); segments = GuiSliderBar((Rectangle){ 640, 240, 105, 20}, "Segments", segments, 0, 60, true); - + drawRoundedRect = GuiCheckBox((Rectangle){ 640, 320, 20, 20 }, "DrawRoundedRect", drawRoundedRect); drawRoundedLines = GuiCheckBox((Rectangle){ 640, 350, 20, 20 }, "DrawRoundedLines", drawRoundedLines); drawRect = GuiCheckBox((Rectangle){ 640, 380, 20, 20}, "DrawRect", drawRect); //------------------------------------------------------------------------------ - + DrawText(FormatText("MODE: %s", (segments >= 4)? "MANUAL" : "AUTO"), 640, 280, 10, (segments >= 4)? MAROON : DARKGRAY); - + DrawFPS(10, 10); - + EndDrawing(); //---------------------------------------------------------------------------------- } diff --git a/examples/web/shapes/shapes_draw_rectangle_rounded.html b/examples/web/shapes/shapes_draw_rectangle_rounded.html new file mode 100644 index 0000000..1a83605 --- /dev/null +++ b/examples/web/shapes/shapes_draw_rectangle_rounded.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_draw_rectangle_rounded.js b/examples/web/shapes/shapes_draw_rectangle_rounded.js new file mode 100644 index 0000000..7ad7562 --- /dev/null +++ b/examples/web/shapes/shapes_draw_rectangle_rounded.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5271024,DYNAMICTOP_PTR=28112;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_draw_rectangle_rounded.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"N":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"jc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"bc":_glDepthFunc,"G":_glDetachShader,"ac":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"E":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"Db":_glfwGetMouseButton,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"tb":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_draw_rectangle_rounded.wasm b/examples/web/shapes/shapes_draw_rectangle_rounded.wasm new file mode 100644 index 0000000..50ffac0 Binary files /dev/null and b/examples/web/shapes/shapes_draw_rectangle_rounded.wasm differ diff --git a/examples/web/shapes/shapes_draw_ring.c b/examples/web/shapes/shapes_draw_ring.c index 37a5196..5c2a679 100644 --- a/examples/web/shapes/shapes_draw_ring.c +++ b/examples/web/shapes/shapes_draw_ring.c @@ -47,22 +47,22 @@ bool drawCircleLines = false; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [shapes] example - draw ring"); center = (Vector2){ (GetScreenWidth() - 300)/2, GetScreenHeight()/2 }; - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -71,7 +71,7 @@ int main() #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -87,13 +87,13 @@ void UpdateDrawFrame(void) //---------------------------------------------------------------------------------- // NOTE: All variables update happens inside GUI control functions //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + DrawLine(500, 0, 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.6f)); DrawRectangle(500, 0, GetScreenWidth() - 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.3f)); @@ -105,21 +105,21 @@ void UpdateDrawFrame(void) //------------------------------------------------------------------------------ startAngle = GuiSliderBar((Rectangle){ 600, 40, 120, 20 }, "StartAngle", startAngle, -450, 450, true); endAngle = GuiSliderBar((Rectangle){ 600, 70, 120, 20 }, "EndAngle", endAngle, -450, 450, true); - + innerRadius = GuiSliderBar((Rectangle){ 600, 140, 120, 20 }, "InnerRadius", innerRadius, 0, 100, true); outerRadius = GuiSliderBar((Rectangle){ 600, 170, 120, 20 }, "OuterRadius", outerRadius, 0, 200, true); - + segments = GuiSliderBar((Rectangle){ 600, 240, 120, 20 }, "Segments", segments, 0, 100, true); - + drawRing = GuiCheckBox((Rectangle){ 600, 320, 20, 20 }, "Draw Ring", drawRing); drawRingLines = GuiCheckBox((Rectangle){ 600, 350, 20, 20 }, "Draw RingLines", drawRingLines); drawCircleLines = GuiCheckBox((Rectangle){ 600, 380, 20, 20 }, "Draw CircleLines", drawCircleLines); //------------------------------------------------------------------------------ - + DrawText(FormatText("MODE: %s", (segments >= 4)? "MANUAL" : "AUTO"), 600, 270, 10, (segments >= 4)? MAROON : DARKGRAY); - + DrawFPS(10, 10); - + EndDrawing(); //---------------------------------------------------------------------------------- } diff --git a/examples/web/shapes/shapes_draw_ring.html b/examples/web/shapes/shapes_draw_ring.html new file mode 100644 index 0000000..7953c94 --- /dev/null +++ b/examples/web/shapes/shapes_draw_ring.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_draw_ring.js b/examples/web/shapes/shapes_draw_ring.js new file mode 100644 index 0000000..6c3b94c --- /dev/null +++ b/examples/web/shapes/shapes_draw_ring.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5271008,DYNAMICTOP_PTR=28096;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_draw_ring.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"N":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"jc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"bc":_glDepthFunc,"G":_glDetachShader,"ac":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"E":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"Db":_glfwGetMouseButton,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"tb":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_draw_ring.wasm b/examples/web/shapes/shapes_draw_ring.wasm new file mode 100644 index 0000000..fefe786 Binary files /dev/null and b/examples/web/shapes/shapes_draw_ring.wasm differ diff --git a/examples/web/shapes/shapes_easings_ball_anim.c b/examples/web/shapes/shapes_easings_ball_anim.c index 94de9fe..b841237 100644 --- a/examples/web/shapes/shapes_easings_ball_anim.c +++ b/examples/web/shapes/shapes_easings_ball_anim.c @@ -39,20 +39,20 @@ int framesCounter = 0; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [shapes] example - easings ball anim"); - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -61,7 +61,7 @@ int main() #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -79,7 +79,7 @@ void UpdateDrawFrame(void) { framesCounter++; ballPositionX = EaseElasticOut(framesCounter, -100, screenWidth/2 + 100, 120); - + if (framesCounter >= 120) { framesCounter = 0; @@ -90,7 +90,7 @@ void UpdateDrawFrame(void) { framesCounter++; ballRadius = EaseElasticIn(framesCounter, 20, 500, 200); - + if (framesCounter >= 200) { framesCounter = 0; @@ -101,7 +101,7 @@ void UpdateDrawFrame(void) { framesCounter++; ballAlpha = EaseCubicOut(framesCounter, 0.0f, 1.0f, 200); - + if (framesCounter >= 200) { framesCounter = 0; @@ -110,7 +110,7 @@ void UpdateDrawFrame(void) } else if (state == 3) // Reset state to play again { - if (IsKeyPressed(KEY_ENTER)) + if (IsKeyPressed(KEY_ENTER)) { // Reset required variables to play again ballPositionX = -100; @@ -119,7 +119,7 @@ void UpdateDrawFrame(void) state = 0; } } - + if (IsKeyPressed(KEY_R)) framesCounter = 0; //---------------------------------------------------------------------------------- @@ -131,9 +131,9 @@ void UpdateDrawFrame(void) if (state >= 2) DrawRectangle(0, 0, screenWidth, screenHeight, GREEN); DrawCircle(ballPositionX, 200, ballRadius, Fade(RED, 1.0f - ballAlpha)); - + if (state == 3) DrawText("PRESS [ENTER] TO PLAY AGAIN!", 240, 200, 20, BLACK); - + EndDrawing(); //---------------------------------------------------------------------------------- } diff --git a/examples/web/shapes/shapes_easings_ball_anim.html b/examples/web/shapes/shapes_easings_ball_anim.html new file mode 100644 index 0000000..6f1d108 --- /dev/null +++ b/examples/web/shapes/shapes_easings_ball_anim.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_easings_ball_anim.js b/examples/web/shapes/shapes_easings_ball_anim.js new file mode 100644 index 0000000..07c65be --- /dev/null +++ b/examples/web/shapes/shapes_easings_ball_anim.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5270640,DYNAMICTOP_PTR=27728;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_easings_ball_anim.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"z":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"y":___syscall146,"l":___syscall221,"ka":___syscall5,"x":___syscall54,"R":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"ob":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"O":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"jc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"M":_glClear,"L":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"bc":_glDepthFunc,"H":_glDetachShader,"ac":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"G":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"wb":_glfwSetKeyCallback,"vb":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_exp2_f64,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_easings_ball_anim.wasm b/examples/web/shapes/shapes_easings_ball_anim.wasm new file mode 100644 index 0000000..c5ae4fc Binary files /dev/null and b/examples/web/shapes/shapes_easings_ball_anim.wasm differ diff --git a/examples/web/shapes/shapes_easings_box_anim.c b/examples/web/shapes/shapes_easings_box_anim.c index 0f67d51..4def3ed 100644 --- a/examples/web/shapes/shapes_easings_box_anim.c +++ b/examples/web/shapes/shapes_easings_box_anim.c @@ -39,14 +39,14 @@ int framesCounter = 0; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [shapes] example - easings box anim"); - + // Box variables to be animated with easings rec = (Rectangle){ GetScreenWidth()/2, -100, 100, 100 }; @@ -55,7 +55,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -64,7 +64,7 @@ int main() #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -83,12 +83,12 @@ void UpdateDrawFrame(void) case 0: // Move box down to center of screen { framesCounter++; - + // NOTE: Remember that 3rd parameter of easing function refers to // desired value variation, do not confuse it with expected final value! rec.y = EaseElasticOut(framesCounter, -100, GetScreenHeight()/2 + 100, 120); - if (framesCounter >= 120) + if (framesCounter >= 120) { framesCounter = 0; state = 1; @@ -99,8 +99,8 @@ void UpdateDrawFrame(void) framesCounter++; rec.height = EaseBounceOut(framesCounter, 100, -90, 120); rec.width = EaseBounceOut(framesCounter, 100, GetScreenWidth(), 120); - - if (framesCounter >= 120) + + if (framesCounter >= 120) { framesCounter = 0; state = 2; @@ -110,8 +110,8 @@ void UpdateDrawFrame(void) { framesCounter++; rotation = EaseQuadOut(framesCounter, 0.0f, 270.0f, 240); - - if (framesCounter >= 240) + + if (framesCounter >= 240) { framesCounter = 0; state = 3; @@ -121,8 +121,8 @@ void UpdateDrawFrame(void) { framesCounter++; rec.height = EaseCircOut(framesCounter, 10, GetScreenWidth(), 120); - - if (framesCounter >= 120) + + if (framesCounter >= 120) { framesCounter = 0; state = 4; @@ -132,7 +132,7 @@ void UpdateDrawFrame(void) { framesCounter++; alpha = EaseSineOut(framesCounter, 1.0f, -1.0f, 160); - + if (framesCounter >= 160) { framesCounter = 0; @@ -141,7 +141,7 @@ void UpdateDrawFrame(void) } break; default: break; } - + // Reset animation at any moment if (IsKeyPressed(KEY_SPACE)) { @@ -152,7 +152,7 @@ void UpdateDrawFrame(void) framesCounter = 0; } //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); @@ -160,7 +160,7 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); DrawRectanglePro(rec, (Vector2){ rec.width/2, rec.height/2 }, rotation, Fade(BLACK, alpha)); - + DrawText("PRESS [SPACE] TO RESET BOX ANIMATION!", 10, GetScreenHeight() - 25, 20, LIGHTGRAY); EndDrawing(); diff --git a/examples/web/shapes/shapes_easings_box_anim.html b/examples/web/shapes/shapes_easings_box_anim.html new file mode 100644 index 0000000..8f2ee38 --- /dev/null +++ b/examples/web/shapes/shapes_easings_box_anim.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_easings_box_anim.js b/examples/web/shapes/shapes_easings_box_anim.js new file mode 100644 index 0000000..cff9bec --- /dev/null +++ b/examples/web/shapes/shapes_easings_box_anim.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5270656,DYNAMICTOP_PTR=27744;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_easings_box_anim.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"N":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"jc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"bc":_glDepthFunc,"G":_glDetachShader,"ac":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"E":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"wb":_glfwSetKeyCallback,"vb":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"ob":_llvm_exp2_f64,"B":_llvm_stackrestore,"A":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_easings_box_anim.wasm b/examples/web/shapes/shapes_easings_box_anim.wasm new file mode 100644 index 0000000..34f70e4 Binary files /dev/null and b/examples/web/shapes/shapes_easings_box_anim.wasm differ diff --git a/examples/web/shapes/shapes_easings_rectangle_array.c b/examples/web/shapes/shapes_easings_rectangle_array.c index dda786e..dcd452a 100644 --- a/examples/web/shapes/shapes_easings_rectangle_array.c +++ b/examples/web/shapes/shapes_easings_rectangle_array.c @@ -2,7 +2,7 @@ * * raylib [shapes] example - easings rectangle array * -* NOTE: This example requires 'easings.h' library, provided on raylib/src. Just copy +* NOTE: This example requires 'easings.h' library, provided on raylib/src. Just copy * the library to same directory as example or make sure it's available on include path. * * This example has been created using raylib 2.0 (www.raylib.com) @@ -40,7 +40,7 @@ Rectangle recs[MAX_RECS_X*MAX_RECS_Y]; float rotation = 0.0f; int framesCounter = 0; -int state = 0; // Rectangles animation state: 0-Playing, 1-Finished +int state = 0; // Rectangles animation state: 0-Playing, 1-Finished //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -48,14 +48,14 @@ int state = 0; // Rectangles animation state: 0-Playing, 1-Fini void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [shapes] example - easings rectangle array"); - + for (int y = 0; y < MAX_RECS_Y; y++) { for (int x = 0; x < MAX_RECS_X; x++) @@ -66,13 +66,13 @@ int main() recs[y*MAX_RECS_X + x].height = RECS_HEIGHT; } } - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -81,7 +81,7 @@ int main() #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -99,16 +99,16 @@ void UpdateDrawFrame(void) { framesCounter++; - for (int i = 0; i < MAX_RECS_X*MAX_RECS_Y; i++) + for (int i = 0; i < MAX_RECS_X*MAX_RECS_Y; i++) { recs[i].height = EaseCircOut(framesCounter, RECS_HEIGHT, -RECS_HEIGHT, PLAY_TIME_IN_FRAMES); recs[i].width = EaseCircOut(framesCounter, RECS_WIDTH, -RECS_WIDTH, PLAY_TIME_IN_FRAMES); - + if (recs[i].height < 0) recs[i].height = 0; if (recs[i].width < 0) recs[i].width = 0; - + if ((recs[i].height == 0) && (recs[i].width == 0)) state = 1; // Finish playing - + rotation = EaseLinearIn(framesCounter, 0.0f, 360.0f, PLAY_TIME_IN_FRAMES); } } @@ -116,13 +116,13 @@ void UpdateDrawFrame(void) { // When animation has finished, press space to restart framesCounter = 0; - - for (int i = 0; i < MAX_RECS_X*MAX_RECS_Y; i++) + + for (int i = 0; i < MAX_RECS_X*MAX_RECS_Y; i++) { recs[i].height = RECS_HEIGHT; recs[i].width = RECS_WIDTH; } - + state = 0; } //---------------------------------------------------------------------------------- diff --git a/examples/web/shapes/shapes_easings_rectangle_array.html b/examples/web/shapes/shapes_easings_rectangle_array.html new file mode 100644 index 0000000..3aa2f8d --- /dev/null +++ b/examples/web/shapes/shapes_easings_rectangle_array.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_easings_rectangle_array.js b/examples/web/shapes/shapes_easings_rectangle_array.js new file mode 100644 index 0000000..e6592c9 --- /dev/null +++ b/examples/web/shapes/shapes_easings_rectangle_array.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5272944,DYNAMICTOP_PTR=30032;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_easings_rectangle_array.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_easings_rectangle_array.wasm b/examples/web/shapes/shapes_easings_rectangle_array.wasm new file mode 100644 index 0000000..ae954aa Binary files /dev/null and b/examples/web/shapes/shapes_easings_rectangle_array.wasm differ diff --git a/examples/web/shapes/shapes_following_eyes.c b/examples/web/shapes/shapes_following_eyes.c index 3e88252..2a1007b 100644 --- a/examples/web/shapes/shapes_following_eyes.c +++ b/examples/web/shapes/shapes_following_eyes.c @@ -32,33 +32,33 @@ float scleraRadius = 80; Vector2 irisLeftPosition = { 0.0f }; Vector2 irisRightPosition = { 0.0f }; float irisRadius = 24; - + //---------------------------------------------------------------------------------- // Module Functions Declaration //---------------------------------------------------------------------------------- void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [shapes] example - following eyes"); - + scleraLeftPosition = (Vector2){ GetScreenWidth()/2 - 100, GetScreenHeight()/2 }; scleraRightPosition = (Vector2){ GetScreenWidth()/2 + 100, GetScreenHeight()/2 }; - + irisLeftPosition = (Vector2){ GetScreenWidth()/2 - 100, GetScreenHeight()/2 }; - irisRightPosition = (Vector2){ GetScreenWidth()/2 + 100, GetScreenHeight()/2}; + irisRightPosition = (Vector2){ GetScreenWidth()/2 + 100, GetScreenHeight()/2}; #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -67,7 +67,7 @@ int main() #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -83,16 +83,16 @@ void UpdateDrawFrame(void) //---------------------------------------------------------------------------------- irisLeftPosition = GetMousePosition(); irisRightPosition = GetMousePosition(); - - float angle = 0.0f; - float dx, dy, dxx, dyy; - + + float angle = 0.0f; + float dx, dy, dxx, dyy; + // Check not inside the left eye sclera if (!CheckCollisionPointCircle(irisLeftPosition, scleraLeftPosition, scleraRadius - 20)) { dx = irisLeftPosition.x - scleraLeftPosition.x; dy = irisLeftPosition.y - scleraLeftPosition.y; - + angle = atan2f(dy, dx); dxx = (scleraRadius - irisRadius)*cosf(angle); @@ -107,7 +107,7 @@ void UpdateDrawFrame(void) { dx = irisRightPosition.x - scleraRightPosition.x; dy = irisRightPosition.y - scleraRightPosition.y; - + angle = atan2f(dy, dx); dxx = (scleraRadius - irisRadius)*cosf(angle); @@ -127,13 +127,13 @@ void UpdateDrawFrame(void) DrawCircleV(scleraLeftPosition, scleraRadius, LIGHTGRAY); DrawCircleV(irisLeftPosition, irisRadius, BROWN); DrawCircleV(irisLeftPosition, 10, BLACK); - + DrawCircleV(scleraRightPosition, scleraRadius, LIGHTGRAY); DrawCircleV(irisRightPosition, irisRadius, DARKGREEN); DrawCircleV(irisRightPosition, 10, BLACK); - + DrawFPS(10, 10); - + EndDrawing(); //---------------------------------------------------------------------------------- } diff --git a/examples/web/shapes/shapes_following_eyes.html b/examples/web/shapes/shapes_following_eyes.html new file mode 100644 index 0000000..1782fdc --- /dev/null +++ b/examples/web/shapes/shapes_following_eyes.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_following_eyes.js b/examples/web/shapes/shapes_following_eyes.js new file mode 100644 index 0000000..6592cc5 --- /dev/null +++ b/examples/web/shapes/shapes_following_eyes.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269616,DYNAMICTOP_PTR=26704;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_following_eyes.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_following_eyes.wasm b/examples/web/shapes/shapes_following_eyes.wasm new file mode 100644 index 0000000..54b7ae8 Binary files /dev/null and b/examples/web/shapes/shapes_following_eyes.wasm differ diff --git a/examples/web/shapes/shapes_lines_bezier.c b/examples/web/shapes/shapes_lines_bezier.c index 8c8b326..512660d 100644 --- a/examples/web/shapes/shapes_lines_bezier.c +++ b/examples/web/shapes/shapes_lines_bezier.c @@ -19,11 +19,11 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; -Vector2 start = { 0, 0 }; -Vector2 end = { 0, 0 }; +Vector2 start = { 0 }; +Vector2 end = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -31,7 +31,7 @@ Vector2 end = { 0, 0 }; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -40,13 +40,13 @@ int main(void) SetConfigFlags(FLAG_MSAA_4X_HINT); InitWindow(screenWidth, screenHeight, "raylib [shapes] example - cubic-bezier lines"); end = (Vector2){ screenWidth, screenHeight }; - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -78,11 +78,11 @@ void UpdateDrawFrame(void) BeginDrawing(); ClearBackground(RAYWHITE); - + DrawText("USE MOUSE LEFT-RIGHT CLICK to DEFINE LINE START and END POINTS", 15, 20, 20, GRAY); DrawLineBezier(start, end, 2.0f, RED); - + EndDrawing(); //---------------------------------------------------------------------------------- } diff --git a/examples/web/shapes/shapes_lines_bezier.html b/examples/web/shapes/shapes_lines_bezier.html new file mode 100644 index 0000000..42d6e1b --- /dev/null +++ b/examples/web/shapes/shapes_lines_bezier.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_lines_bezier.js b/examples/web/shapes/shapes_lines_bezier.js new file mode 100644 index 0000000..ab0a03e --- /dev/null +++ b/examples/web/shapes/shapes_lines_bezier.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269648,DYNAMICTOP_PTR=26736;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_lines_bezier.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"oc":___lock,"z":___setErrNo,"$a":___syscall140,"Qa":___syscall145,"y":___syscall146,"l":___syscall221,"la":___syscall5,"x":___syscall54,"S":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"R":_emscripten_exit_pointerlock,"ud":_emscripten_get_gamepad_status,"jd":_emscripten_get_heap_size,"_c":_emscripten_get_num_gamepads,"Q":_emscripten_get_pointerlock_status,"Fc":_emscripten_glActiveTexture,"vc":_emscripten_glAttachShader,"nc":_emscripten_glBeginQueryEXT,"gc":_emscripten_glBindAttribLocation,"bc":_emscripten_glBindBuffer,"Xb":_emscripten_glBindFramebuffer,"Qb":_emscripten_glBindRenderbuffer,"Ib":_emscripten_glBindTexture,"zb":_emscripten_glBindVertexArrayOES,"pb":_emscripten_glBlendColor,"lb":_emscripten_glBlendEquation,"kb":_emscripten_glBlendEquationSeparate,"jb":_emscripten_glBlendFunc,"ib":_emscripten_glBlendFuncSeparate,"hb":_emscripten_glBufferData,"gb":_emscripten_glBufferSubData,"fb":_emscripten_glCheckFramebufferStatus,"eb":_emscripten_glClear,"db":_emscripten_glClearColor,"cb":_emscripten_glClearDepthf,"bb":_emscripten_glClearStencil,"ab":_emscripten_glColorMask,"_a":_emscripten_glCompileShader,"Za":_emscripten_glCompressedTexImage2D,"Ya":_emscripten_glCompressedTexSubImage2D,"Xa":_emscripten_glCopyTexImage2D,"Wa":_emscripten_glCopyTexSubImage2D,"Va":_emscripten_glCreateProgram,"Ua":_emscripten_glCreateShader,"Ta":_emscripten_glCullFace,"Sa":_emscripten_glDeleteBuffers,"Ra":_emscripten_glDeleteFramebuffers,"Pa":_emscripten_glDeleteProgram,"Oa":_emscripten_glDeleteQueriesEXT,"Na":_emscripten_glDeleteRenderbuffers,"Ma":_emscripten_glDeleteShader,"La":_emscripten_glDeleteTextures,"Ka":_emscripten_glDeleteVertexArraysOES,"Ja":_emscripten_glDepthFunc,"Ia":_emscripten_glDepthMask,"Ha":_emscripten_glDepthRangef,"Ga":_emscripten_glDetachShader,"Fa":_emscripten_glDisable,"Ea":_emscripten_glDisableVertexAttribArray,"Da":_emscripten_glDrawArrays,"Ca":_emscripten_glDrawArraysInstancedANGLE,"Ba":_emscripten_glDrawBuffersWEBGL,"Aa":_emscripten_glDrawElements,"za":_emscripten_glDrawElementsInstancedANGLE,"ya":_emscripten_glEnable,"xa":_emscripten_glEnableVertexAttribArray,"wa":_emscripten_glEndQueryEXT,"va":_emscripten_glFinish,"ua":_emscripten_glFlush,"ta":_emscripten_glFramebufferRenderbuffer,"sa":_emscripten_glFramebufferTexture2D,"ra":_emscripten_glFrontFace,"qa":_emscripten_glGenBuffers,"pa":_emscripten_glGenFramebuffers,"oa":_emscripten_glGenQueriesEXT,"na":_emscripten_glGenRenderbuffers,"ma":_emscripten_glGenTextures,"ka":_emscripten_glGenVertexArraysOES,"ja":_emscripten_glGenerateMipmap,"ia":_emscripten_glGetActiveAttrib,"ha":_emscripten_glGetActiveUniform,"ga":_emscripten_glGetAttachedShaders,"fa":_emscripten_glGetAttribLocation,"ea":_emscripten_glGetBooleanv,"da":_emscripten_glGetBufferParameteriv,"ca":_emscripten_glGetError,"ba":_emscripten_glGetFloatv,"aa":_emscripten_glGetFramebufferAttachmentParameteriv,"$":_emscripten_glGetIntegerv,"_":_emscripten_glGetProgramInfoLog,"Z":_emscripten_glGetProgramiv,"Y":_emscripten_glGetQueryObjecti64vEXT,"X":_emscripten_glGetQueryObjectivEXT,"W":_emscripten_glGetQueryObjectui64vEXT,"V":_emscripten_glGetQueryObjectuivEXT,"U":_emscripten_glGetQueryivEXT,"T":_emscripten_glGetRenderbufferParameteriv,"ge":_emscripten_glGetShaderInfoLog,"fe":_emscripten_glGetShaderPrecisionFormat,"ee":_emscripten_glGetShaderSource,"de":_emscripten_glGetShaderiv,"ce":_emscripten_glGetString,"be":_emscripten_glGetTexParameterfv,"ae":_emscripten_glGetTexParameteriv,"$d":_emscripten_glGetUniformLocation,"_d":_emscripten_glGetUniformfv,"Zd":_emscripten_glGetUniformiv,"Yd":_emscripten_glGetVertexAttribPointerv,"Xd":_emscripten_glGetVertexAttribfv,"Wd":_emscripten_glGetVertexAttribiv,"Vd":_emscripten_glHint,"Ud":_emscripten_glIsBuffer,"Td":_emscripten_glIsEnabled,"Sd":_emscripten_glIsFramebuffer,"Rd":_emscripten_glIsProgram,"Qd":_emscripten_glIsQueryEXT,"Pd":_emscripten_glIsRenderbuffer,"Od":_emscripten_glIsShader,"Nd":_emscripten_glIsTexture,"Md":_emscripten_glIsVertexArrayOES,"Ld":_emscripten_glLineWidth,"Kd":_emscripten_glLinkProgram,"Jd":_emscripten_glPixelStorei,"Id":_emscripten_glPolygonOffset,"Hd":_emscripten_glQueryCounterEXT,"Gd":_emscripten_glReadPixels,"Fd":_emscripten_glReleaseShaderCompiler,"Ed":_emscripten_glRenderbufferStorage,"Dd":_emscripten_glSampleCoverage,"Cd":_emscripten_glScissor,"Bd":_emscripten_glShaderBinary,"Ad":_emscripten_glShaderSource,"zd":_emscripten_glStencilFunc,"yd":_emscripten_glStencilFuncSeparate,"xd":_emscripten_glStencilMask,"wd":_emscripten_glStencilMaskSeparate,"vd":_emscripten_glStencilOp,"td":_emscripten_glStencilOpSeparate,"sd":_emscripten_glTexImage2D,"rd":_emscripten_glTexParameterf,"qd":_emscripten_glTexParameterfv,"pd":_emscripten_glTexParameteri,"od":_emscripten_glTexParameteriv,"nd":_emscripten_glTexSubImage2D,"md":_emscripten_glUniform1f,"ld":_emscripten_glUniform1fv,"kd":_emscripten_glUniform1i,"id":_emscripten_glUniform1iv,"hd":_emscripten_glUniform2f,"gd":_emscripten_glUniform2fv,"fd":_emscripten_glUniform2i,"ed":_emscripten_glUniform2iv,"dd":_emscripten_glUniform3f,"cd":_emscripten_glUniform3fv,"bd":_emscripten_glUniform3i,"ad":_emscripten_glUniform3iv,"$c":_emscripten_glUniform4f,"Zc":_emscripten_glUniform4fv,"Yc":_emscripten_glUniform4i,"Xc":_emscripten_glUniform4iv,"Wc":_emscripten_glUniformMatrix2fv,"Vc":_emscripten_glUniformMatrix3fv,"Uc":_emscripten_glUniformMatrix4fv,"Tc":_emscripten_glUseProgram,"Sc":_emscripten_glValidateProgram,"Rc":_emscripten_glVertexAttrib1f,"Qc":_emscripten_glVertexAttrib1fv,"Pc":_emscripten_glVertexAttrib2f,"Oc":_emscripten_glVertexAttrib2fv,"Nc":_emscripten_glVertexAttrib3f,"Mc":_emscripten_glVertexAttrib3fv,"Lc":_emscripten_glVertexAttrib4f,"Kc":_emscripten_glVertexAttrib4fv,"Jc":_emscripten_glVertexAttribDivisorANGLE,"Ic":_emscripten_glVertexAttribPointer,"Hc":_emscripten_glViewport,"Gc":_emscripten_memcpy_big,"Ec":_emscripten_request_pointerlock,"Dc":_emscripten_resize_heap,"P":_emscripten_run_script,"Cc":_emscripten_sample_gamepad_data,"Bc":_emscripten_set_click_callback_on_thread,"Ac":_emscripten_set_fullscreenchange_callback_on_thread,"zc":_emscripten_set_gamepadconnected_callback_on_thread,"yc":_emscripten_set_gamepaddisconnected_callback_on_thread,"xc":_emscripten_set_keypress_callback_on_thread,"wc":_emscripten_set_main_loop,"uc":_emscripten_set_touchcancel_callback_on_thread,"tc":_emscripten_set_touchend_callback_on_thread,"sc":_emscripten_set_touchmove_callback_on_thread,"rc":_emscripten_set_touchstart_callback_on_thread,"qc":_exit,"pc":_glActiveTexture,"O":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"mc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"N":_glClear,"M":_glClearColor,"lc":_glClearDepthf,"kc":_glCompileShader,"jc":_glCompressedTexImage2D,"ic":_glCreateProgram,"hc":_glCreateShader,"fc":_glCullFace,"p":_glDeleteBuffers,"L":_glDeleteProgram,"K":_glDeleteShader,"J":_glDeleteTextures,"ec":_glDepthFunc,"I":_glDetachShader,"dc":_glDisable,"o":_glDisableVertexAttribArray,"cc":_glDrawArrays,"ac":_glDrawElements,"H":_glEnable,"h":_glEnableVertexAttribArray,"$b":_glFrontFace,"n":_glGenBuffers,"_b":_glGenTextures,"t":_glGetAttribLocation,"Zb":_glGetFloatv,"Yb":_glGetProgramInfoLog,"G":_glGetProgramiv,"Wb":_glGetShaderInfoLog,"F":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Vb":_glLinkProgram,"Ub":_glPixelStorei,"Tb":_glReadPixels,"Sb":_glShaderSource,"Rb":_glTexImage2D,"g":_glTexParameteri,"Pb":_glUniform1i,"Ob":_glUniform4f,"Nb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Mb":_glViewport,"E":_glfwCreateWindow,"Lb":_glfwDefaultWindowHints,"Kb":_glfwDestroyWindow,"Jb":_glfwGetCursorPos,"Hb":_glfwGetMouseButton,"D":_glfwGetPrimaryMonitor,"m":_glfwGetTime,"Gb":_glfwGetVideoModes,"Fb":_glfwInit,"Eb":_glfwMakeContextCurrent,"Db":_glfwSetCharCallback,"Cb":_glfwSetCursorEnterCallback,"Bb":_glfwSetCursorPosCallback,"Ab":_glfwSetDropCallback,"yb":_glfwSetErrorCallback,"xb":_glfwSetKeyCallback,"wb":_glfwSetMouseButtonCallback,"vb":_glfwSetScrollCallback,"ub":_glfwSetWindowIconifyCallback,"tb":_glfwSetWindowShouldClose,"sb":_glfwSetWindowSizeCallback,"rb":_glfwSwapBuffers,"qb":_glfwSwapInterval,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"ob":_nanosleep,"nb":_time,"mb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["we"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_lines_bezier.wasm b/examples/web/shapes/shapes_lines_bezier.wasm new file mode 100644 index 0000000..f9f28a2 Binary files /dev/null and b/examples/web/shapes/shapes_lines_bezier.wasm differ diff --git a/examples/web/shapes/shapes_logo_raylib.c b/examples/web/shapes/shapes_logo_raylib.c index 4fcadf8..dbee7a6 100644 --- a/examples/web/shapes/shapes_logo_raylib.c +++ b/examples/web/shapes/shapes_logo_raylib.c @@ -18,8 +18,8 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -27,7 +27,7 @@ int screenHeight = 450; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -40,7 +40,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { diff --git a/examples/web/shapes/shapes_logo_raylib.html b/examples/web/shapes/shapes_logo_raylib.html new file mode 100644 index 0000000..007fbb9 --- /dev/null +++ b/examples/web/shapes/shapes_logo_raylib.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_logo_raylib.js b/examples/web/shapes/shapes_logo_raylib.js new file mode 100644 index 0000000..ba3abb6 --- /dev/null +++ b/examples/web/shapes/shapes_logo_raylib.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269600,DYNAMICTOP_PTR=26688;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_logo_raylib.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_logo_raylib.wasm b/examples/web/shapes/shapes_logo_raylib.wasm new file mode 100644 index 0000000..bd0850b Binary files /dev/null and b/examples/web/shapes/shapes_logo_raylib.wasm differ diff --git a/examples/web/shapes/shapes_logo_raylib_anim.c b/examples/web/shapes/shapes_logo_raylib_anim.c index 3034da6..529d6ad 100644 --- a/examples/web/shapes/shapes_logo_raylib_anim.c +++ b/examples/web/shapes/shapes_logo_raylib_anim.c @@ -18,11 +18,11 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; -int logoPositionX; -int logoPositionY; +int logoPositionX = 0; +int logoPositionY= 0; int framesCounter = 0; int lettersCount = 0; @@ -42,7 +42,7 @@ float alpha = 1.0f; // Useful for fading void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -52,13 +52,13 @@ int main(void) logoPositionX = screenWidth/2 - 128; logoPositionY = screenHeight/2 - 128; - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { diff --git a/examples/web/shapes/shapes_logo_raylib_anim.html b/examples/web/shapes/shapes_logo_raylib_anim.html new file mode 100644 index 0000000..8503929 --- /dev/null +++ b/examples/web/shapes/shapes_logo_raylib_anim.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_logo_raylib_anim.js b/examples/web/shapes/shapes_logo_raylib_anim.js new file mode 100644 index 0000000..9abdba5 --- /dev/null +++ b/examples/web/shapes/shapes_logo_raylib_anim.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5271664,DYNAMICTOP_PTR=28752;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_logo_raylib_anim.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_logo_raylib_anim.wasm b/examples/web/shapes/shapes_logo_raylib_anim.wasm new file mode 100644 index 0000000..b7b5b95 Binary files /dev/null and b/examples/web/shapes/shapes_logo_raylib_anim.wasm differ diff --git a/examples/web/shapes/shapes_rectangle_scaling.c b/examples/web/shapes/shapes_rectangle_scaling.c index f2420c2..d5432c2 100644 --- a/examples/web/shapes/shapes_rectangle_scaling.c +++ b/examples/web/shapes/shapes_rectangle_scaling.c @@ -40,22 +40,22 @@ bool mouseScaleMode = false; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [shapes] example - rectangle scaling mouse"); - + rec = (Rectangle){ 100, 100, 200, 80 }; - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -64,7 +64,7 @@ int main() #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -79,25 +79,25 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- mousePosition = GetMousePosition(); - - if (CheckCollisionPointRec(mousePosition, rec) && + + if (CheckCollisionPointRec(mousePosition, rec) && CheckCollisionPointRec(mousePosition, (Rectangle){ rec.x + rec.width - MOUSE_SCALE_MARK_SIZE, rec.y + rec.height - MOUSE_SCALE_MARK_SIZE, MOUSE_SCALE_MARK_SIZE, MOUSE_SCALE_MARK_SIZE })) { mouseScaleReady = true; if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) mouseScaleMode = true; } else mouseScaleReady = false; - + if (mouseScaleMode) { mouseScaleReady = true; - + rec.width = (mousePosition.x - rec.x); rec.height = (mousePosition.y - rec.y); - + if (rec.width < MOUSE_SCALE_MARK_SIZE) rec.width = MOUSE_SCALE_MARK_SIZE; if (rec.height < MOUSE_SCALE_MARK_SIZE) rec.height = MOUSE_SCALE_MARK_SIZE; - + if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) mouseScaleMode = false; } //---------------------------------------------------------------------------------- @@ -107,15 +107,15 @@ void UpdateDrawFrame(void) BeginDrawing(); ClearBackground(RAYWHITE); - + DrawText("Scale rectangle dragging from bottom-right corner!", 10, 10, 20, GRAY); DrawRectangleRec(rec, Fade(GREEN, 0.5f)); - - if (mouseScaleReady) + + if (mouseScaleReady) { DrawRectangleLinesEx(rec, 1, RED); - DrawTriangle((Vector2){ rec.x + rec.width - MOUSE_SCALE_MARK_SIZE, rec.y + rec.height }, + DrawTriangle((Vector2){ rec.x + rec.width - MOUSE_SCALE_MARK_SIZE, rec.y + rec.height }, (Vector2){ rec.x + rec.width, rec.y + rec.height }, (Vector2){ rec.x + rec.width, rec.y + rec.height - MOUSE_SCALE_MARK_SIZE }, RED); } diff --git a/examples/web/shapes/shapes_rectangle_scaling.html b/examples/web/shapes/shapes_rectangle_scaling.html new file mode 100644 index 0000000..9f9a4ae --- /dev/null +++ b/examples/web/shapes/shapes_rectangle_scaling.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/shapes/shapes_rectangle_scaling.js b/examples/web/shapes/shapes_rectangle_scaling.js new file mode 100644 index 0000000..74c2293 --- /dev/null +++ b/examples/web/shapes/shapes_rectangle_scaling.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269648,DYNAMICTOP_PTR=26736;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="shapes_rectangle_scaling.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/shapes/shapes_rectangle_scaling.wasm b/examples/web/shapes/shapes_rectangle_scaling.wasm new file mode 100644 index 0000000..71a4d04 Binary files /dev/null and b/examples/web/shapes/shapes_rectangle_scaling.wasm differ diff --git a/examples/web/text/text_bmfont_ttf.c b/examples/web/text/text_bmfont_ttf.c index 2672f1f..30ec2a0 100644 --- a/examples/web/text/text_bmfont_ttf.c +++ b/examples/web/text/text_bmfont_ttf.c @@ -1,6 +1,6 @@ /******************************************************************************************* * -* raylib [text] example - BMFont and TTF SpriteFonts loading (adapted for HTML5 platform) +* raylib [text] example - BMFont and TTF Fonts loading (adapted for HTML5 platform) * * This example has been created using raylib 1.4 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) @@ -18,17 +18,20 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; -const char msgBm[64] = "THIS IS AN AngelCode SPRITE FONT"; -const char msgTtf[64] = "THIS SPRITE FONT has been GENERATED from a TTF"; +// Define characters to draw +// NOTE: raylib supports UTF-8 encoding, following list is actually codified as UTF8 internally +const char msg[256] = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI\nJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmn\nopqrstuvwxyz{|}~¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓ\nÔÕÖרÙÚÛÜÃÞßàáâãäåæçèéêëìíîïðñòóôõö÷\nøùúûüýþÿ"; // NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) -SpriteFont fontBm; // BMFont (AngelCode) -SpriteFont fontTtf; // TTF font +Font fontBm = { 0 }; // BMFont (AngelCode) +Font fontTtf = { 0 }; // TTF font -Vector2 fontPosition; +Vector2 fontPosition = { 0.0f }; + +bool useTtf = false; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -36,7 +39,7 @@ Vector2 fontPosition; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -44,18 +47,22 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [text] example - bmfont and ttf sprite fonts loading"); - fontBm = LoadSpriteFont("resources/bmfont.fnt"); // BMFont (AngelCode) - fontTtf = LoadSpriteFont("resources/pixantiqua.ttf"); // TTF font - - fontPosition.x = screenWidth/2 - MeasureTextEx(fontBm, msgBm, fontBm.baseSize, 0).x/2; + // BMFont (AngelCode) : Font data and image atlas have been generated using external program + fontBm = LoadFont("resources/pixantiqua.fnt"); + + // TTF font : Font data and atlas are generated directly from TTF + // NOTE: We define a font base size of 32 pixels tall and up-to 250 characters + fontTtf = LoadFontEx("resources/pixantiqua.ttf", 32, 0, 250); + + fontPosition.x = screenWidth/2 - MeasureTextEx(fontBm, msg, fontBm.baseSize, 0).x/2; fontPosition.y = screenHeight/2 - fontBm.baseSize/2 - 80; - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -65,9 +72,9 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - UnloadSpriteFont(fontBm); // AngelCode SpriteFont unloading - UnloadSpriteFont(fontTtf); // TTF SpriteFont unloading - + UnloadFont(fontBm); // AngelCode Font unloading + UnloadFont(fontTtf); // TTF Font unloading + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -81,7 +88,8 @@ void UpdateDrawFrame(void) { // Update //---------------------------------------------------------------------------------- - // TODO: Update variables here... + if (IsKeyDown(KEY_SPACE)) useTtf = true; + else useTtf = false; //---------------------------------------------------------------------------------- // Draw @@ -90,8 +98,18 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); - DrawTextEx(fontBm, msgBm, fontPosition, fontBm.baseSize, 0, MAROON); - DrawTextEx(fontTtf, msgTtf, (Vector2){ 75.0f, 240.0f }, fontTtf.baseSize*0.8f, 2, LIME); + DrawText("Press SPACE to use TTF generated font", 20, 20, 20, LIGHTGRAY); + + if (!useTtf) + { + DrawTextEx(fontBm, msg, (Vector2){ 20.0f, 100.0f }, fontBm.baseSize, 2, MAROON); + DrawText("Using BMFont (Angelcode) imported", 20, GetScreenHeight() - 30, 20, GRAY); + } + else + { + DrawTextEx(fontTtf, msg, (Vector2){ 20.0f, 100.0f }, fontTtf.baseSize, 2, LIME); + DrawText("Using TTF font generated", 20, GetScreenHeight() - 30, 20, GRAY); + } EndDrawing(); //---------------------------------------------------------------------------------- diff --git a/examples/web/text/text_bmfont_ttf.data b/examples/web/text/text_bmfont_ttf.data new file mode 100644 index 0000000..44e7a67 --- /dev/null +++ b/examples/web/text/text_bmfont_ttf.data @@ -0,0 +1,368 @@ +info face="Arial Black" size=-32 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=2,2 outline=0 +common lineHeight=45 base=35 scaleW=512 scaleH=256 pages=1 packed=0 alphaChnl=0 redChnl=4 greenChnl=4 blueChnl=4 +page id=0 file="bmfont.png" +chars count=95 +char id=32 x=423 y=141 width=3 height=45 xoffset=-1 yoffset=0 xadvance=11 page=0 chnl=15 +char id=33 x=323 y=141 width=9 height=45 xoffset=1 yoffset=0 xadvance=11 page=0 chnl=15 +char id=34 x=123 y=141 width=16 height=45 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=15 +char id=35 x=221 y=47 width=21 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=36 x=244 y=47 width=21 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=37 x=70 y=0 width=30 height=45 xoffset=1 yoffset=0 xadvance=32 page=0 chnl=15 +char id=38 x=390 y=0 width=25 height=45 xoffset=2 yoffset=0 xadvance=28 page=0 chnl=15 +char id=39 x=378 y=141 width=8 height=45 xoffset=1 yoffset=0 xadvance=9 page=0 chnl=15 +char id=40 x=222 y=141 width=11 height=45 xoffset=1 yoffset=0 xadvance=12 page=0 chnl=15 +char id=41 x=499 y=94 width=11 height=45 xoffset=1 yoffset=0 xadvance=12 page=0 chnl=15 +char id=42 x=497 y=47 width=13 height=45 xoffset=2 yoffset=0 xadvance=18 page=0 chnl=15 +char id=43 x=394 y=94 width=19 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15 +char id=44 x=367 y=141 width=9 height=45 xoffset=1 yoffset=0 xadvance=11 page=0 chnl=15 +char id=45 x=261 y=141 width=11 height=45 xoffset=0 yoffset=0 xadvance=11 page=0 chnl=15 +char id=46 x=356 y=141 width=9 height=45 xoffset=1 yoffset=0 xadvance=11 page=0 chnl=15 +char id=47 x=248 y=141 width=11 height=45 xoffset=-1 yoffset=0 xadvance=9 page=0 chnl=15 +char id=48 x=382 y=47 width=21 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=49 x=496 y=0 width=14 height=45 xoffset=2 yoffset=0 xadvance=21 page=0 chnl=15 +char id=50 x=134 y=94 width=20 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=51 x=359 y=47 width=21 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=52 x=313 y=47 width=21 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=53 x=336 y=47 width=21 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=54 x=178 y=94 width=20 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15 +char id=55 x=478 y=94 width=19 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15 +char id=56 x=290 y=47 width=21 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=57 x=90 y=94 width=20 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=58 x=345 y=141 width=9 height=45 xoffset=1 yoffset=0 xadvance=11 page=0 chnl=15 +char id=59 x=334 y=141 width=9 height=45 xoffset=1 yoffset=0 xadvance=11 page=0 chnl=15 +char id=60 x=0 y=141 width=19 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15 +char id=61 x=21 y=141 width=19 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15 +char id=62 x=310 y=94 width=19 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15 +char id=63 x=352 y=94 width=19 height=45 xoffset=1 yoffset=0 xadvance=20 page=0 chnl=15 +char id=64 x=279 y=0 width=26 height=45 xoffset=-1 yoffset=0 xadvance=24 page=0 chnl=15 +char id=65 x=193 y=0 width=27 height=45 xoffset=-1 yoffset=0 xadvance=25 page=0 chnl=15 +char id=66 x=150 y=47 width=22 height=45 xoffset=2 yoffset=0 xadvance=25 page=0 chnl=15 +char id=67 x=444 y=0 width=24 height=45 xoffset=1 yoffset=0 xadvance=25 page=0 chnl=15 +char id=68 x=174 y=47 width=22 height=45 xoffset=2 yoffset=0 xadvance=25 page=0 chnl=15 +char id=69 x=156 y=94 width=20 height=45 xoffset=2 yoffset=0 xadvance=23 page=0 chnl=15 +char id=70 x=63 y=141 width=18 height=45 xoffset=2 yoffset=0 xadvance=21 page=0 chnl=15 +char id=71 x=417 y=0 width=25 height=45 xoffset=1 yoffset=0 xadvance=27 page=0 chnl=15 +char id=72 x=125 y=47 width=23 height=45 xoffset=2 yoffset=0 xadvance=27 page=0 chnl=15 +char id=73 x=388 y=141 width=8 height=45 xoffset=2 yoffset=0 xadvance=12 page=0 chnl=15 +char id=74 x=200 y=94 width=20 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=75 x=251 y=0 width=26 height=45 xoffset=2 yoffset=0 xadvance=27 page=0 chnl=15 +char id=76 x=373 y=94 width=19 height=45 xoffset=2 yoffset=0 xadvance=21 page=0 chnl=15 +char id=77 x=134 y=0 width=28 height=45 xoffset=1 yoffset=0 xadvance=30 page=0 chnl=15 +char id=78 x=100 y=47 width=23 height=45 xoffset=2 yoffset=0 xadvance=27 page=0 chnl=15 +char id=79 x=363 y=0 width=25 height=45 xoffset=1 yoffset=0 xadvance=27 page=0 chnl=15 +char id=80 x=112 y=94 width=20 height=45 xoffset=2 yoffset=0 xadvance=23 page=0 chnl=15 +char id=81 x=335 y=0 width=26 height=45 xoffset=1 yoffset=0 xadvance=27 page=0 chnl=15 +char id=82 x=470 y=0 width=24 height=45 xoffset=2 yoffset=0 xadvance=25 page=0 chnl=15 +char id=83 x=75 y=47 width=23 height=45 xoffset=0 yoffset=0 xadvance=23 page=0 chnl=15 +char id=84 x=50 y=47 width=23 height=45 xoffset=0 yoffset=0 xadvance=23 page=0 chnl=15 +char id=85 x=25 y=47 width=23 height=45 xoffset=2 yoffset=0 xadvance=27 page=0 chnl=15 +char id=86 x=307 y=0 width=26 height=45 xoffset=0 yoffset=0 xadvance=25 page=0 chnl=15 +char id=87 x=0 y=0 width=34 height=45 xoffset=-1 yoffset=0 xadvance=32 page=0 chnl=15 +char id=88 x=222 y=0 width=27 height=45 xoffset=-1 yoffset=0 xadvance=25 page=0 chnl=15 +char id=89 x=164 y=0 width=27 height=45 xoffset=-1 yoffset=0 xadvance=25 page=0 chnl=15 +char id=90 x=0 y=47 width=23 height=45 xoffset=0 yoffset=0 xadvance=23 page=0 chnl=15 +char id=91 x=274 y=141 width=11 height=45 xoffset=1 yoffset=0 xadvance=12 page=0 chnl=15 +char id=92 x=300 y=141 width=10 height=45 xoffset=-1 yoffset=0 xadvance=9 page=0 chnl=15 +char id=93 x=287 y=141 width=11 height=45 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=15 +char id=94 x=457 y=94 width=19 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15 +char id=95 x=103 y=141 width=18 height=45 xoffset=-1 yoffset=0 xadvance=16 page=0 chnl=15 +char id=96 x=312 y=141 width=9 height=45 xoffset=0 yoffset=0 xadvance=11 page=0 chnl=15 +char id=97 x=474 y=47 width=21 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=98 x=68 y=94 width=20 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15 +char id=99 x=267 y=47 width=21 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=100 x=46 y=94 width=20 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=101 x=198 y=47 width=21 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=102 x=141 y=141 width=15 height=45 xoffset=-1 yoffset=0 xadvance=12 page=0 chnl=15 +char id=103 x=222 y=94 width=20 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=104 x=415 y=94 width=19 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15 +char id=105 x=398 y=141 width=7 height=45 xoffset=2 yoffset=0 xadvance=11 page=0 chnl=15 +char id=106 x=235 y=141 width=11 height=45 xoffset=-2 yoffset=0 xadvance=11 page=0 chnl=15 +char id=107 x=405 y=47 width=21 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15 +char id=108 x=407 y=141 width=7 height=45 xoffset=2 yoffset=0 xadvance=11 page=0 chnl=15 +char id=109 x=102 y=0 width=30 height=45 xoffset=1 yoffset=0 xadvance=32 page=0 chnl=15 +char id=110 x=331 y=94 width=19 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15 +char id=111 x=428 y=47 width=21 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=112 x=266 y=94 width=20 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15 +char id=113 x=288 y=94 width=20 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=114 x=158 y=141 width=15 height=45 xoffset=1 yoffset=0 xadvance=14 page=0 chnl=15 +char id=115 x=244 y=94 width=20 height=45 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=15 +char id=116 x=175 y=141 width=14 height=45 xoffset=0 yoffset=0 xadvance=14 page=0 chnl=15 +char id=117 x=436 y=94 width=19 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15 +char id=118 x=451 y=47 width=21 height=45 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=15 +char id=119 x=36 y=0 width=32 height=45 xoffset=-1 yoffset=0 xadvance=30 page=0 chnl=15 +char id=120 x=0 y=94 width=21 height=45 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=121 x=23 y=94 width=21 height=45 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=15 +char id=122 x=83 y=141 width=18 height=45 xoffset=0 yoffset=0 xadvance=18 page=0 chnl=15 +char id=123 x=191 y=141 width=14 height=45 xoffset=-1 yoffset=0 xadvance=12 page=0 chnl=15 +char id=124 x=416 y=141 width=5 height=45 xoffset=2 yoffset=0 xadvance=9 page=0 chnl=15 +char id=125 x=207 y=141 width=13 height=45 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=15 +char id=126 x=42 y=141 width=19 height=45 xoffset=1 yoffset=0 xadvance=21 page=0 chnl=15 +‰PNG + + IHDRÅÎg IDATxœíMˆfǹß#²áE{¡±6V+Â+Ûj+„,ì0¸í…POâ…uœxFË5‘Ìä•ï…€ žya'4ãàk/Lf/¬“Ä‹@Ú×w|u= +¹µp/Œz?Yœ·nW×[ÏSUçãýèóÿÁËL¿çÔ9§>þõíÎÖ_ïUÛböeã˜ÞýðêiŒw­­ÏØ+OK™Æ:_Ÿ:šÃ«Gc#¦t]c#¥öøˆ®~ÔPÓ÷y¯1Ɖâ¸õp ¼oà à#™÷?áœôó,W€]à9ãûoã­›»Àï€K™Ï®S~P;À«Ñß?îVºõó$ù¿CWZ9¾ Ÿ_¾kœ3ð=òÏ àø*muîYà™ÂwžY|¯…‡‹²œŸ_^6>» +8Çþ:ãÔ³}àû…ïœ_n47têoÒ=S‹ëÔ,?q>{ŽºâEç³·èê§G,h¼çÃâóÖeÈùö€? 8_G×+Î1TÜ´\tmåwô»¶0X[ý|Ìm¦o)éÚÆaãõƒÀ© à·ÆçO%ïyƒ9äEÃS‹cå°Î½ ܤ\ù.?Â~Hߤk‡À·Ç)ÚÆ` |¡« }x¼æ|¾¼`|¶\v~Ûg`|bñùóÇeQ–:Ÿ…底ŠÊ”{ÀeIÙ¥«ÛÞµŸ_¢þž†Ž=nW×€ ™×GéÚ œ,^çþ+láx øl¡l^ßvü¢ðû»”ÅmúYVu¾«‹ßÔr@ÿArÈuAWÎËQ˜!{‚Æâ€i¬)—èêu«(M€Sð ò³‹t3¼˜Ï⫊\C{ûaþ¦PÆu±K×ùÆÜ¢ë˜žælGcÍÔÒc¼Ny±mäê”ëI‰;t™ÅwÈŒßÅ®k}ÆKFÎúU÷9èR.Ñ)ù˜8•)'tõl(;ÀOñŸaëà•ÓŽ=X .`?“cà3œ·±EÀCàÇÎù½Ù=øuööuQÍLÕcø%å:´êóíÒµ·V.ÓnƾËðë‚nP÷Äâ.ÝÀ:¤ª½CÉõ7©kA¼G§Ês|ªðwŽ´¡Y¿9¢{›HÚÄ3€‡t®‹˜\çÿrtŒ±fe›H®c­©'%^ÁŸÑ¥"¶¶¤-Ž×Jù?ÐÇ Ý@ç Ú—9íHKñ.¦ºŽÍº—Ðoæ\ ‡ÀÇ¿ÍÅW¤wA~{`±&3PvxuÖs/xõ®•=àÂwÞXñù, î!8»@'æÒûÞj«±¸¶›$ŠæñJöèžÿÔÔ¸°š-AüøÀøN<°ÕΆR¿°3ðÁâÜ›HÚ|H'”©ë"u}ì_[ü¬YÙ¦’>ï¾þÿ”’+à2gÆÔbóýbM^%oQøÛÌ{ñMóžÅ#>n,*SÆr1½Ay€iq¥Ä–™Cà‹tƒúU:³~z®ÛÀç¬0¸ +¼´ø½òkà]£9—f\F«Îz•¸çˆ-á•,c°g¯%רçÛ‚[4ïÓYIúRj¿pj ¯Ô›b¹}Jæñôƨ97Ç=ò.¯[Îo¼ºÜj51 gà˜.À%G<°ÕΆâ™Ðy1tÁ‡©IÜ‹¸ÎUR+ÒÑ +ž°¢ŽÇ^hŸ•Õ\—u-9ÿW.º¹O¤éË!ùæüÿàwB¥1 ž¢ïk}±|Â'À&=µÁf9<‹ÇðçØä 𠆻˜jfa×h»Ÿa†—1 . q¡SÿÇœ +ƒNûŠ ¤­8¯/óf¤^ßæ*[ºëø4Ëmÿ>ÄT,wŪÏçO’¬~¾ÖÅë Û#ºz‘™>>Iûuy×[§©*Å ÖmÁsZÜd@¼DœÀzP±òð|ù1qCó‚Árf5Ïš3ÑY~;KýY×6òô~¤ +,µjÄÖŒXaö5={‘d=øëœ¨!‘ó …HÓÖå[é +È=“ÿíf*á Œ{Àÿ´†Ü«n½ ü'ò3Íš`3‹’Åã[Fy`ÓÿUÊæÃÖÁ?žÙ…2¦±·¢cæîAl}û9§¤Õ‘ÿ»¾XqV §g½+D{V§c:1Ôâ®XõùVpå×脜å2:¤{^%JÖëJ­W’ï—==mõCcYÞ†N÷"ïSlQ‰a€´üGAÕç°*\®ñz~»Zõ—käibQ“«Da‰P¡ýcÆ]æø8ð_)›h÷è:š@—RÀLÊ›,וø¾æžÉÿi8~Ji`üûÎg}Mÿ`×÷·€¿Ážiö™MJÁ9Æè€þ)åÀ¡ÖÁNETC1æÊž¶½X\ÇË–­%¨¹@.NÀޥs+äðV7Õ ~ž»"'$W}¾€\&97N‹Eʳ¾Ôĉݧ»/(/Eõî¡÷¬ál½ŠW®|†á–·RÐmê‚ö8þÖ„Xx•ãSØÊénv—¥¥¬½ ²pêg/)ÇTÕZfªÜƒÏUú°&9õµÑ ¶0ý²¿‹Ô«Ä?¡Þ'Ô2hå‚FCgœ{&c{ö‡^zæÿ0YgCÜà[Ï"šso¦x9X`YH¯ú|1-æiËaá]רqbCïáü•+5ÄùÂ+'¢bjóå\£8U÷>^åø¶rz ø™÷ƒ¢ì˜kÀ©J-Å$Ô~ßjä7(:qb™m^ö×2håZ˜YYþÿ1qËÀ8Ôõbù$cáj‰æ¡>Á’Å#æ«K,U +K‰whc©°ªñ§·5¿ñr¤–DÏüï­ý÷ÌÚü&-yPÆXYÓ7ïJÉ…¸|Œñ¬ž¹A¹&cŸç4Æ=\5¥¾,ÄH4 “t/«r< üs–Ih –ûàsØ€%åo5àøÖ$h‰g9õWjäW°£MoqVmÅhéì3—rHàa0A•"TãˆV/jÖ‹2͑֕à*ÊùÍkfy5´ ŒCLÿže)Vâ^ÀYßœ­xËÓ¦À[Z•‹Á0hÇõÃr¦“>¹B¼œi²õ¬°=Y;§L¨ˆk‚ÍúÔÇM”71)Ý]›±ú² \©°LšÏ² +³!k&t€=C/5jË :ÖÚ¥fñÌ6gÂ,ù}BY>Æò²Øß/ωc +B¤~.¸*¤¯l͘‹‹’2ƒÃZйºò"ùÆSï.mã,|ñ*%Ïr´)ÉàVýÌJÜb\kÊ©°Y~ç0²fBO`›Öju®¿_®“Î-Q nËÿ?Öì4^žÝšTªÐ ¥–Hü¥:UãÊÕ•Oÿ$yoŠdO^”÷9<ËRÈ^Ö¬¨oj`hKRÒš%l Bô÷P,×Pl©Ë‰„ "J®%/®)L¬•5õvŒ¶Õ2èL}¾ôø}ó\§q; +í¦5}®èÙ—¡÷ð*«ÙÐm%iãSà%ÊÐ-7¶fÖ g—ü€žë¤ß&ßù¿H^0Ôä÷®!]öS?rì«Ig±-É$6A1[qé=ÞädO9ÆJbýÜU9¼Z}ó%®á'©Ù ü £±¥.­?ñó)‰wÏE,ƒV`cMЕåú„å+7ör¤Àr;o9_ŽÒùb¼GÁýèÕ‘òVÏÜ3ó®Ë ôìÃÐ{ø"§«úæR ‰€<—ìð{»‰Tx &%Å{A7)5Ñ–^y>G¾“þ‰QŽç¿IÃÆI›š[ö—HâN%5OY?¾.j,cYXVEKêßÞ¦E9úæ\‡ñ\a©_)³[ëµÕúyÓA*í+Âó©ï–µèÝ@l­ô¨±"y'½?±…0lijOÛò·–óåhYngYÁâå†÷é¢ý[sy¿uybÎ%[ÊvðîaÉm—[Ä@ŸJ»–6šL* ~v™Îâ½µ·)-&ìœïOY^2*p®—è’¨¤Œ@e-ûËùãëÎUÄM †©ÅË»ØkE ^¦µ>´,óLÿGt)t[öFh%NÈÝ è=ß’èˆÛb0=—êC:H¥}Ex>¨ï^¿d%VªµP–ú¼W9WJ¿·ü캖³@Ôž/Gi£¬ô|–« d5ÙøVN”ÒÄsÌ8ï–Ry{í³ïD§$´'uñå€g"‰É]pÍÀÞjv÷ÔaL\kö1|ÓÛ¼ìo J&ÞMÞì)G)ÓZj—W–Lÿ¯ÑÍ4¼ Î!®€[,'Q£s +}B¸±….7ãJX,‚Oºu‰g«ÐoéÌ=‘̸ÏÒ¥q.å{±Ê\s¾Ôl¼¿xß[g^{rõ9¤Ê-]›;âÅõ„`é\œT)+jïæ¶ù ç°ÚçPWriyóe&rä@퀛Sò53–ŒFPï–ˆ+p;¢6±‚‡·ì/O«ê\„ô¶Í–K3’móÿÝÂ8Gí>ôžé?®[}¶IBÉ +p¿s +}B¸ñò¼4–À :»KçSŽónÔÒâžlíÌïÓýZÄþâGÔíÔæ­bi=_Íò½Üù¬Éœµ?}x>¡l¹UO¥­œá4[K¥{¸·8ní90Ì•\ºö!›Œ¹ä@)[Ø3»ñÐgP( ‹´<5ækÙ_ '\bõœúضm¶ð¬>Ûæÿ÷ÌõqêÏÜëZÏã‚oZÌÕ-oPÛdX²”ãßuœU.îlÃï´¢ÇÃÌ¿%Ã\ fp <èqü>›¸XÔX7Æ<ß!Ý.‹)53òx n \= /j¯µb¹sƺ‡Öýk¥TžËL`È (›ò­Ùsxè3(”:¡\y¼~è`›úÓ¬XÒF7œT-½gÀªðÄÙ6Y4<óM}ñ\g—±oÉôŸ«[¥ÌØ«J&ÊÒžèá÷aïyËdö—ÿGœí C2«!k¢k¬“ÐobPÚ-®…šÜ Çtñ C°xkæ”1s†¤Üby“žÀƹ¡ÎXyúǸ‡GÀ—ã·âm‚õ+oš°@©±x¡Ô€ú +ÞqsŸyf¿¡ƒm¼™‰Ù +å(ÏÀ=Ê›Xl*VÀ¶Y4¼íHkÜEžõËÊ P2ý{u«4c;pª4ƒö–±ÆƒI<û»ÁY+Jè¬Ã€ÞÙ6ƒ/6Ì:["¯k¬“Cëìê£ÑK„|ñ– ÷ȳð3ìej÷Ð@(Ä$H!„3Ä +B!Ä9F@!„˜!B!Ä ‘B!fˆ€B1C$„Bˆ" „BÌ !„b†H!„3D@!„˜!B!Ä ‘B!fˆ€B1C$„Bˆ" „BÌ !„b†H!„3D@!„˜!BÌ»À£Å¿Bˆ™" „BÌ öéfc¼Þv¢óÜt¾{³PFï·ñ æêˆå_W åcq­ï4Þ“>×[ºWÞsŒ;Õóˆ{×ù^Íë÷ÀnÏrx¯÷iIëpzÒk.Ý£˜øy,Þ;ˆÞ+=÷uQªGc—ÛêGj¬%Cú ÚþÊ÷¤¦Ï²(5Ç¶Ž±Émï<‘ŽGf‘`¡¢ÿØ+|woñ½!àk~»m\~Çøfê‹À› ï(§àÅäï€?F¢ðyJÜ8߸Îf 0ÈÕ–{Œz²|Àï?5BèÏUÊ%G€ú >ïR?S80¯ú6›3àíO&ï½W~ž;Þ/) Ó”ë¬76 ˆ–Ò —r@Û,:eøíí9&hcÑ÷žÔÖïÖ¾lH&¦çxñÿ“èÿKHôcèLÅïû¨è=à›Ͻm\fºÇu6£#ûðDòÞo>Où&íƒà€õÝ“7è_î¾mcø)Õ©/96CžeÉj8¤/ëÛ‡‰ñ îÁàüíâý÷8µðœ±ÞHôãU†ÍXüþùž¿“+†Ý«¾C½/}*žþN•ûg9;@yÊ~øÊÀò¼Êê-M»ÀsÆg÷€ ‹×GCã{_¡ýY¾Aÿ6hc°O×ÞsÜâôž\3¾Sj;V_v<½8öÓ‹¿sÇ~Õ9¶X ;Àçÿ®Óë‹¿/Å©…çL}à>]çs¡âõºÎÇâø2¶ir*îЯÌqEϽî$ß÷:©“ŹâßßsÊüyúu²Ûî +ˆ;®ð²:™>ăEiÀ€®Ñ¼<Ò¹ûò$g;â Ü©9ý<& P×C¼G÷,r<<ë”w•¯DßÀï‡j¹I»i=G*ài]´^Ÿ!ßg>O~€>¾ýýsì:n¹&¼¾ì5àáâÿçxŽõ‹ç¹ó,]{ÍñËõçïêC«`øYæ€#ºÎç¡ñùyç‡tb*æ%ì†ùÝÌ¡çÍðø±ó¹gî.qL×ÁZƒÔ‹±R”tÏ5wŒÛÉw‚’Ÿ_7>o Èz›å¶ùmÎÖÏ Îg¹.[”¢ß[V+Ôòݵá*Ë÷µ/©€ ü6ó^ 7ÈÏòÓøØï[‹'•¼÷+òýq:ñÓ—ÒjžÚx¯]Ö¶ku…W­ò×Ä£Ô®)¹ãâ ¼e ‚Ó¶}%¼Ñ"4ø—É™æÃà“SýcØý:O®Ïlëúðl+CiÆk)Xj̨ô±9 ë ÿAô^Z?o4/Ü“T¼¤ÔŠ•‡t"%÷ûïE{>ûœÈÉaù¾ÿ‚~–¨Ü +€àä–>‘ô±•3}NÞlþ'ÆûÖª…Üê’?.ÞOâž+ °kDƒ•sŒR»¬]ùcÝ'KäĦ÷”×±­àµí&вªÃ²Ý"Ó¶k@ið?¾Ê<«“‚³më^§p„Ìz1cÊãwØAX±9r¥ggqÝ¥¾±†F¥Áš­AwcøªûÜ“šèñWÈ—=ÎY`-»M]VÄÿ-–]~µäÌìázs.†ðÙÖOÒ +9,×Àû,^ž…¡Ïê‡]ºØ‹k”ŸÅMÚëàmlqn ž–ȱLïÞ„¥O™¥ ËtåÏ_rÚ–²ÁÎ5 fðÿõæÂóÀëÔùSA0Å€pÞ\1ÁgÝ·SÎá™ds3¢!>â=º³Uã ˜0¨¶BCýæ^ÐåCà“ø19¿+ Ek°¼G›õ#=fß—è‚´úLÂLÒDcÆc ugJ«.jÿ!î›ò®ºc:×JŽœ‹ÐŠÏø1ùz848× ºLÿàßs¶¸M"J ´6vŽƒ?t×ûõ¿ É€ú¨þò&88_®€˜¡þÅ¡x ö.¸0˜d­ø‚Ë,?›4è6ým˜š~ŸÛòÕ¿Dý Ç”\^Tzkߦ&ý”>õµñ4o°/xQì-÷¤õþÙfK)¨û´Ë>»4ZÁ€Ÿ"/¦jr•„ñÛá‡@ÚRÆÝQ fðb.{ûb¼à—}:Óo/Úr*<¿YP‡«Âsl3SÎ2,3ø©uSJV’ôÕ’Uo(aàÏÍd-¿¥—7 ë¹ÅîoõKŸuæ›d=Ìeu³f³-ëï!?ñ#¸Ï +4Ë ?O<÷ÉÒi%\*-k³žxÛi[¦A~L²–þÅX›:Åñ-«ì+xŒúÁ¿ïY°}*¥õ‰”·¨´‚ަÆS»·Yn˜¥¥”C|§SºÖÁXyÙ­c{Ê;53·® n!åÜC±¸È»]ÃÞ ÉÚZù{ä…QÚAz÷ä2ùX„xÕ@¼Ü0'¬¶•[úä Hcø¤k ƒs.þ#7›mÉØŽ3çê —™.×ÏXé”s“™–´Á%®ŽíÂ)mè4V=)õ½¹`À\nýšÉ¨÷lrâÁZm3*Q·Õd);\)Íå1ÝÍôéKU1‚Žú॓…å{å-ijÅØVW€UŸJ¦±Ú{ûkkŽme³fH{t¢9¼ÞÖl-—I,žM¥ËËj"¥Kmí€S‘î“%ºrm̺'¹|Otå:=k&y‰n Ç.*×Fbw¿ÓzÒš±¯tì7¢¿½‰œÕv¼ý7â¬sÞêŒÚÔËØlEÛ—‚£­>8­'Þý>ât©œEiâx@yÖîÅ.¤bî.+ +\åvÀwh_“l‘[7¹*J›Ö´Û<¨•óê +HyÀt¦1+Õ°woCR§’`õêjœ–ΦJ;Zx;ÃÕb•Û»'¥ ŒVçë•;>¶'ª—’àïš¾¬%†ñ®~©5ÔëÛâzâ|YdÞ±kÒ#ƒßv¬Á4ÎbjÝïÊ»ôû±€½¿([/¹™·;a\O¼{Rc²÷,^Ú{àYæÒ¾d*+è«ЖÌ"—„eÕxÑêµ I=šrÞ\)µ9ÞûPŠmò¬K©XÓà¤Ôäžúì=ŸeLi½y‰R¹‡Üoß1Ê=U=)aíaPC©¾Dÿö]º'éžG+âË +PZx‡þ+’Z\Ú%‹o­+ºÆ +^ƒ·gI3«5Û²zÜ£œLdU\¡ÿuÔìrÕ¶ºj˜j—Ém[Ó\¡}À«ÉMïeøËEÅ·¸½B’ª)Ê ýêÿðiüAÃ[ã_:ö:w#í{¿ÓdA9úfu¬}–÷é²8¶ô5å®Á³\ÆÏqqƒ¶WÐ^îÒ¾µKÿ Þ +‚­ïöYÕeÕ XÔ¦Ò OcšcÐrq¤çÉGΛ+ ¤ºerJ0å¶FÛ†Œz¥A/¿&ë—á/ç3ìm][îp¿[v¨ÿ¥N¸õY¶dØ ÷{ìzÒ—Úûú´–¾ »4ˆÔÖÁ˜˜ZZ~Ö§Ü%<+@)[jpïxåŽ÷¨èSn«|} ¯`¡œ¡.[±,£åç¸ðèÑ£1Ž#„ØîÒùï±y¢Z±"ÖeB!Ä‘B!fˆ\B!Ä ‘@!„˜!B!Ä ‘B!fˆ€B1C$„Bˆ" „BÌ !„b†H!„3D@!„˜!B!Ä ‘B!fˆ€B1C$„Bˆ" „BÌ !„'ãÀÜBIDATb†H!„3D@!„˜!B!Ä ‘B!fˆ€B1Cæ$öGÉëÃÅg­ßƒà̹ÂënÅ1î:¿/½nö(sé|ï,®kŠò¦¯«å½éüþ÷ÀnÍEWrÕ9Wé¾Zg½6VÓfVÅ*ûÚ)Èõßµ}Š÷Œ[^ñ‘ö?ÅñcN`“çÀžó½¦<®S×)Äý ðÝ=ºë{pm%t‚×ï\~ÇúË*´ÕÙm$Ï3/°Ü_^^CY~FP˜äI¬ž]à¯ñþ”½Åo¦¤nc‹€à—´•º†ð+V?°±R*1ë*«˜Ž«lÕ¥O½¼ÉfÍèçÄðªñÙWXO_r ¼•¼÷5¡(°Zv€ŸÒ 8­\ZüvªíUãØß¤}ðL]æoЯ¼—€ï[±f‚5jÓLß)CÚØ÷Y¯%`—΂6¥kmÉÍþë´ü8‰þ¾|£–X-^¥¹\X¼®ßÙ[c +rÇÞ¥S³9Ž€§éÊûQΚžbžž£€\ÅžEÅ÷÷žñËȬz^¹ÍfÆbxm¬†‹Àó#•EÔáÍþ«°œ¯'ïÝ$ï™ã†ÀjyÑxÿp'úû¶°fê9âAïðΪÔO%–¼µâø*ðpñ÷1ðe:QÒÒA¥å-½â{æ5Êôþ¾’)ë ð¯€ÿWYV±«À¦øÐ_ƶÞâ´®?M¾}|žÍ5çÜDîo“¿KV€Ô÷sÖ„åët~ÊO2ïeÇÇð#—s¦³Räzü}+Õ3Yå©Qî¹ó­ø­ë/E\îOfÞ?¡3Û¤¤!3êût•ÆâÉß© ¼ ü:yïÀ=Ë5ÏÒÝ›”Üý}|Œ³ìqà/¿™°Œ9Sj\­zW3ÕD—V„XÛ¥òÕ¬dI)µãÜç­zð¡·”±t¼ïX.ˆ´ÍîÑ ‡À+Ëyž°Ú…u?[VôY…›hÿše6†à&y«æ5ÎNjbÞgy¢—µ<¶8È-§©rðüUéLëõLA SGŸ5Ža͒ߢ›iæ¢!w£‚âÿ–ñÛ¾…¹"ö­Šùà‰Êp‘¼¨%W9,nWŸï³ü,ƺ¾¾Þ[qYZ¹IÙ› †úûžÇ-E•Š>KC¯Ñ¿]Ä„ÙkǵåûöŒ9%”qˆï: 7É×ÃÛä…Æò–¹tç¹ +¼¾q›¹‹Ý.¬û95¹ÙÿÛtÏ=hCcö邸RîaþÐMÎÞͼ¿4¶À·±}¸±rð*ááâ85üìrx.ó¾5K†®c¹m|ó9ò ³–‹‹c”°"êÇœ![3óž§í>\aÙ$u%ó=Ë]ð›Ês?mÍ+½ÇÖ=ù€îÞ[3‰>ޘܤn€þSÚÅj›r¶€¹=ü D ¬¶üŒrݼN]´|lå±Üi)a‰]k½¸H×)—žµ,ë>ÊroíE¾}?h(ë6¬3¥ç\\æ62–›1ˆµ4ú»gvè‚÷ÒöpDçÂô8¦›¤¥v颤-Ÿð7XV¡¹e ܱ‘œÉ™E™úÌŒ¦&ܯë¡X>rˤ ¶Ù°ÄUüAá·=»O×Áç8¤sgLuOÞ§³ZY3‰ë¬Ïl)ü©Ž{ÓÆ ÜÌÕß¡xÑÈVg7w(_sJ‹Eäì¶šÒ: ÜĶ*¤±8Sb è\»Š…ÔÔ«Vÿ›ýÇý[nÂÛ7pÛ²´¿FÝóÎÅ,YÞã À‡‹ƒç¸D·¼ê²ñ¹Œ:Í ‹œ/Û2ÿ¿NÞÄåÍ:ãήf†RK˜cgX.k€½ÎÙŽ¦v6T"Q{–ÏÊâq»ƒûÙ­ŠÊ3á‹t÷{Õ"À³ÆÄõ¬µþZî¸SHEÿ )úÝ̹uP©iVüŠ'vÇlÇÇÀg¨ ˆŠÚžàR°êîðiì~w.¯Œy?‡»ŽJÁМ®µØX³ÿWþ¾‰!‰€ZDKÁ_¹5 °‚ÿ`ýËεî1Áü˜„B†½ocÏûëåÎÓbJô¢‘át¦}Ãø|J¬{bùÍr»àPéºáMN/ûýÌÐŒ“;£¶]¬¢‡e¥ͷbBìAM]n”°V´¬s¹_.w†• (ÎÚgû~n Ö8Ø7>«HNÔFäº9†3Xër_Äò*üºÏ†,ÉËeƒ +Äëk;WoFÝêC,&g}AI}„X qÒ¬±¥.´Ö_kVhf-}‚ÝÆH9=¤]ŒAµ^³LκŠÖif·²Ä­CXŸgZÛÔÔXã 7DN´lL±·ø~ V&«ç€?#oþï«zrÁUC¶•€Ç +ä +ëÏûbÅD¬C—ÿ[tƒÍ:£ý-ak”púÜÀ°Œ­Ã`¡Ù¿˜­›ö¤lÓvËBˆéI3`º;½N-¼,_1't;jö/æÆKô‹Öߤ햅ë'·m±»cï*,¥ë®¡Üb¾´Fë¯seˆbsy³+úŠÂu­B!ÄÙ¤!„B¬ !„b†H!„3D@!„˜!B!Ä ‘B!fˆ€B1C$„Bˆ" „BÌ !„b†H!„3D@!„˜!B!Ä ‘B!fˆ€B1C$„Bˆ" „B̹ €»À£¯»+/u®’¿†ýÅëCã;W ÇÞ~oü6>Ç*¹¹xµb]Ë;ÀNrüܵö9',?Ÿô|)Vý­©“ñ¹Jç©¡ôüs÷Æ«oÖoâóÔÔ©Ü=²®wgñY® ¿_œ{[±êJz/¼>ñfÅ÷î6~'mC}ÛŽèÁÜ€‡›Àï€KÎw>Þ[Mqþ®S¹Þó·¥k)qöcøNòÞëÀñ€rx¼ýÿý Ï36·ÿ¿<_øþàZòÞðÂÈåbëCÕ,å6Oö¯U|ïà—%Ì8ú üP-5\^nøþ÷8+:ŸT–”àÉèïŸLtž©ømôÿOT|ÿË"à;l÷Œ^ˆÁ Á|÷:E-æÉ“t3±SÎ2ƒ=xœç©»–Z>Oiý*Ëe‹éî׳À3‹ÿŸÐ=›mâtåxŽº<­MˆsGfYo2ng)¦çWÀQæý`žÿ5ðnæó£Åos|Êxÿx¸°x]i*éz¨™M¶ðð‘Âwv€W“÷Nè¹W8½¿ñ«t¯cÑö.Ýsß&Þ£«³OUþ._a>VËÊÓWhö­{bƒ¨qàMÍ,«6 È{­;èæù +¾Íþt¦ø”·é|«ÇägƒžùÞ4Waò_÷èžõg8ÛYÞX¼ÿNg¤15ƒÓ ,[Ц”Wéÿ?>Êi{¹}vŸî…ÏR3½Ek@Ìè|[«†m¯Ï£¿YuAÄæP!˜jhPÔ\ð¢ˆk^cDc{Ó)þ”ßÿ¤ƒD Ü£sY×UŠ´ÏEˆ§Ç©qC]g˜¨<¡ Æó¸»Ø¿Xõ ±üŒeÓ:¢ÕkW/ä„S‰Ø3å¬lÛýÿ>q5XÏq›VJ䈭&mtÿˆ‰@T[fû·èLiÓÍ‚¦&(éÛÉûéb<5½KçÇž»%#6æž]j–½°øÍª¸ü[–ÿ𙸶‘ :ôâ-Æ`Ûýÿ¾q}é#ð6ÔoŸº´ÄÌxŒÓ?T-bŸÞÂwÇdøkü—èL.aK«ã6¾¹~‰mæÀ3ägÅSV©i|jvèV ¤LíkÞÖõÿ)Câ<,ë‹|åâÜѲ + ÅըƇt65AtÖ+ Ðy™ú<ö?YÞÊ1Ýý±®É r:¾ÈövÈS3eRè¢õŸÈ¼?d@ö&ë|S/—<þÿÀq¹`¹mv•aR!úyÕfàóÈ>ð}ã³mücwÏøNl)êcjL£Çsõ/¸+>ºø~Žà¦ò¢¾w€Ÿ’˜µ²5CüyKÑSteO™ÒÔ|^üÿ)ârÁrBœKJà€ÓYt)ü*‰;uoJ9~0U¡¬ 6èÊôe¶gð_«º'!¦Ä[EP;K¶r,„ø”ÔeT›@iLjýÿÖž›´LV õ¬}©Ðlù®+£Å|â5Kզʒˤ±Wðg,>û$«ol¥Áÿ³¨H y ÖMK:Þ‡Àk#œsJ_óyñÿ¦ˆÈåÊØöBdyŒÓ¨ð[•¿‰ýë«Ìÿ_,ƒÊ~šå™Ø5ÚÍÐ¥D@5+v¡Á¿•uG\ŸÐ%÷i­3¡-ÕX¤¬ ŠSqÞüÿ±ãr¹ÎƒXb‰Ø²šåP‹deñ·¨,sˆëˆ_ð–ž_Eƒ¿Åº#®ƒÙ¾5©I0×dË\õ5ž7ÿ`Š8€t¹Ü6eû¢šœ  &À+eÌe8ç/¨ìø«É› †q@}ì‹•Õ¯•©,çeýʪóqn(Å%lå:Ëì¿Ä*û:ü7…à6òâG^4ÞO±²úwBê2²r³OE‹ÿ?MµÉÁkcÇÔ¦¸*ð¶¥[Lm`œ®Æ*0E€m 4ø_CË)WMÍ–¼Çt«r®¯'+~¾—‹õø!yÁg-7{GB8¿þÿÀù„8÷ôÙXV›oâg*,eÜ´å–Û‚·‰K´êÍŠ¬kÉ™î½=2¬óÕ +ŽΫÿ?0Õ¾Bœkú€@M!VÅÐYmËNpc`íÌø]–À19¯þÿ€â„èÁ~ÔUî DÊÏ) Ñ>ƒÃr ·óâØy[ÿŸ2Õ¾BœkÆBlAˆzù,.boø³êÍ€ ›‰¿›¼7övÞýÿMŠØ„ÄA›P±áü½u`ÍŒ½¾÷ó³„ô½‡!PtlÆ~—è6¢ò޹ |¥Ç±é69Jwâ ‹ÞL}¸\yŽÏô(Û¶1Ös¯­Ïé}½‹ÿ¡å ù®W†Zj¯¿æ{ÊŸ°áÈ D‡^å¶™~DûVÓ19×Å3t{9Â9ßdõ{ ô!Ý™3κO统ÕnI¾i¤bì-VïfÙ„2ˆ-C`³I;ÈÖ×*24ž'ÆNAœÛD&åøgc,7Àu ÄºS)ωt¯oåÇy.ƒØB$„8%”7„ÚMî’÷rù >B”è¡Î5„$<©%ÆÊûp^Ë ¶ €Í&NÀÔçU³a‘8å>]ç9GÀ+ ß…³‰ˆö€’ïCð:¤post#eç~”åq¤Np_<õÅC#íÅC#íÿUÿUUUUÿUôªÿUUÂÃ8@.æô™Ì™Ìë3 PfEd ¬UÿUôU«Ôv"UUªUUªªUUUªUªªUUUUUªªUUUUªªUUUªªUªUUUUªUªUUªUªªUUUUªUUÿUUUUUUªUªUUUUUªªUUUªUªªªªªUUªUUUªªªªªªUªªªªªªªªªªªªUUUUUªUUUUUUUUUUUUUUUUUUUªUUUUUUUUUUœ€ £¥§³·»ÿSax~ ¬ÿÿ  ¥§©µ¹¿R`x} ¬ÿÿÿãÿÃÿÂÿÁÿÀÿ¿ÿ¾ÿ»ÿiÿ]ÿGÿCà +  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab€‚„Œ‘—œ›Ÿž ¢¤£¥¦¨§©ª¬®­¯±°µ´¶·pefhušni“qgtjx¡³zdlkyc{~»¼²º¿Âv}…|†ƒˆ‰Š‡Ž•–”o"ˆ****>P~¼ä(B\xŒžª¶Ô>fˆ¨ÐîBTj¤ÈèFjˆ¢ºÐð8^nž¾äþ(LzަÈô"@btŽ æòBf„¢Æà  ( > X ~ Ž ° È æ + +& +: +` +x + +¬ +Î +ô  : X d ‚ š À À Ô ú & J € ª Æ ð . : b †   º Ô ð6BXrœ¼êN†¶æ8Xz Äâ"DjšÈö(`’¾ú@dˆ°Öü0dšÖ +:n¾ìNf€œ¸è:b޾è:^‚ªÎþ Pz®èDr¢Ð"2ª.±/<²í2±Ü<²í2±/<²í2²ü<²í23!'3#"îÌ̪ýV"f« 1533#5«««V««U«þU«U53!53«UÿU«ªªªªU533533#3##5##5#53#5#U«U«UUUU«U«UUUUUU««««UÿU««««UUþ«ÿÿ«U#'+5333#5#33###5#5#533#5#35##UVUUVVUUVU«U«U«UU«UVUUUVVÿVÿUUUU««VUþ«ÿþªÿU%3#53#####535353553U«««UVUU«UVUÿ«««UU«U«UU«U«UªªU#)5!!33353##33#5#!5#3535#55#35ªÿUUVªUUUUªVÿUUVV«UªªVUVUUUUVU«UUUUVUªþVUÿ««UU53U«ªªU53#3#5#5#35«UUUUVUUUUýUUUVª«U5333###53UVUUVUUUUUþU«UU«UU53353#3#5##535UVUUUUVUUUUUUUVVVVUU« 533##5#5«U««U«U««U««Uÿ««« =3##535«VUUUV«UUUUU5!UUU««153«««53#####5353535U«UVUU«UVUU««ªVª««ªVªUU5!33##!5#5#355##3353«UUUUÿVUUUUUUVUUUÿVUUVUUUUÿVVUU 533!53#5U«Uþ«UUUþUUVU«U5!3###353!5353535##5UVVUUªVþUUVU«UUU«UUVV««UU«UUÿU«U5!3#3#!5#533#53535##5UVVVVÿUU««VU«UUU«ªÿVVUUUU«UU53##3533##5!3535««UU«UU«ÿUV«U«Uÿ««U««UUVÿU«U!!33#!5#533«ÿªVVÿUU«UU«Uþ«VVUUU53##33#!5#3535#«VU«UUþªUUVªª«UUVUUþªUU«UVýªVþªÿUU5!####353535!UVU«VUUÿ«ªÿU«ÿ«U«U5!3#3#!5#35###UVUUUUþªUUUUªªª«UUÿVÿUUVÿÿþªÿÿUU5!3##!53535!5##UVUUVÿ«UÿUUªUUþUVVUUVUþ«Uþ««15353«««««U««ÿU«U 153##535'53«VUUU«UªVVU«ªª«U53###333#5#5#5#53535«VUUUUV«UVUUVUUUVUUVUUVUUVU«««=!!!«þU«þU«UUV«U53333####5353535#5#5«UUVVUU«UVUUVUUUVUUVUUVUUVU«3535!3###53535#U«ÿUVVU«VU«««U«U«U««U«VUU!%5!3#!5#53533!#3!!5#5#355#«UUUÿUU«Uþ«VVUþ«VUUUUUÿUUUV«UÿVUUVUÿUUU5333#!#35355##!5«UUªÿ«UVªUU«UU«þÿ«ªV««Vÿ« 1!3#3#5#35#«UUUUVªUUªUÿVÿU«ÿUþUÿ5!3#5#353#!5#UVU«ªª«UþªU«UUVVýªVVUUV 1!3##5#35«UUVªUUþVU«ýªV« 1!#5#3#!«Vªªª«VÿVÿU« 1!#5#3#«Vªªª«VÿVþ«5!3#5#3#5!!5#UVU«ªªUþUU«UUVVýªVþUUVU 13!3#!«ªªÿþ«UýUþ«U 5!#3!53UUUþ«U«UUýªUUV5!#!5#533#U«UþªU«ªªU«ýUUUVVVV133535353###333#5#5#«UUVUUVUUVU«UUÿUVU«UUVUU««ªþ««13353«ªVýUV«#53333535353#3####5#5##3«UUVUU«UU«UUVUU«U«UUVªªVUÿÿÿ«UU«þ«U133333#5#5#5#5#«UUVªUUVUU«UUUýU«UVþUU5!3##!5#355#33«UUUUþªUUªU««UUþVUUVVVþV 1!3#!#«UUÿªªUþªUÿUVþªÿ«U5!3##3!5#5#355#33«UUUUªþ««UUªU««UUþVUUUUVVVþV1!3##33#5#5##«UUVVU«UUªªUÿVUU«U«ÿ«ÿ#5!3#5#3333#!5#5335#5#5#5#5UVU«ªUUVUUþªU«ªUUVU«UUVVVUUVÿUUVV«UVU« 5!###«ªVU«UýU«V 5333#5#!5«ª«UVÿU«ýU«ýUUUU333533####5#5#5«UUVªUUVUUV«Uþ«ÿª«þ«««UU««33535333#533######«UUVUUU«UUVªVU«þ«ªª««UUþªª«U«U#5333533##33#5#5###53535#5«UUVªUUUUªVUU«UVVU««ªU«U«ª««ªUÿ«U«ª3333####5«UU«UVªVÿUUÿ«þ«U««5!###353!353535#«VUUªVþUUVU«U««ª««V««U«VÿUU!#3UU«Uü«VU3333#5#5#5UVUUUUV«ª«ÿ«ª«ÿUU5!!53ÿUUüVUÿUUU175!!353##5##!3#####5#5#3533535#5##55#3U«UU«UUUU«UVªVUU«UVVª«««UUUUUUVVVUUÿVUUV««UUUUVUUUþ«þUÿ««5!«UUUUU53#5!#5#3###535Uªÿªª«UU«UUUý«UªU«UþU«U5!3#5#!5#535!5##55#35«UUVÿUUªVªUUUþUUU«U«UUþ«U«VU533533#!5###UVU«UUþªUUUUUþ«UUþUUU«ýU«Uþª«U5!3#5#353#!5#UVVªªVVÿUUUUUþUVVUU«U 3!5#35!53#«UþUUUVVªUü«U«U«ýU«þUU5!3!!53#!5#5#UVUþ«UUþªUUªUUÿ«VVUU««««UU53#3###535«ªUUU«UUUU«UþU«ÿUU5!#!!3#!5#53!5!535#55#U«UÿUUþªUUþ«UUUªUÿUUVªVVUUª«U««««U 53!3###UVU«ª«UÿUþþ«U 53#53UV««Uý«UUÿUÿU«U 53#!5353UVVÿ««UýVVVUUUU5335353###33#5#5##UVUU«UVU«U«UU«UþVUUUUVUU«UV««U53#UV«Uü««U33533#####33«ªVªV«U«U«UVUUUUþþþUUU 1335!3##UVU«ªUUUUþþU 5!3#!5##UVUUþªUUªUUþUUU«þU«þUÿUU 335!3#!#UVUUÿªª«UUUþ«VÿVUþ«ÿUU 5!###5##35U««U«UUªUUýUU«þ«UþUVUU 13353#5#UVªUUUUUªUþU5!!333#!5#53!5#5#5#5UVÿU«UUþªUUU«UUUUVU«UUVVVUU«U 533###535«UUU«UU«U«UþUVU 5333#5#!5«ª«UVÿUþý«UUUU53333###5#5«ªVUUVªV«ªþVªUþ«VUUV«U5333333###5##5«U«UUVVU«U«UþVªþVªUþ«VUUUUU53353##33#5#5##53535#5«ª«UVVU«UU«UVV«ªªªU«UU««Uÿ«UUVÿUU3333####53535#5#5«UU«UVU«VUUVUþ«UªþV«UVVUUVUU5!###!!535353535!UVUþUVUUÿ«ªª«UVU«UUVUUÿUUU53##33#5##53«ªUUUUªVUUUUþ«VþVVVªVUÿU«3«««üUÿUUU5333###5335#«UUUU«UVVUUþ«VþVVVªVU««53353##5##5U«UVVªVUUVVVVUUUU«U533#####53535!#35UVVª««UUV«««U«UþþU«UU«VÿU«U 53#=3UV««Uþ««ªªÿ««U533#3##5#5#35#UVVVVU«UU«UUUUþªUUUUVUþUVþª!533#5#33#353#!5##53#53«ªVVªUUU«UUÿVUUUU«UUVV«UVÿVVUUUUV53333##3###535#5«UU«UVVVªVVVU««U«ªVUÿUVªÿ«#'5!3#5#!3#3#!5#5335!5#535#55#UVU«ªUUUUþªU«ªÿUUUUª«UUVV«U«U«UUUU«U«U«þU««UU7!#35!3#!5#!«««þª«UUþUUþU«VUUUUUþUUU«þU«þUU 5!53!55#««ÿ«VUVVVUÿ«VVVU« 53#3#5#5'53##33#5#5#535UVVVVUUUUVVUUVUUU««U««UVUUVUUVVUUVU!/5!5353#!333#!5#53!5#5#5#5%533###535UVªªÿU«UUþªUUU«U«UUU«UUUVUU«UVU«UUVVVUU««U«UþUVUU5!UUUUU7!#5!3#!5#!««««UUþUUþU«VªUUUþUUU«þU«þUUU53#!5!#3###535Uªÿ«UU«UUUü«UU«UþU««U 33##5#535#U«UU«UU««U«UU««««U«=!533##5#5«ÿU««U«UVVVUUVUUV«U533##3!53535«UUV«ÿUVUUUVUUªVU«U533#3##535#535«UUUU««VVUUUVUUUUVUÿUUU53353533######3«UUVUUªVUUVUU«ªþ««ªþV«ÿÿ«VÿUU5!##!5!##5#5#U«UVÿUUVUUUý«VVUþ«U««53««««U 533!535#5UVUÿUUUþ«UU«UU 5!%!'5#ÿUVUVV«ÿUVVU«5333###53535#5533##535«UUVVUUUUUÿUVVUU«UUVUUVVUUVV««U««UÿU«U753##353!5#53553«ªUUªVþªUUVª«ªªVªU«VªVªªUU5##!5333#5!#353535#533UUUVVUUªÿ«UVUUUU«ªUÿ«VªþU««U«U«UUUU!5333#5!#35355##!553##5«UUªÿ«UVªUU«UUUUVVªþU««U«UªªUÿ«UUUUUUU#5##!5'535##5353333#5!#3535UUU«UUUUUVUUªÿ«UV«ªUÿ«ªVUUUUU«ªþU««U«UUU!)53353##5##55333#5!#3535!5#5##«ªVUU«UV««UUªÿ«UVVUUUUUUUUUUÿUU«þ««««UÿU«UUU!53353#33#!#3535355##!5«U«UUUUªÿ«UVUUUUUUUUU«þÿ«ªVUÿ«Vÿ«UU !5#5##5#!33#5!#353535«VUUªUUUUªÿ«UVUU«UUUVþ««þ««««UU«5!#3#3!##3535##«««««þªª«UVªUU«UUÿVÿUÿ«ªVþªV««ÿU5!3#5#353####535#5#UVU«ªª«UVUUU«U«UUVVýª««UUVVUUV«U5#5333#5#3#!!«VVU«VªªªþU«UUUU«UªVÿU««U53#3#5#3#!!35UU«VªªªþU«UUU«UªVÿU«U«U13535333#5#3#!35#UVUUVVªªªÿUU«UUUU«UªVÿU«U«U53!53!#5#3#!UÿV««VªªªUUUUý««UªVÿUUU535#5333#3!53«VVUUUUþ«UUVUUUUVþUUUU53#3#3!53#535«UUªUUþ«UUUUUUVþUUVUUU#3!53#535353335#UUUþ«UUUVUUªUUUþUUVUUUUUUU53!535!#3!53Uþ«UUUUUþ«UUUUU«VVþUUU !3##!#5#3#35U«UUUþªU««UUUUþVU«Uþ««UþªVUU%53353#3#5#5#5#5##3333#5##5«ªVUUªUUVUU««UUV«UVUUUUUýUUVUUþ«UUUVVUUUUU5#33'5#53333##!5#3535UªU««UUU«UUUþªUUVUþVV««UUUUVþVVUU«UVUU5#3353#33##!5#353535UªU«VVV«UUUþªUUVUUþVV«UUUVþVVUU«UVUUU!5#33%5353333##!5#35735#UªU«ÿUUVUUUUþªUU«UUUþVV«U«UUUVþVVUU«UVUUU'53353##5##55!3##!5#355#33«ªVUU«UVVUUUUþªUUªU«UUUUUUUUÿUUþ«VUUVUUUþ«VVUU5!3##!5#355#3353!53«UUUUþªUUªU«VVÿUUVVþVVUU«UUUþVV«UUUUU«#53335353##33#5#5###53535#5UVUUVVUUVVUUVUUVV«UUVVUUVUUVVUUVVUUVU!+5!353#3#!5##535#5##3535###35UVUUUUUþ«VUUU««UUUVVUUª«UUUUVþUUUUV««VÿVUþ«VU«VU#533#333#5#!5UUUUÿ«ª«UVÿUUUýªVýªVýUUUUU 5333#5#!553##5«ª«UVÿ«UUUUVýªVýUUUU«UUUUU53535333#5#!53#«UUVUUVÿVªUUVUUUUýUUUUVýª«UU 5333#5#!553!53«ª«UVÿVþªVUVýªVýUUUU«UUUUU533333####553##5UVUU«UVªV«UUU«VUU««þ«U«UUUUU5!#!3#!3!53#UUUUÿUþ«UV««UUVUÿUVUUVþUÿÿUU5!3#3##53#53##35«UUUU«UUUª«UUUÿUþªUUVUüUVUU##533#5!3#5#!5#535!5##55#35UUUUUUUVÿUUªVªUUUU«UUþUUU«U«UUþ«U«VU#5!3#5#!5#535!5##55#3553##5«UUVÿUUªVªUUVVUUUþUUU«U«UUþ«U«VUUUUUU !'3533#5##5!3#5#!5#535!5##55#35«UUVVUUUUVÿUUªVªUUUUUU«UUþUUU«U«UUþ«U«VU%+53353##5##55!3#5#!5#535!5##55#35«ªVUU«UVVUUVÿUUªVªUUUUUUUUUÿUUþUUU«U«UUþ«U«V#5!3#5#!5#535!5##55#353+53«UUVÿUUªVªUUVVªUUUþUUU«U«UUþ«U«VUUUU %5#355#!3#5#!5#535!5##5UªUUUUUUVÿUUªV«U«VªVVUÿþUUU«U«UU«U!%5!3533!353##5#!5#535355#5#UVªVÿªVVªVÿUU«U«UUUUUÿ«VVUUUU«U««««ÿ««ÿ««U5!3#5#353###5#5#UVVªªVVUUVUUUUUþUVVUUUU«U#533#5!3!!53#!5#5#UUUU«VUþ«UUþªUUªUUU«UUÿ«VVUU««««U53##55!3!!53#!5#5#UUUVVUþ«UUþªUUªUUUUÿUUÿ«VVUU««««U !3533#5##5!3!!53#!5#5#«UUVVUUVVUþ«UUþªUUªUUUUU«UUÿ«VVUU««««3#!535!3!!53#!5#5#UVVÿVVVUþ«UUþªUUªUUU«UUÿ«VVUU«««««U #533#53#UUUVVV«UUU«Uý««U 53##553#UVVUUV«UUUUÿUý«U 3533#5##53#UVUUVUUV«UUUUU«Uý«3+5353+«UU«UVVUUUU«Uý«!53353#33#!5#3535##535#U«UVVVUUþªUU«UVVªª«UUUUVªþªUUVªUUVýªÿU 1335!3##53353##5##5UVU«ªªVUU«UVUUUUþþUUUUUUUUU#533#5!3#!5##UUUU«VUUþªUUªUUU«UUþUUU«þU«þUU53##55!3#!5##UUUVVUUþªUUªUUUUÿUUþUUU«þU«þUU 3533#5##5!3#!5##«UUVVUUVVUUþªUUªUUUUU«UUþUUU«þU«þUU53353##5##55!3#!5##«ªVUU«UVVUUþªUUªUUUUUUUUÿUUþUUU«þU«þU 5!3#!5##3#!53UVUUþªUUªªVVÿVUUþUUU«þU«þU«UUUU« 753%5!%53«Uÿ«ÿUUVV«UU«UUUU'535!353#3#!5##535#5!3#!#5UÿVUUUUUþ«VUUU«ÿUUVUUUUUUUþªUUUUVUUUÿUVVU#533#333#5#!5UUUUÿ«ª«UVÿUUUýªþý«UUUU53##5333#5#!5UUU««ª«UVÿUUUUýUþý«UUUU 3533#5##333#5#!5«UUVVUU««ª«UVÿUUUUUýªþý«UUU 5333#5#!53#!53«ª«UVÿVVÿVUþý«UUU«UUUÿUU!53##53333####53535#5#5UUU««UU«UVU«VUUVUUUUþUþ«UªþV«UVVUUVUÿU«U5333###5#3UVªVVª«UUUÿU«ªVU««þU««ªÿU!3#!533333####53535#5#5UVVÿV««UU«UVU«VUUVUUUþUUþ«UªþV«UVVUUVU«5!!33#3!5#355#33«ÿU«««ýªUU«UUU«UUVªVÿUUVVVþV«U!5!3533!353##5#!5##5#UVªVÿªVVªVÿUUUUUUUUÿ«VVUUUU«þU«þU««U/53353#33#5#3333#!5#5335#5#5#5#53535UVUUU«U«ªUUVUUþªU«ªUUVUUVUUUUUVUUUUVU«UUVVVUUVªVUU'5!!333#!5#53!5#5#5#553353##5UVÿU«UUþªUUU«UUVUUUUUUUVU«UUVVVUU«UUUUUUU53333####553!53«UU«UVªVVþªV««U««þ«U«UUUU«U#53353#3###353!353535##535UVUUU«VUUªVþUUVU«U«UUUUU««U«V«UVªU«UU#5!###!!535353535!53353##5UVUþUVUUÿVUUVVU«ªª«UVU«UUVUUUUUUUUU#5!3#5#3#3#353#!5#5#535#535«UU««««««UUÿVUUUU«UUVV«UVU«VVUU«UVU«S€r $ÿ« {ÿ« |ÿ« }ÿ« ~ÿ« ÿ« €ÿ« ÿ« ÿ«ÿ«ÿ« ÿ«! +ÿ«&aÿ«(ÿ«(aÿ«)ÿU)ÿU)ÿ«,Wÿ«/ +ÿ«/9ÿ«/:ÿ«/<ÿU/\ÿ«/˜ÿU/¿ÿU3ÿU3ÿU67ÿ«72ÿ«74ÿ«9ÿ«9-ÿ«:-ÿ«<$ÿ«<{ÿ«<|ÿ«<}ÿ«<~ÿ«<ÿ«<€ÿ«<ÿ«>-ÿ«>M«? ÿ«B ÿ«Bÿ«Bkÿ«Bmÿ«B²ÿ«Fÿ«F +ÿ«F ÿ«F7ÿ«ICÿ«IIÿ«Ibÿ«Ioÿ«VWÿ«^-ÿ«^M«y +ÿ«˜$ÿ«˜{ÿ«˜|ÿ«˜}ÿ«˜~ÿ«˜ÿ«˜€ÿ«˜ÿ«©ÿ«ªÿ«² +ÿ«½7ÿ«¿$ÿ«¿{ÿ«¿|ÿ«¿}ÿ«¿~ÿ«¿ÿ«¿€ÿ«¿ÿ«ú|ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«Uÿ«Uÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿUÿUÿ«ÿ«ÿ«ÿUÿ«ÿ«ÿ«ÿ«ÿ«ÿ«»&R~ÖhÖÖìÖÖÖhhhÀªÖÖ””ìÀR&ª<ªRhhÖ”Ö~hÖRÖÖÖÖÖh~Ö~ÖÖÖÖRÖ~Rª~ÖÖªªÖªÖªÀÖÖÖÖÖÖÖªÖÖÖÖÖÖÖÖÖÖÖììÖÖÖÖÖÀÖÖÖª½ + +   +*þ6n +»Ô## +] ‚ +¥ a$t6 7 7 7Ñ8@73 7ª7ã8Q69G6Ò 7L 7´88d7m7¾88v7ƒ 7Ç8-8‰6'Ž6B l ¥  Æ FÛ G h  "° 45ÖGerhard Grossmann, www.geocities.com/gerhard.grossmannGerhard Grossmann, www.geocities.com/gerhard.grossmannPixAntiquaPixAntiquaMediumMediumFontForge : PixAntiqua : 14-11-2008FontForge : PixAntiqua : 14-11-2008PixAntiquaPixAntiquaVersion 1.0 Version 1.0 PixAntiquaPixAntiquaCopyright (c) 2008, Gerhard Großmann (<http://www.geocities.com/gerhard.grossmann|schlafender-hund@yahoo.de>), +with Reserved Font Name PixAntiqua. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE.Copyright (c) 2008, Gerhard Gro§mann (), +with Reserved Font Name PixAntiqua. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE.http://scripts.sil.org/oflhttp://scripts.sil.org/oflStandardStandardZwölf große Boxkämpfer jagen Eva quer über den Sylter Deich. 0123456789Zwšlf gro§e BoxkŠmpfer jagen Eva quer Ÿber den Sylter Deich. 0123456789All Typographic FeaturesFonctions typographiquesAlle typografischen MglichkeitenFunzioni TipograficheAlle typografische kenmerkenLigaturesLigaturesLigaturenLegatureLigaturenAll Type FeaturesToutes fonctions typographiquesAlle AuszeichnungsartenTutte le FunzioniAlle typekenmerkenCommon LigaturesLigatures UsuellesNormale LigaturenLegature pi ComuniGemeenschappelijke Ligaturenà +  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a£„…–†‹©¤ŠÚƒ“ˆÃžª¢­ÉÇ®bcdËeÈÊÏÌÍÎéfÓÐѯgð‘ÖÔÕhëí‰jikmln oqprsutvwêxzy{}|¸¡~€ì±ä廿ç uni007Funi00A0uni00ADuni00B2uni00B3uni00B5uni00B9Euroÿÿ F BCCDabbckllmnoop +0>DFLTlatnÿÿÿÿliga. +$oObWCLlWIV +0>DFLTlatnÿÿÿÿkern +Îx$R€†Œ€’˜ž¬ºÀÞèîø .€8N`rºrr.’ ŒŒ’rrè  +$ÿ«7{ÿ«|ÿ«}ÿ«~ÿ«ÿ«€ÿ«ÿ« ÿ«ÿ«ÿ« +ÿ«aÿ«ÿ«-aÿ«ÿUÿUÿ«Wÿ« +ÿ«9ÿ«:ÿ«<ÿU\ÿ«˜ÿU¿ÿUÿUÿU7ÿ«2ÿ«4ÿ«ÿ«-ÿ«-ÿ«$ÿ«{ÿ«|ÿ«}ÿ«~ÿ«ÿ«€ÿ«ÿ«-ÿ«M« ÿ«ÿ«kÿ«mÿ«²ÿ«ÿ« +ÿ« ÿ«7ÿ«Cÿ«Iÿ«bÿ«oÿ« $ !&(),/3679:<>?BFINV[\^y˜©ª²¸º½¿Düx ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«Uôÿ«Uÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿ«ÿUÿUÿ«ÿ«ÿ«ÿUÿ«ÿ«ÿ«ÿ«ÿ«ÿ«–– +»  +   +            + +  . + +   #$--77BB +CCDDFJMMP]aabbeeiikk llmm noqqttuuvv{’’›žžŸ¡¢¦«±²² ³¸ºº¼¼¾¾ÁÁ` !"#$&()/479:<>?BEFHIJKMNPQRSTUVWYZ[\^abdglmqrstuvwyz{|}~€˜™›œŸ ¢£¤¥¦©ª«­®¯±²¸¹º¿ÃZÂÄç_8ÅC!%$(Hÿÿÿþÿÿÿÿÿÿÿÿ P˜ÂâòII*LL,OO.WV0ÿÿÿÿ€€    ?ÿÿ´¿ÿÿ¸?ÿÿ³¿ÿÿº?ÿÿ­¿ÿÿ¼?ÿÿ¯¿ÿÿ±Cobl \ No newline at end of file diff --git a/examples/web/text/text_bmfont_ttf.html b/examples/web/text/text_bmfont_ttf.html new file mode 100644 index 0000000..c625073 --- /dev/null +++ b/examples/web/text/text_bmfont_ttf.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/text/text_bmfont_ttf.js b/examples/web/text/text_bmfont_ttf.js new file mode 100644 index 0000000..2c5fc83 --- /dev/null +++ b/examples/web/text/text_bmfont_ttf.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="text/text_bmfont_ttf.data";var REMOTE_PACKAGE_BASE="text_bmfont_ttf.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5275808,DYNAMICTOP_PTR=32896;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="text_bmfont_ttf.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":324,"maximum":324,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"nc":___lock,"z":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"y":___syscall146,"l":___syscall221,"ka":___syscall5,"x":___syscall54,"R":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"td":_emscripten_get_gamepad_status,"id":_emscripten_get_heap_size,"Zc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Ec":_emscripten_glActiveTexture,"uc":_emscripten_glAttachShader,"mc":_emscripten_glBeginQueryEXT,"fc":_emscripten_glBindAttribLocation,"ac":_emscripten_glBindBuffer,"Wb":_emscripten_glBindFramebuffer,"Pb":_emscripten_glBindRenderbuffer,"Hb":_emscripten_glBindTexture,"xb":_emscripten_glBindVertexArrayOES,"ob":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"fe":_emscripten_glGetShaderInfoLog,"ee":_emscripten_glGetShaderPrecisionFormat,"de":_emscripten_glGetShaderSource,"ce":_emscripten_glGetShaderiv,"be":_emscripten_glGetString,"ae":_emscripten_glGetTexParameterfv,"$d":_emscripten_glGetTexParameteriv,"_d":_emscripten_glGetUniformLocation,"Zd":_emscripten_glGetUniformfv,"Yd":_emscripten_glGetUniformiv,"Xd":_emscripten_glGetVertexAttribPointerv,"Wd":_emscripten_glGetVertexAttribfv,"Vd":_emscripten_glGetVertexAttribiv,"Ud":_emscripten_glHint,"Td":_emscripten_glIsBuffer,"Sd":_emscripten_glIsEnabled,"Rd":_emscripten_glIsFramebuffer,"Qd":_emscripten_glIsProgram,"Pd":_emscripten_glIsQueryEXT,"Od":_emscripten_glIsRenderbuffer,"Nd":_emscripten_glIsShader,"Md":_emscripten_glIsTexture,"Ld":_emscripten_glIsVertexArrayOES,"Kd":_emscripten_glLineWidth,"Jd":_emscripten_glLinkProgram,"Id":_emscripten_glPixelStorei,"Hd":_emscripten_glPolygonOffset,"Gd":_emscripten_glQueryCounterEXT,"Fd":_emscripten_glReadPixels,"Ed":_emscripten_glReleaseShaderCompiler,"Dd":_emscripten_glRenderbufferStorage,"Cd":_emscripten_glSampleCoverage,"Bd":_emscripten_glScissor,"Ad":_emscripten_glShaderBinary,"zd":_emscripten_glShaderSource,"yd":_emscripten_glStencilFunc,"xd":_emscripten_glStencilFuncSeparate,"wd":_emscripten_glStencilMask,"vd":_emscripten_glStencilMaskSeparate,"ud":_emscripten_glStencilOp,"sd":_emscripten_glStencilOpSeparate,"rd":_emscripten_glTexImage2D,"qd":_emscripten_glTexParameterf,"pd":_emscripten_glTexParameterfv,"od":_emscripten_glTexParameteri,"nd":_emscripten_glTexParameteriv,"md":_emscripten_glTexSubImage2D,"ld":_emscripten_glUniform1f,"kd":_emscripten_glUniform1fv,"jd":_emscripten_glUniform1i,"hd":_emscripten_glUniform1iv,"gd":_emscripten_glUniform2f,"fd":_emscripten_glUniform2fv,"ed":_emscripten_glUniform2i,"dd":_emscripten_glUniform2iv,"cd":_emscripten_glUniform3f,"bd":_emscripten_glUniform3fv,"ad":_emscripten_glUniform3i,"$c":_emscripten_glUniform3iv,"_c":_emscripten_glUniform4f,"Yc":_emscripten_glUniform4fv,"Xc":_emscripten_glUniform4i,"Wc":_emscripten_glUniform4iv,"Vc":_emscripten_glUniformMatrix2fv,"Uc":_emscripten_glUniformMatrix3fv,"Tc":_emscripten_glUniformMatrix4fv,"Sc":_emscripten_glUseProgram,"Rc":_emscripten_glValidateProgram,"Qc":_emscripten_glVertexAttrib1f,"Pc":_emscripten_glVertexAttrib1fv,"Oc":_emscripten_glVertexAttrib2f,"Nc":_emscripten_glVertexAttrib2fv,"Mc":_emscripten_glVertexAttrib3f,"Lc":_emscripten_glVertexAttrib3fv,"Kc":_emscripten_glVertexAttrib4f,"Jc":_emscripten_glVertexAttrib4fv,"Ic":_emscripten_glVertexAttribDivisorANGLE,"Hc":_emscripten_glVertexAttribPointer,"Gc":_emscripten_glViewport,"Fc":_emscripten_memcpy_big,"Dc":_emscripten_request_pointerlock,"Cc":_emscripten_resize_heap,"O":_emscripten_run_script,"Bc":_emscripten_sample_gamepad_data,"Ac":_emscripten_set_click_callback_on_thread,"zc":_emscripten_set_fullscreenchange_callback_on_thread,"yc":_emscripten_set_gamepadconnected_callback_on_thread,"xc":_emscripten_set_gamepaddisconnected_callback_on_thread,"wc":_emscripten_set_keypress_callback_on_thread,"vc":_emscripten_set_main_loop,"tc":_emscripten_set_touchcancel_callback_on_thread,"sc":_emscripten_set_touchend_callback_on_thread,"rc":_emscripten_set_touchmove_callback_on_thread,"qc":_emscripten_set_touchstart_callback_on_thread,"pc":_exit,"oc":_glActiveTexture,"N":_glAttachShader,"j":_glBindAttribLocation,"d":_glBindBuffer,"g":_glBindTexture,"lc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"M":_glClear,"L":_glClearColor,"kc":_glClearDepthf,"jc":_glCompileShader,"ic":_glCompressedTexImage2D,"hc":_glCreateProgram,"gc":_glCreateShader,"ec":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"dc":_glDepthFunc,"H":_glDetachShader,"cc":_glDisable,"o":_glDisableVertexAttribArray,"bc":_glDrawArrays,"$b":_glDrawElements,"G":_glEnable,"i":_glEnableVertexAttribArray,"_b":_glFrontFace,"n":_glGenBuffers,"Zb":_glGenTextures,"t":_glGetAttribLocation,"Yb":_glGetFloatv,"Xb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Vb":_glGetShaderInfoLog,"E":_glGetShaderiv,"k":_glGetString,"s":_glGetUniformLocation,"Ub":_glLinkProgram,"Tb":_glPixelStorei,"Sb":_glReadPixels,"Rb":_glShaderSource,"Qb":_glTexImage2D,"D":_glTexParameterf,"f":_glTexParameteri,"Ob":_glUniform1i,"Nb":_glUniform4f,"Mb":_glUniformMatrix4fv,"r":_glUseProgram,"h":_glVertexAttribPointer,"Lb":_glViewport,"Kb":_glfwCreateWindow,"Jb":_glfwDefaultWindowHints,"Ib":_glfwDestroyWindow,"Gb":_glfwGetCursorPos,"Fb":_glfwGetKey,"m":_glfwGetTime,"Eb":_glfwInit,"Db":_glfwMakeContextCurrent,"Cb":_glfwSetCharCallback,"Bb":_glfwSetCursorEnterCallback,"Ab":_glfwSetCursorPosCallback,"zb":_glfwSetDropCallback,"yb":_glfwSetErrorCallback,"wb":_glfwSetKeyCallback,"vb":_glfwSetMouseButtonCallback,"ub":_glfwSetScrollCallback,"tb":_glfwSetWindowIconifyCallback,"sb":_glfwSetWindowShouldClose,"rb":_glfwSetWindowSizeCallback,"qb":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"pb":_llvm_exp2_f32,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["me"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["we"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/text/text_bmfont_ttf.wasm b/examples/web/text/text_bmfont_ttf.wasm new file mode 100644 index 0000000..ea146ef Binary files /dev/null and b/examples/web/text/text_bmfont_ttf.wasm differ diff --git a/examples/web/text/text_font_sdf.c b/examples/web/text/text_font_sdf.c index 39fa784..a342529 100644 --- a/examples/web/text/text_font_sdf.c +++ b/examples/web/text/text_font_sdf.c @@ -24,9 +24,9 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; - +const int screenWidth = 800; +const int screenHeight = 450; + const char msg[50] = "Signed Distance Fields"; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) @@ -40,16 +40,16 @@ Vector2 fontPosition = { 0.0f }; Vector2 textSize = { 0.0f }; float fontSize = 16.0f; int currentFont = 0; // 0 - fontDefault, 1 - fontSDF - + //---------------------------------------------------------------------------------- // Module Functions Declaration //---------------------------------------------------------------------------------- void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -66,7 +66,7 @@ int main() Image atlas = GenImageFontAtlas(fontDefault.chars, 95, 16, 4, 0); fontDefault.texture = LoadTextureFromImage(atlas); UnloadImage(atlas); - + // SDF font generation from TTF font fontSDF.baseSize = 16; fontSDF.charsCount = 95; @@ -76,7 +76,7 @@ int main() atlas = GenImageFontAtlas(fontSDF.chars, 95, 16, 0, 1); fontSDF.texture = LoadTextureFromImage(atlas); UnloadImage(atlas); - + // Load SDF required shader (we use default vertex shader) shader = LoadShader(0, FormatText("resources/shaders/glsl%i/sdf.fs", GLSL_VERSION)); SetTextureFilter(fontSDF.texture, FILTER_BILINEAR); // Required for SDF font @@ -88,7 +88,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -100,12 +100,12 @@ int main() //-------------------------------------------------------------------------------------- UnloadFont(fontDefault); // Default font unloading UnloadFont(fontSDF); // SDF font unloading - + UnloadShader(shader); // Unload SDF shader - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- - + return 0; } @@ -117,40 +117,40 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- fontSize += GetMouseWheelMove()*8.0f; - + if (fontSize < 6) fontSize = 6; - + if (IsKeyDown(KEY_SPACE)) currentFont = 1; else currentFont = 0; - + if (currentFont == 0) textSize = MeasureTextEx(fontDefault, msg, fontSize, 0); else textSize = MeasureTextEx(fontSDF, msg, fontSize, 0); - + fontPosition.x = GetScreenWidth()/2 - textSize.x/2; fontPosition.y = GetScreenHeight()/2 - textSize.y/2 + 80; //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + if (currentFont == 1) { // NOTE: SDF fonts require a custom SDf shader to compute fragment color BeginShaderMode(shader); // Activate SDF font shader DrawTextEx(fontSDF, msg, fontPosition, fontSize, 0, BLACK); EndShaderMode(); // Activate our default shader for next drawings - + DrawTexture(fontSDF.texture, 10, 10, BLACK); } - else + else { DrawTextEx(fontDefault, msg, fontPosition, fontSize, 0, BLACK); DrawTexture(fontDefault.texture, 10, 10, BLACK); } - + if (currentFont == 1) DrawText("SDF!", 320, 20, 80, RED); else DrawText("default font", 315, 40, 30, GRAY); @@ -159,7 +159,7 @@ void UpdateDrawFrame(void) DrawText("Use MOUSE WHEEL to SCALE TEXT!", GetScreenWidth() - 240, 90, 10, DARKGRAY); DrawText("PRESS SPACE to USE SDF FONT VERSION!", 340, GetScreenHeight() - 30, 20, MAROON); - + EndDrawing(); //---------------------------------------------------------------------------------- } \ No newline at end of file diff --git a/examples/web/text/text_font_sdf.data b/examples/web/text/text_font_sdf.data new file mode 100644 index 0000000..badb0aa Binary files /dev/null and b/examples/web/text/text_font_sdf.data differ diff --git a/examples/web/text/text_font_sdf.html b/examples/web/text/text_font_sdf.html new file mode 100644 index 0000000..e7e365d --- /dev/null +++ b/examples/web/text/text_font_sdf.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/text/text_font_sdf.js b/examples/web/text/text_font_sdf.js new file mode 100644 index 0000000..4d957e6 --- /dev/null +++ b/examples/web/text/text_font_sdf.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="text/text_font_sdf.data";var REMOTE_PACKAGE_BASE="text_font_sdf.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5271776,DYNAMICTOP_PTR=28864;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="text_font_sdf.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":324,"maximum":324,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"oc":___lock,"C":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"B":___syscall146,"n":___syscall221,"ka":___syscall5,"A":___syscall54,"R":___syscall6,"z":___unlock,"y":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"ud":_emscripten_get_gamepad_status,"jd":_emscripten_get_heap_size,"_c":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Fc":_emscripten_glActiveTexture,"vc":_emscripten_glAttachShader,"nc":_emscripten_glBeginQueryEXT,"gc":_emscripten_glBindAttribLocation,"bc":_emscripten_glBindBuffer,"Wb":_emscripten_glBindFramebuffer,"Pb":_emscripten_glBindRenderbuffer,"Ib":_emscripten_glBindTexture,"yb":_emscripten_glBindVertexArrayOES,"pb":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ge":_emscripten_glGetShaderInfoLog,"fe":_emscripten_glGetShaderPrecisionFormat,"ee":_emscripten_glGetShaderSource,"de":_emscripten_glGetShaderiv,"ce":_emscripten_glGetString,"be":_emscripten_glGetTexParameterfv,"ae":_emscripten_glGetTexParameteriv,"$d":_emscripten_glGetUniformLocation,"_d":_emscripten_glGetUniformfv,"Zd":_emscripten_glGetUniformiv,"Yd":_emscripten_glGetVertexAttribPointerv,"Xd":_emscripten_glGetVertexAttribfv,"Wd":_emscripten_glGetVertexAttribiv,"Vd":_emscripten_glHint,"Ud":_emscripten_glIsBuffer,"Td":_emscripten_glIsEnabled,"Sd":_emscripten_glIsFramebuffer,"Rd":_emscripten_glIsProgram,"Qd":_emscripten_glIsQueryEXT,"Pd":_emscripten_glIsRenderbuffer,"Od":_emscripten_glIsShader,"Nd":_emscripten_glIsTexture,"Md":_emscripten_glIsVertexArrayOES,"Ld":_emscripten_glLineWidth,"Kd":_emscripten_glLinkProgram,"Jd":_emscripten_glPixelStorei,"Id":_emscripten_glPolygonOffset,"Hd":_emscripten_glQueryCounterEXT,"Gd":_emscripten_glReadPixels,"Fd":_emscripten_glReleaseShaderCompiler,"Ed":_emscripten_glRenderbufferStorage,"Dd":_emscripten_glSampleCoverage,"Cd":_emscripten_glScissor,"Bd":_emscripten_glShaderBinary,"Ad":_emscripten_glShaderSource,"zd":_emscripten_glStencilFunc,"yd":_emscripten_glStencilFuncSeparate,"xd":_emscripten_glStencilMask,"wd":_emscripten_glStencilMaskSeparate,"vd":_emscripten_glStencilOp,"td":_emscripten_glStencilOpSeparate,"sd":_emscripten_glTexImage2D,"rd":_emscripten_glTexParameterf,"qd":_emscripten_glTexParameterfv,"pd":_emscripten_glTexParameteri,"od":_emscripten_glTexParameteriv,"nd":_emscripten_glTexSubImage2D,"md":_emscripten_glUniform1f,"ld":_emscripten_glUniform1fv,"kd":_emscripten_glUniform1i,"id":_emscripten_glUniform1iv,"hd":_emscripten_glUniform2f,"gd":_emscripten_glUniform2fv,"fd":_emscripten_glUniform2i,"ed":_emscripten_glUniform2iv,"dd":_emscripten_glUniform3f,"cd":_emscripten_glUniform3fv,"bd":_emscripten_glUniform3i,"ad":_emscripten_glUniform3iv,"$c":_emscripten_glUniform4f,"Zc":_emscripten_glUniform4fv,"Yc":_emscripten_glUniform4i,"Xc":_emscripten_glUniform4iv,"Wc":_emscripten_glUniformMatrix2fv,"Vc":_emscripten_glUniformMatrix3fv,"Uc":_emscripten_glUniformMatrix4fv,"Tc":_emscripten_glUseProgram,"Sc":_emscripten_glValidateProgram,"Rc":_emscripten_glVertexAttrib1f,"Qc":_emscripten_glVertexAttrib1fv,"Pc":_emscripten_glVertexAttrib2f,"Oc":_emscripten_glVertexAttrib2fv,"Nc":_emscripten_glVertexAttrib3f,"Mc":_emscripten_glVertexAttrib3fv,"Lc":_emscripten_glVertexAttrib4f,"Kc":_emscripten_glVertexAttrib4fv,"Jc":_emscripten_glVertexAttribDivisorANGLE,"Ic":_emscripten_glVertexAttribPointer,"Hc":_emscripten_glViewport,"Gc":_emscripten_memcpy_big,"Ec":_emscripten_request_pointerlock,"Dc":_emscripten_resize_heap,"O":_emscripten_run_script,"Cc":_emscripten_sample_gamepad_data,"Bc":_emscripten_set_click_callback_on_thread,"Ac":_emscripten_set_fullscreenchange_callback_on_thread,"zc":_emscripten_set_gamepadconnected_callback_on_thread,"yc":_emscripten_set_gamepaddisconnected_callback_on_thread,"xc":_emscripten_set_keypress_callback_on_thread,"wc":_emscripten_set_main_loop,"uc":_emscripten_set_touchcancel_callback_on_thread,"tc":_emscripten_set_touchend_callback_on_thread,"sc":_emscripten_set_touchmove_callback_on_thread,"rc":_emscripten_set_touchstart_callback_on_thread,"qc":_exit,"pc":_glActiveTexture,"N":_glAttachShader,"l":_glBindAttribLocation,"d":_glBindBuffer,"i":_glBindTexture,"mc":_glBlendFunc,"t":_glBufferData,"x":_glBufferSubData,"M":_glClear,"L":_glClearColor,"lc":_glClearDepthf,"kc":_glCompileShader,"jc":_glCompressedTexImage2D,"ic":_glCreateProgram,"hc":_glCreateShader,"fc":_glCullFace,"s":_glDeleteBuffers,"w":_glDeleteProgram,"r":_glDeleteShader,"K":_glDeleteTextures,"ec":_glDepthFunc,"J":_glDetachShader,"dc":_glDisable,"q":_glDisableVertexAttribArray,"cc":_glDrawArrays,"ac":_glDrawElements,"I":_glEnable,"k":_glEnableVertexAttribArray,"$b":_glFrontFace,"p":_glGenBuffers,"_b":_glGenTextures,"Zb":_glGetActiveUniform,"f":_glGetAttribLocation,"Yb":_glGetFloatv,"Xb":_glGetProgramInfoLog,"v":_glGetProgramiv,"Vb":_glGetShaderInfoLog,"H":_glGetShaderiv,"m":_glGetString,"e":_glGetUniformLocation,"Ub":_glLinkProgram,"Tb":_glPixelStorei,"Sb":_glReadPixels,"Rb":_glShaderSource,"Qb":_glTexImage2D,"G":_glTexParameterf,"h":_glTexParameteri,"Ob":_glUniform1i,"Nb":_glUniform4f,"Mb":_glUniformMatrix4fv,"u":_glUseProgram,"j":_glVertexAttribPointer,"Lb":_glViewport,"Kb":_glfwCreateWindow,"Jb":_glfwDefaultWindowHints,"Hb":_glfwDestroyWindow,"Gb":_glfwGetCursorPos,"Fb":_glfwGetKey,"o":_glfwGetTime,"Eb":_glfwInit,"Db":_glfwMakeContextCurrent,"Cb":_glfwSetCharCallback,"Bb":_glfwSetCursorEnterCallback,"Ab":_glfwSetCursorPosCallback,"zb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"wb":_glfwSetKeyCallback,"vb":_glfwSetMouseButtonCallback,"ub":_glfwSetScrollCallback,"tb":_glfwSetWindowIconifyCallback,"sb":_glfwSetWindowShouldClose,"rb":_glfwSetWindowSizeCallback,"qb":_glfwSwapBuffers,"F":_glfwTerminate,"g":_glfwWindowHint,"ob":_llvm_exp2_f32,"E":_llvm_stackrestore,"D":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["we"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/text/text_font_sdf.wasm b/examples/web/text/text_font_sdf.wasm new file mode 100644 index 0000000..9494d09 Binary files /dev/null and b/examples/web/text/text_font_sdf.wasm differ diff --git a/examples/web/text/text_format_text.c b/examples/web/text/text_format_text.c index f205f75..8896161 100644 --- a/examples/web/text/text_format_text.c +++ b/examples/web/text/text_format_text.c @@ -18,8 +18,8 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; int score = 100020; int hiscore = 200450; @@ -31,7 +31,7 @@ int lives = 5; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -44,7 +44,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { diff --git a/examples/web/text/text_format_text.html b/examples/web/text/text_format_text.html new file mode 100644 index 0000000..0ea81e7 --- /dev/null +++ b/examples/web/text/text_format_text.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/text/text_format_text.js b/examples/web/text/text_format_text.js new file mode 100644 index 0000000..9c2c14d --- /dev/null +++ b/examples/web/text/text_format_text.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269616,DYNAMICTOP_PTR=26704;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="text_format_text.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/text/text_format_text.wasm b/examples/web/text/text_format_text.wasm new file mode 100644 index 0000000..295690b Binary files /dev/null and b/examples/web/text/text_format_text.wasm differ diff --git a/examples/web/text/text_input_box.c b/examples/web/text/text_input_box.c index b0240a3..23f005d 100644 --- a/examples/web/text/text_input_box.c +++ b/examples/web/text/text_input_box.c @@ -20,13 +20,13 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; char name[MAX_INPUT_CHARS + 1] = "\0"; // NOTE: One extra space required for line ending char '\0' int letterCount = 0; -Rectangle textBox; +Rectangle textBox = { 0 }; bool mouseOnText = false; int framesCounter = 0; @@ -37,7 +37,7 @@ int framesCounter = 0; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -52,7 +52,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -77,27 +77,27 @@ void UpdateDrawFrame(void) //---------------------------------------------------------------------------------- if (CheckCollisionPointRec(GetMousePosition(), textBox)) mouseOnText = true; else mouseOnText = false; - + if (mouseOnText) { int key = GetKeyPressed(); - + // NOTE: Only allow keys in range [32..125] if ((key >= 32) && (key <= 125) && (letterCount < MAX_INPUT_CHARS)) { name[letterCount] = (char)key; letterCount++; } - + if (key == KEY_BACKSPACE) { letterCount--; name[letterCount] = '\0'; - + if (letterCount < 0) letterCount = 0; } } - + if (mouseOnText) framesCounter++; else framesCounter = 0; //---------------------------------------------------------------------------------- @@ -107,15 +107,15 @@ void UpdateDrawFrame(void) BeginDrawing(); ClearBackground(RAYWHITE); - + DrawText("PLACE MOUSE OVER INPUT BOX!", 240, 140, 20, GRAY); DrawRectangleRec(textBox, LIGHTGRAY); if (mouseOnText) DrawRectangleLines(textBox.x, textBox.y, textBox.width, textBox.height, RED); else DrawRectangleLines(textBox.x, textBox.y, textBox.width, textBox.height, DARKGRAY); - + DrawText(name, textBox.x + 5, textBox.y + 8, 40, MAROON); - + DrawText(FormatText("INPUT CHARS: %i/%i", letterCount, MAX_INPUT_CHARS), 315, 250, 20, DARKGRAY); if (mouseOnText) @@ -127,7 +127,7 @@ void UpdateDrawFrame(void) } else DrawText("Press BACKSPACE to delete chars...", 230, 300, 20, GRAY); } - + EndDrawing(); //---------------------------------------------------------------------------------- } diff --git a/examples/web/text/text_input_box.html b/examples/web/text/text_input_box.html new file mode 100644 index 0000000..f7c6640 --- /dev/null +++ b/examples/web/text/text_input_box.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/text/text_input_box.js b/examples/web/text/text_input_box.js new file mode 100644 index 0000000..8a2e794 --- /dev/null +++ b/examples/web/text/text_input_box.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269680,DYNAMICTOP_PTR=26768;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="text_input_box.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/text/text_input_box.wasm b/examples/web/text/text_input_box.wasm new file mode 100644 index 0000000..201f47d Binary files /dev/null and b/examples/web/text/text_input_box.wasm differ diff --git a/examples/web/text/text_raylib_fonts.c b/examples/web/text/text_raylib_fonts.c index d888723..bf9a387 100644 --- a/examples/web/text/text_raylib_fonts.c +++ b/examples/web/text/text_raylib_fonts.c @@ -20,15 +20,25 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; -SpriteFont fonts[MAX_FONTS]; +Font fonts[MAX_FONTS] = { 0 }; const int spacings[MAX_FONTS] = { 2, 4, 8, 4, 3, 4, 4, 1 }; -Vector2 positions[MAX_FONTS]; +Vector2 positions[MAX_FONTS] = { 0 }; -Color *colors; -const char (*messages)[64]; +Color colors[MAX_FONTS] = { MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, LIME, GOLD, RED }; + +const char *messages[MAX_FONTS] = { + "ALAGARD FONT designed by Hewett Tsoi", + "PIXELPLAY FONT designed by Aleksander Shevchuk", + "MECHA FONT designed by Captain Falcon", + "SETBACK FONT designed by Brian Kent (AEnigma)", + "ROMULUS FONT designed by Hewett Tsoi", + "PIXANTIQUA FONT designed by Gerhard Grossmann", + "ALPHA_BETA FONT designed by Brian Kent (AEnigma)", + "JUPITER_CRASH FONT designed by Brian Kent (AEnigma)" +}; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -36,7 +46,7 @@ const char (*messages)[64]; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -44,47 +54,32 @@ int main(void) //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [text] example - raylib fonts"); - Color tempColors[MAX_FONTS] = { MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, LIME, GOLD, RED }; - - colors = tempColors; - - const char tempMessages[MAX_FONTS][64] = { "ALAGARD FONT designed by Hewett Tsoi", - "PIXELPLAY FONT designed by Aleksander Shevchuk", - "MECHA FONT designed by Captain Falcon", - "SETBACK FONT designed by Brian Kent (AEnigma)", - "ROMULUS FONT designed by Hewett Tsoi", - "PIXANTIQUA FONT designed by Gerhard Grossmann", - "ALPHA_BETA FONT designed by Brian Kent (AEnigma)", - "JUPITER_CRASH FONT designed by Brian Kent (AEnigma)" }; - - messages = tempMessages; - - fonts[0] = LoadSpriteFont("resources/fonts/alagard.png"); - fonts[1] = LoadSpriteFont("resources/fonts/pixelplay.png"); - fonts[2] = LoadSpriteFont("resources/fonts/mecha.png"); - fonts[3] = LoadSpriteFont("resources/fonts/setback.png"); - fonts[4] = LoadSpriteFont("resources/fonts/romulus.png"); - fonts[5] = LoadSpriteFont("resources/fonts/pixantiqua.png"); - fonts[6] = LoadSpriteFont("resources/fonts/alpha_beta.png"); - fonts[7] = LoadSpriteFont("resources/fonts/jupiter_crash.png"); + fonts[0] = LoadFont("resources/fonts/alagard.png"); + fonts[1] = LoadFont("resources/fonts/pixelplay.png"); + fonts[2] = LoadFont("resources/fonts/mecha.png"); + fonts[3] = LoadFont("resources/fonts/setback.png"); + fonts[4] = LoadFont("resources/fonts/romulus.png"); + fonts[5] = LoadFont("resources/fonts/pixantiqua.png"); + fonts[6] = LoadFont("resources/fonts/alpha_beta.png"); + fonts[7] = LoadFont("resources/fonts/jupiter_crash.png"); for (int i = 0; i < MAX_FONTS; i++) { positions[i].x = screenWidth/2 - MeasureTextEx(fonts[i], messages[i], fonts[i].baseSize*2, spacings[i]).x/2; positions[i].y = 60 + fonts[i].baseSize + 45*i; } - + // Small Y position corrections positions[3].y += 8; positions[4].y += 2; positions[7].y -= 8; - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -94,9 +89,9 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - + // SpriteFont unloading - for (int i = 0; i < MAX_FONTS; i++) UnloadSpriteFont(fonts[i]); + for (int i = 0; i < MAX_FONTS; i++) UnloadFont(fonts[i]); CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -122,8 +117,8 @@ void UpdateDrawFrame(void) DrawText("free fonts included with raylib", 250, 20, 20, DARKGRAY); DrawLine(220, 50, 590, 50, DARKGRAY); - - for (int i = 0; i < 8; i++) + + for (int i = 0; i < MAX_FONTS; i++) { DrawTextEx(fonts[i], messages[i], positions[i], fonts[i].baseSize*2, spacings[i], colors[i]); } diff --git a/examples/web/text/text_raylib_fonts.data b/examples/web/text/text_raylib_fonts.data new file mode 100644 index 0000000..e398e48 Binary files /dev/null and b/examples/web/text/text_raylib_fonts.data differ diff --git a/examples/web/text/text_raylib_fonts.html b/examples/web/text/text_raylib_fonts.html new file mode 100644 index 0000000..8a76d9f --- /dev/null +++ b/examples/web/text/text_raylib_fonts.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/text/text_raylib_fonts.js b/examples/web/text/text_raylib_fonts.js new file mode 100644 index 0000000..981fd50 --- /dev/null +++ b/examples/web/text/text_raylib_fonts.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="text/text_raylib_fonts.data";var REMOTE_PACKAGE_BASE="text_raylib_fonts.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);Module["FS_createPath"]("/resources","fonts",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5276352,DYNAMICTOP_PTR=33440;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="text_raylib_fonts.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":324,"maximum":324,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"mc":___lock,"z":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"y":___syscall146,"l":___syscall221,"ka":___syscall5,"x":___syscall54,"R":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"sd":_emscripten_get_gamepad_status,"hd":_emscripten_get_heap_size,"Yc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Dc":_emscripten_glActiveTexture,"tc":_emscripten_glAttachShader,"lc":_emscripten_glBeginQueryEXT,"ec":_emscripten_glBindAttribLocation,"$b":_emscripten_glBindBuffer,"Vb":_emscripten_glBindFramebuffer,"Ob":_emscripten_glBindRenderbuffer,"Gb":_emscripten_glBindTexture,"wb":_emscripten_glBindVertexArrayOES,"ob":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ee":_emscripten_glGetShaderInfoLog,"de":_emscripten_glGetShaderPrecisionFormat,"ce":_emscripten_glGetShaderSource,"be":_emscripten_glGetShaderiv,"ae":_emscripten_glGetString,"$d":_emscripten_glGetTexParameterfv,"_d":_emscripten_glGetTexParameteriv,"Zd":_emscripten_glGetUniformLocation,"Yd":_emscripten_glGetUniformfv,"Xd":_emscripten_glGetUniformiv,"Wd":_emscripten_glGetVertexAttribPointerv,"Vd":_emscripten_glGetVertexAttribfv,"Ud":_emscripten_glGetVertexAttribiv,"Td":_emscripten_glHint,"Sd":_emscripten_glIsBuffer,"Rd":_emscripten_glIsEnabled,"Qd":_emscripten_glIsFramebuffer,"Pd":_emscripten_glIsProgram,"Od":_emscripten_glIsQueryEXT,"Nd":_emscripten_glIsRenderbuffer,"Md":_emscripten_glIsShader,"Ld":_emscripten_glIsTexture,"Kd":_emscripten_glIsVertexArrayOES,"Jd":_emscripten_glLineWidth,"Id":_emscripten_glLinkProgram,"Hd":_emscripten_glPixelStorei,"Gd":_emscripten_glPolygonOffset,"Fd":_emscripten_glQueryCounterEXT,"Ed":_emscripten_glReadPixels,"Dd":_emscripten_glReleaseShaderCompiler,"Cd":_emscripten_glRenderbufferStorage,"Bd":_emscripten_glSampleCoverage,"Ad":_emscripten_glScissor,"zd":_emscripten_glShaderBinary,"yd":_emscripten_glShaderSource,"xd":_emscripten_glStencilFunc,"wd":_emscripten_glStencilFuncSeparate,"vd":_emscripten_glStencilMask,"ud":_emscripten_glStencilMaskSeparate,"td":_emscripten_glStencilOp,"rd":_emscripten_glStencilOpSeparate,"qd":_emscripten_glTexImage2D,"pd":_emscripten_glTexParameterf,"od":_emscripten_glTexParameterfv,"nd":_emscripten_glTexParameteri,"md":_emscripten_glTexParameteriv,"ld":_emscripten_glTexSubImage2D,"kd":_emscripten_glUniform1f,"jd":_emscripten_glUniform1fv,"id":_emscripten_glUniform1i,"gd":_emscripten_glUniform1iv,"fd":_emscripten_glUniform2f,"ed":_emscripten_glUniform2fv,"dd":_emscripten_glUniform2i,"cd":_emscripten_glUniform2iv,"bd":_emscripten_glUniform3f,"ad":_emscripten_glUniform3fv,"$c":_emscripten_glUniform3i,"_c":_emscripten_glUniform3iv,"Zc":_emscripten_glUniform4f,"Xc":_emscripten_glUniform4fv,"Wc":_emscripten_glUniform4i,"Vc":_emscripten_glUniform4iv,"Uc":_emscripten_glUniformMatrix2fv,"Tc":_emscripten_glUniformMatrix3fv,"Sc":_emscripten_glUniformMatrix4fv,"Rc":_emscripten_glUseProgram,"Qc":_emscripten_glValidateProgram,"Pc":_emscripten_glVertexAttrib1f,"Oc":_emscripten_glVertexAttrib1fv,"Nc":_emscripten_glVertexAttrib2f,"Mc":_emscripten_glVertexAttrib2fv,"Lc":_emscripten_glVertexAttrib3f,"Kc":_emscripten_glVertexAttrib3fv,"Jc":_emscripten_glVertexAttrib4f,"Ic":_emscripten_glVertexAttrib4fv,"Hc":_emscripten_glVertexAttribDivisorANGLE,"Gc":_emscripten_glVertexAttribPointer,"Fc":_emscripten_glViewport,"Ec":_emscripten_memcpy_big,"Cc":_emscripten_request_pointerlock,"Bc":_emscripten_resize_heap,"O":_emscripten_run_script,"Ac":_emscripten_sample_gamepad_data,"zc":_emscripten_set_click_callback_on_thread,"yc":_emscripten_set_fullscreenchange_callback_on_thread,"xc":_emscripten_set_gamepadconnected_callback_on_thread,"wc":_emscripten_set_gamepaddisconnected_callback_on_thread,"vc":_emscripten_set_keypress_callback_on_thread,"uc":_emscripten_set_main_loop,"sc":_emscripten_set_touchcancel_callback_on_thread,"rc":_emscripten_set_touchend_callback_on_thread,"qc":_emscripten_set_touchmove_callback_on_thread,"pc":_emscripten_set_touchstart_callback_on_thread,"oc":_exit,"nc":_glActiveTexture,"N":_glAttachShader,"j":_glBindAttribLocation,"d":_glBindBuffer,"g":_glBindTexture,"kc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"M":_glClear,"L":_glClearColor,"jc":_glClearDepthf,"ic":_glCompileShader,"hc":_glCompressedTexImage2D,"gc":_glCreateProgram,"fc":_glCreateShader,"dc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"cc":_glDepthFunc,"H":_glDetachShader,"bc":_glDisable,"o":_glDisableVertexAttribArray,"ac":_glDrawArrays,"_b":_glDrawElements,"G":_glEnable,"i":_glEnableVertexAttribArray,"Zb":_glFrontFace,"n":_glGenBuffers,"Yb":_glGenTextures,"t":_glGetAttribLocation,"Xb":_glGetFloatv,"Wb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Ub":_glGetShaderInfoLog,"E":_glGetShaderiv,"k":_glGetString,"s":_glGetUniformLocation,"Tb":_glLinkProgram,"Sb":_glPixelStorei,"Rb":_glReadPixels,"Qb":_glShaderSource,"Pb":_glTexImage2D,"D":_glTexParameterf,"f":_glTexParameteri,"Nb":_glUniform1i,"Mb":_glUniform4f,"Lb":_glUniformMatrix4fv,"r":_glUseProgram,"h":_glVertexAttribPointer,"Kb":_glViewport,"Jb":_glfwCreateWindow,"Ib":_glfwDefaultWindowHints,"Hb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"m":_glfwGetTime,"Eb":_glfwInit,"Db":_glfwMakeContextCurrent,"Cb":_glfwSetCharCallback,"Bb":_glfwSetCursorEnterCallback,"Ab":_glfwSetCursorPosCallback,"zb":_glfwSetDropCallback,"yb":_glfwSetErrorCallback,"xb":_glfwSetKeyCallback,"vb":_glfwSetMouseButtonCallback,"ub":_glfwSetScrollCallback,"tb":_glfwSetWindowIconifyCallback,"sb":_glfwSetWindowShouldClose,"rb":_glfwSetWindowSizeCallback,"qb":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"pb":_llvm_exp2_f32,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["le"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/text/text_raylib_fonts.wasm b/examples/web/text/text_raylib_fonts.wasm new file mode 100644 index 0000000..211d9ed Binary files /dev/null and b/examples/web/text/text_raylib_fonts.wasm differ diff --git a/examples/web/text/text_rectangle_bounds.c b/examples/web/text/text_rectangle_bounds.c index 90a3c7e..ffe7f2c 100644 --- a/examples/web/text/text_rectangle_bounds.c +++ b/examples/web/text/text_rectangle_bounds.c @@ -20,8 +20,8 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) @@ -32,12 +32,12 @@ tempor incididunt ut labore et dolore magna aliqua. Nec ullamcorper sit amet ris bool resizing = false; bool wordWrap = true; -Rectangle container; -Rectangle resizer; +Rectangle container = { 0 }; +Rectangle resizer = { 0 }; // Minimum width and heigh for the container rectangle int minWidth = 60; -int minHeight = 60; +int minHeight = 60; int maxWidth = 0; int maxHeight = 0; @@ -51,9 +51,9 @@ Font font = { 0 }; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -61,18 +61,18 @@ int main() container = (Rectangle){ 25, 25, screenWidth - 50, screenHeight - 250}; resizer = (Rectangle){ container.x + container.width - 17, container.y + container.height - 17, 14, 14 }; - + maxWidth = screenWidth - 50; maxHeight = screenHeight - 160; font = GetFontDefault(); // Get default system font - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -81,7 +81,7 @@ int main() #endif // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -96,34 +96,34 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- if (IsKeyPressed(KEY_SPACE)) wordWrap = !wordWrap; - + Vector2 mouse = GetMousePosition(); - + // Check if the mouse is inside the container and toggle border color if (CheckCollisionPointRec(mouse, container)) borderColor = Fade(MAROON, 0.4f); else if (!resizing) borderColor = MAROON; - + // Container resizing logic - if (resizing) + if (resizing) { if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) resizing = false; - + int width = container.width + (mouse.x - lastMouse.x); container.width = (width > minWidth)? ((width < maxWidth)? width : maxWidth) : minWidth; - + int height = container.height + (mouse.y - lastMouse.y); container.height = (height > minHeight)? ((height < maxHeight)? height : maxHeight) : minHeight; - } - else + } + else { // Check if we're resizing if (IsMouseButtonDown(MOUSE_LEFT_BUTTON) && CheckCollisionPointRec(mouse, resizer)) resizing = true; } - + // Move resizer rectangle properly resizer.x = container.x + container.width - 17; resizer.y = container.y + container.height - 17; - + lastMouse = mouse; // Update mouse //---------------------------------------------------------------------------------- @@ -134,10 +134,10 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); DrawRectangleLinesEx(container, 3, borderColor); // Draw container border - + // Draw text in container (add some padding) - DrawTextRec(font, text, - (Rectangle){ container.x + 4, container.y + 4, container.width - 4, container.height - 4 }, + DrawTextRec(font, text, + (Rectangle){ container.x + 4, container.y + 4, container.width - 4, container.height - 4 }, 20.0f, 2.0f, wordWrap, GRAY); DrawRectangleRec(resizer, borderColor); // Draw the resize box @@ -151,7 +151,7 @@ void UpdateDrawFrame(void) DrawRectangle(0, screenHeight - 54, screenWidth, 54, GRAY); DrawText("Click hold & drag the to resize the container", 155, screenHeight - 38, 20, RAYWHITE); DrawRectangleRec((Rectangle){ 382, screenHeight - 34, 12, 12 }, MAROON); - + EndDrawing(); //---------------------------------------------------------------------------------- } diff --git a/examples/web/text/text_rectangle_bounds.html b/examples/web/text/text_rectangle_bounds.html new file mode 100644 index 0000000..d4bead8 --- /dev/null +++ b/examples/web/text/text_rectangle_bounds.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/text/text_rectangle_bounds.js b/examples/web/text/text_rectangle_bounds.js new file mode 100644 index 0000000..6cbd47c --- /dev/null +++ b/examples/web/text/text_rectangle_bounds.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5271072,DYNAMICTOP_PTR=28160;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="text_rectangle_bounds.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"N":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"jc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"bc":_glDepthFunc,"G":_glDetachShader,"ac":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"E":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"Db":_glfwGetMouseButton,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"tb":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/text/text_rectangle_bounds.wasm b/examples/web/text/text_rectangle_bounds.wasm new file mode 100644 index 0000000..842f525 Binary files /dev/null and b/examples/web/text/text_rectangle_bounds.wasm differ diff --git a/examples/web/text/text_sprite_fonts.c b/examples/web/text/text_sprite_fonts.c index 7ea1ed9..46bda42 100644 --- a/examples/web/text/text_sprite_fonts.c +++ b/examples/web/text/text_sprite_fonts.c @@ -1,6 +1,6 @@ /******************************************************************************************* * -* raylib [core] example - SpriteFont loading and usage (adapted for HTML5 platform) +* raylib [text] example - Font loading and usage * * This example has been created using raylib 1.0 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) @@ -18,18 +18,20 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; const char msg1[50] = "THIS IS A custom SPRITE FONT..."; const char msg2[50] = "...and this is ANOTHER CUSTOM font..."; const char msg3[50] = "...and a THIRD one! GREAT! :D"; -SpriteFont font1; -SpriteFont font2; -SpriteFont font3; +Font font1 = { 0 }; +Font font2 = { 0 }; +Font font3 = { 0 }; -Vector2 fontPosition1, fontPosition2, fontPosition3; +Vector2 fontPosition1 = { 0 }; +Vector2 fontPosition2 = { 0 }; +Vector2 fontPosition3 = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -37,7 +39,7 @@ Vector2 fontPosition1, fontPosition2, fontPosition3; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -46,10 +48,10 @@ int main(void) InitWindow(screenWidth, screenHeight, "raylib [text] example - sprite fonts usage"); // NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) - font1 = LoadSpriteFont("resources/custom_mecha.png"); // SpriteFont loading - font2 = LoadSpriteFont("resources/custom_alagard.png"); // SpriteFont loading - font3 = LoadSpriteFont("resources/custom_jupiter_crash.png"); // SpriteFont loading - + font1 = LoadFont("resources/custom_mecha.png"); // SpriteFont loading + font2 = LoadFont("resources/custom_alagard.png"); // SpriteFont loading + font3 = LoadFont("resources/custom_jupiter_crash.png"); // SpriteFont loading + fontPosition1.x = screenWidth/2 - MeasureTextEx(font1, msg1, font1.baseSize, -3).x/2; fontPosition1.y = screenHeight/2 - font1.baseSize/2 - 80; @@ -58,13 +60,13 @@ int main(void) fontPosition3.x = screenWidth/2 - MeasureTextEx(font3, msg3, font3.baseSize, 2).x/2; fontPosition3.y = screenHeight/2 - font3.baseSize/2 + 50; - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -74,9 +76,10 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - UnloadSpriteFont(font1); // SpriteFont unloading - UnloadSpriteFont(font2); // SpriteFont unloading - UnloadSpriteFont(font3); // SpriteFont unloading + UnloadFont(font1); // SpriteFont unloading + UnloadFont(font2); // SpriteFont unloading + UnloadFont(font3); // SpriteFont unloading + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/web/text/text_sprite_fonts.data b/examples/web/text/text_sprite_fonts.data new file mode 100644 index 0000000..dc443ed Binary files /dev/null and b/examples/web/text/text_sprite_fonts.data differ diff --git a/examples/web/text/text_sprite_fonts.html b/examples/web/text/text_sprite_fonts.html new file mode 100644 index 0000000..593cfb4 --- /dev/null +++ b/examples/web/text/text_sprite_fonts.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/text/text_sprite_fonts.js b/examples/web/text/text_sprite_fonts.js new file mode 100644 index 0000000..a345c2f --- /dev/null +++ b/examples/web/text/text_sprite_fonts.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="text/text_sprite_fonts.data";var REMOTE_PACKAGE_BASE="text_sprite_fonts.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5275712,DYNAMICTOP_PTR=32800;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="text_sprite_fonts.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":324,"maximum":324,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"mc":___lock,"z":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"y":___syscall146,"l":___syscall221,"ka":___syscall5,"x":___syscall54,"R":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"sd":_emscripten_get_gamepad_status,"hd":_emscripten_get_heap_size,"Yc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Dc":_emscripten_glActiveTexture,"tc":_emscripten_glAttachShader,"lc":_emscripten_glBeginQueryEXT,"ec":_emscripten_glBindAttribLocation,"$b":_emscripten_glBindBuffer,"Vb":_emscripten_glBindFramebuffer,"Ob":_emscripten_glBindRenderbuffer,"Gb":_emscripten_glBindTexture,"wb":_emscripten_glBindVertexArrayOES,"ob":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ee":_emscripten_glGetShaderInfoLog,"de":_emscripten_glGetShaderPrecisionFormat,"ce":_emscripten_glGetShaderSource,"be":_emscripten_glGetShaderiv,"ae":_emscripten_glGetString,"$d":_emscripten_glGetTexParameterfv,"_d":_emscripten_glGetTexParameteriv,"Zd":_emscripten_glGetUniformLocation,"Yd":_emscripten_glGetUniformfv,"Xd":_emscripten_glGetUniformiv,"Wd":_emscripten_glGetVertexAttribPointerv,"Vd":_emscripten_glGetVertexAttribfv,"Ud":_emscripten_glGetVertexAttribiv,"Td":_emscripten_glHint,"Sd":_emscripten_glIsBuffer,"Rd":_emscripten_glIsEnabled,"Qd":_emscripten_glIsFramebuffer,"Pd":_emscripten_glIsProgram,"Od":_emscripten_glIsQueryEXT,"Nd":_emscripten_glIsRenderbuffer,"Md":_emscripten_glIsShader,"Ld":_emscripten_glIsTexture,"Kd":_emscripten_glIsVertexArrayOES,"Jd":_emscripten_glLineWidth,"Id":_emscripten_glLinkProgram,"Hd":_emscripten_glPixelStorei,"Gd":_emscripten_glPolygonOffset,"Fd":_emscripten_glQueryCounterEXT,"Ed":_emscripten_glReadPixels,"Dd":_emscripten_glReleaseShaderCompiler,"Cd":_emscripten_glRenderbufferStorage,"Bd":_emscripten_glSampleCoverage,"Ad":_emscripten_glScissor,"zd":_emscripten_glShaderBinary,"yd":_emscripten_glShaderSource,"xd":_emscripten_glStencilFunc,"wd":_emscripten_glStencilFuncSeparate,"vd":_emscripten_glStencilMask,"ud":_emscripten_glStencilMaskSeparate,"td":_emscripten_glStencilOp,"rd":_emscripten_glStencilOpSeparate,"qd":_emscripten_glTexImage2D,"pd":_emscripten_glTexParameterf,"od":_emscripten_glTexParameterfv,"nd":_emscripten_glTexParameteri,"md":_emscripten_glTexParameteriv,"ld":_emscripten_glTexSubImage2D,"kd":_emscripten_glUniform1f,"jd":_emscripten_glUniform1fv,"id":_emscripten_glUniform1i,"gd":_emscripten_glUniform1iv,"fd":_emscripten_glUniform2f,"ed":_emscripten_glUniform2fv,"dd":_emscripten_glUniform2i,"cd":_emscripten_glUniform2iv,"bd":_emscripten_glUniform3f,"ad":_emscripten_glUniform3fv,"$c":_emscripten_glUniform3i,"_c":_emscripten_glUniform3iv,"Zc":_emscripten_glUniform4f,"Xc":_emscripten_glUniform4fv,"Wc":_emscripten_glUniform4i,"Vc":_emscripten_glUniform4iv,"Uc":_emscripten_glUniformMatrix2fv,"Tc":_emscripten_glUniformMatrix3fv,"Sc":_emscripten_glUniformMatrix4fv,"Rc":_emscripten_glUseProgram,"Qc":_emscripten_glValidateProgram,"Pc":_emscripten_glVertexAttrib1f,"Oc":_emscripten_glVertexAttrib1fv,"Nc":_emscripten_glVertexAttrib2f,"Mc":_emscripten_glVertexAttrib2fv,"Lc":_emscripten_glVertexAttrib3f,"Kc":_emscripten_glVertexAttrib3fv,"Jc":_emscripten_glVertexAttrib4f,"Ic":_emscripten_glVertexAttrib4fv,"Hc":_emscripten_glVertexAttribDivisorANGLE,"Gc":_emscripten_glVertexAttribPointer,"Fc":_emscripten_glViewport,"Ec":_emscripten_memcpy_big,"Cc":_emscripten_request_pointerlock,"Bc":_emscripten_resize_heap,"O":_emscripten_run_script,"Ac":_emscripten_sample_gamepad_data,"zc":_emscripten_set_click_callback_on_thread,"yc":_emscripten_set_fullscreenchange_callback_on_thread,"xc":_emscripten_set_gamepadconnected_callback_on_thread,"wc":_emscripten_set_gamepaddisconnected_callback_on_thread,"vc":_emscripten_set_keypress_callback_on_thread,"uc":_emscripten_set_main_loop,"sc":_emscripten_set_touchcancel_callback_on_thread,"rc":_emscripten_set_touchend_callback_on_thread,"qc":_emscripten_set_touchmove_callback_on_thread,"pc":_emscripten_set_touchstart_callback_on_thread,"oc":_exit,"nc":_glActiveTexture,"N":_glAttachShader,"j":_glBindAttribLocation,"d":_glBindBuffer,"g":_glBindTexture,"kc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"M":_glClear,"L":_glClearColor,"jc":_glClearDepthf,"ic":_glCompileShader,"hc":_glCompressedTexImage2D,"gc":_glCreateProgram,"fc":_glCreateShader,"dc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"cc":_glDepthFunc,"H":_glDetachShader,"bc":_glDisable,"o":_glDisableVertexAttribArray,"ac":_glDrawArrays,"_b":_glDrawElements,"G":_glEnable,"i":_glEnableVertexAttribArray,"Zb":_glFrontFace,"n":_glGenBuffers,"Yb":_glGenTextures,"t":_glGetAttribLocation,"Xb":_glGetFloatv,"Wb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Ub":_glGetShaderInfoLog,"E":_glGetShaderiv,"k":_glGetString,"s":_glGetUniformLocation,"Tb":_glLinkProgram,"Sb":_glPixelStorei,"Rb":_glReadPixels,"Qb":_glShaderSource,"Pb":_glTexImage2D,"D":_glTexParameterf,"f":_glTexParameteri,"Nb":_glUniform1i,"Mb":_glUniform4f,"Lb":_glUniformMatrix4fv,"r":_glUseProgram,"h":_glVertexAttribPointer,"Kb":_glViewport,"Jb":_glfwCreateWindow,"Ib":_glfwDefaultWindowHints,"Hb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"m":_glfwGetTime,"Eb":_glfwInit,"Db":_glfwMakeContextCurrent,"Cb":_glfwSetCharCallback,"Bb":_glfwSetCursorEnterCallback,"Ab":_glfwSetCursorPosCallback,"zb":_glfwSetDropCallback,"yb":_glfwSetErrorCallback,"xb":_glfwSetKeyCallback,"vb":_glfwSetMouseButtonCallback,"ub":_glfwSetScrollCallback,"tb":_glfwSetWindowIconifyCallback,"sb":_glfwSetWindowShouldClose,"rb":_glfwSetWindowSizeCallback,"qb":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"pb":_llvm_exp2_f32,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["le"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["te"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/text/text_sprite_fonts.wasm b/examples/web/text/text_sprite_fonts.wasm new file mode 100644 index 0000000..eeced4a Binary files /dev/null and b/examples/web/text/text_sprite_fonts.wasm differ diff --git a/examples/web/text/text_ttf_loading.c b/examples/web/text/text_ttf_loading.c index bc40ab7..44e4415 100644 --- a/examples/web/text/text_ttf_loading.c +++ b/examples/web/text/text_ttf_loading.c @@ -23,25 +23,20 @@ const int screenHeight = 450; const char msg[50] = "TTF SpriteFont"; -SpriteFont font; -float fontSize; +Font font = { 0 }; +float fontSize = 0.0f; Vector2 fontPosition = { 40, screenHeight/2 + 50 }; -Vector2 textSize; +Vector2 textSize = { 0 }; int currentFontFilter = 0; // FILTER_POINT -#if !defined(PLATFORM_WEB) -int count = 0; -char **droppedFiles; -#endif - //---------------------------------------------------------------------------------- // Module Functions Declaration //---------------------------------------------------------------------------------- void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -50,10 +45,10 @@ int main(void) InitWindow(screenWidth, screenHeight, "raylib [text] example - ttf loading"); // NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) - + // TTF SpriteFont loading with custom generation parameters - font = LoadSpriteFontEx("resources/KAISG.ttf", 96, 0, 0); - + font = LoadFontEx("resources/KAISG.ttf", 96, 0, 0); + // Generate mipmap levels to use trilinear filtering // NOTE: On 2D drawing it won't be noticeable, it looks like FILTER_BILINEAR GenTextureMipmaps(&font.texture); @@ -61,13 +56,13 @@ int main(void) fontSize = font.baseSize; SetTextureFilter(font.texture, FILTER_POINT); - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -77,11 +72,9 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - UnloadSpriteFont(font); // SpriteFont unloading - -#if !defined(PLATFORM_WEB) + UnloadFont(font); // Font unloading + ClearDroppedFiles(); // Clear internal buffers -#endif CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -97,7 +90,7 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- fontSize += GetMouseWheelMove()*4.0f; - + // Choose font texture filter method if (IsKeyPressed(KEY_ONE)) { @@ -115,53 +108,52 @@ void UpdateDrawFrame(void) SetTextureFilter(font.texture, FILTER_TRILINEAR); currentFontFilter = 2; } - + textSize = MeasureTextEx(font, msg, fontSize, 0); - + if (IsKeyDown(KEY_LEFT)) fontPosition.x -= 10; else if (IsKeyDown(KEY_RIGHT)) fontPosition.x += 10; - -#if !defined(PLATFORM_WEB) + // Load a dropped TTF file dynamically (at current fontSize) if (IsFileDropped()) { - droppedFiles = GetDroppedFiles(&count); - + int count = 0; + char **droppedFiles = GetDroppedFiles(&count); + if (count == 1) // Only support one ttf file dropped { - UnloadSpriteFont(font); - font = LoadSpriteFontEx(droppedFiles[0], fontSize, 0, 0); + UnloadFont(font); + font = LoadFontEx(droppedFiles[0], fontSize, 0, 0); ClearDroppedFiles(); } } -#endif //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + DrawText("Use mouse wheel to change font size", 20, 20, 10, GRAY); DrawText("Use KEY_RIGHT and KEY_LEFT to move text", 20, 40, 10, GRAY); DrawText("Use 1, 2, 3 to change texture filter", 20, 60, 10, GRAY); DrawText("Drop a new TTF font for dynamic loading", 20, 80, 10, DARKGRAY); DrawTextEx(font, msg, fontPosition, fontSize, 0, BLACK); - + // TODO: It seems texSize measurement is not accurate due to chars offsets... //DrawRectangleLines(fontPosition.x, fontPosition.y, textSize.x, textSize.y, RED); - + DrawRectangle(0, screenHeight - 80, screenWidth, 80, LIGHTGRAY); DrawText(FormatText("Font size: %02.02f", fontSize), 20, screenHeight - 50, 10, DARKGRAY); DrawText(FormatText("Text size: [%02.02f, %02.02f]", textSize.x, textSize.y), 20, screenHeight - 30, 10, DARKGRAY); DrawText("CURRENT TEXTURE FILTER:", 250, 400, 20, GRAY); - + if (currentFontFilter == 0) DrawText("POINT", 570, 400, 20, BLACK); else if (currentFontFilter == 1) DrawText("BILINEAR", 570, 400, 20, BLACK); else if (currentFontFilter == 2) DrawText("TRILINEAR", 570, 400, 20, BLACK); - + EndDrawing(); //---------------------------------------------------------------------------------- } \ No newline at end of file diff --git a/examples/web/text/text_ttf_loading.data b/examples/web/text/text_ttf_loading.data new file mode 100644 index 0000000..04478b2 Binary files /dev/null and b/examples/web/text/text_ttf_loading.data differ diff --git a/examples/web/text/text_ttf_loading.html b/examples/web/text/text_ttf_loading.html new file mode 100644 index 0000000..1600f12 --- /dev/null +++ b/examples/web/text/text_ttf_loading.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/text/text_ttf_loading.js b/examples/web/text/text_ttf_loading.js new file mode 100644 index 0000000..1166c95 --- /dev/null +++ b/examples/web/text/text_ttf_loading.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="text/text_ttf_loading.data";var REMOTE_PACKAGE_BASE="text_ttf_loading.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5272608,DYNAMICTOP_PTR=29696;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="text_ttf_loading.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":324,"maximum":324,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"oc":___lock,"z":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"y":___syscall146,"l":___syscall221,"ka":___syscall5,"x":___syscall54,"R":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"ud":_emscripten_get_gamepad_status,"jd":_emscripten_get_heap_size,"_c":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Fc":_emscripten_glActiveTexture,"vc":_emscripten_glAttachShader,"nc":_emscripten_glBeginQueryEXT,"gc":_emscripten_glBindAttribLocation,"bc":_emscripten_glBindBuffer,"Wb":_emscripten_glBindFramebuffer,"Pb":_emscripten_glBindRenderbuffer,"Ib":_emscripten_glBindTexture,"yb":_emscripten_glBindVertexArrayOES,"pb":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ge":_emscripten_glGetShaderInfoLog,"fe":_emscripten_glGetShaderPrecisionFormat,"ee":_emscripten_glGetShaderSource,"de":_emscripten_glGetShaderiv,"ce":_emscripten_glGetString,"be":_emscripten_glGetTexParameterfv,"ae":_emscripten_glGetTexParameteriv,"$d":_emscripten_glGetUniformLocation,"_d":_emscripten_glGetUniformfv,"Zd":_emscripten_glGetUniformiv,"Yd":_emscripten_glGetVertexAttribPointerv,"Xd":_emscripten_glGetVertexAttribfv,"Wd":_emscripten_glGetVertexAttribiv,"Vd":_emscripten_glHint,"Ud":_emscripten_glIsBuffer,"Td":_emscripten_glIsEnabled,"Sd":_emscripten_glIsFramebuffer,"Rd":_emscripten_glIsProgram,"Qd":_emscripten_glIsQueryEXT,"Pd":_emscripten_glIsRenderbuffer,"Od":_emscripten_glIsShader,"Nd":_emscripten_glIsTexture,"Md":_emscripten_glIsVertexArrayOES,"Ld":_emscripten_glLineWidth,"Kd":_emscripten_glLinkProgram,"Jd":_emscripten_glPixelStorei,"Id":_emscripten_glPolygonOffset,"Hd":_emscripten_glQueryCounterEXT,"Gd":_emscripten_glReadPixels,"Fd":_emscripten_glReleaseShaderCompiler,"Ed":_emscripten_glRenderbufferStorage,"Dd":_emscripten_glSampleCoverage,"Cd":_emscripten_glScissor,"Bd":_emscripten_glShaderBinary,"Ad":_emscripten_glShaderSource,"zd":_emscripten_glStencilFunc,"yd":_emscripten_glStencilFuncSeparate,"xd":_emscripten_glStencilMask,"wd":_emscripten_glStencilMaskSeparate,"vd":_emscripten_glStencilOp,"td":_emscripten_glStencilOpSeparate,"sd":_emscripten_glTexImage2D,"rd":_emscripten_glTexParameterf,"qd":_emscripten_glTexParameterfv,"pd":_emscripten_glTexParameteri,"od":_emscripten_glTexParameteriv,"nd":_emscripten_glTexSubImage2D,"md":_emscripten_glUniform1f,"ld":_emscripten_glUniform1fv,"kd":_emscripten_glUniform1i,"id":_emscripten_glUniform1iv,"hd":_emscripten_glUniform2f,"gd":_emscripten_glUniform2fv,"fd":_emscripten_glUniform2i,"ed":_emscripten_glUniform2iv,"dd":_emscripten_glUniform3f,"cd":_emscripten_glUniform3fv,"bd":_emscripten_glUniform3i,"ad":_emscripten_glUniform3iv,"$c":_emscripten_glUniform4f,"Zc":_emscripten_glUniform4fv,"Yc":_emscripten_glUniform4i,"Xc":_emscripten_glUniform4iv,"Wc":_emscripten_glUniformMatrix2fv,"Vc":_emscripten_glUniformMatrix3fv,"Uc":_emscripten_glUniformMatrix4fv,"Tc":_emscripten_glUseProgram,"Sc":_emscripten_glValidateProgram,"Rc":_emscripten_glVertexAttrib1f,"Qc":_emscripten_glVertexAttrib1fv,"Pc":_emscripten_glVertexAttrib2f,"Oc":_emscripten_glVertexAttrib2fv,"Nc":_emscripten_glVertexAttrib3f,"Mc":_emscripten_glVertexAttrib3fv,"Lc":_emscripten_glVertexAttrib4f,"Kc":_emscripten_glVertexAttrib4fv,"Jc":_emscripten_glVertexAttribDivisorANGLE,"Ic":_emscripten_glVertexAttribPointer,"Hc":_emscripten_glViewport,"Gc":_emscripten_memcpy_big,"Ec":_emscripten_request_pointerlock,"Dc":_emscripten_resize_heap,"O":_emscripten_run_script,"Cc":_emscripten_sample_gamepad_data,"Bc":_emscripten_set_click_callback_on_thread,"Ac":_emscripten_set_fullscreenchange_callback_on_thread,"zc":_emscripten_set_gamepadconnected_callback_on_thread,"yc":_emscripten_set_gamepaddisconnected_callback_on_thread,"xc":_emscripten_set_keypress_callback_on_thread,"wc":_emscripten_set_main_loop,"uc":_emscripten_set_touchcancel_callback_on_thread,"tc":_emscripten_set_touchend_callback_on_thread,"sc":_emscripten_set_touchmove_callback_on_thread,"rc":_emscripten_set_touchstart_callback_on_thread,"qc":_exit,"pc":_glActiveTexture,"N":_glAttachShader,"j":_glBindAttribLocation,"d":_glBindBuffer,"f":_glBindTexture,"mc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"M":_glClear,"L":_glClearColor,"lc":_glClearDepthf,"kc":_glCompileShader,"jc":_glCompressedTexImage2D,"ic":_glCreateProgram,"hc":_glCreateShader,"fc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"ec":_glDepthFunc,"H":_glDetachShader,"dc":_glDisable,"o":_glDisableVertexAttribArray,"cc":_glDrawArrays,"ac":_glDrawElements,"G":_glEnable,"i":_glEnableVertexAttribArray,"$b":_glFrontFace,"n":_glGenBuffers,"_b":_glGenTextures,"Zb":_glGenerateMipmap,"t":_glGetAttribLocation,"Yb":_glGetFloatv,"Xb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Vb":_glGetShaderInfoLog,"E":_glGetShaderiv,"k":_glGetString,"s":_glGetUniformLocation,"Ub":_glLinkProgram,"Tb":_glPixelStorei,"Sb":_glReadPixels,"Rb":_glShaderSource,"Qb":_glTexImage2D,"D":_glTexParameterf,"e":_glTexParameteri,"Ob":_glUniform1i,"Nb":_glUniform4f,"Mb":_glUniformMatrix4fv,"r":_glUseProgram,"h":_glVertexAttribPointer,"Lb":_glViewport,"Kb":_glfwCreateWindow,"Jb":_glfwDefaultWindowHints,"Hb":_glfwDestroyWindow,"Gb":_glfwGetCursorPos,"Fb":_glfwGetKey,"m":_glfwGetTime,"Eb":_glfwInit,"Db":_glfwMakeContextCurrent,"Cb":_glfwSetCharCallback,"Bb":_glfwSetCursorEnterCallback,"Ab":_glfwSetCursorPosCallback,"zb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"wb":_glfwSetKeyCallback,"vb":_glfwSetMouseButtonCallback,"ub":_glfwSetScrollCallback,"tb":_glfwSetWindowIconifyCallback,"sb":_glfwSetWindowShouldClose,"rb":_glfwSetWindowSizeCallback,"qb":_glfwSwapBuffers,"C":_glfwTerminate,"g":_glfwWindowHint,"ob":_llvm_exp2_f32,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["we"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/text/text_ttf_loading.wasm b/examples/web/text/text_ttf_loading.wasm new file mode 100644 index 0000000..70db9fa Binary files /dev/null and b/examples/web/text/text_ttf_loading.wasm differ diff --git a/examples/web/text/text_unicode.c b/examples/web/text/text_unicode.c index 9fd0480..d4eafd1 100644 --- a/examples/web/text/text_unicode.c +++ b/examples/web/text/text_unicode.c @@ -16,6 +16,10 @@ #include #include +#if defined(PLATFORM_WEB) + #include +#endif + #define SIZEOF(A) (sizeof(A)/sizeof(A[0])) #define EMOJI_PER_WIDTH 8 #define EMOJI_PER_HEIGHT 4 @@ -137,7 +141,7 @@ const int screenHeight = 450; // Arrays that holds the random emojis struct { int index; // Index inside `emojiCodepoints` - int message; // Message index + int message; // Message index Color color; // Emoji color } emoji[EMOJI_PER_WIDTH*EMOJI_PER_HEIGHT] = { 0 }; @@ -159,9 +163,9 @@ void UpdateDrawFrame(void); // Update and Draw one frame static void RandomizeEmoji(void); // Fills the emoji array with random emojis //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main(int argc, char **argv) +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -169,38 +173,38 @@ int main(int argc, char **argv) InitWindow(screenWidth, screenHeight, "raylib [text] example - unicode"); // Load the font resources - // NOTE: fontAsian is for asian languages, - // fontEmoji is the emojis and fontDefault is used for everything else + // NOTE: fontAsian is for asian languages, + // fontEmoji is the emojis and fontDefault is used for everything else fontDefault = LoadFont("resources/dejavu.fnt"); fontAsian = LoadFont("resources/notoCJK.fnt"); fontEmoji = LoadFont("resources/emoji.fnt"); // Set a random set of emojis when starting up RandomizeEmoji(); - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { UpdateDrawFrame(); } #endif - + // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- UnloadFont(fontDefault); // Unload font resource UnloadFont(fontAsian); // Unload font resource UnloadFont(fontEmoji); // Unload font resource - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - return 0; + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; } //---------------------------------------------------------------------------------- @@ -220,89 +224,89 @@ void UpdateDrawFrame(void) selectedPos = hoveredPos; SetClipboardText(messages[emoji[selected].message].text); } - + Vector2 mouse = GetMousePosition(); Vector2 pos = { 28.8f, 10.0f }; hovered = -1; //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + // Draw random emojis in the background //------------------------------------------------------------------------------ for (int i = 0; i < SIZEOF(emoji); ++i) { const char *txt = &emojiCodepoints[emoji[i].index]; Rectangle emojiRect = { pos.x, pos.y, fontEmoji.baseSize, fontEmoji.baseSize }; - + if (!CheckCollisionPointRec(mouse, emojiRect)) { DrawTextEx(fontEmoji, txt, pos, fontEmoji.baseSize, 1.0, selected == i ? emoji[i].color : Fade(LIGHTGRAY, 0.4f)); } - else + else { DrawTextEx(fontEmoji, txt, pos, fontEmoji.baseSize, 1.0, emoji[i].color ); hovered = i; hoveredPos = pos; } - + if ((i != 0) && (i%EMOJI_PER_WIDTH == 0)) { pos.y += fontEmoji.baseSize + 24.25f; pos.x = 28.8f; } else pos.x += fontEmoji.baseSize + 28.8f; } //------------------------------------------------------------------------------ - + // Draw the message when a emoji is selected //------------------------------------------------------------------------------ - if (selected != -1) + if (selected != -1) { const int message = emoji[selected].message; const int horizontalPadding = 20, verticalPadding = 30; Font *font = &fontDefault; - + // Set correct font for asian languages - if (TextIsEqual(messages[message].language, "Chinese") || - TextIsEqual(messages[message].language, "Korean") || + if (TextIsEqual(messages[message].language, "Chinese") || + TextIsEqual(messages[message].language, "Korean") || TextIsEqual(messages[message].language, "Japanese")) font = &fontAsian; - + // Calculate size for the message box (approximate the height and width) Vector2 sz = MeasureTextEx(*font, messages[message].text, font->baseSize, 1.0f); - if (sz.x > 300) { sz.y *= sz.x/300; sz.x = 300; } + if (sz.x > 300) { sz.y *= sz.x/300; sz.x = 300; } else if (sz.x < 160) sz.x = 160; - + Rectangle msgRect = { selectedPos.x - 38.8f, selectedPos.y, 2 * horizontalPadding + sz.x, 2 * verticalPadding + sz.y }; msgRect.y -= msgRect.height; - + // Coordinates for the chat bubble triangle Vector2 a = { selectedPos.x, msgRect.y + msgRect.height }, b = {a.x + 8, a.y + 10}, c= { a.x + 10, a.y }; - + // Don't go outside the screen if (msgRect.x < 10) msgRect.x += 28; - if (msgRect.y < 10) + if (msgRect.y < 10) { msgRect.y = selectedPos.y + 84; a.y = msgRect.y; c.y = a.y; b.y = a.y - 10; - + // Swap values so we can actually render the triangle :( Vector2 tmp = a; a = b; b = tmp; } if (msgRect.x + msgRect.width > screenWidth) msgRect.x -= (msgRect.x + msgRect.width) - screenWidth + 10; - + // Draw chat bubble DrawRectangleRec(msgRect, emoji[selected].color); DrawTriangle(a, b, c, emoji[selected].color); - + // Draw the main text message Rectangle textRect = { msgRect.x + horizontalPadding/2, msgRect.y + verticalPadding/2, msgRect.width - horizontalPadding, msgRect.height }; DrawTextRec(*font, messages[message].text, textRect, font->baseSize, 1.0f, true, WHITE); - + // Draw the info text below the main message int size = strlen(messages[message].text); unsigned int len = TextCountCodepoints(messages[message].text); @@ -312,11 +316,11 @@ void UpdateDrawFrame(void) DrawText(info, pos.x, pos.y, 10, RAYWHITE); } //------------------------------------------------------------------------------ - + // Draw the info text DrawText("These emojis have something to tell you, click each to find out!", (screenWidth - 650)/2, screenHeight - 40, 20, GRAY); DrawText("Each emoji is a unicode character from a font, not a texture... Press [SPACEBAR] to refresh", (screenWidth - 484)/2, screenHeight - 16, 10, GRAY); - + EndDrawing(); //---------------------------------------------------------------------------------- } @@ -326,16 +330,16 @@ static void RandomizeEmoji(void) { hovered = selected = -1; int start = GetRandomValue(45, 360); - + for (int i = 0; i < SIZEOF(emoji); ++i) { // 0-179 emoji codepoints (from emoji char array) each 4bytes + null char emoji[i].index = GetRandomValue(0, 179)*5; - + // Generate a random color for this emoji Vector3 hsv = {(start*(i + 1))%360, 0.6f, 0.85f}; emoji[i].color = Fade(ColorFromHSV(hsv), 0.8f); - + // Set a random message for this emoji emoji[i].message = GetRandomValue(0, SIZEOF(messages) - 1); } diff --git a/examples/web/text/text_unicode.data b/examples/web/text/text_unicode.data new file mode 100644 index 0000000..2d380ad --- /dev/null +++ b/examples/web/text/text_unicode.data @@ -0,0 +1,3484 @@ +info face="DejaVu Sans" size=-16 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=2,2 outline=1 +common lineHeight=19 base=15 scaleW=512 scaleH=512 pages=1 packed=0 alphaChnl=0 redChnl=4 greenChnl=4 blueChnl=4 +page id=0 file="dejavu.png" +chars count=1111 +char id=32 x=259 y=464 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=33 x=464 y=382 width=4 height=14 xoffset=1 yoffset=2 xadvance=6 page=0 chnl=15 +char id=34 x=112 y=461 width=7 height=7 xoffset=0 yoffset=2 xadvance=7 page=0 chnl=15 +char id=35 x=33 y=407 width=14 height=13 xoffset=0 yoffset=3 xadvance=13 page=0 chnl=15 +char id=36 x=381 y=153 width=10 height=16 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=37 x=493 y=222 width=17 height=14 xoffset=-1 yoffset=2 xadvance=15 page=0 chnl=15 +char id=38 x=275 y=257 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=39 x=506 y=395 width=4 height=7 xoffset=0 yoffset=2 xadvance=4 page=0 chnl=15 +char id=40 x=18 y=178 width=6 height=16 xoffset=0 yoffset=2 xadvance=6 page=0 chnl=15 +char id=41 x=10 y=178 width=6 height=16 xoffset=0 yoffset=2 xadvance=6 page=0 chnl=15 +char id=42 x=192 y=444 width=10 height=11 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=15 +char id=43 x=369 y=415 width=13 height=11 xoffset=0 yoffset=5 xadvance=13 page=0 chnl=15 +char id=44 x=474 y=450 width=5 height=6 xoffset=0 yoffset=12 xadvance=5 page=0 chnl=15 +char id=45 x=191 y=468 width=7 height=4 xoffset=-1 yoffset=9 xadvance=6 page=0 chnl=15 +char id=46 x=207 y=465 width=5 height=4 xoffset=0 yoffset=12 xadvance=5 page=0 chnl=15 +char id=47 x=331 y=224 width=8 height=15 xoffset=-1 yoffset=2 xadvance=5 page=0 chnl=15 +char id=48 x=396 y=304 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=49 x=290 y=369 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=50 x=386 y=369 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=51 x=374 y=369 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=52 x=466 y=302 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=53 x=338 y=369 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=54 x=273 y=353 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=55 x=326 y=369 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=56 x=286 y=353 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=57 x=42 y=327 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=58 x=428 y=441 width=5 height=10 xoffset=0 yoffset=6 xadvance=5 page=0 chnl=15 +char id=59 x=472 y=398 width=5 height=12 xoffset=0 yoffset=6 xadvance=5 page=0 chnl=15 +char id=60 x=339 y=415 width=13 height=11 xoffset=0 yoffset=5 xadvance=13 page=0 chnl=15 +char id=61 x=42 y=461 width=13 height=7 xoffset=0 yoffset=7 xadvance=13 page=0 chnl=15 +char id=62 x=324 y=415 width=13 height=11 xoffset=0 yoffset=5 xadvance=13 page=0 chnl=15 +char id=63 x=501 y=238 width=9 height=14 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=64 x=368 y=135 width=17 height=16 xoffset=-1 yoffset=3 xadvance=16 page=0 chnl=15 +char id=65 x=60 y=295 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=66 x=299 y=353 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=67 x=90 y=295 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=68 x=105 y=294 width=13 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=69 x=325 y=353 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=70 x=194 y=371 width=10 height=14 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=71 x=208 y=273 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=72 x=420 y=320 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=73 x=423 y=384 width=5 height=14 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=15 +char id=74 x=237 y=136 width=7 height=17 xoffset=-2 yoffset=2 xadvance=5 page=0 chnl=15 +char id=75 x=60 y=311 width=12 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=76 x=72 y=391 width=10 height=14 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=77 x=288 y=273 width=14 height=14 xoffset=0 yoffset=2 xadvance=14 page=0 chnl=15 +char id=78 x=74 y=311 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=79 x=320 y=273 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=80 x=351 y=353 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=81 x=467 y=135 width=14 height=16 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=82 x=102 y=311 width=12 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=83 x=116 y=310 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=84 x=130 y=310 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=85 x=144 y=307 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=86 x=496 y=270 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=87 x=164 y=242 width=18 height=14 xoffset=-1 yoffset=2 xadvance=16 page=0 chnl=15 +char id=88 x=150 y=291 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=89 x=158 y=307 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=90 x=210 y=289 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=91 x=34 y=178 width=6 height=16 xoffset=0 yoffset=2 xadvance=6 page=0 chnl=15 +char id=92 x=321 y=224 width=8 height=15 xoffset=-1 yoffset=2 xadvance=5 page=0 chnl=15 +char id=93 x=26 y=178 width=6 height=16 xoffset=0 yoffset=2 xadvance=6 page=0 chnl=15 +char id=94 x=27 y=461 width=13 height=7 xoffset=0 yoffset=2 xadvance=13 page=0 chnl=15 +char id=95 x=107 y=470 width=12 height=4 xoffset=-2 yoffset=16 xadvance=8 page=0 chnl=15 +char id=96 x=398 y=453 width=7 height=6 xoffset=0 yoffset=1 xadvance=8 page=0 chnl=15 +char id=97 x=312 y=428 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=98 x=455 y=350 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=99 x=36 y=448 width=10 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=100 x=468 y=350 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=101 x=286 y=428 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=102 x=311 y=385 width=8 height=14 xoffset=-1 yoffset=2 xadvance=6 page=0 chnl=15 +char id=103 x=65 y=375 width=11 height=14 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=104 x=410 y=369 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=105 x=476 y=382 width=4 height=14 xoffset=0 yoffset=2 xadvance=4 page=0 chnl=15 +char id=106 x=289 y=136 width=6 height=17 xoffset=-2 yoffset=2 xadvance=4 page=0 chnl=15 +char id=107 x=130 y=374 width=11 height=14 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=108 x=482 y=382 width=4 height=14 xoffset=0 yoffset=2 xadvance=4 page=0 chnl=15 +char id=109 x=93 y=422 width=16 height=11 xoffset=0 yoffset=5 xadvance=16 page=0 chnl=15 +char id=110 x=495 y=424 width=10 height=11 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=111 x=260 y=430 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=112 x=143 y=374 width=11 height=14 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=113 x=156 y=371 width=11 height=14 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=114 x=292 y=441 width=8 height=11 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=15 +char id=115 x=435 y=428 width=10 height=11 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=116 x=229 y=402 width=8 height=13 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=15 +char id=117 x=411 y=428 width=10 height=11 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=118 x=143 y=435 width=11 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=119 x=213 y=418 width=15 height=11 xoffset=-1 yoffset=5 xadvance=13 page=0 chnl=15 +char id=120 x=130 y=435 width=11 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=121 x=476 y=318 width=11 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=122 x=363 y=428 width=10 height=11 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=123 x=60 y=141 width=10 height=17 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=124 x=469 y=20 width=5 height=18 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=15 +char id=125 x=48 y=141 width=10 height=17 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=126 x=266 y=456 width=13 height=6 xoffset=0 yoffset=7 xadvance=13 page=0 chnl=15 +char id=160 x=284 y=463 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=161 x=506 y=153 width=4 height=14 xoffset=1 yoffset=5 xadvance=6 page=0 chnl=15 +char id=162 x=492 y=205 width=10 height=15 xoffset=0 yoffset=3 xadvance=10 page=0 chnl=15 +char id=163 x=0 y=343 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=164 x=440 y=414 width=12 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=165 x=0 y=327 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=166 x=42 y=178 width=5 height=16 xoffset=0 yoffset=3 xadvance=5 page=0 chnl=15 +char id=167 x=345 y=154 width=10 height=16 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=15 +char id=168 x=502 y=447 width=8 height=5 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=15 +char id=169 x=352 y=273 width=14 height=14 xoffset=1 yoffset=2 xadvance=16 page=0 chnl=15 +char id=170 x=237 y=443 width=9 height=11 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=15 +char id=171 x=337 y=441 width=10 height=10 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=15 +char id=172 x=462 y=440 width=13 height=8 xoffset=0 yoffset=7 xadvance=13 page=0 chnl=15 +char id=173 x=155 y=470 width=7 height=4 xoffset=-1 yoffset=9 xadvance=6 page=0 chnl=15 +char id=174 x=400 y=272 width=14 height=14 xoffset=1 yoffset=2 xadvance=16 page=0 chnl=15 +char id=175 x=145 y=470 width=8 height=4 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=15 +char id=176 x=0 y=461 width=8 height=8 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=15 +char id=177 x=337 y=401 width=13 height=12 xoffset=0 yoffset=4 xadvance=13 page=0 chnl=15 +char id=178 x=392 y=441 width=8 height=10 xoffset=-1 yoffset=2 xadvance=6 page=0 chnl=15 +char id=179 x=382 y=441 width=8 height=10 xoffset=-1 yoffset=2 xadvance=6 page=0 chnl=15 +char id=180 x=380 y=453 width=7 height=6 xoffset=1 yoffset=1 xadvance=8 page=0 chnl=15 +char id=181 x=169 y=371 width=11 height=14 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=182 x=393 y=153 width=10 height=16 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=183 x=14 y=471 width=5 height=5 xoffset=0 yoffset=7 xadvance=5 page=0 chnl=15 +char id=184 x=423 y=453 width=6 height=6 xoffset=1 yoffset=13 xadvance=8 page=0 chnl=15 +char id=185 x=411 y=441 width=7 height=10 xoffset=0 yoffset=2 xadvance=6 page=0 chnl=15 +char id=186 x=259 y=443 width=9 height=11 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=15 +char id=187 x=349 y=441 width=10 height=10 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=15 +char id=188 x=411 y=238 width=16 height=14 xoffset=0 yoffset=2 xadvance=16 page=0 chnl=15 +char id=189 x=447 y=238 width=16 height=14 xoffset=0 yoffset=2 xadvance=16 page=0 chnl=15 +char id=190 x=356 y=240 width=17 height=14 xoffset=-1 yoffset=2 xadvance=16 page=0 chnl=15 +char id=191 x=228 y=386 width=9 height=14 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=15 +char id=192 x=135 y=79 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=193 x=150 y=79 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=194 x=165 y=79 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=195 x=180 y=79 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=196 x=195 y=79 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=197 x=210 y=79 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=198 x=299 y=241 width=17 height=14 xoffset=-1 yoffset=2 xadvance=16 page=0 chnl=15 +char id=199 x=225 y=79 width=13 height=17 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=200 x=119 y=118 width=11 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=201 x=106 y=119 width=11 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=202 x=80 y=119 width=11 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=203 x=353 y=116 width=11 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=204 x=504 y=97 width=6 height=17 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=205 x=321 y=136 width=6 height=17 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=206 x=187 y=136 width=8 height=17 xoffset=-2 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=207 x=147 y=136 width=8 height=17 xoffset=-2 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=208 x=448 y=270 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=209 x=420 y=97 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=210 x=112 y=61 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=211 x=32 y=65 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=212 x=128 y=60 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=213 x=457 y=40 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=214 x=473 y=40 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=215 x=380 y=401 width=12 height=12 xoffset=1 yoffset=4 xadvance=13 page=0 chnl=15 +char id=216 x=451 y=135 width=14 height=16 xoffset=-1 yoffset=1 xadvance=13 page=0 chnl=15 +char id=217 x=329 y=79 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=218 x=476 y=97 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=219 x=308 y=98 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=220 x=70 y=100 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=221 x=56 y=103 width=12 height=17 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=222 x=26 y=375 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=223 x=0 y=375 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=224 x=52 y=213 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=225 x=39 y=213 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=226 x=26 y=213 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=227 x=494 y=350 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=228 x=481 y=350 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=229 x=293 y=155 width=11 height=16 xoffset=-1 yoffset=0 xadvance=10 page=0 chnl=15 +char id=230 x=0 y=422 width=17 height=11 xoffset=-1 yoffset=5 xadvance=16 page=0 chnl=15 +char id=231 x=192 y=387 width=10 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=232 x=478 y=188 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=233 x=452 y=188 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=234 x=426 y=188 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=235 x=429 y=352 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=236 x=380 y=223 width=7 height=15 xoffset=-2 yoffset=1 xadvance=4 page=0 chnl=15 +char id=237 x=371 y=223 width=7 height=15 xoffset=-1 yoffset=1 xadvance=4 page=0 chnl=15 +char id=238 x=351 y=223 width=8 height=15 xoffset=-2 yoffset=1 xadvance=4 page=0 chnl=15 +char id=239 x=321 y=385 width=8 height=14 xoffset=-2 yoffset=2 xadvance=4 page=0 chnl=15 +char id=240 x=403 y=353 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=241 x=422 y=368 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=242 x=286 y=207 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=243 x=260 y=207 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=244 x=234 y=207 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=245 x=364 y=353 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=246 x=338 y=353 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=247 x=310 y=441 width=13 height=10 xoffset=0 yoffset=6 xadvance=13 page=0 chnl=15 +char id=248 x=64 y=407 width=12 height=13 xoffset=-1 yoffset=4 xadvance=10 page=0 chnl=15 +char id=249 x=96 y=229 width=10 height=15 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=250 x=84 y=229 width=10 height=15 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=251 x=24 y=230 width=10 height=15 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=252 x=60 y=391 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=253 x=315 y=20 width=11 height=18 xoffset=-1 yoffset=1 xadvance=9 page=0 chnl=15 +char id=254 x=158 y=117 width=11 height=17 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=255 x=171 y=117 width=11 height=17 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=256 x=45 y=160 width=13 height=16 xoffset=-1 yoffset=0 xadvance=11 page=0 chnl=15 +char id=257 x=312 y=353 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=258 x=0 y=26 width=13 height=18 xoffset=-1 yoffset=-2 xadvance=11 page=0 chnl=15 +char id=259 x=195 y=207 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=260 x=80 y=62 width=14 height=17 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=261 x=322 y=321 width=12 height=14 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=262 x=255 y=79 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=263 x=312 y=207 width=10 height=15 xoffset=-1 yoffset=1 xadvance=9 page=0 chnl=15 +char id=264 x=270 y=79 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=265 x=384 y=206 width=10 height=15 xoffset=-1 yoffset=1 xadvance=9 page=0 chnl=15 +char id=266 x=285 y=79 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=267 x=24 y=391 width=10 height=14 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=268 x=300 y=79 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=269 x=456 y=205 width=10 height=15 xoffset=-1 yoffset=1 xadvance=9 page=0 chnl=15 +char id=270 x=288 y=60 width=13 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=271 x=432 y=270 width=14 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=272 x=368 y=273 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=273 x=266 y=321 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=274 x=254 y=155 width=11 height=16 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15 +char id=275 x=234 y=353 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=276 x=197 y=117 width=11 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=277 x=169 y=207 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=278 x=210 y=117 width=11 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=279 x=247 y=353 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=280 x=223 y=117 width=11 height=17 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=281 x=260 y=353 width=11 height=14 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=282 x=236 y=117 width=11 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=283 x=156 y=208 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=284 x=425 y=40 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=285 x=172 y=21 width=11 height=18 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=286 x=377 y=40 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=287 x=328 y=20 width=11 height=18 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=288 x=48 y=62 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=289 x=444 y=116 width=11 height=17 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=290 x=394 y=0 width=14 height=18 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=291 x=185 y=21 width=11 height=18 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=292 x=42 y=103 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=293 x=322 y=98 width=12 height=17 xoffset=-2 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=294 x=108 y=262 width=15 height=14 xoffset=0 yoffset=2 xadvance=15 page=0 chnl=15 +char id=295 x=298 y=305 width=12 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=296 x=157 y=136 width=8 height=17 xoffset=-2 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=297 x=281 y=385 width=8 height=14 xoffset=-2 yoffset=2 xadvance=4 page=0 chnl=15 +char id=298 x=486 y=153 width=8 height=16 xoffset=-2 yoffset=0 xadvance=5 page=0 chnl=15 +char id=299 x=271 y=385 width=8 height=14 xoffset=-2 yoffset=2 xadvance=4 page=0 chnl=15 +char id=300 x=107 y=138 width=8 height=17 xoffset=-2 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=301 x=311 y=224 width=8 height=15 xoffset=-2 yoffset=1 xadvance=4 page=0 chnl=15 +char id=302 x=305 y=136 width=6 height=17 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=15 +char id=303 x=313 y=136 width=6 height=17 xoffset=0 yoffset=2 xadvance=4 page=0 chnl=15 +char id=304 x=505 y=116 width=5 height=17 xoffset=0 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=305 x=506 y=382 width=4 height=11 xoffset=0 yoffset=5 xadvance=4 page=0 chnl=15 +char id=306 x=84 y=138 width=10 height=17 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=307 x=137 y=137 width=8 height=17 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=308 x=101 y=0 width=8 height=20 xoffset=-2 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=309 x=443 y=20 width=8 height=18 xoffset=-2 yoffset=1 xadvance=4 page=0 chnl=15 +char id=310 x=88 y=22 width=12 height=18 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=311 x=302 y=21 width=11 height=18 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=312 x=0 y=435 width=11 height=11 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=15 +char id=313 x=493 y=116 width=10 height=17 xoffset=0 yoffset=-1 xadvance=9 page=0 chnl=15 +char id=314 x=297 y=136 width=6 height=17 xoffset=0 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=315 x=401 y=20 width=10 height=18 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=316 x=461 y=20 width=6 height=18 xoffset=-1 yoffset=2 xadvance=4 page=0 chnl=15 +char id=317 x=48 y=391 width=10 height=14 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=318 x=406 y=385 width=7 height=14 xoffset=0 yoffset=2 xadvance=6 page=0 chnl=15 +char id=319 x=302 y=369 width=10 height=14 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=320 x=379 y=385 width=7 height=14 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=15 +char id=321 x=340 y=305 width=12 height=14 xoffset=-2 yoffset=2 xadvance=9 page=0 chnl=15 +char id=322 x=397 y=385 width=7 height=14 xoffset=-1 yoffset=2 xadvance=5 page=0 chnl=15 +char id=323 x=238 y=98 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=324 x=108 y=229 width=10 height=15 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=325 x=60 y=23 width=12 height=18 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=326 x=144 y=226 width=10 height=15 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=327 x=210 y=98 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=328 x=336 y=207 width=10 height=15 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=329 x=315 y=289 width=13 height=14 xoffset=0 yoffset=2 xadvance=13 page=0 chnl=15 +char id=330 x=168 y=98 width=12 height=17 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=331 x=216 y=387 width=10 height=14 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=332 x=483 y=135 width=14 height=16 xoffset=-1 yoffset=0 xadvance=13 page=0 chnl=15 +char id=333 x=13 y=343 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=334 x=64 y=62 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=335 x=374 y=189 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=336 x=176 y=60 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=337 x=400 y=188 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=338 x=63 y=247 width=19 height=14 xoffset=-1 yoffset=2 xadvance=17 page=0 chnl=15 +char id=339 x=486 y=398 width=18 height=11 xoffset=-1 yoffset=5 xadvance=16 page=0 chnl=15 +char id=340 x=14 y=103 width=12 height=17 xoffset=0 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=341 x=236 y=224 width=9 height=15 xoffset=0 yoffset=1 xadvance=7 page=0 chnl=15 +char id=342 x=116 y=21 width=12 height=18 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=343 x=192 y=224 width=9 height=15 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=15 +char id=344 x=455 y=78 width=12 height=17 xoffset=0 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=345 x=291 y=224 width=8 height=15 xoffset=0 yoffset=1 xadvance=7 page=0 chnl=15 +char id=346 x=182 y=98 width=12 height=17 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=347 x=360 y=206 width=10 height=15 xoffset=-1 yoffset=1 xadvance=8 page=0 chnl=15 +char id=348 x=462 y=97 width=12 height=17 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=349 x=396 y=205 width=10 height=15 xoffset=-1 yoffset=1 xadvance=8 page=0 chnl=15 +char id=350 x=497 y=78 width=12 height=17 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=351 x=180 y=387 width=10 height=14 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=352 x=84 y=100 width=12 height=17 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=353 x=444 y=205 width=10 height=15 xoffset=-1 yoffset=1 xadvance=8 page=0 chnl=15 +char id=354 x=98 y=100 width=12 height=17 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=355 x=0 y=178 width=8 height=16 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=15 +char id=356 x=126 y=99 width=12 height=17 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=357 x=361 y=223 width=8 height=15 xoffset=-1 yoffset=1 xadvance=6 page=0 chnl=15 +char id=358 x=294 y=321 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=359 x=239 y=402 width=8 height=13 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=15 +char id=360 x=196 y=98 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=361 x=84 y=391 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=362 x=173 y=155 width=12 height=16 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=15 +char id=363 x=230 y=370 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=364 x=280 y=98 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=365 x=132 y=226 width=10 height=15 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=366 x=294 y=98 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=367 x=453 y=153 width=10 height=16 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15 +char id=368 x=350 y=97 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=369 x=12 y=230 width=10 height=15 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=370 x=364 y=97 width=12 height=17 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=371 x=104 y=343 width=11 height=14 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=372 x=126 y=41 width=18 height=17 xoffset=-1 yoffset=-1 xadvance=16 page=0 chnl=15 +char id=373 x=343 y=172 width=15 height=15 xoffset=-1 yoffset=1 xadvance=13 page=0 chnl=15 +char id=374 x=434 y=97 width=12 height=17 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=375 x=289 y=21 width=11 height=18 xoffset=-1 yoffset=1 xadvance=9 page=0 chnl=15 +char id=376 x=14 y=122 width=12 height=17 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=377 x=105 y=80 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=378 x=348 y=206 width=10 height=15 xoffset=-1 yoffset=1 xadvance=8 page=0 chnl=15 +char id=379 x=90 y=81 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=380 x=156 y=387 width=10 height=14 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=15 +char id=381 x=60 y=81 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=382 x=156 y=225 width=10 height=15 xoffset=-1 yoffset=1 xadvance=8 page=0 chnl=15 +char id=383 x=331 y=385 width=8 height=14 xoffset=-1 yoffset=2 xadvance=6 page=0 chnl=15 +char id=384 x=434 y=320 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=385 x=243 y=257 width=14 height=14 xoffset=-2 yoffset=2 xadvance=12 page=0 chnl=15 +char id=386 x=78 y=375 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=387 x=416 y=352 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=388 x=364 y=321 width=12 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=389 x=480 y=302 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=390 x=225 y=289 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=391 x=310 y=41 width=15 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=392 x=270 y=305 width=12 height=14 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=393 x=259 y=257 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=394 x=483 y=238 width=16 height=14 xoffset=-2 yoffset=2 xadvance=13 page=0 chnl=15 +char id=395 x=130 y=358 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=396 x=377 y=337 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=397 x=52 y=359 width=11 height=14 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=398 x=325 y=337 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=399 x=419 y=254 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=400 x=12 y=391 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=401 x=336 y=98 width=12 height=17 xoffset=-2 yoffset=2 xadvance=9 page=0 chnl=15 +char id=402 x=96 y=138 width=9 height=17 xoffset=-2 yoffset=2 xadvance=6 page=0 chnl=15 +char id=403 x=239 y=41 width=16 height=17 xoffset=-1 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=404 x=363 y=59 width=13 height=17 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=405 x=36 y=263 width=16 height=14 xoffset=0 yoffset=2 xadvance=16 page=0 chnl=15 +char id=406 x=361 y=385 width=7 height=14 xoffset=0 yoffset=2 xadvance=6 page=0 chnl=15 +char id=407 x=388 y=385 width=7 height=14 xoffset=-1 yoffset=2 xadvance=5 page=0 chnl=15 +char id=408 x=165 y=291 width=13 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=409 x=442 y=336 width=11 height=14 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=410 x=370 y=385 width=7 height=14 xoffset=-1 yoffset=2 xadvance=4 page=0 chnl=15 +char id=411 x=468 y=334 width=11 height=14 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=412 x=429 y=238 width=16 height=14 xoffset=0 yoffset=2 xadvance=16 page=0 chnl=15 +char id=413 x=409 y=40 width=14 height=17 xoffset=-2 yoffset=2 xadvance=12 page=0 chnl=15 +char id=414 x=218 y=370 width=10 height=14 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=415 x=96 y=278 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=416 x=112 y=278 width=14 height=14 xoffset=-1 yoffset=2 xadvance=15 page=0 chnl=15 +char id=417 x=352 y=401 width=12 height=12 xoffset=-1 yoffset=4 xadvance=10 page=0 chnl=15 +char id=418 x=18 y=263 width=16 height=14 xoffset=-1 yoffset=2 xadvance=15 page=0 chnl=15 +char id=419 x=450 y=286 width=13 height=14 xoffset=-1 yoffset=5 xadvance=12 page=0 chnl=15 +char id=420 x=405 y=288 width=13 height=14 xoffset=-2 yoffset=2 xadvance=10 page=0 chnl=15 +char id=421 x=288 y=117 width=11 height=17 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=422 x=159 y=155 width=12 height=16 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=423 x=14 y=327 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=424 x=132 y=448 width=10 height=11 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=425 x=143 y=358 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=426 x=327 y=117 width=11 height=17 xoffset=-4 yoffset=2 xadvance=5 page=0 chnl=15 +char id=427 x=476 y=153 width=8 height=16 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=15 +char id=428 x=326 y=305 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=429 x=341 y=385 width=8 height=14 xoffset=-1 yoffset=2 xadvance=6 page=0 chnl=15 +char id=430 x=112 y=99 width=12 height=17 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=431 x=192 y=274 width=14 height=14 xoffset=0 yoffset=2 xadvance=14 page=0 chnl=15 +char id=432 x=366 y=401 width=12 height=12 xoffset=0 yoffset=4 xadvance=10 page=0 chnl=15 +char id=433 x=240 y=273 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=434 x=70 y=327 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=435 x=128 y=275 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=436 x=176 y=274 width=14 height=14 xoffset=-1 yoffset=5 xadvance=12 page=0 chnl=15 +char id=437 x=330 y=289 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=438 x=423 y=428 width=10 height=11 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=439 x=489 y=318 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=440 x=242 y=305 width=12 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=441 x=104 y=375 width=11 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=442 x=0 y=230 width=10 height=15 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=443 x=350 y=369 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=444 x=126 y=326 width=12 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=445 x=208 y=354 width=11 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=446 x=372 y=206 width=10 height=15 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=15 +char id=447 x=195 y=355 width=11 height=14 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=448 x=505 y=39 width=5 height=17 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=15 +char id=449 x=117 y=138 width=8 height=17 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=15 +char id=450 x=36 y=141 width=10 height=17 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=15 +char id=451 x=458 y=382 width=4 height=14 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=15 +char id=452 x=476 y=20 width=23 height=17 xoffset=0 yoffset=-1 xadvance=23 page=0 chnl=15 +char id=453 x=80 y=178 width=21 height=15 xoffset=0 yoffset=1 xadvance=21 page=0 chnl=15 +char id=454 x=103 y=175 width=19 height=15 xoffset=-1 yoffset=1 xadvance=18 page=0 chnl=15 +char id=455 x=441 y=40 width=14 height=17 xoffset=0 yoffset=2 xadvance=13 page=0 chnl=15 +char id=456 x=393 y=59 width=13 height=17 xoffset=0 yoffset=2 xadvance=13 page=0 chnl=15 +char id=457 x=264 y=136 width=7 height=17 xoffset=0 yoffset=2 xadvance=7 page=0 chnl=15 +char id=458 x=257 y=41 width=16 height=17 xoffset=0 yoffset=2 xadvance=15 page=0 chnl=15 +char id=459 x=160 y=60 width=14 height=17 xoffset=0 yoffset=2 xadvance=15 page=0 chnl=15 +char id=460 x=0 y=84 width=13 height=17 xoffset=0 yoffset=2 xadvance=13 page=0 chnl=15 +char id=461 x=408 y=59 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=462 x=221 y=207 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=463 x=217 y=136 width=8 height=17 xoffset=-2 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=464 x=301 y=224 width=8 height=15 xoffset=-2 yoffset=1 xadvance=4 page=0 chnl=15 +char id=465 x=272 y=60 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=466 x=247 y=207 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=467 x=483 y=78 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=468 x=432 y=205 width=10 height=15 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=469 x=158 y=21 width=12 height=18 xoffset=0 yoffset=-2 xadvance=12 page=0 chnl=15 +char id=470 x=369 y=153 width=10 height=16 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15 +char id=471 x=242 y=0 width=12 height=19 xoffset=0 yoffset=-3 xadvance=12 page=0 chnl=15 +char id=472 x=72 y=141 width=10 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=473 x=256 y=0 width=12 height=19 xoffset=0 yoffset=-3 xadvance=12 page=0 chnl=15 +char id=474 x=457 y=116 width=10 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=475 x=270 y=0 width=12 height=19 xoffset=0 yoffset=-3 xadvance=12 page=0 chnl=15 +char id=476 x=0 y=141 width=10 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=477 x=91 y=435 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=478 x=488 y=0 width=13 height=18 xoffset=-1 yoffset=-2 xadvance=11 page=0 chnl=15 +char id=479 x=332 y=154 width=11 height=16 xoffset=-1 yoffset=0 xadvance=10 page=0 chnl=15 +char id=480 x=458 y=0 width=13 height=18 xoffset=-1 yoffset=-2 xadvance=11 page=0 chnl=15 +char id=481 x=306 y=155 width=11 height=16 xoffset=-1 yoffset=0 xadvance=10 page=0 chnl=15 +char id=482 x=349 y=136 width=17 height=16 xoffset=-1 yoffset=0 xadvance=16 page=0 chnl=15 +char id=483 x=318 y=241 width=17 height=14 xoffset=-1 yoffset=2 xadvance=16 page=0 chnl=15 +char id=484 x=144 y=275 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=485 x=238 y=321 width=12 height=14 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=486 x=16 y=65 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=487 x=224 y=21 width=11 height=18 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=488 x=490 y=97 width=12 height=17 xoffset=0 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=489 x=423 y=59 width=13 height=17 xoffset=-2 yoffset=-1 xadvance=9 page=0 chnl=15 +char id=490 x=96 y=61 width=14 height=17 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=491 x=78 y=359 width=11 height=14 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=492 x=182 y=0 width=14 height=19 xoffset=-1 yoffset=0 xadvance=13 page=0 chnl=15 +char id=493 x=262 y=117 width=11 height=17 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=494 x=54 y=122 width=11 height=17 xoffset=0 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=495 x=211 y=21 width=11 height=18 xoffset=-1 yoffset=1 xadvance=9 page=0 chnl=15 +char id=496 x=433 y=20 width=8 height=18 xoffset=-2 yoffset=1 xadvance=4 page=0 chnl=15 +char id=497 x=398 y=222 width=23 height=14 xoffset=0 yoffset=2 xadvance=23 page=0 chnl=15 +char id=498 x=448 y=222 width=21 height=14 xoffset=0 yoffset=2 xadvance=21 page=0 chnl=15 +char id=499 x=0 y=247 width=19 height=14 xoffset=-1 yoffset=2 xadvance=18 page=0 chnl=15 +char id=500 x=208 y=60 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=501 x=263 y=21 width=11 height=18 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=502 x=124 y=243 width=18 height=14 xoffset=0 yoffset=2 xadvance=18 page=0 chnl=15 +char id=503 x=67 y=122 width=11 height=17 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=504 x=224 y=98 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=505 x=48 y=230 width=10 height=15 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=506 x=438 y=59 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=507 x=154 y=98 width=12 height=17 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=508 x=146 y=41 width=17 height=17 xoffset=-1 yoffset=-1 xadvance=16 page=0 chnl=15 +char id=509 x=181 y=173 width=17 height=15 xoffset=-1 yoffset=1 xadvance=16 page=0 chnl=15 +char id=510 x=410 y=0 width=14 height=18 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=511 x=145 y=156 width=12 height=16 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=512 x=453 y=59 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=513 x=273 y=207 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=514 x=60 y=160 width=13 height=16 xoffset=-1 yoffset=0 xadvance=11 page=0 chnl=15 +char id=515 x=338 y=337 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=516 x=132 y=118 width=11 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=517 x=143 y=209 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=518 x=267 y=155 width=11 height=16 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15 +char id=519 x=273 y=337 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=520 x=501 y=20 width=9 height=17 xoffset=-2 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=521 x=203 y=224 width=9 height=15 xoffset=-2 yoffset=1 xadvance=4 page=0 chnl=15 +char id=522 x=496 y=153 width=8 height=16 xoffset=-2 yoffset=0 xadvance=5 page=0 chnl=15 +char id=523 x=502 y=318 width=8 height=14 xoffset=-2 yoffset=2 xadvance=4 page=0 chnl=15 +char id=524 x=144 y=60 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=525 x=104 y=212 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=526 x=387 y=135 width=14 height=16 xoffset=-1 yoffset=0 xadvance=13 page=0 chnl=15 +char id=527 x=208 y=338 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=528 x=385 y=78 width=12 height=17 xoffset=0 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=529 x=214 y=224 width=9 height=15 xoffset=-1 yoffset=1 xadvance=7 page=0 chnl=15 +char id=530 x=201 y=155 width=12 height=16 xoffset=0 yoffset=0 xadvance=11 page=0 chnl=15 +char id=531 x=261 y=385 width=8 height=14 xoffset=0 yoffset=2 xadvance=7 page=0 chnl=15 +char id=532 x=427 y=78 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=533 x=36 y=230 width=10 height=15 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=534 x=75 y=160 width=12 height=16 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=15 +char id=535 x=446 y=368 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=536 x=144 y=21 width=12 height=18 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=537 x=60 y=230 width=10 height=15 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=538 x=102 y=22 width=12 height=18 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=539 x=177 y=136 width=8 height=17 xoffset=-1 yoffset=3 xadvance=6 page=0 chnl=15 +char id=540 x=341 y=20 width=10 height=18 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=541 x=120 y=226 width=10 height=15 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=542 x=378 y=97 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=543 x=392 y=97 width=12 height=17 xoffset=-2 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=544 x=406 y=97 width=12 height=17 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=545 x=327 y=40 width=15 height=17 xoffset=-1 yoffset=1 xadvance=13 page=0 chnl=15 +char id=546 x=375 y=289 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=547 x=422 y=401 width=11 height=12 xoffset=-1 yoffset=4 xadvance=10 page=0 chnl=15 +char id=548 x=240 y=79 width=13 height=17 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=549 x=458 y=366 width=10 height=14 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=550 x=483 y=59 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=551 x=221 y=354 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=552 x=41 y=122 width=11 height=17 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=553 x=182 y=355 width=11 height=14 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=554 x=362 y=0 width=14 height=18 xoffset=-1 yoffset=-2 xadvance=13 page=0 chnl=15 +char id=555 x=215 y=155 width=11 height=16 xoffset=-1 yoffset=0 xadvance=10 page=0 chnl=15 +char id=556 x=378 y=0 width=14 height=18 xoffset=-1 yoffset=-2 xadvance=13 page=0 chnl=15 +char id=557 x=78 y=212 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=558 x=489 y=39 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=559 x=169 y=355 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=560 x=426 y=0 width=14 height=18 xoffset=-1 yoffset=-2 xadvance=13 page=0 chnl=15 +char id=561 x=319 y=155 width=11 height=16 xoffset=-1 yoffset=0 xadvance=10 page=0 chnl=15 +char id=562 x=89 y=157 width=12 height=16 xoffset=-1 yoffset=0 xadvance=10 page=0 chnl=15 +char id=563 x=431 y=116 width=11 height=17 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=564 x=227 y=136 width=8 height=17 xoffset=0 yoffset=1 xadvance=8 page=0 chnl=15 +char id=565 x=17 y=407 width=14 height=13 xoffset=0 yoffset=5 xadvance=13 page=0 chnl=15 +char id=566 x=465 y=153 width=9 height=16 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=15 +char id=567 x=415 y=385 width=6 height=14 xoffset=-2 yoffset=5 xadvance=4 page=0 chnl=15 +char id=568 x=104 y=246 width=18 height=14 xoffset=-1 yoffset=2 xadvance=16 page=0 chnl=15 +char id=569 x=144 y=243 width=18 height=14 xoffset=-1 yoffset=5 xadvance=16 page=0 chnl=15 +char id=570 x=15 y=160 width=13 height=16 xoffset=-1 yoffset=1 xadvance=11 page=0 chnl=15 +char id=571 x=419 y=135 width=14 height=16 xoffset=-1 yoffset=1 xadvance=11 page=0 chnl=15 +char id=572 x=146 y=406 width=11 height=13 xoffset=-1 yoffset=4 xadvance=9 page=0 chnl=15 +char id=573 x=39 y=375 width=11 height=14 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=574 x=435 y=135 width=14 height=16 xoffset=-2 yoffset=1 xadvance=10 page=0 chnl=15 +char id=575 x=13 y=213 width=11 height=15 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=576 x=0 y=213 width=11 height=15 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=577 x=200 y=306 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=578 x=399 y=428 width=10 height=11 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=579 x=336 y=321 width=12 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=580 x=355 y=257 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=581 x=390 y=288 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=582 x=250 y=21 width=11 height=18 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15 +char id=583 x=387 y=188 width=11 height=15 xoffset=-1 yoffset=3 xadvance=10 page=0 chnl=15 +char id=584 x=207 y=136 width=8 height=17 xoffset=-2 yoffset=2 xadvance=5 page=0 chnl=15 +char id=585 x=197 y=136 width=8 height=17 xoffset=-2 yoffset=2 xadvance=4 page=0 chnl=15 +char id=586 x=203 y=41 width=16 height=17 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=587 x=270 y=289 width=13 height=14 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=588 x=255 y=289 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=589 x=215 y=444 width=9 height=11 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=15 +char id=590 x=480 y=286 width=13 height=14 xoffset=-2 yoffset=2 xadvance=10 page=0 chnl=15 +char id=591 x=234 y=190 width=12 height=15 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=880 x=108 y=391 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=881 x=226 y=444 width=9 height=11 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=15 +char id=882 x=291 y=257 width=14 height=14 xoffset=0 yoffset=2 xadvance=14 page=0 chnl=15 +char id=883 x=266 y=369 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=884 x=121 y=461 width=5 height=7 xoffset=0 yoffset=1 xadvance=4 page=0 chnl=15 +char id=885 x=439 y=452 width=5 height=6 xoffset=0 yoffset=13 xadvance=4 page=0 chnl=15 +char id=886 x=350 y=321 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=887 x=471 y=425 width=10 height=11 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=890 x=446 y=452 width=5 height=6 xoffset=2 yoffset=14 xadvance=8 page=0 chnl=15 +char id=891 x=351 y=428 width=10 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=892 x=12 y=448 width=10 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=893 x=48 y=448 width=10 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=894 x=479 y=398 width=5 height=12 xoffset=0 yoffset=6 xadvance=5 page=0 chnl=15 +char id=895 x=255 y=136 width=7 height=17 xoffset=-2 yoffset=2 xadvance=5 page=0 chnl=15 +char id=900 x=389 y=453 width=7 height=6 xoffset=1 yoffset=1 xadvance=8 page=0 chnl=15 +char id=901 x=435 y=441 width=8 height=9 xoffset=0 yoffset=-2 xadvance=8 page=0 chnl=15 +char id=902 x=90 y=195 width=13 height=15 xoffset=-1 yoffset=1 xadvance=11 page=0 chnl=15 +char id=903 x=0 y=471 width=5 height=5 xoffset=0 yoffset=7 xadvance=5 page=0 chnl=15 +char id=904 x=428 y=171 width=15 height=15 xoffset=-2 yoffset=1 xadvance=12 page=0 chnl=15 +char id=905 x=308 y=173 width=16 height=15 xoffset=-2 yoffset=1 xadvance=14 page=0 chnl=15 +char id=906 x=225 y=224 width=9 height=15 xoffset=-2 yoffset=1 xadvance=7 page=0 chnl=15 +char id=908 x=411 y=171 width=15 height=15 xoffset=-2 yoffset=1 xadvance=13 page=0 chnl=15 +char id=910 x=236 y=173 width=16 height=15 xoffset=-2 yoffset=1 xadvance=13 page=0 chnl=15 +char id=911 x=326 y=173 width=15 height=15 xoffset=-2 yoffset=1 xadvance=13 page=0 chnl=15 +char id=912 x=423 y=20 width=8 height=18 xoffset=-2 yoffset=-2 xadvance=5 page=0 chnl=15 +char id=913 x=30 y=295 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=914 x=91 y=343 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=915 x=434 y=368 width=10 height=14 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=916 x=30 y=311 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=917 x=117 y=359 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=918 x=15 y=311 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=919 x=378 y=321 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=920 x=480 y=270 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=921 x=437 y=384 width=5 height=14 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=15 +char id=922 x=112 y=327 width=12 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=923 x=465 y=286 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=924 x=307 y=257 width=14 height=14 xoffset=0 yoffset=2 xadvance=14 page=0 chnl=15 +char id=925 x=140 y=326 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=926 x=482 y=366 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=927 x=403 y=256 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=928 x=168 y=323 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=929 x=65 y=343 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=931 x=78 y=343 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=932 x=210 y=322 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=933 x=224 y=321 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=934 x=16 y=279 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=935 x=495 y=286 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=936 x=48 y=279 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=937 x=64 y=279 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=938 x=167 y=136 width=8 height=17 xoffset=-2 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=939 x=399 y=78 width=12 height=17 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=940 x=192 y=190 width=12 height=15 xoffset=-1 yoffset=1 xadvance=11 page=0 chnl=15 +char id=941 x=180 y=224 width=10 height=15 xoffset=-1 yoffset=1 xadvance=9 page=0 chnl=15 +char id=942 x=377 y=20 width=10 height=18 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=943 x=389 y=223 width=7 height=15 xoffset=0 yoffset=1 xadvance=5 page=0 chnl=15 +char id=944 x=365 y=20 width=10 height=18 xoffset=0 yoffset=-2 xadvance=9 page=0 chnl=15 +char id=945 x=426 y=415 width=12 height=11 xoffset=-1 yoffset=5 xadvance=11 page=0 chnl=15 +char id=946 x=237 y=21 width=11 height=18 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=947 x=130 y=342 width=11 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=948 x=143 y=342 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=949 x=60 y=448 width=10 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=950 x=24 y=141 width=10 height=17 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=951 x=362 y=369 width=10 height=14 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=952 x=364 y=337 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=953 x=302 y=441 width=6 height=11 xoffset=0 yoffset=5 xadvance=5 page=0 chnl=15 +char id=954 x=24 y=448 width=10 height=11 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=15 +char id=955 x=169 y=339 width=11 height=14 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=956 x=182 y=339 width=11 height=14 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=957 x=221 y=431 width=11 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=958 x=12 y=141 width=10 height=17 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=959 x=195 y=431 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=960 x=384 y=415 width=12 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=961 x=91 y=375 width=11 height=14 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=962 x=314 y=369 width=10 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=963 x=398 y=415 width=12 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=964 x=169 y=431 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=965 x=0 y=448 width=10 height=11 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=15 +char id=966 x=406 y=320 width=12 height=14 xoffset=-1 yoffset=5 xadvance=11 page=0 chnl=15 +char id=967 x=52 y=375 width=11 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=968 x=392 y=321 width=12 height=14 xoffset=-1 yoffset=5 xadvance=11 page=0 chnl=15 +char id=969 x=128 y=422 width=15 height=11 xoffset=-1 yoffset=5 xadvance=13 page=0 chnl=15 +char id=970 x=301 y=385 width=8 height=14 xoffset=-2 yoffset=2 xadvance=5 page=0 chnl=15 +char id=971 x=168 y=387 width=10 height=14 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=972 x=299 y=207 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=973 x=480 y=205 width=10 height=15 xoffset=0 yoffset=1 xadvance=9 page=0 chnl=15 +char id=974 x=394 y=171 width=15 height=15 xoffset=-1 yoffset=1 xadvance=13 page=0 chnl=15 +char id=975 x=130 y=21 width=12 height=18 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=976 x=278 y=369 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=977 x=390 y=353 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=978 x=195 y=290 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=979 x=143 y=174 width=17 height=15 xoffset=-2 yoffset=1 xadvance=13 page=0 chnl=15 +char id=980 x=75 y=81 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=981 x=357 y=78 width=12 height=17 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=982 x=145 y=421 width=15 height=11 xoffset=-1 yoffset=5 xadvance=13 page=0 chnl=15 +char id=983 x=346 y=189 width=12 height=15 xoffset=-1 yoffset=5 xadvance=11 page=0 chnl=15 +char id=984 x=192 y=60 width=14 height=17 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=985 x=26 y=343 width=11 height=14 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=986 x=301 y=117 width=11 height=17 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=987 x=104 y=359 width=11 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=988 x=494 y=366 width=10 height=14 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=989 x=340 y=117 width=11 height=17 xoffset=-3 yoffset=2 xadvance=7 page=0 chnl=15 +char id=990 x=39 y=359 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=991 x=26 y=359 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=992 x=328 y=0 width=15 height=18 xoffset=-1 yoffset=2 xadvance=14 page=0 chnl=15 +char id=993 x=494 y=302 width=12 height=14 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=994 x=221 y=41 width=16 height=17 xoffset=-1 yoffset=2 xadvance=15 page=0 chnl=15 +char id=995 x=159 y=259 width=15 height=14 xoffset=-1 yoffset=5 xadvance=13 page=0 chnl=15 +char id=996 x=45 y=84 width=13 height=17 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=997 x=410 y=304 width=12 height=14 xoffset=-1 yoffset=5 xadvance=11 page=0 chnl=15 +char id=998 x=30 y=84 width=13 height=17 xoffset=0 yoffset=2 xadvance=13 page=0 chnl=15 +char id=999 x=106 y=407 width=12 height=13 xoffset=-1 yoffset=4 xadvance=10 page=0 chnl=15 +char id=1000 x=15 y=26 width=13 height=18 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1001 x=439 y=188 width=11 height=15 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1002 x=387 y=256 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1003 x=454 y=414 width=12 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1004 x=30 y=160 width=13 height=16 xoffset=-1 yoffset=1 xadvance=11 page=0 chnl=15 +char id=1005 x=499 y=135 width=11 height=16 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1006 x=0 y=103 width=12 height=17 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1007 x=379 y=116 width=11 height=17 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=1008 x=394 y=401 width=12 height=12 xoffset=-1 yoffset=5 xadvance=11 page=0 chnl=15 +char id=1009 x=299 y=337 width=11 height=14 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1010 x=387 y=428 width=10 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1011 x=273 y=136 width=6 height=17 xoffset=-2 yoffset=2 xadvance=4 page=0 chnl=15 +char id=1012 x=416 y=272 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1013 x=448 y=400 width=10 height=12 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1014 x=460 y=398 width=10 height=12 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1015 x=286 y=337 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1016 x=405 y=116 width=11 height=17 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1017 x=15 y=295 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1018 x=451 y=254 width=14 height=14 xoffset=0 yoffset=2 xadvance=14 page=0 chnl=15 +char id=1019 x=252 y=321 width=12 height=14 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1020 x=332 y=190 width=12 height=15 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1021 x=345 y=289 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1022 x=0 y=295 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1023 x=135 y=291 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1024 x=418 y=116 width=11 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=1025 x=28 y=122 width=11 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=1026 x=0 y=65 width=14 height=17 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1027 x=481 y=116 width=10 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=1028 x=120 y=294 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1029 x=438 y=302 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1030 x=430 y=384 width=5 height=14 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=15 +char id=1031 x=127 y=137 width=8 height=17 xoffset=-2 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=1032 x=246 y=136 width=7 height=17 xoffset=-2 yoffset=2 xadvance=5 page=0 chnl=15 +char id=1033 x=42 y=247 width=19 height=14 xoffset=-1 yoffset=2 xadvance=18 page=0 chnl=15 +char id=1034 x=261 y=241 width=17 height=14 xoffset=0 yoffset=2 xadvance=17 page=0 chnl=15 +char id=1035 x=467 y=254 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1036 x=448 y=97 width=12 height=17 xoffset=0 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=1037 x=441 y=78 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=1038 x=413 y=78 width=12 height=17 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=1039 x=371 y=78 width=12 height=17 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1040 x=435 y=286 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1041 x=221 y=338 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1042 x=234 y=337 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1043 x=36 y=391 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1044 x=361 y=40 width=14 height=17 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1045 x=247 y=337 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1046 x=21 y=247 width=19 height=14 xoffset=-1 yoffset=2 xadvance=17 page=0 chnl=15 +char id=1047 x=260 y=337 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1048 x=214 y=305 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1049 x=315 y=79 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=1050 x=354 y=305 width=12 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1051 x=360 y=289 width=13 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1052 x=0 y=279 width=14 height=14 xoffset=0 yoffset=2 xadvance=14 page=0 chnl=15 +char id=1053 x=182 y=323 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1054 x=32 y=279 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1055 x=88 y=311 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1056 x=312 y=337 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1057 x=285 y=289 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1058 x=56 y=327 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1059 x=196 y=322 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1060 x=125 y=259 width=15 height=14 xoffset=-1 yoffset=2 xadvance=14 page=0 chnl=15 +char id=1061 x=75 y=295 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1062 x=468 y=59 width=13 height=17 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1063 x=351 y=337 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1064 x=204 y=241 width=17 height=14 xoffset=0 yoffset=2 xadvance=17 page=0 chnl=15 +char id=1065 x=86 y=42 width=18 height=17 xoffset=0 yoffset=2 xadvance=18 page=0 chnl=15 +char id=1066 x=142 y=259 width=15 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1067 x=80 y=279 width=14 height=14 xoffset=0 yoffset=2 xadvance=14 page=0 chnl=15 +char id=1068 x=390 y=337 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1069 x=420 y=288 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1070 x=184 y=241 width=18 height=14 xoffset=0 yoffset=2 xadvance=17 page=0 chnl=15 +char id=1071 x=403 y=337 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1072 x=13 y=435 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1073 x=117 y=209 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1074 x=375 y=428 width=10 height=11 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1075 x=204 y=444 width=9 height=11 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=15 +char id=1076 x=49 y=407 width=13 height=13 xoffset=-1 yoffset=5 xadvance=11 page=0 chnl=15 +char id=1077 x=52 y=435 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1078 x=57 y=422 width=16 height=11 xoffset=-1 yoffset=5 xadvance=14 page=0 chnl=15 +char id=1079 x=84 y=448 width=10 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1080 x=96 y=448 width=10 height=11 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1081 x=468 y=205 width=10 height=15 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1082 x=495 y=411 width=11 height=11 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1083 x=338 y=428 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1084 x=412 y=415 width=12 height=11 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=15 +char id=1085 x=459 y=427 width=10 height=11 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1086 x=325 y=428 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1087 x=144 y=448 width=10 height=11 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1088 x=494 y=334 width=11 height=14 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1089 x=180 y=444 width=10 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1090 x=299 y=428 width=11 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1091 x=0 y=359 width=11 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1092 x=344 y=40 width=15 height=17 xoffset=-1 yoffset=2 xadvance=14 page=0 chnl=15 +char id=1093 x=273 y=429 width=11 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1094 x=92 y=407 width=12 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=15 +char id=1095 x=270 y=443 width=9 height=11 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1096 x=111 y=422 width=15 height=11 xoffset=0 yoffset=5 xadvance=15 page=0 chnl=15 +char id=1097 x=488 y=382 width=16 height=13 xoffset=0 yoffset=5 xadvance=15 page=0 chnl=15 +char id=1098 x=309 y=415 width=13 height=11 xoffset=-1 yoffset=5 xadvance=11 page=0 chnl=15 +char id=1099 x=468 y=412 width=12 height=11 xoffset=0 yoffset=5 xadvance=13 page=0 chnl=15 +char id=1100 x=447 y=427 width=10 height=11 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1101 x=120 y=448 width=10 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1102 x=247 y=417 width=14 height=11 xoffset=0 yoffset=5 xadvance=13 page=0 chnl=15 +char id=1103 x=117 y=435 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1104 x=65 y=212 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1105 x=91 y=359 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1106 x=0 y=122 width=12 height=17 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1107 x=247 y=224 width=9 height=15 xoffset=0 yoffset=1 xadvance=8 page=0 chnl=15 +char id=1108 x=168 y=447 width=10 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1109 x=483 y=425 width=10 height=11 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=1110 x=506 y=366 width=4 height=14 xoffset=0 yoffset=2 xadvance=4 page=0 chnl=15 +char id=1111 x=291 y=385 width=8 height=14 xoffset=-2 yoffset=2 xadvance=4 page=0 chnl=15 +char id=1112 x=281 y=136 width=6 height=17 xoffset=-2 yoffset=2 xadvance=4 page=0 chnl=15 +char id=1113 x=75 y=422 width=16 height=11 xoffset=-1 yoffset=5 xadvance=14 page=0 chnl=15 +char id=1114 x=196 y=418 width=15 height=11 xoffset=0 yoffset=5 xadvance=14 page=0 chnl=15 +char id=1115 x=368 y=305 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1116 x=491 y=188 width=11 height=15 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1117 x=72 y=229 width=10 height=15 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1118 x=276 y=21 width=11 height=18 xoffset=-1 yoffset=1 xadvance=9 page=0 chnl=15 +char id=1119 x=184 y=403 width=10 height=13 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1120 x=375 y=240 width=16 height=14 xoffset=-1 yoffset=2 xadvance=15 page=0 chnl=15 +char id=1121 x=162 y=418 width=15 height=11 xoffset=-1 yoffset=5 xadvance=13 page=0 chnl=15 +char id=1122 x=160 y=275 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1123 x=228 y=305 width=12 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1124 x=290 y=173 width=16 height=15 xoffset=0 yoffset=2 xadvance=15 page=0 chnl=15 +char id=1125 x=408 y=401 width=12 height=12 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=15 +char id=1126 x=54 y=263 width=16 height=14 xoffset=-1 yoffset=2 xadvance=14 page=0 chnl=15 +char id=1127 x=179 y=418 width=15 height=11 xoffset=-1 yoffset=5 xadvance=13 page=0 chnl=15 +char id=1128 x=471 y=222 width=20 height=14 xoffset=0 yoffset=2 xadvance=19 page=0 chnl=15 +char id=1129 x=19 y=422 width=17 height=11 xoffset=0 yoffset=5 xadvance=16 page=0 chnl=15 +char id=1130 x=224 y=273 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1131 x=78 y=435 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1132 x=337 y=241 width=17 height=14 xoffset=0 yoffset=2 xadvance=16 page=0 chnl=15 +char id=1133 x=263 y=416 width=14 height=11 xoffset=0 yoffset=5 xadvance=13 page=0 chnl=15 +char id=1134 x=60 y=0 width=11 height=21 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=1135 x=353 y=20 width=10 height=18 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=1136 x=90 y=262 width=16 height=14 xoffset=-1 yoffset=2 xadvance=14 page=0 chnl=15 +char id=1137 x=129 y=0 width=16 height=19 xoffset=-1 yoffset=1 xadvance=14 page=0 chnl=15 +char id=1138 x=256 y=273 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1139 x=65 y=435 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1140 x=210 y=257 width=15 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1141 x=294 y=415 width=13 height=11 xoffset=-1 yoffset=5 xadvance=11 page=0 chnl=15 +char id=1142 x=293 y=41 width=15 height=17 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=1143 x=135 y=192 width=13 height=15 xoffset=-1 yoffset=1 xadvance=11 page=0 chnl=15 +char id=1144 x=308 y=0 width=18 height=18 xoffset=-1 yoffset=2 xadvance=16 page=0 chnl=15 +char id=1145 x=218 y=173 width=16 height=15 xoffset=-1 yoffset=5 xadvance=14 page=0 chnl=15 +char id=1146 x=124 y=175 width=17 height=15 xoffset=-1 yoffset=2 xadvance=15 page=0 chnl=15 +char id=1147 x=306 y=401 width=14 height=12 xoffset=-1 yoffset=5 xadvance=12 page=0 chnl=15 +char id=1148 x=22 y=46 width=20 height=17 xoffset=-1 yoffset=-1 xadvance=19 page=0 chnl=15 +char id=1149 x=162 y=173 width=17 height=15 xoffset=0 yoffset=1 xadvance=16 page=0 chnl=15 +char id=1150 x=275 y=41 width=16 height=17 xoffset=-1 yoffset=-1 xadvance=15 page=0 chnl=15 +char id=1151 x=193 y=257 width=15 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1152 x=378 y=59 width=13 height=17 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1153 x=242 y=369 width=10 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1154 x=72 y=448 width=10 height=11 xoffset=-1 yoffset=6 xadvance=8 page=0 chnl=15 +char id=1155 x=319 y=453 width=10 height=6 xoffset=-10 yoffset=1 xadvance=0 page=0 chnl=15 +char id=1156 x=481 y=448 width=9 height=5 xoffset=-7 yoffset=1 xadvance=0 page=0 chnl=15 +char id=1157 x=453 y=452 width=5 height=6 xoffset=-6 yoffset=1 xadvance=0 page=0 chnl=15 +char id=1158 x=467 y=450 width=5 height=6 xoffset=-6 yoffset=1 xadvance=0 page=0 chnl=15 +char id=1159 x=233 y=457 width=16 height=6 xoffset=-14 yoffset=1 xadvance=0 page=0 chnl=15 +char id=1160 x=73 y=0 width=26 height=20 xoffset=-18 yoffset=-1 xadvance=7 page=0 chnl=15 +char id=1161 x=0 y=0 width=24 height=24 xoffset=-17 yoffset=-3 xadvance=7 page=0 chnl=15 +char id=1162 x=45 y=0 width=13 height=21 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=1163 x=228 y=0 width=12 height=19 xoffset=0 yoffset=1 xadvance=11 page=0 chnl=15 +char id=1164 x=172 y=307 width=12 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1165 x=133 y=406 width=11 height=13 xoffset=-1 yoffset=3 xadvance=9 page=0 chnl=15 +char id=1166 x=156 y=355 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1167 x=182 y=207 width=11 height=15 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1168 x=357 y=154 width=10 height=16 xoffset=0 yoffset=0 xadvance=10 page=0 chnl=15 +char id=1169 x=207 y=403 width=9 height=13 xoffset=0 yoffset=3 xadvance=8 page=0 chnl=15 +char id=1170 x=424 y=304 width=12 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1171 x=104 y=435 width=11 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1172 x=314 y=117 width=11 height=17 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1173 x=204 y=387 width=10 height=14 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=15 +char id=1174 x=0 y=46 width=20 height=17 xoffset=-1 yoffset=2 xadvance=17 page=0 chnl=15 +char id=1175 x=72 y=263 width=16 height=14 xoffset=-1 yoffset=5 xadvance=14 page=0 chnl=15 +char id=1176 x=275 y=117 width=11 height=17 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1177 x=96 y=391 width=10 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1178 x=348 y=59 width=13 height=17 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1179 x=65 y=359 width=11 height=14 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1180 x=98 y=327 width=12 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1181 x=156 y=434 width=11 height=11 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1182 x=240 y=289 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1183 x=276 y=190 width=12 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1184 x=0 y=263 width=16 height=14 xoffset=-1 yoffset=2 xadvance=14 page=0 chnl=15 +char id=1185 x=279 y=415 width=13 height=11 xoffset=-1 yoffset=5 xadvance=13 page=0 chnl=15 +char id=1186 x=333 y=59 width=13 height=17 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1187 x=78 y=407 width=12 height=13 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=15 +char id=1188 x=84 y=246 width=18 height=14 xoffset=0 yoffset=2 xadvance=16 page=0 chnl=15 +char id=1189 x=230 y=417 width=15 height=11 xoffset=0 yoffset=5 xadvance=14 page=0 chnl=15 +char id=1190 x=106 y=42 width=18 height=17 xoffset=0 yoffset=2 xadvance=17 page=0 chnl=15 +char id=1191 x=465 y=238 width=16 height=14 xoffset=0 yoffset=5 xadvance=15 page=0 chnl=15 +char id=1192 x=272 y=173 width=16 height=15 xoffset=-1 yoffset=2 xadvance=14 page=0 chnl=15 +char id=1193 x=322 y=401 width=13 height=12 xoffset=-1 yoffset=5 xadvance=11 page=0 chnl=15 +char id=1194 x=303 y=60 width=13 height=17 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1195 x=398 y=369 width=10 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1196 x=498 y=58 width=12 height=17 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1197 x=159 y=403 width=11 height=13 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1198 x=28 y=327 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1199 x=481 y=334 width=11 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1200 x=308 y=321 width=12 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1201 x=130 y=209 width=11 height=15 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1202 x=318 y=60 width=13 height=17 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1203 x=455 y=334 width=11 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1204 x=184 y=41 width=17 height=17 xoffset=-1 yoffset=2 xadvance=15 page=0 chnl=15 +char id=1205 x=0 y=407 width=15 height=13 xoffset=-1 yoffset=5 xadvance=13 page=0 chnl=15 +char id=1206 x=343 y=78 width=12 height=17 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1207 x=120 y=407 width=11 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1208 x=429 y=336 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1209 x=248 y=443 width=9 height=11 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1210 x=416 y=336 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1211 x=206 y=371 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1212 x=242 y=241 width=17 height=14 xoffset=-1 yoffset=2 xadvance=15 page=0 chnl=15 +char id=1213 x=354 y=415 width=13 height=11 xoffset=-1 yoffset=5 xadvance=12 page=0 chnl=15 +char id=1214 x=165 y=41 width=17 height=17 xoffset=-1 yoffset=2 xadvance=15 page=0 chnl=15 +char id=1215 x=180 y=290 width=13 height=14 xoffset=-1 yoffset=5 xadvance=12 page=0 chnl=15 +char id=1216 x=444 y=384 width=5 height=14 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=15 +char id=1217 x=44 y=43 width=19 height=17 xoffset=-1 yoffset=-1 xadvance=17 page=0 chnl=15 +char id=1218 x=200 y=173 width=16 height=15 xoffset=-1 yoffset=1 xadvance=14 page=0 chnl=15 +char id=1219 x=74 y=22 width=12 height=18 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1220 x=91 y=212 width=11 height=15 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1221 x=442 y=0 width=14 height=18 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1222 x=60 y=195 width=13 height=15 xoffset=-1 yoffset=5 xadvance=11 page=0 chnl=15 +char id=1223 x=469 y=78 width=12 height=17 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1224 x=13 y=359 width=11 height=14 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=15 +char id=1225 x=473 y=0 width=13 height=18 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1226 x=150 y=191 width=12 height=15 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=15 +char id=1227 x=392 y=116 width=11 height=17 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1228 x=196 y=403 width=9 height=13 xoffset=0 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1229 x=345 y=0 width=15 height=18 xoffset=0 yoffset=2 xadvance=14 page=0 chnl=15 +char id=1230 x=45 y=196 width=13 height=15 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=15 +char id=1231 x=470 y=382 width=4 height=14 xoffset=0 yoffset=2 xadvance=4 page=0 chnl=15 +char id=1232 x=30 y=23 width=13 height=18 xoffset=-1 yoffset=-2 xadvance=11 page=0 chnl=15 +char id=1233 x=465 y=188 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1234 x=15 y=84 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=1235 x=442 y=352 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1236 x=280 y=241 width=17 height=14 xoffset=-1 yoffset=2 xadvance=16 page=0 chnl=15 +char id=1237 x=38 y=422 width=17 height=11 xoffset=-1 yoffset=5 xadvance=16 page=0 chnl=15 +char id=1238 x=366 y=116 width=11 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=1239 x=413 y=188 width=11 height=15 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1240 x=227 y=257 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1241 x=182 y=431 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1242 x=256 y=60 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=1243 x=195 y=339 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1244 x=65 y=43 width=19 height=17 xoffset=-1 yoffset=-1 xadvance=17 page=0 chnl=15 +char id=1245 x=393 y=240 width=16 height=14 xoffset=-1 yoffset=2 xadvance=14 page=0 chnl=15 +char id=1246 x=249 y=117 width=11 height=17 xoffset=0 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=1247 x=120 y=391 width=10 height=14 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=1248 x=156 y=339 width=11 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1249 x=117 y=343 width=11 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1250 x=187 y=155 width=12 height=16 xoffset=0 yoffset=0 xadvance=12 page=0 chnl=15 +char id=1251 x=132 y=390 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1252 x=266 y=98 width=12 height=17 xoffset=0 yoffset=-1 xadvance=12 page=0 chnl=15 +char id=1253 x=254 y=369 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1254 x=224 y=60 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=1255 x=52 y=343 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1256 x=464 y=270 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1257 x=482 y=412 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1258 x=393 y=40 width=14 height=17 xoffset=-1 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=1259 x=39 y=343 width=11 height=14 xoffset=-1 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1260 x=120 y=80 width=13 height=17 xoffset=-1 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=1261 x=0 y=391 width=10 height=14 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=1262 x=131 y=156 width=12 height=16 xoffset=-1 yoffset=0 xadvance=10 page=0 chnl=15 +char id=1263 x=184 y=117 width=11 height=17 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=1264 x=140 y=98 width=12 height=17 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=1265 x=93 y=119 width=11 height=17 xoffset=-1 yoffset=2 xadvance=9 page=0 chnl=15 +char id=1266 x=28 y=103 width=12 height=17 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=1267 x=198 y=21 width=11 height=18 xoffset=-1 yoffset=1 xadvance=9 page=0 chnl=15 +char id=1268 x=145 y=117 width=11 height=17 xoffset=0 yoffset=-1 xadvance=11 page=0 chnl=15 +char id=1269 x=239 y=386 width=9 height=14 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=1270 x=469 y=116 width=10 height=17 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1271 x=218 y=403 width=9 height=13 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=15 +char id=1272 x=240 y=60 width=14 height=17 xoffset=0 yoffset=-1 xadvance=14 page=0 chnl=15 +char id=1273 x=382 y=305 width=12 height=14 xoffset=0 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1274 x=252 y=98 width=12 height=17 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1275 x=499 y=254 width=11 height=14 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1276 x=45 y=23 width=13 height=18 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1277 x=208 y=207 width=11 height=15 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1278 x=300 y=289 width=13 height=14 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1279 x=247 y=430 width=11 height=11 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1329 x=248 y=190 width=12 height=15 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1330 x=256 y=305 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1331 x=483 y=254 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1332 x=371 y=256 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1333 x=206 y=190 width=12 height=15 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1334 x=45 y=295 width=13 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1335 x=377 y=353 width=11 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1336 x=186 y=306 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1337 x=377 y=171 width=15 height=15 xoffset=0 yoffset=2 xadvance=14 page=0 chnl=15 +char id=1338 x=477 y=171 width=14 height=15 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1339 x=154 y=323 width=12 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1340 x=182 y=371 width=10 height=14 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=1341 x=360 y=172 width=15 height=15 xoffset=0 yoffset=2 xadvance=15 page=0 chnl=15 +char id=1342 x=493 y=171 width=13 height=15 xoffset=1 yoffset=2 xadvance=14 page=0 chnl=15 +char id=1343 x=84 y=327 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1344 x=120 y=192 width=13 height=15 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1345 x=290 y=190 width=12 height=15 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1346 x=339 y=257 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1347 x=323 y=257 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1348 x=461 y=171 width=14 height=15 xoffset=0 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1349 x=262 y=190 width=12 height=15 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1350 x=75 y=195 width=13 height=15 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1351 x=304 y=190 width=12 height=15 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1352 x=284 y=305 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1353 x=0 y=196 width=13 height=15 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1354 x=272 y=273 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1355 x=452 y=302 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1356 x=304 y=273 width=14 height=14 xoffset=0 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1357 x=312 y=305 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1358 x=336 y=273 width=14 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1359 x=318 y=190 width=12 height=15 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1360 x=280 y=321 width=12 height=14 xoffset=0 yoffset=2 xadvance=11 page=0 chnl=15 +char id=1361 x=220 y=190 width=12 height=15 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1362 x=470 y=366 width=10 height=14 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=1363 x=435 y=254 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1364 x=0 y=311 width=13 height=14 xoffset=-1 yoffset=2 xadvance=12 page=0 chnl=15 +char id=1365 x=384 y=272 width=14 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1366 x=445 y=171 width=14 height=15 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=1369 x=19 y=461 width=6 height=8 xoffset=-1 yoffset=1 xadvance=5 page=0 chnl=15 +char id=1370 x=135 y=461 width=5 height=7 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=15 +char id=1371 x=415 y=453 width=6 height=6 xoffset=-1 yoffset=1 xadvance=4 page=0 chnl=15 +char id=1372 x=487 y=438 width=8 height=8 xoffset=-1 yoffset=-1 xadvance=6 page=0 chnl=15 +char id=1373 x=371 y=453 width=7 height=6 xoffset=-1 yoffset=1 xadvance=4 page=0 chnl=15 +char id=1374 x=71 y=461 width=9 height=7 xoffset=-1 yoffset=0 xadvance=6 page=0 chnl=15 +char id=1375 x=307 y=454 width=10 height=6 xoffset=-1 yoffset=1 xadvance=8 page=0 chnl=15 +char id=1377 x=288 y=401 width=16 height=12 xoffset=0 yoffset=5 xadvance=16 page=0 chnl=15 +char id=1378 x=420 y=205 width=10 height=15 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1379 x=15 y=196 width=13 height=15 xoffset=-1 yoffset=5 xadvance=11 page=0 chnl=15 +char id=1380 x=178 y=190 width=12 height=15 xoffset=0 yoffset=5 xadvance=11 page=0 chnl=15 +char id=1381 x=429 y=153 width=10 height=16 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1382 x=30 y=196 width=13 height=15 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1383 x=258 y=224 width=9 height=15 xoffset=0 yoffset=1 xadvance=8 page=0 chnl=15 +char id=1384 x=168 y=225 width=10 height=15 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1385 x=105 y=192 width=13 height=15 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=15 +char id=1386 x=0 y=160 width=13 height=16 xoffset=-1 yoffset=1 xadvance=11 page=0 chnl=15 +char id=1387 x=296 y=0 width=10 height=19 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1388 x=504 y=188 width=6 height=15 xoffset=0 yoffset=5 xadvance=4 page=0 chnl=15 +char id=1389 x=111 y=0 width=16 height=19 xoffset=0 yoffset=1 xadvance=16 page=0 chnl=15 +char id=1390 x=241 y=155 width=11 height=16 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1391 x=284 y=0 width=10 height=19 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1392 x=144 y=390 width=10 height=14 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=1393 x=228 y=155 width=11 height=16 xoffset=-1 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1394 x=360 y=189 width=12 height=15 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1395 x=441 y=153 width=10 height=16 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1396 x=117 y=157 width=12 height=16 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1397 x=504 y=205 width=6 height=15 xoffset=-2 yoffset=5 xadvance=4 page=0 chnl=15 +char id=1398 x=103 y=157 width=12 height=16 xoffset=-2 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1399 x=269 y=224 width=9 height=15 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=1400 x=108 y=448 width=10 height=11 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1401 x=341 y=224 width=8 height=15 xoffset=-1 yoffset=5 xadvance=6 page=0 chnl=15 +char id=1402 x=254 y=173 width=16 height=15 xoffset=0 yoffset=5 xadvance=16 page=0 chnl=15 +char id=1403 x=324 y=207 width=10 height=15 xoffset=-1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=1404 x=208 y=431 width=11 height=11 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1405 x=156 y=447 width=10 height=11 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1406 x=214 y=0 width=12 height=19 xoffset=0 yoffset=1 xadvance=10 page=0 chnl=15 +char id=1407 x=270 y=401 width=16 height=12 xoffset=0 yoffset=5 xadvance=16 page=0 chnl=15 +char id=1408 x=408 y=205 width=10 height=15 xoffset=0 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1409 x=13 y=375 width=11 height=14 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1410 x=281 y=442 width=9 height=11 xoffset=0 yoffset=5 xadvance=7 page=0 chnl=15 +char id=1411 x=147 y=0 width=16 height=19 xoffset=0 yoffset=1 xadvance=16 page=0 chnl=15 +char id=1412 x=164 y=190 width=12 height=15 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1413 x=234 y=430 width=11 height=11 xoffset=-1 yoffset=5 xadvance=10 page=0 chnl=15 +char id=1414 x=165 y=0 width=15 height=19 xoffset=-1 yoffset=1 xadvance=13 page=0 chnl=15 +char id=1415 x=403 y=135 width=14 height=16 xoffset=0 yoffset=1 xadvance=13 page=0 chnl=15 +char id=1417 x=455 y=440 width=5 height=9 xoffset=0 yoffset=7 xadvance=5 page=0 chnl=15 +char id=1418 x=164 y=468 width=7 height=4 xoffset=-1 yoffset=9 xadvance=6 page=0 chnl=15 +char id=8192 x=289 y=463 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=8 page=0 chnl=15 +char id=8193 x=507 y=349 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=16 page=0 chnl=15 +char id=8194 x=507 y=334 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=8 page=0 chnl=15 +char id=8195 x=507 y=339 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=16 page=0 chnl=15 +char id=8196 x=249 y=465 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=8197 x=244 y=465 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=8198 x=214 y=465 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=15 +char id=8199 x=507 y=439 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=10 page=0 chnl=15 +char id=8200 x=507 y=424 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=5 page=0 chnl=15 +char id=8201 x=219 y=465 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=15 +char id=8202 x=224 y=465 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=2 page=0 chnl=15 +char id=8203 x=234 y=465 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8204 x=239 y=465 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8205 x=264 y=464 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8206 x=269 y=464 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8207 x=274 y=464 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8208 x=182 y=468 width=7 height=4 xoffset=-1 yoffset=9 xadvance=6 page=0 chnl=15 +char id=8209 x=173 y=468 width=7 height=4 xoffset=-1 yoffset=9 xadvance=6 page=0 chnl=15 +char id=8210 x=79 y=470 width=12 height=4 xoffset=-1 yoffset=9 xadvance=10 page=0 chnl=15 +char id=8211 x=121 y=470 width=10 height=4 xoffset=-1 yoffset=9 xadvance=8 page=0 chnl=15 +char id=8212 x=21 y=471 width=18 height=4 xoffset=-1 yoffset=9 xadvance=16 page=0 chnl=15 +char id=8213 x=41 y=470 width=18 height=4 xoffset=-1 yoffset=9 xadvance=16 page=0 chnl=15 +char id=8214 x=413 y=20 width=8 height=18 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=15 +char id=8215 x=57 y=461 width=12 height=7 xoffset=-2 yoffset=13 xadvance=8 page=0 chnl=15 +char id=8216 x=142 y=461 width=5 height=7 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=15 +char id=8217 x=128 y=461 width=5 height=7 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=15 +char id=8218 x=460 y=451 width=5 height=6 xoffset=0 yoffset=12 xadvance=5 page=0 chnl=15 +char id=8219 x=149 y=461 width=5 height=7 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=15 +char id=8220 x=82 y=461 width=8 height=7 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=15 +char id=8221 x=92 y=461 width=8 height=7 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=15 +char id=8222 x=361 y=453 width=8 height=6 xoffset=0 yoffset=12 xadvance=8 page=0 chnl=15 +char id=8223 x=102 y=461 width=8 height=7 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=15 +char id=8224 x=417 y=153 width=10 height=16 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=15 +char id=8225 x=405 y=153 width=10 height=16 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=15 +char id=8226 x=10 y=461 width=7 height=8 xoffset=1 yoffset=6 xadvance=9 page=0 chnl=15 +char id=8227 x=445 y=441 width=8 height=9 xoffset=1 yoffset=5 xadvance=9 page=0 chnl=15 +char id=8228 x=200 y=465 width=5 height=4 xoffset=0 yoffset=12 xadvance=5 page=0 chnl=15 +char id=8229 x=133 y=470 width=10 height=4 xoffset=0 yoffset=12 xadvance=11 page=0 chnl=15 +char id=8230 x=61 y=470 width=16 height=4 xoffset=0 yoffset=12 xadvance=16 page=0 chnl=15 +char id=8231 x=7 y=471 width=5 height=5 xoffset=0 yoffset=7 xadvance=5 page=0 chnl=15 +char id=8232 x=507 y=359 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8233 x=229 y=465 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8234 x=254 y=464 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8235 x=507 y=434 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8236 x=507 y=429 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8237 x=279 y=464 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8238 x=507 y=354 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8239 x=507 y=344 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=3 page=0 chnl=15 +char id=8240 x=423 y=222 width=23 height=14 xoffset=-1 yoffset=2 xadvance=21 page=0 chnl=15 +char id=8241 x=49 y=178 width=29 height=15 xoffset=-1 yoffset=2 xadvance=28 page=0 chnl=15 +char id=8242 x=407 y=453 width=6 height=6 xoffset=-1 yoffset=2 xadvance=4 page=0 chnl=15 +char id=8243 x=331 y=453 width=8 height=6 xoffset=-1 yoffset=2 xadvance=6 page=0 chnl=15 +char id=8244 x=294 y=454 width=11 height=6 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=15 +char id=8245 x=431 y=453 width=6 height=6 xoffset=-1 yoffset=2 xadvance=4 page=0 chnl=15 +char id=8246 x=351 y=453 width=8 height=6 xoffset=-1 yoffset=2 xadvance=6 page=0 chnl=15 +char id=8247 x=281 y=455 width=11 height=6 xoffset=-1 yoffset=2 xadvance=8 page=0 chnl=15 +char id=8248 x=341 y=453 width=8 height=6 xoffset=-1 yoffset=14 xadvance=5 page=0 chnl=15 +char id=8249 x=420 y=441 width=6 height=10 xoffset=0 yoffset=6 xadvance=6 page=0 chnl=15 +char id=8250 x=402 y=441 width=7 height=10 xoffset=0 yoffset=6 xadvance=6 page=0 chnl=15 +char id=8251 x=45 y=311 width=13 height=14 xoffset=0 yoffset=2 xadvance=13 page=0 chnl=15 +char id=8252 x=351 y=385 width=8 height=14 xoffset=0 yoffset=2 xadvance=8 page=0 chnl=15 +char id=8253 x=250 y=385 width=9 height=14 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=15 +char id=8254 x=93 y=470 width=12 height=4 xoffset=-2 yoffset=2 xadvance=8 page=0 chnl=15 +char id=8255 x=214 y=457 width=17 height=6 xoffset=-2 yoffset=14 xadvance=13 page=0 chnl=15 +char id=8256 x=176 y=460 width=17 height=6 xoffset=-2 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=8257 x=372 y=441 width=8 height=10 xoffset=-2 yoffset=10 xadvance=4 page=0 chnl=15 +char id=8258 x=329 y=136 width=18 height=16 xoffset=-1 yoffset=1 xadvance=16 page=0 chnl=15 +char id=8259 x=492 y=448 width=8 height=5 xoffset=0 yoffset=7 xadvance=8 page=0 chnl=15 +char id=8260 x=117 y=375 width=11 height=14 xoffset=-4 yoffset=2 xadvance=3 page=0 chnl=15 +char id=8261 x=503 y=0 width=6 height=18 xoffset=0 yoffset=1 xadvance=6 page=0 chnl=15 +char id=8262 x=453 y=20 width=6 height=18 xoffset=0 yoffset=1 xadvance=6 page=0 chnl=15 +char id=8263 x=223 y=241 width=17 height=14 xoffset=-1 yoffset=2 xadvance=15 page=0 chnl=15 +char id=8264 x=448 y=318 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=8265 x=462 y=318 width=12 height=14 xoffset=0 yoffset=2 xadvance=12 page=0 chnl=15 +char id=8266 x=172 y=403 width=10 height=13 xoffset=-1 yoffset=5 xadvance=8 page=0 chnl=15 +char id=8267 x=280 y=155 width=11 height=16 xoffset=0 yoffset=2 xadvance=10 page=0 chnl=15 +char id=8268 x=497 y=437 width=8 height=8 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=15 +char id=8269 x=477 y=438 width=8 height=8 xoffset=0 yoffset=5 xadvance=8 page=0 chnl=15 +char id=8270 x=325 y=441 width=10 height=10 xoffset=-1 yoffset=7 xadvance=8 page=0 chnl=15 +char id=8271 x=263 y=401 width=5 height=13 xoffset=1 yoffset=5 xadvance=5 page=0 chnl=15 +char id=8272 x=26 y=0 width=17 height=21 xoffset=-2 yoffset=-1 xadvance=13 page=0 chnl=15 +char id=8273 x=389 y=20 width=10 height=18 xoffset=-1 yoffset=-1 xadvance=8 page=0 chnl=15 +char id=8274 x=280 y=224 width=9 height=15 xoffset=-1 yoffset=2 xadvance=7 page=0 chnl=15 +char id=8275 x=156 y=460 width=18 height=6 xoffset=-1 yoffset=7 xadvance=16 page=0 chnl=15 +char id=8276 x=195 y=457 width=17 height=6 xoffset=-2 yoffset=14 xadvance=13 page=0 chnl=15 +char id=8277 x=435 y=400 width=11 height=12 xoffset=1 yoffset=3 xadvance=13 page=0 chnl=15 +char id=8278 x=361 y=441 width=9 height=10 xoffset=0 yoffset=4 xadvance=9 page=0 chnl=15 +char id=8279 x=251 y=456 width=13 height=6 xoffset=-1 yoffset=2 xadvance=11 page=0 chnl=15 +char id=8280 x=26 y=435 width=11 height=11 xoffset=1 yoffset=4 xadvance=13 page=0 chnl=15 +char id=8281 x=39 y=435 width=11 height=11 xoffset=1 yoffset=4 xadvance=13 page=0 chnl=15 +char id=8282 x=451 y=384 width=5 height=14 xoffset=0 yoffset=2 xadvance=5 page=0 chnl=15 +char id=8283 x=198 y=0 width=14 height=19 xoffset=-1 yoffset=0 xadvance=13 page=0 chnl=15 +char id=8284 x=176 y=258 width=15 height=14 xoffset=-1 yoffset=2 xadvance=13 page=0 chnl=15 +char id=8285 x=256 y=401 width=5 height=13 xoffset=0 yoffset=3 xadvance=5 page=0 chnl=15 +char id=8286 x=249 y=402 width=5 height=13 xoffset=0 yoffset=3 xadvance=5 page=0 chnl=15 +char id=8287 x=294 y=462 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=4 page=0 chnl=15 +char id=8288 x=299 y=462 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8289 x=304 y=462 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8290 x=309 y=462 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8291 x=314 y=462 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8292 x=319 y=461 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8298 x=324 y=461 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8299 x=329 y=461 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8300 x=334 y=461 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8301 x=339 y=461 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8302 x=344 y=461 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +char id=8303 x=349 y=461 width=3 height=3 xoffset=-1 yoffset=-1 xadvance=0 page=0 chnl=15 +‰PNG + + IHDRôxÔú IDATxœì½ˆ_Ežïýòi’%>´—øâ÷—x‰—q‰‹>$—΢—¸èE/æ’, +݃^ÌE³˜A³|3èb.º˜A—q1C÷0º˜Å fÐA—ΠbGTâ ƒ‘nIDƒJ"‰IÂçùã]uÏéÓuêÔ9çûíNôû†âÛ}N}ªêÔOU}êSŸÏfÆ 0À ðÃÂÿÑ€fp]Ë|—w/§N àf`QBZ]à`Ø¥{¸-±7»¿—»²ÜH[†ë€)àA`¨EZkc.¬,‰³•½裤µCJZK[Ð/uithV§]ÔÇòa¬A:÷ÓÀ5 h=–£¾Ãýdýz)ð3u°©â®>Ö7‡IïW®|Kã/£úûóhÚÇW/¡öz õå¦B|åà—æîÿ;¨#7£zúáþ{{?AùXÏ£mnK¿ñ¹cŽö4â½O ¾”Š:}4¶å¿ƒ¬¾‹áæ>äíÛ?ÄWö1ßed|sî˜3³:aÈÌÞ1³nM::fö¬™}kf/™Ù½fv™­pïV™ÙÍföˆËç˜û{i$Íe.®Ç+f¶$±<‹Ìì°Kÿ 3{°áwù°ÜÌN›ÙÓfv¿™}æ¾±IZKÍlÚÌ6˜Ùfö™ âM¸xmÊ]º®N;=HË\YëÒ­0³7m6š”gØÑåCj? ÕÉh‹º˜6³©Š8Kmv¿~³fy9ú§kÐl2õÙcfvM º!Ó¸{61þTÂ÷çÄÕïãKÝ·L›xÈAÓØ\Ó ½Šmñ‘™=äêv:÷,–v7G¿!ðþÙÜûÑ„2ùô6™Ù}îï±ß4ìâŸ6µ÷m® 'Ð>îò{ÁÌn4¥Õ&þyÌÒÛ¶IÍ—¿câßoZýñ<á¾áMËú£oãnò;w£‰ùú4ê´ù”e˜*¾¿°dÕÐ> <¿¸ +¸³bÕQ†§€Àp´$Î_¤ Û€Àÿ(‰ø ´C8I7„ï€ç€€›€+jЮ®Nϸ|/~ââü}+hÕ?\|ìÎFÒ?\Kö=/£ïû¡a'j—ëQmm˜Î À=ÀÕÀbà°µ×§5Ò™öï6,G*¾¢Y¿î;Ð÷><¼ü"‘n3ê£PM¥»¸íJRèú€K€Ë/{8ä~ÿºfZWQÿ;üCîýÀ.4F¯&Ì;=fPýü6÷l¸Å¥{yͲ}Žús]|ÆÔ“®L»Ýóut·¡:xøÛÜóO€÷ÐøØ^£· ±˜Ç2ÄW¿‰Ð}íÂÄ+cuÃæí(ÛUèUÞMQ·Í v=U|Qvð*a1úíî÷í™çq šS™Ù!Æ]DQ¤ò©Kwð´{·6’öZà—hRÙ\„Áª„rÝŠ:ʵh1ô$þ|›lòøwàçîï'ó¹-„vVäñû/ö¹ø€ø¾âà8šŽ7Lãq´Ð;¬GLöÔÿ@=‘å'Àï˜ø~]§€/Ð}Þ®i~ýÂfÔgIºÔ¤­D« }_ì0W;½Sw+úÞ…ç÷!iÀ$:JÙH½’è]J&j‚Í.¯Ý.­éö ȯ—ç!ß Êg]F—Æ¿¡´ÐçÓècì#M‘£ˆEdÊ+¯VÄM½îý¹^c啊üćúƒû )_®¤úÚÖonÅzÂGO—¹ßØ@÷b×ÐqÑ­èXëÞŠr<ëâõ‹Ð7¾JùB燀Sd @Ђî}“ýLI>îIÄxÏ Mèo¦(ƒþ/2½žK3>éþ÷:#iüΕñN4¦ž#ýxÔŸÁï¼û-l®@ã¸×ô3î·XçGÐ7_È £Iº¸ ߀ô£6“-ÂÊŽHÛ~?hL]Aø¸'ãè»·¡¾9žH· é‰åÃdŸó½]ÜP|³Pg'¿»~í¨cÖÑ@#M£Nu'ZDükIÜGÑ}דÀ[4»›<„& ¯Aú"íe\Q?¢ +“Hrp{à¿ÅPœÄë ÎyÛ6Òr~‡¾µŽ$'t#æ"ÄÔªv”—Ro±U[ÑBfKŸÒ?_ð9sùLY:âÞÛí÷û!êÃ{QŸ¾Mmá'µ”q7‰ÚôÒ'€¶­¶ôGÑ™û:fo^΢³éOÈC!„ä+ÑhZÅä½’è]‹Æûë‘81¬Fœ=hãû2s;ûžçë˨§ }®aÅM¢«(u°Ç…½d;‚àj—‡¿îtœrMØnBèZÔ˜#¤¯û?¢]ùxàÝõh§ˆI‹ °‰‚wÇ”JA“/„w}þYl÷“BQa 4ÀÖSÍ ·ºx!Ô]„å±-hw¢ÝÍ÷ mê¥ +gÉnéäûÞµh‚ù£ûß÷å#ÔÃö“.ß×I?Jk+ÑjKÚÁ^B3ÞW‡KßÝ‹Ž.óݶèEù!»Æ¾/'†q÷»'÷[¶qê%šæ{Ùþ¶øÂ/.CŒÿÒ2¾¿AáÆí½ôN´Ší¨"n@ûSt®øßÑê²ì*ÏÄ@þ1ÛI› ‹xM¦¿GgÛ7Ѽ#ÆpйLöêºITÅáHÄYUÖ“ÌÝ WÝ-aú†§˜{Åc%Ò~—ð]\¿cYOyŸôgh¡ÝÀQ´+©ºçûž‹WD¨.:ge؉˜]Õ•Ñó ¡zYxÖO¢ÅáNTçw¡q—×.÷‹¾ÝôFŠéuYR®«~ü9ðŸïn@ÇOE´•hµ¥Ç=ˆ×>NvmzºZã13î÷b´0ÛƒúB^º[·-ÿ +tSàv´@,»òxåö†ý²…Û^ê”aÞóõ €·Ñ™È^ĬëÄñAŒvjè9ç }Âå¨=Eû]ÒŸH9ôý_1[ºp”l'QŸ¸|òÿ÷ÃÄëhqq#œw&F~uªdÊL›]Z“T3Ê×Ñ ~Ðå{ ÍÄ«Ÿ õUHð Y»ø»ÜÜÿã‘tv!†ó@àÝ2—Çš_]‹¡X«¨wŽ;j³âùð(åJVçÚÖK +~ƒ&ûmˆ=åòx2g+éÊ)ðý³­²æ„¯Á͸ߦ­¶ôé‡mAüþ}¤ôw +é©|‰6 ¡+Ÿº÷ëÑ÷]…DØùþíäûûPþÝ®lÏ׸…r©ßM.<¿ðâøÐÆ©æ?ß„kuÃJÓ5ûvèZÅ”»‘¿ +6êÞÕLsØtÝè`ŸËÞä;;%ï',|Ícµe×!Íýý´û{´"Ïç-ŒU å]b³Í¦šÉlªYùµ¬XyÖš®ìœ.¤yÂ}OY½¿ç´+Ç2ÓÕ™µ¦v>aá댽¡ºø¥¥_üeáy7—N7@7åÞ…ÒsïÆÎººõ2aá>>U?†Mý«xUt‰‰o¼PA_'øëimúÓ—Fè*!¦k´ÇLftCïtô·õ‰>–šÆaÊðG]ú§mî¸_fºøQ$­6åO)ãrW†‡JÞç¯ã†Ðô +y¿ò²È5À^uü…ÝÜÇw ïFÝó§­|0lºC<– þnqŠýþÛLŒé KŸr4÷[ºÝjÿ’÷VÞÀC¦…@Jùšä #ôßiÖîþp›ò ¹:?lN›l4­›ºu1j™-‚i«g ?î5-ZŠ60Mffa›ÞvxÈý|ÓÕ­— ë­¿‹!Ë&¢Ñ¥¹Ä41½Ó"¥¦>úH$ÎÝ®ÜÝÀ;?¶ò ²-}(¼âÚ'epexÄ ò˜Š~”?^²rŸË,ã@øÈåß$ï~å;åê£c{)½èø º&³¹ hÔf£H;dêlE|ab\Uyßeê¨?3uþcwX„izд`˜¶ôÉÐïž;%ï'ìûí ¨—åYejã˜á ªp¯«ï:ÎrŠaÚš-™ŒÜUòþ~W?·Þ½hb"¡~:ßtuëeÂz×Ç»–!ÕyQJð Š:;çbxÞ´¨ªšHÛJ´z-;aê Uñ–™úïã&ÞùE®-ü·2±žú!Ñ»ÛâN·ü¢¶ÌhX×½‡…Êw*WÇSÅ÷±BÝ›ø!+M™²úkº*kB·Ò$â ‰T¼E«¦ƒõnÓJ6ß~'¹ÌÕ݃6»#>m3ì˜FJ^^_Ö9&l°¨Cд{.³ ˜Z†Ñß1mÆjÐÝkšXËÞ{xŸ™úçûN_æ21á|ÓÅêe*ð|Âz×ÇW»:o³€ …Û,l•05xï|)’Á¶­^JÄV™ølÊBo¨GõÞ/‰Þ&‹oZÜúÞ +W–Øï|—Y&)˜“ÇfVT X´êÇ‘‚ÇUÄ¿~Ffÿç‘x [óBNÊ]rï ð åÞCBŠF3ÀßÞwÜ»}d +j— å’CH±¢‰VðG)»\‹;~Ó ­åH!s}Ë)‰·i;ÿ[ƒ<ª°µ¿¿wÚc¨nêZìeyÖ E×ËP¿ú§ix-þwiîèV²¯“®¼z#?_Eâ¬@ŠnדiB‰”!wRÞ¯ç›.„[‘VxñºR?ûøü`Q\ £‰ñC²É1ÏlÆóË{¼"óÔV6Iy¬@×GnAŒïUÄH¡Iþ"¤Õ-ÒqexŒ8Ó+â>dJòzÊ'Š»“ +]¡™fþuhñt=b|÷¢ÉæÇ ÒšF‹’—‘ý¦Æw`€`B€E”›¥œBW8.(<¿Mæ—DhóXŠ&hoTgMÄ'Ñäh§örbzElB×Hª&Ía´£<Žî[Ew˰ð¦`€ o-bø íöÿ[àݪ}I0À 0Àçb¾ŠX‰Îáv”¼Lþ 0ÀùˆMÈÇÇuñî^A’Ã¥À;ÈÂ`V¿>BGzÏ7ز ùµrá-—_RËß”®ëBUœ˜À"¼Á±Âß1ÄÊ»Õñ¤?u I¦CXäâ~D¹…Ðe®\ʽ•N¸r‡úM)X6ßkÐaªýÐ,¢ºzù¼™ãs¦ÎàB¤ìW×Öþó?óá#à!âvùoFºè\b ðð4q×½w#¦èó<èòŒÑ„ÊZgÐ,¡z0—áWæ #¦ò *ß Ê™÷"˜ÂŒÚÐÝ|€êì[¤d»"!Ÿ"–Rí’Ù£ÎdSwÂôHmÓ Ú{a\,Ä݃Ì|ǰsz%ßSȃfw ý&ïýîÈšÛëdæs‹8êÞoDV SõªRËß º…BUyß@ÇлP›<‡Ì­‡°)¸Ÿ¤ÜyÜsè8z†…÷Âù™§ÛgPÿ¨ò\ù)ú¶çÈL.Ïí«=¸’ñC +7›®$¯¼,1]yzºä:G×]Ó螯5Ý[ý „.Ó‘üÖº¨‘—ï˜îfWÅ[ajÏ2;ŰÔf[ü‹ÝunÒ¦Öîzà"—GöÁdµ­Ê–Ľ¦~œ¿ºu£«‡X]¯5³×LÆ]®«È£iùSèÆL6 V›ú~×ýý‚…­¼vÝ·uËÐqñÇ +·ùÎa“mϬüšï*÷~©ûû„…møës‡­ÜfÇ„+wÕ÷5íŸMú]1¬1Û%¦«Ë³Æ_¯ +Ö‹p¿‰™ [Æ8bŒfÈÄ(·ðýÈ®‰‘†:B×5N̈P¨á<]'÷,?A–ÙMÑUMþ¾僙˜hþÙòÄüpy}[R_!ºåŽ&Å¸Æ 3{+ðü‹ß÷yŽZÜ|l(Œš|Õ`…g+ê"†M}åVcŸJ YjǪ̃ ]±­0ÝE7+_Ôøl>üÒÑT}SÓÉÆ÷£TÆ5jém:aíKë½W×%ï2MüoYܶ@Óò§ÒÝljsoëaÊÊí_t]™;5ëbÌÒ©ß¹Ôâ6 † ï—Y|œM[ï¾®ò8lZ\Ý–ûÎÑ@¼:‘òwcqêôuÄk kv"ÑÈÖ»[‘˜çKâwµ/ÐÖÁrtÛàrt£!õžòtÃáºUQv[á“BÕKþY•((CÈ£ÖeU‘ÎÇP­#~]ᜠ¼û=qס»Ð-HT5Bºcï¸é+ä˜érâ®BóØæâ§ÜS?…n‹üÕŽD<¾re»’zöRéFÜoþºê)÷[æ,å*dßã +G?‚úṁ{· l]|Jú5Ö6m +½Ÿ-y:2Y…n}BÖÞBÇVe¸¿:θAL%–Í;×z¿äýbtûéNäèÄCîÉÇP{ ã‚ª£3\²ñžÄcgûï£cŒ‹Ñø~—öŽŽêb”zßùú®2|ú–?¿?Js{m±ŽlnAsß$:ÊX‚xâHIðÎÍŽÿÞ(Î¥ÀWÀ_ ÉéRàÿ£ú*Þ?£ øa²sµåÈvÀ»”ŸïxB €2w³1ø ò2ÄDS ÜÜŠÎrÞE®3çó~ÿ²·PÕa®%óÆµžj½³¨#Þ@øÌ:v­ô8bÂß¡öþÄýŽQ=ØoGõèòˆû?Æ=?‚Ú!ÆÄýdq9ÙD{Ô•¯l²%ÓeøÒÿÕDáËö%bu'̓›Çf௽Š3ˆéüUÍt>}†êÉ/?ÉQVožæRfÛü8Šê"61{tÑFbå¶7&Ñ„rgáùTež+ïB‹Õ½hò€û¿èr» +]ÚRî}ðÇ.üø_®Œ’-Úb1™¦Ë]9vc·¢Åî^ÿ1Äö¢>>@{!ÛÈýøZ ¯Gíôs7Ÿ >±ÅÍ´¸²Z4UÜé «€!ÅÜÿuÝ–ÖÙ-€&/-BƒìbT‘U»»‡i&ÈO×’>ùoDƒêš,çËÖÀ"Ô®W’fEï²]ïŸ*âzlFòjûg‘‚]ªrY]4aÈui&©?Y„Ví~×óßf‚Y‚˜øV—ªTh=šp«”œæ£ÞšÐx ¡ÝvÄ~‰ûúŽÛ™­`8Ž$!“%tÛÑèoјø-Zh\Rßcð8Z˜.Fã>¶ã\†&ØMˆ?}NØ5®—–Õ‘œù[\¿EÖ'Œ›q÷ ü:÷ì×hcözE>½„OM$„ç#~…¾õvZû¨ÏîAco;í,«uEñ Ídþæ?tÜ‚ÄH©¾ŠŸG»€2ñ]Ÿ’ùßijÛI»­°ß…ºR€gÐ`ZŒv‘¯ FU…Çèm¾&ÿ2_Ý;ÑNªÈ`CøI6ÖÕÈë 48ÇQ_¸™ˆ¡7WaŠhÂëÒ4™,Š«öãhÂÕ } žªã‚<žDƒoj¬uî·JÚñ!šS&á^ÀŸ1]êg=i“ú-hbx‰Sñ5j‹¡ÝÃÕˆQ=ÅÜ«…mЄ!7eâu'‹ýeh(3/Ý´l 1âb +»P߬º³ý:ßoFãvIlzY¶&õÖ„æ4iîcön5†ß¡±è7,›(“2\ê~CGgUí³Å¥ýçd—'#ñ,­^†øØ“¤Á÷Ðx}€rÞYUÖÎ ø#¼¢®Öm¨?Aã¢5b:©¢x¿s~™ÙÊ^g‘èó8êø!qF›ÑªÇ/&nHÈ;_†+Üß¶ï_†ß#ævéâê]ÈÂOÐdwZè„DiylDÌw:ïí7üÓÛ.ï/QýV-®>Gmæ›æÿ¶Ëo1:~èš0ä¦L¼îd‘Ç­.þ$ð¯‘xm&˜³¨ßþŽlˆaÒ_¹õÅI4~{Y¶&õÖ„æ’¬lDÇ©‡Ý¨wЂüåRCÿí!‰Gl‡ø¯hB÷:0o wŠ®¿Ç+g +ö¢2öJgà‡Œß¢¶KUí%Ξ­Bãà Z ×ñSв@Qü×hÇÿ×ÌUö:K¦Á[¦™ì1Žó6$²OÈÛcbT;ÑBàá´ Ýübªg^u¿U“ÜI´°™ÏE€Ç×èû.#mõx1žhR©*ëÓ„™¯gš½HMrS&õ& ¥hÀ¢Zs¾MÙŠøõ娂{j×@ Ù_ô¡lMê­ ÍOÑbávÔWS“ˆÏ<†¤b±EƇ¨Öž¯¡úˆ&a$,SÂõçÿ>xIæÄô}º—×(SÆ€˜}\±Ú=»±é×ÅÌä¹Pð›Y?w.Aýú"4?öÌênhÐF_Ä2²SLZÄÅ^Aíe´ÊI߈ »€¿wil%Íòš‡Ÿm!Ûñô ß°p‹€gЄ´´v=JzY=³ÞàÒFJ€ãHª—¦¢›0ä6L|’ôÉÂã&—îåèû¥|RnS¶¢îÊ•hrO,F;æ¢X¿×e›¤~½5¡]ÑÜŒøÆsTK½ÎÁF$Ɉ)BžEýÿ&¤L»V¯ˆÑÈwø¼:¡÷Å»ÈÞî»ßõ¥ìN1 ØÍÓ–Öé_¬ø¸˜ùXð ·Ê¡Ö|bí˜Vîo¹¼Š’ˆ²ÐtBnJ—2 «Ú(e1W7¿¥–Ù¿Î¥?lY§µ}Çê1ä¦4u'‹1“}ý]«LÒ ¿²_Ô£²M¸:ªÛ–7[ýEý|Ô[Sš&}|ÚÕÝ[‘òÃÉ”·ÕÂ4Ë&ܵ–æø(%ßÐó%–m´Ì•+欫,L%Ôu×Ê¥©Å°Ê´0©ê_Wî1K[,·Lš2x?êÞ½iq ©ñ¼ ca?Uß™òM Š­©(“hØ‹+îK,À2ÿ¥\eçÃG®LeL3V›.Ÿ™¸¤ ¦kׄo-}€`Í'ä&t©², [\<Ü6¿¦ö÷’3µùƒíQ—!7¥™vqS'‹%®<³:mšø­¨“ºe›pñê¶çK÷æ7ŸõÖ”¦}|á.03¯p3R¾Ù…î{¼€”W®"|gØÑŒ#…˜¤û—¾)ÝB؈G)Ýl$ÝÑÎR¢øi¦§9”ãêZVê ™C¤[§ZEæC Î]Φt 0À 0ùÀ‹Ä½œ=‰L±i7_ìè‹WD†æë?h"ÑË›—ôWcöÿ5R¶VxÞqÏ»éÅPF›:¦L7;>°°¡žºa‘é6ÉÓ-Ê5í¾ñ3{Ȥ Ì=‹]Uí‚™®åŸ-wq§ÜûXY†,»¹Ð5i¡¯6³Ÿ¹ºû(! _®ÓŽ¦ì¦‹·M‘z£%¼¢G\z¡¼º–¡[x7êžâvòÞdjóŽéfÄjÓ-„k”ÿ6ÓÍ•®Þ_¨A[ÕŽ™úÕZ _÷Š…ikf˜Ë³rãa±0áhcm”–7øfLü cêGKÜß©}³ëÊù‘©OçyKo.”}yE|¾–qpùú¼†­>lS˜ÆÔk–ÙŒ8lâ=Ë#4Áo‹y<ÑV´U–æ9!®ÉÁ»ù͇v+Á ÇÑqÎoŸ#IN•©ÓTÜBXÇ$„.ÙNu­ð/Cßù_›!S»¢Û$eþŠGZ EÑü³˜¯Š"¶ s³[‘ Ô?¢2ÿIÑR±Ü‰ŽÞ&)7Eû1úö‹ÉÜäÖÅ8j×í.½˜ÙÛCè»zµ›ò¾9>Aýö=¤'TÇé¯P}ŸA7‚vÑ)ÀÕ¨­žBǘ)ÞO›bI{N¸p·{~ âY†$Z×õ± Ò÷ûh÷ñÊ'˜íü§ 7 ïq2§R¡#‘TàÝüæÃçQŠ0üâ&?q~ž!}Êì+Ž÷»w)G7’‰|O!…•3̇Tùð×PŸa®[Ý£d:,Û˜܃®™†Õ쨑Ž×©©ò•áó©ZxÆ~ŒŒ1DL"õVLÆœ‡?Úx˜¬ÿ|í~Ï¢EOìhãqf‹¼/ß ·Áß ~sÃl¨(Ïè8Â×Í12±mÊØ#;î9H}xÛQ¿y-<ü‚ý&Ä£®$ãW+*Ò©™w£ÉË;{qåyÎýrTT¤ñ õ¨oí þ´ß…º‹Í¶åo‹¶púÛP}íB›Ÿß£1ñ+´¸^Lº7L¡¦èâ| ME[½×Å.Öþ ˜–‰ÏÊhCÁÓ y+Š¨Ç—L"ë”ô_2!¬ui=oaƒO¡ú|Í$&\j!›ÅM^´4ิ¦JÞM¹÷e´KÝû˜ú`E¾_™¥Ù2‰û¾ˆÄñV<_°Ì +áj“A¥c‘ï õ­)›-žuïÆqCiu¬ÞÑF(Î.2km׸÷ߺò–™XÆd„ÉÌìY“ÅÉŽû¦‰Âw•oõ5Ó±XוÛçÒ~Çl¶_ßòÏ–¹gUæ•§ln_Møÿe6—›DÉUô¡c¼î?°¸¯®K£cYúï­ú†6åÏç›R¶XþE³õ©ßß–þ+;rxÄ¥sê·y ÀJ¤Yz`àß…­îˆ¼«ÂRdhíDS\ÿæËtíPC +KG˜ën)&¬U–¦ßŸBâÇOÈv4Uižë8€¾k}áùµhuNáÝZiî§2Q×÷ì$á[&!#J;Èÿ™¸ø´ …ˑDzÅ´6q¿G"qÊü½‡Ò)znóÇLùþt‰;ËÜïúÁ“Héö7¨^ßþí.˼¸…ð’l¯ŠX‚ºGï'si…°í×#åã2Ca·"ÉГÀß #eŸ )ÂH󰶉i×£c±Ÿ c Å ´ cª‹]ÞæÈÉܳ£HJVukj„´>VÄ6—_™¤ìS$¥hBÿ1ªã+ˆÛ“Éã÷¨ÜCšBhÛò·…ÏGàÝÇHRûþ6ôK‘ôu2IZ^‰ÿú’÷sàBo's5´/Eƒ¤x®y:Ë;ƒÎÏR1Œ4·gÈßFÊo „ð'4¹Œ8ºªóÀ!$ñZ“¿›§4;˜-^ÿx¨$îwh°ŽÙb£õ¨Þeöàj4ÉîO(‡?ëoªûïhâÚA&¢ÝMvÅ´vº¸©þÙg–ë†tE\ä~Sõ+bßÕkÆX—1Q÷h#ÄðÞF"ÑÛ™+Ò\Æê>WÖ¶£º)sóý âšü´ÝÍì#”=hñœ¿pKé›_R-⿌úý×O û‰ë€”åéË& ïÎ=yBcv1ÕnØÛ–¿-ÚNÀmé/s¿±ã*¿)IÕAšÅÌ~‚V©£óÓÝ­ˆéî!]©Ëc18›Ñ‡^…Íäk¼Ê/·Çˆ9<çÂ-”7þ“h‘±•¸Iá~¤9ߨEvv!*ßvÄ|BÖ÷£IþjÄLW‘íV.c¶$e½û=PQ†Ehçö:Úm5Ý•ŒÌ3_‹˜â$9# „÷{i$ÎÅ éÄ$!”-<p„lÇk}Hç²~Ÿ<9|ŒêçªÄüóH-[”åŸGlnK”ìæÀ¢z/­M^†gQ»ìŒ´܇øÒ½ßAv%¨¨dxZÝ\xî­Ÿ¥ÞáqeÚJvêï ŸA #ýjDÿÒ\(ĘqQ`=ÙDó5b€ëI?ÿ_…˜â>æ:W*S¬’üEí0‚$·¡É¾ƒ®0>Ž9e;É^ã1TG»‘"ì"2+…[H_Ð>‰v×»4î »"6ŽvËKÈDÝ“4fÜo?c +c.¢WG»]œq÷ÿí¨?§è–̸ߔ#™2|‡êýz´ø_„†ý$½ ¯GP¦°]_ۇƗ漊'¿“°„m õñKÑ8<ÉìÅÝ~o’°EC?¬cör–lž Ð…èË®í¥L@eíý0q>Õ¶ü3”[õŶp/&ð]¨/‡äËP;Bñ¸.0ê® lñº~ÞÔ†)c£×å¯ +Ï;ú²kÞ>ÿnÉ÷Qñýmé}O›ÆÓ2Wk-»½¶„®ª›b¤E¦Á8í*a©ià™©s¯p¾ijì˜éAü‚!vO7üÝÝÐF†]…½åÊ5d2k®B|C¾à*§I«iúJo‚éHz¡GŠAÛ韑Œ`€Î3ø[Û¦ïÒ'±³hB¼M0!3¥^«²WÞä<¶¡…ÊêÙ¸•sç<¥Ù?¢ÝäÒŠ½ø€¿g0ù0À ƒ—´A]ca®•¶%èžïnä*ÕcM˜w¢Ä a£:Ñâá/Úr€`€¾ÇH™ÌgÈm.ûíød0çv2—³×™™½-¶¡»Ï¿D¢ë!ä&ôJ´x`€8—à]i‡Œ+ºwÝÚ›Ñ1_Èšw°vG íre\vrN6QòÞ£è:ú:μ›ð=õØ÷zLŸ„VŸkA¤ÃÈÈU ¯M+цҀWнù軋þoòX|\çâ½FµŸ˜6}£ˆiÂvB)½’ü³Yf·{±ØOÜ Ëdìâúðg!ƒ¿A¦€¬¸M }•õZ¸^¦W#摺ZDsù>¢ “ïí£Žî8³'µC”OjÞÁVæö»[Q?þ’Þ)÷Æp/Úô¼Ž,•YZýúέÌå kÐw>Å\ëª7£qýðß™ë¹ÌgH +¶QíÉð_Ñxº‚jOŽ¿n@SÄb¤}µéb$Nqf÷+Ô&gȬÁ6á­Mà½Íö } ¡ÏaÚâwbC¡kºŽ5lºêtÐÒ …øÐôÊ’7 3aº’¸Âåý™ ©ÆFü•²gÔ™ÿnÿÿrkfÈfeFpF+ÒèºïöVÛòw«GÝ»1Óu­NE¾Krq–Yú/wý‰À»Ž+×–v•ÎßorínØÑ.Ê}Kú_hú|¿izß».­·Ìj;L}g,B?eº²èïa/7]A~'Ò†]—g'ðnÔ½ë&Òú¾÷Zb]—ÙHñß«»×\œ˜ý‚%ºØ÷ú0áâT•¿ œ°vW£ýo3ÝÁ}GÛ2ÇêjÔ½ëö!ßb0«˜ÿú­p>â)¤Õ­?§ž;Ô¥hçq†°/ó2܆Võ»ÐJü÷hÿ+´ +\Œv”)éuex Fþ7 Ý«—@@G1©/Áxí¾>D+Ø{ì—Aýâ +¾ëóØ€êÏeFgO wnpå?îÊó:ÕõŸ?süšÌ¿Â7îïo¨>ÃõG-ÇQŸrïCu’*òíÕŠ˗͇#HâòU}Ø;È)‹ÿ‚r‘:hœžBõ>„Úúb$¦ï·Ò»V¯Úùçñ™s!ß§nDW‡£\Ú5LæÐ+&ը땵šòǶðþmN!^ZÇgÅB•¹ïù~ßMÄ'GÑ­ƒËãÿB=ÇG›QÛíèoˆGÿßðÐŽÀ»IŸ€<öŒ|†ô#„Ç£ôN+.GLõÄ«&°¶ôû]ØJ³sצù{¿ñ¯SÎ÷¹ßëKÞûü_&°#Htùœû¿Ê}Ûúk‹dG#îwÒ=ûê#¶å_G¦¬´õáI¤CT&rõm·Ÿø8MjŸ¢>çÓ¹ -*ªÜ^CعÌþ:8ù941Õu°¶Ãýî$»Uu-Ê0â~c>éû¦ü±-ÆÝïN´Á«â£y,T™ûŸoNTP…:¢‡Õ&‘õ“s“ÃVßfû +“Ű2ûæeaƒÉ<ï1WîÓ&1þ–&Bßd™˜Ì\ÙV£üo9ï¸$ÅîõR—WÌÔ®·§_&æÄÚ!x1äã%mQ%oCßu´Wn³Lä5êþ³¸ˆ±Mþ)f§;.NYÅŽ0õŸ•Å^×_YúUqbÇ«L}y>Ú¿,ݧKòMi»Ôà}~¼YQù2¯µÙ~/:–ùÏèVК‰×xZ©V}ðtÞGB•¥Î6>9|™;‘8.N,&üѧ=]xv‡…-·†úöaÓã"Ó¼RÇ:mÝ2ÇêjÔ½ëö!ßb0«8ðtráMËÎHò¡n‡ÙdštŽYš=ó|Xd:+ôeÁO€/˜ƒxЕ#ZÖþ Þ3#Ï_0uЪsè^N@M'ðwL£ìlÐ;u*sÎÔ†¾ëÞurõæÏ2GÝ»1‹3˜6ùûEÇD m¾þËlàûücž¼b“J/ë/R⤌ùhÿbxÓÔBçã)m—¼ƒ)3“*ï±2ºwÝ +Zæ¿È´IIu°æÃ2›mn¹ªÌÞ¯Gg<±ïõaÂÅ){ß”?ú´§åIñòêýÙx§ZÏÖÈ·I™cu5êÞuûo1˜%êä¯ œBâ¨Ð•‚:h¢í™Gª†¦‡?CÝ:ø *÷{HûJ2Ü1ú6gðãîwOî÷Bª5kW¼Ï£Ìgu›#„¶"ð^‰Ð=v :);Óíuþ3î7¦§à-]Šä¿Ÿ¸¨¹ì<¹×õ×Ìgû±õ‡kïfÜoŠŽI »˜u''±kt½Â8û‡xÄEÔ»ö|”L?i’ê³û£¨¾®eþαów¿uùcCè–ÓvGW4Ë÷e÷»¯F¾ž¶M™›`^òí‡@ÞÀÄê(AmBg~¢…Hê58?n+yÿ)ºOZE¿#ð.å ~5Îà ÷l/ZPGò…ÞM@Mðeî7v6è•f.ï}ï¡ÅÖÄ”«Ð6ÿ£dçÖ¡û⿈äÿe$ÿzU3dçÐß"][–©ßïæ£ýËò¾,ð.¥íªp#£»Ùì=h3Ðo‹¼‰ô÷Ђ÷&ÄS0LÖ/7’6©?†ê1Æ û6üÑc1âc]øUÍ7”ïóPæ&˜·|{½X(%¨savš¤÷äž}ƒêã*â̤Îôzà][ÜVÑ FÛ]Ü)@/ò’r+ËЄp„°6yYþæ*ˆ…´ð{Uy%:ßO÷P½X(g1ÌDòïGûçQåKä1âÆq®C¾–¢Ýó‡d7@ò +ˆó¹SÞ…xØ“ÈøÒŠŠø[Ðw‰ÆõÆ„<žB}bÚ”Õ5ôÕmø£Ç%ˆîC¶R°õÏP¾W"Û ý,sô2ßõd†½æ l0ÂìÁ™OŒu–…ÁŸ ;0¿šÜÊ캻¥ð¾ »H›€öÞ·eÀ3î·©¢-}£«NW%ÄíEþO"ÉÓvà!TçCÀZ÷üb´ˆ -0Ëò?B6!‡Ú­Š>”ú;Bvd÷Ù ˜ª£4ß·÷3ל¨~:_íŸÇî·l|þ ªßÈ Ÿ8;èŠáË”/<òWþ|Û~…êì*÷¾)£ßAšåJï`íB´øX‹ŒxŠ·æi»ú³¨_lEmú!³ùU•‰Úæ.§òmËAýt+úÞ Òg^d^–ïxË<ÃܺÚïÞí ÜÄo/ê +dPo<# 0es•7˜ c|dÕJd ¡U¦Ô±¹èÔ ¥R[fRÐxÉæ*Ov\½}QQ7˜”sN›”U–¹úZkR:áþÑy垘fë§LÝá)+ノ¾Ì(Rú®{×)<_a™ñŽ1‹+µ-¿ïŸ]S[åñŠ«¿XÛUµ±/{ñûY˜”Ħ+âøücã÷¾ŠúëWù1ñ¤Ó7^3dfw›øò˜6i‰‡”§¼¡2-ro„¥É7&}]ºQG7‰³ÒÅñŠÒ/¹ÿcu –ßê¿÷Dày/øã„eJ€·ºôž·øœ²Ü}S“|{ÅÓcß35ù޹: ½LYØâ’À¡IÈ_c{±ae´½W6å*ÎæN ú|ˆM ž9–iHwÝû[+êaÈt•Çk#›eaUmÛ ðn÷¾[R?_¸r•¥ß–>uЄL?òïºôRËæó/»¶:áÞwúPþnIÚ~\½‰ãýîýCwËLZæýjÿXÙ¼w«–¾¼Uc¦*ŒF¾)µ¿Z‹|Ç*¾ÑLSãY¶È|ܲÉþqn{ IDATgQ® fñkTMËß ¤½Ü´ 53»«$N±üþü#¹ü¯«Q½,ÿ*÷ü„iWŸ:–›ÆÛAk·›ÅnÐqyV];¾Ë²Í´5ŸŒ|žM¿uÌѾi’Lß÷‚?NØÜyi­©”™Pþ E¾½æé¡ï™Z€|g…Ðé@Eçy,ðn¡EðØÂîÀªBÝ ½kê+¬žH¯íØFÑ ú²0æÒ*c0ýÈ¿ëèëÐ ™˜ò;6ßšÆÕY6-×Â8lÚQäãt*òﶨ¿^—ÿÓx®ã‹à­Ü·WÛT…Ž+ÛhËtaÎÉz8eõ -‚÷y-Ô¬*t­Þ„¾Æ2&z_|ú5  Â÷,ô꠿ƶŽÙ×ØÎ’i%ŸL _O³kp>¯ÍH{w=ð>Òœ<…´¸¿DÚ“1'›‘ø8Ò8>ƒ´6 ão”V`Ò4>DšçÛÀÿ‹´8ÿ©F>gÿ•£½ø?¿Fnz`€€ Ì’o©Ü¬d]&¨"îFW©¶ö>&Ö–=ýà'…wËЄ~ +]Ãë§·ª`€øÞ#E° Ø‚v°ï–Äó&F}V¹ç‹Ð]ê«+òùgG_v{1Ú¡&ÿà|Áa[ÞýòXb:%ésûìó Ýõ_|„Œ&=ˆ¬H–y`Œå;о)õÛºÈÆÌ0âù)7ÚÔ«²NïÔ Y |†Œ݈¬ÓVY¦mÚmòm¤ß!³pl>ƒ”ÀshžAŠÊ¬éË"øzƒº§ˆÀ 4hë`™–>F=Ëežî#´|-NSД¡y¬DƒÏƒ Àܼ„Ên¨Î^Cƒ;tDæJU1£š¶“/K“¶ò˜¦Ü@JMe“‰Ç£í88ñG$}}mÄN"C\ýÆSÈHÔqÄó?'óoP†¶e½ÍG»㿇ŒòìsùlD¦åû‰&yv‘ý]dÄê +TG[‘ô~.Z a‡&î’»&ŒZ\©³,ø«buîdûÐÔÃcÇt-fƒI‹þK¿ñK“Bè½&Müo-]3¼m]½`ºy²Ò¤X[å²Ô‡G]^Ïš®àu\&"eXda£!“R¨YæV´_íÔ¶­|˜¶j¯ÅÐÄóè2›}[ã•Äú©;¦\úÅç£îùXbž%é”õÛN$Ïn„~‰·,qñSëdØå¹ÈÑtjÐbº¾YçÚs›²bÙ˜©rûÜ´ŒmÛ¡Iž'L·`ŠÏ¯±7åu*ûûV›Ç“ûàÃVÏg×5ä¨5›$¦­>³Ãš3é¶åõyw¬ÞÀiC7l³ÀrKèËrq‡­ÞdÔ–¡½dºO¿Ät»$8 Á[¦+‹;V³½ü"ñ´¥ß`iÚNmÛ*OSw"XºÔzò7“Š–GÝóªö3ñ ¦…mY™».^'ðÎçÙÐåñ‘éFTì_rå µó.P~ѽ Ù:ˆ¹žžrïÊêÊ,\§eõR´6Ú«z)˯ªš~ß{Wæê9x}½ÞÏ',„h§W¨ë.äo`y´ÛCµúžAÇAa‘R9¾CN[Î {í©øÝy‰±·"Ç)8êâ>DŒÛãÑçäû úÞ“ÈÎzj¾ ¥÷0y-úö*lwñËœÚü‚°3¢¡¶½È¥›r|v#¿¾‹Ú©êè¡Hû™mùîÿñDZäqéÕÉ÷%täøyB™‹g³Ÿ¢~²ù<);ê)žå‡úÇYâGD^œ½“úGw#ŸÏåÒ¹݈z™þ8*ò¥®pylGbå2lA"ü"?FâýÂýÙ»=.ò°E¨Ï!sÀÖOx§cU¨[/ó³¨În® ¼êÎýÐÿН@ˆê í„ºŽÌaKòç¼§ÐÀ:CÚ9ïbN{s?…˜å$åîCXêâ{ouÐö$b,§kL÷Åçå=ZÆ©J°»\z/£«¡Ux1Üãh!<‚¾ýbt±~z>Ò‘:ÔůÐbðvÔ'ŠNaÊ0äè ÅÇÝóGêU¤yÿ« ïPêOÀߢÝ8å}ÿTw÷0ÛãÜ.ädmœp~Ùå5Ž ãèÊô“”ë›õ ++P»¤8¨ª[/3”;ê56#^uøx-"Kõê,ª´P›(MÅ4%S1„®(~Äl¯T~œÐ•¦Ž  1e2õßvuü#ˆ)ƒ`ùb)µÉ÷åžÚü +ûaˆëÐdÊ•q¹‹ýÚá>  a3šÌv—’ÙfÐΟû݉vHU ­¶-ó¸ í¬ŽyC‹áV$­xø4É|üyæÿžÑQg"h‚Ÿ Im$ª'W ~órà—Ty ì¡1pY$Γˆ?M")Ǩþw£öá¬{¿˜Ùmµñ©ÉÆ%N‡—Ö•fBZ½ÀlÝ>ÔY˜ÖÁ.ýqÔ—£¶™¡d.þ>Hv£|•ôÝl›ÉtªØ§8zÒ=0÷ÿbÂ×ÛäëEŽÅp!êÈgPÇ*Û=nþ+ð[G÷{àÇhÀmî*¡ËcÜ•o¤ã 4?DÚ!T§‡Pß<™@[Ç¥s «Pß<ƒÄÅ_%д9z8iCiA³‰ Åñs=™ûä™À;ߦõ¤dqŒ ¾[˜žE|ä24á´8ÑθߋÒ/×çE¨ÿ… vÑæèá|¤-¢íDÐ/x‘ÿ¥w^d~ªù/B’Õ+ÉÆ@ ï¡Ô8êû[Ðdçh\]l@›Ð\Òox}¤5éêÖËBãm2I˕ŗ~0Äç+É”]>CêñáÕ¨G¥© ]^Ó.ïcH±gmŸdw$æC¥©'Ñ·N¢•à¯ÝóOI?¿j’¯Gê9oUY^FƒvU$θûÝ“û½4ó•Ö‹o÷%Ц˜Ã®Â“hï¥|ÁWD›£‡ó‘¶ˆ¦A¿ñ>Z\xçŸèC¾3dzF^²šb¾dT®ß$ÒxeÀÐû]êëbÕÅj—×S„­Ò†0Cóz™/ÒæÑd"˜/œEü÷zĽ‚â +ÔO‘~ÄQþÌújÄÛÖ“®kà%.u$^p=j×§¢±{ƒdy*ÚÔË|áN´øÚ€xØ0ê;ãha5G"˜_\Š*ä×HÄ}Z1ÔQXhª4uêè^‘ç·dÖw¡ZĽÛ5™L=ü*üýyÌ·É9/d +€Å°»‚î&´8Èéx±øU„Ûç‡J»í•Èb]þÅÑí@î+ÜóR˜}™°¦úJ´û?ãò¯½æ1ã~›=œ´yì þDÐkLR®\ý*ãcdüáÙu¯ØÇ Í´Ïý™õÛ¨/y‹yý¸r™2 Hâ1Yß Þù LìŒý*Ä3wQOÏ`¾ê¥Í÷Ýîè÷"^põíIÊæbg`ÂC(6xË2C5ùøÞâØ·£Ec !Ø,|™…]_ãÞ•YãòÆ&*ʰÊ2c)Mü‡U|C¯ó]b™kã{”7^ré…Œr`™ÑŽ2ÄŒÜüÐh_iA‹i Þm²¢—Ç´ÉJ`Ñ L¾Va´$ÏLVô‚ÆB*ÂùFÛuuq³û}$÷nÔ= нàÞ…ŒIÝçÞmhðS޶*ÞDb¼PúS5ê¥Sx>©“P°ÄüòÁóòÇâzË–·Þ½hâ§¡1â¿ïS¿É·ãhä{U/!ÚÐ74ý¾bXf2ruŸ—aîYqÌ…om”¦Ê ùÝõw3îw¤„6ewÐDiªh“o“sÞ†‘´åKÂRŒed†GFá’,„έh´Ë‘$« ­ÇYäë?!)Ú稽ÿ)˜†¤=¿ sÿ +·DòƒvGç#-hgíwH)ð¼(t&¿í¸þ˜Öù¯¹þH‘AVI"}œÏ¼ŽLÔÝE’»§ˆKD¯B»ÿ:R²šÔËR$|õ½WqÚ~ˆ]„xzÔVD/¯Ž»ß&JSÇKžÇ®¹E‹–+ 3Ô«òíõdšŠ¦ù6=ç]‹îM‡ðY—Þ¸µ£?'-†g(¿çþC£w¿Mh‹HÄ%FG+ý¤/BÓ£‡ó•êO½`Ìç#Î"å¾Ë©ÜæÞOTÐß(ÏG´cîý´ÕwXÒFÔ4ß•Öü¨bÔÑ=a²}«óGÜó)+·k}Ð$J*{¿Â}Ï‹Zû m1¼åâ¶fGS]Ëð™™ÝU¿ÉÑÃùHëë¥(öãĬ|,¯0—yÛñfâ{Z3ß ƒ0 üÖnàÏÓŠg8þܬìl¹ëÞwï†Ìì5÷~S ýÓà?a:329÷xÁ2¦0 k3™ØËg,!n›|}>U-©§®e‹"iÓ™Ó€y   üÀB¯Žüõ¦­ÌÖ:½¥ð>K¸t[–ù‡þ¿íGâÀ3Hôñ%q+T×"ñê…èÜ®ÌúhY Ñ&ߪs^~ ý™#ý…¸Ž®öÛæö 0Àç.0‹™÷Ÿ… tVóž/Cgñ¯öN÷*:‹¸Œ4Ë\·¢³’trÍÌBŽ¢…Á$2‹8À 0À8¤H– ÿë kë·QšòXÜD;ù‹‘ÂÃÕôß&ô 0ÀBc%re|ò+r˜r/nE×Äy¤8b[,½®A†Þ#¥Ó2t\œÔøÞÙÛ*àgÈ«·2û`ý¨£ù)2? <ž@—§=†ê¶V ¶H)ã|çW·í@›÷w¹£N8'3áMÓvñ}¥)îwiüÒ¤ø×ä^p1Œº|'úœå{º®ŽG­Ý½XßON˜ªÊòYe²ûpÌýÿYIü&y”õ¡c&݉µfö´¥ÝU^íʶÆÌn4)ò-OÌs¤8»¤Çuk¿¦èF­^»wMv†M÷”šÆ{jYO¸pw:5µá1 ó¯bX[3~j}ŽFè†M}ìAS9Q‘÷”K3ôn̽«(ë&S=fº‡_õm7׌Ÿ¯wLüÿ÷]?sÏﯠÿ¥i¼ÝkR(ÿÖÒt§:®¬L +âXºÂõ"WÞ§ã/D~uÛnÈ4îæØÌ©Ó¹áÜ )˜ŽÐ7°º.íQ«¿èZÆÐï³ø ðù4e$X³Ö”aõ©¥ƒµßçëu“‰‰åC¬ý=ݨÕk÷e®Œ¯XÚBÇÍ5õÏTc(«Ç˜—šÆIFž¯—µúŒmj–X¦½,áÛ¦\>¡wuÚc¹Ë/õûêÆ÷õñšÍÝ ´Ù·ÆÊú‹ïÃ5ÚÂ/0óåN]P/rmQG1z¾ókÒÁ|êdøC]F­Þ«;±¦`:@×)3IlòϪ&ô&Ö°eÌÍ3±& Ý\• ‚®‹Ó”‘`ÍZSäCÝAÚ¦¬Mh|½ŽÖ,_ÓvoZ/kLý²cê;–H_—1/©¿¬>;‰ñ§\üл1÷n¬‡t±òºwÝHy',¾‘(Ë/$åyܽ ñ%OW÷ªæK®|¡6ó|&d‰³¬^–Xv-fuõn›½°=hfYyrñzÕ~kMüôƒHžAÚ^`.ÞC7#ö!]ˆÈS`F +d8"ÿ,䀢¨w2°‘Ëà_‘ÎÅT{ãz帴¿C7 >AÆ1 ¸9B¿Ýؘ!³è²DYÄS8¯"ÓØ9ØÝ¨g\¾‡¨>c=JæÑòkbg¬þÌó2ó)™Ëh :ï6úl ºÅ9šªüšÂçw1³ÛýBd¬¤,¿â™u¾^bõééÞFºA3Héa¤\E÷5³uˆ>Ec°Œîß{Gý”sßÝëù€î˜7þ6¡»˜4Ã7[¾YѺã0â3”[Ž,bÝ>[çÒ+3ØÖEÆ¡ÞEÆ¥®@V^·ÊѬe¶C¥Z:sƒ@v¡Žz1¢f;{‰¡ÎÄÚ‹‰¼Š× kgùgÓ:ﱫxëc²†w„¸ªCOé¸MÉB кŒk¡èz…íÄ­îõÿ1÷K€ès^ô1“ò±~sõëcœ>A}ñf_¥Þ…6 ã¤-膸ÞÑþ}$î6t¥ûGhÃ÷'àmSúM°“?”/ ­¢ë ‰æ$ÔÓ~Íc>´.ó;‰âN7¶“ð¸i_ú‰µjç9ß¡™ÄÁwºqfÎq4•™Σ CoÂHb€Öe\óMçwò;Üÿû™½èëÖÈ{º Ô ¯œUøŠö6Üç3̮Ϻ¼ô\ÇJ2ÞøpŸòy˜ú‹Û'›DZï7"¾´›°”"üä¿ÑÑü]E܋Ȥ˜yüž¸-š¶¸m²Þ¥Åm¹^I¡Ýsˆ¹¦b}ÄN´“{1æªé¸¼6£JÞK:ókZÖºXhÑP +šJ¼ ÏÅÌöI°ÅÑOFòô“!ƒM3Àód¶Ü{‰… M×|Òy‰–·‰^t]ÇVúv÷{®ôé^¢éDç}ÇûPÇ¥ú¹ŽÅh|ïBvð=ÿ¾±yíw¡Îâö,âC—!þûÚ¬¤ŽõÝhòßGØ®M1/ïšùšÀû»7M°Í%\Þ©zyp ÕVÄ4áÿ#Ú¥ ZŽ£Iõ·ÀÏ]gjäÛ¤¬u±¢¡ùÀnT羯Am²—øÎO>>ÜŽ#½JÜK^,ÔÝO}Æ5Ÿt^¢åO>gö¢/u—íwÿÞ3Ú÷ m&:ï;Þ‡^Û2iã3æJ( õŸ\Šêá×ÀÇHÜ~’þ-r ³ “Š÷PÇÑB` i}ú1GsÆÑ¥`³‹øxI~û)å} µa«É²€_åú:S¨ úÝÜ)2«˜;æ"Ñ+‘]N¶ó<ŠD|S®D–WB**÷\)çKè,{ ³¬@Ú€'"å­‹… Í>EGW ³(¿û¬Ú=úÉLJß8ÚÔçz… ÐŒq-]<†êvÇ<æ9_˜ï‰®Úº&.J(FHÿ®3ÌÖïù™kO0ëâ÷hSqõÆìÃî÷â1)؈ø×V´™I‘¨½êoÜåu9’<ÌÐ[Ü<>tùÔ5±?E ÀsÏ‚S:†ïPW Ia;ª„2´U"«‹^j‡¦`¡vžó ߎ ©Ê»T+:.EVÁ“-._vï.íCb€BsÆ5ßtM±µ¹·ú}Ã|OtuÐÖ5qQBñ q‰A‘¶¨ßÓo‰æ$‘©Ã£==UƒfÚœý3’ˆáÛÔ©'+â/CbËÇ€þˆúÖ|ëDô{€z4e\óM·ŸÙÇU¸ +íþw‘v¾Ý´>ç›n¾ÑF”ÿ1ðר-¾Díý#=£sÅ»çO×Ñ^HˆüUÓùXÜ‚Ê|Zh݉÷4á®ïg!ÞÖö´am½è—€ô_Fâ4U"kŠ¶Ú¡M°P;Ïù„ßOR}´±ØýE• ÆHüõ¿²¾¶PÔ£)ãš:_¯POóšdSwÿMës¾éÚâ’ê(³ÐV”ŽtŽê^=Ÿð1R6½jóü™òg§$Ψ¿m k¿»ÑÆï]´Ù(¢í=Xôz°]•¹§ÄÄêM•È ¹k]íÐ^ï$ªvž½Â!ú+*óX„VÉ&*ûµÝ=èlm,!F’÷*4`ŽS®…¾š3®ù [†Û*Ô©“âUhœ¦J›Öç|Ó5ÅrÔ¿6£~˜ºãí…(:6=D”ÂÎqÿª„¸ùðËã^«gÞ·EJÜ ÿ[3{¤FÙÖš<Ÿy¼bYÛÕHgÔÑL›<••Å»Íåñm.ϦvˆÙ“_a²-~:G÷…Éc[•Ï‚N -ŸNèç›Î‡©Ü·´j>¿º6Ú›ÖçBÐù¾=]R_SçÓ¦þ5eõÇê ‚…²fõ~B^cb¶§Mµªè‡LŽ\<îJ̯x7êÞuòMý¾¥¦ ø33»Î•w8WŽc‰|o¹zðtw»º©Zè`r’±ÂĘS¾©X¯OXæ67T_mêeaaÎóЫ# àmt&õ%ÃÅl@}%²ùFQMÑP{‘Xïbê_‰<‹ncüê)á\üUͼ`€8Ñ_#¤I4 þ¢"þËH©h’só~¼×¶­‹_¹ÐÙ‚v€`€¢è×-ot;q)@]%²`€ï+¼¥ÓQân’‹4¯ %ÇeÈáØm5ó«BѳGÌå´w©ÜÈ‘Ú’Äøy#>¤^·ž&ÍaÓjäb ºF~˜r7ä¡òÄ<¬æ‘ꬮ޾à7ökpil^ޤ!L ;ÿ‘hü}*Ëó‹:L¬ “ði×e–u˜DæšÊTbŒ"Æœë0£b^uꬬŒet£È¹Óg.Þ T1úK‘yðosé—]»Êci=¿U -+_S¦ü„ûsyÕõ>º }ßiê{[¬ÂSèFÒqtóást|x¾ãN²£ä}ŒŒî²=ï¡cß}h“»‘j÷ì!³Ë!«©ÎêzâÔ®ìà‚DúŸ¸Â/ˆ‹ÿäBÄòûéåN÷}º¾µŽj«‡«Ù\‹tZ;ž8°‹¹z&1[O!ƒ7þ:è«ô¹®Cº4©È3£Å¨}ª˜QSÔ©·ýÈèFô=— )ß>TÞŸh¶¢ëy7ï»g)u1‰®ÞíDÆñÜ»X»†êºìzÙ2Tþm¨ý_F“ÒN(ŸÇtÝù&T7ÇKâùzþ]ÉÜOü;@6Sþ-þÎÐ* ³¨¾.E ½*ãF_ÓÜUô:Ò®vÑqõftüºN›ç¼~\ÜBZÿOe߸ÐZˆß³0jÒ¼?ff+iÆLÍý=–@·ÂtíÁÄ|†L74žMŒ›éÚÔJÓuªé†M·™®‚v¬üJè„…¯[¥„%5òi–[üÊ`š® y([¶i^+Ió#ÓŸ²~ðYÍ|F]½Ý_ƒ¦i]OYc ´«ËÙµ8zE3QAÓ Ð<ïÞ¯<ºçc%ùL›¾ÿMï3‹×C“ï¹Ï½ ]¿|Ët‹ª,¿{-»…öŽéì´•ß„òåµj^íãv"ù§~ûtÓŸ¿_G?Dt8f3Ú-쥖¹šˆüŠúªog€o@«Fï%+vçÏ ½·¿ïÄ`YÛ‹‰šWo’æwý>o¤Ï'hÇt0B³*ðî­𼏸Ú•U‰æ›Ð4A“|FÑÎõ:zûí6×'ä· Õ“!QûK¨ÍB¸ž°¤è™%ÈNQ¯܃úfŠÿ‰¶ø+´!+çÿŽáb÷›j0,$2é1wôæ®·Æé¥^;I?“µ÷n´k¾Üý½Çê|Ï$ê;E#HkåÕ²þqúþ½H:ó€ûÿ¢H¹ü1ÃÔö#ôþ˜¡î‘A+ôãÀÇ‘ˆÝ‹àüµÁ*ìAW±¤‹¼Øª ¡ã&4Má™Äv¤8:Ž˜ÄàŸñ'‘~ÉÀßåžûOh<êŠæ›Ò4A|öS_4ÒyxÕá8šÐv#ËcW¡[2yoò £z¿’¸éà‹]>ÛHëëÝ÷4ûÖ…×Þtt¿< 6סنøþQ²£ï p„púšÀ žµÁKÑ1âoÝÿÿ€Æ›÷[vë«Î÷|…&ñÛ]ù|šã¨­&Kè¶£>ü·îÿ?¹ø¯GòÊ3øG¯Ñ¤ý#/È+UÕE墺4ó¥,åóéw O~†x^!ìͯK¦„“ß™Œ”­ÉNÖ—í2©{†ôæ|ì,šàR49ÿM&ÿ@æRzQ ~~ÀçßS>à›Ðx„\§V Ð&43ÌíÓUJ„uòy1ß7ÈlvüM¶1;ѹüHQ÷ $IºµQü7GΟ&¿Ä¿Ø¥—Ú.!m¡ ³ëù q%Åï¾"¬'ྕµÿµÑH.¤xñ|¹ð¿7]ÜKSè^ò÷ÿ"4ÖŸ!ó5‘5A]&QwÀ7¥™O„Ú´—n’›ˆæ=£ÜÇì‰ácd+&šqá*´Ûª(ã|L0»®½ƒ®½Ô×IÒ®€Ëð‹ªŽ5f˜»Ë÷”˜¨½.~‡¤AÞ±ÜfÔoÊx¨÷“Z@–-¾—èÕ ÉÙHÓó”&“Ò¿¢~ðû„<<ÖÿîÒÿg$¢¿%¿NÙæ{WÚoxÑa]/‡3Ôgu|SšùD¨M{©ÑÍ߇&ײ«VžQ~xwœø™¾ÿ†÷˜u/Ñ–õ™@ÿöÞ?Ī+Ëÿ„ÊP*Ê£ò(3ÜjÌPyè ƒit0PÉ}è d0M2\3˜!qˆƒâ£l’&â Cl’&×&6qˆMlâ`†Ø”Cl´16Ú˜FC•hÐ &hPYß?>keŸ{îÞûìsî­R“»`QuÏÙ¿÷>{­½öú[Q>úžAv¬«íº<L¬CÚ}îÊK‚ªä™ +B«¾‘­™+‘|(ߟmà~]ƒ ö»@Z#ü¾õÓIÆä¦cÆàÎ~¤ÛIï9Úkhc/Ôü¯xò™È|\_êÿ1‘yG\Y*vÝñ,ZÅaWÐÙr³ŸJË€1oe…†Pm“(óÁ·“g7ï†\¥ž2¢yÛ(‡<ïîD¹ÈlGA"{_àýÊ­ƒ£à½tŠBkLèß{;PV>÷Å*vãE’ É–µ =¿¯À™{ú J¶k¹›4Œ±ÿœ|Ûæ¢:SyK‚1¦¹nÿe0v*°¼rO?8ˆÇ%Ÿì;f_ùÆåB\á#¿¹Ímâ}§¡ª0•§Ò L.!û%¨8ø8#'H Ó¼Ðó»h“ØŽô¾<7ó†\¥K—"š·2»bPóû¾ŸÍ²î¿©Ø÷³Ðó;´v BL"w+BIÐdKªÂg ~ÏLðp³\Ÿ[?àTéIT™Û‘´×µ KAK“^ðúg¾cWfð ·éâäÓ ’Îðƒüo}¾¼;\ˆ´‰.žgûáb“ç¶ûÀI>.”"çýàâºq¢Q¦mÛ´MeO¥eëñiŒÇNØUòüd§ežÍGüc´Mâ<œö·9w‰­ûàEñßNžÉÖÊnªÔs:ó÷ÀïÔL >Ï¥½ÎÃ&Ix dPmÜ|ú0kÁCÁ­c:¨Gó¨¦Ï×aPv¼2ÎÛõ÷n¤Ï]hÆQ|XûÎÒ48³Í˜òh;ð¸f¶¡8®ÌKà:ݨÿî¿[–lMó<+’O xo¾aà3¼Àëp.|÷€pˆÛ +úvð>q!øñnƒc: U™Á6pÃ{é^ÓÁ< ;nípÛ¶ƒŸJW&´©J=SEÈLQÈ`¨ };›D™¾ŸÌ›µo¥ý,—ÀÕšßçϺÝz¦*OG´¬ºç]CªÅ×2 c"LFƒøÆ¦JÎç£ü™Õó”°ïY8&"«:Ô¦,Z=g4_QÙ ©°.ô5¿ºDÇ#"²$1O¯ˆ¼!ŒÃ!â÷oå^úÑ/G¢‹]œÌþ¨ a$—èy}žáC‘p …,ŽjÚZ‰ÆVÉÂ^a ³bõŒ‹È¢InÛtaŠ3S0n!ð•U%O»ØÅ.vñÂG@b¯"áTÁÚw} Þ÷͉¤Yˆð=g§ÚVEtU¶ßs}wÌUòt¡ ]èBn!È2?7÷¬‚ÜS(–2U%JY£QZÿ]¯æí”bNU‚ù=}ÿ}øï:UOºÐ….t¡ M’ôxT„[‡t–©€2 +F÷ +|«à—fƒ +w#î׿ ]èBnE˜*xƒ˜ í „Ã8û À›.øÀ«(ö¼8ˆ°F'¡]åØvó¢Øãé +ïƒ!´m^EúøŒ¢UÊóÌ[-Šü!`9¨ù¿á0¡€ ”çïOîwZú1ØZ5¼jk +xq¨ýü³êMïBêH‹ò8 n,',}OøLÕRË€ÒìnhÝP&µLûXCk·nEQ)Ï«ÖÛ‰4Ù1(É|?À%ðp’‡¢>¦Ìc¬üŒ*v +ÚÙøW×›óA­õY ™£yýdR` xˆzô ³Ň®H3eNÙà¾p Ôl?Îã‹àÕiˆi$à‡(þö—¡™€ +à-}¾qÉøfpN×ÉNy9HƒROY¼œ,¦Ä˸‡Œ‚}}[ûñA>‘Ï@ÂX…8Þ–˜Îœ$Tï—Hû{W²üvÚv+B´‰_.°í 9g~þúü¶Àï²ð¸Ö5šIÅR: ã˜GáB‚ÎÇäÇ•? n{@§5‹áwFµ œ‹"+ß5è7¿~| –_¶ ÕOEJèãÕàúyÀÏsïNøOÐÔxhöøÿ +Êû¤¶f¯€ìÒ©U…§Á¾\Óú?¿×¥ ôÖ«Å`(÷{!x<ªygÃ?Dê”~o׿;à Ú‡°ù1Ð\p š }2.€ûάHîkÀkø;@ÓÅ=򠯿ÃûCšï¢þß 7Z ñ[Š£B¨< åýTäß×Eä=éš‘Ç +Ú«»®ïF2ÿ×=é¹öäöi=½™ÿû<é2Ïû}ã‘Zžµ' ãò²fYÓåeÛé·”9÷át‰›…5ín§ÞvÓØØ¦ŒÇd½ïÕç=ûXToQùy¬‹ÈÛ"2[ëÕÿß–t“Â,.‘4¨òÏš6Û^0(Ü'DD.ˆÈ‹Bk£ºÐºI´½¡ölÖ4 ¡¥Ò -ûœb(Y4ÅðA­ûˆð{±çÃÚ—·Å¿ç…P´M="ò¾ˆ¼#ñy~Xólö¼{Sß}*á}ãˆÐL4´§½¨e,›„ñ‡ˆ¼®i +ÍOÛ™¤.†qT'¯Vð, 4Í‹âü"äÓô ˜Á{â_ˆÙúbu—!صÈï”1˜ÌtB›kKS“æÍ£j½ MWeΫ¤kÈÍÍÇd½/ÊWÔÇ¢üeæÐp™ð[´MyLü¾ERp¯ˆœ·¼%­>Rj&:¯J3á=¬åÍÓ2Oj¹u}ÿžPøÊzLÓúà !>!~":&~àÍ@y>|_ëÏúëè×:ÆV´M¯ L1†ßê÷ðg„óÜÈeôÝÞHù6ǯLÂøCÛø¦¶ó’ÐÅÛâaRÌ»0u`áHß…sñ›‡¯ü(›àÿC{¡ƒ-|ó³pñ×}åmB³÷üï ŸÃµßÆn²Å”]ønÃqP¬|¨˜|Õ¢…Ö@qï¸_¢ÕÝ÷i„¿õåp×ó@±ñ~*qçï«÷ |å¶Nëßèy÷è¹ô>PŸ +ó7»6èÓv‚³Œê¯gÊšKçë_ªÛ/ûµþh¾\ŠÞ-Žˆ•™‡{ôïùH6ÇC÷íŒ?HìŠs-¸W/¯-š³ @À¤Çrƒ_/¤ ãKk‚‘‚2 jšîèæwFRƒšçœ²Y ª* +Áܼ_ÛÒˆ¤\deüt¡ ]è < ê 솋˜¸_í!y0½m´gœ›b‹?µÞÊßÿ^ï•ó0ê9¤cÊוof! éß,#µ$fe"¸æávÍ_d*í#àÃà\¯Íä€ß‹Vði&cü-8Ñ!èÿ;¨ë±Ô9x<›8Ë<*:lClÔô§Àyœ¼-ôCŠ÷Âi‰N 3¾ÂÏÂÅBåÂM®S¶‚OQÂÁd* += +@éQmËdTêBgAà¸õ Ä·.Üú0 +nÒß}ÄüÀ_‚{PªU@/¸÷@u?¦ ‹wü~ìËœ`}°]¸+÷{5¸.G5gtföxiæìùúû@¦n7è* ¾ñž”“#Ò>?4펿å߆ffɘË&©1£`g6Úƒ)f'fZ7 ú+p‡¸–Óp Æ£ c€_Ô“×á´\O¡8mîûçZ†/™å,ò ´géƒOà4}Ïk[nï‹ßU¸ðÌ1éÐãûºŒÛwÊÛ, Bþô¿~i©o ^÷âYú{Bÿfmþóâ÷Gá¬o²Pæ²"k&ôï]`0¥-à!1¦±‚A›ŠÇê·«‡/á¤4@œ€gú + ·Xÿú›ÿ|Û¾û6”}˜×¸‚4s€"§~ÿÜwïô$ê³»ëÄ8§\)‘.u|ºpëÜÝíÂÒ¡Óp§©³è2nßF¨ƒöÔY¢:[Ÿç?ô~I¤Üµ ÷ïÞ…Vð!„×à» QxÚ=ŠÎͯ„1¨wƒÎhî¯.ò0¡«ž`êCT…Á=öp Ö€‡Ë²ÐžÚ÷W¬!x ž2iÙƒ¡ðPÙ›Àñ{ÖónœóóðÛôOèߪãoôÏ—ÿnä¤>ÆA˜Ýéy¨ïG1¡{$ä§ÀŽL nK½Ô `¸á[ ªŒO¦&ôÀžw_ÂI" Aæe¢¸œíý>ð;ƒ 1‹…ôÞ2V+‘»÷.Qÿð:'«LlüÂᣠ+w};87ŸsýHœCʈíŽÿ)p–¢ùzjœ¢ê7`€/àÄߦ^t:_ ò-ô"¨ÈK~®3&îÚ¯¿7".ËCôžâ$•Ƨ S¯kñÊÆÅ¾¹`¸ ×g–.Liý—µ +0ÍüåpûÛDŶý$Z»AÅ?ø3¸8!?ð' áü!HhB°Å'سðŸ`hÏlf&Ý]àþÅ<ô‚ÌɈ¾ +¯š–õ 8Î÷GÚÿ4œÖ¥Áwõïí ±% + @¦ä©ˆ•m:]+Áƒã5plîû 4×Îø_÷Á• ÔªTb| ÓíÙÄÆŒÁO¼ÇÏ¡{R \ §„烙àF¶i2”+/ë1¦¤ðƒ›ƒ¸ØÍ`œÉI ªŒO¦>M$ï†S8*èä}èà‰a£–ëSÖ*So§ÒÜ +Pt‡šj唇"­ÿ²V} Ùƒf;Þ0ÿdw‚W+@«¥¸n‰Ñ¢‚r~— ž‡Ÿ> +ÿét+Èø¼œã S3îËûs˜‡màz‚Ó·:¤ùíy~ýhßÖÄ¿ŠwÏA­w H4ÍÚêš¶÷,È|I¯ƒnôÿŽ Û2÷wGòí?À}ã]6_iâ½àzk’*Uýè§k%[üCBzëp‹/âX#‡ôïE¤‹ÃžSþXˆV\ ŽÓ>?§Õ…[v‚ ¾S À—ÅI¾1½Šë°£™u]7¢¢zcWRí¦ù¡¢AÑxLö{Ø}qhü7DáNT“Þí†SX6…º_*š~Ñû,<®mÙ„Î^/ý¸÷­ ˆ‰ãσëi#Òöa;ÁZ9‰É>}¿›Ÿ’¸E9B¼$ø_ø[ð${/\ØSˆ"ƒ•ltÕ2îÊ?ÓüFàÿ¾DÞ"X „w‚4*v­WuüŽÝ_ƒLæ,8F¬eܪ2÷jÞÐHLÉ.¦Ø…¼o€pfV ¾SHÌï9·}ð+šÙà|pÁm@ù˜eáV?aå‰Pm£ž +˜ž@ªÚ EÞŠ!FÒMOmKÁõÖnLGÑl{~N?_¯¨u* ÀÍä^„Ç£h¼Ú}_€ßúà~“Ÿ‡¢÷E[KEëÌ÷~ ØÏÐ^¶Î% ÛÑúæá#4û ¯×ü‹b92+‚¼Âßuð:#Õ +àc´çì::£?*û¯J¤mgü~ËѾTõh§Ÿ'$ØIfybú!T¿˜¯õý;Âf}f6ø 8iab»RáG ×™ýRNa©V 7ú@íæªõdÃLÙJõg[Gg÷>v.ÀJYe#,EŒ¿U ‰ùRêíT€46EãÕîû"Ø0Nò½/EÃRŠý9xRÎÃi8‘±‹ˆº÷ß<xny.©äZ‚?æçÔ¿ñó÷ÑžÅÍ3š˜>Ö—6¤Ø÷z•ñ1¬‰È +õÇü^$Í yCÐc ¡Ý£:6¡±Ï¾/J›Rža]ÓçHç.v±‹]ìâM„Y À4Ó¦_ +žÖ"Kcœ/ ¤ÿ1¨4ø(Èå € bíeÇÇ`Å'¬ ðdò(¼vä>©…~¦éþÕœst¡ ]èBn0à,xožõ\4qmůÀ{¦?O‚só냟™¦˜vs»¢Ú<øuiWƒÛüƒ°éß÷î#¡ˆ`gß§÷.t¡ ·.˜ÇÒ,¦x,ML· ÀaOEnCVTí¤Tlj …F,žÊ(û倧 +ÊFzˆâqpÎIÊ|öxŒgó)h:éS<µø=߀1»ÀÓì ‘5üËh4j©Ša÷€„·÷Ý=p¦.÷¢\D®³ Óð˜–ásߨ‰ñéBºð킲wÀ{®"xæ¡°‹¬®”¡ÏV¼ +< *}›ý½)RédMìDü°ƒÙ 1œMûVÒÍ„3)|ßH¹Ï¢¼çÁø¼AúæóPÇìPʼ‰1vŒø%h_¹$ÈûÁŽ—!p/i#V&¦ßJòa*«À=àdî5™7•È»´™Üªeø;1>]ðƒm¢U£¶sê)›¯iœv'ë 1¥1è/‘o*Æa$\Y|Ü`S Ì)l*×CY‚»4˲ÀiCO«Ëáü½/Dq°µgÀkØÚ¶c`ðä÷ék DñfVXöÁPñõ^ðJzÂŒÄ`?'oGg¬¹hŽ1rZfNçV™­û¬tÞçûýÿ8gFY° sn´BoZ•V¨—È¿B¨Ðø`b=µŠíì×¼Y웤|ëEäˆöi‘P tÅ$¶s¯ˆœ‘Þã1¨í:’˜o*ÆaDuy_\‘%uÍ*hÚ"%YëÏ¡¢jJªŽC]û1’ù¿IBDމHOB{F% ãhÏ3ú~TD^Îéc"rXüßâx  câWÒnDÚßè@ú1)§ì áºùT8ƒ‰y^×6\*°Ç¾‰sšÖÚöf¤oiÚšbL1~4“6eÍ¥û«šv¡:”=iô‚§¹Ú¿óh÷måż¢µ#Nœêv” ä17'¼ˆø©Òî³ÌMsAx\müïÊå1”X¾—@'/û@ÛÜz¦HÊžÎJÔ΂¦€=à¸Æ <Í Òª ¡Á(Øç‰~‰ðý¤o†´Þ¢;ÍŸ¡9€Éíˆ;9ÊŸÂl=\O§©n»-ß~ð4<î¾_Oœ‡@/¤)ðZ¿Ã·@Êüúf—‚f—?ý#XDÔïÃ…›ÍBÙ kë2í=¤h¿}Ñ2˦¸Ç<¸Ù“vLË4½­H›ƒ¿Ó°yÒ?~ÇóÁïn»æ¿À?Ulk;° ìë)p~ ÷Áÿ½ýlë¤P› +ø鎑v‚Äy)8?ýps°qï²ßhaR®¦£}ÑsªáâÊLU•~€ö”ºÊæ}þÜý Ñ€?&Áàâì¤ÂáE-Ów’zÜÜWjÛ V‚‹g+â„n9H¨®¸ à}oh¾þH¾<|2¨UÌ:Ë‚ùÚN‰T™‡S ‘.Ú—‚LÀp£} ÅÌÆÃ ßÎÙĿř s÷(¸áí™Î…¸yÝ6ÇÌ€³ßögà7òâW!ùýàBB€sƒkdØgGÒç¯È™û}ðïW¶>Žƒßôÿ…cЊÚ6ð+pm¼®-‹Ÿ2°hü§`p›N(nO¼ `½çùB°oÆœ}z„¼†Îxð¼ ÅÜ=…8€ræuPË1qjâ§—ÐÆt³æ}Á¼ט詻ê5¨h>Q!ïiЬA³­èpsX‰jwŽoÂçµ9𼮃›òh¶èxžp’9x \+Gá´- +Õ:”ó¿>~œ)®“Û;ýï@óýt* ¡¸6.ÇѬ~áͶæy ô!1.Lp¶€óv?xÚÿ[pÞ€òw¸“ gÁïam$MY"[5O•ùÉëžü§öe~×â¶¶²JÆpÞ¨õÇ ƒ¶]à:Y (7+3 p^ìy> œß,|®ÃN 3XZWCZTÚVì9Ê•p§ª:Hô6òôÊ»5ß}p§¾/Á9f×oâ&Ã[ƒtBº \ôO‚'ßýð›OdÁ”Ï,ï¯ÀØÎ÷k»cˆ­`_·ƒý^öyª‹ æÃEËœÀóØ5#ó´¬Ýˆß¿¾~dO€Ñªî€ó–˜Êe÷!0gi;:­ˆ•‡M`_7–Ì× ž4ì¾=ÖÎü¸ü.2݆@ž-àz6ù‰¶q1üDi$\;Ð)ìgZÎÒHû&Ð*E‹¤¯šÇ`#x’ü1âÒ¤²D¶jž*ó3JýÎÀõßöŸÔê× “ñ$ª·Φ¾ +ã9ðß ó>R·N@‘·,܃©3ÛÞ ~w!ÌàNèßTeÐINë,zø­€‹© +}¸ü6¢z·­ÏÄ9Ï&–óy.ïb¤s·yw½Ÿ£x]7€@fà! i¹Þ(øÜÌ–‚’œ•ú<¦‡Pç~ØÏéúÿ¸9ŽÁDî·…4L˜ ^Yl‰ÅPBž‰Üï}ˆ—Fó¸|n¶>îH¬6äòпóÑzÏlÁ¦|¡^'ï›O¡¯È¾»Jž²0î KÑzJ©²yªÌÀM~>øí÷ùˆKKçbÈpÜ2Ò/ã®üup­ìɤ[ ö¡ÞY³¶îf%²í5ú.Ô±A \çžôŸ¡õ@4çCÆeÝ¿›îÈ—àBø›Ø +Ò³˜=ÁN)ä%3¼‚f“Šip拇'@Qã`Çw‚›k^Ó< ™"½d]=f„³µ”q¸p§Á/šŒ¼UàwàG¿\|O¢ý²“fžõ,H$"ZrHÿ~g޶ œû‹(æÖÍÜé~¨.EüÔÚ Ø®Ó2wÿùv.D˜HnñI±Bã2¤óÖ6ãn¯¼W×ySÊ"Mû*yÊÂNh¾nöCpB;•§Êü ‚Ìû&ð^ü÷`ÿ‹×ü3¸^>‰ÉhŽt(ë®|'œiêF ½î×8T1ë+À¾=J #‰u IDATg‚L\öëá™Lú]‚«¸7æûnÁ»áCÓç`<•ÛÐ9o¥!Ë̃S :gwkö´ˆ/ðApÃÞ¡é/êß"yzÁI¹\€Ç5ýð#Ù‡´;”•p'é+H÷FØnÞª`crQÞŒ`Ê€ Á…\d¯mwàÓÀñv8ñ—Å`”ßÂÅn aÅJ“¶ø í#Ý{Ï;ý—!\ùv~2¡vÚ¸ yÞÝ ¿Æ¹=Ëo61Fã88Æyvìkþþóf‡*D¶Jž*ócLA¾Ü"æÄà7pL@L¢ ”uWþ+ÿÀ ÀJÿ´HèĵÛçpŒá8Ÿ §Ñ™`g[Azõ8Çáh–žÕw›réC¦¬eÇàžó5Ìò©d*@9÷õUá¯@†ãÈ2[áÄ*?E4?©™[„Äø¹îÛAÎr·þâ§8㾯„æï@Ó§¿7²Ûµ]1˜ ¸Ýþ nì1ŸÍÈÛ˜™MY‘iLüÔ‰ôY0e@€‹~{AúSàúYn„˵ #@e|†~°ÓÖ°òò¼[®)Ÿ8Ü`#د*šÿÖÎ{nç‡à7"̾àQmÛ:Ðui/hSÎúœ£Å &|/x ³ ü‹¾£› ªÙ*yªÌÏi8}£ap¬Ÿ‚-æË4'\¦cЩûÿïš»ò¯üœnÇ] Òë÷à÷•rZßÝ \Kÿ§ôUÆóQpÍüdòŠÌ—ׂ{Ô:Ç–u 8¨._ô¸ Ot¹xBèôuý¿&"Dä½HžyZï÷‡õýÜH›5Íýý˜þ~:¡ÍUòŽiš˜+ÎzBÝ’8®†ïÝXfŸÕ"å”M›ŸÍ‰éÍmfCèFuºÐõëe¡K×Ô¾Bè.õ¤¢Ïuê€Ðõæ9¡KÚ¡;×QmÃ+rí½H« Ó}^ä«•l'Ĺ]}>7.WEdv ÏÃ:n—3åøÚ-ûmi†Ë"òTÁXäûÃ*yl\!\£‰ùƇ…nŸçn54UòT™ŸÂ97xOè9VÏX&ý%á¾r7<ªéj‰cÕÅ.–FûgDuO¢q)&F(ÆõïóZÖAý] ä[ ïGïú~$ð¾GHäÎdžõ 7½#m®šwLÛä{WŒc%a\³¸^ó<'ÜØffÆ×WNÙôyìnP"iÄ{XÈð½!ÜÜ NHq<€ç ¡¿ü«™ú>Õ>‡ˆñ¨¦» d²ïF"õY¾Z…vÚ||š—Eýï2¿s¥\<€~á79;2Ù>…À××*yjâ¾ñeþžóX…ÈVÉSu~ºØÅ[íŸÙBð|Ï 7ÙXA ‰ƒO²!§->a¾¨ïGï—òÛ)(Ľ·“wLßûÞÕõ]½`¼ éÆÒö “,¼!a­lzß|^–ðÜå±_Ò7ö.v±‹]ìâ ÆÛDà–¹²üëÌ Á0xG¶ aw•} âƒùpÏ»‰Ý§ïîß4ï x×/š•Oú4ïPʧ˜b~ëCàs­ÛnÞ·Áûí»Ðª½ÿ 8V‹Aß1Tóío¦.G=õw"}ºÐ….tá;¦ø5¨ðµtnb +Dæ&¦þ(Hà·ø ZMƒv n^·Ißï5"§ƒ û@MÊ-ðÿA-Ó¢‘åñ”¶Íçý«¼í*Ÿ܆j}Nƒ;R‰yÙô]èB¾½°t| lsR/k³Ü  ÷ƒ‰é—•L?Yeô +œ¯ƒ¾ HS_¯i}° SV¡âX.•‘bb„#Y>CËz'RÆzi¾7á½î+R¬Xµ,ð~TßûÚßNÞªÊg]ìb»á^;.ÔUHÑíX%¼–h³^Sz*쎊ÈËât·R•}ó8C¸¯NL?]¨o±Z¨ŸaŠÂ"ÔÉzUÓ¤–1*qˆ•sLÓÉŒC-¡c‘²ëúîS-s^…1‰_ÕÚûš8Ý®#Bú³9Ó¾h_|û…Š4©ZÛF;ñaLÞ#Ï–â㘇êŽ1íäµ÷e•ϺX „ [Cø¡·» B¸é\•êʉë…ÊeýÚž#’¾ùA¸N.7Í×µœ½Zn6Ýfy3Rβ6ûá+P¸yÔsÏéóÁ‚2g7¡câ6ñ^IÛT—é<çž/ꯜn¨G„D"¦ãÓ‰ñét9†¯÷–#B…é¢ô !¤ŒaG´Œw¤uꮑð¡(„½™ùHͳWÓCÒÉBK,;`Åæ×Ê€8`ŽQCeÔ2õgËIç1Më{W×wõ’c™E‘bà‚8ÅÕ :‰£ÃÒªèÜ„XÌ]ì"¤ó›d¿8‹‚cÂô˜Ûm§Ü²§Ñ78(as®<®Ö=š¾®õù¤3„ó}"P®•aïF+ŽO¿pmž®³zZ!Åà1Më{g}«'´a@¸Æ÷j™†¢c0&­ˆcØÌœtLš™$F®ÓÁ€ºpãàaðî§Ô£¸€ô@ ÛåUàÒËú»–˜ßôEրʞ*w¾ŒfyëÁ莗Ál1¸tÀñ(€?Q= Ïbá¡cÐ êšì=ÅU…ÏA'$÷€ú+‰tïi@ý–ð ’í}vœC! ÄÒ¿Ùöå'pn¥Ë†šî$Ì€wÿT–ÝêÚXœ]H»Bóus~: +û\Cήl|Ú™g+g7Ø—M ’ó0öÂ68Ÿï©áÎkÞÏAO…÷"=RãN4»iÏßž.VÄÑ@Ù[¢(2á øý¾©¿¿õŒLÁ{5øý‡t +®kúµàzØhËkÚfŸ¢¶•Q%nL¾€sÿÜ·g‘!O Øý};0[ëÙ€ò!MíYСÑ_ø_ nÚgàš-ö¢[’cêâÍ…ãÒ,&zK(R“4‘Ü\q÷G!H±‡ÎŠãú„üs“’(žž_ÖrËÜ7ÚV‘È·ËžV:5íûs¹¾‰ð´pBxÂìѱz+PNþñŸžžgY“ÎIöêûì ó°ð„ebȇ5M‘“&kïIÍ_tíP4>V®¯í#þf˱5»Ä“f®p‡®jlܲ÷ÀÖžlÖŽO }wP8göÍ6réjç6×’ùÝ+®y7hº¹Ý2A΃'¥»Jäè7®ö3Ð]îR}wLŸ_ð>â}Ü àš¥" Pê’M÷>(ýô”3¤³þdz>À·®©Í2&•ÍwzIËÚŽÎ…šN…>pÍÝ Ú³ûÑl~járc1 f€s¾åƒ uê„x\3O‚_ÜŽß‚¥Gá—˜í׿ 3Ϲ?Ï>»‚¸ËìGÁ“^jÌl¿ÉÏ´ûõùEý?$•xÎ5®¾ÒwÁ§p§Ý˜äþ‘{#iò0ê!ª?só{À¿Â¹£EA­ +óÀ}z;ŠMÆ}pømùÜ [4×{Q mË2 ¸p!h€b‘Pàƒ·Á0Ù yÜó~ ñ‰«é»z Þš¶ï€7àïü yÄ„vÄõ1ø\³Plö· $ú+Áˆ}_Á?€,¾7<3w }±ÍÖâKl7š_êóéAbüVîùqðCÌÎeàZXh—µy(ƒ‚„u7(zü«ùš~hŠš‡ëàÆwü°|ÄÝ" ÞŽ™hYà™,#c›ÎYpœ®€âÑQncøî*`+(Òìd¨éó5ÎO–™±@FÙx_éï"Fn'œþ‡Ào%‹¾½e²À‚º¼IcïzÞÇÅÞõ ÐýkW AÂSä?¾Ð~ »A†Ââ¾Åq_,°T¬GÁõ×kP2 eBÖ[¤Î,†˜¥AŽÌŽ”÷ðJaXË‚]É”‰‘’_ *‹1 +›  5pl¹ŠXü󸻿<؆ëôY¤…ýôœgÁ hš™•EàFÞiŽ.Ò´;ð·Á»î<Ãô ølO;µ Ok™28Y†aͧÜÏg¤zÁSð)mK ~wïYÖžõ+p†ß@ ?ø|XÏûÀ5÷QæÙ°Ÿ¡ <™ ¬OŠÿ„ º±Üè~žâ–‚Ä)$9ù +î>r7Zï|-¾÷r”qJëÈnŒv +:2p»õw•˜ì¿×ÔJ¤…šþ­›ñýú7‰p>Âà#èÆìäË¿ÅwÞï­—£ c”ŪáS'Ðúî/Èc§ÕÏ"i¬?C÷ûA"ÒÇl×úà÷8?¡-‚»´î>@ú4_6Ø’ïPfL_ˆøLdÚ[e‚%• Q}/¸–ŠèÌø×«OÊaýŠ­sËïÓa™žÿ"âÄÝŒh”Acpapc'ôÁïY„¥À…å;Ú†‹‚w Õb‹O7èµàFÿ\Üv€ÙV}~ºdÙ©å@Ÿ„‹¢·­£Œ¸~¸±ïÑôëÀž-žl¬mCcÀ&<åÝ nÄ©±ÈͱќÄôY0f/%íCàÚÈ3 ÿŠVñëup\³§¨< xŽq’LÙy"òØÏû†OÀïd>8v:yœÏ˜ù5ÈÜ<‚æ“ǸõnLBpóžjú¸‰¬ÇðAð9nŒóà¥Ä6JÛ¤³úWà>0 NiÓ¤+E„g;œòãqPñ/‹ÿV?eNˆyˆEÖ´~‡NdïjþûÁ5þÈx~2óÁïqb[ÚÛ³}êͽóOÑÕÊðêCLÓ'àšYˆ°B¯9ŽKݣʂEÜ|áýc¸Wú»Ùö9„³g±=ï¸^ñ¼[®c}7Zàs‚TÇï +B/°nCR ‰=vÂ…`Ìà °ó;c•NØ]ÑÙÜ_[˜Ào'ükd9ÐÿO˜+Á±ÊKʈë7‚ æïÁÓåsf\²iâÞ 2¦až‡²wé&¦.#º30.6%,é,‹³`fHÔ¸”¼ i†à6ü­h= .L¨Ó»ûµ¬{Àµuœë" …g5íQ­s'œD­WËßêžË„šÞ +Ž÷6ðDò.ø}<Îõ!8‰Zì»ùìÓB4÷;H Ì¢Á¤5y Žƒ}y­¾b‘4Â6ñchïB§­}pwþæÔž/FÚýìô˜ÿŽm?(úÖ>ûµôZW¿ XR÷!š¿7û?{8°Ógìô¾l¿ïð3ä΢º´§¾ÒºïÇý1¸õЭû.„-¶ƒs¶dj ý{<ˆîÌ!øüî)ÃZÆ +ð[;‹øw²AÛ¶dà-Ìô +‘¼†”ÃÀFD«1‹ýšÎ§Åý´¾+ÒÖ“VíãØó¼–«O»Ò4KWèïEú{X¨•~Y:g£^V õ Öß'NÛ×cž¼Ãúî9Ï» ž<ƒBoZ´ß!W‘â O†¦[eüêš·žöŒ0SÙ²G"}Í=ÑçO‰ßiHÌ™ÙÔ×…ZÊæ½òiá<]jŒ§´}X¨AžÕä7U<‡eQ¤\ ©ÒqÐ"šºu-P†i‡?Ÿ+㘎Ë*qþо£ýÝÐß«ék‘öøÊõ¥Ñw£¼f‘qIüNUìýe‰;©:(.¼¹õÏÖÓ1‰Ï—C¶ý®øi}>WŸ‰¸ðæYÓwö{®ð{ËÂÛRl!ccù´p?{_ûvAøíÌÕ±ˆõÇð-q¾.µîâÖŒ¯eç·jÔû`¯Ä}4,j:Ÿ/Å/HÐÊáj.ÿ‰‚z g‹[SY8"aMè[d)ƒvFüY¬Œ"ÇcÒyÀê?'$XçÄm6{Å™é˜iOÈ|Â÷‘÷Kœ0Œj»j÷ÕðAq¦hY|Nß7‹ƒÂu4Wªí‘½Â5½@ªy:íÎãpÙú}‹,%ãû&àòEòûžgL-ÒÉ!Qx]¸÷ +="]ðâ8¶ËâˆÒ 4sRYú×3Ï‹Ÿ`ŽêûZ ]«ô}Ýón®¶ïD _35ožAèùiÌÓV_Ú<>¦i÷J334]Ü)À8T‘ô°Ày¬GúžÇ×…ó2OÇù=óE:¯ +çožðC9,q—ÎãŠÃÚÇ:ÖÙ>Ù|Înâ¾ØžV.Ió7¤u½¾'a¯|!×ö¤0n)(2õ ´Ï¯Š#jW¥54µxòêó‘̳éâBtçËlHá²r}mÑw£e44ݫµÔ#ŽqO99[=c¹çcž>—ÁqîÓ»nÈ»X +³?BHÉ8&aþi›ù}Ï«b¯–g®ÏO~=â\”hßO +‰Áƒ:Ë„Cô™Ð^÷Ô3ªéjvÔõ}=÷ Uú³JËöy!íD»ÖÃojX`P¨XÒÂ|C߇D͇¥8dë˜Lî€ÝçöìžüˆPdn&[s5ýIýû¾ö¯WÿϾó™8Žj¹µÌ³™úÜü¬-íˆë»ØÅ.ÞÚø–pŸ{Qšõ)ú„úE¾Ð¯ë…ú)óÄ:'éÿë…z<ýâBY— ‡=.éyƵ®qiÕ›ÉcÕÐÚ¯¯)H±F]Ë>¬ý~FÛ–¾¼LñªýÙœ·Ô9ImWCt5ÿ`ºzLü‹k†ZlRG´ã#žwýB"y0Р1¡bWMüÚö5-»^Ðá™f`úµmùò{¤Ùî9‹>›íü¢÷Á¡¦pvÔiE:¯¸u+£mzKÄ}Pã_{ín”Y\!ÅÄziOñ«.ŽénÒõ„ô¾oc³„#ÒÅÚ¹@ß…”){„–öÍŽ 7Þ"݉›Î–—÷µ ¡ïo•ö¡!$¢«$¹îÕñ±þѱLi{¯ðaqØÇ%lEbø©8ûwS(ΚPú€†p£·hš«Å­ïžô¾¹(K”æ -„.eòÕ òô Ië8Œ%Ît¼S£>Žè8÷ùKW =§Ø—«¯(j¡ÍñI‹®Zµ?¶öJº”2íjH"`¦pgÄo[ݧT«ðá‚Î?¾eÞyÞ×ô]½ädtñÆàúÀ<Ö%LÈ Âû²ð´´JÜú1–Ç·Q>V¢Ý©œµµ§ÊؘÆAá æEq›tÈär†¾Ï;…ª‰s¨R¶u}W¼7¼1-ÿeq–¡ñnfç„›õˆ¤kî¿¥eÑqx^ܾ/þ½ÇÖÙ1q>.h[cõš„O´½£B&ê²¶½È–ý½Ì¸¯Òß"q&À‹W´ˆÛOŠŸ07ô}6Do¿p–qœ•J”h¿Ž ¿5›ï"fK­§ŠM| +H³½ü ”·*Þùݰ>M…‰e™ºÊ¤mH"ÐÅ›ít;Wg~U¸UµZ¸8Š<7Bœ7źpÊ]6„>ªÏk y³›ipSúTü ßòø6ʘº,–á¬Çý+Â~qs—}nýË:‹Éã^!ƒžíÿ‹Z^èÔkg]ßÕ=ï†õÝ[¹ç}âNU¾2_·>ÇS<$šo +Ÿ©­1L¾²álá<çá=ñ#Ö÷|™#úÞ'²Aq®ƒ>¸ïF80Ѹˆz/#Ì%Ëá¡‚±.ò¤¿´Ú˜È=¿*¤Þ¼†Ø·{@?îæü p.oGñ<–‹ZÏ ¹ç_k01ÐàŸÀ5uTTýž>+ Œâó¿´Ü E\*íZ´Ò…à÷²T\ö•9¤ó>øÿìwÌ»Å(Ȧ¹i‰­OƒûÁ9>®é—¢9ÚeΣ5„vJ¼ Yî2€½‡Á­Šöi»žÇ}?\&ò1p¬kþ‡Àñ=€pLúEZÏEpŽfßÄ„«äÉCŸ¶5¦J=ùðãf·aEÅvû³ôùÿ(Š#»¶BI®©‹7BX•{Þ+ä´¯Jy)çç?tœÅáÐÓBn¿H +`m®åpsæy,¯ï„Y×¼#<ãžçc’vRZ-Î+߸£îræ¾+„1M;Á'PxòË^µh]>4¨GÚé+³ÉBs•— ÍÅÃÚ–ÐIeLÂR3_?f +×èn»_üó`ýxGÊÝ×V]ŸÙq0 ЫRì<Í7–©ëÚ¤* §Âoø’øO¦#R ¾zÎ%Y)…]Y5yN% Ù<=Ú×ÐÝ|•ú[Ø®‰5úw“¾ßÈ”7µ|Ýáv‚û.²x +œûmH»rÈÿŒ¤ûâNÈæÀrw>ø ÿ6¡-Y¸®§ÇAï.ý;HüŠö½Û=if!¼>{Áq¸ܼ?Ñzîð(F/ú~Ë€æ=H'Ì‚ë~!x8x<¤dC(çaZ&o.ÂÏÔ éßuh ËýüW`Uò‡1p^÷ ØQ]ÕzbáÇ;YÏ=àpd¦GêˆCN4rN(šzK¨Ð`QõDâæW&f:(Q + RÂBúò^JÈÛÐ|yå';‰›hÕ4]=E\âÉ7Z.Y³íãU‰´ñµk‰´†4ˆµý1á¼\*U¥hΚ²Ó2Ï\ÎÛÃâ¡64oþù¨>¯ɼÍî IDATôW„"²™:vT)t]‘£,Ž Ç}$P§)»åµï÷êóÁX Ð1—°¸;„u-Ó§çk[JDÇX;­¾zÉvZ œ¼EB~.LÜ£bP8Ïë…kÏ®˜L”ê C>.ñuÿfÁû|ýëµÍ1 ñ†¶ç„¸`S« +úº@ó¼*Íß»¹Pñ‹Šm,}ó:i㈖Yä=Ègs+âÖþ þï 4fËF=ïÚny^XîZ‡òLÎÉeñ+$ú®0«Ô3ƒlñNÔÓÐ<ú’_I4$Á +ÀLXò °_¸È¯”ý³ƒi›õXAãÆ…ZÙ¼ á—æAß,î®°QP·M@=e°2XÓ|£é|‹­&üøŸÒ2^Õ¿EvÕÙvÔ13"`Y´{÷äXÑŠ=B%onô¢–ÓpmhšüóQ}¾BÂkÊú›ÝEû +™™£,ŽeòzÞ軺gÌ.KØœÉ4Î}ŒÔÓúη¡?-ñ{;~s±yY¦éR«¯Ë„k.ÖÎQϘZ,VxCƒ{Iø­1œæKÄ1¸ç„ºG´<ßz3S¾>ÊñG)}NZuj Í1dYÑ®µ7¥ô3ôΘú2ælcß#«fC£yð•eËæž›Ahž¿¹x «ä1&ôqÌš…”™Q–­§¦ã“glÿªw¨ž†4Ï› cô|žoЮúAQØ>´Þ•}Š4nGø^f[fïÌv XKÕòæïÛRòµmEé= ˆm%(jL»§¹MÕ9ø¡]Ûyÿ\Ñß©p «ÝŽáv-c[ ý +ðžô]PìWFTzœ¥hK?ŠÓbšËE°Åýþ[P¶\+ àó@Ú‚ç>غFþ‘çÝ›çïéLDZ‹&æ}ÈóΞù\G/ïý=ï†õoìÎpmMYëùvö‚"èìøûDÖk;}Ì÷é߉H½whûïËCëÓàIp®gø#mïgà=çðºÊ·Þöè_Ÿ¸u¦æ=ày·Ü?ú=ïÌjäKÏ»,üÍëóûˆëÑdßõƒ.\‡Á¾í+È[>Çoqîù Âcp¾ï‡Ó/YZW„¾Ÿëšv>€çÁk¡é Žàôhò°\ 8wÁ5PçÅæù¸ÙÒp½/Eø:²l=§Áoa 8Ÿ½àµŽooh·?Yø9œ®Òp$Ý|.þsÜKèi'̆çÝH„×ê"ª¢¼ÆÕd½O­§™joM‹r†§Üno´ ]gk~g¾-äPC'Û|»–HsÌõK5Ûiý°c,ë4ÃNvj5qlYñv—i|– võd×@>,£µmyBï{¥Õ+˜pEÂstNǤ¦Ïl¼CZò^øp&_MÇÄœ®Ä$BšºÈ‰I¶/ùv.çåí„øOÏ&¥w}R®!». Ùy7¤YÄle…NÜ' ›'Íߨøa,Ò7Ö2yCnƋֵÁh Í3úþy¡$kº¸(¤¡ú†µ¼²–ëÅyEáº*²ÏXšÃrÛI=&¥¬’Â55"üÎR,¦ÊÖ³@šÃ¿'ÎÒ¤Þ¡zÒJŸÌíòñ_%/Ðúë’Û³íŸ^ ßÚ‚ñT#f¾»¡sÿ(,¯OúiAÞì@lnÞÇÄyC µ7‹ïKë=˜o€óXÓòG Ò…ÐÄñf†bQL,œo—¹.ž-ÅúƒâîŒE¸ÀÞn–!g‹ ü¦¤9; aðCñ­7’“ ½À³”Ç1)ÞœøÔ…ßÃ[Ú†O%îÄf‘8=™,¼#qF«ÈwNâ^ Ç5ÝU)çüdD¸Öó`Ž[B÷ˆÏˆËgá¤Ä™”†´~GoKØü µœ¯ë¤pÓªK³ûÜ<K3³Í§Õþ½)᫟q× +£¬Gê á°–WÅkÞ"q{Œy¨B˜»øÀÔ„F |¶žòžÖŒi‹”Ê;7!oCÜSnY…@‘0Ð'Ž‹Ï+15Ĺ0 qÀ5Í’˜¼/á{»/Ë2}:Gyòý­Š¹|Sš}|¿¯ã#Xv‚{PÛêSÆJŧ„›uŒX íI²¸HŠ7¼>»{¾,Žs¾*Å Ä pÍÌ•r›ù€Ö³@Ò˜š‡kÇ"ÛN;õפøôdùæIš©!á“Êa Ͻ1¶#ž>ÎŒäËÎãÜãiXÓ:Sêèôúìbo¦$ʺ' D;=­n*ÃâN¦}]%ïX¤] iÞ`–Hó‰D„§šOÞ1}ÿ¦´~ì qPÔ]Ó÷!å–3ÏšòVž€šÏõ˜Hu<ð® +ö‰ùfqb+ßXšÕ‚"CÁ–Rp‰T'`]ìb»ØÅàm"’U xT¸ù½þw–‚öÐÿP0èqfží•BLÑn%·¾LÞS;YihžÒW¶c·åÞÍðBŽ>6ƒ +P÷!¬pö)¨ t/šmlgh»wøO¾wwü±À?xž/¿Ê»{LƒaPò“Hš·@EÐ@e§.t¡ ]èÂ- +yG@k@­å# ïè³ ãZ„‰?@ç#¨… Æï߀ÚêûAì#þEycÓø†Öy­žój‡ˆÿ ¨ü$ÂÄ ¡¤™ ææ8ÍWŸÆó ¨‘û.Z㠌ãðk]ÿ“Güàˆ€órºÄ¿ ]èoãN"ìë 3±7Aga“à€Ñ„ôÒt 4gpqçdÙôΤ/[Çzï– M]]P>@‹­« uH*ŒÃYÄÀÆÕAN$0[(’7 ó«Ã]„ãR=ZU;y!ß§Øçq³Ä}œöèXåò\p˜TÓÈÍ;Õ1Õ÷Ý»Å.vñ»…+„{ɃLozeöÀ>ñûfñá+Bý­#E qaº?%¦ÛÒŸ“Ö°Þ+"õ¼%T“´hž–~obú2u ˆ ï-ŽS‘E³* +ÑŽKÚ•jCr×È¡„ýBÂo¦ )…‡6ÖF^ƒzɼ½Bâ_ä\LJ+¤œòPð>|DŠÃ>“¸×?ób˜ºö»ˆë… ýâ>²Ðc!”—ˆÓ+—âàeë™®ióÖ³…ë?fúf¦jf¢uAü&ky,³Q·Sa +Á©2â<è•qPU¶meó 7z³ˆÍ»ã[vãOM_×¶”—T¢>"$èÂýï’„MëÚŽ,ñ¶0Ý>G<–ÞÖ;ä¸ÇæÌB+§0=eÓWÉ3]ÒÌ)³^bSÚÑ'd¦L'ë‚pÿ‰1 Id²¸¨Äàäña©nnb¦?u)&¬¾A²»xó`•M³ gÝçVúy!¡1gEL@YÞ|JØ&×'$ÎÇ +òAÊŸ\ éu»õ@ʨçÄy©OgÃÍâüz”YCUNMEyzt\/iV‹ó6c檌oÙ?%½y5‰£yÜ,’äŽH:Q惒ù^ð¥m¿Á|ýÅ@,›>Ö®",›¾jž”yM™#K{Lçg•Y&<ìŒDò5¤ÐÅo†>Ôº„ìl–°þª'?Hu¢”ÂY7„ÝèmsOõcÊÁC(J¼$üßÔ1I±–({ª‘ôºz å TÙÑÙ|{%~Âk·m©yæ !˼XˆÖc“0¾5I¿fMI?"~¨”]†¨Ï~³v]|B UCÊÅ2(›>ô|<ð¼lû³ãúž8ꃒ–üAqO/Òl²>[( +ùI1“l»>7·±uÑÒ®¼`¾}0áñ2¨PsÀ\OÚC "æÊÜóé ‚èD Ž@wÑ@ךW@%ÊxtÉzhi’ +£XiÑ`Gæÿë bèÝH‹æX¦žÇÁ±=*s®…³¨‰Áç`ÿg!Íìq8 •߃–(ç'¡ƒåHýk!£wøÄ#kæó-Ǭ§ mÕ¶¥æ1÷¿C™g×A7²w¶¤v:¾#pQß®€ßÕ5ý=È3Wß]ÔôÇV*³Ðঈü’þ. += œ·KÚ–Ýð#½ åÖ ’øøí?Ž4e´ªð®b»P¥ýK@WÍ×@Eî{Áñ}!¡¾¤G@©p'¸ú¾…ÅàºÙåywÝó,]àÛ 5p£X ÁÅ ï!ø}¿ÿ\äyâý„þ}-R×KàDZ\¸Ï"®lP–(€qê™9`Q$ýy´†ÈµØ¡Í|Í¡9/€&3 +Úö9ø¡OM%Z>[Ïg HJ=¡€ã°ÍÄÊ+@ ìÏ@ëž½f'ä9œ/òX.‚ã~ôQžjÛx홄¶\;{Àoâ¸vòá¦2U»A&Á´¼{áÂ_ç¡jbƒ›òg Öz(ù!´ZmÐwžôe Ö' Õ•µu1Ë%*º ›¦¸´N: Z(-×ÖdÁ¿ n– +UÚ¿œ›åšç#ÿŽb_ÿ÷Ó{A‹¸TØð!åNðû +Y²¥CÈ㻈e’F¥ê‘ôë¥U,5[(ZÚ,qÁ²bö÷„÷±e|z›ŸzÓÝè*š¤(&ögêª%´oDx·jb¸ƒ×Y$Í~²gŠóÞçÓhè;ûÝ#¼·h“#‘~Ô2¸D("/èSM¨Ç`.~‹ôPªÔc^9Úÿš'æbwªòÜÌý±h{{5ý á:yìÌz-„8÷Ý>¥Á†pÎ +ç|†ðZK$My®¶ý„øõEjZV=÷¼Gâ"ßÙB1²é½Ä®=NŠ_¡Ô7oýÂoö„ðš§HÇ¥!å¯Ìk}ŽÒB匞—m¿Èók¬¿Â=á9 GGiõZ;¢Ï}V{¥YGb\Ú´0meÆ\¾‹»÷á¤í•´û¯²ZÌYLÕú­ª]\F!©_œ»Ø â\í†Æ­¡ce¿éø½#Å ±Œ‚Õ Öó¶8 ø«Â /¦hgáÍÒâYmd#2¹ÄÂö¤4ozv7ëóeocm1^×~Y=eÎiY¡>õè8Ÿê ¼-\µu¤ÔsFx³iÜà<7sÊ8çřB‹ÓËrå^’âp̓ڟ g¬Ê,š§Q_5}—Jà }ÍÆ–8,Õ/}¨œñÀó²íÑ4õıÉö÷uqëÎú•O/ÒºnÍc¬ï±>÷n\ÚdjÒÔbT\ãâ—™Úr™umØû‰©¢Å )¯õ[E»¸¬BÒZÏÓÂõ²„™Ž†Ž+Ä1¯HšP«qðŽ¸“ÒA¿Xðµ]ƒš÷LAû¦‚˜×´/¾À¢õœÉ¥™.dPbãQǘ\•Ö€Iyœ +bný‰o¬Ç…ÌHB¶§é»Z¸>këiÜúúÜsÛF;TÏHäݘ´F¶œÊ<·jBØ#dhE¸ß”Үδg,’Ï® bk1)ˇÏizßÁ¤,ó¡I}R’Ðø”Ͼ!\wÙ}n®¶'6þ©í‡Ø‘4z`í_š÷¿†Ö‘O?.Íûq¯Öw8R‡IA½*ÜçB´gºðÛhŸ`* Üú¬i@_FÖ€.ûJ¨TÕbÊký–Õ.6%3Ó¶=€¸’@å‘ý ÔyPƒ³H!i#¨˜óè&rEBÛV€Š:çAå¯×Àqô¹RÞƒfe‘á´ýCpT2³qö¹56¨iv£Yõº¶Õ§>¤סYÙN@…û»ß“fÜžÜ îÏ‚ +–!åßóà>™ºG¾ º>ïÕzLQøƒ”Ntvsÿ‚¶gTð»H_¥ýë@…¼×@«¨.¼H?ÎM +­Ú*^Î÷¤ `Ì’êcÿÀtê^pŸó)R×AåÆià÷é ÀM¥ˆ¤ ä¨ÍS–(‡sÕiUš» MÄœýLUž*¢ì² +I M?¢¸BœÓ‘wY¶žš¦´!6Ov÷_äyDŠ!Ÿg¦>Q𕯲âÂCJ[1NÜ÷.Ä)Û¸åOev%V/Q¿B|¢ç*õô%gsÏ…kÔw­1UynæþØÚI=Á ˆ;QÕ¤XØr“ –4ý§mËMß'îDÔ% v ªÃö—×…§Åá~è“Z8õì•ħ–.rîÍ˦‡¸kKÎõ ë”mvŒ²yÎHøÊC¤õjÛžûÚ³7SîI)ç@o\â×î3„RÊéùwù„£Ú€2bé!q\/.¬lLû¹Š¦ðTå)+ʆ”WHjè»ì3S2ªEÆ­l=1‘–)núêÖòÞÒüGôwèªgªˆ¹}€Ö_+·&$:>"Ûj!”LJ…kå)qšýõ„ü qp.2Uê1ïnÏ‹ó h÷È!½Ž©Ês3÷§ ë§+’‡QOú†”cê²%¾ +ÁêÕ±X é^ëR \¿%˜Ÿ|‘r÷ëy¬i¯”ÌW¤)<y¬íe($54OöY]ŸÕí®ª”5.dj²LƒmnïòÌÓ|¶\Ðß¾q1œ +bnø°¸"Í›|Ú*' Ëw2SÇ{¿Ëöå¯ ×YLc»j=ë…Àà„S‘çfïOWÓwõúŒ†TÓèbo(Ú?æz𠤻¤œ+ܨg‹³¯6Î<¦ZEÃz*òŒxÒå!”ÇWÞ˜ø’ž²êú¬èK•z œ2dvRzG8×1mQHü +!SAÌ»ØÅ.v±‹ÄÛU`¨6Tùq‚â@ź¼ûÖÝ g²ìÔzÖ +v_¹½‘y²Jf1w¾'ÜüV‹cŠO¥nˆ -/…ÙížxSb2ôHzü†½™vŽj{jè[jÚ†Tó›`ýä¯kêR|_; $¬ç$~BíOL!srkáA$î(,±~Ô´¼¢½}_ö{0Ò—†–9 aæ´WÒ]˜ÇÒ¦”3ªí©Þ¿¨ï}Ò¦Wõ]È¿J¶4}¯ðû¿¬ýŸ'$šeïÎÛé‡KMw®Q¢ìáÁà‚¸ùnhÚ‘„6wd\Ú´.Þ:8"\,/ +±]sœ“°º}ƒÐÉ R=jêFßв²ÄÙüÅxHÝ­Ž"}¶þ”˜ ©i{ríÕöÔ:зԴ ©Î@œÓ÷®Oë7QeÌY˜­6©éŠÐmcš|½W#ý0†èœð +`Tâ w#2vÙ÷Y¯XVJºq)öa0ªùk÷«ô}=÷ÜÄêg$mî–‰ó8{IœbÞa‰G«MŪý€‡r¶²ÏˆcÇÅ™§fÒš`,±Ým‹/@¾}ð!è+úŸü +4½Ûú†žÈó9€¿cBL𗾊Ô1 TTü%¨ºTpŒ)^~*©Ì‚߇u®€&¦_€1%|qú¦o€>Î'@³Dý€‡à,Š˜yØçcþt$_4¥¼ Œ11¿™éu-'Åç|Tý†_Óg¡´ŽßÜ8„ÒO0–Ã7ÚÔ *Q…|©öï!mË»‘öŽƒ¾Ðw´ ¬OyÌW®DÞ_•¨–'”Pq×L]Cå=*mT,2÷Á:8¥ß!ÅÚ(o*Àgž<\ÿ×À±þ<¡œ_‚ëaHÿþÜ_¦ØÆ]9Îï8€%š¯À[ ã£Õº4³×è5p=ÄöÇ] BávPÁþ}>\› °/Á˜%Kòx ê¸|] V )Es6)š´“Yþ'hýÐf ÷TAÙ#* ×À Ôàkñ¸Ç“v.øÏgŠö{,Pþy´Ç+‘ölð8ø! eðP$OèCoî õmú).ó,Zµ¯C鯌BÏ&´g#ƒå ÑŒ1Z“1^)°$ª iSúñ¸Þî5½‹|oÄàs8«¦ÓŠ·QÞT€*3F¹$~w‚súÛeƒü5Hx7j_Äõ¼Ö·Oë×Ï|pN×jžÂZÔÀiáO9”±À­œ³ ðh°œcó©’UÆå0`6Z¹~ÃÍ‘ÊûAÎê9Ðäàœùœúnî24U©ƒœÛ¹„³  ún"§,ÌÒz~·aÆNê“ F¡mH9õt²ÌkhƒXúÏàœUþSA[ž×ÓvÄ; €›ÜîH`rÆ+Þ…;ÍÅ 4}.êÇ`“fÚ„ðÉr •ÙÉñðä#p»ÐÌ1ÞÉÄ/à?üZ·F‡5ßÓ )}œ;AÂø%€Ãˆëd¡œ  w€ z ÈLí@Hä?͘bKŠõdAÕ{4ƒ¿RÌà ÈÀn5eS¦v‚ë« ið,øM§Þå.×ìP,ú÷fƒÏÁ½#t ™2–EWsP¬`[&ôï¼—ë;°Å®Dà6þèVÞ¤y? ¤Ëc³ôc†Ö½ì¿ü/-ãÁ«`€ßý÷3åÿ~›ڢ¾øö"+ûtæÿü‰þ‡ú< _øŸÚß"f¡ì¸|y`œ¨c#HVT~³@Y‚øK +.ò'5ÿkˆÇ20xRëØßNƒÛ„*fw«à^HåÓý~'^7„ 4ÐÞ=Z|n`ƒ§Š”Sý|pþ¿KâZÜŽY}ú4_‚Ò£ü).djµdø;)å™,Ø2,¾uóÒú1¡edÇf<–!^Óºu¨¼¼g2™õtáBžøw8nænPÐ)¥¬É†ªñ ÝCúûþ‚ô 'úöF@³;€í~ +´vx </†ŸàÕr²VsÁ5Q)'é*÷hCð‹ Cb·åàx샳}Ù”ÏEhÛÛòm†ihUöùŠ˜§Ÿ“EŸh¼dl½Ú)ªènóF]ù®³ýˆÁýpæ]†1sFß)0Ÿ€§RÛ£C:-)e¥ûÀŸÔÓ…[|‘ýàéö!p3Ø9¥-ªeíП„#B·Ã¢#ƒ—@ÉÈ&øºL”1»{ +ìëYp>_Cü³ ÜÜÍ +cHó_Lh×|ßqåïѲ°­Rƒm3!=’üŸH²ð{PDVÌD.%]0›ávË,›65½Yp¤À×þG‰6”2óZöGÆ?K,ãsÄM"»Ð…Y ÀÐSÙEn AÈ +àfƒ2ñƒÿŸ½÷ÕºÊ÷Å_ÃnØìb;ØÁÏ좽äÅyÑËãP‡:è%/zÈKöŽ<ÔP_ô‡ºäá1òCtÈa<ä°Æ!‡2l¨aïШ¡B£ÂÂboÑа°HÑPyÿx­÷YëY{ýú|žg›Óç³A Aæm3ˆãƒž¿Åß‹@Ó¥¯!¬4ÙîJ"Ä*Úß›Q¦Å\U„^WäÞƒ2h!lg< ÀÓ XMEl‡@ïv)ËmÏëÅB=ÐCò9Q]‘(/ ¿p¡ŒÑ‡Ø;e6Ï)X‚´¸TS Béf[€}ïªuïÅÀêký)Ø /©²°pc7,Wyeªp¦ ‰­»B°Ô£Ú„¼ËõÉ€>ðÞŒêÒÊÉ€ïj<;P¦dúˆ+bWôþµ*··;^xÀ©ÂбËÍßTlì§LèB†¼\(é’“Y~X¡1G2¡爡ÜiHÉ^ê^j á6ïùmæù‘@GMÞ¬D{MçÙtášùFv–p=´„ëî€ÄCüj{ ïù y>è=o˜ç­@[cNÿ Í»wÚÎå§Ò|a¸Ð1¹ÇÔ¹MD~mÆó|¢nìažôKûÍ{,4m½ c¬7$~z²Ú‚ð ¬Sן/ !{^ì9¤é¤É.hw–pº¡° +×hh­‡Ò“¦¿§2å4œó½mjxç~çÿÒ9nš~üý;&åá¸GmèÚôçuÐ<œÄñ GÆÓ’‰p\Dïàýüܼßcʽà畼X/}ÿRK@^Óäµj´»Flœë1aô1!2}JìÁwT¸(cíèõž+’!wóö›öSïÛtž½jžÝ(¯‡wìÀŒÍß y>è=o˜ç­@[þ£}ß[˜ï&·~áÜŸÌ„È?ÖNnˆÔ't.wþ¾ +Úê4…æëmóÌ%dû…ëôŒ„¿‹ÿnbÚé3ÏûDä}É#s72íÌÈ”»Ý”ûu ¯OìsßqXÚ™¯>á~?žx¿¦éGÏ9w{åÞ”0c™\ÀÖól‹Øoá¦áÈxZæùB3o3Åî½F |É;ú}¦Ú¹Û”y14î^8àt ^öÁ:WZ Š1€>V€Š,€º1Qö[ xk±÷|¬¾†›×^_¢ nÍ\÷!Añ—fŒcòÅ¡9Q]™(ð¬òìJX%¤;où^i?zŸšò…~%ÛòEþ߀×w›¼÷a¯‡ ¯}킊g]E07L*̶^,‚ïð»]‡¸(߇©à5îaä½aŽ‚û.ä6û2¸O€ÞX§Êôûz6¸¿Bï7»OõZlxÝü;§ÜCˆû4é&䯳ö:f­Iu" +žïñ?…5­¨5âj ±_V!pÍÝ#zÐ-XÄ?ïÌ~õëððx´X"°XDÈoA"`ÚïâƒHû0Ú €[ÁCq´p¬zÀ¥îÚ^1m–ÄŸèÜ"µ=&¹ü½ âWˆ¿£ºâ^€‰ +f“ý ¿ƒè<U·ÚÚŠv­í• ÂÝ "Ùw@¢U×Ák( 7p½ï2uïõÖ‚&È9ípóþH¨Ý`¸g|3ä7÷Ö7`þ~à=w•øÜ>SÎÄÎÁºHÞ‹‰ëfˆ—!~o¾íóý‘©ãÞeÏ ÓÒÀ= +uˆõÜxÎÁ*á©“+ßwIUˆ™§WýN)]±pÍ­ùzÀä@Jª‰îØ‹*Œ¡3…¬RHiúΣ^øàâô]§^îEˆoÚQ+Ç;4O=hò;eõÿ¶HW‘6Tì¸Ùc ~Ü2mv î9EâUóZ¯ó Jc‡_k:·)ëšñ@= =ÖP‹ü–D;à ˜È±EÆ—â¶»ÕÖ×h×Ú~öðM¡?ð.ˆü4ˆX ‚{R“r‹›@®ÿzÓ~JéX÷š€kô `¨Ã)«éti€¥œâñçà/€ œ08Ôƒà;¾¬Iø v®Oó²íDÜvó,…(Cï£óp­÷<µ¾KÆÙî¿ñ}¥¡ü¡~tÅ" .‚™ŠÓŽ`¢¦«"A™ôb¶‹È‹Ú†?ØBÚÖ%0Ô +?dÆ^¢]\|ÎCSièà« TìòÓðÂ‡Š¾gÈß0QÔ¿<|Ã:6šî”ù +À{™qªX|s¦på#Ò%Euù©ü‘ŒC³^gnJ­9ŸC0Ïßr~¯ÅÌ‘&`5$©‘ͳº)EÐu«­ih·’Ø€c~Û_ƒ”»ð=`L’ Á¦ò&A^‰‚iº¡w¸ hs3êqÊUÏ“wX÷Û­àžº ”Lœ‰ƒRN|=¸§ÝýxÃo2u•@w¯"Tê5×+›‹T›`¯6®ÃDk …˜[å'`ƒ)\_8ž¬7ãÉy£@ÂõdJ>ìH)æÄŒ:É‹ÀEõza?îU'ÔÔ ¥­íª¨.ttÐßW˜h3z W6Í8&4£5Úш‚!Nä:Ä ·®¾Àóì[´UîÿOs¬ÈàæDYÍË…¬î !ª+ÈwákX‘ï5¯³Ò5w"Pà·q¹æÇ> çÀr¾£¨³‘qżmv³­Ý°n¯ç¢ýÙ†‰ûcq¤…­à¡¿\—×›qŽ;ý­‰¥Ð=:Ð.vþD¨ÊWå”uýú\ðÍ‘çHÇ8Yë UCÍ^c~ßžõfÁ†¨u×ß]& HD |½¡âx û~›ik;øÍóGQ¦KÏ ¼ÁŒ«dÿÅ 2™+`™™*Ð^?ýÖSï¶Lq$žÉ¾xÜ\ À…Ÿ²­ÞNÌZTó¡íPuë;Mÿû@ªö— 7é:r„ÞcV…5°œÊQZ.É‹Aˆ¨©CD©˜ÒWRçMó0ñ°[n€Ø†òõÃ"î¯MŸ‹Qýþà†¾Ë1„`±)s°B»WèuL…¥: GŒ¨ReC7BÞx;ºÕÖtp l‚}ˆösäa„‰þ’œL¹Íþ·3¾÷Øl”Çé„SÖ}t+ÚÏßEàÙæî ²Œ­ùi ú+ î7@$4ëtæ1ð ÏIp·™º>£·vž×çnh¾J>T™u8¯ëÌøvšç³Q¦KÏ +pŽƒ„V©_ˆŒƒ’‹Å ¡Q*º×5®çÑ\ûtÊ0zf®×ûBó•1cŽ ¦!ɘ3¬1åÔ¼DÛ4¿Ÿ2¿·dÚÉ™@h»­ +í@hfóÐ +ô“K©:uÇø€©÷ ¡ýïÂouÞ¤CBS“9B“1eº5¾Aó|0Òæã&ÿQ¡©Ó,¡}öE±võ3„6«[LÙ”) ;N5eYâäý´¯¦¾Ï€P;Mç™ú™˜(¿Ä”ÿEÅù‹ÍQÃå'!5_:ÆãbM¯FÌ3-ÿ’)Ÿòµá>:/íkbÏ?Æ"mÜkòŸ®‹û…fˆwš15͘_‘v^0åÞ8ü~_5ÏJýôÒw”\ Àýh7ãZR¨*¾uïü4©÷x†Îø™i{%&ú/^R{A÷‡U!&B.…© u<Šîû°GwDì@\Ë^Ý8WѲŸ Ø~ã ¥ú¸~N€Të[ õ{ÔÞ^‡<÷2jþê{ôòfƒïzù(Ž>l4cz ÀrP¼6¤îwƒm*|k·aiÝ„\¾ß‚ss-8oËa¯á¦›ß/¢šY[ æƒßÿÂÑCWçÈf´KÏêè»t³­cà¼> Š€ûAÎz-È®=ú©ôj¨ì¶&Ó®J¥ö CsÏ*µÎÈIh:å”z Üëit#¸6~oží÷Ð gRâ[nê<†¼äs¼ú¨ªÅ߃+ 5p\èxÁ}¦Ž!FÔÃ|!5x¤Ò{Q¬g¿—¼¿¥ÝÙEIR.×}Ö”‰p\Dž•8t‹)7ÉoÚTÍ‹[G?¸I½2µ*¼ë,Sg0wFÈýûÏÕ«WÈ“•ޝÈ›nò|î÷ó<ä8'•Æó”KýBîG„©Ð8Eè $ÕŽ¾oÓ{®Òˆoœ¶N›g©5Ý’zÐJ´)’æ^sù±Ôr²î;ºÐ̼c#2I\âô¾„×h#Ò–Bè}»Ù„{ô¨SnL¬¤é^áù¦ðPŠâÚ[¦LC¬$è!'DÚ9å¦)ÓŠŒ«—ziÒ“þ£&äžðŒL<À§ ëÉ‹° V<¸F¬$…¡›KÍ/üˆð°vŸ5M;[Äz]zHH`¼/aCÝËGúi™ü2Z§ÈÓ1¶*¼«Öy(7&a«böÐRãƒð€=#9Ì1ýœ‘rט¹ñUùÎ"aq¼ξÇÀ^ê¥^ê¥^Ê$½PS¬Í7áêER7‚"ý\pœ© ëówVAéÐDã·àÀF”ÛÁߌøÕƒjØ +àç âÊ\„•¾Ôœ$i0¤˜òäÕM˜ -û¬çe¼¶øï®D\›z²àÇ ÍOycò~zEGÔƒô`2!ä+å"è•ñ)„(¥`!h6>« ¬úp¹ˆ°Ã§-ΘB×gÝ2_FToxå&–13ùa·Ú|*’!A¹lïšÖwH9Ø KaïÃ6ÂjߪøÃ ¢Ùjͦ`ˆ K¢&ö~8dsþ%¬FùTtàTa!§e=xOé$)-û'LŠÁÇ íq7àG]j§=èÁŸ¼jò¿ž}׃8c=ÈD.F>JßSg©©s +djF‘gd®u®n…=CoG<úžÂ€óÿnO•X¸ðˆgO™6Κ6oÞríÿïw›É¨JÁøÁ¸[ NÌ¿t®¶™[‘wÒòøq—‚ +')2K €ÙæoÌËÕйZ•V.ƒs¸´kÕÉêíP*3\ô[@墫õ}zЃL.,°–ƒ|ù0׉# ·}w$_Û]’iëᛆ²>Ú°ÏÈÔ;à‚¦™ï‚ÒÖ÷@œ£¾öfÞe (µÝ â,€ +Œ¯€’ãл¹° Īx; Ö´0e¾éJˆ/˜òULǧ‚gý' ”ûŸü+( Ý >+2mÄÆ£~%þ”¸ì4î"˜í°Hs>¬(5òЊÞO \ýç å· a1O?H„l¯^.à ¢A,BðÓæƒàâ¾=Òÿw ¾–ýapÆÁorÂü_E˾aذøì"âÎ[^OeÚ×1ă!u"ÕZ]?ðlæ=Zz'M»÷#D5õD*Ô¹S–¤HWÇ~áyzÀy§”Ľ¦Ûg} R+q{|'€—PO„;‚¸¨xy[ôGAæèf1PËŒ­˜èÝЇkÀ3ÿSv¦“מ¡w€çïr×…-¦_µ{¿DÀËÀó*5)îöC/ÍFÜßZ´}JB_©“¡³à»¥¾ÿfPRð Hèl‡ur”s9Þ ,çu&Jo•ðèžoG! ODž«u}Z¨¼7&TÄ”8Œ Ô>;¤Ü4yƒ¼9B¥½ÒWËŒKíYcíºpQ¨%^¢¬ØjùžI¼«‚v{é»I÷iN¥{„–# ¡òè-B? /eê=#„XœvU8ÕñË#åšB‹œ„Ö6 3†G„kód¢gņ-3ý5Ä*Å>`ú;ñ-Sï§îí¦Í‹B%Ñœo‡LO™~ï6ïÔÈÔÓ¾ß4s4b~Ÿq~ë{5õEhïîçpòCõ5MÎóióÿ|áZбܒ¨«>;Nš9{ÒyÉ[;iÙPÞ ÉLŒû¼«oÉòkS7f­á& ‰û¦3^ÛXiMêw ä×e¦™¿#óKjöL$ÿ¸™{}³¦ù=K¬o’Øúi˜ôXœxÈŒÙo/õÇ*¾›¶=ÉI+UK&Œ·Îä÷Ò÷;‰”kíËDhÕès¾©ûB$_TßaKÉ» ÖOŸØÃcªólj¦ž¾ÇÓ‘üýƒ'å´HûŠåÍH±ô}±Ö<#f<~µÄ‰Å‡o™üf O$ž•¦W…‡°ÿ^¹C_ûn8ÏDÚ×dj|š÷¶L\Ç '/VßMŠh ¿ÛIázJ½C¿Á—‰ëåiÓ^ÎÖˆ)Ê4yƒ‘|µ¸ +í%@K®i_ ž‹RfŠzHˆ8cûE¿Ý]8?5Lýù¯æ¹Nœô=šÎ³7ÍûäÖŸÖ=/–èµ—úŽ.\îß4åbNÈDÒçó43v5o8iÓÜ‹؃>Pœ8@(†: j¡¦Äd®3’Nâ0hÝX\÷=à]ZÌϼÂà{ø¢õéæù£™úÓAÑñ.Xñ›*…^6ãÄïßÅ›«0QL>ÝíðÇÌ8:î@^7¦“p¦/ƒWO+¾Ë½êÕ¸bøË¸r±.vëØã*Ä…àà\Δç‚.pSï0¼£Þ‰ +ÅÝáN 4óI ï”W&Ï{oƒù{Ö s ¦Á†Š)Tëú YeÝ‚¼ý¸)› +\”³~Ò9xöŒË)†àÚç-çgÂWiÁo·6žAø¼ëWe¿d<Œðç SÀÃ|¨S ò-ðîëzðìÉH}]lÄa€Ó¯NØíçp㤢¨Ýú¾µÇµæùl¤aÈ”ÝÉß&ÚØkõâ‚ÖÉÅ/Ôú3ÄnûÀ;í•à|~Öaÿ)ífžö])¢¾Þe»Dã*p•šÆ>~ÇKàvÈÜÖ…ðA OM¦ +û¯¯€k}´Kíiä¿›Áý‘ †£¦Ê©ó@ÍÍCq#4oñè•J@…ˆœ/ÀïåGt¡< J½Gvbòí+þ<nF8ªäepÍÏ¡³h/ P¯a Œ\Ûô€+ LD`³Í4pHΉ´¥Šb­Hþòaœ7‡ÅjPÛT9Ó `Ìñ»@Ê=â +kÝ€¹à™:\ÞrÊÆà9Ð/ÀsÞócæù}™qh”®ÑHþ9“wâŠx»M®¢lˆtÇQå2z𥢺 œÓ%~…¸&±€`ý@ŒyeT1x ÒFxHD 9×¹“Àµ«Ò¥[ÀC?&eòa!¨Œ||—kMÝGö¸§b +Ç9؈ƒ!îw§ÉÛ‰ð¹ñ9¸ÆºeÎ|3¬Ä Y!¥èCˆÿ\ß·ÂFïô“ž¡ Eç@Íÿ;ˆ¶ $ÒwTk7A Cò1,Áµ ÖtqÔäeþÿ¨ /]7A\ À&.´bYcò^@~#ø& ~:‚¸É0Â! »ÓaµˆSšÐ.ôæ+¿F{XãGÍ3žµCmïÁÄE{¬Y£Â ÂÛŒòXÖU¡Ïôû &"L…˰¡=‡&iSÀƒÀåʘ¨é¬H'ä«¢®W?Ô:öŸÇ®5TÔ›²>lÆ#D¾‰€»`×€†I-‰þÖ-¨ hAžTˆˆ€•R¬D:ú]¬ÿõ âß®÷­h'æ ®É>jêÅLvÝ2ã‰2¿Ãevƒ¸mÈ< ´¤Y®¡«ÙLú[ð\þqÑñßF­Á} Óó$¬”Ð>€ø]î ¸‘š2©{0ßd÷,òUÌ¿*PQøx ~?xÀMÝ…‰D€î™÷º©—â`µLΦúà|®‘Þ”ÅsWÝ–µ°ûXÍÂ6"oØ ¨ý¸þï']ÿ_ ~ð2uˆ“ã 7Âr¢«Ì¸v"Íü}{îÇLuýÆÂoÏ¿õ°Á˜ôúê5pý¥¼’~JÖ¢ý:`¸†@¢üJ{5½’Ð0i!øþÁo­ÀçHßå.µƒàÇK!ÿ{Á‰ß +R!„=xT,ö ˆ(®A5§Ât35cxåR€OaãÏïÆÄM°Ü0+AñyT<<”ègD|!>ÏYQÿ¤°Sw]¥ +a¥Ü¦;ž¹°JD)qÛ8ÚÅÉs½¿€½[ Ý­þô8è'€‡¹ÿüg6BˆA])!¢ð¸á†@Âb¸öKîÜ;–Àaó·ô +ÁWWćÁyÓ±3å÷€kãðEÞx7`éï&ämàîë‡Á9ú•óü2ˆÏ‚û¸Ô%kP,$¡Qî¹›ƒÈs·Ážã¯ƒëîAxËyÃÛ +JB ÖtS?ÅÁ_ñÌpÎOˆüSo ]øÜç+)Y àï‘Wäü>À¸I£à>Ý,•0Ch™ßËÅÚþ–DýK™€´ó‰†ù8PnXh?9Ë1¥8)ƒ¾œ1æ¥qÒŸuúר|ÏÖÕt»SOÇ©v¯¡Xè~zAÚƒêèûi~,ÚYî;ùiLÒæ"iÏ)^=º÷bãyÕäžSËäßoÆ5bÆZhªv‹™³Ü¦ ¿‰š‰Ðdgªé#gvtDÚLéqMrÔ–:fB§I£'êš‹Ùü‡ÒS'´ž¦ ÷ÂqÉf1íøÏï4Ïcæ`-“ß äÍž#‘º}ÂoåÛX÷‰5Mº(i;z?I¢¿ØØæ·Fû<-Ö|o0ñ~j* +¼å®‰˜ z7ÞE}¨„ÖÌKfþJÏ<75L»Ã‰2Ó…ûpLx><`æKÓQóü!IûVyÁŒóIÓfŸÐ'ÇûBüPÇ?G/u9…6…Ð"»‹ÂÅsüᢉ‡gm™ü¦ä €“Bät·p¡éAºÄ)w¯Xg¹±Í”‰—Ú÷–8 Ò´E¸.ŠuÙ¡ºJ IDAT¡ÿ—„4V;]u¦1b~CìáS±)ypß5”Ô|Žó̯×2ÏrLÇÓ +ä ›¼Ø¡ß/±Šð™)aˆp~™14¼1ˆðÐÒçÙúú®k„ÄîáÚ:#DøóÅ:ñ)Ù þú¤TszÒ'–hzJìz»T;@GLî³9b×}ì{è<4g3ͼ|#<R{F‰ŸaiGÄî7®âÓA +çÜ{ÃyÖöók0ð~šÔÏÁ«ÒŽøÜ¤áƒ«†ÆÖw9bÚ‰}CuBtÒô¡>(ôÝê S8Q¦)å0˜h§OHÈwÊ«S¶9‰z½tSjìnvEn‚•ÚŽä·L~Sò€H;ÇÖoÆñ¼WV©åÜfÔ6›w767ˆ•Œˆ(PG9)@ŸyÕü1m@Èi–R÷: }ì§ã’?4§ £ãÎü‰©7ÅÌm©óO+§È¬„ˆtÓ S÷´ùV]à"<¤úÍøbÎ7Üo3,Þ~ q½-å£01Ç@¹±´¤³tDÂpHÒÞàZ‘zG„Nar‘ äǼ±¿júUb¾Ô!Hg€ŸM™f ¯_¬£ ´ +Çä¿‹Âp¢ÜL±Ž£N ç¿®½^ꥶzØ G„¯ºáÌ5¨ìp$¿eò›’'.ÊÄ…òî5Ç´óx MŠœÏ›¶Ý¤|N$9UxpÆõ¼y¦eaæ<½m1cž!öV''æö¿S+’?˜«PšbÚëYçä€äÝ~¦Æ3E¬¿W ÛÑïõ¤Ï«RßݲH=O€½ÔK½ÔKßû”òp +4¡zTæX à¡Å ÜÓT +N`¢¢ÆÙ@9Õ„Nieo•ØNï±Ê¤ÅæÙ5ˆ)IXPÅ–Uθ.™¤°T°Ù´½æïaXèqPyjçÄâ“ +ç@êÁ*â6cù_hW„* °gÁyÛ‰rOO‚Ê>àúû;äµ½cò ЃôàÏÔÊ|ðLz€ÕÂÿD|¥!Ž'¾‘æÿDu™×aíNÝô Æq©ÉÒ¿ø+ÿˆî8ÍéAzеœÉ¹vMâWçòvÐ\:g1¦æï'`# n@YD­¿ #(.ÍÔß Z¹„<ƒÖæN?£Š'À¡X#¤L@º¾tA_:fÏ®NMRN34/æ¦õ· 2û¹÷ü>Xs3…c‰v\øG0Ƴšdý4Qù¾›§ô =¸z¡¶4ó<ÂúmPr|¥8èÌÏÚœé©kzûÐCê2ЇÀ¶D=5ßàÿ‚¦ÉŸ‚¦–‹@F5d>î×wÍç?%°¹ú»@IôP¤íU Ùòæ² +p t̰é«€ŸÃº}Ö‰ÃBp"¿BÞƒW >˜¨7ªÛÀra_M3ÞÝàUF Þ5e#-ºïAr qàÏÀ‚ïxi`y€vœ_6a¹)ä>Ö…n €Xßå@™1×ÉîøÏGÊ=€ö÷Šõý(ˆp´ïQÝ…õd  aäQ!Ðnˆ°}nÊ–p°ÓA{óàUèÍ ÒÝúx qg`~ÿu9è5à÷pϹ×6!Î!ç $Ö:P +b4?ñT,€—[C ïÒÀ>¥ÇË0qŽ‚ÒŒÝIuŠM!´y}B³¨œU@ÌäE±Ô ó|8PXÂq”BÅD·Í$®]>"a3¿±@û!3Áº©!ùP‘½Ô½¤fg!íø{…ÚÓºVB¾,FLýPÛƒ&oPh¶u&1Uî|QhNÖ*4>.yEÚbãŽß.í¿0ÏcZóSM¹aSî%ó¬O¬Æ½*S¦,Ltü¿*²ÎÚ„«IZJQv¦Xó¸W…gÄ7BERž1+Œ–X¸?ÀÉoòûœ2#BÒ-f̱6Sï?ì¼ÿ½…ïŸJ:®T™éBëŒ7MŸ3Í|Ý/´F‘´Ã{Ä®›ÛÍ;©—”Žú2 ­±™Âõ A­xa‹™{…óBK†½÷RAÿ!¿,¹þaæI„{e–ÐÚäpïçæÞ¿f$_}s„B9«ù{êýÔB.d™3Ÿ‡ðì‰Õ‡Xór­ëÙ\»us/}ÿÒ~!A:`æˆ%ºÞ–¼)Ý …Ø3Rv€ŠT'¦ ÿðjˆ5Í\hÊ<¨?bú µ=hÞå!ÓF(†8Ä`± :Câ1¾5µLÃ㩦ÿ3’6¿Ó`¿L<$•Hù—èô~ÛÌúéKdßcòbõõ½CV> 'O$|@«sßÜRíé]Ç[¹÷¯ƒ;]Ó.)$ •ᡞC :‡¡ùQß/$꧸A¸oDÂδÅ:~j ‰½†p¿œ6uû„çÀ’Hû¹þ•°ˆ9ó:.ýÁ¨Ó¶ÔÜë÷ña,ðŽ"ÑA,r/’wÍç‡#õš‰úº†NK».}u,׋Ø€"º018ÆðÞè(~J…Ê(Â{¼ZŠžÔuò*t'n¾¯€V¡]ùt5(VÛº=…öØ ¥ :-ò–tœ‹¥¾ÙŒqlÈÇLÿö¿6 +¡¯G²Ö´»qåÜND˜Mð;oÅ¥>ü¼§œ é.»L¾+fÕ8 +)å-õ-ï»›þÒ´y=Âñ\H‰`?EZ{'xíQ7b¦¾ãcàúš Š«`Å·ªœ  –‚œ{8?_c©Ô+aƒ†6îG°JΗÁýrý®ý&úW·Á¡þgJpþ÷*¥0€Î`©"úÄãwh{©ú€Cá'uçsÉ~\ë‹`¯ —‚çúÎHÐV¿ãa´ß±nÐ*Ð"äÄÍ-U‰e€ÿ:Ç@‹‡C" x_«÷–€ bTrg­°ÝŒu™ùÝ"Ã]°w_‹PnŽèÃzp#þï@ž{€¥¬'r +žç@$p x ªßôOV@º¼/݇p¼s ¹YºÐé<`þŽ&ƨ::7%ʼØ«œg«@䕊½ ýÈÓØ©¸"ÀÁ5›2EN"Еà8—‚«*£C–€Ž?„Øô›¤â ( +Íãl´ûpï~®]E®!­ý/E\ÿ%¿Bç=ó¤„è4–>»áØÇ`w(€—[ÿËH}U~OÛiþêþY‰L²põA§JH©ú Aå´l•xv‚œÿ Ø»Ö!NwÂ/‚¥tÄh Ñž¯ƒƃæ÷2ð`pCð~†úaZ¸ ¨`)$U +»ÀÃnø-®ç E<”Ò¼P òNàW@øZ¢ÿ’ƒøHh(‘v‹oIŤ‚Yuе^ÈÿIJùQAèlÓOLS=†@Vr1j~yetþCõCÁ®bPìHP–î¹K‘òrкïB¡Â¯ <«©Xjþ¾ñØŠ™­w`ƒ- ï¨ ¶ÝÐÂõAµšS~BP61‘[ôûWè‘D;} ÆíÛ ®j“>Ž´_¿Ô»–”é†iH‹w1¸¹æ!¾!.ƒÈó&ØrO®ØþK„9ÌN9àÏ`)]€ˆ@W yº|×ø.|X¡~]ˆ !-üÔ÷Ÿη"iÝôÞwz(¦¬’¡±vz`©+ŠRØ ®¥[ÀƒìÂ>Ý„N J¶BÒ*šç×"Ž$‘È@g"ìqó7åÀM‘kŒƒ½Õù} DF›Áo¨öó &²ÜþëpÐëÛ¿ž™0QPæ›¶G'ζ‚ßo} O£Ð¦" vAQa'øý·!e;Ap-Â"¦Ug!˜"Ë#°6‰€æ8 êwb†Ò)ôœÌfP\6<ˆw€Ø[È›±t“iGºä¢. ~‡ pÓn¿ÝMà¢-ñK‧€H¯ :T*™ÃÅhGšÇ<‹¼#Žà;nޔؼ›0nþúè XšÛ¸ºþÇ­"ÛÕ Ñöâ÷¿)T!FvÜ©_çî&üœ·UàY´áPÍUa3ÈßÈ7ë"Àc ‘²$ô #u'ÊÖà8ˆ@?×JlÇh§"ìN9Ð=#® TP¥r"LÌuÊA_¿ïbÐܲÔ ØŽ2ÉS f‚¦…£àš\(«æïë<kþ~»© HœÅ¤”ùükàùŸª¯à†œ?…ôyÿŸV-£aXW W5n59j¬ŠP»vD¨ü@LQ:ÓÂU Éaç™jS6¼÷ðßÏ×r i©jÔ_Gêêü5"ù%e:Õ‚íD‹×Mý¦\I„EM±:ç.¤æH5rßkÊ4S¸nÎ µˆsÚܸçtAYM#¦N(oÐä fÚ8šés8óþ~`·ütáú?iŠ™ŸT 5Š2Ò0¯¹õSb¹´Gl&æ±åÍFܱëuÐün꘼Ô÷;`æ4fÅrTÒÖgÞºPCÛ}6’˜«‡Äšnž4c }§6Csç04?® ‰´«c ›O®íXê~áÞ|\l\w\Ç…ßôM‰[Qhÿ¡ÀYºþS!°ûL]]7§…kg,3÷þüùP%V§û„ç@§‹ƒù/¯‡Ð §ÐãfjkÝŒ46lò—x¿æÅÔL(¶;A`M“7OÃün˜ß#úSLß©€5~{¡ÅÊ+)s5Ø‘º)6O±4ÝÔñPŸXD®‹25G©¾Ÿ1y©(vîZ¨OÇÐÚÓuŸëW°XPªáÌû®ÁþHù–ùC@I2bv¦ä „Nà\jšöyúnú®ºÖO‹EƒæY3PÄä…úÕz¡~Cïߊ¼ +ús½\øôÐIï'Þ"£Jê†æG˜Ô Ü£j6«!¨JYêYBd«DJ¿IK„Hô}ÉGÕ3­Œeªÿ^ª‘ü+€ºZ¸SŒxâ0Âf@—AÑò5»+ìT 7¤ýƒÐ{,Ed)q‰æ-®ÐW)tª„Õ©S§àŠð\âeðþzöji¼fêê9§i­÷ç;+´­Š=¡µµ¼ÓŒ¹šVØŠð6‚WYjÆ×ŠñnÔ¸þoFZ‡BìRJ˜êsÜ“ýî6íŽÃŠbCЩ³›ð( +Ÿ‹+ç»["ØOA×á¿B»þÉàw ]…~ îÕàúY îéÙæÙÃàÚ\†jóQE„ ðýÖÊ/9u€– 1ø<Ãß÷“v‚g÷äpW‚W «œþ_×n®ÿÔŸ¨«…{3¸A'Êè²ÇíKÊÄHóBwx%ZÜ:¶D™qX„}Tf\ž(¯ÐM;Ò”hñÖ­à=©¯µ¯v­zC`9PM÷ØÞ ð~w=xhUQþÛ~ßm Âëï"[ Q¶yeÄËà¾y$>×ÁXz5ÂÄê€ù›ZZo ’Îô»¼=kúÞ¢jð1tf±Q:A€9˜ ~›Vú ˆ0O€Êm›ÌJ¾`­Ä´õ icò~ð/ø)€¿† æõC0FIÉ~úôÿ_ú à_P¦ÇÑiÿ=¨!d°\¤¾nÊþ´ +R™ ö-¸ðœOh±©†hÊT)e2¢ +B)-ÝE°õMàÆÛƒ¼íî¸ÓGÌÔlÀüÍÙ‘Æ ¥ÄÔ Ø" ¦¯à¦= ~¦\i @d¼V‹6öýÔDêä9¾¿Ý6áéûD¾ƒ¤\#gþGÅþß;î3IáX ŒçÀÃö_*ö¯ ðOkÖOÁëˆÿ “Rðâ¡\³ž“õþ¹ï¦ ôŸkôQ2‡=èA„üÔÑÂýDŒ!cÍû 7nþv‚ÀJÌ0ÞßÏSJL«y1g6çMµ¦ß€•¤¤D¯ÀÕcGÚ ä8ೈsÀ>,†åb.kð (­Åíß"Ïé„àSÓø!Ú¹—C/Bczð§ +/€çÈÓêÜš‚û×°çM{%–LUû} +”8†`hÖ¾&×:ƒ‰¦òS@Ë—ãˆà•˜# =à½ÓMÈ›/¤\õž'fî§¢áÐuB7ØË èsh˯\ÜlP‚qq/p‡A‘ß +„'J½Ê]@ÚÛ™Ÿ™:%÷îW‹)@ä—âªb ðÿ€E¢?ð¦½_"LH* yzëAzЃL¥‡—@†¶$"â½ üðÚqˆ›N€:+wé­ý®Ðï' ¾Ôý¼m¦ßŽÚeXSáí^Þ&P*ú bºuÒ®AÚ0¿«jáBh9pÒÔ¹G¬9ÖíÎÿ­„Fb·´p5òš oJ>ˆ¾ßp OMðžŒÔõçO“jçH”qS§Z°hñöR/õR/¥R±y™X³H7¨‘ÂE¡¥C,JcŸð<~UìYþЊ!fJŠSÔ6ˆÈMÇ…ç¥km1"Ö´qLÒÖ4Úïy±x4×ï ±¦çÅÒÒ¤Ï$ÚxÚ”ÓùQÓìPp¯ÿLúOËn8™ i7Û4eš‰§™¿‘v8$í6Á©Ö Ö/v±Î/¬±¦W¿0mô‰µÿ}Qò&8îüÍk^ö@¤LháwjGÚIý^ê,5¥ ºzèÈÄCo° ï»…ë7î÷~“;p[1îÃ’èw®íòûÂÃgLÊMI—רûÞ„iˆàïš…n‰Œ¯%<‡Bf ÓG騮–ï«i8Ño«°†ØÁk¤ìkÄÍCBF/WGñÀ±H¬aÒ|±á›Ck²iò^šß6„kêiIûcñÓÛÂu©~2RÑ!dE&F ‘v`¤ ßçÍÿ‡ +ú*üv-3gç…{O£x*™ŠæÙ/dO qωGxýÏän‘4r4eš…“¯¸ +âé&.x'ÿý]hJØ‘Ípa}1ïñˆW¦d<½ÔÝ´\¬Šo„ë)&t¾ÝÓÒ~Ð=*Ü`ç%lß/öóÓ£N»¡MÙ÷ 9‡†à6õ~-éC·eÊ5¼çêÛã@¤_·îBS–X¿ ¹ÆÆaWÎå×BiWÃÌ…¾÷`¤žrwxÏ—›ç1.uŽÉOrF‘Tò}cΪšÒÙ÷Õ¤åõ[5ĆCnEê(c¦çêL!BÕ¶rßXç» +W«~ a? ê;äíÈ\Å®·”S98ãTÇr/ +÷ˆ@vû™¸æF¤œÐ~Õ_úÑIõë¦ASXbqFa]õõrÚümæêTݽôç—:á\ú„‡^hOn¦ãæÔZ¦¯†÷|†ðJG„\êíºM±Ò«LÙóÿ#¦ß“vL2Ex@êÆUJþqSGVÈce,Í4ssÔI_m©ÊGvšˆý6ÇÅž%È?5×G„‡~ +1u‡]‘uÌ9Õ ¤×؈Ÿ23„‡_Êcä’vHV'é÷=“h·“ïë¦áÀ·jšg­HWMþ°A¹ßS¥«¹~«rµkL_ú$PfLÚ½jÊBG…ë.Uf‹éS÷›zšMqÑJúó8"åÀiwè5³ _?©$\¤štb¥EnÝßK>©)q.ê…Ì÷r¨fŒ“h™ü†ól–pó¿(ܬû…¾_W„GE¾‡Ä™fL¾¨ÏOÊÕ5M;JÕÏȼ³›úÍü‰i¯Î7èx'#ùËÅ^7="üNzàål®!Ö·ÿÜý"aï‡g$O¨÷ÏÔøRˆs†é癣—„ßõ–Da±R¼aá>K,’:)Õ¾“~ß‹&F»ñ}ýñûߤižµ"uRóm ï!7uÊÕêܺϦšgïט/=;bRá>±:cúLÏ‚C™ïpZ&´#RFhýaïù¡L¿~Ò¹©RÇ]‹Z7{FõÂ÷ oZý¿=´©‰ã} ÅÂJРï‚ +KAó€{}„P{:xÉý¾!lb\¹ï‚*¡§·ƒ]ÀZ9MÍÎnEØòÈ…!p¨únÐʪ4HœÓÀ½¤=vŽ ìU¿_,ÒßR“çZ<ǯ‘&C A…€Þ §˜±Þ€´ÿ¿_ßÒM#±–~[ÕØ¯Èh#h¹ ŽŸrßµ'øJ-™Ç…œß½RΑ.‘°vmLá*•J9—: +*ú¾ ¡ÄAc5”¼§*¡å`¤ -å¬ëÜ+~\ʹ¥Ü|ä$&ˆ–¼Ÿ?×ú½Tú‘R¸R‘iHtÓP®r¸æ|<-–›w5ÍŸ7ÏJ¸øaSÇ/Ò/\kÏGê4% :‡Ýþ¾šT*S+Qï!±ëBá¢yžê¯\íH`žNK^Étº„õ-TÌÝÌÌQ rñPT×GáˆðL¤%/I»åœ&½(‰Ã¢IýÄÖåE±º/z’†%Kì €o@—¶!n£ßº@}§ ûA‡cÞ„ Y +UúíÈñ‚uçj¬{àA*q'ÈAäTl¹á@juÀü=r»1? 1(å\¾¹ñ@Nu6ÈU”p¦Ë@Êý0Ê}¡ÿt ¤’‰U»W.y_r`•‚9 çu wΕp·`38fõÌøP¦¼€öÇ€ue}ä"^CÚ«b'qØ«xÿLÁõ¶u 6ÎÀµúânÅß׎®­}h_SU=]V…ë‘v™‚5 ¤b/¸&@.w7¸ïŸLÔíW Ø9º t²õ¯HïçÏM­ß&Ä!O¥^¯ ¼ç?÷}êŒý©Ÿú!ùðLIö»ßéSðüÊõ[¦‚8àX®_qÃîdŸEPW#·ÓºkfrQÊÌLà´}Ôôÿ¤Xó’C’¿û¬ÛoÝ{íNæªeò<å4S\ª*\Å#ýúeüñé¸Jll«(¨h»"ü¾%ßÒOÊ¡VQØ+yç\š"¼Û©¦ü“Jº¶bf­:_zç¯澑4WÚv…©†éãUáÏEATIÁ£¦ÏYÂ{åœ@,‚dÕ4,VŸC¤ÜN뎞dÆ®ºßH¹†v§ßWÓI™¨9ßL¼ûT3?1ò\˜ànpµ#¦l7æiªð¼ b£wÆÂž·L~‰Yz(Ixmh¿1%_Uô,íW"ýÄÖñE±R +M9‹„ +×ÑÈíT›RÝiæÜK2q!è¡Tâ°¢Ž³HMÇ ÌUËÔkDê½)Ü1D©¦Y)'w0hÆàŽOÇ•›·ª +*Úîó·."UŰGÅZÌ4í…æ¹äsiØÔ鹹騤ãÕë|¹ù-bÍhKæºá<ÓØôÇ%ý­ú¤~öÜ;åÒÓg%±§÷ÆÏGcïËdäÄçÝü¾úMD&ší5ÍóV N*bÏ¿f oº™ÏØ™¦gJîû˜>Jçb¡ÄeŽÐ{_ÒŒœ.©Ðë©4&áµñ¾¤-ªö+‘~ü”Còº'|â"í@'¹jóBª;mPn2´Ù«hÕVí×}ŸÊŽ:˜«–yßF¤ŽnŒ&²z$,}·XšbúwÇ^ʹ¨RNMßwŽØ·0E¬'JÎËäZ~LÂæu’Ú>§¬t¾ÞsåLRãÕ­úîþ:É”QÍV$ÿv û[Ð5}R¸ïúg93@7 KuàI3æÜ»uûûºå|b»™˜Ç&/†xž7ù!únqµ#¦\é|4…gÅ3b Ú†™Ÿ‹¦½R§^J$ýGDª¨“ºšê8m1ubù*ÚJÂuúuSUÇ ÌUËÔmDòõpL¼g FjŒGS çÒ”ê +*îûN‘Έ˜ñ½)DLUĶƒ‰yõÓ,±öþUž«X¯=èÁÕ¦Û*¡y4}œž¨ÓJ¿GÐnb¾eá}µ7MŸÃ™²3»¼–r IDAT-lW¡à´ã`…qYp¨N4r;©Û©Ó?M«˜ºËï´ß¦Ôp¼ÐÁ\µÌ¸<õ½žrÚ¢ +W±À)…«^ê¥^ê¥?ÅÔ°ðlž%T^üFâ’Ø>±º)o +¥«O‰•öò(™ê|)Ö—¦a 룤ÒT¡Rê«Î¸BñM¢ÉýщFnݺjf²_ŸŽJÜÌän3i®2NS,òO)étÒ¯Nü˜„5$êu2W-S¯á<›#6„äÉ|]Ô®2PC¸ˆR +W½ÔK½ÔK~š)Œ%úm™2ÍÂqjù†÷¼D÷Eߣ´¯XÝÔ|¸iªÙ:"´ô˜/ä–SÖ&ëDm¿©§œtìÝCósLdÚB}ö™ò1ó磶ߌ1”¯®¢szb#B+ +µ”N”U‹µ1!1 ÑN«¦R³˜ë )4a‰u¾¢0&DV)‘zº8mhIÆ"ívÒoGŽ:˜«^êNªƒx¦ 7ð7Þ÷:*\‡±uÔ2åÞóa§ÁD¿ƒ¦L³Âû©sœ–n…E׹͈óÙ"Ü#"41­2Çj+(R·n C#3žS.5ǃ<5½ÍéûMÉ#ÿû7 çMË»ïÓ'–¹Iù Ð÷(í+V75¡oìrü%Þ¿³¿CïÞé|BH¤|#éó8´^Ra°ßžñ¹ù\(vÝ 'Ê7„gzy¼ÓÌ¥ÎqÌ{«ŸžK¬ÍQÕ…ÒK½J#Bå š¼Á@Þ~‰;ORD;LZ&¿QaœuÏã¦Ü|±ÿ±Þ#cz¡1*÷¯R˜Ð¼øs׬ðŽ{p”zª»Ç”÷‰Zu¶SUge¿´ÇDïV}NÝGÄ~‹Ü}숩Su}Žys(RÍgFËÔiV,ßpÞ×½¶KÕÕ÷(íËMêà«_ÂξBé„}’8ã¥ÖH!BÆ÷nÌ'„HXŸêI=$éëRÝ×Ä–r¯”•CÕaúS}¬†);œç°)çK¥÷KÙþ{HlHê’PÜé…îÁw ‚–›¼çSA›çqк[° ¦´´MþWÿ Zrœ2ÏC~ 6›rïÂ$ùÀO@늡H½¨¥ˆÿÎ.ŒšÃ;ÍïQX æVA@k–Í(³f¹ËüÝá=ÿ s=hAƒ&€WÁ€VbÚûqßuû» ç pÞƒþ^EZ«»,B:\mè¿] òÝàšÝ®¿Œ ¼Vr~\†Áµv\Óß:ÿŸ3ù©;\û>|Z`…“Í6?JŒ©Ûð8ž!ÐBêf0Ò8âs³œó›@k±Mà{-¿ã\Ð2*Û@_ëjŽ÷ï÷>p?ÌMÔYZE­÷Öµ œ9¹Îz@¾K8"ćÑîhÆ6qOo%ð +ÈM¼Éß +\Ë@nëS¿¡N åÁàÁøð[þÞŒc1ªû¹¸°œ£¹àüä`3¸.!–Ø…Ï^+ÊÉwªÛ›>ÇZ~Hi¶¢øõ‰œÒý¯ð.øM®Eš³Vø–)Ù ž!¯šú­6Áž—ãæÙâ^"0qn•0º(ß"ÿÃà>Ý™o€„ã]:m"xÖùÁÛGœ‹h¢ q4rƒ1ý +€§ ÊúP꺰¥?¦… óÂHRëÅÔ.è<„ú×z©¢bCõŽ‚H<· [ r= rµ³Ai-ââç/6þ¹¦E™~«ÂeùɌw;È=¦DhŸÁÆ?p(^YR;AÊr£iÐGzÀDá&½¿=¼ÿûiàÄÅ,%Tæ["y˼ˆ¼øSa!ˆN€“:ð®GµM© ¢]7•øá×z³Í׃È2ëÀov€÷@*öß@Î,´èöM¥Hê‚÷l2üè¿%Cà¡ò ÊËqXâè<€à·¯ +)Dç‚ÞÏŸçx;ò"Z€ß¤ïþc0 +ûާÁC-´®‚ëi€¿y.p,‘Bs:`þ^É;]ÁLF|ºÐJ`›ß+Öß®­Ÿƒß~#€Y…u7ÀþCà™š:+ÐÎ`¼Js wý>¨>Mlÿþx~=@¢Í¿–ë¬qÔàw™ +¾ßˆkÞ ÔYdò‡@sœ×Sà\.6íù únÒ«°³°z1P\;DÜ€ûy+ªKrÆÍßäÕ¤/fÛl1íáýàZà_¼:ß"ÌÑÌ4å//‘{E„Cà‡¹ ÀË™:'̘¯1} ˜ñ/¹²½‹N|¸Üt%ÈàýíZðÃTá>O`â\ T¬÷ÿH|¼ï ¹áí9ñ@ÞÁù½Ú`#ø ßBþ»»°v“Ý"¿= õÛnÐN¿%IæÜÿ&ä×VV‚ór ø^JDü“WN¹ß˜‚RFy¡+}6P³¿+J,LÅÄýªœ`ÉN)\Ï¥ÙÈ»Á:Øu5"Û ·—ƒW@$ ðºá.¤™ ]ËÏŒ°Jr¹~Ö„‰^©M×zNãßLr¡T§*¬çp/¬8ý,ÈÜæ¾Ífï÷°ÄÔ(Èuw”©xÍôu d0ꬡ/Ào˜ +×&˜ »1ñÚ "ÒÒ{½~ð¾üu†Àä(† +êüüÀƒä¸àù¯Dþ€^J;ƒÊ!%ôFÔ—t>sLwv.B~ö'[<[tL%› J×™v%\y]¸dú+J¶DBu¸ÀŠL‡•‚ÏÀCèj¹ ¸ªJ‹BÐê˜\°ç5ó|(>Ôï1Àó ~@N¹®*¬ßo;ˆú@‰Ú‹]î§Ø+¾½VÜEäÛAK«ž™”M(Ó¥ +AÉwŸ@þZçs ºöŠ÷fðL )Ùöà*„`ˆ{˜r›%w}÷‚Ü× ”Ç‘•K\“©ï*ýý ¤>ïJS7§¸Ù”¯‚üñL]è5¼ç‚s”sû׺ð]pX1˜r<)3´ÁDš9 cú +Õ5•]×ò™",}º ~ƒÝàÚÖ誧ó0&‡Ó]î¡à·ÞÉ3?«_‚gƒjK_çæapÿN¶$o[Ó<Ž;§ûSœ1¿å&±ÊÁü ,WüßP_,þ„i#¥ «ebÖA=¨ +ŽW ¦Xh‰õµÐñ|´$ãYhŽÐØE) +¡Þ®N Ý]ºÏJÚßò Ó Ð=ïE±&¶HÚÃWËä©+ÞÒØòZ¯a~¿(t½8]Ò>Êýz¡yo%êùðªTøà¤ù¹>/eî†EÊϵáÂ#¦LÈSßÛ %†j}K!ÿS̘.‚æí¿ð „€Ý âTíÉ ø?t º° D*{A‘|)¬6}[å}^¾çÀÃ~Úïü KlBZ©ì,(º¬K¼Î׃(óWTÑí]ð{|¾wJñªŽýk'ð)húCXdú— ¶o©Kåúé¯A¸ô =(í ¾™22×8¥Š¾E•6v‚xÉÇmóAœr22!_aòÞBØÔt¼JŸâ¹eðˆ%…åb—œí §¹¼OÍC0h:G™ö¾ÂtXì+áüD|+wf ‡¯ð÷°®BS.&ëÁIžl)€Âצ¯›Ö‘¨cÿÚƒô ݆GœõsÞ9ÖW×·‰9j¬Ãµ˜Ùà0ªëWÌ™ÖAÝ©Í Þ¨"e­ÒÆ— ÞZ…vÜ6kYáƒzÕô…éãH„˜¬] þþÐŒi.P-x–o­&U,—ª¶±Ämê¹6NH ÎÒ`E+7õûíA¾ôÛVàÿÂÚOo…½çô“ï`0Žë@DþªÝQ 9}†ê¬õÊ… %^®b?Ù °ݱù-…˦O½ª AûWªˆä¿Oð¸þB÷“ww ¯.Âzõ£">®×½ þ˜ù âÂ%S^½ÌUõƦD·À2¡÷ëuW6‚„è.3ÞE ÎHL²8à% Ì5õ[ óž@Þð¬KÅ6pÛ_rN¯¡,â£+ª]"‚QTCt*UŒF +,‰ð]B¸¾Þ¯•|Vй"\µ,‚uè6€zqî÷ã¨9Ž’6^õíÔ_ÉJЪ,$þ÷aД ZD|×Zˆ½ôg•îƽ.±@pSKòÐJÔkòš‰zKLÞ/¼çýÂXÛÇ%ƒ¾á%ZиÏfDÞq)ßtž žùé¸ÐúÅ}¶ÐÔ‰Ôѱ=+´Úk5ó¤ù;˜èS“ÆŽo˜q¼y¿{L›~øéBË‘’xçȼ“Ÿ†M»îx2mÌ¥ŠëÁ³èÃLùÙà¼Ý{ÞÞk*_Òçp¯6`¢YÙÝàÚhã,ˆ`žE‚ï1ë_aˆË?¾øÃh—,l9Œ!ÄïP6 x¬ƒƒU¦^ŒòêD9+'Mš•+Ø ƒs³œ—ƒ(Zt'ª!ÿºP7,²ÐäHWu¾Q +uE‰î^‹r%+ j¨^/?0¿õ «*½JA7®ªÂe„÷mnMßµ°ŒIN‚³ +ÃdúZ†üúØ3ríÅÏM;)í<ÓÏVt¾W'+æjXÝÅçÿ"¤¯žÍ‘wšß?€’+§º°Øû}ìþ¸à HÌžB™îÍfð¹ÎÉ V…~ð½€ê^ò®œï·ß~¸þî@þ^±l6i¸FŠ%¿¯ äŸ /®G{tÊ๖ +¦öê+—úý¥¢a~×åD=x” 1¯›¼'}ü”ä(·üCÐj¥ŠgØ?p¼5L ƒÎó˜W£åBob""ï¯C÷ ==•x5ê7uK½ =nÊ?#ôD6ÃxQRè¦G±–)ÛˆäI86¼zS[È{É™ÛX +o›¿Žóˆù»¦àÝJ¾Ëi3†Ü¼¨Ç¯-2ÑkXÈ#U#W÷;h­.ÖsÇz^&z°+M"åžëz©—z©—®hr%z7úì]ß.çyˆzšk/½À)°_¢\œUEë Ä@¥ga½1½eڸĴ;Á1m9è© åI”é)9¹õàýã&”)sé•A¨†>¨}é­¹‚¸ra‘¯$(·òàÝgøþįzv€ç½m>dÂ|Ë)×íñÍæÿM A‘—pÒ[h·¿@Úö7v¯½¥d5A̓¾p;8ÆnßÓªÙS( òc ‹}˜—AaˆÐ—cŒ•wá’éûÈ]?"ö”w=…*Q _•›6‚ªêOÌ‚6Vª™ü]„EîAzð§1;ûÄœ­Í2ÏòúAnü¼é¯ÔYÛOÁ³rÈ»¡xcºV»À3Ÿóû¹Dù¯aÝP»zl«‘ö³àº=þô­ò +Èåõá"w#¾Û¥7…Ñ«Þû÷‰Èí¦ ‘xô37‰”ß•Þ+¼cŸ.¼§¾[íi…»ÒþæÝ^Á®!Œ'¨\Uï]MÝÁ@^Ëä5¼ç}f¼~t³T½)bu#R:3Eä±z +‡$Á,5Nd{¿^ê,é¼»pF¸>o©PÇ…P¦pMœ4e4bà’‚1NFI»hêùKÖQ.MÉP$í-4GÍóTĶ´º4#¦½Ð7Iï£[„{\û6s“š»ŒʶL^#Ó¦Ÿæ ÏcÿL‰Í[lR)V§ižò42ãróNU¢’NF¼Ô=ñ@a½>!.-Ñq›ï}Š™Ãg"å‡My_ïMßs~®ÏnÄX +Þyo%—`M§V¡ûÁZ^9ò ‡¼ –Úê6ßaÈ‘ (ÒYRÿ2 }†à2¬gÁRg4¥’€Oü€ÿ‚rûÒ˜hýSPã6fGþ}‡éà}áEÐó/eS1rÜP˜ó!gH‘²£àõÞ +Sf1¸î÷!­´”ŒÍ×ß2”ù¼(…>ð|YjÆçŠ=swŸ:sÁwÜ€´Dn JUMöäDGÁsI ÝÎMÌ;~§nú ˜eÆ5<#µÉpð¥0”ކœÎ¹p+ˆ£~ ž]%ñ¾„õ¯qåV7˜: w÷.xE¬×«@ÓÓÔ™?Žzn ©®^ê¥n¤1IC3RoÐäŸJ‚rýŒH˜³‹<õÕ”´ÔÆMO›vçˆÈB3ÎX ù–is¡XK7¥êøùUcÎçÒ s’G…\Pªî4¯®ÿ;46rœ¹Æ[¿Û{þªP²ŠÍÁQ¡•G‰å¦†i«Õ¥91íùÏ›æù`¤Þ³æ}Ýv—˜:1É],I÷$O›:÷W˜·Ø¤Ò~S§ßi»‘™·a™(Ù¾_(AÉIsÂùV @éo+-±&ºß”#´À:š€kP IDAT(;lÊú{åóü¶\½h€=ø. Ä®0yo!î H}r}U½0N6l9SuQ=yÇF!/…U•$«ÆœÏÁßU^€õ©ƒ¹ ª÷¬ûçþ\Îü5¤9sõËï{å;ˆêÑÞ>ß§›–+-+? 1s{—û¸_ü°³êø&% ]à8lжۺ<.õY+8MPeê”ÒqZà9²iinxö\¥{M½Æ¾ SAn~—ïÒÒ˜²_ë?¥üçÂâÀï"·Ç= ßhì8ÊW…:1çëDDÔróÀƒetf‚øMö¢]‚s<œdúòûÍqæ‹½ß {Žƒó|\o;‘&"]%6M¹ëŒi ò§ŠÙ)…šßÈrìµ ®Zc¢l Œï-„¯„f„Ã>ïùwã쮽‚Ùƒð:ýVÉò0Ê ' pú¸oB<ó×~k[¿ù€]7€\ø>pîsð;P©ù§Þów‘Ž·°d4Lï9S~)òÒž¯¼¿9¨íö8Dì'h5¸¡"A+äK>%*½’œR¨¢)¼Ü´ï€ÔꀗJú@¹&wиénR¿ö±…õð`¼ ív´ƒ‡kL¼¦Îõà|5mWDÊ» Èq#H–ÜI®ƒåô† +ÊW…Eþ ôÁ ïrø~åÝÃÕÝxŸ‚‡` +iT9\\½Ò˜ó!]ƒ\¤H-§!¾÷‚ë#t€ ˜¿ë0‘àÔÃ0S@#Ç™+§ãŠ=W#/ötçú:Ð1Uªüç˜8g9yµåÞhÞcyBë XÇfšRuÆÍßkã»a@‰”?—øëMÇ#ðÁ
opØüíf¤É >[^äîäë@?¸ö¢=øÔð› MBŸµÀ'¦”õn| +àß‘Žx狼Ž!½©6Öå”–!€Õ¹“­Sǽü'¤ï#ß3ïq+ˆ$«(r¹›êeðÀ¸ù;¢RøÖËWàáýÒÝ>‰™ßSÁ ¿qóïÁy] ¾×€gP¶qà H¦îÕf<ÛA‚iÒ›ØwâÔ¼BVˆzþ ääB +VÚÞG¼¯Vœ«z¸† $æ|7à0x€…c)·¾ aS³D»ã°œù:¤9óà|n׊;{ºs=a¦ƒDÜfÐLìCÓ×ÙT%þ~M™O«ûóÐÚV%Yôû„ödU€ÏÀyé·ô£=ºk á‚RåÖc¨æaôgà>[⺺DÀ&„¯uÔ%ú﹚ù Õì¯ëàªA;î=OÝCTç+§ô +Ú7àÇÈsJKa51¿XNÁªNr÷‘¿‘÷Z¤ýBç ÛšÜ>l‡¸˜Ú(ß‚È~¸1J\ßiʯ6}¬)ì”È\A_7mäâ¢+ñ² D7"_áFÐÿv?Hànß'v襮N–!ÌÉêá:Ȼվmîp AIÌù*óà9|—¡ó¡éÂV ©5W…3WöGþ+®®hoJèù¿Ûʪ—Á3ô´K —‚ZˆÉÑø.þ^™ê¶®·R_+qì4ÄñdÁoÁï² $Jõ/\øákËŸë2zúoÁ˜9)P‚æ‰L¹ûÀȇµ!¦XJ­Uç×å”´ŸqÓÆ>O]tëªaùûÈ àÁ´iî5“¡ÉíÂrp±ïDܹ »aïÊ¿Wh¡+l¥,¿دLÝQ-· Šq²Ó`Íj>7ãü +iŠúðÝ•œgêÝ +:íñAÅ¡ë¾_ ‰Kõpõ¥7ÓM9S@ª"óÒ˜óU`-Ú[‰·ÿŸ½÷±êJÓ…Ÿþ*C9”ƒ¹˜¦*Í©Á\tÐÆ ¦ÑF?ÊÆ æ’ zÑK⥠ɠMüH†Ø˜&e“ ±ÑA‡ØÄ!Ž6IC ɇ¤)Cl´Ñ&i4Ä`B•hÐ`‚†$Ä ò~<ëíµÎ>ïZûG*5Ù,NÕÞë×^{íõ®õþìð¼vqŒ´$æÍ l´ x*Ñ^™“ù@ÎÏPLÕȤñ`éÅ)pZvº<„¸ {,ÐïJÍagÁë®X¢º«îþ"Pa·Ûõq'Ê…rîƒ×²dà3Ày°Ådì×/ã¡”ªlnld¤œ(Xé´0pèˆ`º«£iäŸåî ÷ŽHÜý°º` vh_­vªômÈÝk¸ÿ{‚k/‹aøÜ³’v/ªufñµÐ…²UfXê7{ý¼ä;´™êò”|7¡šº\ /üh"¯ŽéãÆ½w\»Ùë„îR³×5ñ±œ±›\{Zèhêo¸ÀøX}¸ ísdª{G±¹ð¨ëÛÒ¦ú²ØnzõYÁµ>W¿ˆZËdqZâ®IceaûšŠZqLÚ»Xi¹øy#â]i[nI­1(’¦ßÏ…‚ÏS¥†Qwˆ¡H¹Â9¯xCè4F¤œ{ìe–ß½bXìï@S—ÐáÍ×.ÿy¡C¥I;Êâ´Ä×uÈ”íG#gÜêt RøÏˆØˆ½°î¾åÝ(¶ð+aÉúEî.Öâªíl3S¥oCƳ-ÅükC¼‡2‹Zí„à‰Åb/”»Ý½p¤~£‡sÚ žç¤p(ò<Ϻ21âªiÀå4î ‹í9®é®? \Ì!$’¯&êÒÍÁË™ës\kA.0>VzÜ=÷ pÎÎÿ~b>÷!ÜØœÆû}É÷˜Ež_û:Õ©NuêH +EêßheÆÂVaç+j>ÈìYJ*³Új”ÑvA»LöÖH;cQÊ*«) ÕûÈ".=¯Œ&÷^wïIxÖÝcÝ©òãLp|׺~æEŠR6â>¤µÅU\dɬo†m—½d¹= >ƒ€: ê à×F™µ XbSæúŸÐyŚͮ;àeÞ“@V®%×SüÀ÷áã)ü-¨ iáh½ é¯ÑnrT£Fkƒ&¨ÔÜ)¤L·jæî‹ASò“ xûYŒÄ{Sð÷ÇðrÇO‘¯QYUñé—àbºÞ㇠2Æíè‚b:¯”¥„¹ žsõ®FuE¤”&÷+ QZï’zÌKÙ¡*¾‚ßÀ|ŽývPè¥D9uå™çNò#pÌîCQ*¦ƒÏbõQ-,Êàß÷Øõ£ÈõŸ”lCqtx“rzS£F×VƒëìAxKBz'cñ8ŧ_€ÑçFAÅ¥ÿ šÂ¥Ú™VâKð~ +:Ù·²x$¦¶*ò”¿~iï¯Á“ódÄ5ŒcÊPy¾Ü«`#ø~ž¹: ð½^BqŽH5¾›h"ny“gE4Þâ&UL×õ0ý[‹: ä*çb,€«àâ.üyìü±´³ô¢¶sS¤‰êÛ ×Îäû“N¡Š&÷ +p³0¶ó U &÷ÝàG4 ÔÆÞn²ÁÆ‚_ƒšÏkA¨Q]xÚ¯ÑYTñ¾©ÈcA†=j`ŸCÈk;o¬!‘SέÂüº›~(‘¿Š'ÍTÙØ¸YyÔBcµ“çTQ†õûHhËÄPtØâÚRO¢y¡m€ïÿEp}tíÇDg0þ¡ŠÇ‚9àüg‘z(xi~ý¼>ûV¤ý– t@½HŽ‚éb–nN !i ' Ê(>eӈĵø;ÑN¥¬F % +-ƒUW¬LJ“ÛJsÅk[ +p=îù¹<—Ýóoj´_s”oYjŠfÁò#R\aqŠ´‡.jáQ´%ÒªÁ?KDžw×baFŸr÷7'ç +­4b¡›ïscô²«–PáUDäáH™!w?T¢½[¨°Ïƒðc”EL1öJæWó^AyϘyù³¬ö {z<âL„R€Nl€Ïs´ÜɃ¼\,LÏ'Ê\B«·ÀOÀys[þ;P†½Ãõo(²L…’žäîoÇê9P¼šbµWù¶Ë†kVd£ ¾* Ï6òV ¼T6TÕ2F½¨q-±ÔÔÿ1¸)¸‚âúE f•µÓÀÅë_\þ?ºzn7BH”΀‹~Qª²è•-Óï~ËöYèê|^V|Ô;‰AÍ,·ƒ«Ð<øÄpY(âI³êÂ_åt"ƒªí‰ò3AÝg`Ç„èyt/8îpùv€ßë@¤Ì4pîü7hYô/àü| ñ÷SåÛ.®®¬;|u÷l¹¯x©J ©*e{™€HŠ*¦(KÐÊúÕÔ4òŽE‹ÙŠÓÆKHd€âêœHÙi–ó  ü©GÛKˆZÀ‡÷¼¢ÔBPÿ¼J eO#UXóUÊŒ%°Ïƒà)î0@Ïqpì,öAã³äÍ­`6!~SçèBpþíƒÛX¨Ê*µ¾…Ø k,a¡Gá#">†tDı´S!÷áßÀÀ3“áÍÔ¬ï´áîgçÛWà\°æ`Ÿ²µ~ë”Ýï~Ë~ÛUOÌ‹Œÿ/Áö“R%ðR•@Rc>¥€]àÃ<˜¹?dá¤"Á•…F˜{é(ƒŠÛ]þ×P.ÐÎ} êCxbqH,zü3Ñ:9—»>¾‹´Ãœ‰bÅÝ.XáCèjJ…k¶°þœ¶4B_˜b2Ö±„DH‚“øVð}Åäæ›ÁqCI߃¸ű„¨Uô€j&¸hļB†Þ3oƒ¹qs®²DIû[fÑ«RFó— ì£ceÁ¿éÚ¸Õ(ó$¸±\ Σ÷@Ï›GÁw–2ƒ+ãI¨¾ð‡íhŠyÆœ(¤ci§ Ô'IH€¿Ç`ì5¡?Ñ·/ÂÙö÷­Ïam4ª|ÛUÃ5 +ΛYàa` |`,ëU ¼t +åIU)Óõø¸c[î>•0¯gWÑ + @£ÄY«,ü#hSzüHÞ*Xn38 WÁïDï Ìcþ9QV‰ÿŽœ|ÚŽ¥l;ÁÙÂ^PAæ¸à@:âàVp3² å¼ VñlX¿ÕàXügÁr£™ÿ¿‰çC~•¹§§ž=(~ê O²U¼úõó`!ø¾þ-‘÷3´n\>r¿ÏÄÉŠÂø¸é\Îï/Ýÿ±o#\ôŠnÊ«”Ññ¸ð×ÀÞpžÇ)KRÊyÖ)àºÃÝ/:wSž4uáß.ü +Kk,˜(¤ ?Âgà÷“§npCœUŒü¦!Ö·±]*Ê…ÿÇNÙU¾íª'æ/Á9ÿ&H»®€ßR*ÒéVx×å›Áwö â®õÒª]ð›§7ÁCDŠVV)óg„J€;]‡—¹ÿ»]å{ï ¿ Vƒ/î@‰2ºQÉzð›[4Ð,J‰Ej‡¤Äÿäÿ±°âîÇö"8Á^HäŸN¼ìó\OØ„ò!‘׃óa5¸1¼üHy«žzª†¨½ܘ-ßS•˜îºpYÊRUN#UXócaç¿Æ3øH>ÇáF^ÕxÎÎaåîX./ÂÖŽŸ ï¥(Rž4ÇÌ*-ˆ‰ò@:‘žN÷ØP\{8¦ûŒü€ï Ëþîs};i§ì)(ÿmW91ߊ>~z`ýè‘õ§H¯ÅWü À_º2ß]ºÿ â.ÊzÅýžK¾;>JÕ2F¸x œXkÝÿ+AÖ]Þ©!ËVÜ”È;œ/ ![ºÿçx$²{¨ßý~hÜSº”3q œX)fš(O”Êjek;£9ý馃šèçÑú^ûsÊ]çÌEp ‹Äeß NÒ_ƒrão@îå=°ê©ç7à6^Îú!8§b.6uS7\,þ/Òóu:l±’Z Œ÷ª¥*šª› yž'w‚{'üâº÷í°Å};Ab¿ÍÕÙê®ÌG;§'…À×%ðÀûH¢o72ZÓ¼!íÎRZ¥aÚ\Ï–Qg²ánÃô¶Ð‹Ò¡×0z;/¶“ÕÂÌjGÂ=“XŸg›k'¦±Z´#× +/«• +oKCÑ‘Žk1÷º1=+Ô¶oétây4• ‰Ü(ñ¼ñtWÿáœ>&ñy=âÒ —ç!×?‘´ïráR„û:Y&Lyž'už/„s!æ¨K8§¿È”Ù’³!±‘çIsð›S¼!œã"öXÇÚQ4m·Ò*í4Ï2œÓÎi»Å=ß³‘ç c×ëf%åý­ +Qj¸zËš¯Xf?©¤ïÁreûxÕ$ËZHG$½ÐÍá}Ô¾5 +>‹&Ý >!œ}ÂÍáeÉ÷"Ø'$ÎÇ$mfÖÌyÎØw}3Èþ‰±¡B6ò¯À±xd‘Y,Þ*¬¸~÷[V+û1PT°iÓ²,Êh1kÛ–H#Ïaì!‘óðoà8hС3ðA‡þ”Svȼ „ðyÿ K¬ÊSú3c’ßÕ¨QcB1€¸Yõ°‘¿l¦”é¶U*¿¥‡Õfº“‘i'(‡|ÅÌôÆŠe ,ÆÒ((Z„VíÿU®LÌë@ŪOA‚qÆåŸäÊÕ¶] n<ö»¿­EùßÀq\/¯:8Q‹V6ÀMŃ®žhÕj+Tm™l¥ !‘A±È¿p© +~éRYü¨`¾˜ÕF5¾Û8Œv$5-5ò/éÆ&s ¾q‹»˜om'«0 +ß +ƒ- ŽRrÒTÒHIEóŸÊõË´ñ¾Ä½žiʲ¡ç +EŒ{©ÔpÏ3˜“o–^$ÐÊY!ëz,ìÕµˆÉ©‡ÜýF‰:û„2Øi÷x7"6k|†+3<Æç©SêT§lZ,\³O +ExÏ +×>+ïÄ1)Ó+½]®cyÃ4וy_lQ_ӵݧ±*YÿÔlÞPÐj oͰÊÄq﵊g€'AËnÓÂ\ð´cåÇpÜõ< ÏÞÏâVг߀ëÛMð\€ñ@ž–tˆ±jeOYß—Þ–ÅÇ ÈåSД¨ˆÀJð™ÁfE¥ £ÍAß7Ážë\u/}¸Yßn>²Øçòlrùׂïì0â›’2ãYëA1îoÁCÝ4Pw&KïéãHÞÍà3ªgÑÙÈ÷£Ð®ÓÓÀ9òQ:ûuŒqbMÔ©NEÒÃâMËŽ Í„FÄ' G®ÇòCh–×”âæ|CÇ€‘¿)å,šBñÏëBÓªéBK‘¸ˆ)0¨!iË51ÍšÑÅÌêªÄ®Ï>û°Øï@ÍBà =»cöQÛj$žµHžl:Yr|²émצeu2X²?ƒÂ÷^{ÊÕñ€‘¿éîeÍéÎ M:³ù-QçW‡ÅêÞ-í"LµJ±úSv<›Rþ{Ї]?Î +Í;1†¥üš¡B$n›}_Eû£}²zÞ,b}×þüùZ¸ÆµÂàIæ5ÐÌzP)2椩 +T §l 1æÁ¬,¦', {ú3Pä²"’?0èâ\Ÿ>øÀ?Y^K¡· ž¶O¹û_'¸/‘0ªîtu…î]oC\l5ÞJÇ xë¡"ã“E87ÞE¾ÕIü|¿!”SĽréB‡=Ç-NgJdø Ú-„Ô™šÕŸªãrÀÎ"ÍŸ*Æ)·÷5ðÔ^%8\'°§=H»¯ +‹ëÔŸS&»^•T£ÆDcHT +Zü7¸ ˆEËšHX,ÄN§2 ¸Ê ³‰\WqX3N€¬Í”¯ò²P÷ÁåþÛà½üòtúÝoÕñYí~wåä;/ÞÙr: +Ë æ9O>} ñ¼²é³°æ¸ºôµ´ÊûÝo™ñ,KЧ¹û¯€æuলÓnœ‹`.è¡ð(ʋɋâ”s× ´¯W13ï6Ô€!ª(éh™9 òO‘]}C!Äï0¶îZ¡Ì‰f<ŸO‰mY3NÅZpQ>БÞp±ï‡sû:\¬ RjŠ`%(ëNm`vÁG]/CÏS¤ƒË³\Ð;éƒe|g@9ýƒ°ã9dÑ€ƒmõ§Êx–%èWкN|n8ªÎñ±`6¨Gv¸‰Ê³Ó¿în–ÃÇ´¿ >P^L{€šøª5úhI;¡TÕÚ-[® j¼¾ŒV' ®ž”ÒU•牥z@íZÕšÍ#úL±vRJaYLO&÷•(“‡IðÊHª´´j° ± ¬Sζ¸žX”'ÀEyŠÅb1TÜŠÙ4Ül2®ï‚MÔ',ä~ðÏû7QΙUQìumÅi5PM•ñ™€}ˆÛtïýHü$nÿ r ¦Áö7¯k‹¦ ìft6R¡²ˆâ‹]ÈŸŸ=ðñ0Ö¢]TTϲý ÚEyá{Ç ¿†­è<ŠÎE`œPè`øÑœ'Þ|p§óh;”i IDATâÚ¨å!ÛÁb&¨­¹•ãVÁzpR.‚]ªìÍsˆk!W}KfÜÉÛŽë= Ü·Á.OF'`+¿c{ž2P›à2à»Y Ïr.»aêÇxŠ;yÇk=¨­Ã(Ú ‡Î›˜vòVpÞιà)"5ÖÓ<îòOŸeR¤± ŒRÍxŸhªœP~à {ru6¶ƒßá•êY>À»òVL¿³b®JÇ¿Á ¢‰M‰ü‹Á>— Q¬ß—¥(×®óÁo;Ͼý~ؾ8Ê ­Ê™Yl);þæCüœoÓÀ÷z:Ëa/ìßÍ“ðkÐä¯÷§àÙÿà`‹…îG9_()Ÿ*?Iä/Z¿öçÏuÔ¿ÀÿB|RêÂdM¤¼Ôö=P üCp¡J‰ªàcpaÛö÷1Ä?à±Òï Aü!ü®øGþ>’Þ· UO(e±ããÍìð4xüÆ/‚›¶°O- øïh“»6Š|¨æ SQk–à÷dD€ã¾4ýÊãœíAVø›àü_;H–r—Á+Rjê„™ÙÞ ?*ÞêÚ{ÉȯÞûV }<óÖÝñˆ¶Û0ÿ9ÀÏá#xþ5xÈú›Hýß:XÑO€/q'(+Ž˜UŽ»­ªœPúÁÆ:}÷ƒ;´GÀ¦¬ ï"÷›·¡Ëó„јn“½à‡d}hÚ¯ßeþOÌn€¯‚—…¯D±¨zeÿníOŸ‚‹Ç9xnÎJ×nQý„ñÄ +´Ï­N9sOè e½KçÀg)cGSиÀÞ_âz6O|àÇó*kµ(~êQ%‘sÿU°®ß"­0—E™gM!F¬&²?E¢mÆæÌw‚Ø^°8ªÿ Hc¬¨«.ï=h•ãnEñJ€'àÍk,bq*¨ï Š…UT̉Ñ÷›’›åyB™ñïáY†1e»KàIn–kg+³ö¨VîcàÆl&¸1*¢xRVñï ¸ÙZîú‹è¨ó7áŸm'¼ßôk­h?a-»f½iGìD|ÇO(5j\GP_E¯7;x=ËÑ2òª#¬˜Âo[ýàÿdaïYd·Áf«lOŒ›à͈ SÊ.r4øû¸ ‡ r«ëÇJðD~ÒŠNUŸ'‹ÁçŠ*:çê<r[® M05˜ÊFäËãCTQüƒkC‘LÇ/Oùé÷ +b2ò*¯ÈI6DÙe}¢©Q£Æ ‹”'À—@âwÒ¦€ÿŒV9îQðtún¢Lhf5\H;Í*^*2îŸå(Š‚«e;æy¦œz < `:8o·Eú¨lL­Ûª¯h>Åß>楳Óõü_†÷øi)2fÙÇ1vrŠh…ˆ±‘‹Þ/Ӟņ¶Úšë~ï@¿Æ·"Ó÷¶ØŠÎ:zªŒ¬`­~À?OÍ–+@B¾_Ùì?M”›ˆç©J0¿*ÙÞ?Ulg¢1n Rró¢.Ä\pžŠcN€›¿ÿH”7WóAqËap#÷V&_¶ƒ]°ßož“²Óý­nw™èO§± +Ü +¨°ù!h½q'ÚµÅ5jœŠæfÃ&`_¡˜øn{PŸ:Á²8S‡Áw|äz€½¡(šð§¹ýˆ›ˆU©ïµD}€÷ÙiK7fƒ›¾ñ8v!ÞϘØ ¨£Öøv¢>Éà®Nb,Í»A¢x$Ô£áÉHþ3hÉ`‰bÙ Aû4H‰Ržµ‡Á9Œt@œ,7H.‹°oO­3@¿Ÿ"}ÚÍcá~ÿ&hUK}Õ îì †æ;Oˆ­|Ãð| nÓ^´Ý°¾ÂMbYßß6lÆÄq{Æg`;ŒŠ]¿îQoj\k,D~àœ¢N1Í¥ ã¼>ƒ ‘Y¶¿‡æ[¸® =öCÊDµJРùAŸbð9ODì+ðä-H3ÁMÑqÄýÛOÙöÛ‘¿Á¹^±¾ß+1öçëKa=üíwia,ó5@=‡¢xiÇgŸ¡œùöõŠOas…bׯ{Ô€1¨‚Ožr`Û©¦  +WäsÁÿ–¢Ô— ÌU ÜÍà)2=ñ"xª} À½ðÊ‹Wa+6ÀSù^´»hîTpœë-hÐ|Pp'âϨ›–—¿Á¹^ñ üâ|cް¾>ƒß„éñc#_–}|#±“ov¿gP-HÒ†'aoâb×;‰~´®Å›ÜõðÚ.wí +nì @èD Èîp.¸óS ד`ĸ¼¨Z‰…µÐ+,â“b£…«E4NrÏ[T7ÄbÓzV̵²¿vm‰—…¥ ÑZ¢?e߯žúÂÔ©_ÊÚ“ú@-PþO BÑc°ià¤Éð¾Ø€—,ô»ß2^&ûÑ:/O"=žU‚Ýá~Sæ¤_Âöç‘ Ú’u®Sn]Ç £×ºcD–}<v² Uìš)NZH`Fa‹L¶ÀÇ#ù'\?ÇŸÃÞÄÅ®w +÷#$ÈJ£9õüU9³À]F?<[m-¸#ŒÉL« –µù;­ëEãt5È>Ý*À¬Bš€n ãíà |Ëßÿí®þNGÁ ñ9ÚYÜúÈUު队@q‡Pû\¹Û#÷_#”iìùI |÷>#¯Øþ‚m­:³][K”ÏÃðô}ÔMˆá]Ï*Yÿ~äÿ3èlxàíȲÇÂNîG«Ø!µÞ|…ø7ݯw²¶Èã]Ä#«~[3ÑŒ]¿îžÔœ§ˆì2ø¬ðwíèÛ¾HD¿…(ÆêRePTã´ÌóVÁzp'Ÿ§õ¬ÈzÛÛèú4q3Ì2(󼪵šW.†'D1K é»ÞÛaž–{/H̯€æRE7Ú÷Ûü1‘ï—ö¹>Ýve¸ܽeඈo +ÕP¼ Îë>Œý40œ3'@}ª?‚§ôX ‰±àFbGߨx­JžÙÿ³Hq{N¡UìP§ï~ý7_[ùÕ‘5‹B9] ;ç xò<°I‘r +‹U•:1 €ÎEN€ î!ÄýWEÓaxÍa•+ŸÑ”h¢(†ÁÓ»³Ï]J‰>ÂE~*xj=Žôé¯ úáã| nîIÐ…|Mô¬–ûkÈ×rïrý˜n€Ê˜ ©üÑÒ`ð‹]î÷ä;qúŒm+üÄ®·±Ü+^7è`!¨´ +\@6Á;C°¼¿…1®‹ÊÅËšYUŬqª“Ocj«ÂN`Š‹²X ¾¯‰8Fgà¹t!~žŠ-‘ÆxÜûµ»÷뼎 ‹m¯§'‹@ωÕqMÙ´ÕD˜Y} ¢ˆ÷à?†˜’ÀñÜ•I±kUƒFEÌSp+£å>´]? +û£Ïâ5Ï0Ü4Ü‚üàN} {X9*EP¦L78·g€ßÁ äsŸ. €ïÖâ`¬ŸQ‰ÛfˆtJ±µˆ µÉ‰å/¾ìt¾üÐåõWõ·:ÔnÑú>ðwðÚÙVÿ²ìã; Ëï»û¿ˆäÉëÑqMÉlž±´õ–ËóctFשF „V¡m¶€Äl™Ó&woèæRY1ô»ß2fVß%4@À¹îÿ^pÑÒl÷íðî5¥Â—1Ì9 ³µÙ ¬\Eá¼³t$Çá(ÈÞ¾$¸)å?€Ï÷!È=(jÎV¦Œ:ê9~E63£.½ rp,ØçàâùWàâø· ÷¢è;È[˜kÔ¨Q8 ®W_€zm)]6¥­×&uOq/€w‚öž‡7·4AÐìü”Ú*,©mvˆ£àb˜ÅLðÄWTÛ¹Š™Õxcšq­“ÊDeê?²Áöƒ'[½¶tÂÒ)¨%ÀdW÷Fýg$ÿvPuÚ—ù¯QŽÅö€ÿU¡s=½”AM˜kÔ¸±qïœ×ëÁur%:»^>Ê.3x3¨›ô&H³Õ3å›àÁHÙý½QW›b¸PÛlÅðá¬PÀÇA–l/òm‰jfVã‰3àé³þT5žøNtýWÁÞ¿‚cª¶Ýïu¨?Š0p˃àé>&bè71y:5jÔ¨q½¢r<‹˜ÏE‹@B{Åý,“/ËeÝ ÒÉ ×0Ë©Óõ¥œ›º^×k¥›÷€óÙ Tœ}¿AX šå‡hOª`d4@ó§Å ¼Qm¹³Pyð>x ×Ðl*¦„Ö)3«N`/x +~$Ò3À——§==ÞõW‘YAUÃVܼjŒ s@äãÞ<ĵطÁön9 `ƒKgAï–o€1cõ<Ÿ¹ÖëêÉšc-q×SG§¸rC޹4àÓ W¯œçÁµ± ü†Šø8Q4Ð9_û @ön§Ê=Œ¸WÒåàšc#¿Žÿ–LžÐÛé£Ì´Šövƒã+ ;}w¤½¦»züœçÊÅLŒ»‚¾Â¯¥S"ùÒ<µ’Ú +޶¢Xç¯@º6  f¡‡kˤ7uo¨DýZÍÁ[Ldõ‚TlyŠ@D "="Ò‘¯Åã ™îî[i±ˆ’V¼#"ƒ‰2÷‰Èé ÿiw-›oÈÝo$ê²ò[‰”yJD.»…Á勦DÉ>ˆ´7fêTGëT§ª©)iŒeù‘6¬z†\™ìuqeŠä=S¶|êY­¼aþ¢c˜Ê3èò ÷¸:÷ÞvɪsX†Һ˜>í®[ ì°tn0œi»Ç%¸k„26NG\žîÿ…Äj©(¿ž3ÎÙþ[ãm¥û\þ¦p³@H”šâ7EÇDéõ¦»ÛŒÍpcð¾kë}—yâ™DD¶ìÓ !qӮޥë(’f¹:‡Œ{ºQœ.œkÙ4¥HêhêT5M?iñhp­Ï(Ó#íá6áG[€FŒëC®½ìu‘ñÛœ–öuj$oÖ3Í×ãڲƧj–øàù̵Aw} RO¶Ï —(ROèGO|O'ú¬‘ƽ^£üyñDôU!1¶êÕ~åa8Rþ´´ŸPõ¤ûr¤Ìp¤¾wÝ£0=ìê[Šÿì÷pÚãyáf Æ1nºvÂÍÕ1iÿÝ9m=ŸÃË'´K]ߞɔ9ä®e$Žá‚ãñ¼ë—µÁÕúSm[÷º„c›å€ôŠç.ß]°fê„ÛÒ5ÆËsã§H›•~ïã_ñ(ëDÀ¢‹(nÒ„í¬iW$6†@ ë]VÀ[ÏX¾ù‹æ[áú´ís@Ý}`¤ÅN ˆì´ÓP…Õ”G9u= ívç3Ýoè›áfø¸wõ¬6Š[A3ÏõhõÍa‹Êz÷À–õVUÄÍ›gÿXìC´Ç#IáplŽÃ›ôæé ºß›ÑêTlâ>žrýÚ Îß›Ýß/€ŠÒÙr aëOÝÿf}(èû}|!,½­¹ ~ÜÇ .Ê#®ÏÁVŠ×µÄŠê™ºw|Ö­žpß ¯Ÿwص¹>ÞÌ|ןí(à÷¢ÞÔHA‰['L×f€>Æ+læ|tÎQÎaÐÖ#ˆgÐ¥r¬.œ³ñäÇš/…ÛAߣ(¿Èn”¬ðÌÄ͉{ºÇ¼OÞÇz?ºØ‡&¼'à}¡ÌDÜ—Iha“íSÞ{Ñö¬º/¢sÖIY,MË‚ßÏVÿ\°Ü]àw¢^6ó|rÜ ~š¬…N¼bá®§‚¨ü<¸¾ üæžðÿfÊüÌ¥m çÄ›À ñ§à3ZÊv'Àqžb΢֡uÓ¯nÃcŽÉ‚ϸ«ä=€^Ro‚7Ûüúô!8{à¿Ã3®/±˜'-P+ÉIªQ+ˆûÜÞjò΃ü¨li…Á¼ëÌnP“¸¨Fmì9ªú _¹Þ„í9o¬Ú|2gÊUAâZ®–ï÷±´•‡y^V€÷Áêªqj¯\D-“Õ*XÃwáçΦD~=Õ‡i¢âQ„í«5·öƒ õ~ãÞ»àó•õÅþ%Ú}{ä…ëŽÕ“u‹¬ZÌYâgiY+4ÈX*ÈÕ +p±·<0žp}Y¿‘yÁµ¹Äõi<ÂŒëÆ¥ß¸7騌Uý™,Ÿe8/V‚ó~7Ò›¸®Üp,£8·çH˜îß~+1Wê0,»1úü>c½§ÀgQ×ÙÁ1y ö³éI{>ø=éº=|Þ,îwm/7Ï“üâÜ“E®~ë9S÷¿„÷zM¼ +nŒþ*¸÷ÃQˆª€þ íM\Ka&øáíw”kÁÝÈfГQY,‚g©Íˆ‘¼Ô¯~?ò££)BK_ƒ&»A¾” ÉDc HTôµ$®'P TFÐJXŠnž–€ï&¸;] ÿ¡æ¹® +% +;TßG  ×2ö®Bs¿K¾ ü~î2îý \4¬Ó¿Æ˜°p$Ѓ›ôy 9TY Ùàü] ~sçÀE|ž»þÒñ®‚^#ï#wxÚ¥»ÝµùàfÇZp¿çèíà‰¬Þ|w?Ht¶Â›Ó¦pÅ×Îà& ûnz]_bóú 8GCóÄ"þLBâ¯lÿ—@¢¹Êݳe·»w¸®ôá!÷¹ºSØêú·4·¸¶XEuB—õFÛíÚŒ™U¿†V§<çÀsVÄâ—®o«àãÛ|Šx°ºAnÁŸï¡óLj{hMÝŠM§\`)}ˆÄK´\¨i9E¨ASb‰¥n¡²Í`ÐöH‰ò"­JXy}‡ØZ¸gs-Æ2VÖó Eê Óã.Ïn¡‰•jº~-4Ý´Ê\*ø”i«Ï•Ñç(ª”5§yB¨±š§è©f:¡öîéÄý±Œw^ÞXÝeú‘Ê_¤Eò &Æ6epH¨ˆdÕÙ#Ô¨¡ÚÐÍHû‘zŽu\*¨-®ŠÓB“B‘ô·|¯xÅÂË.¸g±ÌŽÃÔ%^¡4Ä…Ìÿeæg‘ô¨«÷ 7}â•óbÚîK]™-Âïk†{Æ ’V^’¸Âßî]KYT•tŸ Êv ×…5¾Í̘=$­&ç:¾V__wc°ÆµÕ+~]ZS`\‡ã{ÿ³„ó4eÿ­HÖÅìË +R$MÔ¾–öIuHŠkRÅ@zž•â}‡´kᆋOV£¹c5’(—z¶¬)R¯ø)¶Qy]Úퟋ´{¾XRsšmîÿû¤¸m-¤úàm‰¿£±Žw^ÞXÝeú1Öñ/’/e0˜w%2–Ö|øÞDê.“¦ ÍÃÂÍb·»–j?oN6*”ë~/ó‚çê®=–‰•Ža†mnV_ï‹È’œ~Vñ7¢ÏWå^̼¬;q/–”Ð6y,5ç¥öaÒ‘ôÿäóJáÚY,e´û]ÚÊ#ûAVòP³Qï§d½ê!ìL‰vhõ¸Ôçú°Îõ#Ï«RV×`S‰¶ËâÈ\¥Ç"&û,+Ó® +eÕ‡g/C1wÑ!v¡xèÔ.p<òäÿý¨þž:9^Ú"ú,£î7Oð2ÒT¾hõŠ"¥ð +¼ŸñN!¾Çjñ¨L²T¿qתFŠûÕ”#¯‚ìÝ?À?—²}-E2˜—~’h3+ëý[ÿÓÏŸø —ÿ¯Á÷ð79íimÿÔ=ëÙ¾§Ø½ÞƒAÃW Ìý/áÇåûÈ!þ]¥O¶ Àeä‹c:¾HA£A\†¦J!³Ayå)P6x(¯ÊS¼ÉL™ÈƒýA™.Pεü¨/"·=,¦ñ”?èú³”O©RÍ» Þ„…±Ê´C¢y |—T™éð}=. Eq +üÀ”(3TÂIÉÿ5,é÷àµÝÃE¹v•È›êÇ¢ù‹Æ“Îå©w>¥0°ÈoKÖY£Æw1%ïð~Jû^Nª.Úë°Ýt[Øo–˜˜h¢6·ƒç HRqÜ»ÁE]Í vÑ]üî·ŒF¸®i "ÈMà $.y\Œ¬x§b +Xx Àÿ‰ø-þ¸“>oǃž†Êö±ß¥Ùà¸n~²øÔ¢^ nPbQ;‰ù®Í²ì7ŠÄ“hqðãœ|zBÍú¨Q£ÆõƒûÀè(¸ÞÞ®½¥¡ØÒ­GP0*áDmnhÕ¶lpGÀÏ%ïg½öß@Sq—gÄçʱý”p©éÈ2 ¦Z¸2/ë$N¡•åzìÐÍjë¸ÑÐ BYÍ\€œå¼Ü/Ž™ Š+Šâ'ˆ»,þ4ƒ)êÀä%êV|<½[¸¿d}o¡&Ä5jL$4°”uŠn¸{3Œ{‚4çPæ~/h!& …I'±¥¯‚‘¬¢åvew¢„UAj“—Ž‚6äE¡'3%¤A–e AB¿$dý('ÿeÏ7ƒ\ƒXß­ Ä7à®ëVÐÜçKP`¯kÌk¬ IDAT³Q¦F«~ÄÇ8fv7œpMÐìfŠKÛÀ±ÚU¡’èc=ð¦–óŽ'@¿UœsõÅøù¨q}c­s|8¸×F—û¶½õýi™¤-£Ä]†­û lV«Ý<ÜFÄ[i{,˜FÒËF?´°í¬àYÉ ×5QŸ ©Chz2R.ëðïæˆqOͰ­rŠ5ðÆpœ¦€cdq&¿éÎA¯º|¡ò0¸fYÑ7Áám }膫ÅNú…P/ UÌýlgcŠ[A®ìPǧ¯p‹4E +Fj†žZÌjÕæ™“½#^‹|Àµ×(ЖæÍëû€q}†PK~·´š½/´¨ªeYf¬45Ïü¸PÃWA„x¹ÀØÆÚŠõ±i´ó…ðýXmm[ø¾ˆíë¾N7FÚ ^£ü ñþç­d™MõŠ÷ùZu ͹¾ÛüB«‘v¿ï á<<$4;¶¬LÂe,‘ \#Tÿ¼p¾—1%³úòøïö²äžyÀåÝ"Ô–Ÿ+Þ$³ˆUMÕ,wŠx3Ä™qÓØ±²C®\S¼ù´š†>*ñ8j¹š\oFÚÓ~>.œoj²ù”p.¥,QÎ ×ô®Ý#®lžõÂb—ï™àyïMäoJ;Ž ç@xßšw)X¦ÎZ×Ãâ¿‹¢«Æ}Ð%%"‰7#S¢;$Åͦtðòú>`\Ÿ¹>ÖTf¬45\¹Fd<õïáš)•MÚVÙ>ÖibRÓ½Ÿìõ!±1\ Ž.áb©>.Î +ÑØ +ËÏ.„jg>,~±E “–p1MEhÓ¾ž•v?"ê  ¨vØnÑÔ%Üx¼,ž(½#\h‹lh»„Ýäˆà¤Ê‹`÷¸1Κ¶j˜' +´ßê+ò¼ƒ.#3n#9Ïø…´GWÔ F1BÔï—á™àúóâmü›‘ö.Hkp½&’ö73×å™gô35³ßœnRy›Òôk–ë›çDÓý-§Ñÿ¶e5½#ñ``áuõgó‘·-UÑøÚƒ)Äp”5ùØÕÿ;÷y­ÊVSøl_ÏŸG®eÆJ¡šð–C(çþ +Ô°Í”ÊBÛ*ÛÇñD/Èž‹±H×€¬¿¥%ê|dç)Ñ(bZ¼y¬Éƒ.ÈžVVk(r@¾nK *6Ó”ò’§Øz|Ò•ÙŠkö(ûž+?É•ù (vS1]Qlåš‘VVº +êݺeU¬Mvó‚ÏŒWAÈÿ *ëómE[/ÃvÞ²øÏ¸>ÎÇl6€òÙ˜›èQP|y'|ЗŸ€"Õ”;ä‰ÄLP6;Ä(O)y+8g»Áï~Òž$oÇå@pí*¼X8åuQûZ%}*€÷çôA›7åôQº^~Ÿ2)WóѪT~ ìO§¿çÍVØz -˜H3À5Š`5H`vEîï?ˆ”%Iˆ{Ab5\ˆ' +Üï¢àÚ"paÈ^»„jЦgкPäù[˜ŽÛf¿reþÜ Ü ºqÎÃ&P^ºÕå_Å¢Äx!HLÏ€ï%Ïuõ.pÑU’% ÌsWÁö‹àåÒ—AùsQ埄ûïÀq:+K)ëNpƒu3¼îÒÏ@"‡áÝ©ÃýfeêwÀâ6˜É7ê®ïÊ\/£ ‘u9C7øÑì?À»@ŸðSàǾÈýß~د¹_%|‹@âŸçO¼PGQÙ“¥.œ‹e•€\âeàfì +Êûÿ_ ¾?5»Má=P‰tuPöSãX„8 Ï)™αPL©® œ7/‚ïošûµ”ƒß7D_›>?„VF ¿su¯wÿ¯B+‡G“Åéٛɣ +cë ”­ +U¶,‚nF~D̫୿ϼ zh®BŸ5e®}Ô•ß Õ© 2úð¥°Üt®7i=3…~øoæKð]nF¾?ãY¬så΀›”{`ûé°¬>w×þ9ÖQõ F§ÕºÎK1G·ƒlåA|ÜçÅIß.ëÀï ¸àt§ +uÀÅ© ž¸nû¾Ðõc>òŬEÊ@à?ef=Y‘å‹\R«ž+ð'ÀÃ(î¨ä hù¸Ð­Eþ¦l8/Ão<Šš}*.ÁsJþO¼S,YÕØWvþLðýÝ +à`{éû ©«›¤sðÚ/"ß²àªkKû–õ1ãô|•É£žP?-P¶*>€´b:ÒAŒBì‚%ìÉÉû!ø×úÀqš„¸·Ê.p£y³Ëw—[á7‚'jh‰²ÜpÞ>ïApî®Ífiú+øÆz?†*!+!ÜdMA¾ÙEKݽcðì³·—Yn@œÍ´ÀÝ{¢D;Õ¯.ÐŒæ,ZMì²òÞ.WÏix;v jfSÄìÅ‚¶;>|ò<ö×WeÛYfVÿ;Ô¯²cã3VÙûzøSYV6¦3àGd™´ô€YH ,s&Ýé§Öt×§7Á}<%ÝÂJ¡¶)ÔêàÿcH›Yí¶;ÀEò(x¢=r#ŠF¹ìϤ*ž&ÃrYÏ–ýî÷SÄñ¸€Þž¢”€ÞŽ´È&…_ïgÒ'äÀw¾Ëµe™—ÁTð$Ø,Ù¹ ˆà8ø¾÷‚ïð‡à ­Íê<ν}àüOùÅø|Æuàzªœ®Y`¨Ûª!ÖËâ"øÎSœ¶'Áyü<Ëzø 1ŸþÜÌD¾.Ó7®î»Àﮜӂs7ÆÝ¸|‹ÀSñ-à;ù¡»>¶¾ÂöàV€ßépíR]€Çrú|}#М’Ñ:¼[|¤9oæ1W|”ª¹†faLñKh +¡æ5óŒ‡BS½ Ür­êWöe;ݯO@¶Þ|PÖ¦µO€òÈ']ó å,xEqþY/_=ˆV¸²)ódÞcÁXeï*C»\³Ø÷ŠÉ‘6^YtÃkÏÙ{} {vÈŠûØ(¯lÁƒ°c|²íVÀ6ã*Š©ðŠiÇùöƒó1Ôô?àþ× W…« ûôMx óýàXÝ[®Ê+Ê#šŽêu30.rÊ5n`X"ÚÅH{Xœ Š}¿vyÞE°1¨n;(fRÕ\…çpð¨©ø$¸0õÃËTv ]º(§î0ï9P–´”Å^‰Éfäkrwº_ ýEpa^ ʈ6‚òéÕ(¦$v«ûÍjž®F«Œø¡DgкèêßeB(w½«ü.4Qš”ù 3z~2 Λ{À¹sÜà‡—áf¡ZϱûãçOYW¯«Áqù܈lBšðp¿¡¦ÿWhÝ ÄSRâ[$ÞE¶ŽO@¹´†ý ÷'•ÃjÔ¨a£ ižn€Oõ†úAÚ´ +q=°i -}4ÇU ‚\‹]¬{]c›ÀÅQÑï~×Ák¦†¸b\S,r¿wÀ›úX~“7øi¤Žñè×Ýà"¾TQE­GÜßGA"ô³Da²xö‚Dh²«ghgú_9õ]KXÊ7zB·ˆwLYì]p“Önf”Sr ”;;5_‰V6øÎ?º”‡u)Ä/Ðîìèlj:bòMYˆ9¨úI…ºjÔ¨ÑY4AZUÔá\,ÿH§òÖˆµà)ýìÃê4x¥QåDŸBÚìõ +Zé e»ÕÎî¡]䳿AjÞ‘õL¤ÉbÁ*ÞriH$'ÁÍMà@mOj1¢N÷Km?÷ƒlË߃{tô¡¦I ß3ÛBðDœ%d_¢œ÷§ë'ÐJ¨õïдF5ecQw'öõàN6˾ßÝkˆ{C«ñÝÃhy£,ÏCˆ;%Ê37™—f­‰.€fyyÞ!«ÄfYÅúö|p› v#~ÚˆÔ­ÖBYdÇK­¥¬JÙvÞ­®ôXkâT׆æ; ŠScœµáH?G"×Ë>/Pž…>Q˜ + +ŸDÜùÐE®<Î=­^EÜô5ËIò}0ð€S®Cë@³´n×ø#à vhæ¡fq³À—üpNý€Dz-lÙò&×ù˜ˆN÷k'x²My‘û¸;ÛÛ6Tû°Êõ!&3/êýézÁXeïÇã9p‚_‚w`¡ìûH³ïkܸh€ÄëZÿ¥à"û&—€: ÁMõlð› 6‘ +ÛXÎnbÓ¶£Õ”r•këMÄE~›ý¸Ë«,Ù"±Ù³ýй©m€ßØ:xÑÕà·g™!‡4éAc4ÒÆ™ ï=ðQOcDúnp\®€º!·Á×Y¨8UßÝ›®?òºi=¯ºe¶8‘UXè…Í`ŸSί>çÃdpî} n@Çgh.‘“â1"^Sø>i5½ûB¨‰m™r5]ž)BíâÝÁ½†»7\Sþû"šŠê×r—'$Aµ(Ãkjšô´QÏkg‹´kMH+bùbí•kf® ºë‘zÊÀª®a]Ç„VÏ׎Hñ,u¿t¯xË5ÍŒE«ë‘7¤=úÜ¡ÖðjÂà9"þûn¿£”éèûÂï;üFº„ßF^T³†ko°â8êÚ³^8-ü¾i™fÉ~5ÅþÞ»¤}}Pk kýɦ¹Âuæ}±:Yí>áê%:éRÖ"Ȳ²®Z Y÷†Å¶|‰\·æóy¡¦»ÑûØ8§ÞK,Åò¹vcùçº1¹;¸nåÓ ¡‰î1—×¢‘±þÄÆ¹%}è:ÕéZ§AIc$Rnp£ÃÎ m©c&„šÊ¿ ®yB³?˜·EâQöôyBsH5¼;Râm³›âï¾/$±Í™úxЦ=Â>F4ª¶ñQþæ MBSák® +4î³n SïH辊į=#$êYXåg¸{O÷ÞqãkkºQoSÊšwÄ›\ÆR¯{ž 'Ùvg¸¾¿‘3¦ÖsM»] ãÞ°Œm ¦È1?S„ßëûÂùž)µ)íC÷É"6þoK놶É{Ï"ô‘÷~óƹ%Õ®€kÜ(Èú:ZÙº1ÖïV…»Èå[ëòEœ%X–õ;^Ôñ®kã ÈŽùÉW¥{‚kÿåÊmŠ”ÈFT1Ê{ Ë= ËÐ +Nеè~Ûp¿ý «1æ}­J;Ù³Çá=¦­FÜ ßý®G»|÷APŸ¤SHYYˆžÈò¶”cª|UHzá‹¡ ü&¦Ï‘ +ÆÔ?®ªIô»ß±ˆ-Uo¨H@ "†ïÿ] òúaØ: UX衈d6¨ã´q3º0¿¦”f?¨¶.‘G1zc]Š3zàE¦G ”/…zPãFAÖ×9À&Oñs!hð'—ï%øp«›"eª?Õ-ù)èà@"¸ +¶,÷3Øß“¹¾\,,׸3ÀÅû5´*ýhøÕØ&¨Ïõû +¼^Çvpü,ùwÕvêÄì äQ¤­_T†»q×Ñ€Zm­‰ÞçBŠ@k߬>LFÚÒHËÄ”e‹`2ÒýÛ ¾‡Çï!$X·ƒ›Á°-Õ¯Iážzô€nŠU Þ2#Žù8_u#­ºýˆGÐ|ÀÀùZp.î7öʆî ókÊÛìlE±ˆ™GÁÍ—º¿þÜToCýfq?l †Ÿ €¥Q½¨q-°í1–ƒ;ýåʧb4daiÎ~ .‚ËŒ{U‰ß—hô¥§¬X\ôý ‚U‘.åk¡ê©ô ¸°ÜÔ±T›ßÁvŽß&ÜôÉë=ø¸–5O?E³&JqN€›€»2×{‘èf¡k+å *…¼`:kÀÍé06AB‚õ'xg½{ ð³ å|d Ãûÿ?Џ¢ïðû +7žsáKY¸$äÏÁ‡±>…üš€>µ+bÕiåmõÃñ/‘ëY|š,ÿ>Ð÷ÑnÚÜèÀòVôh2²%Q¾ªi @ ßä[,'Wv·Úë®§c”1/R”1û™à<âf*¯FÊ- à—ï<€gÁ“Z +1¨f$h%qÚ(c±Ïªhrop÷¬¨X‡@œ,f‚‹Ïðƒ{Üñ¾ žÐó"@!R&DË`³X«?K#Y Ṉ“ŠÂÈ +pÁM´ÑoÜKJ‚‹ßEøÞcˆŸ¢ª¶Ó Ïv½äflGÚln½ë_^$Óƒå<•(W–5ÑChbBc³Ï-‹ÂØì€­ÉZíD±ˆ… p-ÐMàv ~‚žΩ£?z?üºP&tïˆ"ÁS:ˆË.Ò¨gDòƒhÌsùòÚt}Ì\o¸ëÍH¹%Be‘W…˜³Ä‘ˆ)¨âÓ‹.ÿ€ä+>i™§\Ÿ¦ 5T/H\Ñì0ÐÇWf¹kç¬ä©iRÓæ}(èÛ —W}ëDÊ”ÕäîsùŸÈ\W%ªÇ#Ï1âÚxÛå³\ò”b†ròÍqù5ÆìØJf|ȪûˆØ +7ÍÈõ§…s'õ-œv}x%Àf$o—P©îPæz¯p^ïN”{C8¿úDäeׯYnçiw_§¸q9)ie,ÿŠð»M½ß†Ë?˜“ÒnMô†øo!U~ƒ´º‰Y IÜò§)q+€-Bŵ°o1…ÓA‰cØÈß4ò}!ùßÎ}Òª0yZâ–ZÈ÷û”ø`>g…ïf$Òÿ²ÏÛãž-ìûy±×¡ï|ÊNN5»,é—Jy¦5•ª˜NÈpÁpÏÓL´õFPnÐå_“Èo™£ô T;MWwÑ1°òëó $Ê•ÑäÖç?¹¦¦FÖ&¨éÞ×'FPRI$ÓÐ-$òÙ1êÆÚ +T…øéódßçÉ_hŸuÏ2G8‡bæMšuùŸ.v}â£`ÆˆÆØ„ù˜Ä sÙvt㘠B¢æOÏçŒCêT§±§^áÖ| ˆ– ÀYñáh—l¬¬iÍá®-»9èu×ó"Íp}Íë_Ãõ¡Œy‘žX-¢rZòÍ~¾.š'¥zHÊ—#}kã«HÔ§öQñ›š庅fHz*I™¥A<$4i;-qS£¦«[O§%a0–4Ê^^¹Ç];ƒÂc†}!q‚Y–ø5¥uÐëÆï´“”í¼žú¿põ§Þ‹¦2§RÝW!ÌeÚ©SêT<õéT·Ä9¸Vê{=éï³¥á~óêÓ?šâã2;õ7ÄǯŸ%­,f«ñÁÈ=íp3§½—o¨`¾Ê–Éžpä,-ÃóߤTéÛTáiLôFRìå^ñ¶ìY $ÊA<,¶¹G8š™gŒäoºûg…®Øi<•払ÞLä뾟/‚g?"éxårį)­€AiÅp¢nñ­ØxÕ©Nuúv¥A!Üo§O®5MãºràD*nF„òøËî‹M¦˜VO4¹WHÝîáòN}*ÇU¹¼•be¶yß‘¸5®ÜÓî÷ !±øZl½*réð=IÉ1ërýyUŠé@xJþBO‘ïe¶õS^ûýkЂˊ2äûÀ6Ø´!|¦BKœuäbÙråÍ‹Ôìg!8±B³Ÿ›`›ýô‚vÜûÐjòó'p#`Å7®®Uà‡ÕŽß>(Z7ªb8¡¸MõVps² +´—_ nö">àwà3oßÙ®m}¿IX nÀò6ž5nLX¾R˜Ú¹«·ÇõãЧN£\ðu­Ú‚¸‰Ûd—w»¿$vEçþLðK9e¸.o‚}€ -R­2ò…„î—²þ€ÖgŠ¡Å‰Ù±,‹é ß€uàÚ”ÅBpLòÌÖGÁñ;`ÜË:'³RÌ8‹s°ßÑFЋéÿ}Äœ } ^w€](âˆÊ±šÒÎâ^àØ oKœ•[Õ´RœŸ*? dÑÄòT1/*#û]àò¨ßh/Ÿ–¸Þ@U¹tÓå-2>ªé}HZÅ9®Ž£ÌX5¹ŸråOK¾©NcOÃ⡱bù²ïtP⺠ÄëŽh½Öûi—G¹ëÙ¼M)î ¿éêXž“o$ñ VRÅ«"JWƒB¥Ü9Üß/‹­«V¯ Å£/ +¿ïDOˆ·¸ZàÊ¿!ÅÖÄ)®î”Å„J°yJ¼/öËó©îÝ,ŽÜŸ)VÇ€«#v?K‹öäÑUb~&ÑÆ°x\ŠpóƲJ{Ž.ÎóâÅα±êtŸþœÆ­â:Õé:HâUE¸È)3$ùJ¦M±ÑLäoË»AÊ´^iõÁñµØ‹½ÕÞ»žÍ;Õ׋®¿ËÝÿ–…N™zu Š +ίà¦â(b5ìÏ)ؾãcXêê¼ÍýýJ$ßUW÷$pÌ-Ÿü=àsݾï˜roøL© PyÇrX«Ó¸n·£˜Ë檨º š\kD¾“iXªÅV–þÛb³dî~™˜æeؽM)Û½éú\$ŸH1WÏjNºTÈêTsÔ¡ÈxÙ¼}âe¢ÝBý ÒîêâcË©·Ì˜Í;,ÅüTht}kȲ‡¤u\S¬e•ÿëÿOˆ=žÊu^—™«ZFÄ t Yõ]¹sDlqŠŽ‡âˆØ¦ËÙ|±vÃgŠ¥‘L=C‰¼Ù±Ì>»U6t°£[zߥA7NñÁ£"€¬iÌÐ|âÑœýÀ7@Ó ¶c™Ñ 6Šмç,Ò,²¢õ´@J´ñxïÙ¡Mø€<© 9òÌ]f¦ˆèh–bÁ +Æ´qs™ÐLJceŸE<0RhN¢ANxvÈÙ°ý·Áy ýEê‹)*jîSKàM$•¥¿6K¿ßý–‰æU†Ý[žê&£øüÍ$ËåO KV­GVÁHð„÷cøqY„x(äáÙ–—ÀSä›°Ó|à‚æKýÈ‹ÞiÅ&©ï<„ŠŠX¤N…©{Ÿ •åû/ˆkwÿÞý}ÀÏ ô)ÄŸ‘JÆIDATEP3Ý2ë½ü.®‚a§·¢=ì4Ð*"¹ âci™[¢”½F¾ð™bX˜©'5_²cYª™ÿMð·Å±ÏSUô€æ MÐR-6¯5@^˜ò‚ÜÙp;‘ö]ñn¡6|l§t·ð¤ðºp×7]èÈåm#oÓµ¡ææÛÂSVJƒ¿Lý wýnñÁuòüª¿èêHŠ{Ö{@èÀgÀ=OÊuñ‹.ï á)J•¿¬gnJ뉧KèôAaå?+<Õ-uc£>å-%°¡õÀ{Æ„'Ò÷%ná1ìòM*Çì–´+ÜÓÒ~rÝéÿ°”眞D³š¿ÖûR·ÎC‘º²i¹ðô³Tüio©Ä•›Rü4ÛΟÔüjº~gÇ1¥µ>Uüï3Æ'›·éÆgȵ•×÷²V:±z›Â9;IVýEÇ·OüwR$êt½¦g…ôvD8ÿIÜšjPÚ1häËå†è"í€åîzÌdî¤KÙÍZàš®®^ñQïRÄ¿lý]Æ@ÍumÆ\,¾/öf"•”ˆ«Ûß”Öh¶?®¬efÓ”Öì!¡F÷°+ÏÐ;U·¨[ÁjRì¿Ø&&[fºË?X ÿš†"ý–r€†«§¨»LçØ;RŒÕW–Ý{ÞX*š¿¯X²0T°ìP¢­ñ¨·)6Jä»kÜìò[rßgÐNœRu«9‹¦K æ¯µÁHôßpu¾ z™Úà¿súU©$ ÝŒªW8M)/h¿åâwcuÔè·d—!¶cbåØcåyìó‚e¸VùxÕ[£ÆD£\ï,Ó×%ˆ{-Ü€¸l=EÈO€‡ÃQãÞBWfW´·ŒÔ@í‰÷ôÁûݯ*‰ä-®ó<rR.[Qdû1q¢ø¨ø² ùÄäVXî æpÇ6i³.íÏlpðT‹a®»ÿÆnÅa´Ÿê>…í.²š$Í7kóÁÔ/:Ô—3à˜†›À¹°MÛ!§áãœv~àð§Í¸k)|Ž|bw?€¿ÉÉS%¿ž’k\[ ‚Ê»$î? *?‹´‹ì¥HÛ²ß º¾iWÀÙSçìCË âîÜD›aÛ1_ùEòmKÇ+6NÓœDÜ^¿$ä±þ¥Æm¾û5î=Ò# 3ABnÑ…àÊ:(ÌJgkxÀëôÚ^N0"­Þº…2Ô”‰MkÓÉ>ôUXKÅ/S¿•¦‹l˜½§‘ -Ó¦XR·¿Š”›I+u¹r–»éÞÁÛB¥Çظeóg¯Kq¯SjFfºsŽ…4.ÚŸ¡HÿÕåðá\›!>b¬ÿ÷¹2Ï +•¿º„ó'Ï+Ynì4èÞùCî·'¸fÉ={¤œK×^ñÑ>5©™é6#·PYëQ÷ûP¢î¡.ϳ‰/öܸá’þñ´p¢Îuªò)Ÿùeä¦Ë«ÿ÷¸—vVâÎeêo¸—¢džPÉï ‰+NÜ)¶ÉxÃõç×‡Ôæ¡áÆPǯW¼{̘ H{á츅×GŒëÃbÐᆥážu±xeLküÂ÷ÿ¢øÅtŽ{Ki0ÖŸ¡Hÿ!\È.»ûg…¬‘Hÿ5 +5c§%ís¼N×OºW8ïs¿]ÁµØ÷gÛ<‚2(å\¯Îâ‚´[(Xʳk„ó]cõ6Ä[=‘4%܄̑ø¡gp}èoåÛ ç¹ì-â+¿Hž"måÓÂLÌ:¦O¸&“¸"ªŽŸ5n‡Ü½Ø;”¸Ÿ€G%߯Á ô÷'%}:×tŸ[›î~xM̤NpEë璘ƒ¼oH<¾2„“êuñDHÑŒäNˆ"Û% Â:(¯ã“ÝTXã¦×GŒëÃb/~=®Lv|¬Ý­¦»¥ÕÉËÂÍX£D†"ý¯ÓµMƒ?U‡×ªÖo•µNºy§7‹Øæ”Aá<1R,ÐÍR)î~±{>ýåÛo¬ïYt»þO”‡Á“ñ§®ïj=×õínW×(lùn$Ü£ààȪž Ãù [úxR?çúlCúG¿FqÙýg „ñ×<ÿàƒÁsþ´÷ÿ+?Yî¯ä´©Þ¿ò<~:kú5jâ_£FT®y¼×´ÉàÉá0ÚܬO2×çü­QïЙÍ-ˆ³»ÀSÖ2x9ï‚l̘›à½àâžË{á­H»ÖH,²1Þ—¸~nvi¨´4ŠöÈWsàO Ý BÕ.£Iî÷bð¿åUêN—îOŽ«]})7Ê1ô»ö¬²*¿µœÝâÚÝgÜ Ÿ7‹EîúZ´¶•àX¾¾û‹àÌl¬tåB|ï£F[;áŸïDöçð²öͰeí5jÔ¨ñí‡3xVhF§ÿ¿(¶Í¥ÚÂ‡Èæéšá4æ]®óâƒôJ±( MB³Buè3hä}ÞÝëŸÝŠÎ7(4?œ.>ÐUß »7G¼c£‡|MñfxáßazYèøÂzÆ5Ab}°ìaÃçÍÞSg?‹{³$ßYKC¼=vÊ\’ް7åêT§:Õé†O*x<ÉõŠK‹`»Îž¾Îynœ¬S8@1ƒp¼¶ð'®Ý7];–xáZˆæƒœ‡[ÁSæqx-ð,Ô¿ýWÁß–+ÉE á#÷÷‡îÿ,ö¸{‹\Þ=îï*è‡Ýg€Ï¨ý±úºvœïðy³x~^eñòµâOsã­H¿BTu­yý¸ä¬Q£F †*vƒDîwý9جѩ ¢Ò Ûv%ìà0»Á…ÿ´/²ªÌtθ§h€ˆ,‘вy°Ê6PM°žø5\ža›~õ‚¬ìS¦€ŠaÖsö‚ƒ¯\¾›W~›îî¯0÷‡Lž©®Ý3‡èß™E¬Ãþ”½§ÏkaŠ»£Û^€›ÖMh‡0ˆÿ¿½»ÇqÃü”ÛS.' ^Zjj´p:z®À 8%7 ¥G¢É€‰Âk9ã‰ãM´»ùžGŠÙcÇN¤Ìk{~†Ç2o3×L´²}å;NB3g»¢ëM*3-׳}õ{“öos3ó~[oâœ^½v]²lbîn€PPo:`¸/׺…~Mò-Éï™2Ó¶§*pvÜà!zžapq€ Ù}öÞj2}ß.¿lìgIÏ„ëÆv— ¶k}ÞÚÞ ½ã¼j”?äûÉm¹%ç½äŠûg’÷I^en¢­§Pÿ._kß–(~ÞßNüÿ&ðß#Ûÿ D<Íq¿ñcÄ wˆ§ƒµÀujzÿÜsmÖPKû®­ˆÁW]ßÊàCd°Ý ÌW&@cñ]÷× õ´ A´·L'sE?eЧ‹…&ÚéB2b å{M¶ðM4ÇÓÀ[”£¿ÄI¬qm\Gó]¦g9‡_@¬Còë’GÍ>ï"z¶ëM¶cBý›nQ{i4û¼­joø£Œï^u³ôf§Ñ›ü;ŠthÁ²ˆ§6#š˜#›>_Gòø*Ò_ÿ<`-²@ÒÝ,Lˆ.á;Üç>Fû âVÌ1ø.ØcÀ‹¤ h…ŸÆ øM÷~¯¨Z­üA +§Jh{dïAøW×tÐ*fžz¥r?¾ƒh.‹ÆûÀ&d˜Ùœ”ø>k¾²ðS÷ÛÄ1`zâ£V¯Et: ¼×Dûà·‰’襼QñÝœï6¹¿E+¼ÀI4Þ½Èp¸åÞ/£9_ üzdŸC·eD†4vç?Æb;Zl,¿á>{èú¹ˆϽímCq…Zý(«­ˆ–ÊÐß´ÚJÒË{íG+Î2ø¢{%ñŠkïBɶ²pÍÉõoYÏÌ!¥6\¤x`Ø€hpï!¹ƒ ¡¢…I]Hþô"céÍüË?3|ñ‚ÑYÚ )Ò5[sˆ7’Iâεñ¬™‹<௠~8‰î×®CzÈzø÷þ>2Ê`#²8GÐ3-"Âû ÷} ¿ëúÖ‹› ­3îóü¯o¿|[süaƽÓL!…]–à³ÐwýJ®~+È+`®º÷7o¬ŸGnìe$,‡Üë>zîâã³d{bÖ!ƒä&a£,„çЧÑ7.o¸>Çàð»Ïw»vÊxÒ0&y†& ´ +ƒh^Š»Ýcḩј]qŸ§œQþs4Sh.“¨PkÄà§Èƒ•V|*¬÷²™I}¾Šh»üµÞ L褼òa#š›ó´faö 2LFÐboε}Žò ‘õÈã7‡äÊßh;K¾¡ +’݈G+Èà<Ž”Û`É>=DtWAN«1Š_釾›-¸ÿI$“ÓØ‚tмÏÃëí\tŸ›‡,¨£“@3ÊkžB“¶Œ&í0õ„úšÔh ÊXíY¸èþB;Šyí»Å"tíñûCŸGû57ñ–û_!a7AöøVßãø[«p­tBðÿ‡hßybÖD´æÚ ˜xÏ#Ëü.^!Vè‹ášÿ +¢¿P[+ä½1èEóÜY(R0* ÑœÄ`ѽÞuï‡ÜßFÑy4æ!+ëÙGçy3Anž£fFRùoD<}²‰ö’8‹ÆíTà»óHN!ÙúzN;]®ȸ{ÍùyäX@ +ì µÞ¸:ßO#<ÆàhEjž¥‹Èàÿ³ŒvÖ CdOo÷þ9äú™÷L!<¤µ¼”DÌ@® :›G<7ïÞß@ãØŒ|ø}j·¤v#Z¬AR6£¼@Ê`Mþvdõþ¤¡îÇ£ μງŒ€qÊY(³z )¶#xa07R²ð-4f•²ËÁN¼¡U„}hî‹Þ0€ ‹wŸEÏ>@±añxE ŸEê"ZýßFLyF ëݤžA ¯Õd`šwa 6*ˆC;ÛsÅõq)¢>šß®±-€Aôì¦cVÚýˆ7³Ü«ý¨¿Ðè`­Î[íh>®‹²Âw;Rb×2Ú3ظU +ÚÛ†æëùt=zŸµz{áâ¼”' ûlĵExɳ ÂcsïUÉÛîÙ‡äòu46IÊGH©qל!_î÷#¹fm…ÆØ iò=©¶ÈJ{Ö yMÆÒK,Ê´7Lövê0’ayX¥~«õ$â™Ó÷Æ ©ü{È0jÓ«¡F•ÀWÿÿEŒâ‰Až ±K+éd™ö¢ )ª›‘°ÜŠ'Ô!DeödgóŒ¡ ¢4S%ÚhúÓíÁTzi +õ4狨¯1Ìd×ZP`r'¦÷|óÐw~Ã}¶1ÏAàë‰kÏ#·Ø:d|;£Íkî÷!…zÑÍ&ê’<¾Œó)×—Ûî³e‚®Ì +ì>µ{ ¹z-çž4&ÐJ¡¿ÒÆýo§'l¾ãOŠt“­DÊà’k=Ï[kî“}Z ­¤fÝõ‹®ÝP{ÆÃé­“P2“z© IÓEÈÓìßÅÀ6Ä_¯æ’ôr|÷øsˆ>’½—ýÓ‚þ€dÜ&Dóy['?Gà<˜ú;ß÷P«ð-öcâÇ,Ã5äªyíbè¥ Ê¶wɘ +šç¤~ |ψN"šÙá>oä´MÒCÃx> z±Ó;Cë”WÿÍ 91Y‚„s1ÚA4yXD?ˆŸXû¼Ì>ã‡È³ßõuŒ|‚Å5Ê­YëúðM/µ–åtªÍ÷7vŸ÷RÞ×Üo­à÷ÿb÷']ß®&>ûÄõ)½Ò‹VR×ÑU‘P݈‚k‚Z‹»H ¯âW‚7)öhœÂ3[hÖç~kOÞžpzþa4¦ï®ùÚs…zúüÍuƒ¢,R¼5°Dö–KšÎb¶“^’"͇!ËXMÿN™íJÀ'q9‡Üìeû׃Œ<;mŠ­Y¦>Ž! ïú‘…5îw+„ŸÛ ÐN|ÿ+‘mߤžfm¶Pë¡Zƒ÷%ѪíãFÚû#àÏ]ŸöPoLÿ1Ò/ >,rçoFsxSßAr`Od¿ ÝH¾!Ùüm|ìR ÒÌÙJåÕÈ_EsMÄ!ôЫˆh&г¼K`ï#€bé¥ù¼‹®/_Ac9Ód{ þź硞ÑC+21ÏPoD­Pïê:€ ¨µˆqå­8Ó+®Ð^½m äÁ¬å´PŸ£ÞýØj2_ÐÞ~êWìK¨¯ddOîË[±7±]ýÈ;VÆ«R®–\§ÑS>Y +;­D‹æÃ0@}þŠÂ¥1èAFñ òjÝBrè4ÞËÓ¿mÈཊ¶´6Q¥¿Éç¹Àwi¼@þBΔÎZjW‹H‘¤eÏ·h…l·2b“x€”ß ü6U?·eŠƒêbÐäÀšßQ[aïFðu4?;ÐX¬CºÆ óˆÎ¿hð-R 9¸ŒC;=“/â®»gʽŸCrù:¢EÐÖy¶BÖy«”W™“i˜ç!G³G +gS+öÞÒˆ™KHØïBÄñ•üî“hð§-h+ éæ$ΡqîFc›t;Ï¢±¾¸o-ÙÊß`#F€Ž%·-ÊÀÜn[ñµì¬YôáÈV4±A›&0;i­âÎü¦û‘°+cÔn@‚¿ÍqÍÓ ô ±°EÀ‰÷&äF(Ú4þd5”ø¼‘öì™B'M1PúQp×%¼Ðÿ12ˆ/¹ßŠmwÉßOÐ +ñ¢µÿ’¸æˆ'ëÎwð"âÏnÄ'I¥ýk¿¬ÇÈ<}_CÏxŒÚÓcw‘B?ü¯ˆö¦¹…×·"mtËÊN&Í %x)ÈY×·¬€á,ìB^Q¤kn¹>ÿ)‡!€·Ýõ;Kù÷ g'0Ìë±)î^²c§q¿MŸeT.8¹2Z¥¼6·¼†Z¡:ŠVŒeöP¾í^ëñÇ›²]H¸~ #ÅÔKq4òÄ”§h]F¬^â#6ŠËˆABFÆ*ž˜Ó OŒ±î¡ùÜŠ²ÚAþ*g­ìO¸¿ÖÖeê{ÅÐÒÇh[âþ4À$xCÆIîP+ ì¨ã$@NRN€<@‚á$µŠ ¿±ÿ· <Ž7nÜ«â~ã$¢ßAD;EíUïCÆôª»w…ZkÜG²UFë¸Ó¿Uï>ê™õÛyØŽÁ ê­ï¢ñ¹²³tƒ¿dòtN¿b¼´­ +þLã«Hn§Í>F+ÑØSTï?±GcŸ¥bƒ‚A©Ú-¸üc¤ðAóÒ…? Òy[;ðÉé’ø¹k¿hË:‰UjåìSˆ÷ÞÖ"Þ®‹å *¯§ñ6‘²ÌZuYðPŽ77è-$¨§Ð¤UêîÌG³YÊî¢ ´ "¦·ÐXœB“3ÑÖE´8Ö@?u&±ú3ïéã)'¨u Zþcd Ûß܃á +"t[ !c%6aÌ‘‚^‡è ?°”ñy/»—1ö©ù1Q/Ù†LŠM8ƒÆiŽzÅuÍ[lŸ¿‹è,ëúID¯1í½†æb¯PÊl;¥ñ€Öz¬~Jm–ÍVaþ zˆn(^.“Ÿ8ÍVseé%‰Aê“G5ãim%V¨ *6 ÑÚ“Meñ€ÖäLèGÆŒy8žÁ?ïtši ¿pÙJöé±(g„áyä%¹ŠŒ©÷ðñ‹”Ë9bÉÚÎâ\v¡­€qj«3tÊ*¯Škü4"„!÷ƒg2®ˆPH +›$õj7„oã%š5&®"h$[\+ €Ÿ’}ND¼§)ï𹸲ð +å÷Õ¶"cqø\ê»E3¢ŠöccT>&ÎýXæÈÛ;xI¬d›=3œD+ã"Ê ÕgüË´÷â‡ëïæ‰[•]]—="9ï^éÁà®ÏW¨ßv=F¹Õìg…"y`1X]há´Õ½>Fspt Z Å. _Fún$ðÝ]â“—¼0½Ô®ö¢…õñôÅY@#Ê«(O@Ÿðé1-P+Xó„C+rƒ&óZáU¿œø2ønâ™Ay‹ÿ]$8fß}‚öÏ[V§\nf¥üˈJ‹Ûkß5Ú^–LXåÑÌmÙ6-06íA 5ÆS¥md¹¼E2žVª±òà’S/¢˜©—¬?… Úá^‡ÂM‘µè{@óG!C×ge•×PÙÞ”@+&z™Úhõ¼cAE°´ÅE˜¢|¾n;Nת +Gð©„Có³žü€Âì™C.Ò1dÕ^Íø½²¨´ GÙ^—_–i]]$Ò9%šA3üØêö6RÏßch…v™Ï–þz ɳ(â¾(Ò>e’eá0á´´P^ä¡ÕôRæÙmKk7Ú®»F­«ÝrŽ |Pj/õò¯yV—´ÈÛgÕÇ‘WâcDÓ‡W­V¡^yþwdÇ']§Ó{·Í¢ EB7[q-h`Ý~Xƒ](¡Æ?ã³@M—k;šün´o3EØRžD+‘ô¾~Öçm´ÑFm´‘ 3 1åõM´<„,Œ ”«"ØFm´ÑFm|Hm´ÑFm´ÑÆüÚgÝ6Úh£6ÚhãÓGÛh£ þøW”£Q|Ùµñ}|^øFñ´uõ¥ïø7t¬±§Á6&]×dÿêÚXÓ` ªqÿŠž§<åî›ÆŸå9ü˜6‚hîbîÏ{¶¼1|x¼D_^Ai|cÐ…Æ?ýYt>ë˹~Љj{ÑXý¤àwÁv ]„.²ç³Žx¢‰~ô¹¾ô¡@´õ$:.Øåú:é´¡dÛ;ŸþJ\÷ïÀÏ()›¶žEi¯££ÍD'Å4œ ñX†/ H·ñ¹¼ËâoÐQÌ‹¤275ˆï @ÁiÊ?× (Jö4J”ô}t̤™ C í¥|ÔðwÜ}Ó(NåG(x5¶?]ÔÒÈSø,pÒÎ>t‚¡™6ö¢cŽÍ´2°NÿµÁû[1ÍöáăÞ_ôûÏ£cR‹îu–Ú“B_v¿ÿßR÷õ X§)ŠOø| ÑiQ*õ|!³!÷»Æó?qý;HÜÉ I$sìÈóâݬ„lÑÑãaÏu°4¢ø„Äz|Yê"EÑëE'6#Þħî6XQ§9âËœ:ðÉÒ:ÑX]C§»¦lŽ PïB'LfQR¤#h¾Óņ½ŒDöóŸ‘Î;æ®ïrí^pmD Í:˜Æ“®á›h Z•À§ +÷/¡œGSVh=‡”ãE”žñGhíÏ·Ð)ƒ+4žãï#4nL"‚¸DsÏõ¢»Ïª£å)ßKøHÍ bÆÿéÞWÜß,åŸ.p³1Þ›H€ÜÆ—üÍ:2÷}ÄPÉ£ŽÝèYîŸwŸÙýÍ(]“fÚ°ã>Ym¤ë/¶¡ç´Ì‚K„é® ³ø¼w‘òKiÅxdõ!ô ]øêlV"y1ãþfßð2âOótöŬ\áp ì,Aý4â½¬Š‚}è(Û(¾*ÝQ$Г}Ù‚æ§ŒâÀ%A²í,â›H~oAÊlñG(ûäNÂE’Œ‡:]›erV,Ç ]LÌ®+ÊŒù>ð?¨7ì·#ƒzŽâj¤+B·Óþˆ¶ÑâY×þaò1'Ý=Éëf©_°¼€ø ¦ŸÑ<ŸJ\ÿéžãèy[j¼ŽÂj¿7c|%Õ8IœbêBı_l¢‚ÛWÝ{#¢Õd¿kç +Þâý:bæ ´Â=ƒý_pm#ˆ¬x”ÑÔDs[(>þš«Â¸ˆøù Åüÿš‡4½S¼Šý!’7g{z½ËéÏ +âï×ë·B}å·~4&¡ôÄyXÆ?Ãûû ¢yûÎ>ÏJG R CøÊªPŸÀè>åR¶§‹Ö:][ÍäX0Úï@cÑõqJu¢ +Z|-¢gUä{Éêóh³t×.׿8’ƒFÃHá'1F|‚(Ó!¸@‰úfüÌ5vœìÜð­ÊNf+¸aDdE +w +)±=x«Æ\®7Ъ0V°â,R*F4s”Ïfx ±“”«`eÅ^öãû¾ ëâÓÞv …TÌfŸCž‘yŠËÕ~ˆü0"T3.ÑXBš×SïŸAc}®DŸ§Ö¢·|çeDÅý½•º/Í4y•Êþ ¸t•³2˜DÊâšcËìuÍwlb—7¨- rΗ!l ÅÝûUd€œ@ƯUzÌ/£þEö9·Ðx¦ó\üšß"åÿ¢Ë³h<—½ŸGý.2ÒÞDóm ~ÜûY47±ôe«Õ#Ô»%©©«¼–@VôÏ~ tË”¯&:„W.C× —ò»hïzÀýßãú³„ÏÓŠš-4Ÿô­é‰ãø9^Bóq ež‘{ZokÈ“i‹‘{ÈHè&;cî.$SGðÛ¶ýq—zOÈZâ«&ÚX…JÓRÂ{fÀ(Þâ)[&„¿¡Þ»° «ß'n—¼ïµ.7ðE:Ê#f¢ùLfˆøË2è(zžd¿ßÁ×H5V‘ña㺄Œ¤ƒ ôÉæ#¹§ÕŠüÝ}È…6GmAŸ˜bAéù)›ïÜúb’ƒx‹»ˆéÒ¿k+¼yüs åÜ?VqÉ•Äב°JÖoG‘"‹ÉÚÙMXÈ."cvšr¥[EZù?ÆñdĽf š§ $Œw¸ïb¼4i¯Ë4†e +®ÜAãJT6ŒÆ1/í­)PßÁWêBô²ÅµSVN%Ýì¶Æ&ⳡÎ!£ë»h{”°ävB²,vÛÂCÉS®­¬ø„ô|SȨ® ãìâ[£‹)4ÈŽÉØ…ä§a ñBr¥¾‚äXŽ?ˆw¹§‹ÛxÑ%´`ý¶koµUXAtS!¿@¼|ÊõÇʰrm߈lç?”t«‹òœFƒï¾M6á|š¥5EzÆðÙû,úÖ˜>¤tŠ`Å>Ê൫–qÄØy®½E±Ã-£±Ú„Æë.bÆ=÷XPÔ"~Ox-åÓ7Ûj2´B9ŽWÈe«©=@ =†ßNØDöª8«¬õ´‚ÜêÞ—­˜¶)‘ÃÄñï2á=é^$H^vï?íêr'ÒºqíRHiå:Gcé\Ÿs÷§\œñ\ÈX Øs–¬ù#DǨǭÔŠÅ ´Æ4ÇÑÜçíc‡ú2Æg/X`eº€Íc„çÈÆðµ)~;ñ´1BØ;4ŒÆé22`ÓJø]÷zyrù6µòZd˜Î$>C¼<ƒ¯¸·Bx¾m<÷!c|¾ˆÆj&uý¢ks=qi™÷£g¾‰÷èÜ%.@õ?T8eÊnGt•°¥÷ j'cþ7Jü†á"ŽÇÝýˆ,ß|¬GÄtY—ãîs³ÚËà0â¿pí^w}š#_‘ßv÷>†_ýmDij +ÊB?b 2¨ ÷ ¯Ê“Vù1D\V¥¯ A3Ž/¥i*¸×™*î}1Y2ˆì b€¼þ¤‹*õ½.ƒ7©õà4bðuº~ÜDt=Lœ4œAÂ>vø¢»½ÔnEì@‚ö³À^D÷!Wz„•O#Õð^@Ï?ŠVÃhLˤÏòdÅÔ]xÃñ†{M#C`RÎe±ïM°Úö¾|Ïýæ"’7Ëh ²<©¦Üúð²>Ä?£äo¡„ÜÞ 9¸¼jéy4ÏVHÁ>K­ñœU_¡ƒÅ™ç8­·Pk-âÝý†;‰ÏžG€ýdÓîô\·‘žxÚÝŸzH^Ec™6f’ã +€NÇáôá +ÙóÞE2&è‘J*ª¢ +t¶š´ôæ‰+Ux)ƘôÂi\@+¬sîï +z¨‘¿Ä1Ôç£h¬­)ʹ>·#&ºŽÉ‹ˆ­XCÞ**àfF×:ê á”Å4z–[À?âç¶qïa£%ižEÏùjàº$zОìˆ{•uq¯â·0ҵϓ8Ž‚¨òús)Õe4×¶ÕQÑJÜ'C° ͹•‰3x)Ÿãø`Ñ¢ì Rç¨=p’Ö”M"Æ Zxû2ñ'S{1¶_As‹»HÐ>pÏ£µÓ^Y]¶¥1€?¾7Ž?pI÷‰_ÕÍ!×s’+û©ÝÛ~40ÆSøÐõqš×a×ß—\³N:„Ú C®Ýd¯ôC8‹W¢IY +âù›îš4z‰ßžX‹Æk Ñ‹yš:1}츂÷ý5¼¼¹F˜7ÆÝoFò)dðìG¼k ˜N47ר\$ãõ:ÑÂ0è% p—kx_ÛxÞª-²ôÒØè:<õyÌ +¤þ_†±QlF3Œ&æRhà­½ô¸ûí8ÐMD|1X¸k~?Π Ý„·1OÓo¸Ï_ .`+´ÿf+Ô2؈˜ï:µQéÛÝ\æÑÔVÏÂ)$Ôó~³BãÕ!C‰WÒ¸ŽÑ>×—NdSÏ1ø¢ã=è¹z‘<Žö³ÅG›Ñü4Rt«ñÍ>;Ü«H1ö£q¹Ix%”…Y´½ø âÁè¸Ú!4¶Ex ÑåIj•ßC¤4÷"Cñâç"ÄÒåa +=ÏY$SOãjÞBÏw Ó!ÂȲ`ÇÓÞ;Qäñ}ÑÔ +šã9$*øEàid(5 >Ž?]V¦"á*>^*}lxÙõé’³[‰[|®GòÒ<—vZã¸kš«i¤ˆó›'ÐølÅ6>̼‹æ>äÅý^O~‚_dþLàG IDATvâ[ EçhI2jYÆ3hr+H°ÓuºÏÊlàîµHå$ŠVpkq™ë¢ ú 2†ÐÀSl…ö ÅtÙ!¼ËÿŬ›20ãîµÄ!t·®d[¦Çð²÷}hex8àf$ 'ÐÜÜD„L^}àþÎãƒhbƒB{Ðø†Uy>¦_wýŒUº=hlmµ1†Œ™ˆ{¿åîOŸOOÝ‘mVh\F\Šöž/ !p0Oc¬g¨Uþ èýuH•9jièE´vø<ïgaÍ£e›G®Ñۈǎ ž˜Î¸³ë礈ËÔˆÛQüênÑõ?fûì<^É<íÚ©à7ˆ†MÎ„Ž€A~àÚ +qÞœxÏŸ=Ë$o·¸ÏAãsɈâW¯ß@™%Í«ð>~«Š·)¾ŽW̲}–Õ®‘#|ÛÐ\#|<3¶ §6ÐA÷B4þëí<ŽŒÒy$«,Nì‰kÞCFÐI÷{y±7¿´5ñÙ7Ñx®£vqe^• ×ÿÂÞ™VÇêÕãøã!¦Ü€¾Læ¶çÐÊoŒòѬ{ÐÄÚÊÜ\r‹h¢î"f1Áš·:ã^¦´?Ægv*£´_¡>bøçøs§e‰%$0O dÖ·ëHùy%, Ö^éFÏu%ãžÐ3e ¼<@9²0ˆßã¾K~Mô»H&•Ìm|mû2Û5ÃHáôVnx×xˆÁ*î7§í͹~ÌàøPÎﯢÈ㢌pyè@Jb ‡4/ý™û}þ7»HÌ%ÞOd_ÎwßuR^è?Žøä(Ÿ6ú:'ÇJ®0¿xo-èÉ…Í1òésÈý­¾»Kq@g>HR¯"ÁˆZãÿ’»þð{mw¢ÄmSømŽ«È+8è<éØŒž=dX˜Wh¢¿yÂt\vQh8éÚÍ3F6’|ïò¨fá%üI‹<¼…ÆÝ¼h–˜'‰4ç+x}Ó…ø.F9ÿ±kã*¢;‹à7Oí§^Ò=I|©]qlÖ&«#pMÏ £œëÊð:Rd[e÷lÇîœvvâ`$ñbŽXlDB2´_ù-âp$aL—Ž´µý¿<¢ÚŒV Ô2ȃ—Q’iNùá4ãH˜¼A~lÀ‡ø¦f’ƒ€æyÈý2B'‘`ÍëSø<-·ÀKàù|ôg9ßåÁŽÁ#ýÅqe\µI¬Eò lúçG… +æi÷ð"ùJmÍ!Ú¼…mÚ-Ä~$?$œü÷à“ñìG[@!ïÞ|vA\û?Gc7ZŒ™±“4ì˜užgá ´’=E½pŸòÇfÐö"ÙwÿQ”#“ø(iŒ¿•™·…;Û9‚dæ´8‰• «È8« ½ô›‘÷=$ €$è&ðQ×IËÌø*Åû)Ï"F¦9¡ù â·Š`GAB(³ï™>ÙF#T»cu#—ôGhÊ‚B®kCÅ]2ƾø¬•(slðYÔÏ1wße|ÐUÞxfí—5‚"ïSž€ÈÊ^öib•ÆŒè"<‹ø} ¶Ëîu‰¸Ì€e‘NõYc…ìHþ¬ø›¤³NN¼… ú3À3® e€ìrí ùC ¯»h¯÷ +þè× a¾¡v‹»ç<⹃øm({îQ¤Ä‹è+‹GP.ËcȘ½†VÀÉ£Ó!chŒì4ØIØ3†úÙŠcÎÏâc¦ð¹ý”?VþšëfƒH+ÏbãÆ ÕèXAÖ`[Êʢ؀< ¤ +ý,ÑÈQ¢f°‘ÚÜA–þYü‘ÛS ±Ål©XÔ{+<&Cdk  ¶Øˆ)ÿ9|ZÚfûSi°V¢Ùq^¢54¸ÑNòz„ææ"ZéŒQâN! #sŽúù´Çü’ûþ5؇JAŠ0ßäý ‘÷/ £{ƽ_Bó°BvË.—‡Ü5Q•g¬/ãO0ä)y‘­d“÷nE^ƒt\Ò'Àÿ•óY¸üLâ³Ejù0o%¼É„gé‡Àçè“ÁŽùÎ6‡=üÀwiü5ÊN9Œ`æUIÏËkî÷N¿’_ ûHø·ðGÊÏDô-‰ŸS¿>MÉ“)eÊ› “r‘»!¼·J_uíÆÐMR›!Î`9ÂÿgÝqXƒˆÈâ f)EŸÆÄÔ¡þô!EegF©MsÚƒ˜*óg¬NöZó\ Øƒ…‚þt!F,¢“¼-ŽVö'PoÆ=Ý…V_ͤõí"œZ¶,Ö I–K7v%ÔÌܬAm£ÛEÏЪû{<‹¥'ÅÆ0ì"{UÚFŸ9ÊsÀÿÝâ>´B1µBšU(ÖŸ;a#˜DÇÜ’©­Ÿ¾ÜD›yx +ŸÔ :PPk+úùµ¥›ÁcÏlŒóž{oÄ51Ø@$=4{±6b›< +Tek…âloeÚ aŠh¾CãA–IìuíÙñÆfrX Ñ ” „ëßOaȽòŠ,¥a5+,í (Þæ,­­ë¿Øù° ÷©?ɱÅÕX1”˜ãx“(â;ëTÉ{£>¹YÄ]f%J¦7lF˜1ÆÐ®âó‘ìG§ö¢óï— ÚêGG–‹`ðf]»eM-¯ÿˆë³Æ¸ƒÉËœ(ÚˆøÄèzœøTÚY¥AG4£F3ø€Ñ1”ï%/€tŠ‹ 2]hÿ(õrÐ*õŽQ ‡~ €'ƒZÀßÓˆÐ-ùÍSˆpc k3ÄK„ ¼1C'á±èCÉn4ÐN(ª~'bÚ²‘ÖO¢ñYEGPFй|kû Dˆ(ðOS\YÏŠß%ŽA¡ "?œqÝ:šÊfJk‰Zèw÷Ý@܊Ȭ¥qÀ ‘"Es“øŠc]øÔÍÉyF@V²™,|ŒŽâ‹·$q Ÿ&£èÈêtRb ²²Ê?tú`#R¨oQ;~±óñ܇¨Í%Ÿ6b‰¾†hUV{¥’­D  _€(/#ç!ÂÙK©¯©²ñÞáS{ñ)r‡Ñ ¤—ÍY]…E4/CHaŸ%;+ßGÔ×ÔØ”ª72Xíƒ<½ÍÁ{Ž^Dw›m_pýŒ1Cräâ…Q<ïž‹ÖîŸÃxÃû”kë8¾ä4ÄUO^óM|zïqDw–ÿÄF]£Þý!›Ã,¤’Àv÷ÉÈõ×Ðiê'k7¾bU+[‘ì6²ø®£܃?³» Ÿ7û«‘¿k•˜’•Ùºð™³ö#B±³Á–NíEòÙ¢ ° Œð 8„„åqà/J´µ1Ðô,g3L ¹<ˆ.¦rß5òK¿ cc¸|á=ø4ȸûf×A wž°'ÀЬ #M2öR’/ÏðÝo-Sû–Úöšƒ²Šá¡ëßu|Mô‹î»eópde¬ìCóq;ð]¶º>&I¦Y‘7¦ÍÇ(µÉĬƒ)üFë’ëO«NÐÜGН™ö6] i +ñMúYo!…™®û_«,gÕßÒ Ÿäû$#§È>‚8‹Ïb ˆ.¸×2µ¹þ +ÉÁ¢äLéß:‚žÓeð á£ávl¼Œ&)GÌ™H|õr¬ƒì{²´ñ z¾ +2ÒiÅog´ƒÓ‰ßy-\lLv#Þɇeôl‰äà:÷~*Ñf°Õý`:™Ãb²¤’yÌ]wƒìä_&~µ1è~çùÇ7#‹ï,ºVðÆù4Rh_%ÓXA1‚JVæòb”yZcù7’°èÇøLäe’جA§8Ž¢ùBŠí’ûì&¾¬kL¾÷¼t½=H™]BFEŒGf àñ¹ÔÓBe¢¹²­ÿÝoSŸÌ¦Jmr¤üœé¤HC¹¦GÐ|ÌàÓ@7‚mˆ'P –Ö;mÀÄ` _Ä)„ È€™"ÛEüUL +“ˆ—ÕNÝ#»°Ëµ9@b°úIÐjåQr!t“yÛŸàÇ} =I^«P›&ùåäß$ÏOVþ?@tó¨Ó–Cm:o[ÈÝ£VGmB¼7äÞ£çŸ !4‚äªkû.2Šê +¡音HŸuS+wò^àKtÏ¢ú øÄEÿQ´-½0G=áNQ»7²Æ½¿ŠVÈY–Ýe¼ûb ‘¡Ä÷ƒ®Cö™¹Mòp)â-‰v‡]k£ÜFÁ#hÆ »ÏPëæ³UØ‘7ä>)O?bˆ“”[mg¡ üYâ íÃïÎ"E6SâwO¢,ƒæ>[D++éz üÑVÀcÐÈ;AÜä.$À† ¼€˜ñµ.ÇðOŠ\ìyŠ.ôÝvô¼×2Ú® ÚŠ\ X‡„‹eŽ»„H£™ ßCô0EmðF±ÑÝ"ÞÅlî̤ËÙös‹æ:$+*Mô/kð%¤giMmƒ.$gZûƒwñ†yr–ð¥‡íý«ˆNȆñ›Ád(ÏLG&{Ka;µRArd -,_uýK¦¾ï~£¨Ú_,I\•ÔQ‡‘Ž2Ãùšë<^\ãþΣ1¸Æþ"励 i›ã ž³-cÐ|&å–y¥CèCúu¿Ý¼Šd[rÞë €-Ôï%¥;yMäòÝ:I&rCî¨Ø,Y=øU:xk8éR?‹Ïu})õàÈR»“¸ÿ׿8²¸. ÕññÅ+²”ˆÒ0‹í "ªy4.‘¯T6»ß¿Æþ8s§AB¿hÕEm1«®]ð{¼ øq=èú9K¹‚L¯â÷°c]_·ñ.È÷§Þ[2…Æ/f=oß7mÌâ]¿ „·y–ɶºC+£"ƒ¢ÑÌ~{ÇR•Næô½EBaÑ~ŒavñÀˉϲ*ræa=<ƒø˜‘^¤²Æ´hü ב²y;ñ™¥ô5”‰•YDcôvà»!|½Ž¢ +u!tä|W¤ÀÞw/[Y¦3¨Ú{KÁ}Žl¿f×ôR›&Ùþ†hý§ÔÒC¢±#xôe4/y5š-¨ÊTÅLê¨A¤L-¢ñ ɰõîÚµøUú,zæ)D“ãÔÆ=äá Ä ¸{þ pM/õr+KÆYðëùÔçRůÒÀ2a‹¼“F–ÑÉ/wÙj¬GBÒÒjÚ~H½H‘qß›k&„SèYNâŸù@cÖyhßëq×ßÐêé{™«óóÙÀµf‘w e’µ ʉmÇk*©Ï“ET²0Oö–V#ÅC$¬®¡9=¼&/“¿z+ÂM$„>Àï,w{LtødÄíO}ÞKù<ý‹H(íG†å<ÞÓRî1ãgx‡Öx; ßÀo-²úY&|Ó‚{ñø~ò½ É…Æ(µ+÷äûe×VVÒ¶H† S»±ÙÝÿ&âÕˆ÷"ÚÎcÑAÞÞqr¡‘å°÷_@㔾ÍãLâ³Mx7ô~UzÉÄOàS®í´|XE†éUd œ#›ïòTejÇÄ  éejeg‘ÂM{2L_ì&{¡S»¿ô»÷•ÄwC9÷ YXÌ €½h²Í…aG“Ð@Ü@j–Õ1D$#´Nù÷]öñCêÝ"æ !&€ àwÑ Ï¸÷R¿ss?BãçÚ6æ>EñYö<¼†'²d± MÔ{^Þ!_è›… 2LB+ƒW.Z…@í1˜4Lh¤¿¿àþfíÁGÿ#†¼@­%~1šÅ¤'»úÕ<2_ÉøÞP)øÞgPl¥9†ÿ9z~3DG©?-ò·è™B^žõ®/Yu=µÆþ&üQÁËÔ+ì HL¥>ïD|oñ6it£¹‹Q=H¾˜Ò¥øH©á,¢…nÄk¶í1O~¤z/áyz=OÞ½ƒø1´@áûdÏý_SÏg“î¾ËÔn«!½"¶ù»Œ*†š¢:ìú“T\E{ìIE;‰¿æy’y¡ùNãËh‘v ”0´P9‰öÊÏðéKêEÚ(’ƒÔÜdÇY©eCÒ#qh‘Uû‘`žÇØ-(ÛVצ¿—nÁ/·ÑCUIÃV/‘Úq°<Š”×hAÿÞßFØB¹½RCoÌ«î÷Íðè¡Öm+œ¤D˹و ¯yôlvoÞÑ®ä1˜4Lø”eê d9w!:°½ß¤™Œà-Â*Rþk\ŸÒϲ)S‘ý[ ~ï·ˆ£V€$q¯“Bd)žPÌÈ8d݈WðÂa„Ú£wIìAãœ6(³¢Øw"/Ñ%4eŒÿ9$,÷ø‚ëãm´Ív¿YtRæ!òðåôYï¾¢øèî9ô\ÝȸMvll:p_–A‘…aô¼Ý„ûe!¹"îw}:ƒz_Etñ»Hî^@²9&ñQ Õú%´bÏó~nD‹Âî÷ÇÉæ«ÃÈ£0Nx_ûQb§ûÍSx¶ŠdOÚ#3øÌð€ZiÇ(gŸ7È›ÄDãƒhœ’tžhG@ÓXGjÁdÀ'ˆ8ÓÇסÉqר1££ä»ªÒA&#hgŸ "¢±ÏìoÖŠ´2Y‹ˆÇ]Ò%Ôá¾ÿ’k/ϵÛÁöö-xäDðÆØ¶w_F‘ŸCc + ²%^÷ãzr¿´ˆY:Ñ*¾LlÆIÄ¿Ÿúü2†Z¢­FчhdÑÎZ²•ÅJKÔ+A[É]¦xÌøUä +Õò6<…ˆU.ßÂÕK+Ã_·"øÊ¶*®!Ú.s"æ]4ÞÝdpÜßØç¶­Éaü1ÝåÔ÷[(N,´J¶<+ctaõ÷6åÇ4>3’ôYäú¸k{)ïw}£eï"™b«ùÂù)–,_EÊp™ìñ2ãôìS#°XªA$ ¦ñÆW2þŽ¥îYK¾¼M>_èe#X¡Þó6‚Æ4í¡|f¸B8qˆ”Ç38H­’AÊ~ ¹ÉF‘ýœüšßÔ•lg‰æN€à*b€ƒî³PPÈ´,÷ïä~êE.«d´ämüYÎFK?DL¹‡ò Üïš›»–EA5PúÂÅ ª)‹¼ç§M#”Kí™…7ÿ–ñÝ$šÿ2c¼ ÍÍJF»•2K¡Z@+¼AD§1J«råá  7Ï\ ÜØ}„V°“H¸†æ7jïÒáC”ç!+ y²>>*¬G4}¿=užøyû[A'&åß"’}ç팑¿%“äûMxyµÉú +’/£…ÉUêÇóÓ>Y·Ðªxœz}u=S’­œ{Ù8œ4;ðÞ­›¹wÔâ4>ø…ßEê·wPŸ³ÇÌ{`è@2¶¦´ÐK­õ1äþÞ§>ià $¬Rì²_G|:Î"ܧvõ + +™"?¯óZDì#ÔS¼weÝ"ß#‘‡Ch’=7þ g!œ¤qF+ +ª!çûOŸàih +1ÂIDŸ±³°­ŽïR¯\†‰Ü+Kà4·×ßÍ“Z¤ÇíYüÇN|ÀÔy4.Ÿ•°}¿@XEBóòŽÅÆÜF‘"K¯Ìmª,ò|«äN3è@ów¯€®âc«ŠA#gQæÉ(ú¬ ¸ $w‹æ&É÷Û<|ÑÚ$#/#9X¤hèÆ{sÒHëœOßK}fàE$cúñ9ö#/FÖÀ¼ÙŠ?árɚ˔÷úB½âÞ€_ðÎàÇtš§ +¡ÏÝŸÞÞ¯™ {àüC\BƒòZEf{>'ˆÛ¯ßD9ËþQã=Ä ÷GS^F‚¼‘Õ»á#š_Á~ˆæãŸ­ðÿ´ðWÐF»³üfⳤ lZ-­#µ9C}‰TË\µ Ý2ý4¬AÄfÉO!EVF°Ù8Q/ˆì\üMâˆÑ° =×°ëÓmZ³ðDÓd'! á ÄØyãò·ø=Ô²ÎûÐ>fRx¥ÆÒ!ýhÅ–<‰‘Ò¤üc¢VwâkÊg)»~÷ýçK÷º6Úh£6Úh +! 6Úh£6Úøǯ}Öh£6Úh£=©÷›QÒ²¬ åwM,öŽÏ;ÿÊýÒ,ž@[ÛQ¼V3AÕ]Q±ƒú1J~ןñ]]hKøk(™\^ÖG´—Ä€gs¾/jïïÑü4‚L:ø,Îd¶ñŸûPpåj5Š'ñIh6ÑÞ«(¦å7ÙÃ6hvưå¥]n5žB‡­ßæ=¤hCÅDVðgC­›Ýuß |gø&õg»Ó8€ €ØØ›Ÿ!Aœu µõû*õÉVŠ0…Oë=HyÀÎEgeDÑò:DÛ1<¼ñûd<@9‰.4†1G2G}X†·CˆŽ/Sžoo!8î~»­·ü–VʃL×`°÷]îwN¦ÍÔ&ÀÚ‚øé OËq0ƒâË&ð'š² Qã«A4Σø\³ÔæÚŸp¿sE(¿Ä!wßmtrjþ¸|Ûãî}–ú@ë4Ž!ºµjgÈ6F;Üï_$[q¿ƒÏx´*[³ IDATɽ[ˆ÷ñ§ÈÀgÖ"[¯t¹ïG][ßtý­¡×2À>Äs|6+º48±Ù†Ñ$“¯|×#¹„Ö²_ÝELv‘b¡šDºÒtäìåK?¯.•Ä:<Ó#¦9`Ø©µ~-_ú[â:wß1”#"T€&¯½C®=ZéöÊäÈJJm(JrbÇö’‚Òè,ý[‡ñÕóÒŠ-]LäÿnÄð–ˆjÖõ× +]mEB!‹ŽþØý}}èHÞÊåäØŠhØ„¡ ჉kÎS>OÅf´*³TܳˆËžæ™#¼º1ÃØ2]ÆðhÞGÏzÍeº6žhUž|™@4ó.ÞÈÞO½¼+³`IÒ_²`V/¾yÑ*ñijå”*Jâ0>™Ð<¢Ðüܦ–×§ñu¶ £öÄ·ÐsÚ*~„lÃoÞݳ‚~‹hÜçÝŒ¢¹Úø,ÏÓ±ŠèÞÒÈÑ=Û|%Ò«xCâù4½ê®s¯;È0¸¶Ÿ_'Ï€ÿ¶ûíQ46fÍS[\i+’yý›A2Î<³èÙ‘Èæh€æ2š á¼&9vEW„²+:+H1“øìHâ³´õzL/ùLÕ‰}Mâ5¤uɦ ! ¹vÓý‹Á›®k]ŸÒ +uMlŒb|œÚj‡ׯ­ˆ‰ÊÖ×þ#êï+èy/”l+«=«tÖH{YéÓ©S-WCÌ1È|~ï¼dµ#FÝûdÊͬ˜1ø%4¿·Xªë·‘0˜A+ƒ!dÑÇ‘û©Í)n°ÄTe©Ìã=o‹Ô{Ù…xó@‰öv£9µ1»éî¿î^y9BH{Á:\ŸÏ—h|Iò=È@9ˆ”w%uݰû,3ÁJãHƒžµÓýM§<Ž]°„ð¶ë§z¯”¬HOߦ6­ï ÔÅYG¸ÓxˆÆÛ~g>ÍñM¼ûý ’Wçð^•¼EÂD¯ëßš‘²ŠjìBòúqÛW]_lkãÒ!£®!dô\Ã/üòæâu¼wÀ=[HæXA¹<åo8Lí¢!É{†%÷Êó M eÿcį—ÐóŽ0Ì]sÄ]µß»¢ëB½€2KhÅ®èžDBf?ý¨¿gÐ =H|Þ‰&ï ñYø.‘¿½ëjOBZGcgô yé„-MÌ8¾…\ujÝniïh¼oRÎ%k{§çhÍvÇcˆ€O6ÑÞ^ê똧Wÿ#ø´Ï1Ilð)¤—ð+"Ûß´Õ×IòóelÁ§èì¤5åC Cø qIؾiÙìxgðýví$‹È, g)Êß…xxŸ¨k?ï»Ï/#Ú›G‚8&ÅðVÄëV¹r )ŽÓ¯ä’ØŒ¹[xÅr’úJqÇðeÄó°ÝõÃö²§ÐŠî:zî=ÈÀ«à]ÈE –Æ\Û·19‹Æ¤“ÖÅ–ì$ßþ<>=í|›d‚¯%ÊUÍ;Žhy)Ö´‘òšŸ³î÷–ÈÞdEÏçÑø\À»Øçñéǯºï‹Þ%åó0µ%ï e2˜þ”ò‰§BèÅ/:иì'£ðä>Læªn+ˆè¯!â.ëúNã*"èøCýï¤v?uoÉ5“‚7‰I×^#Öù2JEŽs#ÜØñÇï…%?[ –±Æ‘ #^€XÏ©Àwç‘ÀBsX´ojÛ=w»«cÛ›¥^nÅ×î&ñw¸àšHØàW&à Ùû)Ä€_Ïhgïm¤ñ¢Siô¸~U2~s™òÞ»ãx¡m«K[é˜÷°(HîI4FWОN}oã6†äP¯{ŸîŠê+HÀO!™a¼ëñ8ŒÈP餾@x@­uí ¸¿[ð5èÇÜ{ žÜ‚h¹Q9qϵ9ß#Î[°=F­×fŒzšÙhfÍQ²3N£1?‚wÿg-Lº£|lÕVj•l·ë÷I×߉‚6-Žl†Ú-ðKÈø4ÏÌüJ;Öž¥8ž \³–¸íöd<% ­¤ñmØBñVøš‹›xC .[l3A€ÛÑÞÂuêíjèÇšÀC4©3¨Ï{ðÁ æ’4+Æýmf•c˜BD±„&wåÓŠÚ~û£0lÅTi7ÕÛh_N}6C¼òO¦‘)—Sx!\$Œ;3Úþ`¨'ñójo=õ{¶†MHAN¥>?Šß×Í3òN#eg)¤m,mubï§È¢Äï¹Ð:`â…¬HãJmÃ÷o̵cBx¾¦A–!¶ñÏëøc`Y©§§Ð¡l€o º} )¶ñüËë°Ÿ¾÷ÄgKÔ õµ¯ê6¢1Y@ž´ï!œ\•/»ÿÍcÚŠ²ÛâdMZY…žÉöA<œ§ ?ÄW<´ ½Ä/¡ÒÅæ5Ê2!¼0—è÷>@ÐŒÆP¼Ö6÷[› Ÿ ¶èˆGñ±UÑüì¡^¿%Ûwÿ¸k“¼’Ä ¢)êåËø˜š)÷LæÍJ߆ŠOœErÒ<ANYÀ\γH/º¿¦áMb;²î®’½rÿ=ü1ô€ï Õ¹c4ã: ôTÆç±XƒÆl åò×÷¡±M+¿>Dh›ðÇB–Б™aÄÔ#”ó|tÓxqÄà‡CeÑÁM⌉>|ʲǽhž¨Ú[m] võiAFv}#±` Þ5<ˆè7¹oß›¾!&$CØ„7&‘"f¯ý2žF,Xqƽ·¿yLH±…\¥Íb +=û-ÊÛ³-› Ô+µÔW‘´1^Oö6™m?@²í¢ÛDcfãÙçúÝÌ6a#xH--Roܧœì»€Æñ6zžIjƒ4³J‡p É•a¼¡½ 2$ìý2âC±fì$·û."Þ7~· ÛËîóKî»]'ÛÛŠ_ÚøÍ!uеyÐ}·5ãYߤ¶zòÔIhajA…ÉŽ+ø3÷,Ç\›7ѼL‘£<`µÊf~•=J󕺒HóäGÀLºšïã•‚ò4[Š·°¨í˜ýÂ$ Ò”Ù}ÂÖw%ñÿ 4~e·=6ÑXÅ´~|é­d ÂØ€Ê½øóÒç2îY&®¢Vº®vò¼ù~õ¿ôë¡9Ís[ÝôºÏ^ ßVƒ hÜ¢¹¾Œw9ÖÕß…1÷7« î»qÄkY^–$ò‚ ÛÝßX#|&ãóéÈûC¸ú6„k,/@‚ò€»×ã®¯ÐØŠq ²‚Ì%>Œâ Š}®·ñ9îݴKr‚ÖnC4‚øSeð×xÙŠ3þI$UŒaÇ© –*hãqD˜çÑó  ùMºÿíÈáqòWJ yµÀ° ²£þ;Ýu¡œy¸€h6yT¯Ñú-ÊyÂŽ£±:ImÅÉÐ8Ž¡9»N6MßCL™¯)×ÏCh¼’+2ø#êç"„·‘Qcœ¥W!ê ŒHaîˆømÈ®_C©÷ÇÑœnEÂ?tŸͯ RÛOz® å’Vh݈¯CÞ–Y4“©ÏíØ`š¦ñÇió\âeZæ¡ïCÏsŠìÅ×y¤Ôþ8ã{+ÜŽŸBs±…ð€]zÞ xC0kõüÜWy§bYsÉßBÏ4‚îuˆ6QÌòÓÂ2Ú"ƒT@kš1ì|áaųžr¿n!FšAÖU_bø‚ëØþȶ@.ÜSÔºJ ¡3ãÞÛßVí©¾‰žáÏJÜcG€Æ)>cžÆCDèçÈ`Ýx÷qÙ9]Ž̥"Ú¼“wðúf$$íˆ\§É7ÞÀï»Ú¾¹EÕ'q ‘Xå߯ï6þ½y†þkÙ`Q£«y¤üŸÂG×Ï¡y{Üýî2Ù«S’멯ó~Ϩ°ØK8²?¯í4¾‡æêۈϋxd3¢ß«èÙŒÞÞGå²ÁüzñGl€áŒû;ŒæÅxz LëgÌ0éÇ'>A^3$‡"ûd0Ò®7¨7Xv¸¾Žîσƒ„WÆ!z9ŒÐöÅ:Š^éùÌ2GŠú6þ(Üùy@óŸ•Éd¼žFòî8’5lÜKܓ޵ ¡Ù#éÍÂŽv"º½ ˜?BãwÑÏPm‡b +Š”ÛÐ\¦·êø=­X>Á§n¼˜½3u}7ñGâÆð„RP«¬íüg÷ ¯–¶!¡Jf“N3CØõ˜þ|øúàýH@¼‡žoš|"áb¨1ÄLéq:†T¬òO3Þ"XsnEãržü˜…¤»ü}¤´Ç€ßŽìGVÉü±Ûñ娈Œkø˜Œ#HP•Qþ½xC&¹²±~ ã¾;†÷¦¥± „ÄgñЬ1¯*¶Š${Õl†b–ÐJå +"EÎSxú;ŒVYAp=ß ÷ýZ‰Åâ^âïQ|°­¦X"îT†ÑÃyä•ù]´X¸Jí¸ÅxG@òã4š£i×{æq|dwìª|·»6+ˆxt4”¦z-Ù´o§ ìÄÁ÷]?³hâ-D¶ÚßæÚ¿™º.6€µaò¶=ËpÁ=±)m;‘ÜA+é ”Ëaèv}KÖ 0®à“ú”‰¿DŠö0Ùã=Dœòïsðü‘Œ¿IþfV3îúô,I`œTphey Ÿ,ĘÒp ÐX·ô|ÀB…l¥RÄyQÝé-ƒíçí ün:ILzÖ<ƒ>íþ^¦17ü)|Œ{hÜžÁ»bbñ ²-îEÊ Ý$6"‚Æ»ÿˆúy ¢â½i…žð'ˆgX ꜥ~ïu˜¸¬Œ]hÞâçn)‚»ˆî÷Ÿd¬&û“\Ù€§¿i¼‘°—p,Ê"fG‘ÞŽîËÄ ]ÃÊ—ƒäSˆ>Î#ÏôJ?”jɃYô,ƒ4vÂ÷7јZû1ŠaËç]?’†ã RŒ¦Tw!™¶ƒâc¨OãÏéïA´=ŒøùÚZ<ˆÆ%F6t º8sÍ/ÐøeÅ~ì@Ïc[WIüRÀgAvË]cŠ)Ä{¦ü»Ð]¤ñ|HÞ™Œ¾ŽhÛâƒl¡×‹dõ×7‹ÆOËÿÍhÜ·â‘'Ñœž§|nƒdðsý2ùv‡ðÂoëëÄ#éqéÁ§x¾‰?*iAƒÝ®í îûn|¶Á¬”çSîÍ‹2íÞ‡ŽrÎãÇu‘úñûÍÇ1wÝVàwß‘ä…!`•ì¬hÈP݈ðM!§Wê1nÍPT·!½`°÷1+Æ“h‚’[ —ð/¡MŒóô¬_L|v_dâqDÜ…V­v:"Ûê° œËH8$÷ÿ_Ccº„ˆ%vo-9GËÔnšy Í}6ð}ÌŠë!µ4ÜÍôÜÝxƒoÆýV‘jÁz€X‡*†Ye/þȈÑ!¦O+‰÷B±Ï“˜!cŠWSe°ñ~Ö¼ô!^rý2¥4Oû»­.F‘âš!ÎtŸÆïÏ#A9Ž_,Ü!ŸGÖ¸ëg§=~Ñõõ#ü¶—E¸ä^‡ßZŒÌA¼KÜ¢Óc° ñRQ éa÷îz4¦ÈßCûnÐj‹… ôܳÀÉø½íøô¸YçûcpÈõÁ~{Õµ7‰V³Sîs“õöÞâÒ†ø^á¢Þãj‹³=ÄÁŒ§1´ ™G^„-ä­WÝ=i…múfš“§Üµ›R×™—ù`â¾î@{cH'Ø¢ä2RvΫb¨ þ É®ñß·ÉòÎV«ÕôëÉjµúoÕjõÿ©V«¯¦^ÿP­VÿOàž¢×¡{‹^“Õjõƒïí¨V«ÏV«Õ®V«»2®Ùé¾ÿ÷jµú¼»'¯½ç«Õê÷«ÕjOàû]Õjõ_Üî-h+=v»Üø¥_ý%Ÿy{µZýIµZýN¢“Õjõïmÿ¤Z­vE´ù‚»6}ÿf×öÞ’}|»Z­þeÆó>S­VŸŽlg³›ŸT«ÕWRcõXµZýAUóZ­jŽßvã“n§«*~X_­Vÿßjµú³jµúµªæÆæðKÕ0òžýKn|þѵ·¡šMË“®òÉšjµú…jµúTµZý‘ûÍ<šû‰¿$Ÿ$Ço³ûlÒã?UóéùKn쪮헪Õê¶À3þÌ]óo®ÝõíýmU²*æÙ7T5¿Õªø9Ž_uÿ¿T­V÷¹ÿ¿ìžï•ªhï×Öc¿;Y­ŸÏI7߯ÆÏç¾À8t¹~½”˜§ôëÏ«Õê÷rÚüR5,§pÏš7V1¯'\¹·H®õWE#Ù^³Ï’~¥i·ÙW–þiÅ땬ï>W­VCvÁ«hEs<ðÝ +å«víFVÍ­=>²2§ÿ^ò¾Íx÷æ Š ÝB–iÖÙËÍ®3äŸ>°³î{Wä·±¥~ÅÖíøØããhRAVr5²—°‡ayŠbv"‹=¹wfGa þì¯áêƒC+©~}‘lìDód+˼<Vqp­²BQÉ{Ñÿ‚┨eЇæö>šÇ^47¸v⟲‰¨Òø÷[(·BZÅ­E+µ¼öÖà‹¬­„wâ+Æ…Ò3?î~³È•ŸÄz|>ô¬-–I×nr›î)´º¾€èîâó¯š'Ï¥÷ô·£yŸ¾×ý6Úh=ʶwºH\ÞtCžCnÁ‹4f<„YžBHà +}˜‹0»ÝõSÔ+€Íè9fˆøüEB¬Ïýnro0äbÏ;ð>N«¶ÑFm´ñKˆ,`YôÉ‹,„âó iô!Ë ñÙµûóçhM„6Úh£6Úh£Y@m´ÑFm´ñ+Œ_û¬;ÐFm´ÑFz€¡mOÃv’Ä>”‡¤“¨‚bֵϢˆŽrݬûgщ¦²èC »vF\»Ñ½ò°=ïc ô% }(szú€¿G[½eÐü€Ú9Åî¤3KÆ¢ÅàÔ¡m´Ñ +†¶~‰=²84;>øeÄ¡×tä1¯-ïIÌqÕ"þHöñõ™SQõ•ˆ6’Câéãñ‡É/i2ŽLþ*¯ âméÉþÙ¤ ^BÖÛ£BÚR,“vHØga38¡3û†>$´6G´g)D Ði‡Mè\ìGî³FS=#æ´“,(EnÙqìD‚7‰;ø³ÐOgýp÷%Ï ¦µ€Ùõˆ†¶SŒ^|‚à ª™˜—PPhOº‡!áoJå<>iÊß¡\Ÿ2º\F†QìÁçèÀ¯z¬òaŒÂµ¤=–wa3ϲõ< =hì,a™á¦ûKJe¯û„Oõ$û´ͱeì;ƒâ¾fÝ÷§\÷$úz0ÐVYôÊ8ÙA6í¥ñ€Údm¡—åàÏËû2ŠO] Jï¾cß§–?®’ÏiXêöà‹>U¼ÚK­Až‡¬zÐx¥Rk³É ¿~ÊÕ¬ÿÌÐñªµÓÞz$ôg‰;Ö“LÙƒ˜3™a+6ÕçwEeŠd +Ùy1Û|"‡Ç‘0n¤^w(CZ™£d_&;;Ø:ÔÇ3øúÑE¸Œ”u–]‹Ž:uSœµ°)’ËÀP[Ä#[èhW̦dá'ÉZN®/Âj³.!ºN˜žwÎDyŸÔd“{¥³!^#ûtËvDWÑQ»r[AFè1â“ÎÒ+®ajV®¥¸Jå}|†Á)ô,}Hr¯¤So'1…h#½âYDô—{þij“¯ »û^À—jµµ'ˆK +¶ÉÅÓˆ"ã5žz£».ž;ÐÜÎ#ú9…hï0¢‰Ó®m«‚™EÇKø„0o¢€é†Óˆf&\¿6á]vÈPw×Z–Ƭ¹~ °¤Aøz¶ôØoGô”uξ |{Î*¢‘£±8ˆ„h™z_CüpÛý¶)ÿsøj‹7Æ96ŸCFúÏ»î3CÖ8¬‹å×°ç]B|ó_Ý@9v"~)cŒõ¡9ÜB¶’/º?™{â ¾¶H¾œAô›‚Û‚æü.Za§3æ¥)œwÿqÄ£×—×mÞE4}ÑÁ5d „NCõ»~A2ÅÒäv£9®¸ûÇð鼇Ȯî·ñÒ-¼¡Ãµ_Aãõ%DƒŠó<ô ù˹ÆÐí~÷22ÌÒJ±‹Úc×Ðø›wðµó1‚¯¸—%‡^Bãýõ2ÐŽ©'ùÃzìD|›ü½dIì¹>½…øä&Ååžw#Z8FmvVð9f*î½Ñß(ù Ÿ'œ)¨õ|Ã5xÃýØ‹ˆ({ W°:CvZVË»~=ø1”4c "LcÔiD4e«9m¯¼’©-ÍnlŽûÔ*¹ûˆø¦zMô¡Äïåáõ…$¶â+ºÎôÑ,à28‚&zå +Üãì!^‰÷!!{)Ì·ñåv³æÒÊg zsCN£q<鮿„»1Äo#š UMKâ(¢½äž_/Rbé•úšÿϰÎõk¿¢¼ƒ˜~ §iwm‘êYô¬÷]ËH°C×VQ飶“„WaɶÑ_òùZ™Fx+~•=„øÇ‘@ü­ŒûÖ¸~$çlÍmš&:Ð*(ËÃhø˜ZZ_r}»‡¬åCÿÞÛ’·ëGÆ¥ñ–dë~ŽMñ̸¿!¯Â.¤¤ã…ó$2FÍËi†ÝZD  ±Í: +ý>_üQÄ«'ð9AN e0ƒOS;ŠÆ<Äs·Æ{†Vñ©¿·¡±;ìú˜ô¤åKâNâr¹L"Z9Lx~R«œ{]_Œ§R¿3„äi–üZƒÆb:¢o±8‚'8€ÆÜ¶yÆ®»á®ÝJ\±®#øÅpÒ#fqV˜ +<ýÅŒ“³u“®` sŸ¹m‰Æô¬º¶æ\{–5k‘úŠ~e±RЧF ä€i终á.—ý0- V(%‘·—ò._»¾‘½ñP¾ú<,ÿ콈VW–ïý™)¡„òR^t(/:T ÖE/:èEª.Ö%uÑAkÐ&^t°â%±‰C|‰Cê‡ö›8Ä&mc5qˆCÛ´C 1ÄF›6´¡mÚÐ6mh›Tè +1´ÒJ+]Ò%ûýã»×ìsÎs~ìóê¿Se¥¸è"iV7Ex”°Bÿ‚§Há~„úy¢çA{—Ї7bc4F/œƒú6)h¶’÷ýÿMù™åÛ“åÿfr^&·Þ m-ÈC?j_ö{]«V38‹ÚgóÍx“å¨x„”Êù¤ýšò°)b×IgÏí%(ð·P_Ç&VëA}](»² +À4èUBÄ"ß% 2|€:#ý/‹ã‹´yŒ Ò«ïyˆ”•7Bš©!ÍmbÒ¯ †7“+(Ã8yü’pLóÞGëa]ëÀ̼]ˆyðßÏçÓˆÛ¾VÌ>l®£~›h%&è\ä„3ŸÀ(ö 1žKHƒ¼•âÕáDç+«)BV³½H¡Y”+¡÷­^#8ç˜ÐÛCp¬ûé}Þ)ê…TÎ"›½°¯âù¬¨lËDzŸÕY XyÙ-ˆ‹hl¿NPbŠ<¨‹dó¥0‡°äêÈž/¢¿%ˆWìKHàå Ð_·¿.ùº˜%ôÌû²ú”ÑKâK²>íëÖ¬SØ2dÝDô5‰æÖUÂÞÿ¤¯û´v?R6òœ}?þ{æÞƒƒþÿ+­? >ŠìS¾Ž}hÞí&$ØJn5u£ù]ÄlÁ’Ä>‚_AÌê¼’«îÕhÜ«æˆù^¬&݆QDk#h!ºŸøÌŸ›(wÍ͘ê+i¶Cˆy^¦ZÉîÏšFžÅV4ˆƒTï&SÆ8æ Î²í†¼Õ{›ûf IDATí-DH»ý³gü=ÓO#‚=AµR²Œâc7KQ-'­iN£•A/åÄñ å +ÈuDpŸ¥`8Fð‡üv4#$²A“è&š·ÓœBŒ¡jßy–1±}9õy•âè–ï!º¸‰ÚrÝl@+”kåѶª`{¯h÷ŸÑ6T?ÛDe+•UÇ#ÃóÌ,s[‰„ÄçN:« w eÿ4áøÕG™ßªhä0R¾.!ó÷$‚*¹ò¼Æ¹lÕþoaÕ‰V³ÇIó·Ÿ!ߢg]çñš~‚CÞšs£ˆ®­NIZ9‰”Ý¢mÆ9Á´Ú—± õ)óQ_šyûõ|<Ö’Ô×o¯òÍ2 R׎ º³•u?ìCý4B£6©0Î%ì§Û\YI¹õ²f#Y`sdàgV„HÖL‘ÞûïD}°`ØA¼ùV*Ú•§dÒYDÉIÿs¤ Ƙ"²•½OZ{·½5Û÷Œ9ëXe8…ˆ¿l«á4¬)4ñÆí@ŒÓÌsßõ¿9Ôü˜b­ì$"´mÔÏc ÕfÁÍThyFãr¼Æ;»P»&hÞ„‹óþš@´xœtêá2ܥѱï2̱ômûSÛèë¿ÞC ø +bº#ÓI}exnâ¾1Ïå/ó…”ûv,G}sžà•<ŠæDq-ÃнùŸ$?IÖg1‚Eç8ió°™à7QláÙ…æû„ÿÿûä;VÅø€,c'Gèn,<ÝÌ'm1Û௿È)Ïàæ"Їڸñç{¾þެlŦñ÷éqG‘Ð_M8mÔGð·m‚}ˆ¶cx—¯ÛLÆ"ß_BØŠ¾Ž¶¸vÆuée‚kéS]I$ÆYˆg$Ç·/ûB$Ì4ßl[-©à HE¸Ž’¹eý@ó9Y×Cḣ(?Ò…ú¨ôÔ•)+PcÌ$2BXQÎAÄuÝÿÝ„k¼¤ÜDü³}#Ì÷ïëì­ª, ¨öF!8ôŒ ¶%˜YìÈšipP쥚 ¼…„²ù=Ü"-üwöˆªw²À`§1N‘ŸA.¶jú2ÅG“ØŒ&ÍiÌÚ× +ŽdþB£WýqD+©Î—ÅzDgÀ$ʶª¡>ºBpâ´óÉÊÐÄ8ÏR½R¾E˜G‹Hk볓w»î0åIŸ’Ã4áŸu|Œñ˜›yçÁÊÁ ÐèpyEýf‹Ñ\F+Ä<+Ü>4ÖeŠ¢­ô{KžÉ¢“âñ}€ŽÅÚ¸E–£­H^&ìû}ÖïÃðˆà¤ +âIÓˆFŒfL\Š”ÊA4ÈWf®øŸ)OF¶b6 Àqÿ|ÖÁ¹è¿/%î}Œh.æ˜ö¤È,JÜûjSÖšhÿ¾ëÛPÅSûÑ<¿ˆú½•ÌžE>†…hÌe_Ì Oö=áË]›¹ÿ&ê×+hÜŠ²Àn àì¦Ø€›“Ö„¿? ü×ÑžØUÔɇ +*m¸F`¦æ-måŬðc±ùR4°f%î¼¹1…ËHcßC¨oÒ¡å®ö +a¯·¶—˜\)™óf9Œ˜DòN$Qv£²Â°¬Ì+´ž–6‹½¨­Ó¨MãÈ,?Ûÿnãq…4a¯¤Øs:«Ì˜åàÿ¢ñ°}ÐX“¶íõ{­jÎLw»#7z)c2S”Ï£…Hè/Gô³úÌÃ|•ƒ€k¤}¦Qûm>›àQ4fÍîI×Å€ÿ¶9êÝ¢øØê]Ä‹êž4*C'â…c”Ç.ùDûH/˜ ì¥sýoE¾Iô#ÅóZ\\C´v ˜Kþ93gÛ÷òøm'ËSh\O£¹a +ÔA_æ‚ÉÜ`ûøeØáËÌ +ãóˆVªö°ËèÜü¶²§]bZ{îÌ—QÛªxz³ØæÅ^êÅÙYC°Ðdûz=aûú¢‡¼æ#DXþLxà¯>ÒŽxË gìÿiM+©v´ò æà²€æÀ¶LU‹€_¡‰}É_« +ÀÆ×KqÏa7¹²<‚:;&åð&_Ÿ¤(ë´TGh›MQŸ¯&ìMÇìÏí ͲfÂIB¤¼¢UN€Q±Hj²H¨¡~ÜLðú¾ŠWŒ™}iz›CZy¸NœðïòßCJòÓˆFæO›'ƘŒÉ”­0–Xž’·Ç—ÓÊ*_Ïë•O5"OxÜ#Ó™ðïhWiôy$[0V0Ä ép)eUÁË¢~\žóÛ~4ß²«¼,:Ð<µ•ü]_æjÄWN#%b+jë~¤­†ûH¯Îo"YЇèpÌ¿Ûë¿ët:}0B~©c„“Íž;‹øìi—…¶ßáTÏ!ÂÜI¬@cþEÔ‡{‰³ŽÍA2d“'éïp€0'¢~Ìóñéðß¼’ó[ +y>†e„£; ‡"s:9Š„Dlô9ƒí‰5ƒQÿ×L°¶ë xOŽP½ßR„¤óÍ}ÒL­Î÷V4HIÔlyu0Møñ‚ßÍ»úJMÛˆgÒ‡à¡/F©>é1“°£‘Cþï8Ó£h2ŒöÀöQ¾ç܃˜¦Ñ[Õ‚ðò}.ÌOd.št·Ñ~üNÿì‘»­ÄÍ<'À$² £¨~†¤B‘ÄZª!e±’Æ–¿-ÈSÚ.“/¨ê-C¬Èz³­ÒÏ"!s8ñûþ7;n·![@Ã4nlE‹ˆs¨íÇü½CHɽæÍY W| ðïïóõ9N°èÌGó'¹5r—bkÊ2¤œo#ß‘ûSÿ¡sê+‰¹¾>fVïMܯÂ1Ôn[ÀB‚Öxgrî RmJ|÷ÂöâBÂÑJÐÜDs°ÊrzŸ0ï“s}”Fú+ +,4ˆÆ­r‹¹L#8EĶ­2ç#-ó.ñšÜ$¬öT=X€4®<ç¡&íÄRWØö¡U]ìWðC}6Sž¥e«¬ûþªë`øš¶ÏÔ—óÌZ>`#bƒˆyÝBãºMž£hjÜÿ¶×ÿ~À?“g Øãß»ƒ,Gü;I+ÉÒÌmb€Yóˆ`¡&Þ“9=äï&ë6Õ1ŠÇ:kæ7KØ^ªW™YŒöŨ‚9~µj­H2÷:ÈŽ¥!F0Ì4¢Ž 'a«Û*DÓsýž zîÞ§Ñ×ÅŽÇíEÂÖÊ„NlGã*BöÚ"Ý™xÇü þm½™UÂöÛ4Rò€Í„­Í²íׯ!~všp¤¶,’]+ ‹Á±Ä¿«Ö—P»“üìà?#«ÅnÒsç%ª¯_BÖˆ/&î-EÂ+¡>Bsé,ÁIóqb„È$DY`"Ì´’^4¤£¤逿?J¹` eúP›Ñ ’ÂßB¯Ž!¢ý²¿ãÀÒÐù:­$ì;¿4¹,3ÉsË+óøã¹á˾A±ƒQ™Fm0­71uKb!ãJ_×µä3Ð ˆ±×³-„#-}T['&Ñä%Œó øc4*?ßD¦÷ä ÿ%þ»ûPÔ½!Äh“Ú÷}4VÉU÷´ÿn^™FËÙ-“쪻%2ëT{××e"óÜÅ96ÎÓhýG+Äݨ»Ó5'Ùlù†%ˆ¼‰ÂÛ6ÊrÒöKmö¡ñô¿çE+ÌCÞ1Ç¥„¾¨C×ý™º>KÆÏí¿ú|;¡­?@üô¨ÿ¿mÉyìCz»ã¢c¤çåéí­¡8• ¦[„Uî^Â)¨ÿCñ‘Ø<¬At¹¸…È7ÏYJ¹ðŸ"m¼Nñö_Ù6Ï$‹ŽJ_¡Q鬲à¥QA8B°¤dyæA4neÂ?9Y\Êù^† [Ç¥°\݈øwVøE˜K0±fX7šŒû}™{ ‰/²#ž€rØ‹VvkÑñ ´Z{ +1‹hþ ¤Þ Õþ~BRäñªhÔ FH;De±Äw7éÈnG 7O9¹E™Æ|’Æ=»$ªêf0-÷&Zå&…ÈÓŸ¡Ülõ!RÆòV~ßCt²›úq +ò·ü·ª¦Ô·s‘@n&‰SˆÁ 8nAŠp²ï{MåçJb«1é'}}gÊâÒAÒ”e²»Ð|"ä)¸‹N¤Œ’>“=3ÞCˆV–§ \#ÄŠD§„nû¿WçØg‚7U…ùþ2jë0¢ƒùH¸ÎFýp ÓuâbO|“pœ±Ÿ0C¨o¿ƒÆá­~±Hž|Ý.!º*:ó¾žE´¼Í—Ãäçx›°Ày2QŸ¤Rãм+S†cq–@'†ÅhÁ•wÔÙøé|B4Á[„¼IìCsl«>oAP¶`YIc”ÑY¨í¾¼lm¾º Âf" Ù ŠƒUÙ/ƒ…16Åùâ—£äg;ìE}püñ˜D¼¢LÎ\ó¿SN RDlÛ%Ëó-øÝ¿·=o@æ;þƒÃäG6zÑ¿_¸ uÃsAÌCKÁID6:Ñ$=Dõd@ZÛ9Òá,ÔìZÔ~‹¤c&ÉlL›F¶–ê@6(f¦O£ÁÝ[òLÙäLILS?s n"‚´h€&pbÚþmÿl6~ý„ÿ{­êZ¤V#°ÑHš”o£±j&Lu2ý(bl¡À1g(hO¢ù³ )"Ùo÷‘^¥^M~»×ûß,R6Ç€ýßm/Yñ5Ô²Õ¿e7»„”ÿåTçì([q®AJúÔǶz†`ɳÀ?o#¦x ­Ê·Òhñè¢8Ö Bì–¿6 ÞQf]°8þüw¶¬ŠIú.K“›´à ¡ñµì¢yÔ?³ µ’0~ºџŘï$½Cý;Iù‚ hÁrÂ×ï6éD6öÄmÓìCó,Oø¯òߨc©±” ãY+ãY™zµÿ.’IyñZÖ’ŽÝÿ +âG?&lã !ÑçŸÏ³Ê~€ôÏÿIæ÷·ÈD*ÍS,&4ˆèîSnvÉ3™V¡Ù˜ûs9˜ Ù :MòIʉâID“Ûp WÓ²ÖÒ˜A¯ ݈1,'ͨ‰W+iIç¡I9ÎÌ™â ùxéO£~>´K3‘¡qÙÿ.šðEmï¤Ñ‘išFÁcÿHu°§$,/·•qÑõM4V[2åW¡‹jž$ü%‰õˆ>†0Ý„Æt5Rñ„Øòy‚v=¢ùMˆÉìþÚÿ6MÚ‘ËʯkÕJâ. +ãhnæÍ¹÷ 9Mqè[[Á›`ÛŠæt^¬ø÷Pÿ"X—Ž$Þ;ŠŸùhœ®û:[â«,í<@q1šÉm–“¨Ï“¡aŸòm­ò£0k„9õ£1ÎŽa7ÛãäG?LZðÆ‘kV¶ißÎñÌ;öÿ2¾e~'‡‘pyŸÆq̹—EÞ‚¥‡°=k ¬ºÉã@ãxµ7/Ñ•õé ⬫ãˆ^ŠÚÔC°T÷!Y'×<.;é°’Æî>DŸw‘‚3×—“µâMR-ü»IË\ü÷þ(ñÿ“ˆ·ÆæØÈ¢Ç㙟Uv£Î\DОX‡)^ÑÔÁ$­+Ù´Y @>ð—y'Š!Òi×Q¼Ÿ…99fCù¿­x%?‡ÆËLr§Ð€ž@ é8Í;:#dàÛ‡&È(Õ+œŸVi§ûœ/Pí–Ä_‡=ˆ]Cm݃”œ{hÌïœÏQÌ0o¢1›ëŸÛï™ò¿Ï!0ƒ2š´ò¶"åÃö;w#ÅåGˆI#e²õÉmà+%åù:ô%îåíOÚ¾dQ~»oއcvæ/±•àœ¶bŒOIωˆ.Š׈sìý[äÕ|šFe¾+uÙ_¡óÍ“ˆ~ Ú)¢Û­¤ædñµõOs^€G“„t¹U9 :¢y 퇈&.%žYëË»€øFŒããÄ£“Â&ÉW,gÅ)ÊFÁñòâïã¨ýI¸ͨ¿ÊBŽæù÷¶èÍxT^ž…<ô žpµu¨à¹*夼K£Yw²~Ss –ß¼Õö»ÀEí´Åϧþÿ«¿øˆ8‡À!Â6Òâ‚ïÕõÃÊÂo¶ý’  1´»H>N£3DÒ©  5¼®ñÕ^–E¸‹ê˜\Ýçù\§žÆšT(æ£I6êÿ¿€øúŽ#G𬖻MÊ~šKöña•l{gPÆ®-þ»üÕ¬–øbP|}ñÞ4.·)>šT5 M˜m£ÑgÀ&” Їþ÷»h2Û³×ÑJðmäõ³ˆ[qîF +˜)ž£ä3;ã ÓÄ)ÈG‘°ŸEËÑxÄÿuˆÞ¿‰ÆÏVÙæb¸@¼ð@‹² È“gNïFBlŒj>³—à šËÿFðÑÈS°cü޶#ÚÍ[™ïFí·m¸"Zþ1þEÛu,¦eVî}D#C”‰ìDc·)“HášB sîìC 9¾¼¼þ[„ñ5”/êúÍÝ%ð ­4ÆëE ü !ýk'¡!ó ÇẖœæòMšwü&{TE>¨óË”S„³ä†¬Ä€—#!›7ˆ=¨¯ÞÌùÍ4j;¶ë­ºõùQªS™¾‹˜ë)ÒÊQ3ø˜êT¶×üu–°‡6Ž&×y¤4sýÄŠLöYäÑÇrâôò°Â—±MØ}HëDu¶I«œÚ‰” ä”vŒp®~šòm£.Ä·’ÐaG®Î¡¾›…óÙ¨¯Í™*k*@LkŠÓnÿ›íÓ+Û Obµÿþ Ï a^dïF}ŸdDC„y6ž¸o+Ή’ïY†Ðì¾ëY`ã —JÊKb6Ûk„#žfú?Jõ6Å5œ½ç¿}ˆ´§w,#¤c6‹Ø4–£FÍÁ£”ãIS‚϶ Þ9L¾bó>n 8Æ`„üÓýÔ[Pf-þß§í˜%0룒ÄCÔŽ Äÿî¡~_èŬÜf1™M1ï›&(ý½õh:ñ€ùˆ§Þ¢8R^¹F§—É?&Ÿ²ì#-<Ìì R¦Iiº: A¯F“c +1äØÁ¯Šç°Í×q˜rÓä$é=´iÔщ{s}½‹4àOÉþ¾Þ#¨ŸgÚ\ƒú*Ædiø˜ÉTfW”³ +Ñï!B ˜>ÿ÷4šûü½ÙHh”mñ˜©s-i¦Ÿ—¸&ÆáÉ”ˆM¤ê¹9eÆ”7 ÃÅLÿS‚çþQÿíÿURf¢‹ ä¯^³‚vò€@øß×">h'>ÌÁ8ÖŸ  +Yþ7·èA"¿ž2|ŒŽ†6‹ˆ¦G"ž@í9ˆúÊ ãë;ÏØ€æ÷óH^Fc\&Àù²‡ýUש÷4Ÿú÷Æ™2 ñ²;„í¼f°œÌI´X`ˆô9EPÃc÷d_&8ö"aؘqŒ¦õ/4[ÖÐC|» Î0è빕j  Þ4æ°÷Q#b9À̬^~ÛÐê1ÏDð[ÑD¬«,§1`†í›]#m)YŒVh«i<¾i8KÚ÷ –†ýÈRe&ñkHi>H£e¦—©m! •­R!9†˜ý)_Þ)$³¦ñîD£¤CP”âó¤O·a‹/ã(¢OÞ‹üý•hŽ-@s皃e´l4‘›£4¢Jà@p:Ì>»2§Ì˜ò¾NìÒCØâZMz[íZá£\áÙBÛ¼­ÃIy*¨îyÎÆë0šÏsˆZ ,j[RY¿B#Í£OMâõ,ÅEÈ¡~­ìQ}Lû!ù~M7 »MZ‘ûGÄCú(v¦œDsò˜ö°¿Î¢ oÓ„¸%UØMZ¨¿üyÁ³(ÞŠ^‚ÆnÑ|v›¯ì±s.y­sÎ}˜¹·Ý9÷Kç\Oâ^§sî×ι̳ÙkžsîιWœs9¿8ç~ᯧs]åÙµÆ9÷¤¯Û÷s/D¾—½žÎ©×‡¾ìÞ̵Ä9÷Sç\wAY s_õײŠïnvÎýÊ9÷ÿ­:u>ÙB{ó®Æ}¦ÊÃ9·qÊœé:áÇo^Îýþ·/E–ó´/ççÜú’ú¿TRF·Ý_t¢ÁnçÜ}Ù=9ÏowνîŠé¯Ëi.|˜hãK¾mEmX\R·ä{.Ÿ¦»œsßõ߬âKœs?qšKø6¾Qðl—•×åû.ùÝçœs[ržç4/cù‹]/8ç~^PfÙµÐiÌ4ý¶¯ö5£×8ç’ú€½ùd2óšÉBH`û;‚VEûIë‘fs°DcÁgœ¾wñÎ'ÑŠi/3·ÿýÅÒÓhÕž=‰0@X©Åî-FmŽÉV˜Äshe™çtØ ^GcÔlxÉ6Úh£6~‘§E‚™û²&ïçÇ䊄î2$ljwø±Üߟ¥#[m´ÑFmü^"«´ÑFm´ÑF¿øÃÏ»m´ÑFm|®X˜ø÷ëÀ'è”K«ˆ‰Y†-À/€ïÎ@Y«Z|ßÐ3elDŽ‚ßC–1ØŽ¶ë  ð*¬s[hã· ›™™IfxùhÌž¥õºõ ‰|yíΖ¡“­bbÏŽM6‹N”×¼.Ó**k&ÐÉÌ‚N\jý ”µ‘ÖiêKH |5òù¬Ð9 +ü +xÅ®¿Fúø²a¢˜ëUäe_DãyôÕ‰hÐæë7ÑVó ÕQgw¡ã{Ër¾Ó…N²}Ÿüc§It ­ð…9¿uúú¼Sð»½oè%Ý×ÝþÞ›„̘±ÇÖï¢ãÅ?¢±E˜…N]*ªo[ÈG +—Ù,SÝ…4××h‘&Ñ‹ˆüyª 9[£x‡æ5ê%ˆ±o¬ñÎ3„~xõÏv$³—M)BñZóˈø£´¿Íb1böWs¬£P| µk;b G‘s¬%\)b$u`‘ [U(Ž¡cL·©N&S†õˆ¹Yì5Ï/Fã«9Ïv"§Ü‹Ä Üçhœ#+ÐѨÝÈÑ7–†²°0­c¨¿vå<;çŸFŽÅWˆ»5¨îÙ¹÷ÿù:ec¤äÁ–7QÏ/ cñŠbxÜD~]U×4r?Gq˜ÞÕHé°•ðEtLõ2é0¼&ø«|É®"òlß9(ÃmDÛg+ʱºM’Ûn±ÍóG%Ý ü„>û Úß#Ä ú9 ÞDJÌÃ_áš;ÇQ4*š‘Ç6;)êácÝNG +gª¼U3PÆ<_¯œŽeåÉŠ¹v9¡ªÏzjôë7œŽ= ø7S¯õ‘õ*ºÖù÷멺èœ{Ëéh×'.ñêuÎ=áÒG1?tåGÊ:ÙKŽu·KSëôí|ÝïIçÜk9eu¸¸ñíðu~Ý—õ­m_ìŸÿI¢n:-{Ú·§ìý§\8ú×ã4¿êËxÞ—½Ù‰Þ~˜ó~·sî§cxE4õ+§ùýNb\N<su9ç¾çœ{Æ·ñÕŠç;èêι—3¿½äœ{ÑéXâ¯#ú 'Úø…Óñc»·Âõß -´ï9_Ö€sngÎﯺâ#¥/ùþþž-ýÈ—÷Vä·O:ÎÞßép]Ïø2’søÃD[NºæÇÿY_öSÏv»ôÜŸç4ÆIzyÒ yïgô¾á4¬ì—Æy¡=¬wÅÇv“×vÿ|–7t8Í‘gr~Ë»\æ{o%ÚÖëï­Ù¿«œh¹®¬Ëå×f°Õ (*RÖİ™aêäêiM;É7á-Fç5´2A§6»jêBý0qfÐjãH[K®ôç#íî:Ò*6¾Ê´Šþà€ßøï&5ó²lzY\ ½ò™‡V,†Nd_DÈm„©­Î¿|ˆ4Ï×I›=g"(Ä%¤Hâ0 +Ï|ƒ¿Ý´Ó¾Äs\¦#->™ðä>Zýø)Ò®’zÌ%„çLb.ëç3÷¢ñ؉V¦·Pß[°Ž¼”Eø¢q ,õ™o¢è†U , ˆC+ŠChUsÜ×}ê‹i´ºÍâZuÑãÐiK8ò²/ï\E½@V²ì\\…æán´J>KqžÃCtÚè<é€/óÐ8£cÇû_ÍÅM$Ûð> +Ìs +­ÒŽä¼÷4å['Ϙôu½A~ª}È‚’g±ø{ÿ{?Š„7ú½(×I}Ôã-yØ„ú¦î.C7J¾6ŠVÐUáÎA´™\Ù"³õ0šÇ)·DBÛ†µˆŽ¿ŠÆh!@•媨JY݉xþ¼ûûdR?Aõqo[m'#èΧ^¤À¯"Ù4ñ£§Ñ|·< +¯U¼¿YŒ~…æÕ÷Èúv¸ ýÙ +í§N+‰¤fö‚Ó*δ®ï»â#Ùë5'm9«¼è5¶§@CE+”¬ö‚“†™ ÎÑã5³ç4Ðw"Ê2-ñç -mÀ)°É³¾OV¸üÀ1ßõß0-°ËIãÿe¢ßzÐQ/ù2“í¼è´:ø©ÓŠá'¾/Oú+o…ñ-ÿüþ»+ü½Oš¬W޵οŸ76EV‹.ö¹èÂJc—K¯|:|ÙEÁnì:é=&¯^':ú¹“ÓžÿMëçŸ;ÑåsN«ÅuN«µ_;iÝE«—2¿õ¸°B¼èËËiLé¿™·boæpZiý¾Ñ¯¨î'h¾Ûiõ–”“œ÷+|%çîb§¹ñs':¬cá{ÆÉ"±ÙÉÚòkßo+üÿ‹Þû–Sp°ä½}»^ô?tâ[eAº,0Ùs%Ï|â‚5§ìr®8È×f':°>Œ±jXß:ÿ~ö·.Î`e|5§¿¾ëDûI+]ÌuÒ‰'?ëò¾Å\Ýþ»¯dî¯óõÍ{g… sÉ9Íß7œxcÖ²{½ì4—ç9ñ³uþ;:{ìXmt¢·ä½_&Þïõuî-)ãUÿÌ/hü'ô‚¿·®Æø|˜÷[2¼ãa¤…[hÝ1žÐJ´2³ÌXבF°ç +_™ %ù^ƒÙCHÚR…GhåtŸ¦¤ø{É Ù4·ƒ„U—¥m=ŠVÔsÐJÒÂ;iÈ«‘ÆnZà_öÔgYKI/Òܯ“¯{éý#àú÷f#ÿ +ƒla9ó4Ða’Ör¨„V(tl€%ƒíå&ÑçÿfÓî$äÇŽ †”M2µIUxÓ!òWÖï7 –ŽªØê–›ÁBSç=Û‡ú¿,Ǻ¥EžòÏß%ø Üôסij}Ä…¨­Â²žÍAãv`ɳö™%c›ÿÞûˆ6Ï!úzˆ,WÝÜ¢<ñÌv´š±Xê–y¹¯ï¨ÿû)rN+ 4÷­¯¯"þu ‡% ÚPð¾á]ÂÞþlã÷/Asu[E9ËiA> 7 ûÏVù _§ªdO†1Ô߇}—X+‚…¬]Ic.–³h<ò¬#U8|¹‰÷’õºKHml(ËYñ>ðŸý¿ŸD4œgé‹Å3¨_† –‰ï §À>ÿ[™Å® ÑÚC_Æ1d ˜‹d†Yzn“×]„½h.^ È¢e„0é±yi +Qß9™~òÄtc3ì:PEÇÈg¬Fˆ±Qí:&ùëhRO""¹Š:ý>ùLç"Ò›ˆÐf£‰xÕ¿sžt›ËÌcEŽ-y¸Œü.ßÎyf jy­HøƒÚ“5ñ'S:g± +1ßóä+&—sʳˆã™û–&6?HH*r‹(7ÿƒ&Ô|ÒÎ<Ï  •œœkÝmB“¯Hx?"8=åÑh/búU&ñChŒ§h ;}}’÷Ê·lDBð´ÿvŸÿÿ"‚ÖGHO<ÚYdÞDBÒp1•ùþÝ)$<ÇhÌ¡ÄǾœ³¾>Ÿ"EyÔ×ÓÚ7„ú£*yÑ4÷nùïCcµ’zéXß$d{,â%ËQ»«êô$à÷Ѩl@|§ŠñnCóÃxÈ DŸÆôo£±»ŠÙ˜$OO¢~]NP_‹x×ð ¢—mˆÿG΀C‰z}DµÇýLãYÄW tÑE¬’óËhRYûP?\AtV¶rdzhBŽ ­šühLâò +bLs©NœÄeB‚‘+þºáë9Šè`<ñü|²I>º‘¢•L<ó>ðG‰ÿŸDô“té(ZÃhÞ^%mÁ[†Æ5&}ö?#:O*íüû6fkÐÜ¥A 7'Å›¾~4¶+Ó„m„$ÌyïPØë¿Û4Í¿õ÷’Ö$û¨^Ѿü7_–Y%ŠœVêø1$±”üýð2g"$µô‚…c6Å+Eþ·mõ€°Ç‹/äÜë@«¢cÄkÿIÜE«øÔž™pø[KœóP‹=¯¡üRlD²"t¡ÝâL’³–$3eŽ¡>;ŽŽÈÕÁ òÇüIÔ÷±æÿ<<ëË8^ã.ÿN^_Ø\©šƒHoBÛ-–Ç>‰¥þ^,¡oE|t²—ǾY<$ßYï(š»–eÖ·7‘öÏÊbñPÛÞÈbšúÛݶ}·²â¹*\EV‰cH®šý:åô´Ê¿sÍû;4Éz@p”í >ñÞ¿£¨Sn¢ ¹5À° ŽYÍcÒ{ÑDΚ½æ!"=}¡¶Ÿ8L0‘ßA„{1‹*ÏÞ,Î""Ïîy/ôå®öeÆ(ƒhïÒØ}gµ2†ø8ÚÕÊBÕùó<ô >ÏÛÏžCã6C±.E}“Ýbò¢±"G$s¬%8/-FŒ¬1Ý>Ä4®ÐüþØ _ÖX“ïß#øEZ1«v"æ_wïpšÀØÍÖ¢ÙÍAte1n¡v×í³.BìŒXžw-Í"½-1…h¤êôFy +ÃBÄD÷QÏ©0‰-Hð&yPøw.ü>ˆ”²ºýüwoQž¤¾7ˆøqRi8ŒLÊ+)?Yò8°mwX??Büs´â½ãH™,êϤà­B7R—"þÒŒòŸÄ0š[‡PŸ>B²ðá”]/¡9¹‡ô¶UÞ"ë;À4[¹"¡2…ö›øJìõÿ¿Mµp)rÔÙ‹V/u:ôÇ(Ìe» Žsçæ£ùÎCL=Ïáíc°äñ{¢o\ðÛ ¾^U“üq´ADijH;{ªöS‹°)^y{©ó)?`& ‘Yæõ +ÅÂò6Ú‡½I`vlójó1ÔŸ{ góÊÐIš´,e‹¤à5Ûï ö]¢¾â6‰˜Ïm‚ Ýëëc{Ê;ÑØîC}6Dü<]…æõâC”òøÈ¤4­¥5Oç_§3Ä+%Y<úÅŽ=Æâ&êË¥¿ï ÞBÈpÒ×å ÖƒAÒ‹µXdç¬ý¿jÁ±ñÉګΚˆ±TY‹º-!î„ÀFB¬mÌL ¤¹¨//ú꫾‚w߯E +CÓ¨佄sµË[øÎ24!ê®^ò° “MȤyÕ3FÈ‹GEÌ‘Ã$Œ®Ðè·’8³øãhßöÏåü6‰˜E]Ø1™¡‚ß—g"=L5£ê§xÂ^E}‘ÜJšMðºçÿ1¨qÿÿ2rÃ2$üí{« à×­ˆá7³ +íDã¿€´³d,® Æ‘ìÏY¨O,bæZÔ¯ûÑŠëð—åv„cìü‹…™=›UV þ'nܳXˆhÙÎo‹, $HòæÿÔ¶ªXyøDûçÈ·ÂÕ9‚ Ræ·"š ̽HèVE¬[êŸ5û:Û#E¸F0iÿŒ°ŠUl"Z_‰”î!Âñ2åtR’¯Ìí3[4âÀ¬@tUÔÇEJU³§ö +‘,ÐL´fž1Àqÿ[³{˜=„³‹u'RÑÄNjä[)Ö¤²øµùEDôÙ S¶gž‡o"EdùÂ6F{}œ-¨g…™‡&GšXöî2‚YmYŠŽº%@1õí¨ç¢-˜¼¸¼r“ÇöÎ#š5½ŠÙÇhÒÅáù’n+­Ó)ˆî÷£±=Bœ?HËc=Nó«ØМéKÜóeZÞBu½ƒ˜fUmGsðñGÙêà2Í-:‚¹Ñd]kIâuƒh¼š5[<ƒ$Ïì (ðÛhÝ´œÅl‚@¬Gøê«K„º^GÖªí—oûk%¢—Ku*[€½ˆ.¯!^0…æòÞ²—XKX¨žA¼â:Õ“¡¾›IÁox€úójÇ,dáºBýíųTŸ*Kb ¢ãA4¾oø2þ=vÄ8ç@qãG‘‰ö9Ôéf&ï@ÚÞ‘©p”4C/à +$°ŽQ/`E]¨wø«•½©Â~LV©¹ü÷šåÙÞ[V`ÍFZßmÊÛÞ‰„×1àý½çH+]W}Y£Aí§zŵ­BòœX†À>CñvNêk ä”=zØ‹ë¨/ë0ùÛ5u°™à V¦àXž„º‘ ˰æü"ò°ßyÔÇÍZvú2Z]ˆffª¿f²¯òЉ˜r]E¬ìØ]2büêb;Á±ŽoC¯‘6›#²a‚Ç£”µñ¦l&n0‹]HkÙ„V1 +€…U´•E³ØEX!Ÿbæ÷œ,%f+Lz4so’°úŸ¢:Êãh¦ýÍOÜË:¥¦X;^‚Mž¿DþyA{Úh£6Úø-…)1XEÈ­þ÷ÏÇ=©*cGð·ÑFm´ÑÆï-ê(m´ÑFm´ÑÆüáç]6Úh£6~«ñ! u£#¼?>A¾eŸ?A¹ìËÐÑJ=ºk–ó<ÚêŒÁ.äïõ%–mÖ¡óü'Ñ{¶ '÷"tòºäaaÄ7ÐVÚø]B+Lb ð ”ý¬l"%ÑEð‰Å*ä¨õaâú9ð–¯C,Þðïüp\¯¶ 3êÕ} ò ©‹™VN3ßÏ–Ñ º€wи?—¸ÿl“å-¦\0Ä —&òåº@cZð,V!'ê>tÊá¿âÿ :‰Òi Êú½—zso€8ùžeª½Dœpµa>qQ%Ï¡SRG©>!aÉߊNßXtÝÓõ9âùZ@‹qŽÛWúêvŠ©ÞLìøäÕãËyÞ9·¸É2^tŠýz‹upÎmvÊ{PöÜ2§¼ ?q!&ùBW[á‡NñΫ®WòHäõǧxÛy9’×F'äÅ Ï»žsÊ¥ðÈçŸpŠ9þªKÇmïtÎ=í¿sßbþ¿àœÛÞĸýÜE«´¸Ø—óóï¼èûaKÍoõ:ň_âÿßåïÙx ¸¿ìZè¿ÿš‹ëìõ”Óü©›#a£SìõõNxÒ)}QÞŠ²kÀ)ŸÇ[-ŒŸ•ñJï>ã4?cò¼å4WòƧË÷E-ö8ñªŸ»€Ø¼1›ò\¬rÊ#òFÅ·ìêpÊñCŸe«Î+ÐéëSæSNùVüÞãÛ³Ó?ó-ßÞìs/º&øDÕϹêD Í^Í +¶ì>窅SL9/GÖéYçÜ'NÄž¼¿1q}â]Ô¹Núr\q—˜ë9_—VúfS"¦ªÄ_rrÏúg{ý¿ŸªxÏùvö&®ïùñHÞ{Ö÷yžßè”ìâdD[\Íö¿îëóìwX‘ÐyljDZïû>ý¡ ±ÎÕé4wèšWû~}1²ÎÉk½¯«¬sbˆ¿v_òß_ï”%F ­ðå|£dÜ—ÉD,ÓŸeb[‰&Úÿ­¢X +ÙhgÏP’8ï£6ÖÉù0€” Õ¨ï’ñ!î’ê,ðe…ÛÜG:@Q9šIËù.騑u“iXþ +‹H׋úw/æS SæbrDŒ ºØFu0&P;ÿ1þK(n¼Á˜ÈNÔ·y‘âZ}¿Õú÷¢¨”P_Ž¢¹4h猿·œâ9ñš‹'üs¦HzRuúv ^Ôy¾ c4M°õEŒvkH + ›¼¦˜ÜA–€uˆqÿMÎûÓn Pߎ'îm%^ °P²Ký;«‰'nX‡vr>¢¼3‰ h,¶"%ów-VÝú[è Hè!~²)’‹€/Sž‰t ÙÞÌ÷"ž2‚æÖŠ…ÙÂ%És6#Z­h‡¡Õñkæý1Zoÿaÿ½=„pÜ{o(Âݒߪp)œfAM*ìÆ/ë亷”åG¨'ßbß»NÈïQ´Ø]ŒÚ“p&q‰šVΙ>xÔ_Ç‘À?ŠSü+Ї… àþ…â4Ž MkšY“ö â´»{hÒ®EÊÆCBéïÑ„¸áïoEÚr‘-C–гˆÝ#(gæ¶Iʵä÷#ëGV‰ì³CˆøêfÖ÷ïUeð*ÃB¬òº¸ªS4sEýöQâšBL%y¯(=°á&š˜Î¿{뢣}¹±yÁSo2Å0AËíP•$ªÑ÷ÿw¨F=~ÐLýÏû«­œþ)_¬*£ Yó.S<Ï#¾T¤H.ößÚçŸù>:‚×„Ñ âìVǯ™÷g¢ý +ÀiÔHñ¹Lù¶â„ÿÛWòÌz$d³x)yËiÌñbé³ëXî†Ñbíõ¶Bcß;Ž©óäÉ[ïëã³W"eUì YMg%Êco裑øúJÊ37M~lý!âÜ Ä¸óÊ™B+ŸRl2A§Êd2)É|î‹ч&Ë)âLdeÄ5ŠŠXÂí@Bj +­vÏû¿G©¿â8Hõ†Jž§8 bÑ–iì +~>ò—ɰ؅P3ïôWQvηÿŠ‚ í¡õiuqɵlò¶\d;ø&i³kž)¶Jð΄€ÛŒ¹ÌlZ™ÿ¸ä™5ˆ(Oûç—ûkµÿ;›8eä]à?‘È2‰„ìËH趺?Öƒ.Öé« ¼i4±!Á} Ñÿªñíg}9ÃhÕaÛ/u4èw‘ òãØ”¤03>¥à™’ggûߎR<^]¨Î’öixõO‘pißeN8k Îde° Œ ¾4“ìïÊ6@³õo%Ã`«>ƒh|“4ÿD Gõr6qŠq«ã×Ìû3éƒò3Â6È9ârºDsædáMöSÍ9 +šÂ\eý»K语Äï½7óÞ"â…k¾ÌÏçÐvlž³fl  ­Ǩ6ÅšÓ[]˜€;ñ솈oœF“#Ϭd¸†”Ž›ˆ˜!Íz7"ÒYÔÛóNöƒMÆCþ1á!Ëpµ9ÆÄ¸Ì?{øB¢.Ÿ"Á9‡xSüf$€M‰ø"÷ êG ;ŒÌ…'¨yì R2íºEP<íºLµé¤Ð]Fôq˜à1æËE¹²v˜p²#‰˜­ƒÃHÜžóÛ:ÄW|¿1Kó=8ÃïÖ6Àã¨6m÷ãÀ?Ѩð y¹)¥—¨ŽØjû[ÆÿñQï@éÉ-ïü ´}rEÞ¼æðõšuXŽ„•Ò5MàË—©VZyïqc1DýöÎî¡v,ŽyØ,k‘æ0ñÎûhŸuÅÇòPGÀ-¥ze~Õ÷"¼<3ÒC´â›“óû)¤ÕÇ:Í-!ì O¡¾3­v’`~oæÞz¤DÄeÜ€„ɧHšMpŽú9æÊ„æŒC¤W_Ûr±ø»ˆúØŠâ‘÷:šð1Vˆmh’«›¤âi8Nœ²öù›äá.åæ÷H9\Nãj«Ÿró*È,8úmŸ~ÑÅ4³7+ÊBŠêÉÄ=³òü.l 1óõ_JußÇø`Ø*9F‘\Bðšÿ +¢éó¨meŽˆC´ÖþfߟéöOgþÆà=ÂÖÂ<$TÇ(÷õ*Ãê/6“uxï]Aóû+Ï"§ðÏçü·ÿ©êÁäÀm"÷ <ê L]å= Ý­È+˜b"{HãŠk'R òÎüábÙãw¦4{äc#Z­î'þÌü—ÿ6é³4z¨ß§˜qvùwiÔ°!Š5Û%Ÿû˜päèªÍe±Ì!Ö'áYd•9O# ‘Wd±G}9‰˜)þÝ3ßO=|ͱ?/~¼ÛG£ ·PŸÆš‘‹L¼³ˆ³d´òþLÔ?‰…¨ïG+žKîo!Öc€`A2Fÿ¶¿j›¢Õö7ûþL¶&pÛe¤×Ê‹Qß/'þÔE«Ð|ý“~o‚êØ]HFñšÇ³ˆ—ÕRšpP^·EˆÀî ‚õ왵¢nÌyÞä7/çÜÿ ËùÔ[ýw AµÛ)ZµVáŸ(Þó¾@±~@ùêþõŽ"&ñM´b?ŒÆý³Ä—QNïÅ_´¢9Ž{ç bº Åo6õW#7©¿¸øÛ̽ÓH( Q½Š¼I1ƒê§Z!kõýVëŸÄ—«T+_w²[æƒ1H¹F¢×hìßÎüã£Ðjû›}&Ú?“è¡Úq3‰eˆnE@óCjÖ·j9ÍO¬zo>ÕòÆ+ó)·=.|„ú>¹ˆÉÅãÌØ"øAB®ÎvÁÅB­›´rp‡x"±½ó D\upi£½9×âe È”ÔÌ›Í +ÿ*Ü£y!Þ*ö£~>ü9}¿Û(‹)ÃyˆèÄbF,BÛduNF€¶§æ/"KÑÊè tè}Ô—UÞØ a¹ù!Xµ._ö6ÿûãz&ê¿ +õ×O¾ÿƒ8ËÁQ4§òRÏ®G¿cäó‹]ˆW]C^ÜYáƒVÛßêû­´ß0E4Eø¨ÿÝÌ’Ch>¥šæz÷Šï ËKY=—ß@Û¡ ¿Aò#_7ûÞs(3çqâŽG<äûäó›l=Þ@4ØìsYœ'検 1£îÒÉWz]~R–^'ô–Äð±¿Qñ\Y\ꟸÆ$1}ž®Yžecû¥ ‰EêÖiÀ;™¤Ä›0©Û÷ÉË®õ,mÉë¤SìîÞ̵Ä)'AUBžªk‹+ÏÌõaÁý¾¿NÖüÞË®¹ xv=ï”O yL\1™Ù:}6C+Éë)§ØábzÅÍ)Öú2ý5àD3¿pŠþ-Wž §Ç'K§¿pqù)š}&ê¿Î)qÍ€k>Áv'Þó‰ cÿ¡?)ã­ÎÇVÛ?SãßlûÛ×ïáõÎ9‡òY⟌!Ó{Ö¼ÑöÊ'ÑʯΪ8¯œ ¤ÍHÈ4tø½Ä;¾çÐ „fœôòPi^)@õW’UxY'’{··‘ §i4+ÖÁ:´ÿ˜=ß?€VúÐj÷!z˜ÁŽå}VôÚh£6Úˆ€)kPýËÈ÷¾…Nž0i׎–عû:è@õŒ ÒÓFm´ÑF¿0 6Úh£6Úø=Âãtl£6Úhã?.:it|ø©ÿ;Óèñßl/ÒZÀ¶äЗ-£¥/^R³¼]ÈÁ¯(M|ž~‰Ž>7…¶ÐÆT\D¹ë£c —8¦± mÍ$Þ |r/DÛq¯¢®ý½}Ã_‘Gý7š¬Ã äG6¬‹-È“ºh<üïU}8€òÛ2u¥ÐýõÑL`=bÊ?œ¡òò° °jE&ñŽuy­DÞîk€§Çûj´ek‘4»‘ j&IX]„l¬[š,c.:ʽ).ÏÕ¬×]BìöO¢~G§ê𛯡£àçŸU]ü#Úގ͋ӀÏ"Àï Ö 'Õ„tÈh€²ŽqeXˆ(‹Î«/BGÿ*²¼õè ñmòϯöÕ‰‹ƒ™ö©“ô¢,¨à*‹>4A“çÐ7¶"æ÷ +ÊYEcJ⾬ñ‚wn£sÉ É?ƒþ1!–ù]_þJmð>Áô4õbe$1JþQÎ'óÚOq~„$®£clQ^$žE¤ 準bgÝw}ãߌÁ·}yuB‚—ámÔ'g¨¼< "ÚÈú5­Cý—7ç6¢£a5E˜»ŸªK#×Ð1æK¨ÿv#úÛ†ú`=âc7Ðøo Š1õåhâLe~?M½H^o£ Íê•UZZÕƒ&ý]´*˜B45äÿV)¯ú:õ£‰™m7¨o¯"e%6"ÞL¤ä¼MúÃE4é’t2DÈ—‡ÐxbjS+'$’¡¬§ ´‘d&s‰ž ;mrµõÕ!z øºALy“ÿÿ a¹÷R©Æ†èž Ô wûY•·Œâ R+Ñ<{!s?âay¡Ñ¡±ºåß_€xÌRD‡IÏ©hþ”%õ²Pësý÷¢“d£(,v¢‘³þû#Ä)–„kÈÿµãüßÕ” ÿŨ†AÚŽœÜ× zÛƒxÕññR–’]>Û×éšÿN_A¼ã3õ&=ž×Q¿••×áëcsj¿/g–¯ËM¤”žV3àë¾Rc¾À,øûÄÜÏU°<«Ñ¤>Nk+±SHÛ&h¾ý½+ÔמÆ}½†rÊ»T³¼^ÔGGH :3ñ¬&^0â‹&×lÒ¡vû¨Éë>bâÍh˜±¸‹ö¡îÇà9üuæùDœýþ²8ë« ‘ßÖ¢>µèf–Á1èéU4>‡}½æ >äó‰Ò•Dß —׿B ˆ§™WI÷ñ|4NCþÿS¨Ooò§ç¡1$,„Ht7ý7ö ð)b¢Ç€?‹¬g,™N+™gEÖÕeˆÆoP7›™4Nèfõ©…¶ç‹"ÙF<à_ÆÔï·hL~µ ÑSÕŠö‘/§ Íÿ1BªÜ¾œþ{uŽ…ß'LÇ”€Õ”/*âtÉŒ½¨ÝÉgÞCJìyD+y4ÜKÈ…ÒƒxS¿ÿþÊzØúÿšÿwÌ¢äš7‡ÑÜÚæÖ8ê¿»¾NGQßÿ}æý§P¿,Gc¶Ô—7ŠhÃò¯tøöí¥dA›$Ò(îSÄio†÷‘ùf=!¬êXYeJ`é$³ÇùÞDÄÛG=áf:Såò&ž%ŠÅm¤µ’^±›9wŒæÍ¹3…]„˜ùÃh=DæÙ»ˆÈ!a´ƒüT¥3߬O¶ +¾ˆúà#4–± Ôî²ã OòŽïEÂþ(š${ZþOÑDŽUæ’ÖÎûhLœÕlƺ<ËKñ©g“XMc„Ëy¨bÃg·0†ëë¾^çÐøl­¨ßCÄo¡q[@ȾyÑHrß#^ø›5ãbÎo¶X9Gü±f³pœÌùm)bÄg‰ßv³•ö‡™o$Çú2å +ÀC}¾ŒÆÏÌÖIº½hýª¯cãÎ݈×l¢‘§Œ'ʯB⥧HÇŸ7Ž­åmíõ£í¡~´ X‹E µ:Hçâ0ÜöW¢Á –Ä"kÍ$²Î94v× yÆýûH‘XJ|L˜¯øv\B´zÈ—‘lÿGhŽŒÑ¨\C´sYnø:í&ÝîG„s!—@’½í+wšêœîE°Aš©úδÉo’ ¹e…Š­BcqÛjò•5hÀ/Ð| %CÒ$ûQÅ +į¡öí›Þ÷eÙ–@Ý,p#ß„¤ð]I¹’ºÜû,bÇý;Ém|êÄ)¿Oz5¶®Ø°›æ0‹FSîJ¤ n¢xŒç¡vãXŒú&É:}gýwÖ#Z­£È'qÑå Z…­C ¨¨ŽƒÌ³“#(›Q?ZÞkh¼bL±o¢¹–´TL•Ô£ +fmÊ–—Øu”î:ÊL€¿NXé'1…„ÅB˜ÚCÄ­FÇоu–êøÚt Þ~É#:C~Žb¡½Í÷Sˆæ—úkÑó4âu§/(‡³H¨ÏA‹Ž>mòu±ñ¼ëËšB|/Ï¢ðÈ·c¹ÿþC´?HÚ|oß-À¯ÏU4–ÈÖF櫓¿§ÈçQï!Ú¿úhŠFáo°­íB<.`¼aÄüÿÕÿ¿Ù,Twü»{Ãù ¯¨3®¿ZYÞÍLysÈOúS†GþÝ­çDxÇ©Wü*Üä +'»g“x†w9SÞZ4·–…»Ô3‰ßFca‚µË—;1 ˆ¹OQÞ>.˜ò0AÐVe\Ü‹Åw‰îƒìJµn¦®¤òû«Y¥ò¦^K>T–”dbö³HG}üaÁ{æŸ0ÑBvÅR´ç<1ª þ›§ –)SzÖRlrÿ8ñì¹Ä}\Ó¨½û½Ä®²«h¿ÎVÀ#šK!›ÄóTg‰õ§]¦Ð®%¿==ˆ6,YØNòÇöS4>W±ì«2Á-"¬³ +èV´*­J]Ýåë׿ýšïG‘@·U™Ð¾‚¬…{•ãÁZ5ÑŽ$.#2é˽†ÚhÂÿ0é¹²ˆ|¥Êðé9¾FŸ¢>Òtó}YàŸ5ÿ„Ã(Sè)ÿ»YpzÐ|™((ï¢oSüŠœp'©Èè:Ó +À2ÒÚdråg¬ u@]¡¸ å%B½'‘ù¸ß‚ $†AL<*›I ó¦¿ºÐ€¢:gtÉ••„¥˜4ÌE a’Fsjß&="âûzúuÒh^œß0bb×ü½Sç°"Áhg%šD'ئ|   ð_Ên½É;ÑįëGñ8`Ç’²Š×,DCeæÜ¯N&´j ‚ü=gÛ9 ‹Áž1o#}\Éæÿ˾ÌE” ëçÑʰLÑZDà ý„3ý4öÑs¨=eå%­ &°ídF¶¼#„S× B&)pòP”H¬ÍÑÞi‚,/ ùÄÏ—o9O÷&îÍBc:Eù˜ö¢¹µõï1ÿîêƒ:["«Ò_†õEÒm¯O_þˆ÷déhÑwÖ¢ZgÁÓéËÙ“¹¿”jGØOÑØõ„õ¯H†£ºý^£ñÔPûm–Ño¥¿ÔL+U{= Bí^§Ü‰(kâüð…œgæ ‚´ z iiUDxiš›„a{Û1èõßÊ2éhP’“¾‹°5I¾I|„0‘n’¿BÍZfLKYA—í¿2t"B^‰˜WžBe5‹|]·œöNø{÷rqžêÉeg+b´¶ª¨oìÈPÑ +M¾:Bs>éýá DÃ'3ÏÔÅ|òWs‰s¶µ6,Cc'@— þ½L9-$÷œAô}õãÁ±«‹pLõq{Î+Ýæ1ðØ2#™˜c’Ïœ&¬~³(°G3ŸÅÌì‡(5ç ±³ì ¨ö1ºGð‹YŒÚ¶ñÌåäÏ“7íÔÉwbcn¦ü)·Ì²Øƒ,6P?ö!Þõ5¾›„eà|« ŒIÄS.ûï–Õ-o,¥~*ï,6јÜäNŒeûSÒtóˆ`Ýy“FÙV†eˆ¶QžnÜ,ñ…˜i`êìÒ¢ÔÀƒSwÞ„ABz6š”EçØóp…ÆIÐãË0&ø6ÊÊ4Á$Ôãëvƒü#IÈègûw¦ íž@ZÝhAý®ÑÈ ¾F0ÓÎÄÙùm„þ³úÝGm.«ßlDìÙú]@ã0„ÖY$ü³&Û*³šÁއM +ŸÝ¨ï¾&¼ËpÈ—7^ð»mKÄbõÓy4.Oøú] íDz„ú{ëkÉZ ¨wlï á|t‘ðÚJ¼£R/jÛ$ ~†Ä6Ô¿ˆñÏ%N‘%G!‰X§µG%$‹f¶°Rϼ‹.´í7Œ [¡Mø¿fñŠ92¶† CüÒöÈÇ|ùÙ67“ìÌ„?h¼«êu)dö-;¹Ó +ÖÑh®¶=ð}½®£¾«£hô …©î¶nóÐü>EzmC|áÿgïýCµ¾²{ÿ×Üc9^N¾Ëñr¼èåœbʱhÑ‹~1Å”ã SÌE‹SL9^Ì-É ÅS´˜K,I‰E‡d0%qHJR’¢ƒL‰ƒ’’ ’ C 1ÄC QTÖ÷÷Þ³?ÏçÙûóÙŸç9fæÎ÷Y°9çyžÏÞŸýcíµÖ^{ýè4ÏÌ!´Ž©81F{é8š¢FbAs2Šø{¥ôd s;Ÿñì“ËÕ?ŠüþC4á ~Vi +fPO|½@¸^¦_¥õîÝÁÃöÆdŒÁ׈€@Lj +í›b:"¼\ÓÖ?#+ªÕº µ½€um|¡šJðßoš´©GÒþܽãYÂIh!Õ¸µ +IÔ;IÑ̈´1›´zÑ_I¬uí.BÄïu÷ùN4Ç[]_s½GÖ¹~ÄæjÍlFÄèºsmìGªÅ;£?‚Öõ~4¯ fÞÄCfÐÕñ¸²ÍWÝýr +Æ3¼Ôã~ï5˜Š0“pª[K÷qK¾¦ú4· ·9{ä“eZ‡KˆÆ^!Ĺû h^ªâ'<ìžót‚ûÞyÄLrúu“VAc*ÍŒj˰ +Ñú=¥ï‹ZµNîAj.ž?ŠãN×µ8?›‘æúšû­´{Ý4 ¾ú¹Þq/£µ{ÍÅ,÷ýš¯ïºÏË^/ˆÅ2™ÀB÷²­™Ïÿmâ;\ݘÚùÁÐÄ[^—ï×NJctáŒà­†ËÁ¯<,BËkx>wÅ£H`ÙMpϹ/1K\ýå‘߆h4Öb¸qóÿ¬©»i~Òz7¼ïÚ H•àäáQ4ÿÜ÷]§À{ÏN£uó@­N>FL´x Ð-L ¾-Šü¶ˆfûw6ÂçC-Ç/ qG6¬ÒO»ç6×ì¦5ÀگljG°ÌY_1_Ž ÚDALí,ÚßU{–ñ¯‰¹“ÎCåŽ$¹~=àú»íõ¦¶lex á_®ð0á:ÏÏWn'¸žÎp¿Gk|± NfV,;Ìì@é;ÌlÂÌÎE¾÷eÄÌÞ7³£…Ï–x¶ß̆ÝÿçÜss+Ú®+O˜Ù+Ô;jf'Ìl‰ëï\3{ÌÌ®»ÏMÚšëÆÑ´^¬ ºùOüþ¼s“6—¸þÍž„þù2ní¸²ÞÌæ7lç~3ûÂÌÞ1³ufö k÷€™6³¯ +Ÿ˜Ù¾D;Cfö´û¶o¹˜ÙbÓ[ᙾD›&ÙèÖäXá·>×f¶Åý]çÚ|§b¼‹Í쌙YXï1ÙãföIEŸbeĽwi]ÆM8éÛÎh£ü>ßæHE]5mÎws=Qúþ-3ÛVè߈ëóª†ãõ}[áæ±S\Îk“²ÞµçiK¹ä¬‡Çæý>n­4¸ßÍáL ø·Å½÷X¤­sf¶°0Þ½{ËÒ¸¶½Á˜·˜ÙGÖ +ë3êù}Ôï>/3³7\¿t8ÿ+Íì”iß6ÙGŲÆÄWÆ"¿Íuãíç|ñ4£“º&ZÒñû'Kð0’x7d<;‡pwø:’D«NÍ}÷¼˜Ds/ƒ¥´ûO>‚ÆÒ4JÜd湊Æù,­§ioœäï;›€?MvüƒÑÒçÔm V¢¹ö*õÝÄc›?K^¨ÜÏï¹ÿ?Ds;ѽ üNF{cHÍ6IüÞ¨h5}¸ÝðôE´6)w°Mh¼‹§é«Hwšƒ«èºª“k” ´Ÿ„g—V©ASø~ +:Uì&}=·JËÞ&÷ MÃ#íÛ%tZi’Â÷í,ÁµnÒ¬§yü‰ÑÈwÞ ò4ùZ ß|8™I}žŒùèôy:GÑœ¢Óý5¤©ñad÷¢ï£Äã­5¤¾Oþ:Ì_9ùý×OÈS±—<»‚te>ºÏ"®t IDATsŸB<*eÊ.˜?EÚ˜³tn|íÉn®"O’ƒü º×ôzxáW'pú•0™ÀÃä!Ê<‘Ê>!⤃a4…)´3Ò›4ÜW„á÷)—€\#Ô|7ñLÉíß4ÄÜNÓLuÉÕ)}? W—¨.Ò,Dè)UV;l¥»ø÷·!õÜN„×WñÊp +Ÿ"fs¿™p·ìz@PÎ#ÂÓôÿ"!K +.Ñìô2sñÔ½´^­á‘Ä÷ïÑ] œ‹ˆø=Zø®hÀ ê{®p‘`UÕ^®àÝŠÓ.tOA4á]à+Ú8ÿ«ˆ.MwõbÂÿ DWŽ˜® ÿ*Î'~¿Šì"~˜ÙÈ¡Û<Ÿ¿ÛEý¦‚_ ¾­PÒ×è< [Ù£1|ÇÌŠŸýÝP™1O ÍQwÏîa„à*U†G‘Ô’CÄcí¥$êË4cˆï,¼}`…ûÑãš q¿«7Zø®L@Þ%¸ ÕÁD<ÊdbL³ÃÎ%¢ýHš.vÓ?¯òátzù«m¥²åÝI° ¿Ý}~„öh\=èAzЃ;évâÏ\¯ª>Ÿø}Í€ÔKÔM"ˆÙïq},>Ls öÝet+ÃÏ€ïLb{×ÈËàØrc­ç@,[^zЃôà&ÐéëvÒÒfgÜïuÌäSà¿NF|LÞ½mx“zWºô =èA~+¡|Ѓô =èÁ­oÈx«`.ÒìÆ®„}ü’×èÞVäoïƒÚ5um} Ù*]D¶o¢˜9‘T=ô!÷ÉéTGÖÂiòpzð[Û6ke—í,Fv3«:¨wΕù]öÁÃ.@jã$µçáA¢õ0òb¨‚³;"ÂÝ€σ]¶Šž¶ ךg˰øáËÌIèKrû3»ôy8¼„˜@ +Vü¾x¥ÜíÏìG +šÌë(ÄP—ïŒÁLBÖØ¾üêžFû°[x×µw¨îÁ܉úêÃÒ@ñrcZ ¸÷Þ@××/"\φžð›ch#>EÃŒÀÄ”–uÛ)+™|¦2ê` ðð\—ï[‡ +¢p™3Áf•Õ| 6"bé=΢ Üt㽉<%FÉHØ‘ ϸ¶Î|~ˆÀúљ탮ÜB¯þ "XUpY–¯¦K÷$W¿Éxªà2"Ôû‘ÛbøwB´½[!áª"ü]‡¢Ñ=‰<;VS%óväcЧû€V)ØHµPçÓŠ#O¨þ‚ÇË7€Ñž‘°ðòVRЗácBÒÉp‹þÍaeÈÝl&„¤¾ ­Ó=ä»/Ž¢ýñ}Hh ñôÛÆÐ"o¤Zbm +s]»ÛˆK”}ˆMæ;qm~„6c·pÎÍäÅRÖ•¾[‚éU„äÝJõî½gã› ðùáORrþWBšånà,!íî«…ïš2ƒ“®?;Ýç/ yÚ›†[ž†T§Ñžx¬aý2üÙçäø^ƒÔ âš›"#YàÊ´f~ݪà&R«^!û?~Žp¸èöÖO»Ûi\#ÄÔÈLÆh¥³\ý‘àº1®ò©<ˈӥ%(DëABHô*x×=·1¶µH ÛKuÔÈ£u‹ RŸÞ[•ù4!a uýÚŠÆ3VÑ–‡éhN·º¶V>`.:µ1ýˆ–¬E4t)š›»mLA8ßIÙ-®”ùÉ(âCû€£ÀHÃ’‚…hì^xÍãnt𩃅hM_+´qѦœú‚Ht ~S«TÔ¸™f¶©¹)· Xk„¬n#(ùrØql•¥#äí2EÐ+~·±Éi¦ëÛQS¶Üwïrï÷ó¶ÝÍM§ci27}¦ˆYÅh[/™"âáÆ2ÞAæº15EqûÄs2¢ö¹uxÊõ훌:ÖY¤Çr2áàSÄËN#„°Ö5ž0E ÌÁ•bT±ÝÜ¾ïæ¡.ªž/;¬5Ù° g&Ìì×Þ+¦h„_˜à\¢­S½sÖs‹ko¾)ÂâÓ–åqÈ„73'iÍ®›"Øíróe"06)ó]Ý ¸˜Šä¶Ê´ÎþÙÇMûü)7§ß˜hM \eŠw 2'nL3MáêÚòõýÞ!sì§,MGܼàæ9µÏ·Y{„Á¾Â¼bŠÒ9nå”Un^±ü=¹Æ„ç×­5ª§™öÕ˜µGŸ,Ïû úXÞ3çLû넉æot}weÂõ%µ§—¹~ï³€c¸¹ÜäêVEaì¶þ¯Jj£<å^Pnd¥‰àl1… Ì iYF¶N‰ïcfö™µ2„ç, ãD=¶HÀVšèœû͇'­ +K¼ÑZÕ¾ä޿τğX÷ÀHƒçwX@LHí¿;ãús´q—U´ÓïÆð’û»ÉD\NY+‚å”4áÔ7¦ zÂõsEæ·u1§¾ ¹y8åúrÀ÷y«&äe?`­ÄeÂÄN™póº‰a”ÛYf +k|Î=g®?­ÁÜbZ×s®½3&ÜbbÒ‡-„œ2á|jí}¨ãί4퉺þ¬+µ·Ãï€++Ýü>n"’U{¡‰xÏvóú¼›§O\[-šµ\ž¶ ðÍu}xÊÍ×c®Ý3&|LÍÍ+Ö +§L{cš‡€éÞ÷Qä·Çó_U7 è9t´ßÓ¿c•[#¿¯ÇÝøÞpS‚ÂktGL8²ÉÍɃ5}ÙîÞ;Óõã9 ôʬy(æaÓ:víåÒª-Öy˜aÜUÑm¦µN­Ï5¿5ájªýnëÿªTýø…µKQc&¦¹ÆMBjÁ‡,0 ±¾7™×°iãm·jÆ+Y«$ºÏ´¹_2Å•ÕYá&$Eh‹'ùªâ™ì9W®›p‡{GΆ¬X³ÖMà XªÝ§,Ä_f"¼ž ûœÿí+kv*[áúÓô$wÂDpW™6Â÷w£kï˜ÓD¢þpaVº1ùØøkÜ\û²®b.Ëx{Æõ£<—ïXµ rÊÄæ»÷¿a­‚ãWnÌ#®,´4A´À˜ÏY–ÆL8øŠ›Ÿç,¿Ï´î·vád½5#lOXúä9nÂï:¢zÌ ý+7'ÛÝØÖYˆU>`Â×"kàˈ‰°}c"°÷»ösbÊ‹?™kï%7ß'\ŸZÈQ§Mè3Ѧ‚p™ÖŒXÈUQ.k,Ÿm2á`±?}ðªüü:kÏaqÀͱYÐ=mÕ´x¶{¶¸v MÀõ†ëò… ÷¼öêk.ä/6í—N´É;\iZÏ—VÍ/Þ°ø!Àï³vt±øœ1Üì¶~KIý°ÄÒÆBÓF¯›¤àÓÆ?à>d"¢Ç,œà›,ÞÒw3­úõ„¥7&fälÌò7£¿.ð§Ëœí:÷®1Ó†ÛháTbaøS¢YZÕwÎõuÌÍéÆÒ˜Ž>¶¸v"EŒÇÝ»MkþŠõgAö×<',$ÁÄ>³úÓÓ¸i½v™ËG®¼âÚöInšÖôýš6×Xfï·v-Ï1«V>îÆsƽï-ÓóÌ·<Ï9Å Òþó|WFLBWmæjv˜ö˜Ÿ§œ:3­ú„?n¯ª¹Á±yÇ´ÆEº1b­×}´?©öú­u=·Xë©Ô'¿ÙgÕ'Æ5¥ß?*e¾ ëæi‰5__\ÿΘIUBê\“€’Óæ0÷®ož™ÇñÓV/@YÍ\úò¾‰f ›èö7îo“CÜb ôu¶ ?:aâM¯ ‹å€Õk+ªÊ„¥“ðÌtó™ÒTùÄq;*Ú÷ ‚bÂy·õ[Š7,“ #ËTŸsz2¼˜\s¦’NvR„¥È0â"2lø3g ð:ð?€ßG±îÿ"Q€´›ÈíÈcp‚b´ª/E–qdÕêä¦#ƒ§£È8졊¶< £¹x YäÎA!j"ƒÄ”[ÌËȲú]÷¼Ïà­HEV¬> í(r›)ÃLWï +2àò9ÒSpžÖPÀžD†J³Ñ¼¬Gs³`­&¸ª¬F†6©`Q øÿ>„¯7²DÆ99ù"Þ&ä¶_îúýª{ïPÌü_º¶}òŸ íÝá~ŸN0þyÒý6­[•ÛÍ_##°?pïó)š‹FMsQ¬¥}üô9„tÆ¿CHu›ÓÞ´/–’g„å­Ž«à4WK*žùG4?>®ý~ÒVÌ7‘±×=í]£GÎ"Ch>rè̓„=~퉮ý9ˆNŒFêÝîÞ?DÚó2ÕséáQ×ßw]QD¿›ÄÞS Z¸•üôëE('k +Mªá*é$Y÷¡µIåÝȉ´{Ñýyu[¿¼UïNBNwoqí ýfWþmîCÈÂ÷ŸjÚ¾†6àU:Ëս fy§ë× ´1!äMeä$XñzødÍ}Mè%4i/#¦\e "°ÏºúÐD¿MÈïþŒëW,Tî5D¤}òÞŦœ'ÅnGköÚ˜uˆq™8ÒD!–¯¢9:ëÊqDXÊ™Ür l¿•üì^_Ìy®TEll +|湇Z”*·©ÝhOïó{ÿ.4îÄ5&W š´³®­ÍîŸ!:Ð ÓñéÄË.l^ب‚ùˆ~LGÂHY¨ú퟉/?¥ý„<€hÚ´g‡,Â4'Ñü}Š‚ÿ,§Y$½i®NŠfN§zùþ¾ŽnÒìö¡ñ,@{ð}49¸?ˆæãVç A¸—Æ?§=™×Ë耙‚̓ßñ5é¶~ x`5áDz˜Ö´˜eø!ýÄ€§Ñð¹¹§"¤¹ !ôä³8@^¤=¿À5D\osýô ³Èä#¢þaE§˜ÈftƒÑŠ6<,CBÉrD°îF’ârZ}¨?výšC¾”>¼‰‡Üû>Û, ¤¼½‰¶bŒ0÷„TÃHPºˆpb7ù„Ëç6¯óÕ¯cd ÕçZDD½³q +Zûä¾ï#R3‘p\ÎbXÓÊŒž#} – '¾Ý@ãIiÊPwm1í˯îTŘèÁœÒ÷w„£»¿ÏÒ.Döû´çËtåm$Àu"ÒwîÓ\æ’>a_"E؉Ôyï!°1¸{h—`¯¾'ŠÁjòƒ¸€„ŒÓ„õym¬ç‘Prš›¹h~n'=Ï1XNëiSF¥‡áÁýu·#ýq»}{ЬA§†‹„M½­ß_ ÁóY4W9Af~FPÙî'Ï®ÁÃbÚïÿgÑ}HÔ{ã|+Gp»DõÕIq^¿¦zŒ»®L!HFkX>yWå0¿FüPñ._Sx­ÏÝh<;\¿v#ܬ:8€pândwƒ™h_]ŠüVÓïÞÿ¢#IÞIº8WS¨ÆTo3ñzâ÷ ˆ.TÅ_J÷<óŸGÐf€4;ËS•JPg÷‘ çÝ;G +e Ѧ“h>rµÛ³ÑšžGóT‹ÿs´?«¢jÞ‰øGL(ë¶~+,ûL–¼k"“¹ÿ·8 È·LV®)ëÌq‹Ç·æÆ­ÕZy‡µºXÌ4Yy§Ü2Ö¸¾°`m:Ód=ûŽÉÍë “Eð6«¶(¿nÁútØYZ¦ÜW®[~ žMžMƒíx÷1ÿyÐd1]ŽñŽåñe½›óNã5Ì5YÉ–qi‡ëÏQK[ñN˜¬‹W™Öô#‹[ÃûØ_Y×ú,øã®qs{Ô„Ëï—ÞßgòèØi'VÜ<§|¦c¥Ï„kGKß{·®1 ®„>I“øÅà 9ϯ4á½·–÷e±ÉÒ<×;Ç»‹Ž›ö×Kîï – )§x÷á&s½Ã„ƒÅØ Ó`d}&üö^-Y—Ÿ3yª Yúô‚5R.žNÍvm×YÃÏ5áEÌEz¾iÿÔÅ!8fÍ}ôËåi AŠß¯2íÇW¼‹pÌŠ~Ì„³÷[ð*–e&Ü­Ûc&šX„¯Ü8sédŸ…sMéöýî1¯¬nž»…õUŠ&¬Ýõ¯ÏZ}Ë}°ÎÜ0Æ­ÙF^åfGá»Öîè]‘F"mx?ÓbŽm&Xî×;¦C¾™Üþ–YpO‹!›÷1®C ÏH>²Î¢öÅÊ: ‘ÝF®S¿›Ë7¬sBµÉgeâ÷çÜܤ"U=fÁ]k—{v¤ðû ûÝ»‘– J'>)c¶ Šî’ M›ø‹Š>ËF÷|S²Ð´1˸Õg"Ž>ʹ>ž²¼ˆwËL®§¬]àª+—ÞknXþú³V[OœÞjÐF]ñQüržõÁa6&~ß’9¯Å2nÚç‡-Ä:øÈ;å2¼°ðìËsÎÅ££Ö*äWù„c¢£ã…Ï>jéKïÓbyÅ´G"e½‰&× ,ŽŸ¦½\„ÏñeÿGÖ>æC“ÃNÓ NÅ’”*UÖ›öì'¦=tÌD·ÏX^0¹nëc€~W¹ì#ípÓ Uˆx.óÙ­©q‹ä“Ö.ô›N,T选 +|·ÃõeÄ•]î÷~“”þI¤~ ›î §Ê2#˜m:ùœÊ˜‹&fÖéI»Xš˜ë+Öáïê6Ù<å÷³…-õÜ€[«òI8V¼Ïëˆûì%üœèys-ŽCÖ.ä6gÓÀHÅ2Y ±8ÆmÖ!„Û#ÖÙ>Ï9…NFÉ÷ÇQW|§&ë?lùÁªš–íYgÍ# Î71þ\Ü3 +¼@S«SJ¯üËwÌ ”ˆät'¿Áý=D¸ý›Ú»„‚…õ5d€·ÝÕ¿M3KÐíh\¿ï>ÏF÷¥£îó%äþ÷÷ÞÕä¹§ ¢û隸Ùq}­²2Ÿîº±¨-ÂzBÂ’N`.ºsïÔ¿vwÎ}øºË«»ƒ)uâ'܃ô =¨/bÞçû9dXtÐ}?YLj1É«y.ÃÈb'ùn€ ¦¾€Î²?UA?2.º /Ò}€Šô =èAn9x`&Ÿ{Ѓô =èÁÿeàÝ{Ì¿=èAzð› ‘+åú.ÛYG—=„ܦŸ¾@!ž;…ÈÝzi—ô,>Þéà½C„öý(¨]Ñ-~ÒèGῤ~èA~Ka=aÃÄ`„tÌtcÀ7ˆh€¢CÕ„i ŠÑpÆÕýÄýo(Ú‘:(çÅ6¤¥+Â:ªã b°Ã•-¤slDv2ó+Ú+à +âòÃ;î=ex×ÇX8…Æž )b:D»¯}SØ _zÀolA †üæØçJ Ñ}0™Uˆ ­ì°þ2$=?OçD¬>U f"{’Ì®øýQdØz Q¢PÏãí_E›ÎoØ+È6%¦s>"÷ hyS‘Á¤røûÀ÷ïy³y¶ð}"\ï’^¯½(Œ¹¾]‰Ýã(8ËñD[1xøDð@D/Jûš+yðšE˜|1‹5¥ïoG°:ÅW,¢û 7EèCÌòU$`4Èøúyš1 B·O,Esý8ÖÇ€€š‚óÈfëŠû{¢¶iP£©fÐä ï¿ |%ÝúàO¿¥Yb£"|Iˆv™Ðm­¸{;š—7Ðɸ~áêÞƒ€å(Ú­Ht–ªðà¿n7„HYlrý»nÍÒLËÉ]¬ÓúX”’ò'®CS×_›À»Œù EUuv¸ç^²VמAk¤Âç÷~Áš»R º1d­AGæv¸KܘvE~óiQ'\Ùar?|ÁBzÔÏkpΪc.LX³X9å k‡ÓÔÕ?e!à”O=½Î„£©´¤ï[kúÛÙî]«Ïûùk:6?†‘Iž³b™íÆó´ ¿ýÞö¾öun¯?²v×Ч,»½“2frq]frË .U,û¬=†Eªl´Ö½j®Þ6ËsµÍ-}&úrƽï°ZS—ÎxØÂ^ôqJ:õ¿ï7íï¹…Ï+Ü:~b¢±}?TóÎù¦Ø‡];ßXÚŸ¾Ê­Ó +ï²4n[$åS¿s}ðë¾Ë„CoX}œ˜Ã51×´G¢õʯÚ|¼ ¥Ô©6Ë0|…N± ÕçuâêÁ¼‰$²× ¡JWP +ö0‚¤ï è„ÕÉ}ÑFäy’~sûîá6t:{ºƒw¯E'*s”úôˇ$ã»h •éÓ…>Gždü:¬%/£UQÍù%’FwºúýH•þ6ÕézSp”ïˆüö* +)º<½kè³(nù«èÄÑMÊÏxµ÷W§Ï•Êu¤v/üÈwMà +!©Îç„,™ :…ÖpÝRøñ¶ÝByÎNº"¼ºí…­h­g!o¥ºÜ?G'£Y´‡ü¾”Q?ú +ÞŸþ!ÍM­Š‡Óˆä„ȽŠNÙçPÒ$Ð>ÞLH1>pÓµ7ÑDŸxú0êŸ"ÚдkhžÏÀÃ54?;^]@xq’ iŠõç6´gFÐ}ý¤¡y Ýý?âÚØèþZZs©a«?†4…„ë$ýùáÖYâ4áS„wº÷½ |å[ð´ÿoÝo·#mU +DxËerÅ=zýWVÁ4UmÆÀç«>_hãªS¦£E,&›8BXç<îDÌëSB&°Aš!Üià‡îÿŸ utUæÂ2x5WnŸ=,D ¬HÔ§ aâêc!ÄØ‚~Rqî'tÆÇÞŸ‚Öîy)n÷ ¹ú‘ûÜÆ¾Ôý½‚Ñ2Ú*B"ðïDЉ¢b±®Ð]L„xµ÷4Ær<‹ÃĉOSUgüáõÒ±&^FÂß ¤¾F}²£¦is O:Õo Æ ÙÕO1 "ü1æ©HøÍKÑåÙŠn¸²™ú”çE˜pé2jÞE øa´;3ÛÙêúZÌ–· ñg‰Ó×-î½WÐZÝ…Ö뢕¯#Ü^‚hÂÄݽ‰Öé×Ƚ®½+hMR‚õ5Â^ŽåiyÓ%uìGëYuÈ8ëÞñ·m¿t¨†¹Å«½Þ*¨r®›ThM#¨ù蹪ç%NÕrÝBLh¯*³“þ3S´¼ºö^rï÷ðI…yÎÒWÅXîE•^¿IeVªö)kÿÜgR3só·¾¢®Yg*¹A“Jð+ !eϸ9z«ƒö|yÜÍW§‘óX:ö9ëþ +à@â™Ö¶Ú—cÖ,ÿ +à˜)ÊcîµÒ|“ÚðqN}æþ¯šÏT×M¢#ú1Œt8guå°uM/†ÏfÚK‡Môå-ží3á„/©ë¯™Ö +¸8_^­{Î:‹ÎøJ‡õ|±xN”U®åvXúÚ(UNX÷Q,‡Ýœ•ÛñažÇõf»9ýÌBÈáqkÅ%N¸ŠÆáÖ)ɱ ¯(âWÇVY ùMçæk¿šZfy¹F|þ*œxÌÍ_[(æÔÉdI-w“'-A§ÁEHš;$Ù#Hµ>ƒàIàGÚØŠ4/"éécd ó.:Í!Iç õÒëj$Ý“ÙÿŸ¡“É9$Ù£ úÌRyÅ Š0N3Ü8¼dö:Y¤²(îD'°Í´JÂ×PÎðÕHâÞC<ØÐ Z³÷ÝDéi4?ŠÔ)B1íh.|‰®k¼…÷åBÇ¥ú#õª`ÍOÚ)T¥»Ý@ÚPª*C^ +†‘„¾‡øi2TÌWîOEjÊ©xö>÷ì\ŸîCsú:í¤öÏ%÷Ü‹hÏî¡>»Ù­†i4Ç!Ð~ñWqw¡S1h>ã>4'©ÎáîácDãF‘6Å«¿o"-áË®íGè,x£[±- IDATZJ}]«m¸¸ga?¼ˆhÍÕ‘JËýòéâ›À½»¼L89_"dˆ…tFÏÑ|O!Ж~DïF&àS»I»Vp6¢ÓM¯jŠ´r˜´©Á8ÚÓeÓäi€n§:íï´~O"šp…‚&0åPd 9àè´¨ß%Dû+Z ï%ÎüA*W‘JäãÂw»39‹T8©”¾E¸ mÄÕtï*ÔV qÞ‹äkDlÏ#ÂûqõÔZð㤠Ç´ÁS ʫŊp øCªUáchcæÌk +~éJqS܇®‰kÙ:$^¤¹+M8‚O¬trg»7•67g#×Á!à"Bó p”´¥ðmAóStµ6ŠÝ]ï8‹¬¡×"aá]òR$ßJx …*o +GÚúb>Oû_ «4/ØÌ Ùç{º­í „;PØôN#§zÛ†% ëíD8¸š¸`{Ñι„kÉÔA$ æÑÄ]²1ûHU?Ѹ?@^/þ +Ç_V­Ay_y;o#ñ(õÌ?‹àÖi×ÄóÞ¦YtZoÚKÚ­1÷ê°ê€1 ÍínDÛ6L½À3PO&+p +ÐFN:6À4÷Û<âìî·_ ° óß„˜ô!ݦîúuÚõ+ƒd)Z£ÙH1¹›HxÞïþ‰<“‚ãäyIT·Úoò^c!í.‚Fé*y‚þl„ƒ»Žö!üÒxo@4w%ÕZì«T_[.'x¦\£D_cÀ¯ƒzøœvuòÜ>r`-ÁeâE¾k€CÀ÷h'6}ˆ>ËoFF»r0a¸!\Ì‚ös¤½H!ÙfD~„˜Æ/Ñšý"Úû‰ßQõ£“ÁÃîÝE+íF0'í:¸AÀÕãÔ÷÷Ktú D<ÿ¡Á»bb• ô©{ÇèĶ­ÁÒ¶߯œUÁaŸö!×Û'ÑIý/yÜEtj+‡…ý1©É8e5Õ¼ Uõ#ç»]ù ðföÜ-NÝ/¿ˆæåU´ŸÊð%y‡ŒÁB¿ Ö"ÄD~ŠhÙµÐ4ö=‘¶f¡¹}Ñã˜p:‘>„Ö³‰à~ >‹ÔñÐ<…hß]4×poD4ÿ´Ÿg ëß4†Õý(¢~îîsíxzx­ÙnDSã<ðf#Z_æ£1ŽR¡U‰ ¿Š{Ç>äJuE˜z…†&{UF3ª²ùv´)ã¹Ý®?[kêçÜAú Ü©Êu%qŸñi—S­~K!õ ÒwÜ_"âý§‰÷îw¿ÅN`“a8÷mÁ›À_ßÂösˆw ÞD­3h«1™ïðЭ áZDȼFè^D ½–ã +ÂS/¨üáÏÎ.Þù%ù†¯){‹Qt +óDwš×UÔY„Æ6õ.tHð†zžÞ¢ìƒï!f{–t¦ÕÄE¸1¢ÅHp¼“Ví–ï_ƒ›h î´u1¸9ˆÁ—a!h¶"ÁÿgH œ #¡»Ê¦%s‘ ô²Mkj亄ŸÄ»e_ U»–³—~Š4¬^ø˜æÜãÀT´ž \÷åÿÍá#îý¾w}ª<À—‰zŒ>·s¾Áýý“Ò÷ƒè”¹œz Ù¥hÐ +ßÝ ß`2áqtbYD=’ï÷SàïðRŸ7 S ¡º(òÛf„°)µà0ÁP&£‰÷VÁMÒv³¨ˆ_u§Ù L®€‡…hÏ”ãtÃhÎÁMt¸x–ôuÛ?¹ÒG0úËlËÀR~} tñÊ_"+æg¨W³Þƒ6UÑ ë"Z”\cÆ”j +y§ÒA‚ªìªß<|Ž6Uì„îáN÷þ”±ÙH‚/·Ûîƒ÷?áÇNAýˆX¬&Ü“J¼÷,"bÓŽ ÓAiªb¥óà9C„€.)x–´Û× ÞÕi2áÍÝÃ.#B{!Ó<ªñ·É]þ*„k» W†ÝÂÏÎÍ Ø¿%¼$Àç4³þ~’àP„‹O÷’žEãôö/#BŸb$Uó£±Î#ÐÕ úZèÕµ>F{ñmZ£^FÂÉnâ÷ðExÏõk”°?rúõÊߋ° G÷19AºbšÅ:ȡǢ«ÌNàTk@ª ^=ܤéA¬àiÐ`¤P|œà çLqºc¿m´ê¸Ø[L±ÈG"%¼!°¢ü4‘èá¨)îzì·ÇLIª‚L¬4¤xÌšÇÒ¿ßõ3z…) K*¸ îÝ>‡ÏÜœ.Ìxÿ¸iýZvrÆÀ¥*ŸÀ)HÍGÖßXgM¾±Ö8öMËÈã×± +Ÿæ[$`†+cn>}¬ðc¥rÎýÍíçªÌ燭y œ&\|Þæ” GRÏX>Îî2Á¦à5CÏ–çìë,¿F¯ôJ¯LrùŽ™å´‡êœ¤JoRG‘ôùÿF~{̵“ +ê1€¤ì¥´«;ßEþìU°Fb'†sHzÿ^M¡“콄°ºèDxÍAÌÇ«\_CªöNÕKë‘ÚgAÍ6ŠN€{‘Y4 }ìa€àÆ×©5~ )ÂltÒêT­<†Æ0Ù¡€{Ѓôà·ŠÀ¯“Æ`]?ä0çºÝG!ô‘ü– †º©ö_C÷Y)‹üa‚R¼ +¸„Ô‡ß^åWõ.qëã%ô =èAz0)à€_7íAzЃô ˜‰—/’Ö¾ìUšj'—l^|ÝÙîoì@ÛGˆ_3dÏ£Cq,¬‡ÄoG‘cU¸ïr½;èÀNÏ»þ +Ïø‡´ÆÁÿðgÀþdtQåÏþ)²âÿ¯Àw +å¿Ñcþ=èA&†QД3È ñJcîÓ çú†/£Y¨ê~ä¦üòûÎWPJõ)Ò7!÷æëèð•ÃèŠ5šÖÕÁ8ŠŸÛ·2¬§Õ<†\½áuк=M`¤ÂcèºðYZ‹ð {æ Å}ø)bÈ'‘{çÓHÓrÉÞïúó*rSÝK0r¯ïZ÷Ü×~îœîEÂE㘩\=èÁÿßa1ÚèÛ‰G:ëêbj¬#X ¯„³Ø–ùŽí(H]ÜŒø "9ãNùº{ªyf 1Õ¯ÿiŸ&‡`:%Í!äÞø¯„ð´U‘'=Ì&Xód<ºŽüd_’›«â#¦#«õF6C‡ÈOg¼¹ÊËää-r„tÔÀ*¸ˆ˜Ð¦Ìç;e¬÷ ßõûèÎÝäj¸ÔýŸ²ùñAÉ óȕǑ Û3È>ë{Ä-îû>Gž>0Ú#ȳ©ÊÓkš{Ç{gr#M ¹¿ ¹¸,øu[!öJ×åA“õ~•…wªÔyW,tmc²ü®koÉÚû†ýhjá^Ubi`—Ys¯ŒA3[l‚”W@jΞ3yË7ßo%úè˘É{Ãܼ¿ãÚÛbÕÞå6^pmt“R9'mìKn~绿M¸rÀäáð…ÏâDý÷Mž'¾ŸCî³Y}Ša³vo‘•îû*ï“~“ÇÐÓþÙWóžbîA×~îZøúeOªçLÞ=9õ׸µÈYKïõ”³/be‰É£'×ój$s­RõÆÖ‹•ñĘ'£Ÿ˜pìyÓš›p:…Ïæ}ót1«önZla¿Ÿ±zº8d¢Ï¯ÆLøœ=¶n'þV–,íº÷„[„7:hw¡iãuÊt–˜ÆQñ{Þ-ØaÁ{Úš»¾™Ä&kΨfº÷ÓÁX›uÂ̶¹yÝî>O¸yZèæÚ,îîUžÇ]»}¦üÜOeôc¡IúT9áæs[‹÷Mn)÷Îbb›ÚLx»‰y›¥‰È2“»æ>k]Ç™¦ ý…uçÞØ¤L¸þvRwÌõõ˜û|bn01Üëîù—Ln–-¹ßWEêÎvóY^Çk湸6åùômŽWÔ[oÚÇþóSžùÔóO™š…îÙ˜»qU™éúäéYŸI(ÌÅ÷m–ÏÀÜ»ÊÂÂó&̺7ߪ]ž‹e$s­RõªÖ)·Œ»¶nE?ýz?ï3Ñ•&<ÄãeÝabÀõq2hamIý°©‹…0mè 7Ø¢$9Û„X¦ÍP5ȹ&‘b¦VOÔcÅŸ0šÇ>“zÁ´ARÏ­1‚›œ¼,0ÚmŒi‡is¿[g"ZÛ­žxŸ10ËRŸ‰¨b­³XöYÀ•A·&ÇL§ˆÏ,í_.§¬UztsqÌÂ)ú”ÕûvczÁÄt›€:AdÈ$}Ÿ+”o\[§Lk¿ÉªO~o¸qÇðúy<^Q?EP-œ"ß°ÖÉ'5}3ÑÖ3¦5<åÞßd.‡Mû¶jï.1áÔ tdGM»Ôi)©¼ê3W +ôe¶µ£¹î:ºÎÚá}KYâêzâ°ÒZ™ê„[ˆínÖgö±Ï½÷œåKÕ¸÷¤Y¹ìªXˆM§¢2±÷’{'sv¸2nnæºyqóö¥‹¡H_pß½`bŠusüše!RS-˹R·›ÖtÌ„ Ÿ˜6_j^‹ëëñdØ´)šžYo!U¿ëWN=¿~±@XÛLDäNÇæs¡I`wk¶ÑÍá +“P¹Ä´É¿²êÓjq¼e8Žš„‡c5uf»ñzAÌãÀsî·Ã‰÷ ¸gg»þns}=çæ$¥êw¿d~_.fÍ€M®O_¾sóô™¥iÈ27kLø4nZÃ&ø½ÑÕÅ$¤ênúéË®ô›öÑW&X—ès7ïóó½ÎD+¼Ðü†U œÅu2Ñðë®/UÔ{ßZƒO ¹wYÍœø÷2i´FL{î3«°æƒi…ú ×VU`»".Ÿ3­y¾œ±ÖCÜÍ«j»“:-%õƒÆ›4f"`18lBŽ¤î–³V†;×´Xç\¹nÚPLš«:ŸpíŒ4WŸ«S@LˆêOÇ,0ï%Ö~"/–ç +c[gÚ¬¯Xˆö·¦f<ãá kË3á¬]¨ò‘ØêÆ9lÚˆo™6Ê æµÏÍE,ê`¿”z¯%Öd‰›ÛœHŽÅ2èúÓäþ~•µ ç +ÿÏ·´Ô?ס\…ëÇ€ÂëSŸ‰]7átYƒ4Óý6‘9– ^ŒXÞ}î°ky|¿RLÀÉL¸ó¸kc‰iÍ?±´¦oÜÕÉü¾\,2ËÜ÷)AÚGÜ,ãg¬-_ÞpÏ Y+>l4äëú‰iý¿qó’s…ÐI?}™mÒ&ž3ÑÞ*e·ïqÏ”í8ŽYµ ‰¯7naÿø«Ãªq™µ ”㑾§ÞWÆïc¦ý«ã÷tùúÊÏËŽšwzžUgëÑo4Šó@³˜Éw"ëL?æ>dA|ùj.FÙÖλß/Pf{þ(r ñ¹¶÷#ëÑ{µéâÙ½þÃc'²H¾Bp9)[Â>Žâ;ädkûõ²Zmâºù(ÿÝhmž%Ì×Td¡|»Œ;K‘nlMF‘ÿn“¨€h>%dìÊGhM§:„¬ª$Œë,ð±d=ch—"ÿäóîûX\ÿ›î¹iÄ£0nuõF~KOY\ýhþ·Ò>_7©Î¸ö/ho\ µß³Ñxv’å-Úgeö3«ÑœÜDûò^×—TÌ÷«‘ïêpkZÿ©´æ+ù!ûkÈ¢=•_´þ'c9O&£Ÿ–£¹­ç­xh\~_ŽhÙ!äÊVçw?‚öÉjªƒ©y³ÏÔA“¬•~O—sÐ\#Ï›`:òÈøIÍs×¾”o²ë´ALF `!8Š\(  ½ÀÕ[D{PƒTÂ’*w†XZ“‚xøšèáÍ]HF ¶ S¿˜„ç„>PÃ(rÛ(n˜ªìm·²ý®¥hãþ'b0ÛÐ&z•ø¦(†lÞ˜CÌ æáDýxwž&Œf"6ºz÷ ¿Ó}¿M-æÆä]XbÐ$Ù h._Fs|7rkºBȲv¹ÅàˆëÇ(ÂñK®åh}R±ƒHH¼üè—7‰3ÿa4‡›É_Ë&I‰NÆõ¡­céœw¢=úLE½wQ?ïsïöL|sE2\@¸ï³a^qíM&<„Æs‹{Ü{ÿ¢{Ýïß­iÇãO,=îdÁÐY8ðÉÏhG©f =×I€žo bÌ>'-û òÏw}°¢ó·¨N Ä€g Ù±ö A¬u/*f“Š ¬“î±:·î:D:=!xF'ÿN2½yÿbÑêϹˆvâ™’£9>äêýZÞ¥•>‹Nù ¨Žåa*p?"N7ÐÚNuÈl$…¿Nþ|¯GQ7˜õqÄüV2#VÅå¿Ãõq>ÊÖ”é{@ó:ÍCùD6†ðêíÈoÏ>÷ òå®SiÕ¥/æ"ìF§žTFÆ4ÞDkxíõª`_90Žpz'ÕDý&›½hþ."+ÇßËtž-~êÊSw> 5UïÛä1õW]½˜À4°Ñ”?¾Eíwu¾ì»½¹ñ›néü­€´÷+'[éID×ë`íïýˆ¯\Cþý“]§ Ê€žp翃‚,¼‹òE4 ¾ÄÔC9ƒ-C,½í4A]Kœ™^ YŠTŸ³{p å7XÙ ~Qàñ' óhæ‘–üžEÌn7ª†Fagé¹OÏÑrLwíÍ@L÷¡ÓÈ!¹'£ ãz€ôi<ϸw{¦=Ÿ 8ÎA µ.)Ï4tÊÜ€$ÙaêÌ”aà!mJŒÁ¿‡˜\U0Ž2äãvŸ†wZÿòʬ³¹ð b¦¹é¬=\¥™†ìï{ü€C1C‚Êi„uðoè$ý»(êÿ _ËòmÃmhíþƒvœÎÁ“;ŽÞ*XJ3ÍÝ·u‡Â݈ùŸ§–¡xeôm€çAemn­ ÛRp“<-ÌŒ"o}©&w&£¥Ï>ìä +ÄP¼ðãU˜1"6IŽ?E§€ã‰.gXWI‡· ¯ ƹñ2ÂŒô=¡ymr[Dظ›x<ÈUAÞF¸öù©Ü—7舰úkªªœßIa4Ÿï ñšÿc(º^*2h>ZèÑgîD1&ôÆ`;"÷Pj\¼…ÂãžCóqŠ"¸Žú„ Lw!ôñÌ>aæN¢9è˜0}Ë=í*ñ“ß<ò´ŸèŽA×õs*͵Kݼ¯ +<Ý:_óÜYDßBóSšù]Ä”ï#às¢}·~èE9êã]hž×Ô?Š¢[V…o.‚¿~]H똪CÔùx` ZˆÿEë}_Á -~ŽwÎf¸ˆTJå3|<3Nï#÷*Úx»¨™¼1©"“½J\ƒ;ý\¤UØ8‰ÿïA¤Æ|Þ}ÿ:q5ö,Zµ/ºvo§=Ftbˆ1íÇ0èO,‚Ùk÷ã|ÂÒAcÞ·ôæÉ-#¢‰Uù‡ú1}”ø}±‰zó|Y÷™6ÿ9÷ž,íCï£Þo݇žÜnbú#¥2îæ¹Š°îp}-fZìúƒFZ,®=/,¦@Í51q¿F_X{Ķ%–Ž8á;S±êÊ 9ÌâêBÞ˰iV¬Á&7ƒÇß÷ÝÞ²î÷\¯ôJ¯$ÊwÌ,¦FªÃý¤]¦r` ©¨ý}ФšÌq÷x©.Ç}Ajœyîóe¤Šñ®xsi·S؈®/fÑ®®9àúå­w}¾çQâj+oÜt©Æü}H ¹©ÐëÔ»#Hí–V5é€{÷j¤Ê™åþþ¸¦½a×—­äç.B?“sW;B°À/ª¿/¡;ïCÈo:H¥µ™rZG`]]ÍB×+£UánòÝòzЃôà·bÀ|‚ ZóÉeènç*º#nⳘü;³lBw¨±”›+Ð8g ³¦Þj®k³hHv uwB1@‚Ö Ä¤Î"fxœfwñ=èAzЃdCYG'ÐLn‰MÈ¢ižô =èA:…!‚gRŽ'„˜1ÞK­ƒÖ¤U._D»ª~L–Fv6:L>мÃ^pý™EAÃ]ŽðÀ÷™üRÿLù÷ =ø¿ºq‰KµWåVƒ€7h'cðò˜JÁ|âôeXŒ"­@žÇ€ëÈeµ[Xˆ¼°^B¸ ø y©uã_ù×Ü縌¼ÌA×°Má~Wò:<¾.£kìS¤=×6#+þ*wȸŠ4Êþšú"!bæ¯ eЃô &ÐGp¯<‹6{ÓË9°]Åí!ž  ô£ÍŸÓGÏ\b'¯aºÚ›Ì1/$äc¨rçÌí_îœÝN|çiwîÊ´îØô»ºw kÐEÿí‹ÀoÐÖ&d·4ü“â&äê6x¸â~Ä î¡þ´Û‡ìºæ ׳W]Ýͤm|а֍¤Ë áÝ(ÆÂmȶëÕÂ3oÓÙ¡t1þ×ܘMÛ.t…[Ž–ú²íªÊñP†hm6 ¹Üˆæê¯ Ï<èÇŸ&ÚxáÈÿLü¾ + \9·@N8Ãüß [áe'¶‹ÑuÐßÔ<·Iµ ´¹ˆúpž##Ó*½Šx"$І=YS¿óú^ä7ÕëÕÌÌÛÆŸÅŸd¼ûvDgNåvç ãÊ&¡[ýNG̦hݤlË IDATo³Ã½k/ZÛ;H s\ÿfÔôÏ–ªƒ 9‹xHßµ®?uÌ 1³ãhç fpÙõó.BäLå³Ü÷:¸‚pµÈüG\û)àŸÑœ/Mü¾©ŠsTÝ7Ñ\ø¤UË\r˜?è4þ(!\÷,$H¬EŒ?7×Lª`xï!CKÅ$ØùyŸWºzÓ 9Nnsíl%=O-%Ð’Ûhç³{Ž l.Pm*¢Ÿ{éÎH¿6ÀoJ‰¹µê<÷«LnD'L¾¦§L9™ß²ú4ŽXó|ö¾Ì¶v×±XYoyù¤»éÛS&W¶œt°Å2`!•hÕsóMnƒ¦ø2ß5ß)×À ÷{j~žsãªs'Åäš÷–É]2öûv÷®§jÚÙbqWSߟ£®eU¿XÈ«^å¾çç•Éír¾µ»cúÔÙMޟ± ÓÞëd\#n¾'"ï;fŠÍ±Þê}æëú÷UMýryÜÒ1O&\ŸsqÍL{g…ûnÈä÷>ÓZû¾Å´¾1·Òa î®3M8°Þ‡à}“»äQ ®Ÿ)üöeGb|ˬ=J“rÀõc‡…8U4Àï7ïVí×ð«w9-–]nþÆMtd“É Ù÷çŒ{ÏvÓ~¨sÑ=lZçL´`µÆ~t}ŒÅ‰ÁD3?‹ŒýyÓÞ,ã‰UŒ÷1«ç!Ã&7û*7Ùa÷î·,û¤J° +I±ÿX#C4=eÐ.AU©'GЩa![(jáH¥;yíEÒöß¹Ï+ jêb8/C*¨g€¿¬y¶}Hš­ +ßëa*Rí¾M3×7ß·ýÔ'Aù+4¯OÖ໑ŠiCÍs;Ñ}I3Iô!t’‰Eä›K8e?‰N¿eÏ‘ hü{©×#î]Se–à6Ò.? »øä3Ñ háÄ~8n£Þ&gþoОִ +nR­i’Ï ¯–>OAÚŽ‡ÉKUÕ¿Ûhž2¶*ziîIý&Ҁ͠õtú(¢=þ»Yˆ¦íEî±/Ò®î½DHÀvžùÍg˜{Ñ]¿‡: <ˆöâêê®@{ë´#ܽáíÄ5thÆe‚ÆbZÿ&I¨º÷Üp?@óqÍÝyW¦“çyö6šë H± ²=|‰èb*—ÃR×⺢¹}¤ôìM×Ç͘ÆQŸ"úû¤ëSL篜ˆÎšf2ÖÕÁ(àqêï$¶ ¦÷Âw‹]ÝåÄïZ~‰&ñ2í±ÿ/“ž¨rzÓw‚^¦Zm9Œ˜ËÝh\ëÈn|øÅ¥Ïþ*Û ç.µÜ·Ôçšþ>R™Q&$ ù”§u}Z@³ÄA uµ¿õÇgZüÔýÝIû¾‰Ôù#1µžýgî"­¶û{DLRÙ=\!-ØÍ¡Y ƒh|ùÓÏ»ßnGs1™‰Or3®wýñ™ïŠ0­K·×‡^»íï{ ñ4ê`!Ú3óh§ Ó ±Bš@•0…|â&ítðZ÷É/ÑxO£}¶!ÑΈ¾ï¦'}éÖ&D{AˆÏ#0ϵŸÚS}ˆ7,@tû­Û{®­},_Ë,¢žá•á=477ˆïmod÷lf{Ó\üõÃÝHp+ÂiD³c×Ói°7 ¼‰]]¡:L{N8ýg?]Kü þoh¯%AŸR›x?"Š9).›œ2o£]’ö)k«N'þž¤LŒêˆnL*®#\[Ñ⿇NŸû‘„•c„² 2¹n#ÿD¸ï©cä±¾íqëu9Åm|M¾Öc:ÍNžù{ƒâ=ý×´Ï”¡ê7Ð #'UlÎ=ötØ…ç§HXº‹ ÕÁL$,œF{ë!´ADúðKÂi¦I<ŒDÌÎÒz'<ƒ|&ö#„“·‘ÎÐÖmÒ™§ §&sþ‚q\øÓñyÒ‰`šöïZ›îó‚ð5J³Ì£e˜N»ðõ1bþ—IŸP?we.k™®,q};D5 Bc™†ã§è`ベÝðãsd}'é=qÐÕY@Ð’–áuD7ûjú塘þ½ TÑäYˆ?äd¨]I0ÌìGk=V „ý”#üú¤p{¿’ÈËßû¬µeêÚÓs*úQ)H”ÝAÈö6"œ¹¾ßw©Ëzt¾â·‰§ ±U|ׂÂg?IuDð¯ 'SÒ̵@ý?4÷ýWò˜?´÷íû¤×h%!y¹ê¼®LRkÔäùUÀ ´Q¡¤HoÔôýqBªÞ*ìaäîôéd4“õLø"Øw"¦eH } ©^„ˈ€^&ß%Ml¿DbÕ/ƒ·Î/ªØû‘ Ý”È^¡5x±äX ÏGs?€´UO#¡æ²ëã<¤ë$"–‘w•ôKDØ»í_>@¸¼Ó•¥h7¸ÿDkåAJ‹óä©§w?-ž$d"]˜¨;ˆæö´@‚Ãt€øE[õ™ªÃØ64ç…˜ÊpÞým¢½ÊÕNåÂí„LƒUЄ•ûÐ<®Eóõ"ÍüñËé·@ü)& ÍtSIÓ¼0ZlëdâÙ T $•ɘbA³£‡Ü:eäºø>Rˆ³š"ö:©í§zBf£Í6ÇõÇk'ö¾ø¶ê »ßï@sæ-´ï#®J?äÚôîB}h³îþw—Ïÿ›+F^âû]¿«TñŠ÷V)œ˜¬gšÂ „C¯Æñ¼û;•ú±}íú´ ]»ñDÀgU-|7Šp¦© [Õáˆè¥<5@ŒàRU^@s糋zUëbL;éÖ¢¹;ø­wÐÞf¢‰—C +ºank(Ò-/ ÜDÌê8šÃÛigZ_ì <¼„„­2s|zc™ ‡#ò×+ÎEßI ›ÜÔî¹p;y× + ð÷ŸÛÐa¥ þZ!¦y>öôz´>»ÑÅhÂÝ®”@þ.:Pì%xò¤ø–Oáž‚ÊxÅ îݹ®ºGi5¢‹A'uÊ'}ßù*â™Ä Ò×k Æ7SòÖ!æ«•¬ß+ 71#•o«N=ŒN-c¾‰ˆÄѶ›>ßÖÒÊ4« xo•Ò +MÖ3 Ç]ˆIåhz¡¹òö*ÞúUòNsÒÌ]p:Ùa”8Q¯‚·qyá䈡O-W¨¾$¤[õjêòIõ^D(sµ`E¸“ ²/Â,´FW€ßí ÝÉïøƒ†õ|>”rŠÜb +ä›h¾ŽÆ\7›.” kÓKÙþÌCôàkt%u7ZÛíˆÙ¾‹‚¯‘°ù×0—F¿¹Zç§Ñáã +ZïYh^¦»¿«]¿Qmd=‡ ±8HpÑüiDý©Þ» +Ÿ&®ÁüуhÜÏ× +.C|éi~t„žÞG#LA€Z.»àpƹ9øÏ[œ›A•+BÓ:«¬ÝeĹDT½Ç?3Rú¾* ð9ç"1R(©,pXHýKkú…Éíä×UgØÕ™(}¿gùùq÷|9¥ì¦Ä\7}Þ—XŸbeÌäöó”åeÌrm Ïø4¹9é‹gFÚsßUáV§e¥k;7ƒŸ/»LîGþó|ë.Õ3&<›˜„1[g)Æck;^* ­u¿ç¸‰ÞêñbÚ§×M8–›í±ÏÕyÄ[óMn…ó·Ëê3·ŽYܵwÕ».6¹× Ypá{ÐDóÇÜo~­²fn¢sMn›Ç,×½;¡YȹØÂÚ™p¢&L®ýîï[n.F¬u­qëñµ»õ˰µÒ‚aׯm&Wô¯L4'•>Ú—×o¬ÞE¹ªŒ¸9ýî5ýètùbA6¸T#=tRç2íÆ49.(‘ÔZ<É Œbð6q õKăzÌ*ü^† Äï³¾­:þ>¨¬2šB«ª· ûi?=Æîì:}>ÞC§µ‘ºr5Õv•÷V“üÌ!¤%ˆ© ‡ÎúSILe?Ã=ó%ÂÉ;NæÆOÁÁM¬i[7h]Ç& ¸n5Ü ;ƒ:ŸÓ,B[ ¶¡“mì¤êƒÀl(|7àRµ€¼ C “ÿe´¿ŠµûHйIÈ„ +RS?àJL›SwÛçÞoéûa‚vÑT>‹ì™ŠpšpeyÉoºJ°/€¼*~´‡h5Ú{™t´¼¿'¸ÿ¥NÁ9^O'Ñ û*A‹â5w ÐËSÎÞƒæé éëª2N,@¸ô:šÿ\{2oý×4 û\„eCþHóТ ñÀ5à÷ ß/¡Þoº“: …Þ„Ë,ÂëC“› kÈï¿ËCŒù!×ÖjZU”#®Î¤ïCcî`uwÈßV¦ úšÝa6}¾ |ŠðãZƒE¤ïÀs~²žy¼Ø5Á¤ô†QWºðÙÂ3çÑx޹ÏÞz|yH–¹wÎCªñ²ú·)¶áQ… õ ¬,ðTÁR±ú;Ô\î ´ [ýh¾F jæäôo˜pG>Ãõïñ°ÅO"¦å $ýÞºHÚû4·¹ÌßÃ]qõ§Ò,V÷Îñjè¦pµ¼ç>¥UШª?­‘H"!Õ 5W>>Js÷à÷P,¿~³¨ŸŸÉHþéñÿ^âû&‘U;¹Ú*C§É~JÍm†‘äv’ÞÎg¼ iQt|”`;°1±H­ <äßû(i »"–ï'½õpL§ Ööù¶êä2hÏÌæEže›jú|§ð5!9Æ«H‹ûê{«É}f1ú˜ðú|«R3oGëî…†iˆ°ÞM=“I1° Tß¿¦Øj´/§öòB`• Ä}Ö§ºþæ<>J, É%Ä|SDk-s±çÏ–ád¤×øö »°ÿ¾‹º9'â*øšVmԇ䅖n/oÕA¤ðÀ’¶ö#¢|zשNêLCÄéKß71Ôñ†‡“Ž=…4œFܨʟ¾cª`¯æýuÕiÊ ßuílEŒÁKý ÝwÞåóÝÀׄÈa;©÷å¿•0ŽÊfÒjö[Åø=tCÐ'›ýü˜îÂ×ä8cðšÒõ =H€061÷´×IiäÊb0¹\-Gw3UjoZöa_†ÔXÇ#uάu‹0õ9v§õmÕ)2è™…ïtu 1ÙQ$p}‚2[$®5iúü8Áýí!à§ ¼‰ð&±mÁzv§û|«ž™Šîüª,Ù{Ѓôà·œ5ำ\æ>/4%—0÷9–t£“:O›¬Z;±fœkù´Þ¢ó×§7L ',€Æé-g­yÀÌ^2%QÙñPg•É2Ùܸ>scjšè§Wz¥Wzå·±¤ÕË“5~Ìk¾…ÄIe¯(_-M˜ æÙ…{Ï7xh±¿oõ®Õý&â¿ËÕe +,—¹®_'ô­Ïäv|¢ð¼Yœ)Ë.ÓAÄ3µÁÂøbe¶É©ž±àN{~ÈÄœ=cÛfâ)1&Y.Ç2×Ò»þÆæh‰ÉýÎ,í>ìùÞû&>—rm~Ð=÷Dâ÷§Üï©CéÜÄšx·ð²À3h­ k‹¿øYôÇ•?@ (~YfÆî;©3YÆd=èÁo2ÌDö0©°ËㄨbU0ØEúÉwê‹|73ò].ÌÞžJ´ +rS_?²’OÕ)Ãýî=o pÔï  5Uð4ð Z›!÷ÿ ïº])½ŽÜÕ|¦·*¸ŒŒ½]Ïyê³(^#䈸]&ê×']ƒÈC£®o7]¼7’ïk]Hö¥®íÍ($øZªCѾŒl®æ¡°×KÑ5n*wÆ 4G>à”7@Mõk…] ¿ƒæ«jmE×1{’ŸQÖ{7ri¾Š5íL<÷OÈÖëû‰ßBWÕ)[¶_ yX^úþn4w—¾_J{þ‚jh"-ôJ¯ôŠa +®1aiÉФ²»n +ÞRþ}‰éôµØ¤Iqÿ¯2ö™NJ×-~ºši!pˠ锵ÌõÉ:çÞQw¢1G +ßõ›òžb +FÔÉM˜ õþ%®ýs¦+:ß_³úÜö˜´ç¬5 Ê+Ö˜,Vv¹¹qswÆò­l7­w¿é{ÝÒªÝÉ, -àB*HŽ? ú¶ãôeÈ©y•é¤þ‘¥¯!ý ¶¬J?lº¢Œ>rí ™4þt¼¯¦ÞXÅo#®ñŒ÷ÏuëÓiÿ«ú銸Üþ+¦k ³Ö@GOXý~o)“ ½ò›Yf›è€û»=ñÜ&K™%&¢R·±ž¶|[ _´jÛŒNÊ:×ߪk§}&â5ÓÌÖ»ùù‚ú1UúL¬¨.—U&XŸøý9ÓýŸ¿2{ÞDÈW¸5ðQcêÃ> ö6æþÁÄÖ»µZUQÿ°µåMxQŽfø™uµïy“`Q5ÿ^øÙèæýy䨵³ökÆ]ô÷7¹ ˜~7‘ e… nU¿}TUñ˜ûû‚ ªêVÙ¢¸vÇ3ûq=ÑÆvÓÞž¨¨[GkÖ¹¾ø=1`Aà¹nÚ;þÙSÖ0"i,ào,N¡@(§ˆ»' ÕQ70ÐðÙmÀòÔ¿eXlløN‹ïýÿAê¯û"ÏŒ¹çRîp·!µSU°§õHeÕ4Î4ò£Ã øïOžÇmÈ›"åUáá]¤=‹Ôl/¢1ŽÖôá&Ѝvò/õãn÷îE~ÃÕ;I¸2ûs”#à'h fÈÕùÒ÷F{$Ã"ÌG¢º¹æ]Ym'Ôm¹{‡¼Ͷ +Ž k àcî|ŽpÝ_õ ºçr# +H }¦â«9],3-Ï¥i©:e¾bA¶Êâ*š}–wúqÓi©ß=¿Æóú'¶¼øö}T¿±xÜueÐtBúÂ2-<e›µŸ’úÜœÕIãÏ=à×ùhæ\”ËkwÝÇßOYýŽ›T“s­^Õ¸Ø.°<§‹]?¶”¾ï7ž«Ôqë­Ú`çy“– Óu>eÕñÝYë)è)kUï²úÓ ¦“Î+Öj5}ÔZã¨W•N¼XFܼXÀßç¬Z%¿É„»_¾skð™¥55ã®m3iZ¶™èÙ\×ÞÓïì$¿Ê°I³q¤!zÁÒÖèݼçŒ[£â~õZ§T~•¦u¼ªÉ3á¥ßƒ}&z»Úñ§ãbݪ¶Ç]ÛfÂÑT<þ÷Ìxâ÷AÓºeÂÔ5ÙpM;#–¦§ÅrÂÂ~zÎ?Ýh‘7×9ùLZJq@[\#)¾Ñ¤Ò³f®|³MĸNu\.[,ÜŸÎ4!Øý&•æ)7±)wÆCwÏ_cíD;U¼ËL„âXâï}k¦v9gÕÉ$ꊷ`mš f¾+ÜòÀ.Ë»ë·4¾dõ÷Y©²Ãš'^1‹ –ûL÷¦Û¬š8—Ë6±m*Àbj¥•h¾bmþYáÎví=ƒTs‹‘*ûß‘jlÍ“¬SŒÎFjô¦±Ò;rî„èéR?æ^+<ˆTöKiùï¯JŸûÚýÑšz>üo ¼•o§‰˜¶"kðT¾ %ûë‰ßîAêõ7¼ó¨ÏÑÕJn*ØÉ€{É£/± M<“Ê{.µ³Øn'¹RŠðsàоNå éä=ßV3ÀìDsüÕÎ +¤ºþËÒóM“žùùŸGûµÑíQS/Ѿ_;·ÑþHYïçÂtD£ú¨¦;G§ÁC´±ûØ}^‹òr4NÝî€/AŒ5vgº Ø»šŒ’ÇüAn>'xø!Ú`™ù;§{¶ rÛØˆþ4$HÔ%lˆÅ&ßÜE:É´vÝ?­Fó²m ƒÀ_”žˆõÛˆ©üœ¸€6Œ6Ú‘ß&ñú á¾j*b˜º~ ï Í€7†?Ek}!â¿$úx(òý(š“ ‘ß¾ùλ‰¯qt—=Žÿ&y‚Ù:tϽ›p_~£ ô°¦ƒ5ÏD» ^€ØKgaˆç#‚° æ¹›ÄïÚ}ž¦ÌjÍû‹H0?éڈşßG;ñﮢy/2™ÿ¯½·±êJóý¿}Ë¡¼”—ôGyÑË©¡*ƒùQ6æbšòRzÑAtÐA›Ês1C2˜AÊK2ÄÁ4q0MÒĦlâ\â4ÚÄ4eÐÆ„8$Á41ÄP†4´AC QžûÇw­»÷Ùg­ýrªbLö÷‹ªsÎ~Y{íõò¬µž—;vâ«„øÍ·tŸo;ˆÙ×`½ɤÅÇqÈ«_eƒž½ï®¹}Ÿ¶¬ÿÙ:6 ì£Ú Ò•æKä‹ò™áÎIýÍ‹}ðXÆÛÑjÞyì/ÞGfö!ûÍÐÌr¥Ëä½±Éc=8xµºóC´*t€ñ âý"šg^RÜ 6§À +õX€3WÖ +±b¶¬ž¬Ÿþ>—¯ýîü—‘_9‚pCú5Ø™¾ìþÎBkîtçû/ËÝ`Åy|—7Á2Ù Väk 2K^ $ým*éÚ‡õJ…EžÁs áAþa°ƒ8ø-„o8às= –ËcàÀ[và\ +½O€ƒ‡~çƒïè€ÿ]òZg_;A¨(Ÿ He;Xó¢ÆèëÁnäÏþctõ¬jâ°Ü¯€í}.¸ºð2X÷²e[¹k—à3ŸËïç“|ývh7¾ÊS`ý> ¶÷#ÈjÚ¹çv1{ÉëEpp.¨Ê=»¶ÿ'Àrš‚DxùAðÂÑ)—Ž¡X¸ŠQf<+r{ïïEñó¾ö+of¾?öÇJä§…@zé¶à0×P=JÓ(^ÑáÎ÷šü ¤Û[pÍS`ž;Üß7ÁÁ÷^°Sºì°>Dº,}îÞkQ¼ +rÜ*Øjé¾ +/ÿo]Þž_bÌa„¥ûrà7ßù¾‰xµ'ÀÁ}ì$V»¿7@ñ`'’·¤¹ 옞ñpàÝvP÷#.Äxnõ'›®¸óB¿åñ>X.»ÀeÐ_¡üà?þAíù7R÷ü5XïbÑ&C ‚3úíhoåàªÔv°,»Âæë×›à`X•°“¹‰r³O(0ܾ‹[`»ºÏ}ZžŽö¬Ybü«»×!p}t¯]D(¨Ð^¬”/@KˆÕà»ØX£ˆk¬·sŸÛÄ,Ë)°ÍF~O=Ë›M¿—û#°îÿÈ}Íò7!‰Aòªµï4›|Z=Me¶ËŽ"ÒÚokëÎÅÆžvŠ{¬};ÎeF¯(±Áâ6èEJcF¶¯,ßõ$ŒZ‘;Œ +:;e‰ÃFmoÿœ^tÄÊkåwµ†·bûNcÌ)n¬1*ì\·f§+/Z¾¶v^ê0j‡¦µfˤF-ØN÷¿w„2jåˆ X¢ÕH=ÃX‰r )¹T9§aqº2iž±åÕÅn÷îÊÔ}oÇ^õ¹Óïñq÷LUïü¹;ÜýË*¶fÓ%ŠºUêQ±Y«UN‡Q±4t=߆æ~ï3*ÉŽZ\ñ­áÞMèxš¾ÆóWv祿ërß½»Ð1y÷rçT‰•JŒÊÇ—-¬ißÎ}:Œ}{ÖGÄ€;/¤ÜÎ9éÔmI?³¸ètÏ9fÍï~•³*)ky‹Ç–Yc+Ìå#dq5â~ÏSæ^’¹NÈ•q—±½·c95))ý¡á2{ÒØ¨ï·¸™DÙôšµ6šQ«fj•®@\«vT;,© þ9Ó/s¬Ä5zŒ—ׂõÎuÞ¶|3k~Áé{/ ”OÙÔãòýJïéùTžŸ4v0ãÆAñ² $Y³Á—,ñêvÝ]¯Š¥ÃHÅrhX9ó™X´Ä*eÈ(eµùî]å ^°|ÅÚ7uõV5ÏZ5k?Àž6¶©F÷öÂß;VÎ׺OÆNü£y]Õl™5;2Êâ­ Š€A÷ìiÍôç,núéMÖ¼5ÏØG™Åë߀±½˜±­û:²ÏØV.[Ø“`;±Rb©ËÂÖ&¹ÏÝž f>-qÇmµüþJAÏncJh¸—9ÑAß§kžýûÔé^p‘ËÎtòÎq£`òû¿L^ýjFú9ÍéoĊ헸·µ—ÐÊKàžµ×XóŽ¿ IDATŸ *Ý îÞîuÅb÷{ŒwƒûÖ_€{HÇÀ=ç¿Ì9·Óå!½_ß î5Ý îUŽºÏ!ó.p?t%¸ô»À1àÌE4›ãÄ0pŸª,{õ\>v‚{F›PÝ¡îÙû½Ú,£àžcžâÛB°<ÿ!òû˜ËkÈ + †÷bUvß»î'þ™ïû@}Ž9à~Y™½ø“`Y^ßõt° u+ò<Š !Ä÷–ɺÁÎÿ ¨`áµÖ{Áòʃàž5{K3Û]o:8ø¥7ƒ +w!ljÐmç!´Üû@àMPÑf5šmüºãÜ +E +6›Aå£?Ê9ÆsÍv«îæ»üdŸeXfÞ5ìvpoÇD¬ ,ˉ˜Jõ¸|´Ù1f˜GÈ °Ëå!…ì,XNeìtWuÕ+«ÝëïQð½·SÎBq;ÙZ œû²3 Bi.Y`2fU¯!Ѳ÷ƒý´ÎîžWB|7¨…½ ÔŽuÄk@!"6ÍFûƒ]YGGUy\ýÈr ÔÞÙøw‚Л¸³ìœ…âN 佩ú $„ý %T™þ¼ ì‹W"nU•wîÝà¸Wu‚´I\ ÏÐjb?ò'3ýà; œ$w‚¤¹(/Rû]ƽìÙäî‘ù}ãì÷3Œ{“•Ý*)))Ýæ4hÔ{ùƨ32f‰~D¿QAôSK܈ç]k‡QÙ¯Š–¿ÇW.'-Ñ\Ö¨+äã”qÕ=ÛŠc¤“¿‡Lj´•À6KBŸ´°ÞH:ÿ×]ù¹óƺ^[-_Ñt;ÿp ï>^ÇPÉçÙàò[Åx:¯Yq†lZâîù´5¿ûN£’­Y¾¾×;&ýÝ…@Y´¤ÛÕH”””â©Ëª‡Pö©ÏÚÓ^eTšˤ׌J±1S­tž'òÌé3ku2ÃØ™dìØ}øÓì5ò?¸çðòY8I™h›+[Ž[<.À°•Ó”ï0 + Cm”稵*Æv5ö«(ªö'`ULê†\‡Ì­\P«Pþ;Œ“N)vî+F+öŽþ`Ŧã>=g¬'°öÌó¶Yõ`oÇï=v¿×Œõ3ö|>8š/ÿAw|a­úpJJJí¥‡,iÀ c§éíÝý ª¬%‰OóÜyßX5«‹§j#òûlcG8šs ïbƒMÌŽyÜ=ÃPà·¡‚<ø4jq«¡œë]£ìäŸ#–×a+ï_ãr›å™Í¿·œ*»’ºÂ(ˆí1`fÕ¬S>µVpß•± •¿OϺü„Lr;õ?ïýÜoåV5:-1é5«fëÓkV,<§“÷C‘'pmuÇäùñ+1#ÆvéŸw+ÛQ DO yõf&'Û3*1ÆXjáêFäñ"hAqô%?F@+•1Pd¢ùü¸ŸwÀu$qî÷ø÷þŽU¼ï PiÑÿ-CŸ»—w·Ú`+¨D´ôø¨œ;á8ìŒ^F¢ë+ƒÙæåäçhuqÔý¹“¸î½î-_z¾¥û ‚å< +*é.ž„kîëSQœÏjÐ÷?€õñeÐcé“ 7Øç Î?–Q–¥Ǽ¨‚€ÒêÛV6ÀZš_¢œÅ”¥ð±»^™X3 Àþä~P¯í^°>û–Í`ßkG½îo^þ}ü…ÞÈï`œê¬Dò¼@ï³AWëŠ@|¨ˆØ`7T²ìÍúʺA}ìbéЪà‚Ëçdpl°[&éz'ÀÆâ×`´³ó`ã^9nX©áþN4Ì] ùèrÐ +d¢<6ò* í;ý©c"?hËÏÀAân$ï'Ë^仉½ +¾ƒY ²ïHÞ4<âîq |wƒBî“`; Œ W–`^C +Å1vÿ>ÐRg(þ=€¿¶XûXWæ ÙÍ凞ގÅPšsîoÌ 109Ñ'×"q·~Š:â‡àÀ½Ú¥Y`ûùK°mß FÉÜö©!!9æJ:ÏŠrÛ +zsÝý/‚Šñ~Œù=(<…@|˜•§V†¹ í~»VŒ½à¬b +XÙ¯¦~Ÿæ>ç™!n;°sîÙüÏ;÷í ð"¶ ø¬_äLÙ vf—ÀN/9kºËcÙàH¸ûŸŸÙWò»Ä5xÀ}ŠÒU…Nð];ýwÝ}«j‰À†q +ìòžùhõ‘5Ç(‰¿‰É™I9ÞD~èè"fƒ ý ð½;Ë^#׈íìÉR5²Ù\$áV7‚Ç/Sù9:ö}ÄvÏ.°ž ü¶¬CE–+¿s×y ìx'fu²ñp™ÎºÖ‚ýß.p–÷>šû¯eà›µÐ +Ñ8@k0²«ÌvýêÃ=óÎ#?¼öïÁzµ‰ÙõZ”ðU†¢@EYö ù@R׳t€¨o“>ÊÞbä÷×üØáø¯‚md1ʯȔe#8ü÷y9’àqË‘„†g î¤ÏÁ%Ÿ€K¯½ÌèïÀa1(L<‚fg1¾’çñ/àÀw/¸ÔáÉ +E!-=‡P<p¯æäø©ËW¬S;Üs%®ðüÉòørwmþt1Âf”eØã®ñ’] N´åËq|§þZ·ÀrxI¸á¢kySGÐ:›Ýˆ¤î”e ¸Ô}¬ÇîÚ{Áw¹œ±„,eéQzÀîsŸw! }b­Ës@áã~p@îué.°M>ŒxG5Qü,ÁÿŸ¸ÓN n ¿Óø®ÿ1ðý 8£, +KìÙ –á~´gî:¬‡YŠ"²õƒ†E™kœû›*×j—[îÚ‚m0;àœry+2kžŠdÕÆ¦*Šf9 |ÖcàÀ¬‹ÛÁºý XFóQÜtç=Œ$RßdF~ õÕy«K»T~…+Æb°]¦ëÐMP )3 Ú +@ÞK/Ø~–€}ã,„È2A”üy¡UŽ™h~/Ÿ€Bû1°?¾‚œÀy!à°Ó¼V$/9¼8¶ +>’ß&„C¾‹rö—Ú /œ%(M¼Y(2ZÖƒõ4wýÏAi¶ÝƵlœsÀ÷)pYýsw¯‡Q>¤êXÙ§ÇApø3ð=o—ÁŠ8ˆd&>~(ç#`ƒÜ>ç„=E>vÆ7ݹËÁ²º‚Äa‡Â$V–…¨îDiŠÒÉX:Ͳ\†\‰â¨ïÔouï}°ÿùŸïyá(†÷"ãœ;ï w¬¿F6=ð픕çP0 Ýà aE+¶^ˆx|ŽÝîºyýÜ¿õïøö‚í7’PéÏwCHñXŽ‹Ág9‹Éõ¥ +UÎýí üv IXë+ÈoëëÁ¶œ~Æ‹`ÿõò‚uƒlzµl1X–¿uéM„ÇТý} 7B«l@«þ./¯ƒÏó·± ‡tÞx~*S—nUØv +!‰gXI{¿ýð ¸jHåä=áQÄ2°q¯¿Åñ¤ûý-”ð åXv8Áƶl}8ÖßV¸Ö5p} ó½áY•[`]›†dæöwý—A¨ìòùï]ÞVƒíâ(0]¬óþë¼n.!ÙÖ¹ÎÎ~–Ó.ý +ám·Àí±*)4ø_B²”z­mî¡Ôÿ^q± +C Àó0âe’&=«þ |ßK3ù(ÃM„ÃIµ‘¯ÝqW3× šE«X±ÕD§>Æý`|ñðÉeîÉöÉ~wü®‚s>«à^Ã+þ;’ºôS{Åü tÖƒme²–ÿ} =¿ì~«ÂÝ NRºî¼ +@‹ ÎÝ ®ÒÜ®–lpÿ§•ŽpúœäåXBØ—ÇHöý;À•ÅS`µ#vᘠ×|+õ9$™ÎF9-êN°CØùý)÷·êÀø}cÚÛ«Uœé(·|ð=-;çCà ä—¥ýÀ½‰Ç8+_l÷!h® ÿAw¯ªì+ìB÷¹l|íhÏûõhv¯ü;—¿§WNÌÒ鮵̓ó?ƒep ñçÿ|ïsA¡á`CnGx› ι¼É>áXÖ]à,ÈsⳎõk#ªÅ‚Hóï À·á¸ðß½îoÞ;;‹¤\³ÌE¼Ýwÿ à +Dv–ïWNO¡ÚlúX_7ÛUe¹ÎVC{Ùeð‚òjPø ãωÈïeü$Z¬ËXè "<;l/yÖ Àúþø¼§À~l=(œ”a/˜ÿâõ2°,ŸBx5íØ^v‚B‚eµ¤Ëç#$³„ˆMá¶Œ]¢Žé6:Þh”°u|È;؆»Þñ”}bèú±ô´…Ã÷v:ÛÇa£}tUûÍÛ‘ž´jQŸÍ”Ñ‹©Ï¹tÁŠÃe¦C)ÇœrÌvÇì³|;ä>£“ ³°Ý/Œ6ÅŸZybã©ÿOZbO½Ê7FGfåê[—±~äóŽÑæºÈYF‡+÷˜n§{yŽ<²iÈÊ… .“ª:pe“~WϺü¶fG:‡-ìܥ˚£ú°ÈUÎdß}úúëÙh‰kŒF®ãËÚ¬=?>=kžw÷Ù`‰Ó¢.W~ã9åÒmIÈÞwRÏÛiìËÞq÷Ï K—ÿw¬8Úi6muçµS»Œ~^«x^,ÿËŒõ È3ß +c¾ìò>æÒã˜Ñˆœ÷œ±ýú°ÚþûAc»ÿƒ»ÿKn VÎÃbQÚ`l?Ry·$äöD¯L±Ƭٙe~ï1vÔe¼+u»ñ§á®·Õ’²yaW³i%^ºÆŒ•íköfV%ÖöíL/Yµ¾=îY–;ÜF$•étg¸÷•7àõ+à+–ßÙõY±˜-Æ÷z‰¼§þvï´Û•W#õ½Y±àÿ˜pâ“(òÜ[ûÁÿÅ‚g½ß]«¬#Ÿ…Æ:›(úO€í:zÅ(Å<‹uºßcx—QàyÈØ1åŽoÇÍxäûc=-qÑœë ¹2jóË\>B^Ó©Ç•ëukæV¾Íoµ¤³_åî]ä°ßX?/¸{¶¤Íí±ÄÑÒ+V>„s¿œÆTHÏ[¹vŸÍ¿øFuoÜ80ï(QJm¤Ð—Þ¯rz °ÔÿKÜ‹);ÈŽX³DvÒ]o8uÌé <ĸU‹%ÿ]¦Ó–ïÍéNH^Ÿ„¼>ddÌòWeÆSÿw¥øk^-Yã®ÕȹNŸ±®=Z"oÆÎy$ò{Q(ZIç¹lG?ÃZ +sßm.y ÿ¼Þ}×¼Æþ¸±£µæŽ÷¤{–¼k®q÷½`íÕ“A£€wÝ88…ï)1¯®Æ?¸sßqeû޵ºÎ^#6m³‰y;TRº#Sö‹NcCI7ÆFŒ ö²•÷«<ÃØ€ÒÒ[Ã]o8õ]•àÙ4n·GÈ›aͰâ¢ÃØÉt;îevçnUx!à£I¸Öfã u½à¦?ïsç¤gçÃF‘k,4$ rî“MK,¼z²ÀâK~yךŒ¥@%%%¥Û’Ò +'HšÒö¯^±å]PQ%˾ˆ ‚K‘)WH;쎟 ¿ÉćJÞ *~eYæ{*¨ìãݳf•†¼É—g*¨¬‘ÕFß–s‘ÙÑPiÈ;ºèþNÔ¼ñCP!©¬ w¿•Š–~•gf^ öïÏ Ù+×$&6Ýõþ!s­wüyżÅì{ß½yMƵ„âŽäGfÐà~ppÊÚlwƒñ3 FsYzÜy‹Ðl>Ò5+ïC«¦ð8¨ñ˜uœ² ÔH±Ö]/m"âÄsà@–ç¡}-×][+ÌãÉð-Ð jþNoŠ•ux”e»W!„¨;ýàÄm’þôZǹ­à$n>ÊÅ 1 +öÁ3ݵ&â9w²®ÕNâßGÀŒÓ ]ààUÖl¡ˆç@‡BSAÓŸºï·3¹Eàl8;C^ šÜdØØ€xùvÊ…w +ÞhˆsÈwƒÞ®4.vŸŸBxÕ)v]{\~µq&8Ü„°Ýÿfдì8Ñš ®Ü=9~»þ,Ðly:81Ü8~6¸R¸Ø¥2ެրfÂE&’£îš±2Ëh1Ê­@o'‘ûÁUáà;ùkp¼zÀß”¸@säàêæ?U¼VX¾;Áñ»ðïri©ûü€¿Ëžì·&Ó[ øYþ­î5Ëð5ª¶âNcì,Böà½àÆ¿•ÁÄè;ß‹L±´Ã¿ ‰;à3H¼ÌÑnÓA±+Z Ù]r78HÄ|‚,·¾~ N\¢~ÎS ‚ƒ§÷˜v,ÃЀµ \¼éÒtp€ XþÚ{ÁðXÖ/ u‹ +à;^ø~ò €~TžßAÞ 8|¶™ïÏEŽßú0ðžûÁw}­1üÀô÷Ï›Áê ÂŽŸ´÷U?ÛÝï,ZëðrðÝzUEž»Üõ«Êá}ª”ñÓÒË`½»¿/¯Yà€íÛMºÝµvõÈ{ ,{­[îþWÀúzÆó®ËÛ.÷La/Žßµ‚’RMÒC¶ý_e¤(nû¨ÅMÝòR‡%¦TeÏÉÆv÷×-yþ£F%Α’ǧËe[Bl3šQzò?\^5*|.q焬˜ïbÀ}‹ñþv¦¬úÝñUBóN½mYåÖa+ÿ®;ÖY“½ ‘k,sÏ–6wm¸ï†Ç÷¹ß–d¾?i´¼ˆåkÈ×(È¿—ežuÔòÛ·2*cMsسÐÇŠñ³Ý5FJÌEy÷iŸ%~9ö-“m\+m>ü¼•Tà.’°„8£[ +ÎpBnjCt‚úçQ]©³ÜB:ƒbw½éòP‚’Õ!„gc¡ó¦ âñ:8ëÊ*°¶;#ŸŽVÿÝàŒêÊE ˼¹áî0Ïìyeg$=h ’t ,2ž'Ág-ëñ²3“·ù(Ðt|îÇÀÙ|Þ½–‚ïõ1°Œ>gŸËÑ1tøŒéwñøÞƒ~ó³Ü…Ä“)À•–‹(¿êÒ—hcn“Wʶ; |ÙpÌ…˜ èWѺE›§“óaŸç5±,/! Ï<îþ>‚ö#I^gÐE+ ;Àwîc‚ìtùxŒZåþ@/‚ÞãåÃ`™ëb•k¥ûÉ3(å´¤”òCK~12kô9éì´%vóÞ+_;ž›†Ý5byê7š¹}eœŒgÒ7–ÂÛ=/:NJÌÊ;»é°Ä—PËÎbúŒ³Â*þ!F­UÂ_áò\ñyß1ÎdzË"Ÿé´ÀØ'”5Íö+$Cß6¸ß™ïG#åìÓPä¼lvÇ•ÉgÑ=9¿/4¾Oÿ<Ùga¬yNÅÒït…;ök]Yê²d…¤]ßO[±ã*˜%~µdIí‚q‰c†{è1—Ñw,Ü µÄÛÔG–¸L<YØ9Kú˜ë–8 òžþž·¸ ÌQwÞ¸KÞ=­ÿì]߯þqãKk§€½³¤ÃÖjËï—tÛ¹îóîÜ<×®£®¨¯X{VÑyÙg.ª”ó,é\Wßç“ÆçdÎyýÖ, ŒXÜýnÙçëqå9ÜF¹\°ü5v^Ùä—›cKËeï÷¬+ÛÐ93ŒméWöŒ‹÷*k[_¹s†*>Ó¨%߸å Ëg4pÎf÷LÃÆzõ¢%®rc÷Ùá®W&ÿ#îÆ,îºyÌØ¿ùº»ÅXæe<×uºûÅÞƒ_âÞaI{Ý8¨Ç¶Œï­al‹YñvÌ€{Ž·­º³²çܹ¡~aØå¹‘ù~ÔîL Ö?¥ÝŸ‡œIÁØç]¶bÁ¯Œ[öc”k™g)s¬ôOnâ ¨,ònIÁN9 +*(…zþ 4µ»*BxûéA“¾³îÚÿ8÷CÐvû¸lög.ý)¸ä¶qs½éಞVu\úòŸ½ {68„çÂÚ²KÀ奨yp÷½áò—µ2ðvþ=9ç‡è—%÷¢z,t€KØeÂ)—=o¨QÚ šMúaOx \v›8ï ¸”5.mOui#€Ÿääã<øO5}dÁWü\~¯ÂD¶¸&ý2NPùêÂËÊU8$Z\šp)ý1°íþlÇÓÀåäXÄ;€m¾loƒ&RÝùX.£–‰èóÝ Ö‘åîÿù.½·û©î>¤ø_}Ì&PA-„ßN(‘§÷Á¶°,õÝlä‡ñ^ö™§·îA±ï€ù~ñ÷àï; ,›¹kÏÛaˆ÷À-·OÀ¾é_Á>)/Úܰ<7‚ýÏËV”Èÿ°ËÏjG +¼Óùñh‹ƒå¿ÍÁ²Ò¼ê~{ùAƾÇÃõh|êù´–[ö±ºèè*¸½4Z†¬sùj—Òä-°á¿îMøŽi7Ø¡çñ9¸² Ô:ôæ„Áý«2!Ë'`ÅŒE›Žd¿×“vœó9Ø0g"¾¯Ú¿šƒ$¢]Èb¡lä/#ü\×ÀΫêrŸû»«ây]`å|Õ¼p.vÞE°üo€å|7X7^;¤—vTt ‰Cž§ÁŽq&X?îs× +½kîšSÀŽø"(pœߣ7g©¢Íî)ªpާÜZ{ìëY^œú²dc{€ïö×©ïæº{ñ+$Qýp×Ù ÖÍì¾9D^¬ò<·À6îÛñ—îÿ3ˆ[<¾Ë7‘ 8þØihÕYvÊ7Àòð: »Ö¹x¬ßG„@¿ÖßXºÖWo°î ä'˃(÷>þ1õÿï]þV—8ÏsaG\`ûZéò–g{>Ö‡{1yæãß5»s~ûØ¥<~öûÁ¶ó Âfè_ Ø§Î‡à$øX÷Ö#‰ÎëyI½ž +ÎsÀ‰Ó"$ÎÓæ ‹þ>€ÿß_ ø·`#x”ø×­èÁÞ4K5 ½Xîž+ˆjëé¹ù +1i?= ÿ‚g@)ø@äœ^$ƒTŒŸ¡Z£è;ª½Ï8øoÐ*ç.-8ï=p * +M;à·˜›ä™_ ”·ÿ=á®u ñÙÅY°¢þ¸ÞëÞ\pfXä Ã+É‚«ƒ ¡ª/ˆ—ïv‡"æïz'&þÚ+g†êâ&4þ}à[V!óø~ vDgÁúZ Ø ÖÃ3àÊÏ8Øéø• PÈðp†2Ëå«Î&ýÌ¥#pÎ-p…!=Û ç9 +ÞÉÙ}.Åú[ íõ4°ïX +5Ó‹Ü–ýûî¼?ßÇRÄCŸ{–õ5OáÑ ØÙ•¶²aÀ=WQmrpqÇkëÒ°lòú€s9¿ÅfÛß%eW¯òøWpÜ[„‰÷^˜ +*úfÙ +êGÀ:÷.Ø·üÀŸ YQÿÿl“›ÒUŠGÀ +½ VŽ ñ9(‘< Vþå`C›ˆtxâq{yÇx»Ýà [ æ¿·à¼Y%î[¿Ü™'¦IkƒÏEù˜íéóæ#fšàgÛƒ`]ñzâ»n‚Â×ð®F2à=Œð`>áíˆõ 4]Ä$+(ÓÁNüØ(~™s^º\zÁzï¥ëɤl´§Ð¬9p@¼‚bm~ŸÏ9`>¯ ¼\ž½ÎS(7Û ù x|g'ÀrͶéh­»'ÀÎi/Âý HlâϮ׋r’¨B«y×\ºü•…,éñf÷÷Xà¸{Á÷p õÝoÁÎzqÁ=DÜçœû;ÍÛ‚±Õ©uîš½hîÃæ ÜG,ëãj4Oò¦ .dtƒïn#ŠWãü«Íe?ùÂÁwÁØŽVcân½óÜŸW%Ï-ûoÀ>¡ŒõÀ:Ô´½>F²ä÷ª-ß?V ŸÖW87Í wþQ”«2ÍÝc>ØQ=ŒÉwˆT†p€Úˆòeè–ƒ¤êykß^ɲœAùÎj>â+ ‚òïø÷Ipq h°V¸ë-‘Ï›©û|®b,Ÿ9OH—ËU/ݶËà,÷´vü'Àö’gî•Î'Pn@ëÛÐ4¯ĘïŽÏêkä™{}Ö2» æ7–ÇõàÀ´ ‰p÷8€EyS¶õ(6½¬‡UéÛæ)„…ØöKÞÊ%ÀôJÄ÷“=ï‚ÂËJ4¯bÝ‹ðìò"(,E²…Û +#ûÇ_û€µH¶;»ÀÙëëã;Aúø|C©ßn u‰úCwÅHVžü–ea´,~hZ…Ó~°^-©ÃàªK¶?˜éÎéÓ´Ã{hߥp–OoGÚ~‰UÒ÷Á|Ê{(<;#¨æ¸l Pª?JcßVg 0ŸU=V]~ˣ옡Zœ…ô@w +å€ôy¡Á6„ÆÒ3ð•È,%¥X + +ýH$ýì>t¬ ßBs'Ò…ÄKV»JFgØìÆH—ËDñKäÙ†ÙëÛn´v 3Àr)Z­šOï±ì)”_úïÌhn{Ë]þÊÌE|¶óSHži8Ó.ó®—€B{/òßï$nÇ™ßbeÙ Öù]àL.¶úäËbšË×»%Xzõ IDAT:ñ øÜE[S×ܱ»Áò?ØÙ­VÏ`¿û„;~*ø.O <‘ú ¶»ëNû’3Ð÷‚϶­zaçv³{¸­º|‹Aa>$lû?Û=ŽE‡¶‰‰ŽÏT°L²õüCPY´ˆ¿CÀUîо\ïzrª NÁ—Ú³ÈÃ[σ•?d=0Ydc”áœûÛ›sÌ2°ræ @}`?‹ø`Z†wÑ^`£ì`‚ò³§}à 0ùûe/€ s;š%ê>—×2³y/ÅÄ4å§ãÛÕèÏòXw³33Œ¥hÕÈöe\ËÎ`Bxë‹*«x¯»ëŸA²ÊãµÑ7arµ½ïFóJÒ”×Bl'ògYÛÀ²Âæßm''ÀA4oþpÅâ(¸\E²ª–·eõ÷9¿eù%ʽkÏ_T8þÖ¥2¼p™åñÿ­ä±¿@µ ç{þ¨b~Dš€màã–¸†<îl'ËØ´fm8‡*Ú-fm4_3ÚÓNäEÇ·ac £íqÞ½.<ÿ +wÌ6«nçYõ9‹Î[ùÞÛ¯J}çû¹­Í>룮Ì.}9%Ù`|ÿUì‘CÏ×i¬CÇ+ž7‘ò/¡=+‡Ðlîéu…#1Y]ˆ|ï°_#ñL +P ð>I²~M¦ ßÒ+­ç3ˆf«¨ý(i}GU¢]ò\²æ‘ÒÒ:za÷±iv ?`S€‡r~ïM¾òj¤™* +8yÒ}?€Ó.?¡àHyt•¸ÿ °3~|€¬%çA$³ò• Rj™à/Ëí~0ß"é8çƒ]V©õçàòŠö(ˆì¤+îóZÐñŸƒƒò9÷ûAÄ;øåî¼i ¯ó¿tçþœÍßg!³>ï oœ­¾žÊï½àriþà€Ò ®d¾ –Ç|°|—¢œmùz$þÞc +¤}`ÛðïéWHâ=üòHyÁ2_ŒbÙ™æÕÀwU|¢øØí:[; +ƒîóZ°ÞÞ@ÁÇhÉãsðùŸSo¶yÍʼ÷ n®|‰¢÷*´ + +çð}™\ì9(å§>ËW|Ö¸ŸäcŸ/0îm1šÃ]0î[…öðºóÓ×ï2î}]·æÐ¹eR‡Qi$o¯Í§N£nF“¿ã¾X¿ËgÃåš1ã~]ȬïiKô>Ö÷4‡¬x_t%±ç³¿õ¸¼…æ\eTªùƒÅCêfÓKÆ}Ëô{yÚòëAŸ+ÏÓ.ϧ-‰Ùú¹Ãø¾³±è7÷ŽË¼ËPü “_Ê4Ú:–§q#_ÃÍ3fñð¤3,»Ç=ë“m[Ù€”oÛ‰xøÂ.0„äPšÍ~¼¹ÜÓ ä;ºÀ ?±”e8ãëw×h€KL«@#cà²Ø1ÄŸã&(¡Þ¥É] ”zœÉ—6{ç¾.#¦Š\÷¾¦¢º©Y/(ýç1ò| ÎFn |ìƒ÷,מg@w³©gÀ™YȇùpÉ $¿‰Oî“ ÉÍÂÀyÿ>Ï4¯ô¸ïF¹à¯»û—y± \6ôn®ÀAž9çðÏ]Íg‹öþ· œîg+YGQ¿—Ÿ‹ÎxúÀö´Ã]+ëÐçUp&ù:ŠÛù-—§íî9BÑ«ðXß:ìAs{ïÛ×ATsž¢ù±/žB²Äü%ØÖæï¨l@3ïº÷´µˆÏÁ•Ž¥`ûº…âeÿ.Ï‚ÎÙƒ³öv Ý ÛÝ’H°‡Àçj€}b^¹Ïû¤íHtO¼ÇÆPð£X¿þ1ØwŸëUÖëç-Äõ"|{÷}Úë0ÎBc¿?kù3Ý·³½k67J߯ä?$}ƤÅPzÎXüs<êž7f ²%ò<[,îŒg‡K}FéÜÏNÌ•[žÆ-¬y% ìÌ?›6»óÊ®ª¼dÔ†±^罃>÷,i‡JKÜ5̳ËNK4Ÿ7G®;ø1R"¿ÆYYþ,ø9÷òV%ÚI"Ï™MóÜý·ëû¸µï¬+›¾²j«f]Æw¼¦Â9OZ¹>2†,®mK;Ü»,šÉ¯1¾÷tÝ·|35¸kgË}Ìš5ùaÅ+Û,™6ܳ»óž5¶1c?zÙØßç™}¸¼=oIØi|·‡y•µ¥Ê£áîÿŽq&î§—ž7T_«ZœÍ¶ÄŠÂŒ«ƒî︅ëÛ€{f3öS~ÜÜç®uÙÂuÈדhýÊ~Ñí2bÆF;ê +užq Ì3L'ß¹½flÌé¥Å÷ Ç­Ø&þ¸Å;À2)}ý Æú±Ò4ܵ¿²d9(›öX~?é +¹Ýü½hñJæ—>ýRߘqéØ¿Ÿ“ÆN5¶¼3äÊÝ7¾†±q}d¼ÿ‚ìy Œõ`™{p÷~ÜXñ.[¼ GÊë%‹']ùY2¨Â=gÃý²¹M'/”ü·Ð%ÆŽÃ ¤#%ßÛ@êø¢Èëó5ÛØ.ºÜ»Í9·Qpí~c½~­Ä±þÞy¿wëF‘'Ë*iØ=ÙÁw¶%fÁeÏé¶ü%Ü.E(}ê1ö=eû;ÿ®¾2 +|eêŸ÷ò‘%mª¬çK/TŽL¯[û@ö~ÞÃgì:k,á+K„ˆ-Æ%ò¡TvePôL¹”þnÔØGM†|›ó|jlË=–˜¯jìóŠL)ôeQBJ7¨nW8UœØøÎ¦Ë×aÉ,o•Ûs³b;Ón‹ï]z¿ÜK}Ô’Êßáò1žsû-öyÁš¥ëlÚflÔY x›%³é˜€³Î“î´.}`ÅtŸ±Ñy§FϺwøŠû­ÏÂìicczÑ=ÿW©wõ´åïÅ[«Ï†nw˜S1ã@ºÄš…KcÏÚãò}ÒÊuò[Ý5ëæ>wnQçíÝ#¹r5Köõcå2äŽkX"Èùú:fÅ^QòBÀuKöG'’ºŒõå+/ÅÊêE—¯ªBü€±Î”ovå?d\ïwy5 +G§Ý;(³úµÂØ'Tìgû‰m}(¥W5×ëÞýÆÁ礕Óx§äó¤“ïÇ9åživÛýe—¿wìˆû|ÝØ·ÄË%îTñU—µÖz¾ÌòÝ}+ERÙ¸]Õo=Œò¤±Q¶jKjc–?ÐuY2 …~÷o·…g¦EϳÌâ~â½÷¦<Å©AcGjÆôŽq6ü´±}el ¡sGŒÂÅVkÔŠÊŧ´2ÓˆËËhÁ9]Ö¼"â—å×Xñ€0ÃZ…©=÷LûêÛ½“.KfýÝ–¿^öÏS Ì&/ >iÅJ|éwÞpi«%« ‹ 8CF¼RgzÛË/=ViO¡Ô°d›®¬Ç΢:à•MËž3Û8€lpçúºÖh3ÃîyÊ(&zå®o,Y•[bìüûYhù3ì~—ß«6óó«HUâVì³D€¼lÉl»ËXËÜ?ݶ˦½Å£ô=MeM|Ô®vüÖ¿Úú>*kLVx_¯ìµTÊáMO*JŒ€Ê7ÜçY XÌ$&Ï9Å\$6Ç1~‡ÄÎ4t] ­rŒ«`~³¦3SQ.nµWN“|ØÏ<®¡Ù9Ë ð½íE¾=3Àw›V~Y–ož­ðYб@¥šýH gƒeSÞŠ)ü•úòLŽ.‚J¦«Á²)S·ïB¢P3Ëåû€ûü.Šj>Âßn°®¤#k¦m’'Â' ó“ª…àŽá•McʼYEWã +¨˜u&ÖÖ–YHq4Ë—`›–sÏ"³·«`UUyo&ªGà‹…ž½†òÊŽíÄÿÀnã<ñ¥¬0‰Öe;Ü;ÈÉü€Ìn¦é@Ôèšlì¨<'(1 ˹`‡^4pÄ:žòã»ßDâ(%M'ø>ò‡4} ÆêƒHâ‰WáMPó¶¬GH€y|Ä·ùƒ’Lüÿ»‘h]Ÿ…‚lìq >ø{!%OèËõ*¨å}Ô¥¢úyØjŒïJ}Ž ‹ƒZìë‘X;Êfš÷“EÑ W•²íõÛ +Ùý_+û5&¦yÿY›çU •.~øôƒ“åå~9Æ÷?7Á1ø]„Û‰~¿^@ÜêæqÐb&6zK©¦þÐ ÈÈîv7ŸvZS]¦Ë®ÌÄäÄdï‹AS¦¼©wû¸ì¸/¡õ…\A¾·' ‰07æ qý94± ÅÓž@ÿâòâ]…Îq×¹€Ži~ +4õÙ™ù~-8øçÅ)÷,ßÛNpF5„d¶]–wA©N”ë`ÜýŽ€YŠøÀ߸ÿ§€åó0ŠÍËö#nêçëÅ^´¾›>—·×‘ÌÂŽù¡Ôq¡ÁôëÔ÷—À÷X4èv€õl/(€Woîˆßœ/„¸ý #î³äM<÷ƒ™½`õ™+AÓ?ïÑòy$Þ Ó¬'¿û‘÷ÑÚ/€ýÉ^°o9„°0q8n4åÛ ‡À¥L? ú4¸îmO÷§Î=úhNó8X8Þ~¼×ýõ3ÖÙ.³ÞW÷4° b3DŸ¿Ùà€ÿ80ÎGqÇëW-Þg”ËÁ•ƒ9HüwyŽòBËQP +»‰dIîYböøgÁBßú|Ö]ç’;ïø’CÀ«`ÏG2H ¸ë­ ŸÆ¯zÜ >÷yÐÆz:â+1Þ¾•(Þø\ëQ}»¨\Žß‰rÂÍê‚{ü;Âïv9X®é%Ø—]zÂ}> àO"×m€B¨÷÷"(Lü"rü-$v᱘BÜé¬ÛÈ=àªÞn°/ÍöÝÞsåU°¿œ +ºÙÉWúzY/†ƒHúæl߸ ù±Ž¢uµròûÌChm›¿r© +÷ƒ}í¿‚}ív„Ý:÷¢yEý ÂÛWÓ‘x¾¼–g–3`yßûèÇ"y;¾³ÕHÇþpÊ+Œ +4_µ@ï7*þ…ŠºŠM!e>¯]å‚%¦^!ÐGï;QPèrùñZé'­ºi’W”³ÄtdĨ|õŽQ)«H‘f" +3ÝFå´ÉЀ]èò^ÆÌ¨ÃÂÞ©^4*¼U½÷ª –ƒ’’Rqšaìãb +©=–øè0* † {ÍÛ6hX5wê?¨ôýY(~ ’vz׋DÑ44{Úβ.³Žóàl2æ÷Áã—Kσ˟×ÀÐÀÓÀYos± îžÙåµíK÷[À´Þbf.8;Ü>{HyqƒË›×ö}&•ïsÝ1Á™²·H8‡pP“Ýà,x¥ËÓA°\³3zÏ-мm8Ë\BáWðgêe¶þÊâWª’^ÍìËäXÁ9ÀYöN°¬¶ƒ«Ï ?ˆÀåÕóà{Œm|ZÓìgú!Åß.ÄSsçº{]Ax¥à +Ñnp5¡ \BÞŽð*ï=àvÉE°žN·lBÇú%è/(Ìfù?àŠÔn÷÷šÍ_C×˲Ñå=V?c|Œpß·mPo¾k ä{ž:ŒÊ‰E©ÏšÃÞ´æ Ùô¬qö`–HÓ[,ñ[§àóœQrÌý=nñ™_ŸQ!åwüÆXHBî1ÎfÆ-qûúËOh¦±Æšg ]–5 +åÅ{L+9½må=IÎvå•vºÕ=SžKëwïU–(‹fg">xPèü}Ög%Ϻ÷R:õ +š^kÐX'b^ýF-ñrék½ÂiÈ­wÁí]ëîpù+ò8Û=û¸åZ¶du!’ïΧ=61wÄpù¿`œ÷[±—½5î]Uñße¬÷E«Þ‡(~ıN幟mIýé¶øÌuÐ’wÛ°ü˜ +ËŒý÷ÒzxÊ\é{’ü?>òا–tÒZ¨"6À ;È“îi_ÑeÒDü7{ÿÏ¡Ng‹…—ÚzŒ¼ì’ˆ“×€¼ø“Ç¥ÓÆ6÷îÄ‚Ù,4ˆ+Üç÷üyVcî˜ÎÔ9¯X|¹ò´%ƒ‹//³°Ÿû!£pa–tO[è&T–iÍ×t`¦P^îÚé2Ý`qá%›†V$ÙÁþ!÷}Lr÷ýƸ|Ê_¿;&t¾y‘ýþyËä}ð¿èþ_cI°’ì±#ÆmÈø>7 +%k,.Dv»ë{aûzW=Ö,Ô¾dñv]ÆE´c9¿Ïs×jXâzú¸%ÂèGî½}já¥á~÷LþüuÆwý¤Q€ñô7ßÎXeIÜ +è&ÏJ¨Û¡Ò»)*‡,Üþ–Y ‚Ï(ÝY)ý!™l‡5wÚÙ”­Ì[ÒvÙ Œ·‘é>c§7fñ™Ü +£à²ÙØñ¾æžå9‹wzéÔáÊbиÿwÙŠÍïV¹òxÚò²Ÿ„$ýË–ÐåiWf]ÆN7ÖÙÃ’Á{8óýæH¹ÏsÇgËôã »YuAn¡åï+Ã=ãuc½ÜR⥓Û»=lù‘Û†,_˜óeúÍPéq×XcˆÆ­8thŸq€òÂ먵F>ƒ{G/¹|6, ›pçû²É +oî™c€­–H3ŒýFžÀéãøãËÄa˜s%¥ÛšÒ¶;Åt£³xÇÛiì†Sß )›ñ +ÇvÇÓ–¿LæÓ2ã¬|¡%¡pó"ûùÛî7Î6†Ýý%îÙáî3nhC«C®ŒB3}?]¿Û8“yÑŠ#¥ùûdô-‘w´Ì}_5˜ŒYµhoÆŽ:/ª`úüê”:V”??øçmËøp¾eòJë,^w—Å –„”Ýcîò¶/:Œ×q÷ŒƒÆw²ó†qÜêžaq€.ë«¡#ò:ÝïÊûYwíØÖE#“BÂïH&U‰*ª¤¤ô-¥ô‡ÙÆŽk]êsLÓ3”- %Yöœñ’ÇyÍÒ-V>"áÓÖ*(¼mñN²Û(`·Ä9ÅÇ{¥-g>äʨømÌŠYø¼¨õ÷9iI[ŸBKÃîøªÏj–¿?œM#–¬b”=§ß8Ð]·üÕˆ!£Ð–·2âÓk–/Æ’é›'ô„„”ë–ÿÎö¹gó{Õ§­º´’’’Ré”¶ø ÔÒ^jr®Eé,Fh‹ºÔ>Wp|Ö%ãã©Ï!—Œ=H´X^pý4SÑjzñH_‚QÀr¸´G9= +±´Í¾ +jOçi±ÎD«#"[åN°üŽ‚ÚÉ‹PìØd}à>!¼mël|{>|œ€¥H4Ü×€ìY·›ýƒå裤Å„luÇ/E9íá'Ö¶Nãc8L5®ïEâÚ4T/º@Mêß ±˜ j¡OEÜQǰÎü¨µþ˜{ŽÉˆì'„AþSæó°Sœv@GsΚL¢D~h\€ƒû§ÒùÌç¯ôÏÁô^ÇÁA¶ §Ðìü¡켋¼E½ +Q>jè Øyÿ9⃿((OQxØÝ 0´ ,“˜ ?!/\ï.º¿!Ó¢Ù9÷)‹7o;ˆæÁ3æ£{hZ–&{¡tV“WîY^E8$kö~‹AS©) ×O +¯ŽÎhžßÕ½H<…xl?ºõÐà/„ø–ÉΆ_ ÀÁ9Ï^Ú{×z¦à¸Éà3°ã]vÂïƒm¬“ìvù»ÀÛH¼S]B2CËã$6»yƒ„ºó ;þÏȽÍír4{M, +» `üLØGœ:‚ð ÿ}ð]>Ú1ûYý÷Ý_GŽß Ú^ûã—!@¢=î‹ SÏr„WšÎ¹üGâî.„mŠo¡¼›ä*|ŽêA~ÒÆ}²u¦j %!„¨LV¸vÆ;Q¼<ê™ @~`ñ” […·Àv‰î½hí0wƒƒÍÁYü4P Y˜½È__ –Mhöœæè¬ä”w4ágx{Aáä}‡‡}Ús +Àp@\>×ëà¬:ßàkpÐÝ >ûE÷L—D²+:~*!YÀ•€Ð´ú/OóK$á/ÓüMà;€ïçÇ9×B1~dfÙïæKÿÿ­àÜ.pfé—ŒÏ ñvö>(iŽ_§mIDATHÅt?ŽöýýwVH/  ìBÞ¬òö¸ý vœqžG²4+„Bü` B!„ø“UB!D ¾KÆAyŸÆ¾Ûì!D}ðÝÓŸóÛfp`|4ð[€†û›eÀ7`ŒoxÀu„Í×€±OÏ·yÌ0šól +œóÇ~”J8F!Ä·€V€³¯—ÀÁ"ÄB„íÇC4oCÿ¨»ß+áÌçÐyÏF®½ÀI0ÿ¡ÊÓ à4€ßÖ€åW‘|¼àpε«²T˜Üù½×ýøm;h*·7ðÛU÷›÷9pÞ}9¢9 +jùûôp›Çü +̓y6Uq¨$„â[Æ›nMß¾°aMù{@S´—Aó°Yîü9 S›9 —¶ÞÌ9ÙøàÝ ½üRwüQФí÷ S˜Ý|öƒ&†ƒÏ š9f-h…ðqÎ3À]c&èu0ËJ÷lM³¶åO¸ü#l¾4‰«ÂAо½­Nlv¹ûÅ#Ïò€?I}þ{$þ²\C<î|•c„B|˜’úë=¬ÅÜåMüMþN€Ó)wÎ%´zi;¸Îtwî{.MsŸÏ‚BDh°ûßg ¡ë^Òó ibÈcÜBp`¿aáàhZxÓÝ+ËïÜùûAYÛÿÿ@Ü®½¾F|æüÏÈ·»B!¢x3Àap}t ³Íïì²NoÊÒ +ç‘ïm( ¼ø­t`äãü[à˜APÐÈs³Ú +y3Þ~ÐPûB!ÄGÚ€„5¨ !„?päH!„¨!2B!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†HB!jˆ!„¢†ü_ÏÒBì0 8IEND®B`‚info face="Symbola" size=-64 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=2,2 outline=2 +common lineHeight=81 base=59 scaleW=1024 scaleH=1024 pages=1 packed=0 alphaChnl=0 redChnl=4 greenChnl=4 blueChnl=4 +page id=0 file="emoji.png" +chars count=187 +char id=9749 x=135 y=333 width=63 height=61 xoffset=1 yoffset=9 xadvance=65 page=0 chnl=15 +char id=9752 x=366 y=396 width=57 height=59 xoffset=0 yoffset=10 xadvance=58 page=0 chnl=15 +char id=9760 x=257 y=0 width=46 height=68 xoffset=0 yoffset=7 xadvance=47 page=0 chnl=15 +char id=9785 x=61 y=579 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=9786 x=183 y=578 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=10083 x=984 y=200 width=35 height=50 xoffset=1 yoffset=12 xadvance=37 page=0 chnl=15 +char id=10084 x=266 y=697 width=58 height=44 xoffset=1 yoffset=15 xadvance=60 page=0 chnl=15 +char id=127744 x=736 y=266 width=40 height=63 xoffset=4 yoffset=10 xadvance=48 page=0 chnl=15 +char id=127789 x=401 y=637 width=64 height=56 xoffset=0 yoffset=14 xadvance=64 page=0 chnl=15 +char id=127790 x=697 y=331 width=62 height=60 xoffset=1 yoffset=10 xadvance=64 page=0 chnl=15 +char id=127791 x=0 y=699 width=64 height=51 xoffset=0 yoffset=17 xadvance=64 page=0 chnl=15 +char id=127792 x=456 y=202 width=64 height=63 xoffset=0 yoffset=9 xadvance=64 page=0 chnl=15 +char id=127798 x=523 y=695 width=58 height=35 xoffset=3 yoffset=27 xadvance=64 page=0 chnl=15 +char id=127805 x=825 y=330 width=60 height=60 xoffset=0 yoffset=11 xadvance=60 page=0 chnl=15 +char id=127806 x=259 y=268 width=60 height=63 xoffset=0 yoffset=10 xadvance=60 page=0 chnl=15 +char id=127807 x=322 y=333 width=59 height=61 xoffset=0 yoffset=10 xadvance=60 page=0 chnl=15 +char id=127808 x=0 y=269 width=63 height=63 xoffset=0 yoffset=9 xadvance=63 page=0 chnl=15 +char id=127811 x=305 y=396 width=59 height=59 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=127812 x=696 y=0 width=64 height=66 xoffset=2 yoffset=8 xadvance=68 page=0 chnl=15 +char id=127813 x=61 y=397 width=58 height=60 xoffset=0 yoffset=11 xadvance=58 page=0 chnl=15 +char id=127814 x=946 y=265 width=61 height=62 xoffset=0 yoffset=9 xadvance=61 page=0 chnl=15 +char id=127815 x=584 y=635 width=56 height=56 xoffset=0 yoffset=12 xadvance=56 page=0 chnl=15 +char id=127827 x=121 y=397 width=58 height=60 xoffset=0 yoffset=10 xadvance=58 page=0 chnl=15 +char id=127828 x=0 y=334 width=68 height=61 xoffset=0 yoffset=10 xadvance=68 page=0 chnl=15 +char id=127829 x=68 y=70 width=65 height=65 xoffset=0 yoffset=8 xadvance=65 page=0 chnl=15 +char id=127830 x=737 y=135 width=59 height=64 xoffset=0 yoffset=8 xadvance=59 page=0 chnl=15 +char id=127831 x=560 y=0 width=66 height=66 xoffset=0 yoffset=8 xadvance=66 page=0 chnl=15 +char id=127832 x=135 y=70 width=65 height=65 xoffset=0 yoffset=8 xadvance=65 page=0 chnl=15 +char id=127837 x=630 y=331 width=65 height=60 xoffset=0 yoffset=13 xadvance=65 page=0 chnl=15 +char id=127838 x=628 y=0 width=66 height=66 xoffset=0 yoffset=8 xadvance=66 page=0 chnl=15 +char id=127839 x=566 y=267 width=59 height=63 xoffset=0 yoffset=9 xadvance=59 page=0 chnl=15 +char id=127840 x=562 y=332 width=66 height=60 xoffset=0 yoffset=12 xadvance=66 page=0 chnl=15 +char id=127841 x=798 y=135 width=57 height=64 xoffset=0 yoffset=9 xadvance=57 page=0 chnl=15 +char id=127842 x=467 y=637 width=57 height=56 xoffset=0 yoffset=13 xadvance=57 page=0 chnl=15 +char id=127845 x=213 y=137 width=65 height=64 xoffset=0 yoffset=9 xadvance=65 page=0 chnl=15 +char id=127846 x=950 y=67 width=34 height=65 xoffset=0 yoffset=8 xadvance=34 page=0 chnl=15 +char id=127850 x=522 y=202 width=64 height=63 xoffset=0 yoffset=9 xadvance=64 page=0 chnl=15 +char id=127851 x=544 y=135 width=64 height=64 xoffset=0 yoffset=9 xadvance=65 page=0 chnl=15 +char id=127855 x=440 y=333 width=49 height=61 xoffset=0 yoffset=10 xadvance=49 page=0 chnl=15 +char id=127856 x=207 y=638 width=64 height=57 xoffset=0 yoffset=11 xadvance=64 page=0 chnl=15 +char id=127857 x=710 y=633 width=65 height=55 xoffset=0 yoffset=13 xadvance=66 page=0 chnl=15 +char id=127858 x=237 y=396 width=66 height=59 xoffset=0 yoffset=12 xadvance=66 page=0 chnl=15 +char id=127859 x=195 y=268 width=62 height=63 xoffset=1 yoffset=9 xadvance=64 page=0 chnl=15 +char id=127861 x=77 y=0 width=65 height=68 xoffset=0 yoffset=6 xadvance=65 page=0 chnl=15 +char id=127862 x=857 y=135 width=57 height=64 xoffset=0 yoffset=9 xadvance=58 page=0 chnl=15 +char id=127863 x=47 y=203 width=41 height=64 xoffset=0 yoffset=9 xadvance=41 page=0 chnl=15 +char id=127867 x=833 y=633 width=66 height=54 xoffset=0 yoffset=12 xadvance=66 page=0 chnl=15 +char id=127868 x=986 y=67 width=25 height=53 xoffset=0 yoffset=12 xadvance=25 page=0 chnl=15 +char id=127870 x=383 y=333 width=55 height=61 xoffset=1 yoffset=10 xadvance=57 page=0 chnl=15 +char id=127871 x=530 y=394 width=42 height=59 xoffset=0 yoffset=12 xadvance=42 page=0 chnl=15 +char id=127874 x=0 y=70 width=66 height=65 xoffset=0 yoffset=8 xadvance=66 page=0 chnl=15 +char id=128065 x=384 y=696 width=68 height=39 xoffset=-2 yoffset=19 xadvance=64 page=0 chnl=15 +char id=128068 x=132 y=698 width=57 height=47 xoffset=0 yoffset=15 xadvance=57 page=0 chnl=15 +char id=128069 x=777 y=633 width=54 height=55 xoffset=0 yoffset=14 xadvance=54 page=0 chnl=15 +char id=128121 x=478 y=136 width=64 height=64 xoffset=0 yoffset=8 xadvance=64 page=0 chnl=15 +char id=128122 x=65 y=269 width=63 height=63 xoffset=0 yoffset=9 xadvance=63 page=0 chnl=15 +char id=128123 x=339 y=637 width=60 height=57 xoffset=2 yoffset=14 xadvance=64 page=0 chnl=15 +char id=128125 x=505 y=267 width=59 height=63 xoffset=0 yoffset=9 xadvance=60 page=0 chnl=15 +char id=128126 x=321 y=268 width=60 height=63 xoffset=2 yoffset=7 xadvance=64 page=0 chnl=15 +char id=128127 x=889 y=67 width=59 height=65 xoffset=0 yoffset=8 xadvance=59 page=0 chnl=15 +char id=128128 x=627 y=266 width=55 height=63 xoffset=0 yoffset=9 xadvance=55 page=0 chnl=15 +char id=128139 x=574 y=394 width=68 height=58 xoffset=0 yoffset=12 xadvance=68 page=0 chnl=15 +char id=128140 x=202 y=70 width=65 height=65 xoffset=0 yoffset=8 xadvance=65 page=0 chnl=15 +char id=128147 x=642 y=634 width=66 height=55 xoffset=0 yoffset=12 xadvance=66 page=0 chnl=15 +char id=128151 x=588 y=201 width=64 height=63 xoffset=0 yoffset=10 xadvance=64 page=0 chnl=15 +char id=128152 x=280 y=137 width=64 height=64 xoffset=0 yoffset=9 xadvance=64 page=0 chnl=15 +char id=128153 x=654 y=201 width=64 height=63 xoffset=0 yoffset=10 xadvance=64 page=0 chnl=15 +char id=128155 x=720 y=201 width=64 height=63 xoffset=0 yoffset=10 xadvance=64 page=0 chnl=15 +char id=128156 x=786 y=201 width=64 height=63 xoffset=0 yoffset=10 xadvance=64 page=0 chnl=15 +char id=128157 x=77 y=137 width=67 height=64 xoffset=0 yoffset=9 xadvance=68 page=0 chnl=15 +char id=128159 x=335 y=69 width=64 height=65 xoffset=0 yoffset=8 xadvance=64 page=0 chnl=15 +char id=128162 x=130 y=268 width=63 height=63 xoffset=0 yoffset=9 xadvance=63 page=0 chnl=15 +char id=128163 x=146 y=137 width=65 height=64 xoffset=0 yoffset=9 xadvance=65 page=0 chnl=15 +char id=128164 x=454 y=695 width=67 height=38 xoffset=0 yoffset=23 xadvance=67 page=0 chnl=15 +char id=128169 x=916 y=134 width=57 height=64 xoffset=0 yoffset=9 xadvance=58 page=0 chnl=15 +char id=128420 x=852 y=201 width=64 height=63 xoffset=0 yoffset=10 xadvance=64 page=0 chnl=15 +char id=128512 x=732 y=513 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128514 x=644 y=393 width=63 height=58 xoffset=0 yoffset=12 xadvance=63 page=0 chnl=15 +char id=128515 x=610 y=514 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128518 x=488 y=517 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128519 x=144 y=0 width=59 height=68 xoffset=0 yoffset=7 xadvance=59 page=0 chnl=15 +char id=128520 x=584 y=68 width=59 height=65 xoffset=0 yoffset=8 xadvance=59 page=0 chnl=15 +char id=128521 x=427 y=517 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128523 x=61 y=519 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128524 x=0 y=519 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128525 x=915 y=452 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128526 x=854 y=452 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128527 x=793 y=453 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128528 x=732 y=453 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128529 x=671 y=453 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128530 x=488 y=457 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128533 x=122 y=459 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128534 x=854 y=572 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128535 x=305 y=457 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128536 x=122 y=579 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128537 x=366 y=517 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128538 x=244 y=577 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128539 x=305 y=577 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128541 x=366 y=577 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128542 x=427 y=577 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128543 x=488 y=577 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128544 x=549 y=575 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128545 x=671 y=573 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128546 x=732 y=573 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128547 x=793 y=573 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128548 x=427 y=0 width=59 height=67 xoffset=0 yoffset=8 xadvance=59 page=0 chnl=15 +char id=128549 x=915 y=572 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128550 x=0 y=639 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128553 x=898 y=392 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128554 x=959 y=391 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128555 x=0 y=459 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128556 x=61 y=459 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128557 x=305 y=0 width=59 height=67 xoffset=0 yoffset=8 xadvance=59 page=0 chnl=15 +char id=128558 x=183 y=458 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128559 x=244 y=457 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128560 x=709 y=393 width=61 height=58 xoffset=0 yoffset=12 xadvance=62 page=0 chnl=15 +char id=128561 x=835 y=392 width=61 height=58 xoffset=0 yoffset=12 xadvance=61 page=0 chnl=15 +char id=128562 x=366 y=457 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128563 x=427 y=457 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128564 x=90 y=203 width=88 height=63 xoffset=0 yoffset=7 xadvance=59 page=0 chnl=15 +char id=128565 x=549 y=455 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128566 x=610 y=574 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128567 x=610 y=454 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128568 x=401 y=69 width=59 height=65 xoffset=0 yoffset=8 xadvance=59 page=0 chnl=15 +char id=128569 x=878 y=0 width=67 height=65 xoffset=0 yoffset=8 xadvance=67 page=0 chnl=15 +char id=128570 x=523 y=68 width=59 height=65 xoffset=0 yoffset=8 xadvance=59 page=0 chnl=15 +char id=128571 x=828 y=68 width=59 height=65 xoffset=0 yoffset=8 xadvance=59 page=0 chnl=15 +char id=128573 x=767 y=68 width=59 height=65 xoffset=0 yoffset=8 xadvance=59 page=0 chnl=15 +char id=128575 x=706 y=68 width=59 height=65 xoffset=0 yoffset=8 xadvance=59 page=0 chnl=15 +char id=128576 x=645 y=68 width=59 height=65 xoffset=0 yoffset=8 xadvance=59 page=0 chnl=15 +char id=128577 x=122 y=519 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128578 x=183 y=518 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128579 x=244 y=517 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=128580 x=305 y=517 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=129296 x=200 y=333 width=59 height=61 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=129297 x=366 y=0 width=59 height=67 xoffset=0 yoffset=8 xadvance=59 page=0 chnl=15 +char id=129298 x=383 y=268 width=59 height=63 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=129299 x=549 y=515 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=129300 x=0 y=0 width=75 height=68 xoffset=0 yoffset=7 xadvance=72 page=0 chnl=15 +char id=129301 x=671 y=513 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=129302 x=181 y=396 width=54 height=60 xoffset=2 yoffset=7 xadvance=59 page=0 chnl=15 +char id=129303 x=778 y=266 width=98 height=62 xoffset=-1 yoffset=12 xadvance=96 page=0 chnl=15 +char id=129312 x=0 y=137 width=75 height=64 xoffset=-1 yoffset=9 xadvance=74 page=0 chnl=15 +char id=129314 x=793 y=513 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=129315 x=346 y=136 width=64 height=64 xoffset=-1 yoffset=9 xadvance=64 page=0 chnl=15 +char id=129316 x=444 y=267 width=59 height=63 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=129319 x=488 y=0 width=70 height=66 xoffset=0 yoffset=8 xadvance=70 page=0 chnl=15 +char id=129320 x=854 y=512 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=129321 x=915 y=512 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=129322 x=0 y=579 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=129323 x=762 y=0 width=59 height=66 xoffset=0 yoffset=8 xadvance=59 page=0 chnl=15 +char id=129324 x=772 y=393 width=61 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=129325 x=949 y=329 width=59 height=60 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=129326 x=261 y=333 width=59 height=61 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=129327 x=462 y=69 width=59 height=65 xoffset=0 yoffset=8 xadvance=59 page=0 chnl=15 +char id=129346 x=975 y=134 width=46 height=64 xoffset=-1 yoffset=8 xadvance=44 page=0 chnl=15 +char id=129347 x=675 y=135 width=60 height=64 xoffset=-1 yoffset=9 xadvance=58 page=0 chnl=15 +char id=129360 x=70 y=334 width=63 height=61 xoffset=-1 yoffset=10 xadvance=61 page=0 chnl=15 +char id=129361 x=191 y=698 width=73 height=45 xoffset=-1 yoffset=18 xadvance=72 page=0 chnl=15 +char id=129362 x=253 y=203 width=66 height=63 xoffset=-1 yoffset=9 xadvance=64 page=0 chnl=15 +char id=129363 x=122 y=639 width=83 height=57 xoffset=-1 yoffset=14 xadvance=82 page=0 chnl=15 +char id=129364 x=491 y=332 width=69 height=60 xoffset=-1 yoffset=11 xadvance=68 page=0 chnl=15 +char id=129365 x=412 y=136 width=64 height=64 xoffset=-1 yoffset=8 xadvance=63 page=0 chnl=15 +char id=129366 x=947 y=0 width=66 height=65 xoffset=-1 yoffset=8 xadvance=65 page=0 chnl=15 +char id=129367 x=180 y=203 width=71 height=63 xoffset=-1 yoffset=8 xadvance=70 page=0 chnl=15 +char id=129368 x=878 y=266 width=66 height=62 xoffset=-1 yoffset=9 xadvance=65 page=0 chnl=15 +char id=129369 x=269 y=70 width=64 height=65 xoffset=-1 yoffset=8 xadvance=63 page=0 chnl=15 +char id=129370 x=823 y=0 width=53 height=66 xoffset=1 yoffset=8 xadvance=55 page=0 chnl=15 +char id=129371 x=205 y=0 width=50 height=68 xoffset=1 yoffset=7 xadvance=52 page=0 chnl=15 +char id=129372 x=389 y=202 width=65 height=63 xoffset=1 yoffset=9 xadvance=67 page=0 chnl=15 +char id=129373 x=887 y=330 width=60 height=60 xoffset=1 yoffset=10 xadvance=62 page=0 chnl=15 +char id=129374 x=961 y=632 width=61 height=51 xoffset=1 yoffset=15 xadvance=64 page=0 chnl=15 +char id=129375 x=526 y=637 width=56 height=56 xoffset=1 yoffset=12 xadvance=58 page=0 chnl=15 +char id=129377 x=425 y=396 width=53 height=59 xoffset=1 yoffset=10 xadvance=56 page=0 chnl=15 +char id=129378 x=321 y=203 width=66 height=63 xoffset=-1 yoffset=9 xadvance=64 page=0 chnl=15 +char id=129379 x=761 y=331 width=62 height=60 xoffset=1 yoffset=12 xadvance=64 page=0 chnl=15 +char id=129380 x=480 y=396 width=48 height=59 xoffset=4 yoffset=13 xadvance=56 page=0 chnl=15 +char id=129381 x=0 y=397 width=59 height=60 xoffset=0 yoffset=10 xadvance=59 page=0 chnl=15 +char id=129382 x=684 y=266 width=50 height=63 xoffset=1 yoffset=10 xadvance=53 page=0 chnl=15 +char id=129383 x=610 y=135 width=63 height=64 xoffset=1 yoffset=8 xadvance=65 page=0 chnl=15 +char id=129384 x=901 y=632 width=58 height=53 xoffset=2 yoffset=16 xadvance=63 page=0 chnl=15 +char id=129385 x=326 y=696 width=56 height=41 xoffset=2 yoffset=19 xadvance=60 page=0 chnl=15 +char id=129386 x=273 y=637 width=64 height=57 xoffset=0 yoffset=10 xadvance=64 page=0 chnl=15 +char id=129387 x=0 y=203 width=45 height=64 xoffset=4 yoffset=9 xadvance=53 page=0 chnl=15 +char id=129472 x=66 y=699 width=64 height=49 xoffset=0 yoffset=14 xadvance=64 page=0 chnl=15 +char id=129488 x=61 y=639 width=59 height=58 xoffset=0 yoffset=12 xadvance=59 page=0 chnl=15 +char id=129505 x=918 y=200 width=64 height=63 xoffset=0 yoffset=10 xadvance=64 page=0 chnl=15 +‰PNG + + IHDR+ƒ IDATxœì½}¨Uš/øëÞ¶pŽp„#ì G8qH]â‚c³ÓÄ!Blâ/)ØuÑA/Öô’ºÄf;X}ÑFë¢CªÙiâ/ñ’jâ%6±Ù6±I5ñ›ØÄ&;ER‹“âX›c±-~ódzÖ}Ÿw½ëýþØ;f?ðœw¯w}¯ç{=ïÄ f0ƒÌ`3˜Á f0ƒÌ`3øvÃNº3˜Á f0ƒÌ`3˜Á f0ƒÌ ~¸mÒ¨xÀç¾ð €/¼`7€m~àSSîk¯ø»æ»ZÌøí¤;Q!,¸²VÛÜmþ½Ýü?®ø +²Þ×Íߟø Àoêéj-°ÿ™üÀïîKèø.€ûÜàNw@Öä+Ⱥ| 9‡7Ãxâ`À—¸¹Ç¾ÍcÞ àAȾ½²wï†Ð ×!ã¿ +àÈ>þ7}qaÀ{ùWÃ1á›ÿÒ`ßnU˜‡¬Åu|{xûäl}Âßï„È__¼ +Ù_¿šPÿÊBB7¶¼Ìò¥A;Þ«¹ä×Íw³Qø¶ò‹€ï¼²—-\EÀþ©éŽe€%L÷›öþU ]ô»>låŽÛ ôÿ È^úÀ»¨á,ýÁM|`€?‡ÖÏüaåé†ù÷.óï§ ˆ2r»y÷È¡}Âüv39» cÀ›p_ŠÂ2dã[¼Â8«†/ koRÓB»~´r¡Œm9ëû²o¯",P|çïËw9ÌCŒmßCp¾Òàk?ð€¿¯©_e¡`o>€`íÜ=ú „X[ƒÓ'£ãÍÈÈn¥1¯Böì#1o cÿ)„Aß Æ€.€Ç ‚GÖójáKýü2æ­¶k·4´ü"ÇXÙä‡=öDqþB7_ÄtÏ} bP{Èàw6¦ÅÁ—>„ˆßÇt*Q€È.»Œí>O«ð߃x£þÏ!çé=Ür§ ·¿Øàû³˜äŒ²prV‚éYÛ>džÂtÑDŸ¹ À¿›p_ê†d}BC²ÐE@èÉ[Q™œq3 ç)ˆðvÂàqˆEîG‰zÀÃMÿ(!ÿ0Dˆù +a‚õ:€ÿ»Ö$Ãu®y ¢øÿr澂ÌéCÄuƒ¿‡ìé»!çð»}ðSχ¦ži`’-ÈÞ´Ša™uû²oÃާn¥1· gòEäW~Óàk]~Ó±—5´!gì¼²,XeôuÿPQ·2œ„ð @dšm emã4z‘…8&²î³// |ÙcocòÆ€Eˆø8DÙäÌÛˆ¶!ý½ÿº´ÿ·Axáýùà.Èš¿¡!ÓF?4ÜJüV 2ÎãiàmÏùE*}ÓO!Jè?O´7‹=°²÷¿­€9ÿý!ò;ý4܀СJ¿7›`b=´ +û1Ȇ±F÷! +GËüîó†¶ÔóÓž‡XŸ®š:¾ƒ@Áþ›j»Ÿ +ûLÛÇüÏï{ ýº "$]_8±ý9€?«²“9¡ 1B<†ìþÁà„¡~ƒÀóíÂjCîî†ß +×!ú-”gB‹ù~ùãUˆ}#¡ŒSVÃÉ×׫¨ž¹.@ T»!}þ1dþò„(í0ï=éë3þºÒ^f‡d¾€âÞà$x²/&-Äj¸ÕƼ +Ù£qŠ¿õÈ}fÐ¥7wBæé^/ŸgÏZê_Àä½,sãy‘p>øò7æ;=ïYøbt¯Ã˜z+ÀaÈY¹¡©ŸA„t@„½ëùb<ÄsüGMv2V!ކï¨g7>SŸCxÝ—ˆ§—!gÊ: Üýú3È^nZQÜ à¦O€¬Ë{9¬ª«l+óqÈü}1¬ý ÍGôÅÁ­Æ/à9ˆÂ\EdêW¦®¿¨ ®¢` €ôç)ÿeb½šñ.™ö¾}«øÿɲûuˆnku€ÛDûàyT°—n6Às&ø:„HVM B”A@”ÎûМÕn?„Þ€\®ðØ‚0Ñ{! ôJ¨«9L7 Äz÷°öBúwÊØÐüO ªœçä¸A¨ž/\õ~B ‹Xà­Á%‰Y|Ù·vÌW‘? ná^¡–qí~`ªR®!ÿ}ýú ÊEX£×]ï/Ëu/7< +¡'Ûb~ÿâÝù²?¿„œ«¯ Bùî~ÚpÈ8eé§F0éPñ[iÌmȹüžç·Ï!{ï]ä?ómȹ‹ó„}QÞþ6g½UÁÈûˆÏ!c¶W¢²œß‘s#:Þo óü#LÞðq3Ád=n‡(€ÿ’KåcÈÚio² •}Þü}'&Ù·bÈ}L=û¢(õRµ {ìŠ7 ôçÔÏ#ÜH¡/ tâÔ¯ î‚ðÁÇ!ûâÈž˜$ÜJüÚ~ ~¯ÿ—hç'Æz'D†y2¾'à—ÉÞ3¿M‚Fj€…Ÿ@ö[Ó†¦g!{JÑáÛeHâÁ€œ™·!zlœas BïŸA”ç>àÿ-ÕC’7ΑÏ™~VB¬ïÎÚ9Ä=C-tZ8Ïz¼YÇÜ¢tk_—Ù¯?Í383Ê4WXkjÌ{¦îx»Nª0ø„º~¸O±Ú3仳z’“£¿«Œ^½èM¨/ÓŒ¯0*g8ÞÃhd]ÖëieqŽaï8)| îPá4ÔF¾¢W!: Œfç8cFQÜI‘O«¾KžÆ/vQ"©ÜóMfzÞ½@1ÒZ£“< ç×"eoÕåø[eÔHÚÔUݾjs¨žû¼óuÁ˜a£ð@ý6`3óP%î£îF¬o-0Ð)RWc•œ£;òtú…ˆ¢lÎ}ôò9 +ÑYc½w8AÎÖM_›ò^œRs²EÿbÎ1,0\¢_¨2c6—Iç(ج ¾eŠàøEºÌèA1¼ö²<“p½úI‡xà”óâØ¤Y§=e`L!䇯°íwÞ¹˜0ž8l›wOx7/î0mU™ÀÒ„XgÉä)%ц¡k²ZÅ0˘wPÎNܞܤœ= 9Èè• kEÅ +uuy‰a#Ú˜~^qˆa(cð)ÿ'1µõžö+s‹Ñ0Î&=Jq¸Â0¯ªS ¾ñIgͬ—õ †º§U™u +©òþuîaØ«µAáaM†,'¡–7òÞ‹×û³é$U¡ú¹Àjã$~Ña”†¹ÐÍØÎ0¡Ž5¹$šà‘ ð'÷Îö³Õ‡Ï:í]c3‘Í}g.õoËô'?tadÞRäß3æÿW5l¸°Æè>¨ß5Œ¹©ùÔp‚õ_[qÂ…d˜ª;µJ@|™/³Â˜A¶[=‰úM] Z:¦kC7›8”¶]-H^¤¹Z_´€{GärCãè9}+rý C9T¾ìüYaLŠŸf1/Øq§®¤¹8mu~ßE!i„±*2JžsÊ\aþ9±Jy98æL[UÝqí0ì±Øât(#-Ê~ÑPÕüfó£ öå–™ïM +“>ÁpØ_Ïy÷5õÛ:ft‘b$Ò´¬ÓÀ˜[ –qÊ¿Å*ŒY”ÿ¤þU±ûNûƒ˜ö'+ ïÁkl.Ù4㼚—s”5Ïu#Zx™ñr‘½¾T'´èÖ_4B2/º•AmöU{CÏïnH¾v0íb: ²‘„ÏRö„Þ7èOî¬ÛkbªÀýYþ7Ù\´›{­âH‘zªšŒýLÎîX6)–^k·¡:Ug!?hÆ`²¹|{ÎØã’Ÿ r>cˆkal"‘Š¡°ÉìaÜ«Â[µ¢¼AÙ+>ÂãÛǯ9ï§…ZœòÖ»¾ƒQÏœ¶XTÏšúâð,“™¦†K B÷Ü>=ãHîy·‘)€[ûé[S}{‹Í'ÆLëŸêX6Â)똭‘ö"ƒó1ræ}'å håXÓÈ£”sß1÷Uö›ºÜ³Wǘݫ8Yò”1äQþ-Î3lT)ëõqCIϧ´? ì:}lJ¸žf´ÁÇŒ*®{¥ïM&û{’á(š³œÞÐø¾ê§;Ihùro +ÆPöÌxŠ^™KâzŽ-¬Qèmû¢M‘S|²ß5ÓFüÂâN§Ý 6—7e‘ÑkŸuG%öU[ÄrOSÖ¸ì\,Pøì+ŒçMÕ§ACs_vL¾ÈÇ+lö«_n™ë|Ì„e;±ÊdÅr¸_¦ª½âbq?ƒ»ÐnÂ$ ›”Í»À@p-›dN{#,zÉÔ=©ìõgܾ;üK [kÇô‡º–Í& Ÿs–ñw— eѰI9l¯QöÉ{geO6cM +_Úb|2Ž9Êaºâ¼“%rµÂÙPÎ8%}DÙëûYü“s ¬¬'˜|wë”g\ÃmvÍ»ý‚}΋UÜõ9ÜPÿó`›áˆ—5–ó”fsGý®“BŽ2Ì{O½k÷°­¯?1w>iý×èK˜fð)ÿY Òîõ¢¢áú-†Ïõ:ã…µ®™“:®‚ÍQèj’ðÑwÆÜ«¡7 .3Øo®×¶EÙ[+?2å +'xÊ« '¼Âf¾Qûª¿Y i]S>îªÞÍŠg)4 ˆÌÇ/:ŒÊ™GXŸ‘q;£Š•¥«UóH‹C§½ºCÿ]t•¸³5·×Wm kTŸSП$\¡?:ù,›ê9}(4wEoÓA +ó(j!lS°“ô+Q#†WèÒJ°¶Ä´Õ¿ÖÂ6Oâ¥ÒmkRß0n3šqÓ××{å»×ÝfTùk"ÙÈú“Ä\£¬Ù^Êü¦?´lƒ"Pîaþ°ÇyÊÁˆ‹&¸fê§D}§_2›õ³ïy×7ž×X_.†eNÌ–_ ˆ!¨kÞí×4ö +@Yf¸âÌGRþ‚½¬ß{ºñžª] ï×BÖÜc^tÊØ±˜Ï`ów?G_«³¾'ºÉüÉp\#@ZâTW`Φ£ŒÆ,f<ìô!‰®U[GY‡ëüªSnŽaãþ5Þ¼ bËâ@­…+Ùë}§öLÖ)‹Ì3l°Þ \›¶HöUŸ³¾sšßÎý·ÂäO¸%½—Ä/l®„56“3§Å i±KW«âÝÄWØü¾o1ê@­3ÇY_µ3lx¬q8P}LAâÐÍk£û< zÒsúQÈ™P¤áŒ*–¤ìUnÞ…ø”šS¶kž_ (Ãö~× +Áï1P +û 'ݳp˜ÂüšÊȇ.aòy|„Ãçew=NçÃã Dq°IYƒªÓƒpˬ°Î|‰Žú)ã9Äf-ƒs Áƒõ®˜w}Lw™Á7a_aúÝæý”uPΛ«T•PŸñ¤Ð>ë•»Âz˜ï<…8Sæ^'µ"‹…“e³[ö…F®1]0p“&gàÉèçìoÙ1ogX(,fiaü핃"WÑæýÌ›ÑÝ}?É ×e6XŽÎ®Ð½érÂܹ¡¶Ó‰S7jï¿»oÚ "áö20Ú kìÏ^|¢jãPݨ=ÂYÓ.™ò‡¦ ÿuà€ù£²ð‹E†UO3ì½À|Fª…OØHÞ-ÓÝF7æÝ*x¤Å¡Sפœ~=§uFôU;à ×ÅêÓ` +úãC_Ô™|%vŽBów°º:‘{õîŽX¯Õj‰þÐx+lt0²M…´à¡ ×(„¦ÇÉf÷¡ +u˜²à…S…ßõ(wÊ59ŽíÁ"Ï'F6(Æ¡çÂu„²V>|Ú”y"P™ïÛ¥—YLYÚW™‚3¬ÿ«o4³0(Pï¼y×5Fíi+NóeÞd˜ùÛ¤…½ó°Ói#ék§ì¿ž¡±EÙne\Ým†»4Ot™1Ûöâ2;_¡œÛnÌ»Ûé…SöÈK ã¬rÌÚÀW4Öâ*óy€âæ& jþ˜Ùr”Xtó»$EÚ¹^ W˜ÏØ=OáAq‘Ui´ŽÔXãÍáe® +õ½Ñ-FùŒUl.2숻:W­AÒÂÍ})¨ +ì0L{²^U°ç&ÏY»™pÙŒ/ë™ÎË/@ÿ÷Ü-d1¾úîó[Ødú>,Ë/âÆ~¹`=U`‹Ñ¤éu}éC_ Np̪OMæ;ÉŠ{Õ_ÆŒODߢ?wBw«Ê©âž£Ú¿°ß3¨£lª‰ÂTmŸ´'e…¢@Øpï”d#mŠ ×åô„éÌ™oš1åQ˜}°E&Ž3ê­™D6ß9F¿G? 0f¹»Ž½Œí\¦ýueÁ^¥¬u–+ý‚mŒ(ó¥Ï{ÜׯŒî37Eƒfä—ÌûeæJ3ºuÆŸõý¹#¶(ÂNQÚ¶Sï˜ÉŠ’{µ§SØ]ÜnÆj#§\8ÃøµØGav¾ˆ0›S%­ý¢cžc˜NösÌÕ¤Ñ^A³Ç#®Ï\V8ÎkOfSÒþhs«dÙk;œwœ»› )k«•–óN™6`ºq©†þTm(go•Bn†/4¬2¼×™^e¾ë7#žeö/äåÛ™ ¾k-.º´ÞßUÖ´::Ç«ñ„SGœ2׺_j*jØHB7ß@ÖÈ™ºÑÒ-äÉ® eT&3H°‡KŒÏi7¦|Ë꟮#¾a!kA_²¤&f¬0š1SÃkLh“h'è¬\QˆãÐÁ, +Ÿ Ø|‚CŸ§x@¿Oy¨6)‚×+Œ†~]dqáç óÁØôã ÊùÙKÙÛYÖ£M±òï¡x–_£0|_¾Ýž ý‚c˜÷­à¾2Ö®óþK e¯˜2]ów™ÏÍ1¼×ÒJ‹"¤ûŒnķ¨,1*\X8ÇôŶӬÌ0ï˜ãpDÙŸûNΙ¶SîMF¯ ¤ñ‰¢c~”a¸Ù<{úŠÔ•Œï¸Jt7g›î½} £„wâhÜiæ”Ñ‘mÓèí© +»:àò¼ ÊZÕÜYzq–á=­“sVG†MF=[ÓŠ‚x˜²gvr2I‘5öLÿìUË÷6™M{ƒÉûüÛ€6â,­\~áæñAZ/{º iŠLQ~aqÁû&'ÿ‰Ëy§O¾(¡2¸Ý™³k¬&ʱª±kgɘÍFÍÆá>FeÂMfÊjQô Ÿ N3æ¢WVºFEÇ™¥±Ét HÕh…sfR]ïÚ)Þ!…«EʧllR„€WfÖIY€GªÜ*…8n§¬Ïa +£Ôe,lQкB4îdôJ†Ë°ç)×0zoä ÊZbæÊk „—7)ÌèQFJ‹ÑüçXÌ€ÔõôãeŠÐ”ôuƒ8¸F³‹yá"EñÚçù­¨µÛ†¦Íß”>t÷ eG¦Œ†Ë„¤j!:Oxõý¹AHQŠÓêy–~ƒÜ:ó]gО™¬ŠaÑ1ûèÉPý}ZÕ™ô^ǔ뛿èYî4sÞpÆ–ég&ÍÝ|Æ:²݈˜N†wúªüµŒóäb›QïÄ(¡|QÈ.ìCí…òE ÝÌ8OáÛ#Ï|‘BldÞS¾ežoRè¥}·j¥DÏûÅ‹ª÷èEn°_Ö9Bá¡§)‘–®]¡Ðñ^ÅýKÂ9g}Ä ÇÌÃyÒdÒž)w39Šò¢ mOãŸEøÅ€éÐO©c”¡Žn†¾á]OxÑ/±Tîu¼ª¢Ü|a[lFîσ‹ ;x×8Yƒc—QÅ=ò¯ÑgH°p™ÅŒGz +çËJ+°ÄðÂLÊ:3OQ¨ì¢Œµ&¾<~eÅíô‡`^¤M7¾˜äA©ùˆ+£ë:˨’r–õÝ\`ØË%|&itï˜çè?7#†•i»fÚàOÇ”ë«gVÉÌÒŸ"cÖ‘Cý å;Ì£„:úëdè{…!‹À§éH‘„]ú¯¦$¹ç)?¦y÷¶K3¦ýSsYpÙÌ…Ïø·E1jZÁ±MÙ‡ó ½Ï1L?ЬmRÿlßN²¸`½²NPö­MÞ¶Ÿõ9_–ì×7<}_d _¤)‚S.Ëžs…7‹¡ÊæêI‹Z+Â#ûL‡´‹Yä ,¡Ì]ç<Þì¡ón7Ç»u¢ÑVDvñ¡ù“YÔ¢Èm]V§¬˜úV™,«ïeXéž”a¦Ë¨ò¿ÅrùXv0>Ò{È|ôÓ½>H¦'ގŤ[ –i ͰØfÔPGÒœ2Ø¢@½¡¶(›;É +gí’2+Ï©z“µ­ëœz¯Ç°UpL!ðU3r×£:M÷>[Œ†kç½Öâ&“!ã•‘EÈ?Îø»óyà +E ;ÄøÐò®ç½2gÄFXuÓ·uÊü¶0t—ÁixMý^Öò­ NE²·þT›…nÊ{C§üˆÅs‹ákYæ#æ÷+ #€LK #} +-ÙÏ€¡wL¹¾ù»§ú“Å[œwÌîõ“,óÜa6%ÔÑÏXÇ CÀp”Pš_Ó{2_Öêe&'|LRŠ|ÅÂ…uæ?¯ÚQô« Ó€;)üÃ7/—)û>)Ä&T|’acô(å½¼8PõVåUkSx¥¥;Xýœ ®)$ÉÔÜ¥y6/2ý~õ“Œ¿Z¹F‘›NQxD"ÜOSôé:ÓÃâ‹ðÈ]1sbaÌô(&Wu!kÞ‹"< ¾aaš’‘ºWÈògjÑ©3é*ßÓŒ^³Nã I¸Ê¨±y“²âæÜ½&ZU¼<}v×`«Ä¸{/îºsžˆ:7_D©–I?º‡u™õ"Ö•§ÇZÛ¢ßËœ%äã¬WÒ°÷@Î2™ˆe|¨ÉA†ýÕ n†üþ×"Û [¥·˜èv…TNóM IDAT¬‘mŠÀ²ñ_7и‡¢¸u˜iù¾RÐ-9g# +~Üý`kPƒ¦¼ïàeέÒ]Føu=Œy¿îq~KíÓïï»aYN0?#Ï£s×yç +E¨Ý4ã?Ç@±YcØÃÒWï)¿½*p‰a&7döS²o=5Î,Š¡õ6ÅÍU‘¼"s1u‘"Pv3Ô‘G1Ì;fí}×Uóþyf°_¦°a¸¯±xQž1÷UÙ4Ïù4£k¼N*«Cÿ²|.Ë¢¾†ušÕdn12š5LR œ[œû,¸HÙk¾¨ 1ň–ײÝÌÛ>†hUÞ]ÔÆ–ºçJG@õ +¼oCþO1Ø(G»VÁH»¯Þ£¬ñ5³6§(üIË2 6ñîSÎ*_WÌó¦"SL¾?ÞSëT„_è±—½ª²ÄføýòÁ¸Á5ÉŠ+ Ã&‹+xš_lѯ?µ¦A:ŠçQg¾²æ$p¯O2í,3¬øÆy½[ ;QªÌ‡âÃýŸìKº3G‘™v°X¿eF$iÆXÙBé¨.ßÃí ÄI¡=ûMÙ! ž >Á`%e;´÷..S˜âYúÁ EMšœ4 oݨﲤ-Òª)?dò'ÝŠÀ:ecf²5úi†=¶e,2ûþ™l1lÉ£ˆ&Á˜Â«º³Œá Ó?«X6 ²½G—¤Ð[¥£Ïðw®»1å·›ßËû¾gŰ㙟Ô/Ø >á Ãû]ç*Çœ„#f˨7Eç«Ì˜‹ôwZÐs’°WtÌ˧[CÿíƒA‰1Oz |ئQ}W'®QxZ§`ÝoR ?Úk¼Æjïý[ÔŽ‘º³jë+^kÌÎg¬vƒÅ=n#ÓnÖ÷÷SdΓLŽŒØkÆ²É ÂÍíûytó4OÞ!Ê™µ<`“þˆªªqÀde¢Ïê6žZE©E»Ë0ä-ŸÇˆÚ$ºÆÆ¢Q$Z©Ó‡tþ 2¥ìzœÓy6‘³÷jÆ +úAœ’­õ§uÖûåŽãŒBœlÛ2¿¹|aÍ<Ïs}ËþJ‹†s󩪘—?Džp›ùÿ î);¼cð!ÿÀ€÷¼ à ·›²÷™g.,xÀ'ð]S—îð3Ó† ¿qúù8€…˜zš€Ì¿_8æù½à×|à»ÜYq?îðdn~nÚ{Àv§Ü3ùýÈü½»D›?@°¾ðjŽwçLßV´ +¶?Ù›ïüÀÕߨ™ñÝ« ¿Ýàû>pÀ~W,è›6ÞpoBÙoü®d{¿‚¬ë¦ÝyO™G| àSî-ó|·§lWýþyɾiø&gù¯!{à>©^…дs¾çöÝGó²¼—„¬W^¸`€×K´]tÌ_–hÓB þ}œUð—«Îßwg|ï«müÀÿàïs¼KÎß¿ðü»uÜpþ^,Õ£êaÀ§žG ¿À‡¹b€?ðË‚õ`ê}F={ +"ÃT šž~§†ú5ü2?7 û8NŽÓ° ‘Kîp?€¿®­waø¯ù¸2G/ÁþÿÖ”û»îÈ&†Ð÷;Íïø)€5Söÿ«ùí}?„Ðʸöª€»=cqP–_$Á³¾€Ð¸/œЮ°þ¼üÂÝVוJáçÎߨcøu@t ø;ç÷׿¯i²ÁãÓLWwü„e«Çcê9¦þÊé#IpÀ÷œgïø?cÊÿÀO úª†»!4ücˆ~•Evù;=°p{\A{^+˜öÊÊòÀDa±ðÿóî«>3åož½ˆxÂÿ€Gg/BïGL;î 5| aOÅüþ–© Ét¶I°‹ù ‹ÔpÂtž‡0‰ºá+ȼ~„¾p.8`áÀ**·¡´Þ?oA„Ä4hC "7Lß>ƒž—‘]X‚0™y¿ +ać2¾ÿ_È¿Ÿñ=n@„<ð®ùý€ÃBàeÈÞˆ3´Íï;!gè€ãF½ô"D0Õð1¢ +õõ<I€@öÕ‹9{aAþç¡è#ˆ@d+Ÿª2]C#~ªR¼|J LæO!çõj…ýøGˆø^ŽwÜuªC1ôÁ¯üºÀ{¿‡(DYÎz䳦OUMŠðšûhŽ~v"Ü.Wж†_%ü¦Ç™$,T‹ßy›Y#Ø‚ðã¹È3î­Â€S,@hÖ6óìˆ÷€?†(Ž¿÷½œ>€ì7 oøo%ëŒMs²(äeá×Þ¤ íð‡?FòÞ¯~à‡È“OAοϠýkHÿ~1R| +Ù']È¿Èqß1eÞ‡œÕç!rÌyóû÷—_0õì¯a\ÛL»q igY~û ºƒ¦Y!^-yyäÎß®¢=-ð‘ów€>ë_!ÞØ¡Ë½ëùýwËdi4d·úÿGðŸéwÔÿ€ßö „•ìÝž2ea/D~ÕðÒÿY“Ÿx~» Bÿ~Žl†íÿŒ`Þ¿Ž)3è¹yQcM1pBÜOuÅ…GÅ}o4î[‡Üª †?Y’¾|Ê`RÂ*?ÉŸ¡éÃP=;Ää̘uÀ&£÷ÙmB#Û†²áð°"ãvï´fÉ}àûœ£†!ÓïAu˜¼÷²f‰Õ_¾XÏøÎÐikÄà,ù¾¹]7\a +é&©2éÖeOLÝ[ ’‹-Pæò óï› òJtÌÙ˜BªÊ|­CdžÊwTùŽzÞ3Ïúûa¡§ž ̳A†÷Ý»€UŽyZÑ^É2æ~…cnQh¡åúy^bh3ò)ОÆî„Æœ†»˜ÿ:Ú%¦ú.žg¼ç˜?1Y¨662ÌWY´_¹Éú‰µ*ð2ãéœ ù?Ïê®ÆÌ{ß·WY6„êw<å:Œ~NÓw]²M ¯>Íð×Tzz³Ê€7gu{À~5)l\çgVÔnÜžóA‘;Ó>ÌÃ#Áèùn"¹\Üëô3K~êý¸ë î§tãhε°‘Òn–O¼Î3 qù¶t.ª¯ªt½ƒ¿ÎüôHëQ.$]{wçcñ×4ÜO•¯³ÂÜbnÀ#êÿ"Þ*k=Æ®íŽ{ƒCë@,„ºŽÞýÀ`R(›¶.}ÑŦÀz5¬§æiH8MÚüT _A¼Îÿà<ÿ€¿‚X¡±ZÝ@x¹°[ýÿSÿœálåÜÀ«o!ÙüˆU: ôþ¹ Ù¯øàoüˆåû=ÔnÈÙ°^Jéz +¿¨°½ßøKˆWäG‹ü„³þ€ÿËüûï!Þ³9ˆÅóAóïÃþˆUµ +¨jŽ‹îÿª «Ç¨_5wå(«×§lÕn]~Wý}¢Ñ37 ûýú9âC³‚öåñ„×ÍGŽAúvÁõ´m +€Ðš×xjî‡D~ñº×Ì,hš4é½»‰Æ:†`-n@hØA®5V ]„#Ë~ˆzBÿ5Ø0Üû쩹- q|f"g|á¿h¨?i`¯²lƒÈ6"à,$Âe'$ +ï—~õ‚ózÌSß¿B" +ÿBŸ^„ìõcórD>} rŽ>BøjAQx²“®œÕåõ·0‰x³à^-âÑöA~au _#›l: pÃËïAþë":ÚáCç·ˆ,üCçyÜõKµy'’¯qh¹%®¾ß"Lž‚DµnG8Vë…nôFY8†ðþùÂËóÒ£¿‚Ⱦ3e£}Ò®üþ2?õüÖC4"áG(~ý,n¨÷nõÿ3¼ï†-|€ø0þOà×ÔBÀ u…ºˤðÇ!‹a¤!„¸i°áIö@¼ ¹óW÷=< 7 ëà*ÿ4‘þ1„im3 ß­þï ƒ÷AÜ•·Ì_Æü¶ˆ@0O‚ï#=Ôò±Ûýgs[$AÚ\ýÁH?‚Ìý})ï¥ÁgFÿÄÀà$]E²jÅöäÌÚ\oCÎè1OZu¼Ëüþ0„è^‡œ‹*áªC— ÏAÖìHŽMƒ¾€0ÉŸ£:V3§´5ÓÌ4iÌ‹(¿çÊÂ×+>м!mÌúÌ•5Xk»!<É5nd~[Üe|²÷—Q|Ýu¾Ž«)e«sè}òd¬.üBÿ?ów2Ï@xÈ÷!tà=Èia;Ϙë„UˆÑGÓÈcÁ¸ÌU–$xQýÿçhæÎûß@øÄ±U:scƒ†~bˆÕ|«†ßø=û=Èž~ñW"oÀ:­á×þˆŒõˆÿ3ÈyþÂAÖÈç°Éß3ýIº¦¢y[%:+¸9ˆ^‡ð}Kßó·“ ¿pù^•¹†ª†_CŒKz|÷!žoú@¯Á«-»!4Àg<þñ4ï*ºàˆ¿þ‚sï24|‰`|Qôkˆ,õÂôãvˆ3·ŠkBÏ!z¥àyÏ‘ósû>¢sû]ÍÿÓ”:|zÉvD¯¼ 1:Tš°- ¼q’8KDîBxQ~´{Èß…,ºV€mz£ÿ²I_‡Lê7¥âQ»ɇýwÍcÂݘŒÀK`ÿÕôåm„£,ê€/L[>Á ýc‚ï[”k«Ø%Ú¨ða†ò‹ÈÆ„îOø-«R“µÜ‡òG|7¡œ…¬õß@f+4· ûy[Æ÷-\Ev  k,«Úúÿ}ÓÆ7=õ/Äg”Ó; ó‡){;qÁ* ZIÚVA}Û¼ ÙY¼®Ã7¬H»Ò LYÇQíÌ"pÀÿóÛ6õÿ´1kút;¥¼< V¬¿²Ž¿ƒ·Aö±½›ùˆië]_zåR4]K£¹zNî†xbⱪ kTÂ/ü'ƒ{!ÕC#ô#óDÈÔt8é®rðÄ3®“?Q–ë‚] žÏר– ÏCøÚ#(g°Ê/BxºUŒç Jô—ñ—Í¡ÐØ(É¿‚œ³$ #×O=×ï!rÖ1ˆàyíùÂüý#ˆQÔ°9s?J)wUý[vÒÀå“¿‚œ/;wU¶©ÿ§ñ‹mÎßW+êC]pa]éd7,!,÷ý8® ‚~³90²@ÖrÁ/ß9k>ÿ½(oØŽè½ÿŸ!Þ¹˜þâl~QÝ÷yÈ“[iB?õYºŠâyÉbAÜI²à| +!èO lÍý%Diz²ˆ_C”Þ×d)·ðSÏ3Þ_ø·1í>ŽtÅòS€Iy¼lØÌÃÊo ÂÏŸ@,á/¢ž¾%)ÿ; ó÷d“~a¡Êl3ÿI²áý”%óy\â‹<岆‘fU~?A`ȲFn¸cÖ¤d6qZeá<ø®¿Ty5¾¢ø?!€?‚š÷"˜?›˜ñ#ƒoCèÇ7=S•GH+·Aöd™P¿ïç,ÿªQ²5óOS ¯ªÿߎø1g=kuBÒYÕL?M1üg„#½¾‹b€Uˆpõ„N?¡wC’Ýi°ôã{½ü!‚kE :6溿?€j2û»ðkȸõ/’‹Gào î‚ÈB<ŸChƒsÓ€‚o Ÿ@hWÕtØ*¾?…Ð7}í”óôæ„éØ6Ôg˜‡8>„D,Cבσ9Mð¯s¦ÏÚIOËó…# ¿…Ÿ‡œ±§ tìcy"Ãå½~b iïé3wŠñÈ'ʯ 묻ŽÀ¹øü†‡苬 yd©;²jpû—'j"K4¬ iQ,UÃ;Èù«á!”çw?AT©ÎÛ8ø'ÈÜä´q;„þþ§uCX÷°Wª7ø«„=•h`-C›4%íÛ $„{’,hÆà&¯¶pšÅéõÓžúöxÊÍ™9êš>¥% wq£²D’þââKŒ‚›¸2ÔôUƒY².¶)‡pÉY¼mfuŸòÑ¢‡MúÃâA3©Y”8‰>‹WÚÌöi¼Í +{„’±3íK +qp…¢„¹Ù-Ç ²òîeü²YA×™ӃŠ/¾ƒéÂÞ”:^Ž•¤² +é;œwÓ2yö…¦ ª»ž~õ*nÃ_®Pˆ¦Þ»# +}R,ûÛ˜²×æï"HžV}ˆË€k±£ÊvRæ®ôTólÒ§e§Ž¤ŒÎµb§ ·úV'j¥õµ +Ç|H•ß`~Ec…ñŠi^Èj\ÔøœÓÿ,4÷¨z'ék8eÑf&&…¶fygŸê—«à¶(‡Ʀ&öàÙÉÇ,§À¥¡•y¬Cg´44f0P¼Î50×ûM[öŒW•á? µÒÓ«¹­EʹH2d¦¡•OǶ‹Á×Eæ(gg“ñYÁ]lQø«û…­,û‚ªí<8`6yÚK+›Ý öiüÂío?G[“À"ýußSdŸRÏó(§U¢æeW<¿o§œm×¹w–ùõ“EF­.Ïž3óå¶gÏbž/UpêÈú%‡'…AαæBýG_5:ÌXÁ"Åri•ó=Az»ÌS_’G§Í`C§ +!<¨~{“Ù¾ëL`e¶ +´ê À»ó¢v€"(¾lê9NYž0e^6ïBY¿žéß {\8Ï|ç^{9² +áîgzó´—{¦1³}Oï­Mú½û;œ9<Áz<ð­ŒbaƒñŸžª­1kDÙÇÚC½Éê>ƒ–†]5æNíYºÕäçÕ4ÝðE˜V‰-Š,zÅ×°Å`/ºôgBCN28#Y"d^¢ìéNŽ~h“•Þj|…wQ; F¦üÐiÏ÷^žO½iE) 0 ýœãmóö÷ Sþ +ãÖ† ±iQ’u¡ûÉð8Óaô³’YÒ¾ýNÊYóDw2‰¨Áê¸YÏŠë”Ì2näÀyÖA¥ÿСiž3-Š@åzSÆ‚™•Ù>MèÇyŠršµ?çýNƒ« "Fh¿Ú ;¢xGòn¼¾šóaö÷Q,ë#ƒ'™_Pë™¶G"xœù’ÃÐI)¿‹Qè:eNPÎÂËÆT{ž~em{ÁÌ݈²ÓÎ_ßÔ¯¯¡øpžps–é^©”=q&C,.1LH“§:ª\G=ïzæ®ôTólÒí1Ϫ.9íÆ)ÚšÆ×-0ë1“"ðÆÑ­¦ÍF-d1:úÂÀí\dز¬ïêÒ:³1WøI‹p²8Çðw‡ó +ByÑÎÕÆ+êö /Qh†ß· [ ‹üë ‰_`X¦H£OU õH¿bþÖá¶q0u`_µÛD{K”s±A1HÖíxÑÊ?Y¿Rw‚röòx]´¼åܤœ™¸çËçà`Î~¸†Ù<òuöT½#ól¨žõ+hC×7ÈP~àŒ·nºYÝþ&9P[ ë^—˜êFÜž2í5.¯H¢Öøfa‹ÙpóŒzÿ{ åè—,œÏØv‹Lá‹pиƒa¾N–34fFý‡fÊÂv(Âó.9[4u¬²X(uÇ™È&#–(Š« M…ÕA×»µÆ|ÖÁ¾zw8ã)Šg:9Ë“QlàüÞm`®€”e,mxÖ:OÅ€ÉF¡}"'dëHŸ4Kj›ÑˆŽÛó’&àÛkZ-ŠqɽrµÉtz¨Ê§ qg“¦í:=èK ®øBŒçMÿõõ¾ÃÞÍW<ïÙu·s·Áêó´^ï›áÖnYCæ«yÎsYì«v›j³MQ®ÆfÜu °nÄ`†•…NŽY^Q¶ûÑg$lQèf‡Á=í8GÜ:Ð/Ù²Ú0ðžªwdž Õ³×Xî:Êv†¡›á×;¨p¼u ž/2YauÉiüë§®1Y&\d˜¯dÕMÜ;õWRÚù}Ð×K̶‡-ÿLºÎ³L¿ ÑHžýG_u`ØDã5aי̦ÚÝÃðBn0ðPU|­jì˜~^f4’#kâ íéMÁ˜ÊÎ……N†w\pï—¾áüÞk`}O¿²FuŒ({yŽBĆæýsLÞ 6mÓŒ¹Ç@¹™ßÒîp-2ðˆ )Ò2ð¬W9\¥2N¹è¨2õ¼ëN\Aè©:æÙ ¡ßÚ£d¸È2æ8auà)7,:ÀØÃ° 1fËl]/C’¸ì˜{NqW>´aÉ‚öPn0ÛÕ7>«ÏðQ†!.ÁË,Þj!x“Õ\sÛËè½ä¡éŸõ¢¸!Ðûœ²îcïsëûŒz=µRæ*{;³›LVÄuÝ‹çJéªþ4éMÑ4¾Ëð§ÿŠzÊ`_õ§Évõz’Õ>Üë;WX¯QçIÊ~1[Ì,ý·×"ì³%ŠBceÇ5Šáh?EVl1øœó€rŽÆ^XÕ^rå’*Âi£—•¿÷3ýSÍi_Ri1¼òðH7çÁ˜Ó+Ÿ.{æ&ÉiÒWå’"v0¬ÈöÿÙÀ¦à4£²VOÔ{+)¬Þ¢{å¯h´Ð£ô’"ý’0Nù¯óË4^Ô¸Öµ&Bæê@måÊói”¢8Píù’uÌSˆß›S07>´!ž¾ðþiCÂãêYdš¼ïX%ê;CYC‡ÎØ]K¦«p ‡Û§aŽw­Pï­Zª^«ì”õÖ-S#+üû(ë=É+Œé9ØbThì¨ß;êyÕ@OÕ90Ïž~ºáée”–¡ª'é.™ù÷bÊ‚ ÑI(3rêKRúÜöËŒy'à úãi•UL´A(ëý‹§Ìجڢìß$/škÊ“hׇ‡ú|¼'+º²ûÉ3mèÖ@æ~”Ѻ{ê÷sLÚ—Î’î3Ú¥¡Žüé—˜“<¸ÀàÜYC–vD4.Øqò€NEk°Â°ýëË-°Â€÷euŸN´ìžç·6E2YI>Ër ãÐýzG™<.é;¿ÏQøAÜ=ô$ã©{?¿h1:·Ó*Ÿº²bšãÆ¢óÉñm†=í딽]U¤cQ8DY7Qk‡Ñ1lgx ÓŒõ®!eÌrtc?ýF€¼F³Eú#/ÊðïÂè=À<ŸUš&Ô@•÷#}Øf°)GŒ:RˆkU ¥J<Ídï›7MKÔ¤ï}NBè©õÝÑ4«´ÅÃàZb»ÎïM¦\ëg‹©îk’çö(ƒ}¿eþÎáÒeØ{x…ñ +¨eŠç™Ïûa¿©lÁMÞÒQ¿uÔó£°NÙ{)‹Â”žf¼@£Ç30ÏNݶ²®Sv¦ãqëèKtÓó”³e­÷z5¦>0lØd¼WG›‘žEíâ§Î¸3fÃõµ ›õþ¿Ek0Øå©×g8ßÅð>\cyÃY‹á»µe¼Ýnb- ÚP¡…M-ØHŽQLýš‡¤y„Û ïËSÌî­ÓNŒKlÎ뮯€X£…5p­±æO9Å`_õ©é¶Áj ;ŽL9Ãz<·ós‹Bª¼®Ñ¢œ›84©ì…Vô(¾Ã”sÖ©q\ãi¿È‚šŸ'yG)çã £×'}WÉ-Â#]=­y¹\ÃxoœcøŒ¸Wcv0¬‘Áþžc4MS r7zøü̥YBב÷Á°$ó}N9Îó_·ž‹I‡¤ +¡¬i\p&6ë畊¢¶ õcÊèC6mD'Kè«>œi +±fM(¹U£û™­¬wÌôÝ$2zuÀ°‡ Œeä´wÛÅ‹⬽ mF…Ø6ÅÈ£ Úi&‡é·(6Nœa4ì«Å¨ð`½äy_CÐù,:êyG½Ó3ÏF¦Ý}LÞ–(J¨VÊzê÷y6PϺ _#ϸ‹ ;æÓ1ýo1ìYé9¿=Iá >ÏÔE9ÓWžFjqžÿU§¾ªÆì*ĤSî¸íÝGý,ëý‹–njzò¼a!·Ê°t7‰Ðf‰º]!Ñ‚ë°vk uç3Î3êœE!~–ÁÙ¸S¯‹z/×y?\c›ÏÐB­½–R$Š¡ +쫹˜DûÓv¿àû{æÅÖcÐÙËÀ€5`yÜ‹Vi˜Ô>È‚®²”5Á™Æ®SGÖñú®£iZ¼Ê0ý¼Æbk¤#;ÉéM8rú™EÞñ)¦kŒ&ô&£×7ÝÈŠ¦ÀÕÜõ!ãÇÅ[~Úy§ª¼[®l5ÊøÞ +ýW$ûõ«ºúªc×&Ù1…mfÝÐ߸Üdý–w†Ù)£6ôfÒsjÑf¸M»îaöaJ9}86™Ý’\&ì¬Êý£¯<0üXt“aÚq~KËÖZºJ[†l=hÚø·ƒâߢ0ÍCŒz$ö2¬| 6¾YeÒ†rnQk­$.™ºÏPö΃1û;Y,tÚæ. ª£Åx€ˆúÚ‚ª³§ž ̳ùÛͱ±Éjî›Zt¯œd¼Pg ¿¶¿m†¯l0`^çV:‡ª[&N u…¹ªÇ<Ϩ…ý$>`™Úâž÷þ¿Å gìö€,÷0êáª:2Ê·Š(¿>Å÷½ìyF ÚšnÆ gšW¦ÍA‡"Ôê;Ÿ›LOdMÊ.Zø¶koiÕ'Çïûª_“h¿cÚîœSm­ËCfL—Y<çDžcñ»ÂM¢>kd2¿ð¡V¸òD½ø ·¤Èl;öPo±xè¾›ÜÙ¶1éyOêã³;Ü+a>8˨L¾À(ªÆô_/}#é%f›×pPåõm¬e(¿ƒþ;ý +ûT}ÕÐT8\ x /3ÛAÐÉ šð@÷U{˜2=gN§%@7Çaä»KÕqÊhÕ0Vsžþd±$ÛH…‹…ý ‚ØFõfô;•H9GìŸMJ(¹5¬´(ʊΊ<6ïYƉ"ZA;OÈ•Å6ôÁö_GftTù¾yÖ/Ж^ëžz60Ï”ýâhª¾råóiúrC§¿:œÞaìœØyÚÁ ŒÓÖ32eºž6\^ceoé;äìÝ%×´0÷þ¿ÅS”5Ôûÿ(eÿ.0ìÁ¶PW˜«0Y,¡×E™?Èd£¬3›FGNÅñà+³ÃÌ_\2B2ù{ïóªÜ âùMB}íÀÒX;?eó<”Á¾ê×$Úû9ßÓN„¢û8 ÚkHCÖ—ÎÊIûvZ°Íh˜¼OaŒCAT$zؾ<Ê(¿Èýç¢kž¶ˆ\}•ˆÌO?öÓïe&…öÆeÜduCR$q\$Ú³Ï[ž÷«Ž²W…Óœy]ú ,SqEÚ÷Ð éTçv2ú™’$bä†Y§y ª@}_§S¦Ë(”%de±KÞÆÌ–MwdúÅs=TãLJŠF×7XÝAÝÁ01LÛ?6S¯…<Ô—D«ë”qÀë\ßN†þÄ¡ë ¸ÂÀ›?GQä4s^£8UÇ2E·ó¹E¹‚° ê9Äðúœ¥œ »Fó  ,Uçe.ZÙÐýï›gý‚mYè©gO›d½B®5 j¸Ä¨r7túk=2Úfç¤ÃøöF¦L×y~˜Ñu¬“.1*ìmPhžëÎ{ÿߢUT´‘Ü^p dý!À¾$EÖ£ÜÌ1 gvïjá5.¡O‰*ÐÞŸ6Ã9,¬S XG)©ƒLöØiïYUážiø +ƒ=¿¥æÚ&yê5Ô¸¹¶0‰ö;¦í~Žwt8ò&ÓsÅ6ƒÏŸÖ¥ü·DÎM›§9} Ê.2[$¤–…³ä;ð¡Ë«4Tq¦Ý«×8™ü>\`Ô)PD‡iQ¢YzŒF$ñ\7d¾.¸Èø9w#p_¡ŒcoÂ;>ì8õŒr¼›Û#ÉØuQž<æäõ¿ÿ¾‡ú¸w›À9 +#p'î2“ ©"Š ¼ØWmÆ)Ò6 Œ U*»yðšÛ¬P+ì 3”uï#%E‘¸÷iH!e‚[”¼ûG‡åMب½OÜC>r~¯síµWÊBÖë `ˆhOB?çLË´Çï¿^»”=fç}ž"Ì[%xƒBä; }Y¢Ð¤>ËG$-0>aŸîCß<ëlÇBO=xÚ³þïƒ/zƼIìÚþZÀ:ƒµ³s¢çÉÅ‘)Ó5/{Úfc¶{M'ô´0bØ@‘÷þ¿ÞÛd&?Oÿ=Æ,¡ëUá>F½fk¬G‘²ÊÚEg>H¡µY6½F6ò¨ˆÂÔSõ45ßn.0üU„<4·jì«~L¢ýŽi»Ÿ¡¬›´Ìg ³ •Qê¤CöZàÄ|ÄF å›L7f¹QE õCF¡Jù£ô±.ã{^´ÑiF¬FFÔsºÉxšä‹¬®¥´?ReÓ¢“°ã´;*QWî¤ß±ææV²Pôz^m·úÞÍ™*Ê€-ÊaôyO|™A5ºwgšJ¸¢s$YuâBl.2öô¢Øa± ÷KêA†ò-†rZæöCŒZ>Ǧ­<¹Z&åÛ?—˜¼–>dM˜§ÑͦêÞ…u¡N6²¢B-Ô¹·VÞ[gÝׇ’Ö)gt÷"çè÷8vTëÍèlÃBO=8ím°þ$¥zÌ> ÿ%Ê^±ŒßöWÓµ‘yn dzž\™2)gÈ5Â5Í[”sèöƒÁÈzHŠz—6(4ü%úÃü.±Þï•ûp'ýa ç˜ß“’„ÚÐkǨóN rÖQ6·¯êêÖ8¿vŽÎüZeÒÏʰU žI´ß1m÷SʵŽ:»Âúe"+ukª¿M1blpz¿7ŸgM, )¼Þ'ϹåÓ¢?}8tÚ«ƒ_¸FZmäž®0Ê£ª2L¸uŸc<X`}F€ãÏu‹Q™¬Œl´èÔµV¢®¼¸@¿¬uÕæ;ªã~p=³UßÕ´ ¸:!à(ã?G‘æ)ŸcØÍ]íõ8žRÖµðYØ¢¥º”¡9S¿Vp}ÉâP+Yåƒ C1ÛEÿÝÏ1E z–"dvÔ; æï½”=⋲ eo%í7 Í&‹e™uÃ×Ü\®7²Îć=§­:“bµ(ôa¤Úê©ßìYì0 ŒcÖ»ç³à^Æ_˜gý‚u[è1Z')Ìnc?ÀäÏþèþ>ɨ·„æÙÊ™véì(¡îÓ¬>ÃvVì0ùÛç)k½ÊôuY¡ÌãQ&'Ošd®åó†éû>æç“;)÷z…å'mŠÑcÌl\ku¥E°¯úÓ­y~]ZoïxïSϲØëB=“h¿cÚî'”±9z,¤9zªBkxª+RÄ^‡™šPß‚x€~p™bÀwתï”Ë›°OGœe=übŽQ>5É«Î-FéižüSY×QCRÞ¯£_µ* '˜Ìk\oyüÀÝ·MÈ[ûè×cÎ4Ô~nLúQ[‚6Y­Uvè™$²†‚œ÷šòªY´õÓCþ3^µ ÒªR —( +»ÞÌÇ”Z å<}ÓJõ˜ékÙ¦?t¿(\d6ÔwÞ+jyu-˜gßÎïÝ‚ídA÷î—Û—ªp•óÚ0sg-{ÌoÚ Êš\pÞ©kÒpEÍQG=˜g# +sÚÇdÏw›²¿ŸexèqÛ:ÝÏð4ó çgÐÐsÊ.PÖç ýÊîÃ×2Fž2ר\H6(Þ†ùÀªéË)Æ'Ò°NQd‡Ï›±¥Ñ¦- + _cøÌ-Pæ¶éëtÛéϰmaL9‹Ç)´÷YÓÏÅÔ§2†ô+ì5P”‚,^;}mªŠPyíÙ«3|¼Å°Òj?™æòÊ:\æA-T7e¨±cÚîÇü¾È°âs†Í9n({¿H²º4Üiê¾ÈÉ\ñ¬c}Ñ4ãœy¯‚,2¼²fâ_¦«¢†€k +¢Ièæ+(sÝ刧úw×ÊYg(´kÁ­ÚÕf8¢åM{kžA(ð˜âxŽ Ú¢(ö·ól>TŒÿ à€~SΦƬu[ç`ãôáNFCÕz åû¦Ì~Ê^¶†ÌMž ‘ªkƒr&š ÕJÅ–zn=rV°ÚÃx¡¶¬1œëb`ž[ÅVGÔ5• N£{E§*Ðb^Þb2뱯úRm]`˜Ž_Qã~–a˜tX±¾v8 gÇ´Ý÷ü¶Â°cbÀæ•å“Ìæ´É‹VöêN`ÎëĽLNÒçƒ-f÷â¯:ïÖm,ue¤1›ÿê™+’õ}Δ&ÓVNsC¦ÁˆÂÓ®›¹2ó«‹úp¯zÔõU¸ôŸ‹MNÞœŠizΠN±š;„C§Þ5 +Ès» +‰#Næ¾ÕÃÞ±¬ö%Êa1Ö(Œå„™'CŠÐ§0Ÿf1bºƒáh…"^•žÓ—s̾F +¹06 ë¥s³ « (ÖXNhós=V—ØõJ´•†'¶ªT:v1ü¯0e¡Ãê‡cÎ+÷˜bT²k´À@9S˜r“g¸£æ¨£ž'yMó@OÕ90Ï Ž/ î`°ž½„r}S¦cþÖa…–æÌß/q2Ù•í¾?Ë0/¹bP—µ^ ãfMòx;6)û»O1ôwê¶´ÀÎËœ)»Éì_^©—M?ò +ò®QγåÖ¦•î–ù»¯ð EX²û¢gÞsç®(j¼ŽÏ®Í1ìáßdÀW—5vOb}5º‘ +)†ñ¦®átL»}çù*ÃFÓI%ÉÛN‘oªT ,M™äçëFkì~^PuöTóìŒË$<äqhÇkû{Å̹¦%}5Os ˜ëXÍÝÈ<ëN` Vt¿à±J¿Ñe™áý·ÝÌCÒ'ó͸O$Ôcq£Â@Ëôq8ù© ­ð~–á{ðÖ»: ðF«¹à[›"Øb˜Gºû .SÎæ‡#†÷÷Q†a‹“ÿw±Ëøk—CŠBRµ¥cê{ Ö“õ|š²Úè´²_Žê™z¦Á¸7 œ£ðµ}ŒF;vbÞñ¨.±Ùë ÛéÏo2`õ:ÎÃ_J±0b½I¡}ýð]>Îúh×<ý÷ä/Õ8öFåÉÓ,® û®MZXãôд̘µ`›Ñ s™ÍZ:­‚ aÌfL壴/LîgXˆªÊ2×fÔˆtÍ'Åz’QT¥µÙefëlþ[Ðî]ßs9ß? æè"E>@Y+—pvDR¼Ìì{]gKuï¡ÍSíAÊùÑ–Ö²Bý +E`÷ejí¨rCõ|‹²w$ŒoÙômäÔÙSeÎocÊÚ<ËÉìxmõ8ÖÍïV±;Ë0ÐÆ3û^wc°†¯ó ÖÉz·í0}Ž ß¾lú_ż-›:û çj2Ì:+Úu<Îb´xžÂS69¥Ù¾ÆÃЉ)çF‡VžWè÷è®ShUYǗ/èÊ„ÆÜbàŒÑ`ÙV%·.Ph€Ïy’õŸ—§=ífM0oçiãsèŒ)²ÝMãõט§°OÁÝbyËi\fÔ‚=æôY\ÚŒZˆFSØO—bú]%aj3zˆ¶(Fº$ ŒfA³ú0ü.£p™ÍXwm&Ròì½Êšl2=Bá *[Ä·Ä€žœcòÝÔ.´èš=˨ñG3¥Ž*wÇ—Ãb?ãêž*70Ïì=p M…ÿÅáÐéïAÆgþ·c8Ũ¢02¿w'4V~á0GßðKŒ&G˜òqûÙΓ>Ïö*„»/ì‹-Êž²7ý¥š:±Í`?[!úø„ú²ÈðžÝ¤}ÓÞ[¢‚‡Œæ…¹HÙ'oR<›ö:”ψx‰“7æe]³}fL:ºAÃ&…göXLH·‰/õ<Õê[¡ìãËÌo”²ŠÔ‘)Ç4`‡aèÄ”¨2WجÜÅÆçþY£œùUæ“UwQŒq‰‚‡œÜ§q-véÏCV檽—+bÍ:n}rñ˜b€ØÏ¨ìµÂàS¿>:oá"›OY)æ}¡Å¨"UçDÌSOp¯ÒsP%¶Í@IŠò0-Ñ +;æåÒ!ëQHZôgX¿Èz„âE0w™¢Jkô…xm0û— ŠàúCºò~Õ kÞKdìÝɲQ-Þ—K)eM¹³Úé0 !—0µŽš«Ž*?2Ï^¡Ð5½¦: +¡Í@aQ„^]gO•˜gŠ’°J9{¶_“RšÀ¨À÷ªÿIÞA;oÝ cIe“óv÷¨ Å_wž[ooô<égÖëí32ؽm›œü½ç:нÓYöZô%c½B9·=…‡(ç¯LBD e¯ÊMW(Žœ3ŒÿÜãyŠ\³‡éFŽF•žKl>./vDÞd¶õ´Q=—3ÌË­‚†¡Sn Ê ¦ ß- +ð]U²°I‘µÞ¤x¶Ÿ¥ÿ³©qÆsšúûœžèà6Ã_öñÁŠÂü’kBk{ûÝð"ãçoLቓ0zôÆ–®Pæ`ZÖ¯0}ñý›åÅrR–®P¢ï]`ò=ãiÁ.ýžÄ˯÷¤Æ0GZ}wY6ØÌÆ>H¿ qBLʶ¿@Qb}Þº3t.0>q܈²öUDV´)ÞýSô\Ÿ·: w©w“„µ‹”½Ò©hÎìÕ‰$Å¡gÊIf…42,ÔÍQÎi—ašµË<Óã³çe¨žéÄcÚ iëÔm­˜gîÚÛ;¨i:qhúÐK(Ó7e: eF¦Lw‚cÑh-ÿ®@çÉІ@;qôa`~·FΗ(Õ–ÿ¶‡ëPøIîc‹‡Xü3²E`È›WùwqŽB/_c|r·-3æ—6ª1ÏFNù"¼h’ã‰AtÛkŒ§y‹#ã˜Óëšv†u +ï|Éü­eÀÁôÛâ +ëùl*M½“LXž„‹”ýg, +6L~ÒãÞË|_ûqá"“¯‚Þtø$Q¶ø €Ýžß¾ð>€| à¿O¨kÀ¾ à1÷ÇÔù"€×Sêš&hø¤ßÛ<¿Ž`ž~à×5ô¡ ™ÏÝp‡Sæ+ÈZþÀ¿ÖÐ,x ÀCžß¾ð3ÈÜ| à3$¯y²ð°ù×…o c|õqÒÿï&”¹ +YóO!ûà ×!ýta€;Í¿÷šzïp{LÝxùÇÙ2ïÚù»nð‡þÑ!ÿ¾×ðdï¼…ü²Ë$`Àw#ß:ZøBßðÊßVÕ¹’0áóÏÀ¯'¸ð „'¼ àŸjì×D Œ…á ˆRu_JÙëaù+ó÷m¡þ.¤®c¦8a}Ú¡QÈž‚0ÒÛbÊ}Q>C |Y¥0N9ã‚Ï»!ëq¯ù7®½O Dé]S›€H’öÏ×ð+Èw@Æ|wJïAöO“¸àG¦Ý"´\‡ÌeadÂÆ!õ IDATô‚ìŸ{ J̃ÕAAÀŸ•hÇ…+}|?€(PVÿ"xýÀ/ +Ö¢¼ûàªó÷Ýð¯Ù§†¨ÏJ¢@úÎØ”L@ W™ÄXð€_Æô¯n°€ès¸2»1€ÄÐóÈ1¼Üoþÿ#m°Jâ§uH2ÄìC@hÑ«Açgæï÷Ío–Îß +ÊÁNÈ<¡ãÓb _€¬ÕSˆç_Aúþ3]óñÁEȹ½r¦?ÅͧÐV-†ö!óÇ·¿‚ÐÛ*yÄ$ ¡ ߇Èpw@ä¦mæÿÏøË õmša/Ä(xo†²?‡(Ùu8Àª€6„žï†ìû{‘¬³|À@h|>gÀÍmˆ‘ÛòÍm>È| á{7 ôÿ3ÈùøÓ£ôÇÁ<‚õ¼2;–Ï|„éC)(k°Ð‚XU~€lV•,pÂ_Çäã:`2WAæª)åÐÂ'…ÿgþ¹á¶ã ™ÀQR¾†Ž~ŠÉZ] èE¤jøB¨ŽAÖµjFÓ‡>ƒt/BÀ½¨ö\> Y«ŸCÎýŸCÎÆãþ¦¢6vB6+ÈeÛ§ŸÂ?¿; F“GÏãø©©÷-L–ÑX@U°Óa„Þ¾`,¼9¿E=d=Y”×eȸŽÀ õÄ `Ío {øOËuÿ¦EÈyF^=¡½ÖÙð¥ÁÏqó:¦ :M¯C nÓbª +æ ´ÍÒ’÷ð-ô +V «9³çÏ ˆáíÜ^q {^éKˆpZ 3˜Aª2hX‚Â@,Gyâ!Ê釸ö1Ú#€ka« +n@~mœv‹Ö2dï<™ŸÇ4®CöÍû=4m^šȘî‡xN¶AÎGÖ3òë¤ aÿõóˆâláyQC;'! +? Ìô [C;-Ñ1w"ð\[øa‹vž3³l굑8ÚÀ÷•S濫n\Ø|ç, >ÁôÑ™åïê3|. ¸¾ö)¦g}g0ƒÌ`3˜Á þÔapa"ùÂýo í¾UÃê\°w„·AæëDC‡oG ÌAˆüWË»½Jðm@;…ênD#öj„½s}3·xCÀט¼Uy'ÄŠÿ‚{ÎUƒ½*sÄ30é1Ï`3˜Á f0ƒÌ`ß*hÂ0ƒÌ`3˜Á f0ƒÌ`3˜Á & 8éÌ`3˜Á f0ƒÌ`3˜Á f0ƒúaf˜Á f0ƒÌ`3˜Á f0ƒÌà€™`3˜Á f0ƒÌ`3˜Á n=Xšt É%×t›{ °ö7ØvÀö&šf0ƒÌ`3˜Ap+ +’³1OÌÆ\ÌÆ<]Pטx®†zËÂ"ä«^7Ô^ À!H2õ _¼ú>€7Ô>L{ï7ÑÐÌ0ƒÌ`ÍÂäëÈ7Ê›†yÕ~«¡6oE¡ª,ìpâxÀӘξZ8†[O<†Ù˜§fc®Ža6æi:Ç|€W!Ÿbn×PX…|îú¡†ÚÛùÊÕ믯}­~{µ¡>ÁWój‡ÛÒ‹ÔOx·Ö'¿!ß¿ÀÏ«Ý ±:]…|í:Äu+|q2Û ÿŽÿŸ½÷ñêÊòE?o¾B •‹>ÊKù0PuQЇ¹(˜‡^Ì¥ôbú0Cr‰ƒ•Kr‰Cr‰Câ%¹|3$C2ÄF›8˜!iÊ&6ñ¢Ml´Ñ&Ê 6fÐFmtøVРAƒ6e(C)Ÿ÷ÇÚ{Î>û»Ï9ûüü~«ê|`Qß:?öÙkÿX{­µ×Þá³Ùo@:ã Èq—Ð}猉Î? à_ÕïÖ@Êå +€ßUž³îER6Ë!Çd^pÝy4ä*HÞàmWñ÷·«ïÒ義à›û!ÊËO*øVô8 èç΋F?¤¼¢½=Þ‡ÌJ<‚´}­0ÜðcÉù‹ƒV$WAf2ºaüZ à ¤Œ”~ÍsÍs§Pó\èßp¤¢|¢¿2ASªnÖiÀ2Aš¿íp^ªÂ{vz>ûÒ¿pbü>i 7Ôï¹/Y'•¾,Xñì­miÛâĈúÒ9»AHwÌW¿7˜‡ÀX{ +ÀˆÑÈ@ðWæ­[±À^ˆCÍĈ ÓÛa40“•*s +Ö“Yþ"éÿO#.̆ȄuGò:Jƒ3öøeñY÷ÆLT$kž;‡šçrQóÜ9Tm /p2NW=†ôBŒïç*üf?Ćx À}õíß@ pÙŽ÷Ê‚vB<Žiîø¢¨<  Ý9[W$^ƒ¿ñHý¬Q‡1ÈlÐ5õÿtgDÅ€W!‚e^δU:/@ ½c¶ôUÎt;‰~È€3bìk¼ ©ÓûŒØ +qžýKEùëF¼‘#.Y6ÒÞ6*êä ^C0S•*@fêw@Œw[¡x b¼ßƒ¿l|ÊqÍ3ŽØŒÎ9[fš" Ô<×<—šçê0yÄ= #wB"ÍÊÆRõÍ%|ËÄ'‡»v¦k}úŽº6ÒÖøcÉyéG°äaDo-Í.îäK!3¿ïCf,6w0/U`‚u$g!3N» Êà Šv@Êã$”ÓƒF|RÑ-ÈšÑnY+ºÀgÅD+¸÷ ‘'!‚OÓaH™E•Élˆ< à<ªÝ±³H,ù.Å~ ÄQfã ǵ™‚µÿz&uÌznÒ6*ÙYµF"´RÕ‰~Ú Yç¸Õÿ!ò=j6aÚeãH¿„(R|s#$Bª“k:µ"ùªÛob)DtBqjžkžËCÍsõ˜‰óLÉHÞf;&Þ-‚$ßq|{œä{$ç”ôÝ^’¯Dð}†ä‚¿õ¥.7¨²¥´cÍç³$/RÚæ›êš‰óŒî7®²‹Â‡òÔ-Ô ô—óže0ÊxÔG‘&>ëoŠ2hÇÕÿÑb’çÔ·oßî/™÷Qøœäu†q“äêˆw“ÜDsš”>7¢~7)íe5ݲ¥ArÛñ™ú¦Æp‰¼n}ûÝmv‹ÊÓEæ¯û›QØ]0¯£FÚMJÿûÂúæ$¥.Pdöq¶ËÈ$\¦ÔëZJ>gÝ×ßÃý¸`~mž£PÏQf¹<79óê¹æ¹æyºòÜfñçùüz¾UÐ÷71}›™$ùbQeõÅ~Šòø9É7rd E1¢HQBÓ¾¿¢H6t”n¤õŠÇQG9¦IçeŠÂvÔãÙ¥Á^d“E³¯>{)‚ÐÆgÌV¿Yó°Oñiâ&Ée¤? ÒZÁøÎ{”â܉–ˆô! QFÄT¦úþ¤8]<Ò]ëx·hÃ'ŽV’¼š‚¯NáÅØ.£ Fï493”*P²Æwî²<'¨I.ÇW^/ð»£FºMu­AqÚTÛ™Ô2î ³8^] 5¹€ð®öÿäH{$,dÂ!´Ô»« aE/¨ë³ û<„ÔáN³ž¥"cnJw²»õÿ. }_üà¯!a:„‰Ï‡´‘§áÝòÅ3íˆ}ÚsOßÿ…ãú#H8ôAD¯>¬žq…±¯ViÿÏ„ïw ²ÄsÓ뛯@–Ph BêÓgMÔ?CúÚ qm»J¯ìr@ø|ÙnÆS¼V±OÂ÷¾ø>‚¥4³ áì{r¤»D‘+,ú¢C7ËÀbˆl6÷õ8jޤü"û7CÆX½Th¤|Í#3ß…È”²Žz9æ÷,D.Çõ…¾zKý¾gAúoR¨ä—2ïÆSp¢p² ò–úmò¼É'N?Äø7ך^Ré—½ _~1dŽ XWÿD¸®Cv#`.òíY¡·{œ Éø?ás6€¿É™Çª wH7ÿ[vyÀ|ãžãÚNH]–¹z'yâÈèF< ‘Cd‰kýyј®JUÁ:|{Œ}ÐþxiøíNñ_#ØtUË Ù:/ÛöKHû?‚`¼¾¯þÿRå)I¡é…èOAÆs3Ä÷!2£“û{ø`:)Ï.ÌÄz®yÔˆ00ÿ“NRÅLWþQ–öC”@”Ýœåò‡2+¢ÇA;N Pøô¹ÞIÆ?8{¦‚`;‡" |nEqí§Ñ—]ö›‚¾eC÷‹þ²¤o‚Í «v¦N7¥ê¢µí† €(_gkO£š¨¡?@êf¤n!ƒïHDÏ?CÞ‹!JäI¹9R9˜NÊsfb=×<×<û`*ò|©—uÓwßBx¢ÿ½…ê&“‡ ¼è(Ý4'o}àgɈ/!‚OAêÒEêVƒ'DæI¬FŒÞqá݆«Æ:H%,°ÝŠ5×ïAfÊ]羛؈pH¹Þý}Dø¸”‰õÃw bø¥ÞyRwÇ ;AëN÷$Ò;r7•í¼ˆYÛ"ð2[AX°ŽXŽôç,¤Ü\3Êià³ôå$@‘ékükt»`1„¿ÆµÃþkÊt–BêRsv árÚŠ@Ö†ãºlfC<©O!›CÈÝ`øÅÁ,¯´GQé¢T #Úø¿qt~É6 «<Q/Ó*D÷Ê7“˜>ÊsÌ´zjžó¢æ¹» #‡}Ž.Ï‚!ÑÇ “Ï”ô 8:z«u}n†´Lƒ?Í­_@ôÔÃȶÜqD_½³sM’eul„–w žè¤pê9s9•Yð{4ï@Þ5„g»m¼ªž½¤òTÔ[4^R¯@:ÓvˆAªC_ç£ýè¾w!FÃaˆñ‚†; âTX)£w!ÂT˜OC¼M?¨ÿ{!JõHØ- õ¡ÓÌÒ v!ìÜ8 1èºÅø×xÖ³ÔÅ|GÄ¥™9©ÞÍR^&Þ÷|îO2 .MDÿÝèX áßöú˜_ AÚórëúHxWý6׃×<„ÛþAˆpu•q>C8‚Aã¦Îú]«ŒÂ¹tü(S]©j ½_Ÿ…hPþ¾ +iq NŸéŽé¤<רQcfá4DG*koßø ¯A슼¶.D #Côí跴Ë@çäȇ^rpéËvPý}€"dóDDô:è„׫٠+º q›¦](P F›}L][ã‘~§°qpR&ƒξ…ðfp+ 3¢Ôßo!³J.#?Dñ<1òO Ýybè˜ç]æY¾ñ<Â{ +h'Lª*lƒ~Z¬‚ÿ#E N„“9òñÒíAðûˆë¶ñ¯—'¥°CÝë&'À0„Óàx‰rxaçQ¤®VAúÌ,ˆ,8¦þß· ›q¾™MÖaW7Ôÿ:*d>‚åO@¼ÃYÂôçÃm,»®E¡2s¼â4„äw ÒÖŽ Ù€\)/Æ<•Æ5ßGàçœDtÞçE\¯!mÉ É¾¢®u£LìAØ9廲†¦›ò\£Fé‰^´OT†È¯ª'ó~ +Ñ!<É–w©Ó0½]ødœ^Œtê™{s|ªËQä@у`WÄÃã!Ä@ßQdÇ …u ¢„·Œ÷Iœ qX®h#DA~2¸~i yC±Ë†¹Dâİ×;U_BûÒ…ƒv=×aÃ/AŒ˜]FìZG2bÔ¼ Ò]ŽðÌö´GS˜õŸæ4†>„÷\¸©›nTtMhã]—? õs닯 Æõ® y8b–ÍØÆÿaH»Ðζ=v¤Ÿé'Àk‡<Ý8¤>A¸íôAfM·¡}fr Ü;¼»0aÇâ.šÞcá‚ÁOï¹vÆî‚>MÌ…_¤È‹*oæ³÷ 2QGþìUô6ÚûYŸzß\ê ±Rf/!XúðK<ÝD)¹®×pÃÞgb/ºW&¾„pÔPžÓx4\Šd·¡è5ó3Ay¶‘¥žȾG–w»çªQóœ3g½³iSðWŽgW@lˆ"Ç´~ˆ¬2ïßBô6S޽ Ñg³FykñÂ:ð7ýó#ˆ³ÞGÎô ¼lu²íÆÿܓכQÕ Ï¡œ¡8Jò å¼s}Öñ„:#q˜ÉgÍ·(çx“Éçy÷PÎä´Ï”lª|4‹8±`êcpŽõUu­Ÿr†ã0åœê•$‡Ôo0|^ø§”óGw«ÿõ¹ H¾A9o3 +ÇI¾Irƒs>_±òg¾Ÿæljû|ûçK*¿²h1Ãgp^¤”sÚtÞp”{.’ì- ÿ«>ýÃç_yvwßÏB¬²8Cé .ÞŠ87ÖÆmºË~ÛÏiðàLJzœßÛŠxF÷í»$ß#¹Ôº¿˜rn½– ×>v½z—”³ƒßPiêïºðFD^4Î0[ˆ+S®5 L;™eU&i¨i•ópðè"×įåL³Áöñ(ošEÑE#OÌw~sÏŸF<;T_ýù`__Í@&TÁs\=÷Pô³}¯QdRUÖóLlÛ5ÏÓç7-~Ò=ök=ò‹ÑaA‘_—)z‹KŽ-cXw½Îd›2Št:ë÷z_¾ºñ€zÞÄ)ò2Äx x¼ÛÊX!Êúâ€Æe’/³Ýtxƒ¢pM2p\$¹Àñ¬«±­%ù1E©oª|ܦ(6E4Ì¢è£|ÌÆµ‚b ÛJØ{”s½*ã»”F?Îh#»Ÿä&J<Êp‡ÑøL•mÃzO>§Rð´ØJûhË75->^ΘŽ-@£p†Ù…—I.ã¿A–浸wªvô3¬F "v>Ç)ÎÄ&¥~ÞcØLƒ¸üëÙ"Ûô¨J³å¸§H—ý~Åï¶—…ù{-ÆÜ”öç4á’'#ò?“”ª-ŸQÆàJt9À\”Wn QÆëÙî¼%eŒIãv‘-mÔI²åJE2Žç(åY;ùŠl÷U*ÏYëy=Ãòú½ ß›CÑíH‘uûÝV«ªç™Ø¶kž§ÏöäÇyºå×bëÛE8´üÒˆ’c¶“F2~Oçßõ 0p|Æ`Ò4‰PôS•žï å=ä w[Ë!DY^ZHêÃåö:Åu=»”Ry«­ëÏ«4îR Í=C½ApT^š #,Fä¥^4×싉¦Qv#'€#ýuÝî°ýçˆý »lGŒ{.'M™ ~‚n§ÍT Ãè:ã;^53̯`ƒÑÆ?(ʽÆëïîf±³¼q´Ïøîm† ŸÕªü>6ò7I1h]ef¶?_\erÝÚFêpA¼ªôZÖõ…”þc–Çk Èq§”Ó8ENêÌ·Ù^¾#yuÑLRª8ÊÙ”»=$?4îÝd¼·¿â(&ÉsÇA¯¢aJ}_¥ôý¨4l§„IŠ3)O9ÚŠä9V'[|i“Å÷HÁ'€+½ËŒvˆ¿g=eoƑֆÊä=Š®æëèa±Úô|gH=?šýn+ûm”ö…ç(LÊ‘˜çÏPÀ/¬ëT…œa€ÃÊ’öüžct¥58Î1˜Ñ¹ÎtFmôºÁÛ¨º¶‚ñÆ?Õý¸Æ§©Vã¥Z+‡ú¹• ; n2PøÍÐõ‘<Ù³ÿïTV¢g-~†s¤ p™åÎüëû¦a¥Ð'¥Q™ßÔ‘[Ø>Òþã"y²Dø8ýlï/E„ºªôZÖum «ÿ?ÈÀ—~?­ñ¯a##ÌÏ78ó”*Ð=ÃÞb¥fÃŒþ0iÝý# +.ÃÒ.·™ßøw)’i¼ªÈtD’ÙÉ(ž"ž}ÍQîyœPž}ëY‡û»ÚÜ]ŠÞ‘ÖɾÑNߨeeÖóLlÛšçÅ f)£fRAé ú¹8]vÃ3ŸQÏõÐ=CÚÉzžÃè>×G÷äEE[Ívݢϣ\‹äùE+á„çÓÊ(êeØî#£˜f¹™ÑzW™^ÐöØHÆòò©ß´‡ÔóÝ@“O»~·UDÞ}l0PP'(ö0ãTÔq†ÈE¨ß¥8tx°¹þµ©žé£„e¸¾ÑdàQ隆X§ ÔJ£ÖÐΈóô[ßüaLÚ#1ï3¸[Ø>ßdØ€JkšFæ8»#Ò"/™‚å\δF¬òÎ" ]äc¸›B5.Ú j'À€U&+Ø>hL°=ZÈ&—‡(Ùᢗ­w›øµiT¥Õ²®_§È½ƒ(¨,¸ÊlÆ?)õ`æIc„ùùN«T™Ê`QE= öWIòæ¥TÒß[íE‹qŠCh“¢Ý /™ñŧ”qw-eìs-#¥Ÿ¥Y‚G¶"ÐiêaX‰Í¢HºxNx¾('@§”gŸz¶Ãý5&)Ñ]yÛÚZ‹3}{Y@YõlòüE¶2~ÿa㹸¥wËŒçFcžë·žÓåZϦœŒ[&×4ž‹ãeÈúVÔsöÄ“ªàÙ•—/Œg¯Sd®®CsÌ;Ï`Ìfû¾¯÷L]ý F÷—"xn0l‡Ø´q¼›v ™NÇuMT$ɯ¨¶’fœYÍðÄkÑ“Ãi 6/Ã)Þm‘w߯rH}ô&Ea²`ƒ>Êvß_Ýdû& +—)7‡ÒX]ßh2ìÐ×71¨ð8cº,2 ‰Qum=E!3#¢°/"ÝçÕý‹êW4Áe†ÕwMás›î0ñ¤v`vþ‘”ïw+ÙFŸ½ [Ú2ÒÀ]ú ¶$ò5Øõ3W L³°Ê×6J.RœvÏÒ½†ª—"s60hÿ¾¸ÉtŠgƒ2h›ïçUiµŒkýꚇÏjÀçÅ$Ãõ®1Â|<ƒþJÕõ=[–ÙNã4ô +ÛEW(j6¥HjZH·±ÒILRdþJ·‰SVEÒ¬û¼Îž”ü¬µÊ%­Ã"+Ï®Ÿ4N€N)Ï><÷Ñí°¥´·æ«ç^#W"¾eOö”]Ïf}ŽÆ¤óŽçsCV~£Úô +ë9ÓñQ6ÏMã^Üd‰¯£ÀÜ·ˆŒ–÷¶ƒ¼Êz6iÛ `RŒ÷Mt;\Sê6*ò÷Èë-“—g[çõ w³;\òkœéöÝ1#|ô\¨2l©wöQt®qUEé¼:ÊÊw#À!õ¼½€®ªßm‘wŸ‡ˆ) IDAT>VÔƒM¥“ SÚeº=*ï¨w.2z¶¸Ÿ2Síšõ»Jñ˜§»²RTSåã&ÃÓ ç¡-šl2¤®ªxi2ú»¬îRÊ»—îYŽ3|R:{–†?d¥›Fht3õ2,¸óF ¨ôòÌ"jò5Ô—ZÏ™v^ w)ý5ê›ë)m×wM¼ Y›m'CÖÍ!5ªtZƵ!uíŠ\ì$äKc„ùxöUª\3š&| “â–RL2ÚËžW©²©‡bp›Ž… U[l‚ëÛà™¤(Ž/Ò/Ú`œå,‰³IßMìå?·)õækÈ÷QÚ¨)¿Îп¿gQ$£xN3Úû~N€N)ÏiêÙÜHõªzg„aù}éäéʸdö“«ê[æH‹î¶S&ÏæDN+&CÆsqÑhöþ!QíÊÜÓc¼bžÍ±q‚Ѫ9 õÐk}/*ÚŒê½\1Ï&ÙËi|‘Õ<“—<<›õs<Å{‹)ýÎ…9šð®kÏUŠüó•û¶ó+Ê¡o’^æ{“Ò^ "u/²˜(8=áš½ªiȳÌâÞmïD€.¼ é õÿ°b@¥ö»½£WÏ<¤ÍÜjJC‹ + >Ïð)7U^Ìg†ü1ëC®Ùßq&¯õý4"]mðoaû‘j.L°ØpLSøµ +L·è3ƒ·ó¤—w]-˜Î@7•‚4}­L'À2J[n±×ÝûÙÁ’®ÈŸÑ0q3R¦qÒòà5ŽFé ©kMF‡ƒUSáÑa>ž}•ªüEm®æ"_¹Õöò(Uqµaëj†7°uñ>Ävg¯©TÏaô¾Ù–'ª)ŽLE2n¦Ï$—¬qŠÉÊàÆ;=| Ì•Ö;>Ф‹ç4Êó2º7çõù¾½A)Ù¾kê³(Ïiëù8ű5Àøý+âŒBM®™FMJ»e´s«¨zvñl; £Æ“‡7¾i:ú¢CÏœª˜ç+m×$‡íÈx>á›fÄÝÇϸôã2y6i”Õ¢“—¬/¢À¨Á°26dÜóñ^d´ÔTÏô1Ü \8Ïâ¦îIJŠ2É4 'Y\ˆlVJk˜›JuZçCN€7=Xœc´LRú|eH˜JpÜÌmÀúzv]4ªÒh׆Ե&;ï0×åkŒ0;¿ ŸRe‡êu=l‹ôqdÚ²÷&ƒzÛÄö5–®4ò(’yÈå>Nq`;ÊããÞ;lÇ8eÜ-s[‘ô)+Ÿ½.’Â(GÞŸ¤ßFmfä‰oÔTVå9.ÚÃg™Q\´ßeú‡×§Už³ÖsÔ¦}&â C{)V|"NЍgϽ Ë—ã}ÈJ'i1£ìýYt¹˜³¯ïUÌ3®—lo÷'˜Ü¶Mù5ÎvãÇ'¶t€gM£L‹Ì~t±iwųMq~ºžÏÒË${#.Òô;© Gé=”|øu+ JŸÌ;N®dPÇ>ÎÍ¡„²è +€îxözÈõñÝ Â³F#2:JQR²dv”¢øÐí Ó!þ¯00ò]©Ÿ"ˆª0ì†ÀàsoÜœg`õSì› Ê^{Ðz:ú1³gE †»(!k1M'Ÿ"ióì«<ûD¥Ä§ &ËEߨµ´Ês–zî§âÖÛ³ëQñÈOÞzŽãÙtt´Ø®w™‘QûX™dNDí{_•('v™<ÛÎ(SWZÌpCT4«Ý§M}ÖŒh0<Üf´n[&Ϛ̽ |p›5á»\×F’#3 Ïft¥¯^Íã“–oöq.Úò%iÂkH=gÛ±E“î»QQ,®<¡´›|Þm‘oŸÆe¯‰^@il2Ü\ÞÜ!æw 3ÚŠ€9ÊÀÆò©Êgš5siÉžzžÁÑZhé°èQE_¨rÜÄ qöStÝé¶×')ƒŽk Î8ýŽ‘ÈB¶R_ÕrŠ*ÉtÎdÙ¡¹Êjˆ§Ù°èo›ä +ó:Oé IiÙZLÒ=Ë¢ °4ޱOt}”·(Ui´¬ëwUºvߪ¶a­1Âìüú(U= ;XšŽglÃ)i­µ9{æ2.zVN]ß³)U6õ1»Zì>Ü¥´Ëwè¿nߦ,ŠdË3ïÇ…‘šˆŠð0ÉvúúDNeáyÔ#¿q._ž}òŸVyÎÂóg~'cÒx3æ=£ù)³ž‡¬´1cìñÌgi^ÃzÈUF =>Çñ^&Ïv'(NÍ÷ÖK'é¯'ŽXù=J‘Ïö¬qÜ^^UôçÕôÇ$çHÓ;{}–¥åÙw“–g€þ{ÅéH¾ý¹é‘0ìMZVí()¢"i}å.“CêÙÑ ßÑï¶ŠÈ÷Ÿ!‹Ôß Öõo<à€ŠþwL:eb€fXà_"ž;«þ®*1/[”Ù˜ú{ÀIï«ÿà¯ü¹¢ÿàø•zŽn©tV¸á ¾ƒðú €yÖ·¿ð€_ÆM‹Œß÷ü±¤ït_¿ŸèÀ÷WCê÷1õÿ~›MÃ%ä-q³Dý½â¸÷[|vRãÿèñܘú»$î¡Ð @ã$D©Ý1Ø}”µ+Îy¢ìý Òp+“{!Â%ÉÀʃùÆï;‘OùaŠw m" Ìh~äSåÀ6þ÷øÏwMx6ò)ÁHXdüÕ䪓ç íë¯=ò± +aGÑNÿàñô#¿¡ô.€ŸGÜÓýïú»ÃáD1¶qÒú €Íž½6|qî€ he:']x‘OEÂW©2Ûì-¸Ëõ‘zÿÇ;6 ¬€|ñÜiˆQD;ù´R¥ÇŠUþ9æÛ€8”öCÚU¨´Ç òæŽú} ¢8Ü‚ôýgŒwÞð3¯¨{OAÊæ¢ÅÃÛ65Ò—æBúã|}<ŠçÇÕûÛ!Ê}’#ÙV$“äŽÆ×Hîçw|ó¾ïw|pA=')’Y”gÀ_~ 2æçyßz²HϳO=_€´óÙ ÏÅÕQ7ÕsÏ/©ôõØgB÷!ãèÉÙüd¬Ù¬þŸ…ö>³ÀïÒ)“ç_x¢¸ô†]þ.! ßC²_Bd‘ ™˜¤ã–ɳÆKþgKðëÚ/|¢ÞO»ˆžÌ´‘†g3Ï÷áÖ{lÜ‚_¾soÌã;ú[>0'º’lºˆMu ÒVO@ÆÉPŒ>·Ò!ý<ÎIÕuˆ3Äô€ârL5Œ©¿¾ƒdZ¼„`¸‡À:[ýN. ˆb·×°" X iĦ‡õĈ)kÖß„i߈|*¯£Ür¢„g騦ðIj'ýp6D…ÔÝcê÷?¥ønãv cD+û¦¿ÉB܆6H|`>®žS<ëÂGþWÌý— |èãKH=ÝB´Cë[u_·ý¢‡¿…kÐ{Å:4¥Ê”cq¼›÷\Š¡Æ õ”2bÎ~ÎÐ ·Ã0RHdÁSÖµú= iw_ÃOáÚ°àiˆà’JçDf˜ÆüdÆQQtzo•ÊïÓ,s!3\!J~̾p/æ{6>AòìHœ¼ù2nŽyæü[fûJêßY”gý¤ˆ²ûÞ¢Þ÷Á¥äG¤Sž³Ôó…xGÂsïÆÜûgˆìˆsŠ>@Ñ•„¬õìÃów¾´ÒŸL\‚8}9­¶ayzO]û™Geò ˆŽó%DZ±%®AÊá+÷müÒO¶AÆÄ¹±ùˆJÓg‚«lžqÒ­Èv×7Æ͸]½»(â> º`\ß°‘†gs óL_GÎÅÉ\@ärN Ù‰ðу6ÆŒßI“uƒêïˆNº Ò‡v¨|}™¹÷uÐi,…è•Û 6Ñ:ˆ „¿Ì> ‰ï|fbËœY® +vÈ|‘èA8lëˆÀÒFØ[%pD±„Î]ÝVˆxRºÒaÖ@³®NC:d”ÒÐØ„ò½cK Bä?fx× ;Lj/oA=­ôëæÇ uu~ƒ`^ã;Ž ½“ëdà¾QÎg××À?ŒoÐø½ éäFžpæÃ%$?"¬„} à?y¤} Á7hgÅ«ð¬È¤(܃_ˆaZø*U÷Ì FÍÖÒôsqË[Ìô÷L* ŠƒùÜcp;Ò(U+6þ/@¸,JÔ{÷ôc½Tá +Dîí‘{=¿¥ûÁ¿@"ç>¾ 26é¾ÿâ¦"™Æ!üHÙDµ½Ãh_FdC;ÛŸtÜ{K}[¦£(I‘Ì¢<¢')ôqÊóˆ<ÓÕî!¾™3~§á9M=ë¥_k"î›QxÑFÖTSϾ<àÿ°Â÷,HMš¥Â#H›y áüî…Ÿñ”Ï3 åŸV_‰ÃŸ Qƒ¾‘ƒ6ªàú~ÒomY¼ÑQ¨?@ôÓp÷ç ,gÓÙ›&’w'¤/G¥ñŽÛï åç°Û§ª¹40IWT·BÊý'~ô4¤îvAœ'!»$]t>dL^qRnƒ´ƒY>…8-}‡ ¢3•‘væ3 ¶!è!ëÿ7Ä9°2˜g D¸o† Û!i ÒPÀ¨±C†Þ‡ °U:fL£ò^äSñð™I+Y£<ÌA )ÇVúíçŸD² ãÏ.Eåûd pѧ“ÞKHoüaA죌ö@”¼g½m| ¿}²b A=Ç­qËŠ?@Wß(‹¢ð*Êqú*U¾JÞϽ¬ÃÄïáçIÿÎó¹4J•=KyÙ@ÚòY†ÿ\ȇo(öþqdÒ·ôò†åœ\I3ÖYI@"utÄÔ“±ùÄiïHŸÜéûK cÒi¤ Ò)’YyÞQ6í[ˆwÆ}£îÇ9F^B´ÓËF<ÿi£¯Bô™åêhÜû´ØÐFÖv„ëùKH=ÿ!E~ªàñ²¨ý‘L½RcDø´ñªxî&TÉóþ?Ⱥí½Ýëd?¯8ü"ël½þ +DN¤]š†g’ù7|çìåi Æóv$wÿ1®ßG»3uÒE2Ûõg£ê%I‹ Fþ×*χÔU‚ño¾ÊŸÖ…g#(«;Ýà‚ˆ¾ˆSç]H›z~ãì`cþ)¹åX‹`ÀzSß0¨þn„¬Ù(*ôµáÍXŽ ¨¸~È`¥L BŒ®%FzCåï€gÑî=¿ihI¦ ˜”2 ¡n@š!Ix&-ù(Êø_ˆ ß÷Õw]F~œpÖÆ¿îïYŒIžÜg!ƒfž½¾„ ˜e:Ą̂²ö­ø)¤ì}7ŽÉ‹½c˜éŠ$ ŠÀˆ‚q¢t¤?/ lä/8¾2þ׸†lΜ¥en3ÚǨ4NÔ4Š¤Æ¯a„ü½¢ü#ƒÞBXœ†èþ¾N<ix6Dz´úÌ7þ²YéÝèÒ9,~¡h©Êˤsäiسôq›†þÒ_tTß,ˆ,Þƒ ªNSÒ^?½‡ÈNÈø9O¥{ þÆ¢Â>èj}B¼~Ÿ2ÝÂ!zó¼ é$¾ +»™·Ç½^ÓkŒ|@°‘R^ì@x@Ö!î=åï ë|]˜ i@ÿ ²ƒôFÈ n+•_C „J¼BLeeÞf™'…½ ©+—¢üâg8Š2þðÌù»H:W†ñ¯ÓuõÕ„ߤý$C¹3ÿ.”¹SÿfˆÁøLÒƒ9qrêH˜‰Š¤Æ\È žåƒ(KW鈜;p+}cÖÿæŒI?Âr'ni ÑCœzóª'‘ì|›‘7 ¬H–]W6Ò(’y”çüwÈLÙBÄÓ´©Ÿ)ÒÊó d›ÈÈÊóL¬çNñlÏþïA°‹üˆþñ?Ò˜j<Nñü=¤ûâ;ˆõòoâ†gs\Ë:¡ñ'øEðÄ!‹Ño¶’'¦>û D7Y±mŸA8c ÁƇì 6WÑãH[åÞ!2}?ÒOhDî°Ò9.!¼†=M¥ïDpÄ ì-ȬϺ¨Ï!FÉ'êÿ­*/>ëvm¼‰`‹KÏÍ«Èç™DAÚnüoïBŒ³N·&&]7 ×nÜUìòŸsF,n3®© s@HrüÒ¦Ž Ü‡’Ö£iüíÇä¤AÑÆ¿)üHç}ä7þO Ý®ÊS 2n?Ê‹8€`ü²0IÛq8íãê "{½((wÔûwЮH<‡ ŠÍ1îÍUïÏFºÍ5o ,Ûã8ÓÅ!œF‘,ByþÙ×…kT©<Ïôzîo x¢#ÌE ¿w@tã8ÐTâ¹(L%žßGö M¤5†5ŠŸ{ º£ÞxÚLûÄîúÅ-1yÎ21óähj}|½ÞÇg¢Ã˜?ëh;í8 ™è=ˆ ¬3äê;æÑ§QüÆÌ±°²ÅÃæĈÕk OB„oèè ¯ååbüÝÓ§7Í;÷¦?IØ­ò w | ÂÓ[™Ú²8«"™uŸ™n@ͳ?:ÁóV„u,½ävˆ ÐáÆïø¯1éL%ž‹ÂT⹨ý"Òð|Ëø]„¿¢W< ?ÛîÄÎÙ‹|ËÊß¾zYÜ)¿C>ÇlV½g Â'Ö¼€;^U×v C<Q„@Œù¤Ð# ØUñ dfòmH'K +WÔ8™Ý<«ò³éŽÊj¨ØÑ“Cò¿ ÅÔwS¥÷é'5®@öëLÀ2HGÐaÿ? Xø D?Qø—@˜ó¤lWï?™ußó¬ï!¶¢ ïGü’ »²ßÀ3Ösè†ò'ˆ3ã)dëô}h¯hsýõ ˆpY„èãÐ@ŒÌêà!¤Sd=µLüˆ #Rvݰ4¡(¬³þOND‡3ùÿ H¹j#ÿIõ¿OXÚ5H;ÚïñlÆ?޸gtØbZ<€ŠhkfÈõCø;YŠÀ#ÈÀ¨™YPÄ“´3~ÏÃÐT@æB¢Ã¢úTR4A…`5âIßN£TÙòqÜkYí²ûå/¥‚Pi žs«(ž»5Ïñ(‹çñv ‚ãÆ‘C7,Ò¸öóÄAÆØ·Õÿ›-ã»ç(,@°Av‘Fw7ó\Òðü=Â{½¬ƒ¿ÀœX51±ÍC&‡裷ü?öx ¢/j]pÄvÚ ÿÓÍë뾓u¿G°o×»Ûk¿Ê÷Y¤,íØš¯BÆÖ—îZ@ôŒ¦ãúd;"5L¥\wf#º† dñƶÒ®@*þ}¸žGþ.GÞô& >FúD(®QÿëYþGpó5iDKÞû´íkIžC0ó©ýùîY°kÃÆì¸÷UiŽó©§”å3¨n7ñ*`*Î_£˜c/]ÆÿN+ù«Ðîƒ>GõDhùæ³,ã¿á ËÒ:Nâp á~U5Leì4*È~@0`Ùª$DõÆ?PŒah®i·CäQt;¾`镆=¾ßø]•a¥ÌüI=µŸMžþó5d?‚¨cZír´aæ)Ééa+’Qõü ¤µŒ8|:zvîÄmŽjÖs’"éËs·£æ9EòÜ 1 6#}¸ô~¸’#ó!Ë]Ë÷º¹žAäÑȤâÞ‚¾×Í<—…4<âtÙª~¯ƒ_d¥­?šß{ÉÆóÛæ76!ìØš`o§_zäå)„'Ç’Æ5zß®ýqr;‚=â.(º³ô¦ì¦Ãz6¤í®Sé̇è ‘­í ÂM±Ué›$5½IÁ°qmD]ë7®ä+$ïª{$?#¹Úz¦ljÜ@ò\%9d=·IÝ{ǸÖT×6¥üfÁ·‰Û*?æ³sH~@ò"ÉÉ£$_&9j½Û"¹´â²ËB¬|¯Hù~ÓQne •2_ †ëô½”ï»h5Éq#Í ’çINzò0Ni×»)mFã‹ yée¸\f{ÎJV¾{#žkXå‘„3$”Ç,´ÒÊÏË9ÒUi´2¾ßÃv™‡ÏØ.‹|Ic$¿×tÞˆyî¦ñ\Ó¸Þ4®:Þ6î·÷‡¬ò0ËÑlƒ¯ÅäÍ”/zð|Ñx~w³Ëèî —)cFžv»‰nóYÂ{½Ö{Ïz|ëSãùQÏç®æäχž·x_ñÜõœ¼ñå¹[©›xî#¹…ä‡$«´?£è¡Eê’à¹A‘/.]ÑËbÒ7å‡K‡íÏyê„ý8JèÖzî4eáySÊw$Ñ W™ ÷[yÖ˜¤_¿ßm¼sÞãù¸4†(2è3Êž¤£N(ž‡I¾®®%­qõÖ¢è;6Åé滹ÛП¾Wˆ®ö~,±®ÿ#Ä{±âmß ñî_†„4,,ÔKÆBo@f)ŽAªÓ›x…g®Óc9Ó³gþñ.‡»=€ô=Ž»üwþ3dלÁJ»IHY3ÿvX±-'4¡=œ1 +{!ùum$XÌ}; }–¹JèÓx÷;ydèIãw\Hº¹[Ïqèð!D·<iŸOCÆ¥ÍðÜÓ.x6ç·€êy^iw{­_^ƒÈÉ“*Oö¦›÷™jF¸¸¾Ñ õ‡Ó}h"Í>_.ÔýÙç··$=~ÂÑYŽÝ‹ƒNod¬è‹y¶ὃ²êe:Òn.äd»¿„ØiÿáSyž„È¥UêÿÇü9€Ÿ#èwyö†ƒDÄÙT]´©á h*ÏÂ+Æ5=û7Ö ¹–2k4axK.R¼»¯¨û<}O¨ö_6ÒŸ ¹É^#íí1=ªªkÃ)ós^½wˆä9†±Z}c’ÁŒÝmõÞ +†g¼¨žÉ:S×)2=¦L7“Üd5h¥È“Y§YÞuÑñ˜¼MPÚ͇”™ÅeLnÏ￞"eÎü›dzM?Žyn!ã# n3}DN´ÂÊ×¾œéªtZ9Óég» 1q‘ùg5Fr¤aÎ0L2z†ÁŽ(Òuß4®:Þ6î·÷‡¬tõu³ŸŸ‹ÉÿÇÆs¾3 «­o®ô|¯[Èœáõ|ÇŽ¨hÆA £7áZþÒËp[ù4¿®´È|“;ڔФËÀU~¾ïºÊ65™ÿè™›› ´6z³¬=^H‰¡D­ t™¢ï¦xZ²1·­Âêe`§Qšõì÷”Nob„bÀ˜ê*e=¹785M¦q{—þuÒt”EhyæÇæeœùgPÍ6f¦}“Ù0<@ùìaz©ÉrPq“ }”þr™íh±;fý5Ù†¢¯ã3Š Ï‘GsO4ŽÌ8Ò8ž3¬†áÇ,^ÁX̰Q_–ah8i££|)ÏÙ(2gàÒÊ@[‘Œs ÚÊsÒ W²e8‡ùÉ4<÷Ó=r†ñk¼£¨‡¢¬Û +“Œw¼Vɳ‹šŽü¾Çh§ïZ†ؤŒ¡iúc•°ÞË»oÚMJ]fy·ÇÈG›A—A‹î=âhÄx7ÿ ÃSm0®‘Ò9Ëô–E:œ÷sãš6Xn¦H§—¹›a/u‹Á@6@QÐ?P×m©ôtŠlôçžï5åQZžù± צç{iÚLN3¤>XµñŠRb+kšß‹Žë¤ûw<ø©’0<¨Þ¤¿pßM m2ùo˜WÓ˜Êë¤0ÉĹž|”Â<†¡Ù~GÏ÷[ŽûC1é‘å†} +r#)ßw‘ÞLÌäaœ¢¼±qìÃõôA†4’I³|Ì "Étq<ØuÜŒy¾EÒ—gPÆÓ!fb”âM’ƒ‹O®ðò›”H¶¸÷«æÙ${œ½I¿%2 ¶—Ûyú;Áªäy5ÃNƬ†³) Ç)NÍï2¶//´ûO'ë9 ±QQYÝTÏàôéÏvxÿQë¾éÐ6ÃM‹_;Ýaã~ËqÈÊ»ë{ ÷s;ò±ˆ»s –h§%mWf}ß.ƒ,hP°/hc6=¸æY/Ñ)ÒÕ”Ú JÓˆ\³n¤(øvA?Å#hb’Ù\7ҨşϮÑ͈2,-¼ØK8®³¸Ù“\N€´žbZœ´.°Æ¿¦ÅŒ_Ÿ®1Îø™ŸNQƒíž}Ÿ6Õ\h˜ß~Êàs•ÅÎ +û`Ä3­<†¡Æ¨ãùaã~Ëq(&ï͘ü¡T™iL2ß^®qÄÄ$óN† Šqfë—¶"ç^Êv¥÷PÆï‚2QqÛJ/î {æ1«"™†gMæÉI6ôîÒ2˜éyO•M+âÒo–¹“`]×këûÖn²ýQ}YÒÒ<Æí%Gý*<”F?$û‚¹1“6Tt#g¶0—N‘λV][f\K£œÙG nQee+‹Ù®ÌN° Êê"²*½/BÜ;MVƒVB>l÷¤—Y?¶ M¨[¯ñ^Ü2œNÿfìrÕ¸ÈðlFê£ÿÛ̾œ"Šì¥:igG#øn1P€[çy Û<ÍK—ÙnXiŒx¦•×0$‹uTaÚQ-fkóv¨o²ör—<á¾qФ«¬íº¾K<¾ÕCÏGeWÇsvRæU$Óð¬i€íë]³à&ý60î4ÏG­ç÷1½¢û"ÛËqën;ÉsK;]Ë lØã{§ë9+-dØÉ9Aÿ¨Ànày€S»?ƒí}ôE‘ß2èf”Êe¶÷W3:â¶ã¾­k™÷LÛéCÅ›ݕǩnÒˆJ/˲í”Ìr`W‘ë¢öübÐèZêZžµÌUÒó „è)‚ùqÍ7­Å ãù˜çìjœÅ­Ïí627§#“Ã󚬭˜<€í¨ ·MY¦Ã*jÃ’4ÆÿBJHñê÷BJt̛̿Ù&{&•™W92Ë"ªf¡a+¯iÂL}èœJ·U`še‘ÆHAéå5 'Tf”Õ°qß,Ó^Š1ìZ£Y¥aø¼õíÏc¾EQg.˜{öøÒR†3ç2¤a“©H&­aíg´ƒã2ƒÓƒ†)Ž®aÊøqœî³š' ÑËöhŠ"É4<›ÔG‘¹Q‘/.Lªïù:|:ͳ9™T4ÎG|³Ó<E (†”-µ#Ýì«S™çÑb“ô‹Äì6ž§r¶#ð&éÞ°³jœcûX^äžM•fÚ¨0˜èz'û]E®‹CFë¶‘q›Ý;£mï"}‘1´Ò¸¾Ö#-»¡ÑÊlïüw™Í»4•Èö(»ËD+âû`ûæ-V7SžÅ °ÉxÞe<¥1þ{(Qúùq†€"wýuíˆü9Ó/³XI1¨t¾^¡ E蛞m¹Éâ!šFò­¢e¥†Q#¦[”axUåËToSzÇéí”ah;ÓîzŽéf#ÍÅ ã,¦ÍÛŠäxB¾”¾ìò…SŒ_®ÑK‘{&ŠR$Óòì¢eÙþ)¥í_¦ŒK)}Go€œFvvÏQÑ`EÁ;»ç2h¥ºêªòÜC1žlù=w»ç©ÖŸA·ó½ÛPôDÖQ³ì{£' ²8ºŠþ’pà;\ð€GÞ°À,§¼à®:€õöXà€·ì‚ä½À%ƒ>ð×)Òm©÷à€¿²î÷¸`¾qí +€þ5Åw¦"zœ°Ü¸vÀÓ~°žmBê¤lŒøŽëox×øÿ€'Qmõ8à)õÿ}HYý6âù×!mžð+ã^?€“–¨ÿ¯X່´| éQðMÌý4p ÀcƵ1¿¾2cÀl;üCAùÒxÀ'Æÿ÷¬BñòlÀ ê÷'nœ~QxÀsê÷»þWAéöAäããêÿû¶"Ü–M4 cÏۺϊӶøCÄý^G¬3®Õξù”qm€¿ñ|á~“ß|@䵫Búã?§øVVBäÛ\#ýÍ~óN?¤¾_2ÞóÁiˆlŒjG€ÔñaGüEŠï$! Ïe¢xÖ}kVß´qÀOïušçª1•y€è÷ cÎOÞ›Êã9s–+Ëšÿ^Æ{y³„'ÑJ¶/‹™ ÿQõüZ•ÿÏ™-’À¦×­eÿšV3|th·â"ËÛãe&† ÙæzœÉ×±šqHê»Øî„ò ·ÍJ.Eòs¾‹¢Mlw•¥HÖ<×<×<§£´²v:ð<ê]ŵIëË,Ïñ°íz:ÙnwIKÕ7&S¾§—L”\•PÒM£2N±ÝãÑOYÓbv”qÊZÍgYlgY@™9ü˜a¥êºª»c¬°žË²oùþ¨q½ÁöÝ?²»Î5¯š\' L2˜ej²´Ô÷†Ø~äÊ8óÓS$Ùà¸6ŒÔå©×ÛÆ–h×úü×Jæµ—Á®«&.Ò?ŽeÝànfëgöŽÃº\«ÜÔt@Ñ2†7)]lÜ+›–1pF´ŒëUx³g¢RµíΟ›Œ—CoÐwÝzvbk¼Y"¿š\Šäm–{n?Ý»r—©HÖ<×<×<×™áÓwénüý¥Å5Ëu“¢d}H™ñö¤7(³„£tïý9E¡³;…ÞP7ªIfÛ¬ÁÞýß —´•ª*;g7S?ÝgWŸbÐqÊÆMŠ‘h •»,ȵ ®vTõ׿`»ñŸ'ÚÄt”-hMz‘îpøÝ,oÙLƒ2hÙ2ä\‰ßL¢!#Í|¿i|¿ê0¶™¨TõÓ­P¢[ùè¥Ĉ«ÿ6(rÄåÛ±hˆàû<Å™_TÙP"DlçRŠdÍsÍsÍsÍótâŠ/{鬯]Šm6”ÿ=p4"í«Œ?æ³HÒH3)¨ÇÔO+Êc©äûà0ÊûqF¯û_A™©;Ãb×¾Þ¤úF{ †6’n3ÝŽÿ&ÙáÒºQî¶®qÄÙt¢s6j‘¸Èâww/Š¢œKkŸ³8ã_ÓÇìÌ1&tÕ6¡òS¤Q¾’îÁ{„Ö2òÒìÀ÷›Æ÷:ðýÎ<¥ªÁö±ƒ*o³}'{WD•ÝÖ;=ªü\KnZ¬N±²ùŽR$¯«{Y³ý§ÑqºÏM¯R‘¬y®y®y®yžN„ìò}Dýý>æÝ~ÈãË!»–/‚ì +mîöxÀE· »O޵»ùÈîÕ›!»xë¼í…ì,—¯8˜»ÖßðØ 9Aã-Ÿ1ýéŽç!»ž§Ùͺ ¼«èÇç# ìÂþ²Cé Žg£NYH‹t®L^…ô/{Ç×{²ØàwÓ_ é§­ë÷Õwž1Ý¢0Ù%2ø»Š¿oʶAwòC4 ýr§ãÞ ;ô¦mýý·ª¿öNä× cÅ¿¤L·(¬‡ð6ÏqïkÏ_ªßs!;ÝoFxwæ+±ç—ø}Z‘+݃þTÙ°rªˆû÷ '\Ô¿Öƒð> ¢3,A G¸p_}ç}ä—‘yQóÜŽšçšçšç©Ã³Æ&ȘódÁéÞ‡èzïø¶à´“ð¢ú®9f^ƒœwR‡ó ÈÑ/ælÿDÿ>àUg¬Ldu˜XQÜâ”÷[¸³…Ìó •±Ñaä:Tú]ÿê™nœAØh½™e,;Âaºb%$û9DÏ|eÅ—%*G<*8í*árLgãßÄBˆƒo+ü¼±q¸™ñýÝ×j@4f¢RÕ€Œs›!ýÜÁ’„Ó¸ÝUŸ>˜NФ/jžkžkžkžObêò\cŠ£€ÆBÈLÆÈ,NÑž‰³ÿý(wVg%Ä œ™c„U^H¨öÓKE_‡ƒ(ùÓÉ)c:fb»ë¬ß×ëš} ¢1' e÷U)9+=™H;®zm¶Ž¨$œ¼Û$3U©ZˆôäĸNíã¶ ²±µÞØñÆ ûÛðûª3U;jÔ¨Q£F5âÑ 9Zt dóÑgÐýêGÒ ¹²éîtØ|¶rŠÌcêï,E®“eî@”r}ÊÆ=õ·Ûë¸JÌlØ È $ßw0/e£b´=…ðFæ7 ›‘ïE9m£ÙxüIˆÁ¸Ò^çBŒÇ{ŠôÈ_BN>ªú4¡nFäxø }ø}H¿ï„`dymo÷6¿o!8Åê7Ud¬Þ°F5f6>‚©yÀÍNWcÀNˆR¶À¯;›ƒ6ôn¡Øú@:ãqºbäHàAˆ7)ëþ¥S™òÀ§¶xÀßyB³ˆI®fê®AN!úÀ H{*a2N˜G|Ÿ° Ó«,ú!ýåÄgþ2ü´Ào¯„kí{ô±Æˆ£b:ÕCV,€ÜCtšÍè¬3ó(dœxâˆ0óbž˜÷Ĺ ÈXóeg¬Ó€ /ú<ˆ@=†p„öÀ­x¿NøSgPªý²z"˜ôyØSI™†ÞþÐÙ¬t=†!‚m6¤¾BúÏ3ÎN×ýê Dqy2¨Íð*€ŸUœgz +j7äe¦b"+©‹_t.+]!ˆr6Oýÿ¢üÒ÷ªž ëôç­ãgÄHyÅÌthÅ*Ý“cI§û¬6¶@ ŸYú„ÌÀí‚´ü²CyK‚®Ãûv«õH›¹‚ð,æ+™M@ƈ4î­Pétƒ‘Ñ ÿ6BøÈzÌt܇_BúÿtÖYú!N­oœP¿Ÿ†8–`zèå/BúõÜï„Èà"dîeHYjÜ‚èncfý5ž°A^߆Ÿ“oºã8¤]ž…Ö<¾}Ä™zÀ_z<¿büßðïKÌ—€d'hÉ/èF‹ä!’çHN:îß&¹¡Cù.‚úI.$¹šäɾÒ&9á(«›$·PÊ{!É•ê›ýâ}%¥Þ{"î ò]D™LWê%y”n¸úK&HQÚC'ùyQåçµçc&ÓnU”öÕéüt 5H6I¾Aòyýë<Éq†ñ…z¾ª¼=K‘ïWI¾Nrù¹²€ôç¨´ŽªôÞTßšTåÑ麩Št™ÞTe~Jý™2îêvðfäÕE/3€Ù.tŸ¿ÎpŸŸÃ@—øØ¸¾L]›¤è.âg-E?L3ÖU…Ë”vÐ)ýªLzÞàs“q]·£×» yIóbã J½¾¦ž¹êxæÓ¾ß0Ò{ž~cq/ÉÏÕ;Í.(ÃN“·ÈÎÊ)M屮,LñŽcJÏ_' +d5ňσINƒa)¥cža»Ò¨q—"dÞ`zƒlˆÁ`Ø¢¢Ïc¾eóõ ßÌJÃêÛQƒÅ!•ïN×Y·Ð¥.'(}fÉ‹,w)Êm'x<¯ò0ÎtB²¦â躪ƒÏ"î³Zã¶[èC¶ã3U¯;î]¥Èã²óõŠúÞQ†ûL¿º~\Q‹"/Ž2zlé¥8á>¥8Ý[ä3•ÖZãÙ£LöUÀg'©—2Q•Ëýd’"¯´ƒ]_ÿ”ÑÎíNÑB0eü{ÆõMÖ;Z1®-` g|ÌjònÒE‡ŠÃ¥®>¤ô‘õý+A¾@¥±‰¢s~LéSqˆ Uv :PNeѰÁŸ97‡ÒŽvAó–©&ÎP_®ç_c{x¹€|hY2œâ-§š]Pަ£>:œ—eŒø"å{zì-=UÈJ¶¦W)çeºq]È!ǽç+ÎZJQ²à úy¯ Êí(ÃJz/e°òÅg,ßkPêû.eà°ïŸWõþPÉùë&Z@q8Céfß¹MQîÖªò¡($ãêù¨69ÉêÏS<ëTù<Ï©ãØ›.¤göÈvC fG9=g¶¢hƒâû2e ºKé?ZÆöSÚj“aÜ¥Ÿ²¼hŠQõ­CcÇ4:µCÍ…IŠáÞÃÀ‰q7æùq+í¦úÞ8ÅQÐé:*‹2p´~ÊðL¿ÆeЬ§8P´ >Åîê'CFžMcfµqÝŽèÐãÎ{Öuy6ZaþçPê +ç(³l«Y­ó¥—â`xѺë]ŠaÙé6P­5ø²g»GUt:YiÛù™ìô¶Þ¹ÍümpT¥õAŠw´Ã®ÙeY&õQúÛŠ|>ÄvÐiûPëieÀˆz¯ôOQÚ„é®(Ó‰zH® 8q†m¡ÈÇ82‡bä»–æ,e o/Óí´›nÔO{´|Rå°ÖQ> 8µWÒm¤”%«FUú®Pÿ¨0V§èçœ>îH_‡©¶Jâ­Ó´–R÷“”v C8]¸l<û +E¼Ei3æÅl×­ëf¸±¹|Át ØíKÏLV”÷ºë›”ñ«›"Æ–RŒF—Cm„Ó#‚ª¥ø™dx,8Ã@ôPdæN¥œvdÉîï~n½»%g^FU:#)Þi©wš]P–eуèKJ³íZw¾ÌÎFdéIë”ïª÷JÏcUÑ`08jd]3·ša'ÀMvǽ‡îH…ó vcChß ;Ämœî™Ù ›‘„<¹Ö,Å¡ÌðN0Áp½iÏKøjcñ»§®Ë¤¦UMÊÀ²bø¹Æz†ûÓ„ú^YÊUƒáÙRdÃ&ΈWXGøÐŠÜ¥ŸÃñ3Š,ñQF{^ž±¸ ø­‚Îe6A§Ç0¥ß¬g`´¸ è"hT¥ïR6׳8¸ú )o•Ä['i˜A´Ôó Þ8\eX׳äãìü^E Šò;Ö=½\„ Gþè W$^ÒR¡"©—íÆÿ$Åðïæ}JæÐ½t¨ˆ5⤫>tè¥!ã –+jL2¿A\6m²ê)íR†eÖûæÌϨJg$Å;-õN³ ʳ,Òv•E@) IDAT9Q¡eíõìJvv¹TÓDÊ-V|,£´›U䳪ÂÐ}iÊ™Þà +oYŠVj°Ýx•¢ÙÏ QäC”ÊÖtˆÒÀ]ú½ÃðŒ¯örM0ÙÃô<Ó#¯ ‹ó¼m¡ÿ9s¦¸›þ<´Rñ×b{dˆOÛîUil¡ÏM›—marû°j·)múeæ÷¤.¤(o×)íÜŽL9E I¾Ì`Öªv¸i1E ϺÖMJYÇÕ©ŽÈ˜dç ™ªÈ $£×&‘–Y7Y̆|&õ0Ow9ÑmòÀÅ¿vÞÝæÔ™áó!=ÓžRgæRŠ»h÷7½oÂuãÚ‡ –Þuz¯¢!#_¶CW/í±7þÔãݶViU±T¬.j޳û¢=ãèY¶·×«©BærR=AÔËä=‰Ò8Q;Aæ„ݳíÛ`N°¥]ïm“–;#)Þi©wš]Pže‘žìVÿ/3ÊÝ59aF”v ¥#©Qô^S¯¿N©³ó &C5ÎSlÁVù¬¢ zÌ!ìM˜:íiÔk™5>gx`mP 2ŸÐÿ(b°3µ†+”Þ&s& †=ÒvÑ +Ÿ»™oƾŸÁ3ÓÕø`ô†—­d/cüúC“ª _at}¬f|Û<—“ÏÅ ·ÁQ¶Ï”œR|ia1ç7§õP–MùþI›€’n¥Iï0:Rk¨ Ê£ ºHi§y"`Ìh·"ׯö3l˜FÍ*Æíà‹»i›Îü›ì®0lß2|C•ÑÅPÓ3ýG)ËhLƒžê¹¥ ¢¥n«÷\F)ãtÓøß\®U% ypµsW}­Çx~Øz^;loVÄ‹]/v üò’½±Ü©.ÈS2ûü)õ¿b¨š´›â06õánv|˜úSÖÈ3R(¯¼×ãvše-õN³ ʳ,Òå¢#™3ˆ¸‹zgD½µçX™¤'Þ¤Œ3Xš9Ì`.MK)NÙE/«DVTQöìQ ÁpÈümvÎÓ¸”aEàs†É¥,n÷öQã[çè?Çm¤…qf›åYÈ ”I‡”g­›¥)xœŠ4b”÷EÑ ûè6Ö—1y€8LP„¨köwűf/×ÑÈ»«ñjŠp{"ìô’§(Bs’Óãh¡¢h1£ »/(ʦޔìuãÙÅið:ƒ>ib’~i2wG_ëùÎT!½Ií$³;.íÐåIÐ`{ý‰x6;/QˆŠ<²×Ä_d÷í|ª\\Ñu¤ô!†”‡8EÇ)Êæ +Š|…nãŸzGG4égFY½~²ÅÈ—ͱظnNœ˜ûØ€z¶­ŠÓÌå d´3ªÛ©Áö=¦B_1iƒ>7!áâ]c¸ øˆ"ÓQÞ̘†)[9ËZ#ÃKëki6œj¤÷¬I³¬DOD’Õo¨í-Ý6†<Þy…bÓÝfþ(y/ú3”mÆï~UPºì0þŸ`{Ai§Å³Ôï1/@ò«œðDAßZ£¾uÀFã;I¸á[x;Ã{ÿ +àÏ!y=«Òðr†´þ§ت~_°Rnà¯|g<ÛÐð5€u9¾9À[*ÅÖ½?ø €ÿ éO/¸gÜß `NŽoÿÀOø"æØk<ó€§Õ·äøÖtÂjH}-·®ï‡”ç´‰yîxÀ\ˆZào!õºáúD–¼ +à€Þ„|,…È‘çÔÿo§ä£Û± "ó.AÊ5 ~€´_]γ m9/¶A䩉EŽçz!}(/–Xà¸>hýÿº·4¬ð9€+2œ é#&v8 éóŒëOCtН!íâ€Íþ²Á˜ob€ƒäçvŒ…¶Ì-_¿7¿ç¿/¿¸¥~?‡0t[³åG˜mý¥ tRP^<‚èi&æ¹ìRô8©[žð}ijzŒÿKÍY1è…ôë¼xX@@X¯;›â=-ϲŽYS;܇ÈÜFlHxçO¾T¿‹ª#_ØuqÉùTû; 2–¥ lÀROÿï,8ýß"ÜQ^…ù*±Ꮋ Òð1ðŽ@”ñ"qK}ó»¤ œpé;ÂÿÏÞû‡ÊUåù¢Ÿ¹•ÇŽãåø8>ŽÊåøˆâ%}‰Ê~ÄGú‡øÐKŽ—x‰ƒqHñ¢CÙè`_´‰Mt°›rˆC¼Ä&±‰Ml*Mlâ›ØÄ!iâPi’&iŽMÒ›“æD>ïïZ³¿{íµ÷^{×ÞUub}àË9UµöÚk¯½~|×÷çã  ~†Hð)’ûׯ b"ßCº c#"AŠé,ƒ{ ãÁÇä²Ñÿ"´³x +ÂŒíèã¾_AÆ”e4o<»+x²àݱò4£ò1Dð_ü +ò>4¿Ý HÞàS_A#€œ40÷IÌ™ûÚƒÀkæš› ö`ô)dí*‹/ sËÂíë2ð ·oG´67lƒúª6¯†0-»«SÚ–'<$æì‡¬1BæÆ/ød޼bÊ~ é3wŽÁ|þD`údíý6òù˜§!c膹öÛµìns¿Í%Ÿ«(~…hýÖ{¯>Ä»BE+tu÷»^bÎÿÚù|7Âùº)Hÿîð:€cθ y +,8à d.´?èfaI!Ýo¯´@dâs¸ «!c÷AÈxr±ÀyH]ƒÌ ~à 9ü k)_,îð €>ãô# ³{ø%ˆâ+ÌßMüùgPø%díþÈ|ÞÈ0“rM²~á1‰;!cáÈüIœi܇h­J虵Ƅá(#ÓäÅ¿!Ä÷ï%FèÖdư›qdù„€b¢¹âc£ŸëMó}QssvÉœ«#JW…EögR:C1J3…ôarÙÎPL^ ˜×œ¤˜Ê4G meÈuñ™5åå@®g™mÚ?Ǥ?&Ù¿)èÅ4ðŬëýî7k쇲&é/1¹FuÌo=f¯ :@Ü:SÖ!¡}<]z2nÆ €óæùORLAËf=p]Ó.²³_×$Zã$eÿò¥« +‹”qÑeú¾Ñâðß!(~ùvÎ,PLÙmjÓÅ=o#¾Áº|da™bBêÆÒ¿k ¼÷ÃÓùEÆÇDÿÞ~ɦesÇ uuðùšn`r_í¨ö";žÛe×Qø‚*b_„`‰‘«Zìf‘XÈ(;j0ÊnÑKy®ÃÞD›µûÜvŒxßeJß»ïì*GÇ/}‚2ïyÚiÑ ¨ÇL¶&åsŒ¯‰eù¢Ù>êØ®®D€ÎaS‹ñ€ëi›”9: bRæD‡an!“ŒÒÉ’q>Îùž7ÏÓ6ÿ÷íN”Õ˜óq–²)¦ùéƒC]A\ôÄ!ý›kƒ213³?Kñó ½¿ŽºK}?ŸsŸ²¨j‚7é÷ öaYÖ0›±Ð©ã(“ë0Wf$êYÆv‹žgo2,À_X`vlŽ)ú׃"ó$íëÍø“yÌ¿®B€5ŒeÌò}› ¬=yýd}‚uŠ™IFét,Ò‚Ë58Úû¡S”±X³ ç÷2ûÑäè£Åá¿ÃiFûûy +Ó4ÉxÜŠEóy>ð¹l:¿ý‚Ðeo²ñ7v0)Ȥ¹v‰ÃVlÉf5MO7gžñ"³÷<}¨3*LPxÊAú³p’2žôÚáîcdÿtû!§(æ=u5ͧeÆyÒ9ÊZ°‘£ï`'Âo/3ÎON™gi2oV`hcj¸i¿ËòDmUGQß$#>ê,G§ß릎ê³a·E“=“3m è·2?­y†2÷Ž1ýÌz‘}áõ}é 6”åPkMZN™:¥Æ:h™Ž>AÙ4|wBµìMç:Íè•YlóPudÈÅ K¬WŠö0eke”™¦Œ¯›aqÓr—™ ¦6ÍzÆOòRV¹9Æ«Ðo¤,r3c_w!@ƒqë!—É*KiÁ‚LZšì +¨ïf¢3Œ4½MŠõX|½±JZÀ×oÀ&G-ÿNÒp\ Ì§#Œ4’[=å.S2Xíø"e}r÷H÷Ðùå­§ÿàGÊzn#XMr4…zin_gÿÙ”êÂÊúq4å÷.‡Ó—iÙ*(‹ceŠkmv‘IK(}ø'\­M1}Ù`ÄnÀTUk“ë‰Ý#À¤gÙ€ Fã¹l½ªý¦ð^ ´›Ñ˜v-¯‡MMӮޡnÀ5(cñå¼¥­JÎRÎ×{)B'MYk™Wº­¾/ÝÔ\—ÍÍÚ†0ýpb%ÊMÆ'VÝ) \7€&£¨Ø>,Ré—Í3½À¤Ð#$]á6Uþ¼ú~3ëAÙ4%y5z¾`Ó¦ðIʘʲ±®"ýj”G&) ¢—>ëŠ4" Ë”y¶"`Øeþï¬'Ëݣ锭3Çõ×Yà8ô;™b¹ybÍ}Ö& 0!zÜÙÔgÃî‹AÑ<“8ÈâL»[O¨†5‹šž¶…b2Oó\¾žeqA¹F‹Ã‡v¯§ì7®e‹E“2¶}8ˈYÃ$“OÊAÏf*±ØÍdÚ7í +ž¯(MR„{(ÌèIÊž¦Uºjúà(e ÞÉxAQ'¥}{)B™‹¹1Ö%J›62ÉC[t8ø~ÜÌø»¾Jáw}.NSž¶/12£vÿ£œ¥g’I\{>Ù¨ÊÍ0>ŽôßöÉFç»'ºB•å”> ¡yUOYwÛ Æ-Fo¶ =ú}uÕsö2ú}Xʦi[‡a€#+\{¶¶ó4KÃߢŒ»Ò™õÜ/æÔ3:q åàæ;d»Œ½5w¸/mŒ‡(›aÚ3msž?Ob¯}¨ïÓ´ýâ*û7'M€)‡ƒ3”…³Çä{2àþ;éYŒð£¬+tiPÌ&C}yf(‹sÛܳëÐa +s÷$ËØ¸éÁ,\ÁˆáÌÂiÊa?MXÕ`dº‚e¦3óSž²í”²UP¨ A‘Ö?iÚó&emÚC™ïE +“°›²tÌß²õ¡uL®Áö·íŒiϨs–Ñœ¼ÌHêð§?vꞦ00ûL?íâʵÒÙÎdºÖ¢.»™‡ö_5YÖ".+Íåuú¸O‹Ã.­¥_S<Ãø{ra×™L?(÷(ëªæ5ò¤uóAz¼ì5Ï‘çòŠÊ~ºƒ™ß>ËD·ÿl<§×98w93æÞÛ™Ü|í´fÖµˆ9Á0KÜL*N3.Pu-³á(ÓS/1‰£”=v ãïvyvw^•†4úØo±Aµ§×g]£HŒöç% +£Ÿq 匧×u{®˜çàb4ͽ;†Îç”ßbžÇ¦gí1üœw€}¸¹_èEë<ÃzkfŸ¶™’ƒÑ$é ;.2ÜW¢­®[`ö Ñý¥wÔé—v–å%Y”6àÖRúľß³ýî·Rßý”Y+§¼%ë7y•r˜hQ6«cæžg™¾ÍPë2ý~•2I[%û-”t ‹SŒÏ±I†›6žg1³p×ß> ™þÎ\Sq²^¿Ö,!À “>,S6ô<—…5”q˜×OK”5¥’6Y\ ]&ï÷Ë }1Ãlæø(ã¿\Óè¬1¶‡þCÏI®,æc޲–w)LnÏ;÷q0îNÓæ~G)üd/§üAFÁ7ÉbÖÖëÍ5¥Ü Ý/´ö£è`œ¢,8¾Ir™Â,ÖÑùöÀéÃgÒ]k‚¬Ží¨rmõ}UR÷4,Q¼ïÙ&YÏÆ<ÃHRY—ô÷aÊDX *íÁåF™³Œ„9s” ¦!‹”÷þ‚©¯Eb4)÷Ê&n'¦ÆÖEu^Ýç,…Qq7¥6ó±LaDʰ\sÀ,¼™QÛÎn‰¶!ŸÀÕ¾…¢Ëäæ1ež·Ì¼ÝÇ꘡–S÷NúðYî4îœu5Ú>,0¾–h!DšO¢}'Ç(óªÅøé¥”ëFôÝ»ìd4>Ž2.¸³ûÚçÚª‚~ù„‡EpØ´ÑwP]¦ìqifË¡¥÷½Ñ;½Ìèàm…hvNl£ð%e÷ëS—ïÐ}šñùЫñyw0;f̲iÏAÊ!tãû¢¥uæû”÷y˜Ù.dK”}¶aß|Æ=­%g™u·@eù§õ”½9M =_C?¥Ñ ã°²ÁÂæ™„zàem©`…è!×e¹ §á ËïÿÓŒÞQ‘vf‘¶úXfŸAâFŒ¬rÂåMçÌ÷/Sø{kýa÷¤FkÿIÆ‚ÉZ´™½öO0 +k]0[ïuÞÓ'A¤?4GY’i +sèÛT¯R~5gS)ošÆ÷d‰NÔÔSueÃê¨rmóÝlJ›êÂEFæí§¥T«cP?¬îYçä™a’ñØÇ(2z2¹5ã~„ÙLA“Q„Ú&#‹‡u¦n}˜ì²z«•gú}c:ï@«™Ù²”ȇ¬yÚVåz}¶)„òÜj–)®£à>Çè×â-1:D¯g:“{š‘ùÿ›”1櫯ªøZ qžñÿý{&°®u,H²Çhcl9¿¹–v°†YFÑ‘­%ÖRE}R'¹¦Ÿvüè÷¼Ìd )kQbë9o®µì«æ÷RRyE Š >Ô×9Kcmý~õ³œ¡0L;˜íŠCŽ¿¸¦'Õ³ôö¹V‚–i²–YpÍÌOSö}î«JßÚ{V% ÒÔdºòã"e~nfÿó°IY/Ñ?N.²?Ô +zYaÿngÜ­¥; ‹ŸQueÑ ê¾eýÊ-¹1­ê´üè—&_/‹Þ´ÑþóWÙ ½ÿôûŽÒÞW§âþ6½ÌHj¿[CVêr§™ÌêcyðAXFœ¡¬ Öý6­Ü.ó{“ÑÚÚ*x/ëŠ_X¥?4G³Ïh2=')/è%ó°!ÔZÊ$9Êt†è*«Yd»ªÎvF9<ïeFƒqP‡¿aSÕ_æúíÌ_'™®µì0i¢|ˆIכ¦®´ñ²D‡ûi=lÙEV—ºòIÆ™ónJßdá²ç9ËR¨À ÐÒ¼*׫¨]yä\¥Œõ4­Ä„i«Ï þ“‡¦«”"ÉiPúÏ­ÏÝ€Š’ƒa±‹Ñá⣵4d}Ûìy®hW=µ@Ñú,jA„•¸[ù“ÎçQ£ãk÷e&+N3ßo~’þ`r»+hc‹Åüšß¤Œõ¬6`Ä$L1Ù.®šr»2ʤµeÂí’w†É9ìcêµ æpÆ3¤ôų%Æ4“fÃW){ˆ{gMÝös¿!MóôÏñ.e¨ËD{–éQø_®ð¾-OýyXb$ijñZÖ±Íê4£<Üû(kqë³VŸí(BVø{žÕ¼-èªÓå¯_r…îºJ.?vŒòîwS{ýj‘g_'ªž¯v-[æh lÊГçSwŽ[áŠË3Û¸(u[FؽÁfÎJ{¿§){°Þ»ZïÕ*y]­€-,Æ„ž¡ Ú…èPË“ë©Â$·«êkg”ÓZ]Ë$· +´µnTiž F‹ëÕ×î¦L¼³ÌÞÛ9ÏdI™ðÖ% Ìá‡æºcŒ3Šo²¿>lyîã“@úÑèv•ÝÈÒ(Tf 1¯Ê\®¸miä;l…ú›7(‚˜,mê› g'™<dY å‘þ¸ÌÈÊé,£l#'žñ%–7iÖqLöªïµ6ßnh68á,“q»™j ¨Žz¶,ÁÚ:U®Ç¸V”ylc»ædÅÏ(3B°Èˆ!]Çì1®…ó9õjF?+ÆŽý +ÄŠPƒñi9Í3ïe”F‰Œ²y1dl½“L÷µ_¤¬>ë›Ó=¯Ï¿ÜZs¤]c÷Æf{dÕ7I٫ݽö0«þ̱Z,2òçïRÕfhr0óaBݳ*!켪ss»(é¸KìÏ<_£Uq;µËU–!: à cOŒµSÞ›Ý[_î³þ<Ú£îOúç¾=Ome|ÙÊbÈÖ °žþàš®÷cí;\2 1• +õ{–ÉM¨ß %šÙig”ÓRBë+»ž£….«ËÐ5u(x]”Ï2)œu¾Ë:[s®™eD°bùñ4ïÔušþ÷‘¥¹K“¸OQµ‡Íõçe:h3ß]ÀÇHºH[(] y3ç^UPšEQüõLj¯–XÎ?³Áxê<«1-ól:j±>LÛ€RËÌb8Ëþ€uT}®%“½·µÂ¸LÙx¬vXQû]žÀb¤5Þ§˜¿6^VeíûvV@W…°µÁâÚE·Ÿ÷d”Õf«g”Ó 0l]v1ÍÓ$ãëB‘µÚ +oºæsH„“Ì·ÌXbd­¨Q£¿Û©s™ònÒžyŽ2¯-?ÖÍ(k©¥ê?MYëÓ®™eÒ ápÀ=ò¨É›u ›¦Œ;Í¿^dÄpeΗy7:6ÖBÍÏQ–fŸs½>ëÓhUØÎiFg–#5öGÏÜ£;ïfÐÔ¥¬y®0¾eú¤Wóý­f‡¹WËSæe¼Z¾­cþ¶¹ro§ðÍš£Ìç”y^¨îYÒß,ÚÊd~L­uhP$¯³˜*ù|ídüÅúü]‹R5éÂ|F¹¦sÏÏw£€«¦¼ŸMÙjõ–YL8d 'è׌-2ibœ‘Õ º²…Å·”AY¿!×$-­\šÀçР,*‡vP8ËôÍk‚ù¬Ó|Î'¼õ£ý!­%“Lg!€ö­_ÌèŸÐºô{(ë¨×/Ÿ yÚAµA¿&® \÷=6¬tù˜SÞšê¹m…C½”6‹ô!6t¼tMùeU^oZbµœ&‹£«®_Ëì± }¥]Y WàôrJ¹,Ôí—=ÃøºYÔâÍ +@í7ǤâÂÆ€xÓôÇA†ããýÛ¯ €Äõ*Ó×®u”=Â}žËŒ3Sê{½Ïø„=Và»WƒÉñá +ÊÐ͆ºæÁExj­pŠåL µà«naF(Í2=T¯`];ŸO­‚ue‘¶$«s´ó¸Kˆ•HVHÚñü¶Cõ}Ýê«”uð“<]Ëí~ò2#á„]K÷™g8I?¯oÏ=»Y~rMq¿Ð¼ #»†qæc™ùQÕg) Ô^Ê"Ö1Ö1Ô¦Â×1{û¢e·K<ÔSGÞ¦­÷Œ›_z”ÁUtñÖZ‡"þ­ö0ŸÆl[©²«e¶-®vg¯§L(c6äš’¥ä\óbRæ’.¿–Ù–YH‹gׇË)×ñM·Q® +Ò ¦5¥ucœf5»f˜Ë˜ùºkFH›&)ktUUdÒbD ⬦¢§¾ÛAYsÏ;×µÌïYcgФÍêÏ2|œèù¦ûgåPXµkÎ$óÑ¥Œ3¯Ä>ÏÊ»Úæ¹Î}O`Ä€œ§Ìa}ˆÐ¿“ªÜAfûË[Tey棵Œ ¨Êð+¶zê;+ÄßjhÊÔmË4žû4ýqú â:ÁøÜKs]iÒŸª•L¦ÑÕBUW{´“é)>Ó-m§l¿‚±Aö…ë› >žà£4h§˜ +^fñçWeÇqUdßYBP×ÄIFëà1ókÉÛª¨ÝZéR·+…u×#«ß§F•lØýçm)\÷>@Ù/·2.¤Ÿ ð ]Êø=c¾³nOÖJ±éÔ7mÚl¿o0 +o÷²BÏä~¡¥ÛÇŠTdÀÕÂ:Ô “ ñæ‚uhÓf­õI#ÍüÛH¿=Ž6Šh"4ã\Fªß`zZ3_T×ÏòãÒ-_@¸A (SÓq®OcŠgŸ?çŸÌ-ö§å]¢ßrÃuýñÁ×^7h]Ý´°A3ûýª’Š»æòE%Ë®¿kÓù}†²™[Iï1Vë›Jú£”káPÏ|×SßYžkÆØReê¡äjNC™¡ãs®5 öf ù´¹ƒQ¤ùS”qØ¥0˜v¾Qÿû¬âìAõYõ¼‹”u«GyLJè–e™Ì×i&¼‘ñ, e×;ï–2Êh~ÀjMõ¾´—ñ9q€2¾Ò¯Ý’mm«:é_Ëw0}ð¹ h!ÑEO}>ËJRúÜŽ÷šŽ*w™ýÅ(j!:ÊH³¤ë—ôf‘2NÒxŒãJ²«,fÍ©Ae-ݪ _ ŽeÊÜs-Q|"+äkRxÐSª{fq…hÍŠÚ¾UÕYôlR¦Ÿì¾çã±o&š`´]¤ßÂeŠqMz«æ6YkƒµŒRÛØQ -3.ˆ³ã¸Ç0+ü×)ûWÓÜ«Pb÷‹yÕ9K,ÌÈxíš;7\+„‹mBZëâÃê2ÿ™ŸRhØØË°¾XËxîëªÍˆìIèÖ—uñMmX‡R˜šPÍÖŒs­ïåR“ÉÍf=«1ñ>Iÿ;Ìsðµ³å”é7ðYM0~€s™Ÿ ß(½EI÷a–¯~H_êß6²l@ËeCÉ +p–&ÚÃÎeF›Ž쯥®ä;ðÑÆ7ýƒ®uÝwšjsVl޶§¼Ö†éƒ§u—²VH>“ò,2ÃÏšßÎPúîý{¨ff]ôã‚—EÛ­…‹,ïªhÉÖå[/´;£¶ÆÒBñEÊ<éRö«5L_O_O¹O­c|ý÷YUndÒÜŸÌÎŒäÆð•ñ;µx`a„X IDAT3¥|O•é°¼%H7å¾Ç(ã±n«»ïî§ðW=Êz|˜‘²Ýu»iL§3dq-|¿ÔQ÷n÷ñ|L)3˰±àcˆ&(sÇn.KŒ& ÊšÙ¥@_gr\háAWµ{>ãyù\ÒšË"LÜëL¦½«ÛÅESš6—Ì[MÕö&5£Ú-/ÍýÇFÎ3n¥\OVorª- ϳ:ÃÎ)w|¼iҧó¦¬5}öN}n9¡šYM¾x0­”kšŒ˜ä³ s¿tŸ!¯3Œ›kg”M3ß/¢qîdôƒEǹ&-þÁ°QEPÄ´1R¦níFC† (Üõ¢Êç !­"ÓÓÌN3)èîѯ¤˜¤Ì©}ô[‘”‰û”F-Uï 4òZ0Ø ¤%Â.ÓgëX_<—)ÆãËìʹWÓôãÃk6eoÎ:«í`r?Tÿ·Íý,ÿ0EgËôï¯Vy½Ža.T6f¡÷¤_°Æé¬¼@³Nù´Iiie#µAö0Ì,®EaèÎRÕÝ̶2p£†ç™SlqʇZ XÒfÿ ƒjÚÌ~+@é䔫ƒ´%ŠeJ&Y­&¼_„˜À5EQm‚‡‹”yµÙÁ“|ã¼`Kiík;åªÐÈ¥Í}‹^NÙ)ÊVw„W—:ªí‚׺ĬEå=§Å8`îÿ‚ùÿTJY«Á·ãT–Câ t™.ÐÖ!ƒ|š´¥ÐE†ûºN0im1HsW—1wñR@s¦ŽÓ,f ³Ž‘5[ˆF±•ÑÎeæ!kÁ`qšÕÎí¶§í—)|ŒõÅtŸk “¥4ƒäò-YÂOKEúÆu +mëó•#;™¾_‡?kgô……«%{3»øÐÐfucŒ¬“–X~>laœ?ɳâsÝ]«|žÒ‡ÙEf[sù‚‚“2Ÿ»”Cg?éî—ÊÓî‡|ÁHËb‘²?T¥\ÑîYÚû²4ÅxÚ_óæYže½¼¢µ†j›Ï6f\Ú>n­ÿvQÖ²]÷X¤ìWv|·/í×4¬QI[•[ÎéÌíôŒów¥™}çù¥ëCy–Öp‘Å#å7Y<ó0‘e’nžýl.ýГæþÚg^[äuK]uMÈdÖÔ hGIfÝg‚iáγFNýYÁ¼¦Ÿ7í‚ÏJš)^¬éý’>¤„ÆØ°äjVB´›Ö_îÃ.R„šÑsXg(ûžù|q „3Œ€-§mMUnïb£>9Èbk¹+tëq0¾š¶ßò|™;Î5(LŒ3Ç( nYÇŽi‡Ý[ç(cÚ]gò”Ëì/ÐÕ$ãëç±>ž)²ÖÊ4cÉ9 e¬¢\íÿЧ—J—_©#°›Í¢ ù¾¬ ‹š|n .ºÎ5í€k†¬çÝõ«ÉÔ¼u^ B}.†I¹¶ê yîfǾIÃe½«zεÕ=êt™|Øô•æÍÎPûM;Ú~tÞГŒ+ òÎ2UX´è´eë˜6Ï4OÙ÷×Pû=ϰDÙÏO1.ü¹Êj„Õ>j™{ì¥ì]‹æ~Y<ÉyÊû[ϰ¬R=Êžm÷²`Eã*øñ€Mî5ŸŸp À÷=e¿¥þÀoSêœðà½çýæíùm-€WRê|ÀS)í€7Tûî°À/œ2kp«ù|Àã~ŸRg~ àsÏ•€[¼éŸß©ï×øùÿU¤¿Ï:ñùû–ù;àé!´# « íü»œrBæÜQ þ&€Õ9e>𢱺2Ò®»àÎwwçÜãËŒß~à3ß0ŸÓîÛ/.©ÿo0 à75Ý«,t?~^ðÚ߸àUׯr®ù=€špŸ¡;Ü®Ê]0ô)ä]}¥~[àm$ÇÀ»qõä~À÷Ôï¸ÇiûÊ 0 iÿ-õë¯ +\Û€ìC_"¹>Ö‰7¿F¬Vÿ¯ð¤¿Ÿ¼—|2ܹЧ!sî^È|{Ñþø€™ÿoM^Ã*È~€?là dí´cì">~«Àû¦ÞÐ1{„?„Ox +Â3\€ÌûÕˆÆÐ»%Ús§óùQçEB0à6综÷Y¿‡¬÷AÆ' ssùóê‹€úW;Ÿ³ö«aâzÅõÙw÷aŸõ|Àc¹~€-~â)·q¬ÌØî÷ªÿ? +(ÿ[ÈÙâUÈ3æÍñKýp|oQ!S3Ø&ÈÜy²¾‡ð«!ë×-žk¿4múјºé³;!ó׎xòþ±ö~À9ßí£ŽßAÚûd]^ Y/™öð1„÷qyªiÓ†g ûË7<V…s„¬±/"{MѼ +ÀF?Ï( òŽ®™ÏáüW†t é‘ ¸f nÄÍ,³ÁOWÖµ«Çø8Óf 6àVË©¿¥Ê ú]XàE†û·(»eÉó\u’œ‡žºf^}‚²—Ùuí†þù¹þx&')ãð*ã{Ú›ªL;°Í-OýY4Ǹv}_Áëë¤elìd§Ì:Ðvú®NSa׺¨»B(ÙÕ¡-æÃåç®Z¬®?›ªÞ*Ôél>Íú ãgó|–ôÙŸ“”5þY&Ýu_¨¨ó¨­î[‡EµÐ;Dy?)ï³ËäeÊ^`Íþg¥MìöÑVË3ÕÍë„u8ZCÝ6£Ä #Þ¤™sµx}²Ÿäµ«Ë¸Kf^ýÿFÿ.C6ðkˆ†]KTŸp"iDºfqÙÒÈ<͆+ù¶Xs+ÅÖø +ñ6mRÿï2¿év½àäÜ/ é^]¸ò^ß‚HÃn…HË6¡¼©Ü ‘`C$…}líÁ7r~Ѹ¾Ñ؇"M»jñ<âÚ°GêôIíñ|§ñYÆoúÚ/!RÔº çq^›‡Ôÿ¯½÷ácõÿ7ûjM6f|™ëŸš¿wAÆ' Ú¯iEßF|œý +јÈ£*iq8æ̓® |"uÊ|¾‘Öÿ¬ÒÖUƒ´}ò5ȳ[ë­uÎïï¯øÒW3ê»IÈ:ü d|hÍŸ®C[šdáJ`9@,Ð>Bd•ò4ŠYqÔ¯ ãÿÈܰx¢ÕÙd>_@¹uà-ÄÇí«"ù>«ÀCˆ4„/¢z­î€ ë+¯^-¿Hb>„X uµ+¤òðcDsôAˆuˆÆ«ˆóÙO¡¸EOÕ¸‘_$†?@,þÑ:È\þdkXWæ |Ñ—ˤ?BöƒG‘}FÊÃ*Ÿû ùü[DVÎ÷õQï]æï(œ•,_þÄ* JÜÑäÿÂ/ƒœ­³ðKÈšùdMþÄ + 7PÌÂ2ðÏÐøƒÆq#âàSdó^ô¹‚ß[\Èù]› +ÝÙ”B±6y{~„¢øÄltTMѲðdÐ݇á˜þјúÔüÝ€t¦wظb†›õ»Å»ùŠ<áÂÇÎgŸY—ÆçHº§l ¸OS¨MÇ?A½#-\x²áˆ3e… Z8tä ^~àÿð¿øóÜß#æÚõÒŽ‹ãž:òYvs/rðësC0 ‡ào!l Û éo;®CF>3Ø:ñ;„™µ®B4öõó1€Ÿ"2?ÀnmG ïWX-~9D¼  cÊ¿éw .&ÿŠè ¡ÝqV´÷ÂÂ!}p„¡yéî}ÃÄÇþ¼é£ç¹‚m2‹{5~ a򵃿#ýð0Ä5¬*ü3€ÿ àO!‡ *Ý+ö@x³çß›Þðßë=Üêë¨ò]U¶K¯«U í€ýVDcxÀ~çï`ðk£ý¸™Ý•_¤vä Ï‹ÂòÍ#2/²—Y÷Ç(>¿„ì§Ï¨ïìP…ËPáCk ÐëS?\þ·g™ÛÔÿyxÍ” ²7?ŸSþ"÷‡<ÿ!Oˆ4â>ƒo±Â>¡¾Ë{°÷g\¼–òýÛÈÞ~ño×í‚«¹|ýkþ5~eê,*¥&®C„;‡áJwW›¿VðS§6´ +¬ÎøM½‡ Ú­Päù滸ñ›ãú½6>çtÇ3~׌H?RæüјXÑXCÄPÜ@þz”†ãˆ´D« RüAaÑû³k­> WøäÂ^ûIf©ê0 aLo…ì3O ì0³qm¤õùÿ§ªˆÐ1mû÷#DþçvÓ "ìû2.µ»éœ„0@wBÖ²ûÌõ÷ʹ‰÷Ôw«Úg=äÐ|;ä=<à^;h¼a\¿@d±6 ÌX†¶¬ñç¼>ˆþ}¾ÝC‡»'Ü€X”„"T€¨Y<æ0Ì”àˆÖà§ J’Í ¨yˆ`¿(ôZýDIvqáöÎçAC+ïO-Ç$Ä +å„úîÞ”²uCÍ*š@tˆÕ÷ø$^Ë_ø3ÿ Q,€PºÀC<^G•‡öÇ!¼è0¡-8C­ÚBð*¤¯ìܺŽðX ï@Þås=t²çõç½;Ëb7 Z£û?0¬B|Ï[xÿ9xûóo#=˜Úo!ŸOrõ +òƒP¸íÒƒ÷d"þÕã'3ËXmË(˜AÙ1uÁüÖbЬãDãoŠmžy …»þ~Ó È!õ—Î÷/"_nÍÁÓ çä ¬4ôä[pÏ,L#Þ¦·!ÚÒ2ø +q í 7ÆÕê+µë¤O‹îìÝwÿ€ù;¨ÃÊ+ˆ®!âÖA´Í Òb\ZSCð„™DZÀo! ÂqõÛWgùÄ,ݵ}ò¼!Zþ6€×Íý>†¼÷;!šžï@Ö_×Âà}DA’È_?®#\ð-È»¸av†ùòðSD}~7ä|Ñšœç‚´ëï‚KF¦|ÿŠÔü#Â4–ZƒWu°½*P‡UÂsqvdn~±®x 2Ï¡Øþ¡×oAÖ­áýÒ|7¨€¨>Wÿ?ޤ«‚‹ÍÑsˆö³â.¥ƒ´Ñs:T€Q5þF…’OØ` D cù¦» |ϰ„{¼ +àeDnîe°"pz²Y¾îdo yÖ?BÆím}ü-Ÿã»öVDgÙ<åL ¡Û ¿„,¾Ã~ˆ´öçˆ6Ì· …üyÎu?3×=¯®»a&ûiízr¸ü—€:Êâbô¢×ûð8†§õr±Úù\µ©TÕÈüq“ð"&Sy5›œÏ?‡llÔwvÁq\믉¹‚læÝÍÌ0k—@ÜLú Ä}— zÿ_"ßL+¯!êÇ;18+mNù<ÄÌ8Ë¢ã׈¿o­ÍØ ™³WП4#²D{ùn(; Œ¤55džÜb.:u!D‚¯Þ«<,ZÌWõÀ +l~aHV#Zg¿ é÷ ë“Þõ¸8îÜãn„¹…,#~â Ù¨Âuר„hMþý»Ce1r¯¢?µN<ŒôÃMˆ‹‹‹ßy} µì0@=þÿ?…ðâ¶îáÝwÍw!ÊV‚¬ƒðqÈ;¶PîDûÎjÄÍÒÙ·^Ðp².®†ìEvMyqž2-ÃXø5VŽekV›¿E„mS@žÿ9Ï`•Á@ÞU¿îM6æÈNˆÔçÏ߀𿻜Fòýßá?C¾ß½Æ,€}q÷d¾\ƒ<›U +½ÿ¸MÃ?@öÇ!ýs'ü|ûjÈœ¿Ù»I”Œl8¥"'ZÌ×A±*Ò8Cɯ8Èû‡ä³êŒ2\†º¦]óæ³Îe:ŠÈË¡#ÎvrÊjšÏ¹ï‘Œk§™ž tŠñˆúiؕӾCNy7CH]´–ñ¼÷GYODÝ<ÒÀÉêæÑU瓃~‹ó,:óJÚ5=Uæ*%âð6FYUž@»gEïä”mP¢êºY_Žp8ÙNÒ(/·<ÏÌq†Q¶PÞCO}Öãô2e}½Ì(ÃŽßQ×uÏÐ0×ÙüÅ3KÌÎw¬i–ñhÕ8œyG J& ›Iã4£9±§¢{eEï¾LáÁvQæï>2û%âôFÊ|ïf´—Œ"‰¡Þš²ë5ž¡ËúÞÝ/t¦Œõ”q¹Ìp^WgwYb”dmm/CúܱLr³úmŽ’?Ýb‘–27ô¼¥ùmÐíß§î_å9Ä®ÇÝÚÈ$Ãü²ú?íº3LÇ1æðÖ5÷»Ê|A‰~&‹×ÔÎPr…Ji¸jʯ£¤d²×O2:ˆÚï6¨ëNS˜ˆÓŒŠÃê÷yu]—²^iæ#¡€¯?}è0üùݱxŒ£%œ™d|=ßO¿p¿Lú?¹)…{ž{i,QÞiÝcºI9 æÁ-SF˜y”ù˜w®é\3HÔ‘^ ŒÒ÷õ˜œ'ó[7°®ª½/×ÔުƞÆE¦Çü4£Cd“2G]ÁïY<,UD›UúM9®©eêì àìA;+E´%{@¥ùëzìbòp~Âôn6)û]‹’ºv7…ï;Íj°dêµm²‚š‹Ì'MUÏK¦-ÊütS«N2R…ò–ß=JZ-šz­åMÊÞ|2 ®qðA»T²¸þ©ƒŒL­ñ}ˆ‰ê¨|éq† kŠ6ª‘ÿ]ä™A鸷CLtB"ØÿÙæÀw < æLÇæ{–DÍ Pø8›2ò‡W }ÿ—tïÍæÞÖ<úª5ÕÿWÄßëC Zu`‘é·FH kzz 2N¯˜¿Ï@ܺªŒ(îÃ^D&×O#ÛÔ|-’î*Ïø ÔßÎP<‰x<‰,Ü19¼‘É_2.uÌ” È»¸1%´®ïAÜVAÖ[»ÎlBÜ¥ævˆßÿ¤ùü "wPÖÇ ¦‘!ø¹iƒÝ£¿‰dŠÂaab†ù-óùˆK¤¬¯HÖƒ<¸±6lÚ¾4Üqáy²ÞWíW;Y‹>Ev³ë=Dï_EÜA4Bø5×]iÔRÖÁsÎ@æ»ßäî¿Ö´yÂbFlRÿ¿—Vhàº5Üq¼ÉvÒ<ûô .P¯ î&r§â÷<Ž#Ÿd”+ +[çjÔë4‡ˆ?È‹WÓ€¬w +ìú O¹¿G|/dù.Äœþä=~jʼ ᑇ?FXÑÔ˜˜z´«ì_Aæ×Èwíü5"7¼g ãÍÆ´9‡hÿdžþ?qü²FýД2Î?0×Ý€ì ¯BÖããuÅQTbàÐA%ù8Ðg]uQ‹q [㳃q ß ±Ì¸¤kÔÈšï7ŸGë˜ÿL®õÇ©€kÀ¤™½™-¡\Ç|ÓLN@»ZÎ5ÍÀç©’Lj‡ê¶Br5”—Y¶OÓãv×Ô±*²fƒ®v¤£¾K»¶k~†åFkh'§lƒ2ß,–(kð ÛœEe¬Ã¶1;(š|« ¹JÑDœ¤Ì ­ÅO£9sÍyŠf¢gê:Iy×[ÍwOR´E÷°C ß{×0®Åí±žyJsŒ\3–™?Z µ¯`ÝY´•ql3ß·(ïè4óßCÏÐ ŠæieÞ§¹ˆ­¡Œ™Ã”÷n-JBÌêÏR´Çs¦.íÎRÖ’éç>˃¶sM7 ­uµ²«Z£>¡î‘¥Eî™2óuÚýæbÅm­’v™6^¦¬™y&Ý>œæpøMûM[–Y‹Ÿ¶-ãjJóê>yÄz_Û™SÖÒzÓ?g˜½¶-Qöõý”q±I>xÎôÅÊzy„²6t)Zó'­Ui}zÞÜ+ï=5(sÑç +@Fnš,B÷¶}¦O¶Pö€yÊXž2õl ¬çߨßÁ }EO÷YW]ô¤jãùh(ða\3—Q${(±‡äQóçÓXf¸‰ªkÞrÍ|`;.SæâFÊ‚°žÒ‡3®ñ!Ô,®å\× |žªi’ñÃY_,‚-ŒÅEÖ빎qgÉô{•÷xÉÔÝfÜë0£ *mãëšß;5ö¦m²]¦*g(›¼¢-ÖЇý’6 -‚¶¹¾Ma–캾™²n„&Óhƒ©Ã +ÖPV(Û*Ùæ"&¯³Œ¬÷}­g$ K?;ÌïËÌf(‹’eì,žõ”iPÞÏ<‹›¾/P’ÊœOc^Óp2V|¦i§lYá¬ëb±“I¡À~çšö1Γ՚zƒÑ2˵@·¡•S_K•uûrT¨E™_Ú/;$‰ÅUÓ'ÃV‚qw‹ù +ëµ¼P.‘znåñ?v= Uxù¨iîÓ2´‘éÂË:ÈΣP({ï“”¹t„"´ì1‡ GyWEb· Œå¦úÎŽ§ÂBò~;gã†OMipÚª4ÚÎr̲Xd=ZĪÉ£YbR:j(²°¹±(B6¢ã³:z aRóÞ ¸®.šf2pZ•Z8;WµÀn‘ƒ9Œlsî»Ä¤OY?Ô1õÎ3.,ê2:à§$íïôƒ&;ö²âN4EÊagÐÁ_C¨ÍrÈ +Z7¹°P+x7fÉ"+ÀÞÌHèw™ÙëãNV;7-¹‚¹¼þÚÏìàUà,óµŒ.oX–÷˜wêi›ï·0=¨ìm°–8`t@·˜guãaÞÔy‘éÂÙ£}ã³yŒ[€"8ÇhL[-§wB +ÿee´u)šß|€Ì,j0»UƇ°J¦EÖs›atfÉS¦êØ3£fqW„¬Vݱ˜Bi’²þžf4¦çM ñ~c¸>ßòRh Zÿ_š ÄÓm¯ðÞýâGÿAä­µþ7ÃNã‚_Aü\nôOH^ìa¡H®ç¯÷M I?ó¢guâÄ'./%fâ¤}×>‡ø@ ¿ƒø/žSß=p¿ã/BR"í ¨o +À£Å› žV0€¼oë“|+dü?YòþE°²ÖY?Îû½>þ’ö·jèt€>W?@âü{ˆïêõãyˆ?ë{ó=ñ³}ÃÁÒ&ÈzðøqN÷9ŸÝõ%nÊi¯ä'¦-:kÚ5uã]Hj¹4ŸÝ<éUÅX‡(Uì£ðÇT˜E|¿ºÂ÷îƒìek ûø4d9®Úû F‹G$ÖÁû8/"JWýd>|‰ð7þ+€ÿÀŸ*ú È{ñå³¾B;äÈ{­?€Ìï[‘Ÿæ¹ ^A”úõµ¬‚ˆÏÿ¬¸%£Ëÿä­½ƒÂ<iÏóæ;;׋ñ +$ZÓ’¥•h)Š›¶¨,½Ä|©¼k"T¥y^Uä‹Â]%®r45_Yd%ø‡{(Ú¯®IþQ†Í…ЈÛePÄ2dÞsý¨¸”Ì0i-Òa&óŒkà¯r8YDv0i-Ô3í+ú|-Ê:¬Ÿ«Í¸èiFþ{í”zºæ÷΀ú@§¶j¥”™¡Hìõ³Õ§¡*ê';L§†º;ÌS!qIÒP6NPƒI­jiGõžs‚õltMà«ð%¾=” IDAT^G±Xh+ÚE™cUe]ÐVbýø•¯sžß7†Ü=ti—)|Špcå&)Vl]E'ñ‰>W;OB²3øp–ƒ5­íÛ—ZkͲ/²š³Ä0h­êû¢–QYdûf‰Õî{Ú¢§Ç|m³åYG9¦Déù´<íÑt‚QšÝyÓÆÂ󷊆ØÀirÿò"Ë›ÐN3~Ê2ÇíªrÝ +;¿jªK0êÌoµLûmÀ¥QD¿¦&ÍÕC|[­ð¬jôXÌWø¬sm«Àµƒ _ÿ >¦éI&Íþ‡•BÔÎ ŸîEŠùãú™÷ Êøzéî$ÖœÌ +ìúL¦›wÍïuÄ,M©¶·3Êdü"Së’{À±XfXÊÎ4w—~ Çè?ô†¬N0}/+âGé#W|€Õúô6çSqø¦Ã[œg.èiH¤sr÷ã®â¦œ I=¶²>UÉSé c[˜=.zὲ6[Òþ|È¢½nÊœ¤ì_‡ÖŽžû®úf´·ÙƒèWžbË%íO_Uà>}hÍS†R“‘ †›‡>:¦|oú¹,¹®nÃn&{.z’¢„cà{‰ÑŸì×$a’¢Áša½1ÅÑh@Ì’RßÝ€˜‘|ÀoîÓ€˜=½‚¸É׈iš›zg3â&Ú ½ª°ÒÞ[ò +"­_V +NÄކ<Ǩ¥|‘É_LAæ‚6£ÿbâ–—’l'd¾„¤iË ˆ¹Ø·ž¾o#ÄÜÎâÛ¾×g;êÀ ÄŒQ§*|À)PÇNHÿX\‡¼¯ŸõÛ¸˜„¼ïÕÓ¾7=.@æþ SnuFYk.¸ +âò˜ù Èx¼›ÿ›çÚÓ®§P:Ñæ]ŸBÖ=Og¼ñÔ›kBö–aã4’&†ß…‡ìÏÖdüˆ nž¿5=u]œ®AÆc¿éB7BúÄ®BÞs¿õN@úÑò(¯BžeØi"çwƒ{À_©-¡˜EÜ ÿUHZ­²XF4î.ø®m@ÌxWCÆð¦®;àçµ®@Öû+g¸`þIç2ÕRàÚ6Ä´÷d\k—KHvϺY#i¾o˜Ï› ©ÂVCÖöÕyô¼*;JØÙ[¬ûÍ é ?†¼¿obe¸´fa2·oƒ¸µÝr©2]¬E”‚³ßsÀ¤Ï-?õ$m_:~âKÿkÉ{»OÇ|Åֺр¬ CÎ"W ®[¨–ФnÔÓ–§Lƒ~SæEŠär EÒ¤%úÓ Ö^úµWgè×ð¸ÁãÎsø’üª*;À ‚”ÕIÚ}£[AŸT‰3ìOóä3i •ÔNQ´TeH^5×–ÑŠvœzFMc iŽÉÔvûöÎ\·¡ºRðåÑZЧŽl!]ÊZ£5ž‹Œ²‘«™\K´ùb?ÑæCÈj—RîõEC¤5]ÇX)ó ÈÕò’¢ÝZãù~Ô±Éðdµ):×0Μf¦ÀSŒk]ëN'Z”ôØ>9íÉ£yÆ1ßg}=§¾QˆäžFîØ¿\àÚ9Fë}«Àu›Õu/Œ@ôKÖzi‘Ûî £=}Ôæg?¤³”U½ßÍ‚ÑcùõQ§zÏ BªIkÏëÌ–T5Myú¬>°ttŒ2G@ÙγàÚXUCŒ›Þ^fº¯Ú&Ít‹b‰é~P`2 +ì(F6M#ׇµ(Y?S>(:¢žiT°Ìêú·§ê-šŸv‚²Qfe X2õ¦,ÈeESLº´+zþ:Éç·ÁnwÊ/q8‚47ÇñeÊ;ÜO–ž`|X`väï%Ê¡ÿY&ã Ø¨².^fdfæöÛ üû´0f—ó[“ÂX¸kå \ê ×¼¾IÙWÓ}ES¶U‰«L_“­pQ·¯Ãêûkšqç˹»éub™£ÓD“»þŽºés×io¿nˆnFQæçÜìEܬ"­ÈAp–‘»ÅY® EWYþW ÞŒt£”É« +r3=õËoØ´²Ë”=Óîeâ h~¨ÇbJ}í(ž}ïa'“Š#2;ãÆ0©cÚFJ„PEÈê`<õ).m1jP´ú¾ÎÎÃfósct*|ÆAÑ|‰~!³d­Djr´ÿdµ‡ß}ñªÿ-Wm‘…¶AH´m`5¾Ï:ÕŽÅGs1ôÑ&J»SÊ®gü°µÌêüòŠŒwÍìf:C0Çè``.³”÷¿Q÷µÌßf˜ ec,™úmüƒªŸž¬±/Ö0j,1®ÁØJñÇí©öZ†gØc®Ò ˆÍÇí êu„q‹œA£G<«í´‚›%Šà±.íãñ€B⩸cÌö÷([͵œ~ÎJ9lrù¯ŸýÁê#+7E¥/%èyކ°¬.Úà<¯õ÷¶HYG:)¿Á1¦[è5mp5³Ã@ïf´†.3[€·‘°m”Ó,ò¹ê,RæÄ°µ¢ké·TÙ[á=ܱFÊÿâýBÓ2|Ïi±Ì8OÛ5ß_æhÇäɣŢ‹Œ –ulƒA[ã š&(ôËc™"„j:u[ÁÔ!†·GïµeÏQSÎó\äðõ³~ê³Ý%Iºòx[¯žáå”23ŒóÞu²ŽÆéܧX¯´Úe†FÕ—¯(¥iˆ]t9ZÒð:¨Ž4x¡“8Ëdð‘Ë”Ãè Þí$¥{ôû˜¯&9‹ÚNß3ýê®Gkîï F>›‹”Íæ(e±~™r™§h{^bøa~=“›m»¢gi2r-©û°¡ç€f }iíº\ÙŒo(é= m¾sƒUêßݘؓ~Ažœ6¡&MÌIYO^à`Ôñ‘¦¹ ±^*z?ŸÐt™²oµ8Xh’2Ó¹ý?¦hÁ÷Rö‚yFó¹­ÊYžh‘+k»dcviÍõZFûdÚ!çf¥Êxž§Xy´ í§ð –^2ßï4åÓÆ@Çôã™m°nE‚XúH»YYœ4m®‹§œ¡hø÷0âió°H‡£îF£-×ö1}ͳ +[Ö+Ä©"  “>€¤f²¸àiÿPá}f!i±tÊ£/!)ÿ~\á}†‰ ´fié¯@Ò»üzP |©$O!iµ‘Nl $í‹ã”*u½ã$Ö¦”ß¿…›c>A|­x ’BŦ˜ú’r¨Hʧ¢°)²¾€¬]·CRSÝIMµ’Êé8d¼¿‡xj iHJž»ÌçÏüÂü? IÕö8$•Õí(žq˜x’zí$¥Í«ù~'$-žÅ HúªïbøiÚ]±È:ðH¦‡d/X àˆÒ0•ÁÇþ“ùÿâû8 ëáOœ6<à;%ïW%6xQšÀ·!ýð¢ñïBø„•6~& ó≔ß?ƒð^øÕíuç~¿ñ $夋 ¦m?©è¾nÞ@ú¸¾yöO ýð)ªÛ·g!©:ï…ì“÷ÃÏ“]‡<•|.ìƒðÏŸøæ»íq È:ù£Šï9< Ù£®CúôT¾Aö¸ã”+mžŽŽAúð:d/ÍK58áïƒôÿŸöyÿYHŠÊ<¿ƒÌÕsµã È<¾x*Q@Öt»æØ4ž«Íÿ6UòÝð¯K>œƒ<ß{æï¯ÖCÚy+¤>‡¬¯BæÍzȺü €{Ôuoø _…u aFßGòPñ„¹ë'§ö”©ã Ä_ö—Aöó>êEìA2¯²Åƒþi€m&žrªrLÁËÆÔÍõþ%d½²à}™øýnŒy‚••w:“ÆøÏo_B6¼²ùr‹Àæ}¿aRíýí‚þ¢Mz²¦=ÙÄW{êûrè×ùœÍtVF^»ÆÙ5üsóùQ§ÜgÀ/ðõ‚eâ^ð7滓Øŷ|Ïüï +>„0I÷:õÞ€ÌÝÏZ @\Ȱ2Vu®îQÀÈóÚ5ôCH»í3Þ kÚzˆÐå[9åìºr Qn{˜¿7<åoshµ¢,\ðš¡:¨€Œ»Wà_Ç]؃ÄH¯¸Ï1tÒ0@éuì!ëíøŸˆ}žâ9ÀGÏ"âçî€Œ× ëÔç¡À ”/73´àó„_øÑš`¿_YÇA$@­r\mðü‚€ºqÂ;|™GÇQÿ:U5Î@Ö¼÷ ]€<¾9g¯Ve/A\o#c=ªS`ñäжÊùþSHßC˜”zòBeî‚ü d3¼Y Ëj¼à/‡Ð–ac+ä0|GMõ[ äÿ¨©þÌ@æGÖbùdQ» Â|à_œ2[ ‚²/!íÈ||²H܉ø¡àDpw27o6aÚ:ÈÇ]?žð÷jÃaDRZ÷}r€ù&d=Û„x[o@\_ºÛÔcßïÛ±ð dŽ|àÿ®áªÄnˆ0 Ãæë~îkÏkøzjƒ&!‡‹Ûü•ùÎÀ-îðóÿDÞsFúiÈš¡ñ!dœ}ˆHÓÀ0ÿO@Þ‡´kMãKwô"òµJƒÆ dýÒ’FøûCiQ=˜ƒ¬]¢¾ý0 7 ãæCƒÔ 5 ãö ç@aqòì¯".€­v߸™s« k" {ú0ù•²XáÝWAηB.× swù›“µÐ=?äá=Èz_õ~;cÚr"þÅUx…å‡.!ø}ÙûÎat„Óý`‘`Æ«…¬ …×âA ÙŒƒ ªÕÔw¢íz+wá+ +í z?Æ $4!“â1ôÇð¼aûqM© k!Æ[ ÏøT ÷ø Iot!̲բRƒ¹r OóU³&jöП§Yk@4aO!²^¸Œr솗 Â-ç Ïþ.Æk\vAöƒ?Wß-@CÏ .$Ö&·¯"²&DÛÿ +d,݉ˆ±z2ž^ÄʲÏAæZÝÚQƒŽ²q¿YUˆ»|ˆÁ¼Ù.`4„â!h@„ö¹m|{°¸Ù¼Â%Èó[—ÏÌwŸbø±–f!?ƒàCŒ¦NQÌ"Š+ñ†ßÏ73¦ óÂ$Ñxÿº*¿V¤@cä°ñÂ6X| 9ø¿Ñ>]Ȇü߆ÝÃ"³éû @–ßÞ%ˆÔì8ä ±’6Ðm&]?ß*È3ûõ/‘œgŸC6ÚkÎGX™Ì}Y4!ÝãÊAc2^íýä|ŠþÖµ)ÈuªÑÖÙ`†×!‡Œsøz®ëUbrØI;°u óþ¯R~oB„_ÁúcŒ1Æc|­0,€ErX³Œàj$* Œñg“³ab-D2½’¬ÃÂ,„Öå/ps÷ß:È|ºòœ! +Ðô È\²´¯Ó߇-¨'ZõcŒ1ÆcŒ1ÆcŒ$†-cŒ1ÆcŒ1ÆcŒ1ÆcŒ1€7ìŒ1ÆcŒ1ÆcŒ1ÆcŒ1Æõc,cŒ1ÆcŒ1ÆcŒ1ÆcŒ¯Æ€1ÆcŒ1ÆcŒ1ÆcŒ1†‰Hæ–€´ÓºçZH*ÕºïÙ°Ðý*X4ŸçÍïYhØ༹–ÎB²õÌiÈ8ÀcŒ1ÆcŒ1F½˜9¾Qª¹ºƒÑÎ@RÞÝ + ;ˆ{æaÜ‚q?Æý øºöÃZA²ÂÝf¸k pÇQMšÈµ´“¸7åž_B2d}PÑ=9¼¿gMÛ~ëùm’ +>-ÃÙ Oø»ÆŒcŒ1Æc¬t¬‡äƾ’ùŒç LÃO‡Ó¬¾°”zJǪ0 aŒîE”Çý„„)¾aÊ>Åèg1ù:1¶ym÷øt›Æý0^1m)мàç¯Û +à9HF¬¢xÀóHO¯›‡)È»¼;¯ „oÙ„¸`äð‚§|?¯P¿€9³µ’{Úæ ·¥k† þ¿ÙÄÿµŸg`-€÷kª; Ïø‡!ÜwÐØ€té“Å5¿TŸ×@¤šyø™ù;…l ™Å¬<æ¸iþ^Ã8¥eÌAí{K ‚á—š~°²èßYÿžÂÍß<ahnÏ){²F¯”ô—/ø6„{ À†Úšz0a€„¬÷wfá +€g0š{î×±Møã~ŒûAðu©ï«2Ê}ü}ý=¯ó›œrsÞ‚( ²wÏv/§x¤@ùã¾ áW6@Rzgõ—Æ Èžú/™¥H†ÒÉ]$;$O“\fX&y†ä’;MýEÚ“FÝ>ÛUWIN´o¥S/ /ºÎ5€k¨Ê·Ë·Û\M’ÜAò eì.˜v\¤Ì‰ƒ”92«®™!ù,É“LΙÊøß<àçX)4Ir¯éÛPœ ¹}Ú>HÚãé‡3$'F muÐ'H6Gà²hŸÓæeÞ\cz É7I.yßP1œ¦Œÿu#ð\ ’/°Þˆ$3¾¤ÑeL÷‹eJ?².´«ê~È»ç0ú!_‡ñp1 ]_‡~ÁJí‡ ’‡Rîq–äF&ÏQ“æû½>ÚÅ"³÷Ç]ô÷ù1’»I®7÷Ð×LSøòÏu¤ì_Ͻ6¥ž<Ì›ëËð;‡òÚ•g0Ñ><1Ç«ç š7PÎeD O¸^Q»òð*Dóö€¿Ð=‡…Äâ# Çü©úÜŒ£<ü‰ùÛ2uäáyß (×/©ß·Y¹äáŸCÆaˆÔîˆ63O’ùuÁ¯!¼¿]¼éÏ›] ¾"¡÷±Ç0šÒ²˜€ì õYϾàŸûmP x¢áqñ%DcTTó3J˜ƒ<[–ä€Ï ‘UÀ*Ⱦ“e%p À»†ÝOÞå¡ +ë̳þØY#CµB!ødÏ*k%“Ö–·ûÐü¯­ß¦ f±› cõþ+ÛA4„ÇÍ=ÿ ~›†X“}ÓÔ펫ºúÁâAÓ®/!|ªmûǦÍ"©­-ÛÇM!êÛ+þwH?<„tÓâºúá3Ⱦ¥ÇÃ>ˆ ¼ôus]Uýð!dm¸yÞÛ™Z[é&"ÉãÖ=Ê`¥­ Hÿ?¨¾ûò^ž@ò܆u¾‹¤Åwüwç~oAÞ§Å È{xaVèö¼ó]ÈÚ´Zýö€¿ ¨^€Œé¢ø rö(cÕ~bÍniœ"˜¥h&C$UË­ðIŠæ÷Eãkéùþ„)RçÉ—X\ƒuÐ\´àuýÒ æ¾|ßaPÏ÷Âtk:×P•o–o¶¹šaymcQ\¦hdžýއI ŠtUc‘²Ž¼`þ·¸H™óúßÑE޾¶·ÚÌìõôÙhcU4ÉtMÆʘÙK‘˜[ÚKÙÇ|Z¿EކÖXÓNÕ¾%ÊúvÌióÚhgQjPÆbšÆ‘òžf¾Ý´é—<ëE +°—õ¯© ŠF®.¼ä¹ßï·ŸÕõCä¶‚õl ¼;¡ýp€ÅæIƒ²^¸ëD•ý Çë2£qÞp~{SÕ³ÛólEúŒkFuŸöÔ÷®vÒÝSªì‡óômõ´ÛùmûÖÂx £÷|–Âß¹myØSGÕýP%VÊúð¬SO‡rÆ›7Ÿ»ëÛʤ†¾CyþI&ÇLr¶(rž¹¶E™³n;ëéÇ +ãL×nÍj—ïËíŒ3Ù ”¼‡b†b‚â£sýnÊ@M3ý9ËðÍ{’ÑBúRª¢9ÕæÖ€ï=hÚ`žÑ’kγìéƒ5Î5û™Ä U~Ê)¿•ÉÍy™2†ê|ÖÊtqšÂXn¤0›æÿ')óÃÝ옶N«þ˜§ßœ©Ç¯‡+Iéñ´La lØqs‚þw?CYS®ª:nVSøL_§-6Ž@;«"wã]&ù:ÃýÍL +‰.²üV5Í3b¼/SÖYû[[µùrgZëéw‹“”½ºÌü´sÝ2V»RîaqŒõíÍ.c[:Lglë@Êí‡EÊž8_’ŽxÚÕav?tú¸ß&×Ô*úá0e¼¾N‡óNù‡Í³bܶAÙóŽyÚ•Õ—)‡)÷`¸Î´å(“ûçsÍË”5±[C?aÒÔÌ>üÛ~H3ÏꇋŒ»W†þ·3Z‡3yp«¢ê@‡£½>¬e\°¤]óæ»nN{)Ï©ùš&“äLŽßŒ¿ïm¦®9÷ì™ë[ŒÆ¢^—®Ò?Ž\Js%¨OfµËýbžIéßeáò1“”«EYÄæ)Ú6´›ÑâºÝ”kÒï;±Ž²h攎 X©–®’ìAñõßw-e2î£Lü3”…ÏB/Sñ жteQ¬âP4Ï$ò|U}ZËôo vÂsÊÂ'Öwø_dróö‘ް!§ìÃLnîe%¬+^rúZoÞ;)‰mÒ ã›‚Ë­tZÃü eß´³ŽqAÊš¶¾D=–¡Ö8Áb¾|UÓãRgé·Z™g´n.ÒÏ(í¤_Sšùëb(µLöoº¬V€â2¶Ep•²7÷˜/Ì#ýŒmõ¦ÕÂØVÑEÚU ß~8ÄjÖ—9&ù‘ƒNYr-®úí‡Ã)ýPäð¿L9иÅ´~° +°øáß¾·I’§*ì‡:1ÊóBóð§?l¤ì{sêèšëç律­a?Ääy§m~ëäÜóeSFŸA§·„~3§d´­n´3Ú4™Ü,2ù’7S¹ý˜%Ø€û™ €6ä´/D‹×1eO唫‹,cy~÷²Â’ )iXd$N;|g‘^,-ò˜RŸÖòTÆýÓ$¿—hoÙû›”E¦çi'YŸIoN¤ô«Þ¼¦)ï¼eþV±Áµ§«L +‹>ó,#aâU§?W2Í2?ÕÍtøßâ<[¨@8‹\“a¦×3ÎÔŸdö8u­óº]_`JëÖP¥ENËÔí +‰ÉôÃï2Åb Šûû% +Ÿ²•~%Å,eo;Èb‡†%ʘÞNÿø™1¿*Xocëë‡Êج’Îg´óL ÷Óc§l?œg9Þ*²Ü HÿA§ša\Ð\¶z)ýPôðo•>Eû¡ìá_ÏK­˜,Û7BûÁu1)k™Ø5×Ï{~Ki¸¶ù½S²-ÛÔ=–˜ÏŸ ™BýÁeŠ\-äÆ%o§)÷,å…lcÜl[ÓVS¦m®9ɸfà “L]ÇiO“f7ˆaiOµ b][é7L¿BÚá;üçiY}‡ÿ´ÅL?üWɬÏP6¡ÐhÔ—)ï¹ázÆûô%Š -MÈs•"ñ½blVϹÈêL×_Vý•i +µB(Í%Eãf²™b|ü/³šŒ“Œ QÁÅúÄëùžfëÒF§OB­’I¾Ã—ý +^gòà>Å¤Õ MMSÔi{f‡ý­åE";wXLˆiMƳìK”¸(E„›s 7al}ýPµ€,Îà÷KÚÿ¾l?5×.2nj<ÉhLžaüým3å­°Ì~âG¾Ìä¡ìMóýãûª¶(8âôa[µ[•²ýà[³Ëþ‹Ž‡~ÿ–:ôÃ͆Ð~Ðﺟøl]SÇ|Ê+¦³,‹Ûë(Eœ IDAT¦L§öè{åKB2žÔ̵XЛèã´£¶{Pœ ^v0nþoɺl£h/êº-Œ&ñEçžSŒo~§3dJ•«*eGQj©6TeÞhi=³%ž‹”ɱŸQo5mÚÆ¸ð%ëaŠ,)²ï ßÉi¿«á&³ÿ`2Yíá—ç9BÑÍi{(Y÷Ke·,qô¡4Ϥ9_•ñ;ZªÞ~6žQ Í4¦¡.fxXÔqžï… +ë~Á©{PûÆ:ÆMJ—)ks‘÷6ŤôAކ•‹ÏÅ+k\±h:CÿØIÑ2ž2ý²É´Âè?@¹¦ÂEÈ·GùÐϾµþÀ»§ÙŸð÷åd•¥Û®ûáLmÊ£IÆù—.ë‹ï2Á8ÏR´N2nµpV•ÓÚC2¾çiñ’ú~ÃaÇó´ó}GÕçú¥k—*Í`\àX¦²~/søýÂð¬VóoÉŒ±h?ܬé=|ïrŽÂ æÅôêš:æ3ÊÌQæMžP¿mêêd”i0:?ùÆŽtwsÚî‹g2¬Ëj—þ Ñu +6Í÷îdž¡_úž÷ ß`´Á¹›vO]×Ëx ªÜ|Ö×H:`^`‰Pj0=oèeÊSF[:EÙtÒÌ“Î0ÝÇÖgŠw‘‘ÏaÂŒêk|÷Yp®é©ò=å—=åË0V Šf% §L½ë(ã~e¢»ÕSŒ +õIÞHÙhBçÍiÆ;{)Œ¬;&æï?*äÛT0Ÿ¯SÖ¡£,­½©ê^äÊ Ø`~ÙÃÿeüìá蚎[rMÿO<_ZãÔ_çÁÅÒÆçíy–‹e`Ç„á<«>¡ &÷‡¼qy€ÑÚeŸiëŸ[é·D+c’e–nQ…`išqßÞƒ¬Æ´ü_¦ðŸgŸuþ5X´nVt™ÝMUÖŸm’q^8ëìÔ5eæ3Êèù“e Ù6e:e´¬çù][xèyç£<.f´$SóCº9Q¿€äμ’wÚæü-$×öýüˆY9»/úÀÕ÷›Üa꿤¾oäÔ§q—sŸaà†úÿ®ÔRᘅäI½ßùþ3ÏCòº–ÍIú{ÿhh’ßþ ·˜ßïð‰ùþ{ε¾1㎗ ×ÜnÈ_y›Z£LŽø!ÏêâcH¾ÍŸ9ßÿ’/ü{vxÅ´å>HŽQK|¡o ùn¦!9TD>Ι²ïøMJ™9óû}æó| +à—õ¾å|¾à)óÿ+uuáA”{®ëêÿ[!ïýû%ê&ð¯ïBrÔf­ó1bçÖówàŽ÷QÀ$ǮŠÈx(ºÞMø]Êo¿‚Œ-»†Ü  ™ïUc’{XÏý@r^ÿÁ{E>¾‚ä<~òþï2ô¡©÷‡eÛžA|ïûùãòÏÕÿo š÷@òWý>~ Y3Cø@rп࿨§‰ü}þ]$÷Ï2ød®¾ Y'ûÉG®ñ d]qó¬kÜ¿iãÔí‡[!kMx“†ì¥ý@ó!Eûá}¯fs¿¨~û)„Oø„ÏzOýömȾu+âkà¯!óúAõó 0ݽØîuAÖüGÌq?™»w¸9?¬ð¥jÓDóûœ)ó[§žíæ^«¾îðªjïdž€âýp³"¯îUÿ†dNúÛçãïEÐ×oê³.ýþV#ùœÿw·BÆÑÝ~‘R×»¾¶Ì™¥,ÞÊ-¡¤.\É›–œ÷ùãµ(RžíÚEj²•"]±Z-7â7(>»½Œzµ¤¦ÐŽ:¨©Úp¨Ïº62åû2ëÕò6é÷¹?ȸd´ç)ã¢ëÔÝ ¸†ª|+°|›Åž1­Þ—®]ôÅ?pq–q­µk®¶Dé×')šÎÍŒÜgZžgšqó¼nÁþ&Ysö7™” +w)ãßjGËjî]¼\‰è’õÞMÑj¸¦d!šÿ6ý¸ÜGßÖIîÚ_4®Á #Ü,óò®sŸ:2‹4×.²x^ô<šfr\ìç`ÝAÜuqÅ´øV3ªÁÉ#kÅ¥¿›Umò¹¥=[ ~׌ÛÅ2“ýÒ$«§!¦åYV*yýp3!´zÔ`˜:4ÿ¶½eûáfGV?hKß¹ÈuµÉÚƒ»¦Ì|F™*-tÛÓ,µ;_^ì—¯©A¯Ó,´ôÀJà~ ‘ˆ|"¡óiQ‘Ê]w¾»"%qq "yqMçD’·èûÝ‘ZjpÈê×€b–W"½w<çùîyß)PÇ cìDš¹À7!b+1¼ÀG>û"¿Ûüv"‘OÓìÁï ’z«AØ„ú´˜Ub "­ÓÛHJ…?1ß[iêQw;Ÿï°"¹] x²Î>àïÍwO!²žxÙÖDKôXÊïw@$æÿ\A[«Â âÚ²/àŸ·Yx ÑøzÀŸ¥”»ä|^]ð>yØ™›vO²ñªççïüg{!}· +2Nî‚ìÕe­ B±‘6Íâ1„?çÈúy²^Úñ}OmºIžã ÈÚòˆÆó!Èz¬­bÞCØú¢ýÿ×€zÖBÆ„µ¢dÌ™ß?VeÝ÷Ø€<ÃylµKŸCúñ-促_Bú`SF™»®ÙÒýpɽ¥C÷kh?|Vk‹¯ ïÕjWCûásó·.Íÿ¯œ2uiþm{¿2Ïd×¥Ð~¸Ù‘Õú<æî·€ðv÷BÞÕçõb5ódmKƒ]¯C¬áÒðd¿ù<£Ì÷ ëðíu]Bd…›wö|r&øfN¹~açPþyQIÒp”þ(ž³)׊t¯Cñõî¦ÐŠDf/EÊ㓎oaº_z/C’¡¥mÊö­ãÑ$¸Ï¯µ(ËCzžYÆ%[d2RìJ£&q8°/šÌTeã5h\eÜ?ïhM}¨}ͶŽ@_çõ§¶nIÓ’åõS“" Ί +¿Ï¼Ý?yfF…¬ÂMãb³dE¸…ù-$Ѩe‘p#”Ï—¨CÇKèf”ë8÷jWø[÷5ï°Ú”`iÔb|~b½Á'˜´ ++²ÿ5íyO2n-‘—Îr7ý)C‹ë ²'€ùþóyÙ*&)ü}öʸí2n-v–~«°mŒ[õ˜´L 0™çŸšåׯû¡Hz´•BZ£Ú¤h5µft=å}ù"õïc©_›&Ó#õïa©_œbd]w’q뺇eÐûJC=çYÆ÷äÍLZ£†öÃ>ÞšMGs~O73²ú¡£Êµ3Ê­T*ú|z~Ö«,ÀãêyèQÌQfu¦ms”Å++Ý™¾Z=ÚÔ7i¨‹Vm(sÛÀ8ÃX‡©hò Üà~+‰\“¬%¦§=œ£lÒn ¾óÓ%¦1SKì/°ÕZŠ«‚AݯîÓp¿!×âõ’õìdœÙM›'g(sQgW˜~È£¦­îZf˜¼Ãÿ,óÓ’Âô ûY5Í;íë–¬g-e?Yd¶€£ãܯ]ÑslcÜT´¬@¸,Í2°*/ãJ?Ôvúð@‰:ºô#/@¢¸ö“²ÁÿŸ½÷±«ÊóE?÷ž@ %”PB •ÇÉå#ýˆñ¡2Ä!ñ!yè%^Ê!^â#^â ƒ:”â ƒ6Úè%=tˆMâ ÃqˆM2$¦‰MÒœH2TšØ$M¥IšŠ|Þß½îúîuÖÞ{í_ç쪜|©:ûÇÚk÷úñýµ¾«_ I:ÚI¨3)ß>miNêÙe¬tÌs4>äy¿¥o»†µ²8Èœ:FR¨ú™(Œ@‡Ð® G$ùÁ·Ñµç!akR‚ VCB©VÃ&ñ- 08]’4á—›žÐ¦NèçK¼ÊIH8’áÇuHåGå«U¿‡„«¼’ùäÝ–["5 ?œô§ð‡áï†$ß¹Ésn lÂÄçàçÃßAB‚Ü%2ï"èï$d¹ÀðaF0‹xò¶c° ôž‚´¥&…¹O@Ú΋°ËG>‡­sÞ²Þ‚Œ7Ç mt3úûJ;ºîŸ aaËÛ!anøsuÜ„.ƒ„¸%…u¯‡,¹É +G3Ièš‚µˆ'½º›./~ éï«Ñ&ªáò(mþ +ÅvÈ·[…äpÖºñùè]HÛ7K’îAHlŒ#Þ†¾F±ov/d޹/ú»Ê› + Û/“ïÈ8tB{ÉËFBð-Ò—-½ùoø1m?„wIË랃È«!ßôsˆŒð8âýƇeI ¿Cøûè݈ôºË›!ë›îDýk³°¢ô?€ø@iò#Ü/@Ƨ_A&wŸ!ñ;?‰þ×BµoZS° 2|i?îñ,å+â†D®CœŸ¤\3hŒ£¿ÞÏ#l u~›[b¤½¸k<[ây°Vù¿ùV?/YfQüÒ†^‚0¾€ŒãUå’q38?ƒbù:~€ð>‚(´&;zè½eñ È|`úÜý±+­ý¥)FgSεa3Š?Q`>EXþ cly#úÿ„ñžƒýÜ|+gPL–Ó|¸ õï0h„ +æš c¸–%^(/&S¿ù?@æúG cÆKêž·!c”ÉÔ¯úCúõuijû +»ÃÀ±è·Á3°Æcë—QY÷Cd‰·Õ¹— }|3Âòk¹ýb%)ÿy e '+ ZÞZ“pÍíöÿ’ ÂÊð@ú—o»6çQ’`=âFÓ³Ñ|Ø ©÷ÛðÊì@÷Hn'³;ØKo®CÆ‘QFNRá]'T`-%,¨Ëxhc0!­óì_ZÐS×õ2Âôúë—Ϭޡ¬ÝéRÖ÷ +Òñ¨ŒC”.“Ï@‡é°¯r÷CÖ†4šb<äì4³žµ +c>ƒEÏu3ì_CÙ¥|ß6%,tûÃvæž«Cþ.&\£iýËè©—»†°í¹§ð̺I¯ç58Èò™çóÞ¯¿YÓÖ¼ZGi—nxÿ¦è¸»Ï±K{˜½;…»Æ´ ¤Ã@ ޳º\sª\ÚÚöð§Ì¾âëi—p•]—^5é9æ(«»]Î&\÷4óÏ‹i´ŽÙË QÖDf½óç]²êû,“ÑI¹O/[˜`öÒGö0¾¶:!{lû0—r_VæƇ²»@5‘ô2™P>öœ¯#ìÿ+Ööoê»Èø²†P>¬tÌ1™;ÔuI»cÌEç»)åÌ;Ï\—p][]“TÖ¬SVZƒ^tÍlÂy½l{cJ9!ÔŠê’¥cŸbEòEh¶ú_øëˆZ«œ±L®†Í¸ëç!V± Ñÿ'!V»“¨ÆŠÿ>l¶è§"úb= ±.-ùŒUw¼òî¡ßÊÝ›R0xÆëczŠn¼î_"y_çí°Ñi!43ˆ{Á“¬c:„Q}~±Àkòí^ÿeBMÂ3è÷lø2›ìÙO!2ùÄÒþ0¬GùmÄ¿ ßãqÄ£f¾H¨ÛZØŸåÏì†ðFTgã!uû­oiÁ#(k,ãa5™Ü¿‡ô ãÈ]pô0mòx×Ã~¯+ž5Ì@,ÚçÏÚ¾ ÒçLDV’ç?ú#\\œ„ŒÃl.Ì.Ú³rÕísÄ#)…Ìa@¿7ç’½£YhC¾ÓÍ6v/š!õcÈÜûÄ3øÄÛW³ð>’eƒ"xÒ§ÿ8ãºõñf ìÿ-áZ÷{eyËf»¿2®ÿ $;z¾¼b; ݇d9" iïªÏ]Gz†îåˆÍêÿP>”Ù½¢‰02¿A(ÖxÊ©Úóÿ%üQqU{þMD×'ê|(V:ÒÞUGrÝÑyŠì€õ äÝùöeø{"ýÒÆ>I¿<_¶wW2?@Úàçy˧|‘í«‰îUÖnÖ… +¨§êÔ ¸Þõôž¦xëç)ÉPf)¢"6ųƒâÑxâ•Ó^·¼û¿vÔ½W€ÐYD»)e¼xݬÛ$¸žíÓõ]b¹¤vƒ 1úm¸|j1nÉÓû‡¾C±P.1îw{Í09»ç“êº Š'æHµ:¡~¶/Û²eöÑ.Kª®'`†ñè€=5ÖC÷£" Êê&ãíX`Ü‹a<ÿi ÜÆ(ãU>|ÌæEìL²?ã?™î¥,Bz|ìEÇZŒï Aßm¥Eë=]by/@¤3Þ¿P²¬ãóÁE®M0Þ'¶±ßcoúÏ9ÆÇ€´dˆÝŒ:´™Œ´d¹‹´É7}Ñ^u"i/k09`‰éWmçúº’Mƒtr¼¼|˜¦Œ)&S¿ׯie…oߥc;m¦þyu¼E‘eIÇ´W|#¥ÿùv8@»Ã€ö®eòóªÞ;JòÁ´‡:<ÿIÉpëðüob\6Ρ•Š,>€ñ¹ÖÇë¹è\7£œÓp»|ÏêßÓÌŽ4ìEeÍzÎéyåHÀóòÐû»v*~Fm€ ౫d9š½€ëwq¸ÐŠ^¹!çûóZX륔£ÃgÓµN]“2ë,²n¨ü$ãBKÑ,îƒ"~¤ÑÍà™´ÆϦmxâN^fÒÖ8M ÓÜøÅ޲ã‚£:m¥L¾®QÆmgôã"‡³u£›í_ ç-Ú~½HQ¬©cŒ+ÅMÛp<âÓEÆ…å’Öˆ4¯ÊsÛWYE¯r·0#e,L ÅËÓöQÆÅñˆF<š®1[)\bñe)&{‰Íß‚S×—,·ÄÍjînW9HÚÄxÛ™ ôû«”>¯Ç¢vJ9Ý€çºF$ƒ£ÏèPúû ÑK©W’ñ0D°Õ|¨Ú€7LÒÆÃ¼|xÚù}J]çîH¤åd½óÒUu|½sϼ:wÀ9g +“ÎñŽºÇ Q×Kj´,Óe|—¡¼|ØË•¡üƒñ0ô¼|X©áÃ~u½Ï9딕Emõ¬*Æ€^TÖ¬sÜ•-ëpbm mË]Ö ËëÝ’o‰Ê9U²Ã|2ÌТ_Áòz@´õhÑsïV§ü$Ë—n„YÛMé=Éã¥'“ãžóóêü›mñïÐwÚ¤ÎõØÿ} ܽ}A`pŠéÛ7ºÛaqŽ¢·_Sån=CöoÖ1³)u©ƒÚŒ Üî$ÜŽŽ¿Êò¹²HOô_Õøœ"4Nù®ZÀ­“¦üïÍû×ßu¢÷u÷‡nµÙ¿Þ¿ÊºŽ1Þö|‘2kÙïy-ºMß¶ +Ê%ã"ãÞÇPr 2|Mþ È8޲ìL›¯t»‰æÓ‚­FÚ6€¤ôÑÙ„{ëD/¡NÓ)÷„¶š>™a9R‹q#e^>ô‹´Qh ãÐ +ñÇê¸ÎÔvîÑN­ /ÑÊ’ãŒË&Úa£Ld\áÖ2e—ñ~Q¤=¬å¿Åü +_Òø°’ÂרéÊÇsÑñn@YYÔVÏ©bèEeÍ:Çu;ºÊúô W)ý/+ò¡YG¦1Y{º +²ÆîkÈš³êkH†ç;#Z]û +êÉÒo¶ôùÅÖÈ•Á3_—ÑB|›¸·<÷~‰øö0¡ŸMˆgfý"ã¹f½ ëšÜLà-Ø|€ðÑÅw½ Âã‡ÐÜm“ÖqÞi—†çgÕ9³¦ç-È»™5š_CÖÍêõKÛ k˜M[ YŸó6$¿€YSw7d-èK°}âÓÑõ:ŸÀ—èßîC¯9<éü¾ ñêÀ¤M|Y·dÚ¤oíÝww Í1 éy×<#¾.>kü Ñ‚dp½Ò¦L¦x³¶µÂ¾1r#d}ØÍÑ5úÛnƒä“8éÇMY‡>›—ÅÝ6ç[Hɽ…·!¾VÕÝv²ÞOg®ÿñœ'¡0ÛQ²Nô¯S®m‚Œg«!ãWÞ-ïîp~ˆrmíȼ};ªÙ¡À¬u¿ÿ·H—;¾„Ýò6D~xþqå&Șý/žs—!ïy= üªq9áø½ ǯ!,§ÑÛ°|¸ ÀÓ¨fKÍaÂl# +ãÃÈúò3Ño+è_`3õŸpÊ~*zÞ͈g*ÿ²ú¨L½ÃÀ‹1Íì0`æÊßCòž< ™›ŸW÷¼»÷'ˆ¯³Ò¯AÚÌæèxÑöp–ïš37? +×áÃJD(~É‘ct§Pl‹ó÷ }æ)”ß%m¤ |à/rÞ;†øÖ]ç^‚ð¹HÞ„l(k€FKÌãžÖK´–ÓÆ-æË´ÜS÷örܧC·_¶Ó4r-ÀîkN³ß¢©­ÅçžëzŸ}Þl¤õ¬ï©kšæYÕ¤Ûžrì†ëº‘ú÷!ö[œ§Ï/dqöÑögú¯\¹ókVÞƒ1Š—2©ï¥Ì#Uòq+e~4ãþ%f/ê¨wê>Ç—Ç‚L^¯y˜6ßÏ ‘´dﳄëóÌI|X (ʇS¬?Ê­Nr—|–iËÕóÊ7Ôáü£~!ÈÇνsêÜÚèwÖøÜõÜëÒxt>íÐF2w2®Û•5å¹—”v—¤¿UEµ-ãÕ?4º•Ú1ð8³· 2Âé› _+ÙS÷÷r2ÌjzŽþ¤p!¸Dÿ:¹SÌF©¶´54®¡ C;¡¸!\!k0Ýu+§hCKÖ3>ا)ö¡Ë†ISNßa<$ïs½»¦Õ`?ý°£®)²m™ž´B>7Æøw[Çþ¾ºx¬'ÆEJ›|‡Â˲ƒ–ÍöKô÷3ß±u´¼]d³’Uš5ØZ Qþ÷EïtœñÉhŒ¶-v*à{Ô¢±ÒÖ'm㓇¶RÆùÓ´sÊ8E¹Õ“ò4ã}ß èzåYUFÓ¶UÌCèz WTÜPØÐÄ·=Úäwƒn‹O2̸`øaxR¾+Ø$……šü»ÙŸ7¦nøì¤åcy[— ”q{9’–Ëò!O^¨¦‘ÎR–sÎùå¢üƒñ| eù°RPDñu—·äÕ›ºÑ½s9ïóÑ|TV'ç}k—Û‡™h»4éÝŒgY>ÁÅ)f{_zêú^ΗcrR’yÊ@ðe=¸ö_ŠŽ¢(;(“öAú÷‰/âmÓ¼›Ï¸¶ë<Ógˆ8ÇpÎM€u•ýÙ&Éô}&Ç^š¶Öì_37Ï~%_{®\Ah‰É +Â4m[Xbqef Ãö>ÇäµüÚd’UǺëBZ@xµâ²×ѵLÖvß„s•ý9ôû7))ÕÓQtÂϵLWþ[ŠÏn$ÊTô®U%Ы‚¶Ó¯l3:^eÂGNÂ5[é7ú–Ù—¾•á—MÒŽã¡IütÞ—Øœ\-ÊÜ–Å¥Žz¯^Žû´`›ÄCã”9ü4Ãv‚© +¾BÐï(!‹ ¶š—ØœH¤<4Ãxä]Y>˜„¾(óøû=§¯Òfê×Å6“3õ?I›©_Ë_´óßQÆ _Òî0 û{KÕùTTßYÆQe{XNÊÕía¥ ÚŒ;«3ŸÃ¢Ý7WàÙ.ÍGeurÜ3ÎxRðs¬'úoeŒ0yžñ­Ké·•=SÿÐè¦Ü´qåç %$0kK›‹” Q‡Ä\ezø`O]Û+ø’³ôoq³Àì[é7tœfq¥×M 4›qý4Ó•ÄEæßzê=oI!™Ã»êúª•¿*¨í¼ÓnöGTœb|béDÇ/1ý»è0û²JÀ¥a|¢1ÞÞ}LN.ÙfÜc¢IºêX·dý’H/'Yb²çº*òE™´(ãÊíD¢"¬¹NyÈÞ´ðg¡$!hœvÐëŒO–¢û.±^èuLVh¾a5“¶K®wsŒV°vQ&aŸñè”1ü5‰æ£÷ Ý Á\o £’zѱ*žMXhš!:L"@2},ßJ»¬ª£îéåxV›~ùç*ýýÚ(%E£‹À'¯lJ¸¶¨`ÛfœŸ(c˜4Æj|—]ö;£Ì|ÖrŽkyâiçœî Z&ÔÑš:÷èïÞUÇ/©ã®—z?ãroU|8Ìå¥üëí«äÃrGÅ×u@>M‘_:”v—–H½Ý3—rÍJ_{“é +óQs^L IDATY”k¦(2Ĩ\-[’Õïúcv0ÊÂ%ß¶8Fú‡F7ᆠچܣLœûW\N©kŒ¥Û`‰"|mSלf²ÀÐS÷öJ¾ìFŠâë +„IëâܵԤ ´»X.ÌÖlCvhÓoÄ8ÍbûN¯¢Ë ÆR†öþvKð£.j;ï6?ê?B;˜…+K™Õk&«ôh‚2„,©§4Œg¹«Žu+®ß4ívRÚL/[Udú3)íx‚q£Äqn_ò,2ŠTŒ ä®U×í É»?Gs·f˜ïÖ¢´;Ÿ¢Ýcùñ2>¦´ow2ÜB¿áv‰åCrM›[îÞC“´ß.Ĩ=ïðtVÛÍê¶CZñ¸hdË&Zog𡿭A¨£ÞëRÀ34¹‚­A—ýí¿ÅÁîVäË2ÆäH2‚­Ë‡ùe š:5òAêÍ|eÚ‚–ŸµØ•Au;Öß®«Ž»:ú´ó­§Ž»Ñnî¡*ù`äþ¦+ÿ`Äh•|XÎ(«øêˆˆ%ÆÛ[šq¾]3—rWÓ óÑ5”k´Žã.ת:ô†þHì4`IÙ*o¦üG ÙF¯C²‘ÞÉf’™ôCHVů£ë.C²{¿6#éCÌ·Gçþ±T6Ãlü€ÿ +ÉÊùDT¿ŸFÇþ8ºvñÌÐF¿ŽòД/ ,»ùwQÝÖCvS$sý—èÏt‚ü9äîðá +$ëÿïËøVý¿¦@ꆛeÙd÷’y×ü¾òýðkdgćÍÊ=º·J„dd«½S;‹bÙÌC0Éä{¤ŸÞ +Ûü&HVàU>ô($“µÉŒü}T¯¼;ÔYÈ·:ic?Àf>^ á©Ë¿HfæÛ c§É˜Û‚d…}*:ÿ†û޾vÈXòä{ü¡Æçÿç÷$ËóCžk/@øïËÌŠIÈ÷âY¸—3~ ™ßvBúÑ?”(ëï*©‘à—è‹§ ýü dgEþ9¤]Gz¹þìø·DÏ Íîü?!;Üïß ‘9ô.?@Úè1ر´.\@|Ç!ƒ×п› ™çÿ©Äó\><ÉbÝô]~‘ ªæÃÍ9ú $k¸‘³~ˆžûdÜ|I•ñvT/“©ÿ—êÜãyà:âÙý?…ÝaàâòÉ3°;K½¦Žÿ2*ëþèy·ªsUóá4;Û¿ÁÄûMÕ|X®(ËÀîBs;ä;j=ôVïáÐ;üTY–§O@úKU˜€ôÓ59ï{"ë†î¨Õe Ðè&X Œå&+´ÖXÎÜýÖ]2ÞØ¤l’Ú"Ò+céðP›ÖK´—ñ=WMh\Ö…"¤Š­¸ìA’N?ìúøHc^×ËX )áH!á«ë)ßqÐ @Æ£÷p­‘®5]G¼Sò™{Øï źª×xNEüÛÇÁdEŸ¢xÎÇØŸ˜¥)9)6R¾Õ7´ž íù÷y6Ñ.kÐcÏ­ç?ÙŸŽâÒx‡ÃÉŠ¿'¡>¤´Õ*•š°òK à•´Cñ*‹OÚ³F†í °–=WfÉÄ&Æsß|C‘3ò&’J£ŽónyóŒ39òÄ—€Ï7U‰¤ås ×g5Ë7’ø°\P’¢½šBÛouòÁ·Ö~žÿqf{þÝÍ£~!¨Šæ{»rì9¦Gßv£ëæR®1;ÔdåEš®ë¤\³‘ý2Å«Ïm’µ$; E—ÉåŽ0ã/2®ûb=;‘qÝ—Kåí9ëQ¾ƒÔóˆ¥èŠ:göû< ‰¨šç×*.{p=ì-‹F¨—a­xzÿñ ž¤O`-{7C,çC¬œï"ÙËôï¨fßòP´!‚'·JÒÇ@¼®ÚòY¦m„ð´Ù/!^…óÑqó½§£z˜~ó€ÿ«ÄsCðXïܯ£ç›}¿“ö»$f žÕó¶ö{ˆ¥÷ XÏ¿ëuxÒîÎ@<¿vÊZ ñb—ñÒV]ï”ËL$FYï@^¬ƒìeïîùHÛ +ÀO*z–ÙÇøš7Ö•Á§ñ|äÓ<ùnß +™»Í~ÑW².L@2Wß +xî©ï,×…+}ŸóþßCú­Ž03å~€þ>ÿÄf<šUÂx6]ùe¤¿¸¸©{;I|8›„Û!ãªA|¸Ò6CäÏ&aâípP|øçù‡Œu÷ Ùó¿ ñ¹mýb9 J>òÝwBdpÃë¬1ð!ˆŸ6.ÿ¤ \Gz4ókïœ6'¹Ñ ¦Í„F……`þˆÅ4uñìOZ™”bдýy;|Q\ei>…ïyÐ.ò|ýC£›pƒ€Bý„á&\#éy=U§^‘Ì NTv‡ƒ34=y^(µGCbuFÍs)uÜÅìЬ«ƒB‡¢xÌÑî7ž7$h,âßÊRŠ=#Ô!Š@59|Æä°7Éd‘$…nö[ÒŸHÊP7º&K1šŠ®Ó[Y/P?P–íô¢gkáå‡Ûuˆ¿™4ð±Äþéí’©wœº÷(›±¥Ö,ûÛæAÖ8JŸsÛ§AVè_QšPÏ {_nd³–í¹ Ã¾Ê¸¾ +JCÒ¸ô1óí<1å”[6ƒ½+Ø$ ÓU®Ò/¨n¡)W]‚mN±c™94ô’5`øª:¾Þ¹g^;àœ3wÇ©ŽºçYú1,> Jù_ ß0¼žq9b˜í¡I¨›î÷#å 3¹ñö·…ºæüª¶ˆ,T?ýC£›QÙ,/AÞ—FP”.RF½>:^Vð‘);ÏËLžƒa×ÇGî$—¶÷w‹2')¡X¤´U•ÁEJ?Ió˜·Ø¿[^Ëm‹q!„ÌÎ6ú2÷ÜÛ•e²ð.å¬èϨ»DQ¤‡™ùßWi 4iÊÿ8ãëúÍñ1Ú:¼‚í£iÆf²oêAÐv&¯õï²>ÁaƒzN]Þa’^;™öMµ!„쟗[ÑwèQ”½.%êçAoÇû˜üÍŸ,CÓ8eLÛ­Ž¹9mªØfÉl ’¢yÊéßt û×Û’õ +¶i|¶À§üƒZÁÒ +ÎKÕvîÑ‘}z{²%Ú9pœñö¤w¼JšC‡Á‡%úÇí:”ÿ¤\oï0ÛCS0(>€Òž5ÜoÕ¦Èæ=&ïÜŠœÒcº¾hdÏEÖÕ8›Ø?VÖ™S*i'–¼(äôÈ»îìKÈ:µ•¡ã}˜†]SùE‰rÊÀ¬ÿX ÿZé:Ö«éµó·%^Õ|èµèMXsí÷Îï§ k™þÖsíµÕÿ`-¤o†¬Ë“MÔ¬q«'!}îȺã´lÖ&³í=êØäÏUð.dͺÁk#ÒðÂs |¤þ²V/f!ù ~ÑHFóa¡Yç|7dM×Ïaךc?S×OEçLöé¿WÇ?¬q~ +þ¶: ¼…øxõ-쮃³õnî¼uÀ‹¨n­¿z­{Ó3šÁÙèï*È|˜´FùwqEçNÑX 7OBxvGôûñèØÿY n?†ôñÇ ßYçsù¤@y·Âîbò¬v®©bNû1„Ÿîî,·Aúþˆ¯AþŠç¸™³þÕ9¾2¦ßÔw‡Œ;?ó¯.î€È|/%ÝP#VAÚËÁpøH;ûZý~ +2—ÞŒø<÷d®|2×é]H^„Èc·A¾µ‘~içfç­çÕ=_Âæý0xÃáÃ*H?Þ »¾ºê5ÿY;èqì ¯=4 `0|Dιû=oƒ|—Íoö0lžŸÇ <û5ú± +ÙÙôï†ÝÍg ¤mý’ÿáSضpýr[Õ¨:÷K>(k€F7Áb0IFÖ)aõhÑz¾.2Ùk×Suê•x^Í«÷Õ_‚wL"½†v±†òEÚ‚œ6:,rÃ: ö3Ÿç²M±„ÎS<³GXÞ£o`ös?L±lî¥xlòdRŸ¢?—AÞ]&æûËî P5M2î¹iÊZl½§ðu,É󿎲$ÅõØmŒÞïë»ËCîÞÒK¬~w”,þšˆï°ÚLðI¤½5ÃþuÞ +«°»‡½>·6:6ËþvC–fÙ@;$Í;cÑóÓž5Áx»198 fKÖ3©íh$­Eλ;@Þ܃ôì…ðaXh +Nq°¹†‡)ÎóoæÛ¦ñaØ@‘Ÿô˜Õ£|;7š·p[]“ô w™ìnúÃþ‘Kʶ-Š"K}s[~ Éšÿìž©!_fÈqˆ•ÒxÿŸÁðö²NòäÔé™?£þ¿ùönôÂg¯.~ñTºû?±,>ŠøÞºIø."Ÿ%pâQr³ó§á<ĺxå=¨sk¨/JáSϱ$ÌBön78ÿþÑÃÄ3°}ó{ ǃäÃk‹ò3ý~u4ÆNÄÛÍH¤ÀewÁz$æ`#@¿§b˜xÎùýªß% c^>à? iŸÿ< zäéßË:³r–\p¹bІ¸3úû8úǤO ²ÂdÌ*Eø Èxþ$*ʇ› òÉI$Ë&îsÝÝ Îæ¬W~ ñêêU™ÿM„ž‡>‚x¼ÞEö·¸ŽþH@Æ_$ÁuȘô$>œDþòb5â߸I|¸Ò–ïEýãþH?4óhÓøð5dܨÛó¿27‘ÃÄ0ùˆütv'†5H€`wŒ{åvÑ8áõ}Ñÿç|;Ç_‹ž7Ùââ·eÊÉe ÐÈJÌ¥Ù¦$ÛɲìE×õÔ½¯fÜ£¯í±pdМ*»«Žw¢ãikÆ‹R‹q,ׄR:;ý 5>§,™<>˜¬¹íÔ3/mcúdxÖø1ÆûÚ"›‘‰Õ¥½ªŽ½Ô´k§ÍX¦£\Ïĥͧ]Û¢Os¸9 |ä&}»Ä|Ñ)e¨E’œÎë`h>zv¯ߤšUüÍò&èùŸŒG±øöw&%ÒÉŒ)cN“Úº»³Žgìb¾,ü!žAß·JÊöŸ” pÐäò¡îœë÷ô6• Œ·ƒ6m»tó­<½Ç"ãk”'hóe|œt³Ü7•¾÷5T…ç¹´‡A£)|û£—Bwh«{BžãÛù!+®JÒ¹…Š¢h"íD™½…Ò>ƳÊ^¢¾ÏR]CÏR²›»I6²’÷¸Œé}ÉÚ¥Êî¨ãF€Ÿ¯á™`|{º×kzFä&—É»ÝÒ É׎ÜlÈK” g›¹›¡6¥ßøv,X`èTh¹óNYEk ‚tX·õ1ˆI€˜¦üL«øLІ€å]–2(2ƒ,£m•äf·^ä𠦆½|“:hVñ9‹Ç»ïÒqί§U\Ìßݬ¯î¡ï·—qëiJ?5Ë ê\Ò––Ÿ$x¾î¹ÖÀ7N'-´`›—§XOÏM”e¦Ë…=ZEÇ]–¢ë}N×;q¸Ùåq`Ã2ãƒOá«*ìßÝò°É|šÆà -«‡Úêú¬ò‡­ü*»@a£þáâ³×V¶)“¿o{–(k6³z³•–F¯èK¦ÐlTö9Æ…˜nt¼®5ÆZ¨>]Ó3ê$-.²YÊÓ¨§êk¬ìn¶|ý>ïP&ÎA®ËóQ‹2 ͧԗ”ÜnëùÀgŒ1.œf³¾ç^Šgü3Æ'Æaç'0k¦3¾«Nôúõ×i•ü™ˆ×WYo–Ù²¤•äà2àëhrøûÏGõ¸: ç šf¯g3®m³_Hu³Ï·hƒŽÖðQ‡ý2çÜ Ôó5×Ål ÙŸ[ÃìªàÂ7þ%yþ›(ÜûøPuw3z/>œ‹øàŽÚ)§åã®:îæÝؽs“•ÞöP•ç¿ÉF$>Ô¦òÁ´çYä†RoÔvö+8.NS„­}K[»¦:ŽQ¬ô»(˺ô‡Ò\êeC$m)G=·;åÎå¬÷:JßéR [E¼ØOÒ¯'YÃ/åx¿:ÈÚzïbÃ-œŒG|Yb|Û¦m”o›´XSÈM¢y®âògéW×3þÝ/qøKRæU}‘tpФ“ÓÎ\ï.XÈÉ—6Ũ§ »Y<"n?ã},‰Ž³ßsî.¥j€ß®`kp‰ýÑ—Sì7Òºýf6¥¼a ¶Eø°@is%i/›#àåÊq¿Ëþ¶½…b|þ˜ñ9¤Eé Ýèïì +àÃ~õ»¨òß$…¯êBÓùàûv™,´ÕuyÊöÖ¾n4B’d“þ‘†C¬_PmS&ÿ¤ð—^ ÏœQåwÔq3˜ÌÕø¾:Œ;tõ&.Ùd率IÆ-à§ï8›h÷¤ÁRTF—ÒnöS„¹ˆvP&^MæÜžèÚ×I¾GY§ç†sÑóttBÛ©{‡á¼Ñ!¦™Ïû?Í~žå õ£Í|¯Ÿ½ýˆz~˜J³™<ôºU£ iÅb:ºÆ [6z—£î^Ø!ä‡òŽS&ÿÆ’ç]Qîûž®óÜ&¬KÔQOï±™Ë5Š’ë!lÜ3Îx2™¾?³K)ã”6~w(cA‘wxqå`“3ãaïAöGNuÌwŸÐ·Àþè3Ó—Ø?þ­K(§ ‚m>T…åʇ²MTtÊ´‡ª”ÿå·ª°\øàã…‰’q¯kQæ¯vB9îaGjšav^/R怢ζé!øŠ"Ànd5aÂë(–Z7¼×‡^Ïs©­Ê×ÂK/:æ†5VIz}×UÖ³þ­Òžæ¼ +ã0I¯'ý“É$¥=v9Üd,.ÎQõMôwúCêÚ%æÔuDÞ°ú)J¿ÙJQŠÈ|ù&oOmU®6Šœb3éÊä±À~å_¯7[•-ÐZ×ÇÕ»¾ÃåÑoÜõÿûsÜ;çÜÛvÎkïÆau|Ö¹¯Ó>€ÒÆIë‰=Èf%±+JfÛ¥%õMBÛ¦«8EÄd“Û¢|0Fö<䥖;ŠÖßõ(.w>ø¢ÀBÃþWªÂrãƒá…–N3ß2]7ùcSy°‰2}C«‡\¢ªlIþQfÿòÅ«¹þp¬ÝÑùW)ŠÂqæoÔ=·òФ*ÿ€:Þ‹ŽÍÖðLCãŒ[¢ªŒØC z~W%”m`\1®+GB4ÁþupíŒï³"p}æÜ[')ýãuJßÉà¶:÷ȸÞ%Ý÷æ¼×¥9†/gyšñÁ¼«ÎµÕ¹º3D‡ÒZÊ„¡ÃÏ|Ê¿ ï×I­¦)ßt‰ÍM°è£ã˜Ïq¯»®ºíœ×ŠWG?ìÜ×” ºÕç0mÇ9.ß]\6Ñf ¿Jáp*g9Ú€GÆç±qÊxTÖË4Õw‚Å÷fnSä#<ígÿØyŽÃ‰ìp[ƒCÎu“ŒgZ´ßP£©‚m^>hCkÍpy+{I|8G™CD¿{Î{m¤ÌKK”v½ŽÍõr–mæ=B”ÿ.…//Êb¹òô' YzÖfÜ8Øä¼#ý£éè±&tÔ±^t¬îPc×+]E¨«ëµ#¥Ã·K–Ûb<ÝE.?؜×.ó |S”o´—Þ|"€õžÄ£G1Îti=:{(Šc;çûL:ϽÄ|ëpÝ5ÞuF¼¸4ñ±Ci³º-µÔ{å +®‹LRR=iø”ãM=B«hl¢ô¿E6#”=uGžmQÇ£û_¥´m׫l¢GÒ +#î–ƒ®4lZ bc”¾b–q¢(—y¼àE€ê*Ÿ¢(è&©å{9Ëœf¿pjæÍñ¨Ü²óh‹2®™¿EË1K–Ìwr«ú¢ÂEIùNÒ †oz®_î‚­OÀ1¸ÊÞJãƒÙ0¯®=àœ[É|0Ñ€YÊÿZöom¼’øPË`²Óohå-cœ7FmPÆ{Wù_.Kj%ý£éè±&ìQÇŒ@Ӯ陆Ƥz,çíœ`²¥0ðî#×X1ìmŠ’ÉÔnP4éÔ°É5ÈùsV´ûgð^`܈5Èmç|4N1Ø,Ñ*ð󞺙DEïЕvG÷5e C^rû|V”’É@}Šþ0ò#ÞÍÓƦóQÍTÌ2ã…‹ÞE{ÛŽSÚÅŠAc˜K=Æ(‚ÎÞ¨î®wtŸª_':¾' \—\£ó7L6_dúÜaêœt~/ûÛÅ6†GÖ´)ýsSçYNRŸaÖÝŠ‘\9‚­Ë‡,#€‰ÎZé|ÐÐÑzû®Yé|HRþWªÂ—ÖB°Røö;óÌnLîö˜ãŒ/s]bsäÜ¡Ó"‰ÿ럆â,€?ª¡Ü€5nðëè˜áÅßÕðL->W¿?ð§ËÚàË„s_øãŠÊ-SÇac +À1È·5xÀ‡R›bhxÀNuìm–³œI߫߸ÇR5ëG ÀóÞð›”kž‚}Ÿ»Ô¹~VqB1é›÷Àòf€×`ù=à]H=_ðW÷y Àã¾ò€ß ¶ê•`;€Õïóþ·”ë;‰þÀߨs[!¼0xÀGê÷€ nŠ~ðç®q½ØùÖîø7àQÈ»ÿÈsßùˆ®Aæ±kw5Ëb5€Unpkô{ dNsñ9dìxÀTýÏF÷¯Fr?MÂ8€3nSǾ„|ãß:×ÎCæ¢M(ëUÈx|€Ÿ{Îo‚ðì×êØÈûþ¥çúÓ6üêØ €÷5xÀ?$Ôi˜ƒŒ-߸–—3¾†í+pÀ½HæërƒË‡cˆAø¬|>Às^ðCô{2÷<¡®Yé|¸àN¿t®‡Œ=wªëV2B±ÒøÈ\ò¼úýäÍXð9€+yÈ )ã|3 ¬EpŠbýßN±Ä%Yý§i·8{ýáL!èeY3 +’ 5Ö–1ƒA%4r-¸E½õ“LF§`™¾Ðºö€øRù²&/—µÙã”­4޲¸÷Jó¡Žh³Î6‰¿ëè_ÇJæ_¢Q%µh£ELh°É\o¶_™¤Da,Ñz5'i×·¿<ÄúWÕÖÜ~2›r}7ºæûCµ79帑î¶riÏÑŽ…IkÑMîW)m£Î,ÎYX ´Å(üLj‹&ò"oø¿&7! y~Þ-¦¦Ø¿+Dšcü[Ͱ¹V™÷®ƒæ=¼ÔÑ7nä¹’:‹Ï;®C=]\¤(uù“aYã+^HÙÇ~A£ìqM%£Ìi˜ítš °–ý!ÿ¤ôË*”qÆCb¯²ºÝ/fèï'wyîmZ’\e—ó{EèøŠÖl¼rÇÙŒ- «&×ëx‘ÙcÒ.çž'=×èe¼om¡6°¼nÔ¦*~‡9úwEù†%°ƒý;&¼G1>¾G“L„H/º7mËÐÓì³&£cûØoÈ6ïÜôÄœ®`ë{‡vê9h>˜wnt>¸¸Qùp”7¦Â7j–Üè¢[Ç®xÒ–Kܺ IDAT?thñÓ U…ûÖ &!¯‡bŠþ0™s!sE°=’pÿ~Šâµ‹âÕð ³zŠýk¢³2'Wùlw ՛㙭‹f(©‹s߇aA¤´;_Ö×W+®“/#vÕ[`î ømZÏðE†{“ÕÌ6~c´[ït#~?ýþ˜¢¤ŒÓ®3{‡Í0ÕA-öGlœbºp1MYö±Zmösi‘M#c(2¼hbÔPm¥5z^e=ù&é—4zcú&Šy†Òn¦(í`:ºîöQ>~·(m.ë¹ËiWŽ‘`;âÈ#>ŒøM®ŒB.ß]¾BúǃãÎÑ\tY^ñ…~¦a6GÙcŒ+tKA}«ª÷nŠðÓ£úkiÃ+·Ð6&mxXÏxx=)†ª½—ãìWÄÕ©AsŒ2¸!æ—¸üö./Ó}û*“Òör0^êuìocú{ÔeŒqe‹¬Æè4Í~/¯AÚzòa·EÿcÀ­ÑâMJ[iÓn¸Ò–ÆøÈl‡¨±ÀüÊ£k|áØË-zB®RÕ¦D²øh-㉑Yo²Åû1%¡G1ÈOSúÓ&Ê¼Ì¨Ž® Û¡ôÁu”1±CÔ‹Ã\~#ÁvćF|ñ!¦—+Îqù8†BîŸÒ™”¨¯Œ2ºžù”ÿ¼{ëðÓ£ô‡«úùàæ0 M'Û+š°/‹|¡ø¦NÚ˜Q”¦)k$}»2ç>¤i#ãû†j\¥ô‘]¬VYYO~ÓÖt`½‚ëûŒøM:R¬É¹„Aÿ‰¤Þp²Gï]Þ=ý8ÙoñkÈ^Ǿ}WCö¾ Àfwç(ÿÈ>¯?d]¨ðd¯TDÏõík¼6ªÙ7Yïa|ò.—œðo ÏYˆîûÀç¨_¬‡ìÙœ´¿ô'}O?GöþÍcýQ7¸²×ò*çšë^ð/ÏWZ=½_D¼]¸øÂû“…|“?$\?•w;ä{šoqKÊ3ŽAö÷MjƒUbÒß6{΀ìþ9€O¸¿ iS÷؉ø>Õ€ì{~¤=à'¥k\=Ú½b¯Aöþ)ä[=àgvx ò­ïð«aTrˆ‡ðä!Ϲc°ýá:dlYi›Ñ?Ö2oìD|_÷å†IÈ~Ä!þŽ×`yrò®ßÕX)ÈØr'd/ä{`÷Ã6¸×ÞÂàÇ÷1ÈÜoä€{Ñ?FT…ó±ìsÿWÓs…=oÈwýùë2LŒø ñA0âƒ`Ä‹.€3þû°+Òt¸@¼7 ï0q¢„þM{÷x-úÿ ˆâ²¢°} i·A;£ÿµv"(} Q°ÿÙ) +ÀK°<úÀÿS ž¡hxÂÕ)×]ƒ¼Û÷ãÅM­‚†iÊ,|àÜxJMZEçqä3Z¢ ¬†_ùIÂ5H›zƒQü5Æ +ÂH®óuXcß5ˆ’w+€›®?à©èï¶ù•Õ¸ŒAúÒ*ˆ‚z ò=ƒ(;±ü•Š2Ø 1¦¯Òp2F?‡dƒÙrC2V<Œä±ö +¬¡ÐôŸÑ< k ýíÖèÿ¬1怷!Æ›¦ð{À~Ý‹|c¤‹ë°†ðOü¢t횇‘`+ñA0âƒ`ÄÁˆ‚u9õ·Ã®HÓá3ÌB”ܼŠOø"þ²àý“E_+Ëßà +[FhDûb$øÛ”2Ç!BÊC¡Åx.®@Œ ƒ8Æ!F‡GÑïÙ)ŠkwÅù}#  áýýÈ!ŠËcÕ‡ [¹Üi›K”qbLø¨Š + mÈØð$ÇDF¼1fܨÑ1“^<†pCÀ/_Äòöú§¡™7ï‡xcî€Ì9ƒÄH$Ƨ¥¸é¼ž†O´áäˆáÚ‡ wûb¨? à÷5Ö¯  ¶‚#>F|Œø0B.¤ f! +ïN¤{ŸËÂ+o¡aeâí¸Ïsî2DéÄspâ1ÇŒ7óˆ@r$ ØõPœ„(…Ãð6¬…#y¼'ßCxýAô·)¡å‚IˆànH»¸Ò7B•  à·°¡ÁÇÐÌï°Öèµ&àú“ÆH^*° #VA¾í£þ~˜•j(Æ!ãн°ËªL4Èeˆ!å$DYû+_QóaÖSoè6ˆ!yMÁ2ÏÃF«]€Œëg"Z)<6KõÖ@xu2V:2j„Fa„V B 3Éø.ˆeþvˆ “úëƒ < TN@úB‚7@÷{‘ìMÈ£<¿‹þ¥ÃÂì÷X«ˆÞñð›È‡³A¼éá×Ëã°Êëñ3ßà<–¯÷x +vÉŒ 96ËMÎ@ ÃŽ\¨ ‘H7AÖx”ŽFa„Fa„–5ò’Ђp•ŸË]ÇðÏiØIÚxá[?y¢´‡UnNb´>~„Fa„Fa„Fa„eˆª #Œ0Â#Œ0Â#Œ0Â#Œ0BƒñŸ‡]Fa„Fa„Fa„F¡~Œ #Œ0Â#Œ0Â#Œ0Â#Ü(Ø`bØ•Êì»;Â#Œ0Â#Œ0ÂÊÅ$¹ðHbaCç!¹®DÿŸð›aT° Æ [M®$¶=Ù‘ÇݽÆlëiòF®kÚ¶Éz꺚¤Äg! {ÍÎCǰ¼¾UÆ 9¾ÌîL&)ö*/®Ã¶Ù³°[¥~‰å½cÑrÅ4$9ûšè÷È·T¿šƒìþv²ËÕ ×F9Fa„F¡ÖA„Ï»ßôVÈ.`“Êž‡ÝþóK4sûÏ,´a•B£dAÛÅØ-vÏC’/G…1›¼pÝ+þ©æºäÅDºv«ÛÛrÜV©ú"¢¦µï È®.À¿uïYÈ÷{ÀSƒŸ'£ëþ±†:æÁvÈ»ÜkBñ-ìŽVÃØÊº +ŒA”H³ÓWžÉ4Ìî^oCÚìrÝ©i9` +ÀK†ß }²ûR»¬µ íÿ&Èœu-ªÏÏj|fã02Œ0hLøí°+qƒa "è4Q؃®¾ÇÊÙ¿|Øloð!€g0AæFQ†×Cïð+¾!¸ñƽ à4·ýo‚(›!ß¶¨ íâ{Èû +Q¸š47ô`½SI8 àœcOB”û,<„á+€(Ä@¼`w#]‰4^TßÎI>\ŒE/¡óH[[ýþÀçzÞá™®ÁòâLt¢{7Ãöcq÷6ÈØv ƒÙw2ÆßQAYŸC &Ê>ŒxÀã(>ö&á[¯ø)F†€ª±ÂWŸáÍŇã[mòl´Ì+Ñs>ð§5<«±”`dZ™<–› 7H´ “ñAù¬ŒAÈXývB³¾nunŒC,©AÜo!“f–Õl‡›a· ½¨.@BãAú·ÁWoYb2^h¡üm6 çßHÊð6H¿º»âr¯x "|{Ë\@ÆÇ!ÞµÛsg!ÊÓX~ÖÀ†[ÿýíä:D{ÍðH‡±Òpý€¤/\ƒŒ½›£sˆÎ›±îXôw£D=ƒ~üä[|ùÆç‘,‡LAÆñ5vbŒ?R×\ðäÛB9v1ÕçØpÿÇÐ1ióÏAxràzÍuÏ£ßv=zΨGÎY'ܷü¿—Yæ ‘IóÌYÈØômô¿16_‡Ýú{ D'I‹p9 ù†UQée³Õû¿´‘ð,ì2 4e}dnÓ8 k€þ1yðT+> éßwAúø—£ÄãXºV0ê6쵌j|Tÿ¾Î‡/CŒCßûÔ± Aþ5,ë¬F v¢4BÆ gif T×;p"€þà+šÞ‚€¿‡5\ƒL"·B&’Û Êì¶¿R auÀ„³¹J ßÿW5>ûFQ†1d¿†dÁû +D˜9 «7ë¦×Dt7’=w× ^‰1C¹o̾O>šª˜‹&!¼¼Àýˆ ôŸB´aŠ»…èx;:w Â[!c–ŽÏøßûæ!|MÂYXƒ@ë!†6#pãËûÑß*ž; ù®Àòñ2äýß@ýãù4dlzqlj¨^imx +¢x¼ô>؆Œ ·A¾÷Hß^éûøy‘Ê'àAˆ²R4ç:¬Aç<âËs>A3 oI˜‚|û<美Î}à×9Ë®†L~26):©nÌ@ø|dŒ21K€N@ÆÅ/ †|Wù? 1,ÿ‹sÿzÈÜw¯:vÒÜk‹`;DÇzbüû*ªï« ìå’uÑfcÏ_n4NòH +¯®’ìœn@]Ci†ä©„÷™k@ýV*m y)ï$¹DrÝ€ê2FrÉÃ$z\Uÿ¤ôvôw’ÒF>ŽÎáòjûƒ¤™Œkzæ¦W‹$»$_'¹ò-·‘œ%¹=ú=OÓ’ÆRÚÈ ”v4,þ¶¢:,yê·@òU’› +”;ArÉÏÞý +Ÿù®3$«:,Q¾áÔž=KÛßIùöOøý5éïÒvÎu˜ÏZ`¹ñâE~¿Îjúæ²¥: +mÓ/Ä$á«ÏXKQ.Þ¤L²Ï²¼uhX4Æþ& ¯S"C»88n^Ú–ò®4¢r´žéžÃ5×¥£žu‘2¹˜ ÆÔ±“£¼E ^¢´÷aóº)4Îä‰»ÈØšF7’2 Šr¤½–¤!s5>³M]¼W!“ÞÕ[=ŠÇmP|öQ‹¢¬š¶}œƒ7wÿgsOGÇ;žû^ˆÎÍ{Îéhßù¯˜ŒÅèü{cCÞ÷Ù®Ê +ñÂÕõ]_Uõ8M+—¡Æ K¥y†#C룺,²\ß ‰¦5ø8âŰ޹jÒm…´QAƒˆd§x‹] 3*©Jš¤èIòÃňõ*%jhý +x+:¾…âüí0=Š`‰Â×~¿Å©ßÇ%Þ÷Rô¾ è]—Xl]1TG¡¾ð™,„*¯Sô GG8kojçeV +NQä*&Ô*é½”:×¢|£Q›þ¹$Ô¥Hµh½cÆb¼ý—X\H™Ê„v0{*|Τ ƒb¸t#iqpÑW®7žïi +Íõ¬ÃlÖü±žv\´Òª•× 2ïxî3}Ò§(èoº#åü7yÆ; òöíuŒx†}gŒ$¤´ë2ýyœVùï‘ÜÍòm¸E1ú˜åKE,æû½ža8G³†ùM«¦7w\`}ËbÒÈõD“¢è›?eh“Ç–£¬¦ÍPœ³IÏé1Ìqû´s_‘¨¥™è^#7cèJ2–妪 ÔáeyÒ™f¦à,ry­ÕÏÁ'ƒK´kÚ|áÞ—88+iM39*ä"«8×R”…¹¼ï0ÚPÚ:jçX_h k±_¢|ã#ÑßÏè|ó±Zψ¿M¦$ïÐ"«Säò*ÃÆsª¬ŽS©$¥dÊ0(Ÿö:,±Žš¦´¿)c΃Ñï*«iö/ û˜ÕŽëkiçÕƒ—]é¹ÿ(«ÿîmfcιgKt¼ý‹ê¹ñ1ð­ò7á”é*…Sêœ6Œ·(ßI‡¶ç\[´Q†W9%ÊGõ>ó%Ê1^Ú*ÚÆ$eLõÉU_1ÿ’U15[ .iÆ]#¾A§jr•¾aE¬šatårô·èj en©CwjQÆ3_¤ó³™-Æo¨Ãltï,ãí+k¼ØÄ•±ŒÆKU4Aÿ:Pd%ÔÞœªè½ê¦6ÓCþ|X`òœ6Åbç†çvYŸãÚ ÷j£E‘¥³Ñ½&`>ú=Fi[I‘ã)zT“çÆÂTô#î¦XI0_Øq̺Œ$ÚŸ|k"f3Ê6m§Ð}Ê’ ìŸHZ”Æl¢YƽÁ]VÛxÍÚLí5 +½O{0\dµ—&(ƒ‚/²`¾Â÷m:åíe½ïI´žq\e\Q:À¸a¦¬ÐÒ¦L$ƒHââ*`MYèò\£Šœ IÊpÒõZ€6È:ÎõiÂ^Ê0(J¾Væ–hûË Ã‘¥ LPÚ¯¡,Åeœý‚Û¾’ï:Ƹáe9(:¹p•Šl[•;çœëDÇçSîѸD™ƒ u®ó ±:‚Ò5b뾞'wN›vŽ<šã¾A‘1¤ÒóÞor •Y Š|bŒ§Ø¯ØQ–Í#THû3aÆ—˜_ó)j.zlÖr*Èdj7X`³–õºI–—Ë7g6~R¼éƒûÛô'=5å=ö÷ +/–XýzµqJûÝMñ,麸 +ÎÅS?]?/kU5^›¼Ñ#yȆ.ªô<¥nBÝf+(;KÖTTùO»ßí¤Û^•Ê0W°H¿7âAŠB5G]erŒÒ/³…C Ã!‡SŒeN³˜÷F{]«Þ)¢nÒOy—Ž­ø·ño·N•9çÜ37Ù°»L7>»Ê¹ õÿ>§‡1lùÞKlB×ð먲 +r´–V¶ÈëÉŸ‹î+ fÖ'‡ÌIæÚ,LJ1è,0|,l1îdY ? êe0M ÝÎ;6%ÒÎGZ!mz>"_^¦º"A'(}ÑÕ¾¢ßøêÖì_n5Éø˜›µ\ÀGíèÞs´xd¼oî£È±íè·™'_î[q Ëó0/t{±¼È +J OÃ\J™Ã¢1ZnE¹0žÉ:»›"tzš~!Ïl‰¶ƒÒ M(\W]c¬^d5Yß;Éìæwèšu³öæ+æYb½Ja­£ &(í×·Ft‘¢ô¦|Ëí %›dxNŒ‹¬>fããAÚØ •ÿ—)­pŽPô]5o¨äÖè[”þ5ËjCò\k¿~¯v…ÏÉKIÛÿ® ìeØÐ û£‚ЬÙÌk¨J%_·²Þ5yŒÚî¸íF¤Qìtví¹ß³r—½ä‰þÑBûiÚõ ³ê¸;VºJ )ã]W‘gÕ†(=ÿ¾I—L¤ˆÏ kÚ¿ï›ãÁ¥ïk„ëªíÖI¦M.1ߨ±1ºïËõÙw(sQˆ—o¿zæbôM²?ÂÂäª!Ãó‚ÌÑb!z?ßüº…Ò6±ßà¾=·]S67 HËÆd²ÂØró’o@|äFשü¯eº\šä„rw{X¢5rºÆ~­ ç!UcÆh³œÐìBbJG)}¹_Oé¿E’6šB/ YTiŠš›57žM)wXd„‰ƒŒ[¾ò–³¶#Sí&ZGoc¾]Ù5r`z6ÿ<°Oد +G8œÄ,mŠ`Ð+Qw“xh“‘“=¿.αúðø-Q¹_QˬğIëNS<)K!ÆJ ”ö'Üê3Š¢n¢”ª|ïvÊ»¥)ÆuSR˜hÙpø<ʰog–2k6óªP†Á¸aój‰úçiS;h÷UnÓ;´Jbïu}ó¢Æh¿ïUÆÃ&æhQúõ­‚ÕSïê ÒK õ˜õã;iÌ:÷ͱ®·Ù ÿ^sÑ3w©cfÞwŸÓR廞&½Ü toѶ£ùÀ{†IS´ß'ÏÖ¢ƒå¡Ó¹4®²_¹š¡mo!K0ÜÝ\c,£òò:E޲ÙYë]£èÆÔ)‹\åz[…eWA®çœÌž#·Ò:ó Ufb®ŠŽS›:Ñß¶/›^à[/ï£ùèz³\äYú=«³Î}¾ n˜¸é‹®Ìaæf-ãlRõÖB¶Vò]™HG!„†EÏø"›ïý7dä¢ÏrÜ3KÛF² ²f‰Î,ËåCXKwvQÆ› Œçbr#̹,åE/Í1ß¹jG‰o‰å°©Å¸Q/ÏÒž1J[Ÿe¹H‡vTÆæs>èèŸ<íväÊG˜>¦ëD{—˜/R ki/™¾lrŠýKÌ]#W‘e—&ßšYF}öûÎEÏ|šfäÅugê³´IïÉzs& …B.Ê“h,/²:Ìþä[ƒð›ãÕ0ဋ´^Ïvt,ÏÀÕ¥]ßî†'û,Tf}c¯¢÷˜`r«¼F†)_âap˜ÃQüÍî ETæAÖ³á Gõ!$™b^2[àheØ—ä"ûרúÈ„ò®£LàÆh`³mÑóÞ (ËÅÌމʮÊb›²=¬d£=O]Ê*¯E”a㡪Bù7¤ó×–Q†Á¸As‘Í™/²h^Õ;OØ´Î?`­xh,R Ê{8%r=¥ï¦åšdÿ2€vF¹c´sVGŸ¤]Jg0ëÜ;멃aÖ‹ŽÏ;ÇÍXéŽCÆu„¶½ig‡«€tÔ¹PϨÈ—“×ÊA=<ðÑÚù·Ëä¾;A›äKcòͪêófi£•b«NÆýÆrš2ç%%š¬uÈEi‹S·6Þ¢(hî7ýŒùŒÀëÙŸÜÕÈ0!÷ïrî­;z,”ÚN½–RêÖ¢ÈPSìßæ0„—ã ["ÞÍ('M¾}‡ùÛ«‘ÛQ¾Ó“Œ÷õÙèüzʘ܋è0­,3­ÎÝIç?IyÌf<;d­xzÏédb§)“Òxô»XÆZ s›þNç†!µªz—´Žº)gYc!<ý"e²¬:¼=”¦h· >c¶±á*ë³Rî¡UÊÜm+õ$œæ­ué8­€:F+Œ¿Lé&ļËl!m‘Öbm’JUµN_‡»†€í «x×¢Êð^ÊwŸ£«ŠxbL”9Êw\Ïpoç¼Ã‡< ·tÛÍ›­{˜ä¶ÉPUÏÆÓì +±>\d}ù¦)ÊQÈ0Ý£óNdyªÌ|•$¯¥Ïgs:A Á˜s¯[7ÐÎídÞÔ¹#”þlŽù"zÑ9w‰A¯ó° ”EÉMBšùèP +_ŒáÚàe>9çš( IDAT«b¼1⸎­¹èx'ãþ^t™C}áÿUâ36ÃàÙQu +u"½“ò^ › Ýpo!ð1–OPW¹ëêÓ–ZT×lg|ž xVÒ’!|7Úr‰2¿çUþÍÒ .í’éEƪlšþ<G£¿žxuYQÈEu BIkƒ5¹ŠFÌ<¯NêFõX`\`Yd¸•Mg0Nòœ/0úÜŽŽ÷*|7S­FÑì´k)0é›/Deoçp-q›X_BÌ2¸Èú¶ÌÑŠ¡¶–¿I;Y˜µûyêMáxV›¥´ÕsÑùµ”¶¦½e>:Îx7žÎ¢íÑ¥¤¥+æuù"Ê"Š*Ã[è Þc¸×ØD{h,1ÜKUTv=OMñÞ„Ò{ªî_\ßV×_U¼c8º¬6ù¥YV +³,HçÐÉj«FQüŠÉs‡q6Ì:ÇÛÎó]Å¿WUÙmö Åóêž4ƒ‹þ¬ŸŸ'ÄØÒMPðòù®»2®3}w!åÛ´òÄqö{–giÇ®S,¿dÌ,é:ÇC¢1|Ѻgᥠw(Jèë´‰ Ó”ÜÐću’îÿ!FߥÁ!ËŽ'Þm¢øiÙ  ÉÇÿæKô¸Æ(}`­wŠÖ8¶Ä°¥2nEBs»QÍÝœïþdôFF2 «Ÿ¥5°¦Œ/£wõ=Wã‡çl¬•B.2kɪÆ\Æs'kxæ³Ϭ“) Ð$¤0Ë)†[+Í·¬¥Õ}íèX¯â÷IK„SFèhEïú ¥lcsóí¬o+Ì2ø†õe¤×áÁ§h=UW_3VtýÛÊ«ÃjÇ)“Å"e‚2¡iŸ1Y!|•q ³‰ ³…ÉJÛ³.ÃK}æ©CÙ>RDÞÂ2]á2´-£Œƒ ÷¹”Wã‚Û‘À{ µ)cÔc·ëuÔ‚é|Ê{º´Èáæ()J&Z#ë]ç£ëÒ” +c>Êd™D/7*›åÛÈenÌxg¾³n_! +êaʘ“e(ÝÕËÉ:ÆÖAn„MˆÂbYbº:tyEH¢_wŒ¶ÑÍ50&CŒ,÷1­—\#$"i7"B’$Ž1>.ê¥!4Ãx™v7 Ì2¸,=wÃI.^+…^˜äí-Š%ÑH«znhxh•d) L§\Ït!Ùê¶0¬ÃOI;úÝ«øÜÐ'ß³Wmb3•ÿYß„Ób²uw?㉵Ê$UÚFôgãÒ&£1ázIÞ¾-ì*2‘ =VãåHöç+(;”ÆÙ/Ä…fO£"ÊpÈ2˜4£«^›†ñ$¯2 ÆçµùÀwÞÅìÄ\iõ:†E… +KzLÊ2ti£­öF]k<PÇ$òÍcû)cÎ!&Ãa:ô>-àý +C‡qÁÔ¥í)CÃ.Iú–/Sø³—Ö«½›6  Iȵ•ñd‡n&{š:›òž¾:÷¢ÿ'9x#e£5ìE¸“qO'ºn.á|[ñ-kn2F€<»øÈ(úÚˆ4MÛ¶ÒŒªÆx ¿ÉXd19k’þh¶"ÙÕ« 9U‡K÷„zœÓŒ ³e„Ì­®‘pØ»¸Ë#’Œµëiç2c048Ȱ軹töý/„R ½îÜ뎉Y4ïÜ?Oÿ’‘Ó”>i’§ga‰2åÿax<ðºP|à÷×ü¨âgÀMî©¡Ü,ܦž¿3úÿëü;€ëZžû&¼ïü~ÀªŒç]p¬`]Cñ$œ»·ægçÅ8€Wœ‚ŸÏY˜‚¼ëÍUVª¼à¿ »/Åݰýå‚:þ!€¿T¿/¸Râ9ÿé˜SÇÿÀf¯EwxÀ6Og¬vŽý4ªÛmQùeñRÂñû*(;÷BÆW*(w³úÿó€ë§ÜpÝΔs÷ÀŽix8àš/oƒ›3®Ÿp»sƼ àŽŒëÒÞy'€[žuÀ5pBý¾+ãzÍëoÕÿ¿B±þû€ î›@ÿ<ödL¹é}ÕÔû×°uNkC¿ð_!|ÿ^2f쀴å´9UóFó{#’¿å1à'ÞˆŽ=à©èÿOüàŸü7Ø>§¿ `Ûq‘9ݼïMù«óþAá Øönæ™[ïuÇBƒ»£¿—ü2£Œßø?ü8ð™Ix2&þ›:¶Ò¶.@ÚlÌXt"åƒ ÷û¨@ à¿xÒ¦ ž‡È9ƒ†–ó¿¼çzàu—k.ÃàwΪ߷'\7(lVÿ_ð©çš½>÷8d¿výÒ>~ÈxN 2n§á +€ÇüyÆuŸ8¿óêl¯A¾Û§¹ä}Èû¸¸2\@Ø|» +2o|   áãÈØZD·*B ÿ àÅ +Ÿ2ÈÕ¥¨‡œUà w;ÇŸþ>¿Ðø„FÈzýJÎeUŽÁ+I­n$) +Y‚è ±"T=ÜŸJ¿¼-È2Œv“…ï³/)-ˆëoí +©×7ÁÏ!ýã%/æÿQzŸ´ýg Ö„§ ·oü +2¾àÑ’õ€_ n3¸ bd܉ê€-Yfe8TÈISvÝï•„e ¯2ìÖ?dNúâBsÒúeh?9xšC 2gœßæý/ø2°Œ› F;__LÃKˆûç Ê×Äh—„“ˆ;ÏFC *?CÿØ+DØÕò*ˆ0·À,Ä@ ¿ùIõÿ½ñåsÈœ»v|ÐmÀ¼ë°cê‡êü8¬ñnˆtÀXcÓM±/fì4†‹ÿ€ð<·ÃÂ&Șöœs<ËØn¾CR?7†cfUø d¾ÒøÒ~nƒŒ³I¸Ò–´‘à¼çºë6”eÔÈÂ?B”"£ߌdwÐãðÉÄ«âŸ.ø.å¼ù.Y™€¸L´&ðž:0‰øØú5ü¢ :Ýç¥Ö TùD?Išs®CŒ¼?ð?ÊÒp¿o^]ðwѳï†È2Ï!Ûišk |{Âów^pÀAˆÓq/ÄPƒ|–îGQ_[,‹—ÌÔTö â‘?CÓg Vû!ÊQYü +2hßÊ'Ôñû íú d‚x>¡ WùbQ¾Çs®^Aÿøµ +ƒk#® Š¾^DñŒéBVˆ„Ï9y”a=F]@xëðáÔsŸ ì}Bž<]€Q”nÌEnOÂjäS,gŸë>ð×Ñÿo!}îp=Yy  IQÚ y"Ì„ŒwÀ Î@„Kƒ{!cÑŸø ˆ‘!D¾8 Ó vªûÞ‚¯oGÿk¸†×$ø„÷ŸBƨue +CÞõw×¹0ma'üŠõ‡¹*ÔhRþ;.¥Eµ®A¿Âï󈿆x„A|„¸cïa > +@ïBûó×fÍ‹¿¸æ<¤m†@»aF¸±¤¹\+Äfìy áÊÿ ü£³Ùìv†t#L~øüTDŸx bÔúa„Uá6È70Ѫo@œ4—ð d Èc€¿|Œ·Q.ä7Ës?ÂCÀòâlMå†àfÈÀ¥ÀO p3â!zÁ †°z 6 ì1ˆÀò"â“i]|’CÚB<2u¡àIˆç3˜Ü‚pK÷dŽk5NB¾Ùío¸&ªËWœB° +6¼´j< ©ëIH›½ i_ƒxtÉø¿÷¯#ÝëáÃwe}dà4}âß!¼· Bã}ÖzîwërÒ¿Ž¡š¥)¿€_(ÄÒ¢ ˆÏ ]Ù Eeø$ÂÚò)ç¾D˜2ê‘Σ k£àÙÀòiƒiï}ÉÆ)@¼±YÑto!Üç¥5÷ýÆÙòä=C;!žò,L@¢Ø ®Ã÷!î‰ò¡l[×¼ºéÇŸBÚ¨/2ÃDC^iå8ÄXéz-×Dµ|ä\¾õ„??…´¡§œ:‡ t4ª“kødÎlCÆ—Ùˆ6¡xTÓÄëeÊi#yøòÝPi÷KH{¸%úë–ÿ;È\•v?(˜wÊk°r£®![™€x;HºM׿Û†W¡ßU7Ö¨ÿÏÞóˆó,i~ Àß”ó<âã‘Æȸj˜Ò€a.u£ê|ýèçÝ0ýå2nš÷¼™?îðG‡dÅ_C×û¦è™yðd\hÊrä›`—#œ‡ôÍa,¹‰£D“¸e.…vSð¸É~Ò’$1;ÉRQäÍ(Y™Ä?¤ðã0ýÐY7³lf’Ž)ö';3Iuz5¼—NÄäbI-Ú O’)k·²¶«›¦Ý²*̦<¯(¥ì.`ͳ?QÚ\tΗpÍ$4[°äMÂ×¢$+:G»K+ªÓ³”Hu};ª‹›ð齨žO3_"š4šb"¾n ßÀ%³”ÁÞŠÊ}V•²=kR}\„lqêî¿ëâ"÷º‰cÓ®W×us¼3(‰èzžºžbøvA/ПÌ5tëCC³Îýi÷êwžõœ7‰–(cû$÷è;Po·½˜D¸»™Óžòºê|¯Zêz7qàã‰øt›3I õül’Nº™ÝMRÀ¶:6缋Þ)b’vGÿLFì« ç“è"mRµ‰èSÿVôŽ™žhîó%šÊLJR|•2¾¼@;g˜dÂóÑo³³L'àyS´‰<(ãØºœ|ª›L–ûÅŒzõØ/£¹ѳ²õ¯§ÝÂMãŒgïP׆î RõÔ³çrÞ;Ii7‡)cA‡a»°¸´5º·•õ,óë óê=ºæaR=Òxª·Qí2¼Ï´hÇÝ%ʘ:?ÏPÚâAfgÔï8ïQ$‰édôþϲ™Xd1Ù¸2*³.âÜYø;ˆ¥íب´õ™o ¾òw!IP m<±.ú¼ÓÚ+ó-ÒÃXo‡x5ïƒ}'ߺŽtÄ:œ7Ô. IÉšòz*ªÀ.Ød&i¸‰œÈJ83ŽüÖð³è•4ê@¬’ï#=YX<…òëÀ5Æ!}tlŸ}ý _ŽA"UþÃSÆ÷ûâ}zvjˆ•ùH²¢§!ž{!a³ÏGe¬¬íšB¼Ý»/× mâKT—Çä7wy^ói-ÈXvÄ2+üëÞM…óÑß3ˆ‡èðÿ ¨nM¯žBÃò‰Jº~ÏíeH}³<OÀFȸø2Æ„æ3q£ Zkky£Ù~yïû`Çè¯HÈóYR÷SÈûÝ›´È÷ÝÓpÖù½É<×óÏÓúä›­‚Œ¥ù>¾¼.VCúxÒzO_¨·!žÿe,n8<`ûzh›ýÒ·nG´Äo ßã ot›ûòôÜb²¿ŸÛ'ÿ™gLÿø"åÞ6düðõkÍ÷?îýÂ³Û m¦j9±.üâm.‹F˜.³àÊ¿IQ':¡hÈØ2iGÏCÆO!ËkÜœix v©äÍþ4åZ·ÿÑU IÄšSW <<×îD~½õfÈxõ0dîüy• ­ ãŒï_íó”dy”Ê`Ãñþ2VqcywqéÿgïýCäºò{ÁïnÚK{éYÚKÚK ÚÐ^4ö"ƒÚP^4‹&ô<4AóÐ,ò£'ÈÍCš‡&hš¥4ÍâY4Arèy”ƒf‘ƒüƒ&ÈA~”ƒ&hMh9´C;”B;´‡ÖÐ +­¡Êá³|Ï÷ï=÷Ü{ÏýUU²ë _ººêÜ{Ï9÷œïïï÷ z,Ñ ÂŽ‹ÊòjžRmµ7µ,N!Ù;Ô©è¡jểð³7à?Ͻ(4s<; ‚×ë.ØB¼ŽŠxVæÁë¤öƯ#ÿñEGÀkW¼FwÀ–çeXÏQÓÌC˹¶cÚL™{T5GâUÓ°ÏŒí<ØÓå;s9vÁÞ˜ðZܨgít…ci«û9R°eúÙEqŠDttMN#ýg69l¦´u= UÍå ÑsÚ]Ví’ÖÏÕFŽ ¥SiÇñ-9mw?î) \Þ((ü§—ò\õƒnä’Dö¸Q0Áw]}'z:ÚkAÝ[÷÷„úÞ=“[æÖÇ—´g¶“cŒ{ìÕE3¦¶ù~òÃÅ€çI$Cö$ø¯ÀFaä=JÍÑpLW£\TÀ)ðü¿ +a&GémÁÌÚ¬œ·l/©D.ºtsv­¥ÉÝ„9Öv|YGµ;˜Ò®jÔѾn4ÍÄm5ŽCìGQh%´Óûµt™Ì¥Ó·‘ß#¿èÜ#+š¥í´Ï{ F÷˜Æ²p~~ÔG7…èm.H4Å@£—½8'` UÛùí¤3!ˆ;à UdR¶®øÕ…ª¶ŠCv£È5Ç=ífî·Íç4¡KÿIX&r§‚±4~næ H;¥}°R’gs%¥i$+Ø…à$ÂS² í¼õ¼xQå5éÙP”s–¯Í-3î¡~ï%<Ó‡¯ªë| +UÇü¦ÏlŸ4߉qÆüï¦%R÷NZkÇÔ÷"„'ñä³êº¼ç´k¶6 ´ºÏk–¼¯6âo#=. ]Y`Þ“vOŸ@ß@\ù‘´ +—wß4Ï]¿7 ÅßAŸyÊ·&çÌ}Z ׆îÏWSžTµóí·º°«žÛàs«ÆŽGgDú¤´#²^¾vn:r‘4‘«Î=²dʶÓ>¯ÓÈŪœm¾Ôk§‘Ú˜·Q­3/ó, ÿLòöEÃFÏ‘ •z›lXäoW’ü?ˆè"óú1å;rì}⳿.Ñï*@ŠZCA‡|f½G½®’Âÿ”l…õGˆ÷è +§¾ð……œûàò:Õý÷—–YÕ¥@¼6tåèߘ~§ ID<¿":k>WatIƒâýpÇ<3 ´{7£­~ÏiùŠß&«lÈQJ¡ë§À|™ŠŸFóòÓÝÿ<ûZ+í¾ýû÷äçq¢øIí¢¸R¾'¡?².IÑ|qßHèësêsèyä÷ɾo]Ã!¯@ +e‡þ5Y!=©ryøbšú’}_Ïó³"êÏÑψèGÈòáwÍßgˆ÷Á‰×ïgdëX#–£î¯ï¯Óý7Ì߯Ñ¿¢p¹@h|R]¥¿¢d'V¨Â¾Çümϵ¦cw=íš·eÝ:Ê xF ,w§ÕÄúŠÒ†÷Èï\ý[bÙå›Ä{à壹/S4‡?¤TOÎ ?¥jް–«÷ÿ*¦=A¬×ÕQ» y ³ÄG»4³Àß‘µ–> ~Ù¿GáG¶ü ñäþ1aþ +ñDŸ˜q?C|ÅQ5Ê Qù3Ä…©}J<戋hüˆØú½H,¸—þÖ´¹Kì)t½Å{rôA„ˆ<×, ñ\LDç‰ivUÆ€)":DD×ÌýH¼?¾GéÞ÷ û4Ðsò%Jæåÿ@,ì 3ŸENú„x¼`þƒX›!±úmóÝŸÓýß5“ÖmhS^Á?ô +}xšxLz—‰¸(Z¾xšFèŒô0KQiÕ2Sp÷”ÏÈ©áe²Å‡ÿwâHÙ$ø+²ÑÇ¡ëe‚âòñ{×íqþ/ë¼ù Usdò£ÄŒP¾ÿŸ©ØzxŒ˜ÖjȪ¬¸@Là¾AQ ¾T²}‹xRóTÖßO,Ô|ÙÜã•”CLlóÜX"ÿ d™ÅgÄ„ô#boÂÄBŇ”¾)îš¿ý âMwXq~‰x>ÿÌsí+ÄŠæoˆ7á3Äû1ʧ|±þÏ ÀYë¥*è à% •¢ü—‰ú­æù>ñ¼øŒL“æ·g‰ßÓ‡Äs”æøb£Ö±’û-ʉð qUå²ð1ÁÝCõTþ}bÚóñ{üK⾿Iöd‹$càÌuß"f$OS”ɹa’OÏý,g"‹ÄÊÈõÝgÄŒàu*ý‘þžø\ëÿ›8Uè;d+¶±0÷œù.ô yŸ2\†& ò(îGõybƒ‹\/ÊÄóÿâõö1-øˆ˜Îß#¦C.½}ÜÜëKæó²§D$ï!ö +þQÂïZYÊ4Üþx–¢i`ENõùˆÒ½'ÚH›Çãökb:ð¥”~ý 1ù™ç·×œÏ¾(´'Éñ2EÇô%Ÿ€  EHYOnšÂ?¯ÙÿCÊg„v×»æogw¿EÖàò2ñþû9ñ^–}ñýbúúžùþ9sݲ)_? ž¿wˆSfª€÷Íó5ÏI«îÂ{í$Zôó÷[=)áÙH‡¢Ð"æE¿Ï7(ý$Áú(ñ\×!Ë× z½Þ§lþ;G<÷O¯«ŸPu2„k ÍÚ¿&~_¡^yåê—(¡ò)eG35(Þï~ŸŠE·à‚t›ˆárq\X© .µ +{¼®ì={þòa3—yûxQ:Ø7ýv+ˆ‡à”yGRt¼wŠœqKàŠÔnq›ä/ÂÙpîQ¶è£Œõ(˜®ÝF¼ˆë:˜oœFú»Îƒëêþ!E1o«öRÚµ1\H*0ÚtÚµÚiÔô<¤°œ. +'œ{¤ŒõÁ&²O«Ñë)ïú¹¥®Mâ[nÕꪡôbkº(^;¥]JA®ç·nŽ~oÎ_M¸G¸Uß[æ{·¸b8kî½­¾sO’•¤°4¥m~Û{BNU'* jZž—†gÉ«»°ïì–úÎGÚ(Ö}Ú…~nÖ B]Õ>ëT+yO‰Éƒyî­ Ü¥ÉIzUåªÜkÜïÜ{§Æ9 +A}ª VPÔƒ»N‹bÉryØÓð4ݧxżp 5àûR*k]°Ò{LD.zîîswI IDATuÅŒTÄOª@9hlÀVwÝ1c8¶ÁÕu_ 5Zà,=ð\¥Ï"%õ½„ìá[˜R:­,ËÐ*ø—<Ï©“6q摆݌1ï ùT‰½È>þ-o?"Ì×)8^'PÎДg¯]C|=žï­¤£ä΂G9:î:lE~Ýîø((+ííœýÓGhLÈÓöjÎÃV†Þ¯1ÍΖ˜Ç#ˆ*v}ä;’’® gá~3çy@¼ ^çEݬs¿VÀ5ºÊzšÒÑ@¹*ö¡°ižsѵ—Ô7]í\ ]YcÖt=ë(&Á¼Š]Û¹¾›ãÚ-dŸØ³Wµ/¢,ê +ÍiÏj‚×Q˜e@ÔF“"°`ùb ñ#õBÍMRL^¯7—N"ß»ÖF„iX%¶®ãà„ÞJ¿§¥S2Ö–ÓÏMXGöOÈшyQŸÜ°|Jè,Ò•16p¾oª{™ÿ&Òe”H–)4ÛD;Öª6˜‡m"LNs¿LR䛈òX’Ž:͋Ӟ{·j˜£ôQCœ½mçš*N. ¥}y`ìØiÁ:ÁàñWuú@•§|ý7t¿˜@qå?.#¾¹å…ôQç©,¶MÖæå› $‡ÀBÛ°E°ëà%0A9 fÈ¡ÄE3G‡ÁŠ̗ëel˜1ì"‘!GÚ¤yÀžÅ›»)}¨}N *fÐË{šµ6$r¤üä!¼“󞣀“à½ÖRß5À„³ ¿0°Äľ¦-ëÎ}å¦X Ê£ëc‘€r†®iXáìœsŸ}°FÐ2‘P³ˆZÛ}z†*ÃI8j˜Ý:ŠyCŠ(ÃîñYY‘§nØX‡5ò¤ÁX¼ +Þ×G§]óÎ5¾µ§ÊËžß}xÚéoèüGø9ïmçÚnàu=„Ñp}j8×W¥ÿ¸Q»¡ý3à}»Œj<ÎÄ!ä8v÷˜ôPCuN£Ü‘ò²G£zÑýB UC1Ûç´{õ†ö¤á˜`ö¶P‡…—à·”€e7aÚj:ÜtÚ¸a’¡B°ûžóÌñ”y7)ëšð­´åt!ð\%õuP¹· \?xè­{v·×Þ¯éÓð+hú¾=ç¾i΄9°LéÅ65.ø<…u¼1ê^ò|§å‡–3oBû%Ô;+‚² º)7nÄlî+q‡a£è$ÚÎ…u@Rä]¶ÕõMõý¢!òÛðËŸÚq’æñ€Ÿþ^D9½aQº"pÉó?èÚö­‹ÃˆÊ5´ÔoU¾ÜùI2L¸¨e×ð*cèê<žÛ€k\¾Tïý.’Ö6 +Fk ¡þÇ ‡ªzHgî®Ò´ ^€ÇÀ̺¥p?Ѝ<?ˆ5¹–|”@œIè[A) ]áICZ7 9 Úú••KÔ)pÏQÁ°ò¤×ÖQ$+Åk° +‰„NjK÷%s?‚?Í tž»ˆ¯÷ 0s\1s~É‚sÃŒalˆÐ ÃþųÖNé—Du`é£ËØ›ˆ*ŽyÂùó*ÃÓHVî®™1éþ5`=ƒâí˜ >¾ðÕ-„)x-çº<,íÑy²!ÏÌJ“ê×á 0Ýp…©90Ï9Ë›f.Öœ9i:×êgçØè©kó"¥ßâ-òAÇißMh·žÿ<ü¼»¾wQ,*G§$ÕW&j:q­ÀõB·ÀïúüJ×§W–÷ß 'w£‰ŽÁÆûð+p:íã*Xæiæè¿}s­ë‹^ë#9=;Ë`; Þ÷ËCx«6 ´J·‹YP£ +®S·4êÜ×*!Ë;‘–“[`æxÕy£ÛæÞE„¢²¸,Ÿo‚5ĽjÛà$–Ü$¯[V¨ÒÆ•À¹Ò‚ºÀ5”'LUaR„BU‘#Ý„û#cÒÒ\(bÕLëP.w{Ø(aònne~î5ð^¸k¸&7^÷GÀL§ðµ+u2¿B8ä‘ˈ¯Á¦ùí&â4¶£ÚM˜ï| +IZQÒâ{Z S}ÏïI˜GžAE0$½µ™Ðï-Øt_øyØ’ùÆ-änJ“¶­°‚>µ¬*ƽ¦n¢x!c>ïQ#oæ­k3 +PU1Äÿ†úŸvMa°y«û ÉÊÛæ^gKÞ' çÁí4x³®"<·2´×`Ó<ã$ò)ÈRív£Q›Ac7aÜEr×|˜–ÇŸ¥L…äÅ଀ªC¥€tîzËŒÍÍg¿ë—6-uñLuÏ˧•I×1ë•w ¼·zæû5DmÓ| ¼ÿ´WW “æ;·¯Ú·öÔ´À˜XË7¸¤æ@hžteø¢°ƒðâQmsMÇù~þªi’ZNÛ"uI\ON:2ØVP¬Òpvým#.˜ŠAwQ:ÐC~I×èc0?«ÂÕ÷2ЧVfë0Ë æ?Ejè‡")YkÆ…*£(„¦Ý®in%º/-ÕÁEM«Pt²°d§Ø:²S5fÀÆ‚¬: 2Ç’R„­—$#¥†ø½ø’š!ÆØEdãÞ„5>f¥·®"{mødIЇN³êÉ„ò³IØâåIâ Ú æËó*¢F'1IT¥§køÍ»æ}òm#oºõ6h¢ÂyÐÿ´kêpˆð™J™ÊäIˆ‡nå“k‚ÉSà uÙ nLX. ^<ˆÂ.Öô¢Åú–0zÂ!¹’g¨õ: Ó¬ƒYJNs\G~K~H €Q-h•»ˆ ”7Ú¦Ý9X%P”Äl«<õ<&9v·0ýÓˆŸ” pG}ßïû]Ó¿&xýúÂxî«xƒ®›gÎ"ž&Øtß:ìŽß··’”aÐC¾‚ƒšÙ»sÜržŸÐ@¼æAzåæ6÷P^)^Óð+HP¥æLvý÷5Šëüd—¾º4Ï-S|r¨±]”{G:Ô4ÏÚêõR4ºQB¾7KΓ` ÉЭhÜmuϺœòÞóì‰0«²yÎ"Û™° –+oÀ›Îc|”è‰z ÉÑÖrH6âgq¢¿2ínùÎ>Äé[ˆìÚ@rY(ônP¼à\+5_Î"j"ÄîõKÎõ}3Î&xn.ÃÎO¨ÜW¿Àeœd:5i¼þtºlž:K.&ÉÍË%ú›…¾H›Q‡&*œƒALFȦ*³q]p=ˆyPõèƒ7Õ!°"Ñ ðó`f¸ ž³s°G‘­–KËéORÈ]ô`7¡0®ª<㣂’ç‚(Yeᅵ2¿wNä&‘þÞvP̸tÖw3FM-‚{ßÃ’¯…áã`áç$˜Æˆð"ÞŒY°°—Ç;å†VOx~» fàb½ïª6’[ÖGtŠA)©8Ý<8DÏ®¿^3{aƒmD+H´2-s&š·šG–ÂIEŒXÅ× M”ñÜFºÁÍ– ôCð€s¯ª=àwÖÓåðﰇ¸@ç[K_ÜyÓ4ê{b¼u¾¬“µ‘w”"ܦT¿Ê¶m†_Gùº=iÝ +ƭӣʬë,Ú’ÇQ$ƲAGØÍ#<¢°´ÌsÄpR„N‡i»ÆjB¼Š~’? æ£nýלdz,µyn Ì»¾6´Føþpë`øR¨¦Æ&¨iÏüÑ :Â.‹w»¼þ¦ç;M7*¶Õ˜%BeQƒe³À}“ÒÏwPCå{…®áa€Jëßé\¨*Èò¾-$_ZÊ0ª Éßo”ËÈÏâ/·HµJíÍé˜ï†â¹ÌTdü=°…ô2X°/³˜“ +õµ+èwš°d{ÌfàO#XE±Ó%ZÈ^“;nqÆ*qQŽf\:Âc¼¿ƒêõýUðÚË“ÿNˆ2¢Mç7ñŒŸDÉ+ ’ŽÁÓH§U»°…¯Àæ‡k#—(rgœçhÈy2(eX,ðkf¾'Áû· Á¤C$]eØý½,úxàÔ]Óƒß ëÞoH¨n(êw<ª5D&=®YÁ=¥>0\åÎEí=­Š¦kÏå&üBwHýáGëˆòǬ”¶øyµ.v9åŸ`å¢n`{ñF*( gÀ +W2ó~Øz7‘¾5œs.ò¦±ÄêiŠW¼ÆÜu³’³¯eQø®† ¤,úˆè}Ñ3}Xz›á²æšÎ5-ç÷4Gæ6ò§?Fôœ;ŽW‘oÿ¶Sú”OñʃyŠ:*çÏI þª ‹È²¬/WðŒ$hf<{Шs§€xìi° $$/oQ̪jŒÎ žë¾käjƒ÷ÄQØüÿëæÿuóžíuæU ¶MðºÚF2£k™ëV+œ>’”]1ZÏ•!S$¬vPʰ‚gUHÛ`awÃô¿…¸ÐUG»iÄ£áVQ_p~ÀÄùpÕô|ŸzFU‘U£VŠ« Õ‚laçyPÓþ<¡ÅY¸„ì +èÍŒ{ÌÃ@àõ²;Ͻ‚ÁÍ¿’C>=Ó¾ªÓªÀ†éÏy0½Ô]0_ì Ù‰± ++;I}™<Ïwâ>X6=‰(ªQBæPÜ +â½y±¨¡ì<¬çæ"xï\3!) +x,Ôñ&I­—ùŠ¢º†xøÜAØB~EŠ<¦­q),èfaw è¼À2‰A(Ã:àŒzÎ6¬'ÉÇ‹òЊ¼è˽ÝB=‘6=D [ˆ ƒ¾÷_jCê-ŒÖÉ/ºXáªõë5U¤6K(!Ù¾”À²86 ¶ÁB{QOn]u ºæþ[`Åg¼–Û̱z›ª/YmgÕ»¥=‚:jÆQtúÈŸ¦£ävÀï0+Úv¶x¶|§éüñŒù݇¸“©âé£!k¤ã™·,/÷$¢ÅšÂ¾‹xÝg­£93.mLÈÚ#:5Çç9ד` ¬KÔeˆk‚·!҉¶£k¨Å™Õ`å¼»iaÝ!–©¢ÐKyî0q¬×¡Vê7`iÀž+Þ6(–Nmý¡8‰0,›ß«ôDêÜM˜÷ª@g^M¸P^sCÂÓà*Šܰª<ÐGù‚X£ŠS`†!Ь0vÌ(×a½À¼]â™ZrëI4`½}°’ÖUû¨§¢¸Îã]3ô°Ìô¢‚E Q(k „2,R«ˆ +,×à÷8å*‚“ðÓ—¨ÖÕCÔàB‘"Xyp +Q>£QP´‰¨@¶\ñýWj¼wÑõ&Pïö¡®R—AMŒYY¡AÏqV[‘Qõ.ªÄÒE¢‰ôžñÉfÞ:H§!Â3C+Sð§Dî‚ óUÈ@ûL¿}JêÅÀ~ΪkÒŠçN›gH˜']ä¶ñLmL‘tH÷„:ëvM¿ZcÍÂI0] )€:Öºq?ª­µQTQ Æ‹!B‰úHWˆò,м0 +ùZI(»tõË]=ÏU~;ëͯ¿lú$¢'ĵj†Þ@¾civÁüIØ +'MŒÜpi¸€ät•¼¹m>Ìã•ß BŸ)Å}ÊÀ s¥†mD‹Ÿl‚×Ñ*˜Á0Ÿ‚×Zå¼5nñ<_tÅqÄ÷ÁMd¯ÙIÓ_mà;‚0áeqOüxýèõæ2ûTã%„2,ÅÎ":¿g`#š¶1øbP'á +¯›¾”¥1=$nb0aùi"PE¡½28ƒ¨Q¢ŽZ6ÇÔýQq: ušà û#ó\—‚.÷Ïcد² öâÍíŒ@Ÿóà2²A׋ɃZˆQú/!ª<%9¨ZªMÞÂfáçƒÛà•sÆLƒåñ H–È£eÆ$Þ~ÔyÆŠé·È.º†BVÍ—)D ¥kˆóü9ä?¢|LwOš¾¥E?L€yˆ¤1w‘?üFÃð¼ˆÑ1\EsÒ¨h…Ä´Šóï[¨',¨Jb#¡û—Á梛̗ƒ›E¸¥jm]yáZhJ‚›È>[5«ºýÂßcÇs}LTˆîÍfôÓëÈö/ |á·îÃç›°Õrå]Ÿ •WÀ°ë² +åЭʻœÐNŠ„¦…@6ÀkáÒâ:Ø â ö„·pX¨ò#…ÉÚˆžX#ºP~ÑèÀªkjhœ€U"v8ÇI¨S_š|®>ÖMrM˜wqvý5ÌçEóy V©Ÿ¯‰rþ«iÒ¨8fzs,rN•…~ë²u}TcXÊŠZܯe·Ü¯3­´—r™5cÎëÙNƒØØ\v­êh¹]ÄéèaÓ&KyΓ¦q鶇¸Œè;UfØp£éÈšAýéÎIpqBu +tÞÍu±lqA¬âáPþ Ñ0cц›d(i'ÜWäº<&‚¢p ¬£xxßA¤[rC=º¯Â†‚×1梑0uÁ •‚aãA0M™3fY/WaCÞ«•r€³Ð"dÚó%Ñ2˜!kf7 «8icAAí âLý&êeªu*ÃgœûŸ‚5ö0<â$X© ) +}ðšq…E™¯A­¸2«ÞÂ<²çbÙ…Œ|{®n:§û=lƒjÏô£7àçjï¡xLwM?$ÕêUð»éÁ*-æsL»:ê÷ð:’=¾6ä¹õÍs–“@Úº\¹Ùûo Õº\¯ íÀ¹ +^K®'w qCx•).°¡üy S÷ÁswÉùøE°¸—qž5 –»ªÝØpV„¿¹)Û}ðþÔú@õè`E`£öŸ†'QMäDl£ž:R^ iä'íŒ{VZ± f2ËýEä¢(ë>  ä;&¥Jl#n¡ôåfÕ‰by=òsŸfQ^GXhP£‚~d¡ëµ2ÚÉœŒJä‚‹û‘^f ¯¢¾ðê®yÎâò×âÆÄ-Ô¯àLš¹9 +^ËmX:$Ÿ—Á‘ºÃÎO å*©¿ºÝìzË[ÁÅSˆó"1*´ÁÞåa‡·o`0zJU8 –çê¬ p–gBžÇúqÙÂg/Çý4ôÁ†0¥a/Š2¨Ï_vA |IÅoÀ\­ü×V1ÒÁITeÐH'0üÊ ºŸ¾J´ƒ„Q.pY'¾ +ë ½fðÀ´¤N¢9 *Nõ›“† f|ô£=„þ–U†/ÂzaZæ×BÛÓ¸eóÿ(Ãt!$]èQð X(Ý躙„õ”êŠã’z´Áeq…ü&üVG&HïCœo')1eO®ÅeõÌ: + †¢ÿ_Âó…¯í‚× ýòÕ7i"9J¡eþ^G”§W™’W%´¿•ÑN`Øýœ…­’ZvõG/È;Ö4ªÿž¾„Ñ<ž{ïÍ•ûf>$*£ê +…À.òóë¢ µÖu0 æíiúJ§®4·T m¸„°ÒC˜b^tò†u>d]˜V A”{·¸‡†Û°‘ÀÃN“„M$[×v‘}Öì °újX¤A AÜ^RTo +¬  *<ó üVóØã|ê|þ ØàTc £Sd‹¬ Ÿ5OƒE$QDhZòŒW¾[±Vs`¯©6fuÀÂÁ6†Cÿfà]3B¢T|8 ^¾pÝ] –ÏÏ:Ï¿›ã>¨9î8}hpüººàð˜Þ6¿ézØÀDô»9¯y CDßò|ÿe"ú["jчDôTÆ}Þ%¢oÑ?Ñ1"zË|~˜à4ý0á·ŸÑ¿`_²àý„ˆÀ³>"~·3€g2ôˆè+Dt—ˆ~LD?#¢¿àó'ˆè»Dô=òÓÁ{Dô½GD¿ Þ¿Ea’ˆž!ïW‰è¹„v÷ˆè"zˆþ¥ÄóF„6¾@<§¾NDoÑkDô{ƒìÔá}˜Wþœˆþx}˜ ~ß%?ú¸oÑ'Dô±§Í“Dôñz~†˜·ùàmâ½õw¥zœnѳÎwˆè—Dô>1ýý˜ˆîï·9ïÿ(ñøŸ$¢=Dô4Åçâ"úíœ÷¯ +¦‰å¬¯©ï¿×G‰èyóÝ“ÄòžüÿM"ú>1]Öã¹ODß!¢?©«Ã¡KLS>!¢OSÚí!ÿÿX—¼p‹’é¾ ËHoÑ?ÔÕ!,ï¼GÌ›þrPyHàñ¼<ãùíSó}•4p‚XŽxž˜þ|JL¯FDïiûUbð<1* +ËAo˜¿Ÿ7ùÄ“Ä:ÁóÿãIJâgÄ<äâ½:s‘Ç@D4G¬ä˽GÌ$ߢøBJƒbfñh`û{ÄÂÇæЦÁ!â…±‡üÆ õ÷ÍçoÞ÷ž¹ï“fŒ%h \>ñ>ñ¥1MòoÑ#5ÜÿSâwÿ#"úM ÷Øà1­¹G¬ Ë 8I,Ø~›xŸ%Áb&ø1½ûÄ|÷11C ² âqbæü1ÓÍb¼A~JDÿ\` œ"^û/ÑKdùÎOˆ÷ÆËÄÊÇŸ¥wõCØÐñ#b!û†Ø—†éËKÄbUð)±2ùcžsžXÎ2²× o[†Më—ˆùšk …O‰e—ѯ*êS•°LLCBxöOˆèßÕÛD˜&– _¤¸Áù±RõñÚ´ÑLÃ1?ÞCÌãÞ%ÞÓe à_ØOìØù +}‰X)ÿ!–Ádš˜ï>E,ë"VôFÍS¾ØÀöb )ú“ˆßéûÄQoÓh¼Ó4˜¡0^=Hoz4ˆ×ã—ˆ Èwiôçw cÈÃ0 DDWˆ‰4x…†ëù¨ö+·{ÔwŸ+~_¥¨ðmbåçyJ‡wˆ &³P,¡¿+zƒ ó.SÄïíëÄJÊ9®½Kløøñ;ü¼zuËÀñ>¸K£—4E¼ï¾Fùß}|Hv]¼G_¼u±H>"ö’ýœ†oÈÃÆ0†1|Á`Ø€±åû»÷"|b¾ÿݩñä)â0I§˜0ß=N¬üŠX(yØêÂGÄžÿaä‰V “ÄŠÿéáVxfÈ +:%ð)ñ¿K,Ž-úap˜XùÕh&±×öâ5 ¹¿_¢¸2+©w Š¢ôK¯ "ÞG/+cÈDf#çÆ0†1Œa cÃP`ØYbÏÙÄp |˜•¿:ažlq˜ûÄ‚aæ€a cÃÆ0†1Œa cÃFFÅ0†1Œa cÃÆ0†1Œa cÃj„º‹Va cÃÆ0†1Œa cÃÆð0Â^â”Îg)Zóæqâ‚¢r¬¨œ† ÇÈþœF4š}0†1Œa cÃÆ0†1Œa ÃÄuÏ%.(úñé7O×ÀùOÃëZ0Ì×.Ó5î+Èw‰Ó–†b° ÄÉ¿AéG>§ÁâºU?%~§#s<âØ0†1Œa cÃÆ0†ªàñѸ÷ˆ=dw‰/½G£sœe]0K¬èŒ ¸V Äëé+ÄŠØ=bëëDôgCìW•p€ˆ¾Gìaþ±àÄ…Ò? ¢ÿex]K„y²'=Cù”ä»Ä}ß182Š1-Ñ÷ÉÖZ« +¯ÙÓ²Æ0†1Œa cC0Aþãò>!‹¤7E‡—éóMbe屄ß?#>ÊøÿXê9ò÷}Š`ÞK¬Ô< {ú˯â0I|ºÕ·SÚ¼Kì!Ø„=K¼?Þ">úõ}â5ö8q±ïÿxÝ}‰ˆþaH}$b×KÄsþTE÷|@Do>Ì‚æûˆ•ó¤ãÖž> >­é>±1êÙžö|Ž¢G¹kø”x]ÿ€†˜06ŒaØÐ"¶ì~‹¾XLòs—O_Ä1× r,èëDôWÝs–˜1½D£e‘$L’=Ïýc7˜Mb!õ+Ä{;K ¼KìÕz‡XÈ­ƒæÏù,1Mù½I|²Ðø]Ö WˆÃe‰X™ùˆxɑƇÿ~™Ê¿‹yb>ò4ÙãVADÿ¾ä}CàªyÖ7ˆ,ƒÆebåàqâ5þ4qX÷KdþŸØ³ÄÊ}’¥áCb¥íóuqX±|8 à{Äžö·ˆåå¿BŸöÑ+d÷wð±!à»4X} A<¶ï‘ÿHú7‰ç>¯œ5EüÞ¾EÌ#]øÀüö×9ï[ Ú0ELøC‹Þ7øyÂö3È=Äã'Ì÷OPT1’°§·èᘽÄÄêuò/ð“ÄÖ¶ïѦÜçñ&y™F l¦|®ó‰à‹8æAA›˜i½BDPÁý‰•²Ç‰…ŽÿXÁ=&8JìiÒÖÿÄ‚ü÷i,¸ ÿ~Öü}žÂ„ó$ø”x?ÿˆª ¿Nl”pAä‰ÏˆéÉ»dóR–œÔQáç?!â÷oÿØPô2±`OÄ<á=ó9K¾k¯·§Í_ùì‹2xƒˆ~·`ÿ“à1ïú„¸ÿ÷‰iä¿"¢9bÓ7‰Ù?!^{Óå·ˆ÷ËKÄsñœÃ="úÛŠûúyyâõñ„óýÄóý±Z瘿MD¿3ˆÎ ÖˆÇ#ëí1ó÷Eâu#Êä»TJÍñ¾–u=¸G¼g‘Þ1K¬à»^ÿˆ÷ðÛT¾5Kü>¿M¬×iø.ý?<#Ôm˜$ëxž˜è…Oˆ­É3ë_+Ã"ìÂ}xnž£äp¹$xˆ~¯êNU ljûùý‰ç÷ÃÄÌñSbfêSê&M›¯šûüçZzZ?|!ò‰ø"ŽyPÐ VÐE˜~…Ê3Áw‰ië÷‰½j_u’ظôõ”6Ÿ _ÿe =˜#¦½_£pþ-!‘Ÿ :™o¯ç²{z†XVÈ Ÿ+h?'VH?!6|@§Œ1h8NL—ﯗ׉Ý—ˆ•âgˆ =>øŒøÝ¿IÖ“¯½ú¾µó)±±ò#Æè»DôïLÛEb9…ˆiÈw‰=‰_!æ_7×0C,Ûk‡Áâyý Ùý8CüŽ4]zžª‹†Ì¯å—‰'/Ó¤šž"»Þd_ýy ý˜ ^Çߣ¸Â:(ø‘y~]4X;=>1Ïôé-U@“x\n$Å›Ä2ÆÀøM€iâEúuâ…[§Å豕ðmƒ£þÓ Ë’”¢{ÄÆ»æ³x+>&&†_'¶&FL$eÔ£—‰-ñ“¿pÉñŸ ö®ývÂ}Ä“ó± ð° b_¨|"eÆ,/OõYŠç ŒÒ˜«€iâñf…öÍ+«Ïªï¾MD\âÙKÄôóbóÙŒ¤½ùyí1þxM½cþÑü/û³ôÅ0ŠÌûE +çá¿$žGž"Þ×Ï‘u +¸Bå}âµü§ú+ †e"æµË!Ï Ëyå‘ûd‹T‰óa1>BÌ÷!VÄŸ'¦#ï™ïµ£ãCâ÷tß´óßDÉwñCŒñ÷±¡õ±üõEÓÚÄ|ê]²Î‰)bcÁïG¿=EÖ0"4û—Äôö9"ú×õã¡‚Ibc‰VêïÓ _V“ø-ù YÃÌà +ç‰÷ÄóÄûæ=²‘#¯ï­Çˆ×ä]óÕ4É'g Þ"Ö)«–ÿ—ˆé–¦Ko-¡K"žcýüw‰iá@xL•€ýÄV“¯’ßZtŸ˜ð}HLÄï3"^ÄD6GŒˆÿ/‘=NbÙã%|ðñËû^™£Ä^:7?ò#bÁB¼nY–ëiâ¹Ò æSsíÛÄeØ^Ñâq=FÉÄø˜ùˆ•Åÿàis”xs1C}Ž@ø"æÕ5æY²cöΆšC•³ÄóZ¬ç*ñ8“¼î2¿rL†oR9¥išl¨ªx¾jîû]"ú­÷uÐtæ5ât$WÐX$¡χ€™G‰çÂõ¼¾oð®ún±`*Êõˆèÿ +xƱ õЧ%½‡8EÖÓüUŠÔ&Ȧ0¼`0IžHƒÈV 5YcÐp‚˜‡ ̓¬‘ç—Ä´ÿ‡d÷QüýΚ{hÿ. W–Y æeßt¾Ÿø½ÿ1u‰ù°ŒCœ<_'¦åYQ/D<Î7ˆùãÜb4K,ó¥í'IeM≠âð~¾ó!ñ§­…kÄóMÄïç èoÝpŒX.ù„ˆþMŽëöËóÏ“hù%±ƒdñü¾O¬ïì!«'}•ª£EG‰×xÞÈä:á-Ê7Ypx­ ÝúŒ˜&ýQ…ÏYbÝMZ~FLCêwx(‹ó®#}7°7ð^“θ`9¥Í>§Ìýûžg_0WÁØÊâ€[Nß¶¼jæ­È=/«ùu¡oƾ4Ä1ŸUýi'´¹ÐæŠjs`ˆãÉ‹³n"wШð9çìzžujÄÆ< `¼§—B±ý¹@þµ?è1§aÀm$¯m'aßã„6g¼kæoßÌo}^1÷܆¥!S#0Ÿu¢ð®+í®™v«#Ð纰ø:Ûp¼ÇÓ®ïÁMGrŸEt­ÝÀh¯¥IÓïà÷ÜE¾½¢aÓÌÑ%ðú8 àªÓf ÀL@¿.«kzžg•]lÚ)s{¼¾Nšï–Àkl ,_%ÉÁÀ|¬ŠþŸÃèÂT3Æý`$°ƒáî»IXú"pyÏ.{ƒÓˆ3îu0CÏJeqWß5À›ç˜QìW¿Í‚7Â50’ïgÌó4Ñø¥.b=Øo$­¨l8`¢ä½›û’ !«`=è±ë…ÜNhÓUmVÚôT›ÖÆQÁëVÃ&ê]‡MÄÀ¤*cC™1Ÿ÷ôM &êy•ÌyÄ æ Çœ…mÓŸv`û£Î8\ftÄù½ +lö*îû0­yöÌl«ë–ìÓ˜>¹ýòÁXQ<‚j r¶Ôø×Át©VFŽß_V±ëßVêDVê˜ö]ƒwLû^Ò„'@§ÄxDþ\ËO>8 ~ÇçÌ5ûL_æƒg¦´j<ž#‘áÖÁ +ñ°ß/yíð;ñ9ê‚ „)ΈÊ×®© #. ÉÑI0ÍX¿ûmØuE`¢8QÒž{,g•éû¬‘; z`ù«æm…+æ>ë÷Ê e›Óàµ%ÐÇhìµIÄçÿdE÷NÄ¢ +¡Ô° +ÿBo€•„õݬ¹¦&*®±d^Ê$¢Ìô,ØÚµê¹†À‚³K¸kŸD›ˆzý·ÁJzUŠÉ>sß®óý$˜tñ_E!­ +µ™DŒµ¥w#anzªÍñ„ûŒ.!jU”¹”0xÈóü¨W‘ óqdÃòy ¼f|F€ºÇœ…ó°‚ܹÀk\ÏG–¾M ʰ65ªôjâÆ×Ï3Š!%Í0¥ÚUå…%œATÉ]ó™A÷cñH¢³9ïÑV×VéEY€Uü®Â/èkXGúÄàŒ(Ã@Wì|¬ ôÀkkÖi¡¯O3,ö®Â 4JôÁ±‚ãаXñjÁF·ÝÓˆ Xyå˜Ö÷Áë¢l´Ô¢Q}·0œ}8v²‰acаƒð¨á¶smY£_Ñùꤌ§í´o×Kü®ÅÃßG4‚åvŽy(ƒ>´†°üò·¦Ì5—Qñhåö™ŽVå_¿×_ëþ/rQQKÅ’…§øå¯švúGÁ^¤~ +,ˆl"ߦnÀ†œ ” Å¢‚AÑЯª Ìs’Ú4ÁÌW6Ý6â¢Ã±vá''ÓîªßG=ìö ¢}D£T…³`¦¡áêñЇŽyVµÙ„ez>èöµéç Æ‚š‘Þ +h?0²'´÷_–6ºô†4ÎÏ Š±v~ÑfÊ} Ö˜:œCÔ[sÃõ`O"ªxô‘/’혺v»Æ~6ÀQ#+ˆ†~û@èAÉ!ƒÆe3×€5\+>=ó½éׄ•#wÀ†že° 5ü^ô²xqL¯É[ˆ*§Mß{ˆ:·ªÀXC€ÁÏfÁ¶4emL+;°Ñ-ð;k¦Ü[Ò7Àûù¸£kdȳߗ•AÖ4O‘¥Ò1ó³ ;¿—aSdúæ-ußismÝé¯iÊÿX«" PRÄ6PŠF;¸z‡{Ÿx=_Eôn G}Í‚i›DyL+o›ïÝT¨Dçh5:´Š\¤sD®dt® qY‡Ÿ°êœ.÷·%0Ñ]w~o€ OVè°~Ùݺ&Pá!ØÜGxøo#˳0‹¨B>ˆhˆ¢àSƦ`€7˜+X»žãAGr„â1Ÿ(ï˜[ˆîÕ†ùÎõ|o#Û`6¿ÀíF" $‡ÊÁ9O¿²ø²iw Q믄?ëý{qYƱƒˆ¾9ToÐ6j…qö}M™ßzê÷Û#Ðß*q/¢{©hÞ}.ä¸÷,¢ü¡‡p/ú¢P´ÖN^\ïÍ,÷6†[£§.œËjØüðeX¯ýŽ{×üYiÃ6ZË `Þ)Ƈ °à¿kú/Þ8¡«¨×P1Ë#»5>k¬Œ$)þ·ÁrÿTÍ2…xzM¨œ·ˆ8Ïd­¨†™37õÖ›¦Ý-؈‘Ûàµv¼î$ÕHô$q°Ôm4ìxú+F§¢ï:M/›G•>òË!³ˆ®—[ˆò£y„E¼¬"ÜàçK‘÷å¬Ó—ƒN›ÐHÒܘ÷ ?¢Š]¶Ø‰;é-øÒA0ÑïC(S<»qBó6z7ÒaXB0P¼ŸÍÀö:<|!/n.Ë +âÂß!§Í¢Æ¤ D=S}ŒžàôEÌ'ªzÌÌýv½G]ë(`•6Ÿá£Š1»œÒP¼Bî ]ñi›vëˆÖe³«¾Ûxèqm̼ߴ…z?ØŠ/at®WïaE_ 쀦S`¥á(¢…ÈZà5ÜÄhÔ¢HCW€îÔÜçÃàuêMr… <©z´†0·ûÁBnZlÕ{އ]ð::o>‹‡ÖÈèapš$œ¯áag`Ó|¦ÁrI 6*fÖc;¨H™“æ™®3¬ +”b.”-V… Ä‹‡w¯õ)ÿíšúéÃÄSm³ ^K»°{ä"xý5Áïà&˜î5À +êÅšÇá“W6v~–_ÌÂÊ fŒY{c²#§ÒàÕœcí¨kw•kæ58gAˆ¬*S\JéoƒGæ½ k:´‰(#_ â7àÏ‘<˜ô5ms¯ÛÈ⿼pCªÈÎÀZ`Š +Áeõ¢BF(ï!ϳ›k¶QN¢x4t<íVœ6Wß[ÎïÚ +? +øEÌ'ªcÌ33îÌ ªä_Dt-û‡ˌY˜Y¨’í; H/ÙVíöÂ{æ÷®úý¬sßm .T¶ZNƒÃ‚1ic{˜ðâB@L“B‹#¹°¦{G1Z§)CÔ3Q· )xᕽ Ñè—‚×µ†<מ_ÛÁç'­¤‹h€4åïx݉4 +ÅO‚÷ø"xôa ®ƒ÷þ ðº=æ/»¼ñæxôPÝ W>ÃŒ„}×]GÇõw&—ÊUäQ‹0°‹ê‰Z QÏÿ rüĺÔÊyÀ ï<â„ÚUò&7¸Ñçœß×0E•²ò‰F«Î'ªbÌÇP®°MÌp’bQ`™1K¸}ˆñ°èz×Öíõ”ëÚª]6ä\j¦$)ŸÛlNñŠß*¬Á¶…Á!êFác"äO¾Ï>òy vÁë¨5ÄñM nttÇU0M:°6-$µŸ¡ÓÇFÅð2  u`]|>ŠK^Ë[—Áò›ð q>\ÆhðnÁ˜žI.úQðkšß¯‚®ë`Z |åôú+žo7Z²jåTàCËu¤M¡#mv1ZQÃblÃ: DgºnÆ¼Ž¸ñfÙû‚cVAËEspL!IyÙ´R¢ üκæóØzGë°õÉšÈ>òÓWø5B#‚µ±iѽ³ìÜó’ ®ÁÌ•6‰¨|°†dy×MÁë9Ïn«ßú¨aoæi,Jçzʹx¼Öæ)Q‘1»( ¼ncÙŠÆ,L2$ÏÞÍ=î ª¼$ч¶jÓ„5H4Ì2âÐÅ`sñ‚äëˆqõ÷ƒêKxÑ5®®~zï6L»&˜¡+>+Hönt1øH¦9Ľ—`÷ð4¬ç¶Þ3mƒUF0Ì +H½€ûŠG ^Óµ8FÅ ñ4ü¹Ã£hD΃gÀôà*ØØ!òß²ß(ÕИ¯©Þ¿–§®›~6ÍßË`^ׯ¿U 7½GjM]+ùž4ô‘_¦šóðc`E¨cæ® ¦{=…ëæûëˆóÅm„9$ Â7Pß;i€õ‘Ð*ö'ÁdÖ3©K`&è*M0³XFu!VZÁ¬Êr+9:yò«À®yn+Ç5Ú+2¨©¢E´vÚ­f´YFêJçÅŽÓß,e~?üyv×nÕ[B>{̤D™lƒã óý%ø#ÏòæÂ»ŽŠ>’ë<,‚éèMð{º-ûf LÇÎÁ†¸¼öšÏ̽^Eº#F§?†BˆcÆuùäÖ°²ö‚éAZmŒIXG]È;¹hîésÌjEÈxsahCíÉ­"ÜFÂÄ$´ªÒA9ØT}¯*B[P‹xBËb×<»™ã1XôÌßã9®-ƒn¿¯›Ûìþ>¨¯;À¹v1-Ÿ(©½› +¡!ÉúªQ¬þIÅÊæåsºEgÊ*´Ëê>®:h*@Þ1/# +Yc>8¸)IïV@?SÌع_Î9†ªpL7NiÝ)°€#ëv¼¾FA8΋óˆ)uˆ¿[˜GrûŠÖQ9Œ¸ïêMÉ:†8íȪö¿€xŽb¿à˜}Ø€˜Ûí¯:óòŒµ€öm0/‘÷} ƒ‹ŽÓ}paeý¨ê½6ü¿ 6®h:8ì¼YÃð”h9¡@ŒðÞ™7×lct"ĵ‹üaÁ]D!Í¡7iæÀ½`™æXŽ?gæqLãZ\B\Ê27໿V<õýŠ8%²ž­£Òà,,]GÇ%„%fÀÊ…¿^‹i²ãòG8¹uŠ|^åXO´ð¼WÁº_L[Ï€ '`£ù†à/|´Šz>×ø +ä;êoÑð×*#ÝD° ñxë4¾>„Þꚬ5©SÄÛ5Èuè3Ò¬aøÇãA€iáiØc Ûj\Í!öm?xß+–gÁ²ÐuX#`ËsDwùÕcé#^89ë I +Ñ$øiúX©£Hž¾67"¸ÆU}¹á®ÃÀ5°_@¾~¥õ7¤Š»~þ3Æ#æož:Gaמ׉·×¹þNB;I·8klêæȼ>n€÷wÏàyð¾—(“[`™é:,]g_Rþ¾›¦–Yd­ÒÎh;Šè:?³"ærahC _ìŒÀ„äŦš¼*ÂTµE²=¤1É¢5žtL{±HŠ×±LY(¶Ô|%…îë6I›Žj3¬YùD.N"Œ¨'bBܘ!QEò‰òŽ9}Þ€ä«êª…“ø ÓÎsòŒYß_ ‡dEÍÎÛtîÓLy¦ö6AT¸hgôwÒÜ[P:ö™nÂÑ ØÐIøý¸™£´qŽ +Î"nXk©ùÀ[»ÁW<ËÛ¦­OœA|}U™ÖÔ@Ü€?êo6‚¬Š´AÉ“ÍjçÒÑ>èýÔ h–>¦úêB_³>âgD2JpÖÐqÞÅ0#ÄÓ +0_¸–çƒ ÓWÀëñ¢¼â&szR^Ô^Öön(½/äy Ñq×Íü”Yƒn}VÎþ¢QY.-ž@”ŽöJôQ£Ž8raQÃê-ðZ:6Úm›~ä‰l>^!Ž;ÈÿNÜ÷òÞë}3Öð>¾ –MÚà=ÝïU3æÛ°‘‚'Àrúóy¯¹æl4fq¹Í ÙÏ‚4^0í´meÌϨbW¡Ò±ÿžÂà1ó÷íG WŸ?*y¯½Dô óù"úQÉû…'Ìß h;GD/Ñ}"zÍ|÷gDôs"úµ*ï]SŸ’Ðæn@›{êï›%ûT^ èx^Ïhÿ8=pßÇR~{"å7÷Yiðk"z[ýÿ­Àû¾@ùÆND_!ÞC/¿×ÉŒk§ˆÇ¡Çûýµ§mÑ1?CþùÜCD?L¸&iþ5͹ŸòÌïѳDôcóÿ÷ˆèT»i":FD—‰hˆv‰èñü„ˆ`ð—Dô}"úvʳCáWÄëá+DtÄóû¯ŸÑBÏ«^£èÞºO–¿ý†,úE!‰>¹ð%â9ÿ€ˆ:]׿"¢7œöß ¢¥À{§Aƒø¼ä|ÿ +ý.ýK{þ=OàÞzß¿HÌ»Óà?™¾¼H¼gŠÀDÁ눈þ 1?Ö4ñâ½ûs"š)qïAÁ³ÄôîQb>ý=ILŸˆˆ>&¦ÉÂ_¯Ÿó´¯ÓíljyÃÓDô©ùýEsÍasÍ›Dôσín&ü€ˆ>#^#! ÷Íb^£áñ¾y’x¿=GD¿M¼6‹Ð "¢6Ù¹$²rgÒýöï¿=žß^¦(ýg"zOý¿‡˜?–Dôõ”ß¿O–oÜ'¦‡ŸÑWÍóï Ñ5&‰è ñ{ù1…ËzD,äy'S×/‰è/œ6'ˆh•ø}}“x-üŒ˜7½ODš¾>GDOÏý“ÄópŸxÉû}š˜|‡x¯½BÌ ß'~‡ÌýÞ3}ø¯”þ¦ÉÎO9ÿ¥ëÆ÷Õçg*½s ¥@`y¬!yQ{PË?FˆZЕCïâ¬êƒ„â¦Y%”©0/uGHñÁ´ÂƒR<¤›ÒF¬²Uz òbÞ|¢„ùæÃ#÷Éq/’OTgÕ<â…n"9Ä×JØÎx†kQ³ZèBËs/  ë9ÝÌxæ¼i'^À]Ä‹ÐCx5bªÌ_•Ðyß<ذáîÕ4œJ˜£¶j#ïcñõØKžæDèÂzlð‡:úª +çE·ÅŠ…âTWDVÒ›Bµ94ìYÏñêM7”0ñ]°×´hÁ ¢é ½šû_^{™/ƒ×É2˜H*Vžpõ:QŠ®ÉûÚïý)ð^‘T§Û°üiQ!!(žÚf@[íÙw Šé"¶çPMÔ‰[w é©NG‚¹»Ž–ô=ÚNû¬TÈ4l"9ç~Sý¶^}ðúéƒu‹Û`ÞšjxaE]H““ð°s_í¥Ø}q œ2rÁŒ÷"lêšDÁ]6ß]ïíuX:Ý1óÒ…•ݯƒ£;D'Ù„_¹ë& ÒjH-«vYòWN€õ”eð\²F‹.àÞ«òÞ¡ –8èªP„ù>Ê5B½á…ƒ%mŽM°²vvq.«ß|J•HuÖ1¸[-<©Í%0!I"œR„gÐ5É'r\¤)ïRx% Bò‹äÕC¥Ã2’‚ݶMd3Û"cÎ +ó^Eœ–õ´k +]i¡[r'ÐCÔ¨§³@ß|×…=ž' –Sž_EPNRJŽ‚çý"F¯ ™6 +†Pvaç]ŸáÒ"B`…]›â¢¹®y‹zit W«¨'£Je¨…0þÓVãêÞ[ò¤6Pßñ‹R×Hž×GqXþ£Y„nÑZIÂú¤™g©r,°Þ2ã¿KO«¬!Q÷Ã'¼ Þï«`#™–O΂iDÃÌù6F7 Cœ'!ç4赤+°WéØã·@Ò>oÀ_¯äì{Ù Ëã4/m;×´Jô7-ïÿ ¢© +æ³ð‚ë¯Ù±ü¾ò„ük("»Åu*Î,Ÿ€M·íÃæú¼ovÀ{f¬‹,‚eÏeØú9=0O]S×JZÍŽºW’ì0…pGG;eÌgT»2Æõ Äײœ€0ˆ=î:±*»whC!Ëp•Ø5}ïƒ GQaT[a}äÕز¨Å[`B² &BnET“œÄxeü^ +#Mú]ò‹Òr0ü‚HEó‰–‘;È.R•Uö6”®º.+Ÿ¨îª °¢¨û¤w²í´Ý5ãHSœòŒ™/Üxq†´ì¹î"¢B»(z›H^ßMD÷ê%DiÔ¢’UðœÍiR[¡ÏsÔwNrékol¤èa´òï´¢,Gö¬›ß7ïô“æ9 "šëÝ¿_íiS ѵ7ŒŠöub[­›ã:÷ä‘$ ªµ!på¢}u–0×RðÓ…m°Ð> æI×¥‹«`úuÈü~Õ|#òxïtÀïe?ëHY6}\¿›ó°ŠXÓÓ^"ø² +Ö ° Ym5èbË¢øv*î›|¸€8¯˜„?çÞgÐ:­#\cl«`_[ž>hýp ¶ÈÝ ð¾‚0Z;‡â¼C`ù+ÿ¢Ñ®!Qô€ °!f¼WvÌß °2È%X:à{Î4øÝÌÃFÞ NÀžØ$õ޹·+uç#Í`ÕVíºs”„IÿÛ൰€z „-繕=+´aÏËP%œTÏÕJR‘\í¡è¸þa@m/R Ù'P^C=Ʊ XÚYEÞûDiÝ-Ôgài{æÉ²¯¯‚çö0˜æ¥/ƒ×xèý\¸–/ª6Šò˜v­Áy6§™`C¡“¼£‚¡i=gŽ/Á:ÉêªÏM⃠d–U—cw(fpnƒ÷Þ˜gC>ƒÐ ½Ù!P$¢hɹGZÿÀÊ}ð~è‚׎Ë/Cð8lÀ5ó¹eîwÉѯ‡ç#-šKÓünF?Å£ï§û £(]ƒ²Àê¡Mç9‹˜EÔãQÔ{>hœƒ5ZˆwJ[ÁòZÑZêÚ:­ÁKˆË5°òRV¹]4÷í#n1;bž•剞@<_5 $÷g,3Ïil&à¼jsÔ<¯ E¥<^Aù#k’°ª|¢acž|¢ªÆœD0n€ßwÞu>ƒ¸± ˆ n$PÖ}{ž>Î!^«à\Æ=|QÇ=ºH„Ñ+°Æ¡k`Á#²¯a鯉ª±¶ŠX¡ÚÓ݆Áާ[¦Í ù‰ë5r*__«7ÂE§øäåMZxíaôŽ*«§œù+êˆ8ЏÑpõ¥—íC>ô¹¦¥P¼‹‹ˆÒƒ4ÚS§á÷îoyùIÕ/W1?¦ó·ÍßmðÞ¾ ¤oÀ*;¦ÿb(HsìÂz{«XGw`£?Žªg¬‚•Ê«`ú{¼66Jêñ4 SÞDXQ·<Ø„Í5Ö¹Xâ}ZN¹6”íCý¡§“æ9'ÁkÑg]m•Ïm«ûwkcØræ*í}U5fŸ5wL<«°˜N™¾Ji™1üÂÊIĽˆIaeæwM+§-ô·múœÆTàýyÐÌU~aù&˜~Çà +ÓhœÓÆ}¦n”TËÓgMsÍ BÖ]cPÇù}ÆŒeÇüæ2óB,äˆQGó}ˆªË3:±hѹQG×hY†¶ïE\êcxaÞ‹àuæöIÃ0ý9+Ãè’²8iîï®õMó}–Qi/˜žIíŒ6laÛ]°cã*¬_Þß,oØ1ã9 ^Ó.»‰òÑS`¾³×Üë:xÞ%à¢yÖ +¬£c”å]·Ìœ¥½+]kÆ_XxÕxÑh0KýÖèKëÕÐÌÙ'¡÷$ +ëøý…-¨ªüBq~„¤‹ú°íÜÇ•¹ *ól‚užË`êŠóç°n!éÀ«à=¸Vž~†ÈPY¦éˆ¾¤”M×° +ðÞ}g–^íuÚJÄÍ>õݪo•òŒŽàخ𾉀¶z`LÄz +0±¬3O+/N€7­xý%ÌÔ÷²ûÈî$9Vuy~u8ðeÔ盀õÆ®šw(Ö¥å”뺃º<)Y¸¬œõT_ŠZK“°­î]6¯s˜ØDš)mµÂ[fÌ °p)!þuåJMÁïÈ3f‚¿(Ñ Ä-±IU¹[æw óv•Ž7$N ê%,âñ¨/™y;ƒ¸R­S0’` ƒ‰Zð½[×›*mšàµÛïÿk;Õcü¾WÁc#„LËsfá7`†ÎƒN¨ªŽË(¢ŽDªÂ#; g‘ô‹¢ØD|-Ї\ÐM­Û+$¢°HXr™~Ì Zí`ú´ò|À|#äŠsý˜W¬›9<K·Íõ§ +Ý{,ˆQÔuʈQWå‡Í<öÌßUÓ× æïب,_¿FE®K3ûÖ¼À<uC’j! äÃçú>XV¹ +ëT¥ï: …G^£'Òê"eáŠs¯¤vÓ`e¿ öd_W㸜r]ºi§WÀûj?ÒßWdñíxÚõü®úÄrÖFÖiDyÇ|?…8ýXÿ¨*OÏߊîI€ß ­›ˆ +ë³Î`År3Œ´€yóìذµ>x£4=íÀ*²y'Q®«ÃJª=ÿEr‹ 0AÀn€4ÆjɼÞÜ]ƒk°aT½À{HÛusàÍvöláà÷/¬aƤC´‹ä+¥¡cïV|ïAbÓ™ï4œ·x^îÃð“Ýp²,!á(âÐ÷Ì]/ázìçÀ‚ôŽj_—ñcØØ‚­Œ¼ k5Ïë ¹‚úŠœ5Sž{v]ˆÁb9á>¢@î€iÜYðúnšßZ°Š‹ÌEÖ£JˆóR ¡ÂÞEu͉šælP§!VÅ#ˆŸ®R¥W=í¹§`÷Ä*Òe¨˜fè:Ú%ú2 »·`‹³ÉïGÀŠðX Ý¯_Qâç`sèÏÃ:H&`Czo‚ëesíyðÞoæY¤×4Ø‹¨à]Öø.F3Qä€×טÇu溨×uИE³qEÐMG%7 ŠxG5 ÞÓð `zzÄü=eæ&$þ0ªWþr‘’ç^ú·&ØÈw ¼/÷C¼o¯ƒåÀf‰çï…5´]6Ïè¼ež}Î3Æ,¹!+:Ç-@ªi›Vè…î/;í%ÕlÑÔç›°éÚ¨¶h¤´Ï ­ñ8x^Î#ïhÝ£ÒZ¾/E¨Ø…ßË?…¸n×|wÕ‡ÈKÈ÷qðƼÿQ`+Hö†¹Åò +=s]Õa‚:´c¥â{gáxÓ­!»pÔ(ƒx–}PåZl«ûv+¼ï ±åÌÑxÌqlÀ.yÚù¿ç¹V¢n#Jw® Þjü£€n„¢°ƒzNœÑïã"âõL¤Ø‚úß½‡ö˜nÂ2|M¿»Eȸ {@lЂÂ.lÞ´Œ?ËX&Q5U¤ÒŒ"Î" +UG™¹ÀM¤{™ ¸ov쀕‹< +×AÄ•‹-7¬¶Õ˜}i—Ár×ðš?Þóæ=HDÂ)óÙ]ƒ]0Ü0×_ïk·¿YýŸA4R¦LªËÄ™ÝkæUrÁ×a#F}_M×ä9Óß´ˆw­ßAV^é}P8‡¸w°Çê¾ç¹¯K[€h(¼¤²A´hk@=Ê¿Ô×)Šç~ú·y0ïºÞ£'Á +ÏàðÜ)>(¸6ºFy=…RÃ}FVÚqHtŽÖ –Õ÷z=Iä—ÖkµŽ¨ íë°† sêûM؈A‘º}ëªëÓ",´\Ui­ß—"ø®›‡]ÅÿÏÞÛ‡ØY­ù‚¿¹[(¡„r¨ åP•!Br†rˆMÙÄ¡Òä\â%^â%^"è¥lâE‡Øä4ÚÄ&Û&ñ=ÄKN/e£^b›¤‰MŸõ|/Çh¤ÓT¯cºK‘uŸÚKiPfJâNJзñYypÂ|#±žñêåÃ~Æ{.XkÎtäó18D7Áó4àý€¾ÞAö6ã,X%”uö©¿yÞÉî¶¾[ÔBÁ³¾Æý‡ÒæX+Á*k ÓBfͽ–ù»Ä8æá‡€Eš²&êýMœ¢Á!Í8Hmð¤ÆÎgJ¬ÅsÎ:Р³¬Yá´E§XMǤng{Vì+tÞW~ÈMQ.ßS¯V·À>CŸÉê šeŽå‘«£ÍCÔ³vfÜOÜ—(&sšZs*rü6—–Ò,n>ÌÏ1i•µñ¯Ë=æ½B+8× Xݵ‚w(H¾Ä¤RsPߢ¢&]Ï^“†#?à Sæ/;(§·¿ îý%4vOB{ÉŽCcü?3Ï}Íã Þÿš‹vm¥í«ð-4€æÔ HÎß³Þÿw´çÑŒ÷~Hð}» +à½.}ç[hì¿„»7A;ÍþÀÜ»Ú_òhîÄOÝÍ¥üm õ½ZC›¿ŸæÁÒ–Güw¿ð‡f ¾Ôçî1uxÖüþÚ{¿‚ãÅÊîq 8>ñG-?ž· ù÷&ï÷’t2¤ëEð0´O¿ÍçO 9ÿÔf儬¹ö3Ó–n@ž, ׃ß+¤kwCíýêóИ܄ÖÃzˆÿü êŸoK|û^h½Û”û4w€úÿSóÌ æ+ãÝÀ»‘ßÿš7¶.Çáö”¡yx¢ûW!ºø-ij~à•ó€ŸC<ð'püàëþÆüÿ3¨¯­Ó,¹bŽþÚ2²æÖ3ÞÿÇÑ.w)Z†Ñ:4fÃZM®0ÿ øn$È+ÒÅœ†I -úf¶XþXÕåy’F3ÜD×ö ¦g˜. GéÂiŽÑÍi› 7ϳ/¬se<æRÞÿÚÛ-oè»ñ0^céÀ0“û®OÃñ|¿ÁÞÿ7!W¬"ðÛü8Db`+’îK½ëR´·ù‹Êý%M´®yÛ ×Ãû ·¯ÇPÎE®,ŒØ `r]³n“1cÙ ø-:ëã,xZÏuÐÌØP¤2°"ø]…fE¾?„$¬Ã%¼_`š×6\ã*œûq·á{ó-¿ï_Gù=ÿ5h|üð²ÐþÀŸÏBm^¹¬Aèn\fü߀ søÊüºÛþr7ýÀ~ˆž}¹ß њǿÄÀ§H†õM@!cA®Ç~¨ŒuÍý‘¹wÀÓß°kôcÈ-y=\{~ñ‚/Bc8~·›°À¨¿…öø#…º]~ÛÞH{ÈÀ¿ø©©Ë½Ð˜¿õßùšêsšgï@ãý €ÿâÙþÙ®ÑÃHò`y¡,i`C™ï5_‡øû× ð4þë¡6§…[¼dˆgð"ʇ·dÁoœË÷߃ÚÝü}ZW¯@óå,´Fl˜Ô—¬·’Ó†àö®½|š'›w¿„Âß,]´rÕãêô(²áµœ{ið1’¡ŸŸ@4Ά*¾௽û¿ðœùÎ3Ð8¼ ç¶.T`)ÿ.hßøNý DÛÇ|Ñ-+{Þ„ú3 ëµ°ZÞFý´ 5VÑ +ÿO")üޱ»š C ï¿@“ç SÑЂ.ŠQZ £ЄyùÌÙ ¸‰ì?gãI²Ï5Pç[fù´Àþ&ãy¾ȳ¦®_Cmÿ šÔgQ.ëYó÷º+(Ô ~ Ñ–/gA±½$n‰wÚØ|-Î'½wÖ£¸mÃÅ}?À*¨³̹·²Ãû1ð¬÷ÿgˆÛ`ü6ßõÓÏ#Þ{¹àþUˆv| ­)›ëÁ抸ߠ |0½˜L° ¯„øÑo Zò2€ƒÐ´YüE‡e¢¿÷Cãmÿ>àaÖø¨†oן =ηøÚOÍ—$7ìð n0m÷@tÒ +E—sžÍ¿^yïw‹éŒ…IHæBȃ)H ›£Ðܱ ªå?²˜¤nÀ?C<Œ¥_÷@ëýQÄÑËUMø +Ž¿†èƒå;Bø1DóÞðß"¾æØ¸ñÎ0$ä>až +ÉñØ 1µ×!æþˆù÷•!_@tØ*>‚èk,M½ õAÈã]D»’ç=óíGÐÞÞ7 Úhß¹޹Îë?›[êkóÿ}¦üËPßÜ„æÜ +ïùnÀÔo¯@4ýÔço¢|\Y8Žä<…¸9÷¤Ìòãší^eñn¨ï²Œ4×áúø²Á˜>ið’ñÿe+!¾â"Ds¾„”¶îO™odÕo$$vÞE1­, ŸÁñ*@´Ö*Ü^„øáßBsóm8Ê“p9Õ>‡úí.hþÞõÑ;кºß»Ëüÿ…Á•ÐØßÕ›½¹š‹¾,4Œì݆¹’u)ã6ê»ÅƸ_åeƒ?I¹L•uo¡ÆÇÏV›gLùë‚ëuÅJûY¬­Û`™÷Ç)7ÓjNï§Æ¯ª;á\Míª '*¶# üq³îÕUN°û@Ùó¢c°E··ÕBM6zmžÈyn‚IÈ{¶8Ãö0Šð0ó×ÉF&sÍ\âòí5Ãl?‚¸(_ŠE{\ž¿¿ÛLÎYack©˜Ñغùü̵Èwü°7?–´Áö£0/1Û5õ}S– {:™ólÖܱ{è¢é“´µ¼šrN o™ æË:&÷¦y‡4ïì ö2÷½ß\÷cº§K´+m~-Kç[¦Ýήâ¬×Æ%VÏð¾œèïÁó,ÏOØu:ͤ+xLˆÙËç2ˆ…yÆpVg‚ïdÑbVqšê›½ÿÝi&6ìкğ¢[‡~Íõ]taèâëç˜Þßa]-,²ú‰@»½2¬+}#ãû!Skv‰.´Ô‘'“ûC^èëiïkaøC×òßd-Šk9•ôC«EÇ Ö{Ù~VãKì,®ÆÆ]î¤ ¨-Õâ‘üÏ¢O —óX3{4WöˆºïZL•ñ™‰xÇOVmšíÆ€^'ÑLÃ0Q° TZ‰5>Øë–©Ž¥yò_19üØÕƒAÝÂDjþsieR<Ü)ŠŸaç :Ëâ(%D ™¶øŠü¢äŒ»(:p‚ú¯Pqñë(!aŽŽÏ««M &-jOíU®˜ýãFÉxåS¿à8“k³ln"ÐŦϙ²NSîó˜bqòñª°Äî%t ‡YG\ÎÐå^8HѬ}ÔÞô!ÕGWÌû'L™stGn·¼òíºÜãý¿×Ô¥I—K.¬Ã\FÿìNy¶Ìxçµ;¦ÿ|Å̬W/Ÿgå.X4m.â;BÞ¹«¹üaöæÅ|¥%Y éõœc2Ó-YOGÚ„hiÙaÇ)Áh:­u€õ%÷èúI‡ºus úŒŒ-sßOpc• yL–Ía&ϨÍó˜ÊŸЯû§ƒgg½ûs%êQ6¹QèùSä]~¬¶IÇॠò­ççØžø¥¬•>ë[ö;‹Œ÷¢ØÌîZ úQ™8SCÛN3›I>ÌòY’÷{eO×ÜÞµ^§¨¹Q…Æ[&©ˆI O$éõ 3æ»±–K{æ¼õ¼¢hmx®ùµ·öËþØ êW$èZëqÈX£Gã*­‹˜bÿì÷Pø³½Ž–˜½öÆèåM” ÐJ)»[Ø0ß¶ëÄ«wÑÞ6Ng1ÞN)æ¼¶ÎÑYð&j¨ëf:ÁžÚ«–KðO›“d—Œu}T²Úº²ÙíCØóÔø§ÍåYv7±q·“NÎßËShZcÛ Šæí§h5n§Öài:“tžÐ{(Ú0Gõó$Ýþf“Ÿ±}ÞMgôM+åÙ2h÷šÙúÑŸ3—è”Õiɯ™¾ˆQh¯f’/°ËÊ}ÿGÞq õÍkÈ¥í¸ó^¯a‰à tZ\Û¡ÖJÜ Z“wtCÞà’ZXÝ\äÝÀ ¯ë:š¤ +fÍ5›%Ú·øYkÖ°ÖFÖ#Ôòeim§ƒçÂû3Þ½VÄý¹àÙ¦w.£afkk9)Û÷aL^Kš@·Ý Gè2;‡PµÍ>ŽÑ1M Œ÷„yšåŽS* ½ÌT]CEYY8ÇüMÓÕSÆbâ+¹ë¦c¨yqÕ²ÖûJ¶˜ºµ¼¶Y=ëÆóÝ42 -]ž£˜È4eØöçi¡Ò9o^ZÙuÁuë Ó©k¯|}˜.xÇÒíÓi`ä);tôvœšÿ¶/·šöøë̤bèáa:ú½ŠÉcO°À:¡c‘ZÓ½võÏÃÐàׯûHˆãL«ÒÚyJ™Ö¤d{Ä$%à±¶uÓ{¹GN®fNfn÷-Ôœ^ h\‹’gvSB®U°7)Á[ÔºÚnÊò½u²öí4ÏÁ%v¾7´LYu¢lÂW¯)&eÎÝ,>Å"[®ms×½­Ã S¦ƒlgeÁIJš4 ÜÍåõ8cê0aÐ +ý6–ÍÖ­S üŒ)Ç#‰Å!ónåA? œËU_ËÂ~júGžð0DÍa?¦CL®‘VÆ÷¦ƒodÍ'[FÑý¹àÙ¦w.£®á±?3‘m ±Áäx%£Í`ûQp—*~³ +Ž3©";w½¦›/e³ïF¼Hw„ÖNºøSÛby¨ó¨ nàÞ +m"“Zõ<Üdže¬ýyºiwоr•Ûÿñ,ñ-Á±ñéu¡/<)`BA#„+”ðѯóØ_û,cœ6·¬uyŠN‘cC;:­‹oÍ'µgõ[Ó<›¥TÊ:V—,v·çbOSô«WîŠnÚ|4þºž‰x“^lV¹;iúiÖ”5Q¡n£tG +Òü¿Üá,iò0ÝŠ=¯C˜PÙƒkèøYkµ>CÍ©ÍtG¾­2¸ZGÝ’q:qm/‹³Á·CÞajî~hþ·á"û)š6Cñ”[¨õ±ƒê;›WcÝqÝÖ³Ä*ž¦Ëƒ‘&ÐgíuìouzÌP4ÈÊ“ãLz†–“kØnÜìIXNÞÍ :6©N³è\ }Å ì¦U·ËŠÙz‰šœþ¦c7$2™ÇÀºNwšLa«G•Xs¬¦<èœ5í^äò¸°mb6ì Š…pšåæ÷YîLrO«3ë5Že’kúh±!Û¼vT±‚u‚V±cìYÏm`öø_¢hÖ°Ú¸wŽ1Iû¦ÍuKc›L*ec½ËbÇœ,NBkëAf{†‰p-yL®¡ÖêІ六4 N˜÷:í‡qj/²}ZF!jÝ/2òg×ЧçD‰:5(žÔòÈsìOC¯ß²ç«÷C0fþgµÛÊ §(Zô!5'ÓÉ0t¹ÄÒxÆ:ÀºÃ÷ +mŒ…´„º>M·®ýC ÙGñ1{©ù2EÑ€µ&'M›l>¹ÍïsÎ`V½&˜®Œ|¿¦v[:7Wsú2'Fìã¶ï‘u„«FaÑM¯Ræš¹MƒKÔ♤&Ì”iÌ~jeÅ›…°HM¨sÔ€í§achÙº¨ØësæznŸ–¨âÊo§^»lÖ~€:çXÌJHŠØíýž Þm˜úgå¨kZ×»íÆ5g¾Ó2¿›Þ·Ãú¯a’Ð_c=nøa›³ôöà¹*šúNÑ[¨ºöýx¯k”±A ßÓ31KÍÓîmtÖ•3Ô›ÅhW…fÅöôý¸û"ØÇòÊÅqjýÆ* ü8½,È^ãj:åÏlä;¾re©DûëÀÓ¦ïò,¾kÙn0X¤ÖÈrЂNѲàóÖ:o÷€&ëg6Ã=0ƳÉÒ¯, ïHJ»–˜ŸëgÌ´³E—H-kþ5(áú-jÖ-ð„–ì"/„qjþŽxïïgrïnš²&"ë°Ñëà ìϤ¬Yè+DÉþ XÅ$=Ydu~f;Å·œ¢[SÖä0Eƒ·ÒŶwlþŒåèË™ .g˜½ïî¦ ‡˜§S”¦K¦;G­ÁaÓ®Yj¼¬'èBÆÓ¾ +ÑÒ<­ª¢¥ƒe<}‹ÐzŠXh–xwŒ.9¬…%–W t„EøšÕÐ}¾åÝ»Æö;E-²mLj}‡è4ÁÓ¦Ü ƒ¸Yp‰í «N÷«ü¨âBj­Æuiµz‰Ctº^‡„Iè|X ;¦ÃÂJù´“Z ynŽió%lß º©°®¨-ó»é}×·‡ÉDØAÓÚ2 YXŸ8žäò¸ùZM4YÞ•l’I«üóÔæéÇj-eÿºL‡hôçY}¯­SL·1Ц·Ì7šº„h­ëk̳Y¼¯ÌPüÎ9v'ùOßcø’­tûÕ$¥ X0õÜD ‡–_Lë+‡éò,R{ÿàÑâã(Ûy…å0ðäáÛ]¤; ëkRëg‘.o˜ ;kQ2Ë[t +®ºá—?,$ ¥8Áb….érŽXã,(~Ä®½9:o ƒ,¸Óh*)…@!)~ίNCB-ú´'V¦bÒSÈÂ<»wD&=à»Ü„aß2Ö4 [M§a%“‹ç5év°~×Uß•)¬§Ÿ8§Œ«hÞ„µƒWv"Y!:&v¯Ñ·æõ’q­É>XfŇX·ã+ì|Ñ¥Y†ö±þñõã?­öiïšµp¯cû†^·Õe”í1ë6ƒÿÜ0“Äý {Ï Ò­ÿÅ’ïú±¿KLž_}”¢5V¹i›vc¡‰ºˆ£ì,Òe0Ïcl;;[+Ö#%Ͻ0Dß•ú\‡ßïý=¶¬+¿OY›ySë>ÏEq“ +Ÿž$3ê!ú‰¬Hñ: º53Þ³yîîLæ*²6†Clßcò,ô!úûöóÇošé +Î+=\mê;×›ï•YŸ±ãà{xÅγJPoRô|7%°ì¤öíe\ƒ’ý8òÐúNÂ0T\ÞÓž|\Ív^£S>~7%¨î4í>G—(ø4E‡w§|·SXdÿä; ­×¤æq–ÐÝ`’žµèæH“N½‰Îê?AÑ›,:¸ŠéÂÿ1v‡Ç±Š=K³;)Ë7Žç…ÂZ7ý”F[³³]Ç¢&¼J¦Åo£¶NP±Í¦yŠù‰Û.Qš·™¿ŠŽáH³‚øÉ•:Í`Ñ2Ubª­õ´Ó„„Ë«éÆû {#Ì0_ˆzžå-²×¨1¬Ë"5Êö#O³^¦Àwš6×tŒ¡µ@„y·â‰FRÚ|‚íny!Ã\§[W>Ϥ¦µL€O7,\ „Ù2šéq¶{LTc¬OsÝk =eæ(ºSú1Åä|/3.þÜíIÂfÒ²UE€ß罿Àîæ…ØMÇÜ¥µ%tQ¿Òåú,19n–&ãy k9¶.Ÿ£Ìvi“i–õÀ i0éÎ<Ïz~EW³³u:gÚXg¸ÍÛ3Æ +¬[¨½tŸi›Íïp‰ÎûÁ*¦SÞ÷sµ¸ V».aZ¶n‡4á¶3²sáí}jŸ¡Æ|#Å'Ù¥Yvv‚MçÌ÷úÍj˜.¬ÔÂÆå®xžqt!kOžfzHx7D>O×Éž¿Žï¸Àto¿ÓôqZ~§%JY6…PÌC¾æ9Mh]Åö¬Û¶qe_›ˆãiÆ»ÇøŒeVB¿u d£t¢L¢— :aõNÌ&Î}]þVƒésËÂ<Û]™òž}Ÿê÷n˜1¶3%×XŸÒÉBÈüù¹|(Šã¬«Í¡÷Ûã˜Bms/Ü•}+¯…2ãÆg½_òý7S´¨L¢?k¡ª#qÖr£MŠX—°=Âv·Ð2JUߥz9¬Ô &iWÙ$¤~?ø +Ðn +Ý[˜®¼›b»öïl«hL_ø}nÕ±ãØb\³MLÒŒ%V§»‚²)úÒM…ìQºd:,kŠít™,çá6nú~–Ú§>4ÿŸ£[7Öãp:xwÆë¿ý¼óÜý‹Ð÷¨°0ÇÞï? ÊZî•Gkèó5þ{(#ÖIj,S™ý9©õÝïÞOÃl—Ó–(ºÐù=DbÒú¹í"´{î«TÖ1éávZ#O0.×Ý!ör<桯Òy®SÔe='\ &Š=n"í›–P·˜®]󅣺>5M¹ÇX¬Á¡6)ß¹Îø–^bèþÝ-ëÙ‹§ͳӔ{{£ef:ƒrŒ{|X˜ ®O¤|¯—ñDCtÖ,N2™ìËOô²Èî –éô!–àïUñôÉÃU¦~3wQôä%Š)]Ës ºXÎNSi¹7ÈòI¡üšyöÖ+Ë·–ç%aŠÁÐ…÷‹Ï‡¯W1];Ûa{îô½H¬Ëp+òÝmÌ·6(z2ÊZeײ=£ù5Šþt#.yµÿ­eµ¬ø£½½ÍH íÓ%Ë¢ôYjŽž¦”WþÚ·‚°Ío0N§À¾Tá›wneû¾iEÝæYMÃ]HñuÐc KèN8+ëIšgXÞKp¹±Áô$Û-jýÖÁ‹ŒPòZš7ï5öNQ2L7¿–XÎ@·…ÅùŒò`‘¢;}cЉ}pÎkDl²ƒµL2·Ÿ§ù:jRL˜k6aDÌ›gž¦ò¸éЬ“uLnžëRžétÑØM)K½š²’[‚º@ǸÆöc?b˜dî ëeøüøº2p‰R­ãòÆY¥íAjÓÙX±nfƒëÁ7Nryâ‰ve´ù$»·®cýêG)ïÇÚÆ¸á…–*ŒëÓÑÒŽN²Mû1Í.U,kWÆvsn0©0«ËmßÏÉCjïÛÉîÐÁ”¢3N¯±b‡{[½¶/ÒÑ™NI›™žû$ëS †áQNS{èfÖç²\v~OR<ÕÓ-…WX=wÈVºP°¥ôð…Þ7gÌ=+´ÔÍçô+Ú$!,PüìÚŠ}Ÿ7?v1ç+ÊYQ­Â×z¥¤­±*pš’mîİ^·2]³žMYŽþ SJ´Yfë²÷¡Ö ÈÂQæ‡ßmdö bEpÝõ<îÿ'’ˆ€Õ¾pùý€Ÿø>æåÐð(€ÇüÀÃ9ÏÞp/€güMpo+€wáêû3ÿO­5LøÀ]žpÀJxÂü€[>ðª©÷gP;à§]¨W/`#€áúøk¨þ±byCPŸ½à¡’ïð&€¿¯øínÀ$4æ?J¹wÀŸCsá·e@óÞðÇÞ½ Íÿxõ¯ËX˜„Ö]Úº½ µy´¶­êA½f ~€7üyÁóÇàêxÀÿÖjýÞÂZŸxÀß–|w'4†!T¥¥ xÒü¾ +í)?¯PV Cëã)óû¶ùîßÕTþ[P?øpÚw>Auº0íeA}sÊ3xÅ´ì‡CÎx ¸þ€?)YŽíß§ "„óÖ£ÞþƒöÍgržù +Ú§ÎB<à×~Wc†<í@m¼/ãÙ³P}?@õ¹< ­÷O vßÍçoŒBëÿ.óìqS¯[^ðW¿y'Â0Dg_€ë®Bkþ hŽœGܘ4 ñ~ï#›ß;ñ”¿.QïA‹¨,¼mË%ôæAªÛ«Hgš-Ü‚ˆÏuHп۠eNüþ}Ù +€×üEǵî¶AuÉk3 ù0Ú×fÃü­kL÷@› PÌœÁÐÞߨÖÁ1áÿñü4viÂÊWÐ<ª:_Þ†X@‚ùЮk† +Á[P[Ê*@Š`/$¬„p¢Õ_BýuÙ ß¾qˆ¯€càúön¤ÃWÐÚŠÃ"¬…˜Y¿nCóéSó¿+ >¾NzÙý hÜžA½‚·«¡¹ÿÚy¬4¸ 1¹—¡yõ5´ÝÊyç.hNÙ½ì~ó{eÄ÷¾€ÖãÔ³§ ¾ã84No@ƃИùp2LüK ß½a €×¡>ȃÛP_]‡æÁMhÌ-Ow4æ+#¾y“а×)LC4øuh¾¾ Í÷Ð\~×ü½ +ñW¡¶üüXXÑõgO›ÊÀ-h}½ê†Â:¡ѽW­t´pš¯¡{t¸÷PÜK( IDATÒe`WŠ{ÃöÎ-jŠrµ9A¹d4èâ†æRÜ/°7®à›(w"{ÄŸývÞ;«)¼ÓìC×8B¹…1¨i1èãTÍv~<ÚÞ9±xÔcY˜ Êžðî5û ­íQIabÄÂu²†ê§ ” f™µaãM™~:ʤ«WŒ»µ´Ù½S¨PkÌ?K¼Áü㯰|ìî Ê>]P·g{|åëIóq+ëÍbs¼sÙÖ[X_ò0, ìe[,uŒÝŸCY°`¾¿“ÝÏÓ¤ á +=Äß—ÿ\M埈IpV–¨þÞÄîñìÃlçUI…5 Æ9»ÏžfqˆvÌSãú<û7/µg øÕ–Á“æÚÓüÎ2¶Aš3ßZ{²æ| ¹4[‹v"«Ø3f2´fê¸V‰qóý!m×sÈv±ç·ä~‡5µÔwÿ~²Úý&ãqH+ìãÊàw· -Ü›èO«¬‚,-AÖµ,©,xýïÂ*|íëõSÈÊóyÆï“ËÐX¿‡|Íë&ÈB”_Bnm¿*¨ëÓ•ÀÂÃþ¹àT‡uи=‡¤5¼Ñ÷WÑîbmá*´ÔiÛ iú}KèEhþ}ù­a8wùp>Ÿ‡<ÒŠæa§0 +YºžCy“7 5ô)´××å–ûCk],òz*‚›P[7õåÞãÖ@ûÔ žæ![ËbáDß/B^6Ìà,z×î)ˆÿú1äÉa]‚_G½@?hÀ¹î¯‡æCÏM@ÞC_Aóýº/7XXY}W@k¶nOƒ2¬†hÁJˆÖ…co½XÏìö>7€ Š;泫a¸áÝ‚˜ùã1ÿõ„ ŒÁ…¤…\…˜´w±üÌÉ(T—Ç¡ ý HˆI CØ ¹Ì?„;±4 bþãàúuˆؘ¡,°nb6Ž($.Ý`ø—† áÆºB†í½Ç}i®½‡;OÂj¨Í¯ =öî6ÔÞûà\oBLñ{hè̃æ÷gК[¹¯ð‹Èºí‚˜? ÷ wŒÉï+LAÊãw úñ8g—'L7ÏuƒÖBôúÙ”{V¾Ñ#ëâºu‡Bw7 +b` NñʹsZæüSH8Cù0íåÏ!N`C¿ÎCôëshnõ{?7à”õw#^!`÷3>Ð/íÜ­w¡ö\Ç@(,Ð\X í¹6/ÔÝpîõ€Æþºù}Ý ËÀUþYH(ϲ4\…‹³ñcá´¿7¡8›QˆxÜÇL=YáV¦”{ Ò¾1)ý²¡XØ1}÷@m} Ò8ú„Ï&: à?ô¸~Ý€QˆqìÔÂmH±Ð±CËv¡Ú¤+¬Ò¸sF¡õk­.·ábô¬`7 1ÔÏÀ)H®CÌò×ÐÚzŽ ý ¢EUiAêG@ÂÞÿ\±œ”ƒqÈâ™—øÕ‚ ÛŠk)z +Õ­è7¡ýé ôGB «|[ô=ÕÆtR¬cïaÎRfçŽ7ý10€ `¿‡Ð©À‡1Hð²]6뀛“ÿ1$<ô;“2 4–‰¼ %Áðî0×Àò{/Ôk!km]óà:4¯êÊ–}'BÌB} w–ñYH ùÙá"ÖëèYdg >­³NÃèÔ§ /¦?ê ¬”›4ó5¤[ÏC^g½>ícR2Y·×"‹çy¸>>ÁÀÒ5€ `ÀúêTø°b”…,:æ>áŽÛ¸S\äÒÀZ“ž„\£nCí¹õÕJôîX´^€ÍÓ°²„Ü y÷!ß õ"¤ä¹1ÒÇ!Fú÷‰ž‹xæ=ÝåzôL@óêAh>]„æH]kg²0Œl…ĺCËúzÈÃã¤ÜéÆÑ|U`.dç.ˆžYÏœ‹„Œ `À0€>†n)B°g½ÚXg{ôFÑž¦ß-üeÁZ“‡úä¸ã1~‚;S¹1€ `À0€ `èsè•`À0€ `À0€"¬Ë]÷ \bs›”ú*dô½lðK8/÷žz:À0€ `ÀP?ŒBÉŽ2x?¾x¯Á^„KÄúîìd¡wŒ0Ü!LBù©žDõè7¡ñþ +?íz(á@0€ `À0€nÃ*H xIÀæºwRÔe¸³âãÎÏ­Q$ ]4ÏÙS²ÎBÑçøá·ý‡"ú0 + …O ý¸ãX8 %“}wF’ð;R®›¼ +w’U]pJFý6º¨(0€ `ÀrÃt„縓Aƒ«Ð ýÊÖC¸sž,XçS¨~2Ð-H(üÈà7µÔ¬ûP‡0dF DwÊø}}X ѪgŸðº,܆r…½à5–[ÜÑÂpIX Õ'K±s¢Wg!oŽpÊMëõ±Ò U†¦Á-oBc^û¾0P `À0€^Á$¼ …6Ñï‡ÐA “M”{:Iæ H¤¸ +1†wrâܨ¿pjûO—µFõÁ:H x¬æroAá›þ¥æ²ë‚n C·¡9ÿ&ú÷„šß'AЇQ¨Ý/ [ð·- ZåæÝÌ +H(|ò˜È*Ç& ï‡ùÿƒ†#¡íQ¯@'ùp¢ß£ü‰T#Ð~÷,tÜpgͽ.Yn. @5†˜Rë¾Ö„¸.…ˆñ£nÝõVšû–h_†sÛ³ñköÿ«±ÿmïªÝ1 CDØÓyÚ¬ïd#¦<m¾ÖBg´ûڼϛÿ/B›ï(´á¯‡;’ñnóÜHX»S¬t€¬”–yû¡Y`óàiˆá¸ çr|Ýíƒб@ +€×¡¾ÿÀßCîÂ7!÷O!æèIóüÝæÙ[ÐXÝ Ñ§wQ3sÔEð"¤ÌXµÿˆyüÀ ž7ûQèIƒÕÐú"ãþ-8AèkˆÖØýãH²ûŽ›NƒÛи¿‚þ9-ªah%4¿WBôô!¸=7„Ûæ;¯¢èÕï“ ÂÈE?ôt¸¹ï Ѽ2ótêË'!:yopÿ&4þË¥0üA Ã0µ)œßg¡~øõðŠãIš"éeYÃ7$—GIN_¦ïw×’LruÊõé”úoîƒúv³¦´¹¸Âô>^.lœ!9•roÝzÞ–ñþ4ɧû uâ¾´#¹Dò4Ém˜¢æJ§smÄü¿“¢7 ›#{)ú0Br«« æÞµ¯îð~o4ãñ¼)c›y'küú '¼~ÞoþßC²EÍÃsÔ8múãµç,w½cðy¶ï¤ö•Ô˜–Ý#‡):|ÈôY—èæÊraƒäîŒú]!ùÉuÊ æýÉ”rIÍ™éhÛG¨5~,£íg(¾»Û¾`®×ÅËQk«•Ò'èhk¯pÜ|7„3$·°>>xœš?i4奶wÅËúp…ÚsºõÍ ¦ógÖտݪø0E”všÊždúĵpÁ<·ý-üeáN:°§ês'â:ºMîtÔ' §¨EŸ‡ÙßJ€qŠñ¿PÐŽnÁQŠy_޶¯%ù>µ™ìM¹¿šÚlš÷e”³šý=Æ18Ìl¦².¸ÄÞ3&i¸ÊkëÑàÞ¯¾Ø.è›ë¤„˜¡>hO¸†åÀ*ö³üú£úý$ÅМ!¹‰ŽyßE1R ”x–ZŸï›ë#Ôþp˜Z“sÔúó÷Ú ÔX}H ýÊGL0ÉH^22É#-˜¿sæï¬WÆó\~Á'ÄJ@¡Eñuu­›QŠ6§)ªßâòÐå^ C“ÔüNƒ´ýì‡Ôö~}fºrb»G†(ycIh±w +÷¤0œƒ›Rúû{·ÇlNùþ1v®”¯U0A-ÄSì –¨Ípï &ûySï Ô¦Ôos'ãyÝ'®ãt›š%îçú ýiõô…ÿyŠnRóÕ‡}Pß”%!$$Yp†b:wSÖû-”R/7Sëa/Ŭ[æ6 Nš2{ÙÛÍ·©M´j9¨9ºÜV§NÐZ» oõ°Mi¸šnÝZÁÓÞÛh®/0ÝÓ£AÇÜÎSëçNØ“bpoÊXÅÂ|ä7F©5·ŸbÑyí4÷^¢ý]T_¢ðß§”;Í»3|ˆRÆž SÒ½DÑá5”À¹»GýXwdôé¢ikÚuÒ)fÌï¦WævŠî.W›V±ÝÀ³Àî®—Q¦Ó0;ÇzÕöå†V3]ð<ÄvEËKìÞdµ}5'&)å_§ßixå­åò ‚áü;Ôá³=†)úë Ñ0mÊâ‘V±]ÖºÆîËe…áE«Ê««rîuMÎÀLzw,Qô¶WóÌâ8ÛÇ»cccÛL§¥.‚EŠñ?@ge³›|´(BÚ¯L×s¹š˜e˘¤ˆôj²MôA»@1]¤&|®L‡Í7é˜k«èGW[k$Ó]®60I˜ÖôAýº…›ÕQÊ‚¶›Z¿iî{G™t™ž º3ÔÚœcñ†3JÑkyá${'HPë´qˆ:lmê ¬"ÜÂî0öe­¿À"—Ï `ˆnÞïcû>b7Ô¬1´.ò'Ø?á+vOQ®ò;¨}ô%$úh÷ÙM]GLJʹæþóÞi¦ÓR +°˜z¾eÊÝCõý[lW´´è\ûA 7§‚k0u +÷ µÔÙEí¡‹ÚFÑ®Ù.ô}6gñ¬êuó¡yß*¤šæ÷´ù=×ö†c +'Ø;>fší^y§YàY„e…¡ajNÆÖm„Ú7³ž·<§Gé„¡is­ew™¶Ÿ£æa¸Ï·(0Qò[(!',ï‚ùN/AGM[}8Êüq·ëv‘q†«ÜZÊy¾Á$_Jj-vË ¬0Ü SÖcœ·½ Í`—„áœbrŽe +z…i'vRf§“!*² E lÞâôã}BÆ£_­mO›ú¢&Æ©÷©E2G1eÝ(Êàj#õ ×AÓÎNÜù†)†í +µ št.žd#3B 1½rÇmЂyfú—è ,Pk™®œ;fî7©µ6O ;3Ιû/Qã3Om¾{(ý5ŽYã`-§)­î˜é—4÷Í£Ì×üVÁn +žSì¾ËÛµîêff}·÷^@¯z#ÔÜ·VîKlŸÛÖd>åÞ 5¿í>´Ó»¾•û^[›¶QÂ@+»›£!Ü_¯d|wˆêÇí}8Å8ï™j;F͵ƒÔÚþ.|`”NXÚM·öÇ™¤k)¡iEƒ†¨ùt˜Na1GG“@)Õ')šÒ Aæ;¤öKŸÏÙI›½2ì±p†š×š¦<»? ¾^@þØ„´|9B GÙî…wºË}QVò…À˜ºùÏŸcö<^Åv>Ü +[s^Ýê䟳Ú>Æt%¿ÿÜ[9m±¸™ÙFA MöNôq(図9ßôÇÑ™‚:NÏ Ä»ƒç[¬_WVö… ûsž‡i£WEm®]p”I%yQ}z…ÃÔ÷!T–Gc•—ÆY.q”¿ùÅâ*j# ‰IZŒær¢µXOSBÒ\ä{Ó”¦îÕŸ;¨>í‡xYP‹—tŒûF&ð,0Žû8B»·hÞ·‚ôµÉemtã”%ôC&c×Ïô¨?&¼oæ™UÞs{T·¬ñÛËvFÿ4GÍ~s/³×TƒÚÜHùA&7.ËZ¦Þ2„V¨jѹôî Þk²y\dÄ,À=ÔÆ»\cPZvWÍåv¦U²r)t³Ïº gØýÀ)jÍeYâë‚y:ElQbößÛî8¥¬½bþӔ2å“^D«©¾ÝCÑž§)FóC:‡µ¦ì}Ô¾;N ü(AçCj<Ïî[Æ÷ÒÅ_Û½éœi—U˜n oȈØäýßdRP°<Ù ÕguÑÑ,\Ťå}‰Ë†`CF|8Áîƒe…¡4!0ÌEb¨(ÊS¤•zš\Éy¿Î¶¿Åbð ?~ÙÓŒó&ž÷Þí¶ b8ÇÞÏy6m\òÆÑÇ0Th‰ù‡ðùS¬oî—†Ó„ÿ˜¤Àim.RÔ& è+ûEøÏšWK¬úQö…lw÷ʃf‡ µq^>tŽý“]úEŒlB¢˜äu›M{štÄ«ÛÚê*xí;k‰:FÇØœ¡ˆàól'è ÊJ³Ÿ"úVð Ê´n^6bÚôÓ.&5Á¾Bè{ç2á}w6ò¹C=ª[ˆ£lßDO1™)غYÅx›4¨1¸ÆtK?éÆþ5––xZ…Á!soŽZ¿‡)Æ}5Bç;[›M9ó–³Ü8nú½nÎ24¼°'ÝFÓß+èVâ­1¶36!ؘñCL†Ôí Åt‰,?¤†¼œ¤ÖË.vÆ8ŽS{”÷ÛæYcʶ! û)ð>µ¯ì1÷ŽÒå±^u[¨}ÿ(“»Ìï+¦?¶Ñ­—u¦ŒnЀaŠÖZFwó=k.™÷tëïÛ]‰ÓÀî{;½kMº¤{~’e_8ëÖ:b»…¶Û +‡Ls‰~«æo”††Ø..°8|Œís㳕tiß !Ö »“¶Q{ûjŠZG­å4¯?Î gV#X®1ãÓwV0›Ì¸?lÚ±ßË”ÎQŒ›ï6¿'¥›™-Œ\1e¢³3ušíaŸÙ¶Ú¹ßb6ÑßâÕ9ˆÆ0“Ö]ë®»Íôã1ºLºe6ÈÔ8…ßÚkÊÚM}K„¬{õ>&­bǘŒÝ›7Ï®c{gUfeÄ+«×®çC¼3²Ä÷æ:¨kœ ¾;ïýKA=Üó{íÛ•u[ÓÖÍwSë%‹&Ç O˲à$«Ó× ¶{Gl§ø‡ ó{/%Àž Ö˨ùÞûÔÙ¤óRJSö¿O×ïûéhÙ~Šþm4å®6}Ö¹vÍô£µž¡ cË‚L2«gçà+ ,øŠÓ,%B·ÖÙ~&á¥.~«,¦ uÆíÖ! Åò®iJ€0ÄÄÇá”çChö¨í!Ž0éÕ›:ØôÊ?Íržn‚>N0© 8ÇüqHþ«.Ë*ÏnÌy¶Ê÷óøÚNç»E? ¦ÍµÃÇ™T¢ž¤Ûk¶Ñå×Ù–SÆfï¹<ãÍj&söd=7?í×w‰%i}ÌCϳ<ä ?Ör¼æ¨Åe5ùEÖ]ŒOÑml™:ŒÑ1“Wè45MÓ¶+3r”šT—¨MiŒZ83L2åÖµóµè|¦â(;ÛÌ|á, ÎQxŠ Ëx®c÷±1¢Gé¬ý,C³“NI0ÍÞž}ê×çE˜7PsÒ£^¹<û¸Íû¾ÝpN²=vlÆ\+SöÓ¦ÜKÔ¼¶šp+m¡æëj: “ÅînCtëÝLÙF:ïš;­`Ø«¼ ÏÌôz‘luðMkù°1Y99¬÷ÛU6žõJpÏWT5kªȸ‘ÝÉyæH°î´kØ.hT¥cÖ{g'·VƒbN®0©Ø[Gõó Ó¯6vuµ©Ó%J©6Aw¼ßAóÍó–Îì¢;¾ÖÒ‘näŸ2 ó=keÜï%øcY—R2œ£-fÏÏ!j¼Ps`;WÞo¤ÆsÖüÍ a[Ãä~Ýi\x§ÂÐV÷Ü)£”;èBÉ,Ä„ªVmûrc]‚`^™Íœg·Ï^c=“YÅ `¹Ðz4tâ¢Ý/ó¸NèEøŠê+tÌ‘¿y¦íãt³p®ÐíWMﺯá¯KIµ+è³¼|„Zs/Ñ)LOÐyYؽ½ªkݰÈäé=GY-&>d®³,[,1*«8–^Ìÿë5¾×`’Ÿ:Z¡Ýv¬0Q‡ðoÑW¤ 7¡E1Ü«|Þô\ÛŠ®¤Kú;]¡½–O=epãÙNAý012>¯Ð:ÕÕ‘õNCeùêMŒã1C/¥²†”"a8 w°]ø/nšöü:jíÆÔ¡éÕ»Œ0Ü`RO !f’oJó¬÷Ï"ï9—Q/ŸGO[£A½òB%˜wó-–‡´¤HÃL27óÔ …Dq˜b +ö²}™cº`ékx³6*¸†.¡PžÇÂ&•$‡¨Á=QãDðþût“=´Ê]aÒúŽšpeS®£ÆÃg,/ÑM\Ë@7Íÿ[M=š¦Î[)5gÞ]`’©ÜLç¶w´y“¹F:Âhµ¬ç˜LÆ5oêóëßf.¯ ZƒIBsË+¤¶L=|¿íßKÔšÚÈôM¨Amj»˜¾Á¾D鬇˜ l_,Rs}†. °ÅUÔ¸YÍt(XØ Ç2ìÓ^ÿÎ-cß6˜dögSžòž­óÛ›L_WaØ‹p–݇%ö.g‡¿I†ý5ãÕ'm7÷Ó<«†˜žTÒÿ^,S˜‡>øÂÕÛOõ8GÑÑ—è„åp½Y\G­ýæ+.ýqjy÷æ*´å-&÷÷ÐÚÒ¤·LýÑ …“íjÒ%Z:hþ_K­‰!ŠÖ\0¿‡é” +!Ô¥ÝCËIjžÌ0_‰ö³û{¹ažå­¢¾9o]‡ÂºÝóçƒ÷c= }ÏÒBEX3ãý™à¹*ŒC[鎲¬ª(´ÆŸMT¿§ 'vŽZXd;¯®é.µ}-Û½q–Xnk0]ñ3Ǹ}¶|»*˜õÊiE~Û†?ùs~NóÝ1jÝøÊ—ËYÖ}á²LØGŒ0‹ëL?ÄÖ{‹y¾ªçDUa8\Yü¼ï‰”æ â{^\Šø®oÈ&ÛéÓLp?+LJÞ3Ñcuc «oyI«ØIÆYꇨ Çg²®°}R4˜œäÍØ†çà:jò/Q9KGÈŸ§ñAJøOcNS‹w„Ž ûqˆvAû}¡"d$ IDATµÙ¼gs „“jŒb(ZL?J¯ +ŽPÊvJÙ1ï•ío;ÌwÓ„Ç ¦þ8-˜ß~|žÿô¥cL2ÜVÓZ ǩ;-n7pÆkskëák›æÚ^Ó·Û˜œK#Lgü1ÝÓ¦Áöó„-ì1ß¶„r#ã#ë1àç1sÍתÎyß‹qa¤ÖiÝ^«(¾—éÓ.S×éš¿k-6ÝðncºËtÐ ãP}+Í"ÛiUƒ®/³+ä§Ý³–eŸfûûÚû5´!´²5˜dèOP빓¹zÚôÚ½DG?|…W–×Dî`’þïcZæúÕ·vŸ£‹ó^¤æÏ$µ¾š”’à]ßÛr,ΰêšc›MyÖ0ríGÎùp"¨OžWÔr@ÙܾÀ}0ã™éྵj5Û"Eßô•o¤æ¥ÝcBq鯑!&4e=Zª +CkÙ~TâÅÇÄZƒ§Ø®D²ÉzÜËó0ÍͲSX¬±b° + ë5,1ÿø­4Ú‚õ…|í +Ê-û“LÝnVøÖ&-­3)å†ï4ƒû;©½|µÂûdû^>S·òÌîųÞ7B¯ +¶±ýèâ~2JRî\Éx&´§ 9a m‘%7ôM{Æ7ËxfuÐö2BEa(Ëk·¼Ñ©?ÖÀÅ +õHûnY0ͳóæÚCΚÿWä¼û´gYZzWÄ÷¾®PGÞ€x‰‡¼Œv:nᑌëi°ÞûÿÓŒg‚x3 Ÿ¤<ó-´¥•›þº>’ñŒÿ¬6ý ’ýZô]üg?‹x~"§>¼sï1h/‚§¼ÿäý<ç=ß]Pþzïÿ˜¶ùëÏWEõï‘ÇÜô~¯xLJ‡¼ÿG¾ópÄ3+]ÿ‡G'b¾$ë³OŽ"I»g<—[ ùɧoøËÈ÷ÿÉ}èSÞ–uøÀ—Þ +ùÚ/SŸrð¯P_O¹÷5$£ý¢ ŒžÚÒë›ÿ½kÃHç+¿òþ(å~¤M´*Â$ÐÞi~9ïT,Ó‡ŸBDñó÷ˆÐ~gî¿Ä»¡Mðï+|c Ĥ݆“ß÷¿…„Ó¿‚ÊS@ü„Áæý7¼wÿ¡à›¿†„ŽŸABÜ“¾ žù€¿3ø´ZEŧÈÞ‹àMhq<à7ÐÄzÉÅúï*–máçÓàûœû¿„úöYhìñs2(– dÁyhœú„æuYðù—ðÄðø` ÖÑ +×ýPpšSo „ Ý'_‡6³ûÍ{\¢þ™÷_ðŸM½o@µ]7ŸyuyIBÂw¦¬çϰ„ð8´&Ž [¹•¿ð_½ßÃІð´Æÿ©bÊÀ0Ô†Atò*¤è9ŽöyˆN=ёƣޅ¦iЀæºe¿†æf'ðTʵÛÐ\ü¢qBé³pÊŽŸ@4pJÏ^„›{¯˜ò²î Í;@L‹ý®yL}š°ú)ÜÞð]Êý2ðŸMYwC´Þ‡h_ISþWQ}‡ä\Jk[ÈäߪðYZü®Cð4Î7 qx¢»GºÒ`=4/ŽCLa |Žv†Ô‡³ÐÞõ$4Ÿ‚ÚùDãï1ß{ÊÔý]Hèºjêû2DBPÄBþ\¿‰là€¾Â’BRSî¯É{ Æ8¦|ׯ±ÂSahedÙymÏ»çƒ_7_ðÎ[³1Â5P],RÞ,¸d+­|ˆ¡KV\o~?Œr +õ¿Š˜º×ñ~ìs¾P¸Rd†re…a¬ðïÓþ·!¡¾ ü)´Xžø.SîSþ6²Œ¯àƽHö×ÛUHÎ+‚ßø#ÈxeË¿Ñïï#ëèÃ÷P»ß„èøÝÐZù ΰâ—×{u}nN[5K‡—€ðèˆ2ºxXwîVŒ+B$6˜Œ3 “˜ì÷îeÅ©eá*:·‘²±ækèÜÛI¹Vùß_G¹TÏÜO¹¹ûîóS”[I‹Ånîct.(1±@i8mÞ÷õ`çG Ö‰ClwÛÚÏø#lÒÐÂ\´/ ²œË•ý•»SÏ®b2¶Ì†`œ¦s¹c.C¸@·®·šw|7¹%–ORvšÉcÏŽšº5M[ZAêr‰ÎÂEºøèNËšb2V<Ík”ê÷C¦ÝU¿kC¥òb’/0û$‘Ðõ® +¤ÅýQ.àG™{…ê—²!$`z¬í5ºœ)-s-+llžÙnȾkq–»®ïbj“®b{~ YklwÑ÷ኹ_wXÅ:jßÊ‹Wž®X¶ï¢:šRîLÊ3÷gƒ2fƒûuäñ¿»D·¾æ窻í±ïy°—Žf줣·çèø‚Õk(—c› 2 GˆI–V„¡;vVl¹ßƼýyÆ{®•óÜDð݉ŒçF‚ç²\oýúå}×Ç0oF +ßÉ‚´G,†1ÁYà»åûîúYIÁdh_«D;bésÑŒ,'ÏÅúZd`r_›+ñ^#øflØÈ\Aû‹ê†ÉdÁÑÈú„îíEí˜ñžÍ +÷IÃMl§‡en†ÒÍ%&“Ëæ¡¿†ZÏú{oV¨Ñr£ÏgŸ¡Ö¸ I·ûB˜³¢°Ü0à±T-Aø.V£pZ•ã”Â÷ç¢ùý"j`Á·âä¹X¥Á{ùs”·.ÿ +rU\ ip¬ö¦à}Sæ+PÝŸ5uûÔg‡¬†\F¬«öçÛaüÎÚô.dÁ) óý†oØ\ÿªYbê„pí¹íå÷ ¹UäBúû¾Öÿ*Ô7÷˜6×F!­ìAH;è»ÐßcðY8gšë¢µüÇMƒ¶,ë}ò1¤©½ +`ÀÆÈ61õXo~ß6õxÅ”µI«A”kSE‚Öî-TÓâ†ð ¨þ¶-SžyòÌxjwšE;Þ4ßɳð<`ž» ‰dÈÒËpnÍUàÔk©6ß°óò1$Ý-ÜY¦¿D¹p‰ôËüš?‡,D6¬è!´{_ü#4Ÿÿ+ÒáªÁÇá t¿~<¥üuf‘ä›ò ´FgшãpüM^éçÞs/ç¶Ó‰²IŸ|eÜþ‘µg.Qýà[×ó¼«Â„Uk©y[¥«À)*AXhu©zìà.&­M¡Eo&x~&¥N÷gƒ2æ‚ûUhn¢Æ5/yÃ%º£]›Ô<=PÖ0ÿB ‹tk`e1¶ó1–>ûÝ2Á~Ã0àDÄ;U-ƒáq`!Ä$I-Ê?ÏäÚg’vŸ`2iîÛ–Ëó4íÄ*?g¡ŒwépJ}i®•ñ+m5&C?H­¡ÍïæyÓd±—_ƒùžEÙô‡©ñ;fÊñùÁ™‚w›Þ³smõq„î›:<(-î hO™dçÓAŸåÕÇos•co»‰v.Ù$ÞistÖüžÚÏu*g¨E`7ñÓ̈Ij€­Ëß9¯-3ÔÂ=Ìl‚·É¼WFÙŠ0,ÑSÇLUÅ5¦3Þï+æïtFýöS‚]•ïY˜[Æ6‡hÛIv®%$MlPóç$Å„["2Cç†è·w̼3c~/PЍtôa3]¶ß÷™d<ÖÒ1[>ÁÞÇt÷QëÂy’wÿˆÂÔ2Áog™þ±!A±|A Åe‡ÍL?›¹W*iÊÂA&…²`χÞÈüó‹c ÏÅo’r a?ݦ½ÆÙ”ú\3÷B¡#yœ ž¦[Ë3Ôºˆq -¨yë¯Ë¦w?ÏM¹·2¹ŽNßÃìfRê7Qp¿” +ìÓë>›ò­^ÂfJ©Ÿ¥Ìs&“J£lwg¶s|ëŒ÷|+âù~ʼn í1GÚ5½ççJ~/+þ<ã„Èaf+¯1¯Oî!µ§¦)÷w±í x +K«[¬f°£su^4ÿ—UHNíŽÝ£Ã÷|ˆ‘ž¦ÖÞ’ÁS%û A ¾v?] æCQhóó÷à™‚÷›Þ³U„áav‡*ú9´{"çÙªa"ÝÄ!¶‡õl¦›ÿctû”5à†m.ßõa¹åù‰%|7“X×™²ð:\¦ŸÀeÖÿräV\”ôcä{ ÕO@ákÈ-ã*”ü'Lêgá—›Ì+kÖËp™ø_ƒ\û>Ü^C{ò¦¿‡\œ„\²³ÜYCxr{ró©’0±.øÔWy¿W¹¿†v—¸ÏQ.‰Q˜„Ü1ï?Ñ·pý¤ÁúÈç,l@2üá¿”«b-›Ô* ž„;]ä (¼(6YÔÐü9†øDgyð²éÑSHO¼öʇ|u ÎBóö7¶÷η?þ? tq^ íißA§­ü5äæÿ(bðyÆ&àÌsG¿‚r¢gŸ#}žû. $Ñ»ˆdHaؾn„„}P¥þ ä'áëüyÆõI¸1ºµ9l÷e¸p€G‘ +h ²x“4èG÷ØX“ÏÝrI^c’×ùðgPxÛ³Ð:µáHï ? ›…oü[ˆ†< çM¸Ð´ÓA^…è‚¿îÒöΑ m)‚²m”¬-6a[üruî.¿ïC–wZÁ“иü÷œgþàó=äŸ~–ï ?‰d™SªÐèØP‘²Ðéi8yrh•“nº 6àYˆçyé úÃ…Ë„a+…a¬þÆ›y4 Òˆ«…n)~ wôÙãðó D4¬PÃ[¦õÔ' =ýŸ!nƒýZèï@‚Õ«“vRJ¼ËnïBÂð ˆS4 …ý™ù®e¶G঴láÝ„¿~ûÂö_xÿ¯ƒØeˆe4­[ þ\é]» Í«ˆ‹ _cž_\?ŽîöïH¶ñË.váß½Oà„½Ûs¨ý·Ì½G j+Àüb2¾€úæ.ó®O ÎBë`5¤¬Ëƒ›Ð¸>k¾¹.>ôm$ãËÀ?ÀÅd?ޏõQFøœqñqyuCѦ÷BsöYHQsdÐmhn}‰zNòivÕyÐKxnùm¹…üuî=iŒûwÈ?UeI¦í:Ê3du)Œ9Æ«,„eVÉðc´ÏýËPý;U´ÅÀÐi?iÐ@’Æ\…²Ï…9(²èRÙŒå±JÁ~„*Ê¡N…¡DòÈç*ðß‘/húð=´Ï½íŸYBlY¡ºʺ^A8gc•‚Ïzÿß‚ö¸GàæÑ‹ˆ—^Á$’<Ø ˆûtë1äç8ëGa¸ +”†}:X/HžzÚO~É£þ\¼ ñÈVÎ sùûü0DÓ6hsq} í¶mþzG? `U+¿ÑÖ‘L+ Þ3ïBÒúdÅ¢cz·8ª¥—Uæýh?6ª¾‡„áá4ÇCcs óÖm½„¸Äx¶OBæî.hRõJË?—¬Î‚ß¶µpÉ -ü"¼¶ ÌÙ4x êï•Áuk?‚âÄ“и¯O¹·ÚHÖvPGü1¼Ú ^ð¿ø¿ 9dÅ %G ±^gð×ñ×Ñyò Øç!ó6D`ç~¼ÿ ¤ËcÇ þ>y¼lðsó}{ôVUxÍü­š\¯à4”4ídÊý_AãúïÑùQmU¡Š…& Fœðˆf<Žú„ ßòZÐo@žå´MÖ·¾ùŒWÌùî>sZ…¶}),V±ÆÔ¥øIfêbp?œ3Uö™Ë,cÝ´ß¼–rý2z£|² +¸Æ ¤ÀŸ"¹¯¬DÜÚ_™rí+ÔgðXàPMeuÞBú]åØÉ;QúÀÿ­ãG ùÔ/Ç/„t4Fi )O<àÿF2iå#hçO—|¯ŽÛÐ>þpž@±³[Âð ”¼ö4”$š^‚ÓîF|rÒ"(# _ôþïT1½j§M~ü Ädžôç~ˆWxâu/ØŽôd¾ßB +‚ŸøOÐñƒÿ’ýù¼Òû?jïö+³êc8îýï –Ùº ÅB±&Ë +ëYð)d]ÕÏ"·Š€‡ -ÒmhÂ<ˆvm¿=;ˆ;ÅÁNÄТÜe‡ýšTe- Uáq$‰ì4´¶B‹è#8fè-SGkq¶D½Î z#’aGàÎQ¶DÑ.Ø<øNcþdý~nNÞäâ Åà·?íÔ ›±9´MBsón¨}÷øCˆ°Xü·ÐÜú3Hiñ¢WÎ{Ðz»ÎÊgÃn,Øs××#©¶`s[ïçL»ž„ +/£\6Úþê‡G¬ªð¾m÷½P›ÓÆ-ÔÞöb„Ë;ò” ç‘dP>ð¿/#†´°sÄg¶bNXèTP„'‹ÔaY+ îÇ€/Ä…Šñ‹%Ë‚öîPÙø9D£Ög¼w.üä#hü_…öí¼Læn›o<$ +(£øÿÙ{û­®<]ô™)¡„ÊK •Ky©ºèA/æ ƒ^ÌP¹T ÉA3èAqÐCyˆƒ’‹t0CÊ!â‡ØÄ&±)›ØèmbmªšØ$MlbÐClª‚ 4hÐPÊïþñìu÷ÚëÝk¾û­w=°¨·öÇÚë·÷úø}/ŽïÃð×ËÇáÓ·é×Aµ«€ t¥°Éw€Jóó ½Òä2*©O£q®7…›w–&{zÝð#¸ ÍÏÜ-ÀVY÷Ý[ ¦By ’ù€Çáóp·à‡2„ÿþf!Ÿaà®,ïøT ­ÉYŸês +4NAÀ\Ä+.¦´ßU ûAžù Û½³ ´ßI°Î?ÍEãZbƒNoƒëüf¤÷–Z*€/a¥Y {ñ[ñ„³"~· +þÐyZû§´ßó-Ôvƒû-çJþ-(HG ó+prØŠpEÅA±Ù"í`çØ +v¸ýà‚Y5ö Èì,ôÚt<Ã÷nX2Yÿ ºuŸ™¿"ÃKvk¿w"è&uPg Æ¿FÔ1ž'dEãk^+¼kV#îþ©Ó-UŸƒBÓ:øq¡*† pçßãµ[i“U@ëÑFð;ÞCãS¡§Á0Ž=Þñ•^]jU.kÃ&=:ÎÁÀþ:àýŸEPPÞûàok.eÝ‹Š1û‰w¯Z ËôhÊŠ©f7 @Ä1¨?‚ýYÍõen iƒ°ç+EÑ-]gm,ÈæÖÍÀ€ö;ï6z÷@ÆèǺŠv'7ëKÛö…ŠçƒŒT^€óþ\¯”ÇÁo¼¿¿×WÅôÎçÎ+ £g +¶.Ø—Áõð4‚[»Úâì½Cô5FT¾•ȇPMXDZ< ¾ß#àºþ-‚ßïìbЧ´ßeÁkÀï» |·×Àµ&*Æ?+´ß¶<“é]XGô€üÈc^™ç•ùÞß¹hôVaµq±õú=ºâöGp¼k×E…c%a Þ>ë,Ú…®ºñÑ\{æ!zü‡ Ãie£NpÞÛŠlr¥òÝ ÎsYÞqaØÜZð D‡a…aÈWšaôÊk{ìGºÒq!8w®Fp|.¿Ý^Dç‰BZƒCàã9Èu&®Œ8mWÀ­Oðºæ6®huÔ¿F´Àxö +€ ã°ÓG¹ß' +¦ õ3PÐVÇõοÁoºd~’„±Ø' TÚÜ+hŒ‘ú=|~èæ>©ÀƒFû~õqíÚ°ï¹Á áøn ÷Û   kNì¼²Çûÿ8HÃÂ…ÿpÒÝ ¾“½ 7€Â× Õg681 Ñš²ÈkÏ-Ôuà;| +òsà[fT\¼çª$; ´¾eQú¨¾³Î+a¸*×&¼¢‰?!]¨ªQd@³—(OW Zž¼5E J(|LE]@ó™nsïð¼Sà;ú<¤®"q +“´ +€ÏAeçËò ˆöŽÜ_qnð9|K\„%kÛÎGNp|Oir•˜¼Ñ2ï™{Àyõ¢“ 6 çAEËV°­;ì6cÒ>Åñ²]à·3×¢P õ2¨\ÿ Š.ÐÚÒ®_7 óÈÓmÐ_xìÕo—áÏ3+» .Ì Ž÷)ãÜ%øüȲaá¡>€r™6O”©èÐ…þ4}¶ŽÂðsÙ 0ü¤[Ýó4ìiç@3ä`?ÈwG­ ¿ƒÏ×?®#ÃÚù—AúͤÜQèAÐ#ÅÊ£½,«¿ÎÈ<†rÌ<1ëÞßVPÄA ZÛìŇÁAµ~Ö=¥ IDAT¬ÛAAs6ü ÊÊX?2aÂgTGÿœXÔ| A·¶(ÌAôDkB…(¦Wg(£Æ¾à„¹Ú0¥*÷Ž(Àwà5~;¥ÒÇÛ¯-AFícp¢ óúèòŽ+O‚uð'Âõ`¿x œìö¡—œl^ðÎÍ'ÁïÀo¯¾ã S¦âå?ûïNðû‚}ó˜÷¬Ç|ß¶ ŒB‚.pQPï]¹ó^€¯ +›ñÉ‹ºZh²Àd@L\‚ï5’ÕBQ”õIá|&,,/‚M¿mv€ÉOå¬O%üŠ»$&ܺâ+k²/ÿ ¾÷­–Ï>„ró~Œ \Èx œ—^Ç‚­7ÅÓHâ÷ü¤ÊçÒ9 #¿ÅkŸRêÞƒÿ]ÁŸwõйhÌDz A¥Ä°qþ1Ãm6Âÿ¾¯Á÷ܸÎ…—ÁXÙ5 ¯sÁµ×6Ÿƒ9=‰ü™íõ56 +sA¡bÒ _QЃ¤ùUA…–ªï¹ÙÖÁ¯Žùàwœëýïýžö¡¹hœ.€ßíiÄCy9Nyu+ãÂÂó€ $Ô'鲂-¿m"nåeú÷)ë4î8CÉ8Ñ+¿áAøŠºSð™æ>ð=@0Tâ¸øÏE£6>­%þ²%³Y.<—À˜´WÐØ/ê‚:ϱi‘´X›Ì{³ÂL†kqNgðÀ΢£Ï s/2 LERÞ9JÝ)C #ޱÁ˜ ÊFøø}†S>Ãýàš¸ ~’c A!âØ'x›@öü>º²}È\šÊ„+Æu ágÁ××êÚqUÌ1mž7焽ãçÿ*š ŽCç0鉃††-ï‹Ã^Øå_˜*Pl;Ç¡Áw”&ו~­Î»¨>ú8nvxtk?à0œO@^é +ØÿŽßh8Î6€ïtáó2$AÅ\߀Ÿ õ‚¼ˆŽ«ð °OéóåÿN‚®T€¥bº(ÀlKèzÞDIÓÖÙz6 x[Ý…Vì¶“Û~pQÜ ÒóêùfâðÝyv"è¸ A!k>¸X¼ Û ~_[-¾‚Êi…PeIW‰8Á߉à¤?5rÝ *.:Á±±~Ù +îm³MФ·[áID»x*¯„7‚ ŠÚÞF)`®ø¿à'ö»ãSã¬~"«}àD­â\÷ƒ‹¼bTŸ™…MÞu³\ßÖ ë‚“´ Ö¢q1µŠ2°TLLxŒ­²0"uEÒ¸6Í +Ðßù=Ð2xÍû½ÙÜnMÅbÕ^Æÿy“¬NÁÃBê3CÒB¯/O€P0±U&í¿ï¤x† úÁùé<’­ž¯y×ï‡äDŽv™Þb{à+lÕð1‚ùU†‘-éjlD?ö¹eð•g_¢Ñ,MÎ#ýÚ,‚™Ž^øf6˜ƒ`æù,ÐÛüö +€ +•ÀpT²Åó Ÿt\Û_y§Aw@»w +AžDy*&aô:HjóAAUñ¾!žN£0•¢úú4;ƒ››œH?7êí4׳Ióz]…áÍ !& Y„áÏTî$Ó#¾óˆÎ –_ƒcC§{è]…†a…%'…®È»ØëŒØ—ðà4ÂL(cJ;¦›˜á"³7¶ÖÎß~3ø­ºáO:Ed¨·Á<…¿—\(®ZÜÍàÔŸGú•¨NÓmø5ø}e1¸H 8Wku¼Œh|ß8œHx÷íƒÏ,½f´ÿG£miâÜrýóŸ0žðÚp\ÐM ã€W׳ ä¸Àÿœdæy´<2Y/‚ʓ޽gAEÀføÙ­_„¯Pmxœ@£˜Ü9à6y‡"®B˜õàì-@&fï퀣¨‡G@'fŽà’†/xš¥Ð•Sj±VÖ½Ë2C¶J'sWÚa2ÆyC+þ„  `®³ú;Êʧó,溗Fðìæ„‡àÜýïºC÷‚–Ï@Áé…˜:ºÀ¹9Ì»ã øï$I0N×!Ù¢äÛåé‚F§Ów@8n\÷ZŽg&¡Áµx\;Ï‚Ê ]ÐÇÑÇHׯuah!âñ$„…%ÁÖÝ£eöÉM%æøyr°ѼÑ‚|Ý’yî{ð½/’rV,y5Žyõo‰¸~ ¡¾¸yåã|Úï“ôì´×)èÊKS`Ò4_ÔY~ % Ãò—ë­À\àü|yÃòà[ïùú\zÑrÙí÷-¤0”é +€¼M&T¹]<òå^øV½“èц®¨d!­ˆ4´¼NÁÉ[ L7ÀmñÊÆKà6s +‡ti|.,_‚îè*A^^­x¾ƒŸ=8 ·@E@’+ï¿"Þ-s/Š™u„MrÇШù½2oÃð·”ì'–AøÛµÇï|ïµÐ½NP?€ßç08ÆÀÏ)¡x¥,øGøLã9€¯´Ó¨¥×’§MŒÓ‡p+ÃF°ßåUxnçœm¨Na†Å(w“YÈûÞâ`뉥ÏõuPíù)È<Å%dŠƒ©¨Ú@^–d›I0™þù1çÒÂ\÷ÒÖgëjüÏ༺Ì_22ËOƒóà>Pi­oéµ +L¢öüü5çáϽ;@Ë–Mt,ç_›5?’ðG­û/Jâ1PP<&¬ûÁí`7"û–VIØ N%ûUÏ?º§"h?œò9¦0”öéÈ¢ÐË£\‚ ²æpŠ{u¾ù2ø®ÂwÝ×1¾ï(¾çrIsÛ9ø^&'Áõÿ0¨ Ø +÷SÞù=àwÚçµq‹×ž(ïã$}î ó”Ô•…{ÎZok KÃÇ?‡ ÂÀTÒ˜4ØÏÚNûŒâof#\Ùa¿Œ|sB¾D0WÄãhôZÈ/ëÇ÷#M^QeDòám­.ˆÈ³Ú¹WŒsE•MÚ3žÓŽ{Çî'Ü?ê]7ZRûª*]Ú{Jy︈Ü~¯›"Ò#"¯f¨Ç¶,—ƾ¢—ˆÈ"™ôî鑯DäDŠgõkïeÌòžï]¼ë½›"²]DºSÒ¹TDÞ‘3^yÃ;VF»H8Þ7®ë‘>Y+üæ""ÓÂq""r[ØÔñÚ½ŸˆÈU¯=Þ±íÞµw…ßiZD>~¯µÝãÞ=Ÿx׎ju>åû@ø­WyÏÃÅ{Ð˳¡µo‹È Gox_üwRu‰£3¾¾ó>ñûÇí™×Kxæ¤ØÑ<¦ÝsÛòž¢ËWZvçÞ0èzʲÎnã¾mÓ¤¿× +ªóDDýæ{é—FôkçGBÎ÷jçß2Îés—MYR¿Âñ¿ñ DÏQ&6‰Ïc„á áÜQÞÓ~OJ¾ï¸<â×%ø®»Å_CÔùWÚ1dÔižï7Î?'\kÆëG#ÚzW|Þ"MÙ¥Õq_Ò÷­¤v%!ë7{W«ã¦·É2<'œ‹T=ÂùAa½¿±Ži!Ÿ°T8¼-üÞ½"²FØîzõy×õY´ï9ã9ŠÿïŸÿáú°JD.×Çսĸv‰q~Ä8Fìßí¨ØáYËúÖKp,\—F^Uï¿_YÖÛ%AþèhÈ5Â9Lá É6¾lʈñ~6…\³ÔxYäN³›k÷*ãüÚ’èUåSíYæšÜ!Á¾~SR¾ýŸAɇ/ŒÊ;Åï@_IºÉǶÕž¯O깟$ܯ˜°ÎÝJe‘ö†2Ü«·*ÚÚe|«°Ÿ2s+½k_ðŽïðè[”âYýÚ{«Áw*³ÝJ8Æ%\ñο)\”¶‰/Ä®ôŠº¶Ï»ö)!Ãz_8)ÁPý}_8ÎuÅÀ‡ŒvŒG´[LJ ´‡•Ñ„:7 û’ÉdÅ'RÞâWôŽ(œ0hQÌÞ¸v¬Gøm‹Ä´ØÑ¼Ã¸¯×ò¾¢J§ñ|“ 0…ºžuë ÌhÅtéß³¨õàmñç{S12¢]×/è×΄œ×Ÿ3fœK£°]/|ד!ÏÐçž•â+NmpW‚ß³J• ƒþŽäûŽºÒXaTÂßózã:ýL†\?d\ožï©ï®„ äƒÒØ'®zÇÓÒn +Cïe¨C½Ã´¸˜ñY¦ÂÆTR&•QíÞ!ãÿ%â¿Û3Âñ5.OÑ)ÐVyû…¼‡z¯¯Š½Cç‘‹Â5`¹w͛ڹIïØ¸qOÂstz¶‡œ?cÔ÷žØÉ8£b‡õu­Ÿ÷á¸ãõô¶¦é»m% ‹ßO'µz®JpŽÓÎÙ*SòÝÈ-œëL>H7‚[= oVõźúÿˆ`VÖ4ûÕÚ ¾[²¾¾‹O’ë¥ +S°IÌQgèî¨i]7¿ÝFVƒ®ˆeã]Ô@Ê]ë!ü8õ@·Ú~е'­x;!j«»a°Ÿ›ßV¹¿¾Ûƒ`¬g€?xEA}›ß‚î—½cw@·<•(i?ü<*ûê_ƒß8Êuü +’]¿÷$œC’ ÝAÐÍk…WÞD +À÷Wu8€í`¶Ø~c=VtÊû«»m~†wØf!·Á,Ø…‹™kUÕafÞsYÝõt +é!éów3CŠÊ‹£ï— /t·Þ‡°Od»t݃ƸÛK «9¬C£Ò´yÊ Ï Ã^/R[f©¤l—±¾>0·™äK!ì=ÿÁP€¢ß^ß„ï ó{4ºÏÏÝ·ßDºyúø!çÇ,!’§‘>„*M ³=þ-¿‡ ô±ªÂùÔX{ò{=.€aO€ü¸Ê[1Ka€ãì +¶•oH½ò®[A9`;€ЮQt˜siR€žü1LvÙŒà\½v!¶ß?)tY팥¯ÿσ<šŽ~C!OÂûÌ­vÁ°RÝõü +ŠÙ²2©= +O –ð‚t¾ û|:~D0oÆ|p}Pó…NÅs‰“Ž=•ß`‚¼×iDo }"ý,y˜ŽÍ`6y…ýà‡QñÇPܾ¹ÏÃïüz¼Šó”´çéçà@[*ê¾ßwT|ߤß& ó³ìPç@áo \4þ}[!ø%øþU»ÕÖ?:ƒ Lac!‚‹Ë 0n±èEpbɲmÝp‚ŒZˆ÷äó ægð·i¹Ntgá's¸`¦µGÅS.ó®yœ7úÀEý|&züoú-ÈìFpÑìõîSm¾& ÒcªÎ¡qQ³A’@?œ\w¥8ŽÕ Üå ƒsžÍ²E¡(Aí!ø=Õ ÍT6<ðO  t(ä|ÌErŒ¢©Ø]ŒjDzSùA…D/‚}Çvßm…kðÇP–>˜:S\T€)ð}ý}5}fnЬm‹\‹:Á¹±î¹‚T²Y]áô Ò'ÌUXÎÇóð>ˆ—½ÿ? ¹÷Eðûšñâ³Á÷™†ŒÖ^ù‡0lC06ù<ÈÏìõî[Îõ¶BÂ>P0ðþ? +!i +þ®QÛÓ™PIÓb‚JÈH¿³“.€®Û½ÃÀ÷wü6Iƽ{~C3'€Â|×Ûf71 y}Ž€ý[% Ü?OÔe°ïö£Qi›¤8¿ï®sYè|È·Þù øëÞfPþDc*á¹ +qŠ‚AOÓå·×¾vïÑ®K¯„ae(UÂðjpío–0¬æágü Ã~ g €óÈA°ÿëòñ“ œT6À§y(«‡ÿ]ï!Ýî"ÿ?LÍì94NØi`*¾'ÎÝð·tû§õ+tÃ×ðÝBPó¦·ß&³ï%ø‚Q•Œ{‘PJ¬ÙÍ¿Ý8±,'Èu(^°ìÌz½ÁI‡ÀIg%ØÑê'vS1O"¨š@}*™SüàÕñbÌ5Ï€ýýipëœoá30wà…ù^QY¯•@¾Çû»Àϵz¿ñîNV³Ñ¨ˆ: Ÿù9æ]«’Pž÷ž£I»‘ 6M³À>ñ¸÷ÜàdzO#=Óÿ¼WWS\Î&_’ˆ à7jsÒ;øøíÔny`“ ^ebVL\Õ;èBãøÉª€Fo„´s²ÎxW­ÐŸWT²Ç+ð×dS0O³—‰¸ºÒ(ÅLï ŠÙÛûy@y°Uý žuÛ- “©æéŸ q;°ÙÞ5ËÐ(H?-„‡ÌÆþ(öJœGß w¯)`>×¹¨m— h-HÇÏ@áà$8ïïð÷1Ï×a +C`ûÿÚò~…Ÿ‚¹мé÷§LRvÙ„3}ÚèÕ³ üæûÀï¸|Ÿ—A~üüµô1£.5>ïyÿßûN˜¼5÷|FGµSW>¿?iÚw÷l@a\óp½?¬Û ÒeL´Ý&n^:ˆàsLNjb‚ýì Ò`ÛF6°A™a+•VI;µ”'TF?牯#0"ùaƉè1ÓŒ-ÎZôŸÚññãîZÖ¥’›Ü–æ%òÊS:ÅWz!g]*¶ê]¯Þ´‰ïlÊriì#K$¿4*Œ½\àÑö¡dË!Ñ/Ñ/ñ›¤-C1íKQϱ‹9½.Œñ}C¢Ç£JHv_Ó<*~,Ù.alÏéßfÒ»Æì;oxmÓÛ÷©0P¯pLëñl"é>š¥O¢ñ‰0æð9ñÇÎGÂ÷7*ùãvÍä‹e=ÙWÜÆù%-•_b2áºá7ËŠûb?ëI¨ŠJXg[ôÜ3fÝ&A,¨#ª¼£Ý;Y!Mf‘‚êí?ÇŽž«F$8·õH#úµó#Æ9óÝLjçÒŽ?=‘•y¾˜6ÏÅшãyÆ… †¤Øþ ’‹ê‰´T<ª™ô‰ŸC¶KãÜ®p]ü± +ã õj­½ì úsõ¾vU8ÏÛ$œÓËëF{ÞHy¿*¯Hô:ó©¤Ëu¤Ê" ~›ÛèS¥?¢m +ÛÄOÄ·\£gDüØð›â'üë2J¯w.ìè|ì*! þ7ô©¹eÌ8þ÷ •ÀO%%V‹ëë·:¢bÜÍ1—ä’œD4.w™™Ûá#‰{cÚuw%].½tHcŽ©¢óÿdÁWìïQ9²–^i\ꆴ¹=Å<  ÐY–W¥lŸúž'„ ¤úff¶s˜»(˜Š¡¢Qt®Q¯Þ~í˜J +6*ëLR´~É'4L ßm6nÇ%ȧ}oaÂPV%@¿g}O(œ¾íµ'‹±£W3k2Ô£J—DãSáú¦ÆÄÇŸˆŸ$uZ(¯&¬SÊö‰76*>s‡ø<†Ú)ä§½ú!” †¼ë:Å7:œò2zÆÑšÃ¾µ¾Û˧þmº%øî“’›I MèFM³è 6ïK´‚g©Q§¹Neé_3ZŽ(=\ïÞö¡*Ê«ì‡ +y ¾ ®jßyî«Cœl±tÓÝk~º%©P€ ÐÕ8MüÀÄ*öå!è–¡\Z:t 2]‰£ ’îñêû}Ê65ð]s"½»˜‰G ËÐ)Ðåé¿{Çï€.`y¥)ì]Ç”ËñÐ…ë— KØó^ž@¶~¢ð‚®ê@²«½÷Xf®J‡A—¡ÿ™pý4¶9 ö€ß0ê +aN.{‡à縦]sìw³AwÊ­ Ûüg ;Ö0ø çyרÄ%—Áyà<è¦g&±1éÈæÖ¬ãißÅ<4Æ*<ÒòþÜcut1Wí|ºñßA”ójÐ5¾ +| ºª‚Ÿ5 ÷àï¥l›+¤þXHJL¤ðS°_ìCøÞµaЮÙ@ñ˜ ÆÞg'ÒBÏ`†š h¿' °îÚ>\óŠr뎃9ß ã{ø!B@¾œf€¾0•²® {ójÇÖ€®µQãû4Âù¤¨gµvF!O8ET{—óp|WþS`¿_ ?Ö|8÷oA8ò5è.¿äÓôÜ/q¸®¿,ðÚ¥‡ÃæÁeÛ ®*Œ'm•Gðc¿Õ³v‚}ù%¤ï_#2›K@¾]Ã/øuŽ:@p¬êxœ«õ1§rrÌyj«½ü.sàï;hÜ›^áèþþ.‚îë«Á5b¿w^¹_ÏÇâÈWÜóê~þ˜xAwmÝ<@>F…},óè1×õïá'RÂóèxÍ«'ìº Æ(èí¾èüzÈäOÖ«xŒ³h s;ûІ¼˜¾;³ÿ¼òEã;°ïD0¯Æ3à·*ã™:úAžÍÌ;´Eð—!Z5!š†´Ó€uHp{¤IIÐ+Am¼©uÕ·KH»mX·ÐŠ4-VÐ:=|!««WXQïR¹I½ ù5ˆª¬Zõõ÷|ÝøfK…ÚÍ$Wª,Ea<â¼®í»ê]—§|$A¯š°í]†´ó£ÐhnßR¦…cXY¢,á_CJ…ßõ]Iö2º(Åme‘‹¢i‰°ß ­Ý¹fT|mì IÞ,«U(oY.«ÇÔ¸ÐCc“dÛG_²„d,jË£<î{ï*mÛ†ŒzV¥¼?ké7žkºøëóǶ õõ—éu÷Ü"ד£âßIí“Æu&úcÚ7®3­•YÞ»Y&%æL +æÖX +/H¸%) ®Jãü“6Ô$©ôˆoÕTîò"Á5¹K·W»š¢-ýB«ì.ñçÖQ!ß±Fì=·Iãü¢Ï¿â[/okï.ÏV—a–ÁO%|KÂ2ËiÜ +®ˆþ5ŽŠ¿u´Ârñ×Ùqi ç’ømuÜ•|ãä]¯î]Â9c­ø^ý’í=èg"®2Ú‘Tç Ê3÷…^5IëàˆvÏdÄ5føcQ¼;¤QSmÏm¶(ýÒ8ßL y›²ŸÝ%áa\ŸH±aªt û±9Ïß–y¨fLV„MBTL ”$ïA ºŸ˜1gœ¬²¸>z÷V¿›µô‰/t•áúòª÷}Ö +;Qù:Äwåê÷þ.— Ëô!óQF…ñsýÚù¸Øª´Eg +ÃöaÒÎôŽËŽ9ÂG ±Oø>…LŠ­+í})Vèé’F—Í0L •3&cÿ†4.Ö6P±‰­^twÅ©ãuãžO%Ú` Âoô…÷üw…Ê…Q¶õBoÒ¸gº`Úõ2b<'¬ß íÙqY:„ó— ¯Ù!Áyz2â:Ý*’-ŸD\™‘°e‰Êgò‰0Ô5ïœÒ//akË'’?,6P¢NDi±Ó஄3@Òh•›Nf/;Šå‘ÆIîŒ4jÉ^1ÎgíÔJã]Ó•µ¨øx‘bU³(Kgï£ßk»0»„ß^M^eMæ +ã!çVjçÓÄ#Ûô-…°þ9¤-ð™i…Ö: (ë…^z%^©y[8é†1T"=B倹©$•¦WÃx t4£èŠ×2¾Mž¢Ç]–á-VôÄP×sCÚ¹‹ëï— ª°¬@‚ m]Û2"~¬µ)ë×™è7êС+ØL}(g{ÕtQ((†´û]¯ &£¶Þ;gâ¦$Çþ&AñIE[ûó–0žN„ʳR<Ò%äL!ò¾T#|›m †ÎH9Þ;íæ:tSІÌ>ÿªcÐuÜ®ƒa‚ýM¡ÒeÜ«ó!Ÿ³MØ?†„c8ÉØ-äËÂÖà2As~ ó +¡ûºGg^oªá:0iÔ?q½ž¨ò«ßËŒ†S”¥®äa_®!6ÞäÝB¹ç‰6T)…jár^Tœðo½E‡-怱 ÃÆE=·Û;ƺ,ã:ž+…`¼•¾•Å"øÛ“=@pñ4øŒ›9àµûIÄoQÓLʼn# IDATãQî1ËiãLm¡¶T}!OL™‰Æ-nc¸öyø,[\‚÷¦Ú“w?ìYnƒdîa^~ãÞ>Fü^×uÂNDoí”ß‚óÐ!„ǤυŸK# ëÀ¸·'Áùa÷‡/¢1çBQû¨7‹Œ©­ªïÚâü8l3.±,èïÃŒ{Ô×Ë4û-ëøÁ­ä¢be‹†Ztß=ëO3æº ö{±ëз‹4óLe¨OÇIpΞ€wþ18þŸ×…ÕÞß9Þ±[ }OzÇÍmÞæ!û{=Ò{õÌQ¤xºsð÷†˜ã³½\Ó³|k…>p®ÝŠÆ-2§Àñ÷ÇõgÁ`®¤í`œµŠ™œŸNƒ´ŸE>>­ämÃh¿öÁ¢ùU3ç‹Êu°/ßñ®¹®‰O×ßyó#È÷ݱø[Иëâ8Ö¢¶Ý+æ–|¶Û³ª­÷€cã8§\Büûè×™§Áyfér:éóa™köO@zŽ Èc®Ç½Úêñ¬×ޤoÔíÝûH·ÙŸ®jkù²äž$|ò[áçµS˜öÓ-ÞÿÀ¹Iñ‹ê;ÎçǤ\c'AÞ´Y4F; ¶JÉ‹·bžÑ!Ô(ž‘ø¸à÷%<ºiå|%æY6¥C|Káu©_>€N Zž­à™*ûç´cZ)ÔÖö µ_Ê=©ShÅ)w7…ñˆóæ6?E⮄k-‡´kF#Ú•µ,xw»º .óm‘e»$ÇïGASI¸v¬"zÊ,æXÈ’C Ì¢o[ÕNãÚ3õµ­O‚ý*õOý´šz$hÉ)#E§p}6­9ýÚ5æ¸ÔÏçÆ´s¦ÇbUýt¹pÍ2·²‹ó$вÅ¡nÿ¸¢\íà¶”}Aü~âêRnå¯H´7Û´p(;ÜÀ¦ÄY¯ +ûÊ&±ÛÕHÑ>*ñ–ÁQ)ÏtHì­ô ¤14@á®°ïo»ïÞ%´Š¾*Ñž{÷¥Úï®c(â]¥ÁUñsôèe2E“mÓ®‹¸¦ÈÒ!ü¶Iòâ}ñC;ÎH0O–¹ƒENHñá yK—›ßEÄÏQºü™tÁdÛÎÉĨEc:…Âá&áb¿Mèzµ–.0Š$ïEk[zÄßraZê³øöˆ¿LK5¿*ú £’oÒ}Nüä;£âOPK=ºÂbä‹, +ãç;$دŠÂU‰Nz9¤]7š¦¤ò”äßÞ³,LJñ{X'•%b—@‡ +Ý.Xý¿åb³’U:%(¬eui/³¨}¨òl/k[ôw¢¢æIIÛ@%3‰gÙnÍGç•ÉxôJpÜèëë¤ÑŽ~í܈qNÑRaHµá{^_‘àÄ'$ZpIPd¯*Ë4ƇA¹† ¿ß¸pn¶1>½+õÒC=zOh´dIû iž t\Y+ÉJ®i ~wUÒ‚Uçt …œ2®Y"Tg56˜¸/¤[µ™Œhë˜vÍXÄ5e”–† ( ÄwåOËoßÎgk¥Be柉H’“Àè‘Æ% ‡Qœ»zèb¢\.'@—‘£nH‰E »ÎBÐå€*¨î¬í9 ßý´¬-/âк nÝ!×!ÿ¶[C ËÌiÐEh±Wl·(ËÕá'üUÌuKÀ>e³]L®€®PQýsÈk@w±)à™aÏ8†â¶7,G@×¾<îyð,ö“äf} œkƒc`8/ìöއ¹ªíA9ß±*< ö…#HÞ²j,Ý­Vƒáke¡ÁíñV{ÿGÐ p3òmÑÓ +N€n„ü*Gaè×¶çµcgü·‚Ÿ†• kô%еø{“n£8ßÁ°°ýàVtÀµã Ê]7’ÐÎó³Áou?ëÀvx玀}e8¢žàZ B•†ÜR¹Õ0ò+Ï ß¶ +÷À9ø ê¢ 0´e Èóž¤\ª÷¡\—÷¼è¿÷óÈ·¥¸Žðiÿ,áÚ20¦ýދƾ·Á0ÂÿåýíßÁ:p,¤xæ-p.8 òÿßû”:ÿ!÷=Ÿ'9àg)žY€sØjÐ¥?üx ¤ù¸÷·(¹®Jt‚|åB𛫵|.Ø—€sý¸FmçX*l°\Ìò*΂7ÏþÞ}`ÇP{2žWÑBDH³Ú?ô8ƒUõ‡Ò÷¥ª_VÜÛ@¦Q E¶1wg@aëw MSðösà¢~þÄYlU¢ +À8Â#î‰Û Ü™ƒföc…P`Ûƒt‹³Â%øyLt°À?4§9‰xñ[8–[àºPt|¾e-6מ¼˜ûio¼21ö¹àÜqõjŸƒƒƒƒƒCK#‹@¡¾¶¾ˆä.I8ï=¯qÃCðcº´ãS ³ò1È~ŒxÁ½ tÅ\çÕ§´Ý]¢5 ÁOntdˆMk’Ù Ò¶þW£ºø.Õá•»Y0þ·ßƒæ&ë07a[\ûïiÔsßê¬Pãõ Ði!¨¤ S„Þð®);¤¥h˜Éÿî4ÖÕri¶·Jœç°ªÞMØ÷TõãH·ö>­ý b¹Üè +F€Bh5ÜŒâcŠï.ö‡P_A¸´ž®óŠ) L‘ž=ZŽ-DТx´|ìGëŽuÖ¤­ M§A¥À|¹Ë;ÿ2(ðžè*“»äîð%cê“=¾ ~¼â5Û2½ìkÁWÌçà[ÆÕΔ¤R9P„@ÇP†o!Kƒ; q'Ð|+ :AÚWÃÎBs ôl8Ò=ÖÏtºT`è[£ÝÑùðÀ8㪿ïdÅÏK‹ý¨_¶u‡€¢&TÆÓyºÊ? +û¼¿×@ ÅL³v€–ÁøÔY`\ôǘÙ™• 2d1üdTÀï|Ào›Õ0‡Âиºþn +sAùb6|c›òÈTÆÅshÍL@{Ò\ ÊV8888888888TvÍ3—æ¥`˜õø[f¦Å=Ðèx4ÀÕÝÓ¸i®Nàààààààà0óà„${´šÀàhΆV¡y ˜g扂ë½&áÞú%÷mGš›§ppppppp˜ép°=œT_ÁÑ\êHsX-ÀyéN|Ë+÷Àñ> ;~œïbê‰Ûº»J$Ñ|œ/4ßO³ +1ðʈNH_'š›§ppppppp˜‰pÂp~´¢4Gs#fÍà.P/#¸;@ºŽ{eéÚ¸À3àNma[;_çHsëî*Gó p·ãH¿Q7HóO‡œo&͵S888Ø ]¬g:ÍŽfGskÒì„a÷´êBÒ<ð»ÏûÁ +DïÞTw!i¦ + Žæ f"Í} Mæ¾`/¸zcn98/® 9·À¿ð [DÑ| üö'QÌ.a} mÏ£qW¶ªi®œÀÁ!=f:ó¬ÐNÖ3Gs68šÍu€³·p +\wÒ0Ò½ð-†Ã!çë&$ÍdÁÑìc¦Ò<Ò4O;vœ[ö¡œ­²—‚óä°qü8îËÞž;Œæà\öó’žÙ¾Ï Æñªh®ÊT´‹¤ÃÑ Î1Ul¿äÁ«¤¹–(ZÐNB’‚£9Z…æv`žÚÉz¦àhn„£ÙÑÜJ4;‹!¿ÛË~VÒ38€F%H³„¤™.08š‰™Ló*ÐCGW¬íò*­Ñ‹¼vè¡?§@º‹n‡IóCPÁøÓ‚Ÿ“„>°oé9Ê¢¹¾‘"ÊùHŠÇ]yCDú +jg‘ÅÑ<³i^."&´y\DÞ‘í"2"|?C"²ÖûTDÆD䋘zî‹È«"ÒÙDZ;¼6L‡´ïºˆ¼)"ƒêí‘M"r&‚ö‹Â÷ìhv4;šÍYÊ ˆÜ ¡q¤Ägö‹È{!ô¾û2é]#\{t¼/Ñkg—p²mW—pÍê8?""·çŸñî+ƒÞUìÇÓ"òBÉï8¬ô‰È'!lïíhžù4¯”à8ž‘g›@¯*ÝÒÈï-™æ»B^¹Y4wIãZV4͵.y+h'!ÉÑÜ4·ó á‚öm/ŠÈz)náëóÞÝýgíp4;šÍŽæ”%L>!"==mÈó«†_‰¹¾Kü¾ðE»ôë¿h%Ài\Ç«’ÚA`p4Ï|š{DäªV÷´pnn½:ÝæÚ±½ h~¿$šk_²ÞØnB’£¹=hn'æÒ~Ö3G³£ÙÑ<3hnw‹á]‰g {¥QHKxƘq}œ l‹a; + Žæö ù£Þ‘ЫӭÏÓR /þQg¾±N³>—EsíK–›ÚMHr4·ÍíÄgPD¶Ic¯3Í3á;;‹a<½aœ0Ÿtß‚ˆë;¥!©]Gó̧y»ñv è4Ë ί_I¾yܤùÍÐh–^ αyin‰’ö†v’ÍíAs;1ÏôÖ³A­}6“÷"aá7ú~.ÆÐÑÜ š;…‚¿R:fsø‰P(­3Í3å;;‹aü:œUø»ÿºpN¢ûSíÚ2„¤vÍ3Ÿæ>iäó>†ÏÖ­è4‹¤3þÄÑü‘įýÂ~±KDž2Î-õŽïàzÛ!ÌŸðŽW¶‰FÜ!\ Ç<¢”™®£EÐÜ2%ÍÅí&$9šÛƒævbž!é­gƒÒø=†ž1n\§p1†Žæ*i^+"“F;¾’ôyGÖJ#Þ‘à2–ï +[}N»+yTyCqQʤê2Ï%F¢··aØæû¾ê][„ð¯¿[5‡Z\[””$0Ô©Œjí.SH‚0Ì( ïÄÜß!a"a0㯛Is]JVš;$¨¼ S°èu7ýlW¿ç![>Ф9.t Ò6j‹¬^£1mé‘àü>c·Lº Ý„$Gs{ÐÜnÌsšx»¢„Ž4J€fÅvxÏÒ؛…ÂÖB¼T½V>‘äœ .®²<šMËÂûB÷ý1!ÓqF(8¥˜Özu«:F…¾n›–`l®ûÎÙh޳vxô+Ü&Š +›_º…Œèm‰Þ¾vÈhïnyï‘FEÁ[Æù¢„áûbŸƒg—o±êõêMÛî—ÄP•A‰fΦ%9œ¦jšÍR„5]™šÖ ÀfÍì4ÚcCsË•¨cá6[7Ü÷^jѱ<ƒÂäºÄN½½ÎªRÍ3ÁJÚnÌ3$[¼]—p‹•>¡Es•dÓ€v™×µB··~¯>›{Gµv—c˜$¼‹Ð‚uÿ‹ûEâhUMóëÚõ“B¥Ï‡âÏë#­¾­iÙ—`|ôW’,PWEs§ÇQâßE÷‹„[þ«¤y©Ð2nSÖG<UŠ:’â…óÐg1ì5Þ…R¸Ø$”úTÂß‚r£‰©cLÇÿ¸Q_^‹á–÷Ô©‹¶Ö~/³¼'-Í\°¨×œãtœ³¸`_JÂaíw4¿¤ýýV;nÎ7?0ŽÛÁˆ:žð}L{Áw»À‚˜6Ö~—õ§,ê€+1ç.[ÖqÃâšÃÚï²hN‹ຖ³@º¢æÄÃÚoš{œ7'b®½¥µAá’÷W_OλêÚÕF=Ç´ßà÷ý½¿« x¿‚ëfÜ;ûÁ¹#i4× ›¾T7ô"¸Ö.K¸^_onÀŽÿº®é6% +§-ïßkÑ 8? $\›…f…Ÿz÷ïÇÔaï÷B¿´¸ÿ€¿ùôýÞý‡@¾b€oR´¥ +šÿÀÿiQ¢ðËûÿ`Ùž44ë|óTµ°À=ËvÀ»v5€/½ÿ7€ý: nxu|s¾.$Ô—†æ0ü øniÇÂç;¢ð"¢ç˽~–²ihnM¬:;„¢°8ŒÛoñë—ð$;"´>¥ñ$(ÓªÒ+´.è1®:¾jUmµˆZžjíÂÞÝM¡õLÏ:\%Íú÷µA­¤Y’Ï$¹#‰ÄDZuIrlÒ}±óbÈëJ×N½ØÄR}sÿ&‹ûE켪Š1\oÑޤąEß*"ôª° û(›æ¯„}No‹JÚefÂñŽ›[€Ý—Æ­¦Žjuè1ájÜ4‘fUÆ%quÙŒg»<eÒ¬vXÑKØÞöaxÅ«£7¤Ž÷#î1eµNKs’ÅPwûóŽ=§»)ì—·%háÓ­Y£ÒøîLo·‹Â¾czF}àÝ3¤û(„ެCZÐ’òhôŠ}¾‡¨:XÖ‘4š;¾ˆ$[Ït¯°÷×*Åä«ÍŽæQíºqËúˆÝ\ûžDçÁÚ&v^»GÅŽ—2î³õƶ¥9¬ôˆÏ·'YÿUÑç…¬!ÝihnÉbÈ"$é¥WÂÝ0&cî ¹þ¶°§}áed%í.à6‰SÆ%Y¨Þ&1ÒqøJÂߪ2±ê.}Qˆ«ËŒÍŒ‚ËcUÂðM‹öÆ Ã6qI"åÃYâí:-Û+1uŒZÞo›¿a\»§¬CH0)ž ›ïÆø*\•d&¾*šE‚óqŸqÿ¨vnÈ;¦«.ïØxH½ +ïhÇGBêmÖw^"ñ.–Jrìë‰ÏÄm#]u߆ÐEÞc–íÈeI4h׆¹’.ÕÎ+Ep˜¯×Ñ-ñ +UoÒÚ|WüdTú» £)+©.$é="r IDATíN34«tIt"²¸ûFµëÆk@GÖ2dÐ\…Ôìâh.æEBÞcLh$ý@¸¶n;žWm“7*”ËÆ½:ÞÎiB=ú šû-i~?æ:Û2(v‰fÍjþŸ–äâ¢hnÉb† k¿Ïfp(øtŽs—µÁÐ%)Îå? ºÏ [Ü£_Fó ÛóìíXº¬Äaèn‹…m˜@ñ4‡áµœ×üÉ.ЗAwù$L Íi\I:Áo”ÓeSGœ+}Úëòº’ڌɑÜoxµ;÷ö®­º{~’+išþ tƒ; º­M8ö­ŸXÜÿ-øMvƒmžòþîÛýeä(“æ;ºçÞAð›]Ó~«ëtW<å¶9רwJû}Iû­æ¬¤~QÅwþá!kÁõf5|Wï(üڻΠxΛ-ÛT×·ÓàAÌ9›¹!éº44'¹’^‚ß7—X +º±>ƒÆïs ¾›«îö ø ˇÐ8×=רÞuý¶jç‡Ô—Æ•tVȱÇÀ5kQ½ÍDèzµ.Ù†I¦q®¦ŒÿmÂ&Gs«aÊø?ŽfsLƒ/AÞãøoþ ÝøØ…i<ð;Ð¥þø+¯Ž¿ÃHÒ„z˜›7tšçD^eßø­åµ@žë28ýGÏWˆ£¹%¡+²I::ì‚ÿâuÄ1açvƒ öª”mH+$ÙÒ¼lç0^j3Èp x÷?27´ë¿Nxö^øñi0~å ¯ÎPðØ ŸaÚàW!õ”E³‰_">î%0'DÖ!:ŽöšwÞFéS•0lƒ¸…Ìv‘»•| €tÌsÖx;›8õ8¥Ñ„åslãæ«Š«Øÿ;ü˜Àÿ. ¶øÀ¿ø ïþ¿ð`‡4(“æ  bK ?€ãg 8þô8¹§½¿º@¯Ú· ÁØça­ŽÆñ°:LTõ?ðƒJÝàÜýÈXÙÖó[ÿ|oAr€F:¥u•}ûdò%âǶ­²8nl§¡Y†ÃàÇóØ»Áo¼ü>Ã`_ý¯ÞñMà7¨¨ˆŠ—}2’s½º†Áud.€¿™ó^ï~¥äº2«auéÈ’3¨ÎJ%ü?s­T„ÀPT)$ÕŽæ l "u‡9~ãÖ¹fÓ|œó?ËYOš[º …á)ÁÛ‹à WV‘'bîý•wÞdƒ‹ÊH·è•aUùdò@mÜ/ÀÎõ5˜ˆé× ó72a‚º‰G ó¸ ÔÊýLBòµW~àßA!bâ¯9+i<²2Ï6BjÜ5¶ ó„åue%ŸÑ±ñ¼‡ˆ÷ôø áV0ga¯Ñ­2ùL]P&ÍêÛèßðO`Ò?}ÞZZ6ï Ñ+G%JÓëøZ«C-”KÁ¤D7ÜÇˤ¹ À€7ŒxÝ{ÆqpîN« Qø#€ÿÇåVoƒ‰owXnq•}û·Hžë'¯(8Œdæî0â•ßY+E)S_ƒß¦àº0 +å×ÑÏÀï1† Âà0­`½à»¸Î‡¼zþ*†ûìyµ¶rî<Ò¹I‡YϢ怬4× eÒ|ÌÞ¿À› £nÖ½<怂­9Gì÷Žoû×BêX öýY°›·Ë¤ùP9Q¾†ÔDÕ}{#8Ÿ „œ›ðÎÇ}§o½kTß0¡<Ùâ†f‹áwàüªæéø™Ño€ïê14ÎeçUú$üurWT¨Ì¼¶<ß‹­ÅÉVVõÇ+à+†‘Na^:À¶é¿ÊJn IA8š[ihžÒ~Û†GÔzÛ“\á§"îk5¤¡¹%¡3Y„¤4 +7—@& ë¬Â‚‹ïK ò@ ´Y Ë¦ †³Æ£iÎ# ¿º4›J% ')†6ƒÔásj‹4[¤ažu¤·û +ð<|ïŠA¥€Âê0fíYÐ#f>æpdÓ¸RMÿÏ·lÃL‹1,ŠæG`Ÿ›çÙgÀorœo‡½c³@Ïœ°­s¾•;ç@áH …ªŽ§A!`èöŸíš2þÏKs7Øß,ê8*­ÒôËAPÈŒRêØ Ž)SÆÿe÷í?ãùyPh›2°ÇÀïgCÿo´:–ô_óî·ñ|›2þ£ÙÖêò;žc~ï(!ãØ÷£”ß›AOÝsq.Âãy/ƒ}'nÈj1œßS°nJ%ü?£SÂÿï¬ÑŽ;!©S÷µÍñÐùÔ9 wÑ·×Öºá0n«\ó|»ÐÜ’˜ñÛVHú¸lüÝÈ–¼OÇþÍ«ç5ÐÊ4 ñ–VÎbèhŽCZæù?@a+|aø°_î6ÎO +ظo÷%èr­<ÀÂêØ »}©Ã—æuðÔlð$Ò)­×Á>Å0hO +5¨¢o®¯ÿ–£Ž"æ…8šÓX ÿ2l½ò‚ïì +(4@²¥þOþb7‚ó·þü[ðÃ%lšy-†QJ€ó°ÏS4f#øNn€ïésï'$ÅÃÑÜ4›aWO"ûšØL k¿“òù´#Í-‰(ëE!i'|7Ðïs·ÈÇw`¶Êý FÞ–9›2þwÃh´ Íy™çÏüC†ûÀ0+`¸¸Ê ÍöøÌ ü¸Ð©qq\Àm”i_ƒIû@K¯Ã&dJG‘4/ç‡Ã)Û`Ë®„Ýn%::]®oÇÓ<s_~C=ôp.¤sSø5‚!}YëÊ* ÏÇÖ7WÌA=7Ðèð¸öÛ Ip4·Í@ºU¢êa´Í]Žç¤DÑíHsKBWd’¾AqÖ€0| &ØË +g1 ¢inGæ¹ãíÍéñò/ÎßPG‘4›îÛ¶8 &yC²3ët“w};EX ³ +ÿEÖ•Çb¸~¢Â0%@³qtû7•ïz^'$5ÂÑÜ4Áí1ÃòcD¡ÙÔ&¡ôâ±™Ó6—ïÁ.¹u;ÒÜrÐí($9š[NŽÇ”ö»]âí¦"îk5Ô‰æµàbø8(„]ÝŸ¢X¯"iÞ˜± 6!Q·.{½sÌÖé;W…44;‹!ÝêeœßæQ‚Èiø[W ðÐ(ü÷ ¸3OBÒ w4*Ç/8T%$­BµsÍÒ +I{½ßJ`°Ùi§ÙØ£ýÎ"$9š«¥¹\§÷ h”T‚a”exö;-Íàom>¤ÿD\ûÏ^ýûàËQO€óÿ¯¤y_ÏzÏ^f¿ ®#Qüÿr•yû‘Î3ªin-ˆˆ*ÄZíœMY$"_H#¦E䌈¼âÕ9¤•çDäm™ ¹ODd4e "i÷¿šp­Ióú Ï«Cù´Ei~ND®km¹/ìGEÓ ùD»þ­Ú~Tì1-"Kr>¯Ë«GaÅ=¯j×UÍÍè +wE¤³f4¯•`?a¶íÃu¤yHÒãœÏ,šfó›Øâ]‹çög¬[$¸¦Võ«Â¸E[²Ð !­ +ïYÞcó“p[DzrÏe ·]in™òg"¢;¼ +ßÝî€ÿÉ`9èÚ¦ÇTœÝ0³lç° Ðë;îYmsïï÷=Ð¥'É}C§ù +€ÿqÝRÐÍÌcPÎø»ˆsÏÁµ)šæ¢Ñºø„eé>ºìظùd¡y)ï¥ð$²»wn]ƒÒà€ÿ-ãó`~À)cyßWð]I#Ú«nX€`hÇf¿°¼·jš;@wfåž}À_d¨§4ŸAÐ…×![(QY4¯ÿ=lp +ÀS\¿é¶QÝׄ*¿ó¤msâcs>Í] ?¢¿fíß:`‹¬ëãrð(wÖÝþ5e¯€¹dôm$õõ`Õ†LÂϵ4†ÿ˜s Ú-#íÖ‰ ›®ª +t®ch¦ù}¶"[¨Ÿ£¹xš‚ã".Ñõ-0 )t©(šà)ó€œð×–÷íEº5MÇÐ~/’å²A0þ^Á¶QhGš[†FÀ´0 %hzEäªqO­¯Yú¥1œÀ¦Þ÷µë‹¶ªŒJsÕþq횺ZI;…ï/ÌúrQÒ[0²Ð )Ε4‹•T$YóUŠr%Íc=«ºä±žUEs·0„梱«…i>#Ùµo—Es¯4~—(¼'ö^fª +­6Ø^Íu.yh†c1•lHûœ²,†×Å÷¨׎e¨;OÑÛÔ/áß'õì)£®*¦Ï¦ ÜFGs±4K4î ={l¼“‹¦Boi¼Œ…si˜›|>‘B^ŦþE´¨ß{Ï8Gs‹•°ƒºt4¡“YÜQ`ãz¥Q '¨æ’lÃQíš1£è1E×s:#p×8gº¹¼So3h.¢<+á®W7Ed›¤g¼ë ¿B š!$•o·MØG'…sEQÂH«ÄŽJÓ’-oIh®2 .4WYÍÙŒY\IÍ2*Ù¶­e +ÃãÞñqíØPŽú³”IíÙý^õïÛl!©ìRG!ÉÑ,ãÒˆº†¦‚0+ÝK…®í£BžtÌ{Ÿ;„a±¶têôêÝiáØ.â{´#͵/am…¤õDÞDPQG·²\”h±l«Ê¨vMܹqã܈vnÒ8×/Aô§xf4ç)K¥qÀ‹p€½!éj4Å«ÉglJX2­ë’l¥ÃQãÓÞ{I«ÔªͦÅÃYæþ*iîðŽï~³R¬×SP9ê•ç$|>­Ów®ª™X)¯ÅÐäYl6_LUÃqíÿ¡ž‘¦LjÏ^%õ’Š.­ $9š9××Y0 3p¾%éy‡¢Ê E²{2:š[¤„4…¤0/€ ~È/¤¼l‰#Æ +³ø.•ò­*£Úù¸sã1íŸ4Îõ´õ§xf]-I=B@o›Âû’OÑPaxQmIHò¦ +ÍL>Wº%:™VÞÅ»™ÉgÒ–~yAµÑ§Y¥JÂ]É6¦ëFsÅÑœ?±R‹a—؇md©¿J‹¡NÇë’-)eÖ¢»âêípB’£ÙÑl_z¤qG‚O¥ú°®íÒÈϽPÒ³Ú‘æÚ–¨æ¢mN꫌ói· L[ôó‘q®C‚Úð²¬*£Ú9ó^ýܸqnD;7iœë7žÙoùÌ:Z’:„ÚVs7znäe ê& §Ýpi†gÔ5®2ÎJ<^`½uŽ14û¦•ÆÛ£Ž4÷Hø–®&¦%ÛÜ_š{¥X¡¨h®º”a Ïk14çÔ8Üû]Œša1¬œähv4§+½ܺ\„óNè{…[ë阖taµŽæ.Q'L!éª]hÆ´si]ä²”M„>)ì0ΕeUÕÎõåMíÜGÆ9½}Ws&ƒ4S¯ÞÖºY’VI8sr[8y¡É­›0l+$‰d[@ê–|Ƥ= +cëlµC½, Åàê  ¹[Øç¢pSì¶ß¬+ÍC1´eA+Ð\e)3±R‹a‡$o1¥Úk&ÒL‹a]à„$G³£9[é +y¶ +Y GI¥SÂu·¥ºp²v¤¹v%î¤)$ÕöÑ +jºî©¬Ê«¤Øä3q‚á¨4ªu²$-’p!aZÈeó7K]…á°KÇ}a¢¼´õÖ=ù $˜‹AaZÈ g¡·Õb ! Iy_‚s­U¼Uh~Jü„¤_yôn—lc»N4I±hš«*U$VÊk1Ü%ÑaLŸ¤¨§C…«âï]F óîsB’£ÙÑ\L ›KDÈï®’ü†´>¡sUñ‰4'ó};Ò\›’t)$½#\€tœ‘Ƭøe=îì]¡ ¡+ʶª¼ ̓ʲ]KR·wMXœÿ^;‹ê¤u†;„ßQ¡UjÒ«÷Uáä“…ÞVH>Ó)̪&ï/$Û‚ÙÊ1†#FŸŠ]B®V¦9k©ÍCR,Zæ™òuÚóX {… 蘧xKìç°:Z ?MÑþ4E­÷&£î„$G³£¹Ø²T¢·¯½*ä¹6‰§n§ˆ¬οãίO ùÿf­íJs-ÊŸ‰bÐ`À“Ú±ÓVÇÝT®˜à1ïÿ‡`›~[@Ýa4ï°À:³ xFZ\pÀYó½cUÐü!×m°À¼6¾à7´GaÊ£zAºkÇ€t<*èi°ÀI µc/ø·‚ŸÓ¾×eÚ± 6øSÁÏŠÃv°/écêE?-áYeм +lïyÇ|nqO«ÓœŽfÂÑ\<º×fgìðYÁÏëiÚ `®vü€(výKBØû8íç¤sÔ¿¤u ‚´ªglðuŽú³b)øÍ9w À)çÀ>ðmB]à¸y‹'Ì2®yŸl_8šMÌTšòÙ[½v̹î( ÝçŸÙ^™òEß +€¼æË¾ÌÙÞ"ÐŽ47Z‚vL>ÓŽVš{$h¡`{ ïÆebuq•ŽfG³£ÙÑlSœÅ°w…ži#bšÕ-ô6{U¢s ÔÅzÖ! ¯ û:î{ïg\ØG?ð~(¼LNH±ŽfG³méò€Eæý¸/ôxʪéhža%É@!ÌÂPÃ|©h¥Dfö…ÆqgU)64‚Vs8jì¾+¸U[’zAÍàÚ±[ ¦ðg%=SöA-XA«Ë/J~v;ZÏÍ>ÍÅÁÑì£ÖpÀY m¬gSn€mWôÌ0€Ö´žukåV4ò§YñÀ1ðÛÚxuU Gs1¨;Í:€sêjO5ç¢8Ü=·{óxU‰v¤¹RØ*€p!éÈX”éâýƒ‹±BBR; +†64?àc?i:a¸^®¤§AWÒ³ÈÇàö ÷V42¨Ír%u4ûp4g‡£9ˆfº†ííJꄤöÍíA³ŽNpŽZ*îÿ8¯@%ßh ý¦òv¤¹t¤QÑBÒyp1,*6[¡ŒÇÞ Æü+8«J¹hGšÚ•ynG뙣9G³£9 ­B³' ;!©ÝGs{ÐìàPÒ*â’Ïìµãy~σ‹·™lÎYUªC;Ò ´/óÜŽÖ3Gs4ÍŽæV£9 NvB’ƒƒƒƒƒ†¬ + ^Hº.˜gÁò$my7€à⬄$u’ÚQ0lGšöfžÛÑzæh.Žæú¡iŽ‚†Úy@{&ŸiGÁ°iVhwæ¹­gŽfGsÍ­C³ƒƒƒƒƒƒƒ†¼ +…v’ÍÅ î4ëhwæ¹­gŽfG³£yæÐìàààààÐö(J £…$Gs{ЬÃ1Ï-…2:ÚQHr4·ÍU` è}»Àb0$w.˜,}6Èg?ós]“i_ótµ¢¡ hOš+AÙ +‡*ÐŽƒ£yæÒ¼ ½Ý€ø\q¸àc0¡÷q?Ò²òÐŽ4W§pppppppp˜ypB’=ZM`p4gC«Ð¼L¼ýDÁõÞpÜÊ»nÞ¸íHsÓà3N¶‡’ê+08š‹Ci^¶'l;t€m>†Ó^wܺåŸë•¯<Îuax&ß~ ÍŸßÚ‘æ¦Ã)f"œ0œ­*$} + S + óÌ……ÅàûŠÚ¢¸NC; +IíDs€=àVØfRíànYÇü>e½ÝžçÁ§CÎ_òÎý1e½E i® œÀÁÁÁíb=Óáhv4;š[“f' ûh!é€ÃNøƒE]ý`ââù†¬ƒŸÀØ„’ªE»ÑÜÒdŽáKà{8 àQAÏÙ àypž×±À¿ðŒ4mi7šk§ppH™Î<+´“õLÁÑœ ŽfGs$ ?€?O‚ð¯<† ex…÷;ªž: Ãí$$°ÑCø-õ5{!üµú +¸Nßñþàqpœ˜ïÕ Iå£Ýhiš§»ŽëŸ—ôÌ~pþÚ`?`3Šy¿qhGšk‡2í"$ép4Ï\šÛyVh'뙂£¹88šë…v 9N¾ηÇL £×Z†7€Vbu†ÛIHšûõ/Œk{¬¿×0¨Ä¹?$à¼wïįÁKAÁT‚8!©<´Ík¼çÌÑŽ°ÀwÚ±NÇ^èý éç²0¬ùQýùgÁ9¯,þÔ–æ²Ð šk‰¢í$$)8š³¡UhnæY¡\IÍp4;š[‰æ(aø +h>‚bÚµz7£¹–a'$ÑÕ'|¡ÀF‰NƒBÒò­±Û@Úäh.«Àp5—<ð€Ÿj×ôãz‹Ñ. ¸1ß¾çÚ±S ÝEkš«@•4×"RDY#"Iñ¸+"oˆH_Aí,²8šg6ÍËEäÄ6‹È["²]DF„ïgHDÖzÿŠÈ˜ˆ|SÏ}yUD:›Hk‡×†éö]‘7Ed0C½Ý"²IDÎDÐ~QøžÍŽfG³£9K‘›F;n ç䎒ž¹(â-ñ™ª¬®=:NˆHOEï{mÈóψHWIÏ[%Á~<-"ÏyçzEd‡ˆ|âûHDv‰È‚Ú±D×ñ÷¥œïFó %½ß¸Ò§½[Gs±ÏY)ÁqtW8¶ôkvùÃ$¼Z@{º¤qN;Úš«,UÐ\ë’·‚v’ÍíAs;1Ï.xaßö¢ˆ¬—â¾>ïÝ…-h;ÍŽfG³£9e †?ê„áM!ϯZn'!éÿcïýCô(ötñg÷õËÆKü2^F—É/qI .ñ—¸Ì,ñ—xÑ/ñ—“‹YtÑE]tÑe¼˜E/zÐEzÐerˆ‹.q‰¢K<è2sˆ‡xÐCrÐC”(3‡D’C<$2‘‰LÂóýãÓÅ[]ouuU¿Ýý¾ït=PLÏÛÕÕõtUW}~UõEž˜ êË$OPú[΃Q’;)Ή#ÉýÌþ•¤ú9·(2åL{­¥Ì6öóÉ“ZÙË”±Y_MÇl8I‘CMl/¡]ðÈW IDAT^Ô÷Xǃ5qîeÿ®Šsß§¢6MIŠœ›Á¹IÂ3h÷ž¦L®UÝsœä ï:¼g‘sä9¯ Î6eøñž±ÿg÷^y ëL½P’P KåÏ¥ÄIc”è‚WIÎ'÷ü„2Wï ´u‹ý=*IõpNî«+À¡râŒví!Š1©nκroòeçx²ÄÎÙmLõ'XΘ3Ì´ ¼Ìrdqg³?eùFÜwIn­™sß§"5MIŠœ›Á¹IÂ3ؼPÒÈ9rŽœWg›g¸—ŠR¯=†½ä]‡’¤pœ¢ –Xÿ$_6ž¯ÂÚçáEIQ¨[IêU[÷J1¥8¢Î±ûîµ–vgÖÚiUp~и÷óÏ–ºg”µ=©ÓAsÄe¥Q¦ß‡ìnwq6Ó=Iž{yBÓÚ¤LW_)›ó@¤Ð š¦$EÎÍàÜ$ál^(iä9GÎ+ƒ³© /±œð×nÓ;•Ö:<†½Nu(I'(¡øeÔw}RþaJß9LYž8A‰J4Ä,#À(Óžè:•$•Z¹i¼‹û®N®÷‘uêV ×R–•f­ƒWžqßûmbÚpcâ(EÆÕÛ»LÎcLËyGŒ{­cºOÍ09lÑ¥/£xVÍ6ãÙ<]g3Lò}Pð~®~¶˜ó<Ëâ<0)$sÓ”¤È¹œ›$<ƒÍ %œ#çÈyåp6•ì]=äjã^¶g¸iŠ¡©0|Æî÷ÚHæ•wõ ¥ßØê¸ƒF€éŒr·ùêR’ZɽtøÙ¤ž¾òÂFv¾§Ÿ0;$^¥ºÃ{h÷Ö3áý4‹G‚l£ìY•…ãL÷¹²8Ïhe,ѾYåxrŸ÷\™62L{Öw™ÅÆÎ* ³mìYfyûzèÊe”¹Dé;f¾-lG}tÃy R^†&*I‘s387Ix‹…’®¦ â>ߢuáЇ(ï~½Ü|¦W)rŽœ«äÜby³¬”%ˆ—ÉyF+ÇUHo‘¤?·]”3kÔWßϦj!¸2C]aX¢p‹¢èOîÿ<åù)^‡)΄¼è‰‰¤œ”¾ëk,˜Öê]–’”•òÚˆÃEÖõÛ=®'É{û€óZ¶×ä¯ggTè2¥ùŽ)ìÜdO}zº•ppÉ—E9·˜6¬U¹Ô¢xÓ$|ç“t$y^÷PÆ:Ÿ¥5#L˾ò·‹³ëSà¾0¡/—P¦Úx°(çKyš¦$EÎÍàÜ4…!4”¡zžÙ8A1ÎÌ$iRn–‰Iž<½Ú|+𣔇ž¦L¡^†”%ÏS&½û™/Èö‚óê¤n3IšfwëÝZlï¨=ÃüO„ö²«L®þÒ ÎS¥èþ +žË¦äÞGe—ÁÙT†ÍñzŠÅ1«•3ÑE94ê4Ê´YµÇpÐCSa˜ñ¸fˆÒ¯ç)Ñi÷3ýœZ%è0ÝÏo;;£Û–)ó€Ï;S…’”•ß>íã‹9u©‹3(Ê¿K®˜e~;meöž¤ß׊r6÷ŠpEòôczC«ûÑ8Ðþ•œ¤]®PËŸŠ`‰ãZΗ\'›¦$EÎÍà\TaXO4w±í]ICaxŠÂæSÿ:7ŸÑÓ4í8Né/ã9<·RBêlî æ¿Y¯oë*7±2wŽ"(Ïk÷žùíµ–í…-Ü÷Ó­ÖÉy+íŸT²M„>i”òÙð³Ÿ]œ«NJ>Pߪ9·˜öx§_$ŽO{ëu ÝÞån9›žaS©œbqÌjåLtQÙYïçµsUz W‚bh* ¶0l=ÝK‘ æ)s²Í›¹ŸÒç]Q ÛéV xÖ¿l%©›v^r”ñ¨g>²FœA÷Ò×øÓ¢Û™¡àó5‘"œõ}"{^£§‰ä¾³lo`é{í0¥Í%×?Åp§†)‡úDæøp~œîwÏÄ!ºo£]¶ÉB–G)‰ú};E€Tï‡Ë‹´…²ÙÖ<%ôî …3)ÂhVŸ©‹ó&º½)dØ7x‡(²„èº×ÏV‘lʰK@«“s–W÷‹Û-Š0i°æ+âl*óì\¿©{~ÎQæcWšÕòÕÊ1áyåÌùÍzí2ÎWå1\ Š¡®0œpä»2Žž ŒµYaÌÊøò¨£¬!úíkã3÷™ïZYJ’™|Öv»ÊÚâq½/çªC={Ö×exð,Ãg©"œu#ì´G~=ÝŸQW߈[¸ýi†ʇ˜ƒ} ¾œ·2ÿ\¦û=¶õs¹ˆ .çDΗ²NÌhÄ{éUñMz}£÷¬|Î*5I;÷F0‘ç]¥O¸0íQ‡º6Ÿ™1ê¶L±û¬s¥ÍìT—éîoÓFÞ*Ö®KÎë›Cµ˜`u¼k)c„2¦ô…Ç3®Up…KW͹ÅNàPÂwɸÞ×âm†Ý}FéGæ{3Õ#ÎYi”"nf±þíR†ó¢êä¼v!P…8ûî°ëgU9/3ß3S”³© çaÞ£ÌéŒkMä•3X·*=†ƒ®ê}Ë…¸Ž"gœ£È +.G…nÌp=sß¾å0ÄôZ¦’¤§õÍ‹òÉ’7ŽÓÏT¥búŽÍ;ʘò,cÖ£>¡œGŒ{LxÜC¥qº=äyKugºäª§YíÚ¼(áPÎSŽz’~ÆÛ³sádÉœ2Ù~ì¯JhŠÞ³ê½gMS†Á´ –Wxæóû‹!cÚÈ_U(é(Û¡rgYN¸°JÃL+ÖyÝ:Ö¤$º¨?kÌ0Áç)}Rµ‰KWïz–¡°jÎSF}ô±j Ý묳ú‹^ßwÙ‡™Ûæi*ë\K +Ê»6k<‡EŠáÆ7ÊÍ¥ ?Í|ƒBÝœ[O’ÍXqŽnÃõ8³×kfþržn9ûŒÁ:æë·Q¸ëÆÆiϲôç·#)G{'ëFVç1dÅÐTô1v5¥œ£¼[y2†Å1ïÈ;•ÃWaÖƒ3X­’¤'×ZgŸ÷j”Ù±dXtPÕœ7;¸êpEìô,ãú„r6ëb¤Îòþ+ä)Æy²gÈR}9ÓlÉœ³"&Î2<ÝlÈ›»B8d²ýX÷ç*ÊJÓZ½£÷¬Îzjš2 ú­%rYÍÐ,<œS:7ŸYG‹„ûö;_kj•k WSúi°ËÛLËœtÏ2m<³)† +)J²ËW%g=,ÎV}Â[d¾"«G;ØÖfOõÊZcY×ZÒqºÃ óªqf+ÃG(K£|߃º8›}þEvz•æ×LY¸ž¤Õ!÷.ÊÙõ>Ù sÑûç"Ûí3íY–*GŸûN³ÝÏ'ëFVë1TÅÐT”b²3¹ï,ý M;ØÙ·çä÷¯bX¥’d¦m”ùd>IÖW†)ïÇÑäú£”¹9t}xÕœ‡™/7’î±{­Çõ¤D;–ÍyJË{Ú³|•¦sêk‹HÔSÆê¢;ïæKäíØ‡óÒcãþÀ’vg\¯ÿ~%ìsËœVΤG9× û½Ðë´FKúóv½û@ç\ðiN~ÿéŸoXHÒ[^ÿìqýï’ú=àXrý1ÏAÚ+dN8¦ß“W—«ÎCÚjò¾>à/ü:§ŒíÞ„Œé:æ×|Œ¶ÜæÂGy€t;¯ÉÉ«s>ƒp9ûgþ?œ¤ÿo}ñ=€ð§Éõ +™›X/´ã59y‹pþéyɆK>š…¯!}Ã… È— B8ëòá‚gù +_ÔÆSŽs!mP¤.krò†p¾À*íÿc1Èl‹Ûà7iÿ ‘=îC[wð)3„ó@Â4LÂOIÚ(]hØP—q›<òm…].ª$MÂóÚñGþEûÿHR{ +¤ {Ðîø“ÿ/'ÿoÜo :O zÎ +MT†€Ÿpp¾à9®ZaŸvì«0LjÇzÖ¥Ÿ0™˜&=®Ñóøp6ÛxΑ÷ ¤'+}Ryö‰õs/@ú„­ ýþUp¾Y;¾»÷5ÒB…ëÞCH+3ïeäÓ¿)#ϪoçÕð"îöÈ£ã¯^ÔÃYÇj/C,S! Âô“Ûë0‡0ÎÝ(À~:B^W9æÿ6üVKº¢ 7E1Ôå†U±ò ¤ýÿÕã^[`Wþ/xÆ’$¹æøÍ½×˜p?€)6¢sÖËZ“Sf7Ša?¡*ÅPÇÈVà/Bd»<ÑdÏí òõ7žõ á¬÷É‹™¹ìxÙcÍ%¤eB\†“× 2®/L9ɦƒ)„pVFYeĹÀ¯ü DiÿÖÈçƒ;´:¼`€wü$)_'o°ÖQNç„iðQ’Æ õ+¯B„€u~28>žœ~BB ò‚ à]È »Q+s€{>YÖ¾}Úqôže#*Ã~ðÉçÊã{Ÿ9Ï„ŒOz?VeèÆ±o Êöûwæ"¤¿Þ ás Ü +DUœuÅâ d+kÇ.cܤ'ú,åL/ïúŒ +é«§!ãï›þñDv{2#í…%Ö@úÁÈx>éLÊ<šäÕQ–’ÔϨJ1ÔqÒÛGçÿD¹ûw2¾‡ÈäwCÆ-UÆ^ȸú‹€úU mr… ßA8›2ñˆ ŸqöìcÞëð‹RÖ±`üïröéÈã|GRö-CãeíÜ;ù~.¹ŸƒX•y"ËýO¤u«ß@æ³—´¼YX0þ÷å<00-¦“Úq–ò²mwO’\ØiD×äýÚBÈmÈ÷Ô<éï¿ÏA^M“È· OjÇexÏ”Ð2 à?2Ê ñžmHŽó¼ges6ñ!ìQfž"çtÌyæ á\Tx~20™ï‰Â…$O~€]ïÈ{ð›|”ð<™ü#Üœ»õžõ Ž¡Í9Ï{Âù¤ýîDz"ýò®½Ü÷¤ ÷B roiytï@z,ú²<Ȇ;RZg}iƒËȶ »¢~LE9+\Qÿý +ˆ1Õ4vÕµ³‚¯Òeè|2¼‚ö¸Œäx"œ>EµjÎ!}צh‡Ôõ—þ;Ä0ÿ Òmd^x"p^6/6¹[eøKRà:¿ðG]\_—ǰŸ`S’òú c¬)×eaD®x¢¤o€<³ †Ç; ÊÎUI¾!ã¸Ë‚¤^“¤ H¿k×Âïý +U û ÆÿUr~þ}ÆË™É'ªÄ…ãg}Í[kÃ/ cÿ­IY!ýØ'"ç2€¿†ŒËJ8†üh ¸dˆÎAæ¢,>ß@dðÝðŸö%åfH~ð·Ù;$*ÌÇ99PÐ#|”¤!Èdæã V8†lJá<ü4$u°MŽÑ{V'é ¸ÛÝWv!TV¨j]å¯ +¢m²:ŸœË[ùÒJ£ŽῇP|]e‘PÒ~AUk €Ž¡3‚ä7þ€ÿÀÿ ±L?òÌ>üÄ«°1§n°mã‚ Up~ 2‰îF§§JÇÛZ>[ø¬ÂZ¾ÝÈîŒ|Y‚_ÕkI¿„_èöÇ9çy÷îCçœu„Ç´Ç}€ê9_αñsˆþW÷¨ÿ4©Ç3HÏ« F{/„³>Gú´]¿ÂìóUy û Æÿ.ï™ÏòB£yáMÈøü·%éu´=Å« cÎÕ¥?†ÌéeÍ…—!ïÐ/!Š©9Ï—¥$ êâ¼b*‚)”Îíâ¢×dáHÿú)€Cørœ/“kŠâÊ¿ùþºÆúÎ?F>ŸË%×¾¼ÿ~ûñü îçÂy ¡O°>JÒµ{!ëmaÈ\ÓúD±| 28æáÇ«Í]¥ê&tN +ߢíeyÙ½gnt« ¿{¸Ý]ðS†¯‚}=Oex29®R~òÌö ýì¾€ôW[[˜ø"|lƒ¼/WBŒWï!;B$ 1”ÔPÎ{!mòaò7k)̃ç3èœX^ôÛ÷“2~•QÆÈx¸ùkr«àü ø×~ ?!áw"ß{æ«k-©k¿“ Èßp +¹ç'ÿ¤#|V!…(ø®þú=Ä ÊxÈ8ÿÄ ë»öpÁø?®%ÍF(翇wCÆKhnB”¿„|ðž¤LßÏ.ÿWÁùwÎU!t_0þwqŽÊp6V’b¸ ¯qäk¡½_Ò“åï†äØGN +ÁZˆñöæ¤N7huûRç3ùámˆ‚p ÚóGYJRÈrÛ^ nÅðH—2âÞ™só>s9„ôò=)R!œu9õJdGñö;tÇ¡Ë jžwqÞy¯>„´MÈgt»Á$úã.ˆCànØ#ÕC8$®È8nŠ’9.¢2CIMåü=€ÿñlÐÊY€ÿ:éËþo’Ö£½lè ¾ŸmC\KšF·œްO£ùâ_ò³8Û9 _eø#øÖ„©gFæ•…*<†+I1Ô…ëUµÝ昩¾u5Äðñiòwº_Óß‚o…(”7@Þ±cHƒ JçWp;»vkÇe)Iý x¸êP…b˜‡Ç †µ±Ý“¾àŠpz é>¹ÅçåÎæÛ›á÷Õ‚~ävüyV¦¾œ•qmÚ»¿1ìU±|g=DÙ¿é1ùzØ “Úqç„kwóAÅ‚ñôže£)œ›(<7Ñ{Ö-çË(g‡Ün-Ù½XWÙkDΑ³‰Çu:¾Fþ§l}à™Š*<†+I14†›Ð©œ½QNA”…[Q܈×Jʺ5I7@”ý Šäç(6†ë_j*KIúÂø/Ú_TÚ¶Ñá:#Ïn…(¾€ºÌ=–n@Ú >©ïC:â! ú5eqÎÃeˆ÷)D‡¹ +¢Ðÿ(#ÿP’_áí‚÷U˜ÔŽó8_†ÔSmÆ:Ùå½{a¤¿z“·Q®/ç/Žø™LÒkcÀ‡wòs3òCúø-w!kcvÛøÊy ¡š¨$ùr…tæë“òþ­„zù`íÏ}ä}¼ÜÑ“”F…ç&nÄ9."g7šÞÄðÙ2Ã*±å+†¦Âp Ò†˜çÑVàŽ!|¯@”þ›’rî@§ìs ípþ"ÞÇQ¤Û¹,%é;gµ±èµh>&µ|çÑiY£_´œ7¡Î×f}¶¶*Åп†,¹#ùÿ.dnFzÌt}'EÃ÷Ñæœ÷)í~Ä]hëŠà7ÎøpžË8· +mãœÂW²ß‡Íyy-d~YQö}ö¹{ᨑtTãð”GþO´ü/zÞã3æã°ãú­ד~m0Ìô;°½"Îý”úó4Ó8@r|…s´vÖlj™¸Œ1%rÞh”½%'ÿ(ÉãIÞy’›JäÙ"ù¬V—=®™Õò¿p/]Þ8àÈ÷†–o‰äºùêiF»Ï2¥]lùÖ2 —Üb¦GkOÓ¯ýZɵg)sÓíø­¦ŒmzÿT\óæ*½ Î’*Èy)y~YÏuIË{œé¾8k¹fJ;?o9?ap½ÇøÆQïý5pÎKC dzïÕ-ça’ç´ë]ï´«ºÅx@71ý><p­/çÛã5Iždû]T˜µ\7¥Ÿ·œŸ0xƒ2^똪€ó@%} €ÍÃ0ˆ˜ÔŽ‹xU²ðšv|7ª·{iÏË +u£v\&ç~Ƥvì»®Òví  ÊPRò³¤ú[È97åg)¼ÆP¡_6ÜiAÚÏýÎùÒK¢î„ôÅe&êä<7ýÒÎ+)4<4|ö´=Ck ž¡ûÑý²½qH}õðë Þß,të1TPÞ3ž@ûs¾« r‚o;òT IDATôÅÒ!î¯#ûk)Ojǡ޳—^Î÷ò×ko…Ìÿ{’:þ9€wî©ð$zâF¤Ç·+ m‘õmBzwý¶^Xç¼ +Ù÷¯ÑÞÑ>^v(ù+Ú±úÚ‚ uq΃)«|„ö"&!u4û”|cC·œ¿GÚ#}'ÄÛݯhA8ªñú[¤¿áΗ‘î××B¢‹V¡\l3êò):ÃÿËàœ‡™6¦é˜µäŸÒÎÏ[ÎOd”EÚ—¨•Íy ’ùC%IM´o0ÌÂíÛÏR”<ëý¬V÷*8Óú|:§ìº`1ÃC]ÊðJQB½g-Ú… ßëA‰É¼—™/¼×±ùLUi'Ó›°)äµñ pž6x-³xˆyÝœÍ9EÕÿy†L¡WRhxQ¡¹±Y·ð©k¯<†YŠá J_p=¯e>ÞÏÞ+†`§ly€"kͳÜ‹¤uL¿ƒu*Iz{Ùd…y¦´‹ù%k^>N·lÓKÅÐL;k” ®3JÆR}qÓýú(óǪ8›B_Þuôk݉·ÌüH§²9Ð p„ÒîJöÒÎÍkׯMÊ5#·–i‡«äÜ÷Éöcˆ’´…ÊRRFQoé:Ú;Àœ2ëò$µØii/#úa3³•ésåÏÔÄÙLSŽº†â]† ªu*Ã+Aaýg­ä½O3ì½^G™|õºÀ|á­ŸÖúö© Š 3O;fr8 çiãËA4t¼ïç ÚÇ®eÊ×Dî¡}<Ôv^)¡á`1á”QOÓøš‡ÓÆÿy÷ëµÇ0O1ÈNèk™g]œ×Ó¾¯ƒ/Î1ÛiU'ç¾MY'B•¤<ÅðÝäëŠáŠWôYf¯^dþl½ò$Ñ®ÐL®Í°Ç(Ó&\>J™äôÉõƒsÎ3ôøNÊëi3$݆ž^*î0€qó™²9Ï2K”qÍgÇÝAâ¬'3j1àÚ~ἕé C1(í¼’BÃC•á)-ßbòÿpÆùyãÚìÜL0ë>ýê1dÅÌVªÚÔ2+é“ +ý $eõÅùašÒžÓl;g|å¦~U AqÝ^à>C93kÌ®[1egÄóYÖ³ý(E_ѱ̰eµupžHêé;†ÍSú¾mIZ¯8÷eÊ:QÔ“´“ö]s‹à ý<½ô$­fözésùU¶7z–¢HÚi²Ó®s[b{²7'£ª9Û–z,RË¢!Kkiß´%k©G?(ì0€qó™29ϲG(;Gû~fhÐ8ëi-Ó +ÀÉæ¬\ßeMƒØÎ+%4 S†§,u_¦Ì=ϳsIÙ£toh«O¯•ᕬªö6†EÖ³à8;Çú~T’ʾ÷ (†+3(ïyoRô‡nöœÊJC”ùËÔÕঢ়’ep¦4Ÿ¢ŒÛ³I:Dÿïw\Ûœû.¹NU’†)Lž4 ïÒs¸~ñ$ÝÃî×Äb§€dÖg-åX6®«š³)h–±ŽT%ŸÍûMT…¡H(i©ŸÖú¦G)}èaÊ;úmáAä Ê2œw™~g—éçÎ)Jã4%Üx†+«WBh8è¯ ¯evtbÔ(f=úAn²’t„ҧ˾ŸÚäØ4€õ»’ÔMê%©‰œU²%¤Œ_>QÅyiŒÒ§O²Ÿ°7;ß7‘sߤ¼ Ý(ICl.+ÄŸlïN:Ͱµ/ýàUÑÓ0¥3g­swáíKvùv1=!ÕÉYyJ^eù•laöçû]$…Œ›ÏDÎÝ•;e”y”ÙÀ­Î+±=4\q÷U†×QÆe› ˜…eŠâ±‹~T†›¬$}@1Bvû®Sú‰Í¸•¤È¹ê´‘îÍì^¦Œ1>ÙCãØ£O¹m¬_f¹Ÿ¸Žœ(åe(Ó“4Liè -l„~óªØêw%Äð ¦CU^¥tά æaÊw/;£(tå¿nÎ-ú­[/šÖ±3ò#*ÃýJZVêç5†‘³=m£DLSúk8¯ôvÔÐp°˜2¼1©×«”yù8%äÿ“¤¬g)ʤÍx;Êp“•¤³”vÝéY¿aŠ,:Mû×§ÈþPš¨$5‘3’ûßË|cåRò|f)ãÖ¡äø0ý"°²þ½4"ç>J>™š¨$ÕÁy­å!DÎýÖÎ`3ÕÞM %œ#çÈyåpÖST†;•¤´Âpˆbš¥¼+ƒ¦04QIj"g•†)2`7K¶L,Q¢T}÷‘ó +N¾›¨$ÕÁY n¡'2ç~kg°¹ÂsCI#çÈ9r^9œõ•a7¢’ä‡~W"çfpÖÓZJ„Öaú/ÛR8KYÂ{;{÷ ÍȹÓ„'F¼ à&í·o<à_| )ˆQ¯¸Cûí€ÝþµâûÖÁyÀÝnp=€U®J’Ž•Ä9ëÞ½hgðºqoøÀ#~]òý†<à ¤Ûù<€»ü¬äû¹ð €g ýNÇû^€<ƒË]”?`O’®5Î} +àN¿í¢ü"ˆœÛˆœ‹#rN£WœZz=κé¸à+ÈÜvò¬V¸Àu®É¹ÏÛ9ñË.ë[&†!så7”TæEoxÀoJ*³*¬…Ì·Bä—+®ýò~¼•üý¡ôÚUƒÈ¹œu Aƨë¬A[~¼ +ò¾^pÀ€Ï|S{ ËG9WŽÐL%©nÎ#¾÷!-À­dÎýÐÎ +Mž7BÚ|ƒåÜ)ïøÂÿw9e AÐIÈ$}3:'éK¡ò t÷<»AäœFä9Û0(œuDe8*IMS"çfpŽˆ(¡…&*IUs^Ởÿ•ʹÛh®ðÜDïYäœÈ9r4Î6De8*IŠ€f*Ier^ F&!¡ÿ¶2WçAig ÙÂs½g‘s9ˆœûM䜅¨ GDDDD4Ý€f*IÝr^<šÄyÛY¡éÂs½g‘s䜇Èyp8GDDDDDDhèÖ ÐD%)r.ýÎYGÓ…ç&zÏ"çÈ9r^9œ#"""""² :š¨$EÎÍà¬# +Ï…* :š¨$EÎÍàQÖC¢oo„|2üZˆœ}5d¹íˆ¼}*IŸ8Ù§km@39ׂª u ‰ +Cä¼r9o„,½½î=¸\¸àcȆÞoø¾”šU‡&r®Ñ±ò•$ šÂ9àpÞÙxû¦’˽àȧ¼û-·‰œ{†hˆˆˆˆˆˆˆXéˆÊ°?¢’Ô¿ +Cä\ú‘ó&H}nÎ826}ùêÖyȾZ ãÙU¥¸k ÏëúŒr.B6ßÞ‹ÞoMäÜsD@DDDDDDÄJDT†»GT’úCaˆœ;±’8·< ù¶¹©öÈײÞð‹ÀrW¸ 2Þb9ÿyrîWå–&rîD@DD„šâ=Ó9GΑó`rŽÊpQIÊG?+ ‘s+‘ó„“ùyo¸\Ò}pdœ×ñ€•pº4s_!""± 2hm@[x¾éÁåDÐú"IŸB„çß×ZÓîÐ$ï™Bä\ ‘sä܈ʰ *IÝݧ_†È¹•Êy „ÓÕÚog ïõO+ºç8düºÓøýMw£œçëB9÷ª4¬tƒ MQ u4¥7A‰n„çKæ BÙ[èß6o’÷L!r.‘s¡ œ£2ܮϓˆJRèµÂ9 V2çíÉ}®Ô~{ÀÔ#Þ1æê÷ÿÀ¨Î¸ÛDÎ}‰² Mð0˜h’b¨Ð”vnA„¿½£N™¸`_Rv¯…g…&yÏ"çNDΑó qŽÊpT’ªDT’‘s¹Øà=´ –—<àÇÜË…1Ès¾Qûí=ï²ßë&rî_,#m'y„åc‘ä³$ÇJªgY©Eòv’ŸUÀy‰äË}ȹií¼ÅÁu™ä'$_$y/É­$7’×Òf’;H>NòÉÓe-‘|šäP¹¶H>•ð2qšäóÉó-w5É]$?ÈàþÉM‘sä9GÎÓ’g-§*¼ç8eL7ñåÙWÉw;e¾ÔqäHMÏûvËý? 9\Ñý¶1Ý—IÞ_W=Qæ|ﲚöŽœW>çÍL¿G‹”w«n¾* ³s\#r^Ù©Û6‘<Ìl,’œ¥(JR&åí$'( ?Eršä ÉãŽr–(M/•$•š¤6±‡)Æ›ð¤V1”4rŽœ«å¬ y‡™oÑóg¶ Ÿ9oa{¼óÆÖ±m”>ààPg_ex˜¢\‰Ps¥-Ól÷~P†{‘z¥$µ(NsÞ&Å™ð”¥&ÜleE%)rMcL÷×#¬Gž/’¶mb,n:çI!™›èIjšbØÄvÞÊtôÁ"É5qÕÓ(;£L2†’FΑsUœGÙ¹'Éœ{Ìù]F€~ä¼…ãëDÎ=f-Ï(k\ªš³2Üb[_dyFýYÛÚ=z U+I*Ü߆7(΄"÷¾=©»‰¬eu*Iãô“ÁƘ=éiÄó9­Nò©úôJ1¬Zit•_ç­Œ%’k+æÔmÒë»ÌbïU9LòÍØDORÓÃ&¶óf’ç´{,R uóUÉæEzµÄò›J9GζdSþ]Ê|ÞuY‚M?q¶´}êbã|ÙJ^Uœ}•á-LÏceô(Û²¼è1T¡$­fg¸¿Â',ÇÐ3ÄìÈ‚Óì4®éõ­BIÒϹŒ“ÓZ¾YG¾ ƒSV¾q#ŸÎ«jÎfÚÌê"P×S –!†ß"œ×1=& ‚wy„iùøåÈye%ŸLy†­%å3¶{‘äQÊ]öf +uyUš¤ú´s/8WÙΫIÎke/³w›-ê©ÅÎ¥÷–TvÓBI#çÈÙ–Š*ÿ®ëOSž~弃KÊB”rçÃtÊäª ßcÔu‘Åwˆ·)ÿ.…!z «Q’Zìt œfûËCÓ”¯+™ÇG)óì4Űƒä~v”‰ªV’¦µsGå<¯åûÀ‘o“Á'kÌÛjäÓßµºC½ÍË2ôŒ$õÖëá?»åü¬ví"»‹h¨8Vÿ[¦ÿY6ç)ú?[ìÎXÔ çJy\†ìŒ³0Ër'¯*½*MT ›è1£"óšMù?Ä|aT¯oôú%…acò\Ô'ƒw÷T8BÿwúÚ7!>DQøUf–ÑgZ»¦l%I7dcv¿›Õò¹žûjƒc–Ü£¿;'kæ¬§í´£èR%ªÕÖgŽæ\[”s‹iãå³êm¶‹ï¼~o`~30ýnøÎerVÆ-×Ò3=)Ã]Ýœ.åeÈò0L±3Dêʤ÷tò×4”íE¯Ê«Ò4ÅÐÕÎýªhç{™F? +W¦Qæ3ß{Âå=»‡ò¾Î$ÇYeÜ®ås}‘b–o&‡ŸžO­oŒ›ÏÔǹê}=\å÷‚³M™;ÍâÆéP#@/8—¥ü»8»ŒepîF~ܸÈüf0ò¸š}¿WÃqЬµ•ŽW›’ç4xïiãYW¡$íÒ8ºpœùŸf6#EL|¶Gq,£Œ*•$óë6ï÷°qÿ<ÇnÍR’ôè˃5s6SÖÞ ÊäÛ?·1{ïˆW™?ålFSoLƒfÞ8hŽýEb}ÙMž‘¤lÎÏåäE?m䯓óÀ¥Î¦äN¦;Õ‹ÌײÓ^¦rY¶W¥iŠ¡«û)•ÙΦ`v˜ý«šƒèSË™ÑÊ0½gº 9ë(ã)Ï|F³ÚÉ EÔ5½¾qó™j8«=Ngù›šn¦(¥‡ûŒ³9¾»”ußdSˆ]xÝœÍ5Óex3L΋te»åÜ2} wɽP Ç™½dH;Ÿ£¼¡ònκ¡jºç"Ê¿J6…Ø7”^¥!£Œ]=àâ<弚Òôý=Šp¸”ubF#®{Žh¿‡n§ üE-B>õ-êUišbèjçºÓúäÙÍÔ·H;1-ù( z¿0ácMµ…+œcþr†v·–*Ï{æ;¡éϹ§^ß,ï‰Þ?±œŸÖÎ×µù̽€^¯©€ûŽ%¼”²³H™x|ß«º8g…Îβ˜qv(©»MÙ²µm¯Ûù~J[OQÆë"Öý%ÚeŠ"˜l¤{iL/9k<·SÞù¢œ7QæþÍl‡aWɹˆ2<Ìô{lb‰ù +¼ih1ñý„èº<†úÒÅ,ä9 +|<ê>NŸ:”¤ º*øôIf=êS¥’4ÊôØzšò>ogçRÛ û‚饤˔9}‚é¾Gºeœ^(†êyØöËÊ?eÉ;ÍbήPÎ#Æ}'ï×ò¯RF€YíÚ<¹·lÎE"ÇC8«9ÕŸC8d²ý˜åaÐ'âP¯…Júd8Q"‘n½*MT ûÁKºš;±ºÖ¡wÛÎÓÚµ‹Ì_˜åÒá˜l»›˜g¾0ª‡ßûÔ[¿^1×>lɳŨsÞ¤‡ÛÍfÔ묖ÇÖ÷êÞ|&Ë«@vÿ>ûNÚý°®r™ò^ùw±stH9u·óÖ ÞoÐÿ½ÚÎζ^¦,‡«2Lº›ÐpsYÅÙ·mœÏÒß@V”seØ µ!OpŸ-¡ °eظ³pÂQ†éÎÂŒG}êP’|#Î:ʸ߳ Ÿ³Ï”­$=Ì|äEµ˜Ï/oùÃIæ‰Ur6S‹bdµmàwÎqÝíü>aXøΛ{†,_*Cù×ëaŽß!F}L­‘så_¥Mœ×2­Lä<Éöc–‡aFû}¼à ×ieø(oC”?Eé®Íi­ìP¯Š~mCW;û¶ãNÊÀZ$òE_WªÜ‰U¿Ÿðìò")¸„RÓ{•…<Éô¸Œ$®ûgyÏtïÑ vN +ïjç]!•zÛê0YSÆù¬I¸®5†>ﳫZÌÞ\Há$ý†ûe]å9º×²od:"LÇa†mNZçMt{u2¿¶ç”‘µSx¯8¯¦»o~Æü±Êq=é·Fº(ç"CW(¼‚kÜ÷¸ž´oŽf{ǪV†'<ëKG;]i˜õ¨X’ä±ðªãú1ºßeßþ]µ’ô¢£Ž¾›Sêi³§é V—b¸•öqL^ódßÍ´ËÜÊP";‡pžÒòž¸‡ù>v£ü«dsRL{^«ËHóqž0êÖòïâ<¥W²¯z·t9-„ó@&ó—‡A½|Y!÷S<oÐmUSkO?säQ¡ñ¶Áé3Ú—tãUišbØ'风Ëôß lofB•“'€mç ã~>ë}°ä¸þQÏ2|ž¿îÁ;â‘ô÷ž™ýq†ív0=>aÎCLºÇÙö|mdÚ‚ïRêZcè#HºBÙ}ßç)ºôÓºÊyÇ5Ó–ü'Yl/º8››ÁÙàZÞböë,ø,«‹³7|Úq½ZéÂ’gýC9Q†‡<ø’2ßd•1áYƬG}Àê•a_o¸¹×ŠžòvÔWðõ†×¡$eyvõ²òúØtNŸÑ_¶©CIRËNŽSæä¢{7­gg×ú/ªšó8³—·bø>.S´ágé/?‡p~\Ëë+·é¯_•¡ü«¤+ÄŸÐßcÊ8UpÛû]”¡üÛ8ëÁõÉoJU{_¨~Ây Ó"IWjÿ¿¢_ŸüýxÀKnp€l¶äÓ¯¿.ãü:ÇÜ`UòÛ)’ã ÞNî©ã÷Éï +»3Ê7q3€«µÿ_ó¸fƒGž žÓqCÎùßxOûg¹“Ènç,ŒøÀ-ÆïWx À›Z9׿š”q“qîc×ðCN=жóÚñ§¾ÌÉ?äYîÏ…âuíø&ÈóÌävü¡#ߘÓþß à €ÓžÓ~?àûþàIíÿë|`òn_¥{ÀQÎÚï=æ“=‹³Ž¬±H‡ë]4ûs|Æ9ÔÃYÇo<y/ºÁ›H¿›¾˜CõœÇ?žÀŽs7¸Æ£Œ»=òÌ¡žvÞí‘ÇUßÛ~_mX÷sS˜Cgó½ôéŸyó‡ÂEÏ|.\òÌwL;Îëƒ×kÇg|ïQþçIÞ<¸ú̧ðãó‘GøB;^““÷ZíxÁ³|x"ó\°œûÒ¿¾É)ãÿØ ;÷cì¶ IDAT òÎeÏú|¥¯ÉÉ[”ó¿øïþ Iàÿ¿Ž&.¢sL»ùÏM¡jÎWBÆ _@t¿D¾gâ§wì¤ÛüjtʶYá¬Ë€!cÎ÷Žï'p­ _BÞ‹9Èsõ_€Î÷Ã%ëå ˆðDü÷Àk³ 8¿Ñ+îJþ>™ü}&ù»;ùÂy aîÒŽ?ðµg9¦¤mPu•åܤc^ Ô¼˜à¿@m5‰=à)ãú}Úñ ¡/MT ‹´óspvwÂm€¸Írþ<ä…ü3¿ñ¨ƒÂ>íØ·õÁÝGxþ~“Ô±‚çtØŒj&>Dz0ÌÉ?‚´=—“ÿnˆ‚¯pÒ‚ÁHû +Ø?(„ +«ÐÙöÂ=±ý€´ÐŸg8 å ø¿Ïu¡Î:†LC„ó^.…à¼å·G }yk`êàìcäÜÊs:®ÎÏR[ßÎSÞ÷³ñ}n×çg æ\Dü .EöK¾ K]¸„¶€kÃïïü8?gP’ÿé£@êöD¦Ûåð“2<ƒç JןCž‹/êR’ÊÄè”Goð°çõUsþ Úýò<¤7ø™çõ6|Q4¯GÛvÒþ>(ªÚ U.|1r”¥ü+| à/Ö·Œÿ}çÂPÎðÏ(OùWøÀß m(»Ò§Tø D~Q£ _Î[€‚¯‡ave>KRƒ€mx¢t\€(l?JŽ×ðKÈÀ¬&¡ÇlÔ®ŸC¸W¥iŠ¡™Ç‡ó0ÒFƒ,øF (¼¿ˆ skçÕH{_}ûöKyö9ν´ d÷ðóš~´`›çuõž}™øç,羂¼'¿Ì)ÃÄÝ66'LeÜûG2B¼gE=†ymdÖÃÄÇ×ç•‘•¯ +Î +» ÜŸDz ¿é×7;®ýgÈXü…ñûu÷k?üŒ‘ +Us¶,lp ¦¾Bkžá¢}Û§..!Í÷¹ùx 0ÎE½¤Ï圿·ÂüòÝ3ð›€z”á#[Á¿™¿óÆïG s– § ïûwžõ©KID‘ù1DÀÿ{Hd@¨Gü·yó¯“2Š(˜ ÆÿU*Ie`-ÒÑ?z›í…DãæaÁø¿ +Ρí€ú1ŠG;˜øÀÿ„ôëàõ°`üïâ¬`¯ÌÌ5x8å87(œ/AÆF½?]@öœéâ<Ð y†…ä¯9iN!ÈŠ•"f^3Šö`ôd²Ú’ÜW…¸í‡L@&Uu¬êah¢bXÄ“t5ìF®çm$Ÿ„„eëmç¢JÒ H/±0ñdBÊÂeHŸÎšì”`æ+TéÂs^8yïÙo!–á aP»!Æ•ë®üÂÿï ÷]IywB&Ìy–â=+ê1ÌS÷Ò‡9ØÇ@§ ýÅUs^à$zÈ^æ ïÓÿF¾‡àg~ø:ßï»!cÜ=õªçü9ü”Ù9ǹÐ;ÏpѾícœrÍ{sž÷©‚sQeøßý¾^‚DåyÕA6§óqì÷žõ©KþÈØý +¤Ýæ cÛøyÔ”ÇñHôÖDVy,)#$JoÁø?*IiôgÝû";ª1rŠ9gªàüÄ(ã+'…âgH’¢pqö5 ö;Ì÷×e„ÎÇ ç{!ÑrÛ!²’³C8$t@ž’¤&ÃŒçö ­Ð^‚º6kô8Ú³ü›!ƒÑEÈÀ3 Q¾ô0ä»!“Ñe´-ôæº:¼gƒ¬vã1̃ëÅ2Á˜÷Û4Þ@g¿r¡h;Ÿ‡ÿs½ †ž€dNADŸ¨ˆ_B•÷‘?„ôùÿô¬ žóBs‹zÏà×µr?ðst?ð}Ê +DC&ò:ÖUšËL¼Y{™ÕO²¼  }ÅwùDÕœ/¢óù +Âá/ íï‹Ë±n Ä0ª÷ñ«PͺʢaÒ®h@ÚÉ•çä Åߢš0é¢}û ¸yÞð_#ßpõ!üDZÎ:B•ῃôç9Èx½áq3ü„ý ÆÏ‡ sÍ)HÝ_ƒ¼;!a¹ ÆÿU*ÿ†xÂÿ"Iÿ¥œ +ïø«äú¿„¬1ïVùŠJR½æ<Š´üò +€_!½t÷f;sÊ$Îe!„³>öúìÓ¯ÐÇ¥¼vÎ/@dêW 2‘ÒéžHþ†pHè€<ƒ. ?fœû€ÿ±®ð¿,×í tzÈ•B£î}ìëÕš}¿Æ8âah¢bXÔ3ìþ2—sþ— lv£SYº Âãqûaí¬Ÿ÷ ÷ÖqÀ?ø¯ÿZÈž?‚¿bü%Dº*©Ë•þd A]ë*û u­«ü+ˆgP_vó)¤¯þÇõ_BÞç×О,.@”ŽP…¡jÎ_£Åt2f]ü‹â; 1è©0âªÖUmçç™u +úÛœ2Bv˜ô·yÁwmeœéök”¡9oÚì(Oá·é¡Bçn•áw Jìøcˆ\Ét²ÔåO“2þ$D<¯ä!*Ãi ŠÂ‡AR’C;ªó"ÚQp?EZŽÛ ÿw´ß9—…Î ÚqÑ5äÃhèÍÕC÷-Z\·))«ôºçé ×õ¾ƒ8%÷@¢‘•¤t¯Î ]¨Èó0üD8Þy`o¡SIuy¸v ½F|±ïºI%Èdm¤¢$éç‹*†ÿ„ö&t¾kˆ”b8 ³ÿþ¡:êð$=wô%ä{Ø~ +YÞðä¥SmiÛ(. !œõå ݬ· m_ߣXû*èB|ÈF’½ZcXŒÿ¯…Ÿ^„óO’Tß@„¿î¢  Î{µ¿e†Vª1m¤Þݬ«,›óeÈÒ†}¥õ:È;õÄ àÒý„ßíeMRUFȳ\0þ¯ªoÿ+d)À}hG~| 1VùÜï{ˆÁr'd3×kÑ^¢ö&Â"„Œÿ]œ£2<¸¨[Iê Š’4„ô×A^Gzœ~ í¥C×Aƹ¬%$ƒÂ¹L„pÖåÔ+!‘¾âÄàüÒïÓHý4çúˆÜ~7ÒK=^‚(¼!²¨î8ÌÓ•ºáì‹1¤eàS(©ú²#ÂB8$®È8Îò0ì:W@&ÿ;àç©Þ‰önõ`ÿô—zÀk æDÈ07Taj­»¹QžÍÃÕ1š¨õ$ý3Ú»íÚî7¼+j'Ö× †…Û mð„ë" !í¬c…J3jÂ5°öÃÃ*Ðïë*«@•ë*«B7»4Õ¶óÏ“Ô ÞAw6TÉùktßÞÿ–¤2áâ•áÁE]JR?¡ß”¤!´ß›3h;èîFºOš{àü⤛Lþ߃l@¿qn¡Ý÷Š:ÔòÂÙ¶ÔÙw‡û}°GW]“œ[…l‡Å¤ ͈àU§ÛMˆ7ßç3©çmNÞ ç,l‚è›·@œÐ¶9ð ˆáê}ˆ~ê»ä2 “ڱφìó+ +YÊð/ÑV¯„<è‘ý¶õµÝoBOµm3™ÑVHtÌÛ’ß ûL’FÐþž£š¸`üï;‰®4ÅСF¿…´É›CÐDy÷ÝdÈ}'Ö‡à?!,ÿû®«´-+˜›2vïîwÄ5†‘³‰ÈypÂyÁqÝ ¡[exÑ­’4ˆ˜ÔŽ‹(IÝb€Gp"/,$é"€³>@ÚÉ2ûç÷iÇ“È;ŸÔŽ{ÁyiÎ—Ðæ|À"€O<ùSÈ_Zõ²÷ÍzîåÀ7ÃÑ«cé½Åò6–-ÊÙD ò¥¢£IyO@ Yðë!‘-oBÆÙ§Q|ü å<Ð ¾†Ÿ@Œ—ÐÞ…ÿä%Û`À' /‡Z¯6ÂÊÚLë{´×¥>iø_BBÿÀŸ@<ÆWB¬;W£Î₯W¥)Ša·ž¤ÿ€¬—þsÈúÊ¿Cø&C6ôËN¬»Ìx¹‹º„bSrÏrò™Ñ0.ëm½g‘óà"rv£‰œ£2Ü e¸,…AÇ0dÙéËÙô,&i"Ÿ¾ Q7f”z¿^(I@[IRN²;`7˜] ñ ®Ñ~{Ý’Hïs² +ö–{ÉyDfZ€›ó•½yBÛ™8 Y_ECýYÞê‘¿…ÎYŸƒ´¾ùø*Ø¿`´ éqã„ÿ#Hë{ ²gîB;røü¾–ÊÙÄdÜxù›|Ûp5d™„ÚW,ÔðS„óÀA7„(I?†t0}'ö!«ÝOäèÖ§ –›U÷AdS]Fº"ŸÞQ8à~„o°¦Ð %i3Dñ/ª$ÙŸšþÒ‘¥6or/8op8)g²Àõ×BôŒH{סê_Q¹²¡_Þ=ôqòÈò­ÿ„èVúØwBt#…„ŸŽ=%¼?Bçå>KnõH„9ø…Ö‡rVhxò\¯7Î]„´ûƒÏ¤–îƒ,'6甫 Æ”9H„Œ/Šp8è€PÃ/!»ãÞ + úm¥äbòÿ+Æùsø}Cöû$ÿ\òÿŽ4é{“º]„4¸Íc\ôÓ eEŒA–ýÁùÒ–çy‡ |ŠO8:BÃ~ò$ x +2ùÎC¾M¾#97àÕä÷.]!ig}PÈžÕຠ+þŸ0ë·÷ÎB %u#rŽœ ýƹ )GuÆÏÎe*÷CæÝˆ x7ìkI•b¸"Ã…|'ºhèp/•á^¡%ÉÄ(DæRQ§«ÜÙ;p=$št~ÚÞu+ICk6ÅÿLRöGÆnˆø%¤eŒ3po|š··T/8 +»!ðcˆ7|Dn›„(ÇABÂMñ*Èó˜°Ö³@1οFz¬{(+£å‘VÒ@ç>\¯¡½à1¤5ï!½oË mô¹ "kga-Òã®ësÉ:B9•1‡ôÆà€ôÓG òï_B6^í½|~‰LÿkÈ×Z&Ñù™ö›!}g+òQ”óà¤J»ØÆ¢ö{/R‹äÉÃ$—µz&ù2ɵŽkïÕò–sŸ{´¼g»¬óÉC Çi’O‘\ÝŽ§´òNääí—vn‘œÍx&ÛI·üþ Éa†·óV£œaGÞVò\HòžÃ:­^æä}ZËûnNÞ–ÁyGÅ<¦H¤¼SÝôe3Õ8<Õgœ«J‘sýœ‡)cãË”qæœq”þý0ÝóÏ q^KsÞ%y’XLêø"ÉÛIÕÌI…¼¹Í–¶÷,Šùä„Þ_—1é÷ 7÷ÞR྽L³ZÝóæ)=Ю;pÝNv¾¯ +§)óøÃ”9J¥§(ïóbÆu‡IŽ{Þ­qí® +9Ó.g.“ÜO‘C󞕹œûè²÷ösþÀÂYÉΣe´(ïïK9‹~e·ó£ÚuKì~9hÔe)y&¯q˵ÃÉï*¹Æ¤ýZygsòvÃy”2ÿ2Eæ-:ïlÉ(óÞœëºá^?x}g½OÒ>yò°OjQŒú:N3»ïtËy ’ù t˜†±¤QêJE­.!†PÅÐLëi÷œtƒ.T†(†½ð ¿AtËLÁçóÃÛL TÓ9yõÉïé’Ÿ‡žFØ4OæäÕ#H?Áª[ïYHº2Q›;ÝXº‹xϺå<Ïr1xÿ•Ày*ðþ½à¼ŽÅ"¶Lœ (ƒÐ·7²S˜.‚Ť.¡óTÎ`¸2Ö¶(í¢°ß’gQ§Ùr6ÓÌrð­ÃþtÑ<ËjÃÇûmë’ÃfÚõeJÄK7e·˜Cϲ˜ƒ4„³rê}Âò“SÉsY¤èmUr˜dþàò0Œ³^!TÄâêií^‚eŠEöQÊ„²‰ép›ÍAàEãÞ:lƒrV*¢öÊ3|Žò’¯fqÀ!kgÝSp$'ïj¶=‚‹” ±Šg£?ƒxŠÅÚÙ|Nyƒ¤>z„åJúZ¼eúèB‰o?ë%aZ?T°œ:×êižåb:àÞ½â|˜íÈ+]ø[fv„–~¨Ÿ ‰*ª“ó³÷y—"„æ%k)–-üò,ý¢Èêæl[?»D}xµ?‚©X«r|¥n8‡(ÃúÒ0Ræš2BIW³3bd™Ùóm?z «Lu+IúšáÓÌîÇëiç—(}%«Žjy§3òôBIj%õéfŸ!ÚßeLÇD¯8?ÎjCלU¦bhÊ¡Eå£*Ó–’ëØDΑÌò< ú ñ.Ë]+«OEþ¬Q¿"ÓÇzf +3ì~ã³-ì4*øxxŠ(†½ð odzÀ?Ìðu·dç„îÛÎCL+7y÷1#ÿ_ïkkk{^ưQ—§ÃLu…’ŽQŒ3¦bTt²¬k¡Çx’ÖÊ9Ét$žtƒÔ²q.d\èg=ÍhåÌ;ò™¼¢ý¦—› ‘2 ^MCL¯ú2ó uq^G{ÔÂ~÷<ÝÎÎyŠ£HUœÁ0/©’%>ë‚gVšÖêµÆ¶Ÿ=†U¥^(I£#V–̶ƒÙ{9(|Æì%!;™Ý¯]I²­­×±ÌÎ¥•ƒÎ¹HªB1|Ú(3oì¬3­cz|ÏÚH0r^Éö£ËÃð¬v.oçõÔ2 ˆµ¼¨‡!T1ÜeÜ'oçö4Æ´zœn¥³ŰnÏð0Óë)g™ŽDðÁìΓ¤{‡N3_Õ½¤xÒºÀv1Ýf§™µ¡ ýËu¨+”tÚxVK,¾­Î5†®4¥•qÖ‘Oÿ"Åü€sžöäü®–/oÿŠ~àl†õ.±ûM’@1˜ëÄ—˜ýŽÖÉÙ¶ù‘+Ba3eÌ›f~˜´iZd¶1¢ oxˆ2<Ìr6!ÍJ;è`£Ç°û2»U¶Ó½™°Žy†mö»R”¤E9ÈvôÖg‡„i])œCRUœMa¿ð^ÇôžË ß-r dûÑåa0w/)™Yñ^uãaQ uÝ´–‘Ƙޤťàv£ÖåMîezî§ +¾›R£ ¾Ý´ó8ÓBAžñ¦ÅÎðÙ³,¶Ôc=ÓJ“ºä…u®fº?¼x_°žPÒi ·"Ʊ^¬1ÌJ¦`›õ~éŠVÈòŒ~ä|Q†m\h1­„øëæ¬G„®]÷á¢dz ±usÖǯÃÌö”n£=:B-ÈŠbQëg]BS™+EeXЂ³Jýª$™?³loþµ•i£Ïut¾QIŠœ»M¶ˆ´"€—•Ö³3Z¬LçfS9÷u²ý˜ça˜eµÙH¥n= ãôS ·iyްºŽ{»q[žnÃ^y†—™nŸqæ‡é‘ŽW†'Ißoáó&æšvýÚW)^âõL÷…EqÚF1e9î÷¨¯®X,³ØÆ?u„’Ž%ÏbÖà"\½Û|Æ–VuÉ2Æé“H(ß~ãlFØL[ò˜Š˜-O?r¥x»ªú´ç£¬Ç3ê šÙJ·©\Ú0Ïì“ë\?k«o?( *õ«2\%ß~V’Ôõ¶1y˜"ó„Œ×QIŠœËL#ìŒ;Êú¿øñ ;—ãúȦ‘󀧬.ƒ©„•‰ef Y©,ƒb¨{ŸËØXÈ•tϳíå(C1ì•gØ ßA7žbyí<Îεýy׌Òþ9¨¢X¦ß`c¾kÝ|±¡NGÆ|Àuý¸ÆPïsXÎo6î±=°ü~䬬N³ó=37- õ¦÷#çªS?r¾Ÿþ8Çð}nªð†Ge¸¨$Õ—¢’9W‘F)N>gYÏôÊ ®c™aËj#çNY'ò< ÓÆ\dû“I¾éAvz~‹LäeyÆ™¯*{¦.à™PYŠažáqJ¨¨ù›už¡jó½2=IfY>kÕºÒnq’~ß±fºmN²û&ëðž™›=ú†Ä÷ëCSI2…zÝPwšay¿rž2®U;·•é±'tÉC¿r®2õ+çÛFíåäzµL`+Û‘O‹ Wf«ÜX)*ÃmD%©Ú•¤È¹ê{[îMŠlQæR5•†(N8sÃæs¬ïK#MäÜwÉuÒåah±s=óIJ˜¶Ï·²ós[0|/ÛÃàR ×k¿×e-RÏH7F”­Öé=Ó_ø%ãÜZvF–¼Aée·³éEZ¤ÿ 3ÁbË`Î2ìó=ŒëËð&Ué=›`çR‰³ô{®ý¼ÆpˆiEæ4eœÛÈÎåB6=ìgÎ-v¶åAJ¸¬ëу̹ª4œŸ¥=Œ˜ÒÇmß@ïg•¢2ÜFT’Ê¿_?( ‘s38«dKH‘w·±{çE=ÉN|ÂÞì|ßDÎ}“ò2¸< Cìü)–ðÇ)J›ò&P^Þ‡i_}˜ááÜUx\Š¡ +S_*P×¢I…ù×~«B1¬Ã{¶–i/ÉIKž™äÜ2Û늫ò$™›-žfØò“uI?0ÊQX¦(Q3”¾ÒgÌHƒ¼/S„¤ª¼gSZyç(Ê¢ÏZëAXc˜·D…å÷¼A༙ùK½Þ¨Ï p.;EÎÕpÖ¹Ge¸¨$­L…!rngPÞ_ÛžSLêú2eŒñ‰Ô¢ÌãRœV¶ù|™"_öj¾h*ç¾Hyò< -¦×¢Á~†¸JC–b¸¢ÌM—tŸ´)¹çLòUŠa•Þ³uì|—hÖQ© íÿ*=IÛØùI¾¢{; ³ýí÷±‚e 1ýE +²XdL^ªÂ{¶…2膠ƒ´ÆðAf+Ä!ß$Î[Ø)ô+¨èœ•ƹ¬9WËY¥¨ w"*I+Oaˆœ›ÁÉýï¥ý½Ó±”<ŸYÊx(9>ÌίnÙpÅö‹œWHòÉäãaØÂðMÒNPv»­t†2Ã2RŠaUž¤ ­¼eú¿€uy’¶1-D-³œïƒyþúzrR·ª&£&zϺ弙s–íÇéÝ1¨œG)›p¡¼è?n*ç&öíA䬧¨ w"*I+Kaˆœ›ÁY¥aŠµÌ ¨—(ÅÐÍÖ#ç˜|3úzÆ)ñavZÈ)åÓ,n™¯ÓÃÐDŰ +OÒFŠ!aý#=êö$m·Üïù€úv›6±sOŒC¬~©I½g‘sä9¯ÎzŠÊ°QIòC¿+ ‘s38ëi-ÛºUÞÒ<g)‘Ö·³>™6r€ô$á‰Qo¸Iûí[ø—ŒkZ®Mò}ï{£Œ{¿àí·Kvø×.ÊÍÃvoX¥ýö„óÞWaSrÿ5Úoï¸Ý=OŠ´s™÷îE;À6o¸Jûí {ü¢¢{xÀ#®Ð~ÀÝ.Wt_xé~H_{À‡]Öe ò÷@ÆŸBúóo»(¿"ç6"ç∜Óèg…¤^O ³n:.ø +2·‡<«Uqø:×äÜçmÈœøe—õ-ùr€J*ó"d>zÀoJ*³*¬p€[!òËîì)| y?ÞJþÖ!ߕȹœu AÆ¨ë º’Y¯‚¼¯œ°àsßÔ^ÃòÑDΕ#ÄÈó:Ò + Å#~]R½†<™ÌuÅì‚ôßå”5@'!“ôÍ蜤/A„Ê'PŸ¡ÃDäœFä9Û0(œuDe8*IMS"çfpŽˆ(¡…¦yšª6­`5äù?d9÷!€}þ¿/Pö&§=®6Î}Ø~U Ü²ÐDïYäœÈ9r4Î6De8*IŠ€æyšª6­¶BŒ6Þ— ŠOƒN§¥ö¡¸ IDAT ‚”µÁù:7BO›®øîEuË:BÑDïYä\"çþC9g!*ÃG7 ™†&*†Mlg…]ÞfôG·¸à5H]rÙe¢‰Þ³È9rÎCä<8œ#""""""4tkPh¢‡¡‰ŠaÛYa+Dp¾ ù† >‚Я£X´H/ÑDïYä9GÎ+‡sDDDDDDãQ–@GÓ< MU ›ÖÎ:6A8oHÒµ¥Wjy¾…ϧ ÂóÇæ0m±Q…@GÓ< MU ›ÖÎõc‼‰­6+WÆ×Ñ;çb+©“J×AôÁ«Ð¹Ï›Â·hë‡ åÔŸ'©’ýЪ6DDDDDDDDDD 2¦Ü‡î"=û !ÊÒ“¾«éžãÉßSðSlÆ ¦g0xÑ¢Ý` +²Éö ;ËF òyò`ßD\Çdsõº6Pß ‰¿b”¸ÒÝ!Nâ9È>i¥í‘ !˜€ì t+€—üSë²" ¿ù"Ó/J.?€»K.³Ÿ°iDz7`^ùêÓ-°ox}²üõmˆ²{)É{G’ßÜcë $jöýäš¼/O *¶B¾¬uúo/°^aÄPu]À5 ýºìñ@a d ìv xŽA6¢]Ä¢ """""""¢÷‚’WC”~\.· "€Þlü~€wê¯àÄÛ§p ²Ió”PöÃMŠ>‡„ê®èžÊSÍËð8ï‚|ÑiD ûbd8¯å¹.9¯6”V_ËR¡ÜJÙÿB;wÄ(päy/¹O¯”äµózÈs\éé>y¾ ð{¾³ÎYv…ë F½› +^ +ÒÏÊŒpÙàt¿úHÿ¤?_ C™¤¯  ! """"""""z‡]ðrsCÝóOç^ô‡'ð)ˆÂe†ÞƒlêÛ‹(€Ä q:=ÌïA¾ZTÔS<Q VA”º»PŽQ¡_0é_ʘó€¿î¢¼õI7AžÛ3Éÿ.eu’ÿÈsþò)íßæÜk €G íþ +ÄàSW¸ü(„×mÚojí¶Rà®AÛ˜¡ã<Úë»ç ÆÝз¢NøyyUHLA¢‹²Âé?‡<¿¯ ïç¼iœÜ àK¨Ï¤¯ÝéÈsb¸º öö×qÒïõ±}bHÚá¡–dá+È’ˆŸåÜ«Ñ1Ș€ Wø‡×¥L¬C{à¿2!¨IPyNAÿcA¢®5œƒŒq¤7f½òŒoL~ÿ2™®ÔÐRÆ ýìz´ûÜ5»_ÖÞ¡êRF!›UÝ¢ýv*ù«+³— ÊTBl A|]á¹”üö €_÷¢Rl…(…·j¿ìE€ï‡( HÊýQr¼¢hdmèeÃyÈó2ë1Žz÷8ñ¨ªpÿÈLòÉã$ß%¹­êš†˜ÆhÔ©›´ŽäÓüÿÙ{û;«5_ð׳Ê¡„ +”¡„ˆ—â‡8ÄK¼”M¼Ä!^b‡8$CÙÄK¼Ä&6zÑA›F›Øä4±‰6:l/±‰MÒÄClâ!i*‡ØÄ&6±‰M<Ħrˆ‡²©*‡òP9T¿ùãYϬç]{½ŸûÝ»v<ûUûýXïú^Ïz¾9Ëj8Or/ɱ(Ë ÑÉWI^+QÈwÝ4FrÉ$_&ùÉÓ”þ¶”R‹+ÏXÝOÒK €uÓ=¢Áp'D +y"íþ"ù"Y»]%ü¿‹e^I¨¿dž©Ø‚IˆyâÑSßÄí¥EoBLî÷àöÔÜ®‡HöŸÈ{° TBþ&nÏú¨[ uq¢M¸¢ýÊŠ ˆ©ïßö4g½ÁdíYcþ®hžV¥½”/üoõd-­á*$}_7C´+wAL>C²_Âû¤?€™”‚Q—·Ç ZÔ'×JÅp2æ¿vï§ùû7!AÏ4 Úk诩}ïÈøøµû­‘¹wAÊq„ª; \ˆSÛ.O"i; +Ñ ?ã~ßrù,£AmA4‘€Œ£›vÄ"àÓi= +é§w@Æ£ú…¯‚¬ËÇK¤u'Dùʥ¡ãÞ†¬ƒŸCæÿ«Á{w@¬!Þ€ð£÷AxÏ6|=ý^‰|ŒCêþ~ˆÃJÏ™ã-íröbýÓq{'êáÛÇàÛðÌõ—!m¨§4üS ߺp2,n¹kÑùx*lŸdŸõŸ*ägd܆øÀå)ìcÛ kBY¼ é»çÂî%ï„ÔÁg¾ðSH,–wÑéðdnø5òÐ…D$Fë$£¨¦%†E'Ř.#ÉXAú],óJSƒ¢Áž7ux…"ÙLoÅ`qºy‹­iÙiÍöº¹¿H±‚)ú–y·IÑ2“b©>»ž2Û”¾¸“Ò»zÛD¯=Þë~“éÚ¿¦Kc}QÞgÂלweºD?—i?Y`RËoé{Fï·M9‹ÖÍjJÛϲZÌZ—ºY³®Î¯°\[¥“®žê´t¹äò^¿¬ùÆ(}µŽ¼îd'(óLÙ´6é,³<ÿ¿ƒXdÒŠÇÒZ¦óua™RO ¬“íÈ3…Öíº:ÀVÊDT7)ÌÈJ™ Ë&Çõ”ùKã€+ÓÊ\Ô Ì_#ôs{¿rØÕÁú‚e*Jº)<çê6Í ¥©{Ú2eOÞŸpu´×•çe=W:EéëZ_ýwÛ(óóH/PnS6©e„$á|CJû•á…º Ó+“Ö$;Ýs–ª­¦Œ©ö¡+Ü;‘g^dN»í(ƒ ‹”Nz˜2ا)|ŠÒ¦é5Y1)²b‰²ø #ö»XæA¢#¦Ž–]ëF*œŒÚ”öÚHYB­Wß¡ôXlˆJ;Î8ºDß¾ ¬ç¢ mdr^ÈÃ2¥ìdöú9ÊÎØGiB‘2æug‰wcF¡ÚÓ/ePVpp>ÈGÈÓ2†2-sªVjƒ²9z޲0Wa6Ç( ”f®|‰½1é–ùö =AÝì gÄæè%³óôÌäÊDÚb2àÎíô.V3Ûü2¥ï63Ò°Ú¥é(SMR˜®ÐÜy™ÂDL @³(¦q>Âú¥÷“ì\ÂÀO?4ÒÉ“B®môóö,“&«a°¡YÊXP¡íz ™ <ë˜Mì\“Ò6žEÉ2#ý˜'—]Çî-Ræ¯Ø½Ë”¹~%\\tl] ¾?Ê$ck‹îÞµ +ßµèeùöšï,0¹v3×­m”~¼Ä6/—(›œ2üÌ÷NlÓ¡Ê–}LŽK»– ¯ÿp“Qd.l™ç›LnàOPø¾eÓ¶—^tžÂ×-Ó¯U/2_ |à"“:j}‘ñþ®åz'¸~ɤ×v´‘Ý ´~­pp”½Hoù`×èsæûú­”;Z(\95H1Ýÿú®µ]vtžÒO¶1¹ÑsiWQj4çË—è7¦#ôu9O?wž£ï“ã”uFûÂy÷÷ã–šóDÜFásÓx„qz —Eö.ç>v·Ñ§ôØz(ò|«†<‡–A¹ZqGS‘üØM÷f–„X,PÚ÷uJÛªMÌý! ±þ¼!òÜLä¹ÿŸªTèãðK.Su-ƪɊù5mĺèw±ÌƒFcL2¦)“¯Â=”‰t‰I“¯wÿ$eqÔº ÊÛ•FØiI²HY$w³¸öeƼ?¨›D+ÀÉÂ1扡?í"ËI¤Ë’ +--–8¸íÛ-½ÇN­Ôz&QÝ^¬¹Î‹”96m.W«ÓPÎbŒCU!Àê ^ûšëI¡FCI5ºÓ‘{³”5¡ß–ê¿OŠP(dÌG™¾½Nï'»žžYŸ/ùÝ“8Hé—j®ƒ“2»ÑÓù$gÓŒklÓpŠÙ¦ÙëØyò@˜ÔÎY˘×Íuë|!ãûJ-ó|“~~.ØÊ$ÚáÀ,¥wº<a¶àE÷û(;-CÆLÚ±|Κz°&ù3îúlJ¹¦Üï¶ÉV}ŒRÚގ׵.ϳLâ0ýX™Ò‰Ya¾ÊNGÕiÊ\kš4C¨k^ÏÎ[jYf>ÜDÏo^¦Ì§¯SÆ[Œ·ØJšÊiJýÎQúÉ2elluùRË`UNé7^¥þ_…4vK,VJ·Ôb}˜grŽ™þwkµ¡ÔÒm|ï(;¡ÖÓ%Ë;K™¦™Ý¾Ö2, íŒ4b«T!~ÙÊÜÄÎI^}%ëîpJMÆ}¾²?’ÿßÅ2"µL=œ§ôBÊ„ªZ•pc?©ÇØs·+½jÊ´@Ùô—eíijÈÁìc#,\å +K2*jÚoïfra™gÿ‚ˆõ‹1iá ) QÈPï gðæXÌOt·{~zÊR̲¤Š œÔ¹@5`1óUÍO¨=“Öo€qÊOq™súHç¡Yâ»1 b‘2ê°P™6éÚžµ6™6×­ön޲QÚH/iPÚn'es¦i,3®Øx‘ÉùJwï0ÿˆT]×ôJ›e&Ç·e’§rê¢ežmÒ×M›>>†Î=K”~¡ïÎÑ›ä¤lÆõý“€ÕôÁüÒÆœ~W¯¥Ô‹í‹tß=L¯ý\f}€Í.=þŒ2¹YjÓ 73¹Y×4šŒk&·0\qžI§¦9E/›fg¿Õ9„> n‘þߤ<Ú ú&ŠÐ'ãÚûc®.ø'UIç‡VMé)¥i¦/º:oºçÆ]öRú^^PÚË”6•« ¬w 7òEêf<’÷%z¾º zåÖÐÐj3ĹœôöFÞ9•ö|™ŠÜÊNíÛ v£ m‹|ÿ4{k’ù»XæA¤“B˜ ôRCõåk¹{–‰ŒEðTô›iì)ó¼D‘.VaØ­cP#[XÇ ß r¦Xdw’þ*¤›WEš)éíH/3ɬmt¿˜26( ÙA&7³,t†ƒCD5ˆe…–˜íS¾•Áœg< ˜n0ÃÍÑFzëŽ~ Ó,µL]]f²5()³ìdcž4j»w)ót‹>Ø¥ÍG·Ì³Ý 똲1,Ci-ŒÔ*OïMPæÃ.Ÿ3”1j©T±ÖÙEÊ&o-³Ú†Pÿ:zAŒɗ]KÚÌ®‹–y¶É¤@ÓÔMÆ “u=Ô¶;Êt€Z‡eYz.¸tÖ±ü9ãs)åš2ùSdÕÇWíºy;Áä&û +eܪ0@ƒ2ŽÑŸÎ¦½‡kö¸{ÿ"}Ýê|1Eá÷–ܽuîºö¡yúuö‹[¨òmš¾ívuö*“Õ¬¡ôq!êš´ÕiU8ƸeO«@]ŽºzËrO¡Î¸3¡paºÀ;±M´µ*ƒ²– 1W‹<Åͦ”÷š±ç‹fj “Ùeö'8PHììL'ÙFöw±Ì½¤IÊâv‚ÂHÌ:ºD|ßNÆ;ª]°uñÑIZ%ѧ) Á¨K#”ŠÇpŒ··&TÍIYô¦(“uY‘õƒî÷Æ´(M3KôŸ)ú wݾõeÉ2ÎäÊúá‡îe6ƒJ{)s³¶½úù.Ò·ýÆ¥ö×X~³¤–ýgÑ$½æk‹Ë“šZ”ع`¦e9â¾shЯÓÁ=µ€ºÆ•ëVè2GiE¡ùÚÍäœÜ¤Ôj§ÓÈ®SÁ½ &Íå»îYk0»I³Z@¶XfÓjWײØúkqŒI«ÇƒôB»2®Š)—«Ô|[‡<7Œ–y¿I¿½N™cF)e ãhÝè\‚²Fëû-&Z_šï&ÜýÊZ·D™û´|ês%¨‡ôfø¶Oh¹ô{móNZ]¨•‚–É®'-ÊUáh‹Ò2]l…ë(«e&ƒá†îmJ;ê&K7Ovw™ÒF«]>òbšLл‹Þâ!ÄV÷ì}0¾c”Mx“R¯–&éX6ézµJH£u”9{–>ÆÀ;”¾®ßêf^´¦Š*.S,vuž†»,…sÇTwf"ùš1÷cîàiX,™ß,¥e‘ü7SÞ‹ö³"RmŠ-PV¤É» Ôd¾ŸDL‚\W‡©Ræ^S?ÊÜ+ZÉ{æ)B¥ÞC“½Õ”ÉN¥rjþz‚VKÌ÷«9ÉÛ3( 5+Ÿ¦×’”Ý`*ÓP§4ºnÊ›ß žWÆhj…óÝ +ò9½Âù ƒâÙ| *m§ŒokªL©öå ÆãFÄLÊ‹ +ݦV°ÜLF4·P&:DQ!ÀŒy§ÝÇ2ÐÏ_1³[uñŠYõèÆñå>æ×’ÕÚh°5RÅ,A‘F‡Ÿc6ϳ‰¾§™s6˜ÜtWÝXXë;¯« Óö²¼ÈÆÇ[QX“h[î²Ð¨RØ5¢m®gÕ}Ë<×drš>J?(|É^z!Šm«YfÔºœ*eJ;i¿›¡güÐ[î\£ô?ý޵’Ñôô{m“~Z]ì¥{°žÉyF] H2B¿0G4X× µ=@Ù,gõ蚢Âû½”ºRwº”~£ëÌ8eÌÍPêÿ“‘úg ]¤OÝðºOY ŒÕ Æ­Àè¾[ÅÕ ´¼9R! K["iZœd}Îë#éç CÒüðgÌ3“,çP†ÇÚ–’†b‰Ò×ÓÊÑLy/ÊÛçefœÉ³ª—™Ms3=RU“ØvïÊ(ä(;Ùn%iUË\åùm÷²Ì½¢Ì÷"e‚¼–û” IÏäï¦ßüÏQ˜û½#ô ›ö© L_œ®°·AÙê †+ç&&%‘Êü]`¹MæZ“ÆJi¦‹JðÓОױ²’ ª1Qœ€zœ`2˜æÌä© +m§?T¯MÒ÷ݼ„ÉîªUºÚÄêg q‰±“VŸË¦›Ï˜’j@c‚僚—êëØc +7ߤ0ÜE4oS”þ¸Hé«V`0ÁΓ‡N0AVëRúh•À€6–„š6OškªýÓõ½ŽÉnÐvi…J˜*ÐõLÜÖ ~y.k,·ÌsM&7ð{ß©ÖZ7Üj½±žé€Y÷ÿŽHzcLŽù÷è•"êæ¤‡óô¦îû˜.XŽ–kÊýn›ôÓêbe=eõè+…í”ñÇ3Ÿ ÷÷V—‚pÝž¥Ôÿ« Iu®+cI6ÊNkàËLZ±6(‰S”µý¨Ë«ŽË2üíH¤CK—ª´‡ésÅ•š¾s H÷BwÂ8ŠKÁsc”¾TĽ!Ïbbœ2~³øÚ¾@ü¥M+ÍU6ær“+°feYá v[˜ÉI;F¡ÄfŽév”É Ð2ëé4EË\­¦—Ø*.2ý¨Œ^•¹´É~‘²€XÉÙIz-œ¬ó®œ1Ó¿÷(¾³k;Ùz<Ĥyèz&M3/Q¤º¯2.åÔ8 i]ùÛL.ôyd¾n¥»½¦˜9šBM"§èͯ­p~­9õ³ÝM¶PæžW ¦=Ni¯*n,¶ÍÉÛÏú%¶ùƒ®©Ô½ÍN­ã4š]¡:›d'ƒÐ¦ôù&½íF¦Ÿ&s(#ýñàÙº‚S%]ÿc€÷ܽ˜Þ;5®ý¦pSTÆb°Ôû5GWè5ˆ瘾>Ùm!W˼¯{kR­sºš¨@¦Éî7ìŠ,§aKƒöuë£ùŸ2ײô–y®Éä~œÂ£XAÏeÒ¾ØtϨξ?eþ×DLHÜv÷tì/;ÒylœIÞgžÉ§'\úóî1V(•uï̲˜@l~ï¢ëd8ç,»g¦˜=Ÿ†d-0N0¹Gj2K AÙÌÓŸêtÎ}ï÷î{,nÞ¿ŽÒ³£f¤ëš/³øXº:îF7ÊÎ9¤Èº?‘Ÿ´9w­K;mβëÒ8…wx‘Ò¦¡ËNY\dRˆÔÊx¶#ïY2‰±ŽÞ ÀBƒ’•i´ÐGUq.%­ÕLjޝ°»[‘2×A:¸³ÌyÆ…u—¹4Î$£zŽ2éèF;dÞ§è…瘜Ô&ݳ!t˜~Ñl3¹Ù:D/½§Ÿðl°ž°Î60éjg¾¹´Ö”y!R')ÌSSþPøQgœ‹mLš¾ÕAe°¼{…ý3Ácr|gÍ%ë™Ü¬ *dûû–Óö5˜\xʪYIŠmþ­ðÏ2Æ`§¿^è*R…æÙk™ÕLöÿ9æ÷“´àii}qSð\¿…*œµ×}_Ÿe¼Ÿ+ß°1z¾I–²Þ=§q®š”>sÏв«@©ˆ_zhFÖ³î…ë2)}4´"Wœ`¹u{’ÊÕ¢‚ÿé”<ñµ!Å,zeJ»çÅÉêÈoZ!Úæ¥ÐtuŒé uõhFF˜nY0ÇNó:›ß.R&Ü4ÍL̇g™ÞŒs 㤘ïfeîÒ/„j¢’Ôpóo-..ÑO.{˜î sŒÉ:ãòŸ×| +àkoøÀ¿r÷×8ßwîtižð—&)HýR¾g| ©Ë»‡”Ýö¹2¸3åú-—ï«Óµ¸Ò怌‡ë9ùy Ò/©³Ïݵ?¯!/ Hû)Žg<ûDäÚw¾ñ}ðû>k‘>o…ø-dŽÙï~? wUÛ»WŒÙ§ýÀfAÆêߺçö@êò>Hÿ½Û¤ñ=d ü{ ùy2þú »6}Y#Êà·öýÉq©ó컿÷›{×!óq¯q 2߆Œáߘ{ÿæîý"òÞ @úÁsðóßJBç–û3ŸêÄîï~ox²Î¾ ™ëƒ¬a~&¯¿*Ðþ`ÇÖoÎ VAúF]}ù§ùü)_Bø7 k }ú%÷ÿݶþ ²nÿÒŸÒºêþ>†ä:ò-¤MoAx–; ¼Â3晇\Þ²°ÆÑ(¾^(¾€”oUÞƒˆ¯rîk™¾‡¬áYeüRÿ7 +¤y/d¼êZÿ„ïxÎý¾·}iÛ°OÝÛ« ýä3ßóSóÌÝqxËý~ÀÏÜÿg!kÖ3¹þ8¤Ï"\|á‡øÇœwò°+øýü¼ÿW2Gr¯÷¤Ü#}uï…óï+}@ÜB’ Â{gÕA^?‹áH»¯‚ŒÍ²ãëm$ë+ÌwÈ/ +"R+½Xd\겞þÌÉ×)&-1íy—ÌïfÜŒìEª¥æQi’«–yg¹Äw‹–Y%„1éTÂ#ª”öP¤·Y­ÕéaV0¡nÊÜ+²æG“ôZö0*±š¥Z$ë«·L‘²j}/2é÷¼×Õ­J(çMújE¡Áð4ÖUb=Ôç«e®-Ò${k#År$ÍêaÖåqʼs„ñ •ê‡:OîphÊÛ ×,ÑkûG™ô3îÆµ$Ë,tŽõhß§LšEÌ9ÇÙy’éQª«=C?ɬ´Û‘üÉK+ò^Yé|3x¿Jа^Ò8½­–MáYs<Õ¼Æ`ßí–F(㪛àDi4J™“v0Ù—›AyŠšþÇè0ãPK«Aèg\ˆfŸß«‹ÖRæå‹ìÔ”•™ßt½*ãÂ0ÃbèE¼ +kÝ5Â|­ÙJ¢Û8>-“VÓ]k묔Å)vúk¿ÃîOO(‹#Lö·¶¹—W'Ö½ívÁEæ[״ܳSôóîlðŒZ»´è-w³ÒÜI«­È½6…_^p霢÷Û)/Ðï6Š¥Ô´Ë_h%6K_MÅ‹¬÷¡UX3ø,š`'bóÓãÖ¯—Óº_ +qŠåܶï‹äc‘ÙVx"ùˆá€Ë4;#ú“ÅŽœ¥ ‚fÁ±›8)mz^n«)ú@ƒÓ.½ðd U¦5胾\ Ý0Þ Öe…û¨,×Å1Æãb\dr,­c<@tø\Ú¤¡ní!±LáÓ”¸3‘üÐ¥s”åÄ;Y.®ÀIv +2¢¼Chbü(’fdï"ãþžÉ1M¸bÚöÇ)÷Ç!æ Yxb.óWÏübÂü´ûý ’&Ïixùe^o®ˆ9ÅóþGäÙ× ¦•oBL0mÞ¸éÊ—¶šf~)C“µªeÎÃNH›¥™öÝ1gzRÎ!f6ûÍ3Zêî`ûÉÓò~ožø$’¦FwD¾¯}é[øúU°Ý]ÿIS¡û!fuÖÕâa÷÷H{½écg f]¡™[³ì<䙸1‡:äÕb+¼ÙûW.¿×!ýñ8¤K}è®}1 zRZöëú²ø÷Ìî÷“§-RÀá¾ûVäÞ]¾û<€¿®¶ÅÕ’Ïÿ%Ä,î8|[å~¿ëòÔ)¼í·yæ`Ç!u­}íµ‚ßø¤}ÕœîCT3ƒþ~Œ>–õ`1 Y¾…äéó¾OáÍû¾tŸBÜÝä+ÈüTÕô/D2îÞGÒL½¬†”Iç=usZ×û!s¤âf—ß³f€Cæ"ųÁ³W»üV·X ™ÔÇuHž>Ì‘+åª2©»G íñËÓ H?|2¿?漣¶–owïb&\Ä$W¡sÌ×yÝò?ð÷uüHŸúÒÏê_BÖ‘‡QÏÚØ |™ÿHe¬ƒ´óÝ9ÏÕï!ëÄOƒëSðn eð-ª™ÿ[<éwE¾ý d>ûÒWt¬<™wbn½€ð@ú®š¶ß YuïÁkHç§b¸éóŸîn¸¼ÄM«‹ÃöÑ5]¤sÕ½Õýyç/!|áý^î’üvÎ@Ú̶ÑüçŠù|2øýIô)Á¯ ëÿ§H¶õƒî½Ç!ýðtº?]u÷Y2¿„̱» ýPyö; {†§ õñ’s÷ã}ÎC.oßCÜ‚>Ay>ío í n¹YøÌ}7ä¹ï¬©É=h °Z€"&€EÉ’nO—j”•V dV¤ÌVÚ¹Ìb&uaDÆvä™4L‘²vSæ4š`2p–²Q,P¤W6}V¡ZÌíæš•Äi@*«qµù9J}fºY¼ÅL¯}Ís©êj0åÞ/Ïöƒ˜µÇ%æ›Üe‘íËE‚íhÿ(rü_˜ÿ—)ý§j«0áJ¼T²Ñàg˜ :¦óÒ¬û«ý?¦‰êÅ)˜´®SA&é¥úËKÊX±óÄ)&µÝhr§L:{˜myjúIÖµ+†‹\w7Lñ2ÓׄzÓÙYW—æÞ㔋Z Mл`æ­÷Ö¨lpÂ,RÍåiîÑpuœŽÔ2é5éûgQþa™fÔyXbüh?káÙ­~èÕ6÷ŠÖM^.3ßD~„Öœ?o ^Ëdðâ޲¸ ¸ZNÓº 5§ÓîúfÆAfÑ(¥/è8×2jzݺ]©k%ÙÉwè^C¿}žÅÍùc.v¯VÈ_Ì-tª`½Å‚Ø¦í ªhþ•®DÒÓq·=’…º ofoN£™dú‘  += L]Ct¬/Y…oÈÔTN†,ÒÒh|¦@~F˜dŠøjæ•9ôY‰=“Fv#°ÄÎÉ"+Â{Q¿½*eŽÑ6&Ô1 +“ee6ìÆ>†=Lž5n'#õ\br X¡ÂfWþðh›4¡? :Œl­Ç"µÍµÍ,†k3Ÿ*“I–‰ÿ—ßnÌÇbtùGïé‘iy‡uLNví’e_fÒô4kò$Ë-ÔJM—¯#%ß išŽEVKíŠõ¶d#z“Ý™÷uCôLo›ÒÔ ÉŽ¡%ʼ +Ê\bû”n¤ëÎÛ8en¬ËÅj-=ûÀNÁÏ8³Dªú]˰4×b›™ºýÆcÔ`ò¼êqÆ…â±yC™åuæýº„3i¤„k,&€ÈŠMÃ%cÕ…ë½Ï6èHÖå®[²›þõÌcë˜ËZ&½¦£°¬W(üéy +¿rŠÒWv3yTïnz>å”»wÚÝßHéÓÛ]¾G)c}ŽIhŠþ¤¥y +¯µ™IAöiÊ8Úʤ µÆÒ¶®Ñ¯¹mó\™ú™f|þX`9—Ö +¯°åø­0n‘b™åçëi÷nËýVžt,òÌzvºäåóeŒ«ð¥M/€ßMï6[•ΛôBWB hÙŽ°¸ÛÑ;ùÊe–‹5¤a£ÿ©¿˜;@ˆc%ÒŒ•3†+ôãdã±Âr¢Ìÿ[Y͵{½›ILáj±ä¾¥yL[w:ÜÛÃZLÈhQÉï|F¡lŠjÅgÌ;áf0VÑS‘g¦Íý¬1jé[ŸçØñ_E÷*eŽ‘õY¶ihÐ({ÌÒËôþ¬û¶êR,Ò[[bR’«ß²B©œºÈÃ4eÀÅ4t´ÅjZæÝW†6½OÖNVÓø7(‚”Sì\¯Qêµ—GÏ©6ôœ+Ë!WÖ]™6°Üähë‰,¾!¶~TËôGålb¶fï{ÏħÑZÆ'ö0XRj›÷Û+Tž2d˜ºâ ”¡­ôçOS暃ì\ø.1¹ÐÙ v³ìÝØ:Ié›eT1ZMÏL-2;FAZ`ܪq ¬µ›õñßÉä|5_SY³hó…»m&5ç»™œ?Âþ±LYWº ü#«UÉ +ÌR¨¹ºH˜µIgGëÿ³ëÞj“§ æÁnwÔX'Z¶£,”°_è6X™RˤÙd’ ‡ T‘<¦L`—2eñ¶ùÖHy÷A[Ü‚Òú$à̳zzR®z6×'À4ä#so£{÷|Ÿ‡b¨ø +Äâ¤_<€lhÀº[HRj·²´4ÞqÔwFò~ăª<ˆÎ —±³^Ëâ^ø “÷÷ÂóƒëÂ*HΛbqÞ„äóH “O?/û~H°”'üsåœVÃo ÁJÏB‚½éÕ<½ l˜‡«æÿ°m_Ã÷—~éÝ„Œ¿‡ A*Ÿ„Ì]òo ÷ƒÌwÃÈ{¾^߇ÌY½ +·2·<…îf)>€Ÿ{öøqwþɽc > úøŠ—{?’kÊÕàþ æ§[¬ƒ?õä#ø Z» ëÉ=>ñwÁûÿ tôdžÑ`GOÀÏ¿÷¹ëÿWùÖàP_”|OŸÀÏxîŸ!}ý ÷-Œö.Äù…¼uQñ°ù¿ÛuÇâ§1ü'€( kËOz˜þ÷¾âo{ø Å:¶Áòôìùq$ƒœ=€Î>1 +™3ïG2ˆ`líí¿€æ;ëÒî68^üäî!ÈZQõœú_AxÏL@> Ù{Øà¼û!¯L÷ø`½v<îÒÔ6½ÂcÜ‹êkÍ×¶þ2®~¨Á?C~$@7  é? +®ß)Ï75îcăF‡ì> ~O¸g´c^ä ÈÙM€Þ÷ëøqÿ?øuí HÞC¹z-‚¯ õõ d/cƒªß©»‘=®;Êg¶c\-‘±CÉ[èŒÄø5dÏÛdý©ËË+茌þÊ1:ߘÿ×ä<›V椓¿<_6Ú*ÐY'м òVÎ}‹2e¶Ø ¿ùþÖýÿ<Úò:øvü0’FUØè¦vƒµÆoX| ¿ùïÕ7bÂ…ØI!ŽCê>Äóo„YPaQˆ{ ŒÄ3(Ïp×/!íù|?Ó…ïa—¯,!ˆhÓ"WA2'Ý©Ÿº¢¡[bÑME7Ø™OV¹¿/@êécÈøý[› ãsMF:o!ýt™n1éòóêÙL¼YÇY¼ÿ´Ä»?‡Œ—á7sOBÆYV”yÅ^$7Ý€Ÿû]ðkürÙüï‡ôëOѹùW|™—¾ð'æ½·àç0Út·Ð<—=‰á{÷NXÿ1ü+díT¾c•£/!cá{ˆCÌ]Æ7+ªô6$™Â¯Ó¬ˆ\~ªðF½À $•6½À]èŸ`÷×>þ|Äx]ß…”õdMzÒO[µê.÷Ì]î÷·Ó!6ºë·PïI ÿîò¹¿Æ4Ëà Tßü+>„(+žðg“¾>…ÌSwBêð kqQ!ÇMH»L@êçyxžMyß»]ÚkÐyÚCQ\uùÔ´× óôƒnO’ù ?­ýÊâ>È|ô¤O~™£•çˆ'!{ƒû=Qã*d/°Ë\{ÒÇÿ¨`1ü +R?Ú&ßA„<ÊÝ i¿Ç ó¹wÿÕÑŸ»ßk!ezR/÷À rÓö„×!}ê*¤Î®Böv_ßjï=™‡ÃúýIáï7aÌZÆT`&4(@j +þÅ”e«õz‘bsÕ̸¦³‡¬<¤•9<«R‘f–˜F£LúpZ3™Øùše‚=•)³%kŽº…I?sAR©©IxŽ|œC¨Å|QæéM“F˜ àrÙÜS„&MºltÜú~²Çå94 MÂö˜ëuEë´Ô²ÌD’׿)[FÐM ¹A¢f õÈ’x§ø›1×[Lw+zP(}ñ‘v\ÖÓì•)³RÛ<¯Q$5ŠF +m¸ò.ÓK +³‚L„¸H‘~îcz@û¬æM«ºÂdž§‚ü‚Ò±3s5ˆØDð¾Z”=¤LýßÎ5«ö¤"‘•mÄé<ÌÑKÙËž•¼Ò˜bv=Ø~žì¦¥Ev­ëh/›~ÝÑô÷Q,!ègi4lªl2;(lÑù· +i€ÊViΘ¼×•nÚ¹Èy¸Âú‚žÉc¼i‘²~h_ -,F(V!)õ6ËN öŠösOJYô$”%Æ=É$¤µ&[cõx¼w +~ô'9õh2(Û¬«ŸØ\qº`žËÐ&Û0Ô8õ6ÐôjÖ7G´Ì7šôÇÞU9%¨[ZbïN•i›r}§IÑ–Ûq¨õ5ÕçºYd’‡?àòVÕB.<~Vq…I­ùúlNS‚èna¶fx+%p\ƒÉþ5Éâ§¥ÑEz ñ9—×”uÍö[ÝÓÔ5NÖSæínâÍQæð},¦]ßI£ÕE9ÂÀðöÀ­Œ[²Y,Qê¶Mé ;\šEÊ¢4Fi·m.£,V¯3ôíî-cûÏ„ô'+Âí„Ð7+Kâ]Ôæxéë½IÊãHײ¯sÏ[éûþÈsoB´‰V¢óû]FŠT¦Ì€H’ì7?‡h5T*øûû¸Kû}ˆva¼?áqHý=†t?ç!Ô¯ ’±ï¤B-޹¼ÝBÒor¢¾ /Õm¸ôc~äLä-xŸš‡!Ï[HJÓëÄ ˆæ­M}¿ Á¶î‚´•Æ€8ï‡fÛ6Ï`’~Yg!š’! ñø€ìÒ_i-RQäYIcO ;˦&ÒýÆî€h»µ¾úÉ ju`lÀûeŸhž)ÏGHj ^€Ì[Ï"]+¡1eŠÄ¡(‹MÃè¾.›!V€Ì?uõí_Cêá,ŠÇlø2Ÿ÷¢îbеC¡¾í¿h¨wÁ¯3ã¹þYd[~Üëè!x+†3zÕùê[Ggü!¤]?1éîB5Í翹4ƒ´©ú_§­µ“ð–P–øŽµÊËÃÏ íªãv£«èœ/΢^í ž§¹2k,< ¸ºqÞï_-xÖ@Ö?‰¿Ò»Ÿå=X#¶E®m…”;mmH÷þÛ­¿üÏ!u}2.l,~ZŒ#Y; <û~Tׯþ½£QH[?)ã“uâ?¸çþ²–= ™óžGrÞÓ@ž +ßód<®1÷Ö ûàqW]œÓZ½é³#>ü[Ô·ü‹£ÿ± |Ä}CýßG²l_:ºŽ¤¯{Ùüü¾¬ŠW {–*¾ÿ IßyµLü3H8öj… IDAT ±c®·Üµª [{ÀÊ z3IÒ3¥zޝ.ä”ޝ‚} š£LO{‚2é½G1…±ƒã’»¾b⢘uï¶Ýï©ÒëvÁ¡ŸT–79› ,”'Ý7®Q6ÿu/ÞMS–2Ÿ´M¬š5Íoå¼o]eÒ‚Émeœ‘_¦J´Ñ¥5[€ÎQÆkt„Ò×ò¨Èâ5Âd »nƒÖÍ2ulØ-C +øªÐA&Î1ú`¢Ë”¹4 kç%Å5ÖØË’špö"hUÌ<ñë5Ŷ®fsfóe¬nªù[Ei”Éy#Mþz¤~.Ræ4ë1JŸ:ÂN¦ï2ã½qóÌ»;k{;”×(óÇEv +t²îNiô²yw_Áü蜻'å¾åqæXM´ž~ζå™Í~ ŽÑ÷ï¬ÍÿJ»¥”¥LÙ[æ{M +os‰ýÝà6(}c‘²þ4’ŸfrÓ«.UM +OŽ—9ólÛ\/›¿Í.?8•ìïæR×®wèûét¾5åÒ¯K=Cïîô:…OèÆï0³Ý/ÖÒ S«(« ’­¨Û-4y_fwó|è’ºÌô9¶Aª ŒÁ4%F7¸FY×_dgÐÕ¶ËG“n+ ÌP>Ù¡Ô£ŸÎ:É6\ÞfÌnBI¿°Í˜k­à‹i(—ؽïïZÊÄЦLhi‹w™27èÆe +“j™]85M]Ô-3› &)‹ÔIJýfvDNkµpˆ~C³`h³3À&óþJoº›&/íÈýu®n޹º9íê'奈 î½ôZ°Ó®¾¶1¾SúJ›ÂÚMè¼Kç ;¡½Å‡=}ÃFZM›•fͳËÏ­fº…FžµÌíD6ƈ£Q…ÒN&!“Ñœ«Òj&çµS¬¾yœviìp¿7ÑÇ9Àεe5;7 Kì½æºÅb³nH«çX¯vÊÎ¥3\¹SHF)Lx¸Ñ˜e§%d°fY^гš1Gbíc@/Ó÷ϲ´ÙZ=”1o7Ï1-ü;Ok8W `Ùmn5õU­ìø´q8Ö2ëáËK¯…i›ÿe&˸Éy­l”ð–y·I nk¡<Òù¿Í¤EË1ʆoŠùóØxð.éù€¶¹V%¶žÈ¤ït¯Iùmç#=ü–žÒQ—è…¿;çò½Õ㔨rÅnìÇ(óª=­k‘ý=Å¢ÉNÔýð²;ÅHƒñSÔÊ$ïýq÷ÜNÊØ8HcGW>¦W0½NéÛ)ý-äóÃúœqχ‚‡e朤Ø¢ß\]dµ¯ç<W6í®Ï˜k­È{k™”6Z\£4v³†²X É<Ó'Ô2enFòló +î“éz÷]5ïMÜ·2ÎäÚ4_d'Ãkm¡—jÍFò¬ƒÆ^³æÿý”ÆçÕiÛ\ßÀü£Ræ˜dDÕÔ2À*Ä¥µn5Øšb™RŸçÝß1?MY6š|ÚüƒÉM}óšøg1[Y b›^sѤwI£”±£}”1£×™­é?Åä$}…å6Û¡IûyvÇÅêk‘õ kÛAÚ'Y^K°š2W©ÅÃnJ?\¦.n Ì‘'ïçGØÛ`uêžp™½æ3É#eήSÈn7½<"1«Ng"åT2φ¬nÍ^C7‚‹L +ŽBå†EÕµ£IéC1A@˜æ“îqç)íÕb:AfoôBÔ™œ¼¶MšyüA…'/Ó÷_ ž©Ð͹uªÖŠf’~ +7曘\ó^fùr·ÌûMÊšÒí<^¥îµ~ÛAžbBù#L …§ØÙGªæs;“s]/-·”Æ™ðeo…ƺg°‹ÝÐ5ÊQwË[ ¯£Âþ€ÊÊÐ:¦4äáZM醺ÅtkÉh•b!ôH•¶7Sòd±È8à –ï±Ú 7Êò>o3æù#‘k­åÙ@a2ê4©gró&Í*[æÓ͉—([M5{±ƒ@™’õÌß܆iŸ Lš{Í7–(“ê;îwlášaçÙëv!«;jyYjš¼´éÏßÖv¹Fa€wÓoL2¹Xn¥ô%Ë(^vïí1ïí¡,r¶ÍO³ÓšÅúF*°SRo1Ç$#jÎòê9Ôê]f§ ¬áò:E3½`{‰²šü—ƒ÷‹šö¦ÝWé­:æY/“ÕdÒbD¿à¥ÑAʼ5Æä‚¬q +&™nAu…½Ë£”9î"ûgn³¬OÐ`Òü¯ßLÞtP¶ÊÔvu­‚–µLnš­&·ÚÂd¿²&È¡ =Ìg7†Š Ój`b¦§v ±Lé“(sèEs=& ˜`R;•³É +»áëF™ìc¡ÀÖ­„ëB78Ìäæ_ÇU¸ùYÏd?«ªn™4šôýüPÅôªšò_f§`<ß”«—y&7Mv*ô~Û\ë&¯#ôãíBêF××+ìŸVÛ +0°º5—ZÞîvu6뮟fþü=NáÅORÚô$“Vj±;Oá÷QÚºqòhŠIÌÖfŒÆØÙ¿»µÂ…çJãYÔ-g…wé¥@`œ2ÖóæÓ+,¨Ø/¼$RG¦G)¾Óì”–_¡,Šu1}Ö¼i‘Åö–yGMéf̵VMy+K¡icÚ¦£J™Ç)mm-Šà‚«Ÿ}Œˆ*Á0®P&ˆY÷;&¥¿ÌÎIÃ2@+1©Yj𼴙ܸ\aº5ˆ•0¶˜´\f|\ŒR,¬Ùå …é´m²Ls]Ú(LY–Ò“‹Èdp?O+æAóqž^ˆNÐ'XîèÀA@ÿÆpc¶Äî|Ó”&Ø›Åf+;Ûˆ”vœa¶ˆº©°Ë¢åžy1^¥<ÂÞùSRÛ¹>|+¤4!€ÝDuK;ƒúìgù¬vøJF™ìfôrÍí`ûÜ2ý¼«‚ÏY÷¨-kžF³.½,æ=œ§Y¡X7ƒK”1բ̗±ñ™æÛ>ÁäºÜ­ÖÒšÛkþó,@™3»…ÝtgmþCaÄ Vò´L:MzÀtÅôº!¨iž˜.ÄÜG™t­c<ï”»ß6׺ͧµ¬íe=­¦çgúmºÛ”ñ˹֬¦êÑ8 ´ÙyÊÆ½eè0¥/_qå>áò›k[î™~¯s1šf3=üVèJÕª)ÝISx.Qæë“”ùêeWþmô«ë˜´pmR„Wz'¥?´(ãò;×iß>À|axa}`·Z„=ÌŽÜkq’Ý›ÍÏéy',ó6®¼À2rd¶IP•2[¥l4÷P:ì)Ênä®QA˜·eÊÄ´ŽÉ ì ʤ8FéܳÌGC¸ÈN€jÏ—*”¹njš2´Ù9áÑå÷$“&æê“µL56/ ” e†ñ:¼H¿1Ÿf±‰b–¢yßIiSQ°Hi@Â`#EÇ|YlaºvlÑf¹þ±‘ÉñÔOÒ&¥mËl271}ÞΊѠ¦Ö{Ù) œazÿ¨bš[–ÖÒÇÐ襉hM0~¶t]BìîTŸË6k¾fºnŠË,­YÁp¨íÖ1§ñfÓ5}[­·òâ˜èFl–Ùíš°+–ØéÒëCãL +f–s¾W”V39?\ _·'™´l«KPtóß òvžÝm‚Z&­&ýÚþ:ûkþ;Iiïv§Ðbr5¥ÿµ#i„¼.Ùè-ûYÀ;FÊoªÅY¿ÚBi-“î¯Wè-6·Òoè6¹¿{˜ ^j]Y”ײJ–)úS®Pxê—é£üçõÛÙ¨“M3‰™~K-üÈî]ËÒÚü=ö&Ð_·XbIAXìb8ywÛe°Èê&­kƒ´²üçB²šðÓ\Y@´æÓ¥¼Ý”¹ÓK¨”IÖn0éƒL4é}£là‰­L–EÊ¢|‘›„“ìœÈuÑš1×FLå™?öƒš¦ mwmÓ½S¨é§5]¡L˜Ö#† î¹p!¡Œ¡Côg(“Ö>f›i01ÍÕ¨•ñÛŠ 2² î-uh‰úi–ï#­ W+¤Q…ÔE™Ç¢ÌØ…‘ JYBái÷ÌiƱƒÉ€£d~`É:h#ejsåä)…TE·ñBÅ~Ô«¥Yóí´rXÍû;iuCÖ +i‘é àŒÉËtMßn›ï¦YìÙMØŽiZ«ÌeÊ@X#î·–wÁÕqËý ™Ô47Â*jû­UMØÇ­@¤Š ×ö•ð»ÓæÞj&ûa‚µ–I¯Éä×Í\Ò`ö\ÜdòHGå%ÚL +Q·DÞI¹¾ƒÐù¼m®ÕÑ?Æé׎ˬ7¦KèVÒï¹.¤i–Ûαs£¦¼|]ÖH'YìD°~ÕÅÌä©[¥ðÙm‹×Õ/,²D9b­ÏjsÕƒ³L&ì 7˜¢0Á³‘BTñ“µfÄó,§å µR–émUÈKj°óX¤%f3ÜÝ”¹ +Yíe“7ë6akk¢EÊ"f7ø J?°>ísL2FZ'–yÙH~kºbÔ4ùi÷VS&ŠéM¹öÑ[Gd¥«“ŒFm»w{%QWæTÛµeÊu¾dZãÌ€(æÌ{»ÙݹªóÌœ(–(ù{‡I‰ÙïV1]nÐ[|Òß»Ùð¥p3¾ìÊZ$ÿ &Û0OØ6m¾‘Û6uQÊ£ô•Þü+M©›,Óù€äõ&€'áûÉfgÜÿ/øK÷ÿ&wýÎÈ7ŽøÒ÷ÂûøCHÙ¿”vø›*ªMWÝÿ@òy»`5¤ÿ½`¤µßÍxÔýÿ€?®~ÀG>’…ï!óÌ?šk£9à>÷8Ò~ñ¤žE¹~?àYȼô0dÜ}à}"}®Ú +àóûSÿG‰ï*^ð¦ùý€¿Oy¶íòyÀqó1€_•üæjÏxãêmHÛÿ&'Ÿ:æ³0 àëùùR÷EÖ…*h@Êõ,¤Üÿo¾S H{~]âcãsÈ8Ìë×£.­Ç͵7üI—y-‹QH¿|,¸þ(ü\rÒÏY'~Üã<ÍBÖˆ›yMûwRgOºß×!m’6Ëb5dœ>\¿êþêæ+ k!ëÝÈ^W@Æ÷-Èšø·îú¤iy_ðg9ß,‹íîÊÃ| éÓYã» ™îN¹Àƒ~¹×0iO@êû~÷û;_ôo󞇄’|ð$Ç]¯ñ!€®mA’ß.Š[¹èŸÌµË:¼à®’ÁŒøÀ½æÚgò|Y/²úÉjH?Ø)«å“³ÖÎÛï@úÔ(ÏË7 ýô5H> àïêÌ\ØYÓßø+”— +6@ÖÓ{ ¼óÈQŽ7L‘ Œ0)9že¾9UèÛy’å¥ÍSLJN/HÃjƒÉêÑ@ÃhÝŠVÅôBÚF‘ìì¦h­­$Óâ<óƒ!ÖU梃SOÕî^`ÒÌo”¾ÿØúg¾oø9Šë„Kã‚KC- Â(ŸÍ—½5M~ÚŸ¢F|=¸o}›ª¸å(ÅÜ[bX¦h9ÔbhŒ"íÜFÑ$½G×àÅr¨L ±íÌî—÷eN´˜é¢.l½fY´#y\¢ÌÍ +ßž`Üü|–2®¦)íºṉ¸¦¥ˆ?\))uI§h:YŸ?e·Ô ×öÛ hÚÇcÒüSÌÖL¯eçÒkÍzY+Ÿe—=LZ2¨Æw‰ý‰Lm}„m[ÏNíìËí™G£”y,ςɯK#u8‘ó\Û=;ýaœÉ8½pÙÄòÇ;®O©£%›×Ãxu™ý[ +ÍØ{麲RdcïœîAú!ÿb޲…”eBò*?R+©ó,nÁ¢1Ÿ¬¥c™ úEÖB©[+‡!ÕDi@Rƒ dk¼F|ÑÔ)¾p’‰²xI©ðsþ:åÙM)b‘<ÁF—ž•2îG÷cnäˆ|ËÊ*°Vœ7!eÍ›7ö@æR‹,žÏâ +ü˜ù +Ò÷ŠÎSe`-á®CÆ^Þvñ¼%é-÷l-ê‡<_SZoø£šÒ4Øõó dþÂ2¦îƒÌ%9R«¾ <ò ¬{!F Ö 7 k@¿×©!bÈ‘„ÚÖ´ó¯«ýUsŒK’Céï"ëчšÊ<É{jf”ožRÏEŽ1éU™³Èún’ÞoX­BI¬ö™ðŒÚI“Æœ+ïV¦[BØgc’à%ƃM­5M¾ÚŸ²4BÑâ-Ñk8&‚ú®«®³ü'»…ÆØCé§»)åŠõŸcÉù«ŸÌ(ú˜e뫇Y“VšD|œÞâÆx¼ÀòZ©Ý)uâ0Ëk G˜^Ÿdo|ÿôZ¬v…<÷ŠFéc»„±JôÞ2E<Âø9ÃçLyÆÐuN·d­Ñ²² h§ûø”1q’b54•òÌ6“÷…>Ö™µN˜c§¥Jƒñ`¨±“"ôxKE,(ZxZP³‡eÛDo¥Tôðøà¢ïµÜ;X.nF•¾[~HÐy¨WuØ`2ˆtUü5ÿ!M±xåEʼڋ#U‡ô§¼ì N èÒ ÂÀ!“L2™Ë¬×Ü34cí6ÐÜFz†{–b£‘a‹ºIôºÌidgˆHÛ€5MÞÚŸ*¤A…” °´ÈzM‹n@-æ(í~”²1=]! RúXg„Rþ¢GùÄÌlË’4Î|g„² +³,n2ºÍSÌŒOPê÷´Ë[7›­9ðeÑò¦ ‘«Òzú#EWú8(Ke6ÿ±w,ŽQæÈp]Zbo™ö"Ô6ùi@½—¡fPŸý:K¼ÁÎÓ9®Pæ•cÌ -QæÀ–û3¡•ž¯ó}(ßv– Φ§-°Ü:3æê±í6NéßuDö4\fÿÜ¥¶°3`e\d}§uÜ.´žâæØ¨Eá¡7pp„ÝCº )Ë@±b¶y¿¹ö6$°Ûo!fŒ/u¾V+¾„´bÚgÍ%_ðç5~Ïš|)Ò‚eõý(s– ¼ö.Ä\õCwíÿy~¼ùþ¸{÷ˆ Ý=H7š€˜5ÝqQ3囀1gÑóÅnp»º(Ô…çnH½ÿäè#wÿ&€ÿ¥æo†£B‡ôùoÝŠ~»h;2o=„¤ËGn@ÖéQ¿Kc/°Ûý„€YC¹vtÜÂʘŒ¯…¸ÜqM ƒAÞ„¬û_ALÆ‹®C 1DA²;ï/Ȧü)ÔmµöA˜XËP>à¯jþNLˆ/N¿}KûUæ4XßÁgügó[ã|à7×_„øT?Lÿ-+øÀÿ½rY©„c±lOT°þúumÚBl‚ln†êdÞûRWÝ +4R9P¼ßŒA|½÷#^oßA„'_A˜¨ ›Œ‡#Ï=Þ3V#îÛCúØCèNxÙ€`öC|÷#?nJ¿¡cç{c«Bc»ùÏšÃó6‡ß@Ú.æÞoXî[u3O(1ªÇ÷÷.È:cé®”÷¿ è¤?[úyNF uü¨û½‘©¾ûâÇïáû÷C9"Œ¡øRîg3¾÷¤¼ƒ4V,ltÿ!†bˆ!zˆ4-Wˆ_B4EÃ3’B4X¯ ÷RÛÕ&ãIsí„îõp·àëé!Èàyøcvz…•,³ÅÃföit!ö]ðû÷÷Óàú.óÿGøa#MX2¨8Ù˜½d¿²Œæ7=úö?B62öøÏAÆ*ø ÃÐýæù-ø€?» .o¢“ qß} +2³êêä[úÌ}/o“T~9 +î§MÿfH™×@67Eƒv­…Ì/Ϭ|­Äûý„΋wAúÉ!¹ùÙÜ_CÚû$çN@„;Ï ·G¾–ÁqHŸ]Y'ÏÂçú=DnöcGÀ– +ò +¾‚ ¥5æÙ·»ÌSüÒ7Þ†´³–IŸÀ5ý'H]> áÅÖ¸ë_AÖTº|ø1º£¡e/1Èybˆ!†øA¡¨€b"…~2¸~bŠ[·iö„™} Im× #ü“ØK5ÀZü²ð†g¾~ +)sÝf§+Uæ<èyñ/ =üCxÓâ· BŠ5ðŒùˆEoþ»ÂZÜ.gœNBÚíI³þ|»4 Œ¥ºý„fÌuãv³’gœWÅ„a_c®Ý€ú«§í’pÂô?˜òŒBO×ø+;yä5ˆ0â ¤nšgVÁGiþL÷!sò h¿ÓЀ´¡¶Ç§üßi§?)‘Ö4dãv Ò΃h"½’·º…xW#×V¡þyâ# þæ¸ Æ!üÊ}ðgDšÛÜC 1Ä+ˆ²EÌ,Fç-$Ϫ‚ ˆ¦çYtJú¿€Hï{©½²€ýð¾¦1Éúqˆ¿ÛÍÀJ—¹(VCÊœfž%g¹Íã‹À +€¤_iîEq+œ"¸Õ˜ð3ðÇÌÜ ƒAÑ—“u.Eަ¤ÝW!å.Ónº|IäD óüò¼6ñS Ö&§ ´ 2ΰ IDATg誸 ‡lÔ~•òÜ a ’çÇ̵nŽŽt¬…¬‘O!{ [sýДß^Ïë§ã1³Æ}o’î*<ËêW_@ø•n7bˆ!†bˆÛ +U°²¡{ rï[éÚ<3͈¶äQˆäútnŒnA4?¯¡÷Ll(Р9 LÜC‘w´Ìg ŒEÄA*s¤Y‚(>s÷?ƒl†• {½wX „€E÷®"˜„ô—A\‡l2ê +º"D|4ç¹/!¦¼ïc0Ïú­ŠdQK‡; šË¯!–(ƒ4÷•A2w?™÷ãö-KŒÃo¾¿‡Œ—• +6ˆpýx¡˜ +~Úbˆ!†bˆ!:Ðð™^C¶OÞMˆiôuˆàNGw@4y ÿÇXý2ûL(¦!Ú·¬2_‡h3®C˜ ;0Øe®‚iˆÆç.³)€X?$ŒC·ƒ{YÜ‚´[¿4¯“ÍRLÈV:æÊ"í´‹[­áßWH?“ñHßpyúâ¦1ˆþîC 1ÄC 1ÄCÜFèV …Дç‡Z7!&Ÿ?BÿwÊ"üØ)s‘£|Š`%Ë\ÖÛô†Ö ¡kÀ ã>³é‚€:`塊[jéºþbÍ2ÈB¨!†bˆ!†bˆ!†¢ êX¬…l‡øÉ–ÙŒ\‡ø©wWJ[\D`1 Ñ„? +”Ùä J™ë„ +ž€øfÞ€ô…áFrˆ!†bˆ!†bˆ!†b…Ð €ÅÄÜý>ˆfT£÷®‚h»oBÌä¯B|=ůu>2÷Y”÷^‰ø|/nŸ21ÄC 1ÄC 1ÄC ñF¯C 1ÄC 1ÄC 1ÄC 1ÄàZé 1ÄC 1ÄC 1ÄC 1ĽÇP0ÄC 1ÄÙh`MtÀTéÍAÜíêJ8.ƒ€Õ¸É×,€½Óš°À{ölØXC‡bˆ!†â¶BÙháC 1ÄCôã£@bª¬2÷¾…œÖð €ëÖr19Öñ~G÷@â£Ü ˜ªG¢^u¿‡?«ýkG_à‡q âMoBê¡.¼‰zƒÇ~ à_jL¯*vCŽÜ´§ª¬ð6d¼9‰çsÈé9±£JG< à9øÀ¾ûÝ»»ü¶–\1ÄC 1Ä€c`ˆ!†¨ ³ýä8Ð5ðÕë Þç ÆYtÏp+sÿ8dƒiƒn~Ù@Öù½~CË÷,dóRD`û€7ü¤wÙÊÅ8¤M‡lÔÖÔ”îUH;~ +vüº¦t‹  9ê¶[¼à!gkHï;Hýþ¢!¯be ïBú½âKt1ü‘»v?d~yÀîÞÃþ· ÀÝߺ +éOß!ÿ´Ÿ!†bˆ!†øA`(¢W˜€lup7ä\ù³#yg³{çˆVðd÷€3þ¡Çy¾Ѐ0¼÷Aêô^sOëë:¤ÎbuÜ«<½àd3ÛßB´o üÆ|Ä}ï¥ß» +¿AtA@ÀóúTíø—-ø×ð ÅÈ8{ +^ò!DëÙ¯Mr2vŸl¼Ê…Z7!‚ sC¯Û´À-ȸý9ê¼à/Üÿu,ægü~ éTE²±*¸þ8¤¬×ß„Ìß@ú¾Î‡7 óà}æÙï\Úg ýçȸú "Høóº +1ÄC 1ăŒÛ]0ažhÈnAóõSCÔOŒÂo|®c°Ê¹²qy² = Ù|}ÑÒ>a¶>‡0bß@60»Üß/ mø5dq„é{²éy¢Š™{þP±ÀÓ:}Å7W7 õù)d<ôâÈɵN¨+ŠÏ!m_Ôt}¤,÷å=˜‚3î{ƒjN¾ À åû¢1>Žd~G!˜pÓ;ª¼±øbAÐËÍñ(DSûêÓô—Å×zúõšÂ[Ô!øÀºÿë܀Թ΅u,æ¢ü±·uâ=$5ÿ€zþÀVHŸ¶¸™ž†ÌA« ëÅ“¡ ëÏ›èì#ðî%Ï`°ÖÑ!†bˆ!†ènWÀDCöDCö d_1ý{Â|ñÆnЄ0f@Êö@p_MC˜¥^1ÁY˜†ß¼ ©÷´Mݼ à~øê¿Lyg-„1|Îý~Í}gе¹U1)ï.TßìZÜ‚l8Þ@} þ:—fQ-|n@´Çÿ˜óÜvȘîV»ü-dõB RãáÖÓ¡ÞK²þÖÝ{Þ:F]¾‡h0?lnTH°2ÜÙøü?=Èo2_ƒ·RHÃ-ÈøþÒŸWe?ž€Z´Üüv¿ +€üéÅAtj¥Ó`ã(nAÊ sâFÈÆµ(îE§ È~$ÍÖgK¤w7’¾õ€¬!ÿ±DucDcq²N¨ã$dX|Y¯Ccºë· ó]VŒ„1ün “‡bˆ!†â¶ì†0>÷B¨ý~<3a¤Ÿƒlž¾€0Ô+©Ù(ƒÕ-Æcff»~¢UÿÊýÓ]¿ß=ûÄÌñGFª›ã ÈFåÈf?zËPA6/@êa€íá÷ú&¤|»ßðÜ€h­®Â·¿b dã‘`ì D€Ž›²ùüÝoþßCÌ|Ó„[!›Úº—~  ó? ³« ‚³W ùj@„@o¢3ètÿ¸ ¿Ùù-DÃü)¤¾ìƳl‚Œõ,«ï íõ1Ä¢Gµ«‡!}¯ >‡Ìß« ›ð'‘-DøRo+5/‚ÌOÇÿ¯½ûµ´¾óÿž¾BJ(]ÊE—ªA‡rÐA]ÊÁÌ’ :è¢MlÆÁ‚8´Câ›8ÄÁZ’!6q‰Câ4V›®¦mâ‡Ø´‹Õ´KWÓ†8´M ©%µL-©¦kH5©&¼áÙ?>ÏÃ9÷Üóûž[uËçõ‚‡ûãœóœç<¿Î÷óùþʯ-¹¾[S‰ža£µÿ‹Ø•ºŒ&)Lò_–Xß*Üž:O†ïyçRß+•ºß<š:çÆ%b^H#ÃIòû+ßR¸Ì]N €;S…ã®)ø‘TáB»LjÒ;ܤv»jöjwª s*¿)U{q¢]ÞiÎj¶|kªày8à<’ímýp0U°=×¾çŸoã{::îH¿}ß{;ìIpOdsûnj?_HúïÊ ØïœIÕÆ¿š +ðoKSÃMa‡­§Î•ÿ´Ä¶®¥ÎÉ»–xí4gÚuŽŽ]p µFk,·ªkZ|©tçðÝ©ï‰ ®¡iAöÓ©}qdÌc'R‰”¿MòùÔ=ïå$ÿzÛ;ÚÅ`œ7Û÷›HÈ kЩûÔév}]òªK~ƒë©ýóÛ©óïáÔu?îÜN6'D.–½©àz4y·•õ¾ºŽ‡uƒ .c\Mû{I~uÉõmÕîöý‡[:u Á÷Sß߇3=ù÷zªl0¼Ž+òÑm!K»7¤ ++£ÍþÆéþ9 +&ÎeЄôéTáàá$¸-[º˜}Œ˜~wªÀø^ª}<kÍ’*|wß¹Ôç;™ñMæoO5‹¼1UhÞŽ&±¥Z`¼™J4\ªþ“]mÛ I~ómÃV}*uŽôRÁü±TAøñÌßtúÝÔqÿ^û÷u©ôãÙÜOû¥Ôþ[¤ ü© o;¼•äú{»’ Oæâ˜]ª–ÿ‰ll¦üËö±R×Ô8ݨïw§öÕ8'2h}*ƒ&é[é´7dM:o¦Z®|oÂãîÎä®>Ãï÷L*ÈüžMò†þ¾'µ¿î˜°žã©{ìź?}1µÃ¶’hWûß%—Çb-õ8Zû)kË¿•ªÝïœO}7~,uŸ¹~Ü‹Æx1[^Ü’Vë0X‰œèú˜¾ÐþýRª6àŠ +Ãý¯Í ÖåÚT°4®oj72ð¥húÛ}¦ÇS5BR…ø×Sµaã +tk©äŤÏϦ¤·R…ð®©ï® æI~*É\Õ‡È ø=Up¼Ôµ,]`+µb—Âu©DÍðÈÖë©Bïó©}{$k¾/¤‚š“©óaR x!užýîÐÿv¥£MÊf08Ù,k©ZÛUŒK0Ép0òéÔy¼]ÞIòO¶qý=© üñTÒáŠÔõóLª+Æu©c=©ëG§KXìJ%'=÷KIþ}éVSɨýc;º7-<îMKë©dÅè=ðöÔ~gcRs-µß^ÊøV"§RŸ+]^æ±§}¯ÑDÝ]Y¾uÔhpœlí>÷XSåuN¦Z^\ŠûøèõÝÿݨÿ‹x'õßÝ›.e—عš¦Ù‰Ë­MÓüeS¾Ý4ÍuK®g­iš𦹝iš/4Mó§í:¿p‘>ÇÞvIû¾ß¾ÿš¦ùLÓ4{f¼~÷Ð6«išƒíÿv5M³¯iš{Ûõ|½iš´ÏûNûX·ŽÏµÿÿÔŠ>Ó'š¦ù°}Ÿµ)Ïë>Û íö>ÔnûÕs³}íûÜÚ4Í‘õMZ¾Ý~ÎϬèsn÷ò™¦i~ÚlôÝvímǽ󳦎åî‘õŒ>oÔCcÞûꦎ߰/ιÝ÷Îx¿UøQ38~|ÞïæfµÇö@Sûý‹Míçÿ>ô^6MóMÓÜÞ>w_Ó4¯´ÿŸås#ïóÇSžûÓ¦®»ûÚ¿¿ºäg¹³©soœWšÙ×å´óèGcÖùã¦ižYïÞfpkš¦ùy3¸/ /×5u ó³¦îŸÛyM~Ìû¾½…õÝÐl>/>lß)‹.kÍø}þØ6ï—IËÍÍÆsë§M£÷¦EüÞÐï«úγX,‹å#µì´»Sµ“O¦jRžÈê›ç~=Õ\ô]ñz“ª•ûd}ù÷·ÿ7Uƒumkrý™öùo¦jôNfz³ÏÔî æüÙöõwekM"÷´Ûp.µǵ¢¸º}ühªõÆír[5Ç/§Žo7˜Ù•©ÚìkRµ6]K‡kÛßo—_Ku7¿ýîT ‘ëÛmÛ©3?ìMÓá¬Î¦Îùßo?‘µ­'Rµâã>÷3}úµõÔ¹8n̯dP˶žª¡ž5ÿ—SµÖÛíþÔy±ÈHéËžK}{R5§w´?ïj×BŸJ5á>™Á”Œ›ºNžÍæ&î‹lã¬Öw¥Î­“Yn~÷ƒ©Ú÷q-–ÝgI}å;gS5ß4ôü÷2hÕu<ã?ÏZª†|Ü@ƒgRçøv´˜4°Þ¡,?øì¸©fþÖ:£J%2ìLêžy±kÿw§®‡nÀÒ3©kþ›Y~JѤ¾®L}¦ýÙY3}Àް“¤£kSã—²ú~›]x2ûoÅZª÷h*¨»2o—+RÁëõ©Ài‘A×JøF›€ŸI6Óþ~¡}ε©ÂÓñ$ÿ|d]_Kõ¾#Ëö¾’J^Ü•Í}}÷¦ +pÝÝweu#¶wÞH#O¦>ïhÁúöT°ün.ítV“Ü—jJ=ÜDøõÔùñ?RAĉl,¿•Ú§ã®…Rçò,§²q*­aÃ#–ÏÓøí ú—o§WSçóÇg=q¡ý@*Qy6žãÝtœ'RÁ껿ϦÎåyÆt8—º·ü×1ínßsÒzi·åT* þŸæx¿Î¤×Sçë*ÆùzÓz޳žú ݘ-£óÀÊäàústv&u\u`8n`½­L«·/u=Ÿ_£S .êûÙ\¯º{ؼ†“´¿ÍìLæq,µï/Åç€o'$ö¤ +N‡SÁùãÙžÑä÷¦ +úw§‚Šÿk‹ë»=U8=œ +JÏ´ë=€¯²FåæTÁh*‘pUµæõTñDª4:à×Zjÿ¾”åF~¿º]ÿ73lo-Õâá‘T 2<‚ýÙÔ¾x/5SW£ûD*°Xo?ÏÃí:ϵ¯»"µ¯MÕ–žh_ÿÉ úvžÏ 6õtjwú/¤’G÷g|Ðt)ìNmÓðUçS‰Œá@j¸F> æ6ið¶EjãGO댲÷h6Ž0ê'™=ïû*œOÕ¯:‰4Î"# ß—º¾®Lï¥ÎëRçóþö÷nºÆ×³ñ~¶/ƒZÊYÞH]/Ó‚Õî|çP»ï´_•ùÆ>­6ëüørêó½žÙ ÜRûhÚ1¾ºgw Çáyàg%nžËø™ÞOï«J0Oc+}ÐÇM%x4Ë×þ?:&ú%·28ä2†[®tSôËêî+ïf{ZøÀGÃ%îƒpOS}>?lšæ+Íô>å[Yhšæ'íûl¥øMÓ|¹ô£üYS}óÿE»Þo5Õçó;Mõ¹}¬™Ýçýb.µûaׯ}®©¾ÌÝk45öÀ°Ÿ6Mó7íï·¼þóMõÏ]ïcÞëëcþßíóŸ ½ç‡Mõ…¾³}ÎZSýâßÞû;McÐýÐù~³¹óÞ¦ú6w~ÖlËatÙÕlC`šOY×fÐ×ø/f|ž¢7óË{›Á~úNSçøW›É}ä;¯ ­ã«slÏšê»?Ï6íj&“p]Ó4Ÿú{\¿ùqˤ~ôŸŸñº½CÏýy3ߨ +ßnf>'?1ò³îeߘ°Îo̱mó.Yÿ÷·°¾Ñ{AçÖ-¬sÜX!k,œáå`3¸†Þnêxκ~–±ï|6‹Åb±X.‹åW.QÞaWª¶óxª¦ìîT­òªû!^—ª1êj>îÏüµßw¦úàµ]ÇOS5²O¥jLÕXœJÕf¼”úëírwªÆætª'x#Uó8iäøIö¤>÷Ó©Ú¢]©c7Ü|÷™T‹„®ìÙ‘uLšÊi\ï+3¾èÙT­ßÿœÁüßW´ë8‘ªQüeªÉ©V—ÊZjöÑ&ý/¥¶m´ò#ÙØú¥Œïóßy"óO ˜TMß ý0u<ÓnÛ ¬·/ö¦j)¯HãÝØOevmþáÔÔ‰Iµd™ä\ê»)ó·^ùEÆ7£/Õr`øýæ©aýì„m|-ÉoÍxíÝC¿ŸË`¼‘{Ûõîóš#slÓ©ûqR]bη¿,“§ÿë<•ªõxjúÍU­©Oª‹È²žÉæ±^ÏòãšÜ“Ç&©ãóÒ’ë[ÖÁÔ5Óµòz9õ¹æi ³¨íš6.{£yí¨[Sñ-©ÂßóÙž&ˆ¥ +êW¥‚›G2ß¼É{S…”á íTû¿7²±iëw3(,¿—Á|ÍÝDI­Ý`w—Ú/RÉ‹ÃY¬ïãßkôÏ>ž:–GSÁÑ/SÇ5Ù ß•ÁØ÷¥ +ðW¤ +ï§öïðœæ]rå³ø¯M÷·Ïù ýù|ûØáv»ºé¾^HS¿¾Àç\•›SI¡áBèéÔ6Nêz2šyuÊúwe¹ønÊäÐN máLîg|!Ó§©»­ÏñœçS ®×SçäYìþùp’ÿœñÍê×Sç˳©± :k©ëé¦Tóòî¸êŽózê8ýQê<<ôÚS ÐEÆP¸!㻜IÝfþl'†~¤}ý³© ó¥ >çKÝGÍX÷'S])~™ºÏv÷—[2}àÊ¿Ku[è¦öRêXþÑ-àlNVžÌæÁöæµ'ã÷õ‘%×—Ô~õR.îT¸Rß¡W¦ÿ“©{Üv•A.EÙ. ûKò ©‚Ì©Tn;úú_*L?˜ªåx2‹õyÿd6èN§úо׮ïúTáå—©‚åŒø(ƒAú^O‚_ËÅ-hÍrEj;¯Î|ßÝ©@ú›©äX…ïã©ýœT@úF ‘Iìcþ÷lÆRGÕJ*¨¾/ƒ€áÊÔ>>Ü>v"lZﲃf-ªÛWÏfãµu<³P£5™Ófkx:Ëõ—Öb`x0Á»’üö„çÊjêÚINÍx|oêZ¿ªí=‘Åï£ýÃ;oµëü«Tð÷@êܾ;ušö>/¤îK¯¦¶Ïïþ÷¥·ó¥Œ¯}2óÝÃöý>|>uŸýšÔýÿ™Tøbª•Ëó™Þ'3¸Ísü°}ÏÑA¯ißû_ͱŽIÆ%â¾”å[³kQòF–¯ý¿5›“@rqkÿ»Ù$®ÌàŒ q•NÌ~ +ôÓÅJìJHNg{‚⃩õúöçS™¯ÖXW»yªÐy(ƒQþ‡ND»‘¿_k?Ó.§³š. »Û÷ïü;›JH,³ÿödÜ8”ÁèÚÓtÁæ“í2Dúý‰LÑ{U>–I„n»:7¥šüžIßÏfù³ñ©T¡v¸«Ã…Ô>z!³Ï…Ñ@溌üí@Æ'KæqfÎçM +V“ªIý¨%ÞŸñxXwÇw™ä˹¡ŸW¥îO·?L%ØîÈâ÷äÛ²1ay¾ÝÞë3~*¼Iöf|ks©šÛy oûù ÿOê~*µ}Ç2HdL›þm«ÄMû£Ûrª¥Å2÷ê{²¹©ùéLo½3M×ÕjÔV‚å#cþ÷rÿ^\Ö'RßÝì87f4Þ.Çrñ’¾pÙ¹ €;3˜ÞçBª&t;šü1UÓÍ'¼ìð]A³{ý±TAýÆT³ó3íïÝrw&ïÇót8×þÞMÛw:Õô÷TûÜSíãÃ#S?Úw£5·ëŒ¾HAîÁ¡m½;³û2¨áZ¤¿ù¥ö± j#MÕvN[¸ +k©}úl6/ë© àÙ,?ÝØ±Ôy<œèÙÝþÙ&øãúB³Êco¦y%oÍx¼kÕr4Ë¢ÇÛŸodÐ$ý…LO¶,êBê|ü«T÷¤Ñšäi  ¿N†£Iƒ«Rçñ¿›ãý‡ƒþáûŤ.W¤öÅ£™ÝMjøñáóžîÉäÖ[©­—ˆ›'Ù7Éh‚5©ófÒT‡³ÜœÍÁöz¶6>Á">:§ºý~Õ˜íYµw2_wè­íLìI4žHL“*ô®:øß—*˜j>•­·.è +›Ý¼ìצöÕƒ©ÂêèüÂW§jè¯Í †°û{ªÀÚõß?ã½Ï¥’¤­wSÍ®Ií©Z§Ç3è;;oà‰Tp.ÓkÛ’ +6_ÏåßßûŠTÐu(“û¿/j_j_ÎÆ€ðBª&÷Å,^u:[Ü:^È`ଗ2û¸Mòf¦wùØ?ôû´ûÂëÙX¨¿ÜÏìÀmíó~˜JÒ­g±Ï.ƒ ëK©ëzÕÐùTÂèOR]­Æ ä7+È~¦]Çþ‘ÿwÓ´Íj†>¼þáu¼—ÙMü' Ún¥1Ú`–{3y Ä—çxý8ãšÖŸÙÂúve|‹#K®/Ù8¥hçÕ\œÚÿÏf|®íÒ]c[IÀ@/ü½¦iV½ÎµT`ôB*ã4D¿œ +`þÍ +ßëÓ©BÆz*0_żï_LÎÿqªöéö=žO’×$ù+xŸ½©àúªv¹6ƒÂM©æÀ×fòÀmݶ}Ú¿ëíß]+ƒSíc]‹‚{SΣ ¾÷¿LÙ¾Ïeûûi^Lo$ùç[x}WÛÿd63§Rç÷Ñ,_¸þV6w3Y•õT;m\áùÕOeú9þJ68w9{1É¿òø®TbçBªFý—©LÆWãœOãÃÕ=”ÁŒ«ðnêÜùa»îqÐLòçX×=´VÖñÓ’«ŸÈ »ÀÙÔýë—SÖ¹ˆý©ñv§‚½nßÝ’éçõÞÔþM0\H]Ë&¿ÍIœ§“üŸK®o\Àü^’_]r}7¤îÿÃçØzêûd»›Ç>¯•Áé Ê;i¬رV]‹w0ƒZÊnʼ?OM¥—Ìßy–]©ÂÒ©‚å£Y¾©õ¨ë3˜ÂîÿKmóS©ÀÿBV×¾ 'Mõö©TpmÆR/¤ +t×dÐGyœ3ô¯}3Éï¦>ì·wS…¸³©n³¦ÛÚ‰ÞKCëÙ<-á¼v§Î³'³±Vs=UþÍÔ(ì[õ|j?¯úš<ß®wZÔ31¯#Ùåµïd0KÄ5©ò?j×y"ËOÍv,ƒûäð5r&³Ïë×2þ^÷d–þoÈæàÿ\ê^°ŒI³zYr}I%#Fï%¯eûƒÿ¯föu±UgS÷Þc™<« +0IÓ4«X®kšæ[MùIÓ4ÿbäñ?k»aïukÓ4Ù4͇MÓ|nEÛ?¼¼Ò4ÍÛCïmšæÚ÷û°išç¶á=Ç-kMÓüiÓ4?kšæËMÓ|¢Ýûš¦y ÝÓnßð¶hšæž¦ikšæ‹í¶ÿ¤Ýÿ׵ϻ¯ý{ßÛs°išo7Óý¸išO½O·M÷ÌñÚQo7MóÐÈ6îmêÜúÁŒ×~·}Ï­ìÿ]M럎¬û'Mí×½K®wÚò™¦Î±Uy»©ëeÖû~väuߟã5Ÿ_áv^*ŸmfÎ}CÏÿ›fãùxsÓ4_išæ/š:÷Üþþõ¦iîœcÝ»š:æßŸs{ÖÔ1}®Ùx\ך¦ùŒ׎ޓg-ß™°ž¯ÍxÝï =÷»Cÿ?Ðnÿ¢þ{3¸Ÿ¬5ußë|eƶüÁ„u~kÆëf-¯ŒYçs[XߧǬožkpÒ²·išŸYç<÷‚e—µfPXµ›:ï¿Ð4ÍíÛø,‹ÅbéŲŠ.¥šà]H5!ûùïJÕBžOò÷·ø^¿‘ªù?“ª ÚŽi/Uë÷OÇ<¶+‹ap_ªæìšT“ÌwR­$æ™ÖiWªèÉlÐëtjL›»ó\ûÜÔþÝ5ÉÝŸÉ-ivLIDAT&9˜:Þ·ŒyìúLo‰q_ª†rZ+ŠõTíãoMyÎîTíçè€lï¥öÕ<ûdšÛSµeû‡þ×Õ¶Ëö bÙ¹9U{w3?,âLª»Ã73ßõ1n_¾žé5½Iu‰x=ƒn—›cI~}ŽçíËÆi?Èôq7v§®ÙÛR×H·_϶¯}+u ŒÖÄîKµ²¹1ƒ–çÚ¥›qdܵzk3Lr!u.ýÝ”çŒûïf| …—Rµ¼ãúZß™S°=’ä÷Ûßf0ü<ÎdãØÃÝ’¦5gžufÔ[©.Ëö¿.u>ŒÎxp}–k‚¾–:/Fƒ|8óÍÒ2θZøy®éeíNíïUŽkñ~êX½™úÎ\äܦØJàêT`{êËÿéŒ/ßž*Hn¥öîö½NvŸÊöÞnŽK,jOª°x:U»1µ¿®Ì`Äíy +¢»2’ÁÔ\ó¢_M$ÝgêŽÉ¡,7ÂôZjÛdc0ÿ±9¶é@j_Œ ,ΧŽñ¬&õ»R…æýíßgSçıl}¨‡Rçs„MÛ]3ë‹é†Ô~ê–¼"›3ŸMí³Óíò~ï +ól5ûùÌ7êûîÔyx÷¬'î0¯¥Óy¯½ #ÿ;ºŽ'%ñ¾›ñƒðuÖS÷±§³ü}ì@ªÙø´î?£Yn*̽©ã;nàÉiÓ¹þAÁ÷¹TÓÿ.ˆ¿¹ÝžY]ŠÞj×ßÏSIËî³¾ä7'ló«?¥á;©ã²•ïŽqÁõ¬q$¦y,µ?†L]÷ËÜoö¤ÎÏÑ$ËÝÙzbtœ}©ïöq áEOW¯eu]ú€QK6øDSM¡ÐÌnjý™¦|~É÷º§iš5Õ{Ñf¬Ë,o7Õô~ëê>û¾¡ÿíiM%g5§]ÕòJ»tïkßÿž-®÷êfc“ß?hª)è¬×ím÷ñ°7Õ¤zÖkw7ƒî6MóÕö«ØO÷6›à§©ãu1ŽÑ¥X&5`uìn¶¯éïvøF3ß9:¼üdÌz~ÞT³ïIçÞ=Íæs|Ô¢÷™]MÓ|ª©¦õóú°Y¬«Ï¸ã;és|¿߬üº¦ºKt~Òl¾¶jêÞñƒvÞTóþWšÍ÷¥ƒÍÆî?jÆï÷;›É݃ޞðšE–qMëÞl­;иí}l ë{nÂg_õ½£;†£]¤ñaÓ4ÜTˆ«·i-‹Åb±Œ,‹¶XKÕú>ªõ8’Ù5¾ÝèæËÔ@<—j~¢]Ç¢ÍÕ—ñvªÆêDÍõ—Ùý¹Ô>×4þ;©Ú¨k²ý£¿Òþìj»f͇²üÓæj4oJÕÌ?™Ùƒ3íJ5©ÿdª–ñHf×Ì=”ªùÛŸjÁðD’ï-¹Í£v§¶½«aŸÖÌù£`Ò,ÝÀ’‹ž“ŸNµX¦ÛÂÅp:u¾,3SÈg|rR5ܯ¦ZŸœÈæó¥0לH÷Óöó®Tíû©ëäPæo>ßùR’¿àkFMkâ½Þ¾ÇóÙø]p_ª6·«±?Ÿºž~{Á÷þlê<^Ï¡l¼î÷´Û0n½d±Ót÷óa¯fó€‰Ó¬gð]ð@j Ûjíÿ©lîbu(«¹Ïwv§î÷,ñÚõTMÿ±ÔgŸ65)° I\—úÒ¾%õÅ?ïÈçßOh®ÊüMÖ¯N0L,ŸÍÅ Ä>j¾z[ªÙõ™Tòb™Ñ“»þ°¤‚áBX€íÏö'6FÝvÊê +†k©þ‘Tr¼ý{ž±f¹§]ï¡TðLª Å*ωá€x+…ðn-•¼›,½™äŸ-¹înÆ„4kÄñTë­táøs6•4|7uJÝ?Îdü½ïêÔµrm*q²¿]nl—­6«~/uïZEw©.ùÛÍ€0êLûøÑ >ë¸é§îéoeòñØ•êbñl6v?Rqwêód6’Ì7žÈ¼&׋:•Á›ßÏøî‹:”º›JpG’üSÿB*á2¯õÔñî‚~ÓõÀ%4oà©ô™TP>o0Ü x"É?™ó5·§ú^‘ªõ_ÅkËêúƒ¿™åPz,U›|e*0x3U|&Uè¿&ÛhŽ&ºAgÍ¡=ê±Ô±™Vk³7Uíj‡ÞJø—™®éTÿPû÷´±&:»Û÷û7 ¾×_d´Ír}¦wºëRûðДç Ú¶R}¸Íì)'WídêÍjúwcf\NΤÎçU÷¥¾'µ_÷OyßWS ºÿ'õÝq,›ç.Yò~*@LjÜ[2¾¥ÃÉÔ¹ù½ÔÀ‡‡ÛeR@~*uî­ªßûª‚ëS©À¸ÚÿeJ}ÇžÊøDÈ¢Ždzà¾Ô÷À4'3Äï­ÄvŒy]í׫©Ú½E¾È¦ +yó6Cý\*x{?•h¸MþgùZª6êÌzâ{Sûîá jõN§j®þËÈs»Ú¯»2hN}6°¿™å’“û³Ø>¾7Uèþ—s<÷`ê¸jÿ~?•9–é5@»S÷§3ôð½T"`žÖ +ϵ¯›g;£½OÕ±­—“ÇR-¦5Ñ?Úw«œå`-Õ|þÉTíí¬ë–u!unÍj›;wVU[{1œN]wÛ5ç{7ÓÁ“ –9Ω ÷ƒÔ½o™ã¿žúîy+uOüxÆ Úéf£9’Õ%VweuÁõ©ÔwÉŸfuƒgJ}¯¼´¢õÉô@’|&uL?–º_žLÝãßm—bë)øH˜–Ø“ê;ùñTày,0^“͵3çR€7³±ÐÙÕšÊôBùZª÷HûóñlïTk‹ø½TÁÿÍzâ&M'øÙlYØ™T`ü» ¾ß+©cökíßÝÈÓ³¦íµ+ƒÐç‚ñöTðÞ/¤Î“ãíºÎ¦>ïõ©þƒœ_ï¦ÎŸy?ïÞT°ñhëë=:Õ[çñ,Þgy'YK«#™/xÝîÏ»74>™­7¥îœI|/g{kç©õÜ ÞI]kËŽ[²ˆ}©„í<}Á×ÛeZÂ`œ ¼æh*é¸êÄÇo¤Î¯U8•J¢_Ñú’úŽ~9›§\Ö‘ÌN—©I €IÍ5^̋ٞck©¤âª‚ëS Àº*GSû~UŽD>²Fk© üÙT ö^»|ÙsŒß“*ˆÝ˜j9ðkI~Ú¾nRÿÿ=©¦ÝÀ‚£Íá/…¯¥¶çÆTx:mç¼Ä¯¤ +pï¤&“úØHµ¸#UƒôñÌWØÿrê3t €¯¤’‰m=:¦¯g5#k¯­`I}ÆgRAï.ñúŸgcðr*uÌ\^—:&·´ËM© +µÜgR‰síÒmS†þwU»\™:WÇ%Uæq!µý‹Œ± +7¤øI#ìO2ÏXÛaO*95­ úŶžJ|=íkò?¯Ý©{£Ym€;ªTîÕÔwÍv¶»/«kZŸÔ¶¯º̪×ùb’ÿ¸Âõ;Èp`-U³ü`*p,‹×¨ìM‡×¤Ú£™\›°7Ä^“Åš”o·nʯ£©ZÑW³¹ø­©îûYnp»a݈üï§‚ôYçZªÐû`æ[á¹TÁ¼ëÆðT°¸l·†.añr’½ä:V©k¢ûNælrÔŸ¥öÿ°“©Âÿ[©šÆ¤öÛMíÏÛRÿNún^—º«ÃèTo“œOwË$xVe_ª Ë¥N|ºÍ¥üǹ:u=”j‘rS–R/¤>ï;Œ…bP9€% '¾˜ñóŸÉ iv×<û½L®µíú—ŸI5?¾-›§‚Û› +ª®Iiê½ÝºA'5¿7Uí +³ï¥ø[6ñÕ úÈÏØìN“«RûpVaø¹TàÔ dø£Ô±\vfƒ®¯ýU©ÀûÉ\ºAŸ>“ÁèÜ·dùsiÑ©­>*^Lòo/õF¤jZeò<÷gR‰ÂïMxübÚ:hïÙ °v"uÿÙ ¤.bWɳë3÷c4)°žÁØ §S÷™SÙ9cÂ\Ö†™A¿Únà¥ëSM™oZ®hŸ÷zªÉÿèà~»RÍ“?– +RÿáÈã»S…Øü'ƒ@ðšŒoŠÿTé¡TöH*Ññt–k6ùv»®«²Øˆó]¢âþÌðn8ÐxÿB’ß\hK7ê=IÕD®¢;À¢>—úI%¯þÃÖ5i À²—Rɧ2b÷ÁTp;š8“y¯¸9u]}2ƒÙ=¶b=uÏ<• +|O¦‚þ÷£Æ€®}¹*ÄþÑ”çïJÕè<ðÏæÀë©ë©æóîNÕüïoßiúd0¸á•Ÿ85ô¼?É î‹©ÄÇï,ù¾‹N7×mǼÍÏ»¹Ø»©§¶:¯ù車²Ã©Ö ݘ#PYKÕÀ>ÞþýNj4ò­øS5ÐóŒhþQ°Õ„Évø¿SçÓkCÿ;Ÿü'5fÂo¶Ë® Æ~¸&ƒëm’Ó©€ÿTê3žÎÅÓ€žNÌ3EÓ/RMÝÿ<Ä—Œðƒöï›Rc"|5ɧS3CÜÙ>vpÌë»Ï»{Ìc·¦Î››Ûõ<é¿,1©äÉ'³ºšÓ¿MÕ6¿¹¢õí4ÇSûn§ÿgR‰Y¾E 0b8p<îšóµ×¥j}_ùÿ—R- ºÕº9îïNÿ³ú«_jÝíÓšðN)Wµ¿ß‘ +àŸšü’‰þkjJó·ÎxþZ*ipc*ñ0iÊÀqno_÷ÆÂ[9Ù_g0#BR‰“§R­?Ž¥ZL|%¨?Ö>çÓíÏÛŸO´?ïúy[ûúã©ýózjŸwý÷«_ø_'ùg©ÞN®xÝ—Ê©ÔyúO³3GŒõ‹Ôýc™ë ˜`xÀn´'’üç9^ûùT!}5ýw¦‚Øo¦¦‡ëšý<Õ”÷?­f³·Õ=$C.Ötck©}v¸ý»éûÝTׂs©„Ä]©ãsc&Oø©DËkìï/¦‚çn°¾›²úÀyw*1ñà„Ç»iôŽ¦Î‡»RûùWSPNµª8›J,­græDû>£Ïô½í{ÝŸ:×—ujè÷³©n2Ýç»&“G¿ßŠ÷SÍé_Íå7ŠúZvÎà„ð‘0œH’ï¦j^÷gvÀðg©ZØn*¹Ý©€u=Ü]™ +8ïNÕä-3Bþ¥p 8]‘ +ÒÞL­oeû¸»'¨<“» ¬·ÛóÔ„íùyc9|)5NÁ+©„ÆÇRÇä×W¶Å›}*t^;뉭c©{ÖøI%BžOü©‚ÃëR ˜n +³kÛŸÝÔeç3˜Ê,Y¬«ÅžÔhò·µïq[û÷¼=žM%àÞÌÆ.8›]í÷3I~kÊëv¥G2¨%ÿFû÷]©èT"áñ\~ýxoH¥w§‚ñ+SŸéøÐòn¶¯VuOªyûM©àïšT²åƒT"bR`×Mñ÷Rûš‡ÛŸÝø gÛu.Òm`{RÇýÑT»Uï¥j±¿™ÅgKø(¸:uÜnL]SW¥Žó…Ôyq:•´ºÜæ†.¢Ñ@’|-¼Ý‘É£¹LÕ4îOŸKÕÌÞ +ø^L&'ùÞª7ú"[K㤒]mìz*0=Ñþ|/„]ê¦Ö?Hˆ§RAÿ©„Å•¹¸Ý:{SçÅ]© ¶ d'é‚Ù2Ø¿—Ã(ð;Ú¸ÀîTàu6¸kjýXªú•©ÀîÍ$O§‚ÍGSýþç£W[»+õy¥>ë¡lî»}2¼žZNµËÅHH%cnK%iÞK5™?žn'Ù•jB6Ûß½ ×Æ%’-þTMþ¿óøçSAæMíó.´ÿ¿6•¸\úûoÕZjÜ‘ê«ÝýœÔgûÌÈr:ƒþâëÙØw|^ÝrW¶¿_ß.7eã u÷gçÏÀÀ6™”HµüãðûJª›À… {{·ýß[ùV^ž®KàûSùþÔ¾º*ƒäö¯ø=O¥jÓO¥Z¼Ÿj0©+=1-ÔôqϦšô3P^Õþ½¿}Ιö9GcÚ®e­eò”w³¬ÇhïÌ0+TK€ç³yZ·RI—£ÿ6ìhó$:·f0zûû12;\6I—©_¹Ôl? è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è è èÿ§ÐoiOWIEND®B`‚ \ No newline at end of file diff --git a/examples/web/text/text_unicode.html b/examples/web/text/text_unicode.html new file mode 100644 index 0000000..b083b30 --- /dev/null +++ b/examples/web/text/text_unicode.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/text/text_unicode.js b/examples/web/text/text_unicode.js new file mode 100644 index 0000000..782b2c4 --- /dev/null +++ b/examples/web/text/text_unicode.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="text/text_unicode.data";var REMOTE_PACKAGE_BASE="text_unicode.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5280832,DYNAMICTOP_PTR=37920;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="text_unicode.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":324,"maximum":324,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"pc":___lock,"z":___setErrNo,"ab":___syscall140,"Ra":___syscall145,"y":___syscall146,"l":___syscall221,"ma":___syscall5,"x":___syscall54,"T":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"S":_emscripten_exit_pointerlock,"vd":_emscripten_get_gamepad_status,"kd":_emscripten_get_heap_size,"$c":_emscripten_get_num_gamepads,"R":_emscripten_get_pointerlock_status,"Gc":_emscripten_glActiveTexture,"wc":_emscripten_glAttachShader,"oc":_emscripten_glBeginQueryEXT,"hc":_emscripten_glBindAttribLocation,"cc":_emscripten_glBindBuffer,"Yb":_emscripten_glBindFramebuffer,"Rb":_emscripten_glBindRenderbuffer,"Kb":_emscripten_glBindTexture,"Bb":_emscripten_glBindVertexArrayOES,"rb":_emscripten_glBlendColor,"mb":_emscripten_glBlendEquation,"lb":_emscripten_glBlendEquationSeparate,"kb":_emscripten_glBlendFunc,"jb":_emscripten_glBlendFuncSeparate,"ib":_emscripten_glBufferData,"hb":_emscripten_glBufferSubData,"gb":_emscripten_glCheckFramebufferStatus,"fb":_emscripten_glClear,"eb":_emscripten_glClearColor,"db":_emscripten_glClearDepthf,"cb":_emscripten_glClearStencil,"bb":_emscripten_glColorMask,"$a":_emscripten_glCompileShader,"_a":_emscripten_glCompressedTexImage2D,"Za":_emscripten_glCompressedTexSubImage2D,"Ya":_emscripten_glCopyTexImage2D,"Xa":_emscripten_glCopyTexSubImage2D,"Wa":_emscripten_glCreateProgram,"Va":_emscripten_glCreateShader,"Ua":_emscripten_glCullFace,"Ta":_emscripten_glDeleteBuffers,"Sa":_emscripten_glDeleteFramebuffers,"Qa":_emscripten_glDeleteProgram,"Pa":_emscripten_glDeleteQueriesEXT,"Oa":_emscripten_glDeleteRenderbuffers,"Na":_emscripten_glDeleteShader,"Ma":_emscripten_glDeleteTextures,"La":_emscripten_glDeleteVertexArraysOES,"Ka":_emscripten_glDepthFunc,"Ja":_emscripten_glDepthMask,"Ia":_emscripten_glDepthRangef,"Ha":_emscripten_glDetachShader,"Ga":_emscripten_glDisable,"Fa":_emscripten_glDisableVertexAttribArray,"Ea":_emscripten_glDrawArrays,"Da":_emscripten_glDrawArraysInstancedANGLE,"Ca":_emscripten_glDrawBuffersWEBGL,"Ba":_emscripten_glDrawElements,"Aa":_emscripten_glDrawElementsInstancedANGLE,"za":_emscripten_glEnable,"ya":_emscripten_glEnableVertexAttribArray,"xa":_emscripten_glEndQueryEXT,"wa":_emscripten_glFinish,"va":_emscripten_glFlush,"ua":_emscripten_glFramebufferRenderbuffer,"ta":_emscripten_glFramebufferTexture2D,"sa":_emscripten_glFrontFace,"ra":_emscripten_glGenBuffers,"qa":_emscripten_glGenFramebuffers,"pa":_emscripten_glGenQueriesEXT,"oa":_emscripten_glGenRenderbuffers,"na":_emscripten_glGenTextures,"la":_emscripten_glGenVertexArraysOES,"ka":_emscripten_glGenerateMipmap,"ja":_emscripten_glGetActiveAttrib,"ia":_emscripten_glGetActiveUniform,"ha":_emscripten_glGetAttachedShaders,"ga":_emscripten_glGetAttribLocation,"fa":_emscripten_glGetBooleanv,"ea":_emscripten_glGetBufferParameteriv,"da":_emscripten_glGetError,"ca":_emscripten_glGetFloatv,"ba":_emscripten_glGetFramebufferAttachmentParameteriv,"aa":_emscripten_glGetIntegerv,"$":_emscripten_glGetProgramInfoLog,"_":_emscripten_glGetProgramiv,"Z":_emscripten_glGetQueryObjecti64vEXT,"Y":_emscripten_glGetQueryObjectivEXT,"X":_emscripten_glGetQueryObjectui64vEXT,"W":_emscripten_glGetQueryObjectuivEXT,"V":_emscripten_glGetQueryivEXT,"U":_emscripten_glGetRenderbufferParameteriv,"he":_emscripten_glGetShaderInfoLog,"ge":_emscripten_glGetShaderPrecisionFormat,"fe":_emscripten_glGetShaderSource,"ee":_emscripten_glGetShaderiv,"de":_emscripten_glGetString,"ce":_emscripten_glGetTexParameterfv,"be":_emscripten_glGetTexParameteriv,"ae":_emscripten_glGetUniformLocation,"$d":_emscripten_glGetUniformfv,"_d":_emscripten_glGetUniformiv,"Zd":_emscripten_glGetVertexAttribPointerv,"Yd":_emscripten_glGetVertexAttribfv,"Xd":_emscripten_glGetVertexAttribiv,"Wd":_emscripten_glHint,"Vd":_emscripten_glIsBuffer,"Ud":_emscripten_glIsEnabled,"Td":_emscripten_glIsFramebuffer,"Sd":_emscripten_glIsProgram,"Rd":_emscripten_glIsQueryEXT,"Qd":_emscripten_glIsRenderbuffer,"Pd":_emscripten_glIsShader,"Od":_emscripten_glIsTexture,"Nd":_emscripten_glIsVertexArrayOES,"Md":_emscripten_glLineWidth,"Ld":_emscripten_glLinkProgram,"Kd":_emscripten_glPixelStorei,"Jd":_emscripten_glPolygonOffset,"Id":_emscripten_glQueryCounterEXT,"Hd":_emscripten_glReadPixels,"Gd":_emscripten_glReleaseShaderCompiler,"Fd":_emscripten_glRenderbufferStorage,"Ed":_emscripten_glSampleCoverage,"Dd":_emscripten_glScissor,"Cd":_emscripten_glShaderBinary,"Bd":_emscripten_glShaderSource,"Ad":_emscripten_glStencilFunc,"zd":_emscripten_glStencilFuncSeparate,"yd":_emscripten_glStencilMask,"xd":_emscripten_glStencilMaskSeparate,"wd":_emscripten_glStencilOp,"ud":_emscripten_glStencilOpSeparate,"td":_emscripten_glTexImage2D,"sd":_emscripten_glTexParameterf,"rd":_emscripten_glTexParameterfv,"qd":_emscripten_glTexParameteri,"pd":_emscripten_glTexParameteriv,"od":_emscripten_glTexSubImage2D,"nd":_emscripten_glUniform1f,"md":_emscripten_glUniform1fv,"ld":_emscripten_glUniform1i,"jd":_emscripten_glUniform1iv,"id":_emscripten_glUniform2f,"hd":_emscripten_glUniform2fv,"gd":_emscripten_glUniform2i,"fd":_emscripten_glUniform2iv,"ed":_emscripten_glUniform3f,"dd":_emscripten_glUniform3fv,"cd":_emscripten_glUniform3i,"bd":_emscripten_glUniform3iv,"ad":_emscripten_glUniform4f,"_c":_emscripten_glUniform4fv,"Zc":_emscripten_glUniform4i,"Yc":_emscripten_glUniform4iv,"Xc":_emscripten_glUniformMatrix2fv,"Wc":_emscripten_glUniformMatrix3fv,"Vc":_emscripten_glUniformMatrix4fv,"Uc":_emscripten_glUseProgram,"Tc":_emscripten_glValidateProgram,"Sc":_emscripten_glVertexAttrib1f,"Rc":_emscripten_glVertexAttrib1fv,"Qc":_emscripten_glVertexAttrib2f,"Pc":_emscripten_glVertexAttrib2fv,"Oc":_emscripten_glVertexAttrib3f,"Nc":_emscripten_glVertexAttrib3fv,"Mc":_emscripten_glVertexAttrib4f,"Lc":_emscripten_glVertexAttrib4fv,"Kc":_emscripten_glVertexAttribDivisorANGLE,"Jc":_emscripten_glVertexAttribPointer,"Ic":_emscripten_glViewport,"Hc":_emscripten_memcpy_big,"Fc":_emscripten_request_pointerlock,"Ec":_emscripten_resize_heap,"Q":_emscripten_run_script,"Dc":_emscripten_sample_gamepad_data,"Cc":_emscripten_set_click_callback_on_thread,"Bc":_emscripten_set_fullscreenchange_callback_on_thread,"Ac":_emscripten_set_gamepadconnected_callback_on_thread,"zc":_emscripten_set_gamepaddisconnected_callback_on_thread,"yc":_emscripten_set_keypress_callback_on_thread,"xc":_emscripten_set_main_loop,"vc":_emscripten_set_touchcancel_callback_on_thread,"uc":_emscripten_set_touchend_callback_on_thread,"tc":_emscripten_set_touchmove_callback_on_thread,"sc":_emscripten_set_touchstart_callback_on_thread,"rc":_exit,"qc":_glActiveTexture,"P":_glAttachShader,"j":_glBindAttribLocation,"d":_glBindBuffer,"g":_glBindTexture,"nc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"O":_glClear,"N":_glClearColor,"mc":_glClearDepthf,"lc":_glCompileShader,"kc":_glCompressedTexImage2D,"jc":_glCreateProgram,"ic":_glCreateShader,"gc":_glCullFace,"p":_glDeleteBuffers,"M":_glDeleteProgram,"L":_glDeleteShader,"K":_glDeleteTextures,"fc":_glDepthFunc,"J":_glDetachShader,"ec":_glDisable,"o":_glDisableVertexAttribArray,"dc":_glDrawArrays,"bc":_glDrawElements,"I":_glEnable,"i":_glEnableVertexAttribArray,"ac":_glFrontFace,"n":_glGenBuffers,"$b":_glGenTextures,"t":_glGetAttribLocation,"_b":_glGetFloatv,"Zb":_glGetProgramInfoLog,"H":_glGetProgramiv,"Xb":_glGetShaderInfoLog,"G":_glGetShaderiv,"k":_glGetString,"s":_glGetUniformLocation,"Wb":_glLinkProgram,"Vb":_glPixelStorei,"Ub":_glReadPixels,"Tb":_glShaderSource,"Sb":_glTexImage2D,"F":_glTexParameterf,"f":_glTexParameteri,"Qb":_glUniform1i,"Pb":_glUniform4f,"Ob":_glUniformMatrix4fv,"r":_glUseProgram,"h":_glVertexAttribPointer,"Nb":_glViewport,"E":_glfwCreateWindow,"Mb":_glfwDefaultWindowHints,"Lb":_glfwDestroyWindow,"Jb":_glfwGetCursorPos,"D":_glfwGetPrimaryMonitor,"m":_glfwGetTime,"Ib":_glfwGetVideoModes,"Hb":_glfwInit,"Gb":_glfwMakeContextCurrent,"Fb":_glfwSetCharCallback,"Eb":_glfwSetCursorEnterCallback,"Db":_glfwSetCursorPosCallback,"Cb":_glfwSetDropCallback,"Ab":_glfwSetErrorCallback,"zb":_glfwSetKeyCallback,"yb":_glfwSetMouseButtonCallback,"xb":_glfwSetScrollCallback,"wb":_glfwSetWindowIconifyCallback,"vb":_glfwSetWindowShouldClose,"ub":_glfwSetWindowSizeCallback,"tb":_glfwSwapBuffers,"sb":_glfwSwapInterval,"C":_glfwTerminate,"e":_glfwWindowHint,"qb":_llvm_exp2_f32,"B":_llvm_stackrestore,"A":_llvm_stacksave,"pb":_nanosleep,"ob":_time,"nb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["le"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["me"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["se"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["te"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/text/text_unicode.wasm b/examples/web/text/text_unicode.wasm new file mode 100644 index 0000000..20b1060 Binary files /dev/null and b/examples/web/text/text_unicode.wasm differ diff --git a/examples/web/text/text_writing_anim.c b/examples/web/text/text_writing_anim.c index 9ebd8f6..a8315b5 100644 --- a/examples/web/text/text_writing_anim.c +++ b/examples/web/text/text_writing_anim.c @@ -18,11 +18,11 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; const char message[128] = "This sample illustrates a text writing\nanimation effect! Check it out! ;)"; - + int framesCounter = 0; //---------------------------------------------------------------------------------- @@ -31,7 +31,7 @@ int framesCounter = 0; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -44,7 +44,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -68,7 +68,7 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- framesCounter++; - + if (IsKeyPressed(KEY_ENTER)) framesCounter = 0; //---------------------------------------------------------------------------------- @@ -79,7 +79,7 @@ void UpdateDrawFrame(void) ClearBackground(RAYWHITE); DrawText(SubText(message, 0, framesCounter/10), 210, 160, 20, MAROON); - + DrawText("PRESS [ENTER] to RESTART!", 240, 280, 20, LIGHTGRAY); EndDrawing(); diff --git a/examples/web/text/text_writing_anim.html b/examples/web/text/text_writing_anim.html new file mode 100644 index 0000000..f5fd8bf --- /dev/null +++ b/examples/web/text/text_writing_anim.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/text/text_writing_anim.js b/examples/web/text/text_writing_anim.js new file mode 100644 index 0000000..b9f2fd8 --- /dev/null +++ b/examples/web/text/text_writing_anim.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5271760,DYNAMICTOP_PTR=28848;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="text_writing_anim.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/text/text_writing_anim.wasm b/examples/web/text/text_writing_anim.wasm new file mode 100644 index 0000000..2ef100f Binary files /dev/null and b/examples/web/text/text_writing_anim.wasm differ diff --git a/examples/web/textures/textures_background_scrolling.c b/examples/web/textures/textures_background_scrolling.c index 2401917..c520119 100644 --- a/examples/web/textures/textures_background_scrolling.c +++ b/examples/web/textures/textures_background_scrolling.c @@ -23,9 +23,9 @@ const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) -Texture2D background; -Texture2D midground; -Texture2D foreground; +Texture2D background = { 0 }; +Texture2D midground = { 0 }; +Texture2D foreground = { 0 }; float scrollingBack = 0; float scrollingMid = 0; @@ -39,24 +39,24 @@ void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- // Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [textures] example - background scrolling"); - + // NOTE: Be careful, background width must be equal or bigger than screen width // if not, texture should be draw more than two times for scrolling effect background = LoadTexture("resources/cyberpunk_street_background.png"); midground = LoadTexture("resources/cyberpunk_street_midground.png"); foreground = LoadTexture("resources/cyberpunk_street_foreground.png"); - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -86,7 +86,7 @@ void UpdateDrawFrame(void) scrollingBack -= 0.1f; scrollingMid -= 0.5f; scrollingFore -= 1.0f; - + // NOTE: Texture is scaled twice its size, so it sould be considered on scrolling if (scrollingBack <= -background.width*2) scrollingBack = 0; if (scrollingMid <= -midground.width*2) scrollingMid = 0; @@ -103,15 +103,15 @@ void UpdateDrawFrame(void) // NOTE: Texture is scaled twice its size DrawTextureEx(background, (Vector2){ scrollingBack, 20 }, 0.0f, 2.0f, WHITE); DrawTextureEx(background, (Vector2){ background.width*2 + scrollingBack, 20 }, 0.0f, 2.0f, WHITE); - + // Draw midground image twice DrawTextureEx(midground, (Vector2){ scrollingMid, 20 }, 0.0f, 2.0f, WHITE); DrawTextureEx(midground, (Vector2){ midground.width*2 + scrollingMid, 20 }, 0.0f, 2.0f, WHITE); - + // Draw foreground image twice DrawTextureEx(foreground, (Vector2){ scrollingFore, 70 }, 0.0f, 2.0f, WHITE); DrawTextureEx(foreground, (Vector2){ foreground.width*2 + scrollingFore, 70 }, 0.0f, 2.0f, WHITE); - + DrawText("BACKGROUND SCROLLING & PARALLAX", 10, 10, 20, RED); DrawText("(c) Cyberpunk Street Environment by Luis Zuno (@ansimuz)", screenWidth - 330, screenHeight - 20, 10, RAYWHITE); diff --git a/examples/web/textures/textures_background_scrolling.data b/examples/web/textures/textures_background_scrolling.data new file mode 100644 index 0000000..d3440c5 Binary files /dev/null and b/examples/web/textures/textures_background_scrolling.data differ diff --git a/examples/web/textures/textures_background_scrolling.html b/examples/web/textures/textures_background_scrolling.html new file mode 100644 index 0000000..dc8a1ae --- /dev/null +++ b/examples/web/textures/textures_background_scrolling.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_background_scrolling.js b/examples/web/textures/textures_background_scrolling.js new file mode 100644 index 0000000..f0d869c --- /dev/null +++ b/examples/web/textures/textures_background_scrolling.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_background_scrolling.data";var REMOTE_PACKAGE_BASE="textures_background_scrolling.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273200,DYNAMICTOP_PTR=30288;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_background_scrolling.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_background_scrolling.wasm b/examples/web/textures/textures_background_scrolling.wasm new file mode 100644 index 0000000..e3d4b9d Binary files /dev/null and b/examples/web/textures/textures_background_scrolling.wasm differ diff --git a/examples/web/textures/textures_bunnymark.c b/examples/web/textures/textures_bunnymark.c index a2b6fa9..4d332f5 100644 --- a/examples/web/textures/textures_bunnymark.c +++ b/examples/web/textures/textures_bunnymark.c @@ -32,15 +32,15 @@ typedef struct Bunny { //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) -Texture2D texBunny; -Bunny *bunnies = NULL; // Bunnies array +Texture2D texBunny = { 0 }; // Bunny texture +Bunny *bunnies = NULL; // Bunnies array -int bunniesCount = 0; // Bunnies counter +int bunniesCount = 0; // Bunnies counter //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -48,9 +48,9 @@ int bunniesCount = 0; // Bunnies counter void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -65,7 +65,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -76,7 +76,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- free(bunnies); // Unload bunnies data array - + UnloadTexture(texBunny); // Unload bunny texture CloseWindow(); // Close window and OpenGL context @@ -100,8 +100,8 @@ void UpdateDrawFrame(void) bunnies[bunniesCount].position = GetMousePosition(); bunnies[bunniesCount].speed.x = (float)GetRandomValue(-250, 250)/60.0f; bunnies[bunniesCount].speed.y = (float)GetRandomValue(-250, 250)/60.0f; - bunnies[bunniesCount].color = (Color){ GetRandomValue(50, 240), - GetRandomValue(80, 240), + bunnies[bunniesCount].color = (Color){ GetRandomValue(50, 240), + GetRandomValue(80, 240), GetRandomValue(100, 240), 255 }; bunniesCount++; } @@ -113,9 +113,9 @@ void UpdateDrawFrame(void) bunnies[i].position.x += bunnies[i].speed.x; bunnies[i].position.y += bunnies[i].speed.y; - if (((bunnies[i].position.x + texBunny.width/2) > GetScreenWidth()) || + if (((bunnies[i].position.x + texBunny.width/2) > GetScreenWidth()) || ((bunnies[i].position.x + texBunny.width/2) < 0)) bunnies[i].speed.x *= -1; - if (((bunnies[i].position.y + texBunny.height/2) > GetScreenHeight()) || + if (((bunnies[i].position.y + texBunny.height/2) > GetScreenHeight()) || ((bunnies[i].position.y + texBunny.height/2 - 40) < 0)) bunnies[i].speed.y *= -1; } //---------------------------------------------------------------------------------- @@ -128,9 +128,9 @@ void UpdateDrawFrame(void) for (int i = 0; i < bunniesCount; i++) { - // NOTE: When internal batch buffer limit is reached (MAX_BATCH_ELEMENTS), + // NOTE: When internal batch buffer limit is reached (MAX_BATCH_ELEMENTS), // a draw call is launched and buffer starts being filled again; - // before issuing a draw call, updated vertex data from internal CPU buffer is send to GPU... + // before issuing a draw call, updated vertex data from internal CPU buffer is send to GPU... // Process of sending data is costly and it could happen that GPU data has not been completely // processed for drawing while new data is tried to be sent (updating current in-use buffers) // it could generates a stall and consequently a frame drop, limiting the number of drawn bunnies @@ -140,7 +140,7 @@ void UpdateDrawFrame(void) DrawRectangle(0, 0, screenWidth, 40, BLACK); DrawText(FormatText("bunnies: %i", bunniesCount), 120, 10, 20, GREEN); DrawText(FormatText("batched draw calls: %i", 1 + bunniesCount/MAX_BATCH_ELEMENTS), 320, 10, 20, MAROON); - + DrawFPS(10, 10); EndDrawing(); diff --git a/examples/web/textures/textures_bunnymark.data b/examples/web/textures/textures_bunnymark.data new file mode 100644 index 0000000..1a5eb0b Binary files /dev/null and b/examples/web/textures/textures_bunnymark.data differ diff --git a/examples/web/textures/textures_bunnymark.html b/examples/web/textures/textures_bunnymark.html new file mode 100644 index 0000000..ef7a32e --- /dev/null +++ b/examples/web/textures/textures_bunnymark.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_bunnymark.js b/examples/web/textures/textures_bunnymark.js new file mode 100644 index 0000000..4944f28 --- /dev/null +++ b/examples/web/textures/textures_bunnymark.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_bunnymark.data";var REMOTE_PACKAGE_BASE="textures_bunnymark.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273024,DYNAMICTOP_PTR=30112;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_bunnymark.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"N":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"jc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"bc":_glDepthFunc,"G":_glDetachShader,"ac":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"E":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"Db":_glfwGetMouseButton,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"tb":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_bunnymark.wasm b/examples/web/textures/textures_bunnymark.wasm new file mode 100644 index 0000000..532f3b3 Binary files /dev/null and b/examples/web/textures/textures_bunnymark.wasm differ diff --git a/examples/web/textures/textures_image_drawing.c b/examples/web/textures/textures_image_drawing.c index b71e758..1d143f5 100644 --- a/examples/web/textures/textures_image_drawing.c +++ b/examples/web/textures/textures_image_drawing.c @@ -20,10 +20,10 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; -Texture2D texture; // Texture, GPU memory (VRAM) +Texture2D texture = { 0 }; // Texture, GPU memory (VRAM) //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -31,7 +31,7 @@ Texture2D texture; // Texture, GPU memory (VRAM) void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -43,24 +43,24 @@ int main(void) ImageCrop(&cat, (Rectangle){ 100, 10, 280, 380 }); // Crop an image piece ImageFlipHorizontal(&cat); // Flip cropped image horizontally ImageResize(&cat, 150, 200); // Resize flipped-cropped image - + Image parrots = LoadImage("resources/parrots.png"); // Load image in CPU memory (RAM) - + // Draw one image over the other with a scaling of 1.5f ImageDraw(&parrots, cat, (Rectangle){ 0, 0, cat.width, cat.height }, (Rectangle){ 30, 40, cat.width*1.5f, cat.height*1.5f }); ImageCrop(&parrots, (Rectangle){ 0, 50, parrots.width, parrots.height - 100 }); // Crop resulting image - + UnloadImage(cat); // Unload image from RAM - + texture = LoadTextureFromImage(parrots); // Image converted to texture, uploaded to GPU memory (VRAM) UnloadImage(parrots); // Once image has been converted to texture and uploaded to VRAM, it can be unloaded from RAM - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -70,9 +70,9 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Texture unloading - - CloseWindow(); // Close window and OpenGL context + UnloadTexture(texture); // Texture unloading + + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; diff --git a/examples/web/textures/textures_image_drawing.data b/examples/web/textures/textures_image_drawing.data new file mode 100644 index 0000000..27c217e Binary files /dev/null and b/examples/web/textures/textures_image_drawing.data differ diff --git a/examples/web/textures/textures_image_drawing.html b/examples/web/textures/textures_image_drawing.html new file mode 100644 index 0000000..5846b6e --- /dev/null +++ b/examples/web/textures/textures_image_drawing.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_image_drawing.js b/examples/web/textures/textures_image_drawing.js new file mode 100644 index 0000000..55dc73e --- /dev/null +++ b/examples/web/textures/textures_image_drawing.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_image_drawing.data";var REMOTE_PACKAGE_BASE="textures_image_drawing.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273536,DYNAMICTOP_PTR=30624;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_image_drawing.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_image_drawing.wasm b/examples/web/textures/textures_image_drawing.wasm new file mode 100644 index 0000000..c046638 Binary files /dev/null and b/examples/web/textures/textures_image_drawing.wasm differ diff --git a/examples/web/textures/textures_image_generation.c b/examples/web/textures/textures_image_generation.c index 25da8a9..4601d4a 100644 --- a/examples/web/textures/textures_image_generation.c +++ b/examples/web/textures/textures_image_generation.c @@ -20,20 +20,20 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; -Texture2D textures[NUM_TEXTURES]; +Texture2D textures[NUM_TEXTURES] = { 0 }; int currentTexture = 0; - + //---------------------------------------------------------------------------------- // Module Functions Declaration //---------------------------------------------------------------------------------- void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -43,10 +43,10 @@ int main(void) Image verticalGradient = GenImageGradientV(screenWidth, screenHeight, RED, BLUE); Image horizontalGradient = GenImageGradientH(screenWidth, screenHeight, RED, BLUE); - Image radialGradient = GenImageGradientRadial(screenWidth, screenHeight, 0.f, WHITE, BLACK); + Image radialGradient = GenImageGradientRadial(screenWidth, screenHeight, 0.0f, WHITE, BLACK); Image checked = GenImageChecked(screenWidth, screenHeight, 32, 32, RED, BLUE); Image whiteNoise = GenImageWhiteNoise(screenWidth, screenHeight, 0.5f); - Image perlinNoise = GenImagePerlinNoise(screenWidth, screenHeight, 8.f); + Image perlinNoise = GenImagePerlinNoise(screenWidth, screenHeight, 50, 50, 4.0f); Image cellular = GenImageCellular(screenWidth, screenHeight, 32); textures[0] = LoadTextureFromImage(verticalGradient); @@ -56,7 +56,7 @@ int main(void) textures[4] = LoadTextureFromImage(whiteNoise); textures[5] = LoadTextureFromImage(perlinNoise); textures[6] = LoadTextureFromImage(cellular); - + // Unload image data (CPU RAM) UnloadImage(verticalGradient); UnloadImage(horizontalGradient); @@ -64,14 +64,14 @@ int main(void) UnloadImage(checked); UnloadImage(whiteNoise); UnloadImage(perlinNoise); - UnloadImage(cellular); - + UnloadImage(cellular); + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -81,10 +81,10 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - + // Unload textures data (GPU VRAM) for (int i = 0; i < NUM_TEXTURES; i++) UnloadTexture(textures[i]); - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -107,15 +107,15 @@ void UpdateDrawFrame(void) // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + DrawTexture(textures[currentTexture], 0, 0, WHITE); - + DrawRectangle(30, 400, 325, 30, Fade(SKYBLUE, 0.5f)); DrawRectangleLines(30, 400, 325, 30, Fade(WHITE, 0.5f)); DrawText("MOUSE LEFT BUTTON to CYCLE PROCEDURAL TEXTURES", 40, 410, 10, WHITE); - + switch(currentTexture) { case 0: DrawText("VERTICAL GRADIENT", 560, 10, 20, RAYWHITE); break; @@ -127,7 +127,7 @@ void UpdateDrawFrame(void) case 6: DrawText("CELLULAR", 670, 10, 20, RAYWHITE); break; default: break; } - + EndDrawing(); //---------------------------------------------------------------------------------- } diff --git a/examples/web/textures/textures_image_generation.html b/examples/web/textures/textures_image_generation.html new file mode 100644 index 0000000..b2f2079 --- /dev/null +++ b/examples/web/textures/textures_image_generation.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_image_generation.js b/examples/web/textures/textures_image_generation.js new file mode 100644 index 0000000..ab27b3a --- /dev/null +++ b/examples/web/textures/textures_image_generation.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{var success=_emscripten_resize_heap(end);if(!success)return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5271152,DYNAMICTOP_PTR=28240;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_image_generation.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function emscripten_realloc_buffer(size){var PAGE_MULTIPLE=65536;size=alignUp(size,PAGE_MULTIPLE);var oldSize=buffer.byteLength;try{var result=wasmMemory.grow((size-oldSize)/65536);if(result!==(-1|0)){buffer=wasmMemory.buffer;return true}else{return false}}catch(e){return false}}function _emscripten_resize_heap(requestedSize){var oldSize=_emscripten_get_heap_size();var PAGE_MULTIPLE=65536;var LIMIT=2147483648-PAGE_MULTIPLE;if(requestedSize>LIMIT){return false}var MIN_TOTAL_MEMORY=16777216;var newSize=Math.max(oldSize,MIN_TOTAL_MEMORY);while(newSize>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_image_generation.wasm b/examples/web/textures/textures_image_generation.wasm new file mode 100644 index 0000000..3187cad Binary files /dev/null and b/examples/web/textures/textures_image_generation.wasm differ diff --git a/examples/web/textures/textures_image_loading.c b/examples/web/textures/textures_image_loading.c index 1ae92e8..f4a39fe 100644 --- a/examples/web/textures/textures_image_loading.c +++ b/examples/web/textures/textures_image_loading.c @@ -20,11 +20,12 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) -Texture2D texture; // Image converted to texture, GPU memory (VRAM) + +Texture2D texture = { 0 }; // Image converted to texture, GPU memory (VRAM) //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -32,7 +33,7 @@ Texture2D texture; // Image converted to texture, GPU memory (VRAM) void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -43,13 +44,13 @@ int main(void) Image image = LoadImage("resources/raylib_logo.png"); // Loaded in CPU memory (RAM) texture = LoadTextureFromImage(image); // Image converted to texture, GPU memory (VRAM) UnloadImage(image); // Once image has been converted to texture and uploaded to VRAM, it can be unloaded from RAM - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -59,10 +60,10 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - - UnloadTexture(texture); // Texture unloading - - CloseWindow(); // Close window and OpenGL context + + UnloadTexture(texture); // Texture unloading + + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; diff --git a/examples/web/textures/textures_image_loading.data b/examples/web/textures/textures_image_loading.data new file mode 100644 index 0000000..6654562 Binary files /dev/null and b/examples/web/textures/textures_image_loading.data differ diff --git a/examples/web/textures/textures_image_loading.html b/examples/web/textures/textures_image_loading.html new file mode 100644 index 0000000..9105eeb --- /dev/null +++ b/examples/web/textures/textures_image_loading.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_image_loading.js b/examples/web/textures/textures_image_loading.js new file mode 100644 index 0000000..fa9ae9c --- /dev/null +++ b/examples/web/textures/textures_image_loading.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_image_loading.data";var REMOTE_PACKAGE_BASE="textures_image_loading.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273008,DYNAMICTOP_PTR=30096;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_image_loading.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_image_loading.wasm b/examples/web/textures/textures_image_loading.wasm new file mode 100644 index 0000000..1e13ea1 Binary files /dev/null and b/examples/web/textures/textures_image_loading.wasm differ diff --git a/examples/web/textures/textures_image_processing.c b/examples/web/textures/textures_image_processing.c index f37b68e..31b7522 100644 --- a/examples/web/textures/textures_image_processing.c +++ b/examples/web/textures/textures_image_processing.c @@ -24,18 +24,18 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; - -typedef enum { - NONE = 0, - COLOR_GRAYSCALE, - COLOR_TINT, - COLOR_INVERT, - COLOR_CONTRAST, - COLOR_BRIGHTNESS, - FLIP_VERTICAL, - FLIP_HORIZONTAL +const int screenWidth = 800; +const int screenHeight = 450; + +typedef enum { + NONE = 0, + COLOR_GRAYSCALE, + COLOR_TINT, + COLOR_INVERT, + COLOR_CONTRAST, + COLOR_BRIGHTNESS, + FLIP_VERTICAL, + FLIP_HORIZONTAL } ImageProcess; static const char *processText[] = { @@ -49,13 +49,13 @@ static const char *processText[] = { "FLIP HORIZONTAL" }; -Image image; -Texture2D texture; +Image image = { 0 }; +Texture2D texture = { 0 }; int currentProcess = NONE; bool textureReload = false; -Rectangle selectRecs[NUM_PROCESSES]; +Rectangle selectRecs[NUM_PROCESSES] = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -63,7 +63,7 @@ Rectangle selectRecs[NUM_PROCESSES]; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -76,15 +76,15 @@ int main(void) image = LoadImage("resources/parrots.png"); // Loaded in CPU memory (RAM) ImageFormat(&image, UNCOMPRESSED_R8G8B8A8); // Format image to RGBA 32bit (required for texture update) texture = LoadTextureFromImage(image); // Image converted to texture, GPU memory (VRAM) - + for (int i = 0; i < NUM_PROCESSES; i++) selectRecs[i] = (Rectangle){ 40, 50 + 32*i, 150, 30 }; - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -96,8 +96,8 @@ int main(void) //-------------------------------------------------------------------------------------- UnloadTexture(texture); // Unload texture from VRAM UnloadImage(image); // Unload image from RAM - - CloseWindow(); // Close window and OpenGL context + + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; @@ -122,14 +122,14 @@ void UpdateDrawFrame(void) if (currentProcess < 0) currentProcess = 7; textureReload = true; } - + if (textureReload) { UnloadImage(image); // Unload current image data image = LoadImage("resources/parrots.png"); // Re-load image data - // NOTE: Image processing is a costly CPU process to be done every frame, - // If image processing is required in a frame-basis, it should be done + // NOTE: Image processing is a costly CPU process to be done every frame, + // If image processing is required in a frame-basis, it should be done // with a texture and by shaders switch (currentProcess) { @@ -142,11 +142,11 @@ void UpdateDrawFrame(void) case FLIP_HORIZONTAL: ImageFlipHorizontal(&image); break; default: break; } - + Color *pixels = GetImageData(image); // Get pixel data from image (RGBA 32bit) UpdateTexture(texture, pixels); // Update texture with new image data free(pixels); // Unload pixels data from RAM - + textureReload = false; } //---------------------------------------------------------------------------------- @@ -156,9 +156,9 @@ void UpdateDrawFrame(void) BeginDrawing(); ClearBackground(RAYWHITE); - + DrawText("IMAGE PROCESSING:", 40, 30, 10, DARKGRAY); - + // Draw rectangles for (int i = 0; i < NUM_PROCESSES; i++) { @@ -178,7 +178,7 @@ void UpdateDrawFrame(void) DrawTexture(texture, screenWidth - texture.width - 60, screenHeight/2 - texture.height/2, WHITE); DrawRectangleLines(screenWidth - texture.width - 60, screenHeight/2 - texture.height/2, texture.width, texture.height, BLACK); - + EndDrawing(); //---------------------------------------------------------------------------------- } \ No newline at end of file diff --git a/examples/web/textures/textures_image_processing.data b/examples/web/textures/textures_image_processing.data new file mode 100644 index 0000000..d6ec60b Binary files /dev/null and b/examples/web/textures/textures_image_processing.data differ diff --git a/examples/web/textures/textures_image_processing.html b/examples/web/textures/textures_image_processing.html new file mode 100644 index 0000000..36dc04e --- /dev/null +++ b/examples/web/textures/textures_image_processing.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_image_processing.js b/examples/web/textures/textures_image_processing.js new file mode 100644 index 0000000..b6e62d2 --- /dev/null +++ b/examples/web/textures/textures_image_processing.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_image_processing.data";var REMOTE_PACKAGE_BASE="textures_image_processing.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5274336,DYNAMICTOP_PTR=31424;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_image_processing.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"lc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"rd":_emscripten_get_gamepad_status,"gd":_emscripten_get_heap_size,"Xc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Cc":_emscripten_glActiveTexture,"sc":_emscripten_glAttachShader,"kc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"de":_emscripten_glGetShaderInfoLog,"ce":_emscripten_glGetShaderPrecisionFormat,"be":_emscripten_glGetShaderSource,"ae":_emscripten_glGetShaderiv,"$d":_emscripten_glGetString,"_d":_emscripten_glGetTexParameterfv,"Zd":_emscripten_glGetTexParameteriv,"Yd":_emscripten_glGetUniformLocation,"Xd":_emscripten_glGetUniformfv,"Wd":_emscripten_glGetUniformiv,"Vd":_emscripten_glGetVertexAttribPointerv,"Ud":_emscripten_glGetVertexAttribfv,"Td":_emscripten_glGetVertexAttribiv,"Sd":_emscripten_glHint,"Rd":_emscripten_glIsBuffer,"Qd":_emscripten_glIsEnabled,"Pd":_emscripten_glIsFramebuffer,"Od":_emscripten_glIsProgram,"Nd":_emscripten_glIsQueryEXT,"Md":_emscripten_glIsRenderbuffer,"Ld":_emscripten_glIsShader,"Kd":_emscripten_glIsTexture,"Jd":_emscripten_glIsVertexArrayOES,"Id":_emscripten_glLineWidth,"Hd":_emscripten_glLinkProgram,"Gd":_emscripten_glPixelStorei,"Fd":_emscripten_glPolygonOffset,"Ed":_emscripten_glQueryCounterEXT,"Dd":_emscripten_glReadPixels,"Cd":_emscripten_glReleaseShaderCompiler,"Bd":_emscripten_glRenderbufferStorage,"Ad":_emscripten_glSampleCoverage,"zd":_emscripten_glScissor,"yd":_emscripten_glShaderBinary,"xd":_emscripten_glShaderSource,"wd":_emscripten_glStencilFunc,"vd":_emscripten_glStencilFuncSeparate,"ud":_emscripten_glStencilMask,"td":_emscripten_glStencilMaskSeparate,"sd":_emscripten_glStencilOp,"qd":_emscripten_glStencilOpSeparate,"pd":_emscripten_glTexImage2D,"od":_emscripten_glTexParameterf,"nd":_emscripten_glTexParameterfv,"md":_emscripten_glTexParameteri,"ld":_emscripten_glTexParameteriv,"kd":_emscripten_glTexSubImage2D,"jd":_emscripten_glUniform1f,"id":_emscripten_glUniform1fv,"hd":_emscripten_glUniform1i,"fd":_emscripten_glUniform1iv,"ed":_emscripten_glUniform2f,"dd":_emscripten_glUniform2fv,"cd":_emscripten_glUniform2i,"bd":_emscripten_glUniform2iv,"ad":_emscripten_glUniform3f,"$c":_emscripten_glUniform3fv,"_c":_emscripten_glUniform3i,"Zc":_emscripten_glUniform3iv,"Yc":_emscripten_glUniform4f,"Wc":_emscripten_glUniform4fv,"Vc":_emscripten_glUniform4i,"Uc":_emscripten_glUniform4iv,"Tc":_emscripten_glUniformMatrix2fv,"Sc":_emscripten_glUniformMatrix3fv,"Rc":_emscripten_glUniformMatrix4fv,"Qc":_emscripten_glUseProgram,"Pc":_emscripten_glValidateProgram,"Oc":_emscripten_glVertexAttrib1f,"Nc":_emscripten_glVertexAttrib1fv,"Mc":_emscripten_glVertexAttrib2f,"Lc":_emscripten_glVertexAttrib2fv,"Kc":_emscripten_glVertexAttrib3f,"Jc":_emscripten_glVertexAttrib3fv,"Ic":_emscripten_glVertexAttrib4f,"Hc":_emscripten_glVertexAttrib4fv,"Gc":_emscripten_glVertexAttribDivisorANGLE,"Fc":_emscripten_glVertexAttribPointer,"Ec":_emscripten_glViewport,"Dc":_emscripten_memcpy_big,"Bc":_emscripten_request_pointerlock,"Ac":_emscripten_resize_heap,"N":_emscripten_run_script,"zc":_emscripten_sample_gamepad_data,"yc":_emscripten_set_click_callback_on_thread,"xc":_emscripten_set_fullscreenchange_callback_on_thread,"wc":_emscripten_set_gamepadconnected_callback_on_thread,"vc":_emscripten_set_gamepaddisconnected_callback_on_thread,"uc":_emscripten_set_keypress_callback_on_thread,"tc":_emscripten_set_main_loop,"rc":_emscripten_set_touchcancel_callback_on_thread,"qc":_emscripten_set_touchend_callback_on_thread,"pc":_emscripten_set_touchmove_callback_on_thread,"oc":_emscripten_set_touchstart_callback_on_thread,"nc":_exit,"mc":_glActiveTexture,"M":_glAttachShader,"j":_glBindAttribLocation,"d":_glBindBuffer,"i":_glBindTexture,"jc":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"bc":_glDepthFunc,"G":_glDetachShader,"ac":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"t":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"E":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"D":_glGetShaderiv,"k":_glGetString,"s":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glTexSubImage2D,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Db":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"tb":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"mb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["je"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["se"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_image_processing.wasm b/examples/web/textures/textures_image_processing.wasm new file mode 100644 index 0000000..cf2d990 Binary files /dev/null and b/examples/web/textures/textures_image_processing.wasm differ diff --git a/examples/web/textures/textures_image_text.c b/examples/web/textures/textures_image_text.c index dc393bb..4b5f0f1 100644 --- a/examples/web/textures/textures_image_text.c +++ b/examples/web/textures/textures_image_text.c @@ -18,13 +18,13 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) -Font font; -Texture2D texture; +Font font = { 0 }; +Texture2D texture = { 0 }; Vector2 position = { 0.0f, 0.0f }; @@ -36,17 +36,17 @@ bool showFont = false; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [texture] example - image text drawing"); - + // TTF Font loading with custom generation parameters font = LoadFontEx("resources/KAISG.ttf", 64, 0, 0); - + Image parrots = LoadImage("resources/parrots.png"); // Load image in CPU memory (RAM) // Draw over image using custom font @@ -54,7 +54,7 @@ int main() texture = LoadTextureFromImage(parrots); // Image converted to texture, uploaded to GPU memory (VRAM) UnloadImage(parrots); // Once image has been converted to texture and uploaded to VRAM, it can be unloaded from RAM - + position = (Vector2){ (float)(screenWidth/2 - texture.width/2), (float)(screenHeight/2 - texture.height/2 - 20) }; #if defined(PLATFORM_WEB) @@ -62,7 +62,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -73,9 +73,9 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- UnloadTexture(texture); // Texture unloading - + UnloadFont(font); // Unload custom spritefont - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -103,15 +103,15 @@ void UpdateDrawFrame(void) { // Draw texture with text already drawn inside DrawTextureV(texture, position, WHITE); - + // Draw text directly using sprite font - DrawTextEx(font, "[Parrots font drawing]", (Vector2){ position.x + 20, + DrawTextEx(font, "[Parrots font drawing]", (Vector2){ position.x + 20, position.y + 20 + 280 }, (float)font.baseSize, 0.0f, WHITE); } else DrawTexture(font.texture, screenWidth/2 - font.texture.width/2, 50, BLACK); - + DrawText("PRESS SPACE to SEE USED SPRITEFONT ", 290, 420, 10, DARKGRAY); - + EndDrawing(); //---------------------------------------------------------------------------------- } diff --git a/examples/web/textures/textures_image_text.data b/examples/web/textures/textures_image_text.data new file mode 100644 index 0000000..c6f529e Binary files /dev/null and b/examples/web/textures/textures_image_text.data differ diff --git a/examples/web/textures/textures_image_text.html b/examples/web/textures/textures_image_text.html new file mode 100644 index 0000000..778be27 --- /dev/null +++ b/examples/web/textures/textures_image_text.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_image_text.js b/examples/web/textures/textures_image_text.js new file mode 100644 index 0000000..9d1da7f --- /dev/null +++ b/examples/web/textures/textures_image_text.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_image_text.data";var REMOTE_PACKAGE_BASE="textures_image_text.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5275296,DYNAMICTOP_PTR=32384;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_image_text.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":324,"maximum":324,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"wc":___lock,"C":___setErrNo,"db":___syscall140,"Ua":___syscall145,"B":___syscall146,"m":___syscall221,"pa":___syscall5,"A":___syscall54,"W":___syscall6,"z":___unlock,"y":_eglGetProcAddress,"V":_emscripten_exit_pointerlock,"Cd":_emscripten_get_gamepad_status,"rd":_emscripten_get_heap_size,"gd":_emscripten_get_num_gamepads,"U":_emscripten_get_pointerlock_status,"Nc":_emscripten_glActiveTexture,"Dc":_emscripten_glAttachShader,"vc":_emscripten_glBeginQueryEXT,"qc":_emscripten_glBindAttribLocation,"jc":_emscripten_glBindBuffer,"dc":_emscripten_glBindFramebuffer,"Yb":_emscripten_glBindRenderbuffer,"Tb":_emscripten_glBindTexture,"Kb":_emscripten_glBindVertexArrayOES,"Ab":_emscripten_glBlendColor,"sb":_emscripten_glBlendEquation,"ob":_emscripten_glBlendEquationSeparate,"nb":_emscripten_glBlendFunc,"mb":_emscripten_glBlendFuncSeparate,"lb":_emscripten_glBufferData,"kb":_emscripten_glBufferSubData,"jb":_emscripten_glCheckFramebufferStatus,"ib":_emscripten_glClear,"hb":_emscripten_glClearColor,"gb":_emscripten_glClearDepthf,"fb":_emscripten_glClearStencil,"eb":_emscripten_glColorMask,"cb":_emscripten_glCompileShader,"bb":_emscripten_glCompressedTexImage2D,"ab":_emscripten_glCompressedTexSubImage2D,"$a":_emscripten_glCopyTexImage2D,"_a":_emscripten_glCopyTexSubImage2D,"Za":_emscripten_glCreateProgram,"Ya":_emscripten_glCreateShader,"Xa":_emscripten_glCullFace,"Wa":_emscripten_glDeleteBuffers,"Va":_emscripten_glDeleteFramebuffers,"Ta":_emscripten_glDeleteProgram,"Sa":_emscripten_glDeleteQueriesEXT,"Ra":_emscripten_glDeleteRenderbuffers,"Qa":_emscripten_glDeleteShader,"Pa":_emscripten_glDeleteTextures,"Oa":_emscripten_glDeleteVertexArraysOES,"Na":_emscripten_glDepthFunc,"Ma":_emscripten_glDepthMask,"La":_emscripten_glDepthRangef,"Ka":_emscripten_glDetachShader,"Ja":_emscripten_glDisable,"Ia":_emscripten_glDisableVertexAttribArray,"Ha":_emscripten_glDrawArrays,"Ga":_emscripten_glDrawArraysInstancedANGLE,"Fa":_emscripten_glDrawBuffersWEBGL,"Ea":_emscripten_glDrawElements,"Da":_emscripten_glDrawElementsInstancedANGLE,"Ca":_emscripten_glEnable,"Ba":_emscripten_glEnableVertexAttribArray,"Aa":_emscripten_glEndQueryEXT,"za":_emscripten_glFinish,"ya":_emscripten_glFlush,"xa":_emscripten_glFramebufferRenderbuffer,"wa":_emscripten_glFramebufferTexture2D,"va":_emscripten_glFrontFace,"ua":_emscripten_glGenBuffers,"ta":_emscripten_glGenFramebuffers,"sa":_emscripten_glGenQueriesEXT,"ra":_emscripten_glGenRenderbuffers,"qa":_emscripten_glGenTextures,"oa":_emscripten_glGenVertexArraysOES,"na":_emscripten_glGenerateMipmap,"ma":_emscripten_glGetActiveAttrib,"la":_emscripten_glGetActiveUniform,"ka":_emscripten_glGetAttachedShaders,"ja":_emscripten_glGetAttribLocation,"ia":_emscripten_glGetBooleanv,"ha":_emscripten_glGetBufferParameteriv,"ga":_emscripten_glGetError,"fa":_emscripten_glGetFloatv,"ea":_emscripten_glGetFramebufferAttachmentParameteriv,"da":_emscripten_glGetIntegerv,"ca":_emscripten_glGetProgramInfoLog,"ba":_emscripten_glGetProgramiv,"aa":_emscripten_glGetQueryObjecti64vEXT,"$":_emscripten_glGetQueryObjectivEXT,"_":_emscripten_glGetQueryObjectui64vEXT,"Z":_emscripten_glGetQueryObjectuivEXT,"Y":_emscripten_glGetQueryivEXT,"X":_emscripten_glGetRenderbufferParameteriv,"oe":_emscripten_glGetShaderInfoLog,"ne":_emscripten_glGetShaderPrecisionFormat,"me":_emscripten_glGetShaderSource,"le":_emscripten_glGetShaderiv,"ke":_emscripten_glGetString,"je":_emscripten_glGetTexParameterfv,"ie":_emscripten_glGetTexParameteriv,"he":_emscripten_glGetUniformLocation,"ge":_emscripten_glGetUniformfv,"fe":_emscripten_glGetUniformiv,"ee":_emscripten_glGetVertexAttribPointerv,"de":_emscripten_glGetVertexAttribfv,"ce":_emscripten_glGetVertexAttribiv,"be":_emscripten_glHint,"ae":_emscripten_glIsBuffer,"$d":_emscripten_glIsEnabled,"_d":_emscripten_glIsFramebuffer,"Zd":_emscripten_glIsProgram,"Yd":_emscripten_glIsQueryEXT,"Xd":_emscripten_glIsRenderbuffer,"Wd":_emscripten_glIsShader,"Vd":_emscripten_glIsTexture,"Ud":_emscripten_glIsVertexArrayOES,"Td":_emscripten_glLineWidth,"Sd":_emscripten_glLinkProgram,"Rd":_emscripten_glPixelStorei,"Qd":_emscripten_glPolygonOffset,"Pd":_emscripten_glQueryCounterEXT,"Od":_emscripten_glReadPixels,"Nd":_emscripten_glReleaseShaderCompiler,"Md":_emscripten_glRenderbufferStorage,"Ld":_emscripten_glSampleCoverage,"Kd":_emscripten_glScissor,"Jd":_emscripten_glShaderBinary,"Id":_emscripten_glShaderSource,"Hd":_emscripten_glStencilFunc,"Gd":_emscripten_glStencilFuncSeparate,"Fd":_emscripten_glStencilMask,"Ed":_emscripten_glStencilMaskSeparate,"Dd":_emscripten_glStencilOp,"Bd":_emscripten_glStencilOpSeparate,"Ad":_emscripten_glTexImage2D,"zd":_emscripten_glTexParameterf,"yd":_emscripten_glTexParameterfv,"xd":_emscripten_glTexParameteri,"wd":_emscripten_glTexParameteriv,"vd":_emscripten_glTexSubImage2D,"ud":_emscripten_glUniform1f,"td":_emscripten_glUniform1fv,"sd":_emscripten_glUniform1i,"qd":_emscripten_glUniform1iv,"pd":_emscripten_glUniform2f,"od":_emscripten_glUniform2fv,"nd":_emscripten_glUniform2i,"md":_emscripten_glUniform2iv,"ld":_emscripten_glUniform3f,"kd":_emscripten_glUniform3fv,"jd":_emscripten_glUniform3i,"id":_emscripten_glUniform3iv,"hd":_emscripten_glUniform4f,"fd":_emscripten_glUniform4fv,"ed":_emscripten_glUniform4i,"dd":_emscripten_glUniform4iv,"cd":_emscripten_glUniformMatrix2fv,"bd":_emscripten_glUniformMatrix3fv,"ad":_emscripten_glUniformMatrix4fv,"$c":_emscripten_glUseProgram,"_c":_emscripten_glValidateProgram,"Zc":_emscripten_glVertexAttrib1f,"Yc":_emscripten_glVertexAttrib1fv,"Xc":_emscripten_glVertexAttrib2f,"Wc":_emscripten_glVertexAttrib2fv,"Vc":_emscripten_glVertexAttrib3f,"Uc":_emscripten_glVertexAttrib3fv,"Tc":_emscripten_glVertexAttrib4f,"Sc":_emscripten_glVertexAttrib4fv,"Rc":_emscripten_glVertexAttribDivisorANGLE,"Qc":_emscripten_glVertexAttribPointer,"Pc":_emscripten_glViewport,"Oc":_emscripten_memcpy_big,"Mc":_emscripten_request_pointerlock,"Lc":_emscripten_resize_heap,"T":_emscripten_run_script,"Kc":_emscripten_sample_gamepad_data,"Jc":_emscripten_set_click_callback_on_thread,"Ic":_emscripten_set_fullscreenchange_callback_on_thread,"Hc":_emscripten_set_gamepadconnected_callback_on_thread,"Gc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Fc":_emscripten_set_keypress_callback_on_thread,"Ec":_emscripten_set_main_loop,"Cc":_emscripten_set_touchcancel_callback_on_thread,"Bc":_emscripten_set_touchend_callback_on_thread,"Ac":_emscripten_set_touchmove_callback_on_thread,"zc":_emscripten_set_touchstart_callback_on_thread,"yc":_exit,"xc":_glActiveTexture,"S":_glAttachShader,"k":_glBindAttribLocation,"d":_glBindBuffer,"f":_glBindFramebuffer,"R":_glBindRenderbuffer,"h":_glBindTexture,"uc":_glBlendFunc,"t":_glBufferData,"x":_glBufferSubData,"tc":_glCheckFramebufferStatus,"Q":_glClear,"P":_glClearColor,"sc":_glClearDepthf,"rc":_glCompileShader,"pc":_glCompressedTexImage2D,"oc":_glCreateProgram,"nc":_glCreateShader,"mc":_glCullFace,"s":_glDeleteBuffers,"lc":_glDeleteFramebuffers,"O":_glDeleteProgram,"kc":_glDeleteRenderbuffers,"N":_glDeleteShader,"r":_glDeleteTextures,"ic":_glDepthFunc,"M":_glDetachShader,"hc":_glDisable,"q":_glDisableVertexAttribArray,"gc":_glDrawArrays,"fc":_glDrawElements,"L":_glEnable,"j":_glEnableVertexAttribArray,"ec":_glFramebufferRenderbuffer,"p":_glFramebufferTexture2D,"cc":_glFrontFace,"o":_glGenBuffers,"bc":_glGenFramebuffers,"ac":_glGenRenderbuffers,"K":_glGenTextures,"w":_glGetAttribLocation,"$b":_glGetFloatv,"_b":_glGetProgramInfoLog,"J":_glGetProgramiv,"Zb":_glGetShaderInfoLog,"I":_glGetShaderiv,"l":_glGetString,"v":_glGetUniformLocation,"Xb":_glLinkProgram,"Wb":_glPixelStorei,"H":_glReadPixels,"Vb":_glRenderbufferStorage,"Ub":_glShaderSource,"G":_glTexImage2D,"e":_glTexParameteri,"Sb":_glUniform1i,"Rb":_glUniform4f,"Qb":_glUniformMatrix4fv,"u":_glUseProgram,"i":_glVertexAttribPointer,"Pb":_glViewport,"Ob":_glfwCreateWindow,"Nb":_glfwDefaultWindowHints,"Mb":_glfwDestroyWindow,"Lb":_glfwGetCursorPos,"Jb":_glfwGetKey,"n":_glfwGetTime,"Ib":_glfwInit,"Hb":_glfwMakeContextCurrent,"Gb":_glfwSetCharCallback,"Fb":_glfwSetCursorEnterCallback,"Eb":_glfwSetCursorPosCallback,"Db":_glfwSetDropCallback,"Cb":_glfwSetErrorCallback,"Bb":_glfwSetKeyCallback,"zb":_glfwSetMouseButtonCallback,"yb":_glfwSetScrollCallback,"xb":_glfwSetWindowIconifyCallback,"wb":_glfwSetWindowShouldClose,"vb":_glfwSetWindowSizeCallback,"ub":_glfwSwapBuffers,"F":_glfwTerminate,"g":_glfwWindowHint,"tb":_llvm_exp2_f32,"E":_llvm_stackrestore,"D":_llvm_stacksave,"rb":_nanosleep,"qb":_time,"pb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["De"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_image_text.wasm b/examples/web/textures/textures_image_text.wasm new file mode 100644 index 0000000..8b50536 Binary files /dev/null and b/examples/web/textures/textures_image_text.wasm differ diff --git a/examples/web/textures/textures_logo_raylib.c b/examples/web/textures/textures_logo_raylib.c index 830b2a7..0731973 100644 --- a/examples/web/textures/textures_logo_raylib.c +++ b/examples/web/textures/textures_logo_raylib.c @@ -18,11 +18,11 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) -Texture2D texture; +Texture2D texture = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -30,7 +30,7 @@ Texture2D texture; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -39,13 +39,13 @@ int main(void) InitWindow(screenWidth, screenHeight, "raylib [textures] example - texture loading and drawing"); texture = LoadTexture("resources/raylib_logo.png"); // Texture loading - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -55,8 +55,8 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Texture unloading - + UnloadTexture(texture); // Texture unloading + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/web/textures/textures_logo_raylib.data b/examples/web/textures/textures_logo_raylib.data new file mode 100644 index 0000000..6654562 Binary files /dev/null and b/examples/web/textures/textures_logo_raylib.data differ diff --git a/examples/web/textures/textures_logo_raylib.html b/examples/web/textures/textures_logo_raylib.html new file mode 100644 index 0000000..3a5fdff --- /dev/null +++ b/examples/web/textures/textures_logo_raylib.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_logo_raylib.js b/examples/web/textures/textures_logo_raylib.js new file mode 100644 index 0000000..21d566e --- /dev/null +++ b/examples/web/textures/textures_logo_raylib.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_logo_raylib.data";var REMOTE_PACKAGE_BASE="textures_logo_raylib.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5272992,DYNAMICTOP_PTR=30080;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_logo_raylib.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_logo_raylib.wasm b/examples/web/textures/textures_logo_raylib.wasm new file mode 100644 index 0000000..99334f0 Binary files /dev/null and b/examples/web/textures/textures_logo_raylib.wasm differ diff --git a/examples/web/textures/textures_npatch_drawing.c b/examples/web/textures/textures_npatch_drawing.c index 757f627..ed272db 100644 --- a/examples/web/textures/textures_npatch_drawing.c +++ b/examples/web/textures/textures_npatch_drawing.c @@ -22,12 +22,12 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) -Texture2D nPatchTexture; +Texture2D nPatchTexture = { 0 }; Vector2 mousePosition = { 0 }; Vector2 origin = { 0.0f, 0.0f }; @@ -54,9 +54,9 @@ NPatchInfo v3PatchInfo = { (Rectangle){ 0.0f, 192.0f, 64.0f, 64.0f }, 6, 6, 6, 6 void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- @@ -70,7 +70,7 @@ int main() #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -96,7 +96,7 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- mousePosition = GetMousePosition(); - + // Resize the n-patches based on mouse position dstRec1.width = mousePosition.x - dstRec1.x; dstRec1.height = mousePosition.y - dstRec1.y; @@ -127,7 +127,7 @@ void UpdateDrawFrame(void) DrawTextureNPatch(nPatchTexture, ninePatchInfo1, dstRec1, origin, 0.0f, WHITE); DrawTextureNPatch(nPatchTexture, h3PatchInfo, dstRecH, origin, 0.0f, WHITE); DrawTextureNPatch(nPatchTexture, v3PatchInfo, dstRecV, origin, 0.0f, WHITE); - + // Draw the source texture DrawRectangleLines(5, 88, 74, 266, BLUE); DrawTexture(nPatchTexture, 10, 93, WHITE); diff --git a/examples/web/textures/textures_npatch_drawing.data b/examples/web/textures/textures_npatch_drawing.data new file mode 100644 index 0000000..d1b5997 Binary files /dev/null and b/examples/web/textures/textures_npatch_drawing.data differ diff --git a/examples/web/textures/textures_npatch_drawing.html b/examples/web/textures/textures_npatch_drawing.html new file mode 100644 index 0000000..3f56051 --- /dev/null +++ b/examples/web/textures/textures_npatch_drawing.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_npatch_drawing.js b/examples/web/textures/textures_npatch_drawing.js new file mode 100644 index 0000000..879f214 --- /dev/null +++ b/examples/web/textures/textures_npatch_drawing.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_npatch_drawing.data";var REMOTE_PACKAGE_BASE="textures_npatch_drawing.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273232,DYNAMICTOP_PTR=30320;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_npatch_drawing.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_npatch_drawing.wasm b/examples/web/textures/textures_npatch_drawing.wasm new file mode 100644 index 0000000..6314e0f Binary files /dev/null and b/examples/web/textures/textures_npatch_drawing.wasm differ diff --git a/examples/web/textures/textures_particles_blending.c b/examples/web/textures/textures_particles_blending.c index cfc60cc..eda2c10 100644 --- a/examples/web/textures/textures_particles_blending.c +++ b/examples/web/textures/textures_particles_blending.c @@ -20,8 +20,8 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // Particle structure with basic data typedef struct { @@ -33,11 +33,11 @@ typedef struct { bool active; // NOTE: Use it to activate/deactive particle } Particle; -Particle mouseTail[MAX_PARTICLES]; +Particle mouseTail[MAX_PARTICLES] = { 0 }; float gravity = 3.0f; -Texture2D smoke; +Texture2D smoke = { 0 }; int blending = BLEND_ALPHA; @@ -48,7 +48,7 @@ int blending = BLEND_ALPHA; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -66,15 +66,15 @@ int main(void) mouseTail[i].rotation = GetRandomValue(0, 360); mouseTail[i].active = false; } - + smoke = LoadTexture("resources/smoke.png"); - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -84,7 +84,7 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- - UnloadTexture(smoke); // Texture unloading + UnloadTexture(smoke); // Texture unloading CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -120,13 +120,13 @@ void UpdateDrawFrame(void) { mouseTail[i].position.y += gravity; mouseTail[i].alpha -= 0.01f; - + if (mouseTail[i].alpha <= 0.0f) mouseTail[i].active = false; - + mouseTail[i].rotation += 5.0f; } } - + if (IsKeyPressed(KEY_SPACE)) { if (blending == BLEND_ALPHA) blending = BLEND_ADDITIVE; @@ -139,22 +139,22 @@ void UpdateDrawFrame(void) BeginDrawing(); ClearBackground(DARKGRAY); - + BeginBlendMode(blending); - // Draw active particles - for (int i = 0; i < MAX_PARTICLES; i++) - { - if (mouseTail[i].active) DrawTexturePro(smoke, (Rectangle){ 0, 0, smoke.width, smoke.height }, - (Rectangle){ mouseTail[i].position.x, mouseTail[i].position.y, smoke.width*mouseTail[i].size, smoke.height*mouseTail[i].size }, - (Vector2){ smoke.width*mouseTail[i].size/2, smoke.height*mouseTail[i].size/2 }, mouseTail[i].rotation, - Fade(mouseTail[i].color, mouseTail[i].alpha)); - } - + // Draw active particles + for (int i = 0; i < MAX_PARTICLES; i++) + { + if (mouseTail[i].active) DrawTexturePro(smoke, (Rectangle){ 0, 0, smoke.width, smoke.height }, + (Rectangle){ mouseTail[i].position.x, mouseTail[i].position.y, smoke.width*mouseTail[i].size, smoke.height*mouseTail[i].size }, + (Vector2){ smoke.width*mouseTail[i].size/2, smoke.height*mouseTail[i].size/2 }, mouseTail[i].rotation, + Fade(mouseTail[i].color, mouseTail[i].alpha)); + } + EndBlendMode(); - + DrawText("PRESS SPACE to CHANGE BLENDING MODE", 180, 20, 20, BLACK); - + if (blending == BLEND_ALPHA) DrawText("ALPHA BLENDING", 290, screenHeight - 40, 20, BLACK); else DrawText("ADDITIVE BLENDING", 280, screenHeight - 40, 20, RAYWHITE); diff --git a/examples/web/textures/textures_particles_blending.data b/examples/web/textures/textures_particles_blending.data new file mode 100644 index 0000000..7bad8c6 Binary files /dev/null and b/examples/web/textures/textures_particles_blending.data differ diff --git a/examples/web/textures/textures_particles_blending.html b/examples/web/textures/textures_particles_blending.html new file mode 100644 index 0000000..2aa00bd --- /dev/null +++ b/examples/web/textures/textures_particles_blending.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_particles_blending.js b/examples/web/textures/textures_particles_blending.js new file mode 100644 index 0000000..df47236 --- /dev/null +++ b/examples/web/textures/textures_particles_blending.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_particles_blending.data";var REMOTE_PACKAGE_BASE="textures_particles_blending.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5279680,DYNAMICTOP_PTR=36768;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_particles_blending.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"l":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"Q":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"P":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"dc":_emscripten_glBindAttribLocation,"_b":_emscripten_glBindBuffer,"Ub":_emscripten_glBindFramebuffer,"Nb":_emscripten_glBindRenderbuffer,"Eb":_emscripten_glBindTexture,"ub":_emscripten_glBindVertexArrayOES,"nb":_emscripten_glBlendColor,"kb":_emscripten_glBlendEquation,"jb":_emscripten_glBlendEquationSeparate,"ib":_emscripten_glBlendFunc,"hb":_emscripten_glBlendFuncSeparate,"gb":_emscripten_glBufferData,"fb":_emscripten_glBufferSubData,"eb":_emscripten_glCheckFramebufferStatus,"db":_emscripten_glClear,"cb":_emscripten_glClearColor,"bb":_emscripten_glClearDepthf,"ab":_emscripten_glClearStencil,"$a":_emscripten_glColorMask,"Za":_emscripten_glCompileShader,"Ya":_emscripten_glCompressedTexImage2D,"Xa":_emscripten_glCompressedTexSubImage2D,"Wa":_emscripten_glCopyTexImage2D,"Va":_emscripten_glCopyTexSubImage2D,"Ua":_emscripten_glCreateProgram,"Ta":_emscripten_glCreateShader,"Sa":_emscripten_glCullFace,"Ra":_emscripten_glDeleteBuffers,"Qa":_emscripten_glDeleteFramebuffers,"Oa":_emscripten_glDeleteProgram,"Na":_emscripten_glDeleteQueriesEXT,"Ma":_emscripten_glDeleteRenderbuffers,"La":_emscripten_glDeleteShader,"Ka":_emscripten_glDeleteTextures,"Ja":_emscripten_glDeleteVertexArraysOES,"Ia":_emscripten_glDepthFunc,"Ha":_emscripten_glDepthMask,"Ga":_emscripten_glDepthRangef,"Fa":_emscripten_glDetachShader,"Ea":_emscripten_glDisable,"Da":_emscripten_glDisableVertexAttribArray,"Ca":_emscripten_glDrawArrays,"Ba":_emscripten_glDrawArraysInstancedANGLE,"Aa":_emscripten_glDrawBuffersWEBGL,"za":_emscripten_glDrawElements,"ya":_emscripten_glDrawElementsInstancedANGLE,"xa":_emscripten_glEnable,"wa":_emscripten_glEnableVertexAttribArray,"va":_emscripten_glEndQueryEXT,"ua":_emscripten_glFinish,"ta":_emscripten_glFlush,"sa":_emscripten_glFramebufferRenderbuffer,"ra":_emscripten_glFramebufferTexture2D,"qa":_emscripten_glFrontFace,"pa":_emscripten_glGenBuffers,"oa":_emscripten_glGenFramebuffers,"na":_emscripten_glGenQueriesEXT,"ma":_emscripten_glGenRenderbuffers,"la":_emscripten_glGenTextures,"ja":_emscripten_glGenVertexArraysOES,"ia":_emscripten_glGenerateMipmap,"ha":_emscripten_glGetActiveAttrib,"ga":_emscripten_glGetActiveUniform,"fa":_emscripten_glGetAttachedShaders,"ea":_emscripten_glGetAttribLocation,"da":_emscripten_glGetBooleanv,"ca":_emscripten_glGetBufferParameteriv,"ba":_emscripten_glGetError,"aa":_emscripten_glGetFloatv,"$":_emscripten_glGetFramebufferAttachmentParameteriv,"_":_emscripten_glGetIntegerv,"Z":_emscripten_glGetProgramInfoLog,"Y":_emscripten_glGetProgramiv,"X":_emscripten_glGetQueryObjecti64vEXT,"W":_emscripten_glGetQueryObjectivEXT,"V":_emscripten_glGetQueryObjectui64vEXT,"U":_emscripten_glGetQueryObjectuivEXT,"T":_emscripten_glGetQueryivEXT,"S":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"O":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"N":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"r":_glBlendFunc,"q":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"ic":_glClearDepthf,"hc":_glCompileShader,"gc":_glCompressedTexImage2D,"fc":_glCreateProgram,"ec":_glCreateShader,"cc":_glCullFace,"p":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"bc":_glDepthFunc,"H":_glDetachShader,"ac":_glDisable,"o":_glDisableVertexAttribArray,"$b":_glDrawArrays,"Zb":_glDrawElements,"G":_glEnable,"h":_glEnableVertexAttribArray,"Yb":_glFrontFace,"n":_glGenBuffers,"Xb":_glGenTextures,"u":_glGetAttribLocation,"Wb":_glGetFloatv,"Vb":_glGetProgramInfoLog,"F":_glGetProgramiv,"Tb":_glGetShaderInfoLog,"E":_glGetShaderiv,"j":_glGetString,"t":_glGetUniformLocation,"Sb":_glLinkProgram,"Rb":_glPixelStorei,"Qb":_glReadPixels,"Pb":_glShaderSource,"Ob":_glTexImage2D,"g":_glTexParameteri,"Mb":_glUniform1i,"Lb":_glUniform4f,"Kb":_glUniformMatrix4fv,"s":_glUseProgram,"f":_glVertexAttribPointer,"Jb":_glViewport,"Ib":_glfwCreateWindow,"Hb":_glfwDefaultWindowHints,"Gb":_glfwDestroyWindow,"Fb":_glfwGetCursorPos,"m":_glfwGetTime,"Db":_glfwInit,"Cb":_glfwMakeContextCurrent,"Bb":_glfwSetCharCallback,"Ab":_glfwSetCursorEnterCallback,"zb":_glfwSetCursorPosCallback,"yb":_glfwSetDropCallback,"xb":_glfwSetErrorCallback,"wb":_glfwSetKeyCallback,"vb":_glfwSetMouseButtonCallback,"tb":_glfwSetScrollCallback,"sb":_glfwSetWindowIconifyCallback,"rb":_glfwSetWindowShouldClose,"qb":_glfwSetWindowSizeCallback,"pb":_glfwSwapBuffers,"D":_glfwTerminate,"e":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"ob":_nanosleep,"mb":_time,"lb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_particles_blending.wasm b/examples/web/textures/textures_particles_blending.wasm new file mode 100644 index 0000000..181dca8 Binary files /dev/null and b/examples/web/textures/textures_particles_blending.wasm differ diff --git a/examples/web/textures/textures_raw_data.c b/examples/web/textures/textures_raw_data.c index d6efab8..f07496d 100644 --- a/examples/web/textures/textures_raw_data.c +++ b/examples/web/textures/textures_raw_data.c @@ -22,11 +22,11 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; -Texture2D fudesumi; -Texture2D checked; +Texture2D fudesumi = { 0 }; +Texture2D checked = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -34,7 +34,7 @@ Texture2D checked; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -46,14 +46,14 @@ int main(void) Image fudesumiRaw = LoadImageRaw("resources/fudesumi.raw", 384, 512, UNCOMPRESSED_R8G8B8A8, 0); fudesumi = LoadTextureFromImage(fudesumiRaw); // Upload CPU (RAM) image to GPU (VRAM) UnloadImage(fudesumiRaw); // Unload CPU (RAM) image data - + // Generate a checked texture by code (1024x1024 pixels) int width = 1024; int height = 1024; - + // Dynamic memory allocation to store pixels data (Color type) Color *pixels = (Color *)malloc(width*height*sizeof(Color)); - + for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) @@ -62,21 +62,21 @@ int main(void) else pixels[y*height + x] = GOLD; } } - + // Load pixels data into an image structure and create texture Image checkedIm = LoadImageEx(pixels, width, height); checked = LoadTextureFromImage(checkedIm); UnloadImage(checkedIm); // Unload CPU (RAM) image data - + // Dynamic memory must be freed after using it free(pixels); // Unload CPU (RAM) pixels data - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -88,8 +88,8 @@ int main(void) //-------------------------------------------------------------------------------------- UnloadTexture(fudesumi); // Texture unloading UnloadTexture(checked); // Texture unloading - - CloseWindow(); // Close window and OpenGL context + + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; @@ -117,7 +117,7 @@ void UpdateDrawFrame(void) DrawText("CHECKED TEXTURE ", 84, 100, 30, BROWN); DrawText("GENERATED by CODE", 72, 164, 30, BROWN); DrawText("and RAW IMAGE LOADING", 46, 226, 30, BROWN); - + DrawText("(c) Fudesumi sprite by Eiden Marsal", 310, screenHeight - 20, 10, BROWN); EndDrawing(); diff --git a/examples/web/textures/textures_raw_data.data b/examples/web/textures/textures_raw_data.data new file mode 100644 index 0000000..dad6ff0 Binary files /dev/null and b/examples/web/textures/textures_raw_data.data differ diff --git a/examples/web/textures/textures_raw_data.html b/examples/web/textures/textures_raw_data.html new file mode 100644 index 0000000..6879d64 --- /dev/null +++ b/examples/web/textures/textures_raw_data.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_raw_data.js b/examples/web/textures/textures_raw_data.js new file mode 100644 index 0000000..3a321f9 --- /dev/null +++ b/examples/web/textures/textures_raw_data.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_raw_data.data";var REMOTE_PACKAGE_BASE="textures_raw_data.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5269840,DYNAMICTOP_PTR=26928;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_raw_data.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_raw_data.wasm b/examples/web/textures/textures_raw_data.wasm new file mode 100644 index 0000000..357cea0 Binary files /dev/null and b/examples/web/textures/textures_raw_data.wasm differ diff --git a/examples/web/textures/textures_rectangle.c b/examples/web/textures/textures_rectangle.c index c3b7eab..bb230d4 100644 --- a/examples/web/textures/textures_rectangle.c +++ b/examples/web/textures/textures_rectangle.c @@ -21,14 +21,14 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) -Texture2D scarfy; +Texture2D scarfy = { 0 }; -Vector2 position; -Rectangle frameRec; +Vector2 position = { 0 }; +Rectangle frameRec = { 0 }; int currentFrame = 0; @@ -41,7 +41,7 @@ int framesSpeed = 8; // Number of spritesheet frames shown by second void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -51,16 +51,16 @@ int main(void) scarfy = LoadTexture("resources/scarfy.png"); // Texture loading position = (Vector2){ 350.0f, 280.0f }; - + // NOTE: On PLATFORM_WEB, NPOT textures support is limited frameRec = (Rectangle){ 0, 0, scarfy.width/6, scarfy.height }; - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -71,7 +71,7 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- UnloadTexture(scarfy); // Texture unloading - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -86,20 +86,20 @@ void UpdateDrawFrame(void) // Update //---------------------------------------------------------------------------------- framesCounter++; - + if (framesCounter >= (60/framesSpeed)) { framesCounter = 0; currentFrame++; - + if (currentFrame > 5) currentFrame = 0; - + frameRec.x = currentFrame*scarfy.width/6; } - + if (IsKeyPressed(KEY_RIGHT)) framesSpeed++; else if (IsKeyPressed(KEY_LEFT)) framesSpeed--; - + if (framesSpeed > MAX_FRAME_SPEED) framesSpeed = MAX_FRAME_SPEED; else if (framesSpeed < MIN_FRAME_SPEED) framesSpeed = MIN_FRAME_SPEED; //---------------------------------------------------------------------------------- @@ -113,17 +113,17 @@ void UpdateDrawFrame(void) DrawTexture(scarfy, 15, 40, WHITE); DrawRectangleLines(15, 40, scarfy.width, scarfy.height, LIME); DrawRectangleLines(15 + frameRec.x, 40 + frameRec.y, frameRec.width, frameRec.height, RED); - + DrawText("FRAME SPEED: ", 165, 210, 10, DARKGRAY); DrawText(FormatText("%02i FPS", framesSpeed), 575, 210, 10, DARKGRAY); DrawText("PRESS RIGHT/LEFT KEYS to CHANGE SPEED!", 290, 240, 10, DARKGRAY); - + for (int i = 0; i < MAX_FRAME_SPEED; i++) { if (i < framesSpeed) DrawRectangle(250 + 21*i, 205, 20, 20, RED); DrawRectangleLines(250 + 21*i, 205, 20, 20, MAROON); } - + DrawTextureRec(scarfy, frameRec, position, WHITE); // Draw part of the texture DrawText("(c) Scarfy sprite by Eiden Marsal", screenWidth - 200, screenHeight - 20, 10, GRAY); diff --git a/examples/web/textures/textures_rectangle.data b/examples/web/textures/textures_rectangle.data new file mode 100644 index 0000000..4803ef7 Binary files /dev/null and b/examples/web/textures/textures_rectangle.data differ diff --git a/examples/web/textures/textures_rectangle.html b/examples/web/textures/textures_rectangle.html new file mode 100644 index 0000000..d2e947b --- /dev/null +++ b/examples/web/textures/textures_rectangle.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_rectangle.js b/examples/web/textures/textures_rectangle.js new file mode 100644 index 0000000..99bbca7 --- /dev/null +++ b/examples/web/textures/textures_rectangle.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_rectangle.data";var REMOTE_PACKAGE_BASE="textures_rectangle.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5274112,DYNAMICTOP_PTR=31200;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_rectangle.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_rectangle.wasm b/examples/web/textures/textures_rectangle.wasm new file mode 100644 index 0000000..6291f84 Binary files /dev/null and b/examples/web/textures/textures_rectangle.wasm differ diff --git a/examples/web/textures/textures_sprite_button.c b/examples/web/textures/textures_sprite_button.c index 529feec..f06989d 100644 --- a/examples/web/textures/textures_sprite_button.c +++ b/examples/web/textures/textures_sprite_button.c @@ -20,13 +20,13 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) -Sound fxButton; -Texture2D button; +Sound fxButton = { 0 }; +Texture2D button = { 0 }; // Define frame rectangle for drawing int frameHeight = 0; @@ -46,32 +46,32 @@ Vector2 mousePoint = { 0.0f, 0.0f }; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [textures] example - sprite button"); InitAudioDevice(); // Initialize audio device - + fxButton = LoadSound("resources/buttonfx.wav"); // Load button sound button = LoadTexture("resources/button.png"); // Load button texture - + // Define frame rectangle for drawing frameHeight = button.height/NUM_FRAMES; sourceRec = (Rectangle){ 0, 0, button.width, frameHeight }; - + // Define button bounds on screen btnBounds = (Rectangle){ screenWidth/2 - button.width/2, screenHeight/2 - button.height/NUM_FRAMES/2, button.width, frameHeight }; - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -85,10 +85,10 @@ int main() UnloadSound(fxButton); // Unload sound CloseAudioDevice(); // Close audio device - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- - + return 0; } @@ -101,7 +101,7 @@ void UpdateDrawFrame(void) //---------------------------------------------------------------------------------- mousePoint = GetMousePosition(); btnAction = false; - + // Check button state if (CheckCollisionPointRec(mousePoint, btnBounds)) { @@ -111,26 +111,26 @@ void UpdateDrawFrame(void) if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) btnAction = true; } else btnState = 0; - + if (btnAction) { PlaySound(fxButton); - + // TODO: Any desired action } - + // Calculate button frame rectangle to draw depending on button state sourceRec.y = btnState*frameHeight; //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); DrawTextureRec(button, sourceRec, (Vector2){ btnBounds.x, btnBounds.y }, WHITE); // Draw button frame - + EndDrawing(); //---------------------------------------------------------------------------------- } diff --git a/examples/web/textures/textures_sprite_button.data b/examples/web/textures/textures_sprite_button.data new file mode 100644 index 0000000..56fff95 Binary files /dev/null and b/examples/web/textures/textures_sprite_button.data differ diff --git a/examples/web/textures/textures_sprite_button.html b/examples/web/textures/textures_sprite_button.html new file mode 100644 index 0000000..a15db7c --- /dev/null +++ b/examples/web/textures/textures_sprite_button.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_sprite_button.js b/examples/web/textures/textures_sprite_button.js new file mode 100644 index 0000000..2ff5b5c --- /dev/null +++ b/examples/web/textures/textures_sprite_button.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_sprite_button.data";var REMOTE_PACKAGE_BASE="textures_sprite_button.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5392672,DYNAMICTOP_PTR=149760;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_sprite_button.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":430,"maximum":430,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};var ASM_CONSTS=[function($0){return navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined},function($0){try{var temp=new(window.AudioContext||window.webkitAudioContext);var sampleRate=temp.sampleRate;temp.close();return sampleRate}catch(e){return 0}},function($0,$1){var device=miniaudio.get_device_by_index($0);if(device.scriptNode!==undefined){device.scriptNode.onaudioprocess=function(e){};device.scriptNode.disconnect();device.scriptNode=undefined}if(device.streamNode!==undefined){device.streamNode.disconnect();device.streamNode=undefined}device.webaudio.close();device.webaudio=undefined;if(device.intermediaryBuffer!==undefined){Module._free(device.intermediaryBuffer);device.intermediaryBuffer=undefined;device.intermediaryBufferView=undefined;device.intermediaryBufferSizeInBytes=undefined}miniaudio.untrack_device_by_index($0)},function($0,$1,$2,$3,$4){var channels=$0;var sampleRate=$1;var bufferSize=$2;var isCapture=$3;var pDevice=$4;if(typeof miniaudio==="undefined"){return-1}var device={};device.webaudio=new(window.AudioContext||window.webkitAudioContext)({sampleRate:sampleRate});device.webaudio.suspend();device.intermediaryBufferSizeInBytes=channels*bufferSize*4;device.intermediaryBuffer=Module._malloc(device.intermediaryBufferSizeInBytes);device.intermediaryBufferView=new Float32Array(Module.HEAPF32.buffer,device.intermediaryBuffer,device.intermediaryBufferSizeInBytes);device.scriptNode=device.webaudio.createScriptProcessor(bufferSize,channels,channels);if(isCapture){device.scriptNode.onaudioprocess=function(e){if(device.intermediaryBuffer===undefined){return}for(var iChannel=0;iChanneldevice.intermediaryBufferSizeInBytes/channels/4){framesToProcess=device.intermediaryBufferSizeInBytes/channels/4}if(sendSilence){device.intermediaryBufferView.fill(0)}else{for(var iFrame=0;iFramedevice.intermediaryBufferSizeInBytes/channels/4){framesToProcess=device.intermediaryBufferSizeInBytes/channels/4}ccall("ma_device_process_pcm_frames_playback__webaudio","undefined",["number","number","number"],[pDevice,framesToProcess,device.intermediaryBuffer]);if(outputSilence){for(var iChannel=0;iChannel0){if(miniaudio.devices[miniaudio.devices.length-1]==null){miniaudio.devices.pop()}else{break}}};miniaudio.untrack_device=function(device){for(var iDevice=0;iDevice>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _pthread_attr_destroy(attr){return 0}function _pthread_attr_init(attr){return 0}function _pthread_cond_destroy(){return 0}function _pthread_cond_init(){return 0}function _pthread_cond_signal(){return 0}function _pthread_cond_wait(){return 0}function _pthread_create(){return 11}function _pthread_join(){}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"tc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"m":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"e":_emscripten_asm_const_ii,"Cd":_emscripten_asm_const_iii,"rd":_emscripten_asm_const_iiiiii,"Q":_emscripten_exit_pointerlock,"Yc":_emscripten_get_gamepad_status,"Nc":_emscripten_get_heap_size,"Dc":_emscripten_get_num_gamepads,"N":_emscripten_get_pointerlock_status,"pc":_emscripten_glActiveTexture,"jc":_emscripten_glAttachShader,"dc":_emscripten_glBeginQueryEXT,"Yb":_emscripten_glBindAttribLocation,"Qb":_emscripten_glBindBuffer,"Gb":_emscripten_glBindFramebuffer,"wb":_emscripten_glBindRenderbuffer,"ob":_emscripten_glBindTexture,"jb":_emscripten_glBindVertexArrayOES,"ib":_emscripten_glBlendColor,"hb":_emscripten_glBlendEquation,"gb":_emscripten_glBlendEquationSeparate,"fb":_emscripten_glBlendFunc,"eb":_emscripten_glBlendFuncSeparate,"db":_emscripten_glBufferData,"cb":_emscripten_glBufferSubData,"bb":_emscripten_glCheckFramebufferStatus,"ab":_emscripten_glClear,"$a":_emscripten_glClearColor,"Za":_emscripten_glClearDepthf,"Ya":_emscripten_glClearStencil,"Xa":_emscripten_glColorMask,"Wa":_emscripten_glCompileShader,"Va":_emscripten_glCompressedTexImage2D,"Ua":_emscripten_glCompressedTexSubImage2D,"Ta":_emscripten_glCopyTexImage2D,"Sa":_emscripten_glCopyTexSubImage2D,"Ra":_emscripten_glCreateProgram,"Qa":_emscripten_glCreateShader,"Oa":_emscripten_glCullFace,"Na":_emscripten_glDeleteBuffers,"Ma":_emscripten_glDeleteFramebuffers,"La":_emscripten_glDeleteProgram,"Ka":_emscripten_glDeleteQueriesEXT,"Ja":_emscripten_glDeleteRenderbuffers,"Ia":_emscripten_glDeleteShader,"Ha":_emscripten_glDeleteTextures,"Ga":_emscripten_glDeleteVertexArraysOES,"Fa":_emscripten_glDepthFunc,"Ea":_emscripten_glDepthMask,"Da":_emscripten_glDepthRangef,"Ca":_emscripten_glDetachShader,"Ba":_emscripten_glDisable,"Aa":_emscripten_glDisableVertexAttribArray,"za":_emscripten_glDrawArrays,"ya":_emscripten_glDrawArraysInstancedANGLE,"xa":_emscripten_glDrawBuffersWEBGL,"wa":_emscripten_glDrawElements,"va":_emscripten_glDrawElementsInstancedANGLE,"ua":_emscripten_glEnable,"ta":_emscripten_glEnableVertexAttribArray,"sa":_emscripten_glEndQueryEXT,"ra":_emscripten_glFinish,"qa":_emscripten_glFlush,"pa":_emscripten_glFramebufferRenderbuffer,"oa":_emscripten_glFramebufferTexture2D,"na":_emscripten_glFrontFace,"ma":_emscripten_glGenBuffers,"la":_emscripten_glGenFramebuffers,"ja":_emscripten_glGenQueriesEXT,"ia":_emscripten_glGenRenderbuffers,"ha":_emscripten_glGenTextures,"ga":_emscripten_glGenVertexArraysOES,"fa":_emscripten_glGenerateMipmap,"ea":_emscripten_glGetActiveAttrib,"da":_emscripten_glGetActiveUniform,"ca":_emscripten_glGetAttachedShaders,"ba":_emscripten_glGetAttribLocation,"aa":_emscripten_glGetBooleanv,"$":_emscripten_glGetBufferParameteriv,"_":_emscripten_glGetError,"Z":_emscripten_glGetFloatv,"Y":_emscripten_glGetFramebufferAttachmentParameteriv,"X":_emscripten_glGetIntegerv,"W":_emscripten_glGetProgramInfoLog,"V":_emscripten_glGetProgramiv,"U":_emscripten_glGetQueryObjecti64vEXT,"T":_emscripten_glGetQueryObjectivEXT,"S":_emscripten_glGetQueryObjectui64vEXT,"oe":_emscripten_glGetQueryObjectuivEXT,"ne":_emscripten_glGetQueryivEXT,"me":_emscripten_glGetRenderbufferParameteriv,"le":_emscripten_glGetShaderInfoLog,"ke":_emscripten_glGetShaderPrecisionFormat,"je":_emscripten_glGetShaderSource,"ie":_emscripten_glGetShaderiv,"he":_emscripten_glGetString,"ge":_emscripten_glGetTexParameterfv,"fe":_emscripten_glGetTexParameteriv,"ee":_emscripten_glGetUniformLocation,"de":_emscripten_glGetUniformfv,"ce":_emscripten_glGetUniformiv,"be":_emscripten_glGetVertexAttribPointerv,"ae":_emscripten_glGetVertexAttribfv,"$d":_emscripten_glGetVertexAttribiv,"_d":_emscripten_glHint,"Zd":_emscripten_glIsBuffer,"Yd":_emscripten_glIsEnabled,"Xd":_emscripten_glIsFramebuffer,"Wd":_emscripten_glIsProgram,"Vd":_emscripten_glIsQueryEXT,"Ud":_emscripten_glIsRenderbuffer,"Td":_emscripten_glIsShader,"Sd":_emscripten_glIsTexture,"Rd":_emscripten_glIsVertexArrayOES,"Qd":_emscripten_glLineWidth,"Pd":_emscripten_glLinkProgram,"Od":_emscripten_glPixelStorei,"Nd":_emscripten_glPolygonOffset,"Md":_emscripten_glQueryCounterEXT,"Ld":_emscripten_glReadPixels,"Kd":_emscripten_glReleaseShaderCompiler,"Jd":_emscripten_glRenderbufferStorage,"Id":_emscripten_glSampleCoverage,"Hd":_emscripten_glScissor,"Gd":_emscripten_glShaderBinary,"Fd":_emscripten_glShaderSource,"Ed":_emscripten_glStencilFunc,"Dd":_emscripten_glStencilFuncSeparate,"Bd":_emscripten_glStencilMask,"Ad":_emscripten_glStencilMaskSeparate,"zd":_emscripten_glStencilOp,"yd":_emscripten_glStencilOpSeparate,"xd":_emscripten_glTexImage2D,"wd":_emscripten_glTexParameterf,"vd":_emscripten_glTexParameterfv,"ud":_emscripten_glTexParameteri,"td":_emscripten_glTexParameteriv,"sd":_emscripten_glTexSubImage2D,"qd":_emscripten_glUniform1f,"pd":_emscripten_glUniform1fv,"od":_emscripten_glUniform1i,"nd":_emscripten_glUniform1iv,"md":_emscripten_glUniform2f,"ld":_emscripten_glUniform2fv,"kd":_emscripten_glUniform2i,"jd":_emscripten_glUniform2iv,"id":_emscripten_glUniform3f,"hd":_emscripten_glUniform3fv,"gd":_emscripten_glUniform3i,"fd":_emscripten_glUniform3iv,"ed":_emscripten_glUniform4f,"dd":_emscripten_glUniform4fv,"cd":_emscripten_glUniform4i,"bd":_emscripten_glUniform4iv,"ad":_emscripten_glUniformMatrix2fv,"$c":_emscripten_glUniformMatrix3fv,"_c":_emscripten_glUniformMatrix4fv,"Zc":_emscripten_glUseProgram,"Xc":_emscripten_glValidateProgram,"Wc":_emscripten_glVertexAttrib1f,"Vc":_emscripten_glVertexAttrib1fv,"Uc":_emscripten_glVertexAttrib2f,"Tc":_emscripten_glVertexAttrib2fv,"Sc":_emscripten_glVertexAttrib3f,"Rc":_emscripten_glVertexAttrib3fv,"Qc":_emscripten_glVertexAttrib4f,"Pc":_emscripten_glVertexAttrib4fv,"Oc":_emscripten_glVertexAttribDivisorANGLE,"Mc":_emscripten_glVertexAttribPointer,"Lc":_emscripten_glViewport,"Kc":_emscripten_memcpy_big,"Jc":_emscripten_request_pointerlock,"Ic":_emscripten_resize_heap,"P":_emscripten_run_script,"Hc":_emscripten_sample_gamepad_data,"Gc":_emscripten_set_click_callback_on_thread,"Fc":_emscripten_set_fullscreenchange_callback_on_thread,"Ec":_emscripten_set_gamepadconnected_callback_on_thread,"Cc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Bc":_emscripten_set_keypress_callback_on_thread,"Ac":_emscripten_set_main_loop,"zc":_emscripten_set_touchcancel_callback_on_thread,"yc":_emscripten_set_touchend_callback_on_thread,"xc":_emscripten_set_touchmove_callback_on_thread,"wc":_emscripten_set_touchstart_callback_on_thread,"vc":_exit,"uc":_glActiveTexture,"O":_glAttachShader,"j":_glBindAttribLocation,"d":_glBindBuffer,"l":_glBindTexture,"sc":_glBlendFunc,"r":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"rc":_glClearDepthf,"qc":_glCompileShader,"oc":_glCompressedTexImage2D,"nc":_glCreateProgram,"mc":_glCreateShader,"lc":_glCullFace,"q":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"kc":_glDepthFunc,"H":_glDetachShader,"ic":_glDisable,"p":_glDisableVertexAttribArray,"hc":_glDrawArrays,"gc":_glDrawElements,"G":_glEnable,"i":_glEnableVertexAttribArray,"fc":_glFrontFace,"o":_glGenBuffers,"ec":_glGenTextures,"u":_glGetAttribLocation,"cc":_glGetFloatv,"bc":_glGetProgramInfoLog,"F":_glGetProgramiv,"ac":_glGetShaderInfoLog,"E":_glGetShaderiv,"k":_glGetString,"t":_glGetUniformLocation,"$b":_glLinkProgram,"_b":_glPixelStorei,"Zb":_glReadPixels,"Xb":_glShaderSource,"Wb":_glTexImage2D,"h":_glTexParameteri,"Vb":_glUniform1i,"Ub":_glUniform4f,"Tb":_glUniformMatrix4fv,"s":_glUseProgram,"g":_glVertexAttribPointer,"Sb":_glViewport,"Rb":_glfwCreateWindow,"Pb":_glfwDefaultWindowHints,"Ob":_glfwDestroyWindow,"Nb":_glfwGetCursorPos,"Mb":_glfwGetMouseButton,"n":_glfwGetTime,"Lb":_glfwInit,"Kb":_glfwMakeContextCurrent,"Jb":_glfwSetCharCallback,"Ib":_glfwSetCursorEnterCallback,"Hb":_glfwSetCursorPosCallback,"Fb":_glfwSetDropCallback,"Eb":_glfwSetErrorCallback,"Db":_glfwSetKeyCallback,"Cb":_glfwSetMouseButtonCallback,"Bb":_glfwSetScrollCallback,"Ab":_glfwSetWindowIconifyCallback,"zb":_glfwSetWindowShouldClose,"yb":_glfwSetWindowSizeCallback,"xb":_glfwSwapBuffers,"D":_glfwTerminate,"f":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"vb":_nanosleep,"ub":_pthread_attr_destroy,"tb":_pthread_attr_init,"sb":_pthread_cond_destroy,"rb":_pthread_cond_init,"qb":_pthread_cond_signal,"pb":_pthread_cond_wait,"nb":_pthread_create,"mb":_pthread_join,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Ge"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["De"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_sprite_button.wasm b/examples/web/textures/textures_sprite_button.wasm new file mode 100644 index 0000000..043287d Binary files /dev/null and b/examples/web/textures/textures_sprite_button.wasm differ diff --git a/examples/web/textures/textures_sprite_explosion.c b/examples/web/textures/textures_sprite_explosion.c index 34c3e6d..acc79c8 100644 --- a/examples/web/textures/textures_sprite_explosion.c +++ b/examples/web/textures/textures_sprite_explosion.c @@ -21,16 +21,16 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) // Load explosion sound -Sound fxBoom; +Sound fxBoom = { 0 }; // Load explosion texture -Texture2D explosion; +Texture2D explosion = { 0 }; // Init variables for animation int frameWidth = 0; @@ -50,34 +50,34 @@ int framesCounter = 0; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- -int main() +int main(void) { // Initialization //-------------------------------------------------------------------------------------- InitWindow(screenWidth, screenHeight, "raylib [textures] example - sprite explosion"); - + InitAudioDevice(); - + // Load explosion sound fxBoom = LoadSound("resources/boom.wav"); - + // Load explosion texture explosion = LoadTexture("resources/explosion.png"); - + // Init variables for animation frameWidth = explosion.width/NUM_FRAMES; // Sprite one frame rectangle width frameHeight = explosion.height/NUM_LINES; // Sprite one frame rectangle height frameRec = (Rectangle){ 0, 0, frameWidth, frameHeight }; - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -89,12 +89,12 @@ int main() //-------------------------------------------------------------------------------------- UnloadTexture(explosion); // Unload texture UnloadSound(fxBoom); // Unload sound - + CloseAudioDevice(); - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- - + return 0; } @@ -105,57 +105,57 @@ void UpdateDrawFrame(void) { // Update //---------------------------------------------------------------------------------- - + // Check for mouse button pressed and activate explosion (if not active) if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && !active) { position = GetMousePosition(); active = true; - + position.x -= frameWidth/2; position.y -= frameHeight/2; - + PlaySound(fxBoom); } - + // Compute explosion animation frames if (active) { framesCounter++; - + if (framesCounter > 2) { currentFrame++; - + if (currentFrame >= NUM_FRAMES) { currentFrame = 0; currentLine++; - + if (currentLine >= NUM_LINES) { currentLine = 0; active = false; } } - + framesCounter = 0; } } - + frameRec.x = frameWidth*currentFrame; frameRec.y = frameHeight*currentLine; //---------------------------------------------------------------------------------- - + // Draw //---------------------------------------------------------------------------------- BeginDrawing(); - + ClearBackground(RAYWHITE); - + // Draw explosion required frame rectangle if (active) DrawTextureRec(explosion, frameRec, position, WHITE); - + EndDrawing(); //---------------------------------------------------------------------------------- } diff --git a/examples/web/textures/textures_sprite_explosion.data b/examples/web/textures/textures_sprite_explosion.data new file mode 100644 index 0000000..dced351 Binary files /dev/null and b/examples/web/textures/textures_sprite_explosion.data differ diff --git a/examples/web/textures/textures_sprite_explosion.html b/examples/web/textures/textures_sprite_explosion.html new file mode 100644 index 0000000..1a684e6 --- /dev/null +++ b/examples/web/textures/textures_sprite_explosion.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_sprite_explosion.js b/examples/web/textures/textures_sprite_explosion.js new file mode 100644 index 0000000..5f924b9 --- /dev/null +++ b/examples/web/textures/textures_sprite_explosion.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_sprite_explosion.data";var REMOTE_PACKAGE_BASE="textures_sprite_explosion.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5392672,DYNAMICTOP_PTR=149760;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_sprite_explosion.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":430,"maximum":430,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};var ASM_CONSTS=[function($0){return navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined},function($0){try{var temp=new(window.AudioContext||window.webkitAudioContext);var sampleRate=temp.sampleRate;temp.close();return sampleRate}catch(e){return 0}},function($0,$1){var device=miniaudio.get_device_by_index($0);if(device.scriptNode!==undefined){device.scriptNode.onaudioprocess=function(e){};device.scriptNode.disconnect();device.scriptNode=undefined}if(device.streamNode!==undefined){device.streamNode.disconnect();device.streamNode=undefined}device.webaudio.close();device.webaudio=undefined;if(device.intermediaryBuffer!==undefined){Module._free(device.intermediaryBuffer);device.intermediaryBuffer=undefined;device.intermediaryBufferView=undefined;device.intermediaryBufferSizeInBytes=undefined}miniaudio.untrack_device_by_index($0)},function($0,$1,$2,$3,$4){var channels=$0;var sampleRate=$1;var bufferSize=$2;var isCapture=$3;var pDevice=$4;if(typeof miniaudio==="undefined"){return-1}var device={};device.webaudio=new(window.AudioContext||window.webkitAudioContext)({sampleRate:sampleRate});device.webaudio.suspend();device.intermediaryBufferSizeInBytes=channels*bufferSize*4;device.intermediaryBuffer=Module._malloc(device.intermediaryBufferSizeInBytes);device.intermediaryBufferView=new Float32Array(Module.HEAPF32.buffer,device.intermediaryBuffer,device.intermediaryBufferSizeInBytes);device.scriptNode=device.webaudio.createScriptProcessor(bufferSize,channels,channels);if(isCapture){device.scriptNode.onaudioprocess=function(e){if(device.intermediaryBuffer===undefined){return}for(var iChannel=0;iChanneldevice.intermediaryBufferSizeInBytes/channels/4){framesToProcess=device.intermediaryBufferSizeInBytes/channels/4}if(sendSilence){device.intermediaryBufferView.fill(0)}else{for(var iFrame=0;iFramedevice.intermediaryBufferSizeInBytes/channels/4){framesToProcess=device.intermediaryBufferSizeInBytes/channels/4}ccall("ma_device_process_pcm_frames_playback__webaudio","undefined",["number","number","number"],[pDevice,framesToProcess,device.intermediaryBuffer]);if(outputSilence){for(var iChannel=0;iChannel0){if(miniaudio.devices[miniaudio.devices.length-1]==null){miniaudio.devices.pop()}else{break}}};miniaudio.untrack_device=function(device){for(var iDevice=0;iDevice>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _pthread_attr_destroy(attr){return 0}function _pthread_attr_init(attr){return 0}function _pthread_cond_destroy(){return 0}function _pthread_cond_init(){return 0}function _pthread_cond_signal(){return 0}function _pthread_cond_wait(){return 0}function _pthread_create(){return 11}function _pthread_join(){}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"sc":___lock,"A":___setErrNo,"_a":___syscall140,"Pa":___syscall145,"z":___syscall146,"m":___syscall221,"ka":___syscall5,"y":___syscall54,"R":___syscall6,"x":___unlock,"w":_eglGetProcAddress,"e":_emscripten_asm_const_ii,"Bd":_emscripten_asm_const_iii,"qd":_emscripten_asm_const_iiiiii,"Q":_emscripten_exit_pointerlock,"Xc":_emscripten_get_gamepad_status,"Mc":_emscripten_get_heap_size,"Cc":_emscripten_get_num_gamepads,"N":_emscripten_get_pointerlock_status,"oc":_emscripten_glActiveTexture,"ic":_emscripten_glAttachShader,"cc":_emscripten_glBeginQueryEXT,"Xb":_emscripten_glBindAttribLocation,"Pb":_emscripten_glBindBuffer,"Fb":_emscripten_glBindFramebuffer,"wb":_emscripten_glBindRenderbuffer,"nb":_emscripten_glBindTexture,"jb":_emscripten_glBindVertexArrayOES,"ib":_emscripten_glBlendColor,"hb":_emscripten_glBlendEquation,"gb":_emscripten_glBlendEquationSeparate,"fb":_emscripten_glBlendFunc,"eb":_emscripten_glBlendFuncSeparate,"db":_emscripten_glBufferData,"cb":_emscripten_glBufferSubData,"bb":_emscripten_glCheckFramebufferStatus,"ab":_emscripten_glClear,"$a":_emscripten_glClearColor,"Za":_emscripten_glClearDepthf,"Ya":_emscripten_glClearStencil,"Xa":_emscripten_glColorMask,"Wa":_emscripten_glCompileShader,"Va":_emscripten_glCompressedTexImage2D,"Ua":_emscripten_glCompressedTexSubImage2D,"Ta":_emscripten_glCopyTexImage2D,"Sa":_emscripten_glCopyTexSubImage2D,"Ra":_emscripten_glCreateProgram,"Qa":_emscripten_glCreateShader,"Oa":_emscripten_glCullFace,"Na":_emscripten_glDeleteBuffers,"Ma":_emscripten_glDeleteFramebuffers,"La":_emscripten_glDeleteProgram,"Ka":_emscripten_glDeleteQueriesEXT,"Ja":_emscripten_glDeleteRenderbuffers,"Ia":_emscripten_glDeleteShader,"Ha":_emscripten_glDeleteTextures,"Ga":_emscripten_glDeleteVertexArraysOES,"Fa":_emscripten_glDepthFunc,"Ea":_emscripten_glDepthMask,"Da":_emscripten_glDepthRangef,"Ca":_emscripten_glDetachShader,"Ba":_emscripten_glDisable,"Aa":_emscripten_glDisableVertexAttribArray,"za":_emscripten_glDrawArrays,"ya":_emscripten_glDrawArraysInstancedANGLE,"xa":_emscripten_glDrawBuffersWEBGL,"wa":_emscripten_glDrawElements,"va":_emscripten_glDrawElementsInstancedANGLE,"ua":_emscripten_glEnable,"ta":_emscripten_glEnableVertexAttribArray,"sa":_emscripten_glEndQueryEXT,"ra":_emscripten_glFinish,"qa":_emscripten_glFlush,"pa":_emscripten_glFramebufferRenderbuffer,"oa":_emscripten_glFramebufferTexture2D,"na":_emscripten_glFrontFace,"ma":_emscripten_glGenBuffers,"la":_emscripten_glGenFramebuffers,"ja":_emscripten_glGenQueriesEXT,"ia":_emscripten_glGenRenderbuffers,"ha":_emscripten_glGenTextures,"ga":_emscripten_glGenVertexArraysOES,"fa":_emscripten_glGenerateMipmap,"ea":_emscripten_glGetActiveAttrib,"da":_emscripten_glGetActiveUniform,"ca":_emscripten_glGetAttachedShaders,"ba":_emscripten_glGetAttribLocation,"aa":_emscripten_glGetBooleanv,"$":_emscripten_glGetBufferParameteriv,"_":_emscripten_glGetError,"Z":_emscripten_glGetFloatv,"Y":_emscripten_glGetFramebufferAttachmentParameteriv,"X":_emscripten_glGetIntegerv,"W":_emscripten_glGetProgramInfoLog,"V":_emscripten_glGetProgramiv,"U":_emscripten_glGetQueryObjecti64vEXT,"T":_emscripten_glGetQueryObjectivEXT,"S":_emscripten_glGetQueryObjectui64vEXT,"ne":_emscripten_glGetQueryObjectuivEXT,"me":_emscripten_glGetQueryivEXT,"le":_emscripten_glGetRenderbufferParameteriv,"ke":_emscripten_glGetShaderInfoLog,"je":_emscripten_glGetShaderPrecisionFormat,"ie":_emscripten_glGetShaderSource,"he":_emscripten_glGetShaderiv,"ge":_emscripten_glGetString,"fe":_emscripten_glGetTexParameterfv,"ee":_emscripten_glGetTexParameteriv,"de":_emscripten_glGetUniformLocation,"ce":_emscripten_glGetUniformfv,"be":_emscripten_glGetUniformiv,"ae":_emscripten_glGetVertexAttribPointerv,"$d":_emscripten_glGetVertexAttribfv,"_d":_emscripten_glGetVertexAttribiv,"Zd":_emscripten_glHint,"Yd":_emscripten_glIsBuffer,"Xd":_emscripten_glIsEnabled,"Wd":_emscripten_glIsFramebuffer,"Vd":_emscripten_glIsProgram,"Ud":_emscripten_glIsQueryEXT,"Td":_emscripten_glIsRenderbuffer,"Sd":_emscripten_glIsShader,"Rd":_emscripten_glIsTexture,"Qd":_emscripten_glIsVertexArrayOES,"Pd":_emscripten_glLineWidth,"Od":_emscripten_glLinkProgram,"Nd":_emscripten_glPixelStorei,"Md":_emscripten_glPolygonOffset,"Ld":_emscripten_glQueryCounterEXT,"Kd":_emscripten_glReadPixels,"Jd":_emscripten_glReleaseShaderCompiler,"Id":_emscripten_glRenderbufferStorage,"Hd":_emscripten_glSampleCoverage,"Gd":_emscripten_glScissor,"Fd":_emscripten_glShaderBinary,"Ed":_emscripten_glShaderSource,"Dd":_emscripten_glStencilFunc,"Cd":_emscripten_glStencilFuncSeparate,"Ad":_emscripten_glStencilMask,"zd":_emscripten_glStencilMaskSeparate,"yd":_emscripten_glStencilOp,"xd":_emscripten_glStencilOpSeparate,"wd":_emscripten_glTexImage2D,"vd":_emscripten_glTexParameterf,"ud":_emscripten_glTexParameterfv,"td":_emscripten_glTexParameteri,"sd":_emscripten_glTexParameteriv,"rd":_emscripten_glTexSubImage2D,"pd":_emscripten_glUniform1f,"od":_emscripten_glUniform1fv,"nd":_emscripten_glUniform1i,"md":_emscripten_glUniform1iv,"ld":_emscripten_glUniform2f,"kd":_emscripten_glUniform2fv,"jd":_emscripten_glUniform2i,"id":_emscripten_glUniform2iv,"hd":_emscripten_glUniform3f,"gd":_emscripten_glUniform3fv,"fd":_emscripten_glUniform3i,"ed":_emscripten_glUniform3iv,"dd":_emscripten_glUniform4f,"cd":_emscripten_glUniform4fv,"bd":_emscripten_glUniform4i,"ad":_emscripten_glUniform4iv,"$c":_emscripten_glUniformMatrix2fv,"_c":_emscripten_glUniformMatrix3fv,"Zc":_emscripten_glUniformMatrix4fv,"Yc":_emscripten_glUseProgram,"Wc":_emscripten_glValidateProgram,"Vc":_emscripten_glVertexAttrib1f,"Uc":_emscripten_glVertexAttrib1fv,"Tc":_emscripten_glVertexAttrib2f,"Sc":_emscripten_glVertexAttrib2fv,"Rc":_emscripten_glVertexAttrib3f,"Qc":_emscripten_glVertexAttrib3fv,"Pc":_emscripten_glVertexAttrib4f,"Oc":_emscripten_glVertexAttrib4fv,"Nc":_emscripten_glVertexAttribDivisorANGLE,"Lc":_emscripten_glVertexAttribPointer,"Kc":_emscripten_glViewport,"Jc":_emscripten_memcpy_big,"Ic":_emscripten_request_pointerlock,"Hc":_emscripten_resize_heap,"P":_emscripten_run_script,"Gc":_emscripten_sample_gamepad_data,"Fc":_emscripten_set_click_callback_on_thread,"Ec":_emscripten_set_fullscreenchange_callback_on_thread,"Dc":_emscripten_set_gamepadconnected_callback_on_thread,"Bc":_emscripten_set_gamepaddisconnected_callback_on_thread,"Ac":_emscripten_set_keypress_callback_on_thread,"zc":_emscripten_set_main_loop,"yc":_emscripten_set_touchcancel_callback_on_thread,"xc":_emscripten_set_touchend_callback_on_thread,"wc":_emscripten_set_touchmove_callback_on_thread,"vc":_emscripten_set_touchstart_callback_on_thread,"uc":_exit,"tc":_glActiveTexture,"O":_glAttachShader,"j":_glBindAttribLocation,"d":_glBindBuffer,"l":_glBindTexture,"rc":_glBlendFunc,"r":_glBufferData,"v":_glBufferSubData,"M":_glClear,"L":_glClearColor,"qc":_glClearDepthf,"pc":_glCompileShader,"nc":_glCompressedTexImage2D,"mc":_glCreateProgram,"lc":_glCreateShader,"kc":_glCullFace,"q":_glDeleteBuffers,"K":_glDeleteProgram,"J":_glDeleteShader,"I":_glDeleteTextures,"jc":_glDepthFunc,"H":_glDetachShader,"hc":_glDisable,"p":_glDisableVertexAttribArray,"gc":_glDrawArrays,"fc":_glDrawElements,"G":_glEnable,"i":_glEnableVertexAttribArray,"ec":_glFrontFace,"o":_glGenBuffers,"dc":_glGenTextures,"u":_glGetAttribLocation,"bc":_glGetFloatv,"ac":_glGetProgramInfoLog,"F":_glGetProgramiv,"$b":_glGetShaderInfoLog,"E":_glGetShaderiv,"k":_glGetString,"t":_glGetUniformLocation,"_b":_glLinkProgram,"Zb":_glPixelStorei,"Yb":_glReadPixels,"Wb":_glShaderSource,"Vb":_glTexImage2D,"h":_glTexParameteri,"Ub":_glUniform1i,"Tb":_glUniform4f,"Sb":_glUniformMatrix4fv,"s":_glUseProgram,"g":_glVertexAttribPointer,"Rb":_glViewport,"Qb":_glfwCreateWindow,"Ob":_glfwDefaultWindowHints,"Nb":_glfwDestroyWindow,"Mb":_glfwGetCursorPos,"n":_glfwGetTime,"Lb":_glfwInit,"Kb":_glfwMakeContextCurrent,"Jb":_glfwSetCharCallback,"Ib":_glfwSetCursorEnterCallback,"Hb":_glfwSetCursorPosCallback,"Gb":_glfwSetDropCallback,"Eb":_glfwSetErrorCallback,"Db":_glfwSetKeyCallback,"Cb":_glfwSetMouseButtonCallback,"Bb":_glfwSetScrollCallback,"Ab":_glfwSetWindowIconifyCallback,"zb":_glfwSetWindowShouldClose,"yb":_glfwSetWindowSizeCallback,"xb":_glfwSwapBuffers,"D":_glfwTerminate,"f":_glfwWindowHint,"C":_llvm_stackrestore,"B":_llvm_stacksave,"vb":_nanosleep,"ub":_pthread_attr_destroy,"tb":_pthread_attr_init,"sb":_pthread_cond_destroy,"rb":_pthread_cond_init,"qb":_pthread_cond_signal,"pb":_pthread_cond_wait,"ob":_pthread_create,"mb":_pthread_join,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["te"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["De"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Fe"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Be"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_sprite_explosion.wasm b/examples/web/textures/textures_sprite_explosion.wasm new file mode 100644 index 0000000..ec3fc83 Binary files /dev/null and b/examples/web/textures/textures_sprite_explosion.wasm differ diff --git a/examples/web/textures/textures_srcrec_dstrec.c b/examples/web/textures/textures_srcrec_dstrec.c index 05900c3..6ba6b2d 100644 --- a/examples/web/textures/textures_srcrec_dstrec.c +++ b/examples/web/textures/textures_srcrec_dstrec.c @@ -18,18 +18,18 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) -Texture2D scarfy; +Texture2D scarfy = { 0 }; -int frameWidth; -int frameHeight; +int frameWidth = 0; +int frameHeight = 0; -Rectangle sourceRec; -Rectangle destRec; -Vector2 origin; +Rectangle sourceRec = { 0 }; +Rectangle destRec = { 0 }; +Vector2 origin = { 0 }; int rotation = 0; @@ -39,7 +39,7 @@ int rotation = 0; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -48,12 +48,12 @@ int main(void) InitWindow(screenWidth, screenHeight, "raylib [textures] examples - texture source and destination rectangles"); scarfy = LoadTexture("resources/scarfy.png"); // Texture loading - + frameWidth = scarfy.width/6; frameHeight = scarfy.height; - + // NOTE: On PLATFORM_WEB, NPOT textures support is limited - + // NOTE: Source rectangle (part of the texture to use for drawing) sourceRec = (Rectangle){ 0, 0, frameWidth, frameHeight }; @@ -68,7 +68,7 @@ int main(void) #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -79,7 +79,7 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- UnloadTexture(scarfy); // Texture unloading - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- @@ -111,7 +111,7 @@ void UpdateDrawFrame(void) DrawLine(destRec.x, 0, destRec.x, screenHeight, GRAY); DrawLine(0, destRec.y, screenWidth, destRec.y, GRAY); - + DrawText("(c) Scarfy sprite by Eiden Marsal", screenWidth - 200, screenHeight - 20, 10, GRAY); EndDrawing(); diff --git a/examples/web/textures/textures_srcrec_dstrec.data b/examples/web/textures/textures_srcrec_dstrec.data new file mode 100644 index 0000000..4803ef7 Binary files /dev/null and b/examples/web/textures/textures_srcrec_dstrec.data differ diff --git a/examples/web/textures/textures_srcrec_dstrec.html b/examples/web/textures/textures_srcrec_dstrec.html new file mode 100644 index 0000000..0c03223 --- /dev/null +++ b/examples/web/textures/textures_srcrec_dstrec.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_srcrec_dstrec.js b/examples/web/textures/textures_srcrec_dstrec.js new file mode 100644 index 0000000..d6f6e9d --- /dev/null +++ b/examples/web/textures/textures_srcrec_dstrec.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_srcrec_dstrec.data";var REMOTE_PACKAGE_BASE="textures_srcrec_dstrec.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273056,DYNAMICTOP_PTR=30144;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_srcrec_dstrec.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"kc":___lock,"z":___setErrNo,"Za":___syscall140,"Oa":___syscall145,"y":___syscall146,"l":___syscall221,"ja":___syscall5,"x":___syscall54,"Q":___syscall6,"w":___unlock,"v":_eglGetProcAddress,"P":_emscripten_exit_pointerlock,"qd":_emscripten_get_gamepad_status,"fd":_emscripten_get_heap_size,"Wc":_emscripten_get_num_gamepads,"O":_emscripten_get_pointerlock_status,"Bc":_emscripten_glActiveTexture,"rc":_emscripten_glAttachShader,"jc":_emscripten_glBeginQueryEXT,"cc":_emscripten_glBindAttribLocation,"Zb":_emscripten_glBindBuffer,"Tb":_emscripten_glBindFramebuffer,"Mb":_emscripten_glBindRenderbuffer,"Db":_emscripten_glBindTexture,"tb":_emscripten_glBindVertexArrayOES,"mb":_emscripten_glBlendColor,"jb":_emscripten_glBlendEquation,"ib":_emscripten_glBlendEquationSeparate,"hb":_emscripten_glBlendFunc,"gb":_emscripten_glBlendFuncSeparate,"fb":_emscripten_glBufferData,"eb":_emscripten_glBufferSubData,"db":_emscripten_glCheckFramebufferStatus,"cb":_emscripten_glClear,"bb":_emscripten_glClearColor,"ab":_emscripten_glClearDepthf,"$a":_emscripten_glClearStencil,"_a":_emscripten_glColorMask,"Ya":_emscripten_glCompileShader,"Xa":_emscripten_glCompressedTexImage2D,"Wa":_emscripten_glCompressedTexSubImage2D,"Va":_emscripten_glCopyTexImage2D,"Ua":_emscripten_glCopyTexSubImage2D,"Ta":_emscripten_glCreateProgram,"Sa":_emscripten_glCreateShader,"Ra":_emscripten_glCullFace,"Qa":_emscripten_glDeleteBuffers,"Pa":_emscripten_glDeleteFramebuffers,"Na":_emscripten_glDeleteProgram,"Ma":_emscripten_glDeleteQueriesEXT,"La":_emscripten_glDeleteRenderbuffers,"Ka":_emscripten_glDeleteShader,"Ja":_emscripten_glDeleteTextures,"Ia":_emscripten_glDeleteVertexArraysOES,"Ha":_emscripten_glDepthFunc,"Ga":_emscripten_glDepthMask,"Fa":_emscripten_glDepthRangef,"Ea":_emscripten_glDetachShader,"Da":_emscripten_glDisable,"Ca":_emscripten_glDisableVertexAttribArray,"Ba":_emscripten_glDrawArrays,"Aa":_emscripten_glDrawArraysInstancedANGLE,"za":_emscripten_glDrawBuffersWEBGL,"ya":_emscripten_glDrawElements,"xa":_emscripten_glDrawElementsInstancedANGLE,"wa":_emscripten_glEnable,"va":_emscripten_glEnableVertexAttribArray,"ua":_emscripten_glEndQueryEXT,"ta":_emscripten_glFinish,"sa":_emscripten_glFlush,"ra":_emscripten_glFramebufferRenderbuffer,"qa":_emscripten_glFramebufferTexture2D,"pa":_emscripten_glFrontFace,"oa":_emscripten_glGenBuffers,"na":_emscripten_glGenFramebuffers,"ma":_emscripten_glGenQueriesEXT,"la":_emscripten_glGenRenderbuffers,"ka":_emscripten_glGenTextures,"ia":_emscripten_glGenVertexArraysOES,"ha":_emscripten_glGenerateMipmap,"ga":_emscripten_glGetActiveAttrib,"fa":_emscripten_glGetActiveUniform,"ea":_emscripten_glGetAttachedShaders,"da":_emscripten_glGetAttribLocation,"ca":_emscripten_glGetBooleanv,"ba":_emscripten_glGetBufferParameteriv,"aa":_emscripten_glGetError,"$":_emscripten_glGetFloatv,"_":_emscripten_glGetFramebufferAttachmentParameteriv,"Z":_emscripten_glGetIntegerv,"Y":_emscripten_glGetProgramInfoLog,"X":_emscripten_glGetProgramiv,"W":_emscripten_glGetQueryObjecti64vEXT,"V":_emscripten_glGetQueryObjectivEXT,"U":_emscripten_glGetQueryObjectui64vEXT,"T":_emscripten_glGetQueryObjectuivEXT,"S":_emscripten_glGetQueryivEXT,"R":_emscripten_glGetRenderbufferParameteriv,"ce":_emscripten_glGetShaderInfoLog,"be":_emscripten_glGetShaderPrecisionFormat,"ae":_emscripten_glGetShaderSource,"$d":_emscripten_glGetShaderiv,"_d":_emscripten_glGetString,"Zd":_emscripten_glGetTexParameterfv,"Yd":_emscripten_glGetTexParameteriv,"Xd":_emscripten_glGetUniformLocation,"Wd":_emscripten_glGetUniformfv,"Vd":_emscripten_glGetUniformiv,"Ud":_emscripten_glGetVertexAttribPointerv,"Td":_emscripten_glGetVertexAttribfv,"Sd":_emscripten_glGetVertexAttribiv,"Rd":_emscripten_glHint,"Qd":_emscripten_glIsBuffer,"Pd":_emscripten_glIsEnabled,"Od":_emscripten_glIsFramebuffer,"Nd":_emscripten_glIsProgram,"Md":_emscripten_glIsQueryEXT,"Ld":_emscripten_glIsRenderbuffer,"Kd":_emscripten_glIsShader,"Jd":_emscripten_glIsTexture,"Id":_emscripten_glIsVertexArrayOES,"Hd":_emscripten_glLineWidth,"Gd":_emscripten_glLinkProgram,"Fd":_emscripten_glPixelStorei,"Ed":_emscripten_glPolygonOffset,"Dd":_emscripten_glQueryCounterEXT,"Cd":_emscripten_glReadPixels,"Bd":_emscripten_glReleaseShaderCompiler,"Ad":_emscripten_glRenderbufferStorage,"zd":_emscripten_glSampleCoverage,"yd":_emscripten_glScissor,"xd":_emscripten_glShaderBinary,"wd":_emscripten_glShaderSource,"vd":_emscripten_glStencilFunc,"ud":_emscripten_glStencilFuncSeparate,"td":_emscripten_glStencilMask,"sd":_emscripten_glStencilMaskSeparate,"rd":_emscripten_glStencilOp,"pd":_emscripten_glStencilOpSeparate,"od":_emscripten_glTexImage2D,"nd":_emscripten_glTexParameterf,"md":_emscripten_glTexParameterfv,"ld":_emscripten_glTexParameteri,"kd":_emscripten_glTexParameteriv,"jd":_emscripten_glTexSubImage2D,"id":_emscripten_glUniform1f,"hd":_emscripten_glUniform1fv,"gd":_emscripten_glUniform1i,"ed":_emscripten_glUniform1iv,"dd":_emscripten_glUniform2f,"cd":_emscripten_glUniform2fv,"bd":_emscripten_glUniform2i,"ad":_emscripten_glUniform2iv,"$c":_emscripten_glUniform3f,"_c":_emscripten_glUniform3fv,"Zc":_emscripten_glUniform3i,"Yc":_emscripten_glUniform3iv,"Xc":_emscripten_glUniform4f,"Vc":_emscripten_glUniform4fv,"Uc":_emscripten_glUniform4i,"Tc":_emscripten_glUniform4iv,"Sc":_emscripten_glUniformMatrix2fv,"Rc":_emscripten_glUniformMatrix3fv,"Qc":_emscripten_glUniformMatrix4fv,"Pc":_emscripten_glUseProgram,"Oc":_emscripten_glValidateProgram,"Nc":_emscripten_glVertexAttrib1f,"Mc":_emscripten_glVertexAttrib1fv,"Lc":_emscripten_glVertexAttrib2f,"Kc":_emscripten_glVertexAttrib2fv,"Jc":_emscripten_glVertexAttrib3f,"Ic":_emscripten_glVertexAttrib3fv,"Hc":_emscripten_glVertexAttrib4f,"Gc":_emscripten_glVertexAttrib4fv,"Fc":_emscripten_glVertexAttribDivisorANGLE,"Ec":_emscripten_glVertexAttribPointer,"Dc":_emscripten_glViewport,"Cc":_emscripten_memcpy_big,"Ac":_emscripten_request_pointerlock,"zc":_emscripten_resize_heap,"N":_emscripten_run_script,"yc":_emscripten_sample_gamepad_data,"xc":_emscripten_set_click_callback_on_thread,"wc":_emscripten_set_fullscreenchange_callback_on_thread,"vc":_emscripten_set_gamepadconnected_callback_on_thread,"uc":_emscripten_set_gamepaddisconnected_callback_on_thread,"tc":_emscripten_set_keypress_callback_on_thread,"sc":_emscripten_set_main_loop,"qc":_emscripten_set_touchcancel_callback_on_thread,"pc":_emscripten_set_touchend_callback_on_thread,"oc":_emscripten_set_touchmove_callback_on_thread,"nc":_emscripten_set_touchstart_callback_on_thread,"mc":_exit,"lc":_glActiveTexture,"M":_glAttachShader,"i":_glBindAttribLocation,"d":_glBindBuffer,"k":_glBindTexture,"ic":_glBlendFunc,"q":_glBufferData,"u":_glBufferSubData,"L":_glClear,"K":_glClearColor,"hc":_glClearDepthf,"gc":_glCompileShader,"fc":_glCompressedTexImage2D,"ec":_glCreateProgram,"dc":_glCreateShader,"bc":_glCullFace,"p":_glDeleteBuffers,"J":_glDeleteProgram,"I":_glDeleteShader,"H":_glDeleteTextures,"ac":_glDepthFunc,"G":_glDetachShader,"$b":_glDisable,"o":_glDisableVertexAttribArray,"_b":_glDrawArrays,"Yb":_glDrawElements,"F":_glEnable,"h":_glEnableVertexAttribArray,"Xb":_glFrontFace,"n":_glGenBuffers,"Wb":_glGenTextures,"t":_glGetAttribLocation,"Vb":_glGetFloatv,"Ub":_glGetProgramInfoLog,"E":_glGetProgramiv,"Sb":_glGetShaderInfoLog,"D":_glGetShaderiv,"j":_glGetString,"s":_glGetUniformLocation,"Rb":_glLinkProgram,"Qb":_glPixelStorei,"Pb":_glReadPixels,"Ob":_glShaderSource,"Nb":_glTexImage2D,"g":_glTexParameteri,"Lb":_glUniform1i,"Kb":_glUniform4f,"Jb":_glUniformMatrix4fv,"r":_glUseProgram,"f":_glVertexAttribPointer,"Ib":_glViewport,"Hb":_glfwCreateWindow,"Gb":_glfwDefaultWindowHints,"Fb":_glfwDestroyWindow,"Eb":_glfwGetCursorPos,"m":_glfwGetTime,"Cb":_glfwInit,"Bb":_glfwMakeContextCurrent,"Ab":_glfwSetCharCallback,"zb":_glfwSetCursorEnterCallback,"yb":_glfwSetCursorPosCallback,"xb":_glfwSetDropCallback,"wb":_glfwSetErrorCallback,"vb":_glfwSetKeyCallback,"ub":_glfwSetMouseButtonCallback,"sb":_glfwSetScrollCallback,"rb":_glfwSetWindowIconifyCallback,"qb":_glfwSetWindowShouldClose,"pb":_glfwSetWindowSizeCallback,"ob":_glfwSwapBuffers,"C":_glfwTerminate,"e":_glfwWindowHint,"B":_llvm_stackrestore,"A":_llvm_stacksave,"nb":_nanosleep,"lb":_time,"kb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["de"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["ee"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["fe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["ge"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["he"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["ie"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["je"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["se"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ke"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["le"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["me"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["re"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_srcrec_dstrec.wasm b/examples/web/textures/textures_srcrec_dstrec.wasm new file mode 100644 index 0000000..adf681e Binary files /dev/null and b/examples/web/textures/textures_srcrec_dstrec.wasm differ diff --git a/examples/web/textures/textures_to_image.c b/examples/web/textures/textures_to_image.c index e87f4a4..566a691 100644 --- a/examples/web/textures/textures_to_image.c +++ b/examples/web/textures/textures_to_image.c @@ -20,14 +20,13 @@ //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -int screenWidth = 800; -int screenHeight = 450; +const int screenWidth = 800; +const int screenHeight = 450; // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) -Image image; -Texture2D texture; - +Image image = { 0 }; +Texture2D texture = { 0 }; //---------------------------------------------------------------------------------- // Module Functions Declaration @@ -35,7 +34,7 @@ Texture2D texture; void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- -// Main Enry Point +// Program Main Entry Point //---------------------------------------------------------------------------------- int main(void) { @@ -46,19 +45,19 @@ int main(void) image = LoadImage("resources/raylib_logo.png"); // Load image data into CPU memory (RAM) texture = LoadTextureFromImage(image); // Image converted to texture, GPU memory (RAM -> VRAM) UnloadImage(image); // Unload image data from CPU memory (RAM) - + image = GetTextureData(texture); // Retrieve image data from GPU memory (VRAM -> RAM) UnloadTexture(texture); // Unload texture from GPU memory (VRAM) - + texture = LoadTextureFromImage(image); // Recreate texture from retrieved image data (RAM -> VRAM) UnloadImage(image); // Unload retrieved image data from CPU memory (RAM) - + #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- - + // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { @@ -69,7 +68,7 @@ int main(void) // De-Initialization //-------------------------------------------------------------------------------------- UnloadTexture(texture); // Texture unloading - + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/web/textures/textures_to_image.data b/examples/web/textures/textures_to_image.data new file mode 100644 index 0000000..6654562 Binary files /dev/null and b/examples/web/textures/textures_to_image.data differ diff --git a/examples/web/textures/textures_to_image.html b/examples/web/textures/textures_to_image.html new file mode 100644 index 0000000..3d8f0dc --- /dev/null +++ b/examples/web/textures/textures_to_image.html @@ -0,0 +1 @@ +raylib HTML5 GAME
Downloading...
\ No newline at end of file diff --git a/examples/web/textures/textures_to_image.js b/examples/web/textures/textures_to_image.js new file mode 100644 index 0000000..37dd7bc --- /dev/null +++ b/examples/web/textures/textures_to_image.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="textures/textures_to_image.data";var REMOTE_PACKAGE_BASE="textures_to_image.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","resources",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"]("fp "+that.name);this.requests[this.name]=null}};var files=metadata.files;for(var i=0;i1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){return read(f)}}Module["readBinary"]=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":function(x,y){return x%y},"debugger":function(){debugger}};var functionPointers=new Array(0);if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var DYNAMIC_BASE=5273424,DYNAMICTOP_PTR=30512;var TOTAL_STACK=5242880;var INITIAL_TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(INITIAL_TOTAL_MEMORY>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var wasmBinaryFile="textures_to_image.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(Module["wasmBinary"]){return new Uint8Array(Module["wasmBinary"])}if(Module["readBinary"]){return Module["readBinary"](wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!Module["wasmBinary"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(env){var info={"env":env,"global":{"NaN":NaN,Infinity:Infinity},"global.Math":Math,"asm2wasm":asm2wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}if(!Module["wasmBinary"]&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:"same-origin"}),info).then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})}else{instantiateArrayBuffer(receiveInstantiatedSource)}return{}}Module["asm"]=function(global,env,providedBuffer){env["memory"]=wasmMemory;env["table"]=wasmTable=new WebAssembly.Table({"initial":320,"maximum":320,"element":"anyfunc"});env["__memory_base"]=1024;env["__table_base"]=0;var exports=createWasm(env);return exports};function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___lock(){}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)},resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(1)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=function(e){done(this.error);e.preventDefault()};create.sort().forEach(function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var NODEFS={isWindows:false,staticInit:function(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process["binding"]("constants");if(flags["fs"]){flags=flags["fs"]}NODEFS.flagsForNodeMap={1024:flags["O_APPEND"],64:flags["O_CREAT"],128:flags["O_EXCL"],0:flags["O_RDONLY"],2:flags["O_RDWR"],4096:flags["O_SYNC"],512:flags["O_TRUNC"],1:flags["O_WRONLY"]}},bufferFrom:function(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer)},mount:function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(22)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node},getMode:function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(22)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(-e.errno)}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(-e.errno)}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(-e.errno)}}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(5)},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size}}if(position<0){throw new FS.ErrnoError(22)}return position}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)},lookupPath:function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0},mayLookup:function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0},mayOpen:function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(29)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},getStreamFromFD:function(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream},getSocketFromFD:function(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket},getSocketAddress:function(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();if(!(offset_high==-1&&offset_low<0)&&!(offset_high==0&&offset_low>=0)){return-ERRNO_CODES.EOVERFLOW}var offset=offset_low;FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[result>>2]=tempI64[0],HEAP32[result+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var browserIterationFunc;if(typeof arg!=="undefined"){browserIterationFunc=function(){Module["dynCall_vi"](func,arg)}}else{browserIterationFunc=function(){Module["dynCall_v"](func)}}var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);if(vrDevice){canvasContainer.requestFullscreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullscreen()}},requestFullScreen:function(lockPointer,resizeCanvas,vrDevice){err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead.");Browser.requestFullScreen=function(lockPointer,resizeCanvas,vrDevice){return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};return Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:function(func){return function(){if(!ABORT)return func.apply(null,arguments)}},allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=false},resumeAsyncCallbacks:function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach(function(func){func()})}},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}})},safeSetTimeout:function(func,timeout){Module["noExitRuntime"]=true;return setTimeout(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}},timeout)},safeSetInterval:function(func,timeout){Module["noExitRuntime"]=true;return setInterval(function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";Module["readAsync"](url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglGetProcAddress(name_){return _emscripten_GetProcAddress(name_)}var JSEvents={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:false,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence0},removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i0||window.pageYOffset>0){return[window.pageXOffset,window.pageYOffset]}if(typeof document.documentElement.scrollLeft!=="undefined"||typeof document.documentElement.scrollTop!=="undefined"){return[document.documentElement.scrollLeft,document.documentElement.scrollTop]}return[document.body.scrollLeft|0,document.body.scrollTop|0]},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},tick:function(){if(window["performance"]&&window["performance"]["now"])return window["performance"]["now"]();else return Date.now()},fullscreenEnabled:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled}};function __requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.mozRequestPointerLock){target.mozRequestPointerLock()}else if(target.webkitRequestPointerLock){target.webkitRequestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.mozRequestPointerLock||document.body.webkitRequestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(__requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else if(document.mozExitPointerLock){document.mozExitPointerLock()}else if(document.webkitExitPointerLock){document.webkitExitPointerLock()}else{return-1}return 0}function __fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}function _emscripten_get_gamepad_status(index,gamepadState){if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;__fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}function __fillPointerlockChangeEventData(eventStruct,e){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)__fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}var GL={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){GL.miniTempBuffer=new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes)||canvas.getContext("experimental-webgl",webGLContextAttributes);return ctx&&GL.registerContext(ctx,webGLContextAttributes)},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle]);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;if(context.version<2){var instancedArraysExt=GLctx.getExtension("ANGLE_instanced_arrays");if(instancedArraysExt){GLctx["vertexAttribDivisor"]=function(index,divisor){instancedArraysExt["vertexAttribDivisorANGLE"](index,divisor)};GLctx["drawArraysInstanced"]=function(mode,first,count,primcount){instancedArraysExt["drawArraysInstancedANGLE"](mode,first,count,primcount)};GLctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){instancedArraysExt["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)}}var vaoExt=GLctx.getExtension("OES_vertex_array_object");if(vaoExt){GLctx["createVertexArray"]=function(){return vaoExt["createVertexArrayOES"]()};GLctx["deleteVertexArray"]=function(vao){vaoExt["deleteVertexArrayOES"](vao)};GLctx["bindVertexArray"]=function(vao){vaoExt["bindVertexArrayOES"](vao)};GLctx["isVertexArray"]=function(vao){return vaoExt["isVertexArrayOES"](vao)}}var drawBuffersExt=GLctx.getExtension("WEBGL_draw_buffers");if(drawBuffersExt){GLctx["drawBuffers"]=function(n,bufs){drawBuffersExt["drawBuffersWEBGL"](n,bufs)}}}GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");var automaticallyEnabledExtensions=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2"];var exts=GLctx.getSupportedExtensions();if(exts&&exts.length>0){GLctx.getSupportedExtensions().forEach(function(ext){if(automaticallyEnabledExtensions.indexOf(ext)!=-1){GLctx.getExtension(ext)}})}},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var __tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=__tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveAttrib(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx.getActiveUniform(program,index);if(!info)return;if(bufSize>0&&name){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"&&type!=="Integer64"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);return}}switch(type){case"Integer64":tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[p>>2]=tempI64[0],HEAP32[p+4>>2]=tempI64[1];break;case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,"Boolean")}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){if(GL.lastError){var error=GL.lastError;GL.lastError=0;return error}else{return GLctx.getError()}}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,"Integer")}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}tempI64=[ret>>>0,(tempDouble=ret,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[params>>2]=tempI64[0],HEAP32[params+4>>2]=tempI64[1]}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;if(bufSize>0&&source){var numBytesWrittenExclNull=stringToUTF8(result,source,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?parseInt(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;default:throw"internal emscriptenWebGLGetUniform() error, bad type: "+type}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Float")}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,"Integer")}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case"Integer":HEAP32[params>>2]=data;break;case"Float":HEAPF32[params>>2]=data;break;case"FloatToInteger":HEAP32[params>>2]=Math.fround(data);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}else{for(var i=0;i>2]=data[i];break;case"Float":HEAPF32[params+i*4>>2]=data[i];break;case"FloatToInteger":HEAP32[params+i*4>>2]=Math.fround(data[i]);break;default:throw"internal emscriptenWebGLGetVertexAttrib() error, bad type: "+type}}}}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"Float")}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,"FloatToInteger")}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function __computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}var __colorChannelsInGlTextureFormat={6402:1,6406:1,6407:3,6408:4,6409:1,6410:2,35904:3,35906:4};var __sizeOfGlTextureElementType={5121:1,5123:2,5125:4,5126:4,32819:2,32820:2,33635:2,34042:4,36193:2};function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var sizePerPixel=__colorChannelsInGlTextureFormat[format]*__sizeOfGlTextureElementType[type];if(!sizePerPixel){GL.recordError(1280);return}var bytes=__computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);var end=pixels+bytes;switch(type){case 5121:return HEAPU8.subarray(pixels,end);case 5126:return HEAPF32.subarray(pixels>>2,end>>2);case 5125:case 34042:return HEAPU32.subarray(pixels>>2,end>>2);case 5123:case 33635:case 32819:case 32820:case 36193:return HEAPU16.subarray(pixels>>1,end>>1);default:GL.recordError(1280)}}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}function _emscripten_glUniform1fv(location,count,value){if(count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _emscripten_glUniform1iv(location,count,value){GLctx.uniform1iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*4>>2))}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(2*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){GLctx.uniform2iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*8>>2))}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(3*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){GLctx.uniform3iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*12>>2))}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){GLctx.uniform4iv(GL.uniforms[location],HEAP32.subarray(value>>2,value+count*16>>2))}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(4*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(9*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(16*count<=GL.MINI_TEMP_BUFFER_SIZE){var view=GL.miniTempBufferViews[16*count-1];for(var i=0;i<16*count;i+=16){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var __specialEventTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function __findEventTarget(target){try{if(!target)return window;if(typeof target==="number")target=__specialEventTargets[target]||UTF8ToString(target);if(target==="#window")return window;else if(target==="#document")return document;else if(target==="#screen")return screen;else if(target==="#canvas")return Module["canvas"];return typeof target==="string"?document.getElementById(target):target}catch(e){return null}}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(!target)target="#canvas";target=__findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.mozRequestPointerLock&&!target.webkitRequestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(__requestPointerLock,2,[target]);return 1}else{return-2}}return __requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function __fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=JSEvents.tick();HEAP32[eventStruct+8>>2]=e.screenX;HEAP32[eventStruct+12>>2]=e.screenY;HEAP32[eventStruct+16>>2]=e.clientX;HEAP32[eventStruct+20>>2]=e.clientY;HEAP32[eventStruct+24>>2]=e.ctrlKey;HEAP32[eventStruct+28>>2]=e.shiftKey;HEAP32[eventStruct+32>>2]=e.altKey;HEAP32[eventStruct+36>>2]=e.metaKey;HEAP16[eventStruct+40>>1]=e.button;HEAP16[eventStruct+42>>1]=e.buttons;HEAP32[eventStruct+44>>2]=e["movementX"]||e["mozMovementX"]||e["webkitMovementX"]||e.screenX-JSEvents.previousScreenX;HEAP32[eventStruct+48>>2]=e["movementY"]||e["mozMovementY"]||e["webkitMovementY"]||e.screenY-JSEvents.previousScreenY;if(Module["canvas"]){var rect=Module["canvas"].getBoundingClientRect();HEAP32[eventStruct+60>>2]=e.clientX-rect.left;HEAP32[eventStruct+64>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+60>>2]=0;HEAP32[eventStruct+64>>2]=0}if(target){var rect=JSEvents.getBoundingClientRectOrZeros(target);HEAP32[eventStruct+52>>2]=e.clientX-rect.left;HEAP32[eventStruct+56>>2]=e.clientY-rect.top}else{HEAP32[eventStruct+52>>2]=0;HEAP32[eventStruct+56>>2]=0}if(e.type!=="wheel"&&e.type!=="mousewheel"){JSEvents.previousScreenX=e.screenX;JSEvents.previousScreenY=e.screenY}}function __registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=__findEventTarget(target);var mouseEventHandlerFunc=function(event){var e=event||window.event;__fillMouseEventData(JSEvents.mouseEvent,e,target);if(dynCall_iiii(callbackfunc,eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};if(JSEvents.isInternetExplorer()&&eventTypeString=="mousedown")eventHandler.allowsDeferredCalls=false;JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function __fillFullscreenChangeEventData(eventStruct,e){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function __registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(event){var e=event||window.event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;__fillFullscreenChangeEventData(fullscreenChangeEvent,e);if(dynCall_iiii(callbackfunc,eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:false,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(typeof JSEvents.fullscreenEnabled()==="undefined")return-1;target=target?__findEventTarget(target):__specialEventTargets[1];if(!target)return-4;__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"mozfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);__registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"msfullscreenchange",targetThread);return 0}function __registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(event){var e=event||window.event;var gamepadEvent=JSEvents.gamepadEvent;__fillGamepadEventData(gamepadEvent,e.gamepad);if(dynCall_iiii(callbackfunc,eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;__registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function __registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(event){var e=event||window.event;var keyEventData=JSEvents.keyEvent;stringToUTF8(e.key?e.key:"",keyEventData+0,32);stringToUTF8(e.code?e.code:"",keyEventData+32,32);HEAP32[keyEventData+64>>2]=e.location;HEAP32[keyEventData+68>>2]=e.ctrlKey;HEAP32[keyEventData+72>>2]=e.shiftKey;HEAP32[keyEventData+76>>2]=e.altKey;HEAP32[keyEventData+80>>2]=e.metaKey;HEAP32[keyEventData+84>>2]=e.repeat;stringToUTF8(e.locale?e.locale:"",keyEventData+88,32);stringToUTF8(e.char?e.char:"",keyEventData+120,32);HEAP32[keyEventData+152>>2]=e.charCode;HEAP32[keyEventData+156>>2]=e.keyCode;HEAP32[keyEventData+160>>2]=e.which;if(dynCall_iiii(callbackfunc,eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:__findEventTarget(target),allowsDeferredCalls:JSEvents.isInternetExplorer()?false:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}function __registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=__findEventTarget(target);var touchEventHandlerFunc=function(event){var e=event||window.event;var touches={};for(var i=0;i>2]=e.ctrlKey;HEAP32[ptr+8>>2]=e.shiftKey;HEAP32[ptr+12>>2]=e.altKey;HEAP32[ptr+16>>2]=e.metaKey;ptr+=20;var canvasRect=Module["canvas"]?Module["canvas"].getBoundingClientRect():undefined;var targetRect=JSEvents.getBoundingClientRectOrZeros(target);var numTouches=0;for(var i in touches){var t=touches[i];HEAP32[ptr>>2]=t.identifier;HEAP32[ptr+4>>2]=t.screenX;HEAP32[ptr+8>>2]=t.screenY;HEAP32[ptr+12>>2]=t.clientX;HEAP32[ptr+16>>2]=t.clientY;HEAP32[ptr+20>>2]=t.pageX;HEAP32[ptr+24>>2]=t.pageY;HEAP32[ptr+28>>2]=t.changed;HEAP32[ptr+32>>2]=t.onTarget;if(canvasRect){HEAP32[ptr+44>>2]=t.clientX-canvasRect.left;HEAP32[ptr+48>>2]=t.clientY-canvasRect.top}else{HEAP32[ptr+44>>2]=0;HEAP32[ptr+48>>2]=0}HEAP32[ptr+36>>2]=t.clientX-targetRect.left;HEAP32[ptr+40>>2]=t.clientY-targetRect.top;ptr+=52;if(++numTouches>=32){break}}HEAP32[touchEvent>>2]=numTouches;if(dynCall_iiii(callbackfunc,eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _exit(status){exit(status)}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GL.currArrayBuffer)GL.currArrayBuffer=0;if(id==GL.currElementArrayBuffer)GL.currElementArrayBuffer=0}}function _glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,"Float")}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";if(maxLength>0&&infoLog){var numBytesWrittenExclNull=stringToUTF8(log,infoLog,maxLength);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source===null||source.length==0?0:source.length+1;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(var i=0;i=0&&arrayIndex>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2];view[i+9]=HEAPF32[value+(4*i+36)>>2];view[i+10]=HEAPF32[value+(4*i+40)>>2];view[i+11]=HEAPF32[value+(4*i+44)>>2];view[i+12]=HEAPF32[value+(4*i+48)>>2];view[i+13]=HEAPF32[value+(4*i+52)>>2];view[i+14]=HEAPF32[value+(4*i+56)>>2];view[i+15]=HEAPF32[value+(4*i+60)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GLFW={Window:function(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null},WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;dynCall_vii(GLFW.active.charFunc,GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;dynCall_viiiii(GLFW.active.keyFunc,GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;dynCall_vii(GLFW.active.cursorEnterFunc,GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}dynCall_vidd(GLFW.active.scrollFunc,GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;dynCall_viii(GLFW.active.windowSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;dynCall_viii(GLFW.active.framebufferSizeFunc,GLFW.active.id,GLFW.active.width,GLFW.active.height)},requestFullscreen:function(){var RFS=Module["canvas"]["requestFullscreen"]||Module["canvas"]["mozRequestFullScreen"]||Module["canvas"]["webkitRequestFullScreen"]||function(){};RFS.apply(Module["canvas"],[])},requestFullScreen:function(){err("GLFW.requestFullScreen() is deprecated. Please call GLFW.requestFullscreen instead.");GLFW.requestFullScreen=function(){return GLFW.requestFullscreen()};return GLFW.requestFullscreen()},exitFullscreen:function(){Browser.exitFullscreen()},cancelFullScreen:function(){err("GLFW.cancelFullScreen() is deprecated. Please call GLFW.exitFullscreen instead.");GLFW.cancelFullScreen=function(){return GLFW.exitFullscreen()};return GLFW.exitFullscreen()},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}setValue(x,wx,"i32");setValue(y,wy,"i32")},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}setValue(width,ww,"i32");setValue(height,wh,"i32")},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){GLFW.requestFullscreen()}else{GLFW.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;dynCall_viii(win.windowSizeFunc,win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){GLFW.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}if(!Module.ctx)return 0;var win=new GLFW.Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)dynCall_vi(win.windowCloseFunc,win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];var nanoseconds=HEAP32[rqtp+4>>2];if(rmtp!==0){HEAP32[rmtp>>2]=0;HEAP32[rmtp+4>>2]=0}return _usleep(seconds*1e6+nanoseconds/1e3)}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}FS.staticInit();Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead.");Module["requestFullScreen"]=Module["requestFullscreen"];Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullscreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof performance==="object"&&performance&&typeof performance["now"]==="function"){_emscripten_get_now=function(){return performance["now"]()}}else{_emscripten_get_now=Date.now}var GLctx;GL.init();for(var i=0;i<32;i++)__tempFixedLengthArray.push(new Array(i));function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmGlobalArg={};var asmLibraryArg={"c":abort,"b":___assert_fail,"uc":___lock,"C":___setErrNo,"db":___syscall140,"Ua":___syscall145,"B":___syscall146,"m":___syscall221,"pa":___syscall5,"A":___syscall54,"W":___syscall6,"z":___unlock,"y":_eglGetProcAddress,"V":_emscripten_exit_pointerlock,"Ad":_emscripten_get_gamepad_status,"pd":_emscripten_get_heap_size,"ed":_emscripten_get_num_gamepads,"U":_emscripten_get_pointerlock_status,"Lc":_emscripten_glActiveTexture,"Bc":_emscripten_glAttachShader,"tc":_emscripten_glBeginQueryEXT,"oc":_emscripten_glBindAttribLocation,"hc":_emscripten_glBindBuffer,"bc":_emscripten_glBindFramebuffer,"Wb":_emscripten_glBindRenderbuffer,"Rb":_emscripten_glBindTexture,"Ib":_emscripten_glBindVertexArrayOES,"yb":_emscripten_glBlendColor,"rb":_emscripten_glBlendEquation,"ob":_emscripten_glBlendEquationSeparate,"nb":_emscripten_glBlendFunc,"mb":_emscripten_glBlendFuncSeparate,"lb":_emscripten_glBufferData,"kb":_emscripten_glBufferSubData,"jb":_emscripten_glCheckFramebufferStatus,"ib":_emscripten_glClear,"hb":_emscripten_glClearColor,"gb":_emscripten_glClearDepthf,"fb":_emscripten_glClearStencil,"eb":_emscripten_glColorMask,"cb":_emscripten_glCompileShader,"bb":_emscripten_glCompressedTexImage2D,"ab":_emscripten_glCompressedTexSubImage2D,"$a":_emscripten_glCopyTexImage2D,"_a":_emscripten_glCopyTexSubImage2D,"Za":_emscripten_glCreateProgram,"Ya":_emscripten_glCreateShader,"Xa":_emscripten_glCullFace,"Wa":_emscripten_glDeleteBuffers,"Va":_emscripten_glDeleteFramebuffers,"Ta":_emscripten_glDeleteProgram,"Sa":_emscripten_glDeleteQueriesEXT,"Ra":_emscripten_glDeleteRenderbuffers,"Qa":_emscripten_glDeleteShader,"Pa":_emscripten_glDeleteTextures,"Oa":_emscripten_glDeleteVertexArraysOES,"Na":_emscripten_glDepthFunc,"Ma":_emscripten_glDepthMask,"La":_emscripten_glDepthRangef,"Ka":_emscripten_glDetachShader,"Ja":_emscripten_glDisable,"Ia":_emscripten_glDisableVertexAttribArray,"Ha":_emscripten_glDrawArrays,"Ga":_emscripten_glDrawArraysInstancedANGLE,"Fa":_emscripten_glDrawBuffersWEBGL,"Ea":_emscripten_glDrawElements,"Da":_emscripten_glDrawElementsInstancedANGLE,"Ca":_emscripten_glEnable,"Ba":_emscripten_glEnableVertexAttribArray,"Aa":_emscripten_glEndQueryEXT,"za":_emscripten_glFinish,"ya":_emscripten_glFlush,"xa":_emscripten_glFramebufferRenderbuffer,"wa":_emscripten_glFramebufferTexture2D,"va":_emscripten_glFrontFace,"ua":_emscripten_glGenBuffers,"ta":_emscripten_glGenFramebuffers,"sa":_emscripten_glGenQueriesEXT,"ra":_emscripten_glGenRenderbuffers,"qa":_emscripten_glGenTextures,"oa":_emscripten_glGenVertexArraysOES,"na":_emscripten_glGenerateMipmap,"ma":_emscripten_glGetActiveAttrib,"la":_emscripten_glGetActiveUniform,"ka":_emscripten_glGetAttachedShaders,"ja":_emscripten_glGetAttribLocation,"ia":_emscripten_glGetBooleanv,"ha":_emscripten_glGetBufferParameteriv,"ga":_emscripten_glGetError,"fa":_emscripten_glGetFloatv,"ea":_emscripten_glGetFramebufferAttachmentParameteriv,"da":_emscripten_glGetIntegerv,"ca":_emscripten_glGetProgramInfoLog,"ba":_emscripten_glGetProgramiv,"aa":_emscripten_glGetQueryObjecti64vEXT,"$":_emscripten_glGetQueryObjectivEXT,"_":_emscripten_glGetQueryObjectui64vEXT,"Z":_emscripten_glGetQueryObjectuivEXT,"Y":_emscripten_glGetQueryivEXT,"X":_emscripten_glGetRenderbufferParameteriv,"me":_emscripten_glGetShaderInfoLog,"le":_emscripten_glGetShaderPrecisionFormat,"ke":_emscripten_glGetShaderSource,"je":_emscripten_glGetShaderiv,"ie":_emscripten_glGetString,"he":_emscripten_glGetTexParameterfv,"ge":_emscripten_glGetTexParameteriv,"fe":_emscripten_glGetUniformLocation,"ee":_emscripten_glGetUniformfv,"de":_emscripten_glGetUniformiv,"ce":_emscripten_glGetVertexAttribPointerv,"be":_emscripten_glGetVertexAttribfv,"ae":_emscripten_glGetVertexAttribiv,"$d":_emscripten_glHint,"_d":_emscripten_glIsBuffer,"Zd":_emscripten_glIsEnabled,"Yd":_emscripten_glIsFramebuffer,"Xd":_emscripten_glIsProgram,"Wd":_emscripten_glIsQueryEXT,"Vd":_emscripten_glIsRenderbuffer,"Ud":_emscripten_glIsShader,"Td":_emscripten_glIsTexture,"Sd":_emscripten_glIsVertexArrayOES,"Rd":_emscripten_glLineWidth,"Qd":_emscripten_glLinkProgram,"Pd":_emscripten_glPixelStorei,"Od":_emscripten_glPolygonOffset,"Nd":_emscripten_glQueryCounterEXT,"Md":_emscripten_glReadPixels,"Ld":_emscripten_glReleaseShaderCompiler,"Kd":_emscripten_glRenderbufferStorage,"Jd":_emscripten_glSampleCoverage,"Id":_emscripten_glScissor,"Hd":_emscripten_glShaderBinary,"Gd":_emscripten_glShaderSource,"Fd":_emscripten_glStencilFunc,"Ed":_emscripten_glStencilFuncSeparate,"Dd":_emscripten_glStencilMask,"Cd":_emscripten_glStencilMaskSeparate,"Bd":_emscripten_glStencilOp,"zd":_emscripten_glStencilOpSeparate,"yd":_emscripten_glTexImage2D,"xd":_emscripten_glTexParameterf,"wd":_emscripten_glTexParameterfv,"vd":_emscripten_glTexParameteri,"ud":_emscripten_glTexParameteriv,"td":_emscripten_glTexSubImage2D,"sd":_emscripten_glUniform1f,"rd":_emscripten_glUniform1fv,"qd":_emscripten_glUniform1i,"od":_emscripten_glUniform1iv,"nd":_emscripten_glUniform2f,"md":_emscripten_glUniform2fv,"ld":_emscripten_glUniform2i,"kd":_emscripten_glUniform2iv,"jd":_emscripten_glUniform3f,"id":_emscripten_glUniform3fv,"hd":_emscripten_glUniform3i,"gd":_emscripten_glUniform3iv,"fd":_emscripten_glUniform4f,"dd":_emscripten_glUniform4fv,"cd":_emscripten_glUniform4i,"bd":_emscripten_glUniform4iv,"ad":_emscripten_glUniformMatrix2fv,"$c":_emscripten_glUniformMatrix3fv,"_c":_emscripten_glUniformMatrix4fv,"Zc":_emscripten_glUseProgram,"Yc":_emscripten_glValidateProgram,"Xc":_emscripten_glVertexAttrib1f,"Wc":_emscripten_glVertexAttrib1fv,"Vc":_emscripten_glVertexAttrib2f,"Uc":_emscripten_glVertexAttrib2fv,"Tc":_emscripten_glVertexAttrib3f,"Sc":_emscripten_glVertexAttrib3fv,"Rc":_emscripten_glVertexAttrib4f,"Qc":_emscripten_glVertexAttrib4fv,"Pc":_emscripten_glVertexAttribDivisorANGLE,"Oc":_emscripten_glVertexAttribPointer,"Nc":_emscripten_glViewport,"Mc":_emscripten_memcpy_big,"Kc":_emscripten_request_pointerlock,"Jc":_emscripten_resize_heap,"T":_emscripten_run_script,"Ic":_emscripten_sample_gamepad_data,"Hc":_emscripten_set_click_callback_on_thread,"Gc":_emscripten_set_fullscreenchange_callback_on_thread,"Fc":_emscripten_set_gamepadconnected_callback_on_thread,"Ec":_emscripten_set_gamepaddisconnected_callback_on_thread,"Dc":_emscripten_set_keypress_callback_on_thread,"Cc":_emscripten_set_main_loop,"Ac":_emscripten_set_touchcancel_callback_on_thread,"zc":_emscripten_set_touchend_callback_on_thread,"yc":_emscripten_set_touchmove_callback_on_thread,"xc":_emscripten_set_touchstart_callback_on_thread,"wc":_exit,"vc":_glActiveTexture,"S":_glAttachShader,"k":_glBindAttribLocation,"d":_glBindBuffer,"f":_glBindFramebuffer,"R":_glBindRenderbuffer,"h":_glBindTexture,"sc":_glBlendFunc,"t":_glBufferData,"x":_glBufferSubData,"rc":_glCheckFramebufferStatus,"Q":_glClear,"P":_glClearColor,"qc":_glClearDepthf,"pc":_glCompileShader,"nc":_glCompressedTexImage2D,"mc":_glCreateProgram,"lc":_glCreateShader,"kc":_glCullFace,"s":_glDeleteBuffers,"jc":_glDeleteFramebuffers,"O":_glDeleteProgram,"ic":_glDeleteRenderbuffers,"N":_glDeleteShader,"r":_glDeleteTextures,"gc":_glDepthFunc,"M":_glDetachShader,"fc":_glDisable,"q":_glDisableVertexAttribArray,"ec":_glDrawArrays,"dc":_glDrawElements,"L":_glEnable,"j":_glEnableVertexAttribArray,"cc":_glFramebufferRenderbuffer,"p":_glFramebufferTexture2D,"ac":_glFrontFace,"o":_glGenBuffers,"$b":_glGenFramebuffers,"_b":_glGenRenderbuffers,"K":_glGenTextures,"w":_glGetAttribLocation,"Zb":_glGetFloatv,"Yb":_glGetProgramInfoLog,"J":_glGetProgramiv,"Xb":_glGetShaderInfoLog,"I":_glGetShaderiv,"l":_glGetString,"v":_glGetUniformLocation,"Vb":_glLinkProgram,"Ub":_glPixelStorei,"H":_glReadPixels,"Tb":_glRenderbufferStorage,"Sb":_glShaderSource,"G":_glTexImage2D,"e":_glTexParameteri,"Qb":_glUniform1i,"Pb":_glUniform4f,"Ob":_glUniformMatrix4fv,"u":_glUseProgram,"i":_glVertexAttribPointer,"Nb":_glViewport,"Mb":_glfwCreateWindow,"Lb":_glfwDefaultWindowHints,"Kb":_glfwDestroyWindow,"Jb":_glfwGetCursorPos,"n":_glfwGetTime,"Hb":_glfwInit,"Gb":_glfwMakeContextCurrent,"Fb":_glfwSetCharCallback,"Eb":_glfwSetCursorEnterCallback,"Db":_glfwSetCursorPosCallback,"Cb":_glfwSetDropCallback,"Bb":_glfwSetErrorCallback,"Ab":_glfwSetKeyCallback,"zb":_glfwSetMouseButtonCallback,"xb":_glfwSetScrollCallback,"wb":_glfwSetWindowIconifyCallback,"vb":_glfwSetWindowShouldClose,"ub":_glfwSetWindowSizeCallback,"tb":_glfwSwapBuffers,"F":_glfwTerminate,"g":_glfwWindowHint,"E":_llvm_stackrestore,"D":_llvm_stacksave,"sb":_nanosleep,"qb":_time,"pb":abortOnCannotGrowMemory,"a":DYNAMICTOP_PTR};var asm=Module["asm"](asmGlobalArg,asmLibraryArg,buffer);Module["asm"]=asm;var ___errno_location=Module["___errno_location"]=function(){return Module["asm"]["ne"].apply(null,arguments)};var _emscripten_GetProcAddress=Module["_emscripten_GetProcAddress"]=function(){return Module["asm"]["oe"].apply(null,arguments)};var _free=Module["_free"]=function(){return Module["asm"]["pe"].apply(null,arguments)};var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=function(){return Module["asm"]["qe"].apply(null,arguments)};var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=function(){return Module["asm"]["re"].apply(null,arguments)};var _main=Module["_main"]=function(){return Module["asm"]["se"].apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return Module["asm"]["te"].apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return Module["asm"]["Ce"].apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return Module["asm"]["De"].apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return Module["asm"]["Ee"].apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return Module["asm"]["ue"].apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return Module["asm"]["ve"].apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return Module["asm"]["we"].apply(null,arguments)};var dynCall_vidd=Module["dynCall_vidd"]=function(){return Module["asm"]["xe"].apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return Module["asm"]["ye"].apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return Module["asm"]["ze"].apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return Module["asm"]["Ae"].apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return Module["asm"]["Be"].apply(null,arguments)};Module["asm"]=asm;Module["getMemory"]=getMemory;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(Module["thisProgram"]);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status)}Module["quit"](status,new ExitStatus(status))}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run(); diff --git a/examples/web/textures/textures_to_image.wasm b/examples/web/textures/textures_to_image.wasm new file mode 100644 index 0000000..cd3ad2e Binary files /dev/null and b/examples/web/textures/textures_to_image.wasm differ -- cgit v1.2.3